[FFmpeg-cvslog] avformat/yuv4mpegenc: Simplify writing global and packet headers

Andreas Rheinhardt git at videolan.org
Fri Sep 4 18:44:09 EEST 2020


ffmpeg | branch: master | Andreas Rheinhardt <andreas.rheinhardt at gmail.com> | Fri Sep  4 12:36:41 2020 +0200| [a162fa0772ab79fab503a7f2a5c7bb63e970cbfc] | committer: Andreas Rheinhardt

avformat/yuv4mpegenc: Simplify writing global and packet headers

YUV4MPEG writes a string as header for both the file itself as well as
for every frame; these strings contain magic strings and these were up
until now included in the string to write via %s. Yet they are compile
time constants, so one can use the compile-time string concatentation
instead of inserting these strings at runtime.
Furthermore, the global header has been written via snprintf() to
a local buffer first before writing it. This can be simplified by using
avio_printf().

Reviewed-by: Paul B Mahol <onemda at gmail.com>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at gmail.com>

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

 libavformat/yuv4mpegenc.c | 21 +++++++--------------
 1 file changed, 7 insertions(+), 14 deletions(-)

diff --git a/libavformat/yuv4mpegenc.c b/libavformat/yuv4mpegenc.c
index c4781042bd..fdd020e13b 100644
--- a/libavformat/yuv4mpegenc.c
+++ b/libavformat/yuv4mpegenc.c
@@ -24,18 +24,15 @@
 #include "internal.h"
 #include "yuv4mpeg.h"
 
-#define Y4M_LINE_MAX 256
-
 static int yuv4_write_header(AVFormatContext *s)
 {
     AVStream *st;
     AVIOContext *pb = s->pb;
     int width, height;
-    int raten, rated, aspectn, aspectd, n;
+    int raten, rated, aspectn, aspectd, ret;
     char inter;
     const char *colorspace = "";
     const char *colorrange = "";
-    char buf[Y4M_LINE_MAX + 1];
     int field_order;
 
     st     = s->streams[0];
@@ -170,19 +167,15 @@ static int yuv4_write_header(AVFormatContext *s)
         break;
     }
 
-    /* construct stream header, if this is the first frame */
-    n = snprintf(buf, Y4M_LINE_MAX, "%s W%d H%d F%d:%d I%c A%d:%d%s%s\n",
-                 Y4M_MAGIC, width, height, raten, rated, inter,
-                 aspectn, aspectd, colorspace, colorrange);
-
-    if (n < 0) {
+    ret = avio_printf(pb, Y4M_MAGIC " W%d H%d F%d:%d I%c A%d:%d%s%s\n",
+                      width, height, raten, rated, inter,
+                      aspectn, aspectd, colorspace, colorrange);
+    if (ret < 0) {
         av_log(s, AV_LOG_ERROR,
                "Error. YUV4MPEG stream header write failed.\n");
-        return AVERROR(EIO);
+        return ret;
     }
 
-    avio_write(pb, buf, strlen(buf));
-
     return 0;
 }
 
@@ -200,7 +193,7 @@ static int yuv4_write_packet(AVFormatContext *s, AVPacket *pkt)
 
     /* construct frame header */
 
-    avio_printf(s->pb, "%s\n", Y4M_FRAME_MAGIC);
+    avio_printf(s->pb, Y4M_FRAME_MAGIC "\n");
 
     width  = st->codecpar->width;
     height = st->codecpar->height;



More information about the ffmpeg-cvslog mailing list