[FFmpeg-devel] [PATCH 14/17] avcodec/mpeg12enc: Don't initialize unused parts of RLTable

Andreas Rheinhardt andreas.rheinhardt at outlook.com
Sun Oct 23 22:36:07 EEST 2022


ff_rl_init() initializes RLTable.(max_level|max_run|index_run);
max_run is unused by the MPEG-1/2 encoders (as well as SpeedHQ).
Furthermore, it initializes these things twice (for two passes),
but the second half of this is never used.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>
---
 libavcodec/mpeg12enc.c | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/libavcodec/mpeg12enc.c b/libavcodec/mpeg12enc.c
index 4d10b42bf2..2db1d93d0e 100644
--- a/libavcodec/mpeg12enc.c
+++ b/libavcodec/mpeg12enc.c
@@ -49,6 +49,7 @@
 #include "mpegvideodata.h"
 #include "mpegvideoenc.h"
 #include "profiles.h"
+#include "rl.h"
 
 #if CONFIG_MPEG1VIDEO_ENCODER || CONFIG_MPEG2VIDEO_ENCODER
 static const uint8_t svcd_scan_offset_placeholder[] = {
@@ -62,6 +63,9 @@ static uint8_t fcode_tab[MAX_MV * 2 + 1];
 static uint8_t uni_mpeg1_ac_vlc_len[64 * 64 * 2];
 static uint8_t uni_mpeg2_ac_vlc_len[64 * 64 * 2];
 
+static uint8_t mpeg12_max_level[MAX_LEVEL + 1];
+static uint8_t mpeg12_index_run[MAX_RUN   + 1];
+
 /* simple include everything table for dc, first byte is bits
  * number next 3 are code */
 static uint32_t mpeg1_lum_dc_uni[512];
@@ -757,8 +761,8 @@ next_coef:
             MASK_ABS(sign, alevel);
             sign &= 1;
 
-            if (alevel <= ff_rl_mpeg1.max_level[0][run]) {
-                code = ff_rl_mpeg1.index_run[0][run] + alevel - 1;
+            if (alevel <= mpeg12_max_level[run]) {
+                code = mpeg12_index_run[run] + alevel - 1;
                 /* store the VLC & sign at once */
                 put_bits(&s->pb, table_vlc[code][1] + 1,
                          (table_vlc[code][0] << 1) + sign);
@@ -1076,13 +1080,12 @@ void ff_mpeg1_encode_mb(MpegEncContext *s, int16_t block[8][64],
 
 static av_cold void mpeg12_encode_init_static(void)
 {
-    static uint8_t mpeg12_static_rl_table_store[2][2*MAX_RUN + MAX_LEVEL + 3];
-
-    ff_rl_init(&ff_rl_mpeg1, mpeg12_static_rl_table_store);
+    ff_rl_init_level_run(mpeg12_max_level, mpeg12_index_run,
+                         ff_mpeg12_run, ff_mpeg12_level, MPEG12_RL_NB_ELEMS);
 
-    ff_mpeg1_init_uni_ac_vlc(ff_rl_mpeg1.max_level[0], ff_rl_mpeg1.index_run[0],
+    ff_mpeg1_init_uni_ac_vlc(mpeg12_max_level, mpeg12_index_run,
                              ff_mpeg1_vlc_table, uni_mpeg1_ac_vlc_len);
-    ff_mpeg1_init_uni_ac_vlc(ff_rl_mpeg1.max_level[0], ff_rl_mpeg1.index_run[0],
+    ff_mpeg1_init_uni_ac_vlc(mpeg12_max_level, mpeg12_index_run,
                              ff_mpeg2_vlc_table, uni_mpeg2_ac_vlc_len);
 
     /* build unified dc encoding tables */
-- 
2.34.1



More information about the ffmpeg-devel mailing list