1da853ecaSopenharmony_ci/*
2da853ecaSopenharmony_ci * Copyright (C) 2024 Huawei Device Co., Ltd.
3da853ecaSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4da853ecaSopenharmony_ci * you may not use this file except in compliance with the License.
5da853ecaSopenharmony_ci * You may obtain a copy of the License at
6da853ecaSopenharmony_ci *
7da853ecaSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0
8da853ecaSopenharmony_ci *
9da853ecaSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10da853ecaSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11da853ecaSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12da853ecaSopenharmony_ci * See the License for the specific language governing permissions and
13da853ecaSopenharmony_ci * limitations under the License.
14da853ecaSopenharmony_ci */
15da853ecaSopenharmony_ci#include <string>
16da853ecaSopenharmony_ci#include <securec.h>
17da853ecaSopenharmony_ci#include "gtest/gtest.h"
18da853ecaSopenharmony_ci#include "native_avcodec_videoencoder.h"
19da853ecaSopenharmony_ci#include "native_averrors.h"
20da853ecaSopenharmony_ci#include "native_avcodec_base.h"
21da853ecaSopenharmony_ci#include "avcodec_codec_name.h"
22da853ecaSopenharmony_ci#include "native_avcapability.h"
23da853ecaSopenharmony_ci
24da853ecaSopenharmony_cinamespace {
25da853ecaSopenharmony_ciOH_AVCodec *venc_ = NULL;
26da853ecaSopenharmony_ciOH_AVCapability *cap = nullptr;
27da853ecaSopenharmony_ciOH_AVCapability *cap_hevc = nullptr;
28da853ecaSopenharmony_ciconstexpr uint32_t CODEC_NAME_SIZE = 128;
29da853ecaSopenharmony_cichar g_codecName[CODEC_NAME_SIZE] = {};
30da853ecaSopenharmony_cichar g_codecNameHEVC[CODEC_NAME_SIZE] = {};
31da853ecaSopenharmony_ciOH_AVFormat *format;
32da853ecaSopenharmony_ci} // namespace
33da853ecaSopenharmony_cinamespace OHOS {
34da853ecaSopenharmony_cinamespace Media {
35da853ecaSopenharmony_ciclass HwCapabilityNdkTest : public testing::Test {
36da853ecaSopenharmony_cipublic:
37da853ecaSopenharmony_ci    static void SetUpTestCase();
38da853ecaSopenharmony_ci    static void TearDownTestCase();
39da853ecaSopenharmony_ci    void SetUp() override;
40da853ecaSopenharmony_ci    void TearDown() override;
41da853ecaSopenharmony_ci    void InputFunc();
42da853ecaSopenharmony_ci    void OutputFunc();
43da853ecaSopenharmony_ci    void Release();
44da853ecaSopenharmony_ci    int32_t Stop();
45da853ecaSopenharmony_ci};
46da853ecaSopenharmony_ci} // namespace Media
47da853ecaSopenharmony_ci} // namespace OHOS
48da853ecaSopenharmony_ci
49da853ecaSopenharmony_ciusing namespace std;
50da853ecaSopenharmony_ciusing namespace OHOS;
51da853ecaSopenharmony_ciusing namespace OHOS::Media;
52da853ecaSopenharmony_ciusing namespace testing::ext;
53da853ecaSopenharmony_ci
54da853ecaSopenharmony_civoid HwCapabilityNdkTest::SetUpTestCase()
55da853ecaSopenharmony_ci{
56da853ecaSopenharmony_ci    cap = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, true, HARDWARE);
57da853ecaSopenharmony_ci    const char *tmpCodecName = OH_AVCapability_GetName(cap);
58da853ecaSopenharmony_ci    if (memcpy_s(g_codecName, sizeof(g_codecName), tmpCodecName, strlen(tmpCodecName)) != 0)
59da853ecaSopenharmony_ci        cout << "memcpy failed" << endl;
60da853ecaSopenharmony_ci    cout << "codecname: " << g_codecName << endl;
61da853ecaSopenharmony_ci    cap_hevc = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC, true, HARDWARE);
62da853ecaSopenharmony_ci    const char *tmpCodecNameHevc = OH_AVCapability_GetName(cap_hevc);
63da853ecaSopenharmony_ci    if (memcpy_s(g_codecNameHEVC, sizeof(g_codecNameHEVC), tmpCodecNameHevc, strlen(tmpCodecNameHevc)) != 0)
64da853ecaSopenharmony_ci        cout << "memcpy failed" << endl;
65da853ecaSopenharmony_ci    cout << "codecname_hevc: " << g_codecNameHEVC << endl;
66da853ecaSopenharmony_ci}
67da853ecaSopenharmony_civoid HwCapabilityNdkTest::TearDownTestCase() {}
68da853ecaSopenharmony_civoid HwCapabilityNdkTest::SetUp() {}
69da853ecaSopenharmony_civoid HwCapabilityNdkTest::TearDown()
70da853ecaSopenharmony_ci{
71da853ecaSopenharmony_ci    if (venc_ != NULL) {
72da853ecaSopenharmony_ci        OH_VideoEncoder_Destroy(venc_);
73da853ecaSopenharmony_ci        venc_ = nullptr;
74da853ecaSopenharmony_ci    }
75da853ecaSopenharmony_ci    if (format != nullptr) {
76da853ecaSopenharmony_ci        OH_AVFormat_Destroy(format);
77da853ecaSopenharmony_ci        format = nullptr;
78da853ecaSopenharmony_ci    }
79da853ecaSopenharmony_ci}
80da853ecaSopenharmony_cinamespace {
81da853ecaSopenharmony_ci/**
82da853ecaSopenharmony_ci * @tc.number    : VIDEO_TEMPORAL_ENCODE_API_0010
83da853ecaSopenharmony_ci * @tc.name      : OH_AVCapability_IsFeatureSupported para error
84da853ecaSopenharmony_ci * @tc.desc      : api test
85da853ecaSopenharmony_ci */
86da853ecaSopenharmony_ciHWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0010, TestSize.Level2)
87da853ecaSopenharmony_ci{
88da853ecaSopenharmony_ci    OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, true, HARDWARE);
89da853ecaSopenharmony_ci    ASSERT_NE(nullptr, capability);
90da853ecaSopenharmony_ci    ASSERT_EQ(false, OH_AVCapability_IsFeatureSupported(capability, static_cast<OH_AVCapabilityFeature>(4)));
91da853ecaSopenharmony_ci}
92da853ecaSopenharmony_ci
93da853ecaSopenharmony_ci/**
94da853ecaSopenharmony_ci * @tc.number    : VIDEO_TEMPORAL_ENCODE_API_0011
95da853ecaSopenharmony_ci * @tc.name      : 解码,是否支持分层编码
96da853ecaSopenharmony_ci * @tc.desc      : api test
97da853ecaSopenharmony_ci */
98da853ecaSopenharmony_ciHWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0011, TestSize.Level2)
99da853ecaSopenharmony_ci{
100da853ecaSopenharmony_ci    OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, false, HARDWARE);
101da853ecaSopenharmony_ci    ASSERT_NE(nullptr, capability);
102da853ecaSopenharmony_ci    ASSERT_EQ(false, OH_AVCapability_IsFeatureSupported(capability, VIDEO_ENCODER_TEMPORAL_SCALABILITY));
103da853ecaSopenharmony_ci}
104da853ecaSopenharmony_ci
105da853ecaSopenharmony_ci/**
106da853ecaSopenharmony_ci * @tc.number    : VIDEO_TEMPORAL_ENCODE_API_0012
107da853ecaSopenharmony_ci * @tc.name      : 编码,是否支持分层编码
108da853ecaSopenharmony_ci * @tc.desc      : api test
109da853ecaSopenharmony_ci */
110da853ecaSopenharmony_ciHWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0012, TestSize.Level1)
111da853ecaSopenharmony_ci{
112da853ecaSopenharmony_ci    if (!access("/system/lib64/media/", 0)) {
113da853ecaSopenharmony_ci        OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, true, HARDWARE);
114da853ecaSopenharmony_ci        ASSERT_NE(nullptr, capability);
115da853ecaSopenharmony_ci        ASSERT_EQ(true, OH_AVCapability_IsFeatureSupported(capability, VIDEO_ENCODER_TEMPORAL_SCALABILITY));
116da853ecaSopenharmony_ci    } else {
117da853ecaSopenharmony_ci        OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, true, HARDWARE);
118da853ecaSopenharmony_ci        ASSERT_NE(nullptr, capability);
119da853ecaSopenharmony_ci        ASSERT_EQ(false, OH_AVCapability_IsFeatureSupported(capability, VIDEO_ENCODER_TEMPORAL_SCALABILITY));
120da853ecaSopenharmony_ci    }
121da853ecaSopenharmony_ci}
122da853ecaSopenharmony_ci
123da853ecaSopenharmony_ci/**
124da853ecaSopenharmony_ci * @tc.number    : VIDEO_TEMPORAL_ENCODE_API_0013
125da853ecaSopenharmony_ci * @tc.name      : 解码,是否支持LTR
126da853ecaSopenharmony_ci * @tc.desc      : api test
127da853ecaSopenharmony_ci */
128da853ecaSopenharmony_ciHWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0013, TestSize.Level2)
129da853ecaSopenharmony_ci{
130da853ecaSopenharmony_ci    OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, false, HARDWARE);
131da853ecaSopenharmony_ci    ASSERT_NE(nullptr, capability);
132da853ecaSopenharmony_ci    ASSERT_EQ(false, OH_AVCapability_IsFeatureSupported(capability, VIDEO_ENCODER_LONG_TERM_REFERENCE));
133da853ecaSopenharmony_ci}
134da853ecaSopenharmony_ci
135da853ecaSopenharmony_ci/**
136da853ecaSopenharmony_ci * @tc.number    : VIDEO_TEMPORAL_ENCODE_API_0014
137da853ecaSopenharmony_ci * @tc.name      : 编码,是否支持LTR
138da853ecaSopenharmony_ci * @tc.desc      : api test
139da853ecaSopenharmony_ci */
140da853ecaSopenharmony_ciHWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0014, TestSize.Level1)
141da853ecaSopenharmony_ci{
142da853ecaSopenharmony_ci    if (!access("/system/lib64/media/", 0)) {
143da853ecaSopenharmony_ci        OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, true, HARDWARE);
144da853ecaSopenharmony_ci        ASSERT_NE(nullptr, capability);
145da853ecaSopenharmony_ci        ASSERT_EQ(true, OH_AVCapability_IsFeatureSupported(capability, VIDEO_ENCODER_LONG_TERM_REFERENCE));
146da853ecaSopenharmony_ci    } else {
147da853ecaSopenharmony_ci        OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, true, HARDWARE);
148da853ecaSopenharmony_ci        ASSERT_NE(nullptr, capability);
149da853ecaSopenharmony_ci        ASSERT_EQ(false, OH_AVCapability_IsFeatureSupported(capability, VIDEO_ENCODER_LONG_TERM_REFERENCE));
150da853ecaSopenharmony_ci    }
151da853ecaSopenharmony_ci}
152da853ecaSopenharmony_ci
153da853ecaSopenharmony_ci/**
154da853ecaSopenharmony_ci * @tc.number    : VIDEO_TEMPORAL_ENCODE_API_0015
155da853ecaSopenharmony_ci * @tc.name      : 软解,是否支持低时延
156da853ecaSopenharmony_ci * @tc.desc      : api test
157da853ecaSopenharmony_ci */
158da853ecaSopenharmony_ciHWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0015, TestSize.Level2)
159da853ecaSopenharmony_ci{
160da853ecaSopenharmony_ci    OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, false, SOFTWARE);
161da853ecaSopenharmony_ci    ASSERT_NE(nullptr, capability);
162da853ecaSopenharmony_ci    ASSERT_EQ(false, OH_AVCapability_IsFeatureSupported(capability, VIDEO_LOW_LATENCY));
163da853ecaSopenharmony_ci}
164da853ecaSopenharmony_ci
165da853ecaSopenharmony_ci/**
166da853ecaSopenharmony_ci * @tc.number    : VIDEO_TEMPORAL_ENCODE_API_0016
167da853ecaSopenharmony_ci * @tc.name      : 硬解,是否支持低时延
168da853ecaSopenharmony_ci * @tc.desc      : api test
169da853ecaSopenharmony_ci */
170da853ecaSopenharmony_ciHWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0016, TestSize.Level2)
171da853ecaSopenharmony_ci{
172da853ecaSopenharmony_ci    if (!access("/system/lib64/media/", 0)) {
173da853ecaSopenharmony_ci        OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(
174da853ecaSopenharmony_ci            OH_AVCODEC_MIMETYPE_VIDEO_AVC, false, HARDWARE);
175da853ecaSopenharmony_ci        ASSERT_NE(nullptr, capability);
176da853ecaSopenharmony_ci        ASSERT_EQ(true, OH_AVCapability_IsFeatureSupported(capability, VIDEO_LOW_LATENCY));
177da853ecaSopenharmony_ci    } else {
178da853ecaSopenharmony_ci        OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(
179da853ecaSopenharmony_ci            OH_AVCODEC_MIMETYPE_VIDEO_AVC, false, HARDWARE);
180da853ecaSopenharmony_ci        ASSERT_NE(nullptr, capability);
181da853ecaSopenharmony_ci        ASSERT_EQ(false, OH_AVCapability_IsFeatureSupported(capability, VIDEO_LOW_LATENCY));
182da853ecaSopenharmony_ci    }
183da853ecaSopenharmony_ci}
184da853ecaSopenharmony_ci
185da853ecaSopenharmony_ci/**
186da853ecaSopenharmony_ci * @tc.number    : VIDEO_TEMPORAL_ENCODE_API_0017
187da853ecaSopenharmony_ci * @tc.name      : 编码,是否支持低时延
188da853ecaSopenharmony_ci * @tc.desc      : api test
189da853ecaSopenharmony_ci */
190da853ecaSopenharmony_ciHWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0017, TestSize.Level1)
191da853ecaSopenharmony_ci{
192da853ecaSopenharmony_ci    if (!access("/system/lib64/media/", 0)) {
193da853ecaSopenharmony_ci        OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, true, HARDWARE);
194da853ecaSopenharmony_ci        ASSERT_NE(nullptr, capability);
195da853ecaSopenharmony_ci        ASSERT_EQ(true, OH_AVCapability_IsFeatureSupported(capability, VIDEO_LOW_LATENCY));
196da853ecaSopenharmony_ci    } else {
197da853ecaSopenharmony_ci        OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, true, HARDWARE);
198da853ecaSopenharmony_ci        ASSERT_NE(nullptr, capability);
199da853ecaSopenharmony_ci        ASSERT_EQ(false, OH_AVCapability_IsFeatureSupported(capability, VIDEO_LOW_LATENCY));
200da853ecaSopenharmony_ci    }
201da853ecaSopenharmony_ci}
202da853ecaSopenharmony_ci
203da853ecaSopenharmony_ci/**
204da853ecaSopenharmony_ci * @tc.number    : VIDEO_TEMPORAL_ENCODE_API_0018
205da853ecaSopenharmony_ci * @tc.name      : OH_AVCapability_GetFeatureProperties para error
206da853ecaSopenharmony_ci * @tc.desc      : api test
207da853ecaSopenharmony_ci */
208da853ecaSopenharmony_ciHWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0018, TestSize.Level2)
209da853ecaSopenharmony_ci{
210da853ecaSopenharmony_ci    OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, true, HARDWARE);
211da853ecaSopenharmony_ci    ASSERT_NE(nullptr, capability);
212da853ecaSopenharmony_ci    ASSERT_EQ(nullptr, OH_AVCapability_GetFeatureProperties(capability, static_cast<OH_AVCapabilityFeature>(4)));
213da853ecaSopenharmony_ci
214da853ecaSopenharmony_ci    ASSERT_EQ(nullptr, OH_AVCapability_GetFeatureProperties(capability, static_cast<OH_AVCapabilityFeature>(-1)));
215da853ecaSopenharmony_ci    ASSERT_EQ(nullptr, OH_AVCapability_GetFeatureProperties(capability, static_cast<OH_AVCapabilityFeature>(100)));
216da853ecaSopenharmony_ci
217da853ecaSopenharmony_ci    ASSERT_EQ(nullptr, OH_AVCapability_GetFeatureProperties(capability, VIDEO_ENCODER_TEMPORAL_SCALABILITY));
218da853ecaSopenharmony_ci}
219da853ecaSopenharmony_ci
220da853ecaSopenharmony_ci/**
221da853ecaSopenharmony_ci * @tc.number    : VIDEO_TEMPORAL_ENCODE_API_0019
222da853ecaSopenharmony_ci * @tc.name      : 解码,查询分层编码的能力值
223da853ecaSopenharmony_ci * @tc.desc      : api test
224da853ecaSopenharmony_ci */
225da853ecaSopenharmony_ciHWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0019, TestSize.Level2)
226da853ecaSopenharmony_ci{
227da853ecaSopenharmony_ci    OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, false, HARDWARE);
228da853ecaSopenharmony_ci    ASSERT_NE(nullptr, capability);
229da853ecaSopenharmony_ci    ASSERT_EQ(nullptr, OH_AVCapability_GetFeatureProperties(capability, VIDEO_ENCODER_TEMPORAL_SCALABILITY));
230da853ecaSopenharmony_ci}
231da853ecaSopenharmony_ci
232da853ecaSopenharmony_ci/**
233da853ecaSopenharmony_ci * @tc.number    : VIDEO_TEMPORAL_ENCODE_API_0020
234da853ecaSopenharmony_ci * @tc.name      : 编码,查询分层编码的能力值
235da853ecaSopenharmony_ci * @tc.desc      : api test
236da853ecaSopenharmony_ci */
237da853ecaSopenharmony_ciHWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0020, TestSize.Level1)
238da853ecaSopenharmony_ci{
239da853ecaSopenharmony_ci    OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, true, HARDWARE);
240da853ecaSopenharmony_ci    ASSERT_NE(nullptr, capability);
241da853ecaSopenharmony_ci    ASSERT_EQ(nullptr, OH_AVCapability_GetFeatureProperties(capability, VIDEO_ENCODER_TEMPORAL_SCALABILITY));
242da853ecaSopenharmony_ci}
243da853ecaSopenharmony_ci
244da853ecaSopenharmony_ci/**
245da853ecaSopenharmony_ci * @tc.number    : VIDEO_TEMPORAL_ENCODE_API_0021
246da853ecaSopenharmony_ci * @tc.name      : 解码,查询LTR能力值
247da853ecaSopenharmony_ci * @tc.desc      : api test
248da853ecaSopenharmony_ci */
249da853ecaSopenharmony_ciHWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0021, TestSize.Level2)
250da853ecaSopenharmony_ci{
251da853ecaSopenharmony_ci    OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, false, HARDWARE);
252da853ecaSopenharmony_ci    ASSERT_NE(nullptr, capability);
253da853ecaSopenharmony_ci    ASSERT_EQ(nullptr, OH_AVCapability_GetFeatureProperties(capability, VIDEO_ENCODER_LONG_TERM_REFERENCE));
254da853ecaSopenharmony_ci}
255da853ecaSopenharmony_ci
256da853ecaSopenharmony_ci/**
257da853ecaSopenharmony_ci * @tc.number    : VIDEO_TEMPORAL_ENCODE_API_0022
258da853ecaSopenharmony_ci * @tc.name      : 编码,查询LTR的能力值
259da853ecaSopenharmony_ci * @tc.desc      : api test
260da853ecaSopenharmony_ci */
261da853ecaSopenharmony_ciHWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0022, TestSize.Level1)
262da853ecaSopenharmony_ci{
263da853ecaSopenharmony_ci    if (!access("/system/lib64/media/", 0)) {
264da853ecaSopenharmony_ci        OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, true, HARDWARE);
265da853ecaSopenharmony_ci        ASSERT_NE(nullptr, capability);
266da853ecaSopenharmony_ci        format = OH_AVCapability_GetFeatureProperties(capability, VIDEO_ENCODER_LONG_TERM_REFERENCE);
267da853ecaSopenharmony_ci        ASSERT_NE(nullptr, format);
268da853ecaSopenharmony_ci        int ltrnum = 0;
269da853ecaSopenharmony_ci        EXPECT_EQ(OH_AVFormat_GetIntValue(
270da853ecaSopenharmony_ci            format, OH_FEATURE_PROPERTY_KEY_VIDEO_ENCODER_MAX_LTR_FRAME_COUNT, &ltrnum), true);
271da853ecaSopenharmony_ci        EXPECT_EQ(ltrnum, 10);
272da853ecaSopenharmony_ci    } else {
273da853ecaSopenharmony_ci        OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, true, HARDWARE);
274da853ecaSopenharmony_ci        ASSERT_NE(nullptr, capability);
275da853ecaSopenharmony_ci        ASSERT_EQ(nullptr, OH_AVCapability_GetFeatureProperties(capability, VIDEO_ENCODER_LONG_TERM_REFERENCE));
276da853ecaSopenharmony_ci    }
277da853ecaSopenharmony_ci}
278da853ecaSopenharmony_ci
279da853ecaSopenharmony_ci/**
280da853ecaSopenharmony_ci * @tc.number    : VIDEO_TEMPORAL_ENCODE_API_0023
281da853ecaSopenharmony_ci * @tc.name      : 软解,查询低时延的能力值
282da853ecaSopenharmony_ci * @tc.desc      : api test
283da853ecaSopenharmony_ci */
284da853ecaSopenharmony_ciHWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0023, TestSize.Level2)
285da853ecaSopenharmony_ci{
286da853ecaSopenharmony_ci    OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, false, SOFTWARE);
287da853ecaSopenharmony_ci    ASSERT_NE(nullptr, capability);
288da853ecaSopenharmony_ci    ASSERT_EQ(nullptr, OH_AVCapability_GetFeatureProperties(capability, VIDEO_LOW_LATENCY));
289da853ecaSopenharmony_ci}
290da853ecaSopenharmony_ci
291da853ecaSopenharmony_ci/**
292da853ecaSopenharmony_ci * @tc.number    : VIDEO_TEMPORAL_ENCODE_API_0024
293da853ecaSopenharmony_ci * @tc.name      : 硬解,查询低时延的能力值
294da853ecaSopenharmony_ci * @tc.desc      : api test
295da853ecaSopenharmony_ci */
296da853ecaSopenharmony_ciHWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0024, TestSize.Level2)
297da853ecaSopenharmony_ci{
298da853ecaSopenharmony_ci    OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, false, HARDWARE);
299da853ecaSopenharmony_ci    ASSERT_NE(nullptr, capability);
300da853ecaSopenharmony_ci    ASSERT_EQ(nullptr, OH_AVCapability_GetFeatureProperties(capability, VIDEO_LOW_LATENCY));
301da853ecaSopenharmony_ci}
302da853ecaSopenharmony_ci
303da853ecaSopenharmony_ci/**
304da853ecaSopenharmony_ci * @tc.number    : VIDEO_TEMPORAL_ENCODE_API_0025
305da853ecaSopenharmony_ci * @tc.name      : 编码,查询低时延的能力值
306da853ecaSopenharmony_ci * @tc.desc      : api test
307da853ecaSopenharmony_ci */
308da853ecaSopenharmony_ciHWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0025, TestSize.Level1)
309da853ecaSopenharmony_ci{
310da853ecaSopenharmony_ci    OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_AVC, true, HARDWARE);
311da853ecaSopenharmony_ci    ASSERT_NE(nullptr, capability);
312da853ecaSopenharmony_ci    ASSERT_EQ(nullptr, OH_AVCapability_GetFeatureProperties(capability, VIDEO_LOW_LATENCY));
313da853ecaSopenharmony_ci}
314da853ecaSopenharmony_ci
315da853ecaSopenharmony_ci/**
316da853ecaSopenharmony_ci * @tc.number    : VIDEO_TEMPORAL_ENCODE_API_0026
317da853ecaSopenharmony_ci * @tc.name      : 能力查询是否支持LTRH265
318da853ecaSopenharmony_ci * @tc.desc      : function test
319da853ecaSopenharmony_ci */
320da853ecaSopenharmony_ciHWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0026, TestSize.Level1)
321da853ecaSopenharmony_ci{
322da853ecaSopenharmony_ci    OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC, true, HARDWARE);
323da853ecaSopenharmony_ci    if (!access("/system/lib64/media/", 0)) {
324da853ecaSopenharmony_ci        ASSERT_EQ(true, OH_AVCapability_IsFeatureSupported(capability, VIDEO_ENCODER_LONG_TERM_REFERENCE));
325da853ecaSopenharmony_ci    } else {
326da853ecaSopenharmony_ci        ASSERT_EQ(false, OH_AVCapability_IsFeatureSupported(capability, VIDEO_ENCODER_LONG_TERM_REFERENCE));
327da853ecaSopenharmony_ci    }
328da853ecaSopenharmony_ci}
329da853ecaSopenharmony_ci
330da853ecaSopenharmony_ci/**
331da853ecaSopenharmony_ci * @tc.number    : VIDEO_TEMPORAL_ENCODE_API_0027
332da853ecaSopenharmony_ci * @tc.name      : 能力查询是否支持LTRH265
333da853ecaSopenharmony_ci * @tc.desc      : function test
334da853ecaSopenharmony_ci */
335da853ecaSopenharmony_ciHWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0027, TestSize.Level1)
336da853ecaSopenharmony_ci{
337da853ecaSopenharmony_ci    OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC, false, HARDWARE);
338da853ecaSopenharmony_ci    ASSERT_EQ(false, OH_AVCapability_IsFeatureSupported(capability, VIDEO_ENCODER_LONG_TERM_REFERENCE));
339da853ecaSopenharmony_ci}
340da853ecaSopenharmony_ci/**
341da853ecaSopenharmony_ci * @tc.number    : VIDEO_TEMPORAL_ENCODE_API_0028
342da853ecaSopenharmony_ci * @tc.name      : 能力查询是否支持低时延H265
343da853ecaSopenharmony_ci * @tc.desc      : function test
344da853ecaSopenharmony_ci */
345da853ecaSopenharmony_ciHWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0028, TestSize.Level1)
346da853ecaSopenharmony_ci{
347da853ecaSopenharmony_ci    OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC, true, HARDWARE);
348da853ecaSopenharmony_ci    if (!access("/system/lib64/media/", 0)) {
349da853ecaSopenharmony_ci        ASSERT_EQ(true, OH_AVCapability_IsFeatureSupported(capability, VIDEO_LOW_LATENCY));
350da853ecaSopenharmony_ci    } else {
351da853ecaSopenharmony_ci        ASSERT_EQ(false, OH_AVCapability_IsFeatureSupported(capability, VIDEO_LOW_LATENCY));
352da853ecaSopenharmony_ci    }
353da853ecaSopenharmony_ci}
354da853ecaSopenharmony_ci
355da853ecaSopenharmony_ci/**
356da853ecaSopenharmony_ci * @tc.number    : VIDEO_TEMPORAL_ENCODE_API_0029
357da853ecaSopenharmony_ci * @tc.name      : 能力查询是否支持低时延H265
358da853ecaSopenharmony_ci * @tc.desc      : function test
359da853ecaSopenharmony_ci */
360da853ecaSopenharmony_ciHWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0029, TestSize.Level1)
361da853ecaSopenharmony_ci{
362da853ecaSopenharmony_ci    OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC, false, HARDWARE);
363da853ecaSopenharmony_ci    if (!access("/system/lib64/media/", 0)) {
364da853ecaSopenharmony_ci        ASSERT_EQ(true, OH_AVCapability_IsFeatureSupported(capability, VIDEO_LOW_LATENCY));
365da853ecaSopenharmony_ci    } else {
366da853ecaSopenharmony_ci        ASSERT_EQ(false, OH_AVCapability_IsFeatureSupported(capability, VIDEO_LOW_LATENCY));
367da853ecaSopenharmony_ci    }
368da853ecaSopenharmony_ci}
369da853ecaSopenharmony_ci/**
370da853ecaSopenharmony_ci * @tc.number    : VIDEO_TEMPORAL_ENCODE_API_0030
371da853ecaSopenharmony_ci * @tc.name      : 能力查询是否支持分层编码H265
372da853ecaSopenharmony_ci * @tc.desc      : function test
373da853ecaSopenharmony_ci */
374da853ecaSopenharmony_ciHWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0030, TestSize.Level1)
375da853ecaSopenharmony_ci{
376da853ecaSopenharmony_ci    OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC, true, HARDWARE);
377da853ecaSopenharmony_ci    if (!access("/system/lib64/media/", 0)) {
378da853ecaSopenharmony_ci        ASSERT_EQ(true, OH_AVCapability_IsFeatureSupported(capability, VIDEO_ENCODER_TEMPORAL_SCALABILITY));
379da853ecaSopenharmony_ci    } else {
380da853ecaSopenharmony_ci        ASSERT_EQ(false, OH_AVCapability_IsFeatureSupported(capability, VIDEO_ENCODER_TEMPORAL_SCALABILITY));
381da853ecaSopenharmony_ci    }
382da853ecaSopenharmony_ci}
383da853ecaSopenharmony_ci
384da853ecaSopenharmony_ci/**
385da853ecaSopenharmony_ci * @tc.number    : VIDEO_TEMPORAL_ENCODE_API_0031
386da853ecaSopenharmony_ci * @tc.name      : 能力查询是否支持分层编码H265
387da853ecaSopenharmony_ci * @tc.desc      : function test
388da853ecaSopenharmony_ci */
389da853ecaSopenharmony_ciHWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0031, TestSize.Level1)
390da853ecaSopenharmony_ci{
391da853ecaSopenharmony_ci    OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC, false, HARDWARE);
392da853ecaSopenharmony_ci    ASSERT_EQ(false, OH_AVCapability_IsFeatureSupported(capability, VIDEO_ENCODER_TEMPORAL_SCALABILITY));
393da853ecaSopenharmony_ci}
394da853ecaSopenharmony_ci/**
395da853ecaSopenharmony_ci * @tc.number    : VIDEO_TEMPORAL_ENCODE_API_0032
396da853ecaSopenharmony_ci * @tc.name      : 编码,查询低时延的能力值H265
397da853ecaSopenharmony_ci * @tc.desc      : api test
398da853ecaSopenharmony_ci */
399da853ecaSopenharmony_ciHWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0032, TestSize.Level1)
400da853ecaSopenharmony_ci{
401da853ecaSopenharmony_ci    OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC, true, HARDWARE);
402da853ecaSopenharmony_ci    ASSERT_NE(nullptr, capability);
403da853ecaSopenharmony_ci    ASSERT_EQ(nullptr, OH_AVCapability_GetFeatureProperties(capability, VIDEO_LOW_LATENCY));
404da853ecaSopenharmony_ci}
405da853ecaSopenharmony_ci/**
406da853ecaSopenharmony_ci * @tc.number    : VIDEO_TEMPORAL_ENCODE_API_0033
407da853ecaSopenharmony_ci * @tc.name      : 解码,查询低时延的能力值H265
408da853ecaSopenharmony_ci * @tc.desc      : api test
409da853ecaSopenharmony_ci */
410da853ecaSopenharmony_ciHWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0033, TestSize.Level1)
411da853ecaSopenharmony_ci{
412da853ecaSopenharmony_ci    OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC, false, HARDWARE);
413da853ecaSopenharmony_ci    ASSERT_NE(nullptr, capability);
414da853ecaSopenharmony_ci    ASSERT_EQ(nullptr, OH_AVCapability_GetFeatureProperties(capability, VIDEO_LOW_LATENCY));
415da853ecaSopenharmony_ci}
416da853ecaSopenharmony_ci/**
417da853ecaSopenharmony_ci * @tc.number    : VIDEO_TEMPORAL_ENCODE_API_0034
418da853ecaSopenharmony_ci * @tc.name      : 解码,查询分层编码的能力值H265
419da853ecaSopenharmony_ci * @tc.desc      : api test
420da853ecaSopenharmony_ci */
421da853ecaSopenharmony_ciHWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0034, TestSize.Level2)
422da853ecaSopenharmony_ci{
423da853ecaSopenharmony_ci    OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC, false, HARDWARE);
424da853ecaSopenharmony_ci    ASSERT_NE(nullptr, capability);
425da853ecaSopenharmony_ci    ASSERT_EQ(nullptr, OH_AVCapability_GetFeatureProperties(capability, VIDEO_ENCODER_TEMPORAL_SCALABILITY));
426da853ecaSopenharmony_ci}
427da853ecaSopenharmony_ci
428da853ecaSopenharmony_ci/**
429da853ecaSopenharmony_ci * @tc.number    : VIDEO_TEMPORAL_ENCODE_API_0035
430da853ecaSopenharmony_ci * @tc.name      : 编码,查询分层编码的能力值H265
431da853ecaSopenharmony_ci * @tc.desc      : api test
432da853ecaSopenharmony_ci */
433da853ecaSopenharmony_ciHWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0035, TestSize.Level1)
434da853ecaSopenharmony_ci{
435da853ecaSopenharmony_ci    OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC, true, HARDWARE);
436da853ecaSopenharmony_ci    ASSERT_NE(nullptr, capability);
437da853ecaSopenharmony_ci    ASSERT_EQ(nullptr, OH_AVCapability_GetFeatureProperties(capability, VIDEO_ENCODER_TEMPORAL_SCALABILITY));
438da853ecaSopenharmony_ci}
439da853ecaSopenharmony_ci/**
440da853ecaSopenharmony_ci * @tc.number    : VIDEO_TEMPORAL_ENCODE_API_0036
441da853ecaSopenharmony_ci * @tc.name      : 解码,查询LTR能力值H265
442da853ecaSopenharmony_ci * @tc.desc      : api test
443da853ecaSopenharmony_ci */
444da853ecaSopenharmony_ciHWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0036, TestSize.Level2)
445da853ecaSopenharmony_ci{
446da853ecaSopenharmony_ci    OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC, false, HARDWARE);
447da853ecaSopenharmony_ci    ASSERT_NE(nullptr, capability);
448da853ecaSopenharmony_ci    ASSERT_EQ(nullptr, OH_AVCapability_GetFeatureProperties(capability, VIDEO_ENCODER_LONG_TERM_REFERENCE));
449da853ecaSopenharmony_ci}
450da853ecaSopenharmony_ci
451da853ecaSopenharmony_ci/**
452da853ecaSopenharmony_ci * @tc.number    : VIDEO_TEMPORAL_ENCODE_API_0037
453da853ecaSopenharmony_ci * @tc.name      : 编码,查询LTR的能力值H265
454da853ecaSopenharmony_ci * @tc.desc      : api test
455da853ecaSopenharmony_ci */
456da853ecaSopenharmony_ciHWTEST_F(HwCapabilityNdkTest, VIDEO_TEMPORAL_ENCODE_API_0037, TestSize.Level1)
457da853ecaSopenharmony_ci{
458da853ecaSopenharmony_ci    if (!access("/system/lib64/media/", 0)) {
459da853ecaSopenharmony_ci        OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC,
460da853ecaSopenharmony_ci         true, HARDWARE);
461da853ecaSopenharmony_ci        ASSERT_NE(nullptr, capability);
462da853ecaSopenharmony_ci        format = OH_AVCapability_GetFeatureProperties(capability, VIDEO_ENCODER_LONG_TERM_REFERENCE);
463da853ecaSopenharmony_ci        ASSERT_NE(nullptr, format);
464da853ecaSopenharmony_ci        int ltrnum = 0;
465da853ecaSopenharmony_ci        EXPECT_EQ(OH_AVFormat_GetIntValue(
466da853ecaSopenharmony_ci            format, OH_FEATURE_PROPERTY_KEY_VIDEO_ENCODER_MAX_LTR_FRAME_COUNT, &ltrnum), true);
467da853ecaSopenharmony_ci        EXPECT_EQ(ltrnum, 10);
468da853ecaSopenharmony_ci    } else {
469da853ecaSopenharmony_ci        OH_AVCapability *capability = OH_AVCodec_GetCapabilityByCategory(OH_AVCODEC_MIMETYPE_VIDEO_HEVC,
470da853ecaSopenharmony_ci         true, HARDWARE);
471da853ecaSopenharmony_ci        ASSERT_NE(nullptr, capability);
472da853ecaSopenharmony_ci        ASSERT_EQ(nullptr, OH_AVCapability_GetFeatureProperties(capability, VIDEO_ENCODER_LONG_TERM_REFERENCE));
473da853ecaSopenharmony_ci    }
474da853ecaSopenharmony_ci}
475da853ecaSopenharmony_ci} // namespace