diff options
author | Jesse Hall <jessehall@google.com> | 2012-06-14 15:26:33 -0700 |
---|---|---|
committer | Jesse Hall <jessehall@google.com> | 2012-06-21 22:21:12 -0700 |
commit | f78575400977f644cf0b12beb2fa5fc278b6ed4c (patch) | |
tree | 075c491472c6584c30920dbb26f8c97811e2f882 /libs/gui/SurfaceTextureClient.cpp | |
parent | ef19414bd8b77a26f5751f3845be79025a8263fe (diff) | |
download | frameworks_native-f78575400977f644cf0b12beb2fa5fc278b6ed4c.tar.gz frameworks_native-f78575400977f644cf0b12beb2fa5fc278b6ed4c.tar.bz2 frameworks_native-f78575400977f644cf0b12beb2fa5fc278b6ed4c.zip |
Pass fences from BufferQueue to SurfaceTextureClient
ISurfaceTexture::dequeueBuffer now returns the buffer's fence for the
client to wait on. For BufferQueue, this means passing it through
Binder so it can be returned to the SurfaceTextureClient. Now
SurfaceTextureClient is responsible for waiting on the fence in
dequeueBuffer instead of BufferQueue: one step closer to the goal.
Change-Id: I677ae758bcd23acee2d784b8cec11b32cccc196d
Diffstat (limited to 'libs/gui/SurfaceTextureClient.cpp')
-rw-r--r-- | libs/gui/SurfaceTextureClient.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/libs/gui/SurfaceTextureClient.cpp b/libs/gui/SurfaceTextureClient.cpp index 8195de972..57bc604f1 100644 --- a/libs/gui/SurfaceTextureClient.cpp +++ b/libs/gui/SurfaceTextureClient.cpp @@ -198,7 +198,8 @@ int SurfaceTextureClient::dequeueBuffer(android_native_buffer_t** buffer, int buf = -1; int reqW = mReqWidth ? mReqWidth : mUserWidth; int reqH = mReqHeight ? mReqHeight : mUserHeight; - status_t result = mSurfaceTexture->dequeueBuffer(&buf, reqW, reqH, + sp<Fence> fence; + status_t result = mSurfaceTexture->dequeueBuffer(&buf, fence, reqW, reqH, mReqFormat, mReqUsage); if (result < 0) { ALOGV("dequeueBuffer: ISurfaceTexture::dequeueBuffer(%d, %d, %d, %d)" @@ -219,6 +220,15 @@ int SurfaceTextureClient::dequeueBuffer(android_native_buffer_t** buffer, return result; } } + + if (fence.get()) { + status_t err = fence->wait(Fence::TIMEOUT_NEVER); + if (err != OK) { + ALOGE("dequeueBuffer: error waiting for fence: %d", err); + } + fence.clear(); + } + *buffer = gbuf.get(); *fenceFd = -1; return OK; |