こんにちは私の仕事は、アンドロイドでデコードされたフレームのセットを表示することです。私のネイティブコードには、デコードされたフレームのアドレスを保持する character(char ) ポインターがあります。このフレームを自分のデバイスに表示したいので、次のヒントからヒントを得ました: Displaying YUV Image in Android したがって、アクティビティ クラスで次の関数を書きました:
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クラスでは、メイン関数をネイティブとして宣言し、そのメイン関数のヘッダーを生成しました:
JNIEXPORT jint JNICALL Java_com_example_decoder_Decoder_mainFunction(JNIEnv *env, jclass jobj, jint argc, jstring argv1, jstring argv2);
ただし、私の mainFunction は、パラメーターとしてポインターを持つ関数「fwriter(some pointer, some pointer)」を呼び出します。同じ環境変数を取得するにはどうすればよいですか。Javaクラスで「fwriter」関数をネイティブとして宣言する必要があることは知っていますが、ポインターを何として表現しますか??
例:私のc関数は:
void fwriter(int *ptr, char *ptr)
{
....
}
私のJavaクラスで、この関数をネイティブとして宣言するにはどうすればよいですか?? 助けてください。Java/Android で YUV を表示する他の方法も評価されます。ありがとうございました。