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

📄 smlrendr.cpp

📁 linux下的一款播放器
💻 CPP
📖 第 1 页 / 共 4 页
字号:
HX_RESULTCSmilRenderer::HandleRemoveLayoutSiteGroup(IUnknown* pLSG){    HX_RESULT		    rc = HXR_OK;    IHXPersistentRenderer* pPersistentParentRenderer = NULL;    pPersistentParentRenderer = m_pSmilDocRenderer->m_pPersistentParentRenderer;    // nested meta, remove layout from its parent    if (pPersistentParentRenderer)    {	rc = pPersistentParentRenderer->DetachElementLayout(pLSG);    }    else if (m_pPlayer)    {	IHXLayoutSiteGroupManager* pLSGMgr = 0;	if(HXR_OK == m_pPlayer->QueryInterface(IID_IHXLayoutSiteGroupManager, (void**)&pLSGMgr))	{	    rc = pLSGMgr->RemoveLayoutSiteGroup(pLSG);	    pLSGMgr->Release();	}    }    return rc;}HX_RESULTCSmilRenderer::HandleAttachElementLayout(IUnknown* pLSG, IHXValues* pProps){    HX_RESULT	rc = HXR_OK;    if (m_pPersistentComponentManager)    {	rc = m_pPersistentComponentManager->AttachPersistentComponentLayout(pLSG, pProps);    }    return rc;}HX_RESULTCSmilRenderer::handleSMILDocumentPacket(CSmilDocumentPacket* pPacket){    HX_RESULT rc = HXR_OK;    if(pPacket->m_version == RMA_DRIVER_VERSION)    {	CHXBuffer* pBuffer = new CHXBuffer;	pBuffer->AddRef();	BOOL bLastPacket = FALSE;	UINT32 ulDocLen = (UINT32)pPacket->m_document.GetLength();	HX_ASSERT(ulDocLen);	// /Extra safety check:	if (0 == ulDocLen)	{	    rc = HXR_UNEXPECTED;	    bLastPacket = FALSE;	}	else	{	    pBuffer->Set((const BYTE*)(const char*)pPacket->m_document,		    pPacket->m_document.GetLength());	    m_ulTotalSMILPackets++;	    bLastPacket = pPacket->m_ulTotalPackets == m_ulTotalSMILPackets;	    rc = m_pSmilDocRenderer->onPacket(pBuffer, bLastPacket);	    const char* pPktContents = (const char*)pPacket->m_document;	    while (pPktContents)	    {		// /See if there is a <metadata> tag; if so, add it and all		// the rest of the text up to </metadata> to m_metadata:		// /XXXEH- TODO: make sure we're not inside a <!--comment-->!:		// Note, however, that comments are being stripped by the		// file format, so we need only do this if the ff changes		// in this respect.		char* pMetadataTag =			(char*)strstr(pPktContents, "<metadata");		char* pMetadataEndTag =			(char*)strstr(pPktContents, "</metadata");		char* pVeryEndOfTag = pMetadataEndTag != NULL ?		    (char*)strchr(pMetadataEndTag, '>') : NULL;		if (m_bInMetadata)		{		    m_bInMetadata = (NULL == pMetadataEndTag);		    // /Concatinate all the stuff up to the end tag; if there's		    // no end tag, then concatinate the whole packet:		    if (NULL != pMetadataEndTag)		    {			if (strlen(pVeryEndOfTag) > 1)			{			    char savedChar = pVeryEndOfTag[1];			    pVeryEndOfTag[1] = NULL;			    m_pSmilDocRenderer->m_metadata += pPktContents;			    pVeryEndOfTag[1] = savedChar;			}		    }		    else		    {			m_pSmilDocRenderer->m_metadata += pPktContents;		    }		}		if (pMetadataTag)		{		    HX_ASSERT(!m_bInMetadata);		    // /In case there is another end tag (multiple metadata tags):		    if (pMetadataTag > pMetadataEndTag  &&  NULL != pMetadataEndTag)		    {			pMetadataEndTag = pVeryEndOfTag != NULL?				strstr(pVeryEndOfTag, "</metadata") : NULL;			pVeryEndOfTag = pMetadataEndTag!=NULL?				strchr(pMetadataEndTag, '>') : NULL;		    }		    // /Concatinate all the stuff up to the end tag; if there's		    // no end tag, then concatinate the whole packet:		    if (NULL != pMetadataEndTag)		    {			char* pVeryEndOfTag = strchr(pMetadataEndTag, '>');			if (strlen(pVeryEndOfTag) > 1)			{			    char savedChar = pVeryEndOfTag[1];			    pVeryEndOfTag[1] = NULL;			    m_pSmilDocRenderer->m_metadata += pMetadataTag;			    pVeryEndOfTag[1] = savedChar;			}		    }		    else		    {			m_bInMetadata = TRUE;			m_pSmilDocRenderer->m_metadata += pMetadataTag;		    }		}		pPktContents = (const char*)pVeryEndOfTag;	    }	    // /See if the <smil ...> tag had a default namespace declared	    // in it; if so, see if we recognize it.  If there is none or	    // if we don't recognize it, try an auto upgrade:	    BOOL bDefaultNamespaceRecognized = FALSE;	    const char* pDefaultNamespace =		    m_pSmilDocRenderer->getDefaultNamespace();	    if (pDefaultNamespace  &&  strlen(pDefaultNamespace)>0)	    {		UINT32 ui=0;		for (ui = 0; ui < NUM_RECOGNIZED_DEFAULT_NAMESPACES; ui++)		{		    if (0 == strcmp(			    (const char*) zm_pRecognizedDefaultNamespaces[ui],			    pDefaultNamespace) )		    {			bDefaultNamespaceRecognized = TRUE;			break;		    }		}	    }	    else	    {#if defined(HANDLE_BETA1_SMIL_1_0_STREAM)  || defined(HANDLE_SMIL_1_0_STREAM)		bDefaultNamespaceRecognized = TRUE;#else		// /No-default-namespace files go to the old renderer so we should		// never encounter this condition:		HX_ASSERT(m_pSmilDocRenderer->m_pSmilParser->m_pDefaultNamespace);#endif	    }	    if (!bDefaultNamespaceRecognized)	    {		// /We need to auto upgrade if we don't recognize the default		// namespace.  This can occur under the following conditions		// (but can not occur if there is no default namespace because		// those files will all go to the old SMIL 1.0 renderer); note		// that each of these conditions is a good basis for an AU request		// except that (3) would best serve our customers if they were		// notified of the exact reason for the AU request before it		// happened.		// /XXXEH- talk to Consumer Group about AU request dialog boxes		// showing more info.		// (1) SMIL 3.0 or higher namespace is specified (or whatever		//     version of SMIL was undefined at the time this renderer was		//     compiled).		// (2) Some proprietary namespace that might be handled by some		//     non-RealNetworks plug-in (or by another RN SMIL renderer).		// (3) if someone misspells the default namespace that this renderer		//     otherwise would recognize.		HX_ASSERT(1);		IHXUpgradeCollection* pUpColl = NULL;		if(m_pPlayer &&		   (HXR_OK == m_pPlayer->QueryInterface(IID_IHXUpgradeCollection,			(void**)&pUpColl)))		{		    CHXBuffer* pBuffer = new CHXBuffer;		    pBuffer->AddRef();		    pBuffer->SetSize(strlen(SMIL20_AND_UP_STREAM_MIME_TYPE) +			    strlen(pDefaultNamespace) + 1 + 1);		    char* pBuf = (char*)pBuffer->GetBuffer();		    strcpy(pBuf, SMIL20_AND_UP_STREAM_MIME_TYPE); /* Flawfinder: ignore */		    strcat(pBuf, "."); /* Flawfinder: ignore */		    strcat(pBuf, pDefaultNamespace); /* Flawfinder: ignore */		    pUpColl->Add(eUT_Required, pBuffer, 0, 0);		    HX_RELEASE(pBuffer);		    HX_RELEASE(pUpColl);		}		return HXR_FAIL;	    }	}	HX_RELEASE(pBuffer);	if(HXR_OK != rc)	{	    // XML parsing error	    UINT32 ulLineNumber = 0;	    UINT32 ulColumnNumber = 0;	    IHXBuffer* pErrorText = NULL;	    m_pSmilDocRenderer->getErrorInfo(ulLineNumber,		ulColumnNumber, pErrorText);	    const char* pActualErrorText = NULL;	    if(pErrorText)	    {		pActualErrorText = (const char*)pErrorText->GetBuffer();	    }	    CSmilXMLSyntaxErrorHandler errHandler(m_pContext);	    errHandler.ReportError(rc, pActualErrorText, ulLineNumber);	    HX_RELEASE(pErrorText);	}	else if(bLastPacket)	{	    HX_ASSERT(!m_bInMetadata);	    m_bInMetadata = FALSE;	    //[SMIL 1.0 compliance] Handle error from setDocument()	    // otherwise it "plays" (nothing for 20 seconds) when it	    // should halt under error conditions:	    rc = m_pSmilDocRenderer->setDocument(m_pURLFragment);	}    }    return rc;}voidCSmilRenderer::generatePreFix(){    // get the protocol/server for later...    IHXStreamSource* pSource = 0;    m_pStream->GetSource(pSource);    HX_ASSERT(pSource);    if (!pSource)    {	return;    }    const char* pURL = pSource->GetURL();    HX_ASSERT(pURL);        if (!pURL)    {	return;    }    CHXURL::GeneratePrefixRootFragment(pURL, m_urlPrefix, m_urlRoot, m_pURLFragment);    HX_RELEASE(pSource);    return;}HX_RESULTCSmilRenderer::SmilDocTrackDurationSet(UINT32 ulGroupIndex,	UINT32 ulTrackIndex, UINT32 ulDuration, UINT32 ulDelay, BOOL bIsLive){    HX_RESULT rc = HXR_FAIL;    if (m_pSmilDocRenderer)    {	rc = m_pSmilDocRenderer->TrackDurationSet(ulGroupIndex, ulTrackIndex,		ulDuration, ulDelay, bIsLive);    }    return rc;}HX_RESULTCSmilRenderer::SmilDocRepeatedTrackDurationSet(const char* pID,	UINT32 ulDuration, BOOL bIsLive){    HX_RESULT rc = HXR_FAIL;    if (m_pSmilDocRenderer)    {	rc = m_pSmilDocRenderer->RepeatedTrackDurationSet(pID, ulDuration,		bIsLive);    }    return rc;}HX_RESULTCSmilRenderer::SmilDocTrackUpdated(UINT32 ulGroupIndex, UINT32 ulTrackIndex,	IHXValues* pValues){    HX_RESULT rc = HXR_FAIL;    if (m_pSmilDocRenderer)    {	rc = m_pSmilDocRenderer->TrackUpdated(ulGroupIndex, ulTrackIndex, pValues);    }    return rc;}HX_RESULTCSmilRenderer::SmilDocRendererInitialized(IHXRenderer* pRend,	IUnknown* pStream, IHXValues* pInfo){    HX_RESULT rc = HXR_FAIL;    if (m_pSmilDocRenderer)    {	rc = m_pSmilDocRenderer->RendererInitialized(pRend, pStream, pInfo);    }    return rc;}HX_RESULTCSmilRenderer::SmilDocRendererClosed(IHXRenderer* pRend, IHXValues* pInfo){    HX_RESULT rc = HXR_FAIL;    if (m_pSmilDocRenderer)    {	rc = m_pSmilDocRenderer->RendererClosed(pRend, pInfo);    }    return rc;}HX_RESULTCSmilRenderer::SmilDocGroupAdded(UINT16 uGroupIndex, IHXGroup* pGroup){    HX_RESULT rc = HXR_FAIL;    if (m_pSmilDocRenderer)    {	rc = m_pSmilDocRenderer->GroupAdded(uGroupIndex, pGroup);    }    return rc;}HX_RESULTCSmilRenderer::SmilDocGroupRemoved(UINT16 uGroupIndex, IHXGroup* pGroup){    HX_RESULT rc = HXR_FAIL;    if (m_pSmilDocRenderer)    {	rc = m_pSmilDocRenderer->GroupRemoved(uGroupIndex, pGroup);    }    return rc;}HX_RESULTCSmilRenderer::SmilDocAllGroupsRemoved(){    HX_RESULT rc = HXR_FAIL;    if (m_pSmilDocRenderer)    {	rc = m_pSmilDocRenderer->AllGroupsRemoved();    }    return rc;}HX_RESULTCSmilRenderer::SmilDocTrackAdded(UINT16 uGroupIndex, UINT16 uTrackIndex,	IHXValues* pTrack){    HX_RESULT rc = HXR_FAIL;    if (m_pSmilDocRenderer)    {	rc = m_pSmilDocRenderer->TrackAdded(uGroupIndex, uTrackIndex, pTrack);    }    return rc;}HX_RESULTCSmilRenderer::SmilDocTrackRemoved(UINT16 uGroupIndex, UINT16 uTrackIndex,	IHXValues* pTrack){    HX_RESULT rc = HXR_FAIL;    if (m_pSmilDocRenderer)    {	rc = m_pSmilDocRenderer->TrackRemoved(uGroupIndex, uTrackIndex, pTrack);    }    return rc;}HX_RESULTCSmilRenderer::SmilDocTrackStarted(UINT16 uGroupIndex, UINT16 uTrackIndex,	    IHXValues* pTrack){    HX_RESULT rc = HXR_FAIL;    if (m_pSmilDocRenderer)    {	rc = m_pSmilDocRenderer->TrackStarted(uGroupIndex, uTrackIndex, pTrack);    }    return rc;}HX_RESULTCSmilRenderer::SmilDocTrackStopped(UINT16 uGroupIndex, UINT16 uTrackIndex,	IHXValues* pTrack){    HX_RESULT rc = HXR_FAIL;    if (m_pSmilDocRenderer)    {	rc = m_pSmilDocRenderer->TrackStopped(uGroupIndex, uTrackIndex, pTrack);    }    return rc;}HX_RESULTCSmilRenderer::SmilDocCurrentGroupSet(UINT16 uGroupIndex, IHXGroup* pGroup){    HX_RESULT rc = HXR_FAIL;    if (m_pSmilDocRenderer)    {	rc = m_pSmilDocRenderer->CurrentGroupSet(uGroupIndex, pGroup);    }    return rc;}

⌨️ 快捷键说明

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