From 5aec3c2400fdd47c7b2098f1a1c5506a6aa3156c Mon Sep 17 00:00:00 2001 From: Michael Hohmuth Date: Fri, 13 May 2011 22:28:47 +0000 Subject: [PATCH] FS#11931 part 2: Allow a short rewind when playback is paused. Patch by John Morris. This patch adds an option to rewind the current track by a few seconds when it is paused, irrespective of what has caused the pause. This is useful for audiobooks and podcasts to allow the listener to recall where the track was left off. The patch subsumes the existing rewind-on-headphone-unplug feature and extends it to all invocations of pause: play/pause button (or touch area), headphone removal, and power-supply unplug in car-adapter mode. It also subsumes FS#9448 (rewind on fade). git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29876 a1c6a512-1295-4272-9138-f99709370657 --- apps/gui/wps.c | 11 +++++++++++ apps/lang/english.lang | 25 ++++++++++++++++++------- apps/menus/playback_menu.c | 5 +++-- apps/misc.c | 13 ------------- apps/settings.h | 2 +- apps/settings_list.c | 6 +++--- 6 files changed, 36 insertions(+), 26 deletions(-) diff --git a/apps/gui/wps.c b/apps/gui/wps.c index 5404d70638..0103ace53c 100644 --- a/apps/gui/wps.c +++ b/apps/gui/wps.c @@ -125,6 +125,17 @@ void pause_action(bool may_fade, bool updatewps) fade(false, updatewps); else audio_pause(); + + if (global_settings.pause_rewind) { + long newpos; + +#if (CONFIG_CODEC == SWCODEC) + audio_pre_ff_rewind(); +#endif + newpos = audio_current_track()->elapsed + - global_settings.pause_rewind * 1000; + audio_ff_rewind(newpos > 0 ? newpos : 0); + } } void unpause_action(bool may_fade, bool updatewps) diff --git a/apps/lang/english.lang b/apps/lang/english.lang index 26a2274680..71dee79ee3 100644 --- a/apps/lang/english.lang +++ b/apps/lang/english.lang @@ -2069,19 +2069,16 @@ id: LANG_HEADPHONE_UNPLUG_RW - desc: in pause_phones_menu. + desc: deprecated user: core - *: none - headphone_detection: "Duration to Rewind" + *: "" - *: none - headphone_detection: "Duration to Rewind" + *: "" - *: none - headphone_detection: "Duration to Rewind" + *: "" @@ -12744,3 +12741,17 @@ *: "In custom directories only" + + id: LANG_PAUSE_REWIND + desc: Seconds to rewind when rewind on pause is enabled. + user: core + + *: "Rewind on Pause" + + + *: "Rewind on Pause" + + + *: "Rewind on Pause" + + diff --git a/apps/menus/playback_menu.c b/apps/menus/playback_menu.c index 4153c1c776..1b1a13a6a5 100644 --- a/apps/menus/playback_menu.c +++ b/apps/menus/playback_menu.c @@ -173,10 +173,9 @@ MENUITEM_SETTING(cuesheet, &global_settings.cuesheet, cuesheet_callback); #ifdef HAVE_HEADPHONE_DETECTION MENUITEM_SETTING(unplug_mode, &global_settings.unplug_mode, NULL); -MENUITEM_SETTING(unplug_rw, &global_settings.unplug_rw, NULL); MENUITEM_SETTING(unplug_autoresume, &global_settings.unplug_autoresume, NULL); MAKE_MENU(unplug_menu, ID2P(LANG_HEADPHONE_UNPLUG), 0, Icon_NOICON, - &unplug_mode, &unplug_rw, &unplug_autoresume); + &unplug_mode, &unplug_autoresume); #endif MENUITEM_SETTING(skip_length, &global_settings.skip_length, NULL); @@ -184,6 +183,7 @@ MENUITEM_SETTING(prevent_skip, &global_settings.prevent_skip, NULL); #if CONFIG_CODEC == SWCODEC MENUITEM_SETTING(resume_rewind, &global_settings.resume_rewind, NULL); #endif +MENUITEM_SETTING(pause_rewind, &global_settings.pause_rewind, NULL); MAKE_MENU(playback_settings,ID2P(LANG_PLAYBACK),0, Icon_Playback_menu, @@ -214,6 +214,7 @@ MAKE_MENU(playback_settings,ID2P(LANG_PLAYBACK),0, #if CONFIG_CODEC == SWCODEC &resume_rewind, #endif + &pause_rewind, ); static int playback_callback(int action,const struct menu_item_ex *this_item) diff --git a/apps/misc.c b/apps/misc.c index d72d7a4da0..b027215ccc 100644 --- a/apps/misc.c +++ b/apps/misc.c @@ -504,19 +504,6 @@ static void unplug_change(bool inserted) { headphone_caused_pause = true; pause_action(false, false); - - if (global_settings.unplug_rw) - { -#if (CONFIG_CODEC == SWCODEC) - audio_pre_ff_rewind(); -#endif - if (audio_current_track()->elapsed > - (unsigned long)(global_settings.unplug_rw*1000)) - audio_ff_rewind(audio_current_track()->elapsed - - (global_settings.unplug_rw*1000)); - else - audio_ff_rewind(0); - } } } } diff --git a/apps/settings.h b/apps/settings.h index 3f49cfcb2c..bed88c82ea 100644 --- a/apps/settings.h +++ b/apps/settings.h @@ -483,9 +483,9 @@ struct user_settings int touchpad_sensitivity; #endif + int pause_rewind; /* time in s to rewind when pausing */ #ifdef HAVE_HEADPHONE_DETECTION int unplug_mode; /* pause on headphone unplug */ - int unplug_rw; /* time in s to rewind when pausing */ bool unplug_autoresume; /* disable auto-resume if no phones */ #endif diff --git a/apps/settings_list.c b/apps/settings_list.c index 5b9a84036f..f282b8afc0 100644 --- a/apps/settings_list.c +++ b/apps/settings_list.c @@ -1537,13 +1537,13 @@ const struct settings_list settings[] = { "pause on headphone unplug", "off,pause,pause and resume", NULL, 3, ID2P(LANG_OFF), ID2P(LANG_PAUSE), ID2P(LANG_HEADPHONE_UNPLUG_RESUME)), - INT_SETTING(0, unplug_rw, LANG_HEADPHONE_UNPLUG_RW, 0, - "rewind duration on pause", UNIT_SEC, 0, 15, 1, NULL, NULL, - NULL), OFFON_SETTING(0, unplug_autoresume, LANG_HEADPHONE_UNPLUG_DISABLE_AUTORESUME, false, "disable autoresume if phones not present",NULL), #endif + INT_SETTING(0, pause_rewind, LANG_PAUSE_REWIND, 0, + "rewind duration on pause", UNIT_SEC, 0, 15, 1, NULL, NULL, + NULL), #if CONFIG_TUNER CHOICE_SETTING(0, fm_region, LANG_FM_REGION, 0, "fm_region", "eu,us,jp,kr,it,wo", set_radio_region, 6,