# HG changeset patch # User yaz # Date 1173971087 25200 # Node ID 59a876be85501b4b2572c565ccc2277cbb2c1952 # Parent cafc7d5769f9e5d881764b3c75d484ad18b940e2 [svn] - refine watchdog thread. diff -r cafc7d5769f9 -r 59a876be8550 ChangeLog --- a/ChangeLog Thu Mar 15 04:43:58 2007 -0700 +++ b/ChangeLog Thu Mar 15 08:04:47 2007 -0700 @@ -1,3 +1,13 @@ +2007-03-15 11:43:58 +0000 Yoshiki Yazawa + revision [1820] + - support "Repeat". + - fill index of last_cue_tack before activate watchdog thread. + - improve handling of last track. + + trunk/src/cue/cuesheet.c | 39 ++++++++++++++++++++++++--------------- + 1 file changed, 24 insertions(+), 15 deletions(-) + + 2007-03-15 06:50:12 +0000 Yoshiki Yazawa revision [1818] - make use of playlist_set_position() instead of playlist_prev/next(). now cuesheet directly jumps to the objective track. diff -r cafc7d5769f9 -r 59a876be8550 src/cue/cuesheet.c --- a/src/cue/cuesheet.c Thu Mar 15 04:43:58 2007 -0700 +++ b/src/cue/cuesheet.c Thu Mar 15 08:04:47 2007 -0700 @@ -341,6 +341,7 @@ static gpointer do_stop(gpointer data) { InputPlayback *playback = (InputPlayback *)data; + Playlist *playlist = playlist_get_active(); #ifdef DEBUG g_print("f: do_stop\n"); #endif @@ -348,9 +349,11 @@ playback_stop(); ip_data.stop = FALSE; + PLAYLIST_LOCK(playlist->mutex); gdk_threads_enter(); mainwin_clear_song_info(); gdk_threads_leave(); + PLAYLIST_UNLOCK(playlist->mutex); #ifdef DEBUG g_print("e: do_stop\n"); @@ -574,7 +577,7 @@ } // next track - if (time > cue_tracks[cur_cue_track + 1].index) + if (cur_cue_track + 1 < last_cue_track && time > cue_tracks[cur_cue_track + 1].index) { guint pos; #ifdef DEBUG @@ -585,9 +588,6 @@ last_cue_track, cue_tracks[last_cue_track].index); #endif while(time > cue_tracks[cur_cue_track + 1].index) { - if(cur_cue_track + 1 == last_cue_track) { - goto END_OF_CUE; - } cur_cue_track++; pos = cur_cue_track; if (time <= cue_tracks[cur_cue_track].index) @@ -603,19 +603,16 @@ } } - END_OF_CUE: - // end of file + // last track if (cur_cue_track + 1 == last_cue_track && - abs(cue_tracks[cur_cue_track + 1].index - time) < 500) { // difference < 500ms + (cue_tracks[last_cue_track].index - time < 500 || + time > cue_tracks[last_cue_track].index) ){ // may not happen. for safety. if(!real_ip->output->buffer_playing()) { #ifdef DEBUG g_print("i: watchdog eof reached\n"); #endif if(cfg.repeat) { guint pos = 0; -#ifdef DEBUG - g_print("i: watchdog repeat\n"); -#endif exec_thread = g_thread_create(do_setpos, &pos, FALSE, NULL); } else {