Я хочу преобразовать данные YUV с камеры Android в функции onPreviewFrame в изображение / массив в градациях серого с C-функцией (NDK).Но через несколько секунд я получаю «Исключение OutOfMemory».Тот же код в JAVA работает без проблем с памятью (см. Ниже).Кто-нибудь может мне помочь?
Моя C-функция YUV to GrayRGB:
jint Java_de_htwdresden_trackdetection_app_ImageConverter_YUVtoGrayRGB(
JNIEnv* env, jobject javaThis, jbyteArray src, jintArray out, jint width, jint height){
jbyte *c_src = (*env)->GetByteArrayElements(env, src, NULL);
jint *c_out = (*env)->GetIntArrayElements(env, out, NULL);
if(c_out == NULL)
return -1;
int length = width*height;
int i;
for(i=0; i<length; i++)
{
c_out[i] = 0xFF000000
| (c_src[i] & 0x000000FF)
| ((c_src[i] & 0x000000FF) << 8)
| ((c_src[i] & 0x000000FF) << 16);
}
(*env)->ReleaseByteArrayElements(env, src, c_src, JNI_ABORT);
return 0;}
И функция, которую я вызываю в onPreviewFrame:
public static native int YUVtoGrayRGB(byte[] src, int[] out, int width, int height);
public static Bitmap YUVtoGrayBitmap(byte[] data, int width, int height){
int[] framebuffer = new int[width * height];
//works great without memory problems
/*for (int i = 0; i < framebuffer.length; i++) {
framebuffer[i] = 0xFF000000 | (data[i] & 0x000000FF)
| ((data[i] & 0x000000FF) << 8)
| ((data[i] & 0x000000FF) << 16);
}*/
YUVtoGrayRGB(data, framebuffer, width, height);
return Bitmap.createBitmap(framebuffer, width, height, Config.ARGB_8888);
}