]> git.sesse.net Git - ffmpeg/blobdiff - libavfilter/vf_thumbnail.c
lavfi/thumbnail: remove unecessary poll_frame() callback.
[ffmpeg] / libavfilter / vf_thumbnail.c
index 0d245d9dddbbce1008e567b28f53ca67b7c4c873..d214253d0d6554fc28763ff7239fdc3ebd1f6c3e 100644 (file)
@@ -33,7 +33,7 @@
 #define HIST_SIZE (3*256)
 
 struct thumb_frame {
-    AVFilterBufferRef *buf;     ///< cached frame
+    AVFrame *buf;               ///< cached frame
     int histogram[HIST_SIZE];   ///< RGB color distribution histogram of the frame
 };
 
@@ -86,14 +86,14 @@ static double frame_sum_square_err(const int *hist, const double *median)
     return sum_sq_err;
 }
 
-static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *frame)
+static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
 {
     int i, j, best_frame_idx = 0;
     double avg_hist[HIST_SIZE] = {0}, sq_err, min_sq_err = -1;
     AVFilterContext *ctx  = inlink->dst;
     ThumbContext *thumb   = ctx->priv;
     AVFilterLink *outlink = ctx->outputs[0];
-    AVFilterBufferRef *picref;
+    AVFrame *picref;
     int *hist = thumb->frames[thumb->n].histogram;
     const uint8_t *p = frame->data[0];
 
@@ -135,7 +135,7 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *frame)
         memset(thumb->frames[i].histogram, 0, sizeof(thumb->frames[i].histogram));
         if (i == best_frame_idx)
             continue;
-        avfilter_unref_bufferp(&thumb->frames[i].buf);
+        av_frame_unref(thumb->frames[i].buf);
     }
     thumb->n = 0;
 
@@ -152,7 +152,7 @@ static av_cold void uninit(AVFilterContext *ctx)
     int i;
     ThumbContext *thumb = ctx->priv;
     for (i = 0; i < thumb->n_frames && thumb->frames[i].buf; i++)
-        avfilter_unref_bufferp(&thumb->frames[i].buf);
+        av_frame_unref(thumb->frames[i].buf);
     av_freep(&thumb->frames);
 }
 
@@ -170,28 +170,6 @@ static int request_frame(AVFilterLink *link)
     return 0;
 }
 
-static int poll_frame(AVFilterLink *link)
-{
-    ThumbContext *thumb  = link->src->priv;
-    AVFilterLink *inlink = link->src->inputs[0];
-    int ret, available_frames = ff_poll_frame(inlink);
-
-    /* If the input link is not able to provide any frame, we can't do anything
-     * at the moment and thus have zero thumbnail available. */
-    if (!available_frames)
-        return 0;
-
-    /* Since at least one frame is available and the next frame will allow us
-     * to compute a thumbnail, we can return 1 frame. */
-    if (thumb->n == thumb->n_frames - 1)
-        return 1;
-
-    /* we have some frame(s) available in the input link, but not yet enough to
-     * output a thumbnail, so we request more */
-    ret = ff_request_frame(inlink);
-    return ret < 0 ? ret : 0;
-}
-
 static int query_formats(AVFilterContext *ctx)
 {
     static const enum AVPixelFormat pix_fmts[] = {
@@ -207,7 +185,6 @@ static const AVFilterPad thumbnail_inputs[] = {
         .name             = "default",
         .type             = AVMEDIA_TYPE_VIDEO,
         .get_video_buffer = ff_null_get_video_buffer,
-        .min_perms        = AV_PERM_PRESERVE,
         .filter_frame     = filter_frame,
     },
     { NULL }
@@ -218,7 +195,6 @@ static const AVFilterPad thumbnail_outputs[] = {
         .name          = "default",
         .type          = AVMEDIA_TYPE_VIDEO,
         .request_frame = request_frame,
-        .poll_frame    = poll_frame,
     },
     { NULL }
 };