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
This commit is contained in:
Frank Gevaerts 2009-11-09 17:57:17 +00:00
parent 7de32efe1c
commit 8c15799e70
3 changed files with 24 additions and 0 deletions

View file

@ -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

View file

@ -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())

View file

@ -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