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 "AudioEncoderDemoCommon.h" 23da853ecaSopenharmony_ci 24da853ecaSopenharmony_ci 25da853ecaSopenharmony_ciusing namespace std; 26da853ecaSopenharmony_ciusing namespace testing::ext; 27da853ecaSopenharmony_ciusing namespace OHOS; 28da853ecaSopenharmony_ciusing namespace OHOS::MediaAVCodec; 29da853ecaSopenharmony_ci 30da853ecaSopenharmony_ci 31da853ecaSopenharmony_cinamespace { 32da853ecaSopenharmony_ci class NativeFuzzTest : 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 NativeFuzzTest::SetUpTestCase() {} 41da853ecaSopenharmony_ci void NativeFuzzTest::TearDownTestCase() {} 42da853ecaSopenharmony_ci void NativeFuzzTest::SetUp() {} 43da853ecaSopenharmony_ci void NativeFuzzTest::TearDown() {} 44da853ecaSopenharmony_ci 45da853ecaSopenharmony_ci constexpr int FUZZ_TEST_NUM = 1000; 46da853ecaSopenharmony_ci std::atomic<bool> runningFlag = true; 47da853ecaSopenharmony_ci 48da853ecaSopenharmony_ci string rand_str(const int len) 49da853ecaSopenharmony_ci { 50da853ecaSopenharmony_ci string str; 51da853ecaSopenharmony_ci char c; 52da853ecaSopenharmony_ci int idx; 53da853ecaSopenharmony_ci constexpr uint32_t CONSTASNTS = 256; 54da853ecaSopenharmony_ci for (idx = 0; idx < len; idx++) { 55da853ecaSopenharmony_ci c = rand() % CONSTASNTS; 56da853ecaSopenharmony_ci str.push_back(c); 57da853ecaSopenharmony_ci } 58da853ecaSopenharmony_ci return str; 59da853ecaSopenharmony_ci } 60da853ecaSopenharmony_ci 61da853ecaSopenharmony_ci int32_t getIntRand() 62da853ecaSopenharmony_ci { 63da853ecaSopenharmony_ci int32_t data = -10000 + rand() % 20001; 64da853ecaSopenharmony_ci return data; 65da853ecaSopenharmony_ci } 66da853ecaSopenharmony_ci 67da853ecaSopenharmony_ci void inputFunc(AudioEncoderDemo* encoderDemo, OH_AVCodec* handle) 68da853ecaSopenharmony_ci { 69da853ecaSopenharmony_ci OH_AVCodecBufferAttr info; 70da853ecaSopenharmony_ci constexpr uint32_t INFO_SIZE = 100; 71da853ecaSopenharmony_ci info.size = INFO_SIZE; 72da853ecaSopenharmony_ci info.offset = 0; 73da853ecaSopenharmony_ci info.pts = 0; 74da853ecaSopenharmony_ci info.flags = AVCODEC_BUFFER_FLAGS_NONE; 75da853ecaSopenharmony_ci 76da853ecaSopenharmony_ci for (int i = 0; i < FUZZ_TEST_NUM; i++) { 77da853ecaSopenharmony_ci cout << "current run time is " << i << endl; 78da853ecaSopenharmony_ci int32_t inputIndex = encoderDemo->NativeGetInputIndex(); 79da853ecaSopenharmony_ci uint8_t* data = encoderDemo->NativeGetInputBuf(); 80da853ecaSopenharmony_ci 81da853ecaSopenharmony_ci uint8_t* inputData = (uint8_t*)malloc(info.size); 82da853ecaSopenharmony_ci if (inputData == nullptr) { 83da853ecaSopenharmony_ci cout << "null pointer" << endl; 84da853ecaSopenharmony_ci return; 85da853ecaSopenharmony_ci } 86da853ecaSopenharmony_ci 87da853ecaSopenharmony_ci memcpy_s(data, info.size, inputData, info.size); 88da853ecaSopenharmony_ci cout << "index is: " << inputIndex << endl; 89da853ecaSopenharmony_ci 90da853ecaSopenharmony_ci OH_AVErrCode ret = encoderDemo->NativePushInputData(handle, inputIndex, info); 91da853ecaSopenharmony_ci cout << "PushInputData return: " << ret << endl; 92da853ecaSopenharmony_ci free(inputData); 93da853ecaSopenharmony_ci } 94da853ecaSopenharmony_ci runningFlag.store(false); 95da853ecaSopenharmony_ci } 96da853ecaSopenharmony_ci 97da853ecaSopenharmony_ci void outputFunc(AudioEncoderDemo* encoderDemo, OH_AVCodec* handle) 98da853ecaSopenharmony_ci { 99da853ecaSopenharmony_ci while (runningFlag.load()) { 100da853ecaSopenharmony_ci int32_t outputIndex = encoderDemo->NativeGetOutputIndex(); 101da853ecaSopenharmony_ci OH_AVErrCode ret = encoderDemo->NativeFreeOutputData(handle, outputIndex); 102da853ecaSopenharmony_ci cout << "FreeOutputData return: " << ret << endl; 103da853ecaSopenharmony_ci } 104da853ecaSopenharmony_ci } 105da853ecaSopenharmony_ci} 106da853ecaSopenharmony_ci 107da853ecaSopenharmony_ci 108da853ecaSopenharmony_ci/** 109da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_FUZZ_001 110da853ecaSopenharmony_ci * @tc.name : OH_AudioEncoder_CreateByMime 111da853ecaSopenharmony_ci * @tc.desc : Fuzz test 112da853ecaSopenharmony_ci */ 113da853ecaSopenharmony_ciHWTEST_F(NativeFuzzTest, SUB_MULTIMEDIA_AUDIO_ENCODER_FUZZ_001, TestSize.Level2) 114da853ecaSopenharmony_ci{ 115da853ecaSopenharmony_ci srand(time(nullptr) * 10); 116da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 117da853ecaSopenharmony_ci 118da853ecaSopenharmony_ci OH_AVCodec* handle = nullptr; 119da853ecaSopenharmony_ci 120da853ecaSopenharmony_ci for (int i = 0; i < FUZZ_TEST_NUM; i++) { 121da853ecaSopenharmony_ci cout << "current run time is: " << i << endl; 122da853ecaSopenharmony_ci int32_t strLen = rand() % 1000; 123da853ecaSopenharmony_ci string randStr = rand_str(strLen); 124da853ecaSopenharmony_ci handle = encoderDemo->NativeCreateByMime(randStr.c_str()); 125da853ecaSopenharmony_ci if (handle != nullptr) { 126da853ecaSopenharmony_ci encoderDemo->NativeDestroy(handle); 127da853ecaSopenharmony_ci handle = nullptr; 128da853ecaSopenharmony_ci } 129da853ecaSopenharmony_ci } 130da853ecaSopenharmony_ci delete encoderDemo; 131da853ecaSopenharmony_ci} 132da853ecaSopenharmony_ci 133da853ecaSopenharmony_ci 134da853ecaSopenharmony_ci/** 135da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_FUZZ_002 136da853ecaSopenharmony_ci * @tc.name : OH_AudioEncoder_CreateByName 137da853ecaSopenharmony_ci * @tc.desc : Fuzz test 138da853ecaSopenharmony_ci */ 139da853ecaSopenharmony_ciHWTEST_F(NativeFuzzTest, SUB_MULTIMEDIA_AUDIO_ENCODER_FUZZ_002, TestSize.Level2) 140da853ecaSopenharmony_ci{ 141da853ecaSopenharmony_ci srand(time(nullptr) * 10); 142da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 143da853ecaSopenharmony_ci 144da853ecaSopenharmony_ci OH_AVCodec* handle = nullptr; 145da853ecaSopenharmony_ci 146da853ecaSopenharmony_ci for (int i = 0; i < FUZZ_TEST_NUM; i++) { 147da853ecaSopenharmony_ci cout << "current run time is: " << i << endl; 148da853ecaSopenharmony_ci int32_t strLen = rand() % 1000; 149da853ecaSopenharmony_ci string randStr = rand_str(strLen); 150da853ecaSopenharmony_ci handle = encoderDemo->NativeCreateByName(randStr.c_str()); 151da853ecaSopenharmony_ci if (handle != nullptr) { 152da853ecaSopenharmony_ci encoderDemo->NativeDestroy(handle); 153da853ecaSopenharmony_ci handle = nullptr; 154da853ecaSopenharmony_ci } 155da853ecaSopenharmony_ci } 156da853ecaSopenharmony_ci delete encoderDemo; 157da853ecaSopenharmony_ci} 158da853ecaSopenharmony_ci 159da853ecaSopenharmony_ci 160da853ecaSopenharmony_ci/** 161da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_FUZZ_003 162da853ecaSopenharmony_ci * @tc.name : OH_AudioEncoder_Configure 163da853ecaSopenharmony_ci * @tc.desc : Fuzz test 164da853ecaSopenharmony_ci */ 165da853ecaSopenharmony_ciHWTEST_F(NativeFuzzTest, SUB_MULTIMEDIA_AUDIO_ENCODER_FUZZ_003, TestSize.Level2) 166da853ecaSopenharmony_ci{ 167da853ecaSopenharmony_ci srand(time(nullptr) * 10); 168da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 169da853ecaSopenharmony_ci 170da853ecaSopenharmony_ci OH_AVCodec* handle = encoderDemo->NativeCreateByName("OH.Media.Codec.Encoder.Audio.AAC"); 171da853ecaSopenharmony_ci struct OH_AVCodecAsyncCallback cb = { &OnError, &OnOutputFormatChanged, &OnInputBufferAvailable, 172da853ecaSopenharmony_ci &OnOutputBufferAvailable }; 173da853ecaSopenharmony_ci encoderDemo->NativeSetCallback(handle, cb); 174da853ecaSopenharmony_ci 175da853ecaSopenharmony_ci for (int i = 0; i < FUZZ_TEST_NUM; i++) { 176da853ecaSopenharmony_ci cout << "current run time is: " << i << endl; 177da853ecaSopenharmony_ci 178da853ecaSopenharmony_ci int32_t channel = getIntRand(); 179da853ecaSopenharmony_ci int32_t sampleRate = getIntRand(); 180da853ecaSopenharmony_ci int32_t codedSample = getIntRand(); 181da853ecaSopenharmony_ci int32_t bitrate = getIntRand(); 182da853ecaSopenharmony_ci int32_t layout = getIntRand(); 183da853ecaSopenharmony_ci 184da853ecaSopenharmony_ci OH_AVFormat* format = OH_AVFormat_Create(); 185da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, channel); 186da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, sampleRate); 187da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITS_PER_CODED_SAMPLE, codedSample); 188da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, codedSample); 189da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, layout); 190da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, 1); 191da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_BITRATE, bitrate); 192da853ecaSopenharmony_ci 193da853ecaSopenharmony_ci cout << "OH_MD_KEY_AUD_CHANNEL_COUNT is: " << channel << ", OH_MD_KEY_AUD_SAMPLE_RATE is: " << 194da853ecaSopenharmony_ci sampleRate << endl; 195da853ecaSopenharmony_ci cout << "bits_per_coded_sample is: " << codedSample << ", OH_MD_KEY_BITRATE is: " << bitrate << endl; 196da853ecaSopenharmony_ci 197da853ecaSopenharmony_ci OH_AVErrCode ret = encoderDemo->NativeConfigure(handle, format); 198da853ecaSopenharmony_ci cout << "Configure return: " << ret << endl; 199da853ecaSopenharmony_ci 200da853ecaSopenharmony_ci encoderDemo->NativeReset(handle); 201da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 202da853ecaSopenharmony_ci } 203da853ecaSopenharmony_ci encoderDemo->NativeDestroy(handle); 204da853ecaSopenharmony_ci delete encoderDemo; 205da853ecaSopenharmony_ci} 206da853ecaSopenharmony_ci 207da853ecaSopenharmony_ci 208da853ecaSopenharmony_ci/** 209da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_FUZZ_004 210da853ecaSopenharmony_ci * @tc.name : OH_AudioEncoder_SetParameter 211da853ecaSopenharmony_ci * @tc.desc : Fuzz test 212da853ecaSopenharmony_ci */ 213da853ecaSopenharmony_ciHWTEST_F(NativeFuzzTest, SUB_MULTIMEDIA_AUDIO_ENCODER_FUZZ_004, TestSize.Level2) 214da853ecaSopenharmony_ci{ 215da853ecaSopenharmony_ci srand(time(nullptr) * 10); 216da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 217da853ecaSopenharmony_ci 218da853ecaSopenharmony_ci OH_AVCodec* handle = encoderDemo->NativeCreateByName("OH.Media.Codec.Encoder.Audio.AAC"); 219da853ecaSopenharmony_ci struct OH_AVCodecAsyncCallback cb = { &OnError, &OnOutputFormatChanged, &OnInputBufferAvailable, 220da853ecaSopenharmony_ci &OnOutputBufferAvailable}; 221da853ecaSopenharmony_ci encoderDemo->NativeSetCallback(handle, cb); 222da853ecaSopenharmony_ci 223da853ecaSopenharmony_ci OH_AVFormat* format = OH_AVFormat_Create(); 224da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, 2); 225da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, 44100); 226da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITS_PER_CODED_SAMPLE, OH_BitsPerSample::SAMPLE_F32P); 227da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, OH_BitsPerSample::SAMPLE_F32P); 228da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, STEREO); 229da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, 1); 230da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_BITRATE, 169000); 231da853ecaSopenharmony_ci 232da853ecaSopenharmony_ci OH_AVErrCode ret = encoderDemo->NativeConfigure(handle, format); 233da853ecaSopenharmony_ci cout << "Configure return: " << ret << endl; 234da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 235da853ecaSopenharmony_ci 236da853ecaSopenharmony_ci ret = encoderDemo->NativePrepare(handle); 237da853ecaSopenharmony_ci cout << "Prepare return: " << ret << endl; 238da853ecaSopenharmony_ci 239da853ecaSopenharmony_ci ret = encoderDemo->NativeStart(handle); 240da853ecaSopenharmony_ci cout << "Start return: " << ret << endl; 241da853ecaSopenharmony_ci 242da853ecaSopenharmony_ci for (int i = 0; i < FUZZ_TEST_NUM; i++) { 243da853ecaSopenharmony_ci cout << "current run time is: " << i << endl; 244da853ecaSopenharmony_ci 245da853ecaSopenharmony_ci int32_t channel = getIntRand(); 246da853ecaSopenharmony_ci int32_t sampleRate = getIntRand(); 247da853ecaSopenharmony_ci int32_t codedSample = getIntRand(); 248da853ecaSopenharmony_ci int32_t bitrate = getIntRand(); 249da853ecaSopenharmony_ci int32_t layout = getIntRand(); 250da853ecaSopenharmony_ci 251da853ecaSopenharmony_ci format = OH_AVFormat_Create(); 252da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, channel); 253da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, sampleRate); 254da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITS_PER_CODED_SAMPLE, codedSample); 255da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, codedSample); 256da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, layout); 257da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, 1); 258da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_BITRATE, bitrate); 259da853ecaSopenharmony_ci 260da853ecaSopenharmony_ci cout << "OH_MD_KEY_AUD_CHANNEL_COUNT is: " << channel << ", OH_MD_KEY_AUD_SAMPLE_RATE is: " << 261da853ecaSopenharmony_ci sampleRate << endl; 262da853ecaSopenharmony_ci cout << "bits_per_coded_sample is: " << codedSample << ", OH_MD_KEY_BITRATE is: " << bitrate << endl; 263da853ecaSopenharmony_ci 264da853ecaSopenharmony_ci ret = encoderDemo->NativeSetParameter(handle, format); 265da853ecaSopenharmony_ci cout << "SetParameter return: " << ret << endl; 266da853ecaSopenharmony_ci 267da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 268da853ecaSopenharmony_ci } 269da853ecaSopenharmony_ci encoderDemo->NativeDestroy(handle); 270da853ecaSopenharmony_ci delete encoderDemo; 271da853ecaSopenharmony_ci} 272da853ecaSopenharmony_ci 273da853ecaSopenharmony_ci 274da853ecaSopenharmony_ci/** 275da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_FUZZ_005 276da853ecaSopenharmony_ci * @tc.name : OH_AudioEncoder_PushInputData 277da853ecaSopenharmony_ci * @tc.desc : Fuzz test 278da853ecaSopenharmony_ci */ 279da853ecaSopenharmony_ciHWTEST_F(NativeFuzzTest, SUB_MULTIMEDIA_AUDIO_ENCODER_FUZZ_005, TestSize.Level2) 280da853ecaSopenharmony_ci{ 281da853ecaSopenharmony_ci srand(time(nullptr) * 10); 282da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 283da853ecaSopenharmony_ci 284da853ecaSopenharmony_ci OH_AVCodec* handle = encoderDemo->NativeCreateByName("OH.Media.Codec.Encoder.Audio.AAC"); 285da853ecaSopenharmony_ci struct OH_AVCodecAsyncCallback cb = { &OnError, &OnOutputFormatChanged, &OnInputBufferAvailable, 286da853ecaSopenharmony_ci &OnOutputBufferAvailable}; 287da853ecaSopenharmony_ci encoderDemo->NativeSetCallback(handle, cb); 288da853ecaSopenharmony_ci 289da853ecaSopenharmony_ci OH_AVFormat* format = OH_AVFormat_Create(); 290da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, 2); 291da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, 44100); 292da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITS_PER_CODED_SAMPLE, OH_BitsPerSample::SAMPLE_F32P); 293da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, OH_BitsPerSample::SAMPLE_F32P); 294da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, STEREO); 295da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, 1); 296da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_BITRATE, 169000); 297da853ecaSopenharmony_ci 298da853ecaSopenharmony_ci OH_AVErrCode ret = encoderDemo->NativeConfigure(handle, format); 299da853ecaSopenharmony_ci cout << "Configure return: " << ret << endl; 300da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 301da853ecaSopenharmony_ci 302da853ecaSopenharmony_ci ret = encoderDemo->NativePrepare(handle); 303da853ecaSopenharmony_ci cout << "Prepare return: " << ret << endl; 304da853ecaSopenharmony_ci 305da853ecaSopenharmony_ci ret = encoderDemo->NativeStart(handle); 306da853ecaSopenharmony_ci cout << "Start return: " << ret << endl; 307da853ecaSopenharmony_ci 308da853ecaSopenharmony_ci for (int i = 0; i < FUZZ_TEST_NUM; i++) { 309da853ecaSopenharmony_ci int32_t index = getIntRand(); 310da853ecaSopenharmony_ci 311da853ecaSopenharmony_ci OH_AVCodecBufferAttr info; 312da853ecaSopenharmony_ci info.size = getIntRand(); 313da853ecaSopenharmony_ci info.offset = getIntRand(); 314da853ecaSopenharmony_ci info.pts = getIntRand(); 315da853ecaSopenharmony_ci info.flags = getIntRand(); 316da853ecaSopenharmony_ci 317da853ecaSopenharmony_ci cout << "index is: " << index << ", info.size is: " << info.size << endl; 318da853ecaSopenharmony_ci cout << "info.offset is: " << info.offset << ", info.pts is: " << info.pts << endl; 319da853ecaSopenharmony_ci cout << "info.flags is: " << info.flags << endl; 320da853ecaSopenharmony_ci 321da853ecaSopenharmony_ci ret = encoderDemo->NativePushInputData(handle, index, info); 322da853ecaSopenharmony_ci cout << "PushInputData return: " << ret << endl; 323da853ecaSopenharmony_ci } 324da853ecaSopenharmony_ci encoderDemo->NativeDestroy(handle); 325da853ecaSopenharmony_ci delete encoderDemo; 326da853ecaSopenharmony_ci} 327da853ecaSopenharmony_ci 328da853ecaSopenharmony_ci 329da853ecaSopenharmony_ci/** 330da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_FUZZ_006 331da853ecaSopenharmony_ci * @tc.name : OH_AudioEncoder_FreeOutputData 332da853ecaSopenharmony_ci * @tc.desc : Fuzz test 333da853ecaSopenharmony_ci */ 334da853ecaSopenharmony_ciHWTEST_F(NativeFuzzTest, SUB_MULTIMEDIA_AUDIO_ENCODER_FUZZ_006, TestSize.Level2) 335da853ecaSopenharmony_ci{ 336da853ecaSopenharmony_ci srand(time(nullptr) * 10); 337da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 338da853ecaSopenharmony_ci 339da853ecaSopenharmony_ci OH_AVCodec* handle = encoderDemo->NativeCreateByName("OH.Media.Codec.Encoder.Audio.AAC"); 340da853ecaSopenharmony_ci struct OH_AVCodecAsyncCallback cb = { &OnError, &OnOutputFormatChanged, &OnInputBufferAvailable, 341da853ecaSopenharmony_ci &OnOutputBufferAvailable}; 342da853ecaSopenharmony_ci encoderDemo->NativeSetCallback(handle, cb); 343da853ecaSopenharmony_ci 344da853ecaSopenharmony_ci OH_AVFormat* format = OH_AVFormat_Create(); 345da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, 2); 346da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, 44100); 347da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITS_PER_CODED_SAMPLE, OH_BitsPerSample::SAMPLE_F32P); 348da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, OH_BitsPerSample::SAMPLE_F32P); 349da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, STEREO); 350da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, 1); 351da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_BITRATE, 169000); 352da853ecaSopenharmony_ci 353da853ecaSopenharmony_ci OH_AVErrCode ret = encoderDemo->NativeConfigure(handle, format); 354da853ecaSopenharmony_ci cout << "Configure return: " << ret << endl; 355da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 356da853ecaSopenharmony_ci 357da853ecaSopenharmony_ci ret = encoderDemo->NativePrepare(handle); 358da853ecaSopenharmony_ci cout << "Prepare return: " << ret << endl; 359da853ecaSopenharmony_ci 360da853ecaSopenharmony_ci ret = encoderDemo->NativeStart(handle); 361da853ecaSopenharmony_ci cout << "Start return: " << ret << endl; 362da853ecaSopenharmony_ci 363da853ecaSopenharmony_ci OH_AVCodecBufferAttr info; 364da853ecaSopenharmony_ci constexpr uint32_t INFO_SIZE = 100; 365da853ecaSopenharmony_ci info.size = INFO_SIZE; 366da853ecaSopenharmony_ci info.offset = 0; 367da853ecaSopenharmony_ci info.pts = 0; 368da853ecaSopenharmony_ci info.flags = AVCODEC_BUFFER_FLAGS_NONE; 369da853ecaSopenharmony_ci 370da853ecaSopenharmony_ci int32_t inputIndex = encoderDemo->NativeGetInputIndex(); 371da853ecaSopenharmony_ci 372da853ecaSopenharmony_ci for (int i = 0; i < FUZZ_TEST_NUM; i++) { 373da853ecaSopenharmony_ci int32_t outputIndex = getIntRand(); 374da853ecaSopenharmony_ci 375da853ecaSopenharmony_ci cout << "index is: " << outputIndex << endl; 376da853ecaSopenharmony_ci 377da853ecaSopenharmony_ci ret = encoderDemo->NativePushInputData(handle, inputIndex, info); 378da853ecaSopenharmony_ci cout << "PushInputData return: " << ret << endl; 379da853ecaSopenharmony_ci 380da853ecaSopenharmony_ci ret = encoderDemo->NativeFreeOutputData(handle, outputIndex); 381da853ecaSopenharmony_ci cout << "FreeOutputData return: " << ret << endl; 382da853ecaSopenharmony_ci } 383da853ecaSopenharmony_ci encoderDemo->NativeDestroy(handle); 384da853ecaSopenharmony_ci delete encoderDemo; 385da853ecaSopenharmony_ci} 386da853ecaSopenharmony_ci 387da853ecaSopenharmony_ci 388da853ecaSopenharmony_ci/** 389da853ecaSopenharmony_ci * @tc.number : SUB_MULTIMEDIA_AUDIO_ENCODER_FUZZ_007 390da853ecaSopenharmony_ci * @tc.name : input file fuzz 391da853ecaSopenharmony_ci * @tc.desc : Fuzz test 392da853ecaSopenharmony_ci */ 393da853ecaSopenharmony_ciHWTEST_F(NativeFuzzTest, SUB_MULTIMEDIA_AUDIO_ENCODER_FUZZ_007, TestSize.Level2) 394da853ecaSopenharmony_ci{ 395da853ecaSopenharmony_ci srand(time(nullptr) * 10); 396da853ecaSopenharmony_ci AudioEncoderDemo* encoderDemo = new AudioEncoderDemo(); 397da853ecaSopenharmony_ci 398da853ecaSopenharmony_ci OH_AVCodec* handle = encoderDemo->NativeCreateByName("OH.Media.Codec.Encoder.Audio.AAC"); 399da853ecaSopenharmony_ci struct OH_AVCodecAsyncCallback cb = { &OnError, &OnOutputFormatChanged, &OnInputBufferAvailable, 400da853ecaSopenharmony_ci &OnOutputBufferAvailable}; 401da853ecaSopenharmony_ci encoderDemo->NativeSetCallback(handle, cb); 402da853ecaSopenharmony_ci 403da853ecaSopenharmony_ci OH_AVFormat* format = OH_AVFormat_Create(); 404da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_CHANNEL_COUNT, 2); 405da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUD_SAMPLE_RATE, 44100); 406da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_BITS_PER_CODED_SAMPLE, OH_BitsPerSample::SAMPLE_F32P); 407da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AUDIO_SAMPLE_FORMAT, OH_BitsPerSample::SAMPLE_F32P); 408da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_CHANNEL_LAYOUT, STEREO); 409da853ecaSopenharmony_ci OH_AVFormat_SetIntValue(format, OH_MD_KEY_AAC_IS_ADTS, 1); 410da853ecaSopenharmony_ci OH_AVFormat_SetLongValue(format, OH_MD_KEY_BITRATE, 169000); 411da853ecaSopenharmony_ci 412da853ecaSopenharmony_ci OH_AVErrCode ret = encoderDemo->NativeConfigure(handle, format); 413da853ecaSopenharmony_ci cout << "Configure return: " << ret << endl; 414da853ecaSopenharmony_ci OH_AVFormat_Destroy(format); 415da853ecaSopenharmony_ci 416da853ecaSopenharmony_ci ret = encoderDemo->NativePrepare(handle); 417da853ecaSopenharmony_ci cout << "Prepare return: " << ret << endl; 418da853ecaSopenharmony_ci 419da853ecaSopenharmony_ci ret = encoderDemo->NativeStart(handle); 420da853ecaSopenharmony_ci cout << "Start return: " << ret << endl; 421da853ecaSopenharmony_ci 422da853ecaSopenharmony_ci vector<thread> threadVec; 423da853ecaSopenharmony_ci threadVec.push_back(thread(inputFunc, encoderDemo, handle)); 424da853ecaSopenharmony_ci threadVec.push_back(thread(outputFunc, encoderDemo, handle)); 425da853ecaSopenharmony_ci for (uint32_t i = 0; i < threadVec.size(); i++) 426da853ecaSopenharmony_ci { 427da853ecaSopenharmony_ci threadVec[i].join(); 428da853ecaSopenharmony_ci } 429da853ecaSopenharmony_ci 430da853ecaSopenharmony_ci encoderDemo->NativeDestroy(handle); 431da853ecaSopenharmony_ci delete encoderDemo; 432da853ecaSopenharmony_ci}