Libyuv 可以说是做图形图像相关从业者绕不开的一个常用库,它使用了单指令多数据流提升性能。以 ARM 处理为主线,通过 I420 转 ARGB 流程来分析它是如何流转的。
Libyuv 是一个开源项目,包括 YUV 的缩放和转换功能。
- 使用邻近、双线性或 box 插值缩放 YUV。
- 将网络摄像头格式转化为 YUV。
- 转换为 RGB 格式的渲染或效果。
- 旋转 90、180 或 270 度。
- 针对 x86/x64 上的 SSSE3/AVX2 进行优化。
- 针对 Arm 上的 NEON 优化。
- 针对 Mips 上的 MSA 优化。
官方地址 https://chromium.googlesource.com/libyuv/libyuv。
libyuv.h 是调用 Libyuv API 的入口。I420ToARGB 这个转换函数位于 libyuv/convert_argb.h 头文件内。
libyuv.h
#ifndef INCLUDE_LIBYUV_H_
#define INCLUDE_LIBYUV_H_
#include "libyuv/basic_types.h"
#include "libyuv/compare.h"
#include "libyuv/convert.h"
#include "libyuv/convert_argb.h"
#include "libyuv/convert_from.h"
#include "libyuv/convert_from