From d81c5983838d71d032f3f2c3114395eb1a4549cd Mon Sep 17 00:00:00 2001 From: Fabrice Bellard Date: Thu, 6 Jun 2002 14:31:18 +0000 Subject: [PATCH] fixed multiple allocation bug Originally committed as revision 675 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/msmpeg4.c | 115 +++++++++++++++++++++++++++------------------------ 1 file changed, 60 insertions(+), 55 deletions(-) diff --git a/libavcodec/msmpeg4.c b/libavcodec/msmpeg4.c index 157d4fa..629c744 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;ivlc, 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;ivlc, 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; } -- 2.7.4