OSDN Git Service

Merge "Camera: Add available physical camera request keys"
authorShuzhen Wang <shuzhenwang@google.com>
Tue, 23 Jan 2018 00:36:16 +0000 (00:36 +0000)
committerAndroid (Google) Code Review <android-gerrit@google.com>
Tue, 23 Jan 2018 00:36:16 +0000 (00:36 +0000)
1  2 
camera/docs/docs.html
camera/docs/metadata_definitions.xml
camera/include/system/camera_metadata_tags.h
camera/src/camera_metadata_tag_info.c

diff --combined camera/docs/docs.html
              ><a href="#static_android.request.availableCharacteristicsKeys">android.request.availableCharacteristicsKeys</a></li>
              <li
              ><a href="#static_android.request.availableSessionKeys">android.request.availableSessionKeys</a></li>
+             <li
+             ><a href="#static_android.request.availablePhysicalCameraRequestKeys">android.request.availablePhysicalCameraRequestKeys</a></li>
            </ul>
          </li>
          <li>
              ><a href="#controls_android.statistics.hotPixelMapMode">android.statistics.hotPixelMapMode</a></li>
              <li
              ><a href="#controls_android.statistics.lensShadingMapMode">android.statistics.lensShadingMapMode</a></li>
 +            <li
 +            ><a href="#controls_android.statistics.oisDataMode">android.statistics.oisDataMode</a></li>
            </ul>
          </li>
          <li>
              ><a href="#static_android.statistics.info.availableHotPixelMapModes">android.statistics.info.availableHotPixelMapModes</a></li>
              <li
              ><a href="#static_android.statistics.info.availableLensShadingMapModes">android.statistics.info.availableLensShadingMapModes</a></li>
 +            <li
 +            ><a href="#static_android.statistics.info.availableOisDataModes">android.statistics.info.availableOisDataModes</a></li>
  
            </ul>
          </li>
              ><a href="#dynamic_android.statistics.hotPixelMap">android.statistics.hotPixelMap</a></li>
              <li
              ><a href="#dynamic_android.statistics.lensShadingMapMode">android.statistics.lensShadingMapMode</a></li>
 +            <li
 +            ><a href="#dynamic_android.statistics.oisDataMode">android.statistics.oisDataMode</a></li>
 +            <li
 +            ><a href="#dynamic_android.statistics.oisTimestamps">android.statistics.oisTimestamps</a></li>
 +            <li
 +            ><a href="#dynamic_android.statistics.oisXShifts">android.statistics.oisXShifts</a></li>
 +            <li
 +            ><a href="#dynamic_android.statistics.oisYShifts">android.statistics.oisYShifts</a></li>
            </ul>
          </li>
        </ul> <!-- toc_section -->
            <tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
             <!-- end of entry -->
          
