summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Everton <dan@iocaine.org>2006-03-05 19:34:54 +0000
committerDan Everton <dan@iocaine.org>2006-03-05 19:34:54 +0000
commitd108849812280eb69b5a00bd1f79193237b2e51a (patch)
treed6210424ace3a29aca8a75f27a87b5df0be6fcff
parent780e8dd0ef9b4325b35c0b680447488455d4e44f (diff)
downloadrockbox-d108849812280eb69b5a00bd1f79193237b2e51a.zip
rockbox-d108849812280eb69b5a00bd1f79193237b2e51a.tar.gz
rockbox-d108849812280eb69b5a00bd1f79193237b2e51a.tar.bz2
rockbox-d108849812280eb69b5a00bd1f79193237b2e51a.tar.xz
Get VU Meter plugin working on SWCODEC targets. Still needs to be scaled to fit better on larger displays. Also requires bumping the plugin API versions.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8915 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/plugin.c8
-rw-r--r--apps/plugin.h22
-rw-r--r--apps/plugins/vu_meter.c108
3 files changed, 108 insertions, 30 deletions
diff --git a/apps/plugin.c b/apps/plugin.c
index 4f6b6e9..c26d06d 100644
--- a/apps/plugin.c
+++ b/apps/plugin.c
@@ -52,6 +52,7 @@
#include "splash.h"
#if (CONFIG_CODEC == SWCODEC)
#include "pcm_playback.h"
+#include "dsp.h"
#endif
#ifdef HAVE_CHARGING
@@ -310,9 +311,8 @@ static const struct plugin_api rockbox_api = {
#if !defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC)
mpeg_get_last_header,
#endif
-#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
+
sound_set_pitch,
-#endif
#if !defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC)
/* MAS communication */
@@ -407,6 +407,10 @@ static const struct plugin_api rockbox_api = {
sim_lcd_ex_init,
sim_lcd_ex_update_rect,
#endif
+
+#if (CONFIG_CODEC == SWCODEC)
+ pcm_calculate_peaks,
+#endif
};
int plugin_load(const char* plugin, void* parameter)
diff --git a/apps/plugin.h b/apps/plugin.h
index aa4db39..c0ae6c6 100644
--- a/apps/plugin.h
+++ b/apps/plugin.h
@@ -52,6 +52,7 @@
#include "misc.h"
#if (HWCODEC == SWCODEC)
#include "pcm_playback.h"
+#include "dsp.h"
#endif
#include "settings.h"
#include "timer.h"
@@ -98,12 +99,12 @@
#define PLUGIN_MAGIC 0x526F634B /* RocK */
/* increase this every time the api struct changes */
-#define PLUGIN_API_VERSION 9
+#define PLUGIN_API_VERSION 10
/* 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 7
+#define PLUGIN_MIN_API_VERSION 8
/* plugin return codes */
enum plugin_status {
@@ -167,7 +168,7 @@ struct plugin_api {
void (*lcd_bitmap_transparent_part)(const fb_data *src,
int src_x, int src_y, int stride,
int x, int y, int width, int height);
- void (*lcd_bitmap_transparent)(const fb_data *src, int x, int y,
+ void (*lcd_bitmap_transparent)(const fb_data *src, int x, int y,
int width, int height);
#endif
void (*lcd_putsxy)(int x, int y, const unsigned char *string);
@@ -364,9 +365,8 @@ struct plugin_api {
#if !defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC)
unsigned long (*mpeg_get_last_header)(void);
#endif
-#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
+
void (*sound_set_pitch)(int pitch);
-#endif
/* MAS communication */
#if !defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC)
@@ -418,7 +418,7 @@ struct plugin_api {
bool (*charger_inserted)(void);
# ifdef HAVE_CHARGE_STATE
bool (*charging_state)(void);
-# endif
+# endif
#endif
#ifdef HAVE_USB_POWER
bool (*usb_powered)(void);
@@ -465,15 +465,19 @@ struct plugin_api {
#endif
int (*show_logo)(void);
- /* new stuff at the end, sort into place next time
- the API gets incompatible */
-
struct tree_context* (*tree_get_context)(void);
#if defined(SIMULATOR) && defined(HAVE_LCD_BITMAP) && LCD_DEPTH < 8
void (*sim_lcd_ex_init)(int shades, unsigned long (*getpixel)(int, int));
void (*sim_lcd_ex_update_rect)(int x, int y, int width, int height);
#endif
+#if (CONFIG_CODEC == SWCODEC)
+ void (*pcm_calculate_peaks)(int *left, int *right);
+#endif
+
+ /* new stuff at the end, sort into place next time
+ the API gets incompatible */
+
};
/* plugin header */
diff --git a/apps/plugins/vu_meter.c b/apps/plugins/vu_meter.c
index b486c3c..de0c466 100644
--- a/apps/plugins/vu_meter.c
+++ b/apps/plugins/vu_meter.c
@@ -17,7 +17,7 @@
**************************************************************************/
#include "plugin.h"
-#if defined(HAVE_LCD_BITMAP) && (CONFIG_CODEC != SWCODEC)
+#if defined(HAVE_LCD_BITMAP)
PLUGIN_HEADER
@@ -28,6 +28,10 @@ PLUGIN_HEADER
#define VUMETER_MENU BUTTON_F1
#define VUMETER_MENU_EXIT BUTTON_F1
#define VUMETER_MENU_EXIT2 BUTTON_OFF
+#define VUMETER_LEFT BUTTON_LEFT
+#define VUMETER_RIGHT BUTTON_RIGHT
+#define VUMETER_UP BUTTON_UP
+#define VUMETER_DOWN BUTTON_DOWN
#elif CONFIG_KEYPAD == ONDIO_PAD
#define VUMETER_QUIT BUTTON_OFF
@@ -37,12 +41,62 @@ PLUGIN_HEADER
#define VUMETER_MENU (BUTTON_MENU | BUTTON_REPEAT)
#define VUMETER_MENU_EXIT BUTTON_MENU
#define VUMETER_MENU_EXIT2 BUTTON_OFF
+#define VUMETER_LEFT BUTTON_LEFT
+#define VUMETER_RIGHT BUTTON_RIGHT
+#define VUMETER_UP BUTTON_UP
+#define VUMETER_DOWN BUTTON_DOWN
+
+#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \
+ (CONFIG_KEYPAD == IRIVER_H300_PAD)
+#define VUMETER_QUIT BUTTON_OFF
+#define VUMETER_HELP BUTTON_ON
+#define VUMETER_MENU BUTTON_SELECT
+#define VUMETER_MENU_EXIT BUTTON_SELECT
+#define VUMETER_MENU_EXIT2 BUTTON_OFF
+#define VUMETER_LEFT BUTTON_LEFT
+#define VUMETER_RIGHT BUTTON_RIGHT
+#define VUMETER_UP BUTTON_UP
+#define VUMETER_DOWN BUTTON_DOWN
+
+#elif (CONFIG_KEYPAD == IPOD_3G_PAD) || \
+ (CONFIG_KEYPAD == IPOD_4G_PAD)
+#define VUMETER_QUIT BUTTON_MENU
+#define VUMETER_HELP BUTTON_PLAY
+#define VUMETER_MENU BUTTON_SELECT
+#define VUMETER_MENU_EXIT BUTTON_SELECT
+#define VUMETER_MENU_EXIT2 BUTTON_MENU
+#define VUMETER_LEFT BUTTON_LEFT
+#define VUMETER_RIGHT BUTTON_RIGHT
+#define VUMETER_UP BUTTON_SCROLL_FWD
+#define VUMETER_DOWN BUTTON_SCROLL_BACK
+
+#elif (CONFIG_KEYPAD == GIGABEAT_PAD)
+#define VUMETER_QUIT BUTTON_POWER
+#define VUMETER_HELP BUTTON_A
+#define VUMETER_MENU BUTTON_SELECT
+#define VUMETER_MENU_EXIT BUTTON_SELECT
+#define VUMETER_MENU_EXIT2 BUTTON_POWER
+#define VUMETER_LEFT BUTTON_LEFT
+#define VUMETER_RIGHT BUTTON_RIGHT
+#define VUMETER_UP BUTTON_UP
+#define VUMETER_DOWN BUTTON_DOWN
+
+#elif CONFIG_KEYPAD == IAUDIO_X5_PAD
+#define VUMETER_QUIT BUTTON_POWER
+#define VUMETER_HELP BUTTON_PLAY
+#define VUMETER_MENU BUTTON_SELECT
+#define VUMETER_MENU_EXIT BUTTON_SELECT
+#define VUMETER_MENU_EXIT2 BUTTON_POWER
+#define VUMETER_LEFT BUTTON_LEFT
+#define VUMETER_RIGHT BUTTON_RIGHT
+#define VUMETER_UP BUTTON_UP
+#define VUMETER_DOWN BUTTON_DOWN
#endif
const struct plugin_api* rb;
-#ifdef SIMULATOR
+#if SIMULATOR && (CONFIG_CODEC != SWCODEC)
#define mas_codec_readreg(x) rand()%MAX_PEAK
#endif
@@ -229,7 +283,7 @@ void change_settings(void)
quit = true;
break;
- case BUTTON_LEFT:
+ case VUMETER_LEFT:
if(selected_setting==0)
settings.meter_type == DIGITAL ? settings.meter_type = ANALOG : settings.meter_type++;
if(settings.meter_type==ANALOG) {
@@ -250,7 +304,7 @@ void change_settings(void)
}
break;
- case BUTTON_RIGHT:
+ case VUMETER_RIGHT:
if(selected_setting==0)
settings.meter_type == DIGITAL ? settings.meter_type = ANALOG : settings.meter_type++;
if(settings.meter_type==ANALOG) {
@@ -271,11 +325,11 @@ void change_settings(void)
}
break;
- case BUTTON_DOWN:
+ case VUMETER_UP:
selected_setting == 3 ? selected_setting=0 : selected_setting++;
break;
- case BUTTON_UP:
+ case VUMETER_DOWN:
selected_setting == 0 ? selected_setting=3 : selected_setting--;
}
}
@@ -334,14 +388,22 @@ void draw_digital_minimeters(void) {
}
void analog_meter(void) {
+
+#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
+ 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);
+#endif
+
if(settings.analog_use_db_scale) {
- left_needle_top_x = analog_db_scale[rb->mas_codec_readreg(0xC)*56/MAX_PEAK];
- right_needle_top_x = analog_db_scale[rb->mas_codec_readreg(0xD)*56/MAX_PEAK]+56;
+ left_needle_top_x = analog_db_scale[left_peak * 56 / MAX_PEAK];
+ right_needle_top_x = analog_db_scale[right_peak * 56 / MAX_PEAK] + 56;
}
-
else {
- left_needle_top_x = rb->mas_codec_readreg(0xC) * 56 / MAX_PEAK;
- right_needle_top_x = (rb->mas_codec_readreg(0xD) * 56 / MAX_PEAK)+56;
+ left_needle_top_x = left_peak * 56 / MAX_PEAK;
+ right_needle_top_x = right_peak * 56 / MAX_PEAK + 56;
}
/* Makes a decay on the needle */
@@ -382,13 +444,21 @@ void analog_meter(void) {
}
void digital_meter(void) {
+#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
+ 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);
+#endif
+
if(settings.digital_use_db_scale) {
- num_left_leds = digital_db_scale[rb->mas_codec_readreg(0xC) * 44 / MAX_PEAK];
- num_right_leds = digital_db_scale[rb->mas_codec_readreg(0xD) * 44 / MAX_PEAK];
+ num_left_leds = digital_db_scale[left_peak * 44 / MAX_PEAK];
+ num_right_leds = digital_db_scale[right_peak * 44 / MAX_PEAK];
}
else {
- num_left_leds = rb->mas_codec_readreg(0xC) * 11 / MAX_PEAK;
- num_right_leds = rb->mas_codec_readreg(0xD) * 11 / MAX_PEAK;
+ num_left_leds = left_peak * 11 / MAX_PEAK;
+ num_right_leds = right_peak * 11 / MAX_PEAK;
}
num_left_leds = (num_left_leds+last_num_left_leds*settings.digital_decay)/(settings.digital_decay+1);
@@ -481,13 +551,13 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) {
change_settings();
break;
- case BUTTON_UP:
- case BUTTON_UP | BUTTON_REPEAT:
+ case VUMETER_UP:
+ case VUMETER_UP | BUTTON_REPEAT:
change_volume(1);
break;
- case BUTTON_DOWN:
- case BUTTON_DOWN | BUTTON_REPEAT:
+ case VUMETER_DOWN:
+ case VUMETER_DOWN | BUTTON_REPEAT:
change_volume(-1);
break;