]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/flashsvenc.c
configure: Identify icc compiler with a less ambiguous pattern
[ffmpeg] / libavcodec / flashsvenc.c
index 6dc33b91f9cb751a20f68fa9f06b2803bc532e34..0b788802d6f36c2f307a2bdc006c87962d7c9296 100644 (file)
@@ -49,6 +49,7 @@
 #include <zlib.h>
 
 #include "avcodec.h"
+#include "internal.h"
 #include "put_bits.h"
 #include "bytestream.h"
 
@@ -176,7 +177,7 @@ static int encode_bitstream(FlashSVContext *s, AVFrame *p, uint8_t *buf,
 
                 bytestream_put_be16(&ptr, zsize);
                 buf_pos += zsize + 2;
-                av_dlog(avctx, "buf_pos = %d\n", buf_pos);
+                av_dlog(s->avctx, "buf_pos = %d\n", buf_pos);
             } else {
                 pred_blocks++;
                 bytestream_put_be16(&ptr, 0);
@@ -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)
@@ -278,12 +282,11 @@ static av_cold int flashsv_encode_end(AVCodecContext *avctx)
 AVCodec ff_flashsv_encoder = {
     .name           = "flashsv",
     .type           = AVMEDIA_TYPE_VIDEO,
-    .id             = CODEC_ID_FLASHSV,
+    .id             = AV_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},
+    .pix_fmts       = (const enum AVPixelFormat[]){ AV_PIX_FMT_BGR24, AV_PIX_FMT_NONE },
     .long_name      = NULL_IF_CONFIG_SMALL("Flash Screen Video"),
 };
-