Index: apps/lang/english.lang =================================================================== --- apps/lang/english.lang (revisione 28563) +++ apps/lang/english.lang (copia locale) @@ -12664,3 +12664,17 @@ radio: "Signal strength:" + + id: LANG_PAUSE_BETWEEN_TRACKS + desc: in playback settings menu + user: core + + *: "Pause between tracks" + + + *: "Pause between tracks" + + + *: "Pause between tracks" + + Index: apps/settings.h =================================================================== --- apps/settings.h (revisione 28563) +++ apps/settings.h (copia locale) @@ -476,6 +476,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 28563) +++ 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); @@ -183,7 +185,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/mpeg.c =================================================================== --- apps/mpeg.c (revisione 28563) +++ apps/mpeg.c (copia locale) @@ -1284,6 +1284,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 28563) +++ apps/settings_list.c (copia locale) @@ -671,6 +671,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 28563) +++ apps/playback.c (copia locale) @@ -27,7 +27,11 @@ #include "playback.h" #include "codec_thread.h" #include "kernel.h" +#if CONFIG_CODEC == SWCODEC #include "codecs.h" +#else +#include "settings.h" +#endif #include "buffering.h" #include "voice_thread.h" #include "usb.h" @@ -56,6 +60,7 @@ #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) @@ -1738,6 +1743,8 @@ last_peek_offset = -1; + send_event(PLAYBACK_EVENT_START_PLAYBACK, NULL); + /* Officially playing */ queue_reply(&audio_queue, 1); @@ -2161,3 +2168,35 @@ { return &tracks[track_ridx].codec_hid; } +#endif /* CONFIG_CODEC == SWCODEC */ + +static bool starting_playback = false; + +void audio_pause_between_tracks_start_callback(void *data) +{ + (void)data; + starting_playback = true; +} + +void audio_pause_between_tracks_callback(void *data) +{ + (void)data; + if(global_settings.pause_between_tracks + && !global_settings.party_mode && !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 28563) +++ apps/playback.h (copia locale) @@ -60,6 +60,7 @@ void audio_pre_ff_rewind(void); void audio_skip(int direction); void audio_hard_stop(void); /* Stops audio from serving playback */ +void audio_pause(void); #ifdef HAVE_CROSSFADE void audio_set_crossfade(int enable); #endif @@ -113,3 +114,4 @@ }; #endif +void playback_init(void); Index: apps/SOURCES =================================================================== --- apps/SOURCES (revisione 28563) +++ apps/SOURCES (copia locale) @@ -145,6 +145,7 @@ #ifdef HAVE_RECORDING recorder/recording.c #endif +playback.c #if CONFIG_TUNER radio/radio.c @@ -162,7 +163,6 @@ fixedpoint.c pcmbuf.c codec_thread.c -playback.c codecs.c dsp.c #ifdef HAVE_PITCHSCREEN Index: apps/main.c =================================================================== --- apps/main.c (revisione 28563) +++ apps/main.c (copia locale) @@ -81,10 +81,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 @@ -404,6 +402,7 @@ #endif /* CONFIG_CODEC == SWCODEC */ audio_init(); + playback_init(); button_clear_queue(); /* Empty the keyboard buffer */ settings_apply_skins(); @@ -710,6 +709,8 @@ #ifdef HAVE_ACCESSORY_SUPPLY accessory_supply_set(global_settings.accessory_supply); #endif + + playback_init(); #ifdef HAVE_LINEOUT_POWEROFF lineout_set(global_settings.lineout_active); #endif