summaryrefslogtreecommitdiff
path: root/modules/avcodec
diff options
context:
space:
mode:
authorAlfred E. Heggestad <aeh@db.org>2016-08-17 15:58:25 +0200
committerAlfred E. Heggestad <aeh@db.org>2016-08-17 15:58:25 +0200
commita8352d927271b380cb9f9e486b25a504fd61cf0a (patch)
tree98d73649b8132ca180ed90d1b301fdd53b80b254 /modules/avcodec
parent6da11143666dde462d8f081e3f14cf89ba575508 (diff)
avcodec: fix bug using new libavcodec encoder api
Diffstat (limited to 'modules/avcodec')
-rw-r--r--modules/avcodec/encode.c24
1 files changed, 15 insertions, 9 deletions
diff --git a/modules/avcodec/encode.c b/modules/avcodec/encode.c
index ae51415..bc1dc45 100644
--- a/modules/avcodec/encode.c
+++ b/modules/avcodec/encode.c
@@ -643,23 +643,29 @@ int encode(struct videnc_state *st, bool update, const struct vidframe *frame)
#if LIBAVCODEC_VERSION_INT >= ((57<<16)+(37<<8)+100)
do {
- AVPacket avpkt;
-
- av_init_packet(&avpkt);
-
- avpkt.data = st->mb->buf;
- avpkt.size = (int)st->mb->size;
+ AVPacket *pkt;
ret = avcodec_send_frame(st->ctx, st->pict);
if (ret < 0)
return EBADMSG;
- ret = avcodec_receive_packet(st->ctx, &avpkt);
- if (ret < 0)
+ pkt = av_packet_alloc();
+ if (!pkt)
+ return ENOMEM;
+
+ ret = avcodec_receive_packet(st->ctx, pkt);
+ if (ret < 0) {
+ av_packet_free(&pkt);
return 0;
+ }
- mbuf_set_end(st->mb, avpkt.size);
+ err = mbuf_write_mem(st->mb, pkt->data, pkt->size);
+ st->mb->pos = 0;
+ av_packet_free(&pkt);
+
+ if (err)
+ return err;
} while (0);
#elif LIBAVCODEC_VERSION_INT >= ((54<<16)+(1<<8)+0)
do {