avfilter/vf_interlace: fix numerical options
authorThomas Mundt <tmundt75@gmail.com>
Thu, 23 Aug 2018 21:37:10 +0000 (23:37 +0200)
committerPaul B Mahol <onemda@gmail.com>
Fri, 7 Sep 2018 16:46:56 +0000 (18:46 +0200)
Regression since 9c01cdb94e24aaf50f867a0a5c42b097c17c42b1

Signed-off-by: Thomas Mundt <tmundt75@gmail.com>
libavfilter/tinterlace.h
libavfilter/vf_tinterlace.c

index b5c39aa..5bcb9a5 100644 (file)
@@ -34,8 +34,8 @@
 #include "avfilter.h"
 
 #define TINTERLACE_FLAG_VLPF 01
-#define TINTERLACE_FLAG_EXACT_TB 2
-#define TINTERLACE_FLAG_CVLPF 4
+#define TINTERLACE_FLAG_CVLPF 2
+#define TINTERLACE_FLAG_EXACT_TB 4
 
 enum TInterlaceMode {
     MODE_MERGE = 0,
@@ -49,6 +49,11 @@ enum TInterlaceMode {
     MODE_NB,
 };
 
+enum InterlaceScanMode {
+    MODE_TFF = 0,
+    MODE_BFF,
+};
+
 typedef struct TInterlaceContext {
     const AVClass *class;
     int mode;                   ///< TInterlaceMode, interlace mode selected
index 4f5c10d..22746eb 100644 (file)
@@ -60,10 +60,10 @@ static const AVOption tinterlace_options[] = {
 AVFILTER_DEFINE_CLASS(tinterlace);
 
 static const AVOption interlace_options[] = {
-   { "scan",              "scanning mode", OFFSET(mode), AV_OPT_TYPE_INT, {.i64=MODE_INTERLEAVE_TOP}, 0, MODE_NB-1, FLAGS, "mode"},
-   { "tff",               "top field first",                              0, AV_OPT_TYPE_CONST, {.i64=MODE_INTERLEAVE_TOP},    INT_MIN, INT_MAX, FLAGS, .unit = "mode" },
-   { "bff",               "bottom field first",                           0, AV_OPT_TYPE_CONST, {.i64=MODE_INTERLEAVE_BOTTOM}, INT_MIN, INT_MAX, FLAGS, .unit = "mode"},
-   { "lowpass",           "set vertical low-pass filter", OFFSET(flags), AV_OPT_TYPE_FLAGS,   {.i64 = TINTERLACE_FLAG_VLPF}, 0,INT_MAX, 0, "flags" },
+   { "scan",              "scanning mode", OFFSET(mode), AV_OPT_TYPE_INT, {.i64 = MODE_TFF}, 0, 1, FLAGS, "mode"},
+   { "tff",               "top field first",                              0, AV_OPT_TYPE_CONST, {.i64 = MODE_TFF}, INT_MIN, INT_MAX, FLAGS, .unit = "mode"},
+   { "bff",               "bottom field first",                           0, AV_OPT_TYPE_CONST, {.i64 = MODE_BFF}, INT_MIN, INT_MAX, FLAGS, .unit = "mode"},
+   { "lowpass",           "set vertical low-pass filter", OFFSET(flags), AV_OPT_TYPE_FLAGS,   {.i64 = TINTERLACE_FLAG_VLPF}, 0, 2, 0, "flags" },
    { "off",               "disable vertical low-pass filter",             0, AV_OPT_TYPE_CONST, {.i64 = 0}, INT_MIN, INT_MAX, FLAGS, "flags" },
    { "linear",            "linear vertical low-pass filter",              0, AV_OPT_TYPE_CONST, {.i64 = TINTERLACE_FLAG_VLPF}, INT_MIN, INT_MAX, FLAGS, "flags" },
    { "complex",           "complex vertical low-pass filter",             0, AV_OPT_TYPE_CONST, {.i64 = TINTERLACE_FLAG_CVLPF},INT_MIN, INT_MAX, FLAGS, "flags" },
@@ -511,6 +511,16 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *picref)
     return ret;
 }
 
+static int init_interlace(AVFilterContext *ctx)
+{
+    TInterlaceContext *tinterlace = ctx->priv;
+
+    if (tinterlace->mode <= MODE_BFF)
+        tinterlace->mode += MODE_INTERLEAVE_TOP;
+
+    return 0;
+}
+
 static const AVFilterPad tinterlace_inputs[] = {
     {
         .name         = "default",
@@ -545,6 +555,7 @@ AVFilter ff_vf_interlace = {
     .name          = "interlace",
     .description   = NULL_IF_CONFIG_SMALL("Convert progressive video into interlaced."),
     .priv_size     = sizeof(TInterlaceContext),
+    .init          = init_interlace,
     .uninit        = uninit,
     .query_formats = query_formats,
     .inputs        = tinterlace_inputs,