Bom dia pessoal, tenho a função no final do post em uma dll de bridge pra outra dll em c++ que pega 2 imagens (BYTE *) 1024x1024 RGB e manda pra dll que calcula e retorna um bufferR 1024x1024 RGB com o resultado.
O problema é que a JVM está morrendo sempre que chama o método CalculoFV.
A função calculoFV funciona pois a mesma é chamada de outro programa em C++ e retorna a imagem resultado certinha.
Não sei o que está acontecendo, se tenho que fazer alguma conversão ou algo do tipo para passar os buffers para a função calculoFV (que recebe 2 apontadores “BYTE *” como parâmetro) ou se preciso fazer algo mais que não estou fazendo ou ainda se é algum estouro de memória por causa de alguma situação que eu não tratei.
Se alguém tiver sugestões por favor poste.
Código da função JNI da bridge:
JNIEXPORT jbyteArray JNICALL Java_FrenteVerso_calculaFrenteVerso (JNIEnv *env, jobject obj, jbyteArray bufferFrente, jbyteArray bufferVerso)//função recebe 2 "byte []" como parâmetros em JAVA
{
BYTE* bufferR = new BYTE [1024*1024*3];; //buffer de retorno da funcao
jbyte* valsF = env->GetByteArrayElements(bufferFrente,0); //bufferFrente
jbyte* valsV = env->GetByteArrayElements(bufferVerso,0); //bufferVerso
calculoFV(valsF, valsV, bufferR); //recebe 2 apontadores BYTE * para os buffers e retorna o calculo no apontador BYTE * bufferR
jbyteArray bufferRet = env->NewByteArray(1024*1024*3); //aloca para retornar
env->SetByteArrayRegion(bufferRet, 0, 1024*1024*3,(jbyte *)bufferR); //copia
env->ReleaseByteArrayElements(bufferFrente,valS,JNI_ABORT); //é necessario?
env->ReleaseByteArrayElements(bufferVerso ,valD,JNI_ABORT); //é necessario?
delete bufferR; //apaga o buffer alocado
return bufferRet;//retorna o buffer copiado
}