summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2018-05-23 07:20:47 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2018-05-23 07:20:47 +0000
commit9fd60aa641062ccba5e0b4685977ceb052134d1d (patch)
tree5aecc1d73a4887c2a1a935f4ec6efb676607e275
parent44f1899a9851e43b4997e5c661372eb50cc2115e (diff)
parent40ba48ae0a3f2710f16c4fee53685002040595ba (diff)
downloadcamera-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.cpp84
-rw-r--r--msm8998/QCamera2/HAL3/QCamera3Channel.h2
-rw-r--r--msm8998/QCamera2/HAL3/QCamera3HWI.cpp19
-rw-r--r--msm8998/QCamera2/HAL3/QCamera3PostProc.cpp1
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) {