- return 0;
-}
-
-static int decode_subframe_fixed(FLACContext *s, int channel, int pred_order)
-{
- const int blocksize = s->blocksize;
- int32_t *decoded = s->decoded[channel];
- int a, b, c, d, i;
-
-// av_log(s->avctx, AV_LOG_DEBUG, " SUBFRAME FIXED\n");
-
- /* warm up samples */
-// av_log(s->avctx, AV_LOG_DEBUG, " warm up samples: %d\n", pred_order);
-
- for (i = 0; i < pred_order; i++)
- {
- decoded[i] = get_sbits(&s->gb, s->curr_bps);
-// av_log(s->avctx, AV_LOG_DEBUG, " %d: %d\n", i, s->decoded[channel][i]);
- }
-
- if (decode_residuals(s, channel, pred_order) < 0)
- return -1;
-
- a = decoded[pred_order-1];
- b = a - decoded[pred_order-2];
- c = b - decoded[pred_order-2] + decoded[pred_order-3];
- d = c - decoded[pred_order-2] + 2*decoded[pred_order-3] - decoded[pred_order-4];
-
- switch(pred_order)
- {
- case 0:
- break;
- case 1:
- for (i = pred_order; i < blocksize; i++)
- decoded[i] = a += decoded[i];
- break;
- case 2:
- for (i = pred_order; i < blocksize; i++)
- decoded[i] = a += b += decoded[i];
- break;
- case 3:
- for (i = pred_order; i < blocksize; i++)
- decoded[i] = a += b += c += decoded[i];
- break;
- case 4:
- for (i = pred_order; i < blocksize; i++)
- decoded[i] = a += b += c += d += decoded[i];
- break;
- default:
- av_log(s->avctx, AV_LOG_ERROR, "illegal pred order %d\n", pred_order);
- return -1;
- }
-
- return 0;
-}
-
-static int decode_subframe_lpc(FLACContext *s, int channel, int pred_order)
-{
- int i, j;
- int coeff_prec, qlevel;
- int coeffs[pred_order];
- int32_t *decoded = s->decoded[channel];
-
-// av_log(s->avctx, AV_LOG_DEBUG, " SUBFRAME LPC\n");
-
- /* warm up samples */
-// av_log(s->avctx, AV_LOG_DEBUG, " warm up samples: %d\n", pred_order);
-
- for (i = 0; i < pred_order; i++)
- {
- decoded[i] = get_sbits(&s->gb, s->curr_bps);
-// av_log(s->avctx, AV_LOG_DEBUG, " %d: %d\n", i, decoded[i]);
- }
-
- coeff_prec = get_bits(&s->gb, 4) + 1;
- if (coeff_prec == 16)
- {
- av_log(s->avctx, AV_LOG_DEBUG, "invalid coeff precision\n");
- return -1;
- }
-// av_log(s->avctx, AV_LOG_DEBUG, " qlp coeff prec: %d\n", coeff_prec);
- qlevel = get_sbits(&s->gb, 5);
-// av_log(s->avctx, AV_LOG_DEBUG, " quant level: %d\n", qlevel);
- if(qlevel < 0){
- av_log(s->avctx, AV_LOG_DEBUG, "qlevel %d not supported, maybe buggy stream\n", qlevel);
- return -1;
- }
-
- for (i = 0; i < pred_order; i++)
- {
- coeffs[i] = get_sbits(&s->gb, coeff_prec);
-// av_log(s->avctx, AV_LOG_DEBUG, " %d: %d\n", i, coeffs[i]);
- }
-
- if (decode_residuals(s, channel, pred_order) < 0)
- return -1;
-
- if (s->bps > 16) {
- int64_t sum;
- for (i = pred_order; i < s->blocksize; i++)
- {
- sum = 0;
- for (j = 0; j < pred_order; j++)
- sum += (int64_t)coeffs[j] * decoded[i-j-1];
- decoded[i] += sum >> qlevel;
- }