summaryrefslogtreecommitdiffstats
path: root/demux
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-04-14 06:20:31 +0200
committerwm4 <wm4@nowhere>2013-04-20 23:28:24 +0200
commit69258b2c7113d380e3baf4717aac71dc71872394 (patch)
treef2672da8672f28cbb27f63542bef1866df923c44 /demux
parentcb15d9c24abcfc2f81dd1b8cebab61cfb7bebcbd (diff)
downloadmpv-69258b2c7113d380e3baf4717aac71dc71872394.tar.bz2
mpv-69258b2c7113d380e3baf4717aac71dc71872394.tar.xz
demux: simpler way to notify demuxers about track switches
This interfaces assumes track switching is always successful.
Diffstat (limited to 'demux')
-rw-r--r--demux/demux.c11
-rw-r--r--demux/demux.h2
2 files changed, 11 insertions, 2 deletions
diff --git a/demux/demux.c b/demux/demux.c
index cb3d3a5efe..c8da399f43 100644
--- a/demux/demux.c
+++ b/demux/demux.c
@@ -1224,6 +1224,10 @@ void demuxer_switch_track(struct demuxer *demuxer, enum stream_type type,
struct sh_stream *stream)
{
assert(!stream || stream->type == type);
+
+ int old_id = demuxer->ds[type]->id;
+
+ // legacy
int index = stream ? stream->tid : -2;
if (type == STREAM_AUDIO) {
if (demux_control(demuxer, DEMUXER_CTRL_SWITCH_AUDIO, &index)
@@ -1235,8 +1239,6 @@ void demuxer_switch_track(struct demuxer *demuxer, enum stream_type type,
demuxer->video->id = index;
} else if (type == STREAM_SUB) {
int index2 = stream ? stream->stream_index : -2;
- if (demuxer->ds[type]->id != index2)
- ds_free_packs(demuxer->ds[type]);
demuxer->ds[type]->id = index2;
} else {
abort();
@@ -1252,6 +1254,11 @@ void demuxer_switch_track(struct demuxer *demuxer, enum stream_type type,
}
}
demuxer->ds[type]->sh = new;
+
+ if (old_id != new_id) {
+ ds_free_packs(demuxer->ds[type]);
+ demux_control(demuxer, DEMUXER_CTRL_SWITCHED_TRACKS, NULL);
+ }
}
int demuxer_add_attachment(demuxer_t *demuxer, struct bstr name,
diff --git a/demux/demux.h b/demux/demux.h
index fb695e6a45..d5f269aa7c 100644
--- a/demux/demux.h
+++ b/demux/demux.h
@@ -90,6 +90,8 @@ enum timestamp_type {
#define DEMUXER_CTRL_DONTKNOW 0
#define DEMUXER_CTRL_OK 1
#define DEMUXER_CTRL_GUESS 2
+
+#define DEMUXER_CTRL_SWITCHED_TRACKS 9
#define DEMUXER_CTRL_GET_TIME_LENGTH 10
#define DEMUXER_CTRL_GET_START_TIME 11
#define DEMUXER_CTRL_SWITCH_AUDIO 12