Re: [FFmpeg-devel] [PATCH] avcodec/pngdec: Cleanup generically on init failure

2022-02-10 Thread Andreas Rheinhardt
Andreas Rheinhardt:
> Signed-off-by: Andreas Rheinhardt 
> ---
> I did not add these codecs the last time I searched for codecs
> to add the FF_CODEC_CAP_INIT_CLEANUP because I was unsure whether
> calling ff_thread_release_buffer() on a NULL frame was safe
> (it is).
> 
>  libavcodec/pngdec.c | 9 +++--
>  1 file changed, 3 insertions(+), 6 deletions(-)
> 
> diff --git a/libavcodec/pngdec.c b/libavcodec/pngdec.c
> index 3c7907..6a22f8d9d8 100644
> --- a/libavcodec/pngdec.c
> +++ b/libavcodec/pngdec.c
> @@ -1696,11 +1696,8 @@ static av_cold int png_dec_init(AVCodecContext *avctx)
>  s->avctx = avctx;
>  s->last_picture.f = av_frame_alloc();
>  s->picture.f = av_frame_alloc();
> -if (!s->last_picture.f || !s->picture.f) {
> -av_frame_free(>last_picture.f);
> -av_frame_free(>picture.f);
> +if (!s->last_picture.f || !s->picture.f)
>  return AVERROR(ENOMEM);
> -}
>  
>  ff_pngdsp_init(>dsp);
>  
> @@ -1741,7 +1738,7 @@ const AVCodec ff_apng_decoder = {
>  .decode = decode_frame_apng,
>  .update_thread_context = ONLY_IF_THREADS_ENABLED(update_thread_context),
>  .capabilities   = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS /*| 
> AV_CODEC_CAP_DRAW_HORIZ_BAND*/,
> -.caps_internal  = FF_CODEC_CAP_INIT_THREADSAFE |
> +.caps_internal  = FF_CODEC_CAP_INIT_THREADSAFE | 
> FF_CODEC_CAP_INIT_CLEANUP |
>FF_CODEC_CAP_ALLOCATE_PROGRESS,
>  };
>  #endif
> @@ -1759,6 +1756,6 @@ const AVCodec ff_png_decoder = {
>  .update_thread_context = ONLY_IF_THREADS_ENABLED(update_thread_context),
>  .capabilities   = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS /*| 
> AV_CODEC_CAP_DRAW_HORIZ_BAND*/,
>  .caps_internal  = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM | 
> FF_CODEC_CAP_INIT_THREADSAFE |
> -  FF_CODEC_CAP_ALLOCATE_PROGRESS,
> +  FF_CODEC_CAP_ALLOCATE_PROGRESS | 
> FF_CODEC_CAP_INIT_CLEANUP,
>  };
>  #endif

Will apply this later today unless there are objections.

- Andreas
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".


[FFmpeg-devel] [PATCH] avcodec/pngdec: Cleanup generically on init failure

2022-02-08 Thread Andreas Rheinhardt
Signed-off-by: Andreas Rheinhardt 
---
I did not add these codecs the last time I searched for codecs
to add the FF_CODEC_CAP_INIT_CLEANUP because I was unsure whether
calling ff_thread_release_buffer() on a NULL frame was safe
(it is).

 libavcodec/pngdec.c | 9 +++--
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/libavcodec/pngdec.c b/libavcodec/pngdec.c
index 3c7907..6a22f8d9d8 100644
--- a/libavcodec/pngdec.c
+++ b/libavcodec/pngdec.c
@@ -1696,11 +1696,8 @@ static av_cold int png_dec_init(AVCodecContext *avctx)
 s->avctx = avctx;
 s->last_picture.f = av_frame_alloc();
 s->picture.f = av_frame_alloc();
-if (!s->last_picture.f || !s->picture.f) {
-av_frame_free(>last_picture.f);
-av_frame_free(>picture.f);
+if (!s->last_picture.f || !s->picture.f)
 return AVERROR(ENOMEM);
-}
 
 ff_pngdsp_init(>dsp);
 
@@ -1741,7 +1738,7 @@ const AVCodec ff_apng_decoder = {
 .decode = decode_frame_apng,
 .update_thread_context = ONLY_IF_THREADS_ENABLED(update_thread_context),
 .capabilities   = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS /*| 
AV_CODEC_CAP_DRAW_HORIZ_BAND*/,
-.caps_internal  = FF_CODEC_CAP_INIT_THREADSAFE |
+.caps_internal  = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP 
|
   FF_CODEC_CAP_ALLOCATE_PROGRESS,
 };
 #endif
@@ -1759,6 +1756,6 @@ const AVCodec ff_png_decoder = {
 .update_thread_context = ONLY_IF_THREADS_ENABLED(update_thread_context),
 .capabilities   = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS /*| 
AV_CODEC_CAP_DRAW_HORIZ_BAND*/,
 .caps_internal  = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM | 
FF_CODEC_CAP_INIT_THREADSAFE |
-  FF_CODEC_CAP_ALLOCATE_PROGRESS,
+  FF_CODEC_CAP_ALLOCATE_PROGRESS | 
FF_CODEC_CAP_INIT_CLEANUP,
 };
 #endif
-- 
2.32.0

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".