Merge "QCamera2: Add more traces for reprocessing" into oc-dr1-dev
diff --git a/msm8998/QCamera2/Android.mk b/msm8998/QCamera2/Android.mk
index 04552c6..eb7132e 100755
--- a/msm8998/QCamera2/Android.mk
+++ b/msm8998/QCamera2/Android.mk
@@ -129,12 +129,13 @@
LOCAL_CFLAGS += -DUSE_CAMERA_METABUFFER_UTILS
#LOCAL_STATIC_LIBRARIES := libqcamera2_util
+LOCAL_STATIC_LIBRARIES := android.hardware.camera.common@1.0-helper
LOCAL_C_INCLUDES += \
$(TARGET_OUT_HEADERS)/mm-core/omxcore \
$(TARGET_OUT_HEADERS)/qcom/display
LOCAL_C_INCLUDES += \
$(SRC_DISPLAY_HAL_DIR)/libqservice
-LOCAL_SHARED_LIBRARIES := libcamera_client liblog libhardware libutils libcutils libdl libsync
+LOCAL_SHARED_LIBRARIES := liblog libhardware libutils libcutils libdl libsync
LOCAL_SHARED_LIBRARIES += libmmcamera_interface libmmjpeg_interface libui libcamera_metadata
LOCAL_SHARED_LIBRARIES += libqdMetaData libqservice libbinder
LOCAL_SHARED_LIBRARIES += libcutils libdl libhdrplusclient libhdrplusmessenger
diff --git a/msm8998/QCamera2/HAL/QCameraParameters.h b/msm8998/QCamera2/HAL/QCameraParameters.h
index 379ecbc..6bb0ed8 100644
--- a/msm8998/QCamera2/HAL/QCameraParameters.h
+++ b/msm8998/QCamera2/HAL/QCameraParameters.h
@@ -24,7 +24,7 @@
#include <cutils/properties.h>
// System dependencies
-#include <camera/CameraParameters.h>
+#include <CameraParameters.h>
#include <utils/Errors.h>
// Camera dependencies
@@ -39,6 +39,8 @@
#include "mm_jpeg_interface.h"
}
+using ::android::hardware::camera::common::V1_0::helper::CameraParameters;
+using ::android::hardware::camera::common::V1_0::helper::Size;
using namespace android;
namespace qcamera {
diff --git a/msm8998/QCamera2/HAL3/QCamera3Channel.cpp b/msm8998/QCamera2/HAL3/QCamera3Channel.cpp
index bb11083..56da9e3 100644
--- a/msm8998/QCamera2/HAL3/QCamera3Channel.cpp
+++ b/msm8998/QCamera2/HAL3/QCamera3Channel.cpp
@@ -890,7 +890,26 @@
if (mOutOfSequenceBuffers.empty()) {
stream->cancelBuffer(oldestBufIndex);
}
- mOutOfSequenceBuffers.push_back(super_frame);
+
+ //push in order!
+ auto itr = mOutOfSequenceBuffers.begin();
+ for (; itr != mOutOfSequenceBuffers.end(); itr++) {
+ mm_camera_super_buf_t *super_buf = *itr;
+ uint32_t buf_idx = super_buf->bufs[0]->buf_idx;
+ int32_t frame_num = mMemory.getFrameNumber(buf_idx);
+ if (resultFrameNumber < frame_num) {
+ LOGE("Out of order frame!! set buffer status error flag!");
+ mOutOfSequenceBuffers.insert(itr, super_frame);
+ super_buf->bufs[0]->flags |= V4L2_BUF_FLAG_ERROR;
+ break;
+ }
+ }
+
+ if (itr == mOutOfSequenceBuffers.end()) {
+ LOGE("Add the frame to the end of mOutOfSequenceBuffers");
+ // add the buffer
+ mOutOfSequenceBuffers.push_back(super_frame);
+ }
return;
}
@@ -2175,7 +2194,7 @@
metadata_buffer_t->depth_data.depth_data = nullptr;
if (mDepthDataPresent) {
metadata_buffer_t->depth_data.depth_data =
- new uint8_t[MAX_DEPTH_DATA_SIZE];
+ new uint8_t[PD_DATA_SIZE];
}
} else {
LOGE("Invalid meta buffer at index: %d", i);
@@ -5432,10 +5451,6 @@
LOGE("Invalid depth stream!");
return BAD_VALUE;
}
- if (0 == data.length) {
- LOGE("Empty depth buffer");
- return BAD_VALUE;
- }
ssize_t length = data.length;
int32_t index = mGrallocMem.getBufferIndex(frameNumber);
@@ -5467,7 +5482,10 @@
(length + headerSize), maxBlobSize);
return BAD_VALUE;
}
- memcpy(dst, data.depth_data, length);
+
+ if (0 < length) {
+ memcpy(dst, data.depth_data, length);
+ }
memset(&jpegHeader, 0, headerSize);
jpegHeader.jpeg_blob_id = CAMERA3_JPEG_BLOB_ID;
diff --git a/msm8998/QCamera2/HAL3/QCamera3HWI.cpp b/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
index f06e0c3..9003437 100644
--- a/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
@@ -65,6 +65,7 @@
}
#include "cam_cond.h"
+using ::android::hardware::camera::common::V1_0::helper::CameraMetadata;
using namespace android;
namespace qcamera {
@@ -459,6 +460,7 @@
mHdrPlusRawSrcChannel(NULL),
mDummyBatchChannel(NULL),
mDepthChannel(NULL),
+ mDepthCloudMode(CAM_PD_DATA_SKIP),
mPerfLockMgr(),
mChannelHandle(0),
mFirstConfiguration(true),
@@ -2273,6 +2275,7 @@
if (mDepthChannel) {
mDepthChannel = NULL;
}
+ mDepthCloudMode = CAM_PD_DATA_SKIP;
mShutterDispatcher.clear();
mOutputBufferDispatcher.clear();
@@ -5759,13 +5762,34 @@
return -EINVAL;
}
- int32_t pdafEnable = depthRequestPresent ? 1 : 0;
+ cam_sensor_pd_data_t pdafEnable = (nullptr != mDepthChannel) ?
+ CAM_PD_DATA_SKIP : CAM_PD_DATA_DISABLED;
+ if (depthRequestPresent && mDepthChannel) {
+ if (request->settings) {
+ camera_metadata_ro_entry entry;
+ if (find_camera_metadata_ro_entry(request->settings,
+ NEXUS_EXPERIMENTAL_2017_PD_DATA_ENABLE, &entry) == 0) {
+ if (entry.data.u8[0]) {
+ pdafEnable = CAM_PD_DATA_ENABLED;
+ } else {
+ pdafEnable = CAM_PD_DATA_SKIP;
+ }
+ mDepthCloudMode = pdafEnable;
+ } else {
+ pdafEnable = mDepthCloudMode;
+ }
+ } else {
+ pdafEnable = mDepthCloudMode;
+ }
+ }
+
if (ADD_SET_PARAM_ENTRY_TO_BATCH(mParameters,
CAM_INTF_META_PDAF_DATA_ENABLE, pdafEnable)) {
LOGE("%s: Failed to enable PDAF data in parameters!", __func__);
pthread_mutex_unlock(&mMutex);
return BAD_VALUE;
}
+
if (request->input_buffer == NULL) {
/* Set the parameters to backend:
* - For every request in NORMAL MODE
@@ -9259,6 +9283,8 @@
gCamCapability[cameraId]->raw_meta_dim[indexPD].width;
int32_t depthHeight =
gCamCapability[cameraId]->raw_meta_dim[indexPD].height;
+ int32_t depthStride =
+ gCamCapability[cameraId]->raw_meta_dim[indexPD].width * 2;
int32_t depthSamplesCount = (depthWidth * depthHeight * 2) / 16;
assert(0 < depthSamplesCount);
staticInfo.update(ANDROID_DEPTH_MAX_DEPTH_SAMPLES,
@@ -9288,6 +9314,10 @@
uint8_t depthExclusive = ANDROID_DEPTH_DEPTH_IS_EXCLUSIVE_FALSE;
staticInfo.update(ANDROID_DEPTH_DEPTH_IS_EXCLUSIVE, &depthExclusive, 1);
+
+ int32_t pd_dimensions [] = {depthWidth, depthHeight, depthStride};
+ staticInfo.update(NEXUS_EXPERIMENTAL_2017_PD_DATA_DIMENSIONS,
+ pd_dimensions, sizeof(pd_dimensions) / sizeof(pd_dimensions[0]));
}
int32_t scalar_formats[] = {
@@ -10035,6 +10065,7 @@
NEXUS_EXPERIMENTAL_2017_HISTOGRAM_BINS,
TANGO_MODE_DATA_SENSOR_FULLFOV,
NEXUS_EXPERIMENTAL_2017_TRACKING_AF_TRIGGER,
+ NEXUS_EXPERIMENTAL_2017_PD_DATA_ENABLE,
};
size_t request_keys_cnt =
diff --git a/msm8998/QCamera2/HAL3/QCamera3HWI.h b/msm8998/QCamera2/HAL3/QCamera3HWI.h
index 90644b7..f38927d 100644
--- a/msm8998/QCamera2/HAL3/QCamera3HWI.h
+++ b/msm8998/QCamera2/HAL3/QCamera3HWI.h
@@ -31,7 +31,7 @@
#define __QCAMERA3HARDWAREINTERFACE_H__
// System dependencies
-#include <camera/CameraMetadata.h>
+#include <CameraMetadata.h>
#include <pthread.h>
#include <utils/KeyedVector.h>
#include <utils/List.h>
@@ -54,6 +54,7 @@
#include "mm_jpeg_interface.h"
}
+using ::android::hardware::camera::common::V1_0::helper::CameraMetadata;
using namespace android;
namespace qcamera {
@@ -519,6 +520,7 @@
QCamera3HdrPlusRawSrcChannel *mHdrPlusRawSrcChannel;
QCamera3RegularChannel *mDummyBatchChannel;
QCamera3DepthChannel *mDepthChannel;
+ cam_sensor_pd_data_t mDepthCloudMode; //Cache last configured mode
QCameraPerfLockMgr mPerfLockMgr;
uint32_t mChannelHandle;
diff --git a/msm8998/QCamera2/HAL3/QCamera3VendorTags.cpp b/msm8998/QCamera2/HAL3/QCamera3VendorTags.cpp
index 08bebd0..07915ed 100644
--- a/msm8998/QCamera2/HAL3/QCamera3VendorTags.cpp
+++ b/msm8998/QCamera2/HAL3/QCamera3VendorTags.cpp
@@ -353,6 +353,8 @@
{ "stats.ois_timestamps_boottime", TYPE_INT64 },
{ "stats.ois_shift_x", TYPE_INT32 },
{ "stats.ois_shift_y", TYPE_INT32 },
+ { "sensor.pd_data_dimensions", TYPE_INT32},
+ { "sensor.pd_data_enable", TYPE_BYTE},
};
vendor_tag_info_t tango_mode_data[TANGO_MODE_DATA_END -
@@ -582,6 +584,8 @@
(uint32_t)NEXUS_EXPERIMENTAL_2017_OIS_TIMESTAMPS_BOOTTIME,
(uint32_t)NEXUS_EXPERIMENTAL_2017_OIS_SHIFT_X,
(uint32_t)NEXUS_EXPERIMENTAL_2017_OIS_SHIFT_Y,
+ (uint32_t)NEXUS_EXPERIMENTAL_2017_PD_DATA_DIMENSIONS,
+ (uint32_t)NEXUS_EXPERIMENTAL_2017_PD_DATA_ENABLE,
//TANGO_MODE
(uint32_t)TANGO_MODE_DATA_SENSOR_FULLFOV,
diff --git a/msm8998/QCamera2/HAL3/QCamera3VendorTags.h b/msm8998/QCamera2/HAL3/QCamera3VendorTags.h
index 2711215..cbc57df 100644
--- a/msm8998/QCamera2/HAL3/QCamera3VendorTags.h
+++ b/msm8998/QCamera2/HAL3/QCamera3VendorTags.h
@@ -432,6 +432,9 @@
NEXUS_EXPERIMENTAL_2017_OIS_TIMESTAMPS_BOOTTIME,
NEXUS_EXPERIMENTAL_2017_OIS_SHIFT_X,
NEXUS_EXPERIMENTAL_2017_OIS_SHIFT_Y,
+ /* PD plumbing */
+ NEXUS_EXPERIMENTAL_2017_PD_DATA_DIMENSIONS,
+ NEXUS_EXPERIMENTAL_2017_PD_DATA_ENABLE,
NEXUS_EXPERIMENTAL_2017_END,
/* Select sensor mode for tango */
diff --git a/msm8998/QCamera2/stack/common/cam_intf.h b/msm8998/QCamera2/stack/common/cam_intf.h
index fce52aa..fa23bec 100644
--- a/msm8998/QCamera2/stack/common/cam_intf.h
+++ b/msm8998/QCamera2/stack/common/cam_intf.h
@@ -1211,7 +1211,7 @@
INCLUDE(CAM_INTF_META_BINNING_CORRECTION_MODE, cam_binning_correction_mode_t, 1);
INCLUDE(CAM_INTF_META_OIS_READ_DATA, cam_ois_data_t, 1);
INCLUDE(CAM_INTF_META_FRAME_OIS_DATA, cam_frame_ois_info_t, 1);
- INCLUDE(CAM_INTF_META_PDAF_DATA_ENABLE, int32_t, 1);
+ INCLUDE(CAM_INTF_META_PDAF_DATA_ENABLE, cam_sensor_pd_data_t, 1);
INCLUDE(CAM_INTF_META_STATS_HISTOGRAM_BINS, int32_t, 1);
INCLUDE(CAM_INTF_META_TRACKING_AF_TRIGGER, uint8_t, 1);
INCLUDE(CAM_INTF_META_AF_REGIONS_CONFIDENCE, int32_t, 1);
diff --git a/msm8998/QCamera2/stack/common/cam_types.h b/msm8998/QCamera2/stack/common/cam_types.h
index ab7a96d..5c9fc3a 100644
--- a/msm8998/QCamera2/stack/common/cam_types.h
+++ b/msm8998/QCamera2/stack/common/cam_types.h
@@ -47,7 +47,7 @@
#define OIS_DATA_MAX_SIZE (32)
#define MAX_OIS_SAMPLE_NUM_PER_FRAME (10)
-#define MAX_DEPTH_DATA_SIZE (4032*2*756)
+#define PD_DATA_SIZE (4032*2*758)
#define CEILING64(X) (((X) + 0x0003F) & 0xFFFFFFC0)
#define CEILING32(X) (((X) + 0x0001F) & 0xFFFFFFE0)
@@ -237,6 +237,12 @@
} cam_flicker_t;
typedef enum {
+ CAM_PD_DATA_DISABLED = 0,
+ CAM_PD_DATA_ENABLED = 1,
+ CAM_PD_DATA_SKIP = 2,
+} cam_sensor_pd_data_t;
+
+typedef enum {
CAM_FORMAT_JPEG = 0,
CAM_FORMAT_YUV_420_NV12 = 1,
CAM_FORMAT_YUV_420_NV21,
diff --git a/msm8998/QCameraParameters.h b/msm8998/QCameraParameters.h
index 391ca44..dd3b365 100644
--- a/msm8998/QCameraParameters.h
+++ b/msm8998/QCameraParameters.h
@@ -18,7 +18,10 @@
#define ANDROID_HARDWARE_QCAMERA_PARAMETERS_H
// Camera dependencies
-#include <camera/CameraParameters.h>
+#include <CameraParameters.h>
+
+using ::android::hardware::camera::common::V1_0::helper::CameraParameters;
+using ::android::hardware::camera::common::V1_0::helper::Size;
namespace android {