Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 88878d25 authored by Mark Harman's avatar Mark Harman Committed by Mohammed Althaf T
Browse files

Fix setting scene mode flags, needed to fix green tint on Samsung Qualcomm...

Fix setting scene mode flags, needed to fix green tint on Samsung Qualcomm devices with HDR/expo and face detection.
parent 106f6b0c
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -54,6 +54,7 @@ FIXED Device specific crashes when starting with Camera2 API (related to camer
FIXED   Crash when saving images if unable to create thumbnail.
FIXED   ANRs and poor performance if using Storage Access Framework when save folder had lots of
        files (due to trying to measure free memory).
FIXED   HDR images coming out green on Samsung Qualcomm devices.
FIXED   If force destroyed when in settings, the camera would be incorrectly opened when application
        was recreated (camera should only be reopened when leaving settings).
FIXED   Long pressing on the shutter button in video mode meant nothing happened when releasing
+25 −11
Original line number Diff line number Diff line
@@ -535,8 +535,14 @@ public class CameraController2 extends CameraController {
                    Log.d(TAG, "nr_mode: " + (nr_mode==null ? "null" : nr_mode));
                    Integer edge_mode = builder.get(CaptureRequest.EDGE_MODE);
                    Log.d(TAG, "edge_mode: " + (edge_mode==null ? "null" : edge_mode));
                    Integer cc_mode = builder.get(CaptureRequest.COLOR_CORRECTION_ABERRATION_MODE);
                    Integer control_mode = builder.get(CaptureRequest.CONTROL_MODE);
                    Log.d(TAG, "control_mode: " + (control_mode==null ? "null" : control_mode));
                    Integer scene_mode = builder.get(CaptureRequest.CONTROL_SCENE_MODE);
                    Log.d(TAG, "scene_mode: " + (scene_mode==null ? "null" : scene_mode));
                    Integer cc_mode = builder.get(CaptureRequest.COLOR_CORRECTION_MODE);
                    Log.d(TAG, "cc_mode: " + (cc_mode==null ? "null" : cc_mode));
                    Integer cca_mode = builder.get(CaptureRequest.COLOR_CORRECTION_ABERRATION_MODE);
                    Log.d(TAG, "cca_mode: " + (cc_mode==null ? "null" : cca_mode));
                    /*if( Build.VERSION.SDK_INT >= Build.VERSION_CODES.N ) {
                        Integer raw_sensitivity_boost = builder.get(CaptureRequest.CONTROL_POST_RAW_SENSITIVITY_BOOST);
                        Log.d(TAG, "raw_sensitivity_boost: " + (raw_sensitivity_boost==null ? "null" : raw_sensitivity_boost));
@@ -551,6 +557,7 @@ public class CameraController2 extends CameraController {
            if( MyDebug.LOG ) {
                Log.d(TAG, "setSceneMode");
                Log.d(TAG, "builder: " + builder);
                Log.d(TAG, "has_face_detect_mode: " + has_face_detect_mode);
            }

            if( sessionType == SessionType.SESSIONTYPE_EXTENSION ) {
@@ -558,27 +565,34 @@ public class CameraController2 extends CameraController {
                return false;
            }

            Integer current_mode = builder.get(CaptureRequest.CONTROL_MODE);
            Integer current_scene_mode = builder.get(CaptureRequest.CONTROL_SCENE_MODE);
            if( MyDebug.LOG )
                Log.d(TAG, "current_scene_mode: " + current_scene_mode);
            if( has_face_detect_mode ) {
                // face detection mode overrides scene mode
                if( current_scene_mode == null || current_scene_mode != CameraMetadata.CONTROL_SCENE_MODE_FACE_PRIORITY ) {
                if( MyDebug.LOG )
                    Log.d(TAG, "setting scene mode for face detection");
                builder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_USE_SCENE_MODE);
                builder.set(CaptureRequest.CONTROL_SCENE_MODE, CameraMetadata.CONTROL_SCENE_MODE_FACE_PRIORITY);
                if( current_mode == null || current_mode != CameraMetadata.CONTROL_MODE_USE_SCENE_MODE || current_scene_mode == null || current_scene_mode != CameraMetadata.CONTROL_SCENE_MODE_FACE_PRIORITY )
                    return true;
            }
            }
            else if( current_scene_mode == null || current_scene_mode != scene_mode ) {
            else {
                if( MyDebug.LOG )
                    Log.d(TAG, "setting scene mode: " + scene_mode);
                int new_mode;
                if( scene_mode == CameraMetadata.CONTROL_SCENE_MODE_DISABLED ) {
                    builder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO);
                    // note we set CONTROL_MODE_AUTO even if using manual exposure, focus or awb, as we set that separately via
                    // CONTROL_AE_MODE_OFF etc
                    new_mode = CameraMetadata.CONTROL_MODE_AUTO;
                }
                else {
                    builder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_USE_SCENE_MODE);
                    new_mode = CameraMetadata.CONTROL_MODE_USE_SCENE_MODE;
                }
                builder.set(CaptureRequest.CONTROL_MODE, new_mode);
                builder.set(CaptureRequest.CONTROL_SCENE_MODE, scene_mode);
                if( current_mode == null || current_mode != new_mode || current_scene_mode == null || current_scene_mode != scene_mode )
                    return true;
            }
            return false;