summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBill Yi <byi@google.com>2020-05-06 15:59:08 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2020-05-06 15:59:08 +0000
commitcd5ee78cbe6c667367c801342d3728f46c790943 (patch)
treedf775c83e297cbc78b1041bc4f45a12c31230c80
parent8bf17a6d8e0d0276bfea9790c89b3b608a301694 (diff)
parente2c8de1127dbf074be7dd6b594c26233fe56c43b (diff)
downloadcamera-cd5ee78cbe6c667367c801342d3728f46c790943.tar.gz
Merge "Merge android10-qpr2-s3-release to aosp/master - DO NOT MERGE"
-rw-r--r--msm8998/QCamera2/HAL3/QCamera3Channel.cpp4
-rw-r--r--msm8998/QCamera2/HAL3/QCamera3Channel.h3
-rw-r--r--msm8998/QCamera2/HAL3/QCamera3HWI.cpp22
-rw-r--r--msm8998/QCamera2/HAL3/QCamera3HWI.h3
4 files changed, 26 insertions, 6 deletions
diff --git a/msm8998/QCamera2/HAL3/QCamera3Channel.cpp b/msm8998/QCamera2/HAL3/QCamera3Channel.cpp
index b60be86..04048ea 100644
--- a/msm8998/QCamera2/HAL3/QCamera3Channel.cpp
+++ b/msm8998/QCamera2/HAL3/QCamera3Channel.cpp
@@ -4296,7 +4296,7 @@ int32_t QCamera3PicChannel::returnYuvBuffer(mm_camera_buf_def_t *frame)
int32_t QCamera3PicChannel::returnYuvBufferAndEncode(mm_camera_buf_def_t *frame,
buffer_handle_t *outBuffer, uint32_t frameNumber,
- std::shared_ptr<metadata_buffer_t> metadata)
+ std::shared_ptr<metadata_buffer_t> metadata, mm_camera_buf_def_t *metaFrame)
{
int32_t rc = OK;
@@ -4382,7 +4382,7 @@ int32_t QCamera3PicChannel::returnYuvBufferAndEncode(mm_camera_buf_def_t *frame,
metadataBuf->camera_handle = m_camHandle;
metadataBuf->ch_id = getMyHandle();
metadataBuf->num_bufs = 1;
- metadataBuf->bufs[0] = (mm_camera_buf_def_t *)calloc(1, sizeof(mm_camera_buf_def_t));
+ metadataBuf->bufs[0] = metaFrame;
metadataBuf->bufs[0]->buffer = metadata.get();
// Start processing the metadata
diff --git a/msm8998/QCamera2/HAL3/QCamera3Channel.h b/msm8998/QCamera2/HAL3/QCamera3Channel.h
index 2ea7c2f..a441427 100644
--- a/msm8998/QCamera2/HAL3/QCamera3Channel.h
+++ b/msm8998/QCamera2/HAL3/QCamera3Channel.h
@@ -589,7 +589,8 @@ public:
// Return a YUV buffer (from getYuvBufferForRequest) and request jpeg encoding.
int32_t returnYuvBufferAndEncode(mm_camera_buf_def_t *frame,
buffer_handle_t *outBuffer, uint32_t frameNumber,
- std::shared_ptr<metadata_buffer_t> metadata);
+ std::shared_ptr<metadata_buffer_t> metadata,
+ mm_camera_buf_def_t *metaFrame);
// Return a YUV buffer (from getYuvBufferForRequest) without requesting jpeg encoding.
int32_t returnYuvBuffer(mm_camera_buf_def_t *frame);
diff --git a/msm8998/QCamera2/HAL3/QCamera3HWI.cpp b/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
index 5a7e3e0..8a4b25c 100644
--- a/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
@@ -5861,7 +5861,6 @@ no_error:
// Mark current timestamp for the new request
bufsForCurRequest.timestamp = systemTime(CLOCK_MONOTONIC);
bufsForCurRequest.av_timestamp = 0;
- bufsForCurRequest.hdrplus = hdrPlusRequest;
if (hdrPlusRequest) {
// Save settings for this request.
@@ -16439,10 +16438,29 @@ void QCamera3HardwareInterface::onCaptureResult(pbcamera::CaptureResult *result,
}
if (channel == mPictureChannel) {
+ android_errorWriteLog(0x534e4554, "150004253");
+ // Keep a copy of outputBufferDef until the final JPEG buffer is
+ // ready because the JPEG callback uses the mm_camera_buf_def_t
+ // struct. The metaBufDef is stored in a shared_ptr to make sure
+ // it's freed.
+ std::shared_ptr<mm_camera_buf_def_t> metaBufDef =
+ std::make_shared<mm_camera_buf_def_t>();
+ {
+ pthread_mutex_lock(&mMutex);
+ for (auto& pendingBuffers : mPendingBuffersMap.mPendingBuffersInRequest) {
+ if (pendingBuffers.frame_number == result->requestId) {
+ pendingBuffers.mHdrplusInputBuf = outputBufferDef;
+ pendingBuffers.mHdrplusInputMetaBuf = metaBufDef;
+ break;
+ }
+ }
+ pthread_mutex_unlock(&mMutex);
+ }
+
// Return the buffer to pic channel for encoding.
mPictureChannel->returnYuvBufferAndEncode(outputBufferDef.get(),
frameworkOutputBuffer->buffer, result->requestId,
- halMetadata);
+ halMetadata, metaBufDef.get());
} else {
// Return the buffer to camera framework.
pthread_mutex_lock(&mMutex);
diff --git a/msm8998/QCamera2/HAL3/QCamera3HWI.h b/msm8998/QCamera2/HAL3/QCamera3HWI.h
index 1dddf3a..c5c59fe 100644
--- a/msm8998/QCamera2/HAL3/QCamera3HWI.h
+++ b/msm8998/QCamera2/HAL3/QCamera3HWI.h
@@ -128,7 +128,8 @@ typedef struct {
nsecs_t timestamp;
nsecs_t av_timestamp;
List<PendingBufferInfo> mPendingBufferList;
- bool hdrplus;
+ std::shared_ptr<mm_camera_buf_def_t> mHdrplusInputBuf;
+ std::shared_ptr<mm_camera_buf_def_t> mHdrplusInputMetaBuf;
} PendingBuffersInRequest;
class PendingBuffersMap {