我的第一个DirectShow应用程序只是一个蓝屏,为什么? [英] My first DirectShow app just got a blue screen , why?

查看:50
本文介绍了我的第一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