通过configure_streams()接口框架将当前相机用例的流配置参数设置到HAL层相机设备。HAL层相机系统根据这些相机参数选择一个usecase用于后续的处理工作。
typedef struct camera3_stream_configuration {
uint32 num_streams;
camera3_stream_t **streams;
uint32_t operation_mode;
const camera_metadata_t *session_parameters;
}
框架使用上述数据结构定义当前相机用例的所有输出流和再处理的输入流,包括三个内容:
-
相机流。 HAL层输入/输出的流信息,包括流的格式,目的,存储空间,存放地址等
-
相机流的操作模式。
-
相机会话配置参数的地址。
ExtensionModule根据三个条件选出一个usecase:打开的相机是不是多摄、相机操作模式、流配置参数。usecase的规则如下:
UsecaseId | physical cameras | operation mode | streams | stream configs |
---|---|---|---|---|
SuperSlowMotionFRC | x | StreamConfigModeSuperSlowMotionFRC | x | |
MultiCamera | > 1 | x | x | |
Depth | x | x | 深度数据输出流(DataspaceDepth类型的数据存储格式) | |
QuadCFA | x | 2 | 1.2个图像流 2.logicalCameraType_Default类型的相机 3.sensor支持QCFA 4.sensor binning 尺寸小于jpeg/yuv snapshot流尺寸(否则是正常模式) 可能是QCFA,因为下边还有检查。 |
|
RawJPEG | x | 2 | 1.2个输出流 2.一个rawStream 3.一个jpeg snapshot类型输出流 |
|
3 | 1.3个流 2.一个rawStream 3.一个jpegSnapshotStream 4.DisableZSL() |
|||
PreviewZSL | x | 2 | 5个条件: 1.2个流 2.相机禁用ZSL(DisableZSL) 3.一个PreviewStream 4.一个JpegSnapshotStream或者YuvSnapshotStream 5.非protectedStream |
|
3 | 1.3个流 2.DisableZSL 3.PreviewZSLStream(一个previewStream,一个hiefcSnapshotStream,一个jpegSnapsot) |
|||
MFNR | x | 2 | 1.2个流 2.EnableMFNR |
|
VideoLiveShot | x | 3 | 1.3个流 2.VideoEISV2Enable或者VideoEISV3Enable 3.VideoLiveShotStream(JpegSnapshotStream+VideoStream(HEIF)) 4.DisableZSL ====== 1.3个流 2.EnableMFHDR 3.VideoEISV3Enable |
|
Default | StreamConfigModeMiuiSUPEREISVideo、 StreamConfigModeMiuiSUPEREISPROVideo StreamConfigModeLiveAutoZoom | x | ||
Torch | StreamConfigModeQTITorchWidget | x |