A modern Music Player Daemon based on Rockbox open source high quality audio player
libadwaita audio rust zig deno mpris rockbox mpd

Improve seeking in opus, tested on Sansa; not tested on a target with a disk.

Change-Id: I37c875c9cd014eb61fe5232dab0f4b8f15f057dd
Reviewed-on: http://gerrit.rockbox.org/319
Tested-by: Thiago Okada <thiago.mast3r@gmail.com>
Reviewed-by: Frederik Vestre <freqmod@gmail.com>
Tested-by: Frederik Vestre <freqmod@gmail.com>

+10 -7
+10 -7
lib/rbcodec/codecs/opus.c
··· 188 188 } 189 189 190 190 static int speex_seek_page_granule(int64_t pos, int64_t curpos, 191 - ogg_sync_state *oy, 192 - int64_t headerssize) 191 + ogg_sync_state *oy) 193 192 { 194 193 /* TODO: Someone may want to try to implement seek to packet, 195 194 instead of just to page (should be more accurate, not be any ··· 204 203 ogg_page og = {0,0,0,0}; 205 204 int64_t avgpagelen = -1; 206 205 int64_t lastgranule = -1; 207 - 206 + #if 0 208 207 if(abs(pos-curpos)>10000 && headerssize>0 && curoffset-headerssize>10000) { 209 208 /* if seeking for more that 10sec, 210 209 headersize is known & more than 10kb is played, ··· 252 251 } 253 252 } 254 253 } 255 - 254 + #endif 256 255 /* which way do we want to seek? */ 257 - 258 - if (curpos > pos) { /* backwards */ 256 + if (pos == 0) { /* start */ 257 + *curbyteoffset = 0; 258 + ci->seek_buffer(*curbyteoffset); 259 + ogg_sync_reset(oy); 260 + return 0; 261 + } else if (curpos > pos) { /* backwards */ 259 262 offset = seek_backwards(oy,&og,pos); 260 263 261 264 if (offset > 0) { ··· 364 367 365 368 LOGF("Opus seek page:%lld,%lld,%ld\n", 366 369 seek_target, page_granule, (long)param); 367 - speex_seek_page_granule(seek_target, page_granule, &oy, 0); 370 + speex_seek_page_granule(seek_target, page_granule, &oy); 368 371 } 369 372 370 373 ci->set_elapsed(param);