• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file expected 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 "hdi_common_v1_1.h"
17 #include "camera.h"
18 #include "video_key_info.h"
19 
20 namespace OHOS::Camera {
21 Test::ResultCallback Test::resultCallback_ = 0;
22 
GetCurrentLocalTimeStamp()23 uint64_t Test::GetCurrentLocalTimeStamp()
24 {
25     std::chrono::time_point<std::chrono::system_clock, std::chrono::milliseconds> tp =
26         std::chrono::time_point_cast<std::chrono::milliseconds>(std::chrono::system_clock::now());
27     auto tmp = std::chrono::duration_cast<std::chrono::milliseconds>(tp.time_since_epoch());
28     return static_cast<uint64_t>(tmp.count());
29 }
30 
DumpImageFile(int streamId,std::string suffix,const void * buffer,int32_t size)31 int32_t Test::DumpImageFile(int streamId, std::string suffix, const void* buffer, int32_t size)
32 {
33     if (imageDataSaveSwitch == SWITCH_OFF) {
34         return 0;
35     }
36     if (streamId < 0) {
37         CAMERA_LOGE("ivalid stream id: %{public}d", streamId);
38         return -1;
39     }
40     char mkdirCmd[PATH_MAX] = {0};
41     char path[PATH_MAX] = {0};
42     int ret = sprintf_s(mkdirCmd, sizeof(mkdirCmd) / sizeof(mkdirCmd[0]),
43         "mkdir -p /data/stream-%d", streamId);
44     if (ret < 0) {
45         return -1;
46     }
47     system(mkdirCmd);
48     ret = sprintf_s(path, sizeof(path) / sizeof(path[0]), "/data/stream-%d/%lld.%s",
49         streamId, GetCurrentLocalTimeStamp(), suffix.c_str());
50     if (ret < 0) {
51         return -1;
52     }
53 
54     int imgFd = open(path, O_RDWR | O_CREAT, 00766);
55     if (imgFd == -1) {
56         CAMERA_LOGE("open file failed, errno: %{public}s", strerror(errno));
57         return -1;
58     }
59 
60     ret = write(imgFd, buffer, size);
61     if (ret == -1) {
62         CAMERA_LOGE("write file failed, error: %{public}s", strerror(errno));
63         close(imgFd);
64         return -1;
65     }
66     close(imgFd);
67     return 0;
68 }
69 
Init()70 void Test::Init()
71 {
72     uint32_t mainVer;
73     uint32_t minVer;
74     int32_t ret;
75     if (serviceV1_1 == nullptr) {
76         serviceV1_1 = OHOS::HDI::Camera::V1_1::ICameraHost::Get("camera_service", false);
77         if (serviceV1_1 == nullptr) {
78             CAMERA_LOGE("V1_1::IcameraHost get failed");
79             return;
80         } else {
81             CAMERA_LOGI("ICameraHost get success");
82             ret = serviceV1_1->GetVersion(mainVer, minVer);
83             if (ret != 0) {
84                 CAMERA_LOGE("V1_1::ICameraHost get version failed, ret = %{public}d", ret);
85             } else {
86                 CAMERA_LOGE("V1_1::ICameraHost get version success, %{public}d, %{public}d", mainVer, minVer);
87             }
88         }
89         ASSERT_TRUE(serviceV1_1 != nullptr);
90         service = static_cast<OHOS::HDI::Camera::V1_0::ICameraHost *>(serviceV1_1.GetRefPtr());
91     }
92 
93     hostCallback = new TestCameraHostCallback();
94     service->SetCallback(hostCallback);
95 }
96 
Open()97 void Test::Open()
98 {
99     if (cameraDevice == nullptr) {
100         service->GetCameraIds(cameraIds);
101         if (cameraIds.size() == 0) {
102             CAMERA_LOGE("camera device list empty");
103         }
104         ASSERT_TRUE(cameraIds.size() != 0);
105         GetCameraMetadata();
106         deviceCallback = new OHOS::Camera::Test::DemoCameraDeviceCallback();
107 
108         ASSERT_TRUE(serviceV1_1 != nullptr);
109         rc = serviceV1_1->OpenCamera_V1_1(cameraIds.front(), deviceCallback, cameraDeviceV1_1);
110         if (rc != HDI::Camera::V1_0::NO_ERROR || cameraDeviceV1_1 == nullptr) {
111             CAMERA_LOGE("openCamera V1_1 failed, rc = %{public}d", rc);
112             return;
113         }
114         ASSERT_TRUE(cameraDeviceV1_1 != nullptr);
115         cameraDevice = static_cast<OHOS::HDI::Camera::V1_0::ICameraDevice *>(cameraDeviceV1_1.GetRefPtr());
116         CAMERA_LOGI("OpenCamera V1_1 success");
117     }
118 }
119 
GetCameraMetadata()120 void Test::GetCameraMetadata()
121 {
122     rc = service->GetCameraAbility(cameraIds.front(), abilityVec);
123     if (rc != HDI::Camera::V1_0::NO_ERROR) {
124         CAMERA_LOGE("GetCameraAbility failed, rc = %{public}d", rc);
125     }
126     MetadataUtils::ConvertVecToMetadata(abilityVec, ability);
127 
128     common_metadata_header_t* data = ability->get();
129     camera_metadata_item_t entry;
130     int ret = FindCameraMetadataItem(data, OHOS_CONTROL_AE_AVAILABLE_MODES, &entry);
131     if (ret == 0) {
132         CAMERA_LOGI("get OHOS_CONTROL_AE_AVAILABLE_MODES success");
133     }
134 }
135 
Close()136 void Test::Close()
137 {
138     if (cameraDevice != nullptr) {
139         cameraDevice->Close();
140         cameraDevice = nullptr;
141     }
142 }
143 
DefaultPreview(std::shared_ptr<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1> & infos)144 void Test::DefaultPreview(
145     std::shared_ptr<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1> &infos)
146 {
147     infos->v1_0.streamId_ = streamIdPreview;
148     infos->v1_0.width_ = previewWidth;
149     infos->v1_0.height_ = previewHeight;
150     infos->v1_0.format_ = previewFormat;
151     infos->v1_0.dataspace_ = UT_DATA_SIZE;
152     infos->v1_0.intent_ = StreamIntent::PREVIEW;
153     infos->v1_0.tunneledMode_ = UT_TUNNEL_MODE;
154 }
155 
DefaultCapture(std::shared_ptr<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1> & infos)156 void Test::DefaultCapture(
157     std::shared_ptr<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1> &infos)
158 {
159     infos->v1_0.streamId_ = streamIdCapture;
160     infos->v1_0.width_ = captureWidth;
161     infos->v1_0.height_ = captureHeight;
162     infos->v1_0.format_ = snapshotFormat;
163     infos->v1_0.dataspace_ = UT_DATA_SIZE;
164     infos->v1_0.intent_ = StreamIntent::STILL_CAPTURE;
165     infos->v1_0.tunneledMode_ = UT_TUNNEL_MODE;
166 }
167 
DefaultInfosPreview(std::shared_ptr<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1> & infos)168 void Test::DefaultInfosPreview(
169     std::shared_ptr<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1> &infos)
170 {
171     DefaultPreview(infos);
172     std::shared_ptr<StreamConsumer> consumer_pre = std::make_shared<StreamConsumer>();
173     infos->v1_0.bufferQueue_ = consumer_pre->CreateProducerSeq([this](void* addr, uint32_t size) {
174         DumpImageFile(streamIdPreview, "yuv", addr, size);
175     });
176     infos->v1_0.bufferQueue_->producer_->SetQueueSize(UT_DATA_SIZE);
177     consumerMap_[StreamIntent::PREVIEW] = consumer_pre;
178 }
179 
DefaultInfosCapture(std::shared_ptr<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1> & infos)180 void Test::DefaultInfosCapture(
181     std::shared_ptr<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1> &infos)
182 {
183     DefaultCapture(infos);
184     std::shared_ptr<StreamConsumer> consumer_capture = std::make_shared<StreamConsumer>();
185     infos->v1_0.bufferQueue_ = consumer_capture->CreateProducerSeq([this](void* addr, uint32_t size) {
186         DumpImageFile(streamIdCapture, "jpeg", addr, size);
187     });
188     infos->v1_0.bufferQueue_->producer_->SetQueueSize(UT_DATA_SIZE);
189     consumerMap_[StreamIntent::STILL_CAPTURE] = consumer_capture;
190 }
191 
DefaultInfosVideo(std::shared_ptr<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1> & infos)192 void Test::DefaultInfosVideo(
193     std::shared_ptr<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1> &infos)
194 {
195     infos->v1_0.streamId_ = streamIdVideo;
196     infos->v1_0.width_ = videoWidth;
197     infos->v1_0.height_ = videoHeight;
198     infos->v1_0.format_ = videoFormat;
199     infos->v1_0.dataspace_ = UT_DATA_SIZE;
200     infos->v1_0.intent_ = StreamIntent::VIDEO;
201     infos->v1_0.encodeType_ = ENCODE_TYPE_H265;
202     infos->v1_0.tunneledMode_ = UT_TUNNEL_MODE;
203     std::shared_ptr<StreamConsumer> consumer_video = std::make_shared<StreamConsumer>();
204     infos->v1_0.bufferQueue_ = consumer_video->CreateProducerSeq([this](void* addr, uint32_t size) {
205         DumpImageFile(streamIdPreview, "yuv", addr, size);
206     });
207     infos->v1_0.bufferQueue_->producer_->SetQueueSize(UT_DATA_SIZE);
208     consumerMap_[StreamIntent::VIDEO] = consumer_video;
209 }
210 
DefaultInfosAnalyze(std::shared_ptr<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1> & infos)211 void Test::DefaultInfosAnalyze(
212     std::shared_ptr<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1> &infos)
213 {
214     infos->v1_0.streamId_ = streamIdAnalyze;
215     infos->v1_0.width_ = analyzeWidth;
216     infos->v1_0.height_ = analyzeHeight;
217     infos->v1_0.format_ = analyzeFormat;
218     infos->v1_0.dataspace_ = UT_DATA_SIZE;
219     infos->v1_0.intent_ = StreamIntent::ANALYZE;
220     infos->v1_0.tunneledMode_ = UT_TUNNEL_MODE;
221 
222     std::shared_ptr<StreamConsumer> consumer_analyze = std::make_shared<StreamConsumer>();
223     infos->v1_0.bufferQueue_ = consumer_analyze->CreateProducerSeq([this](void* addr, uint32_t size) {
224         common_metadata_header_t *data = static_cast<common_metadata_header_t *>(addr);
225         camera_metadata_item_t entry = {};
226 
227         int ret = FindCameraMetadataItem(data, OHOS_STATISTICS_FACE_IDS, &entry);
228         if (ret == 0) {
229             for (size_t i = 0; i < entry.count; i++) {
230                 int id = entry.data.i32[i];
231                 CAMERA_LOGI("Face ids : %{public}d", id);
232             }
233         }
234 
235         ret = FindCameraMetadataItem(data, OHOS_STATISTICS_FACE_RECTANGLES, &entry);
236         if (ret == 0) {
237             for (size_t i = 0; i < entry.count; i++) {
238                 int id = entry.data.i32[i];
239                 CAMERA_LOGI("Face rectangles : %{public}d", id);
240             }
241         }
242     });
243     infos->v1_0.bufferQueue_->producer_->SetQueueSize(UT_DATA_SIZE);
244     consumerMap_[StreamIntent::ANALYZE] = consumer_analyze;
245 }
246 
StartStream(std::vector<StreamIntent> intents)247 void Test::StartStream(std::vector<StreamIntent> intents)
248 {
249     streamOperatorCallback = new TestStreamOperatorCallback();
250     uint32_t mainVersion = 1;
251     uint32_t minVersion = 0;
252     rc = cameraDeviceV1_1->GetStreamOperator_V1_1(streamOperatorCallback, streamOperator_V1_1);
253     if (rc == HDI::Camera::V1_0::NO_ERROR) {
254         rc = streamOperator_V1_1->GetVersion(mainVersion, minVersion);
255         streamOperator = static_cast<OHOS::HDI::Camera::V1_0::IStreamOperator *>(streamOperator_V1_1.GetRefPtr());
256         if (rc != HDI::Camera::V1_0::NO_ERROR) {
257             CAMERA_LOGE("StreamOperator V1_1 get version failed, rc = %{public}d", rc);
258         } else {
259             CAMERA_LOGI("StreamOperator V1_1 get version success, %{public}u, %{public}u",
260                 mainVersion, minVersion);
261         }
262         CAMERA_LOGI("GetStreamOperator success");
263     } else {
264         CAMERA_LOGE("GetStreamOperator fail, rc = %{public}d", rc);
265     }
266     streamInfoPre = std::make_shared<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>();
267     streamInfoVideo = std::make_shared<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>();
268     streamInfoCapture = std::make_shared<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>();
269     streamInfoAnalyze = std::make_shared<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>();
270 
271     for (auto& intent : intents) {
272         if (intent == StreamIntent::PREVIEW) {
273             DefaultInfosPreview(streamInfoPre);
274             streamInfos.push_back(*streamInfoPre);
275         } else if (intent == StreamIntent::VIDEO) {
276             DefaultInfosVideo(streamInfoVideo);
277             streamInfos.push_back(*streamInfoVideo);
278         } else if (intent == StreamIntent::ANALYZE) {
279             DefaultInfosAnalyze(streamInfoAnalyze);
280             streamInfos.push_back(*streamInfoAnalyze);
281         } else {
282             DefaultInfosCapture(streamInfoCapture);
283             streamInfos.push_back(*streamInfoCapture);
284         }
285     }
286 
287     rc = streamOperator_V1_1->CreateStreams_V1_1(streamInfos);
288     EXPECT_EQ(false, rc != HDI::Camera::V1_0::NO_ERROR);
289     rc = streamOperator_V1_1->CommitStreams(OperationMode::NORMAL, abilityVec);
290     EXPECT_EQ(false, rc != HDI::Camera::V1_0::NO_ERROR);
291     sleep(1);
292     std::vector<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>().swap(streamInfos);
293 }
294 
StartCapture(int streamId,int captureId,bool shutterCallback,bool isStreaming)295 void Test::StartCapture(int streamId, int captureId, bool shutterCallback, bool isStreaming)
296 {
297     captureInfo = std::make_shared<CaptureInfo>();
298     captureInfo->streamIds_ = {streamId};
299     captureInfo->captureSetting_ = abilityVec;
300     captureInfo->enableShutterCallback_ = shutterCallback;
301     if (streamOperator_V1_1 != nullptr) {
302         rc = (CamRetCode)streamOperator_V1_1->Capture(captureId, *captureInfo, isStreaming);
303     } else {
304     rc = (CamRetCode)streamOperator->Capture(captureId, *captureInfo, isStreaming);
305     }
306 
307     EXPECT_EQ(true, rc == HDI::Camera::V1_0::NO_ERROR);
308     if (rc == HDI::Camera::V1_0::NO_ERROR) {
309         CAMERA_LOGI("check Capture: Capture success, %{public}d", captureId);
310     } else {
311         std::cout << "rc = " << rc << std::endl;
312         CAMERA_LOGE("check Capture: Capture fail, rc = %{public}d", rc);
313     }
314     sleep(UT_SLEEP_TIME);
315 }
316 
StopStream(std::vector<int> & captureIds,std::vector<int> & streamIds)317 void Test::StopStream(std::vector<int>& captureIds, std::vector<int>& streamIds)
318 {
319     if (sizeof(captureIds) > 0) {
320         for (auto &captureId : captureIds) {
321             if (streamOperator_V1_1 != nullptr) {
322                 rc = streamOperator_V1_1->CancelCapture(captureId);
323             } else {
324                 rc = streamOperator->CancelCapture(captureId);
325             }
326             EXPECT_EQ(true, rc == HDI::Camera::V1_0::NO_ERROR);
327             if (rc == HDI::Camera::V1_0::NO_ERROR) {
328                 CAMERA_LOGI("check Capture: CancelCapture success, %{public}d", captureId);
329             } else {
330                 CAMERA_LOGE("check Capture: CancelCapture fail, rc = %{public}d, captureId = %{public}d",
331                     rc, captureId);
332             }
333         }
334     }
335     if (sizeof(streamIds) > 0) {
336         if (streamOperator_V1_1 != nullptr) {
337             rc = streamOperator_V1_1->ReleaseStreams(streamIds);
338         } else {
339             rc = streamOperator->ReleaseStreams(streamIds);
340         }
341         EXPECT_EQ(true, rc == HDI::Camera::V1_0::NO_ERROR);
342         if (rc == HDI::Camera::V1_0::NO_ERROR) {
343             CAMERA_LOGI("check Capture: ReleaseStream success");
344         } else {
345             CAMERA_LOGE("check Capture: ReleaseStreams fail, rc = %{public}d", rc);
346         }
347     }
348 }
349 
CalculateFps(int64_t timestamp,int32_t streamId)350 void Test::StreamConsumer::CalculateFps(int64_t timestamp, int32_t streamId)
351 {
352     if (isFirstCalculateFps_) {
353         if ((timestamp - intervalTimestamp_) >= interval_) {
354             int64_t timeInterval = timestamp - intervalTimestamp_;
355             if (timeInterval != 0) {
356                 float fps = (int64_t)(100000000000 * timestampCount_ / timeInterval) / 100.0;
357                 CAMERA_LOGI("Calculate FPS success, streamId: %{public}d, Fps:%{public}f", streamId, fps);
358                 interval_ = ONESECOND_OF_MICROSECOND_UNIT;
359             } else {
360                 CAMERA_LOGE("Calculate FPS error timeInerval is 0");
361             }
362         }
363     } else {
364         intervalTimestamp_ = timestamp;
365         isFirstCalculateFps_ = true;
366     }
367     if ((timestamp - intervalTimestamp_) >= ONESECOND_OF_MICROSECOND_UNIT * UT_SECOND_TIMES) {
368         intervalTimestamp_ = timestamp;
369         timestampCount_ = 0;
370         interval_ = ONESECOND_OF_MICROSECOND_UNIT;
371     }
372     timestampCount_++;
373 }
374 
GetTimeStamp(int64_t * g_timestamp,uint32_t lenght,int64_t timestamp,int32_t gotSize)375 void Test::StreamConsumer::GetTimeStamp(int64_t *g_timestamp, uint32_t lenght, int64_t timestamp, int32_t gotSize)
376 {
377     if (gotSize != UT_PREVIEW_SIZE) {
378         if (g_timestamp[0] == 0) {
379             g_timestamp[0] = timestamp;
380         } else {
381             g_timestamp[1] = timestamp;
382         }
383     }
384 }
385 
CreateProducer(std::function<void (void *,uint32_t)> callback)386 OHOS::sptr<OHOS::IBufferProducer> Test::StreamConsumer::CreateProducer(std::function<void(void*, uint32_t)> callback)
387 {
388     consumer_ = OHOS::IConsumerSurface::Create();
389     if (consumer_ == nullptr) {
390         return nullptr;
391     }
392     sptr<IBufferConsumerListener> listener = new TestBufferConsumerListener();
393     consumer_->RegisterConsumerListener(listener);
394     auto producer = consumer_->GetProducer();
395     if (producer == nullptr) {
396         return nullptr;
397     }
398 
399     callback_ = callback;
400     consumerThread_ = new std::thread([this, listener] {
401         int32_t flushFence = 0;
402         int64_t timestamp = 0;
403         OHOS::Rect damage;
404         TestBufferConsumerListener* checker = static_cast<TestBufferConsumerListener*>(listener.GetRefPtr());
405         while (running_ == true) {
406             OHOS::sptr<OHOS::SurfaceBuffer> buffer = nullptr;
407             if (checker->checkBufferAvailable()) {
408                 consumer_->AcquireBuffer(buffer, flushFence, timestamp, damage);
409                 if (buffer != nullptr) {
410                     void* addr = buffer->GetVirAddr();
411                     uint32_t size = buffer->GetSize();
412 
413                     int32_t gotSize = 0;
414                     int32_t isKey = 0;
415                     int32_t streamId = 0;
416                     int32_t captureId = 0;
417                     buffer->GetExtraData()->ExtraGet(OHOS::Camera::dataSize, gotSize);
418                     buffer->GetExtraData()->ExtraGet(OHOS::Camera::isKeyFrame, isKey);
419                     buffer->GetExtraData()->ExtraGet(OHOS::Camera::timeStamp, timestamp);
420                     buffer->GetExtraData()->ExtraGet(OHOS::Camera::streamId, streamId);
421                     buffer->GetExtraData()->ExtraGet(OHOS::Camera::captureId, captureId);
422                     GetTimeStamp(g_timestamp, sizeof(g_timestamp) / sizeof(g_timestamp[0]), timestamp, gotSize);
423                     if (gotSize) {
424                         CalculateFps(timestamp, streamId);
425                         callback_(addr, gotSize);
426                     } else {
427                         callback_(addr, size);
428                     }
429 
430                     consumer_->ReleaseBuffer(buffer, -1);
431                     shotCount_--;
432                     if (shotCount_ == 0) {
433                         std::unique_lock<std::mutex> l(l_);
434                         cv_.notify_one();
435                     }
436                 }
437             }
438             if (running_ == false) {
439                 break;
440             }
441             usleep(1);
442         }
443     });
444 
445     return producer;
446 }
447 
CreateProducerSeq(std::function<void (void *,uint32_t)> callback)448 OHOS::sptr<BufferProducerSequenceable> Test::StreamConsumer::CreateProducerSeq(
449     std::function<void(void*, uint32_t)> callback)
450 {
451     OHOS::sptr<OHOS::IBufferProducer> producer = CreateProducer(callback);
452     if (producer == nullptr) {
453         return nullptr;
454     }
455 
456     return new BufferProducerSequenceable(producer);
457 }
458 
OnCaptureStarted(int32_t captureId,const std::vector<int32_t> & streamId)459 int32_t Test::TestStreamOperatorCallback::OnCaptureStarted(int32_t captureId, const std::vector<int32_t> &streamId)
460 {
461     for (auto it : streamId) {
462         CAMERA_LOGE("captureId: %{public}d, streamId: %{public}d", captureId, it);
463     }
464     return HDI::Camera::V1_0::NO_ERROR;
465 }
466 
OnCaptureEnded(int32_t captureId,const std::vector<CaptureEndedInfo> & infos)467 int32_t Test::TestStreamOperatorCallback::OnCaptureEnded(int32_t captureId, const std::vector<CaptureEndedInfo> &infos)
468 {
469     for (auto it : infos) {
470         CAMERA_LOGE("captureId: %{public}d, streamId: %{public}d, count: %{public}d", captureId, it.streamId_,
471             it.frameCount_);
472     }
473     return HDI::Camera::V1_0::NO_ERROR;
474 }
475 
OnCaptureError(int32_t captureId,const std::vector<CaptureErrorInfo> & infos)476 int32_t Test::TestStreamOperatorCallback::OnCaptureError(int32_t captureId, const std::vector<CaptureErrorInfo> &infos)
477 {
478     for (auto it : infos) {
479         CAMERA_LOGE("captureId: %{public}d, streamId: %{public}d, error: %{public}d", captureId, it.streamId_,
480             it.error_);
481     }
482     return HDI::Camera::V1_0::NO_ERROR;
483 }
484 
OnFrameShutter(int32_t captureId,const std::vector<int32_t> & streamIds,uint64_t timestamp)485 int32_t Test::TestStreamOperatorCallback::OnFrameShutter(int32_t captureId,
486     const std::vector<int32_t> &streamIds, uint64_t timestamp)
487 {
488     (void)timestamp;
489     for (auto it : streamIds) {
490         CAMERA_LOGE("captureId: %{public}d, streamId: %{public}d", captureId, it);
491     }
492     return HDI::Camera::V1_0::NO_ERROR;
493 }
494 
OnError(ErrorType type,int32_t errorMsg)495 int32_t Test::DemoCameraDeviceCallback::OnError(ErrorType type, int32_t errorMsg)
496 {
497     CAMERA_LOGE("type: %{public}d, errorMsg: %{public}d", type, errorMsg);
498     return HDI::Camera::V1_0::NO_ERROR;
499 }
500 
OnResult(uint64_t timestamp,const std::vector<uint8_t> & result)501 int32_t Test::DemoCameraDeviceCallback::OnResult(uint64_t timestamp, const std::vector<uint8_t> &result)
502 {
503     if (Test::resultCallback_) {
504         std::shared_ptr<CameraMetadata> resultMeta;
505         MetadataUtils::ConvertVecToMetadata(result, resultMeta);
506         Test::resultCallback_(timestamp, resultMeta);
507     }
508     return HDI::Camera::V1_0::NO_ERROR;
509 }
510 
OnCameraStatus(const std::string & cameraId,CameraStatus status)511 int32_t Test::TestCameraHostCallback::OnCameraStatus(const std::string& cameraId, CameraStatus status)
512 {
513     CAMERA_LOGE("cameraId: %{public}s, status: %{public}d", cameraId.c_str(), status);
514     return HDI::Camera::V1_0::NO_ERROR;
515 }
516 
OnFlashlightStatus(const std::string & cameraId,FlashlightStatus status)517 int32_t Test::TestCameraHostCallback::OnFlashlightStatus(const std::string& cameraId, FlashlightStatus status)
518 {
519     CAMERA_LOGE("cameraId: %{public}s, status: %{public}d", cameraId.c_str(), status);
520     return HDI::Camera::V1_0::NO_ERROR;
521 }
522 
OnCameraEvent(const std::string & cameraId,CameraEvent event)523 int32_t Test::TestCameraHostCallback::OnCameraEvent(const std::string& cameraId, CameraEvent event)
524 {
525     CAMERA_LOGE("cameraId: %{public}s, status: %{public}d", cameraId.c_str(), event);
526     return HDI::Camera::V1_0::NO_ERROR;
527 }
528 }
529