summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrank Gevaerts <frank@gevaerts.be>2009-11-09 17:57:17 +0000
committerFrank Gevaerts <frank@gevaerts.be>2009-11-09 17:57:17 +0000
commit8c15799e7056729fab8ca06de406bffe89602558 (patch)
tree659668b7962351c5886e0b898d5822acc907e454
parent7de32efe1c44d5278be53cf7f3a0dbc7b6fe1493 (diff)
downloadrockbox-8c15799e7056729fab8ca06de406bffe89602558.zip
rockbox-8c15799e7056729fab8ca06de406bffe89602558.tar.gz
rockbox-8c15799e7056729fab8ca06de406bffe89602558.tar.bz2
rockbox-8c15799e7056729fab8ca06de406bffe89602558.tar.xz
Implement %Ss for playback speed
This is similar to %Sp for pitch. The conditional form %?Ss<...> is also supported in the same way as FS#10680; you can use %?Ss<%xdAa|%xdAb|> to show an icon of a tortoise (subpicture 1 of image A) or a hare (subpicture 2 of image A) when not playing at the normal speed. Flyspray: FS#10681 Author: Junio C Hamano git-svn-id: svn://svn.rockbox.org/rockbox/trunk@23591 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/gui/skin_engine/skin_parser.c3
-rw-r--r--apps/gui/skin_engine/skin_tokens.c20
-rw-r--r--apps/gui/skin_engine/skin_tokens.h1
3 files changed, 24 insertions, 0 deletions
diff --git a/apps/gui/skin_engine/skin_parser.c b/apps/gui/skin_engine/skin_parser.c
index d06494d..0e21ec0 100644
--- a/apps/gui/skin_engine/skin_parser.c
+++ b/apps/gui/skin_engine/skin_parser.c
@@ -279,6 +279,9 @@ static const struct wps_tag all_tags[] = {
#if (CONFIG_CODEC != MAS3507D)
{ WPS_TOKEN_SOUND_PITCH, "Sp", WPS_REFRESH_DYNAMIC, NULL },
#endif
+#if (CONFIG_CODEC == SWCODEC)
+ { WPS_TOKEN_SOUND_SPEED, "Ss", WPS_REFRESH_DYNAMIC, NULL },
+#endif
#if (CONFIG_LED == LED_VIRTUAL) || defined(HAVE_REMOTE_LCD)
{ WPS_TOKEN_VLED_HDD, "lh", WPS_REFRESH_DYNAMIC, NULL },
#endif
diff --git a/apps/gui/skin_engine/skin_tokens.c b/apps/gui/skin_engine/skin_tokens.c
index 9cd8dfc..b271bfe 100644
--- a/apps/gui/skin_engine/skin_tokens.c
+++ b/apps/gui/skin_engine/skin_tokens.c
@@ -49,6 +49,7 @@
#include "playlist.h"
#if CONFIG_CODEC == SWCODEC
#include "playback.h"
+#include "tdspeed.h"
#endif
#include "viewport.h"
@@ -832,6 +833,25 @@ const char *get_token_value(struct gui_wps *gwps,
}
#endif
+#if CONFIG_CODEC == SWCODEC
+ case WPS_TOKEN_SOUND_SPEED:
+ {
+ int32_t pitch = sound_get_pitch();
+ int32_t speed;
+ if (dsp_timestretch_available())
+ speed = GET_SPEED(pitch, dsp_get_timestretch());
+ else
+ speed = pitch;
+ snprintf(buf, buf_size, "%ld.%ld",
+ speed / PITCH_SPEED_PRECISION,
+ (speed % PITCH_SPEED_PRECISION) / (PITCH_SPEED_PRECISION / 10));
+ if (intval)
+ *intval = pitch_speed_enum(limit, speed,
+ PITCH_SPEED_PRECISION * 100);
+ return buf;
+ }
+#endif
+
case WPS_TOKEN_MAIN_HOLD:
#ifdef HAS_BUTTON_HOLD
if (button_hold())
diff --git a/apps/gui/skin_engine/skin_tokens.h b/apps/gui/skin_engine/skin_tokens.h
index cb8e671..27594db 100644
--- a/apps/gui/skin_engine/skin_tokens.h
+++ b/apps/gui/skin_engine/skin_tokens.h
@@ -68,6 +68,7 @@ enum wps_token_type {
WPS_TOKEN_SOUND_PITCH,
#endif
#if (CONFIG_CODEC == SWCODEC)
+ WPS_TOKEN_SOUND_SPEED,
WPS_TOKEN_REPLAYGAIN,
WPS_TOKEN_CROSSFADE,
#endif