📄 sm1rendr.cpp
字号:
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
*
*/
STDMETHODIMP
CSmil1Renderer::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 methods
STDMETHODIMP
CSmil1Renderer::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;
}
STDMETHODIMP
CSmil1Renderer::GetPersistentID(REF(UINT32) ulPersistentComponentID)
{
HX_RESULT rc = HXR_OK;
ulPersistentComponentID = m_pSmilDocRenderer->m_ulPersistentComponentID;
return rc;
}
STDMETHODIMP
CSmil1Renderer::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;
}
STDMETHODIMP
CSmil1Renderer::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;
}
STDMETHODIMP
CSmil1Renderer::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;
}
STDMETHODIMP
CSmil1Renderer::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;
}
STDMETHODIMP
CSmil1Renderer::GetElementStatus(UINT16 uGroupID,
UINT16 uTrackID,
UINT32 ulCurrentTime,
REF(IHXValues*) pStatus)
{
return m_pSmilDocRenderer->GetElementStatus(uGroupID,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -