+static void decode_block_data(int *dest, const unsigned char *src, int predict_nr, int shift_factor)
+{
+ int nSample;
+ int fa, s_1, s_2, d, s;
+
+ s_1 = dest[27];
+ s_2 = dest[26];
+
+ for (nSample = 0; nSample < 28; src++)
+ {
+ d = (int)*src;
+ s = (int)(signed short)((d & 0x0f) << 12);
+
+ fa = s >> shift_factor;
+ fa += ((s_1 * f[predict_nr][0])>>6) + ((s_2 * f[predict_nr][1])>>6);
+ s_2=s_1;s_1=fa;
+
+ dest[nSample++] = fa;
+
+ s = (int)(signed short)((d & 0xf0) << 8);
+ fa = s >> shift_factor;
+ fa += ((s_1 * f[predict_nr][0])>>6) + ((s_2 * f[predict_nr][1])>>6);
+ s_2=s_1;s_1=fa;
+
+ dest[nSample++] = fa;
+ }
+}
+