vf_yadif: change options, reroute to vf_lavfi

Also remove the ability to disable deinterlacing at runtime. You can
still disable deinterlacing at runtime by using the ``D`` key and its
automatical filter insertion/removal.
This commit is contained in:
wm4 2013-12-03 22:21:24 +01:00
parent 25635a62c3
commit 86ba9a7f24
3 changed files with 39 additions and 30 deletions

View File

@ -682,26 +682,29 @@ Available filters are:
Yet another deinterlacing filter
``<mode>``
:0: Output 1 frame for each frame.
:1: Output 1 frame for each field.
:2: Like 0 but skips spatial interlacing check.
:3: Like 1 but skips spatial interlacing check.
:frame: Output 1 frame for each frame.
:field: Output 1 frame for each field.
:frame-nospatial: Like ``frame`` but skips spatial interlacing check.
:field-nospatial: Like ``field`` but skips spatial interlacing check.
``<enabled>``
:yes: Filter is active (default).
:no: Filter is not active, but can be activated with the ``D`` key
(or any other key that toggles the ``deinterlace`` property).
.. note::
Deprecated. Use libavfilter's ``yadif`` filter through ``--vf=lavfi``
instead.
This filter, or libavfilter's implementation if available, is automatically
inserted when using the ``D`` key (or any other key that toggles the
``deinterlace`` property), assuming the video output does not have native
This filter, is automatically inserted when using the ``D`` key (or any
other key that toggles the ``deinterlace`` property or when using the
``--deinterlace`` switch), assuming the video output does not have native
deinterlacing support.
If you just want to set the default mode, put this filter and its options
into ``--vf-defaults`` instead, and enable deinterlacing with ``D`` or
``--deinterlace``.
Also note that the ``D`` key is stupid enough to insert an interlacer twice
when inserting yadif with ``--vf``, so using the above methods is
recommended.
``down3dright[=lines]``
Reposition and resize stereoscopic images. Extracts both stereo fields and
places them side by side, resizing them to maintain the original movie

View File

@ -1165,9 +1165,6 @@ static int mp_property_fullscreen(m_option_t *prop,
#define VF_DEINTERLACE_LABEL "deinterlace"
static const char *deint_filters[] = {
#if HAVE_VF_LAVFI
"lavfi=yadif",
#endif
"yadif",
#if HAVE_VAAPI_VPP
"vavpp",

View File

@ -35,6 +35,8 @@
#include "video/memcpy_pic.h"
#include "libavutil/common.h"
#include "vf_lavfi.h"
//===========================================================================//
struct vf_priv_s {
@ -48,6 +50,8 @@ struct vf_priv_s {
int stride[3];
uint8_t *ref[4][3];
int do_deinterlace;
// for when using the lavfi wrapper
struct vf_lw_opts *lw_opts;
};
static const struct vf_priv_s vf_priv_default = {
@ -486,25 +490,25 @@ static int query_format(struct vf_instance *vf, unsigned int fmt){
return 0;
}
static int control(struct vf_instance *vf, int request, void* data){
switch (request){
case VFCTRL_GET_DEINTERLACE:
*(int*)data = vf->priv->do_deinterlace;
return CONTROL_OK;
case VFCTRL_SET_DEINTERLACE:
vf->priv->do_deinterlace = 2*!!*(int*)data;
return CONTROL_OK;
}
return vf_next_control (vf, request, data);
}
static int vf_open(vf_instance_t *vf, char *args){
vf->config=config;
vf->filter_ext=filter_image;
vf->query_format=query_format;
vf->uninit=uninit;
vf->control=control;
struct vf_priv_s *p = vf->priv;
// Earlier libavfilter yadif versions used pure integers for the first
// option. We can't/don't handle this, but at least allow usage of the
// filter with default settings. So use an empty string for "send_frame".
const char *mode[] = {"", "send_field", "send_frame_nospatial",
"send_field_nospatial"};
if (vf_lw_set_graph(vf, p->lw_opts, "yadif", "%s", mode[p->mode]) >= 0)
{
return 1;
}
vf->priv->parity= -1;
@ -518,8 +522,13 @@ static int vf_open(vf_instance_t *vf, char *args){
#define OPT_BASE_STRUCT struct vf_priv_s
static const m_option_t vf_opts_fields[] = {
OPT_INTRANGE("mode", mode, 0, 0, 3),
OPT_INTRANGE("enabled", do_deinterlace, 0, 0, 1),
OPT_CHOICE("mode", mode, 0,
({"frame", 0},
{"field", 1},
{"frame-nospatial", 2},
{"field-nospatial", 3})),
OPT_FLAG("enabled", do_deinterlace, 0),
OPT_SUBSTRUCT("", lw_opts, vf_lw_conf, 0),
{0}
};