Message ID | AS8P250MB0744BDD164538156AE5B8DCC8FF12@AS8P250MB0744.EURP250.PROD.OUTLOOK.COM |
---|---|
State | Accepted |
Commit | 0f3090cbd12558909055c4a701aacc86f66747bc |
Headers | show |
Series | [FFmpeg-devel,1/2] avcodec/diracdec: Use FF_CODEC_CAP_INIT_CLEANUP | expand |
Context | Check | Description |
---|---|---|
yinshiyou/make_loongarch64 | success | Make finished |
yinshiyou/make_fate_loongarch64 | success | Make fate finished |
andriy/make_x86 | success | Make finished |
andriy/make_fate_x86 | success | Make fate finished |
Andreas Rheinhardt: > This was one of the few decoders incompatible with the flag. > Also only call free_sequence_buffers(), dirac_decode_flush() > in dirac_decode_end(). > > Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> > --- > libavcodec/diracdec.c | 10 +++++----- > 1 file changed, 5 insertions(+), 5 deletions(-) > > diff --git a/libavcodec/diracdec.c b/libavcodec/diracdec.c > index 3a36479c59..5bf0dcc2db 100644 > --- a/libavcodec/diracdec.c > +++ b/libavcodec/diracdec.c > @@ -403,11 +403,8 @@ static av_cold int dirac_decode_init(AVCodecContext *avctx) > > for (i = 0; i < MAX_FRAMES; i++) { > s->all_frames[i].avframe = av_frame_alloc(); > - if (!s->all_frames[i].avframe) { > - while (i > 0) > - av_frame_free(&s->all_frames[--i].avframe); > + if (!s->all_frames[i].avframe) > return AVERROR(ENOMEM); > - } > } > ret = ff_thread_once(&dirac_arith_init, ff_dirac_init_arith_tables); > if (ret != 0) > @@ -429,7 +426,9 @@ static av_cold int dirac_decode_end(AVCodecContext *avctx) > DiracContext *s = avctx->priv_data; > int i; > > - dirac_decode_flush(avctx); > + // Necessary in case dirac_decode_init() failed > + if (s->all_frames[MAX_FRAMES - 1].avframe) > + free_sequence_buffers(s); > for (i = 0; i < MAX_FRAMES; i++) > av_frame_free(&s->all_frames[i].avframe); > > @@ -2371,4 +2370,5 @@ const FFCodec ff_dirac_decoder = { > FF_CODEC_DECODE_CB(dirac_decode_frame), > .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_SLICE_THREADS | AV_CODEC_CAP_DR1, > .flush = dirac_decode_flush, > + .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, > }; Will apply the patchset tomorrow unless there are objections. - Andreas
diff --git a/libavcodec/diracdec.c b/libavcodec/diracdec.c index 3a36479c59..5bf0dcc2db 100644 --- a/libavcodec/diracdec.c +++ b/libavcodec/diracdec.c @@ -403,11 +403,8 @@ static av_cold int dirac_decode_init(AVCodecContext *avctx) for (i = 0; i < MAX_FRAMES; i++) { s->all_frames[i].avframe = av_frame_alloc(); - if (!s->all_frames[i].avframe) { - while (i > 0) - av_frame_free(&s->all_frames[--i].avframe); + if (!s->all_frames[i].avframe) return AVERROR(ENOMEM); - } } ret = ff_thread_once(&dirac_arith_init, ff_dirac_init_arith_tables); if (ret != 0) @@ -429,7 +426,9 @@ static av_cold int dirac_decode_end(AVCodecContext *avctx) DiracContext *s = avctx->priv_data; int i; - dirac_decode_flush(avctx); + // Necessary in case dirac_decode_init() failed + if (s->all_frames[MAX_FRAMES - 1].avframe) + free_sequence_buffers(s); for (i = 0; i < MAX_FRAMES; i++) av_frame_free(&s->all_frames[i].avframe); @@ -2371,4 +2370,5 @@ const FFCodec ff_dirac_decoder = { FF_CODEC_DECODE_CB(dirac_decode_frame), .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_SLICE_THREADS | AV_CODEC_CAP_DR1, .flush = dirac_decode_flush, + .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, };
This was one of the few decoders incompatible with the flag. Also only call free_sequence_buffers(), dirac_decode_flush() in dirac_decode_end(). Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> --- libavcodec/diracdec.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)