summaryrefslogtreecommitdiffstats
path: root/include/gui
diff options
context:
space:
mode:
authorRamkumar Radhakrishnan <ramkumar@codeaurora.org>2012-11-06 20:44:04 -0800
committerGerrit Code Review <gerrit@cyanogenmod.org>2013-03-10 22:55:58 -0700
commitbbef29560e318cbdb0d4107b7fce6a2a64fd641b (patch)
treefa25faa6fdf12cc6de6dd74b24ca9405088cc891 /include/gui
parent31152b94cd0471a3853fb658e9aff507d4eec384 (diff)
downloadframeworks_native-bbef29560e318cbdb0d4107b7fce6a2a64fd641b.zip
frameworks_native-bbef29560e318cbdb0d4107b7fce6a2a64fd641b.tar.gz
frameworks_native-bbef29560e318cbdb0d4107b7fce6a2a64fd641b.tar.bz2
libgui: Add support to update buffer geometry.
Add native window properties NATIVE_WINDOW_UPDATE_BUFFERS_GEOMETRY to the perform function of SurfaceTextureClient and SurfaceTexture to update the width, height and format of the buffer dynamically from the client before queue buffer call. Change-Id: I62447fcf523b507d534085cd0835f55a978c4ead
Diffstat (limited to 'include/gui')
-rw-r--r--include/gui/BufferQueue.h27
-rw-r--r--include/gui/ISurfaceTexture.h4
-rw-r--r--include/gui/SurfaceTextureClient.h2
3 files changed, 33 insertions, 0 deletions
diff --git a/include/gui/BufferQueue.h b/include/gui/BufferQueue.h
index 02598b0..cd38cfe 100644
--- a/include/gui/BufferQueue.h
+++ b/include/gui/BufferQueue.h
@@ -33,6 +33,23 @@
namespace android {
// ----------------------------------------------------------------------------
+#ifdef QCOM_BSP
+/*
+ * Structure to hold the buffer geometry
+ */
+struct QBufGeometry {
+ int mWidth;
+ int mHeight;
+ int mFormat;
+ QBufGeometry(): mWidth(0), mHeight(0), mFormat(0) {}
+ void set(int w, int h, int f) {
+ mWidth = w;
+ mHeight = h;
+ mFormat = f;
+ }
+};
+#endif
+
class BufferQueue : public BnSurfaceTexture {
public:
enum { MIN_UNDEQUEUED_BUFFERS = 2 };
@@ -156,6 +173,11 @@ public:
// to calculate the size for the buffer. this will take effect from next
// dequeue buffer.
virtual status_t setBuffersSize(int size);
+
+ // update buffer width, height and format for a native buffer
+ // dynamically from the client which will take effect in the next
+ // queue buffer.
+ virtual status_t updateBuffersGeometry(int w, int h, int f);
#endif
// connect attempts to connect a producer client API to the BufferQueue.
@@ -547,6 +569,11 @@ private:
// mTransformHint is used to optimize for screen rotations
uint32_t mTransformHint;
+
+#ifdef QCOM_BSP
+ // holds the updated buffer geometry info of the new video resolution.
+ QBufGeometry mNextBufferInfo;
+#endif
};
// ----------------------------------------------------------------------------
diff --git a/include/gui/ISurfaceTexture.h b/include/gui/ISurfaceTexture.h
index f0beab6..f2a6510 100644
--- a/include/gui/ISurfaceTexture.h
+++ b/include/gui/ISurfaceTexture.h
@@ -172,6 +172,10 @@ public:
// calculate the size for the buffer. this will take effect from next
// dequeue buffer.
virtual status_t setBuffersSize(int size) = 0;
+
+ // update buffer width, height and format information from the client
+ // which will take effect in the next queue buffer.
+ virtual status_t updateBuffersGeometry(int w, int h, int f) = 0;
#endif
// connect attempts to connect a client API to the SurfaceTexture. This
diff --git a/include/gui/SurfaceTextureClient.h b/include/gui/SurfaceTextureClient.h
index 108126d..f2b523d 100644
--- a/include/gui/SurfaceTextureClient.h
+++ b/include/gui/SurfaceTextureClient.h
@@ -94,6 +94,7 @@ private:
int dispatchSetPostTransformCrop(va_list args);
int dispatchSetUsage(va_list args);
#ifdef QCOM_BSP
+ int dispatchUpdateBuffersGeometry(va_list args);
int dispatchSetBuffersSize(va_list args);
#endif
int dispatchLock(va_list args);
@@ -107,6 +108,7 @@ protected:
virtual int query(int what, int* value) const;
virtual int setSwapInterval(int interval);
#ifdef QCOM_BSP
+ virtual int updateBuffersGeometry(int w, int h, int f);
virtual int setBuffersSize(int size);
#endif
virtual int lockBuffer_DEPRECATED(ANativeWindowBuffer* buffer);