1/* 2 * Copyright (c) 2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15#include <cstddef> 16#include <cstdint> 17 18#include "native_avcodec_videoencoder.h" 19#include "native_averrors.h" 20#include "native_avcodec_base.h" 21#include "native_avcapability.h" 22#include "videoenc_api11_sample.h" 23using namespace std; 24using namespace OHOS; 25using namespace OHOS::Media; 26#define FUZZ_PROJECT_NAME "encoderapi11_fuzzer" 27 28void RunNormalEncoder() 29{ 30 auto vEncSample = make_unique<VEncAPI11FuzzSample>(); 31 vEncSample->CreateVideoEncoder(); 32 vEncSample->SetVideoEncoderCallback(); 33 vEncSample->ConfigureVideoEncoder(); 34 vEncSample->StartVideoEncoder(); 35 vEncSample->WaitForEOS(); 36 37 auto vEncSampleSurf = make_unique<VEncAPI11FuzzSample>(); 38 vEncSample->surfInput = true; 39 vEncSampleSurf->CreateVideoEncoder(); 40 vEncSampleSurf->SetVideoEncoderCallback(); 41 vEncSampleSurf->ConfigureVideoEncoder(); 42 vEncSampleSurf->StartVideoEncoder(); 43 vEncSampleSurf->WaitForEOS(); 44} 45 46bool g_needRunNormalEncoder = true; 47namespace OHOS { 48bool EncoderAPI11FuzzTest(const uint8_t *data, size_t size) 49{ 50 if (size < sizeof(int32_t)) { 51 return false; 52 } 53 if (g_needRunNormalEncoder) { 54 g_needRunNormalEncoder = false; 55 RunNormalEncoder(); 56 } 57 bool result = false; 58 int32_t data2 = *reinterpret_cast<const int32_t *>(data); 59 VEncAPI11FuzzSample *vEncSample = new VEncAPI11FuzzSample(); 60 61 vEncSample->CreateVideoEncoder(); 62 vEncSample->SetVideoEncoderCallback(); 63 vEncSample->fuzzMode = true; 64 vEncSample->ConfigureVideoEncoderFuzz(data2); 65 vEncSample->StartVideoEncoder(); 66 vEncSample->SetParameter(data2); 67 vEncSample->WaitForEOS(); 68 delete vEncSample; 69 70 vEncSample = new VEncAPI11FuzzSample(); 71 vEncSample->CreateVideoEncoder(); 72 vEncSample->SetVideoEncoderCallback(); 73 vEncSample->surfInput = true; 74 vEncSample->ConfigureVideoEncoderFuzz(data2); 75 vEncSample->StartVideoEncoder(); 76 vEncSample->SetParameter(data2); 77 vEncSample->WaitForEOS(); 78 delete vEncSample; 79 80 return result; 81} 82} // namespace OHOS 83 84/* Fuzzer entry point */ 85extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) 86{ 87 /* Run your code on data */ 88 OHOS::EncoderAPI11FuzzTest(data, size); 89 return 0; 90} 91