command: add encoder-list property

Also change decoder-list (for the sake of sharing the underlying code
for both properties).
This commit is contained in:
wm4 2016-03-01 21:46:49 +01:00
parent af66fa8fa5
commit 33774e18ed
4 changed files with 37 additions and 3 deletions

View File

@ -1999,7 +1999,7 @@ Property list
Canonical codec name, which identifies the format the decoder can
handle.
``decoder``
``driver``
The name of the decoder itself. Often, this is the same as ``codec``.
Sometimes it can be different. It is used to distinguish multiple
decoders for the same codec.
@ -2017,9 +2017,14 @@ Property list
MPV_FORMAT_NODE_MAP (for each decoder entry)
"family" MPV_FORMAT_STRING
"codec" MPV_FORMAT_STRING
"decoder" MPV_FORMAT_STRING
"driver" MPV_FORMAT_STRING
"description" MPV_FORMAT_STRING
``encoder-list``
List of libavcodec encoders. This has the same format as ``decoder-list``.
The encoder names (``driver`` entries) can be passed to ``--ovc`` and
``--oac`` (without the ``lavc:`` prefix required by ``--vd`` and ``--ad``).
``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.

View File

@ -158,6 +158,21 @@ void mp_add_lavc_decoders(struct mp_decoder_list *list, enum AVMediaType type)
}
}
// (Abuses the decoder list data structures.)
void mp_add_lavc_encoders(struct mp_decoder_list *list)
{
AVCodec *cur = NULL;
for (;;) {
cur = av_codec_next(cur);
if (!cur)
break;
if (av_codec_is_encoder(cur)) {
mp_add_decoder(list, "lavc", mp_codec_from_av_codec_id(cur->id),
cur->name, cur->long_name);
}
}
}
int mp_codec_to_av_codec_id(const char *codec)
{
int id = AV_CODEC_ID_NONE;

View File

@ -36,6 +36,7 @@ int64_t mp_pts_to_av(double mp_pts, AVRational *tb);
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);
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);

View File

@ -32,6 +32,7 @@
#include "config.h"
#include "mpv_talloc.h"
#include "client.h"
#include "common/av_common.h"
#include "common/codecs.h"
#include "common/msg.h"
#include "common/msg_control.h"
@ -3299,7 +3300,7 @@ static int get_decoder_entry(int item, int action, void *arg, void *ctx)
struct m_sub_property props[] = {
{"family", SUB_PROP_STR(c->family)},
{"codec", SUB_PROP_STR(c->codec)},
{"decoder", SUB_PROP_STR(c->decoder)},
{"driver" , SUB_PROP_STR(c->decoder)},
{"description", SUB_PROP_STR(c->desc)},
{0}
};
@ -3321,6 +3322,17 @@ static int mp_property_decoders(void *ctx, struct m_property *prop,
return r;
}
static int mp_property_encoders(void *ctx, struct m_property *prop,
int action, void *arg)
{
struct mp_decoder_list *codecs = talloc_zero(NULL, struct mp_decoder_list);
mp_add_lavc_encoders(codecs);
int r = m_property_read_list(action, arg, codecs->num_entries,
get_decoder_entry, codecs);
talloc_free(codecs);
return r;
}
static int mp_property_version(void *ctx, struct m_property *prop,
int action, void *arg)
{
@ -3749,6 +3761,7 @@ static const struct m_property mp_properties[] = {
{"protocol-list", mp_property_protocols},
{"decoder-list", mp_property_decoders},
{"encoder-list", mp_property_encoders},
{"mpv-version", mp_property_version},
{"mpv-configuration", mp_property_configuration},