From 1bf8aa77a2f34cba93d42901736b2c5c5509b671 Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Mon, 5 Feb 2018 20:10:59 +0000 Subject: mpg123: skip resync errors git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@7834 90c681e8-e032-0410-971d-27865f9a5e38 --- src/plugins/Input/mpeg/decoder_mpg123.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'src/plugins/Input/mpeg/decoder_mpg123.cpp') diff --git a/src/plugins/Input/mpeg/decoder_mpg123.cpp b/src/plugins/Input/mpeg/decoder_mpg123.cpp index 4451ff47b..f69d05bca 100644 --- a/src/plugins/Input/mpeg/decoder_mpg123.cpp +++ b/src/plugins/Input/mpeg/decoder_mpg123.cpp @@ -67,6 +67,7 @@ DecoderMPG123::DecoderMPG123(QIODevice *i) : Decoder(i) m_frame_info.bitrate = 0; m_mpg123_encoding = MPG123_ENC_SIGNED_16; m_handle = 0; + m_resync_errors = 0; } DecoderMPG123::~DecoderMPG123() @@ -77,6 +78,7 @@ DecoderMPG123::~DecoderMPG123() bool DecoderMPG123::initialize() { + m_resync_errors = 0; if (input()->isSequential ()) //for streams only { TagExtractor extractor(input()); @@ -161,11 +163,25 @@ qint64 DecoderMPG123::read(unsigned char *data, qint64 size) { size_t done = 0; int err = mpg123_read(m_handle, data, size, &done); - if(err != MPG123_DONE && err != MPG123_OK) + if(err < 0) + { + err = mpg123_errcode(m_handle); + if(err == MPG123_RESYNC_FAIL && m_resync_errors < 10) + { + qWarning("DecoderMPG123: skipping resync error..."); + m_resync_errors++; + return done; + } + + qWarning("DecoderMPG123: decoder error: %s", mpg123_plain_strerror(err)); + return -1; + } + else if(err != MPG123_DONE && err != MPG123_OK) { qWarning("DecoderMPG123: decoder error: %s", mpg123_plain_strerror(err)); return -1; } + m_resync_errors = 0; mpg123_info(m_handle, &m_frame_info); return done; } -- cgit v1.2.3-13-gbd6f