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 #include "dcamera_source_dev.h"
17
18 #include "anonymous_string.h"
19 #include "dcamera_hisysevent_adapter.h"
20 #include "dcamera_hitrace_adapter.h"
21 #include "distributed_camera_constants.h"
22 #include "distributed_camera_errno.h"
23 #include "distributed_hardware_log.h"
24
25 #include "dcamera_channel_info_cmd.h"
26 #include "dcamera_info_cmd.h"
27 #include "dcamera_provider_callback_impl.h"
28 #include "dcamera_source_controller.h"
29 #include "dcamera_source_input.h"
30 #include "dcamera_utils_tools.h"
31
32 namespace OHOS {
33 namespace DistributedHardware {
DCameraSourceDev(std::string devId,std::string dhId,std::shared_ptr<ICameraStateListener> & stateLisener)34 DCameraSourceDev::DCameraSourceDev(std::string devId, std::string dhId,
35 std::shared_ptr<ICameraStateListener>& stateLisener) : devId_(devId), dhId_(dhId), stateListener_(stateLisener)
36 {
37 DHLOGI("DCameraSourceDev Construct devId %{public}s dhId %{public}s", GetAnonyString(devId_).c_str(),
38 GetAnonyString(dhId_).c_str());
39 memberFuncMap_[DCAMERA_EVENT_REGIST] = &DCameraSourceDev::NotifyRegisterResult;
40 memberFuncMap_[DCAMERA_EVENT_UNREGIST] = &DCameraSourceDev::NotifyRegisterResult;
41 memberFuncMap_[DCAMERA_EVENT_OPEN] = &DCameraSourceDev::NotifyHalResult;
42 memberFuncMap_[DCAMERA_EVENT_CLOSE] = &DCameraSourceDev::NotifyHalResult;
43 memberFuncMap_[DCAMERA_EVENT_CONFIG_STREAMS] = &DCameraSourceDev::NotifyHalResult;
44 memberFuncMap_[DCAMERA_EVENT_RELEASE_STREAMS] = &DCameraSourceDev::NotifyHalResult;
45 memberFuncMap_[DCAMERA_EVENT_START_CAPTURE] = &DCameraSourceDev::NotifyHalResult;
46 memberFuncMap_[DCAMERA_EVENT_STOP_CAPTURE] = &DCameraSourceDev::NotifyHalResult;
47 memberFuncMap_[DCAMERA_EVENT_UPDATE_SETTINGS] = &DCameraSourceDev::NotifyHalResult;
48
49 eventResultMap_[DCAMERA_EVENT_OPEN] = DCAMERA_EVENT_OPEN_CHANNEL_ERROR;
50 eventResultMap_[DCAMERA_EVENT_CLOSE] = DCAMERA_EVENT_CLOSE_CHANNEL_ERROR;
51 eventResultMap_[DCAMERA_EVENT_CONFIG_STREAMS] = DCAMERA_EVENT_CONFIG_STREAMS_ERROR;
52 eventResultMap_[DCAMERA_EVENT_RELEASE_STREAMS] = DCAMERA_EVENT_RELEASE_STREAMS_ERROR;
53 eventResultMap_[DCAMERA_EVENT_START_CAPTURE] = DCAMERA_EVENT_START_CAPTURE_ERROR;
54 eventResultMap_[DCAMERA_EVENT_STOP_CAPTURE] = DCAMERA_EVENT_STOP_CAPTURE_ERROR;
55 eventResultMap_[DCAMERA_EVENT_UPDATE_SETTINGS] = DCAMERA_EVENT_UPDATE_SETTINGS_ERROR;
56 }
57
~DCameraSourceDev()58 DCameraSourceDev::~DCameraSourceDev()
59 {
60 DHLOGI("DCameraSourceDev Delete devId %{public}s dhId %{public}s", GetAnonyString(devId_).c_str(),
61 GetAnonyString(dhId_).c_str());
62 srcDevEventHandler_ = nullptr;
63 hdiCallback_ = nullptr;
64 input_ = nullptr;
65 controller_ = nullptr;
66 stateMachine_ = nullptr;
67 stateListener_ = nullptr;
68
69 eventResultMap_.clear();
70 memberFuncMap_.clear();
71 DHLOGI("DCameraSourceDev Delete devId %{public}s dhId %{public}s end", GetAnonyString(devId_).c_str(),
72 GetAnonyString(dhId_).c_str());
73 }
74
InitDCameraSourceDev()75 int32_t DCameraSourceDev::InitDCameraSourceDev()
76 {
77 DHLOGI("DCameraSourceDev InitDCameraSourceDev devId %{public}s dhId %{public}s", GetAnonyString(devId_).c_str(),
78 GetAnonyString(dhId_).c_str());
79 std::shared_ptr<AppExecFwk::EventRunner> runner = AppExecFwk::EventRunner::Create(true);
80 srcDevEventHandler_ = std::make_shared<DCameraSourceDev::DCameraSourceDevEventHandler>(
81 runner, shared_from_this());
82 auto cameraSourceDev = std::shared_ptr<DCameraSourceDev>(shared_from_this());
83 stateMachine_ = std::make_shared<DCameraSourceStateMachine>(cameraSourceDev);
84 stateMachine_->UpdateState(DCAMERA_STATE_INIT);
85 controller_ = std::make_shared<DCameraSourceController>(devId_, dhId_, stateMachine_, cameraSourceDev);
86 input_ = std::make_shared<DCameraSourceInput>(devId_, dhId_, cameraSourceDev);
87 hdiCallback_ = sptr<DCameraProviderCallbackImpl>(
88 new (std::nothrow) DCameraProviderCallbackImpl(devId_, dhId_, cameraSourceDev));
89 if (hdiCallback_ == nullptr) {
90 DHLOGE("DCameraSourceDev InitDCameraSourceDev failed, hdiCallback is null.");
91 return DCAMERA_BAD_VALUE;
92 }
93 DHLOGI("DCameraSourceDev InitDCameraSourceDev end devId %{public}s dhId %{public}s",
94 GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
95 return DCAMERA_OK;
96 }
97
RegisterDistributedHardware(const std::string & devId,const std::string & dhId,const std::string & reqId,const EnableParam & param)98 int32_t DCameraSourceDev::RegisterDistributedHardware(const std::string& devId, const std::string& dhId,
99 const std::string& reqId, const EnableParam& param)
100 {
101 DHLOGI("DCameraSourceDev PostTask RegisterDistributedHardware devId %{public}s dhId %{public}s",
102 GetAnonyString(devId).c_str(), GetAnonyString(dhId).c_str());
103 version_ = param.sinkVersion;
104 DCameraIndex index(devId, dhId);
105 actualDevInfo_.insert(index);
106
107 std::shared_ptr<DCameraRegistParam> regParam = std::make_shared<DCameraRegistParam>(devId, dhId, reqId,
108 param.sinkAttrs, param.sourceAttrs);
109 DCameraSourceEvent event(DCAMERA_EVENT_REGIST, regParam);
110 std::shared_ptr<DCameraSourceEvent> eventParam = std::make_shared<DCameraSourceEvent>(event);
111 CHECK_AND_RETURN_RET_LOG(srcDevEventHandler_ == nullptr, DCAMERA_BAD_VALUE, "srcDevEventHandler_ is nullptr.");
112 AppExecFwk::InnerEvent::Pointer msgEvent =
113 AppExecFwk::InnerEvent::Get(EVENT_SOURCE_DEV_PROCESS, eventParam, 0);
114 srcDevEventHandler_->SendEvent(msgEvent, 0, AppExecFwk::EventQueue::Priority::IMMEDIATE);
115 return DCAMERA_OK;
116 }
117
UnRegisterDistributedHardware(const std::string devId,const std::string dhId,const std::string reqId)118 int32_t DCameraSourceDev::UnRegisterDistributedHardware(const std::string devId, const std::string dhId,
119 const std::string reqId)
120 {
121 DHLOGI("DCameraSourceDev PostTask UnRegisterDistributedHardware devId %{public}s dhId %{public}s",
122 GetAnonyString(devId).c_str(), GetAnonyString(dhId).c_str());
123 std::string sinkAttrs;
124 std::string sourceAttrs;
125 std::shared_ptr<DCameraRegistParam> regParam = std::make_shared<DCameraRegistParam>(devId, dhId, reqId, sinkAttrs,
126 sourceAttrs);
127 DCameraSourceEvent event(DCAMERA_EVENT_UNREGIST, regParam);
128 std::shared_ptr<DCameraSourceEvent> eventParam = std::make_shared<DCameraSourceEvent>(event);
129 CHECK_AND_RETURN_RET_LOG(srcDevEventHandler_ == nullptr, DCAMERA_BAD_VALUE, "srcDevEventHandler_ is nullptr.");
130 AppExecFwk::InnerEvent::Pointer msgEvent =
131 AppExecFwk::InnerEvent::Get(EVENT_SOURCE_DEV_PROCESS, eventParam, 0);
132 srcDevEventHandler_->SendEvent(msgEvent, 0, AppExecFwk::EventQueue::Priority::IMMEDIATE);
133 return DCAMERA_OK;
134 }
135
DCameraNotify(std::string & eventStr)136 int32_t DCameraSourceDev::DCameraNotify(std::string& eventStr)
137 {
138 DHLOGI("DCameraSourceDev PostTask DCameraNotify devId %{public}s dhId %{public}s", GetAnonyString(devId_).c_str(),
139 GetAnonyString(dhId_).c_str());
140 DCameraEventCmd cmd;
141 int32_t ret = cmd.Unmarshal(eventStr);
142 if (ret != DCAMERA_OK) {
143 DHLOGE("DCameraSourceDev DCameraNotify devId %{public}s dhId %{public}s marshal failed, ret: %{public}d",
144 GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str(), ret);
145 return ret;
146 }
147
148 DCameraSourceEvent event(DCAMERA_EVENT_NOFIFY, cmd.value_);
149 std::shared_ptr<DCameraSourceEvent> eventParam = std::make_shared<DCameraSourceEvent>(event);
150 CHECK_AND_RETURN_RET_LOG(srcDevEventHandler_ == nullptr, DCAMERA_BAD_VALUE, "srcDevEventHandler_ is nullptr.");
151 AppExecFwk::InnerEvent::Pointer msgEvent =
152 AppExecFwk::InnerEvent::Get(EVENT_SOURCE_DEV_PROCESS, eventParam, 0);
153 srcDevEventHandler_->SendEvent(msgEvent, 0, AppExecFwk::EventQueue::Priority::IMMEDIATE);
154 return DCAMERA_OK;
155 }
156
OpenSession(DCameraIndex & camIndex)157 int32_t DCameraSourceDev::OpenSession(DCameraIndex& camIndex)
158 {
159 DHLOGI("DCameraSourceDev PostTask OpenSession devId %{public}s dhId %{public}s", GetAnonyString(devId_).c_str(),
160 GetAnonyString(dhId_).c_str());
161 DCameraSourceEvent event(DCAMERA_EVENT_OPEN, camIndex);
162 std::shared_ptr<DCameraSourceEvent> eventParam = std::make_shared<DCameraSourceEvent>(event);
163 CHECK_AND_RETURN_RET_LOG(srcDevEventHandler_ == nullptr, DCAMERA_BAD_VALUE, "srcDevEventHandler_ is nullptr.");
164 AppExecFwk::InnerEvent::Pointer msgEvent =
165 AppExecFwk::InnerEvent::Get(EVENT_SOURCE_DEV_PROCESS, eventParam, 0);
166 srcDevEventHandler_->SendEvent(msgEvent, 0, AppExecFwk::EventQueue::Priority::IMMEDIATE);
167 return DCAMERA_OK;
168 }
169
CloseSession(DCameraIndex & camIndex)170 int32_t DCameraSourceDev::CloseSession(DCameraIndex& camIndex)
171 {
172 DHLOGI("DCameraSourceDev PostTask CloseSession devId %{public}s dhId %{public}s", GetAnonyString(devId_).c_str(),
173 GetAnonyString(dhId_).c_str());
174 DCameraSourceEvent event(DCAMERA_EVENT_CLOSE, camIndex);
175 std::shared_ptr<DCameraSourceEvent> eventParam = std::make_shared<DCameraSourceEvent>(event);
176 CHECK_AND_RETURN_RET_LOG(srcDevEventHandler_ == nullptr, DCAMERA_BAD_VALUE, "srcDevEventHandler_ is nullptr.");
177 AppExecFwk::InnerEvent::Pointer msgEvent =
178 AppExecFwk::InnerEvent::Get(EVENT_SOURCE_DEV_PROCESS, eventParam, 0);
179 srcDevEventHandler_->SendEvent(msgEvent, 0, AppExecFwk::EventQueue::Priority::IMMEDIATE);
180 return DCAMERA_OK;
181 }
182
ConfigCameraStreams(const std::vector<std::shared_ptr<DCStreamInfo>> & streamInfos)183 int32_t DCameraSourceDev::ConfigCameraStreams(const std::vector<std::shared_ptr<DCStreamInfo>>& streamInfos)
184 {
185 DHLOGI("DCameraSourceDev PostTask ConfigStreams devId %{public}s dhId %{public}s", GetAnonyString(devId_).c_str(),
186 GetAnonyString(dhId_).c_str());
187 DCameraSourceEvent event(DCAMERA_EVENT_CONFIG_STREAMS, streamInfos);
188 std::shared_ptr<DCameraSourceEvent> eventParam = std::make_shared<DCameraSourceEvent>(event);
189 CHECK_AND_RETURN_RET_LOG(srcDevEventHandler_ == nullptr, DCAMERA_BAD_VALUE, "srcDevEventHandler_ is nullptr.");
190 AppExecFwk::InnerEvent::Pointer msgEvent =
191 AppExecFwk::InnerEvent::Get(EVENT_SOURCE_DEV_PROCESS, eventParam, 0);
192 srcDevEventHandler_->SendEvent(msgEvent, 0, AppExecFwk::EventQueue::Priority::IMMEDIATE);
193 return DCAMERA_OK;
194 }
195
ReleaseCameraStreams(const std::vector<int> & streamIds)196 int32_t DCameraSourceDev::ReleaseCameraStreams(const std::vector<int>& streamIds)
197 {
198 DHLOGI("DCameraSourceDev PostTask ReleaseStreams devId %{public}s dhId %{public}s", GetAnonyString(devId_).c_str(),
199 GetAnonyString(dhId_).c_str());
200 DCameraSourceEvent event(DCAMERA_EVENT_RELEASE_STREAMS, streamIds);
201 std::shared_ptr<DCameraSourceEvent> eventParam = std::make_shared<DCameraSourceEvent>(event);
202 CHECK_AND_RETURN_RET_LOG(srcDevEventHandler_ == nullptr, DCAMERA_BAD_VALUE, "srcDevEventHandler_ is nullptr.");
203 AppExecFwk::InnerEvent::Pointer msgEvent =
204 AppExecFwk::InnerEvent::Get(EVENT_SOURCE_DEV_PROCESS, eventParam, 0);
205 srcDevEventHandler_->SendEvent(msgEvent, 0, AppExecFwk::EventQueue::Priority::IMMEDIATE);
206 return DCAMERA_OK;
207 }
208
StartCameraCapture(const std::vector<std::shared_ptr<DCCaptureInfo>> & captureInfos)209 int32_t DCameraSourceDev::StartCameraCapture(const std::vector<std::shared_ptr<DCCaptureInfo>>& captureInfos)
210 {
211 DHLOGI("DCameraSourceDev PostTask StartCapture devId %{public}s dhId %{public}s", GetAnonyString(devId_).c_str(),
212 GetAnonyString(dhId_).c_str());
213 DCameraSourceEvent event(DCAMERA_EVENT_START_CAPTURE, captureInfos);
214 std::shared_ptr<DCameraSourceEvent> eventParam = std::make_shared<DCameraSourceEvent>(event);
215 CHECK_AND_RETURN_RET_LOG(srcDevEventHandler_ == nullptr, DCAMERA_BAD_VALUE, "srcDevEventHandler_ is nullptr.");
216 AppExecFwk::InnerEvent::Pointer msgEvent =
217 AppExecFwk::InnerEvent::Get(EVENT_SOURCE_DEV_PROCESS, eventParam, 0);
218 srcDevEventHandler_->SendEvent(msgEvent, 0, AppExecFwk::EventQueue::Priority::IMMEDIATE);
219 return DCAMERA_OK;
220 }
221
StopCameraCapture(const std::vector<int> & streamIds)222 int32_t DCameraSourceDev::StopCameraCapture(const std::vector<int>& streamIds)
223 {
224 DHLOGI("DCameraSourceDev PostTask StopCapture devId %{public}s dhId %{public}s", GetAnonyString(devId_).c_str(),
225 GetAnonyString(dhId_).c_str());
226 DCameraSourceEvent event(DCAMERA_EVENT_STOP_CAPTURE, streamIds);
227 std::shared_ptr<DCameraSourceEvent> eventParam = std::make_shared<DCameraSourceEvent>(event);
228 CHECK_AND_RETURN_RET_LOG(srcDevEventHandler_ == nullptr, DCAMERA_BAD_VALUE, "srcDevEventHandler_ is nullptr.");
229 AppExecFwk::InnerEvent::Pointer msgEvent =
230 AppExecFwk::InnerEvent::Get(EVENT_SOURCE_DEV_PROCESS, eventParam, 0);
231 srcDevEventHandler_->SendEvent(msgEvent, 0, AppExecFwk::EventQueue::Priority::IMMEDIATE);
232 return DCAMERA_OK;
233 }
234
UpdateCameraSettings(const std::vector<std::shared_ptr<DCameraSettings>> & settings)235 int32_t DCameraSourceDev::UpdateCameraSettings(const std::vector<std::shared_ptr<DCameraSettings>>& settings)
236 {
237 DHLOGI("DCameraSourceDev PostTask UpdateCameraSettings devId %{public}s dhId %{public}s",
238 GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
239 DCameraSourceEvent event(DCAMERA_EVENT_UPDATE_SETTINGS, settings);
240 std::shared_ptr<DCameraSourceEvent> eventParam = std::make_shared<DCameraSourceEvent>(event);
241 CHECK_AND_RETURN_RET_LOG(srcDevEventHandler_ == nullptr, DCAMERA_BAD_VALUE, "srcDevEventHandler_ is nullptr.");
242 AppExecFwk::InnerEvent::Pointer msgEvent =
243 AppExecFwk::InnerEvent::Get(EVENT_SOURCE_DEV_PROCESS, eventParam, 0);
244 srcDevEventHandler_->SendEvent(msgEvent, 0, AppExecFwk::EventQueue::Priority::IMMEDIATE);
245 return DCAMERA_OK;
246 }
247
ProcessHDFEvent(const DCameraHDFEvent & event)248 int32_t DCameraSourceDev::ProcessHDFEvent(const DCameraHDFEvent& event)
249 {
250 DHLOGI("DCameraSourceDev ProcessHDFEvent devId %{public}s dhId %{public}s event_type %{public}d",
251 GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str(), event.type_);
252 std::shared_ptr<DCameraSourceEvent> eventParam = std::make_shared<DCameraSourceEvent>(DCAMERA_EVENT_GET_FULLCAPS);
253 CHECK_AND_RETURN_RET_LOG(srcDevEventHandler_ == nullptr, DCAMERA_BAD_VALUE, "srcDevEventHandler_ is nullptr.");
254 AppExecFwk::InnerEvent::Pointer msgEvent =
255 AppExecFwk::InnerEvent::Get(EVENT_PROCESS_HDF_NOTIFY, eventParam, 0);
256 srcDevEventHandler_->SendEvent(msgEvent, 0, AppExecFwk::EventQueue::Priority::IMMEDIATE);
257 return DCAMERA_OK;
258 }
259
GetFullCaps()260 int32_t DCameraSourceDev::GetFullCaps()
261 {
262 DHLOGI("DCameraSourceDev GetFullCaps enter.");
263 if (stateListener_ == nullptr) {
264 DHLOGE("DCameraSourceDev DoSyncTrigger, stateListener_ is nullptr.");
265 return DCAMERA_BAD_VALUE;
266 }
267 stateListener_->OnDataSyncTrigger(devId_);
268 return DCAMERA_OK;
269 }
270
DoHicollieProcess()271 void DCameraSourceDev::DoHicollieProcess()
272 {
273 SetHicollieFlag(true);
274 }
275
DoProcessData(const AppExecFwk::InnerEvent::Pointer & event)276 void DCameraSourceDev::DoProcessData(const AppExecFwk::InnerEvent::Pointer &event)
277 {
278 std::shared_ptr<DCameraSourceEvent> eventParam = event->GetSharedObject<DCameraSourceEvent>();
279 CHECK_AND_RETURN_LOG(eventParam == nullptr, "eventParam is nullptr.");
280 CHECK_AND_RETURN_LOG(stateMachine_ == nullptr, "stateMachine_ is nullptr.");
281 int32_t ret = stateMachine_->Execute((*eventParam).GetEventType(), (*eventParam));
282 if (ret != DCAMERA_OK) {
283 DHLOGE("DCameraSourceDev Execute failed, ret: %{public}d, devId: %{public}s dhId: %{public}s", ret,
284 GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
285 }
286 NotifyResult((*eventParam).GetEventType(), (*eventParam), ret);
287 }
288
DoProcesHDFEvent(const AppExecFwk::InnerEvent::Pointer & event)289 void DCameraSourceDev::DoProcesHDFEvent(const AppExecFwk::InnerEvent::Pointer &event)
290 {
291 std::shared_ptr<DCameraSourceEvent> eventParam = event->GetSharedObject<DCameraSourceEvent>();
292 CHECK_AND_RETURN_LOG(eventParam == nullptr, "eventParam is nullptr.");
293 CHECK_AND_RETURN_LOG(stateMachine_ == nullptr, "stateMachine_ is nullptr.");
294 int32_t ret = stateMachine_->Execute((*eventParam).GetEventType(), (*eventParam));
295 if (ret != DCAMERA_OK) {
296 DHLOGE("DCameraSourceDev Execute failed, ret: %{public}d, devId: %{public}s dhId: %{public}s", ret,
297 GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
298 }
299 }
300
DCameraSourceDevEventHandler(const std::shared_ptr<AppExecFwk::EventRunner> & runner,std::shared_ptr<DCameraSourceDev> srcDevPtr)301 DCameraSourceDev::DCameraSourceDevEventHandler::DCameraSourceDevEventHandler(
302 const std::shared_ptr<AppExecFwk::EventRunner> &runner, std::shared_ptr<DCameraSourceDev> srcDevPtr)
303 : AppExecFwk::EventHandler(runner), srcDevPtrWPtr_(srcDevPtr)
304 {
305 DHLOGI("Ctor DCameraSourceDevEventHandler.");
306 }
307
ProcessEvent(const AppExecFwk::InnerEvent::Pointer & event)308 void DCameraSourceDev::DCameraSourceDevEventHandler::ProcessEvent(const AppExecFwk::InnerEvent::Pointer &event)
309 {
310 CHECK_AND_RETURN_LOG(event == nullptr, "event is nullptr.");
311 uint32_t eventId = event->GetInnerEventId();
312 auto srcDevPtr = srcDevPtrWPtr_.lock();
313 if (srcDevPtr == nullptr) {
314 DHLOGE("Can not get strong self ptr");
315 return;
316 }
317 switch (eventId) {
318 case EVENT_HICOLLIE:
319 srcDevPtr->DoHicollieProcess();
320 break;
321 case EVENT_SOURCE_DEV_PROCESS:
322 srcDevPtr->DoProcessData(event);
323 break;
324 case EVENT_PROCESS_HDF_NOTIFY:
325 srcDevPtr->DoProcesHDFEvent(event);
326 break;
327 default:
328 DHLOGE("event is undefined, id is %d", eventId);
329 break;
330 }
331 }
332
Register(std::shared_ptr<DCameraRegistParam> & param)333 int32_t DCameraSourceDev::Register(std::shared_ptr<DCameraRegistParam>& param)
334 {
335 DCAMERA_SYNC_TRACE(DCAMERA_REGISTER_CAMERA);
336 DHLOGI("DCameraSourceDev Execute Register devId: %{public}s dhId: %{public}s",
337 GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
338 ReportRegisterCameraEvent(REGIST_CAMERA_EVENT, GetAnonyString(devId_), dhId_,
339 version_, "execute register event.");
340 std::vector<DCameraIndex> actualDevInfo;
341 actualDevInfo.assign(actualDevInfo_.begin(), actualDevInfo_.end());
342 int32_t ret = controller_->Init(actualDevInfo);
343 if (ret != DCAMERA_OK) {
344 DHLOGE("DCameraSourceDev Execute Register controller init failed, ret: %{public}d, devId: %{public}s dhId: "
345 "%{public}s", ret, GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
346 return ret;
347 }
348
349 ret = input_->Init();
350 if (ret != DCAMERA_OK) {
351 DHLOGE("DCameraSourceDev Execute Register input init failed, ret: %{public}d, devId: %{public}s dhId: "
352 "%{public}s", ret, GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
353 controller_->UnInit();
354 return ret;
355 }
356
357 sptr<IDCameraProvider> camHdiProvider = IDCameraProvider::Get(HDF_DCAMERA_EXT_SERVICE);
358 if (camHdiProvider == nullptr) {
359 DHLOGI("Register camHdiProvider is nullptr devId: %{public}s dhId: %{public}s", GetAnonyString(devId_).c_str(),
360 GetAnonyString(dhId_).c_str());
361 controller_->UnInit();
362 input_->UnInit();
363 return DCAMERA_BAD_OPERATE;
364 }
365 DHBase dhBase;
366 dhBase.deviceId_ = param->devId_;
367 dhBase.dhId_ = param->dhId_;
368 std::string ability;
369 ret = ParseEnableParam(param, ability);
370 if (ret != DCAMERA_OK) {
371 DHLOGE("Parsing param failed.");
372 }
373 int32_t retHdi = camHdiProvider->EnableDCameraDevice(dhBase, ability, hdiCallback_);
374 DHLOGI("DCameraSourceDev Execute Register register hal, ret: %{public}d, devId: %{public}s dhId: %{public}s",
375 retHdi, GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
376 if (retHdi != SUCCESS) {
377 controller_->UnInit();
378 input_->UnInit();
379 return DCAMERA_REGIST_HAL_FAILED;
380 }
381 return DCAMERA_OK;
382 }
383
ParseEnableParam(std::shared_ptr<DCameraRegistParam> & param,std::string & ability)384 int32_t DCameraSourceDev::ParseEnableParam(std::shared_ptr<DCameraRegistParam>& param, std::string& ability)
385 {
386 cJSON *sinkRootValue = cJSON_Parse(param->sinkParam_.c_str());
387 if (sinkRootValue == nullptr) {
388 DHLOGE("Input sink ablity info is not json object.");
389 return DCAMERA_INIT_ERR;
390 }
391
392 cJSON *srcRootValue = cJSON_Parse(param->srcParam_.c_str());
393 if (srcRootValue == nullptr) {
394 DHLOGE("Input source ablity info is not json object.");
395 cJSON_Delete(sinkRootValue);
396 return DCAMERA_INIT_ERR;
397 }
398
399 cJSON *abilityRootValue = cJSON_CreateObject();
400 if (abilityRootValue == nullptr) {
401 cJSON_Delete(sinkRootValue);
402 cJSON_Delete(srcRootValue);
403 return DCAMERA_BAD_VALUE;
404 }
405 cJSON_AddItemToObject(abilityRootValue, "SinkAbility", sinkRootValue);
406 cJSON_AddItemToObject(abilityRootValue, "SourceCodec", srcRootValue);
407 char *jsonstr = cJSON_Print(abilityRootValue);
408 if (jsonstr == nullptr) {
409 cJSON_Delete(abilityRootValue);
410 return DCAMERA_BAD_VALUE;
411 }
412 ability = jsonstr;
413 cJSON_Delete(abilityRootValue);
414 cJSON_free(jsonstr);
415 return DCAMERA_OK;
416 }
417
UnRegister(std::shared_ptr<DCameraRegistParam> & param)418 int32_t DCameraSourceDev::UnRegister(std::shared_ptr<DCameraRegistParam>& param)
419 {
420 DCAMERA_SYNC_TRACE(DCAMERA_UNREGISTER_CAMERA);
421 DHLOGI("DCameraSourceDev Execute UnRegister devId: %{public}s dhId: %{public}s", GetAnonyString(devId_).c_str(),
422 GetAnonyString(dhId_).c_str());
423 ReportRegisterCameraEvent(UNREGIST_CAMERA_EVENT, GetAnonyString(devId_), dhId_,
424 version_, "execute unregister event.");
425 int32_t ret = controller_->UnInit();
426 if (ret != DCAMERA_OK) {
427 DHLOGE("DCameraSourceDev Execute UnRegister controller uninit failed, ret: %{public}d, devId: %{public}s "
428 "dhId: %{public}s", ret, GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
429 }
430
431 ret = input_->UnInit();
432 if (ret != DCAMERA_OK) {
433 DHLOGE("DCameraSourceDev Execute UnRegister input uninit failed, ret: %{public}d, devId: %{public}s dhId: "
434 "%{public}s", ret, GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
435 }
436
437 sptr<IDCameraProvider> camHdiProvider = IDCameraProvider::Get(HDF_DCAMERA_EXT_SERVICE);
438 if (camHdiProvider == nullptr) {
439 DHLOGI("UnRegister camHdiProvider is nullptr devId: %{public}s dhId: %{public}s",
440 GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
441 return DCAMERA_BAD_OPERATE;
442 }
443
444 DHBase dhBase;
445 dhBase.deviceId_ = param->devId_;
446 dhBase.dhId_ = param->dhId_;
447 int32_t retHdi = camHdiProvider->DisableDCameraDevice(dhBase);
448 DHLOGI("DCameraSourceDev Execute UnRegister unregister hal, ret: %{public}d, devId: %{public}s dhId: %{public}s",
449 retHdi, GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
450 if (retHdi != SUCCESS) {
451 return DCAMERA_UNREGIST_HAL_FAILED;
452 }
453 return DCAMERA_OK;
454 }
455
OpenCamera()456 int32_t DCameraSourceDev::OpenCamera()
457 {
458 DHLOGI("DCameraSourceDev Execute OpenCamera devId %{public}s dhId %{public}s", GetAnonyString(devId_).c_str(),
459 GetAnonyString(dhId_).c_str());
460 ReportCameraOperaterEvent(OPEN_CAMERA_EVENT, GetAnonyString(devId_), dhId_, "execute open camera event.");
461 std::shared_ptr<DCameraOpenInfo> openInfo = std::make_shared<DCameraOpenInfo>();
462 int32_t ret = GetLocalDeviceNetworkId(openInfo->sourceDevId_);
463 if (ret != DCAMERA_OK) {
464 DHLOGE("DCameraSourceDev getMyId failed ret: %{public}d, devId: %{public}s, dhId: %{public}s", ret,
465 GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
466 return ret;
467 }
468
469 DcameraStartAsyncTrace(DCAMERA_OPEN_CHANNEL_CONTROL, DCAMERA_OPEN_CHANNEL_TASKID);
470 ret = controller_->OpenChannel(openInfo);
471 if (ret != DCAMERA_OK) {
472 DHLOGE("DCameraSourceDev Execute OpenCamera OpenChannel failed, ret: %{public}d, devId: %{public}s dhId: "
473 "%{public}s", ret, GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
474 DcameraFinishAsyncTrace(DCAMERA_OPEN_CHANNEL_CONTROL, DCAMERA_OPEN_CHANNEL_TASKID);
475 return DCAMERA_OPEN_CONFLICT;
476 }
477 CHECK_AND_RETURN_RET_LOG(stateListener_ == nullptr, DCAMERA_BAD_VALUE, "stateListener_ is nullptr.");
478 stateListener_->OnHardwareStateChanged(devId_, dhId_, DcameraBusinessState::RUNNING);
479 return DCAMERA_OK;
480 }
481
CloseCamera()482 int32_t DCameraSourceDev::CloseCamera()
483 {
484 DHLOGI("DCameraSourceDev Execute CloseCamera devId %{public}s dhId %{public}s", GetAnonyString(devId_).c_str(),
485 GetAnonyString(dhId_).c_str());
486 ReportCameraOperaterEvent(CLOSE_CAMERA_EVENT, GetAnonyString(devId_), dhId_, "execute close camera event.");
487 int32_t ret = input_->CloseChannel();
488 if (ret != DCAMERA_OK) {
489 DHLOGE("DCameraSourceDev Execute CloseCamera input CloseChannel failed, ret: %{public}d, devId: %{public}s "
490 "dhId: %{public}s", ret, GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
491 }
492 ret = controller_->CloseChannel();
493 if (ret != DCAMERA_OK) {
494 DHLOGE("DCameraSourceDev Execute CloseCamera controller CloseChannel failed, ret: %{public}d, devId: "
495 "%{public}s dhId: %{public}s", ret, GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
496 }
497 CHECK_AND_RETURN_RET_LOG(stateListener_ == nullptr, DCAMERA_BAD_VALUE, "stateListener_ is nullptr.");
498 stateListener_->OnHardwareStateChanged(devId_, dhId_, DcameraBusinessState::IDLE);
499 return DCAMERA_OK;
500 }
501
ConfigStreams(std::vector<std::shared_ptr<DCStreamInfo>> & streamInfos)502 int32_t DCameraSourceDev::ConfigStreams(std::vector<std::shared_ptr<DCStreamInfo>>& streamInfos)
503 {
504 DHLOGI("DCameraSourceDev Execute ConfigStreams devId %{public}s dhId %{public}s", GetAnonyString(devId_).c_str(),
505 GetAnonyString(dhId_).c_str());
506 for (auto info : streamInfos) {
507 sceneMode_ = info->mode_;
508 break;
509 }
510 int32_t ret = input_->ConfigStreams(streamInfos);
511 if (ret != DCAMERA_OK) {
512 DHLOGE("DCameraSourceDev Execute ConfigStreams ConfigStreams failed, ret: %{public}d, devId: %{public}s dhId: "
513 "%{public}s", ret, GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
514 return ret;
515 }
516
517 std::shared_ptr<DCameraChannelInfo> chanInfo = std::make_shared<DCameraChannelInfo>();
518 ret = GetLocalDeviceNetworkId(chanInfo->sourceDevId_);
519 if (ret != DCAMERA_OK) {
520 DHLOGE("DCameraSourceDev getLocalNetworkId failed ret: %{public}d, devId: %{public}s, dhId: %{public}s", ret,
521 GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
522 return ret;
523 }
524 DCameraChannelDetail continueChInfo(CONTINUE_SESSION_FLAG, CONTINUOUS_FRAME);
525 DCameraChannelDetail snapShotChInfo(SNAP_SHOT_SESSION_FLAG, SNAPSHOT_FRAME);
526 chanInfo->detail_.push_back(continueChInfo);
527 chanInfo->detail_.push_back(snapShotChInfo);
528
529 ret = controller_->ChannelNeg(chanInfo);
530 if (ret != DCAMERA_OK) {
531 DHLOGE("DCameraSourceDev ChannelNeg failed ret: %{public}d, devId: %{public}s, dhId: %{public}s", ret,
532 GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
533 return ret;
534 }
535
536 std::vector<DCameraIndex> actualDevInfo;
537 actualDevInfo.assign(actualDevInfo_.begin(), actualDevInfo_.end());
538 ret = input_->OpenChannel(actualDevInfo);
539 if (ret != DCAMERA_OK) {
540 DHLOGE("DCameraSourceDev ChannelNeg OpenChannel failed ret: %{public}d, devId: %{public}s, dhId: %{public}s",
541 ret, GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
542 return ret;
543 }
544 return DCAMERA_OK;
545 }
546
ReleaseStreams(std::vector<int> & streamIds,bool & isAllRelease)547 int32_t DCameraSourceDev::ReleaseStreams(std::vector<int>& streamIds, bool& isAllRelease)
548 {
549 DHLOGI("DCameraSourceDev Execute ReleaseStreams devId %{public}s dhId %{public}s", GetAnonyString(devId_).c_str(),
550 GetAnonyString(dhId_).c_str());
551 int32_t ret = input_->ReleaseStreams(streamIds, isAllRelease);
552 if (ret != DCAMERA_OK) {
553 DHLOGE("DCameraSourceDev Execute ReleaseStreams failed ret: %{public}d, devId: %{public}s, dhId: %{public}s",
554 ret, GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
555 return ret;
556 }
557 return DCAMERA_OK;
558 }
559
ReleaseAllStreams()560 int32_t DCameraSourceDev::ReleaseAllStreams()
561 {
562 DHLOGI("DCameraSourceDev Execute ReleaseAllStreams devId %{public}s dhId %{public}s",
563 GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
564 int32_t ret = input_->ReleaseAllStreams();
565 if (ret != DCAMERA_OK) {
566 DHLOGE("DCameraSourceDev Execute ReleaseAllStreams failed ret: %{public}d, devId: %{public}s, "
567 "dhId: %{public}s", ret, GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
568 return ret;
569 }
570 return DCAMERA_OK;
571 }
572
StartCapture(std::vector<std::shared_ptr<DCCaptureInfo>> & captureInfos)573 int32_t DCameraSourceDev::StartCapture(std::vector<std::shared_ptr<DCCaptureInfo>>& captureInfos)
574 {
575 HitraceAndHisyseventImpl(captureInfos);
576 DHLOGI("DCameraSourceDev Execute StartCapture devId %{public}s dhId %{public}s", GetAnonyString(devId_).c_str(),
577 GetAnonyString(dhId_).c_str());
578 int32_t ret = input_->StartCapture(captureInfos);
579 if (ret != DCAMERA_OK) {
580 DHLOGE("DCameraSourceDev input StartCapture failed ret: %{public}d, devId: %{public}s, dhId: %{public}s", ret,
581 GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
582 DcameraFinishAsyncTrace(DCAMERA_CONTINUE_FIRST_FRAME, DCAMERA_CONTINUE_FIRST_FRAME_TASKID);
583 DcameraFinishAsyncTrace(DCAMERA_SNAPSHOT_FIRST_FRAME, DCAMERA_SNAPSHOT_FIRST_FRAME_TASKID);
584 return ret;
585 }
586 std::vector<std::shared_ptr<DCameraCaptureInfo>> captures;
587 for (auto iter = captureInfos.begin(); iter != captureInfos.end(); iter++) {
588 std::shared_ptr<DCameraCaptureInfo> capture = std::make_shared<DCameraCaptureInfo>();
589 capture->width_ = (*iter)->width_;
590 capture->height_ = (*iter)->height_;
591 capture->format_ = (*iter)->format_;
592 capture->dataspace_ = (*iter)->dataspace_;
593 capture->isCapture_ = (*iter)->isCapture_;
594 capture->encodeType_ = (*iter)->encodeType_;
595 capture->streamType_ = (*iter)->type_;
596 DHLOGI("StartCapture devId %{public}s dhId %{public}s settings size: %{public}zu w: %{public}d h: %{public}d "
597 "fmt: %{public}d isC: %{public}d enc: %{public}d streamT: %{public}d",
598 GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str(), (*iter)->captureSettings_.size(),
599 capture->width_, capture->height_, capture->format_, capture->isCapture_ ? 1 : 0, capture->encodeType_,
600 capture->streamType_);
601 for (auto settingIter = (*iter)->captureSettings_.begin(); settingIter != (*iter)->captureSettings_.end();
602 settingIter++) {
603 std::shared_ptr<DCameraSettings> setting = std::make_shared<DCameraSettings>();
604 setting->type_ = settingIter->type_;
605 setting->value_ = settingIter->value_;
606 capture->captureSettings_.push_back(setting);
607 }
608 captures.push_back(capture);
609 }
610
611 DHLOGI("startcapture sceneMode_: %{public}d", sceneMode_);
612 ret = controller_->StartCapture(captures, sceneMode_);
613 if (ret != DCAMERA_OK) {
614 DHLOGE("DCameraSourceDev Execute StartCapture StartCapture failed, ret: %{public}d, devId: %{public}s dhId: "
615 "%{public}s", ret, GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
616 DcameraFinishAsyncTrace(DCAMERA_CONTINUE_FIRST_FRAME, DCAMERA_CONTINUE_FIRST_FRAME_TASKID);
617 DcameraFinishAsyncTrace(DCAMERA_SNAPSHOT_FIRST_FRAME, DCAMERA_SNAPSHOT_FIRST_FRAME_TASKID);
618 }
619 return ret;
620 }
621
HitraceAndHisyseventImpl(std::vector<std::shared_ptr<DCCaptureInfo>> & captureInfos)622 void DCameraSourceDev::HitraceAndHisyseventImpl(std::vector<std::shared_ptr<DCCaptureInfo>>& captureInfos)
623 {
624 for (auto iter = captureInfos.begin(); iter != captureInfos.end(); iter++) {
625 std::shared_ptr<DCCaptureInfo> capture = *iter;
626 EventCaptureInfo eventCaptureInfo = {
627 .width_ = capture->width_,
628 .height_ = capture->height_,
629 .format_ = capture->format_,
630 .isCapture_ = capture->isCapture_,
631 .encodeType_ = capture->encodeType_,
632 .type_ = capture->type_,
633 };
634 ReportStartCaptureEvent(START_CAPTURE_EVENT, eventCaptureInfo, "execute start capture event.");
635 if (capture->type_ == CONTINUOUS_FRAME && capture->isCapture_ == true) {
636 DcameraStartAsyncTrace(DCAMERA_CONTINUE_FIRST_FRAME, DCAMERA_CONTINUE_FIRST_FRAME_TASKID);
637 } else if (capture->type_ == SNAPSHOT_FRAME && capture->isCapture_ == true) {
638 DcameraStartAsyncTrace(DCAMERA_SNAPSHOT_FIRST_FRAME, DCAMERA_SNAPSHOT_FIRST_FRAME_TASKID);
639 }
640 }
641 }
642
StopCapture(std::vector<int> & streamIds,bool & isAllStop)643 int32_t DCameraSourceDev::StopCapture(std::vector<int>& streamIds, bool& isAllStop)
644 {
645 DHLOGI("DCameraSourceDev Execute StopCapture devId %{public}s dhId %{public}s", GetAnonyString(devId_).c_str(),
646 GetAnonyString(dhId_).c_str());
647 int32_t ret = input_->StopCapture(streamIds, isAllStop);
648 if (ret != DCAMERA_OK) {
649 DHLOGE("DCameraSourceDev Execute StopCapture input StopCapture failed, ret: %{public}d, devId: %{public}s "
650 "dhId: %{public}s", ret, GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
651 }
652 if (isAllStop) {
653 ret = controller_->StopCapture();
654 if (ret != DCAMERA_OK) {
655 DHLOGE("DCameraSourceDev Execute StopCapture controller StopCapture failed, ret: %{public}d, devId: "
656 "%{public}s dhId: %{public}s", ret, GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
657 }
658 }
659 return DCAMERA_OK;
660 }
661
StopAllCapture()662 int32_t DCameraSourceDev::StopAllCapture()
663 {
664 DHLOGI("DCameraSourceDev Execute StopAllCapture devId %{public}s dhId %{public}s", GetAnonyString(devId_).c_str(),
665 GetAnonyString(dhId_).c_str());
666 int32_t ret = input_->StopAllCapture();
667 if (ret != DCAMERA_OK) {
668 DHLOGE("DCameraSourceDev Execute StopAllCapture input StopAllCapture failed, ret: %{public}d, devId: "
669 "%{public}s dhId: %{public}s", ret, GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
670 }
671 ret = controller_->StopCapture();
672 if (ret != DCAMERA_OK) {
673 DHLOGE("DCameraSourceDev Execute StopAllCapture controller StopAllCapture failed, ret: %{public}d, devId: "
674 "%{public}s dhId: %{public}s", ret, GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
675 }
676 return DCAMERA_OK;
677 }
678
UpdateSettings(std::vector<std::shared_ptr<DCameraSettings>> & settings)679 int32_t DCameraSourceDev::UpdateSettings(std::vector<std::shared_ptr<DCameraSettings>>& settings)
680 {
681 DHLOGI("DCameraSourceDev Execute UpdateSettings devId %{public}s dhId %{public}s", GetAnonyString(devId_).c_str(),
682 GetAnonyString(dhId_).c_str());
683 int32_t ret = input_->UpdateSettings(settings);
684 if (ret != DCAMERA_OK) {
685 DHLOGE("DCameraSourceDev Execute UpdateSettings input UpdateSettings failed, ret: %{public}d, devId: "
686 "%{public}s dhId: %{public}s", ret, GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
687 return ret;
688 }
689 ret = controller_->UpdateSettings(settings);
690 if (ret != DCAMERA_OK) {
691 DHLOGE("DCameraSourceDev Execute UpdateSettings controller UpdateSettings failed, ret: %{public}d, "
692 "devId: %{public}s dhId: %{public}s", ret, GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
693 return ret;
694 }
695 return DCAMERA_OK;
696 }
697
CameraEventNotify(std::shared_ptr<DCameraEvent> & events)698 int32_t DCameraSourceDev::CameraEventNotify(std::shared_ptr<DCameraEvent>& events)
699 {
700 DHLOGI("DCameraSourceDev Execute CameraEventNotify devId %{public}s dhId %{public}s",
701 GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
702 int32_t ret = controller_->DCameraNotify(events);
703 if (ret != DCAMERA_OK) {
704 DHLOGE("DCameraSourceDev Execute CameraEventNotify DCameraNotify failed, ret: %{public}d, devId: %{public}s "
705 "dhId: %{public}s", ret, GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
706 return ret;
707 }
708 return DCAMERA_OK;
709 }
710
NotifyResult(DCAMERA_EVENT eventType,DCameraSourceEvent & event,int32_t result)711 void DCameraSourceDev::NotifyResult(DCAMERA_EVENT eventType, DCameraSourceEvent& event, int32_t result)
712 {
713 DHLOGI("Notify func map, execute %{public}d notify", eventType);
714 switch (eventType) {
715 case DCAMERA_EVENT_REGIST:
716 case DCAMERA_EVENT_UNREGIST:
717 NotifyRegisterResult(eventType, event, result);
718 break;
719 case DCAMERA_EVENT_OPEN:
720 case DCAMERA_EVENT_CLOSE:
721 case DCAMERA_EVENT_CONFIG_STREAMS:
722 case DCAMERA_EVENT_RELEASE_STREAMS:
723 case DCAMERA_EVENT_START_CAPTURE:
724 case DCAMERA_EVENT_STOP_CAPTURE:
725 case DCAMERA_EVENT_UPDATE_SETTINGS:
726 NotifyHalResult(eventType, event, result);
727 break;
728 default:
729 DHLOGE("Notify func map not find, execute %{public}d notify, devId: %{public}s dhId: %{public}s", eventType,
730 GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
731 break;
732 }
733 }
734
NotifyRegisterResult(DCAMERA_EVENT eventType,DCameraSourceEvent & event,int32_t result)735 void DCameraSourceDev::NotifyRegisterResult(DCAMERA_EVENT eventType, DCameraSourceEvent& event, int32_t result)
736 {
737 std::string data = "";
738 std::shared_ptr<DCameraRegistParam> param;
739 int32_t ret = event.GetDCameraRegistParam(param);
740 if (ret != DCAMERA_OK) {
741 return;
742 }
743
744 if (stateListener_ == nullptr) {
745 DHLOGE("DCameraSourceDev can not get listener");
746 return;
747 }
748 if (eventType == DCAMERA_EVENT_REGIST) {
749 stateListener_->OnRegisterNotify(param->devId_, param->dhId_, param->reqId_, result, data);
750 } else {
751 stateListener_->OnUnregisterNotify(param->devId_, param->dhId_, param->reqId_, result, data);
752 }
753 }
754
NotifyHalResult(DCAMERA_EVENT eventType,DCameraSourceEvent & event,int32_t result)755 void DCameraSourceDev::NotifyHalResult(DCAMERA_EVENT eventType, DCameraSourceEvent& event, int32_t result)
756 {
757 DHLOGI("DCameraSourceDev NotifyHalResult eventType: %{public}d, result: %{public}d devId: %{public}s dhId: "
758 "%{public}s", eventType, result, GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
759 if (result == DCAMERA_OK) {
760 return;
761 }
762
763 std::shared_ptr<DCameraEvent> events = std::make_shared<DCameraEvent>();
764 events->eventType_ = DCAMERA_OPERATION;
765 auto iter = eventResultMap_.find(eventType);
766 if (iter == eventResultMap_.end()) {
767 return;
768 }
769 events->eventResult_ = iter->second;
770 CameraEventNotify(events);
771 return;
772 }
773
GetStateInfo()774 int32_t DCameraSourceDev::GetStateInfo()
775 {
776 DHLOGI("GetStateInfo In state %{public}d", stateMachine_->GetCameraState());
777 return stateMachine_->GetCameraState();
778 }
779
GetVersion()780 std::string DCameraSourceDev::GetVersion()
781 {
782 return version_;
783 }
784
OnChannelConnectedEvent()785 int32_t DCameraSourceDev::OnChannelConnectedEvent()
786 {
787 std::shared_ptr<DCameraEvent> camEvent = std::make_shared<DCameraEvent>();
788 camEvent->eventType_ = DCAMERA_MESSAGE;
789 camEvent->eventResult_ = DCAMERA_EVENT_CHANNEL_CONNECTED;
790 DCameraSourceEvent event(DCAMERA_EVENT_NOFIFY, camEvent);
791 std::shared_ptr<DCameraSourceEvent> eventParam = std::make_shared<DCameraSourceEvent>(event);
792 CHECK_AND_RETURN_RET_LOG(srcDevEventHandler_ == nullptr, DCAMERA_BAD_VALUE, "srcDevEventHandler_ is nullptr.");
793 AppExecFwk::InnerEvent::Pointer msgEvent =
794 AppExecFwk::InnerEvent::Get(EVENT_SOURCE_DEV_PROCESS, eventParam, 0);
795 srcDevEventHandler_->SendEvent(msgEvent, 0, AppExecFwk::EventQueue::Priority::IMMEDIATE);
796 return DCAMERA_OK;
797 }
798
OnChannelDisconnectedEvent()799 int32_t DCameraSourceDev::OnChannelDisconnectedEvent()
800 {
801 DCameraIndex camIndex(devId_, dhId_);
802 std::shared_ptr<DCameraIndex> index = std::make_shared<DCameraIndex>(camIndex);
803 DCameraSourceEvent event(DCAMERA_EVENT_CLOSE, camIndex);
804 std::shared_ptr<DCameraSourceEvent> eventParam = std::make_shared<DCameraSourceEvent>(event);
805 CHECK_AND_RETURN_RET_LOG(srcDevEventHandler_ == nullptr, DCAMERA_BAD_VALUE, "srcDevEventHandler_ is nullptr.");
806 AppExecFwk::InnerEvent::Pointer msgEvent =
807 AppExecFwk::InnerEvent::Get(EVENT_SOURCE_DEV_PROCESS, eventParam, 0);
808 srcDevEventHandler_->SendEvent(msgEvent, 0, AppExecFwk::EventQueue::Priority::IMMEDIATE);
809 std::shared_ptr<DCameraEvent> camEvent = std::make_shared<DCameraEvent>();
810 camEvent->eventType_ = DCAMERA_MESSAGE;
811 camEvent->eventResult_ = DCAMERA_EVENT_CHANNEL_DISCONNECTED;
812 DCameraSourceEvent eventNotify(DCAMERA_EVENT_NOFIFY, camEvent);
813 eventParam = std::make_shared<DCameraSourceEvent>(eventNotify);
814 msgEvent = AppExecFwk::InnerEvent::Get(EVENT_SOURCE_DEV_PROCESS, eventParam, 0);
815 srcDevEventHandler_->SendEvent(msgEvent, 0, AppExecFwk::EventQueue::Priority::IMMEDIATE);
816 return DCAMERA_OK;
817 }
818
PostHicollieEvent()819 int32_t DCameraSourceDev::PostHicollieEvent()
820 {
821 CHECK_AND_RETURN_RET_LOG(srcDevEventHandler_ == nullptr, DCAMERA_BAD_VALUE, "srcDevEventHandler_ is nullptr.");
822 AppExecFwk::InnerEvent::Pointer msgEvent = AppExecFwk::InnerEvent::Get(EVENT_HICOLLIE);
823 srcDevEventHandler_->SendEvent(msgEvent, 0, AppExecFwk::EventQueue::Priority::IMMEDIATE);
824 return DCAMERA_OK;
825 }
826
SetHicollieFlag(bool flag)827 void DCameraSourceDev::SetHicollieFlag(bool flag)
828 {
829 hicollieFlag_.store(flag);
830 }
831
GetHicollieFlag()832 bool DCameraSourceDev::GetHicollieFlag()
833 {
834 return hicollieFlag_.load();
835 }
836 } // namespace DistributedHardware
837 } // namespace OHOS
838