X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=Robust%2Fsrc%2FTests%2FssJava%2Fmp3decoder%2FLayerIIIDecoder.java;h=8714428bb07d9728353fddea7c47c1e4c08cc26b;hb=8ba6ffae3e7090c3f0a1693727d1cfc4bd493c03;hp=48b0d1b2729ece17813be6fb41ad933c4ab8dde7;hpb=b1691dd3c0567c74ea99a7d4d2dcdb94c9ba85ba;p=IRC.git diff --git a/Robust/src/Tests/ssJava/mp3decoder/LayerIIIDecoder.java b/Robust/src/Tests/ssJava/mp3decoder/LayerIIIDecoder.java index 48b0d1b2..8714428b 100644 --- a/Robust/src/Tests/ssJava/mp3decoder/LayerIIIDecoder.java +++ b/Robust/src/Tests/ssJava/mp3decoder/LayerIIIDecoder.java @@ -46,9 +46,9 @@ // 9th added for get_LSF_scale_factors // 10th added for get_scale_factors // llth added for decode -// @LATTICE("NZ*,SI>> 3; - - if ((flush_main = (br.hsstell() & 7)) != 0) { // flush_main < br - br.hgetbits(8 - flush_main); // br < flush_main - main_data_end++; // main_data_end* - } - - // bytes_to_discard < GLB(frame_start,main_data_end,si) - bytes_to_discard = frame_start - main_data_end - si.main_data_begin; + // modifications for linear type + get_side_info(header); + br = header.getBitReserve(); - // frame_start should be * - frame_start += nSlots; - - if (bytes_to_discard < 0) { - return; - } - - if (main_data_end > 4096) { // main_data_end should be > than 'frame_start' - // and 'br' - frame_start -= 4096; - br.rewindNbytes(4096); - } - - for (; bytes_to_discard > 0; bytes_to_discard--) { - // bytes_to_discard > br - br.hgetbits(8); - } - - // doing something from here + @LOC("THIS,LayerIIIDecoder.HD1") int version = header.version(); // here 'gr' and 'max_gr' should be higher than 'ch','channels', and more for (gr = 0; gr < max_gr; gr++) { // two granules per channel @@ -354,25 +494,28 @@ final class LayerIIIDecoder implements FrameDecoder { // 'ch', 'channels' should be higher than all locs in the below body for (ch = 0; ch < channels; ch++) { - part2_start = br.hsstell(); // part2_start < br + // part2_start = br.hsstell(); + @LOC("THIS,LayerIIIDecoder.BR,BitReserve.BIT") int part2_start_local = br.hsstell(); // grab scale factors from the main data. // following the scale factors is the actual compressed data - if (header.version() == Header.MPEG1) - get_scale_factors(ch, gr); // no need to care from this side + if (version == Header.MPEG1) + get_scale_factors(header, ch, gr); // no need to care from this side // here move scale factor data from 'br' buffer to 'scalefac' field else // MPEG-2 LSF, SZD: MPEG-2.5 LSF - get_LSF_scale_factors(ch, gr); // no need to care from this side + get_LSF_scale_factors(header, ch, gr); // no need to care from this + // side // here, decoding the compressed audio data - huffman_decode(ch, gr); // no need to care from this side + huffman_decode(part2_start_local, ch, gr); // no need to care from this + // side // System.out.println("CheckSum HuffMan = " + CheckSumHuff); dequantize_sample(/* ro[ch], */ch, gr); // no need to care from this // side } - stereo(gr); // no need to care from this side + stereo(header, gr); // no need to care from this side if ((which_channels == OutputChannels.DOWNMIX_CHANNELS) && (channels > 1)) { do_downmix(); @@ -388,14 +531,23 @@ final class LayerIIIDecoder implements FrameDecoder { reorder(/* lr[ch], */ch, gr); antialias(ch, gr); - // for (int hb = 0;hb<576;hb++) CheckSumOut1d = CheckSumOut1d + - // out_1d[hb]; + + // float CheckSumOut1d=0; + // for (int hb = 0;hb<576;hb++) { + // CheckSumOut1d = CheckSumOut1d + out_1d[hb]; + // } // System.out.println("CheckSumOut1d = "+CheckSumOut1d); + for (@LOC("THIS,LayerIIIDecoder.SI1") int index = 0; index < 576; index++) { + out_1d[index] = inter[index]; + } + hybrid(ch, gr); - // for (int hb = 0;hb<576;hb++) CheckSumOut1d = CheckSumOut1d + - // out_1d[hb]; + // float CheckSumOut1d=0; + // for (int hb = 0;hb<576;hb++) { + // CheckSumOut1d = CheckSumOut1d + out_1d[hb]; + // } // System.out.println("CheckSumOut1d = "+CheckSumOut1d); for (sb18 = 18; sb18 < 576; sb18 += 36) { @@ -419,7 +571,7 @@ final class LayerIIIDecoder implements FrameDecoder { sb++; // sb should be loc* } filter1.input_samples(samples1); - filter1.calculate_pcm_samples(buffer); + filter1.calculate_pcm_samples(); } } else { for (ss = 0; ss < SSLIMIT; ss++) { // Polyphase synthesis @@ -430,7 +582,7 @@ final class LayerIIIDecoder implements FrameDecoder { sb++; } filter2.input_samples(samples2); - filter2.calculate_pcm_samples(buffer); + filter2.calculate_pcm_samples(); } } @@ -441,7 +593,7 @@ final class LayerIIIDecoder implements FrameDecoder { // if (counter < 609) // { counter++; // count should be loc* - buffer.write_buffer(1); // buffer!!! + // buffer.write_buffer(1); // buffer!!! // } // else if (counter == 609) // { @@ -458,44 +610,58 @@ final class LayerIIIDecoder implements FrameDecoder { * Reads the side info from the stream, assuming the entire. frame has been * read already. Mono : 136 bits (= 17 bytes) Stereo : 256 bits (= 32 bytes) */ - @RETURNLOC("OUT") - private boolean get_side_info() { - @LOC("IN") int ch; - @LOC("IN") int gr; - if (header.version() == Header.MPEG1) { + @LATTICE("OUT= is_1d.length) // System.out.println("i0="+i+"/"+(si.ch[ch].gr[gr].big_values<<1)+" Index="+index+" is_1d="+is_1d.length); @@ -913,16 +1108,18 @@ final class LayerIIIDecoder implements FrameDecoder { is_1d[index++] = y[0]; CheckSumHuff = CheckSumHuff + x[0] + y[0]; - // System.out.println("x = "+x[0]+" y = "+y[0]); + // System.out.println("x = " + x[0] + " y = " + y[0]); } // Read count1 area - h = huffcodetab.ht[si.ch[ch].gr[gr].count1table_select + 32]; + + @LOC("THIS,LayerIIIDecoder.SI2") int htIdx = si.ch[ch].gr[gr].count1table_select + 32; + // h = huffcodetab.ht[si.ch[ch].gr[gr].count1table_select + 32]; num_bits = br.hsstell(); - while ((num_bits < part2_3_end) && (index < 576)) { + TERMINATE: while ((num_bits < part2_3_end) && (index < 576)) { - huffcodetab.huffman_decoder(h, x, y, v, w, br); + huffcodetab.huffman_decoder(htIdx, x, y, v, w, br); is_1d[index++] = v[0]; is_1d[index++] = w[0]; @@ -960,10 +1157,17 @@ final class LayerIIIDecoder implements FrameDecoder { is_1d[index] = 0; } + @LATTICE("THIS,IN,THISLOC=THIS,RETURNLOC=THIS") + private int huffcodetab_huffman_decoder(@LOC("IN") int h) { + // TODO need to move huffmancodetab implementation here + return 0; + } + /** * */ - private void i_stereo_k_values(@LOC("IN") int is_pos, @LOC("IN") int io_type, @LOC("IN") int i) { + private void i_stereo_k_values(@LOC("THIS,LayerIIIDecoder.LR") int is_pos, + @LOC("THIS,LayerIIIDecoder.LR") int io_type, @LOC("THIS,LayerIIIDecoder.LR") int i) { if (is_pos == 0) { k[0][i] = 1.0f; k[1][i] = 1.0f; @@ -980,7 +1184,7 @@ final class LayerIIIDecoder implements FrameDecoder { * */ // @LATTICE("OUT 0) @@ -1146,9 +1350,11 @@ final class LayerIIIDecoder implements FrameDecoder { /** * */ - @LATTICE("THIS= 3; sfb--) { + TERMINATE: for (sfb = 12; sfb >= 3; sfb--) { i = sfBandIndex[sfreq].s[sfb]; lines = sfBandIndex[sfreq].s[sfb + 1] - i; i = (i << 2) - i + (j + 1) * lines - 1; - - while (lines > 0) { + TERMINATE: while (lines > 0) { if (ro[1][i / 18][i % 18] != 0.0f) { // MDM: in java, array access is very slow. // Is quicker to compute div and mod values. @@ -1330,7 +1541,7 @@ final class LayerIIIDecoder implements FrameDecoder { sb = sfBandIndex[sfreq].s[sfb + 1] - temp; i = (temp << 2) - temp + j * sb; - for (; sb > 0; sb--) { + TERMINATE: for (; sb > 0; sb--) { is_pos[i] = scalefac[1].s[j][sfb]; if (is_pos[i] != 7) if (lsf) @@ -1348,8 +1559,7 @@ final class LayerIIIDecoder implements FrameDecoder { temp = sfBandIndex[sfreq].s[11]; sb = sfBandIndex[sfreq].s[12] - temp; i = (temp << 2) - temp + j * sb; - - for (; sb > 0; sb--) { + TERMINATE: for (; sb > 0; sb--) { is_pos[i] = is_pos[sfb]; if (lsf) { @@ -1365,7 +1575,7 @@ final class LayerIIIDecoder implements FrameDecoder { i = 2; ss = 17; sb = -1; - while (i >= 0) { + TERMINATE: while (i >= 0) { if (ro[1][i][ss] != 0.0f) { sb = (i << 4) + (i << 1) + ss; i = -1; @@ -1384,7 +1594,7 @@ final class LayerIIIDecoder implements FrameDecoder { i = sfBandIndex[sfreq].l[i]; for (; sfb < 8; sfb++) { sb = sfBandIndex[sfreq].l[sfb + 1] - sfBandIndex[sfreq].l[sfb]; - for (; sb > 0; sb--) { + TERMINATE: for (; sb > 0; sb--) { is_pos[i] = scalefac[1].l[sfb]; if (is_pos[i] != 7) if (lsf) @@ -1396,15 +1606,14 @@ final class LayerIIIDecoder implements FrameDecoder { } // for (; sfb<8 ... } // for (j=0 ... } else { // if (gr_info.mixed_block_flag) - for (@LOC("THIS,LayerIIIDecoder.J") int j = 0; j < 3; j++) { - @LOC("THIS,LayerIIIDecoder.SH") int sfbcnt; + for (@LOC("THIS,LayerIIIDecoder.RO1") int j = 0; j < 3; j++) { + @LOC("THIS,LayerIIIDecoder.RO1") int sfbcnt; sfbcnt = -1; - for (sfb = 12; sfb >= 0; sfb--) { + TERMINATE: for (sfb = 12; sfb >= 0; sfb--) { temp = sfBandIndex[sfreq].s[sfb]; lines = sfBandIndex[sfreq].s[sfb + 1] - temp; i = (temp << 2) - temp + (j + 1) * lines - 1; - - while (lines > 0) { + TERMINATE: while (lines > 0) { if (ro[1][i / 18][i % 18] != 0.0f) { // MDM: in java, array access is very slow. // Is quicker to compute div and mod values. @@ -1423,7 +1632,7 @@ final class LayerIIIDecoder implements FrameDecoder { temp = sfBandIndex[sfreq].s[sfb]; sb = sfBandIndex[sfreq].s[sfb + 1] - temp; i = (temp << 2) - temp + j * sb; - for (; sb > 0; sb--) { + TERMINATE: for (; sb > 0; sb--) { is_pos[i] = scalefac[1].s[j][sfb]; if (is_pos[i] != 7) if (lsf) @@ -1441,8 +1650,7 @@ final class LayerIIIDecoder implements FrameDecoder { sfb = (temp << 2) - temp + j * sb; sb = sfBandIndex[sfreq].s[12] - temp2; i = (temp2 << 2) - temp2 + j * sb; - - for (; sb > 0; sb--) { + TERMINATE: for (; sb > 0; sb--) { is_pos[i] = is_pos[sfb]; if (lsf) { @@ -1459,7 +1667,7 @@ final class LayerIIIDecoder implements FrameDecoder { i = 31; ss = 17; sb = 0; - while (i >= 0) { + TERMINATE: while (i >= 0) { if (ro[1][i][ss] != 0.0f) { sb = (i << 4) + (i << 1) + ss; i = -1; @@ -1479,7 +1687,7 @@ final class LayerIIIDecoder implements FrameDecoder { i = sfBandIndex[sfreq].l[i]; for (; sfb < 21; sfb++) { sb = sfBandIndex[sfreq].l[sfb + 1] - sfBandIndex[sfreq].l[sfb]; - for (; sb > 0; sb--) { + TERMINATE: for (; sb > 0; sb--) { is_pos[i] = scalefac[1].l[sfb]; if (is_pos[i] != 7) if (lsf) @@ -1490,7 +1698,7 @@ final class LayerIIIDecoder implements FrameDecoder { } } sfb = sfBandIndex[sfreq].l[20]; - for (sb = 576 - sfBandIndex[sfreq].l[21]; (sb > 0) && (i < 576); sb--) { + TERMINATE: for (sb = 576 - sfBandIndex[sfreq].l[21]; (sb > 0) && (i < 576); sb--) { is_pos[i] = is_pos[sfb]; // error here : i >=576 if (lsf) { @@ -1547,17 +1755,18 @@ final class LayerIIIDecoder implements FrameDecoder { @LOC("THIS,LayerIIIDecoder.SI1") int ss; @LOC("THIS,LayerIIIDecoder.SI,LayerIIIDecoder$III_side_info_t.CH,LayerIIIDecoder$temporaire.GR2") int sb18lim; - @LOC("THIS,LayerIIIDecoder.SI,LayerIIIDecoder$III_side_info_t.CH,LayerIIIDecoder$temporaire.GR1") gr_info_s gr_info = - (si.ch[ch].gr[gr]); + // @LOC("THIS,LayerIIIDecoder.SI,LayerIIIDecoder$III_side_info_t.CH,LayerIIIDecoder$temporaire.GR1") + // gr_info_s gr_info = + // (si.ch[ch].gr[gr]); // 31 alias-reduction operations between each pair of sub-bands // with 8 butterflies between each pair - if ((gr_info.window_switching_flag != 0) && (gr_info.block_type == 2) - && !(gr_info.mixed_block_flag != 0)) + if ((si.ch[ch].gr[gr].window_switching_flag != 0) && (si.ch[ch].gr[gr].block_type == 2) + && !(si.ch[ch].gr[gr].mixed_block_flag != 0)) return; - if ((gr_info.window_switching_flag != 0) && (gr_info.mixed_block_flag != 0) - && (gr_info.block_type == 2)) { + if ((si.ch[ch].gr[gr].window_switching_flag != 0) && (si.ch[ch].gr[gr].mixed_block_flag != 0) + && (si.ch[ch].gr[gr].block_type == 2)) { sb18lim = 18; } else { sb18lim = 558; @@ -1567,10 +1776,10 @@ final class LayerIIIDecoder implements FrameDecoder { for (ss = 0; ss < 8; ss++) { @LOC("THIS,LayerIIIDecoder.SI1") int src_idx1 = sb18 + 17 - ss; @LOC("THIS,LayerIIIDecoder.SI1") int src_idx2 = sb18 + 18 + ss; - @LOC("THIS,LayerIIIDecoder.OUT") float bu = out_1d[src_idx1]; - @LOC("THIS,LayerIIIDecoder.OUT") float bd = out_1d[src_idx2]; - out_1d[src_idx1] = (bu * cs[ss]) - (bd * ca[ss]); - out_1d[src_idx2] = (bd * cs[ss]) + (bu * ca[ss]); + @LOC("THIS,LayerIIIDecoder.OUT") float bu = inter[src_idx1]; + @LOC("THIS,LayerIIIDecoder.OUT") float bd = inter[src_idx2]; + inter[src_idx1] = (bu * cs[ss]) - (bd * ca[ss]); + inter[src_idx2] = (bd * cs[ss]) + (bu * ca[ss]); } } } @@ -1581,74 +1790,76 @@ final class LayerIIIDecoder implements FrameDecoder { // MDM: tsOutCopy and rawout do not need initializing, so the arrays // can be reused. - @LOC("TS") + @LOC("OUT") float[] tsOutCopy = new float[18]; - @LOC("RAW") + @LOC("OUT") float[] rawout = new float[36]; - @LATTICE("THIS