首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > 多媒体 >

一个关于DirectShow的有关问题

2012-03-05 
一个关于DirectShow的问题!C/C++ codevoid main(){HRESULT hr CoInitialize(NULL)if (FAILED(hr)){// A

一个关于DirectShow的问题!

C/C++ code
void main(){    HRESULT hr = CoInitialize(NULL);    if (FAILED(hr))    {        // Add error-handling code here. (Omitted for clarity.)    }    IGraphBuilder *pGraph;    hr = CoCreateInstance(CLSID_FilterGraph, NULL,     CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&pGraph);    IMediaControl *pControl;    IMediaEvent   *pEvent;    IMpegAudioDecoder *pDecoder;    IBaseFilter *pFilter;    pFilter=NULL;        hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);    hr = pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);    hr = pGraph->AddFilter(pFilter,L"Source");        hr = pFilter->QueryInterface(IID_IMpegAudioDecoder,(void **)&pDecoder);//注意:这行报错。    hr = pDecoder->put_DualMode(AM_MPEG_AUDIO_DUAL_RIGHT);        hr = pGraph->RenderFile(L"C:\\123.dat", NULL);        hr = pControl->Run();    }


初学DirectShow,不知道那个IMpegAudioDecoder要怎么弄才会出效果,
希望懂的朋友指教一下!

[解决办法]
IBaseFilter *pFilter;
pFilter=NULL;
...
hr = pGraph->AddFilter(pFilter,L"Source"); //pFilter是空的,这步就已经失败了,后面用到pFilter肯定会出问题.
hr = pFilter->QueryInterface(IID_IMpegAudioDecoder,(void **)&pDecoder;
IID_IMpegAudioDecoder这个你需要知道它的GUID之类的标识符,定义为宏来使用.
Filter也需要通过CoCreateInstance拿到后再加入Graph里面.

建议楼主可以多看下SDK里的DirectShow Sample,或者去MSDN找DirectShow的教程看看.

热点排行