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_2.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_2 == nullptr) {
76 serviceV1_2 = OHOS::HDI::Camera::V1_2::ICameraHost::Get("camera_service", false);
77 if (serviceV1_2 == nullptr) {
78 CAMERA_LOGE("V1_2::ICameraHost get failed");
79 return;
80 } else {
81 CAMERA_LOGI("ICameraHost get success");
82 ret = serviceV1_2->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_2 != nullptr);
90 service = static_cast<OHOS::HDI::Camera::V1_0::ICameraHost *>(serviceV1_2.GetRefPtr());
91 }
92 hostCallback = new TestCameraHostCallback();
93 service->SetCallback(hostCallback);
94 }
95
GetCameraMetadata(int cameraId)96 void Test::GetCameraMetadata(int cameraId)
97 {
98 if (cameraId == DEVICE_1) {
99 rc = service->GetCameraAbility(cameraIds[1], abilityVec);
100 } else {
101 rc = service->GetCameraAbility(cameraIds[0], abilityVec);
102 }
103 if (rc != HDI::Camera::V1_0::NO_ERROR) {
104 CAMERA_LOGE("GetCameraAbility failed, rc = %{public}d", rc);
105 }
106 MetadataUtils::ConvertVecToMetadata(abilityVec, ability);
107
108 common_metadata_header_t* data = ability->get();
109 camera_metadata_item_t entry;
110 int ret = FindCameraMetadataItem(data, OHOS_CONTROL_AE_AVAILABLE_MODES, &entry);
111 if (ret == 0) {
112 CAMERA_LOGI("get OHOS_CONTROL_AE_AVAILABLE_MODES success");
113 }
114 }
115
Open(int cameraId)116 void Test::Open(int cameraId)
117 {
118 if (cameraDevice == nullptr) {
119 service->GetCameraIds(cameraIds);
120 if (cameraIds.size() == 0) {
121 CAMERA_LOGE("camera device list empty");
122 }
123 ASSERT_TRUE(cameraIds.size() != 0);
124 GetCameraMetadata(cameraId);
125 deviceCallback = new OHOS::Camera::Test::DemoCameraDeviceCallback();
126
127 ASSERT_TRUE(serviceV1_2 != nullptr);
128 if (cameraId == DEVICE_1) {
129 rc = serviceV1_2->OpenCamera_V1_1(cameraIds[1], deviceCallback, cameraDeviceV1_1);
130 } else {
131 rc = serviceV1_2->OpenCamera_V1_1(cameraIds[0], deviceCallback, cameraDeviceV1_1);
132 }
133 if (rc != HDI::Camera::V1_0::NO_ERROR || cameraDeviceV1_1 == nullptr) {
134 CAMERA_LOGE("openCamera V1_1 failed, rc = %{public}d", rc);
135 return;
136 }
137 ASSERT_TRUE(cameraDeviceV1_1 != nullptr);
138 cameraDevice = static_cast<OHOS::HDI::Camera::V1_0::ICameraDevice *>(cameraDeviceV1_1.GetRefPtr());
139 CAMERA_LOGI("OpenCamera V1_1 success");
140 }
141 }
142
OpenCameraV1_2(int cameraId)143 void Test::OpenCameraV1_2(int cameraId)
144 {
145 if (cameraDevice == nullptr) {
146 EXPECT_NE(service, nullptr);
147 service->GetCameraIds(cameraIds);
148 EXPECT_NE(cameraIds.size(), 0);
149 GetCameraMetadata(cameraId);
150 deviceCallback = new OHOS::Camera::Test::DemoCameraDeviceCallback();
151
152 EXPECT_NE(serviceV1_2, nullptr);
153 if (cameraId == DEVICE_1) {
154 rc = serviceV1_2->OpenCamera_V1_2(cameraIds[1], deviceCallback, cameraDeviceV1_2);
155 } else {
156 rc = serviceV1_2->OpenCamera_V1_2(cameraIds[0], deviceCallback, cameraDeviceV1_2);
157 }
158 EXPECT_EQ(rc, HDI::Camera::V1_0::NO_ERROR);
159 EXPECT_NE(cameraDeviceV1_2, nullptr);
160 cameraDevice = static_cast<OHOS::HDI::Camera::V1_0::ICameraDevice *>(cameraDeviceV1_2.GetRefPtr());
161 CAMERA_LOGI("OpenCamera V1_2 success");
162 }
163 }
164
Close()165 void Test::Close()
166 {
167 if (cameraDevice != nullptr) {
168 cameraDevice->Close();
169 cameraDevice = nullptr;
170 }
171 }
172
StartStream(std::vector<StreamIntent> intents)173 void Test::StartStream(std::vector<StreamIntent> intents)
174 {
175 streamOperatorCallback = new TestStreamOperatorCallback();
176 uint32_t mainVersion = 1;
177 uint32_t minVersion = 0;
178 rc = cameraDeviceV1_1->GetStreamOperator_V1_1(streamOperatorCallback, streamOperator_V1_1);
179 if (rc == HDI::Camera::V1_0::NO_ERROR) {
180 rc = streamOperator_V1_1->GetVersion(mainVersion, minVersion);
181 streamOperator = static_cast<OHOS::HDI::Camera::V1_0::IStreamOperator *>(streamOperator_V1_1.GetRefPtr());
182 if (rc != HDI::Camera::V1_0::NO_ERROR) {
183 CAMERA_LOGE("StreamOperator V1_1 get version failed, rc = %{public}d", rc);
184 } else {
185 CAMERA_LOGI("StreamOperator V1_1 get version success, %{public}u, %{public}u",
186 mainVersion, minVersion);
187 }
188 CAMERA_LOGI("GetStreamOperator success");
189 } else {
190 CAMERA_LOGE("GetStreamOperator fail, rc = %{public}d", rc);
191 }
192 streamInfoPre = std::make_shared<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>();
193 streamInfoVideo = std::make_shared<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>();
194 streamInfoCapture = std::make_shared<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>();
195 streamInfoAnalyze = std::make_shared<OHOS::HDI::Camera::V1_1::StreamInfo_V1_1>();
196 for (auto& intent : intents) {
197 if (intent == StreamIntent::PREVIEW) {
198 streamInfoPre->v1_0.streamId_ = streamIdPreview;
199 streamInfoPre->v1_0.width_ = previewWidth;
200 streamInfoPre->v1_0.height_ = previewHeight;
201 streamInfoPre->v1_0.format_ = previewFormat;
202 streamInfoPre->v1_0.dataspace_ = UT_DATA_SIZE;
203 streamInfoPre->v1_0.intent_ = intent;
204 streamInfoPre->v1_0.tunneledMode_ = UT_TUNNEL_MODE;
205 std::shared_ptr<StreamConsumer> consumer_pre = std::make_shared<StreamConsumer>();
206 streamInfoPre->v1_0.bufferQueue_ = consumer_pre->CreateProducerSeq([this](void* addr, uint32_t size) {
207 DumpImageFile(streamIdPreview, "yuv", addr, size);
208 });
209 streamInfoPre->v1_0.bufferQueue_->producer_->SetQueueSize(UT_DATA_SIZE);
210 consumerMap_[intent] = consumer_pre;
211 streamInfos.push_back(*streamInfoPre);
212 } else if (intent == StreamIntent::VIDEO) {
213 streamInfoVideo->v1_0.streamId_ = streamIdVideo;
214 streamInfoVideo->v1_0.width_ = videoWidth;
215 streamInfoVideo->v1_0.height_ = videoHeight;
216 streamInfoVideo->v1_0.format_ = videoFormat;
217 streamInfoVideo->v1_0.dataspace_ = UT_DATA_SIZE;
218 streamInfoVideo->v1_0.intent_ = intent;
219 streamInfoVideo->v1_0.encodeType_ = ENCODE_TYPE_H265;
220 streamInfoVideo->v1_0.tunneledMode_ = UT_TUNNEL_MODE;
221 std::shared_ptr<StreamConsumer> consumer_video = std::make_shared<StreamConsumer>();
222 streamInfoVideo->v1_0.bufferQueue_ = consumer_video->CreateProducerSeq([this](void* addr, uint32_t size) {
223 DumpImageFile(streamIdPreview, "yuv", addr, size);
224 });
225 streamInfoVideo->v1_0.bufferQueue_->producer_->SetQueueSize(UT_DATA_SIZE);
226 consumerMap_[intent] = consumer_video;
227 streamInfos.push_back(*streamInfoVideo);
228 } else if (intent == StreamIntent::ANALYZE) {
229 streamInfoAnalyze->v1_0.streamId_ = streamIdAnalyze;
230 streamInfoAnalyze->v1_0.width_ = analyzeWidth;
231 streamInfoAnalyze->v1_0.height_ = analyzeHeight;
232 streamInfoAnalyze->v1_0.format_ = analyzeFormat;
233 streamInfoAnalyze->v1_0.dataspace_ = UT_DATA_SIZE;
234 streamInfoAnalyze->v1_0.intent_ = intent;
235 streamInfoAnalyze->v1_0.tunneledMode_ = UT_TUNNEL_MODE;
236
237 std::shared_ptr<StreamConsumer> consumer_analyze = std::make_shared<StreamConsumer>();
238 streamInfoAnalyze->v1_0.bufferQueue_ =
239 consumer_analyze->CreateProducerSeq([this](void* addr, uint32_t size) {
240 common_metadata_header_t *data = static_cast<common_metadata_header_t *>(addr);
241 camera_metadata_item_t entry = {};
242
243 int ret = FindCameraMetadataItem(data, OHOS_STATISTICS_FACE_IDS, &entry);
244 if (ret == 0) {
245 for (size_t i = 0; i < entry.count; i++) {
246 int id = entry.data.i32[i];
247 CAMERA_LOGI("Face ids : %{public}d", id);
248 }
249 }
250
251 ret = FindCameraMetadataItem(data, OHOS_STATISTICS_FACE_RECTANGLES, &entry);
252 if (ret == 0) {
253 for (size_t i = 0; i < entry.count; i++) {
254 int id = entry.data.i32[i];
255 CAMERA_LOGI("Face rectangles : %{public}d", id);
256 }
257 }
258 });
259 streamInfoAnalyze->v1_0.bufferQueue_->producer_->SetQueueSize(UT_DATA_SIZE);
260 consumerMap_[intent] = consumer_analyze;
261 streamInfos.push_back(*streamInfoAnalyze);
262 } else {
263 streamInfoCapture->v1_0.streamId_ = streamIdAnalyze;
264 streamInfoCapture->v1_0.width_ = analyzeWidth;
265 streamInfoCapture->v1_0.height_ = analyzeHeight;
266 streamInfoCapture->v1_0.format_ = analyzeFormat;
267 streamInfoCapture->v1_0.dataspace_ = UT_DATA_SIZE;
268 streamInfoCapture->v1_0.intent_ = intent;
269 streamInfoCapture->v1_0.tunneledMode_ = UT_TUNNEL_MODE;
270 std::shared_ptr<StreamConsumer> consumer_capture = std::make_shared<StreamConsumer>();
271 streamInfoCapture->v1_0.bufferQueue_ =
272 consumer_capture->CreateProducerSeq([this](void* addr, uint32_t size) {
273 DumpImageFile(streamIdPreview, "yuv", addr, size);
274 });
275 streamInfoCapture->v1_0.bufferQueue_->producer_->SetQueueSize(UT_DATA_SIZE);
276 consumerMap_[intent] = consumer_capture;
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(OperationMode::NORMAL, 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_2 != nullptr) {
296 rc = (CamRetCode)streamOperator_V1_2->Capture(captureId, *captureInfo, isStreaming);
297 } else if (streamOperator_V1_1 != nullptr) {
298 rc = (CamRetCode)streamOperator_V1_1->Capture(captureId, *captureInfo, isStreaming);
299 } else {
300 rc = (CamRetCode)streamOperator->Capture(captureId, *captureInfo, isStreaming);
301 }
302 EXPECT_EQ(true, rc == HDI::Camera::V1_0::NO_ERROR);
303 if (rc == HDI::Camera::V1_0::NO_ERROR) {
304 CAMERA_LOGI("check Capture: Capture success, %{public}d", captureId);
305 } else {
306 std::cout << "rc = " << rc << std::endl;
307 CAMERA_LOGE("check Capture: Capture fail, rc = %{public}d", rc);
308 }
309 sleep(UT_SLEEP_TIME);
310 }
311
StopStream(std::vector<int> & captureIds,std::vector<int> & streamIds)312 void Test::StopStream(std::vector<int>& captureIds, std::vector<int>& streamIds)
313 {
314 if (captureIds.size() > 0) {
315 for (auto &captureId : captureIds) {
316 if (streamOperator_V1_2 != nullptr) {
317 rc = streamOperator_V1_2->CancelCapture(captureId);
318 } else if (streamOperator_V1_1 != nullptr) {
319 rc = streamOperator_V1_1->CancelCapture(captureId);
320 } else {
321 rc = streamOperator->CancelCapture(captureId);
322 }
323 EXPECT_EQ(true, rc == HDI::Camera::V1_0::NO_ERROR);
324 if (rc == HDI::Camera::V1_0::NO_ERROR) {
325 CAMERA_LOGI("check Capture: CancelCapture success, %{public}d", captureId);
326 } else {
327 CAMERA_LOGE("check Capture: CancelCapture fail, rc = %{public}d, captureId = %{public}d",
328 rc, captureId);
329 }
330 }
331 }
332 if (streamIds.size() > 0) {
333 if (streamOperator_V1_2 != nullptr) {
334 rc = streamOperator_V1_2->ReleaseStreams(streamIds);
335 } else if (streamOperator_V1_1 != nullptr) {
336 rc = streamOperator_V1_1->ReleaseStreams(streamIds);
337 } else {
338 rc = streamOperator->ReleaseStreams(streamIds);
339 }
340 EXPECT_EQ(true, rc == HDI::Camera::V1_0::NO_ERROR);
341 if (rc == HDI::Camera::V1_0::NO_ERROR) {
342 CAMERA_LOGI("check Capture: ReleaseStream success");
343 } else {
344 CAMERA_LOGE("check Capture: ReleaseStreams fail, rc = %{public}d", rc);
345 }
346 }
347 }
348
CalculateFps(int64_t timestamp,int32_t streamId)349 void Test::StreamConsumer::CalculateFps(int64_t timestamp, int32_t streamId)
350 {
351 if (isFirstCalculateFps_) {
352 if ((timestamp - intervalTimestamp_) >= interval_) {
353 int64_t timeInterval = timestamp - intervalTimestamp_;
354 if (timeInterval != 0) {
355 float fps = (int64_t)(100000000000 * timestampCount_ / timeInterval) / 100.0;
356 CAMERA_LOGI("Calculate FPS success, streamId: %{public}d, Fps:%{public}f", streamId, fps);
357 interval_ = ONESECOND_OF_MICROSECOND_UNIT;
358 } else {
359 CAMERA_LOGE("Calculate FPS error timeInerval is 0");
360 }
361 }
362 } else {
363 intervalTimestamp_ = timestamp;
364 isFirstCalculateFps_ = true;
365 }
366 if ((timestamp - intervalTimestamp_) >= ONESECOND_OF_MICROSECOND_UNIT * UT_SECOND_TIMES) {
367 intervalTimestamp_ = timestamp;
368 timestampCount_ = 0;
369 interval_ = ONESECOND_OF_MICROSECOND_UNIT;
370 }
371 timestampCount_++;
372 }
373
CreateProducer(std::function<void (void *,uint32_t)> callback)374 OHOS::sptr<OHOS::IBufferProducer> Test::StreamConsumer::CreateProducer(std::function<void(void*, uint32_t)> callback)
375 {
376 consumer_ = OHOS::IConsumerSurface::Create();
377 if (consumer_ == nullptr) {
378 return nullptr;
379 }
380 sptr<IBufferConsumerListener> listener = new TestBufferConsumerListener();
381 consumer_->RegisterConsumerListener(listener);
382 auto producer = consumer_->GetProducer();
383 if (producer == nullptr) {
384 return nullptr;
385 }
386
387 callback_ = callback;
388 consumerThread_ = new std::thread([this, listener] {
389 int32_t flushFence = 0;
390 int64_t timestamp = 0;
391 OHOS::Rect damage;
392 TestBufferConsumerListener* checker = static_cast<TestBufferConsumerListener*>(listener.GetRefPtr());
393 while (running_ == true) {
394 OHOS::sptr<OHOS::SurfaceBuffer> buffer = nullptr;
395 if (checker->checkBufferAvailable()) {
396 consumer_->AcquireBuffer(buffer, flushFence, timestamp, damage);
397 if (buffer != nullptr) {
398 void* addr = buffer->GetVirAddr();
399 uint32_t size = buffer->GetSize();
400
401 int32_t gotSize = 0;
402 int32_t isKey = 0;
403 int32_t streamId = 0;
404 int32_t captureId = 0;
405 buffer->GetExtraData()->ExtraGet(OHOS::Camera::dataSize, gotSize);
406 buffer->GetExtraData()->ExtraGet(OHOS::Camera::isKeyFrame, isKey);
407 buffer->GetExtraData()->ExtraGet(OHOS::Camera::timeStamp, timestamp);
408 buffer->GetExtraData()->ExtraGet(OHOS::Camera::streamId, streamId);
409 buffer->GetExtraData()->ExtraGet(OHOS::Camera::captureId, captureId);
410 if (gotSize) {
411 CalculateFps(timestamp, streamId);
412 callback_(addr, gotSize);
413 } else {
414 callback_(addr, size);
415 }
416
417 consumer_->ReleaseBuffer(buffer, -1);
418 shotCount_--;
419 if (shotCount_ == 0) {
420 std::unique_lock<std::mutex> l(l_);
421 cv_.notify_one();
422 }
423 }
424 }
425 if (running_ == false) {
426 break;
427 }
428 usleep(1);
429 }
430 });
431
432 return producer;
433 }
434
CreateProducerSeq(std::function<void (void *,uint32_t)> callback)435 OHOS::sptr<BufferProducerSequenceable> Test::StreamConsumer::CreateProducerSeq(
436 std::function<void(void*, uint32_t)> callback)
437 {
438 OHOS::sptr<OHOS::IBufferProducer> producer = CreateProducer(callback);
439 if (producer == nullptr) {
440 return nullptr;
441 }
442
443 return new BufferProducerSequenceable(producer);
444 }
445
OnCaptureStarted(int32_t captureId,const std::vector<int32_t> & streamId)446 int32_t Test::TestStreamOperatorCallback::OnCaptureStarted(int32_t captureId, const std::vector<int32_t> &streamId)
447 {
448 for (auto it : streamId) {
449 CAMERA_LOGE("captureId: %{public}d, streamId: %{public}d", captureId, it);
450 }
451 return HDI::Camera::V1_0::NO_ERROR;
452 }
453
OnCaptureEnded(int32_t captureId,const std::vector<CaptureEndedInfo> & infos)454 int32_t Test::TestStreamOperatorCallback::OnCaptureEnded(int32_t captureId, const std::vector<CaptureEndedInfo> &infos)
455 {
456 for (auto it : infos) {
457 CAMERA_LOGE("captureId: %{public}d, streamId: %{public}d, count: %{public}d", captureId, it.streamId_,
458 it.frameCount_);
459 }
460 return HDI::Camera::V1_0::NO_ERROR;
461 }
462
OnCaptureError(int32_t captureId,const std::vector<CaptureErrorInfo> & infos)463 int32_t Test::TestStreamOperatorCallback::OnCaptureError(int32_t captureId, const std::vector<CaptureErrorInfo> &infos)
464 {
465 for (auto it : infos) {
466 CAMERA_LOGE("captureId: %{public}d, streamId: %{public}d, error: %{public}d", captureId, it.streamId_,
467 it.error_);
468 }
469 return HDI::Camera::V1_0::NO_ERROR;
470 }
471
OnFrameShutter(int32_t captureId,const std::vector<int32_t> & streamIds,uint64_t timestamp)472 int32_t Test::TestStreamOperatorCallback::OnFrameShutter(int32_t captureId,
473 const std::vector<int32_t> &streamIds, uint64_t timestamp)
474 {
475 (void)timestamp;
476 for (auto it : streamIds) {
477 CAMERA_LOGE("captureId: %{public}d, streamId: %{public}d", captureId, it);
478 }
479 return HDI::Camera::V1_0::NO_ERROR;
480 }
481
OnCaptureStarted(int32_t captureId,const std::vector<int32_t> & streamId)482 int32_t Test::TestStreamOperatorCallbackV1_2::OnCaptureStarted(int32_t captureId, const std::vector<int32_t> &streamId)
483 {
484 for (auto it : streamId) {
485 CAMERA_LOGE("captureId: %{public}d, streamId: %{public}d", captureId, it);
486 }
487 return HDI::Camera::V1_0::NO_ERROR;
488 }
489
OnCaptureEnded(int32_t captureId,const std::vector<CaptureEndedInfo> & infos)490 int32_t Test::TestStreamOperatorCallbackV1_2::OnCaptureEnded(int32_t captureId,
491 const std::vector<CaptureEndedInfo> &infos)
492 {
493 for (auto it : infos) {
494 CAMERA_LOGE("captureId: %{public}d, streamId: %{public}d, count: %{public}d", captureId, it.streamId_,
495 it.frameCount_);
496 }
497 return HDI::Camera::V1_0::NO_ERROR;
498 }
499
OnCaptureError(int32_t captureId,const std::vector<CaptureErrorInfo> & infos)500 int32_t Test::TestStreamOperatorCallbackV1_2::OnCaptureError(int32_t captureId,
501 const std::vector<CaptureErrorInfo> &infos)
502 {
503 for (auto it : infos) {
504 CAMERA_LOGE("captureId: %{public}d, streamId: %{public}d, error: %{public}d", captureId, it.streamId_,
505 it.error_);
506 }
507 return HDI::Camera::V1_0::NO_ERROR;
508 }
509
OnFrameShutter(int32_t captureId,const std::vector<int32_t> & streamIds,uint64_t timestamp)510 int32_t Test::TestStreamOperatorCallbackV1_2::OnFrameShutter(int32_t captureId,
511 const std::vector<int32_t> &streamIds, uint64_t timestamp)
512 {
513 (void)timestamp;
514 for (auto it : streamIds) {
515 CAMERA_LOGE("captureId: %{public}d, streamId: %{public}d", captureId, it);
516 }
517 return HDI::Camera::V1_0::NO_ERROR;
518 }
519
OnCaptureStarted_V1_2(int32_t captureId,const std::vector<HDI::Camera::V1_2::CaptureStartedInfo> & infos)520 int32_t Test::TestStreamOperatorCallbackV1_2::OnCaptureStarted_V1_2(int32_t captureId,
521 const std::vector<HDI::Camera::V1_2::CaptureStartedInfo> &infos)
522 {
523 for (auto it : infos) {
524 CAMERA_LOGE("captureId: %{public}d, streamId: %{public}d", captureId, it.streamId_);
525 }
526 return HDI::Camera::V1_0::NO_ERROR;
527 }
528
OnError(ErrorType type,int32_t errorMsg)529 int32_t Test::DemoCameraDeviceCallback::OnError(ErrorType type, int32_t errorMsg)
530 {
531 CAMERA_LOGE("type: %{public}d, errorMsg: %{public}d", type, errorMsg);
532 return HDI::Camera::V1_0::NO_ERROR;
533 }
534
OnResult(uint64_t timestamp,const std::vector<uint8_t> & result)535 int32_t Test::DemoCameraDeviceCallback::OnResult(uint64_t timestamp, const std::vector<uint8_t> &result)
536 {
537 if (Test::resultCallback_) {
538 std::shared_ptr<CameraMetadata> resultMeta;
539 MetadataUtils::ConvertVecToMetadata(result, resultMeta);
540 Test::resultCallback_(timestamp, resultMeta);
541 }
542 return HDI::Camera::V1_0::NO_ERROR;
543 }
544
OnCameraStatus(const std::string & cameraId,CameraStatus status)545 int32_t Test::TestCameraHostCallback::OnCameraStatus(const std::string& cameraId, CameraStatus status)
546 {
547 CAMERA_LOGE("cameraId: %{public}s, status: %{public}d", cameraId.c_str(), status);
548 return HDI::Camera::V1_0::NO_ERROR;
549 }
550
OnFlashlightStatus(const std::string & cameraId,FlashlightStatus status)551 int32_t Test::TestCameraHostCallback::OnFlashlightStatus(const std::string& cameraId, FlashlightStatus status)
552 {
553 CAMERA_LOGE("cameraId: %{public}s, status: %{public}d", cameraId.c_str(), status);
554 return HDI::Camera::V1_0::NO_ERROR;
555 }
556
OnCameraEvent(const std::string & cameraId,CameraEvent event)557 int32_t Test::TestCameraHostCallback::OnCameraEvent(const std::string& cameraId, CameraEvent event)
558 {
559 CAMERA_LOGE("cameraId: %{public}s, status: %{public}d", cameraId.c_str(), event);
560 return HDI::Camera::V1_0::NO_ERROR;
561 }
562
DefferredImageTestInit()563 int32_t Test::DefferredImageTestInit()
564 {
565 constexpr const char* serviceName = "camera_image_process_service";
566 constexpr const int userId = 100;
567 // get ImageProcessService
568 imageProcessService_ = OHOS::HDI::Camera::V1_2::ImageProcessServiceProxy::Get(serviceName, false);
569 if (imageProcessService_ == nullptr) {
570 std::cout << "DefferredImageTestInit fail, imageProcessService_ == nullptr" << std::endl;
571 return -1;
572 }
573 imageProcessCallback_ = new OHOS::Camera::Test::TestImageProcessCallback();
574 if (imageProcessCallback_ == nullptr) {
575 std::cout << "DefferredImageTestInit fail, imageProcessCallback_ == nullptr" << std::endl;
576 return -1;
577 }
578 imageProcessService_->CreateImageProcessSession(userId, imageProcessCallback_, imageProcessSession_);
579 if (imageProcessSession_ == nullptr) {
580 std::cout << "DefferredImageTestInit fail, imageProcessSession_ == nullptr" << std::endl;
581 return -1;
582 }
583 return 0;
584 }
OnProcessDone(const std::string & imageId,const OHOS::HDI::Camera::V1_2::ImageBufferInfo & buffer)585 int32_t Test::TestImageProcessCallback::OnProcessDone(const std::string& imageId,
586 const OHOS::HDI::Camera::V1_2::ImageBufferInfo& buffer)
587 {
588 CAMERA_LOGI("imageId: %{public}s", imageId.c_str());
589 coutProcessDone_++;
590 curImageId_ = imageId;
591 curImageBufferInfo_ = buffer;
592 return 0;
593 }
594
OnStatusChanged(OHOS::HDI::Camera::V1_2::SessionStatus status)595 int32_t Test::TestImageProcessCallback::OnStatusChanged(OHOS::HDI::Camera::V1_2::SessionStatus status)
596 {
597 CAMERA_LOGI("status: %{public}d", status);
598 curStatus_ = status;
599 coutStatusChanged_++;
600 return 0;
601 }
602
OnError(const std::string & imageId,OHOS::HDI::Camera::V1_2::ErrorCode errorCode)603 int32_t Test::TestImageProcessCallback::OnError(const std::string& imageId, \
604 OHOS::HDI::Camera::V1_2::ErrorCode errorCode)
605 {
606 CAMERA_LOGI("imageId: %{public}s, errorCode: %{public}d", imageId.c_str(), errorCode);
607 curImageId_ = imageId;
608 curErrorCode_ = errorCode;
609 countError_++;
610 return 0;
611 }
612 }
613