1edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/*
2edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
3edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *
4edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * you may not use this file except in compliance with the License.
6edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * You may obtain a copy of the License at
7edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *
8edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *
10edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * See the License for the specific language governing permissions and
14edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * limitations under the License.
15edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */
16edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
1790ac799241f077a7b7e6c1875fd933864c8dd2a7Mathias Agopian#ifndef ANDROID_GUI_SURFACE_COMPOSER_CLIENT_H
1890ac799241f077a7b7e6c1875fd933864c8dd2a7Mathias Agopian#define ANDROID_GUI_SURFACE_COMPOSER_CLIENT_H
19edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
20edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <stdint.h>
21edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <sys/types.h>
22edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
23dd3423c6247965bf67ea30c75e484a6f5d72b1a2Mathias Agopian#include <binder/IBinder.h>
246d9b9dfd555ee2bc1dd8381dde95d45f9500b3caMathias Agopian#include <binder/IMemory.h>
25dd3423c6247965bf67ea30c75e484a6f5d72b1a2Mathias Agopian
26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/RefBase.h>
27b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian#include <utils/Singleton.h>
28b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian#include <utils/SortedVector.h>
29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/threads.h>
30edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
31d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav#include <ui/FrameStats.h>
32edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <ui/PixelFormat.h>
339cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian
34abe815dd6978b718c04f6e22e1a893d2b51d11a1Mathias Agopian#include <gui/CpuConsumer.h>
35e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian#include <gui/SurfaceControl.h>
36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android {
38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
419cce325fae8adcf7560a28eef394489f09bad74dMathias Agopianclass DisplayInfo;
42698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopianclass Composer;
43c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stozaclass HdrCapabilities;
4441f673c9b3aac0d96e41c928845c39186d565212Mathias Agopianclass ISurfaceComposerClient;
452adaf04fab35cf47c824d74d901b54094e01ccd3Andy McFaddenclass IGraphicBufferProducer;
46a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopianclass Region;
47b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian
48b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian// ---------------------------------------------------------------------------
49b7e930db175c192464cebdeb49eb56cf6dd60114Mathias Agopian
50d4784a3b90f849e8732968d45886fb0c8f0d8cf3Mathias Agopianclass SurfaceComposerClient : public RefBase
51edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
52698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian    friend class Composer;
536c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hallpublic:
54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                SurfaceComposerClient();
55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual     ~SurfaceComposerClient();
56edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    // Always make sure we could initialize
58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    status_t    initCheck() const;
59edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    // Return the connection of this client
61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    sp<IBinder> connection() const;
626c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall
63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    // Forcibly remove connection before all references have gone away.
64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    void        dispose();
65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
66e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian    // callback when the composer is dies
67e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian    status_t linkToComposerDeath(const sp<IBinder::DeathRecipient>& recipient,
68e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian            void* cookie = NULL, uint32_t flags = 0);
69e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian
707f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza    // Get a list of supported configurations for a given display
717f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza    static status_t getDisplayConfigs(const sp<IBinder>& display,
727f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza            Vector<DisplayInfo>* configs);
737f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza
747f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza    // Get the DisplayInfo for the currently-active configuration
757f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza    static status_t getDisplayInfo(const sp<IBinder>& display,
767f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza            DisplayInfo* info);
777f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza
787f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza    // Get the index of the current active configuration (relative to the list
797f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza    // returned by getDisplayInfo)
807f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza    static int getActiveConfig(const sp<IBinder>& display);
817f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza
827f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza    // Set a new active configuration using an index relative to the list
837f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza    // returned by getDisplayInfo
847f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza    static status_t setActiveConfig(const sp<IBinder>& display, int id);
85e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian
862c9b11f0291210c9b9513a1a0cce6afebd361b3bPrashant Malani    /* Triggers screen on/off or low power mode and waits for it to complete */
872c9b11f0291210c9b9513a1a0cce6afebd361b3bPrashant Malani    static void setDisplayPowerMode(const sp<IBinder>& display, int mode);
882a09bb321930e1f782599ec902bca1db58b9af77Jeff Brown
89edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    // ------------------------------------------------------------------------
90edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    // surface creation / destruction
91edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
92edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    //! Create a surface
9301b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian    sp<SurfaceControl> createSurface(
94285dbde2e0cd0057be070ded3be8f5f453147edcMathias Agopian            const String8& name,// name of the surface
95285dbde2e0cd0057be070ded3be8f5f453147edcMathias Agopian            uint32_t w,         // width in pixel
96285dbde2e0cd0057be070ded3be8f5f453147edcMathias Agopian            uint32_t h,         // height in pixel
97285dbde2e0cd0057be070ded3be8f5f453147edcMathias Agopian            PixelFormat format, // pixel-format desired
98285dbde2e0cd0057be070ded3be8f5f453147edcMathias Agopian            uint32_t flags = 0  // usage flags
99285dbde2e0cd0057be070ded3be8f5f453147edcMathias Agopian    );
100285dbde2e0cd0057be070ded3be8f5f453147edcMathias Agopian
1016c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall    //! Create a virtual display
102dd3cb84cfbe8068790c6233b5829fae9c4a0ee93Jamie Gennis    static sp<IBinder> createDisplay(const String8& displayName, bool secure);
103285dbde2e0cd0057be070ded3be8f5f453147edcMathias Agopian
1046c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall    //! Destroy a virtual display
1056c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall    static void destroyDisplay(const sp<IBinder>& display);
1066c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall
1079d4e3d2f42e93e2d12bacabe97d307d30c3c20ddJeff Brown    //! Get the token for the existing default displays.
1089d4e3d2f42e93e2d12bacabe97d307d30c3c20ddJeff Brown    //! Possible values for id are eDisplayIdMain and eDisplayIdHdmi.
1099d4e3d2f42e93e2d12bacabe97d307d30c3c20ddJeff Brown    static sp<IBinder> getBuiltInDisplay(int32_t id);
1109d4e3d2f42e93e2d12bacabe97d307d30c3c20ddJeff Brown
111edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    // ------------------------------------------------------------------------
112edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    // Composer parameters
113edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    // All composer parameters must be changed within a transaction
114edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    // several surfaces can be updated in one transaction, all changes are
115edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    // committed at once when the transaction is closed.
116e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian    // closeGlobalTransaction() requires an IPC with the server.
117edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
118edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    //! Open a composer transaction on all active SurfaceComposerClients.
119edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    static void openGlobalTransaction();
1202d5e230292c27d59f4c096bc742a0a19abf811c1Jamie Gennis
121edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    //! Close a composer transaction on all active SurfaceComposerClients.
12228378392fd5aa3e0a392c9eb64634055678c3987Jamie Gennis    static void closeGlobalTransaction(bool synchronous = false);
123edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
1242d5e230292c27d59f4c096bc742a0a19abf811c1Jamie Gennis    //! Flag the currently open transaction as an animation transaction.
1252d5e230292c27d59f4c096bc742a0a19abf811c1Jamie Gennis    static void setAnimationTransaction();
1262d5e230292c27d59f4c096bc742a0a19abf811c1Jamie Gennis
127ac9fa427d4a86745e60a5f7fd8e3ea340c4db907Mathias Agopian    status_t    hide(const sp<IBinder>& id);
128ac9fa427d4a86745e60a5f7fd8e3ea340c4db907Mathias Agopian    status_t    show(const sp<IBinder>& id);
129ac9fa427d4a86745e60a5f7fd8e3ea340c4db907Mathias Agopian    status_t    setFlags(const sp<IBinder>& id, uint32_t flags, uint32_t mask);
130ac9fa427d4a86745e60a5f7fd8e3ea340c4db907Mathias Agopian    status_t    setTransparentRegionHint(const sp<IBinder>& id, const Region& transparent);
131d723bd7669b4fc88dc282d8bf8ba5ecb2849d22fDan Stoza    status_t    setLayer(const sp<IBinder>& id, uint32_t layer);
132ac9fa427d4a86745e60a5f7fd8e3ea340c4db907Mathias Agopian    status_t    setAlpha(const sp<IBinder>& id, float alpha=1.0f);
133ac9fa427d4a86745e60a5f7fd8e3ea340c4db907Mathias Agopian    status_t    setMatrix(const sp<IBinder>& id, float dsdx, float dtdx, float dsdy, float dtdy);
134ac9fa427d4a86745e60a5f7fd8e3ea340c4db907Mathias Agopian    status_t    setPosition(const sp<IBinder>& id, float x, float y);
135ac9fa427d4a86745e60a5f7fd8e3ea340c4db907Mathias Agopian    status_t    setSize(const sp<IBinder>& id, uint32_t w, uint32_t h);
136ac9fa427d4a86745e60a5f7fd8e3ea340c4db907Mathias Agopian    status_t    setCrop(const sp<IBinder>& id, const Rect& crop);
137acbe67888f0bd65d5400400f0115bae6bd6199dcPablo Ceballos    status_t    setFinalCrop(const sp<IBinder>& id, const Rect& crop);
138ac9fa427d4a86745e60a5f7fd8e3ea340c4db907Mathias Agopian    status_t    setLayerStack(const sp<IBinder>& id, uint32_t layerStack);
1397dde599bf1a0dbef7390d91c2689d506371cdbd7Dan Stoza    status_t    deferTransactionUntil(const sp<IBinder>& id,
1407dde599bf1a0dbef7390d91c2689d506371cdbd7Dan Stoza            const sp<IBinder>& handle, uint64_t frameNumber);
141c3574f7b0141c69fdca25ccafb80ff334462f9a3Robert Carr    status_t    setOverrideScalingMode(const sp<IBinder>& id,
142c3574f7b0141c69fdca25ccafb80ff334462f9a3Robert Carr            int32_t overrideScalingMode);
14382364e3cea0bf88fa8147766433329b3dd5148b8Robert Carr    status_t    setPositionAppliesWithResize(const sp<IBinder>& id);
14482364e3cea0bf88fa8147766433329b3dd5148b8Robert Carr
145ac9fa427d4a86745e60a5f7fd8e3ea340c4db907Mathias Agopian    status_t    destroySurface(const sp<IBinder>& id);
146edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
147d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav    status_t clearLayerFrameStats(const sp<IBinder>& token) const;
148d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav    status_t getLayerFrameStats(const sp<IBinder>& token, FrameStats* outStats) const;
149d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav
150d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav    static status_t clearAnimationFrameStats();
151d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav    static status_t getAnimationFrameStats(FrameStats* outStats);
152d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav
153c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza    static status_t getHdrCapabilities(const sp<IBinder>& display,
154c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza            HdrCapabilities* outCapabilities);
155c4f471e75a8ec64ec34e3f2944a5a756215d0becDan Stoza
156e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian    static void setDisplaySurface(const sp<IBinder>& token,
1572adaf04fab35cf47c824d74d901b54094e01ccd3Andy McFadden            const sp<IGraphicBufferProducer>& bufferProducer);
158e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian    static void setDisplayLayerStack(const sp<IBinder>& token,
159e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian            uint32_t layerStack);
1601f6078aef71b1d3f080cd565adbec350c71088ddMichael Wright    static void setDisplaySize(const sp<IBinder>& token, uint32_t width, uint32_t height);
16100e8c7a88a5b9c4104a71013a713acd3e4d3b77bMathias Agopian
16200e8c7a88a5b9c4104a71013a713acd3e4d3b77bMathias Agopian    /* setDisplayProjection() defines the projection of layer stacks
16300e8c7a88a5b9c4104a71013a713acd3e4d3b77bMathias Agopian     * to a given display.
16400e8c7a88a5b9c4104a71013a713acd3e4d3b77bMathias Agopian     *
16500e8c7a88a5b9c4104a71013a713acd3e4d3b77bMathias Agopian     * - orientation defines the display's orientation.
16600e8c7a88a5b9c4104a71013a713acd3e4d3b77bMathias Agopian     * - layerStackRect defines which area of the window manager coordinate
16700e8c7a88a5b9c4104a71013a713acd3e4d3b77bMathias Agopian     * space will be used.
16800e8c7a88a5b9c4104a71013a713acd3e4d3b77bMathias Agopian     * - displayRect defines where on the display will layerStackRect be
16900e8c7a88a5b9c4104a71013a713acd3e4d3b77bMathias Agopian     * mapped to. displayRect is specified post-orientation, that is
17000e8c7a88a5b9c4104a71013a713acd3e4d3b77bMathias Agopian     * it uses the orientation seen by the end-user.
17100e8c7a88a5b9c4104a71013a713acd3e4d3b77bMathias Agopian     */
17200e8c7a88a5b9c4104a71013a713acd3e4d3b77bMathias Agopian    static void setDisplayProjection(const sp<IBinder>& token,
17300e8c7a88a5b9c4104a71013a713acd3e4d3b77bMathias Agopian            uint32_t orientation,
17400e8c7a88a5b9c4104a71013a713acd3e4d3b77bMathias Agopian            const Rect& layerStackRect,
17500e8c7a88a5b9c4104a71013a713acd3e4d3b77bMathias Agopian            const Rect& displayRect);
176e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian
177631f358d348ea5e7813ca01f86fc9f2a6536add6Mathias Agopianprivate:
178d4784a3b90f849e8732968d45886fb0c8f0d8cf3Mathias Agopian    virtual void onFirstRef();
179698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian    Composer& getComposer();
180edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
181698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian    mutable     Mutex                       mLock;
182edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                status_t                    mStatus;
1837e27f05739c8a2655cf0f7faea35614ce0a50278Mathias Agopian                sp<ISurfaceComposerClient>  mClient;
184698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian                Composer&                   mComposer;
185edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
186edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
187d4784a3b90f849e8732968d45886fb0c8f0d8cf3Mathias Agopian// ---------------------------------------------------------------------------
18874c40c0a273dbfd7d10617c4cc1b0c066bfc812eMathias Agopian
18974c40c0a273dbfd7d10617c4cc1b0c066bfc812eMathias Agopianclass ScreenshotClient
19074c40c0a273dbfd7d10617c4cc1b0c066bfc812eMathias Agopian{
1912a9fc493dfdba67108e4335bb1fe931bc1e2a025Mathias Agopianpublic:
192c18790018be5d7ea7061ccbc81f3044e74adc823Dan Stoza    // if cropping isn't required, callers may pass in a default Rect, e.g.:
193c18790018be5d7ea7061ccbc81f3044e74adc823Dan Stoza    //   capture(display, producer, Rect(), reqWidth, ...);
1942a9fc493dfdba67108e4335bb1fe931bc1e2a025Mathias Agopian    static status_t capture(
1952a9fc493dfdba67108e4335bb1fe931bc1e2a025Mathias Agopian            const sp<IBinder>& display,
1962a9fc493dfdba67108e4335bb1fe931bc1e2a025Mathias Agopian            const sp<IGraphicBufferProducer>& producer,
197c18790018be5d7ea7061ccbc81f3044e74adc823Dan Stoza            Rect sourceCrop, uint32_t reqWidth, uint32_t reqHeight,
198c701401f8cec2e5309f8b57e2b97baced5093274Dan Stoza            uint32_t minLayerZ, uint32_t maxLayerZ,
199c701401f8cec2e5309f8b57e2b97baced5093274Dan Stoza            bool useIdentityTransform);
2002a9fc493dfdba67108e4335bb1fe931bc1e2a025Mathias Agopian
2012a9fc493dfdba67108e4335bb1fe931bc1e2a025Mathias Agopianprivate:
202abe815dd6978b718c04f6e22e1a893d2b51d11a1Mathias Agopian    mutable sp<CpuConsumer> mCpuConsumer;
2036d5a7bb970dd5cfd5a51fe2de7f10b9fc75732b2Dan Stoza    mutable sp<IGraphicBufferProducer> mProducer;
204abe815dd6978b718c04f6e22e1a893d2b51d11a1Mathias Agopian    CpuConsumer::LockedBuffer mBuffer;
205abe815dd6978b718c04f6e22e1a893d2b51d11a1Mathias Agopian    bool mHaveBuffer;
2062a9fc493dfdba67108e4335bb1fe931bc1e2a025Mathias Agopian
20774c40c0a273dbfd7d10617c4cc1b0c066bfc812eMathias Agopianpublic:
20874c40c0a273dbfd7d10617c4cc1b0c066bfc812eMathias Agopian    ScreenshotClient();
2098000d0694bc34bc17d869da546d8ff8790ae7be4Mathias Agopian    ~ScreenshotClient();
21074c40c0a273dbfd7d10617c4cc1b0c066bfc812eMathias Agopian
211c18790018be5d7ea7061ccbc81f3044e74adc823Dan Stoza    // frees the previous screenshot and captures a new one
212c18790018be5d7ea7061ccbc81f3044e74adc823Dan Stoza    // if cropping isn't required, callers may pass in a default Rect, e.g.:
213c18790018be5d7ea7061ccbc81f3044e74adc823Dan Stoza    //   update(display, Rect(), useIdentityTransform);
2149d4e3d2f42e93e2d12bacabe97d307d30c3c20ddJeff Brown    status_t update(const sp<IBinder>& display,
215c18790018be5d7ea7061ccbc81f3044e74adc823Dan Stoza            Rect sourceCrop, bool useIdentityTransform);
216c18790018be5d7ea7061ccbc81f3044e74adc823Dan Stoza    status_t update(const sp<IBinder>& display,
217c18790018be5d7ea7061ccbc81f3044e74adc823Dan Stoza            Rect sourceCrop, uint32_t reqWidth, uint32_t reqHeight,
218c701401f8cec2e5309f8b57e2b97baced5093274Dan Stoza            bool useIdentityTransform);
2199d4e3d2f42e93e2d12bacabe97d307d30c3c20ddJeff Brown    status_t update(const sp<IBinder>& display,
220c18790018be5d7ea7061ccbc81f3044e74adc823Dan Stoza            Rect sourceCrop, uint32_t reqWidth, uint32_t reqHeight,
221c701401f8cec2e5309f8b57e2b97baced5093274Dan Stoza            uint32_t minLayerZ, uint32_t maxLayerZ,
222c701401f8cec2e5309f8b57e2b97baced5093274Dan Stoza            bool useIdentityTransform);
223d15ef27f9b13727fa7358e3c09572f66bb1e0668Riley Andrews    status_t update(const sp<IBinder>& display,
224d15ef27f9b13727fa7358e3c09572f66bb1e0668Riley Andrews            Rect sourceCrop, uint32_t reqWidth, uint32_t reqHeight,
225d15ef27f9b13727fa7358e3c09572f66bb1e0668Riley Andrews            uint32_t minLayerZ, uint32_t maxLayerZ,
226d15ef27f9b13727fa7358e3c09572f66bb1e0668Riley Andrews            bool useIdentityTransform, uint32_t rotation);
22774c40c0a273dbfd7d10617c4cc1b0c066bfc812eMathias Agopian
228abe815dd6978b718c04f6e22e1a893d2b51d11a1Mathias Agopian    sp<CpuConsumer> getCpuConsumer() const;
229abe815dd6978b718c04f6e22e1a893d2b51d11a1Mathias Agopian
23074c40c0a273dbfd7d10617c4cc1b0c066bfc812eMathias Agopian    // release memory occupied by the screenshot
23174c40c0a273dbfd7d10617c4cc1b0c066bfc812eMathias Agopian    void release();
23274c40c0a273dbfd7d10617c4cc1b0c066bfc812eMathias Agopian
23374c40c0a273dbfd7d10617c4cc1b0c066bfc812eMathias Agopian    // pixels are valid until this object is freed or
23474c40c0a273dbfd7d10617c4cc1b0c066bfc812eMathias Agopian    // release() or update() is called
23574c40c0a273dbfd7d10617c4cc1b0c066bfc812eMathias Agopian    void const* getPixels() const;
23674c40c0a273dbfd7d10617c4cc1b0c066bfc812eMathias Agopian
23774c40c0a273dbfd7d10617c4cc1b0c066bfc812eMathias Agopian    uint32_t getWidth() const;
23874c40c0a273dbfd7d10617c4cc1b0c066bfc812eMathias Agopian    uint32_t getHeight() const;
23974c40c0a273dbfd7d10617c4cc1b0c066bfc812eMathias Agopian    PixelFormat getFormat() const;
24074c40c0a273dbfd7d10617c4cc1b0c066bfc812eMathias Agopian    uint32_t getStride() const;
24174c40c0a273dbfd7d10617c4cc1b0c066bfc812eMathias Agopian    // size of allocated memory in bytes
24274c40c0a273dbfd7d10617c4cc1b0c066bfc812eMathias Agopian    size_t getSize() const;
24374c40c0a273dbfd7d10617c4cc1b0c066bfc812eMathias Agopian};
24474c40c0a273dbfd7d10617c4cc1b0c066bfc812eMathias Agopian
24574c40c0a273dbfd7d10617c4cc1b0c066bfc812eMathias Agopian// ---------------------------------------------------------------------------
246edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android
247edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
24890ac799241f077a7b7e6c1875fd933864c8dd2a7Mathias Agopian#endif // ANDROID_GUI_SURFACE_COMPOSER_CLIENT_H
249