📄 sm1rendr.cpp
字号:
if (m_bIsHigherVersionSmilStreamFromOldSMIL1FF) { if (!m_pNextGenSmilRenderer) { rc = HXR_UNEXPECTED; goto cleanup; } rc = m_pNextGenSmilRenderer->OnPreSeek(ulOldTime, ulNewTime); goto cleanup; }#endif /* defined(HELIX_FEATURE_SMIL2). */ if(m_pSmilDocRenderer) { rc = m_pSmilDocRenderer->onPreSeek(ulOldTime, ulNewTime); }#if defined(HELIX_FEATURE_SMIL2)cleanup:#endif /* defined(HELIX_FEATURE_SMIL2). */ return rc;}/////////////////////////////////////////////////////////////////////////// Method:// IHXRenderer::OnPostSeek// Purpose:// Called by client engine to inform the renderer that a seek has// just occured. The render is informed the last time for the // stream's time line before the seek, as well as the first new// time for the stream's time line after the seek.//STDMETHODIMP CSmil1Renderer::OnPostSeek(ULONG32 ulOldTime, ULONG32 ulNewTime){ HX_RESULT rc = HXR_OK;#if defined(HELIX_FEATURE_SMIL2) if (m_bIsHigherVersionSmilStreamFromOldSMIL1FF) { if (!m_pNextGenSmilRenderer) { rc = HXR_UNEXPECTED; goto cleanup; } rc = m_pNextGenSmilRenderer->OnPostSeek(ulOldTime, ulNewTime); goto cleanup; }#endif /* defined(HELIX_FEATURE_SMIL2). */#if defined(HELIX_FEATURE_SMIL2)cleanup:#endif /* defined(HELIX_FEATURE_SMIL2). */ return rc;}/////////////////////////////////////////////////////////////////////////// Method:// IHXRenderer::OnPause// Purpose:// Called by client engine to inform the renderer that a pause has// just occured. The render is informed the last time for the // stream's time line before the pause.//STDMETHODIMP CSmil1Renderer::OnPause(ULONG32 ulTime){ HX_RESULT rc = HXR_OK;#if defined(HELIX_FEATURE_SMIL2) if (m_bIsHigherVersionSmilStreamFromOldSMIL1FF) { if (!m_pNextGenSmilRenderer) { rc = HXR_UNEXPECTED; goto cleanup; } rc = m_pNextGenSmilRenderer->OnPause(ulTime); goto cleanup; }#endif /* defined(HELIX_FEATURE_SMIL2). */#if defined(HELIX_FEATURE_SMIL2)cleanup:#endif /* defined(HELIX_FEATURE_SMIL2). */ return rc;}/////////////////////////////////////////////////////////////////////////// Method:// IHXRenderer::OnBegin// Purpose:// Called by client engine to inform the renderer that a begin or// resume has just occured. The render is informed the first time // for the stream's time line after the resume.//STDMETHODIMP CSmil1Renderer::OnBegin(ULONG32 ulTime){ HX_RESULT rc = HXR_OK;#if defined(HELIX_FEATURE_SMIL2) if (m_bIsHigherVersionSmilStreamFromOldSMIL1FF) { if (!m_pNextGenSmilRenderer) { rc = HXR_UNEXPECTED; goto cleanup; } rc = m_pNextGenSmilRenderer->OnBegin(ulTime); goto cleanup; }#endif /* defined(HELIX_FEATURE_SMIL2). */#if defined(HELIX_FEATURE_SMIL2)cleanup:#endif /* defined(HELIX_FEATURE_SMIL2). */ return rc;}/////////////////////////////////////////////////////////////////////////// Method:// IHXRenderer::OnBuffering// Purpose:// Called by client engine to inform the renderer that buffering// of data is occuring. The render is informed of the reason for// the buffering (start-up of stream, seek has occured, network// congestion, etc.), as well as percentage complete of the // buffering process.//STDMETHODIMP CSmil1Renderer::OnBuffering(ULONG32 ulFlags, UINT16 unPercentComplete){ HX_RESULT rc = HXR_OK;#if defined(HELIX_FEATURE_SMIL2) if (m_bIsHigherVersionSmilStreamFromOldSMIL1FF) { if (!m_pNextGenSmilRenderer) { rc = HXR_UNEXPECTED; goto cleanup; } rc = m_pNextGenSmilRenderer->OnBuffering(ulFlags, unPercentComplete); goto cleanup; }#endif /* defined(HELIX_FEATURE_SMIL2). */#if defined(HELIX_FEATURE_SMIL2)cleanup:#endif /* defined(HELIX_FEATURE_SMIL2). */ return rc;}/////////////////////////////////////////////////////////////////////////// Method:// IHXRenderer::GetDisplayType// Purpose:// Called by client engine to ask the renderer for it's preferred// display type. When layout information is not present, the // renderer will be asked for it's prefered display type. Depending// on the display type a buffer of additional information may be // needed. This buffer could contain information about preferred// window size.//STDMETHODIMP CSmil1Renderer::GetDisplayType( REF(HX_DISPLAY_TYPE) ulFlags, REF(IHXBuffer*) pBuffer){ HX_RESULT rc = HXR_OK; ulFlags = HX_DISPLAY_NONE;#if defined(HELIX_FEATURE_SMIL2) m_bCSmil1GetDisplayTypeHasBeenCalled = TRUE; if (m_bIsHigherVersionSmilStreamFromOldSMIL1FF) { if (!m_pNextGenSmilRenderer) { rc = HXR_UNEXPECTED; goto cleanup; } rc = m_pNextGenSmilRenderer->GetDisplayType(ulFlags, pBuffer); goto cleanup; }#endif /* defined(HELIX_FEATURE_SMIL2). */#if defined(HELIX_FEATURE_SMIL2)cleanup:#endif /* defined(HELIX_FEATURE_SMIL2). */ return rc;}/************************************************************************ * Method: * IHXRenderer::OnEndofPackets * Purpose: * Called by client engine to inform the renderer that all the * packets have been delivered. However, if the user seeks before * EndStream() is called, renderer may start getting packets again * and the client engine will eventually call this function again. */STDMETHODIMP CSmil1Renderer::OnEndofPackets(void){ HX_RESULT rc = HXR_OK;#if defined(HELIX_FEATURE_SMIL2) if (m_bIsHigherVersionSmilStreamFromOldSMIL1FF) { if (!m_pNextGenSmilRenderer) { rc = HXR_UNEXPECTED; goto cleanup; } rc = m_pNextGenSmilRenderer->OnEndofPackets(); goto cleanup; }#endif /* defined(HELIX_FEATURE_SMIL2). */#if defined(HELIX_FEATURE_SMIL2)cleanup:#endif /* defined(HELIX_FEATURE_SMIL2). */ return rc;}/************************************************************************ * Method: * IHXStatistics::Init * Purpose: * Pass registry ID to the caller * */STDMETHODIMPCSmil1Renderer::InitializeStatistics( UINT32 /*IN*/ ulRegistryID){ HX_RESULT rc = HXR_OK; IHXRegistry* pRegistry = NULL;#if defined(HELIX_FEATURE_SMIL2) m_ulRegistryID = ulRegistryID; m_bCSmil1InitializeStatisticsHasBeenCalled = TRUE; if (m_bIsHigherVersionSmilStreamFromOldSMIL1FF) { if (!m_pNextGenSmilRenderer) { rc = HXR_UNEXPECTED; goto cleanup; } rc = m_pNextGenSmilRenderer->InitializeStatistics(m_ulRegistryID); goto cleanup; }#endif /* defined(HELIX_FEATURE_SMIL2). */ if (m_pContext && HXR_OK == m_pContext->QueryInterface(IID_IHXRegistry, (void**)&pRegistry)) { char szRegistryEntry[MAX_DISPLAY_NAME] = {0}; /* Flawfinder: ignore */ IHXBuffer* pszRegistryName = NULL; // Get the current registry key name if (HXR_OK == pRegistry->GetPropName(ulRegistryID, pszRegistryName)) { IHXBuffer* pValue = new CHXBuffer(); pValue->AddRef(); SafeSprintf(szRegistryEntry, MAX_DISPLAY_NAME, "%s.name", pszRegistryName->GetBuffer()); pValue->Set((const UCHAR*)zm_pName, strlen((const char*) zm_pName) + 1); pRegistry->AddStr(szRegistryEntry, pValue); HX_RELEASE(pValue); HX_RELEASE(pszRegistryName); } HX_RELEASE(pRegistry); }#if defined(HELIX_FEATURE_SMIL2)cleanup:#endif /* defined(HELIX_FEATURE_SMIL2). */ return rc;}/************************************************************************ * Method: * IHXStatistics::Update * Purpose: * Notify the client to update its statistics stored in the registry * */STDMETHODIMP CSmil1Renderer::UpdateStatistics(){ HX_RESULT rc = HXR_OK;#if defined(HELIX_FEATURE_SMIL2) if (m_bIsHigherVersionSmilStreamFromOldSMIL1FF) { if (!m_pNextGenSmilRenderer) { rc = HXR_UNEXPECTED; goto cleanup; } rc = m_pNextGenSmilRenderer->UpdateStatistics(); goto cleanup; }#endif /* defined(HELIX_FEATURE_SMIL2). */#if defined(HELIX_FEATURE_SMIL2)cleanup:#endif /* defined(HELIX_FEATURE_SMIL2). */ return rc;}// IHXPersistentRenderer methodsSTDMETHODIMPCSmil1Renderer::InitPersistent(UINT32 ulPersistentComponentID, UINT16 uPersistentGroupID, UINT16 uPersistentTrackID, IHXPersistentRenderer* pPersistentParent){ HX_RESULT rc = HXR_OK; m_ulPersistentComponentID = ulPersistentComponentID; m_uPersistentGroupID = uPersistentGroupID; m_uPersistentTrackID = uPersistentTrackID; m_pPersistentParent = pPersistentParent; if (m_pPersistentParent) { m_pPersistentParent->AddRef(); }#if defined(HELIX_FEATURE_SMIL2)#if defined(DO_INIT_PERSISTENT_ON_NEXTGEN_SMILREND) m_bCSmil1InitPersistenHasBeenCalled = TRUE; HX_ASSERT (!m_bIsHigherVersionSmilStreamFromOldSMIL1FF);#endif#endif /* defined(HELIX_FEATURE_SMIL2). */ rc = m_pSmilDocRenderer->InitPersistent(ulPersistentComponentID, uPersistentGroupID, uPersistentTrackID, pPersistentParent); return rc;}STDMETHODIMPCSmil1Renderer::GetPersistentID(REF(UINT32) ulPersistentComponentID){ HX_RESULT rc = HXR_OK; ulPersistentComponentID = m_pSmilDocRenderer->m_ulPersistentComponentID; return rc;}STDMETHODIMPCSmil1Renderer::GetPersistentProperties(REF(IHXValues*) pProperties){ HX_RESULT rc = HXR_OK; pProperties = new CHXHeader(); pProperties->AddRef(); pProperties->SetPropertyULONG32("PersistentType", m_persistentType); pProperties->SetPropertyULONG32("PersistentVersion", m_ulPersistentVersion); return rc;}STDMETHODIMPCSmil1Renderer::GetElementProperties(UINT16 uGroupID, UINT16 uTrackID, REF(IHXValues*) pProperties){ HX_RESULT rc = HXR_OK;#if defined(HELIX_FEATURE_SMIL2) m_bCSmil1GetElementPropertiesHasBeenCalled = TRUE; m_uGroupID = uGroupID; m_uTrackID = uTrackID; if (m_bIsHigherVersionSmilStreamFromOldSMIL1FF) { if (!m_pNextGenSmilRenderer) { rc = HXR_UNEXPECTED; goto cleanup; } rc = m_pNextGenSmilRenderer->GetElementProperties( uGroupID, uTrackID, pProperties); HX_ASSERT(0 && "XXXEH- call on both sm1 and sm2 rends?"); }#endif /* defined(HELIX_FEATURE_SMIL2). */ rc = m_pSmilDocRenderer->GetElementProperties(uGroupID, uTrackID, pProperties);#if defined(HELIX_FEATURE_SMIL2)cleanup:#endif /* defined(HELIX_FEATURE_SMIL2). */ return rc;}STDMETHODIMPCSmil1Renderer::AttachElementLayout(UINT16 uGroupID, UINT16 uTrackID, IHXRenderer* pRenderer, IHXStream* pStream, IHXValues* pProps){ HX_RESULT rc = HXR_OK;#if defined(HELIX_FEATURE_SMIL2) if (m_bIsHigherVersionSmilStreamFromOldSMIL1FF) { if (!m_pNextGenSmilRenderer) { rc = HXR_UNEXPECTED; goto cleanup; } rc = m_pNextGenSmilRenderer->AttachElementLayout(uGroupID, uTrackID, pRenderer, pStream, pProps); HX_ASSERT(0 && "XXXEH- call on both sm1 and sm2 rends?"); }#endif /* defined(HELIX_FEATURE_SMIL2). */ rc = m_pSmilDocRenderer->AttachElementLayout(uGroupID, uTrackID, pRenderer, pStream, pProps);#if defined(HELIX_FEATURE_SMIL2)cleanup:#endif /* defined(HELIX_FEATURE_SMIL2). */ return rc;}STDMETHODIMPCSmil1Renderer::DetachElementLayout(IUnknown* pLSG){ HX_RESULT rc = HXR_OK;#if defined(HELIX_FEATURE_SMIL2) m_bCSmil1RemoveLayoutSiteGroupHasBeenCalled = TRUE; if (m_bIsHigherVersionSmilStreamFromOldSMIL1FF) { if (!m_pNextGenSmilRenderer) { rc = HXR_UNEXPECTED; goto cleanup; } rc = m_pNextGenSmilRenderer->DetachElementLayout(pLSG); HX_ASSERT(0 && "XXXEH- call on both sm1 and sm2 rends?"); }#endif /* defined(HELIX_FEATURE_SMIL2). */ rc = m_pSmilDocRenderer->DetachElementLayout(pLSG);#if defined(HELIX_FEATURE_SMIL2)cleanup:#endif /* defined(HELIX_FEATURE_SMIL2). */ return rc;}STDMETHODIMPCSmil1Renderer::GetElementStatus(UINT16 uGroupID,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -