视频格式转换库--libyuv的简介与编译

libyuv笔记

前言

  • 在Android做过Camera的朋友应该都知道,获取摄像头采集到的每一帧的数据是YUV的,并不能直接给我们进行使用,那么该通过什么样的方法对这个YUV数据进行处理呢
  • libyuv是Google开源的实现各种YUV与RGB之间相互转换、旋转、缩放的库。它是跨平台的,可在Windows、Linux、Mac、Android等操作系统,x86、x64、arm架构上进行编译运行,支持SSE、AVX、NEON等SIMD指令加速
  • 使用libyuv可以非常方便地帮助我们进行对yuv格式图片的处理,但在android上这个库是不能直接使用的,需要经过编译才能使用

官方网址

以下网址需要科学上网哦

  • https://chromium.googlesource.com/libyuv/libyuv/
  • https://chromium.googlesource.com/libyuv/libyuv/+/master/docs/libyuv

libyuv-doc

  • 下载好资源后可以参照文档进行编译

  • 这里提供一个android版本的libyuv-android

示例

官方的接口基本没注释

//i420数据,例如yyyyyyyy uu vv
//返回0表示成功,其他则为失败
LIBYUV_API
int I420Rotate(const uint8_t* src_y,	//y平面字节数组的起始位置
			   int src_stride_y,        //y平面每行的长度,一般为width
	           const uint8_t* src_u,    //u平面字节数组的起始位置,一般为src_y+width*height
               int src_stride_u,        //u平面每行的长度,一般为width/2
               const uint8_t* src_v,    //v平面字节数组的起始位置,一般为src_y+width*height*5/4
               int src_stride_v,        //v平面每行的长度,一般为width/2
               uint8_t* dst_y,          //旋转后的y平面数组的起始位置
               int dst_stride_y,        //旋转后的y平面每行的长度,一般如果是90或270则为height,其他为width
		       uint8_t* dst_u,          //旋转后的u平面字节数组的起始位置,一般为dst_y+width*height
               int dst_stride_u,        //旋转后的u平面每行的长度,一般如果是90或270则为height/2,其他为width/2
               uint8_t* dst_v,          //旋转后的v平面字节数组的起始位置,一般为dst_y+width*height*5/4
               int dst_stride_v,        //旋转后的v平面每行的长度,一般如果是90或270则为height/2,其他为width/2
               int width,               //这里指旋转前的宽度
               int height,              //这里指旋转前的高度
               enum RotationMode mode   //旋转角度
               );

资源下载

由于访问libyuv需要科学上网,这里顺便提供资源,方便不能访问的小伙伴。

参考

使用libyuv对YUV数据进行缩放,旋转,镜像,裁剪等操作 - 简书
https://www.jianshu.com/p/bd0feaf4c0f9
YUV420转RGBA之使用libyuv - 简书

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值