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

标签 directshow rgb yuv ogg-theora

在网上搜索了几个小时后,我非常想找到解决方案。我已经在 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 转换器我作为最后的手段。

最佳答案

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

你在这里能做的最好的事情就是自己写一个颜色空间转换器过滤器,或者在你得到它之后转换 YUV 数据。

Fourcc.orgconverting from YUV to RGB 上有不错的文章.还书Video Demystified by Keith Jack包含有关色彩空间转换的所有详细信息。

关于directshow - DirectShow 中的自动 YUV -> RGB 用于自定义解码器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/240024/

相关文章:

c++ - 为什么在 Directshow 中捕获图形不起作用?

java - 加快矩阵查找速度

android - 如何用静态 YUV 帧覆盖 onPreviewFrame 数据?

c++ - YUV -> RGB 转换可以硬件加速吗?

c# - 有没有另一种方法可以在 directshow 中保存视频

windows - 如何从 Wave Out 中捕获 PCM 数据

在 C__ 中将 PPM 从 RGB 转换为 HSL

python - 循环遍历所有 RGB 值并将图像拼接在一起

video - 如何使用 ffmpeg 仅更改像素格式?

c++ - rgb转yuv420算法效率