summaryrefslogtreecommitdiffstats
path: root/services/camera/libcameraservice/gui
diff options
context:
space:
mode:
authorLajos Molnar <lajos@google.com>2013-05-15 12:59:19 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2013-05-23 22:18:58 +0000
commitd030447b617105b31bf3013e5e4b39d422b53b77 (patch)
tree3fd684f2a58933a94692c3d23da22087d3da29ea /services/camera/libcameraservice/gui
parent599d83e4f2197968d77d3d106630179c88c8a6d7 (diff)
downloadframeworks_av-d030447b617105b31bf3013e5e4b39d422b53b77.zip
frameworks_av-d030447b617105b31bf3013e5e4b39d422b53b77.tar.gz
frameworks_av-d030447b617105b31bf3013e5e4b39d422b53b77.tar.bz2
stagefright: BufferProducer updates
Update BufferQueue and ConsumerBase users to new BufferQueue API, to allow BufferQueue slots to be reused. Buffer consumers generally now need to track the unique frameNumber belonging to each frame acquired if they are using BufferQueue directly. Otherwise, they can simply track the graphicBuffer. Change-Id: I30ee3158cf40fb10bbd085241646d5f1128ee480 Signed-off-by: Lajos Molnar <lajos@google.com> Related-to-bug: 7093648
Diffstat (limited to 'services/camera/libcameraservice/gui')
-rw-r--r--services/camera/libcameraservice/gui/RingBufferConsumer.cpp13
1 files changed, 10 insertions, 3 deletions
diff --git a/services/camera/libcameraservice/gui/RingBufferConsumer.cpp b/services/camera/libcameraservice/gui/RingBufferConsumer.cpp
index cd39bad..dfa1066 100644
--- a/services/camera/libcameraservice/gui/RingBufferConsumer.cpp
+++ b/services/camera/libcameraservice/gui/RingBufferConsumer.cpp
@@ -214,7 +214,11 @@ status_t RingBufferConsumer::releaseOldestBufferLocked(size_t* pinnedFrames) {
// In case the object was never pinned, pass the acquire fence
// back to the release fence. If the fence was already waited on,
// it'll just be a no-op to wait on it again.
- err = addReleaseFenceLocked(item.mBuf, item.mFence);
+
+ // item.mGraphicBuffer was populated with the proper graphic-buffer
+ // at acquire even if it was previously acquired
+ err = addReleaseFenceLocked(item.mBuf,
+ item.mGraphicBuffer, item.mFence);
if (err != OK) {
BI_LOGE("Failed to add release fence to buffer "
@@ -226,7 +230,9 @@ status_t RingBufferConsumer::releaseOldestBufferLocked(size_t* pinnedFrames) {
BI_LOGV("Attempting to release buffer timestamp %lld, frame %lld",
item.mTimestamp, item.mFrameNumber);
- err = releaseBufferLocked(item.mBuf,
+ // item.mGraphicBuffer was populated with the proper graphic-buffer
+ // at acquire even if it was previously acquired
+ err = releaseBufferLocked(item.mBuf, item.mGraphicBuffer,
EGL_NO_DISPLAY,
EGL_NO_SYNC_KHR);
if (err != OK) {
@@ -310,7 +316,8 @@ void RingBufferConsumer::unpinBuffer(const BufferItem& item) {
RingBufferItem& find = *it;
if (item.mGraphicBuffer == find.mGraphicBuffer) {
- status_t res = addReleaseFenceLocked(item.mBuf, item.mFence);
+ status_t res = addReleaseFenceLocked(item.mBuf,
+ item.mGraphicBuffer, item.mFence);
if (res != OK) {
BI_LOGE("Failed to add release fence to buffer "