[FFmpeg-cvslog] Do not memcpy raw video frames when using null muxer

Mans Rullgard git at videolan.org
Sat Dec 3 03:13:08 CET 2011


ffmpeg | branch: master | Mans Rullgard <mans at mansr.com> | Tue Nov 29 18:38:02 2011 +0000| [150ddbc1482c65b9aac803f011d7fcd734f776ec] | committer: Mans Rullgard

Do not memcpy raw video frames when using null muxer

Commit 035af99 made avconv always call an encoder when using the
null muxer.  While useful for 2-pass encodes, it inadvertently
caused an extra memcpy of raw frames when decoding only.

This hack restores the old behaviour when only decoding while
allowing use of the null muxer with encoded streams as well.

Signed-off-by: Mans Rullgard <mans at mansr.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=150ddbc1482c65b9aac803f011d7fcd734f776ec
---

 avconv.c              |    5 +++--
 libavformat/nullenc.c |    2 +-
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/avconv.c b/avconv.c
index d6045b7..8842b24 100644
--- a/avconv.c
+++ b/avconv.c
@@ -1207,7 +1207,8 @@ static void do_video_out(AVFormatContext *s,
         av_init_packet(&pkt);
         pkt.stream_index= ost->index;
 
-        if (s->oformat->flags & AVFMT_RAWPICTURE) {
+        if (s->oformat->flags & AVFMT_RAWPICTURE &&
+            enc->codec->id == CODEC_ID_RAWVIDEO) {
             /* raw pictures are written as AVPicture structure to
                avoid any copies. We support temporarily the older
                method. */
@@ -1459,7 +1460,7 @@ static void flush_encoders(OutputStream *ost_table, int nb_ostreams)
 
         if (ost->st->codec->codec_type == AVMEDIA_TYPE_AUDIO && enc->frame_size <=1)
             continue;
-        if (ost->st->codec->codec_type == AVMEDIA_TYPE_VIDEO && (os->oformat->flags & AVFMT_RAWPICTURE))
+        if (ost->st->codec->codec_type == AVMEDIA_TYPE_VIDEO && (os->oformat->flags & AVFMT_RAWPICTURE) && enc->codec->id == CODEC_ID_RAWVIDEO)
             continue;
 
         for(;;) {
diff --git a/libavformat/nullenc.c b/libavformat/nullenc.c
index 680b29c..9849f46 100644
--- a/libavformat/nullenc.c
+++ b/libavformat/nullenc.c
@@ -32,5 +32,5 @@ AVOutputFormat ff_null_muxer = {
     .audio_codec       = AV_NE(CODEC_ID_PCM_S16BE, CODEC_ID_PCM_S16LE),
     .video_codec       = CODEC_ID_RAWVIDEO,
     .write_packet      = null_write_packet,
-    .flags = AVFMT_NOFILE | AVFMT_NOTIMESTAMPS,
+    .flags = AVFMT_NOFILE | AVFMT_NOTIMESTAMPS | AVFMT_RAWPICTURE,
 };



More information about the ffmpeg-cvslog mailing list