X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavfilter%2Fvf_thumbnail.c;h=8e73de920f9bed18c3b7ad772e8298786a1ffdac;hb=7d1918affee4bc70fb8ac139ba9235e7fed2979b;hp=45238b6a77140176ec7477cd7be61532fcc65b3a;hpb=5916bc46581230c68c946c0b4733cce381eddcbd;p=ffmpeg diff --git a/libavfilter/vf_thumbnail.c b/libavfilter/vf_thumbnail.c index 45238b6a771..8e73de920f9 100644 --- a/libavfilter/vf_thumbnail.c +++ b/libavfilter/vf_thumbnail.c @@ -43,7 +43,7 @@ typedef struct { struct thumb_frame *frames; ///< the n_frames frames } ThumbContext; -static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque) +static av_cold int init(AVFilterContext *ctx, const char *args) { ThumbContext *thumb = ctx->priv; @@ -64,11 +64,11 @@ static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque) "Allocation failure, try to lower the number of frames\n"); return AVERROR(ENOMEM); } - av_log(ctx, AV_LOG_INFO, "batch size: %d frames\n", thumb->n_frames); + av_log(ctx, AV_LOG_VERBOSE, "batch size: %d frames\n", thumb->n_frames); return 0; } -static void draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir) +static int draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir) { int i, j; AVFilterContext *ctx = inlink->dst; @@ -86,6 +86,7 @@ static void draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir) } p += picref->linesize[0]; } + return 0; } /** @@ -106,7 +107,7 @@ static double frame_sum_square_err(const int *hist, const double *median) return sum_sq_err; } -static void end_frame(AVFilterLink *inlink) +static int end_frame(AVFilterLink *inlink) { int i, j, best_frame_idx = 0; double avg_hist[HIST_SIZE] = {0}, sq_err, min_sq_err = -1; @@ -117,11 +118,12 @@ static void end_frame(AVFilterLink *inlink) // keep a reference of each frame thumb->frames[thumb->n].buf = inlink->cur_buf; + inlink->cur_buf = NULL; // no selection until the buffer of N frames is filled up if (thumb->n < thumb->n_frames - 1) { thumb->n++; - return; + return 0; } // average histogram of the N frames @@ -155,7 +157,7 @@ static void end_frame(AVFilterLink *inlink) ff_start_frame(outlink, picref); thumb->frames[best_frame_idx].buf = NULL; ff_draw_slice(outlink, 0, inlink->h, 1); - ff_end_frame(outlink); + return ff_end_frame(outlink); } static av_cold void uninit(AVFilterContext *ctx) @@ -169,7 +171,7 @@ static av_cold void uninit(AVFilterContext *ctx) av_freep(&thumb->frames); } -static void null_start_frame(AVFilterLink *link, AVFilterBufferRef *picref) { } +static int null_start_frame(AVFilterLink *link, AVFilterBufferRef *picref) { return 0; } static int request_frame(AVFilterLink *link) {