diff options
Diffstat (limited to 'libs/gui/SurfaceTextureClient.cpp')
-rw-r--r-- | libs/gui/SurfaceTextureClient.cpp | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/libs/gui/SurfaceTextureClient.cpp b/libs/gui/SurfaceTextureClient.cpp index afdbf04..5de963c 100644 --- a/libs/gui/SurfaceTextureClient.cpp +++ b/libs/gui/SurfaceTextureClient.cpp @@ -80,6 +80,9 @@ void SurfaceTextureClient::init() { mReqHeight = 0; mReqFormat = 0; mReqUsage = 0; +#ifdef QCOM_BSP + mReqSize = 0; +#endif mTimestamp = NATIVE_WINDOW_TIMESTAMP_AUTO; mCrop.clear(); mScalingMode = NATIVE_WINDOW_SCALING_MODE_FREEZE; @@ -400,6 +403,14 @@ int SurfaceTextureClient::perform(int operation, va_list args) case NATIVE_WINDOW_SET_BUFFERS_FORMAT: res = dispatchSetBuffersFormat(args); break; +#ifdef QCOM_BSP + case NATIVE_WINDOW_SET_BUFFERS_SIZE: + res = dispatchSetBuffersSize(args); + break; + case NATIVE_WINDOW_UPDATE_BUFFERS_GEOMETRY: + res = dispatchUpdateBuffersGeometry(args); + break; +#endif case NATIVE_WINDOW_LOCK: res = dispatchLock(args); break; @@ -451,6 +462,7 @@ int SurfaceTextureClient::dispatchSetBuffersGeometry(va_list args) { int w = va_arg(args, int); int h = va_arg(args, int); int f = va_arg(args, int); + int err = setBuffersDimensions(w, h); if (err != 0) { return err; @@ -461,6 +473,7 @@ int SurfaceTextureClient::dispatchSetBuffersGeometry(va_list args) { int SurfaceTextureClient::dispatchSetBuffersDimensions(va_list args) { int w = va_arg(args, int); int h = va_arg(args, int); + return setBuffersDimensions(w, h); } @@ -475,6 +488,20 @@ int SurfaceTextureClient::dispatchSetBuffersFormat(va_list args) { return setBuffersFormat(f); } +#ifdef QCOM_BSP +int SurfaceTextureClient::dispatchSetBuffersSize(va_list args) { + int size = va_arg(args, int); + return setBuffersSize(size); +} + +int SurfaceTextureClient::dispatchUpdateBuffersGeometry(va_list args) { + int w = va_arg(args, int); + int h = va_arg(args, int); + int f = va_arg(args, int); + return updateBuffersGeometry(w, h, f); +} +#endif + int SurfaceTextureClient::dispatchSetScalingMode(va_list args) { int m = va_arg(args, int); return setScalingMode(m); @@ -530,6 +557,9 @@ int SurfaceTextureClient::disconnect(int api) { mReqWidth = 0; mReqHeight = 0; mReqUsage = 0; +#ifdef QCOM_BSP + mReqSize = 0; +#endif mCrop.clear(); mScalingMode = NATIVE_WINDOW_SCALING_MODE_FREEZE; mTransform = 0; @@ -630,6 +660,40 @@ int SurfaceTextureClient::setBuffersFormat(int format) return NO_ERROR; } +#ifdef QCOM_BSP +int SurfaceTextureClient::setBuffersSize(int size) +{ + ATRACE_CALL(); + ALOGV("SurfaceTextureClient::setBuffersSize"); + + if (size<0) + return BAD_VALUE; + + Mutex::Autolock lock(mMutex); + if(mReqSize != (uint32_t)size) { + mReqSize = size; + return mSurfaceTexture->setBuffersSize(size); + } + return NO_ERROR; +} + +int SurfaceTextureClient::updateBuffersGeometry(int w, int h, int f) +{ + ATRACE_CALL(); + ALOGV("SurfaceTextureClient::updateBuffersGeometry"); + + if (w<0 || h<0 || f<0) + return BAD_VALUE; + + if ((w && !h) || (!w && h)) + return BAD_VALUE; + + Mutex::Autolock lock(mMutex); + status_t err = mSurfaceTexture->updateBuffersGeometry(w, h, f); + return err; +} +#endif + int SurfaceTextureClient::setScalingMode(int mode) { ATRACE_CALL(); |