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