aboutsummaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/Input/mad/decoder_mad.cpp6
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);
}