Surface.h revision b296533607232357597b255679db29470ab5925d
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
179cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian#ifndef ANDROID_SF_SURFACE_H
189cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian#define ANDROID_SF_SURFACE_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
23edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/RefBase.h>
24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/threads.h>
25edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <ui/PixelFormat.h>
27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <ui/Region.h>
287189c0054e29a66d945f5657c48d5ecf538ea511Mathias Agopian#include <ui/egl/android_natives.h>
29076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian
309cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian#include <surfaceflinger/ISurface.h>
319cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian#include <surfaceflinger/ISurfaceFlingerClient.h>
329cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian
33e4e8cf1f19002be418aad1b89fa6bb8aeabf9f65Mathias Agopian#define ANDROID_VIEW_SURFACE_JNI_ID    "mNativeSurface"
34e4e8cf1f19002be418aad1b89fa6bb8aeabf9f65Mathias Agopian
35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android {
36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
393330b203039dea366d4981db1408a460134b2d2cMathias Agopianclass GraphicBufferMapper;
40e186431c33fa332b585e37f6b5ef5efd39b359cfAndreas Huberclass IOMX;
41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass Rect;
420926f50664c739eaee60341f8e8c694dc9a4f3ebMathias Agopianclass Surface;
43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass SurfaceComposerClient;
44cbb288bfe89f585bf48371bd31b2d4aafa32f32eMathias Agopianclass SharedClient;
45cbb288bfe89f585bf48371bd31b2d4aafa32f32eMathias Agopianclass SharedBufferClient;
46076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian
47076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian// ---------------------------------------------------------------------------
48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
4962185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopianclass SurfaceControl : public RefBase
5062185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian{
5162185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopianpublic:
5262185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian    static bool isValid(const sp<SurfaceControl>& surface) {
5301b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian        return (surface != 0) && surface->isValid();
5462185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian    }
5501b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian    bool isValid() {
5601b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian        return mToken>=0 && mClient!=0;
5701b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian    }
5801b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian    static bool isSameSurface(
5901b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian            const sp<SurfaceControl>& lhs, const sp<SurfaceControl>& rhs);
6062185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian
6162185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian    SurfaceID   ID() const      { return mToken; }
6262185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian    uint32_t    getFlags() const { return mFlags; }
6362185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian    uint32_t    getIdentity() const { return mIdentity; }
6462185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian
6562185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian    // release surface data from java
6662185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian    void        clear();
6762185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian
6862185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian    status_t    setLayer(int32_t layer);
6962185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian    status_t    setPosition(int32_t x, int32_t y);
7062185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian    status_t    setSize(uint32_t w, uint32_t h);
7162185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian    status_t    hide();
7262185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian    status_t    show(int32_t layer = -1);
7362185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian    status_t    freeze();
7462185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian    status_t    unfreeze();
7562185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian    status_t    setFlags(uint32_t flags, uint32_t mask);
7662185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian    status_t    setTransparentRegionHint(const Region& transparent);
7762185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian    status_t    setAlpha(float alpha=1.0f);
7862185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian    status_t    setMatrix(float dsdx, float dtdx, float dsdy, float dtdy);
7962185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian    status_t    setFreezeTint(uint32_t tint);
8062185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian
8101b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian    static status_t writeSurfaceToParcel(
8201b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian            const sp<SurfaceControl>& control, Parcel* parcel);
8301b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian
8401b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian    sp<Surface> getSurface() const;
8501b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian
8662185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopianprivate:
8701b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian    // can't be copied
8801b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian    SurfaceControl& operator = (SurfaceControl& rhs);
8901b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian    SurfaceControl(const SurfaceControl& rhs);
9001b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian
9101b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian
9262185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian    friend class SurfaceComposerClient;
9362185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian
9462185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian    // camera and camcorder need access to the ISurface binder interface for preview
9562185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian    friend class Camera;
9662185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian    friend class MediaRecorder;
9762185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian    // mediaplayer needs access to ISurface for display
9862185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian    friend class MediaPlayer;
9901b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian    // for testing
10062185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian    friend class Test;
10162185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian    const sp<ISurface>& getISurface() const { return mSurface; }
10262185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian
10362185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian
10462185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian    friend class Surface;
10501b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian
10601b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian    SurfaceControl(
10701b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian            const sp<SurfaceComposerClient>& client,
10862185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian            const sp<ISurface>& surface,
10962185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian            const ISurfaceFlingerClient::surface_data_t& data,
11018d8446fe1596cd50561777e1d1a8c7b39c689f6Mathias Agopian            uint32_t w, uint32_t h, PixelFormat format, uint32_t flags);
11162185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian
11262185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian    ~SurfaceControl();
11301b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian
114963abad79ae64dae9bf4c32bfb110d9e6314c857Mathias Agopian    status_t validate() const;
11562185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian    void destroy();
11662185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian
11762185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian    sp<SurfaceComposerClient>   mClient;
11862185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian    sp<ISurface>                mSurface;
11962185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian    SurfaceID                   mToken;
12062185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian    uint32_t                    mIdentity;
121cb6b9041647b4f080324742eee5ce709960ff610Mathias Agopian    uint32_t                    mWidth;
122cb6b9041647b4f080324742eee5ce709960ff610Mathias Agopian    uint32_t                    mHeight;
12362185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian    PixelFormat                 mFormat;
12462185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian    uint32_t                    mFlags;
12562185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian    mutable Mutex               mLock;
12601b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian
12701b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian    mutable sp<Surface>         mSurfaceData;
12862185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian};
12962185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian
13062185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian// ---------------------------------------------------------------------------
13162185b7335e85211dc4d0e2003354eb3ea2e66efMathias Agopian
132076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopianclass Surface
133076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian    : public EGLNativeBase<android_native_window_t, Surface, RefBase>
134076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian{
135edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic:
136edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    struct SurfaceInfo {
137edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        uint32_t    w;
138edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        uint32_t    h;
139076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian        uint32_t    s;
140076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian        uint32_t    usage;
141edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        PixelFormat format;
142edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        void*       bits;
143edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        uint32_t    reserved[2];
144edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    };
145edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
14601b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian    Surface(const Parcel& data);
14701b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian
14840b7f6e0433b89c27b2fe5a1c0c47f67b42eceb2Mathias Agopian    static bool isValid(const sp<Surface>& surface) {
14901b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian        return (surface != 0) && surface->isValid();
15040b7f6e0433b89c27b2fe5a1c0c47f67b42eceb2Mathias Agopian    }
151ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian
15201b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian    static bool isSameSurface(
15301b766839e06c32540cef100e3a7710d12cf1eefMathias Agopian            const sp<Surface>& lhs, const sp<Surface>& rhs);
154edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
155ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian    bool        isValid();
156ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian    SurfaceID   ID() const          { return mToken; }
157ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian    uint32_t    getFlags() const    { return mFlags; }
158ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian    uint32_t    getIdentity() const { return mIdentity; }
15940b7f6e0433b89c27b2fe5a1c0c47f67b42eceb2Mathias Agopian
160ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian    // the lock/unlock APIs must be used from the same thread
161edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    status_t    lock(SurfaceInfo* info, bool blocking = true);
162edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    status_t    lock(SurfaceInfo* info, Region* dirty, bool blocking = true);
163edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    status_t    unlockAndPost();
164edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
1650926f50664c739eaee60341f8e8c694dc9a4f3ebMathias Agopian    // setSwapRectangle() is intended to be used by GL ES clients
166edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    void        setSwapRectangle(const Rect& r);
167edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
168edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
169b296533607232357597b255679db29470ab5925dMathias Agopianprivate:
170b296533607232357597b255679db29470ab5925dMathias Agopian    /*
171b296533607232357597b255679db29470ab5925dMathias Agopian     * Android frameworks friends
172b296533607232357597b255679db29470ab5925dMathias Agopian     * (eventually this should go away and be replaced by proper APIs)
173b296533607232357597b255679db29470ab5925dMathias Agopian     */
174edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    // camera and camcorder need access to the ISurface binder interface for preview
175edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    friend class Camera;
176edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    friend class MediaRecorder;
177b296533607232357597b255679db29470ab5925dMathias Agopian    // MediaPlayer needs access to ISurface for display
178edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    friend class MediaPlayer;
179e186431c33fa332b585e37f6b5ef5efd39b359cfAndreas Huber    friend class IOMX;
180ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian    // this is just to be able to write some unit tests
181ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian    friend class Test;
182ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian
183b296533607232357597b255679db29470ab5925dMathias Agopianprivate:
184b296533607232357597b255679db29470ab5925dMathias Agopian    friend class SurfaceComposerClient;
185b296533607232357597b255679db29470ab5925dMathias Agopian    friend class SurfaceControl;
186edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
187b296533607232357597b255679db29470ab5925dMathias Agopian    // can't be copied
188b296533607232357597b255679db29470ab5925dMathias Agopian    Surface& operator = (Surface& rhs);
189b296533607232357597b255679db29470ab5925dMathias Agopian    Surface(const Surface& rhs);
190076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian
191b296533607232357597b255679db29470ab5925dMathias Agopian    Surface(const sp<SurfaceControl>& control);
192b296533607232357597b255679db29470ab5925dMathias Agopian    ~Surface();
193b296533607232357597b255679db29470ab5925dMathias Agopian
194b296533607232357597b255679db29470ab5925dMathias Agopian
195b296533607232357597b255679db29470ab5925dMathias Agopian    /*
196b296533607232357597b255679db29470ab5925dMathias Agopian     *  android_native_window_t hooks
197b296533607232357597b255679db29470ab5925dMathias Agopian     */
198076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian    static int setSwapInterval(android_native_window_t* window, int interval);
199076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian    static int dequeueBuffer(android_native_window_t* window, android_native_buffer_t** buffer);
200076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian    static int lockBuffer(android_native_window_t* window, android_native_buffer_t* buffer);
201076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian    static int queueBuffer(android_native_window_t* window, android_native_buffer_t* buffer);
202cb6b9041647b4f080324742eee5ce709960ff610Mathias Agopian    static int query(android_native_window_t* window, int what, int* value);
2035221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian    static int perform(android_native_window_t* window, int operation, ...);
204076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian
205076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian    int dequeueBuffer(android_native_buffer_t** buffer);
206076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian    int lockBuffer(android_native_buffer_t* buffer);
207076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian    int queueBuffer(android_native_buffer_t* buffer);
208cb6b9041647b4f080324742eee5ce709960ff610Mathias Agopian    int query(int what, int* value);
2095221271375f361b84a6eeec3d7086f223997fbb3Mathias Agopian    int perform(int operation, va_list args);
2100926f50664c739eaee60341f8e8c694dc9a4f3ebMathias Agopian
21155fa25161a7626ae6a15bc2cc46e22771455ed80Mathias Agopian    void dispatch_setUsage(va_list args);
21255fa25161a7626ae6a15bc2cc46e22771455ed80Mathias Agopian    int  dispatch_connect(va_list args);
21355fa25161a7626ae6a15bc2cc46e22771455ed80Mathias Agopian    int  dispatch_disconnect(va_list args);
214cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian    int  dispatch_crop(va_list args);
215076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian
216ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian    void setUsage(uint32_t reqUsage);
21755fa25161a7626ae6a15bc2cc46e22771455ed80Mathias Agopian    int  connect(int api);
21855fa25161a7626ae6a15bc2cc46e22771455ed80Mathias Agopian    int  disconnect(int api);
219cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian    int  crop(Rect const* rect);
22055fa25161a7626ae6a15bc2cc46e22771455ed80Mathias Agopian
221b296533607232357597b255679db29470ab5925dMathias Agopian    /*
222b296533607232357597b255679db29470ab5925dMathias Agopian     *  private stuff...
223b296533607232357597b255679db29470ab5925dMathias Agopian     */
224b296533607232357597b255679db29470ab5925dMathias Agopian    void init();
225b296533607232357597b255679db29470ab5925dMathias Agopian    status_t validate() const;
226b296533607232357597b255679db29470ab5925dMathias Agopian    sp<SurfaceComposerClient> getClient() const;
227b296533607232357597b255679db29470ab5925dMathias Agopian    sp<ISurface> getISurface() const;
228b296533607232357597b255679db29470ab5925dMathias Agopian
229b296533607232357597b255679db29470ab5925dMathias Agopian    inline const GraphicBufferMapper& getBufferMapper() const { return mBufferMapper; }
230b296533607232357597b255679db29470ab5925dMathias Agopian    inline GraphicBufferMapper& getBufferMapper() { return mBufferMapper; }
231b296533607232357597b255679db29470ab5925dMathias Agopian
232b296533607232357597b255679db29470ab5925dMathias Agopian    status_t getBufferLocked(int index, int usage);
233b296533607232357597b255679db29470ab5925dMathias Agopian    int getBufferIndex(const sp<GraphicBuffer>& buffer) const;
234b296533607232357597b255679db29470ab5925dMathias Agopian
23568a6afeb26002961387573dd64dd0ea3816bdc91Mathias Agopian    uint32_t getUsage() const;
23655fa25161a7626ae6a15bc2cc46e22771455ed80Mathias Agopian    int      getConnectedApi() const;
237ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian
238ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian    // constants
239edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    sp<SurfaceComposerClient>   mClient;
240edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    sp<ISurface>                mSurface;
241edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    SurfaceID                   mToken;
242edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    uint32_t                    mIdentity;
243edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    PixelFormat                 mFormat;
244edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    uint32_t                    mFlags;
2453330b203039dea366d4981db1408a460134b2d2cMathias Agopian    GraphicBufferMapper&        mBufferMapper;
246cbb288bfe89f585bf48371bd31b2d4aafa32f32eMathias Agopian    SharedBufferClient*         mSharedBufferClient;
247ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian
248ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian    // protected by mSurfaceLock
249ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian    Rect                        mSwapRectangle;
250ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian    uint32_t                    mUsage;
25155fa25161a7626ae6a15bc2cc46e22771455ed80Mathias Agopian    int                         mConnected;
252cc08e688f5b82b4ebd076ad138b2749e8c86ad5eMathias Agopian    Rect                        mNextBufferCrop;
253ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian
254ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian    // protected by mSurfaceLock. These are also used from lock/unlock
255ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian    // but in that case, they must be called form the same thread.
2563330b203039dea366d4981db1408a460134b2d2cMathias Agopian    sp<GraphicBuffer>           mBuffers[2];
257edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    mutable Region              mDirtyRegion;
258ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian
259ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian    // must be used from the lock/unlock thread
2603330b203039dea366d4981db1408a460134b2d2cMathias Agopian    sp<GraphicBuffer>           mLockedBuffer;
2613330b203039dea366d4981db1408a460134b2d2cMathias Agopian    sp<GraphicBuffer>           mPostedBuffer;
262ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian    mutable Region              mOldDirtyRegion;
263245e4d78c5fb304fe153c36303ec69bf8a907f65Mathias Agopian    bool                        mReserved;
264ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian
265ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian    // query() must be called from dequeueBuffer() thread
266ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian    uint32_t                    mWidth;
267ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian    uint32_t                    mHeight;
268ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian
269ba5972ffdc7179dd9a387f22032eb18666d97917Mathias Agopian    // Inherently thread-safe
270edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    mutable Mutex               mSurfaceLock;
271cbb288bfe89f585bf48371bd31b2d4aafa32f32eMathias Agopian    mutable Mutex               mApiLock;
272edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
273edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
274edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android
275edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
2769cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian#endif // ANDROID_SF_SURFACE_H
277edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
278