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