1*ec779b8eSAndroid Build Coastguard Worker /* 2*ec779b8eSAndroid Build Coastguard Worker * Copyright 2023 The Android Open Source Project 3*ec779b8eSAndroid Build Coastguard Worker * 4*ec779b8eSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*ec779b8eSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*ec779b8eSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*ec779b8eSAndroid Build Coastguard Worker * 8*ec779b8eSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*ec779b8eSAndroid Build Coastguard Worker * 10*ec779b8eSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*ec779b8eSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*ec779b8eSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*ec779b8eSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*ec779b8eSAndroid Build Coastguard Worker * limitations under the License. 15*ec779b8eSAndroid Build Coastguard Worker */ 16*ec779b8eSAndroid Build Coastguard Worker 17*ec779b8eSAndroid Build Coastguard Worker #ifndef ANDROID_COMPANION_VIRTUALCAMERA_VIRTUALCAMERAPROVIDER_H 18*ec779b8eSAndroid Build Coastguard Worker #define ANDROID_COMPANION_VIRTUALCAMERA_VIRTUALCAMERAPROVIDER_H 19*ec779b8eSAndroid Build Coastguard Worker 20*ec779b8eSAndroid Build Coastguard Worker #include <atomic> 21*ec779b8eSAndroid Build Coastguard Worker #include <map> 22*ec779b8eSAndroid Build Coastguard Worker #include <memory> 23*ec779b8eSAndroid Build Coastguard Worker #include <mutex> 24*ec779b8eSAndroid Build Coastguard Worker 25*ec779b8eSAndroid Build Coastguard Worker #include "VirtualCameraDevice.h" 26*ec779b8eSAndroid Build Coastguard Worker #include "aidl/android/companion/virtualcamera/BnVirtualCameraCallback.h" 27*ec779b8eSAndroid Build Coastguard Worker #include "aidl/android/hardware/camera/common/VendorTagSection.h" 28*ec779b8eSAndroid Build Coastguard Worker #include "aidl/android/hardware/camera/device/ICameraDevice.h" 29*ec779b8eSAndroid Build Coastguard Worker #include "aidl/android/hardware/camera/provider/BnCameraProvider.h" 30*ec779b8eSAndroid Build Coastguard Worker #include "aidl/android/hardware/camera/provider/CameraIdAndStreamCombination.h" 31*ec779b8eSAndroid Build Coastguard Worker #include "aidl/android/hardware/camera/provider/ConcurrentCameraIdCombination.h" 32*ec779b8eSAndroid Build Coastguard Worker #include "aidl/android/hardware/camera/provider/ICameraProviderCallback.h" 33*ec779b8eSAndroid Build Coastguard Worker #include "utils/Mutex.h" 34*ec779b8eSAndroid Build Coastguard Worker 35*ec779b8eSAndroid Build Coastguard Worker namespace android { 36*ec779b8eSAndroid Build Coastguard Worker namespace companion { 37*ec779b8eSAndroid Build Coastguard Worker namespace virtualcamera { 38*ec779b8eSAndroid Build Coastguard Worker 39*ec779b8eSAndroid Build Coastguard Worker // Entry point for virtual camera HAL. 40*ec779b8eSAndroid Build Coastguard Worker // Allows to create and keep track of virtual camera and implements 41*ec779b8eSAndroid Build Coastguard Worker // IAudioProvider AIDL interface to expose virtual camera devices to camera framework. 42*ec779b8eSAndroid Build Coastguard Worker class VirtualCameraProvider 43*ec779b8eSAndroid Build Coastguard Worker : public ::aidl::android::hardware::camera::provider::BnCameraProvider { 44*ec779b8eSAndroid Build Coastguard Worker public: 45*ec779b8eSAndroid Build Coastguard Worker ~VirtualCameraProvider() override = default; 46*ec779b8eSAndroid Build Coastguard Worker 47*ec779b8eSAndroid Build Coastguard Worker ndk::ScopedAStatus setCallback( 48*ec779b8eSAndroid Build Coastguard Worker const std::shared_ptr< 49*ec779b8eSAndroid Build Coastguard Worker ::aidl::android::hardware::camera::provider::ICameraProviderCallback>& 50*ec779b8eSAndroid Build Coastguard Worker in_callback) override; 51*ec779b8eSAndroid Build Coastguard Worker 52*ec779b8eSAndroid Build Coastguard Worker ndk::ScopedAStatus getVendorTags( 53*ec779b8eSAndroid Build Coastguard Worker std::vector<::aidl::android::hardware::camera::common::VendorTagSection>* 54*ec779b8eSAndroid Build Coastguard Worker _aidl_return) override; 55*ec779b8eSAndroid Build Coastguard Worker 56*ec779b8eSAndroid Build Coastguard Worker ndk::ScopedAStatus getCameraIdList( 57*ec779b8eSAndroid Build Coastguard Worker std::vector<std::string>* _aidl_return) override; 58*ec779b8eSAndroid Build Coastguard Worker 59*ec779b8eSAndroid Build Coastguard Worker ndk::ScopedAStatus getCameraDeviceInterface( 60*ec779b8eSAndroid Build Coastguard Worker const std::string& in_cameraDeviceName, 61*ec779b8eSAndroid Build Coastguard Worker std::shared_ptr<::aidl::android::hardware::camera::device::ICameraDevice>* 62*ec779b8eSAndroid Build Coastguard Worker _aidl_return) override; 63*ec779b8eSAndroid Build Coastguard Worker 64*ec779b8eSAndroid Build Coastguard Worker ndk::ScopedAStatus notifyDeviceStateChange(int64_t in_deviceState) override; 65*ec779b8eSAndroid Build Coastguard Worker 66*ec779b8eSAndroid Build Coastguard Worker ndk::ScopedAStatus getConcurrentCameraIds( 67*ec779b8eSAndroid Build Coastguard Worker std::vector<::aidl::android::hardware::camera::provider:: 68*ec779b8eSAndroid Build Coastguard Worker ConcurrentCameraIdCombination>* _aidl_return) override; 69*ec779b8eSAndroid Build Coastguard Worker 70*ec779b8eSAndroid Build Coastguard Worker ndk::ScopedAStatus isConcurrentStreamCombinationSupported( 71*ec779b8eSAndroid Build Coastguard Worker const std::vector<::aidl::android::hardware::camera::provider:: 72*ec779b8eSAndroid Build Coastguard Worker CameraIdAndStreamCombination>& in_configs, 73*ec779b8eSAndroid Build Coastguard Worker bool* _aidl_return) override; 74*ec779b8eSAndroid Build Coastguard Worker 75*ec779b8eSAndroid Build Coastguard Worker // Create new virtual camera devices 76*ec779b8eSAndroid Build Coastguard Worker // Returns nullptr if creation was not successful. 77*ec779b8eSAndroid Build Coastguard Worker std::shared_ptr<VirtualCameraDevice> createCamera( 78*ec779b8eSAndroid Build Coastguard Worker const aidl::android::companion::virtualcamera::VirtualCameraConfiguration& 79*ec779b8eSAndroid Build Coastguard Worker configuration, 80*ec779b8eSAndroid Build Coastguard Worker const std::string& cameraId, int32_t deviceId); 81*ec779b8eSAndroid Build Coastguard Worker 82*ec779b8eSAndroid Build Coastguard Worker std::shared_ptr<VirtualCameraDevice> getCamera(const std::string& name); 83*ec779b8eSAndroid Build Coastguard Worker 84*ec779b8eSAndroid Build Coastguard Worker bool removeCamera(const std::string& name); 85*ec779b8eSAndroid Build Coastguard Worker 86*ec779b8eSAndroid Build Coastguard Worker private: 87*ec779b8eSAndroid Build Coastguard Worker std::mutex mLock; 88*ec779b8eSAndroid Build Coastguard Worker 89*ec779b8eSAndroid Build Coastguard Worker std::shared_ptr< 90*ec779b8eSAndroid Build Coastguard Worker ::aidl::android::hardware::camera::provider::ICameraProviderCallback> 91*ec779b8eSAndroid Build Coastguard Worker mCameraProviderCallback GUARDED_BY(mLock); 92*ec779b8eSAndroid Build Coastguard Worker 93*ec779b8eSAndroid Build Coastguard Worker std::map<std::string, std::shared_ptr<VirtualCameraDevice>> mCameras 94*ec779b8eSAndroid Build Coastguard Worker GUARDED_BY(mLock); 95*ec779b8eSAndroid Build Coastguard Worker }; 96*ec779b8eSAndroid Build Coastguard Worker 97*ec779b8eSAndroid Build Coastguard Worker } // namespace virtualcamera 98*ec779b8eSAndroid Build Coastguard Worker } // namespace companion 99*ec779b8eSAndroid Build Coastguard Worker } // namespace android 100*ec779b8eSAndroid Build Coastguard Worker 101*ec779b8eSAndroid Build Coastguard Worker #endif // ANDROID_COMPANION_VIRTUALCAMERA_VIRTUALCAMERAPROVIDER_H 102