1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-12-23 12:43:46 +02:00

kill av_mallocz_static() calls in init_rl()

Originally committed as revision 8402 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Michael Niedermayer 2007-03-14 13:19:19 +00:00
parent efddbce9d0
commit 3502a54f59
6 changed files with 38 additions and 25 deletions

View File

@ -58,6 +58,8 @@ typedef struct H261Context{
int gob_start_code_skipped; // 1 if gob start code is already read before gob header is read
}H261Context;
static uint8_t static_rl_table_store[2][2*MAX_RUN + MAX_LEVEL + 3];
void ff_h261_loop_filter(MpegEncContext *s){
H261Context * h= (H261Context*)s;
const int linesize = s->linesize;
@ -285,7 +287,7 @@ void ff_h261_encode_init(MpegEncContext *s){
if (!done) {
done = 1;
init_rl(&h261_rl_tcoeff, 1);
init_rl(&h261_rl_tcoeff, static_rl_table_store);
}
s->min_qcoeff= -127;
@ -392,7 +394,7 @@ static void h261_decode_init_vlc(H261Context *h){
init_vlc(&h261_cbp_vlc, H261_CBP_VLC_BITS, 63,
&h261_cbp_tab[0][1], 2, 1,
&h261_cbp_tab[0][0], 2, 1, 1);
init_rl(&h261_rl_tcoeff, 1);
init_rl(&h261_rl_tcoeff, static_rl_table_store);
init_vlc_rl(&h261_rl_tcoeff, 1);
}
}

View File

@ -101,6 +101,8 @@ static uint8_t uni_h263_inter_rl_len [64*64*2*2];
//#define UNI_MPEG4_ENC_INDEX(last,run,level) ((last)*128*64 + (run) + (level)*64)
#define UNI_MPEG4_ENC_INDEX(last,run,level) ((last)*128*64 + (run)*128 + (level))
static uint8_t static_rl_table_store[5][2][2*MAX_RUN + MAX_LEVEL + 3];
/* mpeg4
inter
max level: 24/6
@ -2030,9 +2032,9 @@ void h263_encode_init(MpegEncContext *s)
init_uni_dc_tab();
init_rl(&rl_inter, 1);
init_rl(&rl_intra, 1);
init_rl(&rl_intra_aic, 1);
init_rl(&rl_inter, static_rl_table_store[0]);
init_rl(&rl_intra, static_rl_table_store[1]);
init_rl(&rl_intra_aic, static_rl_table_store[2]);
init_uni_mpeg4_rl_tab(&rl_intra, uni_mpeg4_intra_rl_bits, uni_mpeg4_intra_rl_len);
init_uni_mpeg4_rl_tab(&rl_inter, uni_mpeg4_inter_rl_bits, uni_mpeg4_inter_rl_len);
@ -2991,11 +2993,11 @@ void h263_decode_init_vlc(MpegEncContext *s)
init_vlc(&mv_vlc, MV_VLC_BITS, 33,
&mvtab[0][1], 2, 1,
&mvtab[0][0], 2, 1, 1);
init_rl(&rl_inter, 1);
init_rl(&rl_intra, 1);
init_rl(&rvlc_rl_inter, 1);
init_rl(&rvlc_rl_intra, 1);
init_rl(&rl_intra_aic, 1);
init_rl(&rl_inter, static_rl_table_store[0]);
init_rl(&rl_intra, static_rl_table_store[1]);
init_rl(&rvlc_rl_inter, static_rl_table_store[3]);
init_rl(&rvlc_rl_intra, static_rl_table_store[4]);
init_rl(&rl_intra_aic, static_rl_table_store[2]);
init_vlc_rl(&rl_inter, 1);
init_vlc_rl(&rl_intra, 1);
init_vlc_rl(&rvlc_rl_inter, 1);

View File

@ -108,6 +108,8 @@ static uint8_t mpeg1_index_run[2][64];
static int8_t mpeg1_max_level[2][64];
#endif //CONFIG_ENCODERS
static uint8_t static_rl_table_store[2][2][2*MAX_RUN + MAX_LEVEL + 3];
static void init_2d_vlc_rl(RLTable *rl, int use_static)
{
int i;
@ -825,9 +827,9 @@ void ff_mpeg1_encode_init(MpegEncContext *s)
int i;
done=1;
init_rl(&rl_mpeg1, 1);
init_rl(&rl_mpeg1, static_rl_table_store[0]);
if(s->intra_vlc_format)
init_rl(&rl_mpeg2, 1);
init_rl(&rl_mpeg2, static_rl_table_store[1]);
for(i=0; i<64; i++)
{
@ -1075,8 +1077,8 @@ static void init_vlcs(void)
init_vlc(&mb_btype_vlc, MB_BTYPE_VLC_BITS, 11,
&table_mb_btype[0][1], 2, 1,
&table_mb_btype[0][0], 2, 1, 1);
init_rl(&rl_mpeg1, 1);
init_rl(&rl_mpeg2, 1);
init_rl(&rl_mpeg1, static_rl_table_store[0]);
init_rl(&rl_mpeg2, static_rl_table_store[1]);
init_2d_vlc_rl(&rl_mpeg1, 1);
init_2d_vlc_rl(&rl_mpeg2, 1);

View File

@ -1411,14 +1411,14 @@ int MPV_encode_end(AVCodecContext *avctx)
#endif //CONFIG_ENCODERS
void init_rl(RLTable *rl, int use_static)
void init_rl(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 table is static, we can quit if rl->max_level[0] is not NULL */
if(use_static && rl->max_level[0])
if(static_store && rl->max_level[0])
return;
/* compute max_level[], max_run[] and index_run[] */
@ -1444,18 +1444,18 @@ void init_rl(RLTable *rl, int use_static)
if (run > max_run[level])
max_run[level] = run;
}
if(use_static)
rl->max_level[last] = av_mallocz_static(MAX_RUN + 1);
if(static_store)
rl->max_level[last] = static_store[last];
else
rl->max_level[last] = av_malloc(MAX_RUN + 1);
memcpy(rl->max_level[last], max_level, MAX_RUN + 1);
if(use_static)
rl->max_run[last] = av_mallocz_static(MAX_LEVEL + 1);
if(static_store)
rl->max_run[last] = static_store[last] + MAX_RUN + 1;
else
rl->max_run[last] = av_malloc(MAX_LEVEL + 1);
memcpy(rl->max_run[last], max_run, MAX_LEVEL + 1);
if(use_static)
rl->index_run[last] = av_mallocz_static(MAX_RUN + 1);
if(static_store)
rl->index_run[last] = static_store[last] + MAX_RUN + MAX_LEVEL + 2;
else
rl->index_run[last] = av_malloc(MAX_RUN + 1);
memcpy(rl->index_run[last], index_run, MAX_RUN + 1);

