1da853ecaSopenharmony_ci/*
2da853ecaSopenharmony_ci * Copyright (C) 2024 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#include <atomic>
16da853ecaSopenharmony_ci#include <iostream>
17da853ecaSopenharmony_ci#include <fstream>
18da853ecaSopenharmony_ci#include <queue>
19da853ecaSopenharmony_ci#include <string>
20da853ecaSopenharmony_ci#include <thread>
21da853ecaSopenharmony_ci#include "audio_muxer_demo.h"
22da853ecaSopenharmony_ci#define FUZZ_PROJECT_NAME "audiomuxer_fuzzer"
23da853ecaSopenharmony_ci
24da853ecaSopenharmony_ciusing namespace std;
25da853ecaSopenharmony_ciusing namespace OHOS::MediaAVCodec;
26da853ecaSopenharmony_ciusing namespace OHOS;
27da853ecaSopenharmony_ciusing namespace OHOS::MediaAVCodec::AudioBufferDemo;
28da853ecaSopenharmony_ci
29da853ecaSopenharmony_cinamespace OHOS {
30da853ecaSopenharmony_ci
31da853ecaSopenharmony_cibool AudioMuxerAACFuzzTest(const uint8_t *data, size_t size)
32da853ecaSopenharmony_ci{
33da853ecaSopenharmony_ci    if (size < sizeof(int64_t)) {
34da853ecaSopenharmony_ci        return false;
35da853ecaSopenharmony_ci    }
36da853ecaSopenharmony_ci    // FUZZ aac
37da853ecaSopenharmony_ci    AVMuxerDemo* aMuxerBufferDemo = new AVMuxerDemo();
38da853ecaSopenharmony_ci    aMuxerBufferDemo->InitFile("aac");
39da853ecaSopenharmony_ci    auto res = aMuxerBufferDemo->RunCase(data, size);
40da853ecaSopenharmony_ci    delete aMuxerBufferDemo;
41da853ecaSopenharmony_ci    return res;
42da853ecaSopenharmony_ci}
43da853ecaSopenharmony_ci
44da853ecaSopenharmony_cibool AudioMuxerMPEG3FuzzTest(const uint8_t *data, size_t size)
45da853ecaSopenharmony_ci{
46da853ecaSopenharmony_ci    if (size < sizeof(int64_t)) {
47da853ecaSopenharmony_ci        return false;
48da853ecaSopenharmony_ci    }
49da853ecaSopenharmony_ci    // FUZZ mpeg3
50da853ecaSopenharmony_ci    AVMuxerDemo* aMuxerBufferDemo = new AVMuxerDemo();
51da853ecaSopenharmony_ci    aMuxerBufferDemo->InitFile("mpeg3");
52da853ecaSopenharmony_ci    auto res = aMuxerBufferDemo->RunCase(data, size);
53da853ecaSopenharmony_ci    delete aMuxerBufferDemo;
54da853ecaSopenharmony_ci    return res;
55da853ecaSopenharmony_ci}
56da853ecaSopenharmony_ci
57da853ecaSopenharmony_cibool AudioMuxerAMRNBFuzzTest(const uint8_t *data, size_t size)
58da853ecaSopenharmony_ci{
59da853ecaSopenharmony_ci    if (size < sizeof(int64_t)) {
60da853ecaSopenharmony_ci        return false;
61da853ecaSopenharmony_ci    }
62da853ecaSopenharmony_ci    // FUZZ amrnb
63da853ecaSopenharmony_ci    AVMuxerDemo* aMuxerBufferDemo = new AVMuxerDemo();
64da853ecaSopenharmony_ci    aMuxerBufferDemo->InitFile("amrnb");
65da853ecaSopenharmony_ci    auto res = aMuxerBufferDemo->RunCase(data, size);
66da853ecaSopenharmony_ci    delete aMuxerBufferDemo;
67da853ecaSopenharmony_ci    return res;
68da853ecaSopenharmony_ci}
69da853ecaSopenharmony_ci
70da853ecaSopenharmony_cibool AudioMuxerAMRWBFuzzTest(const uint8_t *data, size_t size)
71da853ecaSopenharmony_ci{
72da853ecaSopenharmony_ci    if (size < sizeof(int64_t)) {
73da853ecaSopenharmony_ci        return false;
74da853ecaSopenharmony_ci    }
75da853ecaSopenharmony_ci    // FUZZ amrwb
76da853ecaSopenharmony_ci    AVMuxerDemo* aMuxerBufferDemo = new AVMuxerDemo();
77da853ecaSopenharmony_ci    aMuxerBufferDemo->InitFile("amrwb");
78da853ecaSopenharmony_ci    auto res = aMuxerBufferDemo->RunCase(data, size);
79da853ecaSopenharmony_ci    delete aMuxerBufferDemo;
80da853ecaSopenharmony_ci    return res;
81da853ecaSopenharmony_ci}
82da853ecaSopenharmony_ci
83da853ecaSopenharmony_cibool AudioMuxerJPGFuzzTest(const uint8_t *data, size_t size)
84da853ecaSopenharmony_ci{
85da853ecaSopenharmony_ci    if (size < sizeof(int64_t)) {
86da853ecaSopenharmony_ci        return false;
87da853ecaSopenharmony_ci    }
88da853ecaSopenharmony_ci    // FUZZ jpg
89da853ecaSopenharmony_ci    AVMuxerDemo* aMuxerBufferDemo = new AVMuxerDemo();
90da853ecaSopenharmony_ci    aMuxerBufferDemo->InitFile("jpg");
91da853ecaSopenharmony_ci    auto res = aMuxerBufferDemo->RunCase(data, size);
92da853ecaSopenharmony_ci    delete aMuxerBufferDemo;
93da853ecaSopenharmony_ci    return res;
94da853ecaSopenharmony_ci}
95da853ecaSopenharmony_ci
96da853ecaSopenharmony_ci}
97da853ecaSopenharmony_ci
98da853ecaSopenharmony_ci/* Fuzzer entry point */
99da853ecaSopenharmony_ciextern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
100da853ecaSopenharmony_ci{
101da853ecaSopenharmony_ci    /* Run your code on data */
102da853ecaSopenharmony_ci    OHOS::AudioMuxerAACFuzzTest(data, size);
103da853ecaSopenharmony_ci    OHOS::AudioMuxerMPEG3FuzzTest(data, size);
104da853ecaSopenharmony_ci    OHOS::AudioMuxerAMRNBFuzzTest(data, size);
105da853ecaSopenharmony_ci    OHOS::AudioMuxerAMRWBFuzzTest(data, size);
106da853ecaSopenharmony_ci    OHOS::AudioMuxerJPGFuzzTest(data, size);
107da853ecaSopenharmony_ci    return 0;
108da853ecaSopenharmony_ci}