+                 
+           <tr class="entry" id="static_android.request.availablePhysicalCameraRequestKeys">
+             <td class="entry_name
+              " rowspan="5">
+               android.<wbr/>request.<wbr/>available<wbr/>Physical<wbr/>Camera<wbr/>Request<wbr/>Keys
+             </td>
+             <td class="entry_type">
+                 <span class="entry_type_name">int32</span>
+                 <span class="entry_type_container">x</span>
+                 <span class="entry_type_array">
+                   n
+                 </span>
+               <span class="entry_type_visibility"> [hidden]</span>
+               <span class="entry_type_hwlevel">[limited] </span>
+             </td> <!-- entry_type -->
+             <td class="entry_description">
+               <p>A subset of the available request keys that can be overriden for
+ physical devices backing a logical multi-camera.<wbr/></p>
+             </td>
+             <td class="entry_units">
+             </td>
+             <td class="entry_range">
+             </td>
+             <td class="entry_hal_version">
+               <p>3.<wbr/>3</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>This is a subset of <a href="#static_android.request.availableRequestKeys">android.<wbr/>request.<wbr/>available<wbr/>Request<wbr/>Keys</a> which contains a list
+ of keys that can be overriden using <a href="https://developer.android.com/reference/CaptureRequest/Builder.html#setPhysicalCameraKey">Builder#setPhysicalCameraKey</a>.<wbr/>
+ The respective value of such request key can be obtained by calling
+ <a href="https://developer.android.com/reference/CaptureRequest/Builder.html#getPhysicalCameraKey">Builder#getPhysicalCameraKey</a>.<wbr/> Capture requests that contain
+ individual physical device requests must be built via
+ <a href="https://developer.android.com/reference/android/hardware/camera2/CameraDevice.html#createCaptureRequest(int,">Set)</a>.<wbr/>
+ Such extended capture requests can be passed only to
+ <a href="https://developer.android.com/reference/CameraCaptureSession.html#capture">CameraCaptureSession#capture</a> or <a href="https://developer.android.com/reference/CameraCaptureSession.html#captureBurst">CameraCaptureSession#captureBurst</a> and
+ not to <a href="https://developer.android.com/reference/CameraCaptureSession.html#setRepeatingRequest">CameraCaptureSession#setRepeatingRequest</a> or
+ <a href="https://developer.android.com/reference/CameraCaptureSession.html#setRepeatingBurst">CameraCaptureSession#setRepeatingBurst</a>.<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>Vendor tags can be listed here.<wbr/> Vendor tag metadata should also
+ use the extensions C api (refer to
+ android.<wbr/>hardware.<wbr/>camera.<wbr/>device.<wbr/>V3_<wbr/>4.<wbr/>Capture<wbr/>Request.<wbr/>physical<wbr/>Camera<wbr/>Settings for more
+ details).<wbr/></p>
+ <p>Setting/<wbr/>getting vendor tags will be checked against the metadata
+ vendor extensions API and not against this field.<wbr/></p>
+ <p>The HAL must not consume any request tags in the session parameters that
+ are not listed either here or in the vendor tag list.<wbr/></p>
+ <p>The public camera2 API will always make the vendor tags visible
+ via
+ <a href="https://developer.android.com/reference/android/hardware/camera2/CameraCharacteristics.html#getAvailablePhysicalCameraRequestKeys">CameraCharacteristics#getAvailablePhysicalCameraRequestKeys</a>.<wbr/></p>
+             </td>
+           </tr>
+           <tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
+            <!-- end of entry -->
+         
          
  
        <!-- end of kind -->
@@@ -24033,69 -24105,6 +24117,69 @@@ the output result metadata.<wbr/></p
            <tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
             <!-- end of entry -->
          
 +                
 +          <tr class="entry" id="controls_android.statistics.oisDataMode">
 +            <td class="entry_name
 +             " rowspan="3">
 +              android.<wbr/>statistics.<wbr/>ois<wbr/>Data<wbr/>Mode
 +            </td>
 +            <td class="entry_type">
 +                <span class="entry_type_name entry_type_name_enum">byte</span>
 +
 +              <span class="entry_type_visibility"> [public]</span>
 +
 +
 +
 +
 +
 +                <ul class="entry_type_enum">
 +                  <li>
 +                    <span class="entry_type_enum_name">OFF (v3.3)</span>
 +                    <span class="entry_type_enum_notes"><p>Do not include OIS data in the capture result.<wbr/></p></span>
 +                  </li>
 +                  <li>
 +                    <span class="entry_type_enum_name">ON (v3.3)</span>
 +                    <span class="entry_type_enum_notes"><p>Include OIS data in the capture result.<wbr/></p></span>
 +                  </li>
 +                </ul>
 +
 +            </td> <!-- entry_type -->
 +
 +            <td class="entry_description">
 +              <p>Whether the camera device will output the OIS data in output
 +result metadata.<wbr/></p>
 +            </td>
 +
 +            <td class="entry_units">
 +            </td>
 +
 +            <td class="entry_range">
 +              <p>android.<wbr/>Statistics.<wbr/>info.<wbr/>available<wbr/>Ois<wbr/>Data<wbr/>Modes</p>
 +            </td>
 +
 +            <td class="entry_hal_version">
 +              <p>3.<wbr/>3</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>When set to ON,<wbr/>
 +<a href="#dynamic_android.statistics.oisTimestamps">android.<wbr/>statistics.<wbr/>ois<wbr/>Timestamps</a>,<wbr/> android.<wbr/>statistics.<wbr/>ois<wbr/>Shift<wbr/>Pixel<wbr/>X,<wbr/>
 +android.<wbr/>statistics.<wbr/>ois<wbr/>Shift<wbr/>Pixel<wbr/>Y will provide OIS data in the output result metadata.<wbr/></p>
 +            </td>
 +          </tr>
 +
 +
 +          <tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
 +           <!-- end of entry -->
 +        
          
  
        <!-- end of kind -->
