diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2019-02-02 17:26:59 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2019-02-02 17:26:59 +0000 |
| commit | 13c8cfbab0030c92ef65a96668268b553a4d7541 (patch) | |
| tree | efccabac85e2dc8b1a58c76352251f977a92acce /src/plugins | |
| parent | eb86dfefbfa5ffaf93d6cd7724d421685229e84d (diff) | |
| download | qmmp-13c8cfbab0030c92ef65a96668268b553a4d7541.tar.gz qmmp-13c8cfbab0030c92ef65a96668268b553a4d7541.tar.bz2 qmmp-13c8cfbab0030c92ef65a96668268b553a4d7541.zip | |
ffmpeg: fixed issue with ape files (#985)
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@8664 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins')
| -rw-r--r-- | src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp b/src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp index eeb61fb81..83b26ac5b 100644 --- a/src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp +++ b/src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp @@ -329,6 +329,7 @@ qint64 DecoderFFmpeg::read(unsigned char *audio, qint64 maxSize) if(!m_output_at) return 0; + qint64 len = qMin(m_output_at, maxSize); if(av_sample_fmt_is_planar(c->sample_fmt) && m_channels > 1) @@ -371,7 +372,9 @@ qint64 DecoderFFmpeg::ffmpeg_decode() #endif #if (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57,48,0)) //ffmpeg-3.1: 57.48.101 - int err = avcodec_send_packet(c, &m_temp_pkt); + int err = 0; + if(m_temp_pkt.data) + err = avcodec_send_packet(c, &m_temp_pkt); if(err != 0 && err != AVERROR(EAGAIN) && err != AVERROR(EINVAL)) { qWarning("DecoderFFmpeg: avcodec_send_packet error: %d", err); @@ -442,7 +445,7 @@ void DecoderFFmpeg::fillBuffer() if (av_read_frame(ic, &m_pkt) < 0) { m_temp_pkt.size = 0; - break; + m_temp_pkt.data = nullptr; } m_temp_pkt.size = m_pkt.size; m_temp_pkt.data = m_pkt.data; @@ -523,6 +526,10 @@ void DecoderFFmpeg::fillBuffer() } continue; } + else if(m_output_at == 0 && !m_pkt.data) + { + return; + } else if(m_output_at == 0) { if(m_pkt.data) |
