blob: ed448f3db6c946ce04f8ac425e512bf7f071350a [file] [log] [blame]
Eino-Ville Talvala61ab9f92012-05-17 10:30:54 -07001/*
2 * Copyright (C) 2012 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_CAMERA2CLIENT_H
18#define ANDROID_SERVERS_CAMERA_CAMERA2CLIENT_H
19
Eino-Ville Talvala61ab9f92012-05-17 10:30:54 -070020#include "CameraService.h"
Eino-Ville Talvala7b82efe2013-07-25 17:12:35 -070021#include "common/CameraDeviceBase.h"
22#include "common/Camera2ClientBase.h"
23#include "api1/client2/Parameters.h"
24#include "api1/client2/FrameProcessor.h"
25//#include "api1/client2/StreamingProcessor.h"
26//#include "api1/client2/JpegProcessor.h"
27//#include "api1/client2/ZslProcessorInterface.h"
28//#include "api1/client2/CaptureSequencer.h"
29//#include "api1/client2/CallbackProcessor.h"
Eino-Ville Talvala61ab9f92012-05-17 10:30:54 -070030
31namespace android {
32
Eino-Ville Talvala7b82efe2013-07-25 17:12:35 -070033namespace camera2 {
34
35class StreamingProcessor;
36class JpegProcessor;
37class ZslProcessorInterface;
38class CaptureSequencer;
39class CallbackProcessor;
40
41}
42
Eino-Ville Talvala73bbd1f2012-09-26 10:45:47 -070043class IMemory;
Eino-Ville Talvala61ab9f92012-05-17 10:30:54 -070044/**
Eino-Ville Talvalab99c5b82013-02-06 17:20:07 -080045 * Interface between android.hardware.Camera API and Camera HAL device for versions
46 * CAMERA_DEVICE_API_VERSION_2_0 and 3_0.
Eino-Ville Talvala61ab9f92012-05-17 10:30:54 -070047 */
Eino-Ville Talvala8ce89d92012-08-10 08:40:26 -070048class Camera2Client :
Igor Murashkin44cfcf02013-03-01 16:22:28 -080049 public Camera2ClientBase<CameraService::Client>
Eino-Ville Talvala61ab9f92012-05-17 10:30:54 -070050{
51public:
Eino-Ville Talvalaea0d51b2012-08-28 01:25:43 -070052 /**
53 * ICamera interface (see ICamera for details)
54 */
Eino-Ville Talvala160d4af2012-08-03 09:40:16 -070055
Eino-Ville Talvala61ab9f92012-05-17 10:30:54 -070056 virtual void disconnect();
57 virtual status_t connect(const sp<ICameraClient>& client);
58 virtual status_t lock();
59 virtual status_t unlock();
60 virtual status_t setPreviewDisplay(const sp<Surface>& surface);
Eino-Ville Talvala6db981c2012-05-21 18:54:30 -070061 virtual status_t setPreviewTexture(
Andy McFadden8ba01022012-12-18 09:46:54 -080062 const sp<IGraphicBufferProducer>& bufferProducer);
Eino-Ville Talvala61ab9f92012-05-17 10:30:54 -070063 virtual void setPreviewCallbackFlag(int flag);
Eino-Ville Talvala3ee35502013-04-02 15:45:11 -070064 virtual status_t setPreviewCallbackTarget(
65 const sp<IGraphicBufferProducer>& callbackProducer);
66
Eino-Ville Talvala61ab9f92012-05-17 10:30:54 -070067 virtual status_t startPreview();
68 virtual void stopPreview();
69 virtual bool previewEnabled();
70 virtual status_t storeMetaDataInBuffers(bool enabled);
71 virtual status_t startRecording();
72 virtual void stopRecording();
73 virtual bool recordingEnabled();
74 virtual void releaseRecordingFrame(const sp<IMemory>& mem);
75 virtual status_t autoFocus();
76 virtual status_t cancelAutoFocus();
77 virtual status_t takePicture(int msgType);
78 virtual status_t setParameters(const String8& params);
79 virtual String8 getParameters() const;
80 virtual status_t sendCommand(int32_t cmd, int32_t arg1, int32_t arg2);
81
Eino-Ville Talvalaea0d51b2012-08-28 01:25:43 -070082 /**
83 * Interface used by CameraService
84 */
Eino-Ville Talvala160d4af2012-08-03 09:40:16 -070085
Eino-Ville Talvala61ab9f92012-05-17 10:30:54 -070086 Camera2Client(const sp<CameraService>& cameraService,
87 const sp<ICameraClient>& cameraClient,
Eino-Ville Talvalaceb388d2013-02-19 10:40:14 -080088 const String16& clientPackageName,
Eino-Ville Talvala61ab9f92012-05-17 10:30:54 -070089 int cameraId,
90 int cameraFacing,
Igor Murashkinecf17e82012-10-02 16:05:11 -070091 int clientPid,
Eino-Ville Talvalaceb388d2013-02-19 10:40:14 -080092 uid_t clientUid,
Eino-Ville Talvalab99c5b82013-02-06 17:20:07 -080093 int servicePid,
94 int deviceVersion);
95
Eino-Ville Talvala160d4af2012-08-03 09:40:16 -070096 virtual ~Camera2Client();
Eino-Ville Talvala61ab9f92012-05-17 10:30:54 -070097
Eino-Ville Talvalaf69c70d2012-05-20 15:59:14 -070098 status_t initialize(camera_module_t *module);
99
Eino-Ville Talvala61ab9f92012-05-17 10:30:54 -0700100 virtual status_t dump(int fd, const Vector<String16>& args);
101
Eino-Ville Talvalaea0d51b2012-08-28 01:25:43 -0700102 /**
Eino-Ville Talvalab99c5b82013-02-06 17:20:07 -0800103 * Interface used by CameraDeviceBase
Eino-Ville Talvalaea0d51b2012-08-28 01:25:43 -0700104 */
Eino-Ville Talvala160d4af2012-08-03 09:40:16 -0700105
Eino-Ville Talvala160d4af2012-08-03 09:40:16 -0700106 virtual void notifyAutoFocus(uint8_t newState, int triggerId);
107 virtual void notifyAutoExposure(uint8_t newState, int triggerId);
Eino-Ville Talvala160d4af2012-08-03 09:40:16 -0700108
Eino-Ville Talvalaea0d51b2012-08-28 01:25:43 -0700109 /**
110 * Interface used by independent components of Camera2Client.
111 */
Eino-Ville Talvalaa16733e2012-08-27 23:41:56 -0700112
Eino-Ville Talvalaa16733e2012-08-27 23:41:56 -0700113 camera2::SharedParameters& getParameters();
114
Eino-Ville Talvalada6665c2012-08-29 17:37:16 -0700115 int getPreviewStreamId() const;
116 int getCaptureStreamId() const;
117 int getCallbackStreamId() const;
118 int getRecordingStreamId() const;
119 int getZslStreamId() const;
120
Eino-Ville Talvala4865c522012-10-02 13:30:28 -0700121 status_t registerFrameListener(int32_t minId, int32_t maxId,
Eino-Ville Talvalada6665c2012-08-29 17:37:16 -0700122 wp<camera2::FrameProcessor::FilteredListener> listener);
Eino-Ville Talvala4865c522012-10-02 13:30:28 -0700123 status_t removeFrameListener(int32_t minId, int32_t maxId,
124 wp<camera2::FrameProcessor::FilteredListener> listener);
125
126 status_t stopStream();
Eino-Ville Talvalada6665c2012-08-29 17:37:16 -0700127
Eino-Ville Talvalaea0d51b2012-08-28 01:25:43 -0700128 static size_t calculateBufferSize(int width, int height,
129 int format, int stride);
130
Eino-Ville Talvala4865c522012-10-02 13:30:28 -0700131 static const int32_t kPreviewRequestIdStart = 10000000;
132 static const int32_t kPreviewRequestIdEnd = 20000000;
133
134 static const int32_t kRecordingRequestIdStart = 20000000;
135 static const int32_t kRecordingRequestIdEnd = 30000000;
136
137 static const int32_t kCaptureRequestIdStart = 30000000;
138 static const int32_t kCaptureRequestIdEnd = 40000000;
Eino-Ville Talvalada6665c2012-08-29 17:37:16 -0700139
Eino-Ville Talvala61ab9f92012-05-17 10:30:54 -0700140private:
Eino-Ville Talvala3cca1362012-06-07 10:07:18 -0700141 /** ICamera interface-related private members */
Eino-Ville Talvala2e19c3c2012-08-26 09:29:28 -0700142 typedef camera2::Parameters Parameters;
Eino-Ville Talvala228a5382012-08-13 12:16:06 -0700143
Eino-Ville Talvala36cdfb12012-08-02 17:34:15 -0700144 status_t setPreviewWindowL(const sp<IBinder>& binder,
Eino-Ville Talvalabe0573b2012-06-15 12:42:30 -0700145 sp<ANativeWindow> window);
Eino-Ville Talvala228a5382012-08-13 12:16:06 -0700146 status_t startPreviewL(Parameters &params, bool restart);
147 void stopPreviewL();
148 status_t startRecordingL(Parameters &params, bool restart);
149 bool recordingEnabledL();
James Dong8da4cd72012-08-04 19:58:07 -0700150
Eino-Ville Talvala36cdfb12012-08-02 17:34:15 -0700151 // Individual commands for sendCommand()
152 status_t commandStartSmoothZoomL();
153 status_t commandStopSmoothZoomL();
154 status_t commandSetDisplayOrientationL(int degrees);
155 status_t commandEnableShutterSoundL(bool enable);
156 status_t commandPlayRecordingSoundL();
157 status_t commandStartFaceDetectionL(int type);
Eino-Ville Talvala228a5382012-08-13 12:16:06 -0700158 status_t commandStopFaceDetectionL(Parameters &params);
Eino-Ville Talvala36cdfb12012-08-02 17:34:15 -0700159 status_t commandEnableFocusMoveMsgL(bool enable);
160 status_t commandPingL();
161 status_t commandSetVideoBufferCountL(size_t count);
Eino-Ville Talvalad4bcfde2012-06-07 17:12:38 -0700162
Eino-Ville Talvala2e19c3c2012-08-26 09:29:28 -0700163 // Current camera device configuration
164 camera2::SharedParameters mParameters;
Eino-Ville Talvala8ce89d92012-08-10 08:40:26 -0700165
Eino-Ville Talvala3cca1362012-06-07 10:07:18 -0700166 /** Camera device-related private members */
167
Eino-Ville Talvala228a5382012-08-13 12:16:06 -0700168 void setPreviewCallbackFlagL(Parameters &params, int flag);
Eino-Ville Talvala5a4f93e2012-08-29 18:06:32 -0700169 status_t updateRequests(Parameters &params);
Igor Murashkinae500e52013-04-22 14:03:54 -0700170 int mDeviceVersion;
Eino-Ville Talvala8ce89d92012-08-10 08:40:26 -0700171
Eino-Ville Talvala9cca4c62012-06-15 15:41:44 -0700172 // Used with stream IDs
173 static const int NO_STREAM = -1;
174
Igor Murashkindca254a2013-05-13 14:53:44 -0700175 template <typename ProcessorT>
176 status_t updateProcessorStream(sp<ProcessorT> processor, Parameters params);
Igor Murashkin82db9e62013-05-21 11:38:49 -0700177 template <typename ProcessorT,
178 status_t (ProcessorT::*updateStreamF)(const Parameters &)>
179 status_t updateProcessorStream(sp<ProcessorT> processor, Parameters params);
Igor Murashkindca254a2013-05-13 14:53:44 -0700180
Eino-Ville Talvalaa16733e2012-08-27 23:41:56 -0700181 sp<camera2::FrameProcessor> mFrameProcessor;
Eino-Ville Talvala8ce89d92012-08-10 08:40:26 -0700182
Eino-Ville Talvala73bbd1f2012-09-26 10:45:47 -0700183 /* Preview/Recording related members */
Eino-Ville Talvala9cca4c62012-06-15 15:41:44 -0700184
Eino-Ville Talvala9cca4c62012-06-15 15:41:44 -0700185 sp<IBinder> mPreviewSurface;
Eino-Ville Talvala73bbd1f2012-09-26 10:45:47 -0700186 sp<camera2::StreamingProcessor> mStreamingProcessor;
Eino-Ville Talvala9cca4c62012-06-15 15:41:44 -0700187
Eino-Ville Talvala228a5382012-08-13 12:16:06 -0700188 /** Preview callback related members */
189
Eino-Ville Talvalad86a6882012-08-28 11:34:14 -0700190 sp<camera2::CallbackProcessor> mCallbackProcessor;
Eino-Ville Talvala228a5382012-08-13 12:16:06 -0700191
Eino-Ville Talvala9cca4c62012-06-15 15:41:44 -0700192 /* Still image capture related members */
193
Eino-Ville Talvalada6665c2012-08-29 17:37:16 -0700194 sp<camera2::CaptureSequencer> mCaptureSequencer;
195 sp<camera2::JpegProcessor> mJpegProcessor;
Igor Murashkinae500e52013-04-22 14:03:54 -0700196 sp<camera2::ZslProcessorInterface> mZslProcessor;
197 sp<Thread> mZslProcessorThread;
Eino-Ville Talvala9cca4c62012-06-15 15:41:44 -0700198
Eino-Ville Talvala174181e2012-08-03 13:53:39 -0700199 /** Notification-related members */
200
201 bool mAfInMotion;
202
Eino-Ville Talvala9cca4c62012-06-15 15:41:44 -0700203 /** Utility members */
204
Eino-Ville Talvala4865c522012-10-02 13:30:28 -0700205 // Wait until the camera device has received the latest control settings
206 status_t syncWithDevice();
Eino-Ville Talvala61ab9f92012-05-17 10:30:54 -0700207};
208
209}; // namespace android
210
211#endif