/* * Copyright (C) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include #include #include #include #include "gtest/gtest.h" #include "AudioDecoderDemoCommon.h" #include "fcntl.h" #include "media_description.h" #include "avcodec_info.h" #include "avcodec_errors.h" #include "av_common.h" #include "meta/format.h" using namespace std; using namespace testing::ext; using namespace OHOS; using namespace OHOS::MediaAVCodec; namespace { class InnerStablityTest : public testing::Test { public: static void SetUpTestCase(); static void TearDownTestCase(); void SetUp() override; void TearDown() override; }; void InnerStablityTest::SetUpTestCase() {} void InnerStablityTest::TearDownTestCase() {} void InnerStablityTest::SetUp() {} void InnerStablityTest::TearDown() {} constexpr int RUN_TIMES = 100000; constexpr int RUN_TIME = 12 * 3600; } /** * @tc.number : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_001 * @tc.name : InnerCreateByMime(1000 times) * @tc.desc : Stability test */ HWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_001, TestSize.Level2) { srand(time(nullptr) * 10); AudioDecoderDemo* decoderDemo = new AudioDecoderDemo(); string mimeType[] = { "audio/mp4a-latm", "audio/mpeg", "audio/vorbis", "audio/flac", "audio/amr-wb", "audio/3gpp", "audio/g711mu" }; for (int i = 0; i < RUN_TIMES; i++) { int typeIndex = rand() % 4; decoderDemo->InnerCreateByMime(mimeType[typeIndex].c_str()); cout << "run time is: " << i << endl; int32_t ret = decoderDemo->InnerDestroy(); ASSERT_EQ(AVCS_ERR_OK, ret); } delete decoderDemo; } /** * @tc.number : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_002 * @tc.name : InnerCreateByName(1000 times) * @tc.desc : Stability test */ HWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_002, TestSize.Level2) { srand(time(nullptr) * 10); AudioDecoderDemo* decoderDemo = new AudioDecoderDemo(); for (int i = 0; i < RUN_TIMES; i++) { decoderDemo->InnerCreateByName("OH.Media.Codec.Decoder.Audio.Mpeg"); cout << "run time is: " << i << endl; int32_t ret = decoderDemo->InnerDestroy(); ASSERT_EQ(AVCS_ERR_OK, ret); } delete decoderDemo; } /** * @tc.number : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_003 * @tc.name : InnerPrepare(1000 times) * @tc.desc : Stability test */ HWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_003, TestSize.Level2) { AudioDecoderDemo* decoderDemo = new AudioDecoderDemo(); int32_t ret = decoderDemo->InnerCreateByName("OH.Media.Codec.Decoder.Audio.Mpeg"); ASSERT_EQ(AVCS_ERR_OK, ret); std::shared_ptr signal_ = decoderDemo->getSignal(); std::shared_ptr cb_ = make_unique(signal_); decoderDemo->InnerSetCallback(cb_); Format format; format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 320000); format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1); format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 48000); decoderDemo->InnerConfigure(format); for (int i = 0; i < RUN_TIMES; i++) { ret = decoderDemo->InnerPrepare(); cout << "run time is: " << i << ", ret is:" << ret << endl; } decoderDemo->InnerDestroy(); delete decoderDemo; } /** * @tc.number : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_004 * @tc.name : InnerStart(1000 times) * @tc.desc : Stability test */ HWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_004, TestSize.Level2) { AudioDecoderDemo* decoderDemo = new AudioDecoderDemo(); int32_t ret = decoderDemo->InnerCreateByName("OH.Media.Codec.Decoder.Audio.Mpeg"); ASSERT_EQ(AVCS_ERR_OK, ret); std::shared_ptr signal_ = decoderDemo->getSignal(); std::shared_ptr cb_ = make_unique(signal_); decoderDemo->InnerSetCallback(cb_); Format format; format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 320000); format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1); format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 48000); decoderDemo->InnerConfigure(format); decoderDemo->InnerPrepare(); for (int i = 0; i < RUN_TIMES; i++) { ret = decoderDemo->InnerStart(); cout << "run time is: " << i << ", ret is:" << ret << endl; } decoderDemo->InnerDestroy(); delete decoderDemo; } /** * @tc.number : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_005 * @tc.name : InnerStop(1000 times) * @tc.desc : Stability test */ HWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_005, TestSize.Level2) { AudioDecoderDemo* decoderDemo = new AudioDecoderDemo(); int32_t ret = decoderDemo->InnerCreateByName("OH.Media.Codec.Decoder.Audio.Mpeg"); ASSERT_EQ(AVCS_ERR_OK, ret); std::shared_ptr signal_ = decoderDemo->getSignal(); std::shared_ptr cb_ = make_unique(signal_); decoderDemo->InnerSetCallback(cb_); Format format; format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 320000); format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1); format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 48000); decoderDemo->InnerConfigure(format); decoderDemo->InnerPrepare(); decoderDemo->InnerStart(); for (int i = 0; i < RUN_TIMES; i++) { ret = decoderDemo->InnerStop(); cout << "run time is: " << i << ", ret is:" << ret << endl; } decoderDemo->InnerDestroy(); delete decoderDemo; } /** * @tc.number : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_006 * @tc.name : InnerDestroy(1000 times) * @tc.desc : Stability test */ HWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_006, TestSize.Level2) { AudioDecoderDemo* decoderDemo = new AudioDecoderDemo(); int32_t ret = decoderDemo->InnerCreateByName("OH.Media.Codec.Decoder.Audio.Mpeg"); ASSERT_EQ(AVCS_ERR_OK, ret); std::shared_ptr signal_ = decoderDemo->getSignal(); std::shared_ptr cb_ = make_unique(signal_); decoderDemo->InnerSetCallback(cb_); Format format; format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 320000); format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1); format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 48000); decoderDemo->InnerConfigure(format); decoderDemo->InnerPrepare(); decoderDemo->InnerStart(); decoderDemo->InnerStop(); for (int i = 0; i < RUN_TIMES; i++) { ret = decoderDemo->InnerDestroy(); cout << "run time is: " << i << ", ret is:" << ret << endl; } delete decoderDemo; } /** * @tc.number : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_007 * @tc.name : InnerReset(1000 times) * @tc.desc : Stability test */ HWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_007, TestSize.Level2) { AudioDecoderDemo* decoderDemo = new AudioDecoderDemo(); int32_t ret = decoderDemo->InnerCreateByName("OH.Media.Codec.Decoder.Audio.Mpeg"); ASSERT_EQ(AVCS_ERR_OK, ret); std::shared_ptr signal_ = decoderDemo->getSignal(); std::shared_ptr cb_ = make_unique(signal_); decoderDemo->InnerSetCallback(cb_); Format format; format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 320000); format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1); format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 48000); decoderDemo->InnerConfigure(format); decoderDemo->InnerPrepare(); decoderDemo->InnerStart(); for (int i = 0; i < RUN_TIMES; i++) { ret = decoderDemo->InnerReset(); cout << "run time is: " << i << ", ret is:" << ret << endl; } decoderDemo->InnerDestroy(); delete decoderDemo; } /** * @tc.number : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_008 * @tc.name : InnerFlush(1000 times) * @tc.desc : Stability test */ HWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_008, TestSize.Level2) { AudioDecoderDemo* decoderDemo = new AudioDecoderDemo(); int32_t ret = decoderDemo->InnerCreateByName("OH.Media.Codec.Decoder.Audio.Mpeg"); ASSERT_EQ(AVCS_ERR_OK, ret); std::shared_ptr signal_ = decoderDemo->getSignal(); std::shared_ptr cb_ = make_unique(signal_); decoderDemo->InnerSetCallback(cb_); Format format; format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 320000); format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1); format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 48000); decoderDemo->InnerConfigure(format); decoderDemo->InnerPrepare(); decoderDemo->InnerStart(); for (int i = 0; i < RUN_TIMES; i++) { ret = decoderDemo->InnerFlush(); cout << "run time is: " << i << ", ret is:" << ret << endl; } decoderDemo->InnerDestroy(); delete decoderDemo; } /** * @tc.number : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_009 * @tc.name : InnerRelease(1000 times) * @tc.desc : Stability test */ HWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_009, TestSize.Level2) { AudioDecoderDemo* decoderDemo = new AudioDecoderDemo(); int32_t ret = decoderDemo->InnerCreateByName("OH.Media.Codec.Decoder.Audio.Mpeg"); ASSERT_EQ(AVCS_ERR_OK, ret); std::shared_ptr signal_ = decoderDemo->getSignal(); std::shared_ptr cb_ = make_unique(signal_); decoderDemo->InnerSetCallback(cb_); Format format; format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 320000); format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1); format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 48000); decoderDemo->InnerConfigure(format); decoderDemo->InnerPrepare(); decoderDemo->InnerStart(); for (int i = 0; i < RUN_TIMES; i++) { ret = decoderDemo->InnerRelease(); cout << "run time is: " << i << ", ret is:" << ret << endl; } decoderDemo->InnerDestroy(); delete decoderDemo; } /** * @tc.number : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_010 * @tc.name : MP3(long time) * @tc.desc : Stability test */ HWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_010, TestSize.Level2) { AudioDecoderDemo* decoderDemo = new AudioDecoderDemo(); time_t startTime = time(nullptr); ASSERT_NE(startTime, -1); time_t curTime = startTime; while (difftime(curTime, startTime) < RUN_TIME) { cout << "run time: " << difftime(curTime, startTime) << " seconds" << endl; std::string inputFilePath = "s16p_128k_16000_1_dayuhaitang.mp3"; std::string outputFilePath = "SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_010.pcm"; Format format; format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 128000); format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1); format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 16000); decoderDemo->InnerRunCase(inputFilePath, outputFilePath, "OH.Media.Codec.Decoder.Audio.Mpeg", format); curTime = time(nullptr); ASSERT_NE(curTime, -1); } delete decoderDemo; } /** * @tc.number : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_011 * @tc.name : aac(long time) * @tc.desc : Stability test */ HWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_011, TestSize.Level2) { AudioDecoderDemo* decoderDemo = new AudioDecoderDemo(); time_t startTime = time(nullptr); ASSERT_NE(startTime, -1); time_t curTime = startTime; while (difftime(curTime, startTime) < RUN_TIME) { cout << "run time: " << difftime(curTime, startTime) << " seconds" << endl; std::string inputFilePath = "fltp_aac_low_128k_16000_2_dayuhaitang.aac"; std::string outputFilePath = "SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_011.pcm"; Format format; format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 2); format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 16000); format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 128000); format.PutIntValue(MediaDescriptionKey::MD_KEY_AAC_IS_ADTS, 1); decoderDemo->InnerRunCase(inputFilePath, outputFilePath, "avdec_aac", format); curTime = time(nullptr); ASSERT_NE(curTime, -1); } delete decoderDemo; } /** * @tc.number : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_012 * @tc.name : avdec_vorbis(long time) * @tc.desc : Stability test */ HWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_012, TestSize.Level2) { AudioDecoderDemo* decoderDemo = new AudioDecoderDemo(); time_t startTime = time(nullptr); ASSERT_NE(startTime, -1); time_t curTime = startTime; while (difftime(curTime, startTime) < RUN_TIME) { cout << "run time: " << difftime(curTime, startTime) << " seconds" << endl; std::string inputFilePath = "fltp_128k_16000_2_dayuhaitang.ogg"; std::string outputFilePath = "SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_012.pcm"; Format format; format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 128000); format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 2); format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 16000); decoderDemo->InnerRunCase(inputFilePath, outputFilePath, "avdec_vorbis", format); curTime = time(nullptr); ASSERT_NE(curTime, -1); } delete decoderDemo; } /** * @tc.number : SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_013 * @tc.name : avdec_flac(long time) * @tc.desc : Stability test */ HWTEST_F(InnerStablityTest, SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_013, TestSize.Level2) { AudioDecoderDemo* decoderDemo = new AudioDecoderDemo(); time_t startTime = time(nullptr); ASSERT_NE(startTime, -1); time_t curTime = startTime; while (difftime(curTime, startTime) < RUN_TIME) { cout << "run time: " << difftime(curTime, startTime) << " seconds" << endl; std::string inputFilePath = "s32_16000_2_dayuhaitang.flac"; std::string outputFilePath = "SUB_MULTIMEDIA_AUDIO_DECODER_STABILITY_013.pcm"; Format format; format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 357000); format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 2); format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 16000); format.PutIntValue("bits_per_coded_sample", 24); decoderDemo->InnerRunCase(inputFilePath, outputFilePath, "avdec_flac", format); curTime = time(nullptr); ASSERT_NE(curTime, -1); } delete decoderDemo; }