aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2021-04-14 21:24:33 +0200
committerAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2021-04-18 04:32:15 +0200
commit9b3c46a081a9f01559082bf7a154fc6be1e06c18 (patch)
treecea171937cd35edddd0d163604a1d6b040db4ff7
parent5627da3555ecbf6fbfd98d045abbc7b63bc98fce (diff)
downloadffmpeg-9b3c46a081a9f01559082bf7a154fc6be1e06c18.tar.gz
avcodec/jpeglsdec: Don't allocate+free JPEGLSState for every frame
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
-rw-r--r--libavcodec/jpeglsdec.c16
1 files 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,