summaryrefslogtreecommitdiffstats
path: root/libs/gui/SurfaceTextureClient.cpp
diff options
context:
space:
mode:
authorMathias Agopian <mathias@google.com>2012-03-29 17:10:08 -0700
committerMathias Agopian <mathias@google.com>2012-03-30 15:16:30 -0700
commit851ef8f1bfbb164d61b1528a529a464f0a60dbaf (patch)
tree89341bb3c0cbda6b18dc0585c64e892c83f134a4 /libs/gui/SurfaceTextureClient.cpp
parent9285a16450323d0e91513e2c270c2ac03c8b940c (diff)
downloadframeworks_native-851ef8f1bfbb164d61b1528a529a464f0a60dbaf.zip
frameworks_native-851ef8f1bfbb164d61b1528a529a464f0a60dbaf.tar.gz
frameworks_native-851ef8f1bfbb164d61b1528a529a464f0a60dbaf.tar.bz2
reduce IPC with BufferQueue
collapse setCrop, setTransform and setScalingMode to queueBuffer() this ends up simplifying things quite a bit and reducing the numnber of IPC needed per frame. Change-Id: I3a13c07603abe4e76b8251e6380b107fde22e6d9
Diffstat (limited to 'libs/gui/SurfaceTextureClient.cpp')
-rw-r--r--libs/gui/SurfaceTextureClient.cpp51
1 files changed, 29 insertions, 22 deletions
diff --git a/libs/gui/SurfaceTextureClient.cpp b/libs/gui/SurfaceTextureClient.cpp
index b9e870d..6aa81a9 100644
--- a/libs/gui/SurfaceTextureClient.cpp
+++ b/libs/gui/SurfaceTextureClient.cpp
@@ -75,6 +75,9 @@ void SurfaceTextureClient::init() {
mReqFormat = 0;
mReqUsage = 0;
mTimestamp = NATIVE_WINDOW_TIMESTAMP_AUTO;
+ mCrop.clear();
+ mScalingMode = NATIVE_WINDOW_SCALING_MODE_FREEZE;
+ mTransform = 0;
mDefaultWidth = 0;
mDefaultHeight = 0;
mTransformHint = 0;
@@ -245,6 +248,7 @@ int SurfaceTextureClient::queueBuffer(android_native_buffer_t* buffer) {
return i;
}
status_t err = mSurfaceTexture->queueBuffer(i, timestamp,
+ mCrop, mScalingMode, mTransform,
&mDefaultWidth, &mDefaultHeight, &mTransformHint);
if (err != OK) {
ALOGE("queueBuffer: error queuing buffer to SurfaceTexture, %d", err);
@@ -444,6 +448,9 @@ int SurfaceTextureClient::disconnect(int api) {
mReqWidth = 0;
mReqHeight = 0;
mReqUsage = 0;
+ mCrop.clear();
+ mScalingMode = NATIVE_WINDOW_SCALING_MODE_FREEZE;
+ mTransform = 0;
if (api == NATIVE_WINDOW_API_CPU) {
mConnectedToCpu = false;
}
@@ -463,19 +470,17 @@ int SurfaceTextureClient::setCrop(Rect const* rect)
{
ATRACE_CALL();
ALOGV("SurfaceTextureClient::setCrop");
- Mutex::Autolock lock(mMutex);
Rect realRect;
if (rect == NULL || rect->isEmpty()) {
- realRect = Rect(0, 0);
+ realRect.clear();
} else {
realRect = *rect;
}
- status_t err = mSurfaceTexture->setCrop(*rect);
- ALOGE_IF(err, "ISurfaceTexture::setCrop(...) returned %s", strerror(-err));
-
- return err;
+ Mutex::Autolock lock(mMutex);
+ mCrop = *rect;
+ return NO_ERROR;
}
int SurfaceTextureClient::setBufferCount(int bufferCount)
@@ -499,7 +504,6 @@ int SurfaceTextureClient::setBuffersDimensions(int w, int h)
{
ATRACE_CALL();
ALOGV("SurfaceTextureClient::setBuffersDimensions");
- Mutex::Autolock lock(mMutex);
if (w<0 || h<0)
return BAD_VALUE;
@@ -507,25 +511,22 @@ int SurfaceTextureClient::setBuffersDimensions(int w, int h)
if ((w && !h) || (!w && h))
return BAD_VALUE;
+ Mutex::Autolock lock(mMutex);
mReqWidth = w;
mReqHeight = h;
-
- status_t err = mSurfaceTexture->setCrop(Rect(0, 0));
- ALOGE_IF(err, "ISurfaceTexture::setCrop(...) returned %s", strerror(-err));
-
- return err;
+ mCrop.clear();
+ return NO_ERROR;
}
int SurfaceTextureClient::setBuffersFormat(int format)
{
ALOGV("SurfaceTextureClient::setBuffersFormat");
- Mutex::Autolock lock(mMutex);
if (format<0)
return BAD_VALUE;
+ Mutex::Autolock lock(mMutex);
mReqFormat = format;
-
return NO_ERROR;
}
@@ -533,13 +534,19 @@ int SurfaceTextureClient::setScalingMode(int mode)
{
ATRACE_CALL();
ALOGV("SurfaceTextureClient::setScalingMode(%d)", mode);
- Mutex::Autolock lock(mMutex);
- // mode is validated on the server
- status_t err = mSurfaceTexture->setScalingMode(mode);
- ALOGE_IF(err, "ISurfaceTexture::setScalingMode(%d) returned %s",
- mode, strerror(-err));
- return err;
+ switch (mode) {
+ case NATIVE_WINDOW_SCALING_MODE_FREEZE:
+ case NATIVE_WINDOW_SCALING_MODE_SCALE_TO_WINDOW:
+ break;
+ default:
+ ALOGE("unknown scaling mode: %d", mode);
+ return BAD_VALUE;
+ }
+
+ Mutex::Autolock lock(mMutex);
+ mScalingMode = mode;
+ return NO_ERROR;
}
int SurfaceTextureClient::setBuffersTransform(int transform)
@@ -547,8 +554,8 @@ int SurfaceTextureClient::setBuffersTransform(int transform)
ATRACE_CALL();
ALOGV("SurfaceTextureClient::setBuffersTransform");
Mutex::Autolock lock(mMutex);
- status_t err = mSurfaceTexture->setTransform(transform);
- return err;
+ mTransform = transform;
+ return NO_ERROR;
}
int SurfaceTextureClient::setBuffersTimestamp(int64_t timestamp)