使用libyuv库解决视频后处理性能不足问题

一、libyuv的优势

       libyuv是Google开源的实现各种YUV与RGB之间相互转换、旋转、缩放的库。它是跨平台的,可在Windows、Linux、Mac、Android等操作系统。x86、x64、arm架构上进行编译执行,支持SSE、AVX、NEON等SIMD指令加速。

        使用FFmpeg的sws_scale进行YUV等转换时,在ARM设备上运行性能较低。下图展示了sws_scale和libyuv两者耗时情况,单位为毫秒:

        从图中可以看出,libyuv性能比sws_scale要好一个数量级。所以,对于实时性要求较高的场合,可考虑使用libyuv等NEON指令实现的库。

二、编译

        GitHub下载地址: https://github.com/lemenkov/libyuv

        编译命令:make -f linux.mk

三、运行

        调用libyuv库方式:  将libyuv.h包含到工程,编译时指定libyuv.a库。

//YUYV422转YUV420P

uint8_t* i420_image = video0_yuv420p_buff;
uint8_t* i420_image_y_ptr = i420_image;
uint8_t* i420_image_u_ptr = i420_image_y_ptr + (VIDEO_WIDTH * VIDEO_HEIGHT);
uint8_t* i420_image_v_ptr = i420_image_u_ptr + (int)(VIDEO_WIDTH * VIDEO_HEIGHT * 0.25);
 
libyuv::YUY2ToI420(
        image_buffer[video_buffer.index],VIDEO_WIDTH*2,
        (uint8_t*)i420_image_y_ptr, VIDEO_WIDTH,
        (uint8_t*)i420_image_u_ptr, (VIDEO_WIDTH >> 1),
        (uint8_t*)i420_image_v_ptr, (VIDEO_WIDTH >> 1),
        VIDEO_WIDTH, VIDEO_HEIGHT);

//YUYV422转ARGB
libyuv::YUY2ToARGB(image_buffer[video_buffer.index],VIDEO_WIDTH*2,
                          argb_buffer,VIDEO_WIDTH*4,VIDEO_WIDTH,VIDEO_HEIGHT);

参考文章链接1:https://blog.csdn.net/xiaolong1126626497/article/details/105984222

参考文章链接2:https://blog.csdn.net/fengchu3415/article/details/84871710

参考文章链接3:http://events.jianshu.io/p/e52a3a19c8fe

参考文章链接4:https://www.cnblogs.com/yfceshi/p/7092525.html

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值