summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2017-10-16 14:37:28 +0200
committerwm4 <wm4@nowhere>2017-10-16 15:02:12 +0200
commitac295960b8486f104a6aa800d8d31ca2eeba99a0 (patch)
treecfe27fa57e2939810f8ae3b765b86c2b63a3dd45
parent23da3ed21a3897c374e01e68988e7dc24b705cfa (diff)
downloadmpv-ac295960b8486f104a6aa800d8d31ca2eeba99a0.tar.bz2
mpv-ac295960b8486f104a6aa800d8d31ca2eeba99a0.tar.xz
video: make it possible to always override hardware decoding format
Mostly an obscure option for testing. But --videotoolbox-format can be deprecated, as it becomes redundant. We rely on the libavutil hwcontext implementation to reject invalid pixfmts, or not to blow up if they are incompatible.
-rw-r--r--DOCS/interface-changes.rst2
-rw-r--r--DOCS/man/options.rst13
-rw-r--r--options/options.c4
-rw-r--r--options/options.h1
-rw-r--r--video/decode/vd_lavc.c2
5 files changed, 21 insertions, 1 deletions
diff --git a/DOCS/interface-changes.rst b/DOCS/interface-changes.rst
index af9a4a184c..608248f88f 100644
--- a/DOCS/interface-changes.rst
+++ b/DOCS/interface-changes.rst
@@ -43,6 +43,8 @@ Interface changes
- the --msg-level option now affects --log-file
- drop "audio-out-detected-device" property - this was unavailable on all
audio output drivers for quite a while (coreaudio used to provide it)
+ - deprecate --videotoolbox-format (use --hwdec-image-format, which affects
+ most other hwaccels)
--- mpv 0.27.0 ---
- drop previously deprecated --field-dominance option
- drop previously deprecated "osd" command
diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst
index ee57681218..f17a6042eb 100644
--- a/DOCS/man/options.rst
+++ b/DOCS/man/options.rst
@@ -835,6 +835,16 @@ Video
The old alias ``--hwdec-preload`` has different behavior if the option value
is ``no``.
+``--hwdec-image-format=<name>``
+ Set the internal pixel format used by hardware decoding via ``--hwdec``
+ (default ``no``). The special value ``no`` selects an implementation
+ specific standard format. Most decoder implementations support only one
+ format, and will fail to initialize if the format is not supported.
+
+ Some implementations might support multiple formats. In particular,
+ videotoolbox is known to require ``uyvy422`` for good performance on some
+ older hardware.
+
``--videotoolbox-format=<name>``
Set the internal pixel format used by ``--hwdec=videotoolbox`` on OSX. The
choice of the format can influence performance considerably. On the other
@@ -845,6 +855,9 @@ Video
Since mpv 0.25.0, ``no`` is an accepted value, which lets the decoder pick
the format on newer FFmpeg versions (will use ``nv12`` on older versions).
+ Deprecated. Use ``--hwdec-image-format`` if you really need this. If both
+ are specified, ``--hwdec-image-format`` wins.
+
``--panscan=<0.0-1.0>``
Enables pan-and-scan functionality (cropping the sides of e.g. a 16:9
video to make it fit a 4:3 display without black bands). The range
diff --git a/options/options.c b/options/options.c
index e0f7e2b7e8..2f26402526 100644
--- a/options/options.c
+++ b/options/options.c
@@ -443,8 +443,10 @@ const m_option_t mp_opts[] = {
OPT_CHOICE_C("hwdec", hwdec_api, 0, mp_hwdec_names),
OPT_STRING("hwdec-codecs", hwdec_codecs, 0),
#if HAVE_VIDEOTOOLBOX_HWACCEL
- OPT_IMAGEFORMAT("videotoolbox-format", videotoolbox_format, 0, .min = -1),
+ OPT_IMAGEFORMAT("videotoolbox-format", videotoolbox_format, 0, .min = -1,
+ .deprecation_message = "use --hwdec-image-format instead"),
#endif
+ OPT_IMAGEFORMAT("hwdec-image-format", hwdec_image_format, 0, .min = -1),
// -1 means auto aspect (prefer container size until aspect change)
// 0 means square pixels
diff --git a/options/options.h b/options/options.h
index 3bb2a0a311..e56ed7d619 100644
--- a/options/options.h
+++ b/options/options.h
@@ -292,6 +292,7 @@ typedef struct MPOpts {
int hwdec_api;
char *hwdec_codecs;
int videotoolbox_format;
+ int hwdec_image_format;
int w32_priority;
diff --git a/video/decode/vd_lavc.c b/video/decode/vd_lavc.c
index fe0de0e43f..f036a630b5 100644
--- a/video/decode/vd_lavc.c
+++ b/video/decode/vd_lavc.c
@@ -807,6 +807,8 @@ static int init_generic_hwaccel(struct dec_video *vd)
if (hwdec->image_format == IMGFMT_VIDEOTOOLBOX)
av_sw_format = imgfmt2pixfmt(vd->opts->videotoolbox_format);
+ if (vd->opts->hwdec_image_format)
+ av_sw_format = imgfmt2pixfmt(vd->opts->hwdec_image_format);
if (av_sw_format == AV_PIX_FMT_NONE) {
MP_VERBOSE(ctx, "Unsupported hw decoding format: %s\n",