libyuv编译

libyuv笔记

官方网址

以下网址需要科学上网哦

libyuv-doc

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

  • 这里提供一个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需要科学上网,这里顺便提供资源,方便不能访问的小伙伴。

猜你喜欢

转载自blog.csdn.net/huweijian5/article/details/80245875