diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2018-05-23 07:20:47 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2018-05-23 07:20:47 +0000 |
commit | 9fd60aa641062ccba5e0b4685977ceb052134d1d (patch) | |
tree | 5aecc1d73a4887c2a1a935f4ec6efb676607e275 | |
parent | 44f1899a9851e43b4997e5c661372eb50cc2115e (diff) | |
parent | 40ba48ae0a3f2710f16c4fee53685002040595ba (diff) | |
download | camera-9fd60aa641062ccba5e0b4685977ceb052134d1d.tar.gz |
Snap for 4799153 from 40ba48ae0a3f2710f16c4fee53685002040595ba to pi-releaseandroid-wear-9.0.0_r9android-wear-9.0.0_r8android-wear-9.0.0_r7android-wear-9.0.0_r6android-wear-9.0.0_r5android-wear-9.0.0_r4android-wear-9.0.0_r34android-wear-9.0.0_r33android-wear-9.0.0_r32android-wear-9.0.0_r31android-wear-9.0.0_r30android-wear-9.0.0_r3android-wear-9.0.0_r29android-wear-9.0.0_r28android-wear-9.0.0_r27android-wear-9.0.0_r26android-wear-9.0.0_r25android-wear-9.0.0_r24android-wear-9.0.0_r23android-wear-9.0.0_r22android-wear-9.0.0_r21android-wear-9.0.0_r20android-wear-9.0.0_r2android-wear-9.0.0_r19android-wear-9.0.0_r18android-wear-9.0.0_r17android-wear-9.0.0_r16android-wear-9.0.0_r15android-wear-9.0.0_r14android-wear-9.0.0_r13android-wear-9.0.0_r12android-wear-9.0.0_r11android-wear-9.0.0_r10android-wear-9.0.0_r1android-vts-9.0_r9android-vts-9.0_r8android-vts-9.0_r7android-vts-9.0_r6android-vts-9.0_r5android-vts-9.0_r4android-vts-9.0_r19android-vts-9.0_r18android-vts-9.0_r17android-vts-9.0_r16android-vts-9.0_r15android-vts-9.0_r14android-vts-9.0_r13android-vts-9.0_r12android-vts-9.0_r11android-vts-9.0_r10android-cts-9.0_r9android-cts-9.0_r8android-cts-9.0_r7android-cts-9.0_r6android-cts-9.0_r5android-cts-9.0_r4android-cts-9.0_r3android-cts-9.0_r20android-cts-9.0_r2android-cts-9.0_r19android-cts-9.0_r18android-cts-9.0_r17android-cts-9.0_r16android-cts-9.0_r15android-cts-9.0_r14android-cts-9.0_r13android-cts-9.0_r12android-cts-9.0_r11android-cts-9.0_r10android-cts-9.0_r1android-9.0.0_r9android-9.0.0_r8android-9.0.0_r7android-9.0.0_r6android-9.0.0_r55android-9.0.0_r54android-9.0.0_r53android-9.0.0_r52android-9.0.0_r51android-9.0.0_r50android-9.0.0_r5android-9.0.0_r49android-9.0.0_r48android-9.0.0_r3android-9.0.0_r2android-9.0.0_r18android-9.0.0_r17android-9.0.0_r10android-9.0.0_r1pie-vts-releasepie-s2-releasepie-release-2pie-releasepie-r2-s2-releasepie-r2-s1-releasepie-r2-releasepie-platform-releasepie-gsipie-cuttlefish-testingpie-cts-release
Change-Id: I7caf6fe033c7e299573f1865db1243ee3195dcdd
-rw-r--r-- | msm8998/QCamera2/HAL3/QCamera3Channel.cpp | 84 | ||||
-rw-r--r-- | msm8998/QCamera2/HAL3/QCamera3Channel.h | 2 | ||||
-rw-r--r-- | msm8998/QCamera2/HAL3/QCamera3HWI.cpp | 19 | ||||
-rw-r--r-- | msm8998/QCamera2/HAL3/QCamera3PostProc.cpp | 1 |
4 files changed, 106 insertions, 0 deletions
diff --git a/msm8998/QCamera2/HAL3/QCamera3Channel.cpp b/msm8998/QCamera2/HAL3/QCamera3Channel.cpp index ac6a600..0e3b4af 100644 --- a/msm8998/QCamera2/HAL3/QCamera3Channel.cpp +++ b/msm8998/QCamera2/HAL3/QCamera3Channel.cpp @@ -1041,6 +1041,41 @@ int32_t QCamera3ProcessingChannel::timeoutFrame(uint32_t frameNumber) } /*=========================================================================== + * FUNCTION : postprocFail + * + * DESCRIPTION: notify clients about failing post-process requests. + * + * PARAMETERS : + * @ppBuffer : pointer to the pp buffer. + * + * RETURN : 0 on success + * -EINVAL on invalid input + *==========================================================================*/ +int32_t QCamera3ProcessingChannel::postprocFail(qcamera_hal3_pp_buffer_t *ppBuffer) { + if (ppBuffer == nullptr) { + return BAD_VALUE; + } + + if (ppBuffer->output == nullptr) { + return BAD_VALUE; + } + + camera3_stream_buffer_t result = {}; + result.buffer = ppBuffer->output; + + LOGE("Input frame number: %d dropped!", ppBuffer->frameNumber); + result.stream = mCamera3Stream; + result.status = CAMERA3_BUFFER_STATUS_ERROR; + result.acquire_fence = -1; + result.release_fence = -1; + if (mChannelCB) { + mChannelCB(NULL, &result, ppBuffer->frameNumber, false, mUserData); + } + + return OK; +} + +/*=========================================================================== * FUNCTION : request * * DESCRIPTION: handle the request - either with an input buffer or a direct @@ -3037,6 +3072,55 @@ int32_t QCamera3YUVChannel::request(buffer_handle_t *buffer, } /*=========================================================================== + * FUNCTION : postprocFail + * + * DESCRIPTION: notify clients about failing post-process requests. + * + * PARAMETERS : + * @ppBuffer : pointer to the pp buffer. + * + * RETURN : 0 on success + * -EINVAL on invalid input + *==========================================================================*/ +int32_t QCamera3YUVChannel::postprocFail(qcamera_hal3_pp_buffer_t *ppBuffer) { + if (ppBuffer == nullptr) { + return BAD_VALUE; + } + + { + List<PpInfo>::iterator ppInfo; + + Mutex::Autolock lock(mOfflinePpLock); + for (ppInfo = mOfflinePpInfoList.begin(); + ppInfo != mOfflinePpInfoList.end(); ppInfo++) { + if (ppInfo->frameNumber == ppBuffer->frameNumber) { + break; + } + } + + if (ppInfo == mOfflinePpInfoList.end()) { + LOGE("Offline reprocess info for frame number: %d not found!", ppBuffer->frameNumber); + return BAD_VALUE; + } + + LOGE("Failed YUV post-process on frame number: %d removing from offline queue!", + ppBuffer->frameNumber); + mOfflinePpInfoList.erase(ppInfo); + } + + int32_t bufferIndex = mMemory.getHeapBufferIndex(ppBuffer->frameNumber); + if (bufferIndex < 0) { + LOGE("Fatal %d: no buffer index for frame number %d", bufferIndex, ppBuffer->frameNumber); + return BAD_VALUE; + } else { + mMemory.markFrameNumber(bufferIndex, -1); + mFreeHeapBufferList.push_back(bufferIndex); + } + + return QCamera3ProcessingChannel::postprocFail(ppBuffer); +} + +/*=========================================================================== * FUNCTION : streamCbRoutine * * DESCRIPTION: diff --git a/msm8998/QCamera2/HAL3/QCamera3Channel.h b/msm8998/QCamera2/HAL3/QCamera3Channel.h index a23acd5..11eb3d1 100644 --- a/msm8998/QCamera2/HAL3/QCamera3Channel.h +++ b/msm8998/QCamera2/HAL3/QCamera3Channel.h @@ -250,6 +250,7 @@ public: QCamera3Stream *stream); int32_t getStreamSize(cam_dimension_t &dim); virtual int32_t timeoutFrame(uint32_t frameNumber); + virtual int32_t postprocFail(qcamera_hal3_pp_buffer_t *ppBuffer); QCamera3PostProcessor m_postprocessor; // post processor void showDebugFPS(int32_t streamType); @@ -497,6 +498,7 @@ public: virtual void putStreamBufs(); virtual void reprocessCbRoutine(buffer_handle_t *resultBuffer, uint32_t resultFrameNumber); + virtual int32_t postprocFail(qcamera_hal3_pp_buffer_t *ppBuffer); private: typedef struct { diff --git a/msm8998/QCamera2/HAL3/QCamera3HWI.cpp b/msm8998/QCamera2/HAL3/QCamera3HWI.cpp index 82ef37b..d7a432c 100644 --- a/msm8998/QCamera2/HAL3/QCamera3HWI.cpp +++ b/msm8998/QCamera2/HAL3/QCamera3HWI.cpp @@ -4132,6 +4132,7 @@ void QCamera3HardwareInterface::handleMetadataWithLock( if(p_is_metabuf_queued != NULL) { *p_is_metabuf_queued = true; } + iter->need_metadata = false; break; } } @@ -4629,6 +4630,24 @@ void QCamera3HardwareInterface::dispatchResultMetadataWithLock(uint32_t frameNum } if (errorResult) { + // Check for any buffers that might be stuck in the post-process input queue + // awaiting metadata and queue an empty meta buffer. The invalid data should + // fail the offline post-process pass and return any buffers that otherwise + // will become lost. + for (auto it = iter->buffers.begin(); it != iter->buffers.end(); it++) { + if (it->need_metadata) { + QCamera3ProcessingChannel *channel = + reinterpret_cast<QCamera3ProcessingChannel *> (it->stream->priv); + if (channel != nullptr) { + LOGE("Dropped result: %d Unblocking any pending pp buffers!", + iter->frame_number); + channel->queueReprocMetadata(nullptr); + } + it->need_metadata = false; + break; + } + } + notifyError(iter->frame_number, CAMERA3_MSG_ERROR_RESULT); } else { result.output_buffers = nullptr; diff --git a/msm8998/QCamera2/HAL3/QCamera3PostProc.cpp b/msm8998/QCamera2/HAL3/QCamera3PostProc.cpp index 82925aa..fc0d8fb 100644 --- a/msm8998/QCamera2/HAL3/QCamera3PostProc.cpp +++ b/msm8998/QCamera2/HAL3/QCamera3PostProc.cpp @@ -2173,6 +2173,7 @@ void *QCamera3PostProcessor::dataProcessRoutine(void *data) LOGE("no mem for qcamera_hal3_pp_data_t"); ret = -1; } else if (meta_buffer == NULL) { + pme->m_parent->postprocFail(pp_buffer); LOGE("failed to dequeue from m_inputMetaQ"); ret = -1; } else if (pp_buffer == NULL) { |