summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2022-10-22 20:46:19 +0200
committerAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2022-10-27 15:44:38 +0200
commit0486f0f5d25099f4fce2638cd0388acae2a7afa1 (patch)
tree3ea24337d766c555e1134474b547851f24996233
parent65beba7889982468c8c4e2add66ff0d3a790aaa8 (diff)
downloadffmpeg-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.c17
-rw-r--r--libavcodec/rl.h10
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]