diff options
author | Mathias Agopian <mathias@google.com> | 2010-05-21 17:24:35 -0700 |
---|---|---|
committer | Mathias Agopian <mathias@google.com> | 2010-05-24 18:26:01 -0700 |
commit | 2be352adab7f11646fda7c0240e496bbb37f7bd1 (patch) | |
tree | e7a168546a256cd4f7c57261690796cf527ae8a2 /include/surfaceflinger | |
parent | 57d89899c9fb978a1c097f298aa94c5db1f61bb6 (diff) | |
download | frameworks_base-2be352adab7f11646fda7c0240e496bbb37f7bd1.zip frameworks_base-2be352adab7f11646fda7c0240e496bbb37f7bd1.tar.gz frameworks_base-2be352adab7f11646fda7c0240e496bbb37f7bd1.tar.bz2 |
added the notion of fixed-size buffers
the new native_window_set_buffers_geometry allows
to specify a size and format for all buffers to be
dequeued. the buffer will be scalled to the window's
size.
Change-Id: I2c378b85c88d29cdd827a5f319d5c704d79ba381
Diffstat (limited to 'include/surfaceflinger')
-rw-r--r-- | include/surfaceflinger/ISurface.h | 3 | ||||
-rw-r--r-- | include/surfaceflinger/Surface.h | 37 |
2 files changed, 34 insertions, 6 deletions
diff --git a/include/surfaceflinger/ISurface.h b/include/surfaceflinger/ISurface.h index 9476686..18e7950 100644 --- a/include/surfaceflinger/ISurface.h +++ b/include/surfaceflinger/ISurface.h @@ -53,7 +53,8 @@ protected: public: DECLARE_META_INTERFACE(Surface); - virtual sp<GraphicBuffer> requestBuffer(int bufferIdx, int usage) = 0; + virtual sp<GraphicBuffer> requestBuffer(int bufferIdx, + uint32_t w, uint32_t h, uint32_t format, uint32_t usage) = 0; virtual status_t setBufferCount(int bufferCount) = 0; class BufferHeap { diff --git a/include/surfaceflinger/Surface.h b/include/surfaceflinger/Surface.h index e4d60af..77e4a61 100644 --- a/include/surfaceflinger/Surface.h +++ b/include/surfaceflinger/Surface.h @@ -36,6 +36,7 @@ namespace android { // --------------------------------------------------------------------------- +class GraphicBuffer; class GraphicBufferMapper; class IOMX; class Rect; @@ -213,12 +214,14 @@ private: int dispatch_disconnect(va_list args); int dispatch_crop(va_list args); int dispatch_set_buffer_count(va_list args); + int dispatch_set_buffers_geometry(va_list args); void setUsage(uint32_t reqUsage); int connect(int api); int disconnect(int api); int crop(Rect const* rect); int setBufferCount(int bufferCount); + int setBuffersGeometry(int w, int h, int format); /* * private stuff... @@ -231,12 +234,34 @@ private: inline const GraphicBufferMapper& getBufferMapper() const { return mBufferMapper; } inline GraphicBufferMapper& getBufferMapper() { return mBufferMapper; } - status_t getBufferLocked(int index, int usage); + status_t getBufferLocked(int index, + uint32_t w, uint32_t h, uint32_t format, uint32_t usage); int getBufferIndex(const sp<GraphicBuffer>& buffer) const; - uint32_t getUsage() const; - int getConnectedApi() const; + int getConnectedApi() const; + bool needNewBuffer(int bufIdx, + uint32_t *pWidth, uint32_t *pHeight, + uint32_t *pFormat, uint32_t *pUsage) const; + + class BufferInfo { + uint32_t mWidth; + uint32_t mHeight; + uint32_t mFormat; + uint32_t mUsage; + mutable uint32_t mDirty; + enum { + GEOMETRY = 0x01 + }; + public: + BufferInfo(); + void set(uint32_t w, uint32_t h, uint32_t format); + void set(uint32_t usage); + void get(uint32_t *pWidth, uint32_t *pHeight, + uint32_t *pFormat, uint32_t *pUsage) const; + bool validateBuffer(const sp<GraphicBuffer>& buffer) const; + }; + // constants sp<SurfaceComposerClient> mClient; sp<ISurface> mSurface; @@ -249,13 +274,12 @@ private: // protected by mSurfaceLock Rect mSwapRectangle; - uint32_t mUsage; int mConnected; Rect mNextBufferCrop; + BufferInfo mBufferInfo; // protected by mSurfaceLock. These are also used from lock/unlock // but in that case, they must be called form the same thread. - sp<GraphicBuffer> mBuffers[2]; mutable Region mDirtyRegion; // must be used from the lock/unlock thread @@ -264,6 +288,9 @@ private: mutable Region mOldDirtyRegion; bool mReserved; + // only used from dequeueBuffer() + Vector< sp<GraphicBuffer> > mBuffers; + // query() must be called from dequeueBuffer() thread uint32_t mWidth; uint32_t mHeight; |