From aae499f77a1d9f9083486fc7d98baf63e0ab917f Mon Sep 17 00:00:00 2001 From: Andreas Rheinhardt Date: Mon, 31 Aug 2020 19:55:28 +0200 Subject: [PATCH] avcodec/magicyuv: Reuse array instead of using multiple arrays The lengths of the VLC codes are implicitly contained in the VLC tables itself; apart from that they are not used lateron. So it is unnecessary to store them and the very same array can be reused to parse the Huffman table for the next plane. Reviewed-by: Paul B Mahol Signed-off-by: Andreas Rheinhardt --- libavcodec/magicyuv.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libavcodec/magicyuv.c b/libavcodec/magicyuv.c index 9282b39723..a16135e683 100644 --- a/libavcodec/magicyuv.c +++ b/libavcodec/magicyuv.c @@ -68,7 +68,7 @@ typedef struct MagicYUVContext { int vshift[4]; Slice *slices[4]; // slice bitstream positions for each plane unsigned int slices_size[4]; // slice sizes for each plane - uint8_t len[4][4096]; // table of code lengths for each plane + uint8_t len[4096]; // scratch table of code lengths VLC vlc[4]; // VLC for each plane int (*huff_build)(VLC *vlc, uint8_t *len); int (*magy_decode_slice)(AVCodecContext *avctx, void *tdata, @@ -465,11 +465,11 @@ static int build_huffman(AVCodecContext *avctx, GetBitContext *gbit, int max) } for (; j < k; j++) - s->len[i][j] = x; + s->len[j] = x; if (j == max) { j = 0; - if (s->huff_build(&s->vlc[i], s->len[i])) { + if (s->huff_build(&s->vlc[i], s->len)) { av_log(avctx, AV_LOG_ERROR, "Cannot build Huffman codes\n"); return AVERROR_INVALIDDATA; }