1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-12-23 12:43:46 +02:00

avfilter/vf_mcdeint: use av_packet_alloc() to allocate packets

Signed-off-by: James Almer <jamrial@gmail.com>
This commit is contained in:
James Almer 2021-01-29 13:32:19 -03:00
parent 54cb30ce64
commit 79c6e040f8

View File

@ -74,6 +74,7 @@ typedef struct MCDeintContext {
int mode; ///< MCDeintMode int mode; ///< MCDeintMode
int parity; ///< MCDeintParity int parity; ///< MCDeintParity
int qp; int qp;
AVPacket *pkt;
AVCodecContext *enc_ctx; AVCodecContext *enc_ctx;
} MCDeintContext; } MCDeintContext;
@ -112,6 +113,9 @@ static int config_props(AVFilterLink *inlink)
return AVERROR(EINVAL); return AVERROR(EINVAL);
} }
mcdeint->pkt = av_packet_alloc();
if (!mcdeint->pkt)
return AVERROR(ENOMEM);
mcdeint->enc_ctx = avcodec_alloc_context3(enc); mcdeint->enc_ctx = avcodec_alloc_context3(enc);
if (!mcdeint->enc_ctx) if (!mcdeint->enc_ctx)
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
@ -154,6 +158,7 @@ static av_cold void uninit(AVFilterContext *ctx)
{ {
MCDeintContext *mcdeint = ctx->priv; MCDeintContext *mcdeint = ctx->priv;
av_packet_free(&mcdeint->pkt);
avcodec_free_context(&mcdeint->enc_ctx); avcodec_free_context(&mcdeint->enc_ctx);
} }
@ -173,7 +178,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *inpic)
MCDeintContext *mcdeint = inlink->dst->priv; MCDeintContext *mcdeint = inlink->dst->priv;
AVFilterLink *outlink = inlink->dst->outputs[0]; AVFilterLink *outlink = inlink->dst->outputs[0];
AVFrame *outpic, *frame_dec; AVFrame *outpic, *frame_dec;
AVPacket pkt = {0}; AVPacket *pkt = mcdeint->pkt;
int x, y, i, ret, got_frame = 0; int x, y, i, ret, got_frame = 0;
outpic = ff_get_video_buffer(outlink, outlink->w, outlink->h); outpic = ff_get_video_buffer(outlink, outlink->w, outlink->h);
@ -184,9 +189,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *inpic)
av_frame_copy_props(outpic, inpic); av_frame_copy_props(outpic, inpic);
inpic->quality = mcdeint->qp * FF_QP2LAMBDA; inpic->quality = mcdeint->qp * FF_QP2LAMBDA;
av_init_packet(&pkt); ret = avcodec_encode_video2(mcdeint->enc_ctx, pkt, inpic, &got_frame);
ret = avcodec_encode_video2(mcdeint->enc_ctx, &pkt, inpic, &got_frame);
if (ret < 0) if (ret < 0)
goto end; goto end;
@ -274,7 +277,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *inpic)
mcdeint->parity ^= 1; mcdeint->parity ^= 1;
end: end:
av_packet_unref(&pkt); av_packet_unref(pkt);
av_frame_free(&inpic); av_frame_free(&inpic);
if (ret < 0) { if (ret < 0) {
av_frame_free(&outpic); av_frame_free(&outpic);