diff options
author | Andreas Rheinhardt <andreas.rheinhardt@outlook.com> | 2022-10-22 20:46:19 +0200 |
---|---|---|
committer | Andreas Rheinhardt <andreas.rheinhardt@outlook.com> | 2022-10-27 15:44:38 +0200 |
commit | 0486f0f5d25099f4fce2638cd0388acae2a7afa1 (patch) | |
tree | 3ea24337d766c555e1134474b547851f24996233 | |
parent | 65beba7889982468c8c4e2add66ff0d3a790aaa8 (diff) | |
download | ffmpeg-0486f0f5d25099f4fce2638cd0388acae2a7afa1.tar.gz |
avcodec/rl: Add analogue for ff_rl_init() without RLTable
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
-rw-r--r-- | libavcodec/rl.c | 17 | ||||
-rw-r--r-- | libavcodec/rl.h | 10 |
2 files changed, 27 insertions, 0 deletions
diff --git a/libavcodec/rl.c b/libavcodec/rl.c index 645a5362f7..3f8271d37e 100644 --- a/libavcodec/rl.c +++ b/libavcodec/rl.c @@ -24,6 +24,23 @@ #include "rl.h" +av_cold void ff_rl_init_level_run(uint8_t max_level[MAX_LEVEL + 1], + uint8_t index_run[MAX_RUN + 1], + const uint8_t table_run[/* n */], + const uint8_t table_level[/* n*/], + int n) +{ + memset(index_run, n, MAX_RUN + 1); + for (int i = 0; i < n; i++) { + int run = table_run[i]; + int level = table_level[i]; + if (index_run[run] == n) + index_run[run] = i; + if (level > max_level[run]) + max_level[run] = level; + } +} + av_cold void ff_rl_init(RLTable *rl, uint8_t static_store[2][2 * MAX_RUN + MAX_LEVEL + 3]) { diff --git a/libavcodec/rl.h b/libavcodec/rl.h index 07e3da5003..4380fda272 100644 --- a/libavcodec/rl.h +++ b/libavcodec/rl.h @@ -49,6 +49,16 @@ typedef struct RLTable { } RLTable; /** + * Initialize max_level and index_run from table_run and table_level; + * this is equivalent to initializing RLTable.max_level[0] and + * RLTable.index_run[0] with ff_rl_init(). + */ +void ff_rl_init_level_run(uint8_t max_level[MAX_LEVEL + 1], + uint8_t index_run[MAX_RUN + 1], + const uint8_t table_run[/* n */], + const uint8_t table_level[/* n*/], int n); + +/** * Initialize index_run, max_level and max_run from n, last, table_vlc, * table_run and table_level. * @param static_store static uint8_t array[2][2*MAX_RUN + MAX_LEVEL + 3] |