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

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的简介与编译_第1张图片

视频格式转换库--libyuv的简介与编译_第2张图片

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

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

示例

由于官方的接口基本没注释,可能他们觉得太简单了,或者我们太蠢了,不管如何,我这里根据实验结果对其注释一下,加深理解

//以I420为例,假设源图数据为sdata[],目标图数据为ddata[]
//假设这里有源图sw*sh=200*100的图片,要对其旋转90度,变成目标图dw*dh=100*200的图片,那么sw=dh,sh=dw.
//源图的y分量的长度sySize=sw*sh=20000,u或v分量的长度suvSize=suSize=svSize=((sw+1)/2)*((sh+1)/2)=5000
//目标图的y分量的长度dySize=dw*dh=20000,u或v分量的长度duvSize=duSize=dvSize=((dw+1)/2)*((dh+1)/2)=5000,与源图是一致的
//至于stride,src_stride_y=sw=200,src_stride_u=src_stride_v=(sw+1)/2=100
//			dst_stride_y=dw=100,dst_stride_u=dst_stride_v=(dw+1)/2=50
// Rotate I420 frame.
// 返回0表示成功,其他则为失败
LIBYUV_API
int I420Rotate(const uint8_t* src_y,	//在此例即为sdata
			   int src_stride_y,        //在此例即为sw
	           const uint8_t* src_u,    //在此例即为sdata+sySize
               int src_stride_u,        //在此例即为(sw+1)/2
               const uint8_t* src_v,    //在此例即为sdata+sySize+suvSize
               int src_stride_v,        //在此例即为(sw+1)/2
               uint8_t* dst_y,          //在此例即为ddata
               int dst_stride_y,        //在此例即为dw
		       uint8_t* dst_u,          //在此例即为ddata+dySize
               int dst_stride_u,        //在此例即为(dw+1)/2
               uint8_t* dst_v,          //在此例即为ddata+dySize+duvSize
               int dst_stride_v,        //在此例即为(dw+1)/2
               int width,               //这里指源图,即sw
               int height,              //这里指源图,即dw
               enum RotationMode mode   //旋转角度
               );

资源下载

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

  • libyuv-master
  • libyuv-master-doc

参考

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

你可能感兴趣的:(android,视频,libyuv,android,视频)