summaryrefslogtreecommitdiffstats
path: root/libs/gui/SurfaceTextureClient.cpp
diff options
context:
space:
mode:
authorJesse Hall <jessehall@google.com>2012-06-28 12:52:05 -0700
committerJesse Hall <jessehall@google.com>2012-06-30 21:38:51 -0700
commitc777b0b3b9b0ea5d8e378fccde6935765e28e329 (patch)
tree83ef3d6288766dc474bb9a77ebc947b0857865df /libs/gui/SurfaceTextureClient.cpp
parent02a7be74dd0c4eb47a522cb0f646736cb6d0de01 (diff)
downloadframeworks_native-c777b0b3b9b0ea5d8e378fccde6935765e28e329.tar.gz
frameworks_native-c777b0b3b9b0ea5d8e378fccde6935765e28e329.tar.bz2
frameworks_native-c777b0b3b9b0ea5d8e378fccde6935765e28e329.zip
Pass fences with buffers from SurfaceTextureClient
Change-Id: I09b49433788d01e8b2b3684bb4d0112be29538d3
Diffstat (limited to 'libs/gui/SurfaceTextureClient.cpp')
-rw-r--r--libs/gui/SurfaceTextureClient.cpp23
1 files changed, 7 insertions, 16 deletions
diff --git a/libs/gui/SurfaceTextureClient.cpp b/libs/gui/SurfaceTextureClient.cpp
index 84f2ff4e9..718fe8441 100644
--- a/libs/gui/SurfaceTextureClient.cpp
+++ b/libs/gui/SurfaceTextureClient.cpp
@@ -237,7 +237,8 @@ int SurfaceTextureClient::dequeueBuffer(android_native_buffer_t** buffer,
return OK;
}
-int SurfaceTextureClient::cancelBuffer(android_native_buffer_t* buffer, int fenceFd) {
+int SurfaceTextureClient::cancelBuffer(android_native_buffer_t* buffer,
+ int fenceFd) {
ATRACE_CALL();
ALOGV("SurfaceTextureClient::cancelBuffer");
Mutex::Autolock lock(mMutex);
@@ -245,13 +246,8 @@ int SurfaceTextureClient::cancelBuffer(android_native_buffer_t* buffer, int fenc
if (i < 0) {
return i;
}
- sp<Fence> fence(new Fence(fenceFd));
- status_t err = fence->wait(Fence::TIMEOUT_NEVER);
- if (err != OK) {
- ALOGE("queueBuffer: Fence::wait returned an error: %d", err);
- return err;
- }
- mSurfaceTexture->cancelBuffer(i);
+ sp<Fence> fence(fenceFd >= 0 ? new Fence(fenceFd) : NULL);
+ mSurfaceTexture->cancelBuffer(i, fence);
return OK;
}
@@ -291,21 +287,16 @@ int SurfaceTextureClient::queueBuffer(android_native_buffer_t* buffer, int fence
return i;
}
- sp<Fence> fence(new Fence(fenceFd));
- status_t err = fence->wait(Fence::TIMEOUT_NEVER);
- if (err != OK) {
- ALOGE("queueBuffer: Fence::wait returned an error: %d", err);
- return err;
- }
// Make sure the crop rectangle is entirely inside the buffer.
Rect crop;
mCrop.intersect(Rect(buffer->width, buffer->height), &crop);
+ sp<Fence> fence(fenceFd >= 0 ? new Fence(fenceFd) : NULL);
ISurfaceTexture::QueueBufferOutput output;
ISurfaceTexture::QueueBufferInput input(timestamp, crop, mScalingMode,
- mTransform);
- err = mSurfaceTexture->queueBuffer(i, input, &output);
+ mTransform, fence);
+ status_t err = mSurfaceTexture->queueBuffer(i, input, &output);
if (err != OK) {
ALOGE("queueBuffer: error queuing buffer to SurfaceTexture, %d", err);
}