Commit 1b1bb2c4 authored by Anton Khirnov's avatar Anton Khirnov Committed by Vittorio Giovara

rl: Add error checking to ff_rl_init().

parent 324e50ee
...@@ -34,8 +34,8 @@ void ff_rl_free(RLTable *rl) ...@@ -34,8 +34,8 @@ void ff_rl_free(RLTable *rl)
} }
} }
av_cold void ff_rl_init(RLTable *rl, av_cold int ff_rl_init(RLTable *rl,
uint8_t static_store[2][2 * MAX_RUN + MAX_LEVEL + 3]) uint8_t static_store[2][2 * MAX_RUN + MAX_LEVEL + 3])
{ {
int8_t max_level[MAX_RUN + 1], max_run[MAX_LEVEL + 1]; int8_t max_level[MAX_RUN + 1], max_run[MAX_LEVEL + 1];
uint8_t index_run[MAX_RUN + 1]; uint8_t index_run[MAX_RUN + 1];
...@@ -43,7 +43,7 @@ av_cold void ff_rl_init(RLTable *rl, ...@@ -43,7 +43,7 @@ av_cold void ff_rl_init(RLTable *rl,
/* If table is static, we can quit if rl->max_level[0] is not NULL */ /* If table is static, we can quit if rl->max_level[0] is not NULL */
if (static_store && rl->max_level[0]) if (static_store && rl->max_level[0])
return; return 0;
/* compute max_level[], max_run[] and index_run[] */ /* compute max_level[], max_run[] and index_run[] */
for (last = 0; last < 2; last++) { for (last = 0; last < 2; last++) {
...@@ -70,20 +70,34 @@ av_cold void ff_rl_init(RLTable *rl, ...@@ -70,20 +70,34 @@ av_cold void ff_rl_init(RLTable *rl,
} }
if (static_store) if (static_store)
rl->max_level[last] = static_store[last]; rl->max_level[last] = static_store[last];
else else {
rl->max_level[last] = av_malloc(MAX_RUN + 1); rl->max_level[last] = av_malloc(MAX_RUN + 1);
if (!rl->max_level[last])
goto fail;
}
memcpy(rl->max_level[last], max_level, MAX_RUN + 1); memcpy(rl->max_level[last], max_level, MAX_RUN + 1);
if (static_store) if (static_store)
rl->max_run[last] = static_store[last] + MAX_RUN + 1; rl->max_run[last] = static_store[last] + MAX_RUN + 1;
else else {
rl->max_run[last] = av_malloc(MAX_LEVEL + 1); rl->max_run[last] = av_malloc(MAX_LEVEL + 1);
if (!rl->max_run[last])
goto fail;
}
memcpy(rl->max_run[last], max_run, MAX_LEVEL + 1); memcpy(rl->max_run[last], max_run, MAX_LEVEL + 1);
if (static_store) if (static_store)
rl->index_run[last] = static_store[last] + MAX_RUN + MAX_LEVEL + 2; rl->index_run[last] = static_store[last] + MAX_RUN + MAX_LEVEL + 2;
else else {
rl->index_run[last] = av_malloc(MAX_RUN + 1); rl->index_run[last] = av_malloc(MAX_RUN + 1);
if (!rl->index_run[last])
goto fail;
}
memcpy(rl->index_run[last], index_run, MAX_RUN + 1); memcpy(rl->index_run[last], index_run, MAX_RUN + 1);
} }
return 0;
fail:
ff_rl_free(rl);
return AVERROR(ENOMEM);
} }
av_cold void ff_rl_init_vlc(RLTable *rl) av_cold void ff_rl_init_vlc(RLTable *rl)
......
...@@ -53,7 +53,7 @@ typedef struct RLTable { ...@@ -53,7 +53,7 @@ typedef struct RLTable {
* @param static_store static uint8_t array[2][2*MAX_RUN + MAX_LEVEL + 3] which will hold * @param static_store static uint8_t array[2][2*MAX_RUN + MAX_LEVEL + 3] which will hold
* the level and run tables, if this is NULL av_malloc() will be used * the level and run tables, if this is NULL av_malloc() will be used
*/ */
void ff_rl_init(RLTable *rl, uint8_t static_store[2][2*MAX_RUN + MAX_LEVEL + 3]); int ff_rl_init(RLTable *rl, uint8_t static_store[2][2*MAX_RUN + MAX_LEVEL + 3]);
void ff_rl_init_vlc(RLTable *rl); void ff_rl_init_vlc(RLTable *rl);
/** /**
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment