summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libavformat/internal.h7
-rw-r--r--libavformat/mux.c10
2 files changed, 16 insertions, 1 deletions
diff --git a/libavformat/internal.h b/libavformat/internal.h
index 290e114506..20e93d9267 100644
--- a/libavformat/internal.h
+++ b/libavformat/internal.h
@@ -759,6 +759,13 @@ int ff_add_attached_pic(AVFormatContext *s, AVStream *st, AVIOContext *pb,
int ff_interleave_packet_per_dts(AVFormatContext *s, AVPacket *pkt,
int flush, int has_packet);
+/**
+ * Interleave packets directly in the order in which they arrive
+ * without any sort of buffering.
+ */
+int ff_interleave_packet_passthrough(AVFormatContext *s, AVPacket *pkt,
+ int flush, int has_packet);
+
void ff_free_stream(AVFormatContext *s, AVStream *st);
unsigned int ff_codec_get_tag(const AVCodecTag *tags, enum AVCodecID id);
diff --git a/libavformat/mux.c b/libavformat/mux.c
index 884640611a..1389bcc003 100644
--- a/libavformat/mux.c
+++ b/libavformat/mux.c
@@ -336,7 +336,9 @@ static int init_muxer(AVFormatContext *s, AVDictionary **options)
}
si->interleave_packet = of->interleave_packet;
if (!si->interleave_packet)
- si->interleave_packet = ff_interleave_packet_per_dts;
+ si->interleave_packet = si->nb_interleaved_streams > 1 ?
+ ff_interleave_packet_per_dts :
+ ff_interleave_packet_passthrough;
if (!s->priv_data && of->priv_data_size > 0) {
s->priv_data = av_mallocz(of->priv_data_size);
@@ -1028,6 +1030,12 @@ int ff_interleave_packet_per_dts(AVFormatContext *s, AVPacket *pkt,
}
}
+int ff_interleave_packet_passthrough(AVFormatContext *s, AVPacket *pkt,
+ int flush, int has_packet)
+{
+ return has_packet;
+}
+
int ff_get_muxer_ts_offset(AVFormatContext *s, int stream_index, int64_t *offset)
{
AVStream *st;