簡體   English   中英

如何在JNI中將char []轉換為ByteBuffer?

[英]How to convert char[] to ByteBuffer in JNI?

我想將JNI上的ByteBuffer傳遞給C ++,以作為接收從AVDecode解碼的圖像的緩沖區,盡管該緩沖區已正確地用C ++填充,但是Java端的ByteBuffer仍然為空。 請幫助我找出錯誤所在。 謝謝。 pOutBuffer是通過JNI傳遞的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);

解碼是正確的,我可以看到輸出圖像充滿了“ Out”,但是,當該函數返回時,Java端的pOutBuffer仍然為空。

ByteBuffer是如何創建的? 直接還是非直接的 ByteBuffer?

如果它是直接的ByteBuffer,它是使用Java中使用allocateDirect方法創建的,則可以在本機代碼中使用GetDirectBufferAddress來獲取ByteBuffer的直接地址,並且其中的任何更改都應反映在Java中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM