FFMPEG 用于从 yuv420p 转换为 rgb bmp 的所有操作是什么?
what are all the operations that FFMPEG uses to convert from yuv420p to rgb bmp?
我正在尝试在我自己的代码中复制 ffmpeg 将 yuv420p 转换为 rgb 的操作,而不是使用 ffmpeg 库。最初我认为它会在函数内部:swscale.c 中的 xyz12Torgb48 但是做了一些跟踪,它看起来在 yuv2rgb.c ff_yuv2rgb_c_init_tables 中,我不太清楚。
好吧,既然没有人提出解决方案,我就 post 我发现使用
valgrind 工具=callgrind ffmpeg_g
这是一个带有调试对象的 ffmpeg 版本,它向我展示了被调用的函数,并且在 \libswscale\x86 内部有 yuv2rgb_template.c 似乎有你在 assembly
中执行的操作 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
*/ ```
我正在尝试在我自己的代码中复制 ffmpeg 将 yuv420p 转换为 rgb 的操作,而不是使用 ffmpeg 库。最初我认为它会在函数内部:swscale.c 中的 xyz12Torgb48 但是做了一些跟踪,它看起来在 yuv2rgb.c ff_yuv2rgb_c_init_tables 中,我不太清楚。
好吧,既然没有人提出解决方案,我就 post 我发现使用 valgrind 工具=callgrind ffmpeg_g 这是一个带有调试对象的 ffmpeg 版本,它向我展示了被调用的函数,并且在 \libswscale\x86 内部有 yuv2rgb_template.c 似乎有你在 assembly
中执行的操作 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
*/ ```