@@@ -24540,63 -24549,6 +24624,63 @@@ LEGACY mode devices will always only su
            <tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
             <!-- end of entry -->
          
 +                
 +          <tr class="entry" id="static_android.statistics.info.availableOisDataModes">
 +            <td class="entry_name
 +             " rowspan="3">
 +              android.<wbr/>statistics.<wbr/>info.<wbr/>available<wbr/>Ois<wbr/>Data<wbr/>Modes
 +            </td>
 +            <td class="entry_type">
 +                <span class="entry_type_name">byte</span>
 +                <span class="entry_type_container">x</span>
 +
 +                <span class="entry_type_array">
 +                  n
 +                </span>
 +              <span class="entry_type_visibility"> [public as enumList]</span>
 +
 +
 +
 +
 +                <div class="entry_type_notes">list of enums</div>
 +
 +
 +            </td> <!-- entry_type -->
 +
 +            <td class="entry_description">
 +              <p>List of OIS data output modes for <a href="#controls_android.statistics.oisDataMode">android.<wbr/>statistics.<wbr/>ois<wbr/>Data<wbr/>Mode</a> that
 +are supported by this camera device.<wbr/></p>
 +            </td>
 +
 +            <td class="entry_units">
 +            </td>
 +
 +            <td class="entry_range">
 +              <p>Any value listed in <a href="#controls_android.statistics.oisDataMode">android.<wbr/>statistics.<wbr/>ois<wbr/>Data<wbr/>Mode</a></p>
 +            </td>
 +
 +            <td class="entry_hal_version">
 +              <p>3.<wbr/>3</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>If no OIS data output is available for this camera device,<wbr/> this key will
 +contain only OFF.<wbr/></p>
 +            </td>
 +          </tr>
 +
 +
 +          <tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
 +           <!-- end of entry -->
 +        
          
          
  
