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, <rnum), 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, <rnum), 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