编辑:我遇到了这个执行NV21到I420转换的libyuv,但我真的不明白如何调用它。
// 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)
我将从相机回调获得的NV21字节[]传递给jni图层并将其转换为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所需的不同参数。以下每个参数代表什么和 如何从unsigned char * yuvNV21Buf中获取它们?
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
我已经检查了这个obtain yuv420 in ios,它解释了如何获取所有必需的参数来调用libyuv :: NV12ToI420。
有人可以解释一下如何实现这个目标吗?
我通过下面的预览回调从相机捕捉帧字节[]
@Override
public void onPreviewFrame(byte[] frameData, Camera camera) {
我正在获取的frameData采用NV21格式,我正在尝试将NV21转换为I420。
答案 0 :(得分:0)
我无法使用我在问题中发布的方法,它一直在崩溃。
但是感谢Peter,我发现了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);
多数人......
答案 1 :(得分:0)