summaryrefslogtreecommitdiff
path: root/libs/gui/SurfaceTextureClient.cpp
diff options
context:
space:
mode:
author Jamie Gennis <jgennis@google.com> 2012-04-17 19:36:18 -0700
committer Mathias Agopian <mathias@google.com> 2012-04-24 17:34:38 -0700
commitefc7ab6dcea8c22ddd7c0259ef4ab4bbf1e93044 (patch)
treeb9cef83bc407b4aa08a170d861c899c79bcb5b42 /libs/gui/SurfaceTextureClient.cpp
parentf4b322801d872b64f6c7dd2d2ffc1e4f8e993eef (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.cpp30
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");