diff options
| author | 2015-08-19 16:16:06 -0700 | |
|---|---|---|
| committer | 2015-09-02 17:38:19 -0700 | |
| commit | 19e3e06e3c65a7c001a6fe0971744ba5ff536515 (patch) | |
| tree | 60203a5bc136ed4c78353bf98754489481a10cd0 /libs/gui/BufferQueueConsumer.cpp | |
| parent | 2ce8e26b32bc0b3364ae8d55abb9082c56365607 (diff) | |
BQ: Modify consumer buffer count interfaces
- Rename setDefaultMaxBufferCount() to setMaxBufferCount(). Modify it
to be hard maximum on the number of buffers that can't be overwritten
by the producer.
- Enforce the maximum buffer count in setMaxAcquiredBufferCount(),
setMaxDequeuedBufferCount(), and setAsyncMode().
- Remove mOverrideMaxBufferCount as it's no longer needed since
overriding is no longer possible.
- Expose setMaxAcquiredBufferCount() in GLConsumer.
- Remove disableAsyncBuffer(), it was only being used for single buffer
mode. Single buffer mode is now achievable with setMaxBufferCount().
Bug 13174928
Change-Id: Ia33799f42751272a711fbd8559f7602ce9f18e4f
Diffstat (limited to 'libs/gui/BufferQueueConsumer.cpp')
| -rw-r--r-- | libs/gui/BufferQueueConsumer.cpp | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/libs/gui/BufferQueueConsumer.cpp b/libs/gui/BufferQueueConsumer.cpp index bb3e1b0a4d..950a07400b 100644 --- a/libs/gui/BufferQueueConsumer.cpp +++ b/libs/gui/BufferQueueConsumer.cpp @@ -482,24 +482,29 @@ status_t BufferQueueConsumer::setDefaultBufferSize(uint32_t width, return NO_ERROR; } -status_t BufferQueueConsumer::setDefaultMaxBufferCount(int bufferCount) { +status_t BufferQueueConsumer::setMaxBufferCount(int bufferCount) { ATRACE_CALL(); - Mutex::Autolock lock(mCore->mMutex); - return mCore->setDefaultMaxBufferCountLocked(bufferCount); -} -status_t BufferQueueConsumer::disableAsyncBuffer() { - ATRACE_CALL(); + if (bufferCount < 1 || bufferCount > BufferQueueDefs::NUM_BUFFER_SLOTS) { + BQ_LOGE("setMaxBufferCount: invalid count %d", bufferCount); + return BAD_VALUE; + } Mutex::Autolock lock(mCore->mMutex); - if (mCore->mConsumerListener != NULL) { - BQ_LOGE("disableAsyncBuffer: consumer already connected"); + if (mCore->mConnectedApi != BufferQueueCore::NO_CONNECTED_API) { + BQ_LOGE("setMaxBufferCount: producer is already connected"); return INVALID_OPERATION; } - BQ_LOGV("disableAsyncBuffer"); - mCore->mUseAsyncBuffer = false; + if (bufferCount < mCore->mMaxAcquiredBufferCount) { + BQ_LOGE("setMaxBufferCount: invalid buffer count (%d) less than" + "mMaxAcquiredBufferCount (%d)", bufferCount, + mCore->mMaxAcquiredBufferCount); + return BAD_VALUE; + } + + mCore->mMaxBufferCount = bufferCount; return NO_ERROR; } @@ -521,6 +526,15 @@ status_t BufferQueueConsumer::setMaxAcquiredBufferCount( return INVALID_OPERATION; } + if ((maxAcquiredBuffers + mCore->mMaxDequeuedBufferCount + + (mCore->mAsyncMode ? 1 : 0)) > mCore->mMaxBufferCount) { + BQ_LOGE("setMaxAcquiredBufferCount: %d acquired buffers would exceed " + "the maxBufferCount (%d) (maxDequeued %d async %d)", + maxAcquiredBuffers, mCore->mMaxBufferCount, + mCore->mMaxDequeuedBufferCount, mCore->mAsyncMode); + return BAD_VALUE; + } + BQ_LOGV("setMaxAcquiredBufferCount: %d", maxAcquiredBuffers); mCore->mMaxAcquiredBufferCount = maxAcquiredBuffers; return NO_ERROR; |