现在,我想为此输出制作一个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解压缩器,但没有进一步的信息。
太糟糕了,MSYUV滤镜不能用作色彩空间转换器,即在GraphEdit中可见并可直接使用...
我感谢任何暗示,编程自己的YV12 - > RGB转换器我作为最后的手段。
答案 0 :(得分:3)
Directshow中没有内置YUV到RGG的色彩空间转换器。 WMV文件适合您的原因是WMV解码器过滤器将根据您连接它的过滤器类型吐出RGB或YUV数据。
您可以在这里做的最好的事情就是自己编写一个颜色空间转换器滤镜,或者只是在获得后转换YUV数据。
Fourcc.org在converting from YUV to RGB上有很好的文章。此书[{3}}还包含有关色彩空间转换的所有详细信息。