diff options
author | Yin-Chia Yeh <yinchiayeh@google.com> | 2015-03-25 00:17:50 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-03-25 00:17:50 +0000 |
commit | 3e414355fbed266916b446eaabbb3f9c153635b2 (patch) | |
tree | d4c642af7d125dddfadddba7acd81208c2c1bc9f /services | |
parent | 525907aa2cf2148186ed55e47e424395b9a43dca (diff) | |
parent | 4c9736fbc82b8b76c996c966583d71ca1df17ca6 (diff) | |
download | frameworks_av-3e414355fbed266916b446eaabbb3f9c153635b2.zip frameworks_av-3e414355fbed266916b446eaabbb3f9c153635b2.tar.gz frameworks_av-3e414355fbed266916b446eaabbb3f9c153635b2.tar.bz2 |
Merge "Camera: fix release fence logic"
Diffstat (limited to 'services')
-rw-r--r-- | services/camera/libcameraservice/device3/Camera3OutputStream.cpp | 35 |
1 files changed, 9 insertions, 26 deletions
diff --git a/services/camera/libcameraservice/device3/Camera3OutputStream.cpp b/services/camera/libcameraservice/device3/Camera3OutputStream.cpp index 96bed0d..0c739e9 100644 --- a/services/camera/libcameraservice/device3/Camera3OutputStream.cpp +++ b/services/camera/libcameraservice/device3/Camera3OutputStream.cpp @@ -157,33 +157,9 @@ status_t Camera3OutputStream::returnBufferCheckedLocked( ALOG_ASSERT(output, "Expected output to be true"); status_t res; - sp<Fence> releaseFence; - - /** - * Fence management - calculate Release Fence - */ - if (buffer.status == CAMERA3_BUFFER_STATUS_ERROR) { - if (buffer.release_fence != -1) { - ALOGE("%s: Stream %d: HAL should not set release_fence(%d) when " - "there is an error", __FUNCTION__, mId, buffer.release_fence); - close(buffer.release_fence); - } - - /** - * Reassign release fence as the acquire fence in case of error - */ - releaseFence = new Fence(buffer.acquire_fence); - } else { - res = native_window_set_buffers_timestamp(mConsumer.get(), timestamp); - if (res != OK) { - ALOGE("%s: Stream %d: Error setting timestamp: %s (%d)", - __FUNCTION__, mId, strerror(-res), res); - return res; - } - - releaseFence = new Fence(buffer.release_fence); - } + // Fence management - always honor release fence from HAL + sp<Fence> releaseFence = new Fence(buffer.release_fence); int anwReleaseFence = releaseFence->dup(); /** @@ -217,6 +193,13 @@ status_t Camera3OutputStream::returnBufferCheckedLocked( mTraceFirstBuffer = false; } + res = native_window_set_buffers_timestamp(mConsumer.get(), timestamp); + if (res != OK) { + ALOGE("%s: Stream %d: Error setting timestamp: %s (%d)", + __FUNCTION__, mId, strerror(-res), res); + return res; + } + res = currentConsumer->queueBuffer(currentConsumer.get(), container_of(buffer.buffer, ANativeWindowBuffer, handle), anwReleaseFence); |