Merge "QCamera3: Fail unsupported stream configurations" into mnc-dr-dev
diff --git a/QCamera2/HAL3/QCamera3Channel.cpp b/QCamera2/HAL3/QCamera3Channel.cpp
index acf435d..22adde5 100644
--- a/QCamera2/HAL3/QCamera3Channel.cpp
+++ b/QCamera2/HAL3/QCamera3Channel.cpp
@@ -35,6 +35,7 @@
#include <cstdlib>
#include <stdio.h>
#include <string.h>
+#include <linux/videodev2.h>
#include <hardware/camera3.h>
#include <system/camera_metadata.h>
#include <gralloc_priv.h>
@@ -55,6 +56,7 @@
#define DEFAULT_FORMAT CAM_FORMAT_YUV_420_NV21
#define CALLBACK_FORMAT CAM_FORMAT_YUV_420_NV21
#define RAW_FORMAT CAM_FORMAT_BAYER_MIPI_RAW_10BPP_GBRG
+#define IS_BUFFER_ERROR(x) (((x) & V4L2_QCOM_BUF_DATA_CORRUPT) == V4L2_QCOM_BUF_DATA_CORRUPT)
/*===========================================================================
* FUNCTION : QCamera3Channel
@@ -609,7 +611,13 @@
result.stream = mCamera3Stream;
result.buffer = resultBuffer;
- result.status = CAMERA3_BUFFER_STATUS_OK;
+ if (IS_BUFFER_ERROR(super_frame->bufs[0]->flags)) {
+ result.status = CAMERA3_BUFFER_STATUS_ERROR;
+ ALOGW("%s: %d CAMERA3_BUFFER_STATUS_ERROR for stream_type: %d",
+ __func__, __LINE__, mStreams[0]->getMyType());
+ } else {
+ result.status = CAMERA3_BUFFER_STATUS_OK;
+ }
result.acquire_fence = -1;
result.release_fence = -1;
if(mPerFrameMapUnmapEnable) {
diff --git a/QCamera2/stack/common/mm_camera_interface.h b/QCamera2/stack/common/mm_camera_interface.h
index debf83f..e203974 100644
--- a/QCamera2/stack/common/mm_camera_interface.h
+++ b/QCamera2/stack/common/mm_camera_interface.h
@@ -115,6 +115,7 @@
* @frame_len : length of the whole frame, to be filled during
* mem allocation
* @mem_info : user specific pointer to additional mem info
+* @flags: v4l2_buffer flags, used to report error in data buffers
**/
typedef struct mm_camera_buf_def {
uint32_t stream_id;
@@ -132,6 +133,7 @@
void *buffer;
size_t frame_len;
void *mem_info;
+ uint32_t flags;
} mm_camera_buf_def_t;
/** mm_camera_super_buf_t: super buf structure for bundled
diff --git a/QCamera2/stack/mm-camera-interface/src/mm_camera_stream.c b/QCamera2/stack/mm-camera-interface/src/mm_camera_stream.c
index 373cde4..8511bba 100755
--- a/QCamera2/stack/mm-camera-interface/src/mm_camera_stream.c
+++ b/QCamera2/stack/mm-camera-interface/src/mm_camera_stream.c
@@ -1266,12 +1266,14 @@
buf_info->buf->frame_idx = vb.sequence;
buf_info->buf->ts.tv_sec = vb.timestamp.tv_sec;
buf_info->buf->ts.tv_nsec = vb.timestamp.tv_usec * 1000;
+ buf_info->buf->flags = vb.flags;
CDBG_HIGH("%s: VIDIOC_DQBUF buf_index %d, frame_idx %d, stream type %d, rc %d,"
- "queued: %d, buf_type = %d",
+ "queued: %d, buf_type = %d flags = %d",
__func__, vb.index, buf_info->buf->frame_idx,
my_obj->stream_info->stream_type, rc,
- my_obj->queued_buffer_count, buf_info->buf->buf_type);
+ my_obj->queued_buffer_count, buf_info->buf->buf_type,
+ buf_info->buf->flags);
buf_info->buf->is_uv_subsampled =
(vb.reserved == V4L2_PIX_FMT_NV14 || vb.reserved == V4L2_PIX_FMT_NV41);