1094332d3Sopenharmony_ci/* 2094332d3Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 3094332d3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4094332d3Sopenharmony_ci * you may not use this file except in compliance with the License. 5094332d3Sopenharmony_ci * You may obtain a copy of the License at 6094332d3Sopenharmony_ci * 7094332d3Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8094332d3Sopenharmony_ci * 9094332d3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10094332d3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11094332d3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12094332d3Sopenharmony_ci * See the License for the specific language governing permissions and 13094332d3Sopenharmony_ci * limitations under the License. 14094332d3Sopenharmony_ci */ 15094332d3Sopenharmony_ci#include "usb_camera_test_mult.h" 16094332d3Sopenharmony_ci 17094332d3Sopenharmony_civoid UtestUSBCameraTestMult::SetUpTestCase(void) 18094332d3Sopenharmony_ci{} 19094332d3Sopenharmony_civoid UtestUSBCameraTestMult::TearDownTestCase(void) 20094332d3Sopenharmony_ci{} 21094332d3Sopenharmony_civoid UtestUSBCameraTestMult::SetUp(void) 22094332d3Sopenharmony_ci{ 23094332d3Sopenharmony_ci if (cameraBase_ == nullptr) 24094332d3Sopenharmony_ci cameraBase_ = std::make_shared<TestCameraBase>(); 25094332d3Sopenharmony_ci cameraBase_->UsbInit(); 26094332d3Sopenharmony_ci} 27094332d3Sopenharmony_civoid UtestUSBCameraTestMult::TearDown(void) 28094332d3Sopenharmony_ci{ 29094332d3Sopenharmony_ci cameraBase_->Close(); 30094332d3Sopenharmony_ci} 31094332d3Sopenharmony_ci 32094332d3Sopenharmony_ciCamRetCode UtestUSBCameraTestMult::SelectOpenCamera(std::string cameraId) 33094332d3Sopenharmony_ci{ 34094332d3Sopenharmony_ci cameraBase_->cameraHost->GetCameraAbility(cameraId, vecAbility_); 35094332d3Sopenharmony_ci MetadataUtils::ConvertVecToMetadata(vecAbility_, ability_); 36094332d3Sopenharmony_ci const OHOS::sptr<DemoCameraDeviceCallback> callback = new DemoCameraDeviceCallback(); 37094332d3Sopenharmony_ci cameraBase_->rc = (CamRetCode)cameraBase_->cameraHost->OpenCamera(cameraId, callback, cameraDevice_); 38094332d3Sopenharmony_ci if (cameraBase_->rc != HDI::Camera::V1_0::NO_ERROR || cameraDevice_ == nullptr) { 39094332d3Sopenharmony_ci std::cout << "OpenCamera2 failed, rc = " << cameraBase_->rc << std::endl; 40094332d3Sopenharmony_ci return cameraBase_->rc; 41094332d3Sopenharmony_ci } 42094332d3Sopenharmony_ci std::cout << "OpenCamera2 success." << std::endl; 43094332d3Sopenharmony_ci return cameraBase_->rc; 44094332d3Sopenharmony_ci} 45094332d3Sopenharmony_ci 46094332d3Sopenharmony_civoid UtestUSBCameraTestMult::AchieveStreamOperator() 47094332d3Sopenharmony_ci{ 48094332d3Sopenharmony_ci OHOS::sptr<DemoStreamOperatorCallback> streamOperatorCallback = new DemoStreamOperatorCallback(); 49094332d3Sopenharmony_ci cameraBase_->rc = (CamRetCode)cameraDevice_->GetStreamOperator(streamOperatorCallback, streamOperator_); 50094332d3Sopenharmony_ci EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR); 51094332d3Sopenharmony_ci if (cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR) { 52094332d3Sopenharmony_ci std::cout << "AchieveStreamOperator2 success." << std::endl; 53094332d3Sopenharmony_ci } else { 54094332d3Sopenharmony_ci std::cout << "AchieveStreamOperator2 fail, rc = " << cameraBase_->rc << std::endl; 55094332d3Sopenharmony_ci } 56094332d3Sopenharmony_ci} 57094332d3Sopenharmony_ci 58094332d3Sopenharmony_civoid UtestUSBCameraTestMult::DefaultInfosPreview() 59094332d3Sopenharmony_ci{ 60094332d3Sopenharmony_ci if (streamCustomerPreview_ == nullptr) { 61094332d3Sopenharmony_ci streamCustomerPreview_ = std::make_shared<StreamCustomer>(); 62094332d3Sopenharmony_ci } 63094332d3Sopenharmony_ci streamInfoPre_.streamId_ = STREAM_ID_PREVIEW_DOUBLE; 64094332d3Sopenharmony_ci streamInfoPre_.width_ = PREVIEW_WIDTH; // 640:picture width 65094332d3Sopenharmony_ci streamInfoPre_.height_ = PREVIEW_HEIGHT; // 480:picture height 66094332d3Sopenharmony_ci streamInfoPre_.format_ = PIXEL_FMT_RGBA_8888; 67094332d3Sopenharmony_ci streamInfoPre_.dataspace_ = 8; // 8:picture dataspace 68094332d3Sopenharmony_ci streamInfoPre_.intent_ = PREVIEW; 69094332d3Sopenharmony_ci streamInfoPre_.tunneledMode_ = 5; // 5:tunnel mode 70094332d3Sopenharmony_ci streamInfoPre_.bufferQueue_ = new BufferProducerSequenceable(streamCustomerPreview_->CreateProducer()); 71094332d3Sopenharmony_ci ASSERT_NE(streamInfoPre_.bufferQueue_, nullptr); 72094332d3Sopenharmony_ci streamInfoPre_.bufferQueue_->producer_->SetQueueSize(8); // 8:set bufferQueue size 73094332d3Sopenharmony_ci std::cout << "preview success1." << std::endl; 74094332d3Sopenharmony_ci std::vector<StreamInfo>().swap(streamInfos_); 75094332d3Sopenharmony_ci streamInfos_.push_back(streamInfoPre_); 76094332d3Sopenharmony_ci} 77094332d3Sopenharmony_ci 78094332d3Sopenharmony_civoid UtestUSBCameraTestMult::DefaultInfosVideo() 79094332d3Sopenharmony_ci{ 80094332d3Sopenharmony_ci if (streamCustomerVideo_ == nullptr) { 81094332d3Sopenharmony_ci streamCustomerVideo_ = std::make_shared<StreamCustomer>(); 82094332d3Sopenharmony_ci } 83094332d3Sopenharmony_ci streamInfoVideo_.streamId_ = STREAM_ID_VIDEO_DOUBLE; 84094332d3Sopenharmony_ci streamInfoVideo_.width_ = VIDEO_WIDTH; // 1280:picture width 85094332d3Sopenharmony_ci streamInfoVideo_.height_ = VIDEO_HEIGHT; // 960:picture height 86094332d3Sopenharmony_ci streamInfoVideo_.format_ = videoFormat_; 87094332d3Sopenharmony_ci streamInfoVideo_.dataspace_ = 8; // 8:picture dataspace 88094332d3Sopenharmony_ci streamInfoVideo_.intent_ = VIDEO; 89094332d3Sopenharmony_ci streamInfoVideo_.encodeType_ = ENCODE_TYPE_H264; 90094332d3Sopenharmony_ci streamInfoVideo_.tunneledMode_ = 5; // 5:tunnel mode 91094332d3Sopenharmony_ci streamInfoVideo_.bufferQueue_ = new BufferProducerSequenceable(streamCustomerVideo_->CreateProducer()); 92094332d3Sopenharmony_ci ASSERT_NE(streamInfoVideo_.bufferQueue_, nullptr); 93094332d3Sopenharmony_ci streamInfoVideo_.bufferQueue_->producer_->SetQueueSize(8); // 8:set bufferQueue size 94094332d3Sopenharmony_ci std::cout << "video success1." << std::endl; 95094332d3Sopenharmony_ci std::vector<StreamInfo>().swap(streamInfos_); 96094332d3Sopenharmony_ci streamInfos_.push_back(streamInfoVideo_); 97094332d3Sopenharmony_ci} 98094332d3Sopenharmony_ci 99094332d3Sopenharmony_civoid UtestUSBCameraTestMult::DefaultInfosCapture() 100094332d3Sopenharmony_ci{ 101094332d3Sopenharmony_ci if (streamCustomerCapture_ == nullptr) { 102094332d3Sopenharmony_ci streamCustomerCapture_ = std::make_shared<StreamCustomer>(); 103094332d3Sopenharmony_ci } 104094332d3Sopenharmony_ci streamInfoCapture_.streamId_ = STREAM_ID_CAPTURE_DOUBLE; 105094332d3Sopenharmony_ci streamInfoCapture_.width_ = CAPTURE_WIDTH; // 1280:picture width 106094332d3Sopenharmony_ci streamInfoCapture_.height_ = CAPTURE_HEIGHT; // 960:picture height 107094332d3Sopenharmony_ci streamInfoCapture_.format_ = PIXEL_FMT_RGBA_8888; 108094332d3Sopenharmony_ci streamInfoCapture_.dataspace_ = 8; // 8:picture dataspace 109094332d3Sopenharmony_ci streamInfoCapture_.intent_ = STILL_CAPTURE; 110094332d3Sopenharmony_ci streamInfoCapture_.encodeType_ = ENCODE_TYPE_JPEG; 111094332d3Sopenharmony_ci streamInfoCapture_.tunneledMode_ = 5; // 5:tunnel mode 112094332d3Sopenharmony_ci streamInfoCapture_.bufferQueue_ = new BufferProducerSequenceable(streamCustomerCapture_->CreateProducer()); 113094332d3Sopenharmony_ci ASSERT_NE(streamInfoCapture_.bufferQueue_, nullptr); 114094332d3Sopenharmony_ci streamInfoCapture_.bufferQueue_->producer_->SetQueueSize(8); // 8:set bufferQueue size 115094332d3Sopenharmony_ci std::cout << "capture success1." << std::endl; 116094332d3Sopenharmony_ci std::vector<StreamInfo>().swap(streamInfos_); 117094332d3Sopenharmony_ci streamInfos_.push_back(streamInfoCapture_); 118094332d3Sopenharmony_ci} 119094332d3Sopenharmony_ci 120094332d3Sopenharmony_civoid UtestUSBCameraTestMult::StartStream(std::vector<StreamIntent> intents) 121094332d3Sopenharmony_ci{ 122094332d3Sopenharmony_ci for (auto& intent : intents) { 123094332d3Sopenharmony_ci if (intent == PREVIEW) { 124094332d3Sopenharmony_ci DefaultInfosPreview(); 125094332d3Sopenharmony_ci } else if (intent == VIDEO) { 126094332d3Sopenharmony_ci DefaultInfosVideo(); 127094332d3Sopenharmony_ci } else if (intent == STILL_CAPTURE) { 128094332d3Sopenharmony_ci DefaultInfosCapture(); 129094332d3Sopenharmony_ci } 130094332d3Sopenharmony_ci cameraBase_->rc = (CamRetCode)streamOperator_->CreateStreams(streamInfos_); 131094332d3Sopenharmony_ci EXPECT_EQ(false, cameraBase_->rc != HDI::Camera::V1_0::NO_ERROR); 132094332d3Sopenharmony_ci if (cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR) { 133094332d3Sopenharmony_ci std::cout << "CreateStreams2 success." << std::endl; 134094332d3Sopenharmony_ci } else { 135094332d3Sopenharmony_ci std::cout << "CreateStreams2 fail, rc = " << cameraBase_->rc << std::endl; 136094332d3Sopenharmony_ci } 137094332d3Sopenharmony_ci 138094332d3Sopenharmony_ci cameraBase_->rc = (CamRetCode)streamOperator_->CommitStreams(NORMAL, vecAbility_); 139094332d3Sopenharmony_ci EXPECT_EQ(false, cameraBase_->rc != HDI::Camera::V1_0::NO_ERROR); 140094332d3Sopenharmony_ci if (cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR) { 141094332d3Sopenharmony_ci std::cout << "CommitStreams2 success." << std::endl; 142094332d3Sopenharmony_ci } else { 143094332d3Sopenharmony_ci std::cout << "CommitStreams2 fail, rc = " << cameraBase_->rc << std::endl; 144094332d3Sopenharmony_ci } 145094332d3Sopenharmony_ci } 146094332d3Sopenharmony_ci} 147094332d3Sopenharmony_ci 148094332d3Sopenharmony_civoid UtestUSBCameraTestMult::StoreImage(const unsigned char *bufStart, const uint32_t size) 149094332d3Sopenharmony_ci{ 150094332d3Sopenharmony_ci constexpr uint32_t pathLen = 64; 151094332d3Sopenharmony_ci char path[pathLen] = {0}; 152094332d3Sopenharmony_ci#ifdef CAMERA_BUILT_ON_OHOS_LITE 153094332d3Sopenharmony_ci char prefix[] = "/userdata/photo/"; 154094332d3Sopenharmony_ci#else 155094332d3Sopenharmony_ci char prefix[] = "/data/"; 156094332d3Sopenharmony_ci#endif 157094332d3Sopenharmony_ci 158094332d3Sopenharmony_ci int imgFD = 0; 159094332d3Sopenharmony_ci int ret = 0; 160094332d3Sopenharmony_ci 161094332d3Sopenharmony_ci struct timeval start = {}; 162094332d3Sopenharmony_ci gettimeofday(&start, nullptr); 163094332d3Sopenharmony_ci if (sprintf_s(path, sizeof(path), "%spicture222_%ld.jpeg", prefix, start.tv_usec) < 0) { 164094332d3Sopenharmony_ci CAMERA_LOGE("sprintf_s error .....\n"); 165094332d3Sopenharmony_ci return; 166094332d3Sopenharmony_ci } 167094332d3Sopenharmony_ci 168094332d3Sopenharmony_ci imgFD = open(path, O_RDWR | O_CREAT, 00766); // 00766:file operate permission 169094332d3Sopenharmony_ci if (imgFD == -1) { 170094332d3Sopenharmony_ci CAMERA_LOGE("demo test:open image file error %{public}s.....\n", strerror(errno)); 171094332d3Sopenharmony_ci return; 172094332d3Sopenharmony_ci } 173094332d3Sopenharmony_ci 174094332d3Sopenharmony_ci CAMERA_LOGD("demo test:StoreImage2 %{public}s size == %{public}d\n", path, size); 175094332d3Sopenharmony_ci 176094332d3Sopenharmony_ci ret = write(imgFD, bufStart, size); 177094332d3Sopenharmony_ci if (ret == -1) { 178094332d3Sopenharmony_ci CAMERA_LOGE("demo test:write image file error %{public}s.....\n", strerror(errno)); 179094332d3Sopenharmony_ci } 180094332d3Sopenharmony_ci 181094332d3Sopenharmony_ci close(imgFD); 182094332d3Sopenharmony_ci} 183094332d3Sopenharmony_ci 184094332d3Sopenharmony_civoid UtestUSBCameraTestMult::StoreVideo(const unsigned char *bufStart, const uint32_t size) 185094332d3Sopenharmony_ci{ 186094332d3Sopenharmony_ci int ret = 0; 187094332d3Sopenharmony_ci 188094332d3Sopenharmony_ci ret = write(videoFd_, bufStart, size); 189094332d3Sopenharmony_ci if (ret == -1) { 190094332d3Sopenharmony_ci CAMERA_LOGE("demo test:write video file error %{public}s.....\n", strerror(errno)); 191094332d3Sopenharmony_ci } 192094332d3Sopenharmony_ci CAMERA_LOGD("demo test:StoreVideo size == %{public}d\n", size); 193094332d3Sopenharmony_ci} 194094332d3Sopenharmony_ci 195094332d3Sopenharmony_civoid UtestUSBCameraTestMult::OpenVideoFile() 196094332d3Sopenharmony_ci{ 197094332d3Sopenharmony_ci constexpr uint32_t pathLen = 64; 198094332d3Sopenharmony_ci char path[pathLen] = {0}; 199094332d3Sopenharmony_ci#ifdef CAMERA_BUILT_ON_OHOS_LITE 200094332d3Sopenharmony_ci char prefix[] = "/userdata/video/"; 201094332d3Sopenharmony_ci#else 202094332d3Sopenharmony_ci char prefix[] = "/data/"; 203094332d3Sopenharmony_ci#endif 204094332d3Sopenharmony_ci auto seconds = time(nullptr); 205094332d3Sopenharmony_ci if (sprintf_s(path, sizeof(path), "%svideo222%ld.h264", prefix, seconds) < 0) { 206094332d3Sopenharmony_ci CAMERA_LOGE("%{public}s: sprintf failed", __func__); 207094332d3Sopenharmony_ci return; 208094332d3Sopenharmony_ci } 209094332d3Sopenharmony_ci videoFd_ = open(path, O_RDWR | O_CREAT, 00766); // 00766:file operate permission 210094332d3Sopenharmony_ci if (videoFd_ < 0) { 211094332d3Sopenharmony_ci CAMERA_LOGE("demo test: StartVideo open %s %{public}s failed", path, strerror(errno)); 212094332d3Sopenharmony_ci } 213094332d3Sopenharmony_ci} 214094332d3Sopenharmony_ci 215094332d3Sopenharmony_civoid UtestUSBCameraTestMult::CloseFd() 216094332d3Sopenharmony_ci{ 217094332d3Sopenharmony_ci close(videoFd_); 218094332d3Sopenharmony_ci videoFd_ = -1; 219094332d3Sopenharmony_ci} 220094332d3Sopenharmony_ci 221094332d3Sopenharmony_civoid UtestUSBCameraTestMult::StartCapture(int streamId, int captureId, bool shutterCallback, bool isStreaming) 222094332d3Sopenharmony_ci{ 223094332d3Sopenharmony_ci // Get preview 224094332d3Sopenharmony_ci captureInfo_.streamIds_ = {streamId}; 225094332d3Sopenharmony_ci captureInfo_.captureSetting_ = vecAbility_; 226094332d3Sopenharmony_ci captureInfo_.enableShutterCallback_ = shutterCallback; 227094332d3Sopenharmony_ci cameraBase_->rc = (CamRetCode)streamOperator_->Capture(captureId, captureInfo_, isStreaming); 228094332d3Sopenharmony_ci EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR); 229094332d3Sopenharmony_ci if (cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR) { 230094332d3Sopenharmony_ci std::cout << "check Capture: Capture2 success, captureId = " << captureId << std::endl; 231094332d3Sopenharmony_ci } else { 232094332d3Sopenharmony_ci std::cout << "check Capture: Capture2 fail, rc = " << cameraBase_->rc 233094332d3Sopenharmony_ci << ", captureId = " << captureId<< std::endl; 234094332d3Sopenharmony_ci } 235094332d3Sopenharmony_ci if (captureId == CAPTURE_ID_PREVIEW_DOUBLE) { 236094332d3Sopenharmony_ci streamCustomerPreview_->ReceiveFrameOn(nullptr); 237094332d3Sopenharmony_ci } else if (captureId == CAPTURE_ID_CAPTURE_DOUBLE) { 238094332d3Sopenharmony_ci streamCustomerCapture_->ReceiveFrameOn([this](const unsigned char *addr, const uint32_t size) { 239094332d3Sopenharmony_ci StoreImage(addr, size); 240094332d3Sopenharmony_ci }); 241094332d3Sopenharmony_ci } else if (captureId == CAPTURE_ID_VIDEO_DOUBLE) { 242094332d3Sopenharmony_ci OpenVideoFile(); 243094332d3Sopenharmony_ci streamCustomerVideo_->ReceiveFrameOn([this](const unsigned char *addr, const uint32_t size) { 244094332d3Sopenharmony_ci StoreVideo(addr, size); 245094332d3Sopenharmony_ci }); 246094332d3Sopenharmony_ci } 247094332d3Sopenharmony_ci sleep(2); // 2:sleep two second 248094332d3Sopenharmony_ci} 249094332d3Sopenharmony_ci 250094332d3Sopenharmony_civoid UtestUSBCameraTestMult::StopStream(std::vector<int>& captureIds, std::vector<int>& streamIds) 251094332d3Sopenharmony_ci{ 252094332d3Sopenharmony_ci constexpr uint32_t TIME_FOR_WAIT_CANCEL_CAPTURE = 2; 253094332d3Sopenharmony_ci sleep(TIME_FOR_WAIT_CANCEL_CAPTURE); 254094332d3Sopenharmony_ci if (captureIds.size() > 0) { 255094332d3Sopenharmony_ci for (auto &captureId : captureIds) { 256094332d3Sopenharmony_ci if (captureId == CAPTURE_ID_PREVIEW_DOUBLE) { 257094332d3Sopenharmony_ci streamCustomerPreview_->ReceiveFrameOff(); 258094332d3Sopenharmony_ci } else if (captureId == CAPTURE_ID_CAPTURE_DOUBLE) { 259094332d3Sopenharmony_ci streamCustomerCapture_->ReceiveFrameOff(); 260094332d3Sopenharmony_ci } else if (captureId == CAPTURE_ID_VIDEO_DOUBLE) { 261094332d3Sopenharmony_ci streamCustomerVideo_->ReceiveFrameOff(); 262094332d3Sopenharmony_ci sleep(1); 263094332d3Sopenharmony_ci CloseFd(); 264094332d3Sopenharmony_ci } 265094332d3Sopenharmony_ci } 266094332d3Sopenharmony_ci for (const auto &captureId : captureIds) { 267094332d3Sopenharmony_ci std::cout << "check Capture: CancelCapture success, captureId = " << captureId << std::endl; 268094332d3Sopenharmony_ci cameraBase_->rc = (CamRetCode)streamOperator_->CancelCapture(captureId); 269094332d3Sopenharmony_ci sleep(TIME_FOR_WAIT_CANCEL_CAPTURE); 270094332d3Sopenharmony_ci EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR); 271094332d3Sopenharmony_ci if (cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR) { 272094332d3Sopenharmony_ci std::cout << "check Capture: CancelCapture success, captureId = " << captureId << std::endl; 273094332d3Sopenharmony_ci } else { 274094332d3Sopenharmony_ci std::cout << "check Capture: CancelCapture fail, rc = " 275094332d3Sopenharmony_ci << cameraBase_->rc <<", captureId = " << captureId << std::endl; 276094332d3Sopenharmony_ci } 277094332d3Sopenharmony_ci } 278094332d3Sopenharmony_ci } 279094332d3Sopenharmony_ci sleep(1); // 1:sleep two second 280094332d3Sopenharmony_ci if (streamIds.size() > 0) { 281094332d3Sopenharmony_ci // release stream 282094332d3Sopenharmony_ci cameraBase_->rc = (CamRetCode)streamOperator_->ReleaseStreams(streamIds); 283094332d3Sopenharmony_ci EXPECT_EQ(true, cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR); 284094332d3Sopenharmony_ci if (cameraBase_->rc == HDI::Camera::V1_0::NO_ERROR) { 285094332d3Sopenharmony_ci std::cout << "check Capture: ReleaseStreams success." << std::endl; 286094332d3Sopenharmony_ci } else { 287094332d3Sopenharmony_ci std::cout << "check Capture: ReleaseStreams fail, rc = " 288094332d3Sopenharmony_ci << cameraBase_->rc << ", streamIds = " << streamIds.front() << std::endl; 289094332d3Sopenharmony_ci } 290094332d3Sopenharmony_ci } 291094332d3Sopenharmony_ci} 292094332d3Sopenharmony_ci 293094332d3Sopenharmony_ciconst std::map<uint32_t, uint32_t> g_mapOhosFmtToPixFmt = { 294094332d3Sopenharmony_ci { OHOS_CAMERA_FORMAT_RGBA_8888, PIXEL_FMT_RGBA_8888 }, 295094332d3Sopenharmony_ci { OHOS_CAMERA_FORMAT_YCRCB_420_SP, PIXEL_FMT_YCRCB_420_SP }, 296094332d3Sopenharmony_ci}; 297094332d3Sopenharmony_ci 298094332d3Sopenharmony_ciuint32_t UtestUSBCameraTestMult::ConvertPixfmtHal2V4l2(uint32_t ohosfmt) 299094332d3Sopenharmony_ci{ 300094332d3Sopenharmony_ci auto it = g_mapOhosFmtToPixFmt.find(ohosfmt); 301094332d3Sopenharmony_ci if (it == g_mapOhosFmtToPixFmt.end()) { 302094332d3Sopenharmony_ci CAMERA_LOGI("The ohosfmt is not find in g_mapOhosFmtToPixFmt"); 303094332d3Sopenharmony_ci return PIXEL_FMT_RGBA_8888; // default value 304094332d3Sopenharmony_ci } 305094332d3Sopenharmony_ci return it->second; 306094332d3Sopenharmony_ci} 307094332d3Sopenharmony_ci 308094332d3Sopenharmony_ci/** 309094332d3Sopenharmony_ci * @tc.name: USB Camera 310094332d3Sopenharmony_ci * @tc.desc: USB Camera, getCameraID success. 311094332d3Sopenharmony_ci * @tc.level: Level0 312094332d3Sopenharmony_ci * @tc.size: MediumTest 313094332d3Sopenharmony_ci * @tc.type: Function 314094332d3Sopenharmony_ci */ 315094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTestMult, camera_usb_mult_0001) 316094332d3Sopenharmony_ci{ 317094332d3Sopenharmony_ci std::vector<std::string> usbCameraIds; 318094332d3Sopenharmony_ci cameraBase_->cameraHost->GetCameraIds(usbCameraIds); 319094332d3Sopenharmony_ci // 1:number of connected cameras 320094332d3Sopenharmony_ci usbCameraExit_ = usbCameraIds.size() > 1; 321094332d3Sopenharmony_ci if (!usbCameraExit_) { 322094332d3Sopenharmony_ci GTEST_SKIP() << "No usb camera plugged in" << std::endl; 323094332d3Sopenharmony_ci } 324094332d3Sopenharmony_ci cameraBase_->rc = cameraBase_->SelectOpenCamera(usbCameraIds[0]); // 0:first camera id 325094332d3Sopenharmony_ci ASSERT_EQ(cameraBase_->rc, HDI::Camera::V1_0::NO_ERROR); 326094332d3Sopenharmony_ci cameraBase_->rc = SelectOpenCamera(usbCameraIds[1]); // 1:second camera id 327094332d3Sopenharmony_ci ASSERT_EQ(cameraBase_->rc, HDI::Camera::V1_0::NO_ERROR); 328094332d3Sopenharmony_ci cameraBase_->AchieveStreamOperator(); 329094332d3Sopenharmony_ci AchieveStreamOperator(); 330094332d3Sopenharmony_ci 331094332d3Sopenharmony_ci cameraBase_->intents = {PREVIEW}; 332094332d3Sopenharmony_ci cameraBase_->StartStream(cameraBase_->intents); 333094332d3Sopenharmony_ci StartStream(cameraBase_->intents); 334094332d3Sopenharmony_ci cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true); 335094332d3Sopenharmony_ci StartCapture(STREAM_ID_PREVIEW_DOUBLE, CAPTURE_ID_PREVIEW_DOUBLE, false, true); 336094332d3Sopenharmony_ci cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW}; 337094332d3Sopenharmony_ci cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW}; 338094332d3Sopenharmony_ci cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds); 339094332d3Sopenharmony_ci cameraBase_->captureIds = {CAPTURE_ID_PREVIEW_DOUBLE}; 340094332d3Sopenharmony_ci cameraBase_->streamIds = {STREAM_ID_PREVIEW_DOUBLE}; 341094332d3Sopenharmony_ci StopStream(cameraBase_->captureIds, cameraBase_->streamIds); 342094332d3Sopenharmony_ci} 343094332d3Sopenharmony_ci 344094332d3Sopenharmony_ci/** 345094332d3Sopenharmony_ci * @tc.name: USB Camera 346094332d3Sopenharmony_ci * @tc.desc: USB Camera, getCameraID success. 347094332d3Sopenharmony_ci * @tc.level: Level0 348094332d3Sopenharmony_ci * @tc.size: MediumTest 349094332d3Sopenharmony_ci * @tc.type: Function 350094332d3Sopenharmony_ci */ 351094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTestMult, camera_usb_mult_0002) 352094332d3Sopenharmony_ci{ 353094332d3Sopenharmony_ci std::vector<std::string> usbCameraIds; 354094332d3Sopenharmony_ci cameraBase_->cameraHost->GetCameraIds(usbCameraIds); 355094332d3Sopenharmony_ci // 1:number of connected cameras 356094332d3Sopenharmony_ci usbCameraExit_ = usbCameraIds.size() > 1; 357094332d3Sopenharmony_ci if (!usbCameraExit_) { 358094332d3Sopenharmony_ci GTEST_SKIP() << "No usb camera plugged in" << std::endl; 359094332d3Sopenharmony_ci } 360094332d3Sopenharmony_ci cameraBase_->rc = cameraBase_->SelectOpenCamera(usbCameraIds[0]); // 0:first camera id 361094332d3Sopenharmony_ci ASSERT_EQ(cameraBase_->rc, HDI::Camera::V1_0::NO_ERROR); 362094332d3Sopenharmony_ci cameraBase_->rc = SelectOpenCamera(usbCameraIds[1]); // 1:second camera id 363094332d3Sopenharmony_ci ASSERT_EQ(cameraBase_->rc, HDI::Camera::V1_0::NO_ERROR); 364094332d3Sopenharmony_ci cameraBase_->AchieveStreamOperator(); 365094332d3Sopenharmony_ci AchieveStreamOperator(); 366094332d3Sopenharmony_ci 367094332d3Sopenharmony_ci cameraBase_->intents = {PREVIEW, STILL_CAPTURE}; 368094332d3Sopenharmony_ci cameraBase_->StartStream(cameraBase_->intents); 369094332d3Sopenharmony_ci StartStream(cameraBase_->intents); 370094332d3Sopenharmony_ci cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true); 371094332d3Sopenharmony_ci cameraBase_->StartCapture(cameraBase_->STREAM_ID_CAPTURE, cameraBase_->CAPTURE_ID_CAPTURE, false, true); 372094332d3Sopenharmony_ci StartCapture(STREAM_ID_PREVIEW_DOUBLE, CAPTURE_ID_PREVIEW_DOUBLE, false, true); 373094332d3Sopenharmony_ci StartCapture(STREAM_ID_CAPTURE_DOUBLE, CAPTURE_ID_CAPTURE_DOUBLE, false, true); 374094332d3Sopenharmony_ci cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_CAPTURE}; 375094332d3Sopenharmony_ci cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_CAPTURE}; 376094332d3Sopenharmony_ci cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds); 377094332d3Sopenharmony_ci cameraBase_->captureIds = {CAPTURE_ID_PREVIEW_DOUBLE, CAPTURE_ID_CAPTURE_DOUBLE}; 378094332d3Sopenharmony_ci cameraBase_->streamIds = {STREAM_ID_PREVIEW_DOUBLE, STREAM_ID_CAPTURE_DOUBLE}; 379094332d3Sopenharmony_ci StopStream(cameraBase_->captureIds, cameraBase_->streamIds); 380094332d3Sopenharmony_ci} 381094332d3Sopenharmony_ci 382094332d3Sopenharmony_ci/** 383094332d3Sopenharmony_ci * @tc.name: USB Camera 384094332d3Sopenharmony_ci * @tc.desc: USB Camera, getCameraID success. 385094332d3Sopenharmony_ci * @tc.level: Level0 386094332d3Sopenharmony_ci * @tc.size: MediumTest 387094332d3Sopenharmony_ci * @tc.type: Function 388094332d3Sopenharmony_ci */ 389094332d3Sopenharmony_ciTEST_F(UtestUSBCameraTestMult, camera_usb_mult_0003) 390094332d3Sopenharmony_ci{ 391094332d3Sopenharmony_ci std::vector<std::string> usbCameraIds; 392094332d3Sopenharmony_ci cameraBase_->cameraHost->GetCameraIds(usbCameraIds); 393094332d3Sopenharmony_ci // 1:number of connected cameras 394094332d3Sopenharmony_ci usbCameraExit_ = usbCameraIds.size() > 1; 395094332d3Sopenharmony_ci if (!usbCameraExit_) { 396094332d3Sopenharmony_ci GTEST_SKIP() << "No usb camera plugged in" << std::endl; 397094332d3Sopenharmony_ci } 398094332d3Sopenharmony_ci cameraBase_->rc = cameraBase_->SelectOpenCamera(usbCameraIds[0]); // 0:first camera id 399094332d3Sopenharmony_ci ASSERT_EQ(cameraBase_->rc, HDI::Camera::V1_0::NO_ERROR); 400094332d3Sopenharmony_ci cameraBase_->rc = SelectOpenCamera(usbCameraIds[1]); // 1:second camera id 401094332d3Sopenharmony_ci ASSERT_EQ(cameraBase_->rc, HDI::Camera::V1_0::NO_ERROR); 402094332d3Sopenharmony_ci cameraBase_->AchieveStreamOperator(); 403094332d3Sopenharmony_ci AchieveStreamOperator(); 404094332d3Sopenharmony_ci 405094332d3Sopenharmony_ci ability_ = cameraBase_->GetCameraAbility(); 406094332d3Sopenharmony_ci EXPECT_NE(ability_, nullptr); 407094332d3Sopenharmony_ci common_metadata_header_t *data = ability_->get(); 408094332d3Sopenharmony_ci EXPECT_NE(data, nullptr); 409094332d3Sopenharmony_ci camera_metadata_item_t entry; 410094332d3Sopenharmony_ci int ret = FindCameraMetadataItem(data, OHOS_ABILITY_STREAM_AVAILABLE_EXTEND_CONFIGURATIONS, &entry); 411094332d3Sopenharmony_ci 412094332d3Sopenharmony_ci uint32_t format = 0; 413094332d3Sopenharmony_ci if (ret == 0 && entry.data.i32 != nullptr && entry.count > 0) { 414094332d3Sopenharmony_ci format = entry.data.i32[entry.count - 6]; // 6:The sixth digit from the bottom is the format of video 415094332d3Sopenharmony_ci } 416094332d3Sopenharmony_ci videoFormat_ = ConvertPixfmtHal2V4l2(format); 417094332d3Sopenharmony_ci 418094332d3Sopenharmony_ci for (int i = 0; i < usbCameraIds.size(); i++) { 419094332d3Sopenharmony_ci cameraBase_->rc = cameraBase_->SelectOpenCamera(usbCameraIds[i]); 420094332d3Sopenharmony_ci ASSERT_EQ(cameraBase_->rc, HDI::Camera::V1_0::NO_ERROR); 421094332d3Sopenharmony_ci // Get the stream manager 422094332d3Sopenharmony_ci cameraBase_->AchieveStreamOperator(); 423094332d3Sopenharmony_ci // start stream 424094332d3Sopenharmony_ci cameraBase_->intents = {PREVIEW, STILL_CAPTURE, VIDEO}; 425094332d3Sopenharmony_ci cameraBase_->StartStream(cameraBase_->intents); 426094332d3Sopenharmony_ci // Get preview 427094332d3Sopenharmony_ci cameraBase_->StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true); 428094332d3Sopenharmony_ci cameraBase_->StartCapture(cameraBase_->STREAM_ID_CAPTURE, cameraBase_->CAPTURE_ID_CAPTURE, false, true); 429094332d3Sopenharmony_ci cameraBase_->StartCapture(cameraBase_->STREAM_ID_VIDEO, cameraBase_->CAPTURE_ID_VIDEO, false, true); 430094332d3Sopenharmony_ci // release stream 431094332d3Sopenharmony_ci cameraBase_->captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_CAPTURE, 432094332d3Sopenharmony_ci cameraBase_->CAPTURE_ID_VIDEO}; 433094332d3Sopenharmony_ci cameraBase_->streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_CAPTURE, 434094332d3Sopenharmony_ci cameraBase_->STREAM_ID_VIDEO}; 435094332d3Sopenharmony_ci cameraBase_->StopStream(cameraBase_->captureIds, cameraBase_->streamIds); 436094332d3Sopenharmony_ci } 437094332d3Sopenharmony_ci} 438