tools: Eliminate codec_type complexity from fuzzer

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
pull/202/merge
Michael Niedermayer 8 years ago
parent 7796f29065
commit a9b5b6a97f
  1. 11
      tools/Makefile
  2. 19
      tools/target_dec_fuzzer.c

@ -1,15 +1,8 @@
TOOLS = qt-faststart trasher uncoded_frame TOOLS = qt-faststart trasher uncoded_frame
TOOLS-$(CONFIG_ZLIB) += cws2fws TOOLS-$(CONFIG_ZLIB) += cws2fws
tools/target_dec_video_%_fuzzer.o: tools/target_dec_fuzzer.c tools/target_dec_%_fuzzer.o: tools/target_dec_fuzzer.c
$(COMPILE_C) -DFFMPEG_CODEC=AV_CODEC_ID_$* -DFUZZ_FFMPEG_VIDEO $(COMPILE_C) -DFFMPEG_CODEC=AV_CODEC_ID_$*
tools/target_dec_audio_%_fuzzer.o: tools/target_dec_fuzzer.c
$(COMPILE_C) -DFFMPEG_CODEC=AV_CODEC_ID_$* -DFUZZ_FFMPEG_AUDIO
tools/target_dec_subtitle_%_fuzzer.o: tools/target_dec_fuzzer.c
$(COMPILE_C) -DFFMPEG_CODEC=AV_CODEC_ID_$* -DFUZZ_FFMPEG_SUBTITLE
OBJDIRS += tools OBJDIRS += tools

@ -74,11 +74,6 @@ static AVCodec *AVCodecInitialize(enum AVCodecID codec_id)
return res; return res;
} }
#if defined(FUZZ_FFMPEG_VIDEO)
#define decode_handler avcodec_decode_video2
#elif defined(FUZZ_FFMPEG_AUDIO)
#define decode_handler avcodec_decode_audio4
#elif defined(FUZZ_FFMPEG_SUBTITLE)
static int subtitle_handler(AVCodecContext *avctx, void *frame, static int subtitle_handler(AVCodecContext *avctx, void *frame,
int *got_sub_ptr, AVPacket *avpkt) int *got_sub_ptr, AVPacket *avpkt)
{ {
@ -89,11 +84,6 @@ static int subtitle_handler(AVCodecContext *avctx, void *frame,
return ret; return ret;
} }
#define decode_handler subtitle_handler
#else
#error "Specify encoder type" // To catch mistakes
#endif
// Class to handle buffer allocation and resize for each frame // Class to handle buffer allocation and resize for each frame
typedef struct FuzzDataBuffer { typedef struct FuzzDataBuffer {
size_t size_; size_t size_;
@ -146,10 +136,19 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
const uint8_t *last = data; const uint8_t *last = data;
const uint8_t *end = data + size; const uint8_t *end = data + size;
uint32_t it = 0; uint32_t it = 0;
int (*decode_handler)(AVCodecContext *avctx, AVFrame *picture,
int *got_picture_ptr,
const AVPacket *avpkt) = NULL;
if (!c) if (!c)
c = AVCodecInitialize(FFMPEG_CODEC); // Done once. c = AVCodecInitialize(FFMPEG_CODEC); // Done once.
switch (c->type) {
case AVMEDIA_TYPE_AUDIO : decode_handler = avcodec_decode_audio4; break;
case AVMEDIA_TYPE_VIDEO : decode_handler = avcodec_decode_video2; break;
case AVMEDIA_TYPE_SUBTITLE: decode_handler = subtitle_handler ; break;
}
AVCodecContext* ctx = avcodec_alloc_context3(NULL); AVCodecContext* ctx = avcodec_alloc_context3(NULL);
if (!ctx) if (!ctx)
error("Failed memory allocation"); error("Failed memory allocation");

Loading…
Cancel
Save