From cb8d3965fd7e74740e8b5c0a23a394fee4083770 Mon Sep 17 00:00:00 2001 From: Stefano Sabatini Date: Thu, 3 Jan 2013 01:58:15 +0100 Subject: [PATCH] lavfi/yadif: add support to named constants --- doc/filters.texi | 28 ++++++++++++++-------------- libavfilter/version.h | 2 +- libavfilter/vf_yadif.c | 20 +++++++++++++++++--- libavfilter/yadif.h | 41 +++++++++++++++++++++-------------------- 4 files changed, 53 insertions(+), 38 deletions(-) diff --git a/doc/filters.texi b/doc/filters.texi index d24abec7bc..6d6db6e434 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -4303,32 +4303,32 @@ Specify the interlacing mode to adopt. Accept one of the following values: @table @option -@item 0 +@item 0, send_frame output 1 frame for each frame -@item 1 +@item 1, send_field output 1 frame for each field -@item 2 -like 0 but skips spatial interlacing check -@item 3 -like 1 but skips spatial interlacing check +@item 2, send_frame_nospatial +like @code{send_frame} but skip spatial interlacing check +@item 3, send_field_nospatial +like @code{send_field} but skip spatial interlacing check @end table -Default value is 0. +Default value is @code{send_frame}. @item parity Specify the picture field parity assumed for the input interlaced video. Accept one of the following values: @table @option -@item 0 +@item 0, tff assume top field first -@item 1 +@item 1, bff assume bottom field first -@item -1 +@item -1, auto enable automatic detection @end table -Default value is -1. +Default value is @code{auto}. If interlacing is unknown or decoder does not export this information, top field first will be assumed. @@ -4337,13 +4337,13 @@ Specify which frames to deinterlace. Accept one of the following values: @table @option -@item 0 +@item 0, all deinterlace all frames -@item 1 +@item 1, interlaced only deinterlace frames marked as interlaced @end table -Default value is 0. +Default value is @code{all}. @end table @c man end VIDEO FILTERS diff --git a/libavfilter/version.h b/libavfilter/version.h index 505cea0ded..39117b5a6d 100644 --- a/libavfilter/version.h +++ b/libavfilter/version.h @@ -30,7 +30,7 @@ #define LIBAVFILTER_VERSION_MAJOR 3 #define LIBAVFILTER_VERSION_MINOR 30 -#define LIBAVFILTER_VERSION_MICRO 103 +#define LIBAVFILTER_VERSION_MICRO 104 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ LIBAVFILTER_VERSION_MINOR, \ diff --git a/libavfilter/vf_yadif.c b/libavfilter/vf_yadif.c index 824137b178..dca4a8cd35 100644 --- a/libavfilter/vf_yadif.c +++ b/libavfilter/vf_yadif.c @@ -300,10 +300,24 @@ static int request_frame(AVFilterLink *link) #define OFFSET(x) offsetof(YADIFContext, x) #define FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM +#define CONST(name, help, val, unit) { name, help, 0, AV_OPT_TYPE_CONST, {.i64=val}, INT_MIN, INT_MAX, FLAGS, unit } + static const AVOption yadif_options[] = { - { "mode", "specify the interlacing mode", OFFSET(mode), AV_OPT_TYPE_INT, {.i64=0}, 0, 3, FLAGS }, - { "parity", "specify the assumed picture field parity", OFFSET(parity), AV_OPT_TYPE_INT, {.i64=-1}, -1, 1, FLAGS }, - { "deint", "specify which frames to deinterlace", OFFSET(deint), AV_OPT_TYPE_INT, {.i64=0}, 0, 1, FLAGS }, + { "mode", "specify the interlacing mode", OFFSET(mode), AV_OPT_TYPE_INT, {.i64=YADIF_MODE_SEND_FRAME}, 0, 3, FLAGS, "mode"}, + CONST("send_frame", "send one frame for each frame", YADIF_MODE_SEND_FRAME, "mode"), + CONST("send_field", "send one frame for each field", YADIF_MODE_SEND_FIELD, "mode"), + CONST("send_frame_nospatial", "send one frame for each frame, but skip spatial interlacing check", YADIF_MODE_SEND_FRAME_NOSPATIAL, "mode"), + CONST("send_field_nospatial", "send one frame for each field, but skip spatial interlacing check", YADIF_MODE_SEND_FIELD_NOSPATIAL, "mode"), + + { "parity", "specify the assumed picture field parity", OFFSET(parity), AV_OPT_TYPE_INT, {.i64=YADIF_PARITY_AUTO}, -1, 1, FLAGS, "parity" }, + CONST("tff", "assume top field first", YADIF_PARITY_TFF, "parity"), + CONST("bff", "assume bottom field first", YADIF_PARITY_BFF, "parity"), + CONST("auto", "auto detect parity", YADIF_PARITY_AUTO, "parity"), + + { "deint", "specify which frames to deinterlace", OFFSET(deint), AV_OPT_TYPE_INT, {.i64=YADIF_DEINT_ALL}, 0, 1, FLAGS, "deint" }, + CONST("all", "deinterlace all frames", YADIF_DEINT_ALL, "deint"), + CONST("interlaced", "only deinterlace frames marked as interlaced", YADIF_DEINT_INTERLACED, "deint"), + {NULL}, }; diff --git a/libavfilter/yadif.h b/libavfilter/yadif.h index 22904fb660..d2084fa86e 100644 --- a/libavfilter/yadif.h +++ b/libavfilter/yadif.h @@ -22,32 +22,33 @@ #include "libavutil/pixdesc.h" #include "avfilter.h" +enum YADIFMode { + YADIF_MODE_SEND_FRAME = 0, ///< send 1 frame for each frame + YADIF_MODE_SEND_FIELD = 1, ///< send 1 frame for each field + YADIF_MODE_SEND_FRAME_NOSPATIAL = 2, ///< send 1 frame for each frame but skips spatial interlacing check + YADIF_MODE_SEND_FIELD_NOSPATIAL = 3, ///< send 1 frame for each field but skips spatial interlacing check +}; + +enum YADIFParity { + YADIF_PARITY_TFF = 0, ///< top field first + YADIF_PARITY_BFF = 1, ///< bottom field first + YADIF_PARITY_AUTO = -1, ///< auto detection +}; + +enum YADIFDeint { + YADIF_DEINT_ALL = 0, ///< deinterlace all frames + YADIF_DEINT_INTERLACED = 1, ///< only deinterlace frames marked as interlaced +}; + typedef struct YADIFContext { const AVClass *class; - /** - * 0: send 1 frame for each frame - * 1: send 1 frame for each field - * 2: like 0 but skips spatial interlacing check - * 3: like 1 but skips spatial interlacing check - */ - int mode; - - /** - * 0: top field first - * 1: bottom field first - * -1: auto-detection - */ - int parity; + enum YADIFMode mode; + enum YADIFParity parity; + enum YADIFDeint deint; int frame_pending; - /** - * 0: deinterlace all frames - * 1: only deinterlace frames marked as interlaced - */ - int deint; - AVFilterBufferRef *cur; AVFilterBufferRef *next; AVFilterBufferRef *prev;