当前位置: 首页>>代码示例>>C++>>正文


C++ CInterfaceList::AddTail方法代码示例

本文整理汇总了C++中CInterfaceList::AddTail方法的典型用法代码示例。如果您正苦于以下问题:C++ CInterfaceList::AddTail方法的具体用法?C++ CInterfaceList::AddTail怎么用?C++ CInterfaceList::AddTail使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在CInterfaceList的用法示例。


在下文中一共展示了CInterfaceList::AddTail方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: MuxHeader

void CDSMMuxerFilter::MuxHeader(IBitStream* pBS)
{
	CString muxer;
	muxer.Format(_T("DSM Muxer (%s)"), CString(__TIMESTAMP__));

	SetProperty(L"MUXR", CStringW(muxer));
	SetProperty(L"DATE", CStringW(CTime::GetCurrentTime().FormatGmt(_T("%Y-%m-%d %H:%M:%S"))));

	MuxFileInfo(pBS);

	POSITION pos = m_pPins.GetHeadPosition();
	while (pos) {
		CBaseMuxerInputPin* pPin = m_pPins.GetNext(pos);
		const CMediaType& mt = pPin->CurrentMediaType();

		ASSERT((mt.lSampleSize >> 30) == 0); // you don't need >1GB samples, do you?

		MuxPacketHeader(pBS, DSMP_MEDIATYPE, 5 + sizeof(GUID)*3 + mt.FormatLength());
		pBS->BitWrite(pPin->GetID(), 8);
		pBS->ByteWrite(&mt.majortype, sizeof(mt.majortype));
		pBS->ByteWrite(&mt.subtype, sizeof(mt.subtype));
		pBS->BitWrite(mt.bFixedSizeSamples, 1);
		pBS->BitWrite(mt.bTemporalCompression, 1);
		pBS->BitWrite(mt.lSampleSize, 30);
		pBS->ByteWrite(&mt.formattype, sizeof(mt.formattype));
		pBS->ByteWrite(mt.Format(), mt.FormatLength());

		MuxStreamInfo(pBS, pPin);
	}

	// resources & chapters

	CInterfaceList<IDSMResourceBag> pRBs;
	pRBs.AddTail(this);

	CComQIPtr<IDSMChapterBag> pCB = (IUnknown*)(INonDelegatingUnknown*)this;

	pos = m_pPins.GetHeadPosition();
	while (pos) {
		for (CComPtr<IPin> pPin = m_pPins.GetNext(pos)->GetConnected(); pPin; pPin = GetUpStreamPin(GetFilterFromPin(pPin))) {
			if (m_fAutoRes) {
				CComQIPtr<IDSMResourceBag> pPB = GetFilterFromPin(pPin);
				if (pPB && !pRBs.Find(pPB)) {
					pRBs.AddTail(pPB);
				}
			}

			if (m_fAutoChap) {
				if (!pCB || pCB->ChapGetCount() == 0) {
					pCB = GetFilterFromPin(pPin);
				}
			}
		}
	}

	// resources

	pos = pRBs.GetHeadPosition();
	while (pos) {
		IDSMResourceBag* pRB = pRBs.GetNext(pos);

		for (DWORD i = 0, j = pRB->ResGetCount(); i < j; i++) {
			CComBSTR name, desc, mime;
			BYTE* pData = NULL;
			DWORD len = 0;
			if (SUCCEEDED(pRB->ResGet(i, &name, &desc, &mime, &pData, &len, NULL))) {
				CStringA utf8_name = UTF16To8(name);
				CStringA utf8_desc = UTF16To8(desc);
				CStringA utf8_mime = UTF16To8(mime);

				MuxPacketHeader(pBS, DSMP_RESOURCE,
								1 +
								utf8_name.GetLength()+1 +
								utf8_desc.GetLength()+1 +
								utf8_mime.GetLength()+1 +
								len);

				pBS->BitWrite(0, 2);
				pBS->BitWrite(0, 6); // reserved
				pBS->ByteWrite(utf8_name, utf8_name.GetLength()+1);
				pBS->ByteWrite(utf8_desc, utf8_desc.GetLength()+1);
				pBS->ByteWrite(utf8_mime, utf8_mime.GetLength()+1);
				pBS->ByteWrite(pData, len);

				CoTaskMemFree(pData);
			}
		}
	}

	// chapters

	if (pCB) {
		CAtlList<CDSMChapter> chapters;
		REFERENCE_TIME rtPrev = 0;
		int len = 0;

		pCB->ChapSort();

		for (DWORD i = 0; i < pCB->ChapGetCount(); i++) {
			CDSMChapter c;
//.........这里部分代码省略.........
开发者ID:Samangan,项目名称:mpc-hc,代码行数:101,代码来源:DSMMuxer.cpp


注:本文中的CInterfaceList::AddTail方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。