[FFmpeg-cvslog] avcodec/mpeg4videoenc: Remove no-output code

Andreas Rheinhardt git at videolan.org
Mon May 26 06:25:01 EEST 2025


ffmpeg | branch: master | Andreas Rheinhardt <andreas.rheinhardt at outlook.com> | Sun May 18 18:33:55 2025 +0200| [f7bd2a5af87bbf7cf75ee8f65b0b536644b087ae] | committer: Andreas Rheinhardt

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.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>

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

 libavcodec/mpeg4videoenc.c | 76 ----------------------------------------------
 1 file changed, 76 deletions(-)

diff --git a/libavcodec/mpeg4videoenc.c b/libavcodec/mpeg4videoenc.c
index 4d574b029f..d5673be4c2 100644
--- a/libavcodec/mpeg4videoenc.c
+++ b/libavcodec/mpeg4videoenc.c
@@ -292,14 +292,6 @@ static inline void mpeg4_encode_dc(PutBitContext *s, int level, int n)
     }
 }
 
-static inline int mpeg4_get_dc_length(int level, int n)
-{
-    if (n < 4)
-        return uni_DCtab_lum_len[level + 256];
-    else
-        return uni_DCtab_chrom_len[level + 256];
-}
-
 /**
  * Encode an 8x8 block.
  * @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,
     }
 }
 
-static int mpeg4_get_block_length(MPVEncContext *const s,
-                                  const int16_t *block, int n,
-                                  int intra_dc, const uint8_t *scan_table)
-{
-    int i, last_non_zero;
-    const uint8_t *len_tab;
-    const int last_index = s->c.block_last_index[n];
-    int len = 0;
-
-    if (s->c.mb_intra) {  // Note gcc (3.2.1 at least) will optimize this away
-        /* MPEG-4 based DC predictor */
-        len += mpeg4_get_dc_length(intra_dc, n);
-        if (last_index < 1)
-            return len;
-        i = 1;
-        len_tab = uni_mpeg4_intra_rl_len;
-    } else {
-        if (last_index < 0)
-            return 0;
-        i = 0;
-        len_tab = uni_mpeg4_inter_rl_len;
-    }
-
-    /* AC coefs */
-    last_non_zero = i - 1;
-    for (; i < last_index; i++) {
-        int level = block[scan_table[i]];
-        if (level) {
-            int run = i - last_non_zero - 1;
-            level += 64;
-            if ((level & (~127)) == 0) {
-                const int index = UNI_MPEG4_ENC_INDEX(0, run, level);
-                len += len_tab[index];
-            } else {  // ESC3
-                len += 7 + 2 + 1 + 6 + 1 + 12 + 1;
-            }
-            last_non_zero = i;
-        }
-    }
-    /* if (i <= last_index) */ {
-        int level = block[scan_table[i]];
-        int run   = i - last_non_zero - 1;
-        level += 64;
-        if ((level & (~127)) == 0) {
-            const int index = UNI_MPEG4_ENC_INDEX(1, run, level);
-            len += len_tab[index];
-        } else {  // ESC3
-            len += 7 + 2 + 1 + 6 + 1 + 12 + 1;
-        }
-    }
-
-    return len;
-}
-
 static inline void mpeg4_encode_blocks(MPVEncContext *const s,
                                        const int16_t block[6][64],
                                        const int intra_dc[6],
@@ -429,29 +367,15 @@ static inline void mpeg4_encode_blocks(MPVEncContext *const s,
     int i;
 
     if (scan_table) {
-        if (s->c.avctx->flags2 & AV_CODEC_FLAG2_NO_OUTPUT) {
-            for (i = 0; i < 6; i++)
-                skip_put_bits(&s->pb,
-                              mpeg4_get_block_length(s, block[i], i,
-                                                     intra_dc[i], scan_table[i]));
-        } else {
             /* encode each block */
             for (i = 0; i < 6; i++)
                 mpeg4_encode_block(s, block[i], i,
                                    intra_dc[i], scan_table[i], dc_pb, ac_pb);
-        }
     } else {
-        if (s->c.avctx->flags2 & AV_CODEC_FLAG2_NO_OUTPUT) {
-            for (i = 0; i < 6; i++)
-                skip_put_bits(&s->pb,
-                              mpeg4_get_block_length(s, block[i], i, 0,
-                                                     s->c.intra_scantable.permutated));
-        } else {
             /* encode each block */
             for (i = 0; i < 6; i++)
                 mpeg4_encode_block(s, block[i], i, 0,
                                    s->c.intra_scantable.permutated, dc_pb, ac_pb);
-        }
     }
 }
 



More information about the ffmpeg-cvslog mailing list