Camera3: Add the JPEG Info to MetaData
Bug: 10783953
Add the JPEG info provided in BLOB request to the result METADATA.
Change-Id: I3de3a6a1e9ccaa2d94fed3efef59c7ee2717907e
diff --git a/camera/QCamera2/HAL3/QCamera3HWI.cpp b/camera/QCamera2/HAL3/QCamera3HWI.cpp
old mode 100644
new mode 100755
index 4778dc9..167f7a8
--- a/camera/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/camera/QCamera2/HAL3/QCamera3HWI.cpp
@@ -1093,6 +1093,8 @@
pendingRequest.num_buffers = request->num_output_buffers;
pendingRequest.request_id = request_id;
pendingRequest.blob_request = blob_request;
+ if (blob_request)
+ pendingRequest.input_jpeg_settings = *mJpegSettings;
pendingRequest.input_buffer_present = (request->input_buffer != NULL)? 1 : 0;
for (size_t i = 0; i < request->num_output_buffers; i++) {
@@ -1351,7 +1353,8 @@
result.result = dummyMetadata.release();
} else {
result.result = translateCbMetadataToResultMetadata(metadata,
- current_capture_time, i->request_id);
+ current_capture_time, i->request_id, i->blob_request,
+ &(i->input_jpeg_settings));
if (mIsZslMode) {
int found_metadata = 0;
//for ZSL case store the metadata buffer and corresp. ZSL handle ptr
@@ -1543,7 +1546,8 @@
camera_metadata_t*
QCamera3HardwareInterface::translateCbMetadataToResultMetadata
(metadata_buffer_t *metadata, nsecs_t timestamp,
- int32_t request_id)
+ int32_t request_id, int32_t BlobRequest,
+ jpeg_settings_t* inputjpegsettings)
{
CameraMetadata camMetadata;
camera_metadata_t* resultMetadata;
@@ -1551,6 +1555,38 @@
camMetadata.update(ANDROID_SENSOR_TIMESTAMP, ×tamp, 1);
camMetadata.update(ANDROID_REQUEST_ID, &request_id, 1);
+ // Update the JPEG related info
+ if (BlobRequest) {
+ camMetadata.update(ANDROID_JPEG_ORIENTATION, &(inputjpegsettings->jpeg_orientation), 1);
+ camMetadata.update(ANDROID_JPEG_QUALITY, &(inputjpegsettings->jpeg_quality), 1);
+
+ int32_t thumbnailSizeTable[2];
+ thumbnailSizeTable[0] = inputjpegsettings->thumbnail_size.width;
+ thumbnailSizeTable[1] = inputjpegsettings->thumbnail_size.height;
+ camMetadata.update(ANDROID_JPEG_THUMBNAIL_SIZE, thumbnailSizeTable, 2);
+ ALOGV("%s: Orien=%d, quality=%d wid=%d, height=%d", __func__, inputjpegsettings->jpeg_orientation,
+ inputjpegsettings->jpeg_quality,thumbnailSizeTable[0], thumbnailSizeTable[1]);
+
+ if (inputjpegsettings->gps_coordinates[0]) {
+ double gpsCoordinates[3];
+ gpsCoordinates[0]=*(inputjpegsettings->gps_coordinates[0]);
+ gpsCoordinates[1]=*(inputjpegsettings->gps_coordinates[1]);
+ gpsCoordinates[2]=*(inputjpegsettings->gps_coordinates[2]);
+ camMetadata.update(ANDROID_JPEG_GPS_COORDINATES, gpsCoordinates, 3);
+ ALOGV("%s: gpsCoordinates[0]=%f, 1=%f 2=%f", __func__, gpsCoordinates[0],
+ gpsCoordinates[1],gpsCoordinates[2]);
+ }
+
+ if (inputjpegsettings->gps_timestamp) {
+ camMetadata.update(ANDROID_JPEG_GPS_TIMESTAMP, inputjpegsettings->gps_timestamp, 1);
+ ALOGV("%s: gps_timestamp=%lld", __func__, *(inputjpegsettings->gps_timestamp));
+ }
+
+ String8 str(inputjpegsettings->gps_processing_method);
+ if (strlen(mJpegSettings->gps_processing_method) > 0) {
+ camMetadata.update(ANDROID_JPEG_GPS_PROCESSING_METHOD, str);
+ }
+ }
uint8_t curr_entry = GET_FIRST_PARAM_ID(metadata);
uint8_t next_entry;
while (curr_entry != CAM_INTF_PARM_MAX) {
diff --git a/camera/QCamera2/HAL3/QCamera3HWI.h b/camera/QCamera2/HAL3/QCamera3HWI.h
index 59c036d..47997fb 100755
--- a/camera/QCamera2/HAL3/QCamera3HWI.h
+++ b/camera/QCamera2/HAL3/QCamera3HWI.h
@@ -126,7 +126,8 @@
int setFrameParameters(camera3_capture_request_t *request, uint32_t streamTypeMask);
int translateMetadataToParameters(const camera3_capture_request_t *request);
camera_metadata_t* translateCbMetadataToResultMetadata(metadata_buffer_t *metadata,
- nsecs_t timestamp, int32_t request_id);
+ nsecs_t timestamp, int32_t request_id, int32_t BlobRequest,
+ jpeg_settings_t* InputJpegSettings);
int getJpegSettings(const camera_metadata_t *settings);
int initParameters();
void deinitParameters();
@@ -201,6 +202,7 @@
int32_t request_id;
List<RequestedBufferInfo> buffers;
int blob_request;
+ jpeg_settings_t input_jpeg_settings;
int input_buffer_present;
} PendingRequestInfo;
typedef KeyedVector<camera3_stream_t *, uint32_t> PendingBuffersMap;