@ -1857,8 +1857,10 @@ typedef enum acamera_metadata_tag {
* stream combinations of LIMITED hardware level are guaranteed . < / p >
* stream combinations of LIMITED hardware level are guaranteed . < / p >
* < p > For a logical multi - camera , bokeh may be implemented by stereo vision from sub - cameras
* < p > For a logical multi - camera , bokeh may be implemented by stereo vision from sub - cameras
* with different field of view . As a result , when bokeh mode is enabled , the camera device
* with different field of view . As a result , when bokeh mode is enabled , the camera device
* may override android. scaler . CropRegion , and the field of view will be smaller than when
* may override ACAMERA_SCALER_CROP_REGION , and the field of view will be smaller than when
* bokeh mode is off . < / p >
* bokeh mode is off . < / p >
*
* @ see ACAMERA_SCALER_CROP_REGION
*/
*/
ACAMERA_CONTROL_BOKEH_MODE = // byte (acamera_metadata_enum_android_control_bokeh_mode_t)
ACAMERA_CONTROL_BOKEH_MODE = // byte (acamera_metadata_enum_android_control_bokeh_mode_t)
ACAMERA_CONTROL_START + 45 ,
ACAMERA_CONTROL_START + 45 ,
@ -1873,8 +1875,10 @@ typedef enum acamera_metadata_tag {
* < / ul > < / p >
* < / ul > < / p >
*
*
* < p > If the camera device supports zoom - out from 1 x zoom , minZoom will be less than 1.0 , and
* < p > If the camera device supports zoom - out from 1 x zoom , minZoom will be less than 1.0 , and
* setting android. control . zoomRation to values less than 1.0 increases the camera ' s field
* setting ACAMERA_CONTROL_ZOOM_RATIO to values less than 1.0 increases the camera ' s field
* of view . < / p >
* of view . < / p >
*
* @ see ACAMERA_CONTROL_ZOOM_RATIO
*/
*/
ACAMERA_CONTROL_ZOOM_RATIO_RANGE = // float[2]
ACAMERA_CONTROL_ZOOM_RATIO_RANGE = // float[2]
ACAMERA_CONTROL_START + 46 ,
ACAMERA_CONTROL_START + 46 ,
@ -3284,32 +3288,70 @@ typedef enum acamera_metadata_tag {
* < p > For devices not supporting ACAMERA_DISTORTION_CORRECTION_MODE control , the coordinate
* < p > For devices not supporting ACAMERA_DISTORTION_CORRECTION_MODE control , the coordinate
* system always follows that of ACAMERA_SENSOR_INFO_ACTIVE_ARRAY_SIZE , with < code > ( 0 , 0 ) < / code > being
* system always follows that of ACAMERA_SENSOR_INFO_ACTIVE_ARRAY_SIZE , with < code > ( 0 , 0 ) < / code > being
* the top - left pixel of the active array . < / p >
* the top - left pixel of the active array . < / p >
* < p > For devices supporting ACAMERA_DISTORTION_CORRECTION_MODE control , the coordinate
* < p > For devices supporting ACAMERA_DISTORTION_CORRECTION_MODE control , the coordinate system
* system depends on the mode being set .
* depends on the mode being set . When the distortion correction mode is OFF , the
* When the distortion correction mode is OFF , the coordinate system follows
* coordinate system follows ACAMERA_SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE , with < code > ( 0 ,
* ACAMERA_SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE , with
* 0 ) < / code > being the top - left pixel of the pre - correction active array . When the distortion
* < code > ( 0 , 0 ) < / code > being the top - left pixel of the pre - correction active array .
* correction mode is not OFF , the coordinate system follows
* When the distortion correction mode is not OFF , the coordinate system follows
* ACAMERA_SENSOR_INFO_ACTIVE_ARRAY_SIZE , with < code > ( 0 , 0 ) < / code > being the top - left pixel of the
* ACAMERA_SENSOR_INFO_ACTIVE_ARRAY_SIZE , with
* active array . < / p >
* < code > ( 0 , 0 ) < / code > being the top - left pixel of the active array . < / p >
* < p > Output streams use this rectangle to produce their output , cropping to a smaller region
* < p > Output streams use this rectangle to produce their output ,
* if necessary to maintain the stream ' s aspect ratio , then scaling the sensor input to
* cropping to a smaller region if necessary to maintain the
* stream ' s aspect ratio , then scaling the sensor input to
* match the output ' s configured resolution . < / p >
* match the output ' s configured resolution . < / p >
* < p > The crop region is applied after the RAW to other color
* < p > The crop region is applied after the RAW to other color space ( e . g . YUV )
* space ( e . g . YUV ) conversion . Since raw streams
* conversion . Since raw streams ( e . g . RAW16 ) don ' t have the conversion stage , they are not
* ( e . g . RAW16 ) don ' t have the conversion stage , they are not
* croppable . The crop region will be ignored by raw streams . < / p >
* croppable . The crop region will be ignored by raw streams . < / p >
* < p > For non - raw streams , any additional per - stream cropping will
* < p > For non - raw streams , any additional per - stream cropping will be done to maximize the
* be done to maximize the final pixel area of the stream . < / p >
* final pixel area of the stream . < / p >
* < p > For example , if the crop region is set to a 4 : 3 aspect
* < p > For example , if the crop region is set to a 4 : 3 aspect ratio , then 4 : 3 streams will use
* ratio , then 4 : 3 streams will use the exact crop
* the exact crop region . 16 : 9 streams will further crop vertically ( letterbox ) . < / p >
* region . 16 : 9 streams will further crop vertically
* < p > Conversely , if the crop region is set to a 16 : 9 , then 4 : 3 outputs will crop horizontally
* ( letterbox ) . < / p >
* ( pillarbox ) , and 16 : 9 streams will match exactly . These additional crops will be
* < p > Conversely , if the crop region is set to a 16 : 9 , then 4 : 3
* centered within the crop region . < / p >
* outputs will crop horizontally ( pillarbox ) , and 16 : 9
* < p > To illustrate , here are several scenarios of different crop regions and output streams ,
* streams will match exactly . These additional crops will
* for a hypothetical camera device with an active array of size < code > ( 2000 , 1500 ) < / code > . Note that
* be centered within the crop region . < / p >
* several of these examples use non - centered crop regions for ease of illustration ; such
* regions are only supported on devices with FREEFORM capability
* ( ACAMERA_SCALER_CROPPING_TYPE < code > = = FREEFORM < / code > ) , but this does not affect the way the crop
* rules work otherwise . < / p >
* < ul >
* < li > Camera Configuration : < ul >
* < li > Active array size : < code > 2000 x1500 < / code > ( 3 MP , 4 : 3 aspect ratio ) < / li >
* < li > Output stream # 1 : < code > 640 x480 < / code > ( VGA , 4 : 3 aspect ratio ) < / li >
* < li > Output stream # 2 : < code > 1280 x720 < / code > ( 720 p , 16 : 9 aspect ratio ) < / li >
* < / ul >
* < / li >
* < li > Case # 1 : 4 : 3 crop region with 2 x digital zoom < ul >
* < li > Crop region : < code > Rect ( 500 , 375 , 1500 , 1125 ) // (left, top, right, bottom)</code></li>
* < li > < img alt = " 4:3 aspect ratio crop diagram " src = " ../images/camera2/metadata/android.scaler.cropRegion/crop-region-43-ratio.png " / > < / li >
* < li > < code > 640 x480 < / code > stream source area : < code > ( 500 , 375 , 1500 , 1125 ) < / code > ( equal to crop region ) < / li >
* < li > < code > 1280 x720 < / code > stream source area : < code > ( 500 , 469 , 1500 , 1031 ) < / code > ( letterboxed ) < / li >
* < / ul >
* < / li >
* < li > Case # 2 : 16 : 9 crop region with ~ 1.5 x digital zoom . < ul >
* < li > Crop region : < code > Rect ( 500 , 375 , 1833 , 1125 ) < / code > < / li >
* < li > < img alt = " 16:9 aspect ratio crop diagram " src = " ../images/camera2/metadata/android.scaler.cropRegion/crop-region-169-ratio.png " / > < / li >
* < li > < code > 640 x480 < / code > stream source area : < code > ( 666 , 375 , 1666 , 1125 ) < / code > ( pillarboxed ) < / li >
* < li > < code > 1280 x720 < / code > stream source area : < code > ( 500 , 375 , 1833 , 1125 ) < / code > ( equal to crop region ) < / li >
* < / ul >
* < / li >
* < li > Case # 3 : 1 : 1 crop region with ~ 2.6 x digital zoom . < ul >
* < li > Crop region : < code > Rect ( 500 , 375 , 1250 , 1125 ) < / code > < / li >
* < li > < img alt = " 1:1 aspect ratio crop diagram " src = " ../images/camera2/metadata/android.scaler.cropRegion/crop-region-11-ratio.png " / > < / li >
* < li > < code > 640 x480 < / code > stream source area : < code > ( 500 , 469 , 1250 , 1031 ) < / code > ( letterboxed ) < / li >
* < li > < code > 1280 x720 < / code > stream source area : < code > ( 500 , 543 , 1250 , 957 ) < / code > ( letterboxed ) < / li >
* < / ul >
* < / li >
* < li > Case # 4 : Replace < code > 640 x480 < / code > stream with < code > 1024 x1024 < / code > stream , with 4 : 3 crop region : < ul >
* < li > Crop region : < code > Rect ( 500 , 375 , 1500 , 1125 ) < / code > < / li >
* < li > < img alt = " Square output, 4:3 aspect ratio crop diagram " src = " ../images/camera2/metadata/android.scaler.cropRegion/crop-region-43-square-ratio.png " / > < / li >
* < li > < code > 1024 x1024 < / code > stream source area : < code > ( 625 , 375 , 1375 , 1125 ) < / code > ( pillarboxed ) < / li >
* < li > < code > 1280 x720 < / code > stream source area : < code > ( 500 , 469 , 1500 , 1031 ) < / code > ( letterboxed ) < / li >
* < li > Note that in this case , neither of the two outputs is a subset of the other , with
* each containing image data the other doesn ' t have . < / li >
* < / ul >
* < / li >
* < / ul >
* < p > If the coordinate system is ACAMERA_SENSOR_INFO_ACTIVE_ARRAY_SIZE , the width and height
* < p > If the coordinate system is ACAMERA_SENSOR_INFO_ACTIVE_ARRAY_SIZE , the width and height
* of the crop region cannot be set to be smaller than
* of the crop region cannot be set to be smaller than
* < code > floor ( activeArraySize . width / ACAMERA_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM ) < / code > and
* < code > floor ( activeArraySize . width / ACAMERA_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM ) < / code > and
@ -3320,23 +3362,22 @@ typedef enum acamera_metadata_tag {
* and
* and
* < code > floor ( preCorrectionActiveArraySize . height / ACAMERA_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM ) < / code > ,
* < code > floor ( preCorrectionActiveArraySize . height / ACAMERA_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM ) < / code > ,
* respectively . < / p >
* respectively . < / p >
* < p > The camera device may adjust the crop region to account
* < p > The camera device may adjust the crop region to account for rounding and other hardware
* for rounding and other hardware requirements ; the final
* requirements ; the final crop region used will be included in the output capture result . < / p >
* crop region used will be included in the output capture
* result . < / p >
* < p > Starting from API level 30 , it ' s strongly recommended to use ACAMERA_CONTROL_ZOOM_RATIO
* < p > Starting from API level 30 , it ' s strongly recommended to use ACAMERA_CONTROL_ZOOM_RATIO
* to take advantage of better support for zoom with logical multi - camera . The benefits
* to take advantage of better support for zoom with logical multi - camera . The benefits
* include better precision with optical - digital zoom combination , and ability to do
* include better precision with optical - digital zoom combination , and ability to do
* zoom - out from 1.0 x . When using ACAMERA_CONTROL_ZOOM_RATIO for zoom , the crop region in
* zoom - out from 1.0 x . When using ACAMERA_CONTROL_ZOOM_RATIO for zoom , the crop region in
* the capture request must be either letterboxing or pillarboxing ( but not both ) . The
* the capture request must be either letterboxing or pillarboxing ( but not both ) . The
* coordinate system is post - zoom , meaning that the activeArraySize or
* coordinate system is post - zoom , meaning that the activeArraySize or
* preCorrectionActiveArraySize covers the camera device ' s field of view " after " zoom .
* preCorrectionActiveArraySize covers the camera device ' s field of view " after " zoom . See
* See ACAMERA_CONTROL_ZOOM_RATIO for details . < / p >
* ACAMERA_CONTROL_ZOOM_RATIO for details . < / p >
* < p > The data representation is int [ 4 ] , which maps to ( left , top , width , height ) . < / p >
* < p > The data representation is int [ 4 ] , which maps to ( left , top , width , height ) . < / p >
*
*
* @ see ACAMERA_CONTROL_ZOOM_RATIO
* @ see ACAMERA_CONTROL_ZOOM_RATIO
* @ see ACAMERA_DISTORTION_CORRECTION_MODE
* @ see ACAMERA_DISTORTION_CORRECTION_MODE
* @ see ACAMERA_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM
* @ see ACAMERA_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM
* @ see ACAMERA_SCALER_CROPPING_TYPE
* @ see ACAMERA_SENSOR_INFO_ACTIVE_ARRAY_SIZE
* @ see ACAMERA_SENSOR_INFO_ACTIVE_ARRAY_SIZE
* @ see ACAMERA_SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
* @ see ACAMERA_SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
*/
*/