1
本質上,我正在構建一個HDV捕獲圖。我在圖形生成器中運行圖形,並且運行良好。圖形生成器圖可以看到here。在代碼中,迄今爲止的圖應該是HDV Camera - > Demultiplexer - > FFDshow。但是我得到了一個VFW_E_NO_ACCEPTABLE_TYPES「這些引腳之間沒有公共媒體類型。」錯誤。我曾嘗試在mt結構中使用不同的子媒體類型,但沒有運氣。連接IMPEG2DEMULTIPLEXER和ffdshow Directshow過濾器
編輯澄清: 錯誤是連接多路複用器和ffdshow解碼器。
相關的代碼(getPin枚舉在物體上的銷和返回名爲IPIN的LPCOLESTR)
HRESULT hr = S_OK;
//graph builder
CComPtr<ICaptureGraphBuilder2> pBuilder;
hr = pBuilder.CoCreateInstance(CLSID_CaptureGraphBuilder2);
CHECK_HR(hr, "Can't Create Capture Graph Builder");
hr = pBuilder->SetFiltergraph(pGraph);
//add Canon XH A1S
CComPtr<IBaseFilter> pCanonXHA1S = GetCaptureDevice(CLSID_VideoInputDeviceCategory, L"Canon XH A1S");
hr = pGraph->AddFilter(pCanonXHA1S, L"Canon XH A1S");
CHECK_HR(hr, "Can't add Canon XH A1 to Graph");
//add MPEG-2 Demultiplexer
CComPtr<IBaseFilter> pMPEG2Demultiplexer;
hr = pMPEG2Demultiplexer.CoCreateInstance(CLSID_MPEG2Demultiplexer);
CHECK_HR(hr, "Can't create MPEG-2 Demultiplexer");
hr = pGraph->AddFilter(pMPEG2Demultiplexer, L"MPEG-2 Demultiplexer");
CHECK_HR(hr, "Can't add MPEG-2 Demultiplexer to graph");
//connect Canon XH A1S and MPEG-2 Demultiplexer
hr = pGraph->ConnectDirect(GetPin(pCanonXHA1S, L"MPEG2TS Out"), GetPin(pMPEG2Demultiplexer, L"MPEG-2 Stream"), NULL);
CHECK_HR(hr, "Can't connect Canon XH A1S and MPEG-2 Demultiplexer");
//This block configures the demultiplexer
IMpeg2Demultiplexer *pDemux;
IPin *pDemuxPin;
IMPEG2PIDMap *pPidMap;
AM_MEDIA_TYPE mt;
ZeroMemory(&mt, sizeof(AM_MEDIA_TYPE));
mt.majortype = MEDIATYPE_Video;
pMPEG2Demultiplexer->QueryInterface(IID_IMpeg2Demultiplexer, (void**)&pDemux);
if(hrcheck(hr, "Can't find MPEG2 Demux interface"))
return E_FAIL;
hr = pDemux->CreateOutputPin(&mt, L"MPEG2 Out", &pDemuxPin);
if(hrcheck(hr, "Can't create Output Pin on MPEG2 Demux"))
return E_FAIL;
hr = pDemuxPin->QueryInterface(IID_IMPEG2PIDMap, (void**)&pPidMap);
if(hrcheck(hr, "Can't create PIDMap"))
return E_FAIL;
// Assign PID 0x31 to pin 0. Set the type to "PES payload."
ULONG Pid = 0x30;
hr = pPidMap->MapPID(1, &Pid, MEDIA_ELEMENTARY_STREAM);
if(hrcheck(hr, "Problem mapping PID pins"))
return E_FAIL;
CComPtr<IBaseFilter> pFFDshowVideoDecoder;
hr = pFFDshowVideoDecoder.CoCreateInstance(CLSID_FFDshowVideoDecoder);
CHECK_HR(hr, "Can't create ffdshow Video Decoder");
hr = pGraph->AddFilter(pFFDshowVideoDecoder, L"ffdshow Video Decoder");
CHECK_HR(hr, "ffdshow Video Decoder");
hr = pGraph->ConnectDirect(pDemuxPin, GetPin(pFFDshowVideoDecoder, L"In"), &mt);
if(hrcheck(hr, "Problem with renderstream"))
return E_FAIL;
那麼最初有什麼問題呢? – rogerdpack 2012-09-20 23:56:16