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.zip rockbox-e189b33ff4cc530cb6e59a17b260675d7341e551.tar.gz rockbox-e189b33ff4cc530cb6e59a17b260675d7341e551.tar.bz2 rockbox-e189b33ff4cc530cb6e59a17b260675d7341e551.tar.xz | |
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 588a012..4091cec 100644 --- a/apps/plugin.h +++ b/apps/plugin.h @@ -154,12 +154,12 @@ void* plugin_get_buffer(size_t *buffer_size); #define PLUGIN_MAGIC 0x526F634B /* RocK */ /* increase this every time the api struct changes */ -#define PLUGIN_API_VERSION 219 +#define PLUGIN_API_VERSION 220 /* update this to latest version if a change to the api struct breaks backwards compatibility (and please take the opportunity to sort in any new function which are "waiting" at the end of the function table) */ -#define PLUGIN_MIN_API_VERSION 219 +#define PLUGIN_MIN_API_VERSION 220 /* plugin return codes */ /* internal returns start at 0x100 to make exit(1..255) work */ @@ -697,7 +697,7 @@ struct plugin_api { const void * (*mixer_channel_get_buffer)(enum pcm_mixer_channel channel, int *count); void (*mixer_channel_calculate_peaks)(enum pcm_mixer_channel channel, - int *left, int *right); + struct pcm_peaks *peaks); void (*mixer_channel_play_data)(enum pcm_mixer_channel channel, pcm_play_callback_type get_more, const void *start, size_t size); diff --git a/apps/plugins/oscilloscope.c b/apps/plugins/oscilloscope.c index a4be0fb..0bf951f 100644 --- a/apps/plugins/oscilloscope.c +++ b/apps/plugins/oscilloscope.c @@ -881,8 +881,10 @@ enum plugin_status plugin_start(const void* parameter) left = rb->mas_codec_readreg(0xC); right = rb->mas_codec_readreg(0xD); #elif (CONFIG_CODEC == SWCODEC) + static struct pcm_peaks peaks; rb->mixer_channel_calculate_peaks(PCM_MIXER_CHAN_PLAYBACK, - &left, &right); + &peaks); + left = peaks.left; right = peaks.right; #endif if (osc.orientation == OSC_HORIZ) anim_horizontal(left, right); diff --git a/apps/plugins/starfield.c b/apps/plugins/starfield.c index 811e9c6..30b01b2 100644 --- a/apps/plugins/starfield.c +++ b/apps/plugins/starfield.c @@ -228,9 +228,11 @@ static int plugin_main(void) /* Get the peaks. ( Borrowed from vu_meter ) */ #if (CONFIG_CODEC == SWCODEC) - int left_peak, right_peak; + static struct pcm_peaks peaks; rb->mixer_channel_calculate_peaks(PCM_MIXER_CHAN_PLAYBACK, - &left_peak, &right_peak); + &peaks); + #define left_peak peaks.left + #define right_peak peaks.right #else int left_peak = rb->mas_codec_readreg(0xC); int right_peak = rb->mas_codec_readreg(0xD); diff --git a/apps/plugins/vu_meter.c b/apps/plugins/vu_meter.c index 51f2d19..ec88444 100644 --- a/apps/plugins/vu_meter.c +++ b/apps/plugins/vu_meter.c @@ -704,9 +704,11 @@ static void analog_meter(void) { int left_peak = rb->mas_codec_readreg(0xC); int right_peak = rb->mas_codec_readreg(0xD); #elif (CONFIG_CODEC == SWCODEC) - int left_peak, right_peak; + static struct pcm_peaks peaks; rb->mixer_channel_calculate_peaks(PCM_MIXER_CHAN_PLAYBACK, - &left_peak, &right_peak); + &peaks); + #define left_peak peaks.left + #define right_peak peaks.right #endif if(vumeter_settings.analog_use_db_scale) { @@ -762,8 +764,11 @@ static void digital_meter(void) { int left_peak = rb->mas_codec_readreg(0xC); int right_peak = rb->mas_codec_readreg(0xD); #elif (CONFIG_CODEC == SWCODEC) - int left_peak, right_peak; - rb->pcm_calculate_peaks(&left_peak, &right_peak); + static struct pcm_peaks peaks; + rb->mixer_channel_calculate_peaks(PCM_MIXER_CHAN_PLAYBACK, + &peaks); + #define left_peak peaks.left + #define right_peak peaks.right #endif if(vumeter_settings.digital_use_db_scale) { diff --git a/apps/recorder/peakmeter.c b/apps/recorder/peakmeter.c index 9f0db33..48a695b 100644 --- a/apps/recorder/peakmeter.c +++ b/apps/recorder/peakmeter.c @@ -619,8 +619,13 @@ void peak_meter_peek(void) /* read current values */ #if CONFIG_CODEC == SWCODEC if (pm_playback) + { + static struct pcm_peaks chan_peaks; /* *MUST* be static */ mixer_channel_calculate_peaks(PCM_MIXER_CHAN_PLAYBACK, - &pm_cur_left, &pm_cur_right); + &chan_peaks); + pm_cur_left = chan_peaks.left; + pm_cur_right = chan_peaks.right; + } #ifdef HAVE_RECORDING else pcm_calculate_rec_peaks(&pm_cur_left, &pm_cur_right); |