]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/j2kenc.c
pcm: switch to ff_alloc_packet2().
[ffmpeg] / libavcodec / j2kenc.c
index 7f8fdf14a0496e0683f8b963f7b43a8398e051bd..f201c2cc49aff61df2697844f3553434b5ed3bf7 100644 (file)
@@ -27,6 +27,7 @@
 
 #include <float.h>
 #include "avcodec.h"
+#include "internal.h"
 #include "bytestream.h"
 #include "j2k.h"
 #include "libavutil/common.h"
@@ -920,18 +921,21 @@ static void reinit(J2kEncoderContext *s)
     }
 }
 
-static int encode_frame(AVCodecContext *avctx,
-                        uint8_t *buf, int buf_size,
-                        void *data)
+static int encode_frame(AVCodecContext *avctx, AVPacket *pkt,
+                        const AVFrame *pict, int *got_packet)
 {
     int tileno, ret;
     J2kEncoderContext *s = avctx->priv_data;
 
+    if ((ret = ff_alloc_packet2(avctx, pkt, avctx->width*avctx->height*9 + FF_MIN_BUFFER_SIZE)) < 0) {
+        return ret;
+    }
+
     // init:
-    s->buf = s->buf_start = buf;
-    s->buf_end = buf + buf_size;
+    s->buf = s->buf_start = pkt->data;
+    s->buf_end = pkt->data + pkt->size;
 
-    s->picture = *(AVFrame*)data;
+    s->picture = *pict;
     avctx->coded_frame= &s->picture;
 
     s->lambda = s->picture.quality * LAMBDA_SCALE;
@@ -965,7 +969,11 @@ static int encode_frame(AVCodecContext *avctx,
     bytestream_put_be16(&s->buf, J2K_EOC);
 
     av_log(s->avctx, AV_LOG_DEBUG, "end\n");
-    return s->buf - s->buf_start;
+    pkt->size = s->buf - s->buf_start;
+    pkt->flags |= AV_PKT_FLAG_KEY;
+    *got_packet = 1;
+
+    return 0;
 }
 
 static av_cold int j2kenc_init(AVCodecContext *avctx)
@@ -1041,7 +1049,7 @@ AVCodec ff_jpeg2000_encoder = {
     .id             = CODEC_ID_JPEG2000,
     .priv_data_size = sizeof(J2kEncoderContext),
     .init           = j2kenc_init,
-    .encode         = encode_frame,
+    .encode2        = encode_frame,
     .close          = j2kenc_destroy,
     .capabilities= CODEC_CAP_EXPERIMENTAL,
     .long_name = NULL_IF_CONFIG_SMALL("JPEG 2000"),