diff options
author | Fabrice Bellard <fabrice@bellard.org> | 2002-06-06 14:31:18 +0000 |
---|---|---|
committer | Fabrice Bellard <fabrice@bellard.org> | 2002-06-06 14:31:18 +0000 |
commit | d81c5983838d71d032f3f2c3114395eb1a4549cd (patch) | |
tree | 67493d59690ef788138df7a3a46443c4af8c85a5 /libavcodec/msmpeg4.c | |
parent | 9f4f81ed1753ceba06f02c1b5fd17ffd124b971d (diff) | |
download | ffmpeg-d81c5983838d71d032f3f2c3114395eb1a4549cd.tar.gz |
fixed multiple allocation bug
Originally committed as revision 675 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/msmpeg4.c')
-rw-r--r-- | libavcodec/msmpeg4.c | 115 |
1 files changed, 60 insertions, 55 deletions
diff --git a/libavcodec/msmpeg4.c b/libavcodec/msmpeg4.c index 157d4fa778..629c744976 100644 --- a/libavcodec/msmpeg4.c +++ b/libavcodec/msmpeg4.c @@ -760,68 +760,73 @@ static void init_h263_dc_for_msmpeg4(void) /* init all vlc decoding tables */ int msmpeg4_decode_init_vlc(MpegEncContext *s) { + static int done = 0; int i; MVTable *mv; - for(i=0;i<NB_RL_TABLES;i++) { - init_rl(&rl_table[i]); - init_vlc_rl(&rl_table[i]); - } - for(i=0;i<2;i++) { - mv = &mv_tables[i]; - init_vlc(&mv->vlc, 9, mv->n + 1, - mv->table_mv_bits, 1, 1, - mv->table_mv_code, 2, 2); - } - init_vlc(&dc_lum_vlc[0], 9, 120, - &table0_dc_lum[0][1], 8, 4, - &table0_dc_lum[0][0], 8, 4); - init_vlc(&dc_chroma_vlc[0], 9, 120, - &table0_dc_chroma[0][1], 8, 4, - &table0_dc_chroma[0][0], 8, 4); - init_vlc(&dc_lum_vlc[1], 9, 120, - &table1_dc_lum[0][1], 8, 4, - &table1_dc_lum[0][0], 8, 4); - init_vlc(&dc_chroma_vlc[1], 9, 120, - &table1_dc_chroma[0][1], 8, 4, - &table1_dc_chroma[0][0], 8, 4); + if (!done) { + done = 1; + + for(i=0;i<NB_RL_TABLES;i++) { + init_rl(&rl_table[i]); + init_vlc_rl(&rl_table[i]); + } + for(i=0;i<2;i++) { + mv = &mv_tables[i]; + init_vlc(&mv->vlc, 9, mv->n + 1, + mv->table_mv_bits, 1, 1, + mv->table_mv_code, 2, 2); + } + + init_vlc(&dc_lum_vlc[0], 9, 120, + &table0_dc_lum[0][1], 8, 4, + &table0_dc_lum[0][0], 8, 4); + init_vlc(&dc_chroma_vlc[0], 9, 120, + &table0_dc_chroma[0][1], 8, 4, + &table0_dc_chroma[0][0], 8, 4); + init_vlc(&dc_lum_vlc[1], 9, 120, + &table1_dc_lum[0][1], 8, 4, + &table1_dc_lum[0][0], 8, 4); + init_vlc(&dc_chroma_vlc[1], 9, 120, + &table1_dc_chroma[0][1], 8, 4, + &table1_dc_chroma[0][0], 8, 4); - init_h263_dc_for_msmpeg4(); - init_vlc(&v2_dc_lum_vlc, 9, 512, - &v2_dc_lum_table[0][1], 8, 4, - &v2_dc_lum_table[0][0], 8, 4); - init_vlc(&v2_dc_chroma_vlc, 9, 512, - &v2_dc_chroma_table[0][1], 8, 4, - &v2_dc_chroma_table[0][0], 8, 4); + init_h263_dc_for_msmpeg4(); + init_vlc(&v2_dc_lum_vlc, 9, 512, + &v2_dc_lum_table[0][1], 8, 4, + &v2_dc_lum_table[0][0], 8, 4); + init_vlc(&v2_dc_chroma_vlc, 9, 512, + &v2_dc_chroma_table[0][1], 8, 4, + &v2_dc_chroma_table[0][0], 8, 4); - init_vlc(&cbpy_vlc, 6, 16, - &cbpy_tab[0][1], 2, 1, - &cbpy_tab[0][0], 2, 1); - init_vlc(&v2_intra_cbpc_vlc, 3, 4, - &v2_intra_cbpc[0][1], 2, 1, - &v2_intra_cbpc[0][0], 2, 1); - init_vlc(&v2_mb_type_vlc, 5, 8, - &v2_mb_type[0][1], 2, 1, - &v2_mb_type[0][0], 2, 1); - init_vlc(&v2_mv_vlc, 9, 33, - &mvtab[0][1], 2, 1, - &mvtab[0][0], 2, 1); - - init_vlc(&mb_non_intra_vlc, 9, 128, - &table_mb_non_intra[0][1], 8, 4, - &table_mb_non_intra[0][0], 8, 4); - init_vlc(&mb_intra_vlc, 9, 64, - &table_mb_intra[0][1], 4, 2, - &table_mb_intra[0][0], 4, 2); + init_vlc(&cbpy_vlc, 6, 16, + &cbpy_tab[0][1], 2, 1, + &cbpy_tab[0][0], 2, 1); + init_vlc(&v2_intra_cbpc_vlc, 3, 4, + &v2_intra_cbpc[0][1], 2, 1, + &v2_intra_cbpc[0][0], 2, 1); + init_vlc(&v2_mb_type_vlc, 5, 8, + &v2_mb_type[0][1], 2, 1, + &v2_mb_type[0][0], 2, 1); + init_vlc(&v2_mv_vlc, 9, 33, + &mvtab[0][1], 2, 1, + &mvtab[0][0], 2, 1); + + init_vlc(&mb_non_intra_vlc, 9, 128, + &table_mb_non_intra[0][1], 8, 4, + &table_mb_non_intra[0][0], 8, 4); + init_vlc(&mb_intra_vlc, 9, 64, + &table_mb_intra[0][1], 4, 2, + &table_mb_intra[0][0], 4, 2); - init_vlc(&v1_intra_cbpc_vlc, 6, 8, - intra_MCBPC_bits, 1, 1, - intra_MCBPC_code, 1, 1); - init_vlc(&v1_inter_cbpc_vlc, 6, 25, - inter_MCBPC_bits, 1, 1, - inter_MCBPC_code, 1, 1); - + init_vlc(&v1_intra_cbpc_vlc, 6, 8, + intra_MCBPC_bits, 1, 1, + intra_MCBPC_code, 1, 1); + init_vlc(&v1_inter_cbpc_vlc, 6, 25, + inter_MCBPC_bits, 1, 1, + inter_MCBPC_code, 1, 1); + } return 0; } |