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