[FFmpeg-cvslog] flashsvenc: switch to encode2().

Anton Khirnov git at videolan.org
Fri Feb 24 04:35:00 CET 2012


ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Mon Feb 20 13:21:58 2012 +0100| [0ecf54f9dc0bbebb064f40f9a00d9e72e1793a2c] | committer: Anton Khirnov

flashsvenc: switch to encode2().

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

 libavcodec/flashsvenc.c |   26 +++++++++++++++-----------
 1 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/libavcodec/flashsvenc.c b/libavcodec/flashsvenc.c
index 669badc..75daf36 100644
--- a/libavcodec/flashsvenc.c
+++ b/libavcodec/flashsvenc.c
@@ -49,6 +49,7 @@
 #include <zlib.h>
 
 #include "avcodec.h"
+#include "internal.h"
 #include "put_bits.h"
 #include "bytestream.h"
 
@@ -194,11 +195,10 @@ static int encode_bitstream(FlashSVContext *s, AVFrame *p, uint8_t *buf,
 }
 
 
-static int flashsv_encode_frame(AVCodecContext *avctx, uint8_t *buf,
-                                int buf_size, void *data)
+static int flashsv_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
+                                const AVFrame *pict, int *got_packet)
 {
     FlashSVContext * const s = avctx->priv_data;
-    AVFrame *pict = data;
     AVFrame * const p = &s->frame;
     uint8_t *pfptr;
     int res;
@@ -228,15 +228,15 @@ static int flashsv_encode_frame(AVCodecContext *avctx, uint8_t *buf,
         I_frame = 1;
     }
 
-    if (buf_size < s->image_width * s->image_height * 3) {
+    if ((res = ff_alloc_packet(pkt, s->image_width * s->image_height * 3)) < 0) {
         //Conservative upper bound check for compressed data
-        av_log(avctx, AV_LOG_ERROR, "buf_size %d <  %d\n",
-               buf_size, s->image_width * s->image_height * 3);
-        return -1;
+        av_log(avctx, AV_LOG_ERROR, "Error getting output packet of size %d.\n",
+               s->image_width * s->image_height * 3);
+        return res;
     }
 
-    res = encode_bitstream(s, p, buf, buf_size, opt_w * 16, opt_h * 16,
-                           pfptr, &I_frame);
+    pkt->size = encode_bitstream(s, p, pkt->data, pkt->size, opt_w * 16, opt_h * 16,
+                                 pfptr, &I_frame);
 
     //save the current frame
     if (p->linesize[0] > 0)
@@ -259,7 +259,11 @@ static int flashsv_encode_frame(AVCodecContext *avctx, uint8_t *buf,
 
     avctx->coded_frame = p;
 
-    return res;
+    if (p->key_frame)
+        pkt->flags |= AV_PKT_FLAG_KEY;
+    *got_packet = 1;
+
+    return 0;
 }
 
 static av_cold int flashsv_encode_end(AVCodecContext *avctx)
@@ -281,7 +285,7 @@ AVCodec ff_flashsv_encoder = {
     .id             = CODEC_ID_FLASHSV,
     .priv_data_size = sizeof(FlashSVContext),
     .init           = flashsv_encode_init,
-    .encode         = flashsv_encode_frame,
+    .encode2        = flashsv_encode_frame,
     .close          = flashsv_encode_end,
     .pix_fmts       = (const enum PixelFormat[]){PIX_FMT_BGR24, PIX_FMT_NONE},
     .long_name      = NULL_IF_CONFIG_SMALL("Flash Screen Video"),



More information about the ffmpeg-cvslog mailing list