X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Flibxvid.c;h=22582680a07cf35012b62672e74ca17cf1734cfc;hb=f34521266ec5816eefa4c10db6098cb91e03c695;hp=cdaae2094e57fa02946b2c11eb9235831797a6f3;hpb=ef71ef5f30ddf1cd61e46628a04608892caf76d2;p=ffmpeg diff --git a/libavcodec/libxvid.c b/libavcodec/libxvid.c index cdaae2094e5..22582680a07 100644 --- a/libavcodec/libxvid.c +++ b/libavcodec/libxvid.c @@ -40,8 +40,8 @@ #include "avcodec.h" #include "internal.h" -#include "libxvid.h" #include "mpegutils.h" +#include "packet_internal.h" #if HAVE_UNISTD_H #include @@ -617,13 +617,6 @@ static av_cold int xvid_encode_init(AVCodecContext *avctx) x->intra_matrix = x->inter_matrix = NULL; -#if FF_API_PRIVATE_OPT -FF_DISABLE_DEPRECATION_WARNINGS - if (avctx->mpeg_quant) - x->mpeg_quant = avctx->mpeg_quant; -FF_ENABLE_DEPRECATION_WARNINGS -#endif - if (x->mpeg_quant) x->vol_flags |= XVID_VOL_MPEGQUANT; if ((avctx->intra_matrix || avctx->inter_matrix)) { @@ -684,17 +677,22 @@ FF_ENABLE_DEPRECATION_WARNINGS /* Encode a dummy frame to get the extradata immediately */ if (x->quicktime_format) { AVFrame *picture; - AVPacket packet = {0}; - int size, got_packet, ret; + AVPacket *packet; + int size, got_packet; - av_init_packet(&packet); + packet = av_packet_alloc(); + if (!packet) + return AVERROR(ENOMEM); picture = av_frame_alloc(); - if (!picture) + if (!picture) { + av_packet_free(&packet); return AVERROR(ENOMEM); + } 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 +701,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 +709,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); + 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); @@ -733,7 +731,7 @@ FF_ENABLE_DEPRECATION_WARNINGS static int xvid_encode_frame(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *picture, int *got_packet) { - int xerr, i, ret, user_packet = !!pkt->data; + int xerr, i, ret; struct xvid_context *x = avctx->priv_data; int mb_width = (avctx->width + 15) / 16; int mb_height = (avctx->height + 15) / 16; @@ -861,8 +859,6 @@ FF_ENABLE_DEPRECATION_WARNINGS return 0; } else { - if (!user_packet) - av_packet_unref(pkt); if (!xerr) return 0; av_log(avctx, AV_LOG_ERROR,