Browse Source

avformat/mux: support re-interleaving packets in ff_write_chained()

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
tags/n2.4
Michael Niedermayer 11 years ago
parent
commit
351b22caae
9 changed files with 12 additions and 10 deletions
  1. +1
    -1
      libavformat/hdsenc.c
  2. +1
    -1
      libavformat/hlsenc.c
  3. +2
    -1
      libavformat/internal.h
  4. +1
    -1
      libavformat/movenchint.c
  5. +3
    -2
      libavformat/mux.c
  6. +1
    -1
      libavformat/rtspenc.c
  7. +1
    -1
      libavformat/sapenc.c
  8. +1
    -1
      libavformat/segment.c
  9. +1
    -1
      libavformat/smoothstreamingenc.c

+ 1
- 1
libavformat/hdsenc.c View File

@@ -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)


+ 1
- 1
libavformat/hlsenc.c View File

@@ -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;
} }


+ 2
- 1
libavformat/internal.h View File

@@ -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.


+ 1
- 1
libavformat/movenchint.c View File

@@ -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. */


+ 3
- 2
libavformat/mux.c View File

@@ -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;


+ 1
- 1
libavformat/rtspenc.c View File

@@ -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.


+ 1
- 1
libavformat/sapenc.c View File

@@ -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 = {


+ 1
- 1
libavformat/segment.c View File

@@ -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) {


+ 1
- 1
libavformat/smoothstreamingenc.c View File

@@ -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…
Cancel
Save