|
|
|
@ -275,8 +275,8 @@ int init_vlc_sparse(VLC *vlc, int nb_bits, int nb_codes, |
|
|
|
|
const void *symbols, int symbols_wrap, int symbols_size, |
|
|
|
|
int flags) |
|
|
|
|
{ |
|
|
|
|
VLCcode buf[nb_codes]; |
|
|
|
|
int i, j; |
|
|
|
|
VLCcode *buf; |
|
|
|
|
int i, j, ret; |
|
|
|
|
|
|
|
|
|
vlc->bits = nb_bits; |
|
|
|
|
if(flags & INIT_VLC_USE_NEW_STATIC){ |
|
|
|
@ -295,6 +295,8 @@ int init_vlc_sparse(VLC *vlc, int nb_bits, int nb_codes, |
|
|
|
|
av_log(NULL,AV_LOG_DEBUG,"build table nb_codes=%d\n", nb_codes); |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
buf = av_malloc((nb_codes+1)*sizeof(VLCcode)); |
|
|
|
|
|
|
|
|
|
assert(symbols_size <= 2 || !symbols); |
|
|
|
|
j = 0; |
|
|
|
|
#define COPY(condition)\ |
|
|
|
@ -319,7 +321,10 @@ int init_vlc_sparse(VLC *vlc, int nb_bits, int nb_codes, |
|
|
|
|
COPY(buf[j].bits && buf[j].bits <= nb_bits); |
|
|
|
|
nb_codes = j; |
|
|
|
|
|
|
|
|
|
if (build_table(vlc, nb_bits, nb_codes, buf, flags) < 0) { |
|
|
|
|
ret = build_table(vlc, nb_bits, nb_codes, buf, flags); |
|
|
|
|
|
|
|
|
|
av_free(buf); |
|
|
|
|
if (ret < 0) { |
|
|
|
|
av_freep(&vlc->table); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|