为libyuv的NV21ToI420构建参数

时间:2014-06-06 06:52:33

标签: android yuv libyuv

在我的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没有任何结果。问候。

1 个答案:

答案 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的步幅,所以你应该好好去。