diff options
author | Jesse Hall <jessehall@google.com> | 2014-03-13 20:28:16 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-03-13 20:28:17 +0000 |
commit | 73ed82f809a40560fd3a6d53d18e5c846362d764 (patch) | |
tree | cbf5d50d6c3b7cd49b69c1d95b4f294f64cae8a7 /services/surfaceflinger/DisplayHardware | |
parent | a3f519fe6ffb6ac358a3a8015beb94ef1b596ae5 (diff) | |
parent | 399184a4cd728ea1421fb0bc1722274a29e38f4a (diff) | |
download | frameworks_native-73ed82f809a40560fd3a6d53d18e5c846362d764.zip frameworks_native-73ed82f809a40560fd3a6d53d18e5c846362d764.tar.gz frameworks_native-73ed82f809a40560fd3a6d53d18e5c846362d764.tar.bz2 |
Merge "Add sideband streams to BufferQueue and related classes"
Diffstat (limited to 'services/surfaceflinger/DisplayHardware')
4 files changed, 19 insertions, 1 deletions
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp index 474f633..0ca93c8 100644 --- a/services/surfaceflinger/DisplayHardware/HWComposer.cpp +++ b/services/surfaceflinger/DisplayHardware/HWComposer.cpp @@ -25,6 +25,7 @@ #include <utils/Errors.h> #include <utils/misc.h> +#include <utils/NativeHandle.h> #include <utils/String8.h> #include <utils/Thread.h> #include <utils/Trace.h> @@ -942,12 +943,22 @@ public: SharedBuffer const* sb = reg.getSharedBuffer(&visibleRegion.numRects); visibleRegion.rects = reinterpret_cast<hwc_rect_t const *>(sb->data()); } + virtual void setSidebandStream(const sp<NativeHandle>& stream) { + ALOG_ASSERT(stream->handle() != NULL); + getLayer()->compositionType = HWC_SIDEBAND; + getLayer()->sidebandStream = stream->handle(); + } virtual void setBuffer(const sp<GraphicBuffer>& buffer) { if (buffer == 0 || buffer->handle == 0) { getLayer()->compositionType = HWC_FRAMEBUFFER; getLayer()->flags |= HWC_SKIP_LAYER; getLayer()->handle = 0; } else { + if (getLayer()->compositionType == HWC_SIDEBAND) { + // If this was a sideband layer but the stream was removed, reset + // it to FRAMEBUFFER. The HWC can change it to OVERLAY in prepare. + getLayer()->compositionType = HWC_FRAMEBUFFER; + } getLayer()->handle = buffer->handle; } } diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.h b/services/surfaceflinger/DisplayHardware/HWComposer.h index 9f96113..9218bf6 100644 --- a/services/surfaceflinger/DisplayHardware/HWComposer.h +++ b/services/surfaceflinger/DisplayHardware/HWComposer.h @@ -45,9 +45,10 @@ struct framebuffer_device_t; namespace android { // --------------------------------------------------------------------------- -class GraphicBuffer; class Fence; class FloatRect; +class GraphicBuffer; +class NativeHandle; class Region; class String8; class SurfaceFlinger; @@ -164,6 +165,7 @@ public: virtual void setFrame(const Rect& frame) = 0; virtual void setCrop(const FloatRect& crop) = 0; virtual void setVisibleRegionScreen(const Region& reg) = 0; + virtual void setSidebandStream(const sp<NativeHandle>& stream) = 0; virtual void setBuffer(const sp<GraphicBuffer>& buffer) = 0; virtual void setAcquireFenceFd(int fenceFd) = 0; virtual void setPlaneAlpha(uint8_t alpha) = 0; diff --git a/services/surfaceflinger/DisplayHardware/VirtualDisplaySurface.cpp b/services/surfaceflinger/DisplayHardware/VirtualDisplaySurface.cpp index 91be439..11c42e0 100644 --- a/services/surfaceflinger/DisplayHardware/VirtualDisplaySurface.cpp +++ b/services/surfaceflinger/DisplayHardware/VirtualDisplaySurface.cpp @@ -469,6 +469,10 @@ status_t VirtualDisplaySurface::disconnect(int api) { return mSource[SOURCE_SINK]->disconnect(api); } +status_t VirtualDisplaySurface::setSidebandStream(const sp<NativeHandle>& /*stream*/) { + return INVALID_OPERATION; +} + void VirtualDisplaySurface::updateQueueBufferOutput( const QueueBufferOutput& qbo) { uint32_t w, h, transformHint, numPendingBuffers; diff --git a/services/surfaceflinger/DisplayHardware/VirtualDisplaySurface.h b/services/surfaceflinger/DisplayHardware/VirtualDisplaySurface.h index cd9a5b0..0d30a1b 100644 --- a/services/surfaceflinger/DisplayHardware/VirtualDisplaySurface.h +++ b/services/surfaceflinger/DisplayHardware/VirtualDisplaySurface.h @@ -107,6 +107,7 @@ private: virtual status_t connect(const sp<IBinder>& token, int api, bool producerControlledByApp, QueueBufferOutput* output); virtual status_t disconnect(int api); + virtual status_t setSidebandStream(const sp<NativeHandle>& stream); // // Utility methods |