# HG changeset patch # User michael # Date 1212176882 0 # Node ID 24e01f7cc819ca425704970fd863906bda31c89f # Parent ac6f00bed029341a8f3376de41933b85f158add8 Make init_vlc* support proper static tables instead of this broken beyond imagination alloc_static() trash. diff -r ac6f00bed029 -r 24e01f7cc819 bitstream.c --- a/bitstream.c Fri May 30 19:46:43 2008 +0000 +++ b/bitstream.c Fri May 30 19:48:02 2008 +0000 @@ -110,6 +110,8 @@ index = vlc->table_size; vlc->table_size += size; if (vlc->table_size > vlc->table_allocated) { + if(use_static>1) + abort(); //cant do anything, init_vlc() is used with too little memory vlc->table_allocated += (1 << vlc->bits); if(use_static) vlc->table = ff_realloc_static(vlc->table, @@ -135,7 +137,7 @@ VLC_TYPE (*table)[2]; table_size = 1 << table_nb_bits; - table_index = alloc_table(vlc, table_size, flags & INIT_VLC_USE_STATIC); + table_index = alloc_table(vlc, table_size, flags & (INIT_VLC_USE_STATIC|INIT_VLC_USE_NEW_STATIC)); #ifdef DEBUG_VLC av_log(NULL,AV_LOG_DEBUG,"new table index=%d size=%d code_prefix=%x n=%d\n", table_index, table_size, code_prefix, n_prefix); @@ -264,7 +266,13 @@ int flags) { vlc->bits = nb_bits; - if(!(flags & INIT_VLC_USE_STATIC)) { + if(flags & INIT_VLC_USE_NEW_STATIC){ + if(vlc->table_size && vlc->table_size == vlc->table_allocated){ + return 0; + }else if(vlc->table_size){ + abort(); // fatal error, we are called on a partially initialized table + } + }else if(!(flags & INIT_VLC_USE_STATIC)) { vlc->table = NULL; vlc->table_allocated = 0; vlc->table_size = 0; @@ -287,6 +295,8 @@ av_freep(&vlc->table); return -1; } + if((flags & INIT_VLC_USE_NEW_STATIC) && vlc->table_size != vlc->table_allocated) + av_log(NULL, AV_LOG_ERROR, "needed %d had %d\n", vlc->table_size, vlc->table_allocated); return 0; } diff -r ac6f00bed029 -r 24e01f7cc819 bitstream.h --- a/bitstream.h Fri May 30 19:46:43 2008 +0000 +++ b/bitstream.h Fri May 30 19:48:02 2008 +0000 @@ -800,8 +800,9 @@ const void *codes, int codes_wrap, int codes_size, const void *symbols, int symbols_wrap, int symbols_size, int flags); -#define INIT_VLC_USE_STATIC 1 +#define INIT_VLC_USE_STATIC 1 ///< VERY strongly deprecated and forbidden #define INIT_VLC_LE 2 +#define INIT_VLC_USE_NEW_STATIC 4 void free_vlc(VLC *vlc); /**