• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2023 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 "anonymous_string.h"
17 #include "dcamera_channel_source_impl.h"
18 #include "dcamera_hitrace_adapter.h"
19 #include "dcamera_frame_info.h"
20 #include "dcamera_source_data_process.h"
21 #include "dcamera_source_event.h"
22 #include "dcamera_source_input.h"
23 #include "dcamera_source_input_channel_listener.h"
24 #include "dcamera_softbus_latency.h"
25 #include "distributed_camera_constants.h"
26 #include "distributed_camera_errno.h"
27 #include "distributed_hardware_log.h"
28 
29 namespace OHOS {
30 namespace DistributedHardware {
DCameraSourceInput(std::string devId,std::string dhId,std::shared_ptr<DCameraSourceDev> & camDev)31 DCameraSourceInput::DCameraSourceInput(std::string devId, std::string dhId, std::shared_ptr<DCameraSourceDev>& camDev)
32     : devId_(devId), dhId_(dhId), camDev_(camDev), isInit(false)
33 {
34     DHLOGI("DCameraSourceInput Constructor devId %s dhId %s", GetAnonyString(devId_).c_str(),
35         GetAnonyString(dhId_).c_str());
36 }
37 
~DCameraSourceInput()38 DCameraSourceInput::~DCameraSourceInput()
39 {
40     DHLOGI("DCameraSourceInput Destructor devId %s dhId %s", GetAnonyString(devId_).c_str(),
41         GetAnonyString(dhId_).c_str());
42     if (isInit) {
43         UnInit();
44     }
45 }
46 
ConfigStreams(std::vector<std::shared_ptr<DCStreamInfo>> & streamInfos)47 int32_t DCameraSourceInput::ConfigStreams(std::vector<std::shared_ptr<DCStreamInfo>>& streamInfos)
48 {
49     DHLOGI("DCameraSourceInput ConfigStreams devId %s dhId %s, size: %d", GetAnonyString(devId_).c_str(),
50         GetAnonyString(dhId_).c_str(), streamInfos.size());
51     int32_t ret = ReleaseAllStreams();
52     if (ret != DCAMERA_OK) {
53         DHLOGE("DCameraSourceInput ConfigStreams ReleaseAllStreams failed %d devId: %s, dhId: %s", ret,
54             GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
55         return ret;
56     }
57 
58     if (streamInfos.empty()) {
59         return DCAMERA_OK;
60     }
61 
62     std::vector<std::shared_ptr<DCStreamInfo>> snapStreams;
63     std::vector<std::shared_ptr<DCStreamInfo>> continueStreams;
64     for (auto iter = streamInfos.begin(); iter != streamInfos.end(); iter++) {
65         std::shared_ptr<DCStreamInfo> streamInfo = *iter;
66         DHLOGI("DCameraSourceInput ConfigStreams devId: %s, dhId: %s, streamId: %d, width: %d, height: %d," +
67             "format: %d, dataspace: %d, encodeType:%d streamType: %d", GetAnonyString(devId_).c_str(),
68             GetAnonyString(dhId_).c_str(), streamInfo->streamId_, streamInfo->width_, streamInfo->height_,
69             streamInfo->format_, streamInfo->dataspace_, streamInfo->encodeType_, streamInfo->type_);
70         switch (streamInfo->type_) {
71             case CONTINUOUS_FRAME: {
72                 continueStreams.push_back(streamInfo);
73                 break;
74             }
75             case SNAPSHOT_FRAME: {
76                 snapStreams.push_back(streamInfo);
77                 break;
78             }
79             default:
80                 break;
81         }
82     }
83 
84     do {
85         ret = dataProcess_[CONTINUOUS_FRAME]->ConfigStreams(continueStreams);
86         if (ret != DCAMERA_OK) {
87             DHLOGE("DCameraSourceInput ConfigStreams continue failed %d devId %s dhId %s", ret,
88                 GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
89             break;
90         }
91         ret = dataProcess_[SNAPSHOT_FRAME]->ConfigStreams(snapStreams);
92         if (ret != DCAMERA_OK) {
93             DHLOGE("DCameraSourceInput ConfigStreams snapshot failed %d devId %s dhId %s", ret,
94                 GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
95             break;
96         }
97     } while (0);
98 
99     if (ret != DCAMERA_OK) {
100         ReleaseAllStreams();
101     }
102     return ret;
103 }
104 
ReleaseStreams(std::vector<int> & streamIds,bool & isAllRelease)105 int32_t DCameraSourceInput::ReleaseStreams(std::vector<int>& streamIds, bool& isAllRelease)
106 {
107     DHLOGI("DCameraSourceInput ReleaseStreams devId %s dhId %s", GetAnonyString(devId_).c_str(),
108         GetAnonyString(dhId_).c_str());
109     int32_t ret = dataProcess_[CONTINUOUS_FRAME]->ReleaseStreams(streamIds);
110     if (ret != DCAMERA_OK) {
111         DHLOGE("DCameraSourceInput ReleaseStreams continue stream ReleaseStreams ret: %d, devId: %s, dhId: %s", ret,
112             GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
113         return ret;
114     }
115     ret = dataProcess_[SNAPSHOT_FRAME]->ReleaseStreams(streamIds);
116     if (ret != DCAMERA_OK) {
117         DHLOGE("DCameraSourceInput ReleaseStreams snapshot stream ReleaseStreams ret: %d, devId: %s, dhId: %s", ret,
118             GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
119         return ret;
120     }
121 
122     std::vector<int32_t> continueStreamIds;
123     dataProcess_[CONTINUOUS_FRAME]->GetAllStreamIds(continueStreamIds);
124     std::vector<int32_t> snapStreamIds;
125     dataProcess_[CONTINUOUS_FRAME]->GetAllStreamIds(snapStreamIds);
126     if (continueStreamIds.empty() && snapStreamIds.empty()) {
127         isAllRelease = true;
128     }
129     return DCAMERA_OK;
130 }
131 
StartCapture(std::vector<std::shared_ptr<DCCaptureInfo>> & captureInfos)132 int32_t DCameraSourceInput::StartCapture(std::vector<std::shared_ptr<DCCaptureInfo>>& captureInfos)
133 {
134     DHLOGI("DCameraSourceInput StartCapture devId %s dhId %s", GetAnonyString(devId_).c_str(),
135         GetAnonyString(dhId_).c_str());
136     for (auto iter = captureInfos.begin(); iter != captureInfos.end(); iter++) {
137         int32_t ret = DCAMERA_OK;
138         for (auto iterSet = (*iter)->streamIds_.begin(); iterSet != (*iter)->streamIds_.end(); iterSet++) {
139             DHLOGI("DCameraSourceInput StartCapture devId %s dhId %s StartCapture id: %d",
140                 GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str(), *iterSet);
141         }
142         DHLOGI("DCameraSourceInput StartCapture Inner devId %s dhId %s streamType: %d idSize: %d isCap: %d",
143             GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str(), (*iter)->type_, (*iter)->streamIds_.size(),
144             (*iter)->isCapture_ ? 1 : 0);
145         ret = dataProcess_[(*iter)->type_]->StartCapture(*iter);
146         if (ret != DCAMERA_OK) {
147             DHLOGE("DCameraSourceInput StartCapture ret: %d, devId: %s, dhId: %s", ret,
148                 GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
149             return ret;
150         }
151     }
152     return DCAMERA_OK;
153 }
154 
StopCapture(std::vector<int> & streamIds,bool & isAllStop)155 int32_t DCameraSourceInput::StopCapture(std::vector<int>& streamIds, bool& isAllStop)
156 {
157     DHLOGI("DCameraSourceInput StopCapture devId %s dhId %s", GetAnonyString(devId_).c_str(),
158         GetAnonyString(dhId_).c_str());
159     int32_t ret = dataProcess_[CONTINUOUS_FRAME]->StopCapture(streamIds);
160     if (ret != DCAMERA_OK) {
161         DHLOGE("DCameraSourceInput StopCapture continue ret: %d, devId: %s, dhId: %s", ret,
162             GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
163         return ret;
164     }
165 
166     int32_t size = dataProcess_[CONTINUOUS_FRAME]->GetProducerSize();
167     if (size == 0) {
168         isAllStop = true;
169         std::vector<int> snapStreamIds;
170         dataProcess_[SNAPSHOT_FRAME]->GetAllStreamIds(snapStreamIds);
171         ret = dataProcess_[SNAPSHOT_FRAME]->StopCapture(snapStreamIds);
172         if (ret != DCAMERA_OK) {
173             DHLOGE("DCameraSourceInput StopCapture snapshot ret: %d, devId: %s, dhId: %s", ret,
174                 GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
175             return ret;
176         }
177     }
178     return DCAMERA_OK;
179 }
180 
OpenChannel(std::vector<DCameraIndex> & indexs)181 int32_t DCameraSourceInput::OpenChannel(std::vector<DCameraIndex>& indexs)
182 {
183     DHLOGI("DCameraSourceInput OpenChannel devId %s dhId %s continue state: %d, snapshot state: %d",
184         GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str(), channelState_[CONTINUOUS_FRAME],
185         channelState_[SNAPSHOT_FRAME]);
186     if (channelState_[CONTINUOUS_FRAME] == DCAMERA_CHANNEL_STATE_DISCONNECTED) {
187         int32_t ret = EstablishContinuousFrameSession(indexs);
188         if (ret != DCAMERA_OK) {
189             DHLOGE("esdablish continuous frame failed ret: %d,"+
190                 "devId: %s, dhId: %s", ret, GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
191             return ret;
192         }
193     }
194     if (channelState_[SNAPSHOT_FRAME] == DCAMERA_CHANNEL_STATE_DISCONNECTED) {
195         int32_t ret = EstablishSnapshotFrameSession(indexs);
196         if (ret != DCAMERA_OK) {
197             DHLOGE("esdablish snapshot frame failed ret: %d,"+
198                 "devId: %s, dhId: %s", ret, GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
199             return ret;
200         }
201     }
202     return DCAMERA_OK;
203 }
204 
CloseChannel()205 int32_t DCameraSourceInput::CloseChannel()
206 {
207     DHLOGI("DCameraSourceInput CloseChannel devId %s dhId %s continue state: %d, snapshot state: %d",
208         GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str(), channelState_[CONTINUOUS_FRAME],
209         channelState_[SNAPSHOT_FRAME]);
210     if (channelState_[CONTINUOUS_FRAME] != DCAMERA_CHANNEL_STATE_DISCONNECTED) {
211         int32_t ret = DCAMERA_OK;
212         ret = channels_[CONTINUOUS_FRAME]->CloseSession();
213         if (ret != DCAMERA_OK) {
214             DHLOGE("DCameraSourceInput CloseChannel continue stream failed ret: %d, devId: %s, dhId: %s", ret,
215                 GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
216         }
217         channelState_[CONTINUOUS_FRAME] = DCAMERA_CHANNEL_STATE_DISCONNECTED;
218 
219         ret = channels_[CONTINUOUS_FRAME]->ReleaseSession();
220         if (ret != DCAMERA_OK) {
221             DHLOGI("DCameraSourceInput release continue session failed: %d devId %s dhId %s", ret,
222                 GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
223         }
224     }
225 
226     if (channelState_[SNAPSHOT_FRAME] != DCAMERA_CHANNEL_STATE_DISCONNECTED) {
227         int32_t ret = DCAMERA_OK;
228         ret = channels_[SNAPSHOT_FRAME]->CloseSession();
229         if (ret != DCAMERA_OK) {
230             DHLOGE("DCameraSourceInput CloseChannel snapshot stream failed ret: %d, devId: %s, dhId: %s", ret,
231                 GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
232         }
233         channelState_[SNAPSHOT_FRAME] = DCAMERA_CHANNEL_STATE_DISCONNECTED;
234 
235         ret = channels_[SNAPSHOT_FRAME]->ReleaseSession();
236         if (ret != DCAMERA_OK) {
237             DHLOGI("DCameraSourceInput release snapshot session failed: %d devId %s dhId %s", ret,
238                 GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
239         }
240     }
241     return DCAMERA_OK;
242 }
243 
Init()244 int32_t DCameraSourceInput::Init()
245 {
246     DHLOGI("DCameraSourceInput Init devId %s dhId %s", GetAnonyString(devId_).c_str(),
247         GetAnonyString(dhId_).c_str());
248     auto input = std::shared_ptr<DCameraSourceInput>(shared_from_this());
249     std::shared_ptr<ICameraSourceDataProcess> conDataProcess = std::make_shared<DCameraSourceDataProcess>(devId_, dhId_,
250         CONTINUOUS_FRAME);
251     std::shared_ptr<ICameraChannel> continueCh = std::make_shared<DCameraChannelSourceImpl>();
252     std::shared_ptr<ICameraChannelListener> conListener =
253         std::make_shared<DCameraSourceInputChannelListener>(input, CONTINUOUS_FRAME);
254     channels_.emplace(CONTINUOUS_FRAME, continueCh);
255     listeners_.emplace(CONTINUOUS_FRAME, conListener);
256     dataProcess_.emplace(CONTINUOUS_FRAME, conDataProcess);
257     channelState_.emplace(CONTINUOUS_FRAME, DCAMERA_CHANNEL_STATE_DISCONNECTED);
258 
259     std::shared_ptr<ICameraSourceDataProcess> snapDataProcess = std::make_shared<DCameraSourceDataProcess>(devId_,
260         dhId_, SNAPSHOT_FRAME);
261     std::shared_ptr<ICameraChannel> snapShotCh = std::make_shared<DCameraChannelSourceImpl>();
262     std::shared_ptr<ICameraChannelListener> snapListener =
263         std::make_shared<DCameraSourceInputChannelListener>(input, SNAPSHOT_FRAME);
264     channels_.emplace(SNAPSHOT_FRAME, snapShotCh);
265     listeners_.emplace(SNAPSHOT_FRAME, snapListener);
266     dataProcess_.emplace(SNAPSHOT_FRAME, snapDataProcess);
267     channelState_.emplace(SNAPSHOT_FRAME, DCAMERA_CHANNEL_STATE_DISCONNECTED);
268     isInit = true;
269     DHLOGI("DCameraSourceInput Init devId end %s dhId %s", GetAnonyString(devId_).c_str(),
270         GetAnonyString(dhId_).c_str());
271     return DCAMERA_OK;
272 }
273 
UnInit()274 int32_t DCameraSourceInput::UnInit()
275 {
276     DHLOGI("DCameraSourceInput UnInit devId %s dhId %s", GetAnonyString(devId_).c_str(),
277         GetAnonyString(dhId_).c_str());
278     channels_.clear();
279     listeners_.clear();
280     dataProcess_.clear();
281     channelState_.clear();
282     isInit = false;
283     isChannelConnected_.store(false);
284     return DCAMERA_OK;
285 }
286 
UpdateSettings(std::vector<std::shared_ptr<DCameraSettings>> & settings)287 int32_t DCameraSourceInput::UpdateSettings(std::vector<std::shared_ptr<DCameraSettings>>& settings)
288 {
289     return DCAMERA_OK;
290 }
291 
OnSessionState(DCStreamType streamType,int32_t state)292 void DCameraSourceInput::OnSessionState(DCStreamType streamType, int32_t state)
293 {
294     DHLOGI("DCameraSourceInput OnSessionState devId: %s, dhId: %s, streamType: %d, state: %d",
295         GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str(), streamType, state);
296     channelState_[streamType] = (DCameraChannelState)state;
297     switch (state) {
298         case DCAMERA_CHANNEL_STATE_DISCONNECTED: {
299             FinshFrameAsyncTrace(streamType);
300             DHLOGI("DCameraSourceDev PostTask CloseSession Input OnClose devId %s dhId %s",
301                 GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
302             isChannelConnected_.store(false);
303             PostChannelDisconnectedEvent();
304             break;
305         }
306         case DCAMERA_CHANNEL_STATE_CONNECTED: {
307             FinshFrameAsyncTrace(streamType);
308             isChannelConnected_.store(true);
309             channelCond_.notify_one();
310             DHLOGI("DCameraSourceInput OnSessionState state %d", state);
311             break;
312         }
313         default: {
314             DHLOGI("DCameraSourceInput OnSessionState state %d", state);
315             break;
316         }
317     }
318 }
319 
FinshFrameAsyncTrace(DCStreamType streamType)320 void DCameraSourceInput::FinshFrameAsyncTrace(DCStreamType streamType)
321 {
322     if (streamType == CONTINUOUS_FRAME) {
323         DcameraFinishAsyncTrace(DCAMERA_OPEN_DATA_CONTINUE, DCAMERA_OPEN_DATA_CONTINUE_TASKID);
324     } else if (streamType == SNAPSHOT_FRAME) {
325         DcameraFinishAsyncTrace(DCAMERA_OPEN_DATA_SNAPSHOT, DCAMERA_OPEN_DATA_SNAPSHOT_TASKID);
326     }
327 }
328 
OnSessionError(DCStreamType streamType,int32_t eventType,int32_t eventReason,std::string detail)329 void DCameraSourceInput::OnSessionError(DCStreamType streamType, int32_t eventType, int32_t eventReason,
330     std::string detail)
331 {
332     DHLOGI("DCameraSourceInput OnSessionError devId: %s, dhId: %s, eventType: %d, eventReason: %d, detail %s",
333         GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str(), eventType, eventReason, detail.c_str());
334     (void)streamType;
335 }
336 
OnDataReceived(DCStreamType streamType,std::vector<std::shared_ptr<DataBuffer>> & buffers)337 void DCameraSourceInput::OnDataReceived(DCStreamType streamType, std::vector<std::shared_ptr<DataBuffer>>& buffers)
338 {
339     buffers[0]->frameInfo_.offset = DCameraSoftbusLatency::GetInstance().GetTimeSyncInfo(devId_);
340     int32_t ret = dataProcess_[streamType]->FeedStream(buffers);
341     if (ret != DCAMERA_OK) {
342         DHLOGE("OnDataReceived FeedStream %d stream failed ret: %d, devId: %s, dhId: %s", streamType,
343             ret, GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
344     }
345 }
346 
ReleaseAllStreams()347 int32_t DCameraSourceInput::ReleaseAllStreams()
348 {
349     DHLOGI("ReleaseAllStreams devId %s dhId %s", GetAnonyString(devId_).c_str(),
350         GetAnonyString(dhId_).c_str());
351     std::vector<int> continueStreamIds;
352     dataProcess_[CONTINUOUS_FRAME]->GetAllStreamIds(continueStreamIds);
353     int32_t ret = dataProcess_[CONTINUOUS_FRAME]->ReleaseStreams(continueStreamIds);
354     if (ret != DCAMERA_OK) {
355         DHLOGE("continue stream ReleaseStreams ret: %d, devId: %s, dhId: %s", ret,
356             GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
357         return ret;
358     }
359 
360     std::vector<int> snapStreamIds;
361     dataProcess_[SNAPSHOT_FRAME]->GetAllStreamIds(snapStreamIds);
362     ret = dataProcess_[SNAPSHOT_FRAME]->ReleaseStreams(snapStreamIds);
363     if (ret != DCAMERA_OK) {
364         DHLOGE("ReleaseAllStreams snapshot stream ReleaseStreams ret: %d, devId: %s, dhId: %s", ret,
365             GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
366         return ret;
367     }
368     return DCAMERA_OK;
369 }
370 
StopAllCapture()371 int32_t DCameraSourceInput::StopAllCapture()
372 {
373     DHLOGI("StopAllCapture devId %s dhId %s", GetAnonyString(devId_).c_str(),
374         GetAnonyString(dhId_).c_str());
375     std::vector<int> continueStreamIds;
376     dataProcess_[CONTINUOUS_FRAME]->GetAllStreamIds(continueStreamIds);
377     int32_t ret = dataProcess_[CONTINUOUS_FRAME]->StopCapture(continueStreamIds);
378     if (ret != DCAMERA_OK) {
379         DHLOGE("StopAllCapture continue ret: %d, devId: %s, dhId: %s", ret,
380             GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
381         return ret;
382     }
383 
384     std::vector<int> snapStreamIds;
385     dataProcess_[SNAPSHOT_FRAME]->GetAllStreamIds(snapStreamIds);
386     ret = dataProcess_[SNAPSHOT_FRAME]->StopCapture(snapStreamIds);
387     if (ret != DCAMERA_OK) {
388         DHLOGE("StopAllCapture snapshot ret: %d, devId: %s, dhId: %s", ret,
389             GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
390         return ret;
391     }
392     return DCAMERA_OK;
393 }
394 
PostChannelDisconnectedEvent()395 void DCameraSourceInput::PostChannelDisconnectedEvent()
396 {
397     std::shared_ptr<DCameraSourceDev> camDev = camDev_.lock();
398     if (camDev == nullptr) {
399         DHLOGE("DCameraSourceInput PostChannelDisconnectedEvent camDev is nullptr");
400         return;
401     }
402     camDev->OnChannelDisconnectedEvent();
403 }
404 
WaitforSessionResult()405 int32_t DCameraSourceInput::WaitforSessionResult()
406 {
407     isChannelConnected_.store(false);
408     std::unique_lock<std::mutex> lck(channelMtx_);
409     DHLOGD("wait for channel session callback notify.");
410     bool isChannelConnected = channelCond_.wait_for(lck, std::chrono::seconds(CHANNEL_REL_SECONDS),
411         [this]() { return isChannelConnected_.load(); });
412     if (!isChannelConnected) {
413         DHLOGE("wait for channel session callback timeout(%ds).",
414             CHANNEL_REL_SECONDS);
415         PostChannelDisconnectedEvent();
416         return DCAMERA_BAD_VALUE;
417     }
418     return DCAMERA_OK;
419 }
420 
EstablishContinuousFrameSession(std::vector<DCameraIndex> & indexs)421 int32_t DCameraSourceInput::EstablishContinuousFrameSession(std::vector<DCameraIndex>& indexs)
422 {
423     DcameraStartAsyncTrace(DCAMERA_OPEN_DATA_CONTINUE, DCAMERA_OPEN_DATA_CONTINUE_TASKID);
424     int32_t ret = channels_[CONTINUOUS_FRAME]->CreateSession(indexs, CONTINUE_SESSION_FLAG, DCAMERA_SESSION_MODE_VIDEO,
425         listeners_[CONTINUOUS_FRAME]);
426     if (ret != DCAMERA_OK) {
427         DHLOGE("Create Session failed ret: %d,"+
428             "devId: %s, dhId: %s", ret, GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
429         DcameraFinishAsyncTrace(DCAMERA_OPEN_DATA_CONTINUE, DCAMERA_OPEN_DATA_CONTINUE_TASKID);
430         return ret;
431     }
432 
433     ret = channels_[CONTINUOUS_FRAME]->OpenSession();
434     if (ret != DCAMERA_OK) {
435         DHLOGE("open session failed ret: %d,"+
436             "devId: %s, dhId: %s", ret, GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
437         PostChannelDisconnectedEvent();
438         DcameraFinishAsyncTrace(DCAMERA_OPEN_DATA_CONTINUE, DCAMERA_OPEN_DATA_CONTINUE_TASKID);
439         return ret;
440     }
441 
442     ret = WaitforSessionResult();
443     if (ret != DCAMERA_OK) {
444         DHLOGE("waitfor session result failed ret: %d,"+
445             "devId: %s, dhId: %s", ret, GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
446         DcameraFinishAsyncTrace(DCAMERA_OPEN_DATA_CONTINUE, DCAMERA_OPEN_DATA_CONTINUE_TASKID);
447         return ret;
448     }
449     DcameraFinishAsyncTrace(DCAMERA_OPEN_DATA_CONTINUE, DCAMERA_OPEN_DATA_CONTINUE_TASKID);
450     return DCAMERA_OK;
451 }
452 
EstablishSnapshotFrameSession(std::vector<DCameraIndex> & indexs)453 int32_t DCameraSourceInput::EstablishSnapshotFrameSession(std::vector<DCameraIndex>& indexs)
454 {
455     DcameraStartAsyncTrace(DCAMERA_OPEN_DATA_SNAPSHOT, DCAMERA_OPEN_DATA_SNAPSHOT_TASKID);
456     int32_t ret = channels_[SNAPSHOT_FRAME]->CreateSession(indexs, SNAP_SHOT_SESSION_FLAG, DCAMERA_SESSION_MODE_JPEG,
457         listeners_[SNAPSHOT_FRAME]);
458     if (ret != DCAMERA_OK) {
459         DHLOGE("create session failed ret: %d,"+
460             "devId: %s, dhId: %s", ret, GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
461         DcameraFinishAsyncTrace(DCAMERA_OPEN_DATA_SNAPSHOT, DCAMERA_OPEN_DATA_SNAPSHOT_TASKID);
462         return ret;
463     }
464 
465     ret = channels_[SNAPSHOT_FRAME]->OpenSession();
466     if (ret != DCAMERA_OK) {
467         DHLOGE("open session failed ret: %d,"+
468             "devId: %s, dhId: %s", ret, GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
469             PostChannelDisconnectedEvent();
470         DcameraFinishAsyncTrace(DCAMERA_OPEN_DATA_SNAPSHOT, DCAMERA_OPEN_DATA_SNAPSHOT_TASKID);
471         return ret;
472     }
473 
474     ret = WaitforSessionResult();
475     if (ret != DCAMERA_OK) {
476         DHLOGE("waitfor session result failed ret: %d,"+
477             "devId: %s, dhId: %s", ret, GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str());
478         DcameraFinishAsyncTrace(DCAMERA_OPEN_DATA_SNAPSHOT, DCAMERA_OPEN_DATA_SNAPSHOT_TASKID);
479         return ret;
480     }
481     return DCAMERA_OK;
482 }
483 } // namespace DistributedHardware
484 } // namespace OHOS
485