0

public void onPreviewFrame(byte[] data, Camera camera) 

我们得到 YUV 格式的数据。现在为了转换为 RGB,我在 NDK 中使用了转换器。但它仍然不够快。

所以我发现了这个: http ://www.roman10.net/effective-color-conversion-yuv-rgb-in-android-in-assembly/

有这个 NDK 方法: https ://github.com/roman10/roman10-android-tutorial/blob/master/colorConversion/jni/test.c

但我不知道如何更改它,以便它接受 YUV 字节数组“数据”并返回一个 RGB int 数组?

4

1 回答 1

0

您必须编写一个类似于 的 JNI 函数naGetConvertedFrame()。新函数将具有以下声明:

JNIEXPORT void JNICALL Java_<name>_convert(JNIEnv * pEnv, jobject pObj, jobject pBitmap, jbyteArray jData, jint jWidth, jint jHeight)

函数的名称应该反映将该函数声明为native方法的 Java 类的名称(参见RenderView.java示例)。在 Roman 的示例中,共享库是从Main.java中的另一个类加载的——但这loadLibrary()可以很容易地转移到RenderView.java文件中。

private static native void convert(Bitmap _bitmap, byte[] data, int _width, int _height);

您的函数将类似于原始示例,只是它不会读取文件,而是使用GetByteArrayElements()获取转换器的yuv指针。

于 2012-06-20T14:48:57.810 回答