在网上搜索了几个小时后,我非常渴望找到解决方案。我已经在 DirectShow 中启动并运行 OGG Theora 解码器,它输出 YV12 和 YUY2 颜色模型。
现在,我想为此输出制作一个 RGB 像素操作过滤器并将其处理到视频渲染器中。根据this和 this,它应该非常简单和透明,但事实并非如此。
例如,我在CheckInputType()
这个检查中实现了:
if( IsEqualGUID(*mtIn->Type(), MEDIATYPE_Video )
&& IsEqualGUID(*mtIn->Subtype(), MEDIASUBTYPE_RGB565 ) )
{
return S_OK;
}
我希望它在 Theora 和我的解码器之间插入 MSYUV 并为我完成这项工作(即将其转换为 RGB)。问题是我每次都出错(在 GraphEdit 应用程序中)。而且我 100% 确定它是 YV12 作为输入(在调试器中检查)。我能想到的唯一解释是提到了 AVI 解压缩器,但没有关于它的更多信息。
- 这是否意味着如果我想获得这个自动功能,我必须使用 AVI 容器?
- 奇怪的是它适用于例如 WMV 视频(在他们的输出上带有 YUV),只有这个 OGG 解码器有问题。所以这可能是一个问题,这个OGG解码器错过了什么?
太糟糕了,MSYUV 过滤器不能用作颜色空间转换器,即在 GraphEdit 中可见且可直接使用...
我很欣赏这方面的任何提示,编程自己的 YV12 -> RGB 转换器我作为最后的手段。