• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024-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 "camera_session_moduletest.h"
17 
18 #include <algorithm>
19 #include <cinttypes>
20 #include <cstdint>
21 #include <memory>
22 #include <vector>
23 #include <thread>
24 
25 using namespace testing::ext;
26 
27 namespace OHOS {
28 namespace CameraStandard {
29 
30 std::bitset<static_cast<int>(CAM_PHOTO_EVENTS::CAM_PHOTO_MAX_EVENT)> g_photoEvents;
31 std::bitset<static_cast<unsigned int>(CAM_PREVIEW_EVENTS::CAM_PREVIEW_MAX_EVENT)> g_previewEvents;
32 std::bitset<static_cast<unsigned int>(CAM_VIDEO_EVENTS::CAM_VIDEO_MAX_EVENT)> g_videoEvents;
33 std::bitset<static_cast<unsigned int>(CAM_MACRO_DETECT_EVENTS::CAM_MACRO_EVENT_MAX_EVENT)> g_macroEvents;
34 std::bitset<static_cast<unsigned int>(CAM_MOON_CAPTURE_BOOST_EVENTS::CAM_MOON_CAPTURE_BOOST_EVENT_MAX_EVENT)>
35     g_moonCaptureBoostEvents;
36 std::unordered_map<std::string, int> g_camStatusMap;
37 std::unordered_map<std::string, bool> g_camFlashMap;
38 std::shared_ptr<OHOS::Camera::CameraMetadata> g_metaResult = nullptr;
39 std::list<int32_t> g_sketchStatus;
40 TorchStatusInfo g_torchInfo;
41 int32_t g_previewFd = -1;
42 int32_t g_photoFd = -1;
43 int32_t g_videoFd = -1;
44 int32_t g_sketchFd = -1;
45 bool g_camInputOnError = false;
46 bool g_sessionclosed = false;
47 bool g_brightnessStatusChanged = false;
48 bool g_slowMotionStatusChanged = false;
49 
OnCameraStatusChanged(const CameraStatusInfo & cameraDeviceInfo) const50 void AppCallback::OnCameraStatusChanged(const CameraStatusInfo& cameraDeviceInfo) const
51 {
52     const std::string cameraID = cameraDeviceInfo.cameraDevice->GetID();
53     const CameraStatus cameraStatus = cameraDeviceInfo.cameraStatus;
54     EXPECT_TRUE(true)<<"OnCameraStatusChanged:CameraId="<<cameraID<<",CameraStatus="<<cameraDeviceInfo.cameraStatus
55         <<",bundleName="<<cameraDeviceInfo.bundleName<<endl;
56     switch (cameraStatus) {
57         case CAMERA_STATUS_UNAVAILABLE: {
58             MEDIA_DEBUG_LOG(
59                 "AppCallback::OnCameraStatusChanged %{public}s: CAMERA_STATUS_UNAVAILABLE", cameraID.c_str());
60             g_camStatusMap[cameraID] = CAMERA_STATUS_UNAVAILABLE;
61             break;
62         }
63         case CAMERA_STATUS_AVAILABLE: {
64             MEDIA_DEBUG_LOG(
65                 "AppCallback::OnCameraStatusChanged %{public}s: CAMERA_STATUS_AVAILABLE", cameraID.c_str());
66             g_camStatusMap[cameraID] = CAMERA_STATUS_AVAILABLE;
67             break;
68         }
69         default: {
70             MEDIA_DEBUG_LOG("AppCallback::OnCameraStatusChanged %{public}s: unknown", cameraID.c_str());
71             EXPECT_TRUE(false);
72         }
73     }
74     return;
75 }
76 
OnFlashlightStatusChanged(const std::string & cameraID,const FlashStatus flashStatus) const77 void AppCallback::OnFlashlightStatusChanged(const std::string& cameraID, const FlashStatus flashStatus) const
78 {
79     MEDIA_DEBUG_LOG("AppCallback::OnFlashlightStatusChanged() is called!");
80     switch (flashStatus) {
81         case FLASH_STATUS_OFF: {
82             MEDIA_DEBUG_LOG(
83                 "AppCallback::OnFlashlightStatusChanged %{public}s: FLASH_STATUS_OFF", cameraID.c_str());
84             g_camFlashMap[cameraID] = false;
85             break;
86         }
87         case FLASH_STATUS_ON: {
88             MEDIA_DEBUG_LOG("AppCallback::OnFlashlightStatusChanged %{public}s: FLASH_STATUS_ON", cameraID.c_str());
89             g_camFlashMap[cameraID] = true;
90             break;
91         }
92         case FLASH_STATUS_UNAVAILABLE: {
93             MEDIA_DEBUG_LOG(
94                 "AppCallback::OnFlashlightStatusChanged %{public}s: FLASH_STATUS_UNAVAILABLE", cameraID.c_str());
95             g_camFlashMap.erase(cameraID);
96             break;
97         }
98         default: {
99             MEDIA_DEBUG_LOG("AppCallback::OnFlashlightStatusChanged %{public}s: unknown", cameraID.c_str());
100             EXPECT_TRUE(false);
101         }
102     }
103     return;
104 }
105 
OnTorchStatusChange(const TorchStatusInfo & torchStatusInfo) const106 void AppCallback::OnTorchStatusChange(const TorchStatusInfo &torchStatusInfo) const
107 {
108     MEDIA_DEBUG_LOG("TorchListener::OnTorchStatusChange called %{public}d %{public}d %{public}f",
109         torchStatusInfo.isTorchAvailable, torchStatusInfo.isTorchActive, torchStatusInfo.torchLevel);
110     g_torchInfo = torchStatusInfo;
111     return;
112 }
113 
OnError(const int32_t errorType,const int32_t errorMsg) const114 void AppCallback::OnError(const int32_t errorType, const int32_t errorMsg) const
115 {
116     MEDIA_DEBUG_LOG("AppCallback::OnError errorType: %{public}d, errorMsg: %{public}d", errorType, errorMsg);
117     g_camInputOnError = true;
118     if (errorType == CAMERA_DEVICE_PREEMPTED) {
119         g_sessionclosed = true;
120     }
121     return;
122 }
123 
OnResult(const uint64_t timestamp,const std::shared_ptr<OHOS::Camera::CameraMetadata> & result) const124 void AppCallback::OnResult(const uint64_t timestamp, const std::shared_ptr<OHOS::Camera::CameraMetadata>& result) const
125 {
126     MEDIA_INFO_LOG("CameraDeviceServiceCallback::OnResult() is called!");
127 
128     if (result != nullptr) {
129         g_metaResult = result;
130         common_metadata_header_t* data = result->get();
131         std::vector<int32_t> fpsRange;
132         camera_metadata_item_t entry;
133         int ret = OHOS::Camera::FindCameraMetadataItem(data, OHOS_ABILITY_FPS_RANGES, &entry);
134         MEDIA_INFO_LOG("CameraDeviceServiceCallback::FindCameraMetadataItem() %{public}d", ret);
135         if (ret != 0) {
136             MEDIA_INFO_LOG("demo test: get OHOS_ABILITY_FPS_RANGES error");
137         }
138         uint32_t count = entry.count;
139         MEDIA_INFO_LOG("demo test: fpsRange count  %{public}d", count);
140         for (uint32_t i = 0; i < count; i++) {
141             fpsRange.push_back(*(entry.data.i32 + i));
142         }
143         for (auto it = fpsRange.begin(); it != fpsRange.end(); it++) {
144             MEDIA_INFO_LOG("demo test: fpsRange %{public}d ", *it);
145         }
146     }
147 }
148 
OnCaptureStarted(const int32_t captureId) const149 void AppCallback::OnCaptureStarted(const int32_t captureId) const
150 {
151     MEDIA_DEBUG_LOG("AppCallback::OnCaptureStarted captureId: %{public}d", captureId);
152     g_photoEvents[static_cast<int>(CAM_PHOTO_EVENTS::CAM_PHOTO_CAPTURE_START)] = 1;
153     return;
154 }
155 
OnCaptureStarted(const int32_t captureId,uint32_t exposureTime) const156 void AppCallback::OnCaptureStarted(const int32_t captureId, uint32_t exposureTime) const
157 {
158     MEDIA_DEBUG_LOG("AppCallback::OnCaptureStarted captureId: %{public}d", captureId);
159     g_photoEvents[static_cast<int>(CAM_PHOTO_EVENTS::CAM_PHOTO_CAPTURE_START)] = 1;
160     return;
161 }
162 
OnCaptureEnded(const int32_t captureId,const int32_t frameCount) const163 void AppCallback::OnCaptureEnded(const int32_t captureId, const int32_t frameCount) const
164 {
165     MEDIA_DEBUG_LOG("AppCallback::OnCaptureEnded captureId: %{public}d, frameCount: %{public}d",
166                     captureId, frameCount);
167     g_photoEvents[static_cast<int>(CAM_PHOTO_EVENTS::CAM_PHOTO_CAPTURE_END)] = 1;
168     return;
169 }
170 
OnFrameShutter(const int32_t captureId,const uint64_t timestamp) const171 void AppCallback::OnFrameShutter(const int32_t captureId, const uint64_t timestamp) const
172 {
173     MEDIA_DEBUG_LOG(
174         "AppCallback::OnFrameShutter captureId: %{public}d, timestamp: %{public}" PRIu64, captureId, timestamp);
175     g_photoEvents[static_cast<int>(CAM_PHOTO_EVENTS::CAM_PHOTO_FRAME_SHUTTER)] = 1;
176     return;
177 }
178 
OnFrameShutterEnd(const int32_t captureId,const uint64_t timestamp) const179 void AppCallback::OnFrameShutterEnd(const int32_t captureId, const uint64_t timestamp) const
180 {
181     MEDIA_DEBUG_LOG(
182         "AppCallback::OnFrameShutterEnd captureId: %{public}d, timestamp: %{public}" PRIu64, captureId, timestamp);
183     g_photoEvents[static_cast<int>(CAM_PHOTO_EVENTS::CAM_PHOTO_FRAME_SHUTTER_END)] = 1;
184     return;
185 }
186 
OnCaptureReady(const int32_t captureId,const uint64_t timestamp) const187 void AppCallback::OnCaptureReady(const int32_t captureId, const uint64_t timestamp) const
188 {
189     MEDIA_DEBUG_LOG(
190         "AppCallback::OnCaptureReady captureId: %{public}d, timestamp: %{public}" PRIu64, captureId, timestamp);
191     g_photoEvents[static_cast<int>(CAM_PHOTO_EVENTS::CAM_PHOTO_CAPTURE_READY)] = 1;
192     return;
193 }
194 
OnEstimatedCaptureDuration(const int32_t duration) const195 void AppCallback::OnEstimatedCaptureDuration(const int32_t duration) const
196 {
197     MEDIA_DEBUG_LOG("AppCallback::OnEstimatedCaptureDuration duration: %{public}d", duration);
198     g_photoEvents[static_cast<int>(CAM_PHOTO_EVENTS::CAM_PHOTO_ESTIMATED_CAPTURE_DURATION)] = 1;
199     return;
200 }
201 
OnCaptureError(const int32_t captureId,const int32_t errorCode) const202 void AppCallback::OnCaptureError(const int32_t captureId, const int32_t errorCode) const
203 {
204     MEDIA_DEBUG_LOG(
205         "AppCallback::OnCaptureError captureId: %{public}d, errorCode: %{public}d", captureId, errorCode);
206     g_photoEvents[static_cast<int>(CAM_PHOTO_EVENTS::CAM_PHOTO_CAPTURE_ERR)] = 1;
207     return;
208 }
209 
OnFrameStarted() const210 void AppCallback::OnFrameStarted() const
211 {
212     MEDIA_DEBUG_LOG("AppCallback::OnFrameStarted");
213     g_previewEvents[static_cast<int>(CAM_PREVIEW_EVENTS::CAM_PREVIEW_FRAME_START)] = 1;
214     return;
215 }
OnFrameEnded(const int32_t frameCount) const216 void AppCallback::OnFrameEnded(const int32_t frameCount) const
217 {
218     MEDIA_DEBUG_LOG("AppCallback::OnFrameEnded frameCount: %{public}d", frameCount);
219     g_previewEvents[static_cast<int>(CAM_PREVIEW_EVENTS::CAM_PREVIEW_FRAME_END)] = 1;
220     return;
221 }
OnError(const int32_t errorCode) const222 void AppCallback::OnError(const int32_t errorCode) const
223 {
224     MEDIA_DEBUG_LOG("AppCallback::OnError errorCode: %{public}d", errorCode);
225     g_previewEvents[static_cast<int>(CAM_PREVIEW_EVENTS::CAM_PREVIEW_FRAME_ERR)] = 1;
226     return;
227 }
228 
OnOfflineDeliveryFinished(const int32_t captureId) const229 void AppCallback::OnOfflineDeliveryFinished(const int32_t captureId) const
230 {
231     MEDIA_DEBUG_LOG("AppCallback::OnOfflineDeliveryFinished captureId: %{public}d", captureId);
232     g_photoEvents[static_cast<int>(CAM_PHOTO_EVENTS::CAM_PHOTO_OFFLINE_PHOTOOUTPUT)] = 1;
233     return;
234 }
235 
OnSketchStatusDataChanged(const SketchStatusData & statusData) const236 void AppCallback::OnSketchStatusDataChanged(const SketchStatusData& statusData) const
237 {
238     MEDIA_DEBUG_LOG("AppCallback::OnSketchStatusDataChanged");
239     g_previewEvents[static_cast<int>(CAM_PREVIEW_EVENTS::CAM_PREVIEW_SKETCH_STATUS_CHANGED)] = 1;
240     g_sketchStatus.push_back(static_cast<int32_t>(statusData.status));
241     return;
242 }
OnMacroStatusChanged(MacroStatus status)243 void AppCallback::OnMacroStatusChanged(MacroStatus status)
244 {
245     MEDIA_DEBUG_LOG("AppCallback::OnMacroStatusChanged");
246     if (status == MacroStatus::IDLE) {
247         g_macroEvents[static_cast<int>(CAM_MACRO_DETECT_EVENTS::CAM_MACRO_EVENT_IDLE)] = 1;
248         g_macroEvents[static_cast<int>(CAM_MACRO_DETECT_EVENTS::CAM_MACRO_EVENT_ACTIVE)] = 0;
249     } else if (status == MacroStatus::ACTIVE) {
250         g_macroEvents[static_cast<int>(CAM_MACRO_DETECT_EVENTS::CAM_MACRO_EVENT_ACTIVE)] = 1;
251         g_macroEvents[static_cast<int>(CAM_MACRO_DETECT_EVENTS::CAM_MACRO_EVENT_IDLE)] = 0;
252     }
253     return;
254 }
255 
OnFeatureDetectionStatusChanged(SceneFeature feature,FeatureDetectionStatus status)256 void AppCallback::OnFeatureDetectionStatusChanged(SceneFeature feature, FeatureDetectionStatus status)
257 {
258     MEDIA_DEBUG_LOG("AppCallback::OnFeatureDetectionStatusChanged");
259     if (feature == SceneFeature::FEATURE_MOON_CAPTURE_BOOST) {
260         if (status == FeatureDetectionStatus::IDLE) {
261             g_moonCaptureBoostEvents[static_cast<int>(
262                 CAM_MOON_CAPTURE_BOOST_EVENTS::CAM_MOON_CAPTURE_BOOST_EVENT_IDLE)] = 1;
263             g_moonCaptureBoostEvents[static_cast<int>(
264                 CAM_MOON_CAPTURE_BOOST_EVENTS::CAM_MOON_CAPTURE_BOOST_EVENT_ACTIVE)] = 0;
265         } else if (status == FeatureDetectionStatus::ACTIVE) {
266             g_moonCaptureBoostEvents[static_cast<int>(
267                 CAM_MOON_CAPTURE_BOOST_EVENTS::CAM_MOON_CAPTURE_BOOST_EVENT_ACTIVE)] = 1;
268             g_moonCaptureBoostEvents[static_cast<int>(
269                 CAM_MOON_CAPTURE_BOOST_EVENTS::CAM_MOON_CAPTURE_BOOST_EVENT_IDLE)] = 0;
270         }
271     }
272 }
273 
IsFeatureSubscribed(SceneFeature feature)274 bool AppCallback::IsFeatureSubscribed(SceneFeature feature)
275 {
276     return true;
277 }
278 
OnBrightnessStatusChanged(bool state)279 void AppCallback::OnBrightnessStatusChanged(bool state)
280 {
281     MEDIA_DEBUG_LOG("AppCallback::OnBrightnessStatusChanged");
282     g_brightnessStatusChanged = true;
283 }
284 
OnSlowMotionState(const SlowMotionState state)285 void AppCallback::OnSlowMotionState(const SlowMotionState state)
286 {
287     MEDIA_DEBUG_LOG("AppCallback::OnSlowMotionState");
288     g_slowMotionStatusChanged = true;
289 }
OnFoldStatusChanged(const FoldStatusInfo & foldStatusInfo) const290 void AppCallback::OnFoldStatusChanged(const FoldStatusInfo &foldStatusInfo) const
291 {
292     MEDIA_DEBUG_LOG("AppCallback::OnFoldStatusChanged");
293     return;
294 }
OnLcdFlashStatusChanged(LcdFlashStatusInfo lcdFlashStatusInfo)295 void AppCallback::OnLcdFlashStatusChanged(LcdFlashStatusInfo lcdFlashStatusInfo)
296 {
297     MEDIA_DEBUG_LOG("AppCallback::OnLcdFlashStatusChanged");
298 }
299 
OnFrameStarted() const300 void AppVideoCallback::OnFrameStarted() const
301 {
302     MEDIA_DEBUG_LOG("AppVideoCallback::OnFrameStarted");
303     g_videoEvents[static_cast<int>(CAM_VIDEO_EVENTS::CAM_VIDEO_FRAME_START)] = 1;
304     return;
305 }
OnFrameEnded(const int32_t frameCount) const306 void AppVideoCallback::OnFrameEnded(const int32_t frameCount) const
307 {
308     MEDIA_DEBUG_LOG("AppVideoCallback::OnFrameEnded frameCount: %{public}d", frameCount);
309     g_videoEvents[static_cast<int>(CAM_VIDEO_EVENTS::CAM_VIDEO_FRAME_END)] = 1;
310     return;
311 }
OnError(const int32_t errorCode) const312 void AppVideoCallback::OnError(const int32_t errorCode) const
313 {
314     MEDIA_DEBUG_LOG("AppVideoCallback::OnError errorCode: %{public}d", errorCode);
315     g_videoEvents[static_cast<int>(CAM_VIDEO_EVENTS::CAM_VIDEO_FRAME_ERR)] = 1;
316     return;
317 }
OnDeferredVideoEnhancementInfo(const CaptureEndedInfoExt info) const318 void AppVideoCallback::OnDeferredVideoEnhancementInfo(const CaptureEndedInfoExt info) const
319 {
320     MEDIA_DEBUG_LOG("AppVideoCallback::OnDeferredVideoEnhancementInfo");
321     return;
322 }
323 
OnMetadataObjectsAvailable(std::vector<sptr<MetadataObject>> metaObjects) const324 void AppMetadataCallback::OnMetadataObjectsAvailable(std::vector<sptr<MetadataObject>> metaObjects) const
325 {
326     MEDIA_DEBUG_LOG("AppMetadataCallback::OnMetadataObjectsAvailable received");
327 }
OnError(int32_t errorCode) const328 void AppMetadataCallback::OnError(int32_t errorCode) const
329 {
330     MEDIA_DEBUG_LOG("AppMetadataCallback::OnError %{public}d", errorCode);
331 }
332 
OnError(int32_t errorCode)333 void AppSessionCallback::OnError(int32_t errorCode)
334 {
335     MEDIA_DEBUG_LOG("AppMetadataCallback::OnError %{public}d", errorCode);
336     return;
337 }
338 
CreatePhotoOutput(int32_t width,int32_t height)339 sptr<CaptureOutput> CameraSessionModuleTest::CreatePhotoOutput(int32_t width, int32_t height)
340 {
341     sptr<IConsumerSurface> surface = IConsumerSurface::Create();
342     CameraFormat photoFormat = photoFormat_;
343     Size photoSize;
344     photoSize.width = width;
345     photoSize.height = height;
346     Profile photoProfile = Profile(photoFormat, photoSize);
347     sptr<CaptureOutput> photoOutput = nullptr;
348     sptr<IBufferProducer> surfaceProducer = surface->GetProducer();
349     manager_->CreatePhotoOutput(surfaceProducer);
350     photoOutput = manager_->CreatePhotoOutput(photoProfile, surfaceProducer);
351     return photoOutput;
352 }
353 
CreatePhotoOutput()354 sptr<CaptureOutput> CameraSessionModuleTest::CreatePhotoOutput()
355 {
356     sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoWidth_, photoHeight_);
357     return photoOutput;
358 }
359 
CreatePreviewOutput(int32_t width,int32_t height)360 sptr<CaptureOutput> CameraSessionModuleTest::CreatePreviewOutput(int32_t width, int32_t height)
361 {
362     sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
363     sptr<SurfaceListener> listener = new SurfaceListener("Preview", SurfaceType::PREVIEW, g_previewFd, previewSurface);
364     previewSurface->RegisterConsumerListener((sptr<IBufferConsumerListener>&)listener);
365     Size previewSize;
366     previewSize.width = previewProfiles_[0].GetSize().width;
367     previewSize.height = previewProfiles_[0].GetSize().height;
368     previewSurface->SetUserData(CameraManager::surfaceFormat, std::to_string(previewProfiles_[0].GetCameraFormat()));
369     previewSurface->SetDefaultWidthAndHeight(previewSize.width, previewSize.height);
370 
371     sptr<IBufferProducer> bp = previewSurface->GetProducer();
372     sptr<Surface> pSurface = Surface::CreateSurfaceAsProducer(bp);
373 
374     sptr<CaptureOutput> previewOutput = nullptr;
375     previewOutput = manager_->CreatePreviewOutput(previewProfiles_[0], pSurface);
376     return previewOutput;
377 }
378 
GetSketchPreviewProfile()379 std::shared_ptr<Profile> CameraSessionModuleTest::GetSketchPreviewProfile()
380 {
381     std::shared_ptr<Profile> returnProfile;
382     Size size720P { 1280, 720 };
383     Size size1080P { 1920, 1080 };
384     for (const auto& profile : previewProfiles_) {
385         if (profile.format_ != CAMERA_FORMAT_YUV_420_SP) {
386             continue;
387         }
388         if (profile.size_.width == size720P.width && profile.size_.height == size720P.height) {
389             returnProfile = std::make_shared<Profile>(profile);
390             return returnProfile;
391         }
392         if (profile.size_.width == size1080P.width && profile.size_.height == size1080P.height) {
393             returnProfile = std::make_shared<Profile>(profile);
394             return returnProfile;
395         }
396         if (profile.size_.height < SKETCH_PREVIEW_MIN_HEIGHT || profile.size_.width > SKETCH_PREVIEW_MAX_WIDTH) {
397             continue;
398         }
399         if (returnProfile == nullptr) {
400             returnProfile = std::make_shared<Profile>(profile);
401             continue;
402         }
403         if (profile.size_.width > returnProfile->size_.width) {
404             returnProfile = std::make_shared<Profile>(profile);
405         }
406     }
407     return returnProfile;
408 }
409 
CreatePreviewOutput(Profile & profile)410 sptr<CaptureOutput> CameraSessionModuleTest::CreatePreviewOutput(Profile& profile)
411 {
412     sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
413     sptr<SurfaceListener> listener = new SurfaceListener("Preview", SurfaceType::PREVIEW, g_previewFd, previewSurface);
414     previewSurface->RegisterConsumerListener((sptr<IBufferConsumerListener>&)listener);
415     Size previewSize = profile.GetSize();
416     previewSurface->SetUserData(CameraManager::surfaceFormat, std::to_string(profile.GetCameraFormat()));
417     previewSurface->SetDefaultWidthAndHeight(previewSize.width, previewSize.height);
418 
419     sptr<IBufferProducer> bp = previewSurface->GetProducer();
420     sptr<Surface> pSurface = Surface::CreateSurfaceAsProducer(bp);
421 
422     sptr<CaptureOutput> previewOutput = nullptr;
423     previewOutput = manager_->CreatePreviewOutput(profile, pSurface);
424     return previewOutput;
425 }
426 
CreateSketchSurface(CameraFormat cameraFormat)427 sptr<Surface> CameraSessionModuleTest::CreateSketchSurface(CameraFormat cameraFormat)
428 {
429     sptr<IConsumerSurface> sketchSurface = IConsumerSurface::Create();
430     sptr<SurfaceListener> listener = new SurfaceListener("Sketch", SurfaceType::SKETCH, g_sketchFd, sketchSurface);
431     sketchSurface->RegisterConsumerListener((sptr<IBufferConsumerListener>&)listener);
432     sketchSurface->SetUserData(CameraManager::surfaceFormat, std::to_string(cameraFormat));
433     sketchSurface->SetDefaultWidthAndHeight(SKETCH_DEFAULT_WIDTH, SKETCH_DEFAULT_HEIGHT);
434     sptr<IBufferProducer> bp = sketchSurface->GetProducer();
435     return Surface::CreateSurfaceAsProducer(bp);
436 }
437 
CreatePreviewOutput()438 sptr<CaptureOutput> CameraSessionModuleTest::CreatePreviewOutput()
439 {
440     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewWidth_, previewHeight_);
441     return previewOutput;
442 }
443 
CreateVideoOutput(int32_t width,int32_t height)444 sptr<CaptureOutput> CameraSessionModuleTest::CreateVideoOutput(int32_t width, int32_t height)
445 {
446     sptr<IConsumerSurface> surface = IConsumerSurface::Create();
447     sptr<SurfaceListener> videoSurfaceListener =
448         new (std::nothrow) SurfaceListener("Video", SurfaceType::VIDEO, g_videoFd, surface);
449     if (videoSurfaceListener == nullptr) {
450         MEDIA_ERR_LOG("Failed to create new SurfaceListener");
451         return nullptr;
452     }
453     surface->RegisterConsumerListener((sptr<IBufferConsumerListener>&)videoSurfaceListener);
454     sptr<IBufferProducer> videoProducer = surface->GetProducer();
455     sptr<Surface> videoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
456     VideoProfile videoProfile = videoProfiles_[0];
457     sptr<CaptureOutput> videoOutput = nullptr;
458     videoOutput = manager_->CreateVideoOutput(videoProfile, videoSurface);
459     return videoOutput;
460 }
461 
CreateVideoOutput(VideoProfile & videoProfile)462 sptr<CaptureOutput> CameraSessionModuleTest::CreateVideoOutput(VideoProfile& videoProfile)
463 {
464     sptr<IConsumerSurface> surface = IConsumerSurface::Create();
465     sptr<SurfaceListener> videoSurfaceListener =
466         new (std::nothrow) SurfaceListener("Video", SurfaceType::VIDEO, g_videoFd, surface);
467     if (videoSurfaceListener == nullptr) {
468         MEDIA_ERR_LOG("Failed to create new SurfaceListener");
469         return nullptr;
470     }
471     surface->RegisterConsumerListener((sptr<IBufferConsumerListener>&)videoSurfaceListener);
472     sptr<IBufferProducer> videoProducer = surface->GetProducer();
473     sptr<Surface> videoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
474     sptr<CaptureOutput> videoOutput = nullptr;
475     videoOutput = manager_->CreateVideoOutput(videoProfile, videoSurface);
476     return videoOutput;
477 }
478 
CreateVideoOutput()479 sptr<CaptureOutput> CameraSessionModuleTest::CreateVideoOutput()
480 {
481     sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoWidth_, videoHeight_);
482     return videoOutput;
483 }
484 
CreatePhotoOutput(Profile profile)485 sptr<CaptureOutput> CameraSessionModuleTest::CreatePhotoOutput(Profile profile)
486 {
487     sptr<IConsumerSurface> surface = IConsumerSurface::Create();
488     Size photoSize;
489     photoSize.width = profile.GetSize().width;
490     photoSize.height = profile.GetSize().height;
491     sptr<CaptureOutput> photoOutput = nullptr;
492     sptr<IBufferProducer> surfaceProducer = surface->GetProducer();
493     photoOutput = manager_->CreatePhotoOutput(profile, surfaceProducer);
494     return photoOutput;
495 }
496 
ConfigScanSession(sptr<CaptureOutput> & previewOutput_1,sptr<CaptureOutput> & previewOutput_2)497 void CameraSessionModuleTest::ConfigScanSession(sptr<CaptureOutput> &previewOutput_1,
498                                                 sptr<CaptureOutput> &previewOutput_2)
499 {
500     if (session_) {
501         MEDIA_INFO_LOG("old session exist, need release");
502         session_->Release();
503     }
504     scanSession_ = manager_ -> CreateCaptureSession(SceneMode::SCAN);
505     ASSERT_NE(scanSession_, nullptr);
506 
507     int32_t intResult = scanSession_->BeginConfig();
508     EXPECT_EQ(intResult, 0);
509 
510     intResult = scanSession_->AddInput(input_);
511     EXPECT_EQ(intResult, 0);
512 
513     previewOutput_1 = CreatePreviewOutput();
514     ASSERT_NE(previewOutput_1, nullptr);
515 
516     intResult = scanSession_->AddOutput(previewOutput_1);
517     EXPECT_EQ(intResult, 0);
518 
519     previewOutput_2 = CreatePreviewOutput();
520     ASSERT_NE(previewOutput_2, nullptr);
521 
522     intResult = scanSession_->AddOutput(previewOutput_2);
523     EXPECT_EQ(intResult, 0);
524 
525     intResult = scanSession_->CommitConfig();
526     EXPECT_EQ(intResult, 0);
527 }
528 
ConfigSlowMotionSession(sptr<CaptureOutput> & previewOutput_frame,sptr<CaptureOutput> & videoOutput_frame)529 void CameraSessionModuleTest::ConfigSlowMotionSession(sptr<CaptureOutput> &previewOutput_frame,
530                                                       sptr<CaptureOutput> &videoOutput_frame)
531 {
532     if (session_) {
533         MEDIA_INFO_LOG("old session exist, need release");
534         session_->Release();
535     }
536     sptr<CaptureSession> captureSession = manager_->CreateCaptureSession(SceneMode::SLOW_MOTION);
537     slowMotionSession_ = static_cast<SlowMotionSession*>(captureSession.GetRefPtr());
538     slowMotionSession_->SetCallback(std::make_shared<AppCallback>());
539     ASSERT_NE(slowMotionSession_, nullptr);
540 
541     int32_t intResult = slowMotionSession_->BeginConfig();
542     EXPECT_EQ(intResult, 0);
543 
544     intResult = slowMotionSession_->AddInput(input_);
545     EXPECT_EQ(intResult, 0);
546 
547     Profile previewProfile = previewProfiles_[0];
548     const int32_t sizeOfWidth = 1920;
549     const int32_t sizeOfHeight = 1080;
550     for (auto item : previewProfiles_) {
551         if (item.GetSize().width == sizeOfWidth && item.GetSize().height == sizeOfHeight) {
552             previewProfile = item;
553             break;
554         }
555     }
556     sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
557     sptr<SurfaceListener> listener = new SurfaceListener("Preview", SurfaceType::PREVIEW, g_previewFd, previewSurface);
558     previewSurface->RegisterConsumerListener((sptr<IBufferConsumerListener>&)listener);
559     Size previewSize;
560     previewSize.width = previewProfile.GetSize().width;
561     previewSize.height = previewProfile.GetSize().height;
562     previewSurface->SetUserData(CameraManager::surfaceFormat, std::to_string(previewProfile.GetCameraFormat()));
563     previewSurface->SetDefaultWidthAndHeight(previewSize.width, previewSize.height);
564     sptr<IBufferProducer> bp = previewSurface->GetProducer();
565     sptr<Surface> pSurface = Surface::CreateSurfaceAsProducer(bp);
566     sptr<CaptureOutput> previewOutput = nullptr;
567     previewOutput_frame = manager_->CreatePreviewOutput(previewProfile, pSurface);
568     ASSERT_NE(previewOutput_frame, nullptr);
569 
570     sptr<IConsumerSurface> surface = IConsumerSurface::Create();
571     sptr<SurfaceListener> videoSurfaceListener =
572         new (std::nothrow) SurfaceListener("Video", SurfaceType::VIDEO, g_videoFd, surface);
573     surface->RegisterConsumerListener((sptr<IBufferConsumerListener>&)videoSurfaceListener);
574     ASSERT_NE(videoSurfaceListener, nullptr);
575 
576     sptr<IBufferProducer> videoProducer = surface->GetProducer();
577     sptr<Surface> videoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
578     std::vector<int32_t> fps = {120, 120};
579     Size size = {.width = 1920, .height = 1080};
580     VideoProfile videoProfile = VideoProfile(CameraFormat::CAMERA_FORMAT_YUV_420_SP, size, fps);
581     videoOutput_frame = manager_->CreateVideoOutput(videoProfile, videoSurface);
582     ASSERT_NE(videoOutput_frame, nullptr);
583 }
584 
ConfigVideoSession(sptr<CaptureOutput> & previewOutput_frame,sptr<CaptureOutput> & videoOutput_frame)585 void CameraSessionModuleTest::ConfigVideoSession(sptr<CaptureOutput> &previewOutput_frame,
586                                                  sptr<CaptureOutput> &videoOutput_frame)
587 {
588     if (session_) {
589         MEDIA_INFO_LOG("old session exist, need release");
590         session_->Release();
591     }
592     videoSession_ = manager_ -> CreateCaptureSession(SceneMode::VIDEO);
593     ASSERT_NE(videoSession_, nullptr);
594 
595     int32_t intResult = videoSession_->BeginConfig();
596     EXPECT_EQ(intResult, 0);
597 
598     intResult = videoSession_->AddInput(input_);
599     EXPECT_EQ(intResult, 0);
600 
601     Profile previewProfile = previewProfiles_[0];
602     const int32_t sizeOfWidth = 1920;
603     const int32_t sizeOfHeight = 1080;
604     for (auto item : previewProfiles_) {
605         if (item.GetSize().width == sizeOfWidth && item.GetSize().height == sizeOfHeight) {
606             previewProfile = item;
607             break;
608         }
609     }
610     sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
611     sptr<SurfaceListener> listener = new SurfaceListener("Preview", SurfaceType::PREVIEW, g_previewFd, previewSurface);
612     previewSurface->RegisterConsumerListener((sptr<IBufferConsumerListener>&)listener);
613     Size previewSize;
614     previewSize.width = previewProfile.GetSize().width;
615     previewSize.height = previewProfile.GetSize().height;
616     previewSurface->SetUserData(CameraManager::surfaceFormat, std::to_string(previewProfile.GetCameraFormat()));
617     previewSurface->SetDefaultWidthAndHeight(previewSize.width, previewSize.height);
618     sptr<IBufferProducer> bp = previewSurface->GetProducer();
619     sptr<Surface> pSurface = Surface::CreateSurfaceAsProducer(bp);
620     sptr<CaptureOutput> previewOutput = nullptr;
621     previewOutput_frame = manager_->CreatePreviewOutput(previewProfile, pSurface);
622     ASSERT_NE(previewOutput_frame, nullptr);
623 
624     sptr<IConsumerSurface> surface = IConsumerSurface::Create();
625     sptr<SurfaceListener> videoSurfaceListener =
626         new (std::nothrow) SurfaceListener("Video", SurfaceType::VIDEO, g_videoFd, surface);
627     ASSERT_NE(videoSurfaceListener, nullptr);
628     surface->RegisterConsumerListener((sptr<IBufferConsumerListener>&)videoSurfaceListener);
629 
630     sptr<IBufferProducer> videoProducer = surface->GetProducer();
631     sptr<Surface> videoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
632     VideoProfile videoProfile = videoProfiles_[0];
633     for (auto item : videoProfiles_) {
634         if (item.GetSize().width == sizeOfWidth && item.GetSize().height == sizeOfHeight) {
635             videoProfile = item;
636             break;
637         }
638     }
639     videoOutput_frame = manager_->CreateVideoOutput(videoProfile, videoSurface);
640     ASSERT_NE(videoOutput_frame, nullptr);
641 }
642 
GetSupportedOutputCapability()643 void CameraSessionModuleTest::GetSupportedOutputCapability()
644 {
645     sptr<CameraManager> camManagerObj = CameraManager::GetInstance();
646     std::vector<sptr<CameraDevice>> cameraObjList = camManagerObj->GetSupportedCameras();
647     ASSERT_GE(cameraObjList.size(), CAMERA_NUMBER);
648     sptr<CameraOutputCapability> outputcapability = camManagerObj->GetSupportedOutputCapability(cameraObjList[1]);
649     previewProfiles_ = outputcapability->GetPreviewProfiles();
650     ASSERT_TRUE(!previewProfiles_.empty());
651 
652     photoProfiles_ = outputcapability->GetPhotoProfiles();
653     ASSERT_TRUE(!photoProfiles_.empty());
654 
655     videoProfiles_ = outputcapability->GetVideoProfiles();
656     ASSERT_TRUE(!videoProfiles_.empty());
657     return;
658 }
659 
SelectProfileByRatioAndFormat(sptr<CameraOutputCapability> & modeAbility,camera_rational_t ratio,CameraFormat format)660 Profile CameraSessionModuleTest::SelectProfileByRatioAndFormat(sptr<CameraOutputCapability>& modeAbility,
661                                                                camera_rational_t ratio, CameraFormat format)
662 {
663     uint32_t width;
664     uint32_t height;
665     Profile profile;
666     std::vector<Profile> profiles;
667 
668     if (format == photoFormat_) {
669         profiles = modeAbility->GetPhotoProfiles();
670     } else if (format == previewFormat_) {
671         profiles = modeAbility->GetPreviewProfiles();
672     }
673 
674     for (int i = 0; i < profiles.size(); ++i) {
675         width = profiles[i].GetSize().width;
676         height = profiles[i].GetSize().height;
677         if ((width % ratio.numerator == 0) && (height % ratio.denominator == 0)) {
678             profile = profiles[i];
679             break;
680         }
681     }
682     MEDIA_ERR_LOG("SelectProfileByRatioAndFormat format:%{public}d width:%{public}d height:%{public}d",
683         profile.format_, profile.size_.width, profile.size_.height);
684     return profile;
685 }
686 
GetPreviewProfileByFormat(sptr<CameraOutputCapability> & modeAbility,uint32_t width,uint32_t height,CameraFormat format)687 std::optional<Profile> CameraSessionModuleTest::GetPreviewProfileByFormat(
688     sptr<CameraOutputCapability> &modeAbility, uint32_t width, uint32_t height, CameraFormat format)
689 {
690     std::vector<Profile> profiles = modeAbility->GetPreviewProfiles();
691     auto it = std::find_if(profiles.begin(), profiles.end(), [width, height, format](Profile &profile) {
692         return profile.GetSize().width == width && profile.GetSize().height == height &&
693                profile.GetCameraFormat() == format;
694     });
695     if (it != profiles.end()) {
696         MEDIA_ERR_LOG("GetPreviewProfileByFormat format:%{public}d width:%{public}d height:%{public}d",
697             it->GetCameraFormat(),
698             it->GetSize().width,
699             it->GetSize().height);
700         return *it;
701     } else {
702         MEDIA_ERR_LOG(
703             "No profile found for format:%{public}d width:%{public}d height:%{public}d", format, width, height);
704         return std::nullopt;
705     }
706 }
707 
GetVideoProfileByFormat(sptr<CameraOutputCapability> & modeAbility,uint32_t width,uint32_t height,CameraFormat videoFormat,uint32_t maxFps)708 std::optional<VideoProfile> CameraSessionModuleTest::GetVideoProfileByFormat(
709     sptr<CameraOutputCapability> &modeAbility, uint32_t width, uint32_t height, CameraFormat videoFormat,
710     uint32_t maxFps)
711 {
712     std::vector<VideoProfile> profiles = modeAbility->GetVideoProfiles();
713     auto it =
714         std::find_if(profiles.begin(), profiles.end(), [width, height, videoFormat, maxFps](VideoProfile &profile) {
715             std::cout << "videoProfile found format: " << profile.GetCameraFormat()
716                       << " width: " << profile.GetSize().width << " height: " << profile.GetSize().height
717                       << " maxFps: " << profile.GetFrameRates()[1] << std::endl;
718             return profile.GetSize().width == width && profile.GetSize().height == height &&
719                    profile.GetCameraFormat() == videoFormat && profile.GetFrameRates()[1] == maxFps;
720         });
721     if (it != profiles.end()) {
722         MEDIA_ERR_LOG("videoProfile found format:%{public}d width:%{public}d height:%{public}d maxFps:%{public}d",
723             it->GetCameraFormat(),
724             it->GetSize().width,
725             it->GetSize().height,
726             it->GetFrameRates()[1]);
727         return *it;
728     } else {
729         MEDIA_ERR_LOG("No videoProfile for format:%{public}d width:%{public}d height:%{public}d maxFps:%{public}d",
730             videoFormat,
731             width,
732             height,
733             maxFps);
734         return std::nullopt;
735     }
736 }
737 
IsSupportNow()738 bool CameraSessionModuleTest::IsSupportNow()
739 {
740     const char* deviveTypeString = GetDeviceType();
741     std::string deviveType = std::string(deviveTypeString);
742     if (deviveType.compare("default") == 0 ||
743         (cameras_[0] != nullptr && cameras_[0]->GetConnectionType() == CAMERA_CONNECTION_USB_PLUGIN)) {
744         return false;
745     }
746     return true;
747 }
748 
SetUpTestCase(void)749 void CameraSessionModuleTest::SetUpTestCase(void)
750 {
751     MEDIA_INFO_LOG("SetUpTestCase of camera test case!");
752 }
753 
TearDownTestCase(void)754 void CameraSessionModuleTest::TearDownTestCase(void)
755 {
756     MEDIA_INFO_LOG("TearDownTestCase of camera test case!");
757 }
758 
SetUpInit()759 void CameraSessionModuleTest::SetUpInit()
760 {
761     MEDIA_INFO_LOG("SetUpInit of camera test case!");
762     g_photoEvents.reset();
763     g_previewEvents.reset();
764     g_videoEvents.reset();
765     g_moonCaptureBoostEvents.reset();
766     g_macroEvents.reset();
767     g_camStatusMap.clear();
768     g_camFlashMap.clear();
769     g_sketchStatus.clear();
770     g_camInputOnError = false;
771     g_videoFd = -1;
772     g_previewFd = -1;
773     previewFormat_ = CAMERA_FORMAT_YUV_420_SP;
774     videoFormat_ = CAMERA_FORMAT_YUV_420_SP;
775     photoFormat_ = CAMERA_FORMAT_JPEG;
776     previewWidth_ = PREVIEW_DEFAULT_WIDTH;
777     previewHeight_ = PREVIEW_DEFAULT_HEIGHT;
778     photoWidth_ = PHOTO_DEFAULT_WIDTH;
779     photoHeight_ = PHOTO_DEFAULT_HEIGHT;
780     videoWidth_ = VIDEO_DEFAULT_WIDTH;
781     videoHeight_ = VIDEO_DEFAULT_HEIGHT;
782 }
783 
SetUp()784 void CameraSessionModuleTest::SetUp()
785 {
786     MEDIA_INFO_LOG("SetUp");
787     // set native token
788     SetNativeToken();
789 
790     SetUpInit();
791     manager_ = CameraManager::GetInstance();
792     ASSERT_NE(manager_, nullptr);
793     manager_->SetCallback(std::make_shared<AppCallback>());
794 
795     cameras_ = manager_->GetSupportedCameras();
796     ASSERT_TRUE(cameras_.size() != 0);
797 
798     input_ = manager_->CreateCameraInput(cameras_[0]);
799     ASSERT_NE(input_, nullptr);
800 
801     sptr<CameraManager> camManagerObj = CameraManager::GetInstance();
802     std::vector<sptr<CameraDevice>> cameraObjList = camManagerObj->GetSupportedCameras();
803     sptr<CameraOutputCapability> outputcapability = camManagerObj->GetSupportedOutputCapability(cameraObjList[0]);
804 
805     ProcessPreviewProfiles(outputcapability);
806     ASSERT_TRUE(!previewFormats_.empty());
807     ASSERT_TRUE(!previewSizes_.empty());
808     if (std::find(previewFormats_.begin(), previewFormats_.end(), CAMERA_FORMAT_YUV_420_SP) != previewFormats_.end()) {
809         previewFormat_ = CAMERA_FORMAT_YUV_420_SP;
810     } else {
811         previewFormat_ = previewFormats_[0];
812     }
813     photoProfiles_ = outputcapability->GetPhotoProfiles();
814 
815     for (auto i : photoProfiles_) {
816         photoFormats_.push_back(i.GetCameraFormat());
817         photoSizes_.push_back(i.GetSize());
818     }
819     ASSERT_TRUE(!photoFormats_.empty());
820     ASSERT_TRUE(!photoSizes_.empty());
821     photoFormat_ = photoFormats_[0];
822     videoProfiles_ = outputcapability->GetVideoProfiles();
823 
824     for (auto i : videoProfiles_) {
825         videoFormats_.push_back(i.GetCameraFormat());
826         videoSizes_.push_back(i.GetSize());
827         videoFrameRates_ = i.GetFrameRates();
828     }
829     ASSERT_TRUE(!videoFormats_.empty());
830     ASSERT_TRUE(!videoSizes_.empty());
831     ASSERT_TRUE(!videoFrameRates_.empty());
832     if (std::find(videoFormats_.begin(), videoFormats_.end(), CAMERA_FORMAT_YUV_420_SP) != videoFormats_.end()) {
833         videoFormat_ = CAMERA_FORMAT_YUV_420_SP;
834     } else {
835         videoFormat_ = videoFormats_[0];
836     }
837     ProcessSize();
838 }
839 
TearDown()840 void CameraSessionModuleTest::TearDown()
841 {
842     MEDIA_INFO_LOG("TearDown start");
843     if (session_) {
844         session_->Release();
845     }
846     if (scanSession_) {
847         scanSession_->Release();
848     }
849     if (input_) {
850         sptr<CameraInput> camInput = (sptr<CameraInput>&)input_;
851         camInput->Close();
852         input_->Release();
853     }
854     MEDIA_INFO_LOG("TearDown end");
855 }
856 
SetNativeToken()857 void CameraSessionModuleTest::SetNativeToken()
858 {
859     uint64_t tokenId;
860     const char* perms[2];
861     perms[0] = "ohos.permission.DISTRIBUTED_DATASYNC";
862     perms[1] = "ohos.permission.CAMERA";
863     NativeTokenInfoParams infoInstance = {
864         .dcapsNum = 0,
865         .permsNum = 2,
866         .aclsNum = 0,
867         .dcaps = NULL,
868         .perms = perms,
869         .acls = NULL,
870         .processName = "native_camera_tdd",
871         .aplStr = "system_basic",
872     };
873     tokenId = GetAccessTokenId(&infoInstance);
874     SetSelfTokenID(tokenId);
875     OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo();
876 }
877 
IsSceneModeSupported(SceneMode mode)878 bool CameraSessionModuleTest::IsSceneModeSupported(SceneMode mode)
879 {
880     MEDIA_INFO_LOG("IsSceneModeSupported start");
881     std::vector<SceneMode> modes = manager_->GetSupportedModes(cameras_[0]);
882     if (modes.size() == 0) {
883         MEDIA_ERR_LOG("IsSceneModeSupported: device does not support any scene mode!");
884         return false;
885     }
886     bool supportMode = false;
887     for (auto &it : modes) {
888         if (it == mode) {
889             supportMode = true;
890             break;
891         }
892     }
893     return supportMode;
894 }
895 
FilterPreviewProfiles(std::vector<Profile> & previewProfiles)896 void CameraSessionModuleTest::FilterPreviewProfiles(std::vector<Profile> &previewProfiles)
897 {
898     std::vector<Profile>::iterator itr = previewProfiles.begin();
899     while (itr != previewProfiles.end()) {
900         Profile profile = *itr;
901         if ((profile.size_.width == PRVIEW_WIDTH_176 && profile.size_.height == PRVIEW_HEIGHT_144) ||
902             (profile.size_.width == PRVIEW_WIDTH_480 && profile.size_.height == PRVIEW_HEIGHT_480) ||
903             (profile.size_.width == PRVIEW_WIDTH_640 && profile.size_.height == PRVIEW_WIDTH_640) ||
904             (profile.size_.width == PRVIEW_WIDTH_4096 && profile.size_.height == PRVIEW_HEIGHT_3072) ||
905             (profile.size_.width == PRVIEW_WIDTH_4160 && profile.size_.height == PRVIEW_HEIGHT_3120) ||
906             (profile.size_.width == PRVIEW_WIDTH_8192 && profile.size_.height == PRVIEW_HEIGHT_6144)) {
907             itr = previewProfiles.erase(itr);
908         } else {
909             itr++;
910         }
911     }
912 }
913 
ProcessPreviewProfiles(sptr<CameraOutputCapability> & outputcapability)914 void CameraSessionModuleTest::ProcessPreviewProfiles(sptr<CameraOutputCapability>& outputcapability)
915 {
916     previewProfiles_.clear();
917     std::vector<Profile> tempPreviewProfiles = outputcapability->GetPreviewProfiles();
918     for (const auto& profile : tempPreviewProfiles) {
919         if ((profile.size_.width == PRVIEW_WIDTH_176 && profile.size_.height == PRVIEW_HEIGHT_144) ||
920             (profile.size_.width == PRVIEW_WIDTH_480 && profile.size_.height == PRVIEW_HEIGHT_480) ||
921             (profile.size_.width == PRVIEW_WIDTH_640 && profile.size_.height == PRVIEW_WIDTH_640) ||
922             (profile.size_.width == PRVIEW_WIDTH_4096 && profile.size_.height == PRVIEW_HEIGHT_3072) ||
923             (profile.size_.width == PRVIEW_WIDTH_4160 && profile.size_.height == PRVIEW_HEIGHT_3120) ||
924             (profile.size_.width == PRVIEW_WIDTH_8192 && profile.size_.height == PRVIEW_HEIGHT_6144)) {
925             MEDIA_DEBUG_LOG("SetUp skip previewProfile width:%{public}d height:%{public}d",
926                 profile.size_.width, profile.size_.height);
927             continue;
928         }
929         previewProfiles_.push_back(profile);
930     }
931 
932     for (auto i : previewProfiles_) {
933         MEDIA_DEBUG_LOG("SetUp previewProfiles_ width:%{public}d height:%{public}d", i.size_.width, i.size_.height);
934         previewFormats_.push_back(i.GetCameraFormat());
935         previewSizes_.push_back(i.GetSize());
936     }
937 }
938 
ProcessSize()939 void CameraSessionModuleTest::ProcessSize()
940 {
941     Size size = previewSizes_.back();
942     previewWidth_ = size.width;
943     previewHeight_ = size.height;
944     size = photoSizes_.back();
945     photoWidth_ = size.width;
946     photoHeight_ = size.height;
947     size = videoSizes_.back();
948     videoWidth_ = size.width;
949     videoHeight_ = size.height;
950 
951     sptr<CameraInput> camInput = (sptr<CameraInput>&)input_;
952     camInput->Open();
953     session_ = manager_->CreateCaptureSession();
954     ASSERT_NE(session_, nullptr);
955 }
956 
957 /*
958  * Feature: Framework
959  * Function: Test aperture video session with photo output
960  * SubFunction: NA
961  * FunctionPoints: NA
962  * EnvConditions: NA
963  * CaseDescription: Test can not add photo output into aperture video session
964  */
965 HWTEST_F(CameraSessionModuleTest, aperture_video_session_moduletest_001, TestSize.Level0)
966 {
967     if (!IsSceneModeSupported(SceneMode::APERTURE_VIDEO)) {
968         return;
969     }
970 
971     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::APERTURE_VIDEO);
972     ASSERT_NE(outputCapability, nullptr);
973     auto previewProfiles = outputCapability->GetPreviewProfiles();
974     ASSERT_FALSE(previewProfiles.empty());
975     auto photoProfiles = outputCapability->GetPhotoProfiles();
976     ASSERT_TRUE(photoProfiles.empty());
977     auto outputCapabilityBase = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::CAPTURE);
978     ASSERT_NE(outputCapabilityBase, nullptr);
979     auto photoProfilesBase = outputCapabilityBase->GetPhotoProfiles();
980     ASSERT_FALSE(photoProfilesBase.empty());
981 
982     auto captureSession = manager_->CreateCaptureSession(SceneMode::APERTURE_VIDEO);
983     auto apertureVideoSession = static_cast<ApertureVideoSession*>(captureSession.GetRefPtr());
984     ASSERT_NE(apertureVideoSession, nullptr);
985     int32_t res = apertureVideoSession->BeginConfig();
986     EXPECT_EQ(res, 0);
987 
988     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
989     ASSERT_NE(input, nullptr);
990     input->Open();
991     res = apertureVideoSession->AddInput(input);
992     EXPECT_EQ(res, 0);
993     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
994     ASSERT_NE(previewOutput, nullptr);
995     EXPECT_TRUE(apertureVideoSession->CanAddOutput(previewOutput));
996     res = apertureVideoSession->AddOutput(previewOutput);
997     EXPECT_EQ(res, 0);
998     sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfilesBase[0]);
999     ASSERT_NE(photoOutput, nullptr);
1000     EXPECT_FALSE(apertureVideoSession->CanAddOutput(photoOutput));
1001 }
1002 
1003 /*
1004  * Feature: Framework
1005  * Function: Test aperture video session with video output
1006  * SubFunction: NA
1007  * FunctionPoints: NA
1008  * EnvConditions: NA
1009  * CaseDescription: Test can add video output into aperture video session
1010  */
1011 HWTEST_F(CameraSessionModuleTest, aperture_video_session_moduletest_002, TestSize.Level0)
1012 {
1013     if (!IsSceneModeSupported(SceneMode::APERTURE_VIDEO)) {
1014         return;
1015     }
1016 
1017     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::APERTURE_VIDEO);
1018     ASSERT_NE(outputCapability, nullptr);
1019     auto previewProfiles = outputCapability->GetPreviewProfiles();
1020     ASSERT_FALSE(previewProfiles.empty());
1021     auto videoProfiles = outputCapability->GetVideoProfiles();
1022     ASSERT_FALSE(videoProfiles.empty());
1023 
1024     auto captureSession = manager_->CreateCaptureSession(SceneMode::APERTURE_VIDEO);
1025     auto apertureVideoSession = static_cast<ApertureVideoSession*>(captureSession.GetRefPtr());
1026     ASSERT_NE(apertureVideoSession, nullptr);
1027     int32_t res = apertureVideoSession->BeginConfig();
1028     EXPECT_EQ(res, 0);
1029 
1030     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
1031     ASSERT_NE(input, nullptr);
1032     input->Open();
1033     res = apertureVideoSession->AddInput(input);
1034     EXPECT_EQ(res, 0);
1035     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
1036     ASSERT_NE(previewOutput, nullptr);
1037     EXPECT_TRUE(apertureVideoSession->CanAddOutput(previewOutput));
1038     res = apertureVideoSession->AddOutput(previewOutput);
1039     EXPECT_EQ(res, 0);
1040     sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfiles[0]);
1041     ASSERT_NE(videoOutput, nullptr);
1042     EXPECT_TRUE(apertureVideoSession->CanAddOutput(videoOutput));
1043     res = apertureVideoSession->AddOutput(videoOutput);
1044     EXPECT_EQ(res, 0);
1045 
1046     res = apertureVideoSession->CommitConfig();
1047     EXPECT_EQ(res, 0);
1048     res = apertureVideoSession->Start();
1049     EXPECT_EQ(res, 0);
1050     sleep(WAIT_TIME_AFTER_START);
1051     res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Start();
1052     EXPECT_EQ(res, 0);
1053     sleep(WAIT_TIME_AFTER_START);
1054     res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Stop();
1055     EXPECT_EQ(res, 0);
1056     res = apertureVideoSession->Stop();
1057     EXPECT_EQ(res, 0);
1058     res = apertureVideoSession->Release();
1059     EXPECT_EQ(res, 0);
1060 }
1061 
1062 /*
1063  * Feature: Framework
1064  * Function: Test fluorescence photo session with photo output
1065  * SubFunction: NA
1066  * FunctionPoints: NA
1067  * EnvConditions: NA
1068  * CaseDescription: Test can add photo output into fluorescence photo session
1069  */
1070 HWTEST_F(CameraSessionModuleTest, fluorescence_photo_session_moduletest_001, TestSize.Level0)
1071 {
1072     if (!IsSceneModeSupported(SceneMode::FLUORESCENCE_PHOTO)) {
1073         return;
1074     }
1075 
1076     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::FLUORESCENCE_PHOTO);
1077     ASSERT_NE(outputCapability, nullptr);
1078     auto previewProfiles = outputCapability->GetPreviewProfiles();
1079     ASSERT_FALSE(previewProfiles.empty());
1080     auto photoProfiles = outputCapability->GetPhotoProfiles();
1081     ASSERT_FALSE(photoProfiles.empty());
1082 
1083     auto captureSession = manager_->CreateCaptureSession(SceneMode::FLUORESCENCE_PHOTO);
1084     auto fluorescencePhotoSession = static_cast<FluorescencePhotoSession*>(captureSession.GetRefPtr());
1085     ASSERT_NE(fluorescencePhotoSession, nullptr);
1086     int32_t res = fluorescencePhotoSession->BeginConfig();
1087     EXPECT_EQ(res, 0);
1088 
1089     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
1090     ASSERT_NE(input, nullptr);
1091     input->Open();
1092     res = fluorescencePhotoSession->AddInput(input);
1093     EXPECT_EQ(res, 0);
1094     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
1095     ASSERT_NE(previewOutput, nullptr);
1096     EXPECT_TRUE(fluorescencePhotoSession->CanAddOutput(previewOutput));
1097     res = fluorescencePhotoSession->AddOutput(previewOutput);
1098     EXPECT_EQ(res, 0);
1099     sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
1100     ASSERT_NE(photoOutput, nullptr);
1101     EXPECT_TRUE(fluorescencePhotoSession->CanAddOutput(photoOutput));
1102     res = fluorescencePhotoSession->AddOutput(photoOutput);
1103     EXPECT_EQ(res, 0);
1104 
1105     res = fluorescencePhotoSession->CommitConfig();
1106     EXPECT_EQ(res, 0);
1107     res = fluorescencePhotoSession->Start();
1108     EXPECT_EQ(res, 0);
1109     sleep(WAIT_TIME_AFTER_START);
1110     res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
1111     EXPECT_EQ(res, 0);
1112     sleep(WAIT_TIME_AFTER_CAPTURE);
1113     res = fluorescencePhotoSession->Stop();
1114     EXPECT_EQ(res, 0);
1115     res = fluorescencePhotoSession->Release();
1116     EXPECT_EQ(res, 0);
1117 }
1118 
1119 /*
1120  * Feature: Framework
1121  * Function: Test fluorescence photo session with video output
1122  * SubFunction: NA
1123  * FunctionPoints: NA
1124  * EnvConditions: NA
1125  * CaseDescription: Test can not add video output into fluorescence photo session
1126  */
1127 HWTEST_F(CameraSessionModuleTest, fluorescence_photo_session_moduletest_002, TestSize.Level0)
1128 {
1129     if (!IsSceneModeSupported(SceneMode::FLUORESCENCE_PHOTO)) {
1130         return;
1131     }
1132 
1133     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::FLUORESCENCE_PHOTO);
1134     ASSERT_NE(outputCapability, nullptr);
1135     auto previewProfiles = outputCapability->GetPreviewProfiles();
1136     ASSERT_FALSE(previewProfiles.empty());
1137     auto videoProfiles = outputCapability->GetVideoProfiles();
1138     ASSERT_FALSE(videoProfiles.empty());
1139 
1140     auto captureSession = manager_->CreateCaptureSession(SceneMode::FLUORESCENCE_PHOTO);
1141     auto fluorescencePhotoSession = static_cast<FluorescencePhotoSession*>(captureSession.GetRefPtr());
1142     ASSERT_NE(fluorescencePhotoSession, nullptr);
1143     int32_t res = fluorescencePhotoSession->BeginConfig();
1144     EXPECT_EQ(res, 0);
1145 
1146     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
1147     ASSERT_NE(input, nullptr);
1148     input->Open();
1149     res = fluorescencePhotoSession->AddInput(input);
1150     EXPECT_EQ(res, 0);
1151     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
1152     ASSERT_NE(previewOutput, nullptr);
1153     EXPECT_TRUE(fluorescencePhotoSession->CanAddOutput(previewOutput));
1154     res = fluorescencePhotoSession->AddOutput(previewOutput);
1155     EXPECT_EQ(res, 0);
1156     sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfiles[0]);
1157     ASSERT_NE(videoOutput, nullptr);
1158     EXPECT_FALSE(fluorescencePhotoSession->CanAddOutput(videoOutput));
1159 }
1160 
1161 /*
1162  * Feature: Framework
1163  * Function: Test high res photo session with photo output
1164  * SubFunction: NA
1165  * FunctionPoints: NA
1166  * EnvConditions: NA
1167  * CaseDescription: Test can add photo output into high res photo session
1168  */
1169 HWTEST_F(CameraSessionModuleTest, high_res_photo_session_moduletest_001, TestSize.Level0)
1170 {
1171     if (!IsSceneModeSupported(SceneMode::HIGH_RES_PHOTO)) {
1172         return;
1173     }
1174 
1175     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::HIGH_RES_PHOTO);
1176     ASSERT_NE(outputCapability, nullptr);
1177     auto previewProfiles = outputCapability->GetPreviewProfiles();
1178     ASSERT_FALSE(previewProfiles.empty());
1179     auto photoProfiles = outputCapability->GetPhotoProfiles();
1180     ASSERT_FALSE(photoProfiles.empty());
1181 
1182     auto captureSession = manager_->CreateCaptureSession(SceneMode::HIGH_RES_PHOTO);
1183     auto highResPhotoSession = static_cast<HighResPhotoSession*>(captureSession.GetRefPtr());
1184     ASSERT_NE(highResPhotoSession, nullptr);
1185     int32_t res = highResPhotoSession->BeginConfig();
1186     EXPECT_EQ(res, 0);
1187 
1188     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
1189     ASSERT_NE(input, nullptr);
1190     input->Open();
1191     res = highResPhotoSession->AddInput(input);
1192     EXPECT_EQ(res, 0);
1193     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
1194     ASSERT_NE(previewOutput, nullptr);
1195     EXPECT_TRUE(highResPhotoSession->CanAddOutput(previewOutput));
1196     res = highResPhotoSession->AddOutput(previewOutput);
1197     EXPECT_EQ(res, 0);
1198     sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
1199     ASSERT_NE(photoOutput, nullptr);
1200     EXPECT_TRUE(highResPhotoSession->CanAddOutput(photoOutput));
1201     res = highResPhotoSession->AddOutput(photoOutput);
1202     EXPECT_EQ(res, 0);
1203 
1204     res = highResPhotoSession->CommitConfig();
1205     EXPECT_EQ(res, 0);
1206     res = highResPhotoSession->Start();
1207     EXPECT_EQ(res, 0);
1208     sleep(WAIT_TIME_AFTER_START);
1209     res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
1210     EXPECT_EQ(res, 0);
1211     sleep(WAIT_TIME_AFTER_CAPTURE);
1212     res = highResPhotoSession->Stop();
1213     EXPECT_EQ(res, 0);
1214     res = highResPhotoSession->Release();
1215     EXPECT_EQ(res, 0);
1216 }
1217 
1218 /*
1219  * Feature: Framework
1220  * Function: Test high res photo session with video output
1221  * SubFunction: NA
1222  * FunctionPoints: NA
1223  * EnvConditions: NA
1224  * CaseDescription: Test can not add video output into high res photo session
1225  */
1226 HWTEST_F(CameraSessionModuleTest, high_res_photo_session_moduletest_002, TestSize.Level0)
1227 {
1228     if (!IsSceneModeSupported(SceneMode::HIGH_RES_PHOTO)) {
1229         return;
1230     }
1231 
1232     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::HIGH_RES_PHOTO);
1233     ASSERT_NE(outputCapability, nullptr);
1234     auto previewProfiles = outputCapability->GetPreviewProfiles();
1235     ASSERT_FALSE(previewProfiles.empty());
1236     auto videoProfiles = outputCapability->GetVideoProfiles();
1237     ASSERT_TRUE(videoProfiles.empty());
1238     auto outputCapabilityBase = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::VIDEO);
1239     ASSERT_NE(outputCapabilityBase, nullptr);
1240     auto videoProfilesBase = outputCapabilityBase->GetVideoProfiles();
1241     ASSERT_FALSE(videoProfilesBase.empty());
1242 
1243     auto captureSession = manager_->CreateCaptureSession(SceneMode::HIGH_RES_PHOTO);
1244     auto highResPhotoSession = static_cast<HighResPhotoSession*>(captureSession.GetRefPtr());
1245     ASSERT_NE(highResPhotoSession, nullptr);
1246     int32_t res = highResPhotoSession->BeginConfig();
1247     EXPECT_EQ(res, 0);
1248 
1249     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
1250     ASSERT_NE(input, nullptr);
1251     input->Open();
1252     res = highResPhotoSession->AddInput(input);
1253     EXPECT_EQ(res, 0);
1254     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
1255     ASSERT_NE(previewOutput, nullptr);
1256     EXPECT_TRUE(highResPhotoSession->CanAddOutput(previewOutput));
1257     res = highResPhotoSession->AddOutput(previewOutput);
1258     EXPECT_EQ(res, 0);
1259     sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfilesBase[0]);
1260     ASSERT_NE(videoOutput, nullptr);
1261     EXPECT_FALSE(highResPhotoSession->CanAddOutput(videoOutput));
1262 }
1263 
1264 /*
1265  * Feature: Framework
1266  * Function: Test light painting session with photo output
1267  * SubFunction: NA
1268  * FunctionPoints: NA
1269  * EnvConditions: NA
1270  * CaseDescription: Test can add photo output into light painting session
1271  */
1272 HWTEST_F(CameraSessionModuleTest, light_painting_session_moduletest_001, TestSize.Level0)
1273 {
1274     if (!IsSceneModeSupported(SceneMode::LIGHT_PAINTING)) {
1275         return;
1276     }
1277 
1278     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::LIGHT_PAINTING);
1279     ASSERT_NE(outputCapability, nullptr);
1280     auto previewProfiles = outputCapability->GetPreviewProfiles();
1281     ASSERT_FALSE(previewProfiles.empty());
1282     auto photoProfiles = outputCapability->GetPhotoProfiles();
1283     ASSERT_FALSE(photoProfiles.empty());
1284 
1285     auto captureSession = manager_->CreateCaptureSession(SceneMode::LIGHT_PAINTING);
1286     auto lightPaintingSession = static_cast<LightPaintingSession*>(captureSession.GetRefPtr());
1287     ASSERT_NE(lightPaintingSession, nullptr);
1288     int32_t res = lightPaintingSession->BeginConfig();
1289     EXPECT_EQ(res, 0);
1290 
1291     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
1292     ASSERT_NE(input, nullptr);
1293     input->Open();
1294     res = lightPaintingSession->AddInput(input);
1295     EXPECT_EQ(res, 0);
1296     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
1297     ASSERT_NE(previewOutput, nullptr);
1298     EXPECT_TRUE(lightPaintingSession->CanAddOutput(previewOutput));
1299     res = lightPaintingSession->AddOutput(previewOutput);
1300     EXPECT_EQ(res, 0);
1301     sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
1302     ASSERT_NE(photoOutput, nullptr);
1303     EXPECT_TRUE(lightPaintingSession->CanAddOutput(photoOutput));
1304     res = lightPaintingSession->AddOutput(photoOutput);
1305     EXPECT_EQ(res, 0);
1306 
1307     res = lightPaintingSession->CommitConfig();
1308     EXPECT_EQ(res, 0);
1309     res = lightPaintingSession->Start();
1310     EXPECT_EQ(res, 0);
1311     sleep(WAIT_TIME_AFTER_START);
1312     res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
1313     EXPECT_EQ(res, 0);
1314     sleep(WAIT_TIME_AFTER_CAPTURE);
1315     res = lightPaintingSession->Stop();
1316     EXPECT_EQ(res, 0);
1317     res = lightPaintingSession->Release();
1318     EXPECT_EQ(res, 0);
1319 }
1320 
1321 /*
1322  * Feature: Framework
1323  * Function: Test light painting session with video output
1324  * SubFunction: NA
1325  * FunctionPoints: NA
1326  * EnvConditions: NA
1327  * CaseDescription: Test can not add video output into light painting session
1328  */
1329 HWTEST_F(CameraSessionModuleTest, light_painting_session_moduletest_002, TestSize.Level0)
1330 {
1331     if (!IsSceneModeSupported(SceneMode::LIGHT_PAINTING)) {
1332         return;
1333     }
1334 
1335     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::LIGHT_PAINTING);
1336     ASSERT_NE(outputCapability, nullptr);
1337     auto previewProfiles = outputCapability->GetPreviewProfiles();
1338     ASSERT_FALSE(previewProfiles.empty());
1339     auto videoProfiles = outputCapability->GetVideoProfiles();
1340     ASSERT_TRUE(videoProfiles.empty());
1341     auto outputCapabilityBase = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::VIDEO);
1342     ASSERT_NE(outputCapabilityBase, nullptr);
1343     auto videoProfilesBase = outputCapabilityBase->GetVideoProfiles();
1344     ASSERT_FALSE(videoProfilesBase.empty());
1345 
1346     auto captureSession = manager_->CreateCaptureSession(SceneMode::LIGHT_PAINTING);
1347     auto lightPaintingSession = static_cast<LightPaintingSession*>(captureSession.GetRefPtr());
1348     ASSERT_NE(lightPaintingSession, nullptr);
1349     int32_t res = lightPaintingSession->BeginConfig();
1350     EXPECT_EQ(res, 0);
1351 
1352     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
1353     ASSERT_NE(input, nullptr);
1354     input->Open();
1355     res = lightPaintingSession->AddInput(input);
1356     EXPECT_EQ(res, 0);
1357     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
1358     ASSERT_NE(previewOutput, nullptr);
1359     EXPECT_TRUE(lightPaintingSession->CanAddOutput(previewOutput));
1360     res = lightPaintingSession->AddOutput(previewOutput);
1361     EXPECT_EQ(res, 0);
1362     sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfilesBase[0]);
1363     ASSERT_NE(videoOutput, nullptr);
1364     EXPECT_FALSE(lightPaintingSession->CanAddOutput(videoOutput));
1365 }
1366 
1367 /*
1368  * Feature: Framework
1369  * Function: Test light painting session get light painting type
1370  * SubFunction: NA
1371  * FunctionPoints: NA
1372  * EnvConditions: NA
1373  * CaseDescription: Test can get light painting type from light painting session
1374  */
1375 HWTEST_F(CameraSessionModuleTest, light_painting_session_moduletest_003, TestSize.Level0)
1376 {
1377     if (!IsSceneModeSupported(SceneMode::LIGHT_PAINTING)) {
1378         return;
1379     }
1380 
1381     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::LIGHT_PAINTING);
1382     ASSERT_NE(outputCapability, nullptr);
1383     auto previewProfiles = outputCapability->GetPreviewProfiles();
1384     ASSERT_FALSE(previewProfiles.empty());
1385     auto photoProfiles = outputCapability->GetPhotoProfiles();
1386     ASSERT_FALSE(photoProfiles.empty());
1387 
1388     auto captureSession = manager_->CreateCaptureSession(SceneMode::LIGHT_PAINTING);
1389     auto lightPaintingSession = static_cast<LightPaintingSession*>(captureSession.GetRefPtr());
1390     ASSERT_NE(lightPaintingSession, nullptr);
1391     int32_t res = lightPaintingSession->BeginConfig();
1392     EXPECT_EQ(res, 0);
1393 
1394     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
1395     ASSERT_NE(input, nullptr);
1396     input->Open();
1397     res = lightPaintingSession->AddInput(input);
1398     EXPECT_EQ(res, 0);
1399     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
1400     ASSERT_NE(previewOutput, nullptr);
1401     EXPECT_TRUE(lightPaintingSession->CanAddOutput(previewOutput));
1402     res = lightPaintingSession->AddOutput(previewOutput);
1403     EXPECT_EQ(res, 0);
1404     sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
1405     ASSERT_NE(photoOutput, nullptr);
1406     EXPECT_TRUE(lightPaintingSession->CanAddOutput(photoOutput));
1407     res = lightPaintingSession->AddOutput(photoOutput);
1408     EXPECT_EQ(res, 0);
1409 
1410     res = lightPaintingSession->CommitConfig();
1411     EXPECT_EQ(res, 0);
1412     res = lightPaintingSession->Start();
1413     EXPECT_EQ(res, 0);
1414     sleep(WAIT_TIME_AFTER_START);
1415 
1416     std::vector<LightPaintingType> supportedType;
1417     res = lightPaintingSession->GetSupportedLightPaintings(supportedType);
1418     EXPECT_EQ(res, 0);
1419     if (!supportedType.empty()) {
1420         LightPaintingType defaultType;
1421         res = lightPaintingSession->GetLightPainting(defaultType);
1422         EXPECT_EQ(defaultType, supportedType[0]);
1423     }
1424 
1425     res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
1426     EXPECT_EQ(res, 0);
1427     sleep(WAIT_TIME_AFTER_CAPTURE);
1428     res = lightPaintingSession->Stop();
1429     EXPECT_EQ(res, 0);
1430     res = lightPaintingSession->Release();
1431     EXPECT_EQ(res, 0);
1432 }
1433 
1434 /*
1435  * Feature: Framework
1436  * Function: Test light painting session set light painting type
1437  * SubFunction: NA
1438  * FunctionPoints: NA
1439  * EnvConditions: NA
1440  * CaseDescription: Test can set light painting type into light painting session
1441  */
1442 HWTEST_F(CameraSessionModuleTest, light_painting_session_moduletest_004, TestSize.Level0)
1443 {
1444     if (!IsSceneModeSupported(SceneMode::LIGHT_PAINTING)) {
1445         return;
1446     }
1447 
1448     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::LIGHT_PAINTING);
1449     ASSERT_NE(outputCapability, nullptr);
1450     auto previewProfiles = outputCapability->GetPreviewProfiles();
1451     ASSERT_FALSE(previewProfiles.empty());
1452     auto photoProfiles = outputCapability->GetPhotoProfiles();
1453     ASSERT_FALSE(photoProfiles.empty());
1454 
1455     auto captureSession = manager_->CreateCaptureSession(SceneMode::LIGHT_PAINTING);
1456     auto lightPaintingSession = static_cast<LightPaintingSession*>(captureSession.GetRefPtr());
1457     ASSERT_NE(lightPaintingSession, nullptr);
1458     int32_t res = lightPaintingSession->BeginConfig();
1459     EXPECT_EQ(res, 0);
1460 
1461     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
1462     ASSERT_NE(input, nullptr);
1463     input->Open();
1464     res = lightPaintingSession->AddInput(input);
1465     EXPECT_EQ(res, 0);
1466     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
1467     ASSERT_NE(previewOutput, nullptr);
1468     EXPECT_TRUE(lightPaintingSession->CanAddOutput(previewOutput));
1469     res = lightPaintingSession->AddOutput(previewOutput);
1470     EXPECT_EQ(res, 0);
1471     sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
1472     ASSERT_NE(photoOutput, nullptr);
1473     EXPECT_TRUE(lightPaintingSession->CanAddOutput(photoOutput));
1474     res = lightPaintingSession->AddOutput(photoOutput);
1475     EXPECT_EQ(res, 0);
1476 
1477     res = lightPaintingSession->CommitConfig();
1478     EXPECT_EQ(res, 0);
1479     res = lightPaintingSession->Start();
1480     EXPECT_EQ(res, 0);
1481     sleep(WAIT_TIME_AFTER_START);
1482 
1483     std::vector<LightPaintingType> supportedType;
1484     res = lightPaintingSession->GetSupportedLightPaintings(supportedType);
1485     EXPECT_EQ(res, 0);
1486     if (!supportedType.empty()) {
1487         LightPaintingType setType = LightPaintingType::LIGHT;
1488         lightPaintingSession->LockForControl();
1489         res = lightPaintingSession->SetLightPainting(setType);
1490         lightPaintingSession->UnlockForControl();
1491         EXPECT_EQ(res, 0);
1492 
1493         LightPaintingType defaultType;
1494         res = lightPaintingSession->GetLightPainting(defaultType);
1495         EXPECT_EQ(defaultType, setType);
1496 
1497         lightPaintingSession->LockForControl();
1498         res = lightPaintingSession->TriggerLighting();
1499         lightPaintingSession->UnlockForControl();
1500         EXPECT_EQ(res, 0);
1501     }
1502 
1503     res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
1504     EXPECT_EQ(res, 0);
1505     sleep(WAIT_TIME_AFTER_CAPTURE);
1506     res = lightPaintingSession->Stop();
1507     EXPECT_EQ(res, 0);
1508     res = lightPaintingSession->Release();
1509     EXPECT_EQ(res, 0);
1510 }
1511 
1512 /*
1513  * Feature: Framework
1514  * Function: Test macro photo session with photo output
1515  * SubFunction: NA
1516  * FunctionPoints: NA
1517  * EnvConditions: NA
1518  * CaseDescription: Test can add photo output into macro photo session
1519  */
1520 HWTEST_F(CameraSessionModuleTest, macro_photo_session_moduletest_001, TestSize.Level0)
1521 {
1522     if (!IsSceneModeSupported(SceneMode::CAPTURE_MACRO)) {
1523         return;
1524     }
1525 
1526     auto previewProfile = GetSketchPreviewProfile();
1527     if (previewProfile == nullptr) {
1528         EXPECT_EQ(previewProfile.get(), nullptr);
1529         return;
1530     }
1531     SelectProfiles selectProfiles;
1532     selectProfiles.preview.size_ = {SKETCH_DEFAULT_WIDTH, SKETCH_DEFAULT_HEIGHT};
1533     selectProfiles.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
1534     selectProfiles.photo.size_ = {SKETCH_DEFAULT_WIDTH, SKETCH_DEFAULT_HEIGHT};
1535     selectProfiles.photo.format_ = CAMERA_FORMAT_YUV_420_SP;
1536     selectProfiles.video.size_ = {SKETCH_DEFAULT_WIDTH, SKETCH_DEFAULT_HEIGHT};
1537     selectProfiles.video.format_ = CAMERA_FORMAT_YUV_420_SP;
1538     selectProfiles.video.framerates_ = {MAX_FRAME_RATE, MAX_FRAME_RATE};
1539     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::CAPTURE_MACRO);
1540     ASSERT_NE(outputCapability, nullptr);
1541     auto photoProfiles = outputCapability->GetPhotoProfiles();
1542     ASSERT_FALSE(photoProfiles.empty());
1543 
1544     auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE_MACRO);
1545     auto macroPhotoSession = static_cast<MacroPhotoSession*>(captureSession.GetRefPtr());
1546     ASSERT_NE(macroPhotoSession, nullptr);
1547     int32_t res = macroPhotoSession->BeginConfig();
1548     EXPECT_EQ(res, 0);
1549 
1550     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
1551     ASSERT_NE(input, nullptr);
1552     input->Open();
1553     res = macroPhotoSession->AddInput(input);
1554     EXPECT_EQ(res, 0);
1555     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(selectProfiles.preview);
1556     ASSERT_NE(previewOutput, nullptr);
1557     EXPECT_TRUE(macroPhotoSession->CanAddOutput(previewOutput));
1558     res = macroPhotoSession->AddOutput(previewOutput);
1559     EXPECT_EQ(res, 0);
1560     sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
1561     ASSERT_NE(photoOutput, nullptr);
1562     EXPECT_TRUE(macroPhotoSession->CanAddOutput(photoOutput));
1563     res = macroPhotoSession->AddOutput(photoOutput);
1564     EXPECT_EQ(res, 0);
1565 
1566     bool isSketchSupported = ((sptr<PreviewOutput>&)previewOutput)->IsSketchSupported();
1567     if (!isSketchSupported) {
1568         return;
1569     }
1570     res = ((sptr<PreviewOutput>&)previewOutput)->EnableSketch(true);
1571     EXPECT_EQ(res, 0);
1572 
1573     res = macroPhotoSession->CommitConfig();
1574     EXPECT_EQ(res, 0);
1575     res = macroPhotoSession->Start();
1576     EXPECT_EQ(res, 0);
1577     sleep(WAIT_TIME_AFTER_START);
1578 
1579     EXPECT_GT(((sptr<PreviewOutput>&)previewOutput)->GetSketchRatio(), 0);
1580     EXPECT_EQ(((sptr<PreviewOutput>&)previewOutput)->AttachSketchSurface(
1581         CreateSketchSurface(selectProfiles.preview.GetCameraFormat())), 0);
1582     sleep(WAIT_TIME_AFTER_ATTACH_SKETCH);
1583 
1584     res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
1585     EXPECT_EQ(res, 0);
1586     sleep(WAIT_TIME_AFTER_CAPTURE);
1587     res = macroPhotoSession->Stop();
1588     EXPECT_EQ(res, 0);
1589     res = macroPhotoSession->Release();
1590     EXPECT_EQ(res, 0);
1591 }
1592 
1593 /*
1594  * Feature: Framework
1595  * Function: Test macro photo session with video output
1596  * SubFunction: NA
1597  * FunctionPoints: NA
1598  * EnvConditions: NA
1599  * CaseDescription: Test can not add video output into macro photo session
1600  */
1601 HWTEST_F(CameraSessionModuleTest, macro_photo_session_moduletest_002, TestSize.Level0)
1602 {
1603     if (!IsSceneModeSupported(SceneMode::CAPTURE_MACRO)) {
1604         return;
1605     }
1606 
1607     auto previewProfile = GetSketchPreviewProfile();
1608     if (previewProfile == nullptr) {
1609         EXPECT_EQ(previewProfile.get(), nullptr);
1610         return;
1611     }
1612     SelectProfiles selectProfiles;
1613     selectProfiles.preview.size_ = {SKETCH_DEFAULT_WIDTH, SKETCH_DEFAULT_HEIGHT};
1614     selectProfiles.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
1615     selectProfiles.photo.size_ = {SKETCH_DEFAULT_WIDTH, SKETCH_DEFAULT_HEIGHT};
1616     selectProfiles.photo.format_ = CAMERA_FORMAT_YUV_420_SP;
1617     selectProfiles.video.size_ = {SKETCH_DEFAULT_WIDTH, SKETCH_DEFAULT_HEIGHT};
1618     selectProfiles.video.format_ = CAMERA_FORMAT_YUV_420_SP;
1619     selectProfiles.video.framerates_ = {MAX_FRAME_RATE, MAX_FRAME_RATE};
1620 
1621     auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE_MACRO);
1622     auto macroPhotoSession = static_cast<MacroPhotoSession*>(captureSession.GetRefPtr());
1623     ASSERT_NE(macroPhotoSession, nullptr);
1624     int32_t res = macroPhotoSession->BeginConfig();
1625     EXPECT_EQ(res, 0);
1626 
1627     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
1628     ASSERT_NE(input, nullptr);
1629     input->Open();
1630     res = macroPhotoSession->AddInput(input);
1631     EXPECT_EQ(res, 0);
1632     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(selectProfiles.preview);
1633     ASSERT_NE(previewOutput, nullptr);
1634     EXPECT_TRUE(macroPhotoSession->CanAddOutput(previewOutput));
1635     res = macroPhotoSession->AddOutput(previewOutput);
1636     EXPECT_EQ(res, 0);
1637     sptr<CaptureOutput> videoOutput = CreateVideoOutput(selectProfiles.video);
1638     ASSERT_NE(videoOutput, nullptr);
1639     EXPECT_FALSE(macroPhotoSession->CanAddOutput(videoOutput));
1640 }
1641 
1642 /*
1643  * Feature: Framework
1644  * Function: Test macro photo session with CreateCaptureSession
1645  * SubFunction: NA
1646  * FunctionPoints: NA
1647  * EnvConditions: NA
1648  * CaseDescription: Test macro photo session with CreateCaptureSession
1649  */
1650 HWTEST_F(CameraSessionModuleTest, macro_photo_session_moduletest_003, TestSize.Level0)
1651 {
1652     SceneMode mode = SceneMode::CAPTURE_MACRO;
1653     sptr<CameraManager> modeManagerObj = CameraManager::GetInstance();
1654     ASSERT_NE(modeManagerObj, nullptr);
1655 
1656     sptr<CaptureSession> captureSession = modeManagerObj->CreateCaptureSession(mode);
1657     ASSERT_NE(captureSession, nullptr);
1658 }
1659 
1660 /*
1661  * Feature: Framework
1662  * Function: Test macro video session with photo output
1663  * SubFunction: NA
1664  * FunctionPoints: NA
1665  * EnvConditions: NA
1666  * CaseDescription: Test can add photo output into macro video session
1667  */
1668 HWTEST_F(CameraSessionModuleTest, macro_video_session_moduletest_001, TestSize.Level0)
1669 {
1670     if (!IsSceneModeSupported(SceneMode::VIDEO_MACRO)) {
1671         return;
1672     }
1673 
1674     auto previewProfile = GetSketchPreviewProfile();
1675     if (previewProfile == nullptr) {
1676         EXPECT_EQ(previewProfile.get(), nullptr);
1677         return;
1678     }
1679     SelectProfiles selectProfiles;
1680     selectProfiles.preview.size_ = {SKETCH_DEFAULT_WIDTH, SKETCH_DEFAULT_HEIGHT};
1681     selectProfiles.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
1682     selectProfiles.photo.size_ = {SKETCH_DEFAULT_WIDTH, SKETCH_DEFAULT_HEIGHT};
1683     selectProfiles.photo.format_ = CAMERA_FORMAT_YUV_420_SP;
1684     selectProfiles.video.size_ = {SKETCH_DEFAULT_WIDTH, SKETCH_DEFAULT_HEIGHT};
1685     selectProfiles.video.format_ = CAMERA_FORMAT_YUV_420_SP;
1686     selectProfiles.video.framerates_ = {MAX_FRAME_RATE, MAX_FRAME_RATE};
1687     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::VIDEO_MACRO);
1688     ASSERT_NE(outputCapability, nullptr);
1689     auto photoProfiles = outputCapability->GetPhotoProfiles();
1690     ASSERT_FALSE(photoProfiles.empty());
1691 
1692     auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO_MACRO);
1693     auto macroVideoSession = static_cast<MacroVideoSession*>(captureSession.GetRefPtr());
1694     ASSERT_NE(macroVideoSession, nullptr);
1695     int32_t res = macroVideoSession->BeginConfig();
1696     EXPECT_EQ(res, 0);
1697 
1698     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
1699     ASSERT_NE(input, nullptr);
1700     input->Open();
1701     res = macroVideoSession->AddInput(input);
1702     EXPECT_EQ(res, 0);
1703     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(selectProfiles.preview);
1704     ASSERT_NE(previewOutput, nullptr);
1705     EXPECT_TRUE(macroVideoSession->CanAddOutput(previewOutput));
1706     res = macroVideoSession->AddOutput(previewOutput);
1707     EXPECT_EQ(res, 0);
1708     sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
1709     ASSERT_NE(photoOutput, nullptr);
1710     EXPECT_TRUE(macroVideoSession->CanAddOutput(photoOutput));
1711     res = macroVideoSession->AddOutput(photoOutput);
1712     EXPECT_EQ(res, 0);
1713 
1714     bool isSketchSupported = ((sptr<PreviewOutput>&)previewOutput)->IsSketchSupported();
1715     if (!isSketchSupported) {
1716         return;
1717     }
1718     res = ((sptr<PreviewOutput>&)previewOutput)->EnableSketch(true);
1719     EXPECT_EQ(res, 0);
1720 
1721     res = macroVideoSession->CommitConfig();
1722     EXPECT_EQ(res, 0);
1723     res = macroVideoSession->Start();
1724     EXPECT_EQ(res, 0);
1725     sleep(WAIT_TIME_AFTER_START);
1726 
1727     EXPECT_GT(((sptr<PreviewOutput>&)previewOutput)->GetSketchRatio(), 0);
1728     EXPECT_EQ(((sptr<PreviewOutput>&)previewOutput)->AttachSketchSurface(
1729         CreateSketchSurface(selectProfiles.preview.GetCameraFormat())), 0);
1730     sleep(WAIT_TIME_AFTER_ATTACH_SKETCH);
1731 
1732     res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
1733     EXPECT_EQ(res, 0);
1734     sleep(WAIT_TIME_AFTER_CAPTURE);
1735     res = macroVideoSession->Stop();
1736     EXPECT_EQ(res, 0);
1737     res = macroVideoSession->Release();
1738     EXPECT_EQ(res, 0);
1739 }
1740 
1741 /*
1742  * Feature: Framework
1743  * Function: Test macro video session with video output
1744  * SubFunction: NA
1745  * FunctionPoints: NA
1746  * EnvConditions: NA
1747  * CaseDescription: Test can add video output into macro video session
1748  */
1749 HWTEST_F(CameraSessionModuleTest, macro_video_session_moduletest_002, TestSize.Level0)
1750 {
1751     if (!IsSceneModeSupported(SceneMode::VIDEO_MACRO)) {
1752         return;
1753     }
1754 
1755     auto previewProfile = GetSketchPreviewProfile();
1756     if (previewProfile == nullptr) {
1757         EXPECT_EQ(previewProfile.get(), nullptr);
1758         return;
1759     }
1760     SelectProfiles selectProfiles;
1761     selectProfiles.preview.size_ = {SKETCH_DEFAULT_WIDTH, SKETCH_DEFAULT_HEIGHT};
1762     selectProfiles.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
1763     selectProfiles.photo.size_ = {SKETCH_DEFAULT_WIDTH, SKETCH_DEFAULT_HEIGHT};
1764     selectProfiles.photo.format_ = CAMERA_FORMAT_YUV_420_SP;
1765     selectProfiles.video.size_ = {SKETCH_DEFAULT_WIDTH, SKETCH_DEFAULT_HEIGHT};
1766     selectProfiles.video.format_ = CAMERA_FORMAT_YUV_420_SP;
1767     selectProfiles.video.framerates_ = {MAX_FRAME_RATE, MAX_FRAME_RATE};
1768 
1769     auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO_MACRO);
1770     auto macroVideoSession = static_cast<MacroVideoSession*>(captureSession.GetRefPtr());
1771     ASSERT_NE(macroVideoSession, nullptr);
1772     int32_t res = macroVideoSession->BeginConfig();
1773     EXPECT_EQ(res, 0);
1774 
1775     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
1776     ASSERT_NE(input, nullptr);
1777     input->Open();
1778     res = macroVideoSession->AddInput(input);
1779     EXPECT_EQ(res, 0);
1780     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(selectProfiles.preview);
1781     ASSERT_NE(previewOutput, nullptr);
1782     EXPECT_TRUE(macroVideoSession->CanAddOutput(previewOutput));
1783     res = macroVideoSession->AddOutput(previewOutput);
1784     EXPECT_EQ(res, 0);
1785     sptr<CaptureOutput> videoOutput = CreateVideoOutput(selectProfiles.video);
1786     ASSERT_NE(videoOutput, nullptr);
1787     EXPECT_TRUE(macroVideoSession->CanAddOutput(videoOutput));
1788     res = macroVideoSession->AddOutput(videoOutput);
1789     EXPECT_EQ(res, 0);
1790 
1791     bool isSketchSupported = ((sptr<PreviewOutput>&)previewOutput)->IsSketchSupported();
1792     if (!isSketchSupported) {
1793         return;
1794     }
1795     res = ((sptr<PreviewOutput>&)previewOutput)->EnableSketch(true);
1796     EXPECT_EQ(res, 0);
1797 
1798     res = macroVideoSession->CommitConfig();
1799     EXPECT_EQ(res, 0);
1800     res = macroVideoSession->Start();
1801     EXPECT_EQ(res, 0);
1802     sleep(WAIT_TIME_AFTER_START);
1803 
1804     EXPECT_GT(((sptr<PreviewOutput>&)previewOutput)->GetSketchRatio(), 0);
1805     EXPECT_EQ(((sptr<PreviewOutput>&)previewOutput)->AttachSketchSurface(
1806         CreateSketchSurface(selectProfiles.preview.GetCameraFormat())), 0);
1807     sleep(WAIT_TIME_AFTER_ATTACH_SKETCH);
1808 
1809     res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Start();
1810     EXPECT_EQ(res, 0);
1811     sleep(WAIT_TIME_AFTER_START);
1812     res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Stop();
1813     EXPECT_EQ(res, 0);
1814     res = macroVideoSession->Stop();
1815     EXPECT_EQ(res, 0);
1816     res = macroVideoSession->Release();
1817     EXPECT_EQ(res, 0);
1818 }
1819 
1820 /*
1821  * Feature: Framework
1822  * Function: Test macro video session with CreateCaptureSession
1823  * SubFunction: NA
1824  * FunctionPoints: NA
1825  * EnvConditions: NA
1826  * CaseDescription: Test macro video session with CreateCaptureSession
1827  */
1828 HWTEST_F(CameraSessionModuleTest, macro_video_session_moduletest_003, TestSize.Level0)
1829 {
1830     SceneMode mode = SceneMode::VIDEO_MACRO;
1831     sptr<CameraManager> modeManagerObj = CameraManager::GetInstance();
1832     ASSERT_NE(modeManagerObj, nullptr);
1833 
1834     sptr<CaptureSession> captureSession = modeManagerObj->CreateCaptureSession(mode);
1835     ASSERT_NE(captureSession, nullptr);
1836 }
1837 
1838 /*
1839  * Feature: Framework
1840  * Function: Test panorama session with photo output
1841  * SubFunction: NA
1842  * FunctionPoints: NA
1843  * EnvConditions: NA
1844  * CaseDescription: Test can not add photo output into panorama session
1845  */
1846 HWTEST_F(CameraSessionModuleTest, panorama_session_moduletest_001, TestSize.Level0)
1847 {
1848     if (!IsSceneModeSupported(SceneMode::PANORAMA_PHOTO)) {
1849         return;
1850     }
1851 
1852     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PANORAMA_PHOTO);
1853     ASSERT_NE(outputCapability, nullptr);
1854     auto previewProfiles = outputCapability->GetPreviewProfiles();
1855     ASSERT_FALSE(previewProfiles.empty());
1856     auto photoProfiles = outputCapability->GetPhotoProfiles();
1857     ASSERT_TRUE(photoProfiles.empty());
1858     auto outputCapabilityBase = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::CAPTURE);
1859     ASSERT_NE(outputCapabilityBase, nullptr);
1860     auto photoProfilesBase = outputCapabilityBase->GetPhotoProfiles();
1861     ASSERT_FALSE(photoProfilesBase.empty());
1862 
1863     auto captureSession = manager_->CreateCaptureSession(SceneMode::PANORAMA_PHOTO);
1864     auto panoramaSession = static_cast<PanoramaSession*>(captureSession.GetRefPtr());
1865     ASSERT_NE(panoramaSession, nullptr);
1866     int32_t res = panoramaSession->BeginConfig();
1867     EXPECT_EQ(res, 0);
1868 
1869     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
1870     ASSERT_NE(input, nullptr);
1871     input->Open();
1872     res = panoramaSession->AddInput(input);
1873     EXPECT_EQ(res, 0);
1874     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
1875     ASSERT_NE(previewOutput, nullptr);
1876     EXPECT_TRUE(panoramaSession->CanAddOutput(previewOutput));
1877     res = panoramaSession->AddOutput(previewOutput);
1878     EXPECT_EQ(res, 0);
1879     sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfilesBase[0]);
1880     ASSERT_NE(photoOutput, nullptr);
1881     EXPECT_FALSE(panoramaSession->CanAddOutput(photoOutput));
1882 }
1883 
1884 /*
1885  * Feature: Framework
1886  * Function: Test panorama session with video output
1887  * SubFunction: NA
1888  * FunctionPoints: NA
1889  * EnvConditions: NA
1890  * CaseDescription: Test can not add video output into panorama session
1891  */
1892 HWTEST_F(CameraSessionModuleTest, panorama_session_moduletest_002, TestSize.Level0)
1893 {
1894     if (!IsSceneModeSupported(SceneMode::PANORAMA_PHOTO)) {
1895         return;
1896     }
1897 
1898     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PANORAMA_PHOTO);
1899     ASSERT_NE(outputCapability, nullptr);
1900     auto previewProfiles = outputCapability->GetPreviewProfiles();
1901     ASSERT_FALSE(previewProfiles.empty());
1902     auto videoProfiles = outputCapability->GetVideoProfiles();
1903     ASSERT_TRUE(videoProfiles.empty());
1904     auto outputCapabilityBase = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::VIDEO);
1905     ASSERT_NE(outputCapabilityBase, nullptr);
1906     auto videoProfilesBase = outputCapabilityBase->GetVideoProfiles();
1907     ASSERT_FALSE(videoProfilesBase.empty());
1908 
1909     auto captureSession = manager_->CreateCaptureSession(SceneMode::PANORAMA_PHOTO);
1910     auto panoramaSession = static_cast<PanoramaSession*>(captureSession.GetRefPtr());
1911     ASSERT_NE(panoramaSession, nullptr);
1912     int32_t res = panoramaSession->BeginConfig();
1913     EXPECT_EQ(res, 0);
1914 
1915     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
1916     ASSERT_NE(input, nullptr);
1917     input->Open();
1918     res = panoramaSession->AddInput(input);
1919     EXPECT_EQ(res, 0);
1920     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
1921     ASSERT_NE(previewOutput, nullptr);
1922     EXPECT_TRUE(panoramaSession->CanAddOutput(previewOutput));
1923     res = panoramaSession->AddOutput(previewOutput);
1924     EXPECT_EQ(res, 0);
1925     sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfilesBase[0]);
1926     ASSERT_NE(videoOutput, nullptr);
1927     EXPECT_FALSE(panoramaSession->CanAddOutput(videoOutput));
1928 }
1929 
1930 /*
1931  * Feature: Framework
1932  * Function: Test panorama session with preview output
1933  * SubFunction: NA
1934  * FunctionPoints: NA
1935  * EnvConditions: NA
1936  * CaseDescription: Test can add preview output into panorama session
1937  */
1938 HWTEST_F(CameraSessionModuleTest, panorama_session_moduletest_003, TestSize.Level0)
1939 {
1940     if (!IsSceneModeSupported(SceneMode::PANORAMA_PHOTO)) {
1941         return;
1942     }
1943 
1944     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PANORAMA_PHOTO);
1945     ASSERT_NE(outputCapability, nullptr);
1946     auto previewProfiles = outputCapability->GetPreviewProfiles();
1947     ASSERT_FALSE(previewProfiles.empty());
1948 
1949     auto captureSession = manager_->CreateCaptureSession(SceneMode::PANORAMA_PHOTO);
1950     auto panoramaSession = static_cast<PanoramaSession*>(captureSession.GetRefPtr());
1951     ASSERT_NE(panoramaSession, nullptr);
1952     int32_t res = panoramaSession->BeginConfig();
1953     EXPECT_EQ(res, 0);
1954 
1955     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
1956     ASSERT_NE(input, nullptr);
1957     input->Open();
1958     res = panoramaSession->AddInput(input);
1959     EXPECT_EQ(res, 0);
1960     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
1961     ASSERT_NE(previewOutput, nullptr);
1962     EXPECT_TRUE(panoramaSession->CanAddOutput(previewOutput));
1963     res = panoramaSession->AddOutput(previewOutput);
1964     EXPECT_EQ(res, 0);
1965 
1966     res = panoramaSession->CommitConfig();
1967     EXPECT_EQ(res, 0);
1968     res = panoramaSession->Start();
1969     EXPECT_EQ(res, 0);
1970     sleep(WAIT_TIME_AFTER_START);
1971     res = panoramaSession->Stop();
1972     EXPECT_EQ(res, 0);
1973     res = panoramaSession->Release();
1974     EXPECT_EQ(res, 0);
1975 }
1976 
1977 /*
1978  * Feature: Framework
1979  * Function: Test portrait session with photo output
1980  * SubFunction: NA
1981  * FunctionPoints: NA
1982  * EnvConditions: NA
1983  * CaseDescription: Test can add photo output into portrait session
1984  */
1985 HWTEST_F(CameraSessionModuleTest, portrait_session_moduletest_001, TestSize.Level0)
1986 {
1987     if (!IsSceneModeSupported(SceneMode::PORTRAIT)) {
1988         return;
1989     }
1990 
1991     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PORTRAIT);
1992     ASSERT_NE(outputCapability, nullptr);
1993     auto previewProfiles = outputCapability->GetPreviewProfiles();
1994     ASSERT_FALSE(previewProfiles.empty());
1995     auto photoProfiles = outputCapability->GetPhotoProfiles();
1996     ASSERT_FALSE(photoProfiles.empty());
1997 
1998     auto captureSession = manager_->CreateCaptureSession(SceneMode::PORTRAIT);
1999     auto portraitSession = static_cast<PortraitSession*>(captureSession.GetRefPtr());
2000     ASSERT_NE(portraitSession, nullptr);
2001     int32_t res = portraitSession->BeginConfig();
2002     EXPECT_EQ(res, 0);
2003 
2004     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
2005     ASSERT_NE(input, nullptr);
2006     input->Open();
2007     res = portraitSession->AddInput(input);
2008     EXPECT_EQ(res, 0);
2009     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
2010     ASSERT_NE(previewOutput, nullptr);
2011     EXPECT_TRUE(portraitSession->CanAddOutput(previewOutput));
2012     res = portraitSession->AddOutput(previewOutput);
2013     EXPECT_EQ(res, 0);
2014     sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
2015     ASSERT_NE(photoOutput, nullptr);
2016     EXPECT_TRUE(portraitSession->CanAddOutput(photoOutput));
2017     res = portraitSession->AddOutput(photoOutput);
2018     EXPECT_EQ(res, 0);
2019 
2020     res = portraitSession->CommitConfig();
2021     EXPECT_EQ(res, 0);
2022     res = portraitSession->Start();
2023     EXPECT_EQ(res, 0);
2024     sleep(WAIT_TIME_AFTER_START);
2025     res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
2026     EXPECT_EQ(res, 0);
2027     sleep(WAIT_TIME_AFTER_CAPTURE);
2028     res = portraitSession->Stop();
2029     EXPECT_EQ(res, 0);
2030     res = portraitSession->Release();
2031     EXPECT_EQ(res, 0);
2032 }
2033 
2034 /*
2035  * Feature: Framework
2036  * Function: Test portrait session with video output
2037  * SubFunction: NA
2038  * FunctionPoints: NA
2039  * EnvConditions: NA
2040  * CaseDescription: Test can not add video output into portrait session
2041  */
2042 HWTEST_F(CameraSessionModuleTest, portrait_session_moduletest_002, TestSize.Level0)
2043 {
2044     if (!IsSceneModeSupported(SceneMode::PORTRAIT)) {
2045         return;
2046     }
2047 
2048     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PORTRAIT);
2049     ASSERT_NE(outputCapability, nullptr);
2050     auto previewProfiles = outputCapability->GetPreviewProfiles();
2051     ASSERT_FALSE(previewProfiles.empty());
2052     auto videoProfiles = outputCapability->GetVideoProfiles();
2053     ASSERT_TRUE(videoProfiles.empty());
2054     auto outputCapabilityBase = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::VIDEO);
2055     ASSERT_NE(outputCapabilityBase, nullptr);
2056     auto videoProfilesBase = outputCapabilityBase->GetVideoProfiles();
2057     ASSERT_FALSE(videoProfilesBase.empty());
2058 
2059     auto captureSession = manager_->CreateCaptureSession(SceneMode::PORTRAIT);
2060     auto portraitSession = static_cast<PortraitSession*>(captureSession.GetRefPtr());
2061     ASSERT_NE(portraitSession, nullptr);
2062     int32_t res = portraitSession->BeginConfig();
2063     EXPECT_EQ(res, 0);
2064 
2065     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
2066     ASSERT_NE(input, nullptr);
2067     input->Open();
2068     res = portraitSession->AddInput(input);
2069     EXPECT_EQ(res, 0);
2070     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
2071     ASSERT_NE(previewOutput, nullptr);
2072     EXPECT_TRUE(portraitSession->CanAddOutput(previewOutput));
2073     res = portraitSession->AddOutput(previewOutput);
2074     EXPECT_EQ(res, 0);
2075     sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfilesBase[0]);
2076     ASSERT_NE(videoOutput, nullptr);
2077     EXPECT_FALSE(portraitSession->CanAddOutput(videoOutput));
2078 }
2079 
2080 /*
2081  * Feature: Framework
2082  * Function: Test portrait session get portrait effect
2083  * SubFunction: NA
2084  * FunctionPoints: NA
2085  * EnvConditions: NA
2086  * CaseDescription: Test can get portrait effect from portrait session
2087  */
2088 HWTEST_F(CameraSessionModuleTest, portrait_session_moduletest_003, TestSize.Level0)
2089 {
2090     if (!IsSceneModeSupported(SceneMode::PORTRAIT)) {
2091         return;
2092     }
2093 
2094     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PORTRAIT);
2095     ASSERT_NE(outputCapability, nullptr);
2096     auto previewProfiles = outputCapability->GetPreviewProfiles();
2097     ASSERT_FALSE(previewProfiles.empty());
2098     auto photoProfiles = outputCapability->GetPhotoProfiles();
2099     ASSERT_FALSE(photoProfiles.empty());
2100 
2101     auto captureSession = manager_->CreateCaptureSession(SceneMode::PORTRAIT);
2102     auto portraitSession = static_cast<PortraitSession*>(captureSession.GetRefPtr());
2103     ASSERT_NE(portraitSession, nullptr);
2104     int32_t res = portraitSession->BeginConfig();
2105     EXPECT_EQ(res, 0);
2106 
2107     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
2108     ASSERT_NE(input, nullptr);
2109     input->Open();
2110     res = portraitSession->AddInput(input);
2111     EXPECT_EQ(res, 0);
2112     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
2113     ASSERT_NE(previewOutput, nullptr);
2114     EXPECT_TRUE(portraitSession->CanAddOutput(previewOutput));
2115     res = portraitSession->AddOutput(previewOutput);
2116     EXPECT_EQ(res, 0);
2117     sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
2118     ASSERT_NE(photoOutput, nullptr);
2119     EXPECT_TRUE(portraitSession->CanAddOutput(photoOutput));
2120     res = portraitSession->AddOutput(photoOutput);
2121     EXPECT_EQ(res, 0);
2122 
2123     res = portraitSession->CommitConfig();
2124     EXPECT_EQ(res, 0);
2125     res = portraitSession->Start();
2126     EXPECT_EQ(res, 0);
2127     sleep(WAIT_TIME_AFTER_START);
2128 
2129     std::vector<PortraitEffect> effects = portraitSession->GetSupportedPortraitEffects();
2130     if (!effects.empty()) {
2131         EXPECT_EQ(portraitSession->GetPortraitEffect(), effects[0]);
2132     }
2133 
2134     res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
2135     EXPECT_EQ(res, 0);
2136     sleep(WAIT_TIME_AFTER_CAPTURE);
2137     res = portraitSession->Stop();
2138     EXPECT_EQ(res, 0);
2139     res = portraitSession->Release();
2140     EXPECT_EQ(res, 0);
2141 }
2142 
2143 /*
2144  * Feature: Framework
2145  * Function: Test portrait session set portrait effect
2146  * SubFunction: NA
2147  * FunctionPoints: NA
2148  * EnvConditions: NA
2149  * CaseDescription: Test can set portrait effect into portrait session
2150  */
2151 HWTEST_F(CameraSessionModuleTest, portrait_session_moduletest_004, TestSize.Level0)
2152 {
2153     if (!IsSceneModeSupported(SceneMode::PORTRAIT)) {
2154         return;
2155     }
2156 
2157     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PORTRAIT);
2158     ASSERT_NE(outputCapability, nullptr);
2159     auto previewProfiles = outputCapability->GetPreviewProfiles();
2160     ASSERT_FALSE(previewProfiles.empty());
2161     auto photoProfiles = outputCapability->GetPhotoProfiles();
2162     ASSERT_FALSE(photoProfiles.empty());
2163 
2164     auto captureSession = manager_->CreateCaptureSession(SceneMode::PORTRAIT);
2165     auto portraitSession = static_cast<PortraitSession*>(captureSession.GetRefPtr());
2166     ASSERT_NE(portraitSession, nullptr);
2167     int32_t res = portraitSession->BeginConfig();
2168     EXPECT_EQ(res, 0);
2169 
2170     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
2171     ASSERT_NE(input, nullptr);
2172     input->Open();
2173     res = portraitSession->AddInput(input);
2174     EXPECT_EQ(res, 0);
2175     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
2176     ASSERT_NE(previewOutput, nullptr);
2177     EXPECT_TRUE(portraitSession->CanAddOutput(previewOutput));
2178     res = portraitSession->AddOutput(previewOutput);
2179     EXPECT_EQ(res, 0);
2180     sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
2181     ASSERT_NE(photoOutput, nullptr);
2182     EXPECT_TRUE(portraitSession->CanAddOutput(photoOutput));
2183     res = portraitSession->AddOutput(photoOutput);
2184     EXPECT_EQ(res, 0);
2185 
2186     res = portraitSession->CommitConfig();
2187     EXPECT_EQ(res, 0);
2188     res = portraitSession->Start();
2189     EXPECT_EQ(res, 0);
2190     sleep(WAIT_TIME_AFTER_START);
2191 
2192     std::vector<PortraitEffect> effects = portraitSession->GetSupportedPortraitEffects();
2193     if (!effects.empty()) {
2194         portraitSession->LockForControl();
2195         portraitSession->SetPortraitEffect(effects[0]);
2196         portraitSession->UnlockForControl();
2197         EXPECT_EQ(portraitSession->GetPortraitEffect(), effects[0]);
2198     }
2199 
2200     res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
2201     EXPECT_EQ(res, 0);
2202     sleep(WAIT_TIME_AFTER_CAPTURE);
2203     res = portraitSession->Stop();
2204     EXPECT_EQ(res, 0);
2205     res = portraitSession->Release();
2206     EXPECT_EQ(res, 0);
2207 }
2208 
2209 /*
2210  * Feature: Framework
2211  * Function: Test portrait session get portrait filter
2212  * SubFunction: NA
2213  * FunctionPoints: NA
2214  * EnvConditions: NA
2215  * CaseDescription: Test can get portrait filter from portrait session
2216  */
2217 HWTEST_F(CameraSessionModuleTest, portrait_session_moduletest_005, TestSize.Level0)
2218 {
2219     if (!IsSceneModeSupported(SceneMode::PORTRAIT)) {
2220         return;
2221     }
2222 
2223     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PORTRAIT);
2224     ASSERT_NE(outputCapability, nullptr);
2225     auto previewProfiles = outputCapability->GetPreviewProfiles();
2226     ASSERT_FALSE(previewProfiles.empty());
2227     auto photoProfiles = outputCapability->GetPhotoProfiles();
2228     ASSERT_FALSE(photoProfiles.empty());
2229 
2230     auto captureSession = manager_->CreateCaptureSession(SceneMode::PORTRAIT);
2231     auto portraitSession = static_cast<PortraitSession*>(captureSession.GetRefPtr());
2232     ASSERT_NE(portraitSession, nullptr);
2233     int32_t res = portraitSession->BeginConfig();
2234     EXPECT_EQ(res, 0);
2235 
2236     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
2237     ASSERT_NE(input, nullptr);
2238     input->Open();
2239     res = portraitSession->AddInput(input);
2240     EXPECT_EQ(res, 0);
2241     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
2242     ASSERT_NE(previewOutput, nullptr);
2243     EXPECT_TRUE(portraitSession->CanAddOutput(previewOutput));
2244     res = portraitSession->AddOutput(previewOutput);
2245     EXPECT_EQ(res, 0);
2246     sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
2247     ASSERT_NE(photoOutput, nullptr);
2248     EXPECT_TRUE(portraitSession->CanAddOutput(photoOutput));
2249     res = portraitSession->AddOutput(photoOutput);
2250     EXPECT_EQ(res, 0);
2251 
2252     res = portraitSession->CommitConfig();
2253     EXPECT_EQ(res, 0);
2254     res = portraitSession->Start();
2255     EXPECT_EQ(res, 0);
2256     sleep(WAIT_TIME_AFTER_START);
2257 
2258     std::vector<FilterType> filterLists = portraitSession->GetSupportedFilters();
2259     if (!filterLists.empty()) {
2260         EXPECT_EQ(portraitSession->GetFilter(), filterLists[0]);
2261     }
2262 
2263     res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
2264     EXPECT_EQ(res, 0);
2265     sleep(WAIT_TIME_AFTER_CAPTURE);
2266     res = portraitSession->Stop();
2267     EXPECT_EQ(res, 0);
2268     res = portraitSession->Release();
2269     EXPECT_EQ(res, 0);
2270 }
2271 
2272 /*
2273  * Feature: Framework
2274  * Function: Test portrait session set portrait filter
2275  * SubFunction: NA
2276  * FunctionPoints: NA
2277  * EnvConditions: NA
2278  * CaseDescription: Test can set portrait filter into portrait session
2279  */
2280 HWTEST_F(CameraSessionModuleTest, portrait_session_moduletest_006, TestSize.Level0)
2281 {
2282     if (!IsSceneModeSupported(SceneMode::PORTRAIT)) {
2283         return;
2284     }
2285 
2286     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PORTRAIT);
2287     ASSERT_NE(outputCapability, nullptr);
2288     auto previewProfiles = outputCapability->GetPreviewProfiles();
2289     ASSERT_FALSE(previewProfiles.empty());
2290     auto photoProfiles = outputCapability->GetPhotoProfiles();
2291     ASSERT_FALSE(photoProfiles.empty());
2292 
2293     auto captureSession = manager_->CreateCaptureSession(SceneMode::PORTRAIT);
2294     auto portraitSession = static_cast<PortraitSession*>(captureSession.GetRefPtr());
2295     ASSERT_NE(portraitSession, nullptr);
2296     int32_t res = portraitSession->BeginConfig();
2297     EXPECT_EQ(res, 0);
2298 
2299     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
2300     ASSERT_NE(input, nullptr);
2301     input->Open();
2302     res = portraitSession->AddInput(input);
2303     EXPECT_EQ(res, 0);
2304     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
2305     ASSERT_NE(previewOutput, nullptr);
2306     EXPECT_TRUE(portraitSession->CanAddOutput(previewOutput));
2307     res = portraitSession->AddOutput(previewOutput);
2308     EXPECT_EQ(res, 0);
2309     sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
2310     ASSERT_NE(photoOutput, nullptr);
2311     EXPECT_TRUE(portraitSession->CanAddOutput(photoOutput));
2312     res = portraitSession->AddOutput(photoOutput);
2313     EXPECT_EQ(res, 0);
2314 
2315     res = portraitSession->CommitConfig();
2316     EXPECT_EQ(res, 0);
2317     res = portraitSession->Start();
2318     EXPECT_EQ(res, 0);
2319     sleep(WAIT_TIME_AFTER_START);
2320 
2321     std::vector<FilterType> filterLists = portraitSession->GetSupportedFilters();
2322     if (!filterLists.empty()) {
2323         portraitSession->LockForControl();
2324         portraitSession->SetFilter(filterLists[0]);
2325         portraitSession->UnlockForControl();
2326         EXPECT_EQ(portraitSession->GetFilter(), filterLists[0]);
2327     }
2328 
2329     res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
2330     EXPECT_EQ(res, 0);
2331     sleep(WAIT_TIME_AFTER_CAPTURE);
2332     res = portraitSession->Stop();
2333     EXPECT_EQ(res, 0);
2334     res = portraitSession->Release();
2335     EXPECT_EQ(res, 0);
2336 }
2337 
2338 /*
2339  * Feature: Framework
2340  * Function: Test portrait session photo ability function
2341  * SubFunction: NA
2342  * FunctionPoints: NA
2343  * EnvConditions: NA
2344  * CaseDescription: Test portrait session photo ability function
2345  */
2346 HWTEST_F(CameraSessionModuleTest, portrait_session_moduletest_007, TestSize.Level0)
2347 {
2348     SceneMode portraitMode = SceneMode::PORTRAIT;
2349     if (!IsSceneModeSupported(portraitMode)) {
2350         return;
2351     }
2352 
2353     sptr<CameraManager> cameraMgr = CameraManager::GetInstance();
2354     ASSERT_NE(cameraMgr, nullptr);
2355 
2356     sptr<CameraOutputCapability> capability = cameraMgr->GetSupportedOutputCapability(cameras_[0], portraitMode);
2357     ASSERT_NE(capability, nullptr);
2358 
2359     sptr<CaptureSession> captureSession = cameraMgr->CreateCaptureSession(portraitMode);
2360     ASSERT_NE(captureSession, nullptr);
2361 
2362     sptr<PortraitSession> portraitSession = static_cast<PortraitSession *>(captureSession.GetRefPtr());
2363     ASSERT_NE(portraitSession, nullptr);
2364 
2365     std::vector<sptr<CameraOutputCapability>> cocList = portraitSession->GetCameraOutputCapabilities(cameras_[0]);
2366     ASSERT_TRUE(cocList.size() != 0);
2367     auto previewProfiles = cocList[0]->GetPreviewProfiles();
2368     auto photoProfiles = cocList[0]->GetPhotoProfiles();
2369     auto videoProfiles = cocList[0]->GetVideoProfiles();
2370 
2371     int32_t intResult = portraitSession->BeginConfig();
2372     EXPECT_EQ(intResult, 0);
2373 
2374     intResult = portraitSession->AddInput(input_);
2375     EXPECT_EQ(intResult, 0);
2376 
2377     sptr<CaptureOutput> photoOutput = CreatePhotoOutput();
2378     ASSERT_NE(photoOutput, nullptr);
2379     intResult = portraitSession->AddOutput(photoOutput);
2380     EXPECT_EQ(intResult, 0);
2381 
2382     sptr<CaptureOutput> previewOutput = CreatePreviewOutput();
2383     ASSERT_NE(previewOutput, nullptr);
2384     intResult = portraitSession->AddOutput(previewOutput);
2385     EXPECT_EQ(intResult, 0);
2386 
2387     intResult = portraitSession->CommitConfig();
2388     EXPECT_EQ(intResult, 0);
2389 
2390     auto portraitFunctions = portraitSession->GetSessionFunctions(previewProfiles, photoProfiles, videoProfiles, true);
2391     ASSERT_TRUE(portraitFunctions.size() != 0);
2392     auto portraitFunction = portraitFunctions[0];
2393     portraitFunction->GetSupportedPortraitEffects();
2394     portraitFunction->GetSupportedVirtualApertures();
2395     portraitFunction->GetSupportedPhysicalApertures();
2396     std::vector<sptr<CameraAbility>> portraitConflictFunctionsList = portraitSession->GetSessionConflictFunctions();
2397 }
2398 
2399 /*
2400  * Feature: Framework
2401  * Function: Test portrait session !IsSessionCommited() && !IsSessionConfiged()
2402  * SubFunction: NA
2403  * FunctionPoints: NA
2404  * EnvConditions: NA
2405  * CaseDescription: Test portrait session !IsSessionCommited() && !IsSessionConfiged()
2406  */
2407 HWTEST_F(CameraSessionModuleTest, portrait_session_moduletest_008, TestSize.Level0)
2408 {
2409     ColorSpace colorSpace = COLOR_SPACE_UNKNOWN;
2410     int32_t intResult = session_->BeginConfig();
2411     EXPECT_EQ(intResult, 0);
2412     intResult = session_->AddInput(input_);
2413     EXPECT_EQ(intResult, 0);
2414     sptr<CaptureOutput> previewOutput = CreatePreviewOutput();
2415     ASSERT_NE(previewOutput, nullptr);
2416     intResult = session_->AddOutput(previewOutput);
2417     EXPECT_EQ(intResult, 0);
2418     session_->SetMode(SceneMode::PORTRAIT);
2419     EXPECT_EQ(session_->VerifyAbility(0), CAMERA_INVALID_ARG);
2420     EXPECT_EQ(session_->GetActiveColorSpace(colorSpace), CAMERA_OK);
2421     session_->SetColorEffect(COLOR_EFFECT_NORMAL);
2422     intResult = session_->CommitConfig();
2423     EXPECT_EQ(intResult, 0);
2424     if (session_->IsMacroSupported()) {
2425         session_->LockForControl();
2426         intResult = session_->EnableMacro(false);
2427         session_->UnlockForControl();
2428         EXPECT_EQ(intResult, 0);
2429     }
2430     EXPECT_EQ(session_->GetActiveColorSpace(colorSpace), CAMERA_OK);
2431     session_->SetColorEffect(COLOR_EFFECT_NORMAL);
2432     session_->innerInputDevice_ = nullptr;
2433     EXPECT_EQ(session_->VerifyAbility(0), CAMERA_INVALID_ARG);
2434     EXPECT_EQ(session_->Release(), 0);
2435 }
2436 
2437 /*
2438  * Feature: Framework
2439  * Function: Test portrait session abnormal branches
2440  * SubFunction: NA
2441  * FunctionPoints: NA
2442  * EnvConditions: NA
2443  * CaseDescription: Test portrait session abnormal branches
2444  */
2445 HWTEST_F(CameraSessionModuleTest, portrait_session_moduletest_009, TestSize.Level0)
2446 {
2447     SceneMode portraitMode = SceneMode::PORTRAIT;
2448     sptr<CaptureSession> captureSession = manager_->CreateCaptureSession(portraitMode);
2449     auto portraitSession = static_cast<PortraitSession*>(captureSession.GetRefPtr());
2450     ASSERT_NE(portraitSession, nullptr);
2451     EXPECT_EQ(portraitSession->GetSupportedPortraitEffects().empty(), true);
2452     EXPECT_EQ(portraitSession->GetPortraitEffect(), OFF_EFFECT);
2453     portraitSession->SetPortraitEffect(OFF_EFFECT);
2454     int32_t intResult = portraitSession->BeginConfig();
2455     EXPECT_EQ(intResult, 0);
2456     EXPECT_EQ(portraitSession->GetSupportedPortraitEffects().empty(), true);
2457     EXPECT_EQ(portraitSession->GetPortraitEffect(), OFF_EFFECT);
2458     portraitSession->SetPortraitEffect(OFF_EFFECT);
2459 }
2460 
2461 /*
2462  * Feature: Framework
2463  * Function: Test portrait session nullptr
2464  * SubFunction: NA
2465  * FunctionPoints: NA
2466  * EnvConditions: NA
2467  * CaseDescription: Test portrait session nullptr
2468  */
2469 HWTEST_F(CameraSessionModuleTest, portrait_session_moduletest_010, TestSize.Level0)
2470 {
2471     SceneMode portraitMode = SceneMode::PORTRAIT;
2472     sptr<CaptureSession> captureSession = manager_->CreateCaptureSession(portraitMode);
2473     auto portraitSession = static_cast<PortraitSession*>(captureSession.GetRefPtr());
2474     ASSERT_NE(portraitSession, nullptr);
2475     EXPECT_EQ(portraitSession->GetSupportedPortraitEffects().empty(), true);
2476     EXPECT_EQ(portraitSession->GetPortraitEffect(), OFF_EFFECT);
2477     portraitSession->SetPortraitEffect(OFF_EFFECT);
2478 }
2479 
2480 /*
2481  * Feature: Framework
2482  * Function: Test quick shot photo session with photo output
2483  * SubFunction: NA
2484  * FunctionPoints: NA
2485  * EnvConditions: NA
2486  * CaseDescription: Test can add photo output into quick shot photo session
2487  */
2488 HWTEST_F(CameraSessionModuleTest, quick_shot_photo_session_moduletest_001, TestSize.Level0)
2489 {
2490     if (!IsSceneModeSupported(SceneMode::QUICK_SHOT_PHOTO)) {
2491         return;
2492     }
2493 
2494     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::QUICK_SHOT_PHOTO);
2495     ASSERT_NE(outputCapability, nullptr);
2496     auto previewProfiles = outputCapability->GetPreviewProfiles();
2497     ASSERT_FALSE(previewProfiles.empty());
2498     auto photoProfiles = outputCapability->GetPhotoProfiles();
2499     ASSERT_FALSE(photoProfiles.empty());
2500 
2501     auto captureSession = manager_->CreateCaptureSession(SceneMode::QUICK_SHOT_PHOTO);
2502     auto quickShotPhotoSession = static_cast<QuickShotPhotoSession*>(captureSession.GetRefPtr());
2503     ASSERT_NE(quickShotPhotoSession, nullptr);
2504     int32_t res = quickShotPhotoSession->BeginConfig();
2505     EXPECT_EQ(res, 0);
2506 
2507     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
2508     ASSERT_NE(input, nullptr);
2509     input->Open();
2510     res = quickShotPhotoSession->AddInput(input);
2511     EXPECT_EQ(res, 0);
2512     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
2513     ASSERT_NE(previewOutput, nullptr);
2514     EXPECT_TRUE(quickShotPhotoSession->CanAddOutput(previewOutput));
2515     res = quickShotPhotoSession->AddOutput(previewOutput);
2516     EXPECT_EQ(res, 0);
2517     sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
2518     ASSERT_NE(photoOutput, nullptr);
2519     EXPECT_TRUE(quickShotPhotoSession->CanAddOutput(photoOutput));
2520     res = quickShotPhotoSession->AddOutput(photoOutput);
2521     EXPECT_EQ(res, 0);
2522 
2523     res = quickShotPhotoSession->CommitConfig();
2524     EXPECT_EQ(res, 0);
2525     res = quickShotPhotoSession->Start();
2526     EXPECT_EQ(res, 0);
2527     sleep(WAIT_TIME_AFTER_START);
2528     res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
2529     EXPECT_EQ(res, 0);
2530     sleep(WAIT_TIME_AFTER_CAPTURE);
2531     res = quickShotPhotoSession->Stop();
2532     EXPECT_EQ(res, 0);
2533     res = quickShotPhotoSession->Release();
2534     EXPECT_EQ(res, 0);
2535 }
2536 
2537 /*
2538  * Feature: Framework
2539  * Function: Test quick shot photo session with video output
2540  * SubFunction: NA
2541  * FunctionPoints: NA
2542  * EnvConditions: NA
2543  * CaseDescription: Test can not add video output into quick shot photo session
2544  */
2545 HWTEST_F(CameraSessionModuleTest, quick_shot_photo_session_moduletest_002, TestSize.Level0)
2546 {
2547     if (!IsSceneModeSupported(SceneMode::QUICK_SHOT_PHOTO)) {
2548         return;
2549     }
2550 
2551     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::QUICK_SHOT_PHOTO);
2552     ASSERT_NE(outputCapability, nullptr);
2553     auto previewProfiles = outputCapability->GetPreviewProfiles();
2554     ASSERT_FALSE(previewProfiles.empty());
2555     auto videoProfiles = outputCapability->GetVideoProfiles();
2556     ASSERT_TRUE(videoProfiles.empty());
2557     auto outputCapabilityBase = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::VIDEO);
2558     ASSERT_NE(outputCapabilityBase, nullptr);
2559     auto videoProfilesBase = outputCapabilityBase->GetVideoProfiles();
2560     ASSERT_FALSE(videoProfilesBase.empty());
2561 
2562     auto captureSession = manager_->CreateCaptureSession(SceneMode::QUICK_SHOT_PHOTO);
2563     auto quickShotPhotoSession = static_cast<QuickShotPhotoSession*>(captureSession.GetRefPtr());
2564     ASSERT_NE(quickShotPhotoSession, nullptr);
2565     int32_t res = quickShotPhotoSession->BeginConfig();
2566     EXPECT_EQ(res, 0);
2567 
2568     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
2569     ASSERT_NE(input, nullptr);
2570     input->Open();
2571     res = quickShotPhotoSession->AddInput(input);
2572     EXPECT_EQ(res, 0);
2573     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
2574     ASSERT_NE(previewOutput, nullptr);
2575     EXPECT_TRUE(quickShotPhotoSession->CanAddOutput(previewOutput));
2576     res = quickShotPhotoSession->AddOutput(previewOutput);
2577     EXPECT_EQ(res, 0);
2578     sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfilesBase[0]);
2579     ASSERT_NE(videoOutput, nullptr);
2580     EXPECT_FALSE(quickShotPhotoSession->CanAddOutput(videoOutput));
2581 }
2582 
2583 /*
2584  * Feature: Framework
2585  * Function: Test scan session with photo output
2586  * SubFunction: NA
2587  * FunctionPoints: NA
2588  * EnvConditions: NA
2589  * CaseDescription: Test can not add photo output into scan session
2590  */
2591 HWTEST_F(CameraSessionModuleTest, scan_session_moduletest_001, TestSize.Level0)
2592 {
2593     if (!IsSceneModeSupported(SceneMode::SCAN)) {
2594         return;
2595     }
2596 
2597     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::SCAN);
2598     ASSERT_NE(outputCapability, nullptr);
2599     auto previewProfiles = outputCapability->GetPreviewProfiles();
2600     ASSERT_FALSE(previewProfiles.empty());
2601     auto photoProfiles = outputCapability->GetPhotoProfiles();
2602     ASSERT_TRUE(photoProfiles.empty());
2603     auto outputCapabilityBase = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::CAPTURE);
2604     ASSERT_NE(outputCapabilityBase, nullptr);
2605     auto photoProfilesBase = outputCapabilityBase->GetPhotoProfiles();
2606     ASSERT_FALSE(photoProfilesBase.empty());
2607 
2608     auto captureSession = manager_->CreateCaptureSession(SceneMode::SCAN);
2609     auto scanSession = static_cast<ScanSession*>(captureSession.GetRefPtr());
2610     ASSERT_NE(scanSession, nullptr);
2611     int32_t res = scanSession->BeginConfig();
2612     EXPECT_EQ(res, 0);
2613 
2614     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
2615     ASSERT_NE(input, nullptr);
2616     input->Open();
2617     res = scanSession->AddInput(input);
2618     EXPECT_EQ(res, 0);
2619     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
2620     ASSERT_NE(previewOutput, nullptr);
2621     EXPECT_TRUE(scanSession->CanAddOutput(previewOutput));
2622     res = scanSession->AddOutput(previewOutput);
2623     EXPECT_EQ(res, 0);
2624     sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfilesBase[0]);
2625     ASSERT_NE(photoOutput, nullptr);
2626     EXPECT_FALSE(scanSession->CanAddOutput(photoOutput));
2627 }
2628 
2629 /*
2630  * Feature: Framework
2631  * Function: Test scan session with video output
2632  * SubFunction: NA
2633  * FunctionPoints: NA
2634  * EnvConditions: NA
2635  * CaseDescription: Test can not add video output into scan session
2636  */
2637 HWTEST_F(CameraSessionModuleTest, scan_session_moduletest_002, TestSize.Level0)
2638 {
2639     if (!IsSceneModeSupported(SceneMode::SCAN)) {
2640         return;
2641     }
2642 
2643     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::SCAN);
2644     ASSERT_NE(outputCapability, nullptr);
2645     auto previewProfiles = outputCapability->GetPreviewProfiles();
2646     ASSERT_FALSE(previewProfiles.empty());
2647     auto videoProfiles = outputCapability->GetVideoProfiles();
2648     ASSERT_TRUE(videoProfiles.empty());
2649     auto outputCapabilityBase = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::VIDEO);
2650     ASSERT_NE(outputCapabilityBase, nullptr);
2651     auto videoProfilesBase = outputCapabilityBase->GetVideoProfiles();
2652     ASSERT_FALSE(videoProfilesBase.empty());
2653 
2654     auto captureSession = manager_->CreateCaptureSession(SceneMode::SCAN);
2655     auto scanSession = static_cast<ScanSession*>(captureSession.GetRefPtr());
2656     ASSERT_NE(scanSession, nullptr);
2657     int32_t res = scanSession->BeginConfig();
2658     EXPECT_EQ(res, 0);
2659 
2660     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
2661     ASSERT_NE(input, nullptr);
2662     input->Open();
2663     res = scanSession->AddInput(input);
2664     EXPECT_EQ(res, 0);
2665     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
2666     ASSERT_NE(previewOutput, nullptr);
2667     EXPECT_TRUE(scanSession->CanAddOutput(previewOutput));
2668     res = scanSession->AddOutput(previewOutput);
2669     EXPECT_EQ(res, 0);
2670     sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfilesBase[0]);
2671     ASSERT_NE(videoOutput, nullptr);
2672     EXPECT_FALSE(scanSession->CanAddOutput(videoOutput));
2673 }
2674 
2675 /*
2676  * Feature: Framework
2677  * Function: Test scan session with preview output
2678  * SubFunction: NA
2679  * FunctionPoints: NA
2680  * EnvConditions: NA
2681  * CaseDescription: Test can add preview output into scan session
2682  */
2683 HWTEST_F(CameraSessionModuleTest, scan_session_moduletest_003, TestSize.Level0)
2684 {
2685     if (!IsSceneModeSupported(SceneMode::SCAN)) {
2686         return;
2687     }
2688 
2689     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::SCAN);
2690     ASSERT_NE(outputCapability, nullptr);
2691     auto previewProfiles = outputCapability->GetPreviewProfiles();
2692     ASSERT_FALSE(previewProfiles.empty());
2693 
2694     auto captureSession = manager_->CreateCaptureSession(SceneMode::SCAN);
2695     auto scanSession = static_cast<ScanSession*>(captureSession.GetRefPtr());
2696     ASSERT_NE(scanSession, nullptr);
2697     int32_t res = scanSession->BeginConfig();
2698     EXPECT_EQ(res, 0);
2699 
2700     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
2701     ASSERT_NE(input, nullptr);
2702     input->Open();
2703     res = scanSession->AddInput(input);
2704     EXPECT_EQ(res, 0);
2705     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
2706     ASSERT_NE(previewOutput, nullptr);
2707     EXPECT_TRUE(scanSession->CanAddOutput(previewOutput));
2708     res = scanSession->AddOutput(previewOutput);
2709     EXPECT_EQ(res, 0);
2710 
2711     res = scanSession->CommitConfig();
2712     EXPECT_EQ(res, 0);
2713     res = scanSession->Start();
2714     EXPECT_EQ(res, 0);
2715     sleep(WAIT_TIME_AFTER_START);
2716     res = scanSession->Stop();
2717     EXPECT_EQ(res, 0);
2718     res = scanSession->Release();
2719     EXPECT_EQ(res, 0);
2720 }
2721 
2722 /*
2723  * Feature: Framework
2724  * Function: Test scan session set focus mode
2725  * SubFunction: NA
2726  * FunctionPoints: NA
2727  * EnvConditions: NA
2728  * CaseDescription: Test scan session set focus mode
2729  */
2730 HWTEST_F(CameraSessionModuleTest, scan_session_moduletest_004, TestSize.Level0)
2731 {
2732     if (!IsSupportNow()) {
2733         return;
2734     }
2735     sptr<CaptureOutput> previewOutput_1;
2736     sptr<CaptureOutput> previewOutput_2;
2737     ConfigScanSession(previewOutput_1, previewOutput_2);
2738 
2739     scanSession_->LockForControl();
2740     int32_t setFocusMode = scanSession_->SetFocusMode(FOCUS_MODE_AUTO);
2741     EXPECT_EQ(setFocusMode, 0);
2742     scanSession_->UnlockForControl();
2743 
2744     FocusMode focusMode = scanSession_->GetFocusMode();
2745     EXPECT_NE(focusMode, FOCUS_MODE_MANUAL);
2746     EXPECT_NE(focusMode, FOCUS_MODE_CONTINUOUS_AUTO);
2747     EXPECT_EQ(focusMode, FOCUS_MODE_AUTO);
2748     EXPECT_NE(focusMode, FOCUS_MODE_LOCKED);
2749 
2750     int32_t getFoucusMode = scanSession_->GetFocusMode(focusMode);
2751     EXPECT_EQ(getFoucusMode, 0);
2752     EXPECT_EQ(focusMode, FOCUS_MODE_AUTO);
2753 
2754     bool isSupported = scanSession_->IsFocusModeSupported(focusMode);
2755     EXPECT_EQ(isSupported, true);
2756 
2757     int32_t isFocusSupported = scanSession_->IsFocusModeSupported(focusMode, isSupported);
2758     EXPECT_EQ(isFocusSupported, 0);
2759     EXPECT_EQ(isSupported, true);
2760 
2761     std::vector<FocusMode> supportedFocusModes = scanSession_->GetSupportedFocusModes();
2762     EXPECT_EQ(supportedFocusModes.empty(), false);
2763 
2764     int32_t getSupportedFocusModes = scanSession_->GetSupportedFocusModes(supportedFocusModes);
2765     EXPECT_EQ(supportedFocusModes.empty(), false);
2766     EXPECT_EQ(getSupportedFocusModes, 0);
2767 
2768     ((sptr<PreviewOutput> &) previewOutput_1)->Release();
2769     ((sptr<PreviewOutput> &) previewOutput_2)->Release();
2770 }
2771 
2772 /*
2773  * Feature: Framework
2774  * Function: Test scan session set focus point
2775  * SubFunction: NA
2776  * FunctionPoints: NA
2777  * EnvConditions: NA
2778  * CaseDescription: Test scan session set focus point
2779  */
2780 HWTEST_F(CameraSessionModuleTest, scan_session_moduletest_005, TestSize.Level0)
2781 {
2782     if (!IsSupportNow()) {
2783         return;
2784     }
2785     sptr<CaptureOutput> previewOutput_1;
2786     sptr<CaptureOutput> previewOutput_2;
2787     ConfigScanSession(previewOutput_1, previewOutput_2);
2788 
2789     Point point = { 1, 1 };
2790     scanSession_->LockForControl();
2791     int32_t setFocusMode = scanSession_->SetFocusPoint(point);
2792     EXPECT_EQ(setFocusMode, 0);
2793     scanSession_->UnlockForControl();
2794 
2795     Point focusPointGet = scanSession_->GetFocusPoint();
2796     EXPECT_EQ(focusPointGet.x, 1);
2797     EXPECT_EQ(focusPointGet.y, 1);
2798 
2799     float focalLength;
2800     int32_t focalLengthGet = scanSession_->GetFocalLength(focalLength);
2801     EXPECT_EQ(focalLengthGet, 0);
2802 
2803     ((sptr<PreviewOutput> &) previewOutput_1)->Release();
2804     ((sptr<PreviewOutput> &) previewOutput_2)->Release();
2805 }
2806 
2807 /*
2808  * Feature: Framework
2809  * Function: Test scan session set zoom ratio
2810  * SubFunction: NA
2811  * FunctionPoints: NA
2812  * EnvConditions: NA
2813  * CaseDescription: Test scan session set zoom ratio
2814  */
2815 HWTEST_F(CameraSessionModuleTest, scan_session_moduletest_006, TestSize.Level0)
2816 {
2817     if (!IsSupportNow()) {
2818         return;
2819     }
2820     sptr<CaptureOutput> previewOutput_1;
2821     sptr<CaptureOutput> previewOutput_2;
2822     ConfigScanSession(previewOutput_1, previewOutput_2);
2823 
2824     scanSession_->LockForControl();
2825     int32_t zoomRatioSet = scanSession_->SetZoomRatio(ZOOM_RATIO);
2826     EXPECT_EQ(zoomRatioSet, 0);
2827     scanSession_->UnlockForControl();
2828 
2829     std::vector<float> zoomRatioRange = scanSession_->GetZoomRatioRange();
2830     EXPECT_EQ(zoomRatioRange.empty(), false);
2831 
2832     int32_t zoomRatioRangeGet = scanSession_->GetZoomRatioRange(zoomRatioRange);
2833     EXPECT_EQ(zoomRatioRange.empty(), false);
2834     EXPECT_EQ(zoomRatioRangeGet, 0);
2835 
2836     float zoomRatio = scanSession_->GetZoomRatio();
2837     int32_t zoomRatioGet = scanSession_->GetZoomRatio(zoomRatio);
2838     EXPECT_EQ(zoomRatioGet, 0);
2839 
2840     ((sptr<PreviewOutput> &) previewOutput_1)->Release();
2841     ((sptr<PreviewOutput> &) previewOutput_2)->Release();
2842 }
2843 
2844 /*
2845  * Feature: Framework
2846  * Function: Test scan session report brightness status
2847  * SubFunction: NA
2848  * FunctionPoints: NA
2849  * EnvConditions: NA
2850  * CaseDescription: Test scan session report brightness status
2851  */
2852 HWTEST_F(CameraSessionModuleTest, scan_session_moduletest_007, TestSize.Level0)
2853 {
2854     if (!IsSupportNow()) {
2855         return;
2856     }
2857     sptr<CaptureOutput> previewOutput_1;
2858     sptr<CaptureOutput> previewOutput_2;
2859     ConfigScanSession(previewOutput_1, previewOutput_2);
2860 
2861     auto scanSession = static_cast<ScanSession*>(scanSession_.GetRefPtr());
2862     bool isSupported = scanSession->IsBrightnessStatusSupported();
2863     EXPECT_EQ(isSupported, true);
2864 
2865     std::shared_ptr<AppCallback> callback = std::make_shared<AppCallback>();
2866     scanSession->RegisterBrightnessStatusCallback(callback);
2867 
2868     int32_t intResult = scanSession->Start();
2869     EXPECT_EQ(intResult, 0);
2870 
2871     sleep(WAIT_TIME_AFTER_START);
2872 
2873     EXPECT_EQ(g_brightnessStatusChanged, true);
2874 
2875     scanSession->UnRegisterBrightnessStatusCallback();
2876     intResult = scanSession->Stop();
2877     EXPECT_EQ(intResult, 0);
2878 
2879     ((sptr<PreviewOutput> &) previewOutput_1)->Release();
2880     ((sptr<PreviewOutput> &) previewOutput_2)->Release();
2881 }
2882 
2883 /*
2884  * Feature: Framework
2885  * Function: Test scan session with CreateCaptureSession
2886  * SubFunction: NA
2887  * FunctionPoints: NA
2888  * EnvConditions: NA
2889  * CaseDescription: Test scan session with CreateCaptureSession
2890  */
2891 HWTEST_F(CameraSessionModuleTest, scan_session_moduletest_008, TestSize.Level0)
2892 {
2893     SceneMode mode = SceneMode::SCAN;
2894     sptr<CameraManager> modeManagerObj = CameraManager::GetInstance();
2895     ASSERT_NE(modeManagerObj, nullptr);
2896 
2897     sptr<CaptureSession> captureSession = modeManagerObj->CreateCaptureSession(mode);
2898     ASSERT_NE(captureSession, nullptr);
2899 }
2900 
2901 /*
2902  * Feature: Framework
2903  * Function: Test secure camera session with photo output
2904  * SubFunction: NA
2905  * FunctionPoints: NA
2906  * EnvConditions: NA
2907  * CaseDescription: Test can not add photo output into secure camera session
2908  */
2909 HWTEST_F(CameraSessionModuleTest, secure_camera_session_moduletest_001, TestSize.Level0)
2910 {
2911     if (!IsSceneModeSupported(SceneMode::SECURE)) {
2912         return;
2913     }
2914 
2915     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::SECURE);
2916     ASSERT_NE(outputCapability, nullptr);
2917     auto previewProfiles = outputCapability->GetPreviewProfiles();
2918     ASSERT_FALSE(previewProfiles.empty());
2919     auto photoProfiles = outputCapability->GetPhotoProfiles();
2920     ASSERT_TRUE(photoProfiles.empty());
2921     auto outputCapabilityBase = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::CAPTURE);
2922     ASSERT_NE(outputCapabilityBase, nullptr);
2923     auto photoProfilesBase = outputCapabilityBase->GetPhotoProfiles();
2924     ASSERT_FALSE(photoProfilesBase.empty());
2925 
2926     auto captureSession = manager_->CreateCaptureSession(SceneMode::SECURE);
2927     auto secureCameraSession = static_cast<SecureCameraSession*>(captureSession.GetRefPtr());
2928     ASSERT_NE(secureCameraSession, nullptr);
2929     int32_t res = secureCameraSession->BeginConfig();
2930     EXPECT_EQ(res, 0);
2931 
2932     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
2933     ASSERT_NE(input, nullptr);
2934     input->Open();
2935     res = secureCameraSession->AddInput(input);
2936     EXPECT_EQ(res, 0);
2937     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
2938     ASSERT_NE(previewOutput, nullptr);
2939     EXPECT_TRUE(secureCameraSession->CanAddOutput(previewOutput));
2940     res = secureCameraSession->AddOutput(previewOutput);
2941     EXPECT_EQ(res, 0);
2942     sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfilesBase[0]);
2943     ASSERT_NE(photoOutput, nullptr);
2944     EXPECT_FALSE(secureCameraSession->CanAddOutput(photoOutput));
2945 }
2946 
2947 /*
2948  * Feature: Framework
2949  * Function: Test secure camera session with video output
2950  * SubFunction: NA
2951  * FunctionPoints: NA
2952  * EnvConditions: NA
2953  * CaseDescription: Test can not add video output into secure camera session
2954  */
2955 HWTEST_F(CameraSessionModuleTest, secure_camera_session_moduletest_002, TestSize.Level0)
2956 {
2957     if (!IsSceneModeSupported(SceneMode::SECURE)) {
2958         return;
2959     }
2960 
2961     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::SECURE);
2962     ASSERT_NE(outputCapability, nullptr);
2963     auto previewProfiles = outputCapability->GetPreviewProfiles();
2964     ASSERT_FALSE(previewProfiles.empty());
2965     auto videoProfiles = outputCapability->GetVideoProfiles();
2966     ASSERT_TRUE(videoProfiles.empty());
2967     auto outputCapabilityBase = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::VIDEO);
2968     ASSERT_NE(outputCapabilityBase, nullptr);
2969     auto videoProfilesBase = outputCapabilityBase->GetVideoProfiles();
2970     ASSERT_FALSE(videoProfilesBase.empty());
2971 
2972     auto captureSession = manager_->CreateCaptureSession(SceneMode::SECURE);
2973     auto secureCameraSession = static_cast<SecureCameraSession*>(captureSession.GetRefPtr());
2974     ASSERT_NE(secureCameraSession, nullptr);
2975     int32_t res = secureCameraSession->BeginConfig();
2976     EXPECT_EQ(res, 0);
2977 
2978     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
2979     ASSERT_NE(input, nullptr);
2980     input->Open();
2981     res = secureCameraSession->AddInput(input);
2982     EXPECT_EQ(res, 0);
2983     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
2984     ASSERT_NE(previewOutput, nullptr);
2985     EXPECT_TRUE(secureCameraSession->CanAddOutput(previewOutput));
2986     res = secureCameraSession->AddOutput(previewOutput);
2987     EXPECT_EQ(res, 0);
2988     sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfilesBase[0]);
2989     ASSERT_NE(videoOutput, nullptr);
2990     EXPECT_FALSE(secureCameraSession->CanAddOutput(videoOutput));
2991 }
2992 
2993 /*
2994  * Feature: Framework
2995  * Function: Test secure camera session with preview output
2996  * SubFunction: NA
2997  * FunctionPoints: NA
2998  * EnvConditions: NA
2999  * CaseDescription: Test can add preview output into secure camera session
3000  */
3001 HWTEST_F(CameraSessionModuleTest, secure_camera_session_moduletest_003, TestSize.Level0)
3002 {
3003     if (!IsSceneModeSupported(SceneMode::SECURE)) {
3004         return;
3005     }
3006 
3007     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::SECURE);
3008     ASSERT_NE(outputCapability, nullptr);
3009     auto previewProfiles = outputCapability->GetPreviewProfiles();
3010     ASSERT_FALSE(previewProfiles.empty());
3011 
3012     auto captureSession = manager_->CreateCaptureSession(SceneMode::SECURE);
3013     auto secureCameraSession = static_cast<SecureCameraSession*>(captureSession.GetRefPtr());
3014     ASSERT_NE(secureCameraSession, nullptr);
3015     int32_t res = secureCameraSession->BeginConfig();
3016     EXPECT_EQ(res, 0);
3017 
3018     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
3019     ASSERT_NE(input, nullptr);
3020     input->Open();
3021     res = secureCameraSession->AddInput(input);
3022     EXPECT_EQ(res, 0);
3023     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
3024     ASSERT_NE(previewOutput, nullptr);
3025     EXPECT_TRUE(secureCameraSession->CanAddOutput(previewOutput));
3026     res = secureCameraSession->AddOutput(previewOutput);
3027     EXPECT_EQ(res, 0);
3028     res = secureCameraSession->AddSecureOutput(previewOutput);
3029     EXPECT_EQ(res, 0);
3030 
3031     res = secureCameraSession->CommitConfig();
3032     EXPECT_EQ(res, 0);
3033     res = secureCameraSession->Start();
3034     EXPECT_EQ(res, 0);
3035     sleep(WAIT_TIME_AFTER_START);
3036     res = secureCameraSession->Stop();
3037     EXPECT_EQ(res, 0);
3038     res = secureCameraSession->Release();
3039     EXPECT_EQ(res, 0);
3040 }
3041 
3042 /*
3043  * Feature: Framework
3044  * Function: Test slow motion session with photo output
3045  * SubFunction: NA
3046  * FunctionPoints: NA
3047  * EnvConditions: NA
3048  * CaseDescription: Test can not add photo output into slow motion session
3049  */
3050 HWTEST_F(CameraSessionModuleTest, slow_motion_session_moduletest_001, TestSize.Level0)
3051 {
3052     if (!IsSceneModeSupported(SceneMode::SLOW_MOTION)) {
3053         return;
3054     }
3055 
3056     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::SLOW_MOTION);
3057     ASSERT_NE(outputCapability, nullptr);
3058     auto previewProfiles = outputCapability->GetPreviewProfiles();
3059     ASSERT_FALSE(previewProfiles.empty());
3060     auto photoProfiles = outputCapability->GetPhotoProfiles();
3061     ASSERT_TRUE(photoProfiles.empty());
3062     auto outputCapabilityBase = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::CAPTURE);
3063     ASSERT_NE(outputCapabilityBase, nullptr);
3064     auto photoProfilesBase = outputCapabilityBase->GetPhotoProfiles();
3065     ASSERT_FALSE(photoProfilesBase.empty());
3066 
3067     auto captureSession = manager_->CreateCaptureSession(SceneMode::SLOW_MOTION);
3068     auto slowMotionSession = static_cast<SlowMotionSession*>(captureSession.GetRefPtr());
3069     ASSERT_NE(slowMotionSession, nullptr);
3070     int32_t res = slowMotionSession->BeginConfig();
3071     EXPECT_EQ(res, 0);
3072 
3073     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
3074     ASSERT_NE(input, nullptr);
3075     input->Open();
3076     res = slowMotionSession->AddInput(input);
3077     EXPECT_EQ(res, 0);
3078     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
3079     ASSERT_NE(previewOutput, nullptr);
3080     EXPECT_TRUE(slowMotionSession->CanAddOutput(previewOutput));
3081     res = slowMotionSession->AddOutput(previewOutput);
3082     EXPECT_EQ(res, 0);
3083     sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfilesBase[0]);
3084     ASSERT_NE(photoOutput, nullptr);
3085     EXPECT_FALSE(slowMotionSession->CanAddOutput(photoOutput));
3086 }
3087 
3088 /*
3089  * Feature: Framework
3090  * Function: Test slow motion session with video output
3091  * SubFunction: NA
3092  * FunctionPoints: NA
3093  * EnvConditions: NA
3094  * CaseDescription: Test can add video output into slow motion session
3095  */
3096 HWTEST_F(CameraSessionModuleTest, slow_motion_session_moduletest_002, TestSize.Level0)
3097 {
3098     if (!IsSceneModeSupported(SceneMode::SLOW_MOTION)) {
3099         return;
3100     }
3101 
3102     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::SLOW_MOTION);
3103     ASSERT_NE(outputCapability, nullptr);
3104     auto previewProfiles = outputCapability->GetPreviewProfiles();
3105     ASSERT_FALSE(previewProfiles.empty());
3106     auto videoProfiles = outputCapability->GetVideoProfiles();
3107     ASSERT_FALSE(videoProfiles.empty());
3108 
3109     auto captureSession = manager_->CreateCaptureSession(SceneMode::SLOW_MOTION);
3110     auto slowMotionSession = static_cast<SlowMotionSession*>(captureSession.GetRefPtr());
3111     ASSERT_NE(slowMotionSession, nullptr);
3112     int32_t res = slowMotionSession->BeginConfig();
3113     EXPECT_EQ(res, 0);
3114 
3115     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
3116     ASSERT_NE(input, nullptr);
3117     input->Open();
3118     res = slowMotionSession->AddInput(input);
3119     EXPECT_EQ(res, 0);
3120     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
3121     ASSERT_NE(previewOutput, nullptr);
3122     EXPECT_TRUE(slowMotionSession->CanAddOutput(previewOutput));
3123     res = slowMotionSession->AddOutput(previewOutput);
3124     EXPECT_EQ(res, 0);
3125     sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfiles[0]);
3126     ASSERT_NE(videoOutput, nullptr);
3127     EXPECT_TRUE(slowMotionSession->CanAddOutput(videoOutput));
3128     res = slowMotionSession->AddOutput(videoOutput);
3129     EXPECT_EQ(res, 0);
3130 
3131     res = slowMotionSession->CommitConfig();
3132     EXPECT_EQ(res, 0);
3133     res = slowMotionSession->Start();
3134     EXPECT_EQ(res, 0);
3135     sleep(WAIT_TIME_AFTER_START);
3136     res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Start();
3137     EXPECT_EQ(res, 0);
3138     sleep(WAIT_TIME_AFTER_START);
3139     res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Stop();
3140     EXPECT_EQ(res, 0);
3141     res = slowMotionSession->Stop();
3142     EXPECT_EQ(res, 0);
3143     res = slowMotionSession->Release();
3144     EXPECT_EQ(res, 0);
3145 }
3146 
3147 /*
3148  * Feature: Framework
3149  * Function: Test slow motion session set slow motion detection area
3150  * SubFunction: NA
3151  * FunctionPoints: NA
3152  * EnvConditions: NA
3153  * CaseDescription: Test can set slow motion detection area into slow motion session
3154  */
3155 HWTEST_F(CameraSessionModuleTest, slow_motion_session_moduletest_003, TestSize.Level0)
3156 {
3157     if (!IsSceneModeSupported(SceneMode::SLOW_MOTION)) {
3158         return;
3159     }
3160 
3161     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::SLOW_MOTION);
3162     ASSERT_NE(outputCapability, nullptr);
3163     auto previewProfiles = outputCapability->GetPreviewProfiles();
3164     ASSERT_FALSE(previewProfiles.empty());
3165     auto videoProfiles = outputCapability->GetVideoProfiles();
3166     ASSERT_FALSE(videoProfiles.empty());
3167 
3168     auto captureSession = manager_->CreateCaptureSession(SceneMode::SLOW_MOTION);
3169     auto slowMotionSession = static_cast<SlowMotionSession*>(captureSession.GetRefPtr());
3170     ASSERT_NE(slowMotionSession, nullptr);
3171     int32_t res = slowMotionSession->BeginConfig();
3172     EXPECT_EQ(res, 0);
3173 
3174     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
3175     ASSERT_NE(input, nullptr);
3176     input->Open();
3177     res = slowMotionSession->AddInput(input);
3178     EXPECT_EQ(res, 0);
3179     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
3180     ASSERT_NE(previewOutput, nullptr);
3181     EXPECT_TRUE(slowMotionSession->CanAddOutput(previewOutput));
3182     res = slowMotionSession->AddOutput(previewOutput);
3183     EXPECT_EQ(res, 0);
3184     sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfiles[0]);
3185     ASSERT_NE(videoOutput, nullptr);
3186     EXPECT_TRUE(slowMotionSession->CanAddOutput(videoOutput));
3187     res = slowMotionSession->AddOutput(videoOutput);
3188     EXPECT_EQ(res, 0);
3189 
3190     res = slowMotionSession->CommitConfig();
3191     EXPECT_EQ(res, 0);
3192     res = slowMotionSession->Start();
3193     EXPECT_EQ(res, 0);
3194     sleep(WAIT_TIME_AFTER_START);
3195 
3196     EXPECT_TRUE(slowMotionSession->IsSlowMotionDetectionSupported());
3197     Rect rect;
3198     rect.topLeftX = 0.1;
3199     rect.topLeftY = 0.1;
3200     rect.width = 0.8;
3201     rect.height = 0.8;
3202     slowMotionSession->SetSlowMotionDetectionArea(rect);
3203     sleep(WAIT_TIME_AFTER_SET_AREA);
3204 
3205     res = slowMotionSession->Stop();
3206     EXPECT_EQ(res, 0);
3207     res = slowMotionSession->Release();
3208     EXPECT_EQ(res, 0);
3209 }
3210 
3211 /*
3212  * Feature: Framework
3213  * Function: Test slow motion session callback
3214  * SubFunction: NA
3215  * FunctionPoints: NA
3216  * EnvConditions: NA
3217  * CaseDescription: Test slow motion session callback
3218  */
3219 HWTEST_F(CameraSessionModuleTest, slow_motion_session_moduletest_004, TestSize.Level0)
3220 {
3221     sptr<CaptureOutput> previewOutput;
3222     sptr<CaptureOutput> videoOutput;
3223     ConfigSlowMotionSession(previewOutput, videoOutput);
3224     ASSERT_NE(previewOutput, nullptr);
3225     ASSERT_NE(videoOutput, nullptr);
3226 
3227     if (slowMotionSession_->CanAddOutput(previewOutput)) {
3228         int32_t intResult = slowMotionSession_->AddOutput(previewOutput);
3229         EXPECT_EQ(intResult, 0);
3230 
3231         intResult = slowMotionSession_->CommitConfig();
3232         EXPECT_EQ(intResult, 0);
3233 
3234         sleep(WAIT_TIME_AFTER_START);
3235         intResult = slowMotionSession_->Start();
3236         EXPECT_EQ(intResult, 0);
3237     }
3238 }
3239 
3240 /*
3241  * Feature: Framework
3242  * Function: Test night session with photo output
3243  * SubFunction: NA
3244  * FunctionPoints: NA
3245  * EnvConditions: NA
3246  * CaseDescription: Test can add photo output into night session
3247  */
3248 HWTEST_F(CameraSessionModuleTest, night_session_moduletest_001, TestSize.Level0)
3249 {
3250     if (!IsSceneModeSupported(SceneMode::NIGHT)) {
3251         return;
3252     }
3253 
3254     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::NIGHT);
3255     ASSERT_NE(outputCapability, nullptr);
3256     auto previewProfiles = outputCapability->GetPreviewProfiles();
3257     ASSERT_FALSE(previewProfiles.empty());
3258     auto photoProfiles = outputCapability->GetPhotoProfiles();
3259     ASSERT_FALSE(photoProfiles.empty());
3260 
3261     auto captureSession = manager_->CreateCaptureSession(SceneMode::NIGHT);
3262     auto nightSession = static_cast<NightSession*>(captureSession.GetRefPtr());
3263     ASSERT_NE(nightSession, nullptr);
3264     int32_t res = nightSession->BeginConfig();
3265     EXPECT_EQ(res, 0);
3266 
3267     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
3268     ASSERT_NE(input, nullptr);
3269     input->Open();
3270     res = nightSession->AddInput(input);
3271     EXPECT_EQ(res, 0);
3272     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
3273     ASSERT_NE(previewOutput, nullptr);
3274     EXPECT_TRUE(nightSession->CanAddOutput(previewOutput));
3275     res = nightSession->AddOutput(previewOutput);
3276     EXPECT_EQ(res, 0);
3277     sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
3278     ASSERT_NE(photoOutput, nullptr);
3279     EXPECT_TRUE(nightSession->CanAddOutput(photoOutput));
3280     res = nightSession->AddOutput(photoOutput);
3281     EXPECT_EQ(res, 0);
3282 
3283     res = nightSession->CommitConfig();
3284     EXPECT_EQ(res, 0);
3285     res = nightSession->Start();
3286     EXPECT_EQ(res, 0);
3287     sleep(WAIT_TIME_AFTER_START);
3288     res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
3289     EXPECT_EQ(res, 0);
3290     sleep(WAIT_TIME_AFTER_CAPTURE);
3291     res = nightSession->Stop();
3292     EXPECT_EQ(res, 0);
3293     res = nightSession->Release();
3294     EXPECT_EQ(res, 0);
3295 }
3296 
3297 /*
3298  * Feature: Framework
3299  * Function: Test night session with video output
3300  * SubFunction: NA
3301  * FunctionPoints: NA
3302  * EnvConditions: NA
3303  * CaseDescription: Test can not add video output into night session
3304  */
3305 HWTEST_F(CameraSessionModuleTest, night_session_moduletest_002, TestSize.Level0)
3306 {
3307     if (!IsSceneModeSupported(SceneMode::NIGHT)) {
3308         return;
3309     }
3310 
3311     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::NIGHT);
3312     ASSERT_NE(outputCapability, nullptr);
3313     auto previewProfiles = outputCapability->GetPreviewProfiles();
3314     ASSERT_FALSE(previewProfiles.empty());
3315     auto videoProfiles = outputCapability->GetVideoProfiles();
3316     ASSERT_TRUE(videoProfiles.empty());
3317     auto outputCapabilityBase = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::VIDEO);
3318     ASSERT_NE(outputCapabilityBase, nullptr);
3319     auto videoProfilesBase = outputCapabilityBase->GetVideoProfiles();
3320     ASSERT_FALSE(videoProfilesBase.empty());
3321 
3322     auto captureSession = manager_->CreateCaptureSession(SceneMode::NIGHT);
3323     auto nightSession = static_cast<NightSession*>(captureSession.GetRefPtr());
3324     ASSERT_NE(nightSession, nullptr);
3325     int32_t res = nightSession->BeginConfig();
3326     EXPECT_EQ(res, 0);
3327 
3328     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
3329     ASSERT_NE(input, nullptr);
3330     input->Open();
3331     res = nightSession->AddInput(input);
3332     EXPECT_EQ(res, 0);
3333     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
3334     ASSERT_NE(previewOutput, nullptr);
3335     EXPECT_TRUE(nightSession->CanAddOutput(previewOutput));
3336     res = nightSession->AddOutput(previewOutput);
3337     EXPECT_EQ(res, 0);
3338     sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfilesBase[0]);
3339     ASSERT_NE(videoOutput, nullptr);
3340     EXPECT_FALSE(nightSession->CanAddOutput(videoOutput));
3341 }
3342 
3343 /*
3344  * Feature: Framework
3345  * Function: Test night session set exposure
3346  * SubFunction: NA
3347  * FunctionPoints: NA
3348  * EnvConditions: NA
3349  * CaseDescription: Test can set exposure into night session
3350  */
3351 HWTEST_F(CameraSessionModuleTest, night_session_moduletest_003, TestSize.Level0)
3352 {
3353     if (!IsSceneModeSupported(SceneMode::NIGHT)) {
3354         return;
3355     }
3356 
3357     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::NIGHT);
3358     ASSERT_NE(outputCapability, nullptr);
3359     auto previewProfiles = outputCapability->GetPreviewProfiles();
3360     ASSERT_FALSE(previewProfiles.empty());
3361     auto photoProfiles = outputCapability->GetPhotoProfiles();
3362     ASSERT_FALSE(photoProfiles.empty());
3363 
3364     auto captureSession = manager_->CreateCaptureSession(SceneMode::NIGHT);
3365     auto nightSession = static_cast<NightSession*>(captureSession.GetRefPtr());
3366     ASSERT_NE(nightSession, nullptr);
3367     int32_t res = nightSession->BeginConfig();
3368     EXPECT_EQ(res, 0);
3369 
3370     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
3371     ASSERT_NE(input, nullptr);
3372     input->Open();
3373     res = nightSession->AddInput(input);
3374     EXPECT_EQ(res, 0);
3375     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
3376     ASSERT_NE(previewOutput, nullptr);
3377     EXPECT_TRUE(nightSession->CanAddOutput(previewOutput));
3378     res = nightSession->AddOutput(previewOutput);
3379     EXPECT_EQ(res, 0);
3380     sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
3381     ASSERT_NE(photoOutput, nullptr);
3382     EXPECT_TRUE(nightSession->CanAddOutput(photoOutput));
3383     res = nightSession->AddOutput(photoOutput);
3384     EXPECT_EQ(res, 0);
3385 
3386     res = nightSession->CommitConfig();
3387     EXPECT_EQ(res, 0);
3388     res = nightSession->Start();
3389     EXPECT_EQ(res, 0);
3390     sleep(WAIT_TIME_AFTER_START);
3391 
3392     vector<uint32_t> exposureRange;
3393     res = nightSession->GetExposureRange(exposureRange);
3394     EXPECT_EQ(res, 0);
3395     if (!exposureRange.empty()) {
3396         nightSession->LockForControl();
3397         res = nightSession->SetExposure(exposureRange[0]);
3398         nightSession->UnlockForControl();
3399         EXPECT_EQ(res, 0);
3400         uint32_t exposure;
3401         res = nightSession->GetExposure(exposure);
3402         EXPECT_EQ(res, 0);
3403         EXPECT_EQ(exposure, exposureRange[0]);
3404     }
3405 
3406     res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
3407     EXPECT_EQ(res, 0);
3408     sleep(WAIT_TIME_AFTER_CAPTURE);
3409     res = nightSession->Stop();
3410     EXPECT_EQ(res, 0);
3411     res = nightSession->Release();
3412     EXPECT_EQ(res, 0);
3413 }
3414 
3415 /*
3416  * Feature: Framework
3417  * Function: Test night session abnormal branches
3418  * SubFunction: NA
3419  * FunctionPoints: NA
3420  * EnvConditions: NA
3421  * CaseDescription: Test night session abnormal branches
3422  */
3423 HWTEST_F(CameraSessionModuleTest, night_session_moduletest_004, TestSize.Level0)
3424 {
3425     SceneMode nightMode = SceneMode::NIGHT;
3426     sptr<CaptureSession> captureSession = manager_->CreateCaptureSession(nightMode);
3427     auto nightSession = static_cast<NightSession*>(captureSession.GetRefPtr());
3428     ASSERT_NE(nightSession, nullptr);
3429     int32_t intResult = nightSession->BeginConfig();
3430     EXPECT_EQ(intResult, 0);
3431     intResult = nightSession->AddInput(input_);
3432     EXPECT_EQ(intResult, 0);
3433     std::vector<uint32_t> exposureRange;
3434     uint32_t exposureValue = 0;
3435     EXPECT_EQ(nightSession->GetExposureRange(exposureRange), SESSION_NOT_CONFIG);
3436     EXPECT_EQ(nightSession->SetExposure(0), SESSION_NOT_CONFIG);
3437     EXPECT_EQ(nightSession->GetExposure(exposureValue), SESSION_NOT_CONFIG);
3438 }
3439 
3440 /*
3441  * Feature: Framework
3442  * Function: Test night session nullptr
3443  * SubFunction: NA
3444  * FunctionPoints: NA
3445  * EnvConditions: NA
3446  * CaseDescription: Test night session nullptr
3447  */
3448 HWTEST_F(CameraSessionModuleTest, night_session_moduletest_005, TestSize.Level0)
3449 {
3450     sptr<CaptureSession> camSession = manager_->CreateCaptureSession();
3451     ASSERT_NE(camSession, nullptr);
3452     SceneMode nightMode = SceneMode::NIGHT;
3453     sptr<CaptureSession> captureSession = manager_->CreateCaptureSession(nightMode);
3454     auto nightSession = static_cast<NightSession*>(captureSession.GetRefPtr());
3455     uint32_t exposureValue = 0;
3456     std::vector<uint32_t> exposureRange;
3457     EXPECT_EQ(nightSession->GetExposureRange(exposureRange), SESSION_NOT_CONFIG);
3458     EXPECT_EQ(nightSession->GetExposure(exposureValue), SESSION_NOT_CONFIG);
3459     EXPECT_EQ(nightSession->SetExposure(0), SESSION_NOT_CONFIG);
3460 }
3461 
3462 /*
3463  * Feature: Framework
3464  * Function: Test profession session with photo output
3465  * SubFunction: NA
3466  * FunctionPoints: NA
3467  * EnvConditions: NA
3468  * CaseDescription: Test can add photo output into profession session
3469  */
3470 HWTEST_F(CameraSessionModuleTest, profession_session_moduletest_001, TestSize.Level0)
3471 {
3472     if (!IsSceneModeSupported(SceneMode::PROFESSIONAL)) {
3473         return;
3474     }
3475 
3476     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PROFESSIONAL);
3477     ASSERT_NE(outputCapability, nullptr);
3478     auto previewProfiles = outputCapability->GetPreviewProfiles();
3479     ASSERT_FALSE(previewProfiles.empty());
3480     auto photoProfiles = outputCapability->GetPhotoProfiles();
3481     ASSERT_FALSE(photoProfiles.empty());
3482 
3483     auto captureSession = manager_->CreateCaptureSession(SceneMode::PROFESSIONAL);
3484     auto professionSession = static_cast<ProfessionSession*>(captureSession.GetRefPtr());
3485     ASSERT_NE(professionSession, nullptr);
3486     int32_t res = professionSession->BeginConfig();
3487     EXPECT_EQ(res, 0);
3488 
3489     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
3490     ASSERT_NE(input, nullptr);
3491     input->Open();
3492     res = professionSession->AddInput(input);
3493     EXPECT_EQ(res, 0);
3494     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
3495     ASSERT_NE(previewOutput, nullptr);
3496     EXPECT_TRUE(professionSession->CanAddOutput(previewOutput));
3497     res = professionSession->AddOutput(previewOutput);
3498     EXPECT_EQ(res, 0);
3499     sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
3500     ASSERT_NE(photoOutput, nullptr);
3501     EXPECT_TRUE(professionSession->CanAddOutput(photoOutput));
3502     res = professionSession->AddOutput(photoOutput);
3503     EXPECT_EQ(res, 0);
3504 
3505     res = professionSession->CommitConfig();
3506     EXPECT_EQ(res, 0);
3507     res = professionSession->Start();
3508     EXPECT_EQ(res, 0);
3509     sleep(WAIT_TIME_AFTER_START);
3510     res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
3511     EXPECT_EQ(res, 0);
3512     sleep(WAIT_TIME_AFTER_CAPTURE);
3513     res = professionSession->Stop();
3514     EXPECT_EQ(res, 0);
3515     res = professionSession->Release();
3516     EXPECT_EQ(res, 0);
3517 }
3518 
3519 /*
3520  * Feature: Framework
3521  * Function: Test profession session with video output
3522  * SubFunction: NA
3523  * FunctionPoints: NA
3524  * EnvConditions: NA
3525  * CaseDescription: Test can add video output into profession session
3526  */
3527 HWTEST_F(CameraSessionModuleTest, profession_session_moduletest_002, TestSize.Level0)
3528 {
3529     if (!IsSceneModeSupported(SceneMode::PROFESSIONAL)) {
3530         return;
3531     }
3532 
3533     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PROFESSIONAL);
3534     ASSERT_NE(outputCapability, nullptr);
3535     auto previewProfiles = outputCapability->GetPreviewProfiles();
3536     ASSERT_FALSE(previewProfiles.empty());
3537     auto videoProfiles = outputCapability->GetVideoProfiles();
3538     ASSERT_FALSE(videoProfiles.empty());
3539 
3540     auto captureSession = manager_->CreateCaptureSession(SceneMode::PROFESSIONAL);
3541     auto professionSession = static_cast<ProfessionSession*>(captureSession.GetRefPtr());
3542     ASSERT_NE(professionSession, nullptr);
3543     int32_t res = professionSession->BeginConfig();
3544     EXPECT_EQ(res, 0);
3545 
3546     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
3547     ASSERT_NE(input, nullptr);
3548     input->Open();
3549     res = professionSession->AddInput(input);
3550     EXPECT_EQ(res, 0);
3551     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
3552     ASSERT_NE(previewOutput, nullptr);
3553     EXPECT_TRUE(professionSession->CanAddOutput(previewOutput));
3554     res = professionSession->AddOutput(previewOutput);
3555     EXPECT_EQ(res, 0);
3556     sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfiles[0]);
3557     ASSERT_NE(videoOutput, nullptr);
3558     EXPECT_TRUE(professionSession->CanAddOutput(videoOutput));
3559     res = professionSession->AddOutput(videoOutput);
3560     EXPECT_EQ(res, 0);
3561 
3562     res = professionSession->CommitConfig();
3563     EXPECT_EQ(res, 0);
3564     res = professionSession->Start();
3565     EXPECT_EQ(res, 0);
3566     sleep(WAIT_TIME_AFTER_START);
3567     res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Start();
3568     EXPECT_EQ(res, 0);
3569     sleep(WAIT_TIME_AFTER_START);
3570     res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Stop();
3571     EXPECT_EQ(res, 0);
3572     res = professionSession->Stop();
3573     EXPECT_EQ(res, 0);
3574     res = professionSession->Release();
3575     EXPECT_EQ(res, 0);
3576 }
3577 
3578 /*
3579  * Feature: Framework
3580  * Function: Test profession session set metering mode
3581  * SubFunction: NA
3582  * FunctionPoints: NA
3583  * EnvConditions: NA
3584  * CaseDescription: Test can set metering mode into profession session
3585  */
3586 HWTEST_F(CameraSessionModuleTest, profession_session_moduletest_003, TestSize.Level0)
3587 {
3588     if (!IsSceneModeSupported(SceneMode::PROFESSIONAL)) {
3589         return;
3590     }
3591 
3592     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PROFESSIONAL);
3593     ASSERT_NE(outputCapability, nullptr);
3594     auto previewProfiles = outputCapability->GetPreviewProfiles();
3595     ASSERT_FALSE(previewProfiles.empty());
3596     auto videoProfiles = outputCapability->GetVideoProfiles();
3597     ASSERT_FALSE(videoProfiles.empty());
3598 
3599     auto captureSession = manager_->CreateCaptureSession(SceneMode::PROFESSIONAL);
3600     auto professionSession = static_cast<ProfessionSession*>(captureSession.GetRefPtr());
3601     ASSERT_NE(professionSession, nullptr);
3602     int32_t res = professionSession->BeginConfig();
3603     EXPECT_EQ(res, 0);
3604 
3605     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
3606     ASSERT_NE(input, nullptr);
3607     input->Open();
3608     res = professionSession->AddInput(input);
3609     EXPECT_EQ(res, 0);
3610     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
3611     ASSERT_NE(previewOutput, nullptr);
3612     EXPECT_TRUE(professionSession->CanAddOutput(previewOutput));
3613     res = professionSession->AddOutput(previewOutput);
3614     EXPECT_EQ(res, 0);
3615     sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfiles[0]);
3616     ASSERT_NE(videoOutput, nullptr);
3617     EXPECT_TRUE(professionSession->CanAddOutput(videoOutput));
3618     res = professionSession->AddOutput(videoOutput);
3619     EXPECT_EQ(res, 0);
3620 
3621     res = professionSession->CommitConfig();
3622     EXPECT_EQ(res, 0);
3623     res = professionSession->Start();
3624     EXPECT_EQ(res, 0);
3625     sleep(WAIT_TIME_AFTER_START);
3626 
3627     vector<MeteringMode> modes;
3628     res = professionSession->GetSupportedMeteringModes(modes);
3629     EXPECT_EQ(res, 0);
3630     if (!modes.empty()) {
3631         bool supported;
3632         res = professionSession->IsMeteringModeSupported(METERING_MODE_CENTER_WEIGHTED, supported);
3633         EXPECT_EQ(res, 0);
3634         if (supported) {
3635             professionSession->LockForControl();
3636             res = professionSession->SetMeteringMode(METERING_MODE_CENTER_WEIGHTED);
3637             professionSession->UnlockForControl();
3638             EXPECT_EQ(res, 0);
3639             MeteringMode mode;
3640             res = professionSession->GetMeteringMode(mode);
3641             EXPECT_EQ(res, 0);
3642             EXPECT_EQ(mode, METERING_MODE_CENTER_WEIGHTED);
3643         }
3644     }
3645 
3646     res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Start();
3647     EXPECT_EQ(res, 0);
3648     sleep(WAIT_TIME_AFTER_START);
3649     res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Stop();
3650     EXPECT_EQ(res, 0);
3651     res = professionSession->Stop();
3652     EXPECT_EQ(res, 0);
3653     res = professionSession->Release();
3654     EXPECT_EQ(res, 0);
3655 }
3656 
3657 /*
3658  * Feature: Framework
3659  * Function: Test profession session set iso range
3660  * SubFunction: NA
3661  * FunctionPoints: NA
3662  * EnvConditions: NA
3663  * CaseDescription: Test can set iso range into profession session
3664  */
3665 HWTEST_F(CameraSessionModuleTest, profession_session_moduletest_004, TestSize.Level0)
3666 {
3667     if (!IsSceneModeSupported(SceneMode::PROFESSIONAL)) {
3668         return;
3669     }
3670 
3671     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PROFESSIONAL);
3672     ASSERT_NE(outputCapability, nullptr);
3673     auto previewProfiles = outputCapability->GetPreviewProfiles();
3674     ASSERT_FALSE(previewProfiles.empty());
3675     auto videoProfiles = outputCapability->GetVideoProfiles();
3676     ASSERT_FALSE(videoProfiles.empty());
3677 
3678     auto captureSession = manager_->CreateCaptureSession(SceneMode::PROFESSIONAL);
3679     auto professionSession = static_cast<ProfessionSession*>(captureSession.GetRefPtr());
3680     ASSERT_NE(professionSession, nullptr);
3681     int32_t res = professionSession->BeginConfig();
3682     EXPECT_EQ(res, 0);
3683 
3684     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
3685     ASSERT_NE(input, nullptr);
3686     input->Open();
3687     res = professionSession->AddInput(input);
3688     EXPECT_EQ(res, 0);
3689     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
3690     ASSERT_NE(previewOutput, nullptr);
3691     EXPECT_TRUE(professionSession->CanAddOutput(previewOutput));
3692     res = professionSession->AddOutput(previewOutput);
3693     EXPECT_EQ(res, 0);
3694     sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfiles[0]);
3695     ASSERT_NE(videoOutput, nullptr);
3696     EXPECT_TRUE(professionSession->CanAddOutput(videoOutput));
3697     res = professionSession->AddOutput(videoOutput);
3698     EXPECT_EQ(res, 0);
3699 
3700     res = professionSession->CommitConfig();
3701     EXPECT_EQ(res, 0);
3702     res = professionSession->Start();
3703     EXPECT_EQ(res, 0);
3704     sleep(WAIT_TIME_AFTER_START);
3705 
3706     bool isManualIsoSupported = professionSession->IsManualIsoSupported();
3707     if (isManualIsoSupported) {
3708         vector<int32_t> isoRange;
3709         res = professionSession->GetIsoRange(isoRange);
3710         EXPECT_EQ(res, 0);
3711         if (!isoRange.empty()) {
3712             professionSession->LockForControl();
3713             res = professionSession->SetISO(isoRange[0]);
3714             professionSession->UnlockForControl();
3715             EXPECT_EQ(res, 0);
3716             int32_t iso;
3717             res = professionSession->GetISO(iso);
3718             EXPECT_EQ(res, 0);
3719             EXPECT_EQ(iso, isoRange[0]);
3720         }
3721     }
3722 
3723     res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Start();
3724     EXPECT_EQ(res, 0);
3725     sleep(WAIT_TIME_AFTER_START);
3726     res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Stop();
3727     EXPECT_EQ(res, 0);
3728     res = professionSession->Stop();
3729     EXPECT_EQ(res, 0);
3730     res = professionSession->Release();
3731     EXPECT_EQ(res, 0);
3732 }
3733 
3734 /*
3735  * Feature: Framework
3736  * Function: Test profession session set focus mode
3737  * SubFunction: NA
3738  * FunctionPoints: NA
3739  * EnvConditions: NA
3740  * CaseDescription: Test can set focus mode into profession session
3741  */
3742 HWTEST_F(CameraSessionModuleTest, profession_session_moduletest_005, TestSize.Level0)
3743 {
3744     if (!IsSceneModeSupported(SceneMode::PROFESSIONAL)) {
3745         return;
3746     }
3747 
3748     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PROFESSIONAL);
3749     ASSERT_NE(outputCapability, nullptr);
3750     auto previewProfiles = outputCapability->GetPreviewProfiles();
3751     ASSERT_FALSE(previewProfiles.empty());
3752     auto videoProfiles = outputCapability->GetVideoProfiles();
3753     ASSERT_FALSE(videoProfiles.empty());
3754 
3755     auto captureSession = manager_->CreateCaptureSession(SceneMode::PROFESSIONAL);
3756     auto professionSession = static_cast<ProfessionSession*>(captureSession.GetRefPtr());
3757     ASSERT_NE(professionSession, nullptr);
3758     int32_t res = professionSession->BeginConfig();
3759     EXPECT_EQ(res, 0);
3760 
3761     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
3762     ASSERT_NE(input, nullptr);
3763     input->Open();
3764     res = professionSession->AddInput(input);
3765     EXPECT_EQ(res, 0);
3766     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
3767     ASSERT_NE(previewOutput, nullptr);
3768     EXPECT_TRUE(professionSession->CanAddOutput(previewOutput));
3769     res = professionSession->AddOutput(previewOutput);
3770     EXPECT_EQ(res, 0);
3771     sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfiles[0]);
3772     ASSERT_NE(videoOutput, nullptr);
3773     EXPECT_TRUE(professionSession->CanAddOutput(videoOutput));
3774     res = professionSession->AddOutput(videoOutput);
3775     EXPECT_EQ(res, 0);
3776 
3777     res = professionSession->CommitConfig();
3778     EXPECT_EQ(res, 0);
3779     res = professionSession->Start();
3780     EXPECT_EQ(res, 0);
3781     sleep(WAIT_TIME_AFTER_START);
3782 
3783     std::vector<FocusMode> modes;
3784     res = professionSession->GetSupportedFocusModes(modes);
3785     EXPECT_EQ(res, 0);
3786     if (!modes.empty()) {
3787         FocusMode focusMode = modes[0];
3788         bool supported;
3789         res = professionSession->IsFocusModeSupported(focusMode, supported);
3790         EXPECT_EQ(res, 0);
3791         if (supported) {
3792             professionSession->LockForControl();
3793             res = professionSession->SetFocusMode(focusMode);
3794             professionSession->UnlockForControl();
3795             EXPECT_EQ(res, 0);
3796             FocusMode mode;
3797             res = professionSession->GetFocusMode(mode);
3798             EXPECT_EQ(res, 0);
3799             EXPECT_EQ(mode, focusMode);
3800         }
3801     }
3802 
3803     res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Start();
3804     EXPECT_EQ(res, 0);
3805     sleep(WAIT_TIME_AFTER_START);
3806     res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Stop();
3807     EXPECT_EQ(res, 0);
3808     res = professionSession->Stop();
3809     EXPECT_EQ(res, 0);
3810     res = professionSession->Release();
3811     EXPECT_EQ(res, 0);
3812 }
3813 
3814 /*
3815  * Feature: Framework
3816  * Function: Test profession session set exposure hint mode
3817  * SubFunction: NA
3818  * FunctionPoints: NA
3819  * EnvConditions: NA
3820  * CaseDescription: Test can set exposure hint mode into profession session
3821  */
3822 HWTEST_F(CameraSessionModuleTest, profession_session_moduletest_006, TestSize.Level0)
3823 {
3824     if (!IsSceneModeSupported(SceneMode::PROFESSIONAL)) {
3825         return;
3826     }
3827 
3828     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PROFESSIONAL);
3829     ASSERT_NE(outputCapability, nullptr);
3830     auto previewProfiles = outputCapability->GetPreviewProfiles();
3831     ASSERT_FALSE(previewProfiles.empty());
3832     auto videoProfiles = outputCapability->GetVideoProfiles();
3833     ASSERT_FALSE(videoProfiles.empty());
3834 
3835     auto captureSession = manager_->CreateCaptureSession(SceneMode::PROFESSIONAL);
3836     auto professionSession = static_cast<ProfessionSession*>(captureSession.GetRefPtr());
3837     ASSERT_NE(professionSession, nullptr);
3838     int32_t res = professionSession->BeginConfig();
3839     EXPECT_EQ(res, 0);
3840 
3841     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
3842     ASSERT_NE(input, nullptr);
3843     input->Open();
3844     res = professionSession->AddInput(input);
3845     EXPECT_EQ(res, 0);
3846     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
3847     ASSERT_NE(previewOutput, nullptr);
3848     EXPECT_TRUE(professionSession->CanAddOutput(previewOutput));
3849     res = professionSession->AddOutput(previewOutput);
3850     EXPECT_EQ(res, 0);
3851     sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfiles[0]);
3852     ASSERT_NE(videoOutput, nullptr);
3853     EXPECT_TRUE(professionSession->CanAddOutput(videoOutput));
3854     res = professionSession->AddOutput(videoOutput);
3855     EXPECT_EQ(res, 0);
3856 
3857     res = professionSession->CommitConfig();
3858     EXPECT_EQ(res, 0);
3859     res = professionSession->Start();
3860     EXPECT_EQ(res, 0);
3861     sleep(WAIT_TIME_AFTER_START);
3862 
3863     std::vector<ExposureHintMode> modes;
3864     res = professionSession->GetSupportedExposureHintModes(modes);
3865     EXPECT_EQ(res, 0);
3866     if (!modes.empty()) {
3867         ExposureHintMode exposureHintMode = modes[0];
3868         professionSession->LockForControl();
3869         res = professionSession->SetExposureHintMode(exposureHintMode);
3870         professionSession->UnlockForControl();
3871         EXPECT_EQ(res, 0);
3872         ExposureHintMode mode;
3873         res = professionSession->GetExposureHintMode(mode);
3874         EXPECT_EQ(res, 0);
3875         EXPECT_EQ(mode, exposureHintMode);
3876     }
3877 
3878     res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Start();
3879     EXPECT_EQ(res, 0);
3880     sleep(WAIT_TIME_AFTER_START);
3881     res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Stop();
3882     EXPECT_EQ(res, 0);
3883     res = professionSession->Stop();
3884     EXPECT_EQ(res, 0);
3885     res = professionSession->Release();
3886     EXPECT_EQ(res, 0);
3887 }
3888 
3889 /*
3890  * Feature: Framework
3891  * Function: Test profession session set focus assist flash mode
3892  * SubFunction: NA
3893  * FunctionPoints: NA
3894  * EnvConditions: NA
3895  * CaseDescription: Test can set focus assist flash mode into profession session
3896  */
3897 HWTEST_F(CameraSessionModuleTest, profession_session_moduletest_007, TestSize.Level0)
3898 {
3899     if (!IsSceneModeSupported(SceneMode::PROFESSIONAL)) {
3900         return;
3901     }
3902 
3903     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PROFESSIONAL);
3904     ASSERT_NE(outputCapability, nullptr);
3905     auto previewProfiles = outputCapability->GetPreviewProfiles();
3906     ASSERT_FALSE(previewProfiles.empty());
3907     auto videoProfiles = outputCapability->GetVideoProfiles();
3908     ASSERT_FALSE(videoProfiles.empty());
3909 
3910     auto captureSession = manager_->CreateCaptureSession(SceneMode::PROFESSIONAL);
3911     auto professionSession = static_cast<ProfessionSession*>(captureSession.GetRefPtr());
3912     ASSERT_NE(professionSession, nullptr);
3913     int32_t res = professionSession->BeginConfig();
3914     EXPECT_EQ(res, 0);
3915 
3916     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
3917     ASSERT_NE(input, nullptr);
3918     input->Open();
3919     res = professionSession->AddInput(input);
3920     EXPECT_EQ(res, 0);
3921     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
3922     ASSERT_NE(previewOutput, nullptr);
3923     EXPECT_TRUE(professionSession->CanAddOutput(previewOutput));
3924     res = professionSession->AddOutput(previewOutput);
3925     EXPECT_EQ(res, 0);
3926     sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfiles[0]);
3927     ASSERT_NE(videoOutput, nullptr);
3928     EXPECT_TRUE(professionSession->CanAddOutput(videoOutput));
3929     res = professionSession->AddOutput(videoOutput);
3930     EXPECT_EQ(res, 0);
3931 
3932     res = professionSession->CommitConfig();
3933     EXPECT_EQ(res, 0);
3934     res = professionSession->Start();
3935     EXPECT_EQ(res, 0);
3936     sleep(WAIT_TIME_AFTER_START);
3937 
3938     std::vector<FocusAssistFlashMode> modes;
3939     res = professionSession->GetSupportedFocusAssistFlashModes(modes);
3940     EXPECT_EQ(res, 0);
3941     if (!modes.empty()) {
3942         FocusAssistFlashMode flashMode = modes[0];
3943         bool supported;
3944         res = professionSession->IsFocusAssistFlashModeSupported(flashMode, supported);
3945         EXPECT_EQ(res, 0);
3946         if (supported) {
3947             professionSession->LockForControl();
3948             res = professionSession->SetFocusAssistFlashMode(flashMode);
3949             professionSession->UnlockForControl();
3950             EXPECT_EQ(res, 0);
3951             FocusAssistFlashMode mode;
3952             res = professionSession->GetFocusAssistFlashMode(mode);
3953             EXPECT_EQ(res, 0);
3954             EXPECT_EQ(mode, flashMode);
3955         }
3956     }
3957 
3958     res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Start();
3959     EXPECT_EQ(res, 0);
3960     sleep(WAIT_TIME_AFTER_START);
3961     res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Stop();
3962     EXPECT_EQ(res, 0);
3963     res = professionSession->Stop();
3964     EXPECT_EQ(res, 0);
3965     res = professionSession->Release();
3966     EXPECT_EQ(res, 0);
3967 }
3968 
3969 /*
3970  * Feature: Framework
3971  * Function: Test profession session set flash mode
3972  * SubFunction: NA
3973  * FunctionPoints: NA
3974  * EnvConditions: NA
3975  * CaseDescription: Test can set flash mode into profession session
3976  */
3977 HWTEST_F(CameraSessionModuleTest, profession_session_moduletest_008, TestSize.Level0)
3978 {
3979     if (!IsSceneModeSupported(SceneMode::PROFESSIONAL)) {
3980         return;
3981     }
3982 
3983     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PROFESSIONAL);
3984     ASSERT_NE(outputCapability, nullptr);
3985     auto previewProfiles = outputCapability->GetPreviewProfiles();
3986     ASSERT_FALSE(previewProfiles.empty());
3987     auto videoProfiles = outputCapability->GetVideoProfiles();
3988     ASSERT_FALSE(videoProfiles.empty());
3989 
3990     auto captureSession = manager_->CreateCaptureSession(SceneMode::PROFESSIONAL);
3991     auto professionSession = static_cast<ProfessionSession*>(captureSession.GetRefPtr());
3992     ASSERT_NE(professionSession, nullptr);
3993     int32_t res = professionSession->BeginConfig();
3994     EXPECT_EQ(res, 0);
3995 
3996     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
3997     ASSERT_NE(input, nullptr);
3998     input->Open();
3999     res = professionSession->AddInput(input);
4000     EXPECT_EQ(res, 0);
4001     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
4002     ASSERT_NE(previewOutput, nullptr);
4003     EXPECT_TRUE(professionSession->CanAddOutput(previewOutput));
4004     res = professionSession->AddOutput(previewOutput);
4005     EXPECT_EQ(res, 0);
4006     sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfiles[0]);
4007     ASSERT_NE(videoOutput, nullptr);
4008     EXPECT_TRUE(professionSession->CanAddOutput(videoOutput));
4009     res = professionSession->AddOutput(videoOutput);
4010     EXPECT_EQ(res, 0);
4011 
4012     res = professionSession->CommitConfig();
4013     EXPECT_EQ(res, 0);
4014     res = professionSession->Start();
4015     EXPECT_EQ(res, 0);
4016     sleep(WAIT_TIME_AFTER_START);
4017 
4018     bool hasFlash;
4019     res = professionSession->HasFlash(hasFlash);
4020     EXPECT_EQ(res, 0);
4021     if (hasFlash) {
4022         std::vector<FlashMode> modes;
4023         res = professionSession->GetSupportedFlashModes(modes);
4024         EXPECT_EQ(res, 0);
4025         if (!modes.empty()) {
4026             FlashMode flashMode = modes[0];
4027             bool supported;
4028             res = professionSession->IsFlashModeSupported(flashMode, supported);
4029             EXPECT_EQ(res, 0);
4030             if (supported) {
4031                 professionSession->LockForControl();
4032                 res = professionSession->SetFlashMode(flashMode);
4033                 professionSession->UnlockForControl();
4034                 EXPECT_EQ(res, 0);
4035                 FlashMode mode;
4036                 res = professionSession->GetFlashMode(mode);
4037                 EXPECT_EQ(res, 0);
4038                 EXPECT_EQ(mode, flashMode);
4039             }
4040         }
4041     }
4042 
4043     res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Start();
4044     EXPECT_EQ(res, 0);
4045     sleep(WAIT_TIME_AFTER_START);
4046     res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Stop();
4047     EXPECT_EQ(res, 0);
4048     res = professionSession->Stop();
4049     EXPECT_EQ(res, 0);
4050     res = professionSession->Release();
4051     EXPECT_EQ(res, 0);
4052 }
4053 
4054 /*
4055  * Feature: Framework
4056  * Function: Test profession session set color effect
4057  * SubFunction: NA
4058  * FunctionPoints: NA
4059  * EnvConditions: NA
4060  * CaseDescription: Test can set color effect into profession session
4061  */
4062 HWTEST_F(CameraSessionModuleTest, profession_session_moduletest_009, TestSize.Level0)
4063 {
4064     if (!IsSceneModeSupported(SceneMode::PROFESSIONAL)) {
4065         return;
4066     }
4067 
4068     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PROFESSIONAL);
4069     ASSERT_NE(outputCapability, nullptr);
4070     auto previewProfiles = outputCapability->GetPreviewProfiles();
4071     ASSERT_FALSE(previewProfiles.empty());
4072     auto videoProfiles = outputCapability->GetVideoProfiles();
4073     ASSERT_FALSE(videoProfiles.empty());
4074 
4075     auto captureSession = manager_->CreateCaptureSession(SceneMode::PROFESSIONAL);
4076     auto professionSession = static_cast<ProfessionSession*>(captureSession.GetRefPtr());
4077     ASSERT_NE(professionSession, nullptr);
4078     int32_t res = professionSession->BeginConfig();
4079     EXPECT_EQ(res, 0);
4080 
4081     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
4082     ASSERT_NE(input, nullptr);
4083     input->Open();
4084     res = professionSession->AddInput(input);
4085     EXPECT_EQ(res, 0);
4086     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
4087     ASSERT_NE(previewOutput, nullptr);
4088     EXPECT_TRUE(professionSession->CanAddOutput(previewOutput));
4089     res = professionSession->AddOutput(previewOutput);
4090     EXPECT_EQ(res, 0);
4091     sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfiles[0]);
4092     ASSERT_NE(videoOutput, nullptr);
4093     EXPECT_TRUE(professionSession->CanAddOutput(videoOutput));
4094     res = professionSession->AddOutput(videoOutput);
4095     EXPECT_EQ(res, 0);
4096 
4097     res = professionSession->CommitConfig();
4098     EXPECT_EQ(res, 0);
4099     res = professionSession->Start();
4100     EXPECT_EQ(res, 0);
4101     sleep(WAIT_TIME_AFTER_START);
4102 
4103     std::vector<ColorEffect> modes;
4104     res = professionSession->GetSupportedColorEffects(modes);
4105     EXPECT_EQ(res, 0);
4106     if (!modes.empty()) {
4107         ColorEffect colorEffect = modes[0];
4108         professionSession->LockForControl();
4109         res = professionSession->SetColorEffect(colorEffect);
4110         professionSession->UnlockForControl();
4111         EXPECT_EQ(res, 0);
4112         ColorEffect effect;
4113         res = professionSession->GetColorEffect(effect);
4114         EXPECT_EQ(res, 0);
4115         EXPECT_EQ(effect, colorEffect);
4116     }
4117 
4118     res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Start();
4119     EXPECT_EQ(res, 0);
4120     sleep(WAIT_TIME_AFTER_START);
4121     res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Stop();
4122     EXPECT_EQ(res, 0);
4123     res = professionSession->Stop();
4124     EXPECT_EQ(res, 0);
4125     res = professionSession->Release();
4126     EXPECT_EQ(res, 0);
4127 }
4128 
4129 /*
4130  * Feature: Framework
4131  * Function: Test profession session callbacks
4132  * SubFunction: NA
4133  * FunctionPoints: NA
4134  * EnvConditions: NA
4135  * CaseDescription: Test can set callbacks into profession session
4136  */
4137 HWTEST_F(CameraSessionModuleTest, profession_session_moduletest_010, TestSize.Level0)
4138 {
4139     if (!IsSceneModeSupported(SceneMode::PROFESSIONAL)) {
4140         return;
4141     }
4142 
4143     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::PROFESSIONAL);
4144     ASSERT_NE(outputCapability, nullptr);
4145     auto previewProfiles = outputCapability->GetPreviewProfiles();
4146     ASSERT_FALSE(previewProfiles.empty());
4147     auto videoProfiles = outputCapability->GetVideoProfiles();
4148     ASSERT_FALSE(videoProfiles.empty());
4149 
4150     auto captureSession = manager_->CreateCaptureSession(SceneMode::PROFESSIONAL);
4151     auto professionSession = static_cast<ProfessionSession*>(captureSession.GetRefPtr());
4152     ASSERT_NE(professionSession, nullptr);
4153     int32_t res = professionSession->BeginConfig();
4154     EXPECT_EQ(res, 0);
4155 
4156     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
4157     ASSERT_NE(input, nullptr);
4158     input->Open();
4159     res = professionSession->AddInput(input);
4160     EXPECT_EQ(res, 0);
4161     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
4162     ASSERT_NE(previewOutput, nullptr);
4163     EXPECT_TRUE(professionSession->CanAddOutput(previewOutput));
4164     res = professionSession->AddOutput(previewOutput);
4165     EXPECT_EQ(res, 0);
4166     sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfiles[0]);
4167     ASSERT_NE(videoOutput, nullptr);
4168     EXPECT_TRUE(professionSession->CanAddOutput(videoOutput));
4169     res = professionSession->AddOutput(videoOutput);
4170     EXPECT_EQ(res, 0);
4171 
4172     professionSession->SetExposureInfoCallback(make_shared<TestExposureInfoCallback>());
4173     static const camera_rational_t rational = {
4174         .denominator = DEFAULT_DENOMINATOR_VALUE,
4175         .numerator = DEFAULT_NUMERATOR_VALUE,
4176     };
4177     auto meta = make_shared<OHOS::Camera::CameraMetadata>(META_VALUE_10, META_VALUE_100);
4178     EXPECT_EQ(meta->addEntry(OHOS_STATUS_SENSOR_EXPOSURE_TIME, &rational, 1), true);
4179     professionSession->ProcessSensorExposureTimeChange(meta);
4180     professionSession->SetIsoInfoCallback(make_shared<TestIsoInfoCallback>());
4181     static const uint32_t iso = DEFAULT_ISO_VALUE;
4182     EXPECT_EQ(meta->addEntry(OHOS_STATUS_ISO_VALUE, &iso, 1), true);
4183     professionSession->ProcessIsoChange(meta);
4184     professionSession->SetApertureInfoCallback(make_shared<TestApertureInfoCallback>());
4185     static const uint32_t aperture = DEFAULT_APERTURE_VALUE;
4186     EXPECT_EQ(meta->addEntry(OHOS_STATUS_CAMERA_APERTURE_VALUE, &aperture, 1), true);
4187     professionSession->ProcessApertureChange(meta);
4188     professionSession->SetLuminationInfoCallback(make_shared<TestLuminationInfoCallback>());
4189     static const uint32_t lumination = DEFAULT_LUMINATION_VALUE;
4190     EXPECT_EQ(meta->addEntry(OHOS_STATUS_ALGO_MEAN_Y, &lumination, 1), true);
4191     professionSession->ProcessLuminationChange(meta);
4192 
4193     res = professionSession->CommitConfig();
4194     EXPECT_EQ(res, 0);
4195     res = professionSession->Start();
4196     EXPECT_EQ(res, 0);
4197     sleep(WAIT_TIME_AFTER_START);
4198     res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Start();
4199     EXPECT_EQ(res, 0);
4200     sleep(WAIT_TIME_AFTER_START);
4201     res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Stop();
4202     EXPECT_EQ(res, 0);
4203     res = professionSession->Stop();
4204     EXPECT_EQ(res, 0);
4205     res = professionSession->Release();
4206     EXPECT_EQ(res, 0);
4207 }
4208 
4209 /*
4210  * Feature: Framework
4211  * Function: Test preview/video with profession video session
4212  * SubFunction: NA
4213  * FunctionPoints: NA
4214  * EnvConditions: NA
4215  * CaseDescription: Test preview/video with profession video session
4216  */
4217 HWTEST_F(CameraSessionModuleTest, profession_video_session_moduletest_001, TestSize.Level0)
4218 {
4219     SceneMode sceneMode = SceneMode::PROFESSIONAL_VIDEO;
4220     if (!IsSceneModeSupported(sceneMode)) {
4221         return;
4222     }
4223     sptr<CameraManager> cameraManagerObj = CameraManager::GetInstance();
4224     ASSERT_NE(cameraManagerObj, nullptr);
4225 
4226     std::vector<SceneMode> sceneModes = cameraManagerObj->GetSupportedModes(cameras_[0]);
4227     ASSERT_TRUE(sceneModes.size() != 0);
4228 
4229     sptr<CameraOutputCapability> modeAbility =
4230         cameraManagerObj->GetSupportedOutputCapability(cameras_[0], sceneMode);
4231     ASSERT_NE(modeAbility, nullptr);
4232 
4233     SelectProfiles wanted;
4234     wanted.preview.size_ = {640, 480};
4235     wanted.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
4236     wanted.photo.size_ = {640, 480};
4237     wanted.photo.format_ = CAMERA_FORMAT_JPEG;
4238     wanted.video.size_ = {640, 480};
4239     wanted.video.format_ = CAMERA_FORMAT_YUV_420_SP;
4240     wanted.video.framerates_ = {30, 30};
4241 
4242     sptr<CaptureSession> captureSession = cameraManagerObj->CreateCaptureSession(sceneMode);
4243     ASSERT_NE(captureSession, nullptr);
4244     sptr<ProfessionSession> session = static_cast<ProfessionSession*>(captureSession.GetRefPtr());
4245     ASSERT_NE(session, nullptr);
4246 
4247     int32_t intResult = session->BeginConfig();
4248     EXPECT_EQ(intResult, 0);
4249 
4250     intResult = session->AddInput(input_);
4251     EXPECT_EQ(intResult, 0);
4252 
4253     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(wanted.preview);
4254     ASSERT_NE(previewOutput, nullptr);
4255 
4256     intResult = session->AddOutput(previewOutput);
4257     EXPECT_EQ(intResult, 0);
4258 
4259     sptr<CaptureOutput> videoOutput = CreateVideoOutput(wanted.video);
4260     ASSERT_NE(videoOutput, nullptr);
4261 
4262     intResult = session->AddOutput(videoOutput);
4263     EXPECT_EQ(intResult, 0);
4264 
4265 
4266     intResult = session->CommitConfig();
4267     EXPECT_EQ(intResult, 0);
4268 
4269     intResult = session->Start();
4270     EXPECT_EQ(intResult, 0);
4271     sleep(WAIT_TIME_AFTER_START);
4272 
4273     intResult = ((sptr<VideoOutput>&)videoOutput)->Start();
4274     EXPECT_EQ(intResult, 0);
4275     sleep(WAIT_TIME_AFTER_RECORDING);
4276     intResult = ((sptr<VideoOutput>&)videoOutput)->Stop();
4277     session->Stop();
4278 }
4279 
4280 /*
4281  * Feature: Framework
4282  * Function: Test profession video session metering mode
4283  * SubFunction: NA
4284  * FunctionPoints: NA
4285  * EnvConditions: NA
4286  * CaseDescription: Test profession video session metering mode
4287  */
4288 HWTEST_F(CameraSessionModuleTest, profession_video_session_moduletest_002, TestSize.Level0)
4289 {
4290     SceneMode sceneMode = SceneMode::PROFESSIONAL_VIDEO;
4291     if (!IsSceneModeSupported(sceneMode)) {
4292         return;
4293     }
4294     sptr<CameraManager> cameraManagerObj = CameraManager::GetInstance();
4295     ASSERT_NE(cameraManagerObj, nullptr);
4296 
4297     std::vector<SceneMode> sceneModes = cameraManagerObj->GetSupportedModes(cameras_[0]);
4298     ASSERT_TRUE(sceneModes.size() != 0);
4299 
4300     sptr<CameraOutputCapability> modeAbility =
4301         cameraManagerObj->GetSupportedOutputCapability(cameras_[0], sceneMode);
4302     ASSERT_NE(modeAbility, nullptr);
4303 
4304     SelectProfiles wanted;
4305     wanted.preview.size_ = {640, 480};
4306     wanted.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
4307     wanted.photo.size_ = {640, 480};
4308     wanted.photo.format_ = CAMERA_FORMAT_JPEG;
4309     wanted.video.size_ = {640, 480};
4310     wanted.video.format_ = CAMERA_FORMAT_YUV_420_SP;
4311     wanted.video.framerates_ = {30, 30};
4312 
4313     sptr<CaptureSession> captureSession = cameraManagerObj->CreateCaptureSession(sceneMode);
4314     ASSERT_NE(captureSession, nullptr);
4315     sptr<ProfessionSession> session = static_cast<ProfessionSession*>(captureSession.GetRefPtr());
4316     ASSERT_NE(session, nullptr);
4317 
4318     int32_t intResult = session->BeginConfig();
4319     EXPECT_EQ(intResult, 0);
4320 
4321     intResult = session->AddInput(input_);
4322     EXPECT_EQ(intResult, 0);
4323 
4324     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(wanted.preview);
4325     ASSERT_NE(previewOutput, nullptr);
4326 
4327     intResult = session->AddOutput(previewOutput);
4328     EXPECT_EQ(intResult, 0);
4329 
4330     sptr<CaptureOutput> videoOutput = CreateVideoOutput(wanted.video);
4331     ASSERT_NE(videoOutput, nullptr);
4332 
4333     intResult = session->AddOutput(videoOutput);
4334     EXPECT_EQ(intResult, 0);
4335 
4336     intResult = session->CommitConfig();
4337     EXPECT_EQ(intResult, 0);
4338 
4339     MeteringMode meteringMode = METERING_MODE_CENTER_WEIGHTED;
4340     bool isSupported;
4341     intResult = session->IsMeteringModeSupported(meteringMode, isSupported);
4342     EXPECT_EQ(intResult, 0);
4343     EXPECT_EQ(isSupported, true);
4344 
4345     std::vector<MeteringMode> modes = {};
4346     intResult = session->GetSupportedMeteringModes(modes);
4347     EXPECT_EQ(intResult, 0);
4348     EXPECT_NE(modes.size(), 0);
4349 
4350     session->LockForControl();
4351     intResult = session->SetMeteringMode(modes[0]);
4352     session->UnlockForControl();
4353     EXPECT_EQ(intResult, 0);
4354     intResult = session->GetMeteringMode(meteringMode);
4355     EXPECT_EQ(intResult, 0);
4356 
4357     EXPECT_EQ(meteringMode, modes[0]);
4358     intResult = session->Start();
4359     EXPECT_EQ(intResult, 0);
4360     sleep(WAIT_TIME_AFTER_START);
4361 
4362     intResult = ((sptr<VideoOutput>&)videoOutput)->Start();
4363     EXPECT_EQ(intResult, 0);
4364     sleep(WAIT_TIME_AFTER_RECORDING);
4365     intResult = ((sptr<VideoOutput>&)videoOutput)->Stop();
4366     session->Stop();
4367 }
4368 
4369 /*
4370  * Feature: Framework
4371  * Function: Test profession video session focus assist flash mode
4372  * SubFunction: NA
4373  * FunctionPoints: NA
4374  * EnvConditions: NA
4375  * CaseDescription: Test profession video session focus assist flash mode
4376  */
4377 HWTEST_F(CameraSessionModuleTest, profession_video_session_moduletest_003, TestSize.Level0)
4378 {
4379     SceneMode sceneMode = SceneMode::PROFESSIONAL_VIDEO;
4380     if (!IsSceneModeSupported(sceneMode)) {
4381         return;
4382     }
4383     sptr<CameraManager> cameraManagerObj = CameraManager::GetInstance();
4384     ASSERT_NE(cameraManagerObj, nullptr);
4385 
4386     std::vector<SceneMode> sceneModes = cameraManagerObj->GetSupportedModes(cameras_[0]);
4387     ASSERT_TRUE(sceneModes.size() != 0);
4388 
4389     sptr<CameraOutputCapability> modeAbility =
4390         cameraManagerObj->GetSupportedOutputCapability(cameras_[0], sceneMode);
4391     ASSERT_NE(modeAbility, nullptr);
4392 
4393     SelectProfiles wanted;
4394     wanted.preview.size_ = {640, 480};
4395     wanted.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
4396     wanted.photo.size_ = {640, 480};
4397     wanted.photo.format_ = CAMERA_FORMAT_JPEG;
4398     wanted.video.size_ = {640, 480};
4399     wanted.video.format_ = CAMERA_FORMAT_YUV_420_SP;
4400     wanted.video.framerates_ = {30, 30};
4401 
4402     sptr<CaptureSession> captureSession = cameraManagerObj->CreateCaptureSession(sceneMode);
4403     ASSERT_NE(captureSession, nullptr);
4404     sptr<ProfessionSession> session = static_cast<ProfessionSession*>(captureSession.GetRefPtr());
4405     ASSERT_NE(session, nullptr);
4406 
4407     int32_t intResult = session->BeginConfig();
4408     EXPECT_EQ(intResult, 0);
4409 
4410     intResult = session->AddInput(input_);
4411     EXPECT_EQ(intResult, 0);
4412 
4413     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(wanted.preview);
4414     ASSERT_NE(previewOutput, nullptr);
4415 
4416     intResult = session->AddOutput(previewOutput);
4417     EXPECT_EQ(intResult, 0);
4418 
4419     sptr<CaptureOutput> videoOutput = CreateVideoOutput(wanted.video);
4420     ASSERT_NE(videoOutput, nullptr);
4421 
4422     intResult = session->AddOutput(videoOutput);
4423     EXPECT_EQ(intResult, 0);
4424 
4425     intResult = session->CommitConfig();
4426     EXPECT_EQ(intResult, 0);
4427 
4428     FocusAssistFlashMode mode = FocusAssistFlashMode::FOCUS_ASSIST_FLASH_MODE_DEFAULT;
4429     bool isSupported;
4430     intResult = session->IsFocusAssistFlashModeSupported(mode, isSupported);
4431     EXPECT_EQ(intResult, 0);
4432     EXPECT_EQ(isSupported, true);
4433 
4434     std::vector<FocusAssistFlashMode> modes = {};
4435     intResult = session->GetSupportedFocusAssistFlashModes(modes);
4436     EXPECT_EQ(intResult, 0);
4437     EXPECT_NE(modes.size(), 0);
4438 
4439     session->LockForControl();
4440     intResult = session->SetFocusAssistFlashMode(modes[0]);
4441     session->UnlockForControl();
4442     EXPECT_EQ(intResult, 0);
4443     intResult = session->GetFocusAssistFlashMode(mode);
4444     EXPECT_EQ(intResult, 0);
4445 
4446     EXPECT_EQ(mode, modes[0]);
4447     intResult = session->Start();
4448     EXPECT_EQ(intResult, 0);
4449     sleep(WAIT_TIME_AFTER_START);
4450 
4451     intResult = ((sptr<VideoOutput>&)videoOutput)->Start();
4452     EXPECT_EQ(intResult, 0);
4453     sleep(WAIT_TIME_AFTER_RECORDING);
4454     intResult = ((sptr<VideoOutput>&)videoOutput)->Stop();
4455     session->Stop();
4456 }
4457 
4458 /*
4459  * Feature: Framework
4460  * Function: Test profession video session exposure hint mode
4461  * SubFunction: NA
4462  * FunctionPoints: NA
4463  * EnvConditions: NA
4464  * CaseDescription: Test profession video session exposure hint mode
4465  */
4466 HWTEST_F(CameraSessionModuleTest, profession_video_session_moduletest_004, TestSize.Level0)
4467 {
4468     SceneMode sceneMode = SceneMode::PROFESSIONAL_VIDEO;
4469     if (!IsSceneModeSupported(sceneMode)) {
4470         return;
4471     }
4472     sptr<CameraManager> cameraManagerObj = CameraManager::GetInstance();
4473     ASSERT_NE(cameraManagerObj, nullptr);
4474 
4475     std::vector<SceneMode> sceneModes = cameraManagerObj->GetSupportedModes(cameras_[0]);
4476     ASSERT_TRUE(sceneModes.size() != 0);
4477 
4478     sptr<CameraOutputCapability> modeAbility =
4479         cameraManagerObj->GetSupportedOutputCapability(cameras_[0], sceneMode);
4480     ASSERT_NE(modeAbility, nullptr);
4481 
4482     SelectProfiles wanted;
4483     wanted.preview.size_ = {640, 480};
4484     wanted.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
4485     wanted.photo.size_ = {640, 480};
4486     wanted.photo.format_ = CAMERA_FORMAT_JPEG;
4487     wanted.video.size_ = {640, 480};
4488     wanted.video.format_ = CAMERA_FORMAT_YUV_420_SP;
4489     wanted.video.framerates_ = {30, 30};
4490 
4491     sptr<CaptureSession> captureSession = cameraManagerObj->CreateCaptureSession(sceneMode);
4492     ASSERT_NE(captureSession, nullptr);
4493     sptr<ProfessionSession> session = static_cast<ProfessionSession*>(captureSession.GetRefPtr());
4494     ASSERT_NE(session, nullptr);
4495 
4496     int32_t intResult = session->BeginConfig();
4497     EXPECT_EQ(intResult, 0);
4498 
4499     intResult = session->AddInput(input_);
4500     EXPECT_EQ(intResult, 0);
4501 
4502     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(wanted.preview);
4503     ASSERT_NE(previewOutput, nullptr);
4504 
4505     intResult = session->AddOutput(previewOutput);
4506     EXPECT_EQ(intResult, 0);
4507 
4508     sptr<CaptureOutput> videoOutput = CreateVideoOutput(wanted.video);
4509     ASSERT_NE(videoOutput, nullptr);
4510 
4511     intResult = session->AddOutput(videoOutput);
4512     EXPECT_EQ(intResult, 0);
4513 
4514 
4515     intResult = session->CommitConfig();
4516     EXPECT_EQ(intResult, 0);
4517     std::vector<ExposureHintMode> modes = {};
4518     intResult = session->GetSupportedExposureHintModes(modes);
4519     EXPECT_EQ(intResult, 0);
4520     EXPECT_NE(modes.size(), 0);
4521 
4522     session->LockForControl();
4523     intResult = session->SetExposureHintMode(modes[0]);
4524     EXPECT_EQ(intResult, 0);
4525     session->UnlockForControl();
4526 
4527     ExposureHintMode mode;
4528     intResult = session->GetExposureHintMode(mode);
4529     EXPECT_EQ(intResult, 0);
4530 
4531     EXPECT_EQ(mode, modes[0]);
4532     intResult = session->Start();
4533     EXPECT_EQ(intResult, 0);
4534     sleep(WAIT_TIME_AFTER_START);
4535 
4536     intResult = ((sptr<VideoOutput>&)videoOutput)->Start();
4537     EXPECT_EQ(intResult, 0);
4538     sleep(WAIT_TIME_AFTER_RECORDING);
4539     intResult = ((sptr<VideoOutput>&)videoOutput)->Stop();
4540     session->Stop();
4541 }
4542 
4543 /*
4544  * Feature: Framework
4545  * Function: Test profession video session manual_iso_props && auto_awb_props && manual_awb_props
4546  * SubFunction: NA
4547  * FunctionPoints: NA
4548  * EnvConditions: NA
4549  * CaseDescription: test profession video session manual_iso_props && auto_awb_props && manual_awb_props
4550  */
4551 HWTEST_F(CameraSessionModuleTest, profession_video_session_moduletest_005, TestSize.Level0)
4552 {
4553     SceneMode sceneMode = SceneMode::PROFESSIONAL_VIDEO;
4554     if (!IsSceneModeSupported(sceneMode)) {
4555         return;
4556     }
4557     sptr<CameraManager> modeManagerObj = CameraManager::GetInstance();
4558     ASSERT_NE(modeManagerObj, nullptr);
4559 
4560     std::vector<SceneMode> sceneModes = modeManagerObj->GetSupportedModes(cameras_[0]);
4561     ASSERT_TRUE(sceneModes.size() != 0);
4562 
4563     sptr<CameraOutputCapability> modeAbility =
4564         modeManagerObj->GetSupportedOutputCapability(cameras_[0], sceneMode);
4565     ASSERT_NE(modeAbility, nullptr);
4566 
4567     SelectProfiles wanted;
4568     wanted.preview.size_ = {640, 480};
4569     wanted.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
4570     wanted.photo.size_ = {640, 480};
4571     wanted.photo.format_ = CAMERA_FORMAT_JPEG;
4572     wanted.video.size_ = {640, 480};
4573     wanted.video.format_ = CAMERA_FORMAT_YUV_420_SP;
4574     wanted.video.framerates_ = {30, 30};
4575 
4576     sptr<CaptureSession> captureSession = modeManagerObj->CreateCaptureSession(sceneMode);
4577     ASSERT_NE(captureSession, nullptr);
4578 
4579     sptr<ProfessionSession> session = static_cast<ProfessionSession*>(captureSession.GetRefPtr());
4580     ASSERT_NE(session, nullptr);
4581 
4582     int32_t intResult = session->BeginConfig();
4583     EXPECT_EQ(intResult, 0);
4584 
4585     intResult = session->AddInput(input_);
4586     EXPECT_EQ(intResult, 0);
4587 
4588     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(wanted.preview);
4589     ASSERT_NE(previewOutput, nullptr);
4590 
4591     intResult = session->AddOutput(previewOutput);
4592     EXPECT_EQ(intResult, 0);
4593 
4594     sptr<CaptureOutput> videoOutput = CreateVideoOutput(wanted.video);
4595     ASSERT_NE(videoOutput, nullptr);
4596 
4597     intResult = session->AddOutput(videoOutput);
4598     EXPECT_EQ(intResult, 0);
4599 
4600     intResult = session->CommitConfig();
4601     EXPECT_EQ(intResult, 0);
4602 
4603     bool isSupported = session->IsManualIsoSupported();
4604     if (isSupported) {
4605         std::vector<int32_t> isoRange;
4606         session->GetIsoRange(isoRange);
4607         ASSERT_EQ(isoRange.empty(), false);
4608         session->LockForControl();
4609         intResult = session->SetISO(isoRange[1] + 1);
4610         EXPECT_NE(intResult, 0);
4611         session->UnlockForControl();
4612 
4613         session->LockForControl();
4614         intResult = session->SetISO(isoRange[1]);
4615         EXPECT_EQ(intResult, 0);
4616         session->UnlockForControl();
4617 
4618         int32_t iso;
4619         session->GetISO(iso);
4620         EXPECT_EQ(isoRange[1], iso);
4621     }
4622 
4623     std::vector<WhiteBalanceMode> supportedWhiteBalanceModes;
4624     session->GetSupportedWhiteBalanceModes(supportedWhiteBalanceModes);
4625     if (!supportedWhiteBalanceModes.empty()) {
4626         session->IsWhiteBalanceModeSupported(supportedWhiteBalanceModes[0], isSupported);
4627         ASSERT_EQ(isSupported, true);
4628         session->LockForControl();
4629         intResult = session->SetWhiteBalanceMode(supportedWhiteBalanceModes[0]);
4630         ASSERT_EQ(isSupported, 0);
4631         session->UnlockForControl();
4632         WhiteBalanceMode currentMode;
4633         session->GetWhiteBalanceMode(currentMode);
4634         ASSERT_EQ(currentMode, supportedWhiteBalanceModes[0]);
4635     }
4636 
4637     session->IsManualWhiteBalanceSupported(isSupported);
4638     std::vector<int32_t> whiteBalanceRange;
4639     if (isSupported) {
4640         session->GetManualWhiteBalanceRange(whiteBalanceRange);
4641         ASSERT_EQ(whiteBalanceRange.size() == 2, true);
4642 
4643         session->LockForControl();
4644         intResult = session->SetManualWhiteBalance(whiteBalanceRange[0] - 1);
4645         session->UnlockForControl();
4646 
4647         int32_t wbValue;
4648         session->GetManualWhiteBalance(wbValue);
4649         ASSERT_EQ(wbValue, whiteBalanceRange[0]);
4650     } else {
4651         session->GetManualWhiteBalanceRange(whiteBalanceRange);
4652         ASSERT_EQ(whiteBalanceRange.size() < 2, true);
4653     }
4654 }
4655 
4656 /*
4657  * Feature: Framework
4658  * Function: Test profession video session focus mode
4659  * SubFunction: NA
4660  * FunctionPoints: NA
4661  * EnvConditions: NA
4662  * CaseDescription: Test profession video session focus mode
4663  */
4664 HWTEST_F(CameraSessionModuleTest, profession_video_session_moduletest_006, TestSize.Level0)
4665 {
4666     SceneMode sceneMode = SceneMode::PROFESSIONAL_VIDEO;
4667     if (!IsSceneModeSupported(sceneMode)) {
4668         return;
4669     }
4670     sptr<CameraManager> cameraManagerObj = CameraManager::GetInstance();
4671     ASSERT_NE(cameraManagerObj, nullptr);
4672 
4673     std::vector<SceneMode> sceneModes = cameraManagerObj->GetSupportedModes(cameras_[0]);
4674     ASSERT_TRUE(sceneModes.size() != 0);
4675 
4676     sptr<CameraOutputCapability> modeAbility =
4677         cameraManagerObj->GetSupportedOutputCapability(cameras_[0], sceneMode);
4678     ASSERT_NE(modeAbility, nullptr);
4679 
4680     SelectProfiles wanted;
4681     wanted.preview.size_ = {640, 480};
4682     wanted.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
4683     wanted.photo.size_ = {640, 480};
4684     wanted.photo.format_ = CAMERA_FORMAT_JPEG;
4685     wanted.video.size_ = {640, 480};
4686     wanted.video.format_ = CAMERA_FORMAT_YUV_420_SP;
4687     wanted.video.framerates_ = {30, 30};
4688 
4689     sptr<CaptureSession> captureSession = cameraManagerObj->CreateCaptureSession(sceneMode);
4690     ASSERT_NE(captureSession, nullptr);
4691     sptr<ProfessionSession> session = static_cast<ProfessionSession*>(captureSession.GetRefPtr());
4692     ASSERT_NE(session, nullptr);
4693 
4694     int32_t intResult = session->BeginConfig();
4695     EXPECT_EQ(intResult, 0);
4696 
4697     intResult = session->AddInput(input_);
4698     EXPECT_EQ(intResult, 0);
4699 
4700     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(wanted.preview);
4701     ASSERT_NE(previewOutput, nullptr);
4702 
4703     intResult = session->AddOutput(previewOutput);
4704     EXPECT_EQ(intResult, 0);
4705 
4706     sptr<CaptureOutput> videoOutput = CreateVideoOutput(wanted.video);
4707     ASSERT_NE(videoOutput, nullptr);
4708 
4709     intResult = session->AddOutput(videoOutput);
4710     EXPECT_EQ(intResult, 0);
4711 
4712     intResult = session->CommitConfig();
4713     EXPECT_EQ(intResult, 0);
4714 
4715     FocusMode focusMode = FocusMode::FOCUS_MODE_MANUAL;
4716     bool isSupported;
4717     intResult = session->IsFocusModeSupported(focusMode, isSupported);
4718     EXPECT_EQ(intResult, 0);
4719     EXPECT_EQ(isSupported, true);
4720 
4721     std::vector<FocusMode> modes = {};
4722     intResult = session->GetSupportedFocusModes(modes);
4723     EXPECT_EQ(intResult, 0);
4724     EXPECT_NE(modes.size(), 0);
4725 
4726     session->LockForControl();
4727     intResult = session->SetFocusMode(modes[0]);
4728     session->UnlockForControl();
4729     EXPECT_EQ(intResult, 0);
4730     intResult = session->GetFocusMode(focusMode);
4731     EXPECT_EQ(intResult, 0);
4732 
4733     EXPECT_EQ(focusMode, modes[0]);
4734     intResult = session->Start();
4735     EXPECT_EQ(intResult, 0);
4736     sleep(WAIT_TIME_AFTER_START);
4737 
4738     intResult = ((sptr<VideoOutput>&)videoOutput)->Start();
4739     EXPECT_EQ(intResult, 0);
4740     sleep(WAIT_TIME_AFTER_RECORDING);
4741     intResult = ((sptr<VideoOutput>&)videoOutput)->Stop();
4742     session->Stop();
4743 }
4744 
4745 /*
4746  * Feature: Framework
4747  * Function: Test profession video session flash mode
4748  * SubFunction: NA
4749  * FunctionPoints: NA
4750  * EnvConditions: NA
4751  * CaseDescription: Test profession video session flash mode
4752  */
4753 HWTEST_F(CameraSessionModuleTest, profession_video_session_moduletest_007, TestSize.Level0)
4754 {
4755     SceneMode sceneMode = SceneMode::PROFESSIONAL_VIDEO;
4756     if (!IsSceneModeSupported(sceneMode)) {
4757         return;
4758     }
4759     sptr<CameraManager> cameraManagerObj = CameraManager::GetInstance();
4760     ASSERT_NE(cameraManagerObj, nullptr);
4761 
4762     std::vector<SceneMode> sceneModes = cameraManagerObj->GetSupportedModes(cameras_[0]);
4763     ASSERT_TRUE(sceneModes.size() != 0);
4764 
4765     sptr<CameraOutputCapability> modeAbility =
4766         cameraManagerObj->GetSupportedOutputCapability(cameras_[0], sceneMode);
4767     ASSERT_NE(modeAbility, nullptr);
4768 
4769     SelectProfiles wanted;
4770     wanted.preview.size_ = {640, 480};
4771     wanted.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
4772     wanted.photo.size_ = {640, 480};
4773     wanted.photo.format_ = CAMERA_FORMAT_JPEG;
4774     wanted.video.size_ = {640, 480};
4775     wanted.video.format_ = CAMERA_FORMAT_YUV_420_SP;
4776     wanted.video.framerates_ = {30, 30};
4777 
4778     sptr<CaptureSession> captureSession = cameraManagerObj->CreateCaptureSession(sceneMode);
4779     ASSERT_NE(captureSession, nullptr);
4780     sptr<ProfessionSession> session = static_cast<ProfessionSession*>(captureSession.GetRefPtr());
4781     ASSERT_NE(session, nullptr);
4782 
4783     int32_t intResult = session->BeginConfig();
4784     EXPECT_EQ(intResult, 0);
4785 
4786     intResult = session->AddInput(input_);
4787     EXPECT_EQ(intResult, 0);
4788 
4789     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(wanted.preview);
4790     ASSERT_NE(previewOutput, nullptr);
4791 
4792     intResult = session->AddOutput(previewOutput);
4793     EXPECT_EQ(intResult, 0);
4794 
4795     sptr<CaptureOutput> videoOutput = CreateVideoOutput(wanted.video);
4796     ASSERT_NE(videoOutput, nullptr);
4797 
4798     intResult = session->AddOutput(videoOutput);
4799     EXPECT_EQ(intResult, 0);
4800 
4801     intResult = session->CommitConfig();
4802     EXPECT_EQ(intResult, 0);
4803 
4804     bool isSupported = false;
4805     intResult = session->HasFlash(isSupported);
4806     EXPECT_EQ(isSupported, true);
4807 
4808     std::vector<FlashMode> modes = {};
4809     intResult = session->GetSupportedFlashModes(modes);
4810     EXPECT_EQ(intResult, 0);
4811     EXPECT_NE(modes.size(), 0);
4812 
4813     intResult = session->IsFlashModeSupported(modes[0], isSupported);
4814     EXPECT_EQ(intResult, 0);
4815     EXPECT_EQ(isSupported, true);
4816 
4817     session->LockForControl();
4818     intResult = session->SetFlashMode(modes[0]);
4819     EXPECT_EQ(intResult, 0);
4820     session->UnlockForControl();
4821 
4822     FlashMode mode;
4823     intResult = session->GetFlashMode(mode);
4824     EXPECT_EQ(intResult, 0);
4825     EXPECT_EQ(mode, modes[0]);
4826 }
4827 
4828 /*
4829  * Feature: Framework
4830  * Function: Test profession video session color effect
4831  * SubFunction: NA
4832  * FunctionPoints: NA
4833  * EnvConditions: NA
4834  * CaseDescription: Test profession video session color effect
4835  */
4836 HWTEST_F(CameraSessionModuleTest, profession_video_session_moduletest_008, TestSize.Level0)
4837 {
4838     SceneMode sceneMode = SceneMode::PROFESSIONAL_VIDEO;
4839     if (!IsSceneModeSupported(sceneMode)) {
4840         return;
4841     }
4842     sptr<CameraManager> cameraManagerObj = CameraManager::GetInstance();
4843     ASSERT_NE(cameraManagerObj, nullptr);
4844 
4845     std::vector<SceneMode> sceneModes = cameraManagerObj->GetSupportedModes(cameras_[0]);
4846     ASSERT_TRUE(sceneModes.size() != 0);
4847 
4848     sptr<CameraOutputCapability> modeAbility =
4849         cameraManagerObj->GetSupportedOutputCapability(cameras_[0], sceneMode);
4850     ASSERT_NE(modeAbility, nullptr);
4851 
4852     SelectProfiles wanted;
4853     wanted.preview.size_ = {640, 480};
4854     wanted.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
4855     wanted.photo.size_ = {640, 480};
4856     wanted.photo.format_ = CAMERA_FORMAT_JPEG;
4857     wanted.video.size_ = {640, 480};
4858     wanted.video.format_ = CAMERA_FORMAT_YUV_420_SP;
4859     wanted.video.framerates_ = {30, 30};
4860 
4861     sptr<CaptureSession> captureSession = cameraManagerObj->CreateCaptureSession(sceneMode);
4862     ASSERT_NE(captureSession, nullptr);
4863     sptr<ProfessionSession> session = static_cast<ProfessionSession*>(captureSession.GetRefPtr());
4864     ASSERT_NE(session, nullptr);
4865 
4866     int32_t intResult = session->BeginConfig();
4867     EXPECT_EQ(intResult, 0);
4868 
4869     intResult = session->AddInput(input_);
4870     EXPECT_EQ(intResult, 0);
4871 
4872     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(wanted.preview);
4873     ASSERT_NE(previewOutput, nullptr);
4874 
4875     intResult = session->AddOutput(previewOutput);
4876     EXPECT_EQ(intResult, 0);
4877 
4878     sptr<CaptureOutput> videoOutput = CreateVideoOutput(wanted.video);
4879     ASSERT_NE(videoOutput, nullptr);
4880 
4881     intResult = session->AddOutput(videoOutput);
4882     EXPECT_EQ(intResult, 0);
4883 
4884 
4885     intResult = session->CommitConfig();
4886     EXPECT_EQ(intResult, 0);
4887     std::vector<ColorEffect> colorEffects = {};
4888     intResult = session->GetSupportedColorEffects(colorEffects);
4889     EXPECT_EQ(intResult, 0);
4890     EXPECT_NE(colorEffects.size(), 0);
4891 
4892     session->LockForControl();
4893     intResult = session->SetColorEffect(colorEffects[0]);
4894     EXPECT_EQ(intResult, 0);
4895     session->UnlockForControl();
4896 
4897     ColorEffect colorEffect;
4898     intResult = session->GetColorEffect(colorEffect);
4899     EXPECT_EQ(intResult, 0);
4900 
4901     EXPECT_EQ(colorEffect, colorEffects[0]);
4902     intResult = session->Start();
4903     EXPECT_EQ(intResult, 0);
4904     sleep(WAIT_TIME_AFTER_START);
4905 
4906     intResult = ((sptr<VideoOutput>&)videoOutput)->Start();
4907     EXPECT_EQ(intResult, 0);
4908     sleep(WAIT_TIME_AFTER_RECORDING);
4909     intResult = ((sptr<VideoOutput>&)videoOutput)->Stop();
4910     session->Stop();
4911 }
4912 
4913 /*
4914  * Feature: Framework
4915  * Function: Test time lapse photo session with photo output
4916  * SubFunction: NA
4917  * FunctionPoints: NA
4918  * EnvConditions: NA
4919  * CaseDescription: Test can add photo output into time lapse photo session
4920  */
4921 HWTEST_F(CameraSessionModuleTest, time_lapse_photo_session_moduletest_001, TestSize.Level0)
4922 {
4923     if (!IsSceneModeSupported(SceneMode::TIMELAPSE_PHOTO)) {
4924         return;
4925     }
4926 
4927     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::TIMELAPSE_PHOTO);
4928     ASSERT_NE(outputCapability, nullptr);
4929     auto previewProfiles = outputCapability->GetPreviewProfiles();
4930     ASSERT_FALSE(previewProfiles.empty());
4931     auto photoProfiles = outputCapability->GetPhotoProfiles();
4932     ASSERT_FALSE(photoProfiles.empty());
4933 
4934     auto captureSession = manager_->CreateCaptureSession(SceneMode::TIMELAPSE_PHOTO);
4935     auto timeLapsePhotoSession = static_cast<TimeLapsePhotoSession*>(captureSession.GetRefPtr());
4936     ASSERT_NE(timeLapsePhotoSession, nullptr);
4937     int32_t res = timeLapsePhotoSession->BeginConfig();
4938     EXPECT_EQ(res, 0);
4939 
4940     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
4941     ASSERT_NE(input, nullptr);
4942     input->Open();
4943     res = timeLapsePhotoSession->AddInput(input);
4944     EXPECT_EQ(res, 0);
4945     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
4946     ASSERT_NE(previewOutput, nullptr);
4947     EXPECT_TRUE(timeLapsePhotoSession->CanAddOutput(previewOutput));
4948     res = timeLapsePhotoSession->AddOutput(previewOutput);
4949     EXPECT_EQ(res, 0);
4950     sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
4951     ASSERT_NE(photoOutput, nullptr);
4952     EXPECT_TRUE(timeLapsePhotoSession->CanAddOutput(photoOutput));
4953     res = timeLapsePhotoSession->AddOutput(photoOutput);
4954     EXPECT_EQ(res, 0);
4955 
4956     res = timeLapsePhotoSession->CommitConfig();
4957     EXPECT_EQ(res, 0);
4958     res = timeLapsePhotoSession->Start();
4959     EXPECT_EQ(res, 0);
4960     sleep(WAIT_TIME_AFTER_START);
4961     res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
4962     EXPECT_EQ(res, 0);
4963     sleep(WAIT_TIME_AFTER_CAPTURE);
4964     res = timeLapsePhotoSession->Stop();
4965     EXPECT_EQ(res, 0);
4966     res = timeLapsePhotoSession->Release();
4967     EXPECT_EQ(res, 0);
4968 }
4969 
4970 /*
4971  * Feature: Framework
4972  * Function: Test time lapse photo session with video output
4973  * SubFunction: NA
4974  * FunctionPoints: NA
4975  * EnvConditions: NA
4976  * CaseDescription: Test can not add video output into time lapse photo session
4977  */
4978 HWTEST_F(CameraSessionModuleTest, time_lapse_photo_session_moduletest_002, TestSize.Level0)
4979 {
4980     if (!IsSceneModeSupported(SceneMode::TIMELAPSE_PHOTO)) {
4981         return;
4982     }
4983 
4984     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::TIMELAPSE_PHOTO);
4985     ASSERT_NE(outputCapability, nullptr);
4986     auto previewProfiles = outputCapability->GetPreviewProfiles();
4987     ASSERT_FALSE(previewProfiles.empty());
4988     auto videoProfiles = outputCapability->GetVideoProfiles();
4989     ASSERT_TRUE(videoProfiles.empty());
4990     auto outputCapabilityBase = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::VIDEO);
4991     ASSERT_NE(outputCapabilityBase, nullptr);
4992     auto videoProfilesBase = outputCapabilityBase->GetVideoProfiles();
4993     ASSERT_FALSE(videoProfilesBase.empty());
4994 
4995     auto captureSession = manager_->CreateCaptureSession(SceneMode::TIMELAPSE_PHOTO);
4996     auto timeLapsePhotoSession = static_cast<TimeLapsePhotoSession*>(captureSession.GetRefPtr());
4997     ASSERT_NE(timeLapsePhotoSession, nullptr);
4998     int32_t res = timeLapsePhotoSession->BeginConfig();
4999     EXPECT_EQ(res, 0);
5000 
5001     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
5002     ASSERT_NE(input, nullptr);
5003     input->Open();
5004     res = timeLapsePhotoSession->AddInput(input);
5005     EXPECT_EQ(res, 0);
5006     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
5007     ASSERT_NE(previewOutput, nullptr);
5008     EXPECT_TRUE(timeLapsePhotoSession->CanAddOutput(previewOutput));
5009     res = timeLapsePhotoSession->AddOutput(previewOutput);
5010     EXPECT_EQ(res, 0);
5011     sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfilesBase[0]);
5012     ASSERT_NE(videoOutput, nullptr);
5013     EXPECT_FALSE(timeLapsePhotoSession->CanAddOutput(videoOutput));
5014 }
5015 
5016 /*
5017  * Feature: Framework
5018  * Function: Test time lapse photo session try AE
5019  * SubFunction: NA
5020  * FunctionPoints: NA
5021  * EnvConditions: NA
5022  * CaseDescription: Test can start and stop try AE in time lapse photo session
5023  */
5024 HWTEST_F(CameraSessionModuleTest, time_lapse_photo_session_moduletest_003, TestSize.Level0)
5025 {
5026     SceneMode sceneMode = SceneMode::TIMELAPSE_PHOTO;
5027     if (!IsSceneModeSupported(sceneMode)) {
5028         return;
5029     }
5030     if (session_) {
5031         session_->Release();
5032         session_.clear();
5033     }
5034     sptr<CameraManager> cameraManager = CameraManager::GetInstance();
5035     ASSERT_NE(cameraManager, nullptr);
5036     auto cameras = cameraManager->GetSupportedCameras();
5037     ASSERT_NE(cameras.size(), 0);
5038     sptr<CameraDevice> camera = cameras[0];
5039     ASSERT_NE(camera, nullptr);
5040     sptr<CameraOutputCapability> capability = cameraManager->GetSupportedOutputCapability(camera, sceneMode);
5041     ASSERT_NE(capability, nullptr);
5042     SelectProfiles wanted;
5043     wanted.preview.size_ = {640, 480};
5044     wanted.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
5045     wanted.photo.size_ = {640, 480};
5046     wanted.photo.format_ = CAMERA_FORMAT_JPEG;
5047     wanted.video.size_ = {640, 480};
5048     wanted.video.format_ = CAMERA_FORMAT_YUV_420_SP;
5049     wanted.video.framerates_ = {30, 30};
5050     sptr<CaptureSession> captureSession = cameraManager->CreateCaptureSession(sceneMode);
5051     ASSERT_NE(captureSession, nullptr);
5052     sptr<TimeLapsePhotoSession> session = reinterpret_cast<TimeLapsePhotoSession*>(captureSession.GetRefPtr());
5053     ASSERT_NE(session, nullptr);
5054     int32_t status = session->BeginConfig();
5055     EXPECT_EQ(status, 0);
5056     sptr<CaptureInput> input = cameraManager->CreateCameraInput(camera);
5057     ASSERT_NE(input, nullptr);
5058     status = input->Open();
5059     EXPECT_EQ(status, 0);
5060     status = session->AddInput(input);
5061     EXPECT_EQ(status, 0);
5062     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(wanted.preview);
5063     ASSERT_NE(previewOutput, nullptr);
5064     status = session->AddOutput(previewOutput);
5065     EXPECT_EQ(status, 0);
5066     sptr<CaptureOutput> photoOutput = CreatePhotoOutput(wanted.photo);
5067     ASSERT_NE(photoOutput, nullptr);
5068     status = session->AddOutput(photoOutput);
5069     EXPECT_EQ(status, 0);
5070     status = session->CommitConfig();
5071     EXPECT_EQ(status, 0);
5072     class ExposureInfoCallbackMock : public ExposureInfoCallback {
5073     public:
OnExposureInfoChanged(ExposureInfo info)5074         void OnExposureInfoChanged(ExposureInfo info) override
5075         {
5076             EXPECT_EQ(info.exposureDurationValue, 1);
5077         }
5078     };
5079     session->SetExposureInfoCallback(make_shared<ExposureInfoCallbackMock>());
5080     static const camera_rational_t r = {
5081         .denominator = 1000000,
5082         .numerator = 1,
5083     };
5084     auto meta = make_shared<OHOS::Camera::CameraMetadata>(10, 100);
5085     EXPECT_EQ(meta->addEntry(OHOS_STATUS_SENSOR_EXPOSURE_TIME, &r, 1), true);
5086     session->ProcessExposureChange(meta);
5087 
5088     class IsoInfoCallbackMock : public IsoInfoCallback {
5089     public:
OnIsoInfoChanged(IsoInfo info)5090         void OnIsoInfoChanged(IsoInfo info) override
5091         {
5092             EXPECT_EQ(info.isoValue, 1);
5093         }
5094     };
5095     session->SetIsoInfoCallback(make_shared<IsoInfoCallbackMock>());
5096     static const uint32_t iso = 1;
5097     EXPECT_EQ(meta->addEntry(OHOS_STATUS_ISO_VALUE, &iso, 1), true);
5098     session->ProcessIsoInfoChange(meta);
5099 
5100     static const uint32_t lumination = 256;
5101     class LuminationInfoCallbackMock : public LuminationInfoCallback {
5102     public:
OnLuminationInfoChanged(LuminationInfo info)5103         void OnLuminationInfoChanged(LuminationInfo info) override
5104         {
5105             EXPECT_EQ((int32_t)info.luminationValue, 1);
5106         }
5107     };
5108     session->SetLuminationInfoCallback(make_shared<LuminationInfoCallbackMock>());
5109     EXPECT_EQ(meta->addEntry(OHOS_STATUS_ALGO_MEAN_Y, &lumination, 1), true);
5110     session->ProcessLuminationChange(meta);
5111 
5112     static const int32_t value = 1;
5113     class TryAEInfoCallbackMock : public TryAEInfoCallback {
5114     public:
OnTryAEInfoChanged(TryAEInfo info)5115         void OnTryAEInfoChanged(TryAEInfo info) override
5116         {
5117             EXPECT_EQ(info.isTryAEDone, true);
5118             EXPECT_EQ(info.isTryAEHintNeeded, true);
5119             EXPECT_EQ(info.previewType, TimeLapsePreviewType::DARK);
5120             EXPECT_EQ(info.captureInterval, 1);
5121         }
5122     };
5123     session->SetTryAEInfoCallback(make_shared<TryAEInfoCallbackMock>());
5124     EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_TRYAE_DONE, &value, 1), true);
5125     EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_TRYAE_HINT, &value, 1), true);
5126     EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_PREVIEW_TYPE, &value, 1), true);
5127     EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_CAPTURE_INTERVAL, &value, 1), true);
5128     session->ProcessSetTryAEChange(meta);
5129 
5130     EXPECT_EQ(meta->addEntry(OHOS_CAMERA_MACRO_STATUS, &value, 1), true);
5131     session->ProcessPhysicalCameraSwitch(meta);
5132 
5133     bool isTryAENeeded;
5134     status = session->IsTryAENeeded(isTryAENeeded);
5135     EXPECT_EQ(status, 0);
5136     if (isTryAENeeded) {
5137         session->LockForControl();
5138         status = session->StartTryAE();
5139         session->UnlockForControl();
5140         EXPECT_EQ(status, 0);
5141         session->LockForControl();
5142         status = session->StopTryAE();
5143         session->UnlockForControl();
5144         EXPECT_EQ(status, 0);
5145     }
5146     session->Release();
5147 }
5148 
5149 /*
5150  * Feature: Framework
5151  * Function: Test time lapse photo session set time lapse interval
5152  * SubFunction: NA
5153  * FunctionPoints: NA
5154  * EnvConditions: NA
5155  * CaseDescription: Test can set time lapse interval into time lapse photo session
5156  */
5157 HWTEST_F(CameraSessionModuleTest, time_lapse_photo_session_moduletest_004, TestSize.Level0)
5158 {
5159     SceneMode sceneMode = SceneMode::TIMELAPSE_PHOTO;
5160     if (!IsSceneModeSupported(sceneMode)) {
5161         return;
5162     }
5163     if (session_) {
5164         session_->Release();
5165         session_.clear();
5166     }
5167     sptr<CameraManager> cameraManager = CameraManager::GetInstance();
5168     ASSERT_NE(cameraManager, nullptr);
5169     auto cameras = cameraManager->GetSupportedCameras();
5170     ASSERT_NE(cameras.size(), 0);
5171     sptr<CameraDevice> camera = cameras[0];
5172     ASSERT_NE(camera, nullptr);
5173     sptr<CameraOutputCapability> capability = cameraManager->GetSupportedOutputCapability(camera, sceneMode);
5174     ASSERT_NE(capability, nullptr);
5175     SelectProfiles wanted;
5176     wanted.preview.size_ = {640, 480};
5177     wanted.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
5178     wanted.photo.size_ = {640, 480};
5179     wanted.photo.format_ = CAMERA_FORMAT_JPEG;
5180     wanted.video.size_ = {640, 480};
5181     wanted.video.format_ = CAMERA_FORMAT_YUV_420_SP;
5182     wanted.video.framerates_ = {30, 30};
5183     sptr<CaptureSession> captureSession = cameraManager->CreateCaptureSession(sceneMode);
5184     ASSERT_NE(captureSession, nullptr);
5185     sptr<TimeLapsePhotoSession> session = reinterpret_cast<TimeLapsePhotoSession*>(captureSession.GetRefPtr());
5186     ASSERT_NE(session, nullptr);
5187     int32_t status = session->BeginConfig();
5188     EXPECT_EQ(status, 0);
5189     sptr<CaptureInput> input = cameraManager->CreateCameraInput(camera);
5190     ASSERT_NE(input, nullptr);
5191     status = input->Open();
5192     EXPECT_EQ(status, 0);
5193     status = session->AddInput(input);
5194     EXPECT_EQ(status, 0);
5195     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(wanted.preview);
5196     ASSERT_NE(previewOutput, nullptr);
5197     status = session->AddOutput(previewOutput);
5198     EXPECT_EQ(status, 0);
5199     sptr<CaptureOutput> photoOutput = CreatePhotoOutput(wanted.photo);
5200     ASSERT_NE(photoOutput, nullptr);
5201     status = session->AddOutput(photoOutput);
5202     EXPECT_EQ(status, 0);
5203     status = session->CommitConfig();
5204     EXPECT_EQ(status, 0);
5205     class ExposureInfoCallbackMock : public ExposureInfoCallback {
5206     public:
OnExposureInfoChanged(ExposureInfo info)5207         void OnExposureInfoChanged(ExposureInfo info) override
5208         {
5209             EXPECT_EQ(info.exposureDurationValue, 1);
5210         }
5211     };
5212     session->SetExposureInfoCallback(make_shared<ExposureInfoCallbackMock>());
5213     static const camera_rational_t r = {
5214         .denominator = 1000000,
5215         .numerator = 1,
5216     };
5217     auto meta = make_shared<OHOS::Camera::CameraMetadata>(10, 100);
5218     EXPECT_EQ(meta->addEntry(OHOS_STATUS_SENSOR_EXPOSURE_TIME, &r, 1), true);
5219     session->ProcessExposureChange(meta);
5220 
5221     class IsoInfoCallbackMock : public IsoInfoCallback {
5222     public:
OnIsoInfoChanged(IsoInfo info)5223         void OnIsoInfoChanged(IsoInfo info) override
5224         {
5225             EXPECT_EQ(info.isoValue, 1);
5226         }
5227     };
5228     session->SetIsoInfoCallback(make_shared<IsoInfoCallbackMock>());
5229     static const uint32_t iso = 1;
5230     EXPECT_EQ(meta->addEntry(OHOS_STATUS_ISO_VALUE, &iso, 1), true);
5231     session->ProcessIsoInfoChange(meta);
5232 
5233     static const uint32_t lumination = 256;
5234     class LuminationInfoCallbackMock : public LuminationInfoCallback {
5235     public:
OnLuminationInfoChanged(LuminationInfo info)5236         void OnLuminationInfoChanged(LuminationInfo info) override
5237         {
5238             EXPECT_EQ((int32_t)info.luminationValue, 1);
5239         }
5240     };
5241     session->SetLuminationInfoCallback(make_shared<LuminationInfoCallbackMock>());
5242     EXPECT_EQ(meta->addEntry(OHOS_STATUS_ALGO_MEAN_Y, &lumination, 1), true);
5243     session->ProcessLuminationChange(meta);
5244 
5245     static const int32_t value = 1;
5246     class TryAEInfoCallbackMock : public TryAEInfoCallback {
5247     public:
OnTryAEInfoChanged(TryAEInfo info)5248         void OnTryAEInfoChanged(TryAEInfo info) override
5249         {
5250             EXPECT_EQ(info.isTryAEDone, true);
5251             EXPECT_EQ(info.isTryAEHintNeeded, true);
5252             EXPECT_EQ(info.previewType, TimeLapsePreviewType::DARK);
5253             EXPECT_EQ(info.captureInterval, 1);
5254         }
5255     };
5256     session->SetTryAEInfoCallback(make_shared<TryAEInfoCallbackMock>());
5257     EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_TRYAE_DONE, &value, 1), true);
5258     EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_TRYAE_HINT, &value, 1), true);
5259     EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_PREVIEW_TYPE, &value, 1), true);
5260     EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_CAPTURE_INTERVAL, &value, 1), true);
5261     session->ProcessSetTryAEChange(meta);
5262 
5263     EXPECT_EQ(meta->addEntry(OHOS_CAMERA_MACRO_STATUS, &value, 1), true);
5264     session->ProcessPhysicalCameraSwitch(meta);
5265 
5266     vector<int32_t> range;
5267     status = session->GetSupportedTimeLapseIntervalRange(range);
5268     EXPECT_EQ(status, 0);
5269     if (!range.empty()) {
5270         session->LockForControl();
5271         status = session->SetTimeLapseInterval(range[0]);
5272         session->UnlockForControl();
5273         EXPECT_EQ(status, 0);
5274         int32_t interval;
5275         status = session->GetTimeLapseInterval(interval);
5276         EXPECT_EQ(status, 0);
5277         EXPECT_EQ(interval, range[0]);
5278     }
5279     session->Release();
5280 }
5281 
5282 /*
5283  * Feature: Framework
5284  * Function: Test time lapse photo session set exposure
5285  * SubFunction: NA
5286  * FunctionPoints: NA
5287  * EnvConditions: NA
5288  * CaseDescription: Test can set exposure into time lapse photo session
5289  */
5290 HWTEST_F(CameraSessionModuleTest, time_lapse_photo_session_moduletest_005, TestSize.Level0)
5291 {
5292     SceneMode sceneMode = SceneMode::TIMELAPSE_PHOTO;
5293     if (!IsSceneModeSupported(sceneMode)) {
5294         return;
5295     }
5296     if (session_) {
5297         session_->Release();
5298         session_.clear();
5299     }
5300     sptr<CameraManager> cameraManager = CameraManager::GetInstance();
5301     ASSERT_NE(cameraManager, nullptr);
5302     auto cameras = cameraManager->GetSupportedCameras();
5303     ASSERT_NE(cameras.size(), 0);
5304     sptr<CameraDevice> camera = cameras[0];
5305     ASSERT_NE(camera, nullptr);
5306     sptr<CameraOutputCapability> capability = cameraManager->GetSupportedOutputCapability(camera, sceneMode);
5307     ASSERT_NE(capability, nullptr);
5308     SelectProfiles wanted;
5309     wanted.preview.size_ = {640, 480};
5310     wanted.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
5311     wanted.photo.size_ = {640, 480};
5312     wanted.photo.format_ = CAMERA_FORMAT_JPEG;
5313     wanted.video.size_ = {640, 480};
5314     wanted.video.format_ = CAMERA_FORMAT_YUV_420_SP;
5315     wanted.video.framerates_ = {30, 30};
5316     sptr<CaptureSession> captureSession = cameraManager->CreateCaptureSession(sceneMode);
5317     ASSERT_NE(captureSession, nullptr);
5318     sptr<TimeLapsePhotoSession> session = reinterpret_cast<TimeLapsePhotoSession*>(captureSession.GetRefPtr());
5319     ASSERT_NE(session, nullptr);
5320     int32_t status = session->BeginConfig();
5321     EXPECT_EQ(status, 0);
5322     sptr<CaptureInput> input = cameraManager->CreateCameraInput(camera);
5323     ASSERT_NE(input, nullptr);
5324     status = input->Open();
5325     EXPECT_EQ(status, 0);
5326     status = session->AddInput(input);
5327     EXPECT_EQ(status, 0);
5328     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(wanted.preview);
5329     ASSERT_NE(previewOutput, nullptr);
5330     status = session->AddOutput(previewOutput);
5331     EXPECT_EQ(status, 0);
5332     sptr<CaptureOutput> photoOutput = CreatePhotoOutput(wanted.photo);
5333     ASSERT_NE(photoOutput, nullptr);
5334     status = session->AddOutput(photoOutput);
5335     EXPECT_EQ(status, 0);
5336     status = session->CommitConfig();
5337     EXPECT_EQ(status, 0);
5338     class ExposureInfoCallbackMock : public ExposureInfoCallback {
5339     public:
OnExposureInfoChanged(ExposureInfo info)5340         void OnExposureInfoChanged(ExposureInfo info) override
5341         {
5342             EXPECT_EQ(info.exposureDurationValue, 1);
5343         }
5344     };
5345     session->SetExposureInfoCallback(make_shared<ExposureInfoCallbackMock>());
5346     static const camera_rational_t r = {
5347         .denominator = 1000000,
5348         .numerator = 1,
5349     };
5350     auto meta = make_shared<OHOS::Camera::CameraMetadata>(10, 100);
5351     EXPECT_EQ(meta->addEntry(OHOS_STATUS_SENSOR_EXPOSURE_TIME, &r, 1), true);
5352     session->ProcessExposureChange(meta);
5353 
5354     class IsoInfoCallbackMock : public IsoInfoCallback {
5355     public:
OnIsoInfoChanged(IsoInfo info)5356         void OnIsoInfoChanged(IsoInfo info) override
5357         {
5358             EXPECT_EQ(info.isoValue, 1);
5359         }
5360     };
5361     session->SetIsoInfoCallback(make_shared<IsoInfoCallbackMock>());
5362     static const uint32_t iso = 1;
5363     EXPECT_EQ(meta->addEntry(OHOS_STATUS_ISO_VALUE, &iso, 1), true);
5364     session->ProcessIsoInfoChange(meta);
5365 
5366     static const uint32_t lumination = 256;
5367     class LuminationInfoCallbackMock : public LuminationInfoCallback {
5368     public:
OnLuminationInfoChanged(LuminationInfo info)5369         void OnLuminationInfoChanged(LuminationInfo info) override
5370         {
5371             EXPECT_EQ((int32_t)info.luminationValue, 1);
5372         }
5373     };
5374     session->SetLuminationInfoCallback(make_shared<LuminationInfoCallbackMock>());
5375     EXPECT_EQ(meta->addEntry(OHOS_STATUS_ALGO_MEAN_Y, &lumination, 1), true);
5376     session->ProcessLuminationChange(meta);
5377 
5378     static const int32_t value = 1;
5379     class TryAEInfoCallbackMock : public TryAEInfoCallback {
5380     public:
OnTryAEInfoChanged(TryAEInfo info)5381         void OnTryAEInfoChanged(TryAEInfo info) override
5382         {
5383             EXPECT_EQ(info.isTryAEDone, true);
5384             EXPECT_EQ(info.isTryAEHintNeeded, true);
5385             EXPECT_EQ(info.previewType, TimeLapsePreviewType::DARK);
5386             EXPECT_EQ(info.captureInterval, 1);
5387         }
5388     };
5389     session->SetTryAEInfoCallback(make_shared<TryAEInfoCallbackMock>());
5390     EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_TRYAE_DONE, &value, 1), true);
5391     EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_TRYAE_HINT, &value, 1), true);
5392     EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_PREVIEW_TYPE, &value, 1), true);
5393     EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_CAPTURE_INTERVAL, &value, 1), true);
5394     session->ProcessSetTryAEChange(meta);
5395 
5396     EXPECT_EQ(meta->addEntry(OHOS_CAMERA_MACRO_STATUS, &value, 1), true);
5397     session->ProcessPhysicalCameraSwitch(meta);
5398 
5399     session->LockForControl();
5400     status = session->SetTimeLapseRecordState(TimeLapseRecordState::RECORDING);
5401     session->UnlockForControl();
5402     EXPECT_EQ(status, 0);
5403     session->LockForControl();
5404     status = session->SetTimeLapsePreviewType(TimeLapsePreviewType::DARK);
5405     session->UnlockForControl();
5406     EXPECT_EQ(status, 0);
5407     session->LockForControl();
5408     status = session->SetExposureHintMode(ExposureHintMode::EXPOSURE_HINT_MODE_OFF);
5409     session->UnlockForControl();
5410     EXPECT_EQ(status, 0);
5411 
5412     vector<uint32_t> exposureRange;
5413     status = session->GetSupportedExposureRange(exposureRange);
5414     EXPECT_EQ(status, 0);
5415     if (!exposureRange.empty()) {
5416         session->LockForControl();
5417         status = session->SetExposure(exposureRange[0]);
5418         session->UnlockForControl();
5419         EXPECT_EQ(status, 0);
5420         uint32_t exposure;
5421         status = session->GetExposure(exposure);
5422         EXPECT_EQ(status, 0);
5423         EXPECT_EQ(exposure, exposureRange[0]);
5424     }
5425     session->Release();
5426 }
5427 
5428 /*
5429  * Feature: Framework
5430  * Function: Test time lapse photo session set exposure metering mode
5431  * SubFunction: NA
5432  * FunctionPoints: NA
5433  * EnvConditions: NA
5434  * CaseDescription: Test can set exposure metering mode into time lapse photo session
5435  */
5436 HWTEST_F(CameraSessionModuleTest, time_lapse_photo_session_moduletest_006, TestSize.Level0)
5437 {
5438     SceneMode sceneMode = SceneMode::TIMELAPSE_PHOTO;
5439     if (!IsSceneModeSupported(sceneMode)) {
5440         return;
5441     }
5442     if (session_) {
5443         session_->Release();
5444         session_.clear();
5445     }
5446     sptr<CameraManager> cameraManager = CameraManager::GetInstance();
5447     ASSERT_NE(cameraManager, nullptr);
5448     auto cameras = cameraManager->GetSupportedCameras();
5449     ASSERT_NE(cameras.size(), 0);
5450     sptr<CameraDevice> camera = cameras[0];
5451     ASSERT_NE(camera, nullptr);
5452     sptr<CameraOutputCapability> capability = cameraManager->GetSupportedOutputCapability(camera, sceneMode);
5453     ASSERT_NE(capability, nullptr);
5454     SelectProfiles wanted;
5455     wanted.preview.size_ = {640, 480};
5456     wanted.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
5457     wanted.photo.size_ = {640, 480};
5458     wanted.photo.format_ = CAMERA_FORMAT_JPEG;
5459     wanted.video.size_ = {640, 480};
5460     wanted.video.format_ = CAMERA_FORMAT_YUV_420_SP;
5461     wanted.video.framerates_ = {30, 30};
5462     sptr<CaptureSession> captureSession = cameraManager->CreateCaptureSession(sceneMode);
5463     ASSERT_NE(captureSession, nullptr);
5464     sptr<TimeLapsePhotoSession> session = reinterpret_cast<TimeLapsePhotoSession*>(captureSession.GetRefPtr());
5465     ASSERT_NE(session, nullptr);
5466     int32_t status = session->BeginConfig();
5467     EXPECT_EQ(status, 0);
5468     sptr<CaptureInput> input = cameraManager->CreateCameraInput(camera);
5469     ASSERT_NE(input, nullptr);
5470     status = input->Open();
5471     EXPECT_EQ(status, 0);
5472     status = session->AddInput(input);
5473     EXPECT_EQ(status, 0);
5474     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(wanted.preview);
5475     ASSERT_NE(previewOutput, nullptr);
5476     status = session->AddOutput(previewOutput);
5477     EXPECT_EQ(status, 0);
5478     sptr<CaptureOutput> photoOutput = CreatePhotoOutput(wanted.photo);
5479     ASSERT_NE(photoOutput, nullptr);
5480     status = session->AddOutput(photoOutput);
5481     EXPECT_EQ(status, 0);
5482     status = session->CommitConfig();
5483     EXPECT_EQ(status, 0);
5484     class ExposureInfoCallbackMock : public ExposureInfoCallback {
5485     public:
OnExposureInfoChanged(ExposureInfo info)5486         void OnExposureInfoChanged(ExposureInfo info) override
5487         {
5488             EXPECT_EQ(info.exposureDurationValue, 1);
5489         }
5490     };
5491     session->SetExposureInfoCallback(make_shared<ExposureInfoCallbackMock>());
5492     static const camera_rational_t r = {
5493         .denominator = 1000000,
5494         .numerator = 1,
5495     };
5496     auto meta = make_shared<OHOS::Camera::CameraMetadata>(10, 100);
5497     EXPECT_EQ(meta->addEntry(OHOS_STATUS_SENSOR_EXPOSURE_TIME, &r, 1), true);
5498     session->ProcessExposureChange(meta);
5499 
5500     class IsoInfoCallbackMock : public IsoInfoCallback {
5501     public:
OnIsoInfoChanged(IsoInfo info)5502         void OnIsoInfoChanged(IsoInfo info) override
5503         {
5504             EXPECT_EQ(info.isoValue, 1);
5505         }
5506     };
5507     session->SetIsoInfoCallback(make_shared<IsoInfoCallbackMock>());
5508     static const uint32_t iso = 1;
5509     EXPECT_EQ(meta->addEntry(OHOS_STATUS_ISO_VALUE, &iso, 1), true);
5510     session->ProcessIsoInfoChange(meta);
5511 
5512     static const uint32_t lumination = 256;
5513     class LuminationInfoCallbackMock : public LuminationInfoCallback {
5514     public:
OnLuminationInfoChanged(LuminationInfo info)5515         void OnLuminationInfoChanged(LuminationInfo info) override
5516         {
5517             EXPECT_EQ((int32_t)info.luminationValue, 1);
5518         }
5519     };
5520     session->SetLuminationInfoCallback(make_shared<LuminationInfoCallbackMock>());
5521     EXPECT_EQ(meta->addEntry(OHOS_STATUS_ALGO_MEAN_Y, &lumination, 1), true);
5522     session->ProcessLuminationChange(meta);
5523 
5524     static const int32_t value = 1;
5525     class TryAEInfoCallbackMock : public TryAEInfoCallback {
5526     public:
OnTryAEInfoChanged(TryAEInfo info)5527         void OnTryAEInfoChanged(TryAEInfo info) override
5528         {
5529             EXPECT_EQ(info.isTryAEDone, true);
5530             EXPECT_EQ(info.isTryAEHintNeeded, true);
5531             EXPECT_EQ(info.previewType, TimeLapsePreviewType::DARK);
5532             EXPECT_EQ(info.captureInterval, 1);
5533         }
5534     };
5535     session->SetTryAEInfoCallback(make_shared<TryAEInfoCallbackMock>());
5536     EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_TRYAE_DONE, &value, 1), true);
5537     EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_TRYAE_HINT, &value, 1), true);
5538     EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_PREVIEW_TYPE, &value, 1), true);
5539     EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_CAPTURE_INTERVAL, &value, 1), true);
5540     session->ProcessSetTryAEChange(meta);
5541 
5542     EXPECT_EQ(meta->addEntry(OHOS_CAMERA_MACRO_STATUS, &value, 1), true);
5543     session->ProcessPhysicalCameraSwitch(meta);
5544 
5545     session->LockForControl();
5546     status = session->SetTimeLapseRecordState(TimeLapseRecordState::RECORDING);
5547     session->UnlockForControl();
5548     EXPECT_EQ(status, 0);
5549     session->LockForControl();
5550     status = session->SetTimeLapsePreviewType(TimeLapsePreviewType::DARK);
5551     session->UnlockForControl();
5552     EXPECT_EQ(status, 0);
5553     session->LockForControl();
5554     status = session->SetExposureHintMode(ExposureHintMode::EXPOSURE_HINT_MODE_OFF);
5555     session->UnlockForControl();
5556     EXPECT_EQ(status, 0);
5557 
5558     vector<MeteringMode> modes;
5559     status = session->GetSupportedMeteringModes(modes);
5560     EXPECT_EQ(status, 0);
5561     if (!modes.empty()) {
5562         bool supported;
5563         int32_t i = METERING_MODE_CENTER_WEIGHTED;
5564         for (;i <= METERING_MODE_SPOT; i++) {
5565             status = session->IsExposureMeteringModeSupported(METERING_MODE_CENTER_WEIGHTED, supported);
5566             EXPECT_EQ(status, 0);
5567             if (status == 0 && supported) {
5568                 break;
5569             }
5570         }
5571         if (supported) {
5572             session->LockForControl();
5573             status = session->SetExposureMeteringMode(static_cast<MeteringMode>(i));
5574             session->UnlockForControl();
5575             EXPECT_EQ(status, 0);
5576             MeteringMode mode;
5577             status = session->GetExposureMeteringMode(mode);
5578             EXPECT_EQ(status, 0);
5579             EXPECT_EQ(mode, i);
5580         }
5581     }
5582     session->Release();
5583 }
5584 
5585 /*
5586  * Feature: Framework
5587  * Function: Test time lapse photo session set iso range
5588  * SubFunction: NA
5589  * FunctionPoints: NA
5590  * EnvConditions: NA
5591  * CaseDescription: Test can set iso range into time lapse photo session
5592  */
5593 HWTEST_F(CameraSessionModuleTest, time_lapse_photo_session_moduletest_007, TestSize.Level0)
5594 {
5595     SceneMode sceneMode = SceneMode::TIMELAPSE_PHOTO;
5596     if (!IsSceneModeSupported(sceneMode)) {
5597         return;
5598     }
5599     if (session_) {
5600         session_->Release();
5601         session_.clear();
5602     }
5603     sptr<CameraManager> cameraManager = CameraManager::GetInstance();
5604     ASSERT_NE(cameraManager, nullptr);
5605     auto cameras = cameraManager->GetSupportedCameras();
5606     ASSERT_NE(cameras.size(), 0);
5607     sptr<CameraDevice> camera = cameras[0];
5608     ASSERT_NE(camera, nullptr);
5609     sptr<CameraOutputCapability> capability = cameraManager->GetSupportedOutputCapability(camera, sceneMode);
5610     ASSERT_NE(capability, nullptr);
5611     SelectProfiles wanted;
5612     wanted.preview.size_ = {640, 480};
5613     wanted.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
5614     wanted.photo.size_ = {640, 480};
5615     wanted.photo.format_ = CAMERA_FORMAT_JPEG;
5616     wanted.video.size_ = {640, 480};
5617     wanted.video.format_ = CAMERA_FORMAT_YUV_420_SP;
5618     wanted.video.framerates_ = {30, 30};
5619     sptr<CaptureSession> captureSession = cameraManager->CreateCaptureSession(sceneMode);
5620     ASSERT_NE(captureSession, nullptr);
5621     sptr<TimeLapsePhotoSession> session = reinterpret_cast<TimeLapsePhotoSession*>(captureSession.GetRefPtr());
5622     ASSERT_NE(session, nullptr);
5623     int32_t status = session->BeginConfig();
5624     EXPECT_EQ(status, 0);
5625     sptr<CaptureInput> input = cameraManager->CreateCameraInput(camera);
5626     ASSERT_NE(input, nullptr);
5627     status = input->Open();
5628     EXPECT_EQ(status, 0);
5629     status = session->AddInput(input);
5630     EXPECT_EQ(status, 0);
5631     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(wanted.preview);
5632     ASSERT_NE(previewOutput, nullptr);
5633     status = session->AddOutput(previewOutput);
5634     EXPECT_EQ(status, 0);
5635     sptr<CaptureOutput> photoOutput = CreatePhotoOutput(wanted.photo);
5636     ASSERT_NE(photoOutput, nullptr);
5637     status = session->AddOutput(photoOutput);
5638     EXPECT_EQ(status, 0);
5639     status = session->CommitConfig();
5640     EXPECT_EQ(status, 0);
5641     class ExposureInfoCallbackMock : public ExposureInfoCallback {
5642     public:
OnExposureInfoChanged(ExposureInfo info)5643         void OnExposureInfoChanged(ExposureInfo info) override
5644         {
5645             EXPECT_EQ(info.exposureDurationValue, 1);
5646         }
5647     };
5648     session->SetExposureInfoCallback(make_shared<ExposureInfoCallbackMock>());
5649     static const camera_rational_t r = {
5650         .denominator = 1000000,
5651         .numerator = 1,
5652     };
5653     auto meta = make_shared<OHOS::Camera::CameraMetadata>(10, 100);
5654     EXPECT_EQ(meta->addEntry(OHOS_STATUS_SENSOR_EXPOSURE_TIME, &r, 1), true);
5655     session->ProcessExposureChange(meta);
5656 
5657     class IsoInfoCallbackMock : public IsoInfoCallback {
5658     public:
OnIsoInfoChanged(IsoInfo info)5659         void OnIsoInfoChanged(IsoInfo info) override
5660         {
5661             EXPECT_EQ(info.isoValue, 1);
5662         }
5663     };
5664     session->SetIsoInfoCallback(make_shared<IsoInfoCallbackMock>());
5665     static const uint32_t iso = 1;
5666     EXPECT_EQ(meta->addEntry(OHOS_STATUS_ISO_VALUE, &iso, 1), true);
5667     session->ProcessIsoInfoChange(meta);
5668 
5669     static const uint32_t lumination = 256;
5670     class LuminationInfoCallbackMock : public LuminationInfoCallback {
5671     public:
OnLuminationInfoChanged(LuminationInfo info)5672         void OnLuminationInfoChanged(LuminationInfo info) override
5673         {
5674             EXPECT_EQ((int32_t)info.luminationValue, 1);
5675         }
5676     };
5677     session->SetLuminationInfoCallback(make_shared<LuminationInfoCallbackMock>());
5678     EXPECT_EQ(meta->addEntry(OHOS_STATUS_ALGO_MEAN_Y, &lumination, 1), true);
5679     session->ProcessLuminationChange(meta);
5680 
5681     static const int32_t value = 1;
5682     class TryAEInfoCallbackMock : public TryAEInfoCallback {
5683     public:
OnTryAEInfoChanged(TryAEInfo info)5684         void OnTryAEInfoChanged(TryAEInfo info) override
5685         {
5686             EXPECT_EQ(info.isTryAEDone, true);
5687             EXPECT_EQ(info.isTryAEHintNeeded, true);
5688             EXPECT_EQ(info.previewType, TimeLapsePreviewType::DARK);
5689             EXPECT_EQ(info.captureInterval, 1);
5690         }
5691     };
5692     session->SetTryAEInfoCallback(make_shared<TryAEInfoCallbackMock>());
5693     EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_TRYAE_DONE, &value, 1), true);
5694     EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_TRYAE_HINT, &value, 1), true);
5695     EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_PREVIEW_TYPE, &value, 1), true);
5696     EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_CAPTURE_INTERVAL, &value, 1), true);
5697     session->ProcessSetTryAEChange(meta);
5698 
5699     EXPECT_EQ(meta->addEntry(OHOS_CAMERA_MACRO_STATUS, &value, 1), true);
5700     session->ProcessPhysicalCameraSwitch(meta);
5701 
5702     session->LockForControl();
5703     status = session->SetTimeLapseRecordState(TimeLapseRecordState::RECORDING);
5704     session->UnlockForControl();
5705     EXPECT_EQ(status, 0);
5706     session->LockForControl();
5707     status = session->SetTimeLapsePreviewType(TimeLapsePreviewType::DARK);
5708     session->UnlockForControl();
5709     EXPECT_EQ(status, 0);
5710     session->LockForControl();
5711     status = session->SetExposureHintMode(ExposureHintMode::EXPOSURE_HINT_MODE_OFF);
5712     session->UnlockForControl();
5713     EXPECT_EQ(status, 0);
5714 
5715     bool isManualIsoSupported;
5716     status = session->IsManualIsoSupported(isManualIsoSupported);
5717     EXPECT_EQ(status, 0);
5718     if (isManualIsoSupported) {
5719         vector<int32_t> isoRange;
5720         status = session->GetIsoRange(isoRange);
5721         EXPECT_EQ(status, 0);
5722         if (!isoRange.empty()) {
5723             session->LockForControl();
5724             status = session->SetIso(isoRange[0]);
5725             session->UnlockForControl();
5726             EXPECT_EQ(status, 0);
5727             int32_t iso;
5728             status = session->GetIso(iso);
5729             EXPECT_EQ(status, 0);
5730             EXPECT_EQ(iso, isoRange[0]);
5731         }
5732     }
5733     session->Release();
5734 }
5735 
5736 /*
5737  * Feature: Framework
5738  * Function: Test time lapse photo session set white balance mode
5739  * SubFunction: NA
5740  * FunctionPoints: NA
5741  * EnvConditions: NA
5742  * CaseDescription: Test can set white balance mode into time lapse photo session
5743  */
5744 HWTEST_F(CameraSessionModuleTest, time_lapse_photo_session_moduletest_008, TestSize.Level0)
5745 {
5746     SceneMode sceneMode = SceneMode::TIMELAPSE_PHOTO;
5747     if (!IsSceneModeSupported(sceneMode)) {
5748         return;
5749     }
5750     if (session_) {
5751         session_->Release();
5752         session_.clear();
5753     }
5754     sptr<CameraManager> cameraManager = CameraManager::GetInstance();
5755     ASSERT_NE(cameraManager, nullptr);
5756     auto cameras = cameraManager->GetSupportedCameras();
5757     ASSERT_NE(cameras.size(), 0);
5758     sptr<CameraDevice> camera = cameras[0];
5759     ASSERT_NE(camera, nullptr);
5760     sptr<CameraOutputCapability> capability = cameraManager->GetSupportedOutputCapability(camera, sceneMode);
5761     ASSERT_NE(capability, nullptr);
5762     SelectProfiles wanted;
5763     wanted.preview.size_ = {640, 480};
5764     wanted.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
5765     wanted.photo.size_ = {640, 480};
5766     wanted.photo.format_ = CAMERA_FORMAT_JPEG;
5767     wanted.video.size_ = {640, 480};
5768     wanted.video.format_ = CAMERA_FORMAT_YUV_420_SP;
5769     wanted.video.framerates_ = {30, 30};
5770     sptr<CaptureSession> captureSession = cameraManager->CreateCaptureSession(sceneMode);
5771     ASSERT_NE(captureSession, nullptr);
5772     sptr<TimeLapsePhotoSession> session = reinterpret_cast<TimeLapsePhotoSession*>(captureSession.GetRefPtr());
5773     ASSERT_NE(session, nullptr);
5774     int32_t status = session->BeginConfig();
5775     EXPECT_EQ(status, 0);
5776     sptr<CaptureInput> input = cameraManager->CreateCameraInput(camera);
5777     ASSERT_NE(input, nullptr);
5778     status = input->Open();
5779     EXPECT_EQ(status, 0);
5780     status = session->AddInput(input);
5781     EXPECT_EQ(status, 0);
5782     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(wanted.preview);
5783     ASSERT_NE(previewOutput, nullptr);
5784     status = session->AddOutput(previewOutput);
5785     EXPECT_EQ(status, 0);
5786     sptr<CaptureOutput> photoOutput = CreatePhotoOutput(wanted.photo);
5787     ASSERT_NE(photoOutput, nullptr);
5788     status = session->AddOutput(photoOutput);
5789     EXPECT_EQ(status, 0);
5790     status = session->CommitConfig();
5791     EXPECT_EQ(status, 0);
5792     class ExposureInfoCallbackMock : public ExposureInfoCallback {
5793     public:
OnExposureInfoChanged(ExposureInfo info)5794         void OnExposureInfoChanged(ExposureInfo info) override
5795         {
5796             EXPECT_EQ(info.exposureDurationValue, 1);
5797         }
5798     };
5799     session->SetExposureInfoCallback(make_shared<ExposureInfoCallbackMock>());
5800     static const camera_rational_t r = {
5801         .denominator = 1000000,
5802         .numerator = 1,
5803     };
5804     auto meta = make_shared<OHOS::Camera::CameraMetadata>(10, 100);
5805     EXPECT_EQ(meta->addEntry(OHOS_STATUS_SENSOR_EXPOSURE_TIME, &r, 1), true);
5806     session->ProcessExposureChange(meta);
5807 
5808     class IsoInfoCallbackMock : public IsoInfoCallback {
5809     public:
OnIsoInfoChanged(IsoInfo info)5810         void OnIsoInfoChanged(IsoInfo info) override
5811         {
5812             EXPECT_EQ(info.isoValue, 1);
5813         }
5814     };
5815     session->SetIsoInfoCallback(make_shared<IsoInfoCallbackMock>());
5816     static const uint32_t iso = 1;
5817     EXPECT_EQ(meta->addEntry(OHOS_STATUS_ISO_VALUE, &iso, 1), true);
5818     session->ProcessIsoInfoChange(meta);
5819 
5820     static const uint32_t lumination = 256;
5821     class LuminationInfoCallbackMock : public LuminationInfoCallback {
5822     public:
OnLuminationInfoChanged(LuminationInfo info)5823         void OnLuminationInfoChanged(LuminationInfo info) override
5824         {
5825             EXPECT_EQ((int32_t)info.luminationValue, 1);
5826         }
5827     };
5828     session->SetLuminationInfoCallback(make_shared<LuminationInfoCallbackMock>());
5829     EXPECT_EQ(meta->addEntry(OHOS_STATUS_ALGO_MEAN_Y, &lumination, 1), true);
5830     session->ProcessLuminationChange(meta);
5831 
5832     static const int32_t value = 1;
5833     class TryAEInfoCallbackMock : public TryAEInfoCallback {
5834     public:
OnTryAEInfoChanged(TryAEInfo info)5835         void OnTryAEInfoChanged(TryAEInfo info) override
5836         {
5837             EXPECT_EQ(info.isTryAEDone, true);
5838             EXPECT_EQ(info.isTryAEHintNeeded, true);
5839             EXPECT_EQ(info.previewType, TimeLapsePreviewType::DARK);
5840             EXPECT_EQ(info.captureInterval, 1);
5841         }
5842     };
5843     session->SetTryAEInfoCallback(make_shared<TryAEInfoCallbackMock>());
5844     EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_TRYAE_DONE, &value, 1), true);
5845     EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_TRYAE_HINT, &value, 1), true);
5846     EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_PREVIEW_TYPE, &value, 1), true);
5847     EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_CAPTURE_INTERVAL, &value, 1), true);
5848     session->ProcessSetTryAEChange(meta);
5849 
5850     EXPECT_EQ(meta->addEntry(OHOS_CAMERA_MACRO_STATUS, &value, 1), true);
5851     session->ProcessPhysicalCameraSwitch(meta);
5852 
5853     session->LockForControl();
5854     status = session->SetTimeLapseRecordState(TimeLapseRecordState::RECORDING);
5855     session->UnlockForControl();
5856     EXPECT_EQ(status, 0);
5857     session->LockForControl();
5858     status = session->SetTimeLapsePreviewType(TimeLapsePreviewType::DARK);
5859     session->UnlockForControl();
5860     EXPECT_EQ(status, 0);
5861     session->LockForControl();
5862     status = session->SetExposureHintMode(ExposureHintMode::EXPOSURE_HINT_MODE_OFF);
5863     session->UnlockForControl();
5864     EXPECT_EQ(status, 0);
5865 
5866     vector<WhiteBalanceMode> wbModes;
5867     status = session->GetSupportedWhiteBalanceModes(wbModes);
5868     EXPECT_EQ(status, 0);
5869     if (!wbModes.empty()) {
5870         bool isWhiteBalanceModeSupported;
5871         status = session->IsWhiteBalanceModeSupported(wbModes[0], isWhiteBalanceModeSupported);
5872         EXPECT_EQ(status, 0);
5873         if (isWhiteBalanceModeSupported) {
5874             session->LockForControl();
5875             status = session->SetWhiteBalanceMode(wbModes[0]);
5876             session->UnlockForControl();
5877             EXPECT_EQ(status, 0);
5878             WhiteBalanceMode mode;
5879             status = session->GetWhiteBalanceMode(mode);
5880             EXPECT_EQ(status, 0);
5881             EXPECT_EQ(mode, wbModes[0]);
5882         }
5883     }
5884     session->Release();
5885 }
5886 
5887 /*
5888  * Feature: Framework
5889  * Function: Test time lapse photo session set white balance range
5890  * SubFunction: NA
5891  * FunctionPoints: NA
5892  * EnvConditions: NA
5893  * CaseDescription: Test can set white balance range into time lapse photo session
5894  */
5895 HWTEST_F(CameraSessionModuleTest, time_lapse_photo_session_moduletest_009, TestSize.Level0)
5896 {
5897     SceneMode sceneMode = SceneMode::TIMELAPSE_PHOTO;
5898     if (!IsSceneModeSupported(sceneMode)) {
5899         return;
5900     }
5901     if (session_) {
5902         session_->Release();
5903         session_.clear();
5904     }
5905     sptr<CameraManager> cameraManager = CameraManager::GetInstance();
5906     ASSERT_NE(cameraManager, nullptr);
5907     auto cameras = cameraManager->GetSupportedCameras();
5908     ASSERT_NE(cameras.size(), 0);
5909     sptr<CameraDevice> camera = cameras[0];
5910     ASSERT_NE(camera, nullptr);
5911     sptr<CameraOutputCapability> capability = cameraManager->GetSupportedOutputCapability(camera, sceneMode);
5912     ASSERT_NE(capability, nullptr);
5913     SelectProfiles wanted;
5914     wanted.preview.size_ = {640, 480};
5915     wanted.preview.format_ = CAMERA_FORMAT_YUV_420_SP;
5916     wanted.photo.size_ = {640, 480};
5917     wanted.photo.format_ = CAMERA_FORMAT_JPEG;
5918     wanted.video.size_ = {640, 480};
5919     wanted.video.format_ = CAMERA_FORMAT_YUV_420_SP;
5920     wanted.video.framerates_ = {30, 30};
5921     sptr<CaptureSession> captureSession = cameraManager->CreateCaptureSession(sceneMode);
5922     ASSERT_NE(captureSession, nullptr);
5923     sptr<TimeLapsePhotoSession> session = reinterpret_cast<TimeLapsePhotoSession*>(captureSession.GetRefPtr());
5924     ASSERT_NE(session, nullptr);
5925     int32_t status = session->BeginConfig();
5926     EXPECT_EQ(status, 0);
5927     sptr<CaptureInput> input = cameraManager->CreateCameraInput(camera);
5928     ASSERT_NE(input, nullptr);
5929     status = input->Open();
5930     EXPECT_EQ(status, 0);
5931     status = session->AddInput(input);
5932     EXPECT_EQ(status, 0);
5933     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(wanted.preview);
5934     ASSERT_NE(previewOutput, nullptr);
5935     status = session->AddOutput(previewOutput);
5936     EXPECT_EQ(status, 0);
5937     sptr<CaptureOutput> photoOutput = CreatePhotoOutput(wanted.photo);
5938     ASSERT_NE(photoOutput, nullptr);
5939     status = session->AddOutput(photoOutput);
5940     EXPECT_EQ(status, 0);
5941     status = session->CommitConfig();
5942     EXPECT_EQ(status, 0);
5943     class ExposureInfoCallbackMock : public ExposureInfoCallback {
5944     public:
OnExposureInfoChanged(ExposureInfo info)5945         void OnExposureInfoChanged(ExposureInfo info) override
5946         {
5947             EXPECT_EQ(info.exposureDurationValue, 1);
5948         }
5949     };
5950     session->SetExposureInfoCallback(make_shared<ExposureInfoCallbackMock>());
5951     static const camera_rational_t r = {
5952         .denominator = 1000000,
5953         .numerator = 1,
5954     };
5955     auto meta = make_shared<OHOS::Camera::CameraMetadata>(10, 100);
5956     EXPECT_EQ(meta->addEntry(OHOS_STATUS_SENSOR_EXPOSURE_TIME, &r, 1), true);
5957     session->ProcessExposureChange(meta);
5958 
5959     class IsoInfoCallbackMock : public IsoInfoCallback {
5960     public:
OnIsoInfoChanged(IsoInfo info)5961         void OnIsoInfoChanged(IsoInfo info) override
5962         {
5963             EXPECT_EQ(info.isoValue, 1);
5964         }
5965     };
5966     session->SetIsoInfoCallback(make_shared<IsoInfoCallbackMock>());
5967     static const uint32_t iso = 1;
5968     EXPECT_EQ(meta->addEntry(OHOS_STATUS_ISO_VALUE, &iso, 1), true);
5969     session->ProcessIsoInfoChange(meta);
5970 
5971     static const uint32_t lumination = 256;
5972     class LuminationInfoCallbackMock : public LuminationInfoCallback {
5973     public:
OnLuminationInfoChanged(LuminationInfo info)5974         void OnLuminationInfoChanged(LuminationInfo info) override
5975         {
5976             EXPECT_EQ((int32_t)info.luminationValue, 1);
5977         }
5978     };
5979     session->SetLuminationInfoCallback(make_shared<LuminationInfoCallbackMock>());
5980     EXPECT_EQ(meta->addEntry(OHOS_STATUS_ALGO_MEAN_Y, &lumination, 1), true);
5981     session->ProcessLuminationChange(meta);
5982 
5983     static const int32_t value = 1;
5984     class TryAEInfoCallbackMock : public TryAEInfoCallback {
5985     public:
OnTryAEInfoChanged(TryAEInfo info)5986         void OnTryAEInfoChanged(TryAEInfo info) override
5987         {
5988             EXPECT_EQ(info.isTryAEDone, true);
5989             EXPECT_EQ(info.isTryAEHintNeeded, true);
5990             EXPECT_EQ(info.previewType, TimeLapsePreviewType::DARK);
5991             EXPECT_EQ(info.captureInterval, 1);
5992         }
5993     };
5994     session->SetTryAEInfoCallback(make_shared<TryAEInfoCallbackMock>());
5995     EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_TRYAE_DONE, &value, 1), true);
5996     EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_TRYAE_HINT, &value, 1), true);
5997     EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_PREVIEW_TYPE, &value, 1), true);
5998     EXPECT_EQ(meta->addEntry(OHOS_STATUS_TIME_LAPSE_CAPTURE_INTERVAL, &value, 1), true);
5999     session->ProcessSetTryAEChange(meta);
6000 
6001     EXPECT_EQ(meta->addEntry(OHOS_CAMERA_MACRO_STATUS, &value, 1), true);
6002     session->ProcessPhysicalCameraSwitch(meta);
6003 
6004     session->LockForControl();
6005     status = session->SetTimeLapseRecordState(TimeLapseRecordState::RECORDING);
6006     session->UnlockForControl();
6007     EXPECT_EQ(status, 0);
6008     session->LockForControl();
6009     status = session->SetTimeLapsePreviewType(TimeLapsePreviewType::DARK);
6010     session->UnlockForControl();
6011     EXPECT_EQ(status, 0);
6012     session->LockForControl();
6013     status = session->SetExposureHintMode(ExposureHintMode::EXPOSURE_HINT_MODE_OFF);
6014     session->UnlockForControl();
6015     EXPECT_EQ(status, 0);
6016 
6017     vector<int32_t> wbRange;
6018     status = session->GetWhiteBalanceRange(wbRange);
6019     EXPECT_EQ(status, 0);
6020     if (!wbRange.empty()) {
6021         session->LockForControl();
6022         status = session->SetWhiteBalance(wbRange[0]);
6023         session->UnlockForControl();
6024         EXPECT_EQ(status, 0);
6025         int32_t wb;
6026         status = session->GetWhiteBalance(wb);
6027         EXPECT_EQ(status, 0);
6028         EXPECT_EQ(wb, wbRange[0]);
6029     }
6030     session->Release();
6031 }
6032 
6033 /*
6034  * Feature: Framework
6035  * Function: Test photo session with photo output
6036  * SubFunction: NA
6037  * FunctionPoints: NA
6038  * EnvConditions: NA
6039  * CaseDescription: Test can add photo output into photo session
6040  */
6041 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_001, TestSize.Level0)
6042 {
6043     if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
6044         return;
6045     }
6046 
6047     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::CAPTURE);
6048     ASSERT_NE(outputCapability, nullptr);
6049     auto previewProfiles = outputCapability->GetPreviewProfiles();
6050     ASSERT_FALSE(previewProfiles.empty());
6051     auto photoProfiles = outputCapability->GetPhotoProfiles();
6052     ASSERT_FALSE(photoProfiles.empty());
6053 
6054     auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
6055     auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
6056     ASSERT_NE(photoSession, nullptr);
6057     int32_t res = photoSession->BeginConfig();
6058     EXPECT_EQ(res, 0);
6059 
6060     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
6061     ASSERT_NE(input, nullptr);
6062     input->Open();
6063     res = photoSession->AddInput(input);
6064     EXPECT_EQ(res, 0);
6065     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
6066     ASSERT_NE(previewOutput, nullptr);
6067     EXPECT_TRUE(photoSession->CanAddOutput(previewOutput));
6068     res = photoSession->AddOutput(previewOutput);
6069     EXPECT_EQ(res, 0);
6070     sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
6071     ASSERT_NE(photoOutput, nullptr);
6072     EXPECT_TRUE(photoSession->CanAddOutput(photoOutput));
6073     res = photoSession->AddOutput(photoOutput);
6074     EXPECT_EQ(res, 0);
6075 
6076     res = photoSession->CommitConfig();
6077     EXPECT_EQ(res, 0);
6078     res = photoSession->Start();
6079     EXPECT_EQ(res, 0);
6080     sleep(WAIT_TIME_AFTER_START);
6081     res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
6082     EXPECT_EQ(res, 0);
6083     sleep(WAIT_TIME_AFTER_CAPTURE);
6084     res = photoSession->Stop();
6085     EXPECT_EQ(res, 0);
6086     res = photoSession->Release();
6087     EXPECT_EQ(res, 0);
6088 }
6089 
6090 /*
6091  * Feature: Framework
6092  * Function: Test photo session with video output
6093  * SubFunction: NA
6094  * FunctionPoints: NA
6095  * EnvConditions: NA
6096  * CaseDescription: Test can not add video output into photo session
6097  */
6098 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_002, TestSize.Level0)
6099 {
6100     if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
6101         return;
6102     }
6103 
6104     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::CAPTURE);
6105     ASSERT_NE(outputCapability, nullptr);
6106     auto previewProfiles = outputCapability->GetPreviewProfiles();
6107     ASSERT_FALSE(previewProfiles.empty());
6108     auto videoProfiles = outputCapability->GetVideoProfiles();
6109     ASSERT_TRUE(videoProfiles.empty());
6110     auto outputCapabilityBase = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::VIDEO);
6111     ASSERT_NE(outputCapabilityBase, nullptr);
6112     auto videoProfilesBase = outputCapabilityBase->GetVideoProfiles();
6113     ASSERT_FALSE(videoProfilesBase.empty());
6114 
6115     auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
6116     auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
6117     ASSERT_NE(photoSession, nullptr);
6118     int32_t res = photoSession->BeginConfig();
6119     EXPECT_EQ(res, 0);
6120 
6121     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
6122     ASSERT_NE(input, nullptr);
6123     input->Open();
6124     res = photoSession->AddInput(input);
6125     EXPECT_EQ(res, 0);
6126     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
6127     ASSERT_NE(previewOutput, nullptr);
6128     EXPECT_TRUE(photoSession->CanAddOutput(previewOutput));
6129     res = photoSession->AddOutput(previewOutput);
6130     EXPECT_EQ(res, 0);
6131     sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfilesBase[0]);
6132     ASSERT_NE(videoOutput, nullptr);
6133     EXPECT_FALSE(photoSession->CanAddOutput(videoOutput));
6134 }
6135 
6136 /*
6137  * Feature: Framework
6138  * Function: Test photo session set frame rate range
6139  * SubFunction: NA
6140  * FunctionPoints: NA
6141  * EnvConditions: NA
6142  * CaseDescription: Test can set frame rate range into photo session
6143  */
6144 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_003, TestSize.Level0)
6145 {
6146     if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
6147         return;
6148     }
6149 
6150     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::CAPTURE);
6151     ASSERT_NE(outputCapability, nullptr);
6152     auto previewProfiles = outputCapability->GetPreviewProfiles();
6153     ASSERT_FALSE(previewProfiles.empty());
6154     auto photoProfiles = outputCapability->GetPhotoProfiles();
6155     ASSERT_FALSE(photoProfiles.empty());
6156 
6157     auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
6158     auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
6159     ASSERT_NE(photoSession, nullptr);
6160     int32_t res = photoSession->BeginConfig();
6161     EXPECT_EQ(res, 0);
6162 
6163     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
6164     ASSERT_NE(input, nullptr);
6165     input->Open();
6166     res = photoSession->AddInput(input);
6167     EXPECT_EQ(res, 0);
6168     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
6169     ASSERT_NE(previewOutput, nullptr);
6170     EXPECT_TRUE(photoSession->CanAddOutput(previewOutput));
6171     res = photoSession->AddOutput(previewOutput);
6172     EXPECT_EQ(res, 0);
6173     sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
6174     ASSERT_NE(photoOutput, nullptr);
6175     EXPECT_TRUE(photoSession->CanAddOutput(photoOutput));
6176     res = photoSession->AddOutput(photoOutput);
6177     EXPECT_EQ(res, 0);
6178 
6179     res = photoSession->CommitConfig();
6180     EXPECT_EQ(res, 0);
6181     res = photoSession->Start();
6182     EXPECT_EQ(res, 0);
6183     sleep(WAIT_TIME_AFTER_START);
6184 
6185     std::vector<std::vector<int32_t>> frameRateArray = ((sptr<PreviewOutput>&)previewOutput)->GetSupportedFrameRates();
6186     ASSERT_NE(frameRateArray.size(), 0);
6187     std::vector<int32_t> frameRateRange = ((sptr<PreviewOutput>&)previewOutput)->GetFrameRateRange();
6188     ASSERT_NE(frameRateRange.size(), 0);
6189     res = ((sptr<PreviewOutput>&)previewOutput)->canSetFrameRateRange(DEFAULT_MIN_FRAME_RATE, DEFAULT_MAX_FRAME_RATE);
6190     EXPECT_EQ(res, 0);
6191     ((sptr<PreviewOutput>&)previewOutput)->SetFrameRateRange(DEFAULT_MIN_FRAME_RATE, DEFAULT_MAX_FRAME_RATE);
6192     frameRateRange = ((sptr<PreviewOutput>&)previewOutput)->GetFrameRateRange();
6193     ASSERT_NE(frameRateRange.size(), 0);
6194     EXPECT_EQ(frameRateRange[0], DEFAULT_MIN_FRAME_RATE);
6195     EXPECT_EQ(frameRateRange[1], DEFAULT_MAX_FRAME_RATE);
6196 
6197     res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
6198     EXPECT_EQ(res, 0);
6199     sleep(WAIT_TIME_AFTER_CAPTURE);
6200     res = photoSession->Stop();
6201     EXPECT_EQ(res, 0);
6202     res = photoSession->Release();
6203     EXPECT_EQ(res, 0);
6204 }
6205 
6206 /*
6207  * Feature: Framework
6208  * Function: Test photo session preconfig
6209  * SubFunction: NA
6210  * FunctionPoints: NA
6211  * EnvConditions: NA
6212  * CaseDescription: Test can preconfig photo session with PRECONFIG_720P, UNSPECIFIED while supported
6213  */
6214 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_004, TestSize.Level0)
6215 {
6216     if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
6217         return;
6218     }
6219 
6220     auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
6221     auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
6222     ASSERT_NE(photoSession, nullptr);
6223     if (photoSession->CanPreconfig(PreconfigType::PRECONFIG_720P, ProfileSizeRatio::UNSPECIFIED)) {
6224         int32_t res = photoSession->Preconfig(PreconfigType::PRECONFIG_720P, ProfileSizeRatio::UNSPECIFIED);
6225         EXPECT_EQ(res, 0);
6226         res = photoSession->BeginConfig();
6227         EXPECT_EQ(res, 0);
6228 
6229         sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
6230         ASSERT_NE(input, nullptr);
6231         input->Open();
6232         res = photoSession->AddInput(input);
6233         EXPECT_EQ(res, 0);
6234 
6235         sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
6236         sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
6237         sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
6238         sptr<PreviewOutput> previewOutput = nullptr;
6239         res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
6240         EXPECT_EQ(res, 0);
6241         sptr<CaptureOutput> capturePreviewOutput = previewOutput;
6242         EXPECT_TRUE(photoSession->CanAddOutput(capturePreviewOutput));
6243         res = photoSession->AddOutput(capturePreviewOutput);
6244         EXPECT_EQ(res, 0);
6245         sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
6246         sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
6247         sptr<PhotoOutput> photoOutput = nullptr;
6248         res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
6249         EXPECT_EQ(res, 0);
6250         sptr<CaptureOutput> capturePhotoOutput = photoOutput;
6251         EXPECT_TRUE(photoSession->CanAddOutput(capturePhotoOutput));
6252         res = photoSession->AddOutput(capturePhotoOutput);
6253         EXPECT_EQ(res, 0);
6254 
6255         res = photoSession->CommitConfig();
6256         EXPECT_EQ(res, 0);
6257         res = photoSession->Start();
6258         EXPECT_EQ(res, 0);
6259         sleep(WAIT_TIME_AFTER_START);
6260         res = photoOutput->Capture();
6261         EXPECT_EQ(res, 0);
6262         res = photoSession->Stop();
6263         EXPECT_EQ(res, 0);
6264     }
6265     EXPECT_EQ(photoSession->Release(), 0);
6266 }
6267 
6268 /*
6269  * Feature: Framework
6270  * Function: Test photo session preconfig
6271  * SubFunction: NA
6272  * FunctionPoints: NA
6273  * EnvConditions: NA
6274  * CaseDescription: Test can preconfig photo session with PRECONFIG_720P, RATIO_1_1 while supported
6275  */
6276 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_005, TestSize.Level0)
6277 {
6278     if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
6279         return;
6280     }
6281 
6282     auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
6283     auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
6284     ASSERT_NE(photoSession, nullptr);
6285     if (photoSession->CanPreconfig(PreconfigType::PRECONFIG_720P, ProfileSizeRatio::RATIO_1_1)) {
6286         int32_t res = photoSession->Preconfig(PreconfigType::PRECONFIG_720P, ProfileSizeRatio::RATIO_1_1);
6287         EXPECT_EQ(res, 0);
6288         res = photoSession->BeginConfig();
6289         EXPECT_EQ(res, 0);
6290 
6291         sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
6292         ASSERT_NE(input, nullptr);
6293         input->Open();
6294         res = photoSession->AddInput(input);
6295         EXPECT_EQ(res, 0);
6296 
6297         sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
6298         sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
6299         sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
6300         sptr<PreviewOutput> previewOutput = nullptr;
6301         res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
6302         EXPECT_EQ(res, 0);
6303         sptr<CaptureOutput> capturePreviewOutput = previewOutput;
6304         EXPECT_TRUE(photoSession->CanAddOutput(capturePreviewOutput));
6305         res = photoSession->AddOutput(capturePreviewOutput);
6306         EXPECT_EQ(res, 0);
6307         sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
6308         sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
6309         sptr<PhotoOutput> photoOutput = nullptr;
6310         res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
6311         EXPECT_EQ(res, 0);
6312         sptr<CaptureOutput> capturePhotoOutput = photoOutput;
6313         EXPECT_TRUE(photoSession->CanAddOutput(capturePhotoOutput));
6314         res = photoSession->AddOutput(capturePhotoOutput);
6315         EXPECT_EQ(res, 0);
6316 
6317         res = photoSession->CommitConfig();
6318         EXPECT_EQ(res, 0);
6319         res = photoSession->Start();
6320         EXPECT_EQ(res, 0);
6321         sleep(WAIT_TIME_AFTER_START);
6322         res = photoOutput->Capture();
6323         EXPECT_EQ(res, 0);
6324         res = photoSession->Stop();
6325         EXPECT_EQ(res, 0);
6326     }
6327     EXPECT_EQ(photoSession->Release(), 0);
6328 }
6329 
6330 /*
6331  * Feature: Framework
6332  * Function: Test photo session preconfig
6333  * SubFunction: NA
6334  * FunctionPoints: NA
6335  * EnvConditions: NA
6336  * CaseDescription: Test can preconfig photo session with PRECONFIG_720P, RATIO_4_3 while supported
6337  */
6338 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_006, TestSize.Level0)
6339 {
6340     if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
6341         return;
6342     }
6343 
6344     auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
6345     auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
6346     ASSERT_NE(photoSession, nullptr);
6347     if (photoSession->CanPreconfig(PreconfigType::PRECONFIG_720P, ProfileSizeRatio::RATIO_4_3)) {
6348         int32_t res = photoSession->Preconfig(PreconfigType::PRECONFIG_720P, ProfileSizeRatio::RATIO_4_3);
6349         EXPECT_EQ(res, 0);
6350         res = photoSession->BeginConfig();
6351         EXPECT_EQ(res, 0);
6352 
6353         sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
6354         ASSERT_NE(input, nullptr);
6355         input->Open();
6356         res = photoSession->AddInput(input);
6357         EXPECT_EQ(res, 0);
6358 
6359         sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
6360         sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
6361         sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
6362         sptr<PreviewOutput> previewOutput = nullptr;
6363         res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
6364         EXPECT_EQ(res, 0);
6365         sptr<CaptureOutput> capturePreviewOutput = previewOutput;
6366         EXPECT_TRUE(photoSession->CanAddOutput(capturePreviewOutput));
6367         res = photoSession->AddOutput(capturePreviewOutput);
6368         EXPECT_EQ(res, 0);
6369         sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
6370         sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
6371         sptr<PhotoOutput> photoOutput = nullptr;
6372         res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
6373         EXPECT_EQ(res, 0);
6374         sptr<CaptureOutput> capturePhotoOutput = photoOutput;
6375         EXPECT_TRUE(photoSession->CanAddOutput(capturePhotoOutput));
6376         res = photoSession->AddOutput(capturePhotoOutput);
6377         EXPECT_EQ(res, 0);
6378 
6379         res = photoSession->CommitConfig();
6380         EXPECT_EQ(res, 0);
6381         res = photoSession->Start();
6382         EXPECT_EQ(res, 0);
6383         sleep(WAIT_TIME_AFTER_START);
6384         res = photoOutput->Capture();
6385         EXPECT_EQ(res, 0);
6386         res = photoSession->Stop();
6387         EXPECT_EQ(res, 0);
6388     }
6389     EXPECT_EQ(photoSession->Release(), 0);
6390 }
6391 
6392 /*
6393  * Feature: Framework
6394  * Function: Test photo session preconfig
6395  * SubFunction: NA
6396  * FunctionPoints: NA
6397  * EnvConditions: NA
6398  * CaseDescription: Test can preconfig photo session with PRECONFIG_720P, RATIO_16_9 while supported
6399  */
6400 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_007, TestSize.Level0)
6401 {
6402     if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
6403         return;
6404     }
6405 
6406     auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
6407     auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
6408     ASSERT_NE(photoSession, nullptr);
6409     if (photoSession->CanPreconfig(PreconfigType::PRECONFIG_720P, ProfileSizeRatio::RATIO_16_9)) {
6410         int32_t res = photoSession->Preconfig(PreconfigType::PRECONFIG_720P, ProfileSizeRatio::RATIO_16_9);
6411         EXPECT_EQ(res, 0);
6412         res = photoSession->BeginConfig();
6413         EXPECT_EQ(res, 0);
6414 
6415         sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
6416         ASSERT_NE(input, nullptr);
6417         input->Open();
6418         res = photoSession->AddInput(input);
6419         EXPECT_EQ(res, 0);
6420 
6421         sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
6422         sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
6423         sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
6424         sptr<PreviewOutput> previewOutput = nullptr;
6425         res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
6426         EXPECT_EQ(res, 0);
6427         sptr<CaptureOutput> capturePreviewOutput = previewOutput;
6428         EXPECT_TRUE(photoSession->CanAddOutput(capturePreviewOutput));
6429         res = photoSession->AddOutput(capturePreviewOutput);
6430         EXPECT_EQ(res, 0);
6431         sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
6432         sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
6433         sptr<PhotoOutput> photoOutput = nullptr;
6434         res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
6435         EXPECT_EQ(res, 0);
6436         sptr<CaptureOutput> capturePhotoOutput = photoOutput;
6437         EXPECT_TRUE(photoSession->CanAddOutput(capturePhotoOutput));
6438         res = photoSession->AddOutput(capturePhotoOutput);
6439         EXPECT_EQ(res, 0);
6440 
6441         res = photoSession->CommitConfig();
6442         EXPECT_EQ(res, 0);
6443         res = photoSession->Start();
6444         EXPECT_EQ(res, 0);
6445         sleep(WAIT_TIME_AFTER_START);
6446         res = photoOutput->Capture();
6447         EXPECT_EQ(res, 0);
6448         res = photoSession->Stop();
6449         EXPECT_EQ(res, 0);
6450     }
6451     EXPECT_EQ(photoSession->Release(), 0);
6452 }
6453 
6454 /*
6455  * Feature: Framework
6456  * Function: Test photo session preconfig
6457  * SubFunction: NA
6458  * FunctionPoints: NA
6459  * EnvConditions: NA
6460  * CaseDescription: Test can preconfig photo session with PRECONFIG_1080P, UNSPECIFIED while supported
6461  */
6462 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_008, TestSize.Level0)
6463 {
6464     if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
6465         return;
6466     }
6467 
6468     auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
6469     auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
6470     ASSERT_NE(photoSession, nullptr);
6471     if (photoSession->CanPreconfig(PreconfigType::PRECONFIG_1080P, ProfileSizeRatio::UNSPECIFIED)) {
6472         int32_t res = photoSession->Preconfig(PreconfigType::PRECONFIG_1080P, ProfileSizeRatio::UNSPECIFIED);
6473         EXPECT_EQ(res, 0);
6474         res = photoSession->BeginConfig();
6475         EXPECT_EQ(res, 0);
6476 
6477         sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
6478         ASSERT_NE(input, nullptr);
6479         input->Open();
6480         res = photoSession->AddInput(input);
6481         EXPECT_EQ(res, 0);
6482 
6483         sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
6484         sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
6485         sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
6486         sptr<PreviewOutput> previewOutput = nullptr;
6487         res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
6488         EXPECT_EQ(res, 0);
6489         sptr<CaptureOutput> capturePreviewOutput = previewOutput;
6490         EXPECT_TRUE(photoSession->CanAddOutput(capturePreviewOutput));
6491         res = photoSession->AddOutput(capturePreviewOutput);
6492         EXPECT_EQ(res, 0);
6493         sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
6494         sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
6495         sptr<PhotoOutput> photoOutput = nullptr;
6496         res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
6497         EXPECT_EQ(res, 0);
6498         sptr<CaptureOutput> capturePhotoOutput = photoOutput;
6499         EXPECT_TRUE(photoSession->CanAddOutput(capturePhotoOutput));
6500         res = photoSession->AddOutput(capturePhotoOutput);
6501         EXPECT_EQ(res, 0);
6502 
6503         res = photoSession->CommitConfig();
6504         EXPECT_EQ(res, 0);
6505         res = photoSession->Start();
6506         EXPECT_EQ(res, 0);
6507         sleep(WAIT_TIME_AFTER_START);
6508         res = photoOutput->Capture();
6509         EXPECT_EQ(res, 0);
6510         res = photoSession->Stop();
6511         EXPECT_EQ(res, 0);
6512     }
6513     EXPECT_EQ(photoSession->Release(), 0);
6514 }
6515 
6516 /*
6517  * Feature: Framework
6518  * Function: Test photo session preconfig
6519  * SubFunction: NA
6520  * FunctionPoints: NA
6521  * EnvConditions: NA
6522  * CaseDescription: Test can preconfig photo session with PRECONFIG_1080P, RATIO_1_1 while supported
6523  */
6524 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_009, TestSize.Level0)
6525 {
6526     if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
6527         return;
6528     }
6529 
6530     auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
6531     auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
6532     ASSERT_NE(photoSession, nullptr);
6533     if (photoSession->CanPreconfig(PreconfigType::PRECONFIG_1080P, ProfileSizeRatio::RATIO_1_1)) {
6534         int32_t res = photoSession->Preconfig(PreconfigType::PRECONFIG_1080P, ProfileSizeRatio::RATIO_1_1);
6535         EXPECT_EQ(res, 0);
6536         res = photoSession->BeginConfig();
6537         EXPECT_EQ(res, 0);
6538 
6539         sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
6540         ASSERT_NE(input, nullptr);
6541         input->Open();
6542         res = photoSession->AddInput(input);
6543         EXPECT_EQ(res, 0);
6544 
6545         sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
6546         sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
6547         sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
6548         sptr<PreviewOutput> previewOutput = nullptr;
6549         res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
6550         EXPECT_EQ(res, 0);
6551         sptr<CaptureOutput> capturePreviewOutput = previewOutput;
6552         EXPECT_TRUE(photoSession->CanAddOutput(capturePreviewOutput));
6553         res = photoSession->AddOutput(capturePreviewOutput);
6554         EXPECT_EQ(res, 0);
6555         sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
6556         sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
6557         sptr<PhotoOutput> photoOutput = nullptr;
6558         res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
6559         EXPECT_EQ(res, 0);
6560         sptr<CaptureOutput> capturePhotoOutput = photoOutput;
6561         EXPECT_TRUE(photoSession->CanAddOutput(capturePhotoOutput));
6562         res = photoSession->AddOutput(capturePhotoOutput);
6563         EXPECT_EQ(res, 0);
6564 
6565         res = photoSession->CommitConfig();
6566         EXPECT_EQ(res, 0);
6567         res = photoSession->Start();
6568         EXPECT_EQ(res, 0);
6569         sleep(WAIT_TIME_AFTER_START);
6570         res = photoOutput->Capture();
6571         EXPECT_EQ(res, 0);
6572         res = photoSession->Stop();
6573         EXPECT_EQ(res, 0);
6574     }
6575     EXPECT_EQ(photoSession->Release(), 0);
6576 }
6577 
6578 /*
6579  * Feature: Framework
6580  * Function: Test photo session preconfig
6581  * SubFunction: NA
6582  * FunctionPoints: NA
6583  * EnvConditions: NA
6584  * CaseDescription: Test can preconfig photo session with PRECONFIG_1080P, RATIO_4_3 while supported
6585  */
6586 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_010, TestSize.Level0)
6587 {
6588     if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
6589         return;
6590     }
6591 
6592     auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
6593     auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
6594     ASSERT_NE(photoSession, nullptr);
6595     if (photoSession->CanPreconfig(PreconfigType::PRECONFIG_1080P, ProfileSizeRatio::RATIO_4_3)) {
6596         int32_t res = photoSession->Preconfig(PreconfigType::PRECONFIG_1080P, ProfileSizeRatio::RATIO_4_3);
6597         EXPECT_EQ(res, 0);
6598         res = photoSession->BeginConfig();
6599         EXPECT_EQ(res, 0);
6600 
6601         sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
6602         ASSERT_NE(input, nullptr);
6603         input->Open();
6604         res = photoSession->AddInput(input);
6605         EXPECT_EQ(res, 0);
6606 
6607         sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
6608         sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
6609         sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
6610         sptr<PreviewOutput> previewOutput = nullptr;
6611         res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
6612         EXPECT_EQ(res, 0);
6613         sptr<CaptureOutput> capturePreviewOutput = previewOutput;
6614         EXPECT_TRUE(photoSession->CanAddOutput(capturePreviewOutput));
6615         res = photoSession->AddOutput(capturePreviewOutput);
6616         EXPECT_EQ(res, 0);
6617         sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
6618         sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
6619         sptr<PhotoOutput> photoOutput = nullptr;
6620         res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
6621         EXPECT_EQ(res, 0);
6622         sptr<CaptureOutput> capturePhotoOutput = photoOutput;
6623         EXPECT_TRUE(photoSession->CanAddOutput(capturePhotoOutput));
6624         res = photoSession->AddOutput(capturePhotoOutput);
6625         EXPECT_EQ(res, 0);
6626 
6627         res = photoSession->CommitConfig();
6628         EXPECT_EQ(res, 0);
6629         res = photoSession->Start();
6630         EXPECT_EQ(res, 0);
6631         sleep(WAIT_TIME_AFTER_START);
6632         res = photoOutput->Capture();
6633         EXPECT_EQ(res, 0);
6634         res = photoSession->Stop();
6635         EXPECT_EQ(res, 0);
6636     }
6637     EXPECT_EQ(photoSession->Release(), 0);
6638 }
6639 
6640 /*
6641  * Feature: Framework
6642  * Function: Test photo session preconfig
6643  * SubFunction: NA
6644  * FunctionPoints: NA
6645  * EnvConditions: NA
6646  * CaseDescription: Test can preconfig photo session with PRECONFIG_1080P, RATIO_16_9 while supported
6647  */
6648 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_011, TestSize.Level0)
6649 {
6650     if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
6651         return;
6652     }
6653 
6654     auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
6655     auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
6656     ASSERT_NE(photoSession, nullptr);
6657     if (photoSession->CanPreconfig(PreconfigType::PRECONFIG_1080P, ProfileSizeRatio::RATIO_16_9)) {
6658         int32_t res = photoSession->Preconfig(PreconfigType::PRECONFIG_1080P, ProfileSizeRatio::RATIO_16_9);
6659         EXPECT_EQ(res, 0);
6660         res = photoSession->BeginConfig();
6661         EXPECT_EQ(res, 0);
6662 
6663         sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
6664         ASSERT_NE(input, nullptr);
6665         input->Open();
6666         res = photoSession->AddInput(input);
6667         EXPECT_EQ(res, 0);
6668 
6669         sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
6670         sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
6671         sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
6672         sptr<PreviewOutput> previewOutput = nullptr;
6673         res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
6674         EXPECT_EQ(res, 0);
6675         sptr<CaptureOutput> capturePreviewOutput = previewOutput;
6676         EXPECT_TRUE(photoSession->CanAddOutput(capturePreviewOutput));
6677         res = photoSession->AddOutput(capturePreviewOutput);
6678         EXPECT_EQ(res, 0);
6679         sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
6680         sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
6681         sptr<PhotoOutput> photoOutput = nullptr;
6682         res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
6683         EXPECT_EQ(res, 0);
6684         sptr<CaptureOutput> capturePhotoOutput = photoOutput;
6685         EXPECT_TRUE(photoSession->CanAddOutput(capturePhotoOutput));
6686         res = photoSession->AddOutput(capturePhotoOutput);
6687         EXPECT_EQ(res, 0);
6688 
6689         res = photoSession->CommitConfig();
6690         EXPECT_EQ(res, 0);
6691         res = photoSession->Start();
6692         EXPECT_EQ(res, 0);
6693         sleep(WAIT_TIME_AFTER_START);
6694         res = photoOutput->Capture();
6695         EXPECT_EQ(res, 0);
6696         res = photoSession->Stop();
6697         EXPECT_EQ(res, 0);
6698     }
6699     EXPECT_EQ(photoSession->Release(), 0);
6700 }
6701 
6702 /*
6703  * Feature: Framework
6704  * Function: Test photo session preconfig
6705  * SubFunction: NA
6706  * FunctionPoints: NA
6707  * EnvConditions: NA
6708  * CaseDescription: Test can preconfig photo session with PRECONFIG_4K, UNSPECIFIED while supported
6709  */
6710 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_012, TestSize.Level0)
6711 {
6712     if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
6713         return;
6714     }
6715 
6716     auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
6717     auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
6718     ASSERT_NE(photoSession, nullptr);
6719     if (photoSession->CanPreconfig(PreconfigType::PRECONFIG_4K, ProfileSizeRatio::UNSPECIFIED)) {
6720         int32_t res = photoSession->Preconfig(PreconfigType::PRECONFIG_4K, ProfileSizeRatio::UNSPECIFIED);
6721         EXPECT_EQ(res, 0);
6722         res = photoSession->BeginConfig();
6723         EXPECT_EQ(res, 0);
6724 
6725         sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
6726         ASSERT_NE(input, nullptr);
6727         input->Open();
6728         res = photoSession->AddInput(input);
6729         EXPECT_EQ(res, 0);
6730 
6731         sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
6732         sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
6733         sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
6734         sptr<PreviewOutput> previewOutput = nullptr;
6735         res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
6736         EXPECT_EQ(res, 0);
6737         sptr<CaptureOutput> capturePreviewOutput = previewOutput;
6738         EXPECT_TRUE(photoSession->CanAddOutput(capturePreviewOutput));
6739         res = photoSession->AddOutput(capturePreviewOutput);
6740         EXPECT_EQ(res, 0);
6741         sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
6742         sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
6743         sptr<PhotoOutput> photoOutput = nullptr;
6744         res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
6745         EXPECT_EQ(res, 0);
6746         sptr<CaptureOutput> capturePhotoOutput = photoOutput;
6747         EXPECT_TRUE(photoSession->CanAddOutput(capturePhotoOutput));
6748         res = photoSession->AddOutput(capturePhotoOutput);
6749         EXPECT_EQ(res, 0);
6750 
6751         res = photoSession->CommitConfig();
6752         EXPECT_EQ(res, 0);
6753         res = photoSession->Start();
6754         EXPECT_EQ(res, 0);
6755         sleep(WAIT_TIME_AFTER_START);
6756         res = photoOutput->Capture();
6757         EXPECT_EQ(res, 0);
6758         res = photoSession->Stop();
6759         EXPECT_EQ(res, 0);
6760     }
6761     EXPECT_EQ(photoSession->Release(), 0);
6762 }
6763 
6764 /*
6765  * Feature: Framework
6766  * Function: Test photo session preconfig
6767  * SubFunction: NA
6768  * FunctionPoints: NA
6769  * EnvConditions: NA
6770  * CaseDescription: Test can preconfig photo session with PRECONFIG_4K, RATIO_1_1 while supported
6771  */
6772 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_013, TestSize.Level0)
6773 {
6774     if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
6775         return;
6776     }
6777 
6778     auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
6779     auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
6780     ASSERT_NE(photoSession, nullptr);
6781     if (photoSession->CanPreconfig(PreconfigType::PRECONFIG_4K, ProfileSizeRatio::RATIO_1_1)) {
6782         int32_t res = photoSession->Preconfig(PreconfigType::PRECONFIG_4K, ProfileSizeRatio::RATIO_1_1);
6783         EXPECT_EQ(res, 0);
6784         res = photoSession->BeginConfig();
6785         EXPECT_EQ(res, 0);
6786 
6787         sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
6788         ASSERT_NE(input, nullptr);
6789         input->Open();
6790         res = photoSession->AddInput(input);
6791         EXPECT_EQ(res, 0);
6792 
6793         sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
6794         sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
6795         sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
6796         sptr<PreviewOutput> previewOutput = nullptr;
6797         res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
6798         EXPECT_EQ(res, 0);
6799         sptr<CaptureOutput> capturePreviewOutput = previewOutput;
6800         EXPECT_TRUE(photoSession->CanAddOutput(capturePreviewOutput));
6801         res = photoSession->AddOutput(capturePreviewOutput);
6802         EXPECT_EQ(res, 0);
6803         sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
6804         sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
6805         sptr<PhotoOutput> photoOutput = nullptr;
6806         res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
6807         EXPECT_EQ(res, 0);
6808         sptr<CaptureOutput> capturePhotoOutput = photoOutput;
6809         EXPECT_TRUE(photoSession->CanAddOutput(capturePhotoOutput));
6810         res = photoSession->AddOutput(capturePhotoOutput);
6811         EXPECT_EQ(res, 0);
6812 
6813         res = photoSession->CommitConfig();
6814         EXPECT_EQ(res, 0);
6815         res = photoSession->Start();
6816         EXPECT_EQ(res, 0);
6817         sleep(WAIT_TIME_AFTER_START);
6818         res = photoOutput->Capture();
6819         EXPECT_EQ(res, 0);
6820         res = photoSession->Stop();
6821         EXPECT_EQ(res, 0);
6822     }
6823     EXPECT_EQ(photoSession->Release(), 0);
6824 }
6825 
6826 /*
6827  * Feature: Framework
6828  * Function: Test photo session preconfig
6829  * SubFunction: NA
6830  * FunctionPoints: NA
6831  * EnvConditions: NA
6832  * CaseDescription: Test can preconfig photo session with PRECONFIG_4K, RATIO_4_3 while supported
6833  */
6834 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_014, TestSize.Level0)
6835 {
6836     if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
6837         return;
6838     }
6839 
6840     auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
6841     auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
6842     ASSERT_NE(photoSession, nullptr);
6843     if (photoSession->CanPreconfig(PreconfigType::PRECONFIG_4K, ProfileSizeRatio::RATIO_4_3)) {
6844         int32_t res = photoSession->Preconfig(PreconfigType::PRECONFIG_4K, ProfileSizeRatio::RATIO_4_3);
6845         EXPECT_EQ(res, 0);
6846         res = photoSession->BeginConfig();
6847         EXPECT_EQ(res, 0);
6848 
6849         sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
6850         ASSERT_NE(input, nullptr);
6851         input->Open();
6852         res = photoSession->AddInput(input);
6853         EXPECT_EQ(res, 0);
6854 
6855         sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
6856         sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
6857         sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
6858         sptr<PreviewOutput> previewOutput = nullptr;
6859         res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
6860         EXPECT_EQ(res, 0);
6861         sptr<CaptureOutput> capturePreviewOutput = previewOutput;
6862         EXPECT_TRUE(photoSession->CanAddOutput(capturePreviewOutput));
6863         res = photoSession->AddOutput(capturePreviewOutput);
6864         EXPECT_EQ(res, 0);
6865         sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
6866         sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
6867         sptr<PhotoOutput> photoOutput = nullptr;
6868         res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
6869         EXPECT_EQ(res, 0);
6870         sptr<CaptureOutput> capturePhotoOutput = photoOutput;
6871         EXPECT_TRUE(photoSession->CanAddOutput(capturePhotoOutput));
6872         res = photoSession->AddOutput(capturePhotoOutput);
6873         EXPECT_EQ(res, 0);
6874 
6875         res = photoSession->CommitConfig();
6876         EXPECT_EQ(res, 0);
6877         res = photoSession->Start();
6878         EXPECT_EQ(res, 0);
6879         sleep(WAIT_TIME_AFTER_START);
6880         res = photoOutput->Capture();
6881         EXPECT_EQ(res, 0);
6882         res = photoSession->Stop();
6883         EXPECT_EQ(res, 0);
6884     }
6885     EXPECT_EQ(photoSession->Release(), 0);
6886 }
6887 
6888 /*
6889  * Feature: Framework
6890  * Function: Test photo session preconfig
6891  * SubFunction: NA
6892  * FunctionPoints: NA
6893  * EnvConditions: NA
6894  * CaseDescription: Test can preconfig photo session with PRECONFIG_4K, RATIO_16_9 while supported
6895  */
6896 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_015, TestSize.Level0)
6897 {
6898     if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
6899         return;
6900     }
6901 
6902     auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
6903     auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
6904     ASSERT_NE(photoSession, nullptr);
6905     if (photoSession->CanPreconfig(PreconfigType::PRECONFIG_4K, ProfileSizeRatio::RATIO_16_9)) {
6906         int32_t res = photoSession->Preconfig(PreconfigType::PRECONFIG_4K, ProfileSizeRatio::RATIO_16_9);
6907         EXPECT_EQ(res, 0);
6908         res = photoSession->BeginConfig();
6909         EXPECT_EQ(res, 0);
6910 
6911         sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
6912         ASSERT_NE(input, nullptr);
6913         input->Open();
6914         res = photoSession->AddInput(input);
6915         EXPECT_EQ(res, 0);
6916 
6917         sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
6918         sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
6919         sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
6920         sptr<PreviewOutput> previewOutput = nullptr;
6921         res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
6922         EXPECT_EQ(res, 0);
6923         sptr<CaptureOutput> capturePreviewOutput = previewOutput;
6924         EXPECT_TRUE(photoSession->CanAddOutput(capturePreviewOutput));
6925         res = photoSession->AddOutput(capturePreviewOutput);
6926         EXPECT_EQ(res, 0);
6927         sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
6928         sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
6929         sptr<PhotoOutput> photoOutput = nullptr;
6930         res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
6931         EXPECT_EQ(res, 0);
6932         sptr<CaptureOutput> capturePhotoOutput = photoOutput;
6933         EXPECT_TRUE(photoSession->CanAddOutput(capturePhotoOutput));
6934         res = photoSession->AddOutput(capturePhotoOutput);
6935         EXPECT_EQ(res, 0);
6936 
6937         res = photoSession->CommitConfig();
6938         EXPECT_EQ(res, 0);
6939         res = photoSession->Start();
6940         EXPECT_EQ(res, 0);
6941         sleep(WAIT_TIME_AFTER_START);
6942         res = photoOutput->Capture();
6943         EXPECT_EQ(res, 0);
6944         res = photoSession->Stop();
6945         EXPECT_EQ(res, 0);
6946     }
6947     EXPECT_EQ(photoSession->Release(), 0);
6948 }
6949 
6950 /*
6951  * Feature: Framework
6952  * Function: Test photo session preconfig
6953  * SubFunction: NA
6954  * FunctionPoints: NA
6955  * EnvConditions: NA
6956  * CaseDescription: Test can preconfig photo session with PRECONFIG_HIGH_QUALITY, UNSPECIFIED while supported
6957  */
6958 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_016, TestSize.Level0)
6959 {
6960     if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
6961         return;
6962     }
6963 
6964     auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
6965     auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
6966     ASSERT_NE(photoSession, nullptr);
6967     if (photoSession->CanPreconfig(PreconfigType::PRECONFIG_HIGH_QUALITY, ProfileSizeRatio::UNSPECIFIED)) {
6968         int32_t res = photoSession->Preconfig(PreconfigType::PRECONFIG_HIGH_QUALITY, ProfileSizeRatio::UNSPECIFIED);
6969         EXPECT_EQ(res, 0);
6970         res = photoSession->BeginConfig();
6971         EXPECT_EQ(res, 0);
6972 
6973         sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
6974         ASSERT_NE(input, nullptr);
6975         input->Open();
6976         res = photoSession->AddInput(input);
6977         EXPECT_EQ(res, 0);
6978 
6979         sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
6980         sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
6981         sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
6982         sptr<PreviewOutput> previewOutput = nullptr;
6983         res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
6984         EXPECT_EQ(res, 0);
6985         sptr<CaptureOutput> capturePreviewOutput = previewOutput;
6986         EXPECT_TRUE(photoSession->CanAddOutput(capturePreviewOutput));
6987         res = photoSession->AddOutput(capturePreviewOutput);
6988         EXPECT_EQ(res, 0);
6989         sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
6990         sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
6991         sptr<PhotoOutput> photoOutput = nullptr;
6992         res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
6993         EXPECT_EQ(res, 0);
6994         sptr<CaptureOutput> capturePhotoOutput = photoOutput;
6995         EXPECT_TRUE(photoSession->CanAddOutput(capturePhotoOutput));
6996         res = photoSession->AddOutput(capturePhotoOutput);
6997         EXPECT_EQ(res, 0);
6998 
6999         res = photoSession->CommitConfig();
7000         EXPECT_EQ(res, 0);
7001         res = photoSession->Start();
7002         EXPECT_EQ(res, 0);
7003         sleep(WAIT_TIME_AFTER_START);
7004         res = photoOutput->Capture();
7005         EXPECT_EQ(res, 0);
7006         res = photoSession->Stop();
7007         EXPECT_EQ(res, 0);
7008     }
7009     EXPECT_EQ(photoSession->Release(), 0);
7010 }
7011 
7012 /*
7013  * Feature: Framework
7014  * Function: Test photo session preconfig
7015  * SubFunction: NA
7016  * FunctionPoints: NA
7017  * EnvConditions: NA
7018  * CaseDescription: Test can preconfig photo session with PRECONFIG_HIGH_QUALITY, RATIO_1_1 while supported
7019  */
7020 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_017, TestSize.Level0)
7021 {
7022     if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
7023         return;
7024     }
7025 
7026     auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
7027     auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
7028     ASSERT_NE(photoSession, nullptr);
7029     if (photoSession->CanPreconfig(PreconfigType::PRECONFIG_HIGH_QUALITY, ProfileSizeRatio::RATIO_1_1)) {
7030         int32_t res = photoSession->Preconfig(PreconfigType::PRECONFIG_HIGH_QUALITY, ProfileSizeRatio::RATIO_1_1);
7031         EXPECT_EQ(res, 0);
7032         res = photoSession->BeginConfig();
7033         EXPECT_EQ(res, 0);
7034 
7035         sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
7036         ASSERT_NE(input, nullptr);
7037         input->Open();
7038         res = photoSession->AddInput(input);
7039         EXPECT_EQ(res, 0);
7040 
7041         sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
7042         sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
7043         sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
7044         sptr<PreviewOutput> previewOutput = nullptr;
7045         res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
7046         EXPECT_EQ(res, 0);
7047         sptr<CaptureOutput> capturePreviewOutput = previewOutput;
7048         EXPECT_TRUE(photoSession->CanAddOutput(capturePreviewOutput));
7049         res = photoSession->AddOutput(capturePreviewOutput);
7050         EXPECT_EQ(res, 0);
7051         sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
7052         sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
7053         sptr<PhotoOutput> photoOutput = nullptr;
7054         res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
7055         EXPECT_EQ(res, 0);
7056         sptr<CaptureOutput> capturePhotoOutput = photoOutput;
7057         EXPECT_TRUE(photoSession->CanAddOutput(capturePhotoOutput));
7058         res = photoSession->AddOutput(capturePhotoOutput);
7059         EXPECT_EQ(res, 0);
7060 
7061         res = photoSession->CommitConfig();
7062         EXPECT_EQ(res, 0);
7063         res = photoSession->Start();
7064         EXPECT_EQ(res, 0);
7065         sleep(WAIT_TIME_AFTER_START);
7066         res = photoOutput->Capture();
7067         EXPECT_EQ(res, 0);
7068         res = photoSession->Stop();
7069         EXPECT_EQ(res, 0);
7070     }
7071     EXPECT_EQ(photoSession->Release(), 0);
7072 }
7073 
7074 /*
7075  * Feature: Framework
7076  * Function: Test photo session preconfig
7077  * SubFunction: NA
7078  * FunctionPoints: NA
7079  * EnvConditions: NA
7080  * CaseDescription: Test can preconfig photo session with PRECONFIG_HIGH_QUALITY, RATIO_4_3 while supported
7081  */
7082 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_018, TestSize.Level0)
7083 {
7084     if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
7085         return;
7086     }
7087 
7088     auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
7089     auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
7090     ASSERT_NE(photoSession, nullptr);
7091     if (photoSession->CanPreconfig(PreconfigType::PRECONFIG_HIGH_QUALITY, ProfileSizeRatio::RATIO_4_3)) {
7092         int32_t res = photoSession->Preconfig(PreconfigType::PRECONFIG_HIGH_QUALITY, ProfileSizeRatio::RATIO_4_3);
7093         EXPECT_EQ(res, 0);
7094         res = photoSession->BeginConfig();
7095         EXPECT_EQ(res, 0);
7096 
7097         sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
7098         ASSERT_NE(input, nullptr);
7099         input->Open();
7100         res = photoSession->AddInput(input);
7101         EXPECT_EQ(res, 0);
7102 
7103         sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
7104         sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
7105         sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
7106         sptr<PreviewOutput> previewOutput = nullptr;
7107         res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
7108         EXPECT_EQ(res, 0);
7109         sptr<CaptureOutput> capturePreviewOutput = previewOutput;
7110         EXPECT_TRUE(photoSession->CanAddOutput(capturePreviewOutput));
7111         res = photoSession->AddOutput(capturePreviewOutput);
7112         EXPECT_EQ(res, 0);
7113         sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
7114         sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
7115         sptr<PhotoOutput> photoOutput = nullptr;
7116         res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
7117         EXPECT_EQ(res, 0);
7118         sptr<CaptureOutput> capturePhotoOutput = photoOutput;
7119         EXPECT_TRUE(photoSession->CanAddOutput(capturePhotoOutput));
7120         res = photoSession->AddOutput(capturePhotoOutput);
7121         EXPECT_EQ(res, 0);
7122 
7123         res = photoSession->CommitConfig();
7124         EXPECT_EQ(res, 0);
7125         res = photoSession->Start();
7126         EXPECT_EQ(res, 0);
7127         sleep(WAIT_TIME_AFTER_START);
7128         res = photoOutput->Capture();
7129         EXPECT_EQ(res, 0);
7130         res = photoSession->Stop();
7131         EXPECT_EQ(res, 0);
7132     }
7133     EXPECT_EQ(photoSession->Release(), 0);
7134 }
7135 
7136 /*
7137  * Feature: Framework
7138  * Function: Test photo session preconfig
7139  * SubFunction: NA
7140  * FunctionPoints: NA
7141  * EnvConditions: NA
7142  * CaseDescription: Test can preconfig photo session with PRECONFIG_HIGH_QUALITY, RATIO_16_9 while supported
7143  */
7144 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_019, TestSize.Level0)
7145 {
7146     if (!IsSceneModeSupported(SceneMode::CAPTURE)) {
7147         return;
7148     }
7149 
7150     auto captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
7151     auto photoSession = static_cast<PhotoSession*>(captureSession.GetRefPtr());
7152     ASSERT_NE(photoSession, nullptr);
7153     if (photoSession->CanPreconfig(PreconfigType::PRECONFIG_HIGH_QUALITY, ProfileSizeRatio::RATIO_16_9)) {
7154         int32_t res = photoSession->Preconfig(PreconfigType::PRECONFIG_HIGH_QUALITY, ProfileSizeRatio::RATIO_16_9);
7155         EXPECT_EQ(res, 0);
7156         res = photoSession->BeginConfig();
7157         EXPECT_EQ(res, 0);
7158 
7159         sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
7160         ASSERT_NE(input, nullptr);
7161         input->Open();
7162         res = photoSession->AddInput(input);
7163         EXPECT_EQ(res, 0);
7164 
7165         sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
7166         sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
7167         sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
7168         sptr<PreviewOutput> previewOutput = nullptr;
7169         res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
7170         EXPECT_EQ(res, 0);
7171         sptr<CaptureOutput> capturePreviewOutput = previewOutput;
7172         EXPECT_TRUE(photoSession->CanAddOutput(capturePreviewOutput));
7173         res = photoSession->AddOutput(capturePreviewOutput);
7174         EXPECT_EQ(res, 0);
7175         sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
7176         sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
7177         sptr<PhotoOutput> photoOutput = nullptr;
7178         res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
7179         EXPECT_EQ(res, 0);
7180         sptr<CaptureOutput> capturePhotoOutput = photoOutput;
7181         EXPECT_TRUE(photoSession->CanAddOutput(capturePhotoOutput));
7182         res = photoSession->AddOutput(capturePhotoOutput);
7183         EXPECT_EQ(res, 0);
7184 
7185         res = photoSession->CommitConfig();
7186         EXPECT_EQ(res, 0);
7187         res = photoSession->Start();
7188         EXPECT_EQ(res, 0);
7189         sleep(WAIT_TIME_AFTER_START);
7190         res = photoOutput->Capture();
7191         EXPECT_EQ(res, 0);
7192         res = photoSession->Stop();
7193         EXPECT_EQ(res, 0);
7194     }
7195     EXPECT_EQ(photoSession->Release(), 0);
7196 }
7197 
7198 /*
7199  * Feature: Framework
7200  * Function: Test photo session ability function
7201  * SubFunction: NA
7202  * FunctionPoints: NA
7203  * EnvConditions: NA
7204  * CaseDescription: Test photo session ability function
7205  */
7206 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_020, TestSize.Level0)
7207 {
7208     SceneMode photoMode = SceneMode::CAPTURE;
7209     if (!IsSceneModeSupported(photoMode)) {
7210         return;
7211     }
7212     sptr<CameraManager> cameraMgr = CameraManager::GetInstance();
7213     ASSERT_NE(cameraMgr, nullptr);
7214 
7215     sptr<CameraOutputCapability> capability = cameraMgr->GetSupportedOutputCapability(cameras_[0], photoMode);
7216     ASSERT_NE(capability, nullptr);
7217 
7218     sptr<CaptureSession> captureSession = cameraMgr->CreateCaptureSession(photoMode);
7219     ASSERT_NE(captureSession, nullptr);
7220 
7221     sptr<PhotoSession> photoSession = static_cast<PhotoSession *>(captureSession.GetRefPtr());
7222     ASSERT_NE(photoSession, nullptr);
7223 
7224     std::vector<sptr<CameraOutputCapability>> cocList = photoSession->GetCameraOutputCapabilities(cameras_[0]);
7225     ASSERT_TRUE(cocList.size() != 0);
7226     auto previewProfiles = cocList[0]->GetPreviewProfiles();
7227     auto photoProfiles = cocList[0]->GetPhotoProfiles();
7228     auto videoProfiles = cocList[0]->GetVideoProfiles();
7229 
7230     int32_t intResult = photoSession->BeginConfig();
7231     EXPECT_EQ(intResult, 0);
7232 
7233     intResult = photoSession->AddInput(input_);
7234     EXPECT_EQ(intResult, 0);
7235 
7236     sptr<CaptureOutput> photoOutput = CreatePhotoOutput();
7237     ASSERT_NE(photoOutput, nullptr);
7238     intResult = photoSession->AddOutput(photoOutput);
7239     EXPECT_EQ(intResult, 0);
7240 
7241     sptr<CaptureOutput> previewOutput = CreatePreviewOutput();
7242     ASSERT_NE(previewOutput, nullptr);
7243     intResult = photoSession->AddOutput(previewOutput);
7244     EXPECT_EQ(intResult, 0);
7245 
7246     intResult = photoSession->CommitConfig();
7247     EXPECT_EQ(intResult, 0);
7248 
7249     auto photoFunctionsList = photoSession->GetSessionFunctions(previewProfiles, photoProfiles, videoProfiles, true);
7250     ASSERT_TRUE(photoFunctionsList.size() != 0);
7251     auto photoFunctions = photoFunctionsList[0];
7252     photoFunctions->HasFlash();
7253     photoFunctions->GetSupportedFocusModes();
7254     photoFunctions->GetSupportedBeautyTypes();
7255     photoFunctions->GetSupportedBeautyRange(BeautyType::AUTO_TYPE);
7256     photoFunctions->GetSupportedColorEffects();
7257     photoFunctions->GetSupportedColorSpaces();
7258     photoFunctions->IsFocusModeSupported(FocusMode::FOCUS_MODE_MANUAL);
7259     std::vector<sptr<CameraAbility>> photoConflictFunctionsList = photoSession->GetSessionConflictFunctions();
7260 
7261     std::vector<float> zoomRatioRange = photoSession->GetZoomRatioRange();
7262     ASSERT_NE(zoomRatioRange.size(), 0);
7263 
7264     photoSession->LockForControl();
7265     photoSession->EnableMacro(true);
7266     photoSession->UnlockForControl();
7267 
7268     zoomRatioRange = photoSession->GetZoomRatioRange();
7269     ASSERT_NE(zoomRatioRange.size(), 0);
7270 
7271     photoSession->LockForControl();
7272     photoSession->EnableMacro(false);
7273     photoSession->UnlockForControl();
7274 
7275     photoSession->IsMacroSupported();
7276 
7277     photoSession->LockForControl();
7278     photoSession->SetZoomRatio(zoomRatioRange[1]);
7279     photoSession->UnlockForControl();
7280 
7281     photoSession->IsMacroSupported();
7282 }
7283 
7284 /*
7285  * Feature: Framework
7286  * Function: Test photo session with CreateCaptureSession
7287  * SubFunction: NA
7288  * FunctionPoints: NA
7289  * EnvConditions: NA
7290  * CaseDescription: Test photo session with CreateCaptureSession
7291  */
7292 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_021, TestSize.Level0)
7293 {
7294     SceneMode mode = SceneMode::CAPTURE;
7295     sptr<CameraManager> modeManagerObj = CameraManager::GetInstance();
7296     ASSERT_NE(modeManagerObj, nullptr);
7297 
7298     sptr<CaptureSession> captureSession = modeManagerObj->CreateCaptureSession(mode);
7299     ASSERT_NE(captureSession, nullptr);
7300 }
7301 
7302 /*
7303  * Feature: Framework
7304  * Function: Test photo session abnormal branches
7305  * SubFunction: NA
7306  * FunctionPoints: NA
7307  * EnvConditions: NA
7308  * CaseDescription: Test photo session abnormal branches
7309  */
7310 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_022, TestSize.Level0)
7311 {
7312     if (!IsSupportNow()) {
7313         return;
7314     }
7315     sptr<CaptureSession> captureSession = manager_->CreateCaptureSession(SceneMode::CAPTURE);
7316     ASSERT_NE(captureSession, nullptr);
7317     std::vector<float> virtualApertures = {};
7318     float aperture;
7319     EXPECT_EQ(captureSession->GetSupportedVirtualApertures(virtualApertures), SESSION_NOT_CONFIG);
7320     EXPECT_EQ(captureSession->GetVirtualAperture(aperture), SESSION_NOT_CONFIG);
7321     EXPECT_EQ(captureSession->SetVirtualAperture(aperture), SESSION_NOT_CONFIG);
7322 }
7323 
7324 /*
7325  * Feature: Framework
7326  * Function: Test photo session with VirtualAperture
7327  * SubFunction: NA
7328  * FunctionPoints: NA
7329  * EnvConditions: NA
7330  * CaseDescription: Test photo session with VirtualAperture
7331  */
7332 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_023, TestSize.Level0)
7333 {
7334     SceneMode captureMode = SceneMode::CAPTURE;
7335     if (!IsSceneModeSupported(captureMode)) {
7336         return;
7337     }
7338     if (session_) {
7339         MEDIA_INFO_LOG("old session exist, need release");
7340         session_->Release();
7341     }
7342     sptr<CameraManager> modeManagerObj = CameraManager::GetInstance();
7343     ASSERT_NE(modeManagerObj, nullptr);
7344 
7345     std::vector<SceneMode> modes = modeManagerObj->GetSupportedModes(cameras_[0]);
7346     ASSERT_TRUE(modes.size() != 0);
7347 
7348 
7349     sptr<CameraOutputCapability> modeAbility =
7350         modeManagerObj->GetSupportedOutputCapability(cameras_[0], captureMode);
7351     ASSERT_NE(modeAbility, nullptr);
7352 
7353     sptr<CaptureSession> captureSession = modeManagerObj->CreateCaptureSession(captureMode);
7354     ASSERT_NE(captureSession, nullptr);
7355 
7356     int32_t intResult = captureSession->BeginConfig();
7357     EXPECT_EQ(intResult, 0);
7358 
7359     intResult = captureSession->AddInput(input_);
7360     EXPECT_EQ(intResult, 0);
7361 
7362     camera_rational_t ratio = {
7363         .numerator = 16,
7364         .denominator=9
7365     };
7366 
7367     Profile profile = SelectProfileByRatioAndFormat(modeAbility, ratio, photoFormat_);
7368     ASSERT_NE(profile.format_, -1);
7369 
7370     sptr<CaptureOutput> photoOutput = CreatePhotoOutput(profile);
7371     ASSERT_NE(photoOutput, nullptr);
7372 
7373     intResult = captureSession->AddOutput(photoOutput);
7374     EXPECT_EQ(intResult, 0);
7375 
7376     profile = SelectProfileByRatioAndFormat(modeAbility, ratio, previewFormat_);
7377     ASSERT_NE(profile.format_, -1);
7378 
7379     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(profile);
7380     ASSERT_NE(previewOutput, nullptr);
7381 
7382     intResult = captureSession->AddOutput(previewOutput);
7383     EXPECT_EQ(intResult, 0);
7384 
7385     intResult = captureSession->CommitConfig();
7386     EXPECT_EQ(intResult, 0);
7387 
7388     captureSession->LockForControl();
7389 
7390     std::vector<float> virtualApertures = {};
7391     EXPECT_EQ(captureSession->GetSupportedVirtualApertures(virtualApertures), 0);
7392     EXPECT_EQ(captureSession->SetVirtualAperture(virtualApertures[0]), 0);
7393 
7394     captureSession->UnlockForControl();
7395     float aperture;
7396     EXPECT_EQ(captureSession->GetVirtualAperture(aperture), 0);
7397     EXPECT_EQ(aperture, virtualApertures[0]);
7398 
7399     intResult = captureSession->Start();
7400     EXPECT_EQ(intResult, 0);
7401     sleep(WAIT_TIME_AFTER_START);
7402 
7403     intResult = ((sptr<PhotoOutput>&)photoOutput)->Capture();
7404     EXPECT_EQ(intResult, 0);
7405     sleep(WAIT_TIME_AFTER_CAPTURE);
7406 
7407     captureSession->Stop();
7408 }
7409 
7410 /*
7411  * Feature: Framework
7412  * Function: Test photo session set default color space
7413  * SubFunction: NA
7414  * FunctionPoints: NA
7415  * EnvConditions: NA
7416  * CaseDescription: Test photo session set default color space
7417  */
7418 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_024, TestSize.Level0)
7419 {
7420     sptr<CameraInput> camInput = (sptr<CameraInput>&)input_;
7421     camInput->Open();
7422 
7423     session_->SetMode(SceneMode::CAPTURE);
7424     int32_t intResult = session_->BeginConfig();
7425 
7426     EXPECT_EQ(intResult, 0);
7427 
7428     intResult = session_->AddInput(input_);
7429     EXPECT_EQ(intResult, 0);
7430 
7431     sptr<CaptureOutput> previewOutput = CreatePreviewOutput();
7432     ASSERT_NE(previewOutput, nullptr);
7433 
7434     intResult = session_->AddOutput(previewOutput);
7435     EXPECT_EQ(intResult, 0);
7436 
7437     intResult = session_->CommitConfig();
7438     EXPECT_EQ(intResult, 0);
7439 
7440     std::vector<ColorSpace> colorSpaceLists = session_->GetSupportedColorSpaces();
7441     bool falg = false;
7442     for (auto curColorSpace : colorSpaceLists) {
7443         if ( curColorSpace == ColorSpace::SRGB) {
7444             falg = true;
7445             break;
7446         }
7447     }
7448     if (colorSpaceLists.size() != 0) {
7449         ColorSpace colorSpace;
7450         intResult = session_->GetActiveColorSpace(colorSpace);
7451         EXPECT_EQ(intResult, 0);
7452         if (!falg) {
7453             MEDIA_ERR_LOG("current session not supported colorSpace SRGB");
7454             return;
7455         }
7456         EXPECT_EQ(ColorSpace::SRGB, colorSpace);
7457     }
7458 
7459     intResult = session_->Start();
7460     EXPECT_EQ(intResult, 0);
7461 
7462     sleep(WAIT_TIME_AFTER_START);
7463 
7464     intResult = session_->Stop();
7465     EXPECT_EQ(intResult, 0);
7466 }
7467 
7468 /*
7469  * Feature: Framework
7470  * Function: Test photo session set color space before commit config
7471  * SubFunction: NA
7472  * FunctionPoints: NA
7473  * EnvConditions: NA
7474  * CaseDescription: Test photo session set color space before commit config
7475  */
7476 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_025, TestSize.Level0)
7477 {
7478     sptr<CameraInput> camInput = (sptr<CameraInput>&)input_;
7479     camInput->Open();
7480 
7481     session_->SetMode(SceneMode::CAPTURE);
7482     int32_t intResult = session_->BeginConfig();
7483 
7484     EXPECT_EQ(intResult, 0);
7485 
7486     intResult = session_->AddInput(input_);
7487     EXPECT_EQ(intResult, 0);
7488 
7489     sptr<CaptureOutput> previewOutput = CreatePreviewOutput();
7490     ASSERT_NE(previewOutput, nullptr);
7491 
7492     intResult = session_->AddOutput(previewOutput);
7493     EXPECT_EQ(intResult, 0);
7494 
7495     std::vector<ColorSpace> colorSpaceLists = session_->GetSupportedColorSpaces();
7496     if (colorSpaceLists.size() != 0) {
7497         intResult = session_->SetColorSpace(colorSpaceLists[1]);
7498         EXPECT_EQ(intResult, 0);
7499         ColorSpace colorSpace;
7500         intResult = session_->GetActiveColorSpace(colorSpace);
7501         EXPECT_EQ(intResult, 0);
7502         EXPECT_EQ(colorSpaceLists[1], colorSpace);
7503     }
7504 
7505     intResult = session_->CommitConfig();
7506     EXPECT_EQ(intResult, 0);
7507 
7508     intResult = session_->Start();
7509     EXPECT_EQ(intResult, 0);
7510 
7511     sleep(WAIT_TIME_AFTER_START);
7512 
7513     intResult = session_->Stop();
7514     EXPECT_EQ(intResult, 0);
7515 }
7516 
7517 /*
7518  * Feature: Framework
7519  * Function: Test photo session set color space after commit config
7520  * SubFunction: NA
7521  * FunctionPoints: NA
7522  * EnvConditions: NA
7523  * CaseDescription: Test photo session set color space after commit config
7524  */
7525 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_026, TestSize.Level0)
7526 {
7527     sptr<CameraInput> camInput = (sptr<CameraInput>&)input_;
7528     camInput->Open();
7529 
7530     session_->SetMode(SceneMode::CAPTURE);
7531     int32_t intResult = session_->BeginConfig();
7532 
7533     EXPECT_EQ(intResult, 0);
7534 
7535     intResult = session_->AddInput(input_);
7536     EXPECT_EQ(intResult, 0);
7537 
7538     sptr<CaptureOutput> previewOutput = CreatePreviewOutput();
7539     ASSERT_NE(previewOutput, nullptr);
7540 
7541     intResult = session_->AddOutput(previewOutput);
7542     EXPECT_EQ(intResult, 0);
7543 
7544     intResult = session_->CommitConfig();
7545     EXPECT_EQ(intResult, 0);
7546 
7547 
7548     std::vector<ColorSpace> colorSpaceLists = session_->GetSupportedColorSpaces();
7549     if (colorSpaceLists.size() != 0) {
7550         intResult = session_->SetColorSpace(colorSpaceLists[1]);
7551         EXPECT_EQ(intResult, 0);
7552         ColorSpace colorSpace;
7553         intResult = session_->GetActiveColorSpace(colorSpace);
7554         EXPECT_EQ(intResult, 0);
7555         EXPECT_EQ(colorSpaceLists[1], colorSpace);
7556     }
7557 
7558     intResult = session_->Start();
7559     EXPECT_EQ(intResult, 0);
7560 
7561     sleep(WAIT_TIME_AFTER_START);
7562 
7563     intResult = session_->Stop();
7564     EXPECT_EQ(intResult, 0);
7565 }
7566 
7567 /*
7568  * Feature: Framework
7569  * Function: Test photo session set color space after session start
7570  * SubFunction: NA
7571  * FunctionPoints: NA
7572  * EnvConditions: NA
7573  * CaseDescription: Test photo session set color space after session start
7574  */
7575 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_027, TestSize.Level0)
7576 {
7577     sptr<CameraInput> camInput = (sptr<CameraInput>&)input_;
7578     camInput->Open();
7579 
7580     session_->SetMode(SceneMode::CAPTURE);
7581     int32_t intResult = session_->BeginConfig();
7582 
7583     EXPECT_EQ(intResult, 0);
7584 
7585     intResult = session_->AddInput(input_);
7586     EXPECT_EQ(intResult, 0);
7587 
7588     sptr<CaptureOutput> previewOutput = CreatePreviewOutput();
7589     ASSERT_NE(previewOutput, nullptr);
7590 
7591     intResult = session_->AddOutput(previewOutput);
7592     EXPECT_EQ(intResult, 0);
7593 
7594     intResult = session_->CommitConfig();
7595     EXPECT_EQ(intResult, 0);
7596 
7597     intResult = session_->Start();
7598     EXPECT_EQ(intResult, 0);
7599 
7600     std::vector<ColorSpace> colorSpaceLists = session_->GetSupportedColorSpaces();
7601     if (colorSpaceLists.size() != 0) {
7602         intResult = session_->SetColorSpace(colorSpaceLists[1]);
7603         EXPECT_EQ(intResult, 0);
7604         ColorSpace colorSpace;
7605         intResult = session_->GetActiveColorSpace(colorSpace);
7606         EXPECT_EQ(intResult, 0);
7607         EXPECT_EQ(colorSpaceLists[1], colorSpace);
7608     }
7609 
7610     sleep(WAIT_TIME_AFTER_START);
7611 
7612     intResult = session_->Stop();
7613     EXPECT_EQ(intResult, 0);
7614 }
7615 
7616 /*
7617  * Feature: Framework
7618  * Function: Test photo session with low light boost
7619  * SubFunction: NA
7620  * FunctionPoints: NA
7621  * EnvConditions: NA
7622  * CaseDescription: Test photo session with low light boost
7623  */
7624 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_028, TestSize.Level0)
7625 {
7626     session_->SetMode(SceneMode::CAPTURE);
7627     int32_t intResult = session_->BeginConfig();
7628 
7629     EXPECT_EQ(intResult, 0);
7630 
7631     intResult = session_->AddInput(input_);
7632     EXPECT_EQ(intResult, 0);
7633 
7634     sptr<CaptureOutput> previewOutput = CreatePreviewOutput();
7635     ASSERT_NE(previewOutput, nullptr);
7636 
7637     intResult = session_->AddOutput(previewOutput);
7638     EXPECT_EQ(intResult, 0);
7639 
7640     bool isLowLightBoostSupported = session_->IsFeatureSupported(FEATURE_LOW_LIGHT_BOOST);
7641 
7642     if (isLowLightBoostSupported) {
7643         intResult = session_->EnableFeature(FEATURE_LOW_LIGHT_BOOST, true);
7644         EXPECT_EQ(intResult, SESSION_NOT_CONFIG);
7645     }
7646 
7647     intResult = session_->CommitConfig();
7648     EXPECT_EQ(intResult, 0);
7649 
7650     isLowLightBoostSupported = session_->IsFeatureSupported(FEATURE_LOW_LIGHT_BOOST);
7651     if (isLowLightBoostSupported) {
7652         session_->SetFeatureDetectionStatusCallback(std::make_shared<AppCallback>());
7653         session_->LockForControl();
7654         intResult = session_->EnableLowLightDetection(true);
7655         session_->UnlockForControl();
7656         EXPECT_EQ(intResult, 0);
7657     }
7658 
7659     intResult = session_->Start();
7660     EXPECT_EQ(intResult, 0);
7661 
7662     sleep(WAIT_TIME_AFTER_START);
7663 
7664     intResult = session_->Stop();
7665     EXPECT_EQ(intResult, 0);
7666 }
7667 
7668 /*
7669  * Feature: Framework
7670  * Function: Test photo session sketch functions
7671  * SubFunction: NA
7672  * FunctionPoints: NA
7673  * EnvConditions: NA
7674  * CaseDescription: Test photo session sketch functions
7675  */
7676 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_029, TestSize.Level0)
7677 {
7678     auto previewProfile = GetSketchPreviewProfile();
7679     if (previewProfile == nullptr) {
7680         EXPECT_EQ(previewProfile.get(), nullptr);
7681         return;
7682     }
7683     auto output = CreatePreviewOutput(*previewProfile);
7684     ASSERT_NE(output, nullptr);
7685 
7686     session_->SetMode(SceneMode::CAPTURE);
7687     int32_t intResult = session_->BeginConfig();
7688     EXPECT_EQ(intResult, 0);
7689 
7690     intResult = session_->AddInput(input_);
7691     EXPECT_EQ(intResult, 0);
7692 
7693     intResult = session_->AddOutput(output);
7694     EXPECT_EQ(intResult, 0);
7695 
7696     sptr<PreviewOutput> previewOutput = (sptr<PreviewOutput>&)output;
7697     bool isSketchSupport = previewOutput->IsSketchSupported();
7698     if (!isSketchSupport) {
7699         return;
7700     }
7701 
7702     int sketchEnableRatio = previewOutput->GetSketchRatio();
7703     EXPECT_GT(sketchEnableRatio, 0);
7704 
7705     intResult = previewOutput->EnableSketch(true);
7706     EXPECT_EQ(intResult, 0);
7707 
7708     intResult = session_->CommitConfig();
7709     EXPECT_EQ(intResult, 0);
7710 
7711     intResult = previewOutput->AttachSketchSurface(CreateSketchSurface(previewProfile->GetCameraFormat()));
7712     EXPECT_EQ(intResult, 0);
7713 
7714     intResult = session_->Start();
7715     EXPECT_EQ(intResult, 0);
7716 
7717     sleep(WAIT_TIME_AFTER_START);
7718 
7719     intResult = session_->Stop();
7720     EXPECT_EQ(intResult, 0);
7721 }
7722 
7723 /*
7724  * Feature: Framework
7725  * Function: Test photo session sketch functions callback
7726  * SubFunction: NA
7727  * FunctionPoints: NA
7728  * EnvConditions: NA
7729  * CaseDescription: Test photo session sketch functions callback
7730  */
7731 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_030, TestSize.Level0)
7732 {
7733     auto previewProfile = GetSketchPreviewProfile();
7734     if (previewProfile == nullptr) {
7735         EXPECT_EQ(previewProfile.get(), nullptr);
7736         return;
7737     }
7738     auto output = CreatePreviewOutput(*previewProfile);
7739     ASSERT_NE(output, nullptr);
7740 
7741     session_->SetMode(SceneMode::CAPTURE);
7742     int32_t intResult = session_->BeginConfig();
7743     EXPECT_EQ(intResult, 0);
7744 
7745     intResult = session_->AddInput(input_);
7746     EXPECT_EQ(intResult, 0);
7747 
7748     intResult = session_->AddOutput(output);
7749     EXPECT_EQ(intResult, 0);
7750 
7751     sptr<PreviewOutput> previewOutput = (sptr<PreviewOutput>&)output;
7752     bool isSketchSupport = previewOutput->IsSketchSupported();
7753     if (!isSketchSupport) {
7754         return;
7755     }
7756 
7757     previewOutput->SetCallback(std::make_shared<AppCallback>());
7758 
7759     int sketchEnableRatio = previewOutput->GetSketchRatio();
7760     EXPECT_GT(sketchEnableRatio, 0);
7761 
7762     intResult = previewOutput->EnableSketch(true);
7763     EXPECT_EQ(intResult, 0);
7764 
7765     intResult = session_->CommitConfig();
7766     EXPECT_EQ(intResult, 0);
7767 
7768     intResult = previewOutput->AttachSketchSurface(CreateSketchSurface(previewProfile->GetCameraFormat()));
7769     EXPECT_EQ(intResult, 0);
7770 
7771     intResult = session_->Start();
7772     EXPECT_EQ(intResult, 0);
7773 
7774     sleep(WAIT_TIME_AFTER_START);
7775 
7776     EXPECT_EQ(g_previewEvents[static_cast<int>(CAM_PREVIEW_EVENTS::CAM_PREVIEW_SKETCH_STATUS_CHANGED)], 0);
7777 
7778     session_->LockForControl();
7779     intResult = session_->SetZoomRatio(30.0f);
7780     EXPECT_EQ(intResult, 0);
7781     session_->UnlockForControl();
7782 
7783     sleep(WAIT_TIME_AFTER_START);
7784 
7785     EXPECT_EQ(g_previewEvents[static_cast<int>(CAM_PREVIEW_EVENTS::CAM_PREVIEW_SKETCH_STATUS_CHANGED)], 1);
7786     g_previewEvents.reset();
7787 
7788     sleep(WAIT_TIME_AFTER_START);
7789     auto statusSize = g_sketchStatus.size();
7790     EXPECT_GT(statusSize, 0);
7791     if (statusSize == 2) {
7792         EXPECT_EQ(g_sketchStatus.front(), 3);
7793         g_sketchStatus.pop_front();
7794         EXPECT_EQ(g_sketchStatus.front(), 1);
7795         g_sketchStatus.pop_front();
7796     }
7797 
7798     sleep(1);
7799     EXPECT_EQ(g_previewEvents[static_cast<int>(CAM_PREVIEW_EVENTS::CAM_PREVIEW_SKETCH_STATUS_CHANGED)], 0);
7800 
7801     intResult = session_->Stop();
7802     EXPECT_EQ(intResult, 0);
7803 }
7804 
7805 /*
7806  * Feature: Framework
7807  * Function: Test photo session sketch functions anomalous branch
7808  * SubFunction: NA
7809  * FunctionPoints: NA
7810  * EnvConditions: NA
7811  * CaseDescription: Test photo session sketch functions anomalous branch
7812  */
7813 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_031, TestSize.Level0)
7814 {
7815     auto previewProfile = GetSketchPreviewProfile();
7816     if (previewProfile == nullptr) {
7817         EXPECT_EQ(previewProfile.get(), nullptr);
7818         return;
7819     }
7820     auto output = CreatePreviewOutput(*previewProfile);
7821     ASSERT_NE(output, nullptr);
7822 
7823     sptr<PreviewOutput> previewOutput = (sptr<PreviewOutput>&)output;
7824     bool isSketchSupport = previewOutput->IsSketchSupported();
7825     ASSERT_FALSE(isSketchSupport);
7826 
7827     session_->SetMode(SceneMode::CAPTURE);
7828     int32_t intResult = session_->BeginConfig();
7829 
7830     EXPECT_EQ(intResult, 0);
7831 
7832     intResult = session_->AddInput(input_);
7833     EXPECT_EQ(intResult, 0);
7834 
7835     intResult = session_->AddOutput(output);
7836     EXPECT_EQ(intResult, 0);
7837 
7838     isSketchSupport = previewOutput->IsSketchSupported();
7839     if (!isSketchSupport) {
7840         return;
7841     }
7842 
7843     session_->SetMode(SceneMode::PORTRAIT);
7844     int sketchEnableRatio = previewOutput->GetSketchRatio();
7845     EXPECT_LT(sketchEnableRatio, 0);
7846 
7847     session_->SetMode(SceneMode::CAPTURE);
7848     sketchEnableRatio = previewOutput->GetSketchRatio();
7849     EXPECT_GT(sketchEnableRatio, 0);
7850 
7851     auto sketchSurface = CreateSketchSurface(previewProfile->GetCameraFormat());
7852 
7853     intResult = previewOutput->EnableSketch(true);
7854     EXPECT_EQ(intResult, 0);
7855 
7856     intResult = previewOutput->AttachSketchSurface(sketchSurface);
7857     EXPECT_EQ(intResult, SESSION_NOT_CONFIG);
7858 
7859     intResult = session_->CommitConfig();
7860     EXPECT_EQ(intResult, 0);
7861 
7862     intResult = previewOutput->AttachSketchSurface(sketchSurface);
7863     EXPECT_EQ(intResult, 0);
7864 
7865     intResult = session_->Start();
7866     EXPECT_EQ(intResult, 0);
7867 
7868     intResult = previewOutput->EnableSketch(true);
7869     EXPECT_EQ(intResult, SESSION_NOT_CONFIG);
7870 
7871     sleep(WAIT_TIME_AFTER_START);
7872 
7873     intResult = previewOutput->AttachSketchSurface(sketchSurface);
7874     EXPECT_EQ(intResult, 0);
7875 
7876     intResult = session_->Stop();
7877     EXPECT_EQ(intResult, 0);
7878 }
7879 
7880 /*
7881  * Feature: Framework
7882  * Function: Test photo session sketch functions auto start sketch while zoom set
7883  * SubFunction: NA
7884  * FunctionPoints: NA
7885  * EnvConditions: NA
7886  * CaseDescription: Test photo session sketch functions auto start sketch while zoom set
7887  */
7888 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_032, TestSize.Level0)
7889 {
7890     auto previewProfile = GetSketchPreviewProfile();
7891     if (previewProfile == nullptr) {
7892         EXPECT_EQ(previewProfile.get(), nullptr);
7893         return;
7894     }
7895     auto output = CreatePreviewOutput(*previewProfile);
7896     ASSERT_NE(output, nullptr);
7897 
7898     session_->SetMode(SceneMode::CAPTURE);
7899     int32_t intResult = session_->BeginConfig();
7900     EXPECT_EQ(intResult, 0);
7901 
7902     intResult = session_->AddInput(input_);
7903     EXPECT_EQ(intResult, 0);
7904 
7905     intResult = session_->AddOutput(output);
7906     EXPECT_EQ(intResult, 0);
7907 
7908     sptr<PreviewOutput> previewOutput = (sptr<PreviewOutput>&)output;
7909     previewOutput->SetCallback(std::make_shared<AppCallback>());
7910     bool isSketchSupport = previewOutput->IsSketchSupported();
7911     if (!isSketchSupport) {
7912         return;
7913     }
7914 
7915     int sketchEnableRatio = previewOutput->GetSketchRatio();
7916     EXPECT_GT(sketchEnableRatio, 0);
7917 
7918     intResult = previewOutput->EnableSketch(true);
7919     EXPECT_EQ(intResult, 0);
7920 
7921     intResult = session_->CommitConfig();
7922     EXPECT_EQ(intResult, 0);
7923 
7924     intResult = previewOutput->AttachSketchSurface(CreateSketchSurface(previewProfile->GetCameraFormat()));
7925     EXPECT_EQ(intResult, 0);
7926 
7927     session_->LockForControl();
7928     intResult = session_->SetZoomRatio(30.0f);
7929     EXPECT_EQ(intResult, 0);
7930     session_->UnlockForControl();
7931 
7932     intResult = session_->Start();
7933     EXPECT_EQ(intResult, 0);
7934 
7935     sleep(WAIT_TIME_AFTER_START);
7936     EXPECT_EQ(g_previewEvents[static_cast<int>(CAM_PREVIEW_EVENTS::CAM_PREVIEW_SKETCH_STATUS_CHANGED)], 1);
7937     g_previewEvents.reset();
7938 
7939     auto statusSize = g_sketchStatus.size();
7940     EXPECT_EQ(statusSize, 3);
7941     if (statusSize == 3) {
7942         EXPECT_EQ(g_sketchStatus.front(), 0);
7943         g_sketchStatus.pop_front();
7944         EXPECT_EQ(g_sketchStatus.front(), 3);
7945         g_sketchStatus.pop_front();
7946         EXPECT_EQ(g_sketchStatus.front(), 1);
7947         g_sketchStatus.pop_front();
7948     }
7949 
7950     sleep(WAIT_TIME_AFTER_START);
7951     EXPECT_EQ(g_previewEvents[static_cast<int>(CAM_PREVIEW_EVENTS::CAM_PREVIEW_SKETCH_STATUS_CHANGED)], 0);
7952     g_previewEvents.reset();
7953 
7954     session_->LockForControl();
7955     intResult = session_->SetZoomRatio(1.0f);
7956     EXPECT_EQ(intResult, 0);
7957     session_->UnlockForControl();
7958 
7959     sleep(WAIT_TIME_AFTER_START);
7960     EXPECT_EQ(g_previewEvents[static_cast<int>(CAM_PREVIEW_EVENTS::CAM_PREVIEW_SKETCH_STATUS_CHANGED)], 1);
7961     g_previewEvents.reset();
7962 
7963     statusSize = g_sketchStatus.size();
7964     EXPECT_EQ(statusSize, 2);
7965     if (statusSize == 2) {
7966         EXPECT_EQ(g_sketchStatus.front(), 2);
7967         g_sketchStatus.pop_front();
7968         EXPECT_EQ(g_sketchStatus.front(), 0);
7969         g_sketchStatus.pop_front();
7970     }
7971 
7972     sleep(WAIT_TIME_AFTER_START);
7973     EXPECT_EQ(g_previewEvents[static_cast<int>(CAM_PREVIEW_EVENTS::CAM_PREVIEW_SKETCH_STATUS_CHANGED)], 0);
7974     g_previewEvents.reset();
7975 
7976     intResult = session_->Stop();
7977     EXPECT_EQ(intResult, 0);
7978 }
7979 
7980 /*
7981  * Feature: Framework
7982  * Function: Test photo session smooth zoom and sketch functions callback
7983  * SubFunction: NA
7984  * FunctionPoints: NA
7985  * EnvConditions: NA
7986  * CaseDescription: Test photo session smooth zoom and sketch functions callback
7987  */
7988 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_033, TestSize.Level0)
7989 {
7990     auto previewProfile = GetSketchPreviewProfile();
7991     if (previewProfile == nullptr) {
7992         EXPECT_EQ(previewProfile.get(), nullptr);
7993         return;
7994     }
7995     auto output = CreatePreviewOutput(*previewProfile);
7996     ASSERT_NE(output, nullptr);
7997 
7998     session_->SetMode(SceneMode::CAPTURE);
7999     int32_t intResult = session_->BeginConfig();
8000     EXPECT_EQ(intResult, 0);
8001 
8002     intResult = session_->AddInput(input_);
8003     EXPECT_EQ(intResult, 0);
8004 
8005     intResult = session_->AddOutput(output);
8006     EXPECT_EQ(intResult, 0);
8007 
8008     sptr<PreviewOutput> previewOutput = (sptr<PreviewOutput>&)output;
8009     bool isSketchSupport = previewOutput->IsSketchSupported();
8010     if (!isSketchSupport) {
8011         return;
8012     }
8013 
8014     previewOutput->SetCallback(std::make_shared<AppCallback>());
8015 
8016     int sketchEnableRatio = previewOutput->GetSketchRatio();
8017     EXPECT_GT(sketchEnableRatio, 0);
8018 
8019     intResult = previewOutput->EnableSketch(true);
8020     EXPECT_EQ(intResult, 0);
8021 
8022     intResult = session_->CommitConfig();
8023     EXPECT_EQ(intResult, 0);
8024 
8025     intResult = previewOutput->AttachSketchSurface(CreateSketchSurface(previewProfile->GetCameraFormat()));
8026     EXPECT_EQ(intResult, 0);
8027 
8028     intResult = session_->Start();
8029     EXPECT_EQ(intResult, 0);
8030 
8031     sleep(WAIT_TIME_AFTER_START);
8032 
8033     EXPECT_EQ(g_previewEvents[static_cast<int>(CAM_PREVIEW_EVENTS::CAM_PREVIEW_SKETCH_STATUS_CHANGED)], 0);
8034 
8035     session_->LockForControl();
8036     intResult = session_->SetSmoothZoom(30.0f, 0);
8037     EXPECT_EQ(intResult, 0);
8038     session_->UnlockForControl();
8039 
8040     sleep(WAIT_TIME_AFTER_START);
8041 
8042     EXPECT_EQ(g_previewEvents[static_cast<int>(CAM_PREVIEW_EVENTS::CAM_PREVIEW_SKETCH_STATUS_CHANGED)], 1);
8043     g_previewEvents.reset();
8044 
8045     sleep(WAIT_TIME_AFTER_START);
8046     auto statusSize = g_sketchStatus.size();
8047     EXPECT_EQ(statusSize, 2);
8048     if (statusSize == 2) {
8049         EXPECT_EQ(g_sketchStatus.front(), 3);
8050         g_sketchStatus.pop_front();
8051         EXPECT_EQ(g_sketchStatus.front(), 1);
8052         g_sketchStatus.pop_front();
8053     }
8054 
8055     sleep(1);
8056     EXPECT_EQ(g_previewEvents[static_cast<int>(CAM_PREVIEW_EVENTS::CAM_PREVIEW_SKETCH_STATUS_CHANGED)], 0);
8057 
8058     intResult = session_->Stop();
8059     EXPECT_EQ(intResult, 0);
8060 }
8061 
8062 /*
8063  * Feature: Framework
8064  * Function: Test photo session moon capture boost function
8065  * SubFunction: NA
8066  * FunctionPoints: NA
8067  * EnvConditions: NA
8068  * CaseDescription: Test photo session moon capture boost function
8069  */
8070 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_034, TestSize.Level0)
8071 {
8072     auto previewProfile = GetSketchPreviewProfile();
8073     if (previewProfile == nullptr) {
8074         EXPECT_EQ(previewProfile.get(), nullptr);
8075         return;
8076     }
8077     auto output = CreatePreviewOutput(*previewProfile);
8078     sptr<PreviewOutput> previewOutput = (sptr<PreviewOutput>&)output;
8079     ASSERT_NE(output, nullptr);
8080 
8081     session_->SetMode(SceneMode::CAPTURE);
8082     int32_t intResult = session_->BeginConfig();
8083 
8084     EXPECT_EQ(intResult, 0);
8085 
8086     intResult = session_->AddInput(input_);
8087     EXPECT_EQ(intResult, 0);
8088 
8089     intResult = session_->AddOutput(output);
8090     EXPECT_EQ(intResult, 0);
8091 
8092     intResult = session_->CommitConfig();
8093     EXPECT_EQ(intResult, 0);
8094 
8095     session_->SetFeatureDetectionStatusCallback(std::make_shared<AppCallback>());
8096 
8097     g_moonCaptureBoostEvents.reset();
8098     intResult = session_->Start();
8099     EXPECT_EQ(intResult, 0);
8100 
8101     sleep(WAIT_TIME_AFTER_START);
8102 
8103     bool isMoonCaptureBoostSupported = session_->IsFeatureSupported(FEATURE_MOON_CAPTURE_BOOST);
8104     if (isMoonCaptureBoostSupported) {
8105         EXPECT_EQ(g_moonCaptureBoostEvents.count(), 1);
8106         if (g_moonCaptureBoostEvents[static_cast<int>(
8107                 CAM_MOON_CAPTURE_BOOST_EVENTS::CAM_MOON_CAPTURE_BOOST_EVENT_ACTIVE)] == 1) {
8108             intResult = session_->EnableFeature(FEATURE_MOON_CAPTURE_BOOST, true);
8109             EXPECT_EQ(intResult, 0);
8110         }
8111         if (g_moonCaptureBoostEvents[static_cast<int>(
8112                 CAM_MOON_CAPTURE_BOOST_EVENTS::CAM_MOON_CAPTURE_BOOST_EVENT_IDLE)] == 1) {
8113             intResult = session_->EnableFeature(FEATURE_MOON_CAPTURE_BOOST, false);
8114             EXPECT_EQ(intResult, 0);
8115         }
8116     }
8117 
8118     sleep(WAIT_TIME_AFTER_START);
8119 
8120     intResult = session_->Stop();
8121     EXPECT_EQ(intResult, 0);
8122 }
8123 
8124 /*
8125  * Feature: Framework
8126  * Function: Test photo session lcd flash
8127  * SubFunction: NA
8128  * FunctionPoints: NA
8129  * EnvConditions: NA
8130  * CaseDescription: Test photo session lcd flash
8131  */
8132 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_035, TestSize.Level0)
8133 {
8134     if (session_) {
8135         session_->Release();
8136         session_ = nullptr;
8137         input_->Close();
8138     }
8139     session_ = manager_->CreateCaptureSession(SceneMode::CAPTURE);
8140     ASSERT_NE(session_, nullptr);
8141 
8142     int32_t intResult = session_->BeginConfig();
8143     EXPECT_EQ(intResult, 0);
8144 
8145     if (cameras_.size() > 1) {
8146         input_ = manager_->CreateCameraInput(cameras_[1]);
8147         ASSERT_NE(input_, nullptr);
8148         EXPECT_EQ(input_->Open(), 0);
8149 
8150         intResult = session_->AddInput(input_);
8151         EXPECT_EQ(intResult, 0);
8152 
8153         sptr<CaptureOutput> previewOutput = CreatePreviewOutput();
8154         ASSERT_NE(previewOutput, nullptr);
8155 
8156         intResult = session_->AddOutput(previewOutput);
8157         EXPECT_EQ(intResult, 0);
8158 
8159         intResult = session_->CommitConfig();
8160         EXPECT_EQ(intResult, 0);
8161 
8162         bool isSupported = session_->IsLcdFlashSupported();
8163         EXPECT_EQ(isSupported, true);
8164 
8165         if (isSupported) {
8166             session_->SetLcdFlashStatusCallback(std::make_shared<AppCallback>());
8167             session_->LockForControl();
8168             intResult = session_->EnableLcdFlashDetection(true);
8169             session_->UnlockForControl();
8170             EXPECT_EQ(intResult, 0);
8171         }
8172 
8173         intResult = session_->Start();
8174         EXPECT_EQ(intResult, 0);
8175 
8176         sleep(WAIT_TIME_AFTER_START);
8177 
8178         intResult = session_->Stop();
8179         EXPECT_EQ(intResult, 0);
8180     }
8181 }
8182 
8183 /*
8184  * Feature: Framework
8185  * Function: Test photo session lcd flash anomalous branch
8186  * SubFunction: NA
8187  * FunctionPoints: NA
8188  * EnvConditions: NA
8189  * CaseDescription: Test photo session lcd flash anomalous branch
8190  */
8191 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_036, TestSize.Level0)
8192 {
8193     session_ = manager_->CreateCaptureSession(SceneMode::CAPTURE);
8194     ASSERT_NE(session_, nullptr);
8195 
8196     int32_t intResult = session_->BeginConfig();
8197     EXPECT_EQ(intResult, 0);
8198 
8199     intResult = session_->AddInput(input_);
8200     EXPECT_EQ(intResult, 0);
8201 
8202     sptr<CaptureOutput> previewOutput = CreatePreviewOutput();
8203     ASSERT_NE(previewOutput, nullptr);
8204 
8205     intResult = session_->AddOutput(previewOutput);
8206     EXPECT_EQ(intResult, 0);
8207 
8208     sptr<CaptureOutput> photoOutput = CreatePhotoOutput();
8209     ASSERT_NE(photoOutput, nullptr);
8210 
8211     intResult = session_->AddOutput(photoOutput);
8212     EXPECT_EQ(intResult, 0);
8213 
8214     intResult = session_->CommitConfig();
8215     EXPECT_EQ(intResult, 0);
8216 
8217     bool isSupported = session_->IsLcdFlashSupported();
8218     EXPECT_EQ(isSupported, false);
8219 }
8220 
8221 /*
8222  * Feature: Framework
8223  * Function: Test photo session tripod
8224  * SubFunction: NA
8225  * FunctionPoints: NA
8226  * EnvConditions: NA
8227  * CaseDescription: Test photo session tripod
8228  */
8229 HWTEST_F(CameraSessionModuleTest, photo_session_moduletest_037, TestSize.Level0)
8230 {
8231     session_ = manager_->CreateCaptureSession(SceneMode::CAPTURE);
8232     ASSERT_NE(session_, nullptr);
8233 
8234     int32_t intResult = session_->BeginConfig();
8235     EXPECT_EQ(intResult, 0);
8236 
8237     intResult = session_->AddInput(input_);
8238     EXPECT_EQ(intResult, 0);
8239 
8240     sptr<CaptureOutput> previewOutput = CreatePreviewOutput();
8241     ASSERT_NE(previewOutput, nullptr);
8242 
8243     intResult = session_->AddOutput(previewOutput);
8244     EXPECT_EQ(intResult, 0);
8245 
8246     intResult = session_->CommitConfig();
8247     EXPECT_EQ(intResult, 0);
8248 
8249     if (session_->IsTripodDetectionSupported()) {
8250         session_->SetFeatureDetectionStatusCallback(std::make_shared<AppCallback>());
8251         session_->EnableFeature(FEATURE_TRIPOD_DETECTION, true);
8252         EXPECT_EQ(intResult, 0);
8253     }
8254 
8255     intResult = session_->Start();
8256     EXPECT_EQ(intResult, 0);
8257 
8258     sleep(WAIT_TIME_AFTER_START);
8259 
8260     intResult = session_->Stop();
8261     EXPECT_EQ(intResult, 0);
8262 }
8263 
8264 /*
8265  * Feature: Framework
8266  * Function: Test video session with photo output
8267  * SubFunction: NA
8268  * FunctionPoints: NA
8269  * EnvConditions: NA
8270  * CaseDescription: Test can add photo output into video session
8271  */
8272 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_001, TestSize.Level0)
8273 {
8274     if (!IsSceneModeSupported(SceneMode::VIDEO)) {
8275         return;
8276     }
8277 
8278     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::VIDEO);
8279     ASSERT_NE(outputCapability, nullptr);
8280     auto previewProfiles = outputCapability->GetPreviewProfiles();
8281     ASSERT_FALSE(previewProfiles.empty());
8282     auto photoProfiles = outputCapability->GetPhotoProfiles();
8283     ASSERT_FALSE(photoProfiles.empty());
8284 
8285     auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
8286     auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
8287     ASSERT_NE(videoSession, nullptr);
8288     int32_t res = videoSession->BeginConfig();
8289     EXPECT_EQ(res, 0);
8290 
8291     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
8292     ASSERT_NE(input, nullptr);
8293     input->Open();
8294     res = videoSession->AddInput(input);
8295     EXPECT_EQ(res, 0);
8296     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
8297     ASSERT_NE(previewOutput, nullptr);
8298     EXPECT_TRUE(videoSession->CanAddOutput(previewOutput));
8299     res = videoSession->AddOutput(previewOutput);
8300     EXPECT_EQ(res, 0);
8301     sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
8302     ASSERT_NE(photoOutput, nullptr);
8303     EXPECT_TRUE(videoSession->CanAddOutput(photoOutput));
8304     res = videoSession->AddOutput(photoOutput);
8305     EXPECT_EQ(res, 0);
8306 
8307     res = videoSession->CommitConfig();
8308     EXPECT_EQ(res, 0);
8309     res = videoSession->Start();
8310     EXPECT_EQ(res, 0);
8311     sleep(WAIT_TIME_AFTER_START);
8312     res = static_cast<PhotoOutput*>(photoOutput.GetRefPtr())->Capture();
8313     EXPECT_EQ(res, 0);
8314     sleep(WAIT_TIME_AFTER_CAPTURE);
8315     res = videoSession->Stop();
8316     EXPECT_EQ(res, 0);
8317     res = videoSession->Release();
8318     EXPECT_EQ(res, 0);
8319 }
8320 
8321 /*
8322  * Feature: Framework
8323  * Function: Test video session with video output
8324  * SubFunction: NA
8325  * FunctionPoints: NA
8326  * EnvConditions: NA
8327  * CaseDescription: Test can add video output into video session
8328  */
8329 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_002, TestSize.Level0)
8330 {
8331     if (!IsSceneModeSupported(SceneMode::VIDEO)) {
8332         return;
8333     }
8334 
8335     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::VIDEO);
8336     ASSERT_NE(outputCapability, nullptr);
8337     auto previewProfiles = outputCapability->GetPreviewProfiles();
8338     ASSERT_FALSE(previewProfiles.empty());
8339     FilterPreviewProfiles(previewProfiles);
8340     ASSERT_FALSE(previewProfiles.empty());
8341     auto videoProfiles = outputCapability->GetVideoProfiles();
8342     ASSERT_FALSE(videoProfiles.empty());
8343 
8344     auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
8345     auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
8346     ASSERT_NE(videoSession, nullptr);
8347     int32_t res = videoSession->BeginConfig();
8348     EXPECT_EQ(res, 0);
8349 
8350     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
8351     ASSERT_NE(input, nullptr);
8352     input->Open();
8353     res = videoSession->AddInput(input);
8354     EXPECT_EQ(res, 0);
8355     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
8356     ASSERT_NE(previewOutput, nullptr);
8357     EXPECT_TRUE(videoSession->CanAddOutput(previewOutput));
8358     res = videoSession->AddOutput(previewOutput);
8359     EXPECT_EQ(res, 0);
8360     sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfiles[0]);
8361     ASSERT_NE(videoOutput, nullptr);
8362     EXPECT_TRUE(videoSession->CanAddOutput(videoOutput));
8363     res = videoSession->AddOutput(videoOutput);
8364     EXPECT_EQ(res, 0);
8365 
8366     res = videoSession->CommitConfig();
8367     EXPECT_EQ(res, 0);
8368     res = videoSession->Start();
8369     EXPECT_EQ(res, 0);
8370     sleep(WAIT_TIME_AFTER_START);
8371     res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Start();
8372     EXPECT_EQ(res, 0);
8373     sleep(WAIT_TIME_AFTER_START);
8374     res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Stop();
8375     EXPECT_EQ(res, 0);
8376     res = videoSession->Stop();
8377     EXPECT_EQ(res, 0);
8378     res = videoSession->Release();
8379     EXPECT_EQ(res, 0);
8380 }
8381 
8382 /*
8383  * Feature: Framework
8384  * Function: Test video session set frame rate range
8385  * SubFunction: NA
8386  * FunctionPoints: NA
8387  * EnvConditions: NA
8388  * CaseDescription: Test can set frame rate range into video session
8389  */
8390 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_003, TestSize.Level0)
8391 {
8392     if (!IsSceneModeSupported(SceneMode::VIDEO)) {
8393         return;
8394     }
8395 
8396     auto outputCapability = manager_->GetSupportedOutputCapability(cameras_[0], SceneMode::VIDEO);
8397     ASSERT_NE(outputCapability, nullptr);
8398     auto previewProfiles = outputCapability->GetPreviewProfiles();
8399     ASSERT_FALSE(previewProfiles.empty());
8400     FilterPreviewProfiles(previewProfiles);
8401     ASSERT_FALSE(previewProfiles.empty());
8402     auto photoProfiles = outputCapability->GetPhotoProfiles();
8403     ASSERT_FALSE(photoProfiles.empty());
8404     auto videoProfiles = outputCapability->GetVideoProfiles();
8405     ASSERT_FALSE(videoProfiles.empty());
8406 
8407     auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
8408     auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
8409     ASSERT_NE(videoSession, nullptr);
8410     int32_t res = videoSession->BeginConfig();
8411     EXPECT_EQ(res, 0);
8412 
8413     sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
8414     ASSERT_NE(input, nullptr);
8415     input->Open();
8416     res = videoSession->AddInput(input);
8417     EXPECT_EQ(res, 0);
8418     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfiles[0]);
8419     ASSERT_NE(previewOutput, nullptr);
8420     EXPECT_TRUE(videoSession->CanAddOutput(previewOutput));
8421     res = videoSession->AddOutput(previewOutput);
8422     EXPECT_EQ(res, 0);
8423     sptr<CaptureOutput> photoOutput = CreatePhotoOutput(photoProfiles[0]);
8424     ASSERT_NE(photoOutput, nullptr);
8425     EXPECT_TRUE(videoSession->CanAddOutput(photoOutput));
8426     res = videoSession->AddOutput(photoOutput);
8427     EXPECT_EQ(res, 0);
8428     sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfiles[0]);
8429     ASSERT_NE(videoOutput, nullptr);
8430     EXPECT_TRUE(videoSession->CanAddOutput(videoOutput));
8431     res = videoSession->AddOutput(videoOutput);
8432     EXPECT_EQ(res, 0);
8433 
8434     res = videoSession->CommitConfig();
8435     EXPECT_EQ(res, 0);
8436     res = videoSession->Start();
8437     EXPECT_EQ(res, 0);
8438     sleep(WAIT_TIME_AFTER_START);
8439 
8440     std::vector<std::vector<int32_t>> frameRateArray = ((sptr<VideoOutput>&)videoOutput)->GetSupportedFrameRates();
8441     ASSERT_NE(frameRateArray.size(), 0);
8442     std::vector<int32_t> frameRateRange = ((sptr<VideoOutput>&)videoOutput)->GetFrameRateRange();
8443     ASSERT_NE(frameRateRange.size(), 0);
8444     res = ((sptr<VideoOutput>&)videoOutput)->canSetFrameRateRange(DEFAULT_MIN_FRAME_RATE, DEFAULT_MAX_FRAME_RATE);
8445     EXPECT_EQ(res, 0);
8446     ((sptr<VideoOutput>&)videoOutput)->SetFrameRateRange(DEFAULT_MIN_FRAME_RATE, DEFAULT_MAX_FRAME_RATE);
8447     frameRateRange = ((sptr<VideoOutput>&)videoOutput)->GetFrameRateRange();
8448     ASSERT_NE(frameRateRange.size(), 0);
8449     EXPECT_EQ(frameRateRange[0], DEFAULT_MIN_FRAME_RATE);
8450     EXPECT_EQ(frameRateRange[1], DEFAULT_MAX_FRAME_RATE);
8451 
8452     res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Start();
8453     EXPECT_EQ(res, 0);
8454     sleep(WAIT_TIME_AFTER_START);
8455     res = static_cast<VideoOutput*>(videoOutput.GetRefPtr())->Stop();
8456     EXPECT_EQ(res, 0);
8457     EXPECT_EQ(res, 0);
8458     res = videoSession->Stop();
8459     EXPECT_EQ(res, 0);
8460     res = videoSession->Release();
8461     EXPECT_EQ(res, 0);
8462 }
8463 
8464 /*
8465  * Feature: Framework
8466  * Function: Test video session preconfig
8467  * SubFunction: NA
8468  * FunctionPoints: NA
8469  * EnvConditions: NA
8470  * CaseDescription: Test can preconfig video session with PRECONFIG_720P, UNSPECIFIED while supported
8471  */
8472 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_004, TestSize.Level0)
8473 {
8474     if (!IsSceneModeSupported(SceneMode::VIDEO)) {
8475         return;
8476     }
8477 
8478     auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
8479     auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
8480     ASSERT_NE(videoSession, nullptr);
8481     if (videoSession->CanPreconfig(PreconfigType::PRECONFIG_720P, ProfileSizeRatio::UNSPECIFIED)) {
8482         int32_t res = videoSession->Preconfig(PreconfigType::PRECONFIG_720P, ProfileSizeRatio::UNSPECIFIED);
8483         EXPECT_EQ(res, 0);
8484         res = videoSession->BeginConfig();
8485         EXPECT_EQ(res, 0);
8486 
8487         sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
8488         ASSERT_NE(input, nullptr);
8489         input->Open();
8490         res = videoSession->AddInput(input);
8491         EXPECT_EQ(res, 0);
8492 
8493         sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
8494         sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
8495         sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
8496         sptr<PreviewOutput> previewOutput = nullptr;
8497         res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
8498         EXPECT_EQ(res, 0);
8499         sptr<CaptureOutput> capturePreviewOutput = previewOutput;
8500         EXPECT_TRUE(videoSession->CanAddOutput(capturePreviewOutput));
8501         res = videoSession->AddOutput(capturePreviewOutput);
8502         EXPECT_EQ(res, 0);
8503         sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
8504         sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
8505         sptr<PhotoOutput> photoOutput = nullptr;
8506         res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
8507         EXPECT_EQ(res, 0);
8508         sptr<CaptureOutput> capturePhotoOutput = photoOutput;
8509         EXPECT_TRUE(videoSession->CanAddOutput(capturePhotoOutput));
8510         res = videoSession->AddOutput(capturePhotoOutput);
8511         EXPECT_EQ(res, 0);
8512         sptr<IConsumerSurface> videoSurface = IConsumerSurface::Create();
8513         sptr<IBufferProducer> videoProducer = videoSurface->GetProducer();
8514         sptr<Surface> producerVideoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
8515         sptr<VideoOutput> videoOutput = nullptr;
8516         res = manager_->CreateVideoOutputWithoutProfile(producerVideoSurface, &videoOutput);
8517         EXPECT_EQ(res, 0);
8518         sptr<CaptureOutput> captureVideoOutput = videoOutput;
8519         res = videoSession->AddOutput(captureVideoOutput);
8520         EXPECT_EQ(res, 0);
8521 
8522         res = videoSession->CommitConfig();
8523         EXPECT_EQ(res, 0);
8524         res = videoSession->Start();
8525         EXPECT_EQ(res, 0);
8526         sleep(WAIT_TIME_AFTER_START);
8527         res = videoOutput->Start();
8528         EXPECT_EQ(res, 0);
8529         sleep(WAIT_TIME_AFTER_START);
8530         res = videoOutput->Stop();
8531         EXPECT_EQ(res, 0);
8532         res = videoSession->Stop();
8533         EXPECT_EQ(res, 0);
8534     }
8535     EXPECT_EQ(videoSession->Release(), 0);
8536 }
8537 
8538 /*
8539  * Feature: Framework
8540  * Function: Test video session preconfig
8541  * SubFunction: NA
8542  * FunctionPoints: NA
8543  * EnvConditions: NA
8544  * CaseDescription: Test can preconfig video session with PRECONFIG_720P, RATIO_1_1 while supported
8545  */
8546 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_005, TestSize.Level0)
8547 {
8548     if (!IsSceneModeSupported(SceneMode::VIDEO)) {
8549         return;
8550     }
8551 
8552     auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
8553     auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
8554     ASSERT_NE(videoSession, nullptr);
8555     if (videoSession->CanPreconfig(PreconfigType::PRECONFIG_720P, ProfileSizeRatio::RATIO_1_1)) {
8556         int32_t res = videoSession->Preconfig(PreconfigType::PRECONFIG_720P, ProfileSizeRatio::RATIO_1_1);
8557         EXPECT_EQ(res, 0);
8558         res = videoSession->BeginConfig();
8559         EXPECT_EQ(res, 0);
8560 
8561         sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
8562         ASSERT_NE(input, nullptr);
8563         input->Open();
8564         res = videoSession->AddInput(input);
8565         EXPECT_EQ(res, 0);
8566 
8567         sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
8568         sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
8569         sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
8570         sptr<PreviewOutput> previewOutput = nullptr;
8571         res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
8572         EXPECT_EQ(res, 0);
8573         sptr<CaptureOutput> capturePreviewOutput = previewOutput;
8574         EXPECT_TRUE(videoSession->CanAddOutput(capturePreviewOutput));
8575         res = videoSession->AddOutput(capturePreviewOutput);
8576         EXPECT_EQ(res, 0);
8577         sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
8578         sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
8579         sptr<PhotoOutput> photoOutput = nullptr;
8580         res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
8581         EXPECT_EQ(res, 0);
8582         sptr<CaptureOutput> capturePhotoOutput = photoOutput;
8583         EXPECT_TRUE(videoSession->CanAddOutput(capturePhotoOutput));
8584         res = videoSession->AddOutput(capturePhotoOutput);
8585         EXPECT_EQ(res, 0);
8586         sptr<IConsumerSurface> videoSurface = IConsumerSurface::Create();
8587         sptr<IBufferProducer> videoProducer = videoSurface->GetProducer();
8588         sptr<Surface> producerVideoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
8589         sptr<VideoOutput> videoOutput = nullptr;
8590         res = manager_->CreateVideoOutputWithoutProfile(producerVideoSurface, &videoOutput);
8591         EXPECT_EQ(res, 0);
8592         sptr<CaptureOutput> captureVideoOutput = videoOutput;
8593         res = videoSession->AddOutput(captureVideoOutput);
8594         EXPECT_EQ(res, 0);
8595 
8596         res = videoSession->CommitConfig();
8597         EXPECT_EQ(res, 0);
8598         res = videoSession->Start();
8599         EXPECT_EQ(res, 0);
8600         sleep(WAIT_TIME_AFTER_START);
8601         res = videoOutput->Start();
8602         EXPECT_EQ(res, 0);
8603         sleep(WAIT_TIME_AFTER_START);
8604         res = videoOutput->Stop();
8605         EXPECT_EQ(res, 0);
8606         res = videoSession->Stop();
8607         EXPECT_EQ(res, 0);
8608     }
8609     EXPECT_EQ(videoSession->Release(), 0);
8610 }
8611 
8612 /*
8613  * Feature: Framework
8614  * Function: Test video session preconfig
8615  * SubFunction: NA
8616  * FunctionPoints: NA
8617  * EnvConditions: NA
8618  * CaseDescription: Test can preconfig video session with PRECONFIG_720P, RATIO_4_3 while supported
8619  */
8620 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_006, TestSize.Level0)
8621 {
8622     if (!IsSceneModeSupported(SceneMode::VIDEO)) {
8623         return;
8624     }
8625 
8626     auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
8627     auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
8628     ASSERT_NE(videoSession, nullptr);
8629     if (videoSession->CanPreconfig(PreconfigType::PRECONFIG_720P, ProfileSizeRatio::RATIO_4_3)) {
8630         int32_t res = videoSession->Preconfig(PreconfigType::PRECONFIG_720P, ProfileSizeRatio::RATIO_4_3);
8631         EXPECT_EQ(res, 0);
8632         res = videoSession->BeginConfig();
8633         EXPECT_EQ(res, 0);
8634 
8635         sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
8636         ASSERT_NE(input, nullptr);
8637         input->Open();
8638         res = videoSession->AddInput(input);
8639         EXPECT_EQ(res, 0);
8640 
8641         sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
8642         sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
8643         sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
8644         sptr<PreviewOutput> previewOutput = nullptr;
8645         res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
8646         EXPECT_EQ(res, 0);
8647         sptr<CaptureOutput> capturePreviewOutput = previewOutput;
8648         EXPECT_TRUE(videoSession->CanAddOutput(capturePreviewOutput));
8649         res = videoSession->AddOutput(capturePreviewOutput);
8650         EXPECT_EQ(res, 0);
8651         sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
8652         sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
8653         sptr<PhotoOutput> photoOutput = nullptr;
8654         res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
8655         EXPECT_EQ(res, 0);
8656         sptr<CaptureOutput> capturePhotoOutput = photoOutput;
8657         EXPECT_TRUE(videoSession->CanAddOutput(capturePhotoOutput));
8658         res = videoSession->AddOutput(capturePhotoOutput);
8659         EXPECT_EQ(res, 0);
8660         sptr<IConsumerSurface> videoSurface = IConsumerSurface::Create();
8661         sptr<IBufferProducer> videoProducer = videoSurface->GetProducer();
8662         sptr<Surface> producerVideoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
8663         sptr<VideoOutput> videoOutput = nullptr;
8664         res = manager_->CreateVideoOutputWithoutProfile(producerVideoSurface, &videoOutput);
8665         EXPECT_EQ(res, 0);
8666         sptr<CaptureOutput> captureVideoOutput = videoOutput;
8667         res = videoSession->AddOutput(captureVideoOutput);
8668         EXPECT_EQ(res, 0);
8669 
8670         res = videoSession->CommitConfig();
8671         EXPECT_EQ(res, 0);
8672         res = videoSession->Start();
8673         EXPECT_EQ(res, 0);
8674         sleep(WAIT_TIME_AFTER_START);
8675         res = videoOutput->Start();
8676         EXPECT_EQ(res, 0);
8677         sleep(WAIT_TIME_AFTER_START);
8678         res = videoOutput->Stop();
8679         EXPECT_EQ(res, 0);
8680         res = videoSession->Stop();
8681         EXPECT_EQ(res, 0);
8682     }
8683     EXPECT_EQ(videoSession->Release(), 0);
8684 }
8685 
8686 /*
8687  * Feature: Framework
8688  * Function: Test video session preconfig
8689  * SubFunction: NA
8690  * FunctionPoints: NA
8691  * EnvConditions: NA
8692  * CaseDescription: Test can preconfig video session with PRECONFIG_720P, RATIO_16_9 while supported
8693  */
8694 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_007, TestSize.Level0)
8695 {
8696     if (!IsSceneModeSupported(SceneMode::VIDEO)) {
8697         return;
8698     }
8699 
8700     auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
8701     auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
8702     ASSERT_NE(videoSession, nullptr);
8703     if (videoSession->CanPreconfig(PreconfigType::PRECONFIG_720P, ProfileSizeRatio::RATIO_16_9)) {
8704         int32_t res = videoSession->Preconfig(PreconfigType::PRECONFIG_720P, ProfileSizeRatio::RATIO_16_9);
8705         EXPECT_EQ(res, 0);
8706         res = videoSession->BeginConfig();
8707         EXPECT_EQ(res, 0);
8708 
8709         sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
8710         ASSERT_NE(input, nullptr);
8711         input->Open();
8712         res = videoSession->AddInput(input);
8713         EXPECT_EQ(res, 0);
8714 
8715         sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
8716         sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
8717         sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
8718         sptr<PreviewOutput> previewOutput = nullptr;
8719         res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
8720         EXPECT_EQ(res, 0);
8721         sptr<CaptureOutput> capturePreviewOutput = previewOutput;
8722         EXPECT_TRUE(videoSession->CanAddOutput(capturePreviewOutput));
8723         res = videoSession->AddOutput(capturePreviewOutput);
8724         EXPECT_EQ(res, 0);
8725         sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
8726         sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
8727         sptr<PhotoOutput> photoOutput = nullptr;
8728         res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
8729         EXPECT_EQ(res, 0);
8730         sptr<CaptureOutput> capturePhotoOutput = photoOutput;
8731         EXPECT_TRUE(videoSession->CanAddOutput(capturePhotoOutput));
8732         res = videoSession->AddOutput(capturePhotoOutput);
8733         EXPECT_EQ(res, 0);
8734         sptr<IConsumerSurface> videoSurface = IConsumerSurface::Create();
8735         sptr<IBufferProducer> videoProducer = videoSurface->GetProducer();
8736         sptr<Surface> producerVideoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
8737         sptr<VideoOutput> videoOutput = nullptr;
8738         res = manager_->CreateVideoOutputWithoutProfile(producerVideoSurface, &videoOutput);
8739         EXPECT_EQ(res, 0);
8740         sptr<CaptureOutput> captureVideoOutput = videoOutput;
8741         res = videoSession->AddOutput(captureVideoOutput);
8742         EXPECT_EQ(res, 0);
8743 
8744         res = videoSession->CommitConfig();
8745         EXPECT_EQ(res, 0);
8746         res = videoSession->Start();
8747         EXPECT_EQ(res, 0);
8748         sleep(WAIT_TIME_AFTER_START);
8749         res = videoOutput->Start();
8750         EXPECT_EQ(res, 0);
8751         sleep(WAIT_TIME_AFTER_START);
8752         res = videoOutput->Stop();
8753         EXPECT_EQ(res, 0);
8754         res = videoSession->Stop();
8755         EXPECT_EQ(res, 0);
8756     }
8757     EXPECT_EQ(videoSession->Release(), 0);
8758 }
8759 
8760 /*
8761  * Feature: Framework
8762  * Function: Test video session preconfig
8763  * SubFunction: NA
8764  * FunctionPoints: NA
8765  * EnvConditions: NA
8766  * CaseDescription: Test can preconfig video session with PRECONFIG_1080P, UNSPECIFIED while supported
8767  */
8768 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_008, TestSize.Level0)
8769 {
8770     if (!IsSceneModeSupported(SceneMode::VIDEO)) {
8771         return;
8772     }
8773 
8774     auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
8775     auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
8776     ASSERT_NE(videoSession, nullptr);
8777     if (videoSession->CanPreconfig(PreconfigType::PRECONFIG_1080P, ProfileSizeRatio::UNSPECIFIED)) {
8778         int32_t res = videoSession->Preconfig(PreconfigType::PRECONFIG_1080P, ProfileSizeRatio::UNSPECIFIED);
8779         EXPECT_EQ(res, 0);
8780         res = videoSession->BeginConfig();
8781         EXPECT_EQ(res, 0);
8782 
8783         sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
8784         ASSERT_NE(input, nullptr);
8785         input->Open();
8786         res = videoSession->AddInput(input);
8787         EXPECT_EQ(res, 0);
8788 
8789         sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
8790         sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
8791         sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
8792         sptr<PreviewOutput> previewOutput = nullptr;
8793         res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
8794         EXPECT_EQ(res, 0);
8795         sptr<CaptureOutput> capturePreviewOutput = previewOutput;
8796         EXPECT_TRUE(videoSession->CanAddOutput(capturePreviewOutput));
8797         res = videoSession->AddOutput(capturePreviewOutput);
8798         EXPECT_EQ(res, 0);
8799         sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
8800         sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
8801         sptr<PhotoOutput> photoOutput = nullptr;
8802         res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
8803         EXPECT_EQ(res, 0);
8804         sptr<CaptureOutput> capturePhotoOutput = photoOutput;
8805         EXPECT_TRUE(videoSession->CanAddOutput(capturePhotoOutput));
8806         res = videoSession->AddOutput(capturePhotoOutput);
8807         EXPECT_EQ(res, 0);
8808         sptr<IConsumerSurface> videoSurface = IConsumerSurface::Create();
8809         sptr<IBufferProducer> videoProducer = videoSurface->GetProducer();
8810         sptr<Surface> producerVideoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
8811         sptr<VideoOutput> videoOutput = nullptr;
8812         res = manager_->CreateVideoOutputWithoutProfile(producerVideoSurface, &videoOutput);
8813         EXPECT_EQ(res, 0);
8814         sptr<CaptureOutput> captureVideoOutput = videoOutput;
8815         res = videoSession->AddOutput(captureVideoOutput);
8816         EXPECT_EQ(res, 0);
8817 
8818         res = videoSession->CommitConfig();
8819         EXPECT_EQ(res, 0);
8820         res = videoSession->Start();
8821         EXPECT_EQ(res, 0);
8822         sleep(WAIT_TIME_AFTER_START);
8823         res = videoOutput->Start();
8824         EXPECT_EQ(res, 0);
8825         sleep(WAIT_TIME_AFTER_START);
8826         res = videoOutput->Stop();
8827         EXPECT_EQ(res, 0);
8828         res = videoSession->Stop();
8829         EXPECT_EQ(res, 0);
8830     }
8831     EXPECT_EQ(videoSession->Release(), 0);
8832 }
8833 
8834 /*
8835  * Feature: Framework
8836  * Function: Test video session preconfig
8837  * SubFunction: NA
8838  * FunctionPoints: NA
8839  * EnvConditions: NA
8840  * CaseDescription: Test can preconfig video session with PRECONFIG_1080P, RATIO_1_1 while supported
8841  */
8842 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_009, TestSize.Level0)
8843 {
8844     if (!IsSceneModeSupported(SceneMode::VIDEO)) {
8845         return;
8846     }
8847 
8848     auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
8849     auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
8850     ASSERT_NE(videoSession, nullptr);
8851     if (videoSession->CanPreconfig(PreconfigType::PRECONFIG_1080P, ProfileSizeRatio::RATIO_1_1)) {
8852         int32_t res = videoSession->Preconfig(PreconfigType::PRECONFIG_1080P, ProfileSizeRatio::RATIO_1_1);
8853         EXPECT_EQ(res, 0);
8854         res = videoSession->BeginConfig();
8855         EXPECT_EQ(res, 0);
8856 
8857         sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
8858         ASSERT_NE(input, nullptr);
8859         input->Open();
8860         res = videoSession->AddInput(input);
8861         EXPECT_EQ(res, 0);
8862 
8863         sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
8864         sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
8865         sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
8866         sptr<PreviewOutput> previewOutput = nullptr;
8867         res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
8868         EXPECT_EQ(res, 0);
8869         sptr<CaptureOutput> capturePreviewOutput = previewOutput;
8870         EXPECT_TRUE(videoSession->CanAddOutput(capturePreviewOutput));
8871         res = videoSession->AddOutput(capturePreviewOutput);
8872         EXPECT_EQ(res, 0);
8873         sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
8874         sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
8875         sptr<PhotoOutput> photoOutput = nullptr;
8876         res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
8877         EXPECT_EQ(res, 0);
8878         sptr<CaptureOutput> capturePhotoOutput = photoOutput;
8879         EXPECT_TRUE(videoSession->CanAddOutput(capturePhotoOutput));
8880         res = videoSession->AddOutput(capturePhotoOutput);
8881         EXPECT_EQ(res, 0);
8882         sptr<IConsumerSurface> videoSurface = IConsumerSurface::Create();
8883         sptr<IBufferProducer> videoProducer = videoSurface->GetProducer();
8884         sptr<Surface> producerVideoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
8885         sptr<VideoOutput> videoOutput = nullptr;
8886         res = manager_->CreateVideoOutputWithoutProfile(producerVideoSurface, &videoOutput);
8887         EXPECT_EQ(res, 0);
8888         sptr<CaptureOutput> captureVideoOutput = videoOutput;
8889         res = videoSession->AddOutput(captureVideoOutput);
8890         EXPECT_EQ(res, 0);
8891 
8892         res = videoSession->CommitConfig();
8893         EXPECT_EQ(res, 0);
8894         res = videoSession->Start();
8895         EXPECT_EQ(res, 0);
8896         sleep(WAIT_TIME_AFTER_START);
8897         res = videoOutput->Start();
8898         EXPECT_EQ(res, 0);
8899         sleep(WAIT_TIME_AFTER_START);
8900         res = videoOutput->Stop();
8901         EXPECT_EQ(res, 0);
8902         res = videoSession->Stop();
8903         EXPECT_EQ(res, 0);
8904     }
8905     EXPECT_EQ(videoSession->Release(), 0);
8906 }
8907 
8908 /*
8909  * Feature: Framework
8910  * Function: Test video session preconfig
8911  * SubFunction: NA
8912  * FunctionPoints: NA
8913  * EnvConditions: NA
8914  * CaseDescription: Test can preconfig video session with PRECONFIG_1080P, RATIO_4_3 while supported
8915  */
8916 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_010, TestSize.Level0)
8917 {
8918     if (!IsSceneModeSupported(SceneMode::VIDEO)) {
8919         return;
8920     }
8921 
8922     auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
8923     auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
8924     ASSERT_NE(videoSession, nullptr);
8925     if (videoSession->CanPreconfig(PreconfigType::PRECONFIG_1080P, ProfileSizeRatio::RATIO_4_3)) {
8926         int32_t res = videoSession->Preconfig(PreconfigType::PRECONFIG_1080P, ProfileSizeRatio::RATIO_4_3);
8927         EXPECT_EQ(res, 0);
8928         res = videoSession->BeginConfig();
8929         EXPECT_EQ(res, 0);
8930 
8931         sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
8932         ASSERT_NE(input, nullptr);
8933         input->Open();
8934         res = videoSession->AddInput(input);
8935         EXPECT_EQ(res, 0);
8936 
8937         sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
8938         sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
8939         sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
8940         sptr<PreviewOutput> previewOutput = nullptr;
8941         res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
8942         EXPECT_EQ(res, 0);
8943         sptr<CaptureOutput> capturePreviewOutput = previewOutput;
8944         EXPECT_TRUE(videoSession->CanAddOutput(capturePreviewOutput));
8945         res = videoSession->AddOutput(capturePreviewOutput);
8946         EXPECT_EQ(res, 0);
8947         sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
8948         sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
8949         sptr<PhotoOutput> photoOutput = nullptr;
8950         res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
8951         EXPECT_EQ(res, 0);
8952         sptr<CaptureOutput> capturePhotoOutput = photoOutput;
8953         EXPECT_TRUE(videoSession->CanAddOutput(capturePhotoOutput));
8954         res = videoSession->AddOutput(capturePhotoOutput);
8955         EXPECT_EQ(res, 0);
8956         sptr<IConsumerSurface> videoSurface = IConsumerSurface::Create();
8957         sptr<IBufferProducer> videoProducer = videoSurface->GetProducer();
8958         sptr<Surface> producerVideoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
8959         sptr<VideoOutput> videoOutput = nullptr;
8960         res = manager_->CreateVideoOutputWithoutProfile(producerVideoSurface, &videoOutput);
8961         EXPECT_EQ(res, 0);
8962         sptr<CaptureOutput> captureVideoOutput = videoOutput;
8963         res = videoSession->AddOutput(captureVideoOutput);
8964         EXPECT_EQ(res, 0);
8965 
8966         res = videoSession->CommitConfig();
8967         EXPECT_EQ(res, 0);
8968         res = videoSession->Start();
8969         EXPECT_EQ(res, 0);
8970         sleep(WAIT_TIME_AFTER_START);
8971         res = videoOutput->Start();
8972         EXPECT_EQ(res, 0);
8973         sleep(WAIT_TIME_AFTER_START);
8974         res = videoOutput->Stop();
8975         EXPECT_EQ(res, 0);
8976         res = videoSession->Stop();
8977         EXPECT_EQ(res, 0);
8978     }
8979     EXPECT_EQ(videoSession->Release(), 0);
8980 }
8981 
8982 /*
8983  * Feature: Framework
8984  * Function: Test video session preconfig
8985  * SubFunction: NA
8986  * FunctionPoints: NA
8987  * EnvConditions: NA
8988  * CaseDescription: Test can preconfig video session with PRECONFIG_1080P, RATIO_16_9 while supported
8989  */
8990 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_011, TestSize.Level0)
8991 {
8992     if (!IsSceneModeSupported(SceneMode::VIDEO)) {
8993         return;
8994     }
8995 
8996     auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
8997     auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
8998     ASSERT_NE(videoSession, nullptr);
8999     if (videoSession->CanPreconfig(PreconfigType::PRECONFIG_1080P, ProfileSizeRatio::RATIO_16_9)) {
9000         int32_t res = videoSession->Preconfig(PreconfigType::PRECONFIG_1080P, ProfileSizeRatio::RATIO_16_9);
9001         EXPECT_EQ(res, 0);
9002         res = videoSession->BeginConfig();
9003         EXPECT_EQ(res, 0);
9004 
9005         sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
9006         ASSERT_NE(input, nullptr);
9007         input->Open();
9008         res = videoSession->AddInput(input);
9009         EXPECT_EQ(res, 0);
9010 
9011         sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
9012         sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
9013         sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
9014         sptr<PreviewOutput> previewOutput = nullptr;
9015         res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
9016         EXPECT_EQ(res, 0);
9017         sptr<CaptureOutput> capturePreviewOutput = previewOutput;
9018         EXPECT_TRUE(videoSession->CanAddOutput(capturePreviewOutput));
9019         res = videoSession->AddOutput(capturePreviewOutput);
9020         EXPECT_EQ(res, 0);
9021         sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
9022         sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
9023         sptr<PhotoOutput> photoOutput = nullptr;
9024         res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
9025         EXPECT_EQ(res, 0);
9026         sptr<CaptureOutput> capturePhotoOutput = photoOutput;
9027         EXPECT_TRUE(videoSession->CanAddOutput(capturePhotoOutput));
9028         res = videoSession->AddOutput(capturePhotoOutput);
9029         EXPECT_EQ(res, 0);
9030         sptr<IConsumerSurface> videoSurface = IConsumerSurface::Create();
9031         sptr<IBufferProducer> videoProducer = videoSurface->GetProducer();
9032         sptr<Surface> producerVideoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
9033         sptr<VideoOutput> videoOutput = nullptr;
9034         res = manager_->CreateVideoOutputWithoutProfile(producerVideoSurface, &videoOutput);
9035         EXPECT_EQ(res, 0);
9036         sptr<CaptureOutput> captureVideoOutput = videoOutput;
9037         res = videoSession->AddOutput(captureVideoOutput);
9038         EXPECT_EQ(res, 0);
9039 
9040         res = videoSession->CommitConfig();
9041         EXPECT_EQ(res, 0);
9042         res = videoSession->Start();
9043         EXPECT_EQ(res, 0);
9044         sleep(WAIT_TIME_AFTER_START);
9045         res = videoOutput->Start();
9046         EXPECT_EQ(res, 0);
9047         sleep(WAIT_TIME_AFTER_START);
9048         res = videoOutput->Stop();
9049         EXPECT_EQ(res, 0);
9050         res = videoSession->Stop();
9051         EXPECT_EQ(res, 0);
9052     }
9053     EXPECT_EQ(videoSession->Release(), 0);
9054 }
9055 
9056 /*
9057  * Feature: Framework
9058  * Function: Test video session preconfig
9059  * SubFunction: NA
9060  * FunctionPoints: NA
9061  * EnvConditions: NA
9062  * CaseDescription: Test can preconfig video session with PRECONFIG_4K, UNSPECIFIED while supported
9063  */
9064 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_012, TestSize.Level0)
9065 {
9066     if (!IsSceneModeSupported(SceneMode::VIDEO)) {
9067         return;
9068     }
9069 
9070     auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
9071     auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
9072     ASSERT_NE(videoSession, nullptr);
9073     if (videoSession->CanPreconfig(PreconfigType::PRECONFIG_4K, ProfileSizeRatio::UNSPECIFIED)) {
9074         int32_t res = videoSession->Preconfig(PreconfigType::PRECONFIG_4K, ProfileSizeRatio::UNSPECIFIED);
9075         EXPECT_EQ(res, 0);
9076         res = videoSession->BeginConfig();
9077         EXPECT_EQ(res, 0);
9078 
9079         sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
9080         ASSERT_NE(input, nullptr);
9081         input->Open();
9082         res = videoSession->AddInput(input);
9083         EXPECT_EQ(res, 0);
9084 
9085         sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
9086         sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
9087         sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
9088         sptr<PreviewOutput> previewOutput = nullptr;
9089         res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
9090         EXPECT_EQ(res, 0);
9091         sptr<CaptureOutput> capturePreviewOutput = previewOutput;
9092         EXPECT_TRUE(videoSession->CanAddOutput(capturePreviewOutput));
9093         res = videoSession->AddOutput(capturePreviewOutput);
9094         EXPECT_EQ(res, 0);
9095         sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
9096         sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
9097         sptr<PhotoOutput> photoOutput = nullptr;
9098         res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
9099         EXPECT_EQ(res, 0);
9100         sptr<CaptureOutput> capturePhotoOutput = photoOutput;
9101         EXPECT_TRUE(videoSession->CanAddOutput(capturePhotoOutput));
9102         res = videoSession->AddOutput(capturePhotoOutput);
9103         EXPECT_EQ(res, 0);
9104         sptr<IConsumerSurface> videoSurface = IConsumerSurface::Create();
9105         sptr<IBufferProducer> videoProducer = videoSurface->GetProducer();
9106         sptr<Surface> producerVideoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
9107         sptr<VideoOutput> videoOutput = nullptr;
9108         res = manager_->CreateVideoOutputWithoutProfile(producerVideoSurface, &videoOutput);
9109         EXPECT_EQ(res, 0);
9110         sptr<CaptureOutput> captureVideoOutput = videoOutput;
9111         res = videoSession->AddOutput(captureVideoOutput);
9112         EXPECT_EQ(res, 0);
9113 
9114         res = videoSession->CommitConfig();
9115         EXPECT_EQ(res, 0);
9116         res = videoSession->Start();
9117         EXPECT_EQ(res, 0);
9118         sleep(WAIT_TIME_AFTER_START);
9119         res = videoOutput->Start();
9120         EXPECT_EQ(res, 0);
9121         sleep(WAIT_TIME_AFTER_START);
9122         res = videoOutput->Stop();
9123         EXPECT_EQ(res, 0);
9124         res = videoSession->Stop();
9125         EXPECT_EQ(res, 0);
9126     }
9127     EXPECT_EQ(videoSession->Release(), 0);
9128 }
9129 
9130 /*
9131  * Feature: Framework
9132  * Function: Test video session preconfig
9133  * SubFunction: NA
9134  * FunctionPoints: NA
9135  * EnvConditions: NA
9136  * CaseDescription: Test can preconfig video session with PRECONFIG_4K, RATIO_1_1 while supported
9137  */
9138 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_013, TestSize.Level0)
9139 {
9140     if (!IsSceneModeSupported(SceneMode::VIDEO)) {
9141         return;
9142     }
9143 
9144     auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
9145     auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
9146     ASSERT_NE(videoSession, nullptr);
9147     if (videoSession->CanPreconfig(PreconfigType::PRECONFIG_4K, ProfileSizeRatio::RATIO_1_1)) {
9148         int32_t res = videoSession->Preconfig(PreconfigType::PRECONFIG_4K, ProfileSizeRatio::RATIO_1_1);
9149         EXPECT_EQ(res, 0);
9150         res = videoSession->BeginConfig();
9151         EXPECT_EQ(res, 0);
9152 
9153         sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
9154         ASSERT_NE(input, nullptr);
9155         input->Open();
9156         res = videoSession->AddInput(input);
9157         EXPECT_EQ(res, 0);
9158 
9159         sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
9160         sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
9161         sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
9162         sptr<PreviewOutput> previewOutput = nullptr;
9163         res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
9164         EXPECT_EQ(res, 0);
9165         sptr<CaptureOutput> capturePreviewOutput = previewOutput;
9166         EXPECT_TRUE(videoSession->CanAddOutput(capturePreviewOutput));
9167         res = videoSession->AddOutput(capturePreviewOutput);
9168         EXPECT_EQ(res, 0);
9169         sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
9170         sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
9171         sptr<PhotoOutput> photoOutput = nullptr;
9172         res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
9173         EXPECT_EQ(res, 0);
9174         sptr<CaptureOutput> capturePhotoOutput = photoOutput;
9175         EXPECT_TRUE(videoSession->CanAddOutput(capturePhotoOutput));
9176         res = videoSession->AddOutput(capturePhotoOutput);
9177         EXPECT_EQ(res, 0);
9178         sptr<IConsumerSurface> videoSurface = IConsumerSurface::Create();
9179         sptr<IBufferProducer> videoProducer = videoSurface->GetProducer();
9180         sptr<Surface> producerVideoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
9181         sptr<VideoOutput> videoOutput = nullptr;
9182         res = manager_->CreateVideoOutputWithoutProfile(producerVideoSurface, &videoOutput);
9183         EXPECT_EQ(res, 0);
9184         sptr<CaptureOutput> captureVideoOutput = videoOutput;
9185         res = videoSession->AddOutput(captureVideoOutput);
9186         EXPECT_EQ(res, 0);
9187 
9188         res = videoSession->CommitConfig();
9189         EXPECT_EQ(res, 0);
9190         res = videoSession->Start();
9191         EXPECT_EQ(res, 0);
9192         sleep(WAIT_TIME_AFTER_START);
9193         res = videoOutput->Start();
9194         EXPECT_EQ(res, 0);
9195         sleep(WAIT_TIME_AFTER_START);
9196         res = videoOutput->Stop();
9197         EXPECT_EQ(res, 0);
9198         res = videoSession->Stop();
9199         EXPECT_EQ(res, 0);
9200     }
9201     EXPECT_EQ(videoSession->Release(), 0);
9202 }
9203 
9204 /*
9205  * Feature: Framework
9206  * Function: Test video session preconfig
9207  * SubFunction: NA
9208  * FunctionPoints: NA
9209  * EnvConditions: NA
9210  * CaseDescription: Test can preconfig video session with PRECONFIG_4K, RATIO_4_3 while supported
9211  */
9212 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_014, TestSize.Level0)
9213 {
9214     if (!IsSceneModeSupported(SceneMode::VIDEO)) {
9215         return;
9216     }
9217 
9218     auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
9219     auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
9220     ASSERT_NE(videoSession, nullptr);
9221     if (videoSession->CanPreconfig(PreconfigType::PRECONFIG_4K, ProfileSizeRatio::RATIO_4_3)) {
9222         int32_t res = videoSession->Preconfig(PreconfigType::PRECONFIG_4K, ProfileSizeRatio::RATIO_4_3);
9223         EXPECT_EQ(res, 0);
9224         res = videoSession->BeginConfig();
9225         EXPECT_EQ(res, 0);
9226 
9227         sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
9228         ASSERT_NE(input, nullptr);
9229         input->Open();
9230         res = videoSession->AddInput(input);
9231         EXPECT_EQ(res, 0);
9232 
9233         sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
9234         sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
9235         sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
9236         sptr<PreviewOutput> previewOutput = nullptr;
9237         res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
9238         EXPECT_EQ(res, 0);
9239         sptr<CaptureOutput> capturePreviewOutput = previewOutput;
9240         EXPECT_TRUE(videoSession->CanAddOutput(capturePreviewOutput));
9241         res = videoSession->AddOutput(capturePreviewOutput);
9242         EXPECT_EQ(res, 0);
9243         sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
9244         sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
9245         sptr<PhotoOutput> photoOutput = nullptr;
9246         res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
9247         EXPECT_EQ(res, 0);
9248         sptr<CaptureOutput> capturePhotoOutput = photoOutput;
9249         EXPECT_TRUE(videoSession->CanAddOutput(capturePhotoOutput));
9250         res = videoSession->AddOutput(capturePhotoOutput);
9251         EXPECT_EQ(res, 0);
9252         sptr<IConsumerSurface> videoSurface = IConsumerSurface::Create();
9253         sptr<IBufferProducer> videoProducer = videoSurface->GetProducer();
9254         sptr<Surface> producerVideoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
9255         sptr<VideoOutput> videoOutput = nullptr;
9256         res = manager_->CreateVideoOutputWithoutProfile(producerVideoSurface, &videoOutput);
9257         EXPECT_EQ(res, 0);
9258         sptr<CaptureOutput> captureVideoOutput = videoOutput;
9259         res = videoSession->AddOutput(captureVideoOutput);
9260         EXPECT_EQ(res, 0);
9261 
9262         res = videoSession->CommitConfig();
9263         EXPECT_EQ(res, 0);
9264         res = videoSession->Start();
9265         EXPECT_EQ(res, 0);
9266         sleep(WAIT_TIME_AFTER_START);
9267         res = videoOutput->Start();
9268         EXPECT_EQ(res, 0);
9269         sleep(WAIT_TIME_AFTER_START);
9270         res = videoOutput->Stop();
9271         EXPECT_EQ(res, 0);
9272         res = videoSession->Stop();
9273         EXPECT_EQ(res, 0);
9274     }
9275     EXPECT_EQ(videoSession->Release(), 0);
9276 }
9277 
9278 /*
9279  * Feature: Framework
9280  * Function: Test video session preconfig
9281  * SubFunction: NA
9282  * FunctionPoints: NA
9283  * EnvConditions: NA
9284  * CaseDescription: Test can preconfig video session with PRECONFIG_4K, RATIO_16_9 while supported
9285  */
9286 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_015, TestSize.Level0)
9287 {
9288     if (!IsSceneModeSupported(SceneMode::VIDEO)) {
9289         return;
9290     }
9291 
9292     auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
9293     auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
9294     ASSERT_NE(videoSession, nullptr);
9295     if (videoSession->CanPreconfig(PreconfigType::PRECONFIG_4K, ProfileSizeRatio::RATIO_16_9)) {
9296         int32_t res = videoSession->Preconfig(PreconfigType::PRECONFIG_4K, ProfileSizeRatio::RATIO_16_9);
9297         EXPECT_EQ(res, 0);
9298         res = videoSession->BeginConfig();
9299         EXPECT_EQ(res, 0);
9300 
9301         sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
9302         ASSERT_NE(input, nullptr);
9303         input->Open();
9304         res = videoSession->AddInput(input);
9305         EXPECT_EQ(res, 0);
9306 
9307         sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
9308         sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
9309         sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
9310         sptr<PreviewOutput> previewOutput = nullptr;
9311         res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
9312         EXPECT_EQ(res, 0);
9313         sptr<CaptureOutput> capturePreviewOutput = previewOutput;
9314         EXPECT_TRUE(videoSession->CanAddOutput(capturePreviewOutput));
9315         res = videoSession->AddOutput(capturePreviewOutput);
9316         EXPECT_EQ(res, 0);
9317         sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
9318         sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
9319         sptr<PhotoOutput> photoOutput = nullptr;
9320         res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
9321         EXPECT_EQ(res, 0);
9322         sptr<CaptureOutput> capturePhotoOutput = photoOutput;
9323         EXPECT_TRUE(videoSession->CanAddOutput(capturePhotoOutput));
9324         res = videoSession->AddOutput(capturePhotoOutput);
9325         EXPECT_EQ(res, 0);
9326         sptr<IConsumerSurface> videoSurface = IConsumerSurface::Create();
9327         sptr<IBufferProducer> videoProducer = videoSurface->GetProducer();
9328         sptr<Surface> producerVideoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
9329         sptr<VideoOutput> videoOutput = nullptr;
9330         res = manager_->CreateVideoOutputWithoutProfile(producerVideoSurface, &videoOutput);
9331         EXPECT_EQ(res, 0);
9332         sptr<CaptureOutput> captureVideoOutput = videoOutput;
9333         res = videoSession->AddOutput(captureVideoOutput);
9334         EXPECT_EQ(res, 0);
9335 
9336         res = videoSession->CommitConfig();
9337         EXPECT_EQ(res, 0);
9338         res = videoSession->Start();
9339         EXPECT_EQ(res, 0);
9340         sleep(WAIT_TIME_AFTER_START);
9341         res = videoOutput->Start();
9342         EXPECT_EQ(res, 0);
9343         sleep(WAIT_TIME_AFTER_START);
9344         res = videoOutput->Stop();
9345         EXPECT_EQ(res, 0);
9346         res = videoSession->Stop();
9347         EXPECT_EQ(res, 0);
9348     }
9349     EXPECT_EQ(videoSession->Release(), 0);
9350 }
9351 
9352 /*
9353  * Feature: Framework
9354  * Function: Test video session preconfig
9355  * SubFunction: NA
9356  * FunctionPoints: NA
9357  * EnvConditions: NA
9358  * CaseDescription: Test can preconfig video session with PRECONFIG_HIGH_QUALITY, UNSPECIFIED while supported
9359  */
9360 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_016, TestSize.Level0)
9361 {
9362     if (!IsSceneModeSupported(SceneMode::VIDEO)) {
9363         return;
9364     }
9365 
9366     auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
9367     auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
9368     ASSERT_NE(videoSession, nullptr);
9369     if (videoSession->CanPreconfig(PreconfigType::PRECONFIG_HIGH_QUALITY, ProfileSizeRatio::UNSPECIFIED)) {
9370         int32_t res = videoSession->Preconfig(PreconfigType::PRECONFIG_HIGH_QUALITY, ProfileSizeRatio::UNSPECIFIED);
9371         EXPECT_EQ(res, 0);
9372         res = videoSession->BeginConfig();
9373         EXPECT_EQ(res, 0);
9374 
9375         sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
9376         ASSERT_NE(input, nullptr);
9377         input->Open();
9378         res = videoSession->AddInput(input);
9379         EXPECT_EQ(res, 0);
9380 
9381         sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
9382         sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
9383         sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
9384         sptr<PreviewOutput> previewOutput = nullptr;
9385         res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
9386         EXPECT_EQ(res, 0);
9387         sptr<CaptureOutput> capturePreviewOutput = previewOutput;
9388         EXPECT_TRUE(videoSession->CanAddOutput(capturePreviewOutput));
9389         res = videoSession->AddOutput(capturePreviewOutput);
9390         EXPECT_EQ(res, 0);
9391         sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
9392         sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
9393         sptr<PhotoOutput> photoOutput = nullptr;
9394         res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
9395         EXPECT_EQ(res, 0);
9396         sptr<CaptureOutput> capturePhotoOutput = photoOutput;
9397         EXPECT_TRUE(videoSession->CanAddOutput(capturePhotoOutput));
9398         res = videoSession->AddOutput(capturePhotoOutput);
9399         EXPECT_EQ(res, 0);
9400         sptr<IConsumerSurface> videoSurface = IConsumerSurface::Create();
9401         sptr<IBufferProducer> videoProducer = videoSurface->GetProducer();
9402         sptr<Surface> producerVideoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
9403         sptr<VideoOutput> videoOutput = nullptr;
9404         res = manager_->CreateVideoOutputWithoutProfile(producerVideoSurface, &videoOutput);
9405         EXPECT_EQ(res, 0);
9406         sptr<CaptureOutput> captureVideoOutput = videoOutput;
9407         res = videoSession->AddOutput(captureVideoOutput);
9408         EXPECT_EQ(res, 0);
9409 
9410         res = videoSession->CommitConfig();
9411         EXPECT_EQ(res, 0);
9412         res = videoSession->Start();
9413         EXPECT_EQ(res, 0);
9414         sleep(WAIT_TIME_AFTER_START);
9415         res = videoOutput->Start();
9416         EXPECT_EQ(res, 0);
9417         sleep(WAIT_TIME_AFTER_START);
9418         res = videoOutput->Stop();
9419         EXPECT_EQ(res, 0);
9420         res = videoSession->Stop();
9421         EXPECT_EQ(res, 0);
9422     }
9423     EXPECT_EQ(videoSession->Release(), 0);
9424 }
9425 
9426 /*
9427  * Feature: Framework
9428  * Function: Test video session preconfig
9429  * SubFunction: NA
9430  * FunctionPoints: NA
9431  * EnvConditions: NA
9432  * CaseDescription: Test can preconfig video session with PRECONFIG_HIGH_QUALITY, RATIO_1_1 while supported
9433  */
9434 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_017, TestSize.Level0)
9435 {
9436     if (!IsSceneModeSupported(SceneMode::VIDEO)) {
9437         return;
9438     }
9439 
9440     auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
9441     auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
9442     ASSERT_NE(videoSession, nullptr);
9443     if (videoSession->CanPreconfig(PreconfigType::PRECONFIG_HIGH_QUALITY, ProfileSizeRatio::RATIO_1_1)) {
9444         int32_t res = videoSession->Preconfig(PreconfigType::PRECONFIG_HIGH_QUALITY, ProfileSizeRatio::RATIO_1_1);
9445         EXPECT_EQ(res, 0);
9446         res = videoSession->BeginConfig();
9447         EXPECT_EQ(res, 0);
9448 
9449         sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
9450         ASSERT_NE(input, nullptr);
9451         input->Open();
9452         res = videoSession->AddInput(input);
9453         EXPECT_EQ(res, 0);
9454 
9455         sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
9456         sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
9457         sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
9458         sptr<PreviewOutput> previewOutput = nullptr;
9459         res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
9460         EXPECT_EQ(res, 0);
9461         sptr<CaptureOutput> capturePreviewOutput = previewOutput;
9462         EXPECT_TRUE(videoSession->CanAddOutput(capturePreviewOutput));
9463         res = videoSession->AddOutput(capturePreviewOutput);
9464         EXPECT_EQ(res, 0);
9465         sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
9466         sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
9467         sptr<PhotoOutput> photoOutput = nullptr;
9468         res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
9469         EXPECT_EQ(res, 0);
9470         sptr<CaptureOutput> capturePhotoOutput = photoOutput;
9471         EXPECT_TRUE(videoSession->CanAddOutput(capturePhotoOutput));
9472         res = videoSession->AddOutput(capturePhotoOutput);
9473         EXPECT_EQ(res, 0);
9474         sptr<IConsumerSurface> videoSurface = IConsumerSurface::Create();
9475         sptr<IBufferProducer> videoProducer = videoSurface->GetProducer();
9476         sptr<Surface> producerVideoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
9477         sptr<VideoOutput> videoOutput = nullptr;
9478         res = manager_->CreateVideoOutputWithoutProfile(producerVideoSurface, &videoOutput);
9479         EXPECT_EQ(res, 0);
9480         sptr<CaptureOutput> captureVideoOutput = videoOutput;
9481         res = videoSession->AddOutput(captureVideoOutput);
9482         EXPECT_EQ(res, 0);
9483 
9484         res = videoSession->CommitConfig();
9485         EXPECT_EQ(res, 0);
9486         res = videoSession->Start();
9487         EXPECT_EQ(res, 0);
9488         sleep(WAIT_TIME_AFTER_START);
9489         res = videoOutput->Start();
9490         EXPECT_EQ(res, 0);
9491         sleep(WAIT_TIME_AFTER_START);
9492         res = videoOutput->Stop();
9493         EXPECT_EQ(res, 0);
9494         res = videoSession->Stop();
9495         EXPECT_EQ(res, 0);
9496     }
9497     EXPECT_EQ(videoSession->Release(), 0);
9498 }
9499 
9500 /*
9501  * Feature: Framework
9502  * Function: Test video session preconfig
9503  * SubFunction: NA
9504  * FunctionPoints: NA
9505  * EnvConditions: NA
9506  * CaseDescription: Test can preconfig video session with PRECONFIG_HIGH_QUALITY, RATIO_4_3 while supported
9507  */
9508 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_018, TestSize.Level0)
9509 {
9510     if (!IsSceneModeSupported(SceneMode::VIDEO)) {
9511         return;
9512     }
9513 
9514     auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
9515     auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
9516     ASSERT_NE(videoSession, nullptr);
9517     if (videoSession->CanPreconfig(PreconfigType::PRECONFIG_HIGH_QUALITY, ProfileSizeRatio::RATIO_4_3)) {
9518         int32_t res = videoSession->Preconfig(PreconfigType::PRECONFIG_HIGH_QUALITY, ProfileSizeRatio::RATIO_4_3);
9519         EXPECT_EQ(res, 0);
9520         res = videoSession->BeginConfig();
9521         EXPECT_EQ(res, 0);
9522 
9523         sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
9524         ASSERT_NE(input, nullptr);
9525         input->Open();
9526         res = videoSession->AddInput(input);
9527         EXPECT_EQ(res, 0);
9528 
9529         sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
9530         sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
9531         sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
9532         sptr<PreviewOutput> previewOutput = nullptr;
9533         res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
9534         EXPECT_EQ(res, 0);
9535         sptr<CaptureOutput> capturePreviewOutput = previewOutput;
9536         EXPECT_TRUE(videoSession->CanAddOutput(capturePreviewOutput));
9537         res = videoSession->AddOutput(capturePreviewOutput);
9538         EXPECT_EQ(res, 0);
9539         sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
9540         sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
9541         sptr<PhotoOutput> photoOutput = nullptr;
9542         res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
9543         EXPECT_EQ(res, 0);
9544         sptr<CaptureOutput> capturePhotoOutput = photoOutput;
9545         EXPECT_TRUE(videoSession->CanAddOutput(capturePhotoOutput));
9546         res = videoSession->AddOutput(capturePhotoOutput);
9547         EXPECT_EQ(res, 0);
9548         sptr<IConsumerSurface> videoSurface = IConsumerSurface::Create();
9549         sptr<IBufferProducer> videoProducer = videoSurface->GetProducer();
9550         sptr<Surface> producerVideoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
9551         sptr<VideoOutput> videoOutput = nullptr;
9552         res = manager_->CreateVideoOutputWithoutProfile(producerVideoSurface, &videoOutput);
9553         EXPECT_EQ(res, 0);
9554         sptr<CaptureOutput> captureVideoOutput = videoOutput;
9555         res = videoSession->AddOutput(captureVideoOutput);
9556         EXPECT_EQ(res, 0);
9557 
9558         res = videoSession->CommitConfig();
9559         EXPECT_EQ(res, 0);
9560         res = videoSession->Start();
9561         EXPECT_EQ(res, 0);
9562         sleep(WAIT_TIME_AFTER_START);
9563         res = videoOutput->Start();
9564         EXPECT_EQ(res, 0);
9565         sleep(WAIT_TIME_AFTER_START);
9566         res = videoOutput->Stop();
9567         EXPECT_EQ(res, 0);
9568         res = videoSession->Stop();
9569         EXPECT_EQ(res, 0);
9570     }
9571     EXPECT_EQ(videoSession->Release(), 0);
9572 }
9573 
9574 /*
9575  * Feature: Framework
9576  * Function: Test video session preconfig
9577  * SubFunction: NA
9578  * FunctionPoints: NA
9579  * EnvConditions: NA
9580  * CaseDescription: Test can preconfig video session with PRECONFIG_HIGH_QUALITY, RATIO_16_9 while supported
9581  */
9582 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_019, TestSize.Level0)
9583 {
9584     if (!IsSceneModeSupported(SceneMode::VIDEO)) {
9585         return;
9586     }
9587 
9588     auto captureSession = manager_->CreateCaptureSession(SceneMode::VIDEO);
9589     auto videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
9590     ASSERT_NE(videoSession, nullptr);
9591     if (videoSession->CanPreconfig(PreconfigType::PRECONFIG_HIGH_QUALITY, ProfileSizeRatio::RATIO_16_9)) {
9592         int32_t res = videoSession->Preconfig(PreconfigType::PRECONFIG_HIGH_QUALITY, ProfileSizeRatio::RATIO_16_9);
9593         EXPECT_EQ(res, 0);
9594         res = videoSession->BeginConfig();
9595         EXPECT_EQ(res, 0);
9596 
9597         sptr<CaptureInput> input = manager_->CreateCameraInput(cameras_[0]);
9598         ASSERT_NE(input, nullptr);
9599         input->Open();
9600         res = videoSession->AddInput(input);
9601         EXPECT_EQ(res, 0);
9602 
9603         sptr<IConsumerSurface> previewSurface = IConsumerSurface::Create();
9604         sptr<IBufferProducer> previewProducer = previewSurface->GetProducer();
9605         sptr<Surface> producerPreviewSurface = Surface::CreateSurfaceAsProducer(previewProducer);
9606         sptr<PreviewOutput> previewOutput = nullptr;
9607         res = manager_->CreatePreviewOutputWithoutProfile(producerPreviewSurface, &previewOutput);
9608         EXPECT_EQ(res, 0);
9609         sptr<CaptureOutput> capturePreviewOutput = previewOutput;
9610         EXPECT_TRUE(videoSession->CanAddOutput(capturePreviewOutput));
9611         res = videoSession->AddOutput(capturePreviewOutput);
9612         EXPECT_EQ(res, 0);
9613         sptr<IConsumerSurface> photoSurface = IConsumerSurface::Create();
9614         sptr<IBufferProducer> photoProducer = photoSurface->GetProducer();
9615         sptr<PhotoOutput> photoOutput = nullptr;
9616         res = manager_->CreatePhotoOutputWithoutProfile(photoProducer, &photoOutput);
9617         EXPECT_EQ(res, 0);
9618         sptr<CaptureOutput> capturePhotoOutput = photoOutput;
9619         EXPECT_TRUE(videoSession->CanAddOutput(capturePhotoOutput));
9620         res = videoSession->AddOutput(capturePhotoOutput);
9621         EXPECT_EQ(res, 0);
9622         sptr<IConsumerSurface> videoSurface = IConsumerSurface::Create();
9623         sptr<IBufferProducer> videoProducer = videoSurface->GetProducer();
9624         sptr<Surface> producerVideoSurface = Surface::CreateSurfaceAsProducer(videoProducer);
9625         sptr<VideoOutput> videoOutput = nullptr;
9626         res = manager_->CreateVideoOutputWithoutProfile(producerVideoSurface, &videoOutput);
9627         EXPECT_EQ(res, 0);
9628         sptr<CaptureOutput> captureVideoOutput = videoOutput;
9629         res = videoSession->AddOutput(captureVideoOutput);
9630         EXPECT_EQ(res, 0);
9631 
9632         res = videoSession->CommitConfig();
9633         EXPECT_EQ(res, 0);
9634         res = videoSession->Start();
9635         EXPECT_EQ(res, 0);
9636         sleep(WAIT_TIME_AFTER_START);
9637         res = videoOutput->Start();
9638         EXPECT_EQ(res, 0);
9639         sleep(WAIT_TIME_AFTER_START);
9640         res = videoOutput->Stop();
9641         EXPECT_EQ(res, 0);
9642         res = videoSession->Stop();
9643         EXPECT_EQ(res, 0);
9644     }
9645     EXPECT_EQ(videoSession->Release(), 0);
9646 }
9647 
9648 /*
9649  * Feature: Framework
9650  * Function: Test video session ability function
9651  * SubFunction: NA
9652  * FunctionPoints: NA
9653  * EnvConditions: NA
9654  * CaseDescription: Test video session ability function
9655  */
9656 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_020, TestSize.Level0)
9657 {
9658     SceneMode videoMode = SceneMode::VIDEO;
9659     if (!IsSceneModeSupported(videoMode)) {
9660         return;
9661     }
9662     sptr<CameraManager> cameraMgr = CameraManager::GetInstance();
9663     ASSERT_NE(cameraMgr, nullptr);
9664 
9665     sptr<CameraOutputCapability> capability = cameraMgr->GetSupportedOutputCapability(cameras_[0], videoMode);
9666     ASSERT_NE(capability, nullptr);
9667 
9668     sptr<CaptureSession> captureSession = cameraMgr->CreateCaptureSession(videoMode);
9669     ASSERT_NE(captureSession, nullptr);
9670 
9671     sptr<VideoSession> videoSession = static_cast<VideoSession *>(captureSession.GetRefPtr());
9672     ASSERT_NE(videoSession, nullptr);
9673 
9674     std::vector<sptr<CameraOutputCapability>> cocList = videoSession->GetCameraOutputCapabilities(cameras_[0]);
9675     ASSERT_TRUE(cocList.size() != 0);
9676     auto previewProfiles = cocList[0]->GetPreviewProfiles();
9677     auto photoProfiles = cocList[0]->GetPhotoProfiles();
9678     auto videoProfiles = cocList[0]->GetVideoProfiles();
9679 
9680     int32_t intResult = videoSession->BeginConfig();
9681     EXPECT_EQ(intResult, 0);
9682 
9683     intResult = videoSession->AddInput(input_);
9684     EXPECT_EQ(intResult, 0);
9685 
9686     sptr<CaptureOutput> photoOutput = CreatePhotoOutput();
9687     ASSERT_NE(photoOutput, nullptr);
9688     intResult = videoSession->AddOutput(photoOutput);
9689     EXPECT_EQ(intResult, 0);
9690 
9691     sptr<CaptureOutput> previewOutput = CreatePreviewOutput();
9692     ASSERT_NE(previewOutput, nullptr);
9693     intResult = videoSession->AddOutput(previewOutput);
9694     EXPECT_EQ(intResult, 0);
9695 
9696     intResult = videoSession->CommitConfig();
9697     EXPECT_EQ(intResult, 0);
9698 
9699     auto videoFunctionsList = videoSession->GetSessionFunctions(previewProfiles, photoProfiles, videoProfiles, true);
9700     ASSERT_TRUE(videoFunctionsList.size() != 0);
9701     auto videoFunctions = videoFunctionsList[0];
9702     videoFunctions->GetSupportedStabilizationMode();
9703     videoFunctions->IsVideoStabilizationModeSupported(VideoStabilizationMode::HIGH);
9704     std::vector<sptr<CameraAbility>> videoConflictFunctionsList = videoSession->GetSessionConflictFunctions();
9705 }
9706 
9707 /*
9708  * Feature: Framework
9709  * Function: Test video session with CreateCaptureSession
9710  * SubFunction: NA
9711  * FunctionPoints: NA
9712  * EnvConditions: NA
9713  * CaseDescription: Test video session with CreateCaptureSession
9714  */
9715 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_021, TestSize.Level0)
9716 {
9717     SceneMode mode = SceneMode::VIDEO;
9718     sptr<CameraManager> modeManagerObj = CameraManager::GetInstance();
9719     ASSERT_NE(modeManagerObj, nullptr);
9720 
9721     sptr<CaptureSession> captureSession = modeManagerObj->CreateCaptureSession(mode);
9722     ASSERT_NE(captureSession, nullptr);
9723 }
9724 
9725 /*
9726  * Feature: Framework
9727  * Function: Test video session macro and sketch function
9728  * SubFunction: NA
9729  * FunctionPoints: NA
9730  * EnvConditions: NA
9731  * CaseDescription: Test video session macro and sketch function
9732  */
9733 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_022, TestSize.Level0)
9734 {
9735     auto previewProfile = GetSketchPreviewProfile();
9736     if (previewProfile == nullptr) {
9737         EXPECT_EQ(previewProfile.get(), nullptr);
9738         return;
9739     }
9740     auto output = CreatePreviewOutput(*previewProfile);
9741     sptr<PreviewOutput> previewOutput = (sptr<PreviewOutput>&)output;
9742     ASSERT_NE(output, nullptr);
9743 
9744     session_->SetMode(SceneMode::VIDEO);
9745     int32_t intResult = session_->BeginConfig();
9746 
9747     EXPECT_EQ(intResult, 0);
9748 
9749     intResult = session_->AddInput(input_);
9750     EXPECT_EQ(intResult, 0);
9751 
9752     intResult = session_->AddOutput(output);
9753     EXPECT_EQ(intResult, 0);
9754 
9755     bool isSketchSupported = previewOutput->IsSketchSupported();
9756     if (!isSketchSupported) {
9757         return;
9758     }
9759 
9760     previewOutput->EnableSketch(true);
9761     EXPECT_EQ(intResult, 0);
9762 
9763     intResult = session_->CommitConfig();
9764     EXPECT_EQ(intResult, 0);
9765 
9766     bool isMacroSupported = session_->IsMacroSupported();
9767     if (!isMacroSupported) {
9768         return;
9769     }
9770 
9771     intResult = session_->Start();
9772     EXPECT_EQ(intResult, 0);
9773 
9774     sleep(WAIT_TIME_AFTER_START);
9775 
9776     // Video mode don't support sketch, but MacroVideo mode supported.
9777     float sketchRatio = previewOutput->GetSketchRatio();
9778     EXPECT_LT(sketchRatio, 0);
9779 
9780     intResult = previewOutput->AttachSketchSurface(CreateSketchSurface(previewProfile->GetCameraFormat()));
9781     EXPECT_EQ(intResult, 0);
9782 
9783     session_->LockForControl();
9784     intResult = session_->EnableMacro(true);
9785     session_->UnlockForControl();
9786     EXPECT_EQ(intResult, 0);
9787 
9788     sleep(WAIT_TIME_AFTER_START);
9789 
9790     // Now we are in MacroVideo mode
9791     sketchRatio = previewOutput->GetSketchRatio();
9792     EXPECT_GT(sketchRatio, 0);
9793 
9794     session_->LockForControl();
9795     intResult = session_->EnableMacro(false);
9796     session_->UnlockForControl();
9797     EXPECT_EQ(intResult, 0);
9798 
9799     sleep(WAIT_TIME_AFTER_START);
9800 
9801     // Now we are in Video mode
9802     sketchRatio = previewOutput->GetSketchRatio();
9803     EXPECT_LT(sketchRatio, 0);
9804 
9805     sleep(WAIT_TIME_AFTER_START);
9806 
9807     intResult = session_->Stop();
9808     EXPECT_EQ(intResult, 0);
9809 }
9810 
9811 /*
9812  * Feature: Framework
9813  * Function: Test video session moon capture boost function anomalous branch
9814  * SubFunction: NA
9815  * FunctionPoints: NA
9816  * EnvConditions: NA
9817  * CaseDescription: Test video session moon capture boost function anomalous branch
9818  */
9819 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_023, TestSize.Level0)
9820 {
9821     auto previewProfile = GetSketchPreviewProfile();
9822     if (previewProfile == nullptr) {
9823         EXPECT_EQ(previewProfile.get(), nullptr);
9824         return;
9825     }
9826     auto output = CreatePreviewOutput(*previewProfile);
9827     sptr<PreviewOutput> previewOutput = (sptr<PreviewOutput>&)output;
9828     ASSERT_NE(output, nullptr);
9829 
9830     session_->SetMode(SceneMode::VIDEO);
9831     int32_t intResult = session_->BeginConfig();
9832 
9833     EXPECT_EQ(intResult, 0);
9834 
9835     intResult = session_->AddInput(input_);
9836     EXPECT_EQ(intResult, 0);
9837 
9838     intResult = session_->AddOutput(output);
9839     EXPECT_EQ(intResult, 0);
9840 
9841     bool isMoonCaptureBoostSupported = session_->IsFeatureSupported(FEATURE_MOON_CAPTURE_BOOST);
9842     EXPECT_FALSE(isMoonCaptureBoostSupported);
9843 
9844     intResult = session_->EnableFeature(FEATURE_MOON_CAPTURE_BOOST, true);
9845     EXPECT_EQ(intResult, OPERATION_NOT_ALLOWED);
9846 
9847     intResult = session_->EnableFeature(FEATURE_MOON_CAPTURE_BOOST, false);
9848     EXPECT_EQ(intResult, OPERATION_NOT_ALLOWED);
9849 
9850     session_->SetMode(SceneMode::CAPTURE);
9851     isMoonCaptureBoostSupported = session_->IsFeatureSupported(FEATURE_MOON_CAPTURE_BOOST);
9852     if (isMoonCaptureBoostSupported) {
9853         intResult = session_->EnableFeature(FEATURE_MOON_CAPTURE_BOOST, true);
9854         EXPECT_EQ(intResult, SESSION_NOT_CONFIG);
9855     }
9856 
9857     intResult = session_->CommitConfig();
9858     EXPECT_EQ(intResult, 0);
9859 
9860     isMoonCaptureBoostSupported = session_->IsFeatureSupported(FEATURE_MOON_CAPTURE_BOOST);
9861     if (!isMoonCaptureBoostSupported) {
9862         intResult = session_->EnableFeature(FEATURE_MOON_CAPTURE_BOOST, true);
9863         EXPECT_EQ(intResult, OPERATION_NOT_ALLOWED);
9864     }
9865     session_->SetFeatureDetectionStatusCallback(std::make_shared<AppCallback>());
9866 
9867     intResult = session_->Start();
9868     EXPECT_EQ(intResult, 0);
9869 
9870     sleep(WAIT_TIME_AFTER_START);
9871 
9872     intResult = session_->Stop();
9873     EXPECT_EQ(intResult, 0);
9874 }
9875 
9876 /*
9877  * Feature: Framework
9878  * Function: Test video session time machine dotting
9879  * SubFunction: NA
9880  * FunctionPoints: NA
9881  * EnvConditions: NA
9882  * CaseDescription: Test video session time machine dotting
9883  */
9884 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_024, TestSize.Level0)
9885 {
9886     sptr<CaptureOutput> previewOutput;
9887     sptr<CaptureOutput> videoOutput;
9888     ConfigVideoSession(previewOutput, videoOutput);
9889     ASSERT_NE(previewOutput, nullptr);
9890     ASSERT_NE(videoOutput, nullptr);
9891 
9892     int32_t intResult = videoSession_->AddOutput(videoOutput);
9893     EXPECT_EQ(intResult, 0);
9894 
9895     sptr<VideoOutput> videoOutputTrans = ((sptr<VideoOutput>&)videoOutput);
9896     std::vector<VideoMetaType> supportedVideoMetaTypes = videoOutputTrans->GetSupportedVideoMetaTypes();
9897 
9898     if (supportedVideoMetaTypes.size() > 0) {
9899         sptr<IConsumerSurface> surface = IConsumerSurface::Create();
9900         ASSERT_NE(surface, nullptr);
9901         videoOutputTrans->AttachMetaSurface(surface, supportedVideoMetaTypes[0]);
9902 
9903         intResult = videoSession_->CommitConfig();
9904         EXPECT_EQ(intResult, 0);
9905 
9906         intResult = videoOutputTrans->Start();
9907         EXPECT_EQ(intResult, 0);
9908 
9909         sleep(WAIT_TIME_AFTER_START);
9910 
9911         intResult = videoOutputTrans->Stop();
9912         EXPECT_EQ(intResult, 0);
9913 
9914         TestUtils::SaveVideoFile(nullptr, 0, VideoSaveMode::CLOSE, g_videoFd);
9915 
9916         sleep(WAIT_TIME_BEFORE_STOP);
9917     }
9918 }
9919 
9920 /*
9921  * Feature: Framework
9922  * Function: Test set video support HDR_VIVID with 60FPS
9923  * SubFunction: NA
9924  * FunctionPoints: NA
9925  * EnvConditions: NA
9926  * CaseDescription: Test set video support HDR_VIVID with 60FPS
9927  */
9928 HWTEST_F(CameraSessionModuleTest, video_session_moduletest_025, TestSize.Level0)
9929 {
9930     SceneMode videoMode = SceneMode::VIDEO;
9931     if (!IsSceneModeSupported(videoMode)) {
9932         return;
9933     }
9934     sptr<CameraManager> cameraManagerObj = CameraManager::GetInstance();
9935     ASSERT_NE(cameraManagerObj, nullptr);
9936 
9937     std::vector<SceneMode> modes = cameraManagerObj->GetSupportedModes(cameras_[0]);
9938     ASSERT_TRUE(modes.size() != 0);
9939     sptr<CameraOutputCapability> modeAbility =
9940         cameraManagerObj->GetSupportedOutputCapability(cameras_[0], videoMode);
9941     ASSERT_NE(modeAbility, nullptr);
9942 
9943     sptr<CaptureSession> captureSession = cameraManagerObj->CreateCaptureSession(videoMode);
9944     ASSERT_NE(captureSession, nullptr);
9945 
9946     sptr<VideoSession> videoSession = static_cast<VideoSession*>(captureSession.GetRefPtr());
9947     ASSERT_NE(videoSession, nullptr);
9948 
9949     int32_t intResult = videoSession->BeginConfig();
9950     EXPECT_EQ(intResult, 0);
9951 
9952     intResult = videoSession->AddInput(input_);
9953     EXPECT_EQ(intResult, 0);
9954 
9955     uint32_t width = 1920;
9956     uint32_t height = 1080;
9957     uint32_t maxFps = 60;
9958     CameraFormat previewFormat = CAMERA_FORMAT_YCRCB_P010;
9959     CameraFormat videoFormat = CAMERA_FORMAT_YCRCB_P010;
9960 
9961     auto previewProfileOpt = GetPreviewProfileByFormat(modeAbility, width, height, previewFormat);
9962     if (!previewProfileOpt) {
9963         std::cout << "previewProfile not support" << std::endl;
9964         return;
9965     }
9966     Profile previewProfile = previewProfileOpt.value();
9967     EXPECT_EQ(previewProfile.GetCameraFormat(), CAMERA_FORMAT_YCRCB_P010);
9968     std::cout << "previewProfile support" << std::endl;
9969 
9970     auto videoProfileOpt = GetVideoProfileByFormat(modeAbility, width, height, videoFormat, maxFps);
9971     if (!videoProfileOpt) {
9972         std::cout << "videoProfile not support" << std::endl;
9973         return;
9974     }
9975     VideoProfile videoProfile = videoProfileOpt.value();
9976     EXPECT_EQ(videoProfile.GetCameraFormat(), CAMERA_FORMAT_YCRCB_P010);
9977     std::cout << "videoProfile support" << std::endl;
9978 
9979     sptr<CaptureOutput> previewOutput = CreatePreviewOutput(previewProfile);
9980     sptr<CaptureOutput> videoOutput = CreateVideoOutput(videoProfile);
9981     ASSERT_NE(previewOutput, nullptr);
9982     ASSERT_NE(videoOutput, nullptr);
9983 
9984     intResult = videoSession->AddOutput(previewOutput);
9985     EXPECT_EQ(intResult, 0);
9986     intResult = videoSession->AddOutput(videoOutput);
9987     EXPECT_EQ(intResult, 0);
9988     intResult = videoSession->CommitConfig();
9989     EXPECT_EQ(intResult, 0);
9990 
9991     std::vector<ColorSpace> colors = videoSession->GetSupportedColorSpaces();
9992     bool supportHdrVivid = false;
9993     for (const auto& color : colors) {
9994         std::cout << "ColorSpace: " << color << std::endl;
9995         if (BT2020_HLG_LIMIT == color) {
9996             std::cout << "support hdr vivid!" << std::endl;
9997             supportHdrVivid = true;
9998             break;
9999         }
10000     }
10001     if (supportHdrVivid) {
10002         intResult = videoSession->SetColorSpace(BT2020_HLG_LIMIT);
10003         EXPECT_EQ(intResult, 0);
10004         ColorSpace curColorSpace = COLOR_SPACE_UNKNOWN;
10005         intResult = videoSession->GetActiveColorSpace(curColorSpace);
10006         EXPECT_EQ(intResult, 0);
10007         EXPECT_EQ(curColorSpace, BT2020_HLG_LIMIT);
10008     }
10009     intResult = videoSession->Release();
10010     EXPECT_EQ(intResult, 0);
10011 }
10012 } // namespace CameraStandard
10013 } // namespace OHOS