Index: apps/lang/english.lang =================================================================== --- apps/lang/english.lang (revisione 22119) +++ apps/lang/english.lang (copia locale) @@ -12655,3 +12655,17 @@ pitchscreen: "Rate" + + 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 (revisione 22119) +++ apps/settings.h (copia locale) @@ -480,6 +480,7 @@ #ifdef HAVE_TOUCHPAD_SENSITIVITY_SETTING int touchpad_sensitivity; #endif + bool pause_between_tracks; /* Pauses the playback on track changes */ #ifdef HAVE_HEADPHONE_DETECTION int unplug_mode; /* pause on headphone unplug */ Index: apps/menus/playback_menu.c =================================================================== --- apps/menus/playback_menu.c (revisione 22119) +++ apps/menus/playback_menu.c (copia locale) @@ -62,6 +62,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); @@ -178,7 +180,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, #ifdef HAVE_DISK_STORAGE &buffer_margin, Index: apps/appevents.h =================================================================== --- apps/appevents.h (revisione 22119) +++ apps/appevents.h (copia locale) @@ -35,6 +35,7 @@ PLAYBACK_EVENT_TRACK_FINISH, PLAYBACK_EVENT_TRACK_CHANGE, PLAYBACK_EVENT_NEXTTRACKID3_AVAILABLE, + PLAYBACK_EVENT_START_PLAYBACK, }; /** Buffering events **/ Index: apps/mpeg.c =================================================================== --- apps/mpeg.c (revisione 22119) +++ apps/mpeg.c (copia locale) @@ -1268,6 +1268,7 @@ play_pending_track_change = true; update_playlist(); + send_event(PLAYBACK_EVENT_START_PLAYBACK, NULL); current_track_counter++; break; Index: apps/settings_list.c =================================================================== --- apps/settings_list.c (revisione 22119) +++ apps/settings_list.c (copia locale) @@ -544,6 +544,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 (revisione 22119) +++ apps/playback.c (copia locale) @@ -41,7 +41,9 @@ #include "debug.h" #include "sprintf.h" #include "settings.h" +#if CONFIG_CODEC == SWCODEC #include "codecs.h" +#endif #include "audio.h" #include "buffering.h" #include "appevents.h" @@ -86,6 +88,8 @@ #define PLAYBACK_VOICE +#if CONFIG_CODEC == SWCODEC + /* amount of guess-space to allow for codecs that must hunt and peck * for their correct seeek target, 32k seems a good size */ #define AUDIO_REBUFFER_GUESS_SIZE (1024*32) @@ -2303,6 +2307,8 @@ last_peek_offset = -1; + send_event(PLAYBACK_EVENT_START_PLAYBACK, NULL); + /* Officially playing */ queue_reply(&audio_queue, 1); @@ -2723,3 +2729,36 @@ { return audio_thread_ready; } +#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 (revisione 22119) +++ apps/playback.h (copia locale) @@ -58,5 +58,4 @@ #endif #endif - - +void playback_init(void); Index: apps/SOURCES =================================================================== --- apps/SOURCES (revisione 22119) +++ apps/SOURCES (copia locale) @@ -124,13 +124,13 @@ #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 */ fixedpoint.c pcmbuf.c -playback.c codecs.c dsp.c tdspeed.c Index: apps/main.c =================================================================== --- apps/main.c (revisione 22119) +++ apps/main.c (copia locale) @@ -77,10 +77,8 @@ #include "iap.h" #endif -#if (CONFIG_CODEC == SWCODEC) #include "playback.h" #include "tdspeed.h" -#endif #if (CONFIG_CODEC == SWCODEC) && defined(HAVE_RECORDING) && !defined(SIMULATOR) #include "pcm_record.h" #endif @@ -339,6 +337,7 @@ #endif /* CONFIG_CODEC == SWCODEC */ audio_init(); + playback_init(); button_clear_queue(); /* Empty the keyboard buffer */ } @@ -604,6 +603,8 @@ #ifdef HAVE_ACCESSORY_SUPPLY accessory_supply_set(global_settings.accessory_supply); #endif + + playback_init(); } #ifdef CPU_PP