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}