summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/internal.h6
-rw-r--r--libavformat/mux.c19
2 files changed, 11 insertions, 14 deletions
diff --git a/libavformat/internal.h b/libavformat/internal.h
index 1f301dd17a..290e114506 100644
--- a/libavformat/internal.h
+++ b/libavformat/internal.h
@@ -82,6 +82,12 @@ typedef struct FFFormatContext {
int nb_interleaved_streams;
/**
+ * The interleavement function in use. Always set for muxers.
+ */
+ int (*interleave_packet)(struct AVFormatContext *s, AVPacket *pkt,
+ int flush, int has_packet);
+
+ /**
* This buffer is only needed when packets were already buffered but
* not decoded, for example to get the codec parameters in MPEG
* streams.
diff --git a/libavformat/mux.c b/libavformat/mux.c
index a6e1a08be0..884640611a 100644
--- a/libavformat/mux.c
+++ b/libavformat/mux.c
@@ -334,6 +334,9 @@ static int init_muxer(AVFormatContext *s, AVDictionary **options)
if (par->codec_type != AVMEDIA_TYPE_ATTACHMENT)
si->nb_interleaved_streams++;
}
+ si->interleave_packet = of->interleave_packet;
+ if (!si->interleave_packet)
+ si->interleave_packet = ff_interleave_packet_per_dts;
if (!s->priv_data && of->priv_data_size > 0) {
s->priv_data = av_mallocz(of->priv_data_size);
@@ -1054,19 +1057,6 @@ const AVPacket *ff_interleaved_peek(AVFormatContext *s, int stream)
return NULL;
}
-/**
- * A wrapper around AVOutputFormat.interleave_packet.
- * See its documentation for details.
- */
-static int interleave_packet(AVFormatContext *s, AVPacket *pkt,
- int flush, int has_packet)
-{
- if (s->oformat->interleave_packet) {
- return s->oformat->interleave_packet(s, pkt, flush, has_packet);
- } else
- return ff_interleave_packet_per_dts(s, pkt, flush, has_packet);
-}
-
static int check_bitstream(AVFormatContext *s, FFStream *sti, AVPacket *pkt)
{
int ret;
@@ -1089,8 +1079,9 @@ static int check_bitstream(AVFormatContext *s, FFStream *sti, AVPacket *pkt)
static int interleaved_write_packet(AVFormatContext *s, AVPacket *pkt,
int flush, int has_packet)
{
+ FFFormatContext *const si = ffformatcontext(s);
for (;; ) {
- int ret = interleave_packet(s, pkt, flush, has_packet);
+ int ret = si->interleave_packet(s, pkt, flush, has_packet);
if (ret <= 0)
return ret;