NV21到I420在android系统(NV21 to I420 in android)

2019-10-21 05:11发布

编辑:我碰到这个libyuv,做了NV21到I420转换,但我真的不知道如何称呼它。

// Convert NV21 to I420.  Same as NV12 but u and v pointers swapped.
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) 

我传递[]从相机回调到JNI层得到的NV21字节并将其转换为unsigned char *,如下

int yuvBufLen = env->GetArrayLength(yuvNV21);
unsigned char* yuvNV21Buf = new unsigned char[yuvBufLen];
env->GetByteArrayRegion(yuvNV21, 0, yuvBufLen,reinterpret_cast<jbyte*>(yuvNV21Buf));

现在还不是很清楚,我如何获得调用函数libyuv需要NV21ToI420不同参数。 什么是以下每个参数的代表,以及如何从无符号字符获取这些* yuvNV21Buf我?

常量UINT8 * src_y,
INT src_stride_y,
常量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

我已经检查这个iOS中获得YUV420这也解释了如何获得所有必需的参数来调用libyuv :: NV12ToI420。

有人可以解释我如何实现这一目标?

我从相机下面通过预览回调捕获帧字节[]

@Override
        public void onPreviewFrame(byte[] frameData, Camera camera) {

该frameData我得到是NV21格式,我想NV21转换为I420。

Answer 1:

我找不到工作,我张贴在这个问题的方法,它一直崩溃。

但由于彼得,我发现这个NV21ToI420转换,它为我工作完美。

只要它需要的NV21和I420指针。

unsigned char* yuvPtr; //NV21 data
unsigned char* I420 = new unsigned char[sourceWidth*sourceHeight*1.5]; //destination I420 pointer where the converted yuv will be stored 
NV21toI420(yuvPtr, I420, sourceWidth, sourceHeight);

就这样....



文章来源: NV21 to I420 in android