1 /*
2 * Copyright (C) 2024 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 <securec.h>
17 #include "gtest/gtest.h"
18 #include "native_avcodec_videoencoder.h"
19 #include "native_averrors.h"
20 #include "native_avcodec_base.h"
21 #include "avcodec_codec_name.h"
22 #include "native_avcapability.h"
23
24 namespace {
25 OH_AVCodec *venc_ = NULL;
26 OH_AVCapability *cap = nullptr;
27 OH_AVCapability *cap_hevc = nullptr;
28 constexpr uint32_t CODEC_NAME_SIZE = 128;
29 char g_codecName[CODEC_NAME_SIZE] = {};
30 char g_codecNameHEVC[CODEC_NAME_SIZE] = {};
31 OH_AVFormat *format;
32 } // namespace
33 namespace OHOS {
34 namespace Media {
35 class HwCapabilityNdkTest : public testing::Test {
36 public:
37 static void SetUpTestCase();
38 static void TearDownTestCase();
39 void SetUp() override;
40 void TearDown() override;
41 void InputFunc();
42 void OutputFunc();
43 void Release();
44 int32_t Stop();
45 };
46 } // namespace Media
47 } // namespace OHOS
48
49 using namespace std;
50 using namespace OHOS;
51 using namespace OHOS::Media;
52 using namespace testing::ext;
53
SetUpTestCase()54 void HwCapabilityNdkTest::SetUpTestCase()
55 {
56 cap = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, true, HARDWARE);
57 const char *tmpCodecName = OH_AVCapability_GetName(cap);
58 if (memcpy_s(g_codecName, sizeof(g_codecName), tmpCodecName, strlen(tmpCodecName)) != 0)
59 cout << "memcpy failed" << endl;
60 cout << "codecname: " << g_codecName << endl;
61 cap_hevc = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC, true, HARDWARE);
62 const char *tmpCodecNameHevc = OH_AVCapability_GetName(cap_hevc);
63 if (memcpy_s(g_codecNameHEVC, sizeof(g_codecNameHEVC), tmpCodecNameHevc, strlen(tmpCodecNameHevc)) != 0)
64 cout << "memcpy failed" << endl;
65 cout << "codecname_hevc: " << g_codecNameHEVC << endl;
66 }
TearDownTestCase()67 void HwCapabilityNdkTest::TearDownTestCase() {}
SetUp()68 void HwCapabilityNdkTest::SetUp() {}
TearDown()69 void HwCapabilityNdkTest::TearDown()
70 {
71 if (venc_ != NULL) {
72 OH_VideoEncoder_Destroy(venc_);
73 venc_ = nullptr;
74 }
75 if (format != nullptr) {
76 OH_AVFormat_Destroy(format);
77 format = nullptr;
78 }
79 }
80 namespace {
81 /**
82 * @tc.number : VIDEO_TEMPORAL_ENCODE_API_0010
83 * @tc.name : OH_AVCapability_IsFeatureSupported para error
84 * @tc.desc : api test
85 */
86 HWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0010, TestSize.Level2)
87 {
88 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, true, HARDWARE);
89 ASSERT_NE(nullptr, capability);
90 ASSERT_EQ(false, OH_AVCapability_IsFeatureSupported(capability, static_cast<OH_AVCapabilityFeature>(4)));
91 }
92
93 /**
94 * @tc.number : VIDEO_TEMPORAL_ENCODE_API_0011
95 * @tc.name : 解码,是否支持分层编码
96 * @tc.desc : api test
97 */
98 HWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0011, TestSize.Level2)
99 {
100 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, false, HARDWARE);
101 ASSERT_NE(nullptr, capability);
102 ASSERT_EQ(false, OH_AVCapability_IsFeatureSupported(capability, VIDEO_ENCODER_TEMPORAL_SCALABILITY));
103 }
104
105 /**
106 * @tc.number : VIDEO_TEMPORAL_ENCODE_API_0012
107 * @tc.name : 编码,是否支持分层编码
108 * @tc.desc : api test
109 */
110 HWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0012, TestSize.Level1)
111 {
112 if (!access("/system/lib64/media/", 0)) {
113 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, true, HARDWARE);
114 ASSERT_NE(nullptr, capability);
115 ASSERT_EQ(true, OH_AVCapability_IsFeatureSupported(capability, VIDEO_ENCODER_TEMPORAL_SCALABILITY));
116 } else {
117 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, true, HARDWARE);
118 ASSERT_NE(nullptr, capability);
119 ASSERT_EQ(false, OH_AVCapability_IsFeatureSupported(capability, VIDEO_ENCODER_TEMPORAL_SCALABILITY));
120 }
121 }
122
123 /**
124 * @tc.number : VIDEO_TEMPORAL_ENCODE_API_0013
125 * @tc.name : 解码,是否支持LTR
126 * @tc.desc : api test
127 */
128 HWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0013, TestSize.Level2)
129 {
130 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, false, HARDWARE);
131 ASSERT_NE(nullptr, capability);
132 ASSERT_EQ(false, OH_AVCapability_IsFeatureSupported(capability, VIDEO_ENCODER_LONG_TERM_REFERENCE));
133 }
134
135 /**
136 * @tc.number : VIDEO_TEMPORAL_ENCODE_API_0014
137 * @tc.name : 编码,是否支持LTR
138 * @tc.desc : api test
139 */
140 HWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0014, TestSize.Level1)
141 {
142 if (!access("/system/lib64/media/", 0)) {
143 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, true, HARDWARE);
144 ASSERT_NE(nullptr, capability);
145 ASSERT_EQ(true, OH_AVCapability_IsFeatureSupported(capability, VIDEO_ENCODER_LONG_TERM_REFERENCE));
146 } else {
147 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, true, HARDWARE);
148 ASSERT_NE(nullptr, capability);
149 ASSERT_EQ(false, OH_AVCapability_IsFeatureSupported(capability, VIDEO_ENCODER_LONG_TERM_REFERENCE));
150 }
151 }
152
153 /**
154 * @tc.number : VIDEO_TEMPORAL_ENCODE_API_0015
155 * @tc.name : 软解,是否支持低时延
156 * @tc.desc : api test
157 */
158 HWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0015, TestSize.Level2)
159 {
160 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, false, SOFTWARE);
161 ASSERT_NE(nullptr, capability);
162 ASSERT_EQ(false, OH_AVCapability_IsFeatureSupported(capability, VIDEO_LOW_LATENCY));
163 }
164
165 /**
166 * @tc.number : VIDEO_TEMPORAL_ENCODE_API_0016
167 * @tc.name : 硬解,是否支持低时延
168 * @tc.desc : api test
169 */
170 HWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0016, TestSize.Level2)
171 {
172 if (!access("/system/lib64/media/", 0)) {
173 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(
174 OH_AVCODEC_MIMETYPE_VIDEO_AVC, false, HARDWARE);
175 ASSERT_NE(nullptr, capability);
176 ASSERT_EQ(true, OH_AVCapability_IsFeatureSupported(capability, VIDEO_LOW_LATENCY));
177 } else {
178 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(
179 OH_AVCODEC_MIMETYPE_VIDEO_AVC, false, HARDWARE);
180 ASSERT_NE(nullptr, capability);
181 ASSERT_EQ(false, OH_AVCapability_IsFeatureSupported(capability, VIDEO_LOW_LATENCY));
182 }
183 }
184
185 /**
186 * @tc.number : VIDEO_TEMPORAL_ENCODE_API_0017
187 * @tc.name : 编码,是否支持低时延
188 * @tc.desc : api test
189 */
190 HWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0017, TestSize.Level1)
191 {
192 if (!access("/system/lib64/media/", 0)) {
193 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, true, HARDWARE);
194 ASSERT_NE(nullptr, capability);
195 ASSERT_EQ(true, OH_AVCapability_IsFeatureSupported(capability, VIDEO_LOW_LATENCY));
196 } else {
197 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, true, HARDWARE);
198 ASSERT_NE(nullptr, capability);
199 ASSERT_EQ(false, OH_AVCapability_IsFeatureSupported(capability, VIDEO_LOW_LATENCY));
200 }
201 }
202
203 /**
204 * @tc.number : VIDEO_TEMPORAL_ENCODE_API_0018
205 * @tc.name : OH_AVCapability_GetFeatureProperties para error
206 * @tc.desc : api test
207 */
208 HWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0018, TestSize.Level2)
209 {
210 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, true, HARDWARE);
211 ASSERT_NE(nullptr, capability);
212 ASSERT_EQ(nullptr, OH_AVCapability_GetFeatureProperties(capability, static_cast<OH_AVCapabilityFeature>(4)));
213
214 ASSERT_EQ(nullptr, OH_AVCapability_GetFeatureProperties(capability, static_cast<OH_AVCapabilityFeature>(-1)));
215 ASSERT_EQ(nullptr, OH_AVCapability_GetFeatureProperties(capability, static_cast<OH_AVCapabilityFeature>(100)));
216
217 ASSERT_EQ(nullptr, OH_AVCapability_GetFeatureProperties(capability, VIDEO_ENCODER_TEMPORAL_SCALABILITY));
218 }
219
220 /**
221 * @tc.number : VIDEO_TEMPORAL_ENCODE_API_0019
222 * @tc.name : 解码,查询分层编码的能力值
223 * @tc.desc : api test
224 */
225 HWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0019, TestSize.Level2)
226 {
227 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, false, HARDWARE);
228 ASSERT_NE(nullptr, capability);
229 ASSERT_EQ(nullptr, OH_AVCapability_GetFeatureProperties(capability, VIDEO_ENCODER_TEMPORAL_SCALABILITY));
230 }
231
232 /**
233 * @tc.number : VIDEO_TEMPORAL_ENCODE_API_0020
234 * @tc.name : 编码,查询分层编码的能力值
235 * @tc.desc : api test
236 */
237 HWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0020, TestSize.Level1)
238 {
239 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, true, HARDWARE);
240 ASSERT_NE(nullptr, capability);
241 ASSERT_EQ(nullptr, OH_AVCapability_GetFeatureProperties(capability, VIDEO_ENCODER_TEMPORAL_SCALABILITY));
242 }
243
244 /**
245 * @tc.number : VIDEO_TEMPORAL_ENCODE_API_0021
246 * @tc.name : 解码,查询LTR能力值
247 * @tc.desc : api test
248 */
249 HWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0021, TestSize.Level2)
250 {
251 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, false, HARDWARE);
252 ASSERT_NE(nullptr, capability);
253 ASSERT_EQ(nullptr, OH_AVCapability_GetFeatureProperties(capability, VIDEO_ENCODER_LONG_TERM_REFERENCE));
254 }
255
256 /**
257 * @tc.number : VIDEO_TEMPORAL_ENCODE_API_0022
258 * @tc.name : 编码,查询LTR的能力值
259 * @tc.desc : api test
260 */
261 HWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0022, TestSize.Level1)
262 {
263 if (!access("/system/lib64/media/", 0)) {
264 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, true, HARDWARE);
265 ASSERT_NE(nullptr, capability);
266 format = OH_AVCapability_GetFeatureProperties(capability, VIDEO_ENCODER_LONG_TERM_REFERENCE);
267 ASSERT_NE(nullptr, format);
268 int ltrnum = 0;
269 EXPECT_EQ(OH_AVFormat_GetIntValue(
270 format, OH_FEATURE_PROPERTY_KEY_VIDEO_ENCODER_MAX_LTR_FRAME_COUNT, <rnum), true);
271 EXPECT_EQ(ltrnum, 10);
272 } else {
273 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, true, HARDWARE);
274 ASSERT_NE(nullptr, capability);
275 ASSERT_EQ(nullptr, OH_AVCapability_GetFeatureProperties(capability, VIDEO_ENCODER_LONG_TERM_REFERENCE));
276 }
277 }
278
279 /**
280 * @tc.number : VIDEO_TEMPORAL_ENCODE_API_0023
281 * @tc.name : 软解,查询低时延的能力值
282 * @tc.desc : api test
283 */
284 HWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0023, TestSize.Level2)
285 {
286 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, false, SOFTWARE);
287 ASSERT_NE(nullptr, capability);
288 ASSERT_EQ(nullptr, OH_AVCapability_GetFeatureProperties(capability, VIDEO_LOW_LATENCY));
289 }
290
291 /**
292 * @tc.number : VIDEO_TEMPORAL_ENCODE_API_0024
293 * @tc.name : 硬解,查询低时延的能力值
294 * @tc.desc : api test
295 */
296 HWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0024, TestSize.Level2)
297 {
298 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, false, HARDWARE);
299 ASSERT_NE(nullptr, capability);
300 ASSERT_EQ(nullptr, OH_AVCapability_GetFeatureProperties(capability, VIDEO_LOW_LATENCY));
301 }
302
303 /**
304 * @tc.number : VIDEO_TEMPORAL_ENCODE_API_0025
305 * @tc.name : 编码,查询低时延的能力值
306 * @tc.desc : api test
307 */
308 HWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0025, TestSize.Level1)
309 {
310 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, true, HARDWARE);
311 ASSERT_NE(nullptr, capability);
312 ASSERT_EQ(nullptr, OH_AVCapability_GetFeatureProperties(capability, VIDEO_LOW_LATENCY));
313 }
314
315 /**
316 * @tc.number : VIDEO_TEMPORAL_ENCODE_API_0026
317 * @tc.name : 能力查询是否支持LTRH265
318 * @tc.desc : function test
319 */
320 HWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0026, TestSize.Level1)
321 {
322 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC, true, HARDWARE);
323 if (!access("/system/lib64/media/", 0)) {
324 ASSERT_EQ(true, OH_AVCapability_IsFeatureSupported(capability, VIDEO_ENCODER_LONG_TERM_REFERENCE));
325 } else {
326 ASSERT_EQ(false, OH_AVCapability_IsFeatureSupported(capability, VIDEO_ENCODER_LONG_TERM_REFERENCE));
327 }
328 }
329
330 /**
331 * @tc.number : VIDEO_TEMPORAL_ENCODE_API_0027
332 * @tc.name : 能力查询是否支持LTRH265
333 * @tc.desc : function test
334 */
335 HWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0027, TestSize.Level1)
336 {
337 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC, false, HARDWARE);
338 ASSERT_EQ(false, OH_AVCapability_IsFeatureSupported(capability, VIDEO_ENCODER_LONG_TERM_REFERENCE));
339 }
340 /**
341 * @tc.number : VIDEO_TEMPORAL_ENCODE_API_0028
342 * @tc.name : 能力查询是否支持低时延H265
343 * @tc.desc : function test
344 */
345 HWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0028, TestSize.Level1)
346 {
347 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC, true, HARDWARE);
348 if (!access("/system/lib64/media/", 0)) {
349 ASSERT_EQ(true, OH_AVCapability_IsFeatureSupported(capability, VIDEO_LOW_LATENCY));
350 } else {
351 ASSERT_EQ(false, OH_AVCapability_IsFeatureSupported(capability, VIDEO_LOW_LATENCY));
352 }
353 }
354
355 /**
356 * @tc.number : VIDEO_TEMPORAL_ENCODE_API_0029
357 * @tc.name : 能力查询是否支持低时延H265
358 * @tc.desc : function test
359 */
360 HWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0029, TestSize.Level1)
361 {
362 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC, false, HARDWARE);
363 if (!access("/system/lib64/media/", 0)) {
364 ASSERT_EQ(true, OH_AVCapability_IsFeatureSupported(capability, VIDEO_LOW_LATENCY));
365 } else {
366 ASSERT_EQ(false, OH_AVCapability_IsFeatureSupported(capability, VIDEO_LOW_LATENCY));
367 }
368 }
369 /**
370 * @tc.number : VIDEO_TEMPORAL_ENCODE_API_0030
371 * @tc.name : 能力查询是否支持分层编码H265
372 * @tc.desc : function test
373 */
374 HWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0030, TestSize.Level1)
375 {
376 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC, true, HARDWARE);
377 if (!access("/system/lib64/media/", 0)) {
378 ASSERT_EQ(true, OH_AVCapability_IsFeatureSupported(capability, VIDEO_ENCODER_TEMPORAL_SCALABILITY));
379 } else {
380 ASSERT_EQ(false, OH_AVCapability_IsFeatureSupported(capability, VIDEO_ENCODER_TEMPORAL_SCALABILITY));
381 }
382 }
383
384 /**
385 * @tc.number : VIDEO_TEMPORAL_ENCODE_API_0031
386 * @tc.name : 能力查询是否支持分层编码H265
387 * @tc.desc : function test
388 */
389 HWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0031, TestSize.Level1)
390 {
391 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC, false, HARDWARE);
392 ASSERT_EQ(false, OH_AVCapability_IsFeatureSupported(capability, VIDEO_ENCODER_TEMPORAL_SCALABILITY));
393 }
394 /**
395 * @tc.number : VIDEO_TEMPORAL_ENCODE_API_0032
396 * @tc.name : 编码,查询低时延的能力值H265
397 * @tc.desc : api test
398 */
399 HWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0032, TestSize.Level1)
400 {
401 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC, true, HARDWARE);
402 ASSERT_NE(nullptr, capability);
403 ASSERT_EQ(nullptr, OH_AVCapability_GetFeatureProperties(capability, VIDEO_LOW_LATENCY));
404 }
405 /**
406 * @tc.number : VIDEO_TEMPORAL_ENCODE_API_0033
407 * @tc.name : 解码,查询低时延的能力值H265
408 * @tc.desc : api test
409 */
410 HWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0033, TestSize.Level1)
411 {
412 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC, false, HARDWARE);
413 ASSERT_NE(nullptr, capability);
414 ASSERT_EQ(nullptr, OH_AVCapability_GetFeatureProperties(capability, VIDEO_LOW_LATENCY));
415 }
416 /**
417 * @tc.number : VIDEO_TEMPORAL_ENCODE_API_0034
418 * @tc.name : 解码,查询分层编码的能力值H265
419 * @tc.desc : api test
420 */
421 HWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0034, TestSize.Level2)
422 {
423 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC, false, HARDWARE);
424 ASSERT_NE(nullptr, capability);
425 ASSERT_EQ(nullptr, OH_AVCapability_GetFeatureProperties(capability, VIDEO_ENCODER_TEMPORAL_SCALABILITY));
426 }
427
428 /**
429 * @tc.number : VIDEO_TEMPORAL_ENCODE_API_0035
430 * @tc.name : 编码,查询分层编码的能力值H265
431 * @tc.desc : api test
432 */
433 HWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0035, TestSize.Level1)
434 {
435 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC, true, HARDWARE);
436 ASSERT_NE(nullptr, capability);
437 ASSERT_EQ(nullptr, OH_AVCapability_GetFeatureProperties(capability, VIDEO_ENCODER_TEMPORAL_SCALABILITY));
438 }
439 /**
440 * @tc.number : VIDEO_TEMPORAL_ENCODE_API_0036
441 * @tc.name : 解码,查询LTR能力值H265
442 * @tc.desc : api test
443 */
444 HWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0036, TestSize.Level2)
445 {
446 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC, false, HARDWARE);
447 ASSERT_NE(nullptr, capability);
448 ASSERT_EQ(nullptr, OH_AVCapability_GetFeatureProperties(capability, VIDEO_ENCODER_LONG_TERM_REFERENCE));
449 }
450
451 /**
452 * @tc.number : VIDEO_TEMPORAL_ENCODE_API_0037
453 * @tc.name : 编码,查询LTR的能力值H265
454 * @tc.desc : api test
455 */
456 HWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0037, TestSize.Level1)
457 {
458 if (!access("/system/lib64/media/", 0)) {
459 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC,
460 true, HARDWARE);
461 ASSERT_NE(nullptr, capability);
462 format = OH_AVCapability_GetFeatureProperties(capability, VIDEO_ENCODER_LONG_TERM_REFERENCE);
463 ASSERT_NE(nullptr, format);
464 int ltrnum = 0;
465 EXPECT_EQ(OH_AVFormat_GetIntValue(
466 format, OH_FEATURE_PROPERTY_KEY_VIDEO_ENCODER_MAX_LTR_FRAME_COUNT, <rnum), true);
467 EXPECT_EQ(ltrnum, 10);
468 } else {
469 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC,
470 true, HARDWARE);
471 ASSERT_NE(nullptr, capability);
472 ASSERT_EQ(nullptr, OH_AVCapability_GetFeatureProperties(capability, VIDEO_ENCODER_LONG_TERM_REFERENCE));
473 }
474 }
475
476 /**
477 * @tc.number : VIDEO_TEMPORAL_ENCODE_API_0038
478 * @tc.name : 能力查询是否支持LTRH266
479 * @tc.desc : function test
480 */
481 HWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0038, TestSize.Level1)
482 {
483 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_VVC, false, HARDWARE);
484 if (capability != nullptr) {
485 ASSERT_EQ(false, OH_AVCapability_IsFeatureSupported(capability, VIDEO_ENCODER_LONG_TERM_REFERENCE));
486 }
487 }
488
489 /**
490 * @tc.number : VIDEO_TEMPORAL_ENCODE_API_0039
491 * @tc.name : 能力查询是否支持低时延H266
492 * @tc.desc : function test
493 */
494 HWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0039, TestSize.Level1)
495 {
496 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_VVC, false, HARDWARE);
497 if (capability != nullptr) {
498 if (!access("/system/lib64/media/", 0)) {
499 ASSERT_EQ(true, OH_AVCapability_IsFeatureSupported(capability, VIDEO_LOW_LATENCY));
500 } else {
501 ASSERT_EQ(false, OH_AVCapability_IsFeatureSupported(capability, VIDEO_LOW_LATENCY));
502 }
503 }
504 }
505
506 /**
507 * @tc.number : VIDEO_TEMPORAL_ENCODE_API_0040
508 * @tc.name : 能力查询是否支持分层编码H266
509 * @tc.desc : function test
510 */
511 HWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0040, TestSize.Level1)
512 {
513 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_VVC, false, HARDWARE);
514 if (capability != nullptr) {
515 ASSERT_EQ(false, OH_AVCapability_IsFeatureSupported(capability, VIDEO_ENCODER_TEMPORAL_SCALABILITY));
516 }
517 }
518
519 /**
520 * @tc.number : VIDEO_TEMPORAL_ENCODE_API_0041
521 * @tc.name : 解码,查询LTR能力值H266
522 * @tc.desc : api test
523 */
524 HWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0041, TestSize.Level1)
525 {
526 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_VVC, false, HARDWARE);
527 if (capability != nullptr) {
528 ASSERT_EQ(nullptr, OH_AVCapability_GetFeatureProperties(capability, VIDEO_ENCODER_LONG_TERM_REFERENCE));
529 }
530 }
531
532 /**
533 * @tc.number : VIDEO_TEMPORAL_ENCODE_API_0042
534 * @tc.name : 解码,查询低时延的能力值H266
535 * @tc.desc : api test
536 */
537 HWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0042, TestSize.Level1)
538 {
539 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_VVC, false, HARDWARE);
540 if (capability != nullptr) {
541 ASSERT_EQ(nullptr, OH_AVCapability_GetFeatureProperties(capability, VIDEO_LOW_LATENCY));
542 }
543 }
544
545 /**
546 * @tc.number : VIDEO_TEMPORAL_ENCODE_API_0043
547 * @tc.name : 解码,查询分层编码的能力值H266
548 * @tc.desc : api test
549 */
550 HWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0043, TestSize.Level1)
551 {
552 OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_VVC, false, HARDWARE);
553 if (capability != nullptr) {
554 ASSERT_EQ(nullptr, OH_AVCapability_GetFeatureProperties(capability, VIDEO_ENCODER_TEMPORAL_SCALABILITY));
555 }
556 }
557 } // namespace