diff options
author | Eino-Ville Talvala <etalvala@google.com> | 2012-05-21 18:54:30 -0700 |
---|---|---|
committer | Eino-Ville Talvala <etalvala@google.com> | 2012-05-31 12:43:17 -0700 |
commit | 6db981c45a964f0d9df4c3451f064dff7954d78e (patch) | |
tree | 44842725c8aed171117d6aa37ad059277f50068d /services/camera/libcameraservice/Camera2Device.h | |
parent | 611f61998863d3a3ffae4e5f2b723b7319c59ddf (diff) | |
download | frameworks_av-6db981c45a964f0d9df4c3451f064dff7954d78e.zip frameworks_av-6db981c45a964f0d9df4c3451f064dff7954d78e.tar.gz frameworks_av-6db981c45a964f0d9df4c3451f064dff7954d78e.tar.bz2 |
Camera service: Minimally functional preview for camera 2 devices.
- Camera app starts up
- Basic preview operation with defaults
- Shutdown sequence is very minimal
Bug: 6243944
Change-Id: I67673b7c1fc08956d218d99f9171e74a7a82bf07
Diffstat (limited to 'services/camera/libcameraservice/Camera2Device.h')
-rw-r--r-- | services/camera/libcameraservice/Camera2Device.h | 81 |
1 files changed, 78 insertions, 3 deletions
diff --git a/services/camera/libcameraservice/Camera2Device.h b/services/camera/libcameraservice/Camera2Device.h index 07c5ff7..e8a68d3 100644 --- a/services/camera/libcameraservice/Camera2Device.h +++ b/services/camera/libcameraservice/Camera2Device.h @@ -19,6 +19,7 @@ #include <utils/RefBase.h> #include <utils/List.h> +#include <utils/Vector.h> #include <utils/Mutex.h> #include <utils/Condition.h> #include <utils/Errors.h> @@ -34,11 +35,18 @@ class Camera2Device : public virtual RefBase { status_t initialize(camera_module_t *module); + camera_metadata_t* info(); + status_t setStreamingRequest(camera_metadata_t* request); - camera_metadata_t* info() { - return mDeviceInfo; - } + status_t createStream(sp<ANativeWindow> consumer, + uint32_t width, uint32_t height, int format, + int *id); + + status_t deleteStream(int id); + + status_t createDefaultRequest(int templateId, + camera_metadata_t **request); private: @@ -63,6 +71,11 @@ class Camera2Device : public virtual RefBase { const camera2_request_queue_src_ops_t* getToConsumerInterface(); void setFromConsumerInterface(camera2_device_t *d); + // Connect queue consumer endpoint to a camera2 device + status_t setConsumerDevice(camera2_device_t *d); + // Connect queue producer endpoint to a camera2 device + status_t setProducerDevice(camera2_device_t *d); + const camera2_frame_queue_dst_ops_t* getToProducerInterface(); // Real interfaces. On enqueue, queue takes ownership of buffer pointer @@ -79,6 +92,7 @@ class Camera2Device : public virtual RefBase { status_t setStreamSlot(const List<camera_metadata_t*> &bufs); private: + status_t signalConsumerLocked(); status_t freeBuffers(List<camera_metadata_t*>::iterator start, List<camera_metadata_t*>::iterator end); @@ -125,6 +139,67 @@ class Camera2Device : public virtual RefBase { MetadataQueue mRequestQueue; MetadataQueue mFrameQueue; + /** + * Adapter from an ANativeWindow interface to camera2 device stream ops. + * Also takes care of allocating/deallocating stream in device interface + */ + class StreamAdapter: public camera2_stream_ops, public virtual RefBase { + public: + StreamAdapter(camera2_device_t *d); + + ~StreamAdapter(); + + status_t connectToDevice(sp<ANativeWindow> consumer, + uint32_t width, uint32_t height, int format); + + status_t disconnect(); + + // Get stream ID. Only valid after a successful connectToDevice call. + int getId(); + + private: + enum { + ERROR = -1, + DISCONNECTED = 0, + ALLOCATED, + CONNECTED, + ACTIVE + } mState; + + sp<ANativeWindow> mConsumerInterface; + camera2_device_t *mDevice; + + uint32_t mId; + uint32_t mWidth; + uint32_t mHeight; + uint32_t mFormat; + uint32_t mUsage; + uint32_t mMaxProducerBuffers; + uint32_t mMaxConsumerBuffers; + + int mFormatRequested; + + const camera2_stream_ops *getStreamOps(); + + static ANativeWindow* toANW(const camera2_stream_ops_t *w); + + static int dequeue_buffer(const camera2_stream_ops_t *w, + buffer_handle_t** buffer); + + static int enqueue_buffer(const camera2_stream_ops_t* w, + int64_t timestamp, + buffer_handle_t* buffer); + + static int cancel_buffer(const camera2_stream_ops_t* w, + buffer_handle_t* buffer); + + static int set_crop(const camera2_stream_ops_t* w, + int left, int top, int right, int bottom); + }; // class StreamAdapter + + typedef List<sp<StreamAdapter> > StreamList; + StreamList mStreams; + }; // class Camera2Device }; // namespace android |