History

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.

Andreas Rheinhardt committed 1 year ago

Commit 24dbc4c1 parent dcd4dae1 file · +10 −14Browse files

Unified · Split

libavcodec/mjpegenc.c+10−14
@@ -277,25 +277,21 @@ fail: · 276 unmodified lines
277 return ret;277 return ret;
278}278}
279 279
280static int alloc_huffman(MpegEncContext *s)280static int alloc_huffman(MJPEGEncContext *const m2)
281{281{
282 MJpegContext *m = s->mjpeg_ctx;282 MJpegContext *const m = &m2->mjpeg;
283 size_t num_mbs, num_blocks, num_codes;283 MpegEncContext *const s = &m2->mpeg.s;
284 int blocks_per_mb;284 static const char blocks_per_mb[] = {
285 285 [CHROMA_420] = 6, [CHROMA_422] = 8, [CHROMA_444] = 12
286 switch (s->chroma_format) {
287 case CHROMA_420: blocks_per_mb = 6; break;
288 case CHROMA_422: blocks_per_mb = 8; break;
289 case CHROMA_444: blocks_per_mb = 12; break;
290 default: av_assert0(0);
291 };286 };
287 size_t num_blocks, num_codes;
292 288
293 // Make sure we have enough space to hold this frame.289 // Make sure we have enough space to hold this frame.
294 num_mbs = s->mb_width * s->mb_height;290 num_blocks = s->mb_num * blocks_per_mb[s->chroma_format];
295 num_blocks = num_mbs * blocks_per_mb;
296 num_codes = num_blocks * 64;291 num_codes = num_blocks * 64;
297 292
298 m->huff_buffer = av_malloc_array(num_codes, sizeof(MJpegHuffmanCode));293 m->huff_buffer = av_malloc_array(num_codes,
294 64 /* codes per MB */ * sizeof(MJpegHuffmanCode));
299 if (!m->huff_buffer)295 if (!m->huff_buffer)
300 return AVERROR(ENOMEM);296 return AVERROR(ENOMEM);
301 return 0;297 return 0;
@@ -369,7 +365,7 @@ static av_cold int mjpeg_encode_init(AVCodecContext *avctx) · 67 unmodified lines
369 m->huffman = HUFFMAN_TABLE_DEFAULT;365 m->huffman = HUFFMAN_TABLE_DEFAULT;
370 366
371 if (m->huffman == HUFFMAN_TABLE_OPTIMAL)367 if (m->huffman == HUFFMAN_TABLE_OPTIMAL)
372 return alloc_huffman(s);368 return alloc_huffman(m2);
373 369
374 return 0;370 return 0;
375}371}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t