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 #include "avcodec_info.h"
24 #include "avcodec_list.h"
25 #include "meta/meta_key.h"
26 #include "meta/format.h"
27 #include "avcodec_errors.h"
28 #include "av_common.h"
29 #include <typeinfo>
30
31 namespace {
32 OH_AVCodec *venc_ = NULL;
33 constexpr uint32_t CODEC_NAME_SIZE = 128;
34 char g_codecName[CODEC_NAME_SIZE] = {};
35 char g_codecNameHEVC[CODEC_NAME_SIZE] = {};
36 OH_AVFormat *format;
37 } // namespace
38 namespace OHOS {
39 namespace Media {
40 class HwCapabilityInnerNdkTest : public testing::Test {
41 public:
42 static void SetUpTestCase();
43 static void TearDownTestCase();
44 void SetUp() override;
45 void TearDown() override;
46 void InputFunc();
47 void OutputFunc();
48 void Release();
49 int32_t Stop();
50 };
51 } // namespace Media
52 } // namespace OHOS
53
54 using namespace std;
55 using namespace OHOS;
56 using namespace OHOS::Media;
57 using namespace testing::ext;
58 using namespace OHOS::MediaAVCodec;
59
SetUpTestCase()60 void HwCapabilityInnerNdkTest::SetUpTestCase()
61 {
62 auto codeclist = AVCodecListFactory::CreateAVCodecList();
63 if (codeclist != nullptr) {
64 CapabilityData *cap = codeclist->GetCapability(string(CodecMimeType::VIDEO_AVC),
65 true, AVCodecCategory::AVCODEC_HARDWARE);
66 if (cap != nullptr) {
67 const std::string &name = cap->codecName;
68 const char *tmpCodecName = name.data();
69 if (memcpy_s(g_codecName, sizeof(g_codecName), tmpCodecName, strlen(tmpCodecName)) != 0)
70 cout << "memcpy failed" << endl;
71 cout << "codecname: " << g_codecName << endl;
72 }
73 CapabilityData *cap_hevc = codeclist->GetCapability(string(CodecMimeType::VIDEO_HEVC),
74 true, AVCodecCategory::AVCODEC_HARDWARE);
75 if (cap_hevc != nullptr) {
76 const std::string &name = cap_hevc->codecName;
77 const char *tmpCodecNameHevc = name.data();
78 if (memcpy_s(g_codecNameHEVC, sizeof(g_codecNameHEVC), tmpCodecNameHevc, strlen(tmpCodecNameHevc)) != 0)
79 cout << "memcpy failed" << endl;
80 cout << "codecname_hevc: " << g_codecNameHEVC << endl;
81 }
82 }
83 }
TearDownTestCase()84 void HwCapabilityInnerNdkTest::TearDownTestCase() {}
SetUp()85 void HwCapabilityInnerNdkTest::SetUp() {}
TearDown()86 void HwCapabilityInnerNdkTest::TearDown()
87 {
88 if (venc_ != NULL) {
89 OH_VideoEncoder_Destroy(venc_);
90 venc_ = nullptr;
91 }
92 if (format != nullptr) {
93 OH_AVFormat_Destroy(format);
94 format = nullptr;
95 }
96 }
97 namespace {
98 /**
99 * @tc.number : VIDEO_TEMPORAL_ENCODE_INNER_API_0010
100 * @tc.name : IsFeatureSupported para error
101 * @tc.desc : api test
102 */
HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0010, TestSize.Level2)103 HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0010, TestSize.Level2)
104 {
105 auto codeclist = AVCodecListFactory::CreateAVCodecList();
106 ASSERT_NE(nullptr, codeclist);
107 CapabilityData *capabilityData = codeclist->GetCapability(string(CodecMimeType::VIDEO_AVC),
108 true, AVCodecCategory::AVCODEC_HARDWARE);
109 ASSERT_NE(nullptr, capabilityData);
110 std::shared_ptr<AVCodecInfo> codecInfo = std::make_shared<AVCodecInfo>(capabilityData);
111 ASSERT_EQ(false, codecInfo->IsFeatureSupported(static_cast<AVCapabilityFeature>(4)));
112 }
113
114 /**
115 * @tc.number : VIDEO_TEMPORAL_ENCODE_INNER_API_0011
116 * @tc.name : 解码,是否支持分层编码
117 * @tc.desc : api test
118 */
HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0011, TestSize.Level2)119 HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0011, TestSize.Level2)
120 {
121 auto codeclist = AVCodecListFactory::CreateAVCodecList();
122 ASSERT_NE(nullptr, codeclist);
123 CapabilityData *capabilityData = codeclist->GetCapability(string(CodecMimeType::VIDEO_AVC),
124 false, AVCodecCategory::AVCODEC_HARDWARE);
125 ASSERT_NE(nullptr, capabilityData);
126 std::shared_ptr<AVCodecInfo> codecInfo = std::make_shared<AVCodecInfo>(capabilityData);
127 ASSERT_EQ(false, codecInfo->IsFeatureSupported(AVCapabilityFeature::VIDEO_ENCODER_TEMPORAL_SCALABILITY));
128 }
129
130 /**
131 * @tc.number : VIDEO_TEMPORAL_ENCODE_INNER_API_0012
132 * @tc.name : 编码,是否支持分层编码
133 * @tc.desc : api test
134 */
HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0012, TestSize.Level1)135 HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0012, TestSize.Level1)
136 {
137 auto codeclist = AVCodecListFactory::CreateAVCodecList();
138 ASSERT_NE(nullptr, codeclist);
139 if (!access("/system/lib64/media/", 0)) {
140 CapabilityData *capabilityData = codeclist->GetCapability(string(CodecMimeType::VIDEO_AVC),
141 true, AVCodecCategory::AVCODEC_HARDWARE);
142 ASSERT_NE(nullptr, capabilityData);
143 std::shared_ptr<AVCodecInfo> codecInfo = std::make_shared<AVCodecInfo>(capabilityData);
144 ASSERT_EQ(true, codecInfo->IsFeatureSupported(AVCapabilityFeature::VIDEO_ENCODER_TEMPORAL_SCALABILITY));
145 } else {
146 CapabilityData *capabilityData = codeclist->GetCapability(string(CodecMimeType::VIDEO_AVC),
147 true, AVCodecCategory::AVCODEC_HARDWARE);
148 ASSERT_NE(nullptr, capabilityData);
149 std::shared_ptr<AVCodecInfo> codecInfo = std::make_shared<AVCodecInfo>(capabilityData);
150 ASSERT_EQ(false, codecInfo->IsFeatureSupported(AVCapabilityFeature::VIDEO_ENCODER_TEMPORAL_SCALABILITY));
151 }
152 }
153
154 /**
155 * @tc.number : VIDEO_TEMPORAL_ENCODE_INNER_API_0013
156 * @tc.name : 解码,是否支持LTR
157 * @tc.desc : api test
158 */
HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0013, TestSize.Level2)159 HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0013, TestSize.Level2)
160 {
161 auto codeclist = AVCodecListFactory::CreateAVCodecList();
162 ASSERT_NE(nullptr, codeclist);
163 CapabilityData *capabilityData = codeclist->GetCapability(string(CodecMimeType::VIDEO_AVC),
164 false, AVCodecCategory::AVCODEC_HARDWARE);
165 ASSERT_NE(nullptr, capabilityData);
166 std::shared_ptr<AVCodecInfo> codecInfo = std::make_shared<AVCodecInfo>(capabilityData);
167 ASSERT_EQ(false, codecInfo->IsFeatureSupported(AVCapabilityFeature::VIDEO_ENCODER_LONG_TERM_REFERENCE));
168 }
169
170 /**
171 * @tc.number : VIDEO_TEMPORAL_ENCODE_INNER_API_0014
172 * @tc.name : 编码,是否支持LTR
173 * @tc.desc : api test
174 */
HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0014, TestSize.Level1)175 HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0014, TestSize.Level1)
176 {
177 auto codeclist = AVCodecListFactory::CreateAVCodecList();
178 ASSERT_NE(nullptr, codeclist);
179 if (!access("/system/lib64/media/", 0)) {
180 CapabilityData *capabilityData = codeclist->GetCapability(string(CodecMimeType::VIDEO_AVC),
181 true, AVCodecCategory::AVCODEC_HARDWARE);
182 ASSERT_NE(nullptr, capabilityData);
183 std::shared_ptr<AVCodecInfo> codecInfo = std::make_shared<AVCodecInfo>(capabilityData);
184 ASSERT_EQ(true, codecInfo->IsFeatureSupported(AVCapabilityFeature::VIDEO_ENCODER_LONG_TERM_REFERENCE));
185 } else {
186 CapabilityData *capabilityData = codeclist->GetCapability(string(CodecMimeType::VIDEO_AVC),
187 true, AVCodecCategory::AVCODEC_HARDWARE);
188 ASSERT_NE(nullptr, capabilityData);
189 std::shared_ptr<AVCodecInfo> codecInfo = std::make_shared<AVCodecInfo>(capabilityData);
190 ASSERT_EQ(false, codecInfo->IsFeatureSupported(AVCapabilityFeature::VIDEO_ENCODER_LONG_TERM_REFERENCE));
191 }
192 }
193
194 /**
195 * @tc.number : VIDEO_TEMPORAL_ENCODE_INNER_API_0015
196 * @tc.name : 软解,是否支持低时延
197 * @tc.desc : api test
198 */
HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0015, TestSize.Level2)199 HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0015, TestSize.Level2)
200 {
201 auto codeclist = AVCodecListFactory::CreateAVCodecList();
202 ASSERT_NE(nullptr, codeclist);
203 CapabilityData *capabilityData = codeclist->GetCapability(string(CodecMimeType::VIDEO_AVC),
204 false, AVCodecCategory::AVCODEC_SOFTWARE);
205 ASSERT_NE(nullptr, capabilityData);
206 std::shared_ptr<AVCodecInfo> codecInfo = std::make_shared<AVCodecInfo>(capabilityData);
207 ASSERT_EQ(false, codecInfo->IsFeatureSupported(AVCapabilityFeature::VIDEO_LOW_LATENCY));
208 }
209
210 /**
211 * @tc.number : VIDEO_TEMPORAL_ENCODE_INNER_API_0016
212 * @tc.name : 硬解,是否支持低时延
213 * @tc.desc : api test
214 */
HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0016, TestSize.Level2)215 HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0016, TestSize.Level2)
216 {
217 auto codeclist = AVCodecListFactory::CreateAVCodecList();
218 ASSERT_NE(nullptr, codeclist);
219 if (!access("/system/lib64/media/", 0)) {
220 CapabilityData *capabilityData = codeclist->GetCapability(string(CodecMimeType::VIDEO_AVC),
221 false, AVCodecCategory::AVCODEC_HARDWARE);
222 ASSERT_NE(nullptr, capabilityData);
223 std::shared_ptr<AVCodecInfo> codecInfo = std::make_shared<AVCodecInfo>(capabilityData);
224 ASSERT_EQ(true, codecInfo->IsFeatureSupported(AVCapabilityFeature::VIDEO_LOW_LATENCY));
225 } else {
226 CapabilityData *capabilityData = codeclist->GetCapability(string(CodecMimeType::VIDEO_AVC),
227 false, AVCodecCategory::AVCODEC_HARDWARE);
228 ASSERT_NE(nullptr, capabilityData);
229 std::shared_ptr<AVCodecInfo> codecInfo = std::make_shared<AVCodecInfo>(capabilityData);
230 ASSERT_EQ(false, codecInfo->IsFeatureSupported(AVCapabilityFeature::VIDEO_LOW_LATENCY));
231 }
232 }
233
234 /**
235 * @tc.number : VIDEO_TEMPORAL_ENCODE_INNER_API_0017
236 * @tc.name : 编码,是否支持低时延
237 * @tc.desc : api test
238 */
HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0017, TestSize.Level1)239 HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0017, TestSize.Level1)
240 {
241 auto codeclist = AVCodecListFactory::CreateAVCodecList();
242 ASSERT_NE(nullptr, codeclist);
243 if (!access("/system/lib64/media/", 0)) {
244 CapabilityData *capabilityData = codeclist->GetCapability(string(CodecMimeType::VIDEO_AVC),
245 true, AVCodecCategory::AVCODEC_HARDWARE);
246 ASSERT_NE(nullptr, capabilityData);
247 std::shared_ptr<AVCodecInfo> codecInfo = std::make_shared<AVCodecInfo>(capabilityData);
248 ASSERT_EQ(true, codecInfo->IsFeatureSupported(AVCapabilityFeature::VIDEO_LOW_LATENCY));
249 } else {
250 CapabilityData *capabilityData = codeclist->GetCapability(string(CodecMimeType::VIDEO_AVC),
251 true, AVCodecCategory::AVCODEC_HARDWARE);
252 ASSERT_NE(nullptr, capabilityData);
253 std::shared_ptr<AVCodecInfo> codecInfo = std::make_shared<AVCodecInfo>(capabilityData);
254 ASSERT_EQ(false, codecInfo->IsFeatureSupported(AVCapabilityFeature::VIDEO_LOW_LATENCY));
255 }
256 }
257
258 /**
259 * @tc.number : VIDEO_TEMPORAL_ENCODE_INNER_API_0018
260 * @tc.name : GetFeatureProperties para error
261 * @tc.desc : api test
262 */
HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0018, TestSize.Level2)263 HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0018, TestSize.Level2)
264 {
265 Format featureFormat;
266 auto codeclist = AVCodecListFactory::CreateAVCodecList();
267 ASSERT_NE(nullptr, codeclist);
268 CapabilityData *capabilityData = codeclist->GetCapability(string(CodecMimeType::VIDEO_AVC),
269 true, AVCodecCategory::AVCODEC_HARDWARE);
270 ASSERT_NE(nullptr, capabilityData);
271 std::shared_ptr<AVCodecInfo> codecInfo = std::make_shared<AVCodecInfo>(capabilityData);
272 ASSERT_EQ(AVCS_ERR_INVALID_OPERATION, codecInfo->GetFeatureProperties(static_cast<AVCapabilityFeature>(4),
273 featureFormat));
274 ASSERT_EQ(AVCS_ERR_INVALID_VAL, codecInfo->GetFeatureProperties(static_cast<AVCapabilityFeature>(-1),
275 featureFormat));
276 ASSERT_EQ(AVCS_ERR_INVALID_VAL, codecInfo->GetFeatureProperties(static_cast<AVCapabilityFeature>(100),
277 featureFormat));
278 if (!access("/system/lib64/media/", 0)) {
279 ASSERT_EQ(AVCS_ERR_OK, codecInfo->GetFeatureProperties(AVCapabilityFeature::VIDEO_ENCODER_TEMPORAL_SCALABILITY,
280 featureFormat));
281 } else {
282 ASSERT_EQ(AVCS_ERR_INVALID_OPERATION,
283 codecInfo->GetFeatureProperties(AVCapabilityFeature::VIDEO_ENCODER_TEMPORAL_SCALABILITY, featureFormat));
284 }
285 }
286
287 /**
288 * @tc.number : VIDEO_TEMPORAL_ENCODE_INNER_API_0019
289 * @tc.name : 解码,查询分层编码的能力值
290 * @tc.desc : api test
291 */
HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0019, TestSize.Level2)292 HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0019, TestSize.Level2)
293 {
294 Format featureFormat;
295 auto codeclist = AVCodecListFactory::CreateAVCodecList();
296 ASSERT_NE(nullptr, codeclist);
297 CapabilityData *capabilityData = codeclist->GetCapability(string(CodecMimeType::VIDEO_AVC),
298 false, AVCodecCategory::AVCODEC_HARDWARE);
299 ASSERT_NE(nullptr, capabilityData);
300 std::shared_ptr<AVCodecInfo> codecInfo = std::make_shared<AVCodecInfo>(capabilityData);
301 ASSERT_EQ(AVCS_ERR_INVALID_OPERATION,
302 codecInfo->GetFeatureProperties(AVCapabilityFeature::VIDEO_ENCODER_TEMPORAL_SCALABILITY, featureFormat));
303 }
304
305 /**
306 * @tc.number : VIDEO_TEMPORAL_ENCODE_INNER_API_0020
307 * @tc.name : 编码,查询分层编码的能力值
308 * @tc.desc : api test
309 */
HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0020, TestSize.Level1)310 HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0020, TestSize.Level1)
311 {
312 Format featureFormat;
313 auto codeclist = AVCodecListFactory::CreateAVCodecList();
314 ASSERT_NE(nullptr, codeclist);
315 CapabilityData *capabilityData = codeclist->GetCapability(string(CodecMimeType::VIDEO_AVC),
316 true, AVCodecCategory::AVCODEC_HARDWARE);
317 ASSERT_NE(nullptr, capabilityData);
318 std::shared_ptr<AVCodecInfo> codecInfo = std::make_shared<AVCodecInfo>(capabilityData);
319 if (!access("/system/lib64/media/", 0)) {
320 ASSERT_EQ(AVCS_ERR_OK, codecInfo->GetFeatureProperties(AVCapabilityFeature::VIDEO_ENCODER_TEMPORAL_SCALABILITY,
321 featureFormat));
322 } else {
323 ASSERT_EQ(AVCS_ERR_INVALID_OPERATION,
324 codecInfo->GetFeatureProperties(AVCapabilityFeature::VIDEO_ENCODER_TEMPORAL_SCALABILITY, featureFormat));
325 }
326 }
327
328 /**
329 * @tc.number : VIDEO_TEMPORAL_ENCODE_INNER_API_0021
330 * @tc.name : 解码,查询LTR能力值
331 * @tc.desc : api test
332 */
HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0021, TestSize.Level2)333 HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0021, TestSize.Level2)
334 {
335 Format featureFormat;
336 auto codeclist = AVCodecListFactory::CreateAVCodecList();
337 ASSERT_NE(nullptr, codeclist);
338 CapabilityData *capabilityData = codeclist->GetCapability(string(CodecMimeType::VIDEO_AVC),
339 false, AVCodecCategory::AVCODEC_HARDWARE);
340 ASSERT_NE(nullptr, capabilityData);
341 std::shared_ptr<AVCodecInfo> codecInfo = std::make_shared<AVCodecInfo>(capabilityData);
342 ASSERT_EQ(AVCS_ERR_INVALID_OPERATION,
343 codecInfo->GetFeatureProperties(AVCapabilityFeature::VIDEO_ENCODER_TEMPORAL_SCALABILITY, featureFormat));
344 }
345
346 /**
347 * @tc.number : VIDEO_TEMPORAL_ENCODE_INNER_API_0022
348 * @tc.name : 编码,查询LTR的能力值
349 * @tc.desc : api test
350 */
HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0022, TestSize.Level1)351 HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0022, TestSize.Level1)
352 {
353 Format featureFormat;
354 auto codeclist = AVCodecListFactory::CreateAVCodecList();
355 ASSERT_NE(nullptr, codeclist);
356 if (!access("/system/lib64/media/", 0)) {
357 CapabilityData *capabilityData = codeclist->GetCapability(string(CodecMimeType::VIDEO_AVC),
358 true, AVCodecCategory::AVCODEC_HARDWARE);
359 ASSERT_NE(nullptr, capabilityData);
360 std::shared_ptr<AVCodecInfo> codecInfo = std::make_shared<AVCodecInfo>(capabilityData);
361 ASSERT_EQ(AVCS_ERR_OK, codecInfo->GetFeatureProperties(AVCapabilityFeature::VIDEO_ENCODER_LONG_TERM_REFERENCE,
362 featureFormat));
363 int ltrnum = 0;
364 EXPECT_EQ(featureFormat.GetIntValue(OH_FEATURE_PROPERTY_KEY_VIDEO_ENCODER_MAX_LTR_FRAME_COUNT, ltrnum), true);
365 EXPECT_EQ(ltrnum, 10);
366 } else {
367 CapabilityData *capabilityData = codeclist->GetCapability(string(CodecMimeType::VIDEO_AVC),
368 true, AVCodecCategory::AVCODEC_HARDWARE);
369 ASSERT_NE(nullptr, capabilityData);
370 std::shared_ptr<AVCodecInfo> codecInfo = std::make_shared<AVCodecInfo>(capabilityData);
371 ASSERT_EQ(AVCS_ERR_INVALID_OPERATION,
372 codecInfo->GetFeatureProperties(AVCapabilityFeature::VIDEO_ENCODER_LONG_TERM_REFERENCE, featureFormat));
373 }
374 }
375
376 /**
377 * @tc.number : VIDEO_TEMPORAL_ENCODE_INNER_API_0023
378 * @tc.name : 软解,查询低时延的能力值
379 * @tc.desc : api test
380 */
HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0023, TestSize.Level2)381 HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0023, TestSize.Level2)
382 {
383 Format featureFormat;
384 auto codeclist = AVCodecListFactory::CreateAVCodecList();
385 ASSERT_NE(nullptr, codeclist);
386 CapabilityData *capabilityData = codeclist->GetCapability(string(CodecMimeType::VIDEO_AVC),
387 false, AVCodecCategory::AVCODEC_SOFTWARE);
388 ASSERT_NE(nullptr, capabilityData);
389 std::shared_ptr<AVCodecInfo> codecInfo = std::make_shared<AVCodecInfo>(capabilityData);
390 ASSERT_EQ(AVCS_ERR_INVALID_OPERATION,
391 codecInfo->GetFeatureProperties(AVCapabilityFeature::VIDEO_ENCODER_TEMPORAL_SCALABILITY, featureFormat));
392 }
393
394 /**
395 * @tc.number : VIDEO_TEMPORAL_ENCODE_INNER_API_0024
396 * @tc.name : 硬解,查询低时延的能力值
397 * @tc.desc : api test
398 */
HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0024, TestSize.Level2)399 HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0024, TestSize.Level2)
400 {
401 Format featureFormat;
402 auto codeclist = AVCodecListFactory::CreateAVCodecList();
403 ASSERT_NE(nullptr, codeclist);
404 CapabilityData *capabilityData = codeclist->GetCapability(string(CodecMimeType::VIDEO_AVC),
405 false, AVCodecCategory::AVCODEC_HARDWARE);
406 ASSERT_NE(nullptr, capabilityData);
407 std::shared_ptr<AVCodecInfo> codecInfo = std::make_shared<AVCodecInfo>(capabilityData);
408 ASSERT_EQ(AVCS_ERR_INVALID_OPERATION,
409 codecInfo->GetFeatureProperties(AVCapabilityFeature::VIDEO_ENCODER_TEMPORAL_SCALABILITY, featureFormat));
410 }
411
412 /**
413 * @tc.number : VIDEO_TEMPORAL_ENCODE_INNER_API_0025
414 * @tc.name : 编码,查询低时延的能力值
415 * @tc.desc : api test
416 */
HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0025, TestSize.Level1)417 HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0025, TestSize.Level1)
418 {
419 Format featureFormat;
420 auto codeclist = AVCodecListFactory::CreateAVCodecList();
421 ASSERT_NE(nullptr, codeclist);
422 CapabilityData *capabilityData = codeclist->GetCapability(string(CodecMimeType::VIDEO_AVC),
423 true, AVCodecCategory::AVCODEC_HARDWARE);
424 ASSERT_NE(nullptr, capabilityData);
425 std::shared_ptr<AVCodecInfo> codecInfo = std::make_shared<AVCodecInfo>(capabilityData);
426 if (!access("/system/lib64/media/", 0)) {
427 ASSERT_EQ(AVCS_ERR_OK, codecInfo->GetFeatureProperties(AVCapabilityFeature::VIDEO_ENCODER_TEMPORAL_SCALABILITY,
428 featureFormat));
429 } else {
430 ASSERT_EQ(AVCS_ERR_INVALID_OPERATION,
431 codecInfo->GetFeatureProperties(AVCapabilityFeature::VIDEO_ENCODER_TEMPORAL_SCALABILITY, featureFormat));
432 }
433 }
434
435 /**
436 * @tc.number : VIDEO_TEMPORAL_ENCODE_INNER_API_0026
437 * @tc.name : 能力查询是否支持LTRH265
438 * @tc.desc : function test
439 */
HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0026, TestSize.Level1)440 HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0026, TestSize.Level1)
441 {
442 auto codeclist = AVCodecListFactory::CreateAVCodecList();
443 ASSERT_NE(nullptr, codeclist);
444 CapabilityData *capabilityData = codeclist->GetCapability(string(CodecMimeType::VIDEO_HEVC),
445 true, AVCodecCategory::AVCODEC_HARDWARE);
446 ASSERT_NE(nullptr, capabilityData);
447 std::shared_ptr<AVCodecInfo> codecInfo = std::make_shared<AVCodecInfo>(capabilityData);
448 if (!access("/system/lib64/media/", 0)) {
449 ASSERT_EQ(true, codecInfo->IsFeatureSupported(AVCapabilityFeature::VIDEO_ENCODER_LONG_TERM_REFERENCE));
450 } else {
451 ASSERT_EQ(false, codecInfo->IsFeatureSupported(AVCapabilityFeature::VIDEO_ENCODER_LONG_TERM_REFERENCE));
452 }
453 }
454
455 /**
456 * @tc.number : VIDEO_TEMPORAL_ENCODE_INNER_API_0027
457 * @tc.name : 能力查询是否支持LTRH265
458 * @tc.desc : function test
459 */
HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0027, TestSize.Level1)460 HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0027, TestSize.Level1)
461 {
462 auto codeclist = AVCodecListFactory::CreateAVCodecList();
463 ASSERT_NE(nullptr, codeclist);
464 CapabilityData *capabilityData = codeclist->GetCapability(string(CodecMimeType::VIDEO_HEVC),
465 false, AVCodecCategory::AVCODEC_HARDWARE);
466 ASSERT_NE(nullptr, capabilityData);
467 std::shared_ptr<AVCodecInfo> codecInfo = std::make_shared<AVCodecInfo>(capabilityData);
468 ASSERT_EQ(false, codecInfo->IsFeatureSupported(AVCapabilityFeature::VIDEO_ENCODER_LONG_TERM_REFERENCE));
469 }
470
471 /**
472 * @tc.number : VIDEO_TEMPORAL_ENCODE_INNER_API_0028
473 * @tc.name : 能力查询是否支持低时延H265
474 * @tc.desc : function test
475 */
HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0028, TestSize.Level1)476 HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0028, TestSize.Level1)
477 {
478 auto codeclist = AVCodecListFactory::CreateAVCodecList();
479 ASSERT_NE(nullptr, codeclist);
480 CapabilityData *capabilityData = codeclist->GetCapability(string(CodecMimeType::VIDEO_HEVC),
481 true, AVCodecCategory::AVCODEC_HARDWARE);
482 ASSERT_NE(nullptr, capabilityData);
483 std::shared_ptr<AVCodecInfo> codecInfo = std::make_shared<AVCodecInfo>(capabilityData);
484 if (!access("/system/lib64/media/", 0)) {
485 ASSERT_EQ(true, codecInfo->IsFeatureSupported(AVCapabilityFeature::VIDEO_LOW_LATENCY));
486 } else {
487 ASSERT_EQ(false, codecInfo->IsFeatureSupported(AVCapabilityFeature::VIDEO_LOW_LATENCY));
488 }
489 }
490
491 /**
492 * @tc.number : VIDEO_TEMPORAL_ENCODE_INNER_API_0029
493 * @tc.name : 能力查询是否支持低时延H265
494 * @tc.desc : function test
495 */
HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0029, TestSize.Level1)496 HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0029, TestSize.Level1)
497 {
498 auto codeclist = AVCodecListFactory::CreateAVCodecList();
499 ASSERT_NE(nullptr, codeclist);
500 CapabilityData *capabilityData = codeclist->GetCapability(string(CodecMimeType::VIDEO_HEVC),
501 false, AVCodecCategory::AVCODEC_HARDWARE);
502 ASSERT_NE(nullptr, capabilityData);
503 std::shared_ptr<AVCodecInfo> codecInfo = std::make_shared<AVCodecInfo>(capabilityData);
504 if (!access("/system/lib64/media/", 0)) {
505 ASSERT_EQ(true, codecInfo->IsFeatureSupported(AVCapabilityFeature::VIDEO_LOW_LATENCY));
506 } else {
507 ASSERT_EQ(false, codecInfo->IsFeatureSupported(AVCapabilityFeature::VIDEO_LOW_LATENCY));
508 }
509 }
510
511 /**
512 * @tc.number : VIDEO_TEMPORAL_ENCODE_INNER_API_0030
513 * @tc.name : 能力查询是否支持分层编码H265
514 * @tc.desc : function test
515 */
HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0030, TestSize.Level1)516 HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0030, TestSize.Level1)
517 {
518 auto codeclist = AVCodecListFactory::CreateAVCodecList();
519 ASSERT_NE(nullptr, codeclist);
520 CapabilityData *capabilityData = codeclist->GetCapability(string(CodecMimeType::VIDEO_HEVC),
521 true, AVCodecCategory::AVCODEC_HARDWARE);
522 ASSERT_NE(nullptr, capabilityData);
523 std::shared_ptr<AVCodecInfo> codecInfo = std::make_shared<AVCodecInfo>(capabilityData);
524 if (!access("/system/lib64/media/", 0)) {
525 ASSERT_EQ(true, codecInfo->IsFeatureSupported(AVCapabilityFeature::VIDEO_ENCODER_TEMPORAL_SCALABILITY));
526 } else {
527 ASSERT_EQ(false, codecInfo->IsFeatureSupported(AVCapabilityFeature::VIDEO_ENCODER_TEMPORAL_SCALABILITY));
528 }
529 }
530
531 /**
532 * @tc.number : VIDEO_TEMPORAL_ENCODE_INNER_API_0031
533 * @tc.name : 能力查询是否支持分层编码H265
534 * @tc.desc : function test
535 */
HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0031, TestSize.Level1)536 HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0031, TestSize.Level1)
537 {
538 auto codeclist = AVCodecListFactory::CreateAVCodecList();
539 ASSERT_NE(nullptr, codeclist);
540 CapabilityData *capabilityData = codeclist->GetCapability(string(CodecMimeType::VIDEO_HEVC),
541 false, AVCodecCategory::AVCODEC_HARDWARE);
542 ASSERT_NE(nullptr, capabilityData);
543 std::shared_ptr<AVCodecInfo> codecInfo = std::make_shared<AVCodecInfo>(capabilityData);
544 ASSERT_EQ(false, codecInfo->IsFeatureSupported(AVCapabilityFeature::VIDEO_ENCODER_TEMPORAL_SCALABILITY));
545 }
546
547 /**
548 * @tc.number : VIDEO_TEMPORAL_ENCODE_INNER_API_0032
549 * @tc.name : 编码,查询低时延的能力值H265
550 * @tc.desc : api test
551 */
HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0032, TestSize.Level1)552 HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0032, TestSize.Level1)
553 {
554 Format featureFormat;
555 auto codeclist = AVCodecListFactory::CreateAVCodecList();
556 ASSERT_NE(nullptr, codeclist);
557 CapabilityData *capabilityData = codeclist->GetCapability(string(CodecMimeType::VIDEO_HEVC),
558 true, AVCodecCategory::AVCODEC_HARDWARE);
559 ASSERT_NE(nullptr, capabilityData);
560 std::shared_ptr<AVCodecInfo> codecInfo = std::make_shared<AVCodecInfo>(capabilityData);
561 if (!access("/system/lib64/media/", 0)) {
562 ASSERT_EQ(AVCS_ERR_OK, codecInfo->GetFeatureProperties(AVCapabilityFeature::VIDEO_ENCODER_TEMPORAL_SCALABILITY,
563 featureFormat));
564 } else {
565 ASSERT_EQ(AVCS_ERR_INVALID_OPERATION,
566 codecInfo->GetFeatureProperties(AVCapabilityFeature::VIDEO_ENCODER_TEMPORAL_SCALABILITY, featureFormat));
567 }
568 }
569
570 /**
571 * @tc.number : VIDEO_TEMPORAL_ENCODE_INNER_API_0033
572 * @tc.name : 解码,查询低时延的能力值H265
573 * @tc.desc : api test
574 */
HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0033, TestSize.Level1)575 HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0033, TestSize.Level1)
576 {
577 Format featureFormat;
578 auto codeclist = AVCodecListFactory::CreateAVCodecList();
579 ASSERT_NE(nullptr, codeclist);
580 CapabilityData *capabilityData = codeclist->GetCapability(string(CodecMimeType::VIDEO_HEVC),
581 false, AVCodecCategory::AVCODEC_HARDWARE);
582 ASSERT_NE(nullptr, capabilityData);
583 std::shared_ptr<AVCodecInfo> codecInfo = std::make_shared<AVCodecInfo>(capabilityData);
584 ASSERT_EQ(AVCS_ERR_INVALID_OPERATION,
585 codecInfo->GetFeatureProperties(AVCapabilityFeature::VIDEO_ENCODER_TEMPORAL_SCALABILITY, featureFormat));
586 }
587
588 /**
589 * @tc.number : VIDEO_TEMPORAL_ENCODE_INNER_API_0034
590 * @tc.name : 解码,查询分层编码的能力值H265
591 * @tc.desc : api test
592 */
HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0034, TestSize.Level2)593 HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0034, TestSize.Level2)
594 {
595 Format featureFormat;
596 auto codeclist = AVCodecListFactory::CreateAVCodecList();
597 ASSERT_NE(nullptr, codeclist);
598 CapabilityData *capabilityData = codeclist->GetCapability(string(CodecMimeType::VIDEO_HEVC),
599 false, AVCodecCategory::AVCODEC_HARDWARE);
600 ASSERT_NE(nullptr, capabilityData);
601 std::shared_ptr<AVCodecInfo> codecInfo = std::make_shared<AVCodecInfo>(capabilityData);
602 ASSERT_EQ(AVCS_ERR_INVALID_OPERATION,
603 codecInfo->GetFeatureProperties(AVCapabilityFeature::VIDEO_ENCODER_TEMPORAL_SCALABILITY, featureFormat));
604 }
605
606 /**
607 * @tc.number : VIDEO_TEMPORAL_ENCODE_INNER_API_0035
608 * @tc.name : 编码,查询分层编码的能力值H265
609 * @tc.desc : api test
610 */
HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0035, TestSize.Level1)611 HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0035, TestSize.Level1)
612 {
613 Format featureFormat;
614 auto codeclist = AVCodecListFactory::CreateAVCodecList();
615 ASSERT_NE(nullptr, codeclist);
616 CapabilityData *capabilityData = codeclist->GetCapability(string(CodecMimeType::VIDEO_HEVC),
617 true, AVCodecCategory::AVCODEC_HARDWARE);
618 ASSERT_NE(nullptr, capabilityData);
619 std::shared_ptr<AVCodecInfo> codecInfo = std::make_shared<AVCodecInfo>(capabilityData);
620 if (!access("/system/lib64/media/", 0)) {
621 ASSERT_EQ(AVCS_ERR_OK, codecInfo->GetFeatureProperties(
622 AVCapabilityFeature::VIDEO_ENCODER_TEMPORAL_SCALABILITY, featureFormat));
623 } else {
624 ASSERT_EQ(AVCS_ERR_INVALID_OPERATION,
625 codecInfo->GetFeatureProperties(AVCapabilityFeature::VIDEO_ENCODER_TEMPORAL_SCALABILITY, featureFormat));
626 }
627 }
628
629 /**
630 * @tc.number : VIDEO_TEMPORAL_ENCODE_INNER_API_0036
631 * @tc.name : 解码,查询LTR能力值H265
632 * @tc.desc : api test
633 */
HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0036, TestSize.Level2)634 HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0036, TestSize.Level2)
635 {
636 Format featureFormat;
637 auto codeclist = AVCodecListFactory::CreateAVCodecList();
638 ASSERT_NE(nullptr, codeclist);
639 CapabilityData *capabilityData = codeclist->GetCapability(string(CodecMimeType::VIDEO_HEVC),
640 false, AVCodecCategory::AVCODEC_HARDWARE);
641 ASSERT_NE(nullptr, capabilityData);
642 std::shared_ptr<AVCodecInfo> codecInfo = std::make_shared<AVCodecInfo>(capabilityData);
643 ASSERT_EQ(AVCS_ERR_INVALID_OPERATION,
644 codecInfo->GetFeatureProperties(AVCapabilityFeature::VIDEO_ENCODER_TEMPORAL_SCALABILITY, featureFormat));
645 }
646
647 /**
648 * @tc.number : VIDEO_TEMPORAL_ENCODE_INNER_API_0037
649 * @tc.name : 编码,查询LTR的能力值H265
650 * @tc.desc : api test
651 */
HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0037, TestSize.Level1)652 HWTEST_F(HwCapabilityInnerNdkTest, VIDEO_TEMPORAL_ENCODE_INNER_API_0037, TestSize.Level1)
653 {
654 Format featureFormat;
655 auto codeclist = AVCodecListFactory::CreateAVCodecList();
656 ASSERT_NE(nullptr, codeclist);
657 if (!access("/system/lib64/media/", 0)) {
658 CapabilityData *capabilityData = codeclist->GetCapability(string(CodecMimeType::VIDEO_HEVC),
659 true, AVCodecCategory::AVCODEC_HARDWARE);
660 ASSERT_NE(nullptr, capabilityData);
661 std::shared_ptr<AVCodecInfo> codecInfo = std::make_shared<AVCodecInfo>(capabilityData);
662 ASSERT_EQ(AVCS_ERR_OK,
663 codecInfo->GetFeatureProperties(AVCapabilityFeature::VIDEO_ENCODER_LONG_TERM_REFERENCE, featureFormat));
664 int ltrnum = 0;
665 EXPECT_EQ(featureFormat.GetIntValue(OH_FEATURE_PROPERTY_KEY_VIDEO_ENCODER_MAX_LTR_FRAME_COUNT, ltrnum), true);
666 EXPECT_EQ(ltrnum, 10);
667 } else {
668 CapabilityData *capabilityData = codeclist->GetCapability(string(CodecMimeType::VIDEO_HEVC),
669 true, AVCodecCategory::AVCODEC_HARDWARE);
670 ASSERT_NE(nullptr, capabilityData);
671 std::shared_ptr<AVCodecInfo> codecInfo = std::make_shared<AVCodecInfo>(capabilityData);
672 ASSERT_EQ(AVCS_ERR_INVALID_OPERATION,
673 codecInfo->GetFeatureProperties(AVCapabilityFeature::VIDEO_ENCODER_LONG_TERM_REFERENCE, featureFormat));
674 }
675 }
676 } // namespace