gpt4 book ai didi

android - 如何在 JNI 中将 char[] 转换为 ByteBuffer?

转载 作者:行者123 更新时间:2023-11-30 04:19:34 30 4
gpt4 key购买 nike

我想通过 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 是如何创建的?是direct or non-direct吗字节缓冲区?

如果它是在 Java 中使用 allocateDirect 方法创建的直接 ByteBuffer,您可以在 native 代码中使用 GetDirectBufferAddress 来获取 ByteBuffer 的直接地址和任何那里的更改应该反射(reflect)在 Java 中。

关于android - 如何在 JNI 中将 char[] 转换为 ByteBuffer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9477821/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com