1 /* 2 * Copyright (C) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #include <string> 17 #include <iostream> 18 #include <thread> 19 #include <vector> 20 #include <ctime> 21 #include "gtest/gtest.h" 22 #include "AudioDecoderDemoCommon.h" 23 #include "fcntl.h" 24 #include "media_description.h" 25 #include "avcodec_info.h" 26 #include "avcodec_errors.h" 27 #include "av_common.h" 28 #include "meta/format.h" 29 30 using namespace std; 31 using namespace testing::ext; 32 using namespace OHOS; 33 using namespace OHOS::MediaAVCodec; 34 35 36 namespace { 37 class InnerStablityTest : public testing::Test { 38 public: 39 static void SetUpTestCase(); 40 static void TearDownTestCase(); 41 void SetUp() override; 42 void TearDown() override; 43 }; 44 SetUpTestCase()45 void InnerStablityTest::SetUpTestCase() {} TearDownTestCase()46 void InnerStablityTest::TearDownTestCase() {} SetUp()47 void InnerStablityTest::SetUp() {} TearDown()48 void InnerStablityTest::TearDown() {} 49 50 constexpr int RUN_TIMES = 100000; 51 constexpr int RUN_TIME = 12 * 3600; 52 } 53 54 /** 55 * @tc.number : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_001 56 * @tc.name : InnerCreateByMime(1000 times) 57 * @tc.desc : Stability test 58 */ 59 HWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_001, TestSize.Level2) 60 { 61 srand(time(nullptr) * 10); 62 AudioDecoderDemo* decoderDemo = new AudioDecoderDemo(); 63 64 string mimeType[] = { "audio/mp4a-latm", "audio/mpeg", "audio/vorbis", "audio/flac", "audio/amr-wb", 65 "audio/3gpp", "audio/g711mu" }; 66 67 for (int i = 0; i < RUN_TIMES; i++) 68 { 69 int typeIndex = rand() % 4; 70 decoderDemo->InnerCreateByMime(mimeType[typeIndex].c_str()); 71 cout << "run time is: " << i << endl; 72 int32_t ret = decoderDemo->InnerDestroy(); 73 ASSERT_EQ(AVCS_ERR_OK, ret); 74 } 75 76 delete decoderDemo; 77 } 78 79 80 /** 81 * @tc.number : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_002 82 * @tc.name : InnerCreateByName(1000 times) 83 * @tc.desc : Stability test 84 */ 85 HWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_002, TestSize.Level2) 86 { 87 srand(time(nullptr) * 10); 88 AudioDecoderDemo* decoderDemo = new AudioDecoderDemo(); 89 90 for (int i = 0; i < RUN_TIMES; i++) 91 { 92 decoderDemo->InnerCreateByName("OH.Media.Codec.Decoder.Audio.Mpeg"); 93 cout << "run time is: " << i << endl; 94 int32_t ret = decoderDemo->InnerDestroy(); 95 ASSERT_EQ(AVCS_ERR_OK, ret); 96 } 97 delete decoderDemo; 98 } 99 100 101 /** 102 * @tc.number : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_003 103 * @tc.name : InnerPrepare(1000 times) 104 * @tc.desc : Stability test 105 */ 106 HWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_003, TestSize.Level2) 107 { 108 AudioDecoderDemo* decoderDemo = new AudioDecoderDemo(); 109 int32_t ret = decoderDemo->InnerCreateByName("OH.Media.Codec.Decoder.Audio.Mpeg"); 110 ASSERT_EQ(AVCS_ERR_OK, ret); 111 std::shared_ptr<ADecSignal> signal_ = decoderDemo->getSignal(); 112 std::shared_ptr<InnerADecDemoCallback> cb_ = make_unique<InnerADecDemoCallback>(signal_); 113 decoderDemo->InnerSetCallback(cb_); 114 115 Format format; 116 117 format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 320000); 118 format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1); 119 format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 48000); 120 121 decoderDemo->InnerConfigure(format); 122 123 for (int i = 0; i < RUN_TIMES; i++) 124 { 125 ret = decoderDemo->InnerPrepare(); 126 cout << "run time is: " << i << ", ret is:" << ret << endl; 127 } 128 129 decoderDemo->InnerDestroy(); 130 131 delete decoderDemo; 132 } 133 134 135 /** 136 * @tc.number : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_004 137 * @tc.name : InnerStart(1000 times) 138 * @tc.desc : Stability test 139 */ 140 HWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_004, TestSize.Level2) 141 { 142 AudioDecoderDemo* decoderDemo = new AudioDecoderDemo(); 143 int32_t ret = decoderDemo->InnerCreateByName("OH.Media.Codec.Decoder.Audio.Mpeg"); 144 ASSERT_EQ(AVCS_ERR_OK, ret); 145 std::shared_ptr<ADecSignal> signal_ = decoderDemo->getSignal(); 146 std::shared_ptr<InnerADecDemoCallback> cb_ = make_unique<InnerADecDemoCallback>(signal_); 147 decoderDemo->InnerSetCallback(cb_); 148 Format format; 149 150 format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 320000); 151 format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1); 152 format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 48000); 153 154 decoderDemo->InnerConfigure(format); 155 decoderDemo->InnerPrepare(); 156 157 for (int i = 0; i < RUN_TIMES; i++) 158 { 159 ret = decoderDemo->InnerStart(); 160 cout << "run time is: " << i << ", ret is:" << ret << endl; 161 } 162 163 decoderDemo->InnerDestroy(); 164 165 delete decoderDemo; 166 } 167 168 169 /** 170 * @tc.number : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_005 171 * @tc.name : InnerStop(1000 times) 172 * @tc.desc : Stability test 173 */ 174 HWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_005, TestSize.Level2) 175 { 176 AudioDecoderDemo* decoderDemo = new AudioDecoderDemo(); 177 int32_t ret = decoderDemo->InnerCreateByName("OH.Media.Codec.Decoder.Audio.Mpeg"); 178 ASSERT_EQ(AVCS_ERR_OK, ret); 179 std::shared_ptr<ADecSignal> signal_ = decoderDemo->getSignal(); 180 std::shared_ptr<InnerADecDemoCallback> cb_ = make_unique<InnerADecDemoCallback>(signal_); 181 decoderDemo->InnerSetCallback(cb_); 182 Format format; 183 184 format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 320000); 185 format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1); 186 format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 48000); 187 188 decoderDemo->InnerConfigure(format); 189 decoderDemo->InnerPrepare(); 190 decoderDemo->InnerStart(); 191 192 for (int i = 0; i < RUN_TIMES; i++) 193 { 194 ret = decoderDemo->InnerStop(); 195 cout << "run time is: " << i << ", ret is:" << ret << endl; 196 } 197 198 decoderDemo->InnerDestroy(); 199 200 delete decoderDemo; 201 } 202 203 /** 204 * @tc.number : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_006 205 * @tc.name : InnerDestroy(1000 times) 206 * @tc.desc : Stability test 207 */ 208 HWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_006, TestSize.Level2) 209 { 210 AudioDecoderDemo* decoderDemo = new AudioDecoderDemo(); 211 int32_t ret = decoderDemo->InnerCreateByName("OH.Media.Codec.Decoder.Audio.Mpeg"); 212 ASSERT_EQ(AVCS_ERR_OK, ret); 213 std::shared_ptr<ADecSignal> signal_ = decoderDemo->getSignal(); 214 std::shared_ptr<InnerADecDemoCallback> cb_ = make_unique<InnerADecDemoCallback>(signal_); 215 decoderDemo->InnerSetCallback(cb_); 216 Format format; 217 218 format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 320000); 219 format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1); 220 format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 48000); 221 222 decoderDemo->InnerConfigure(format); 223 decoderDemo->InnerPrepare(); 224 decoderDemo->InnerStart(); 225 decoderDemo->InnerStop(); 226 227 for (int i = 0; i < RUN_TIMES; i++) 228 { 229 ret = decoderDemo->InnerDestroy(); 230 cout << "run time is: " << i << ", ret is:" << ret << endl; 231 } 232 delete decoderDemo; 233 } 234 235 236 /** 237 * @tc.number : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_007 238 * @tc.name : InnerReset(1000 times) 239 * @tc.desc : Stability test 240 */ 241 HWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_007, TestSize.Level2) 242 { 243 AudioDecoderDemo* decoderDemo = new AudioDecoderDemo(); 244 int32_t ret = decoderDemo->InnerCreateByName("OH.Media.Codec.Decoder.Audio.Mpeg"); 245 ASSERT_EQ(AVCS_ERR_OK, ret); 246 std::shared_ptr<ADecSignal> signal_ = decoderDemo->getSignal(); 247 std::shared_ptr<InnerADecDemoCallback> cb_ = make_unique<InnerADecDemoCallback>(signal_); 248 decoderDemo->InnerSetCallback(cb_); 249 Format format; 250 251 format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 320000); 252 format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1); 253 format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 48000); 254 255 decoderDemo->InnerConfigure(format); 256 decoderDemo->InnerPrepare(); 257 decoderDemo->InnerStart(); 258 259 for (int i = 0; i < RUN_TIMES; i++) 260 { 261 ret = decoderDemo->InnerReset(); 262 cout << "run time is: " << i << ", ret is:" << ret << endl; 263 } 264 decoderDemo->InnerDestroy(); 265 delete decoderDemo; 266 } 267 268 269 /** 270 * @tc.number : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_008 271 * @tc.name : InnerFlush(1000 times) 272 * @tc.desc : Stability test 273 */ 274 HWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_008, TestSize.Level2) 275 { 276 AudioDecoderDemo* decoderDemo = new AudioDecoderDemo(); 277 int32_t ret = decoderDemo->InnerCreateByName("OH.Media.Codec.Decoder.Audio.Mpeg"); 278 ASSERT_EQ(AVCS_ERR_OK, ret); 279 std::shared_ptr<ADecSignal> signal_ = decoderDemo->getSignal(); 280 std::shared_ptr<InnerADecDemoCallback> cb_ = make_unique<InnerADecDemoCallback>(signal_); 281 decoderDemo->InnerSetCallback(cb_); 282 Format format; 283 284 format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 320000); 285 format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1); 286 format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 48000); 287 288 decoderDemo->InnerConfigure(format); 289 decoderDemo->InnerPrepare(); 290 decoderDemo->InnerStart(); 291 292 for (int i = 0; i < RUN_TIMES; i++) 293 { 294 ret = decoderDemo->InnerFlush(); 295 cout << "run time is: " << i << ", ret is:" << ret << endl; 296 } 297 decoderDemo->InnerDestroy(); 298 delete decoderDemo; 299 } 300 301 302 /** 303 * @tc.number : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_009 304 * @tc.name : InnerRelease(1000 times) 305 * @tc.desc : Stability test 306 */ 307 HWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_009, TestSize.Level2) 308 { 309 AudioDecoderDemo* decoderDemo = new AudioDecoderDemo(); 310 int32_t ret = decoderDemo->InnerCreateByName("OH.Media.Codec.Decoder.Audio.Mpeg"); 311 ASSERT_EQ(AVCS_ERR_OK, ret); 312 std::shared_ptr<ADecSignal> signal_ = decoderDemo->getSignal(); 313 std::shared_ptr<InnerADecDemoCallback> cb_ = make_unique<InnerADecDemoCallback>(signal_); 314 decoderDemo->InnerSetCallback(cb_); 315 Format format; 316 317 format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 320000); 318 format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1); 319 format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 48000); 320 321 decoderDemo->InnerConfigure(format); 322 decoderDemo->InnerPrepare(); 323 decoderDemo->InnerStart(); 324 325 for (int i = 0; i < RUN_TIMES; i++) 326 { 327 ret = decoderDemo->InnerRelease(); 328 cout << "run time is: " << i << ", ret is:" << ret << endl; 329 } 330 decoderDemo->InnerDestroy(); 331 delete decoderDemo; 332 } 333 334 335 /** 336 * @tc.number : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_010 337 * @tc.name : MP3(long time) 338 * @tc.desc : Stability test 339 */ 340 HWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_010, TestSize.Level2) 341 { 342 AudioDecoderDemo* decoderDemo = new AudioDecoderDemo(); 343 time_t startTime = time(nullptr); 344 ASSERT_NE(startTime, -1); 345 time_t curTime = startTime; 346 347 while (difftime(curTime, startTime) < RUN_TIME) 348 { 349 cout << "run time: " << difftime(curTime, startTime) << " seconds" << endl; 350 std::string inputFilePath = "s16p_128k_16000_1_dayuhaitang.mp3"; 351 std::string outputFilePath = "SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_010.pcm"; 352 353 Format format; 354 format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 128000); 355 format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1); 356 format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 16000); 357 358 decoderDemo->InnerRunCase(inputFilePath, outputFilePath, "OH.Media.Codec.Decoder.Audio.Mpeg", format); 359 curTime = time(nullptr); 360 ASSERT_NE(curTime, -1); 361 } 362 delete decoderDemo; 363 } 364 365 366 /** 367 * @tc.number : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_011 368 * @tc.name : aac(long time) 369 * @tc.desc : Stability test 370 */ 371 HWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_011, TestSize.Level2) 372 { 373 AudioDecoderDemo* decoderDemo = new AudioDecoderDemo(); 374 time_t startTime = time(nullptr); 375 ASSERT_NE(startTime, -1); 376 time_t curTime = startTime; 377 378 while (difftime(curTime, startTime) < RUN_TIME) 379 { 380 cout << "run time: " << difftime(curTime, startTime) << " seconds" << endl; 381 std::string inputFilePath = "fltp_aac_low_128k_16000_2_dayuhaitang.aac"; 382 std::string outputFilePath = "SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_011.pcm"; 383 384 Format format; 385 format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 2); 386 format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 16000); 387 format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 128000); 388 format.PutIntValue(MediaDescriptionKey::MD_KEY_AAC_IS_ADTS, 1); 389 390 decoderDemo->InnerRunCase(inputFilePath, outputFilePath, "avdec_aac", format); 391 curTime = time(nullptr); 392 ASSERT_NE(curTime, -1); 393 } 394 delete decoderDemo; 395 } 396 397 398 /** 399 * @tc.number : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_012 400 * @tc.name : avdec_vorbis(long time) 401 * @tc.desc : Stability test 402 */ 403 HWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_012, TestSize.Level2) 404 { 405 AudioDecoderDemo* decoderDemo = new AudioDecoderDemo(); 406 time_t startTime = time(nullptr); 407 ASSERT_NE(startTime, -1); 408 time_t curTime = startTime; 409 410 while (difftime(curTime, startTime) < RUN_TIME) 411 { 412 cout << "run time: " << difftime(curTime, startTime) << " seconds" << endl; 413 std::string inputFilePath = "fltp_128k_16000_2_dayuhaitang.ogg"; 414 std::string outputFilePath = "SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_012.pcm"; 415 416 Format format; 417 format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 128000); 418 format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 2); 419 format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 16000); 420 421 decoderDemo->InnerRunCase(inputFilePath, outputFilePath, "avdec_vorbis", format); 422 curTime = time(nullptr); 423 ASSERT_NE(curTime, -1); 424 } 425 delete decoderDemo; 426 } 427 428 429 /** 430 * @tc.number : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_013 431 * @tc.name : avdec_flac(long time) 432 * @tc.desc : Stability test 433 */ 434 HWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_013, TestSize.Level2) 435 { 436 AudioDecoderDemo* decoderDemo = new AudioDecoderDemo(); 437 time_t startTime = time(nullptr); 438 ASSERT_NE(startTime, -1); 439 time_t curTime = startTime; 440 441 while (difftime(curTime, startTime) < RUN_TIME) 442 { 443 cout << "run time: " << difftime(curTime, startTime) << " seconds" << endl; 444 std::string inputFilePath = "s32_16000_2_dayuhaitang.flac"; 445 std::string outputFilePath = "SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_013.pcm"; 446 447 Format format; 448 format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 357000); 449 format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 2); 450 format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 16000); 451 format.PutIntValue("bits_per_coded_sample", 24); 452 453 decoderDemo->InnerRunCase(inputFilePath, outputFilePath, "avdec_flac", format); 454 curTime = time(nullptr); 455 ASSERT_NE(curTime, -1); 456 } 457 delete decoderDemo; 458 }