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

📄 sm1doc.cpp

📁 linux下的一款播放器
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	return rc;    }    if(m_bRootLayoutWidthSet)    {	if(bLeftIsPercent)	{	    ulLeft = (UINT32)(((float)ulLeft/100.0) * m_ulRootLayoutWidth);	}	if(bWidthIsPercent)	{	    ulWidth = (UINT32)(((float)ulWidth/100.0) * m_ulRootLayoutWidth);	}    }    if(m_bRootLayoutHeightSet)    {	if(bTopIsPercent)	{	    ulTop = (UINT32)(((float)ulTop/100.0) * m_ulRootLayoutHeight);	}	if(bHeightIsPercent)	{	    ulHeight = (UINT32)(((float)ulHeight/100.0) * m_ulRootLayoutHeight);	}    }    if(m_ulNoRootLayoutHeight < (ulTop + ulHeight))    {	m_ulNoRootLayoutHeight = ulTop + ulHeight;    }    if(m_ulNoRootLayoutWidth < (ulLeft + ulWidth))    {	m_ulNoRootLayoutWidth =  ulLeft + ulWidth;    }    //[SMIL 1.0 compliance] Helps fix PR 16542:    if(m_pSmilParser)    {	//If we're in full-compliance mode and someone enters a	// width="0" or width="0%", we should leave it as 0.  We	// know that they omitted width or height (which is returned as 0	// from parseDimension), if the return value is HXR_FAIL:	if (!ulWidth  &&  HXR_FAIL == rsltW)	{	    bWidthUnspecified = TRUE;	}	if (!ulHeight  &&  HXR_FAIL == rsltH)	{	    bHeightUnspecified = TRUE;	}    }    pRect->left = ulLeft;    pRect->top = ulTop;    pRect->right = ulLeft + ulWidth;    pRect->bottom = ulTop + ulHeight;    return rc;}HX_RESULTCSmil1DocumentRenderer::handleRegion(CSmil1Region* pElement){    HX_RESULT rc = HXR_OK;    HXxRect rect;    rect.left = 0;    rect.right = 0;    rect.top = 0;    rect.bottom = 0;    BOOL bWidthUnspecified, bHeightUnspecified;    if(HXR_OK != regionToRect(pElement, &rect,	    //[SMIL 1.0 compliance] Helps fix PR 16542; these are passed	    // by reference and set to TRUE if width or height (respectively)	    // is not explicitly set:	    bWidthUnspecified, bHeightUnspecified))    {	rc = HXR_FAIL;    }    else    {	CSmil1BasicRegion* pRegion = new CSmil1BasicRegion(pElement->m_pNode->m_id, rect, 	    pElement->m_zIndex, pElement->m_fit, pElement->m_ulBgColor,	    pElement->m_bBgColorSet, FALSE,	    bWidthUnspecified, bHeightUnspecified);	(*m_pRegionMap)[(const char*)pElement->m_pNode->m_id] = pRegion;    }    return rc;}HX_RESULTCSmil1DocumentRenderer::handleRootLayout(CSmil1RootLayout* pElement){    HX_RESULT rc = HXR_OK;    m_bRootLayoutWidthSet = !pElement->m_bWidthUnspecified;    m_bRootLayoutHeightSet = !pElement->m_bHeightUnspecified;    m_ulRootLayoutHeight = pElement->m_ulHeight;    m_ulRootLayoutWidth = pElement->m_ulWidth;    m_ulRootLayoutBGColor = pElement->m_ulBgColor;    return rc;}HX_RESULTCSmil1DocumentRenderer::handleAddGroup(CSmil1AddGroup* pElement){    HX_RESULT	rc = HXR_OK;    if (m_bInRAM20 && !m_bLastGroupInRAM20 && m_ulGroupIndex)    {	return rc;    }    if(!m_pGroupMap)    {	m_pGroupMap = new CHXMapLongToObj;    }    IHXPlayer* pPlayer = m_pParent->getPlayer();    IHXGroupManager* pMgr = 0;    if(HXR_OK == pPlayer->QueryInterface(IID_IHXGroupManager, (void**)&pMgr))    {	IHXGroup* pGroup = NULL;	IHXGroup2* pGroup2 = NULL;	if (m_pParent->m_bUseNestedMeta && 0 == m_ulGroupIndex)	{	    if (m_bLastGroupInRAM20)	    {		rc = pMgr->CreateGroup(pGroup);	    }	    else	    {		HX_ASSERT(pMgr->GetGroupCount());		rc = pMgr->GetCurrentGroup(m_uGroupIndexWithin);		rc = pMgr->GetGroup(m_uGroupIndexWithin, pGroup);	    }	}	else	{	    rc = pMgr->CreateGroup(pGroup);	}	if(HXR_OK == rc)		    // release pGroup when m_pGroupMap is destructed	{	    CHXHeader* pGroupValues = new CHXHeader;	    pGroupValues->AddRef();	    if(pElement->m_ulDuration != (UINT32)-1)	    {		pGroupValues->SetPropertyULONG32("duration", pElement->m_ulDuration);	    }	    pGroupValues->SetPropertyULONG32("total_tracks", pElement->m_nTotalTracks);	    pGroupValues->SetPropertyULONG32("initial_tracks", pElement->m_nInitTracks);	   	    pGroupValues->SetPropertyULONG32("PersistentComponentID", m_ulPersistentComponentID);	    	    if (m_bLastGroupInRAM20)	    {		pGroupValues->SetPropertyULONG32("LastGroupInRAM20", 1);	    }	    // copy all the node values to group values	    IHXValues* pValues = pElement->m_pValues;	    if(pValues)	    {		IHXBuffer* pBuf = NULL;		const char* pName = NULL;		HX_RESULT res = 		    pValues->GetFirstPropertyCString(pName, pBuf);		while(HXR_OK == res)		{		    pGroupValues->SetPropertyCString(pName, pBuf);		    HX_RELEASE(pBuf);		    res = pValues->GetNextPropertyCString(pName, pBuf);		}	    }	    pGroup->SetGroupProperties(pGroupValues);	    if (HXR_OK == pGroup->QueryInterface(IID_IHXGroup2, (void**)&pGroup2))	    {		pGroup2->SetPersistentComponentProperties(m_ulPersistentComponentID,							  pGroupValues);	    }	    HX_RELEASE(pGroup2);	    HX_RELEASE(pGroupValues);	    if (m_pParent->m_bUseNestedMeta && 0 == m_ulGroupIndex)	    {		if (m_bLastGroupInRAM20)		{		    pMgr->AddGroup(pGroup);		}		else		{		    GroupAdded(m_uGroupIndexWithin, pGroup);		}	    }	    else	    {		pMgr->AddGroup(pGroup);	    }	    	    m_ulTrackIndex = 0;	    m_ulGroupIndex++;	    (*m_pGroupMap)[pElement->m_nGroup] = pGroup;	}    }    HX_RELEASE(pMgr);    return rc;}voidCSmil1DocumentRenderer::setProperty(IHXValues* pValues,     const char* pName, const char* pValue){    IHXBuffer* pBuf = 0;    IHXCommonClassFactory* pFactory = m_pParent->getFactory();    if(HXR_OK == pFactory->CreateInstance(CLSID_IHXBuffer,    	    (void**)&pBuf))    {	pBuf->Set((BYTE*)pValue, strlen(pValue)+1);	pValues->SetPropertyCString(pName, pBuf);	pBuf->Release();    }}HX_RESULTCSmil1DocumentRenderer::convertURL(const char* pURL, CHXString& newURL){    CHXURL urlObj(pURL);    IHXValues* pHeader = urlObj.GetProperties();    IHXBuffer* pBuffer = NULL;    if(!pHeader)    {	return HXR_FAIL;    }    if(HXR_OK == pHeader->GetPropertyBuffer(PROPERTY_SCHEME, pBuffer))    {	// fully qualified URL	newURL = pURL;	HX_RELEASE(pBuffer);    }    else    {	// relative URL	// if it starts with '/', make it relative to the root of 	// the URL prefix	if(*pURL == '/')	{	    newURL = m_pParent->getURLRoot() + pURL;	}	else if (strnicmp(pURL, URL_COMMAND, sizeof(URL_COMMAND) - 1) == 0)	{	    newURL = pURL;	}	else	{	    newURL = m_pParent->getURLPrefix() + pURL;	}    }    HX_RELEASE(pHeader);    return HXR_OK;}HX_RESULTCSmil1DocumentRenderer::handleSource(CSmil1Source* pElement){    HX_RESULT rc = HXR_OK;    CHXString urlString;    convertURL(pElement->m_src, urlString);    if (!m_pRepeatIDMap)    {	m_pRepeatIDMap = new CHXMapStringToOb;    }    IHXGroup* pGroup = 0;    if(m_pGroupMap &&        m_pGroupMap->Lookup(pElement->m_pNode->m_nGroup, (void*&)pGroup))    {	IHXCommonClassFactory* pFactory = m_pParent->getFactory();	IHXValues* pValues = 0;	if(HXR_OK == pFactory->CreateInstance(CLSID_IHXValues,		(void**)&pValues))	{	    pValues->SetPropertyULONG32("PersistentComponentID", m_ulPersistentComponentID);	   	    setProperty(pValues, "url", urlString);	    setProperty(pValues, "id", pElement->m_pNode->m_id);	    setProperty(pValues, "repeatid", pElement->m_pNode->m_repeatid);	    setProperty(pValues, "playto", pElement->m_region);	    if(pElement->m_region.GetLength() > 0)	    {		// save original region name in track values		setProperty(pValues, "region", pElement->m_region);	    }	    setProperty(pValues, "fill", pElement->m_fill);	    setProperty(pValues, "track-hint", pElement->m_pNode->m_trackHint);	    UINT32 ulDelay = 0;	    if(pElement->m_ulDelay != (UINT32)-1)	    {		//if(pElement->m_ulBeginOffset != (UINT32)-1)		//{		//    pValues->SetPropertyULONG32("delay", pElement->m_ulDelay +		//			    pElement->m_ulBeginOffset);		//}		//else		//{		    ulDelay = pElement->m_ulDelay + m_ulPersistentComponentDelay;		//}	    }	    else	    {		ulDelay = m_ulPersistentComponentDelay;	    }	    if (ulDelay)	    {		pValues->SetPropertyULONG32("delay", ulDelay);	    }	    if(pElement->m_ulDuration != (UINT32)-1)	    {		pValues->SetPropertyULONG32("duration", pElement->m_ulDuration);	    }	    if(pElement->m_ulMaxDuration != (UINT32)-1)	    {		pValues->SetPropertyULONG32("maxduration", pElement->m_ulMaxDuration);	    }	    if(pElement->m_ulClipBegin != (UINT32)-1)	    {		pValues->SetPropertyULONG32("start", pElement->m_ulClipBegin);	    }	    if(pElement->m_ulClipEnd != (UINT32)-1)	    {		pValues->SetPropertyULONG32("end", pElement->m_ulClipEnd);	    }	    if (pElement->m_pNode->m_repeatTag !=		RepeatUnknown)	    {		pValues->SetPropertyULONG32("repeatTag", pElement->m_pNode->m_repeatTag);	    }	    if (pElement->m_bIndefiniteDuration)	    {		pValues->SetPropertyULONG32("indefiniteduration", TRUE);	    }	    	    // add arbitrary name-value pairs to track	    if(pElement->m_pNode->m_pValues)	    {		IHXValues* pSrcValues = pElement->m_pNode->m_pValues;		const char* pName = 0;		IHXBuffer* pValue = 0;		HX_RESULT rCode = pSrcValues->GetFirstPropertyCString(		    pName, pValue);		while(HXR_OK == rCode)		{		    // skip the values we already have or have overridden...		    if((strcasecmp(pName, "url") != 0) &&		       (strcasecmp(pName, "id") != 0) &&		       (strcasecmp(pName, "playto") != 0) &&		       (strcasecmp(pName, "fill") != 0))		    {			setProperty(pValues, pName, 			    (const char*)pValue->GetBuffer());		    }		    HX_RELEASE(pValue);		    rCode = pSrcValues->GetNextPropertyCString(			pName, pValue);		}		HX_RELEASE(pValue);	    }#ifdef _DEBUG	    // just resolve this puppy at the outset and send 	    // to an output file	    if(m_bShowDependencies)	    {		FILE* fp = fopen(SMILDEPFILE, "a");		if(fp)		{		    fprintf(fp, "src %s url %s group %d delay %ld\n",			(const char*)pElement->m_pNode->m_id, 			(const char*)urlString,			pElement->m_pNode->m_nGroup,			(pElement->m_ulBeginOffset != (UINT32)-1) ?			    pElement->m_ulDelay + pElement->m_ulBeginOffset :			    pElement->m_ulDelay);		    fclose(fp);		}		// determine duration resolution		// NOTE - this will give lame results 		// for values that exceed ulNominalDuration		const UINT32 ulNominalDuration = 60000; // 1 min nominal		UINT32 ulDuration = ulNominalDuration;		if(pElement->m_ulClipEnd != (UINT32)-1)		{		    ulDuration = pElement->m_ulClipEnd;		}		if(pElement->m_ulDuration != (UINT32)-1)		{		    ulDuration = pElement->m_ulDuration;		}		if(pElement->m_ulBeginOffset != (UINT32)-1)		{		    ulDuration += pElement->m_ulBeginOffset;		}		if(pElement->m_ulEndOffset != (UINT32)-1)		{		    ulDuration -= pElement->m_ulEndOffset;		}		if(pElement->m_ulClipBegin != (UINT32)-1)		{		    ulDuration -= pElement->m_ulClipBegin;		}		m_pSmilParser->durationResolved(pElement->m_pNode->m_id, ulDuration);	    }	    else	    {#if defined(PRE_SHAZAM_SMIL_1_0_CODE)		IHXGroup* pTempGroup = NULL;		if (m_pRepeatIDMap->Lookup(pElement->m_pNode->m_repeatid, (void*&)pTempGroup))		{		    IHXGroup2* pTempGroup2 = NULL;		    if (HXR_OK == pTempGroup->QueryInterface(IID_IHXGroup2, (void**)&pTempGroup2))		    {			pTempGroup2->AddRepeatTrack(pValues);		    }		    HX_RELEASE(pTempGroup2);		}		else#else		// /The following was added for SHAZAM since		// IHXGroup2's AddRepeatTrack() has been deprecated		// in favor of calling IHXTrack's AddTrack():		BOOL bRepeatTrackHandled = FALSE;		SMIL1PlayToAssoc*    pPlayToAssoc = NULL; 		if(m_pPlayToAssocList)		{		    CHXSimpleList::Iterator i = m_pPlayToAssocList->Begin();		    for ( ;i!=m_pPlayToAssocList->End()  &&  !bRepeatTrackHandled; ++i)		    {			SMIL1PlayToAssoc* pThisAssoc = (SMIL1PlayToAssoc*)(*i);			if (pThisAssoc->m_repeatid ==				pElement->m_pNode->m_repeatid)			{			    IHXGroup2* pGroup2 = NULL;			    IHXTrack*	pHXTrack = NULL;			    if (HXR_OK == pGroup->QueryInterface(IID_IHXGroup2,				    (void**)&pGroup2))			    {				if (HXR_OK == pGroup2->GetIHXTrack(					pThisAssoc->m_uTrackIndex, pHXTrack)  &&					pHXTrack)				{				    pHXTrack->AddRepeat(pValues);				    bRepeatTrackHandled = TRUE;				}				HX_RELEASE(pHXTrack);			    }			    HX_RELEASE(pGroup2);			}		    }		}		if (!bRepeatTrackHandled)#endif		{		    (*m_pRepeatIDMap)[pElement->m_pNode->m_repeatid] = pGroup;		    pGroup->AddTrack(pValues);		}

⌨️ 快捷键说明

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