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

Commit 44239575 authored by Igor Murashkin's avatar Igor Murashkin
Browse files

camera2.legacy: Add aberration, noisereduction, timestamp source keys

Bug: 17328591
Change-Id: I037908e0db505ace1ef62d5aa0622596d8fa2713
parent 3d13b16a
Loading
Loading
Loading
Loading
+26 −0
Original line number Original line Diff line number Diff line
@@ -165,6 +165,12 @@ public class LegacyMetadataMapper {


    private static void mapCharacteristicsFromParameters(CameraMetadataNative m,
    private static void mapCharacteristicsFromParameters(CameraMetadataNative m,
            Camera.Parameters p) {
            Camera.Parameters p) {

        /*
         * colorCorrection.*
         */
        m.set(COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES,
                new int[] { COLOR_CORRECTION_ABERRATION_MODE_FAST });
        /*
        /*
         * control.ae*
         * control.ae*
         */
         */
@@ -195,6 +201,12 @@ public class LegacyMetadataMapper {
         */
         */
        mapJpeg(m, p);
        mapJpeg(m, p);


        /*
         * noiseReduction.*
         */
        m.set(NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES,
                new int[] { NOISE_REDUCTION_MODE_FAST });

        /*
        /*
         * scaler.*
         * scaler.*
         */
         */
@@ -626,6 +638,7 @@ public class LegacyMetadataMapper {
            // Note: We only list public keys. Native HALs should list ALL keys regardless of visibility.
            // Note: We only list public keys. Native HALs should list ALL keys regardless of visibility.


            Key<?> availableKeys[] = new Key<?>[] {
            Key<?> availableKeys[] = new Key<?>[] {
                    CameraCharacteristics.COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES     ,
                    CameraCharacteristics.CONTROL_AE_AVAILABLE_ANTIBANDING_MODES          ,
                    CameraCharacteristics.CONTROL_AE_AVAILABLE_ANTIBANDING_MODES          ,
                    CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES                      ,
                    CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES                      ,
                    CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES          ,
                    CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES          ,
@@ -642,6 +655,7 @@ public class LegacyMetadataMapper {
                    CameraCharacteristics.JPEG_AVAILABLE_THUMBNAIL_SIZES                  ,
                    CameraCharacteristics.JPEG_AVAILABLE_THUMBNAIL_SIZES                  ,
                    CameraCharacteristics.LENS_FACING                                     ,
                    CameraCharacteristics.LENS_FACING                                     ,
                    CameraCharacteristics.LENS_INFO_AVAILABLE_FOCAL_LENGTHS               ,
                    CameraCharacteristics.LENS_INFO_AVAILABLE_FOCAL_LENGTHS               ,
                    CameraCharacteristics.NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES ,
                    CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES                  ,
                    CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES                  ,
                    CameraCharacteristics.REQUEST_MAX_NUM_OUTPUT_STREAMS                  ,
                    CameraCharacteristics.REQUEST_MAX_NUM_OUTPUT_STREAMS                  ,
                    CameraCharacteristics.REQUEST_PARTIAL_RESULT_COUNT                    ,
                    CameraCharacteristics.REQUEST_PARTIAL_RESULT_COUNT                    ,
@@ -653,6 +667,7 @@ public class LegacyMetadataMapper {
                    CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE                   ,
                    CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE                   ,
                    CameraCharacteristics.SENSOR_INFO_PHYSICAL_SIZE                       ,
                    CameraCharacteristics.SENSOR_INFO_PHYSICAL_SIZE                       ,
                    CameraCharacteristics.SENSOR_INFO_PIXEL_ARRAY_SIZE                    ,
                    CameraCharacteristics.SENSOR_INFO_PIXEL_ARRAY_SIZE                    ,
                    CameraCharacteristics.SENSOR_INFO_TIMESTAMP_SOURCE                    ,
                    CameraCharacteristics.SENSOR_ORIENTATION                              ,
                    CameraCharacteristics.SENSOR_ORIENTATION                              ,
                    CameraCharacteristics.STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES     ,
                    CameraCharacteristics.STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES     ,
                    CameraCharacteristics.STATISTICS_INFO_MAX_FACE_COUNT                  ,
                    CameraCharacteristics.STATISTICS_INFO_MAX_FACE_COUNT                  ,
@@ -676,6 +691,7 @@ public class LegacyMetadataMapper {
         */
         */
        {
        {
            CaptureRequest.Key<?> defaultAvailableKeys[] = new CaptureRequest.Key<?>[] {
            CaptureRequest.Key<?> defaultAvailableKeys[] = new CaptureRequest.Key<?>[] {
                    CaptureRequest.COLOR_CORRECTION_ABERRATION_MODE,
                    CaptureRequest.CONTROL_AE_ANTIBANDING_MODE,
                    CaptureRequest.CONTROL_AE_ANTIBANDING_MODE,
                    CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION,
                    CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION,
                    CaptureRequest.CONTROL_AE_LOCK,
                    CaptureRequest.CONTROL_AE_LOCK,
@@ -699,6 +715,7 @@ public class LegacyMetadataMapper {
                    CaptureRequest.JPEG_THUMBNAIL_QUALITY,
                    CaptureRequest.JPEG_THUMBNAIL_QUALITY,
                    CaptureRequest.JPEG_THUMBNAIL_SIZE,
                    CaptureRequest.JPEG_THUMBNAIL_SIZE,
                    CaptureRequest.LENS_FOCAL_LENGTH,
                    CaptureRequest.LENS_FOCAL_LENGTH,
                    CaptureRequest.NOISE_REDUCTION_MODE,
                    CaptureRequest.SCALER_CROP_REGION,
                    CaptureRequest.SCALER_CROP_REGION,
                    CaptureRequest.STATISTICS_FACE_DETECT_MODE,
                    CaptureRequest.STATISTICS_FACE_DETECT_MODE,
            };
            };
@@ -723,6 +740,7 @@ public class LegacyMetadataMapper {
         */
         */
        {
        {
            CaptureResult.Key<?> defaultAvailableKeys[] = new CaptureResult.Key<?>[] {
            CaptureResult.Key<?> defaultAvailableKeys[] = new CaptureResult.Key<?>[] {
                    CaptureResult.COLOR_CORRECTION_ABERRATION_MODE                 ,
                    CaptureResult.CONTROL_AE_ANTIBANDING_MODE                      ,
                    CaptureResult.CONTROL_AE_ANTIBANDING_MODE                      ,
                    CaptureResult.CONTROL_AE_EXPOSURE_COMPENSATION                 ,
                    CaptureResult.CONTROL_AE_EXPOSURE_COMPENSATION                 ,
                    CaptureResult.CONTROL_AE_LOCK                                  ,
                    CaptureResult.CONTROL_AE_LOCK                                  ,
@@ -740,6 +758,7 @@ public class LegacyMetadataMapper {
                    CaptureResult.JPEG_QUALITY                                     ,
                    CaptureResult.JPEG_QUALITY                                     ,
                    CaptureResult.JPEG_THUMBNAIL_QUALITY                           ,
                    CaptureResult.JPEG_THUMBNAIL_QUALITY                           ,
                    CaptureResult.LENS_FOCAL_LENGTH                                ,
                    CaptureResult.LENS_FOCAL_LENGTH                                ,
                    CaptureResult.NOISE_REDUCTION_MODE                             ,
                    CaptureResult.REQUEST_PIPELINE_DEPTH                           ,
                    CaptureResult.REQUEST_PIPELINE_DEPTH                           ,
                    CaptureResult.SCALER_CROP_REGION                               ,
                    CaptureResult.SCALER_CROP_REGION                               ,
                    CaptureResult.SENSOR_TIMESTAMP                                 ,
                    CaptureResult.SENSOR_TIMESTAMP                                 ,
@@ -844,6 +863,13 @@ public class LegacyMetadataMapper {


            m.set(SENSOR_INFO_PHYSICAL_SIZE, new SizeF(width, height)); // in mm
            m.set(SENSOR_INFO_PHYSICAL_SIZE, new SizeF(width, height)); // in mm
        }
        }

        /*
         * sensor.info.timestampSource
         */
        {
            m.set(SENSOR_INFO_TIMESTAMP_SOURCE, SENSOR_INFO_TIMESTAMP_SOURCE_UNKNOWN);
        }
    }
    }


    private static void mapStatistics(CameraMetadataNative m, Parameters p) {
    private static void mapStatistics(CameraMetadataNative m, Parameters p) {
+29 −0
Original line number Original line Diff line number Diff line
@@ -80,6 +80,20 @@ public class LegacyRequestMapper {
            }
            }
        }
        }


        /*
         * colorCorrection.*
         */
        // colorCorrection.aberrationMode
        {
            int aberrationMode = ParamsUtils.getOrDefault(request,
                    COLOR_CORRECTION_ABERRATION_MODE,
                    /*defaultValue*/COLOR_CORRECTION_ABERRATION_MODE_FAST);

            if (aberrationMode != COLOR_CORRECTION_ABERRATION_MODE_FAST) {
                Log.w(TAG, "convertRequestToMetadata - Ignoring unsupported " +
                        "colorCorrection.aberrationMode = " + aberrationMode);
            }
        }


        /*
        /*
         * control.ae*
         * control.ae*
@@ -419,6 +433,21 @@ public class LegacyRequestMapper {
                }
                }
            }
            }
        }
        }

        /*
         * noiseReduction.*
         */
        // noiseReduction.mode
        {
            int mode = ParamsUtils.getOrDefault(request,
                    NOISE_REDUCTION_MODE,
                    /*defaultValue*/NOISE_REDUCTION_MODE_FAST);

            if (mode != NOISE_REDUCTION_MODE_FAST) {
                Log.w(TAG, "convertRequestToMetadata - Ignoring unsupported " +
                        "noiseReduction.mode = " + mode);
            }
        }
    }
    }


    private static boolean checkForCompleteGpsData(Location location) {
    private static boolean checkForCompleteGpsData(Location location) {
+17 −8
Original line number Original line Diff line number Diff line
@@ -28,14 +28,12 @@ import android.hardware.camera2.legacy.ParameterUtils.ZoomData;
import android.hardware.camera2.params.MeteringRectangle;
import android.hardware.camera2.params.MeteringRectangle;
import android.hardware.camera2.utils.ListUtils;
import android.hardware.camera2.utils.ListUtils;
import android.hardware.camera2.utils.ParamsUtils;
import android.hardware.camera2.utils.ParamsUtils;
import android.location.Location;
import android.util.Log;
import android.util.Log;
import android.util.Size;
import android.util.Size;


import java.util.ArrayList;
import java.util.ArrayList;
import java.util.List;
import java.util.List;


import static com.android.internal.util.Preconditions.*;
import static android.hardware.camera2.CaptureResult.*;
import static android.hardware.camera2.CaptureResult.*;


/**
/**
@@ -73,7 +71,7 @@ public class LegacyResultMapper {
            result = new CameraMetadataNative(mCachedResult);
            result = new CameraMetadataNative(mCachedResult);
            cached = true;
            cached = true;
        } else {
        } else {
            result = convertResultMetadata(legacyRequest, timestamp);
            result = convertResultMetadata(legacyRequest);
            cached = false;
            cached = false;


            // Always cache a *copy* of the metadata result,
            // Always cache a *copy* of the metadata result,
@@ -106,12 +104,9 @@ public class LegacyResultMapper {
     * Generate capture result metadata from the legacy camera request.
     * Generate capture result metadata from the legacy camera request.
     *
     *
     * @param legacyRequest a non-{@code null} legacy request containing the latest parameters
     * @param legacyRequest a non-{@code null} legacy request containing the latest parameters
     * @param timestamp the timestamp to use for this result in nanoseconds.
     *
     * @return a {@link CameraMetadataNative} object containing result metadata.
     * @return a {@link CameraMetadataNative} object containing result metadata.
     */
     */
    private static CameraMetadataNative convertResultMetadata(LegacyRequest legacyRequest,
    private static CameraMetadataNative convertResultMetadata(LegacyRequest legacyRequest) {
                                                      long timestamp) {
        CameraCharacteristics characteristics = legacyRequest.characteristics;
        CameraCharacteristics characteristics = legacyRequest.characteristics;
        CaptureRequest request = legacyRequest.captureRequest;
        CaptureRequest request = legacyRequest.captureRequest;
        Size previewSize = legacyRequest.previewSize;
        Size previewSize = legacyRequest.previewSize;
@@ -124,6 +119,15 @@ public class LegacyResultMapper {
        ZoomData zoomData = ParameterUtils.convertScalerCropRegion(activeArraySize,
        ZoomData zoomData = ParameterUtils.convertScalerCropRegion(activeArraySize,
                request.get(CaptureRequest.SCALER_CROP_REGION), previewSize, params);
                request.get(CaptureRequest.SCALER_CROP_REGION), previewSize, params);


        /*
         * colorCorrection
         */
        // colorCorrection.aberrationMode
        {
            // Always hardcoded to FAST
            result.set(COLOR_CORRECTION_ABERRATION_MODE, COLOR_CORRECTION_ABERRATION_MODE_FAST);
        }

        /*
        /*
         * control
         * control
         */
         */
@@ -274,7 +278,12 @@ public class LegacyResultMapper {
            Log.w(TAG, "Null thumbnail size received from parameters.");
            Log.w(TAG, "Null thumbnail size received from parameters.");
        }
        }


        // TODO: Remaining result metadata tags conversions.
        /*
         * noiseReduction.*
         */
        // noiseReduction.mode
        result.set(NOISE_REDUCTION_MODE, NOISE_REDUCTION_MODE_FAST);

        return result;
        return result;
    }
    }