Return the transform to apply in getLastQueuedBuffer
Bug: 28428955
Change-Id: Id48f7d3bf3f5deb074cf0a6a52a41caac875db41
diff --git a/libs/gui/BufferQueueProducer.cpp b/libs/gui/BufferQueueProducer.cpp
index 73f61c5..3e26e05 100644
--- a/libs/gui/BufferQueueProducer.cpp
+++ b/libs/gui/BufferQueueProducer.cpp
@@ -31,6 +31,7 @@
#include <gui/BufferItem.h>
#include <gui/BufferQueueCore.h>
#include <gui/BufferQueueProducer.h>
+#include <gui/GLConsumer.h>
#include <gui/IConsumerListener.h>
#include <gui/IGraphicBufferAlloc.h>
#include <gui/IProducerListener.h>
@@ -923,6 +924,8 @@
mLastQueueBufferFence->waitForever("Throttling EGL Production");
}
mLastQueueBufferFence = fence;
+ mLastQueuedCrop = item.mCrop;
+ mLastQueuedTransform = item.mTransform;
return NO_ERROR;
}
@@ -1372,7 +1375,7 @@
}
status_t BufferQueueProducer::getLastQueuedBuffer(sp<GraphicBuffer>* outBuffer,
- sp<Fence>* outFence) {
+ sp<Fence>* outFence, float outTransformMatrix[16]) {
ATRACE_CALL();
BQ_LOGV("getLastQueuedBuffer");
@@ -1386,6 +1389,14 @@
*outBuffer = mSlots[mCore->mLastQueuedSlot].mGraphicBuffer;
*outFence = mLastQueueBufferFence;
+ // Currently only SurfaceFlinger internally ever changes
+ // GLConsumer's filtering mode, so we just use 'true' here as
+ // this is slightly specialized for the current client of this API,
+ // which does want filtering.
+ GLConsumer::computeTransformMatrix(outTransformMatrix,
+ mSlots[mCore->mLastQueuedSlot].mGraphicBuffer, mLastQueuedCrop,
+ mLastQueuedTransform, true /* filter */);
+
return NO_ERROR;
}