嗨,我的任务是在 android 中显示一组解码帧。在我的本机代码中,我有一个字符(char)指针,它保存解码帧的地址。我想在我的设备上显示这个框架,所以我得到了一个提示: 在 Android 中显示 YUV 图像, 因此在我的活动类中我编写了以下函数:
public void displayFrame(byte[] data, int fwidth,int fheight){
ImageView frameImgView=(ImageView) findViewById(R.id.imageView2);
ByteArrayOutputStream out=new ByteArrayOutputStream();
YuvImage yuvimg=new YuvImage(data, ImageFormat.NV21, fwidth, fheight, null);
yuvimg.compressToJpeg(new Rect(0, 0, fwidth, fheight), 100, out);
byte[] imageBytes = out.toByteArray();
Bitmap image = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length);
frameImgView.setImageBitmap(image);
return;
}
因此,从我的本机代码中,我需要在 java 中调用此函数。从链接: http ://www.altdevblogaday.com/2011/12/09/running-native-code-on-android-part-1/ 我知道如何从本地 c 调用 java 函数。但是,要调用 java 函数,我们需要一个环境变量来执行此操作。我的 java 类我已经将 main 函数声明为 native 并为该 main 函数生成了一个标头:
JNIEXPORT jint JNICALL Java_com_example_decoder_Decoder_mainFunction(JNIEnv *env, jclass jobj, jint argc, jstring argv1, jstring argv2);
但是我的 mainFunction 调用了一个函数“fwriter(一些指针,一些指针)”,它有一个指针作为参数。我如何获得相同的环境变量。我知道在 java 类中我需要将“fwriter”函数声明为原生但我将指针表示为什么?
例如:我的 c 函数是:
void fwriter(int *ptr, char *ptr)
{
....
}
在我的 java 类中,我如何将此函数声明为本地函数?请帮忙。在 java/Android 中显示 YUV 的任何其他方法也将受到赞赏。谢谢你。