1 /* 2 * Copyright 2018 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 18 #ifndef ANDROID_CAMERATESTHELPERS_H 19 #define ANDROID_CAMERATESTHELPERS_H 20 21 // Must come before NdkCameraCaptureSession.h 22 #include <camera/NdkCaptureRequest.h> 23 24 #include <camera/NdkCameraCaptureSession.h> 25 #include <camera/NdkCameraDevice.h> 26 #include <camera/NdkCameraError.h> 27 #include <camera/NdkCameraManager.h> 28 #include <cstdlib> 29 #include <cstring> 30 #include <jni.h> 31 #include <media/NdkImage.h> 32 #include <media/NdkImageReader.h> 33 34 // A helper class which can be used to initialize/control the camera. 35 class CameraHelper { 36 public: 37 ~CameraHelper(); 38 39 int initCamera(ANativeWindow *imgReaderAnw); 40 bool isCapabilitySupported( 41 acamera_metadata_enum_android_request_available_capabilities_t cap); isCameraReady()42 bool isCameraReady() { return mIsCameraReady; } 43 void closeCamera(); 44 int takePicture(); 45 onDeviceDisconnected(void *,ACameraDevice *)46 static void onDeviceDisconnected(void * /*obj*/, ACameraDevice * /*device*/) { 47 } onDeviceError(void *,ACameraDevice *,int)48 static void onDeviceError(void * /*obj*/, ACameraDevice * /*device*/, 49 int /*errorCode*/) {} onSessionClosed(void *,ACameraCaptureSession *)50 static void onSessionClosed(void * /*obj*/, 51 ACameraCaptureSession * /*session*/) {} onSessionReady(void *,ACameraCaptureSession *)52 static void onSessionReady(void * /*obj*/, 53 ACameraCaptureSession * /*session*/) {} onSessionActive(void *,ACameraCaptureSession *)54 static void onSessionActive(void * /*obj*/, 55 ACameraCaptureSession * /*session*/) {} 56 57 private: 58 ACameraDevice_StateCallbacks mDeviceCb{this, onDeviceDisconnected, 59 onDeviceError}; 60 ACameraCaptureSession_stateCallbacks mSessionCb{ 61 this, onSessionClosed, onSessionReady, onSessionActive}; 62 63 ANativeWindow *mImgReaderAnw{nullptr}; // not owned by us. 64 65 // Camera manager 66 ACameraManager *mCameraManager{nullptr}; 67 ACameraIdList *mCameraIdList{nullptr}; 68 // Camera device 69 ACameraMetadata *mCameraMetadata{nullptr}; 70 ACameraDevice *mDevice{nullptr}; 71 // Capture session 72 ACaptureSessionOutputContainer *mOutputs{nullptr}; 73 ACaptureSessionOutput *mImgReaderOutput{nullptr}; 74 ACameraCaptureSession *mSession{nullptr}; 75 // Capture request 76 ACaptureRequest *mCaptureRequest{nullptr}; 77 ACameraOutputTarget *mReqImgReaderOutput{nullptr}; 78 79 bool mIsCameraReady{false}; 80 const char *mCameraId{nullptr}; 81 }; 82 83 #endif // ANDROID_CAMERATHELPERS_H 84