[FFmpeg-cvslog] output-example: Update to use encode_video2 instead of the now dropped encode_video

Martin Storsjö git at videolan.org
Tue Mar 12 18:17:16 CET 2013


ffmpeg | branch: master | Martin Storsjö <martin at martin.st> | Fri Mar  8 11:59:57 2013 +0200| [f1af3d19a7924c6f5963ee15a83bad26d2262dc3] | committer: Anton Khirnov

output-example: Update to use encode_video2 instead of the now dropped encode_video

Signed-off-by: Anton Khirnov <anton at khirnov.net>

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

 libavformat/output-example.c |   43 +++++++++++++++---------------------------
 1 file changed, 15 insertions(+), 28 deletions(-)

diff --git a/libavformat/output-example.c b/libavformat/output-example.c
index 2f83990..496b7f8 100644
--- a/libavformat/output-example.c
+++ b/libavformat/output-example.c
@@ -177,8 +177,7 @@ static void close_audio(AVFormatContext *oc, AVStream *st)
 /* video output */
 
 static AVFrame *picture, *tmp_picture;
-static uint8_t *video_outbuf;
-static int frame_count, video_outbuf_size;
+static int frame_count;
 
 /* Add a video output stream. */
 static AVStream *add_video_stream(AVFormatContext *oc, enum AVCodecID codec_id)
@@ -264,18 +263,6 @@ static void open_video(AVFormatContext *oc, AVStream *st)
         exit(1);
     }
 
-    video_outbuf = NULL;
-    if (!(oc->oformat->flags & AVFMT_RAWPICTURE)) {
-        /* Allocate output buffer. */
-        /* XXX: API change will be done. */
-        /* Buffers passed into lav* can be allocated any way you prefer,
-         * as long as they're aligned enough for the architecture, and
-         * they're freed appropriately (such as using av_free for buffers
-         * allocated with av_malloc). */
-        video_outbuf_size = 200000;
-        video_outbuf      = av_malloc(video_outbuf_size);
-    }
-
     /* Allocate the encoded raw picture. */
     picture = alloc_picture(c->pix_fmt, c->width, c->height);
     if (!picture) {
@@ -320,7 +307,7 @@ static void fill_yuv_image(AVFrame *pict, int frame_index,
 
 static void write_video_frame(AVFormatContext *oc, AVStream *st)
 {
-    int out_size, ret;
+    int ret;
     AVCodecContext *c;
     static struct SwsContext *img_convert_ctx;
 
@@ -367,22 +354,23 @@ static void write_video_frame(AVFormatContext *oc, AVStream *st)
 
         ret = av_interleaved_write_frame(oc, &pkt);
     } else {
+        AVPacket pkt = { 0 };
+        int got_packet;
+        av_init_packet(&pkt);
+
         /* encode the image */
-        out_size = avcodec_encode_video(c, video_outbuf,
-                                        video_outbuf_size, picture);
+        ret = avcodec_encode_video2(c, &pkt, picture, &got_packet);
         /* If size is zero, it means the image was buffered. */
-        if (out_size > 0) {
-            AVPacket pkt;
-            av_init_packet(&pkt);
-
-            if (c->coded_frame->pts != AV_NOPTS_VALUE)
-                pkt.pts = av_rescale_q(c->coded_frame->pts,
+        if (!ret && got_packet && pkt.size) {
+            if (pkt.pts != AV_NOPTS_VALUE) {
+                pkt.pts = av_rescale_q(pkt.pts,
+                                       c->time_base, st->time_base);
+            }
+            if (pkt.dts != AV_NOPTS_VALUE) {
+                pkt.dts = av_rescale_q(pkt.dts,
                                        c->time_base, st->time_base);
-            if (c->coded_frame->key_frame)
-                pkt.flags |= AV_PKT_FLAG_KEY;
+            }
             pkt.stream_index = st->index;
-            pkt.data         = video_outbuf;
-            pkt.size         = out_size;
 
             /* Write the compressed frame to the media file. */
             ret = av_interleaved_write_frame(oc, &pkt);
@@ -406,7 +394,6 @@ static void close_video(AVFormatContext *oc, AVStream *st)
         av_free(tmp_picture->data[0]);
         av_free(tmp_picture);
     }
-    av_free(video_outbuf);
 }
 
 /**************************************************************/



More information about the ffmpeg-cvslog mailing list