• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except 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 "accesstoken_kit.h"
17 #include "camera_error_code.h"
18 #include "camera_log.h"
19 #include "camera_util.h"
20 #include "camera_base_function_moduletest.h"
21 #include "gtest/gtest.h"
22 #include "hap_token_info.h"
23 #include "nativetoken_kit.h"
24 #include "surface.h"
25 #include "system_ability_definition.h"
26 #include "test_common.h"
27 #include "token_setproc.h"
28 
29 using namespace testing::ext;
30 
31 namespace OHOS {
32 namespace CameraStandard {
OnCameraMute(bool muteMode) const33 void TestCameraMuteListener::OnCameraMute(bool muteMode) const
34 {
35     MEDIA_INFO_LOG("TestCameraMuteListener::OnCameraMute called %{public}d", muteMode);
36 }
OnTorchStatusChange(const TorchStatusInfo & torchStatusInfo) const37 void TestTorchListener::OnTorchStatusChange(const TorchStatusInfo &torchStatusInfo) const
38 {
39     MEDIA_INFO_LOG("TestTorchListener::OnTorchStatusChange called %{public}d %{public}d %{public}f",
40         torchStatusInfo.isTorchAvailable, torchStatusInfo.isTorchActive, torchStatusInfo.torchLevel);
41 }
OnFoldStatusChanged(const FoldStatusInfo & foldStatusInfo) const42 void TestFoldListener::OnFoldStatusChanged(const FoldStatusInfo &foldStatusInfo) const
43 {
44     MEDIA_INFO_LOG("TestFoldListener::OnFoldStatusChanged called %{public}d", foldStatusInfo.foldStatus);
45 }
OnError(int32_t errorCode)46 void TestSessionCallback::OnError(int32_t errorCode)
47 {
48     MEDIA_INFO_LOG("TestSessionCallback::OnError called %{public}d", errorCode);
49 }
OnExposureState(ExposureState state)50 void TestExposureCallback::OnExposureState(ExposureState state)
51 {
52     MEDIA_INFO_LOG("TestExposureCallback::OnExposureState called %{public}d", state);
53 }
OnFocusState(FocusState state)54 void TestFocusCallback::OnFocusState(FocusState state)
55 {
56     MEDIA_INFO_LOG("TestFocusCallback::OnFocusState callecd %{public}d", state);
57 }
OnMacroStatusChanged(MacroStatus status)58 void TestMacroStatusCallback::OnMacroStatusChanged(MacroStatus status)
59 {
60     MEDIA_INFO_LOG("TestMacroStatusCallback::OnMacroStatusChanged called %{public}d", status);
61 }
OnMoonCaptureBoostStatusChanged(MoonCaptureBoostStatus status)62 void TestMoonCaptureBoostStatusCallback::OnMoonCaptureBoostStatusChanged(MoonCaptureBoostStatus status)
63 {
64     MEDIA_INFO_LOG("TestMoonCaptureBoostStatusCallback::OnMoonCaptureBoostStatusChanged called %{public}d", status);
65 }
OnFeatureDetectionStatusChanged(SceneFeature feature,FeatureDetectionStatus status)66 void TestFeatureDetectionStatusCallback::OnFeatureDetectionStatusChanged(SceneFeature feature,
67     FeatureDetectionStatus status)
68 {
69     MEDIA_INFO_LOG("TestFeatureDetectionStatusCallback::OnFeatureDetectionStatusChanged called %{public}d %{public}d",
70         feature, status);
71 }
IsFeatureSubscribed(SceneFeature feature)72 bool TestFeatureDetectionStatusCallback::IsFeatureSubscribed(SceneFeature feature)
73 {
74     return true;
75 }
OnSmoothZoom(int32_t duration)76 void TestSmoothZoomCallback::OnSmoothZoom(int32_t duration)
77 {
78     MEDIA_INFO_LOG("TestSmoothZoomCallback::OnSmoothZoom called %{public}d", duration);
79 }
OnResult(const ARStatusInfo & arStatusInfo) const80 void TestARCallback::OnResult(const ARStatusInfo &arStatusInfo) const
81 {
82     MEDIA_INFO_LOG("TestARCallback::OnResult called ");
83 }
OnEffectSuggestionChange(EffectSuggestionType effectSuggestionType)84 void TestEffectSuggestionCallback::OnEffectSuggestionChange(EffectSuggestionType effectSuggestionType)
85 {
86     MEDIA_INFO_LOG("TestEffectSuggestionCallback::OnEffectSuggestionChange called %{public}d", effectSuggestionType);
87 }
OnLcdFlashStatusChanged(LcdFlashStatusInfo lcdFlashStatusInfo)88 void TestLcdFlashStatusCallback::OnLcdFlashStatusChanged(LcdFlashStatusInfo lcdFlashStatusInfo)
89 {
90     MEDIA_INFO_LOG("TestLcdFlashStatusCallback::OnLcdFlashStatusChanged called");
91 }
OnAutoDeviceSwitchStatusChange(bool isDeviceSwitched,bool isDeviceCapabilityChanged) const92 void TestAutoDeviceSwitchCallback::OnAutoDeviceSwitchStatusChange(bool isDeviceSwitched,
93     bool isDeviceCapabilityChanged) const
94 {
95     MEDIA_INFO_LOG("TestAutoDeviceSwitchCallback::OnAutoDeviceSwitchStatusChange called %{public}d %{public}d",
96         isDeviceSwitched, isDeviceCapabilityChanged);
97 }
OnError(int32_t errorCode) const98 void TestMetadataStateCallback::OnError(int32_t errorCode) const
99 {
100     MEDIA_INFO_LOG("TestMetadataStateCallback::OnError called %{public}d", errorCode);
101 }
102 
WAIT(uint32_t duration)103 void WAIT(uint32_t duration)
104 {
105     std::this_thread::sleep_for(std::chrono::milliseconds(duration));
106 }
107 
SetUpTestCase(void)108 void CameraBaseFunctionModuleTest::SetUpTestCase(void)
109 {
110     MEDIA_INFO_LOG("SetUpTestCase start.");
111     MEDIA_INFO_LOG("SetUpTestCase end.");
112 }
113 
TearDownTestCase(void)114 void CameraBaseFunctionModuleTest::TearDownTestCase(void)
115 {
116     MEDIA_INFO_LOG("TearDownTestCase start.");
117     MEDIA_INFO_LOG("TearDownTestCase end.");
118 }
119 
SetUp()120 void CameraBaseFunctionModuleTest::SetUp()
121 {
122     MEDIA_INFO_LOG("SetUp start.");
123     SetNativeToken();
124 
125     cameraManager_ = CameraManager::GetInstance();
126     ASSERT_NE(cameraManager_, nullptr);
127     cameraDevices_ = cameraManager_->GetSupportedCameras();
128     ASSERT_TRUE(!cameraDevices_.empty());
129     cameraInput_ = cameraManager_->CreateCameraInput(cameraDevices_[deviceBackIndex]);
130     ASSERT_NE(cameraInput_, nullptr);
131     captureSession_ = cameraManager_->CreateCaptureSession();
132     ASSERT_NE(captureSession_, nullptr);
133 
134     EXPECT_EQ(cameraInput_->Open(), SUCCESS);
135     UpdateCameraOutputCapability(deviceBackIndex);
136 
137     MEDIA_INFO_LOG("SetUp end.");
138 }
139 
TearDown()140 void CameraBaseFunctionModuleTest::TearDown()
141 {
142     MEDIA_INFO_LOG("TearDown start.");
143 
144     cameraDevices_.clear();
145     photoProfiles_.clear();
146     previewProfiles_.clear();
147     videoProfiles_.clear();
148     depthProfiles_.clear();
149     metadataObjectTypes_.clear();
150 
151     if (cameraInput_) {
152         EXPECT_EQ(cameraInput_->Release(), SUCCESS);
153         cameraInput_ = nullptr;
154     }
155     if (captureSession_) {
156         EXPECT_EQ(captureSession_->Release(), SUCCESS);
157         captureSession_ = nullptr;
158     }
159 
160     MEDIA_INFO_LOG("TearDown end.");
161 }
162 
SetNativeToken()163 void CameraBaseFunctionModuleTest::SetNativeToken()
164 {
165     uint64_t tokenId;
166     const char* perms[0];
167     perms[0] = "ohos.permission.CAMERA";
168     NativeTokenInfoParams infoInstance = {
169         .dcapsNum = 0,
170         .permsNum = 1,
171         .aclsNum = 0,
172         .dcaps = NULL,
173         .perms = perms,
174         .acls = NULL,
175         .processName = "native_camera_mst",
176         .aplStr = "system_basic",
177     };
178     tokenId = GetAccessTokenId(&infoInstance);
179     SetSelfTokenID(tokenId);
180     OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo();
181 }
182 
UpdateCameraOutputCapability(int32_t index,int32_t modeName)183 void CameraBaseFunctionModuleTest::UpdateCameraOutputCapability(int32_t index, int32_t modeName)
184 {
185     ASSERT_NE(cameraManager_, nullptr);
186     ASSERT_TRUE(!cameraDevices_.empty());
187 
188     sptr<CameraOutputCapability> outputCapability_ = cameraManager_->GetSupportedOutputCapability(
189         cameraDevices_[index], modeName);
190     ASSERT_NE(outputCapability_, nullptr);
191 
192     previewProfiles_ = outputCapability_->GetPreviewProfiles();
193     ASSERT_TRUE(!previewProfiles_.empty());
194     FilterPreviewProfiles(previewProfiles_);
195     photoProfiles_ = outputCapability_->GetPhotoProfiles();
196     ASSERT_TRUE(!photoProfiles_.empty());
197     videoProfiles_ = outputCapability_->GetVideoProfiles();
198     ASSERT_TRUE(!videoProfiles_.empty());
199     depthProfiles_ = outputCapability_->GetDepthProfiles();
200     metadataObjectTypes_ = outputCapability_->GetSupportedMetadataObjectType();
201 
202     for (auto previewProfile : previewProfiles_) {
203         MEDIA_DEBUG_LOG("module test preview profile format:%{public}d, w:%{public}d , h:%{public}d",
204             previewProfile.GetCameraFormat(), previewProfile.GetSize().width, previewProfile.GetSize().height);
205     }
206     for (auto photoProfile : photoProfiles_) {
207         MEDIA_DEBUG_LOG("module test photo profile format:%{public}d, w:%{public}d , h:%{public}d",
208             photoProfile.GetCameraFormat(), photoProfile.GetSize().width, photoProfile.GetSize().height);
209     }
210     for (auto videoProfile : videoProfiles_) {
211         MEDIA_DEBUG_LOG("module test video profile format:%{public}d, w:%{public}d , h:%{public}d",
212             videoProfile.GetCameraFormat(), videoProfile.GetSize().width, videoProfile.GetSize().height);
213     }
214 }
215 
FilterPreviewProfiles(std::vector<Profile> & previewProfiles)216 void CameraBaseFunctionModuleTest::FilterPreviewProfiles(std::vector<Profile>& previewProfiles)
217 {
218     std::vector<Profile>::iterator itr = previewProfiles.begin();
219     while (itr != previewProfiles.end()) {
220         Profile profile = *itr;
221         if ((profile.size_.width == PRVIEW_WIDTH_176 && profile.size_.height == PRVIEW_HEIGHT_144) ||
222             (profile.size_.width == PRVIEW_WIDTH_480 && profile.size_.height == PRVIEW_HEIGHT_480) ||
223             (profile.size_.width == PRVIEW_WIDTH_640 && profile.size_.height == PRVIEW_HEIGHT_640) ||
224             (profile.size_.width == PRVIEW_WIDTH_4096 && profile.size_.height == PRVIEW_HEIGHT_3072) ||
225             (profile.size_.width == PRVIEW_WIDTH_4160 && profile.size_.height == PRVIEW_HEIGHT_3120) ||
226             (profile.size_.width == PRVIEW_WIDTH_8192 && profile.size_.height == PRVIEW_HEIGHT_6144)) {
227             MEDIA_DEBUG_LOG("SetUp skip previewProfile width:%{public}d height:%{public}d",
228                 profile.size_.width, profile.size_.height);
229             itr = previewProfiles.erase(itr);
230         } else {
231             ++itr;
232         }
233     }
234 }
235 
CreatePreviewOutput(Profile & previewProfile)236 sptr<PreviewOutput> CameraBaseFunctionModuleTest::CreatePreviewOutput(Profile &previewProfile)
237 {
238     MEDIA_INFO_LOG("CreatePreviewOutput preview profile format:%{public}d, w:%{public}d , h:%{public}d",
239         previewProfile.GetCameraFormat(), previewProfile.GetSize().width, previewProfile.GetSize().height);
240 
241     sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
242     sptr<SurfaceListener> listener = new SurfaceListener("Preview", SurfaceType::PREVIEW, previewFd_, previewSurface);
243     previewSurface->RegisterConsumerListener((sptr<IBufferConsumerListener>&)listener);
244     previewSurface->SetUserData(CameraManager::surfaceFormat, std::to_string(previewProfile.GetCameraFormat()));
245     previewSurface->SetDefaultWidthAndHeight(previewProfile.GetSize().width, previewProfile.GetSize().height);
246 
247     sptr<IBufferProducer> bp = previewSurface->GetProducer();
248     sptr<Surface> pSurface = Surface::CreateSurfaceAsProducer(bp);
249 
250     return cameraManager_->CreatePreviewOutput(previewProfile, pSurface);
251 }
252 
CreatePhotoOutput(Profile & photoProfile)253 sptr<PhotoOutput> CameraBaseFunctionModuleTest::CreatePhotoOutput(Profile &photoProfile)
254 {
255     MEDIA_INFO_LOG("CreatePhotoOutput photo profile format:%{public}d, w:%{public}d , h:%{public}d",
256         photoProfile.GetCameraFormat(), photoProfile.GetSize().width, photoProfile.GetSize().height);
257 
258     sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
259     sptr<IBufferProducer> bp = photoSurface->GetProducer();
260 
261     return cameraManager_->CreatePhotoOutput(photoProfile, bp);
262 }
263 
CreateVideoOutput(VideoProfile & videoProfile)264 sptr<VideoOutput> CameraBaseFunctionModuleTest::CreateVideoOutput(VideoProfile &videoProfile)
265 {
266     MEDIA_INFO_LOG("CreateVideoOutput video profile format:%{public}d, w:%{public}d , h:%{public}d",
267         videoProfile.GetCameraFormat(), videoProfile.GetSize().width, videoProfile.GetSize().height);
268 
269     sptr<IConsumerSurface> videoSurface = IConsumerSurface::Create();
270     sptr<SurfaceListener> listener = new SurfaceListener("Video", SurfaceType::VIDEO, videoFd_, videoSurface);
271     videoSurface->RegisterConsumerListener((sptr<IBufferConsumerListener>&)listener);
272     videoSurface->SetUserData(CameraManager::surfaceFormat, std::to_string(videoProfile.GetCameraFormat()));
273     videoSurface->SetDefaultWidthAndHeight(videoProfile.GetSize().width, videoProfile.GetSize().height);
274 
275     sptr<IBufferProducer> bp = videoSurface->GetProducer();
276     sptr<Surface> pSurface = Surface::CreateSurfaceAsProducer(bp);
277 
278     return cameraManager_->CreateVideoOutput(videoProfile, pSurface);
279 }
280 
CreateAndConfigureDefaultCaptureOutput(sptr<PhotoOutput> & photoOutput,sptr<VideoOutput> & videoOutput)281 void CameraBaseFunctionModuleTest::CreateAndConfigureDefaultCaptureOutput(sptr<PhotoOutput> &photoOutput,
282     sptr<VideoOutput> &videoOutput)
283 {
284     ASSERT_NE(captureSession_, nullptr);
285 
286     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
287     ASSERT_NE(previewOutput, nullptr);
288     photoOutput = CreatePhotoOutput(photoProfiles_[0]);
289     ASSERT_NE(photoOutput, nullptr);
290     videoOutput = CreateVideoOutput(videoProfiles_[0]);
291     ASSERT_NE(videoOutput, nullptr);
292 
293     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
294     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
295     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
296     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)photoOutput), SUCCESS);
297     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)videoOutput), SUCCESS);
298     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
299 }
300 
StartDefaultCaptureOutput(sptr<PhotoOutput> photoOutput,sptr<VideoOutput> videoOutput)301 void CameraBaseFunctionModuleTest::StartDefaultCaptureOutput(sptr<PhotoOutput> photoOutput,
302     sptr<VideoOutput> videoOutput)
303 {
304     ASSERT_NE(captureSession_, nullptr);
305     ASSERT_NE(photoOutput, nullptr);
306     ASSERT_NE(videoOutput, nullptr);
307 
308     EXPECT_EQ(captureSession_->Start(), SUCCESS);
309     WAIT(DURATION_AFTER_SESSION_START);
310     EXPECT_EQ(photoOutput->Capture(), SUCCESS);
311     WAIT(DURATION_AFTER_CAPTURE);
312     EXPECT_EQ(videoOutput->Start(), SUCCESS);
313     WAIT(DURATION_DURING_RECORDING);
314     EXPECT_EQ(videoOutput->Stop(), SUCCESS);
315     WAIT(DURATION_AFTER_RECORDING);
316     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
317 }
318 
319 /*
320  * Feature: Camera base function
321  * Function: Test the camera's ability to take multiple photos.
322  * SubFunction: NA
323  * FunctionPoints: NA
324  * EnvConditions: NA
325  * CaseDescription: Test the captureSession by adding previewOutput and photoOutput.
326  * PreviewOutput and photoOutput can be added normally, and the function of taking multiple photos is normal.
327  */
328 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_001, TestSize.Level0)
329 {
330     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
331     ASSERT_NE(previewOutput, nullptr);
332     sptr<PhotoOutput> photoOutput = CreatePhotoOutput(photoProfiles_[0]);
333     ASSERT_NE(photoOutput, nullptr);
334 
335     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
336     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
337     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
338     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)photoOutput), SUCCESS);
339     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
340 
341     EXPECT_EQ(captureSession_->Start(), SUCCESS);
342     WAIT(DURATION_AFTER_SESSION_START);
343 
344     EXPECT_EQ(photoOutput->Capture(), SUCCESS);
345     WAIT(DURATION_AFTER_CAPTURE);
346     EXPECT_EQ(photoOutput->CancelCapture(), SUCCESS);
347 
348     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
349 }
350 
351 /*
352  * Feature: Camera base function
353  * Function: Test the camera's ability to record multiple times.
354  * SubFunction: NA
355  * FunctionPoints: NA
356  * EnvConditions: NA
357  * CaseDescription: Test the captureSession by adding previewOutput and videoOutput.
358  * PreviewOutput and videoOutput can be added normally, and the multiple recording function is normal.
359  */
360 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_002, TestSize.Level0)
361 {
362     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
363     ASSERT_NE(previewOutput, nullptr);
364     sptr<VideoOutput> videoOutput = CreateVideoOutput(videoProfiles_[0]);
365     ASSERT_NE(videoOutput, nullptr);
366 
367     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
368     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
369     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
370     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)videoOutput), SUCCESS);
371     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
372 
373     EXPECT_EQ(captureSession_->Start(), SUCCESS);
374     WAIT(DURATION_AFTER_SESSION_START);
375 
376     EXPECT_EQ(videoOutput->Start(), SUCCESS);
377     WAIT(DURATION_DURING_RECORDING);
378     EXPECT_EQ(videoOutput->Stop(), SUCCESS);
379     WAIT(DURATION_AFTER_RECORDING);
380 
381     EXPECT_EQ(videoOutput->Start(), SUCCESS);
382     WAIT(DURATION_DURING_RECORDING);
383     EXPECT_EQ(videoOutput->Pause(), SUCCESS);
384     EXPECT_EQ(videoOutput->Resume(), SUCCESS);
385     WAIT(DURATION_DURING_RECORDING);
386     EXPECT_EQ(videoOutput->Stop(), SUCCESS);
387     WAIT(DURATION_AFTER_RECORDING);
388 
389     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
390 }
391 
392 /*
393  * Feature: Camera base function
394  * Function: Test the camera's ability to switch cameras when taking photos.
395  * SubFunction: NA
396  * FunctionPoints: NA
397  * EnvConditions: NA
398  * CaseDescription: Test captureSession by adding two different cameraInputs,
399  * both cameraInputs can be added normally, and taking photos is normal before and after switching cameras.
400  */
401 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_003, TestSize.Level0)
402 {
403     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
404     ASSERT_NE(previewOutput, nullptr);
405     sptr<PhotoOutput> photoOutput = CreatePhotoOutput(photoProfiles_[0]);
406     ASSERT_NE(photoOutput, nullptr);
407 
408     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
409     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
410     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
411     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)photoOutput), SUCCESS);
412     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
413 
414     EXPECT_EQ(captureSession_->Start(), SUCCESS);
415     WAIT(DURATION_AFTER_SESSION_START);
416     EXPECT_EQ(photoOutput->Capture(), SUCCESS);
417     WAIT(DURATION_AFTER_CAPTURE);
418     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
419 
420     if (cameraDevices_.size() <= 1) {
421         MEDIA_ERR_LOG("The current device only has a camera and cannot switch cameras");
422         return;
423     }
424     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
425     EXPECT_EQ(captureSession_->RemoveInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
426     EXPECT_EQ(captureSession_->RemoveOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
427     EXPECT_EQ(captureSession_->RemoveOutput((sptr<CaptureOutput>&)photoOutput), SUCCESS);
428     EXPECT_EQ(cameraInput_->Release(), SUCCESS);
429     cameraInput_ = nullptr;
430     WAIT(DURATION_AFTER_DEVICE_CLOSE);
431 
432     sptr<CameraInput> otherCameraInput = cameraManager_->CreateCameraInput(cameraDevices_[deviceFrontIndex]);
433     ASSERT_NE(otherCameraInput, nullptr);
434     EXPECT_EQ(otherCameraInput->Open(), SUCCESS);
435     UpdateCameraOutputCapability(deviceFrontIndex);
436 
437     sptr<PreviewOutput> otherPreviewOutput = CreatePreviewOutput(previewProfiles_[0]);
438     ASSERT_NE(otherPreviewOutput, nullptr);
439     sptr<PhotoOutput> otherPhotoOutput = CreatePhotoOutput(photoProfiles_[0]);
440     ASSERT_NE(otherPhotoOutput, nullptr);
441     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)otherCameraInput), SUCCESS);
442     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)otherPreviewOutput), SUCCESS);
443     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)otherPhotoOutput), SUCCESS);
444     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
445 
446     EXPECT_EQ(captureSession_->Start(), SUCCESS);
447     WAIT(DURATION_AFTER_SESSION_START);
448     EXPECT_EQ(otherPhotoOutput->Capture(), SUCCESS);
449     WAIT(DURATION_AFTER_CAPTURE);
450     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
451 
452     EXPECT_EQ(otherCameraInput->Release(), SUCCESS);
453     WAIT(DURATION_AFTER_DEVICE_CLOSE);
454 }
455 
456 /*
457  * Feature: Camera base function
458  * Function: Test the camera's ability to switch cameras when video recording.
459  * SubFunction: NA
460  * FunctionPoints: NA
461  * EnvConditions: NA
462  * CaseDescription: Test captureSession by adding two different cameraInputs,
463  * both cameraInputs can be added normally, and video recording is normal before and after switching cameras.
464  */
465  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_004, TestSize.Level0)
466 {
467     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
468     ASSERT_NE(previewOutput, nullptr);
469     sptr<VideoOutput> videoOutput = CreateVideoOutput(videoProfiles_[0]);
470     ASSERT_NE(videoOutput, nullptr);
471 
472     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
473     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
474     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
475     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)videoOutput), SUCCESS);
476     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
477 
478     EXPECT_EQ(captureSession_->Start(), SUCCESS);
479     WAIT(DURATION_AFTER_SESSION_START);
480     EXPECT_EQ(videoOutput->Start(), SUCCESS);
481     WAIT(DURATION_DURING_RECORDING);
482     EXPECT_EQ(videoOutput->Stop(), SUCCESS);
483     WAIT(DURATION_AFTER_RECORDING);
484     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
485 
486     if (cameraDevices_.size() <= 1) {
487         MEDIA_ERR_LOG("The current device only has a camera and cannot switch cameras");
488         return;
489     }
490     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
491     EXPECT_EQ(captureSession_->RemoveInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
492     EXPECT_EQ(captureSession_->RemoveOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
493     EXPECT_EQ(captureSession_->RemoveOutput((sptr<CaptureOutput>&)videoOutput), SUCCESS);
494     EXPECT_EQ(cameraInput_->Release(), SUCCESS);
495     cameraInput_ = nullptr;
496     WAIT(DURATION_AFTER_DEVICE_CLOSE);
497 
498     sptr<CameraInput> otherCameraInput = cameraManager_->CreateCameraInput(cameraDevices_[deviceFrontIndex]);
499     ASSERT_NE(otherCameraInput, nullptr);
500     EXPECT_EQ(otherCameraInput->Open(), SUCCESS);
501     UpdateCameraOutputCapability(deviceFrontIndex);
502 
503     sptr<PreviewOutput> otherPreviewOutput = CreatePreviewOutput(previewProfiles_[0]);
504     ASSERT_NE(otherPreviewOutput, nullptr);
505     sptr<VideoOutput> otherVideoOutput = CreateVideoOutput(videoProfiles_[0]);
506     ASSERT_NE(otherVideoOutput, nullptr);
507     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)otherCameraInput), SUCCESS);
508     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)otherPreviewOutput), SUCCESS);
509     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)otherVideoOutput), SUCCESS);
510     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
511 
512     EXPECT_EQ(captureSession_->Start(), SUCCESS);
513     WAIT(DURATION_AFTER_SESSION_START);
514     EXPECT_EQ(otherVideoOutput->Start(), SUCCESS);
515     WAIT(DURATION_DURING_RECORDING);
516     EXPECT_EQ(otherVideoOutput->Stop(), SUCCESS);
517     WAIT(DURATION_AFTER_RECORDING);
518     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
519 
520     EXPECT_EQ(otherCameraInput->Release(), SUCCESS);
521     WAIT(DURATION_AFTER_DEVICE_CLOSE);
522 }
523 
524 /*
525  * Feature: Camera base function
526  * Function: Test the camera to switch from taking photos to recording.
527  * SubFunction: NA
528  * FunctionPoints: NA
529  * EnvConditions: NA
530  * CaseDescription: To test captureSession, first add cameraInput, preivewOutput and photoOutput for taking photos,
531  * then remove photoOutput and add videoOutput for recording. The flow distribution is normal, and both photography
532  * and recording are normal.
533  */
534  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_005, TestSize.Level0)
535 {
536     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
537     ASSERT_NE(previewOutput, nullptr);
538     sptr<PhotoOutput> photoOutput = CreatePhotoOutput(photoProfiles_[0]);
539     ASSERT_NE(photoOutput, nullptr);
540     sptr<VideoOutput> videoOutput = CreateVideoOutput(videoProfiles_[0]);
541     ASSERT_NE(videoOutput, nullptr);
542 
543     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
544     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
545     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
546     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)photoOutput), SUCCESS);
547     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
548     EXPECT_EQ(captureSession_->Start(), SUCCESS);
549     WAIT(DURATION_AFTER_SESSION_START);
550     EXPECT_EQ(photoOutput->Capture(), SUCCESS);
551     WAIT(DURATION_AFTER_CAPTURE);
552     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
553 
554     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
555     EXPECT_EQ(captureSession_->RemoveOutput((sptr<CaptureOutput>&)photoOutput), SUCCESS);
556     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)videoOutput), SUCCESS);
557     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
558     EXPECT_EQ(captureSession_->Start(), SUCCESS);
559     WAIT(DURATION_AFTER_SESSION_START);
560     EXPECT_EQ(videoOutput->Start(), SUCCESS);
561     WAIT(DURATION_DURING_RECORDING);
562     EXPECT_EQ(videoOutput->Stop(), SUCCESS);
563     WAIT(DURATION_AFTER_RECORDING);
564     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
565 }
566 
567 /*
568  * Feature: Camera base function
569  * Function: Test the camera to switch from recording to taking photos.
570  * SubFunction: NA
571  * FunctionPoints: NA
572  * EnvConditions: NA
573  * CaseDescription: To test captureSession, first add cameraInput, preivewOutput, and videoOutput for recording,
574  * then remove videoOutput and add photoOutput for taking photos. The flow distribution is normal, and both recording
575  * and taking photos are normal.
576  */
577  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_006, TestSize.Level0)
578 {
579     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
580     ASSERT_NE(previewOutput, nullptr);
581     sptr<PhotoOutput> photoOutput = CreatePhotoOutput(photoProfiles_[0]);
582     ASSERT_NE(photoOutput, nullptr);
583     sptr<VideoOutput> videoOutput = CreateVideoOutput(videoProfiles_[0]);
584     ASSERT_NE(videoOutput, nullptr);
585 
586     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
587     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
588     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
589     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)videoOutput), SUCCESS);
590     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
591     EXPECT_EQ(captureSession_->Start(), SUCCESS);
592     WAIT(DURATION_AFTER_SESSION_START);
593     EXPECT_EQ(videoOutput->Start(), SUCCESS);
594     WAIT(DURATION_DURING_RECORDING);
595     EXPECT_EQ(videoOutput->Stop(), SUCCESS);
596     WAIT(DURATION_AFTER_RECORDING);
597     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
598 
599     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
600     EXPECT_EQ(captureSession_->RemoveOutput((sptr<CaptureOutput>&)videoOutput), SUCCESS);
601     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)photoOutput), SUCCESS);
602     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
603     EXPECT_EQ(captureSession_->Start(), SUCCESS);
604     WAIT(DURATION_AFTER_SESSION_START);
605     EXPECT_EQ(photoOutput->Capture(), SUCCESS);
606     WAIT(DURATION_AFTER_CAPTURE);
607     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
608 }
609 
610 /*
611  * Feature: Camera base function
612  * Function: Test the camera's flow distribution in different session states.
613  * SubFunction: NA
614  * FunctionPoints: NA
615  * EnvConditions: NA
616  * CaseDescription: Test captureSession adding captureOutput is successful when session state is In-progress,
617  * and adding captureOutput fail when session state is Init or Committed.
618  */
619  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_007, TestSize.Level0)
620 {
621     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
622     ASSERT_NE(previewOutput, nullptr);
623 
624     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), OPERATION_NOT_ALLOWED);
625     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), OPERATION_NOT_ALLOWED);
626 
627     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
628     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
629     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
630     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
631 
632     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), OPERATION_NOT_ALLOWED);
633     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), OPERATION_NOT_ALLOWED);
634 
635     EXPECT_EQ(captureSession_->Start(), SUCCESS);
636     WAIT(DURATION_AFTER_SESSION_START);
637     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
638 }
639 
640 /*
641  * Feature: Camera base function
642  * Function: Test the camera's flow distribution without input.
643  * SubFunction: NA
644  * FunctionPoints: NA
645  * EnvConditions: NA
646  * CaseDescription: Testing captureSession only adds previewOutput without adding cameraInput,
647  * and the session fails when committing config.
648  */
649  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_008, TestSize.Level0)
650 {
651     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
652     ASSERT_NE(previewOutput, nullptr);
653 
654     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
655     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SERVICE_FATL_ERROR);
656     EXPECT_EQ(captureSession_->CommitConfig(), SERVICE_FATL_ERROR);
657 
658     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
659     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
660     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
661 
662     EXPECT_EQ(captureSession_->Start(), SUCCESS);
663     WAIT(DURATION_AFTER_SESSION_START);
664     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
665 }
666 
667 /*
668  * Feature: Camera base function
669  * Function: Test the camera's flow distribution without output.
670  * SubFunction: NA
671  * FunctionPoints: NA
672  * EnvConditions: NA
673  * CaseDescription: Testing captureSession only adds cameraInput without adding captureOutput,
674  * and the session fails when committing config.
675  */
676  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_009, TestSize.Level0)
677 {
678     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
679     ASSERT_NE(previewOutput, nullptr);
680 
681     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
682     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
683     EXPECT_EQ(captureSession_->CommitConfig(), SERVICE_FATL_ERROR);
684 
685     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
686     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
687 
688     EXPECT_EQ(captureSession_->Start(), SUCCESS);
689     WAIT(DURATION_AFTER_SESSION_START);
690     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
691 }
692 
693 /*
694  * Feature: Camera base function
695  * Function: Test the camera's flow distribution with multiple preview output streams.
696  * SubFunction: NA
697  * FunctionPoints: NA
698  * EnvConditions: NA
699  * CaseDescription: Test the captureSession and add two previewoutputs. Both previewoutputs can be added normally,
700  * and the camera preview is normal when two preview streams are enabled.
701  */
702  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_010, TestSize.Level0)
703 {
704     sptr<PreviewOutput> previewOutput1 = CreatePreviewOutput(previewProfiles_[0]);
705     ASSERT_NE(previewOutput1, nullptr);
706     sptr<PreviewOutput> previewOutput2 = CreatePreviewOutput(previewProfiles_[0]);
707     ASSERT_NE(previewOutput2, nullptr);
708 
709     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
710     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
711     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput1), SUCCESS);
712     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput2), SUCCESS);
713     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
714 
715     EXPECT_EQ(previewOutput1->Start(), SUCCESS);
716     WAIT(DURATION_AFTER_SESSION_START);
717     EXPECT_EQ(previewOutput1->Stop(), SUCCESS);
718 
719     EXPECT_EQ(previewOutput2->Start(), SUCCESS);
720     WAIT(DURATION_AFTER_SESSION_START);
721     EXPECT_EQ(previewOutput2->Stop(), SUCCESS);
722 }
723 
724 /*
725  * Feature: Camera base function
726  * Function: Test the camera's flow distribution with multiple photo output streams.
727  * SubFunction: NA
728  * FunctionPoints: NA
729  * EnvConditions: NA
730  * CaseDescription: Test the captureSession by adding previewOutput and two photoOutput streams.
731  * Service fatl error during session commit config.
732  */
733  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_011, TestSize.Level0)
734 {
735     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
736     ASSERT_NE(previewOutput, nullptr);
737     sptr<PhotoOutput> photoOutput1 = CreatePhotoOutput(photoProfiles_[0]);
738     ASSERT_NE(photoOutput1, nullptr);
739     sptr<PhotoOutput> photoOutput2 = CreatePhotoOutput(photoProfiles_[0]);
740     ASSERT_NE(photoOutput2, nullptr);
741 
742     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
743     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
744     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
745     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)photoOutput1), SUCCESS);
746     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)photoOutput2), SUCCESS);
747 
748     captureSession_->CommitConfig();
749     captureSession_->Start();
750     WAIT(DURATION_AFTER_SESSION_START);
751     photoOutput1->Capture();
752     WAIT(DURATION_AFTER_CAPTURE);
753     photoOutput2->Capture();
754     WAIT(DURATION_AFTER_CAPTURE);
755     captureSession_->Stop();
756 }
757 
758 /*
759  * Feature: Camera base function
760  * Function: Test the camera's flow distribution with multiple video output streams.
761  * SubFunction: NA
762  * FunctionPoints: NA
763  * EnvConditions: NA
764  * CaseDescription: Test the captureSession by adding previewOutput and two videoOutput streams.
765  * Service fatl error during session commit config.
766  */
767  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_012, TestSize.Level0)
768 {
769     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
770     ASSERT_NE(previewOutput, nullptr);
771     sptr<VideoOutput> videoOutput1 = CreateVideoOutput(videoProfiles_[0]);
772     ASSERT_NE(videoOutput1, nullptr);
773     sptr<VideoOutput> videoOutput2 = CreateVideoOutput(videoProfiles_[0]);
774     ASSERT_NE(videoOutput2, nullptr);
775 
776     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
777     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
778     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
779     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)videoOutput1), SUCCESS);
780     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)videoOutput2), SUCCESS);
781 
782     captureSession_->CommitConfig();
783     captureSession_->Start();
784     WAIT(DURATION_AFTER_SESSION_START);
785     videoOutput1->Start();
786     WAIT(DURATION_DURING_RECORDING);
787     videoOutput1->Stop();
788     videoOutput2->Start();
789     WAIT(DURATION_DURING_RECORDING);
790     videoOutput2->Stop();
791     captureSession_->Stop();
792 }
793 
794 /*
795  * Feature: Camera base function
796  * Function: Test the camera config metadata flow with stream start and stop is normal.
797  * SubFunction: NA
798  * FunctionPoints: NA
799  * EnvConditions: NA
800  * CaseDescription: Test the captureSession by adding metadata output streams. Metadata output stream
801  * starts and stops normally.
802  */
803  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_013, TestSize.Level0)
804 {
805     std::set<camera_face_detect_mode_t> metadataObjectTypes;
806     captureSession_->SetCaptureMetadataObjectTypes(metadataObjectTypes);
807 
808     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
809     ASSERT_NE(previewOutput, nullptr);
810     sptr<PhotoOutput> photoOutput = CreatePhotoOutput(photoProfiles_[0]);
811     ASSERT_NE(photoOutput, nullptr);
812     sptr<VideoOutput> videoOutput = CreateVideoOutput(videoProfiles_[0]);
813     ASSERT_NE(videoOutput, nullptr);
814     sptr<MetadataOutput> metadataOutput = cameraManager_->CreateMetadataOutput();
815     ASSERT_NE(metadataOutput, nullptr);
816 
817     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
818     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
819     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
820     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)photoOutput), SUCCESS);
821     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)videoOutput), SUCCESS);
822     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)metadataOutput), SUCCESS);
823     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
824 
825     EXPECT_EQ(captureSession_->Start(), SUCCESS);
826     WAIT(DURATION_AFTER_SESSION_START);
827     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
828 }
829 
830 /*
831  * Feature: Camera base function
832  * Function: Test the camera config metadata flow with query metadadta object type is normal.
833  * SubFunction: NA
834  * FunctionPoints: NA
835  * EnvConditions: NA
836  * CaseDescription: Test the captureSession by adding metadata output streams. Metadata output stream
837  * set callback and get metadata object types normally.
838  */
839  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_014, TestSize.Level0)
840 {
841     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
842     ASSERT_NE(previewOutput, nullptr);
843     sptr<PhotoOutput> photoOutput = CreatePhotoOutput(photoProfiles_[0]);
844     ASSERT_NE(photoOutput, nullptr);
845     sptr<VideoOutput> videoOutput = CreateVideoOutput(videoProfiles_[0]);
846     ASSERT_NE(videoOutput, nullptr);
847     sptr<MetadataOutput> metadataOutput = cameraManager_->CreateMetadataOutput();
848     ASSERT_NE(metadataOutput, nullptr);
849 
850     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
851     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
852     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
853     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)photoOutput), SUCCESS);
854     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)videoOutput), SUCCESS);
855     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)metadataOutput), SUCCESS);
856     auto stateCallback = std::make_shared<TestMetadataStateCallback>();
857     ASSERT_NE(stateCallback, nullptr);
858     metadataOutput->SetCallback(stateCallback);
859     EXPECT_NE(metadataOutput->GetAppStateCallback(), nullptr);
860     auto objectCallback = std::make_shared<TestMetadataOutputObjectCallback>("");
861     ASSERT_NE(objectCallback, nullptr);
862     metadataOutput->SetCallback(objectCallback);
863     EXPECT_NE(metadataOutput->GetAppObjectCallback(), nullptr);
864     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
865 
866     std::vector<MetadataObjectType> objectTypes = metadataOutput->GetSupportedMetadataObjectTypes();
867     if (!objectTypes.empty()) {
868         metadataOutput->SetCapturingMetadataObjectTypes(objectTypes);
869 
870         objectTypes.clear();
871         objectTypes.push_back(MetadataObjectType::HUMAN_BODY);
872         EXPECT_EQ(metadataOutput->AddMetadataObjectTypes(objectTypes), INVALID_ARGUMENT);
873         EXPECT_EQ(metadataOutput->RemoveMetadataObjectTypes(objectTypes), INVALID_ARGUMENT);
874     }
875     EXPECT_EQ(captureSession_->Start(), SUCCESS);
876     WAIT(DURATION_AFTER_SESSION_START);
877     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
878 }
879 
880 /* *****cameraManager***** */
881 /*
882  * Feature: Camera base function
883  * Function: Test the camera status change callback.
884  * SubFunction: NA
885  * FunctionPoints: NA
886  * EnvConditions: NA
887  * CaseDescription: Test the CameraMnager camera status callback function, register CameraMnagerCallback,
888  * and print CameraStatus information correctly when the camera is turned on or off.
889  */
890 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_015, TestSize.Level0)
891 {
892     std::shared_ptr<TestCameraMngerCallback> callback = std::make_shared<TestCameraMngerCallback>("");
893     ASSERT_NE(callback, nullptr);
894     cameraManager_->SetCallback(callback);
895     ASSERT_GT(cameraManager_->GetCameraStatusListenerManager()->GetListenerCount(), 0);
896 }
897 
898 /*
899  * Feature: Camera base function
900  * Function: Test the camera mute function.
901  * SubFunction: NA
902  * FunctionPoints: NA
903  * EnvConditions: NA
904  * CaseDescription: Test the camera manager mute function, check if the device supports mute, register
905  * the mute status callback and set the mute status when supported, the camera can be muted normally.
906  */
907  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_016, TestSize.Level0)
908 {
909     cameraManager_->ClearCameraDeviceListCache();
910     if (cameraManager_->IsCameraMuteSupported()) {
911         MEDIA_INFO_LOG("The camera mute function is supported");
912 
913         std::shared_ptr<TestCameraMuteListener> listener = std::make_shared<TestCameraMuteListener>();
914         ASSERT_NE(listener, nullptr);
915         cameraManager_->RegisterCameraMuteListener(listener);
916         ASSERT_GT(cameraManager_->GetCameraMuteListenerManager()->GetListenerCount(), 0);
917 
918         cameraManager_->MuteCamera(!(cameraManager_->IsCameraMuted()));
919     } else {
920         MEDIA_ERR_LOG("The camera mute function is not supported");
921     }
922 }
923 
924 /*
925  * Feature: Camera base function
926  * Function: Test the camera prelaunch function.
927  * SubFunction: NA
928  * FunctionPoints: NA
929  * EnvConditions: NA
930  * CaseDescription: Test the camera manager prelaunch function, check if the device supports prelaunch,
931  * prelaunch the camera by cameraId and set configuration items when supported, the camera can prelaunch normally.
932  */
933  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_017, TestSize.Level0)
934 {
935     if (cameraManager_->IsPrelaunchSupported(cameraInput_->GetCameraDeviceInfo())) {
936         MEDIA_INFO_LOG("The camera prelaunch function is supported");
937 
938         std::string cameraId = cameraInput_->GetCameraId();
939         ASSERT_NE(cameraId, "");
940         int activeTime = 0;
941         EffectParam effectParam = {0, 0, 0};
942         EXPECT_EQ(cameraManager_->SetPrelaunchConfig(cameraId, RestoreParamTypeOhos::PERSISTENT_DEFAULT_PARAM_OHOS,
943             activeTime, effectParam), SUCCESS);
944         EXPECT_EQ(cameraManager_->PrelaunchCamera(), SUCCESS);
945         EXPECT_EQ(cameraManager_->PreSwitchCamera(cameraId), SUCCESS);
946 
947         activeTime = 15;
948         effectParam = {5, 0, 0};
949         EXPECT_EQ(cameraManager_->SetPrelaunchConfig(cameraId, RestoreParamTypeOhos::NO_NEED_RESTORE_PARAM_OHOS,
950             activeTime, effectParam), SUCCESS);
951 
952         cameraId = "";
953         activeTime = 15;
954         effectParam = {0, 0, 0};
955         EXPECT_EQ(cameraManager_->SetPrelaunchConfig(cameraId, RestoreParamTypeOhos::TRANSIENT_ACTIVE_PARAM_OHOS,
956             activeTime, effectParam), SERVICE_FATL_ERROR);
957     } else {
958         MEDIA_ERR_LOG("The camera prelaunch function is not supported");
959     }
960 }
961 
962 /*
963  * Feature: Camera base function
964  * Function: Test the camera torch function.
965  * SubFunction: NA
966  * FunctionPoints: NA
967  * EnvConditions: NA
968  * CaseDescription: Test the camera manager torch function, check if the device supports torch,
969  * register the torch status callback and switch the torch mode when supported, and the torch can
970  * be turned on and off normally.
971  */
972  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_018, TestSize.Level0)
973 {
974     if (cameraManager_->IsTorchSupported()) {
975         MEDIA_INFO_LOG("moduletest the camera torch function is supported");
976 
977         std::shared_ptr<TestTorchListener> listener = std::make_shared<TestTorchListener>();
978         ASSERT_NE(listener, nullptr);
979         cameraManager_->RegisterTorchListener(listener);
980         ASSERT_GT(cameraManager_->GetTorchServiceListenerManager()->GetListenerCount(), 0);
981 
982         ASSERT_TRUE(cameraManager_->IsTorchModeSupported(TorchMode::TORCH_MODE_OFF));
983         ASSERT_TRUE(cameraManager_->IsTorchModeSupported(TorchMode::TORCH_MODE_ON));
984         ASSERT_TRUE(!(cameraManager_->IsTorchModeSupported(TorchMode::TORCH_MODE_AUTO)));
985 
986         TorchMode currentTorchMode = cameraManager_->GetTorchMode();
987         sptr<CameraDevice> device = cameraDevices_[deviceBackIndex];
988         ASSERT_NE(device, nullptr);
989         if (device->GetPosition() == CAMERA_POSITION_BACK) {
990             EXPECT_EQ(cameraManager_->SetTorchMode(TorchMode::TORCH_MODE_ON), OPERATION_NOT_ALLOWED);
991             EXPECT_EQ(cameraManager_->SetTorchMode(TorchMode::TORCH_MODE_OFF), OPERATION_NOT_ALLOWED);
992             EXPECT_EQ(cameraManager_->GetTorchMode(), currentTorchMode);
993         } else if (device->GetPosition() == CAMERA_POSITION_FRONT) {
994             EXPECT_EQ(cameraManager_->SetTorchMode(TorchMode::TORCH_MODE_ON), SUCCESS);
995             EXPECT_EQ(cameraManager_->GetTorchMode(), TorchMode::TORCH_MODE_ON);
996             EXPECT_EQ(cameraManager_->SetTorchMode(TorchMode::TORCH_MODE_OFF), SUCCESS);
997             EXPECT_EQ(cameraManager_->GetTorchMode(), TorchMode::TORCH_MODE_OFF);
998         }
999     } else {
1000         MEDIA_ERR_LOG("moduletest the camera torch function is not supported");
1001     }
1002 }
1003 
1004 /*
1005  * Feature: Camera base function
1006  * Function: Test the camera folding state.
1007  * SubFunction: NA
1008  * FunctionPoints: NA
1009  * EnvConditions: NA
1010  * CaseDescription: Test the folding status of camera manager and check if the camera supports folding
1011  * and folding status.
1012  */
1013  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_019, TestSize.Level0)
1014 {
1015     sptr<CameraDevice> device = cameraInput_->GetCameraDeviceInfo();
1016     ASSERT_NE(device, nullptr);
1017     CameraFoldScreenType foldScreenType = device->GetCameraFoldScreenType();
1018     MEDIA_INFO_LOG("moduletest device get camera fold screen type: %{public}d", foldScreenType);
1019     uint32_t supportFoldStatus = device->GetSupportedFoldStatus();
1020     MEDIA_INFO_LOG("moduletest device get supported fold status: %{public}d", supportFoldStatus);
1021 
1022     bool isFoldable = cameraManager_->GetIsFoldable();
1023     MEDIA_INFO_LOG("moduletest camera manager get isFoldable: %{public}d", isFoldable);
1024     FoldStatus foldStatus = cameraManager_->GetFoldStatus();
1025     MEDIA_INFO_LOG("moduletest camera manager get fold status: %{public}d", foldStatus);
1026     std::shared_ptr<TestFoldListener> listener = std::make_shared<TestFoldListener>();
1027     ASSERT_NE(listener, nullptr);
1028     cameraManager_->RegisterFoldListener(listener);
1029     ASSERT_GT(cameraManager_->GetFoldStatusListenerManager()->GetListenerCount(), 0);
1030 }
1031 
1032 /* *****captureSession***** */
1033 /*
1034  * Feature: Camera base function
1035  * Function: Test the capture session with session call back.
1036  * SubFunction: NA
1037  * FunctionPoints: NA
1038  * EnvConditions: NA
1039  * CaseDescription: Test the captureSession add session callback. The callback function is set and
1040  * queried normally, and OnError is called when an error occurs during the session callback process.
1041  */
1042  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_020, TestSize.Level0)
1043 {
1044     sptr<PhotoOutput> photoOutput;
1045     sptr<VideoOutput> videoOutput;
1046     CreateAndConfigureDefaultCaptureOutput(photoOutput, videoOutput);
1047 
1048     std::shared_ptr<TestSessionCallback> callback = std::make_shared<TestSessionCallback>();
1049     ASSERT_NE(callback, nullptr);
1050     captureSession_->SetCallback(callback);
1051     EXPECT_NE(captureSession_->GetApplicationCallback(), nullptr);
1052 
1053     StartDefaultCaptureOutput(photoOutput, videoOutput);
1054 }
1055 
1056 /*
1057  * Feature: Camera base function
1058  * Function: Test the capture session with exposure modes.
1059  * SubFunction: NA
1060  * FunctionPoints: NA
1061  * EnvConditions: NA
1062  * CaseDescription: Test captureSession check the exposure modes supported by the device and set and
1063  * query the exposure modes after completing the default allocation. Ensure that the camera function
1064  * is normal after the settings are completed.
1065  */
1066  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_021, TestSize.Level0)
1067 {
1068     ExposureMode exposureMode = EXPOSURE_MODE_UNSUPPORTED;
1069     EXPECT_EQ(captureSession_->GetExposureMode(), EXPOSURE_MODE_UNSUPPORTED);
1070     EXPECT_EQ(captureSession_->GetExposureMode(exposureMode), SESSION_NOT_CONFIG);
1071     EXPECT_EQ(captureSession_->SetExposureMode(exposureMode), SESSION_NOT_CONFIG);
1072     EXPECT_EQ(captureSession_->IsExposureModeSupported(exposureMode), false);
1073 
1074     bool isSupported = true;
1075     EXPECT_EQ(captureSession_->IsExposureModeSupported(exposureMode, isSupported), SESSION_NOT_CONFIG);
1076     EXPECT_EQ(captureSession_->GetSupportedExposureModes().empty(), true);
1077     std::vector<ExposureMode> exposureModes;
1078     EXPECT_EQ(captureSession_->GetSupportedExposureModes(exposureModes), SESSION_NOT_CONFIG);
1079 
1080     sptr<PhotoOutput> photoOutput;
1081     sptr<VideoOutput> videoOutput;
1082     CreateAndConfigureDefaultCaptureOutput(photoOutput, videoOutput);
1083 
1084     EXPECT_EQ(captureSession_->GetSupportedExposureModes(exposureModes), SUCCESS);
1085     ASSERT_TRUE(!exposureModes.empty());
1086     for (auto mode : exposureModes) {
1087         ASSERT_TRUE(captureSession_->IsExposureModeSupported(mode));
1088     }
1089     captureSession_->LockForControl();
1090     EXPECT_EQ(captureSession_->SetExposureMode(ExposureMode::EXPOSURE_MODE_AUTO), SUCCESS);
1091     captureSession_->UnlockForControl();
1092     EXPECT_EQ(captureSession_->GetExposureMode(), ExposureMode::EXPOSURE_MODE_AUTO);
1093 
1094     StartDefaultCaptureOutput(photoOutput, videoOutput);
1095     EXPECT_EQ(cameraInput_->Release(), SUCCESS);
1096     cameraInput_ = nullptr;
1097 
1098     EXPECT_EQ(captureSession_->GetSupportedExposureModes().empty(), true);
1099     EXPECT_EQ(captureSession_->GetSupportedExposureModes(exposureModes), SUCCESS);
1100     EXPECT_EQ(captureSession_->GetExposureMode(), EXPOSURE_MODE_UNSUPPORTED);
1101     EXPECT_EQ(captureSession_->GetExposureMode(exposureMode), SUCCESS);
1102 }
1103 
1104 /*
1105  * Feature: Camera base function
1106  * Function: Test the capture session with metering points.
1107  * SubFunction: NA
1108  * FunctionPoints: NA
1109  * EnvConditions: NA
1110  * CaseDescription: Test captureSession set and query metering points after completing the default
1111  * allocation. Ensure that the camera function is normal after the settings are completed.
1112  */
1113  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_022, TestSize.Level0)
1114 {
1115     Point point = captureSession_->GetMeteringPoint();
1116     EXPECT_EQ(point.x, 0);
1117     EXPECT_EQ(point.y, 0);
1118     EXPECT_EQ(captureSession_->SetMeteringPoint(point), SESSION_NOT_CONFIG);
1119     EXPECT_EQ(captureSession_->GetMeteringPoint(point), SESSION_NOT_CONFIG);
1120 
1121     sptr<PhotoOutput> photoOutput;
1122     sptr<VideoOutput> videoOutput;
1123     CreateAndConfigureDefaultCaptureOutput(photoOutput, videoOutput);
1124 
1125     point = {1.0, 1.0};
1126     captureSession_->LockForControl();
1127     EXPECT_EQ(captureSession_->SetMeteringPoint(point), SUCCESS);
1128     captureSession_->UnlockForControl();
1129 
1130     Point otherPoint = {0.0, 0.0};
1131     EXPECT_EQ(captureSession_->GetMeteringPoint(otherPoint), SUCCESS);
1132     EXPECT_EQ(otherPoint.x, point.x);
1133     EXPECT_EQ(otherPoint.y, point.y);
1134 
1135     StartDefaultCaptureOutput(photoOutput, videoOutput);
1136     EXPECT_EQ(cameraInput_->Release(), SUCCESS);
1137     cameraInput_ = nullptr;
1138 
1139     EXPECT_EQ(captureSession_->GetMeteringPoint().x, 0);
1140     EXPECT_EQ(captureSession_->GetMeteringPoint().y, 0);
1141 
1142     EXPECT_EQ(captureSession_->GetMeteringPoint(point), SUCCESS);
1143     captureSession_->LockForControl();
1144     EXPECT_EQ(captureSession_->SetMeteringPoint(point), SUCCESS);
1145     captureSession_->UnlockForControl();
1146 }
1147 
1148 /*
1149  * Feature: Camera base function
1150  * Function: Test the capture session with exposure compensation value.
1151  * SubFunction: NA
1152  * FunctionPoints: NA
1153  * EnvConditions: NA
1154  * CaseDescription: Test captureSession query the camera exposure compensation value range and set
1155  * and query the exposure compensation value after completing the default allocation. Ensure that
1156  * the camera function is normal after the settings are completed.
1157  */
1158  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_023, TestSize.Level0)
1159 {
1160     float exposureValue = 0.0;
1161     EXPECT_EQ(captureSession_->GetExposureValue(), 0);
1162     EXPECT_EQ(captureSession_->GetExposureValue(exposureValue), SESSION_NOT_CONFIG);
1163     EXPECT_EQ(captureSession_->SetExposureBias(exposureValue), SESSION_NOT_CONFIG);
1164 
1165     std::vector<float> ranges;
1166     EXPECT_EQ(captureSession_->GetExposureBiasRange().empty(), true);
1167     EXPECT_EQ(captureSession_->GetExposureBiasRange(ranges), SESSION_NOT_CONFIG);
1168 
1169     sptr<PhotoOutput> photoOutput;
1170     sptr<VideoOutput> videoOutput;
1171     CreateAndConfigureDefaultCaptureOutput(photoOutput, videoOutput);
1172 
1173     EXPECT_EQ(captureSession_->GetExposureBiasRange(ranges), SUCCESS);
1174 
1175     captureSession_->LockForControl();
1176     EXPECT_EQ(captureSession_->SetExposureBias(ranges[0]), SUCCESS);
1177     captureSession_->UnlockForControl();
1178     EXPECT_EQ(captureSession_->GetExposureValue(), ranges[0]);
1179 
1180     captureSession_->LockForControl();
1181     EXPECT_EQ(captureSession_->SetExposureBias(ranges[1]), SUCCESS);
1182     captureSession_->UnlockForControl();
1183     EXPECT_EQ(captureSession_->GetExposureValue(), ranges[1]);
1184 
1185     StartDefaultCaptureOutput(photoOutput, videoOutput);
1186     EXPECT_EQ(cameraInput_->Release(), SUCCESS);
1187     cameraInput_ = nullptr;
1188 
1189     EXPECT_EQ(captureSession_->GetExposureBiasRange().empty(), true);
1190     EXPECT_EQ(captureSession_->GetExposureBiasRange(ranges), SUCCESS);
1191     EXPECT_EQ(captureSession_->GetExposureValue(), 0);
1192     EXPECT_EQ(captureSession_->GetExposureValue(exposureValue), SUCCESS);
1193     captureSession_->LockForControl();
1194     EXPECT_EQ(captureSession_->SetExposureBias(exposureValue), OPERATION_NOT_ALLOWED);
1195     captureSession_->UnlockForControl();
1196 }
1197 
1198 /*
1199  * Feature: Camera base function
1200  * Function: Test the capture session with auto focus mode.
1201  * SubFunction: NA
1202  * FunctionPoints: NA
1203  * EnvConditions: NA
1204  * CaseDescription: Test captureSession check the autofocus mode supported by the device and set and
1205  * query the autofocus mode after completing the default allocation. Ensure that the photography
1206  * function is normal after the settings are completed.
1207  */
1208  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_024, TestSize.Level0)
1209 {
1210     FocusMode focusMode = FOCUS_MODE_MANUAL;
1211     EXPECT_EQ(captureSession_->GetFocusMode(), FOCUS_MODE_MANUAL);
1212     EXPECT_EQ(captureSession_->GetFocusMode(focusMode), SESSION_NOT_CONFIG);
1213     EXPECT_EQ(captureSession_->SetFocusMode(focusMode), SESSION_NOT_CONFIG);
1214     EXPECT_EQ(captureSession_->IsFocusModeSupported(focusMode), false);
1215 
1216     bool isSupported = true;
1217     EXPECT_EQ(captureSession_->IsFocusModeSupported(focusMode, isSupported), SESSION_NOT_CONFIG);
1218     std::vector<FocusMode> focusModes;
1219     EXPECT_EQ(captureSession_->GetSupportedFocusModes().empty(), true);
1220     EXPECT_EQ(captureSession_->GetSupportedFocusModes(focusModes), SESSION_NOT_CONFIG);
1221 
1222     sptr<PhotoOutput> photoOutput;
1223     sptr<VideoOutput> videoOutput;
1224     CreateAndConfigureDefaultCaptureOutput(photoOutput, videoOutput);
1225 
1226     EXPECT_EQ(captureSession_->GetSupportedFocusModes(focusModes), SUCCESS);
1227     ASSERT_TRUE(!focusModes.empty());
1228     for (auto mode : focusModes) {
1229         ASSERT_TRUE(captureSession_->IsFocusModeSupported(mode));
1230     }
1231 
1232     std::shared_ptr<TestFocusCallback> callback = std::make_shared<TestFocusCallback>();
1233     ASSERT_NE(callback, nullptr);
1234     captureSession_->SetFocusCallback(callback);
1235     ASSERT_NE(captureSession_->GetFocusCallback(), nullptr);
1236 
1237     captureSession_->LockForControl();
1238     EXPECT_EQ(captureSession_->SetFocusMode(FocusMode::FOCUS_MODE_MANUAL), SUCCESS);
1239     captureSession_->UnlockForControl();
1240     EXPECT_EQ(captureSession_->GetFocusMode(), FocusMode::FOCUS_MODE_MANUAL);
1241 
1242     captureSession_->LockForControl();
1243     EXPECT_EQ(captureSession_->SetFocusMode(FocusMode::FOCUS_MODE_AUTO), SUCCESS);
1244     captureSession_->UnlockForControl();
1245     EXPECT_EQ(captureSession_->GetFocusMode(), FocusMode::FOCUS_MODE_AUTO);
1246 
1247     StartDefaultCaptureOutput(photoOutput, videoOutput);
1248     EXPECT_EQ(cameraInput_->Release(), SUCCESS);
1249     cameraInput_ = nullptr;
1250 
1251     EXPECT_EQ(captureSession_->GetSupportedFocusModes().empty(), true);
1252     EXPECT_EQ(captureSession_->GetSupportedFocusModes(focusModes), SUCCESS);
1253     EXPECT_EQ(captureSession_->GetFocusMode(), FOCUS_MODE_MANUAL);
1254     EXPECT_EQ(captureSession_->GetFocusMode(focusMode), SUCCESS);
1255 }
1256 
1257 /*
1258  * Feature: Camera base function
1259  * Function: Test the capture session with focus point and focal length.
1260  * SubFunction: NA
1261  * FunctionPoints: NA
1262  * EnvConditions: NA
1263  * CaseDescription: Test cpatuseSession set and query the focus point and focal length after completing
1264  * the default allocation. Ensure that the camera function is normal after the settings are completed.
1265  */
1266  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_025, TestSize.Level0)
1267 {
1268     Point point = captureSession_->GetFocusPoint();
1269     EXPECT_EQ(point.x, 0);
1270     EXPECT_EQ(point.y, 0);
1271 
1272     float focalLength = 0.0;
1273     EXPECT_EQ(captureSession_->GetFocalLength(), 0);
1274     EXPECT_EQ(captureSession_->GetFocalLength(focalLength), SESSION_NOT_CONFIG);
1275     EXPECT_EQ(captureSession_->GetFocusPoint(point), SESSION_NOT_CONFIG);
1276     EXPECT_EQ(captureSession_->SetFocusPoint(point), SESSION_NOT_CONFIG);
1277 
1278     sptr<PhotoOutput> photoOutput;
1279     sptr<VideoOutput> videoOutput;
1280     CreateAndConfigureDefaultCaptureOutput(photoOutput, videoOutput);
1281 
1282     point = { 1.0, 1.0 };
1283     captureSession_->LockForControl();
1284     EXPECT_EQ(captureSession_->SetFocusPoint(point), SUCCESS);
1285     captureSession_->UnlockForControl();
1286 
1287     Point otherPoint = { 0.0, 0.0 };
1288     EXPECT_EQ(captureSession_->GetFocusPoint(otherPoint), SUCCESS);
1289     EXPECT_EQ(otherPoint.x, point.x);
1290     EXPECT_EQ(otherPoint.y, point.y);
1291 
1292     EXPECT_EQ(captureSession_->GetFocalLength(focalLength), SUCCESS);
1293     MEDIA_INFO_LOG("moduletest get focal length: %{public}f", focalLength);
1294 
1295     StartDefaultCaptureOutput(photoOutput, videoOutput);
1296     EXPECT_EQ(cameraInput_->Release(), SUCCESS);
1297     cameraInput_ = nullptr;
1298 
1299     EXPECT_EQ(captureSession_->GetFocusPoint().x, 0);
1300     EXPECT_EQ(captureSession_->GetFocusPoint().y, 0);
1301     EXPECT_EQ(captureSession_->GetFocusPoint(point), SUCCESS);
1302     EXPECT_EQ(captureSession_->GetFocalLength(), 0);
1303     EXPECT_EQ(captureSession_->GetFocalLength(focalLength), SUCCESS);
1304 }
1305 
1306 /*
1307  * Feature: Camera base function
1308  * Function: Test the capture session with flash.
1309  * SubFunction: NA
1310  * FunctionPoints: NA
1311  * EnvConditions: NA
1312  * CaseDescription: Test captureSession check if the device supports flash, set and query the flash mode
1313  * if supported after completing the default allocation. Ensure that the camera function is normal
1314  * after the settings are completed.
1315  */
1316  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_026, TestSize.Level0)
1317 {
1318     bool hasFlash = false;
1319     EXPECT_EQ(captureSession_->HasFlash(), false);
1320     EXPECT_EQ(captureSession_->HasFlash(hasFlash), SESSION_NOT_CONFIG);
1321 
1322     FlashMode flashMode = FLASH_MODE_CLOSE;
1323     EXPECT_EQ(captureSession_->GetFlashMode(), FLASH_MODE_CLOSE);
1324     EXPECT_EQ(captureSession_->GetFlashMode(flashMode), SESSION_NOT_CONFIG);
1325     EXPECT_EQ(captureSession_->SetFlashMode(flashMode), SESSION_NOT_CONFIG);
1326     EXPECT_EQ(captureSession_->IsFlashModeSupported(flashMode), false);
1327 
1328     bool isSupported = true;
1329     EXPECT_EQ(captureSession_->IsFlashModeSupported(flashMode, isSupported), SESSION_NOT_CONFIG);
1330 
1331     std::vector<FlashMode> flashModes;
1332     EXPECT_EQ(captureSession_->GetSupportedFlashModes().empty(), true);
1333     EXPECT_EQ(captureSession_->GetSupportedFlashModes(flashModes), SESSION_NOT_CONFIG);
1334 
1335     sptr<PhotoOutput> photoOutput;
1336     sptr<VideoOutput> videoOutput;
1337     CreateAndConfigureDefaultCaptureOutput(photoOutput, videoOutput);
1338 
1339     ASSERT_TRUE(captureSession_->HasFlash());
1340     EXPECT_EQ(captureSession_->GetSupportedFlashModes(flashModes), SUCCESS);
1341     ASSERT_TRUE(!flashModes.empty());
1342     for (auto mode : flashModes) {
1343         ASSERT_TRUE(captureSession_->IsFlashModeSupported(mode));
1344     }
1345 
1346     captureSession_->LockForControl();
1347     EXPECT_EQ(captureSession_->SetFlashMode(FlashMode::FLASH_MODE_OPEN), SUCCESS);
1348     captureSession_->UnlockForControl();
1349     EXPECT_EQ(captureSession_->GetFlashMode(), FlashMode::FLASH_MODE_OPEN);
1350 
1351     captureSession_->LockForControl();
1352     EXPECT_EQ(captureSession_->SetFlashMode(FlashMode::FLASH_MODE_CLOSE), SUCCESS);
1353     captureSession_->UnlockForControl();
1354     EXPECT_EQ(captureSession_->GetFlashMode(), FlashMode::FLASH_MODE_CLOSE);
1355 
1356     StartDefaultCaptureOutput(photoOutput, videoOutput);
1357     EXPECT_EQ(cameraInput_->Release(), SUCCESS);
1358     cameraInput_ = nullptr;
1359 
1360     EXPECT_EQ(captureSession_->GetSupportedFlashModes().empty(), true);
1361     EXPECT_EQ(captureSession_->GetSupportedFlashModes(flashModes), SUCCESS);
1362     EXPECT_EQ(captureSession_->GetFlashMode(), FLASH_MODE_CLOSE);
1363     EXPECT_EQ(captureSession_->GetFlashMode(flashMode), SUCCESS);
1364 }
1365 
1366 /*
1367  * Feature: Camera base function
1368  * Function: Test the capture session with zoom ratio range.
1369  * SubFunction: NA
1370  * FunctionPoints: NA
1371  * EnvConditions: NA
1372  * CaseDescription: Test captureSession check the zoom ratio range supported by the device, and set and
1373  * query the zoom ratio after completing the default allocation. Ensure that the camera function
1374  * is normal after the settings are completed.
1375  */
1376  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_027, TestSize.Level0)
1377 {
1378     float zoomRatio;
1379     EXPECT_EQ(captureSession_->GetZoomRatio(), 0);
1380 
1381     std::vector<float> ranges;
1382     EXPECT_EQ(captureSession_->GetZoomRatioRange().empty(), true);
1383     EXPECT_EQ(captureSession_->GetZoomRatioRange(ranges), SESSION_NOT_CONFIG);
1384     EXPECT_EQ(captureSession_->GetZoomRatio(zoomRatio), SESSION_NOT_CONFIG);
1385     EXPECT_EQ(captureSession_->SetZoomRatio(zoomRatio), SESSION_NOT_CONFIG);
1386 
1387     sptr<PhotoOutput> photoOutput;
1388     sptr<VideoOutput> videoOutput;
1389     CreateAndConfigureDefaultCaptureOutput(photoOutput, videoOutput);
1390 
1391     EXPECT_EQ(captureSession_->GetZoomRatioRange(ranges), SUCCESS);
1392     if (ranges.empty()) {
1393         MEDIA_ERR_LOG("moduletest get zoom ratio ranage is empty");
1394         return;
1395     }
1396 
1397     EXPECT_EQ(captureSession_->PrepareZoom(), SUCCESS);
1398 
1399     captureSession_->LockForControl();
1400     EXPECT_EQ(captureSession_->SetZoomRatio(ranges[0]), SUCCESS);
1401     captureSession_->UnlockForControl();
1402     float zoomRatioMin = captureSession_->GetZoomRatio();
1403     EXPECT_EQ(captureSession_->GetZoomRatio(zoomRatioMin), SUCCESS);
1404 
1405     std::shared_ptr<TestSmoothZoomCallback> callback = std::make_shared<TestSmoothZoomCallback>();
1406     ASSERT_NE(callback, nullptr);
1407     captureSession_->SetSmoothZoomCallback(callback);
1408     ASSERT_NE(captureSession_->GetSmoothZoomCallback(), nullptr);
1409 
1410     uint32_t smoothZoomType = 0;
1411     captureSession_->LockForControl();
1412     EXPECT_EQ(captureSession_->SetSmoothZoom(ranges[1], smoothZoomType), SUCCESS);
1413     captureSession_->UnlockForControl();
1414     float zoomRatioMax = captureSession_->GetZoomRatio();
1415     EXPECT_EQ(captureSession_->GetZoomRatio(zoomRatioMax), SUCCESS);
1416     std::vector<ZoomPointInfo> zoomPointInfoList;
1417     EXPECT_EQ(captureSession_->GetZoomPointInfos(zoomPointInfoList), SUCCESS);
1418 
1419     EXPECT_EQ(captureSession_->UnPrepareZoom(), SUCCESS);
1420 
1421     StartDefaultCaptureOutput(photoOutput, videoOutput);
1422     EXPECT_EQ(cameraInput_->Release(), SUCCESS);
1423     cameraInput_ = nullptr;
1424 
1425     EXPECT_EQ(captureSession_->GetZoomRatioRange().empty(), true);
1426     EXPECT_EQ(captureSession_->GetZoomRatioRange(ranges), SUCCESS);
1427     EXPECT_EQ(captureSession_->GetZoomRatio(), 0);
1428     EXPECT_EQ(captureSession_->GetZoomRatio(zoomRatio), SUCCESS);
1429     captureSession_->LockForControl();
1430     EXPECT_EQ(captureSession_->SetZoomRatio(zoomRatio), SUCCESS);
1431     captureSession_->UnlockForControl();
1432 }
1433 
1434 /*
1435  * Feature: Camera base function
1436  * Function: Test the capture session with filter.
1437  * SubFunction: NA
1438  * FunctionPoints: NA
1439  * EnvConditions: NA
1440  * CaseDescription: Test captureSession check the filter types supported by the device, and set and
1441  * query the filter types after completing the default allocation. Ensure that the camera function
1442  * is normal after the settings are completed.
1443  */
1444  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_028, TestSize.Level0)
1445 {
1446     sptr<PhotoOutput> photoOutput;
1447     sptr<VideoOutput> videoOutput;
1448     CreateAndConfigureDefaultCaptureOutput(photoOutput, videoOutput);
1449 
1450     std::vector<FilterType> filterTypes = captureSession_->GetSupportedFilters();
1451     if (filterTypes.empty()) {
1452         MEDIA_ERR_LOG("moduletest get supported filters is empty");
1453         return;
1454     }
1455 
1456     captureSession_->LockForControl();
1457     captureSession_->SetFilter(FilterType::CLASSIC);
1458     captureSession_->UnlockForControl();
1459     EXPECT_EQ(captureSession_->GetFilter(), FilterType::CLASSIC);
1460 
1461     captureSession_->LockForControl();
1462     captureSession_->SetFilter(FilterType::NONE);
1463     captureSession_->UnlockForControl();
1464     EXPECT_EQ(captureSession_->GetFilter(), FilterType::NONE);
1465 
1466     StartDefaultCaptureOutput(photoOutput, videoOutput);
1467 }
1468 
1469 /*
1470  * Feature: Camera base function
1471  * Function: Test the capture session with beauty.
1472  * SubFunction: NA
1473  * FunctionPoints: NA
1474  * EnvConditions: NA
1475  * CaseDescription: Test captureSession check the beauty types supported by the device and the corresponding
1476  * beauty levels supported by each type, and set and query the beauty level after completing the default
1477  * allocation. Ensure that the camera function is normal after the settings are completed.
1478  */
1479  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_029, TestSize.Level0)
1480 {
1481     sptr<PhotoOutput> photoOutput;
1482     sptr<VideoOutput> videoOutput;
1483     CreateAndConfigureDefaultCaptureOutput(photoOutput, videoOutput);
1484 
1485     std::vector<BeautyType> beautyTypes = captureSession_->GetSupportedBeautyTypes();
1486     if (beautyTypes.empty()) {
1487         MEDIA_ERR_LOG("moduletest get supported beauty types is empty");
1488         return;
1489     }
1490 
1491     std::vector<int32_t> ranges = captureSession_->GetSupportedBeautyRange(BeautyType::FACE_SLENDER);
1492     if (ranges.empty()) {
1493         MEDIA_ERR_LOG("moduletest get supported beauty range is empty");
1494         return;
1495     }
1496 
1497     captureSession_->LockForControl();
1498     captureSession_->SetBeauty(BeautyType::FACE_SLENDER, ranges[0]);
1499     captureSession_->UnlockForControl();
1500     EXPECT_EQ(captureSession_->GetBeauty(BeautyType::FACE_SLENDER), ranges[0]);
1501 
1502     captureSession_->LockForControl();
1503     captureSession_->SetBeauty(BeautyType::FACE_SLENDER, ranges[1]);
1504     captureSession_->UnlockForControl();
1505     EXPECT_EQ(captureSession_->GetBeauty(BeautyType::FACE_SLENDER), ranges[1]);
1506 
1507     StartDefaultCaptureOutput(photoOutput, videoOutput);
1508 }
1509 
1510 /*
1511  * Feature: Camera base function
1512  * Function: Test the capture session with color space.
1513  * SubFunction: NA
1514  * FunctionPoints: NA
1515  * EnvConditions: NA
1516  * CaseDescription: Test captureSession check the color space types supported by the device, and set
1517  * and query the color space types after completing the default allocation. Ensure that the photography
1518  * function is normal after the settings are completed.
1519  */
1520  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_030, TestSize.Level0)
1521 {
1522     sptr<PhotoOutput> photoOutput;
1523     sptr<VideoOutput> videoOutput;
1524     CreateAndConfigureDefaultCaptureOutput(photoOutput, videoOutput);
1525 
1526     std::vector<ColorSpace> colorSpaces = captureSession_->GetSupportedColorSpaces();
1527     if (colorSpaces.empty()) {
1528         MEDIA_ERR_LOG("moduletest get supported color spaces is empty");
1529         return;
1530     }
1531     bool isSupportSet = false;
1532     if (std::find(colorSpaces.begin(), colorSpaces.end(), ColorSpace::COLOR_SPACE_UNKNOWN) !=
1533         colorSpaces.end()) {
1534         isSupportSet = true;
1535     }
1536     int32_t ret = isSupportSet ? SUCCESS : INVALID_ARGUMENT;
1537     EXPECT_EQ(captureSession_->SetColorSpace(ColorSpace::COLOR_SPACE_UNKNOWN), ret);
1538 
1539     bool isSupportSetP3 = false;
1540     if (std::find(colorSpaces.begin(), colorSpaces.end(), ColorSpace::P3_HLG) !=
1541         colorSpaces.end()) {
1542         isSupportSetP3 = true;
1543     }
1544     int32_t retP3 = isSupportSetP3 ? SUCCESS : INVALID_ARGUMENT;
1545     EXPECT_EQ(captureSession_->SetColorSpace(ColorSpace::P3_HLG), retP3);
1546     ColorSpace colorSpace = ColorSpace::COLOR_SPACE_UNKNOWN;
1547     EXPECT_EQ(captureSession_->GetActiveColorSpace(colorSpace), SUCCESS);
1548     MEDIA_INFO_LOG("moduletest get active color space: %{public}d", colorSpace);
1549 
1550     StartDefaultCaptureOutput(photoOutput, videoOutput);
1551 }
1552 
1553 /*
1554  * Feature: Camera base function
1555  * Function: Test the capture session with color effect.
1556  * SubFunction: NA
1557  * FunctionPoints: NA
1558  * EnvConditions: NA
1559  * CaseDescription: Test captureSession check the color effect types supported by the device, and set
1560  * and query the color effect types after completing the default allocation. Ensure that the photography
1561  * function is normal after the settings are completed.
1562  */
1563  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_031, TestSize.Level0)
1564 {
1565     sptr<PhotoOutput> photoOutput;
1566     sptr<VideoOutput> videoOutput;
1567     CreateAndConfigureDefaultCaptureOutput(photoOutput, videoOutput);
1568 
1569     std::vector<ColorEffect> colorEffects = captureSession_->GetSupportedColorEffects();
1570     if (colorEffects.empty()) {
1571         MEDIA_ERR_LOG("moduletest get supported color effects is empty");
1572         return;
1573     }
1574 
1575     captureSession_->LockForControl();
1576     captureSession_->SetColorEffect(ColorEffect::COLOR_EFFECT_NORMAL);
1577     captureSession_->UnlockForControl();
1578     EXPECT_EQ(captureSession_->GetColorEffect(), ColorEffect::COLOR_EFFECT_NORMAL);
1579 
1580     captureSession_->LockForControl();
1581     captureSession_->SetColorEffect(ColorEffect::COLOR_EFFECT_BRIGHT);
1582     captureSession_->UnlockForControl();
1583     EXPECT_EQ(captureSession_->GetColorEffect(), ColorEffect::COLOR_EFFECT_BRIGHT);
1584 
1585     StartDefaultCaptureOutput(photoOutput, videoOutput);
1586 }
1587 
1588 /*
1589  * Feature: Camera base function
1590  * Function: Test the capture session with auto focus distance.
1591  * SubFunction: NA
1592  * FunctionPoints: NA
1593  * EnvConditions: NA
1594  * CaseDescription: Test captureSession check the minimum autofocus distance supported by the device,
1595  * and set and query the autofocus distance after completing the default allocation. Ensure that the
1596  * camera function is normal after the settings are completed.
1597  */
1598  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_032, TestSize.Level0)
1599 {
1600     sptr<PhotoOutput> photoOutput;
1601     sptr<VideoOutput> videoOutput;
1602     CreateAndConfigureDefaultCaptureOutput(photoOutput, videoOutput);
1603 
1604     float minFocusDistance = captureSession_->GetMinimumFocusDistance();
1605     MEDIA_INFO_LOG("moduletest get min focus distance: %{public}f", minFocusDistance);
1606 
1607     float focusDistance1 = -1.0;
1608     captureSession_->LockForControl();
1609     EXPECT_EQ(captureSession_->SetFocusDistance(focusDistance1), SUCCESS);
1610     captureSession_->UnlockForControl();
1611     float getFocusDistance1 = 0.0;
1612     EXPECT_EQ(captureSession_->GetFocusDistance(getFocusDistance1), SUCCESS);
1613     MEDIA_INFO_LOG("moduletest get focus distance: %{public}f", getFocusDistance1);
1614 
1615     float focusDistance2 = 0.0;
1616     captureSession_->LockForControl();
1617     EXPECT_EQ(captureSession_->SetFocusDistance(focusDistance2), SUCCESS);
1618     captureSession_->UnlockForControl();
1619     float getFocusDistance2 = 0.0;
1620     EXPECT_EQ(captureSession_->GetFocusDistance(getFocusDistance2), SUCCESS);
1621     MEDIA_INFO_LOG("moduletest get focus distance: %{public}f", getFocusDistance2);
1622 
1623     float focusDistance3 = 1.0;
1624     captureSession_->LockForControl();
1625     EXPECT_EQ(captureSession_->SetFocusDistance(focusDistance3), SUCCESS);
1626     captureSession_->UnlockForControl();
1627     float getFocusDistance3 = 0.0;
1628     EXPECT_EQ(captureSession_->GetFocusDistance(getFocusDistance3), SUCCESS);
1629     MEDIA_INFO_LOG("moduletest get focus distance: %{public}f", getFocusDistance3);
1630 
1631     StartDefaultCaptureOutput(photoOutput, videoOutput);
1632 }
1633 
1634 /*
1635  * Feature: Camera base function
1636  * Function: Test the capture session with macro.
1637  * SubFunction: NA
1638  * FunctionPoints: NA
1639  * EnvConditions: NA
1640  * CaseDescription: Test captureSession check if the device supports macro lens function. Enable macro
1641  * function and set macro status callback if supported after completing the default allocation.
1642  * Ensure that the camera function is normal after the settings are completed.
1643  */
1644  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_033, TestSize.Level0)
1645 {
1646     sptr<PhotoOutput> photoOutput;
1647     sptr<VideoOutput> videoOutput;
1648     CreateAndConfigureDefaultCaptureOutput(photoOutput, videoOutput);
1649 
1650     if (!captureSession_->IsMacroSupported()) {
1651         MEDIA_ERR_LOG("moduletest macro is not supported");
1652         return;
1653     }
1654 
1655     std::shared_ptr<TestMacroStatusCallback>callback = std::make_shared<TestMacroStatusCallback>();
1656     ASSERT_NE(callback, nullptr);
1657     captureSession_->SetMacroStatusCallback(callback);
1658     EXPECT_NE(captureSession_->GetMacroStatusCallback(), nullptr);
1659 
1660     captureSession_->LockForControl();
1661     EXPECT_EQ(captureSession_->EnableMacro(!(captureSession_->IsSetEnableMacro())), SUCCESS);
1662     captureSession_->UnlockForControl();
1663 
1664     StartDefaultCaptureOutput(photoOutput, videoOutput);
1665 }
1666 
1667 /*
1668  * Feature: Camera base function
1669  * Function: Test the capture session with depth fusion.
1670  * SubFunction: NA
1671  * FunctionPoints: NA
1672  * EnvConditions: NA
1673  * CaseDescription: Test captureSession check if the device supports depth fusion function. Enable
1674  * the depth fusion function and query the zoom ratio range if supported after completing the default
1675  * allocation. Ensure that the camera function is normal after the settings are completed.
1676  */
1677  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_034, TestSize.Level0)
1678 {
1679     sptr<PhotoOutput> photoOutput;
1680     sptr<VideoOutput> videoOutput;
1681     CreateAndConfigureDefaultCaptureOutput(photoOutput, videoOutput);
1682 
1683     if (!captureSession_->IsDepthFusionSupported()) {
1684         MEDIA_ERR_LOG("moduletest depth fusion is not supported");
1685         return;
1686     }
1687 
1688     std::vector<float> thresholds = captureSession_->GetDepthFusionThreshold();
1689     ASSERT_TRUE(!thresholds.empty());
1690     MEDIA_INFO_LOG("moduletest depth fusion threshold min %{public}f max %{public}f", thresholds[0], thresholds[1]);
1691 
1692     captureSession_->LockForControl();
1693     EXPECT_EQ(captureSession_->EnableDepthFusion(!(captureSession_->IsDepthFusionEnabled())), SUCCESS);
1694     captureSession_->UnlockForControl();
1695 
1696     StartDefaultCaptureOutput(photoOutput, videoOutput);
1697 }
1698 
1699 /*
1700  * Feature: Camera base function
1701  * Function: Test the capture session with moon capture boost.
1702  * SubFunction: NA
1703  * FunctionPoints: NA
1704  * EnvConditions: NA
1705  * CaseDescription: Test captureSession check if the device supports moon capture boost function.
1706  * Enable and set the status callback if supported after completing the default allocation. Ensure
1707  * that the camera function is normal after the settings are completed.
1708  */
1709  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_035, TestSize.Level0)
1710 {
1711     sptr<PhotoOutput> photoOutput;
1712     sptr<VideoOutput> videoOutput;
1713     CreateAndConfigureDefaultCaptureOutput(photoOutput, videoOutput);
1714 
1715     if (!captureSession_->IsMoonCaptureBoostSupported()) {
1716         MEDIA_ERR_LOG("moduletest moon capture boost is not supported");
1717         return;
1718     }
1719 
1720     auto callback = std::make_shared<TestMoonCaptureBoostStatusCallback>();
1721     ASSERT_NE(callback, nullptr);
1722     captureSession_->SetMoonCaptureBoostStatusCallback(callback);
1723     EXPECT_NE(captureSession_->GetMoonCaptureBoostStatusCallback(), nullptr);
1724 
1725     captureSession_->LockForControl();
1726     EXPECT_EQ(captureSession_->EnableMoonCaptureBoost(true), SUCCESS);
1727     captureSession_->UnlockForControl();
1728 
1729     StartDefaultCaptureOutput(photoOutput, videoOutput);
1730 }
1731 
1732 /*
1733  * Feature: Camera base function
1734  * Function: Test the capture session with low light boost.
1735  * SubFunction: NA
1736  * FunctionPoints: NA
1737  * EnvConditions: NA
1738  * CaseDescription: Test captureSession check if the device supports low light boost function.
1739  * Enable low light enhancement and detection function after completing the default allocation.
1740  * Ensure that the camera function is normal after the settings are completed.
1741  */
1742  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_036, TestSize.Level0)
1743 {
1744     sptr<PhotoOutput> photoOutput;
1745     sptr<VideoOutput> videoOutput;
1746     CreateAndConfigureDefaultCaptureOutput(photoOutput, videoOutput);
1747 
1748     if (!captureSession_->IsLowLightBoostSupported()) {
1749         MEDIA_ERR_LOG("mooduletest low light boost is not supported");
1750         return;
1751     }
1752 
1753     captureSession_->LockForControl();
1754     EXPECT_EQ(captureSession_->EnableLowLightBoost(true), SUCCESS);
1755     EXPECT_EQ(captureSession_->EnableLowLightDetection(true), SUCCESS);
1756     captureSession_->UnlockForControl();
1757 
1758     StartDefaultCaptureOutput(photoOutput, videoOutput);
1759 }
1760 
1761 /*
1762  * Feature: Camera base function
1763  * Function: Test the capture session with feature.
1764  * SubFunction: NA
1765  * FunctionPoints: NA
1766  * EnvConditions: NA
1767  * CaseDescription: Test captureSession check if the device supports the target function.
1768  * Enable and set the target function detection callback after completing the default allocation.
1769  * Ensure that the camera function is normal after the settings are completed.
1770  */
1771  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_037, TestSize.Level0)
1772 {
1773     sptr<PhotoOutput> photoOutput;
1774     sptr<VideoOutput> videoOutput;
1775     CreateAndConfigureDefaultCaptureOutput(photoOutput, videoOutput);
1776 
1777     auto callback = std::make_shared<TestFeatureDetectionStatusCallback>();
1778     ASSERT_NE(callback, nullptr);
1779     captureSession_->SetFeatureDetectionStatusCallback(callback);
1780     EXPECT_NE(captureSession_->GetFeatureDetectionStatusCallback(), nullptr);
1781 
1782     if (captureSession_->IsFeatureSupported(SceneFeature::FEATURE_MOON_CAPTURE_BOOST)) {
1783         EXPECT_EQ(captureSession_->EnableFeature(SceneFeature::FEATURE_MOON_CAPTURE_BOOST, true), SUCCESS);
1784     }
1785     if (captureSession_->IsFeatureSupported(SceneFeature::FEATURE_TRIPOD_DETECTION)) {
1786         EXPECT_EQ(captureSession_->EnableFeature(SceneFeature::FEATURE_TRIPOD_DETECTION, true), SUCCESS);
1787     }
1788     if (captureSession_->IsFeatureSupported(SceneFeature::FEATURE_LOW_LIGHT_BOOST)) {
1789         EXPECT_EQ(captureSession_->EnableFeature(SceneFeature::FEATURE_LOW_LIGHT_BOOST, true), SUCCESS);
1790     }
1791     if (captureSession_->IsFeatureSupported(SceneFeature::FEATURE_MACRO)) {
1792         EXPECT_EQ(captureSession_->EnableFeature(SceneFeature::FEATURE_MACRO, true), SUCCESS);
1793     }
1794     StartDefaultCaptureOutput(photoOutput, videoOutput);
1795 }
1796 
1797 /*
1798  * Feature: Camera base function
1799  * Function: Test the capture session with AR.
1800  * SubFunction: NA
1801  * FunctionPoints: NA
1802  * EnvConditions: NA
1803  * CaseDescription: Test captureSession set the AR mode and AR callback after completing the default
1804  * allocation, and the camera function will function normally after the settings are completed.
1805  */
1806  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_038, TestSize.Level0)
1807 {
1808     sptr<PhotoOutput> photoOutput;
1809     sptr<VideoOutput> videoOutput;
1810     CreateAndConfigureDefaultCaptureOutput(photoOutput, videoOutput);
1811 
1812     uint32_t moduleType = 0;
1813     EXPECT_EQ(captureSession_->GetModuleType(moduleType), SUCCESS);
1814     EXPECT_EQ(cameraDevices_[0]->GetModuleType(), moduleType);
1815 
1816     std::vector<int32_t> sensitivityRange;
1817     EXPECT_EQ(captureSession_->GetSensorSensitivityRange(sensitivityRange), SUCCESS);
1818     if (!sensitivityRange.empty()) {
1819         captureSession_->LockForControl();
1820         EXPECT_EQ(captureSession_->SetSensorSensitivity(sensitivityRange[0]), SUCCESS);
1821         captureSession_->UnlockForControl();
1822     }
1823 
1824     std::vector<uint32_t> sensorExposureTimeRange;
1825     int32_t ret = captureSession_->GetSensorExposureTimeRange(sensorExposureTimeRange);
1826     if ((ret == SUCCESS) || (!sensorExposureTimeRange.empty())) {
1827         captureSession_->LockForControl();
1828         EXPECT_EQ(captureSession_->SetSensorExposureTime(sensorExposureTimeRange[0]), SUCCESS);
1829         captureSession_->UnlockForControl();
1830 
1831         uint32_t sensorExposureTime = 0;
1832         EXPECT_EQ(captureSession_->GetSensorExposureTime(sensorExposureTime), SUCCESS);
1833         EXPECT_EQ(sensorExposureTime, sensorExposureTimeRange[0]);
1834     }
1835 
1836     auto callback = std::make_shared<TestARCallback>();
1837     EXPECT_NE(callback, nullptr);
1838     captureSession_->SetARCallback(callback);
1839     EXPECT_NE(captureSession_->GetARCallback(), nullptr);
1840     EXPECT_EQ(captureSession_->SetARMode(true), SUCCESS);
1841 
1842     StartDefaultCaptureOutput(photoOutput, videoOutput);
1843 }
1844 
1845 /*
1846  * Feature: Camera base function
1847  * Function: Test the capture session with master ai.
1848  * SubFunction: NA
1849  * FunctionPoints: NA
1850  * EnvConditions: NA
1851  * CaseDescription: Test captureSession check if the device supports scene mode and type. Enable and
1852  * set the corresponding state for the scene mode type after completing the default allocation. Ensure
1853  * that the camera function is normal after the settings are completed.
1854  */
1855  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_039, TestSize.Level0)
1856 {
1857     sptr<PhotoOutput> photoOutput;
1858     sptr<VideoOutput> videoOutput;
1859     CreateAndConfigureDefaultCaptureOutput(photoOutput, videoOutput);
1860 
1861     if (!captureSession_->IsEffectSuggestionSupported()) {
1862         MEDIA_ERR_LOG("mooduletest effect suggestion is not supported");
1863         return;
1864     }
1865 
1866     std::vector<EffectSuggestionType> supportedTypeList = captureSession_->GetSupportedEffectSuggestionType();
1867     ASSERT_TRUE(!supportedTypeList.empty());
1868 
1869     auto callback = std::make_shared<TestEffectSuggestionCallback>();
1870     ASSERT_NE(callback, nullptr);
1871     captureSession_->SetEffectSuggestionCallback(callback);
1872 
1873     captureSession_->LockForControl();
1874     EXPECT_EQ(captureSession_->EnableEffectSuggestion(true), SUCCESS);
1875 
1876     std::vector<EffectSuggestionType> effectSuggestionTypes = captureSession_->GetSupportedEffectSuggestionType();
1877     if (!effectSuggestionTypes.empty()) {
1878         std::vector<EffectSuggestionStatus> effectSuggestionStatusList;
1879         for (auto type : effectSuggestionTypes) {
1880             effectSuggestionStatusList.push_back({type, false});
1881         }
1882         EXPECT_EQ(captureSession_->SetEffectSuggestionStatus(effectSuggestionStatusList), SUCCESS);
1883         EXPECT_EQ(captureSession_->UpdateEffectSuggestion(EffectSuggestionType::EFFECT_SUGGESTION_PORTRAIT,
1884             true), SUCCESS);
1885     }
1886     captureSession_->UnlockForControl();
1887 
1888     StartDefaultCaptureOutput(photoOutput, videoOutput);
1889 }
1890 
1891 /*
1892  * Feature: Camera base function
1893  * Function: Test the capture session with virtual aperture.
1894  * SubFunction: NA
1895  * FunctionPoints: NA
1896  * EnvConditions: NA
1897  * CaseDescription: Test the captureSession check the supported virtual aperture settings and set the
1898  * virtual aperture. After the settings are completed, the camera function is normal.
1899  */
1900  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_040, TestSize.Level0)
1901 {
1902     sptr<PhotoOutput> photoOutput;
1903     sptr<VideoOutput> videoOutput;
1904     CreateAndConfigureDefaultCaptureOutput(photoOutput, videoOutput);
1905 
1906     std::vector<float> apertures;
1907     EXPECT_EQ(captureSession_->GetSupportedVirtualApertures(apertures), SUCCESS);
1908     if (!apertures.empty()) {
1909         captureSession_->LockForControl();
1910         EXPECT_EQ(captureSession_->SetVirtualAperture(apertures[0]), SUCCESS);
1911         captureSession_->UnlockForControl();
1912 
1913         float aperture = 0.0;
1914         EXPECT_EQ(captureSession_->GetVirtualAperture(aperture), SUCCESS);
1915         EXPECT_EQ(aperture, apertures[0]);
1916     }
1917 
1918     StartDefaultCaptureOutput(photoOutput, videoOutput);
1919 }
1920 
1921 /*
1922  * Feature: Camera base function
1923  * Function: Test the capture session with physical aperture.
1924  * SubFunction: NA
1925  * FunctionPoints: NA
1926  * EnvConditions: NA
1927  * CaseDescription: Test the captureSession check the supported physical aperture settings and set the
1928  * physical aperture. After the settings are completed, the camera function is normal.
1929  */
1930  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_041, TestSize.Level0)
1931 {
1932     sptr<PhotoOutput> photoOutput;
1933     sptr<VideoOutput> videoOutput;
1934     CreateAndConfigureDefaultCaptureOutput(photoOutput, videoOutput);
1935 
1936     std::vector<std::vector<float>> vecAperture;
1937     EXPECT_EQ(captureSession_->GetSupportedPhysicalApertures(vecAperture), SUCCESS);
1938     if (!vecAperture.empty()) {
1939         std::vector<float> apertures = vecAperture[0];
1940         captureSession_->LockForControl();
1941         EXPECT_EQ(captureSession_->SetPhysicalAperture(apertures[0]), SUCCESS);
1942         captureSession_->UnlockForControl();
1943 
1944         float aperture = 0.0;
1945         EXPECT_EQ(captureSession_->GetPhysicalAperture(aperture), SUCCESS);
1946         EXPECT_EQ(aperture, apertures[0]);
1947     }
1948 
1949     StartDefaultCaptureOutput(photoOutput, videoOutput);
1950 }
1951 
1952 /*
1953  * Feature: Camera base function
1954  * Function: Test the capture session with white balance.
1955  * SubFunction: NA
1956  * FunctionPoints: NA
1957  * EnvConditions: NA
1958  * CaseDescription: Test the captureSession check the white balance mode supported by the device and
1959  * make the necessary settings. Also check the range of values that the device supports for manual
1960  * settings and make the necessary adjustments. Ensure that the camera function is normal
1961  * after the settings are completed.
1962  */
1963  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_042, TestSize.Level0)
1964 {
1965     sptr<PhotoOutput> photoOutput;
1966     sptr<VideoOutput> videoOutput;
1967     CreateAndConfigureDefaultCaptureOutput(photoOutput, videoOutput);
1968 
1969     std::vector<WhiteBalanceMode> modes;
1970     EXPECT_EQ(captureSession_->GetSupportedWhiteBalanceModes(modes), SUCCESS);
1971     if (!modes.empty()) {
1972         for (auto mode : modes) {
1973             bool isSupported = true;
1974             EXPECT_EQ(captureSession_->IsWhiteBalanceModeSupported(mode, isSupported), SUCCESS);
1975         }
1976 
1977         captureSession_->LockForControl();
1978         EXPECT_EQ(captureSession_->SetWhiteBalanceMode(WhiteBalanceMode::AWB_MODE_AUTO), SUCCESS);
1979         captureSession_->UnlockForControl();
1980 
1981         WhiteBalanceMode mode = WhiteBalanceMode::AWB_MODE_OFF;
1982         EXPECT_EQ(captureSession_->GetWhiteBalanceMode(mode), SUCCESS);
1983         EXPECT_EQ(mode, WhiteBalanceMode::AWB_MODE_AUTO);
1984     }
1985 
1986     bool isSupported = false;
1987     EXPECT_EQ(captureSession_->IsManualWhiteBalanceSupported(isSupported), SUCCESS);
1988     if (isSupported) {
1989         std::vector<int32_t> whiteBalanceRange;
1990         EXPECT_EQ(captureSession_->GetManualWhiteBalanceRange(whiteBalanceRange), SUCCESS);
1991         if (!whiteBalanceRange.empty()) {
1992             captureSession_->LockForControl();
1993             EXPECT_EQ(captureSession_->SetManualWhiteBalance(whiteBalanceRange[0]), SUCCESS);
1994             captureSession_->UnlockForControl();
1995 
1996             int32_t wbValue = 0;
1997             EXPECT_EQ(captureSession_->GetManualWhiteBalance(wbValue), SUCCESS);
1998             EXPECT_EQ(wbValue, whiteBalanceRange[0]);
1999         }
2000     }
2001 
2002     StartDefaultCaptureOutput(photoOutput, videoOutput);
2003 }
2004 
2005 /*
2006  * Feature: Camera base function
2007  * Function: Test the capture session with lcd flash.
2008  * SubFunction: NA
2009  * FunctionPoints: NA
2010  * EnvConditions: NA
2011  * CaseDescription: Test the captureSession check if the device supports flash. Register the flash
2012  * status callback and turn it on before turning it off if supported. Ensure that the photography
2013  * function is normal after the settings are completed.
2014  */
2015  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_043, TestSize.Level0)
2016 {
2017     sptr<PhotoOutput> photoOutput;
2018     sptr<VideoOutput> videoOutput;
2019     CreateAndConfigureDefaultCaptureOutput(photoOutput, videoOutput);
2020 
2021     if (captureSession_->IsLcdFlashSupported()) {
2022         auto callback = std::make_shared<TestLcdFlashStatusCallback>();
2023         EXPECT_NE(callback, nullptr);
2024         captureSession_->SetLcdFlashStatusCallback(callback);
2025         EXPECT_NE(captureSession_->GetLcdFlashStatusCallback(), nullptr);
2026 
2027         captureSession_->LockForControl();
2028         EXPECT_EQ(captureSession_->EnableLcdFlash(true), SUCCESS);
2029         EXPECT_EQ(captureSession_->EnableLcdFlashDetection(true), SUCCESS);
2030 
2031         EXPECT_EQ(captureSession_->EnableLcdFlash(false), SUCCESS);
2032         EXPECT_EQ(captureSession_->EnableLcdFlashDetection(false), SUCCESS);
2033         captureSession_->UnlockForControl();
2034     }
2035 
2036     StartDefaultCaptureOutput(photoOutput, videoOutput);
2037 }
2038 
2039 /*
2040  * Feature: Camera base function
2041  * Function: Test the capture session with tripod.
2042  * SubFunction: NA
2043  * FunctionPoints: NA
2044  * EnvConditions: NA
2045  * CaseDescription: Test the captureSession check if the device supports tripods. Enable tripod
2046  * detection and stabilization if supported. Ensure that the camera function is normal after
2047  * the settings are completed.
2048  */
2049  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_044, TestSize.Level0)
2050 {
2051     sptr<PhotoOutput> photoOutput;
2052     sptr<VideoOutput> videoOutput;
2053     CreateAndConfigureDefaultCaptureOutput(photoOutput, videoOutput);
2054 
2055     if (captureSession_->IsTripodDetectionSupported()) {
2056         captureSession_->LockForControl();
2057         EXPECT_EQ(captureSession_->EnableTripodStabilization(true), SUCCESS);
2058         EXPECT_EQ(captureSession_->EnableTripodDetection(true), SUCCESS);
2059         captureSession_->UnlockForControl();
2060     }
2061 
2062     StartDefaultCaptureOutput(photoOutput, videoOutput);
2063 }
2064 
2065 /*
2066  * Feature: Camera base function
2067  * Function: Test the capture session with switch device.
2068  * SubFunction: NA
2069  * FunctionPoints: NA
2070  * EnvConditions: NA
2071  * CaseDescription: Test captureSession check if the device supports automatic device switching. If
2072  * supported, enable automatic switching and register the switching status callback and set the device
2073  * status. After setting, the camera function is normal.
2074  */
2075  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_045, TestSize.Level0)
2076 {
2077     sptr<PhotoOutput> photoOutput;
2078     sptr<VideoOutput> videoOutput;
2079     CreateAndConfigureDefaultCaptureOutput(photoOutput, videoOutput);
2080 
2081     if (captureSession_->IsAutoDeviceSwitchSupported()) {
2082         auto callback = std::make_shared<TestAutoDeviceSwitchCallback>();
2083         EXPECT_NE(callback, nullptr);
2084         captureSession_->SetAutoDeviceSwitchCallback(callback);
2085         EXPECT_NE(captureSession_->GetAutoDeviceSwitchCallback(), nullptr);
2086 
2087         captureSession_->SetIsAutoSwitchDeviceStatus(true);
2088         if (captureSession_->GetIsAutoSwitchDeviceStatus()) {
2089             EXPECT_EQ(captureSession_->EnableAutoDeviceSwitch(true), SUCCESS);
2090             EXPECT_EQ(captureSession_->SwitchDevice(), true);
2091         }
2092     }
2093 
2094     StartDefaultCaptureOutput(photoOutput, videoOutput);
2095 }
2096 
2097 /* *****captureOutput***** */
2098 /*
2099  * Feature: Camera base function
2100  * Function: Test the preview output with PreviewStateCallback.
2101  * SubFunction: NA
2102  * FunctionPoints: NA
2103  * EnvConditions: NA
2104  * CaseDescription: Test the registration of PreviewOutput with PreviewStatecallback. The callback
2105  * function is set and queried normally. OnFrameStarted is called at the beginning of the preview frame,
2106  * and OnFrameEnded is called at the end of the preview frame.
2107  */
2108  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_046, TestSize.Level0)
2109 {
2110     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
2111     ASSERT_NE(previewOutput, nullptr);
2112     std::shared_ptr<TestPreviewOutputCallback> callback = std::make_shared<TestPreviewOutputCallback>("");
2113     EXPECT_NE(callback, nullptr);
2114     previewOutput->SetCallback(callback);
2115     EXPECT_GT(previewOutput->GetPreviewOutputListenerManager()->GetListenerCount(), 0);
2116 
2117     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
2118     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
2119     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
2120     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
2121 
2122     EXPECT_EQ(captureSession_->Start(), SUCCESS);
2123     WAIT(DURATION_AFTER_SESSION_START);
2124     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
2125 }
2126 
2127 /*
2128  * Feature: Camera base function
2129  * Function: Test the preview output with rotation.
2130  * SubFunction: NA
2131  * FunctionPoints: NA
2132  * EnvConditions: NA
2133  * CaseDescription: Test previewOutput to set the preview rotation angle, and after setting it, the
2134  * camera will preview normally.
2135  */
2136  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_047, TestSize.Level0)
2137 {
2138     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
2139     ASSERT_NE(previewOutput, nullptr);
2140 
2141     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
2142     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
2143     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
2144     EXPECT_EQ(previewOutput->SetPreviewRotation(CaptureOutput::ImageRotation::ROTATION_90, false), SUCCESS);
2145     int32_t imageRotation = previewOutput->GetPreviewRotation(CaptureOutput::ImageRotation::ROTATION_0);
2146     MEDIA_INFO_LOG("moduletest get preview rotation: %{public}d", imageRotation);
2147     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
2148 
2149     EXPECT_EQ(captureSession_->Start(), SUCCESS);
2150     WAIT(DURATION_AFTER_SESSION_START);
2151     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
2152 }
2153 
2154 /*
2155  * Feature: Camera base function
2156  * Function: Test the preview output with sketch.
2157  * SubFunction: NA
2158  * FunctionPoints: NA
2159  * EnvConditions: NA
2160  * CaseDescription: Test whether previewOutput supports sketches. If supported, register sketch status
2161  * data callback and enable sketch function, query zoom ratio threshold. After setting, preview function is normal.
2162  */
2163  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_048, TestSize.Level0)
2164 {
2165     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
2166     ASSERT_NE(previewOutput, nullptr);
2167 
2168     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
2169     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
2170     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
2171     if (previewOutput->IsSketchSupported()) {
2172         EXPECT_GT(previewOutput->GetSketchRatio(), 0);
2173         EXPECT_EQ(previewOutput->EnableSketch(true), SUCCESS);
2174     }
2175     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
2176 
2177     EXPECT_EQ(captureSession_->Start(), SUCCESS);
2178     WAIT(DURATION_AFTER_SESSION_START);
2179     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
2180 }
2181 
2182 /*
2183  * Feature: Camera base function
2184  * Function: Test the photo output with PhotoOutputCallback.
2185  * SubFunction: NA
2186  * FunctionPoints: NA
2187  * EnvConditions: NA
2188  * CaseDescription: Test the registration of PhotoStatecallback with photoOutput. The callback function
2189  * is set and queried normally, and the callback function responds normally before and after taking photos
2190  * and pressing the shutter button.
2191  */
2192  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_049, TestSize.Level0)
2193 {
2194     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
2195     ASSERT_NE(previewOutput, nullptr);
2196     sptr<PhotoOutput> photoOutput = CreatePhotoOutput(photoProfiles_[0]);
2197     ASSERT_NE(photoOutput, nullptr);
2198 
2199     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
2200     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
2201     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
2202     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)photoOutput), SUCCESS);
2203     std::shared_ptr<TestPhotoOutputCallback> callback = std::make_shared<TestPhotoOutputCallback>("");
2204     EXPECT_NE(callback, nullptr);
2205     photoOutput->SetCallback(callback);
2206     EXPECT_NE(photoOutput->GetApplicationCallback(), nullptr);
2207     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
2208 
2209     EXPECT_EQ(captureSession_->Start(), SUCCESS);
2210     WAIT(DURATION_AFTER_SESSION_START);
2211     EXPECT_EQ(photoOutput->Capture(), SUCCESS);
2212     WAIT(DURATION_AFTER_CAPTURE);
2213     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
2214 }
2215 
2216 /*
2217  * Feature: Camera base function
2218  * Function: Test the photo output with location.
2219  * SubFunction: NA
2220  * FunctionPoints: NA
2221  * EnvConditions: NA
2222  * CaseDescription: Test setting the location information when capturing the camera stream, and the
2223  * camera function will be normal after the setting is completed.
2224  */
2225  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_050, TestSize.Level0)
2226 {
2227     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
2228     ASSERT_NE(previewOutput, nullptr);
2229     sptr<PhotoOutput> photoOutput = CreatePhotoOutput(photoProfiles_[0]);
2230     ASSERT_NE(photoOutput, nullptr);
2231 
2232     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
2233     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
2234     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
2235     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)photoOutput), SUCCESS);
2236     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
2237 
2238     EXPECT_EQ(captureSession_->Start(), SUCCESS);
2239     WAIT(DURATION_AFTER_SESSION_START);
2240     std::shared_ptr<PhotoCaptureSetting> photoSetting = std::make_shared<PhotoCaptureSetting>();
2241     std::shared_ptr<Location> location = std::make_shared<Location>();
2242     location->latitude = -1;
2243     location->longitude = -1;
2244     location->altitude = -1;
2245     photoSetting->SetLocation(location);
2246 
2247     location->latitude = 0;
2248     location->longitude = 0;
2249     location->altitude = 0;
2250     photoSetting->SetLocation(location);
2251 
2252     location->latitude = 1;
2253     location->longitude = 1;
2254     location->altitude = 1;
2255     photoSetting->SetLocation(location);
2256     photoSetting->SetGpsLocation(location->latitude, location->longitude);
2257     EXPECT_EQ(photoOutput->Capture(photoSetting), SUCCESS);
2258     WAIT(DURATION_AFTER_CAPTURE);
2259 
2260     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
2261 }
2262 
2263 /*
2264  * Feature: Camera base function
2265  * Function: Test the photo output with rotation.
2266  * SubFunction: NA
2267  * FunctionPoints: NA
2268  * EnvConditions: NA
2269  * CaseDescription: Test setting the rotation information when capturing the camera stream, and the
2270  * camera function will be normal after the setting is completed.
2271  */
2272  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_051, TestSize.Level0)
2273 {
2274     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
2275     ASSERT_NE(previewOutput, nullptr);
2276     sptr<PhotoOutput> photoOutput = CreatePhotoOutput(photoProfiles_[0]);
2277     ASSERT_NE(photoOutput, nullptr);
2278 
2279     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
2280     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
2281     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
2282     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)photoOutput), SUCCESS);
2283     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
2284 
2285     EXPECT_EQ(captureSession_->Start(), SUCCESS);
2286     WAIT(DURATION_AFTER_SESSION_START);
2287     std::shared_ptr<PhotoCaptureSetting> photoSetting = std::make_shared<PhotoCaptureSetting>();
2288     photoSetting->SetRotation(PhotoCaptureSetting::RotationConfig::Rotation_90);
2289     EXPECT_EQ(photoOutput->Capture(photoSetting), SUCCESS);
2290     WAIT(DURATION_AFTER_CAPTURE);
2291     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
2292 }
2293 
2294 /*
2295  * Feature: Camera base function
2296  * Function: Test the photo output with mirror.
2297  * SubFunction: NA
2298  * FunctionPoints: NA
2299  * EnvConditions: NA
2300  * CaseDescription: Test setting the mirror information when capturing the camera stream, and the
2301  * camera function will be normal after the setting is completed.
2302  */
2303  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_052, TestSize.Level0)
2304 {
2305     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
2306     ASSERT_NE(previewOutput, nullptr);
2307     sptr<PhotoOutput> photoOutput = CreatePhotoOutput(photoProfiles_[0]);
2308     ASSERT_NE(photoOutput, nullptr);
2309 
2310     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
2311     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
2312     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
2313     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)photoOutput), SUCCESS);
2314     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
2315 
2316     EXPECT_EQ(captureSession_->Start(), SUCCESS);
2317     WAIT(DURATION_AFTER_SESSION_START);
2318     std::shared_ptr<PhotoCaptureSetting> photoSetting = std::make_shared<PhotoCaptureSetting>();
2319     if (photoOutput->IsMirrorSupported()) {
2320         EXPECT_EQ(photoOutput->EnableMirror(true), SUCCESS);
2321         if (!photoSetting->GetMirror()) {
2322             photoSetting->SetMirror(true);
2323         }
2324     }
2325     EXPECT_EQ(photoOutput->Capture(photoSetting), SUCCESS);
2326     WAIT(DURATION_AFTER_CAPTURE);
2327     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
2328 }
2329 
2330 /*
2331  * Feature: Camera base function
2332  * Function: Test the photo output with quality.
2333  * SubFunction: NA
2334  * FunctionPoints: NA
2335  * EnvConditions: NA
2336  * CaseDescription: Test setting the quality information when capturing the camera stream, and the
2337  * camera function will be normal after the setting is completed.
2338  */
2339  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_053, TestSize.Level0)
2340 {
2341     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
2342     ASSERT_NE(previewOutput, nullptr);
2343     sptr<PhotoOutput> photoOutput = CreatePhotoOutput(photoProfiles_[0]);
2344     ASSERT_NE(photoOutput, nullptr);
2345 
2346     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
2347     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
2348     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
2349     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)photoOutput), SUCCESS);
2350     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
2351 
2352     EXPECT_EQ(captureSession_->Start(), SUCCESS);
2353     WAIT(DURATION_AFTER_SESSION_START);
2354     std::shared_ptr<PhotoCaptureSetting> photoSetting = std::make_shared<PhotoCaptureSetting>();
2355     photoSetting->SetQuality(PhotoCaptureSetting::QualityLevel::QUALITY_LEVEL_HIGH);
2356     EXPECT_EQ(photoOutput->Capture(photoSetting), SUCCESS);
2357     WAIT(DURATION_AFTER_CAPTURE);
2358     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
2359 }
2360 
2361 /*
2362  * Feature: Camera base function
2363  * Function: Test the photo output with burst capture state.
2364  * SubFunction: NA
2365  * FunctionPoints: NA
2366  * EnvConditions: NA
2367  * CaseDescription: Test setting the burst capture state when capturing the camera stream, and the
2368  * camera function will be normal after the setting is completed.
2369  */
2370  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_054, TestSize.Level0)
2371 {
2372     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
2373     ASSERT_NE(previewOutput, nullptr);
2374     sptr<PhotoOutput> photoOutput = CreatePhotoOutput(photoProfiles_[0]);
2375     ASSERT_NE(photoOutput, nullptr);
2376 
2377     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
2378     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
2379     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
2380     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)photoOutput), SUCCESS);
2381     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
2382 
2383     EXPECT_EQ(captureSession_->Start(), SUCCESS);
2384     WAIT(DURATION_AFTER_SESSION_START);
2385     std::shared_ptr<PhotoCaptureSetting> photoSetting = std::make_shared<PhotoCaptureSetting>();
2386     uint8_t burstState = 1;
2387     photoSetting->SetBurstCaptureState(burstState);
2388     EXPECT_EQ(photoOutput->Capture(photoSetting), SUCCESS);
2389     WAIT(DURATION_AFTER_CAPTURE);
2390     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
2391 }
2392 
2393 /*
2394  * Feature: Camera base function
2395  * Function: Test the photo output with thumbnail.
2396  * SubFunction: NA
2397  * FunctionPoints: NA
2398  * EnvConditions: NA
2399  * CaseDescription: Test whether photoOutput supports fast thumbnails. If supported, register a
2400  * thumbnail callback and enable the thumbnail function. After setting it up, the photo function
2401  * will work normally.
2402  */
2403  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_055, TestSize.Level0)
2404 {
2405     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
2406     ASSERT_NE(previewOutput, nullptr);
2407     sptr<PhotoOutput> photoOutput = CreatePhotoOutput(photoProfiles_[0]);
2408     ASSERT_NE(photoOutput, nullptr);
2409 
2410     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
2411     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
2412     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
2413     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)photoOutput), SUCCESS);
2414     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
2415 
2416     EXPECT_EQ(captureSession_->Start(), SUCCESS);
2417     WAIT(DURATION_AFTER_SESSION_START);
2418     std::shared_ptr<PhotoCaptureSetting> photoSetting = std::make_shared<PhotoCaptureSetting>();
2419     if (photoOutput->IsQuickThumbnailSupported()) {
2420         sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
2421         sptr<SurfaceListener> surfaceListener = new SurfaceListener("Preview", SurfaceType::PREVIEW,
2422             previewFd_, previewSurface);
2423         sptr<IBufferConsumerListener> listener = (sptr<IBufferConsumerListener>&)surfaceListener;
2424         ASSERT_NE(listener, nullptr);
2425         photoOutput->SetThumbnailListener(listener);
2426 
2427         EXPECT_EQ(photoOutput->SetThumbnail(true), SUCCESS);
2428     }
2429     EXPECT_EQ(photoOutput->Capture(photoSetting), SUCCESS);
2430     WAIT(DURATION_AFTER_CAPTURE);
2431     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
2432 }
2433 
2434 /*
2435  * Feature: Camera base function
2436  * Function: Test the photo output with raw delivery.
2437  * SubFunction: NA
2438  * FunctionPoints: NA
2439  * EnvConditions: NA
2440  * CaseDescription: Test whether photoOutput supports original raw delivery. If supported, enable raw
2441  * delivery function. After setting it up, the photo function will work normally.
2442  */
2443  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_056, TestSize.Level0)
2444 {
2445     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
2446     ASSERT_NE(previewOutput, nullptr);
2447     sptr<PhotoOutput> photoOutput = CreatePhotoOutput(photoProfiles_[0]);
2448     ASSERT_NE(photoOutput, nullptr);
2449 
2450     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
2451     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
2452     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
2453     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)photoOutput), SUCCESS);
2454     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
2455 
2456     EXPECT_EQ(captureSession_->Start(), SUCCESS);
2457     WAIT(DURATION_AFTER_SESSION_START);
2458     bool isRawDeliverySuppoted = false;
2459     EXPECT_EQ(photoOutput->IsRawDeliverySupported(isRawDeliverySuppoted), SUCCESS);
2460     if (isRawDeliverySuppoted) {
2461         EXPECT_EQ(photoOutput->EnableRawDelivery(true), SUCCESS);
2462     }
2463     EXPECT_EQ(photoOutput->Capture(), SUCCESS);
2464     WAIT(DURATION_AFTER_CAPTURE);
2465     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
2466 }
2467 
2468 /*
2469  * Feature: Camera base function
2470  * Function: Test the photo output with auto cloud image enhancement.
2471  * SubFunction: NA
2472  * FunctionPoints: NA
2473  * EnvConditions: NA
2474  * CaseDescription: Test whether photoOutput supports automatic cloud image enhancement. If supported,
2475  * enable the automatic cloud image enhancement function. After setting it up, the camera function will
2476  * work normally.
2477  */
2478  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_057, TestSize.Level0)
2479 {
2480     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
2481     ASSERT_NE(previewOutput, nullptr);
2482     sptr<PhotoOutput> photoOutput = CreatePhotoOutput(photoProfiles_[0]);
2483     ASSERT_NE(photoOutput, nullptr);
2484 
2485     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
2486     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
2487     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
2488     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)photoOutput), SUCCESS);
2489     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
2490 
2491     EXPECT_EQ(captureSession_->Start(), SUCCESS);
2492     WAIT(DURATION_AFTER_SESSION_START);
2493     bool isAutoCloudImageEnhanceSupported = false;
2494     EXPECT_EQ(photoOutput->IsAutoCloudImageEnhancementSupported(isAutoCloudImageEnhanceSupported), SUCCESS);
2495     if (isAutoCloudImageEnhanceSupported) {
2496         EXPECT_EQ(photoOutput->EnableAutoCloudImageEnhancement(true), SUCCESS);
2497     }
2498     EXPECT_EQ(photoOutput->Capture(), SUCCESS);
2499     WAIT(DURATION_AFTER_CAPTURE);
2500     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
2501 }
2502 
2503 /*
2504  * Feature: Camera base function
2505  * Function: Test the photo output with depth data delivery.
2506  * SubFunction: NA
2507  * FunctionPoints: NA
2508  * EnvConditions: NA
2509  * CaseDescription: Test whether photoOutput supports depth data delivery. If supported, enable the
2510  * depth data delivery function. After setting it up, the camera function will work normally.
2511  */
2512  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_058, TestSize.Level0)
2513 {
2514     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
2515     ASSERT_NE(previewOutput, nullptr);
2516     sptr<PhotoOutput> photoOutput = CreatePhotoOutput(photoProfiles_[0]);
2517     ASSERT_NE(photoOutput, nullptr);
2518 
2519     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
2520     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
2521     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
2522     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)photoOutput), SUCCESS);
2523     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
2524 
2525     EXPECT_EQ(captureSession_->Start(), SUCCESS);
2526     WAIT(DURATION_AFTER_SESSION_START);
2527     if (photoOutput->IsDepthDataDeliverySupported()) {
2528         EXPECT_EQ(photoOutput->EnableDepthDataDelivery(true), SUCCESS);
2529     }
2530     EXPECT_EQ(photoOutput->Capture(), SUCCESS);
2531     WAIT(DURATION_AFTER_CAPTURE);
2532     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
2533 }
2534 
2535 /*
2536  * Feature: Camera base function
2537  * Function: Test the video output with videoStateCallback.
2538  * SubFunction: NA
2539  * FunctionPoints: NA
2540  * EnvConditions: NA
2541  * CaseDescription: Test videoOutput to register videoStatecallback. The callback function is set and
2542  * queried normally. OnFrameStarted is called at the beginning of the video frame, and OnFrameEnded
2543  * is called at the end of the video frame.
2544  */
2545  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_059, TestSize.Level0)
2546 {
2547     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
2548     ASSERT_NE(previewOutput, nullptr);
2549     sptr<VideoOutput> videoOutput = CreateVideoOutput(videoProfiles_[0]);
2550     ASSERT_NE(videoOutput, nullptr);
2551 
2552     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
2553     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
2554     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
2555     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)videoOutput), SUCCESS);
2556     std::shared_ptr<TestVideoOutputCallback>callback = std::make_shared<TestVideoOutputCallback>("");
2557     EXPECT_NE(callback, nullptr);
2558     videoOutput->SetCallback(callback);
2559     EXPECT_NE(videoOutput->GetApplicationCallback(), nullptr);
2560     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
2561 
2562     EXPECT_EQ(captureSession_->Start(), SUCCESS);
2563     WAIT(DURATION_AFTER_SESSION_START);
2564     EXPECT_EQ(videoOutput->Start(), SUCCESS);
2565     WAIT(DURATION_DURING_RECORDING);
2566     EXPECT_EQ(videoOutput->Stop(), SUCCESS);
2567     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
2568 }
2569 
2570 /*
2571  * Feature: Camera base function
2572  * Function: Test the video output with mirror function.
2573  * SubFunction: NA
2574  * FunctionPoints: NA
2575  * EnvConditions: NA
2576  * CaseDescription: Test whether videoOutput supports mirror function. If supported, enable the
2577  * mirror function. After setting it up, the camera function will work normally.
2578  */
2579  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_060, TestSize.Level0)
2580 {
2581     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
2582     ASSERT_NE(previewOutput, nullptr);
2583     sptr<VideoOutput> videoOutput = CreateVideoOutput(videoProfiles_[0]);
2584     ASSERT_NE(videoOutput, nullptr);
2585 
2586     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
2587     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
2588     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
2589     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)videoOutput), SUCCESS);
2590     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
2591 
2592     EXPECT_EQ(captureSession_->Start(), SUCCESS);
2593     WAIT(DURATION_AFTER_SESSION_START);
2594     if (videoOutput->IsMirrorSupported()) {
2595         EXPECT_EQ(videoOutput->enableMirror(true), SUCCESS);
2596     }
2597     EXPECT_EQ(videoOutput->Start(), SUCCESS);
2598     WAIT(DURATION_DURING_RECORDING);
2599     EXPECT_EQ(videoOutput->Stop(), SUCCESS);
2600     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
2601 }
2602 
2603 /*
2604  * Feature: Camera base function
2605  * Function: Test the video output with rotation.
2606  * SubFunction: NA
2607  * FunctionPoints: NA
2608  * EnvConditions: NA
2609  * CaseDescription: Test whether videoOutput supports rotation function. If supported, set the rotation.
2610  * After setting it up, the camera function will work normally.
2611  */
2612  HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_061, TestSize.Level0)
2613 {
2614     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
2615     ASSERT_NE(previewOutput, nullptr);
2616     sptr<VideoOutput> videoOutput = CreateVideoOutput(videoProfiles_[0]);
2617     ASSERT_NE(videoOutput, nullptr);
2618 
2619     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
2620     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
2621     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
2622     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)videoOutput), SUCCESS);
2623     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
2624 
2625     EXPECT_EQ(captureSession_->Start(), SUCCESS);
2626     WAIT(DURATION_AFTER_SESSION_START);
2627     bool isSupported = false;
2628     EXPECT_EQ(videoOutput->IsRotationSupported(isSupported), SUCCESS);
2629     if (isSupported) {
2630         std::vector<int32_t> supportedRotations;
2631         EXPECT_EQ(videoOutput->GetSupportedRotations(supportedRotations), SUCCESS);
2632         if (!supportedRotations.empty()) {
2633             EXPECT_EQ(videoOutput->SetRotation(supportedRotations[0]), SUCCESS);
2634         }
2635     }
2636     EXPECT_EQ(videoOutput->Start(), SUCCESS);
2637     WAIT(DURATION_DURING_RECORDING);
2638     EXPECT_EQ(videoOutput->Stop(), SUCCESS);
2639     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
2640 }
2641 
2642 
2643 /*
2644  * Feature: Camera base function
2645  * Function: Test get distributed camera hostname
2646  * SubFunction: NA
2647  * FunctionPoints: NA
2648  * EnvConditions: NA
2649  * CaseDescription: Test get distributed camera hostname
2650  */
2651 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_062, TestSize.Level0)
2652 {
2653     std::string hostName;
2654     for (size_t i = 0; i < cameraDevices_.size(); i++) {
2655         hostName = cameraDevices_[i]->GetHostName();
2656         std::string cameraId = cameraDevices_[i]->GetID();
2657         std::string networkId = cameraDevices_[i]->GetNetWorkId();
2658         if (networkId != "") {
2659             ASSERT_NE(hostName, "");
2660         } else {
2661             ASSERT_EQ(hostName, "");
2662         }
2663     }
2664 }
2665 
2666 /*
2667  * Feature: Camera base function
2668  * Function: Test get DeviceType
2669  * SubFunction: NA
2670  * FunctionPoints: NA
2671  * EnvConditions: NA
2672  * CaseDescription: Test get DeviceType
2673  */
2674 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_063, TestSize.Level0)
2675 {
2676     std::vector<sptr<CameraDevice>> cameras = cameraManager_->GetSupportedCameras();
__anon6e62dcfc0102() 2677     auto judgeDeviceType = [&cameras]() -> bool {
2678         bool isOk = false;
2679         for (size_t i = 0; i < cameras.size(); i++) {
2680             uint16_t deviceType = cameras[i]->GetDeviceType();
2681             switch (deviceType) {
2682                 case HostDeviceType::UNKNOWN:
2683                 case HostDeviceType::PHONE:
2684                 case HostDeviceType::TABLET:
2685                     isOk = true;
2686                     break;
2687                 default:
2688                     isOk = false;
2689                     break;
2690             }
2691             if (isOk == false) {
2692                 break;
2693             }
2694         }
2695         return isOk;
2696     };
2697     ASSERT_NE(judgeDeviceType(), false);
2698 }
2699 
2700 /*
2701  * Feature: Camera base function
2702  * Function: Test input error and result callback
2703  * SubFunction: NA
2704  * FunctionPoints: NA
2705  * EnvConditions: NA
2706  * CaseDescription: Test input error and result callback
2707  */
2708 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_064, TestSize.Level0)
2709 {
2710     auto errorCallback = std::make_shared<TestDeviceCallback>("");
2711     auto resultCallback = std::make_shared<TestOnResultCallback>("");
2712     cameraInput_->SetErrorCallback(errorCallback);
2713     cameraInput_->SetResultCallback(resultCallback);
2714 
2715     EXPECT_NE(cameraInput_->GetErrorCallback(), nullptr);
2716     EXPECT_NE(cameraInput_->GetResultCallback(), nullptr);
2717 }
2718 
2719 /*
2720  * Feature: Camera base function
2721  * Function: Test create camera input
2722  * SubFunction: NA
2723  * FunctionPoints: NA
2724  * EnvConditions: NA
2725  * CaseDescription: test create camera input and construct device object with anomalous branch.
2726  */
2727 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_065, TestSize.Level0)
2728 {
2729     sptr<CameraManager> camManagerObj = CameraManager::GetInstance();
2730     ASSERT_NE(camManagerObj, nullptr);
2731     camManagerObj->SetServiceProxy(nullptr);
2732 
2733     std::string cameraId = "";
2734     dmDeviceInfo deviceInfo = {};
2735     auto metaData = std::make_shared<OHOS::Camera::CameraMetadata>(0, 0);
2736     sptr<CameraDevice> camdeviceObj1 = new (std::nothrow) CameraDevice(cameraId, metaData, deviceInfo);
2737     ASSERT_NE(camdeviceObj1, nullptr);
2738     EXPECT_EQ(camManagerObj->CreateCameraInput(camdeviceObj1), nullptr);
2739 
2740     sptr<CameraDevice> camdeviceObj3 = nullptr;
2741     EXPECT_EQ(camManagerObj->CreateCameraInput(camdeviceObj3), nullptr);
2742 
2743     CameraPosition cameraPosition = cameraDevices_[0]->GetPosition();
2744     CameraType cameraType = cameraDevices_[0]->GetCameraType();
2745     EXPECT_EQ(camManagerObj->CreateCameraInput(CAMERA_POSITION_UNSPECIFIED, cameraType), nullptr);
2746     EXPECT_EQ(camManagerObj->CreateCameraInput(cameraPosition, CAMERA_TYPE_UNSUPPORTED), nullptr);
2747     EXPECT_EQ(camManagerObj->CreateCameraInput(CAMERA_POSITION_UNSPECIFIED, CAMERA_TYPE_UNSUPPORTED), nullptr);
2748 
2749     sptr<ICameraDeviceService> deviceService = cameraInput_->GetCameraDevice();
2750     ASSERT_NE(deviceService, nullptr);
2751 
2752     sptr<CameraInput> input = new (std::nothrow) CameraInput(deviceService, camdeviceObj3);
2753     ASSERT_NE(input, nullptr);
2754 
2755     camManagerObj->InitCameraManager();
2756 }
2757 
2758 /*
2759  * Feature: Camera base function
2760  * Function: Test anomalous branch
2761  * SubFunction: NA
2762  * FunctionPoints: NA
2763  * EnvConditions: NA
2764  * CaseDescription: Test camera settings with anomalous branch
2765  */
2766 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_066, TestSize.Level0)
2767 {
2768     sptr<ICameraDeviceService> device= cameraInput_->GetCameraDevice();
2769     ASSERT_NE(device, nullptr);
2770 
2771     sptr<CameraDevice> camdeviceObj = nullptr;
2772     sptr<CameraInput> camInput = new (std::nothrow) CameraInput(device, camdeviceObj);
2773     ASSERT_NE(camInput, nullptr);
2774 
2775     std::string cameraId = cameraInput_->GetCameraId();
2776 
2777     std::string getCameraSettings1 = cameraInput_->GetCameraSettings();
2778     EXPECT_EQ(cameraInput_->SetCameraSettings(getCameraSettings1), SUCCESS);
2779 
2780     std::string getCameraSettings2 = "";
2781     EXPECT_EQ(camInput->SetCameraSettings(getCameraSettings2), 2);
2782 
2783     EXPECT_EQ(cameraInput_->Close(), SUCCESS);
2784     cameraInput_->SetMetadataResultProcessor(captureSession_->GetMetadataResultProcessor());
2785 
2786     EXPECT_EQ(cameraInput_->Open(), SERVICE_FATL_ERROR);
2787 
2788     EXPECT_EQ(camInput->Release(), SUCCESS);
2789     camInput = nullptr;
2790     cameraInput_->Release();
2791     cameraInput_ = nullptr;
2792 }
2793 
2794 /*
2795  * Feature: Camera base function
2796  * Function: Test anomalous branch
2797  * SubFunction: NA
2798  * FunctionPoints: NA
2799  * EnvConditions: NA
2800  * CaseDescription: test submit device control setting with anomalous branch
2801  */
2802 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_067, TestSize.Level0)
2803 {
2804     EXPECT_EQ(captureSession_->Release(), SUCCESS);
2805     EXPECT_EQ(captureSession_->UnlockForControl(), SERVICE_FATL_ERROR);
2806     captureSession_ = nullptr;
2807 }
2808 
2809 /*
2810  * Feature: Camera base function
2811  * Function: Test anomalous branch
2812  * SubFunction: NA
2813  * FunctionPoints: NA
2814  * EnvConditions: NA
2815  * CaseDescription: test session with anomalous branch
2816  */
2817 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_068, TestSize.Level0)
2818 {
2819     cameraInput_->Close();
2820     cameraInput_->SetMetadataResultProcessor(captureSession_->GetMetadataResultProcessor());
2821 
2822     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
2823     EXPECT_EQ(captureSession_->BeginConfig(), SESSION_CONFIG_LOCKED);
2824     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SERVICE_FATL_ERROR);
2825 
2826     captureSession_->Release();
2827     EXPECT_EQ(captureSession_->BeginConfig(), SERVICE_FATL_ERROR);
2828 
2829     cameraInput_ = nullptr;
2830     captureSession_ = nullptr;
2831 }
2832 
2833 /*
2834  * Feature: Camera base function
2835  * Function: Test capture session with commit config multiple times
2836  * SubFunction: NA
2837  * FunctionPoints: NA
2838  * EnvConditions: NA
2839  * CaseDescription: Test capture session with commit config multiple times
2840  */
2841 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_069, TestSize.Level0)
2842 {
2843     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
2844     ASSERT_NE(previewOutput, nullptr);
2845 
2846     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
2847     EXPECT_EQ(cameraInput_->Open(), SUCCESS);
2848     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
2849     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
2850     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
2851     EXPECT_NE(captureSession_->CommitConfig(), SUCCESS);
2852 }
2853 
2854 /*
2855  * Feature: Camera base function
2856  * Function: Test capture session add input or output with invalid value
2857  * SubFunction: NA
2858  * FunctionPoints: NA
2859  * EnvConditions: NA
2860  * CaseDescription: Test capture session add input or output with invalid value
2861  */
2862 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_070, TestSize.Level0)
2863 {
2864     sptr<CaptureInput> input = nullptr;
2865     EXPECT_EQ(captureSession_->AddInput(input), OPERATION_NOT_ALLOWED);
2866     sptr<CaptureOutput> output = nullptr;
2867     EXPECT_EQ(captureSession_->AddOutput(output), OPERATION_NOT_ALLOWED);
2868 
2869     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
2870 
2871     EXPECT_NE(captureSession_->AddInput(input), SUCCESS);
2872     EXPECT_NE(captureSession_->AddOutput(output), SUCCESS);
2873 }
2874 
2875 /*
2876  * Feature: Camera base function
2877  * Function: Test capture session remove input or output with null
2878  * SubFunction: NA
2879  * FunctionPoints: NA
2880  * EnvConditions: NA
2881  * CaseDescription: Test capture session remove input or output with null
2882  */
2883 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_071, TestSize.Level0)
2884 {
2885     sptr<CaptureInput> input = nullptr;
2886     EXPECT_EQ(captureSession_->RemoveInput(input), OPERATION_NOT_ALLOWED);
2887     sptr<CaptureOutput> output = nullptr;
2888     EXPECT_EQ(captureSession_->RemoveOutput(output), OPERATION_NOT_ALLOWED);
2889 
2890     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
2891 
2892     EXPECT_EQ(captureSession_->RemoveInput(input), SERVICE_FATL_ERROR);
2893     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
2894     EXPECT_EQ(captureSession_->RemoveInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
2895 
2896     EXPECT_EQ(captureSession_->RemoveOutput(output), SERVICE_FATL_ERROR);
2897 }
2898 
2899 /*
2900  * Feature: Camera base function
2901  * Function: Test dynamic add and remove preview output
2902  * SubFunction: NA
2903  * FunctionPoints: NA
2904  * EnvConditions: NA
2905  * CaseDescription: Test dynamic add and remove preview output
2906  */
2907 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_072, TestSize.Level0)
2908 {
2909     sptr<PreviewOutput> previewOutput1 = CreatePreviewOutput(previewProfiles_[0]);
2910     ASSERT_NE(previewOutput1, nullptr);
2911     sptr<PreviewOutput> previewOutput2 = CreatePreviewOutput(previewProfiles_[0]);
2912     ASSERT_NE(previewOutput2, nullptr);
2913     sptr<PhotoOutput> photoOutput = CreatePhotoOutput(photoProfiles_[0]);
2914     ASSERT_NE(photoOutput, nullptr);
2915 
2916     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
2917     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
2918     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput1), SUCCESS);
2919     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)photoOutput), SUCCESS);
2920     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
2921     EXPECT_EQ(captureSession_->Start(), SUCCESS);
2922     WAIT(DURATION_AFTER_SESSION_START);
2923     EXPECT_EQ(photoOutput->Capture(), SUCCESS);
2924     WAIT(DURATION_AFTER_CAPTURE);
2925     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
2926 
2927     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
2928     EXPECT_EQ(captureSession_->RemoveOutput((sptr<CaptureOutput>&)previewOutput1), SUCCESS);
2929     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput2), SUCCESS);
2930     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
2931     EXPECT_EQ(captureSession_->Start(), SUCCESS);
2932     WAIT(DURATION_AFTER_SESSION_START);
2933     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
2934 }
2935 
2936 
2937 /*
2938  * Feature: Camera base function
2939  * Function: Test anomalous branch
2940  * SubFunction: NA
2941  * FunctionPoints: NA
2942  * EnvConditions: NA
2943  * CaseDescription: test create preview output with anomalous branch
2944  */
2945 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_073, TestSize.Level0)
2946 {
2947     sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
2948     sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
2949     sptr<Surface> pSurface = Surface::CreateSurfaceAsProducer(previewProducer);
2950 
2951     sptr<Surface> pSurface_1 = nullptr;
2952 
2953     sptr<CaptureOutput> previewOutput = cameraManager_->CreatePreviewOutput(previewProfiles_[0], pSurface_1);
2954     EXPECT_EQ(previewOutput, nullptr);
2955 
2956     sptr<CaptureOutput> previewOutput_1 = cameraManager_->CreateDeferredPreviewOutput(previewProfiles_[0]);
2957     ASSERT_NE(previewOutput_1, nullptr);
2958 
2959     // height is zero
2960     CameraFormat previewFormat = previewProfiles_[0].GetCameraFormat();
2961     Size previewSize;
2962     previewSize.width = previewProfiles_[0].GetSize().width;
2963     previewSize.height = 0;
2964     previewProfiles_[0] = Profile(previewFormat, previewSize);
2965 
2966     previewOutput = cameraManager_->CreatePreviewOutput(previewProfiles_[0], pSurface);
2967     EXPECT_EQ(previewOutput, nullptr);
2968 
2969     previewOutput_1 = cameraManager_->CreateDeferredPreviewOutput(previewProfiles_[0]);
2970     EXPECT_EQ(previewOutput_1, nullptr);
2971 
2972     sptr<CaptureOutput> previewOutput_2 = cameraManager_->CreatePreviewOutput(previewProducer, previewFormat);
2973     EXPECT_EQ(previewOutput_2, nullptr);
2974 
2975     sptr<CaptureOutput> previewOutput_3 = nullptr;
2976     previewOutput_3 = cameraManager_->CreateCustomPreviewOutput(pSurface, previewSize.width, previewSize.height);
2977     EXPECT_EQ(previewOutput_3, nullptr);
2978 
2979     // width is zero
2980     previewSize.width = 0;
2981     previewSize.height = PREVIEW_DEFAULT_HEIGHT;
2982     previewProfiles_[0] = Profile(previewFormat, previewSize);
2983 
2984     previewOutput = cameraManager_->CreatePreviewOutput(previewProfiles_[0], pSurface);
2985     EXPECT_EQ(previewOutput, nullptr);
2986 
2987     previewOutput_1 = cameraManager_->CreateDeferredPreviewOutput(previewProfiles_[0]);
2988     EXPECT_EQ(previewOutput_1, nullptr);
2989 
2990     // format is CAMERA_FORMAT_INVALID
2991     previewFormat = CAMERA_FORMAT_INVALID;
2992     previewSize.width = PREVIEW_DEFAULT_WIDTH;
2993     previewProfiles_[0] = Profile(previewFormat, previewSize);
2994 
2995     previewOutput = cameraManager_->CreatePreviewOutput(previewProfiles_[0], pSurface);
2996     EXPECT_EQ(previewOutput, nullptr);
2997 
2998     previewOutput_1 = cameraManager_->CreateDeferredPreviewOutput(previewProfiles_[0]);
2999     EXPECT_EQ(previewOutput_1, nullptr);
3000 }
3001 
3002 /*
3003  * Feature: Camera base function
3004  * Function: Test anomalous branch
3005  * SubFunction: NA
3006  * FunctionPoints: NA
3007  * EnvConditions: NA
3008  * CaseDescription: test create photo output with anomalous branch
3009  */
3010 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_074, TestSize.Level0)
3011 {
3012     sptr<IConsumerSurface> photosurface = IConsumerSurface::Create();
3013     sptr<IBufferProducer> surfaceProducer_1 = photosurface->GetProducer();
3014 
3015     sptr<IBufferProducer> surfaceProducer_2 = nullptr;
3016 
3017     sptr<CaptureOutput> photoOutput = cameraManager_->CreatePhotoOutput(photoProfiles_[0], surfaceProducer_2);
3018     EXPECT_EQ(photoOutput, nullptr);
3019 
3020     // height is zero
3021     CameraFormat photoFormat = photoProfiles_[0].GetCameraFormat();
3022     Size photoSize;
3023     photoSize.width = photoProfiles_[0].GetSize().width;
3024     photoSize.height = 0;
3025     photoProfiles_[0] = Profile(photoFormat, photoSize);
3026 
3027     photoOutput = cameraManager_->CreatePhotoOutput(photoProfiles_[0], surfaceProducer_1);
3028     EXPECT_EQ(photoOutput, nullptr);
3029 
3030     // width is zero
3031     photoSize.width = 0;
3032     photoSize.height = PHOTO_DEFAULT_HEIGHT;
3033     photoProfiles_[0] = Profile(photoFormat, photoSize);
3034 
3035     photoOutput = cameraManager_->CreatePhotoOutput(photoProfiles_[0], surfaceProducer_1);
3036     EXPECT_EQ(photoOutput, nullptr);
3037 
3038     // format is CAMERA_FORMAT_INVALID
3039     photoFormat = CAMERA_FORMAT_INVALID;
3040     photoSize.width = PHOTO_DEFAULT_WIDTH;
3041     photoProfiles_[0] = Profile(photoFormat, photoSize);
3042 
3043     photoOutput = cameraManager_->CreatePhotoOutput(photoProfiles_[0], surfaceProducer_1);
3044     EXPECT_EQ(photoOutput, nullptr);
3045 }
3046 
3047 /*
3048  * Feature: Camera base function
3049  * Function: Test anomalous branch
3050  * SubFunction: NA
3051  * FunctionPoints: NA
3052  * EnvConditions: NA
3053  * CaseDescription: test create video output with anomalous branch
3054  */
3055 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_075, TestSize.Level0)
3056 {
3057     sptr<IConsumerSurface> videoSurface = IConsumerSurface::Create();
3058     sptr<IBufferProducer> videoProducer = videoSurface->GetProducer();
3059     sptr<Surface> pSurface_1 = Surface::CreateSurfaceAsProducer(videoProducer);
3060 
3061     sptr<Surface> pSurface_2 = nullptr;
3062 
3063     sptr<CaptureOutput> videoOutput = cameraManager_->CreateVideoOutput(videoProfiles_[0], pSurface_2);
3064     EXPECT_EQ(videoOutput, nullptr);
3065 
3066     sptr<CaptureOutput> videoOutput_1 = cameraManager_->CreateVideoOutput(pSurface_2);
3067     EXPECT_EQ(videoOutput_1, nullptr);
3068 
3069     // height is zero
3070     std::vector<int32_t> framerates;
3071     CameraFormat videoFormat = videoProfiles_[0].GetCameraFormat();
3072     Size videoSize;
3073     videoSize.width = videoProfiles_[0].GetSize().width;
3074     videoSize.height = 0;
3075     VideoProfile videoProfile_1 = VideoProfile(videoFormat, videoSize, framerates);
3076 
3077     videoOutput = cameraManager_->CreateVideoOutput(videoProfile_1, pSurface_1);
3078     EXPECT_EQ(videoOutput, nullptr);
3079 
3080     // width is zero
3081     videoSize.width = 0;
3082     videoSize.height = VIDEO_DEFAULT_HEIGHT;
3083     videoProfile_1 = VideoProfile(videoFormat, videoSize, framerates);
3084 
3085     videoOutput = cameraManager_->CreateVideoOutput(videoProfile_1, pSurface_1);
3086     EXPECT_EQ(videoOutput, nullptr);
3087 
3088     // format is CAMERA_FORMAT_INVALID
3089     videoFormat = CAMERA_FORMAT_INVALID;
3090     videoSize.width = VIDEO_DEFAULT_WIDTH;
3091     videoProfile_1 = VideoProfile(videoFormat, videoSize, framerates);
3092 
3093     videoOutput = cameraManager_->CreateVideoOutput(videoProfile_1, pSurface_1);
3094     EXPECT_EQ(videoOutput, nullptr);
3095 }
3096 
3097 /*
3098  * Feature: Camera base function
3099  * Function: Test the capture session with Video Stabilization Mode.
3100  * SubFunction: NA
3101  * FunctionPoints: NA
3102  * EnvConditions: NA
3103  * CaseDescription: Test the capture session with Video Stabilization Mode.
3104  */
3105 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_076, TestSize.Level0)
3106 {
3107     VideoStabilizationMode stabilizationMode = OFF;
3108     EXPECT_EQ(captureSession_->GetActiveVideoStabilizationMode(), OFF);
3109     EXPECT_EQ(captureSession_->SetVideoStabilizationMode(stabilizationMode), SESSION_NOT_CONFIG);
3110     EXPECT_EQ(captureSession_->GetActiveVideoStabilizationMode(stabilizationMode), SESSION_NOT_CONFIG);
3111 
3112     bool isSupported = true;
3113     EXPECT_EQ(captureSession_->IsVideoStabilizationModeSupported(stabilizationMode, isSupported), SESSION_NOT_CONFIG);
3114     std::vector<VideoStabilizationMode> videoStabilizationModes;
3115     EXPECT_EQ(captureSession_->GetSupportedStabilizationMode().empty(), true);
3116     EXPECT_EQ(captureSession_->GetSupportedStabilizationMode(videoStabilizationModes), SESSION_NOT_CONFIG);
3117 
3118     sptr<PhotoOutput> photoOutput;
3119     sptr<VideoOutput> videoOutput;
3120     CreateAndConfigureDefaultCaptureOutput(photoOutput, videoOutput);
3121 
3122     videoStabilizationModes = captureSession_->GetSupportedStabilizationMode();
3123     if (videoStabilizationModes.empty()) {
3124         return;
3125     }
3126     stabilizationMode = videoStabilizationModes.back();
3127     if (captureSession_->IsVideoStabilizationModeSupported(stabilizationMode)) {
3128         captureSession_->SetVideoStabilizationMode(stabilizationMode);
3129         EXPECT_EQ(captureSession_->GetActiveVideoStabilizationMode(), stabilizationMode);
3130     }
3131 
3132     StartDefaultCaptureOutput(photoOutput, videoOutput);
3133     EXPECT_EQ(cameraInput_->Release(), SUCCESS);
3134     cameraInput_ = nullptr;
3135 
3136     EXPECT_EQ(captureSession_->GetActiveVideoStabilizationMode(), OFF);
3137     EXPECT_EQ(captureSession_->GetActiveVideoStabilizationMode(stabilizationMode), SUCCESS);
3138     EXPECT_EQ(captureSession_->GetSupportedStabilizationMode().empty(), true);
3139     EXPECT_EQ(captureSession_->GetSupportedStabilizationMode(videoStabilizationModes), SUCCESS);
3140 }
3141 
3142 /*
3143  * Feature: Camera base function
3144  * Function: Test anomalous branch
3145  * SubFunction: NA
3146  * FunctionPoints: NA
3147  * EnvConditions: NA
3148  * CaseDescription: Test abnormal branches with empty inputDevice
3149  */
3150 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_077, TestSize.Level0)
3151 {
3152     sptr<PhotoOutput> photoOutput;
3153     sptr<VideoOutput> videoOutput;
3154     CreateAndConfigureDefaultCaptureOutput(photoOutput, videoOutput);
3155 
3156     captureSession_->innerInputDevice_ = nullptr;
3157 
3158     VideoStabilizationMode mode = VideoStabilizationMode::MIDDLE;
3159     EXPECT_EQ(captureSession_->GetActiveVideoStabilizationMode(mode), SUCCESS);
3160     std::vector<VideoStabilizationMode> videoStabilizationMode = captureSession_->GetSupportedStabilizationMode();
3161     EXPECT_EQ(videoStabilizationMode.empty(), true);
3162     EXPECT_EQ(captureSession_->GetSupportedStabilizationMode(videoStabilizationMode), SUCCESS);
3163 
3164     std::vector<ExposureMode> getSupportedExpModes = captureSession_->GetSupportedExposureModes();
3165     EXPECT_EQ(getSupportedExpModes.empty(), true);
3166     EXPECT_EQ(captureSession_->GetSupportedExposureModes(getSupportedExpModes), SUCCESS);
3167     ExposureMode exposureMode = captureSession_->GetExposureMode();
3168     EXPECT_EQ(exposureMode, EXPOSURE_MODE_UNSUPPORTED);
3169     EXPECT_EQ(captureSession_->GetExposureMode(exposureMode), SUCCESS);
3170 
3171     Point exposurePointGet = captureSession_->GetMeteringPoint();
3172     EXPECT_EQ(exposurePointGet.x, 0);
3173     EXPECT_EQ(exposurePointGet.y, 0);
3174     EXPECT_EQ(captureSession_->GetMeteringPoint(exposurePointGet), SUCCESS);
3175 
3176     std::vector<float> getExposureBiasRange = captureSession_->GetExposureBiasRange();
3177     EXPECT_EQ(getExposureBiasRange.empty(), true);
3178     EXPECT_EQ(captureSession_->GetExposureBiasRange(getExposureBiasRange), SUCCESS);
3179 
3180     float exposureValue = captureSession_->GetExposureValue();
3181     EXPECT_EQ(exposureValue, 0);
3182     EXPECT_EQ(captureSession_->GetExposureValue(exposureValue), SUCCESS);
3183 
3184     captureSession_->LockForControl();
3185     EXPECT_EQ(captureSession_->SetExposureBias(exposureValue), OPERATION_NOT_ALLOWED);
3186     captureSession_->UnlockForControl();
3187     std::vector<FocusMode> getSupportedFocusModes = captureSession_->GetSupportedFocusModes();
3188     EXPECT_EQ(getSupportedFocusModes.empty(), true);
3189     EXPECT_EQ(captureSession_->GetSupportedFocusModes(getSupportedFocusModes), SUCCESS);
3190 }
3191 
3192 /*
3193  * Feature: Camera base function
3194  * Function: Test anomalous branch
3195  * SubFunction: NA
3196  * FunctionPoints: NA
3197  * EnvConditions: NA
3198  * CaseDescription: Test abnormal branches with empty innerInputDevice_
3199  */
3200 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_078, TestSize.Level0)
3201 {
3202     sptr<PhotoOutput> photoOutput;
3203     sptr<VideoOutput> videoOutput;
3204     CreateAndConfigureDefaultCaptureOutput(photoOutput, videoOutput);
3205 
3206     captureSession_->innerInputDevice_ = nullptr;
3207 
3208     FocusMode focusMode = captureSession_->GetFocusMode();
3209     EXPECT_EQ(focusMode, FOCUS_MODE_MANUAL);
3210     EXPECT_EQ(captureSession_->GetFocusMode(focusMode), SUCCESS);
3211 
3212     Point focusPoint = captureSession_->GetFocusPoint();
3213     EXPECT_EQ(focusPoint.x, 0);
3214     EXPECT_EQ(focusPoint.y, 0);
3215     EXPECT_EQ(captureSession_->GetFocusPoint(focusPoint), SUCCESS);
3216 
3217     float focalLength = captureSession_->GetFocalLength();
3218     EXPECT_EQ(focalLength, 0);
3219     EXPECT_EQ(captureSession_->GetFocalLength(focalLength), SUCCESS);
3220 
3221     std::vector<FlashMode> getSupportedFlashModes = captureSession_->GetSupportedFlashModes();
3222     EXPECT_EQ(getSupportedFlashModes.empty(), true);
3223 
3224     EXPECT_EQ(captureSession_->GetSupportedFlashModes(getSupportedFlashModes), SUCCESS);
3225     FlashMode flashMode = captureSession_->GetFlashMode();
3226     EXPECT_EQ(flashMode, FLASH_MODE_CLOSE);
3227     EXPECT_EQ(captureSession_->GetFlashMode(flashMode), SUCCESS);
3228 
3229     std::vector<float> zoomRatioRange = captureSession_->GetZoomRatioRange();
3230     EXPECT_EQ(zoomRatioRange.empty(), true);
3231     EXPECT_EQ(captureSession_->GetZoomRatioRange(zoomRatioRange), SUCCESS);
3232 
3233     float zoomRatio = captureSession_->GetZoomRatio();
3234     EXPECT_EQ(zoomRatio, 0);
3235     EXPECT_EQ(captureSession_->GetZoomRatio(zoomRatio), 0);
3236 
3237     captureSession_->LockForControl();
3238     EXPECT_EQ(captureSession_->SetZoomRatio(zoomRatio), SUCCESS);
3239     EXPECT_EQ(captureSession_->SetMeteringPoint(focusPoint), SUCCESS);
3240     captureSession_->UnlockForControl();
3241 }
3242 
3243 /*
3244  * Feature: Camera base function
3245  * Function: Test anomalous branch
3246  * SubFunction: NA
3247  * FunctionPoints: NA
3248  * EnvConditions: NA
3249  * CaseDescription: test stream_ null with anomalous branch
3250  */
3251 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_079, TestSize.Level0)
3252 {
3253     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
3254     ASSERT_NE(previewOutput, nullptr);
3255     sptr<PhotoOutput> photoOutput = CreatePhotoOutput(photoProfiles_[0]);
3256     ASSERT_NE(photoOutput, nullptr);
3257     sptr<VideoOutput> videoOutput = CreateVideoOutput(videoProfiles_[0]);
3258     ASSERT_NE(videoOutput, nullptr);
3259 
3260     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
3261     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
3262     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
3263     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)photoOutput), SUCCESS);
3264     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)videoOutput), SUCCESS);
3265     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
3266 
3267     previewOutput->Release();
3268     previewOutput->SetSession(captureSession_);
3269     photoOutput->Release();
3270     photoOutput->SetSession(captureSession_);
3271     videoOutput->Release();
3272     videoOutput->SetSession(captureSession_);
3273 
3274     auto callback = std::make_shared<TestPhotoOutputCallback>("");
3275     photoOutput->SetCallback(callback);
3276 
3277     EXPECT_EQ(previewOutput->Start(), SERVICE_FATL_ERROR);
3278     std::shared_ptr<PhotoCaptureSetting> photoSetting = std::make_shared<PhotoCaptureSetting>();
3279     EXPECT_EQ(photoOutput->Capture(photoSetting), SERVICE_FATL_ERROR);
3280     EXPECT_EQ(photoOutput->Capture(), SERVICE_FATL_ERROR);
3281     EXPECT_EQ(photoOutput->CancelCapture(), SERVICE_FATL_ERROR);
3282     EXPECT_EQ(videoOutput->Start(), SERVICE_FATL_ERROR);
3283 }
3284 
3285 /*
3286  * Feature: Camera base function
3287  * Function: Test anomalous branch
3288  * SubFunction: NA
3289  * FunctionPoints: NA
3290  * EnvConditions: NA
3291  * CaseDescription: test stream_ null with anomalous branch
3292  */
3293 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_080, TestSize.Level0)
3294 {
3295     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
3296     ASSERT_NE(previewOutput, nullptr);
3297     sptr<MetadataOutput> metadataOutput = cameraManager_->CreateMetadataOutput();
3298     ASSERT_NE(metadataOutput, nullptr);
3299 
3300     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
3301     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
3302     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
3303     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)metadataOutput), SUCCESS);
3304     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
3305 
3306     metadataOutput->Release();
3307     metadataOutput->SetSession(captureSession_);
3308 
3309     EXPECT_EQ(metadataOutput->Start(), SUCCESS);
3310 }
3311 
3312 /*
3313  * Feature: Camera base function
3314  * Function: Test anomalous branch
3315  * SubFunction: NA
3316  * FunctionPoints: NA
3317  * EnvConditions: NA
3318  * CaseDescription: test cameraObj null with anomalous branch
3319  */
3320 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_081, TestSize.Level0)
3321 {
3322     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
3323     ASSERT_NE(previewOutput, nullptr);
3324     sptr<PhotoOutput> photoOutput = CreatePhotoOutput(photoProfiles_[0]);
3325     ASSERT_NE(photoOutput, nullptr);
3326 
3327     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
3328     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
3329     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
3330     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)photoOutput), SUCCESS);
3331     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
3332 
3333     EXPECT_EQ(cameraInput_->Close(), SUCCESS);
3334     cameraInput_ = nullptr;
3335     photoOutput->SetSession(captureSession_);
3336 
3337     EXPECT_EQ(photoOutput->IsMirrorSupported(), false);
3338     EXPECT_EQ(photoOutput->IsQuickThumbnailSupported(), SESSION_NOT_RUNNING);
3339     EXPECT_EQ(photoOutput->SetThumbnail(false), SESSION_NOT_RUNNING);
3340 }
3341 
3342 /*
3343  * Feature: Camera base function
3344  * Function: Test anomalous branch.
3345  * SubFunction: NA
3346  * FunctionPoints: NA
3347  * EnvConditions: NA
3348  * CaseDescription: Test PreviewOutput/PhotoOutput/VideoOutput Getstream branch with CaptureOutput nullptr.
3349  */
3350 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_082, TestSize.Level0)
3351 {
3352     std::shared_ptr<PhotoCaptureSetting> photoSetting = std::make_shared<PhotoCaptureSetting>();
3353     auto previewOutputCallback = std::make_shared<TestPreviewOutputCallback>("");
3354     auto photoOutputCallback = std::make_shared<TestPhotoOutputCallback>("");
3355     auto videoOutputCallback = std::make_shared<TestVideoOutputCallback>("");
3356 
3357     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
3358     ASSERT_NE(previewOutput, nullptr);
3359     sptr<PhotoOutput> photoOutput = CreatePhotoOutput(photoProfiles_[0]);
3360     ASSERT_NE(photoOutput, nullptr);
3361     sptr<VideoOutput> videoOutput = CreateVideoOutput(videoProfiles_[0]);
3362     ASSERT_NE(videoOutput, nullptr);
3363 
3364     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
3365     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
3366     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
3367     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)photoOutput), SUCCESS);
3368     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)videoOutput), SUCCESS);
3369     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
3370 
3371     sptr<VideoOutput> videoOutput_1 = (sptr<VideoOutput>&)videoOutput;
3372     sptr<PhotoOutput> photoOutput_1 = (sptr<PhotoOutput>&)photoOutput;
3373     sptr<PreviewOutput> previewOutput_1 = (sptr<PreviewOutput>&)previewOutput;
3374 
3375     photoOutput->Release();
3376     photoOutput_1->SetSession(captureSession_);
3377     EXPECT_EQ(photoOutput_1->Capture(photoSetting), SERVICE_FATL_ERROR);
3378     EXPECT_EQ(photoOutput_1->Capture(), SERVICE_FATL_ERROR);
3379     EXPECT_EQ(photoOutput_1->CancelCapture(), SERVICE_FATL_ERROR);
3380     photoOutput_1->SetCallback(photoOutputCallback);
3381 
3382     previewOutput->Release();
3383     previewOutput_1->SetSession(captureSession_);
3384     EXPECT_EQ(previewOutput_1->Start(), SERVICE_FATL_ERROR);
3385     EXPECT_EQ(previewOutput_1->Stop(), SERVICE_FATL_ERROR);
3386     previewOutput_1->SetCallback(previewOutputCallback);
3387 
3388     videoOutput->Release();
3389     videoOutput_1->SetSession(captureSession_);
3390     EXPECT_EQ(videoOutput_1->Start(), SERVICE_FATL_ERROR);
3391     EXPECT_EQ(videoOutput_1->Stop(), SERVICE_FATL_ERROR);
3392     EXPECT_EQ(videoOutput_1->Resume(), SERVICE_FATL_ERROR);
3393     EXPECT_EQ(videoOutput_1->Pause(), SERVICE_FATL_ERROR);
3394     videoOutput_1->SetCallback(videoOutputCallback);
3395 }
3396 
3397 /*
3398  * Feature: Camera base function
3399  * Function: Test anomalous branch.
3400  * SubFunction: NA
3401  * FunctionPoints: NA
3402  * EnvConditions: NA
3403  * CaseDescription: Test IsSessionCommited branch with capturesession object null.
3404  */
3405 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_083, TestSize.Level0)
3406 {
3407     EXPECT_EQ(captureSession_->Start(), SESSION_NOT_CONFIG);
3408 
3409     VideoStabilizationMode mode;
3410     EXPECT_EQ(captureSession_->GetActiveVideoStabilizationMode(mode), SESSION_NOT_CONFIG);
3411     EXPECT_EQ(captureSession_->SetVideoStabilizationMode(OFF), SESSION_NOT_CONFIG);
3412 
3413     bool isSupported;
3414     EXPECT_EQ(captureSession_->IsVideoStabilizationModeSupported(OFF, isSupported), SESSION_NOT_CONFIG);
3415     EXPECT_EQ((captureSession_->GetSupportedStabilizationMode()).empty(), true);
3416 
3417     std::vector<VideoStabilizationMode> stabilizationModes = {};
3418     EXPECT_EQ(captureSession_->GetSupportedStabilizationMode(stabilizationModes), SESSION_NOT_CONFIG);
3419     EXPECT_EQ(captureSession_->IsExposureModeSupported(EXPOSURE_MODE_AUTO, isSupported), SESSION_NOT_CONFIG);
3420     EXPECT_EQ((captureSession_->GetSupportedExposureModes()).empty(), true);
3421 
3422     std::vector<ExposureMode> supportedExposureModes = {};
3423     EXPECT_EQ(captureSession_->GetSupportedExposureModes(supportedExposureModes), SESSION_NOT_CONFIG);
3424     EXPECT_EQ(captureSession_->SetExposureMode(EXPOSURE_MODE_AUTO), SESSION_NOT_CONFIG);
3425     EXPECT_EQ(captureSession_->GetExposureMode(), EXPOSURE_MODE_UNSUPPORTED);
3426 
3427     ExposureMode exposureMode;
3428     EXPECT_EQ(captureSession_->GetExposureMode(exposureMode), SESSION_NOT_CONFIG);
3429 
3430     Point exposurePointGet = captureSession_->GetMeteringPoint();
3431     EXPECT_EQ(captureSession_->SetMeteringPoint(exposurePointGet), SESSION_NOT_CONFIG);
3432 
3433     EXPECT_EQ((captureSession_->GetMeteringPoint()).x, 0);
3434     EXPECT_EQ((captureSession_->GetMeteringPoint()).y, 0);
3435 
3436     EXPECT_EQ(captureSession_->GetMeteringPoint(exposurePointGet), SESSION_NOT_CONFIG);
3437     EXPECT_EQ((captureSession_->GetExposureBiasRange()).empty(), true);
3438 
3439     std::vector<float> exposureBiasRange = {};
3440     EXPECT_EQ(captureSession_->GetExposureBiasRange(exposureBiasRange), SESSION_NOT_CONFIG);
3441     EXPECT_EQ(captureSession_->SetExposureBias(0), SESSION_NOT_CONFIG);
3442     captureSession_->Release();
3443     captureSession_ = nullptr;
3444 }
3445 
3446 /*
3447  * Feature: Camera base function
3448  * Function: Test anomalous branch.
3449  * SubFunction: NA
3450  * FunctionPoints: NA
3451  * EnvConditions: NA
3452  * CaseDescription: Test IsSessionCommited branch with capturesession object null.
3453  */
3454 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_084, TestSize.Level0)
3455 {
3456     float exposureValue;
3457     EXPECT_EQ(captureSession_->GetExposureValue(), 0);
3458     EXPECT_EQ(captureSession_->GetExposureValue(exposureValue), SESSION_NOT_CONFIG);
3459     EXPECT_EQ((captureSession_->GetSupportedFocusModes()).empty(), true);
3460 
3461     std::vector<FocusMode> supportedFocusModes;
3462     EXPECT_EQ(captureSession_->GetSupportedFocusModes(supportedFocusModes), SESSION_NOT_CONFIG);
3463 
3464     bool isSupported;
3465     EXPECT_EQ(captureSession_->IsFocusModeSupported(FOCUS_MODE_AUTO, isSupported), SESSION_NOT_CONFIG);
3466     EXPECT_EQ(captureSession_->SetFocusMode(FOCUS_MODE_AUTO), SESSION_NOT_CONFIG);
3467     EXPECT_EQ(captureSession_->GetFocusMode(), FOCUS_MODE_MANUAL);
3468 
3469     FocusMode focusMode;
3470     EXPECT_EQ(captureSession_->GetFocusMode(focusMode), SESSION_NOT_CONFIG);
3471 
3472     Point exposurePointGet = captureSession_->GetMeteringPoint();
3473     EXPECT_EQ(captureSession_->SetFocusPoint(exposurePointGet), SESSION_NOT_CONFIG);
3474 
3475     EXPECT_EQ((captureSession_->GetFocusPoint()).x, 0);
3476     EXPECT_EQ((captureSession_->GetFocusPoint()).y, 0);
3477 
3478     Point focusPoint;
3479     EXPECT_EQ(captureSession_->GetFocusPoint(focusPoint), SESSION_NOT_CONFIG);
3480     EXPECT_EQ(captureSession_->GetFocalLength(), 0);
3481 
3482     float focalLength;
3483     EXPECT_EQ(captureSession_->GetFocalLength(focalLength), SESSION_NOT_CONFIG);
3484     EXPECT_EQ((captureSession_->GetSupportedFlashModes()).empty(), true);
3485 
3486     std::vector<FlashMode> supportedFlashModes;
3487     EXPECT_EQ(captureSession_->GetSupportedFlashModes(supportedFlashModes), SESSION_NOT_CONFIG);
3488     EXPECT_EQ(captureSession_->GetFlashMode(), FLASH_MODE_CLOSE);
3489 
3490     FlashMode flashMode;
3491     EXPECT_EQ(captureSession_->GetFlashMode(flashMode), SESSION_NOT_CONFIG);
3492     EXPECT_EQ(captureSession_->SetFlashMode(FLASH_MODE_CLOSE), SESSION_NOT_CONFIG);
3493     EXPECT_EQ(captureSession_->IsFlashModeSupported(FLASH_MODE_CLOSE, isSupported), SESSION_NOT_CONFIG);
3494     EXPECT_EQ(captureSession_->HasFlash(isSupported), SESSION_NOT_CONFIG);
3495     EXPECT_EQ((captureSession_->GetZoomRatioRange()).empty(), true);
3496 
3497     std::vector<float> exposureBiasRange = {};
3498     EXPECT_EQ(captureSession_->GetZoomRatioRange(exposureBiasRange), SESSION_NOT_CONFIG);
3499     EXPECT_EQ(captureSession_->GetZoomRatio(), 0);
3500 
3501     float zoomRatio;
3502     EXPECT_EQ(captureSession_->GetZoomRatio(zoomRatio), SESSION_NOT_CONFIG);
3503     EXPECT_EQ(captureSession_->SetZoomRatio(0), SESSION_NOT_CONFIG);
3504 }
3505 
3506 /*
3507  * Feature: Camera base function
3508  * Function: Test !IsSessionCommited() && !IsSessionConfiged()
3509  * SubFunction: NA
3510  * FunctionPoints: NA
3511  * EnvConditions: NA
3512  * CaseDescription: test IsSessionCommited() || IsSessionConfiged() with abnormal branches in CaptureSession
3513  */
3514 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_085, TestSize.Level0)
3515 {
3516     EXPECT_EQ((captureSession_->GetSupportedColorEffects()).empty(), true);
3517     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
3518     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
3519     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
3520     ASSERT_NE(previewOutput, nullptr);
3521     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
3522     EXPECT_EQ(captureSession_->GetFilter(), FilterType::NONE);
3523     EXPECT_EQ(captureSession_->GetSupportedFilters().empty(), true);
3524     EXPECT_EQ(captureSession_->GetSupportedBeautyTypes().empty(), true);
3525     captureSession_->SetBeauty(AUTO_TYPE, 0);
3526     EXPECT_EQ(captureSession_->GetBeauty(AUTO_TYPE), -1);
3527     captureSession_->SetFilter(NONE);
3528     captureSession_->SetColorSpace(COLOR_SPACE_UNKNOWN);
3529     EXPECT_EQ(ServiceToCameraError(captureSession_->VerifyAbility(0)), SERVICE_FATL_ERROR);
3530 
3531     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
3532     captureSession_->SetBeauty(AUTO_TYPE, 0);
3533     EXPECT_EQ(captureSession_->GetBeauty(AUTO_TYPE), -1);
3534     captureSession_->SetFilter(NONE);
3535     captureSession_->SetColorSpace(COLOR_SPACE_UNKNOWN);
3536 }
3537 
3538 /*
3539  * Feature: Camera base function
3540  * Function: Test !IsSessionCommited() && !IsSessionConfiged()
3541  * SubFunction: NA
3542  * FunctionPoints: NA
3543  * EnvConditions: NA
3544  * CaseDescription: test IsSessionCommited() || IsSessionConfiged() with abnormal branches in CaptureSession
3545  */
3546 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_086, TestSize.Level0)
3547 {
3548     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
3549     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
3550 
3551     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
3552     ASSERT_NE(previewOutput, nullptr);
3553     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
3554     EXPECT_EQ(captureSession_->CommitConfig(), 0);
3555 
3556     captureSession_->innerInputDevice_ = nullptr;
3557 
3558     EXPECT_EQ(captureSession_->GetSupportedFilters().empty(), true);
3559     EXPECT_EQ(captureSession_->GetFilter(), FilterType::NONE);
3560     EXPECT_EQ(captureSession_->GetSupportedBeautyTypes().empty(), true);
3561 
3562     BeautyType beautyType = AUTO_TYPE;
3563     EXPECT_EQ(captureSession_->GetSupportedBeautyRange(beautyType).empty(), true);
3564     EXPECT_EQ(captureSession_->GetBeauty(beautyType), -1);
3565     EXPECT_EQ(captureSession_->GetColorEffect(), ColorEffect::COLOR_EFFECT_NORMAL);
3566     EXPECT_EQ(captureSession_->GetSupportedColorEffects().empty(), true);
3567 }
3568 
3569 /*
3570  * Feature: Camera base function
3571  * Function: Test !IsSessionCommited() && !IsSessionConfiged()
3572  * SubFunction: NA
3573  * FunctionPoints: NA
3574  * EnvConditions: NA
3575  * CaseDescription: test IsSessionCommited() || IsSessionConfiged() with abnormal branches in CaptureSession
3576  */
3577 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_087, TestSize.Level0)
3578 {
3579     EXPECT_EQ(captureSession_->GetSupportedFilters().empty(), true);
3580     EXPECT_EQ(captureSession_->GetFilter(), FilterType::NONE);
3581     EXPECT_EQ(captureSession_->GetSupportedBeautyTypes().empty(), true);
3582 
3583     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
3584     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
3585     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
3586     ASSERT_NE(previewOutput, nullptr);
3587     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), 0);
3588     EXPECT_EQ(captureSession_->GetSupportedFilters().empty(), true);
3589     EXPECT_EQ(captureSession_->GetFilter(), FilterType::NONE);
3590     EXPECT_EQ(captureSession_->GetSupportedBeautyTypes().empty(), true);
3591     EXPECT_EQ(captureSession_->CommitConfig(), 0);
3592 
3593     captureSession_->innerInputDevice_ = nullptr;
3594     EXPECT_EQ(captureSession_->GetSupportedFilters().empty(), true);
3595     EXPECT_EQ(captureSession_->GetFilter(), FilterType::NONE);
3596     EXPECT_EQ(captureSession_->GetSupportedBeautyTypes().empty(), true);
3597 }
3598 
3599 /*
3600  * Feature: Camera base function
3601  * Function: Test !IsSessionCommited() && !IsSessionConfiged()
3602  * SubFunction: NA
3603  * FunctionPoints: NA
3604  * EnvConditions: NA
3605  * CaseDescription: test Commited() || Configed() with abnormal branches in CaptureSession in CaptureSession
3606  */
3607 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_088, TestSize.Level0)
3608 {
3609     ColorSpace colorSpace = COLOR_SPACE_UNKNOWN;
3610     EXPECT_EQ(captureSession_->GetSupportedFilters().empty(), true);
3611     EXPECT_EQ(captureSession_->GetFilter(), FilterType::NONE);
3612     EXPECT_EQ(captureSession_->GetSupportedBeautyTypes().empty(), true);
3613     BeautyType beautyType = AUTO_TYPE;
3614     EXPECT_EQ(captureSession_->GetSupportedBeautyRange(beautyType).empty(), true);
3615     EXPECT_EQ(captureSession_->GetBeauty(AUTO_TYPE), CameraErrorCode::SESSION_NOT_CONFIG);
3616     EXPECT_EQ(captureSession_->GetColorEffect(), ColorEffect::COLOR_EFFECT_NORMAL);
3617     EXPECT_EQ(captureSession_->GetSupportedColorEffects().empty(), true);
3618     captureSession_->SetFilter(NONE);
3619     captureSession_->SetBeauty(beautyType, 0);
3620     EXPECT_EQ(captureSession_->GetSupportedColorSpaces().empty(), true);
3621     EXPECT_EQ(captureSession_->SetColorSpace(COLOR_SPACE_UNKNOWN), CameraErrorCode::SESSION_NOT_CONFIG);
3622     captureSession_->SetMode(SceneMode::NORMAL);
3623     EXPECT_EQ(ServiceToCameraError(captureSession_->VerifyAbility(0)), SERVICE_FATL_ERROR);
3624     EXPECT_EQ(captureSession_->GetActiveColorSpace(colorSpace), CameraErrorCode::SESSION_NOT_CONFIG);
3625     captureSession_->SetColorEffect(COLOR_EFFECT_NORMAL);
3626     captureSession_->Release();
3627     captureSession_ = nullptr;
3628 }
3629 
3630 /*
3631  * Feature: Camera base function
3632  * Function: Test !IsSessionCommited() && !IsSessionConfiged()
3633  * SubFunction: NA
3634  * FunctionPoints: NA
3635  * EnvConditions: NA
3636  * CaseDescription: test IsSessionCommited() || IsSessionConfiged() with abnormal branches in CaptureSession
3637  */
3638 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_089, TestSize.Level0)
3639 {
3640     ColorSpace colorSpace = COLOR_SPACE_UNKNOWN;
3641     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
3642     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
3643     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
3644     ASSERT_NE(previewOutput, nullptr);
3645     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
3646     captureSession_->SetMode(SceneMode::PORTRAIT);
3647     EXPECT_EQ(ServiceToCameraError(captureSession_->VerifyAbility(0)), SERVICE_FATL_ERROR);
3648     EXPECT_EQ(captureSession_->GetActiveColorSpace(colorSpace), SUCCESS);
3649     captureSession_->SetColorEffect(COLOR_EFFECT_NORMAL);
3650     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
3651     if (captureSession_->IsMacroSupported()) {
3652         captureSession_->LockForControl();
3653         EXPECT_EQ(captureSession_->EnableMacro(false), SUCCESS);
3654         captureSession_->UnlockForControl();
3655     }
3656     EXPECT_EQ(captureSession_->GetActiveColorSpace(colorSpace), SUCCESS);
3657     captureSession_->SetColorEffect(COLOR_EFFECT_NORMAL);
3658     captureSession_->innerInputDevice_ = nullptr;
3659     EXPECT_EQ(ServiceToCameraError(captureSession_->VerifyAbility(0)), SERVICE_FATL_ERROR);
3660 }
3661 
3662 /*
3663  * Feature: Camera base function
3664  * Function: Test !IsSessionCommited() && !IsSessionConfiged()
3665  * SubFunction: NA
3666  * FunctionPoints: NA
3667  * EnvConditions: NA
3668  * CaseDescription: test !IsSessionCommited() && !IsSessionConfiged() with abnormal branches in CaptureSession
3669  */
3670 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_090, TestSize.Level0)
3671 {
3672     BeautyType beautyType = AUTO_TYPE;
3673     EXPECT_EQ(captureSession_->GetSupportedBeautyRange(beautyType).empty(), true);
3674     EXPECT_EQ(captureSession_->GetBeauty(beautyType), CameraErrorCode::SESSION_NOT_CONFIG);
3675     EXPECT_EQ(captureSession_->GetColorEffect(), ColorEffect::COLOR_EFFECT_NORMAL);
3676     EXPECT_EQ(captureSession_->GetSupportedColorEffects().empty(), true);
3677     EXPECT_EQ(captureSession_->GetSupportedColorSpaces().empty(), true);
3678     captureSession_->SetBeauty(beautyType, 0);
3679     captureSession_->SetFilter(NONE);
3680     EXPECT_EQ(captureSession_->SetColorSpace(COLOR_SPACE_UNKNOWN), SESSION_NOT_CONFIG);
3681     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
3682     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
3683     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
3684     ASSERT_NE(previewOutput, nullptr);
3685     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
3686     EXPECT_EQ(captureSession_->GetSupportedBeautyRange(beautyType).empty(), true);
3687     EXPECT_EQ(captureSession_->GetBeauty(beautyType), -1);
3688     EXPECT_EQ(captureSession_->GetColorEffect(), COLOR_EFFECT_NORMAL);
3689     captureSession_->SetBeauty(beautyType, 0);
3690     captureSession_->SetFilter(NONE);
3691     captureSession_->SetColorSpace(COLOR_SPACE_UNKNOWN);
3692     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
3693     captureSession_->innerInputDevice_ = nullptr;
3694     EXPECT_EQ(captureSession_->GetSupportedBeautyRange(beautyType).empty(), true);
3695     EXPECT_EQ(captureSession_->GetBeauty(beautyType), -1);
3696     EXPECT_EQ(captureSession_->GetColorEffect(), COLOR_EFFECT_NORMAL);
3697     EXPECT_EQ(captureSession_->GetSupportedColorEffects().empty(), true);
3698     EXPECT_EQ(captureSession_->GetSupportedColorSpaces().empty(), true);
3699     captureSession_->SetBeauty(beautyType, 0);
3700     captureSession_->SetFilter(NONE);
3701     captureSession_->SetColorSpace(COLOR_SPACE_UNKNOWN);
3702 }
3703 
3704 /*
3705  * Feature: Camera base function
3706  * Function: Test errorCode
3707  * SubFunction: NA
3708  * FunctionPoints: NA
3709  * EnvConditions: NA
3710  * CaseDescription: test IsSessionCommited() || IsSessionConfiged() with abnormal branches
3711  */
3712 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_091, TestSize.Level0)
3713 {
3714     sptr<PhotoOutput> photoOutput1 = CreatePhotoOutput(photoProfiles_[0]);
3715     ASSERT_NE(photoOutput1, nullptr);
3716     auto photoOutput = static_cast<PhotoOutput*>(photoOutput1.GetRefPtr());
3717     photoOutput->ConfirmCapture();
3718     photoOutput->SetSession(nullptr);
3719     photoOutput->ConfirmCapture();
3720     photoOutput->SetSession(captureSession_);
3721 
3722     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
3723     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
3724     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
3725     ASSERT_NE(previewOutput, nullptr);
3726     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
3727     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
3728     photoOutput->ConfirmCapture();
3729 }
3730 
3731 /*
3732  * Feature: Camera base function
3733  * Function: Test anomalous branch.
3734  * SubFunction: NA
3735  * FunctionPoints: NA
3736  * EnvConditions: NA
3737  * CaseDescription: Test GetMetaSetting with existing metaTag.
3738  */
3739 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_092, TestSize.Level0)
3740 {
3741     sptr<CameraInput> camInput = (sptr<CameraInput>&)cameraInput_;
3742 
3743     std::shared_ptr<camera_metadata_item_t> metadataItem = nullptr;
3744     metadataItem = camInput->GetMetaSetting(OHOS_ABILITY_STREAM_AVAILABLE_BASIC_CONFIGURATIONS);
3745     ASSERT_NE(metadataItem, nullptr);
3746 
3747     std::vector<vendorTag_t> infos = {};
3748     camInput->GetCameraAllVendorTags(infos);
3749 
3750     sptr<ICameraDeviceService> deviceObj = camInput->GetCameraDevice();
3751     ASSERT_NE(deviceObj, nullptr);
3752 
3753     sptr<CameraDevice> camdeviceObj = nullptr;
3754     sptr<CameraInput> camInput_1 = new (std::nothrow) CameraInput(deviceObj, camdeviceObj);
3755     ASSERT_NE(camInput_1, nullptr);
3756 
3757     metadataItem = camInput_1->GetMetaSetting(OHOS_ABILITY_STREAM_AVAILABLE_BASIC_CONFIGURATIONS);
3758     EXPECT_EQ(metadataItem, nullptr);
3759 
3760     metadataItem = camInput->GetMetaSetting(-1);
3761     EXPECT_EQ(metadataItem, nullptr);
3762 
3763     std::shared_ptr<OHOS::Camera::CameraMetadata> metadata = cameraDevices_[0]->GetMetadata();
3764 
3765     std::string cameraId = cameraDevices_[0]->GetID();
3766     sptr<CameraDevice> camdeviceObj_2 = new (std::nothrow) CameraDevice(cameraId, metadata);
3767     ASSERT_NE(camdeviceObj_2, nullptr);
3768 }
3769 
3770 /*
3771  * Feature: Camera base function
3772  * Function: Test anomalous branch.
3773  * SubFunction: NA
3774  * FunctionPoints: NA
3775  * EnvConditions: NA
3776  * CaseDescription: Test Torch with anomalous branch.
3777  */
3778 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_093, TestSize.Level0)
3779 {
3780     EXPECT_EQ(cameraInput_->Close(), SUCCESS);
3781     cameraInput_ = nullptr;
3782     WAIT(DURATION_AFTER_DEVICE_CLOSE);
3783     if (!(cameraManager_->IsTorchSupported())) {
3784         return;
3785     }
3786 
3787     sptr<CameraManager> camManagerObj = CameraManager::GetInstance();
3788     auto torchCallback = std::make_shared<TestTorchListener>();
3789     camManagerObj->RegisterTorchListener(torchCallback);
3790     EXPECT_EQ(camManagerObj->IsTorchModeSupported(TORCH_MODE_AUTO), false);
3791     EXPECT_EQ(camManagerObj->SetTorchMode(TORCH_MODE_AUTO), OPERATION_NOT_ALLOWED);
3792 
3793     EXPECT_EQ(camManagerObj->IsTorchModeSupported(TORCH_MODE_ON), true);
3794     EXPECT_EQ(camManagerObj->SetTorchMode(TORCH_MODE_ON), SUCCESS);
3795     WAIT(DURATION_WAIT_CALLBACK);
3796 
3797     EXPECT_EQ(camManagerObj->IsTorchModeSupported(TORCH_MODE_OFF), true);
3798     EXPECT_EQ(camManagerObj->SetTorchMode(TORCH_MODE_OFF), SUCCESS);
3799     WAIT(DURATION_WAIT_CALLBACK);
3800 
3801     camManagerObj->SetServiceProxy(nullptr);
3802     EXPECT_EQ(camManagerObj->SetTorchMode(TORCH_MODE_OFF), SERVICE_FATL_ERROR);
3803 
3804     camManagerObj->InitCameraManager();
3805 }
3806 
3807 /*
3808  * Feature: Camera base function
3809  * Function: Test Metadata
3810  * SubFunction: NA
3811  * FunctionPoints: NA
3812  * EnvConditions: NA
3813  * CaseDescription: Test Metadata
3814  */
3815 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_094, TestSize.Level0)
3816 {
3817     EXPECT_EQ(captureSession_->BeginConfig(), 0);
3818     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
3819 
3820     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
3821     ASSERT_NE(previewOutput, nullptr);
3822     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
3823 
3824     sptr<CaptureOutput> metadatOutput = cameraManager_->CreateMetadataOutput();
3825     ASSERT_NE(metadatOutput, nullptr);
3826     EXPECT_EQ(captureSession_->AddOutput(metadatOutput), SUCCESS);
3827 
3828     sptr<MetadataOutput> metaOutput = (sptr<MetadataOutput>&)metadatOutput;
3829     std::vector<MetadataObjectType> metadataObjectTypes = metaOutput->GetSupportedMetadataObjectTypes();
3830     if (metadataObjectTypes.size() == 0) {
3831         return;
3832     }
3833 
3834     metaOutput->SetCapturingMetadataObjectTypes(std::vector<MetadataObjectType> { MetadataObjectType::FACE });
3835 
3836     std::shared_ptr<MetadataObjectCallback> metadataObjectCallback =
3837         std::make_shared<TestMetadataOutputObjectCallback>("");
3838     metaOutput->SetCallback(metadataObjectCallback);
3839     std::shared_ptr<MetadataStateCallback> metadataStateCallback =
3840         std::make_shared<TestMetadataStateCallback>();
3841     metaOutput->SetCallback(metadataStateCallback);
3842 
3843     pid_t pid = 0;
3844     metaOutput->CameraServerDied(pid);
3845 }
3846 
3847 /*
3848  * Feature: Camera base function
3849  * Function: Test Metadata
3850  * SubFunction: NA
3851  * FunctionPoints: NA
3852  * EnvConditions: NA
3853  * CaseDescription: Test Metadata
3854  */
3855 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_095, TestSize.Level0)
3856 {
3857     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
3858     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
3859 
3860     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
3861     ASSERT_NE(previewOutput, nullptr);
3862     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
3863 
3864     sptr<CaptureOutput> metadatOutput = cameraManager_->CreateMetadataOutput();
3865     ASSERT_NE(metadatOutput, nullptr);
3866     EXPECT_EQ(captureSession_->AddOutput(metadatOutput), 0);
3867 
3868     sptr<MetadataOutput> metaOutput = (sptr<MetadataOutput>&)metadatOutput;
3869     std::vector<MetadataObjectType> metadataObjectTypes = metaOutput->GetSupportedMetadataObjectTypes();
3870     if (metadataObjectTypes.size() == 0) {
3871         return;
3872     }
3873 
3874     metaOutput->SetCapturingMetadataObjectTypes(std::vector<MetadataObjectType> {});
3875 }
3876 
3877 
3878 /*
3879  * Feature: Camera base function
3880  * Function: Test the capture session with HighQualityPhoto.
3881  * SubFunction: NA
3882  * FunctionPoints: NA
3883  * EnvConditions: NA
3884  * CaseDescription: Test the capture session with HighQualityPhoto.
3885  */
3886 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_096, TestSize.Level0)
3887 {
3888     EXPECT_EQ(captureSession_->EnableAutoHighQualityPhoto(false), SUCCESS);
3889 
3890     sptr<PhotoOutput> photoOutput;
3891     sptr<VideoOutput> videoOutput;
3892     CreateAndConfigureDefaultCaptureOutput(photoOutput, videoOutput);
3893 
3894     EXPECT_EQ(captureSession_->EnableAutoHighQualityPhoto(true), SUCCESS);
3895     int32_t isSupported = false;
3896     EXPECT_EQ(photoOutput->IsAutoHighQualityPhotoSupported(isSupported), SUCCESS);
3897     EXPECT_EQ(photoOutput->EnableAutoHighQualityPhoto(true), INVALID_ARGUMENT);
3898 
3899     StartDefaultCaptureOutput(photoOutput, videoOutput);
3900 
3901     EXPECT_EQ(photoOutput->Release(), SUCCESS);
3902     EXPECT_EQ(photoOutput->IsAutoHighQualityPhotoSupported(isSupported), SESSION_NOT_RUNNING);
3903     EXPECT_EQ(photoOutput->EnableAutoHighQualityPhoto(true), SESSION_NOT_RUNNING);
3904 }
3905 
3906 /*
3907  * Feature: Camera base function
3908  * Function: Test camera rotation func.
3909  * SubFunction: NA
3910  * FunctionPoints: NA
3911  * EnvConditions: NA
3912  * CaseDescription: Test camera rotation func.
3913  */
3914 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_097, TestSize.Level0)
3915 {
3916     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
3917     ASSERT_NE(previewOutput, nullptr);
3918     sptr<PhotoOutput> photoOutput = CreatePhotoOutput(photoProfiles_[0]);
3919     ASSERT_NE(photoOutput, nullptr);
3920     sptr<VideoOutput> videoOutput = CreateVideoOutput(videoProfiles_[0]);
3921     ASSERT_NE(videoOutput, nullptr);
3922 
3923     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
3924     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
3925     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
3926     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)photoOutput), SUCCESS);
3927     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)videoOutput), SUCCESS);
3928 
3929     int32_t previewRotation = previewOutput->GetPreviewRotation(PhotoCaptureSetting::RotationConfig::Rotation_0);
3930     int32_t videoRotation = videoOutput->GetVideoRotation(PhotoCaptureSetting::RotationConfig::Rotation_90);
3931     int32_t photoRotation = photoOutput->GetPhotoRotation(PhotoCaptureSetting::RotationConfig::Rotation_180);
3932     EXPECT_EQ(videoRotation, PhotoCaptureSetting::RotationConfig::Rotation_180);
3933     EXPECT_EQ(previewOutput->SetPreviewRotation(previewRotation, false), SUCCESS);
3934     std::shared_ptr<PhotoCaptureSetting> photoSetting = std::make_shared<PhotoCaptureSetting>();
3935     photoSetting->SetRotation(static_cast<PhotoCaptureSetting::RotationConfig>(photoRotation));
3936 
3937     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
3938     EXPECT_EQ(captureSession_->Start(), SUCCESS);
3939     WAIT(DURATION_AFTER_SESSION_START);
3940     EXPECT_EQ(videoOutput->Start(), SUCCESS);
3941     WAIT(DURATION_DURING_RECORDING);
3942     EXPECT_EQ(photoOutput->Capture(photoSetting), SUCCESS);
3943     WAIT(DURATION_AFTER_CAPTURE);
3944     EXPECT_EQ(videoOutput->Stop(), SUCCESS);
3945     WAIT(DURATION_AFTER_RECORDING);
3946     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
3947 }
3948 
3949 /*
3950  * Feature: Camera base function
3951  * Function: Test snapshot.
3952  * SubFunction: NA
3953  * FunctionPoints: NA
3954  * EnvConditions: NA
3955  * CaseDescription: Test snapshot.
3956  */
3957 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_098, TestSize.Level0)
3958 {
3959     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
3960     ASSERT_NE(previewOutput, nullptr);
3961     sptr<PhotoOutput> photoOutput = CreatePhotoOutput(photoProfiles_[0]);
3962     ASSERT_NE(photoOutput, nullptr);
3963     sptr<VideoOutput> videoOutput = CreateVideoOutput(videoProfiles_[0]);
3964     ASSERT_NE(videoOutput, nullptr);
3965 
3966     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
3967     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
3968     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
3969     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)photoOutput), SUCCESS);
3970     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)videoOutput), SUCCESS);
3971     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
3972     EXPECT_EQ(captureSession_->Start(), SUCCESS);
3973     WAIT(DURATION_AFTER_SESSION_START);
3974     EXPECT_EQ(videoOutput->Start(), SUCCESS);
3975     WAIT(DURATION_DURING_RECORDING);
3976     EXPECT_EQ(photoOutput->Capture(), SUCCESS);
3977     WAIT(DURATION_AFTER_CAPTURE);
3978     EXPECT_EQ(videoOutput->Stop(), SUCCESS);
3979     WAIT(DURATION_AFTER_RECORDING);
3980     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
3981 }
3982 
3983 /*
3984  * Feature: Camera base function
3985  * Function: Test snapshot with location setting.
3986  * SubFunction: NA
3987  * FunctionPoints: NA
3988  * EnvConditions: NA
3989  * CaseDescription: Test snapshot with location setting.
3990  */
3991 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_099, TestSize.Level0)
3992 {
3993     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
3994     ASSERT_NE(previewOutput, nullptr);
3995     sptr<PhotoOutput> photoOutput = CreatePhotoOutput(photoProfiles_[0]);
3996     ASSERT_NE(photoOutput, nullptr);
3997     sptr<VideoOutput> videoOutput = CreateVideoOutput(videoProfiles_[0]);
3998     ASSERT_NE(videoOutput, nullptr);
3999 
4000     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
4001     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
4002     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
4003     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)photoOutput), SUCCESS);
4004     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)videoOutput), SUCCESS);
4005     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
4006     EXPECT_EQ(captureSession_->Start(), SUCCESS);
4007     WAIT(DURATION_AFTER_SESSION_START);
4008 
4009     std::shared_ptr<PhotoCaptureSetting> photoSetting = std::make_shared<PhotoCaptureSetting>();
4010     std::shared_ptr<Location> location = std::make_shared<Location>();
4011     location->latitude = 12.972442;
4012     location->longitude = 77.580643;
4013     location->altitude = 0;
4014     photoSetting->SetLocation(location);
4015 
4016     EXPECT_EQ(videoOutput->Start(), SUCCESS);
4017     WAIT(DURATION_DURING_RECORDING);
4018     EXPECT_EQ(photoOutput->Capture(photoSetting), SUCCESS);
4019     WAIT(DURATION_AFTER_CAPTURE);
4020     EXPECT_EQ(videoOutput->Stop(), SUCCESS);
4021     WAIT(DURATION_AFTER_RECORDING);
4022     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
4023 }
4024 
4025 /*
4026  * Feature: Camera base function
4027  * Function: Test snapshot with mirror setting.
4028  * SubFunction: NA
4029  * FunctionPoints: NA
4030  * EnvConditions: NA
4031  * CaseDescription: Test snapshot with mirror setting.
4032  */
4033 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_100, TestSize.Level0)
4034 {
4035     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
4036     ASSERT_NE(previewOutput, nullptr);
4037     sptr<PhotoOutput> photoOutput = CreatePhotoOutput(photoProfiles_[0]);
4038     ASSERT_NE(photoOutput, nullptr);
4039     sptr<VideoOutput> videoOutput = CreateVideoOutput(videoProfiles_[0]);
4040     ASSERT_NE(videoOutput, nullptr);
4041 
4042     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
4043     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
4044     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
4045     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)photoOutput), SUCCESS);
4046     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)videoOutput), SUCCESS);
4047     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
4048     EXPECT_EQ(captureSession_->Start(), SUCCESS);
4049     WAIT(DURATION_AFTER_SESSION_START);
4050     EXPECT_EQ(videoOutput->Start(), SUCCESS);
4051     WAIT(DURATION_DURING_RECORDING);
4052     EXPECT_EQ(photoOutput->Capture(), SUCCESS);
4053     WAIT(DURATION_AFTER_CAPTURE);
4054     EXPECT_EQ(videoOutput->Stop(), SUCCESS);
4055     WAIT(DURATION_AFTER_RECORDING);
4056     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
4057 
4058     if (cameraDevices_.size() <= 1) {
4059         MEDIA_ERR_LOG("The current device only has a camera and cannot switch cameras");
4060         return;
4061     }
4062     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
4063     EXPECT_EQ(captureSession_->RemoveInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
4064     EXPECT_EQ(captureSession_->RemoveOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
4065     EXPECT_EQ(captureSession_->RemoveOutput((sptr<CaptureOutput>&)photoOutput), SUCCESS);
4066     EXPECT_EQ(captureSession_->RemoveOutput((sptr<CaptureOutput>&)videoOutput), SUCCESS);
4067     EXPECT_EQ(cameraInput_->Release(), SUCCESS);
4068     cameraInput_ = nullptr;
4069     WAIT(DURATION_AFTER_DEVICE_CLOSE);
4070 
4071     sptr<CameraInput> frontCameraInput = cameraManager_->CreateCameraInput(cameraDevices_[deviceFrontIndex]);
4072     ASSERT_NE(frontCameraInput, nullptr);
4073     EXPECT_EQ(frontCameraInput->Open(), SUCCESS);
4074     UpdateCameraOutputCapability(deviceFrontIndex);
4075 
4076     Profile profile;
4077     profile.size_ = {PRVIEW_WIDTH_640, PRVIEW_HEIGHT_480};
4078     profile.format_ = CAMERA_FORMAT_YUV_420_SP;
4079     sptr<PreviewOutput> frontPreviewOutput = CreatePreviewOutput(profile);
4080     ASSERT_NE(frontPreviewOutput, nullptr);
4081     sptr<PhotoOutput> frontPhotoOutput = CreatePhotoOutput(photoProfiles_[0]);
4082     ASSERT_NE(frontPhotoOutput, nullptr);
4083     sptr<VideoOutput> frontVideoOutput = CreateVideoOutput(videoProfiles_[0]);
4084     ASSERT_NE(frontVideoOutput, nullptr);
4085     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)frontCameraInput), SUCCESS);
4086     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)frontPreviewOutput), SUCCESS);
4087     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)frontPhotoOutput), SUCCESS);
4088     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)frontVideoOutput), SUCCESS);
4089     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
4090 
4091     EXPECT_EQ(captureSession_->Start(), SUCCESS);
4092     WAIT(DURATION_AFTER_SESSION_START);
4093     EXPECT_EQ(frontVideoOutput->Start(), SUCCESS);
4094     WAIT(DURATION_DURING_RECORDING);
4095     if (frontPhotoOutput->IsMirrorSupported()) {
4096         std::shared_ptr<PhotoCaptureSetting> photoSetting = std::make_shared<PhotoCaptureSetting>();
4097         photoSetting->SetMirror(true);
4098         EXPECT_EQ(frontPhotoOutput->Capture(photoSetting), SUCCESS);
4099     } else {
4100         EXPECT_EQ(frontPhotoOutput->Capture(), SUCCESS);
4101     }
4102     WAIT(DURATION_AFTER_CAPTURE);
4103     EXPECT_EQ(frontVideoOutput->Stop(), SUCCESS);
4104     WAIT(DURATION_AFTER_RECORDING);
4105     EXPECT_EQ(captureSession_->Stop(), SUCCESS);
4106 
4107     EXPECT_EQ(frontCameraInput->Release(), SUCCESS);
4108     WAIT(DURATION_AFTER_DEVICE_CLOSE);
4109 }
4110 
4111 /*
4112 * Feature: Camera base function
4113 * Function: Test SetExposureBias && GetFeaturesMode && SetBeautyValue && GetSubFeatureMods
4114 * SubFunction: NA
4115 * FunctionPoints: NA
4116 * EnvConditions: NA
4117 * CaseDescription: test SetExposureBias && GetFeaturesMode && SetBeautyValue && GetSubFeatureMods
4118 */
4119 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_101, TestSize.Level0)
4120 {
4121     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
4122     ASSERT_NE(previewOutput, nullptr);
4123 
4124     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
4125     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
4126     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
4127     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
4128 
4129     captureSession_->LockForControl();
4130     EXPECT_EQ(captureSession_->SetExposureBias(100.0f), CameraErrorCode::SUCCESS);
4131     captureSession_->UnlockForControl();
4132 
4133     captureSession_->isSetMacroEnable_ = true;
4134     captureSession_->currentMode_ = SceneMode::VIDEO;
4135 
4136     SceneFeaturesMode videoMacroMode(SceneMode::VIDEO, { SceneFeature::FEATURE_MACRO });
4137     bool isMatchSubFeatureMode = false;
4138     auto vec = captureSession_->GetSubFeatureMods();
4139     for (auto& sceneFeaturesMode : vec) {
4140         if (sceneFeaturesMode == videoMacroMode) {
4141             isMatchSubFeatureMode = true;
4142             break;
4143         }
4144     }
4145     EXPECT_TRUE(isMatchSubFeatureMode);
4146 
4147     auto mode = captureSession_->GetFeaturesMode();
4148     EXPECT_TRUE(mode == videoMacroMode);
4149 
4150     captureSession_->currentMode_ = SceneMode::CAPTURE;
4151     mode = captureSession_->GetFeaturesMode();
4152     SceneFeaturesMode captureMacroMode(SceneMode::CAPTURE, { SceneFeature::FEATURE_MACRO });
4153     EXPECT_TRUE(mode == captureMacroMode);
4154 
4155     isMatchSubFeatureMode = false;
4156     vec = captureSession_->GetSubFeatureMods();
4157     for (auto& sceneFeaturesMode : vec) {
4158         if (sceneFeaturesMode == captureMacroMode) {
4159             isMatchSubFeatureMode = true;
4160             break;
4161         }
4162     }
4163     EXPECT_TRUE(isMatchSubFeatureMode);
4164 
4165     bool boolResult = captureSession_->SetBeautyValue(BeautyType::SKIN_TONE, 0);
4166     EXPECT_FALSE(boolResult);
4167 }
4168 
4169 /*
4170  * Feature: Camera base function
4171  * Function: Test anomalous branch
4172  * SubFunction: NA
4173  * FunctionPoints: NA
4174  * EnvConditions: NA
4175  * CaseDescription: test service callback with anomalous branch
4176  */
4177 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_102, TestSize.Level0)
4178 {
4179     std::string cameraIdtest = "";
4180     FlashStatus status = FLASH_STATUS_OFF;
4181 
4182     auto statusListenerManager = cameraManager_->GetCameraStatusListenerManager();
4183     ASSERT_NE(statusListenerManager, nullptr);
4184     EXPECT_EQ(statusListenerManager->OnFlashlightStatusChanged(cameraIdtest, status), CAMERA_OK);
4185 
4186     sptr<CameraDeviceServiceCallback> camDeviceSvcCallback = new (std::nothrow) CameraDeviceServiceCallback();
4187     ASSERT_NE(camDeviceSvcCallback, nullptr);
4188     EXPECT_EQ(camDeviceSvcCallback->OnError(CAMERA_DEVICE_PREEMPTED, 0), CAMERA_OK);
4189 
4190     std::shared_ptr<OHOS::Camera::CameraMetadata> result = nullptr;
4191     EXPECT_EQ(camDeviceSvcCallback->OnResult(0, result), CAMERA_INVALID_ARG);
4192 
4193     sptr<ICameraDeviceService> deviceObj = cameraInput_->GetCameraDevice();
4194     ASSERT_NE(deviceObj, nullptr);
4195 
4196     sptr<CameraDevice> camdeviceObj = nullptr;
4197     sptr<CameraInput> camInput_1 = new (std::nothrow) CameraInput(deviceObj, camdeviceObj);
4198     ASSERT_NE(camInput_1, nullptr);
4199 
4200     camDeviceSvcCallback = nullptr;
4201     camDeviceSvcCallback = new (std::nothrow) CameraDeviceServiceCallback(camInput_1);
4202     ASSERT_NE(camDeviceSvcCallback, nullptr);
4203     EXPECT_EQ(camDeviceSvcCallback->OnResult(0, result), CAMERA_INVALID_ARG);
4204 
4205     sptr<CameraInput> camInput_2 = new (std::nothrow) CameraInput(deviceObj, cameraDevices_[0]);
4206     ASSERT_NE(camInput_2, nullptr);
4207     camDeviceSvcCallback = nullptr;
4208     camDeviceSvcCallback = new (std::nothrow) CameraDeviceServiceCallback(camInput_2);
4209     ASSERT_NE(camDeviceSvcCallback, nullptr);
4210     EXPECT_EQ(camDeviceSvcCallback->OnError(CAMERA_DEVICE_PREEMPTED, 0), CAMERA_OK);
4211 
4212     auto callback = std::make_shared<TestDeviceCallback>("");
4213     camInput_2->SetErrorCallback(callback);
4214 
4215     camDeviceSvcCallback = nullptr;
4216     camDeviceSvcCallback = new (std::nothrow) CameraDeviceServiceCallback(camInput_2);
4217     ASSERT_NE(camDeviceSvcCallback, nullptr);
4218     EXPECT_EQ(camDeviceSvcCallback->OnError(CAMERA_DEVICE_PREEMPTED, 0), CAMERA_OK);
4219 
4220     callback = nullptr;
4221     camInput_2->SetErrorCallback(callback);
4222 }
4223 
4224 /*
4225  * Feature: Camera base function
4226  * Function: Test anomalous branch
4227  * SubFunction: NA
4228  * FunctionPoints: NA
4229  * EnvConditions: NA
4230  * CaseDescription: test capture session callback error with anomalous branch
4231  */
4232 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_103, TestSize.Level0)
4233 {
4234     sptr<CaptureSessionCallback> capSessionCallback = new (std::nothrow) CaptureSessionCallback();
4235     ASSERT_NE(capSessionCallback, nullptr);
4236     EXPECT_EQ(capSessionCallback->OnError(CAMERA_DEVICE_PREEMPTED), CAMERA_OK);
4237     capSessionCallback = nullptr;
4238     capSessionCallback = new (std::nothrow) CaptureSessionCallback(captureSession_);
4239     ASSERT_NE(capSessionCallback, nullptr);
4240     EXPECT_EQ(capSessionCallback->OnError(CAMERA_DEVICE_PREEMPTED), CAMERA_OK);
4241 
4242     std::shared_ptr<TestSessionCallback> callback = nullptr;
4243     captureSession_->SetCallback(callback);
4244 
4245     callback = std::make_shared<TestSessionCallback>();
4246     ASSERT_NE(callback, nullptr);
4247     captureSession_->SetCallback(callback);
4248     capSessionCallback = nullptr;
4249     capSessionCallback = new (std::nothrow) CaptureSessionCallback(captureSession_);
4250     ASSERT_NE(capSessionCallback, nullptr);
4251     EXPECT_EQ(capSessionCallback->OnError(CAMERA_DEVICE_PREEMPTED), CAMERA_OK);
4252 }
4253 
4254 /*
4255  * Feature: Camera base function
4256  * Function: Test OnSketchStatusChanged
4257  * SubFunction: NA
4258  * FunctionPoints: NA
4259  * EnvConditions: NA
4260  * CaseDescription: test PreviewOutputCallbackImpl:OnSketchStatusChanged with abnormal branches
4261  */
4262 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_104, TestSize.Level0)
4263 {
4264     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
4265     ASSERT_NE(previewOutput, nullptr);
4266     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
4267     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
4268     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
4269 
4270     auto previewOutputListenerManager = previewOutput->GetPreviewOutputListenerManager();
4271     ASSERT_NE(previewOutputListenerManager, nullptr);
4272     EXPECT_EQ(previewOutputListenerManager->OnSketchStatusChanged(SketchStatus::STOPED), CAMERA_OK);
4273 
4274     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
4275 }
4276 
4277 /*
4278  * Feature: Camera base function
4279  * Function: Test anomalous branch.
4280  * SubFunction: NA
4281  * FunctionPoints: NA
4282  * EnvConditions: NA
4283  * CaseDescription: Test captureCallback with anomalous branch.
4284  */
4285 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_105, TestSize.Level0)
4286 {
4287     auto captureCallback = std::make_shared<HStreamCaptureCallbackImpl>(nullptr);
4288 
4289     int32_t captureId = 2001;
4290     EXPECT_EQ(captureCallback->OnCaptureStarted(captureId), CAMERA_OK);
4291     int32_t frameCount = 0;
4292     EXPECT_EQ(captureCallback->OnCaptureEnded(captureId, frameCount), CAMERA_OK);
4293     int32_t errorCode = 0;
4294     EXPECT_EQ(captureCallback->OnCaptureError(captureId, errorCode), CAMERA_OK);
4295     uint64_t timestamp = 10;
4296     EXPECT_EQ(captureCallback->OnFrameShutter(captureId, timestamp), CAMERA_OK);
4297 
4298     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
4299     ASSERT_NE(previewOutput, nullptr);
4300     sptr<PhotoOutput> photoOutput = CreatePhotoOutput(photoProfiles_[0]);
4301     ASSERT_NE(photoOutput, nullptr);
4302     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
4303     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
4304     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
4305     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)photoOutput), SUCCESS);
4306 
4307     std::shared_ptr<TestPhotoOutputCallback> callback = nullptr;
4308     photoOutput->SetCallback(callback);
4309 
4310     callback = std::make_shared<TestPhotoOutputCallback>("");
4311     ASSERT_NE(callback, nullptr);
4312     photoOutput->SetCallback(callback);
4313     photoOutput->SetCallback(callback);
4314 
4315     auto captureCallback2 = new (std::nothrow) HStreamCaptureCallbackImpl(photoOutput);
4316     ASSERT_NE(captureCallback2, nullptr);
4317 
4318     EXPECT_EQ(captureCallback2->OnCaptureEnded(captureId, frameCount), CAMERA_OK);
4319     EXPECT_EQ(captureCallback2->OnCaptureError(captureId, errorCode), CAMERA_OK);
4320     EXPECT_EQ(captureCallback2->OnFrameShutter(captureId, timestamp), CAMERA_OK);
4321 }
4322 
4323 /*
4324  * Feature: Camera base function
4325  * Function: Test anomalous branch
4326  * SubFunction: NA
4327  * FunctionPoints: NA
4328  * EnvConditions: NA
4329  * CaseDescription: test video output repeat callback with anomalous branch
4330  */
4331 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_106, TestSize.Level0)
4332 {
4333     auto repeatCallback = std::make_shared<VideoOutputCallbackImpl>();
4334 
4335     EXPECT_EQ(repeatCallback->OnFrameStarted(), CAMERA_OK);
4336     int32_t frameCount = 0;
4337     EXPECT_EQ(repeatCallback->OnFrameEnded(frameCount), CAMERA_OK);
4338     int32_t errorCode = 0;
4339     EXPECT_EQ(repeatCallback->OnFrameError(errorCode), CAMERA_OK);
4340 
4341     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
4342     ASSERT_NE(previewOutput, nullptr);
4343     sptr<VideoOutput> videoOutput = CreateVideoOutput(videoProfiles_[0]);
4344     ASSERT_NE(videoOutput, nullptr);
4345     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
4346     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
4347     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
4348     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)videoOutput), SUCCESS);
4349 
4350     std::shared_ptr<TestVideoOutputCallback> callback = nullptr;
4351     videoOutput->SetCallback(callback);
4352 
4353     callback = std::make_shared<TestVideoOutputCallback>("");
4354     ASSERT_NE(callback, nullptr);
4355     videoOutput->SetCallback(callback);
4356     videoOutput->SetCallback(callback);
4357 
4358     auto repeatCallback2 = new (std::nothrow) VideoOutputCallbackImpl(videoOutput);
4359     ASSERT_NE(repeatCallback2, nullptr);
4360 
4361     EXPECT_EQ(repeatCallback2->OnFrameStarted(), CAMERA_OK);
4362     EXPECT_EQ(repeatCallback2->OnFrameEnded(frameCount), CAMERA_OK);
4363     EXPECT_EQ(repeatCallback2->OnFrameError(errorCode), CAMERA_OK);
4364 }
4365 
4366 /*
4367  * Feature: Camera base function
4368  * Function: Test anomalous branch
4369  * SubFunction: NA
4370  * FunctionPoints: NA
4371  * EnvConditions: NA
4372  * CaseDescription: test focus distance the camera vwith abnormal setting branch
4373  */
4374 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_107, TestSize.Level0)
4375 {
4376     float recnum = 0.0f;
4377     EXPECT_EQ(captureSession_->GetFocusDistance(recnum), 7400103);
4378     EXPECT_EQ(recnum, 0.0f);
4379 
4380     captureSession_->LockForControl();
4381     float num = 1.0f;
4382     EXPECT_EQ(captureSession_->SetFocusDistance(num), 7400103);
4383     captureSession_->UnlockForControl();
4384 
4385     sptr<PhotoOutput> photoOutput;
4386     sptr<VideoOutput> videoOutput;
4387     CreateAndConfigureDefaultCaptureOutput(photoOutput, videoOutput);
4388 
4389     captureSession_->GetFocusDistance(recnum);
4390     EXPECT_EQ(recnum, 0.0f);
4391     captureSession_->LockForControl();
4392     EXPECT_EQ(captureSession_->SetFocusDistance(num), 0);
4393     captureSession_->UnlockForControl();
4394     captureSession_->GetFocusDistance(recnum);
4395     EXPECT_EQ(recnum, 1.0f);
4396 
4397     EXPECT_EQ(cameraInput_->Release(), SUCCESS);
4398     cameraInput_ = nullptr;
4399 
4400     EXPECT_EQ(captureSession_->GetFocusDistance(recnum), 0);
4401 }
4402 
4403 /*
4404  * Feature: Camera base function
4405  * Function: Test anomalous branch
4406  * SubFunction: NA
4407  * FunctionPoints: NA
4408  * EnvConditions: NA
4409  * CaseDescription: test CaptureSession GetZoomPointInfos with abnormal setting branch
4410  */
4411 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_108, TestSize.Level0)
4412 {
4413     std::vector<ZoomPointInfo> zoomPointInfolist = {};
4414     EXPECT_EQ(captureSession_->GetZoomPointInfos(zoomPointInfolist), 7400103);
4415     EXPECT_EQ(zoomPointInfolist.empty(), true);
4416 
4417     sptr<PhotoOutput> photoOutput;
4418     sptr<VideoOutput> videoOutput;
4419     CreateAndConfigureDefaultCaptureOutput(photoOutput, videoOutput);
4420 
4421     EXPECT_EQ(captureSession_->GetZoomPointInfos(zoomPointInfolist), 0);
4422 
4423     EXPECT_EQ(cameraInput_->Release(), SUCCESS);
4424     cameraInput_ = nullptr;
4425 
4426     EXPECT_EQ(captureSession_->GetZoomPointInfos(zoomPointInfolist), 0);
4427 }
4428 
4429 /*
4430  * Feature: Camera base function
4431  * Function: Test anomalous branch
4432  * SubFunction: NA
4433  * FunctionPoints: NA
4434  * EnvConditions: NA
4435  * CaseDescription: test CaptureSession GetSensorExposureTime with abnormal setting branch
4436  */
4437 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_109, TestSize.Level0)
4438 {
4439     std::vector<uint32_t> exposureTimeRange = {};
4440     EXPECT_EQ(captureSession_->GetSensorExposureTimeRange(exposureTimeRange), 7400103);
4441     EXPECT_EQ(exposureTimeRange.empty(), true);
4442 
4443     uint32_t recSensorExposureTime = 0;
4444     EXPECT_EQ(captureSession_->GetSensorExposureTime(recSensorExposureTime), 7400103);
4445     EXPECT_EQ(recSensorExposureTime, 0);
4446 
4447     captureSession_->LockForControl();
4448     uint32_t exposureTime = 1;
4449     EXPECT_EQ(captureSession_->SetSensorExposureTime(exposureTime), 7400103);
4450     captureSession_->UnlockForControl();
4451 
4452     sptr<PhotoOutput> photoOutput;
4453     sptr<VideoOutput> videoOutput;
4454     CreateAndConfigureDefaultCaptureOutput(photoOutput, videoOutput);
4455 
4456     if (captureSession_->GetSensorExposureTimeRange(exposureTimeRange) == 0) {
4457         captureSession_->LockForControl();
4458         EXPECT_EQ(captureSession_->SetSensorExposureTime(exposureTimeRange[0]), 0);
4459         captureSession_->UnlockForControl();
4460 
4461         EXPECT_EQ(captureSession_->GetSensorExposureTime(recSensorExposureTime), 0);
4462 
4463         EXPECT_EQ(cameraInput_->Release(), SUCCESS);
4464         cameraInput_ = nullptr;
4465 
4466         EXPECT_EQ(captureSession_->GetSensorExposureTimeRange(exposureTimeRange), 7400101);
4467 
4468         EXPECT_EQ(captureSession_->GetSensorExposureTime(recSensorExposureTime), 7400101);
4469 
4470         captureSession_->LockForControl();
4471         EXPECT_EQ(captureSession_ ->SetSensorExposureTime(exposureTimeRange[0]), 7400102);
4472         captureSession_->UnlockForControl();
4473     }
4474 }
4475 
4476 /*
4477  * Feature: Camera base function
4478  * Function: Test anomalous branch
4479  * SubFunction: NA
4480  * FunctionPoints: NA
4481  * EnvConditions: NA
4482  * CaseDescription: test focus distance the camera with abnormal setting branch
4483  */
4484 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_110, TestSize.Level0)
4485 {
4486     std::vector<WhiteBalanceMode> supportedWhiteBalanceModes = {};
4487     int32_t intResult = captureSession_->GetSupportedWhiteBalanceModes(supportedWhiteBalanceModes);
4488     EXPECT_EQ(intResult, 7400103);
4489     EXPECT_EQ(supportedWhiteBalanceModes.empty(), true);
4490 
4491     bool isSupported = false;
4492     WhiteBalanceMode currMode = WhiteBalanceMode::AWB_MODE_OFF;
4493     intResult = captureSession_->IsWhiteBalanceModeSupported(currMode, isSupported);
4494     EXPECT_EQ(intResult, 7400103);
4495 
4496     captureSession_->LockForControl();
4497     intResult = captureSession_->SetWhiteBalanceMode(currMode);
4498     EXPECT_EQ(intResult, 7400103);
4499     captureSession_->UnlockForControl();
4500 
4501     WhiteBalanceMode retMode;
4502     intResult = captureSession_->GetWhiteBalanceMode(retMode);
4503     EXPECT_EQ(intResult, 7400103);
4504 
4505     sptr<PhotoOutput> photoOutput;
4506     sptr<VideoOutput> videoOutput;
4507     CreateAndConfigureDefaultCaptureOutput(photoOutput, videoOutput);
4508 
4509     captureSession_->GetSupportedWhiteBalanceModes(supportedWhiteBalanceModes);
4510     if (!supportedWhiteBalanceModes.empty()) {
4511         captureSession_->IsWhiteBalanceModeSupported(supportedWhiteBalanceModes[0], isSupported);
4512         ASSERT_EQ(isSupported, true);
4513         captureSession_->LockForControl();
4514         intResult = captureSession_->SetWhiteBalanceMode(supportedWhiteBalanceModes[0]);
4515         ASSERT_EQ(intResult, 0);
4516         captureSession_->UnlockForControl();
4517         WhiteBalanceMode currentMode;
4518         captureSession_->GetWhiteBalanceMode(currentMode);
4519         ASSERT_EQ(currentMode, supportedWhiteBalanceModes[0]);
4520     }
4521 
4522     EXPECT_EQ(cameraInput_->Release(), SUCCESS);
4523     cameraInput_ = nullptr;
4524 
4525     intResult = captureSession_->GetSupportedWhiteBalanceModes(supportedWhiteBalanceModes);
4526     EXPECT_EQ(intResult, 0);
4527 
4528     intResult = captureSession_->IsWhiteBalanceModeSupported(currMode, isSupported);
4529     EXPECT_EQ(intResult, 0);
4530     captureSession_->LockForControl();
4531     intResult = captureSession_->SetWhiteBalanceMode(currMode);
4532     EXPECT_EQ(intResult, 0);
4533     captureSession_->UnlockForControl();
4534 
4535     intResult = captureSession_->GetWhiteBalanceMode(retMode);
4536     EXPECT_EQ(intResult, 0);
4537 }
4538 
4539 /*
4540  * Feature: Camera base function
4541  * Function: Test anomalous branch
4542  * SubFunction: NA
4543  * FunctionPoints: NA
4544  * EnvConditions: NA
4545  * CaseDescription: test manaul WhiteBalance the cammera with abnormal setting branch
4546  */
4547 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_111, TestSize.Level0)
4548 {
4549     std::vector<int32_t> manualWhiteBalanceRange = {};
4550     int32_t intResult = captureSession_->GetManualWhiteBalanceRange(manualWhiteBalanceRange);
4551     EXPECT_EQ(intResult, 7400103);
4552     EXPECT_EQ(manualWhiteBalanceRange.empty(), true);
4553 
4554     bool isSupported = false;
4555     intResult = captureSession_->IsManualWhiteBalanceSupported(isSupported);
4556     EXPECT_EQ(intResult, 7400103);
4557 
4558     int32_t wbValue = 0;
4559     captureSession_->LockForControl();
4560     intResult = captureSession_->SetManualWhiteBalance(wbValue);
4561     EXPECT_EQ(intResult, 7400103);
4562     captureSession_->UnlockForControl();
4563 
4564     intResult = captureSession_->GetManualWhiteBalance(wbValue);
4565     EXPECT_EQ(intResult, 7400103);
4566 
4567     sptr<PhotoOutput> photoOutput;
4568     sptr<VideoOutput> videoOutput;
4569     CreateAndConfigureDefaultCaptureOutput(photoOutput, videoOutput);
4570 
4571     captureSession_->GetManualWhiteBalanceRange(manualWhiteBalanceRange);
4572     if (!manualWhiteBalanceRange.empty()) {
4573         captureSession_->IsManualWhiteBalanceSupported(isSupported);
4574         ASSERT_EQ(isSupported, true);
4575         captureSession_->LockForControl();
4576         intResult = captureSession_->SetManualWhiteBalance(manualWhiteBalanceRange[0]);
4577         captureSession_->UnlockForControl();
4578         captureSession_ ->GetManualWhiteBalance(wbValue);
4579         ASSERT_EQ(wbValue, manualWhiteBalanceRange[0]);
4580     }
4581 
4582     EXPECT_EQ(cameraInput_->Release(), SUCCESS);
4583     cameraInput_ = nullptr;
4584 
4585     intResult = captureSession_->GetManualWhiteBalanceRange(manualWhiteBalanceRange);
4586     EXPECT_EQ(intResult, 0);
4587 
4588     intResult = captureSession_->IsManualWhiteBalanceSupported(isSupported);
4589     EXPECT_EQ(intResult, 0);
4590     captureSession_->LockForControl();
4591     intResult = captureSession_->SetManualWhiteBalance(wbValue);
4592     EXPECT_EQ(intResult, 7400102);
4593     captureSession_->UnlockForControl();
4594 
4595     intResult = captureSession_->GetManualWhiteBalance(wbValue);
4596     EXPECT_EQ(intResult, 0);
4597 }
4598 
4599 /*
4600  * Feature: Camera base function
4601  * Function: Test anomalous branch
4602  * SubFunction: NA
4603  * FunctionPoints: NA
4604  * EnvConditions: NA
4605  * CaseDescription: Test abnormal branches with empty inputDevice and empty metadata
4606  */
4607 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_112, TestSize.Level0)
4608 {
4609     std::vector<std::vector<float>> supportedPhysicalApertures;
4610     int32_t intResult = captureSession_->GetSupportedPhysicalApertures(supportedPhysicalApertures);
4611     EXPECT_EQ(intResult, 7400103);
4612     EXPECT_EQ(supportedPhysicalApertures.empty(), true);
4613 
4614     float getAperture = 0.0f;
4615     intResult = captureSession_->GetPhysicalAperture(getAperture);
4616     EXPECT_EQ(intResult, 7400103);
4617     EXPECT_EQ(getAperture, 0.0f);
4618 
4619     captureSession_->LockForControl();
4620     float setAperture = 1.0f;
4621     intResult = captureSession_->SetPhysicalAperture(setAperture);
4622     EXPECT_EQ(intResult, 7400103);
4623     captureSession_->UnlockForControl();
4624 
4625     sptr<PhotoOutput> photoOutput;
4626     sptr<VideoOutput> videoOutput;
4627     CreateAndConfigureDefaultCaptureOutput(photoOutput, videoOutput);
4628 
4629     intResult = captureSession_->GetSupportedPhysicalApertures(supportedPhysicalApertures);
4630     EXPECT_EQ(intResult, 0);
4631     intResult = captureSession_->GetPhysicalAperture(getAperture);
4632     EXPECT_EQ(intResult, 0);
4633 
4634     captureSession_->LockForControl();
4635     intResult = captureSession_->SetPhysicalAperture(setAperture);
4636     EXPECT_EQ(intResult, 0);
4637     captureSession_->UnlockForControl();
4638     intResult = captureSession_->GetPhysicalAperture(getAperture);
4639     EXPECT_EQ(intResult, 0);
4640 
4641     EXPECT_EQ(cameraInput_->Release(), SUCCESS);
4642     cameraInput_ = nullptr;
4643 
4644     intResult = captureSession_->GetSupportedPhysicalApertures(supportedPhysicalApertures);
4645     EXPECT_EQ(intResult, 0);
4646     intResult = captureSession_->GetPhysicalAperture(getAperture);
4647     EXPECT_EQ(intResult, 0);
4648 }
4649 
4650 /*
4651  * Feature: Camera base function
4652  * Function: Test auto aigc photo
4653  * SubFunction: NA
4654  * FunctionPoints: NA
4655  * EnvConditions: NA
4656  * CaseDescription: test AutoAigcPhoto enable
4657  */
4658 HWTEST_F(CameraBaseFunctionModuleTest, camera_base_function_moduletest_113, TestSize.Level0)
4659 {
4660     bool isEnabled = false;
4661     bool isAutoAigcPhotoSupported = false;
4662     EXPECT_EQ(captureSession_->EnableAutoAigcPhoto(isEnabled), SUCCESS);
4663 
4664     sptr<PreviewOutput> previewOutput = CreatePreviewOutput(previewProfiles_[0]);
4665     ASSERT_NE(previewOutput, nullptr);
4666     sptr<PhotoOutput> photoOutput = CreatePhotoOutput(photoProfiles_[0]);
4667     ASSERT_NE(photoOutput, nullptr);
4668     EXPECT_EQ(photoOutput->IsAutoAigcPhotoSupported(isAutoAigcPhotoSupported), SERVICE_FATL_ERROR);
4669     EXPECT_EQ(photoOutput->EnableAutoAigcPhoto(isEnabled), SESSION_NOT_RUNNING);
4670 
4671     EXPECT_EQ(captureSession_->BeginConfig(), SUCCESS);
4672     EXPECT_EQ(captureSession_->AddInput((sptr<CaptureInput>&)cameraInput_), SUCCESS);
4673     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)previewOutput), SUCCESS);
4674     EXPECT_EQ(captureSession_->AddOutput((sptr<CaptureOutput>&)photoOutput), SUCCESS);
4675     EXPECT_EQ(captureSession_->CommitConfig(), SUCCESS);
4676 
4677     EXPECT_EQ(photoOutput->IsAutoAigcPhotoSupported(isAutoAigcPhotoSupported), SUCCESS);
4678     if (isAutoAigcPhotoSupported) {
4679         EXPECT_EQ(photoOutput->EnableAutoAigcPhoto(isEnabled), SUCCESS);
4680     }
4681 
4682     EXPECT_EQ(photoOutput->Release(), SUCCESS);
4683     EXPECT_EQ(photoOutput->IsAutoAigcPhotoSupported(isAutoAigcPhotoSupported), SERVICE_FATL_ERROR);
4684     EXPECT_EQ(photoOutput->EnableAutoAigcPhoto(isEnabled), SESSION_NOT_RUNNING);
4685 }
4686 } // namespace CameraStandard
4687 } // namespace OHOS