在我的Android应用程序中,我将NV21格式的Camera输出作为字节数组。在本机方面,我需要使用libyuv的NV21ToI420函数将此数组转换为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);
我只有一个指向NV21数据的指针,宽度和高度。我想知道如何计算src_stride_y,src_stride_vu等的值。如果有人可以共享一些关于如何正确使用此函数的示例代码,请欣赏它。在网上搜索NV21ToI420没有任何结果。问候。
答案 0 :(得分:0)
src_stride_y
通常是帧的宽度,src_stride_uv
半帧宽(因为任何YUV42x格式的水平维度都有下采样)。在某些情况下,宽度是一个时髦的数字,使用它会导致内存排列效率低下,例如,如果您使用135的宽度。在这种情况下,处理器/编译器/库/操作系统将每行填充零/ 1 /垃圾,直到此大小更加计算友好 - 4/64字节或类似的倍数。此推理适用于dst_stride_y
(~width)和dst_stride_u
/ dst_stride_v
(~width / 2)。 IIRC,如果你在Android中选择相机提供的捕捉尺寸,你不应该有宽度和宽度/ 2的步幅,所以你应该好好去。