diff options
| author | 2012-04-17 19:36:18 -0700 | |
|---|---|---|
| committer | 2012-04-24 17:34:38 -0700 | |
| commit | efc7ab6dcea8c22ddd7c0259ef4ab4bbf1e93044 (patch) | |
| tree | b9cef83bc407b4aa08a170d861c899c79bcb5b42 /libs/gui/SurfaceTextureClient.cpp | |
| parent | f4b322801d872b64f6c7dd2d2ffc1e4f8e993eef (diff) | |
libgui: Add plumbing for active rectangle
This change adds the plumbing to SurfaceTextureClient, BufferQueue, and
SurfaceTexture to get the active rectangle passed to the ANativeWindow to
the buffer consumer.
Change-Id: I35da0889b266327ebb079b6a7136fa3e2e8b00e6
Diffstat (limited to 'libs/gui/SurfaceTextureClient.cpp')
| -rw-r--r-- | libs/gui/SurfaceTextureClient.cpp | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/libs/gui/SurfaceTextureClient.cpp b/libs/gui/SurfaceTextureClient.cpp index 788524b73b..fdd14c8018 100644 --- a/libs/gui/SurfaceTextureClient.cpp +++ b/libs/gui/SurfaceTextureClient.cpp @@ -78,6 +78,7 @@ void SurfaceTextureClient::init() { mCrop.clear(); mScalingMode = NATIVE_WINDOW_SCALING_MODE_FREEZE; mTransform = 0; + mActiveRect.clear(); mDefaultWidth = 0; mDefaultHeight = 0; mUserWidth = 0; @@ -239,7 +240,7 @@ int SurfaceTextureClient::queueBuffer(android_native_buffer_t* buffer) { ISurfaceTexture::QueueBufferOutput output; ISurfaceTexture::QueueBufferInput input(timestamp, - mCrop, mScalingMode, mTransform); + mCrop, mScalingMode, mTransform, mActiveRect); status_t err = mSurfaceTexture->queueBuffer(i, input, &output); if (err != OK) { ALOGE("queueBuffer: error queuing buffer to SurfaceTexture, %d", err); @@ -356,6 +357,9 @@ int SurfaceTextureClient::perform(int operation, va_list args) case NATIVE_WINDOW_API_DISCONNECT: res = dispatchDisconnect(args); break; + case NATIVE_WINDOW_SET_ACTIVE_RECT: + res = dispatchSetActiveRect(args); + break; default: res = NAME_NOT_FOUND; break; @@ -426,6 +430,11 @@ int SurfaceTextureClient::dispatchSetBuffersTransform(va_list args) { return setBuffersTransform(transform); } +int SurfaceTextureClient::dispatchSetActiveRect(va_list args) { + android_native_rect_t const* rect = va_arg(args, android_native_rect_t*); + return setActiveRect(reinterpret_cast<Rect const*>(rect)); +} + int SurfaceTextureClient::dispatchSetBuffersTimestamp(va_list args) { int64_t timestamp = va_arg(args, int64_t); return setBuffersTimestamp(timestamp); @@ -502,7 +511,7 @@ int SurfaceTextureClient::setCrop(Rect const* rect) } Mutex::Autolock lock(mMutex); - mCrop = *rect; + mCrop = realRect; return NO_ERROR; } @@ -600,6 +609,23 @@ int SurfaceTextureClient::setBuffersTransform(int transform) return NO_ERROR; } +int SurfaceTextureClient::setActiveRect(Rect const* rect) +{ + ATRACE_CALL(); + ALOGV("SurfaceTextureClient::setActiveRect"); + + Rect realRect; + if (rect == NULL || rect->isEmpty()) { + realRect.clear(); + } else { + realRect = *rect; + } + + Mutex::Autolock lock(mMutex); + mActiveRect = realRect; + return NO_ERROR; +} + int SurfaceTextureClient::setBuffersTimestamp(int64_t timestamp) { ALOGV("SurfaceTextureClient::setBuffersTimestamp"); |