⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 layeriiidecoder.java

📁 j2me音乐播放
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
                s.scalefac_compress = stream.readbits(9);
                s.window_switching_flag = stream.readbits(1);
                if ((s.window_switching_flag) != 0) {
                    s.block_type = stream.readbits(2);
                    s.mixed_block_flag = stream.readbits(1);
                    s.table_select[0] = stream.readbits(5);
                    s.table_select[1] = stream.readbits(5);
                    s.subblock_gain[0] = stream.readbits(3);
                    s.subblock_gain[1] = stream.readbits(3);
                    s.subblock_gain[2] = stream.readbits(3);
                    // Set region_count parameters since they are implicit in this case.
                    if (s.block_type == 0) {
                        // Side info bad: block_type == 0 in split block
                        return false;
                    } else if (s.block_type == 2 && s.mixed_block_flag == 0) {
                        s.region0_count = 8;
                    } else {
                        s.region0_count = 7;
                        s.region1_count = 20 - s.region0_count;
                    }
                } else {
                    s.table_select[0] = stream.readbits(5);
                    s.table_select[1] = stream.readbits(5);
                    s.table_select[2] = stream.readbits(5);
                    s.region0_count = stream.readbits(4);
                    s.region1_count = stream.readbits(3);
                    s.block_type = 0;
                }
                s.scalefac_scale = stream.readbits(1);
                s.count1table_select = stream.readbits(1);
            }
        }

        return true;
    }

    private final void get_scale_factors(final int ch,final int gr) {
        GRInfo gr_info = (si.ch[ch].gr[gr]);
        int scale_comp = gr_info.scalefac_compress;
        int length0 = slen0[scale_comp];
        int length1 = slen1[scale_comp];
        int l[] = null;
        int s[][] = null;
        if(ch==0){
          l = scalefac0L;
          s = scalefac0S;
        }
        else{
          l = scalefac1L;
          s = scalefac1S;
        }
        if ((gr_info.window_switching_flag != 0) && (gr_info.block_type == 2)) {
           if ((gr_info.mixed_block_flag) != 0) {
              // MIXED
                for (int sfb = 0; sfb < 8; sfb++) {
                    l[sfb] = br.hgetbits(slen0[gr_info.scalefac_compress]);
                }
                for (int sfb = 3; sfb < 6; sfb++) {
                    for (int window = 0; window < 3; window++) {
                      s[window][sfb] = br.hgetbits(slen0[gr_info.scalefac_compress]);
                    }
                }
                for (int sfb = 6; sfb < 12; sfb++) {
                    for (int window = 0; window < 3; window++) {
                      s[window][sfb] = br.hgetbits(slen1[gr_info.scalefac_compress]);
                    }
                }
                for (int sfb = 12,window = 0; window < 3; window++) {
                    s[window][sfb] = 0;
                }
            }
            else {
                // SHORT
                s[0][0] = br.hgetbits(length0);
                s[1][0] = br.hgetbits(length0);
                s[2][0] = br.hgetbits(length0);
                s[0][1] = br.hgetbits(length0);
                s[1][1] = br.hgetbits(length0);
                s[2][1] = br.hgetbits(length0);
                s[0][2] = br.hgetbits(length0);
                s[1][2] = br.hgetbits(length0);
                s[2][2] = br.hgetbits(length0);
                s[0][3] = br.hgetbits(length0);
                s[1][3] = br.hgetbits(length0);
                s[2][3] = br.hgetbits(length0);
                s[0][4] = br.hgetbits(length0);
                s[1][4] = br.hgetbits(length0);
                s[2][4] = br.hgetbits(length0);
                s[0][5] = br.hgetbits(length0);
                s[1][5] = br.hgetbits(length0);
                s[2][5] = br.hgetbits(length0);
                s[0][6] = br.hgetbits(length1);
                s[1][6] = br.hgetbits(length1);
                s[2][6] = br.hgetbits(length1);
                s[0][7] = br.hgetbits(length1);
                s[1][7] = br.hgetbits(length1);
                s[2][7] = br.hgetbits(length1);
                s[0][8] = br.hgetbits(length1);
                s[1][8] = br.hgetbits(length1);
                s[2][8] = br.hgetbits(length1);
                s[0][9] = br.hgetbits(length1);
                s[1][9] = br.hgetbits(length1);
                s[2][9] = br.hgetbits(length1);
                s[0][10] = br.hgetbits(length1);
                s[1][10] = br.hgetbits(length1);
                s[2][10] = br.hgetbits(length1);
                s[0][11] = br.hgetbits(length1);
                s[1][11] = br.hgetbits(length1);
                s[2][11] = br.hgetbits(length1);
                s[0][12] = s[1][12] = s[2][12] = 0;
            }
            // SHORT
        } else {
            // LONG types 0,1,3
            int si_t[] = si.ch[ch].scfsi;
            if (gr == 0) {
                l[0] = br.hgetbits(length0);
                l[1] = br.hgetbits(length0);
                l[2] = br.hgetbits(length0);
                l[3] = br.hgetbits(length0);
                l[4] = br.hgetbits(length0);
                l[5] = br.hgetbits(length0);
                l[6] = br.hgetbits(length0);
                l[7] = br.hgetbits(length0);
                l[8] = br.hgetbits(length0);
                l[9] = br.hgetbits(length0);
                l[10] = br.hgetbits(length0);
                l[11] = br.hgetbits(length1);
                l[12] = br.hgetbits(length1);
                l[13] = br.hgetbits(length1);
                l[14] = br.hgetbits(length1);
                l[15] = br.hgetbits(length1);
                l[16] = br.hgetbits(length1);
                l[17] = br.hgetbits(length1);
                l[18] = br.hgetbits(length1);
                l[19] = br.hgetbits(length1);
                l[20] = br.hgetbits(length1);
            }
            else{
              if (si_t[0] == 0) {
                l[0] = br.hgetbits(length0);
                l[1] = br.hgetbits(length0);
                l[2] = br.hgetbits(length0);
                l[3] = br.hgetbits(length0);
                l[4] = br.hgetbits(length0);
                l[5] = br.hgetbits(length0);
              }
              if (si_t[1] == 0) {
                l[6] = br.hgetbits(length0);
                l[7] = br.hgetbits(length0);
                l[8] = br.hgetbits(length0);
                l[9] = br.hgetbits(length0);
                l[10] = br.hgetbits(length0);
              }
              if (si_t[2] == 0) {
                l[11] = br.hgetbits(length1);
                l[12] = br.hgetbits(length1);
                l[13] = br.hgetbits(length1);
                l[14] = br.hgetbits(length1);
                l[15] = br.hgetbits(length1);
              }
              if (si_t[3] == 0) {
                l[16] = br.hgetbits(length1);
                l[17] = br.hgetbits(length1);
                l[18] = br.hgetbits(length1);
                l[19] = br.hgetbits(length1);
                l[20] = br.hgetbits(length1);
              }
            }
            l[21] = l[22] = 0;
        }
    }


    private final void huffman_decode(final int ch,final int gr) {
        //huff.x = huff.y = huff.v = huff.w= 0;
        GRInfo s = si.ch[ch].gr[gr];
        int part2_3_end = part2_start + s.part2_3_length;
        int num_bits=0;
        int region1Start=0;
        int region2Start=0;
        int index;
        int buf;
        int buf1;

        // Find region boundary for short block case
        if (((s.window_switching_flag) != 0) && (s.block_type == 2)) {
            // Region2.
            region1Start = 36;
            // sfb[9/3]*3=36
            region2Start = 576;
            // No Region2 for short block case
        } else {
            // Find region boundary for long block case
            buf = s.region0_count + 1;
            buf1 = buf + s.region1_count + 1;
            if (buf1 > sfBandIndexL.length - 1) {
                buf1 = sfBandIndexL.length - 1;
            }
            region1Start = sfBandIndexL[buf];
            region2Start = sfBandIndexL[buf1];
        }
        index = 0;
        // Read bigvalues area
        int big_val_max,is_1d_max;

        big_val_max = s.big_values << 1;
        is_1d_max = is_1d.length;
       // for (int i = 0; (i < (s.big_values << 1)) && (i<is_1d.length); i += 2) {
        for (int i = 0; (i<big_val_max) && (i<is_1d_max); i += 2) {
            if (i < region1Start) {
                h = HuffmanTables.ht[s.table_select[0]];
            }
            else if (i < region2Start) {
                h = HuffmanTables.ht[s.table_select[1]];
            }
            else {
                h = HuffmanTables.ht[s.table_select[2]];
            }
            HuffmanTables.decode(h,huff,br);
            is_1d[index++] = HuffmanTables.Huffman.x;
            is_1d[index++] = HuffmanTables.Huffman.y;
        }

        h = HuffmanTables.ht[s.count1table_select + 32];
        num_bits = BitReserve.totbit;
        while ((num_bits < part2_3_end) && (index < 576)) {
            HuffmanTables.decode(h,huff,br);
            is_1d[index++] = HuffmanTables.Huffman.v;
            is_1d[index++] = HuffmanTables.Huffman.w;
            is_1d[index++] = HuffmanTables.Huffman.x;
            is_1d[index++] = HuffmanTables.Huffman.y;
            num_bits = BitReserve.totbit;
        }

        if (num_bits > part2_3_end) {
            br.rewindNbits(num_bits - part2_3_end);
            index -= 4;
        }

        num_bits = BitReserve.totbit;
        // Dismiss stuffing bits
        if (num_bits < part2_3_end) {
            br.hgetbits(part2_3_end - num_bits);
        }

        // Zero out rest
        if (index < 576) {
            if(ch==0)
              nonzero0 = index;
            else
              nonzero1 = index;
        } else {
            if(ch==0)
              nonzero0 = 576;
            else
              nonzero1 = 576;
        }
        if (index < 0) {
            index = 0;
        }
    }

    private final void dequantize_sample(final float xr[][],final int ch,final int gr) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -