History

avcodec/mpeg4videoenc: Remove no-output code

While it offers modest speedups compared to the ordinary code, removing it completely offers even bigger speedups; and given that these speedups also exist in the ordinary mode, they are even more important. The no-output code has a 7.8% performance improvement (based on benchmarking mpeg4_encode_mb()), yet removing the no-output code resulted in a 9.4% improvement. Furthermore, the no-output code was broken for the majority of its existence (until 9207dc3b0db368bb9cf5eb295cbc1129c2975e31) and no one complained, so it is likely not used at all.

Andreas Rheinhardt committed 1 year ago

Commit f7bd2a51 parent 2a59cb01 file · +0 −76Browse files

Unified · Split

libavcodec/mpeg4videoenc.c+0−76
@@ -292,14 +292,6 @@ static inline void mpeg4_encode_dc(PutBitContext *s, int level, int n) · 291 unmodified lines
292292 }
293293 }
294294
295−static inline int mpeg4_get_dc_length(int level, int n)
296−{
297− if (n < 4)
298− return uni_DCtab_lum_len[level + 256];
299− else
300− return uni_DCtab_chrom_len[level + 256];
301−}
302−
303295 /**
304296 * Encode an 8x8 block.
305297 * @param n block index (0-3 are luma, 4-5 are chroma)
@@ -365,60 +357,6 @@ static inline void mpeg4_encode_block(const MPVEncContext *const s, · 59 unmodified lines
365357 }
366358 }
367359
368−static int mpeg4_get_block_length(MPVEncContext *const s,
369− const int16_t *block, int n,
370− int intra_dc, const uint8_t *scan_table)
371−{
372− int i, last_non_zero;
373− const uint8_t *len_tab;
374− const int last_index = s->c.block_last_index[n];
375− int len = 0;
376−
377− if (s->c.mb_intra) { // Note gcc (3.2.1 at least) will optimize this away
378− /* MPEG-4 based DC predictor */
379− len += mpeg4_get_dc_length(intra_dc, n);
380− if (last_index < 1)
381− return len;
382− i = 1;
383− len_tab = uni_mpeg4_intra_rl_len;
384− } else {
385− if (last_index < 0)
386− return 0;
387− i = 0;
388− len_tab = uni_mpeg4_inter_rl_len;
389− }
390−
391− /* AC coefs */
392− last_non_zero = i - 1;
393− for (; i < last_index; i++) {
394− int level = block[scan_table[i]];
395− if (level) {
396− int run = i - last_non_zero - 1;
397− level += 64;
398− if ((level & (~127)) == 0) {
399− const int index = UNI_MPEG4_ENC_INDEX(0, run, level);
400− len += len_tab[index];
401− } else { // ESC3
402− len += 7 + 2 + 1 + 6 + 1 + 12 + 1;
403− }
404− last_non_zero = i;
405− }
406− }
407− /* if (i <= last_index) */ {
408− int level = block[scan_table[i]];
409− int run = i - last_non_zero - 1;
410− level += 64;
411− if ((level & (~127)) == 0) {
412− const int index = UNI_MPEG4_ENC_INDEX(1, run, level);
413− len += len_tab[index];
414− } else { // ESC3
415− len += 7 + 2 + 1 + 6 + 1 + 12 + 1;
416− }
417− }
418−
419− return len;
420−}
421−
422360 static inline void mpeg4_encode_blocks(MPVEncContext *const s,
423361 const int16_t block[6][64],
424362 const int intra_dc[6],
@@ -429,29 +367,15 @@ static inline void mpeg4_encode_blocks(MPVEncContext *const s, · 4 unmodified lines
429367 int i;
430368
431369 if (scan_table) {
432− if (s->c.avctx->flags2 & AV_CODEC_FLAG2_NO_OUTPUT) {
433− for (i = 0; i < 6; i++)
434− skip_put_bits(&s->pb,
435− mpeg4_get_block_length(s, block[i], i,
436− intra_dc[i], scan_table[i]));
437− } else {
438370 /* encode each block */
439371 for (i = 0; i < 6; i++)
440372 mpeg4_encode_block(s, block[i], i,
441373 intra_dc[i], scan_table[i], dc_pb, ac_pb);
442− }
443374 } else {
444− if (s->c.avctx->flags2 & AV_CODEC_FLAG2_NO_OUTPUT) {
445− for (i = 0; i < 6; i++)
446− skip_put_bits(&s->pb,
447− mpeg4_get_block_length(s, block[i], i, 0,
448− s->c.intra_scantable.permutated));
449− } else {
450375 /* encode each block */
451376 for (i = 0; i < 6; i++)
452377 mpeg4_encode_block(s, block[i], i, 0,
453378 s->c.intra_scantable.permutated, dc_pb, ac_pb);
454− }
455379 }
456380 }
457381

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