Parece que ya es posible con el firmware original. Estaba a punto de intentar rastrear una aplicación de cámara con NDK (gracias a Tutorial de Sisik con una demostración ) con strace
para ver qué llamadas a la API conducen a qué ioctl
s para ayudar a búsquedas posteriores, cuando, mientras recortaba la demo, me di cuenta de que la API nativa de la cámara expone AIMAGE_FORMAT_RAW16
con dimensiones 4144×3106 en mi Galaxy SM-A320F/DS. Después de probar a capturar una imagen en este formato, obtuve una salida Bayer de 16 bits, que tras un demosaicing simplista y un balance de blancos resultó en una imagen RAW bastante decente.
Sin embargo, hay una pequeña rareza: la parte inferior de la imagen (píxeles 2333 a 3106) siempre está llena de ceros. No estoy seguro de por qué es así, pero al menos el 75% superior de los datos están presentes y son utilizables.
Cómo obtener soporte RAW en OpenCamera
Actualmente, OpenCamera detecta si una cámara admite RAW mediante REQUEST_AVAILABLE_CAPABILITIES_RAW
. Si no hay tal capacidad, la detección simplemente da un resultado negativo. Para SM-A320F esto es incorrecto, porque no informa de esta capacidad, pero el formato RAW16 está entre los formatos de salida soportados.
Para solucionar este problema, podemos aplicar el siguiente parche a OpenCamera 1.47.3 y crear nuestro propio APK. Este parche eliminará la comprobación de la capacidad, haciendo que OpenCamera busque el formato deseado independientemente de ello.
diff --git a/app/src/main/java/net/sourceforge/opencamera/cameracontroller/CameraController2.java b/app/src/main/java/net/sourceforge/opencamera/cameracontroller/CameraController2.java
index 2c6463c..939b00b 100644
--- a/app/src/main/java/net/sourceforge/opencamera/cameracontroller/CameraController2.java
+++ b/app/src/main/java/net/sourceforge/opencamera/cameracontroller/CameraController2.java
@@ -2062,7 +2062,7 @@ public class CameraController2 extends CameraController {
//camera_features.picture_sizes.get(0).supports_burst = false;
raw_size = null;
- if( capabilities_raw ) {
+ if( true || capabilities_raw ) {
android.util.Size [] raw_camera_picture_sizes = configs.getOutputSizes(ImageFormat.RAW_SENSOR);
if( raw_camera_picture_sizes == null ) {
if( MyDebug.LOG )
He informado de esto en el rastreador de problemas de OpenCamera como billete 661 .
1 votos
Posible duplicado de Hacer fotos sin procesar con dispositivos Android
0 votos
@Zackary no lo es, ver la edición.