ffmpeg | branch: master | Andreas Rheinhardt <andreas.rheinha...@outlook.com> | 
Mon Mar  3 02:36:55 2025 +0100| [24dbc4c2e82481f89d6fcacee1949e5038c5c2fc] | 
committer: Andreas Rheinhardt

avcodec/mjpegenc: Simplify allocating huffman table

Reuse the already computed value of macroblocks; use an array
instead of a switch, evaluate 64 * sizeof(MJpegHuffmanCode)
at compile-time.

Signed-off-by: Andreas Rheinhardt <andreas.rheinha...@outlook.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=24dbc4c2e82481f89d6fcacee1949e5038c5c2fc
---

 libavcodec/mjpegenc.c | 24 ++++++++++--------------
 1 file changed, 10 insertions(+), 14 deletions(-)

diff --git a/libavcodec/mjpegenc.c b/libavcodec/mjpegenc.c
index f34e89235d..6f9818baf2 100644
--- a/libavcodec/mjpegenc.c
+++ b/libavcodec/mjpegenc.c
@@ -277,25 +277,21 @@ fail:
     return ret;
 }
 
-static int alloc_huffman(MpegEncContext *s)
+static int alloc_huffman(MJPEGEncContext *const m2)
 {
-    MJpegContext *m = s->mjpeg_ctx;
-    size_t num_mbs, num_blocks, num_codes;
-    int blocks_per_mb;
-
-    switch (s->chroma_format) {
-    case CHROMA_420: blocks_per_mb =  6; break;
-    case CHROMA_422: blocks_per_mb =  8; break;
-    case CHROMA_444: blocks_per_mb = 12; break;
-    default: av_assert0(0);
+    MJpegContext   *const m = &m2->mjpeg;
+    MpegEncContext *const s = &m2->mpeg.s;
+    static const char blocks_per_mb[] = {
+        [CHROMA_420] = 6, [CHROMA_422] = 8, [CHROMA_444] = 12
     };
+    size_t num_blocks, num_codes;
 
     // Make sure we have enough space to hold this frame.
-    num_mbs = s->mb_width * s->mb_height;
-    num_blocks = num_mbs * blocks_per_mb;
+    num_blocks = s->mb_num * blocks_per_mb[s->chroma_format];
     num_codes = num_blocks * 64;
 
-    m->huff_buffer = av_malloc_array(num_codes, sizeof(MJpegHuffmanCode));
+    m->huff_buffer = av_malloc_array(num_codes,
+                                     64 /* codes per MB */ * 
sizeof(MJpegHuffmanCode));
     if (!m->huff_buffer)
         return AVERROR(ENOMEM);
     return 0;
@@ -369,7 +365,7 @@ static av_cold int mjpeg_encode_init(AVCodecContext *avctx)
         m->huffman = HUFFMAN_TABLE_DEFAULT;
 
     if (m->huffman == HUFFMAN_TABLE_OPTIMAL)
-        return alloc_huffman(s);
+        return alloc_huffman(m2);
 
     return 0;
 }

_______________________________________________
ffmpeg-cvslog mailing list
ffmpeg-cvslog@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog

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

Reply via email to