Mercurial > libavcodec.hg
changeset 6935:24e01f7cc819 libavcodec
Make init_vlc* support proper static tables instead of this broken beyond
imagination alloc_static() trash.
author | michael |
---|---|
date | Fri, 30 May 2008 19:48:02 +0000 |
parents | ac6f00bed029 |
children | 97798862a414 |
files | bitstream.c bitstream.h |
diffstat | 2 files changed, 14 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- 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; }
--- 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); /**