diff --git a/libavcodec/libxvid.c b/libavcodec/libxvid.c index dda8b94c4a..7dc6859571 100644 --- a/libavcodec/libxvid.c +++ b/libavcodec/libxvid.c @@ -684,10 +684,12 @@ FF_ENABLE_DEPRECATION_WARNINGS /* Encode a dummy frame to get the extradata immediately */ if (x->quicktime_format) { AVFrame *picture; - AVPacket packet = {0}; + AVPacket *packet; int size, got_packet, ret; - av_init_packet(&packet); + packet = av_packet_alloc(); + if (!packet) + return AVERROR(ENOMEM); picture = av_frame_alloc(); if (!picture) @@ -695,6 +697,7 @@ FF_ENABLE_DEPRECATION_WARNINGS xerr = xvid_encore(NULL, XVID_ENC_CREATE, &xvid_enc_create, NULL); if( xerr ) { + av_packet_free(&packet); av_frame_free(&picture); av_log(avctx, AV_LOG_ERROR, "Xvid: Could not create encoder reference\n"); return AVERROR_EXTERNAL; @@ -703,6 +706,7 @@ FF_ENABLE_DEPRECATION_WARNINGS size = ((avctx->width + 1) & ~1) * ((avctx->height + 1) & ~1); picture->data[0] = av_malloc(size + size / 2); if (!picture->data[0]) { + av_packet_free(&packet); av_frame_free(&picture); return AVERROR(ENOMEM); } @@ -710,9 +714,8 @@ FF_ENABLE_DEPRECATION_WARNINGS picture->data[2] = picture->data[1] + size / 4; memset(picture->data[0], 0, size); memset(picture->data[1], 128, size / 2); - ret = xvid_encode_frame(avctx, &packet, picture, &got_packet); - if (!ret && got_packet) - av_packet_unref(&packet); + ret = xvid_encode_frame(avctx, packet, picture, &got_packet); + av_packet_free(&packet); av_free(picture->data[0]); av_frame_free(&picture); xvid_encore(x->encoder_handle, XVID_ENC_DESTROY, NULL, NULL);