Originally committed as revision 21940 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Måns Rullgård 2010-02-21 15:11:59 +00:00
parent 4c4e746566
commit 769c497565

View file

@ -159,45 +159,45 @@ static int build_table(VLC *vlc, int table_nb_bits,
/* if code matches the prefix, it is in the table */ /* if code matches the prefix, it is in the table */
n -= n_prefix; n -= n_prefix;
if (n > 0) { if (n > 0) {
if(flags & INIT_VLC_LE) if(flags & INIT_VLC_LE)
code_prefix2= code & (n_prefix>=32 ? 0xffffffff : (1 << n_prefix)-1); code_prefix2= code & (n_prefix>=32 ? 0xffffffff : (1 << n_prefix)-1);
else else
code_prefix2= code >> n; code_prefix2= code >> n;
if (code_prefix2 == code_prefix) { if (code_prefix2 == code_prefix) {
if (n <= table_nb_bits) { if (n <= table_nb_bits) {
/* no need to add another table */ /* no need to add another table */
j = (code << (table_nb_bits - n)) & (table_size - 1); j = (code << (table_nb_bits - n)) & (table_size - 1);
nb = 1 << (table_nb_bits - n); nb = 1 << (table_nb_bits - n);
for(k=0;k<nb;k++) { for(k=0;k<nb;k++) {
if(flags & INIT_VLC_LE) if(flags & INIT_VLC_LE)
j = (code >> n_prefix) + (k<<n); j = (code >> n_prefix) + (k<<n);
#ifdef DEBUG_VLC #ifdef DEBUG_VLC
av_log(NULL, AV_LOG_DEBUG, "%4x: code=%d n=%d\n", av_log(NULL, AV_LOG_DEBUG, "%4x: code=%d n=%d\n",
j, i, n); j, i, n);
#endif #endif
if (table[j][1] /*bits*/ != 0) { if (table[j][1] /*bits*/ != 0) {
av_log(NULL, AV_LOG_ERROR, "incorrect codes\n"); av_log(NULL, AV_LOG_ERROR, "incorrect codes\n");
return -1; return -1;
}
table[j][1] = n; //bits
table[j][0] = symbol;
j++;
} }
table[j][1] = n; //bits } else {
table[j][0] = symbol; n -= table_nb_bits;
j++; j = (code >> ((flags & INIT_VLC_LE) ? n_prefix : n)) & ((1 << table_nb_bits) - 1);
}
} else {
n -= table_nb_bits;
j = (code >> ((flags & INIT_VLC_LE) ? n_prefix : n)) & ((1 << table_nb_bits) - 1);
#ifdef DEBUG_VLC #ifdef DEBUG_VLC
av_log(NULL,AV_LOG_DEBUG,"%4x: n=%d (subtable)\n", av_log(NULL,AV_LOG_DEBUG,"%4x: n=%d (subtable)\n",
j, n); j, n);
#endif #endif
/* compute table size */ /* compute table size */
n1 = -table[j][1]; //bits n1 = -table[j][1]; //bits
if (n > n1) if (n > n1)
n1 = n; n1 = n;
table[j][1] = -n1; //bits table[j][1] = -n1; //bits
}
} }
} }
}
} }
/* second pass : fill auxillary tables recursively */ /* second pass : fill auxillary tables recursively */