2012-02-28 17 views
1

バッファが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はまだ空です。

答えて

1

ByteBufferはどのように作成されましたか?それはdirect or non-direct ByteBufferですか?

それはあなたが私たちの取得のByteBuffer、そこにすべての変更の直接のアドレスは、Javaに反映されなければならないためにあなたのネイティブコードでGetDirectBufferAddressできallocateDirect方法を使用してJavaで作成された直接のByteBufferなら。

+0

私はallocateDirect()でGetDirectBufferAddress()のメソッドを使用してみましたが、空ですが、割り付けを使用してJavaで作成されたByteBufferかどうかを知りたいので、どのメソッドを使用する必要がありますか?ありがとう。 – waydeom

+0

Javaコードを投稿できますか? – GooseSerbus

関連する問題