[FFmpeg-devel] [PATCH] avcodec/jpeglsdec: Don't allocate+free JPEGLSState for every frame
Andreas Rheinhardt
andreas.rheinhardt at outlook.com
Fri Apr 16 14:09:01 EEST 2021
Andreas Rheinhardt:
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>
> ---
> libavcodec/jpeglsdec.c | 16 ++++++++--------
> 1 file changed, 8 insertions(+), 8 deletions(-)
>
> diff --git a/libavcodec/jpeglsdec.c b/libavcodec/jpeglsdec.c
> index 69980eaa49..92df81600b 100644
> --- a/libavcodec/jpeglsdec.c
> +++ b/libavcodec/jpeglsdec.c
> @@ -45,6 +45,11 @@
> */
> //#define JLS_BROKEN
>
> +typedef struct JpegLSDecodeContext {
> + MJpegDecodeContext mjpeg;
> + JLSState state;
> +} JpegLSDecodeContext;
> +
> /**
> * Decode LSE block with initialization parameters
> */
> @@ -350,7 +355,7 @@ int ff_jpegls_decode_picture(MJpegDecodeContext *s, int near,
> {
> int i, t = 0;
> uint8_t *zero, *last, *cur;
> - JLSState *state;
> + JLSState *const state = &((JpegLSDecodeContext*)s)->state;
> int off = 0, stride = 1, width, shift, ret = 0;
> int decoded_height = 0;
>
> @@ -360,12 +365,8 @@ int ff_jpegls_decode_picture(MJpegDecodeContext *s, int near,
> last = zero;
> cur = s->picture_ptr->data[0];
>
> - state = av_mallocz(sizeof(JLSState));
> - if (!state) {
> - av_free(zero);
> - return AVERROR(ENOMEM);
> - }
> /* initialize JPEG-LS state from JPEG parameters */
> + memset(state, 0, sizeof(*state));
> state->near = near;
> state->bpp = (s->bits < 2) ? 2 : s->bits;
> state->maxval = s->maxval;
> @@ -537,7 +538,6 @@ int ff_jpegls_decode_picture(MJpegDecodeContext *s, int near,
> }
>
> end:
> - av_free(state);
> av_free(zero);
>
> return ret;
> @@ -548,7 +548,7 @@ AVCodec ff_jpegls_decoder = {
> .long_name = NULL_IF_CONFIG_SMALL("JPEG-LS"),
> .type = AVMEDIA_TYPE_VIDEO,
> .id = AV_CODEC_ID_JPEGLS,
> - .priv_data_size = sizeof(MJpegDecodeContext),
> + .priv_data_size = sizeof(JpegLSDecodeContext),
> .init = ff_mjpeg_decode_init,
> .close = ff_mjpeg_decode_end,
> .receive_frame = ff_mjpeg_receive_frame,
>
Will apply tomorrow unless there are objections.
- Andreas
More information about the ffmpeg-devel
mailing list