1
mirror of https://git.videolan.org/git/ffmpeg.git synced 2024-09-29 16:23:10 +02:00

avcodec/rl: Add analogue for ff_rl_init() without RLTable

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
Andreas Rheinhardt 2022-10-22 20:46:19 +02:00
parent 65beba7889
commit 0486f0f5d2
2 changed files with 27 additions and 0 deletions

View File

@ -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])
{

View File

@ -48,6 +48,16 @@ typedef struct RLTable {
RL_VLC_ELEM *rl_vlc[32]; ///< decoding only
} 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.