OSDN Git Service

Fix sideband stream issues
authorWonsik Kim <wonsik@google.com>
Mon, 31 Mar 2014 14:16:08 +0000 (23:16 +0900)
committerWonsik Kim <wonsik@google.com>
Mon, 7 Apr 2014 06:59:22 +0000 (15:59 +0900)
- Notify a listener when sideband stream is set
- Mark a layer as visible when sideband stream is set, even though
no buffer is queued.

Change-Id: I9652bf530f2b5ce331533ec1bb3b10a815ca191c

libs/gui/BufferQueueProducer.cpp
services/surfaceflinger/Layer.cpp

index 9dd90ba..249b7c7 100644 (file)
@@ -793,8 +793,16 @@ status_t BufferQueueProducer::disconnect(int api) {
 }
 
 status_t BufferQueueProducer::setSidebandStream(const sp<NativeHandle>& stream) {
-    Mutex::Autolock _l(mCore->mMutex);
-    mCore->mSidebandStream = stream;
+    sp<IConsumerListener> listener;
+    { // Autolock scope
+        Mutex::Autolock _l(mCore->mMutex);
+        mCore->mSidebandStream = stream;
+        listener = mCore->mConsumerListener;
+    } // Autolock scope
+
+    if (listener != NULL) {
+        listener->onSidebandStreamChanged();
+    }
     return NO_ERROR;
 }
 
index 7f2ee2a..f272fd2 100644 (file)
@@ -959,7 +959,7 @@ void Layer::onPostComposition() {
 bool Layer::isVisible() const {
     const Layer::State& s(mDrawingState);
     return !(s.flags & layer_state_t::eLayerHidden) && s.alpha
-            && (mActiveBuffer != NULL);
+            && (mActiveBuffer != NULL || mSidebandStream != NULL);
 }
 
 Region Layer::latchBuffer(bool& recomputeVisibleRegions)