mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
avformat/mux: support re-interleaving packets in ff_write_chained()
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
383a04a127
commit
351b22caae
@ -549,7 +549,7 @@ static int hds_write_packet(AVFormatContext *s, AVPacket *pkt)
|
|||||||
os->last_ts = pkt->dts;
|
os->last_ts = pkt->dts;
|
||||||
|
|
||||||
os->packets_written++;
|
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)
|
static int hds_write_trailer(AVFormatContext *s)
|
||||||
|
@ -302,7 +302,7 @@ static int hls_write_packet(AVFormatContext *s, AVPacket *pkt)
|
|||||||
return ret;
|
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;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -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 dst_stream the stream index within dst to write the packet to
|
||||||
* @param pkt the packet to be written
|
* @param pkt the packet to be written
|
||||||
* @param src the muxer the packet originally was intended for
|
* @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
|
* @return the value av_write_frame returned
|
||||||
*/
|
*/
|
||||||
int ff_write_chained(AVFormatContext *dst, int dst_stream, AVPacket *pkt,
|
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.
|
* Get the length in bytes which is needed to store val as v.
|
||||||
|
@ -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);
|
sample_queue_push(&trk->sample_queue, pkt->data, pkt->size, sample);
|
||||||
|
|
||||||
/* Feed the packet to the RTP muxer */
|
/* 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
|
/* Fetch the output from the RTP muxer, open a new output buffer
|
||||||
* for next time. */
|
* for next time. */
|
||||||
|
@ -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,
|
int ff_write_chained(AVFormatContext *dst, int dst_stream, AVPacket *pkt,
|
||||||
AVFormatContext *src)
|
AVFormatContext *src, int interleave)
|
||||||
{
|
{
|
||||||
AVPacket local_pkt;
|
AVPacket local_pkt;
|
||||||
int ret;
|
int ret;
|
||||||
@ -980,7 +980,8 @@ int ff_write_chained(AVFormatContext *dst, int dst_stream, AVPacket *pkt,
|
|||||||
src->streams[pkt->stream_index]->time_base,
|
src->streams[pkt->stream_index]->time_base,
|
||||||
dst->streams[dst_stream]->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->buf = local_pkt.buf;
|
||||||
pkt->destruct = local_pkt.destruct;
|
pkt->destruct = local_pkt.destruct;
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -212,7 +212,7 @@ static int rtsp_write_packet(AVFormatContext *s, AVPacket *pkt)
|
|||||||
rtsp_st = rt->rtsp_streams[pkt->stream_index];
|
rtsp_st = rt->rtsp_streams[pkt->stream_index];
|
||||||
rtpctx = rtsp_st->transport_priv;
|
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
|
/* 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
|
* 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.
|
* packets, so we need to send them out on the TCP connection separately.
|
||||||
|
@ -256,7 +256,7 @@ static int sap_write_packet(AVFormatContext *s, AVPacket *pkt)
|
|||||||
sap->last_time = now;
|
sap->last_time = now;
|
||||||
}
|
}
|
||||||
rtpctx = s->streams[pkt->stream_index]->priv_data;
|
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 = {
|
AVOutputFormat ff_sap_muxer = {
|
||||||
|
@ -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->pts), av_ts2timestr(pkt->pts, &st->time_base),
|
||||||
av_ts2str(pkt->dts), av_ts2timestr(pkt->dts, &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:
|
fail:
|
||||||
if (pkt->stream_index == seg->reference_stream_index) {
|
if (pkt->stream_index == seg->reference_stream_index) {
|
||||||
|
@ -593,7 +593,7 @@ static int ism_write_packet(AVFormatContext *s, AVPacket *pkt)
|
|||||||
}
|
}
|
||||||
|
|
||||||
os->packets_written++;
|
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)
|
static int ism_write_trailer(AVFormatContext *s)
|
||||||
|
Loading…
Reference in New Issue
Block a user