mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-14 02:27:39 -04:00
from ffmpeg: replace FIR with finite differences.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15530 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
49ca667394
commit
6bcd830490
1 changed files with 15 additions and 15 deletions
|
@ -180,7 +180,8 @@ static int decode_residuals(FLACContext *s, int32_t* decoded, int pred_order)
|
||||||
static int decode_subframe_fixed(FLACContext *s, int32_t* decoded, int pred_order) ICODE_ATTR_FLAC;
|
static int decode_subframe_fixed(FLACContext *s, int32_t* decoded, int pred_order) ICODE_ATTR_FLAC;
|
||||||
static int decode_subframe_fixed(FLACContext *s, int32_t* decoded, int pred_order)
|
static int decode_subframe_fixed(FLACContext *s, int32_t* decoded, int pred_order)
|
||||||
{
|
{
|
||||||
int i;
|
const int blocksize = s->blocksize;
|
||||||
|
int a, b, c, d, i;
|
||||||
|
|
||||||
/* warm up samples */
|
/* warm up samples */
|
||||||
for (i = 0; i < pred_order; i++)
|
for (i = 0; i < pred_order; i++)
|
||||||
|
@ -191,31 +192,30 @@ static int decode_subframe_fixed(FLACContext *s, int32_t* decoded, int pred_orde
|
||||||
if (decode_residuals(s, decoded, pred_order) < 0)
|
if (decode_residuals(s, decoded, pred_order) < 0)
|
||||||
return -4;
|
return -4;
|
||||||
|
|
||||||
|
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)
|
switch(pred_order)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
for (i = pred_order; i < s->blocksize; i++)
|
for (i = pred_order; i < blocksize; i++)
|
||||||
decoded[i] += decoded[i-1];
|
decoded[i] = a += decoded[i];
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
for (i = pred_order; i < s->blocksize; i++)
|
for (i = pred_order; i < blocksize; i++)
|
||||||
decoded[i] += 2*decoded[i-1]
|
decoded[i] = a += b += decoded[i];
|
||||||
- decoded[i-2];
|
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
for (i = pred_order; i < s->blocksize; i++)
|
for (i = pred_order; i < blocksize; i++)
|
||||||
decoded[i] += 3*decoded[i-1]
|
decoded[i] = a += b += c += decoded[i];
|
||||||
- 3*decoded[i-2]
|
|
||||||
+ decoded[i-3];
|
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
for (i = pred_order; i < s->blocksize; i++)
|
for (i = pred_order; i < blocksize; i++)
|
||||||
decoded[i] += 4*decoded[i-1]
|
decoded[i] = a += b += c += d += decoded[i];
|
||||||
- 6*decoded[i-2]
|
|
||||||
+ 4*decoded[i-3]
|
|
||||||
- decoded[i-4];
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return -5;
|
return -5;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue