Camera: document multiResolution raw behavior

Document that mutiResolution RAW can be supported for a logical camera
without RAW capability.

Test: Build
Bug: 269221911
Change-Id: I24269dd63c6f354a53c39de513a140907a0e41d2
Merged-In: I24269dd63c6f354a53c39de513a140907a0e41d2
This commit is contained in:
Shuzhen Wang
2023-02-15 17:01:24 -08:00
parent b963d9a008
commit 2ec8d2cac7
3 changed files with 543 additions and 542 deletions

View File

@@ -2609,31 +2609,31 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
* <table>
* <thead>
* <tr>
* <th align="left">Input Format</th>
* <th align="left">Output Format</th>
* <th align="left">Capability</th>
* <th style="text-align: left;">Input Format</th>
* <th style="text-align: left;">Output Format</th>
* <th style="text-align: left;">Capability</th>
* </tr>
* </thead>
* <tbody>
* <tr>
* <td align="left">{@link android.graphics.ImageFormat#PRIVATE }</td>
* <td align="left">{@link android.graphics.ImageFormat#JPEG }</td>
* <td align="left">PRIVATE_REPROCESSING</td>
* <td style="text-align: left;">{@link android.graphics.ImageFormat#PRIVATE }</td>
* <td style="text-align: left;">{@link android.graphics.ImageFormat#JPEG }</td>
* <td style="text-align: left;">PRIVATE_REPROCESSING</td>
* </tr>
* <tr>
* <td align="left">{@link android.graphics.ImageFormat#PRIVATE }</td>
* <td align="left">{@link android.graphics.ImageFormat#YUV_420_888 }</td>
* <td align="left">PRIVATE_REPROCESSING</td>
* <td style="text-align: left;">{@link android.graphics.ImageFormat#PRIVATE }</td>
* <td style="text-align: left;">{@link android.graphics.ImageFormat#YUV_420_888 }</td>
* <td style="text-align: left;">PRIVATE_REPROCESSING</td>
* </tr>
* <tr>
* <td align="left">{@link android.graphics.ImageFormat#YUV_420_888 }</td>
* <td align="left">{@link android.graphics.ImageFormat#JPEG }</td>
* <td align="left">YUV_REPROCESSING</td>
* <td style="text-align: left;">{@link android.graphics.ImageFormat#YUV_420_888 }</td>
* <td style="text-align: left;">{@link android.graphics.ImageFormat#JPEG }</td>
* <td style="text-align: left;">YUV_REPROCESSING</td>
* </tr>
* <tr>
* <td align="left">{@link android.graphics.ImageFormat#YUV_420_888 }</td>
* <td align="left">{@link android.graphics.ImageFormat#YUV_420_888 }</td>
* <td align="left">YUV_REPROCESSING</td>
* <td style="text-align: left;">{@link android.graphics.ImageFormat#YUV_420_888 }</td>
* <td style="text-align: left;">{@link android.graphics.ImageFormat#YUV_420_888 }</td>
* <td style="text-align: left;">YUV_REPROCESSING</td>
* </tr>
* </tbody>
* </table>
@@ -2650,26 +2650,26 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
* <table>
* <thead>
* <tr>
* <th align="left">Input Format</th>
* <th align="left">Output Format</th>
* <th align="left">Capability</th>
* <th style="text-align: left;">Input Format</th>
* <th style="text-align: left;">Output Format</th>
* <th style="text-align: left;">Capability</th>
* </tr>
* </thead>
* <tbody>
* <tr>
* <td align="left">{@link android.graphics.ImageFormat#PRIVATE }</td>
* <td align="left">{@link android.graphics.ImageFormat#Y8 }</td>
* <td align="left">PRIVATE_REPROCESSING</td>
* <td style="text-align: left;">{@link android.graphics.ImageFormat#PRIVATE }</td>
* <td style="text-align: left;">{@link android.graphics.ImageFormat#Y8 }</td>
* <td style="text-align: left;">PRIVATE_REPROCESSING</td>
* </tr>
* <tr>
* <td align="left">{@link android.graphics.ImageFormat#Y8 }</td>
* <td align="left">{@link android.graphics.ImageFormat#JPEG }</td>
* <td align="left">YUV_REPROCESSING</td>
* <td style="text-align: left;">{@link android.graphics.ImageFormat#Y8 }</td>
* <td style="text-align: left;">{@link android.graphics.ImageFormat#JPEG }</td>
* <td style="text-align: left;">YUV_REPROCESSING</td>
* </tr>
* <tr>
* <td align="left">{@link android.graphics.ImageFormat#Y8 }</td>
* <td align="left">{@link android.graphics.ImageFormat#Y8 }</td>
* <td align="left">YUV_REPROCESSING</td>
* <td style="text-align: left;">{@link android.graphics.ImageFormat#Y8 }</td>
* <td style="text-align: left;">{@link android.graphics.ImageFormat#Y8 }</td>
* <td style="text-align: left;">YUV_REPROCESSING</td>
* </tr>
* </tbody>
* </table>
@@ -2705,60 +2705,60 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
* <table>
* <thead>
* <tr>
* <th align="center">Format</th>
* <th align="center">Size</th>
* <th align="center">Hardware Level</th>
* <th align="center">Notes</th>
* <th style="text-align: center;">Format</th>
* <th style="text-align: center;">Size</th>
* <th style="text-align: center;">Hardware Level</th>
* <th style="text-align: center;">Notes</th>
* </tr>
* </thead>
* <tbody>
* <tr>
* <td align="center">JPEG</td>
* <td align="center">{@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}</td>
* <td align="center">Any</td>
* <td align="center"></td>
* <td style="text-align: center;">JPEG</td>
* <td style="text-align: center;">{@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}</td>
* <td style="text-align: center;">Any</td>
* <td style="text-align: center;"></td>
* </tr>
* <tr>
* <td align="center">JPEG</td>
* <td align="center">1920x1080 (1080p)</td>
* <td align="center">Any</td>
* <td align="center">if 1080p &lt;= activeArraySize</td>
* <td style="text-align: center;">JPEG</td>
* <td style="text-align: center;">1920x1080 (1080p)</td>
* <td style="text-align: center;">Any</td>
* <td style="text-align: center;">if 1080p &lt;= activeArraySize</td>
* </tr>
* <tr>
* <td align="center">JPEG</td>
* <td align="center">1280x720 (720)</td>
* <td align="center">Any</td>
* <td align="center">if 720p &lt;= activeArraySize</td>
* <td style="text-align: center;">JPEG</td>
* <td style="text-align: center;">1280x720 (720)</td>
* <td style="text-align: center;">Any</td>
* <td style="text-align: center;">if 720p &lt;= activeArraySize</td>
* </tr>
* <tr>
* <td align="center">JPEG</td>
* <td align="center">640x480 (480p)</td>
* <td align="center">Any</td>
* <td align="center">if 480p &lt;= activeArraySize</td>
* <td style="text-align: center;">JPEG</td>
* <td style="text-align: center;">640x480 (480p)</td>
* <td style="text-align: center;">Any</td>
* <td style="text-align: center;">if 480p &lt;= activeArraySize</td>
* </tr>
* <tr>
* <td align="center">JPEG</td>
* <td align="center">320x240 (240p)</td>
* <td align="center">Any</td>
* <td align="center">if 240p &lt;= activeArraySize</td>
* <td style="text-align: center;">JPEG</td>
* <td style="text-align: center;">320x240 (240p)</td>
* <td style="text-align: center;">Any</td>
* <td style="text-align: center;">if 240p &lt;= activeArraySize</td>
* </tr>
* <tr>
* <td align="center">YUV_420_888</td>
* <td align="center">all output sizes available for JPEG</td>
* <td align="center">FULL</td>
* <td align="center"></td>
* <td style="text-align: center;">YUV_420_888</td>
* <td style="text-align: center;">all output sizes available for JPEG</td>
* <td style="text-align: center;">FULL</td>
* <td style="text-align: center;"></td>
* </tr>
* <tr>
* <td align="center">YUV_420_888</td>
* <td align="center">all output sizes available for JPEG, up to the maximum video size</td>
* <td align="center">LIMITED</td>
* <td align="center"></td>
* <td style="text-align: center;">YUV_420_888</td>
* <td style="text-align: center;">all output sizes available for JPEG, up to the maximum video size</td>
* <td style="text-align: center;">LIMITED</td>
* <td style="text-align: center;"></td>
* </tr>
* <tr>
* <td align="center">IMPLEMENTATION_DEFINED</td>
* <td align="center">same as YUV_420_888</td>
* <td align="center">Any</td>
* <td align="center"></td>
* <td style="text-align: center;">IMPLEMENTATION_DEFINED</td>
* <td style="text-align: center;">same as YUV_420_888</td>
* <td style="text-align: center;">Any</td>
* <td style="text-align: center;"></td>
* </tr>
* </tbody>
* </table>
@@ -2773,66 +2773,66 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
* <table>
* <thead>
* <tr>
* <th align="center">Format</th>
* <th align="center">Size</th>
* <th align="center">Hardware Level</th>
* <th align="center">Notes</th>
* <th style="text-align: center;">Format</th>
* <th style="text-align: center;">Size</th>
* <th style="text-align: center;">Hardware Level</th>
* <th style="text-align: center;">Notes</th>
* </tr>
* </thead>
* <tbody>
* <tr>
* <td align="center">JPEG</td>
* <td align="center">{@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}</td>
* <td align="center">Any</td>
* <td align="center"></td>
* <td style="text-align: center;">JPEG</td>
* <td style="text-align: center;">{@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}</td>
* <td style="text-align: center;">Any</td>
* <td style="text-align: center;"></td>
* </tr>
* <tr>
* <td align="center">JPEG</td>
* <td align="center">1920x1080 (1080p)</td>
* <td align="center">Any</td>
* <td align="center">if 1080p &lt;= activeArraySize</td>
* <td style="text-align: center;">JPEG</td>
* <td style="text-align: center;">1920x1080 (1080p)</td>
* <td style="text-align: center;">Any</td>
* <td style="text-align: center;">if 1080p &lt;= activeArraySize</td>
* </tr>
* <tr>
* <td align="center">YUV_420_888</td>
* <td align="center">{@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}</td>
* <td align="center">FULL</td>
* <td align="center"></td>
* <td style="text-align: center;">YUV_420_888</td>
* <td style="text-align: center;">{@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}</td>
* <td style="text-align: center;">FULL</td>
* <td style="text-align: center;"></td>
* </tr>
* <tr>
* <td align="center">YUV_420_888</td>
* <td align="center">1920x1080 (1080p)</td>
* <td align="center">FULL</td>
* <td align="center">if 1080p &lt;= activeArraySize</td>
* <td style="text-align: center;">YUV_420_888</td>
* <td style="text-align: center;">1920x1080 (1080p)</td>
* <td style="text-align: center;">FULL</td>
* <td style="text-align: center;">if 1080p &lt;= activeArraySize</td>
* </tr>
* <tr>
* <td align="center">YUV_420_888</td>
* <td align="center">1280x720 (720)</td>
* <td align="center">FULL</td>
* <td align="center">if 720p &lt;= activeArraySize</td>
* <td style="text-align: center;">YUV_420_888</td>
* <td style="text-align: center;">1280x720 (720)</td>
* <td style="text-align: center;">FULL</td>
* <td style="text-align: center;">if 720p &lt;= activeArraySize</td>
* </tr>
* <tr>
* <td align="center">YUV_420_888</td>
* <td align="center">640x480 (480p)</td>
* <td align="center">FULL</td>
* <td align="center">if 480p &lt;= activeArraySize</td>
* <td style="text-align: center;">YUV_420_888</td>
* <td style="text-align: center;">640x480 (480p)</td>
* <td style="text-align: center;">FULL</td>
* <td style="text-align: center;">if 480p &lt;= activeArraySize</td>
* </tr>
* <tr>
* <td align="center">YUV_420_888</td>
* <td align="center">320x240 (240p)</td>
* <td align="center">FULL</td>
* <td align="center">if 240p &lt;= activeArraySize</td>
* <td style="text-align: center;">YUV_420_888</td>
* <td style="text-align: center;">320x240 (240p)</td>
* <td style="text-align: center;">FULL</td>
* <td style="text-align: center;">if 240p &lt;= activeArraySize</td>
* </tr>
* <tr>
* <td align="center">YUV_420_888</td>
* <td align="center">all output sizes available for FULL hardware level, up to the maximum video size</td>
* <td align="center">LIMITED</td>
* <td align="center"></td>
* <td style="text-align: center;">YUV_420_888</td>
* <td style="text-align: center;">all output sizes available for FULL hardware level, up to the maximum video size</td>
* <td style="text-align: center;">LIMITED</td>
* <td style="text-align: center;"></td>
* </tr>
* <tr>
* <td align="center">IMPLEMENTATION_DEFINED</td>
* <td align="center">same as YUV_420_888</td>
* <td align="center">Any</td>
* <td align="center"></td>
* <td style="text-align: center;">IMPLEMENTATION_DEFINED</td>
* <td style="text-align: center;">same as YUV_420_888</td>
* <td style="text-align: center;">Any</td>
* <td style="text-align: center;"></td>
* </tr>
* </tbody>
* </table>
@@ -2987,66 +2987,66 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
* <table>
* <thead>
* <tr>
* <th align="center">Format</th>
* <th align="center">Size</th>
* <th align="center">Hardware Level</th>
* <th align="center">Notes</th>
* <th style="text-align: center;">Format</th>
* <th style="text-align: center;">Size</th>
* <th style="text-align: center;">Hardware Level</th>
* <th style="text-align: center;">Notes</th>
* </tr>
* </thead>
* <tbody>
* <tr>
* <td align="center">{@link android.graphics.ImageFormat#JPEG }</td>
* <td align="center">{@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize} (*1)</td>
* <td align="center">Any</td>
* <td align="center"></td>
* <td style="text-align: center;">{@link android.graphics.ImageFormat#JPEG }</td>
* <td style="text-align: center;">{@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize} (*1)</td>
* <td style="text-align: center;">Any</td>
* <td style="text-align: center;"></td>
* </tr>
* <tr>
* <td align="center">{@link android.graphics.ImageFormat#JPEG }</td>
* <td align="center">1920x1080 (1080p)</td>
* <td align="center">Any</td>
* <td align="center">if 1080p &lt;= activeArraySize</td>
* <td style="text-align: center;">{@link android.graphics.ImageFormat#JPEG }</td>
* <td style="text-align: center;">1920x1080 (1080p)</td>
* <td style="text-align: center;">Any</td>
* <td style="text-align: center;">if 1080p &lt;= activeArraySize</td>
* </tr>
* <tr>
* <td align="center">{@link android.graphics.ImageFormat#YUV_420_888 }</td>
* <td align="center">{@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}</td>
* <td align="center">FULL</td>
* <td align="center"></td>
* <td style="text-align: center;">{@link android.graphics.ImageFormat#YUV_420_888 }</td>
* <td style="text-align: center;">{@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}</td>
* <td style="text-align: center;">FULL</td>
* <td style="text-align: center;"></td>
* </tr>
* <tr>
* <td align="center">{@link android.graphics.ImageFormat#YUV_420_888 }</td>
* <td align="center">1920x1080 (1080p)</td>
* <td align="center">FULL</td>
* <td align="center">if 1080p &lt;= activeArraySize</td>
* <td style="text-align: center;">{@link android.graphics.ImageFormat#YUV_420_888 }</td>
* <td style="text-align: center;">1920x1080 (1080p)</td>
* <td style="text-align: center;">FULL</td>
* <td style="text-align: center;">if 1080p &lt;= activeArraySize</td>
* </tr>
* <tr>
* <td align="center">{@link android.graphics.ImageFormat#YUV_420_888 }</td>
* <td align="center">1280x720 (720)</td>
* <td align="center">FULL</td>
* <td align="center">if 720p &lt;= activeArraySize</td>
* <td style="text-align: center;">{@link android.graphics.ImageFormat#YUV_420_888 }</td>
* <td style="text-align: center;">1280x720 (720)</td>
* <td style="text-align: center;">FULL</td>
* <td style="text-align: center;">if 720p &lt;= activeArraySize</td>
* </tr>
* <tr>
* <td align="center">{@link android.graphics.ImageFormat#YUV_420_888 }</td>
* <td align="center">640x480 (480p)</td>
* <td align="center">FULL</td>
* <td align="center">if 480p &lt;= activeArraySize</td>
* <td style="text-align: center;">{@link android.graphics.ImageFormat#YUV_420_888 }</td>
* <td style="text-align: center;">640x480 (480p)</td>
* <td style="text-align: center;">FULL</td>
* <td style="text-align: center;">if 480p &lt;= activeArraySize</td>
* </tr>
* <tr>
* <td align="center">{@link android.graphics.ImageFormat#YUV_420_888 }</td>
* <td align="center">320x240 (240p)</td>
* <td align="center">FULL</td>
* <td align="center">if 240p &lt;= activeArraySize</td>
* <td style="text-align: center;">{@link android.graphics.ImageFormat#YUV_420_888 }</td>
* <td style="text-align: center;">320x240 (240p)</td>
* <td style="text-align: center;">FULL</td>
* <td style="text-align: center;">if 240p &lt;= activeArraySize</td>
* </tr>
* <tr>
* <td align="center">{@link android.graphics.ImageFormat#YUV_420_888 }</td>
* <td align="center">all output sizes available for FULL hardware level, up to the maximum video size</td>
* <td align="center">LIMITED</td>
* <td align="center"></td>
* <td style="text-align: center;">{@link android.graphics.ImageFormat#YUV_420_888 }</td>
* <td style="text-align: center;">all output sizes available for FULL hardware level, up to the maximum video size</td>
* <td style="text-align: center;">LIMITED</td>
* <td style="text-align: center;"></td>
* </tr>
* <tr>
* <td align="center">{@link android.graphics.ImageFormat#PRIVATE }</td>
* <td align="center">same as YUV_420_888</td>
* <td align="center">Any</td>
* <td align="center"></td>
* <td style="text-align: center;">{@link android.graphics.ImageFormat#PRIVATE }</td>
* <td style="text-align: center;">same as YUV_420_888</td>
* <td style="text-align: center;">Any</td>
* <td style="text-align: center;"></td>
* </tr>
* </tbody>
* </table>
@@ -3492,8 +3492,8 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
/**
* <p>An array of mandatory stream combinations which are applicable when device lists
* {@code PREVIEW_STABILIZATION} in {@link CameraCharacteristics#CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES android.control.availableVideoStabilizationModes}.
* This is an app-readable conversion of the preview stabilization mandatory stream combination
* {@link android.hardware.camera2.CameraDevice#createCaptureSession tables}.</p>
* This is an app-readable conversion of the preview stabilization mandatory stream
* combination {@link android.hardware.camera2.CameraDevice#createCaptureSession tables}.</p>
* <p>The array of
* {@link android.hardware.camera2.params.MandatoryStreamCombination combinations} is
* generated according to the documented

View File

@@ -1000,24 +1000,25 @@ public abstract class CameraMetadata<TKey> {
* camera's crop region is set to maximum size, the FOV of the physical streams for the
* ultrawide lens will be the same as the logical stream, by making the crop region
* smaller than its active array size to compensate for the smaller focal length.</p>
* <p>There are two ways for the application to capture RAW images from a logical camera
* with RAW capability:</p>
* <p>For a logical camera, typically the underlying physical cameras have different RAW
* capabilities (such as resolution or CFA pattern). There are two ways for the
* application to capture RAW images from the logical camera:</p>
* <ul>
* <li>Because the underlying physical cameras may have different RAW capabilities (such
* as resolution or CFA pattern), to maintain backward compatibility, when a RAW stream
* is configured, the camera device makes sure the default active physical camera remains
* active and does not switch to other physical cameras. (One exception is that, if the
* logical camera consists of identical image sensors and advertises multiple focalLength
* due to different lenses, the camera device may generate RAW images from different
* physical cameras based on the focalLength being set by the application.) This
* backward-compatible approach usually results in loss of optical zoom, to telephoto
* lens or to ultrawide lens.</li>
* <li>Alternatively, to take advantage of the full zoomRatio range of the logical camera,
* the application should use {@link android.hardware.camera2.MultiResolutionImageReader }
* to capture RAW images from the currently active physical camera. Because different
* physical camera may have different RAW characteristics, the application needs to use
* the characteristics and result metadata of the active physical camera for the
* relevant RAW metadata.</li>
* <li>If the logical camera has RAW capability, the application can create and use RAW
* streams in the same way as before. In case a RAW stream is configured, to maintain
* backward compatibility, the camera device makes sure the default active physical
* camera remains active and does not switch to other physical cameras. (One exception
* is that, if the logical camera consists of identical image sensors and advertises
* multiple focalLength due to different lenses, the camera device may generate RAW
* images from different physical cameras based on the focalLength being set by the
* application.) This backward-compatible approach usually results in loss of optical
* zoom, to telephoto lens or to ultrawide lens.</li>
* <li>Alternatively, if supported by the device,
* {@link android.hardware.camera2.MultiResolutionImageReader }
* can be used to capture RAW images from one of the underlying physical cameras (
* depending on current zoom level). Because different physical cameras may have
* different RAW characteristics, the application needs to use the characteristics
* and result metadata of the active physical camera for the relevant RAW metadata.</li>
* </ul>
* <p>The capture request and result metadata tags required for backward compatible camera
* functionalities will be solely based on the logical camera capability. On the other

File diff suppressed because it is too large Load Diff