From 9b963dd173779f35317e9476eb341f2c82b5772b Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Mon, 1 Aug 2016 06:18:44 +0000 Subject: 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 --- src/plugins/Input/mad/decoder_mad.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/plugins') 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); } -- cgit v1.2.3-13-gbd6f