我已經創建了一個自定義分配器/演示者,可以正常播放媒體文件。但是,當我使用以下代碼嘗試播放DVD時,它會因堆棧溢出異常而失敗。DirectShow DVD播放
vmr9_ap = new vmr9ap();
HMONITOR monitor = MonitorFromWindow(hwnd, NULL);
IGraphBuilder *graph;
IBaseFilter *filter;
IDvdGraphBuilder *builder;
CoCreateInstance(CLSID_DvdGraphBuilder, NULL, CLSCTX_INPROC_SERVER, IID_IDvdGraphBuilder, reinterpret_cast<void**>(&builder));
CoCreateInstance(::CLSID_VideoMixingRenderer9, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, reinterpret_cast<void**>(&filter));
builder->GetDvdInterface(IID_IVMRFilterConfig9, (void**)&vmr9_config);
vmr9_ap->Initialize(g_pd3dDevice, monitor, vmr9_config);
HRESULT hr = builder->RenderDvdVideoVolume(L"G:\\VIDEO_TS", AM_DVD_SWDEC_PREFER | AM_DVD_VMR9_ONLY, &status);
builder->GetFiltergraph(&graph);
IDvdControl2 *dvdControl;
builder->GetDvdInterface(::IID_IDvdControl2, (void**)&dvdControl);
graph->QueryInterface(::IID_IMediaControl, (void**)&control);
HRESULT h = control->Run();
調用control-> Run()後立即發生堆棧溢出。這讓我瘋狂,因爲我確信我只是忘記了一些非常簡單的事情。
謝謝。
感謝您的鏈接。很有幫助。 :)我剛剛發佈了代碼,我結束了。 雖然回放仍然無法與附加的調試器一起工作......我同意它看起來不像DRM。可能是一種反向工程策略。這就是Google似乎認爲的。 – Alex 2009-10-22 01:06:24