From da208450df02e12c8d2cb42769c5e6cb87949954 Mon Sep 17 00:00:00 2001 From: Yin-Chia Yeh Date: Mon, 26 Aug 2019 15:35:57 -0700 Subject: [PATCH] Camera: hook up frame replaced callback for stream splitter Test: partner provided test APK Bug: 136777506 Change-Id: I75641c1d87672fe6ec3af5726d1f1c90356984f7 --- .../libcameraservice/device3/Camera3StreamSplitter.cpp | 7 ++++++- .../libcameraservice/device3/Camera3StreamSplitter.h | 7 +++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/services/camera/libcameraservice/device3/Camera3StreamSplitter.cpp b/services/camera/libcameraservice/device3/Camera3StreamSplitter.cpp index 84c2ec7544..80df7dbf0f 100644 --- a/services/camera/libcameraservice/device3/Camera3StreamSplitter.cpp +++ b/services/camera/libcameraservice/device3/Camera3StreamSplitter.cpp @@ -496,7 +496,7 @@ void Camera3StreamSplitter::onFrameAvailable(const BufferItem& /*item*/) { mInputSlots[bufferItem.mSlot].mFrameNumber = bufferItem.mFrameNumber; } else { SP_LOGE("%s: Invalid input graphic buffer!", __FUNCTION__); - res = BAD_VALUE; + mOnFrameAvailableRes.store(BAD_VALUE); return; } bufferId = bufferItem.mGraphicBuffer->getId(); @@ -541,6 +541,11 @@ void Camera3StreamSplitter::onFrameAvailable(const BufferItem& /*item*/) { mOnFrameAvailableRes.store(res); } +void Camera3StreamSplitter::onFrameReplaced(const BufferItem& item) { + ATRACE_CALL(); + onFrameAvailable(item); +} + void Camera3StreamSplitter::decrementBufRefCountLocked(uint64_t id, size_t surfaceId) { ATRACE_CALL(); diff --git a/services/camera/libcameraservice/device3/Camera3StreamSplitter.h b/services/camera/libcameraservice/device3/Camera3StreamSplitter.h index 960f7aae06..4eb455abea 100644 --- a/services/camera/libcameraservice/device3/Camera3StreamSplitter.h +++ b/services/camera/libcameraservice/device3/Camera3StreamSplitter.h @@ -101,6 +101,13 @@ private: // input. void onFrameAvailable(const BufferItem& item) override; + // From IConsumerListener + // + // Similar to onFrameAvailable, but buffer item is indeed replacing a buffer + // in the buffer queue. This can happen when buffer queue is in droppable + // mode. + void onFrameReplaced(const BufferItem& item) override; + // From IConsumerListener // We don't care about released buffers because we detach each buffer as // soon as we acquire it. See the comment for onBufferReleased below for