diff options
Diffstat (limited to 'include/gui/SurfaceComposerClient.h')
-rw-r--r-- | include/gui/SurfaceComposerClient.h | 52 |
1 files changed, 32 insertions, 20 deletions
diff --git a/include/gui/SurfaceComposerClient.h b/include/gui/SurfaceComposerClient.h index ae5d69a..6bf5b47 100644 --- a/include/gui/SurfaceComposerClient.h +++ b/include/gui/SurfaceComposerClient.h @@ -21,6 +21,7 @@ #include <sys/types.h> #include <binder/IBinder.h> +#include <binder/IMemory.h> #include <utils/RefBase.h> #include <utils/Singleton.h> @@ -29,7 +30,8 @@ #include <ui/PixelFormat.h> -#include <gui/Surface.h> +#include <gui/CpuConsumer.h> +#include <gui/SurfaceControl.h> namespace android { @@ -37,9 +39,8 @@ namespace android { class DisplayInfo; class Composer; -class IMemoryHeap; class ISurfaceComposerClient; -class ISurfaceTexture; +class IGraphicBufferProducer; class Region; // --------------------------------------------------------------------------- @@ -108,21 +109,21 @@ public: //! Flag the currently open transaction as an animation transaction. static void setAnimationTransaction(); - status_t hide(SurfaceID id); - status_t show(SurfaceID id); - status_t setFlags(SurfaceID id, uint32_t flags, uint32_t mask); - status_t setTransparentRegionHint(SurfaceID id, const Region& transparent); - status_t setLayer(SurfaceID id, int32_t layer); - status_t setAlpha(SurfaceID id, float alpha=1.0f); - status_t setMatrix(SurfaceID id, float dsdx, float dtdx, float dsdy, float dtdy); - status_t setPosition(SurfaceID id, float x, float y); - status_t setSize(SurfaceID id, uint32_t w, uint32_t h); - status_t setCrop(SurfaceID id, const Rect& crop); - status_t setLayerStack(SurfaceID id, uint32_t layerStack); - status_t destroySurface(SurfaceID sid); + status_t hide(const sp<IBinder>& id); + status_t show(const sp<IBinder>& id); + status_t setFlags(const sp<IBinder>& id, uint32_t flags, uint32_t mask); + status_t setTransparentRegionHint(const sp<IBinder>& id, const Region& transparent); + status_t setLayer(const sp<IBinder>& id, int32_t layer); + status_t setAlpha(const sp<IBinder>& id, float alpha=1.0f); + status_t setMatrix(const sp<IBinder>& id, float dsdx, float dtdx, float dsdy, float dtdy); + status_t setPosition(const sp<IBinder>& id, float x, float y); + status_t setSize(const sp<IBinder>& id, uint32_t w, uint32_t h); + status_t setCrop(const sp<IBinder>& id, const Rect& crop); + status_t setLayerStack(const sp<IBinder>& id, uint32_t layerStack); + status_t destroySurface(const sp<IBinder>& id); static void setDisplaySurface(const sp<IBinder>& token, - const sp<ISurfaceTexture>& surface); + const sp<IGraphicBufferProducer>& bufferProducer); static void setDisplayLayerStack(const sp<IBinder>& token, uint32_t layerStack); @@ -155,12 +156,21 @@ private: class ScreenshotClient { - sp<IMemoryHeap> mHeap; - uint32_t mWidth; - uint32_t mHeight; - PixelFormat mFormat; +public: + static status_t capture( + const sp<IBinder>& display, + const sp<IGraphicBufferProducer>& producer, + uint32_t reqWidth, uint32_t reqHeight, + uint32_t minLayerZ, uint32_t maxLayerZ); + +private: + mutable sp<CpuConsumer> mCpuConsumer; + CpuConsumer::LockedBuffer mBuffer; + bool mHaveBuffer; + public: ScreenshotClient(); + ~ScreenshotClient(); // frees the previous screenshot and capture a new one status_t update(const sp<IBinder>& display); @@ -170,6 +180,8 @@ public: uint32_t reqWidth, uint32_t reqHeight, uint32_t minLayerZ, uint32_t maxLayerZ); + sp<CpuConsumer> getCpuConsumer() const; + // release memory occupied by the screenshot void release(); |