/* * Copyright (c) 2021-2024 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef OHOS_DCAMERA_SINK_CONTROLLER_H #define OHOS_DCAMERA_SINK_CONTROLLER_H #include "event_handler.h" #include "icamera_controller.h" #include "icamera_channel.h" #include "icamera_operator.h" #include "icamera_sink_access_control.h" #include "icamera_sink_output.h" #include #include #include "device_manager.h" #include "device_manager_callback.h" #include "property_carrier.h" #include "idcamera_sink_callback.h" namespace OHOS { namespace DistributedHardware { constexpr uint32_t EVENT_FRAME_TRIGGER = 1; constexpr uint32_t EVENT_AUTHORIZATION = 2; class DCameraSinkController : public ICameraController, public std::enable_shared_from_this { public: explicit DCameraSinkController(std::shared_ptr& accessControl, const sptr &sinkCallback); ~DCameraSinkController() override; int32_t StartCapture(std::vector>& captureInfos, int32_t sceneMode) override; int32_t StopCapture() override; int32_t ChannelNeg(std::shared_ptr& info) override; int32_t DCameraNotify(std::shared_ptr& events) override; int32_t UpdateSettings(std::vector>& settings) override; int32_t GetCameraInfo(std::shared_ptr& camInfo) override; int32_t OpenChannel(std::shared_ptr& openInfo) override; int32_t CloseChannel() override; int32_t Init(std::vector& indexs) override; int32_t UnInit() override; int32_t PauseDistributedHardware(const std::string &networkId) override; int32_t ResumeDistributedHardware(const std::string &networkId) override; int32_t StopDistributedHardware(const std::string &networkId) override; void OnStateChanged(std::shared_ptr& event); void OnMetadataResult(std::vector>& settings); void OnSessionState(int32_t state); void OnSessionError(int32_t eventType, int32_t eventReason, std::string detail); void OnDataReceived(std::vector>& buffers); class DCameraSinkContrEventHandler : public AppExecFwk::EventHandler { public: DCameraSinkContrEventHandler(const std::shared_ptr &runner, std::shared_ptr sinkContrPtr); ~DCameraSinkContrEventHandler() override = default; void ProcessEvent(const AppExecFwk::InnerEvent::Pointer &event) override; private: std::weak_ptr sinkContrWPtr_; }; private: int32_t StartCaptureInner(std::vector>& captureInfos); int32_t DCameraNotifyInner(int32_t type, int32_t result, std::string content); int32_t HandleReceivedData(std::shared_ptr& dataBuffer); void PostAuthorization(std::vector>& captureInfos); bool CheckDeviceSecurityLevel(const std::string &srcDeviceId, const std::string &dstDeviceId); int32_t GetDeviceSecurityLevel(const std::string &udid); std::string GetUdidByNetworkId(const std::string &networkId); int32_t PullUpPage(); bool CheckPermission(); void ProcessFrameTrigger(const AppExecFwk::InnerEvent::Pointer &event); void ProcessPostAuthorization(const AppExecFwk::InnerEvent::Pointer &event); bool isInit_; int32_t sessionState_; std::mutex autoLock_; std::mutex captureLock_; std::mutex channelLock_; std::string dhId_; std::string srcDevId_; std::shared_ptr sinkCotrEventHandler_; std::shared_ptr channel_; std::shared_ptr operator_; std::shared_ptr accessControl_; std::shared_ptr output_; sptr sinkCallback_; std::atomic isPageStatus_ = false; std::shared_ptr initCallback_; bool isSensitive_ = false; bool isSameAccount_ = false; bool isCheckSecLevel_ = false; int32_t sceneMode_ = 0; const std::string SESSION_FLAG = "control"; const std::string SRC_TYPE = "camera"; const size_t DATABUFF_MAX_SIZE = 100 * 1024 * 1024; }; class DeviceInitCallback : public DmInitCallback { void OnRemoteDied() override; }; } // namespace DistributedHardware } // namespace OHOS #endif // OHOS_DCAMERA_SINK_CONTROLLER_H