@@@ -25907,242 -25859,6 +25991,242 @@@ the output result metadata.<wbr/></p
            <tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
             <!-- end of entry -->
          
 +                
 +          <tr class="entry" id="dynamic_android.statistics.oisDataMode">
 +            <td class="entry_name
 +             " rowspan="3">
 +              android.<wbr/>statistics.<wbr/>ois<wbr/>Data<wbr/>Mode
 +            </td>
 +            <td class="entry_type">
 +                <span class="entry_type_name entry_type_name_enum">byte</span>
 +
 +              <span class="entry_type_visibility"> [public]</span>
 +
 +
 +
 +
 +
 +                <ul class="entry_type_enum">
 +                  <li>
 +                    <span class="entry_type_enum_name">OFF (v3.3)</span>
 +                    <span class="entry_type_enum_notes"><p>Do not include OIS data in the capture result.<wbr/></p></span>
 +                  </li>
 +                  <li>
 +                    <span class="entry_type_enum_name">ON (v3.3)</span>
 +                    <span class="entry_type_enum_notes"><p>Include OIS data in the capture result.<wbr/></p></span>
 +                  </li>
 +                </ul>
 +
 +            </td> <!-- entry_type -->
 +
 +            <td class="entry_description">
 +              <p>Whether the camera device will output the OIS data in output
 +result metadata.<wbr/></p>
 +            </td>
 +
 +            <td class="entry_units">
 +            </td>
 +
 +            <td class="entry_range">
 +              <p>android.<wbr/>Statistics.<wbr/>info.<wbr/>available<wbr/>Ois<wbr/>Data<wbr/>Modes</p>
 +            </td>
 +
 +            <td class="entry_hal_version">
 +              <p>3.<wbr/>3</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>When set to ON,<wbr/>
 +<a href="#dynamic_android.statistics.oisTimestamps">android.<wbr/>statistics.<wbr/>ois<wbr/>Timestamps</a>,<wbr/> android.<wbr/>statistics.<wbr/>ois<wbr/>Shift<wbr/>Pixel<wbr/>X,<wbr/>
 +android.<wbr/>statistics.<wbr/>ois<wbr/>Shift<wbr/>Pixel<wbr/>Y will provide OIS data in the output result metadata.<wbr/></p>
 +            </td>
 +          </tr>
 +
 +
 +          <tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
 +           <!-- end of entry -->
 +        
 +                
 +          <tr class="entry" id="dynamic_android.statistics.oisTimestamps">
 +            <td class="entry_name
 +             " rowspan="3">
 +              android.<wbr/>statistics.<wbr/>ois<wbr/>Timestamps
 +            </td>
 +            <td class="entry_type">
 +                <span class="entry_type_name">int64</span>
 +                <span class="entry_type_container">x</span>
 +
 +                <span class="entry_type_array">
 +                  n
 +                </span>
 +              <span class="entry_type_visibility"> [public]</span>
 +
 +
 +
 +
 +
 +
 +            </td> <!-- entry_type -->
 +
 +            <td class="entry_description">
 +              <p>An array of timestamps of OIS samples,<wbr/> in nanoseconds.<wbr/></p>
 +            </td>
 +
 +            <td class="entry_units">
 +              nanoseconds
 +            </td>
 +
 +            <td class="entry_range">
 +            </td>
 +
 +            <td class="entry_hal_version">
 +              <p>3.<wbr/>3</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>The array contains the timestamps of OIS samples.<wbr/> The timestamps are in the same
 +timebase as and comparable to <a href="#dynamic_android.sensor.timestamp">android.<wbr/>sensor.<wbr/>timestamp</a>.<wbr/></p>
 +            </td>
 +          </tr>
 +
 +
 +          <tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
 +           <!-- end of entry -->
 +        
 +                
 +          <tr class="entry" id="dynamic_android.statistics.oisXShifts">
 +            <td class="entry_name
 +             " rowspan="3">
 +              android.<wbr/>statistics.<wbr/>ois<wbr/>XShifts
 +            </td>
 +            <td class="entry_type">
 +                <span class="entry_type_name">float</span>
 +                <span class="entry_type_container">x</span>
 +
 +                <span class="entry_type_array">
 +                  n
 +                </span>
 +              <span class="entry_type_visibility"> [public]</span>
 +
 +
 +
 +
 +
 +
 +            </td> <!-- entry_type -->
 +
 +            <td class="entry_description">
 +              <p>An array of shifts of OIS samples,<wbr/> in x direction.<wbr/></p>
 +            </td>
 +
 +            <td class="entry_units">
 +              Pixels in active array.<wbr/>
 +            </td>
 +
 +            <td class="entry_range">
 +            </td>
 +
 +            <td class="entry_hal_version">
 +              <p>3.<wbr/>3</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>The array contains the amount of shifts in x direction,<wbr/> in pixels,<wbr/> based on OIS samples.<wbr/>
 +A positive value is a shift from left to right in active array coordinate system.<wbr/> For
 +example,<wbr/> if the optical center is (1000,<wbr/> 500) in active array coordinates,<wbr/> an shift of
 +(3,<wbr/> 0) puts the new optical center at (1003,<wbr/> 500).<wbr/></p>
 +<p>The number of shifts must match the number of timestamps in
 +<a href="#dynamic_android.statistics.oisTimestamps">android.<wbr/>statistics.<wbr/>ois<wbr/>Timestamps</a>.<wbr/></p>
 +            </td>
 +          </tr>
 +
 +
 +          <tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
 +           <!-- end of entry -->
 +        
 +                
 +          <tr class="entry" id="dynamic_android.statistics.oisYShifts">
 +            <td class="entry_name
 +             " rowspan="3">
 +              android.<wbr/>statistics.<wbr/>ois<wbr/>YShifts
 +            </td>
 +            <td class="entry_type">
 +                <span class="entry_type_name">float</span>
 +                <span class="entry_type_container">x</span>
 +
 +                <span class="entry_type_array">
 +                  n
 +                </span>
 +              <span class="entry_type_visibility"> [public]</span>
 +
 +
 +
 +
 +
 +
 +            </td> <!-- entry_type -->
 +
 +            <td class="entry_description">
 +              <p>An array of shifts of OIS samples,<wbr/> in y direction.<wbr/></p>
 +            </td>
 +
 +            <td class="entry_units">
 +              Pixels in active array.<wbr/>
 +            </td>
 +
 +            <td class="entry_range">
 +            </td>
 +
 +            <td class="entry_hal_version">
 +              <p>3.<wbr/>3</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>The array contains the amount of shifts in y direction,<wbr/> in pixels,<wbr/> based on OIS samples.<wbr/>
 +A positive value is a shift from top to bottom in active array coordinate system.<wbr/> For
 +example,<wbr/> if the optical center is (1000,<wbr/> 500) in active array coordinates,<wbr/> an shift of
 +(0,<wbr/> 5) puts the new optical center at (1000,<wbr/> 505).<wbr/></p>
 +<p>The number of shifts must match the number of timestamps in
 +<a href="#dynamic_android.statistics.oisTimestamps">android.<wbr/>statistics.<wbr/>ois<wbr/>Timestamps</a>.<wbr/></p>
 +            </td>
 +          </tr>
 +
 +
 +          <tr class="entry_spacer"><td class="entry_spacer" colspan="7"></td></tr>
 +           <!-- end of entry -->
 +        
          
  
        <!-- end of kind -->
@@@ -27862,27 -27578,6 +27946,27 @@@ FULL-level capabilities.<wbr/></p
    <code>RAW</code>)</li>
  </ul></span>
                    </li>
 +                  <li>
 +                    <span class="entry_type_enum_name">EXTERNAL (v3.3)</span>
 +                    <span class="entry_type_enum_notes"><p>This camera device is backed by an external camera connected to this Android device.<wbr/></p>
 +<p>The device has capability identical to a LIMITED level device,<wbr/> with the following
 +exceptions:</p>
 +<ul>
 +<li>The device may not report lens/<wbr/>sensor related information such as<ul>
 +<li><a href="#controls_android.lens.focalLength">android.<wbr/>lens.<wbr/>focal<wbr/>Length</a></li>
 +<li><a href="#static_android.lens.info.hyperfocalDistance">android.<wbr/>lens.<wbr/>info.<wbr/>hyperfocal<wbr/>Distance</a></li>
 +<li><a href="#static_android.sensor.info.physicalSize">android.<wbr/>sensor.<wbr/>info.<wbr/>physical<wbr/>Size</a></li>
 +<li><a href="#static_android.sensor.info.whiteLevel">android.<wbr/>sensor.<wbr/>info.<wbr/>white<wbr/>Level</a></li>
 +<li><a href="#static_android.sensor.blackLevelPattern">android.<wbr/>sensor.<wbr/>black<wbr/>Level<wbr/>Pattern</a></li>
 +<li><a href="#static_android.sensor.info.colorFilterArrangement">android.<wbr/>sensor.<wbr/>info.<wbr/>color<wbr/>Filter<wbr/>Arrangement</a></li>
 +<li><a href="#dynamic_android.sensor.rollingShutterSkew">android.<wbr/>sensor.<wbr/>rolling<wbr/>Shutter<wbr/>Skew</a></li>
 +</ul>
 +</li>
 +<li>The device will report 0 for <a href="#static_android.sensor.orientation">android.<wbr/>sensor.<wbr/>orientation</a></li>
 +<li>The device has less guarantee on stable framerate,<wbr/> as the framerate partly depends
 +  on the external camera being used.<wbr/></li>
 +</ul></span>
 +                  </li>
                  </ul>
  
              </td> <!-- entry_type -->
@@@ -27971,9 -27666,6 +28055,9 @@@ superset of the previous level,<wbr/> a
  <p>Camera HAL3+ must not implement LEGACY mode.<wbr/> It is there for backwards compatibility in
  the <code>android.<wbr/>hardware.<wbr/>camera2</code> user-facing API only on legacy HALv1 devices,<wbr/> and is
  implemented by the camera framework code.<wbr/></p>
 +<p>EXTERNAL level devices have lower peformance bar in CTS since the peformance might depend
 +on the external camera being used and is not fully controlled by the device manufacturer.<wbr/>
 +The ITS test suite is exempted for the same reason.<wbr/></p>
              </td>
            </tr>
  
@@@ -5418,6 -5418,42 +5418,42 @@@ xsi:schemaLocation="http://schemas.andr
            via
            {@link android.hardware.camera2.CameraCharacteristics#getAvailableSessionKeys}.
            </hal_details>
+         </entry>
+         <entry name="availablePhysicalCameraRequestKeys" type="int32" visibility="hidden"
+                container="array" hwlevel="limited" hal_version="3.3">
+           <array>
+             <size>n</size>
+           </array>
+           <description>A subset of the available request keys that can be overriden for
+           physical devices backing a logical multi-camera.</description>
+           <details>
+           This is a subset of android.request.availableRequestKeys which contains a list
+           of keys that can be overriden using {@link CaptureRequest.Builder#setPhysicalCameraKey}.
+           The respective value of such request key can be obtained by calling
+           {@link CaptureRequest.Builder#getPhysicalCameraKey}. Capture requests that contain
+           individual physical device requests must be built via
+           {@link android.hardware.camera2.CameraDevice#createCaptureRequest(int, Set)}.
+           Such extended capture requests can be passed only to
+           {@link CameraCaptureSession#capture} or {@link CameraCaptureSession#captureBurst} and
+           not to {@link CameraCaptureSession#setRepeatingRequest} or
+           {@link CameraCaptureSession#setRepeatingBurst}.
+           </details>
+           <hal_details>
+           Vendor tags can be listed here. Vendor tag metadata should also
+           use the extensions C api (refer to
+           android.hardware.camera.device.V3_4.CaptureRequest.physicalCameraSettings for more
+           details).
+           Setting/getting vendor tags will be checked against the metadata
+           vendor extensions API and not against this field.
+           The HAL must not consume any request tags in the session parameters that
+           are not listed either here or in the vendor tag list.
+           The public camera2 API will always make the vendor tags visible
+           via
+           {@link android.hardware.camera2.CameraCharacteristics#getAvailablePhysicalCameraRequestKeys}.
+           </hal_details>
          </entry>
        </static>
      </section>
              LEGACY mode devices will always only support OFF.
              </details>
            </entry>
 +          <entry name="availableOisDataModes" type="byte" visibility="public"
 +                 type_notes="list of enums" container="array" typedef="enumList" hal_version="3.3">
 +            <array>
 +              <size>n</size>
 +            </array>
 +            <description>
 +            List of OIS data output modes for android.statistics.oisDataMode that
 +            are supported by this camera device.
 +            </description>
 +            <range>Any value listed in android.statistics.oisDataMode</range>
 +            <details>
 +            If no OIS data output is available for this camera device, this key will
 +            contain only OFF.
 +            </details>
 +          </entry>
          </namespace>
        </static>
        <dynamic>
          <clone entry="android.statistics.lensShadingMapMode" kind="controls">
          </clone>
        </dynamic>
 +      <controls>
 +        <entry name="oisDataMode" type="byte" visibility="public" enum="true" hal_version="3.3">
 +          <enum>
 +            <value>OFF
 +            <notes>Do not include OIS data in the capture result.</notes></value>
 +            <value>ON
 +            <notes>Include OIS data in the capture result.</notes></value>
 +          </enum>
 +          <description>Whether the camera device will output the OIS data in output
 +          result metadata.</description>
 +          <range>android.Statistics.info.availableOisDataModes</range>
 +          <details>When set to ON,
 +          android.statistics.oisTimestamps, android.statistics.oisShiftPixelX,
 +          android.statistics.oisShiftPixelY will provide OIS data in the output result metadata.
 +          </details>
 +        </entry>
 +      </controls>
 +      <dynamic>
 +        <clone entry="android.statistics.oisDataMode" kind="controls">
 +        </clone>
 +        <entry name="oisTimestamps" type="int64" visibility="public" container="array" hal_version="3.3">
 +          <array>
 +            <size>n</size>
 +          </array>
 +          <description>
 +          An array of timestamps of OIS samples, in nanoseconds.
 +          </description>
 +          <units>nanoseconds</units>
 +          <details>
 +          The array contains the timestamps of OIS samples. The timestamps are in the same
 +          timebase as and comparable to android.sensor.timestamp.
 +          </details>
 +        </entry>
 +        <entry name="oisXShifts" type="float" visibility="public" container="array" hal_version="3.3">
 +          <array>
 +            <size>n</size>
 +          </array>
 +          <description>
 +          An array of shifts of OIS samples, in x direction.
 +          </description>
 +          <units>Pixels in active array.</units>
 +          <details>
 +          The array contains the amount of shifts in x direction, in pixels, based on OIS samples.
 +          A positive value is a shift from left to right in active array coordinate system. For
 +          example, if the optical center is (1000, 500) in active array coordinates, an shift of
 +          (3, 0) puts the new optical center at (1003, 500).
 +
 +          The number of shifts must match the number of timestamps in
 +          android.statistics.oisTimestamps.
 +          </details>
 +        </entry>
 +        <entry name="oisYShifts" type="float" visibility="public" container="array" hal_version="3.3">
 +          <array>
 +            <size>n</size>
 +          </array>
 +          <description>
 +          An array of shifts of OIS samples, in y direction.
 +          </description>
 +          <units>Pixels in active array.</units>
 +          <details>
 +          The array contains the amount of shifts in y direction, in pixels, based on OIS samples.
 +          A positive value is a shift from top to bottom in active array coordinate system. For
 +          example, if the optical center is (1000, 500) in active array coordinates, an shift of
 +          (0, 5) puts the new optical center at (1000, 505).
 +
 +          The number of shifts must match the number of timestamps in
 +          android.statistics.oisTimestamps.
 +          </details>
 +        </entry>
 +      </dynamic>
      </section>
      <section name="tonemap">
        <controls>
                  `RAW`)
                </notes>
              </value>
 +            <value hal_version="3.3">
 +              EXTERNAL
 +              <notes>
 +              This camera device is backed by an external camera connected to this Android device.
 +
 +              The device has capability identical to a LIMITED level device, with the following
 +              exceptions:
 +
 +              * The device may not report lens/sensor related information such as
 +                  - android.lens.focalLength
 +                  - android.lens.info.hyperfocalDistance
 +                  - android.sensor.info.physicalSize
 +                  - android.sensor.info.whiteLevel
 +                  - android.sensor.blackLevelPattern
 +                  - android.sensor.info.colorFilterArrangement
 +                  - android.sensor.rollingShutterSkew
 +              * The device will report 0 for android.sensor.orientation
 +              * The device has less guarantee on stable framerate, as the framerate partly depends
 +                on the external camera being used.
 +              </notes>
 +            </value>
            </enum>
            <description>
            Generally classifies the overall set of the camera device functionality.
            Camera HAL3+ must not implement LEGACY mode. It is there for backwards compatibility in
            the `android.hardware.camera2` user-facing API only on legacy HALv1 devices, and is
            implemented by the camera framework code.
 +
 +          EXTERNAL level devices have lower peformance bar in CTS since the peformance might depend
 +          on the external camera being used and is not fully controlled by the device manufacturer.
 +          The ITS test suite is exempted for the same reason.
            </hal_details>
          </entry>
          <entry name="version" type="byte" visibility="public" typedef="string" hal_version="3.3">
@@@ -270,6 -270,8 +270,8 @@@ typedef enum camera_metadata_tag 
      ANDROID_REQUEST_AVAILABLE_RESULT_KEYS,            // int32[]      | ndk_public   | HIDL v3.2
      ANDROID_REQUEST_AVAILABLE_CHARACTERISTICS_KEYS,   // int32[]      | ndk_public   | HIDL v3.2
      ANDROID_REQUEST_AVAILABLE_SESSION_KEYS,           // int32[]      | ndk_public   | HIDL v3.3
+     ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS,
+                                                       // int32[]      | hidden       | HIDL v3.3
      ANDROID_REQUEST_END,
  
      ANDROID_SCALER_CROP_REGION =                      // int32[]      | public       | HIDL v3.2
      ANDROID_STATISTICS_SCENE_FLICKER,                 // enum         | public       | HIDL v3.2
      ANDROID_STATISTICS_HOT_PIXEL_MAP,                 // int32[]      | public       | HIDL v3.2
      ANDROID_STATISTICS_LENS_SHADING_MAP_MODE,         // enum         | public       | HIDL v3.2
 +    ANDROID_STATISTICS_OIS_DATA_MODE,                 // enum         | public       | HIDL v3.3
 +    ANDROID_STATISTICS_OIS_TIMESTAMPS,                // int64[]      | public       | HIDL v3.3
 +    ANDROID_STATISTICS_OIS_X_SHIFTS,                  // float[]      | public       | HIDL v3.3
 +    ANDROID_STATISTICS_OIS_Y_SHIFTS,                  // float[]      | public       | HIDL v3.3
      ANDROID_STATISTICS_END,
  
      ANDROID_STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES = 
                                                        // byte[]       | public       | HIDL v3.2
      ANDROID_STATISTICS_INFO_AVAILABLE_LENS_SHADING_MAP_MODES,
                                                        // byte[]       | public       | HIDL v3.2
 +    ANDROID_STATISTICS_INFO_AVAILABLE_OIS_DATA_MODES, // byte[]       | public       | HIDL v3.3
      ANDROID_STATISTICS_INFO_END,
  
      ANDROID_TONEMAP_CURVE_BLUE =                      // float[]      | ndk_public   | HIDL v3.2
@@@ -895,12 -892,6 +897,12 @@@ typedef enum camera_metadata_enum_andro
      ANDROID_STATISTICS_LENS_SHADING_MAP_MODE_ON                     , // HIDL v3.2
  } camera_metadata_enum_android_statistics_lens_shading_map_mode_t;
  
 +// ANDROID_STATISTICS_OIS_DATA_MODE
 +typedef enum camera_metadata_enum_android_statistics_ois_data_mode {
 +    ANDROID_STATISTICS_OIS_DATA_MODE_OFF                            , // HIDL v3.3
 +    ANDROID_STATISTICS_OIS_DATA_MODE_ON                             , // HIDL v3.3
 +} camera_metadata_enum_android_statistics_ois_data_mode_t;
 +
  
  
  // ANDROID_TONEMAP_MODE
@@@ -937,7 -928,6 +939,7 @@@ typedef enum camera_metadata_enum_andro
      ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_FULL                      , // HIDL v3.2
      ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY                    , // HIDL v3.2
      ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_3                         , // HIDL v3.2
 +    ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL                  , // HIDL v3.3
  } camera_metadata_enum_android_info_supported_hardware_level_t;
  
  
@@@ -407,6 -407,9 +407,9 @@@ static tag_info_t android_request[ANDRO
      { "availableCharacteristicsKeys",  TYPE_INT32  },
      [ ANDROID_REQUEST_AVAILABLE_SESSION_KEYS - ANDROID_REQUEST_START ] =
      { "availableSessionKeys",          TYPE_INT32  },
+     [ ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS - ANDROID_REQUEST_START ] =
+     { "availablePhysicalCameraRequestKeys",
+                                         TYPE_INT32  },
  };
  
  static tag_info_t android_scaler[ANDROID_SCALER_END -
@@@ -590,14 -593,6 +593,14 @@@ static tag_info_t android_statistics[AN
      { "hotPixelMap",                   TYPE_INT32  },
      [ ANDROID_STATISTICS_LENS_SHADING_MAP_MODE - ANDROID_STATISTICS_START ] =
      { "lensShadingMapMode",            TYPE_BYTE   },
 +    [ ANDROID_STATISTICS_OIS_DATA_MODE - ANDROID_STATISTICS_START ] =
 +    { "oisDataMode",                   TYPE_BYTE   },
 +    [ ANDROID_STATISTICS_OIS_TIMESTAMPS - ANDROID_STATISTICS_START ] =
 +    { "oisTimestamps",                 TYPE_INT64  },
 +    [ ANDROID_STATISTICS_OIS_X_SHIFTS - ANDROID_STATISTICS_START ] =
 +    { "oisXShifts",                    TYPE_FLOAT  },
 +    [ ANDROID_STATISTICS_OIS_Y_SHIFTS - ANDROID_STATISTICS_START ] =
 +    { "oisYShifts",                    TYPE_FLOAT  },
  };
  
  static tag_info_t android_statistics_info[ANDROID_STATISTICS_INFO_END -
      { "availableHotPixelMapModes",     TYPE_BYTE   },
      [ ANDROID_STATISTICS_INFO_AVAILABLE_LENS_SHADING_MAP_MODES - ANDROID_STATISTICS_INFO_START ] =
      { "availableLensShadingMapModes",  TYPE_BYTE   },
 +    [ ANDROID_STATISTICS_INFO_AVAILABLE_OIS_DATA_MODES - ANDROID_STATISTICS_INFO_START ] =
 +    { "availableOisDataModes",         TYPE_BYTE   },
  };
  
  static tag_info_t android_tonemap[ANDROID_TONEMAP_END -
@@@ -1921,6 -1914,9 +1924,9 @@@ int camera_metadata_enum_snprint(uint32
          case ANDROID_REQUEST_AVAILABLE_SESSION_KEYS: {
              break;
          }
+         case ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS: {
+             break;
+         }
  
          case ANDROID_SCALER_CROP_REGION: {
              break;
              }
              break;
          }
 +        case ANDROID_STATISTICS_OIS_DATA_MODE: {
 +            switch (value) {
 +                case ANDROID_STATISTICS_OIS_DATA_MODE_OFF:
 +                    msg = "OFF";
 +                    ret = 0;
 +                    break;
 +                case ANDROID_STATISTICS_OIS_DATA_MODE_ON:
 +                    msg = "ON";
 +                    ret = 0;
 +                    break;
 +                default:
 +                    msg = "error: enum value out of range";
 +            }
 +            break;
 +        }
 +        case ANDROID_STATISTICS_OIS_TIMESTAMPS: {
 +            break;
 +        }
 +        case ANDROID_STATISTICS_OIS_X_SHIFTS: {
 +            break;
 +        }
 +        case ANDROID_STATISTICS_OIS_Y_SHIFTS: {
 +            break;
 +        }
  
          case ANDROID_STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES: {
              break;
          case ANDROID_STATISTICS_INFO_AVAILABLE_LENS_SHADING_MAP_MODES: {
              break;
          }
 +        case ANDROID_STATISTICS_INFO_AVAILABLE_OIS_DATA_MODES: {
 +            break;
 +        }
  
          case ANDROID_TONEMAP_CURVE_BLUE: {
              break;
                      msg = "3";
                      ret = 0;
                      break;
 +                case ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL:
 +                    msg = "EXTERNAL";
 +                    ret = 0;
 +                    break;
                  default:
                      msg = "error: enum value out of range";
              }