Hi, Alex. nice to meet you.
thanks for attention, I am Android developer, I am working in project where it capture frames fps from camera of mobile phone. after each frame is processed to get bitmap using a native library with opencv SDK and after this bitmap is showed in an ImageView. this process to consume heap memory and to affect the performance the app. I add the next tag in the manifest.xml to increase the heap memory:
<application
android:name="app"
android:largeHeap="true" />
With this, the app work fine when to generate an apk version in debug modem but when to generate an apk version in release mode, the app is very slow and doesn't fine, there is issues in the performance.
I worked with a logic using a SurfaceView component to get frames from camera, I use a SurfaceView because I need to use in background inside of the app, I want to ask you, how do I solve this problem, counting on your help.
I am using this logic to get frames:
public synchronized void onPreviewFrame(final byte[] data, final Camera camera) {
executorService.execute(new Runnable() {
public void run() {
android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND);
Camera.Parameters parameters = camera.getParameters();
orientation = OrientationDevice.getOrientationDevice().getOrientation();
orientation = normalize(orientation);
//converter yuv to bitmap
int width = parameters.getPreviewSize().width;
int height = parameters.getPreviewSize().height;
YuvImage yuv = new YuvImage(data, parameters.getPreviewFormat(), width, height, null);
ByteArrayOutputStream out = new ByteArrayOutputStream();
yuv.compressToJpeg(new Rect(0, 0, width, height), 80, out);
byte[] bytes = out.toByteArray();
Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
// rotate image
if (cameraId == Camera.CameraInfo.CAMERA_FACING_FRONT) {
matrix.setScale(-1, 1);
matrix.postTranslate(bitmap.getWidth(), 0);
matrix.postRotate(rotation + 90);
} else {
matrix.postRotate(rotation + 90);
}
// process bitmap from method jni
....
if (bitmap != null && !bitmap.isRecycled()) {
bitmap.recycle();
bitmap = null;
}
camera.addCallbackBuffer(data);
return;
});
}
};
Thanks for your attention, can you help me, please. I review your work, it is very good and you have experience in this topic and a big participation in the developer community.