mirror of https://github.com/mpv-player/mpv
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).
This commit is contained in:
parent
c560f6ff0a
commit
9d21f2503f
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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",
|
||||
|
|
Loading…
Reference in New Issue