diff options
author | Alfred E. Heggestad <aeh@db.org> | 2016-08-17 15:58:25 +0200 |
---|---|---|
committer | Alfred E. Heggestad <aeh@db.org> | 2016-08-17 15:58:25 +0200 |
commit | a8352d927271b380cb9f9e486b25a504fd61cf0a (patch) | |
tree | 98d73649b8132ca180ed90d1b301fdd53b80b254 /modules/avcodec | |
parent | 6da11143666dde462d8f081e3f14cf89ba575508 (diff) |
avcodec: fix bug using new libavcodec encoder api
Diffstat (limited to 'modules/avcodec')
-rw-r--r-- | modules/avcodec/encode.c | 24 |
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 { |