• 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 #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