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 == 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 == 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 streamOperatorCallback = new TestStreamOperatorCallback();
239 uint32_t mainVersion = 1;
240 uint32_t minVersion = 0;
241 rc = cameraDeviceV1_1->GetStreamOperator_V1_1(streamOperatorCallback, streamOperator_V1_1);
242 if (rc == HDI::Camera::V1_0::NO_ERROR) {
243 rc = streamOperator_V1_1->GetVersion(mainVersion, minVersion);
244 streamOperator = static_cast<OHOS::HDI::Camera::V1_0::IStreamOperator *>(streamOperator_V1_1.GetRefPtr());
245 if (rc != HDI::Camera::V1_0::NO_ERROR) {
246 CAMERA_LOGE("StreamOperator V1_1 get version failed, rc = %{public}d", rc);
247 } else {
248 CAMERA_LOGI("StreamOperator V1_1 get version success, %{public}u, %{public}u",
249 mainVersion, minVersion);
250 }
251 CAMERA_LOGI("GetStreamOperator success");
252 } else {
253 CAMERA_LOGE("GetStreamOperator fail, rc = %{public}d", rc);
254 }
255 streamInfoPre = std::make_shared<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>();
256 streamInfoVideo = std::make_shared<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>();
257 streamInfoCapture = std::make_shared<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>();
258 streamInfoAnalyze = std::make_shared<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>();
259
260 for (auto& intent : intents) {
261 if (intent == StreamIntent::PREVIEW) {
262 DefaultInfosPreview(streamInfoPre);
263 streamInfos.push_back(*streamInfoPre);
264 } else if (intent == StreamIntent::VIDEO) {
265 DefaultInfosVideo(streamInfoVideo);
266 streamInfos.push_back(*streamInfoVideo);
267 } else if (intent == StreamIntent::ANALYZE) {
268 DefaultInfosAnalyze(streamInfoAnalyze);
269 streamInfos.push_back(*streamInfoAnalyze);
270 } else {
271 DefaultInfosCapture(streamInfoCapture);
272 streamInfos.push_back(*streamInfoCapture);
273 }
274 }
275
276 rc = streamOperator_V1_1->CreateStreams_V1_1(streamInfos);
277 EXPECT_EQ(false, rc != HDI::Camera::V1_0::NO_ERROR);
278 rc = streamOperator_V1_1->CommitStreams(OperationMode::NORMAL, abilityVec);
279 EXPECT_EQ(false, rc != HDI::Camera::V1_0::NO_ERROR);
280 sleep(1);
281 std::vector<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>().swap(streamInfos);
282 }
283
StartCapture(int streamId,int captureId,bool shutterCallback,bool isStreaming)284 void Test::StartCapture(int streamId, int captureId, bool shutterCallback, bool isStreaming)
285 {
286 captureInfo = std::make_shared<CaptureInfo>();
287 captureInfo->streamIds_ = {streamId};
288 captureInfo->captureSetting_ = abilityVec;
289 captureInfo->enableShutterCallback_ = shutterCallback;
290 if (streamOperator_V1_1 != nullptr) {
291 rc = (CamRetCode)streamOperator_V1_1->Capture(captureId, *captureInfo, isStreaming);
292 } else {
293 rc = (CamRetCode)streamOperator->Capture(captureId, *captureInfo, isStreaming);
294 }
295
296 EXPECT_EQ(true, rc == HDI::Camera::V1_0::NO_ERROR);
297 if (rc == HDI::Camera::V1_0::NO_ERROR) {
298 CAMERA_LOGI("check Capture: Capture success, %{public}d", captureId);
299 } else {
300 std::cout << "rc = " << rc << std::endl;
301 CAMERA_LOGE("check Capture: Capture fail, rc = %{public}d", rc);
302 }
303 sleep(UT_SLEEP_TIME);
304 }
305
StopStream(std::vector<int> & captureIds,std::vector<int> & streamIds)306 void Test::StopStream(std::vector<int>& captureIds, std::vector<int>& streamIds)
307 {
308 if (sizeof(captureIds) > 0) {
309 for (auto &captureId : captureIds) {
310 if (streamOperator_V1_1 != nullptr) {
311 rc = streamOperator_V1_1->CancelCapture(captureId);
312 } else {
313 rc = streamOperator->CancelCapture(captureId);
314 }
315 EXPECT_EQ(true, rc == HDI::Camera::V1_0::NO_ERROR);
316 if (rc == HDI::Camera::V1_0::NO_ERROR) {
317 CAMERA_LOGI("check Capture: CancelCapture success, %{public}d", captureId);
318 } else {
319 CAMERA_LOGE("check Capture: CancelCapture fail, rc = %{public}d, captureId = %{public}d",
320 rc, captureId);
321 }
322 }
323 }
324 if (sizeof(streamIds) > 0) {
325 if (streamOperator_V1_1 != nullptr) {
326 rc = streamOperator_V1_1->ReleaseStreams(streamIds);
327 } else {
328 rc = streamOperator->ReleaseStreams(streamIds);
329 }
330 EXPECT_EQ(true, rc == HDI::Camera::V1_0::NO_ERROR);
331 if (rc == HDI::Camera::V1_0::NO_ERROR) {
332 CAMERA_LOGI("check Capture: ReleaseStream success");
333 } else {
334 CAMERA_LOGE("check Capture: ReleaseStreams fail, rc = %{public}d", rc);
335 }
336 }
337 }
338
CalculateFps(int64_t timestamp,int32_t streamId)339 void Test::StreamConsumer::CalculateFps(int64_t timestamp, int32_t streamId)
340 {
341 if (isFirstCalculateFps_) {
342 if ((timestamp - intervalTimestamp_) >= interval_) {
343 int64_t timeInterval = timestamp - intervalTimestamp_;
344 if (timeInterval != 0) {
345 float fps = (int64_t)(100000000000 * timestampCount_ / timeInterval) / 100.0;
346 CAMERA_LOGI("Calculate FPS success, streamId: %{public}d, Fps:%{public}f", streamId, fps);
347 interval_ = ONESECOND_OF_MICROSECOND_UNIT;
348 } else {
349 CAMERA_LOGE("Calculate FPS error timeInerval is 0");
350 }
351 }
352 } else {
353 intervalTimestamp_ = timestamp;
354 isFirstCalculateFps_ = true;
355 }
356 if ((timestamp - intervalTimestamp_) >= ONESECOND_OF_MICROSECOND_UNIT * UT_SECOND_TIMES) {
357 intervalTimestamp_ = timestamp;
358 timestampCount_ = 0;
359 interval_ = ONESECOND_OF_MICROSECOND_UNIT;
360 }
361 timestampCount_++;
362 }
363
GetTimeStamp(int64_t * g_timestamp,uint32_t lenght,int64_t timestamp,int32_t gotSize)364 void Test::StreamConsumer::GetTimeStamp(int64_t *g_timestamp, uint32_t lenght, int64_t timestamp, int32_t gotSize)
365 {
366 if (gotSize != UT_PREVIEW_SIZE) {
367 if (g_timestamp[0] == 0) {
368 g_timestamp[0] = timestamp;
369 } else {
370 g_timestamp[1] = timestamp;
371 }
372 }
373 }
374
CreateProducer(std::function<void (void *,uint32_t)> callback)375 OHOS::sptr<OHOS::IBufferProducer> Test::StreamConsumer::CreateProducer(std::function<void(void*, uint32_t)> callback)
376 {
377 consumer_ = OHOS::IConsumerSurface::Create();
378 if (consumer_ == nullptr) {
379 return nullptr;
380 }
381 sptr<IBufferConsumerListener> listener = new TestBufferConsumerListener();
382 consumer_->RegisterConsumerListener(listener);
383 auto producer = consumer_->GetProducer();
384 if (producer == nullptr) {
385 return nullptr;
386 }
387
388 callback_ = callback;
389 consumerThread_ = new std::thread([this, listener] {
390 int32_t flushFence = 0;
391 int64_t timestamp = 0;
392 OHOS::Rect damage;
393 TestBufferConsumerListener* checker = static_cast<TestBufferConsumerListener*>(listener.GetRefPtr());
394 while (running_ == true) {
395 OHOS::sptr<OHOS::SurfaceBuffer> buffer = nullptr;
396 if (checker->checkBufferAvailable()) {
397 consumer_->AcquireBuffer(buffer, flushFence, timestamp, damage);
398 if (buffer != nullptr) {
399 void* addr = buffer->GetVirAddr();
400 uint32_t size = buffer->GetSize();
401
402 int32_t gotSize = 0;
403 int32_t isKey = 0;
404 int32_t streamId = 0;
405 int32_t captureId = 0;
406 buffer->GetExtraData()->ExtraGet(OHOS::Camera::dataSize, gotSize);
407 buffer->GetExtraData()->ExtraGet(OHOS::Camera::isKeyFrame, isKey);
408 buffer->GetExtraData()->ExtraGet(OHOS::Camera::timeStamp, timestamp);
409 buffer->GetExtraData()->ExtraGet(OHOS::Camera::streamId, streamId);
410 buffer->GetExtraData()->ExtraGet(OHOS::Camera::captureId, captureId);
411 GetTimeStamp(g_timestamp, sizeof(g_timestamp) / sizeof(g_timestamp[0]), timestamp, gotSize);
412 if (gotSize) {
413 CalculateFps(timestamp, streamId);
414 callback_(addr, gotSize);
415 } else {
416 callback_(addr, size);
417 }
418
419 consumer_->ReleaseBuffer(buffer, -1);
420 shotCount_--;
421 if (shotCount_ == 0) {
422 std::unique_lock<std::mutex> l(l_);
423 cv_.notify_one();
424 }
425 }
426 }
427 if (running_ == false) {
428 break;
429 }
430 usleep(1);
431 }
432 });
433
434 return producer;
435 }
436
CreateProducerSeq(std::function<void (void *,uint32_t)> callback)437 OHOS::sptr<BufferProducerSequenceable> Test::StreamConsumer::CreateProducerSeq(
438 std::function<void(void*, uint32_t)> callback)
439 {
440 OHOS::sptr<OHOS::IBufferProducer> producer = CreateProducer(callback);
441 if (producer == nullptr) {
442 return nullptr;
443 }
444
445 return new BufferProducerSequenceable(producer);
446 }
447
OnCaptureStarted(int32_t captureId,const std::vector<int32_t> & streamId)448 int32_t Test::TestStreamOperatorCallback::OnCaptureStarted(int32_t captureId, const std::vector<int32_t> &streamId)
449 {
450 for (auto it : streamId) {
451 CAMERA_LOGE("captureId: %{public}d, streamId: %{public}d", captureId, it);
452 }
453 return HDI::Camera::V1_0::NO_ERROR;
454 }
455
OnCaptureEnded(int32_t captureId,const std::vector<CaptureEndedInfo> & infos)456 int32_t Test::TestStreamOperatorCallback::OnCaptureEnded(int32_t captureId, const std::vector<CaptureEndedInfo> &infos)
457 {
458 for (auto it : infos) {
459 CAMERA_LOGE("captureId: %{public}d, streamId: %{public}d, count: %{public}d", captureId, it.streamId_,
460 it.frameCount_);
461 }
462 return HDI::Camera::V1_0::NO_ERROR;
463 }
464
OnCaptureError(int32_t captureId,const std::vector<CaptureErrorInfo> & infos)465 int32_t Test::TestStreamOperatorCallback::OnCaptureError(int32_t captureId, const std::vector<CaptureErrorInfo> &infos)
466 {
467 for (auto it : infos) {
468 CAMERA_LOGE("captureId: %{public}d, streamId: %{public}d, error: %{public}d", captureId, it.streamId_,
469 it.error_);
470 }
471 return HDI::Camera::V1_0::NO_ERROR;
472 }
473
OnFrameShutter(int32_t captureId,const std::vector<int32_t> & streamIds,uint64_t timestamp)474 int32_t Test::TestStreamOperatorCallback::OnFrameShutter(int32_t captureId,
475 const std::vector<int32_t> &streamIds, uint64_t timestamp)
476 {
477 (void)timestamp;
478 for (auto it : streamIds) {
479 CAMERA_LOGE("captureId: %{public}d, streamId: %{public}d", captureId, it);
480 }
481 return HDI::Camera::V1_0::NO_ERROR;
482 }
483
OnError(ErrorType type,int32_t errorMsg)484 int32_t Test::DemoCameraDeviceCallback::OnError(ErrorType type, int32_t errorMsg)
485 {
486 CAMERA_LOGE("type: %{public}d, errorMsg: %{public}d", type, errorMsg);
487 return HDI::Camera::V1_0::NO_ERROR;
488 }
489
OnResult(uint64_t timestamp,const std::vector<uint8_t> & result)490 int32_t Test::DemoCameraDeviceCallback::OnResult(uint64_t timestamp, const std::vector<uint8_t> &result)
491 {
492 if (Test::resultCallback_) {
493 std::shared_ptr<CameraMetadata> resultMeta;
494 MetadataUtils::ConvertVecToMetadata(result, resultMeta);
495 Test::resultCallback_(timestamp, resultMeta);
496 }
497 return HDI::Camera::V1_0::NO_ERROR;
498 }
499
OnCameraStatus(const std::string & cameraId,CameraStatus status)500 int32_t Test::TestCameraHostCallback::OnCameraStatus(const std::string& cameraId, CameraStatus status)
501 {
502 CAMERA_LOGE("cameraId: %{public}s, status: %{public}d", cameraId.c_str(), status);
503 return HDI::Camera::V1_0::NO_ERROR;
504 }
505
OnFlashlightStatus(const std::string & cameraId,FlashlightStatus status)506 int32_t Test::TestCameraHostCallback::OnFlashlightStatus(const std::string& cameraId, FlashlightStatus status)
507 {
508 CAMERA_LOGE("cameraId: %{public}s, status: %{public}d", cameraId.c_str(), status);
509 return HDI::Camera::V1_0::NO_ERROR;
510 }
511
OnCameraEvent(const std::string & cameraId,CameraEvent event)512 int32_t Test::TestCameraHostCallback::OnCameraEvent(const std::string& cameraId, CameraEvent event)
513 {
514 CAMERA_LOGE("cameraId: %{public}s, status: %{public}d", cameraId.c_str(), event);
515 return HDI::Camera::V1_0::NO_ERROR;
516 }
517 }
518