diff options
author | 2014-04-11 17:57:11 +0000 | |
---|---|---|
committer | 2014-04-11 17:57:12 +0000 | |
commit | fd34b65f717b84fa06d8c37f41b070f41d0ad3a3 (patch) | |
tree | 80315086e606f5184add4bab55c28e7687ccc931 /libs/gui/BufferQueueProducer.cpp | |
parent | 88a34b2f4351fe58b042f11af08ffd967ef7ce4c (diff) | |
parent | f0eaf25e9247edf4d124bedaeb863f7abdf35a3e (diff) |
Merge "BufferQueue: Add producer buffer-released callback"
Diffstat (limited to 'libs/gui/BufferQueueProducer.cpp')
-rw-r--r-- | libs/gui/BufferQueueProducer.cpp | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/libs/gui/BufferQueueProducer.cpp b/libs/gui/BufferQueueProducer.cpp index 249b7c7f55..ea37309fdb 100644 --- a/libs/gui/BufferQueueProducer.cpp +++ b/libs/gui/BufferQueueProducer.cpp @@ -25,6 +25,7 @@ #include <gui/BufferQueueProducer.h> #include <gui/IConsumerListener.h> #include <gui/IGraphicBufferAlloc.h> +#include <gui/IProducerListener.h> #include <utils/Log.h> #include <utils/Trace.h> @@ -654,7 +655,7 @@ int BufferQueueProducer::query(int what, int *outValue) { return NO_ERROR; } -status_t BufferQueueProducer::connect(const sp<android::IBinder> &token, +status_t BufferQueueProducer::connect(const sp<IProducerListener>& listener, int api, bool producerControlledByApp, QueueBufferOutput *output) { ATRACE_CALL(); Mutex::Autolock lock(mCore->mMutex); @@ -711,16 +712,16 @@ status_t BufferQueueProducer::connect(const sp<android::IBinder> &token, // Set up a death notification so that we can disconnect // automatically if the remote producer dies - if (token != NULL && token->remoteBinder() != NULL) { - status = token->linkToDeath( + if (listener != NULL && + listener->asBinder()->remoteBinder() != NULL) { + status = listener->asBinder()->linkToDeath( static_cast<IBinder::DeathRecipient*>(this)); - if (status == NO_ERROR) { - mCore->mConnectedProducerToken = token; - } else { + if (status != NO_ERROR) { BQ_LOGE("connect(P): linkToDeath failed: %s (%d)", strerror(-status), status); } } + mCore->mConnectedProducerListener = listener; break; default: BQ_LOGE("connect(P): unknown API %d", api); @@ -759,14 +760,15 @@ status_t BufferQueueProducer::disconnect(int api) { mCore->freeAllBuffersLocked(); // Remove our death notification callback if we have one - sp<IBinder> token = mCore->mConnectedProducerToken; - if (token != NULL) { + if (mCore->mConnectedProducerListener != NULL) { + sp<IBinder> token = + mCore->mConnectedProducerListener->asBinder(); // This can fail if we're here because of the death // notification, but we just ignore it token->unlinkToDeath( static_cast<IBinder::DeathRecipient*>(this)); } - mCore->mConnectedProducerToken = NULL; + mCore->mConnectedProducerListener = NULL; mCore->mConnectedApi = BufferQueueCore::NO_CONNECTED_API; mCore->mSidebandStream.clear(); mCore->mDequeueCondition.broadcast(); |