| 305 | } |
| 306 | |
| 307 | static int decode_subframe_fixed(FLACContext *s, int channel, int pred_order) |
| 308 | { |
| 309 | const int blocksize = s->blocksize; |
| 310 | int32_t *decoded = s->decoded[channel]; |
| 311 | int av_uninit(a), av_uninit(b), av_uninit(c), av_uninit(d), i; |
| 312 | |
| 313 | /* warm up samples */ |
| 314 | for (i = 0; i < pred_order; i++) { |
| 315 | decoded[i] = get_sbits_long(&s->gb, s->curr_bps); |
| 316 | } |
| 317 | |
| 318 | if (decode_residuals(s, channel, pred_order) < 0) |
| 319 | return -1; |
| 320 | |
| 321 | if (pred_order > 0) |
| 322 | a = decoded[pred_order-1]; |
| 323 | if (pred_order > 1) |
| 324 | b = a - decoded[pred_order-2]; |
| 325 | if (pred_order > 2) |
| 326 | c = b - decoded[pred_order-2] + decoded[pred_order-3]; |
| 327 | if (pred_order > 3) |
| 328 | d = c - decoded[pred_order-2] + 2*decoded[pred_order-3] - decoded[pred_order-4]; |
| 329 | |
| 330 | switch (pred_order) { |
| 331 | case 0: |
| 332 | break; |
| 333 | case 1: |
| 334 | for (i = pred_order; i < blocksize; i++) |
| 335 | decoded[i] = a += decoded[i]; |
| 336 | break; |
| 337 | case 2: |
| 338 | for (i = pred_order; i < blocksize; i++) |
| 339 | decoded[i] = a += b += decoded[i]; |
| 340 | break; |
| 341 | case 3: |
| 342 | for (i = pred_order; i < blocksize; i++) |
| 343 | decoded[i] = a += b += c += decoded[i]; |
| 344 | break; |
| 345 | case 4: |
| 346 | for (i = pred_order; i < blocksize; i++) |
| 347 | decoded[i] = a += b += c += d += decoded[i]; |
| 348 | break; |
| 349 | default: |
| 350 | av_log(s->avctx, AV_LOG_ERROR, "illegal pred order %d\n", pred_order); |
| 351 | return -1; |
| 352 | } |
| 353 | |
| 354 | return 0; |
| 355 | } |
| 356 | |
| 357 | static int decode_subframe_lpc(FLACContext *s, int channel, int pred_order) |
| 358 | { |
no test coverage detected