3

在网上搜索了几个小时后,我非常渴望找到解决方案。我已经在 DirectShow 中启动并运行 OGG Theora 解码器,它输出 YV12 和 YUY2 颜色模型。

现在,我想为此输出制作一个 RGB 像素操作过滤器并将其处理到视频渲染器中。根据thisthis,它应该非常简单和透明,但事实并非如此。

例如,我在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 转换器我作为最后的手段。

4

1 回答 1

3

Directshow 中没有内置 YUV 到 RGG 颜色空间转换器。WMV 文件为您工作的原因是 WMV 解码器过滤器会根据您连接的过滤器类型吐出 RGB 或 YUV 数据。

您可以在这里做的最好的事情是自己编写一个色彩空间转换器过滤器,或者在获得 YUV 数据后对其进行转换。

Fourcc.org有一篇关于从 YUV 转换为 RGB的好文章。此外,Keith Jack 所著的 Video Demystified一书包含有关色彩空间转换的所有详细信息。

于 2009-08-07T01:57:53.750 回答