• 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 "token_setproc.h"
30 #include "os_account_manager.h"
31 
32 using namespace testing::ext;
33 
34 namespace OHOS {
35 namespace CameraStandard {
36 
UpdataCameraOutputCapability(int32_t modeName)37 void CameraformatYUVModuleTest::UpdataCameraOutputCapability(int32_t modeName)
38 {
39     if (!cameraManager_ || cameras_.empty()) {
40         return;
41     }
42     auto outputCapability = cameraManager_->GetSupportedOutputCapability(cameras_[0], modeName);
43     ASSERT_NE(outputCapability, nullptr);
44 
45     outputCapability->photoProfiles_[0].size_ = {640, 480};
46     outputCapability->photoProfiles_[0].format_ = CAMERA_FORMAT_YUV_420_SP;
47     outputCapability->previewProfiles_[0].size_ = {640, 480};
48     outputCapability->previewProfiles_[0].format_ = CAMERA_FORMAT_YUV_420_SP;
49 
50     previewProfile_ = outputCapability->GetPreviewProfiles();
51     ASSERT_FALSE(previewProfile_.empty());
52 
53     outputCapability->SetPreviewProfiles(previewProfile_);
54     cameras_[0]->SetProfile(outputCapability);
55 
56     photoProfile_ = outputCapability->GetPhotoProfiles();
57     ASSERT_FALSE(photoProfile_.empty());
58 
59     outputCapability->SetPhotoProfiles(photoProfile_);
60     cameras_[0]->SetProfile(outputCapability);
61 }
62 
UpdataCameraOutputCapabilitySrc(int32_t modeName)63 void CameraformatYUVModuleTest::UpdataCameraOutputCapabilitySrc(int32_t modeName)
64 {
65     if (!cameraManager_ || cameras_.empty()) {
66         return;
67     }
68     auto outputCapability = cameraManager_->GetSupportedOutputCapability(cameras_[0], modeName);
69     ASSERT_NE(outputCapability, nullptr);
70 
71     outputCapability->photoProfiles_[0].size_ = {640, 480};
72     outputCapability->photoProfiles_[0].format_ = CAMERA_FORMAT_YUV_422_YUYV;
73     outputCapability->previewProfiles_[0].size_ = {640, 480};
74     outputCapability->previewProfiles_[0].format_ = CAMERA_FORMAT_YUV_422_YUYV;
75 
76     previewProfile_ = outputCapability->GetPreviewProfiles();
77     ASSERT_FALSE(previewProfile_.empty());
78 
79     outputCapability->SetPreviewProfiles(previewProfile_);
80     cameras_[0]->SetProfile(outputCapability);
81 
82     photoProfile_ = outputCapability->GetPhotoProfiles();
83     ASSERT_FALSE(photoProfile_.empty());
84 
85     outputCapability->SetPhotoProfiles(photoProfile_);
86     cameras_[0]->SetProfile(outputCapability);
87 }
88 
SetUpTestCase(void)89 void CameraformatYUVModuleTest::SetUpTestCase(void)
90 {
91     MEDIA_DEBUG_LOG("CameraformatYUVModuleTest::SetUpTestCase started!");
92 }
93 
TearDownTestCase(void)94 void CameraformatYUVModuleTest::TearDownTestCase(void)
95 {
96     MEDIA_DEBUG_LOG("CameraformatYUVModuleTest::TearDownTestCase started!");
97 }
98 
SetUp()99 void CameraformatYUVModuleTest::SetUp()
100 {
101     NativeAuthorization();
102     cameraManager_ = CameraManager::GetInstance();
103     ASSERT_NE(cameraManager_, nullptr);
104     cameras_ = cameraManager_->GetSupportedCameras();
105     ASSERT_FALSE(cameras_.empty());
106     session_ = cameraManager_->CreateCaptureSession(SceneMode::NORMAL);
107     ASSERT_NE(session_, nullptr);
108     input_ = cameraManager_->CreateCameraInput(cameras_[0]);
109     ASSERT_NE(input_, nullptr);
110     input_->Open();
111 }
112 
TearDown()113 void CameraformatYUVModuleTest::TearDown()
114 {
115     MEDIA_DEBUG_LOG("CameraformatYUVModuleTest::TearDown started!");
116     cameraManager_ = nullptr;
117     cameras_.clear();
118     input_->Close();
119     preview_->Release();
120     input_->Release();
121     session_->Release();
122 }
123 
NativeAuthorization()124 void CameraformatYUVModuleTest::NativeAuthorization()
125 {
126     const char *perms[2];
127     perms[0] = "ohos.permission.DISTRIBUTED_DATASYNC";
128     perms[1] = "ohos.permission.CAMERA";
129     NativeTokenInfoParams infoInstance = {
130         .dcapsNum = 0,
131         .permsNum = 2,
132         .aclsNum = 0,
133         .dcaps = NULL,
134         .perms = perms,
135         .acls = NULL,
136         .processName = "native_camera_tdd",
137         .aplStr = "system_basic",
138     };
139     tokenId_ = GetAccessTokenId(&infoInstance);
140     uid_ = IPCSkeleton::GetCallingUid();
141     AccountSA::OsAccountManager::GetOsAccountLocalIdFromUid(uid_, userId_);
142     MEDIA_DEBUG_LOG("CaptureSessionUnitTest::NativeAuthorization uid:%{public}d", uid_);
143     SetSelfTokenID(tokenId_);
144     OHOS::Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo();
145 }
146 
147 /*
148  * Feature: Framework
149  * Function: Test the functionality of capturing YUV photos.
150  * SubFunction: NA
151  * FunctionPoints: NA
152  * EnvConditions: NA
153  * CaseDescription: Test the functionality of capturing YUV photos which the format is YUV_420_SP.
154  */
155 HWTEST_F(CameraformatYUVModuleTest, camera_format_YUV_moduletest_001, TestSize.Level0)
156 {
157     UpdataCameraOutputCapability();
158     sptr<Surface> surface = Surface::CreateSurfaceAsConsumer();
159     preview_ = cameraManager_->CreatePreviewOutput(previewProfile_[0], surface);
160     ASSERT_NE(preview_, nullptr);
161     sptr<IConsumerSurface> iConsumerSurface = IConsumerSurface::Create();
162     ASSERT_NE(iConsumerSurface, nullptr);
163     sptr<IBufferProducer> surface2 = iConsumerSurface->GetProducer();
164     ASSERT_NE(surface2, nullptr);
165     sptr<CaptureOutput> photoOutput = cameraManager_->CreatePhotoOutput(photoProfile_[0], surface2);
166     ASSERT_NE(photoOutput, nullptr);
167     EXPECT_EQ(session_->BeginConfig(), 0);
168     EXPECT_EQ(session_->AddInput(input_), 0);
169     if (!session_->CanAddOutput(preview_)) {
170         return;
171     }
172     EXPECT_EQ(session_->AddOutput(preview_), 0);
173     if (!session_->CanAddOutput(photoOutput)) {
174         return;
175     }
176     EXPECT_EQ(session_->AddOutput(photoOutput), 0);
177     EXPECT_EQ(session_->CommitConfig(), 0);
178 
179     auto intResult = session_->Start();
180     EXPECT_EQ(intResult, 0);
181 
182     sleep(WAIT_TIME_AFTER_START);
183     intResult = ((sptr<PhotoOutput>&)photoOutput)->Capture();
184     EXPECT_EQ(intResult, 0);
185     sleep(WAIT_TIME_AFTER_CAPTURE);
186 
187     intResult = session_->Stop();
188     EXPECT_EQ(intResult, 0);
189 }
190 
191 /*
192  * Feature: Framework
193  * Function: Test the functionality of capturing YUV photos.
194  * SubFunction: NA
195  * FunctionPoints: NA
196  * EnvConditions: NA
197  * CaseDescription: Test the functionality of capturing YUV photos which the format is YUV_422_YUYV.
198  */
199 HWTEST_F(CameraformatYUVModuleTest, camera_format_YUV_moduletest_002, TestSize.Level0)
200 {
201     UpdataCameraOutputCapabilitySrc();
202     sptr<Surface> surface = Surface::CreateSurfaceAsConsumer();
203     preview_ = cameraManager_->CreatePreviewOutput(previewProfile_[0], surface);
204     ASSERT_NE(preview_, nullptr);
205     sptr<IConsumerSurface> iConsumerSurface = IConsumerSurface::Create();
206     ASSERT_NE(iConsumerSurface, nullptr);
207     sptr<IBufferProducer> surface2 = iConsumerSurface->GetProducer();
208     ASSERT_NE(surface2, nullptr);
209     sptr<CaptureOutput> photoOutput = cameraManager_->CreatePhotoOutput(photoProfile_[0], surface2);
210     ASSERT_NE(photoOutput, nullptr);
211     EXPECT_EQ(session_->BeginConfig(), 0);
212     EXPECT_EQ(session_->AddInput(input_), 0);
213     if (!session_->CanAddOutput(preview_)) {
214         return;
215     }
216     EXPECT_EQ(session_->AddOutput(preview_), 0);
217     if (!session_->CanAddOutput(photoOutput)) {
218         return;
219     }
220     EXPECT_EQ(session_->AddOutput(photoOutput), 0);
221     EXPECT_EQ(session_->CommitConfig(), 0);
222 
223     auto intResult = session_->Start();
224     EXPECT_EQ(intResult, 0);
225 
226     sleep(WAIT_TIME_AFTER_START);
227     intResult = ((sptr<PhotoOutput>&)photoOutput)->Capture();
228     EXPECT_EQ(intResult, 0);
229     sleep(WAIT_TIME_AFTER_CAPTURE);
230 
231     intResult = session_->Stop();
232     EXPECT_EQ(intResult, 0);
233 }
234 }  // namespace CameraStandard
235 }  // namespace OHOS