summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2018-02-12 18:23:22 +0100
committerKevin Mitchell <kevmitch@gmail.com>2018-02-13 17:45:29 -0800
commit830f0aed97da7257e1cbe30a367144bc51ec52d2 (patch)
tree4a3f9d5f9a89ab5a4ca64dedd78f1a919d7592c5
parent1dcf511376545de7624863b76d7f30dc3bb44ac9 (diff)
downloadmpv-830f0aed97da7257e1cbe30a367144bc51ec52d2.tar.bz2
mpv-830f0aed97da7257e1cbe30a367144bc51ec52d2.tar.xz
video: make --deinterlace and HW deinterlace filters always deinterlace
Before this, we made deinterlacing dependent on the video codec metadata (AVFrame.interlaced_frame for libavcodec). So even if --deinterlace=yes was set, we skipped deinterlacing if the flag wasn't set. This is very unreliable and there are many streams with flags incorrectly set. The potential problem is that this might upset people who alwase enabled deinterlace and hoped it worked. But it's likely these people were screwed by this setting anyway. The new behavior is less tricky and easier to understand, and this preferable. Maybe one day we could introduce a --deinterlace=auto, which does the right thing, but of course this would be hard to implement (esecially with hwdec). Fixes #5219.
-rw-r--r--DOCS/interface-changes.rst3
-rw-r--r--DOCS/man/options.rst2
-rw-r--r--DOCS/man/vf.rst8
-rw-r--r--filters/f_auto_filters.c2
-rw-r--r--video/filter/vf_d3d11vpp.c2
-rw-r--r--video/filter/vf_vavpp.c2
-rw-r--r--video/filter/vf_vdpaupp.c2
7 files changed, 13 insertions, 8 deletions
diff --git a/DOCS/interface-changes.rst b/DOCS/interface-changes.rst
index 24bf3fc0c2..c0ec882719 100644
--- a/DOCS/interface-changes.rst
+++ b/DOCS/interface-changes.rst
@@ -72,6 +72,9 @@ Interface changes
will probably stall.
- deprecate the OpenGL cocoa backend, option choice --gpu-context=cocoa
when used with --gpu-api=opengl (use --vo=opengl-cb)
+ - make --deinterlace=yes always deinterlace, instead of trying to check
+ certain unreliable video metadata. Also flip the defaults of all builtin
+ HW deinterlace filters to always deinterlace.
--- mpv 0.28.0 ---
- rename --hwdec=mediacodec option to mediacodec-copy, to reflect
conventions followed by other hardware video decoding APIs
diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst
index c12453ae5f..e51f564490 100644
--- a/DOCS/man/options.rst
+++ b/DOCS/man/options.rst
@@ -1036,6 +1036,8 @@ Video
``--deinterlace=auto`` was removed, which used to mean that the default
interlacing option of possibly inserted video filters was used.)
+ Note that this will make video look worse if it's not actually interlaced.
+
``--frames=<number>``
Play/convert only first ``<number>`` video frames, then quit.
diff --git a/DOCS/man/vf.rst b/DOCS/man/vf.rst
index 9537b09597..17df70f920 100644
--- a/DOCS/man/vf.rst
+++ b/DOCS/man/vf.rst
@@ -488,8 +488,8 @@ Available mpv-only filters are:
mpv bugs.
``<interlaced-only>``
- :no: Deinterlace all frames.
- :yes: Only deinterlace frames marked as interlaced (default).
+ :no: Deinterlace all frames (default).
+ :yes: Only deinterlace frames marked as interlaced.
``reversal-bug=<yes|no>``
:no: Use the API as it was interpreted by older Mesa drivers. While
@@ -544,7 +544,7 @@ Available mpv-only filters are:
Try to apply inverse telecine, needs motion adaptive temporal
deinterlacing.
``interlaced-only=<yes|no>``
- If ``yes`` (default), only deinterlace frames marked as interlaced.
+ If ``yes``, only deinterlace frames marked as interlaced (default: no).
``hqscaling=<0-9>``
0
Use default VDPAU scaling (default).
@@ -558,7 +558,7 @@ Available mpv-only filters are:
``deint=<yes|no>``
Whether deinterlacing is enabled (default: no).
``interlaced-only=<yes|no>``
- If ``yes`` (default), only deinterlace frames marked as interlaced.
+ If ``yes``, only deinterlace frames marked as interlaced (default: no).
``mode=<blend|bob|adaptive|mocomp|ivctc|none>``
Tries to select a video processor with the given processing capability.
If a video processor supports multiple capabilities, it is not clear
diff --git a/filters/f_auto_filters.c b/filters/f_auto_filters.c
index b9f32026d5..08a0320560 100644
--- a/filters/f_auto_filters.c
+++ b/filters/f_auto_filters.c
@@ -76,7 +76,7 @@ static void deint_process(struct mp_filter *f)
p->sub.filter =
mp_create_user_filter(f, MP_OUTPUT_CHAIN_VIDEO, "d3d11vpp", NULL);
} else if (mp_sws_supports_input(img->imgfmt)) {
- char *args[] = {"mode", "send_field", "deint", "interlaced", NULL};
+ char *args[] = {"mode", "send_field", NULL};
p->sub.filter =
mp_create_user_filter(f, MP_OUTPUT_CHAIN_VIDEO, "yadif", args);
} else {
diff --git a/video/filter/vf_d3d11vpp.c b/video/filter/vf_d3d11vpp.c
index fb96a44e65..6ba1996da3 100644
--- a/video/filter/vf_d3d11vpp.c
+++ b/video/filter/vf_d3d11vpp.c
@@ -532,7 +532,7 @@ const struct mp_user_filter_entry vf_d3d11vpp = {
.priv_size = sizeof(OPT_BASE_STRUCT),
.priv_defaults = &(const OPT_BASE_STRUCT) {
.deint_enabled = 1,
- .interlaced_only = 1,
+ .interlaced_only = 0,
.mode = D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS_DEINTERLACE_BOB,
},
.options = vf_opts_fields,
diff --git a/video/filter/vf_vavpp.c b/video/filter/vf_vavpp.c
index 608f1eea6f..598997ca24 100644
--- a/video/filter/vf_vavpp.c
+++ b/video/filter/vf_vavpp.c
@@ -475,7 +475,7 @@ const struct mp_user_filter_entry vf_vavpp = {
.priv_size = sizeof(OPT_BASE_STRUCT),
.priv_defaults = &(const OPT_BASE_STRUCT){
.deint_type = 2,
- .interlaced_only = 1,
+ .interlaced_only = 0,
.reversal_bug = 1,
},
.options = vf_opts_fields,
diff --git a/video/filter/vf_vdpaupp.c b/video/filter/vf_vdpaupp.c
index 3b10e13421..fe3a903558 100644
--- a/video/filter/vf_vdpaupp.c
+++ b/video/filter/vf_vdpaupp.c
@@ -180,7 +180,7 @@ static const m_option_t vf_opts_fields[] = {
OPT_FLOATRANGE("denoise", opts.denoise, 0, 0, 1),
OPT_FLOATRANGE("sharpen", opts.sharpen, 0, -1, 1),
OPT_INTRANGE("hqscaling", opts.hqscaling, 0, 0, 9),
- OPT_FLAG("interlaced-only", interlaced_only, 0, OPTDEF_INT(1)),
+ OPT_FLAG("interlaced-only", interlaced_only, 0),
{0}
};