summaryrefslogtreecommitdiffstats
path: root/include/gui/SurfaceComposerClient.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/gui/SurfaceComposerClient.h')
-rw-r--r--include/gui/SurfaceComposerClient.h52
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();