[FFmpeg-devel] [PATCH 6/6] movenchint: Use rtpenc_chain for setting up the chained RTP muxer

Martin Storsjö martin
Thu Feb 3 13:10:17 CET 2011


---
 libavformat/Makefile     |    3 ++-
 libavformat/movenchint.c |   35 +++--------------------------------
 2 files changed, 5 insertions(+), 33 deletions(-)

diff --git a/libavformat/Makefile b/libavformat/Makefile
index 8f583e0..1d4e75e 100644
--- a/libavformat/Makefile
+++ b/libavformat/Makefile
@@ -128,7 +128,8 @@ OBJS-$(CONFIG_MM_DEMUXER)                += mm.o
 OBJS-$(CONFIG_MMF_DEMUXER)               += mmf.o pcm.o
 OBJS-$(CONFIG_MMF_MUXER)                 += mmf.o riff.o
 OBJS-$(CONFIG_MOV_DEMUXER)               += mov.o riff.o isom.o
-OBJS-$(CONFIG_MOV_MUXER)                 += movenc.o riff.o isom.o avc.o movenchint.o
+OBJS-$(CONFIG_MOV_MUXER)                 += movenc.o riff.o isom.o avc.o \
+                                            movenchint.o rtpenc_chain.o
 OBJS-$(CONFIG_MP2_MUXER)                 += mp3enc.o
 OBJS-$(CONFIG_MP3_DEMUXER)               += mp3dec.o
 OBJS-$(CONFIG_MP3_MUXER)                 += mp3enc.o
diff --git a/libavformat/movenchint.c b/libavformat/movenchint.c
index 25fd293..90527af 100644
--- a/libavformat/movenchint.c
+++ b/libavformat/movenchint.c
@@ -22,6 +22,7 @@
 #include "movenc.h"
 #include "libavutil/intreadwrite.h"
 #include "internal.h"
+#include "rtpenc_chain.h"
 
 int ff_mov_init_hinting(AVFormatContext *s, int index, int src_index)
 {
@@ -30,41 +31,20 @@ int ff_mov_init_hinting(AVFormatContext *s, int index, int src_index)
     MOVTrack *src_track = &mov->tracks[src_index];
     AVStream *src_st    = s->streams[src_index];
     int ret = AVERROR(ENOMEM);
-    AVOutputFormat *rtp_format = av_guess_format("rtp", NULL, NULL);
 
     track->tag = MKTAG('r','t','p',' ');
     track->src_track = src_index;
 
-    if (!rtp_format) {
-        ret = AVERROR(ENOENT);
-        goto fail;
-    }
-
     track->enc = avcodec_alloc_context();
     if (!track->enc)
         goto fail;
     track->enc->codec_type = AVMEDIA_TYPE_DATA;
     track->enc->codec_tag  = track->tag;
 
-    track->rtp_ctx = avformat_alloc_context();
+    track->rtp_ctx = ff_rtp_chain_mux_open(s, src_st, NULL,
+                                           RTP_MAX_PACKET_SIZE);
     if (!track->rtp_ctx)
         goto fail;
-    track->rtp_ctx->oformat = rtp_format;
-    if (!av_new_stream(track->rtp_ctx, 0))
-        goto fail;
-
-    /* Copy stream parameters */
-    track->rtp_ctx->streams[0]->sample_aspect_ratio =
-                        src_st->sample_aspect_ratio;
-
-    avcodec_copy_context(track->rtp_ctx->streams[0]->codec, src_st->codec);
-
-    if ((ret = url_open_dyn_packet_buf(&track->rtp_ctx->pb,
-                                       RTP_MAX_PACKET_SIZE)) < 0)
-        goto fail;
-    ret = av_write_header(track->rtp_ctx);
-    if (ret)
-        goto fail;
 
     /* Copy the RTP AVStream timebase back to the hint AVStream */
     track->timescale = track->rtp_ctx->streams[0]->time_base.den;
@@ -76,15 +56,6 @@ int ff_mov_init_hinting(AVFormatContext *s, int index, int src_index)
 fail:
     av_log(s, AV_LOG_WARNING,
            "Unable to initialize hinting of stream %d\n", src_index);
-    if (track->rtp_ctx && track->rtp_ctx->pb) {
-        uint8_t *buf;
-        url_close_dyn_buf(track->rtp_ctx->pb, &buf);
-        av_free(buf);
-    }
-    if (track->rtp_ctx) {
-        av_free_context(track->rtp_ctx);
-        track->rtp_ctx = NULL;
-    }
     av_freep(&track->enc);
     /* Set a default timescale, to avoid crashes in dump_format */
     track->timescale = 90000;
-- 
1.7.3.1




More information about the ffmpeg-devel mailing list