summaryrefslogtreecommitdiff
path: root/libavcodec/rl.c
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2021-05-08 01:11:06 +0200
committerAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2022-01-09 09:38:43 +0100
commit938251c878d46aef001da2527fb7234b9f2f83ea (patch)
tree8ee6169eb76842da4a3fdd1a1f75aab0ca02c45f /libavcodec/rl.c
parent832ead2ec40392e73422f9a9d3ab1f21ea025207 (diff)
downloadffmpeg-938251c878d46aef001da2527fb7234b9f2f83ea.tar.gz
avcodec/rl: Don't pretend ff_rl_init() initializes a RLTable twice
It can't any longer, because all users of ff_rl_init() are now behind ff_thread_once() or the global codec lock. Therefore the check for whether the RLTable is already initialized can be removed; as can the stack buffers that existed to make sure that nothing is ever set to a value different from its final value. Similarly, it is not necessary to check whether the VLCs associated with the RLTable are already initialized (they aren't). Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Diffstat (limited to 'libavcodec/rl.c')
-rw-r--r--libavcodec/rl.c20
1 files changed, 6 insertions, 14 deletions
diff --git a/libavcodec/rl.c b/libavcodec/rl.c
index fab96d63a1..4ce003ccf4 100644
--- a/libavcodec/rl.c
+++ b/libavcodec/rl.c
@@ -27,16 +27,13 @@
av_cold void ff_rl_init(RLTable *rl,
uint8_t static_store[2][2 * MAX_RUN + MAX_LEVEL + 3])
{
- int8_t max_level[MAX_RUN + 1], max_run[MAX_LEVEL + 1];
- uint8_t index_run[MAX_RUN + 1];
int last, run, level, start, end, i;
- /* If rl->max_level[0] is set, this RLTable has already been initialized */
- if (rl->max_level[0])
- return;
-
/* compute max_level[], max_run[] and index_run[] */
for (last = 0; last < 2; last++) {
+ int8_t *max_level = static_store[last];
+ int8_t *max_run = static_store[last] + MAX_RUN + 1;
+ uint8_t *index_run = static_store[last] + MAX_RUN + 1 + MAX_LEVEL + 1;
if (last == 0) {
start = 0;
end = rl->last;
@@ -45,8 +42,6 @@ av_cold void ff_rl_init(RLTable *rl,
end = rl->n;
}
- memset(max_level, 0, MAX_RUN + 1);
- memset(max_run, 0, MAX_LEVEL + 1);
memset(index_run, rl->n, MAX_RUN + 1);
for (i = start; i < end; i++) {
run = rl->table_run[i];
@@ -58,12 +53,9 @@ av_cold void ff_rl_init(RLTable *rl,
if (run > max_run[level])
max_run[level] = run;
}
- rl->max_level[last] = static_store[last];
- memcpy(rl->max_level[last], max_level, MAX_RUN + 1);
- rl->max_run[last] = static_store[last] + MAX_RUN + 1;
- memcpy(rl->max_run[last], max_run, MAX_LEVEL + 1);
- rl->index_run[last] = static_store[last] + MAX_RUN + MAX_LEVEL + 2;
- memcpy(rl->index_run[last], index_run, MAX_RUN + 1);
+ rl->max_level[last] = max_level;
+ rl->max_run[last] = max_run;
+ rl->index_run[last] = index_run;
}
}