View File

@ -91,6 +91,8 @@ int frame_count = 0;
static uint8_t rl_length[NB_RL_TABLES][MAX_LEVEL+1][MAX_RUN+1][2];
#endif //CONFIG_ENCODERS
static uint8_t static_rl_table_store[NB_RL_TABLES][2][2*MAX_RUN + MAX_LEVEL + 3];
static void common_init(MpegEncContext * s)
{
static int inited=0;
@ -186,7 +188,7 @@ void ff_msmpeg4_encode_init(MpegEncContext *s)
init_mv_table(&mv_tables[0]);
init_mv_table(&mv_tables[1]);
for(i=0;i<NB_RL_TABLES;i++)
init_rl(&rl_table[i], 1);
init_rl(&rl_table[i], static_rl_table_store[i]);
for(i=0; i<NB_RL_TABLES; i++){
int level;
@ -1051,7 +1053,7 @@ int ff_msmpeg4_decode_init(MpegEncContext *s)
done = 1;
for(i=0;i<NB_RL_TABLES;i++) {
init_rl(&rl_table[i], 1);
init_rl(&rl_table[i], static_rl_table_store[i]);
init_vlc_rl(&rl_table[i], 1);
}
for(i=0;i<2;i++) {

View File

@ -20,7 +20,12 @@ typedef struct RLTable {
RL_VLC_ELEM *rl_vlc[32]; ///< decoding only
} RLTable;
void init_rl(RLTable *rl, int use_static);
/**
*
* @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
*/
void init_rl(RLTable *rl, uint8_t static_store[2][2*MAX_RUN + MAX_LEVEL + 3]);
void init_vlc_rl(RLTable *rl, int use_static);
static inline int get_rl_index(const RLTable *rl, int last, int run, int level)