经过数小时的网上搜索,我非常渴望找到解决方案。我已经在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转换器作为最后的选择。
最佳答案
Directshow中没有内置YUV到RGG色彩空间转换器。 WMV文件为您工作的原因是WMV解码器过滤器还会根据连接的过滤器类型吐出RGB或YUV数据。
您在这里可以做的最好的事情就是自己编写一个色彩空间转换器过滤器,或者在获得YUV数据后就将其转换。
Fourcc.org在converting from YUV to RGB上有一篇不错的文章。另外,《 Video Demystified by Keith Jack》一书还提供了有关色彩空间转换的所有详细信息。
关于directshow - 自动YUV-> DirectShow中的RGB用于自定义解码器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/240024/