Я конвертирую кадр YUV422 в файл PPM - (RGB888).
Картинка конвертируется в основном. Цвета в порядке. Но каждый кажется ряд косой, как будто лишний
Вот функция преобразования кадров:
BYTE* CYUV::toRGB()
{
BYTE* rgb = new BYTE[m_width*m_height*3];
BYTE* rgb_ret = rgb;
BYTE* p_yuv = m_yuv_frame;
for (int i=m_width*m_height/2; i--;)
{
BYTE y, u, v, y2;
BYTE r,g, b;
y2 = *p_yuv++;
v = *p_yuv++;
y = *p_yuv++;
u = *p_yuv++;
r = (y + 1.370705 * (v - 128));
g = (y - (0.698001 * (v - 128)) - (0.337633 * (u - 128)));
b = (y + (1.732446 * (u - 128)));
*rgb++ = b < 0 ? 0 : b > 255 ? 255 : b;
*rgb++ = g < 0 ? 0 : g > 255 ? 255 : g;
*rgb++ = r < 0 ? 0 : r > 255 ? 255 : r;
r = (y2 + 1.370705 * (v - 128));
g = (y2 - (0.698001 * (v - 128)) - (0.337633 * (u - 128)));
b = (y2 + (1.732446 * (u - 128)));
*rgb++ = b < 0 ? 0 : b > 255 ? 255 : b;
*rgb++ = g < 0 ? 0 : g > 255 ? 255 : g;
*rgb++ = r < 0 ? 0 : r > 255 ? 255 : r;
}
return rgb_ret;
}
Я считаю, что фактическое преобразование пикселя yuv в rgb является правильным, потому что я пробовал много других формул с искаженными результатами цвета.
Что касается файла PPM, это тоже хорошо, так как все программы для чтения изображений работают с ним.
Что касается оригинального кадра YUV4222, то он в порядке - я показываю его с помощью SDL без этого искажения.
Какие-либо предложения?
ТИА
Кен