【问题标题】:what are all the operations that FFMPEG uses to convert from yuv420p to rgb bmp?FFMPEG 用于从 yuv420p 转换为 rgb bmp 的所有操作是什么?
【发布时间】:2019-04-12 13:45:52
【问题描述】:

我试图在我自己的代码中复制 ffmpeg 将 yuv420p 转换为 rgb 的操作,而不是使用 ffmpeg 库。最初我以为它会在函数内部:swscale.c 中的 xyz12Torgb48 但进行一些跟踪,它看起来在 yuv2rgb.c ff_yuv2rgb_c_init_tables 中,我看不太清楚。

【问题讨论】:

  • 对于初学者,你需要知道what 420 means
  • 最简单的方法可能是研究有问题的格式,并弄清楚转换需要什么数学。 只有在那之后您才应该查看ffmpeg 代码 - 复制您不理解的内容会导致痛苦和错误。
  • 我知道 yuv420 是什么意思,并且有一个代码可以读取 yuv 文件并分离通道。我已经使用文献中的方程式进行了一些转换,但我需要与 ffmpeg 具有相同的输出。

标签: c ffmpeg rgb yuv


【解决方案1】:

好吧,既然没有人提出解决方案,我只会发布我发现使用 valgrind 工具=callgrind ffmpeg_g 这是一个带有调试对象的 ffmpeg 版本,它向我展示了被调用的函数,并且在 \libswscale\x86 内部有 yuv2rgb_template.c 似乎有你在程序集中执行 yuv2rgb 的操作

 * Conversion is performed in usual way:
 * R = Y' * Ycoef + Vred * V'
 * G = Y' * Ycoef + Vgreen * V' + Ugreen * U'
 * B = Y' * Ycoef               + Ublue * U'
 *
 * where X' = X * 8 - Xoffset (multiplication is performed to increase
 * precision a bit).
 * Since it operates in YUV420 colorspace, Y component is additionally
 * split into Y1 and Y2 for even and odd pixels.
 *
 * Input:
 * mm0 - U (4 elems), mm1 - V (4 elems), mm6 - Y (8 elems), mm4 - zero register
 * Output:
 * mm1 - R, mm2 - G, mm0 - B
 */ ```

【讨论】:

    猜你喜欢
    • 2014-04-27
    • 2018-03-14
    • 2018-02-06
    • 1970-01-01
    • 2021-11-06
    • 2018-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多