+ dest[272 + pos] = new_v30;\r
+ dest[288 + pos] = new_v29;\r
+ dest[304 + pos] = new_v28;\r
+ dest[320 + pos] = new_v27;\r
+ dest[336 + pos] = new_v26;\r
+ dest[352 + pos] = new_v25;\r
+ dest[368 + pos] = new_v24;\r
+ dest[384 + pos] = new_v23;\r
+ dest[400 + pos] = new_v22;\r
+ dest[416 + pos] = new_v21;\r
+ dest[432 + pos] = new_v20;\r
+ dest[448 + pos] = new_v19;\r
+ dest[464 + pos] = new_v18;\r
+ dest[480 + pos] = new_v17;\r
+ dest[496 + pos] = new_v16;\r
+ /*\r
+ * } else { v1[0 + actual_write_pos] = -new_v0; // insert V[33-48] (==\r
+ * new_v[16-31]) into other v: v1[16 + actual_write_pos] = new_v16; v1[32 +\r
+ * actual_write_pos] = new_v17; v1[48 + actual_write_pos] = new_v18; v1[64 +\r
+ * actual_write_pos] = new_v19; v1[80 + actual_write_pos] = new_v20; v1[96 +\r
+ * actual_write_pos] = new_v21; v1[112 + actual_write_pos] = new_v22; v1[128\r
+ * + actual_write_pos] = new_v23; v1[144 + actual_write_pos] = new_v24;\r
+ * v1[160 + actual_write_pos] = new_v25; v1[176 + actual_write_pos] =\r
+ * new_v26; v1[192 + actual_write_pos] = new_v27; v1[208 + actual_write_pos]\r
+ * = new_v28; v1[224 + actual_write_pos] = new_v29; v1[240 +\r
+ * actual_write_pos] = new_v30; v1[256 + actual_write_pos] = new_v31;\r
+ * \r
+ * // insert V[49-63] (== new_v[30-16]) into other v: v1[272 +\r
+ * actual_write_pos] = new_v30; v1[288 + actual_write_pos] = new_v29; v1[304\r
+ * + actual_write_pos] = new_v28; v1[320 + actual_write_pos] = new_v27;\r
+ * v1[336 + actual_write_pos] = new_v26; v1[352 + actual_write_pos] =\r
+ * new_v25; v1[368 + actual_write_pos] = new_v24; v1[384 + actual_write_pos]\r
+ * = new_v23; v1[400 + actual_write_pos] = new_v22; v1[416 +\r
+ * actual_write_pos] = new_v21; v1[432 + actual_write_pos] = new_v20; v1[448\r
+ * + actual_write_pos] = new_v19; v1[464 + actual_write_pos] = new_v18;\r
+ * v1[480 + actual_write_pos] = new_v17; v1[496 + actual_write_pos] =\r
+ * new_v16; }\r
+ */\r
+ }\r
+\r
+ /**\r
+ * Compute new values via a fast cosine transform.\r
+ */\r
+ private void compute_new_v_old() {\r
+ // p is fully initialized from x1\r
+ // float[] p = _p;\r
+ // pp is fully initialized from p\r
+ // float[] pp = _pp;\r
+\r
+ // float[] new_v = _new_v;\r
+\r
+ float[] new_v = new float[32]; // new V[0-15] and V[33-48] of Figure 3-A.2\r
+ // in ISO DIS 11172-3\r
+ float[] p = new float[16];\r
+ float[] pp = new float[16];\r
+\r
+ for (int i = 31; i >= 0; i--) {\r
+ new_v[i] = 0.0f;\r
+ }\r
+\r
+ // float[] new_v = new float[32]; // new V[0-15] and V[33-48] of Figure\r
+ // 3-A.2 in ISO DIS 11172-3\r
+ // float[] p = new float[16];\r
+ // float[] pp = new float[16];\r
+\r
+ float[] x1 = samples;\r
+\r
+ p[0] = x1[0] + x1[31];\r
+ p[1] = x1[1] + x1[30];\r
+ p[2] = x1[2] + x1[29];\r
+ p[3] = x1[3] + x1[28];\r
+ p[4] = x1[4] + x1[27];\r
+ p[5] = x1[5] + x1[26];\r
+ p[6] = x1[6] + x1[25];\r
+ p[7] = x1[7] + x1[24];\r
+ p[8] = x1[8] + x1[23];\r
+ p[9] = x1[9] + x1[22];\r
+ p[10] = x1[10] + x1[21];\r
+ p[11] = x1[11] + x1[20];\r
+ p[12] = x1[12] + x1[19];\r
+ p[13] = x1[13] + x1[18];\r
+ p[14] = x1[14] + x1[17];\r
+ p[15] = x1[15] + x1[16];\r
+\r
+ pp[0] = p[0] + p[15];\r
+ pp[1] = p[1] + p[14];\r
+ pp[2] = p[2] + p[13];\r
+ pp[3] = p[3] + p[12];\r
+ pp[4] = p[4] + p[11];\r
+ pp[5] = p[5] + p[10];\r
+ pp[6] = p[6] + p[9];\r
+ pp[7] = p[7] + p[8];\r
+ pp[8] = (p[0] - p[15]) * cos1_32;\r
+ pp[9] = (p[1] - p[14]) * cos3_32;\r
+ pp[10] = (p[2] - p[13]) * cos5_32;\r
+ pp[11] = (p[3] - p[12]) * cos7_32;\r
+ pp[12] = (p[4] - p[11]) * cos9_32;\r
+ pp[13] = (p[5] - p[10]) * cos11_32;\r
+ pp[14] = (p[6] - p[9]) * cos13_32;\r
+ pp[15] = (p[7] - p[8]) * cos15_32;\r
+\r
+ p[0] = pp[0] + pp[7];\r
+ p[1] = pp[1] + pp[6];\r
+ p[2] = pp[2] + pp[5];\r
+ p[3] = pp[3] + pp[4];\r
+ p[4] = (pp[0] - pp[7]) * cos1_16;\r
+ p[5] = (pp[1] - pp[6]) * cos3_16;\r
+ p[6] = (pp[2] - pp[5]) * cos5_16;\r
+ p[7] = (pp[3] - pp[4]) * cos7_16;\r
+ p[8] = pp[8] + pp[15];\r
+ p[9] = pp[9] + pp[14];\r
+ p[10] = pp[10] + pp[13];\r
+ p[11] = pp[11] + pp[12];\r
+ p[12] = (pp[8] - pp[15]) * cos1_16;\r
+ p[13] = (pp[9] - pp[14]) * cos3_16;\r
+ p[14] = (pp[10] - pp[13]) * cos5_16;\r
+ p[15] = (pp[11] - pp[12]) * cos7_16;\r
+\r
+ pp[0] = p[0] + p[3];\r
+ pp[1] = p[1] + p[2];\r
+ pp[2] = (p[0] - p[3]) * cos1_8;\r
+ pp[3] = (p[1] - p[2]) * cos3_8;\r
+ pp[4] = p[4] + p[7];\r
+ pp[5] = p[5] + p[6];\r
+ pp[6] = (p[4] - p[7]) * cos1_8;\r
+ pp[7] = (p[5] - p[6]) * cos3_8;\r
+ pp[8] = p[8] + p[11];\r
+ pp[9] = p[9] + p[10];\r
+ pp[10] = (p[8] - p[11]) * cos1_8;\r
+ pp[11] = (p[9] - p[10]) * cos3_8;\r
+ pp[12] = p[12] + p[15];\r
+ pp[13] = p[13] + p[14];\r
+ pp[14] = (p[12] - p[15]) * cos1_8;\r
+ pp[15] = (p[13] - p[14]) * cos3_8;\r
+\r
+ p[0] = pp[0] + pp[1];\r
+ p[1] = (pp[0] - pp[1]) * cos1_4;\r
+ p[2] = pp[2] + pp[3];\r
+ p[3] = (pp[2] - pp[3]) * cos1_4;\r
+ p[4] = pp[4] + pp[5];\r
+ p[5] = (pp[4] - pp[5]) * cos1_4;\r
+ p[6] = pp[6] + pp[7];\r
+ p[7] = (pp[6] - pp[7]) * cos1_4;\r
+ p[8] = pp[8] + pp[9];\r
+ p[9] = (pp[8] - pp[9]) * cos1_4;\r
+ p[10] = pp[10] + pp[11];\r
+ p[11] = (pp[10] - pp[11]) * cos1_4;\r
+ p[12] = pp[12] + pp[13];\r
+ p[13] = (pp[12] - pp[13]) * cos1_4;\r
+ p[14] = pp[14] + pp[15];\r
+ p[15] = (pp[14] - pp[15]) * cos1_4;\r
+\r
+ // this is pretty insane coding\r
+ float tmp1;\r
+ new_v[36 - 17] = -(new_v[4] = (new_v[12] = p[7]) + p[5]) - p[6];\r
+ new_v[44 - 17] = -p[6] - p[7] - p[4];\r
+ new_v[6] = (new_v[10] = (new_v[14] = p[15]) + p[11]) + p[13];\r
+ new_v[34 - 17] = -(new_v[2] = p[15] + p[13] + p[9]) - p[14];\r
+ new_v[38 - 17] = (tmp1 = -p[14] - p[15] - p[10] - p[11]) - p[13];\r
+ new_v[46 - 17] = -p[14] - p[15] - p[12] - p[8];\r
+ new_v[42 - 17] = tmp1 - p[12];\r
+ new_v[48 - 17] = -p[0];\r
+ new_v[0] = p[1];\r
+ new_v[40 - 17] = -(new_v[8] = p[3]) - p[2];\r
+\r
+ p[0] = (x1[0] - x1[31]) * cos1_64;\r
+ p[1] = (x1[1] - x1[30]) * cos3_64;\r
+ p[2] = (x1[2] - x1[29]) * cos5_64;\r
+ p[3] = (x1[3] - x1[28]) * cos7_64;\r
+ p[4] = (x1[4] - x1[27]) * cos9_64;\r
+ p[5] = (x1[5] - x1[26]) * cos11_64;\r
+ p[6] = (x1[6] - x1[25]) * cos13_64;\r
+ p[7] = (x1[7] - x1[24]) * cos15_64;\r
+ p[8] = (x1[8] - x1[23]) * cos17_64;\r
+ p[9] = (x1[9] - x1[22]) * cos19_64;\r
+ p[10] = (x1[10] - x1[21]) * cos21_64;\r
+ p[11] = (x1[11] - x1[20]) * cos23_64;\r
+ p[12] = (x1[12] - x1[19]) * cos25_64;\r
+ p[13] = (x1[13] - x1[18]) * cos27_64;\r
+ p[14] = (x1[14] - x1[17]) * cos29_64;\r
+ p[15] = (x1[15] - x1[16]) * cos31_64;\r
+\r
+ pp[0] = p[0] + p[15];\r
+ pp[1] = p[1] + p[14];\r
+ pp[2] = p[2] + p[13];\r
+ pp[3] = p[3] + p[12];\r
+ pp[4] = p[4] + p[11];\r
+ pp[5] = p[5] + p[10];\r
+ pp[6] = p[6] + p[9];\r
+ pp[7] = p[7] + p[8];\r
+ pp[8] = (p[0] - p[15]) * cos1_32;\r
+ pp[9] = (p[1] - p[14]) * cos3_32;\r
+ pp[10] = (p[2] - p[13]) * cos5_32;\r
+ pp[11] = (p[3] - p[12]) * cos7_32;\r
+ pp[12] = (p[4] - p[11]) * cos9_32;\r
+ pp[13] = (p[5] - p[10]) * cos11_32;\r
+ pp[14] = (p[6] - p[9]) * cos13_32;\r
+ pp[15] = (p[7] - p[8]) * cos15_32;\r
+\r
+ p[0] = pp[0] + pp[7];\r
+ p[1] = pp[1] + pp[6];\r
+ p[2] = pp[2] + pp[5];\r
+ p[3] = pp[3] + pp[4];\r
+ p[4] = (pp[0] - pp[7]) * cos1_16;\r
+ p[5] = (pp[1] - pp[6]) * cos3_16;\r
+ p[6] = (pp[2] - pp[5]) * cos5_16;\r
+ p[7] = (pp[3] - pp[4]) * cos7_16;\r
+ p[8] = pp[8] + pp[15];\r
+ p[9] = pp[9] + pp[14];\r
+ p[10] = pp[10] + pp[13];\r
+ p[11] = pp[11] + pp[12];\r
+ p[12] = (pp[8] - pp[15]) * cos1_16;\r
+ p[13] = (pp[9] - pp[14]) * cos3_16;\r
+ p[14] = (pp[10] - pp[13]) * cos5_16;\r
+ p[15] = (pp[11] - pp[12]) * cos7_16;\r
+\r
+ pp[0] = p[0] + p[3];\r
+ pp[1] = p[1] + p[2];\r
+ pp[2] = (p[0] - p[3]) * cos1_8;\r
+ pp[3] = (p[1] - p[2]) * cos3_8;\r
+ pp[4] = p[4] + p[7];\r
+ pp[5] = p[5] + p[6];\r
+ pp[6] = (p[4] - p[7]) * cos1_8;\r
+ pp[7] = (p[5] - p[6]) * cos3_8;\r
+ pp[8] = p[8] + p[11];\r
+ pp[9] = p[9] + p[10];\r
+ pp[10] = (p[8] - p[11]) * cos1_8;\r
+ pp[11] = (p[9] - p[10]) * cos3_8;\r
+ pp[12] = p[12] + p[15];\r
+ pp[13] = p[13] + p[14];\r
+ pp[14] = (p[12] - p[15]) * cos1_8;\r
+ pp[15] = (p[13] - p[14]) * cos3_8;\r
+\r
+ p[0] = pp[0] + pp[1];\r
+ p[1] = (pp[0] - pp[1]) * cos1_4;\r
+ p[2] = pp[2] + pp[3];\r
+ p[3] = (pp[2] - pp[3]) * cos1_4;\r
+ p[4] = pp[4] + pp[5];\r
+ p[5] = (pp[4] - pp[5]) * cos1_4;\r
+ p[6] = pp[6] + pp[7];\r
+ p[7] = (pp[6] - pp[7]) * cos1_4;\r
+ p[8] = pp[8] + pp[9];\r
+ p[9] = (pp[8] - pp[9]) * cos1_4;\r
+ p[10] = pp[10] + pp[11];\r
+ p[11] = (pp[10] - pp[11]) * cos1_4;\r
+ p[12] = pp[12] + pp[13];\r
+ p[13] = (pp[12] - pp[13]) * cos1_4;\r
+ p[14] = pp[14] + pp[15];\r
+ p[15] = (pp[14] - pp[15]) * cos1_4;\r
+\r
+ // manually doing something that a compiler should handle sucks\r
+ // coding like this is hard to read\r
+ float tmp2;\r
+ new_v[5] = (new_v[11] = (new_v[13] = (new_v[15] = p[15]) + p[7]) + p[11]) + p[5] + p[13];\r
+ new_v[7] = (new_v[9] = p[15] + p[11] + p[3]) + p[13];\r
+ new_v[33 - 17] = -(new_v[1] = (tmp1 = p[13] + p[15] + p[9]) + p[1]) - p[14];\r
+ new_v[35 - 17] = -(new_v[3] = tmp1 + p[5] + p[7]) - p[6] - p[14];\r
+\r
+ new_v[39 - 17] = (tmp1 = -p[10] - p[11] - p[14] - p[15]) - p[13] - p[2] - p[3];\r
+ new_v[37 - 17] = tmp1 - p[13] - p[5] - p[6] - p[7];\r
+ new_v[41 - 17] = tmp1 - p[12] - p[2] - p[3];\r
+ new_v[43 - 17] = tmp1 - p[12] - (tmp2 = p[4] + p[6] + p[7]);\r
+ new_v[47 - 17] = (tmp1 = -p[8] - p[12] - p[14] - p[15]) - p[0];\r
+ new_v[45 - 17] = tmp1 - tmp2;\r
+\r
+ // insert V[0-15] (== new_v[0-15]) into actual v:\r
+ x1 = new_v;\r
+ // float[] x2 = actual_v + actual_write_pos;\r
+ float[] dest = actual_v;\r
+\r
+ dest[0 + actual_write_pos] = x1[0];\r
+ dest[16 + actual_write_pos] = x1[1];\r
+ dest[32 + actual_write_pos] = x1[2];\r
+ dest[48 + actual_write_pos] = x1[3];\r
+ dest[64 + actual_write_pos] = x1[4];\r
+ dest[80 + actual_write_pos] = x1[5];\r
+ dest[96 + actual_write_pos] = x1[6];\r
+ dest[112 + actual_write_pos] = x1[7];\r
+ dest[128 + actual_write_pos] = x1[8];\r
+ dest[144 + actual_write_pos] = x1[9];\r
+ dest[160 + actual_write_pos] = x1[10];\r
+ dest[176 + actual_write_pos] = x1[11];\r
+ dest[192 + actual_write_pos] = x1[12];\r
+ dest[208 + actual_write_pos] = x1[13];\r
+ dest[224 + actual_write_pos] = x1[14];\r
+ dest[240 + actual_write_pos] = x1[15];\r
+\r
+ // V[16] is always 0.0:\r
+ dest[256 + actual_write_pos] = 0.0f;\r
+\r
+ // insert V[17-31] (== -new_v[15-1]) into actual v:\r
+ dest[272 + actual_write_pos] = -x1[15];\r
+ dest[288 + actual_write_pos] = -x1[14];\r
+ dest[304 + actual_write_pos] = -x1[13];\r
+ dest[320 + actual_write_pos] = -x1[12];\r
+ dest[336 + actual_write_pos] = -x1[11];\r
+ dest[352 + actual_write_pos] = -x1[10];\r
+ dest[368 + actual_write_pos] = -x1[9];\r
+ dest[384 + actual_write_pos] = -x1[8];\r
+ dest[400 + actual_write_pos] = -x1[7];\r
+ dest[416 + actual_write_pos] = -x1[6];\r
+ dest[432 + actual_write_pos] = -x1[5];\r
+ dest[448 + actual_write_pos] = -x1[4];\r
+ dest[464 + actual_write_pos] = -x1[3];\r
+ dest[480 + actual_write_pos] = -x1[2];\r
+ dest[496 + actual_write_pos] = -x1[1];\r
+\r
+ // insert V[32] (== -new_v[0]) into other v:\r
+\r