summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Ryabinin <ryabinin.a.a@gmail.com>2013-11-09 21:42:18 +0400
committerAndrew Ryabinin <ryabinin.a.a@gmail.com>2013-11-18 07:45:59 +0100
commitb770f639346fa8a40d07b9dcc66b3e378210b0a9 (patch)
treee26b027a27e27d8404e5930f78ad09e8edc98fa3
parent8b0603954127caa46c5425f29c953d1a126cfb64 (diff)
downloadrockbox-b770f639346fa8a40d07b9dcc66b3e378210b0a9.tar.gz
rockbox-b770f639346fa8a40d07b9dcc66b3e378210b0a9.tar.bz2
rockbox-b770f639346fa8a40d07b9dcc66b3e378210b0a9.zip
flac: fix seeking.
As comment in code states: "It is possible for our seek to land in the middle of audio data that looks exactly like a frame header from a future version of an encoder. When that happens, frame_sync() will return false. But there is a remote possibility that it is properly synced at such a "future-codec frame", so to make sure, we wait to see several "unparseable" errors in a row before bailing out." Currently we wait for 10 "unparseable" errors. libFLAC waits for 20. But I've got a valid flac+cue, wherein switching to certain track gave me 24 "unparsaeable" errors. Therefore I increased unparseable_count to 30. Change-Id: I4e97a5385c729adf3d5075d41ea312622c69e548 Reviewed-on: http://gerrit.rockbox.org/658 Reviewed-by: Michael Giacomelli <giac2000@hotmail.com> Reviewed-by: Boris Gjenero <boris.gjenero@gmail.com> Tested-by: Andrew Ryabinin <ryabinin.a.a@gmail.com> Reviewed-by: Andrew Ryabinin <ryabinin.a.a@gmail.com>
-rw-r--r--lib/rbcodec/codecs/flac.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/lib/rbcodec/codecs/flac.c b/lib/rbcodec/codecs/flac.c
index 3c5545df08..3390c24a2c 100644
--- a/lib/rbcodec/codecs/flac.c
+++ b/lib/rbcodec/codecs/flac.c
@@ -352,7 +352,7 @@ static bool flac_seek(FLACContext* fc, uint32_t target_sample) {
unsigned unparseable_count;
bool got_a_frame = false;
for(unparseable_count = 0; !got_a_frame
- && unparseable_count < 10; unparseable_count++) {
+ && unparseable_count < 30; unparseable_count++) {
if(frame_sync(fc))
got_a_frame = true;
}