summaryrefslogtreecommitdiff
path: root/libs/gui/BufferQueueProducer.cpp
diff options
context:
space:
mode:
author Ruben Brunk <rubenbrunk@google.com> 2014-06-27 15:51:55 -0700
committer Ruben Brunk <rubenbrunk@google.com> 2014-07-14 22:14:32 +0000
commit1681d95989271f3a9ac0dbb93d10e4a29f2b4444 (patch)
tree52e23db3604b9b52d3f4d62324f279cb8942de69 /libs/gui/BufferQueueProducer.cpp
parentf3381cf1a645f857dccad9a4369ae23054e9d7d4 (diff)
Add sticky transform to surfaceflinger.
Bug: 15116722 - Adds a sticky transform field that can be set from a SurfaceFlinger client Surface. This transform is added to any transform applied to the Surface. Change-Id: Idaa4311dfd027b2d2b8ea5e2c6cba2da5779d753
Diffstat (limited to 'libs/gui/BufferQueueProducer.cpp')
-rw-r--r--libs/gui/BufferQueueProducer.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/libs/gui/BufferQueueProducer.cpp b/libs/gui/BufferQueueProducer.cpp
index 70c3ff33e8..6feebf72cb 100644
--- a/libs/gui/BufferQueueProducer.cpp
+++ b/libs/gui/BufferQueueProducer.cpp
@@ -37,7 +37,8 @@ namespace android {
BufferQueueProducer::BufferQueueProducer(const sp<BufferQueueCore>& core) :
mCore(core),
mSlots(core->mSlots),
- mConsumerName() {}
+ mConsumerName(),
+ mStickyTransform(0) {}
BufferQueueProducer::~BufferQueueProducer() {}
@@ -509,10 +510,11 @@ status_t BufferQueueProducer::queueBuffer(int slot,
Rect crop;
int scalingMode;
uint32_t transform;
+ uint32_t stickyTransform;
bool async;
sp<Fence> fence;
input.deflate(&timestamp, &isAutoTimestamp, &crop, &scalingMode, &transform,
- &async, &fence);
+ &async, &fence, &stickyTransform);
if (fence == NULL) {
BQ_LOGE("queueBuffer: fence is NULL");
@@ -601,6 +603,8 @@ status_t BufferQueueProducer::queueBuffer(int slot,
item.mFence = fence;
item.mIsDroppable = mCore->mDequeueBufferCannotBlock || async;
+ mStickyTransform = stickyTransform;
+
if (mCore->mQueue.empty()) {
// When the queue is empty, we can ignore mDequeueBufferCannotBlock
// and simply queue this buffer
@@ -701,6 +705,9 @@ int BufferQueueProducer::query(int what, int *outValue) {
case NATIVE_WINDOW_MIN_UNDEQUEUED_BUFFERS:
value = mCore->getMinUndequeuedBufferCountLocked(false);
break;
+ case NATIVE_WINDOW_STICKY_TRANSFORM:
+ value = static_cast<int>(mStickyTransform);
+ break;
case NATIVE_WINDOW_CONSUMER_RUNNING_BEHIND:
value = (mCore->mQueue.size() > 1);
break;