]> git.sesse.net Git - ffmpeg/blobdiff - output_example.c
move variable declarations so that their scope is smaller
[ffmpeg] / output_example.c
index 365a35e1568c7656c84880b71974ff62ba8f3bc1..083bbe5cd68dc9e5a4e5d22e66b0ed9e3dc61444 100644 (file)
@@ -32,6 +32,7 @@
 #endif
 
 #include "avformat.h"
+#include "swscale.h"
 
 /* 5 seconds stream duration */
 #define STREAM_DURATION   5.0
@@ -39,6 +40,8 @@
 #define STREAM_NB_FRAMES  ((int)(STREAM_DURATION * STREAM_FRAME_RATE))
 #define STREAM_PIX_FMT PIX_FMT_YUV420P /* default pix_fmt */
 
+static int sws_flags = SWS_BICUBIC;
+
 /**************************************************************/
 /* audio output */
 
@@ -319,6 +322,7 @@ static void write_video_frame(AVFormatContext *oc, AVStream *st)
 {
     int out_size, ret;
     AVCodecContext *c;
+    static struct SwsContext *img_convert_ctx;
 
     c = st->codec;
 
@@ -330,10 +334,20 @@ static void write_video_frame(AVFormatContext *oc, AVStream *st)
         if (c->pix_fmt != PIX_FMT_YUV420P) {
             /* as we only generate a YUV420P picture, we must convert it
                to the codec pixel format if needed */
+            if (img_convert_ctx == NULL) {
+                img_convert_ctx = sws_getContext(c->width, c->height,
+                                                 PIX_FMT_YUV420P,
+                                                 c->width, c->height,
+                                                 c->pix_fmt,
+                                                 sws_flags, NULL, NULL, NULL);
+                if (img_convert_ctx == NULL) {
+                    fprintf(stderr, "Cannot initialize the conversion context\n");
+                    exit(1);
+                }
+            }
             fill_yuv_image(tmp_picture, frame_count, c->width, c->height);
-            img_convert((AVPicture *)picture, c->pix_fmt,
-                        (AVPicture *)tmp_picture, PIX_FMT_YUV420P,
-                        c->width, c->height);
+            sws_scale(img_convert_ctx, tmp_picture->data, tmp_picture->linesize,
+                      0, c->height, picture->data, picture->linesize);
         } else {
             fill_yuv_image(picture, frame_count, c->width, c->height);
         }