summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorSundar Raman <sunds@ti.com>2011-06-17 09:05:09 -0500
committerIliyan Malchev <malchev@google.com>2011-06-27 13:48:50 -0700
commit1e06f435434681f8750cc21763868fd025e8480e (patch)
treea064310008fa01610255ac7b8187e2b588675dee /services
parent34bac59216838c056ffc27fa8dc9c0bf583eaf82 (diff)
downloadframeworks_av-1e06f435434681f8750cc21763868fd025e8480e.zip
frameworks_av-1e06f435434681f8750cc21763868fd025e8480e.tar.gz
frameworks_av-1e06f435434681f8750cc21763868fd025e8480e.tar.bz2
CameraService: Decouple dequeue and lock
Decouple lockBuffer from dequeueBuffer. Add lock_buffer to preview_stream_ops, so HALs will be fully in charge of managing buffers. Change-Id: I7b53487d618bdf08ba904c5a0f41af462a7ca773 Signed-off-by: Iliyan Malchev <malchev@google.com>
Diffstat (limited to 'services')
-rw-r--r--services/camera/libcameraservice/CameraHardwareInterface.h18
1 files changed, 11 insertions, 7 deletions
diff --git a/services/camera/libcameraservice/CameraHardwareInterface.h b/services/camera/libcameraservice/CameraHardwareInterface.h
index a3749cf..a583aad 100644
--- a/services/camera/libcameraservice/CameraHardwareInterface.h
+++ b/services/camera/libcameraservice/CameraHardwareInterface.h
@@ -559,13 +559,8 @@ private:
ANativeWindowBuffer* anb;
rc = a->dequeueBuffer(a, &anb);
if (!rc) {
- rc = a->lockBuffer(a, anb);
- if (!rc) {
- *buffer = &anb->handle;
- *stride = anb->stride;
- }
- else
- a->cancelBuffer(a, anb);
+ *buffer = &anb->handle;
+ *stride = anb->stride;
}
return rc;
}
@@ -576,6 +571,14 @@ private:
(type *) ((char *) __mptr - (char *)(&((type *)0)->member)); })
#endif
+ static int __lock_buffer(struct preview_stream_ops* w,
+ buffer_handle_t* buffer)
+ {
+ ANativeWindow *a = anw(w);
+ return a->lockBuffer(a,
+ container_of(buffer, ANativeWindowBuffer, handle));
+ }
+
static int __enqueue_buffer(struct preview_stream_ops* w,
buffer_handle_t* buffer)
{
@@ -641,6 +644,7 @@ private:
void initHalPreviewWindow()
{
mHalPreviewWindow.nw.cancel_buffer = __cancel_buffer;
+ mHalPreviewWindow.nw.lock_buffer = __lock_buffer;
mHalPreviewWindow.nw.dequeue_buffer = __dequeue_buffer;
mHalPreviewWindow.nw.enqueue_buffer = __enqueue_buffer;
mHalPreviewWindow.nw.set_buffer_count = __set_buffer_count;