diff --git a/audio/mp3/l3.go b/audio/mp3/l3.go index d4d0029d0..dc7af0cea 100644 --- a/audio/mp3/l3.go +++ b/audio/mp3/l3.go @@ -18,7 +18,6 @@ package mp3 // #include "pdmp3.h" // -// extern t_mpeg1_side_info g_side_info; // extern t_mpeg1_header g_frame_header; import "C" @@ -39,16 +38,16 @@ func init() { func requantizeProcessLong(gr, ch, is_pos, sfb int) { sf_mult := 0.5 - if C.g_side_info.scalefac_scale[gr][ch] != 0 { + if theMPEG1SideInfo.scalefac_scale[gr][ch] != 0 { sf_mult = 1.0 } tmp1 := 1.0 // https://github.com/technosaurus/PDMP3/issues/4 if sfb < 21 { - pf_x_pt := float64(C.g_side_info.preflag[gr][ch]) * pretab[sfb] + pf_x_pt := float64(theMPEG1SideInfo.preflag[gr][ch]) * pretab[sfb] tmp1 = math.Pow(2.0, -(sf_mult * (float64(theMPEG1MainData.scalefac_l[gr][ch][sfb]) + pf_x_pt))) } - tmp2 := math.Pow(2.0, 0.25*(float64(C.g_side_info.global_gain[gr][ch])-210)) + tmp2 := math.Pow(2.0, 0.25*(float64(theMPEG1SideInfo.global_gain[gr][ch])-210)) tmp3 := 0.0 if theMPEG1MainData.is[gr][ch][is_pos] < 0.0 { tmp3 = -powtab34[int(-theMPEG1MainData.is[gr][ch][is_pos])] @@ -60,7 +59,7 @@ func requantizeProcessLong(gr, ch, is_pos, sfb int) { func requantizeProcessShort(gr, ch, is_pos, sfb, win int) { sf_mult := 0.5 - if C.g_side_info.scalefac_scale[gr][ch] != 0 { + if theMPEG1SideInfo.scalefac_scale[gr][ch] != 0 { sf_mult = 1.0 } tmp1 := 1.0 @@ -68,8 +67,8 @@ func requantizeProcessShort(gr, ch, is_pos, sfb, win int) { if sfb < 12 { tmp1 = math.Pow(2.0, -(sf_mult * float64(theMPEG1MainData.scalefac_s[gr][ch][sfb][win]))) } - tmp2 := math.Pow(2.0, 0.25*(float64(C.g_side_info.global_gain[gr][ch])-210.0- - 8.0*float64(C.g_side_info.subblock_gain[gr][ch][win]))) + tmp2 := math.Pow(2.0, 0.25*(float64(theMPEG1SideInfo.global_gain[gr][ch])-210.0- + 8.0*float64(theMPEG1SideInfo.subblock_gain[gr][ch][win]))) tmp3 := 0.0 if theMPEG1MainData.is[gr][ch][is_pos] < 0 { tmp3 = -powtab34[int(-theMPEG1MainData.is[gr][ch][is_pos])] @@ -105,10 +104,10 @@ func l3Requantize(gr int, ch int) { /* Setup sampling frequency index */ sfreq := C.g_frame_header.sampling_frequency /* Determine type of block to process */ - if (C.g_side_info.win_switch_flag[gr][ch] == 1) && (C.g_side_info.block_type[gr][ch] == 2) { /* Short blocks */ + if (theMPEG1SideInfo.win_switch_flag[gr][ch] == 1) && (theMPEG1SideInfo.block_type[gr][ch] == 2) { /* Short blocks */ /* Check if the first two subbands *(=2*18 samples = 8 long or 3 short sfb's) uses long blocks */ - if C.g_side_info.mixed_block_flag[gr][ch] != 0 { /* 2 longbl. sb first */ + if theMPEG1SideInfo.mixed_block_flag[gr][ch] != 0 { /* 2 longbl. sb first */ /* First process the 2 long block subbands at the start */ sfb := 0 next_sfb := sfBandIndicesSet[sfreq].l[sfb+1] @@ -125,7 +124,7 @@ func l3Requantize(gr int, ch int) { win_len := sfBandIndicesSet[sfreq].s[sfb+1] - sfBandIndicesSet[sfreq].s[sfb] - for i := 36; i < int(C.g_side_info.count1[gr][ch]); /* i++ done below! */ { + for i := 36; i < int(theMPEG1SideInfo.count1[gr][ch]); /* i++ done below! */ { /* Check if we're into the next scalefac band */ if i == next_sfb { /* Yes */ sfb++ @@ -146,7 +145,7 @@ func l3Requantize(gr int, ch int) { next_sfb := sfBandIndicesSet[sfreq].s[sfb+1] * 3 win_len := sfBandIndicesSet[sfreq].s[sfb+1] - sfBandIndicesSet[sfreq].s[sfb] - for i := 0; i < int(C.g_side_info.count1[gr][ch]); /* i++ done below! */ { + for i := 0; i < int(theMPEG1SideInfo.count1[gr][ch]); /* i++ done below! */ { /* Check if we're into the next scalefac band */ if i == next_sfb { sfb++ @@ -165,7 +164,7 @@ func l3Requantize(gr int, ch int) { } else { /* Only long blocks */ sfb := 0 next_sfb := sfBandIndicesSet[sfreq].l[sfb+1] - for i := 0; i < int(C.g_side_info.count1[gr][ch]); i++ { + for i := 0; i < int(theMPEG1SideInfo.count1[gr][ch]); i++ { if i == next_sfb { sfb++ next_sfb = sfBandIndicesSet[sfreq].l[sfb+1] @@ -180,12 +179,12 @@ func l3Reorder(gr int, ch int) { sfreq := C.g_frame_header.sampling_frequency /* Setup sampling freq index */ /* Only reorder short blocks */ - if (C.g_side_info.win_switch_flag[gr][ch] == 1) && (C.g_side_info.block_type[gr][ch] == 2) { /* Short blocks */ + if (theMPEG1SideInfo.win_switch_flag[gr][ch] == 1) && (theMPEG1SideInfo.block_type[gr][ch] == 2) { /* Short blocks */ /* Check if the first two subbands *(=2*18 samples = 8 long or 3 short sfb's) uses long blocks */ sfb := 0 /* 2 longbl. sb first */ - if C.g_side_info.mixed_block_flag[gr][ch] != 0 { + if theMPEG1SideInfo.mixed_block_flag[gr][ch] != 0 { sfb = 3 } next_sfb := sfBandIndicesSet[sfreq].s[sfb+1] * 3 @@ -202,7 +201,7 @@ func l3Reorder(gr int, ch int) { theMPEG1MainData.is[gr][ch][3*sfBandIndicesSet[sfreq].s[sfb]+j] = re[j] } /* Check if this band is above the rzero region,if so we're done */ - if C.uint(i) >= C.g_side_info.count1[gr][ch] { + if i >= theMPEG1SideInfo.count1[gr][ch] { return } sfb++ @@ -290,10 +289,10 @@ func l3Stereo(gr int) { if (C.g_frame_header.mode_extension & 0x2) != 0 { /* Determine how many frequency lines to transform */ i := 0 - if C.g_side_info.count1[gr][0] > C.g_side_info.count1[gr][1] { + if theMPEG1SideInfo.count1[gr][0] > theMPEG1SideInfo.count1[gr][1] { i = 1 } - max_pos := int(C.g_side_info.count1[gr][i]) + max_pos := int(theMPEG1SideInfo.count1[gr][i]) /* Do the actual processing */ const invSqrt2 = math.Sqrt2 / 2 for i := 0; i < max_pos; i++ { @@ -311,28 +310,28 @@ func l3Stereo(gr int) { * band on or above count1 frequency line. N.B.: Intensity stereo coding is * only done for higher subbands, but logic is here for lower subbands. */ /* Determine type of block to process */ - if (C.g_side_info.win_switch_flag[gr][0] == 1) && - (C.g_side_info.block_type[gr][0] == 2) { /* Short blocks */ + if (theMPEG1SideInfo.win_switch_flag[gr][0] == 1) && + (theMPEG1SideInfo.block_type[gr][0] == 2) { /* Short blocks */ /* Check if the first two subbands *(=2*18 samples = 8 long or 3 short sfb's) uses long blocks */ - if C.g_side_info.mixed_block_flag[gr][0] != 0 { /* 2 longbl. sb first */ + if theMPEG1SideInfo.mixed_block_flag[gr][0] != 0 { /* 2 longbl. sb first */ for sfb := 0; sfb < 8; sfb++ { /* First process 8 sfb's at start */ /* Is this scale factor band above count1 for the right channel? */ - if C.unsigned(sfBandIndicesSet[sfreq].l[sfb]) >= C.g_side_info.count1[gr][1] { + if sfBandIndicesSet[sfreq].l[sfb] >= theMPEG1SideInfo.count1[gr][1] { stereoProcessIntensityLong(int(gr), int(sfb)) } } /* And next the remaining bands which uses short blocks */ for sfb := 3; sfb < 12; sfb++ { /* Is this scale factor band above count1 for the right channel? */ - if C.unsigned(sfBandIndicesSet[sfreq].s[sfb])*3 >= C.g_side_info.count1[gr][1] { + if sfBandIndicesSet[sfreq].s[sfb]*3 >= theMPEG1SideInfo.count1[gr][1] { stereoProcessIntensityShort(int(gr), int(sfb)) /* intensity stereo processing */ } } } else { /* Only short blocks */ for sfb := 0; sfb < 12; sfb++ { /* Is this scale factor band above count1 for the right channel? */ - if C.unsigned(sfBandIndicesSet[sfreq].s[sfb])*3 >= C.g_side_info.count1[gr][1] { + if sfBandIndicesSet[sfreq].s[sfb]*3 >= theMPEG1SideInfo.count1[gr][1] { stereoProcessIntensityShort(int(gr), int(sfb)) /* intensity stereo processing */ } } @@ -340,7 +339,7 @@ func l3Stereo(gr int) { } else { /* Only long blocks */ for sfb := 0; sfb < 21; sfb++ { /* Is this scale factor band above count1 for the right channel? */ - if C.unsigned(sfBandIndicesSet[sfreq].l[sfb]) >= C.g_side_info.count1[gr][1] { + if sfBandIndicesSet[sfreq].l[sfb] >= theMPEG1SideInfo.count1[gr][1] { /* Perform the intensity stereo processing */ stereoProcessIntensityLong(int(gr), int(sfb)) } @@ -356,16 +355,16 @@ var ( func l3Antialias(gr int, ch int) { /* No antialiasing is done for short blocks */ - if (C.g_side_info.win_switch_flag[gr][ch] == 1) && - (C.g_side_info.block_type[gr][ch] == 2) && - (C.g_side_info.mixed_block_flag[gr][ch]) == 0 { + if (theMPEG1SideInfo.win_switch_flag[gr][ch] == 1) && + (theMPEG1SideInfo.block_type[gr][ch] == 2) && + (theMPEG1SideInfo.mixed_block_flag[gr][ch]) == 0 { return } /* Setup the limit for how many subbands to transform */ sblim := 32 - if (C.g_side_info.win_switch_flag[gr][ch] == 1) && - (C.g_side_info.block_type[gr][ch] == 2) && - (C.g_side_info.mixed_block_flag[gr][ch] == 1) { + if (theMPEG1SideInfo.win_switch_flag[gr][ch] == 1) && + (theMPEG1SideInfo.block_type[gr][ch] == 2) && + (theMPEG1SideInfo.mixed_block_flag[gr][ch] == 1) { sblim = 2 } /* Do the actual antialiasing */ @@ -386,9 +385,9 @@ var store = [2][32][18]float32{} func l3HybridSynthesis(gr int, ch int) { for sb := 0; sb < 32; sb++ { /* Loop through all 32 subbands */ /* Determine blocktype for this subband */ - bt := int(C.g_side_info.block_type[gr][ch]) - if (C.g_side_info.win_switch_flag[gr][ch] == 1) && - (C.g_side_info.mixed_block_flag[gr][ch] == 1) && (sb < 2) { + bt := int(theMPEG1SideInfo.block_type[gr][ch]) + if (theMPEG1SideInfo.win_switch_flag[gr][ch] == 1) && + (theMPEG1SideInfo.mixed_block_flag[gr][ch] == 1) && (sb < 2) { bt = 0 } /* Do the inverse modified DCT and windowing */ diff --git a/audio/mp3/maindata.go b/audio/mp3/maindata.go index e52b5535d..eac84be93 100644 --- a/audio/mp3/maindata.go +++ b/audio/mp3/maindata.go @@ -19,7 +19,6 @@ package mp3 // #include "pdmp3.h" // // extern t_mpeg1_header g_frame_header; -// extern t_mpeg1_side_info g_side_info; import "C" import ( @@ -64,7 +63,7 @@ func readMainL3() error { * frames that should be used. This buffer is later accessed by the * getMainBits function in the same way as the side info is. */ - if err := getMainData(main_data_size, int(C.g_side_info.main_data_begin)); err != nil { + if err := getMainData(main_data_size, int(theMPEG1SideInfo.main_data_begin)); err != nil { /* This could be due to not enough data in reservoir */ return err } @@ -72,10 +71,10 @@ func readMainL3() error { for ch := 0; ch < nch; ch++ { part_2_start := getMainPos() /* Number of bits in the bitstream for the bands */ - slen1 := mpeg1_scalefac_sizes[C.g_side_info.scalefac_compress[gr][ch]][0] - slen2 := mpeg1_scalefac_sizes[C.g_side_info.scalefac_compress[gr][ch]][1] - if (C.g_side_info.win_switch_flag[gr][ch] != 0) && (C.g_side_info.block_type[gr][ch] == 2) { - if C.g_side_info.mixed_block_flag[gr][ch] != 0 { + slen1 := mpeg1_scalefac_sizes[theMPEG1SideInfo.scalefac_compress[gr][ch]][0] + slen2 := mpeg1_scalefac_sizes[theMPEG1SideInfo.scalefac_compress[gr][ch]][1] + if (theMPEG1SideInfo.win_switch_flag[gr][ch] != 0) && (theMPEG1SideInfo.block_type[gr][ch] == 2) { + if theMPEG1SideInfo.mixed_block_flag[gr][ch] != 0 { for sfb := 0; sfb < 8; sfb++ { theMPEG1MainData.scalefac_l[gr][ch][sfb] = getMainBits(slen1) } @@ -103,44 +102,44 @@ func readMainL3() error { } } else { /* block_type == 0 if winswitch == 0 */ /* Scale factor bands 0-5 */ - if (C.g_side_info.scfsi[ch][0] == 0) || (gr == 0) { + if (theMPEG1SideInfo.scfsi[ch][0] == 0) || (gr == 0) { for sfb := 0; sfb < 6; sfb++ { theMPEG1MainData.scalefac_l[gr][ch][sfb] = getMainBits(slen1) } - } else if (C.g_side_info.scfsi[ch][0] == 1) && (gr == 1) { + } else if (theMPEG1SideInfo.scfsi[ch][0] == 1) && (gr == 1) { /* Copy scalefactors from granule 0 to granule 1 */ for sfb := 0; sfb < 6; sfb++ { theMPEG1MainData.scalefac_l[1][ch][sfb] = theMPEG1MainData.scalefac_l[0][ch][sfb] } } /* Scale factor bands 6-10 */ - if (C.g_side_info.scfsi[ch][1] == 0) || (gr == 0) { + if (theMPEG1SideInfo.scfsi[ch][1] == 0) || (gr == 0) { for sfb := 6; sfb < 11; sfb++ { theMPEG1MainData.scalefac_l[gr][ch][sfb] = getMainBits(slen1) } - } else if (C.g_side_info.scfsi[ch][1] == 1) && (gr == 1) { + } else if (theMPEG1SideInfo.scfsi[ch][1] == 1) && (gr == 1) { /* Copy scalefactors from granule 0 to granule 1 */ for sfb := 6; sfb < 11; sfb++ { theMPEG1MainData.scalefac_l[1][ch][sfb] = theMPEG1MainData.scalefac_l[0][ch][sfb] } } /* Scale factor bands 11-15 */ - if (C.g_side_info.scfsi[ch][2] == 0) || (gr == 0) { + if (theMPEG1SideInfo.scfsi[ch][2] == 0) || (gr == 0) { for sfb := 11; sfb < 16; sfb++ { theMPEG1MainData.scalefac_l[gr][ch][sfb] = getMainBits(slen2) } - } else if (C.g_side_info.scfsi[ch][2] == 1) && (gr == 1) { + } else if (theMPEG1SideInfo.scfsi[ch][2] == 1) && (gr == 1) { /* Copy scalefactors from granule 0 to granule 1 */ for sfb := 11; sfb < 16; sfb++ { theMPEG1MainData.scalefac_l[1][ch][sfb] = theMPEG1MainData.scalefac_l[0][ch][sfb] } } /* Scale factor bands 16-20 */ - if (C.g_side_info.scfsi[ch][3] == 0) || (gr == 0) { + if (theMPEG1SideInfo.scfsi[ch][3] == 0) || (gr == 0) { for sfb := 16; sfb < 21; sfb++ { theMPEG1MainData.scalefac_l[gr][ch][sfb] = getMainBits(slen2) } - } else if (C.g_side_info.scfsi[ch][3] == 1) && (gr == 1) { + } else if (theMPEG1SideInfo.scfsi[ch][3] == 1) && (gr == 1) { /* Copy scalefactors from granule 0 to granule 1 */ for sfb := 16; sfb < 21; sfb++ { theMPEG1MainData.scalefac_l[1][ch][sfb] = theMPEG1MainData.scalefac_l[0][ch][sfb] diff --git a/audio/mp3/pdmp3.c b/audio/mp3/pdmp3.c index cbb405beb..b1ceb5688 100644 --- a/audio/mp3/pdmp3.c +++ b/audio/mp3/pdmp3.c @@ -60,7 +60,6 @@ g_sampling_frequency[3] = { 44100 * Hz,48000 * Hz,32000 * Hz }; unsigned synth_init = 1; t_mpeg1_header g_frame_header; -t_mpeg1_side_info g_side_info; /* < 100 words */ #ifdef DEBUG static void dmp_fr(t_mpeg1_header *hdr){ diff --git a/audio/mp3/pdmp3.h b/audio/mp3/pdmp3.h index 2fb917bec..13b72c082 100644 --- a/audio/mp3/pdmp3.h +++ b/audio/mp3/pdmp3.h @@ -47,30 +47,5 @@ typedef struct { /* MPEG1 Layer 1-3 frame header */ unsigned emphasis; /* 2 bits */ } t_mpeg1_header; -typedef struct { /* MPEG1 Layer 3 Side Information : [2][2] means [gr][ch] */ - unsigned main_data_begin; /* 9 bits */ - unsigned private_bits; /* 3 bits in mono,5 in stereo */ - unsigned scfsi[2][4]; /* 1 bit */ - unsigned part2_3_length[2][2]; /* 12 bits */ - unsigned big_values[2][2]; /* 9 bits */ - unsigned global_gain[2][2]; /* 8 bits */ - unsigned scalefac_compress[2][2]; /* 4 bits */ - unsigned win_switch_flag[2][2]; /* 1 bit */ - /* if(win_switch_flag[][]) */ //use a union dammit - unsigned block_type[2][2]; /* 2 bits */ - unsigned mixed_block_flag[2][2]; /* 1 bit */ - unsigned table_select[2][2][3]; /* 5 bits */ - unsigned subblock_gain[2][2][3]; /* 3 bits */ - /* else */ - /* table_select[][][] */ - unsigned region0_count[2][2]; /* 4 bits */ - unsigned region1_count[2][2]; /* 3 bits */ - /* end */ - unsigned preflag[2][2]; /* 1 bit */ - unsigned scalefac_scale[2][2]; /* 1 bit */ - unsigned count1table_select[2][2];/* 1 bit */ - unsigned count1[2][2]; /* Not in file,calc. by huff.dec.! */ -} -t_mpeg1_side_info; #endif diff --git a/audio/mp3/read.go b/audio/mp3/read.go index 2be3a64fc..1cac4de7b 100644 --- a/audio/mp3/read.go +++ b/audio/mp3/read.go @@ -18,7 +18,6 @@ package mp3 // #include "pdmp3.h" // -// extern t_mpeg1_side_info g_side_info; // extern t_mpeg1_header g_frame_header; import "C" @@ -171,37 +170,37 @@ func readHeader() error { func readHuffman(part_2_start, gr, ch int) error { /* Check that there is any data to decode. If not,zero the array. */ - if C.g_side_info.part2_3_length[gr][ch] == 0 { + if theMPEG1SideInfo.part2_3_length[gr][ch] == 0 { for is_pos := 0; is_pos < 576; is_pos++ { theMPEG1MainData.is[gr][ch][is_pos] = 0.0 } return nil } /* Calculate bit_pos_end which is the index of the last bit for this part. */ - bit_pos_end := part_2_start + int(C.g_side_info.part2_3_length[gr][ch]) - 1 + bit_pos_end := part_2_start + int(theMPEG1SideInfo.part2_3_length[gr][ch]) - 1 /* Determine region boundaries */ region_1_start := 0 region_2_start := 0 - if (C.g_side_info.win_switch_flag[gr][ch] == 1) && (C.g_side_info.block_type[gr][ch] == 2) { + if (theMPEG1SideInfo.win_switch_flag[gr][ch] == 1) && (theMPEG1SideInfo.block_type[gr][ch] == 2) { region_1_start = 36 /* sfb[9/3]*3=36 */ region_2_start = 576 /* No Region2 for short block case. */ } else { sfreq := C.g_frame_header.sampling_frequency region_1_start = - sfBandIndicesSet[sfreq].l[C.g_side_info.region0_count[gr][ch]+1] + sfBandIndicesSet[sfreq].l[theMPEG1SideInfo.region0_count[gr][ch]+1] region_2_start = - sfBandIndicesSet[sfreq].l[C.g_side_info.region0_count[gr][ch]+ - C.g_side_info.region1_count[gr][ch]+2] + sfBandIndicesSet[sfreq].l[theMPEG1SideInfo.region0_count[gr][ch]+ + theMPEG1SideInfo.region1_count[gr][ch]+2] } /* Read big_values using tables according to region_x_start */ - for is_pos := 0; is_pos < int(C.g_side_info.big_values[gr][ch])*2; is_pos++ { + for is_pos := 0; is_pos < int(theMPEG1SideInfo.big_values[gr][ch])*2; is_pos++ { table_num := 0 if is_pos < region_1_start { - table_num = int(C.g_side_info.table_select[gr][ch][0]) + table_num = int(theMPEG1SideInfo.table_select[gr][ch][0]) } else if is_pos < region_2_start { - table_num = int(C.g_side_info.table_select[gr][ch][1]) + table_num = int(theMPEG1SideInfo.table_select[gr][ch][1]) } else { - table_num = int(C.g_side_info.table_select[gr][ch][2]) + table_num = int(theMPEG1SideInfo.table_select[gr][ch][2]) } /* Get next Huffman coded words */ x, y, _, _, err := huffmanDecode(table_num) @@ -214,8 +213,8 @@ func readHuffman(part_2_start, gr, ch int) error { theMPEG1MainData.is[gr][ch][is_pos] = float32(y) } /* Read small values until is_pos = 576 or we run out of huffman data */ - table_num := int(C.g_side_info.count1table_select[gr][ch]) + 32 - is_pos := int(C.g_side_info.big_values[gr][ch]) * 2 + table_num := int(theMPEG1SideInfo.count1table_select[gr][ch]) + 32 + is_pos := int(theMPEG1SideInfo.big_values[gr][ch]) * 2 for ; (is_pos <= 572) && (getMainPos() <= bit_pos_end); is_pos++ { /* Get next Huffman coded words */ x, y, v, w, err := huffmanDecode(table_num) @@ -245,7 +244,7 @@ func readHuffman(part_2_start, gr, ch int) error { is_pos -= 4 } /* Setup count1 which is the index of the first sample in the rzero reg. */ - C.g_side_info.count1[gr][ch] = C.unsigned(is_pos) + theMPEG1SideInfo.count1[gr][ch] = is_pos /* Zero out the last part if necessary */ for ; /* is_pos comes from last for-loop */ is_pos < 576; is_pos++ { theMPEG1MainData.is[gr][ch][is_pos] = 0.0 diff --git a/audio/mp3/sideinfo.go b/audio/mp3/sideinfo.go index db5cff9c4..f6635a5dc 100644 --- a/audio/mp3/sideinfo.go +++ b/audio/mp3/sideinfo.go @@ -19,7 +19,6 @@ package mp3 // #include "pdmp3.h" // // extern t_mpeg1_header g_frame_header; -// extern t_mpeg1_side_info g_side_info; import "C" import ( @@ -74,54 +73,54 @@ func readAudioL3() error { } /* Parse audio data */ /* Pointer to where we should start reading main data */ - C.g_side_info.main_data_begin = C.uint(getSideBits(9)) + theMPEG1SideInfo.main_data_begin = getSideBits(9) /* Get private bits. Not used for anything. */ if C.g_frame_header.mode == C.mpeg1_mode_single_channel { - C.g_side_info.private_bits = C.uint(getSideBits(5)) + theMPEG1SideInfo.private_bits = getSideBits(5) } else { - C.g_side_info.private_bits = C.uint(getSideBits(3)) + theMPEG1SideInfo.private_bits = getSideBits(3) } /* Get scale factor selection information */ for ch := 0; ch < nch; ch++ { for scfsi_band := 0; scfsi_band < 4; scfsi_band++ { - C.g_side_info.scfsi[ch][scfsi_band] = C.uint(getSideBits(1)) + theMPEG1SideInfo.scfsi[ch][scfsi_band] = getSideBits(1) } } /* Get the rest of the side information */ for gr := 0; gr < 2; gr++ { for ch := 0; ch < nch; ch++ { - C.g_side_info.part2_3_length[gr][ch] = C.uint(getSideBits(12)) - C.g_side_info.big_values[gr][ch] = C.uint(getSideBits(9)) - C.g_side_info.global_gain[gr][ch] = C.uint(getSideBits(8)) - C.g_side_info.scalefac_compress[gr][ch] = C.uint(getSideBits(4)) - C.g_side_info.win_switch_flag[gr][ch] = C.uint(getSideBits(1)) - if C.g_side_info.win_switch_flag[gr][ch] == 1 { - C.g_side_info.block_type[gr][ch] = C.uint(getSideBits(2)) - C.g_side_info.mixed_block_flag[gr][ch] = C.uint(getSideBits(1)) + theMPEG1SideInfo.part2_3_length[gr][ch] = getSideBits(12) + theMPEG1SideInfo.big_values[gr][ch] = getSideBits(9) + theMPEG1SideInfo.global_gain[gr][ch] = getSideBits(8) + theMPEG1SideInfo.scalefac_compress[gr][ch] = getSideBits(4) + theMPEG1SideInfo.win_switch_flag[gr][ch] = getSideBits(1) + if theMPEG1SideInfo.win_switch_flag[gr][ch] == 1 { + theMPEG1SideInfo.block_type[gr][ch] = getSideBits(2) + theMPEG1SideInfo.mixed_block_flag[gr][ch] = getSideBits(1) for region := 0; region < 2; region++ { - C.g_side_info.table_select[gr][ch][region] = C.uint(getSideBits(5)) + theMPEG1SideInfo.table_select[gr][ch][region] = getSideBits(5) } for window := 0; window < 3; window++ { - C.g_side_info.subblock_gain[gr][ch][window] = C.uint(getSideBits(3)) + theMPEG1SideInfo.subblock_gain[gr][ch][window] = getSideBits(3) } - if (C.g_side_info.block_type[gr][ch] == 2) && (C.g_side_info.mixed_block_flag[gr][ch] == 0) { - C.g_side_info.region0_count[gr][ch] = 8 /* Implicit */ + if (theMPEG1SideInfo.block_type[gr][ch] == 2) && (theMPEG1SideInfo.mixed_block_flag[gr][ch] == 0) { + theMPEG1SideInfo.region0_count[gr][ch] = 8 /* Implicit */ } else { - C.g_side_info.region0_count[gr][ch] = 7 /* Implicit */ + theMPEG1SideInfo.region0_count[gr][ch] = 7 /* Implicit */ } /* The standard is wrong on this!!! */ /* Implicit */ - C.g_side_info.region1_count[gr][ch] = 20 - C.g_side_info.region0_count[gr][ch] + theMPEG1SideInfo.region1_count[gr][ch] = 20 - theMPEG1SideInfo.region0_count[gr][ch] } else { for region := 0; region < 3; region++ { - C.g_side_info.table_select[gr][ch][region] = C.uint(getSideBits(5)) + theMPEG1SideInfo.table_select[gr][ch][region] = getSideBits(5) } - C.g_side_info.region0_count[gr][ch] = C.uint(getSideBits(4)) - C.g_side_info.region1_count[gr][ch] = C.uint(getSideBits(3)) - C.g_side_info.block_type[gr][ch] = 0 /* Implicit */ + theMPEG1SideInfo.region0_count[gr][ch] = getSideBits(4) + theMPEG1SideInfo.region1_count[gr][ch] = getSideBits(3) + theMPEG1SideInfo.block_type[gr][ch] = 0 /* Implicit */ } - C.g_side_info.preflag[gr][ch] = C.uint(getSideBits(1)) - C.g_side_info.scalefac_scale[gr][ch] = C.uint(getSideBits(1)) - C.g_side_info.count1table_select[gr][ch] = C.uint(getSideBits(1)) + theMPEG1SideInfo.preflag[gr][ch] = getSideBits(1) + theMPEG1SideInfo.scalefac_scale[gr][ch] = getSideBits(1) + theMPEG1SideInfo.count1table_select[gr][ch] = getSideBits(1) } } return nil