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