1 /*
2 * Copyright (C) 2023 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 <iostream>
17 #include <cstdio>
18 #include <atomic>
19 #include <fstream>
20 #include <thread>
21 #include <mutex>
22 #include <queue>
23 #include <string>
24
25 #include "gtest/gtest.h"
26 #include "hdrcodec_sample.h"
27 #include "native_averrors.h"
28 #include "native_avcodec_base.h"
29
30 using namespace std;
31 using namespace OHOS;
32 using namespace OHOS::Media;
33 using namespace testing::ext;
34 namespace OHOS {
35 namespace Media {
36 class HDRFuncNdkTest : public testing::Test {
37 public:
38 // SetUpTestCase: Called before all test cases
39 static void SetUpTestCase(void);
40 // TearDownTestCase: Called after all test case
41 static void TearDownTestCase(void);
42 // SetUp: Called before each test cases
43 void SetUp(void);
44 // TearDown: Called after each test cases
45 void TearDown(void);
46 };
47
SetUpTestCase()48 void HDRFuncNdkTest::SetUpTestCase()
49 {
50 }
TearDownTestCase()51 void HDRFuncNdkTest::TearDownTestCase() {}
SetUp()52 void HDRFuncNdkTest::SetUp()
53 {
54 }
TearDown()55 void HDRFuncNdkTest::TearDown()
56 {
57 }
58 } // namespace Media
59 } // namespace OHOS
60
61 namespace {
62 /**
63 * @tc.number : HDR_FUNC_0030
64 * @tc.name : decode PQ HDRVivid by display mode, and then set HEVC_PROFILE_MAIN10 to encode
65 * @tc.desc : function test
66 */
67 HWTEST_F(HDRFuncNdkTest, HDR_FUNC_0010, TestSize.Level1)
68 {
69 if (!access("/system/lib64/media/", 0)) {
70 shared_ptr<HDRCodecNdkSample> sample = make_shared<HDRCodecNdkSample>();
71 sample->DEFAULT_PROFILE = HEVC_PROFILE_MAIN_10;
72 sample->INP_DIR = "/data/test/media/pq_vivid.h265";
73 ASSERT_EQ(AV_ERR_OK, sample->CreateCodec());
74 ASSERT_EQ(AV_ERR_OK, sample->Configure());
75 ASSERT_EQ(AV_ERR_OK, sample->Start());
76 sample->WaitForEos();
77 ASSERT_EQ(0, sample->errorCount);
78 }
79 }
80 /**
81 * @tc.number : HDR_FUNC_0020
82 * @tc.name : decode HLG HDRVivid by display mode, and then set HEVC_PROFILE_MAIN10 to encode
83 * @tc.desc : function test
84 */
85 HWTEST_F(HDRFuncNdkTest, HDR_FUNC_0020, TestSize.Level1)
86 {
87 if (!access("/system/lib64/media/", 0)) {
88 shared_ptr<HDRCodecNdkSample> sample = make_shared<HDRCodecNdkSample>();
89 sample->DEFAULT_PROFILE = HEVC_PROFILE_MAIN_10;
90 sample->INP_DIR = "/data/test/media/hlg_vivid_4k.h265";
91 ASSERT_EQ(AV_ERR_OK, sample->CreateCodec());
92 ASSERT_EQ(AV_ERR_OK, sample->Configure());
93 ASSERT_EQ(AV_ERR_OK, sample->Start());
94 sample->WaitForEos();
95 ASSERT_EQ(0, sample->errorCount);
96 }
97 }
98
99 /**
100 * @tc.number : HDR_FUNC_0030
101 * @tc.name : decode PQ HDRVivid by display mode, and then set HEVC_PROFILE_MAIN to encode
102 * @tc.desc : function test
103 */
104 HWTEST_F(HDRFuncNdkTest, HDR_FUNC_0030, TestSize.Level2)
105 {
106 if (!access("/system/lib64/media/", 0)) {
107 shared_ptr<HDRCodecNdkSample> sample = make_shared<HDRCodecNdkSample>();
108 sample->DEFAULT_PROFILE = HEVC_PROFILE_MAIN;
109 sample->INP_DIR = "/data/test/media/pq_vivid.h265";
110 ASSERT_EQ(AV_ERR_OK, sample->CreateCodec());
111 ASSERT_EQ(AV_ERR_OK, sample->Configure());
112 ASSERT_EQ(AV_ERR_OK, sample->Start());
113 sample->WaitForEos();
114 EXPECT_LE(0, sample->errorCount);
115 }
116 }
117
118 /**
119 * @tc.number : HDR_FUNC_0040
120 * @tc.name : decode HLG HDRVivid by display mode, and then set HEVC_PROFILE_MAIN to encode
121 * @tc.desc : function test
122 */
123 HWTEST_F(HDRFuncNdkTest, HDR_FUNC_0040, TestSize.Level2)
124 {
125 if (!access("/system/lib64/media/", 0)) {
126 shared_ptr<HDRCodecNdkSample> sample = make_shared<HDRCodecNdkSample>();
127 sample->DEFAULT_PROFILE = HEVC_PROFILE_MAIN;
128 sample->INP_DIR = "/data/test/media/hlg_vivid_4k.h265";
129 ASSERT_EQ(AV_ERR_OK, sample->CreateCodec());
130 ASSERT_EQ(AV_ERR_OK, sample->Configure());
131 ASSERT_EQ(AV_ERR_OK, sample->Start());
132 sample->WaitForEos();
133 EXPECT_LE(0, sample->errorCount);
134 }
135 }
136
137 /**
138 * @tc.number : HDR_FUNC_0050
139 * @tc.name : decode and encode HDRVivid repeat start-stop 5 times before EOS
140 * @tc.desc : function test
141 */
142 HWTEST_F(HDRFuncNdkTest, HDR_FUNC_0050, TestSize.Level2)
143 {
144 if (!access("/system/lib64/media/", 0)) {
145 shared_ptr<HDRCodecNdkSample> sample = make_shared<HDRCodecNdkSample>();
146 sample->DEFAULT_PROFILE = HEVC_PROFILE_MAIN_10;
147 sample->INP_DIR = "/data/test/media/hlg_vivid_4k.h265";
148 sample->REPEAT_START_STOP_BEFORE_EOS = 5;
149 ASSERT_EQ(AV_ERR_OK, sample->CreateCodec());
150 ASSERT_EQ(AV_ERR_OK, sample->Configure());
151 ASSERT_EQ(AV_ERR_OK, sample->Start());
152 sample->WaitForEos();
153 ASSERT_EQ(0, sample->errorCount);
154 }
155 }
156
157 /**
158 * @tc.number : HDR_FUNC_0060
159 * @tc.name : decode and encode HDRVivid repeat start-flush-stop 5 times before EOS
160 * @tc.desc : function test
161 */
162 HWTEST_F(HDRFuncNdkTest, HDR_FUNC_0060, TestSize.Level2)
163 {
164 if (!access("/system/lib64/media/", 0)) {
165 shared_ptr<HDRCodecNdkSample> sample = make_shared<HDRCodecNdkSample>();
166 sample->DEFAULT_PROFILE = HEVC_PROFILE_MAIN_10;
167 sample->INP_DIR = "/data/test/media/hlg_vivid_4k.h265";
168 sample->REPEAT_START_FLUSH_STOP_BEFORE_EOS = 5;
169 ASSERT_EQ(AV_ERR_OK, sample->CreateCodec());
170 ASSERT_EQ(AV_ERR_OK, sample->Configure());
171 ASSERT_EQ(AV_ERR_OK, sample->Start());
172 sample->WaitForEos();
173 ASSERT_EQ(0, sample->errorCount);
174 }
175 }
176
177 /**
178 * @tc.number : HDR_FUNC_0070
179 * @tc.name : decode and encode HDRVivid repeat start-flush-start 5 times before EOS
180 * @tc.desc : function test
181 */
182 HWTEST_F(HDRFuncNdkTest, HDR_FUNC_0070, TestSize.Level2)
183 {
184 if (!access("/system/lib64/media/", 0)) {
185 shared_ptr<HDRCodecNdkSample> sample = make_shared<HDRCodecNdkSample>();
186 sample->DEFAULT_PROFILE = HEVC_PROFILE_MAIN_10;
187 sample->INP_DIR = "/data/test/media/hlg_vivid_4k.h265";
188 sample->REPEAT_START_FLUSH_BEFORE_EOS = 5;
189 ASSERT_EQ(AV_ERR_OK, sample->CreateCodec());
190 ASSERT_EQ(AV_ERR_OK, sample->Configure());
191 ASSERT_EQ(AV_ERR_OK, sample->Start());
192 sample->WaitForEos();
193 ASSERT_EQ(0, sample->errorCount);
194 }
195 }
196
197 /**
198 * @tc.number : HDR_FUNC_0080
199 * @tc.name : decode and encode different resolution with same codec
200 * @tc.desc : function test
201 */
202 HWTEST_F(HDRFuncNdkTest, HDR_FUNC_0080, TestSize.Level1)
203 {
204 if (!access("/system/lib64/media/", 0)) {
205 shared_ptr<HDRCodecNdkSample> sample = make_shared<HDRCodecNdkSample>();
206 sample->DEFAULT_PROFILE = HEVC_PROFILE_MAIN_10;
207 sample->INP_DIR = "/data/test/media/hlg_vivid_4k.h265";
208 ASSERT_EQ(AV_ERR_OK, sample->CreateCodec());
209 ASSERT_EQ(AV_ERR_OK, sample->Configure());
210 ASSERT_EQ(AV_ERR_OK, sample->Start());
211 sample->WaitForEos();
212 sample->DEFAULT_WIDTH = 1920;
213 sample->DEFAULT_HEIGHT = 1080;
214 sample->INP_DIR = "/data/test/media/hlg_vivid_1080p.h265";
215 ASSERT_EQ(AV_ERR_OK, sample->ReConfigure());
216 ASSERT_EQ(AV_ERR_OK, sample->Start());
217 sample->WaitForEos();
218 ASSERT_EQ(0, sample->errorCount);
219 }
220 }
221 } // namespace