camera: update AU_LINUX_ANDROID_LA.BF64.1.2.9.05.01.00.089.251
ce5ca18 Camera3: Avoid duplicated crop/upscaling in pproc
2cb7416 Camera3: Store current JPEG setting
Change-Id: Idfa853cf9f749615a6d5d96b53a7664a3a8e7dc4
diff --git a/QCamera2/HAL3/QCamera3HWI.cpp b/QCamera2/HAL3/QCamera3HWI.cpp
index cc17d8a..801ec86 100755
--- a/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/QCamera2/HAL3/QCamera3HWI.cpp
@@ -1829,6 +1829,7 @@
mPendingReprocessResultList.clear();
mFirstRequest = true;
+ mCurJpegMeta.clear();
//Get min frame duration for this streams configuration
deriveMinFrameDuration();
@@ -2478,9 +2479,25 @@
i->timestamp = capture_time;
+ // Find channel requiring metadata, meaning internal offline postprocess
+ // is needed.
+ //TODO: for now, we don't support two streams requiring metadata at the same time.
+ // (because we are not making copies, and metadata buffer is not reference counted.
+ bool internalPproc = false;
+ for (pendingBufferIterator iter = i->buffers.begin();
+ iter != i->buffers.end(); iter++) {
+ if (iter->need_metadata) {
+ internalPproc = true;
+ QCamera3ProcessingChannel *channel =
+ (QCamera3ProcessingChannel *)iter->stream->priv;
+ channel->queueReprocMetadata(metadata_buf);
+ break;
+ }
+ }
+
result.result = translateFromHalMetadata(metadata,
i->timestamp, i->request_id, i->jpegMetadata, i->pipeline_depth,
- i->capture_intent);
+ i->capture_intent, internalPproc);
saveExifParams(metadata);
@@ -2501,24 +2518,13 @@
}
}
- // Find channel requiring metadata, and queue the current metadata.
- //TODO: for now, we don't support two streams requiring metadata at the same time.
- // (because we are not making copies, and metadata buffer is not reference counted.
- pendingBufferIterator iter = i->buffers.begin();
- while (iter != i->buffers.end() && !iter->need_metadata)
- iter++;
- if (iter == i->buffers.end()) {
+ if (!internalPproc) {
CDBG("%s: couldn't find need_metadata for this metadata", __func__);
// Return metadata buffer
if (free_and_bufdone_meta_buf) {
mMetadataChannel->bufDone(metadata_buf);
free(metadata_buf);
}
- } else {
- CDBG("%s: need_metadata is set for this metadata", __func__);
- QCamera3ProcessingChannel *channel =
- (QCamera3ProcessingChannel *)iter->stream->priv;
- channel->queueReprocMetadata(metadata_buf);
}
}
if (!result.result) {
@@ -3249,7 +3255,8 @@
pendingRequest.settings = input_settings.release();
pendingRequest.pipeline_depth = 0;
pendingRequest.partial_result_cnt = 0;
- extractJpegMetadata(pendingRequest.jpegMetadata, request);
+ extractJpegMetadata(mCurJpegMeta, request);
+ pendingRequest.jpegMetadata = mCurJpegMeta;
//extract capture intent
if (meta.exists(ANDROID_CONTROL_CAPTURE_INTENT)) {
@@ -3742,6 +3749,7 @@
* @timestamp: metadata buffer timestamp
* @request_id: request id
* @jpegMetadata: additional jpeg metadata
+ * @pprocDone: whether internal offline postprocsesing is done
*
* RETURN : camera_metadata_t*
* metadata in a format specified by fwk
@@ -3753,7 +3761,8 @@
int32_t request_id,
const CameraMetadata& jpegMetadata,
uint8_t pipeline_depth,
- uint8_t capture_intent)
+ uint8_t capture_intent,
+ bool pprocDone)
{
CameraMetadata camMetadata;
camera_metadata_t *resultMetadata;
@@ -4375,7 +4384,16 @@
// Reprocess crop data
IF_META_AVAILABLE(cam_crop_data_t, crop_data, CAM_INTF_META_CROP_DATA, metadata) {
uint8_t cnt = crop_data->num_of_streams;
- if ((0 < cnt) && (cnt < MAX_NUM_STREAMS)) {
+ if (pprocDone) {
+ // HAL already does internal reprocessing, either via reprocessing before
+ // JPEG encoding, or offline postprocessing for pproc bypass case.
+ CDBG("%s: Internal offline postprocessing was done, no need for further crop", __func__);
+ } else if ( (0 >= cnt) || (cnt > MAX_NUM_STREAMS)) {
+ // mm-qcamera-daemon only posts crop_data for streams
+ // not linked to pproc. So no valid crop metadata is not
+ // necessarily an error case.
+ CDBG("%s: No valid crop metadata entries", __func__);
+ } else {
uint32_t reproc_stream_id;
if ( NO_ERROR != getReprocessibleOutputStreamId(reproc_stream_id)) {
CDBG("%s: No reprocessible stream found, ignore crop data", __func__);
@@ -4428,11 +4446,6 @@
delete [] crop;
}
}
- } else {
- // mm-qcamera-daemon only posts crop_data for streams
- // not linked to pproc. So no valid crop metadata is not
- // necessarily an error case.
- CDBG("%s: No valid crop metadata entries", __func__);
}
}
diff --git a/QCamera2/HAL3/QCamera3HWI.h b/QCamera2/HAL3/QCamera3HWI.h
index d009625..f93d83e 100755
--- a/QCamera2/HAL3/QCamera3HWI.h
+++ b/QCamera2/HAL3/QCamera3HWI.h
@@ -174,7 +174,7 @@
camera_metadata_t* translateFromHalMetadata(metadata_buffer_t *metadata,
nsecs_t timestamp, int32_t request_id,
const CameraMetadata& jpegMetadata, uint8_t pipeline_depth,
- uint8_t capture_intent);
+ uint8_t capture_intent, bool pprocDone);
int initParameters();
void deinitParameters();
QCamera3ReprocessChannel *addOfflineReprocChannel(const reprocess_config_t &config,
@@ -292,6 +292,7 @@
QCamera3HeapMemory *mParamHeap;
metadata_buffer_t* mParameters;
metadata_buffer_t* mPrevParameters;
+ CameraMetadata mCurJpegMeta;
bool m_bIsVideo;
bool m_bIs4KVideo;
bool m_bEisSupportedSize;