求yuv422转成yuv420
请高手指点,如和将yuv422 转成yuv420,或者rgb24
[解决办法]
// 参考ffmpeg:imageconvert.c
static void yuv422_to_yuv420p(AVPicture *dst, const AVPicture *src,
int width, int height)
{
const uint8_t *p, *p1;
uint8_t *lum, *cr, *cb, *lum1, *cr1, *cb1;
int w;
p1 = src-> data[0];
lum1 = dst-> data[0];
cb1 = dst-> data[1];
cr1 = dst-> data[2];
for(;height > = 1; height -= 2) {
p = p1;
lum = lum1;
cb = cb1;
cr = cr1;
for(w = width; w > = 2; w -= 2) {
lum[0] = p[0];
cb[0] = p[1];
lum[1] = p[2];
cr[0] = p[3];
p += 4;
lum += 2;
cb++;
cr++;
}
if (w) {
lum[0] = p[0];
cb[0] = p[1];
cr[0] = p[3];
cb++;
cr++;
}
p1 += src-> linesize[0];
lum1 += dst-> linesize[0];
if (height> 1) {
p = p1;
lum = lum1;
for(w = width; w > = 2; w -= 2) {
lum[0] = p[0];
lum[1] = p[2];
p += 4;
lum += 2;
}
if (w) {
lum[0] = p[0];
}
p1 += src-> linesize[0];
lum1 += dst-> linesize[0];
}
cb1 += dst-> linesize[1];
cr1 += dst-> linesize[2];
}
}
[解决办法]
xivd源代码中有你想要的东西,而且都用mmx和sse优化的。