1 /* 2 * Copyright (c) 2021-2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef DISTRIBUTED_CAMERA_DEVICE_H 17 #define DISTRIBUTED_CAMERA_DEVICE_H 18 19 #include <atomic> 20 #include <vector> 21 #include <string> 22 #include <sstream> 23 #include "dmetadata_processor.h" 24 #include "dstream_operator.h" 25 26 #include "v1_0/icamera_device.h" 27 #include "v1_3/icamera_device.h" 28 #include "v1_0/icamera_device_callback.h" 29 #include "v1_1/id_camera_provider_callback.h" 30 #include "v1_0/types.h" 31 #include "v1_1/types.h" 32 #include "v1_0/istream_operator_callback.h" 33 #include "v1_2/istream_operator_callback.h" 34 #include "v1_3/istream_operator_callback.h" 35 #include "v1_3/istream_operator.h" 36 37 namespace OHOS { 38 namespace DistributedHardware { 39 using HDI::Camera::V1_3::IStreamOperator; 40 using HDI::Camera::V1_0::ICameraDeviceCallback; 41 class DCameraDevice : public HDI::Camera::V1_3::ICameraDevice { 42 public: 43 DCameraDevice(const DHBase &dhBase, const std::string& sinkAbilityInfo, const std::string& sourceCodecInfo); 44 DCameraDevice() = default; 45 virtual ~DCameraDevice() = default; 46 DCameraDevice(const DCameraDevice &other) = delete; 47 DCameraDevice(DCameraDevice &&other) = delete; 48 DCameraDevice& operator=(const DCameraDevice &other) = delete; 49 DCameraDevice& operator=(DCameraDevice &&other) = delete; 50 51 public: 52 int32_t GetStreamOperator_V1_3(const sptr<HDI::Camera::V1_3::IStreamOperatorCallback> &callbackObj, 53 sptr<HDI::Camera::V1_3::IStreamOperator> &streamOperator) override; 54 int32_t GetSecureCameraSeq(uint64_t &seqId) override; 55 56 int32_t GetStreamOperator_V1_2(const sptr<HDI::Camera::V1_2::IStreamOperatorCallback> &callbackObj, 57 sptr<HDI::Camera::V1_2::IStreamOperator> &streamOperator) override; 58 int32_t GetStatus(const std::vector<uint8_t> &metaIn, std::vector<uint8_t> &metaOut) override; 59 int32_t Reset() override; 60 61 int32_t GetStreamOperator_V1_1(const sptr<HDI::Camera::V1_0::IStreamOperatorCallback> &callbackObj, 62 sptr<HDI::Camera::V1_1::IStreamOperator> &streamOperator) override; 63 int32_t GetDefaultSettings(std::vector<uint8_t> &settings) override; 64 65 int32_t GetStreamOperator(const sptr<HDI::Camera::V1_0::IStreamOperatorCallback> &callbackObj, 66 sptr<HDI::Camera::V1_0::IStreamOperator> &streamOperator) override; 67 int32_t UpdateSettings(const std::vector<uint8_t> &settings) override; 68 int32_t SetResultMode(ResultCallbackMode mode) override; 69 int32_t GetEnabledResults(std::vector<int32_t> &results) override; 70 int32_t EnableResult(const std::vector<int32_t> &results) override; 71 int32_t DisableResult(const std::vector<int32_t> &results) override; 72 int32_t Close() override; 73 74 int32_t GetSettings(std::vector<uint8_t> &settings); 75 CamRetCode OpenDCamera(const OHOS::sptr<ICameraDeviceCallback> &callback); 76 CamRetCode GetDCameraAbility(std::shared_ptr<CameraAbility> &ability); 77 DCamRetCode AcquireBuffer(int streamId, DCameraBuffer &buffer); 78 DCamRetCode ShutterBuffer(int streamId, const DCameraBuffer &buffer); 79 DCamRetCode OnSettingsResult(const std::shared_ptr<DCameraSettings> &result); 80 DCamRetCode Notify(const std::shared_ptr<DCameraHDFEvent> &event); 81 void SetProviderCallback(const OHOS::sptr<IDCameraProviderCallback> &callback); 82 OHOS::sptr<IDCameraProviderCallback> GetProviderCallback(); 83 std::string GetDCameraId(); 84 bool IsOpened(); 85 void SetDcameraAbility(const std::string& sinkAbilityInfo); 86 87 private: 88 void Init(const std::string &sinkAbilityInfo); 89 DCamRetCode CreateDStreamOperator(); 90 std::string GenerateCameraId(const DHBase &dhBase); 91 void NotifyStartCaptureError(); 92 void NotifyCameraError(const ErrorType type); 93 void IsOpenSessFailedState(bool state); 94 CamRetCode TriggerGetFullCaps(); 95 void SetRefreshFlag(bool flag); 96 bool GetRefreshFlag(); 97 private: 98 bool isOpened_; 99 std::string dCameraId_; 100 DHBase dhBase_; 101 std::string dCameraAbilityInfo_; 102 std::string sourceCodecInfo_; 103 OHOS::sptr<ICameraDeviceCallback> dCameraDeviceCallback_; 104 OHOS::sptr<IDCameraProviderCallback> dCameraProviderCallback_; 105 OHOS::sptr<DStreamOperator> dCameraStreamOperator_; 106 std::shared_ptr<DMetadataProcessor> dMetadataProcessor_; 107 108 std::mutex openSesslock_; 109 std::condition_variable openSessCV_; 110 bool isOpenSessFailed_ = false; 111 std::mutex isOpenSessFailedlock_; 112 std::mutex getFullLock_; 113 std::condition_variable getFullWaitCond_; 114 std::atomic<bool> refreshFlag_ = false; 115 }; 116 } // namespace DistributedHardware 117 } // namespace OHOS 118 #endif // DISTRIBUTED_CAMERA_DEVICE_H 119