diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst index 2716302e72..8d916ea849 100644 --- a/DOCS/man/options.rst +++ b/DOCS/man/options.rst @@ -2718,7 +2718,7 @@ Demuxer ``--demuxer-lavf-analyzeduration=`` Maximum length in seconds to analyze the stream properties. -``--demuxer-lavf-probe-info=`` +``--demuxer-lavf-probe-info=`` Whether to probe stream information (default: auto). Technically, this controls whether libavformat's ``avformat_find_stream_info()`` function is called. Usually it's safer to call it, but it can also make startup @@ -2727,6 +2727,10 @@ Demuxer The ``auto`` choice (the default) tries to skip this for a few know-safe whitelisted formats, while calling it for everything else. + The ``nostreams`` choice only calls it if and only if the file seems to + contain no streams after opening (helpful in cases when calling the function + is needed to detect streams at all, such as with FLV files). + ``--demuxer-lavf-probescore=<1-100>`` Minimum required libavformat probe score. Lower values will require less data to be loaded (makes streams start faster), but makes file diff --git a/demux/demux_lavf.c b/demux/demux_lavf.c index 20cf6429a3..4e1e3067ea 100644 --- a/demux/demux_lavf.c +++ b/demux/demux_lavf.c @@ -82,7 +82,7 @@ const struct m_sub_options demux_lavf_conf = { .opts = (const m_option_t[]) { OPT_INTRANGE("demuxer-lavf-probesize", probesize, 0, 32, INT_MAX), OPT_CHOICE("demuxer-lavf-probe-info", probeinfo, 0, - ({"no", 0}, {"yes", 1}, {"auto", -1})), + ({"no", 0}, {"yes", 1}, {"auto", -1}, {"nostreams", -2})), OPT_STRING("demuxer-lavf-format", format, 0), OPT_FLOATRANGE("demuxer-lavf-analyzeduration", analyzeduration, 0, 0, 3600), @@ -892,8 +892,11 @@ static int demux_open_lavf(demuxer_t *demuxer, enum demux_check check) priv->avfc = avfc; - bool probeinfo = lavfdopts->probeinfo < 0 ? - !priv->format_hack.skipinfo : lavfdopts->probeinfo; + bool probeinfo = lavfdopts->probeinfo != 0; + switch (lavfdopts->probeinfo) { + case -2: probeinfo = priv->avfc->nb_streams == 0; break; + case -1: probeinfo = !priv->format_hack.skipinfo; break; + } if (demuxer->params && demuxer->params->skip_lavf_probing) probeinfo = false; if (probeinfo) {