diff options
Diffstat (limited to 'libs/gui')
-rw-r--r-- | libs/gui/BufferQueue.cpp | 2 | ||||
-rw-r--r-- | libs/gui/BufferQueueConsumer.cpp | 10 | ||||
-rw-r--r-- | libs/gui/ConsumerBase.cpp | 4 | ||||
-rw-r--r-- | libs/gui/IGraphicBufferConsumer.cpp | 12 |
4 files changed, 16 insertions, 12 deletions
diff --git a/libs/gui/BufferQueue.cpp b/libs/gui/BufferQueue.cpp index 782afcc..34fd733 100644 --- a/libs/gui/BufferQueue.cpp +++ b/libs/gui/BufferQueue.cpp @@ -158,7 +158,7 @@ status_t BufferQueue::consumerDisconnect() { return mConsumer->disconnect(); } -status_t BufferQueue::getReleasedBuffers(uint32_t* slotMask) { +status_t BufferQueue::getReleasedBuffers(uint64_t* slotMask) { return mConsumer->getReleasedBuffers(slotMask); } diff --git a/libs/gui/BufferQueueConsumer.cpp b/libs/gui/BufferQueueConsumer.cpp index 756cd61..985dcaa 100644 --- a/libs/gui/BufferQueueConsumer.cpp +++ b/libs/gui/BufferQueueConsumer.cpp @@ -346,7 +346,7 @@ status_t BufferQueueConsumer::disconnect() { return NO_ERROR; } -status_t BufferQueueConsumer::getReleasedBuffers(uint32_t *outSlotMask) { +status_t BufferQueueConsumer::getReleasedBuffers(uint64_t *outSlotMask) { ATRACE_CALL(); if (outSlotMask == NULL) { @@ -361,10 +361,10 @@ status_t BufferQueueConsumer::getReleasedBuffers(uint32_t *outSlotMask) { return NO_INIT; } - uint32_t mask = 0; + uint64_t mask = 0; for (int s = 0; s < BufferQueueDefs::NUM_BUFFER_SLOTS; ++s) { if (!mSlots[s].mAcquireCalled) { - mask |= (1u << s); + mask |= (1ULL << s); } } @@ -374,12 +374,12 @@ status_t BufferQueueConsumer::getReleasedBuffers(uint32_t *outSlotMask) { BufferQueueCore::Fifo::iterator current(mCore->mQueue.begin()); while (current != mCore->mQueue.end()) { if (current->mAcquireCalled) { - mask &= ~(1u << current->mSlot); + mask &= ~(1ULL << current->mSlot); } ++current; } - BQ_LOGV("getReleasedBuffers: returning mask %#x", mask); + BQ_LOGV("getReleasedBuffers: returning mask %#" PRIx64, mask); *outSlotMask = mask; return NO_ERROR; } diff --git a/libs/gui/ConsumerBase.cpp b/libs/gui/ConsumerBase.cpp index b6adc54..f1b8fa8 100644 --- a/libs/gui/ConsumerBase.cpp +++ b/libs/gui/ConsumerBase.cpp @@ -121,10 +121,10 @@ void ConsumerBase::onBuffersReleased() { return; } - uint32_t mask = 0; + uint64_t mask = 0; mConsumer->getReleasedBuffers(&mask); for (int i = 0; i < BufferQueue::NUM_BUFFER_SLOTS; i++) { - if (mask & (1 << i)) { + if (mask & (1ULL << i)) { freeBufferLocked(i); } } diff --git a/libs/gui/IGraphicBufferConsumer.cpp b/libs/gui/IGraphicBufferConsumer.cpp index 1b19626..ab644de 100644 --- a/libs/gui/IGraphicBufferConsumer.cpp +++ b/libs/gui/IGraphicBufferConsumer.cpp @@ -298,14 +298,18 @@ public: return reply.readInt32(); } - virtual status_t getReleasedBuffers(uint32_t* slotMask) { + virtual status_t getReleasedBuffers(uint64_t* slotMask) { Parcel data, reply; + if (slotMask == NULL) { + ALOGE("getReleasedBuffers: slotMask must not be NULL"); + return BAD_VALUE; + } data.writeInterfaceToken(IGraphicBufferConsumer::getInterfaceDescriptor()); status_t result = remote()->transact(GET_RELEASED_BUFFERS, data, &reply); if (result != NO_ERROR) { return result; } - *slotMask = reply.readInt32(); + *slotMask = reply.readInt64(); return reply.readInt32(); } @@ -480,9 +484,9 @@ status_t BnGraphicBufferConsumer::onTransact( } break; case GET_RELEASED_BUFFERS: { CHECK_INTERFACE(IGraphicBufferConsumer, data, reply); - uint32_t slotMask; + uint64_t slotMask; status_t result = getReleasedBuffers(&slotMask); - reply->writeInt32(slotMask); + reply->writeInt64(slotMask); reply->writeInt32(result); return NO_ERROR; } break; |