Merge "Camera: document multiResolution raw behavior"

This commit is contained in:
Shuzhen Wang
2023-02-23 20:22:56 +00:00
committed by Gerrit Code Review
3 changed files with 543 additions and 542 deletions

View File

@@ -2609,31 +2609,31 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
* <table> * <table>
* <thead> * <thead>
* <tr> * <tr>
* <th align="left">Input Format</th> * <th style="text-align: left;">Input Format</th>
* <th align="left">Output Format</th> * <th style="text-align: left;">Output Format</th>
* <th align="left">Capability</th> * <th style="text-align: left;">Capability</th>
* </tr> * </tr>
* </thead> * </thead>
* <tbody> * <tbody>
* <tr> * <tr>
* <td align="left">{@link android.graphics.ImageFormat#PRIVATE }</td> * <td style="text-align: left;">{@link android.graphics.ImageFormat#PRIVATE }</td>
* <td align="left">{@link android.graphics.ImageFormat#JPEG }</td> * <td style="text-align: left;">{@link android.graphics.ImageFormat#JPEG }</td>
* <td align="left">PRIVATE_REPROCESSING</td> * <td style="text-align: left;">PRIVATE_REPROCESSING</td>
* </tr> * </tr>
* <tr> * <tr>
* <td align="left">{@link android.graphics.ImageFormat#PRIVATE }</td> * <td style="text-align: left;">{@link android.graphics.ImageFormat#PRIVATE }</td>
* <td align="left">{@link android.graphics.ImageFormat#YUV_420_888 }</td> * <td style="text-align: left;">{@link android.graphics.ImageFormat#YUV_420_888 }</td>
* <td align="left">PRIVATE_REPROCESSING</td> * <td style="text-align: left;">PRIVATE_REPROCESSING</td>
* </tr> * </tr>
* <tr> * <tr>
* <td align="left">{@link android.graphics.ImageFormat#YUV_420_888 }</td> * <td style="text-align: left;">{@link android.graphics.ImageFormat#YUV_420_888 }</td>
* <td align="left">{@link android.graphics.ImageFormat#JPEG }</td> * <td style="text-align: left;">{@link android.graphics.ImageFormat#JPEG }</td>
* <td align="left">YUV_REPROCESSING</td> * <td style="text-align: left;">YUV_REPROCESSING</td>
* </tr> * </tr>
* <tr> * <tr>
* <td align="left">{@link android.graphics.ImageFormat#YUV_420_888 }</td> * <td style="text-align: left;">{@link android.graphics.ImageFormat#YUV_420_888 }</td>
* <td align="left">{@link android.graphics.ImageFormat#YUV_420_888 }</td> * <td style="text-align: left;">{@link android.graphics.ImageFormat#YUV_420_888 }</td>
* <td align="left">YUV_REPROCESSING</td> * <td style="text-align: left;">YUV_REPROCESSING</td>
* </tr> * </tr>
* </tbody> * </tbody>
* </table> * </table>
@@ -2650,26 +2650,26 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
* <table> * <table>
* <thead> * <thead>
* <tr> * <tr>
* <th align="left">Input Format</th> * <th style="text-align: left;">Input Format</th>
* <th align="left">Output Format</th> * <th style="text-align: left;">Output Format</th>
* <th align="left">Capability</th> * <th style="text-align: left;">Capability</th>
* </tr> * </tr>
* </thead> * </thead>
* <tbody> * <tbody>
* <tr> * <tr>
* <td align="left">{@link android.graphics.ImageFormat#PRIVATE }</td> * <td style="text-align: left;">{@link android.graphics.ImageFormat#PRIVATE }</td>
* <td align="left">{@link android.graphics.ImageFormat#Y8 }</td> * <td style="text-align: left;">{@link android.graphics.ImageFormat#Y8 }</td>
* <td align="left">PRIVATE_REPROCESSING</td> * <td style="text-align: left;">PRIVATE_REPROCESSING</td>
* </tr> * </tr>
* <tr> * <tr>
* <td align="left">{@link android.graphics.ImageFormat#Y8 }</td> * <td style="text-align: left;">{@link android.graphics.ImageFormat#Y8 }</td>
* <td align="left">{@link android.graphics.ImageFormat#JPEG }</td> * <td style="text-align: left;">{@link android.graphics.ImageFormat#JPEG }</td>
* <td align="left">YUV_REPROCESSING</td> * <td style="text-align: left;">YUV_REPROCESSING</td>
* </tr> * </tr>
* <tr> * <tr>
* <td align="left">{@link android.graphics.ImageFormat#Y8 }</td> * <td style="text-align: left;">{@link android.graphics.ImageFormat#Y8 }</td>
* <td align="left">{@link android.graphics.ImageFormat#Y8 }</td> * <td style="text-align: left;">{@link android.graphics.ImageFormat#Y8 }</td>
* <td align="left">YUV_REPROCESSING</td> * <td style="text-align: left;">YUV_REPROCESSING</td>
* </tr> * </tr>
* </tbody> * </tbody>
* </table> * </table>
@@ -2705,60 +2705,60 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
* <table> * <table>
* <thead> * <thead>
* <tr> * <tr>
* <th align="center">Format</th> * <th style="text-align: center;">Format</th>
* <th align="center">Size</th> * <th style="text-align: center;">Size</th>
* <th align="center">Hardware Level</th> * <th style="text-align: center;">Hardware Level</th>
* <th align="center">Notes</th> * <th style="text-align: center;">Notes</th>
* </tr> * </tr>
* </thead> * </thead>
* <tbody> * <tbody>
* <tr> * <tr>
* <td align="center">JPEG</td> * <td style="text-align: center;">JPEG</td>
* <td align="center">{@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}</td> * <td style="text-align: center;">{@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}</td>
* <td align="center">Any</td> * <td style="text-align: center;">Any</td>
* <td align="center"></td> * <td style="text-align: center;"></td>
* </tr> * </tr>
* <tr> * <tr>
* <td align="center">JPEG</td> * <td style="text-align: center;">JPEG</td>
* <td align="center">1920x1080 (1080p)</td> * <td style="text-align: center;">1920x1080 (1080p)</td>
* <td align="center">Any</td> * <td style="text-align: center;">Any</td>
* <td align="center">if 1080p &lt;= activeArraySize</td> * <td style="text-align: center;">if 1080p &lt;= activeArraySize</td>
* </tr> * </tr>
* <tr> * <tr>
* <td align="center">JPEG</td> * <td style="text-align: center;">JPEG</td>
* <td align="center">1280x720 (720)</td> * <td style="text-align: center;">1280x720 (720)</td>
* <td align="center">Any</td> * <td style="text-align: center;">Any</td>
* <td align="center">if 720p &lt;= activeArraySize</td> * <td style="text-align: center;">if 720p &lt;= activeArraySize</td>
* </tr> * </tr>
* <tr> * <tr>
* <td align="center">JPEG</td> * <td style="text-align: center;">JPEG</td>
* <td align="center">640x480 (480p)</td> * <td style="text-align: center;">640x480 (480p)</td>
* <td align="center">Any</td> * <td style="text-align: center;">Any</td>
* <td align="center">if 480p &lt;= activeArraySize</td> * <td style="text-align: center;">if 480p &lt;= activeArraySize</td>
* </tr> * </tr>
* <tr> * <tr>
* <td align="center">JPEG</td> * <td style="text-align: center;">JPEG</td>
* <td align="center">320x240 (240p)</td> * <td style="text-align: center;">320x240 (240p)</td>
* <td align="center">Any</td> * <td style="text-align: center;">Any</td>
* <td align="center">if 240p &lt;= activeArraySize</td> * <td style="text-align: center;">if 240p &lt;= activeArraySize</td>
* </tr> * </tr>
* <tr> * <tr>
* <td align="center">YUV_420_888</td> * <td style="text-align: center;">YUV_420_888</td>
* <td align="center">all output sizes available for JPEG</td> * <td style="text-align: center;">all output sizes available for JPEG</td>
* <td align="center">FULL</td> * <td style="text-align: center;">FULL</td>
* <td align="center"></td> * <td style="text-align: center;"></td>
* </tr> * </tr>
* <tr> * <tr>
* <td align="center">YUV_420_888</td> * <td style="text-align: center;">YUV_420_888</td>
* <td align="center">all output sizes available for JPEG, up to the maximum video size</td> * <td style="text-align: center;">all output sizes available for JPEG, up to the maximum video size</td>
* <td align="center">LIMITED</td> * <td style="text-align: center;">LIMITED</td>
* <td align="center"></td> * <td style="text-align: center;"></td>
* </tr> * </tr>
* <tr> * <tr>
* <td align="center">IMPLEMENTATION_DEFINED</td> * <td style="text-align: center;">IMPLEMENTATION_DEFINED</td>
* <td align="center">same as YUV_420_888</td> * <td style="text-align: center;">same as YUV_420_888</td>
* <td align="center">Any</td> * <td style="text-align: center;">Any</td>
* <td align="center"></td> * <td style="text-align: center;"></td>
* </tr> * </tr>
* </tbody> * </tbody>
* </table> * </table>
@@ -2773,66 +2773,66 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
* <table> * <table>
* <thead> * <thead>
* <tr> * <tr>
* <th align="center">Format</th> * <th style="text-align: center;">Format</th>
* <th align="center">Size</th> * <th style="text-align: center;">Size</th>
* <th align="center">Hardware Level</th> * <th style="text-align: center;">Hardware Level</th>
* <th align="center">Notes</th> * <th style="text-align: center;">Notes</th>
* </tr> * </tr>
* </thead> * </thead>
* <tbody> * <tbody>
* <tr> * <tr>
* <td align="center">JPEG</td> * <td style="text-align: center;">JPEG</td>
* <td align="center">{@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}</td> * <td style="text-align: center;">{@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}</td>
* <td align="center">Any</td> * <td style="text-align: center;">Any</td>
* <td align="center"></td> * <td style="text-align: center;"></td>
* </tr> * </tr>
* <tr> * <tr>
* <td align="center">JPEG</td> * <td style="text-align: center;">JPEG</td>
* <td align="center">1920x1080 (1080p)</td> * <td style="text-align: center;">1920x1080 (1080p)</td>
* <td align="center">Any</td> * <td style="text-align: center;">Any</td>
* <td align="center">if 1080p &lt;= activeArraySize</td> * <td style="text-align: center;">if 1080p &lt;= activeArraySize</td>
* </tr> * </tr>
* <tr> * <tr>
* <td align="center">YUV_420_888</td> * <td style="text-align: center;">YUV_420_888</td>
* <td align="center">{@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}</td> * <td style="text-align: center;">{@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}</td>
* <td align="center">FULL</td> * <td style="text-align: center;">FULL</td>
* <td align="center"></td> * <td style="text-align: center;"></td>
* </tr> * </tr>
* <tr> * <tr>
* <td align="center">YUV_420_888</td> * <td style="text-align: center;">YUV_420_888</td>
* <td align="center">1920x1080 (1080p)</td> * <td style="text-align: center;">1920x1080 (1080p)</td>
* <td align="center">FULL</td> * <td style="text-align: center;">FULL</td>
* <td align="center">if 1080p &lt;= activeArraySize</td> * <td style="text-align: center;">if 1080p &lt;= activeArraySize</td>
* </tr> * </tr>
* <tr> * <tr>
* <td align="center">YUV_420_888</td> * <td style="text-align: center;">YUV_420_888</td>
* <td align="center">1280x720 (720)</td> * <td style="text-align: center;">1280x720 (720)</td>
* <td align="center">FULL</td> * <td style="text-align: center;">FULL</td>
* <td align="center">if 720p &lt;= activeArraySize</td> * <td style="text-align: center;">if 720p &lt;= activeArraySize</td>
* </tr> * </tr>
* <tr> * <tr>
* <td align="center">YUV_420_888</td> * <td style="text-align: center;">YUV_420_888</td>
* <td align="center">640x480 (480p)</td> * <td style="text-align: center;">640x480 (480p)</td>
* <td align="center">FULL</td> * <td style="text-align: center;">FULL</td>
* <td align="center">if 480p &lt;= activeArraySize</td> * <td style="text-align: center;">if 480p &lt;= activeArraySize</td>
* </tr> * </tr>
* <tr> * <tr>
* <td align="center">YUV_420_888</td> * <td style="text-align: center;">YUV_420_888</td>
* <td align="center">320x240 (240p)</td> * <td style="text-align: center;">320x240 (240p)</td>
* <td align="center">FULL</td> * <td style="text-align: center;">FULL</td>
* <td align="center">if 240p &lt;= activeArraySize</td> * <td style="text-align: center;">if 240p &lt;= activeArraySize</td>
* </tr> * </tr>
* <tr> * <tr>
* <td align="center">YUV_420_888</td> * <td style="text-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 style="text-align: center;">all output sizes available for FULL hardware level, up to the maximum video size</td>
* <td align="center">LIMITED</td> * <td style="text-align: center;">LIMITED</td>
* <td align="center"></td> * <td style="text-align: center;"></td>
* </tr> * </tr>
* <tr> * <tr>
* <td align="center">IMPLEMENTATION_DEFINED</td> * <td style="text-align: center;">IMPLEMENTATION_DEFINED</td>
* <td align="center">same as YUV_420_888</td> * <td style="text-align: center;">same as YUV_420_888</td>
* <td align="center">Any</td> * <td style="text-align: center;">Any</td>
* <td align="center"></td> * <td style="text-align: center;"></td>
* </tr> * </tr>
* </tbody> * </tbody>
* </table> * </table>
@@ -2987,66 +2987,66 @@ public final class CameraCharacteristics extends CameraMetadata<CameraCharacteri
* <table> * <table>
* <thead> * <thead>
* <tr> * <tr>
* <th align="center">Format</th> * <th style="text-align: center;">Format</th>
* <th align="center">Size</th> * <th style="text-align: center;">Size</th>
* <th align="center">Hardware Level</th> * <th style="text-align: center;">Hardware Level</th>
* <th align="center">Notes</th> * <th style="text-align: center;">Notes</th>
* </tr> * </tr>
* </thead> * </thead>
* <tbody> * <tbody>
* <tr> * <tr>
* <td align="center">{@link android.graphics.ImageFormat#JPEG }</td> * <td style="text-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 style="text-align: center;">{@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize} (*1)</td>
* <td align="center">Any</td> * <td style="text-align: center;">Any</td>
* <td align="center"></td> * <td style="text-align: center;"></td>
* </tr> * </tr>
* <tr> * <tr>
* <td align="center">{@link android.graphics.ImageFormat#JPEG }</td> * <td style="text-align: center;">{@link android.graphics.ImageFormat#JPEG }</td>
* <td align="center">1920x1080 (1080p)</td> * <td style="text-align: center;">1920x1080 (1080p)</td>
* <td align="center">Any</td> * <td style="text-align: center;">Any</td>
* <td align="center">if 1080p &lt;= activeArraySize</td> * <td style="text-align: center;">if 1080p &lt;= activeArraySize</td>
* </tr> * </tr>
* <tr> * <tr>
* <td align="center">{@link android.graphics.ImageFormat#YUV_420_888 }</td> * <td style="text-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 style="text-align: center;">{@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}</td>
* <td align="center">FULL</td> * <td style="text-align: center;">FULL</td>
* <td align="center"></td> * <td style="text-align: center;"></td>
* </tr> * </tr>
* <tr> * <tr>
* <td align="center">{@link android.graphics.ImageFormat#YUV_420_888 }</td> * <td style="text-align: center;">{@link android.graphics.ImageFormat#YUV_420_888 }</td>
* <td align="center">1920x1080 (1080p)</td> * <td style="text-align: center;">1920x1080 (1080p)</td>
* <td align="center">FULL</td> * <td style="text-align: center;">FULL</td>
* <td align="center">if 1080p &lt;= activeArraySize</td> * <td style="text-align: center;">if 1080p &lt;= activeArraySize</td>
* </tr> * </tr>
* <tr> * <tr>
* <td align="center">{@link android.graphics.ImageFormat#YUV_420_888 }</td> * <td style="text-align: center;">{@link android.graphics.ImageFormat#YUV_420_888 }</td>
* <td align="center">1280x720 (720)</td> * <td style="text-align: center;">1280x720 (720)</td>
* <td align="center">FULL</td> * <td style="text-align: center;">FULL</td>
* <td align="center">if 720p &lt;= activeArraySize</td> * <td style="text-align: center;">if 720p &lt;= activeArraySize</td>
* </tr> * </tr>
* <tr> * <tr>
* <td align="center">{@link android.graphics.ImageFormat#YUV_420_888 }</td> * <td style="text-align: center;">{@link android.graphics.ImageFormat#YUV_420_888 }</td>
* <td align="center">640x480 (480p)</td> * <td style="text-align: center;">640x480 (480p)</td>
* <td align="center">FULL</td> * <td style="text-align: center;">FULL</td>
* <td align="center">if 480p &lt;= activeArraySize</td> * <td style="text-align: center;">if 480p &lt;= activeArraySize</td>
* </tr> * </tr>
* <tr> * <tr>
* <td align="center">{@link android.graphics.ImageFormat#YUV_420_888 }</td> * <td style="text-align: center;">{@link android.graphics.ImageFormat#YUV_420_888 }</td>
* <td align="center">320x240 (240p)</td> * <td style="text-align: center;">320x240 (240p)</td>
* <td align="center">FULL</td> * <td style="text-align: center;">FULL</td>
* <td align="center">if 240p &lt;= activeArraySize</td> * <td style="text-align: center;">if 240p &lt;= activeArraySize</td>
* </tr> * </tr>
* <tr> * <tr>
* <td align="center">{@link android.graphics.ImageFormat#YUV_420_888 }</td> * <td style="text-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 style="text-align: center;">all output sizes available for FULL hardware level, up to the maximum video size</td>
* <td align="center">LIMITED</td> * <td style="text-align: center;">LIMITED</td>
* <td align="center"></td> * <td style="text-align: center;"></td>
* </tr> * </tr>
* <tr> * <tr>
* <td align="center">{@link android.graphics.ImageFormat#PRIVATE }</td> * <td style="text-align: center;">{@link android.graphics.ImageFormat#PRIVATE }</td>
* <td align="center">same as YUV_420_888</td> * <td style="text-align: center;">same as YUV_420_888</td>
* <td align="center">Any</td> * <td style="text-align: center;">Any</td>
* <td align="center"></td> * <td style="text-align: center;"></td>
* </tr> * </tr>
* </tbody> * </tbody>
* </table> * </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 * <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}. * {@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 * This is an app-readable conversion of the preview stabilization mandatory stream
* {@link android.hardware.camera2.CameraDevice#createCaptureSession tables}.</p> * combination {@link android.hardware.camera2.CameraDevice#createCaptureSession tables}.</p>
* <p>The array of * <p>The array of
* {@link android.hardware.camera2.params.MandatoryStreamCombination combinations} is * {@link android.hardware.camera2.params.MandatoryStreamCombination combinations} is
* generated according to the documented * 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 * 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 * 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> * 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 * <p>For a logical camera, typically the underlying physical cameras have different RAW
* with RAW capability:</p> * capabilities (such as resolution or CFA pattern). There are two ways for the
* application to capture RAW images from the logical camera:</p>
* <ul> * <ul>
* <li>Because the underlying physical cameras may have different RAW capabilities (such * <li>If the logical camera has RAW capability, the application can create and use RAW
* as resolution or CFA pattern), to maintain backward compatibility, when a RAW stream * streams in the same way as before. In case a RAW stream is configured, to maintain
* is configured, the camera device makes sure the default active physical camera remains * backward compatibility, the camera device makes sure the default active physical
* active and does not switch to other physical cameras. (One exception is that, if the * camera remains active and does not switch to other physical cameras. (One exception
* logical camera consists of identical image sensors and advertises multiple focalLength * is that, if the logical camera consists of identical image sensors and advertises
* due to different lenses, the camera device may generate RAW images from different * multiple focalLength due to different lenses, the camera device may generate RAW
* physical cameras based on the focalLength being set by the application.) This * images from different physical cameras based on the focalLength being set by the
* backward-compatible approach usually results in loss of optical zoom, to telephoto * application.) This backward-compatible approach usually results in loss of optical
* lens or to ultrawide lens.</li> * zoom, to telephoto lens or to ultrawide lens.</li>
* <li>Alternatively, to take advantage of the full zoomRatio range of the logical camera, * <li>Alternatively, if supported by the device,
* the application should use {@link android.hardware.camera2.MultiResolutionImageReader } * {@link android.hardware.camera2.MultiResolutionImageReader }
* to capture RAW images from the currently active physical camera. Because different * can be used to capture RAW images from one of the underlying physical cameras (
* physical camera may have different RAW characteristics, the application needs to use * depending on current zoom level). Because different physical cameras may have
* the characteristics and result metadata of the active physical camera for the * different RAW characteristics, the application needs to use the characteristics
* relevant RAW metadata.</li> * and result metadata of the active physical camera for the relevant RAW metadata.</li>
* </ul> * </ul>
* <p>The capture request and result metadata tags required for backward compatible camera * <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 * functionalities will be solely based on the logical camera capability. On the other

File diff suppressed because it is too large Load Diff