Hi,
I have a little problem with the anti-skip buffer. I 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.
Because I usually listen to dj mixes this is quite annoying since they are quite long and so a large part is being skipped.
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.
I think that rockbox may just stop reading the file on a read error and skip to the next file, which would make the anti-skip buffer a little useless. (unless maybe for reads that just take a long time without giving errors)
So I tried to find out what happens in the rockbox source 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.
Is what I found correct, or did I miss something in one of the read functions?
If I am correct, I suppose this is sort of a bug, and 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.