我的资料来源于FFmpeg,它是YCbCr平面格式(YUV420P,I420),
出于某些原因,我需要将其转换为YCbCr打包格式(NV12),
而且它要用WIC YCbCr API来做,我怎么做呢?
发布于 2015-12-19 04:24:41
为什么是WIC?利比亚人更直截了当,可能表现得更好。
https://code.google.com/p/libyuv/
功能:
规模YUV准备内容压缩,与点,双线性或盒过滤器。 转换为YUV从网络摄像头格式。 从YUV转换为渲染/效果格式。 旋转90/180/270度,以调整移动设备的纵向模式。 在x86/x64上为SSE2 2/SSSE3 3/AVX2 2优化的。
API:
/ Convert NV12 to I420.
LIBYUV_API
int NV12ToI420(const uint8* src_y, int src_stride_y,
const uint8* src_uv, int src_stride_uv,
uint8* dst_y, int dst_stride_y,
uint8* dst_u, int dst_stride_u,
uint8* dst_v, int dst_stride_v,
int width, int height);
// Convert NV21 to I420.
LIBYUV_API
int NV21ToI420(const uint8* src_y, int src_stride_y,
const uint8* src_vu, int src_stride_vu,
uint8* dst_y, int dst_stride_y,
uint8* dst_u, int dst_stride_u,
uint8* dst_v, int dst_stride_v,
int width, int height);发布于 2015-12-19 08:48:51
我不确定WIC是否是正确的API来处理它。彩色转换器DSP是来自媒体基金会的一篇文章,可以单独使用,它肯定会负责转换。它使用SIMD指令进行了很好的优化,并且在Windows时代就存在于核心操作系统中。
FFmpeg的libswscale也做了同样的事情。像这样的库和API可能处理特定的方向,这取决于内部实现。有可能NV12在libswscale中没有很好地实现。
同时,I420到NV12是一个非常简单的转换方向,您可以使用一次代码屏幕和SIMD内部函数来实现它,并且非常有效。
https://stackoverflow.com/questions/34270596
复制相似问题