📄 perscmgr.cpp
字号:
{ m_pSourceInfo->Reset(); } return;}voidHXPersistentComponent::Reset(void){ HXPersistentComponent* pHXPersistentComponent = NULL; CHXSimpleList::Iterator i; if (m_pPersistentChildList) { for(i = m_pPersistentChildList->Begin();i != m_pPersistentChildList->End();++i) { pHXPersistentComponent = (HXPersistentComponent*)(*i); pHXPersistentComponent->Reset(); } } m_pComponentManager->m_pPlayer->m_pSourceMap->RemoveKey(m_pSourceInfo->m_pSource); m_pComponentManager->m_pPlayer->m_bSourceMapUpdated = TRUE; m_pSourceInfo->m_bIsPersistentSource = FALSE; m_pSourceInfo->Stop(); m_bToBeClosed = TRUE; return;}voidHXPersistentComponent::Remove(){ HXPersistentComponent* pHXPersistentComponent = NULL; CHXSimpleList::Iterator i; if (m_pPersistentChildList) { for(i = m_pPersistentChildList->Begin();i != m_pPersistentChildList->End();++i) { pHXPersistentComponent = (HXPersistentComponent*)(*i); pHXPersistentComponent->Remove(); HX_RELEASE(pHXPersistentComponent); } m_pPersistentChildList->RemoveAll(); } if (m_pSourceInfo) { HX_ASSERT(!m_pSourceInfo->m_bIsPersistentSource); m_pSourceInfo->CloseRenderers(); HX_DELETE(m_pSourceInfo); } HX_RELEASE(m_pProperties); HX_RELEASE(m_pRendererAdviseSink); HX_RELEASE(m_pGroupSink); HX_RELEASE(m_pPersistentRenderer); return;}HXPersistentComponentManager::HXPersistentComponentManager(HXPlayer* pPlayer) : m_lRefCount(0) , m_ulComponentIndex(0) , m_nCurrentGroup(0) , m_pPlayer(pPlayer) , m_pRootPersistentComponent(NULL){ HX_ADDREF(m_pPlayer);}HXPersistentComponentManager::~HXPersistentComponentManager(void){ Close(); HX_RELEASE(m_pPlayer);}/* * IUnknown methods */STDMETHODIMP HXPersistentComponentManager::QueryInterface(REFIID riid, void** ppvObj){ QInterfaceList qiList[] = { { GET_IIDHANDLE(IID_IHXPersistentComponentManager), (IHXPersistentComponentManager*)this }, { GET_IIDHANDLE(IID_IHXGroupSink), (IHXGroupSink*)this }, { GET_IIDHANDLE(IID_IUnknown), (IUnknown*)(IHXPersistentComponentManager*)this }, }; return ::QIFind(qiList, QILISTSIZE(qiList), riid, ppvObj);}STDMETHODIMP_(ULONG32) HXPersistentComponentManager::AddRef(){ return InterlockedIncrement(&m_lRefCount);}STDMETHODIMP_(ULONG32) HXPersistentComponentManager::Release(){ if (InterlockedDecrement(&m_lRefCount) > 0) { return m_lRefCount; } delete this; return 0;}/************************************************************************ * Method: * IHXPersistentComponentManager::CreatePersistentComponent * Purpose: * create persistent component */STDMETHODIMPHXPersistentComponentManager::CreatePersistentComponent(REF(IHXPersistentComponent*) pPersistentComponent){ pPersistentComponent = new HXPersistentComponent(this); if (!pPersistentComponent) { return HXR_OUTOFMEMORY; } return HXR_OK;}/************************************************************************ * Method: * IHXPersistentComponentManager::AddPersistentComponent * Purpose: * add persistent component */STDMETHODIMPHXPersistentComponentManager::AddPersistentComponent(IHXPersistentComponent* pPersistentComponent){ HX_RESULT rc = HXR_OK; BOOL bFound = FALSE; HXSource* pSource = NULL; SourceInfo* pSourceInfo = NULL; RendererInfo* pRendInfo = NULL; HXPersistentComponent* pHXPersistentComponent = NULL; HXPersistentComponent* pHXPersistentParentComponent = NULL; IHXValues* pProperties = NULL; IHXGroup* pGroup = NULL; IHXPersistentComponent* pPersistentParentComponent = NULL; IHXPersistentRenderer* pPersistentRenderer = NULL; IHXRenderer* pRenderer = NULL; CHXMapPtrToPtr::Iterator ndxSource; CHXMapLongToObj::Iterator ndxRend; pHXPersistentComponent = (HXPersistentComponent*)pPersistentComponent; if (!pHXPersistentComponent || !pHXPersistentComponent->m_bInitialized) { rc = HXR_FAILED; goto cleanup; } pPersistentRenderer = pHXPersistentComponent->m_pPersistentRenderer; if (HXR_OK != pPersistentRenderer->QueryInterface(IID_IHXRenderer, (void**)&pRenderer)) { rc = HXR_INVALID_PARAMETER; goto cleanup; } // find component's source info - better way? ndxSource = m_pPlayer->m_pSourceMap->Begin(); for (; ndxSource != m_pPlayer->m_pSourceMap->End() && !bFound; ++ndxSource) { pSourceInfo = (SourceInfo*)(*ndxSource); pSource = pSourceInfo->m_pSource; ndxRend = pSourceInfo->m_pRendererMap->Begin(); for (; ndxRend != pSourceInfo->m_pRendererMap->End(); ++ndxRend) { pRendInfo = (RendererInfo*) (*ndxRend); if (pRendInfo->m_pRenderer == pRenderer) { bFound = TRUE; break; } } } if (!bFound) { rc = HXR_FAILED; goto cleanup; } if (!m_pRootPersistentComponent) { m_ulComponentIndex = 0; m_pRootPersistentComponent = pHXPersistentComponent; m_pRootPersistentComponent->AddRef(); // XXX HP TBD - when we support timing attributes on a SMIL URL // for now, we resets all timing attributes on the root persistent // component since there could be a case when the same timing values // are specified in a CGI URL sent to the player if (pSourceInfo && pSourceInfo->m_pSource) { IHXValues* pValues = new CHXHeader(); pValues->AddRef(); pValues->SetPropertyULONG32("Start", 0); pValues->SetPropertyULONG32("End", 0); pValues->SetPropertyULONG32("Delay", 0); pValues->SetPropertyULONG32("Duration", 0); pSourceInfo->m_pSource->UpdatePlayTimes(pValues); HX_RELEASE(pValues); } } else if (HXR_OK == GetPersistentComponent(pSourceInfo->m_ulPersistentComponentID, pPersistentParentComponent)) { pHXPersistentParentComponent = (HXPersistentComponent*)pPersistentParentComponent; // XXX HP // to workaround the screwed-up layout handling within nested meta, we call // CleanupLayout() on the alternated persistent source if we haven't called // CleanupLayout() yet. this is a no-worse-than-before temporary solution. // REMOVE THIS AFTER PROPERLY HANDLING LAYOUT WITHIN NESTED META if (pSourceInfo->m_bAltURL && !pHXPersistentParentComponent->m_bCleanupLayoutCalled) { m_pPlayer->CleanupLayout(); pHXPersistentParentComponent->m_bCleanupLayoutCalled = TRUE; } if (!pHXPersistentParentComponent->m_pPersistentChildList) { pHXPersistentParentComponent->m_pPersistentChildList = new CHXSimpleList(); } pHXPersistentParentComponent->m_pPersistentChildList->AddTail(pHXPersistentComponent); pHXPersistentComponent->AddRef(); pHXPersistentComponent->m_pPersistentParent = pHXPersistentParentComponent; pHXPersistentParentComponent->AddRef(); } pSourceInfo->m_bIsPersistentSource = TRUE; if (HXR_OK == pHXPersistentComponent->m_pPersistentRenderer->GetPersistentProperties(pProperties)) { pProperties->GetPropertyULONG32("PersistentType", pHXPersistentComponent->m_ulPersistentType); } HX_RELEASE(pProperties); pSourceInfo->m_ulPersistentComponentSelfID = m_ulComponentIndex; // new persistent info pHXPersistentComponent->m_pSourceInfo = pSourceInfo; pHXPersistentComponent->m_ulComponentID = m_ulComponentIndex; // get the persistent properties(track properties) if (HXR_OK == m_pPlayer->m_pGroupManager->GetGroup(pSourceInfo->m_uGroupID, pGroup)) { pGroup->GetTrack(pSourceInfo->m_uTrackID, pHXPersistentComponent->m_pProperties); } HX_RELEASE(pGroup); pPersistentRenderer->InitPersistent(m_ulComponentIndex, pSourceInfo->m_uGroupID, pSourceInfo->m_uTrackID, pHXPersistentParentComponent?pHXPersistentParentComponent->m_pPersistentRenderer:((IHXPersistentRenderer*) NULL)); m_ulComponentIndex++; m_pPlayer->m_pGroupManager->PersistentComponentAdded(pSourceInfo->m_uGroupID, pSourceInfo->m_uTrackID); cleanup: HX_RELEASE(pPersistentParentComponent); HX_RELEASE(pRenderer); return rc;}/************************************************************************ * Method: * IHXPersistentComponentManager::RemovePersistentComponent * Purpose: * remove persistent component */STDMETHODIMPHXPersistentComponentManager::RemovePersistentComponent(UINT32 ulPersistentComponentID){ HX_RESULT rc = HXR_OK; LISTPOSITION lPosition = NULL; HXPersistentComponent* pHXPersistentParentComponent = NULL; HXPersistentComponent* pHXPersistentComponent = NULL; IHXPersistentComponent* pPersistentComponent = NULL; if (HXR_OK == GetPersistentComponent(ulPersistentComponentID, pPersistentComponent)) { pHXPersistentComponent = (HXPersistentComponent*)pPersistentComponent; pHXPersistentParentComponent = pHXPersistentComponent->m_pPersistentParent; if (pHXPersistentParentComponent) { pHXPersistentComponent->Remove(); HX_ASSERT(pHXPersistentParentComponent->m_pPersistentChildList && pHXPersistentParentComponent->m_pPersistentChildList->GetCount()); lPosition = pHXPersistentParentComponent->m_pPersistentChildList->Find(pHXPersistentComponent); HX_ASSERT(lPosition); pHXPersistentParentComponent->m_pPersistentChildList->RemoveAt(lPosition); HX_RELEASE(pHXPersistentComponent); } } HX_RELEASE(pPersistentComponent); if (m_pRootPersistentComponent && m_pRootPersistentComponent->m_ulComponentID == ulPersistentComponentID) { HX_RELEASE(m_pRootPersistentComponent); } return rc;}/************************************************************************ * Method: * IHXPersistentComponentManager::GetPersistentComponent * Purpose: * get persistent component information */STDMETHODIMPHXPersistentComponentManager::GetPersistentComponent(UINT32 ulPersistentComponentID, REF(IHXPersistentComponent*) pPersistentComponent){ HX_RESULT rc = HXR_FAILED; pPersistentComponent = NULL; if (m_pRootPersistentComponent) { rc = m_pRootPersistentComponent->GetPersistentComponent(ulPersistentComponentID, pPersistentComponent); } return rc;}/************************************************************************ * Method: * IHXPersistentComponentManager::AttachPersistentComponentLayout * Purpose: * get persistent component information */STDMETHODIMPHXPersistentComponentManager::AttachPersistentComponentLayout(IUnknown* pLSG, IHXValues* pProps){ HX_RESULT rc = HXR_OK; IHXSiteUser* pSiteUser = NULL; if (m_pPlayer) {#if defined(HELIX_FEATURE_VIDEO) if (HXR_OK == pLSG->QueryInterface(IID_IHXSiteUser, (void**)&pSiteUser)) { rc = m_pPlayer->m_pSiteManager->HookupSingleSiteByPlayToFrom(pSiteUser, pProps, FALSE); } HX_RELEASE(pSiteUser);#endif //HELIX_FEATURE_VIDEO } return rc;}/************************************************************************* Method:* IHXGroupSink::GroupAdded* Purpose:* Notification of a new group being added to the presentation.*/STDMETHODIMPHXPersistentComponentManager::GroupAdded(UINT16 /*IN*/ uGroupIndex, IHXGroup* /*IN*/ pGroup){ HX_RESULT rc = HXR_OK; UINT32 ulPersistentComponentID = 0; IHXValues* pProperties = NULL; IHXGroupSink* pGroupSink = NULL; IHXPersistentComponent* pPersistentComponent = NULL;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -