diff options
author | Frederik M.J. Vestre <freqmod@gmail.com> | 2012-09-25 19:17:00 +0200 |
---|---|---|
committer | Frederik Vestre <freqmod@gmail.com> | 2012-10-14 11:26:00 +0200 |
commit | 7a7d7a2f4ca1d2474df768e2698dc9e158ba1bb0 (patch) | |
tree | b1e81774f237ec22ecb905bed91fe7d598f1ebca /lib/rbcodec | |
parent | ab5879c5ea3508380a6ef43a01bbd465f816db00 (diff) | |
download | rockbox-7a7d7a2f4ca1d2474df768e2698dc9e158ba1bb0.tar.gz rockbox-7a7d7a2f4ca1d2474df768e2698dc9e158ba1bb0.zip |
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>
Diffstat (limited to 'lib/rbcodec')
-rw-r--r-- | lib/rbcodec/codecs/opus.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/lib/rbcodec/codecs/opus.c b/lib/rbcodec/codecs/opus.c index cf2d69738f..3eb316de68 100644 --- a/lib/rbcodec/codecs/opus.c +++ b/lib/rbcodec/codecs/opus.c | |||
@@ -188,8 +188,7 @@ static int64_t seek_backwards(ogg_sync_state *oy, ogg_page *og, | |||
188 | } | 188 | } |
189 | 189 | ||
190 | static int speex_seek_page_granule(int64_t pos, int64_t curpos, | 190 | static int speex_seek_page_granule(int64_t pos, int64_t curpos, |
191 | ogg_sync_state *oy, | 191 | ogg_sync_state *oy) |
192 | int64_t headerssize) | ||
193 | { | 192 | { |
194 | /* TODO: Someone may want to try to implement seek to packet, | 193 | /* TODO: Someone may want to try to implement seek to packet, |
195 | instead of just to page (should be more accurate, not be any | 194 | instead of just to page (should be more accurate, not be any |
@@ -204,7 +203,7 @@ static int speex_seek_page_granule(int64_t pos, int64_t curpos, | |||
204 | ogg_page og = {0,0,0,0}; | 203 | ogg_page og = {0,0,0,0}; |
205 | int64_t avgpagelen = -1; | 204 | int64_t avgpagelen = -1; |
206 | int64_t lastgranule = -1; | 205 | int64_t lastgranule = -1; |
207 | 206 | #if 0 | |
208 | if(abs(pos-curpos)>10000 && headerssize>0 && curoffset-headerssize>10000) { | 207 | if(abs(pos-curpos)>10000 && headerssize>0 && curoffset-headerssize>10000) { |
209 | /* if seeking for more that 10sec, | 208 | /* if seeking for more that 10sec, |
210 | headersize is known & more than 10kb is played, | 209 | headersize is known & more than 10kb is played, |
@@ -252,10 +251,14 @@ static int speex_seek_page_granule(int64_t pos, int64_t curpos, | |||
252 | } | 251 | } |
253 | } | 252 | } |
254 | } | 253 | } |
255 | 254 | #endif | |
256 | /* which way do we want to seek? */ | 255 | /* which way do we want to seek? */ |
257 | 256 | if (pos == 0) { /* start */ | |
258 | if (curpos > pos) { /* backwards */ | 257 | *curbyteoffset = 0; |
258 | ci->seek_buffer(*curbyteoffset); | ||
259 | ogg_sync_reset(oy); | ||
260 | return 0; | ||
261 | } else if (curpos > pos) { /* backwards */ | ||
259 | offset = seek_backwards(oy,&og,pos); | 262 | offset = seek_backwards(oy,&og,pos); |
260 | 263 | ||
261 | if (offset > 0) { | 264 | if (offset > 0) { |
@@ -364,7 +367,7 @@ enum codec_status codec_run(void) | |||
364 | 367 | ||
365 | LOGF("Opus seek page:%lld,%lld,%ld\n", | 368 | LOGF("Opus seek page:%lld,%lld,%ld\n", |
366 | seek_target, page_granule, (long)param); | 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 | ci->set_elapsed(param); | 373 | ci->set_elapsed(param); |