]> git.sesse.net Git - ffmpeg/blob - libavcodec/rl.h
Add a bounds check on AVProbeData input.
[ffmpeg] / libavcodec / rl.h
1 /**
2  * @file rl.h
3  * rl header.
4  */
5
6 #ifndef AVCODEC_RL_H
7 #define AVCODEC_RL_H
8
9 /** RLTable. */
10 typedef struct RLTable {
11     int n;                         ///< number of entries of table_vlc minus 1
12     int last;                      ///< number of values for last = 0
13     const uint16_t (*table_vlc)[2];
14     const int8_t *table_run;
15     const int8_t *table_level;
16     uint8_t *index_run[2];         ///< encoding only
17     int8_t *max_level[2];          ///< encoding & decoding
18     int8_t *max_run[2];            ///< encoding & decoding
19     VLC vlc;                       ///< decoding only deprected FIXME remove
20     RL_VLC_ELEM *rl_vlc[32];       ///< decoding only
21 } RLTable;
22
23 /**
24  *
25  * @param static_store static uint8_t array[2][2*MAX_RUN + MAX_LEVEL + 3] which will hold
26  *                     the level and run tables, if this is NULL av_malloc() will be used
27  */
28 void init_rl(RLTable *rl, uint8_t static_store[2][2*MAX_RUN + MAX_LEVEL + 3]);
29 void init_vlc_rl(RLTable *rl, int use_static);
30
31 static inline int get_rl_index(const RLTable *rl, int last, int run, int level)
32 {
33     int index;
34     index = rl->index_run[last][run];
35     if (index >= rl->n)
36         return rl->n;
37     if (level > rl->max_level[last][run])
38         return rl->n;
39     return index + level - 1;
40 }
41
42 #endif