player/command: add track-list/N/decoder

This commit is contained in:
Kacper Michajłow 2024-04-15 21:11:08 +02:00
parent 8a4ecda940
commit a569c3ce0c
7 changed files with 22 additions and 28 deletions

View File

@ -0,0 +1 @@
add `track-list/N/decoder`

View File

@ -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,

View File

@ -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;
} }

View File

@ -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;

View File

@ -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;

View File

@ -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);

View File

@ -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),