diff options
| author | 2014-06-27 15:51:55 -0700 | |
|---|---|---|
| committer | 2014-07-14 22:14:32 +0000 | |
| commit | 1681d95989271f3a9ac0dbb93d10e4a29f2b4444 (patch) | |
| tree | 52e23db3604b9b52d3f4d62324f279cb8942de69 /libs/gui/BufferQueueProducer.cpp | |
| parent | f3381cf1a645f857dccad9a4369ae23054e9d7d4 (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.cpp | 11 |
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(×tamp, &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; |