summaryrefslogtreecommitdiff
path: root/apps/codecs/smaf.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/codecs/smaf.c')
-rw-r--r--apps/codecs/smaf.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/apps/codecs/smaf.c b/apps/codecs/smaf.c
index 33a2a4b403..6763e95001 100644
--- a/apps/codecs/smaf.c
+++ b/apps/codecs/smaf.c
@@ -409,6 +409,28 @@ next_track:
409 ci->seek_buffer(firstblockposn); 409 ci->seek_buffer(firstblockposn);
410 ci->seek_complete(); 410 ci->seek_complete();
411 411
412 /* make sure we're at the correct offset */
413 if (bytesdone > (uint32_t) firstblockposn)
414 {
415 /* Round down to previous block */
416 struct pcm_pos *newpos = codec->get_seek_pos(bytesdone - firstblockposn,
417 PCM_SEEK_POS, &read_buffer);
418
419 if (newpos->pos > format.numbytes)
420 goto done;
421 if (ci->seek_buffer(firstblockposn + newpos->pos))
422 {
423 bytesdone = newpos->pos;
424 decodedsamples = newpos->samples;
425 }
426 ci->seek_complete();
427 }
428 else
429 {
430 /* already where we need to be */
431 bytesdone = 0;
432 }
433
412 /* The main decoder loop */ 434 /* The main decoder loop */
413 endofstream = 0; 435 endofstream = 0;
414 436
@@ -418,7 +440,8 @@ next_track:
418 break; 440 break;
419 441
420 if (ci->seek_time) { 442 if (ci->seek_time) {
421 struct pcm_pos *newpos = codec->get_seek_pos(ci->seek_time, &read_buffer); 443 struct pcm_pos *newpos = codec->get_seek_pos(ci->seek_time, PCM_SEEK_TIME,
444 &read_buffer);
422 445
423 if (newpos->pos > format.numbytes) 446 if (newpos->pos > format.numbytes)
424 break; 447 break;