summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/codecs/libmusepack/mpc_decoder.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/apps/codecs/libmusepack/mpc_decoder.c b/apps/codecs/libmusepack/mpc_decoder.c
index f6aab66494..08a491ea3e 100644
--- a/apps/codecs/libmusepack/mpc_decoder.c
+++ b/apps/codecs/libmusepack/mpc_decoder.c
@@ -1609,18 +1609,15 @@ mpc_bool_t mpc_decoder_seek_sample(mpc_decoder *d, mpc_int64_t destsample)
1609 // seek to the first frame 1609 // seek to the first frame
1610 mpc_decoder_seek_to(d, fpos); 1610 mpc_decoder_seek_to(d, fpos);
1611 1611
1612 // reset number of decoded frames
1613 d->DecodedFrames = 0;
1614
1615 // jump to the last frame via parsing, updating seek table 1612 // jump to the last frame via parsing, updating seek table
1616 d->SeekTable[0] = (mpc_uint32_t)fpos; 1613 d->SeekTable[0] = (mpc_uint32_t)fpos;
1617 d->SeekTableCounter = d->SeekTable[0]; 1614 d->SeekTableCounter = 0;
1618 for (d->DecodedFrames = 1; d->DecodedFrames < lastFrame; d->DecodedFrames++) 1615 for (d->DecodedFrames = 0; d->DecodedFrames < lastFrame; d->DecodedFrames++)
1619 { 1616 {
1620 d->SeekTableCounter += mpc_decoder_jump_frame(d); 1617 d->SeekTableCounter += mpc_decoder_jump_frame(d);
1621 if (0 == (d->DecodedFrames % d->SeekTable_Step)) 1618 if (0 == ((d->DecodedFrames+1) % d->SeekTable_Step))
1622 { 1619 {
1623 d->SeekTable[d->DecodedFrames/d->SeekTable_Step] = d->SeekTableCounter; 1620 d->SeekTable[(d->DecodedFrames+1)/d->SeekTable_Step] = d->SeekTableCounter;
1624 d->MaxDecodedFrames = d->DecodedFrames; 1621 d->MaxDecodedFrames = d->DecodedFrames;
1625 d->SeekTableCounter = 0; 1622 d->SeekTableCounter = 0;
1626 } 1623 }
@@ -1702,6 +1699,15 @@ mpc_bool_t mpc_decoder_seek_sample(mpc_decoder *d, mpc_int64_t destsample)
1702 else if (FrameBitCnt != d->FwdJumpInfo ) 1699 else if (FrameBitCnt != d->FwdJumpInfo )
1703 // Bug in perform_jump; 1700 // Bug in perform_jump;
1704 return FALSE; 1701 return FALSE;
1702
1703 // update seek table, if there new entries to fill
1704 d->SeekTableCounter += d->FwdJumpInfo + 20;
1705 if (0 == (d->DecodedFrames+1) % d->SeekTable_Step)
1706 {
1707 d->SeekTable[(d->DecodedFrames+1)/d->SeekTable_Step] = d->SeekTableCounter;
1708 d->MaxDecodedFrames = d->DecodedFrames;
1709 d->SeekTableCounter = 0;
1710 }
1705 1711
1706 // update buffer 1712 // update buffer
1707 mpc_decoder_update_buffer(d); 1713 mpc_decoder_update_buffer(d);