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

📄 sm1rendr.cpp

📁 著名的 helix realplayer 基于手机 symbian 系统的 播放器全套源代码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
        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 + -