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