- 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的教程看看.