From 7d1adda602644eb3030a3ccf5b3506c339f67b3f Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Sat, 26 Jun 2010 13:39:33 +0000 Subject: ffmpeg plugin: fixed shorten support, fixed freezes on corrupted files git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@1786 90c681e8-e032-0410-971d-27865f9a5e38 --- src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) (limited to 'src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp') diff --git a/src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp b/src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp index 03e86c636..f770480bc 100644 --- a/src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp +++ b/src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp @@ -172,6 +172,11 @@ bool DecoderFFmpeg::initialize() m_totalTime = input()->isSequential() ? 0 : ic->duration * 1000 / AV_TIME_BASE; m_output_buf = (uint8_t *)av_malloc(AVCODEC_MAX_AUDIO_FRAME_SIZE * 3 / 2 + QMMP_BUFFER_SIZE); +#if (LIBAVCODEC_VERSION_INT >= ((52<<16)+(20<<8)+0)) + if(c->codec_id == CODEC_ID_SHORTEN) //ffmpeg bug workaround + m_totalTime = 0; +#endif + configure(c->sample_rate, c->channels, Qmmp::PCM_S16LE); m_bitrate = c->bit_rate; qDebug("DecoderFFmpeg: initialize succes"); @@ -191,6 +196,7 @@ int DecoderFFmpeg::bitrate() qint64 DecoderFFmpeg::read(char *audio, qint64 maxSize) { + qDebug("read"); m_skipBytes = 0; if (m_skip) { @@ -286,6 +292,8 @@ void DecoderFFmpeg::fillBuffer() while (m_skipBytes > 0) { m_output_at = ffmpeg_decode(m_output_buf); + if(m_output_at < 0) + break; m_skipBytes -= m_output_at; } @@ -302,18 +310,15 @@ void DecoderFFmpeg::fillBuffer() #else m_output_at = ffmpeg_decode(m_output_buf); #endif - if(m_output_at < 0) { - m_output_at = 0; - m_temp_pkt.size = 0; - continue; - } - else if(m_output_at == 0) - { + qWarning("DecoderFFmpeg: decoder error"); if(m_pkt.data) av_free_packet(&m_pkt); + m_pkt.data = 0; m_temp_pkt.size = 0; + m_output_at = 0; + break; } } } -- cgit v1.2.3-13-gbd6f