summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2014-07-24 22:39:22 +0200
committerMichael Niedermayer <michaelni@gmx.at>2014-07-24 22:39:22 +0200
commit351b22caae65ad5c5d2deb3815d79d032eb04385 (patch)
tree1fe284e7f5a7b035720e5c959188cede26d2c06a
parent383a04a127734d25c1ef7839c489bba297855801 (diff)
avformat/mux: support re-interleaving packets in ff_write_chained()
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r--libavformat/hdsenc.c2
-rw-r--r--libavformat/hlsenc.c2
-rw-r--r--libavformat/internal.h3
-rw-r--r--libavformat/movenchint.c2
-rw-r--r--libavformat/mux.c5
-rw-r--r--libavformat/rtspenc.c2
-rw-r--r--libavformat/sapenc.c2
-rw-r--r--libavformat/segment.c2
-rw-r--r--libavformat/smoothstreamingenc.c2
9 files changed, 12 insertions, 10 deletions
diff --git a/libavformat/hdsenc.c b/libavformat/hdsenc.c
index 20b4b12139..fac5bcf417 100644
--- a/libavformat/hdsenc.c
+++ b/libavformat/hdsenc.c
@@ -549,7 +549,7 @@ static int hds_write_packet(AVFormatContext *s, AVPacket *pkt)
os->last_ts = pkt->dts;
os->packets_written++;
- return ff_write_chained(os->ctx, pkt->stream_index - os->first_stream, pkt, s);
+ return ff_write_chained(os->ctx, pkt->stream_index - os->first_stream, pkt, s, 0);
}
static int hds_write_trailer(AVFormatContext *s)
diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c
index 388a23a18b..ca42b444b1 100644
--- a/libavformat/hlsenc.c
+++ b/libavformat/hlsenc.c
@@ -302,7 +302,7 @@ static int hls_write_packet(AVFormatContext *s, AVPacket *pkt)
return ret;
}
- ret = ff_write_chained(oc, pkt->stream_index, pkt, s);
+ ret = ff_write_chained(oc, pkt->stream_index, pkt, s, 0);
return ret;
}
diff --git a/libavformat/internal.h b/libavformat/internal.h
index 467e25d830..08987c76be 100644
--- a/libavformat/internal.h
+++ b/libavformat/internal.h
@@ -134,10 +134,11 @@ void ff_sdp_write_media(char *buff, int size, AVStream *st, int idx,
* @param dst_stream the stream index within dst to write the packet to
* @param pkt the packet to be written
* @param src the muxer the packet originally was intended for
+ * @param interleave 0->use av_write_frame, 1->av_write_interleaved_frame
* @return the value av_write_frame returned
*/
int ff_write_chained(AVFormatContext *dst, int dst_stream, AVPacket *pkt,
- AVFormatContext *src);
+ AVFormatContext *src, int interleave);
/**
* Get the length in bytes which is needed to store val as v.
diff --git a/libavformat/movenchint.c b/libavformat/movenchint.c
index 9d6a66e8ce..2602254be9 100644
--- a/libavformat/movenchint.c
+++ b/libavformat/movenchint.c
@@ -422,7 +422,7 @@ int ff_mov_add_hinted_packet(AVFormatContext *s, AVPacket *pkt,
sample_queue_push(&trk->sample_queue, pkt->data, pkt->size, sample);
/* Feed the packet to the RTP muxer */
- ff_write_chained(rtp_ctx, 0, pkt, s);
+ ff_write_chained(rtp_ctx, 0, pkt, s, 0);
/* Fetch the output from the RTP muxer, open a new output buffer
* for next time. */
diff --git a/libavformat/mux.c b/libavformat/mux.c
index 3abeccfaa0..bd9f7e5dcc 100644
--- a/libavformat/mux.c
+++ b/libavformat/mux.c
@@ -960,7 +960,7 @@ int av_get_output_timestamp(struct AVFormatContext *s, int stream,
}
int ff_write_chained(AVFormatContext *dst, int dst_stream, AVPacket *pkt,
- AVFormatContext *src)
+ AVFormatContext *src, int interleave)
{
AVPacket local_pkt;
int ret;
@@ -980,7 +980,8 @@ int ff_write_chained(AVFormatContext *dst, int dst_stream, AVPacket *pkt,
src->streams[pkt->stream_index]->time_base,
dst->streams[dst_stream]->time_base);
- ret = av_write_frame(dst, &local_pkt);
+ if (interleave) ret = av_interleaved_write_frame(dst, &local_pkt);
+ else ret = av_write_frame(dst, &local_pkt);
pkt->buf = local_pkt.buf;
pkt->destruct = local_pkt.destruct;
return ret;
diff --git a/libavformat/rtspenc.c b/libavformat/rtspenc.c
index cc6e729e8c..af6f7996dc 100644
--- a/libavformat/rtspenc.c
+++ b/libavformat/rtspenc.c
@@ -212,7 +212,7 @@ static int rtsp_write_packet(AVFormatContext *s, AVPacket *pkt)
rtsp_st = rt->rtsp_streams[pkt->stream_index];
rtpctx = rtsp_st->transport_priv;
- ret = ff_write_chained(rtpctx, 0, pkt, s);
+ ret = ff_write_chained(rtpctx, 0, pkt, s, 0);
/* ff_write_chained does all the RTP packetization. If using TCP as
* transport, rtpctx->pb is only a dyn_packet_buf that queues up the
* packets, so we need to send them out on the TCP connection separately.
diff --git a/libavformat/sapenc.c b/libavformat/sapenc.c
index c725ce3544..f90955790d 100644
--- a/libavformat/sapenc.c
+++ b/libavformat/sapenc.c
@@ -256,7 +256,7 @@ static int sap_write_packet(AVFormatContext *s, AVPacket *pkt)
sap->last_time = now;
}
rtpctx = s->streams[pkt->stream_index]->priv_data;
- return ff_write_chained(rtpctx, 0, pkt, s);
+ return ff_write_chained(rtpctx, 0, pkt, s, 0);
}
AVOutputFormat ff_sap_muxer = {
diff --git a/libavformat/segment.c b/libavformat/segment.c
index 135def226b..cae0f114a5 100644
--- a/libavformat/segment.c
+++ b/libavformat/segment.c
@@ -766,7 +766,7 @@ static int seg_write_packet(AVFormatContext *s, AVPacket *pkt)
av_ts2str(pkt->pts), av_ts2timestr(pkt->pts, &st->time_base),
av_ts2str(pkt->dts), av_ts2timestr(pkt->dts, &st->time_base));
- ret = ff_write_chained(seg->avf, pkt->stream_index, pkt, s);
+ ret = ff_write_chained(seg->avf, pkt->stream_index, pkt, s, 0);
fail:
if (pkt->stream_index == seg->reference_stream_index) {
diff --git a/libavformat/smoothstreamingenc.c b/libavformat/smoothstreamingenc.c
index 5a77ec3f74..9491005422 100644
--- a/libavformat/smoothstreamingenc.c
+++ b/libavformat/smoothstreamingenc.c
@@ -593,7 +593,7 @@ static int ism_write_packet(AVFormatContext *s, AVPacket *pkt)
}
os->packets_written++;
- return ff_write_chained(os->ctx, 0, pkt, s);
+ return ff_write_chained(os->ctx, 0, pkt, s, 0);
}
static int ism_write_trailer(AVFormatContext *s)