Camera3: Use different stream types for different streams
Add a different stream type for app callback streams, as well as
distinguish between zsl snapshot stream and non-zsl snapshot stream
by using different stream types.
Change-Id: I0d68ad61e1a3409bd9555af90895da95a8c9628d
diff --git a/camera/QCamera2/HAL/QCamera2HWI.cpp b/camera/QCamera2/HAL/QCamera2HWI.cpp
index 83268a2..22316c5 100644
--- a/camera/QCamera2/HAL/QCamera2HWI.cpp
+++ b/camera/QCamera2/HAL/QCamera2HWI.cpp
@@ -1271,6 +1271,7 @@
}
break;
case CAM_STREAM_TYPE_SNAPSHOT:
+ case CAM_STREAM_TYPE_NON_ZSL_SNAPSHOT:
{
if (mParameters.isZSLMode()) {
bufferCnt = zslQBuffers + minCircularBufNum;
@@ -1384,6 +1385,7 @@
}
break;
case CAM_STREAM_TYPE_SNAPSHOT:
+ case CAM_STREAM_TYPE_NON_ZSL_SNAPSHOT:
case CAM_STREAM_TYPE_RAW:
case CAM_STREAM_TYPE_METADATA:
case CAM_STREAM_TYPE_OFFLINE_PROC:
@@ -1458,6 +1460,7 @@
streamInfo->streaming_mode = CAM_STREAMING_MODE_CONTINUOUS;
switch (stream_type) {
case CAM_STREAM_TYPE_SNAPSHOT:
+ case CAM_STREAM_TYPE_NON_ZSL_SNAPSHOT:
case CAM_STREAM_TYPE_RAW:
if (mParameters.isZSLMode() && mParameters.getRecordingHintValue() != true) {
streamInfo->streaming_mode = CAM_STREAMING_MODE_CONTINUOUS;
@@ -2865,7 +2868,7 @@
return rc;
}
- rc = addStreamToChannel(pChannel, CAM_STREAM_TYPE_SNAPSHOT,
+ rc = addStreamToChannel(pChannel, CAM_STREAM_TYPE_NON_ZSL_SNAPSHOT,
snapshot_stream_cb_routine, this);
if (rc != NO_ERROR) {
ALOGE("%s: add snapshot stream failed, ret = %d", __func__, rc);
@@ -3080,7 +3083,7 @@
return rc;
}
- rc = addStreamToChannel(pChannel, CAM_STREAM_TYPE_SNAPSHOT,
+ rc = addStreamToChannel(pChannel, CAM_STREAM_TYPE_NON_ZSL_SNAPSHOT,
NULL, this);
if (rc != NO_ERROR) {
ALOGE("%s: add snapshot stream failed, ret = %d", __func__, rc);
diff --git a/camera/QCamera2/HAL/QCamera2HWICallbacks.cpp b/camera/QCamera2/HAL/QCamera2HWICallbacks.cpp
index f0f000c..8277414 100644
--- a/camera/QCamera2/HAL/QCamera2HWICallbacks.cpp
+++ b/camera/QCamera2/HAL/QCamera2HWICallbacks.cpp
@@ -149,7 +149,8 @@
QCameraStream *pStream =
pChannel->getStreamByHandle(recvd_frame->bufs[i]->stream_id);
if (pStream != NULL) {
- if (pStream->isTypeOf(CAM_STREAM_TYPE_SNAPSHOT)) {
+ if (pStream->isTypeOf(CAM_STREAM_TYPE_SNAPSHOT) ||
+ pStream->isTypeOf(CAM_STREAM_TYPE_NON_ZSL_SNAPSHOT)) {
main_stream = pStream;
main_frame = recvd_frame->bufs[i];
break;
@@ -855,7 +856,10 @@
break;
case QCAMERA_DUMP_FRM_SNAPSHOT:
{
- mParameters.getStreamDimension(CAM_STREAM_TYPE_SNAPSHOT, dim);
+ if (mParameters.isZSLMode())
+ mParameters.getStreamDimension(CAM_STREAM_TYPE_SNAPSHOT, dim);
+ else
+ mParameters.getStreamDimension(CAM_STREAM_TYPE_NON_ZSL_SNAPSHOT, dim);
snprintf(buf, sizeof(buf), "/data/%ds_%dx%d_%d.yuv",
mDumpFrmCnt, dim.width, dim.height, index);
}
@@ -876,7 +880,10 @@
break;
case QCAMERA_DUMP_FRM_JPEG:
{
- mParameters.getStreamDimension(CAM_STREAM_TYPE_SNAPSHOT, dim);
+ if (mParameters.isZSLMode())
+ mParameters.getStreamDimension(CAM_STREAM_TYPE_SNAPSHOT, dim);
+ else
+ mParameters.getStreamDimension(CAM_STREAM_TYPE_NON_ZSL_SNAPSHOT, dim);
snprintf(buf, sizeof(buf), "/data/%dj_%dx%d_%d.yuv",
mDumpFrmCnt, dim.width, dim.height, index);
}
diff --git a/camera/QCamera2/HAL/QCameraChannel.cpp b/camera/QCamera2/HAL/QCameraChannel.cpp
index e373131..944f381 100644
--- a/camera/QCamera2/HAL/QCameraChannel.cpp
+++ b/camera/QCamera2/HAL/QCameraChannel.cpp
@@ -656,7 +656,9 @@
streamInfo->reprocess_config.pp_feature_config = config;
if (!(pStream->isTypeOf(CAM_STREAM_TYPE_SNAPSHOT) ||
- pStream->isOrignalTypeOf(CAM_STREAM_TYPE_SNAPSHOT))) {
+ pStream->isTypeOf(CAM_STREAM_TYPE_NON_ZSL_SNAPSHOT) ||
+ pStream->isOrignalTypeOf(CAM_STREAM_TYPE_SNAPSHOT) ||
+ pStream->isOrignalTypeOf(CAM_STREAM_TYPE_NON_ZSL_SNAPSHOT))) {
streamInfo->reprocess_config.pp_feature_config.feature_mask &= ~CAM_QCOM_FEATURE_CAC;
}
if (streamInfo->reprocess_config.pp_feature_config.feature_mask & CAM_QCOM_FEATURE_ROTATION) {
diff --git a/camera/QCamera2/HAL/QCameraParameters.cpp b/camera/QCamera2/HAL/QCameraParameters.cpp
index 79a9046..0ca6c10 100644
--- a/camera/QCamera2/HAL/QCameraParameters.cpp
+++ b/camera/QCamera2/HAL/QCameraParameters.cpp
@@ -4771,6 +4771,7 @@
format = mPreviewFormat;
break;
case CAM_STREAM_TYPE_SNAPSHOT:
+ case CAM_STREAM_TYPE_NON_ZSL_SNAPSHOT:
if ( mPictureFormat == CAM_FORMAT_YUV_422_NV16 ) {
format = CAM_FORMAT_YUV_422_NV16;
} else {
@@ -4834,6 +4835,7 @@
str = get(KEY_QC_VIDEO_FLIP);
break;
case CAM_STREAM_TYPE_SNAPSHOT:
+ case CAM_STREAM_TYPE_NON_ZSL_SNAPSHOT:
str = get(KEY_QC_SNAPSHOT_PICTURE_FLIP);
break;
default:
@@ -4880,6 +4882,7 @@
getPreviewSize(&dim.width, &dim.height);
break;
case CAM_STREAM_TYPE_SNAPSHOT:
+ case CAM_STREAM_TYPE_NON_ZSL_SNAPSHOT:
if (getRecordingHintValue() == true) {
// live snapshot
getLiveSnapshotSize(dim);
diff --git a/camera/QCamera2/HAL/QCameraPostProc.cpp b/camera/QCamera2/HAL/QCameraPostProc.cpp
index f05fefa..01b70f1 100644
--- a/camera/QCamera2/HAL/QCameraPostProc.cpp
+++ b/camera/QCamera2/HAL/QCameraPostProc.cpp
@@ -955,7 +955,9 @@
pChannel->getStreamByHandle(recvd_frame->bufs[i]->stream_id);
if (pStream != NULL) {
if (pStream->isTypeOf(CAM_STREAM_TYPE_SNAPSHOT) ||
- pStream->isOrignalTypeOf(CAM_STREAM_TYPE_SNAPSHOT)) {
+ pStream->isTypeOf(CAM_STREAM_TYPE_NON_ZSL_SNAPSHOT) ||
+ pStream->isOrignalTypeOf(CAM_STREAM_TYPE_SNAPSHOT) ||
+ pStream->isOrignalTypeOf(CAM_STREAM_TYPE_NON_ZSL_SNAPSHOT)) {
main_stream = pStream;
main_frame = recvd_frame->bufs[i];
} else if (pStream->isTypeOf(CAM_STREAM_TYPE_PREVIEW) ||
@@ -1135,6 +1137,7 @@
mm_camera_buf_def_t *frame = NULL;
for ( int i= 0 ; i < recvd_frame->num_bufs ; i++ ) {
if ( recvd_frame->bufs[i]->stream_type == CAM_STREAM_TYPE_SNAPSHOT ||
+ recvd_frame->bufs[i]->stream_type == CAM_STREAM_TYPE_NON_ZSL_SNAPSHOT ||
recvd_frame->bufs[i]->stream_type == CAM_STREAM_TYPE_RAW ) {
frame = recvd_frame->bufs[i];
break;
diff --git a/camera/QCamera2/HAL3/QCamera3Channel.cpp b/camera/QCamera2/HAL3/QCamera3Channel.cpp
index c494488..1074dea 100644
--- a/camera/QCamera2/HAL3/QCamera3Channel.cpp
+++ b/camera/QCamera2/HAL3/QCamera3Channel.cpp
@@ -581,7 +581,7 @@
streamFormat = CAM_FORMAT_YUV_420_NV21;
}
} else if(mCamera3Stream->format == HAL_PIXEL_FORMAT_YCbCr_420_888) {
- streamType = CAM_STREAM_TYPE_PREVIEW;
+ streamType = CAM_STREAM_TYPE_CALLBACK;
streamFormat = CAM_FORMAT_YUV_420_NV21;
} else {
//TODO: Fail for other types of streams for now
@@ -936,7 +936,7 @@
return rc;
}
- streamType = CAM_STREAM_TYPE_SNAPSHOT;
+ streamType = CAM_STREAM_TYPE_NON_ZSL_SNAPSHOT;
streamFormat = CAM_FORMAT_YUV_420_NV21;
streamDim.width = mCamera3Stream->width;
streamDim.height = mCamera3Stream->height;
@@ -1072,7 +1072,7 @@
}
if (mCamera3Stream->format == HAL_PIXEL_FORMAT_BLOB) {
- streamType = CAM_STREAM_TYPE_SNAPSHOT;
+ streamType = CAM_STREAM_TYPE_NON_ZSL_SNAPSHOT;
streamFormat = CAM_FORMAT_YUV_420_NV21;
} else {
//TODO: Fail for other types of streams for now
diff --git a/camera/QCamera2/HAL3/QCamera3PostProc.cpp b/camera/QCamera2/HAL3/QCamera3PostProc.cpp
index 6386f62..86e6432 100644
--- a/camera/QCamera2/HAL3/QCamera3PostProc.cpp
+++ b/camera/QCamera2/HAL3/QCamera3PostProc.cpp
@@ -812,6 +812,7 @@
srcChannel->getStreamByHandle(recvd_frame->bufs[i]->stream_id);
if (srcStream != NULL) {
if (srcStream->isTypeOf(CAM_STREAM_TYPE_SNAPSHOT) ||
+ srcStream->isTypeOf(CAM_STREAM_TYPE_NON_ZSL_SNAPSHOT) ||
srcStream->isTypeOf(CAM_STREAM_TYPE_OFFLINE_PROC)) {
main_stream = srcStream;
main_frame = recvd_frame->bufs[i];
diff --git a/camera/QCamera2/stack/common/cam_types.h b/camera/QCamera2/stack/common/cam_types.h
index ce62712..58d77df 100644
--- a/camera/QCamera2/stack/common/cam_types.h
+++ b/camera/QCamera2/stack/common/cam_types.h
@@ -199,8 +199,9 @@
CAM_STREAM_TYPE_VIDEO, /* video */
/* applies to HAL 3 */
+ CAM_STREAM_TYPE_CALLBACK, /* app requested callback */
+ CAM_STREAM_TYPE_NON_ZSL_SNAPSHOT, /* non zsl snapshot */
CAM_STREAM_TYPE_IMPL_DEFINED, /* opaque format: could be display, video enc, ZSL YUV */
- CAM_STREAM_TYPE_YUV, /* app requested callback stream type */
/* applies to both HAL 1 and HAL 3 */
CAM_STREAM_TYPE_METADATA, /* meta data */
diff --git a/camera/QCamera2/stack/mm-camera-interface/src/mm_camera_stream.c b/camera/QCamera2/stack/mm-camera-interface/src/mm_camera_stream.c
index 77d29a0..81ad4a3 100644
--- a/camera/QCamera2/stack/mm-camera-interface/src/mm_camera_stream.c
+++ b/camera/QCamera2/stack/mm-camera-interface/src/mm_camera_stream.c
@@ -2275,12 +2275,14 @@
switch (stream_info->reprocess_config.online.input_stream_type) {
case CAM_STREAM_TYPE_PREVIEW:
+ case CAM_STREAM_TYPE_CALLBACK:
case CAM_STREAM_TYPE_POSTVIEW:
rc = mm_stream_calc_offset_preview(stream_info->fmt,
&stream_info->dim,
buf_planes);
break;
case CAM_STREAM_TYPE_SNAPSHOT:
+ case CAM_STREAM_TYPE_NON_ZSL_SNAPSHOT:
rc = mm_stream_calc_offset_snapshot(stream_info->fmt,
&stream_info->dim,
padding,
@@ -2338,12 +2340,14 @@
switch (my_obj->stream_info->stream_type) {
case CAM_STREAM_TYPE_PREVIEW:
+ case CAM_STREAM_TYPE_CALLBACK:
case CAM_STREAM_TYPE_POSTVIEW:
rc = mm_stream_calc_offset_preview(my_obj->stream_info->fmt,
&dim,
&my_obj->stream_info->buf_planes);
break;
case CAM_STREAM_TYPE_SNAPSHOT:
+ case CAM_STREAM_TYPE_NON_ZSL_SNAPSHOT:
rc = mm_stream_calc_offset_snapshot(my_obj->stream_info->fmt,
&dim,
&my_obj->padding_info,