• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "camera_format_YUV_moduletest.h"
17 #include "gtest/gtest.h"
18 #include <cstdint>
19 #include <vector>
20 #include "access_token.h"
21 #include "accesstoken_kit.h"
22 #include "camera_util.h"
23 #include "hap_token_info.h"
24 #include "ipc_skeleton.h"
25 #include "metadata_utils.h"
26 #include "nativetoken_kit.h"
27 #include "surface.h"
28 #include "test_common.h"
29 #include "test_token.h"
30 #include "token_setproc.h"
31 #include "os_account_manager.h"
32 
33 using namespace testing::ext;
34 
35 namespace OHOS {
36 namespace CameraStandard {
37 
UpdateCameraOutputCapability(int32_t modeName)38 void CameraformatYUVModuleTest::UpdateCameraOutputCapability(int32_t modeName)
39 {
40     if (!cameraManager_ || cameras_.empty()) {
41         return;
42     }
43     auto outputCapability = cameraManager_->GetSupportedOutputCapability(cameras_[0], modeName);
44     ASSERT_NE(outputCapability, nullptr);
45 
46     outputCapability->photoProfiles_[0].size_ = {640, 480};
47     outputCapability->photoProfiles_[0].format_ = CAMERA_FORMAT_YUV_420_SP;
48     outputCapability->previewProfiles_[0].size_ = {640, 480};
49     outputCapability->previewProfiles_[0].format_ = CAMERA_FORMAT_YUV_420_SP;
50 
51     previewProfile_ = outputCapability->GetPreviewProfiles();
52     ASSERT_FALSE(previewProfile_.empty());
53 
54     outputCapability->SetPreviewProfiles(previewProfile_);
55     cameras_[0]->SetProfile(outputCapability);
56 
57     photoProfile_ = outputCapability->GetPhotoProfiles();
58     ASSERT_FALSE(photoProfile_.empty());
59 
60     outputCapability->SetPhotoProfiles(photoProfile_);
61     cameras_[0]->SetProfile(outputCapability);
62 }
63 
UpdateCameraOutputCapabilitySrc(int32_t modeName)64 void CameraformatYUVModuleTest::UpdateCameraOutputCapabilitySrc(int32_t modeName)
65 {
66     if (!cameraManager_ || cameras_.empty()) {
67         return;
68     }
69     auto outputCapability = cameraManager_->GetSupportedOutputCapability(cameras_[0], modeName);
70     ASSERT_NE(outputCapability, nullptr);
71 
72     outputCapability->photoProfiles_[0].size_ = {640, 480};
73     outputCapability->photoProfiles_[0].format_ = CAMERA_FORMAT_YUV_422_YUYV;
74     outputCapability->previewProfiles_[0].size_ = {640, 480};
75     outputCapability->previewProfiles_[0].format_ = CAMERA_FORMAT_YUV_422_YUYV;
76 
77     previewProfile_ = outputCapability->GetPreviewProfiles();
78     ASSERT_FALSE(previewProfile_.empty());
79 
80     outputCapability->SetPreviewProfiles(previewProfile_);
81     cameras_[0]->SetProfile(outputCapability);
82 
83     photoProfile_ = outputCapability->GetPhotoProfiles();
84     ASSERT_FALSE(photoProfile_.empty());
85 
86     outputCapability->SetPhotoProfiles(photoProfile_);
87     cameras_[0]->SetProfile(outputCapability);
88 }
89 
SetUpTestCase(void)90 void CameraformatYUVModuleTest::SetUpTestCase(void)
91 {
92     MEDIA_DEBUG_LOG("CameraformatYUVModuleTest::SetUpTestCase started!");
93     ASSERT_TRUE(TestToken().GetAllCameraPermission());
94 }
95 
TearDownTestCase(void)96 void CameraformatYUVModuleTest::TearDownTestCase(void)
97 {
98     MEDIA_DEBUG_LOG("CameraformatYUVModuleTest::TearDownTestCase started!");
99 }
100 
SetUp()101 void CameraformatYUVModuleTest::SetUp()
102 {
103     cameraManager_ = CameraManager::GetInstance();
104     ASSERT_NE(cameraManager_, nullptr);
105     cameras_ = cameraManager_->GetSupportedCameras();
106     ASSERT_FALSE(cameras_.empty());
107     session_ = cameraManager_->CreateCaptureSession(SceneMode::NORMAL);
108     ASSERT_NE(session_, nullptr);
109     input_ = cameraManager_->CreateCameraInput(cameras_[0]);
110     ASSERT_NE(input_, nullptr);
111     input_->Open();
112 }
113 
TearDown()114 void CameraformatYUVModuleTest::TearDown()
115 {
116     MEDIA_DEBUG_LOG("CameraformatYUVModuleTest::TearDown started!");
117     cameraManager_ = nullptr;
118     cameras_.clear();
119     input_->Close();
120     preview_->Release();
121     input_->Release();
122     session_->Release();
123 }
124 
125 /*
126  * Feature: Framework
127  * Function: Test the functionality of capturing YUV photos.
128  * SubFunction: NA
129  * FunctionPoints: NA
130  * EnvConditions: NA
131  * CaseDescription: Test the functionality of capturing YUV photos which the format is YUV_420_SP.
132  */
133 HWTEST_F(CameraformatYUVModuleTest, camera_format_YUV_moduletest_001, TestSize.Level0)
134 {
135     UpdateCameraOutputCapability();
136     sptr<Surface> surface = Surface::CreateSurfaceAsConsumer();
137     preview_ = cameraManager_->CreatePreviewOutput(previewProfile_[0], surface);
138     ASSERT_NE(preview_, nullptr);
139     sptr<IConsumerSurface> iConsumerSurface = IConsumerSurface::Create();
140     ASSERT_NE(iConsumerSurface, nullptr);
141     sptr<IBufferProducer> surface2 = iConsumerSurface->GetProducer();
142     ASSERT_NE(surface2, nullptr);
143     sptr<CaptureOutput> photoOutput = cameraManager_->CreatePhotoOutput(photoProfile_[0], surface2);
144     ASSERT_NE(photoOutput, nullptr);
145     EXPECT_EQ(session_->BeginConfig(), 0);
146     EXPECT_EQ(session_->AddInput(input_), 0);
147     if (!session_->CanAddOutput(preview_)) {
148         GTEST_SKIP();
149     }
150     EXPECT_EQ(session_->AddOutput(preview_), 0);
151     if (!session_->CanAddOutput(photoOutput)) {
152         GTEST_SKIP();
153     }
154     EXPECT_EQ(session_->AddOutput(photoOutput), 0);
155     EXPECT_EQ(session_->CommitConfig(), 0);
156 
157     auto intResult = session_->Start();
158     EXPECT_EQ(intResult, 0);
159 
160     sleep(WAIT_TIME_AFTER_START);
161     intResult = ((sptr<PhotoOutput>&)photoOutput)->Capture();
162     EXPECT_EQ(intResult, 0);
163     sleep(WAIT_TIME_AFTER_CAPTURE);
164 
165     intResult = session_->Stop();
166     EXPECT_EQ(intResult, 0);
167 }
168 
169 /*
170  * Feature: Framework
171  * Function: Test the functionality of capturing YUV photos.
172  * SubFunction: NA
173  * FunctionPoints: NA
174  * EnvConditions: NA
175  * CaseDescription: Test the functionality of capturing YUV photos which the format is YUV_422_YUYV.
176  */
177 HWTEST_F(CameraformatYUVModuleTest, camera_format_YUV_moduletest_002, TestSize.Level0)
178 {
179     UpdateCameraOutputCapabilitySrc();
180     sptr<Surface> surface = Surface::CreateSurfaceAsConsumer();
181     preview_ = cameraManager_->CreatePreviewOutput(previewProfile_[0], surface);
182     ASSERT_NE(preview_, nullptr);
183     sptr<IConsumerSurface> iConsumerSurface = IConsumerSurface::Create();
184     ASSERT_NE(iConsumerSurface, nullptr);
185     sptr<IBufferProducer> surface2 = iConsumerSurface->GetProducer();
186     ASSERT_NE(surface2, nullptr);
187     sptr<CaptureOutput> photoOutput = cameraManager_->CreatePhotoOutput(photoProfile_[0], surface2);
188     ASSERT_NE(photoOutput, nullptr);
189     EXPECT_EQ(session_->BeginConfig(), 0);
190     EXPECT_EQ(session_->AddInput(input_), 0);
191     if (!session_->CanAddOutput(preview_)) {
192         GTEST_SKIP();
193     }
194     EXPECT_EQ(session_->AddOutput(preview_), 0);
195     if (!session_->CanAddOutput(photoOutput)) {
196         GTEST_SKIP();
197     }
198     EXPECT_EQ(session_->AddOutput(photoOutput), 0);
199     EXPECT_EQ(session_->CommitConfig(), 0);
200 
201     auto intResult = session_->Start();
202     EXPECT_EQ(intResult, 0);
203 
204     sleep(WAIT_TIME_AFTER_START);
205     intResult = ((sptr<PhotoOutput>&)photoOutput)->Capture();
206     EXPECT_EQ(intResult, 0);
207     sleep(WAIT_TIME_AFTER_CAPTURE);
208 
209     intResult = session_->Stop();
210     EXPECT_EQ(intResult, 0);
211 }
212 }  // namespace CameraStandard
213 }  // namespace OHOS