Skip to content

Commit

Permalink
player/command: add track-list/N/decoder
Browse files Browse the repository at this point in the history
  • Loading branch information
kasper93 committed Apr 17, 2024
1 parent 8a4ecda commit a569c3c
Show file tree
Hide file tree
Showing 7 changed files with 22 additions and 28 deletions.
1 change: 1 addition & 0 deletions DOCS/interface-changes/track-list-decoder-tag.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
add `track-list/N/decoder`
3 changes: 3 additions & 0 deletions DOCS/man/input.rst
Original file line number Diff line number Diff line change
Expand Up @@ -3077,6 +3077,9 @@ Property list
match even if the default (builtin) demuxer is used, but there is
no hard guarantee.

``track-list/N/decoder``
If this track is being decoded, the short decoder name,

``track-list/N/decoder-desc``
If this track is being decoded, the human-readable decoder name,

Expand Down
2 changes: 2 additions & 0 deletions common/av_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 = avctx->codec_descriptor->name;
c->codec_desc = avctx->codec_descriptor->long_name;
c->decoder = avctx->codec->name;
c->decoder_desc = avctx->codec->long_name;
}
6 changes: 6 additions & 0 deletions demux/stheader.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,12 @@ struct mp_codec_params {
// Corresponding 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.
unsigned int codec_tag;

Expand Down
24 changes: 6 additions & 18 deletions filters/f_decoder_wrapper.c
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,6 @@ struct priv {

// --- Protected by cache_lock.
char *cur_hwdec;
char *decoder_desc;
bool try_spdif;
bool attached_picture;
bool pts_reset;
Expand Down Expand Up @@ -397,9 +396,6 @@ static bool reinit_decoder(struct priv *p)
reset_decoder(p);
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;
struct mp_decoder_list *list = NULL;
char *user_list = NULL;
Expand Down Expand Up @@ -451,11 +447,12 @@ static bool reinit_decoder(struct priv *p)

p->decoder = driver->create(p->decf, p->codec, sel->decoder);
if (p->decoder) {
mp_mutex_lock(&p->cache_lock);
const char *d = sel->desc && sel->desc[0] ? sel->desc : sel->decoder;
p->decoder_desc = talloc_strdup(p, d);
MP_VERBOSE(p, "Selected codec: %s\n", p->decoder_desc);
mp_mutex_unlock(&p->cache_lock);
p->codec->decoder = talloc_strdup(p, sel->decoder);
p->codec->decoder_desc = talloc_strdup(p, sel->desc && sel->desc[0] ? sel->desc : NULL);
MP_VERBOSE(p, "Selected decoder: %s", sel->decoder);
if (p->codec->decoder_desc)
MP_VERBOSE(p, " - %s", p->codec->decoder_desc);
MP_VERBOSE(p, "\n");
break;
}

Expand All @@ -482,15 +479,6 @@ bool mp_decoder_wrapper_reinit(struct mp_decoder_wrapper *d)
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)
{
struct priv *p = d->f->priv;
Expand Down
4 changes: 0 additions & 4 deletions filters/f_decoder_wrapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,6 @@ struct mp_decoder_wrapper {
struct mp_decoder_wrapper *mp_decoder_wrapper_create(struct mp_filter *parent,
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.
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);
Expand Down
10 changes: 4 additions & 6 deletions player/command.c
Original file line number Diff line number Diff line change
Expand Up @@ -1977,10 +1977,6 @@ static int get_track_entry(int item, int action, void *arg, void *ctx)
struct mp_codec_params p =
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;
struct replaygain_data rg = has_rg ? *track->stream->codec->replaygain_data
: (struct replaygain_data){0};
Expand Down Expand Up @@ -2029,8 +2025,10 @@ static int get_track_entry(int item, int action, void *arg, void *ctx)
.unavailable = !track->hls_bitrate},
{"program-id", SUB_PROP_INT(track->program_id),
.unavailable = track->program_id < 0},
{"decoder-desc", SUB_PROP_STR(decoder_desc),
.unavailable = !decoder_desc[0]},
{"decoder", SUB_PROP_STR(p.decoder),
.unavailable = !p.decoder},
{"decoder-desc", SUB_PROP_STR(p.decoder_desc),
.unavailable = !p.decoder_desc},
{"codec", SUB_PROP_STR(p.codec),
.unavailable = !p.codec},
{"codec-desc", SUB_PROP_STR(p.codec_desc),
Expand Down

0 comments on commit a569c3c

Please sign in to comment.