2012-02-28 2 views
1

JNI에서 ByteBuffer를 C++로 전달하려는 경우 AVDecode에서 디코딩 된 이미지를 수신하는 버퍼가 버퍼가 C++로 올바르게 채워지지만 Java 측의 ByteBuffer는 여전히 비어 있습니다. 오류의 원인을 찾으십시오. 감사. pOutBuffer는 JNI를 통해 전달 된 ByteBuffer입니다. 이 함수가 리턴 자바 측 pOutBuffer 여전히 비어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); 

디코딩이 올 바르고 난 '아웃'이 있지만, 출력 이미지로 채워진다 것을 알 수있다.

답변

1

ByteBuffer는 어떻게 생성 되었습니까? 그것은 direct or non-direct ByteBuffer인가요?

allocateDirect 메소드를 사용하여 Java로 작성된 직접적인 ByteBuffer 인 경우 ByteBuffer의 직접 주소를 얻기 위해 GetDirectBufferAddress을 기본 코드로 사용하면 Java에 반영되어야합니다.

+0

allocateDirect()를 시도하고 GetDirectBufferAddress() 메소드를 사용해 보았지만 여전히 비어 있습니다. 할당을 사용하여 Java로 작성된 ByteBuffer인지 알고 싶습니다. 어떤 메소드를 사용해야합니까? 감사. – waydeom

+0

자바 코드를 게시 할 수 있습니까? – GooseSerbus

관련 문제