merge in lmp-mr1-nova-release history after reset to lmp-mr1-dev
diff --git a/camera/QCamera2/HAL3/QCamera3HWI.cpp b/camera/QCamera2/HAL3/QCamera3HWI.cpp
index 3b122b4..df656d2 100755
--- a/camera/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/camera/QCamera2/HAL3/QCamera3HWI.cpp
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2013, The Linux Foundataion. All rights reserved.
+/* Copyright (c) 2012-2013, 2015, The Linux Foundataion. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -164,7 +164,8 @@
mParameters(NULL),
mJpegSettings(NULL),
mIsZslMode(false),
- m_pPowerModule(NULL)
+ m_pPowerModule(NULL),
+ mPrecaptureId(0)
{
mCameraDevice.common.tag = HARDWARE_DEVICE_TAG;
mCameraDevice.common.version = CAMERA_DEVICE_API_VERSION_3_0;
@@ -875,19 +876,21 @@
streamTypeMask |= channel->getStreamTypeMask();
}
- rc = setFrameParameters(request->frame_number, request->settings, streamTypeMask);
- if (rc < 0) {
- ALOGE("%s: fail to set frame parameters", __func__);
- pthread_mutex_unlock(&mMutex);
- return rc;
- }
-
- /* Update pending request list and pending buffers map */
PendingRequestInfo pendingRequest;
pendingRequest.frame_number = frameNumber;
pendingRequest.num_buffers = request->num_output_buffers;
pendingRequest.request_id = request_id;
pendingRequest.blob_request = blob_request;
+ pendingRequest.ae_trigger.trigger_id = mPrecaptureId;
+ pendingRequest.ae_trigger.trigger = CAM_AEC_TRIGGER_IDLE;
+
+ rc = setFrameParameters(request->frame_number, request->settings,
+ streamTypeMask, pendingRequest.ae_trigger);
+ if (rc < 0) {
+ ALOGE("%s: fail to set frame parameters", __func__);
+ pthread_mutex_unlock(&mMutex);
+ return rc;
+ }
for (size_t i = 0; i < request->num_output_buffers; i++) {
RequestedBufferInfo requestedBuf;
@@ -1077,7 +1080,8 @@
result.result = dummyMetadata.release();
} else {
result.result = translateCbMetadataToResultMetadata(metadata,
- current_capture_time, i->request_id);
+ current_capture_time, i->request_id, i->ae_trigger);
+
if (i->blob_request && needReprocess()) {
//If it is a blob request then send the metadata to the picture channel
mPictureChannel->queueMetadata(metadata_buf);
@@ -1219,7 +1223,7 @@
camera_metadata_t*
QCamera3HardwareInterface::translateCbMetadataToResultMetadata
(metadata_buffer_t *metadata, nsecs_t timestamp,
- int32_t request_id)
+ int32_t request_id, const cam_trigger_t &aeTrigger)
{
CameraMetadata camMetadata;
camera_metadata_t* resultMetadata;
@@ -1263,9 +1267,8 @@
(uint8_t *)POINTER_OF(CAM_INTF_META_COLOR_CORRECT_MODE, metadata);
camMetadata.update(ANDROID_COLOR_CORRECTION_MODE, color_correct_mode, 1);
- int32_t *ae_precapture_id =
- (int32_t *)POINTER_OF(CAM_INTF_META_AEC_PRECAPTURE_ID, metadata);
- camMetadata.update(ANDROID_CONTROL_AE_PRECAPTURE_ID, ae_precapture_id, 1);
+ camMetadata.update(ANDROID_CONTROL_AE_PRECAPTURE_ID,
+ &aeTrigger.trigger_id, 1);
/*aec regions*/
cam_area_t *hAeRegions =
@@ -1277,9 +1280,17 @@
uint8_t ae_state = ANDROID_CONTROL_AE_STATE_CONVERGED;
camMetadata.update(ANDROID_CONTROL_AE_STATE, &ae_state, 1);
} else {
- uint8_t *ae_state =
- (uint8_t *)POINTER_OF(CAM_INTF_META_AEC_STATE, metadata);
- camMetadata.update(ANDROID_CONTROL_AE_STATE, ae_state, 1);
+ uint8_t ae_state =
+ *(uint8_t *)POINTER_OF(CAM_INTF_META_AEC_STATE, metadata);
+ //Override AE state for front(YUV) sensor if corresponding request
+ //contain a precapture trigger. This is to work around the precapture
+ //trigger timeout for YUV sensor.
+ if (gCamCapability[mCameraId]->position == CAM_POSITION_FRONT &&
+ aeTrigger.trigger_id > 0 && aeTrigger.trigger ==
+ ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER_START) {
+ ae_state = ANDROID_CONTROL_AE_STATE_CONVERGED;
+ }
+ camMetadata.update(ANDROID_CONTROL_AE_STATE, &ae_state, 1);
}
uint8_t *focusMode =
(uint8_t *)POINTER_OF(CAM_INTF_PARM_FOCUS_MODE, metadata);
@@ -2567,12 +2578,14 @@
* @frame_id : frame number for this particular request
* @settings : frame settings information from framework
* @streamTypeMask : bit mask of stream types on which buffers are requested
+ * @aeTrigger : Return aeTrigger if it exists in the request
*
* RETURN : success: NO_ERROR
* failure:
*==========================================================================*/
int QCamera3HardwareInterface::setFrameParameters(int frame_id,
- const camera_metadata_t *settings, uint32_t streamTypeMask)
+ const camera_metadata_t *settings, uint32_t streamTypeMask,
+ cam_trigger_t &aeTrigger)
{
/*translate from camera_metadata_t type to parm_type_t*/
int rc = 0;
@@ -2605,7 +2618,7 @@
}
if(settings != NULL){
- rc = translateMetadataToParameters(settings);
+ rc = translateMetadataToParameters(settings, aeTrigger);
}
/*set the parameters to backend*/
mCameraHandle->ops->set_parms(mCameraHandle->camera_handle, mParameters);
@@ -2620,13 +2633,13 @@
*
* PARAMETERS :
* @settings : frame settings information from framework
- *
+ * @aeTrigger : output ae trigger if it's set in request
*
* RETURN : success: NO_ERROR
* failure:
*==========================================================================*/
-int QCamera3HardwareInterface::translateMetadataToParameters
- (const camera_metadata_t *settings)
+int QCamera3HardwareInterface::translateMetadataToParameters(
+ const camera_metadata_t *settings, cam_trigger_t &aeTrigger)
{
int rc = 0;
CameraMetadata frame_settings;
@@ -2782,18 +2795,16 @@
sizeof(colorCorrectTransform), &colorCorrectTransform);
}
- cam_trigger_t aecTrigger;
- aecTrigger.trigger = CAM_AEC_TRIGGER_IDLE;
- aecTrigger.trigger_id = -1;
if (frame_settings.exists(ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER)&&
frame_settings.exists(ANDROID_CONTROL_AE_PRECAPTURE_ID)) {
- aecTrigger.trigger =
+ aeTrigger.trigger =
frame_settings.find(ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER).data.u8[0];
- aecTrigger.trigger_id =
+ aeTrigger.trigger_id =
frame_settings.find(ANDROID_CONTROL_AE_PRECAPTURE_ID).data.i32[0];
+ mPrecaptureId = aeTrigger.trigger_id;
}
rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_AEC_PRECAPTURE_TRIGGER,
- sizeof(aecTrigger), &aecTrigger);
+ sizeof(aeTrigger), &aeTrigger);
/*af_trigger must come with a trigger id*/
if (frame_settings.exists(ANDROID_CONTROL_AF_TRIGGER) &&
diff --git a/camera/QCamera2/HAL3/QCamera3HWI.h b/camera/QCamera2/HAL3/QCamera3HWI.h
index 148e9eb..71baf9e 100755
--- a/camera/QCamera2/HAL3/QCamera3HWI.h
+++ b/camera/QCamera2/HAL3/QCamera3HWI.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2013, The Linux Foundataion. All rights reserved.
+/* Copyright (c) 2012-2013, 2015, The Linux Foundataion. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -121,10 +121,13 @@
void getMetadataVendorTagOps(vendor_tag_query_ops_t* ops);
void dump(int fd);
- int setFrameParameters(int frame_id, const camera_metadata_t *settings, uint32_t streamTypeMask);
- int translateMetadataToParameters(const camera_metadata_t *settings);
+ int setFrameParameters(int frame_id, const camera_metadata_t *settings,
+ uint32_t streamTypeMask, cam_trigger_t &aeTrigger);
+ int translateMetadataToParameters(const camera_metadata_t *settings,
+ cam_trigger_t &aeTrigger);
camera_metadata_t* translateCbMetadataToResultMetadata(metadata_buffer_t *metadata,
- nsecs_t timestamp, int32_t request_id);
+ nsecs_t timestamp, int32_t request_id,
+ const cam_trigger_t &aeTrigger);
int getJpegSettings(const camera_metadata_t *settings);
int initParameters();
void deinitParameters();
@@ -197,6 +200,7 @@
int32_t request_id;
List<RequestedBufferInfo> buffers;
int blob_request;
+ cam_trigger_t ae_trigger;
} PendingRequestInfo;
typedef KeyedVector<camera3_stream_t *, uint32_t> PendingBuffersMap;
@@ -216,6 +220,8 @@
power_module_t *m_pPowerModule; // power module
+ int32_t mPrecaptureId;
+
static const QCameraMap EFFECT_MODES_MAP[];
static const QCameraMap WHITE_BALANCE_MODES_MAP[];
static const QCameraMap SCENE_MODES_MAP[];