mirror of https://github.com/mpv-player/mpv
player/command: add track-list/N/decoder
This commit is contained in:
parent
8a4ecda940
commit
a569c3ce0c
|
@ -0,0 +1 @@
|
||||||
|
add `track-list/N/decoder`
|
|
@ -3077,6 +3077,9 @@ Property list
|
||||||
match even if the default (builtin) demuxer is used, but there is
|
match even if the default (builtin) demuxer is used, but there is
|
||||||
no hard guarantee.
|
no hard guarantee.
|
||||||
|
|
||||||
|
``track-list/N/decoder``
|
||||||
|
If this track is being decoded, the short decoder name,
|
||||||
|
|
||||||
``track-list/N/decoder-desc``
|
``track-list/N/decoder-desc``
|
||||||
If this track is being decoded, the human-readable decoder name,
|
If this track is being decoded, the human-readable decoder name,
|
||||||
|
|
||||||
|
|
|
@ -410,4 +410,6 @@ void mp_codec_info_from_av(const AVCodecContext *avctx, struct mp_codec_params *
|
||||||
c->codec_profile = avcodec_profile_name(avctx->codec_id, avctx->profile);
|
c->codec_profile = avcodec_profile_name(avctx->codec_id, avctx->profile);
|
||||||
c->codec = avctx->codec_descriptor->name;
|
c->codec = avctx->codec_descriptor->name;
|
||||||
c->codec_desc = avctx->codec_descriptor->long_name;
|
c->codec_desc = avctx->codec_descriptor->long_name;
|
||||||
|
c->decoder = avctx->codec->name;
|
||||||
|
c->decoder_desc = avctx->codec->long_name;
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,6 +78,12 @@ struct mp_codec_params {
|
||||||
// Corresponding codec profile
|
// Corresponding codec profile
|
||||||
const char *codec_profile;
|
const char *codec_profile;
|
||||||
|
|
||||||
|
// E.g. "h264" (usually corresponds to AVCodec.name)
|
||||||
|
const char *decoder;
|
||||||
|
|
||||||
|
// Usually corresponds to AVCodec.long_name
|
||||||
|
const char *decoder_desc;
|
||||||
|
|
||||||
// Usually a FourCC, exact meaning depends on codec.
|
// Usually a FourCC, exact meaning depends on codec.
|
||||||
unsigned int codec_tag;
|
unsigned int codec_tag;
|
||||||
|
|
||||||
|
|
|
@ -224,7 +224,6 @@ struct priv {
|
||||||
|
|
||||||
// --- Protected by cache_lock.
|
// --- Protected by cache_lock.
|
||||||
char *cur_hwdec;
|
char *cur_hwdec;
|
||||||
char *decoder_desc;
|
|
||||||
bool try_spdif;
|
bool try_spdif;
|
||||||
bool attached_picture;
|
bool attached_picture;
|
||||||
bool pts_reset;
|
bool pts_reset;
|
||||||
|
@ -397,9 +396,6 @@ static bool reinit_decoder(struct priv *p)
|
||||||
reset_decoder(p);
|
reset_decoder(p);
|
||||||
p->has_broken_packet_pts = -10; // needs 10 packets to reach decision
|
p->has_broken_packet_pts = -10; // needs 10 packets to reach decision
|
||||||
|
|
||||||
talloc_free(p->decoder_desc);
|
|
||||||
p->decoder_desc = NULL;
|
|
||||||
|
|
||||||
const struct mp_decoder_fns *driver = NULL;
|
const struct mp_decoder_fns *driver = NULL;
|
||||||
struct mp_decoder_list *list = NULL;
|
struct mp_decoder_list *list = NULL;
|
||||||
char *user_list = NULL;
|
char *user_list = NULL;
|
||||||
|
@ -451,11 +447,12 @@ static bool reinit_decoder(struct priv *p)
|
||||||
|
|
||||||
p->decoder = driver->create(p->decf, p->codec, sel->decoder);
|
p->decoder = driver->create(p->decf, p->codec, sel->decoder);
|
||||||
if (p->decoder) {
|
if (p->decoder) {
|
||||||
mp_mutex_lock(&p->cache_lock);
|
p->codec->decoder = talloc_strdup(p, sel->decoder);
|
||||||
const char *d = sel->desc && sel->desc[0] ? sel->desc : sel->decoder;
|
p->codec->decoder_desc = talloc_strdup(p, sel->desc && sel->desc[0] ? sel->desc : NULL);
|
||||||
p->decoder_desc = talloc_strdup(p, d);
|
MP_VERBOSE(p, "Selected decoder: %s", sel->decoder);
|
||||||
MP_VERBOSE(p, "Selected codec: %s\n", p->decoder_desc);
|
if (p->codec->decoder_desc)
|
||||||
mp_mutex_unlock(&p->cache_lock);
|
MP_VERBOSE(p, " - %s", p->codec->decoder_desc);
|
||||||
|
MP_VERBOSE(p, "\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -482,15 +479,6 @@ bool mp_decoder_wrapper_reinit(struct mp_decoder_wrapper *d)
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
void mp_decoder_wrapper_get_desc(struct mp_decoder_wrapper *d,
|
|
||||||
char *buf, size_t buf_size)
|
|
||||||
{
|
|
||||||
struct priv *p = d->f->priv;
|
|
||||||
mp_mutex_lock(&p->cache_lock);
|
|
||||||
snprintf(buf, buf_size, "%s", p->decoder_desc ? p->decoder_desc : "");
|
|
||||||
mp_mutex_unlock(&p->cache_lock);
|
|
||||||
}
|
|
||||||
|
|
||||||
void mp_decoder_wrapper_set_frame_drops(struct mp_decoder_wrapper *d, int num)
|
void mp_decoder_wrapper_set_frame_drops(struct mp_decoder_wrapper *d, int num)
|
||||||
{
|
{
|
||||||
struct priv *p = d->f->priv;
|
struct priv *p = d->f->priv;
|
||||||
|
|
|
@ -43,10 +43,6 @@ struct mp_decoder_wrapper {
|
||||||
struct mp_decoder_wrapper *mp_decoder_wrapper_create(struct mp_filter *parent,
|
struct mp_decoder_wrapper *mp_decoder_wrapper_create(struct mp_filter *parent,
|
||||||
struct sh_stream *src);
|
struct sh_stream *src);
|
||||||
|
|
||||||
// For informational purposes.
|
|
||||||
void mp_decoder_wrapper_get_desc(struct mp_decoder_wrapper *d,
|
|
||||||
char *buf, size_t buf_size);
|
|
||||||
|
|
||||||
// Legacy decoder framedrop control.
|
// Legacy decoder framedrop control.
|
||||||
void mp_decoder_wrapper_set_frame_drops(struct mp_decoder_wrapper *d, int num);
|
void mp_decoder_wrapper_set_frame_drops(struct mp_decoder_wrapper *d, int num);
|
||||||
int mp_decoder_wrapper_get_frames_dropped(struct mp_decoder_wrapper *d);
|
int mp_decoder_wrapper_get_frames_dropped(struct mp_decoder_wrapper *d);
|
||||||
|
|
|
@ -1977,10 +1977,6 @@ static int get_track_entry(int item, int action, void *arg, void *ctx)
|
||||||
struct mp_codec_params p =
|
struct mp_codec_params p =
|
||||||
track->stream ? *track->stream->codec : (struct mp_codec_params){0};
|
track->stream ? *track->stream->codec : (struct mp_codec_params){0};
|
||||||
|
|
||||||
char decoder_desc[256] = {0};
|
|
||||||
if (track->dec)
|
|
||||||
mp_decoder_wrapper_get_desc(track->dec, decoder_desc, sizeof(decoder_desc));
|
|
||||||
|
|
||||||
bool has_rg = track->stream && track->stream->codec->replaygain_data;
|
bool has_rg = track->stream && track->stream->codec->replaygain_data;
|
||||||
struct replaygain_data rg = has_rg ? *track->stream->codec->replaygain_data
|
struct replaygain_data rg = has_rg ? *track->stream->codec->replaygain_data
|
||||||
: (struct replaygain_data){0};
|
: (struct replaygain_data){0};
|
||||||
|
@ -2029,8 +2025,10 @@ static int get_track_entry(int item, int action, void *arg, void *ctx)
|
||||||
.unavailable = !track->hls_bitrate},
|
.unavailable = !track->hls_bitrate},
|
||||||
{"program-id", SUB_PROP_INT(track->program_id),
|
{"program-id", SUB_PROP_INT(track->program_id),
|
||||||
.unavailable = track->program_id < 0},
|
.unavailable = track->program_id < 0},
|
||||||
{"decoder-desc", SUB_PROP_STR(decoder_desc),
|
{"decoder", SUB_PROP_STR(p.decoder),
|
||||||
.unavailable = !decoder_desc[0]},
|
.unavailable = !p.decoder},
|
||||||
|
{"decoder-desc", SUB_PROP_STR(p.decoder_desc),
|
||||||
|
.unavailable = !p.decoder_desc},
|
||||||
{"codec", SUB_PROP_STR(p.codec),
|
{"codec", SUB_PROP_STR(p.codec),
|
||||||
.unavailable = !p.codec},
|
.unavailable = !p.codec},
|
||||||
{"codec-desc", SUB_PROP_STR(p.codec_desc),
|
{"codec-desc", SUB_PROP_STR(p.codec_desc),
|
||||||
|
|
Loading…
Reference in New Issue