video - 通过片段着色器进行 YUV 转换

标签 video direct3d rgb yuv

我已经通过用 Nvidia 着色器语言编写的片段着色器实现了 YUV 到 RGB 的转换。 (Y、U 和 V 存储在单独的纹理中,这些纹理通过我的片段着色器中的多重纹理组合在一起)。它在 OpenGL 下工作得很好,但在 Direct3D 下我就是无法让输出图像看起来正确。我开始怀疑 Direct3D 在我有机会进行 YUV 转换之前以某种方式修改了 Y、U 和 V 样本。有谁知道在片段着色器运行之前 Direct3D 是否对存储在纹理中的值进行任何修改以及如何禁用它们>?

最佳答案

我们想通了。 :) 基本上问题是,虽然我们的 YUV 到 RGB 方程是正确的,但我们没有正确采样 V 数据!因此,对方程进行再多的修改也无济于事!

最后,我会向任何尝试这样做的人推荐以下策略:

1) 将 R、G 和 B 设置为 Y 中的值。您应该得到一个灰度图像(因为 Y 仅包含亮度)。 2) 接下来,将 R、G 和 B 设置为 U。你应该会得到有趣的颜色! 3) 最后将 R、G 和 B 设置为 V。同样,您应该得到有趣的颜色。

此外,正确标准化值也至关重要。请查看我们的 fourcc.org,了解有关正确 YUV 标准化的讨论。

关于video - 通过片段着色器进行 YUV 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/145064/

相关文章:

graphics - 带孔的多边形三角剖分

c++ - 使用 DXGI 将一台显示器切换到全屏时,其他显示器会变黑

android - 如何从 android 中的图像绘制 RGB 强度图?

flash - 使用 FFMPEG 将视频转换为 flv 并丢失持续时间

HTML5 视频 - 暂停加载/部分加载

Android - 在 vi​​deoView 中更改/重播视频

xna - 使用 VS2012 Shader Designer 创建 XNA 着色器

python-3.x - 如何在Python上使用rawpy读取图片的RGB值

java - 将原始负 rgb int 值转换回 3 数字 rgb 值

video - 在文档和媒体 portlet 中将视频预览限制为 5 分钟或 10 MB 大小