diff options
Diffstat (limited to 'apps/codecs')
-rw-r--r-- | apps/codecs/libffmpegFLAC/decoder.c | 30 |
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) | |||
180 | static int decode_subframe_fixed(FLACContext *s, int32_t* decoded, int pred_order) ICODE_ATTR_FLAC; | 180 | static int decode_subframe_fixed(FLACContext *s, int32_t* decoded, int pred_order) ICODE_ATTR_FLAC; |
181 | static int decode_subframe_fixed(FLACContext *s, int32_t* decoded, int pred_order) | 181 | static 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; |