我的第一个DirectShow应用程序只是一个蓝屏,为什么? [英] My first DirectShow app just got a blue screen , why?
本文介绍了我的第一个DirectShow应用程序只是一个蓝屏,为什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
当我安装DivX Pro时,我得到了DixX编码器和解码器。
如下所示,当我在Graphedt.exe中测试时,它运行良好。
ScreenCapture -----> DivX 5.2.1编解码器-----> DivX解码器滤波器----->视频渲染器。
我尝试使用下面的代码,但是不起作用,我只得到一个蓝屏。
I got DixX coder and decoder when i installed "DivX Pro".
As below,it works well when i test in Graphedt.exe.
ScreenCapture -----> DivX 5.2.1 Codec -----> DivX Decoder Filter -----> Video Renderer.
I tried in code like below, but does not work , all i get just a blue screen.
const CLSID CLSID_CaptureDesktop = { .....};
const CLSID CLSID_DivxCoder = { .....};
const CLSID CLSID_DivxDecoder = { .....};
const CLSID CLSID_VideoRender = { .....};
.....
//some init code
.....
//create CaptureDestop
hr = CreateObjectFromPath(TEXT("c:\\monitor\\capture.dll"),CLSID_CaptureDesktop, &pUnk);
IBaseFilterPtr CaptureFilter = pUnk;
//create DivXCoder
hr = CreateObjectFromPath(TEXT("c:\\monitor\\coder.dll"),CLSID_DivxCoder, &pUnk);
IBaseFilterPtr DivXCoderFilter = pUnk;
//create DivXDecoder
hr = CreateObjectFromPath(TEXT("c:\\monitor\\decoder.dll"),CLSID_DivxDecoder, &pUnk);
IBaseFilterPtr DivXDcoderFilter = pUnk;
//create VideoRender
IBaseFilter *VideoRenderFilter;
hr=CoCreateInstance(CLSID_VideoRenderer,NULL,CLSCTX_INPROC,IID_IBaseFilter,(void**)&VideoRenderFilter);
//create ICaptureGraphBuilder2 , IGraphBuilder
ICaptureGraphBuilder2 *GraphBuilder2 = NULL;
IGraphBuilder *GraphBuilder = NULL;
hr = CoCreateInstance(CLSID_CaptureGraphBuilder2,NULL,CLSCTX_INPROC,IID_ICaptureGraphBuilder2,(void**)&GraphBuilder2);
hr = CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC,IID_IGraphBuilder,(void**)&GraphBuilder);
GraphBuilder2->SetFiltergraph(GraphBuilder);
//add filter
hr = GraphBuilder->AddFilter(CaptureFilter,L"CaptrueDestop");
hr = GraphBuilder->AddFilter(DivXCoderFilter,L"DivXCoder");
hr = GraphBuilder->AddFilter(DivXDcoderFilter,L"DivXDecoder");
hr = GraphBuilder->AddFilter(VideoRenderFilter,L"VideoRender");
.....
//some code about get Pin
.....
//connect pins
hr = GraphBuilder->ConnectDirect(CaptureDestop_OutPin,DivXCoder_InPin,NULL);
hr = GraphBuilder->ConnectDirect(DivXCoder_OutPin,DivXDecoder_InPin,NULL);
hr = GraphBuilder->ConnectDirect(DivXDecoder_OutPin,VideoRender_InPin,NULL);
//Run
IMediaControl *pMC = NULL;
hr = GraphBuilder->QueryInterface(IID_IMediaControl, (void **)&pMC);
hr = pMC->Run();
我刚从directshow开始,有什么问题吗?
I'm just getting start at directshow, is there something wrong ?
推荐答案
这篇关于我的第一个DirectShow应用程序只是一个蓝屏,为什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文