diff options
-rw-r--r-- | apps/codecs/libmusepack/mpc_decoder.c | 20 |
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); |