diff options
author | Michael Sevakis <jethead71@rockbox.org> | 2012-05-02 20:53:07 -0400 |
---|---|---|
committer | Michael Sevakis <jethead71@rockbox.org> | 2012-05-02 20:53:07 -0400 |
commit | e189b33ff4cc530cb6e59a17b260675d7341e551 (patch) | |
tree | 948b635696cbea2eac432303fa2821cfbff13670 /apps | |
parent | c0208f0f64c68a97c67e42efc1b39df7c75bf7da (diff) | |
download | rockbox-e189b33ff4cc530cb6e59a17b260675d7341e551.tar.gz rockbox-e189b33ff4cc530cb6e59a17b260675d7341e551.zip |
Clean up peak calculating code.
Mixer needn't keep peak data around that will never be used. Just
pass pcm_peaks structure to it instead of allocating for every
channel. Plugin API becomes incompatible.
vu_meter digital mode was still using global peak calculation;
switch it to playback channel like the rest.
Remove some accumulated soil peaks inside pcm.c and make it more
generic.
Change-Id: Ib4d268d80b6a9d09915eea1c91eab483c1a2c009
Diffstat (limited to 'apps')
-rw-r--r-- | apps/plugin.h | 6 | ||||
-rw-r--r-- | apps/plugins/oscilloscope.c | 4 | ||||
-rw-r--r-- | apps/plugins/starfield.c | 6 | ||||
-rw-r--r-- | apps/plugins/vu_meter.c | 13 | ||||
-rw-r--r-- | apps/recorder/peakmeter.c | 7 |
5 files changed, 25 insertions, 11 deletions
diff --git a/apps/plugin.h b/apps/plugin.h index 588a01262e..4091cecc16 100644 --- a/apps/plugin.h +++ b/apps/plugin.h | |||
@@ -154,12 +154,12 @@ void* plugin_get_buffer(size_t *buffer_size); | |||
154 | #define PLUGIN_MAGIC 0x526F634B /* RocK */ | 154 | #define PLUGIN_MAGIC 0x526F634B /* RocK */ |
155 | 155 | ||
156 | /* increase this every time the api struct changes */ | 156 | /* increase this every time the api struct changes */ |
157 | #define PLUGIN_API_VERSION 219 | 157 | #define PLUGIN_API_VERSION 220 |
158 | 158 | ||
159 | /* update this to latest version if a change to the api struct breaks | 159 | /* update this to latest version if a change to the api struct breaks |
160 | backwards compatibility (and please take the opportunity to sort in any | 160 | backwards compatibility (and please take the opportunity to sort in any |
161 | new function which are "waiting" at the end of the function table) */ | 161 | new function which are "waiting" at the end of the function table) */ |
162 | #define PLUGIN_MIN_API_VERSION 219 | 162 | #define PLUGIN_MIN_API_VERSION 220 |
163 | 163 | ||
164 | /* plugin return codes */ | 164 | /* plugin return codes */ |
165 | /* internal returns start at 0x100 to make exit(1..255) work */ | 165 | /* internal returns start at 0x100 to make exit(1..255) work */ |
@@ -697,7 +697,7 @@ struct plugin_api { | |||
697 | const void * (*mixer_channel_get_buffer)(enum pcm_mixer_channel channel, | 697 | const void * (*mixer_channel_get_buffer)(enum pcm_mixer_channel channel, |
698 | int *count); | 698 | int *count); |
699 | void (*mixer_channel_calculate_peaks)(enum pcm_mixer_channel channel, | 699 | void (*mixer_channel_calculate_peaks)(enum pcm_mixer_channel channel, |
700 | int *left, int *right); | 700 | struct pcm_peaks *peaks); |
701 | void (*mixer_channel_play_data)(enum pcm_mixer_channel channel, | 701 | void (*mixer_channel_play_data)(enum pcm_mixer_channel channel, |
702 | pcm_play_callback_type get_more, | 702 | pcm_play_callback_type get_more, |
703 | const void *start, size_t size); | 703 | const void *start, size_t size); |
diff --git a/apps/plugins/oscilloscope.c b/apps/plugins/oscilloscope.c index a4be0fbd8e..0bf951f069 100644 --- a/apps/plugins/oscilloscope.c +++ b/apps/plugins/oscilloscope.c | |||
@@ -881,8 +881,10 @@ enum plugin_status plugin_start(const void* parameter) | |||
881 | left = rb->mas_codec_readreg(0xC); | 881 | left = rb->mas_codec_readreg(0xC); |
882 | right = rb->mas_codec_readreg(0xD); | 882 | right = rb->mas_codec_readreg(0xD); |
883 | #elif (CONFIG_CODEC == SWCODEC) | 883 | #elif (CONFIG_CODEC == SWCODEC) |
884 | static struct pcm_peaks peaks; | ||
884 | rb->mixer_channel_calculate_peaks(PCM_MIXER_CHAN_PLAYBACK, | 885 | rb->mixer_channel_calculate_peaks(PCM_MIXER_CHAN_PLAYBACK, |
885 | &left, &right); | 886 | &peaks); |
887 | left = peaks.left; right = peaks.right; | ||
886 | #endif | 888 | #endif |
887 | if (osc.orientation == OSC_HORIZ) | 889 | if (osc.orientation == OSC_HORIZ) |
888 | anim_horizontal(left, right); | 890 | anim_horizontal(left, right); |
diff --git a/apps/plugins/starfield.c b/apps/plugins/starfield.c index 811e9c61ae..30b01b2645 100644 --- a/apps/plugins/starfield.c +++ b/apps/plugins/starfield.c | |||
@@ -228,9 +228,11 @@ static int plugin_main(void) | |||
228 | 228 | ||
229 | /* Get the peaks. ( Borrowed from vu_meter ) */ | 229 | /* Get the peaks. ( Borrowed from vu_meter ) */ |
230 | #if (CONFIG_CODEC == SWCODEC) | 230 | #if (CONFIG_CODEC == SWCODEC) |
231 | int left_peak, right_peak; | 231 | static struct pcm_peaks peaks; |
232 | rb->mixer_channel_calculate_peaks(PCM_MIXER_CHAN_PLAYBACK, | 232 | rb->mixer_channel_calculate_peaks(PCM_MIXER_CHAN_PLAYBACK, |
233 | &left_peak, &right_peak); | 233 | &peaks); |
234 | #define left_peak peaks.left | ||
235 | #define right_peak peaks.right | ||
234 | #else | 236 | #else |
235 | int left_peak = rb->mas_codec_readreg(0xC); | 237 | int left_peak = rb->mas_codec_readreg(0xC); |
236 | int right_peak = rb->mas_codec_readreg(0xD); | 238 | int right_peak = rb->mas_codec_readreg(0xD); |
diff --git a/apps/plugins/vu_meter.c b/apps/plugins/vu_meter.c index 51f2d19f40..ec884442d4 100644 --- a/apps/plugins/vu_meter.c +++ b/apps/plugins/vu_meter.c | |||
@@ -704,9 +704,11 @@ static void analog_meter(void) { | |||
704 | int left_peak = rb->mas_codec_readreg(0xC); | 704 | int left_peak = rb->mas_codec_readreg(0xC); |
705 | int right_peak = rb->mas_codec_readreg(0xD); | 705 | int right_peak = rb->mas_codec_readreg(0xD); |
706 | #elif (CONFIG_CODEC == SWCODEC) | 706 | #elif (CONFIG_CODEC == SWCODEC) |
707 | int left_peak, right_peak; | 707 | static struct pcm_peaks peaks; |
708 | rb->mixer_channel_calculate_peaks(PCM_MIXER_CHAN_PLAYBACK, | 708 | rb->mixer_channel_calculate_peaks(PCM_MIXER_CHAN_PLAYBACK, |
709 | &left_peak, &right_peak); | 709 | &peaks); |
710 | #define left_peak peaks.left | ||
711 | #define right_peak peaks.right | ||
710 | #endif | 712 | #endif |
711 | 713 | ||
712 | if(vumeter_settings.analog_use_db_scale) { | 714 | if(vumeter_settings.analog_use_db_scale) { |
@@ -762,8 +764,11 @@ static void digital_meter(void) { | |||
762 | int left_peak = rb->mas_codec_readreg(0xC); | 764 | int left_peak = rb->mas_codec_readreg(0xC); |
763 | int right_peak = rb->mas_codec_readreg(0xD); | 765 | int right_peak = rb->mas_codec_readreg(0xD); |
764 | #elif (CONFIG_CODEC == SWCODEC) | 766 | #elif (CONFIG_CODEC == SWCODEC) |
765 | int left_peak, right_peak; | 767 | static struct pcm_peaks peaks; |
766 | rb->pcm_calculate_peaks(&left_peak, &right_peak); | 768 | rb->mixer_channel_calculate_peaks(PCM_MIXER_CHAN_PLAYBACK, |
769 | &peaks); | ||
770 | #define left_peak peaks.left | ||
771 | #define right_peak peaks.right | ||
767 | #endif | 772 | #endif |
768 | 773 | ||
769 | if(vumeter_settings.digital_use_db_scale) { | 774 | if(vumeter_settings.digital_use_db_scale) { |
diff --git a/apps/recorder/peakmeter.c b/apps/recorder/peakmeter.c index 9f0db3330a..48a695b933 100644 --- a/apps/recorder/peakmeter.c +++ b/apps/recorder/peakmeter.c | |||
@@ -619,8 +619,13 @@ void peak_meter_peek(void) | |||
619 | /* read current values */ | 619 | /* read current values */ |
620 | #if CONFIG_CODEC == SWCODEC | 620 | #if CONFIG_CODEC == SWCODEC |
621 | if (pm_playback) | 621 | if (pm_playback) |
622 | { | ||
623 | static struct pcm_peaks chan_peaks; /* *MUST* be static */ | ||
622 | mixer_channel_calculate_peaks(PCM_MIXER_CHAN_PLAYBACK, | 624 | mixer_channel_calculate_peaks(PCM_MIXER_CHAN_PLAYBACK, |
623 | &pm_cur_left, &pm_cur_right); | 625 | &chan_peaks); |
626 | pm_cur_left = chan_peaks.left; | ||
627 | pm_cur_right = chan_peaks.right; | ||
628 | } | ||
624 | #ifdef HAVE_RECORDING | 629 | #ifdef HAVE_RECORDING |
625 | else | 630 | else |
626 | pcm_calculate_rec_peaks(&pm_cur_left, &pm_cur_right); | 631 | pcm_calculate_rec_peaks(&pm_cur_left, &pm_cur_right); |