自动YUV - > DirectShow中的RGB用于自定义解码器

时间:2008-10-27 14:17:16

标签: directshow rgb yuv ogg-theora

经过几个小时的网络搜索,我非常渴望找到解决方案。我起来了在DirectShow中运行OGG Theora解码器,输出YV12和YUY2颜色模型。

现在,我想为此输出制作一个RGB像素操作过滤器,并将其处理为视频渲染器。 根据{{​​3}}和 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转换器我作为最后的手段。

1 个答案:

答案 0 :(得分:3)

Directshow中没有内置YUV到RGG的色彩空间转换器。 WMV文件适合您的原因是WMV解码器过滤器将根据您连接它的过滤器类型吐出RGB或YUV数据。

您可以在这里做的最好的事情就是自己编写一个颜色空间转换器滤镜,或者只是在获得后转换YUV数据。

Fourcc.orgconverting from YUV to RGB上有很好的文章。此书[{3}}还包含有关色彩空间转换的所有详细信息。