summaryrefslogtreecommitdiffstats
path: root/libmpdemux
diff options
context:
space:
mode:
Diffstat (limited to 'libmpdemux')
-rw-r--r--libmpdemux/demux_demuxers.c6
-rw-r--r--libmpdemux/demuxer.h2
2 files changed, 8 insertions, 0 deletions
diff --git a/libmpdemux/demux_demuxers.c b/libmpdemux/demux_demuxers.c
index 4cfc59edb9..9c13ed7304 100644
--- a/libmpdemux/demux_demuxers.c
+++ b/libmpdemux/demux_demuxers.c
@@ -54,9 +54,15 @@ 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 (sd && sd != vd && sd != ad) sd->sub->non_interleaved = 1;
+
+ // without these, demux_demuxers_fill_buffer will never be called,
+ // but they break the demuxer-specific code in video.c
+#if 0
if (vd) vd->video->demuxer = ret;
if (ad) ad->audio->demuxer = ret;
if (sd) sd->sub->demuxer = ret;
+#endif
// HACK?, necessary for subtitle (and audio and video when implemented) switching
memcpy(ret->v_streams, vd->v_streams, sizeof(ret->v_streams));
diff --git a/libmpdemux/demuxer.h b/libmpdemux/demuxer.h
index 77b20e1bcf..5d62f1bb52 100644
--- a/libmpdemux/demuxer.h
+++ b/libmpdemux/demuxer.h
@@ -142,6 +142,8 @@ typedef struct {
off_t dpos; // position in the demuxed stream
int pack_no; // serial number of packet
int flags; // flags of current packet (keyframe etc)
+ int non_interleaved; // 1 if this stream is not properly interleaved,
+ // so e.g. subtitle handling must do explicit reads.
//---------------
int packs; // number of packets in buffer
int bytes; // total bytes of packets in buffer