From f0f13e8565bbac178e631a81a173c6533728c6a1 Mon Sep 17 00:00:00 2001 From: John Reck Date: Tue, 18 May 2021 00:42:56 -0400 Subject: Add a better getLastQueuedBuffer Avoid obfuscation via a matrix that's not necessarily useful or in the desired origin of the caller. Instead return the source data, which is also a lot smaller than the matrix is... Bug: 183553027 Test: atest android.view.cts.PixelCopyTest (+new testBufferQueueCrop) Change-Id: I1f7b5981405b2f20293bce9119414fc7780b8eb6 Merged-In: I1f7b5981405b2f20293bce9119414fc7780b8eb6 --- libs/gui/BufferQueueProducer.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'libs/gui/BufferQueueProducer.cpp') diff --git a/libs/gui/BufferQueueProducer.cpp b/libs/gui/BufferQueueProducer.cpp index a7cf39add9..df308d897b 100644 --- a/libs/gui/BufferQueueProducer.cpp +++ b/libs/gui/BufferQueueProducer.cpp @@ -1621,6 +1621,26 @@ status_t BufferQueueProducer::getLastQueuedBuffer(sp* outBuffer, return NO_ERROR; } +status_t BufferQueueProducer::getLastQueuedBuffer(sp* outBuffer, sp* outFence, + Rect* outRect, uint32_t* outTransform) { + ATRACE_CALL(); + BQ_LOGV("getLastQueuedBuffer"); + + std::lock_guard lock(mCore->mMutex); + if (mCore->mLastQueuedSlot == BufferItem::INVALID_BUFFER_SLOT) { + *outBuffer = nullptr; + *outFence = Fence::NO_FENCE; + return NO_ERROR; + } + + *outBuffer = mSlots[mCore->mLastQueuedSlot].mGraphicBuffer; + *outFence = mLastQueueBufferFence; + *outRect = mLastQueuedCrop; + *outTransform = mLastQueuedTransform; + + return NO_ERROR; +} + void BufferQueueProducer::getFrameTimestamps(FrameEventHistoryDelta* outDelta) { addAndGetFrameTimestamps(nullptr, outDelta); } -- cgit v1.2.3-59-g8ed1b