summaryrefslogtreecommitdiff
path: root/apps/codecs/libffmpegFLAC
diff options
context:
space:
mode:
Diffstat (limited to 'apps/codecs/libffmpegFLAC')
-rw-r--r--apps/codecs/libffmpegFLAC/decoder.c30
1 files changed, 15 insertions, 15 deletions
diff --git a/apps/codecs/libffmpegFLAC/decoder.c b/apps/codecs/libffmpegFLAC/decoder.c
index 7bbd6f532d..aa3ce30b62 100644
--- a/apps/codecs/libffmpegFLAC/decoder.c
+++ b/apps/codecs/libffmpegFLAC/decoder.c
@@ -180,7 +180,8 @@ static int decode_residuals(FLACContext *s, int32_t* decoded, int pred_order)
180static int decode_subframe_fixed(FLACContext *s, int32_t* decoded, int pred_order) ICODE_ATTR_FLAC; 180static int decode_subframe_fixed(FLACContext *s, int32_t* decoded, int pred_order) ICODE_ATTR_FLAC;
181static int decode_subframe_fixed(FLACContext *s, int32_t* decoded, int pred_order) 181static int decode_subframe_fixed(FLACContext *s, int32_t* decoded, int pred_order)
182{ 182{
183 int i; 183 const int blocksize = s->blocksize;
184 int a, b, c, d, i;
184 185
185 /* warm up samples */ 186 /* warm up samples */
186 for (i = 0; i < pred_order; i++) 187 for (i = 0; i < pred_order; i++)
@@ -191,31 +192,30 @@ static int decode_subframe_fixed(FLACContext *s, int32_t* decoded, int pred_orde
191 if (decode_residuals(s, decoded, pred_order) < 0) 192 if (decode_residuals(s, decoded, pred_order) < 0)
192 return -4; 193 return -4;
193 194
195 a = decoded[pred_order-1];
196 b = a - decoded[pred_order-2];
197 c = b - decoded[pred_order-2] + decoded[pred_order-3];
198 d = c - decoded[pred_order-2] + 2*decoded[pred_order-3] - decoded[pred_order-4];
199
194 switch(pred_order) 200 switch(pred_order)
195 { 201 {
196 case 0: 202 case 0:
197 break; 203 break;
198 case 1: 204 case 1:
199 for (i = pred_order; i < s->blocksize; i++) 205 for (i = pred_order; i < blocksize; i++)
200 decoded[i] += decoded[i-1]; 206 decoded[i] = a += decoded[i];
201 break; 207 break;
202 case 2: 208 case 2:
203 for (i = pred_order; i < s->blocksize; i++) 209 for (i = pred_order; i < blocksize; i++)
204 decoded[i] += 2*decoded[i-1] 210 decoded[i] = a += b += decoded[i];
205 - decoded[i-2];
206 break; 211 break;
207 case 3: 212 case 3:
208 for (i = pred_order; i < s->blocksize; i++) 213 for (i = pred_order; i < blocksize; i++)
209 decoded[i] += 3*decoded[i-1] 214 decoded[i] = a += b += c += decoded[i];
210 - 3*decoded[i-2]
211 + decoded[i-3];
212 break; 215 break;
213 case 4: 216 case 4:
214 for (i = pred_order; i < s->blocksize; i++) 217 for (i = pred_order; i < blocksize; i++)
215 decoded[i] += 4*decoded[i-1] 218 decoded[i] = a += b += c += d += decoded[i];
216 - 6*decoded[i-2]
217 + 4*decoded[i-3]
218 - decoded[i-4];
219 break; 219 break;
220 default: 220 default:
221 return -5; 221 return -5;