⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smldoc.cpp

📁 著名的 helix realplayer 基于手机 symbian 系统的 播放器全套源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
#endif
#endif /* #if defined(HELIX_FEATURE_SMIL2_MULTIWINDOWLAYOUT) */
    HX_DELETE(m_pRegPointMap);

    HX_RELEASE(m_pPersistentLayoutStream);
    HX_RELEASE(m_pErrorMessages);

#if defined(HELIX_FEATURE_SMIL2_ANIMATION)
    removeActiveAnimations();
#endif /* #if defined(HELIX_FEATURE_SMIL2_ANIMATION) */
    HX_DELETE(m_pActiveAnimations);
    HX_DELETE(m_pAnimationMap);
    HX_DELETE(m_pAnimSiteRedrawMap);
    HX_DELETE(m_pAnimRegionRecomputeMap);
    HX_DELETE(m_pAnimTopLayoutMap);

    deleteExternalMediaMarkerList();

    HX_RELEASE(m_pSMILDefaultNamespaceStr);

    if (m_pPrefetchTrackElementMap)
    {
	CHXMapLongToObj::Iterator i;
	for (i = m_pPrefetchTrackElementMap->Begin();
		i != m_pPrefetchTrackElementMap->End(); ++i)
	{
	    CHXString* pId = (CHXString*)(*i);
	    HX_DELETE(pId);
	}
	HX_DELETE(m_pPrefetchTrackElementMap);
    }

    if (m_pIndependentPlayer)
    {
	HX_DELETE(m_pIndependentPlayer);
    }
    if (m_pChildSiteInfoMap)
    {
	HX_ASSERT(m_pChildSiteInfoMap->IsEmpty()); // /Should be empty!...
	// ...but in case it's not empty, go ahead and delete its nodes:
	CHXMapLongToObj::Iterator i = m_pChildSiteInfoMap->Begin();
	for(; i != m_pChildSiteInfoMap->End(); ++i)
	{
	    SMILChildSiteInfo* pChildSiteInfo = (SMILChildSiteInfo*)(*i);
	    delete pChildSiteInfo;
	}
	HX_DELETE(m_pChildSiteInfoMap);
    }

#if defined(_UNIX)  &&  (!(defined(_BEOS)))  &&  defined(USE_XWINDOWS)
    CHXMapPtrToPtr::Iterator i = m_siteToXDataMap.Begin();
    for(; i != m_siteToXDataMap.End(); ++i)
    {
        XData* xData = (XData*)(*i);
	delete xData;
    }
    if (m_pVisualInfo)
    {
	XFree(m_pVisualInfo);
	m_pVisualInfo = NULL;
    }

    if (m_pDisplay && m_hHyperlinkCursor)
    {
	XFreeCursor(m_pDisplay, m_hHyperlinkCursor);
	m_hHyperlinkCursor = 0;
    }
#endif    
#if defined(_MACINTOSH)
    if (m_hHyperlinkCursor)
    {
    	m_pResourceLoader->UnloadResource((Handle)m_hHyperlinkCursor);
    	m_hHyperlinkCursor = NULL;
    	
    	HX_RELEASE(m_pResourceLoader);
    }

    if (m_bResetCursor)
    {
	::InitCursor();
    }
#endif
    HX_RELEASE(m_pSoundLevelMutex);
    clearRendererMap();
    HX_DELETE(m_pMediaID2RendererMap);
    clearRendererSiteMap();
    HX_DELETE(m_pMediaID2RendererSiteMap);
    clearRendererSiteWatcherMap();
    HX_DELETE(m_pMediaID2RendererSiteWatcherMap);

    destroyAllRegions();
    HX_DELETE(m_pSiteInfoByRendererMap);
    HX_DELETE(m_pSiteWatcherMap);
}

/*
 * IUnknown methods
 */
