Camera3: Convert the callback metadata into fwk struct
Convert the metadata in the result callback into a struct
specified by the framework
Change-Id: I83fd74dbd6c65c5a56e0035353387748e73d5e57
diff --git a/camera/QCamera2/HAL3/QCamera3HALHeader.h b/camera/QCamera2/HAL3/QCamera3HALHeader.h
new file mode 100644
index 0000000..0e6cce4
--- /dev/null
+++ b/camera/QCamera2/HAL3/QCamera3HALHeader.h
@@ -0,0 +1,54 @@
+/* Copyright (c) 2013, 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
+* met:
+* * Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+* * Redistributions in binary form must reproduce the above
+* copyright notice, this list of conditions and the following
+* disclaimer in the documentation and/or other materials provided
+* with the distribution.
+* * Neither the name of The Linux Foundation nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+*/
+#ifndef __QCAMERA_HALHEADER_H__
+#define __QCAMERA_HALHEADER_H__
+
+extern "C" {
+#include <mm_camera_interface.h>
+#include <mm_jpeg_interface.h>
+}
+
+using namespace android;
+
+namespace qcamera {
+
+typedef struct {
+ int32_t jpeg_orientation;
+ uint8_t jpeg_quality;
+ cam_dimension_t thumbnail_size;
+ int64_t gps_timestamp;
+ double gps_coordinates[3];
+ uint8_t gps_processing_method;
+ int32_t sensor_sensitivity;
+ float lens_focal_length;
+} jpeg_settings_t;
+
+};//namespace qcamera
+
+#endif
diff --git a/camera/QCamera2/HAL3/QCamera3HWI.cpp b/camera/QCamera2/HAL3/QCamera3HWI.cpp
index cc0d7d9..d861c8f 100644
--- a/camera/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/camera/QCamera2/HAL3/QCamera3HWI.cpp
@@ -43,7 +43,6 @@
using namespace android;
-//using namespace android;
namespace qcamera {
#define DATA_PTR(MEM_OBJ,INDEX) MEM_OBJ->getPtr( INDEX )
cam_capability_t *gCamCapability[MM_CAMERA_MAX_NUM_SENSORS];
@@ -63,6 +62,7 @@
};
const QCamera3HardwareInterface::QCameraMap QCamera3HardwareInterface::WHITE_BALANCE_MODES_MAP[] = {
+ { ANDROID_CONTROL_AWB_MODE_OFF, CAM_WB_MODE_OFF },
{ ANDROID_CONTROL_AWB_MODE_AUTO, CAM_WB_MODE_AUTO },
{ ANDROID_CONTROL_AWB_MODE_INCANDESCENT, CAM_WB_MODE_INCANDESCENT },
{ ANDROID_CONTROL_AWB_MODE_FLUORESCENT, CAM_WB_MODE_FLUORESCENT },
@@ -89,10 +89,11 @@
{ ANDROID_CONTROL_SCENE_MODE_SPORTS , CAM_SCENE_MODE_SPORTS },
{ ANDROID_CONTROL_SCENE_MODE_PARTY, CAM_SCENE_MODE_PARTY },
{ ANDROID_CONTROL_SCENE_MODE_CANDLELIGHT, CAM_SCENE_MODE_CANDLELIGHT },
- { ANDROID_CONTROL_SCENE_MODE_BARCODE, CAM_SCENE_MODE_OFF}
+ { ANDROID_CONTROL_SCENE_MODE_BARCODE, CAM_SCENE_MODE_BARCODE}
};
const QCamera3HardwareInterface::QCameraMap QCamera3HardwareInterface::FOCUS_MODES_MAP[] = {
+ { ANDROID_CONTROL_AF_MODE_OFF, CAM_FOCUS_MODE_OFF },
{ ANDROID_CONTROL_AF_MODE_AUTO, CAM_FOCUS_MODE_AUTO },
{ ANDROID_CONTROL_AF_MODE_MACRO, CAM_FOCUS_MODE_MACRO },
{ ANDROID_CONTROL_AF_MODE_EDOF, CAM_FOCUS_MODE_EDOF },
@@ -108,7 +109,7 @@
};
const QCamera3HardwareInterface::QCameraMap QCamera3HardwareInterface::AUTO_EXPOSURE_MAP[] = {
- { ANDROID_CONTROL_AE_MODE_OFF, CAM_AEC_MODE_FRAME_AVERAGE },
+ { ANDROID_CONTROL_AE_MODE_OFF, CAM_AEC_MODE_OFF },
{ ANDROID_CONTROL_AE_MODE_ON, CAM_AEC_MODE_FRAME_AVERAGE },
};
@@ -144,7 +145,8 @@
: mCameraId(cameraId),
mCameraHandle(NULL),
mCameraOpened(false),
- mCallbackOps(NULL)
+ mCallbackOps(NULL),
+ mJpegSettings(NULL)
{
mCameraDevice.common.tag = HARDWARE_DEVICE_TAG;
mCameraDevice.common.version = CAMERA_DEVICE_API_VERSION_3_0;
@@ -171,6 +173,10 @@
*==========================================================================*/
QCamera3HardwareInterface::~QCamera3HardwareInterface()
{
+ if (mJpegSettings != NULL) {
+ free(mJpegSettings);
+ mJpegSettings = NULL;
+ }
closeCamera();
pthread_mutex_destroy(&mRequestLock);
@@ -771,14 +777,9 @@
pthread_cond_signal(&mRequestCond);
pthread_mutex_unlock(&mRequestLock);
- //TODO: Add translation from metadata_buffer_t to CameraMetadata
- // for now, hardcode timestamp only.
- CameraMetadata camMetadata;
uint32_t *frame_number = (uint32_t *)POINTER_OF(CAM_INTF_META_FRAME_NUMBER, metadata);
- nsecs_t captureTime = 1000000 * (*frame_number) * 33;
- camMetadata.update(ANDROID_SENSOR_TIMESTAMP, &captureTime, 1);
- result.result = camMetadata.release();
+ result.result = translateCbMetadataToResultMetadata(metadata);
if (!result.result) {
result.frame_number = *frame_number;
result.num_output_buffers = 0;
@@ -799,6 +800,268 @@
return;
}
+/*===========================================================================
+ * FUNCTION : translateCbMetadataToResultMetadata
+ *
+ * DESCRIPTION:
+ *
+ * PARAMETERS :
+ * @metadata : metadata information from callback
+ *
+ * RETURN : camera_metadata_t*
+ * metadata in a format specified by fwk
+ *==========================================================================*/
+camera_metadata_t*
+QCamera3HardwareInterface::translateCbMetadataToResultMetadata
+ (metadata_buffer_t *metadata)
+{
+ CameraMetadata camMetadata;
+ camera_metadata_t* resultMetadata;
+
+ uint32_t *frame_number =
+ (uint32_t *)POINTER_OF(CAM_INTF_META_FRAME_NUMBER, metadata);
+ nsecs_t captureTime = 1000000 * (*frame_number) * 33;
+ camMetadata.update(ANDROID_SENSOR_TIMESTAMP, &captureTime, 1);
+
+ /*CAM_INTF_META_HISTOGRAM - TODO*/
+ /*cam_hist_stats_t *histogram =
+ (cam_hist_stats_t *)POINTER_OF(CAM_INTF_META_HISTOGRAM,
+ metadata);*/
+
+ /*face detection*/
+ cam_face_detection_data_t *faceDetectionInfo =(cam_face_detection_data_t *)
+ POINTER_OF(CAM_INTF_META_FACE_DETECTION, metadata);
+ uint8_t numFaces = faceDetectionInfo->num_faces_detected;
+ int32_t faceIds[numFaces];
+ uint8_t faceScores[numFaces];
+ int32_t faceRectangles[numFaces * 4];
+ int32_t faceLandmarks[numFaces * 6];
+ int j = 0, k = 0;
+ for (int i = 0; i < numFaces; i++) {
+ faceIds[i] = faceDetectionInfo->faces[i].face_id;
+ faceScores[i] = faceDetectionInfo->faces[i].score;
+ convertRegions(faceDetectionInfo->faces[i].face_boundary,
+ faceRectangles+j, -1);
+ convertLandmarks(faceDetectionInfo->faces[i], faceLandmarks+k);
+ j+= 4;
+ k+= 6;
+ }
+ camMetadata.update(ANDROID_STATISTICS_FACE_IDS, faceIds, numFaces);
+ camMetadata.update(ANDROID_STATISTICS_FACE_SCORES, faceScores, numFaces);
+ camMetadata.update(ANDROID_STATISTICS_FACE_RECTANGLES,
+ faceRectangles, numFaces*4);
+ camMetadata.update(ANDROID_STATISTICS_FACE_LANDMARKS,
+ faceLandmarks, numFaces*6);
+
+
+ /*autofocus - TODO*/
+ /*cam_auto_focus_data_t *afData =(cam_auto_focus_data_t *)
+ POINTER_OF(CAM_INTF_META_AUTOFOCUS_DATA,metadata);*/
+
+ int32_t *color_correct_mode =
+ (int32_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);
+
+ /*aec regions*/
+ cam_area_t *hAeRegions =
+ (cam_area_t *)POINTER_OF(CAM_INTF_META_AEC_ROI, metadata);
+ int32_t aeRegions[5];
+ convertRegions(hAeRegions->rect, aeRegions, hAeRegions->weight);
+ camMetadata.update(ANDROID_CONTROL_AE_REGIONS, aeRegions, 5);
+
+ int32_t *ae_state =
+ (int32_t *)POINTER_OF(CAM_INTF_META_AEC_STATE, metadata);
+ camMetadata.update(ANDROID_CONTROL_AE_STATE, ae_state, 1);
+
+ int32_t *focusMode =
+ (int32_t *)POINTER_OF(CAM_INTF_PARM_FOCUS_MODE, metadata);
+ camMetadata.update(ANDROID_CONTROL_AF_MODE, focusMode, 1);
+
+ /*af regions*/
+ cam_area_t *hAfRegions =
+ (cam_area_t *)POINTER_OF(CAM_INTF_META_AF_ROI, metadata);
+ int32_t afRegions[5];
+ convertRegions(hAfRegions->rect, afRegions, hAfRegions->weight);
+ camMetadata.update(ANDROID_CONTROL_AF_REGIONS, afRegions, 5);
+
+ int32_t *afState = (int32_t *)POINTER_OF(CAM_INTF_META_AF_STATE, metadata);
+ camMetadata.update(ANDROID_CONTROL_AF_STATE, afState, 1);
+
+ int32_t *afTriggerId =
+ (int32_t *)POINTER_OF(CAM_INTF_META_AF_TRIGGER_ID, metadata);
+ camMetadata.update(ANDROID_CONTROL_AF_TRIGGER_ID, afTriggerId, 1);
+
+ int32_t *whiteBalance =
+ (int32_t *)POINTER_OF(CAM_INTF_PARM_WHITE_BALANCE, metadata);
+ camMetadata.update(ANDROID_CONTROL_AWB_MODE, whiteBalance, 1);
+
+ /*awb regions*/
+ cam_area_t *hAwbRegions =
+ (cam_area_t *)POINTER_OF(CAM_INTF_META_AWB_REGIONS, metadata);
+ int32_t awbRegions[5];
+ convertRegions(hAwbRegions->rect, awbRegions, hAwbRegions->weight);
+ camMetadata.update(ANDROID_CONTROL_AWB_REGIONS, awbRegions, 5);
+
+ int32_t *whiteBalanceState =
+ (int32_t *)POINTER_OF(CAM_INTF_META_AWB_STATE, metadata);
+ camMetadata.update(ANDROID_CONTROL_AWB_STATE, whiteBalanceState, 1);
+
+ int32_t *mode = (int32_t *)POINTER_OF(CAM_INTF_META_MODE, metadata);
+ camMetadata.update(ANDROID_CONTROL_MODE, mode, 1);
+
+ int32_t *edgeMode = (int32_t *)POINTER_OF(CAM_INTF_META_EDGE, metadata);
+ camMetadata.update(ANDROID_EDGE_MODE, edgeMode, 1);
+
+ int32_t *flashPower =
+ (int32_t *)POINTER_OF(CAM_INTF_META_FLASH_POWER, metadata);
+ camMetadata.update(ANDROID_FLASH_FIRING_POWER, flashPower, 1);
+
+ int64_t *flashFiringTime =
+ (int64_t *)POINTER_OF(CAM_INTF_META_FLASH_FIRING_TIME, metadata);
+ camMetadata.update(ANDROID_FLASH_FIRING_TIME, flashFiringTime, 1);
+
+ /*int32_t *ledMode =
+ (int32_t *)POINTER_OF(CAM_INTF_PARM_LED_MODE, metadata);
+ camMetadata.update(ANDROID_FLASH_FIRING_TIME, ledMode, 1);*/
+
+ int32_t *flashState =
+ (int32_t *)POINTER_OF(CAM_INTF_META_FLASH_STATE, metadata);
+ camMetadata.update(ANDROID_FLASH_STATE, flashState, 1);
+
+ int32_t *hotPixelMode =
+ (int32_t *)POINTER_OF(CAM_INTF_META_HOTPIXEL_MODE, metadata);
+ camMetadata.update(ANDROID_HOT_PIXEL_MODE, hotPixelMode, 1);
+
+ float *lensAperture =
+ (float *)POINTER_OF(CAM_INTF_META_LENS_APERTURE, metadata);
+ camMetadata.update(ANDROID_LENS_APERTURE , lensAperture, 1);
+
+ float *filterDensity =
+ (float *)POINTER_OF(CAM_INTF_META_LENS_FILTERDENSITY, metadata);
+ camMetadata.update(ANDROID_LENS_FILTER_DENSITY , filterDensity, 1);
+
+ float *focalLength =
+ (float *)POINTER_OF(CAM_INTF_META_LENS_FOCAL_LENGTH, metadata);
+ camMetadata.update(ANDROID_LENS_FOCAL_LENGTH, focalLength, 1);
+
+ float *focusDistance =
+ (float *)POINTER_OF(CAM_INTF_META_LENS_FOCUS_DISTANCE, metadata);
+ camMetadata.update(ANDROID_LENS_FOCUS_DISTANCE , focusDistance, 1);
+
+ float *focusRange =
+ (float *)POINTER_OF(CAM_INTF_META_LENS_FOCUS_RANGE, metadata);
+ camMetadata.update(ANDROID_LENS_FOCUS_RANGE , focusRange, 1);
+
+ int32_t *opticalStab =
+ (int32_t *)POINTER_OF(CAM_INTF_META_LENS_OPT_STAB_MODE, metadata);
+ camMetadata.update(ANDROID_LENS_OPTICAL_STABILIZATION_MODE, opticalStab, 1);
+
+ /*int32_t *focusState =
+ (int32_t *)POINTER_OF(CAM_INTF_META_LENS_FOCUS_STATE, metadata);
+ camMetadata.update(ANDROID_LENS_STATE , focusState, 1); //check */
+
+ int32_t *noiseRedMode =
+ (int32_t *)POINTER_OF(CAM_INTF_META_NOISE_REDUCTION_MODE, metadata);
+ camMetadata.update(ANDROID_NOISE_REDUCTION_MODE , noiseRedMode, 1);
+
+ /*CAM_INTF_META_SCALER_CROP_REGION - check size*/
+
+ cam_crop_region_t *scalerCropRegion = (cam_crop_region_t *)
+ POINTER_OF(CAM_INTF_META_SCALER_CROP_REGION, metadata);
+ camMetadata.update(ANDROID_SCALER_CROP_REGION,
+ (int32_t*)scalerCropRegion,
+ sizeof(scalerCropRegion)/sizeof(cam_crop_region_t));
+
+ int64_t *sensorExpTime =
+ (int64_t *)POINTER_OF(CAM_INTF_META_SENSOR_EXPOSURE_TIME, metadata);
+ camMetadata.update(ANDROID_SENSOR_EXPOSURE_TIME , sensorExpTime, 1);
+
+ int64_t *sensorFameDuration =
+ (int64_t *)POINTER_OF(CAM_INTF_META_SENSOR_FRAME_DURATION, metadata);
+ camMetadata.update(ANDROID_SENSOR_FRAME_DURATION, sensorFameDuration, 1);
+
+ int32_t *sensorSensitivity =
+ (int32_t *)POINTER_OF(CAM_INTF_META_SENSOR_SENSITIVITY, metadata);
+ camMetadata.update(ANDROID_SENSOR_SENSITIVITY, sensorSensitivity, 1);
+
+ int64_t *sensorTimestamp =
+ (int64_t *)POINTER_OF(CAM_INTF_META_SENSOR_TIMESTAMP, metadata);
+ camMetadata.update(ANDROID_SENSOR_TIMESTAMP, sensorTimestamp, 1);
+
+ int32_t *shadingMode =
+ (int32_t *)POINTER_OF(CAM_INTF_META_SHADING_MODE, metadata);
+ camMetadata.update(ANDROID_SHADING_MODE, shadingMode, 1);
+
+ int32_t *faceDetectMode =
+ (int32_t *)POINTER_OF(CAM_INTF_META_STATS_FACEDETECT_MODE, metadata);
+ camMetadata.update(ANDROID_STATISTICS_FACE_DETECT_MODE, faceDetectMode, 1);
+
+ int32_t *histogramMode =
+ (int32_t *)POINTER_OF(CAM_INTF_META_STATS_HISTOGRAM_MODE, metadata);
+ camMetadata.update(ANDROID_STATISTICS_HISTOGRAM_MODE, histogramMode, 1);
+
+ int32_t *sharpnessMapMode =
+ (int32_t *)POINTER_OF(CAM_INTF_META_STATS_SHARPNESS_MAP_MODE, metadata);
+ camMetadata.update(ANDROID_STATISTICS_SHARPNESS_MAP_MODE,
+ sharpnessMapMode, 1);
+
+ /*CAM_INTF_META_STATS_SHARPNESS_MAP - check size*/
+ cam_sharpness_map_t *sharpnessMap = (cam_sharpness_map_t *)
+ POINTER_OF(CAM_INTF_META_STATS_SHARPNESS_MAP, metadata);
+ camMetadata.update(ANDROID_STATISTICS_SHARPNESS_MAP,
+ (int32_t*)sharpnessMap->sharpness,
+ CAM_MAX_MAP_WIDTH*CAM_MAX_MAP_HEIGHT);
+
+ resultMetadata = camMetadata.release();
+ return NULL;
+}
+
+/*===========================================================================
+ * FUNCTION : convertRegions
+ *
+ * DESCRIPTION: helper method to convert from cam_rect_t into int32_t array
+ *
+ * PARAMETERS :
+ * @rect : cam_rect_t struct to convert
+ * @region : int32_t destination array
+ * @weight : if we are converting from cam_area_t, weight is valid
+ * else weight = -1
+ *
+ *==========================================================================*/
+void QCamera3HardwareInterface::convertRegions(cam_rect_t rect, int32_t* region, int weight){
+ region[0] = rect.left;
+ region[1] = rect.top;
+ region[2] = rect.width;
+ region[3] = rect.height;
+ if (weight > -1) {
+ region[4] = weight;
+ }
+}
+/*===========================================================================
+ * FUNCTION : convertLandmarks
+ *
+ * DESCRIPTION: helper method to extract the landmarks from face detection info
+ *
+ * PARAMETERS :
+ * @face : cam_rect_t struct to convert
+ * @landmarks : int32_t destination array
+ *
+ *
+ *==========================================================================*/
+void QCamera3HardwareInterface::convertLandmarks(cam_face_detection_info_t face, int32_t* landmarks)
+{
+ landmarks[0] = face.left_eye_center.x;
+ landmarks[1] = face.left_eye_center.y;
+ landmarks[2] = face.right_eye_center.y;
+ landmarks[3] = face.right_eye_center.y;
+ landmarks[4] = face.mouth_center.x;
+ landmarks[5] = face.mouth_center.y;
+}
+
#define DATA_PTR(MEM_OBJ,INDEX) MEM_OBJ->getPtr( INDEX )
/*===========================================================================
* FUNCTION : initCapabilities
@@ -938,7 +1201,7 @@
int QCamera3HardwareInterface::initStaticMetadata(int cameraId)
{
int rc = 0;
- android::CameraMetadata staticInfo;
+ CameraMetadata staticInfo;
int facingBack = gCamCapability[cameraId]->position == CAM_POSITION_BACK;
/*HAL 3 only*/
#ifdef HAL_3_CAPABILITIES
@@ -1304,6 +1567,19 @@
available_jpeg_sizes,
sizeof(available_jpeg_sizes)/sizeof(int32_t));
+ static int32_t max_jpeg_size = 0;
+ int temp_width, temp_height;
+ for (int i = 0; i < gCamCapability[cameraId]->picture_sizes_tbl_cnt; i++) {
+ temp_width = gCamCapability[cameraId]->picture_sizes_tbl[i].width;
+ temp_height = gCamCapability[cameraId]->picture_sizes_tbl[i].height;
+ if (temp_width * temp_height > max_jpeg_size ) {
+ max_jpeg_size = temp_width * temp_height;
+ }
+ }
+ max_jpeg_size = max_jpeg_size * 3/2 + sizeof(camera3_jpeg_blob_t);
+ staticInfo.update(ANDROID_JPEG_MAX_SIZE,
+ &max_jpeg_size, 1);
+
static int32_t avail_effects[CAM_EFFECT_MODE_MAX];
for (int i = 0; i < gCamCapability[cameraId]->supported_effects_cnt; i++) {
avail_effects[i] = lookupFwkName(EFFECT_MODES_MAP,
@@ -1612,7 +1888,7 @@
* failure: NULL
*
*==========================================================================*/
-camera_metadata_t* QCamera3HardwareInterface::translateToMetadata(int type)
+camera_metadata_t* QCamera3HardwareInterface::translateCapabilityToMetadata(int type)
{
pthread_mutex_lock(&mMutex);
@@ -1622,7 +1898,7 @@
}
//first time we are handling this request
//fill up the metadata structure using the wrapper class
- android::CameraMetadata settings;
+ CameraMetadata settings;
//translate from cam_capability_t to camera_metadata_tag_t
static const uint8_t requestType = ANDROID_REQUEST_TYPE_CAPTURE;
settings.update(ANDROID_REQUEST_TYPE, &requestType, 1);
@@ -1748,40 +2024,220 @@
(const camera_metadata_t *settings)
{
int rc = 0;
- android::CameraMetadata frame_settings;
+ CameraMetadata frame_settings;
frame_settings = settings;
- //white balance
- int32_t fwk_whiteLevel = frame_settings.find(ANDROID_CONTROL_AWB_MODE).data.i32[0];
+ int32_t antibandingMode =
+ frame_settings.find(ANDROID_CONTROL_AE_ANTIBANDING_MODE).data.i32[0];
+ rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_PARM_ANTIBANDING,
+ sizeof(antibandingMode), &antibandingMode);
+
+ /*int32_t expCompensation = frame_settings.find().data.i32[0];
+ rc = AddSetParmEntryToBatch(mParameters,
+ CAM_INTF_PARM_EXPOSURE_COMPENSATION,
+ sizeof(expCompensation), &expCompensation);*/
+
+ int32_t aeLock = frame_settings.find(ANDROID_CONTROL_AE_LOCK).data.i32[0];
+ rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_PARM_AEC_LOCK,
+ sizeof(aeLock), &aeLock);
+
+ int32_t focusMode =
+ frame_settings.find(ANDROID_CONTROL_AF_MODE).data.i32[0];
+ rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_PARM_FOCUS_MODE,
+ sizeof(focusMode), &focusMode);
+
+ int32_t awbLock = frame_settings.find(ANDROID_CONTROL_AWB_LOCK).data.i32[0];
+ rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_PARM_AWB_LOCK,
+ sizeof(awbLock), &awbLock);
+
+ int32_t fwk_whiteLevel =
+ frame_settings.find(ANDROID_CONTROL_AWB_MODE).data.i32[0];
int whiteLevel = lookupHalName(WHITE_BALANCE_MODES_MAP,
- sizeof(WHITE_BALANCE_MODES_MAP)/ sizeof(int32_t),
- fwk_whiteLevel);
+ sizeof(WHITE_BALANCE_MODES_MAP)/ sizeof(int32_t),
+ fwk_whiteLevel);
rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_PARM_WHITE_BALANCE,
- sizeof(whiteLevel), &whiteLevel);
- //effect
- int32_t fwk_effectMode = frame_settings.find(ANDROID_CONTROL_EFFECT_MODE).data.i32[0];
+ sizeof(whiteLevel), &whiteLevel);
+
+ int32_t fwk_effectMode =
+ frame_settings.find(ANDROID_CONTROL_EFFECT_MODE).data.i32[0];
int effectMode = lookupHalName(EFFECT_MODES_MAP,
- sizeof(EFFECT_MODES_MAP)/ sizeof(int32_t),
- fwk_effectMode);
+ sizeof(EFFECT_MODES_MAP)/ sizeof(int32_t),
+ fwk_effectMode);
rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_PARM_EFFECT,
- sizeof(effectMode), &effectMode);
- //ae mode
- int32_t fwk_aeMode = frame_settings.find(ANDROID_CONTROL_AE_MODE).data.i32[0];
+ sizeof(effectMode), &effectMode);
+ int32_t fwk_aeMode =
+ frame_settings.find(ANDROID_CONTROL_AE_MODE).data.i32[0];
int aeMode = lookupHalName(AUTO_EXPOSURE_MAP,
- sizeof(AUTO_EXPOSURE_MAP)/ sizeof(int32_t),
- fwk_aeMode);
+ sizeof(AUTO_EXPOSURE_MAP)/ sizeof(int32_t),
+ fwk_aeMode);
rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_AEC_MODE,
- sizeof(aeMode), &aeMode);
+ sizeof(aeMode), &aeMode);
- //scaler crop region
- int32_t scalerCropRegion = frame_settings.find(ANDROID_SCALER_CROP_REGION).data.i32[0];
+ int32_t metaFrameNumber =
+ frame_settings.find(ANDROID_REQUEST_FRAME_COUNT).data.i32[0];
+ rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_FRAME_NUMBER,
+ sizeof(metaFrameNumber), &metaFrameNumber);
+
+ int32_t colorCorrectMode =
+ frame_settings.find(ANDROID_COLOR_CORRECTION_MODE).data.i32[0];
+ rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_COLOR_CORRECT_MODE,
+ sizeof(colorCorrectMode), &colorCorrectMode);
+
+ int32_t aecTrigger =
+ frame_settings.find(ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER).data.i32[0];
+ rc = AddSetParmEntryToBatch(mParameters,
+ CAM_INTF_META_AEC_PRECAPTURE_TRIGGER,
+ sizeof(aecTrigger), &aecTrigger);
+
+ int32_t afTrigger =
+ frame_settings.find(ANDROID_CONTROL_AF_TRIGGER).data.i32[0];
+ rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_AF_TRIGGER,
+ sizeof(afTrigger), &afTrigger);
+
+
+ int32_t metaMode = frame_settings.find(ANDROID_CONTROL_MODE).data.i32[0];
+ rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_MODE,
+ sizeof(metaMode), &metaMode);
+
+
+ int32_t demosaic = frame_settings.find(ANDROID_DEMOSAIC_MODE).data.u8[0];
+ rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_DEMOSAIC,
+ sizeof(demosaic), &demosaic);
+
+ int32_t edgeMode = frame_settings.find(ANDROID_EDGE_MODE).data.u8[0];
+ rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_EDGE,
+ sizeof(edgeMode), &edgeMode);
+
+
+ int32_t edgeStrength =
+ frame_settings.find(ANDROID_EDGE_STRENGTH).data.i32[0];
+ rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_SHARPNESS_STRENGTH,
+ sizeof(edgeStrength), &edgeStrength);
+
+ int32_t flashPower =
+ frame_settings.find(ANDROID_FLASH_FIRING_POWER).data.u8[0];
+ rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_FLASH_POWER,
+ sizeof(flashPower), &flashPower);
+
+ int64_t flashFiringTime =
+ frame_settings.find(ANDROID_FLASH_FIRING_TIME).data.i64[0];
+ rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_FLASH_FIRING_TIME,
+ sizeof(flashFiringTime), &flashFiringTime);
+
+ int32_t geometricMode =
+ frame_settings.find(ANDROID_GEOMETRIC_MODE).data.u8[0];
+ rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_GEOMETRIC_MODE,
+ sizeof(geometricMode), &geometricMode);
+
+ int32_t geometricStrength =
+ frame_settings.find(ANDROID_GEOMETRIC_STRENGTH).data.u8[0];
+ rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_GEOMETRIC_STRENGTH,
+ sizeof(geometricStrength), &geometricStrength);
+
+ int32_t hotPixelMode =
+ frame_settings.find(ANDROID_HOT_PIXEL_MODE).data.u8[0];
+ rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_HOTPIXEL_MODE,
+ sizeof(hotPixelMode), &hotPixelMode);
+
+
+ float lensAperture =
+ frame_settings.find( ANDROID_LENS_APERTURE).data.f[0];
+ rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_LENS_APERTURE,
+ sizeof(lensAperture), &lensAperture);
+
+
+ float filterDensity =
+ frame_settings.find(ANDROID_LENS_FILTER_DENSITY).data.f[0];
+ rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_LENS_FILTERDENSITY,
+ sizeof(filterDensity), &filterDensity);
+
+
+ float focalLength =
+ frame_settings.find(ANDROID_LENS_FOCAL_LENGTH).data.f[0];
+ rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_LENS_FOCAL_LENGTH,
+ sizeof(focalLength), &focalLength);
+
+ float focalDistance =
+ frame_settings.find(ANDROID_LENS_FOCUS_DISTANCE).data.f[0];
+ rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_LENS_FOCUS_DISTANCE,
+ sizeof(focalDistance), &focalDistance);
+
+ int32_t optStabMode =
+ frame_settings.find(ANDROID_LENS_OPTICAL_STABILIZATION_MODE).data.u8[0];
+ rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_LENS_OPT_STAB_MODE,
+ sizeof(optStabMode), &optStabMode);
+
+ int32_t noiseRedMode =
+ frame_settings.find(ANDROID_NOISE_REDUCTION_MODE).data.u8[0];
+ rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_NOISE_REDUCTION_MODE,
+ sizeof(noiseRedMode), &noiseRedMode);
+
+ int32_t noiseRedStrength =
+ frame_settings.find(ANDROID_NOISE_REDUCTION_STRENGTH).data.u8[0];
+ rc = AddSetParmEntryToBatch(mParameters,
+ CAM_INTF_META_NOISE_REDUCTION_STRENGTH,
+ sizeof(noiseRedStrength), &noiseRedStrength);
+
+ cam_crop_region_t scalerCropRegion;
+ scalerCropRegion.left =
+ frame_settings.find(ANDROID_SCALER_CROP_REGION).data.i32[0];
+ scalerCropRegion.top =
+ frame_settings.find(ANDROID_SCALER_CROP_REGION).data.i32[1];
+ scalerCropRegion.width =
+ frame_settings.find(ANDROID_SCALER_CROP_REGION).data.i32[2];
rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_SCALER_CROP_REGION,
- sizeof(scalerCropRegion), &scalerCropRegion);
+ sizeof(scalerCropRegion), &scalerCropRegion);
- //capture_intent
- int32_t captureIntent = frame_settings.find(ANDROID_CONTROL_CAPTURE_INTENT).data.i32[0];
+ int64_t sensorExpTime =
+ frame_settings.find(ANDROID_SENSOR_EXPOSURE_TIME).data.i64[0];
+ rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_SENSOR_EXPOSURE_TIME,
+ sizeof(sensorExpTime), &sensorExpTime);
+
+ int64_t sensorFrameDuration =
+ frame_settings.find(ANDROID_SENSOR_FRAME_DURATION).data.i64[0];
+ rc = AddSetParmEntryToBatch(mParameters,
+ CAM_INTF_META_SENSOR_FRAME_DURATION,
+ sizeof(sensorFrameDuration), &sensorFrameDuration);
+
+ int32_t sensorSensitivity =
+ frame_settings.find(ANDROID_SENSOR_SENSITIVITY).data.i32[0];
+ rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_SENSOR_SENSITIVITY,
+ sizeof(sensorSensitivity), &sensorSensitivity);
+
+ int32_t shadingMode = frame_settings.find(ANDROID_SHADING_MODE).data.u8[0];
+ rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_SHADING_MODE,
+ sizeof(shadingMode), &shadingMode);
+
+ int32_t shadingStrength =
+ frame_settings.find(ANDROID_SHADING_STRENGTH).data.u8[0];
+ rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_SHADING_STRENGTH,
+ sizeof(shadingStrength), &shadingStrength);
+
+ int32_t facedetectMode =
+ frame_settings.find(ANDROID_STATISTICS_FACE_DETECT_MODE).data.u8[0];
+ rc = AddSetParmEntryToBatch(mParameters,
+ CAM_INTF_META_STATS_FACEDETECT_MODE,
+ sizeof(facedetectMode), &facedetectMode);
+
+ int32_t histogramMode =
+ frame_settings.find(ANDROID_STATISTICS_HISTOGRAM_MODE).data.u8[0];
+ rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_STATS_HISTOGRAM_MODE,
+ sizeof(histogramMode), &histogramMode);
+
+ int32_t sharpnessMapMode =
+ frame_settings.find(ANDROID_STATISTICS_SHARPNESS_MAP_MODE).data.u8[0];
+ rc = AddSetParmEntryToBatch(mParameters,
+ CAM_INTF_META_STATS_SHARPNESS_MAP_MODE,
+ sizeof(sharpnessMapMode), &sharpnessMapMode);
+
+ int32_t tonemapMode = frame_settings.find(ANDROID_TONEMAP_MODE).data.u8[0];
+ rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_TONEMAP_MODE,
+ sizeof(tonemapMode), &tonemapMode);
+
+ int32_t captureIntent =
+ frame_settings.find(ANDROID_CONTROL_CAPTURE_INTENT).data.i32[0];
rc = AddSetParmEntryToBatch(mParameters, CAM_INTF_META_CAPTURE_INTENT,
- sizeof(captureIntent), &captureIntent);
+ sizeof(captureIntent), &captureIntent);
return rc;
}
@@ -1807,7 +2263,7 @@
mJpegSettings = NULL;
}
mJpegSettings = (jpeg_settings_t*) malloc(sizeof(jpeg_settings_t));
- android::CameraMetadata jpeg_settings;
+ CameraMetadata jpeg_settings;
jpeg_settings = settings;
mJpegSettings->jpeg_orientation =
@@ -1956,7 +2412,7 @@
return NULL;
}
- fwk_metadata = hw->translateToMetadata(type);
+ fwk_metadata = hw->translateCapabilityToMetadata(type);
return fwk_metadata;
}
diff --git a/camera/QCamera2/HAL3/QCamera3HWI.h b/camera/QCamera2/HAL3/QCamera3HWI.h
index 02d9808..7b7f27e 100644
--- a/camera/QCamera2/HAL3/QCamera3HWI.h
+++ b/camera/QCamera2/HAL3/QCamera3HWI.h
@@ -27,13 +27,14 @@
*
*/
-#ifndef __QCAMERA2HARDWAREINTERFACE_H__
-#define __QCAMERA2HARDWAREINTERFACE_H__
+#ifndef __QCAMERA3HARDWAREINTERFACE_H__
+#define __QCAMERA3HARDWAREINTERFACE_H__
#include <pthread.h>
#include <utils/List.h>
#include <hardware/camera3.h>
#include <camera/CameraMetadata.h>
+#include "QCamera3HALHeader.h"
extern "C" {
#include <mm_camera_interface.h>
@@ -78,13 +79,14 @@
virtual ~QCamera3HardwareInterface();
int openCamera(struct hw_device_t **hw_device);
int getMetadata(int type);
- camera_metadata_t* translateToMetadata(int type);
- int metadataToParam(CameraMetadata &metadata);
+ camera_metadata_t* translateCapabilityToMetadata(int type);
static int getCamInfo(int cameraId, struct camera_info *info);
static int initCapabilities(int cameraId);
static int initStaticMetadata(int cameraId);
static void makeTable(cam_dimension_t* dimTable, uint8_t size, int32_t* sizeTable);
+ static void convertRegions(cam_rect_t rect, int32_t* region, int weight);
+ static void convertLandmarks(cam_face_detection_info_t face, int32_t* landmarks);
static int32_t getScalarFormat(int32_t format);
static void captureResultCb(metadata_buffer_t *metadata,
@@ -105,6 +107,7 @@
int setFrameParameters(int frame_id, const camera_metadata_t *settings);
int translateMetadataToParameters(const camera_metadata_t *settings);
+ camera_metadata_t* translateCbMetadataToResultMetadata(metadata_buffer_t *metadata);
int getJpegSettings(const camera_metadata_t *settings);
int initParameters();
@@ -158,18 +161,6 @@
//mutex to protect the critial section for processCaptureResult
pthread_mutex_t mCaptureResultLock;
-
- typedef struct {
- int32_t jpeg_orientation;
- uint8_t jpeg_quality;
- cam_dimension_t thumbnail_size;
- int64_t gps_timestamp;
- double gps_coordinates[3];
- uint8_t gps_processing_method;
- int32_t sensor_sensitivity;
- float lens_focal_length;
- } jpeg_settings_t;
-
jpeg_settings_t* mJpegSettings;
static const QCameraMap EFFECT_MODES_MAP[];
static const QCameraMap WHITE_BALANCE_MODES_MAP[];