diff options
author | Bill Yi <byi@google.com> | 2020-05-06 15:59:08 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2020-05-06 15:59:08 +0000 |
commit | cd5ee78cbe6c667367c801342d3728f46c790943 (patch) | |
tree | df775c83e297cbc78b1041bc4f45a12c31230c80 | |
parent | 8bf17a6d8e0d0276bfea9790c89b3b608a301694 (diff) | |
parent | e2c8de1127dbf074be7dd6b594c26233fe56c43b (diff) | |
download | camera-cd5ee78cbe6c667367c801342d3728f46c790943.tar.gz |
Merge "Merge android10-qpr2-s3-release to aosp/master - DO NOT MERGE"
-rw-r--r-- | msm8998/QCamera2/HAL3/QCamera3Channel.cpp | 4 | ||||
-rw-r--r-- | msm8998/QCamera2/HAL3/QCamera3Channel.h | 3 | ||||
-rw-r--r-- | msm8998/QCamera2/HAL3/QCamera3HWI.cpp | 22 | ||||
-rw-r--r-- | msm8998/QCamera2/HAL3/QCamera3HWI.h | 3 |
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 { |