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