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 #include <string>
16 #include "gtest/gtest.h"
17 #include "native_averrors.h"
18 #include "videodec_sample.h"
19 #include "videodec_inner_sample.h"
20 #include "native_avcodec_base.h"
21 #include "avcodec_codec_name.h"
22 #include "native_avcapability.h"
23 #include "avcodec_suspend.h"
24 #include <unistd.h>
25 #include "syspara/parameters.h"
26
27
28 #define MAX_THREAD 16
29
30 using namespace std;
31 using namespace OHOS;
32 using namespace OHOS::Media;
33 using namespace OHOS::MediaAVCodec;
34 using namespace testing::ext;
35
36 namespace OHOS {
37 namespace Media {
38 class HwdecHdr2SdrInnerTest : public testing::Test {
39 public:
40 static void SetUpTestCase();
41 static void TearDownTestCase();
42 void SetUp() override;
43 void TearDown() override;
44 void InputFunc();
45 void OutputFunc();
46 void Release();
47 int32_t Stop();
48
49 protected:
50 const char *INP_DIR_720_10 = "/data/test/media/hlg_1280_720_10.h265";
51 const char *INP_DIR_1080_10 = "/data/test/media/hlg_1920_1080_10.h265";
52 const char *INP_DIR_1920_1440_30 = "/data/test/media/hlg_1920_1440_30.h265";
53 const char *INP_DIR_2336_1080_10 = "/data/test/media/hlg_2336_1080_10.h265";
54 const char *INP_DIR_2336_1088_10 = "/data/test/media/hlg_2336_1088_10.h265";
55 const char *INP_DIR_4K_10 = "/data/test/media/hlg_3840_2160_10.h265";
56 const char *inpDirResolution = "/data/test/media/hlg_resolution_change_10.h265";
57 const char *inpDirSdr = "/data/test/media/1920_1080_20M_30.h265";
58 const char *inpDirHdr10 = "/data/test/media/hdr10.h265";
59 const char *inpDirHlg = "/data/test/media/hlg.h265";
60 const char *inpDirPqlimit = "/data/test/media/pqHdrVivid_4k.h265";
61 const char *inpDirHlgLimit = "/data/test/media/hlgHdrVivid_1080p.h265";
62 };
63 } // namespace Media
64 } // namespace OHOS
65
66 namespace {
67 static OH_AVCapability *cap = nullptr;
68 static OH_AVCapability *cap_hevc = nullptr;
69 static string g_codecName = "";
70 static string g_codecNameHEVC = "";
71 } // namespace
72
SetUpTestCase()73 void HwdecHdr2SdrInnerTest::SetUpTestCase()
74 {
75 cap = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, false, HARDWARE);
76 g_codecName = OH_AVCapability_GetName(cap);
77 cout << "g_codecName: " << g_codecName << endl;
78 cap_hevc = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC, false, HARDWARE);
79 g_codecNameHEVC = OH_AVCapability_GetName(cap_hevc);
80 cout << "g_codecNameHEVC: " << g_codecNameHEVC << endl;
81 }
TearDownTestCase()82 void HwdecHdr2SdrInnerTest::TearDownTestCase() {}
SetUp()83 void HwdecHdr2SdrInnerTest::SetUp() {}
TearDown()84 void HwdecHdr2SdrInnerTest::TearDown() {}
85
86 namespace {
87 /**
88 * @tc.number : HEVC_HW_HDR2SDR_INNER_FUNC_0001
89 * @tc.name : h265 hard decode surface, nv12, OH_MD_KEY_VIDEO_DECODER_OUTPUT_COLOR_SPACE P3 FULL, 720p HLG FULL
90 * @tc.desc : function test
91 */
92 HWTEST_F(HwdecHdr2SdrInnerTest, HEVC_HW_HDR2SDR_INNER_FUNC_0001, TestSize.Level0)
93 {
94 shared_ptr<VDecNdkInnerSample> vDecSample = make_shared<VDecNdkInnerSample>();
95 vDecSample->INP_DIR = INP_DIR_720_10;
96 vDecSample->DEFAULT_WIDTH = 1280;
97 vDecSample->DEFAULT_HEIGHT = 720;
98 vDecSample->DEFAULT_FRAME_RATE = 10;
99 vDecSample->SF_OUTPUT = true;
100 vDecSample->P3_FULL_FLAG = true;
101 vDecSample->AFTER_EOS_DESTORY_CODEC = false;
102 if (!access("/system/lib64/media/", 0)) {
103 ASSERT_EQ(AVCS_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecNameHEVC));
104 vDecSample->WaitForEOS();
105 ASSERT_EQ(AVCS_ERR_OK, vDecSample->errCount);
106 } else {
107 ASSERT_EQ(AVCS_ERR_OK, vDecSample->CreateByName(g_codecNameHEVC));
108 ASSERT_EQ(AVCS_ERR_UNSUPPORT, vDecSample->Configure());
109 }
110 }
111
112 /**
113 * @tc.number : HEVC_HW_HDR2SDR_INNER_FUNC_0002
114 * @tc.name : h265 hard decode surface, nv12, OH_MD_KEY_VIDEO_DECODER_OUTPUT_COLOR_SPACE BT709 LIMIT, 720p HLG FULL
115 * @tc.desc : function test
116 */
117 HWTEST_F(HwdecHdr2SdrInnerTest, HEVC_HW_HDR2SDR_INNER_FUNC_0002, TestSize.Level0)
118 {
119 shared_ptr<VDecNdkInnerSample> vDecSample = make_shared<VDecNdkInnerSample>();
120 vDecSample->INP_DIR = INP_DIR_720_10;
121 vDecSample->DEFAULT_WIDTH = 1280;
122 vDecSample->DEFAULT_HEIGHT = 720;
123 vDecSample->DEFAULT_FRAME_RATE = 10;
124 vDecSample->SF_OUTPUT = true;
125 vDecSample->BT709_LIMIT_FLAG = true;
126 vDecSample->AFTER_EOS_DESTORY_CODEC = false;
127 if (!access("/system/lib64/media/", 0)) {
128 ASSERT_EQ(AVCS_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecNameHEVC));
129 vDecSample->WaitForEOS();
130 ASSERT_EQ(AVCS_ERR_OK, vDecSample->errCount);
131 } else {
132 ASSERT_EQ(AVCS_ERR_OK, vDecSample->CreateByName(g_codecNameHEVC));
133 ASSERT_EQ(AVCS_ERR_UNSUPPORT, vDecSample->Configure());
134 }
135 }
136
137 /**
138 * @tc.number : HEVC_HW_HDR2SDR_INNER_FUNC_0003
139 * @tc.name : h265 hard decode surface, nv21, OH_MD_KEY_VIDEO_DECODER_OUTPUT_COLOR_SPACE P3 FULL, 1080p HLG FULL
140 * @tc.desc : function test
141 */
142 HWTEST_F(HwdecHdr2SdrInnerTest, HEVC_HW_HDR2SDR_INNER_FUNC_0003, TestSize.Level0)
143 {
144 shared_ptr<VDecNdkInnerSample> vDecSample = make_shared<VDecNdkInnerSample>();
145 vDecSample->INP_DIR = INP_DIR_1080_10;
146 vDecSample->DEFAULT_WIDTH = 1920;
147 vDecSample->DEFAULT_HEIGHT = 1080;
148 vDecSample->DEFAULT_FRAME_RATE = 10;
149 vDecSample->DEFAULT_FORMAT = static_cast<int32_t>(VideoPixelFormat::NV21);
150 vDecSample->SF_OUTPUT = true;
151 vDecSample->P3_FULL_FLAG = true;
152 vDecSample->AFTER_EOS_DESTORY_CODEC = false;
153 if (!access("/system/lib64/media/", 0)) {
154 ASSERT_EQ(AVCS_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecNameHEVC));
155 vDecSample->WaitForEOS();
156 ASSERT_EQ(AVCS_ERR_OK, vDecSample->errCount);
157 } else {
158 ASSERT_EQ(AVCS_ERR_OK, vDecSample->CreateByName(g_codecNameHEVC));
159 ASSERT_EQ(AVCS_ERR_UNSUPPORT, vDecSample->Configure());
160 }
161 }
162
163 /**
164 * @tc.number : HEVC_HW_HDR2SDR_INNER_FUNC_0004
165 * @tc.name : 265 hw surface, nv21, OH_MD_KEY_VIDEO_DECODER_OUTPUT_COLOR_SPACE BT709 LIMIT, 1080p HLG FULL
166 * @tc.desc : function test
167 */
168 HWTEST_F(HwdecHdr2SdrInnerTest, HEVC_HW_HDR2SDR_INNER_FUNC_0004, TestSize.Level0)
169 {
170 shared_ptr<VDecNdkInnerSample> vDecSample = make_shared<VDecNdkInnerSample>();
171 vDecSample->INP_DIR = INP_DIR_1080_10;
172 vDecSample->DEFAULT_WIDTH = 1920;
173 vDecSample->DEFAULT_HEIGHT = 1080;
174 vDecSample->DEFAULT_FRAME_RATE = 10;
175 vDecSample->DEFAULT_FORMAT = static_cast<int32_t>(VideoPixelFormat::NV21);
176 vDecSample->SF_OUTPUT = true;
177 vDecSample->BT709_LIMIT_FLAG = true;
178 vDecSample->AFTER_EOS_DESTORY_CODEC = false;
179 if (!access("/system/lib64/media/", 0)) {
180 ASSERT_EQ(AVCS_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecNameHEVC));
181 vDecSample->WaitForEOS();
182 ASSERT_EQ(AVCS_ERR_OK, vDecSample->errCount);
183 } else {
184 ASSERT_EQ(AVCS_ERR_OK, vDecSample->CreateByName(g_codecNameHEVC));
185 ASSERT_EQ(AVCS_ERR_UNSUPPORT, vDecSample->Configure());
186 }
187 }
188
189 /**
190 * @tc.number : HEVC_HW_HDR2SDR_INNER_FUNC_0005
191 * @tc.name : 265 hd surface, nv12, OH_MD_KEY_VIDEO_DECODER_OUTPUT_COLOR_SPACE P3 FULL, 1920_1440 HLG FULL
192 * @tc.desc : function test
193 */
194 HWTEST_F(HwdecHdr2SdrInnerTest, HEVC_HW_HDR2SDR_INNER_FUNC_0005, TestSize.Level0)
195 {
196 shared_ptr<VDecNdkInnerSample> vDecSample = make_shared<VDecNdkInnerSample>();
197 vDecSample->INP_DIR = INP_DIR_1920_1440_30;
198 vDecSample->DEFAULT_WIDTH = 1920;
199 vDecSample->DEFAULT_HEIGHT = 1440;
200 vDecSample->DEFAULT_FRAME_RATE = 30;
201 vDecSample->SF_OUTPUT = true;
202 vDecSample->P3_FULL_FLAG = true;
203 vDecSample->AFTER_EOS_DESTORY_CODEC = false;
204 if (!access("/system/lib64/media/", 0)) {
205 ASSERT_EQ(AVCS_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecNameHEVC));
206 vDecSample->WaitForEOS();
207 ASSERT_EQ(AVCS_ERR_OK, vDecSample->errCount);
208 } else {
209 ASSERT_EQ(AVCS_ERR_OK, vDecSample->CreateByName(g_codecNameHEVC));
210 ASSERT_EQ(AVCS_ERR_UNSUPPORT, vDecSample->Configure());
211 }
212 }
213
214 /**
215 * @tc.number : HEVC_HW_HDR2SDR_INNER_FUNC_0006
216 * @tc.name : 265 hw surface, nv12, OH_MD_KEY_VIDEO_DECODER_OUTPUT_COLOR_SPACE BT709 LIMIT, 1920_1440 HLG FULL
217 * @tc.desc : function test
218 */
219 HWTEST_F(HwdecHdr2SdrInnerTest, HEVC_HW_HDR2SDR_INNER_FUNC_0006, TestSize.Level0)
220 {
221 shared_ptr<VDecNdkInnerSample> vDecSample = make_shared<VDecNdkInnerSample>();
222 vDecSample->INP_DIR = INP_DIR_1920_1440_30;
223 vDecSample->DEFAULT_WIDTH = 1920;
224 vDecSample->DEFAULT_HEIGHT = 1440;
225 vDecSample->DEFAULT_FRAME_RATE = 30;
226 vDecSample->SF_OUTPUT = true;
227 vDecSample->BT709_LIMIT_FLAG = true;
228 vDecSample->AFTER_EOS_DESTORY_CODEC = false;
229 if (!access("/system/lib64/media/", 0)) {
230 ASSERT_EQ(AVCS_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecNameHEVC));
231 vDecSample->WaitForEOS();
232 ASSERT_EQ(AVCS_ERR_OK, vDecSample->errCount);
233 } else {
234 ASSERT_EQ(AVCS_ERR_OK, vDecSample->CreateByName(g_codecNameHEVC));
235 ASSERT_EQ(AVCS_ERR_UNSUPPORT, vDecSample->Configure());
236 }
237 }
238
239 /**
240 * @tc.number : HEVC_HW_HDR2SDR_INNER_FUNC_0007
241 * @tc.name : 265 hw surface, nv12, OH_MD_KEY_VIDEO_DECODER_OUTPUT_COLOR_SPACE P3 FULL, 2336_1080 HLG FULL
242 * @tc.desc : function test
243 */
244 HWTEST_F(HwdecHdr2SdrInnerTest, HEVC_HW_HDR2SDR_INNER_FUNC_0007, TestSize.Level0)
245 {
246 shared_ptr<VDecNdkInnerSample> vDecSample = make_shared<VDecNdkInnerSample>();
247 vDecSample->INP_DIR = INP_DIR_2336_1080_10;
248 vDecSample->DEFAULT_WIDTH = 2336;
249 vDecSample->DEFAULT_HEIGHT = 1080;
250 vDecSample->DEFAULT_FRAME_RATE = 10;
251 vDecSample->SF_OUTPUT = true;
252 vDecSample->P3_FULL_FLAG = true;
253 vDecSample->AFTER_EOS_DESTORY_CODEC = false;
254 if (!access("/system/lib64/media/", 0)) {
255 ASSERT_EQ(AVCS_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecNameHEVC));
256 vDecSample->WaitForEOS();
257 ASSERT_EQ(AVCS_ERR_OK, vDecSample->errCount);
258 } else {
259 ASSERT_EQ(AVCS_ERR_OK, vDecSample->CreateByName(g_codecNameHEVC));
260 ASSERT_EQ(AVCS_ERR_UNSUPPORT, vDecSample->Configure());
261 }
262 }
263
264 /**
265 * @tc.number : HEVC_HW_HDR2SDR_INNER_FUNC_0008
266 * @tc.name : 265 hw surface, nv12, OH_MD_KEY_VIDEO_DECODER_OUTPUT_COLOR_SPACE BT709 LIMIT, 2336_1080 HLG FULL
267 * @tc.desc : function test
268 */
269 HWTEST_F(HwdecHdr2SdrInnerTest, HEVC_HW_HDR2SDR_INNER_FUNC_0008, TestSize.Level0)
270 {
271 shared_ptr<VDecNdkInnerSample> vDecSample = make_shared<VDecNdkInnerSample>();
272 vDecSample->INP_DIR = INP_DIR_2336_1080_10;
273 vDecSample->DEFAULT_WIDTH = 2336;
274 vDecSample->DEFAULT_HEIGHT = 1080;
275 vDecSample->DEFAULT_FRAME_RATE = 10;
276 vDecSample->SF_OUTPUT = true;
277 vDecSample->BT709_LIMIT_FLAG = true;
278 vDecSample->AFTER_EOS_DESTORY_CODEC = false;
279 if (!access("/system/lib64/media/", 0)) {
280 ASSERT_EQ(AVCS_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecNameHEVC));
281 vDecSample->WaitForEOS();
282 ASSERT_EQ(AVCS_ERR_OK, vDecSample->errCount);
283 } else {
284 ASSERT_EQ(AVCS_ERR_OK, vDecSample->CreateByName(g_codecNameHEVC));
285 ASSERT_EQ(AVCS_ERR_UNSUPPORT, vDecSample->Configure());
286 }
287 }
288
289 /**
290 * @tc.number : HEVC_HW_HDR2SDR_INNER_FUNC_0009
291 * @tc.name : 265 hw surface, nv12, OH_MD_KEY_VIDEO_DECODER_OUTPUT_COLOR_SPACE P3 FULL, 2336_1088 HLG FULL
292 * @tc.desc : function test
293 */
294 HWTEST_F(HwdecHdr2SdrInnerTest, HEVC_HW_HDR2SDR_INNER_FUNC_0009, TestSize.Level0)
295 {
296 shared_ptr<VDecNdkInnerSample> vDecSample = make_shared<VDecNdkInnerSample>();
297 vDecSample->INP_DIR = INP_DIR_2336_1088_10;
298 vDecSample->DEFAULT_WIDTH = 2336;
299 vDecSample->DEFAULT_HEIGHT = 1088;
300 vDecSample->DEFAULT_FRAME_RATE = 10;
301 vDecSample->SF_OUTPUT = true;
302 vDecSample->P3_FULL_FLAG = true;
303 vDecSample->AFTER_EOS_DESTORY_CODEC = false;
304 if (!access("/system/lib64/media/", 0)) {
305 ASSERT_EQ(AVCS_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecNameHEVC));
306 vDecSample->WaitForEOS();
307 ASSERT_EQ(AVCS_ERR_OK, vDecSample->errCount);
308 } else {
309 ASSERT_EQ(AVCS_ERR_OK, vDecSample->CreateByName(g_codecNameHEVC));
310 ASSERT_EQ(AVCS_ERR_UNSUPPORT, vDecSample->Configure());
311 }
312 }
313
314 /**
315 * @tc.number : HEVC_HW_HDR2SDR_INNER_FUNC_0010
316 * @tc.name : 265 hw surface, nv12, OH_MD_KEY_VIDEO_DECODER_OUTPUT_COLOR_SPACE BT709 LIMIT, 2336_1088 HLG FULL
317 * @tc.desc : function test
318 */
319 HWTEST_F(HwdecHdr2SdrInnerTest, HEVC_HW_HDR2SDR_INNER_FUNC_0010, TestSize.Level0)
320 {
321 shared_ptr<VDecNdkInnerSample> vDecSample = make_shared<VDecNdkInnerSample>();
322 vDecSample->INP_DIR = INP_DIR_2336_1088_10;
323 vDecSample->DEFAULT_WIDTH = 2336;
324 vDecSample->DEFAULT_HEIGHT = 1088;
325 vDecSample->DEFAULT_FRAME_RATE = 10;
326 vDecSample->SF_OUTPUT = true;
327 vDecSample->BT709_LIMIT_FLAG = true;
328 vDecSample->AFTER_EOS_DESTORY_CODEC = false;
329 if (!access("/system/lib64/media/", 0)) {
330 ASSERT_EQ(AVCS_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecNameHEVC));
331 vDecSample->WaitForEOS();
332 ASSERT_EQ(AVCS_ERR_OK, vDecSample->errCount);
333 } else {
334 ASSERT_EQ(AVCS_ERR_OK, vDecSample->CreateByName(g_codecNameHEVC));
335 ASSERT_EQ(AVCS_ERR_UNSUPPORT, vDecSample->Configure());
336 }
337 }
338
339 /**
340 * @tc.number : HEVC_HW_HDR2SDR_INNER_FUNC_0011
341 * @tc.name : 265 hw switch surface, nv21, OH_MD_KEY_VIDEO_DECODER_OUTPUT_COLOR_SPACE P3 FULL, 4k HLG FULL
342 * @tc.desc : function test
343 */
344 HWTEST_F(HwdecHdr2SdrInnerTest, HEVC_HW_HDR2SDR_INNER_FUNC_0011, TestSize.Level0)
345 {
346 shared_ptr<VDecNdkInnerSample> vDecSample = make_shared<VDecNdkInnerSample>();
347 vDecSample->INP_DIR = INP_DIR_4K_10;
348 vDecSample->DEFAULT_WIDTH = 3840;
349 vDecSample->DEFAULT_HEIGHT = 2160;
350 vDecSample->DEFAULT_FRAME_RATE = 10;
351 vDecSample->DEFAULT_FORMAT = static_cast<int32_t>(VideoPixelFormat::NV21);
352 vDecSample->SF_OUTPUT = true;
353 vDecSample->P3_FULL_FLAG = true;
354 vDecSample->AFTER_EOS_DESTORY_CODEC = false;
355 if (!access("/system/lib64/media/", 0)) {
356 ASSERT_EQ(AVCS_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecNameHEVC));
357 vDecSample->WaitForEOS();
358 ASSERT_EQ(AVCS_ERR_OK, vDecSample->errCount);
359 } else {
360 ASSERT_EQ(AVCS_ERR_OK, vDecSample->CreateByName(g_codecNameHEVC));
361 ASSERT_EQ(AVCS_ERR_UNSUPPORT, vDecSample->Configure());
362 }
363 }
364
365 /**
366 * @tc.number : HEVC_HW_HDR2SDR_INNER_FUNC_0012
367 * @tc.name : h265 hw surface, nv21, OH_MD_KEY_VIDEO_DECODER_OUTPUT_COLOR_SPACE BT709 LIMIT, 4k HLG FULL
368 * @tc.desc : function test
369 */
370 HWTEST_F(HwdecHdr2SdrInnerTest, HEVC_HW_HDR2SDR_INNER_FUNC_0012, TestSize.Level0)
371 {
372 shared_ptr<VDecNdkInnerSample> vDecSample = make_shared<VDecNdkInnerSample>();
373 vDecSample->INP_DIR = INP_DIR_4K_10;
374 vDecSample->DEFAULT_WIDTH = 3840;
375 vDecSample->DEFAULT_HEIGHT = 2160;
376 vDecSample->DEFAULT_FRAME_RATE = 10;
377 vDecSample->DEFAULT_FORMAT = static_cast<int32_t>(VideoPixelFormat::NV21);
378 vDecSample->SF_OUTPUT = true;
379 vDecSample->BT709_LIMIT_FLAG = true;
380 vDecSample->AFTER_EOS_DESTORY_CODEC = false;
381 if (!access("/system/lib64/media/", 0)) {
382 ASSERT_EQ(AVCS_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecNameHEVC));
383 vDecSample->WaitForEOS();
384 ASSERT_EQ(AVCS_ERR_OK, vDecSample->errCount);
385 } else {
386 ASSERT_EQ(AVCS_ERR_OK, vDecSample->CreateByName(g_codecNameHEVC));
387 ASSERT_EQ(AVCS_ERR_UNSUPPORT, vDecSample->Configure());
388 }
389 }
390
391 /**
392 * @tc.number : HEVC_HW_HDR2SDR_INNER_FUNC_0013
393 * @tc.name : H265 hw surface, nv21, OH_MD_KEY_VIDEO_DECODER_OUTPUT_COLOR_SPACE P3 FULL, res chnage HLG FULL
394 * @tc.desc : function test
395 */
396 HWTEST_F(HwdecHdr2SdrInnerTest, HEVC_HW_HDR2SDR_INNER_FUNC_0013, TestSize.Level0)
397 {
398 shared_ptr<VDecNdkInnerSample> vDecSample = make_shared<VDecNdkInnerSample>();
399 vDecSample->INP_DIR = inpDirResolution;
400 vDecSample->DEFAULT_WIDTH = 3840;
401 vDecSample->DEFAULT_HEIGHT = 2160;
402 vDecSample->DEFAULT_FRAME_RATE = 10;
403 vDecSample->DEFAULT_FORMAT = static_cast<int32_t>(VideoPixelFormat::NV21);
404 vDecSample->SF_OUTPUT = true;
405 vDecSample->P3_FULL_FLAG = true;
406 vDecSample->AFTER_EOS_DESTORY_CODEC = false;
407 if (!access("/system/lib64/media/", 0)) {
408 ASSERT_EQ(AVCS_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecNameHEVC));
409 vDecSample->WaitForEOS();
410 ASSERT_EQ(AVCS_ERR_OK, vDecSample->errCount);
411 } else {
412 ASSERT_EQ(AVCS_ERR_OK, vDecSample->CreateByName(g_codecNameHEVC));
413 ASSERT_EQ(AVCS_ERR_UNSUPPORT, vDecSample->Configure());
414 }
415 }
416
417 /**
418 * @tc.number : HEVC_HW_HDR2SDR_INNER_FUNC_0014
419 * @tc.name : 265 hw surface, nv21, OH_MD_KEY_VIDEO_DECODER_OUTPUT_COLOR_SPACE BT709 LIMIT, res change HLG FULL
420 * @tc.desc : function test
421 */
422 HWTEST_F(HwdecHdr2SdrInnerTest, HEVC_HW_HDR2SDR_INNER_FUNC_0014, TestSize.Level0)
423 {
424 shared_ptr<VDecNdkInnerSample> vDecSample = make_shared<VDecNdkInnerSample>();
425 vDecSample->INP_DIR = inpDirResolution;
426 vDecSample->DEFAULT_WIDTH = 3840;
427 vDecSample->DEFAULT_HEIGHT = 2160;
428 vDecSample->DEFAULT_FRAME_RATE = 10;
429 vDecSample->DEFAULT_FORMAT = static_cast<int32_t>(VideoPixelFormat::NV21);
430 vDecSample->SF_OUTPUT = true;
431 vDecSample->BT709_LIMIT_FLAG = true;
432 vDecSample->AFTER_EOS_DESTORY_CODEC = false;
433 if (!access("/system/lib64/media/", 0)) {
434 ASSERT_EQ(AVCS_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecNameHEVC));
435 vDecSample->WaitForEOS();
436 ASSERT_EQ(AVCS_ERR_OK, vDecSample->errCount);
437 } else {
438 ASSERT_EQ(AVCS_ERR_OK, vDecSample->CreateByName(g_codecNameHEVC));
439 ASSERT_EQ(AVCS_ERR_UNSUPPORT, vDecSample->Configure());
440 }
441 }
442
443 /**
444 * @tc.number : HEVC_HW_HDR2SDR_INNER_FUNC_0015
445 * @tc.name : H265 hw, nv12, OH_MD_KEY_VIDEO_DECODER_OUTPUT_COLOR_SPACE BT709 FULL
446 * @tc.desc : function test
447 */
448 HWTEST_F(HwdecHdr2SdrInnerTest, HEVC_HW_HDR2SDR_INNER_FUNC_0015, TestSize.Level0)
449 {
450 shared_ptr<VDecNdkInnerSample> vDecSample = make_shared<VDecNdkInnerSample>();
451 vDecSample->INP_DIR = INP_DIR_720_10;
452 vDecSample->DEFAULT_WIDTH = 1280;
453 vDecSample->DEFAULT_HEIGHT = 720;
454 vDecSample->DEFAULT_FRAME_RATE = 10;
455 vDecSample->SF_OUTPUT = true;
456 vDecSample->BT709_FULL_FLAG = true;
457 vDecSample->AFTER_EOS_DESTORY_CODEC = false;
458 ASSERT_EQ(AVCS_ERR_OK, vDecSample->CreateByName(g_codecNameHEVC));
459 if (!access("/system/lib64/media/", 0)) {
460 ASSERT_EQ(AVCS_ERR_VIDEO_UNSUPPORT_COLOR_SPACE_CONVERSION, vDecSample->Configure());
461 } else {
462 ASSERT_EQ(AVCS_ERR_VIDEO_UNSUPPORT_COLOR_SPACE_CONVERSION, vDecSample->Configure());
463 }
464 }
465
466 /**
467 * @tc.number : HEVC_HW_HDR2SDR_INNER_FUNC_0016
468 * @tc.name : H265 hw, rgba, OH_MD_KEY_VIDEO_DECODER_OUTPUT_COLOR_SPACE P3 FULL
469 * @tc.desc : function test
470 */
471 HWTEST_F(HwdecHdr2SdrInnerTest, HEVC_HW_HDR2SDR_INNER_FUNC_0016, TestSize.Level0)
472 {
473 shared_ptr<VDecNdkInnerSample> vDecSample = make_shared<VDecNdkInnerSample>();
474 vDecSample->INP_DIR = INP_DIR_720_10;
475 vDecSample->DEFAULT_WIDTH = 1280;
476 vDecSample->DEFAULT_HEIGHT = 720;
477 vDecSample->DEFAULT_FRAME_RATE = 10;
478 vDecSample->SF_OUTPUT = true;
479 vDecSample->P3_FULL_FLAG = true;
480 vDecSample->AFTER_EOS_DESTORY_CODEC = false;
481 vDecSample->DEFAULT_FORMAT = static_cast<int32_t>(VideoPixelFormat::RGBA);
482 ASSERT_EQ(AVCS_ERR_OK, vDecSample->CreateByName(g_codecNameHEVC));
483 ASSERT_EQ(AVCS_ERR_UNSUPPORT, vDecSample->Configure());
484 }
485
486 /**
487 * @tc.number : HEVC_HW_HDR2SDR_INNER_FUNC_0017
488 * @tc.name : H265 hard decode surface, nv12, OH_MD_KEY_VIDEO_DECODER_OUTPUT_COLOR_SPACE P3 FULL,SDR
489 * @tc.desc : function test
490 */
491 HWTEST_F(HwdecHdr2SdrInnerTest, HEVC_HW_HDR2SDR_INNER_FUNC_0017, TestSize.Level0)
492 {
493 shared_ptr<VDecNdkInnerSample> vDecSample = make_shared<VDecNdkInnerSample>();
494 vDecSample->INP_DIR = inpDirSdr;
495 vDecSample->DEFAULT_WIDTH = 1920;
496 vDecSample->DEFAULT_HEIGHT = 1080;
497 vDecSample->DEFAULT_FRAME_RATE = 30;
498 vDecSample->SF_OUTPUT = true;
499 vDecSample->P3_FULL_FLAG = true;
500 vDecSample->HDR2SDR = true;
501 vDecSample->AFTER_EOS_DESTORY_CODEC = false;
502 if (!access("/system/lib64/media/", 0)) {
503 ASSERT_EQ(AVCS_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecNameHEVC));
504 vDecSample->WaitForEOS();
505 ASSERT_EQ(AVCS_ERR_OK, vDecSample->errCount);
506 } else {
507 ASSERT_EQ(AVCS_ERR_OK, vDecSample->CreateByName(g_codecNameHEVC));
508 ASSERT_EQ(AVCS_ERR_UNSUPPORT, vDecSample->Configure());
509 }
510 }
511
512 /**
513 * @tc.number : HEVC_HW_HDR2SDR_INNER_FUNC_0018
514 * @tc.name : H265 hard decode surface, nv12, OH_MD_KEY_VIDEO_DECODER_OUTPUT_COLOR_SPACE P3 FULL, HDR 10
515 * @tc.desc : function test
516 */
517 HWTEST_F(HwdecHdr2SdrInnerTest, HEVC_HW_HDR2SDR_INNER_FUNC_0018, TestSize.Level0)
518 {
519 shared_ptr<VDecNdkInnerSample> vDecSample = make_shared<VDecNdkInnerSample>();
520 vDecSample->INP_DIR = inpDirHdr10;
521 vDecSample->DEFAULT_WIDTH = 3840;
522 vDecSample->DEFAULT_HEIGHT = 2160;
523 vDecSample->DEFAULT_FRAME_RATE = 30;
524 vDecSample->SF_OUTPUT = true;
525 vDecSample->P3_FULL_FLAG = true;
526 vDecSample->HDR2SDR = true;
527 vDecSample->AFTER_EOS_DESTORY_CODEC = false;
528 if (!access("/system/lib64/media/", 0)) {
529 ASSERT_EQ(AVCS_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecNameHEVC));
530 vDecSample->WaitForEOS();
531 ASSERT_EQ(AVCS_ERR_OK, vDecSample->errCount);
532 } else {
533 ASSERT_EQ(AVCS_ERR_OK, vDecSample->CreateByName(g_codecNameHEVC));
534 ASSERT_EQ(AVCS_ERR_UNSUPPORT, vDecSample->Configure());
535 }
536 }
537
538 /**
539 * @tc.number : HEVC_HW_HDR2SDR_INNER_FUNC_0019
540 * @tc.name : H265 hard decode surface, nv12, OH_MD_KEY_VIDEO_DECODER_OUTPUT_COLOR_SPACE P3 FULL, HLG
541 * @tc.desc : function test
542 */
543 HWTEST_F(HwdecHdr2SdrInnerTest, HEVC_HW_HDR2SDR_INNER_FUNC_0019, TestSize.Level0)
544 {
545 shared_ptr<VDecNdkInnerSample> vDecSample = make_shared<VDecNdkInnerSample>();
546 vDecSample->INP_DIR = inpDirHlg;
547 vDecSample->DEFAULT_WIDTH = 3840;
548 vDecSample->DEFAULT_HEIGHT = 2160;
549 vDecSample->DEFAULT_FRAME_RATE = 30;
550 vDecSample->SF_OUTPUT = true;
551 vDecSample->P3_FULL_FLAG = true;
552 vDecSample->HDR2SDR = true;
553 vDecSample->AFTER_EOS_DESTORY_CODEC = false;
554 if (!access("/system/lib64/media/", 0)) {
555 ASSERT_EQ(AVCS_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecNameHEVC));
556 vDecSample->WaitForEOS();
557 ASSERT_EQ(AVCS_ERR_OK, vDecSample->errCount);
558 } else {
559 ASSERT_EQ(AVCS_ERR_OK, vDecSample->CreateByName(g_codecNameHEVC));
560 ASSERT_EQ(AVCS_ERR_UNSUPPORT, vDecSample->Configure());
561 }
562 }
563
564 /**
565 * @tc.number : HEVC_HW_HDR2SDR_INNER_FUNC_0020
566 * @tc.name : H265 hard decode surface, nv12, OH_MD_KEY_VIDEO_DECODER_OUTPUT_COLOR_SPACE P3 FULL, PQ limit
567 * @tc.desc : function test
568 */
569 HWTEST_F(HwdecHdr2SdrInnerTest, HEVC_HW_HDR2SDR_INNER_FUNC_0020, TestSize.Level0)
570 {
571 shared_ptr<VDecNdkInnerSample> vDecSample = make_shared<VDecNdkInnerSample>();
572 vDecSample->INP_DIR = inpDirPqlimit;
573 vDecSample->DEFAULT_WIDTH = 3840;
574 vDecSample->DEFAULT_HEIGHT = 2160;
575 vDecSample->DEFAULT_FRAME_RATE = 30;
576 vDecSample->SF_OUTPUT = true;
577 vDecSample->P3_FULL_FLAG = true;
578 vDecSample->HDR2SDR = true;
579 vDecSample->AFTER_EOS_DESTORY_CODEC = false;
580 if (!access("/system/lib64/media/", 0)) {
581 ASSERT_EQ(AVCS_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecNameHEVC));
582 vDecSample->WaitForEOS();
583 ASSERT_EQ(AVCS_ERR_OK, vDecSample->errCount);
584 } else {
585 ASSERT_EQ(AVCS_ERR_OK, vDecSample->CreateByName(g_codecNameHEVC));
586 ASSERT_EQ(AVCS_ERR_UNSUPPORT, vDecSample->Configure());
587 }
588 }
589
590 /**
591 * @tc.number : HEVC_HW_HDR2SDR_INNER_FUNC_0021
592 * @tc.name : H265 hard decode surface, nv12, OH_MD_KEY_VIDEO_DECODER_OUTPUT_COLOR_SPACE P3 FULL, HLG limit
593 * @tc.desc : function test
594 */
595 HWTEST_F(HwdecHdr2SdrInnerTest, HEVC_HW_HDR2SDR_INNER_FUNC_0021, TestSize.Level0)
596 {
597 shared_ptr<VDecNdkInnerSample> vDecSample = make_shared<VDecNdkInnerSample>();
598 vDecSample->INP_DIR = inpDirHlgLimit;
599 vDecSample->DEFAULT_WIDTH = 1920;
600 vDecSample->DEFAULT_HEIGHT = 1080;
601 vDecSample->DEFAULT_FRAME_RATE = 30;
602 vDecSample->SF_OUTPUT = true;
603 vDecSample->P3_FULL_FLAG = true;
604 vDecSample->HDR2SDR = true;
605 vDecSample->AFTER_EOS_DESTORY_CODEC = false;
606 if (!access("/system/lib64/media/", 0)) {
607 ASSERT_EQ(AVCS_ERR_OK, vDecSample->RunVideoDec_Surface(g_codecNameHEVC));
608 vDecSample->WaitForEOS();
609 ASSERT_EQ(AVCS_ERR_OK, vDecSample->errCount);
610 } else {
611 ASSERT_EQ(AVCS_ERR_OK, vDecSample->CreateByName(g_codecNameHEVC));
612 ASSERT_EQ(AVCS_ERR_UNSUPPORT, vDecSample->Configure());
613 }
614 }
615
616 /**
617 * @tc.number : HEVC_HW_HDR2SDR_INNER_FUNC_0022
618 * @tc.name : H265 hw surface, nv12, OH_MD_KEY_VIDEO_DECODER_OUTPUT_COLOR_SPACE P3 FULL, no prepare before start
619 * @tc.desc : function test
620 */
621 HWTEST_F(HwdecHdr2SdrInnerTest, HEVC_HW_HDR2SDR_INNER_FUNC_0022, TestSize.Level0)
622 {
623 shared_ptr<VDecNdkInnerSample> vDecSample = make_shared<VDecNdkInnerSample>();
624 vDecSample->INP_DIR = INP_DIR_720_10;
625 vDecSample->DEFAULT_WIDTH = 1280;
626 vDecSample->DEFAULT_HEIGHT = 720;
627 vDecSample->DEFAULT_FRAME_RATE = 10;
628 vDecSample->SF_OUTPUT = true;
629 vDecSample->P3_FULL_FLAG = true;
630 vDecSample->AFTER_EOS_DESTORY_CODEC = false;
631 vDecSample->CreateSurface();
632 ASSERT_NE(vDecSample->nativeWindow[0], nullptr);
633 ASSERT_EQ(AVCS_ERR_OK, vDecSample->CreateByName(g_codecNameHEVC));
634 if (!access("/system/lib64/media/", 0)) {
635 ASSERT_EQ(AVCS_ERR_OK, vDecSample->Configure());
636 ASSERT_EQ(AVCS_ERR_OK, vDecSample->SetOutputSurface());
637 ASSERT_EQ(AVCS_ERR_INVALID_OPERATION, vDecSample->Start());
638 } else {
639 ASSERT_EQ(AVCS_ERR_UNSUPPORT, vDecSample->Configure());
640 }
641 }
642
643 /**
644 * @tc.number : HEVC_HW_HDR2SDR_INNER_FUNC_0023
645 * @tc.name : H265 hw buffer, nv12, OH_MD_KEY_VIDEO_DECODER_OUTPUT_COLOR_SPACE P3 FULL
646 * @tc.desc : function test
647 */
648 HWTEST_F(HwdecHdr2SdrInnerTest, HEVC_HW_HDR2SDR_INNER_FUNC_0023, TestSize.Level0)
649 {
650 shared_ptr<VDecNdkInnerSample> vDecSample = make_shared<VDecNdkInnerSample>();
651 vDecSample->INP_DIR = INP_DIR_720_10;
652 vDecSample->DEFAULT_WIDTH = 1280;
653 vDecSample->DEFAULT_HEIGHT = 720;
654 vDecSample->DEFAULT_FRAME_RATE = 10;
655 vDecSample->P3_FULL_FLAG = true;
656 vDecSample->AFTER_EOS_DESTORY_CODEC = false;
657 if (!access("/system/lib64/media/", 0)) {
658 ASSERT_EQ(AVCS_ERR_INVALID_OPERATION, vDecSample->RunVideoDecoder(g_codecNameHEVC));
659 vDecSample->WaitForEOS();
660 ASSERT_EQ(AVCS_ERR_OK, vDecSample->errCount);
661 } else {
662 ASSERT_EQ(AVCS_ERR_OK, vDecSample->CreateByName(g_codecNameHEVC));
663 ASSERT_EQ(AVCS_ERR_UNSUPPORT, vDecSample->Configure());
664 }
665 }
666
667 /**
668 * @tc.number : HEVC_HW_HDR2SDR_INNER_FUNC_0024
669 * @tc.name : H265 hard decode, nv21, OH_MD_KEY_VIDEO_DECODER_OUTPUT_COLOR_SPACE P3 FULL, HLG FULl
670 * @tc.desc : function test
671 */
672 HWTEST_F(HwdecHdr2SdrInnerTest, HEVC_HW_HDR2SDR_INNER_FUNC_0024, TestSize.Level0)
673 {
674 shared_ptr<VDecNdkInnerSample> vDecSample = make_shared<VDecNdkInnerSample>();
675 vDecSample->INP_DIR = INP_DIR_720_10;
676 vDecSample->DEFAULT_WIDTH = 1280;
677 vDecSample->DEFAULT_HEIGHT = 720;
678 vDecSample->DEFAULT_FRAME_RATE = 10;
679 vDecSample->SF_OUTPUT = true;
680 vDecSample->P3_FULL_FLAG = true;
681 vDecSample->DEFAULT_FORMAT = static_cast<int32_t>(VideoPixelFormat::NV21);
682 vDecSample->AFTER_EOS_DESTORY_CODEC = false;
683 ASSERT_EQ(AVCS_ERR_OK, vDecSample->CreateByName(g_codecName));
684 if (!access("/system/lib64/media/", 0)) {
685 ASSERT_EQ(AVCS_ERR_VIDEO_UNSUPPORT_COLOR_SPACE_CONVERSION, vDecSample->Configure());
686 } else {
687 ASSERT_EQ(AVCS_ERR_UNSUPPORT, vDecSample->Configure());
688 }
689 }
690 } //namespace