diff options
author | Linus Nielsen Feltzing <linus@haxx.se> | 2002-06-28 11:48:53 +0000 |
---|---|---|
committer | Linus Nielsen Feltzing <linus@haxx.se> | 2002-06-28 11:48:53 +0000 |
commit | 667fb7c6e94060294dd1a9f95934b841f7df9f71 (patch) | |
tree | f261846271d84633598e03afe8f68c5b73b396af /firmware/mpeg.c | |
parent | b983d1b4a1126356462863364c9cc8d3f9471a03 (diff) | |
download | rockbox-667fb7c6e94060294dd1a9f95934b841f7df9f71.tar.gz rockbox-667fb7c6e94060294dd1a9f95934b841f7df9f71.zip |
First step towards a better sound setting API
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@1243 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/mpeg.c')
-rw-r--r-- | firmware/mpeg.c | 115 |
1 files changed, 89 insertions, 26 deletions
diff --git a/firmware/mpeg.c b/firmware/mpeg.c index ab99fa744c..a421e5da82 100644 --- a/firmware/mpeg.c +++ b/firmware/mpeg.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include "thread.h" | 27 | #include "thread.h" |
28 | #include "panic.h" | 28 | #include "panic.h" |
29 | #include "file.h" | 29 | #include "file.h" |
30 | #include "mpeg.h" | ||
30 | #include "id3.h" | 31 | #include "id3.h" |
31 | 32 | ||
32 | #define MPEG_STACK_SIZE 0x2000 | 33 | #define MPEG_STACK_SIZE 0x2000 |
@@ -44,6 +45,42 @@ | |||
44 | extern char* peek_next_track(int type); | 45 | extern char* peek_next_track(int type); |
45 | extern char* peek_prev_track(int type); | 46 | extern char* peek_prev_track(int type); |
46 | 47 | ||
48 | static char *units[] = | ||
49 | { | ||
50 | "%", /* Volume */ | ||
51 | "%", /* Bass */ | ||
52 | "%" /* Treble */ | ||
53 | }; | ||
54 | |||
55 | static int minval[] = | ||
56 | { | ||
57 | 0, /* Volume */ | ||
58 | 0, /* Bass */ | ||
59 | 0 /* Treble */ | ||
60 | }; | ||
61 | |||
62 | static int maxval[] = | ||
63 | { | ||
64 | 50, /* Volume */ | ||
65 | 50, /* Bass */ | ||
66 | 50 /* Treble */ | ||
67 | }; | ||
68 | |||
69 | char *mpeg_sound_unit(int setting) | ||
70 | { | ||
71 | return units[setting]; | ||
72 | } | ||
73 | |||
74 | int mpeg_sound_min(int setting) | ||
75 | { | ||
76 | return minval[setting]; | ||
77 | } | ||
78 | |||
79 | int mpeg_sound_max(int setting) | ||
80 | { | ||
81 | return maxval[setting]; | ||
82 | } | ||
83 | |||
47 | #ifndef ARCHOS_RECORDER | 84 | #ifndef ARCHOS_RECORDER |
48 | static unsigned int bass_table[] = | 85 | static unsigned int bass_table[] = |
49 | { | 86 | { |
@@ -638,43 +675,69 @@ void mpeg_prev(void) | |||
638 | queue_post(&mpeg_queue, MPEG_PREV, NULL); | 675 | queue_post(&mpeg_queue, MPEG_PREV, NULL); |
639 | } | 676 | } |
640 | 677 | ||
641 | void mpeg_volume(int percent) | 678 | void mpeg_sound_set(int setting, int value) |
642 | { | 679 | { |
643 | int volume; | 680 | int tmp; |
644 | 681 | ||
682 | switch(setting) | ||
683 | { | ||
684 | case SOUND_VOLUME: | ||
685 | value *= 2; /* Convert to percent */ | ||
686 | |||
645 | #ifdef ARCHOS_RECORDER | 687 | #ifdef ARCHOS_RECORDER |
646 | volume = 0x7f00 * percent / 100; | 688 | tmp = 0x7f00 * value / 100; |
647 | mas_codec_writereg(0x10, volume & 0xff00); | 689 | mas_codec_writereg(0x10, tmp & 0xff00); |
648 | #else | 690 | #else |
649 | volume = 0x38 * percent / 100; | 691 | tmp = 0x38 * value / 100; |
650 | dac_volume(volume, volume, false); | 692 | dac_volume(tmp, tmp, false); |
651 | #endif | 693 | #endif |
652 | } | 694 | break; |
653 | 695 | ||
654 | void mpeg_bass(int percent) | 696 | case SOUND_BASS: |
655 | { | 697 | value *= 2; /* Convert to percent */ |
656 | int bass; | 698 | |
657 | |||
658 | #ifdef ARCHOS_RECORDER | 699 | #ifdef ARCHOS_RECORDER |
659 | bass = 0x6000 * percent / 100; | 700 | tmp = 0x6000 * value / 100; |
660 | mas_codec_writereg(0x14, bass & 0xff00); | 701 | mas_codec_writereg(0x14, tmp & 0xff00); |
661 | #else | 702 | #else |
662 | bass = 15 * percent / 100; | 703 | tmp = 15 * value / 100; |
663 | mas_writereg(MAS_REG_KBASS, bass_table[bass]); | 704 | mas_writereg(MAS_REG_KBASS, bass_table[tmp]); |
664 | #endif | 705 | #endif |
665 | } | 706 | break; |
666 | 707 | ||
667 | void mpeg_treble(int percent) | 708 | case SOUND_TREBLE: |
668 | { | 709 | value *= 2; /* Convert to percent */ |
669 | int treble; | ||
670 | 710 | ||
671 | #ifdef ARCHOS_RECORDER | 711 | #ifdef ARCHOS_RECORDER |
672 | treble = 0x6000 * percent / 100; | 712 | tmp = 0x6000 * value / 100; |
673 | mas_codec_writereg(0x15, treble & 0xff00); | 713 | mas_codec_writereg(0x15, tmp & 0xff00); |
674 | #else | 714 | #else |
675 | treble = 15 * percent / 100; | 715 | tmp = 15 * value / 100; |
676 | mas_writereg(MAS_REG_KTREBLE, treble_table[treble]); | 716 | mas_writereg(MAS_REG_KTREBLE, treble_table[tmp]); |
677 | #endif | 717 | #endif |
718 | break; | ||
719 | } | ||
720 | } | ||
721 | |||
722 | int mpeg_val2phys(int setting, int value) | ||
723 | { | ||
724 | int result = 0; | ||
725 | |||
726 | switch(setting) | ||
727 | { | ||
728 | case SOUND_VOLUME: | ||
729 | result = value * 2; | ||
730 | break; | ||
731 | |||
732 | case SOUND_BASS: | ||
733 | result = value * 2; | ||
734 | break; | ||
735 | |||
736 | case SOUND_TREBLE: | ||
737 | result = value * 2; | ||
738 | break; | ||
739 | } | ||
740 | return result; | ||
678 | } | 741 | } |
679 | 742 | ||
680 | void mpeg_init(int volume, int bass, int treble) | 743 | void mpeg_init(int volume, int bass, int treble) |
@@ -742,7 +805,7 @@ void mpeg_init(int volume, int bass, int treble) | |||
742 | dac_config(0x04); /* DAC on, all else off */ | 805 | dac_config(0x04); /* DAC on, all else off */ |
743 | #endif | 806 | #endif |
744 | 807 | ||
745 | mpeg_bass(bass); | 808 | mpeg_sound_set(SOUND_BASS, bass); |
746 | mpeg_treble(treble); | 809 | mpeg_sound_set(SOUND_TREBLE, treble); |
747 | mpeg_volume(volume); | 810 | mpeg_sound_set(SOUND_VOLUME, volume); |
748 | } | 811 | } |