| 787 | } |
| 788 | |
| 789 | static void lfe_interpolation_fir(DCAContext *s, int decimation_select, |
| 790 | int num_deci_sample, float *samples_in, |
| 791 | float *samples_out, float scale, |
| 792 | float bias) |
| 793 | { |
| 794 | /* samples_in: An array holding decimated samples. |
| 795 | * Samples in current subframe starts from samples_in[0], |
| 796 | * while samples_in[-1], samples_in[-2], ..., stores samples |
| 797 | * from last subframe as history. |
| 798 | * |
| 799 | * samples_out: An array holding interpolated samples |
| 800 | */ |
| 801 | |
| 802 | int decifactor; |
| 803 | const float *prCoeff; |
| 804 | int deciindex; |
| 805 | |
| 806 | /* Select decimation filter */ |
| 807 | if (decimation_select == 1) { |
| 808 | decifactor = 64; |
| 809 | prCoeff = lfe_fir_128; |
| 810 | } else { |
| 811 | decifactor = 32; |
| 812 | prCoeff = lfe_fir_64; |
| 813 | } |
| 814 | /* Interpolation */ |
| 815 | for (deciindex = 0; deciindex < num_deci_sample; deciindex++) { |
| 816 | s->dcadsp.lfe_fir(samples_out, samples_in, prCoeff, decifactor, |
| 817 | scale, bias); |
| 818 | samples_in++; |
| 819 | samples_out += 2 * decifactor; |
| 820 | } |
| 821 | } |
| 822 | |
| 823 | /* downmixing routines */ |
| 824 | #define MIX_REAR1(samples, si1, rs, coef) \ |