int yuyv_to_yv12(uchar *yuyv, uchar *yv12, uint width, uint height)
{
uchar *py;
uchar *pu;
uchar *pv;
uint linesize = width * 2;//yuyv格式每行字节数为width*2
uint uvlinesize = width / 2;//yv12格式uv部分每行字节数为width/2
uint offset=0;
uint offset1=0;
uint offsety=0;
uint offsety1=0;
uint offsetuv=0;
py = yv12;//指向保存y数据部分
pv = py+(width*height);//指向保存v数据部分
pu = pv+((width*height)/4);
uint h=0;
uint w=0;
uint wy=0;//一行y数据中第n个数据
uint huv=0;//uv数据部分的第n行
uint wuv=0;//一行uv数据中第n个数据
for(h=0;h<height;h+=2)
{
wy=0;
wuv=0;
offset = h * linesize;//yuyv中y分量第一行的偏移
offset1 = (h + 1) * linesize;//yuyv中y分量第二行的偏移
offsety = h * width;//yv12中y分量第一行偏移
offsety1 = (h + 1) * width;//yv12中y分量第二行偏移
offsetuv = huv * uvlinesize;//yv12中uv分量的偏移
for(w=0;w<linesize;w+=4)
{
/*y00*/
py[wy + offsety] = yuyv[w + offset];
/*y01*/
py[(wy + 1) + offsety] = yuyv[(w + 2) + offset];
/*y10*/
py[wy + offsety1] = yuyv[w + offset1];
/*y11*/
py[(wy + 1) + offsety1] = yuyv[(w + 2) + offset1];
/*v0*/
pv[wuv + offsetuv] = yuyv[(w + 3) + offset];
/*u0*/
pu[wuv + offsetuv] = yuyv[(w + 1) + offset];
wuv++;
wy+=2;
}
huv++;
}
return 0;
}
yuyv_to_yv12
最新推荐文章于 2022-03-09 08:54:14 发布