Merge "audio policy: engine configurable: upgrade to PFW 3.2.4" into nyc-dev
diff --git a/camera/ndk/impl/ACameraCaptureSession.cpp b/camera/ndk/impl/ACameraCaptureSession.cpp
index 7f1b75d..b741e46 100644
--- a/camera/ndk/impl/ACameraCaptureSession.cpp
+++ b/camera/ndk/impl/ACameraCaptureSession.cpp
@@ -39,6 +39,15 @@
void
ACameraCaptureSession::closeByApp() {
+ {
+ Mutex::Autolock _l(mSessionLock);
+ if (mClosedByApp) {
+ // Do not close twice
+ return;
+ }
+ mClosedByApp = true;
+ }
+
sp<CameraDevice> dev = getDeviceSp();
if (dev != nullptr) {
dev->lockDeviceForSessionOps();
diff --git a/camera/ndk/impl/ACameraCaptureSession.h b/camera/ndk/impl/ACameraCaptureSession.h
index 1db1b21..f20b324 100644
--- a/camera/ndk/impl/ACameraCaptureSession.h
+++ b/camera/ndk/impl/ACameraCaptureSession.h
@@ -103,6 +103,7 @@
const ACameraCaptureSession_stateCallbacks mUserSessionCallback;
const wp<CameraDevice> mDevice;
bool mIsClosed = false;
+ bool mClosedByApp = false;
bool mIdle = true;
Mutex mSessionLock;
};
diff --git a/include/camera/ndk/NdkCameraMetadataTags.h b/include/camera/ndk/NdkCameraMetadataTags.h
index 43f5193..d7035a7 100644
--- a/include/camera/ndk/NdkCameraMetadataTags.h
+++ b/include/camera/ndk/NdkCameraMetadataTags.h
@@ -98,273 +98,382 @@
typedef enum acamera_metadata_tag {
ACAMERA_COLOR_CORRECTION_MODE = // byte (enum)
ACAMERA_COLOR_CORRECTION_START,
- ACAMERA_COLOR_CORRECTION_TRANSFORM, // rational[3*3]
- ACAMERA_COLOR_CORRECTION_GAINS, // float[4]
- ACAMERA_COLOR_CORRECTION_ABERRATION_MODE, // byte (enum)
- ACAMERA_COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES, // byte[n]
+ ACAMERA_COLOR_CORRECTION_TRANSFORM = // rational[3*3]
+ ACAMERA_COLOR_CORRECTION_START + 1,
+ ACAMERA_COLOR_CORRECTION_GAINS = // float[4]
+ ACAMERA_COLOR_CORRECTION_START + 2,
+ ACAMERA_COLOR_CORRECTION_ABERRATION_MODE = // byte (enum)
+ ACAMERA_COLOR_CORRECTION_START + 3,
+ ACAMERA_COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES = // byte[n]
+ ACAMERA_COLOR_CORRECTION_START + 4,
ACAMERA_COLOR_CORRECTION_END,
ACAMERA_CONTROL_AE_ANTIBANDING_MODE = // byte (enum)
ACAMERA_CONTROL_START,
- ACAMERA_CONTROL_AE_EXPOSURE_COMPENSATION, // int32
- ACAMERA_CONTROL_AE_LOCK, // byte (enum)
- ACAMERA_CONTROL_AE_MODE, // byte (enum)
- ACAMERA_CONTROL_AE_REGIONS, // int32[5*area_count]
- ACAMERA_CONTROL_AE_TARGET_FPS_RANGE, // int32[2]
- ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER, // byte (enum)
- ACAMERA_CONTROL_AF_MODE, // byte (enum)
- ACAMERA_CONTROL_AF_REGIONS, // int32[5*area_count]
- ACAMERA_CONTROL_AF_TRIGGER, // byte (enum)
- ACAMERA_CONTROL_AWB_LOCK, // byte (enum)
- ACAMERA_CONTROL_AWB_MODE, // byte (enum)
- ACAMERA_CONTROL_AWB_REGIONS, // int32[5*area_count]
- ACAMERA_CONTROL_CAPTURE_INTENT, // byte (enum)
- ACAMERA_CONTROL_EFFECT_MODE, // byte (enum)
- ACAMERA_CONTROL_MODE, // byte (enum)
- ACAMERA_CONTROL_SCENE_MODE, // byte (enum)
- ACAMERA_CONTROL_VIDEO_STABILIZATION_MODE, // byte (enum)
- ACAMERA_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES, // byte[n]
- ACAMERA_CONTROL_AE_AVAILABLE_MODES, // byte[n]
- ACAMERA_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES, // int32[2*n]
- ACAMERA_CONTROL_AE_COMPENSATION_RANGE, // int32[2]
- ACAMERA_CONTROL_AE_COMPENSATION_STEP, // rational
- ACAMERA_CONTROL_AF_AVAILABLE_MODES, // byte[n]
- ACAMERA_CONTROL_AVAILABLE_EFFECTS, // byte[n]
- ACAMERA_CONTROL_AVAILABLE_SCENE_MODES, // byte[n]
- ACAMERA_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES, // byte[n]
- ACAMERA_CONTROL_AWB_AVAILABLE_MODES, // byte[n]
- ACAMERA_CONTROL_MAX_REGIONS, // int32[3]
- ACAMERA_CONTROL_RESERVED_29,
- ACAMERA_CONTROL_RESERVED_30,
- ACAMERA_CONTROL_AE_STATE, // byte (enum)
- ACAMERA_CONTROL_AF_STATE, // byte (enum)
- ACAMERA_CONTROL_RESERVED_33,
- ACAMERA_CONTROL_AWB_STATE, // byte (enum)
- ACAMERA_CONTROL_AVAILABLE_HIGH_SPEED_VIDEO_CONFIGURATIONS, // int32[5*n]
- ACAMERA_CONTROL_AE_LOCK_AVAILABLE, // byte (enum)
- ACAMERA_CONTROL_AWB_LOCK_AVAILABLE, // byte (enum)
- ACAMERA_CONTROL_AVAILABLE_MODES, // byte[n]
- ACAMERA_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE, // int32[2]
- ACAMERA_CONTROL_POST_RAW_SENSITIVITY_BOOST, // int32
+ ACAMERA_CONTROL_AE_EXPOSURE_COMPENSATION = // int32
+ ACAMERA_CONTROL_START + 1,
+ ACAMERA_CONTROL_AE_LOCK = // byte (enum)
+ ACAMERA_CONTROL_START + 2,
+ ACAMERA_CONTROL_AE_MODE = // byte (enum)
+ ACAMERA_CONTROL_START + 3,
+ ACAMERA_CONTROL_AE_REGIONS = // int32[5*area_count]
+ ACAMERA_CONTROL_START + 4,
+ ACAMERA_CONTROL_AE_TARGET_FPS_RANGE = // int32[2]
+ ACAMERA_CONTROL_START + 5,
+ ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER = // byte (enum)
+ ACAMERA_CONTROL_START + 6,
+ ACAMERA_CONTROL_AF_MODE = // byte (enum)
+ ACAMERA_CONTROL_START + 7,
+ ACAMERA_CONTROL_AF_REGIONS = // int32[5*area_count]
+ ACAMERA_CONTROL_START + 8,
+ ACAMERA_CONTROL_AF_TRIGGER = // byte (enum)
+ ACAMERA_CONTROL_START + 9,
+ ACAMERA_CONTROL_AWB_LOCK = // byte (enum)
+ ACAMERA_CONTROL_START + 10,
+ ACAMERA_CONTROL_AWB_MODE = // byte (enum)
+ ACAMERA_CONTROL_START + 11,
+ ACAMERA_CONTROL_AWB_REGIONS = // int32[5*area_count]
+ ACAMERA_CONTROL_START + 12,
+ ACAMERA_CONTROL_CAPTURE_INTENT = // byte (enum)
+ ACAMERA_CONTROL_START + 13,
+ ACAMERA_CONTROL_EFFECT_MODE = // byte (enum)
+ ACAMERA_CONTROL_START + 14,
+ ACAMERA_CONTROL_MODE = // byte (enum)
+ ACAMERA_CONTROL_START + 15,
+ ACAMERA_CONTROL_SCENE_MODE = // byte (enum)
+ ACAMERA_CONTROL_START + 16,
+ ACAMERA_CONTROL_VIDEO_STABILIZATION_MODE = // byte (enum)
+ ACAMERA_CONTROL_START + 17,
+ ACAMERA_CONTROL_AE_AVAILABLE_ANTIBANDING_MODES = // byte[n]
+ ACAMERA_CONTROL_START + 18,
+ ACAMERA_CONTROL_AE_AVAILABLE_MODES = // byte[n]
+ ACAMERA_CONTROL_START + 19,
+ ACAMERA_CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES = // int32[2*n]
+ ACAMERA_CONTROL_START + 20,
+ ACAMERA_CONTROL_AE_COMPENSATION_RANGE = // int32[2]
+ ACAMERA_CONTROL_START + 21,
+ ACAMERA_CONTROL_AE_COMPENSATION_STEP = // rational
+ ACAMERA_CONTROL_START + 22,
+ ACAMERA_CONTROL_AF_AVAILABLE_MODES = // byte[n]
+ ACAMERA_CONTROL_START + 23,
+ ACAMERA_CONTROL_AVAILABLE_EFFECTS = // byte[n]
+ ACAMERA_CONTROL_START + 24,
+ ACAMERA_CONTROL_AVAILABLE_SCENE_MODES = // byte[n]
+ ACAMERA_CONTROL_START + 25,
+ ACAMERA_CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES = // byte[n]
+ ACAMERA_CONTROL_START + 26,
+ ACAMERA_CONTROL_AWB_AVAILABLE_MODES = // byte[n]
+ ACAMERA_CONTROL_START + 27,
+ ACAMERA_CONTROL_MAX_REGIONS = // int32[3]
+ ACAMERA_CONTROL_START + 28,
+ ACAMERA_CONTROL_AE_STATE = // byte (enum)
+ ACAMERA_CONTROL_START + 31,
+ ACAMERA_CONTROL_AF_STATE = // byte (enum)
+ ACAMERA_CONTROL_START + 32,
+ ACAMERA_CONTROL_AWB_STATE = // byte (enum)
+ ACAMERA_CONTROL_START + 34,
+ ACAMERA_CONTROL_AVAILABLE_HIGH_SPEED_VIDEO_CONFIGURATIONS = // int32[5*n]
+ ACAMERA_CONTROL_START + 35,
+ ACAMERA_CONTROL_AE_LOCK_AVAILABLE = // byte (enum)
+ ACAMERA_CONTROL_START + 36,
+ ACAMERA_CONTROL_AWB_LOCK_AVAILABLE = // byte (enum)
+ ACAMERA_CONTROL_START + 37,
+ ACAMERA_CONTROL_AVAILABLE_MODES = // byte[n]
+ ACAMERA_CONTROL_START + 38,
+ ACAMERA_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE = // int32[2]
+ ACAMERA_CONTROL_START + 39,
+ ACAMERA_CONTROL_POST_RAW_SENSITIVITY_BOOST = // int32
+ ACAMERA_CONTROL_START + 40,
ACAMERA_CONTROL_END,
- ACAMERA_DEMOSAIC_RESERVED_0 =
- ACAMERA_DEMOSAIC_START,
- ACAMERA_DEMOSAIC_END,
-
ACAMERA_EDGE_MODE = // byte (enum)
ACAMERA_EDGE_START,
- ACAMERA_EDGE_RESERVED_1,
- ACAMERA_EDGE_AVAILABLE_EDGE_MODES, // byte[n]
+ ACAMERA_EDGE_AVAILABLE_EDGE_MODES = // byte[n]
+ ACAMERA_EDGE_START + 2,
ACAMERA_EDGE_END,
- ACAMERA_FLASH_RESERVED_0 =
- ACAMERA_FLASH_START,
- ACAMERA_FLASH_RESERVED_1,
- ACAMERA_FLASH_MODE, // byte (enum)
- ACAMERA_FLASH_RESERVED_3,
- ACAMERA_FLASH_RESERVED_4,
- ACAMERA_FLASH_STATE, // byte (enum)
+ ACAMERA_FLASH_MODE = // byte (enum)
+ ACAMERA_FLASH_START + 2,
+ ACAMERA_FLASH_STATE = // byte (enum)
+ ACAMERA_FLASH_START + 5,
ACAMERA_FLASH_END,
ACAMERA_FLASH_INFO_AVAILABLE = // byte (enum)
ACAMERA_FLASH_INFO_START,
- ACAMERA_FLASH_INFO_RESERVED_1,
ACAMERA_FLASH_INFO_END,
ACAMERA_HOT_PIXEL_MODE = // byte (enum)
ACAMERA_HOT_PIXEL_START,
- ACAMERA_HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES, // byte[n]
+ ACAMERA_HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES = // byte[n]
+ ACAMERA_HOT_PIXEL_START + 1,
ACAMERA_HOT_PIXEL_END,
ACAMERA_JPEG_GPS_COORDINATES = // double[3]
ACAMERA_JPEG_START,
- ACAMERA_JPEG_GPS_PROCESSING_METHOD, // byte
- ACAMERA_JPEG_GPS_TIMESTAMP, // int64
- ACAMERA_JPEG_ORIENTATION, // int32
- ACAMERA_JPEG_QUALITY, // byte
- ACAMERA_JPEG_THUMBNAIL_QUALITY, // byte
- ACAMERA_JPEG_THUMBNAIL_SIZE, // int32[2]
- ACAMERA_JPEG_AVAILABLE_THUMBNAIL_SIZES, // int32[2*n]
- ACAMERA_JPEG_RESERVED_8,
- ACAMERA_JPEG_RESERVED_9,
+ ACAMERA_JPEG_GPS_PROCESSING_METHOD = // byte
+ ACAMERA_JPEG_START + 1,
+ ACAMERA_JPEG_GPS_TIMESTAMP = // int64
+ ACAMERA_JPEG_START + 2,
+ ACAMERA_JPEG_ORIENTATION = // int32
+ ACAMERA_JPEG_START + 3,
+ ACAMERA_JPEG_QUALITY = // byte
+ ACAMERA_JPEG_START + 4,
+ ACAMERA_JPEG_THUMBNAIL_QUALITY = // byte
+ ACAMERA_JPEG_START + 5,
+ ACAMERA_JPEG_THUMBNAIL_SIZE = // int32[2]
+ ACAMERA_JPEG_START + 6,
+ ACAMERA_JPEG_AVAILABLE_THUMBNAIL_SIZES = // int32[2*n]
+ ACAMERA_JPEG_START + 7,
ACAMERA_JPEG_END,
ACAMERA_LENS_APERTURE = // float
ACAMERA_LENS_START,
- ACAMERA_LENS_FILTER_DENSITY, // float
- ACAMERA_LENS_FOCAL_LENGTH, // float
- ACAMERA_LENS_FOCUS_DISTANCE, // float
- ACAMERA_LENS_OPTICAL_STABILIZATION_MODE, // byte (enum)
- ACAMERA_LENS_FACING, // byte (enum)
- ACAMERA_LENS_POSE_ROTATION, // float[4]
- ACAMERA_LENS_POSE_TRANSLATION, // float[3]
- ACAMERA_LENS_FOCUS_RANGE, // float[2]
- ACAMERA_LENS_STATE, // byte (enum)
- ACAMERA_LENS_INTRINSIC_CALIBRATION, // float[5]
- ACAMERA_LENS_RADIAL_DISTORTION, // float[6]
+ ACAMERA_LENS_FILTER_DENSITY = // float
+ ACAMERA_LENS_START + 1,
+ ACAMERA_LENS_FOCAL_LENGTH = // float
+ ACAMERA_LENS_START + 2,
+ ACAMERA_LENS_FOCUS_DISTANCE = // float
+ ACAMERA_LENS_START + 3,
+ ACAMERA_LENS_OPTICAL_STABILIZATION_MODE = // byte (enum)
+ ACAMERA_LENS_START + 4,
+ ACAMERA_LENS_FACING = // byte (enum)
+ ACAMERA_LENS_START + 5,
+ ACAMERA_LENS_POSE_ROTATION = // float[4]
+ ACAMERA_LENS_START + 6,
+ ACAMERA_LENS_POSE_TRANSLATION = // float[3]
+ ACAMERA_LENS_START + 7,
+ ACAMERA_LENS_FOCUS_RANGE = // float[2]
+ ACAMERA_LENS_START + 8,
+ ACAMERA_LENS_STATE = // byte (enum)
+ ACAMERA_LENS_START + 9,
+ ACAMERA_LENS_INTRINSIC_CALIBRATION = // float[5]
+ ACAMERA_LENS_START + 10,
+ ACAMERA_LENS_RADIAL_DISTORTION = // float[6]
+ ACAMERA_LENS_START + 11,
ACAMERA_LENS_END,
ACAMERA_LENS_INFO_AVAILABLE_APERTURES = // float[n]
ACAMERA_LENS_INFO_START,
- ACAMERA_LENS_INFO_AVAILABLE_FILTER_DENSITIES, // float[n]
- ACAMERA_LENS_INFO_AVAILABLE_FOCAL_LENGTHS, // float[n]
- ACAMERA_LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION, // byte[n]
- ACAMERA_LENS_INFO_HYPERFOCAL_DISTANCE, // float
- ACAMERA_LENS_INFO_MINIMUM_FOCUS_DISTANCE, // float
- ACAMERA_LENS_INFO_SHADING_MAP_SIZE, // int32[2]
- ACAMERA_LENS_INFO_FOCUS_DISTANCE_CALIBRATION, // byte (enum)
+ ACAMERA_LENS_INFO_AVAILABLE_FILTER_DENSITIES = // float[n]
+ ACAMERA_LENS_INFO_START + 1,
+ ACAMERA_LENS_INFO_AVAILABLE_FOCAL_LENGTHS = // float[n]
+ ACAMERA_LENS_INFO_START + 2,
+ ACAMERA_LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION = // byte[n]
+ ACAMERA_LENS_INFO_START + 3,
+ ACAMERA_LENS_INFO_HYPERFOCAL_DISTANCE = // float
+ ACAMERA_LENS_INFO_START + 4,
+ ACAMERA_LENS_INFO_MINIMUM_FOCUS_DISTANCE = // float
+ ACAMERA_LENS_INFO_START + 5,
+ ACAMERA_LENS_INFO_SHADING_MAP_SIZE = // int32[2]
+ ACAMERA_LENS_INFO_START + 6,
+ ACAMERA_LENS_INFO_FOCUS_DISTANCE_CALIBRATION = // byte (enum)
+ ACAMERA_LENS_INFO_START + 7,
ACAMERA_LENS_INFO_END,
ACAMERA_NOISE_REDUCTION_MODE = // byte (enum)
ACAMERA_NOISE_REDUCTION_START,
- ACAMERA_NOISE_REDUCTION_RESERVED_1,
- ACAMERA_NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES, // byte[n]
+ ACAMERA_NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES = // byte[n]
+ ACAMERA_NOISE_REDUCTION_START + 2,
ACAMERA_NOISE_REDUCTION_END,
- ACAMERA_QUIRKS_RESERVED_0 =
- ACAMERA_QUIRKS_START,
- ACAMERA_QUIRKS_RESERVED_1,
- ACAMERA_QUIRKS_RESERVED_2,
- ACAMERA_QUIRKS_USE_PARTIAL_RESULT, // Deprecated! DO NOT USE
- ACAMERA_QUIRKS_PARTIAL_RESULT, // Deprecated! DO NOT USE
+ ACAMERA_QUIRKS_USE_PARTIAL_RESULT = // Deprecated! DO NOT USE
+ ACAMERA_QUIRKS_START + 3,
+ ACAMERA_QUIRKS_PARTIAL_RESULT = // Deprecated! DO NOT USE
+ ACAMERA_QUIRKS_START + 4,
ACAMERA_QUIRKS_END,
ACAMERA_REQUEST_FRAME_COUNT = // Deprecated! DO NOT USE
ACAMERA_REQUEST_START,
- ACAMERA_REQUEST_ID, // int32
- ACAMERA_REQUEST_RESERVED_2,
- ACAMERA_REQUEST_RESERVED_3,
- ACAMERA_REQUEST_RESERVED_4,
- ACAMERA_REQUEST_RESERVED_5,
- ACAMERA_REQUEST_MAX_NUM_OUTPUT_STREAMS, // int32[3]
- ACAMERA_REQUEST_RESERVED_7,
- ACAMERA_REQUEST_MAX_NUM_INPUT_STREAMS, // int32
- ACAMERA_REQUEST_PIPELINE_DEPTH, // byte
- ACAMERA_REQUEST_PIPELINE_MAX_DEPTH, // byte
- ACAMERA_REQUEST_PARTIAL_RESULT_COUNT, // int32
- ACAMERA_REQUEST_AVAILABLE_CAPABILITIES, // byte[n] (enum)
- ACAMERA_REQUEST_AVAILABLE_REQUEST_KEYS, // int32[n]
- ACAMERA_REQUEST_AVAILABLE_RESULT_KEYS, // int32[n]
- ACAMERA_REQUEST_AVAILABLE_CHARACTERISTICS_KEYS, // int32[n]
+ ACAMERA_REQUEST_ID = // int32
+ ACAMERA_REQUEST_START + 1,
+ ACAMERA_REQUEST_MAX_NUM_OUTPUT_STREAMS = // int32[3]
+ ACAMERA_REQUEST_START + 6,
+ ACAMERA_REQUEST_MAX_NUM_INPUT_STREAMS = // int32
+ ACAMERA_REQUEST_START + 8,
+ ACAMERA_REQUEST_PIPELINE_DEPTH = // byte
+ ACAMERA_REQUEST_START + 9,
+ ACAMERA_REQUEST_PIPELINE_MAX_DEPTH = // byte
+ ACAMERA_REQUEST_START + 10,
+ ACAMERA_REQUEST_PARTIAL_RESULT_COUNT = // int32
+ ACAMERA_REQUEST_START + 11,
+ ACAMERA_REQUEST_AVAILABLE_CAPABILITIES = // byte[n] (enum)
+ ACAMERA_REQUEST_START + 12,
+ ACAMERA_REQUEST_AVAILABLE_REQUEST_KEYS = // int32[n]
+ ACAMERA_REQUEST_START + 13,
+ ACAMERA_REQUEST_AVAILABLE_RESULT_KEYS = // int32[n]
+ ACAMERA_REQUEST_START + 14,
+ ACAMERA_REQUEST_AVAILABLE_CHARACTERISTICS_KEYS = // int32[n]
+ ACAMERA_REQUEST_START + 15,
ACAMERA_REQUEST_END,
ACAMERA_SCALER_CROP_REGION = // int32[4]
ACAMERA_SCALER_START,
- ACAMERA_SCALER_AVAILABLE_FORMATS, // Deprecated! DO NOT USE
- ACAMERA_SCALER_AVAILABLE_JPEG_MIN_DURATIONS, // Deprecated! DO NOT USE
- ACAMERA_SCALER_AVAILABLE_JPEG_SIZES, // Deprecated! DO NOT USE
- ACAMERA_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM, // float
- ACAMERA_SCALER_AVAILABLE_PROCESSED_MIN_DURATIONS, // Deprecated! DO NOT USE
- ACAMERA_SCALER_AVAILABLE_PROCESSED_SIZES, // Deprecated! DO NOT USE
- ACAMERA_SCALER_RESERVED_7,
- ACAMERA_SCALER_RESERVED_8,
- ACAMERA_SCALER_AVAILABLE_INPUT_OUTPUT_FORMATS_MAP, // int32
- ACAMERA_SCALER_AVAILABLE_STREAM_CONFIGURATIONS, // int32[n*4] (enum)
- ACAMERA_SCALER_AVAILABLE_MIN_FRAME_DURATIONS, // int64[4*n]
- ACAMERA_SCALER_AVAILABLE_STALL_DURATIONS, // int64[4*n]
- ACAMERA_SCALER_CROPPING_TYPE, // byte (enum)
+ ACAMERA_SCALER_AVAILABLE_FORMATS = // Deprecated! DO NOT USE
+ ACAMERA_SCALER_START + 1,
+ ACAMERA_SCALER_AVAILABLE_JPEG_MIN_DURATIONS = // Deprecated! DO NOT USE
+ ACAMERA_SCALER_START + 2,
+ ACAMERA_SCALER_AVAILABLE_JPEG_SIZES = // Deprecated! DO NOT USE
+ ACAMERA_SCALER_START + 3,
+ ACAMERA_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM = // float
+ ACAMERA_SCALER_START + 4,
+ ACAMERA_SCALER_AVAILABLE_PROCESSED_MIN_DURATIONS = // Deprecated! DO NOT USE
+ ACAMERA_SCALER_START + 5,
+ ACAMERA_SCALER_AVAILABLE_PROCESSED_SIZES = // Deprecated! DO NOT USE
+ ACAMERA_SCALER_START + 6,
+ ACAMERA_SCALER_AVAILABLE_INPUT_OUTPUT_FORMATS_MAP = // int32
+ ACAMERA_SCALER_START + 9,
+ ACAMERA_SCALER_AVAILABLE_STREAM_CONFIGURATIONS = // int32[n*4] (enum)
+ ACAMERA_SCALER_START + 10,
+ ACAMERA_SCALER_AVAILABLE_MIN_FRAME_DURATIONS = // int64[4*n]
+ ACAMERA_SCALER_START + 11,
+ ACAMERA_SCALER_AVAILABLE_STALL_DURATIONS = // int64[4*n]
+ ACAMERA_SCALER_START + 12,
+ ACAMERA_SCALER_CROPPING_TYPE = // byte (enum)
+ ACAMERA_SCALER_START + 13,
ACAMERA_SCALER_END,
ACAMERA_SENSOR_EXPOSURE_TIME = // int64
ACAMERA_SENSOR_START,
- ACAMERA_SENSOR_FRAME_DURATION, // int64
- ACAMERA_SENSOR_SENSITIVITY, // int32
- ACAMERA_SENSOR_REFERENCE_ILLUMINANT1, // byte (enum)
- ACAMERA_SENSOR_REFERENCE_ILLUMINANT2, // byte
- ACAMERA_SENSOR_CALIBRATION_TRANSFORM1, // rational[3*3]
- ACAMERA_SENSOR_CALIBRATION_TRANSFORM2, // rational[3*3]
- ACAMERA_SENSOR_COLOR_TRANSFORM1, // rational[3*3]
- ACAMERA_SENSOR_COLOR_TRANSFORM2, // rational[3*3]
- ACAMERA_SENSOR_FORWARD_MATRIX1, // rational[3*3]
- ACAMERA_SENSOR_FORWARD_MATRIX2, // rational[3*3]
- ACAMERA_SENSOR_RESERVED_11,
- ACAMERA_SENSOR_BLACK_LEVEL_PATTERN, // int32[4]
- ACAMERA_SENSOR_MAX_ANALOG_SENSITIVITY, // int32
- ACAMERA_SENSOR_ORIENTATION, // int32
- ACAMERA_SENSOR_RESERVED_15,
- ACAMERA_SENSOR_TIMESTAMP, // int64
- ACAMERA_SENSOR_RESERVED_17,
- ACAMERA_SENSOR_NEUTRAL_COLOR_POINT, // rational[3]
- ACAMERA_SENSOR_NOISE_PROFILE, // double[2*CFA Channels]
- ACAMERA_SENSOR_RESERVED_20,
- ACAMERA_SENSOR_RESERVED_21,
- ACAMERA_SENSOR_GREEN_SPLIT, // float
- ACAMERA_SENSOR_TEST_PATTERN_DATA, // int32[4]
- ACAMERA_SENSOR_TEST_PATTERN_MODE, // int32 (enum)
- ACAMERA_SENSOR_AVAILABLE_TEST_PATTERN_MODES, // int32[n]
- ACAMERA_SENSOR_ROLLING_SHUTTER_SKEW, // int64
- ACAMERA_SENSOR_OPTICAL_BLACK_REGIONS, // int32[4*num_regions]
- ACAMERA_SENSOR_DYNAMIC_BLACK_LEVEL, // float[4]
- ACAMERA_SENSOR_DYNAMIC_WHITE_LEVEL, // int32
- ACAMERA_SENSOR_RESERVED_30,
+ ACAMERA_SENSOR_FRAME_DURATION = // int64
+ ACAMERA_SENSOR_START + 1,
+ ACAMERA_SENSOR_SENSITIVITY = // int32
+ ACAMERA_SENSOR_START + 2,
+ ACAMERA_SENSOR_REFERENCE_ILLUMINANT1 = // byte (enum)
+ ACAMERA_SENSOR_START + 3,
+ ACAMERA_SENSOR_REFERENCE_ILLUMINANT2 = // byte
+ ACAMERA_SENSOR_START + 4,
+ ACAMERA_SENSOR_CALIBRATION_TRANSFORM1 = // rational[3*3]
+ ACAMERA_SENSOR_START + 5,
+ ACAMERA_SENSOR_CALIBRATION_TRANSFORM2 = // rational[3*3]
+ ACAMERA_SENSOR_START + 6,
+ ACAMERA_SENSOR_COLOR_TRANSFORM1 = // rational[3*3]
+ ACAMERA_SENSOR_START + 7,
+ ACAMERA_SENSOR_COLOR_TRANSFORM2 = // rational[3*3]
+ ACAMERA_SENSOR_START + 8,
+ ACAMERA_SENSOR_FORWARD_MATRIX1 = // rational[3*3]
+ ACAMERA_SENSOR_START + 9,
+ ACAMERA_SENSOR_FORWARD_MATRIX2 = // rational[3*3]
+ ACAMERA_SENSOR_START + 10,
+ ACAMERA_SENSOR_BLACK_LEVEL_PATTERN = // int32[4]
+ ACAMERA_SENSOR_START + 12,
+ ACAMERA_SENSOR_MAX_ANALOG_SENSITIVITY = // int32
+ ACAMERA_SENSOR_START + 13,
+ ACAMERA_SENSOR_ORIENTATION = // int32
+ ACAMERA_SENSOR_START + 14,
+ ACAMERA_SENSOR_TIMESTAMP = // int64
+ ACAMERA_SENSOR_START + 16,
+ ACAMERA_SENSOR_NEUTRAL_COLOR_POINT = // rational[3]
+ ACAMERA_SENSOR_START + 18,
+ ACAMERA_SENSOR_NOISE_PROFILE = // double[2*CFA Channels]
+ ACAMERA_SENSOR_START + 19,
+ ACAMERA_SENSOR_GREEN_SPLIT = // float
+ ACAMERA_SENSOR_START + 22,
+ ACAMERA_SENSOR_TEST_PATTERN_DATA = // int32[4]
+ ACAMERA_SENSOR_START + 23,
+ ACAMERA_SENSOR_TEST_PATTERN_MODE = // int32 (enum)
+ ACAMERA_SENSOR_START + 24,
+ ACAMERA_SENSOR_AVAILABLE_TEST_PATTERN_MODES = // int32[n]
+ ACAMERA_SENSOR_START + 25,
+ ACAMERA_SENSOR_ROLLING_SHUTTER_SKEW = // int64
+ ACAMERA_SENSOR_START + 26,
+ ACAMERA_SENSOR_OPTICAL_BLACK_REGIONS = // int32[4*num_regions]
+ ACAMERA_SENSOR_START + 27,
+ ACAMERA_SENSOR_DYNAMIC_BLACK_LEVEL = // float[4]
+ ACAMERA_SENSOR_START + 28,
+ ACAMERA_SENSOR_DYNAMIC_WHITE_LEVEL = // int32
+ ACAMERA_SENSOR_START + 29,
ACAMERA_SENSOR_END,
ACAMERA_SENSOR_INFO_ACTIVE_ARRAY_SIZE = // int32[4]
ACAMERA_SENSOR_INFO_START,
- ACAMERA_SENSOR_INFO_SENSITIVITY_RANGE, // int32[2]
- ACAMERA_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT, // byte (enum)
- ACAMERA_SENSOR_INFO_EXPOSURE_TIME_RANGE, // int64[2]
- ACAMERA_SENSOR_INFO_MAX_FRAME_DURATION, // int64
- ACAMERA_SENSOR_INFO_PHYSICAL_SIZE, // float[2]
- ACAMERA_SENSOR_INFO_PIXEL_ARRAY_SIZE, // int32[2]
- ACAMERA_SENSOR_INFO_WHITE_LEVEL, // int32
- ACAMERA_SENSOR_INFO_TIMESTAMP_SOURCE, // byte (enum)
- ACAMERA_SENSOR_INFO_LENS_SHADING_APPLIED, // byte (enum)
- ACAMERA_SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE, // int32[4]
+ ACAMERA_SENSOR_INFO_SENSITIVITY_RANGE = // int32[2]
+ ACAMERA_SENSOR_INFO_START + 1,
+ ACAMERA_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT = // byte (enum)
+ ACAMERA_SENSOR_INFO_START + 2,
+ ACAMERA_SENSOR_INFO_EXPOSURE_TIME_RANGE = // int64[2]
+ ACAMERA_SENSOR_INFO_START + 3,
+ ACAMERA_SENSOR_INFO_MAX_FRAME_DURATION = // int64
+ ACAMERA_SENSOR_INFO_START + 4,
+ ACAMERA_SENSOR_INFO_PHYSICAL_SIZE = // float[2]
+ ACAMERA_SENSOR_INFO_START + 5,
+ ACAMERA_SENSOR_INFO_PIXEL_ARRAY_SIZE = // int32[2]
+ ACAMERA_SENSOR_INFO_START + 6,
+ ACAMERA_SENSOR_INFO_WHITE_LEVEL = // int32
+ ACAMERA_SENSOR_INFO_START + 7,
+ ACAMERA_SENSOR_INFO_TIMESTAMP_SOURCE = // byte (enum)
+ ACAMERA_SENSOR_INFO_START + 8,
+ ACAMERA_SENSOR_INFO_LENS_SHADING_APPLIED = // byte (enum)
+ ACAMERA_SENSOR_INFO_START + 9,
+ ACAMERA_SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE = // int32[4]
+ ACAMERA_SENSOR_INFO_START + 10,
ACAMERA_SENSOR_INFO_END,
ACAMERA_SHADING_MODE = // byte (enum)
ACAMERA_SHADING_START,
- ACAMERA_SHADING_RESERVED_1,
- ACAMERA_SHADING_AVAILABLE_MODES, // byte[n]
+ ACAMERA_SHADING_AVAILABLE_MODES = // byte[n]
+ ACAMERA_SHADING_START + 2,
ACAMERA_SHADING_END,
ACAMERA_STATISTICS_FACE_DETECT_MODE = // byte (enum)
ACAMERA_STATISTICS_START,
- ACAMERA_STATISTICS_RESERVED_1,
- ACAMERA_STATISTICS_RESERVED_2,
- ACAMERA_STATISTICS_HOT_PIXEL_MAP_MODE, // byte (enum)
- ACAMERA_STATISTICS_FACE_IDS, // int32[n]
- ACAMERA_STATISTICS_FACE_LANDMARKS, // int32[n*6]
- ACAMERA_STATISTICS_FACE_RECTANGLES, // int32[n*4]
- ACAMERA_STATISTICS_FACE_SCORES, // byte[n]
- ACAMERA_STATISTICS_RESERVED_8,
- ACAMERA_STATISTICS_RESERVED_9,
- ACAMERA_STATISTICS_LENS_SHADING_CORRECTION_MAP, // byte
- ACAMERA_STATISTICS_LENS_SHADING_MAP, // float[4*n*m]
- ACAMERA_STATISTICS_PREDICTED_COLOR_GAINS, // Deprecated! DO NOT USE
- ACAMERA_STATISTICS_PREDICTED_COLOR_TRANSFORM, // Deprecated! DO NOT USE
- ACAMERA_STATISTICS_SCENE_FLICKER, // byte (enum)
- ACAMERA_STATISTICS_HOT_PIXEL_MAP, // int32[2*n]
- ACAMERA_STATISTICS_LENS_SHADING_MAP_MODE, // byte (enum)
+ ACAMERA_STATISTICS_HOT_PIXEL_MAP_MODE = // byte (enum)
+ ACAMERA_STATISTICS_START + 3,
+ ACAMERA_STATISTICS_FACE_IDS = // int32[n]
+ ACAMERA_STATISTICS_START + 4,
+ ACAMERA_STATISTICS_FACE_LANDMARKS = // int32[n*6]
+ ACAMERA_STATISTICS_START + 5,
+ ACAMERA_STATISTICS_FACE_RECTANGLES = // int32[n*4]
+ ACAMERA_STATISTICS_START + 6,
+ ACAMERA_STATISTICS_FACE_SCORES = // byte[n]
+ ACAMERA_STATISTICS_START + 7,
+ ACAMERA_STATISTICS_LENS_SHADING_CORRECTION_MAP = // byte
+ ACAMERA_STATISTICS_START + 10,
+ ACAMERA_STATISTICS_LENS_SHADING_MAP = // float[4*n*m]
+ ACAMERA_STATISTICS_START + 11,
+ ACAMERA_STATISTICS_PREDICTED_COLOR_GAINS = // Deprecated! DO NOT USE
+ ACAMERA_STATISTICS_START + 12,
+ ACAMERA_STATISTICS_PREDICTED_COLOR_TRANSFORM = // Deprecated! DO NOT USE
+ ACAMERA_STATISTICS_START + 13,
+ ACAMERA_STATISTICS_SCENE_FLICKER = // byte (enum)
+ ACAMERA_STATISTICS_START + 14,
+ ACAMERA_STATISTICS_HOT_PIXEL_MAP = // int32[2*n]
+ ACAMERA_STATISTICS_START + 15,
+ ACAMERA_STATISTICS_LENS_SHADING_MAP_MODE = // byte (enum)
+ ACAMERA_STATISTICS_START + 16,
ACAMERA_STATISTICS_END,
ACAMERA_STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES = // byte[n]
ACAMERA_STATISTICS_INFO_START,
- ACAMERA_STATISTICS_INFO_RESERVED_1,
- ACAMERA_STATISTICS_INFO_MAX_FACE_COUNT, // int32
- ACAMERA_STATISTICS_INFO_RESERVED_3,
- ACAMERA_STATISTICS_INFO_RESERVED_4,
- ACAMERA_STATISTICS_INFO_RESERVED_5,
- ACAMERA_STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES, // byte[n]
- ACAMERA_STATISTICS_INFO_AVAILABLE_LENS_SHADING_MAP_MODES, // byte[n]
+ ACAMERA_STATISTICS_INFO_MAX_FACE_COUNT = // int32
+ ACAMERA_STATISTICS_INFO_START + 2,
+ ACAMERA_STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES = // byte[n]
+ ACAMERA_STATISTICS_INFO_START + 6,
+ ACAMERA_STATISTICS_INFO_AVAILABLE_LENS_SHADING_MAP_MODES = // byte[n]
+ ACAMERA_STATISTICS_INFO_START + 7,
ACAMERA_STATISTICS_INFO_END,
ACAMERA_TONEMAP_CURVE_BLUE = // float[n*2]
ACAMERA_TONEMAP_START,
- ACAMERA_TONEMAP_CURVE_GREEN, // float[n*2]
- ACAMERA_TONEMAP_CURVE_RED, // float[n*2]
- ACAMERA_TONEMAP_MODE, // byte (enum)
- ACAMERA_TONEMAP_MAX_CURVE_POINTS, // int32
- ACAMERA_TONEMAP_AVAILABLE_TONE_MAP_MODES, // byte[n]
- ACAMERA_TONEMAP_GAMMA, // float
- ACAMERA_TONEMAP_PRESET_CURVE, // byte (enum)
+ ACAMERA_TONEMAP_CURVE_GREEN = // float[n*2]
+ ACAMERA_TONEMAP_START + 1,
+ ACAMERA_TONEMAP_CURVE_RED = // float[n*2]
+ ACAMERA_TONEMAP_START + 2,
+ ACAMERA_TONEMAP_MODE = // byte (enum)
+ ACAMERA_TONEMAP_START + 3,
+ ACAMERA_TONEMAP_MAX_CURVE_POINTS = // int32
+ ACAMERA_TONEMAP_START + 4,
+ ACAMERA_TONEMAP_AVAILABLE_TONE_MAP_MODES = // byte[n]
+ ACAMERA_TONEMAP_START + 5,
+ ACAMERA_TONEMAP_GAMMA = // float
+ ACAMERA_TONEMAP_START + 6,
+ ACAMERA_TONEMAP_PRESET_CURVE = // byte (enum)
+ ACAMERA_TONEMAP_START + 7,
ACAMERA_TONEMAP_END,
ACAMERA_LED_TRANSMIT = // byte (enum)
ACAMERA_LED_START,
- ACAMERA_LED_AVAILABLE_LEDS, // byte[n] (enum)
+ ACAMERA_LED_AVAILABLE_LEDS = // byte[n] (enum)
+ ACAMERA_LED_START + 1,
ACAMERA_LED_END,
ACAMERA_INFO_SUPPORTED_HARDWARE_LEVEL = // byte (enum)
@@ -377,20 +486,24 @@
ACAMERA_SYNC_FRAME_NUMBER = // int64 (enum)
ACAMERA_SYNC_START,
- ACAMERA_SYNC_MAX_LATENCY, // int32 (enum)
+ ACAMERA_SYNC_MAX_LATENCY = // int32 (enum)
+ ACAMERA_SYNC_START + 1,
ACAMERA_SYNC_END,
ACAMERA_REPROCESS_EFFECTIVE_EXPOSURE_FACTOR = // float
ACAMERA_REPROCESS_START,
- ACAMERA_REPROCESS_MAX_CAPTURE_STALL, // int32
+ ACAMERA_REPROCESS_MAX_CAPTURE_STALL = // int32
+ ACAMERA_REPROCESS_START + 1,
ACAMERA_REPROCESS_END,
- ACAMERA_DEPTH_RESERVED_0 =
- ACAMERA_DEPTH_START,
- ACAMERA_DEPTH_AVAILABLE_DEPTH_STREAM_CONFIGURATIONS, // int32[n*4] (enum)
- ACAMERA_DEPTH_AVAILABLE_DEPTH_MIN_FRAME_DURATIONS, // int64[4*n]
- ACAMERA_DEPTH_AVAILABLE_DEPTH_STALL_DURATIONS, // int64[4*n]
- ACAMERA_DEPTH_DEPTH_IS_EXCLUSIVE, // byte (enum)
+ ACAMERA_DEPTH_AVAILABLE_DEPTH_STREAM_CONFIGURATIONS = // int32[n*4] (enum)
+ ACAMERA_DEPTH_START + 1,
+ ACAMERA_DEPTH_AVAILABLE_DEPTH_MIN_FRAME_DURATIONS = // int64[4*n]
+ ACAMERA_DEPTH_START + 2,
+ ACAMERA_DEPTH_AVAILABLE_DEPTH_STALL_DURATIONS = // int64[4*n]
+ ACAMERA_DEPTH_START + 3,
+ ACAMERA_DEPTH_DEPTH_IS_EXCLUSIVE = // byte (enum)
+ ACAMERA_DEPTH_START + 4,
ACAMERA_DEPTH_END,
} acamera_metadata_tag_t;
diff --git a/include/media/stagefright/MetaData.h b/include/media/stagefright/MetaData.h
index 91341b8..7d2208c 100644
--- a/include/media/stagefright/MetaData.h
+++ b/include/media/stagefright/MetaData.h
@@ -188,6 +188,19 @@
// Size of NALU length in mkv/mp4
kKeyNalLengthSize = 'nals', // int32_t
+
+ // HDR related
+ kKeyMinLuminance = 'minL', // int32_t, min luminance of the content in cd/m2.
+ kKeyMaxLuminance = 'maxL', // int32_t, max luminance of the content in cd/m2.
+
+ // color aspects
+ kKeyColorRange = 'cRng', // int32_t, color range, value defined by ColorAspects.Range
+ kKeyColorPrimaries = 'cPrm', // int32_t,
+ // color Primaries, value defined by ColorAspects.Primaries
+ kKeyTransferFunction = 'tFun', // int32_t,
+ // transfer Function, value defined by ColorAspects.Transfer.
+ kKeyColorMatrix = 'cMtx', // int32_t,
+ // color Matrix, value defined by ColorAspects.MatrixCoeffs.
};
enum {
diff --git a/media/img_utils/include/img_utils/TagDefinitions.h b/media/img_utils/include/img_utils/TagDefinitions.h
index e9a7480..1cc9866 100644
--- a/media/img_utils/include/img_utils/TagDefinitions.h
+++ b/media/img_utils/include/img_utils/TagDefinitions.h
@@ -193,6 +193,18 @@
};
/**
+ * Convenience values for tags with enumerated values
+ */
+
+enum {
+ TAG_ORIENTATION_NORMAL = 1,
+ TAG_ORIENTATION_ROTATE_180 = 3,
+ TAG_ORIENTATION_ROTATE_90 = 6,
+ TAG_ORIENTATION_ROTATE_270 = 8,
+ TAG_ORIENTATION_UNKNOWN = 9
+};
+
+/**
* TIFF_EP_TAG_DEFINITIONS contains tags defined in the TIFF EP spec
*/
const TagDefinition_t TIFF_EP_TAG_DEFINITIONS[] = {
@@ -731,7 +743,7 @@
{ // BlackLevel
"BlackLevel",
0xC61Au,
- LONG,
+ RATIONAL,
RAW_IFD,
0,
UNDEFINED_ENDIAN
diff --git a/media/img_utils/src/DngUtils.cpp b/media/img_utils/src/DngUtils.cpp
index 9473dce..9dc5f05 100644
--- a/media/img_utils/src/DngUtils.cpp
+++ b/media/img_utils/src/DngUtils.cpp
@@ -18,6 +18,7 @@
#include <inttypes.h>
+#include <vector>
#include <math.h>
namespace android {
@@ -63,10 +64,17 @@
double spacingV = 1.0 / lsmHeight;
double spacingH = 1.0 / lsmWidth;
- float redMap[lsmWidth * lsmHeight];
- float greenEvenMap[lsmWidth * lsmHeight];
- float greenOddMap[lsmWidth * lsmHeight];
- float blueMap[lsmWidth * lsmHeight];
+ std::vector<float> redMapVector(lsmWidth * lsmHeight);
+ float *redMap = redMapVector.data();
+
+ std::vector<float> greenEvenMapVector(lsmWidth * lsmHeight);
+ float *greenEvenMap = greenEvenMapVector.data();
+
+ std::vector<float> greenOddMapVector(lsmWidth * lsmHeight);
+ float *greenOddMap = greenOddMapVector.data();
+
+ std::vector<float> blueMapVector(lsmWidth * lsmHeight);
+ float *blueMap = blueMapVector.data();
size_t lsmMapSize = lsmWidth * lsmHeight * 4;
diff --git a/media/libstagefright/Utils.cpp b/media/libstagefright/Utils.cpp
index dcc29fe..34deaad 100644
--- a/media/libstagefright/Utils.cpp
+++ b/media/libstagefright/Utils.cpp
@@ -27,6 +27,7 @@
#include <arpa/inet.h>
#include <cutils/properties.h>
#include <media/openmax/OMX_Audio.h>
+#include <media/stagefright/CodecBase.h>
#include <media/stagefright/foundation/ABuffer.h>
#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/foundation/AMessage.h>
@@ -90,6 +91,49 @@
return OK;
}
+static void convertMetaDataToMessageInt32(
+ const sp<MetaData> &meta, sp<AMessage> &msg, uint32_t key, const char *name) {
+ int32_t value;
+ if (meta->findInt32(key, &value)) {
+ msg->setInt32(name, value);
+ }
+}
+
+static void convertMetaDataToMessageColorAspects(const sp<MetaData> &meta, sp<AMessage> &msg) {
+ // 0 values are unspecified
+ int32_t range = 0;
+ int32_t primaries = 0;
+ int32_t transferFunction = 0;
+ int32_t colorMatrix = 0;
+ meta->findInt32(kKeyColorRange, &range);
+ meta->findInt32(kKeyColorPrimaries, &primaries);
+ meta->findInt32(kKeyTransferFunction, &transferFunction);
+ meta->findInt32(kKeyColorMatrix, &colorMatrix);
+ ColorAspects colorAspects;
+ memset(&colorAspects, 0, sizeof(colorAspects));
+ colorAspects.mRange = (ColorAspects::Range)range;
+ colorAspects.mPrimaries = (ColorAspects::Primaries)primaries;
+ colorAspects.mTransfer = (ColorAspects::Transfer)transferFunction;
+ colorAspects.mMatrixCoeffs = (ColorAspects::MatrixCoeffs)colorMatrix;
+
+ int32_t rangeMsg, standardMsg, transferMsg;
+ if (CodecBase::convertCodecColorAspectsToPlatformAspects(
+ colorAspects, &rangeMsg, &standardMsg, &transferMsg) != OK) {
+ return;
+ }
+
+ // save specified values to msg
+ if (rangeMsg != 0) {
+ msg->setInt32("color-range", rangeMsg);
+ }
+ if (standardMsg != 0) {
+ msg->setInt32("color-standard", standardMsg);
+ }
+ if (transferMsg != 0) {
+ msg->setInt32("color-transfer", transferMsg);
+ }
+}
+
status_t convertMetaDataToMessage(
const sp<MetaData> &meta, sp<AMessage> *format) {
@@ -158,6 +202,10 @@
if (meta->findInt32(kKeyRotation, &rotationDegrees)) {
msg->setInt32("rotation-degrees", rotationDegrees);
}
+
+ convertMetaDataToMessageInt32(meta, msg, kKeyMinLuminance, "min-luminance");
+ convertMetaDataToMessageInt32(meta, msg, kKeyMaxLuminance, "max-luminance");
+ convertMetaDataToMessageColorAspects(meta, msg);
} else if (!strncasecmp("audio/", mime, 6)) {
int32_t numChannels, sampleRate;
if (!meta->findInt32(kKeyChannelCount, &numChannels)
@@ -626,6 +674,43 @@
return size;
}
+static void convertMessageToMetaDataInt32(
+ const sp<AMessage> &msg, sp<MetaData> &meta, uint32_t key, const char *name) {
+ int32_t value;
+ if (msg->findInt32(name, &value)) {
+ meta->setInt32(key, value);
+ }
+}
+
+static void convertMessageToMetaDataColorAspects(const sp<AMessage> &msg, sp<MetaData> &meta) {
+ // 0 values are unspecified
+ int32_t range = 0, standard = 0, transfer = 0;
+ (void)msg->findInt32("color-range", &range);
+ (void)msg->findInt32("color-standard", &standard);
+ (void)msg->findInt32("color-transfer", &transfer);
+
+ ColorAspects colorAspects;
+ memset(&colorAspects, 0, sizeof(colorAspects));
+ if (CodecBase::convertPlatformColorAspectsToCodecAspects(
+ range, standard, transfer, colorAspects) != OK) {
+ return;
+ }
+
+ // save specified values to meta
+ if (colorAspects.mRange != 0) {
+ meta->setInt32(kKeyColorRange, colorAspects.mRange);
+ }
+ if (colorAspects.mPrimaries != 0) {
+ meta->setInt32(kKeyColorPrimaries, colorAspects.mPrimaries);
+ }
+ if (colorAspects.mTransfer != 0) {
+ meta->setInt32(kKeyTransferFunction, colorAspects.mTransfer);
+ }
+ if (colorAspects.mMatrixCoeffs != 0) {
+ meta->setInt32(kKeyColorMatrix, colorAspects.mMatrixCoeffs);
+ }
+}
+
void convertMessageToMetaData(const sp<AMessage> &msg, sp<MetaData> &meta) {
AString mime;
if (msg->findString("mime", &mime)) {
@@ -679,6 +764,10 @@
if (msg->findInt32("rotation-degrees", &rotationDegrees)) {
meta->setInt32(kKeyRotation, rotationDegrees);
}
+
+ convertMessageToMetaDataInt32(msg, meta, kKeyMinLuminance, "min-luminance");
+ convertMessageToMetaDataInt32(msg, meta, kKeyMaxLuminance, "max-luminance");
+ convertMessageToMetaDataColorAspects(msg, meta);
} else if (mime.startsWith("audio/")) {
int32_t numChannels;
if (msg->findInt32("channel-count", &numChannels)) {
diff --git a/services/camera/libcameraservice/api2/CameraDeviceClient.cpp b/services/camera/libcameraservice/api2/CameraDeviceClient.cpp
index 307b412..0692e5a 100644
--- a/services/camera/libcameraservice/api2/CameraDeviceClient.cpp
+++ b/services/camera/libcameraservice/api2/CameraDeviceClient.cpp
@@ -310,6 +310,15 @@
ALOGV("%s: ending configure (%d input stream, %zu output streams)",
__FUNCTION__, mInputStream.configured ? 1 : 0, mStreamMap.size());
+ binder::Status res;
+ if (!(res = checkPidStatus(__FUNCTION__)).isOk()) return res;
+
+ Mutex::Autolock icl(mBinderSerializationLock);
+
+ if (!mDevice.get()) {
+ return STATUS_ERROR(CameraService::ERROR_DISCONNECTED, "Camera device no longer alive");
+ }
+
// Sanitize the high speed session against necessary capability bit.
if (isConstrainedHighSpeed) {
CameraMetadata staticInfo = mDevice->info();
@@ -332,15 +341,6 @@
}
}
- binder::Status res;
- if (!(res = checkPidStatus(__FUNCTION__)).isOk()) return res;
-
- Mutex::Autolock icl(mBinderSerializationLock);
-
- if (!mDevice.get()) {
- return STATUS_ERROR(CameraService::ERROR_DISCONNECTED, "Camera device no longer alive");
- }
-
status_t err = mDevice->configureStreams(isConstrainedHighSpeed);
if (err != OK) {
res = STATUS_ERROR_FMT(CameraService::ERROR_INVALID_OPERATION,
diff --git a/services/mediacodec/minijail/seccomp_policy/mediacodec-seccomp-arm.policy b/services/mediacodec/minijail/seccomp_policy/mediacodec-seccomp-arm.policy
index 3419195..75fb9c8 100644
--- a/services/mediacodec/minijail/seccomp_policy/mediacodec-seccomp-arm.policy
+++ b/services/mediacodec/minijail/seccomp_policy/mediacodec-seccomp-arm.policy
@@ -38,6 +38,7 @@
sched_get_priority_max: 1
sched_get_priority_min: 1
statfs64: 1
+sched_setscheduler: 1
# for attaching to debuggerd on process crash
sigaction: 1