|
Rockbox mail archiveSubject: [PATCH] Track change silence[PATCH] Track change silence
From: Hardeep Sidhu <hardeeps_at_pobox.com>
Date: Thu, 22 Aug 2002 08:55:11 -0700 Okay, patch below should fix: 1. Track change silence when selecting next track just as it's being loaded into the buffer 2. Repeat of first few seconds of song when selecting next track with multiple files in buffer or when ffw to end of file 3. ffw to end of file not always starting next song -Hardeep Index: firmware/mpeg.c =================================================================== RCS file: /cvsroot/rockbox/firmware/mpeg.c,v retrieving revision 1.99 diff -u -b -r1.99 mpeg.c --- firmware/mpeg.c 22 Aug 2002 07:58:18 -0000 1.99 +++ firmware/mpeg.c 22 Aug 2002 15:38:31 -0000 _at__at_ -794,23 +794,33 _at__at_ /* is next track in ram? */ if ( num_tracks_in_memory() > 1 ) { - int track_offset = (tag_read_idx+1) & MAX_ID3_TAGS_MASK; - mp3buf_read = id3tags[track_offset]->mempos; + int unplayed_space_left, unswapped_space_left; + + track_change(); + mp3buf_read = id3tags[tag_read_idx]->mempos; init_dma(); last_dma_tick = current_tick; + unplayed_space_left = get_unplayed_space(); + unswapped_space_left = mp3buf_write - mp3buf_swapwrite; + if (unswapped_space_left < 0) + unswapped_space_left += mp3buflen; + /* should we start reading more data? */ - if(!filling && (get_unplayed_space() < MPEG_LOW_WATER)) { + if(!filling && (unplayed_space_left < MPEG_LOW_WATER)) { filling = true; queue_post(&mpeg_queue, MPEG_NEED_DATA, 0); play_pending = true; + } else if(unswapped_space_left && + unswapped_space_left > unplayed_space_left) { + /* Stop swapping the data from the previous file */ + mp3buf_swapwrite = mp3buf_read; + play_pending = true; } else { playing = true; if (!paused) start_dma(); } - - track_change(); } else { reset_mp3_buffer(); _at__at_ -903,6 +913,11 _at__at_ else /* Not enough information to FF/Rewind */ break; + + /* Don't seek right to the end of the file so that we can + transition properly to the next song */ + if (newpos >= (int)(id3->filesize - id3->id3v1len)) + newpos = id3->filesize - id3->id3v1len - 1; newpos = newpos & ~1; curpos = lseek(mpeg_file, 0, SEEK_CUR); ----- Original Message ----- From: "Hardeep Sidhu" <hardeeps_at_pobox.com> To: <rockbox_at_cool.haxx.se> Sent: Wednesday, August 21, 2002 10:02 PM Subject: Re: Track change silence > I spoke too soon, this patch doesn't fix the repeat bug. Still investigating... > > -Hardeep > > ----- Original Message ----- > From: "Hardeep Sidhu" <hardeeps_at_pobox.com> > To: <rockbox_at_cool.haxx.se> > Sent: Wednesday, August 21, 2002 8:59 PM > Subject: Re: Track change silence > > > > The patch below fixes this bug. The problem occurred when selecting the next > track > > just as it was being loaded into the buffer. The patch also fixes the bug where > > the first few seconds of the next track were repeated if it was already loaded in > > memory. > > > > -Hardeep > > Received on 2002-08-22 Page template was last modified "Tue Sep 7 00:00:02 2021" The Rockbox Crew -- Privacy Policy |