summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--DOCS/man/input.rst4
-rw-r--r--common/av_common.c17
-rw-r--r--common/av_common.h1
-rw-r--r--player/command.c15
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},