バッファがC++で正しく埋められていても、Java側のByteBufferはまだ空ですが、AVDecodeからデコードされたイメージを受け取るバッファとしてJNI上のByteBufferをC++に渡したいとします。 どこにエラーがあるのか調べてください。ありがとう。 pOutBufferは、JNI経由で渡されるByteBufferです。JNIでchar []をByteBufferに変換するには?
jclass ByteBufferClass = env->GetObjectClass(pOutBuffer);
jmethodID ArraryMethodId = env->GetMethodID(ByteBufferClass,"array","()[B");
jmethodID ClearMethodId = env->GetMethodID(ByteBufferClass,"clear","()Ljava/nio/Buffer;");
//clear buffer
env->CallObjectMethod(pOutBuffer,ClearMethodId);
jbyteArray OutByteArrary = (jbyteArray)env->CallObjectMethod(pOutBuffer,ArraryMethodId);
jbyte OutJbyte = env->GetByteArrayElements(OutByteArrary,0);
Out = (unsigned char*)OutJbyte;
DecodeSize = AVDecode(m_pVideoDecode, (unsigned char *)In, inputSize, (unsigned char **)&Out, (int *)&pBFrameKey);
復号化が正しいと私は「アウト」が出力画像で満たされていることを確認できた場合に、この関数が戻ると、しかしながら、Java側でpOutBufferはまだ空です。
私はallocateDirect()でGetDirectBufferAddress()のメソッドを使用してみましたが、空ですが、割り付けを使用してJavaで作成されたByteBufferかどうかを知りたいので、どのメソッドを使用する必要がありますか?ありがとう。 – waydeom
Javaコードを投稿できますか? – GooseSerbus