diff options
-rw-r--r-- | DOCS/man/input.rst | 4 | ||||
-rw-r--r-- | common/av_common.c | 17 | ||||
-rw-r--r-- | common/av_common.h | 1 | ||||
-rw-r--r-- | player/command.c | 15 |
4 files changed, 37 insertions, 0 deletions
diff --git a/DOCS/man/input.rst b/DOCS/man/input.rst index 16d8ecb45d..0ae4a0c0c8 100644 --- a/DOCS/man/input.rst +++ b/DOCS/man/input.rst @@ -2119,6 +2119,10 @@ Property list The encoder names (``driver`` entries) can be passed to ``--ovc`` and ``--oac`` (without the ``lavc:`` prefix required by ``--vd`` and ``--ad``). +``demuxer-lavf-list`` + List of available libavformat demuxers' names. This can be used to check + for support for a specific format or use with ``--demuxer-lavf-format``. + ``mpv-version`` Return the mpv version/copyright string. Depending on how the binary was built, it might contain either a release version, or just a git hash. diff --git a/common/av_common.c b/common/av_common.c index 65a212b994..0599d98465 100644 --- a/common/av_common.c +++ b/common/av_common.c @@ -26,6 +26,7 @@ #include <libavutil/error.h> #include <libavutil/cpu.h> #include <libavcodec/avcodec.h> +#include <libavformat/avformat.h> #include "config.h" @@ -33,6 +34,7 @@ #include "common/msg.h" #include "demux/packet.h" #include "demux/stheader.h" +#include "misc/bstr.h" #include "video/fmt-conversion.h" #include "av_common.h" #include "codecs.h" @@ -246,6 +248,21 @@ void mp_add_lavc_encoders(struct mp_decoder_list *list) } } +char **mp_get_lavf_demuxers(void) +{ + char **list = NULL; + AVInputFormat *cur = NULL; + int num = 0; + for (;;) { + cur = av_iformat_next(cur); + if (!cur) + break; + MP_TARRAY_APPEND(NULL, list, num, talloc_strdup(NULL, cur->name)); + } + MP_TARRAY_APPEND(NULL, list, num, NULL); + return list; +} + int mp_codec_to_av_codec_id(const char *codec) { int id = AV_CODEC_ID_NONE; diff --git a/common/av_common.h b/common/av_common.h index 6d0c823b8d..0e7c838884 100644 --- a/common/av_common.h +++ b/common/av_common.h @@ -41,6 +41,7 @@ double mp_pts_from_av(int64_t av_pts, AVRational *tb); void mp_set_avcodec_threads(struct mp_log *l, AVCodecContext *avctx, int threads); void mp_add_lavc_decoders(struct mp_decoder_list *list, enum AVMediaType type); void mp_add_lavc_encoders(struct mp_decoder_list *list); +char **mp_get_lavf_demuxers(void); int mp_codec_to_av_codec_id(const char *codec); const char *mp_codec_from_av_codec_id(int codec_id); void mp_set_avdict(struct AVDictionary **dict, char **kv); diff --git a/player/command.c b/player/command.c index 6f2c15b047..412afc5e11 100644 --- a/player/command.c +++ b/player/command.c @@ -3588,6 +3588,20 @@ static int mp_property_encoders(void *ctx, struct m_property *prop, return r; } +static int mp_property_lavf_demuxers(void *ctx, struct m_property *prop, + int action, void *arg) +{ + switch (action) { + case M_PROPERTY_GET: + *(char ***)arg = mp_get_lavf_demuxers(); + return M_PROPERTY_OK; + case M_PROPERTY_GET_TYPE: + *(struct m_option *)arg = (struct m_option){.type = CONF_TYPE_STRING_LIST}; + return M_PROPERTY_OK; + } + return M_PROPERTY_NOT_IMPLEMENTED; +} + static int mp_property_version(void *ctx, struct m_property *prop, int action, void *arg) { @@ -4027,6 +4041,7 @@ static const struct m_property mp_properties_base[] = { {"protocol-list", mp_property_protocols}, {"decoder-list", mp_property_decoders}, {"encoder-list", mp_property_encoders}, + {"demuxer-lavf-list", mp_property_lavf_demuxers}, {"mpv-version", mp_property_version}, {"mpv-configuration", mp_property_configuration}, |