><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 -->
<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 -->
<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 -->
+
<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 -->
<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 -->
<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>
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">