mirror of https://github.com/mpv-player/mpv
demux: simplify stream ID business, fix issue with cover art
The stream ID handling as it was changed in commit 654c34f
was still
a little bit insane, and caused a regression with the cover art hack
(the stream set in demux->video->sh was incorrect for demux_lavf).
Simplify by always using stream_index for demux_stream->id, and getting
rid of that tid thing. It turns out that the id for subtitles isn't
special either (maybe demux_ts.c was the only thing left that required
this).
This commit is contained in:
parent
2d8783075f
commit
1c96f51e36
|
@ -244,9 +244,9 @@ demuxer_t *new_demuxer(struct MPOpts *opts, stream_t *stream, int type,
|
|||
static struct sh_stream *new_sh_stream_id(demuxer_t *demuxer,
|
||||
enum stream_type type,
|
||||
int stream_index,
|
||||
int tid)
|
||||
int demuxer_id)
|
||||
{
|
||||
if (demuxer->num_streams > MAX_SH_STREAMS) {
|
||||
if (demuxer->num_streams > MAX_SH_STREAMS || stream_index > MAX_SH_STREAMS) {
|
||||
mp_msg(MSGT_DEMUXER, MSGL_WARN, "Too many streams.");
|
||||
return NULL;
|
||||
}
|
||||
|
@ -255,8 +255,7 @@ static struct sh_stream *new_sh_stream_id(demuxer_t *demuxer,
|
|||
.type = type,
|
||||
.demuxer = demuxer,
|
||||
.index = demuxer->num_streams,
|
||||
.demuxer_id = tid, // may be overwritten by demuxer
|
||||
.tid = tid,
|
||||
.demuxer_id = demuxer_id, // may be overwritten by demuxer
|
||||
.stream_index = stream_index,
|
||||
.opts = demuxer->opts,
|
||||
});
|
||||
|
@ -1203,7 +1202,7 @@ void demuxer_switch_track(struct demuxer *demuxer, enum stream_type type,
|
|||
int old_id = demuxer->ds[type]->id;
|
||||
|
||||
// legacy
|
||||
int index = stream ? stream->tid : -2;
|
||||
int index = stream ? stream->stream_index : -2;
|
||||
if (type == STREAM_AUDIO) {
|
||||
if (demux_control(demuxer, DEMUXER_CTRL_SWITCH_AUDIO, &index)
|
||||
== DEMUXER_CTRL_NOTIMPL)
|
||||
|
@ -1213,8 +1212,7 @@ void demuxer_switch_track(struct demuxer *demuxer, enum stream_type type,
|
|||
== DEMUXER_CTRL_NOTIMPL)
|
||||
demuxer->video->id = index;
|
||||
} else if (type == STREAM_SUB) {
|
||||
int index2 = stream ? stream->stream_index : -2;
|
||||
demuxer->ds[type]->id = index2;
|
||||
demuxer->ds[type]->id = index;
|
||||
} else {
|
||||
abort();
|
||||
}
|
||||
|
@ -1238,12 +1236,7 @@ void demuxer_switch_track(struct demuxer *demuxer, enum stream_type type,
|
|||
|
||||
bool demuxer_stream_is_selected(struct demuxer *d, struct sh_stream *stream)
|
||||
{
|
||||
if (!stream)
|
||||
return false;
|
||||
int st_id = stream->tid;
|
||||
if (stream->type == STREAM_SUB) // major braindeath
|
||||
st_id = stream->stream_index;
|
||||
return d->ds[stream->type]->id == st_id;
|
||||
return stream && d->ds[stream->type]->id == stream->stream_index;
|
||||
}
|
||||
|
||||
int demuxer_add_attachment(demuxer_t *demuxer, struct bstr name,
|
||||
|
|
|
@ -2986,7 +2986,7 @@ static int ts_parse(demuxer_t *demuxer , ES_stream_t *es, unsigned char *packet,
|
|||
{
|
||||
sh_sub_t *sh_sub = demuxer->sub->sh;
|
||||
|
||||
if(sh_sub && sh_sub->gsh->tid == tss->pid)
|
||||
if(sh_sub && sh_sub->gsh->demuxer_id == tss->pid)
|
||||
{
|
||||
ds = demuxer->sub;
|
||||
|
||||
|
|
|
@ -42,11 +42,10 @@ struct sh_stream {
|
|||
struct demuxer *demuxer;
|
||||
// Index into demuxer->streams.
|
||||
int index;
|
||||
// The (possibly) type specific id, e.g. aid or sid.
|
||||
int tid;
|
||||
// Index into stream array (currently one array per type, e.g. a_streams).
|
||||
int stream_index;
|
||||
// Demuxer specific ID (always set, defaults to tid).
|
||||
// Demuxer/format specific ID. Corresponds to the stream IDs as encoded in
|
||||
// some file formats (e.g. MPEG), or an index chosen by demux.c.
|
||||
int demuxer_id;
|
||||
// One of these is non-NULL, the others are NULL, depending on the stream
|
||||
// type.
|
||||
|
|
Loading…
Reference in New Issue