Index: apps/lang/english.lang =================================================================== --- apps/lang/english.lang (revision 17780) +++ apps/lang/english.lang (working copy) @@ -11750,3 +11750,17 @@ gigabeatf: "High" + + id: LANG_PAUSE_BETWEEN_TRACKS + desc: in playback settings menu + user: + + *: "Pause between tracks" + + + *: "Pause between tracks" + + + *: "Pause between tracks" + + Index: apps/settings.h =================================================================== --- apps/settings.h (revision 17780) +++ apps/settings.h (working copy) @@ -743,6 +743,7 @@ #ifdef HAVE_TOUCHPAD_SENSITIVITY_SETTING int touchpad_sensitivity; #endif + bool pause_between_tracks; /* Pauses the playback on track changes */ }; /** global variables **/ Index: apps/menus/playback_menu.c =================================================================== --- apps/menus/playback_menu.c (revision 17780) +++ apps/menus/playback_menu.c (working copy) @@ -33,10 +33,10 @@ #include "dsp.h" #include "scrobbler.h" #include "audio.h" -#include "cuesheet.h" -#if CONFIG_CODEC == SWCODEC -#include "playback.h" -#endif +#include "cuesheet.h" +#if CONFIG_CODEC == SWCODEC +#include "playback.h" +#endif #if CONFIG_CODEC == SWCODEC @@ -61,6 +61,8 @@ MENUITEM_SETTING(shuffle_item, &global_settings.playlist_shuffle, playback_callback); MENUITEM_SETTING(repeat_mode, &global_settings.repeat_mode, playback_callback); MENUITEM_SETTING(play_selected, &global_settings.play_selected, NULL); +MENUITEM_SETTING(pause_between_tracks, &global_settings.pause_between_tracks, + NULL); MENUITEM_SETTING(ff_rewind_accel, &global_settings.ff_rewind_accel, NULL); MENUITEM_SETTING(ff_rewind_min_step, &global_settings.ff_rewind_min_step, NULL); @@ -181,7 +183,7 @@ MAKE_MENU(playback_settings,ID2P(LANG_PLAYBACK),0, Icon_Playback_menu, - &shuffle_item, &repeat_mode, &play_selected, + &shuffle_item, &repeat_mode, &pause_between_tracks, &play_selected, &ff_rewind_settings_menu, #ifndef HAVE_FLASH_STORAGE &buffer_margin, Index: apps/settings_list.c =================================================================== --- apps/settings_list.c (revision 17780) +++ apps/settings_list.c (working copy) @@ -418,6 +418,8 @@ ,ID2P(LANG_REPEAT_AB) #endif ), /* CHOICE_SETTING( repeat_mode ) */ + OFFON_SETTING(0, pause_between_tracks, LANG_PAUSE_BETWEEN_TRACKS, false, + "pause between tracks", NULL), /* LCD */ #ifdef HAVE_LCD_CONTRAST /* its easier to leave this one un-macro()ed for the time being */ Index: apps/playback.c =================================================================== --- apps/playback.c (revision 17780) +++ apps/playback.c (working copy) @@ -81,6 +81,8 @@ #define PLAYBACK_VOICE +#if CONFIG_CODEC == SWCODEC + /* default point to start buffer refill */ #define AUDIO_DEFAULT_WATERMARK (1024*512) /* amount of guess-space to allow for codecs that must hunt and peck @@ -2152,6 +2154,8 @@ last_peek_offset = -1; + send_event(PLAYBACK_EVENT_START_PLAYBACK, NULL); + /* Officially playing */ queue_reply(&audio_queue, 1); @@ -2575,3 +2579,36 @@ sleep(0); } } +#endif /* CONFIG_CODEC == SWCODEC */ + +static bool starting_playback = false; + +void audio_pause_between_tracks_start_callback(void *data) +{ + (void)data; + DEBUGF("audio_pause_between_tracks_start_callback()\n"); + starting_playback = true; +} + +void audio_pause_between_tracks_callback(void *data) +{ + (void)data; + DEBUGF("audio_pause_between_tracks_callback()\n"); + if(global_settings.pause_between_tracks && !starting_playback) { +#if CONFIG_CODEC == SWCODEC + queue_post(&audio_queue, Q_AUDIO_PAUSE, true); +#else + audio_pause(); +#endif + } + + starting_playback = false; +} + +void playback_init(void) +{ + add_event(PLAYBACK_EVENT_TRACK_CHANGE, false, + &audio_pause_between_tracks_callback); + add_event(PLAYBACK_EVENT_START_PLAYBACK, false, + &audio_pause_between_tracks_start_callback); +} Index: apps/playback.h =================================================================== --- apps/playback.h (revision 17780) +++ apps/playback.h (working copy) @@ -54,5 +54,4 @@ #endif #endif - - +void playback_init(void); Index: apps/SOURCES =================================================================== --- apps/SOURCES (revision 17780) +++ apps/SOURCES (working copy) @@ -102,12 +102,12 @@ #ifdef HAVE_RECORDING recorder/recording.c #endif +playback.c #if CONFIG_CODEC == SWCODEC #if INPUT_SRC_CAPS != 0 audio_path.c #endif /* INPUT_SRC_CAPS != 0 */ pcmbuf.c -playback.c codecs.c dsp.c #ifdef HAVE_RECORDING Index: apps/main.c =================================================================== --- apps/main.c (revision 17780) +++ apps/main.c (working copy) @@ -327,6 +327,7 @@ cuesheet_init(); audio_init(); + playback_init(); button_clear_queue(); /* Empty the keyboard buffer */ } @@ -586,6 +587,8 @@ #ifdef HAVE_ACCESSORY_SUPPLY accessory_supply_set(global_settings.accessory_supply); #endif + + playback_init(); } #ifdef CPU_PP Index: firmware/export/events.h =================================================================== --- firmware/export/events.h (revision 17780) +++ firmware/export/events.h (working copy) @@ -40,6 +40,7 @@ PLAYBACK_EVENT_TRACK_BUFFER = (EVENT_CLASS_PLAYBACK|1), PLAYBACK_EVENT_TRACK_FINISH, PLAYBACK_EVENT_TRACK_CHANGE, + PLAYBACK_EVENT_START_PLAYBACK, }; Index: firmware/mpeg.c =================================================================== --- firmware/mpeg.c (revision 17780) +++ firmware/mpeg.c (working copy) @@ -1266,6 +1266,7 @@ play_pending_track_change = true; update_playlist(); + send_event(PLAYBACK_EVENT_START_PLAYBACK, NULL); current_track_counter++; break;