Guest User

ForDecompressImpl(Old PackedIntDecompress)

a guest
Jul 20th, 2012
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 107.77 KB | None | 0 0
  1. package org.apache.lucene.codecs.pfor;
  2. /**
  3.  * Licensed to the Apache Software Foundation (ASF) under one or more
  4.  * contributor license agreements.  See the NOTICE file distributed with
  5.  * this work for additional information regarding copyright ownership.
  6.  * The ASF licenses this file to You under the Apache License, Version 2.0
  7.  * (the "License"); you may not use this file except in compliance with
  8.  * the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18.  /* This code is generated, do not modify. See gendecompress.py */
  19.  
  20. import java.nio.IntBuffer;
  21.  
  22. final class ForDecompressImpl {
  23.  
  24.   // nocommit: assess perf of this to see if specializing is really needed
  25.  
  26.   // NOTE: hardwired to blockSize == 128
  27.   public static void decode1(final int[] input, final int[] output) {
  28.     final int numFrameBits = 1;
  29.     final int mask = (int) ((1L<<numFrameBits) - 1);
  30.     int outputOffset = 0;
  31.     int inputOffset = 0;
  32.     for(int step=0;step<4;step++) {
  33.       final int intValue0 = input[inputOffset];
  34.       output[0 + outputOffset] = intValue0 & mask;
  35.       output[1 + outputOffset] = (intValue0 >>> 1) & mask;
  36.       output[2 + outputOffset] = (intValue0 >>> 2) & mask;
  37.       output[3 + outputOffset] = (intValue0 >>> 3) & mask;
  38.       output[4 + outputOffset] = (intValue0 >>> 4) & mask;
  39.       output[5 + outputOffset] = (intValue0 >>> 5) & mask;
  40.       output[6 + outputOffset] = (intValue0 >>> 6) & mask;
  41.       output[7 + outputOffset] = (intValue0 >>> 7) & mask;
  42.       output[8 + outputOffset] = (intValue0 >>> 8) & mask;
  43.       output[9 + outputOffset] = (intValue0 >>> 9) & mask;
  44.       output[10 + outputOffset] = (intValue0 >>> 10) & mask;
  45.       output[11 + outputOffset] = (intValue0 >>> 11) & mask;
  46.       output[12 + outputOffset] = (intValue0 >>> 12) & mask;
  47.       output[13 + outputOffset] = (intValue0 >>> 13) & mask;
  48.       output[14 + outputOffset] = (intValue0 >>> 14) & mask;
  49.       output[15 + outputOffset] = (intValue0 >>> 15) & mask;
  50.       output[16 + outputOffset] = (intValue0 >>> 16) & mask;
  51.       output[17 + outputOffset] = (intValue0 >>> 17) & mask;
  52.       output[18 + outputOffset] = (intValue0 >>> 18) & mask;
  53.       output[19 + outputOffset] = (intValue0 >>> 19) & mask;
  54.       output[20 + outputOffset] = (intValue0 >>> 20) & mask;
  55.       output[21 + outputOffset] = (intValue0 >>> 21) & mask;
  56.       output[22 + outputOffset] = (intValue0 >>> 22) & mask;
  57.       output[23 + outputOffset] = (intValue0 >>> 23) & mask;
  58.       output[24 + outputOffset] = (intValue0 >>> 24) & mask;
  59.       output[25 + outputOffset] = (intValue0 >>> 25) & mask;
  60.       output[26 + outputOffset] = (intValue0 >>> 26) & mask;
  61.       output[27 + outputOffset] = (intValue0 >>> 27) & mask;
  62.       output[28 + outputOffset] = (intValue0 >>> 28) & mask;
  63.       output[29 + outputOffset] = (intValue0 >>> 29) & mask;
  64.       output[30 + outputOffset] = (intValue0 >>> 30) & mask;
  65.       output[31 + outputOffset] = intValue0 >>> 31;
  66.       outputOffset += 32;
  67.       inputOffset += 1;
  68.     }
  69.   }
  70.  
  71.   // NOTE: hardwired to blockSize == 128
  72.   public static void decode2(final int[] input, final int[] output) {
  73.     final int numFrameBits = 2;
  74.     final int mask = (int) ((1L<<numFrameBits) - 1);
  75.     int outputOffset = 0;
  76.     int inputOffset = 0;
  77.     for(int step=0;step<4;step++) {
  78.       final int intValue0 = input[inputOffset];
  79.       final int intValue1 = input[1+inputOffset];
  80.       output[0 + outputOffset] = intValue0 & mask;
  81.       output[1 + outputOffset] = (intValue0 >>> 2) & mask;
  82.       output[2 + outputOffset] = (intValue0 >>> 4) & mask;
  83.       output[3 + outputOffset] = (intValue0 >>> 6) & mask;
  84.       output[4 + outputOffset] = (intValue0 >>> 8) & mask;
  85.       output[5 + outputOffset] = (intValue0 >>> 10) & mask;
  86.       output[6 + outputOffset] = (intValue0 >>> 12) & mask;
  87.       output[7 + outputOffset] = (intValue0 >>> 14) & mask;
  88.       output[8 + outputOffset] = (intValue0 >>> 16) & mask;
  89.       output[9 + outputOffset] = (intValue0 >>> 18) & mask;
  90.       output[10 + outputOffset] = (intValue0 >>> 20) & mask;
  91.       output[11 + outputOffset] = (intValue0 >>> 22) & mask;
  92.       output[12 + outputOffset] = (intValue0 >>> 24) & mask;
  93.       output[13 + outputOffset] = (intValue0 >>> 26) & mask;
  94.       output[14 + outputOffset] = (intValue0 >>> 28) & mask;
  95.       output[15 + outputOffset] = intValue0 >>> 30;
  96.       output[16 + outputOffset] = intValue1 & mask;
  97.       output[17 + outputOffset] = (intValue1 >>> 2) & mask;
  98.       output[18 + outputOffset] = (intValue1 >>> 4) & mask;
  99.       output[19 + outputOffset] = (intValue1 >>> 6) & mask;
  100.       output[20 + outputOffset] = (intValue1 >>> 8) & mask;
  101.       output[21 + outputOffset] = (intValue1 >>> 10) & mask;
  102.       output[22 + outputOffset] = (intValue1 >>> 12) & mask;
  103.       output[23 + outputOffset] = (intValue1 >>> 14) & mask;
  104.       output[24 + outputOffset] = (intValue1 >>> 16) & mask;
  105.       output[25 + outputOffset] = (intValue1 >>> 18) & mask;
  106.       output[26 + outputOffset] = (intValue1 >>> 20) & mask;
  107.       output[27 + outputOffset] = (intValue1 >>> 22) & mask;
  108.       output[28 + outputOffset] = (intValue1 >>> 24) & mask;
  109.       output[29 + outputOffset] = (intValue1 >>> 26) & mask;
  110.       output[30 + outputOffset] = (intValue1 >>> 28) & mask;
  111.       output[31 + outputOffset] = intValue1 >>> 30;
  112.       outputOffset += 32;
  113.       inputOffset += 2;
  114.     }
  115.   }
  116.  
  117.   // NOTE: hardwired to blockSize == 128
  118.   public static void decode3(final int[] input, final int[] output) {
  119.     final int numFrameBits = 3;
  120.     final int mask = (int) ((1L<<numFrameBits) - 1);
  121.     int outputOffset = 0;
  122.     int inputOffset = 0;
  123.     for(int step=0;step<4;step++) {
  124.       final int intValue0 = input[inputOffset];
  125.       final int intValue1 = input[1+inputOffset];
  126.       final int intValue2 = input[2+inputOffset];
  127.       output[0 + outputOffset] = intValue0 & mask;
  128.       output[1 + outputOffset] = (intValue0 >>> 3) & mask;
  129.       output[2 + outputOffset] = (intValue0 >>> 6) & mask;
  130.       output[3 + outputOffset] = (intValue0 >>> 9) & mask;
  131.       output[4 + outputOffset] = (intValue0 >>> 12) & mask;
  132.       output[5 + outputOffset] = (intValue0 >>> 15) & mask;
  133.       output[6 + outputOffset] = (intValue0 >>> 18) & mask;
  134.       output[7 + outputOffset] = (intValue0 >>> 21) & mask;
  135.       output[8 + outputOffset] = (intValue0 >>> 24) & mask;
  136.       output[9 + outputOffset] = (intValue0 >>> 27) & mask;
  137.       output[10 + outputOffset] = ((intValue0 >>> 30) | (intValue1 << 2)) & mask;
  138.       output[11 + outputOffset] = (intValue1 >>> 1) & mask;
  139.       output[12 + outputOffset] = (intValue1 >>> 4) & mask;
  140.       output[13 + outputOffset] = (intValue1 >>> 7) & mask;
  141.       output[14 + outputOffset] = (intValue1 >>> 10) & mask;
  142.       output[15 + outputOffset] = (intValue1 >>> 13) & mask;
  143.       output[16 + outputOffset] = (intValue1 >>> 16) & mask;
  144.       output[17 + outputOffset] = (intValue1 >>> 19) & mask;
  145.       output[18 + outputOffset] = (intValue1 >>> 22) & mask;
  146.       output[19 + outputOffset] = (intValue1 >>> 25) & mask;
  147.       output[20 + outputOffset] = (intValue1 >>> 28) & mask;
  148.       output[21 + outputOffset] = ((intValue1 >>> 31) | (intValue2 << 1)) & mask;
  149.       output[22 + outputOffset] = (intValue2 >>> 2) & mask;
  150.       output[23 + outputOffset] = (intValue2 >>> 5) & mask;
  151.       output[24 + outputOffset] = (intValue2 >>> 8) & mask;
  152.       output[25 + outputOffset] = (intValue2 >>> 11) & mask;
  153.       output[26 + outputOffset] = (intValue2 >>> 14) & mask;
  154.       output[27 + outputOffset] = (intValue2 >>> 17) & mask;
  155.       output[28 + outputOffset] = (intValue2 >>> 20) & mask;
  156.       output[29 + outputOffset] = (intValue2 >>> 23) & mask;
  157.       output[30 + outputOffset] = (intValue2 >>> 26) & mask;
  158.       output[31 + outputOffset] = intValue2 >>> 29;
  159.       outputOffset += 32;
  160.       inputOffset += 3;
  161.     }
  162.   }
  163.  
  164.   // NOTE: hardwired to blockSize == 128
  165.   public static void decode4(final int[] input, final int[] output) {
  166.     final int numFrameBits = 4;
  167.     final int mask = (int) ((1L<<numFrameBits) - 1);
  168.     int outputOffset = 0;
  169.     int inputOffset = 0;
  170.     for(int step=0;step<4;step++) {
  171.       final int intValue0 = input[inputOffset];
  172.       final int intValue1 = input[1+inputOffset];
  173.       final int intValue2 = input[2+inputOffset];
  174.       final int intValue3 = input[3+inputOffset];
  175.       output[0 + outputOffset] = intValue0 & mask;
  176.       output[1 + outputOffset] = (intValue0 >>> 4) & mask;
  177.       output[2 + outputOffset] = (intValue0 >>> 8) & mask;
  178.       output[3 + outputOffset] = (intValue0 >>> 12) & mask;
  179.       output[4 + outputOffset] = (intValue0 >>> 16) & mask;
  180.       output[5 + outputOffset] = (intValue0 >>> 20) & mask;
  181.       output[6 + outputOffset] = (intValue0 >>> 24) & mask;
  182.       output[7 + outputOffset] = intValue0 >>> 28;
  183.       output[8 + outputOffset] = intValue1 & mask;
  184.       output[9 + outputOffset] = (intValue1 >>> 4) & mask;
  185.       output[10 + outputOffset] = (intValue1 >>> 8) & mask;
  186.       output[11 + outputOffset] = (intValue1 >>> 12) & mask;
  187.       output[12 + outputOffset] = (intValue1 >>> 16) & mask;
  188.       output[13 + outputOffset] = (intValue1 >>> 20) & mask;
  189.       output[14 + outputOffset] = (intValue1 >>> 24) & mask;
  190.       output[15 + outputOffset] = intValue1 >>> 28;
  191.       output[16 + outputOffset] = intValue2 & mask;
  192.       output[17 + outputOffset] = (intValue2 >>> 4) & mask;
  193.       output[18 + outputOffset] = (intValue2 >>> 8) & mask;
  194.       output[19 + outputOffset] = (intValue2 >>> 12) & mask;
  195.       output[20 + outputOffset] = (intValue2 >>> 16) & mask;
  196.       output[21 + outputOffset] = (intValue2 >>> 20) & mask;
  197.       output[22 + outputOffset] = (intValue2 >>> 24) & mask;
  198.       output[23 + outputOffset] = intValue2 >>> 28;
  199.       output[24 + outputOffset] = intValue3 & mask;
  200.       output[25 + outputOffset] = (intValue3 >>> 4) & mask;
  201.       output[26 + outputOffset] = (intValue3 >>> 8) & mask;
  202.       output[27 + outputOffset] = (intValue3 >>> 12) & mask;
  203.       output[28 + outputOffset] = (intValue3 >>> 16) & mask;
  204.       output[29 + outputOffset] = (intValue3 >>> 20) & mask;
  205.       output[30 + outputOffset] = (intValue3 >>> 24) & mask;
  206.       output[31 + outputOffset] = intValue3 >>> 28;
  207.       outputOffset += 32;
  208.       inputOffset += 4;
  209.     }
  210.   }
  211.  
  212.   // NOTE: hardwired to blockSize == 128
  213.   public static void decode5(final int[] input, final int[] output) {
  214.     final int numFrameBits = 5;
  215.     final int mask = (int) ((1L<<numFrameBits) - 1);
  216.     int outputOffset = 0;
  217.     int inputOffset = 0;
  218.     for(int step=0;step<4;step++) {
  219.       final int intValue0 = input[inputOffset];
  220.       final int intValue1 = input[1+inputOffset];
  221.       final int intValue2 = input[2+inputOffset];
  222.       final int intValue3 = input[3+inputOffset];
  223.       final int intValue4 = input[4+inputOffset];
  224.       output[0 + outputOffset] = intValue0 & mask;
  225.       output[1 + outputOffset] = (intValue0 >>> 5) & mask;
  226.       output[2 + outputOffset] = (intValue0 >>> 10) & mask;
  227.       output[3 + outputOffset] = (intValue0 >>> 15) & mask;
  228.       output[4 + outputOffset] = (intValue0 >>> 20) & mask;
  229.       output[5 + outputOffset] = (intValue0 >>> 25) & mask;
  230.       output[6 + outputOffset] = ((intValue0 >>> 30) | (intValue1 << 2)) & mask;
  231.       output[7 + outputOffset] = (intValue1 >>> 3) & mask;
  232.       output[8 + outputOffset] = (intValue1 >>> 8) & mask;
  233.       output[9 + outputOffset] = (intValue1 >>> 13) & mask;
  234.       output[10 + outputOffset] = (intValue1 >>> 18) & mask;
  235.       output[11 + outputOffset] = (intValue1 >>> 23) & mask;
  236.       output[12 + outputOffset] = ((intValue1 >>> 28) | (intValue2 << 4)) & mask;
  237.       output[13 + outputOffset] = (intValue2 >>> 1) & mask;
  238.       output[14 + outputOffset] = (intValue2 >>> 6) & mask;
  239.       output[15 + outputOffset] = (intValue2 >>> 11) & mask;
  240.       output[16 + outputOffset] = (intValue2 >>> 16) & mask;
  241.       output[17 + outputOffset] = (intValue2 >>> 21) & mask;
  242.       output[18 + outputOffset] = (intValue2 >>> 26) & mask;
  243.       output[19 + outputOffset] = ((intValue2 >>> 31) | (intValue3 << 1)) & mask;
  244.       output[20 + outputOffset] = (intValue3 >>> 4) & mask;
  245.       output[21 + outputOffset] = (intValue3 >>> 9) & mask;
  246.       output[22 + outputOffset] = (intValue3 >>> 14) & mask;
  247.       output[23 + outputOffset] = (intValue3 >>> 19) & mask;
  248.       output[24 + outputOffset] = (intValue3 >>> 24) & mask;
  249.       output[25 + outputOffset] = ((intValue3 >>> 29) | (intValue4 << 3)) & mask;
  250.       output[26 + outputOffset] = (intValue4 >>> 2) & mask;
  251.       output[27 + outputOffset] = (intValue4 >>> 7) & mask;
  252.       output[28 + outputOffset] = (intValue4 >>> 12) & mask;
  253.       output[29 + outputOffset] = (intValue4 >>> 17) & mask;
  254.       output[30 + outputOffset] = (intValue4 >>> 22) & mask;
  255.       output[31 + outputOffset] = intValue4 >>> 27;
  256.       outputOffset += 32;
  257.       inputOffset += 5;
  258.     }
  259.   }
  260.  
  261.   // NOTE: hardwired to blockSize == 128
  262.   public static void decode6(final int[] input, final int[] output) {
  263.     final int numFrameBits = 6;
  264.     final int mask = (int) ((1L<<numFrameBits) - 1);
  265.     int outputOffset = 0;
  266.     int inputOffset = 0;
  267.     for(int step=0;step<4;step++) {
  268.       final int intValue0 = input[inputOffset];
  269.       final int intValue1 = input[1+inputOffset];
  270.       final int intValue2 = input[2+inputOffset];
  271.       final int intValue3 = input[3+inputOffset];
  272.       final int intValue4 = input[4+inputOffset];
  273.       final int intValue5 = input[5+inputOffset];
  274.       output[0 + outputOffset] = intValue0 & mask;
  275.       output[1 + outputOffset] = (intValue0 >>> 6) & mask;
  276.       output[2 + outputOffset] = (intValue0 >>> 12) & mask;
  277.       output[3 + outputOffset] = (intValue0 >>> 18) & mask;
  278.       output[4 + outputOffset] = (intValue0 >>> 24) & mask;
  279.       output[5 + outputOffset] = ((intValue0 >>> 30) | (intValue1 << 2)) & mask;
  280.       output[6 + outputOffset] = (intValue1 >>> 4) & mask;
  281.       output[7 + outputOffset] = (intValue1 >>> 10) & mask;
  282.       output[8 + outputOffset] = (intValue1 >>> 16) & mask;
  283.       output[9 + outputOffset] = (intValue1 >>> 22) & mask;
  284.       output[10 + outputOffset] = ((intValue1 >>> 28) | (intValue2 << 4)) & mask;
  285.       output[11 + outputOffset] = (intValue2 >>> 2) & mask;
  286.       output[12 + outputOffset] = (intValue2 >>> 8) & mask;
  287.       output[13 + outputOffset] = (intValue2 >>> 14) & mask;
  288.       output[14 + outputOffset] = (intValue2 >>> 20) & mask;
  289.       output[15 + outputOffset] = intValue2 >>> 26;
  290.       output[16 + outputOffset] = intValue3 & mask;
  291.       output[17 + outputOffset] = (intValue3 >>> 6) & mask;
  292.       output[18 + outputOffset] = (intValue3 >>> 12) & mask;
  293.       output[19 + outputOffset] = (intValue3 >>> 18) & mask;
  294.       output[20 + outputOffset] = (intValue3 >>> 24) & mask;
  295.       output[21 + outputOffset] = ((intValue3 >>> 30) | (intValue4 << 2)) & mask;
  296.       output[22 + outputOffset] = (intValue4 >>> 4) & mask;
  297.       output[23 + outputOffset] = (intValue4 >>> 10) & mask;
  298.       output[24 + outputOffset] = (intValue4 >>> 16) & mask;
  299.       output[25 + outputOffset] = (intValue4 >>> 22) & mask;
  300.       output[26 + outputOffset] = ((intValue4 >>> 28) | (intValue5 << 4)) & mask;
  301.       output[27 + outputOffset] = (intValue5 >>> 2) & mask;
  302.       output[28 + outputOffset] = (intValue5 >>> 8) & mask;
  303.       output[29 + outputOffset] = (intValue5 >>> 14) & mask;
  304.       output[30 + outputOffset] = (intValue5 >>> 20) & mask;
  305.       output[31 + outputOffset] = intValue5 >>> 26;
  306.       outputOffset += 32;
  307.       inputOffset += 6;
  308.     }
  309.   }
  310.  
  311.   // NOTE: hardwired to blockSize == 128
  312.   public static void decode7(final int[] input, final int[] output) {
  313.     final int numFrameBits = 7;
  314.     final int mask = (int) ((1L<<numFrameBits) - 1);
  315.     int outputOffset = 0;
  316.     int inputOffset = 0;
  317.     for(int step=0;step<4;step++) {
  318.       final int intValue0 = input[inputOffset];
  319.       final int intValue1 = input[1+inputOffset];
  320.       final int intValue2 = input[2+inputOffset];
  321.       final int intValue3 = input[3+inputOffset];
  322.       final int intValue4 = input[4+inputOffset];
  323.       final int intValue5 = input[5+inputOffset];
  324.       final int intValue6 = input[6+inputOffset];
  325.       output[0 + outputOffset] = intValue0 & mask;
  326.       output[1 + outputOffset] = (intValue0 >>> 7) & mask;
  327.       output[2 + outputOffset] = (intValue0 >>> 14) & mask;
  328.       output[3 + outputOffset] = (intValue0 >>> 21) & mask;
  329.       output[4 + outputOffset] = ((intValue0 >>> 28) | (intValue1 << 4)) & mask;
  330.       output[5 + outputOffset] = (intValue1 >>> 3) & mask;
  331.       output[6 + outputOffset] = (intValue1 >>> 10) & mask;
  332.       output[7 + outputOffset] = (intValue1 >>> 17) & mask;
  333.       output[8 + outputOffset] = (intValue1 >>> 24) & mask;
  334.       output[9 + outputOffset] = ((intValue1 >>> 31) | (intValue2 << 1)) & mask;
  335.       output[10 + outputOffset] = (intValue2 >>> 6) & mask;
  336.       output[11 + outputOffset] = (intValue2 >>> 13) & mask;
  337.       output[12 + outputOffset] = (intValue2 >>> 20) & mask;
  338.       output[13 + outputOffset] = ((intValue2 >>> 27) | (intValue3 << 5)) & mask;
  339.       output[14 + outputOffset] = (intValue3 >>> 2) & mask;
  340.       output[15 + outputOffset] = (intValue3 >>> 9) & mask;
  341.       output[16 + outputOffset] = (intValue3 >>> 16) & mask;
  342.       output[17 + outputOffset] = (intValue3 >>> 23) & mask;
  343.       output[18 + outputOffset] = ((intValue3 >>> 30) | (intValue4 << 2)) & mask;
  344.       output[19 + outputOffset] = (intValue4 >>> 5) & mask;
  345.       output[20 + outputOffset] = (intValue4 >>> 12) & mask;
  346.       output[21 + outputOffset] = (intValue4 >>> 19) & mask;
  347.       output[22 + outputOffset] = ((intValue4 >>> 26) | (intValue5 << 6)) & mask;
  348.       output[23 + outputOffset] = (intValue5 >>> 1) & mask;
  349.       output[24 + outputOffset] = (intValue5 >>> 8) & mask;
  350.       output[25 + outputOffset] = (intValue5 >>> 15) & mask;
  351.       output[26 + outputOffset] = (intValue5 >>> 22) & mask;
  352.       output[27 + outputOffset] = ((intValue5 >>> 29) | (intValue6 << 3)) & mask;
  353.       output[28 + outputOffset] = (intValue6 >>> 4) & mask;
  354.       output[29 + outputOffset] = (intValue6 >>> 11) & mask;
  355.       output[30 + outputOffset] = (intValue6 >>> 18) & mask;
  356.       output[31 + outputOffset] = intValue6 >>> 25;
  357.       outputOffset += 32;
  358.       inputOffset += 7;
  359.     }
  360.   }
  361.  
  362.   // NOTE: hardwired to blockSize == 128
  363.   public static void decode8(final int[] input, final int[] output) {
  364.     final int numFrameBits = 8;
  365.     final int mask = (int) ((1L<<numFrameBits) - 1);
  366.     int outputOffset = 0;
  367.     int inputOffset = 0;
  368.     for(int step=0;step<4;step++) {
  369.       final int intValue0 = input[inputOffset];
  370.       final int intValue1 = input[1+inputOffset];
  371.       final int intValue2 = input[2+inputOffset];
  372.       final int intValue3 = input[3+inputOffset];
  373.       final int intValue4 = input[4+inputOffset];
  374.       final int intValue5 = input[5+inputOffset];
  375.       final int intValue6 = input[6+inputOffset];
  376.       final int intValue7 = input[7+inputOffset];
  377.       output[0 + outputOffset] = intValue0 & mask;
  378.       output[1 + outputOffset] = (intValue0 >>> 8) & mask;
  379.       output[2 + outputOffset] = (intValue0 >>> 16) & mask;
  380.       output[3 + outputOffset] = intValue0 >>> 24;
  381.       output[4 + outputOffset] = intValue1 & mask;
  382.       output[5 + outputOffset] = (intValue1 >>> 8) & mask;
  383.       output[6 + outputOffset] = (intValue1 >>> 16) & mask;
  384.       output[7 + outputOffset] = intValue1 >>> 24;
  385.       output[8 + outputOffset] = intValue2 & mask;
  386.       output[9 + outputOffset] = (intValue2 >>> 8) & mask;
  387.       output[10 + outputOffset] = (intValue2 >>> 16) & mask;
  388.       output[11 + outputOffset] = intValue2 >>> 24;
  389.       output[12 + outputOffset] = intValue3 & mask;
  390.       output[13 + outputOffset] = (intValue3 >>> 8) & mask;
  391.       output[14 + outputOffset] = (intValue3 >>> 16) & mask;
  392.       output[15 + outputOffset] = intValue3 >>> 24;
  393.       output[16 + outputOffset] = intValue4 & mask;
  394.       output[17 + outputOffset] = (intValue4 >>> 8) & mask;
  395.       output[18 + outputOffset] = (intValue4 >>> 16) & mask;
  396.       output[19 + outputOffset] = intValue4 >>> 24;
  397.       output[20 + outputOffset] = intValue5 & mask;
  398.       output[21 + outputOffset] = (intValue5 >>> 8) & mask;
  399.       output[22 + outputOffset] = (intValue5 >>> 16) & mask;
  400.       output[23 + outputOffset] = intValue5 >>> 24;
  401.       output[24 + outputOffset] = intValue6 & mask;
  402.       output[25 + outputOffset] = (intValue6 >>> 8) & mask;
  403.       output[26 + outputOffset] = (intValue6 >>> 16) & mask;
  404.       output[27 + outputOffset] = intValue6 >>> 24;
  405.       output[28 + outputOffset] = intValue7 & mask;
  406.       output[29 + outputOffset] = (intValue7 >>> 8) & mask;
  407.       output[30 + outputOffset] = (intValue7 >>> 16) & mask;
  408.       output[31 + outputOffset] = intValue7 >>> 24;
  409.       outputOffset += 32;
  410.       inputOffset += 8;
  411.     }
  412.   }
  413.  
  414.   // NOTE: hardwired to blockSize == 128
  415.   public static void decode9(final int[] input, final int[] output) {
  416.     final int numFrameBits = 9;
  417.     final int mask = (int) ((1L<<numFrameBits) - 1);
  418.     int outputOffset = 0;
  419.     int inputOffset = 0;
  420.     for(int step=0;step<4;step++) {
  421.       final int intValue0 = input[inputOffset];
  422.       final int intValue1 = input[1+inputOffset];
  423.       final int intValue2 = input[2+inputOffset];
  424.       final int intValue3 = input[3+inputOffset];
  425.       final int intValue4 = input[4+inputOffset];
  426.       final int intValue5 = input[5+inputOffset];
  427.       final int intValue6 = input[6+inputOffset];
  428.       final int intValue7 = input[7+inputOffset];
  429.       final int intValue8 = input[8+inputOffset];
  430.       output[0 + outputOffset] = intValue0 & mask;
  431.       output[1 + outputOffset] = (intValue0 >>> 9) & mask;
  432.       output[2 + outputOffset] = (intValue0 >>> 18) & mask;
  433.       output[3 + outputOffset] = ((intValue0 >>> 27) | (intValue1 << 5)) & mask;
  434.       output[4 + outputOffset] = (intValue1 >>> 4) & mask;
  435.       output[5 + outputOffset] = (intValue1 >>> 13) & mask;
  436.       output[6 + outputOffset] = (intValue1 >>> 22) & mask;
  437.       output[7 + outputOffset] = ((intValue1 >>> 31) | (intValue2 << 1)) & mask;
  438.       output[8 + outputOffset] = (intValue2 >>> 8) & mask;
  439.       output[9 + outputOffset] = (intValue2 >>> 17) & mask;
  440.       output[10 + outputOffset] = ((intValue2 >>> 26) | (intValue3 << 6)) & mask;
  441.       output[11 + outputOffset] = (intValue3 >>> 3) & mask;
  442.       output[12 + outputOffset] = (intValue3 >>> 12) & mask;
  443.       output[13 + outputOffset] = (intValue3 >>> 21) & mask;
  444.       output[14 + outputOffset] = ((intValue3 >>> 30) | (intValue4 << 2)) & mask;
  445.       output[15 + outputOffset] = (intValue4 >>> 7) & mask;
  446.       output[16 + outputOffset] = (intValue4 >>> 16) & mask;
  447.       output[17 + outputOffset] = ((intValue4 >>> 25) | (intValue5 << 7)) & mask;
  448.       output[18 + outputOffset] = (intValue5 >>> 2) & mask;
  449.       output[19 + outputOffset] = (intValue5 >>> 11) & mask;
  450.       output[20 + outputOffset] = (intValue5 >>> 20) & mask;
  451.       output[21 + outputOffset] = ((intValue5 >>> 29) | (intValue6 << 3)) & mask;
  452.       output[22 + outputOffset] = (intValue6 >>> 6) & mask;
  453.       output[23 + outputOffset] = (intValue6 >>> 15) & mask;
  454.       output[24 + outputOffset] = ((intValue6 >>> 24) | (intValue7 << 8)) & mask;
  455.       output[25 + outputOffset] = (intValue7 >>> 1) & mask;
  456.       output[26 + outputOffset] = (intValue7 >>> 10) & mask;
  457.       output[27 + outputOffset] = (intValue7 >>> 19) & mask;
  458.       output[28 + outputOffset] = ((intValue7 >>> 28) | (intValue8 << 4)) & mask;
  459.       output[29 + outputOffset] = (intValue8 >>> 5) & mask;
  460.       output[30 + outputOffset] = (intValue8 >>> 14) & mask;
  461.       output[31 + outputOffset] = intValue8 >>> 23;
  462.       outputOffset += 32;
  463.       inputOffset += 9;
  464.     }
  465.   }
  466.  
  467.   // NOTE: hardwired to blockSize == 128
  468.   public static void decode10(final int[] input, final int[] output) {
  469.     final int numFrameBits = 10;
  470.     final int mask = (int) ((1L<<numFrameBits) - 1);
  471.     int outputOffset = 0;
  472.     int inputOffset = 0;
  473.     for(int step=0;step<4;step++) {
  474.       final int intValue0 = input[inputOffset];
  475.       final int intValue1 = input[1+inputOffset];
  476.       final int intValue2 = input[2+inputOffset];
  477.       final int intValue3 = input[3+inputOffset];
  478.       final int intValue4 = input[4+inputOffset];
  479.       final int intValue5 = input[5+inputOffset];
  480.       final int intValue6 = input[6+inputOffset];
  481.       final int intValue7 = input[7+inputOffset];
  482.       final int intValue8 = input[8+inputOffset];
  483.       final int intValue9 = input[9+inputOffset];
  484.       output[0 + outputOffset] = intValue0 & mask;
  485.       output[1 + outputOffset] = (intValue0 >>> 10) & mask;
  486.       output[2 + outputOffset] = (intValue0 >>> 20) & mask;
  487.       output[3 + outputOffset] = ((intValue0 >>> 30) | (intValue1 << 2)) & mask;
  488.       output[4 + outputOffset] = (intValue1 >>> 8) & mask;
  489.       output[5 + outputOffset] = (intValue1 >>> 18) & mask;
  490.       output[6 + outputOffset] = ((intValue1 >>> 28) | (intValue2 << 4)) & mask;
  491.       output[7 + outputOffset] = (intValue2 >>> 6) & mask;
  492.       output[8 + outputOffset] = (intValue2 >>> 16) & mask;
  493.       output[9 + outputOffset] = ((intValue2 >>> 26) | (intValue3 << 6)) & mask;
  494.       output[10 + outputOffset] = (intValue3 >>> 4) & mask;
  495.       output[11 + outputOffset] = (intValue3 >>> 14) & mask;
  496.       output[12 + outputOffset] = ((intValue3 >>> 24) | (intValue4 << 8)) & mask;
  497.       output[13 + outputOffset] = (intValue4 >>> 2) & mask;
  498.       output[14 + outputOffset] = (intValue4 >>> 12) & mask;
  499.       output[15 + outputOffset] = intValue4 >>> 22;
  500.       output[16 + outputOffset] = intValue5 & mask;
  501.       output[17 + outputOffset] = (intValue5 >>> 10) & mask;
  502.       output[18 + outputOffset] = (intValue5 >>> 20) & mask;
  503.       output[19 + outputOffset] = ((intValue5 >>> 30) | (intValue6 << 2)) & mask;
  504.       output[20 + outputOffset] = (intValue6 >>> 8) & mask;
  505.       output[21 + outputOffset] = (intValue6 >>> 18) & mask;
  506.       output[22 + outputOffset] = ((intValue6 >>> 28) | (intValue7 << 4)) & mask;
  507.       output[23 + outputOffset] = (intValue7 >>> 6) & mask;
  508.       output[24 + outputOffset] = (intValue7 >>> 16) & mask;
  509.       output[25 + outputOffset] = ((intValue7 >>> 26) | (intValue8 << 6)) & mask;
  510.       output[26 + outputOffset] = (intValue8 >>> 4) & mask;
  511.       output[27 + outputOffset] = (intValue8 >>> 14) & mask;
  512.       output[28 + outputOffset] = ((intValue8 >>> 24) | (intValue9 << 8)) & mask;
  513.       output[29 + outputOffset] = (intValue9 >>> 2) & mask;
  514.       output[30 + outputOffset] = (intValue9 >>> 12) & mask;
  515.       output[31 + outputOffset] = intValue9 >>> 22;
  516.       outputOffset += 32;
  517.       inputOffset += 10;
  518.     }
  519.   }
  520.  
  521.   // NOTE: hardwired to blockSize == 128
  522.   public static void decode11(final int[] input, final int[] output) {
  523.     final int numFrameBits = 11;
  524.     final int mask = (int) ((1L<<numFrameBits) - 1);
  525.     int outputOffset = 0;
  526.     int inputOffset = 0;
  527.     for(int step=0;step<4;step++) {
  528.       final int intValue0 = input[inputOffset];
  529.       final int intValue1 = input[1+inputOffset];
  530.       final int intValue2 = input[2+inputOffset];
  531.       final int intValue3 = input[3+inputOffset];
  532.       final int intValue4 = input[4+inputOffset];
  533.       final int intValue5 = input[5+inputOffset];
  534.       final int intValue6 = input[6+inputOffset];
  535.       final int intValue7 = input[7+inputOffset];
  536.       final int intValue8 = input[8+inputOffset];
  537.       final int intValue9 = input[9+inputOffset];
  538.       final int intValue10 = input[10+inputOffset];
  539.       output[0 + outputOffset] = intValue0 & mask;
  540.       output[1 + outputOffset] = (intValue0 >>> 11) & mask;
  541.       output[2 + outputOffset] = ((intValue0 >>> 22) | (intValue1 << 10)) & mask;
  542.       output[3 + outputOffset] = (intValue1 >>> 1) & mask;
  543.       output[4 + outputOffset] = (intValue1 >>> 12) & mask;
  544.       output[5 + outputOffset] = ((intValue1 >>> 23) | (intValue2 << 9)) & mask;
  545.       output[6 + outputOffset] = (intValue2 >>> 2) & mask;
  546.       output[7 + outputOffset] = (intValue2 >>> 13) & mask;
  547.       output[8 + outputOffset] = ((intValue2 >>> 24) | (intValue3 << 8)) & mask;
  548.       output[9 + outputOffset] = (intValue3 >>> 3) & mask;
  549.       output[10 + outputOffset] = (intValue3 >>> 14) & mask;
  550.       output[11 + outputOffset] = ((intValue3 >>> 25) | (intValue4 << 7)) & mask;
  551.       output[12 + outputOffset] = (intValue4 >>> 4) & mask;
  552.       output[13 + outputOffset] = (intValue4 >>> 15) & mask;
  553.       output[14 + outputOffset] = ((intValue4 >>> 26) | (intValue5 << 6)) & mask;
  554.       output[15 + outputOffset] = (intValue5 >>> 5) & mask;
  555.       output[16 + outputOffset] = (intValue5 >>> 16) & mask;
  556.       output[17 + outputOffset] = ((intValue5 >>> 27) | (intValue6 << 5)) & mask;
  557.       output[18 + outputOffset] = (intValue6 >>> 6) & mask;
  558.       output[19 + outputOffset] = (intValue6 >>> 17) & mask;
  559.       output[20 + outputOffset] = ((intValue6 >>> 28) | (intValue7 << 4)) & mask;
  560.       output[21 + outputOffset] = (intValue7 >>> 7) & mask;
  561.       output[22 + outputOffset] = (intValue7 >>> 18) & mask;
  562.       output[23 + outputOffset] = ((intValue7 >>> 29) | (intValue8 << 3)) & mask;
  563.       output[24 + outputOffset] = (intValue8 >>> 8) & mask;
  564.       output[25 + outputOffset] = (intValue8 >>> 19) & mask;
  565.       output[26 + outputOffset] = ((intValue8 >>> 30) | (intValue9 << 2)) & mask;
  566.       output[27 + outputOffset] = (intValue9 >>> 9) & mask;
  567.       output[28 + outputOffset] = (intValue9 >>> 20) & mask;
  568.       output[29 + outputOffset] = ((intValue9 >>> 31) | (intValue10 << 1)) & mask;
  569.       output[30 + outputOffset] = (intValue10 >>> 10) & mask;
  570.       output[31 + outputOffset] = intValue10 >>> 21;
  571.       outputOffset += 32;
  572.       inputOffset += 11;
  573.     }
  574.   }
  575.  
  576.   // NOTE: hardwired to blockSize == 128
  577.   public static void decode12(final int[] input, final int[] output) {
  578.     final int numFrameBits = 12;
  579.     final int mask = (int) ((1L<<numFrameBits) - 1);
  580.     int outputOffset = 0;
  581.     int inputOffset = 0;
  582.     for(int step=0;step<4;step++) {
  583.       final int intValue0 = input[inputOffset];
  584.       final int intValue1 = input[1+inputOffset];
  585.       final int intValue2 = input[2+inputOffset];
  586.       final int intValue3 = input[3+inputOffset];
  587.       final int intValue4 = input[4+inputOffset];
  588.       final int intValue5 = input[5+inputOffset];
  589.       final int intValue6 = input[6+inputOffset];
  590.       final int intValue7 = input[7+inputOffset];
  591.       final int intValue8 = input[8+inputOffset];
  592.       final int intValue9 = input[9+inputOffset];
  593.       final int intValue10 = input[10+inputOffset];
  594.       final int intValue11 = input[11+inputOffset];
  595.       output[0 + outputOffset] = intValue0 & mask;
  596.       output[1 + outputOffset] = (intValue0 >>> 12) & mask;
  597.       output[2 + outputOffset] = ((intValue0 >>> 24) | (intValue1 << 8)) & mask;
  598.       output[3 + outputOffset] = (intValue1 >>> 4) & mask;
  599.       output[4 + outputOffset] = (intValue1 >>> 16) & mask;
  600.       output[5 + outputOffset] = ((intValue1 >>> 28) | (intValue2 << 4)) & mask;
  601.       output[6 + outputOffset] = (intValue2 >>> 8) & mask;
  602.       output[7 + outputOffset] = intValue2 >>> 20;
  603.       output[8 + outputOffset] = intValue3 & mask;
  604.       output[9 + outputOffset] = (intValue3 >>> 12) & mask;
  605.       output[10 + outputOffset] = ((intValue3 >>> 24) | (intValue4 << 8)) & mask;
  606.       output[11 + outputOffset] = (intValue4 >>> 4) & mask;
  607.       output[12 + outputOffset] = (intValue4 >>> 16) & mask;
  608.       output[13 + outputOffset] = ((intValue4 >>> 28) | (intValue5 << 4)) & mask;
  609.       output[14 + outputOffset] = (intValue5 >>> 8) & mask;
  610.       output[15 + outputOffset] = intValue5 >>> 20;
  611.       output[16 + outputOffset] = intValue6 & mask;
  612.       output[17 + outputOffset] = (intValue6 >>> 12) & mask;
  613.       output[18 + outputOffset] = ((intValue6 >>> 24) | (intValue7 << 8)) & mask;
  614.       output[19 + outputOffset] = (intValue7 >>> 4) & mask;
  615.       output[20 + outputOffset] = (intValue7 >>> 16) & mask;
  616.       output[21 + outputOffset] = ((intValue7 >>> 28) | (intValue8 << 4)) & mask;
  617.       output[22 + outputOffset] = (intValue8 >>> 8) & mask;
  618.       output[23 + outputOffset] = intValue8 >>> 20;
  619.       output[24 + outputOffset] = intValue9 & mask;
  620.       output[25 + outputOffset] = (intValue9 >>> 12) & mask;
  621.       output[26 + outputOffset] = ((intValue9 >>> 24) | (intValue10 << 8)) & mask;
  622.       output[27 + outputOffset] = (intValue10 >>> 4) & mask;
  623.       output[28 + outputOffset] = (intValue10 >>> 16) & mask;
  624.       output[29 + outputOffset] = ((intValue10 >>> 28) | (intValue11 << 4)) & mask;
  625.       output[30 + outputOffset] = (intValue11 >>> 8) & mask;
  626.       output[31 + outputOffset] = intValue11 >>> 20;
  627.       outputOffset += 32;
  628.       inputOffset += 12;
  629.     }
  630.   }
  631.  
  632.   // NOTE: hardwired to blockSize == 128
  633.   public static void decode13(final int[] input, final int[] output) {
  634.     final int numFrameBits = 13;
  635.     final int mask = (int) ((1L<<numFrameBits) - 1);
  636.     int outputOffset = 0;
  637.     int inputOffset = 0;
  638.     for(int step=0;step<4;step++) {
  639.       final int intValue0 = input[inputOffset];
  640.       final int intValue1 = input[1+inputOffset];
  641.       final int intValue2 = input[2+inputOffset];
  642.       final int intValue3 = input[3+inputOffset];
  643.       final int intValue4 = input[4+inputOffset];
  644.       final int intValue5 = input[5+inputOffset];
  645.       final int intValue6 = input[6+inputOffset];
  646.       final int intValue7 = input[7+inputOffset];
  647.       final int intValue8 = input[8+inputOffset];
  648.       final int intValue9 = input[9+inputOffset];
  649.       final int intValue10 = input[10+inputOffset];
  650.       final int intValue11 = input[11+inputOffset];
  651.       final int intValue12 = input[12+inputOffset];
  652.       output[0 + outputOffset] = intValue0 & mask;
  653.       output[1 + outputOffset] = (intValue0 >>> 13) & mask;
  654.       output[2 + outputOffset] = ((intValue0 >>> 26) | (intValue1 << 6)) & mask;
  655.       output[3 + outputOffset] = (intValue1 >>> 7) & mask;
  656.       output[4 + outputOffset] = ((intValue1 >>> 20) | (intValue2 << 12)) & mask;
  657.       output[5 + outputOffset] = (intValue2 >>> 1) & mask;
  658.       output[6 + outputOffset] = (intValue2 >>> 14) & mask;
  659.       output[7 + outputOffset] = ((intValue2 >>> 27) | (intValue3 << 5)) & mask;
  660.       output[8 + outputOffset] = (intValue3 >>> 8) & mask;
  661.       output[9 + outputOffset] = ((intValue3 >>> 21) | (intValue4 << 11)) & mask;
  662.       output[10 + outputOffset] = (intValue4 >>> 2) & mask;
  663.       output[11 + outputOffset] = (intValue4 >>> 15) & mask;
  664.       output[12 + outputOffset] = ((intValue4 >>> 28) | (intValue5 << 4)) & mask;
  665.       output[13 + outputOffset] = (intValue5 >>> 9) & mask;
  666.       output[14 + outputOffset] = ((intValue5 >>> 22) | (intValue6 << 10)) & mask;
  667.       output[15 + outputOffset] = (intValue6 >>> 3) & mask;
  668.       output[16 + outputOffset] = (intValue6 >>> 16) & mask;
  669.       output[17 + outputOffset] = ((intValue6 >>> 29) | (intValue7 << 3)) & mask;
  670.       output[18 + outputOffset] = (intValue7 >>> 10) & mask;
  671.       output[19 + outputOffset] = ((intValue7 >>> 23) | (intValue8 << 9)) & mask;
  672.       output[20 + outputOffset] = (intValue8 >>> 4) & mask;
  673.       output[21 + outputOffset] = (intValue8 >>> 17) & mask;
  674.       output[22 + outputOffset] = ((intValue8 >>> 30) | (intValue9 << 2)) & mask;
  675.       output[23 + outputOffset] = (intValue9 >>> 11) & mask;
  676.       output[24 + outputOffset] = ((intValue9 >>> 24) | (intValue10 << 8)) & mask;
  677.       output[25 + outputOffset] = (intValue10 >>> 5) & mask;
  678.       output[26 + outputOffset] = (intValue10 >>> 18) & mask;
  679.       output[27 + outputOffset] = ((intValue10 >>> 31) | (intValue11 << 1)) & mask;
  680.       output[28 + outputOffset] = (intValue11 >>> 12) & mask;
  681.       output[29 + outputOffset] = ((intValue11 >>> 25) | (intValue12 << 7)) & mask;
  682.       output[30 + outputOffset] = (intValue12 >>> 6) & mask;
  683.       output[31 + outputOffset] = intValue12 >>> 19;
  684.       outputOffset += 32;
  685.       inputOffset += 13;
  686.     }
  687.   }
  688.  
  689.   // NOTE: hardwired to blockSize == 128
  690.   public static void decode14(final int[] input, final int[] output) {
  691.     final int numFrameBits = 14;
  692.     final int mask = (int) ((1L<<numFrameBits) - 1);
  693.     int outputOffset = 0;
  694.     int inputOffset = 0;
  695.     for(int step=0;step<4;step++) {
  696.       final int intValue0 = input[inputOffset];
  697.       final int intValue1 = input[1+inputOffset];
  698.       final int intValue2 = input[2+inputOffset];
  699.       final int intValue3 = input[3+inputOffset];
  700.       final int intValue4 = input[4+inputOffset];
  701.       final int intValue5 = input[5+inputOffset];
  702.       final int intValue6 = input[6+inputOffset];
  703.       final int intValue7 = input[7+inputOffset];
  704.       final int intValue8 = input[8+inputOffset];
  705.       final int intValue9 = input[9+inputOffset];
  706.       final int intValue10 = input[10+inputOffset];
  707.       final int intValue11 = input[11+inputOffset];
  708.       final int intValue12 = input[12+inputOffset];
  709.       final int intValue13 = input[13+inputOffset];
  710.       output[0 + outputOffset] = intValue0 & mask;
  711.       output[1 + outputOffset] = (intValue0 >>> 14) & mask;
  712.       output[2 + outputOffset] = ((intValue0 >>> 28) | (intValue1 << 4)) & mask;
  713.       output[3 + outputOffset] = (intValue1 >>> 10) & mask;
  714.       output[4 + outputOffset] = ((intValue1 >>> 24) | (intValue2 << 8)) & mask;
  715.       output[5 + outputOffset] = (intValue2 >>> 6) & mask;
  716.       output[6 + outputOffset] = ((intValue2 >>> 20) | (intValue3 << 12)) & mask;
  717.       output[7 + outputOffset] = (intValue3 >>> 2) & mask;
  718.       output[8 + outputOffset] = (intValue3 >>> 16) & mask;
  719.       output[9 + outputOffset] = ((intValue3 >>> 30) | (intValue4 << 2)) & mask;
  720.       output[10 + outputOffset] = (intValue4 >>> 12) & mask;
  721.       output[11 + outputOffset] = ((intValue4 >>> 26) | (intValue5 << 6)) & mask;
  722.       output[12 + outputOffset] = (intValue5 >>> 8) & mask;
  723.       output[13 + outputOffset] = ((intValue5 >>> 22) | (intValue6 << 10)) & mask;
  724.       output[14 + outputOffset] = (intValue6 >>> 4) & mask;
  725.       output[15 + outputOffset] = intValue6 >>> 18;
  726.       output[16 + outputOffset] = intValue7 & mask;
  727.       output[17 + outputOffset] = (intValue7 >>> 14) & mask;
  728.       output[18 + outputOffset] = ((intValue7 >>> 28) | (intValue8 << 4)) & mask;
  729.       output[19 + outputOffset] = (intValue8 >>> 10) & mask;
  730.       output[20 + outputOffset] = ((intValue8 >>> 24) | (intValue9 << 8)) & mask;
  731.       output[21 + outputOffset] = (intValue9 >>> 6) & mask;
  732.       output[22 + outputOffset] = ((intValue9 >>> 20) | (intValue10 << 12)) & mask;
  733.       output[23 + outputOffset] = (intValue10 >>> 2) & mask;
  734.       output[24 + outputOffset] = (intValue10 >>> 16) & mask;
  735.       output[25 + outputOffset] = ((intValue10 >>> 30) | (intValue11 << 2)) & mask;
  736.       output[26 + outputOffset] = (intValue11 >>> 12) & mask;
  737.       output[27 + outputOffset] = ((intValue11 >>> 26) | (intValue12 << 6)) & mask;
  738.       output[28 + outputOffset] = (intValue12 >>> 8) & mask;
  739.       output[29 + outputOffset] = ((intValue12 >>> 22) | (intValue13 << 10)) & mask;
  740.       output[30 + outputOffset] = (intValue13 >>> 4) & mask;
  741.       output[31 + outputOffset] = intValue13 >>> 18;
  742.       outputOffset += 32;
  743.       inputOffset += 14;
  744.     }
  745.   }
  746.  
  747.   // NOTE: hardwired to blockSize == 128
  748.   public static void decode15(final int[] input, final int[] output) {
  749.     final int numFrameBits = 15;
  750.     final int mask = (int) ((1L<<numFrameBits) - 1);
  751.     int outputOffset = 0;
  752.     int inputOffset = 0;
  753.     for(int step=0;step<4;step++) {
  754.       final int intValue0 = input[inputOffset];
  755.       final int intValue1 = input[1+inputOffset];
  756.       final int intValue2 = input[2+inputOffset];
  757.       final int intValue3 = input[3+inputOffset];
  758.       final int intValue4 = input[4+inputOffset];
  759.       final int intValue5 = input[5+inputOffset];
  760.       final int intValue6 = input[6+inputOffset];
  761.       final int intValue7 = input[7+inputOffset];
  762.       final int intValue8 = input[8+inputOffset];
  763.       final int intValue9 = input[9+inputOffset];
  764.       final int intValue10 = input[10+inputOffset];
  765.       final int intValue11 = input[11+inputOffset];
  766.       final int intValue12 = input[12+inputOffset];
  767.       final int intValue13 = input[13+inputOffset];
  768.       final int intValue14 = input[14+inputOffset];
  769.       output[0 + outputOffset] = intValue0 & mask;
  770.       output[1 + outputOffset] = (intValue0 >>> 15) & mask;
  771.       output[2 + outputOffset] = ((intValue0 >>> 30) | (intValue1 << 2)) & mask;
  772.       output[3 + outputOffset] = (intValue1 >>> 13) & mask;
  773.       output[4 + outputOffset] = ((intValue1 >>> 28) | (intValue2 << 4)) & mask;
  774.       output[5 + outputOffset] = (intValue2 >>> 11) & mask;
  775.       output[6 + outputOffset] = ((intValue2 >>> 26) | (intValue3 << 6)) & mask;
  776.       output[7 + outputOffset] = (intValue3 >>> 9) & mask;
  777.       output[8 + outputOffset] = ((intValue3 >>> 24) | (intValue4 << 8)) & mask;
  778.       output[9 + outputOffset] = (intValue4 >>> 7) & mask;
  779.       output[10 + outputOffset] = ((intValue4 >>> 22) | (intValue5 << 10)) & mask;
  780.       output[11 + outputOffset] = (intValue5 >>> 5) & mask;
  781.       output[12 + outputOffset] = ((intValue5 >>> 20) | (intValue6 << 12)) & mask;
  782.       output[13 + outputOffset] = (intValue6 >>> 3) & mask;
  783.       output[14 + outputOffset] = ((intValue6 >>> 18) | (intValue7 << 14)) & mask;
  784.       output[15 + outputOffset] = (intValue7 >>> 1) & mask;
  785.       output[16 + outputOffset] = (intValue7 >>> 16) & mask;
  786.       output[17 + outputOffset] = ((intValue7 >>> 31) | (intValue8 << 1)) & mask;
  787.       output[18 + outputOffset] = (intValue8 >>> 14) & mask;
  788.       output[19 + outputOffset] = ((intValue8 >>> 29) | (intValue9 << 3)) & mask;
  789.       output[20 + outputOffset] = (intValue9 >>> 12) & mask;
  790.       output[21 + outputOffset] = ((intValue9 >>> 27) | (intValue10 << 5)) & mask;
  791.       output[22 + outputOffset] = (intValue10 >>> 10) & mask;
  792.       output[23 + outputOffset] = ((intValue10 >>> 25) | (intValue11 << 7)) & mask;
  793.       output[24 + outputOffset] = (intValue11 >>> 8) & mask;
  794.       output[25 + outputOffset] = ((intValue11 >>> 23) | (intValue12 << 9)) & mask;
  795.       output[26 + outputOffset] = (intValue12 >>> 6) & mask;
  796.       output[27 + outputOffset] = ((intValue12 >>> 21) | (intValue13 << 11)) & mask;
  797.       output[28 + outputOffset] = (intValue13 >>> 4) & mask;
  798.       output[29 + outputOffset] = ((intValue13 >>> 19) | (intValue14 << 13)) & mask;
  799.       output[30 + outputOffset] = (intValue14 >>> 2) & mask;
  800.       output[31 + outputOffset] = intValue14 >>> 17;
  801.       outputOffset += 32;
  802.       inputOffset += 15;
  803.     }
  804.   }
  805.  
  806.   // NOTE: hardwired to blockSize == 128
  807.   public static void decode16(final int[] input, final int[] output) {
  808.     final int numFrameBits = 16;
  809.     final int mask = (int) ((1L<<numFrameBits) - 1);
  810.     int outputOffset = 0;
  811.     int inputOffset = 0;
  812.     for(int step=0;step<4;step++) {
  813.       final int intValue0 = input[inputOffset];
  814.       final int intValue1 = input[1+inputOffset];
  815.       final int intValue2 = input[2+inputOffset];
  816.       final int intValue3 = input[3+inputOffset];
  817.       final int intValue4 = input[4+inputOffset];
  818.       final int intValue5 = input[5+inputOffset];
  819.       final int intValue6 = input[6+inputOffset];
  820.       final int intValue7 = input[7+inputOffset];
  821.       final int intValue8 = input[8+inputOffset];
  822.       final int intValue9 = input[9+inputOffset];
  823.       final int intValue10 = input[10+inputOffset];
  824.       final int intValue11 = input[11+inputOffset];
  825.       final int intValue12 = input[12+inputOffset];
  826.       final int intValue13 = input[13+inputOffset];
  827.       final int intValue14 = input[14+inputOffset];
  828.       final int intValue15 = input[15+inputOffset];
  829.       output[0 + outputOffset] = intValue0 & mask;
  830.       output[1 + outputOffset] = intValue0 >>> 16;
  831.       output[2 + outputOffset] = intValue1 & mask;
  832.       output[3 + outputOffset] = intValue1 >>> 16;
  833.       output[4 + outputOffset] = intValue2 & mask;
  834.       output[5 + outputOffset] = intValue2 >>> 16;
  835.       output[6 + outputOffset] = intValue3 & mask;
  836.       output[7 + outputOffset] = intValue3 >>> 16;
  837.       output[8 + outputOffset] = intValue4 & mask;
  838.       output[9 + outputOffset] = intValue4 >>> 16;
  839.       output[10 + outputOffset] = intValue5 & mask;
  840.       output[11 + outputOffset] = intValue5 >>> 16;
  841.       output[12 + outputOffset] = intValue6 & mask;
  842.       output[13 + outputOffset] = intValue6 >>> 16;
  843.       output[14 + outputOffset] = intValue7 & mask;
  844.       output[15 + outputOffset] = intValue7 >>> 16;
  845.       output[16 + outputOffset] = intValue8 & mask;
  846.       output[17 + outputOffset] = intValue8 >>> 16;
  847.       output[18 + outputOffset] = intValue9 & mask;
  848.       output[19 + outputOffset] = intValue9 >>> 16;
  849.       output[20 + outputOffset] = intValue10 & mask;
  850.       output[21 + outputOffset] = intValue10 >>> 16;
  851.       output[22 + outputOffset] = intValue11 & mask;
  852.       output[23 + outputOffset] = intValue11 >>> 16;
  853.       output[24 + outputOffset] = intValue12 & mask;
  854.       output[25 + outputOffset] = intValue12 >>> 16;
  855.       output[26 + outputOffset] = intValue13 & mask;
  856.       output[27 + outputOffset] = intValue13 >>> 16;
  857.       output[28 + outputOffset] = intValue14 & mask;
  858.       output[29 + outputOffset] = intValue14 >>> 16;
  859.       output[30 + outputOffset] = intValue15 & mask;
  860.       output[31 + outputOffset] = intValue15 >>> 16;
  861.       outputOffset += 32;
  862.       inputOffset += 16;
  863.     }
  864.   }
  865.  
  866.   // NOTE: hardwired to blockSize == 128
  867.   public static void decode17(final int[] input, final int[] output) {
  868.     final int numFrameBits = 17;
  869.     final int mask = (int) ((1L<<numFrameBits) - 1);
  870.     int outputOffset = 0;
  871.     int inputOffset = 0;
  872.     for(int step=0;step<4;step++) {
  873.       final int intValue0 = input[inputOffset];
  874.       final int intValue1 = input[1+inputOffset];
  875.       final int intValue2 = input[2+inputOffset];
  876.       final int intValue3 = input[3+inputOffset];
  877.       final int intValue4 = input[4+inputOffset];
  878.       final int intValue5 = input[5+inputOffset];
  879.       final int intValue6 = input[6+inputOffset];
  880.       final int intValue7 = input[7+inputOffset];
  881.       final int intValue8 = input[8+inputOffset];
  882.       final int intValue9 = input[9+inputOffset];
  883.       final int intValue10 = input[10+inputOffset];
  884.       final int intValue11 = input[11+inputOffset];
  885.       final int intValue12 = input[12+inputOffset];
  886.       final int intValue13 = input[13+inputOffset];
  887.       final int intValue14 = input[14+inputOffset];
  888.       final int intValue15 = input[15+inputOffset];
  889.       final int intValue16 = input[16+inputOffset];
  890.       output[0 + outputOffset] = intValue0 & mask;
  891.       output[1 + outputOffset] = ((intValue0 >>> 17) | (intValue1 << 15)) & mask;
  892.       output[2 + outputOffset] = (intValue1 >>> 2) & mask;
  893.       output[3 + outputOffset] = ((intValue1 >>> 19) | (intValue2 << 13)) & mask;
  894.       output[4 + outputOffset] = (intValue2 >>> 4) & mask;
  895.       output[5 + outputOffset] = ((intValue2 >>> 21) | (intValue3 << 11)) & mask;
  896.       output[6 + outputOffset] = (intValue3 >>> 6) & mask;
  897.       output[7 + outputOffset] = ((intValue3 >>> 23) | (intValue4 << 9)) & mask;
  898.       output[8 + outputOffset] = (intValue4 >>> 8) & mask;
  899.       output[9 + outputOffset] = ((intValue4 >>> 25) | (intValue5 << 7)) & mask;
  900.       output[10 + outputOffset] = (intValue5 >>> 10) & mask;
  901.       output[11 + outputOffset] = ((intValue5 >>> 27) | (intValue6 << 5)) & mask;
  902.       output[12 + outputOffset] = (intValue6 >>> 12) & mask;
  903.       output[13 + outputOffset] = ((intValue6 >>> 29) | (intValue7 << 3)) & mask;
  904.       output[14 + outputOffset] = (intValue7 >>> 14) & mask;
  905.       output[15 + outputOffset] = ((intValue7 >>> 31) | (intValue8 << 1)) & mask;
  906.       output[16 + outputOffset] = ((intValue8 >>> 16) | (intValue9 << 16)) & mask;
  907.       output[17 + outputOffset] = (intValue9 >>> 1) & mask;
  908.       output[18 + outputOffset] = ((intValue9 >>> 18) | (intValue10 << 14)) & mask;
  909.       output[19 + outputOffset] = (intValue10 >>> 3) & mask;
  910.       output[20 + outputOffset] = ((intValue10 >>> 20) | (intValue11 << 12)) & mask;
  911.       output[21 + outputOffset] = (intValue11 >>> 5) & mask;
  912.       output[22 + outputOffset] = ((intValue11 >>> 22) | (intValue12 << 10)) & mask;
  913.       output[23 + outputOffset] = (intValue12 >>> 7) & mask;
  914.       output[24 + outputOffset] = ((intValue12 >>> 24) | (intValue13 << 8)) & mask;
  915.       output[25 + outputOffset] = (intValue13 >>> 9) & mask;
  916.       output[26 + outputOffset] = ((intValue13 >>> 26) | (intValue14 << 6)) & mask;
  917.       output[27 + outputOffset] = (intValue14 >>> 11) & mask;
  918.       output[28 + outputOffset] = ((intValue14 >>> 28) | (intValue15 << 4)) & mask;
  919.       output[29 + outputOffset] = (intValue15 >>> 13) & mask;
  920.       output[30 + outputOffset] = ((intValue15 >>> 30) | (intValue16 << 2)) & mask;
  921.       output[31 + outputOffset] = intValue16 >>> 15;
  922.       outputOffset += 32;
  923.       inputOffset += 17;
  924.     }
  925.   }
  926.  
  927.   // NOTE: hardwired to blockSize == 128
  928.   public static void decode18(final int[] input, final int[] output) {
  929.     final int numFrameBits = 18;
  930.     final int mask = (int) ((1L<<numFrameBits) - 1);
  931.     int outputOffset = 0;
  932.     int inputOffset = 0;
  933.     for(int step=0;step<4;step++) {
  934.       final int intValue0 = input[inputOffset];
  935.       final int intValue1 = input[1+inputOffset];
  936.       final int intValue2 = input[2+inputOffset];
  937.       final int intValue3 = input[3+inputOffset];
  938.       final int intValue4 = input[4+inputOffset];
  939.       final int intValue5 = input[5+inputOffset];
  940.       final int intValue6 = input[6+inputOffset];
  941.       final int intValue7 = input[7+inputOffset];
  942.       final int intValue8 = input[8+inputOffset];
  943.       final int intValue9 = input[9+inputOffset];
  944.       final int intValue10 = input[10+inputOffset];
  945.       final int intValue11 = input[11+inputOffset];
  946.       final int intValue12 = input[12+inputOffset];
  947.       final int intValue13 = input[13+inputOffset];
  948.       final int intValue14 = input[14+inputOffset];
  949.       final int intValue15 = input[15+inputOffset];
  950.       final int intValue16 = input[16+inputOffset];
  951.       final int intValue17 = input[17+inputOffset];
  952.       output[0 + outputOffset] = intValue0 & mask;
  953.       output[1 + outputOffset] = ((intValue0 >>> 18) | (intValue1 << 14)) & mask;
  954.       output[2 + outputOffset] = (intValue1 >>> 4) & mask;
  955.       output[3 + outputOffset] = ((intValue1 >>> 22) | (intValue2 << 10)) & mask;
  956.       output[4 + outputOffset] = (intValue2 >>> 8) & mask;
  957.       output[5 + outputOffset] = ((intValue2 >>> 26) | (intValue3 << 6)) & mask;
  958.       output[6 + outputOffset] = (intValue3 >>> 12) & mask;
  959.       output[7 + outputOffset] = ((intValue3 >>> 30) | (intValue4 << 2)) & mask;
  960.       output[8 + outputOffset] = ((intValue4 >>> 16) | (intValue5 << 16)) & mask;
  961.       output[9 + outputOffset] = (intValue5 >>> 2) & mask;
  962.       output[10 + outputOffset] = ((intValue5 >>> 20) | (intValue6 << 12)) & mask;
  963.       output[11 + outputOffset] = (intValue6 >>> 6) & mask;
  964.       output[12 + outputOffset] = ((intValue6 >>> 24) | (intValue7 << 8)) & mask;
  965.       output[13 + outputOffset] = (intValue7 >>> 10) & mask;
  966.       output[14 + outputOffset] = ((intValue7 >>> 28) | (intValue8 << 4)) & mask;
  967.       output[15 + outputOffset] = intValue8 >>> 14;
  968.       output[16 + outputOffset] = intValue9 & mask;
  969.       output[17 + outputOffset] = ((intValue9 >>> 18) | (intValue10 << 14)) & mask;
  970.       output[18 + outputOffset] = (intValue10 >>> 4) & mask;
  971.       output[19 + outputOffset] = ((intValue10 >>> 22) | (intValue11 << 10)) & mask;
  972.       output[20 + outputOffset] = (intValue11 >>> 8) & mask;
  973.       output[21 + outputOffset] = ((intValue11 >>> 26) | (intValue12 << 6)) & mask;
  974.       output[22 + outputOffset] = (intValue12 >>> 12) & mask;
  975.       output[23 + outputOffset] = ((intValue12 >>> 30) | (intValue13 << 2)) & mask;
  976.       output[24 + outputOffset] = ((intValue13 >>> 16) | (intValue14 << 16)) & mask;
  977.       output[25 + outputOffset] = (intValue14 >>> 2) & mask;
  978.       output[26 + outputOffset] = ((intValue14 >>> 20) | (intValue15 << 12)) & mask;
  979.       output[27 + outputOffset] = (intValue15 >>> 6) & mask;
  980.       output[28 + outputOffset] = ((intValue15 >>> 24) | (intValue16 << 8)) & mask;
  981.       output[29 + outputOffset] = (intValue16 >>> 10) & mask;
  982.       output[30 + outputOffset] = ((intValue16 >>> 28) | (intValue17 << 4)) & mask;
  983.       output[31 + outputOffset] = intValue17 >>> 14;
  984.       outputOffset += 32;
  985.       inputOffset += 18;
  986.     }
  987.   }
  988.  
  989.   // NOTE: hardwired to blockSize == 128
  990.   public static void decode19(final int[] input, final int[] output) {
  991.     final int numFrameBits = 19;
  992.     final int mask = (int) ((1L<<numFrameBits) - 1);
  993.     int outputOffset = 0;
  994.     int inputOffset = 0;
  995.     for(int step=0;step<4;step++) {
  996.       final int intValue0 = input[inputOffset];
  997.       final int intValue1 = input[1+inputOffset];
  998.       final int intValue2 = input[2+inputOffset];
  999.       final int intValue3 = input[3+inputOffset];
  1000.       final int intValue4 = input[4+inputOffset];
  1001.       final int intValue5 = input[5+inputOffset];
  1002.       final int intValue6 = input[6+inputOffset];
  1003.       final int intValue7 = input[7+inputOffset];
  1004.       final int intValue8 = input[8+inputOffset];
  1005.       final int intValue9 = input[9+inputOffset];
  1006.       final int intValue10 = input[10+inputOffset];
  1007.       final int intValue11 = input[11+inputOffset];
  1008.       final int intValue12 = input[12+inputOffset];
  1009.       final int intValue13 = input[13+inputOffset];
  1010.       final int intValue14 = input[14+inputOffset];
  1011.       final int intValue15 = input[15+inputOffset];
  1012.       final int intValue16 = input[16+inputOffset];
  1013.       final int intValue17 = input[17+inputOffset];
  1014.       final int intValue18 = input[18+inputOffset];
  1015.       output[0 + outputOffset] = intValue0 & mask;
  1016.       output[1 + outputOffset] = ((intValue0 >>> 19) | (intValue1 << 13)) & mask;
  1017.       output[2 + outputOffset] = (intValue1 >>> 6) & mask;
  1018.       output[3 + outputOffset] = ((intValue1 >>> 25) | (intValue2 << 7)) & mask;
  1019.       output[4 + outputOffset] = (intValue2 >>> 12) & mask;
  1020.       output[5 + outputOffset] = ((intValue2 >>> 31) | (intValue3 << 1)) & mask;
  1021.       output[6 + outputOffset] = ((intValue3 >>> 18) | (intValue4 << 14)) & mask;
  1022.       output[7 + outputOffset] = (intValue4 >>> 5) & mask;
  1023.       output[8 + outputOffset] = ((intValue4 >>> 24) | (intValue5 << 8)) & mask;
  1024.       output[9 + outputOffset] = (intValue5 >>> 11) & mask;
  1025.       output[10 + outputOffset] = ((intValue5 >>> 30) | (intValue6 << 2)) & mask;
  1026.       output[11 + outputOffset] = ((intValue6 >>> 17) | (intValue7 << 15)) & mask;
  1027.       output[12 + outputOffset] = (intValue7 >>> 4) & mask;
  1028.       output[13 + outputOffset] = ((intValue7 >>> 23) | (intValue8 << 9)) & mask;
  1029.       output[14 + outputOffset] = (intValue8 >>> 10) & mask;
  1030.       output[15 + outputOffset] = ((intValue8 >>> 29) | (intValue9 << 3)) & mask;
  1031.       output[16 + outputOffset] = ((intValue9 >>> 16) | (intValue10 << 16)) & mask;
  1032.       output[17 + outputOffset] = (intValue10 >>> 3) & mask;
  1033.       output[18 + outputOffset] = ((intValue10 >>> 22) | (intValue11 << 10)) & mask;
  1034.       output[19 + outputOffset] = (intValue11 >>> 9) & mask;
  1035.       output[20 + outputOffset] = ((intValue11 >>> 28) | (intValue12 << 4)) & mask;
  1036.       output[21 + outputOffset] = ((intValue12 >>> 15) | (intValue13 << 17)) & mask;
  1037.       output[22 + outputOffset] = (intValue13 >>> 2) & mask;
  1038.       output[23 + outputOffset] = ((intValue13 >>> 21) | (intValue14 << 11)) & mask;
  1039.       output[24 + outputOffset] = (intValue14 >>> 8) & mask;
  1040.       output[25 + outputOffset] = ((intValue14 >>> 27) | (intValue15 << 5)) & mask;
  1041.       output[26 + outputOffset] = ((intValue15 >>> 14) | (intValue16 << 18)) & mask;
  1042.       output[27 + outputOffset] = (intValue16 >>> 1) & mask;
  1043.       output[28 + outputOffset] = ((intValue16 >>> 20) | (intValue17 << 12)) & mask;
  1044.       output[29 + outputOffset] = (intValue17 >>> 7) & mask;
  1045.       output[30 + outputOffset] = ((intValue17 >>> 26) | (intValue18 << 6)) & mask;
  1046.       output[31 + outputOffset] = intValue18 >>> 13;
  1047.       outputOffset += 32;
  1048.       inputOffset += 19;
  1049.     }
  1050.   }
  1051.  
  1052.   // NOTE: hardwired to blockSize == 128
  1053.   public static void decode20(final int[] input, final int[] output) {
  1054.     final int numFrameBits = 20;
  1055.     final int mask = (int) ((1L<<numFrameBits) - 1);
  1056.     int outputOffset = 0;
  1057.     int inputOffset = 0;
  1058.     for(int step=0;step<4;step++) {
  1059.       final int intValue0 = input[inputOffset];
  1060.       final int intValue1 = input[1+inputOffset];
  1061.       final int intValue2 = input[2+inputOffset];
  1062.       final int intValue3 = input[3+inputOffset];
  1063.       final int intValue4 = input[4+inputOffset];
  1064.       final int intValue5 = input[5+inputOffset];
  1065.       final int intValue6 = input[6+inputOffset];
  1066.       final int intValue7 = input[7+inputOffset];
  1067.       final int intValue8 = input[8+inputOffset];
  1068.       final int intValue9 = input[9+inputOffset];
  1069.       final int intValue10 = input[10+inputOffset];
  1070.       final int intValue11 = input[11+inputOffset];
  1071.       final int intValue12 = input[12+inputOffset];
  1072.       final int intValue13 = input[13+inputOffset];
  1073.       final int intValue14 = input[14+inputOffset];
  1074.       final int intValue15 = input[15+inputOffset];
  1075.       final int intValue16 = input[16+inputOffset];
  1076.       final int intValue17 = input[17+inputOffset];
  1077.       final int intValue18 = input[18+inputOffset];
  1078.       final int intValue19 = input[19+inputOffset];
  1079.       output[0 + outputOffset] = intValue0 & mask;
  1080.       output[1 + outputOffset] = ((intValue0 >>> 20) | (intValue1 << 12)) & mask;
  1081.       output[2 + outputOffset] = (intValue1 >>> 8) & mask;
  1082.       output[3 + outputOffset] = ((intValue1 >>> 28) | (intValue2 << 4)) & mask;
  1083.       output[4 + outputOffset] = ((intValue2 >>> 16) | (intValue3 << 16)) & mask;
  1084.       output[5 + outputOffset] = (intValue3 >>> 4) & mask;
  1085.       output[6 + outputOffset] = ((intValue3 >>> 24) | (intValue4 << 8)) & mask;
  1086.       output[7 + outputOffset] = intValue4 >>> 12;
  1087.       output[8 + outputOffset] = intValue5 & mask;
  1088.       output[9 + outputOffset] = ((intValue5 >>> 20) | (intValue6 << 12)) & mask;
  1089.       output[10 + outputOffset] = (intValue6 >>> 8) & mask;
  1090.       output[11 + outputOffset] = ((intValue6 >>> 28) | (intValue7 << 4)) & mask;
  1091.       output[12 + outputOffset] = ((intValue7 >>> 16) | (intValue8 << 16)) & mask;
  1092.       output[13 + outputOffset] = (intValue8 >>> 4) & mask;
  1093.       output[14 + outputOffset] = ((intValue8 >>> 24) | (intValue9 << 8)) & mask;
  1094.       output[15 + outputOffset] = intValue9 >>> 12;
  1095.       output[16 + outputOffset] = intValue10 & mask;
  1096.       output[17 + outputOffset] = ((intValue10 >>> 20) | (intValue11 << 12)) & mask;
  1097.       output[18 + outputOffset] = (intValue11 >>> 8) & mask;
  1098.       output[19 + outputOffset] = ((intValue11 >>> 28) | (intValue12 << 4)) & mask;
  1099.       output[20 + outputOffset] = ((intValue12 >>> 16) | (intValue13 << 16)) & mask;
  1100.       output[21 + outputOffset] = (intValue13 >>> 4) & mask;
  1101.       output[22 + outputOffset] = ((intValue13 >>> 24) | (intValue14 << 8)) & mask;
  1102.       output[23 + outputOffset] = intValue14 >>> 12;
  1103.       output[24 + outputOffset] = intValue15 & mask;
  1104.       output[25 + outputOffset] = ((intValue15 >>> 20) | (intValue16 << 12)) & mask;
  1105.       output[26 + outputOffset] = (intValue16 >>> 8) & mask;
  1106.       output[27 + outputOffset] = ((intValue16 >>> 28) | (intValue17 << 4)) & mask;
  1107.       output[28 + outputOffset] = ((intValue17 >>> 16) | (intValue18 << 16)) & mask;
  1108.       output[29 + outputOffset] = (intValue18 >>> 4) & mask;
  1109.       output[30 + outputOffset] = ((intValue18 >>> 24) | (intValue19 << 8)) & mask;
  1110.       output[31 + outputOffset] = intValue19 >>> 12;
  1111.       outputOffset += 32;
  1112.       inputOffset += 20;
  1113.     }
  1114.   }
  1115.  
  1116.   // NOTE: hardwired to blockSize == 128
  1117.   public static void decode21(final int[] input, final int[] output) {
  1118.     final int numFrameBits = 21;
  1119.     final int mask = (int) ((1L<<numFrameBits) - 1);
  1120.     int outputOffset = 0;
  1121.     int inputOffset = 0;
  1122.     for(int step=0;step<4;step++) {
  1123.       final int intValue0 = input[inputOffset];
  1124.       final int intValue1 = input[1+inputOffset];
  1125.       final int intValue2 = input[2+inputOffset];
  1126.       final int intValue3 = input[3+inputOffset];
  1127.       final int intValue4 = input[4+inputOffset];
  1128.       final int intValue5 = input[5+inputOffset];
  1129.       final int intValue6 = input[6+inputOffset];
  1130.       final int intValue7 = input[7+inputOffset];
  1131.       final int intValue8 = input[8+inputOffset];
  1132.       final int intValue9 = input[9+inputOffset];
  1133.       final int intValue10 = input[10+inputOffset];
  1134.       final int intValue11 = input[11+inputOffset];
  1135.       final int intValue12 = input[12+inputOffset];
  1136.       final int intValue13 = input[13+inputOffset];
  1137.       final int intValue14 = input[14+inputOffset];
  1138.       final int intValue15 = input[15+inputOffset];
  1139.       final int intValue16 = input[16+inputOffset];
  1140.       final int intValue17 = input[17+inputOffset];
  1141.       final int intValue18 = input[18+inputOffset];
  1142.       final int intValue19 = input[19+inputOffset];
  1143.       final int intValue20 = input[20+inputOffset];
  1144.       output[0 + outputOffset] = intValue0 & mask;
  1145.       output[1 + outputOffset] = ((intValue0 >>> 21) | (intValue1 << 11)) & mask;
  1146.       output[2 + outputOffset] = (intValue1 >>> 10) & mask;
  1147.       output[3 + outputOffset] = ((intValue1 >>> 31) | (intValue2 << 1)) & mask;
  1148.       output[4 + outputOffset] = ((intValue2 >>> 20) | (intValue3 << 12)) & mask;
  1149.       output[5 + outputOffset] = (intValue3 >>> 9) & mask;
  1150.       output[6 + outputOffset] = ((intValue3 >>> 30) | (intValue4 << 2)) & mask;
  1151.       output[7 + outputOffset] = ((intValue4 >>> 19) | (intValue5 << 13)) & mask;
  1152.       output[8 + outputOffset] = (intValue5 >>> 8) & mask;
  1153.       output[9 + outputOffset] = ((intValue5 >>> 29) | (intValue6 << 3)) & mask;
  1154.       output[10 + outputOffset] = ((intValue6 >>> 18) | (intValue7 << 14)) & mask;
  1155.       output[11 + outputOffset] = (intValue7 >>> 7) & mask;
  1156.       output[12 + outputOffset] = ((intValue7 >>> 28) | (intValue8 << 4)) & mask;
  1157.       output[13 + outputOffset] = ((intValue8 >>> 17) | (intValue9 << 15)) & mask;
  1158.       output[14 + outputOffset] = (intValue9 >>> 6) & mask;
  1159.       output[15 + outputOffset] = ((intValue9 >>> 27) | (intValue10 << 5)) & mask;
  1160.       output[16 + outputOffset] = ((intValue10 >>> 16) | (intValue11 << 16)) & mask;
  1161.       output[17 + outputOffset] = (intValue11 >>> 5) & mask;
  1162.       output[18 + outputOffset] = ((intValue11 >>> 26) | (intValue12 << 6)) & mask;
  1163.       output[19 + outputOffset] = ((intValue12 >>> 15) | (intValue13 << 17)) & mask;
  1164.       output[20 + outputOffset] = (intValue13 >>> 4) & mask;
  1165.       output[21 + outputOffset] = ((intValue13 >>> 25) | (intValue14 << 7)) & mask;
  1166.       output[22 + outputOffset] = ((intValue14 >>> 14) | (intValue15 << 18)) & mask;
  1167.       output[23 + outputOffset] = (intValue15 >>> 3) & mask;
  1168.       output[24 + outputOffset] = ((intValue15 >>> 24) | (intValue16 << 8)) & mask;
  1169.       output[25 + outputOffset] = ((intValue16 >>> 13) | (intValue17 << 19)) & mask;
  1170.       output[26 + outputOffset] = (intValue17 >>> 2) & mask;
  1171.       output[27 + outputOffset] = ((intValue17 >>> 23) | (intValue18 << 9)) & mask;
  1172.       output[28 + outputOffset] = ((intValue18 >>> 12) | (intValue19 << 20)) & mask;
  1173.       output[29 + outputOffset] = (intValue19 >>> 1) & mask;
  1174.       output[30 + outputOffset] = ((intValue19 >>> 22) | (intValue20 << 10)) & mask;
  1175.       output[31 + outputOffset] = intValue20 >>> 11;
  1176.       outputOffset += 32;
  1177.       inputOffset += 21;
  1178.     }
  1179.   }
  1180.  
  1181.   // NOTE: hardwired to blockSize == 128
  1182.   public static void decode22(final int[] input, final int[] output) {
  1183.     final int numFrameBits = 22;
  1184.     final int mask = (int) ((1L<<numFrameBits) - 1);
  1185.     int outputOffset = 0;
  1186.     int inputOffset = 0;
  1187.     for(int step=0;step<4;step++) {
  1188.       final int intValue0 = input[inputOffset];
  1189.       final int intValue1 = input[1+inputOffset];
  1190.       final int intValue2 = input[2+inputOffset];
  1191.       final int intValue3 = input[3+inputOffset];
  1192.       final int intValue4 = input[4+inputOffset];
  1193.       final int intValue5 = input[5+inputOffset];
  1194.       final int intValue6 = input[6+inputOffset];
  1195.       final int intValue7 = input[7+inputOffset];
  1196.       final int intValue8 = input[8+inputOffset];
  1197.       final int intValue9 = input[9+inputOffset];
  1198.       final int intValue10 = input[10+inputOffset];
  1199.       final int intValue11 = input[11+inputOffset];
  1200.       final int intValue12 = input[12+inputOffset];
  1201.       final int intValue13 = input[13+inputOffset];
  1202.       final int intValue14 = input[14+inputOffset];
  1203.       final int intValue15 = input[15+inputOffset];
  1204.       final int intValue16 = input[16+inputOffset];
  1205.       final int intValue17 = input[17+inputOffset];
  1206.       final int intValue18 = input[18+inputOffset];
  1207.       final int intValue19 = input[19+inputOffset];
  1208.       final int intValue20 = input[20+inputOffset];
  1209.       final int intValue21 = input[21+inputOffset];
  1210.       output[0 + outputOffset] = intValue0 & mask;
  1211.       output[1 + outputOffset] = ((intValue0 >>> 22) | (intValue1 << 10)) & mask;
  1212.       output[2 + outputOffset] = ((intValue1 >>> 12) | (intValue2 << 20)) & mask;
  1213.       output[3 + outputOffset] = (intValue2 >>> 2) & mask;
  1214.       output[4 + outputOffset] = ((intValue2 >>> 24) | (intValue3 << 8)) & mask;
  1215.       output[5 + outputOffset] = ((intValue3 >>> 14) | (intValue4 << 18)) & mask;
  1216.       output[6 + outputOffset] = (intValue4 >>> 4) & mask;
  1217.       output[7 + outputOffset] = ((intValue4 >>> 26) | (intValue5 << 6)) & mask;
  1218.       output[8 + outputOffset] = ((intValue5 >>> 16) | (intValue6 << 16)) & mask;
  1219.       output[9 + outputOffset] = (intValue6 >>> 6) & mask;
  1220.       output[10 + outputOffset] = ((intValue6 >>> 28) | (intValue7 << 4)) & mask;
  1221.       output[11 + outputOffset] = ((intValue7 >>> 18) | (intValue8 << 14)) & mask;
  1222.       output[12 + outputOffset] = (intValue8 >>> 8) & mask;
  1223.       output[13 + outputOffset] = ((intValue8 >>> 30) | (intValue9 << 2)) & mask;
  1224.       output[14 + outputOffset] = ((intValue9 >>> 20) | (intValue10 << 12)) & mask;
  1225.       output[15 + outputOffset] = intValue10 >>> 10;
  1226.       output[16 + outputOffset] = intValue11 & mask;
  1227.       output[17 + outputOffset] = ((intValue11 >>> 22) | (intValue12 << 10)) & mask;
  1228.       output[18 + outputOffset] = ((intValue12 >>> 12) | (intValue13 << 20)) & mask;
  1229.       output[19 + outputOffset] = (intValue13 >>> 2) & mask;
  1230.       output[20 + outputOffset] = ((intValue13 >>> 24) | (intValue14 << 8)) & mask;
  1231.       output[21 + outputOffset] = ((intValue14 >>> 14) | (intValue15 << 18)) & mask;
  1232.       output[22 + outputOffset] = (intValue15 >>> 4) & mask;
  1233.       output[23 + outputOffset] = ((intValue15 >>> 26) | (intValue16 << 6)) & mask;
  1234.       output[24 + outputOffset] = ((intValue16 >>> 16) | (intValue17 << 16)) & mask;
  1235.       output[25 + outputOffset] = (intValue17 >>> 6) & mask;
  1236.       output[26 + outputOffset] = ((intValue17 >>> 28) | (intValue18 << 4)) & mask;
  1237.       output[27 + outputOffset] = ((intValue18 >>> 18) | (intValue19 << 14)) & mask;
  1238.       output[28 + outputOffset] = (intValue19 >>> 8) & mask;
  1239.       output[29 + outputOffset] = ((intValue19 >>> 30) | (intValue20 << 2)) & mask;
  1240.       output[30 + outputOffset] = ((intValue20 >>> 20) | (intValue21 << 12)) & mask;
  1241.       output[31 + outputOffset] = intValue21 >>> 10;
  1242.       outputOffset += 32;
  1243.       inputOffset += 22;
  1244.     }
  1245.   }
  1246.  
  1247.   // NOTE: hardwired to blockSize == 128
  1248.   public static void decode23(final int[] input, final int[] output) {
  1249.     final int numFrameBits = 23;
  1250.     final int mask = (int) ((1L<<numFrameBits) - 1);
  1251.     int outputOffset = 0;
  1252.     int inputOffset = 0;
  1253.     for(int step=0;step<4;step++) {
  1254.       final int intValue0 = input[inputOffset];
  1255.       final int intValue1 = input[1+inputOffset];
  1256.       final int intValue2 = input[2+inputOffset];
  1257.       final int intValue3 = input[3+inputOffset];
  1258.       final int intValue4 = input[4+inputOffset];
  1259.       final int intValue5 = input[5+inputOffset];
  1260.       final int intValue6 = input[6+inputOffset];
  1261.       final int intValue7 = input[7+inputOffset];
  1262.       final int intValue8 = input[8+inputOffset];
  1263.       final int intValue9 = input[9+inputOffset];
  1264.       final int intValue10 = input[10+inputOffset];
  1265.       final int intValue11 = input[11+inputOffset];
  1266.       final int intValue12 = input[12+inputOffset];
  1267.       final int intValue13 = input[13+inputOffset];
  1268.       final int intValue14 = input[14+inputOffset];
  1269.       final int intValue15 = input[15+inputOffset];
  1270.       final int intValue16 = input[16+inputOffset];
  1271.       final int intValue17 = input[17+inputOffset];
  1272.       final int intValue18 = input[18+inputOffset];
  1273.       final int intValue19 = input[19+inputOffset];
  1274.       final int intValue20 = input[20+inputOffset];
  1275.       final int intValue21 = input[21+inputOffset];
  1276.       final int intValue22 = input[22+inputOffset];
  1277.       output[0 + outputOffset] = intValue0 & mask;
  1278.       output[1 + outputOffset] = ((intValue0 >>> 23) | (intValue1 << 9)) & mask;
  1279.       output[2 + outputOffset] = ((intValue1 >>> 14) | (intValue2 << 18)) & mask;
  1280.       output[3 + outputOffset] = (intValue2 >>> 5) & mask;
  1281.       output[4 + outputOffset] = ((intValue2 >>> 28) | (intValue3 << 4)) & mask;
  1282.       output[5 + outputOffset] = ((intValue3 >>> 19) | (intValue4 << 13)) & mask;
  1283.       output[6 + outputOffset] = ((intValue4 >>> 10) | (intValue5 << 22)) & mask;
  1284.       output[7 + outputOffset] = (intValue5 >>> 1) & mask;
  1285.       output[8 + outputOffset] = ((intValue5 >>> 24) | (intValue6 << 8)) & mask;
  1286.       output[9 + outputOffset] = ((intValue6 >>> 15) | (intValue7 << 17)) & mask;
  1287.       output[10 + outputOffset] = (intValue7 >>> 6) & mask;
  1288.       output[11 + outputOffset] = ((intValue7 >>> 29) | (intValue8 << 3)) & mask;
  1289.       output[12 + outputOffset] = ((intValue8 >>> 20) | (intValue9 << 12)) & mask;
  1290.       output[13 + outputOffset] = ((intValue9 >>> 11) | (intValue10 << 21)) & mask;
  1291.       output[14 + outputOffset] = (intValue10 >>> 2) & mask;
  1292.       output[15 + outputOffset] = ((intValue10 >>> 25) | (intValue11 << 7)) & mask;
  1293.       output[16 + outputOffset] = ((intValue11 >>> 16) | (intValue12 << 16)) & mask;
  1294.       output[17 + outputOffset] = (intValue12 >>> 7) & mask;
  1295.       output[18 + outputOffset] = ((intValue12 >>> 30) | (intValue13 << 2)) & mask;
  1296.       output[19 + outputOffset] = ((intValue13 >>> 21) | (intValue14 << 11)) & mask;
  1297.       output[20 + outputOffset] = ((intValue14 >>> 12) | (intValue15 << 20)) & mask;
  1298.       output[21 + outputOffset] = (intValue15 >>> 3) & mask;
  1299.       output[22 + outputOffset] = ((intValue15 >>> 26) | (intValue16 << 6)) & mask;
  1300.       output[23 + outputOffset] = ((intValue16 >>> 17) | (intValue17 << 15)) & mask;
  1301.       output[24 + outputOffset] = (intValue17 >>> 8) & mask;
  1302.       output[25 + outputOffset] = ((intValue17 >>> 31) | (intValue18 << 1)) & mask;
  1303.       output[26 + outputOffset] = ((intValue18 >>> 22) | (intValue19 << 10)) & mask;
  1304.       output[27 + outputOffset] = ((intValue19 >>> 13) | (intValue20 << 19)) & mask;
  1305.       output[28 + outputOffset] = (intValue20 >>> 4) & mask;
  1306.       output[29 + outputOffset] = ((intValue20 >>> 27) | (intValue21 << 5)) & mask;
  1307.       output[30 + outputOffset] = ((intValue21 >>> 18) | (intValue22 << 14)) & mask;
  1308.       output[31 + outputOffset] = intValue22 >>> 9;
  1309.       outputOffset += 32;
  1310.       inputOffset += 23;
  1311.     }
  1312.   }
  1313.  
  1314.   // NOTE: hardwired to blockSize == 128
  1315.   public static void decode24(final int[] input, final int[] output) {
  1316.     final int numFrameBits = 24;
  1317.     final int mask = (int) ((1L<<numFrameBits) - 1);
  1318.     int outputOffset = 0;
  1319.     int inputOffset = 0;
  1320.     for(int step=0;step<4;step++) {
  1321.       final int intValue0 = input[inputOffset];
  1322.       final int intValue1 = input[1+inputOffset];
  1323.       final int intValue2 = input[2+inputOffset];
  1324.       final int intValue3 = input[3+inputOffset];
  1325.       final int intValue4 = input[4+inputOffset];
  1326.       final int intValue5 = input[5+inputOffset];
  1327.       final int intValue6 = input[6+inputOffset];
  1328.       final int intValue7 = input[7+inputOffset];
  1329.       final int intValue8 = input[8+inputOffset];
  1330.       final int intValue9 = input[9+inputOffset];
  1331.       final int intValue10 = input[10+inputOffset];
  1332.       final int intValue11 = input[11+inputOffset];
  1333.       final int intValue12 = input[12+inputOffset];
  1334.       final int intValue13 = input[13+inputOffset];
  1335.       final int intValue14 = input[14+inputOffset];
  1336.       final int intValue15 = input[15+inputOffset];
  1337.       final int intValue16 = input[16+inputOffset];
  1338.       final int intValue17 = input[17+inputOffset];
  1339.       final int intValue18 = input[18+inputOffset];
  1340.       final int intValue19 = input[19+inputOffset];
  1341.       final int intValue20 = input[20+inputOffset];
  1342.       final int intValue21 = input[21+inputOffset];
  1343.       final int intValue22 = input[22+inputOffset];
  1344.       final int intValue23 = input[23+inputOffset];
  1345.       output[0 + outputOffset] = intValue0 & mask;
  1346.       output[1 + outputOffset] = ((intValue0 >>> 24) | (intValue1 << 8)) & mask;
  1347.       output[2 + outputOffset] = ((intValue1 >>> 16) | (intValue2 << 16)) & mask;
  1348.       output[3 + outputOffset] = intValue2 >>> 8;
  1349.       output[4 + outputOffset] = intValue3 & mask;
  1350.       output[5 + outputOffset] = ((intValue3 >>> 24) | (intValue4 << 8)) & mask;
  1351.       output[6 + outputOffset] = ((intValue4 >>> 16) | (intValue5 << 16)) & mask;
  1352.       output[7 + outputOffset] = intValue5 >>> 8;
  1353.       output[8 + outputOffset] = intValue6 & mask;
  1354.       output[9 + outputOffset] = ((intValue6 >>> 24) | (intValue7 << 8)) & mask;
  1355.       output[10 + outputOffset] = ((intValue7 >>> 16) | (intValue8 << 16)) & mask;
  1356.       output[11 + outputOffset] = intValue8 >>> 8;
  1357.       output[12 + outputOffset] = intValue9 & mask;
  1358.       output[13 + outputOffset] = ((intValue9 >>> 24) | (intValue10 << 8)) & mask;
  1359.       output[14 + outputOffset] = ((intValue10 >>> 16) | (intValue11 << 16)) & mask;
  1360.       output[15 + outputOffset] = intValue11 >>> 8;
  1361.       output[16 + outputOffset] = intValue12 & mask;
  1362.       output[17 + outputOffset] = ((intValue12 >>> 24) | (intValue13 << 8)) & mask;
  1363.       output[18 + outputOffset] = ((intValue13 >>> 16) | (intValue14 << 16)) & mask;
  1364.       output[19 + outputOffset] = intValue14 >>> 8;
  1365.       output[20 + outputOffset] = intValue15 & mask;
  1366.       output[21 + outputOffset] = ((intValue15 >>> 24) | (intValue16 << 8)) & mask;
  1367.       output[22 + outputOffset] = ((intValue16 >>> 16) | (intValue17 << 16)) & mask;
  1368.       output[23 + outputOffset] = intValue17 >>> 8;
  1369.       output[24 + outputOffset] = intValue18 & mask;
  1370.       output[25 + outputOffset] = ((intValue18 >>> 24) | (intValue19 << 8)) & mask;
  1371.       output[26 + outputOffset] = ((intValue19 >>> 16) | (intValue20 << 16)) & mask;
  1372.       output[27 + outputOffset] = intValue20 >>> 8;
  1373.       output[28 + outputOffset] = intValue21 & mask;
  1374.       output[29 + outputOffset] = ((intValue21 >>> 24) | (intValue22 << 8)) & mask;
  1375.       output[30 + outputOffset] = ((intValue22 >>> 16) | (intValue23 << 16)) & mask;
  1376.       output[31 + outputOffset] = intValue23 >>> 8;
  1377.       outputOffset += 32;
  1378.       inputOffset += 24;
  1379.     }
  1380.   }
  1381.  
  1382.   // NOTE: hardwired to blockSize == 128
  1383.   public static void decode25(final int[] input, final int[] output) {
  1384.     final int numFrameBits = 25;
  1385.     final int mask = (int) ((1L<<numFrameBits) - 1);
  1386.     int outputOffset = 0;
  1387.     int inputOffset = 0;
  1388.     for(int step=0;step<4;step++) {
  1389.       final int intValue0 = input[inputOffset];
  1390.       final int intValue1 = input[1+inputOffset];
  1391.       final int intValue2 = input[2+inputOffset];
  1392.       final int intValue3 = input[3+inputOffset];
  1393.       final int intValue4 = input[4+inputOffset];
  1394.       final int intValue5 = input[5+inputOffset];
  1395.       final int intValue6 = input[6+inputOffset];
  1396.       final int intValue7 = input[7+inputOffset];
  1397.       final int intValue8 = input[8+inputOffset];
  1398.       final int intValue9 = input[9+inputOffset];
  1399.       final int intValue10 = input[10+inputOffset];
  1400.       final int intValue11 = input[11+inputOffset];
  1401.       final int intValue12 = input[12+inputOffset];
  1402.       final int intValue13 = input[13+inputOffset];
  1403.       final int intValue14 = input[14+inputOffset];
  1404.       final int intValue15 = input[15+inputOffset];
  1405.       final int intValue16 = input[16+inputOffset];
  1406.       final int intValue17 = input[17+inputOffset];
  1407.       final int intValue18 = input[18+inputOffset];
  1408.       final int intValue19 = input[19+inputOffset];
  1409.       final int intValue20 = input[20+inputOffset];
  1410.       final int intValue21 = input[21+inputOffset];
  1411.       final int intValue22 = input[22+inputOffset];
  1412.       final int intValue23 = input[23+inputOffset];
  1413.       final int intValue24 = input[24+inputOffset];
  1414.       output[0 + outputOffset] = intValue0 & mask;
  1415.       output[1 + outputOffset] = ((intValue0 >>> 25) | (intValue1 << 7)) & mask;
  1416.       output[2 + outputOffset] = ((intValue1 >>> 18) | (intValue2 << 14)) & mask;
  1417.       output[3 + outputOffset] = ((intValue2 >>> 11) | (intValue3 << 21)) & mask;
  1418.       output[4 + outputOffset] = (intValue3 >>> 4) & mask;
  1419.       output[5 + outputOffset] = ((intValue3 >>> 29) | (intValue4 << 3)) & mask;
  1420.       output[6 + outputOffset] = ((intValue4 >>> 22) | (intValue5 << 10)) & mask;
  1421.       output[7 + outputOffset] = ((intValue5 >>> 15) | (intValue6 << 17)) & mask;
  1422.       output[8 + outputOffset] = ((intValue6 >>> 8) | (intValue7 << 24)) & mask;
  1423.       output[9 + outputOffset] = (intValue7 >>> 1) & mask;
  1424.       output[10 + outputOffset] = ((intValue7 >>> 26) | (intValue8 << 6)) & mask;
  1425.       output[11 + outputOffset] = ((intValue8 >>> 19) | (intValue9 << 13)) & mask;
  1426.       output[12 + outputOffset] = ((intValue9 >>> 12) | (intValue10 << 20)) & mask;
  1427.       output[13 + outputOffset] = (intValue10 >>> 5) & mask;
  1428.       output[14 + outputOffset] = ((intValue10 >>> 30) | (intValue11 << 2)) & mask;
  1429.       output[15 + outputOffset] = ((intValue11 >>> 23) | (intValue12 << 9)) & mask;
  1430.       output[16 + outputOffset] = ((intValue12 >>> 16) | (intValue13 << 16)) & mask;
  1431.       output[17 + outputOffset] = ((intValue13 >>> 9) | (intValue14 << 23)) & mask;
  1432.       output[18 + outputOffset] = (intValue14 >>> 2) & mask;
  1433.       output[19 + outputOffset] = ((intValue14 >>> 27) | (intValue15 << 5)) & mask;
  1434.       output[20 + outputOffset] = ((intValue15 >>> 20) | (intValue16 << 12)) & mask;
  1435.       output[21 + outputOffset] = ((intValue16 >>> 13) | (intValue17 << 19)) & mask;
  1436.       output[22 + outputOffset] = (intValue17 >>> 6) & mask;
  1437.       output[23 + outputOffset] = ((intValue17 >>> 31) | (intValue18 << 1)) & mask;
  1438.       output[24 + outputOffset] = ((intValue18 >>> 24) | (intValue19 << 8)) & mask;
  1439.       output[25 + outputOffset] = ((intValue19 >>> 17) | (intValue20 << 15)) & mask;
  1440.       output[26 + outputOffset] = ((intValue20 >>> 10) | (intValue21 << 22)) & mask;
  1441.       output[27 + outputOffset] = (intValue21 >>> 3) & mask;
  1442.       output[28 + outputOffset] = ((intValue21 >>> 28) | (intValue22 << 4)) & mask;
  1443.       output[29 + outputOffset] = ((intValue22 >>> 21) | (intValue23 << 11)) & mask;
  1444.       output[30 + outputOffset] = ((intValue23 >>> 14) | (intValue24 << 18)) & mask;
  1445.       output[31 + outputOffset] = intValue24 >>> 7;
  1446.       outputOffset += 32;
  1447.       inputOffset += 25;
  1448.     }
  1449.   }
  1450.  
  1451.   // NOTE: hardwired to blockSize == 128
  1452.   public static void decode26(final int[] input, final int[] output) {
  1453.     final int numFrameBits = 26;
  1454.     final int mask = (int) ((1L<<numFrameBits) - 1);
  1455.     int outputOffset = 0;
  1456.     int inputOffset = 0;
  1457.     for(int step=0;step<4;step++) {
  1458.       final int intValue0 = input[inputOffset];
  1459.       final int intValue1 = input[1+inputOffset];
  1460.       final int intValue2 = input[2+inputOffset];
  1461.       final int intValue3 = input[3+inputOffset];
  1462.       final int intValue4 = input[4+inputOffset];
  1463.       final int intValue5 = input[5+inputOffset];
  1464.       final int intValue6 = input[6+inputOffset];
  1465.       final int intValue7 = input[7+inputOffset];
  1466.       final int intValue8 = input[8+inputOffset];
  1467.       final int intValue9 = input[9+inputOffset];
  1468.       final int intValue10 = input[10+inputOffset];
  1469.       final int intValue11 = input[11+inputOffset];
  1470.       final int intValue12 = input[12+inputOffset];
  1471.       final int intValue13 = input[13+inputOffset];
  1472.       final int intValue14 = input[14+inputOffset];
  1473.       final int intValue15 = input[15+inputOffset];
  1474.       final int intValue16 = input[16+inputOffset];
  1475.       final int intValue17 = input[17+inputOffset];
  1476.       final int intValue18 = input[18+inputOffset];
  1477.       final int intValue19 = input[19+inputOffset];
  1478.       final int intValue20 = input[20+inputOffset];
  1479.       final int intValue21 = input[21+inputOffset];
  1480.       final int intValue22 = input[22+inputOffset];
  1481.       final int intValue23 = input[23+inputOffset];
  1482.       final int intValue24 = input[24+inputOffset];
  1483.       final int intValue25 = input[25+inputOffset];
  1484.       output[0 + outputOffset] = intValue0 & mask;
  1485.       output[1 + outputOffset] = ((intValue0 >>> 26) | (intValue1 << 6)) & mask;
  1486.       output[2 + outputOffset] = ((intValue1 >>> 20) | (intValue2 << 12)) & mask;
  1487.       output[3 + outputOffset] = ((intValue2 >>> 14) | (intValue3 << 18)) & mask;
  1488.       output[4 + outputOffset] = ((intValue3 >>> 8) | (intValue4 << 24)) & mask;
  1489.       output[5 + outputOffset] = (intValue4 >>> 2) & mask;
  1490.       output[6 + outputOffset] = ((intValue4 >>> 28) | (intValue5 << 4)) & mask;
  1491.       output[7 + outputOffset] = ((intValue5 >>> 22) | (intValue6 << 10)) & mask;
  1492.       output[8 + outputOffset] = ((intValue6 >>> 16) | (intValue7 << 16)) & mask;
  1493.       output[9 + outputOffset] = ((intValue7 >>> 10) | (intValue8 << 22)) & mask;
  1494.       output[10 + outputOffset] = (intValue8 >>> 4) & mask;
  1495.       output[11 + outputOffset] = ((intValue8 >>> 30) | (intValue9 << 2)) & mask;
  1496.       output[12 + outputOffset] = ((intValue9 >>> 24) | (intValue10 << 8)) & mask;
  1497.       output[13 + outputOffset] = ((intValue10 >>> 18) | (intValue11 << 14)) & mask;
  1498.       output[14 + outputOffset] = ((intValue11 >>> 12) | (intValue12 << 20)) & mask;
  1499.       output[15 + outputOffset] = intValue12 >>> 6;
  1500.       output[16 + outputOffset] = intValue13 & mask;
  1501.       output[17 + outputOffset] = ((intValue13 >>> 26) | (intValue14 << 6)) & mask;
  1502.       output[18 + outputOffset] = ((intValue14 >>> 20) | (intValue15 << 12)) & mask;
  1503.       output[19 + outputOffset] = ((intValue15 >>> 14) | (intValue16 << 18)) & mask;
  1504.       output[20 + outputOffset] = ((intValue16 >>> 8) | (intValue17 << 24)) & mask;
  1505.       output[21 + outputOffset] = (intValue17 >>> 2) & mask;
  1506.       output[22 + outputOffset] = ((intValue17 >>> 28) | (intValue18 << 4)) & mask;
  1507.       output[23 + outputOffset] = ((intValue18 >>> 22) | (intValue19 << 10)) & mask;
  1508.       output[24 + outputOffset] = ((intValue19 >>> 16) | (intValue20 << 16)) & mask;
  1509.       output[25 + outputOffset] = ((intValue20 >>> 10) | (intValue21 << 22)) & mask;
  1510.       output[26 + outputOffset] = (intValue21 >>> 4) & mask;
  1511.       output[27 + outputOffset] = ((intValue21 >>> 30) | (intValue22 << 2)) & mask;
  1512.       output[28 + outputOffset] = ((intValue22 >>> 24) | (intValue23 << 8)) & mask;
  1513.       output[29 + outputOffset] = ((intValue23 >>> 18) | (intValue24 << 14)) & mask;
  1514.       output[30 + outputOffset] = ((intValue24 >>> 12) | (intValue25 << 20)) & mask;
  1515.       output[31 + outputOffset] = intValue25 >>> 6;
  1516.       outputOffset += 32;
  1517.       inputOffset += 26;
  1518.     }
  1519.   }
  1520.  
  1521.   // NOTE: hardwired to blockSize == 128
  1522.   public static void decode27(final int[] input, final int[] output) {
  1523.     final int numFrameBits = 27;
  1524.     final int mask = (int) ((1L<<numFrameBits) - 1);
  1525.     int outputOffset = 0;
  1526.     int inputOffset = 0;
  1527.     for(int step=0;step<4;step++) {
  1528.       final int intValue0 = input[inputOffset];
  1529.       final int intValue1 = input[1+inputOffset];
  1530.       final int intValue2 = input[2+inputOffset];
  1531.       final int intValue3 = input[3+inputOffset];
  1532.       final int intValue4 = input[4+inputOffset];
  1533.       final int intValue5 = input[5+inputOffset];
  1534.       final int intValue6 = input[6+inputOffset];
  1535.       final int intValue7 = input[7+inputOffset];
  1536.       final int intValue8 = input[8+inputOffset];
  1537.       final int intValue9 = input[9+inputOffset];
  1538.       final int intValue10 = input[10+inputOffset];
  1539.       final int intValue11 = input[11+inputOffset];
  1540.       final int intValue12 = input[12+inputOffset];
  1541.       final int intValue13 = input[13+inputOffset];
  1542.       final int intValue14 = input[14+inputOffset];
  1543.       final int intValue15 = input[15+inputOffset];
  1544.       final int intValue16 = input[16+inputOffset];
  1545.       final int intValue17 = input[17+inputOffset];
  1546.       final int intValue18 = input[18+inputOffset];
  1547.       final int intValue19 = input[19+inputOffset];
  1548.       final int intValue20 = input[20+inputOffset];
  1549.       final int intValue21 = input[21+inputOffset];
  1550.       final int intValue22 = input[22+inputOffset];
  1551.       final int intValue23 = input[23+inputOffset];
  1552.       final int intValue24 = input[24+inputOffset];
  1553.       final int intValue25 = input[25+inputOffset];
  1554.       final int intValue26 = input[26+inputOffset];
  1555.       output[0 + outputOffset] = intValue0 & mask;
  1556.       output[1 + outputOffset] = ((intValue0 >>> 27) | (intValue1 << 5)) & mask;
  1557.       output[2 + outputOffset] = ((intValue1 >>> 22) | (intValue2 << 10)) & mask;
  1558.       output[3 + outputOffset] = ((intValue2 >>> 17) | (intValue3 << 15)) & mask;
  1559.       output[4 + outputOffset] = ((intValue3 >>> 12) | (intValue4 << 20)) & mask;
  1560.       output[5 + outputOffset] = ((intValue4 >>> 7) | (intValue5 << 25)) & mask;
  1561.       output[6 + outputOffset] = (intValue5 >>> 2) & mask;
  1562.       output[7 + outputOffset] = ((intValue5 >>> 29) | (intValue6 << 3)) & mask;
  1563.       output[8 + outputOffset] = ((intValue6 >>> 24) | (intValue7 << 8)) & mask;
  1564.       output[9 + outputOffset] = ((intValue7 >>> 19) | (intValue8 << 13)) & mask;
  1565.       output[10 + outputOffset] = ((intValue8 >>> 14) | (intValue9 << 18)) & mask;
  1566.       output[11 + outputOffset] = ((intValue9 >>> 9) | (intValue10 << 23)) & mask;
  1567.       output[12 + outputOffset] = (intValue10 >>> 4) & mask;
  1568.       output[13 + outputOffset] = ((intValue10 >>> 31) | (intValue11 << 1)) & mask;
  1569.       output[14 + outputOffset] = ((intValue11 >>> 26) | (intValue12 << 6)) & mask;
  1570.       output[15 + outputOffset] = ((intValue12 >>> 21) | (intValue13 << 11)) & mask;
  1571.       output[16 + outputOffset] = ((intValue13 >>> 16) | (intValue14 << 16)) & mask;
  1572.       output[17 + outputOffset] = ((intValue14 >>> 11) | (intValue15 << 21)) & mask;
  1573.       output[18 + outputOffset] = ((intValue15 >>> 6) | (intValue16 << 26)) & mask;
  1574.       output[19 + outputOffset] = (intValue16 >>> 1) & mask;
  1575.       output[20 + outputOffset] = ((intValue16 >>> 28) | (intValue17 << 4)) & mask;
  1576.       output[21 + outputOffset] = ((intValue17 >>> 23) | (intValue18 << 9)) & mask;
  1577.       output[22 + outputOffset] = ((intValue18 >>> 18) | (intValue19 << 14)) & mask;
  1578.       output[23 + outputOffset] = ((intValue19 >>> 13) | (intValue20 << 19)) & mask;
  1579.       output[24 + outputOffset] = ((intValue20 >>> 8) | (intValue21 << 24)) & mask;
  1580.       output[25 + outputOffset] = (intValue21 >>> 3) & mask;
  1581.       output[26 + outputOffset] = ((intValue21 >>> 30) | (intValue22 << 2)) & mask;
  1582.       output[27 + outputOffset] = ((intValue22 >>> 25) | (intValue23 << 7)) & mask;
  1583.       output[28 + outputOffset] = ((intValue23 >>> 20) | (intValue24 << 12)) & mask;
  1584.       output[29 + outputOffset] = ((intValue24 >>> 15) | (intValue25 << 17)) & mask;
  1585.       output[30 + outputOffset] = ((intValue25 >>> 10) | (intValue26 << 22)) & mask;
  1586.       output[31 + outputOffset] = intValue26 >>> 5;
  1587.       outputOffset += 32;
  1588.       inputOffset += 27;
  1589.     }
  1590.   }
  1591.  
  1592.   // NOTE: hardwired to blockSize == 128
  1593.   public static void decode28(final int[] input, final int[] output) {
  1594.     final int numFrameBits = 28;
  1595.     final int mask = (int) ((1L<<numFrameBits) - 1);
  1596.     int outputOffset = 0;
  1597.     int inputOffset = 0;
  1598.     for(int step=0;step<4;step++) {
  1599.       final int intValue0 = input[inputOffset];
  1600.       final int intValue1 = input[1+inputOffset];
  1601.       final int intValue2 = input[2+inputOffset];
  1602.       final int intValue3 = input[3+inputOffset];
  1603.       final int intValue4 = input[4+inputOffset];
  1604.       final int intValue5 = input[5+inputOffset];
  1605.       final int intValue6 = input[6+inputOffset];
  1606.       final int intValue7 = input[7+inputOffset];
  1607.       final int intValue8 = input[8+inputOffset];
  1608.       final int intValue9 = input[9+inputOffset];
  1609.       final int intValue10 = input[10+inputOffset];
  1610.       final int intValue11 = input[11+inputOffset];
  1611.       final int intValue12 = input[12+inputOffset];
  1612.       final int intValue13 = input[13+inputOffset];
  1613.       final int intValue14 = input[14+inputOffset];
  1614.       final int intValue15 = input[15+inputOffset];
  1615.       final int intValue16 = input[16+inputOffset];
  1616.       final int intValue17 = input[17+inputOffset];
  1617.       final int intValue18 = input[18+inputOffset];
  1618.       final int intValue19 = input[19+inputOffset];
  1619.       final int intValue20 = input[20+inputOffset];
  1620.       final int intValue21 = input[21+inputOffset];
  1621.       final int intValue22 = input[22+inputOffset];
  1622.       final int intValue23 = input[23+inputOffset];
  1623.       final int intValue24 = input[24+inputOffset];
  1624.       final int intValue25 = input[25+inputOffset];
  1625.       final int intValue26 = input[26+inputOffset];
  1626.       final int intValue27 = input[27+inputOffset];
  1627.       output[0 + outputOffset] = intValue0 & mask;
  1628.       output[1 + outputOffset] = ((intValue0 >>> 28) | (intValue1 << 4)) & mask;
  1629.       output[2 + outputOffset] = ((intValue1 >>> 24) | (intValue2 << 8)) & mask;
  1630.       output[3 + outputOffset] = ((intValue2 >>> 20) | (intValue3 << 12)) & mask;
  1631.       output[4 + outputOffset] = ((intValue3 >>> 16) | (intValue4 << 16)) & mask;
  1632.       output[5 + outputOffset] = ((intValue4 >>> 12) | (intValue5 << 20)) & mask;
  1633.       output[6 + outputOffset] = ((intValue5 >>> 8) | (intValue6 << 24)) & mask;
  1634.       output[7 + outputOffset] = intValue6 >>> 4;
  1635.       output[8 + outputOffset] = intValue7 & mask;
  1636.       output[9 + outputOffset] = ((intValue7 >>> 28) | (intValue8 << 4)) & mask;
  1637.       output[10 + outputOffset] = ((intValue8 >>> 24) | (intValue9 << 8)) & mask;
  1638.       output[11 + outputOffset] = ((intValue9 >>> 20) | (intValue10 << 12)) & mask;
  1639.       output[12 + outputOffset] = ((intValue10 >>> 16) | (intValue11 << 16)) & mask;
  1640.       output[13 + outputOffset] = ((intValue11 >>> 12) | (intValue12 << 20)) & mask;
  1641.       output[14 + outputOffset] = ((intValue12 >>> 8) | (intValue13 << 24)) & mask;
  1642.       output[15 + outputOffset] = intValue13 >>> 4;
  1643.       output[16 + outputOffset] = intValue14 & mask;
  1644.       output[17 + outputOffset] = ((intValue14 >>> 28) | (intValue15 << 4)) & mask;
  1645.       output[18 + outputOffset] = ((intValue15 >>> 24) | (intValue16 << 8)) & mask;
  1646.       output[19 + outputOffset] = ((intValue16 >>> 20) | (intValue17 << 12)) & mask;
  1647.       output[20 + outputOffset] = ((intValue17 >>> 16) | (intValue18 << 16)) & mask;
  1648.       output[21 + outputOffset] = ((intValue18 >>> 12) | (intValue19 << 20)) & mask;
  1649.       output[22 + outputOffset] = ((intValue19 >>> 8) | (intValue20 << 24)) & mask;
  1650.       output[23 + outputOffset] = intValue20 >>> 4;
  1651.       output[24 + outputOffset] = intValue21 & mask;
  1652.       output[25 + outputOffset] = ((intValue21 >>> 28) | (intValue22 << 4)) & mask;
  1653.       output[26 + outputOffset] = ((intValue22 >>> 24) | (intValue23 << 8)) & mask;
  1654.       output[27 + outputOffset] = ((intValue23 >>> 20) | (intValue24 << 12)) & mask;
  1655.       output[28 + outputOffset] = ((intValue24 >>> 16) | (intValue25 << 16)) & mask;
  1656.       output[29 + outputOffset] = ((intValue25 >>> 12) | (intValue26 << 20)) & mask;
  1657.       output[30 + outputOffset] = ((intValue26 >>> 8) | (intValue27 << 24)) & mask;
  1658.       output[31 + outputOffset] = intValue27 >>> 4;
  1659.       outputOffset += 32;
  1660.       inputOffset += 28;
  1661.     }
  1662.   }
  1663.  
  1664.   // NOTE: hardwired to blockSize == 128
  1665.   public static void decode29(final int[] input, final int[] output) {
  1666.     final int numFrameBits = 29;
  1667.     final int mask = (int) ((1L<<numFrameBits) - 1);
  1668.     int outputOffset = 0;
  1669.     int inputOffset = 0;
  1670.     for(int step=0;step<4;step++) {
  1671.       final int intValue0 = input[inputOffset];
  1672.       final int intValue1 = input[1+inputOffset];
  1673.       final int intValue2 = input[2+inputOffset];
  1674.       final int intValue3 = input[3+inputOffset];
  1675.       final int intValue4 = input[4+inputOffset];
  1676.       final int intValue5 = input[5+inputOffset];
  1677.       final int intValue6 = input[6+inputOffset];
  1678.       final int intValue7 = input[7+inputOffset];
  1679.       final int intValue8 = input[8+inputOffset];
  1680.       final int intValue9 = input[9+inputOffset];
  1681.       final int intValue10 = input[10+inputOffset];
  1682.       final int intValue11 = input[11+inputOffset];
  1683.       final int intValue12 = input[12+inputOffset];
  1684.       final int intValue13 = input[13+inputOffset];
  1685.       final int intValue14 = input[14+inputOffset];
  1686.       final int intValue15 = input[15+inputOffset];
  1687.       final int intValue16 = input[16+inputOffset];
  1688.       final int intValue17 = input[17+inputOffset];
  1689.       final int intValue18 = input[18+inputOffset];
  1690.       final int intValue19 = input[19+inputOffset];
  1691.       final int intValue20 = input[20+inputOffset];
  1692.       final int intValue21 = input[21+inputOffset];
  1693.       final int intValue22 = input[22+inputOffset];
  1694.       final int intValue23 = input[23+inputOffset];
  1695.       final int intValue24 = input[24+inputOffset];
  1696.       final int intValue25 = input[25+inputOffset];
  1697.       final int intValue26 = input[26+inputOffset];
  1698.       final int intValue27 = input[27+inputOffset];
  1699.       final int intValue28 = input[28+inputOffset];
  1700.       output[0 + outputOffset] = intValue0 & mask;
  1701.       output[1 + outputOffset] = ((intValue0 >>> 29) | (intValue1 << 3)) & mask;
  1702.       output[2 + outputOffset] = ((intValue1 >>> 26) | (intValue2 << 6)) & mask;
  1703.       output[3 + outputOffset] = ((intValue2 >>> 23) | (intValue3 << 9)) & mask;
  1704.       output[4 + outputOffset] = ((intValue3 >>> 20) | (intValue4 << 12)) & mask;
  1705.       output[5 + outputOffset] = ((intValue4 >>> 17) | (intValue5 << 15)) & mask;
  1706.       output[6 + outputOffset] = ((intValue5 >>> 14) | (intValue6 << 18)) & mask;
  1707.       output[7 + outputOffset] = ((intValue6 >>> 11) | (intValue7 << 21)) & mask;
  1708.       output[8 + outputOffset] = ((intValue7 >>> 8) | (intValue8 << 24)) & mask;
  1709.       output[9 + outputOffset] = ((intValue8 >>> 5) | (intValue9 << 27)) & mask;
  1710.       output[10 + outputOffset] = (intValue9 >>> 2) & mask;
  1711.       output[11 + outputOffset] = ((intValue9 >>> 31) | (intValue10 << 1)) & mask;
  1712.       output[12 + outputOffset] = ((intValue10 >>> 28) | (intValue11 << 4)) & mask;
  1713.       output[13 + outputOffset] = ((intValue11 >>> 25) | (intValue12 << 7)) & mask;
  1714.       output[14 + outputOffset] = ((intValue12 >>> 22) | (intValue13 << 10)) & mask;
  1715.       output[15 + outputOffset] = ((intValue13 >>> 19) | (intValue14 << 13)) & mask;
  1716.       output[16 + outputOffset] = ((intValue14 >>> 16) | (intValue15 << 16)) & mask;
  1717.       output[17 + outputOffset] = ((intValue15 >>> 13) | (intValue16 << 19)) & mask;
  1718.       output[18 + outputOffset] = ((intValue16 >>> 10) | (intValue17 << 22)) & mask;
  1719.       output[19 + outputOffset] = ((intValue17 >>> 7) | (intValue18 << 25)) & mask;
  1720.       output[20 + outputOffset] = ((intValue18 >>> 4) | (intValue19 << 28)) & mask;
  1721.       output[21 + outputOffset] = (intValue19 >>> 1) & mask;
  1722.       output[22 + outputOffset] = ((intValue19 >>> 30) | (intValue20 << 2)) & mask;
  1723.       output[23 + outputOffset] = ((intValue20 >>> 27) | (intValue21 << 5)) & mask;
  1724.       output[24 + outputOffset] = ((intValue21 >>> 24) | (intValue22 << 8)) & mask;
  1725.       output[25 + outputOffset] = ((intValue22 >>> 21) | (intValue23 << 11)) & mask;
  1726.       output[26 + outputOffset] = ((intValue23 >>> 18) | (intValue24 << 14)) & mask;
  1727.       output[27 + outputOffset] = ((intValue24 >>> 15) | (intValue25 << 17)) & mask;
  1728.       output[28 + outputOffset] = ((intValue25 >>> 12) | (intValue26 << 20)) & mask;
  1729.       output[29 + outputOffset] = ((intValue26 >>> 9) | (intValue27 << 23)) & mask;
  1730.       output[30 + outputOffset] = ((intValue27 >>> 6) | (intValue28 << 26)) & mask;
  1731.       output[31 + outputOffset] = intValue28 >>> 3;
  1732.       outputOffset += 32;
  1733.       inputOffset += 29;
  1734.     }
  1735.   }
  1736.  
  1737.   // NOTE: hardwired to blockSize == 128
  1738.   public static void decode30(final int[] input, final int[] output) {
  1739.     final int numFrameBits = 30;
  1740.     final int mask = (int) ((1L<<numFrameBits) - 1);
  1741.     int outputOffset = 0;
  1742.     int inputOffset = 0;
  1743.     for(int step=0;step<4;step++) {
  1744.       final int intValue0 = input[inputOffset];
  1745.       final int intValue1 = input[1+inputOffset];
  1746.       final int intValue2 = input[2+inputOffset];
  1747.       final int intValue3 = input[3+inputOffset];
  1748.       final int intValue4 = input[4+inputOffset];
  1749.       final int intValue5 = input[5+inputOffset];
  1750.       final int intValue6 = input[6+inputOffset];
  1751.       final int intValue7 = input[7+inputOffset];
  1752.       final int intValue8 = input[8+inputOffset];
  1753.       final int intValue9 = input[9+inputOffset];
  1754.       final int intValue10 = input[10+inputOffset];
  1755.       final int intValue11 = input[11+inputOffset];
  1756.       final int intValue12 = input[12+inputOffset];
  1757.       final int intValue13 = input[13+inputOffset];
  1758.       final int intValue14 = input[14+inputOffset];
  1759.       final int intValue15 = input[15+inputOffset];
  1760.       final int intValue16 = input[16+inputOffset];
  1761.       final int intValue17 = input[17+inputOffset];
  1762.       final int intValue18 = input[18+inputOffset];
  1763.       final int intValue19 = input[19+inputOffset];
  1764.       final int intValue20 = input[20+inputOffset];
  1765.       final int intValue21 = input[21+inputOffset];
  1766.       final int intValue22 = input[22+inputOffset];
  1767.       final int intValue23 = input[23+inputOffset];
  1768.       final int intValue24 = input[24+inputOffset];
  1769.       final int intValue25 = input[25+inputOffset];
  1770.       final int intValue26 = input[26+inputOffset];
  1771.       final int intValue27 = input[27+inputOffset];
  1772.       final int intValue28 = input[28+inputOffset];
  1773.       final int intValue29 = input[29+inputOffset];
  1774.       output[0 + outputOffset] = intValue0 & mask;
  1775.       output[1 + outputOffset] = ((intValue0 >>> 30) | (intValue1 << 2)) & mask;
  1776.       output[2 + outputOffset] = ((intValue1 >>> 28) | (intValue2 << 4)) & mask;
  1777.       output[3 + outputOffset] = ((intValue2 >>> 26) | (intValue3 << 6)) & mask;
  1778.       output[4 + outputOffset] = ((intValue3 >>> 24) | (intValue4 << 8)) & mask;
  1779.       output[5 + outputOffset] = ((intValue4 >>> 22) | (intValue5 << 10)) & mask;
  1780.       output[6 + outputOffset] = ((intValue5 >>> 20) | (intValue6 << 12)) & mask;
  1781.       output[7 + outputOffset] = ((intValue6 >>> 18) | (intValue7 << 14)) & mask;
  1782.       output[8 + outputOffset] = ((intValue7 >>> 16) | (intValue8 << 16)) & mask;
  1783.       output[9 + outputOffset] = ((intValue8 >>> 14) | (intValue9 << 18)) & mask;
  1784.       output[10 + outputOffset] = ((intValue9 >>> 12) | (intValue10 << 20)) & mask;
  1785.       output[11 + outputOffset] = ((intValue10 >>> 10) | (intValue11 << 22)) & mask;
  1786.       output[12 + outputOffset] = ((intValue11 >>> 8) | (intValue12 << 24)) & mask;
  1787.       output[13 + outputOffset] = ((intValue12 >>> 6) | (intValue13 << 26)) & mask;
  1788.       output[14 + outputOffset] = ((intValue13 >>> 4) | (intValue14 << 28)) & mask;
  1789.       output[15 + outputOffset] = intValue14 >>> 2;
  1790.       output[16 + outputOffset] = intValue15 & mask;
  1791.       output[17 + outputOffset] = ((intValue15 >>> 30) | (intValue16 << 2)) & mask;
  1792.       output[18 + outputOffset] = ((intValue16 >>> 28) | (intValue17 << 4)) & mask;
  1793.       output[19 + outputOffset] = ((intValue17 >>> 26) | (intValue18 << 6)) & mask;
  1794.       output[20 + outputOffset] = ((intValue18 >>> 24) | (intValue19 << 8)) & mask;
  1795.       output[21 + outputOffset] = ((intValue19 >>> 22) | (intValue20 << 10)) & mask;
  1796.       output[22 + outputOffset] = ((intValue20 >>> 20) | (intValue21 << 12)) & mask;
  1797.       output[23 + outputOffset] = ((intValue21 >>> 18) | (intValue22 << 14)) & mask;
  1798.       output[24 + outputOffset] = ((intValue22 >>> 16) | (intValue23 << 16)) & mask;
  1799.       output[25 + outputOffset] = ((intValue23 >>> 14) | (intValue24 << 18)) & mask;
  1800.       output[26 + outputOffset] = ((intValue24 >>> 12) | (intValue25 << 20)) & mask;
  1801.       output[27 + outputOffset] = ((intValue25 >>> 10) | (intValue26 << 22)) & mask;
  1802.       output[28 + outputOffset] = ((intValue26 >>> 8) | (intValue27 << 24)) & mask;
  1803.       output[29 + outputOffset] = ((intValue27 >>> 6) | (intValue28 << 26)) & mask;
  1804.       output[30 + outputOffset] = ((intValue28 >>> 4) | (intValue29 << 28)) & mask;
  1805.       output[31 + outputOffset] = intValue29 >>> 2;
  1806.       outputOffset += 32;
  1807.       inputOffset += 30;
  1808.     }
  1809.   }
  1810.  
  1811.   // NOTE: hardwired to blockSize == 128
  1812.   public static void decode31(final int[] input, final int[] output) {
  1813.     final int numFrameBits = 31;
  1814.     final int mask = (int) ((1L<<numFrameBits) - 1);
  1815.     int outputOffset = 0;
  1816.     int inputOffset = 0;
  1817.     for(int step=0;step<4;step++) {
  1818.       final int intValue0 = input[inputOffset];
  1819.       final int intValue1 = input[1+inputOffset];
  1820.       final int intValue2 = input[2+inputOffset];
  1821.       final int intValue3 = input[3+inputOffset];
  1822.       final int intValue4 = input[4+inputOffset];
  1823.       final int intValue5 = input[5+inputOffset];
  1824.       final int intValue6 = input[6+inputOffset];
  1825.       final int intValue7 = input[7+inputOffset];
  1826.       final int intValue8 = input[8+inputOffset];
  1827.       final int intValue9 = input[9+inputOffset];
  1828.       final int intValue10 = input[10+inputOffset];
  1829.       final int intValue11 = input[11+inputOffset];
  1830.       final int intValue12 = input[12+inputOffset];
  1831.       final int intValue13 = input[13+inputOffset];
  1832.       final int intValue14 = input[14+inputOffset];
  1833.       final int intValue15 = input[15+inputOffset];
  1834.       final int intValue16 = input[16+inputOffset];
  1835.       final int intValue17 = input[17+inputOffset];
  1836.       final int intValue18 = input[18+inputOffset];
  1837.       final int intValue19 = input[19+inputOffset];
  1838.       final int intValue20 = input[20+inputOffset];
  1839.       final int intValue21 = input[21+inputOffset];
  1840.       final int intValue22 = input[22+inputOffset];
  1841.       final int intValue23 = input[23+inputOffset];
  1842.       final int intValue24 = input[24+inputOffset];
  1843.       final int intValue25 = input[25+inputOffset];
  1844.       final int intValue26 = input[26+inputOffset];
  1845.       final int intValue27 = input[27+inputOffset];
  1846.       final int intValue28 = input[28+inputOffset];
  1847.       final int intValue29 = input[29+inputOffset];
  1848.       final int intValue30 = input[30+inputOffset];
  1849.       output[0 + outputOffset] = intValue0 & mask;
  1850.       output[1 + outputOffset] = ((intValue0 >>> 31) | (intValue1 << 1)) & mask;
  1851.       output[2 + outputOffset] = ((intValue1 >>> 30) | (intValue2 << 2)) & mask;
  1852.       output[3 + outputOffset] = ((intValue2 >>> 29) | (intValue3 << 3)) & mask;
  1853.       output[4 + outputOffset] = ((intValue3 >>> 28) | (intValue4 << 4)) & mask;
  1854.       output[5 + outputOffset] = ((intValue4 >>> 27) | (intValue5 << 5)) & mask;
  1855.       output[6 + outputOffset] = ((intValue5 >>> 26) | (intValue6 << 6)) & mask;
  1856.       output[7 + outputOffset] = ((intValue6 >>> 25) | (intValue7 << 7)) & mask;
  1857.       output[8 + outputOffset] = ((intValue7 >>> 24) | (intValue8 << 8)) & mask;
  1858.       output[9 + outputOffset] = ((intValue8 >>> 23) | (intValue9 << 9)) & mask;
  1859.       output[10 + outputOffset] = ((intValue9 >>> 22) | (intValue10 << 10)) & mask;
  1860.       output[11 + outputOffset] = ((intValue10 >>> 21) | (intValue11 << 11)) & mask;
  1861.       output[12 + outputOffset] = ((intValue11 >>> 20) | (intValue12 << 12)) & mask;
  1862.       output[13 + outputOffset] = ((intValue12 >>> 19) | (intValue13 << 13)) & mask;
  1863.       output[14 + outputOffset] = ((intValue13 >>> 18) | (intValue14 << 14)) & mask;
  1864.       output[15 + outputOffset] = ((intValue14 >>> 17) | (intValue15 << 15)) & mask;
  1865.       output[16 + outputOffset] = ((intValue15 >>> 16) | (intValue16 << 16)) & mask;
  1866.       output[17 + outputOffset] = ((intValue16 >>> 15) | (intValue17 << 17)) & mask;
  1867.       output[18 + outputOffset] = ((intValue17 >>> 14) | (intValue18 << 18)) & mask;
  1868.       output[19 + outputOffset] = ((intValue18 >>> 13) | (intValue19 << 19)) & mask;
  1869.       output[20 + outputOffset] = ((intValue19 >>> 12) | (intValue20 << 20)) & mask;
  1870.       output[21 + outputOffset] = ((intValue20 >>> 11) | (intValue21 << 21)) & mask;
  1871.       output[22 + outputOffset] = ((intValue21 >>> 10) | (intValue22 << 22)) & mask;
  1872.       output[23 + outputOffset] = ((intValue22 >>> 9) | (intValue23 << 23)) & mask;
  1873.       output[24 + outputOffset] = ((intValue23 >>> 8) | (intValue24 << 24)) & mask;
  1874.       output[25 + outputOffset] = ((intValue24 >>> 7) | (intValue25 << 25)) & mask;
  1875.       output[26 + outputOffset] = ((intValue25 >>> 6) | (intValue26 << 26)) & mask;
  1876.       output[27 + outputOffset] = ((intValue26 >>> 5) | (intValue27 << 27)) & mask;
  1877.       output[28 + outputOffset] = ((intValue27 >>> 4) | (intValue28 << 28)) & mask;
  1878.       output[29 + outputOffset] = ((intValue28 >>> 3) | (intValue29 << 29)) & mask;
  1879.       output[30 + outputOffset] = ((intValue29 >>> 2) | (intValue30 << 30)) & mask;
  1880.       output[31 + outputOffset] = intValue30 >>> 1;
  1881.       outputOffset += 32;
  1882.       inputOffset += 31;
  1883.     }
  1884.   }
  1885.  
  1886.   // NOTE: hardwired to blockSize == 128
  1887.   public static void decode32(final int[] input, final int[] output) {
  1888.     final int numFrameBits = 32;
  1889.     final int mask = (int) ((1L<<numFrameBits) - 1);
  1890.     int outputOffset = 0;
  1891.     int inputOffset = 0;
  1892.     for(int step=0;step<4;step++) {
  1893.       final int intValue0 = input[inputOffset];
  1894.       final int intValue1 = input[1+inputOffset];
  1895.       final int intValue2 = input[2+inputOffset];
  1896.       final int intValue3 = input[3+inputOffset];
  1897.       final int intValue4 = input[4+inputOffset];
  1898.       final int intValue5 = input[5+inputOffset];
  1899.       final int intValue6 = input[6+inputOffset];
  1900.       final int intValue7 = input[7+inputOffset];
  1901.       final int intValue8 = input[8+inputOffset];
  1902.       final int intValue9 = input[9+inputOffset];
  1903.       final int intValue10 = input[10+inputOffset];
  1904.       final int intValue11 = input[11+inputOffset];
  1905.       final int intValue12 = input[12+inputOffset];
  1906.       final int intValue13 = input[13+inputOffset];
  1907.       final int intValue14 = input[14+inputOffset];
  1908.       final int intValue15 = input[15+inputOffset];
  1909.       final int intValue16 = input[16+inputOffset];
  1910.       final int intValue17 = input[17+inputOffset];
  1911.       final int intValue18 = input[18+inputOffset];
  1912.       final int intValue19 = input[19+inputOffset];
  1913.       final int intValue20 = input[20+inputOffset];
  1914.       final int intValue21 = input[21+inputOffset];
  1915.       final int intValue22 = input[22+inputOffset];
  1916.       final int intValue23 = input[23+inputOffset];
  1917.       final int intValue24 = input[24+inputOffset];
  1918.       final int intValue25 = input[25+inputOffset];
  1919.       final int intValue26 = input[26+inputOffset];
  1920.       final int intValue27 = input[27+inputOffset];
  1921.       final int intValue28 = input[28+inputOffset];
  1922.       final int intValue29 = input[29+inputOffset];
  1923.       final int intValue30 = input[30+inputOffset];
  1924.       final int intValue31 = input[31+inputOffset];
  1925.       output[0 + outputOffset] = intValue0;
  1926.       output[1 + outputOffset] = intValue1;
  1927.       output[2 + outputOffset] = intValue2;
  1928.       output[3 + outputOffset] = intValue3;
  1929.       output[4 + outputOffset] = intValue4;
  1930.       output[5 + outputOffset] = intValue5;
  1931.       output[6 + outputOffset] = intValue6;
  1932.       output[7 + outputOffset] = intValue7;
  1933.       output[8 + outputOffset] = intValue8;
  1934.       output[9 + outputOffset] = intValue9;
  1935.       output[10 + outputOffset] = intValue10;
  1936.       output[11 + outputOffset] = intValue11;
  1937.       output[12 + outputOffset] = intValue12;
  1938.       output[13 + outputOffset] = intValue13;
  1939.       output[14 + outputOffset] = intValue14;
  1940.       output[15 + outputOffset] = intValue15;
  1941.       output[16 + outputOffset] = intValue16;
  1942.       output[17 + outputOffset] = intValue17;
  1943.       output[18 + outputOffset] = intValue18;
  1944.       output[19 + outputOffset] = intValue19;
  1945.       output[20 + outputOffset] = intValue20;
  1946.       output[21 + outputOffset] = intValue21;
  1947.       output[22 + outputOffset] = intValue22;
  1948.       output[23 + outputOffset] = intValue23;
  1949.       output[24 + outputOffset] = intValue24;
  1950.       output[25 + outputOffset] = intValue25;
  1951.       output[26 + outputOffset] = intValue26;
  1952.       output[27 + outputOffset] = intValue27;
  1953.       output[28 + outputOffset] = intValue28;
  1954.       output[29 + outputOffset] = intValue29;
  1955.       output[30 + outputOffset] = intValue30;
  1956.       output[31 + outputOffset] = intValue31;
  1957.       outputOffset += 32;
  1958.       inputOffset += 32;
  1959.     }
  1960.   }
  1961. }
Advertisement
Add Comment
Please, Sign In to add comment