最近在做嵌入式的视频播放器,先是使用了ffmpeg的sws_scale()去转换和缩放,后发现效率极低,然后又采用libyuv的方式,有资料说更换libyuv来进行图片格式转换后会效率高,在我试验过后效率高是高了,但是还没有到达预期,但也是一份收获,故记录下来。
1、源码下载
先后下载了几个,经测试,在我的环境下,下面地址的源码可用。
libyuv源码
2、环境说明
编译平台:ubuntu16.04
交叉编译链:arm-linux-gnueabihf-gcc 4.7.3
目标平台:imx6
3、编译
- 下载源码后解压并进入文件夹
- 修改linux.mk文件内容 CC = arm-linux-gnueabihf-gcc-4.7.3 CXX = arm-linux-gnueabihf-g++
- 执行 make -f linux.mk
或者直接指定编译链 make -f linux.mk CC= arm-linux-gnueabihf-gcc-4.7.3 CXX = arm-linux-gnueabihf-g++
4、结果:
编译完成后,会出现libyuv.a文件和include文件夹,查看当前目录下可执行程序是否为ARM版本。是则编译成功。
5、Qt添加包含:
INCLUDEPATH += $$PWD/libyuv
LIBS += -ldl -lm -lc $$PWD/libyuv.a
6、具体使用方法:
ps:我进行了简单的测试,没有真正的去完善,色调有点暖,你们可以不参考我的这个。
libyuv::I420ToRGB24(vpu->dec_buf,vpu->dec_width,&vpu->dec_buf[vpu->dec_width*vpu->dec_height],vpu->dec_width/2,&vpu->dec_buf[vpu->dec_width*vpu->dec_height*5/4],vpu->dec_width/2,testbuff,vpu->dec_width*3,vpu->dec_width,vpu->dec_height);
QImage image(testbuff,1280,720,QImage::Format_RGB888);
其中vpu->dec_buf为yuv数据buff
vpu->dec_width为buf数据的width
vpu->dec_height为buf数据的height。