FFMpeg opengl显示解码avframe

FFmpeg解码出来avframe,但显示很容易出现乱码,因为为了计算的方便,ffmpeg解码出来的数据,总视根据系统处理器或者系统来补齐为 64、32、16的倍数。这也是我们显示乱码的问题所在。

问题

比如我显示抖音上的视频的宽为368x640, 解码的帧率avFrame,下面是avframe的一些成员变量:

avFrame->format = 0 // 表示是 yuv420p的数据格式

avFrame->width = 364

avFrame->height= 640

然后取数据的时候,

y= avFrame->data[0]

u= avFrame->data[1]

v= avFrame->data[2]

将yuv给opengl渲染就会乱码。

解决方法

将宽度设置为linesize

直接获得data[0]的数据,在创建显示texture的时候以,avFrame-linesize[0]作为一帧的宽度:

 // 直接按照填补的 宽度来显示,效率最高,若视频宽度不是64/32(根据系统位数)倍数,右边会存在边框。
    int w = avFrame->linesize[0];
    int h = avFrame->height;
    unsigned char * y  = avFrame->data[0];
    unsigned char * u  = avFrame->data[1] ;
    unsigned char * v  = avFrame->data[2];
    glProgram->Draw(w,h,y,u
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值