From 1f8ea9fe27313228e5df67ce6447830b5c30e5e3 Mon Sep 17 00:00:00 2001 From: Adam Sampson Date: Fri, 26 Aug 2016 13:42:03 +0100 Subject: Opus: update resume offset correctly while playing. The codec wasn't calling ci->set_offset() while decoding; as a result, the saved offset in ci.id3->offset was only updated at the start of the file and when seeking. To reproduce the problem in the simulator or on a real device: - Start playing an Opus file. - Let it play until 15s, then turn the player off. - Turn back on and resume playback. This'll resume correctly from 15s (using time-based resume, I think, as the offset was 0?). - Let it play until 30s, then turn the player off again. - Turn back on and resume playback. This'll resume from 15s, based on the initial position from last time, when it should resume from 30s. I believe this will also fix FS#12799 ("Resuming opus file from bookmark is not working correctly"). Change-Id: Iba67368e0029c968ef802693767e0722719bc38b --- docs/CREDITS | 1 + lib/rbcodec/codecs/opus.c | 1 + 2 files changed, 2 insertions(+) diff --git a/docs/CREDITS b/docs/CREDITS index 841f1b76e8..fa0fc5b582 100644 --- a/docs/CREDITS +++ b/docs/CREDITS @@ -653,6 +653,7 @@ Udo Schläpfer Åka Sikrom Thomas White Karl Huber +Adam Sampson The libmad team The wavpack team diff --git a/lib/rbcodec/codecs/opus.c b/lib/rbcodec/codecs/opus.c index 842803aa4f..058880c149 100644 --- a/lib/rbcodec/codecs/opus.c +++ b/lib/rbcodec/codecs/opus.c @@ -449,6 +449,7 @@ enum codec_status codec_run(void) } /* report progress */ + ci->set_offset((size_t) ci->curpos); ci->set_elapsed((granule_pos - header.preskip) / 48); /* Decode audio packets */ -- cgit