Loading camera/camera_platform.aconfig +8 −0 Original line number Diff line number Diff line package: "com.android.internal.camera.flags" container: "system" flag { namespace: "camera_platform" name: "camera_heif_gainmap" is_exported: true description: "Extend HEIC/HEIF still capture with HDR gainmap" bug: "362608343" } flag { namespace: "camera_platform" name: "camera_hsum_permission" Loading camera/ndk/include/camera/NdkCameraMetadataTags.h +159 −0 Original line number Diff line number Diff line Loading @@ -7959,6 +7959,145 @@ typedef enum acamera_metadata_tag { ACAMERA_HEIC_AVAILABLE_HEIC_STALL_DURATIONS_MAXIMUM_RESOLUTION = // int64[4*n] ACAMERA_HEIC_START + 5, /** * <p>The available HEIC (ISO/IEC 23008-12/24) UltraHDR stream * configurations that this camera device supports * (i.e. format, width, height, output/input stream).</p> * * <p>Type: int32[n*4] (acamera_metadata_enum_android_heic_available_heic_ultra_hdr_stream_configurations_t)</p> * * <p>This tag may appear in: * <ul> * <li>ACameraMetadata from ACameraManager_getCameraCharacteristics</li> * </ul></p> * * <p>The configurations are listed as <code>(format, width, height, input?)</code> tuples.</p> * <p>All the static, control, and dynamic metadata tags related to JPEG apply to HEIC formats. * Configuring JPEG and HEIC streams at the same time is not supported.</p> * <p>All the configuration tuples <code>(format, width, height, input?)</code> will contain * AIMAGE_FORMAT_HEIC format as OUTPUT only.</p> */ ACAMERA_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS = // int32[n*4] (acamera_metadata_enum_android_heic_available_heic_ultra_hdr_stream_configurations_t) ACAMERA_HEIC_START + 6, /** * <p>This lists the minimum frame duration for each * format/size combination for HEIC UltraHDR output formats.</p> * * <p>Type: int64[4*n]</p> * * <p>This tag may appear in: * <ul> * <li>ACameraMetadata from ACameraManager_getCameraCharacteristics</li> * </ul></p> * * <p>This should correspond to the frame duration when only that * stream is active, with all processing (typically in android.*.mode) * set to either OFF or FAST.</p> * <p>When multiple streams are used in a request, the minimum frame * duration will be max(individual stream min durations).</p> * <p>See ACAMERA_SENSOR_FRAME_DURATION and * ACAMERA_SCALER_AVAILABLE_STALL_DURATIONS for more details about * calculating the max frame rate.</p> * * @see ACAMERA_SCALER_AVAILABLE_STALL_DURATIONS * @see ACAMERA_SENSOR_FRAME_DURATION */ ACAMERA_HEIC_AVAILABLE_HEIC_ULTRA_HDR_MIN_FRAME_DURATIONS = // int64[4*n] ACAMERA_HEIC_START + 7, /** * <p>This lists the maximum stall duration for each * output format/size combination for HEIC UltraHDR streams.</p> * * <p>Type: int64[4*n]</p> * * <p>This tag may appear in: * <ul> * <li>ACameraMetadata from ACameraManager_getCameraCharacteristics</li> * </ul></p> * * <p>A stall duration is how much extra time would get added * to the normal minimum frame duration for a repeating request * that has streams with non-zero stall.</p> * <p>This functions similarly to * ACAMERA_SCALER_AVAILABLE_STALL_DURATIONS for HEIC UltraHDR * streams.</p> * <p>All HEIC output stream formats may have a nonzero stall * duration.</p> * * @see ACAMERA_SCALER_AVAILABLE_STALL_DURATIONS */ ACAMERA_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STALL_DURATIONS = // int64[4*n] ACAMERA_HEIC_START + 8, /** * <p>The available HEIC (ISO/IEC 23008-12/24) UltraHDR stream * configurations that this camera device supports * (i.e. format, width, height, output/input stream) for CaptureRequests where * ACAMERA_SENSOR_PIXEL_MODE is set to * <a href="https://developer.android.com/reference/android/hardware/camera2/CameraMetadata.html#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION">CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION</a>.</p> * * @see ACAMERA_SENSOR_PIXEL_MODE * * <p>Type: int32[n*4] (acamera_metadata_enum_android_heic_available_heic_ultra_hdr_stream_configurations_maximum_resolution_t)</p> * * <p>This tag may appear in: * <ul> * <li>ACameraMetadata from ACameraManager_getCameraCharacteristics</li> * </ul></p> * * <p>Refer to ACAMERA_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS for details.</p> * <p>All the configuration tuples <code>(format, width, height, input?)</code> will contain * AIMAGE_FORMAT_HEIC format as OUTPUT only.</p> * * @see ACAMERA_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS */ ACAMERA_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION = // int32[n*4] (acamera_metadata_enum_android_heic_available_heic_ultra_hdr_stream_configurations_maximum_resolution_t) ACAMERA_HEIC_START + 9, /** * <p>This lists the minimum frame duration for each * format/size combination for HEIC UltraHDR output formats for CaptureRequests where * ACAMERA_SENSOR_PIXEL_MODE is set to * <a href="https://developer.android.com/reference/android/hardware/camera2/CameraMetadata.html#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION">CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION</a>.</p> * * @see ACAMERA_SENSOR_PIXEL_MODE * * <p>Type: int64[4*n]</p> * * <p>This tag may appear in: * <ul> * <li>ACameraMetadata from ACameraManager_getCameraCharacteristics</li> * </ul></p> * * <p>Refer to ACAMERA_HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONS for details.</p> * * @see ACAMERA_HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONS */ ACAMERA_HEIC_AVAILABLE_HEIC_ULTRA_HDR_MIN_FRAME_DURATIONS_MAXIMUM_RESOLUTION = // int64[4*n] ACAMERA_HEIC_START + 10, /** * <p>This lists the maximum stall duration for each * output format/size combination for HEIC UltraHDR streams for CaptureRequests where * ACAMERA_SENSOR_PIXEL_MODE is set to * <a href="https://developer.android.com/reference/android/hardware/camera2/CameraMetadata.html#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION">CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION</a>.</p> * * @see ACAMERA_SENSOR_PIXEL_MODE * * <p>Type: int64[4*n]</p> * * <p>This tag may appear in: * <ul> * <li>ACameraMetadata from ACameraManager_getCameraCharacteristics</li> * </ul></p> * * <p>Refer to ACAMERA_HEIC_AVAILABLE_HEIC_STALL_DURATIONS for details.</p> * * @see ACAMERA_HEIC_AVAILABLE_HEIC_STALL_DURATIONS */ ACAMERA_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STALL_DURATIONS_MAXIMUM_RESOLUTION = // int64[4*n] ACAMERA_HEIC_START + 11, ACAMERA_HEIC_END, /** Loading Loading @@ -11526,6 +11665,26 @@ typedef enum acamera_metadata_enum_acamera_heic_available_heic_stream_configurat } acamera_metadata_enum_android_heic_available_heic_stream_configurations_maximum_resolution_t; // ACAMERA_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS typedef enum acamera_metadata_enum_acamera_heic_available_heic_ultra_hdr_stream_configurations { ACAMERA_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_OUTPUT = 0, ACAMERA_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_INPUT = 1, } acamera_metadata_enum_android_heic_available_heic_ultra_hdr_stream_configurations_t; // ACAMERA_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION typedef enum acamera_metadata_enum_acamera_heic_available_heic_ultra_hdr_stream_configurations_maximum_resolution { ACAMERA_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_OUTPUT = 0, ACAMERA_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_INPUT = 1, } acamera_metadata_enum_android_heic_available_heic_ultra_hdr_stream_configurations_maximum_resolution_t; // ACAMERA_AUTOMOTIVE_LOCATION media/libstagefright/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -317,6 +317,7 @@ cc_library { "server_configurable_flags", "libaconfig_storage_read_api_cc", "aconfig_mediacodec_flags_c_lib", "camera_platform_flags_c_lib", ], static_libs: [ Loading media/libstagefright/MPEG4Writer.cpp +322 −43 File changed.Preview size limit exceeded, changes collapsed. Show changes media/libstagefright/MediaMuxer.cpp +23 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,8 @@ #include "webm/WebmWriter.h" #include <com_android_internal_camera_flags.h> #include <utils/Log.h> #include <media/stagefright/MediaMuxer.h> Loading @@ -38,6 +40,8 @@ #include <media/stagefright/OggWriter.h> #include <media/stagefright/Utils.h> namespace flags_camera = com::android::internal::camera::flags; namespace android { static bool isMp4Format(MediaMuxer::OutputFormat format) { Loading Loading @@ -270,6 +274,25 @@ status_t MediaMuxer::writeSampleData(const sp<ABuffer> &buffer, size_t trackInde sampleMetaData.setInt64(kKeyLastSampleIndexInChunk, val64); } if (flags_camera::camera_heif_gainmap()) { int32_t val32; if (bufMeta->findInt32("color-primaries", &val32)) { sampleMetaData.setInt32(kKeyColorPrimaries, val32); } if (bufMeta->findInt32("color-transfer", &val32)) { sampleMetaData.setInt32(kKeyTransferFunction, val32); } if (bufMeta->findInt32("color-matrix", &val32)) { sampleMetaData.setInt32(kKeyColorMatrix, val32); } if (bufMeta->findInt32("color-range", &val32)) { sampleMetaData.setInt32(kKeyColorRange, val32); } if (bufMeta->findInt32(KEY_COLOR_FORMAT, &val32)) { sampleMetaData.setInt32(kKeyColorFormat, val32); } } sp<MediaAdapter> currentTrack = mTrackList[trackIndex]; // This pushBuffer will wait until the mediaBuffer is consumed. return currentTrack->pushBuffer(mediaBuffer); Loading Loading
camera/camera_platform.aconfig +8 −0 Original line number Diff line number Diff line package: "com.android.internal.camera.flags" container: "system" flag { namespace: "camera_platform" name: "camera_heif_gainmap" is_exported: true description: "Extend HEIC/HEIF still capture with HDR gainmap" bug: "362608343" } flag { namespace: "camera_platform" name: "camera_hsum_permission" Loading
camera/ndk/include/camera/NdkCameraMetadataTags.h +159 −0 Original line number Diff line number Diff line Loading @@ -7959,6 +7959,145 @@ typedef enum acamera_metadata_tag { ACAMERA_HEIC_AVAILABLE_HEIC_STALL_DURATIONS_MAXIMUM_RESOLUTION = // int64[4*n] ACAMERA_HEIC_START + 5, /** * <p>The available HEIC (ISO/IEC 23008-12/24) UltraHDR stream * configurations that this camera device supports * (i.e. format, width, height, output/input stream).</p> * * <p>Type: int32[n*4] (acamera_metadata_enum_android_heic_available_heic_ultra_hdr_stream_configurations_t)</p> * * <p>This tag may appear in: * <ul> * <li>ACameraMetadata from ACameraManager_getCameraCharacteristics</li> * </ul></p> * * <p>The configurations are listed as <code>(format, width, height, input?)</code> tuples.</p> * <p>All the static, control, and dynamic metadata tags related to JPEG apply to HEIC formats. * Configuring JPEG and HEIC streams at the same time is not supported.</p> * <p>All the configuration tuples <code>(format, width, height, input?)</code> will contain * AIMAGE_FORMAT_HEIC format as OUTPUT only.</p> */ ACAMERA_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS = // int32[n*4] (acamera_metadata_enum_android_heic_available_heic_ultra_hdr_stream_configurations_t) ACAMERA_HEIC_START + 6, /** * <p>This lists the minimum frame duration for each * format/size combination for HEIC UltraHDR output formats.</p> * * <p>Type: int64[4*n]</p> * * <p>This tag may appear in: * <ul> * <li>ACameraMetadata from ACameraManager_getCameraCharacteristics</li> * </ul></p> * * <p>This should correspond to the frame duration when only that * stream is active, with all processing (typically in android.*.mode) * set to either OFF or FAST.</p> * <p>When multiple streams are used in a request, the minimum frame * duration will be max(individual stream min durations).</p> * <p>See ACAMERA_SENSOR_FRAME_DURATION and * ACAMERA_SCALER_AVAILABLE_STALL_DURATIONS for more details about * calculating the max frame rate.</p> * * @see ACAMERA_SCALER_AVAILABLE_STALL_DURATIONS * @see ACAMERA_SENSOR_FRAME_DURATION */ ACAMERA_HEIC_AVAILABLE_HEIC_ULTRA_HDR_MIN_FRAME_DURATIONS = // int64[4*n] ACAMERA_HEIC_START + 7, /** * <p>This lists the maximum stall duration for each * output format/size combination for HEIC UltraHDR streams.</p> * * <p>Type: int64[4*n]</p> * * <p>This tag may appear in: * <ul> * <li>ACameraMetadata from ACameraManager_getCameraCharacteristics</li> * </ul></p> * * <p>A stall duration is how much extra time would get added * to the normal minimum frame duration for a repeating request * that has streams with non-zero stall.</p> * <p>This functions similarly to * ACAMERA_SCALER_AVAILABLE_STALL_DURATIONS for HEIC UltraHDR * streams.</p> * <p>All HEIC output stream formats may have a nonzero stall * duration.</p> * * @see ACAMERA_SCALER_AVAILABLE_STALL_DURATIONS */ ACAMERA_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STALL_DURATIONS = // int64[4*n] ACAMERA_HEIC_START + 8, /** * <p>The available HEIC (ISO/IEC 23008-12/24) UltraHDR stream * configurations that this camera device supports * (i.e. format, width, height, output/input stream) for CaptureRequests where * ACAMERA_SENSOR_PIXEL_MODE is set to * <a href="https://developer.android.com/reference/android/hardware/camera2/CameraMetadata.html#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION">CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION</a>.</p> * * @see ACAMERA_SENSOR_PIXEL_MODE * * <p>Type: int32[n*4] (acamera_metadata_enum_android_heic_available_heic_ultra_hdr_stream_configurations_maximum_resolution_t)</p> * * <p>This tag may appear in: * <ul> * <li>ACameraMetadata from ACameraManager_getCameraCharacteristics</li> * </ul></p> * * <p>Refer to ACAMERA_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS for details.</p> * <p>All the configuration tuples <code>(format, width, height, input?)</code> will contain * AIMAGE_FORMAT_HEIC format as OUTPUT only.</p> * * @see ACAMERA_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS */ ACAMERA_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION = // int32[n*4] (acamera_metadata_enum_android_heic_available_heic_ultra_hdr_stream_configurations_maximum_resolution_t) ACAMERA_HEIC_START + 9, /** * <p>This lists the minimum frame duration for each * format/size combination for HEIC UltraHDR output formats for CaptureRequests where * ACAMERA_SENSOR_PIXEL_MODE is set to * <a href="https://developer.android.com/reference/android/hardware/camera2/CameraMetadata.html#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION">CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION</a>.</p> * * @see ACAMERA_SENSOR_PIXEL_MODE * * <p>Type: int64[4*n]</p> * * <p>This tag may appear in: * <ul> * <li>ACameraMetadata from ACameraManager_getCameraCharacteristics</li> * </ul></p> * * <p>Refer to ACAMERA_HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONS for details.</p> * * @see ACAMERA_HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONS */ ACAMERA_HEIC_AVAILABLE_HEIC_ULTRA_HDR_MIN_FRAME_DURATIONS_MAXIMUM_RESOLUTION = // int64[4*n] ACAMERA_HEIC_START + 10, /** * <p>This lists the maximum stall duration for each * output format/size combination for HEIC UltraHDR streams for CaptureRequests where * ACAMERA_SENSOR_PIXEL_MODE is set to * <a href="https://developer.android.com/reference/android/hardware/camera2/CameraMetadata.html#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION">CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION</a>.</p> * * @see ACAMERA_SENSOR_PIXEL_MODE * * <p>Type: int64[4*n]</p> * * <p>This tag may appear in: * <ul> * <li>ACameraMetadata from ACameraManager_getCameraCharacteristics</li> * </ul></p> * * <p>Refer to ACAMERA_HEIC_AVAILABLE_HEIC_STALL_DURATIONS for details.</p> * * @see ACAMERA_HEIC_AVAILABLE_HEIC_STALL_DURATIONS */ ACAMERA_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STALL_DURATIONS_MAXIMUM_RESOLUTION = // int64[4*n] ACAMERA_HEIC_START + 11, ACAMERA_HEIC_END, /** Loading Loading @@ -11526,6 +11665,26 @@ typedef enum acamera_metadata_enum_acamera_heic_available_heic_stream_configurat } acamera_metadata_enum_android_heic_available_heic_stream_configurations_maximum_resolution_t; // ACAMERA_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS typedef enum acamera_metadata_enum_acamera_heic_available_heic_ultra_hdr_stream_configurations { ACAMERA_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_OUTPUT = 0, ACAMERA_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_INPUT = 1, } acamera_metadata_enum_android_heic_available_heic_ultra_hdr_stream_configurations_t; // ACAMERA_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION typedef enum acamera_metadata_enum_acamera_heic_available_heic_ultra_hdr_stream_configurations_maximum_resolution { ACAMERA_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_OUTPUT = 0, ACAMERA_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_INPUT = 1, } acamera_metadata_enum_android_heic_available_heic_ultra_hdr_stream_configurations_maximum_resolution_t; // ACAMERA_AUTOMOTIVE_LOCATION
media/libstagefright/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -317,6 +317,7 @@ cc_library { "server_configurable_flags", "libaconfig_storage_read_api_cc", "aconfig_mediacodec_flags_c_lib", "camera_platform_flags_c_lib", ], static_libs: [ Loading
media/libstagefright/MPEG4Writer.cpp +322 −43 File changed.Preview size limit exceeded, changes collapsed. Show changes
media/libstagefright/MediaMuxer.cpp +23 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,8 @@ #include "webm/WebmWriter.h" #include <com_android_internal_camera_flags.h> #include <utils/Log.h> #include <media/stagefright/MediaMuxer.h> Loading @@ -38,6 +40,8 @@ #include <media/stagefright/OggWriter.h> #include <media/stagefright/Utils.h> namespace flags_camera = com::android::internal::camera::flags; namespace android { static bool isMp4Format(MediaMuxer::OutputFormat format) { Loading Loading @@ -270,6 +274,25 @@ status_t MediaMuxer::writeSampleData(const sp<ABuffer> &buffer, size_t trackInde sampleMetaData.setInt64(kKeyLastSampleIndexInChunk, val64); } if (flags_camera::camera_heif_gainmap()) { int32_t val32; if (bufMeta->findInt32("color-primaries", &val32)) { sampleMetaData.setInt32(kKeyColorPrimaries, val32); } if (bufMeta->findInt32("color-transfer", &val32)) { sampleMetaData.setInt32(kKeyTransferFunction, val32); } if (bufMeta->findInt32("color-matrix", &val32)) { sampleMetaData.setInt32(kKeyColorMatrix, val32); } if (bufMeta->findInt32("color-range", &val32)) { sampleMetaData.setInt32(kKeyColorRange, val32); } if (bufMeta->findInt32(KEY_COLOR_FORMAT, &val32)) { sampleMetaData.setInt32(kKeyColorFormat, val32); } } sp<MediaAdapter> currentTrack = mTrackList[trackIndex]; // This pushBuffer will wait until the mediaBuffer is consumed. return currentTrack->pushBuffer(mediaBuffer); Loading