STDMETHODIMP
CSmilDocumentRenderer::QueryInterface(REFIID riid, void** ppvObj)
{
    if(IsEqualIID(riid, IID_IUnknown))
    {
	AddRef();
	*ppvObj = this;
	return HXR_OK;
    }
    else if(IsEqualIID(riid, IID_IHXSiteUser))
    {
	HX_ASSERT(0  &&  "Huh?!  CSmilDocumentRenderer doesn't implement IHXSiteUser");
	AddRef();
	*ppvObj = (IHXSiteUser*)this;
	return HXR_OK;
    }
    else if(IsEqualIID(riid, IID_IHXRendererAdviseSink))
    {
	AddRef();
	*ppvObj = (IHXRendererAdviseSink*)this;
	return HXR_OK;
    }
    else if(IsEqualIID(riid, IID_IHXGroupSink))
    {
	AddRef();
	*ppvObj = (IHXGroupSink*)this;
	return HXR_OK;
    }
    else if(IsEqualIID(riid, IID_IHXClientAdviseSink))
    {
	AddRef();
	*ppvObj = (IHXClientAdviseSink*)this;
	return HXR_OK;
    }
    else if (IsEqualIID(riid, IID_IHXPrefetchSink))
    {
	AddRef();
	*ppvObj = (IHXPrefetchSink*)this;
	return HXR_OK;
    }
    else if (IsEqualIID(riid, IID_IHXTrackSink))
    {
	AddRef();
	*ppvObj = (IHXTrackSink*)this;
	return HXR_OK;
    }
#if defined(HELIX_FEATURE_SMIL2_MULTIWINDOWLAYOUT)
    else if (IsEqualIID(riid, IID_IHXViewPortSink))
    {
	AddRef();
	*ppvObj = (IHXViewPortSink*) this;
	return HXR_OK;
    }
#ifdef XXXMEH_DO_VIEWPORT_TLC
    else if (IsEqualIID(riid, IID_IHXViewPortSupplier))
    {
	AddRef();
	*ppvObj = (IHXViewPortSupplier*) this;
	return HXR_OK;
    }
#endif
#endif /* #if defined(HELIX_FEATURE_SMIL2_MULTIWINDOWLAYOUT) */
#if defined(BE_SITE_SUPPLIER_20010205)
    else if (IsEqualIID(riid, IID_IHXSiteSupplier))
    {
	AddRef();
	*ppvObj = (IHXSiteSupplier*) this;
	return HXR_OK;
    }
#endif /* BE_SITE_SUPPLIER_20010205 */
    else if (IsEqualIID(riid, IID_IHXMediaMarkerSink))
    {
	AddRef();
	*ppvObj = (IHXMediaMarkerSink*) this;
	return HXR_OK;
    }
    else if (IsEqualIID(riid, IID_IHXEventSink))
    {
	AddRef();
	*ppvObj = (IHXEventSink*) this;
	return HXR_OK;
    }
    else if (IsEqualIID(riid, IID_IHXErrorSink))
    {
	AddRef();
	*ppvObj = (IHXErrorSink*) this;
	return HXR_OK;
    }

    *ppvObj = NULL;
    return HXR_NOINTERFACE;
}

STDMETHODIMP_(ULONG32)
CSmilDocumentRenderer::AddRef()
{
    return InterlockedIncrement(&m_lRefCount);
}

STDMETHODIMP_(ULONG32)
CSmilDocumentRenderer::Release()
{
    if(InterlockedDecrement(&m_lRefCount) > 0)
    {
	return m_lRefCount;
    }

    delete this;
    return 0;
}

