gpt4 book ai didi

c++ - DirectShow DVD 播放

转载 作者:太空宇宙 更新时间:2023-11-04 12:27:21 26 4
gpt4 key购买 nike

我已经创建了一个自定义分配器/演示器,可以很好地播放普通媒体文件。但是,当我使用以下代码尝试播放 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() 后立即发生堆栈溢出。这让我抓狂,因为我确定我只是忘记了一些非常非常简单的事情。

谢谢。

最佳答案

您的图表应如下所示。确保您的图表中没有任何错误的过滤器。

因为您使用的是自定义分配器,所以我会在那里寻找问题并在那里设置一些断点。您粘贴的代码可能不完整,因为我没有看到您使用自定义分配器配置 VMR9,也没有看到它被添加到图表中。我避免使用 DVDGraphBuilder,因为我有一段时间很难用我的 VMR9+Allocator 正确地获得它的 RenderVolume。我会更手动地构建图表。

我的开源项目中有一个自定义分配器,还有一个 DVD 播放器。您可以查看它以供引用,但由于我需要修改其中的一些内容以实现 WPF 兼容性,因此其中存在很多代码噪音。 http://wpfmediakit.codeplex.com

您看到的不应该是 DRM 问题。

alt text http://img29.imageshack.us/img29/7798/capturelu.jpg

关于c++ - DirectShow DVD 播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1451925/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com