summaryrefslogtreecommitdiffstats
path: root/libmpdemux/demux_demuxers.c
diff options
context:
space:
mode:
authorUoti Urpala <uau@glyph.nonexistent.invalid>2009-09-04 19:49:35 +0300
committerUoti Urpala <uau@glyph.nonexistent.invalid>2009-09-04 19:49:35 +0300
commit0e1b7765be878491565cf5e471f22b15e106164c (patch)
tree422e500c289335182a2a64934dcabf10b95e32dc /libmpdemux/demux_demuxers.c
parenta9618c1c6fe9424dfaeb1677348e0382d7252554 (diff)
parentdcfd043ea8d0c46929aad78596314d837c290d39 (diff)
downloadmpv-0e1b7765be878491565cf5e471f22b15e106164c.tar.bz2
mpv-0e1b7765be878491565cf5e471f22b15e106164c.tar.xz
Merge svn changes up to r29644
Diffstat (limited to 'libmpdemux/demux_demuxers.c')
-rw-r--r--libmpdemux/demux_demuxers.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/libmpdemux/demux_demuxers.c b/libmpdemux/demux_demuxers.c
index 483dd02c30..3b4f958394 100644
--- a/libmpdemux/demux_demuxers.c
+++ b/libmpdemux/demux_demuxers.c
@@ -55,6 +55,9 @@ demuxer_t* new_demuxers_demuxer(demuxer_t* vd, demuxer_t* ad, demuxer_t* sd) {
ret->video = vd->video;
ret->audio = ad->audio;
ret->sub = sd->sub;
+ if (vd) vd->video->demuxer = ret;
+ if (ad) ad->audio->demuxer = ret;
+ if (sd) sd->sub->demuxer = ret;
// HACK?, necessary for subtitle (and audio and video when implemented) switching
memcpy(ret->v_streams, vd->v_streams, sizeof(ret->v_streams));
@@ -71,11 +74,15 @@ static int demux_demuxers_fill_buffer(demuxer_t *demux,demux_stream_t *ds) {
priv=demux->priv;
- if(ds->demuxer == priv->vd)
+ // HACK: make sure the subtitles get properly interleaved if with -subfile
+ if (priv->sd && priv->sd->sub != ds &&
+ priv->sd != priv->vd && priv->sd != priv->ad)
+ ds_get_next_pts(priv->sd->sub);
+ if(priv->vd && priv->vd->video == ds)
return demux_fill_buffer(priv->vd,ds);
- else if(ds->demuxer == priv->ad)
+ else if(priv->ad && priv->ad->audio == ds)
return demux_fill_buffer(priv->ad,ds);
- else if(ds->demuxer == priv->sd)
+ else if(priv->sd && priv->sd->sub == ds)
return demux_fill_buffer(priv->sd,ds);
mp_tmsg(MSGT_DEMUX,MSGL_WARN,"fill_buffer error: bad demuxer: not vd, ad or sd.\n");