Hi, I’ll try to clear some things up. Here it goes:
1. About the copyright thing, kierank didn’t say to add him to copyright section and I’m not sure whether its his code, so I left it as it is. 2. I got instructions not to hook this up to build system just yet, I think one of the reasons is that we’re not sure whether compile this with afl instrumentation (afl-clang-fast command), or just normally. This is something that will be clear later. 3. About failure checks, I guess I’ll add them in next version of the patch. Also, sorry for ignoring previous email, I discussed the review of my previous patch with kierank so I thought it was enough. —— Paweł > Wiadomość napisana przez Michael Niedermayer <mich...@niedermayer.cc> w dniu > 17.04.2016, o godz. 04:03: > > Hi > > On Sat, Apr 16, 2016 at 12:12:41AM +0200, Pawel Golinski wrote: >> There are some afl specific macros inside, >> to make the example usable with afl fuzzer. >> --- >> doc/examples/fffuzz.c | 370 >> ++++++++++++++++++++++++++++++++++++++++++++++++++ >> 1 file changed, 370 insertions(+) >> create mode 100644 doc/examples/fffuzz.c >> >> diff --git a/doc/examples/fffuzz.c b/doc/examples/fffuzz.c >> new file mode 100644 >> index 0000000..6672f42 >> --- /dev/null >> +++ b/doc/examples/fffuzz.c >> @@ -0,0 +1,370 @@ >> +/* >> + * Copyright (c) 2012 Stefano Sabatini >> + * Copyright (c) 2015 Andreas Cadhalpun > > there was a review comment about this, please do not ignore review > comments > for reference; >>>> <kierank> the first patch in the patchset is my patch so I can't review it >>>> would suggest to me that he should be listed in the Copyright too > > also when at this, please make sure the author metadata in the commits > is correct, i dont know who wrote what > > also the code is still not hooked up to the build system > > > [...] >> +/** >> + * @file >> + * Demuxing and decoding (a codec/format combination) example. >> + * >> + * This can be useful for fuzz testing. >> + * @example ddcf.c >> + */ >> + >> +#include <libavutil/avstring.h> >> +#include <libavutil/imgutils.h> >> +#include <libavutil/samplefmt.h> >> +#include <libavutil/timestamp.h> >> +#include <libavformat/avformat.h> >> + >> +/* needed for decoding video */ >> +static int width, height; >> +static enum AVPixelFormat pix_fmt; >> +static uint8_t *video_dst_data[4] = {NULL}; >> +static int video_dst_linesize[4]; >> +static int video_dst_bufsize; >> + >> +static int decode_packet(AVCodecContext *dec_ctx, FILE *dst_file, AVFrame >> *frame, int *got_frame, int *frame_count, AVPacket *pkt) >> +{ >> + int ret = -1; >> + *got_frame = 0; >> + AVSubtitle sub; >> + unsigned i, j, k, l; >> + >> + if (dec_ctx->codec_type == AVMEDIA_TYPE_VIDEO) { >> + /* decode video frame */ >> + ret = avcodec_decode_video2(dec_ctx, frame, got_frame, pkt); >> + if (ret < 0) { >> + fprintf(stderr, "Error decoding video frame (%s)\n", >> av_err2str(ret)); >> + return ret; >> + } >> + >> + if (*got_frame) { >> + >> + if (frame->width != width || frame->height != height || >> + frame->format != pix_fmt) { >> + fprintf(stderr, "Error: input video width/height/format >> changed:\n" >> + "old: width = %d, height = %d, format = %s\n" >> + "new: width = %d, height = %d, format = %s\n", >> + width, height, av_get_pix_fmt_name(pix_fmt), >> + dec_ctx->width, dec_ctx->height, >> + av_get_pix_fmt_name(dec_ctx->pix_fmt)); >> + return -1; >> + } >> + >> + printf("video_frame n:%d coded_n:%d pts:%s\n", >> + *frame_count, frame->coded_picture_number, >> + av_ts2timestr(frame->pts, &dec_ctx->time_base)); >> + >> + /* copy decoded frame to destination buffer: >> + * this is required since rawvideo expects non aligned data */ >> + av_image_copy(video_dst_data, video_dst_linesize, >> + (const uint8_t **)(frame->data), frame->linesize, >> + pix_fmt, width, height); >> + *frame_count += 1; >> + >> + /* write to rawvideo file */ >> + fwrite(video_dst_data[0], 1, video_dst_bufsize, dst_file); >> + } >> + } else if (dec_ctx->codec_type == AVMEDIA_TYPE_AUDIO) { >> + /* decode audio frame */ >> + ret = avcodec_decode_audio4(dec_ctx, frame, got_frame, pkt); >> + if (ret < 0) { >> + fprintf(stderr, "Error decoding audio frame (%s)\n", >> av_err2str(ret)); >> + return ret; >> + } > >> + /* Some audio decoders decode only part of the packet, and have to >> be >> + * called again with the remainder of the packet data. >> + * Sample: fate-suite/lossless-audio/luckynight-partial.shn >> + * Also, some decoders might over-read the packet. */ >> + ret = FFMIN(ret, pkt->size); > > overreads should not be ignored silently > > > [...] >> +static int open_codec_context(AVCodecContext **dec_ctx, AVFormatContext >> *fmt_ctx, char *codec) >> +{ >> + int ret = -1; >> + AVCodec *dec = avcodec_find_decoder_by_name(codec); >> + AVDictionary *opts = NULL; >> + unsigned int i; >> + >> + for (i = 0; i < fmt_ctx->nb_streams && i < INT_MAX; i += 1) { >> + if (fmt_ctx->streams[i]->codec) { >> + if (!dec || (fmt_ctx->streams[i]->codec->codec_id == dec->id)) { >> + *dec_ctx = fmt_ctx->streams[i]->codec; >> + ret = 0; >> + break; >> + } >> + } >> + } >> + >> + if (ret < 0) { >> + fprintf(stderr, "Could not find stream\n"); >> + } else { >> + /* find decoder for the stream */ >> + if (!dec) >> + dec = avcodec_find_decoder((*dec_ctx)->codec_id); >> + if (!dec) { >> + fprintf(stderr, "Failed to find decoder\n"); >> + return -1; >> + } >> + > >> + /* Init the decoders, with or without reference counting */ >> + av_dict_set(&opts, "refcounted_frames", "1", 0); >> + av_dict_set(&opts, "strict", "-2", 0); >> + av_dict_set(&opts, "codec_whitelist", codec, 0); >> + av_dict_set(&opts, "thread_type", "slice", 0); > > missing failure checks > > > [...] > -- > Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB > > Everything should be made as simple as possible, but not simpler. > -- Albert Einstein > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org <mailto:ffmpeg-devel@ffmpeg.org> > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel > <http://ffmpeg.org/mailman/listinfo/ffmpeg-devel> _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel