]> git.sesse.net Git - ffmpeg/blobdiff - libavfilter/vf_tinterlace.c
Merge remote-tracking branch 'qatar/master'
[ffmpeg] / libavfilter / vf_tinterlace.c
index 8f9dc004fc6a50a7742f7f9d74a846744cc7995e..5b03b81bf1ac035ef1a8d68522209a90d096a95c 100644 (file)
@@ -26,6 +26,7 @@
  */
 
 #include "libavutil/imgutils.h"
+#include "libavutil/avassert.h"
 #include "avfilter.h"
 #include "internal.h"
 
@@ -80,7 +81,7 @@ static int query_formats(AVFilterContext *ctx)
     return 0;
 }
 
-static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque)
+static av_cold int init(AVFilterContext *ctx, const char *args)
 {
     TInterlaceContext *tinterlace = ctx->priv;
     int i;
@@ -154,7 +155,7 @@ static int config_out_props(AVFilterLink *outlink)
                    tinterlace->black_linesize[i] * h);
         }
     }
-    av_log(ctx, AV_LOG_INFO, "mode:%s h:%d -> h:%d\n",
+    av_log(ctx, AV_LOG_VERBOSE, "mode:%s h:%d -> h:%d\n",
            tinterlace_mode_str[tinterlace->mode], inlink->h, outlink->h);
 
     return 0;
@@ -197,7 +198,7 @@ void copy_picture_field(uint8_t *dst[4], int dst_linesize[4],
     }
 }
 
-static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref)
+static int start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref)
 {
     AVFilterContext *ctx = inlink->dst;
     TInterlaceContext *tinterlace = ctx->priv;
@@ -205,9 +206,10 @@ static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref)
     avfilter_unref_buffer(tinterlace->cur);
     tinterlace->cur  = tinterlace->next;
     tinterlace->next = picref;
+    return 0;
 }
 
-static void end_frame(AVFilterLink *inlink)
+static int end_frame(AVFilterLink *inlink)
 {
     AVFilterContext *ctx = inlink->dst;
     AVFilterLink *outlink = ctx->outputs[0];
@@ -219,7 +221,7 @@ static void end_frame(AVFilterLink *inlink)
 
     /* we need at least two frames */
     if (!tinterlace->cur)
-        return;
+        return 0;
 
     switch (tinterlace->mode) {
     case MODE_MERGE: /* move the odd frame into the upper field of the new image, even into
@@ -292,7 +294,7 @@ static void end_frame(AVFilterLink *inlink)
         break;
     case MODE_INTERLACEX2: /* re-interlace preserving image height, double frame rate */
         /* output current frame first */
-        out = avfilter_ref_buffer(cur, AV_PERM_READ);
+        out = avfilter_ref_buffer(cur, ~AV_PERM_WRITE);
         out->video->interlaced = 1;
 
         ff_start_frame(outlink, out);
@@ -323,6 +325,8 @@ static void end_frame(AVFilterLink *inlink)
     ff_end_frame(outlink);
 
     tinterlace->frame++;
+
+    return 0;
 }
 
 static int poll_frame(AVFilterLink *outlink)
@@ -334,11 +338,11 @@ static int poll_frame(AVFilterLink *outlink)
     val = ff_poll_frame(inlink);
 
     if (val == 1 && !tinterlace->next) {
-        if ((ret = avfilter_request_frame(inlink)) < 0)
+        if ((ret = ff_request_frame(inlink)) < 0)
             return ret;
         val = ff_poll_frame(inlink);
     }
-    assert(tinterlace->next);
+    av_assert0(tinterlace->next);
 
     return val;
 }
@@ -351,14 +355,14 @@ static int request_frame(AVFilterLink *outlink)
     do {
         int ret;
 
-        if ((ret = avfilter_request_frame(inlink)) < 0)
+        if ((ret = ff_request_frame(inlink)) < 0)
             return ret;
     } while (!tinterlace->cur);
 
     return 0;
 }
 
-static void null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir) { }
+static int null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir) { return 0; }
 
 AVFilter avfilter_vf_tinterlace = {
     .name          = "tinterlace",