APlayerSDK里有个PluginDemo的样本代码,阅读代码时,发现里面有个不明白的地方。
在main.cpp的DrawFrame函数负责将输入的YUV411的格式转成RGB32的格式,显示在对话框中。
里面转换代码如下:
int N = Y << 10;
R = (N + V * 1900 - 240000) >> 10;
G = (N - V * 570 - U * 450 + 136000) >> 10;
B = (N + U * 1630 - 200000) >> 10;
转成公式,大概是:
R=Y+1.855V-234.4
G=Y-0.557V-0.439U+132.8
B=Y+1.592U-195.3
但是,从网上查找了很久,发现别人的YUV转RGB好像不一样,我看到了几种不同的公式,都和demo中的不一样。
比如,最常用的一个公式:
R=Y+1.403V−179.6
G=Y–0.714V–0.343U+135.3
B=Y+1.770U–226.6
明显的数据和上面的差别很大,这是什么原因呢?是不是APlayer需要的这个转换公式是自己独有的?
我想知道这个是如何决定的,plugin处理视频数据时,是不是必须用这个公式换算。