OSDN Git Service

SF: Connect the VDS scratch surface producer
authorPablo Ceballos <pceballos@google.com>
Fri, 23 Oct 2015 19:10:13 +0000 (12:10 -0700)
committerPablo Ceballos <pceballos@google.com>
Fri, 23 Oct 2015 19:13:41 +0000 (12:13 -0700)
- VirtualDisplaySurface has a BufferQueue for producing scratch
  buffers when doing mixed composition for a virtual display.
- Connect/disconnect the producer end of this BufferQueue in the
  VirtualDisplaySurface constructor/destructor to avoid using it in a
  disconnected state.

Bug 24733179

Change-Id: I87dab9ff4f46d422b7796670b0b4d17b7fd09165

services/surfaceflinger/DisplayHardware/VirtualDisplaySurface.cpp

index 48971bc..571b904 100644 (file)
@@ -19,6 +19,7 @@
 #include "HWComposer.h"
 
 #include <gui/BufferItem.h>
+#include <gui/IProducerListener.h>
 
 // ---------------------------------------------------------------------------
 namespace android {
@@ -93,9 +94,12 @@ VirtualDisplaySurface::VirtualDisplaySurface(HWComposer& hwc, int32_t dispId,
     mConsumer->setConsumerUsageBits(GRALLOC_USAGE_HW_COMPOSER);
     mConsumer->setDefaultBufferSize(sinkWidth, sinkHeight);
     sink->setAsyncMode(true);
+    IGraphicBufferProducer::QueueBufferOutput output;
+    mSource[SOURCE_SCRATCH]->connect(NULL, NATIVE_WINDOW_API_EGL, false, &output);
 }
 
 VirtualDisplaySurface::~VirtualDisplaySurface() {
+    mSource[SOURCE_SCRATCH]->disconnect(NATIVE_WINDOW_API_EGL);
 }
 
 status_t VirtualDisplaySurface::beginFrame(bool mustRecompose) {