diff --git a/libs/gui/BufferQueueConsumer.cpp b/libs/gui/BufferQueueConsumer.cpp index b591c4e8ba1a07e0053c40b572b43fa963699e04..cbc88932ac3af0d030ab93b09f7a632f534261f9 100644 --- a/libs/gui/BufferQueueConsumer.cpp +++ b/libs/gui/BufferQueueConsumer.cpp @@ -622,6 +622,10 @@ status_t BufferQueueConsumer::setMaxAcquiredBufferCount( return NO_INIT; } + if (maxAcquiredBuffers == mCore->mMaxAcquiredBufferCount) { + return NO_ERROR; + } + // The new maxAcquiredBuffers count should not be violated by the number // of currently acquired buffers int acquiredCount = 0; diff --git a/libs/gui/BufferQueueProducer.cpp b/libs/gui/BufferQueueProducer.cpp index bb8d39b76005ccdc18cbd077e33f18039a2cc4be..91ba18db7f38b160c5b0bd836eff352311eda68f 100644 --- a/libs/gui/BufferQueueProducer.cpp +++ b/libs/gui/BufferQueueProducer.cpp @@ -101,6 +101,10 @@ status_t BufferQueueProducer::setMaxDequeuedBufferCount( return NO_INIT; } + if (maxDequeuedBuffers == mCore->mMaxDequeuedBufferCount) { + return NO_ERROR; + } + // The new maxDequeuedBuffer count should not be violated by the number // of currently dequeued buffers int dequeuedCount = 0; @@ -175,6 +179,10 @@ status_t BufferQueueProducer::setAsyncMode(bool async) { return NO_INIT; } + if (async == mCore->mAsyncMode) { + return NO_ERROR; + } + if ((mCore->mMaxAcquiredBufferCount + mCore->mMaxDequeuedBufferCount + (async || mCore->mDequeueBufferCannotBlock ? 1 : 0)) > mCore->mMaxBufferCount) { @@ -199,7 +207,9 @@ status_t BufferQueueProducer::setAsyncMode(bool async) { mCore->mAsyncMode = async; VALIDATE_CONSISTENCY(); mCore->mDequeueCondition.broadcast(); - listener = mCore->mConsumerListener; + if (delta < 0) { + listener = mCore->mConsumerListener; + } } // Autolock scope // Call back without lock held