Rewind a couple of seconds when fading in and out on pause/resume
Adapted from http://www.rockbox.org/tracker/task/9448
---
apps/gui/wps.c | 9 +++++++++
apps/lang/english.lang | 43 +++++++++++++++++++++++++++++++++++++++++++
apps/menus/playback_menu.c | 6 +++++-
apps/settings.h | 2 ++
apps/settings_list.c | 4 ++++
5 files changed, 63 insertions(+), 1 deletions(-)
diff --git a/apps/gui/wps.c b/apps/gui/wps.c
index 7d633ad..20178d5 100644
--- a/apps/gui/wps.c
+++ b/apps/gui/wps.c
@@ -133,6 +133,15 @@ void fade(bool fade_in, bool updatewps)
/* zero out the sound */
sound_set_volume(fp_min_vol >> 8);
+ if (global_settings.rewind_on_fade) {
+ if (audio_current_track()->elapsed >
+ (unsigned long)(global_settings.fade_rew*1000))
+ audio_ff_rewind(audio_current_track()->elapsed -
+ (global_settings.fade_rew*1000));
+ else
+ audio_ff_rewind(100);
+ }
+
sleep(HZ/10); /* let audio thread run */
audio_resume();
diff --git a/apps/lang/english.lang b/apps/lang/english.lang
index 58aed3e..6715901 100644
--- a/apps/lang/english.lang
+++ b/apps/lang/english.lang
@@ -12664,3 +12664,46 @@
usb_power: "Only charge on U S B insert"
+
+ id: LANG_REWIND_ON_FADE
+ desc: options menu to set rewind on fade
+ user: core
+
+ *: "Rewind on Fade"
+
+
+ *: "Rewind on Fade"
+
+
+ *: "Rewind on Fade"
+
+
+
+ id: LANG_FADE_REWIND_AMOUNT
+ desc: options menu to set rewind on fade amount
+ user: core
+
+ *: "Rewind on Fade Amount"
+
+
+ *: "Rewind on Fade Amount"
+
+
+ *: "Rewind on Fade Amount"
+
+
+
+ id: LANG_FADE_MENU
+ desc: in the playback sub menu
+ user: core
+
+ *: "Fade on Stop"
+
+
+ *: "Fade on Stop"
+
+
+ *: "Fade on Stop"
+
+
+
diff --git a/apps/menus/playback_menu.c b/apps/menus/playback_menu.c
index 9ed0bc5..6c17c21 100644
--- a/apps/menus/playback_menu.c
+++ b/apps/menus/playback_menu.c
@@ -87,6 +87,10 @@ MENUITEM_SETTING(buffer_margin, &global_settings.buffer_margin,
buffermargin_callback);
#endif /*HAVE_DISK_STORAGE */
MENUITEM_SETTING(fade_on_stop, &global_settings.fade_on_stop, NULL);
+MENUITEM_SETTING(rewind_on_fade, &global_settings.rewind_on_fade, NULL);
+MENUITEM_SETTING(fade_rew, &global_settings.fade_rew, NULL);
+MAKE_MENU(fade_on_stop_settings_menu,ID2P(LANG_FADE_MENU),0, Icon_NOICON,
+ &fade_on_stop, &rewind_on_fade, &fade_rew);
MENUITEM_SETTING(party_mode, &global_settings.party_mode, NULL);
#if CONFIG_CODEC == SWCODEC
@@ -188,7 +192,7 @@ MAKE_MENU(playback_settings,ID2P(LANG_PLAYBACK),0,
#ifdef HAVE_DISK_STORAGE
&buffer_margin,
#endif
- &fade_on_stop, &party_mode,
+ &fade_on_stop_settings_menu, &party_mode,
#if (CONFIG_CODEC == SWCODEC) && defined(HAVE_CROSSFADE)
&crossfade_settings_menu,
diff --git a/apps/settings.h b/apps/settings.h
index ef7544e..f8ed48b 100644
--- a/apps/settings.h
+++ b/apps/settings.h
@@ -596,6 +596,8 @@ struct user_settings
int next_folder; /* move to next folder */
int recursive_dir_insert; /* should directories be inserted recursively */
bool fade_on_stop; /* fade on pause/unpause/stop */
+ bool rewind_on_fade; /* 0=no 1=yes */
+ int fade_rew; /* time in seconds to rewind when unpausing */
bool playlist_shuffle;
bool warnon_erase_dynplaylist; /* warn when erasing dynamic playlist */
diff --git a/apps/settings_list.c b/apps/settings_list.c
index b3620ea..619179e 100644
--- a/apps/settings_list.c
+++ b/apps/settings_list.c
@@ -947,6 +947,10 @@ const struct settings_list settings[] = {
OFFON_SETTING(0,play_selected,LANG_PLAY_SELECTED,true,"play selected",NULL),
OFFON_SETTING(0,party_mode,LANG_PARTY_MODE,false,"party mode",NULL),
OFFON_SETTING(0,fade_on_stop,LANG_FADE_ON_STOP,true,"volume fade",NULL),
+ OFFON_SETTING(0,rewind_on_fade,LANG_REWIND_ON_FADE,false,
+ "rewind on fade",NULL),
+ INT_SETTING(0,fade_rew,LANG_FADE_REWIND_AMOUNT,2,
+ "rew on fade amount",UNIT_SEC,0,15,1,NULL,NULL,NULL),
TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, ff_rewind_min_step,
LANG_FFRW_STEP, 1, "scan min step", NULL, UNIT_SEC,
NULL, NULL, NULL, 14, 1,2,3,4,5,6,8,10,15,20,25,30,45,60),
--
1.7.1