blob: 2bc7cf004ed1d67d20b73ca1e5d8f5f9c16c83d3 [file] [log] [blame]
Eino-Ville Talvala7fa43f32013-02-06 17:20:07 -08001/*
2 * Copyright (C) 2013 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef ANDROID_SERVERS_CAMERA_CAMERA3DEVICE_H
18#define ANDROID_SERVERS_CAMERA_CAMERA3DEVICE_H
19
20#include <utils/Condition.h>
21#include <utils/Errors.h>
22#include <utils/List.h>
23#include <utils/Mutex.h>
24#include <utils/Thread.h>
25
26#include "CameraDeviceBase.h"
27
28#include "hardware/camera3.h"
29
30/**
31 * Function pointer types with C calling convention to
32 * use for HAL callback functions.
33 */
34extern "C" {
35 typedef void (callbacks_process_capture_result_t)(
36 const struct camera3_callback_ops *,
37 const camera3_capture_result_t *);
38
39 typedef void (callbacks_notify_t)(
40 const struct camera3_callback_ops *,
41 const camera3_notify_msg_t *);
42}
43
44namespace android {
45
46/**
47 * CameraDevice for HAL devices with version CAMERA_DEVICE_API_VERSION_3_0
48 */
49class Camera3Device :
50 public CameraDeviceBase,
51 private camera3_callback_ops {
52 public:
53 Camera3Device(int id);
54
55 virtual ~Camera3Device();
56
57 /**
58 * CameraDevice interface
59 */
60 virtual status_t initialize(camera_module_t *module);
61 virtual status_t disconnect();
62 virtual status_t dump(int fd, const Vector<String16> &args);
63 virtual const CameraMetadata& info() const;
64 virtual status_t capture(CameraMetadata &request);
65 virtual status_t setStreamingRequest(const CameraMetadata &request);
66 virtual status_t clearStreamingRequest();
67 virtual status_t waitUntilRequestReceived(int32_t requestId, nsecs_t timeout);
68 virtual status_t createStream(sp<ANativeWindow> consumer,
69 uint32_t width, uint32_t height, int format, size_t size,
70 int *id);
71 virtual status_t createReprocessStreamFromStream(int outputId, int *id);
72 virtual status_t getStreamInfo(int id,
73 uint32_t *width, uint32_t *height, uint32_t *format);
74 virtual status_t setStreamTransform(int id, int transform);
75 virtual status_t deleteStream(int id);
76 virtual status_t deleteReprocessStream(int id);
77 virtual status_t createDefaultRequest(int templateId, CameraMetadata *request);
78 virtual status_t waitUntilDrained();
79 virtual status_t setNotifyCallback(NotificationListener *listener);
80 virtual status_t waitForNextFrame(nsecs_t timeout);
81 virtual status_t getNextFrame(CameraMetadata *frame);
82 virtual status_t triggerAutofocus(uint32_t id);
83 virtual status_t triggerCancelAutofocus(uint32_t id);
84 virtual status_t triggerPrecaptureMetering(uint32_t id);
85 virtual status_t pushReprocessBuffer(int reprocessStreamId,
86 buffer_handle_t *buffer, wp<BufferReleasedListener> listener);
87
88 private:
89 const int mId;
90 camera3_device_t *mHal3Device;
91
92 CameraMetadata mDeviceInfo;
93 vendor_tag_query_ops_t mVendorTagOps;
94
95 /**
96 * Thread for managing capture request submission to HAL device.
97 */
98 class RequestThread: public Thread {
99
100 public:
101
102 RequestThread(wp<Camera3Device> parent);
103
104 protected:
105
106 virtual bool threadLoop();
107
108 private:
109
110 wp<Camera3Device> mParent;
111
112 };
113 sp<RequestThread> requestThread;
114
115 /**
116 * Callback functions from HAL device
117 */
118 void processCaptureResult(const camera3_capture_result *result);
119
120 void notify(const camera3_notify_msg *msg);
121
122 /**
123 * Static callback forwarding methods from HAL to instance
124 */
125 static callbacks_process_capture_result_t sProcessCaptureResult;
126
127 static callbacks_notify_t sNotify;
128
129}; // class Camera3Device
130
131}; // namespace android
132
133#endif