forked from KolibriOS/kolibrios
3eda462807
Programs: fasm updated to 1.67.14, small fixes in desktop, stackcfg, calc, board, pipes, freecell, big cleanup of unused programs, added some applications from 0.6.3.0 distr... git-svn-id: svn://kolibrios.org@205 a494cfbc-eb01-0410-851d-a64ba20cac60
128 lines
4.3 KiB
C
128 lines
4.3 KiB
C
#include "layer3.h"
|
|
|
|
extern int m_channels;
|
|
extern int m_ms_mode, m_is_mode;
|
|
|
|
extern SIDE_INFO m_side_info;
|
|
|
|
int L3get_side_info1()
|
|
{
|
|
int gr, ch, size;
|
|
|
|
m_side_info.main_data_begin = bitget(9);
|
|
if (m_channels == 1) {
|
|
m_side_info.private_bits = bitget(5);
|
|
size = 17;
|
|
}
|
|
else {
|
|
m_side_info.private_bits = bitget(3);
|
|
size = 32;
|
|
}
|
|
for (ch = 0; ch < m_channels; ch ++)
|
|
m_side_info.scfsi[ch] = bitget(4);
|
|
|
|
for (gr = 0; gr < 2; gr ++) {
|
|
for (ch = 0; ch < m_channels; ch ++) {
|
|
GR_INFO* gr_info = &m_side_info.gr[gr][ch];
|
|
gr_info->part2_3_length = bitget(12);
|
|
gr_info->big_values = bitget(9);
|
|
gr_info->global_gain = bitget(8);
|
|
//gr_info->global_gain += gain_adjust;
|
|
if (m_ms_mode) gr_info->global_gain -= 2;
|
|
gr_info->scalefac_compress = bitget(4);
|
|
gr_info->window_switching_flag = bitget(1);
|
|
if (gr_info->window_switching_flag) {
|
|
gr_info->block_type = bitget(2);
|
|
gr_info->mixed_block_flag = bitget(1);
|
|
gr_info->table_select[0] = bitget(5);
|
|
gr_info->table_select[1] = bitget(5);
|
|
gr_info->subblock_gain[0] = bitget(3);
|
|
gr_info->subblock_gain[1] = bitget(3);
|
|
gr_info->subblock_gain[2] = bitget(3);
|
|
/* region count set in terms of long block cb's/bands */
|
|
/* r1 set so r0+r1+1 = 21 (lookup produces 576 bands ) */
|
|
/* if(window_switching_flag) always 36 samples in region0 */
|
|
gr_info->region0_count = (8 - 1); /* 36 samples */
|
|
gr_info->region1_count = 20 - (8 - 1);
|
|
}
|
|
else {
|
|
gr_info->mixed_block_flag = 0;
|
|
gr_info->block_type = 0;
|
|
gr_info->table_select[0] = bitget(5);
|
|
gr_info->table_select[1] = bitget(5);
|
|
gr_info->table_select[2] = bitget(5);
|
|
gr_info->region0_count = bitget(4);
|
|
gr_info->region1_count = bitget(3);
|
|
}
|
|
gr_info->preflag = bitget(1);
|
|
gr_info->scalefac_scale = bitget(1);
|
|
gr_info->count1table_select = bitget(1);
|
|
}
|
|
}
|
|
return size;
|
|
}
|
|
|
|
int L3get_side_info2(int gr)
|
|
{
|
|
int ch, size;
|
|
|
|
m_side_info.main_data_begin = bitget(8);
|
|
if (m_channels == 1) {
|
|
m_side_info.private_bits = bitget(1);
|
|
size = 9;
|
|
}
|
|
else {
|
|
m_side_info.private_bits = bitget(2);
|
|
size = 17;
|
|
}
|
|
m_side_info.scfsi[0] = 0;
|
|
m_side_info.scfsi[1] = 0;
|
|
|
|
for (ch = 0; ch < m_channels; ch ++) {
|
|
m_side_info.gr[gr][ch].part2_3_length = bitget(12);
|
|
m_side_info.gr[gr][ch].big_values = bitget(9);
|
|
m_side_info.gr[gr][ch].global_gain = bitget(8);// + gain_adjust;
|
|
if (m_ms_mode) m_side_info.gr[gr][ch].global_gain -= 2;
|
|
m_side_info.gr[gr][ch].scalefac_compress = bitget(9);
|
|
m_side_info.gr[gr][ch].window_switching_flag = bitget(1);
|
|
if (m_side_info.gr[gr][ch].window_switching_flag) {
|
|
m_side_info.gr[gr][ch].block_type = bitget(2);
|
|
m_side_info.gr[gr][ch].mixed_block_flag = bitget(1);
|
|
m_side_info.gr[gr][ch].table_select[0] = bitget(5);
|
|
m_side_info.gr[gr][ch].table_select[1] = bitget(5);
|
|
m_side_info.gr[gr][ch].subblock_gain[0] = bitget(3);
|
|
m_side_info.gr[gr][ch].subblock_gain[1] = bitget(3);
|
|
m_side_info.gr[gr][ch].subblock_gain[2] = bitget(3);
|
|
/* region count set in terms of long block cb's/bands */
|
|
/* r1 set so r0+r1+1 = 21 (lookup produces 576 bands ) */
|
|
/* bt=1 or 3 54 samples */
|
|
/* bt=2 mixed=0 36 samples */
|
|
/* bt=2 mixed=1 54 (8 long sf) samples? or maybe 36 */
|
|
/* region0 discussion says 54 but this would mix long */
|
|
/* and short in region0 if scale factors switch */
|
|
/* at band 36 (6 long scale factors) */
|
|
if ((m_side_info.gr[gr][ch].block_type == 2)) {
|
|
m_side_info.gr[gr][ch].region0_count = (6 - 1); /* 36 samples */
|
|
m_side_info.gr[gr][ch].region1_count = 20 - (6 - 1);
|
|
}
|
|
else {/* long block type 1 or 3 */
|
|
m_side_info.gr[gr][ch].region0_count = (8 - 1); /* 54 samples */
|
|
m_side_info.gr[gr][ch].region1_count = 20 - (8 - 1);
|
|
}
|
|
}
|
|
else {
|
|
m_side_info.gr[gr][ch].mixed_block_flag = 0;
|
|
m_side_info.gr[gr][ch].block_type = 0;
|
|
m_side_info.gr[gr][ch].table_select[0] = bitget(5);
|
|
m_side_info.gr[gr][ch].table_select[1] = bitget(5);
|
|
m_side_info.gr[gr][ch].table_select[2] = bitget(5);
|
|
m_side_info.gr[gr][ch].region0_count = bitget(4);
|
|
m_side_info.gr[gr][ch].region1_count = bitget(3);
|
|
}
|
|
m_side_info.gr[gr][ch].preflag = 0;
|
|
m_side_info.gr[gr][ch].scalefac_scale = bitget(1);
|
|
m_side_info.gr[gr][ch].count1table_select = bitget(1);
|
|
}
|
|
return size;
|
|
}
|