RK系列(Android平台) libyuv移植

有时候RGA处理一些图像延时较高,需要交给CPU处理一些这时候就要用到libyuv

1、yuv概念

总的来说,我们要做的yuv数据处理,无非就是针对各种图像格式下yuv数据(byte[])的转换、调整。举个例子:

  1. NV21:安卓的模式。存储顺序是先存Y,再存U,再VU交替存储,格式为:YYYYVUVUVU。
  2. I420:又叫YU12,安卓的模式。存储顺序是先存Y,再存U,最后存V,格式为YYYYUUUVVV。

可以看到,NV21与I420(都属于YUV420)之间的差别在于U和V的存储位置,所以,NV21要转换成I420,就必须把NV21中的U和V调整为I420的方式存储即可,其他格式之间的转换以此类推。

2、libyuv概念

libyuv是Google开源的yuv图像处理库,实现对各种yuv数据之间的转换,包括数据转换,裁剪,缩放,旋转。尽管libyuv对yuv数据处理的核心进行了封装,但还是要求开发者对各种格式的区别有所了解,这样才能正常调用对应方法,进行转换。

首先先下载libyuv-master

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

解压放入mpp-develop工程里例如utils路径下

修改mpp-develop/utils/CMakeLists.txt

add_subdirectory(libyuv-master)
set(libyuv_LIBS yuv)
include_directories(${PROJECT_SOURCE_DIR}/utils/libyuv-master/include)
nclude_directories(${PROJECT_SOURCE_DIR}/utils/libyuv-master/include/libyuv)

include_directories(${CMAKE_CURRENT_SOURCE_DIR}/utils/libyuv-master/include)
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/utils/libyuv-master/lib)
target_link_libraries(utils mpp_base ${libyuv_LIBS} RgaContronl)

猜你喜欢

转载自blog.csdn.net/yinsui1839/article/details/128476958