Create API for reporting color space support to Camera2 framework consumers.

Test: Ran CtsCameraTestCases
Test: Ran new VTS test for color space reporting
Test: Created app to test display P3 camera, switching between color spaces
Bug: 238359088
Change-Id: I9d9f99954198ea3743dcdb74083985759a112669
diff --git a/camera/Android.bp b/camera/Android.bp
index 28a2a11..019e892 100644
--- a/camera/Android.bp
+++ b/camera/Android.bp
@@ -67,7 +67,7 @@
     local_include_dirs: ["include"],
 
     static_libs: [
-        "android.hardware.camera.metadata-V1-ndk",
+        "android.hardware.camera.metadata-V2-ndk",
     ],
 
     cflags: [
diff --git a/camera/docs/camera_device_info.proto b/camera/docs/camera_device_info.proto
index 908f0de..a7ca34b 100644
--- a/camera/docs/camera_device_info.proto
+++ b/camera/docs/camera_device_info.proto
@@ -138,6 +138,7 @@
     repeated int32 android_request_availableCapabilities = 851974;
     optional DynamicRangeProfiles android_request_availableDynamicRangeProfiles = 851975;
     optional int64 android_request_recommendedTenBitDynamicRangeProfile = 851976;
+    optional ColorSpaceProfiles android_request_availableColorSpaceProfiles = 851977;
     optional float android_scaler_availableMaxDigitalZoom = 917504;
     optional StreamConfigurations android_scaler_streamConfigurationMap = 917505;
     optional int32 android_scaler_croppingType = 917506;
diff --git a/camera/docs/docs.html b/camera/docs/docs.html
index c978d15..d0738fb 100644
--- a/camera/docs/docs.html
+++ b/camera/docs/docs.html
@@ -711,6 +711,10 @@
             ><a href="#static_android.request.availableDynamicRangeProfilesMap">android.request.availableDynamicRangeProfilesMap</a></li>
             <li
             ><a href="#static_android.request.recommendedTenBitDynamicRangeProfile">android.request.recommendedTenBitDynamicRangeProfile</a></li>
+            <li
+            ><a href="#static_android.request.availableColorSpaceProfiles">android.request.availableColorSpaceProfiles</a></li>
+            <li
+            ><a href="#static_android.request.availableColorSpaceProfilesMap">android.request.availableColorSpaceProfilesMap</a></li>
           </ul>
         </li>
         <li>
@@ -19439,6 +19443,24 @@
 mandatory stream combinations involving stream use cases,<wbr/> which can also be queried
 via <a href="https://developer.android.com/reference/android/hardware/camera2/params/MandatoryStreamCombination.html">MandatoryStreamCombination</a>.<wbr/></p></span>
                   </li>
+                  <li>
+                    <span class="entry_type_enum_name">COLOR_SPACE_PROFILES (v3.9)</span>
+                    <span class="entry_type_enum_optional">[optional]</span>
+                    <span class="entry_type_enum_hidden">[java_public]</span>
+                    <span class="entry_type_enum_notes"><p>The device supports querying the possible combinations of color spaces,<wbr/> image
+formats,<wbr/> and dynamic range profiles supported by the camera and requesting a
+particular color space for a session via
+<a href="https://developer.android.com/reference/android/hardware/camera2/params/SessionConfiguration.html#setColorSpace">SessionConfiguration#setColorSpace</a>.<wbr/></p>
+<p>Cameras that enable this capability may or may not also implement dynamic range
+profiles.<wbr/> If they don't,<wbr/>
+<a href="https://developer.android.com/reference/android/hardware/camera2/params/ColorSpaceProfiles.html#getSupportedDynamicRangeProfiles">ColorSpaceProfiles#getSupportedDynamicRangeProfiles</a>
+will return only
+<a href="https://developer.android.com/reference/android/hardware/camera2/params/DynamicRangeProfiles.html#STANDARD">DynamicRangeProfiles#STANDARD</a> and
+<a href="https://developer.android.com/reference/android/hardware/camera2/params/ColorSpaceProfiles.html#getSupportedColorSpacesForDynamicRange">ColorSpaceProfiles#getSupportedColorSpacesForDynamicRange</a>
+will assume support of the
+<a href="https://developer.android.com/reference/android/hardware/camera2/params/DynamicRangeProfiles.html#STANDARD">DynamicRangeProfiles#STANDARD</a>
+profile in all combinations of color spaces and image formats.<wbr/></p></span>
+                  </li>
                 </ul>
 
             </td> <!-- entry_type -->
@@ -20399,6 +20421,263 @@
           <tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
            <!-- end of entry -->
         
+                
+          <tr class="entry" id="static_android.request.availableColorSpaceProfiles">
+            <td class="entry_name
+             " rowspan="3">
+              android.<wbr/>request.<wbr/>available<wbr/>Color<wbr/>Space<wbr/>Profiles
+            </td>
+            <td class="entry_type">
+                <span class="entry_type_name">int32</span>
+
+              <span class="entry_type_visibility"> [java_public as colorSpaceProfiles]</span>
+
+              <span class="entry_type_synthetic">[synthetic] </span>
+
+
+
+
+
+            </td> <!-- entry_type -->
+
+            <td class="entry_description">
+              <p>An interface for querying the color space profiles supported by a camera device.<wbr/></p>
+            </td>
+
+            <td class="entry_units">
+            </td>
+
+            <td class="entry_range">
+            </td>
+
+            <td class="entry_hal_version">
+              <p>3.<wbr/>9</p>
+            </td>
+
+            <td class="entry_tags">
+            </td>
+
+          </tr>
+          <tr class="entries_header">
+            <th class="th_details" colspan="6">Details</th>
+          </tr>
+          <tr class="entry_cont">
+            <td class="entry_details" colspan="6">
+              <p>A color space profile is a combination of a color space,<wbr/> an image format,<wbr/> and a dynamic
+range profile.<wbr/> Camera clients can retrieve the list of supported color spaces by calling
+<a href="https://developer.android.com/reference/android/hardware/camera2/params/ColorSpaceProfiles.html#getSupportedColorSpaces">ColorSpaceProfiles#getSupportedColorSpaces</a> or
+<a href="https://developer.android.com/reference/android/hardware/camera2/params/ColorSpaceProfiles.html#getSupportedColorSpacesForDynamicRange">ColorSpaceProfiles#getSupportedColorSpacesForDynamicRange</a>.<wbr/>
+If a camera does not support the
+<a href="https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#REQUEST_AVAILABLE_CAPABILITIES_DYNAMIC_RANGE_TEN_BIT">Camera<wbr/>Characteristics#REQUEST_<wbr/>AVAILABLE_<wbr/>CAPABILITIES_<wbr/>DYNAMIC_<wbr/>RANGE_<wbr/>TEN_<wbr/>BIT</a>
+capability,<wbr/> the dynamic range profile will always be
+<a href="https://developer.android.com/reference/android/hardware/camera2/params/DynamicRangeProfiles.html#STANDARD">DynamicRangeProfiles#STANDARD</a>.<wbr/> Color space
+capabilities are queried in combination with an <a href="https://developer.android.com/reference/android/graphics/ImageFormat.html">ImageFormat</a>.<wbr/>
+If a camera client wants to know the general color space capabilities of a camera device
+regardless of image format,<wbr/> it can specify <a href="https://developer.android.com/reference/android/graphics/ImageFormat.html#UNKNOWN">ImageFormat#UNKNOWN</a>.<wbr/>
+The color space for a session can be configured by setting the SessionConfiguration
+color space via <a href="https://developer.android.com/reference/android/hardware/camera2/params/SessionConfiguration.html#setColorSpace">SessionConfiguration#setColorSpace</a>.<wbr/></p>
+            </td>
+          </tr>
+
+
+          <tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
+           <!-- end of entry -->
+        
+                
+          <tr class="entry" id="static_android.request.availableColorSpaceProfilesMap">
+            <td class="entry_name
+             " rowspan="5">
+              android.<wbr/>request.<wbr/>available<wbr/>Color<wbr/>Space<wbr/>Profiles<wbr/>Map
+            </td>
+            <td class="entry_type">
+                <span class="entry_type_name entry_type_name_enum">int64</span>
+                <span class="entry_type_container">x</span>
+
+                <span class="entry_type_array">
+                  n x 3
+                </span>
+              <span class="entry_type_visibility"> [ndk_public]</span>
+
+
+
+
+
+                <ul class="entry_type_enum">
+                  <li>
+                    <span class="entry_type_enum_name">UNSPECIFIED (v3.9)</span>
+                    <span class="entry_type_enum_value">-1</span>
+                    <span class="entry_type_enum_notes"><p>Default value,<wbr/> when not explicitly specified.<wbr/> The Camera device will choose the color
+space to employ.<wbr/></p></span>
+                  </li>
+                  <li>
+                    <span class="entry_type_enum_name">SRGB (v3.9)</span>
+                    <span class="entry_type_enum_hidden">[system]</span>
+                    <span class="entry_type_enum_value">0</span>
+                    <span class="entry_type_enum_notes"><p>RGB color space sRGB standardized as IEC 61966-2.<wbr/>1:1999.<wbr/></p></span>
+                  </li>
+                  <li>
+                    <span class="entry_type_enum_name">LINEAR_SRGB (v3.9)</span>
+                    <span class="entry_type_enum_hidden">[system]</span>
+                    <span class="entry_type_enum_value">1</span>
+                    <span class="entry_type_enum_notes"><p>RGB color space sRGB standardized as IEC 61966-2.<wbr/>1:1999.<wbr/></p></span>
+                  </li>
+                  <li>
+                    <span class="entry_type_enum_name">EXTENDED_SRGB (v3.9)</span>
+                    <span class="entry_type_enum_hidden">[system]</span>
+                    <span class="entry_type_enum_value">2</span>
+                    <span class="entry_type_enum_notes"><p>RGB color space scRGB-nl standardized as IEC 61966-2-2:2003.<wbr/></p></span>
+                  </li>
+                  <li>
+                    <span class="entry_type_enum_name">LINEAR_EXTENDED_SRGB (v3.9)</span>
+                    <span class="entry_type_enum_hidden">[system]</span>
+                    <span class="entry_type_enum_value">3</span>
+                    <span class="entry_type_enum_notes"><p>RGB color space scRGB standardized as IEC 61966-2-2:2003.<wbr/></p></span>
+                  </li>
+                  <li>
+                    <span class="entry_type_enum_name">BT709 (v3.9)</span>
+                    <span class="entry_type_enum_hidden">[system]</span>
+                    <span class="entry_type_enum_value">4</span>
+                    <span class="entry_type_enum_notes"><p>RGB color space BT.<wbr/>709 standardized as Rec.<wbr/> ITU-R BT.<wbr/>709-5.<wbr/></p></span>
+                  </li>
+                  <li>
+                    <span class="entry_type_enum_name">BT2020 (v3.9)</span>
+                    <span class="entry_type_enum_hidden">[system]</span>
+                    <span class="entry_type_enum_value">5</span>
+                    <span class="entry_type_enum_notes"><p>RGB color space BT.<wbr/>2020 standardized as Rec.<wbr/> ITU-R BT.<wbr/>2020-1.<wbr/></p></span>
+                  </li>
+                  <li>
+                    <span class="entry_type_enum_name">DCI_P3 (v3.9)</span>
+                    <span class="entry_type_enum_hidden">[system]</span>
+                    <span class="entry_type_enum_value">6</span>
+                    <span class="entry_type_enum_notes"><p>RGB color space DCI-P3 standardized as SMPTE RP 431-2-2007.<wbr/></p></span>
+                  </li>
+                  <li>
+                    <span class="entry_type_enum_name">DISPLAY_P3 (v3.9)</span>
+                    <span class="entry_type_enum_hidden">[system]</span>
+                    <span class="entry_type_enum_value">7</span>
+                    <span class="entry_type_enum_notes"><p>RGB color space Display P3 based on SMPTE RP 431-2-2007 and IEC 61966-2.<wbr/>1:1999.<wbr/></p></span>
+                  </li>
+                  <li>
+                    <span class="entry_type_enum_name">NTSC_1953 (v3.9)</span>
+                    <span class="entry_type_enum_hidden">[system]</span>
+                    <span class="entry_type_enum_value">8</span>
+                    <span class="entry_type_enum_notes"><p>RGB color space NTSC,<wbr/> 1953 standard.<wbr/></p></span>
+                  </li>
+                  <li>
+                    <span class="entry_type_enum_name">SMPTE_C (v3.9)</span>
+                    <span class="entry_type_enum_hidden">[system]</span>
+                    <span class="entry_type_enum_value">9</span>
+                    <span class="entry_type_enum_notes"><p>RGB color space SMPTE C.<wbr/></p></span>
+                  </li>
+                  <li>
+                    <span class="entry_type_enum_name">ADOBE_RGB (v3.9)</span>
+                    <span class="entry_type_enum_hidden">[system]</span>
+                    <span class="entry_type_enum_value">10</span>
+                    <span class="entry_type_enum_notes"><p>RGB color space Adobe RGB (1998).<wbr/></p></span>
+                  </li>
+                  <li>
+                    <span class="entry_type_enum_name">PRO_PHOTO_RGB (v3.9)</span>
+                    <span class="entry_type_enum_hidden">[system]</span>
+                    <span class="entry_type_enum_value">11</span>
+                    <span class="entry_type_enum_notes"><p>RGB color space ProPhoto RGB standardized as ROMM RGB ISO 22028-2:2013.<wbr/></p></span>
+                  </li>
+                  <li>
+                    <span class="entry_type_enum_name">ACES (v3.9)</span>
+                    <span class="entry_type_enum_hidden">[system]</span>
+                    <span class="entry_type_enum_value">12</span>
+                    <span class="entry_type_enum_notes"><p>RGB color space ACES standardized as SMPTE ST 2065-1:2012.<wbr/></p></span>
+                  </li>
+                  <li>
+                    <span class="entry_type_enum_name">ACESCG (v3.9)</span>
+                    <span class="entry_type_enum_hidden">[system]</span>
+                    <span class="entry_type_enum_value">13</span>
+                    <span class="entry_type_enum_notes"><p>RGB color space ACEScg standardized as Academy S-2014-004.<wbr/></p></span>
+                  </li>
+                  <li>
+                    <span class="entry_type_enum_name">CIE_XYZ (v3.9)</span>
+                    <span class="entry_type_enum_hidden">[system]</span>
+                    <span class="entry_type_enum_value">14</span>
+                    <span class="entry_type_enum_notes"><p>XYZ color space CIE XYZ.<wbr/> This color space assumes standard illuminant D50 as its white
+point.<wbr/></p></span>
+                  </li>
+                  <li>
+                    <span class="entry_type_enum_name">CIE_LAB (v3.9)</span>
+                    <span class="entry_type_enum_hidden">[system]</span>
+                    <span class="entry_type_enum_value">15</span>
+                    <span class="entry_type_enum_notes"><p>Lab color space CIE L<em>a</em>b*.<wbr/> This color space uses CIE XYZ D50 as a profile conversion
+space.<wbr/></p></span>
+                  </li>
+                </ul>
+
+            </td> <!-- entry_type -->
+
+            <td class="entry_description">
+              <p>A list of all possible color space profiles supported by a camera device.<wbr/></p>
+            </td>
+
+            <td class="entry_units">
+            </td>
+
+            <td class="entry_range">
+            </td>
+
+            <td class="entry_hal_version">
+              <p>3.<wbr/>9</p>
+            </td>
+
+            <td class="entry_tags">
+            </td>
+
+          </tr>
+          <tr class="entries_header">
+            <th class="th_details" colspan="6">Details</th>
+          </tr>
+          <tr class="entry_cont">
+            <td class="entry_details" colspan="6">
+              <p>A color space profile is a combination of a color space,<wbr/> an image format,<wbr/> and a dynamic range
+profile.<wbr/> If a camera does not support the
+<a href="https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#REQUEST_AVAILABLE_CAPABILITIES_DYNAMIC_RANGE_TEN_BIT">Camera<wbr/>Characteristics#REQUEST_<wbr/>AVAILABLE_<wbr/>CAPABILITIES_<wbr/>DYNAMIC_<wbr/>RANGE_<wbr/>TEN_<wbr/>BIT</a>
+capability,<wbr/> the dynamic range profile will always be
+<a href="https://developer.android.com/reference/android/hardware/camera2/params/DynamicRangeProfiles.html#STANDARD">DynamicRangeProfiles#STANDARD</a>.<wbr/> Camera clients can
+use <a href="https://developer.android.com/reference/android/hardware/camera2/params/SessionConfiguration.html#setColorSpace">SessionConfiguration#setColorSpace</a> to select
+a color space.<wbr/></p>
+            </td>
+          </tr>
+
+          <tr class="entries_header">
+            <th class="th_details" colspan="6">HAL Implementation Details</th>
+          </tr>
+          <tr class="entry_cont">
+            <td class="entry_details" colspan="6">
+              <p>The array contains three entries per supported profile:</p>
+<p>1) The supported color space.<wbr/>
+2) An image format which can be used with this color space.<wbr/>
+3) A bitmap of all compatible dynamic range profiles,<wbr/> if the device is HDR-capable.<wbr/></p>
+<p>The possible values for #1 are the positive values of the
+ANDROID_<wbr/>REQUEST_<wbr/>AVAILABLE_<wbr/>COLOR_<wbr/>SPACE_<wbr/>PROFILES_<wbr/>MAP_<wbr/>* enum,<wbr/> which is equivalent to
+<a href="https://developer.android.com/reference/android/graphics/ColorSpace/Named.html">Named</a> and its ordinals.<wbr/> UNSPECIFIED should not be
+used here.<wbr/></p>
+<p>The possible values for #2 consist of the public-facing image/<wbr/>pixel formats,<wbr/> found at
+<a href="https://developer.android.com/reference/android/graphics/ImageFormat.html">ImageFormat</a> and <a href="https://developer.android.com/reference/android/graphics/PixelFormat.html">PixelFormat</a>.<wbr/> Each map
+to a HAL pixel format except for <a href="https://developer.android.com/reference/android/graphics/ImageFormat/JPEG.html">JPEG</a>,<wbr/>
+<a href="https://developer.android.com/reference/android/graphics/ImageFormat/HEIC.html">HEIC</a>,<wbr/> and
+<a href="https://developer.android.com/reference/android/graphics/ImageFormat/DEPTH_JPEG.html">DEPTH_<wbr/>JPEG</a>.<wbr/> Depth formats besides DEPTH_<wbr/>JPEG are
+not applicable and should not be specified.<wbr/> If there are no constraints on the type of
+image format a color space is compatible with,<wbr/> this can be
+<a href="https://developer.android.com/reference/android/graphics/ImageFormat/UNKNOWN.html">UNKNOWN</a>.<wbr/></p>
+<p>If the device is not HDR-capable,<wbr/> #3 should always be
+ANDROID_<wbr/>REQUEST_<wbr/>AVAILABLE_<wbr/>DYNAMIC_<wbr/>RANGE_<wbr/>PROFILES_<wbr/>STANDARD.<wbr/> Otherwise,<wbr/> #3 should be a
+bitmap of the compatible ANDROID_<wbr/>REQUEST_<wbr/>AVAILABLE_<wbr/>DYNAMIC_<wbr/>RANGE_<wbr/>PROFILES_<wbr/>* values.<wbr/></p>
+<p>For devices that support P3 color,<wbr/> it is highly recommended to advertise
+<a href="https://developer.android.com/reference/android/graphics/ColorSpace/Named/DISPLAY_P3.html">DISPLAY_<wbr/>P3</a>
+unless the profile is specifically designed for playback in a theater environment
+(<a href="https://developer.android.com/reference/android/graphics/ColorSpace/Named/DCI_P3.html">DCI_<wbr/>P3</a>).<wbr/></p>
+            </td>
+          </tr>
+
+          <tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
+           <!-- end of entry -->
+        
         
 
       <!-- end of kind -->
diff --git a/camera/docs/metadata_definitions.xml b/camera/docs/metadata_definitions.xml
index 469206e..ab9a17d 100644
--- a/camera/docs/metadata_definitions.xml
+++ b/camera/docs/metadata_definitions.xml
@@ -152,6 +152,9 @@
     <typedef name="dynamicRangeProfiles">
         <language name="java">android.hardware.camera2.params.DynamicRangeProfiles</language>
     </typedef>
+    <typedef name="colorSpaceProfiles">
+        <language name="java">android.hardware.camera2.params.ColorSpaceProfiles</language>
+    </typedef>
   </types>
 
   <namespace name="android">
@@ -6339,6 +6342,24 @@
               via {@link android.hardware.camera2.params.MandatoryStreamCombination}.
               </notes>
             </value>
+            <value optional="true" visibility="java_public" hal_version="3.9">COLOR_SPACE_PROFILES
+              <notes>
+                The device supports querying the possible combinations of color spaces, image
+                formats, and dynamic range profiles supported by the camera and requesting a
+                particular color space for a session via
+                {@link android.hardware.camera2.params.SessionConfiguration#setColorSpace}.
+
+                Cameras that enable this capability may or may not also implement dynamic range
+                profiles. If they don't,
+                {@link android.hardware.camera2.params.ColorSpaceProfiles#getSupportedDynamicRangeProfiles}
+                will return only
+                {@link android.hardware.camera2.params.DynamicRangeProfiles#STANDARD} and
+                {@link android.hardware.camera2.params.ColorSpaceProfiles#getSupportedColorSpacesForDynamicRange}
+                will assume support of the
+                {@link android.hardware.camera2.params.DynamicRangeProfiles#STANDARD}
+                profile in all combinations of color spaces and image formats.
+              </notes>
+            </value>
           </enum>
           <description>List of capabilities that this camera device
           advertises as fully supporting.</description>
@@ -6874,6 +6895,166 @@
           {@link android.hardware.camera2.params.OutputConfiguration#setDynamicRangeProfile}.
           </details>
         </entry>
+        <entry name="availableColorSpaceProfiles" type="int32" visibility="java_public"
+            synthetic="true" optional="true" typedef="colorSpaceProfiles" hal_version="3.9">
+          <description>
+            An interface for querying the color space profiles supported by a camera device.
+          </description>
+          <details>
+            A color space profile is a combination of a color space, an image format, and a dynamic
+            range profile. Camera clients can retrieve the list of supported color spaces by calling
+            {@link android.hardware.camera2.params.ColorSpaceProfiles#getSupportedColorSpaces} or
+            {@link android.hardware.camera2.params.ColorSpaceProfiles#getSupportedColorSpacesForDynamicRange}.
+            If a camera does not support the
+            {@link android.hardware.camera2.CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES_DYNAMIC_RANGE_TEN_BIT}
+            capability, the dynamic range profile will always be
+            {@link android.hardware.camera2.params.DynamicRangeProfiles#STANDARD}. Color space
+            capabilities are queried in combination with an {@link android.graphics.ImageFormat}.
+            If a camera client wants to know the general color space capabilities of a camera device
+            regardless of image format, it can specify {@link android.graphics.ImageFormat#UNKNOWN}.
+            The color space for a session can be configured by setting the SessionConfiguration
+            color space via {@link android.hardware.camera2.params.SessionConfiguration#setColorSpace}.
+          </details>
+        </entry>
+        <entry name="availableColorSpaceProfilesMap" type="int64" visibility="ndk_public"
+            optional="true" enum="true" container="array" hal_version="3.9">
+          <array>
+            <size>n</size>
+            <size>3</size>
+          </array>
+          <enum>
+            <value id="-1">UNSPECIFIED
+            <notes>
+              Default value, when not explicitly specified. The Camera device will choose the color
+              space to employ.
+            </notes>
+            </value>
+            <value visibility="system" id="0">SRGB
+            <notes>
+              RGB color space sRGB standardized as IEC 61966-2.1:1999.
+            </notes>
+            </value>
+            <value visibility="system" id="1">LINEAR_SRGB
+            <notes>
+              RGB color space sRGB standardized as IEC 61966-2.1:1999.
+            </notes>
+            </value>
+            <value visibility="system" id="2">EXTENDED_SRGB
+            <notes>
+              RGB color space scRGB-nl standardized as IEC 61966-2-2:2003.
+            </notes>
+            </value>
+            <value visibility="system" id="3">LINEAR_EXTENDED_SRGB
+            <notes>
+              RGB color space scRGB standardized as IEC 61966-2-2:2003.
+            </notes>
+            </value>
+            <value visibility="system" id="4">BT709
+            <notes>
+              RGB color space BT.709 standardized as Rec. ITU-R BT.709-5.
+            </notes>
+            </value>
+            <value visibility="system" id="5">BT2020
+            <notes>
+              RGB color space BT.2020 standardized as Rec. ITU-R BT.2020-1.
+            </notes>
+            </value>
+            <value visibility="system" id="6">DCI_P3
+            <notes>
+              RGB color space DCI-P3 standardized as SMPTE RP 431-2-2007.
+            </notes>
+            </value>
+            <value visibility="system" id="7">DISPLAY_P3
+            <notes>
+              RGB color space Display P3 based on SMPTE RP 431-2-2007 and IEC 61966-2.1:1999.
+            </notes>
+            </value>
+            <value visibility="system" id="8">NTSC_1953
+            <notes>
+              RGB color space NTSC, 1953 standard.
+            </notes>
+            </value>
+            <value visibility="system" id="9">SMPTE_C
+            <notes>
+              RGB color space SMPTE C.
+            </notes>
+            </value>
+            <value visibility="system" id="10">ADOBE_RGB
+            <notes>
+              RGB color space Adobe RGB (1998).
+            </notes>
+            </value>
+            <value visibility="system" id="11">PRO_PHOTO_RGB
+            <notes>
+              RGB color space ProPhoto RGB standardized as ROMM RGB ISO 22028-2:2013.
+            </notes>
+            </value>
+            <value visibility="system" id="12">ACES
+            <notes>
+              RGB color space ACES standardized as SMPTE ST 2065-1:2012.
+            </notes>
+            </value>
+            <value visibility="system" id="13">ACESCG
+            <notes>
+              RGB color space ACEScg standardized as Academy S-2014-004.
+            </notes>
+            </value>
+            <value visibility="system" id="14">CIE_XYZ
+            <notes>
+              XYZ color space CIE XYZ. This color space assumes standard illuminant D50 as its white
+              point.
+            </notes>
+            </value>
+            <value visibility="system" id="15">CIE_LAB
+            <notes>
+              Lab color space CIE L*a*b*. This color space uses CIE XYZ D50 as a profile conversion
+              space.
+            </notes>
+            </value>
+          </enum>
+          <description>
+            A list of all possible color space profiles supported by a camera device.
+          </description>
+          <details>
+            A color space profile is a combination of a color space, an image format, and a dynamic range
+            profile. If a camera does not support the
+            {@link android.hardware.camera2.CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES_DYNAMIC_RANGE_TEN_BIT}
+            capability, the dynamic range profile will always be
+            {@link android.hardware.camera2.params.DynamicRangeProfiles#STANDARD}. Camera clients can
+            use {@link android.hardware.camera2.params.SessionConfiguration#setColorSpace} to select
+            a color space.
+          </details>
+          <hal_details>
+            The array contains three entries per supported profile:
+
+            1) The supported color space.
+            2) An image format which can be used with this color space.
+            3) A bitmap of all compatible dynamic range profiles, if the device is HDR-capable.
+
+            The possible values for #1 are the positive values of the
+            ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_* enum, which is equivalent to
+            {@link android.graphics.ColorSpace.Named} and its ordinals. UNSPECIFIED should not be
+            used here.
+
+            The possible values for #2 consist of the public-facing image/pixel formats, found at
+            {@link android.graphics.ImageFormat} and {@link android.graphics.PixelFormat}. Each map
+            to a HAL pixel format except for {@link android.graphics.ImageFormat.JPEG},
+            {@link android.graphics.ImageFormat.HEIC}, and
+            {@link android.graphics.ImageFormat.DEPTH_JPEG}. Depth formats besides DEPTH_JPEG are
+            not applicable and should not be specified. If there are no constraints on the type of
+            image format a color space is compatible with, this can be
+            {@link android.graphics.ImageFormat.UNKNOWN}.
+
+            If the device is not HDR-capable, #3 should always be
+            ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_STANDARD. Otherwise, #3 should be a
+            bitmap of the compatible ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_* values.
+
+            For devices that support P3 color, it is highly recommended to advertise
+            {@link android.graphics.ColorSpace.Named.DISPLAY_P3}
+            unless the profile is specifically designed for playback in a theater environment
+            ({@link android.graphics.ColorSpace.Named.DCI_P3}).
+          </hal_details>
+        </entry>
       </static>
     </section>
     <section name="scaler">
diff --git a/camera/docs/metadata_helpers.py b/camera/docs/metadata_helpers.py
index 33515ea..f3d52a6 100644
--- a/camera/docs/metadata_helpers.py
+++ b/camera/docs/metadata_helpers.py
@@ -188,6 +188,7 @@
     "multiResolutionStreamConfigurationMap" : "MultiResolutionStreamConfigurations",
     "deviceStateSensorOrientationMap"  : "DeviceStateSensorOrientationMap",
     "dynamicRangeProfiles"   : "DynamicRangeProfiles",
+    "colorSpaceProfiles"     : "ColorSpaceProfiles",
   }
 
   if typeName not in typename_to_protobuftype:
diff --git a/camera/include/system/camera_metadata_tags.h b/camera/include/system/camera_metadata_tags.h
index 8079d79..b298f84 100644
--- a/camera/include/system/camera_metadata_tags.h
+++ b/camera/include/system/camera_metadata_tags.h
@@ -308,6 +308,8 @@
                                                       // enum[]       | ndk_public   | HIDL v3.8
     ANDROID_REQUEST_RECOMMENDED_TEN_BIT_DYNAMIC_RANGE_PROFILE,
                                                       // int64        | java_public  | HIDL v3.8
+    ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP,
+                                                      // enum[]       | ndk_public   | HIDL v3.9
     ANDROID_REQUEST_END,
 
     ANDROID_SCALER_CROP_REGION =                      // int32[]      | public       | HIDL v3.2
@@ -928,6 +930,7 @@
     ANDROID_REQUEST_AVAILABLE_CAPABILITIES_REMOSAIC_REPROCESSING    , // HIDL v3.6
     ANDROID_REQUEST_AVAILABLE_CAPABILITIES_DYNAMIC_RANGE_TEN_BIT    , // HIDL v3.8
     ANDROID_REQUEST_AVAILABLE_CAPABILITIES_STREAM_USE_CASE          , // HIDL v3.8
+    ANDROID_REQUEST_AVAILABLE_CAPABILITIES_COLOR_SPACE_PROFILES     , // HIDL v3.9
 } camera_metadata_enum_android_request_available_capabilities_t;
 
 // ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP
@@ -955,6 +958,28 @@
     ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_MAX         = 0x1000, // HIDL v3.8
 } camera_metadata_enum_android_request_available_dynamic_range_profiles_map_t;
 
+// ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP
+typedef enum camera_metadata_enum_android_request_available_color_space_profiles_map {
+    ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_UNSPECIFIED   = -1, // HIDL v3.9
+    ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_SRGB          = 0, // HIDL v3.9
+    ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_LINEAR_SRGB   = 1, // HIDL v3.9
+    ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_EXTENDED_SRGB = 2, // HIDL v3.9
+    ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_LINEAR_EXTENDED_SRGB
+                                                                      = 3, // HIDL v3.9
+    ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_BT709         = 4, // HIDL v3.9
+    ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_BT2020        = 5, // HIDL v3.9
+    ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_DCI_P3        = 6, // HIDL v3.9
+    ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_DISPLAY_P3    = 7, // HIDL v3.9
+    ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_NTSC_1953     = 8, // HIDL v3.9
+    ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_SMPTE_C       = 9, // HIDL v3.9
+    ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_ADOBE_RGB     = 10, // HIDL v3.9
+    ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_PRO_PHOTO_RGB = 11, // HIDL v3.9
+    ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_ACES          = 12, // HIDL v3.9
+    ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_ACESCG        = 13, // HIDL v3.9
+    ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_CIE_XYZ       = 14, // HIDL v3.9
+    ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_CIE_LAB       = 15, // HIDL v3.9
+} camera_metadata_enum_android_request_available_color_space_profiles_map_t;
+
 
 // ANDROID_SCALER_AVAILABLE_FORMATS
 typedef enum camera_metadata_enum_android_scaler_available_formats {
diff --git a/camera/src/camera_metadata_asserts.cpp b/camera/src/camera_metadata_asserts.cpp
index 599413a..2e23a9e 100644
--- a/camera/src/camera_metadata_asserts.cpp
+++ b/camera/src/camera_metadata_asserts.cpp
@@ -63,6 +63,7 @@
 #include <aidl/android/hardware/camera/metadata/RequestType.h>
 #include <aidl/android/hardware/camera/metadata/RequestAvailableCapabilities.h>
 #include <aidl/android/hardware/camera/metadata/RequestAvailableDynamicRangeProfilesMap.h>
+#include <aidl/android/hardware/camera/metadata/RequestAvailableColorSpaceProfilesMap.h>
 #include <aidl/android/hardware/camera/metadata/ScalerAvailableFormats.h>
 #include <aidl/android/hardware/camera/metadata/ScalerAvailableStreamConfigurations.h>
 #include <aidl/android/hardware/camera/metadata/ScalerCroppingType.h>
@@ -511,6 +512,8 @@
         == static_cast<int>(::aidl::android::hardware::camera::metadata::CameraMetadataTag::ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP));
 static_assert(static_cast<int>(ANDROID_REQUEST_RECOMMENDED_TEN_BIT_DYNAMIC_RANGE_PROFILE)
         == static_cast<int>(::aidl::android::hardware::camera::metadata::CameraMetadataTag::ANDROID_REQUEST_RECOMMENDED_TEN_BIT_DYNAMIC_RANGE_PROFILE));
+static_assert(static_cast<int>(ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP)
+        == static_cast<int>(::aidl::android::hardware::camera::metadata::CameraMetadataTag::ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP));
 static_assert(static_cast<int>(ANDROID_SCALER_CROP_REGION)
         == static_cast<int>(::aidl::android::hardware::camera::metadata::CameraMetadataTag::ANDROID_SCALER_CROP_REGION));
 static_assert(static_cast<int>(ANDROID_SCALER_AVAILABLE_FORMATS)
@@ -1226,6 +1229,8 @@
         == static_cast<int32_t>(::aidl::android::hardware::camera::metadata::RequestAvailableCapabilities::ANDROID_REQUEST_AVAILABLE_CAPABILITIES_DYNAMIC_RANGE_TEN_BIT));
 static_assert(static_cast<int32_t>(ANDROID_REQUEST_AVAILABLE_CAPABILITIES_STREAM_USE_CASE)
         == static_cast<int32_t>(::aidl::android::hardware::camera::metadata::RequestAvailableCapabilities::ANDROID_REQUEST_AVAILABLE_CAPABILITIES_STREAM_USE_CASE));
+static_assert(static_cast<int32_t>(ANDROID_REQUEST_AVAILABLE_CAPABILITIES_COLOR_SPACE_PROFILES)
+        == static_cast<int32_t>(::aidl::android::hardware::camera::metadata::RequestAvailableCapabilities::ANDROID_REQUEST_AVAILABLE_CAPABILITIES_COLOR_SPACE_PROFILES));
 
 static_assert(static_cast<int64_t>(ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_STANDARD)
         == static_cast<int64_t>(::aidl::android::hardware::camera::metadata::RequestAvailableDynamicRangeProfilesMap::ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_STANDARD));
@@ -1254,6 +1259,41 @@
 static_assert(static_cast<int64_t>(ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_MAX)
         == static_cast<int64_t>(::aidl::android::hardware::camera::metadata::RequestAvailableDynamicRangeProfilesMap::ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_MAX));
 
+static_assert(static_cast<int64_t>(ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_UNSPECIFIED)
+        == static_cast<int64_t>(::aidl::android::hardware::camera::metadata::RequestAvailableColorSpaceProfilesMap::ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_UNSPECIFIED));
+static_assert(static_cast<int64_t>(ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_SRGB)
+        == static_cast<int64_t>(::aidl::android::hardware::camera::metadata::RequestAvailableColorSpaceProfilesMap::ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_SRGB));
+static_assert(static_cast<int64_t>(ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_LINEAR_SRGB)
+        == static_cast<int64_t>(::aidl::android::hardware::camera::metadata::RequestAvailableColorSpaceProfilesMap::ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_LINEAR_SRGB));
+static_assert(static_cast<int64_t>(ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_EXTENDED_SRGB)
+        == static_cast<int64_t>(::aidl::android::hardware::camera::metadata::RequestAvailableColorSpaceProfilesMap::ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_EXTENDED_SRGB));
+static_assert(static_cast<int64_t>(ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_LINEAR_EXTENDED_SRGB)
+        == static_cast<int64_t>(::aidl::android::hardware::camera::metadata::RequestAvailableColorSpaceProfilesMap::ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_LINEAR_EXTENDED_SRGB));
+static_assert(static_cast<int64_t>(ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_BT709)
+        == static_cast<int64_t>(::aidl::android::hardware::camera::metadata::RequestAvailableColorSpaceProfilesMap::ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_BT709));
+static_assert(static_cast<int64_t>(ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_BT2020)
+        == static_cast<int64_t>(::aidl::android::hardware::camera::metadata::RequestAvailableColorSpaceProfilesMap::ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_BT2020));
+static_assert(static_cast<int64_t>(ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_DCI_P3)
+        == static_cast<int64_t>(::aidl::android::hardware::camera::metadata::RequestAvailableColorSpaceProfilesMap::ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_DCI_P3));
+static_assert(static_cast<int64_t>(ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_DISPLAY_P3)
+        == static_cast<int64_t>(::aidl::android::hardware::camera::metadata::RequestAvailableColorSpaceProfilesMap::ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_DISPLAY_P3));
+static_assert(static_cast<int64_t>(ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_NTSC_1953)
+        == static_cast<int64_t>(::aidl::android::hardware::camera::metadata::RequestAvailableColorSpaceProfilesMap::ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_NTSC_1953));
+static_assert(static_cast<int64_t>(ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_SMPTE_C)
+        == static_cast<int64_t>(::aidl::android::hardware::camera::metadata::RequestAvailableColorSpaceProfilesMap::ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_SMPTE_C));
+static_assert(static_cast<int64_t>(ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_ADOBE_RGB)
+        == static_cast<int64_t>(::aidl::android::hardware::camera::metadata::RequestAvailableColorSpaceProfilesMap::ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_ADOBE_RGB));
+static_assert(static_cast<int64_t>(ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_PRO_PHOTO_RGB)
+        == static_cast<int64_t>(::aidl::android::hardware::camera::metadata::RequestAvailableColorSpaceProfilesMap::ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_PRO_PHOTO_RGB));
+static_assert(static_cast<int64_t>(ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_ACES)
+        == static_cast<int64_t>(::aidl::android::hardware::camera::metadata::RequestAvailableColorSpaceProfilesMap::ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_ACES));
+static_assert(static_cast<int64_t>(ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_ACESCG)
+        == static_cast<int64_t>(::aidl::android::hardware::camera::metadata::RequestAvailableColorSpaceProfilesMap::ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_ACESCG));
+static_assert(static_cast<int64_t>(ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_CIE_XYZ)
+        == static_cast<int64_t>(::aidl::android::hardware::camera::metadata::RequestAvailableColorSpaceProfilesMap::ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_CIE_XYZ));
+static_assert(static_cast<int64_t>(ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_CIE_LAB)
+        == static_cast<int64_t>(::aidl::android::hardware::camera::metadata::RequestAvailableColorSpaceProfilesMap::ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_CIE_LAB));
+
 static_assert(static_cast<int32_t>(ANDROID_SCALER_AVAILABLE_FORMATS_RAW16)
         == static_cast<int32_t>(::aidl::android::hardware::camera::metadata::ScalerAvailableFormats::ANDROID_SCALER_AVAILABLE_FORMATS_RAW16));
 static_assert(static_cast<int32_t>(ANDROID_SCALER_AVAILABLE_FORMATS_RAW_OPAQUE)
diff --git a/camera/src/camera_metadata_tag_info.c b/camera/src/camera_metadata_tag_info.c
index 1ca265a..f56290e 100644
--- a/camera/src/camera_metadata_tag_info.c
+++ b/camera/src/camera_metadata_tag_info.c
@@ -468,6 +468,9 @@
     [ ANDROID_REQUEST_RECOMMENDED_TEN_BIT_DYNAMIC_RANGE_PROFILE - ANDROID_REQUEST_START ] =
     { "recommendedTenBitDynamicRangeProfile",
                                         TYPE_INT64  },
+    [ ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP - ANDROID_REQUEST_START ] =
+    { "availableColorSpaceProfilesMap",
+                                        TYPE_INT64  },
 };
 
 static tag_info_t android_scaler[ANDROID_SCALER_END -
@@ -2277,6 +2280,10 @@
                     msg = "STREAM_USE_CASE";
                     ret = 0;
                     break;
+                case ANDROID_REQUEST_AVAILABLE_CAPABILITIES_COLOR_SPACE_PROFILES:
+                    msg = "COLOR_SPACE_PROFILES";
+                    ret = 0;
+                    break;
                 default:
                     msg = "error: enum value out of range";
             }
@@ -2362,6 +2369,81 @@
         case ANDROID_REQUEST_RECOMMENDED_TEN_BIT_DYNAMIC_RANGE_PROFILE: {
             break;
         }
+        case ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP: {
+            switch (value) {
+                case ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_UNSPECIFIED:
+                    msg = "UNSPECIFIED";
+                    ret = 0;
+                    break;
+                case ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_SRGB:
+                    msg = "SRGB";
+                    ret = 0;
+                    break;
+                case ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_LINEAR_SRGB:
+                    msg = "LINEAR_SRGB";
+                    ret = 0;
+                    break;
+                case ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_EXTENDED_SRGB:
+                    msg = "EXTENDED_SRGB";
+                    ret = 0;
+                    break;
+                case ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_LINEAR_EXTENDED_SRGB:
+                    msg = "LINEAR_EXTENDED_SRGB";
+                    ret = 0;
+                    break;
+                case ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_BT709:
+                    msg = "BT709";
+                    ret = 0;
+                    break;
+                case ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_BT2020:
+                    msg = "BT2020";
+                    ret = 0;
+                    break;
+                case ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_DCI_P3:
+                    msg = "DCI_P3";
+                    ret = 0;
+                    break;
+                case ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_DISPLAY_P3:
+                    msg = "DISPLAY_P3";
+                    ret = 0;
+                    break;
+                case ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_NTSC_1953:
+                    msg = "NTSC_1953";
+                    ret = 0;
+                    break;
+                case ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_SMPTE_C:
+                    msg = "SMPTE_C";
+                    ret = 0;
+                    break;
+                case ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_ADOBE_RGB:
+                    msg = "ADOBE_RGB";
+                    ret = 0;
+                    break;
+                case ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_PRO_PHOTO_RGB:
+                    msg = "PRO_PHOTO_RGB";
+                    ret = 0;
+                    break;
+                case ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_ACES:
+                    msg = "ACES";
+                    ret = 0;
+                    break;
+                case ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_ACESCG:
+                    msg = "ACESCG";
+                    ret = 0;
+                    break;
+                case ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_CIE_XYZ:
+                    msg = "CIE_XYZ";
+                    ret = 0;
+                    break;
+                case ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_CIE_LAB:
+                    msg = "CIE_LAB";
+                    ret = 0;
+                    break;
+                default:
+                    msg = "error: enum value out of range";
+            }
+            break;
+        }
 
         case ANDROID_SCALER_CROP_REGION: {
             break;
@@ -5287,6 +5369,12 @@
                     ret = 0;
                     break;
                 }
+                enumName = "COLOR_SPACE_PROFILES";
+                if (strncmp(name, enumName, size) == 0) {
+                    *value = ANDROID_REQUEST_AVAILABLE_CAPABILITIES_COLOR_SPACE_PROFILES;
+                    ret = 0;
+                    break;
+                }
             break;
         }
         case ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS: {
@@ -5391,6 +5479,111 @@
         case ANDROID_REQUEST_RECOMMENDED_TEN_BIT_DYNAMIC_RANGE_PROFILE: {
             break;
         }
+        case ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP: {
+                enumName = "UNSPECIFIED";
+                if (strncmp(name, enumName, size) == 0) {
+                    *value = ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_UNSPECIFIED;
+                    ret = 0;
+                    break;
+                }
+                enumName = "SRGB";
+                if (strncmp(name, enumName, size) == 0) {
+                    *value = ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_SRGB;
+                    ret = 0;
+                    break;
+                }
+                enumName = "LINEAR_SRGB";
+                if (strncmp(name, enumName, size) == 0) {
+                    *value = ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_LINEAR_SRGB;
+                    ret = 0;
+                    break;
+                }
+                enumName = "EXTENDED_SRGB";
+                if (strncmp(name, enumName, size) == 0) {
+                    *value = ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_EXTENDED_SRGB;
+                    ret = 0;
+                    break;
+                }
+                enumName = "LINEAR_EXTENDED_SRGB";
+                if (strncmp(name, enumName, size) == 0) {
+                    *value = ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_LINEAR_EXTENDED_SRGB;
+                    ret = 0;
+                    break;
+                }
+                enumName = "BT709";
+                if (strncmp(name, enumName, size) == 0) {
+                    *value = ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_BT709;
+                    ret = 0;
+                    break;
+                }
+                enumName = "BT2020";
+                if (strncmp(name, enumName, size) == 0) {
+                    *value = ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_BT2020;
+                    ret = 0;
+                    break;
+                }
+                enumName = "DCI_P3";
+                if (strncmp(name, enumName, size) == 0) {
+                    *value = ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_DCI_P3;
+                    ret = 0;
+                    break;
+                }
+                enumName = "DISPLAY_P3";
+                if (strncmp(name, enumName, size) == 0) {
+                    *value = ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_DISPLAY_P3;
+                    ret = 0;
+                    break;
+                }
+                enumName = "NTSC_1953";
+                if (strncmp(name, enumName, size) == 0) {
+                    *value = ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_NTSC_1953;
+                    ret = 0;
+                    break;
+                }
+                enumName = "SMPTE_C";
+                if (strncmp(name, enumName, size) == 0) {
+                    *value = ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_SMPTE_C;
+                    ret = 0;
+                    break;
+                }
+                enumName = "ADOBE_RGB";
+                if (strncmp(name, enumName, size) == 0) {
+                    *value = ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_ADOBE_RGB;
+                    ret = 0;
+                    break;
+                }
+                enumName = "PRO_PHOTO_RGB";
+                if (strncmp(name, enumName, size) == 0) {
+                    *value = ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_PRO_PHOTO_RGB;
+                    ret = 0;
+                    break;
+                }
+                enumName = "ACES";
+                if (strncmp(name, enumName, size) == 0) {
+                    *value = ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_ACES;
+                    ret = 0;
+                    break;
+                }
+                enumName = "ACESCG";
+                if (strncmp(name, enumName, size) == 0) {
+                    *value = ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_ACESCG;
+                    ret = 0;
+                    break;
+                }
+                enumName = "CIE_XYZ";
+                if (strncmp(name, enumName, size) == 0) {
+                    *value = ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_CIE_XYZ;
+                    ret = 0;
+                    break;
+                }
+                enumName = "CIE_LAB";
+                if (strncmp(name, enumName, size) == 0) {
+                    *value = ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_CIE_LAB;
+                    ret = 0;
+                    break;
+                }
+            break;
+        }
 
         case ANDROID_SCALER_CROP_REGION: {
             break;