This is the bug/patch tracker for Rockbox. Click here for more information.
Quick links: Bugs · Patches · Rockbox frontpage
FS#7879 - Anti-skip buffer doesn't work correctly on read errors
|
DetailsI use my iHP-120 harddisk player with rockbox while jogging regularly, but sometimes the track just stops and the player instantly skips to the next track, presumably due to a read error.
I have the anti-skip buffer set to 10 minutes already, but I doubt it has actually been trying to read for that long because it can switch to the next track so fast. In the rockbox code, I found out that when the buffer runs out, audio_read_file in playback.c is called. For disk access it calls read() and if that fails it seems to skip to the next track (the log it does is "File ended %ldB early") In ata.c I found that the read is performed by ata_read_sectors, which does indeed have some mechanism to retry on errors, but only for READ_TIMEOUT time, which is only 5 seconds. After that an error is returned, and from what I understand, no retry is attempted after that, even though there may still be 9 minutes and 55 seconds left in the buffer. I think playback.c should know what was the cause of the read error to decide if it should try again or indeed skip to the next file. |
This task depends upon
tip 1: DO NOT USE A HARDDISK BASED PLAYER FOR SPORTS like jogging. Seriously. Get a flash based player for that stuff....
I still think that rockbox should play the entire buffer before skipping to the next file.
I've been using it for 3 years while jogging now, and the hard disk is still perfectly fine without bad sectors.
My ipod4g has been my jogging companion. It is rocking the country just fine.
READ_TIMEOUT in firmware/drivers/ata.c is always 5 seconds. If a read operation cannot succeed in 5 seconds, no further retries are made and failure is reported. The anti-skip buffer only helps if operations keep succeeding but are slow.