diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2016-08-01 06:18:44 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2016-08-01 06:18:44 +0000 |
| commit | 9b963dd173779f35317e9476eb341f2c82b5772b (patch) | |
| tree | dde6e0ff7ac1886d88a5facfce61a8bb4361b4cc | |
| parent | 0e5678ebc94b223d933d32a17710ae32e688af30 (diff) | |
| download | qmmp-9b963dd173779f35317e9476eb341f2c82b5772b.tar.gz qmmp-9b963dd173779f35317e9476eb341f2c82b5772b.tar.bz2 qmmp-9b963dd173779f35317e9476eb341f2c82b5772b.zip | |
mpeg plugin: fixed duration calculation
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@6616 90c681e8-e032-0410-971d-27865f9a5e38
| -rw-r--r-- | src/plugins/Input/mad/decoder_mad.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/plugins/Input/mad/decoder_mad.cpp b/src/plugins/Input/mad/decoder_mad.cpp index 69a4ef859..79e266ed5 100644 --- a/src/plugins/Input/mad/decoder_mad.cpp +++ b/src/plugins/Input/mad/decoder_mad.cpp @@ -202,6 +202,7 @@ bool DecoderMAD::findHeader() mad_timer_t duration = mad_timer_zero; struct mad_header header; mad_header_init (&header); + uint id3v2Size = 0; forever { @@ -232,7 +233,10 @@ bool DecoderMAD::findHeader() uint tagSize = findID3v2((uchar *)m_stream.this_frame, (ulong) (m_stream.bufend - m_stream.this_frame)); if (tagSize > 0) + { mad_stream_skip(&m_stream, tagSize); + id3v2Size = tagSize; + } continue; } else if (m_stream.error == MAD_ERROR_BUFLEN || MAD_RECOVERABLE(m_stream.error)) @@ -292,7 +296,7 @@ bool DecoderMAD::findHeader() if (!is_vbr && !input()->isSequential()) { - double time = (input()->size() * 8.0) / (header.bitrate); + double time = ((input()->size() - id3v2Size) * 8.0) / (header.bitrate); double timefrac = (double)time - ((long)(time)); mad_timer_set(&duration, (long)time, (long)(timefrac*100), 100); } |
