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