1 /* 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 20 #include "CameraService.h" 21 #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/ZslProcessor.h" 28 //#include "api1/client2/CaptureSequencer.h" 29 //#include "api1/client2/CallbackProcessor.h" 30 31 namespace android { 32 33 namespace camera2 { 34 35 class StreamingProcessor; 36 class JpegProcessor; 37 class ZslProcessor; 38 class CaptureSequencer; 39 class CallbackProcessor; 40 41 } 42 43 class IMemory; 44 /** 45 * Interface between android.hardware.Camera API and Camera HAL device for versions 46 * CAMERA_DEVICE_API_VERSION_3_0 and above. 47 */ 48 class Camera2Client : 49 public Camera2ClientBase<CameraService::Client> 50 { 51 public: 52 /** 53 * ICamera interface (see ICamera for details) 54 */ 55 56 virtual binder::Status disconnect(); 57 virtual status_t connect(const sp<hardware::ICameraClient>& client); 58 virtual status_t lock(); 59 virtual status_t unlock(); 60 virtual status_t setPreviewTarget( 61 const sp<IGraphicBufferProducer>& bufferProducer); 62 virtual void setPreviewCallbackFlag(int flag); 63 virtual status_t setPreviewCallbackTarget( 64 const sp<IGraphicBufferProducer>& callbackProducer); 65 66 virtual status_t startPreview(); 67 virtual void stopPreview(); 68 virtual bool previewEnabled(); 69 virtual status_t setVideoBufferMode(int32_t videoBufferMode); 70 virtual status_t startRecording(); 71 virtual void stopRecording(); 72 virtual bool recordingEnabled(); 73 virtual void releaseRecordingFrame(const sp<IMemory>& mem); 74 virtual void releaseRecordingFrameHandle(native_handle_t *handle); 75 virtual void releaseRecordingFrameHandleBatch( 76 const std::vector<native_handle_t*>& handles); 77 virtual status_t autoFocus(); 78 virtual status_t cancelAutoFocus(); 79 virtual status_t takePicture(int msgType); 80 virtual status_t setParameters(const String8& params); 81 virtual String8 getParameters() const; 82 virtual status_t sendCommand(int32_t cmd, int32_t arg1, int32_t arg2); 83 virtual void notifyError(int32_t errorCode, 84 const CaptureResultExtras& resultExtras); 85 virtual status_t setVideoTarget(const sp<IGraphicBufferProducer>& bufferProducer); 86 virtual status_t setAudioRestriction(int mode); 87 virtual int32_t getGlobalAudioRestriction(); 88 virtual status_t setRotateAndCropOverride(uint8_t rotateAndCrop); 89 90 virtual bool supportsCameraMute(); 91 virtual status_t setCameraMute(bool enabled); 92 93 /** 94 * Interface used by CameraService 95 */ 96 97 Camera2Client(const sp<CameraService>& cameraService, 98 const sp<hardware::ICameraClient>& cameraClient, 99 const String16& clientPackageName, 100 const std::optional<String16>& clientFeatureId, 101 const String8& cameraDeviceId, 102 int api1CameraId, 103 int cameraFacing, 104 int sensorOrientation, 105 int clientPid, 106 uid_t clientUid, 107 int servicePid, 108 bool overrideForPerfClass); 109 110 virtual ~Camera2Client(); 111 112 virtual status_t initialize(sp<CameraProviderManager> manager, 113 const String8& monitorTags) override; 114 115 virtual status_t dump(int fd, const Vector<String16>& args); 116 117 virtual status_t dumpClient(int fd, const Vector<String16>& args); 118 119 /** 120 * Interface used by CameraDeviceBase 121 */ 122 123 virtual void notifyAutoFocus(uint8_t newState, int triggerId); 124 virtual void notifyAutoExposure(uint8_t newState, int triggerId); 125 virtual void notifyShutter(const CaptureResultExtras& resultExtras, 126 nsecs_t timestamp); 127 128 /** 129 * Interface used by independent components of Camera2Client. 130 */ 131 132 camera2::SharedParameters& getParameters(); 133 134 void notifyRequestId(int32_t requestId); 135 136 int getPreviewStreamId() const; 137 int getCaptureStreamId() const; 138 int getCallbackStreamId() const; 139 int getRecordingStreamId() const; 140 int getZslStreamId() const; 141 142 status_t registerFrameListener(int32_t minId, int32_t maxId, 143 const wp<camera2::FrameProcessor::FilteredListener>& listener, 144 bool sendPartials = true); 145 status_t removeFrameListener(int32_t minId, int32_t maxId, 146 const wp<camera2::FrameProcessor::FilteredListener>& listener); 147 148 status_t stopStream(); 149 150 // For the slowJpegMode to create jpeg stream when precapture sequence is done 151 status_t createJpegStreamL(camera2::Parameters ¶ms); 152 153 static size_t calculateBufferSize(int width, int height, 154 int format, int stride); 155 156 static const int32_t kPreviewRequestIdStart = 10000000; 157 static const int32_t kPreviewRequestIdEnd = 20000000; 158 159 static const int32_t kRecordingRequestIdStart = 20000000; 160 static const int32_t kRecordingRequestIdEnd = 30000000; 161 162 static const int32_t kCaptureRequestIdStart = 30000000; 163 static const int32_t kCaptureRequestIdEnd = 40000000; 164 165 // Constant strings for ATRACE logging 166 static const char* kAutofocusLabel; 167 static const char* kTakepictureLabel; 168 169 // Used with stream IDs 170 static const int NO_STREAM = -1; 171 172 private: 173 /** ICamera interface-related private members */ 174 typedef camera2::Parameters Parameters; 175 176 status_t setPreviewWindowL(const sp<IBinder>& binder, 177 const sp<Surface>& window); 178 status_t startPreviewL(Parameters ¶ms, bool restart); 179 void stopPreviewL(); 180 status_t startRecordingL(Parameters ¶ms, bool restart); 181 bool recordingEnabledL(); 182 183 // Individual commands for sendCommand() 184 status_t commandStartSmoothZoomL(); 185 status_t commandStopSmoothZoomL(); 186 status_t commandSetDisplayOrientationL(int degrees); 187 status_t commandEnableShutterSoundL(bool enable); 188 status_t commandPlayRecordingSoundL(); 189 status_t commandStartFaceDetectionL(int type); 190 status_t commandStopFaceDetectionL(Parameters ¶ms); 191 status_t commandEnableFocusMoveMsgL(bool enable); 192 status_t commandPingL(); 193 status_t commandSetVideoBufferCountL(size_t count); 194 status_t commandSetVideoFormatL(int format, android_dataspace dataSpace); 195 196 // Current camera device configuration 197 camera2::SharedParameters mParameters; 198 199 /** Camera device-related private members */ 200 201 void setPreviewCallbackFlagL(Parameters ¶ms, int flag); 202 status_t updateRequests(Parameters ¶ms); 203 204 template <typename ProcessorT> 205 status_t updateProcessorStream(sp<ProcessorT> processor, Parameters params); 206 template <typename ProcessorT, 207 status_t (ProcessorT::*updateStreamF)(const Parameters &)> 208 status_t updateProcessorStream(sp<ProcessorT> processor, Parameters params); 209 210 sp<camera2::FrameProcessor> mFrameProcessor; 211 212 /* Preview/Recording related members */ 213 214 sp<IBinder> mPreviewSurface; 215 sp<IBinder> mVideoSurface; 216 sp<camera2::StreamingProcessor> mStreamingProcessor; 217 218 /** Preview callback related members */ 219 220 sp<camera2::CallbackProcessor> mCallbackProcessor; 221 222 /* Still image capture related members */ 223 224 sp<camera2::CaptureSequencer> mCaptureSequencer; 225 sp<camera2::JpegProcessor> mJpegProcessor; 226 sp<camera2::ZslProcessor> mZslProcessor; 227 228 /** Utility members */ 229 bool mLegacyMode; 230 231 // Wait until the camera device has received the latest control settings 232 status_t syncWithDevice(); 233 234 // Video snapshot jpeg size overriding helper function 235 status_t overrideVideoSnapshotSize(Parameters ¶ms); 236 237 template<typename TProviderPtr> 238 status_t initializeImpl(TProviderPtr providerPtr, const String8& monitorTags); 239 240 bool isZslEnabledInStillTemplate(); 241 242 mutable Mutex mLatestRequestMutex; 243 Condition mLatestRequestSignal; 244 int32_t mLatestRequestId = -1; 245 int32_t mLatestFailedRequestId = -1; 246 status_t waitUntilRequestIdApplied(int32_t requestId, nsecs_t timeout); 247 status_t waitUntilCurrentRequestIdLocked(); 248 }; 249 250 }; // namespace android 251 252 #endif 253