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}