1/* 2 * Copyright (c) 2022 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#include "meta_data_test.h" 16 17using namespace testing::ext; 18 19constexpr uint32_t SLEEP_SECOND_ONE = 1; 20constexpr uint32_t SLEEP_SECOND_TWO = 2; 21constexpr uint32_t DATA_COUNT = 1; 22constexpr uint32_t ENTRY_CAPACITY = 30; 23constexpr uint32_t DATA_CAPACITY = 2000; 24constexpr int32_t FPS_RANGE = 20; 25constexpr int32_t FPS_RANGE_CHANGE = 30; 26 27const std::vector<int32_t> DATA_BASE = { 28 OHOS_CAMERA_STREAM_ID, 29 OHOS_SENSOR_COLOR_CORRECTION_GAINS, 30 OHOS_SENSOR_EXPOSURE_TIME, 31 OHOS_CONTROL_EXPOSURE_MODE, 32 OHOS_CONTROL_AE_EXPOSURE_COMPENSATION, 33 OHOS_CONTROL_FOCUS_MODE, 34 OHOS_CONTROL_METER_MODE, 35 OHOS_CONTROL_FLASH_MODE, 36 OHOS_CONTROL_FPS_RANGES, 37 OHOS_CONTROL_AWB_MODE, 38 OHOS_CONTROL_AF_REGIONS, 39 OHOS_CONTROL_METER_POINT, 40 OHOS_CONTROL_VIDEO_STABILIZATION_MODE, 41 OHOS_CONTROL_FOCUS_STATE, 42 OHOS_CONTROL_EXPOSURE_STATE, 43}; 44 45void MetaDataTest::SetUpTestCase(void) {} 46void MetaDataTest::TearDownTestCase(void) {} 47void MetaDataTest::SetUp(void) 48{ 49 if (cameraBase_ == nullptr) { 50 cameraBase_ = std::make_shared<TestCameraBase>(); 51 } 52 cameraBase_->Init(); 53} 54void MetaDataTest::TearDown(void) 55{ 56 cameraBase_->Close(); 57} 58 59void MetaDataTest::SetStreamInfo(StreamInfo &streamInfo, const std::shared_ptr<StreamCustomer> &streamCustomer, 60 const int streamId, const StreamIntent intent) 61{ 62 sptr<OHOS::IBufferProducer> producer; 63 constexpr uint32_t DATA_SPACE = 8; 64 constexpr uint32_t TUNNEL_MODE = 5; 65 constexpr uint32_t BUFFER_QUEUE_SIZE = 8; 66 if (intent == STILL_CAPTURE) { 67 streamInfo.encodeType_ = ENCODE_TYPE_JPEG; 68 } else if (intent == VIDEO) { 69 streamInfo.encodeType_ = ENCODE_TYPE_H264; 70 } 71 streamInfo.width_ = PREVIEW_WIDTH; 72 streamInfo.height_ = PREVIEW_HEIGHT; 73 streamInfo.format_ = PIXEL_FMT_RGBA_8888; 74 streamInfo.streamId_ = streamId; 75 streamInfo.dataspace_ = DATA_SPACE; 76 streamInfo.intent_ = intent; 77 streamInfo.tunneledMode_ = TUNNEL_MODE; 78 producer = streamCustomer->CreateProducer(); 79 streamInfo.bufferQueue_ = new BufferProducerSequenceable(producer); 80 CHECK_IF_PTR_NULL_RETURN_VOID(streamInfo.bufferQueue_); 81 streamInfo.bufferQueue_->producer_->SetQueueSize(BUFFER_QUEUE_SIZE); 82} 83 84void MetaDataTest::CreateStream(int streamId, StreamIntent intent) 85{ 86 StreamInfo streamInfo = {}; 87 88 if (intent == PREVIEW) { 89 if (streamId == cameraBase_->STREAM_ID_PREVIEW) { 90 if (streamCustomerPreview_ == nullptr) { 91 streamCustomerPreview_ = std::make_shared<StreamCustomer>(); 92 SetStreamInfo(streamInfo, streamCustomerPreview_, streamId, intent); 93 } 94 } 95 } else if (intent == STILL_CAPTURE) { 96 if (streamCustomerSnapshot_ == nullptr) { 97 streamCustomerSnapshot_ = std::make_shared<StreamCustomer>(); 98 SetStreamInfo(streamInfo, streamCustomerSnapshot_, streamId, intent); 99 } 100 } else if (intent == VIDEO) { 101 if (streamCustomerVideo_ == nullptr) { 102 streamCustomerVideo_ = std::make_shared<StreamCustomer>(); 103 SetStreamInfo(streamInfo, streamCustomerVideo_, streamId, intent); 104 } 105 } 106 107 std::vector<StreamInfo>().swap(streamInfos_); 108 streamInfos_.push_back(streamInfo); 109 result_ = static_cast<CamRetCode>(cameraBase_->streamOperator->CreateStreams(streamInfos_)); 110 EXPECT_EQ(result_, HDI::Camera::V1_0::NO_ERROR); 111 112 if (result_ == HDI::Camera::V1_0::NO_ERROR) { 113 CAMERA_LOGI("CreateStreams success."); 114 } else { 115 CAMERA_LOGE("CreateStreams fail, result_ = %{public}d", result_); 116 } 117} 118 119void MetaDataTest::CommitStream() 120{ 121 result_ = static_cast<CamRetCode>(cameraBase_->streamOperator->CommitStreams(NORMAL, cameraBase_->ability_)); 122 EXPECT_EQ(result_, HDI::Camera::V1_0::NO_ERROR); 123 if (result_ == HDI::Camera::V1_0::NO_ERROR) { 124 CAMERA_LOGI("CommitStreams preview success."); 125 } else { 126 CAMERA_LOGE("CommitStreams preview fail, result_ = %{public}d", result_); 127 } 128} 129 130void MetaDataTest::StartCapture( 131 int streamId, int captureId, bool shutterCallback, bool isStreaming, const CaptureInfo captureInfo) 132{ 133 captureInfo_.streamIds_ = {streamId}; 134 captureInfo_.captureSetting_ = cameraBase_->ability_; 135 captureInfo_.enableShutterCallback_ = shutterCallback; 136 if (captureInfo.captureSetting_.size() != 0) { 137 result_ = static_cast<CamRetCode>(cameraBase_->streamOperator->Capture(captureId, captureInfo, isStreaming)); 138 } else { 139 result_ = static_cast<CamRetCode>(cameraBase_->streamOperator->Capture(captureId, captureInfo_, isStreaming)); 140 } 141 EXPECT_EQ(result_, HDI::Camera::V1_0::NO_ERROR); 142 if (result_ == HDI::Camera::V1_0::NO_ERROR) { 143 CAMERA_LOGI("Capture success, captureId = %{public}d", captureId); 144 } else { 145 CAMERA_LOGE("check Capture: Capture fail, captureId = %{public}d, result_ = %{public}d", captureId, result_); 146 } 147 if (captureId == cameraBase_->CAPTURE_ID_PREVIEW) { 148 streamCustomerPreview_->ReceiveFrameOn([this](const unsigned char *addr, const uint32_t size) { 149 CAMERA_LOGI("preview size = %{public}u", size); 150 }); 151 } else if (captureId == cameraBase_->CAPTURE_ID_CAPTURE) { 152 streamCustomerSnapshot_->ReceiveFrameOn([this](const unsigned char *addr, const uint32_t size) { 153 CAMERA_LOGI("snapshot size = %{public}u", size); 154 }); 155 } else if (captureId == cameraBase_->CAPTURE_ID_VIDEO) { 156 streamCustomerVideo_->ReceiveFrameOn([this](const unsigned char *addr, const uint32_t size) { 157 CAMERA_LOGI("video size = %{public}u", size); 158 }); 159 } else { 160 CAMERA_LOGE("StartCapture ignore command "); 161 } 162} 163 164void MetaDataTest::StopStream(std::vector<int> &captureIds, std::vector<int> &streamIds) 165{ 166 sleep(SLEEP_SECOND_TWO); 167 if (captureIds.size() == 0) { 168 return; 169 } 170 for (const auto &captureId : captureIds) { 171 if (captureId == cameraBase_->CAPTURE_ID_PREVIEW) { 172 streamCustomerPreview_->ReceiveFrameOff(); 173 } else if (captureId == cameraBase_->CAPTURE_ID_CAPTURE) { 174 streamCustomerSnapshot_->ReceiveFrameOff(); 175 } else if (captureId == cameraBase_->CAPTURE_ID_VIDEO) { 176 streamCustomerVideo_->ReceiveFrameOff(); 177 sleep(SLEEP_SECOND_ONE); 178 } else { 179 CAMERA_LOGE("StopStream ignore command "); 180 } 181 } 182 for (auto &captureId : captureIds) { 183 result_ = static_cast<CamRetCode>(cameraBase_->streamOperator->CancelCapture(captureId)); 184 sleep(SLEEP_SECOND_TWO); 185 EXPECT_EQ(result_, HDI::Camera::V1_0::NO_ERROR); 186 if (result_ == HDI::Camera::V1_0::NO_ERROR) { 187 CAMERA_LOGI("check Capture: CancelCapture success, captureId = %{public}d", captureId); 188 } else { 189 CAMERA_LOGE("check Capture: CancelCapture fail, captureId = %{public}d, result_ = %{public}d", 190 captureId, result_); 191 } 192 } 193 sleep(SLEEP_SECOND_ONE); 194} 195 196void MetaDataTest::StartCustomCapture() 197{ 198 CaptureInfo captureInfo = {}; 199 StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true, captureInfo); 200 constexpr double latitude = 27.987500; // dummy data: Qomolangma latitde 201 constexpr double longitude = 86.927500; // dummy data: Qomolangma longituude 202 constexpr double altitude = 8848.86; // dummy data: Qomolangma altitude 203 std::shared_ptr<CameraSetting> captureSetting = std::make_shared<CameraSetting>(ENTRY_CAPACITY, DATA_CAPACITY); 204 std::vector<double> gps; 205 gps.push_back(latitude); 206 gps.push_back(longitude); 207 gps.push_back(altitude); 208 captureSetting->addEntry(OHOS_JPEG_GPS_COORDINATES, gps.data(), gps.size()); 209 210 captureInfo.streamIds_ = {cameraBase_->STREAM_ID_CAPTURE}; 211 std::vector<uint8_t> snapshotSetting; 212 MetadataUtils::ConvertMetadataToVec(captureSetting, snapshotSetting); 213 captureInfo.captureSetting_ = snapshotSetting; 214 captureInfo.enableShutterCallback_ = false; 215 StartCapture(cameraBase_->STREAM_ID_CAPTURE, cameraBase_->CAPTURE_ID_CAPTURE, false, true, captureInfo); 216} 217 218void MetaDataTest::StartPreviewVideoStream() 219{ 220 CreateStream(cameraBase_->STREAM_ID_PREVIEW, PREVIEW); 221 CreateStream(cameraBase_->STREAM_ID_VIDEO, VIDEO); 222 CommitStream(); 223} 224 225void MetaDataTest::StartPreviewCaptureStream() 226{ 227 CreateStream(cameraBase_->STREAM_ID_PREVIEW, PREVIEW); 228 CreateStream(cameraBase_->STREAM_ID_CAPTURE, STILL_CAPTURE); 229 CommitStream(); 230} 231 232void MetaDataTest::StopPreviewVideoStream() 233{ 234 sleep(SLEEP_SECOND_TWO); 235 std::vector<int> captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_VIDEO}; 236 std::vector<int> streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_VIDEO}; 237 StopStream(captureIds, streamIds); 238} 239 240void MetaDataTest::StopPreviewCaptureStream() 241{ 242 sleep(SLEEP_SECOND_TWO); 243 std::vector<int> captureIds = {cameraBase_->CAPTURE_ID_PREVIEW, cameraBase_->CAPTURE_ID_CAPTURE}; 244 std::vector<int> streamIds = {cameraBase_->STREAM_ID_PREVIEW, cameraBase_->STREAM_ID_CAPTURE}; 245 StopStream(captureIds, streamIds); 246} 247 248void MetaDataTest::SetFps(std::shared_ptr<CameraSetting> &metaData, int32_t fps, bool isUpdate) 249{ 250 std::vector<int32_t> fpsRange; 251 fpsRange.push_back(fps); 252 fpsRange.push_back(fps); 253 254 if (isUpdate) { 255 metaData->updateEntry(OHOS_CONTROL_FPS_RANGES, fpsRange.data(), fpsRange.size()); 256 } else { 257 metaData->addEntry(OHOS_CONTROL_FPS_RANGES, fpsRange.data(), fpsRange.size()); 258 } 259} 260 261void MetaDataTest::Prepare(ResultCallbackMode mode, std::vector<MetaType> &results) 262{ 263 cameraBase_->AchieveStreamOperator(); 264 cameraBase_->cameraDevice->SetResultMode(mode); 265 266 if (results.size() == 0) { 267 CAMERA_LOGE("results size is null"); 268 return; 269 } 270 cameraBase_->cameraDevice->EnableResult(results); 271} 272 273void MetaDataTest::UpdateSettings(std::shared_ptr<CameraSetting> &metaData) 274{ 275 std::vector<uint8_t> setting; 276 MetadataUtils::ConvertMetadataToVec(metaData, setting); 277 cameraBase_->rc = static_cast<CamRetCode>(cameraBase_->cameraDevice->UpdateSettings(setting)); 278 if (cameraBase_->rc != HDI::Camera::V1_0::NO_ERROR) { 279 CAMERA_LOGE("UpdateSettings error, rc = %{public}d", cameraBase_->rc); 280 return; 281 } else { 282 CAMERA_LOGI("UpdateSettings ok, rc = %{public}d", cameraBase_->rc); 283 } 284} 285 286void MetaDataTest::StartPreviewVideoCapture() 287{ 288 CaptureInfo captureInfo = {}; 289 StartCapture(cameraBase_->STREAM_ID_PREVIEW, cameraBase_->CAPTURE_ID_PREVIEW, false, true, captureInfo); 290 StartCapture(cameraBase_->STREAM_ID_VIDEO, cameraBase_->CAPTURE_ID_VIDEO, false, true, captureInfo); 291} 292 293/** 294 * @tc.name: double preview 295 * @tc.desc: Commit 2 streams together, preview and video streams, isStreaming is true. 296 * CallbackMode is PER_FRAME, set device stream fps range value. 297 * @tc.level: Level1 298 * @tc.size: MediumTest 299 * @tc.type: Function 300 */ 301static HWTEST_F(MetaDataTest, meta_data_001, TestSize.Level1) 302{ 303 std::vector<MetaType> results; 304 results.push_back(OHOS_CAMERA_STREAM_ID); 305 results.push_back(OHOS_CONTROL_FPS_RANGES); 306 Prepare(ResultCallbackMode::PER_FRAME, results); 307 308 std::shared_ptr<CameraSetting> metaData = std::make_shared<CameraSetting>(ENTRY_CAPACITY, DATA_CAPACITY); 309 const int32_t deviceStreamId = 0; 310 metaData->addEntry(OHOS_CAMERA_STREAM_ID, &deviceStreamId, DATA_COUNT); 311 312 SetFps(metaData, FPS_RANGE, false); 313 314 StartPreviewVideoStream(); 315 316 UpdateSettings(metaData); 317 318 StartPreviewVideoCapture(); 319 320 StopPreviewVideoStream(); 321} 322 323/** 324 * @tc.name: double preview 325 * @tc.desc: Commit 2 streams together, preview and video streams, isStreaming is true. 326 * CallbackMode is ON_CHANGED, but the device stream fps range value has not changed. 327 * @tc.level: Level1 328 * @tc.size: MediumTest 329 * @tc.type: Function 330 */ 331static HWTEST_F(MetaDataTest, meta_data_002, TestSize.Level1) 332{ 333 std::vector<MetaType> results; 334 results.push_back(OHOS_CAMERA_STREAM_ID); 335 results.push_back(OHOS_CONTROL_FPS_RANGES); 336 Prepare(ResultCallbackMode::ON_CHANGED, results); 337 338 std::shared_ptr<CameraSetting> metaData = std::make_shared<CameraSetting>(ENTRY_CAPACITY, DATA_CAPACITY); 339 const int32_t deviceStreamId = 0; 340 metaData->addEntry(OHOS_CAMERA_STREAM_ID, &deviceStreamId, DATA_COUNT); 341 342 SetFps(metaData, FPS_RANGE, false); 343 344 StartPreviewVideoStream(); 345 346 UpdateSettings(metaData); 347 348 StartPreviewVideoCapture(); 349 sleep(SLEEP_SECOND_TWO); 350 351 SetFps(metaData, FPS_RANGE, true); 352 353 UpdateSettings(metaData); 354 355 StopPreviewVideoStream(); 356} 357 358/** 359 * @tc.name: double preview 360 * @tc.desc: Commit 2 streams together, preview and video streams, isStreaming is true. 361 * CallbackMode is ON_CHANGED, set device stream fps range different value. 362 * @tc.level: Level1 363 * @tc.size: MediumTest 364 * @tc.type: Function 365 */ 366static HWTEST_F(MetaDataTest, meta_data_003, TestSize.Level1) 367{ 368 std::vector<MetaType> results; 369 results.push_back(OHOS_CAMERA_STREAM_ID); 370 results.push_back(OHOS_CONTROL_FPS_RANGES); 371 Prepare(ResultCallbackMode::ON_CHANGED, results); 372 373 std::shared_ptr<CameraSetting> metaData = std::make_shared<CameraSetting>(ENTRY_CAPACITY, DATA_CAPACITY); 374 const int32_t deviceStreamId = 0; 375 metaData->addEntry(OHOS_CAMERA_STREAM_ID, &deviceStreamId, DATA_COUNT); 376 377 SetFps(metaData, FPS_RANGE, false); 378 379 StartPreviewVideoStream(); 380 381 UpdateSettings(metaData); 382 383 StartPreviewVideoCapture(); 384 sleep(SLEEP_SECOND_TWO); 385 386 SetFps(metaData, FPS_RANGE_CHANGE, true); 387 388 UpdateSettings(metaData); 389 390 StopPreviewVideoStream(); 391} 392 393/** 394 * @tc.name: double preview 395 * @tc.desc: Commit 2 streams together, preview and video streams, isStreaming is true. 396 * CallbackMode is PER_FRAME,set video stream stability mode value. 397 * @tc.level: Level1 398 * @tc.size: MediumTest 399 * @tc.type: Function 400 */ 401static HWTEST_F(MetaDataTest, meta_data_004, TestSize.Level1) 402{ 403 std::vector<MetaType> results; 404 results.push_back(OHOS_CAMERA_STREAM_ID); 405 Prepare(ResultCallbackMode::PER_FRAME, results); 406 407 std::shared_ptr<CameraSetting> metaData = std::make_shared<CameraSetting>(ENTRY_CAPACITY, DATA_CAPACITY); 408 const int32_t streamId = cameraBase_->STREAM_ID_VIDEO; 409 metaData->addEntry(OHOS_CAMERA_STREAM_ID, &streamId, DATA_COUNT); 410 411 uint8_t videoStabilizationMode = OHOS_CAMERA_VIDEO_STABILIZATION_LOW; 412 metaData->addEntry(OHOS_CONTROL_VIDEO_STABILIZATION_MODE, &videoStabilizationMode, sizeof(videoStabilizationMode)); 413 414 StartPreviewVideoStream(); 415 416 UpdateSettings(metaData); 417 418 StartPreviewVideoCapture(); 419 420 StopPreviewVideoStream(); 421} 422 423/** 424 * @tc.name: double preview 425 * @tc.desc: Commit 2 streams together, preview and video streams, isStreaming is true. 426 * CallbackMode is ON_CHANGED, set video stream stability mode different value. 427 * @tc.level: Level1 428 * @tc.size: MediumTest 429 * @tc.type: Function 430 */ 431static HWTEST_F(MetaDataTest, meta_data_005, TestSize.Level1) 432{ 433 std::vector<MetaType> results; 434 results.push_back(OHOS_CAMERA_STREAM_ID); 435 Prepare(ResultCallbackMode::ON_CHANGED, results); 436 437 std::shared_ptr<CameraSetting> metaData = std::make_shared<CameraSetting>(ENTRY_CAPACITY, DATA_CAPACITY); 438 const int32_t streamId = cameraBase_->STREAM_ID_VIDEO; 439 metaData->addEntry(OHOS_CAMERA_STREAM_ID, &streamId, DATA_COUNT); 440 441 uint8_t videoStabilizationMode = OHOS_CAMERA_VIDEO_STABILIZATION_LOW; 442 metaData->addEntry(OHOS_CONTROL_VIDEO_STABILIZATION_MODE, &videoStabilizationMode, sizeof(videoStabilizationMode)); 443 444 StartPreviewVideoStream(); 445 446 UpdateSettings(metaData); 447 448 StartPreviewVideoCapture(); 449 sleep(SLEEP_SECOND_TWO); 450 451 uint8_t videoStabilizationModeChange = OHOS_CAMERA_VIDEO_STABILIZATION_MIDDLE; 452 metaData->updateEntry( 453 OHOS_CONTROL_VIDEO_STABILIZATION_MODE, &videoStabilizationModeChange, sizeof(videoStabilizationModeChange)); 454 UpdateSettings(metaData); 455 456 StopPreviewVideoStream(); 457} 458 459/** 460 * @tc.name: double preview 461 * @tc.desc: Commit 2 streams together, preview and video streams, isStreaming is true. 462 * CallbackMode is PER_FRAME, set device stream fps range value and exposure time value. 463 * @tc.level: Level1 464 * @tc.size: MediumTest 465 * @tc.type: Function 466 */ 467static HWTEST_F(MetaDataTest, meta_data_006, TestSize.Level1) 468{ 469 std::vector<MetaType> results; 470 results.push_back(OHOS_CAMERA_STREAM_ID); 471 results.push_back(OHOS_CONTROL_FPS_RANGES); 472 results.push_back(OHOS_SENSOR_EXPOSURE_TIME); 473 Prepare(ResultCallbackMode::PER_FRAME, results); 474 475 std::shared_ptr<CameraSetting> metaData = std::make_shared<CameraSetting>(ENTRY_CAPACITY, DATA_CAPACITY); 476 const int32_t deviceStreamId = 0; 477 metaData->addEntry(OHOS_CAMERA_STREAM_ID, &deviceStreamId, DATA_COUNT); 478 479 SetFps(metaData, FPS_RANGE, false); 480 481 StartPreviewVideoStream(); 482 483 UpdateSettings(metaData); 484 485 StartPreviewVideoCapture(); 486 sleep(SLEEP_SECOND_TWO); 487 488 int64_t exposureTime = 10; 489 metaData->addEntry(OHOS_SENSOR_EXPOSURE_TIME, &exposureTime, DATA_COUNT); 490 491 UpdateSettings(metaData); 492 493 StopPreviewVideoStream(); 494} 495 496/** 497 * @tc.name: double preview 498 * @tc.desc: Commit 2 streams together, preview and video streams, isStreaming is true. 499 * CallbackMode is PER_FRAME, set device stream fps range different value and exposure time value. 500 * @tc.level: Level1 501 * @tc.size: MediumTest 502 * @tc.type: Function 503 */ 504static HWTEST_F(MetaDataTest, meta_data_007, TestSize.Level1) 505{ 506 std::vector<MetaType> results; 507 results.push_back(OHOS_CAMERA_STREAM_ID); 508 results.push_back(OHOS_CONTROL_FPS_RANGES); 509 results.push_back(OHOS_SENSOR_EXPOSURE_TIME); 510 Prepare(ResultCallbackMode::PER_FRAME, results); 511 512 std::shared_ptr<CameraSetting> metaData = std::make_shared<CameraSetting>(ENTRY_CAPACITY, DATA_CAPACITY); 513 const int32_t deviceStreamId = 0; 514 metaData->addEntry(OHOS_CAMERA_STREAM_ID, &deviceStreamId, DATA_COUNT); 515 516 SetFps(metaData, FPS_RANGE, false); 517 518 StartPreviewVideoStream(); 519 520 UpdateSettings(metaData); 521 522 StartPreviewVideoCapture(); 523 sleep(SLEEP_SECOND_TWO); 524 525 SetFps(metaData, FPS_RANGE_CHANGE, true); 526 527 UpdateSettings(metaData); 528 sleep(SLEEP_SECOND_TWO); 529 530 int64_t exposureTime = 10; 531 metaData->addEntry(OHOS_SENSOR_EXPOSURE_TIME, &exposureTime, DATA_COUNT); 532 533 UpdateSettings(metaData); 534 535 StopPreviewVideoStream(); 536} 537 538/** 539 * @tc.name: double preview 540 * @tc.desc: Commit 2 streams together, preview and still picture streams, isStreaming is true. 541 * CallbackMode is ON_CHANGED, set still picture stream exposure mode different value. 542 * @tc.level: Level1 543 * @tc.size: MediumTest 544 * @tc.type: Function 545 */ 546static HWTEST_F(MetaDataTest, meta_data_008, TestSize.Level1) 547{ 548 std::vector<MetaType> results; 549 results.push_back(OHOS_CAMERA_STREAM_ID); 550 Prepare(ResultCallbackMode::ON_CHANGED, results); 551 552 std::shared_ptr<CameraSetting> metaData = std::make_shared<CameraSetting>(ENTRY_CAPACITY, DATA_CAPACITY); 553 const int32_t deviceStreamId = cameraBase_->STREAM_ID_CAPTURE; 554 metaData->addEntry(OHOS_CAMERA_STREAM_ID, &deviceStreamId, DATA_COUNT); 555 556 uint8_t aeMode = OHOS_CAMERA_EXPOSURE_MODE_CONTINUOUS_AUTO; 557 metaData->addEntry(OHOS_CONTROL_EXPOSURE_MODE, &aeMode, sizeof(aeMode)); 558 559 StartPreviewCaptureStream(); 560 561 UpdateSettings(metaData); 562 563 StartCustomCapture(); 564 sleep(SLEEP_SECOND_TWO); 565 566 uint8_t aeModeChangeValue = OHOS_CAMERA_EXPOSURE_MODE_LOCKED; 567 metaData->updateEntry(OHOS_CONTROL_EXPOSURE_MODE, &aeModeChangeValue, sizeof(aeModeChangeValue)); 568 569 UpdateSettings(metaData); 570 571 StopPreviewCaptureStream(); 572} 573 574/** 575 * @tc.name: double preview 576 * @tc.desc: Commit 2 streams together, preview and still picture streams, isStreaming is true. 577 * CallbackMode is ON_CHANGED, set still picture stream exposure mode/time different value and device stream fps range 578 * different value. 579 * @tc.level: Level1 580 * @tc.size: MediumTest 581 * @tc.type: Function 582 */ 583static HWTEST_F(MetaDataTest, meta_data_009, TestSize.Level1) 584{ 585 std::vector<MetaType> results; 586 results.push_back(OHOS_CAMERA_STREAM_ID); 587 results.push_back(OHOS_CONTROL_FPS_RANGES); 588 Prepare(ResultCallbackMode::ON_CHANGED, results); 589 590 std::shared_ptr<CameraSetting> metaDataDevice = std::make_shared<CameraSetting>(ENTRY_CAPACITY, DATA_CAPACITY); 591 const int32_t deviceStreamId = 0; 592 metaDataDevice->addEntry(OHOS_CAMERA_STREAM_ID, &deviceStreamId, DATA_COUNT); 593 594 SetFps(metaDataDevice, FPS_RANGE, false); 595 596 std::shared_ptr<CameraSetting> metaDataStream = std::make_shared<CameraSetting>(ENTRY_CAPACITY, DATA_CAPACITY); 597 const int32_t streamId = cameraBase_->STREAM_ID_CAPTURE; 598 metaDataStream->addEntry(OHOS_CAMERA_STREAM_ID, &streamId, DATA_COUNT); 599 600 uint8_t aeMode = OHOS_CAMERA_EXPOSURE_MODE_CONTINUOUS_AUTO; 601 metaDataStream->addEntry(OHOS_CONTROL_EXPOSURE_MODE, &aeMode, sizeof(aeMode)); 602 603 int64_t exposureTime = 10; 604 metaDataStream->addEntry(OHOS_SENSOR_EXPOSURE_TIME, &exposureTime, DATA_COUNT); 605 606 StartPreviewCaptureStream(); 607 608 UpdateSettings(metaDataDevice); 609 sleep(SLEEP_SECOND_TWO); 610 UpdateSettings(metaDataStream); 611 StartCustomCapture(); 612 sleep(SLEEP_SECOND_TWO); 613 614 uint8_t aeModeChangeValue = OHOS_CAMERA_EXPOSURE_MODE_LOCKED; 615 metaDataStream->updateEntry(OHOS_CONTROL_EXPOSURE_MODE, &aeModeChangeValue, sizeof(aeModeChangeValue)); 616 617 UpdateSettings(metaDataStream); 618 sleep(SLEEP_SECOND_TWO); 619 SetFps(metaDataDevice, FPS_RANGE_CHANGE, true); 620 UpdateSettings(metaDataDevice); 621 622 StopPreviewCaptureStream(); 623} 624