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