HX_RESULT
CSmilDocumentRenderer::close(CSmilRenderer* pParent)
{
    MLOG_LEAKCHECK("CSmilDocumentRenderer::close() t=%lu\n", HX_GET_BETTERTICKCOUNT());

    if (m_pHandlePendingSchedulingCallback &&
	m_pHandlePendingSchedulingCallback->m_bIsCallbackPending)
    {
	m_pHandlePendingSchedulingCallback->m_bIsCallbackPending = FALSE;
	m_pScheduler->Remove(m_pHandlePendingSchedulingCallback->m_PendingHandle);
	m_pHandlePendingSchedulingCallback->m_PendingHandle = 0;
    }
    HX_RELEASE(m_pHandlePendingSchedulingCallback);

    if (m_pHyperlinkCallback &&
	m_pHyperlinkCallback->IsCallbackPending())
    {
	m_pHyperlinkCallback->SetCallbackPending(FALSE);
	m_pScheduler->Remove(m_pHyperlinkCallback->GetCallbackHandle());
	m_pHyperlinkCallback->SetCallbackHandle(0);
    }
    HX_RELEASE(m_pHyperlinkCallback);

    if (m_pDelayedRendererCloseList)
    {
	CHXSimpleList::Iterator i = m_pDelayedRendererCloseList->Begin();
	for (; i != m_pDelayedRendererCloseList->End(); ++i)
	{
	    SMILDelayedRendererClose* pClose= (SMILDelayedRendererClose*)(*i);
	    //HX_ASSERT(FALSE); ??
	    actualRendererClosed(pClose->m_pRenderer, pClose->m_pInfo);
	    HX_RELEASE(pClose->m_pRenderer);
	    HX_RELEASE(pClose->m_pInfo);
	    HX_DELETE(pClose);
	}
    }
    HX_DELETE(m_pDelayedRendererCloseList);

    if (m_pRootLayout && m_pRootLayout->m_pSiteUser)
    {
        IUnknown* pThisUnk = NULL;
        m_pRootLayout->m_pSiteUser->QueryInterface(IID_IUnknown, (void**) &pThisUnk);
        if (pThisUnk)
        {
            pParent->HandleRemoveLayoutSiteGroup(pThisUnk);
        }
        HX_RELEASE(pThisUnk);
    }
    m_pParent = NULL;

    if(m_pEventList)
    {
	CHXSimpleList::Iterator i = m_pEventList->Begin();
	for(; i != m_pEventList->End(); ++i)
	{
	    CSmilLayoutEvent* pEvent = (CSmilLayoutEvent*)(*i);
	    delete pEvent;
	}
    }
    HX_DELETE(m_pEventList);

    removeAllPlayToAssoc();

    deleteExternalMediaMarkerList();

//    HX_DELETE(m_pRootLayout);

#if defined(HELIX_FEATURE_SMIL2_MULTIWINDOWLAYOUT)
    closeViewports();
    removeViewports();
    HX_DELETE(m_pViewportList);
#ifdef XXXMEH_DO_VIEWPORT_TLC
    clearViewportMap();
#endif
    // Remove ourselves as a view port sink
    if (m_pViewPortManager)
    {
        IHXViewPortSink* pSink = NULL;
        QueryInterface(IID_IHXViewPortSink, (void**) &pSink);
        if (pSink)
        {
            m_pViewPortManager->RemoveViewPortSink(pSink);
        }
        HX_RELEASE(pSink);
    }
    HX_RELEASE(m_pViewPortManager);
#endif /* #if defined(HELIX_FEATURE_SMIL2_MULTIWINDOWLAYOUT) */
    HX_DELETE(m_pRegPointMap);

    HX_RELEASE(m_pSMILDefaultNamespaceStr);

#if defined(HELIX_FEATURE_SMIL2_ANIMATION)
    removeActiveAnimations();
#endif /* #if defined(HELIX_FEATURE_SMIL2_ANIMATION) */
    HX_DELETE(m_pActiveAnimations);
    HX_DELETE(m_pAnimSiteRedrawMap);
    HX_DELETE(m_pAnimRegionRecomputeMap);
    HX_DELETE(m_pAnimTopLayoutMap);

    // Remove ourselves as a media marker sink
    // TRUE adds us, FALSE removes us
    addRemoveMediaMarkerSink(FALSE);
    // Are we setup as an event sink?
    if (m_bEventSinkWasSetup)
    {
        // Remove ourselves as an event sink,
        // TRUE adds us, FALSE removes us
        addRemoveEventSink(FALSE);
    }
    // Remove any renderer event sinks we have setup
    removeAllEventSinks();
    HX_DELETE(m_pEventSinkList);
    // Remove ourselve as an error sink
    addRemoveErrorSink(FALSE);

    HX_RELEASE(m_pErrorMessages);

    if (m_bRootLayoutSiteDetached)
    {
        destroyAllRegions();
    }
    
#if defined(HELIX_FEATURE_SMIL2_TRANSITIONS)
    if(m_pTransitionMap)
    {
	CHXMapStringToOb::Iterator i = m_pTransitionMap->Begin();
	for(; i != m_pTransitionMap->End(); ++i)
	{
	    CSmilTransitionInfo* pTrans = (CSmilTransitionInfo*)(*i);
	    delete pTrans;
	}
    }
    HX_DELETE(m_pTransitionMap);
#endif /* #if defined(HELIX_FEATURE_SMIL2_TRANSITIONS) */

    if (m_pActiveTransitions)
    {
	CHXSimpleList::Iterator i = m_pActiveTransitions->Begin();
	for (;i != m_pActiveTransitions->End(); ++i)
	{
	    SMILTransitionState* pState = (SMILTransitionState*)*i;
	    HX_DELETE(pState);
	}
    }
    HX_DELETE(m_pActiveTransitions);

    if(m_pGroupInfoMap)
    {
	CHXMapLongToObj::Iterator i = m_pGroupInfoMap->Begin();
	for(; i != m_pGroupInfoMap->End(); ++i)
	{
	    SMILGroupInfo* pGroupInfo = (SMILGroupInfo*)(*i);
	    delete pGroupInfo;
	}
    }
    HX_DELETE(m_pGroupInfoMap);

    if(m_pDeferredSourceMap)
    {
	CHXMapStringToOb::Iterator i = m_pDeferredSourceMap->Begin();
	for(; i != m_pDeferredSourceMap->End(); ++i)
	{
	    SMILDeferredSourceInfo* pInfo = (SMILDeferredSourceInfo*)(*i);
	    delete pInfo;
	}
    }
    HX_DELETE(m_pDeferredSourceMap);

    if(m_pDeferrededRemoveTrackMap)
    {
	CHXMapStringToOb::Iterator i = m_pDeferrededRemoveTrackMap->Begin();
	for(; i != m_pDeferrededRemoveTrackMap->End(); ++i)
	{
	    CHXString* pID = (CHXString*)(*i);
	    delete pID;
	}
    }
    HX_DELETE(m_pDeferrededRemoveTrackMap);

    if (m_pPausedAndDisabledIDMap)
    {
	CHXMapStringToOb::Iterator i = m_pPausedAndDisabledIDMap->Begin();
	for(; i != m_pPausedAndDisabledIDMap->End(); ++i)
	{
	    CHXString* pID = (CHXString*)(*i);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -