yuyv_to_yv12

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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值