summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
authorJens Arnold <amiconn@rockbox.org>2006-03-26 17:41:36 +0000
committerJens Arnold <amiconn@rockbox.org>2006-03-26 17:41:36 +0000
commit8083e8c0de4d03985afe72f83bd9c76ce715ce41 (patch)
tree5ba6353ce6476919b0e1ab9434be8622d865d3c7 /firmware
parentd9ef5980df35fa4c7dc60fddf781cd71463c9746 (diff)
downloadrockbox-8083e8c0de4d03985afe72f83bd9c76ce715ce41.tar.gz
rockbox-8083e8c0de4d03985afe72f83bd9c76ce715ce41.zip
Fixed potential sample overflow in variable stereo width > 100% and karaoke mode, both hwcodec and swcodec.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@9263 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware')
-rw-r--r--firmware/sound.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/firmware/sound.c b/firmware/sound.c
index 88412c4094..70f7346599 100644
--- a/firmware/sound.c
+++ b/firmware/sound.c
@@ -504,12 +504,12 @@ static void set_channel_config(void)
504 } 504 }
505 else 505 else
506 { 506 {
507 fp_straight = - (1<<19); 507 /* straight = - (1 + width) / (2 * width) */
508 fp_cross = ((2 * fp_width / (((1<<19) + fp_width) >> 10)) 508 fp_straight = - ((((1<<19) + fp_width) / (fp_width >> 9)) << 9);
509 << 9) - (1<<19); 509 fp_cross = (1<<19) + fp_straight;
510 } 510 }
511 val_ll = val_rr = fp_straight & 0xFFFFF; 511 val_ll = val_rr = fp_straight & 0xfffff;
512 val_lr = val_rl = fp_cross & 0xFFFFF; 512 val_lr = val_rl = fp_cross & 0xfffff;
513 } 513 }
514 break; 514 break;
515 515
@@ -528,10 +528,10 @@ static void set_channel_config(void)
528 break; 528 break;
529 529
530 case SOUND_CHAN_KARAOKE: 530 case SOUND_CHAN_KARAOKE:
531 val_ll = 0x80001; 531 val_ll = 0xc0000;
532 val_lr = 0x7ffff; 532 val_lr = 0x40000;
533 val_rl = 0x7ffff; 533 val_rl = 0x40000;
534 val_rr = 0x80001; 534 val_rr = 0xc0000;
535 break; 535 break;
536 } 536 }
537 537