1 /*
2 * Copyright (c) 2022-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 "dcamera_hdf_demo.h"
17
18 #include "distributed_hardware_log.h"
19 #include "metadata_utils.h"
20
21 namespace OHOS {
22 namespace DistributedHardware {
DcameraHdfDemo()23 DcameraHdfDemo::DcameraHdfDemo() {}
~DcameraHdfDemo()24 DcameraHdfDemo::~DcameraHdfDemo() {}
25
26 std::vector<int32_t> results_list_;
27
28 const int32_t METER_POINT_X = 305;
29 const int32_t METER_POINT_Y = 205;
30 const int32_t AF_REGIONS_X = 400;
31 const int32_t AF_REGIONS_Y = 200;
32 const int32_t FPS_RANGE = 30;
33
SetStreamInfo(StreamInfo & streamInfo,const std::shared_ptr<StreamCustomer> & streamCustomer,const int streamId,const StreamIntent intent)34 void DcameraHdfDemo::SetStreamInfo(StreamInfo& streamInfo,
35 const std::shared_ptr<StreamCustomer> &streamCustomer,
36 const int streamId, const StreamIntent intent)
37 {
38 constexpr uint32_t dataspace = 8;
39 constexpr uint32_t tunneledMode = 5;
40 sptr<OHOS::IBufferProducer> producer;
41
42 if (intent == OHOS::HDI::Camera::V1_0::PREVIEW) {
43 constexpr uint32_t width = CAMERA_PREVIEW_WIDTH;
44 constexpr uint32_t height = CAMERA_PREVIEW_HEIGHT;
45 streamInfo.width_ = width;
46 streamInfo.height_ = height;
47 producer = streamCustomer->CreateProducer(CAPTURE_PREVIEW, nullptr);
48 } else if (intent == OHOS::HDI::Camera::V1_0::STILL_CAPTURE) {
49 constexpr uint32_t width = CAMERA_CAPTURE_WIDTH;
50 constexpr uint32_t height = CAMERA_CAPTURE_HEIGHT;
51 streamInfo.width_ = width;
52 streamInfo.height_ = height;
53 streamInfo.encodeType_ = CAMERA_CAPTURE_ENCODE_TYPE;
54 producer = streamCustomer->CreateProducer(CAPTURE_SNAPSHOT, [this](void* addr, const uint32_t size) {
55 StoreImage(addr, size);
56 });
57 } else {
58 constexpr uint32_t width = CAMERA_VIDEO_WIDTH;
59 constexpr uint32_t height = CAMERA_VIDEO_HEIGHT;
60 streamInfo.width_ = width;
61 streamInfo.height_ = height;
62 streamInfo.encodeType_ = CAMERA_VIDEO_ENCODE_TYPE;
63 OpenVideoFile();
64 producer = streamCustomer->CreateProducer(CAPTURE_VIDEO, [this](void* addr, const uint32_t size) {
65 StoreVideo(addr, size);
66 });
67 }
68
69 streamInfo.streamId_ = streamId;
70 streamInfo.format_ = CAMERA_FORMAT;
71 streamInfo.dataspace_ = dataspace;
72 streamInfo.intent_ = intent;
73 streamInfo.tunneledMode_ = tunneledMode;
74
75 streamInfo.bufferQueue_ = sptr<BufferProducerSequenceable>(new BufferProducerSequenceable(producer));
76 streamInfo.bufferQueue_->producer_->SetQueueSize(8); // 8:set bufferQueue size
77 }
78
GetStreamOpt()79 void DcameraHdfDemo::GetStreamOpt()
80 {
81 int rc = 0;
82
83 if (streamOperator_ == nullptr) {
84 const sptr<IStreamOperatorCallback> streamOperatorCallback(new DemoStreamOperatorCallback());
85 rc = demoCameraDevice_->GetStreamOperator(streamOperatorCallback, streamOperator_);
86 if (rc != HDI::Camera::V1_0::NO_ERROR) {
87 DHLOGE("demo test: GetStreamOpt GetStreamOperator fail");
88 streamOperator_ = nullptr;
89 }
90 }
91 }
92
CaptureON(const int streamId,const int captureId,CaptureMode mode)93 RetCode DcameraHdfDemo::CaptureON(const int streamId,
94 const int captureId, CaptureMode mode)
95 {
96 DHLOGI("demo test: CaptureON enter streamId == %{public}d and captureId == %{public}d and mode == %{public}d",
97 streamId, captureId, mode);
98 std::lock_guard<std::mutex> l(metaDatalock_);
99 if (mode == CAPTURE_SNAPSHOT) {
100 constexpr double latitude = 27.987500; // dummy data: Qomolangma latitde
101 constexpr double longitude = 86.927500; // dummy data: Qomolangma longituude
102 constexpr double altitude = 8848.86; // dummy data: Qomolangma altitude
103 constexpr size_t entryCapacity = 100;
104 constexpr size_t dataCapacity = 2000;
105 captureSetting_ = std::make_shared<CameraSetting>(entryCapacity, dataCapacity);
106 captureQuality_ = OHOS_CAMERA_JPEG_LEVEL_HIGH;
107 captureOrientation_ = OHOS_CAMERA_JPEG_ROTATION_270;
108 mirrorSwitch_ = OHOS_CAMERA_MIRROR_ON;
109 gps_.push_back(latitude);
110 gps_.push_back(longitude);
111 gps_.push_back(altitude);
112 captureSetting_->addEntry(OHOS_JPEG_QUALITY, static_cast<void*>(&captureQuality_),
113 sizeof(captureQuality_));
114 captureSetting_->addEntry(OHOS_JPEG_ORIENTATION, static_cast<void*>(&captureOrientation_),
115 sizeof(captureOrientation_));
116 captureSetting_->addEntry(OHOS_CONTROL_CAPTURE_MIRROR, static_cast<void*>(&mirrorSwitch_),
117 sizeof(mirrorSwitch_));
118 captureSetting_->addEntry(OHOS_JPEG_GPS_COORDINATES, gps_.data(), gps_.size());
119 }
120
121 std::vector<uint8_t> setting;
122 bool iscapture = true;
123 OHOS::Camera::MetadataUtils::ConvertMetadataToVec(captureSetting_, setting);
124 captureInfo_.streamIds_ = {streamId};
125 if (mode == CAPTURE_SNAPSHOT) {
126 captureInfo_.captureSetting_ = setting;
127 iscapture = false;
128 } else {
129 captureInfo_.captureSetting_ = cameraAbility_;
130 iscapture = true;
131 }
132 captureInfo_.enableShutterCallback_ = false;
133 int rc = streamOperator_->Capture(captureId, captureInfo_, iscapture);
134 if (rc != HDI::Camera::V1_0::NO_ERROR) {
135 DHLOGE("demo test: CaptureStart Capture error");
136 streamOperator_->ReleaseStreams(captureInfo_.streamIds_);
137 return RC_ERROR;
138 }
139 DHLOGI("demo test: CaptureON exit");
140
141 return RC_OK;
142 }
143
CaptureOff(const int captureId,const CaptureMode mode)144 RetCode DcameraHdfDemo::CaptureOff(const int captureId, const CaptureMode mode)
145 {
146 int rc = 0;
147 DHLOGI("demo test: CaptureOff enter mode == %{public}d", mode);
148
149 if (streamOperator_ == nullptr) {
150 DHLOGE("demo test: CaptureOff streamOperator_ is nullptr");
151 return RC_ERROR;
152 }
153
154 if (mode == CAPTURE_PREVIEW) {
155 rc = streamOperator_->CancelCapture(captureId);
156 } else if (mode == CAPTURE_SNAPSHOT) {
157 rc = streamOperator_->CancelCapture(captureId);
158 } else if (mode == CAPTURE_VIDEO) {
159 rc = streamOperator_->CancelCapture(captureId);
160 close(videoFd_);
161 videoFd_ = -1;
162 }
163
164 if (rc != HDI::Camera::V1_0::NO_ERROR) {
165 DHLOGE("demo test: CaptureOff CancelCapture error mode %{public}d rc == %{public}d", mode, rc);
166 return RC_ERROR;
167 }
168 DHLOGI("demo test: CaptureOff exit");
169
170 return RC_OK;
171 }
172
CreateStreamInfo(const int streamId,std::shared_ptr<StreamCustomer> & streamCustomer,StreamIntent intent)173 RetCode DcameraHdfDemo::CreateStreamInfo(const int streamId, std::shared_ptr<StreamCustomer> &streamCustomer,
174 StreamIntent intent)
175 {
176 DHLOGI("demo test: CreateStream enter");
177 GetStreamOpt();
178 if (streamOperator_ == nullptr) {
179 DHLOGE("demo test: CreateStream GetStreamOpt() is nullptr");
180 return RC_ERROR;
181 }
182
183 StreamInfo streamInfo = {0};
184
185 SetStreamInfo(streamInfo, streamCustomer, streamId, intent);
186 if (streamInfo.bufferQueue_->producer_ == nullptr) {
187 DHLOGE("demo test: CreateStream CreateProducer(); is nullptr");
188 return RC_ERROR;
189 }
190 streamInfos_.push_back(streamInfo);
191 streamIds_.push_back(streamId);
192 return RC_OK;
193 }
194
CreateStream()195 RetCode DcameraHdfDemo::CreateStream()
196 {
197 int rc = 0;
198 DHLOGI("demo test: CreateStreams start");
199 rc = streamOperator_->CreateStreams(streamInfos_);
200 if (rc != HDI::Camera::V1_0::NO_ERROR) {
201 DHLOGE("demo test: CreateStream CreateStreams error");
202 return RC_ERROR;
203 }
204 DHLOGI("demo test: CommitStreams start");
205 rc = streamOperator_->CommitStreams(NORMAL, cameraAbility_);
206 if (rc != HDI::Camera::V1_0::NO_ERROR) {
207 DHLOGE("demo test: CreateStream CommitStreams error");
208 streamOperator_->ReleaseStreams(streamIds_);
209 return RC_ERROR;
210 }
211
212 DHLOGI("demo test: CreateStream exit");
213
214 return RC_OK;
215 }
216
InitCameraDevice()217 RetCode DcameraHdfDemo::InitCameraDevice()
218 {
219 int rc = 0;
220
221 DHLOGI("demo test: InitCameraDevice enter");
222
223 if (demoCameraHost_ == nullptr) {
224 DHLOGE("demo test: InitCameraDevice demoCameraHost_ == nullptr");
225 return RC_ERROR;
226 }
227
228 (void)demoCameraHost_->GetCameraIds(cameraIds_);
229 if (cameraIds_.empty()) {
230 return RC_ERROR;
231 }
232
233 const std::string cameraId = cameraIds_.front();
234 demoCameraHost_->GetCameraAbility(cameraId, cameraAbility_);
235
236 OHOS::Camera::MetadataUtils::ConvertVecToMetadata(cameraAbility_, ability_);
237
238 GetFaceDetectMode(ability_);
239 GetFocalLength(ability_);
240 GetAvailableFocusModes(ability_);
241 GetAvailableExposureModes(ability_);
242 GetExposureCompensationRange(ability_);
243 GetExposureCompensationSteps(ability_);
244 GetAvailableMeterModes(ability_);
245 GetAvailableFlashModes(ability_);
246 GetMirrorSupported(ability_);
247 GetStreamBasicConfigurations(ability_);
248 GetFpsRange(ability_);
249 GetCameraPosition(ability_);
250 GetCameraType(ability_);
251 GetCameraConnectionType(ability_);
252 GetFaceDetectMaxNum(ability_);
253
254 sptr<DemoCameraDeviceCallback> callback(new DemoCameraDeviceCallback());
255 rc = demoCameraHost_->OpenCamera(cameraIds_.front(), callback, demoCameraDevice_);
256 if (rc != HDI::Camera::V1_0::NO_ERROR || demoCameraDevice_ == nullptr) {
257 DHLOGE("demo test: InitCameraDevice OpenCamera failed");
258 return RC_ERROR;
259 }
260
261 DHLOGI("demo test: InitCameraDevice exit");
262
263 return RC_OK;
264 }
265
ReleaseCameraDevice()266 void DcameraHdfDemo::ReleaseCameraDevice()
267 {
268 if (demoCameraDevice_ != nullptr) {
269 DHLOGI("demo test: ReleaseCameraDevice close Device");
270 demoCameraDevice_->Close();
271 demoCameraDevice_ = nullptr;
272 }
273 }
274
InitSensors()275 RetCode DcameraHdfDemo::InitSensors()
276 {
277 int rc = 0;
278 DHLOGI("demo test: InitSensors enter");
279 if (demoCameraHost_ != nullptr) {
280 return RC_OK;
281 }
282
283 constexpr const char *demoServiceName = "distributed_camera_service";
284 demoCameraHost_ = ICameraHost::Get(demoServiceName, false);
285 if (demoCameraHost_ == nullptr) {
286 DHLOGE("demo test: ICameraHost::Get error");
287 return RC_ERROR;
288 }
289
290 hostCallback_ = sptr<DemoCameraHostCallback>(new DemoCameraHostCallback());
291 rc = demoCameraHost_->SetCallback(hostCallback_);
292 if (rc != HDI::Camera::V1_0::NO_ERROR) {
293 DHLOGE("demo test: demoCameraHost_->SetCallback(hostCallback_) error");
294 return RC_ERROR;
295 }
296
297 DHLOGI("demo test: InitSensors exit");
298
299 return RC_OK;
300 }
301
StoreImage(const void * bufStart,const uint32_t size) const302 void DcameraHdfDemo::StoreImage(const void *bufStart, const uint32_t size) const
303 {
304 DHLOGI("demo test:StoreImage size == %{public}d", size);
305 constexpr uint32_t pathLen = 64;
306 char path[pathLen] = {0};
307 char prefix[] = "/data/";
308
309 int imgFD = 0;
310 int ret;
311 struct timeval start = {};
312 gettimeofday(&start, nullptr);
313 if (sprintf_s(path, sizeof(path), "%spicture_%ld.jpeg", prefix, start.tv_usec) < 0) {
314 DHLOGE("sprintf_s error .....");
315 return;
316 }
317
318 imgFD = open(path, O_RDWR | O_CREAT, 00766); // 00766:file operate permission
319 if (imgFD == -1) {
320 DHLOGE("demo test:open image file error %{public}s.....", strerror(errno));
321 return;
322 }
323
324 ret = write(imgFD, bufStart, size);
325 if (ret == -1) {
326 DHLOGE("demo test:write image file error %{public}s.....", strerror(errno));
327 }
328
329 close(imgFD);
330 DHLOGI("demo test:StoreImage save success");
331 }
332
StoreVideo(const void * bufStart,const uint32_t size) const333 void DcameraHdfDemo::StoreVideo(const void *bufStart, const uint32_t size) const
334 {
335 int ret = 0;
336
337 ret = write(videoFd_, bufStart, size);
338 if (ret == -1) {
339 DHLOGE("demo test:write video file error %{public}s.....", strerror(errno));
340 }
341 DHLOGI("demo test:StoreVideo size == %{public}d", size);
342 }
343
OpenVideoFile()344 void DcameraHdfDemo::OpenVideoFile()
345 {
346 constexpr uint32_t pathLen = 64;
347 char path[pathLen] = {0};
348 char prefix[] = "/data/";
349 auto seconds = time(nullptr);
350 if (sprintf_s(path, sizeof(path), "%svideo%ld.h264", prefix, seconds) < 0) {
351 DHLOGE("%{public}s: sprintf failed", __func__);
352 return;
353 }
354 videoFd_ = open(path, O_RDWR | O_CREAT, 00766); // 00766:file operate permission
355 if (videoFd_ < 0) {
356 DHLOGE("demo test: StartVideo open %{public}s %{public}s failed", path, strerror(errno));
357 }
358 }
359
CreateStreams(const int streamIdSecond,StreamIntent intent)360 RetCode DcameraHdfDemo::CreateStreams(const int streamIdSecond, StreamIntent intent)
361 {
362 int rc = 0;
363 std::vector<StreamInfo> streamInfos;
364 std::vector<StreamInfo>().swap(streamInfos);
365
366 DHLOGI("demo test: CreateStreams streamIdSecond = %{public}d", streamIdSecond);
367 GetStreamOpt();
368 if (streamOperator_ == nullptr) {
369 DHLOGE("demo test: CreateStreams GetStreamOpt() is nullptr");
370 return RC_ERROR;
371 }
372
373 StreamInfo previewStreamInfo = {0};
374
375 SetStreamInfo(previewStreamInfo, streamCustomerPreview_, STREAM_ID_PREVIEW, OHOS::HDI::Camera::V1_0::PREVIEW);
376 if (previewStreamInfo.bufferQueue_->producer_ == nullptr) {
377 DHLOGE("demo test: CreateStream CreateProducer(); is nullptr");
378 return RC_ERROR;
379 }
380 streamInfos.push_back(previewStreamInfo);
381
382 StreamInfo secondStreamInfo = {0};
383
384 if (streamIdSecond == STREAM_ID_CAPTURE) {
385 SetStreamInfo(secondStreamInfo, streamCustomerCapture_, STREAM_ID_CAPTURE, intent);
386 } else {
387 SetStreamInfo(secondStreamInfo, streamCustomerVideo_, STREAM_ID_VIDEO, intent);
388 }
389
390 if (secondStreamInfo.bufferQueue_->producer_ == nullptr) {
391 DHLOGE("demo test: CreateStreams CreateProducer() secondStreamInfo is nullptr");
392 return RC_ERROR;
393 }
394 streamInfos.push_back(secondStreamInfo);
395
396 rc = streamOperator_->CreateStreams(streamInfos);
397 if (rc != HDI::Camera::V1_0::NO_ERROR) {
398 DHLOGE("demo test: CreateStream CreateStreams error");
399 return RC_ERROR;
400 }
401
402 rc = streamOperator_->CommitStreams(NORMAL, cameraAbility_);
403 if (rc != HDI::Camera::V1_0::NO_ERROR) {
404 DHLOGE("demo test: CreateStream CommitStreams error");
405 std::vector<int> streamIds = {STREAM_ID_PREVIEW, streamIdSecond};
406 streamOperator_->ReleaseStreams(streamIds);
407 return RC_ERROR;
408 }
409
410 return RC_OK;
411 }
412
CaptureOnDualStreams(const int streamIdSecond)413 RetCode DcameraHdfDemo::CaptureOnDualStreams(const int streamIdSecond)
414 {
415 int rc = 0;
416 DHLOGI("demo test: CaptuCaptureOnDualStreamsreON enter");
417
418 CaptureInfo previewCaptureInfo;
419 previewCaptureInfo.streamIds_ = {STREAM_ID_PREVIEW};
420 previewCaptureInfo.captureSetting_ = cameraAbility_;
421 previewCaptureInfo.enableShutterCallback_ = false;
422
423 rc = streamOperator_->Capture(CAPTURE_ID_PREVIEW, previewCaptureInfo, true);
424 if (rc != HDI::Camera::V1_0::NO_ERROR) {
425 DHLOGE("demo test: CaptureOnDualStreams preview Capture error");
426 streamOperator_->ReleaseStreams(previewCaptureInfo.streamIds_);
427 return RC_ERROR;
428 }
429
430 CaptureInfo secondCaptureInfo;
431 secondCaptureInfo.streamIds_ = {streamIdSecond};
432 secondCaptureInfo.captureSetting_ = cameraAbility_;
433 previewCaptureInfo.enableShutterCallback_ = false;
434
435 if (streamIdSecond == STREAM_ID_CAPTURE) {
436 rc = streamOperator_->Capture(CAPTURE_ID_CAPTURE, secondCaptureInfo, true);
437 if (rc != HDI::Camera::V1_0::NO_ERROR) {
438 DHLOGE("demo test: CaptureOnDualStreams CAPTURE_ID_CAPTURE error");
439 streamOperator_->ReleaseStreams(secondCaptureInfo.streamIds_);
440 return RC_ERROR;
441 }
442 } else {
443 rc = streamOperator_->Capture(CAPTURE_ID_VIDEO, secondCaptureInfo, true);
444 if (rc != HDI::Camera::V1_0::NO_ERROR) {
445 DHLOGE("demo test: CaptureOnDualStreams CAPTURE_ID_VIDEO error");
446 streamOperator_->ReleaseStreams(secondCaptureInfo.streamIds_);
447 return RC_ERROR;
448 }
449 }
450
451 DHLOGI("demo test: CaptuCaptureOnDualStreamsreON exit");
452
453 return RC_OK;
454 }
455
StartDualStreams(const int streamIdSecond)456 RetCode DcameraHdfDemo::StartDualStreams(const int streamIdSecond)
457 {
458 RetCode rc = RC_OK;
459
460 DHLOGI("demo test: StartDualStreams enter");
461
462 if (streamCustomerPreview_ == nullptr) {
463 streamCustomerPreview_ = std::make_shared<StreamCustomer>();
464 }
465 if (isPreviewOn_ != 0) {
466 return RC_OK;
467 }
468 isPreviewOn_ = 1;
469 if (streamIdSecond == STREAM_ID_CAPTURE) {
470 if (streamCustomerCapture_ == nullptr) {
471 streamCustomerCapture_ = std::make_shared<StreamCustomer>();
472 }
473
474 if (isCaptureOn_ == 0) {
475 isCaptureOn_ = 1;
476 rc = CreateStreams(streamIdSecond, OHOS::HDI::Camera::V1_0::STILL_CAPTURE);
477 if (rc != RC_OK) {
478 DHLOGE("demo test:StartPreviewStream CreateStreams error");
479 return RC_ERROR;
480 }
481 }
482 } else {
483 if (streamCustomerVideo_ == nullptr) {
484 streamCustomerVideo_ = std::make_shared<StreamCustomer>();
485 }
486
487 if (isVideoOn_ == 0) {
488 isVideoOn_ = 1;
489 rc = CreateStreams(streamIdSecond, OHOS::HDI::Camera::V1_0::VIDEO);
490 if (rc != RC_OK) {
491 DHLOGE("demo test:StartPreviewStream CreateStreams error");
492 return RC_ERROR;
493 }
494 }
495 }
496
497 DHLOGI("demo test: StartDualStreams exit");
498
499 return RC_OK;
500 }
501
StartCaptureStream()502 RetCode DcameraHdfDemo::StartCaptureStream()
503 {
504 RetCode rc = RC_OK;
505
506 DHLOGI("demo test: StartCaptureStream enter");
507 if (streamCustomerCapture_ == nullptr) {
508 streamCustomerCapture_ = std::make_shared<StreamCustomer>();
509 }
510
511 if (isCaptureOn_ == 0) {
512 isCaptureOn_ = 1;
513
514 rc = CreateStreamInfo(STREAM_ID_CAPTURE, streamCustomerCapture_, OHOS::HDI::Camera::V1_0::STILL_CAPTURE);
515 if (rc != RC_OK) {
516 DHLOGE("demo test:StartCaptureStream CreateStream error");
517 return RC_ERROR;
518 }
519 }
520
521 DHLOGI("demo test: StartCaptureStream exit");
522
523 return RC_OK;
524 }
525
StartVideoStream()526 RetCode DcameraHdfDemo::StartVideoStream()
527 {
528 RetCode rc = RC_OK;
529
530 DHLOGI("demo test: StartVideoStream enter");
531 if (streamCustomerVideo_ == nullptr) {
532 streamCustomerVideo_ = std::make_shared<StreamCustomer>();
533 }
534
535 if (isVideoOn_ == 0) {
536 isVideoOn_ = 1;
537
538 rc = CreateStreamInfo(STREAM_ID_VIDEO, streamCustomerVideo_, OHOS::HDI::Camera::V1_0::VIDEO);
539 if (rc != RC_OK) {
540 DHLOGE("demo test:StartVideoStream CreateStream error");
541 return RC_ERROR;
542 }
543 }
544
545 DHLOGI("demo test: StartVideoStream exit");
546
547 return RC_OK;
548 }
549
StartPreviewStream()550 RetCode DcameraHdfDemo::StartPreviewStream()
551 {
552 RetCode rc = RC_OK;
553
554 DHLOGI("demo test: StartPreviewStream enter");
555
556 if (streamCustomerPreview_ == nullptr) {
557 streamCustomerPreview_ = std::make_shared<StreamCustomer>();
558 }
559
560 if (isPreviewOn_ == 0) {
561 isPreviewOn_ = 1;
562
563 rc = CreateStreamInfo(STREAM_ID_PREVIEW, streamCustomerPreview_, OHOS::HDI::Camera::V1_0::PREVIEW);
564 if (rc != RC_OK) {
565 DHLOGE("demo test:StartPreviewStream CreateStream error");
566 return RC_ERROR;
567 }
568 }
569
570 DHLOGI("demo test: StartPreviewStream exit");
571
572 return RC_OK;
573 }
574
ReleaseAllStream()575 RetCode DcameraHdfDemo::ReleaseAllStream()
576 {
577 std::vector<int> streamIds;
578
579 DHLOGI("demo test: ReleaseAllStream enter");
580
581 if (isPreviewOn_ != 1) {
582 DHLOGE("demo test: ReleaseAllStream preview is not running");
583 return RC_ERROR;
584 }
585
586 if (isCaptureOn_ == 1) {
587 DHLOGI("demo test: ReleaseAllStream STREAM_ID_PREVIEW STREAM_ID_CAPTURE");
588 streamIds = {STREAM_ID_PREVIEW, STREAM_ID_CAPTURE};
589 streamOperator_->ReleaseStreams(streamIds);
590 } else {
591 DHLOGI("demo test: ReleaseAllStream STREAM_ID_PREVIEW STREAM_ID_VIDEO");
592 streamIds = {STREAM_ID_PREVIEW, STREAM_ID_VIDEO};
593 streamOperator_->ReleaseStreams(streamIds);
594 }
595
596 streamInfos_.clear();
597 streamIds_.clear();
598
599 isPreviewOn_ = 0;
600 isCaptureOn_ = 0;
601 isVideoOn_ = 0;
602
603 DHLOGI("demo test: ReleaseAllStream exit");
604
605 return RC_OK;
606 }
607
QuitDemo()608 void DcameraHdfDemo::QuitDemo()
609 {
610 ReleaseCameraDevice();
611 DHLOGI("demo test: QuitDemo done");
612 }
613
SetEnableResult()614 void DcameraHdfDemo::SetEnableResult()
615 {
616 DHLOGI("demo test: SetEnableResult enter");
617
618 results_list_.push_back(OHOS_CONTROL_EXPOSURE_MODE);
619 results_list_.push_back(OHOS_CONTROL_FOCUS_MODE);
620 demoCameraDevice_->EnableResult(results_list_);
621
622 DHLOGI("demo test: SetEnableResult exit");
623 }
624
SetAwbMode(const int mode) const625 void DcameraHdfDemo::SetAwbMode(const int mode) const
626 {
627 DHLOGI("demo test: SetAwbMode enter");
628
629 constexpr size_t entryCapacity = 100;
630 constexpr size_t dataCapacity = 2000;
631
632 std::shared_ptr<CameraSetting> metaData = std::make_shared<CameraSetting>(entryCapacity, dataCapacity);
633 std::vector<uint8_t> result;
634
635 const uint8_t awbMode = mode;
636 metaData->addEntry(OHOS_CONTROL_AWB_MODE, &awbMode, 1);
637 OHOS::Camera::MetadataUtils::ConvertMetadataToVec(metaData, result);
638 demoCameraDevice_->UpdateSettings(result);
639
640 DHLOGI("demo test: SetAwbMode exit");
641 }
642
SetAeExpo()643 void DcameraHdfDemo::SetAeExpo()
644 {
645 int32_t expo;
646
647 DHLOGI("demo test: SetAeExpo enter");
648
649 constexpr size_t entryCapacity = 100;
650 constexpr size_t dataCapacity = 2000;
651
652 std::shared_ptr<CameraSetting> metaData = std::make_shared<CameraSetting>(entryCapacity, dataCapacity);
653 std::vector<uint8_t> result;
654
655 if (aeStatus_) {
656 expo = 0xa0;
657 } else {
658 expo = 0x30;
659 }
660 aeStatus_ = !aeStatus_;
661 metaData->addEntry(OHOS_CONTROL_AE_EXPOSURE_COMPENSATION, &expo, 1);
662 OHOS::Camera::MetadataUtils::ConvertMetadataToVec(metaData, result);
663 demoCameraDevice_->UpdateSettings(result);
664
665 DHLOGI("demo test: SetAeExpo exit");
666 }
667
SetMetadata()668 void DcameraHdfDemo::SetMetadata()
669 {
670 DHLOGI("demo test: SetMetadata enter");
671 constexpr size_t entryCapacity = 100;
672 constexpr size_t dataCapacity = 2000;
673 std::shared_ptr<CameraSetting> metaData = std::make_shared<CameraSetting>(entryCapacity, dataCapacity);
674 SetAwbMode(OHOS_CAMERA_AWB_MODE_INCANDESCENT);
675
676 uint8_t aeMode = OHOS_CAMERA_EXPOSURE_MODE_CONTINUOUS_AUTO;
677 metaData->addEntry(OHOS_CONTROL_EXPOSURE_MODE, &aeMode, sizeof(aeMode));
678
679 int64_t exposureTime = 400;
680 metaData->addEntry(OHOS_SENSOR_EXPOSURE_TIME, &exposureTime, sizeof(exposureTime));
681
682 int32_t aeExposureCompensation = 4;
683 metaData->addEntry(OHOS_CONTROL_AE_EXPOSURE_COMPENSATION, &aeExposureCompensation, sizeof(aeExposureCompensation));
684
685 std::vector<int32_t> meterPoint;
686 meterPoint.push_back(METER_POINT_X);
687 meterPoint.push_back(METER_POINT_Y);
688 metaData->addEntry(OHOS_CONTROL_METER_POINT, meterPoint.data(), meterPoint.size());
689
690 uint8_t meterMode = OHOS_CAMERA_OVERALL_METERING;
691 metaData->addEntry(OHOS_CONTROL_METER_MODE, &meterMode, sizeof(meterMode));
692
693 uint8_t flashMode = OHOS_CAMERA_FLASH_MODE_ALWAYS_OPEN;
694 metaData->addEntry(OHOS_CONTROL_FLASH_MODE, &flashMode, sizeof(flashMode));
695
696 uint8_t mirror = OHOS_CAMERA_MIRROR_ON;
697 metaData->addEntry(OHOS_CONTROL_CAPTURE_MIRROR, &mirror, sizeof(mirror));
698
699 std::vector<int32_t> fpsRange;
700 fpsRange.push_back(FPS_RANGE);
701 fpsRange.push_back(FPS_RANGE);
702 metaData->addEntry(OHOS_CONTROL_FPS_RANGES, fpsRange.data(), fpsRange.size());
703
704 int32_t orientation = OHOS_CAMERA_JPEG_ROTATION_180;
705 metaData->addEntry(OHOS_JPEG_ORIENTATION, &orientation, sizeof(orientation));
706
707 uint8_t quality = OHOS_CAMERA_JPEG_LEVEL_HIGH;
708 metaData->addEntry(OHOS_JPEG_QUALITY, &quality, sizeof(quality));
709
710 uint8_t afMode = OHOS_CAMERA_FOCUS_MODE_AUTO;
711 metaData->addEntry(OHOS_CONTROL_FOCUS_MODE, &afMode, sizeof(afMode));
712
713 std::vector<int32_t> afRegions;
714 afRegions.push_back(AF_REGIONS_X);
715 afRegions.push_back(AF_REGIONS_Y);
716 metaData->addEntry(OHOS_CONTROL_AF_REGIONS, afRegions.data(), afRegions.size());
717
718 uint8_t faceMode = OHOS_CAMERA_FACE_DETECT_MODE_SIMPLE;
719 metaData->addEntry(OHOS_STATISTICS_FACE_DETECT_SWITCH, &faceMode, sizeof(faceMode));
720
721 std::vector<uint8_t> result;
722 OHOS::Camera::MetadataUtils::ConvertMetadataToVec(metaData, result);
723 demoCameraDevice_->UpdateSettings(result);
724
725 DHLOGI("demo test: SetMetadata exit");
726 }
727
FlashlightOnOff(bool onOff)728 void DcameraHdfDemo::FlashlightOnOff(bool onOff)
729 {
730 DHLOGI("demo test: FlashlightOnOff enter");
731
732 if (demoCameraHost_ == nullptr) {
733 DHLOGE("demo test: FlashlightOnOff demoCameraHost_ == nullptr");
734 return;
735 }
736
737 demoCameraHost_->SetFlashlight(cameraIds_.front(), onOff);
738
739 DHLOGI("demo test: FlashlightOnOff exit ");
740 }
741
StreamOffline(const int streamId)742 RetCode DcameraHdfDemo::StreamOffline(const int streamId)
743 {
744 int rc = 0;
745 constexpr size_t offlineDelayTime = 4;
746 DHLOGI("demo test: StreamOffline enter");
747 sptr<IStreamOperatorCallback> streamOperatorCallback(new DemoStreamOperatorCallback());
748 sptr<IOfflineStreamOperator> offlineStreamOperator = nullptr;
749 std::vector<int> streamIds;
750 streamIds.push_back(streamId);
751 rc = streamOperator_->ChangeToOfflineStream(streamIds, streamOperatorCallback, offlineStreamOperator);
752 if (rc != CamRetCode::METHOD_NOT_SUPPORTED) {
753 DHLOGE("demo test: StreamOffline ChangeToOfflineStream error");
754 return RC_ERROR;
755 }
756
757 CaptureOff(CAPTURE_ID_PREVIEW, CAPTURE_PREVIEW);
758 CaptureOff(CAPTURE_ID_CAPTURE, CAPTURE_SNAPSHOT);
759 sleep(1);
760 ReleaseAllStream();
761 ReleaseCameraDevice();
762 sleep(offlineDelayTime);
763
764 DHLOGI("demo test: begin to release offlne stream");
765 if (offlineStreamOperator != nullptr) {
766 rc = offlineStreamOperator->CancelCapture(CAPTURE_ID_CAPTURE);
767 if (rc != CamRetCode::METHOD_NOT_SUPPORTED) {
768 DHLOGE("demo test: StreamOffline offlineStreamOperator->CancelCapture error");
769 return RC_ERROR;
770 }
771
772 rc = offlineStreamOperator->Release();
773 if (rc != CamRetCode::METHOD_NOT_SUPPORTED) {
774 DHLOGE("demo test: StreamOffline offlineStreamOperator->Release() error");
775 return RC_ERROR;
776 }
777 }
778
779 DHLOGI("demo test: StreamOffline exit");
780
781 return RC_OK;
782 }
783
GetFaceDetectMode(std::shared_ptr<CameraAbility> & ability)784 RetCode DcameraHdfDemo::GetFaceDetectMode(std::shared_ptr<CameraAbility> &ability)
785 {
786 common_metadata_header_t* data = ability->get();
787 uint8_t faceDetectMode;
788 camera_metadata_item_t entry;
789 int ret = OHOS::Camera::FindCameraMetadataItem(data, OHOS_STATISTICS_FACE_DETECT_MODE, &entry);
790 if (ret != 0) {
791 DHLOGE("demo test: get OHOS_STATISTICS_FACE_DETECT_MODE error");
792 return RC_ERROR;
793 }
794 faceDetectMode = *(entry.data.u8);
795 DHLOGI("demo test: faceDetectMode %{public}d", faceDetectMode);
796 return RC_OK;
797 }
798
GetFocalLength(std::shared_ptr<CameraAbility> & ability)799 RetCode DcameraHdfDemo::GetFocalLength(std::shared_ptr<CameraAbility> &ability)
800 {
801 common_metadata_header_t* data = ability->get();
802 float focalLength = 0.0;
803 camera_metadata_item_t entry;
804 int ret = OHOS::Camera::FindCameraMetadataItem(data, OHOS_ABILITY_FOCAL_LENGTH, &entry);
805 if (ret != 0) {
806 DHLOGE("demo test: get OHOS_ABILITY_FOCAL_LENGTH error");
807 return RC_ERROR;
808 }
809 focalLength = *(entry.data.f);
810 DHLOGI("demo test: focalLength %{public}f", focalLength);
811 return RC_OK;
812 }
813
GetAvailableFocusModes(std::shared_ptr<CameraAbility> & ability)814 RetCode DcameraHdfDemo::GetAvailableFocusModes(std::shared_ptr<CameraAbility> &ability)
815 {
816 common_metadata_header_t* data = ability->get();
817 std::vector<uint8_t> focusMode;
818 camera_metadata_item_t entry;
819 int ret = OHOS::Camera::FindCameraMetadataItem(data, OHOS_ABILITY_FOCUS_MODES, &entry);
820 if (ret != 0) {
821 DHLOGE("demo test: get OHOS_ABILITY_FOCUS_MODES error");
822 return RC_ERROR;
823 }
824 uint32_t count = entry.count;
825 DHLOGI("demo test: count %{public}d", count);
826
827 for (uint32_t i = 0 ; i < count; i++) {
828 focusMode.push_back(*(entry.data.u8 + i));
829 }
830
831 for (auto it = focusMode.begin(); it != focusMode.end(); it++) {
832 DHLOGI("demo test: focusMode : %{public}d ", *it);
833 }
834 return RC_OK;
835 }
836
GetAvailableExposureModes(std::shared_ptr<CameraAbility> & ability)837 RetCode DcameraHdfDemo::GetAvailableExposureModes(std::shared_ptr<CameraAbility> &ability)
838 {
839 common_metadata_header_t* data = ability->get();
840 std::vector<uint8_t> exposureMode;
841 camera_metadata_item_t entry;
842 int ret = OHOS::Camera::FindCameraMetadataItem(data, OHOS_ABILITY_EXPOSURE_MODES, &entry);
843 if (ret != 0) {
844 DHLOGE("demo test: get OHOS_ABILITY_EXPOSURE_MODES error");
845 return RC_ERROR;
846 }
847 uint32_t count = entry.count;
848 DHLOGI("demo test: count %{public}d", count);
849
850 for (uint32_t i = 0 ; i < count; i++) {
851 exposureMode.push_back(*(entry.data.u8 + i));
852 }
853
854 for (auto it = exposureMode.begin(); it != exposureMode.end(); it++) {
855 DHLOGI("demo test: exposureMode : %{public}d ", *it);
856 }
857 return RC_OK;
858 }
859
GetExposureCompensationRange(std::shared_ptr<CameraAbility> & ability)860 RetCode DcameraHdfDemo::GetExposureCompensationRange(std::shared_ptr<CameraAbility> &ability)
861 {
862 common_metadata_header_t* data = ability->get();
863 std::vector<int32_t> exposureCompensationRange;
864 camera_metadata_item_t entry;
865 int ret = OHOS::Camera::FindCameraMetadataItem(data, OHOS_ABILITY_AE_COMPENSATION_RANGE, &entry);
866 if (ret != 0) {
867 DHLOGE("demo test: get OHOS_ABILITY_AE_COMPENSATION_RANGE error");
868 return RC_ERROR;
869 }
870
871 uint32_t count = entry.count;
872 DHLOGI("demo test: exposureCompensationRange count %{public}d", count);
873 for (uint32_t i = 0 ; i < count; i++) {
874 exposureCompensationRange.push_back(*(entry.data.i32 + i));
875 }
876
877 for (auto it = exposureCompensationRange.begin(); it != exposureCompensationRange.end(); it++) {
878 DHLOGI("demo test: exposureCompensationRange %{public}d ", *it);
879 }
880
881 return RC_OK;
882 }
883
GetExposureCompensationSteps(std::shared_ptr<CameraAbility> & ability)884 RetCode DcameraHdfDemo::GetExposureCompensationSteps(std::shared_ptr<CameraAbility> &ability)
885 {
886 common_metadata_header_t* data = ability->get();
887 camera_rational_t exposureCompensationSteps;
888 camera_metadata_item_t entry;
889 int ret = OHOS::Camera::FindCameraMetadataItem(data, OHOS_ABILITY_AE_COMPENSATION_STEP, &entry);
890 if (ret != 0) {
891 DHLOGE("demo test: get OHOS_ABILITY_AE_COMPENSATION_STEP error");
892 return RC_ERROR;
893 }
894 exposureCompensationSteps.numerator = entry.data.r->numerator;
895 exposureCompensationSteps.denominator = entry.data.r->denominator;
896 DHLOGI("demo test: steps.numerator %{public}d and steps.denominator %{public}d ",
897 exposureCompensationSteps.numerator, exposureCompensationSteps.denominator);
898 return RC_OK;
899 }
900
GetAvailableMeterModes(std::shared_ptr<CameraAbility> & ability)901 RetCode DcameraHdfDemo::GetAvailableMeterModes(std::shared_ptr<CameraAbility> &ability)
902 {
903 common_metadata_header_t* data = ability->get();
904 std::vector<uint8_t> meterModes;
905 camera_metadata_item_t entry;
906 int ret = OHOS::Camera::FindCameraMetadataItem(data, OHOS_ABILITY_METER_MODES, &entry);
907 if (ret != 0) {
908 DHLOGE("demo test: get OHOS_ABILITY_METER_MODES error");
909 return RC_ERROR;
910 }
911 uint32_t count = entry.count;
912 DHLOGI("demo test: count %{public}d", count);
913
914 for (uint32_t i = 0 ; i < count; i++) {
915 meterModes.push_back(*(entry.data.u8 + i));
916 }
917
918 for (auto it = meterModes.begin(); it != meterModes.end(); it++) {
919 DHLOGI("demo test: meterModes : %{public}d ", *it);
920 }
921 return RC_OK;
922 }
923
GetAvailableFlashModes(std::shared_ptr<CameraAbility> & ability)924 RetCode DcameraHdfDemo::GetAvailableFlashModes(std::shared_ptr<CameraAbility> &ability)
925 {
926 common_metadata_header_t* data = ability->get();
927 std::vector<uint8_t> flashModes;
928 camera_metadata_item_t entry;
929 int ret = OHOS::Camera::FindCameraMetadataItem(data, OHOS_ABILITY_FLASH_MODES, &entry);
930 if (ret != 0) {
931 DHLOGE("demo test: get OHOS_ABILITY_FLASH_MODES error");
932 return RC_ERROR;
933 }
934 uint32_t count = entry.count;
935 DHLOGI("demo test: count %{public}d", count);
936
937 for (uint32_t i = 0 ; i < count; i++) {
938 flashModes.push_back(*(entry.data.u8 + i));
939 }
940
941 for (auto it = flashModes.begin(); it != flashModes.end(); it++) {
942 DHLOGI("demo test: flashModes : %{public}d ", *it);
943 }
944 return RC_OK;
945 }
946
GetMirrorSupported(std::shared_ptr<CameraAbility> & ability)947 RetCode DcameraHdfDemo::GetMirrorSupported(std::shared_ptr<CameraAbility> &ability)
948 {
949 common_metadata_header_t* data = ability->get();
950 uint8_t mirrorSupported;
951 camera_metadata_item_t entry;
952 int ret = OHOS::Camera::FindCameraMetadataItem(data, OHOS_CONTROL_CAPTURE_MIRROR_SUPPORTED, &entry);
953 if (ret != 0) {
954 DHLOGE("demo test: get OHOS_CONTROL_CAPTURE_MIRROR_SUPPORTED error");
955 return RC_ERROR;
956 }
957 mirrorSupported = *(entry.data.u8);
958 DHLOGI("demo test: mirrorSupported %{public}d", mirrorSupported);
959 return RC_OK;
960 }
961
GetStreamBasicConfigurations(std::shared_ptr<CameraAbility> & ability)962 RetCode DcameraHdfDemo::GetStreamBasicConfigurations(std::shared_ptr<CameraAbility> &ability)
963 {
964 common_metadata_header_t* data = ability->get();
965 std::vector<int32_t> streamBasicConfigurations;
966 camera_metadata_item_t entry;
967 int ret = OHOS::Camera::FindCameraMetadataItem(data, OHOS_ABILITY_STREAM_AVAILABLE_BASIC_CONFIGURATIONS, &entry);
968 if (ret != 0) {
969 DHLOGE("demo test: get OHOS_ABILITY_STREAM_AVAILABLE_BASIC_CONFIGURATIONS error");
970 return RC_ERROR;
971 }
972
973 uint32_t count = entry.count;
974 DHLOGI("demo test: streamBasicConfigurations count %{public}d", count);
975 for (uint32_t i = 0 ; i < count; i++) {
976 streamBasicConfigurations.push_back(*(entry.data.i32 + i));
977 }
978
979 for (auto it = streamBasicConfigurations.begin(); it != streamBasicConfigurations.end(); it++) {
980 DHLOGI("demo test: streamBasicConfigurations %{public}d ", *it);
981 }
982
983 return RC_OK;
984 }
985
GetFpsRange(std::shared_ptr<CameraAbility> & ability)986 RetCode DcameraHdfDemo::GetFpsRange(std::shared_ptr<CameraAbility> &ability)
987 {
988 common_metadata_header_t* data = ability->get();
989 std::vector<int32_t> fpsRange;
990 camera_metadata_item_t entry;
991 int ret = OHOS::Camera::FindCameraMetadataItem(data, OHOS_ABILITY_FPS_RANGES, &entry);
992 if (ret != 0) {
993 DHLOGE("demo test: get OHOS_ABILITY_FPS_RANGES error");
994 return RC_ERROR;
995 }
996
997 uint32_t count = entry.count;
998 DHLOGI("demo test: fpsRange count %{public}d", count);
999 for (uint32_t i = 0 ; i < count; i++) {
1000 fpsRange.push_back(*(entry.data.i32 + i));
1001 }
1002
1003 for (auto it = fpsRange.begin(); it != fpsRange.end(); it++) {
1004 DHLOGI("demo test: fpsRange %{public}d ", *it);
1005 }
1006
1007 return RC_OK;
1008 }
1009
GetCameraPosition(std::shared_ptr<CameraAbility> & ability)1010 RetCode DcameraHdfDemo::GetCameraPosition(std::shared_ptr<CameraAbility> &ability)
1011 {
1012 common_metadata_header_t* data = ability->get();
1013 uint8_t cameraPosition;
1014 camera_metadata_item_t entry;
1015 int ret = OHOS::Camera::FindCameraMetadataItem(data, OHOS_ABILITY_CAMERA_POSITION, &entry);
1016 if (ret != 0) {
1017 DHLOGE("demo test: get OHOS_ABILITY_CAMERA_POSITION error");
1018 return RC_ERROR;
1019 }
1020
1021 cameraPosition= *(entry.data.u8);
1022 DHLOGI("demo test: cameraPosition %{public}d", cameraPosition);
1023 return RC_OK;
1024 }
1025
GetCameraType(std::shared_ptr<CameraAbility> & ability)1026 RetCode DcameraHdfDemo::GetCameraType(std::shared_ptr<CameraAbility> &ability)
1027 {
1028 common_metadata_header_t* data = ability->get();
1029 uint8_t cameraType;
1030 camera_metadata_item_t entry;
1031 int ret = OHOS::Camera::FindCameraMetadataItem(data, OHOS_ABILITY_CAMERA_TYPE, &entry);
1032 if (ret != 0) {
1033 DHLOGE("demo test: get OHOS_ABILITY_CAMERA_TYPE error");
1034 return RC_ERROR;
1035 }
1036
1037 cameraType= *(entry.data.u8);
1038 DHLOGI("demo test: cameraType %{public}d", cameraType);
1039 return RC_OK;
1040 }
1041
GetCameraConnectionType(std::shared_ptr<CameraAbility> & ability)1042 RetCode DcameraHdfDemo::GetCameraConnectionType(std::shared_ptr<CameraAbility> &ability)
1043 {
1044 common_metadata_header_t* data = ability->get();
1045 uint8_t cameraConnectionType;
1046 camera_metadata_item_t entry;
1047 int ret = OHOS::Camera::FindCameraMetadataItem(data, OHOS_ABILITY_CAMERA_CONNECTION_TYPE, &entry);
1048 if (ret != 0) {
1049 DHLOGE("demo test: get OHOS_ABILITY_CAMERA_CONNECTION_TYPE error");
1050 return RC_ERROR;
1051 }
1052
1053 cameraConnectionType= *(entry.data.u8);
1054 DHLOGI("demo test: cameraConnectionType %{public}d", cameraConnectionType);
1055 return RC_OK;
1056 }
1057
GetFaceDetectMaxNum(std::shared_ptr<CameraAbility> & ability)1058 RetCode DcameraHdfDemo::GetFaceDetectMaxNum(std::shared_ptr<CameraAbility> &ability)
1059 {
1060 common_metadata_header_t* data = ability->get();
1061 uint8_t faceDetectMaxNum;
1062 camera_metadata_item_t entry;
1063 int ret = OHOS::Camera::FindCameraMetadataItem(data, OHOS_STATISTICS_FACE_DETECT_MAX_NUM, &entry);
1064 if (ret != 0) {
1065 DHLOGE("demo test: get OHOS_STATISTICS_FACE_DETECT_MAX_NUM error");
1066 return RC_ERROR;
1067 }
1068 faceDetectMaxNum = *(entry.data.u8);
1069 DHLOGI("demo test: faceDetectMaxNum %{public}d ", faceDetectMaxNum);
1070 return RC_OK;
1071 }
1072
OnError(ErrorType type,int32_t errorCode)1073 int32_t DemoCameraDeviceCallback::OnError(ErrorType type, int32_t errorCode)
1074 {
1075 DHLOGI("demo test: OnError type : %{public}d, errorCode : %{public}d", type, errorCode);
1076 return RC_OK;
1077 }
1078
OnResult(uint64_t timestamp,const std::vector<uint8_t> & result)1079 int32_t DemoCameraDeviceCallback::OnResult(uint64_t timestamp, const std::vector<uint8_t>& result)
1080 {
1081 DHLOGI("demo test: OnResult timestamp : %{public}" PRIu64, timestamp);
1082 std::shared_ptr<OHOS::Camera::CameraMetadata> updateSettings;
1083
1084 OHOS::Camera::MetadataUtils::ConvertVecToMetadata(result, updateSettings);
1085 for (auto it = results_list_.cbegin(); it != results_list_.cend(); it++) {
1086 switch (*it) {
1087 case OHOS_CONTROL_FOCUS_MODE: {
1088 common_metadata_header_t* data = updateSettings->get();
1089 uint8_t focusMode;
1090 camera_metadata_item_t entry;
1091 int ret = OHOS::Camera::FindCameraMetadataItem(data, OHOS_CONTROL_FOCUS_MODE, &entry);
1092 if (ret != 0) {
1093 DHLOGE("demo test: get OHOS_CONTROL_FOCUS_MODE error");
1094 return RC_ERROR;
1095 }
1096 focusMode = *(entry.data.u8);
1097 DHLOGI("demo test: focusMode %{public}d", focusMode);
1098 break;
1099 }
1100 case OHOS_CONTROL_EXPOSURE_MODE: {
1101 common_metadata_header_t* data = updateSettings->get();
1102 uint8_t exposureMode;
1103 camera_metadata_item_t entry;
1104 int ret = OHOS::Camera::FindCameraMetadataItem(data, OHOS_CONTROL_EXPOSURE_MODE, &entry);
1105 if (ret != 0) {
1106 return RC_ERROR;
1107 }
1108 exposureMode = *(entry.data.u8);
1109 DHLOGI("demo test: exposureMode %{public}d", exposureMode);
1110 break;
1111 }
1112 default:
1113 return RC_ERROR;
1114 }
1115 }
1116
1117 return RC_OK;
1118 }
1119
OnCameraStatus(const std::string & cameraId,CameraStatus status)1120 int32_t DemoCameraHostCallback::OnCameraStatus(const std::string& cameraId, CameraStatus status)
1121 {
1122 DHLOGI("%{public}s, enter. cameraId = %{public}s, status = %{public}d",
1123 __func__, cameraId.c_str(), static_cast<int>(status));
1124 return RC_OK;
1125 }
1126
OnFlashlightStatus(const std::string & cameraId,FlashlightStatus status)1127 int32_t DemoCameraHostCallback::OnFlashlightStatus(const std::string& cameraId, FlashlightStatus status)
1128 {
1129 DHLOGI("%{public}s, enter. cameraId = %{public}s, status = %{public}d",
1130 __func__, cameraId.c_str(), static_cast<int>(status));
1131 return RC_OK;
1132 }
1133
OnCameraEvent(const std::string & cameraId,CameraEvent event)1134 int32_t DemoCameraHostCallback::OnCameraEvent(const std::string& cameraId, CameraEvent event)
1135 {
1136 DHLOGI("%{public}s, enter. cameraId = %{public}s, event = %{public}d",
1137 __func__, cameraId.c_str(), static_cast<int>(event));
1138 return RC_OK;
1139 }
1140
OnCaptureStarted(int32_t captureId,const std::vector<int32_t> & streamIds)1141 int32_t DemoStreamOperatorCallback::OnCaptureStarted(int32_t captureId, const std::vector<int32_t>& streamIds)
1142 {
1143 DHLOGI("%{public}s, enter. captureId = %{public}d, streamIds size = %{public}zu", __func__, captureId,
1144 streamIds.size());
1145 return RC_OK;
1146 }
1147
OnCaptureEnded(int32_t captureId,const std::vector<CaptureEndedInfo> & infos)1148 int32_t DemoStreamOperatorCallback::OnCaptureEnded(int32_t captureId, const std::vector<CaptureEndedInfo>& infos)
1149 {
1150 DHLOGI("%{public}s, enter. captureId = %{public}d, infos size = %{public}zu", __func__, captureId, infos.size());
1151 return RC_OK;
1152 }
1153
OnCaptureError(int32_t captureId,const std::vector<CaptureErrorInfo> & infos)1154 int32_t DemoStreamOperatorCallback::OnCaptureError(int32_t captureId, const std::vector<CaptureErrorInfo>& infos)
1155 {
1156 DHLOGI("%{public}s, enter. captureId = %{public}d, infos size = %{public}zu", __func__, captureId, infos.size());
1157 return RC_OK;
1158 }
1159
OnFrameShutter(int32_t captureId,const std::vector<int32_t> & streamIds,uint64_t timestamp)1160 int32_t DemoStreamOperatorCallback::OnFrameShutter(int32_t captureId,
1161 const std::vector<int32_t>& streamIds, uint64_t timestamp)
1162 {
1163 DHLOGI("%{public}s, enter. captureId = %{public}d, streamIds size = %{public}zu, timestamp = %{public}" PRIu64,
1164 __func__, captureId, streamIds.size(), timestamp);
1165 return RC_OK;
1166 }
1167 }
1168 } // namespace OHOS::DistributedHardware