summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2016-12-23 18:12:29 +0100
committerwm4 <wm4@nowhere>2016-12-23 18:12:29 +0100
commit9d21f2503f28a7be0e493ab18a4acbaae02c3d0a (patch)
tree8a636fae2155338bf4ee2534a846ce92dd1808ef
parentc560f6ff0ab9aec70e53a268e2ff388a85ec3ca0 (diff)
downloadmpv-9d21f2503f28a7be0e493ab18a4acbaae02c3d0a.tar.bz2
mpv-9d21f2503f28a7be0e493ab18a4acbaae02c3d0a.tar.xz
options: deprecate codec family selection in --vd/--ad
Useless now, so get rid of it. Also affects some user-visible display things (like reported codec in use).
-rw-r--r--DOCS/interface-changes.rst1
-rw-r--r--DOCS/man/options.rst19
-rw-r--r--audio/decode/dec_audio.c11
-rw-r--r--common/codecs.c27
-rw-r--r--common/codecs.h5
-rw-r--r--video/decode/dec_video.c19
6 files changed, 45 insertions, 37 deletions
diff --git a/DOCS/interface-changes.rst b/DOCS/interface-changes.rst
index d2c8536fd4..9f61a13e59 100644
--- a/DOCS/interface-changes.rst
+++ b/DOCS/interface-changes.rst
@@ -45,6 +45,7 @@ Interface changes
- remove --fs-black-out-screens option for macOS
- change how spdif codecs are selected. You can't enable spdif passthrough
with --ad anymore. This was deprecated; use --audio-spdif instead.
+ - deprecate the "family" selection with --ad/--vd
--- mpv 0.22.0 ---
- the "audio-device-list" property now sets empty device description to the
device name as a fallback
diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst
index bc33edc13d..f1101f27f8 100644
--- a/DOCS/man/options.rst
+++ b/DOCS/man/options.rst
@@ -555,7 +555,7 @@ Video
Specify the video output backend to be used. See `VIDEO OUTPUT DRIVERS`_ for
details and descriptions of available drivers.
-``--vd=<[+|-]family1:(*|decoder1),[+|-]family2:(*|decoder2),...[-]>``
+``--vd=<...>``
Specify a priority list of video decoders to be used, according to their
family and name. See ``--ad`` for further details. Both of these options
use the same syntax and semantics; the only difference is that they
@@ -1134,12 +1134,14 @@ Audio
``--ad=<[+|-]family1:(*|decoder1),[+|-]family2:(*|decoder2),...[-]>``
Specify a priority list of audio decoders to be used, according to their
- family and decoder name. Entries like ``family:*`` prioritize all decoders
- of the given family. When determining which decoder to use, the first
- decoder that matches the audio format is selected. If that is unavailable,
- the next decoder is used. Finally, it tries all other decoders that are not
+ decoder name. When determining which decoder to use, the first decoder that
+ matches the audio format is selected. If that is unavailable, the next
+ decoder is used. Finally, it tries all other decoders that are not
explicitly selected or rejected by the option.
+ Specifying family names is deprecated. Entries like ``family:*`` prioritize
+ all decoders of the given family.
+
``-`` at the end of the list suppresses fallback on other available
decoders not on the ``--ad`` list. ``+`` in front of an entry forces the
decoder. Both of these should not normally be used, because they break
@@ -1149,12 +1151,13 @@ Audio
.. admonition:: Examples
- ``--ad=lavc:mp3float``
+ ``--ad=mp3float``
Prefer the FFmpeg/Libav ``mp3float`` decoder over all other MP3
decoders.
- ``--ad=spdif:ac3,lavc:*``
- Always prefer spdif AC3 over FFmpeg/Libav over anything else.
+ ``--ad=lavc:mp3float``
+ Prefer the FFmpeg/Libav ``mp3float`` decoder over all other MP3
+ decoders. (Using deprecated family syntax.)
``--ad=help``
List all available decoders.
diff --git a/audio/decode/dec_audio.c b/audio/decode/dec_audio.c
index c98d42f556..9f28302bd5 100644
--- a/audio/decode/dec_audio.c
+++ b/audio/decode/dec_audio.c
@@ -91,7 +91,7 @@ static struct mp_decoder_list *audio_select_decoders(struct dec_audio *d_audio)
struct mp_decoder_list *list = audio_decoder_list();
struct mp_decoder_list *new =
- mp_select_decoders(list, codec, opts->audio_decoders);
+ mp_select_decoders(d_audio->log, list, codec, opts->audio_decoders);
if (d_audio->try_spdif && codec) {
struct mp_decoder_list *spdif =
select_spdif_codec(codec, opts->audio_spdif);
@@ -129,21 +129,18 @@ int audio_init_best_codec(struct dec_audio *d_audio)
const struct ad_functions *driver = find_driver(sel->family);
if (!driver)
continue;
- MP_VERBOSE(d_audio, "Opening audio decoder %s:%s\n",
- sel->family, sel->decoder);
+ MP_VERBOSE(d_audio, "Opening audio decoder %s\n", sel->decoder);
d_audio->ad_driver = driver;
if (init_audio_codec(d_audio, sel->decoder)) {
decoder = sel;
break;
}
- MP_WARN(d_audio, "Audio decoder init failed for "
- "%s:%s\n", sel->family, sel->decoder);
+ MP_WARN(d_audio, "Audio decoder init failed for %s\n", sel->decoder);
}
if (d_audio->ad_driver) {
d_audio->decoder_desc =
- talloc_asprintf(d_audio, "%s [%s:%s]", decoder->desc, decoder->family,
- decoder->decoder);
+ talloc_asprintf(d_audio, "%s (%s)", decoder->decoder, decoder->desc);
MP_VERBOSE(d_audio, "Selected audio codec: %s\n", d_audio->decoder_desc);
} else {
MP_ERR(d_audio, "Failed to initialize an audio decoder for codec '%s'.\n",
diff --git a/common/codecs.c b/common/codecs.c
index 463811066c..7a0afe466e 100644
--- a/common/codecs.c
+++ b/common/codecs.c
@@ -45,9 +45,10 @@ static struct mp_decoder_entry *find_decoder(struct mp_decoder_list *list,
{
for (int n = 0; n < list->num_entries; n++) {
struct mp_decoder_entry *cur = &list->entries[n];
- if (bstr_equals0(decoder, cur->decoder) &&
- bstr_equals0(family, cur->family))
- return cur;
+ if (bstr_equals0(decoder, cur->decoder)) {
+ if (bstr_equals0(family, "*") || bstr_equals0(family, cur->family))
+ return cur;
+ }
}
return NULL;
}
@@ -70,13 +71,14 @@ static void add_new(struct mp_decoder_list *to, struct mp_decoder_entry *entry,
// The selection string corresponds to --vd/--ad directly, and has the
// following syntax:
// selection = [<entry> ("," <entry>)*]
-// entry = <family> ":" <decoder> // prefer decoder
+// entry = [<family> ":"] <decoder> // prefer decoder
// entry = <family> ":*" // prefer all decoders
-// entry = "+" <family> ":" <decoder> // force a decoder
-// entry = "-" <family> ":" <decoder> // exclude a decoder
+// entry = "+" [<family> ":"] <decoder> // force a decoder
+// entry = "-" [<family> ":"] <decoder> // exclude a decoder
// entry = "-" // don't add fallback decoders
// Forcing a decoder means it's added even if the codec mismatches.
-struct mp_decoder_list *mp_select_decoders(struct mp_decoder_list *all,
+struct mp_decoder_list *mp_select_decoders(struct mp_log *log,
+ struct mp_decoder_list *all,
const char *codec,
const char *selection)
{
@@ -97,9 +99,12 @@ struct mp_decoder_list *mp_select_decoders(struct mp_decoder_list *all,
bool exclude = !force && bstr_eatstart0(&entry, "-");
struct mp_decoder_list *dest = exclude ? remove : list;
bstr family, decoder;
- if (!bstr_split_tok(entry, ":", &family, &decoder)) {
- family = entry;
- decoder = bstr0("*");
+ if (bstr_split_tok(entry, ":", &family, &decoder)) {
+ mp_warn(log, "Codec family selection is deprecated. "
+ "Pass the codec name directly.\n");
+ } else {
+ family = bstr0("*");
+ decoder = entry;
}
if (bstr_equals0(decoder, "*")) {
for (int n = 0; n < all->num_entries; n++) {
@@ -142,7 +147,7 @@ void mp_print_decoders(struct mp_log *log, int msgl, const char *header,
mp_msg(log, msgl, "%s\n", header);
for (int n = 0; n < list->num_entries; n++) {
struct mp_decoder_entry *entry = &list->entries[n];
- mp_msg(log, msgl, " %s:%s", entry->family, entry->decoder);
+ mp_msg(log, msgl, " %s", entry->decoder);
if (strcmp(entry->decoder, entry->codec) != 0)
mp_msg(log, msgl, " (%s)", entry->codec);
mp_msg(log, msgl, " - %s\n", entry->desc);
diff --git a/common/codecs.h b/common/codecs.h
index 3e9408eaad..bed5c46905 100644
--- a/common/codecs.h
+++ b/common/codecs.h
@@ -18,6 +18,8 @@
#ifndef MP_CODECS_H
#define MP_CODECS_H
+struct mp_log;
+
struct mp_decoder_entry {
const char *family; // decoder module (e.g. ad_lavc => "lavc")
const char *codec; // name of the codec (e.g. "mp3")
@@ -33,7 +35,8 @@ struct mp_decoder_list {
void mp_add_decoder(struct mp_decoder_list *list, const char *family,
const char *codec, const char *decoder, const char *desc);
-struct mp_decoder_list *mp_select_decoders(struct mp_decoder_list *all,
+struct mp_decoder_list *mp_select_decoders(struct mp_log *log,
+ struct mp_decoder_list *all,
const char *codec,
const char *selection);
diff --git a/video/decode/dec_video.c b/video/decode/dec_video.c
index dea5b594c7..d9dbf0f326 100644
--- a/video/decode/dec_video.c
+++ b/video/decode/dec_video.c
@@ -116,11 +116,12 @@ struct mp_decoder_list *video_decoder_list(void)
return list;
}
-static struct mp_decoder_list *mp_select_video_decoders(const char *codec,
+static struct mp_decoder_list *mp_select_video_decoders(struct mp_log *log,
+ const char *codec,
char *selection)
{
struct mp_decoder_list *list = video_decoder_list();
- struct mp_decoder_list *new = mp_select_decoders(list, codec, selection);
+ struct mp_decoder_list *new = mp_select_decoders(log, list, codec, selection);
talloc_free(list);
return new;
}
@@ -143,8 +144,9 @@ bool video_init_best_codec(struct dec_video *d_video)
d_video->has_broken_packet_pts = -10; // needs 10 packets to reach decision
struct mp_decoder_entry *decoder = NULL;
- struct mp_decoder_list *list =
- mp_select_video_decoders(d_video->codec->codec, opts->video_decoders);
+ struct mp_decoder_list *list = mp_select_video_decoders(d_video->log,
+ d_video->codec->codec,
+ opts->video_decoders);
mp_print_decoders(d_video->log, MSGL_V, "Codec list:", list);
@@ -153,22 +155,19 @@ bool video_init_best_codec(struct dec_video *d_video)
const struct vd_functions *driver = find_driver(sel->family);
if (!driver)
continue;
- MP_VERBOSE(d_video, "Opening video decoder %s:%s\n",
- sel->family, sel->decoder);
+ MP_VERBOSE(d_video, "Opening video decoder %s\n", sel->decoder);
d_video->vd_driver = driver;
if (init_video_codec(d_video, sel->decoder)) {
decoder = sel;
break;
}
d_video->vd_driver = NULL;
- MP_WARN(d_video, "Video decoder init failed for "
- "%s:%s\n", sel->family, sel->decoder);
+ MP_WARN(d_video, "Video decoder init failed for %s\n", sel->decoder);
}
if (d_video->vd_driver) {
d_video->decoder_desc =
- talloc_asprintf(d_video, "%s [%s:%s]", decoder->desc, decoder->family,
- decoder->decoder);
+ talloc_asprintf(d_video, "%s (%s)", decoder->decoder, decoder->desc);
MP_VERBOSE(d_video, "Selected video codec: %s\n", d_video->decoder_desc);
} else {
MP_ERR(d_video, "Failed to initialize a video decoder for codec '%s'.\n",