diff options
| author | Sundar Raman <sunds@ti.com> | 2011-06-17 09:05:09 -0500 | 
|---|---|---|
| committer | Iliyan Malchev <malchev@google.com> | 2011-06-27 13:48:50 -0700 | 
| commit | 1e06f435434681f8750cc21763868fd025e8480e (patch) | |
| tree | a064310008fa01610255ac7b8187e2b588675dee | |
| parent | 34bac59216838c056ffc27fa8dc9c0bf583eaf82 (diff) | |
| download | frameworks_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>
| -rw-r--r-- | services/camera/libcameraservice/CameraHardwareInterface.h | 18 | 
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;  | 
