1da853ecaSopenharmony_ci/* 2da853ecaSopenharmony_ci * Copyright (C) 2022 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 16da853ecaSopenharmony_ci#include <string> 17da853ecaSopenharmony_ci#include <iostream> 18da853ecaSopenharmony_ci#include <ctime> 19da853ecaSopenharmony_ci#include <thread> 20da853ecaSopenharmony_ci#include <vector> 21da853ecaSopenharmony_ci#include "gtest/gtest.h" 22da853ecaSopenharmony_ci#include "AudioDecoderDemoCommon.h" 23da853ecaSopenharmony_ci#include "avcodec_info.h" 24da853ecaSopenharmony_ci#include "avcodec_errors.h" 25da853ecaSopenharmony_ci 26da853ecaSopenharmony_ciusing namespace std; 27da853ecaSopenharmony_ciusing namespace testing::ext; 28da853ecaSopenharmony_ciusing namespace OHOS; 29da853ecaSopenharmony_ciusing namespace OHOS::MediaAVCodec; 30da853ecaSopenharmony_ci 31da853ecaSopenharmony_cinamespace { 32da853ecaSopenharmony_ci class InnerFuzzTest : public testing::Test { 33da853ecaSopenharmony_ci public: 34da853ecaSopenharmony_ci static void SetUpTestCase(); 35da853ecaSopenharmony_ci static void TearDownTestCase(); 36da853ecaSopenharmony_ci void SetUp() override; 37da853ecaSopenharmony_ci void TearDown() override; 38da853ecaSopenharmony_ci }; 39da853ecaSopenharmony_ci 40da853ecaSopenharmony_ci void InnerFuzzTest::SetUpTestCase() {} 41da853ecaSopenharmony_ci void InnerFuzzTest::TearDownTestCase() {} 42da853ecaSopenharmony_ci void InnerFuzzTest::SetUp() {} 43da853ecaSopenharmony_ci void InnerFuzzTest::TearDown() {} 44da853ecaSopenharmony_ci 45da853ecaSopenharmony_ci constexpr int FUZZ_TEST_NUM = 1000000; 46da853ecaSopenharmony_ci constexpr int DEFAULT_INFO_SIZE = 100; 47da853ecaSopenharmony_ci constexpr int DEFAULT_RAND_SIZE = 256; 48da853ecaSopenharmony_ci std::atomic<bool> runningFlag = true; 49da853ecaSopenharmony_ci 50da853ecaSopenharmony_ci string getRandStr(const int len) 51da853ecaSopenharmony_ci { 52da853ecaSopenharmony_ci string str; 53da853ecaSopenharmony_ci char c; 54da853ecaSopenharmony_ci int idx; 55da853ecaSopenharmony_ci for (idx = 0; idx < len; idx++) { 56da853ecaSopenharmony_ci c = rand() % DEFAULT_RAND_SIZE; 57da853ecaSopenharmony_ci str.push_back(c); 58da853ecaSopenharmony_ci } 59da853ecaSopenharmony_ci return str; 60da853ecaSopenharmony_ci } 61da853ecaSopenharmony_ci 62da853ecaSopenharmony_ci 63da853ecaSopenharmony_ci int32_t getIntRand() 64da853ecaSopenharmony_ci { 65da853ecaSopenharmony_ci int32_t data = -10000 + rand() % 20001; 66da853ecaSopenharmony_ci return data; 67da853ecaSopenharmony_ci } 68da853ecaSopenharmony_ci 69da853ecaSopenharmony_ci void InputFunc(AudioDecoderDemo* decoderDemo) 70da853ecaSopenharmony_ci { 71da853ecaSopenharmony_ci AVCodecBufferInfo info; 72da853ecaSopenharmony_ci AVCodecBufferFlag flag; 73da853ecaSopenharmony_ci info.size = DEFAULT_INFO_SIZE; 74da853ecaSopenharmony_ci info.offset = 0; 75da853ecaSopenharmony_ci info.presentationTimeUs = 0; 76da853ecaSopenharmony_ci flag = AVCODEC_BUFFER_FLAG_NONE; 77da853ecaSopenharmony_ci 78da853ecaSopenharmony_ci for (int i = 0; i < FUZZ_TEST_NUM; i++) { 79da853ecaSopenharmony_ci cout << "current run time is " << i << endl; 80da853ecaSopenharmony_ci std::shared_ptr<ADecSignal> signal_ = decoderDemo->getSignal(); 81da853ecaSopenharmony_ci int index = signal_->inQueue_.front(); 82da853ecaSopenharmony_ci std::shared_ptr<AVSharedMemory> buffer = signal_->inInnerBufQueue_.front(); 83da853ecaSopenharmony_ci 84da853ecaSopenharmony_ci uint8_t* inputData = (uint8_t*)malloc(info.size); 85da853ecaSopenharmony_ci if (inputData == nullptr) { 86da853ecaSopenharmony_ci break ; 87da853ecaSopenharmony_ci } 88da853ecaSopenharmony_ci (void)memcpy_s(buffer->GetBase(), info.size, inputData, info.size); 89da853ecaSopenharmony_ci cout << "index is: " << index << endl; 90da853ecaSopenharmony_ci 91da853ecaSopenharmony_ci int32_t ret = decoderDemo->InnerQueueInputBuffer(index, info, flag); 92da853ecaSopenharmony_ci ASSERT_EQ(AVCS_ERR_OK, ret); 93da853ecaSopenharmony_ci cout << "InnerQueueInputBuffer return: " << ret << endl; 94da853ecaSopenharmony_ci } 95da853ecaSopenharmony_ci runningFlag.store(false); 96da853ecaSopenharmony_ci } 97da853ecaSopenharmony_ci 98da853ecaSopenharmony_ci void OutputFunc(AudioDecoderDemo* decoderDemo) 99da853ecaSopenharmony_ci { 100da853ecaSopenharmony_ci while (runningFlag.load()) { 101da853ecaSopenharmony_ci std::shared_ptr<ADecSignal> signal_ = decoderDemo->getSignal(); 102da853ecaSopenharmony_ci int index = signal_->outQueue_.front(); 103da853ecaSopenharmony_ci int32_t ret = decoderDemo->InnerReleaseOutputBuffer(index); 104da853ecaSopenharmony_ci cout << "ReleaseOutputData return: " << ret << endl; 105da853ecaSopenharmony_ci } 106da853ecaSopenharmony_ci } 107da853ecaSopenharmony_ci} 108da853ecaSopenharmony_ci/** 109da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_DECODER_FUZZ_001 110da853ecaSopenharmony_ci * @tc.name : InnerCreateByMime 111da853ecaSopenharmony_ci * @tc.desc : Fuzz test 112da853ecaSopenharmony_ci */ 113da853ecaSopenharmony_ciHWTEST_F(InnerFuzzTest, SUB_MULTIMEDIA_AUDIO_DECODER_FUZZ_001, TestSize.Level2) 114da853ecaSopenharmony_ci{ 115da853ecaSopenharmony_ci srand(time(nullptr) * 10); 116da853ecaSopenharmony_ci AudioDecoderDemo* decoderDemo = new AudioDecoderDemo(); 117da853ecaSopenharmony_ci ASSERT_NE(nullptr, decoderDemo); 118da853ecaSopenharmony_ci 119da853ecaSopenharmony_ci for (int i = 0; i < FUZZ_TEST_NUM; i++) { 120da853ecaSopenharmony_ci cout << "current run time is: " << i << endl; 121da853ecaSopenharmony_ci int32_t strLen = rand() % 1000; 122da853ecaSopenharmony_ci string randStr = getRandStr(strLen); 123da853ecaSopenharmony_ci decoderDemo->InnerCreateByMime(randStr.c_str()); 124da853ecaSopenharmony_ci decoderDemo->InnerDestroy(); 125da853ecaSopenharmony_ci } 126da853ecaSopenharmony_ci 127da853ecaSopenharmony_ci delete decoderDemo; 128da853ecaSopenharmony_ci} 129da853ecaSopenharmony_ci 130da853ecaSopenharmony_ci 131da853ecaSopenharmony_ci/** 132da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_DECODER_FUZZ_002 133da853ecaSopenharmony_ci * @tc.name : InnerCreateByName 134da853ecaSopenharmony_ci * @tc.desc : Fuzz test 135da853ecaSopenharmony_ci */ 136da853ecaSopenharmony_ciHWTEST_F(InnerFuzzTest, SUB_MULTIMEDIA_AUDIO_DECODER_FUZZ_002, TestSize.Level2) 137da853ecaSopenharmony_ci{ 138da853ecaSopenharmony_ci srand(time(nullptr) * 10); 139da853ecaSopenharmony_ci AudioDecoderDemo* decoderDemo = new AudioDecoderDemo(); 140da853ecaSopenharmony_ci ASSERT_NE(nullptr, decoderDemo); 141da853ecaSopenharmony_ci 142da853ecaSopenharmony_ci int strLen = 0; 143da853ecaSopenharmony_ci string test_value = ""; 144da853ecaSopenharmony_ci 145da853ecaSopenharmony_ci for (int i = 0; i < FUZZ_TEST_NUM; i++) { 146da853ecaSopenharmony_ci cout << "current run time is: " << i << endl; 147da853ecaSopenharmony_ci strLen = rand() % 65536; 148da853ecaSopenharmony_ci test_value = getRandStr(strLen); 149da853ecaSopenharmony_ci decoderDemo->InnerCreateByName(test_value.c_str()); 150da853ecaSopenharmony_ci decoderDemo->InnerDestroy(); 151da853ecaSopenharmony_ci } 152da853ecaSopenharmony_ci delete decoderDemo; 153da853ecaSopenharmony_ci} 154da853ecaSopenharmony_ci 155da853ecaSopenharmony_ci 156da853ecaSopenharmony_ci/** 157da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_DECODER_FUZZ_003 158da853ecaSopenharmony_ci * @tc.name : InnerConfigure 159da853ecaSopenharmony_ci * @tc.desc : Fuzz test 160da853ecaSopenharmony_ci */ 161da853ecaSopenharmony_ciHWTEST_F(InnerFuzzTest, SUB_MULTIMEDIA_AUDIO_DECODER_FUZZ_003, TestSize.Level2) 162da853ecaSopenharmony_ci{ 163da853ecaSopenharmony_ci srand(time(nullptr) * 10); 164da853ecaSopenharmony_ci AudioDecoderDemo* decoderDemo = new AudioDecoderDemo(); 165da853ecaSopenharmony_ci ASSERT_NE(nullptr, decoderDemo); 166da853ecaSopenharmony_ci 167da853ecaSopenharmony_ci int32_t ret = decoderDemo->InnerCreateByName("OH.Media.Codec.Decoder.Audio.Mpeg"); 168da853ecaSopenharmony_ci ASSERT_EQ(AVCS_ERR_OK, ret); 169da853ecaSopenharmony_ci Format format; 170da853ecaSopenharmony_ci 171da853ecaSopenharmony_ci for (int i = 0; i < FUZZ_TEST_NUM; i++) { 172da853ecaSopenharmony_ci cout << "current run time is: " << i << endl; 173da853ecaSopenharmony_ci int32_t bitRate = getIntRand(); 174da853ecaSopenharmony_ci int32_t audioChannels = getIntRand(); 175da853ecaSopenharmony_ci int32_t audioSampleRate = getIntRand(); 176da853ecaSopenharmony_ci int32_t codedSample = getIntRand(); 177da853ecaSopenharmony_ci 178da853ecaSopenharmony_ci cout << "BIT_RATE is: " << bitRate << endl; 179da853ecaSopenharmony_ci cout << ", AUDIO_CHANNELS len is: " << audioChannels << endl; 180da853ecaSopenharmony_ci cout << ", SAMPLE_RATE len is: " << audioSampleRate << endl; 181da853ecaSopenharmony_ci 182da853ecaSopenharmony_ci format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, audioChannels); 183da853ecaSopenharmony_ci format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, audioSampleRate); 184da853ecaSopenharmony_ci format.PutIntValue("bits_per_coded_sample", codedSample); 185da853ecaSopenharmony_ci format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, bitRate); 186da853ecaSopenharmony_ci 187da853ecaSopenharmony_ci decoderDemo->InnerConfigure(format); 188da853ecaSopenharmony_ci decoderDemo->InnerReset(); 189da853ecaSopenharmony_ci } 190da853ecaSopenharmony_ci decoderDemo->InnerDestroy(); 191da853ecaSopenharmony_ci delete decoderDemo; 192da853ecaSopenharmony_ci} 193da853ecaSopenharmony_ci 194da853ecaSopenharmony_ci 195da853ecaSopenharmony_ci/** 196da853ecaSopenharmony_ci* @tc.number : SUB_MULTIMEDIA_AUDIO_DECODER_FUZZ_004 197da853ecaSopenharmony_ci* @tc.name : InnerSetParameter 198da853ecaSopenharmony_ci* @tc.desc : Fuzz test 199da853ecaSopenharmony_ci*/ 200da853ecaSopenharmony_ciHWTEST_F(InnerFuzzTest, SUB_MULTIMEDIA_AUDIO_DECODER_FUZZ_004, TestSize.Level2) 201da853ecaSopenharmony_ci{ 202da853ecaSopenharmony_ci srand(time(nullptr) * 10); 203da853ecaSopenharmony_ci AudioDecoderDemo* decoderDemo = new AudioDecoderDemo(); 204da853ecaSopenharmony_ci 205da853ecaSopenharmony_ci int32_t ret = decoderDemo->InnerCreateByName("OH.Media.Codec.Decoder.Audio.Mpeg"); 206da853ecaSopenharmony_ci ASSERT_EQ(AVCS_ERR_OK, ret); 207da853ecaSopenharmony_ci 208da853ecaSopenharmony_ci Format format; 209da853ecaSopenharmony_ci 210da853ecaSopenharmony_ci std::shared_ptr<ADecSignal> signal = decoderDemo->getSignal(); 211da853ecaSopenharmony_ci 212da853ecaSopenharmony_ci std::shared_ptr<InnerADecDemoCallback> cb_ = make_unique<InnerADecDemoCallback>(signal); 213da853ecaSopenharmony_ci ret = decoderDemo->InnerSetCallback(cb_); 214da853ecaSopenharmony_ci cout << "SetCallback ret is: " << ret << endl; 215da853ecaSopenharmony_ci 216da853ecaSopenharmony_ci format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 320000); 217da853ecaSopenharmony_ci format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1); 218da853ecaSopenharmony_ci format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 48000); 219da853ecaSopenharmony_ci format.PutIntValue("bits_per_coded_sample", 4); 220da853ecaSopenharmony_ci 221da853ecaSopenharmony_ci ret = decoderDemo->InnerConfigure(format); 222da853ecaSopenharmony_ci cout << "Configure return: " << ret << endl; 223da853ecaSopenharmony_ci ret = decoderDemo->InnerPrepare(); 224da853ecaSopenharmony_ci cout << "Prepare return: " << ret << endl; 225da853ecaSopenharmony_ci 226da853ecaSopenharmony_ci ret = decoderDemo->InnerStart(); 227da853ecaSopenharmony_ci cout << "Start return: " << ret << endl; 228da853ecaSopenharmony_ci 229da853ecaSopenharmony_ci for (int i = 0; i < FUZZ_TEST_NUM; i++) { 230da853ecaSopenharmony_ci Format generalFormat; 231da853ecaSopenharmony_ci cout << "current run time is: " << i << endl; 232da853ecaSopenharmony_ci int32_t bitRate = getIntRand(); 233da853ecaSopenharmony_ci int32_t audioChannels = getIntRand(); 234da853ecaSopenharmony_ci int32_t audioSampleRate = getIntRand(); 235da853ecaSopenharmony_ci int32_t codedSample = getIntRand(); 236da853ecaSopenharmony_ci 237da853ecaSopenharmony_ci cout << "BIT_RATE is: " << bitRate << endl; 238da853ecaSopenharmony_ci cout << ", AUDIO_CHANNELS len is: " << audioChannels << endl; 239da853ecaSopenharmony_ci cout << ", SAMPLE_RATE len is: " << audioSampleRate << endl; 240da853ecaSopenharmony_ci 241da853ecaSopenharmony_ci generalFormat.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, audioChannels); 242da853ecaSopenharmony_ci generalFormat.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, audioSampleRate); 243da853ecaSopenharmony_ci generalFormat.PutIntValue("bits_per_coded_sample", codedSample); 244da853ecaSopenharmony_ci generalFormat.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, bitRate); 245da853ecaSopenharmony_ci ret = decoderDemo->InnerSetParameter(generalFormat); 246da853ecaSopenharmony_ci cout << "ret code is: " << ret << endl; 247da853ecaSopenharmony_ci } 248da853ecaSopenharmony_ci decoderDemo->InnerDestroy(); 249da853ecaSopenharmony_ci delete decoderDemo; 250da853ecaSopenharmony_ci} 251da853ecaSopenharmony_ci 252da853ecaSopenharmony_ci 253da853ecaSopenharmony_ci/** 254da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_DECODER_FUZZ_005 255da853ecaSopenharmony_ci * @tc.name : InnerQueueInputBuffer 256da853ecaSopenharmony_ci * @tc.desc : Fuzz test 257da853ecaSopenharmony_ci */ 258da853ecaSopenharmony_ciHWTEST_F(InnerFuzzTest, SUB_MULTIMEDIA_AUDIO_DECODER_FUZZ_005, TestSize.Level2) 259da853ecaSopenharmony_ci{ 260da853ecaSopenharmony_ci srand(time(nullptr) * 10); 261da853ecaSopenharmony_ci AudioDecoderDemo* decoderDemo = new AudioDecoderDemo(); 262da853ecaSopenharmony_ci 263da853ecaSopenharmony_ci int32_t ret = decoderDemo->InnerCreateByName("OH.Media.Codec.Decoder.Audio.Mpeg"); 264da853ecaSopenharmony_ci ASSERT_EQ(AVCS_ERR_OK, ret); 265da853ecaSopenharmony_ci Format format; 266da853ecaSopenharmony_ci format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1); 267da853ecaSopenharmony_ci format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 44100); 268da853ecaSopenharmony_ci format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 169000); 269da853ecaSopenharmony_ci format.PutIntValue("bits_per_coded_sample", 4); 270da853ecaSopenharmony_ci 271da853ecaSopenharmony_ci int index = 0; 272da853ecaSopenharmony_ci 273da853ecaSopenharmony_ci std::shared_ptr<ADecSignal> signal = decoderDemo->getSignal(); 274da853ecaSopenharmony_ci 275da853ecaSopenharmony_ci std::shared_ptr<InnerADecDemoCallback> cb_ = make_unique<InnerADecDemoCallback>(signal); 276da853ecaSopenharmony_ci ret = decoderDemo->InnerSetCallback(cb_); 277da853ecaSopenharmony_ci cout << "SetCallback ret is: " << ret << endl; 278da853ecaSopenharmony_ci 279da853ecaSopenharmony_ci ret = decoderDemo->InnerConfigure(format); 280da853ecaSopenharmony_ci cout << "Configure ret is: " << ret << endl; 281da853ecaSopenharmony_ci ASSERT_EQ(AVCS_ERR_OK, ret); 282da853ecaSopenharmony_ci 283da853ecaSopenharmony_ci ret = decoderDemo->InnerPrepare(); 284da853ecaSopenharmony_ci ASSERT_EQ(AVCS_ERR_OK, ret); 285da853ecaSopenharmony_ci 286da853ecaSopenharmony_ci ret = decoderDemo->InnerStart(); 287da853ecaSopenharmony_ci ASSERT_EQ(AVCS_ERR_OK, ret); 288da853ecaSopenharmony_ci 289da853ecaSopenharmony_ci AVCodecBufferInfo info; 290da853ecaSopenharmony_ci AVCodecBufferFlag flag; 291da853ecaSopenharmony_ci info.presentationTimeUs = 0; 292da853ecaSopenharmony_ci 293da853ecaSopenharmony_ci for (int i = 0; i < FUZZ_TEST_NUM; i++) { 294da853ecaSopenharmony_ci cout << "current run time is: " << i << endl; 295da853ecaSopenharmony_ci index = getIntRand(); 296da853ecaSopenharmony_ci int dataLen = rand() % 65536; 297da853ecaSopenharmony_ci 298da853ecaSopenharmony_ci info.presentationTimeUs += 21; 299da853ecaSopenharmony_ci info.size = dataLen; 300da853ecaSopenharmony_ci info.offset = getIntRand(); 301da853ecaSopenharmony_ci flag = AVCODEC_BUFFER_FLAG_NONE; 302da853ecaSopenharmony_ci 303da853ecaSopenharmony_ci cout << "info.presentationTimeUs is:" << info.presentationTimeUs << endl; 304da853ecaSopenharmony_ci cout << "info.size is:" << info.size << endl; 305da853ecaSopenharmony_ci cout << "info.offset is:" << info.offset << endl; 306da853ecaSopenharmony_ci cout << "flag is:" << flag << endl; 307da853ecaSopenharmony_ci 308da853ecaSopenharmony_ci ret = decoderDemo->InnerQueueInputBuffer(index, info, flag); 309da853ecaSopenharmony_ci cout << "ret code is: " << ret << endl; 310da853ecaSopenharmony_ci } 311da853ecaSopenharmony_ci decoderDemo->InnerDestroy(); 312da853ecaSopenharmony_ci delete decoderDemo; 313da853ecaSopenharmony_ci} 314da853ecaSopenharmony_ci 315da853ecaSopenharmony_ci 316da853ecaSopenharmony_ci/** 317da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_DECODER_FUZZ_006 318da853ecaSopenharmony_ci * @tc.name : InnerGetOutputFormat 319da853ecaSopenharmony_ci * @tc.desc : Fuzz test 320da853ecaSopenharmony_ci */ 321da853ecaSopenharmony_ciHWTEST_F(InnerFuzzTest, SUB_MULTIMEDIA_AUDIO_DECODER_FUZZ_006, TestSize.Level2) 322da853ecaSopenharmony_ci{ 323da853ecaSopenharmony_ci srand(time(nullptr) * 10); 324da853ecaSopenharmony_ci AudioDecoderDemo* decoderDemo = new AudioDecoderDemo(); 325da853ecaSopenharmony_ci 326da853ecaSopenharmony_ci int32_t ret = decoderDemo->InnerCreateByName("OH.Media.Codec.Decoder.Audio.Mpeg"); 327da853ecaSopenharmony_ci ASSERT_EQ(AVCS_ERR_OK, ret); 328da853ecaSopenharmony_ci Format format; 329da853ecaSopenharmony_ci format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1); 330da853ecaSopenharmony_ci format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 44100); 331da853ecaSopenharmony_ci format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 169000); 332da853ecaSopenharmony_ci format.PutIntValue("bits_per_coded_sample", 4); 333da853ecaSopenharmony_ci 334da853ecaSopenharmony_ci std::shared_ptr<ADecSignal> signal = decoderDemo->getSignal(); 335da853ecaSopenharmony_ci 336da853ecaSopenharmony_ci std::shared_ptr<InnerADecDemoCallback> cb_ = make_unique<InnerADecDemoCallback>(signal); 337da853ecaSopenharmony_ci ret = decoderDemo->InnerSetCallback(cb_); 338da853ecaSopenharmony_ci cout << "SetCallback ret is: " << ret << endl; 339da853ecaSopenharmony_ci 340da853ecaSopenharmony_ci ret = decoderDemo->InnerConfigure(format); 341da853ecaSopenharmony_ci cout << "Configure ret is: " << ret << endl; 342da853ecaSopenharmony_ci ASSERT_EQ(AVCS_ERR_OK, ret); 343da853ecaSopenharmony_ci 344da853ecaSopenharmony_ci ret = decoderDemo->InnerPrepare(); 345da853ecaSopenharmony_ci ASSERT_EQ(AVCS_ERR_OK, ret); 346da853ecaSopenharmony_ci 347da853ecaSopenharmony_ci ret = decoderDemo->InnerStart(); 348da853ecaSopenharmony_ci ASSERT_EQ(AVCS_ERR_OK, ret); 349da853ecaSopenharmony_ci 350da853ecaSopenharmony_ci int strLen = 0; 351da853ecaSopenharmony_ci string test_key = ""; 352da853ecaSopenharmony_ci string test_value = ""; 353da853ecaSopenharmony_ci 354da853ecaSopenharmony_ci for (int i = 0; i < FUZZ_TEST_NUM; i++) { 355da853ecaSopenharmony_ci cout << "current run time is: " << i << endl; 356da853ecaSopenharmony_ci strLen = rand() % 65536; 357da853ecaSopenharmony_ci test_key = getRandStr(strLen); 358da853ecaSopenharmony_ci cout << "test key len is:" << strLen << endl; 359da853ecaSopenharmony_ci strLen = rand() % 65536; 360da853ecaSopenharmony_ci test_value = getRandStr(strLen); 361da853ecaSopenharmony_ci cout << "test value len is:" << strLen << endl; 362da853ecaSopenharmony_ci format.PutStringValue(test_key.c_str(), test_value.c_str()); 363da853ecaSopenharmony_ci ret = decoderDemo->InnerGetOutputFormat(format); 364da853ecaSopenharmony_ci cout << "ret code is: " << ret << endl; 365da853ecaSopenharmony_ci } 366da853ecaSopenharmony_ci decoderDemo->InnerDestroy(); 367da853ecaSopenharmony_ci delete decoderDemo; 368da853ecaSopenharmony_ci} 369da853ecaSopenharmony_ci 370da853ecaSopenharmony_ci/** 371da853ecaSopenharmony_ci* @tc.number : SUB_MULTIMEDIA_AUDIO_DECODER_FUZZ_007 372da853ecaSopenharmony_ci* @tc.name : input file fuzz 373da853ecaSopenharmony_ci* @tc.desc : Fuzz test 374da853ecaSopenharmony_ci*/ 375da853ecaSopenharmony_ciHWTEST_F(InnerFuzzTest, SUB_MULTIMEDIA_AUDIO_DECODER_FUZZ_007, TestSize.Level2) 376da853ecaSopenharmony_ci{ 377da853ecaSopenharmony_ci srand(time(nullptr) * 10); 378da853ecaSopenharmony_ci AudioDecoderDemo* decoderDemo = new AudioDecoderDemo(); 379da853ecaSopenharmony_ci 380da853ecaSopenharmony_ci int32_t ret = decoderDemo->InnerCreateByName("OH.Media.Codec.Decoder.Audio.Mpeg"); 381da853ecaSopenharmony_ci ASSERT_EQ(AVCS_ERR_OK, ret); 382da853ecaSopenharmony_ci Format format; 383da853ecaSopenharmony_ci format.PutIntValue(MediaDescriptionKey::MD_KEY_CHANNEL_COUNT, 1); 384da853ecaSopenharmony_ci format.PutIntValue(MediaDescriptionKey::MD_KEY_SAMPLE_RATE, 44100); 385da853ecaSopenharmony_ci format.PutLongValue(MediaDescriptionKey::MD_KEY_BITRATE, 169000); 386da853ecaSopenharmony_ci format.PutIntValue("bits_per_coded_sample", 4); 387da853ecaSopenharmony_ci 388da853ecaSopenharmony_ci std::shared_ptr<ADecSignal> signal = decoderDemo->getSignal(); 389da853ecaSopenharmony_ci 390da853ecaSopenharmony_ci std::shared_ptr<InnerADecDemoCallback> cb_ = make_unique<InnerADecDemoCallback>(signal); 391da853ecaSopenharmony_ci ret = decoderDemo->InnerSetCallback(cb_); 392da853ecaSopenharmony_ci cout << "SetCallback ret is: " << ret << endl; 393da853ecaSopenharmony_ci 394da853ecaSopenharmony_ci ret = decoderDemo->InnerConfigure(format); 395da853ecaSopenharmony_ci cout << "Configure ret is: " << ret << endl; 396da853ecaSopenharmony_ci ASSERT_EQ(AVCS_ERR_OK, ret); 397da853ecaSopenharmony_ci 398da853ecaSopenharmony_ci ret = decoderDemo->InnerPrepare(); 399da853ecaSopenharmony_ci ASSERT_EQ(AVCS_ERR_OK, ret); 400da853ecaSopenharmony_ci 401da853ecaSopenharmony_ci ret = decoderDemo->InnerStart(); 402da853ecaSopenharmony_ci ASSERT_EQ(AVCS_ERR_OK, ret); 403da853ecaSopenharmony_ci 404da853ecaSopenharmony_ci vector<thread> threadVec; 405da853ecaSopenharmony_ci threadVec.push_back(thread(InputFunc, decoderDemo)); 406da853ecaSopenharmony_ci threadVec.push_back(thread(OutputFunc, decoderDemo)); 407da853ecaSopenharmony_ci for (uint32_t i = 0; i < threadVec.size(); i++) 408da853ecaSopenharmony_ci { 409da853ecaSopenharmony_ci threadVec[i].join(); 410da853ecaSopenharmony_ci } 411da853ecaSopenharmony_ci decoderDemo->InnerDestroy(); 412da853ecaSopenharmony_ci delete decoderDemo; 413da853ecaSopenharmony_ci} 414