diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2016-10-30 10:52:30 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2016-10-30 10:52:30 +0000 |
| commit | a97fb9120aa7c177cc7018c64cbc4153a5234ae8 (patch) | |
| tree | c645e5f712dd33235066f0a95e562694caf2c3c1 /src/plugins | |
| parent | 640afe96b1b2f53d579b93c46d5d9e760502daa9 (diff) | |
| download | qmmp-a97fb9120aa7c177cc7018c64cbc4153a5234ae8.tar.gz qmmp-a97fb9120aa7c177cc7018c64cbc4153a5234ae8.tar.bz2 qmmp-a97fb9120aa7c177cc7018c64cbc4153a5234ae8.zip | |
added ffmpeg 3.2 support
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@6831 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins')
| -rw-r--r-- | src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp | 23 |
1 files changed, 9 insertions, 14 deletions
diff --git a/src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp b/src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp index 0e9ca5781..eb3371e32 100644 --- a/src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp +++ b/src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp @@ -376,26 +376,23 @@ qint64 DecoderFFmpeg::ffmpeg_decode() #endif #if (LIBAVCODEC_VERSION_INT >= ((57<<16)+(48<<8)+0)) //ffmpeg-3.1: 57.48.101 - int err = 0; - if((err = avcodec_send_packet(c, &m_temp_pkt)) < 0) + int err = avcodec_send_packet(c, &m_temp_pkt); + if(err != 0 && err != AVERROR(EAGAIN) && err != AVERROR(EINVAL)) { - if(err == EAGAIN) //try again - return 0; - else - { - qWarning("DecoderFFmpeg: avcodec_send_packet error: %d", err); - return -1; - } + qWarning("DecoderFFmpeg: avcodec_send_packet error: %d", err); + return -1; } + + int l = (err == AVERROR(EAGAIN)) ? 0 : m_temp_pkt.size; + if((err = avcodec_receive_frame(c, m_decoded_frame)) < 0) { - if(err == EAGAIN) //try again + if(err == AVERROR(EAGAIN)) //try again return 0; qWarning("DecoderFFmpeg: avcodec_receive_frame error: %d", err); return -1; } got_frame = av_frame_get_pkt_size(m_decoded_frame); - int l = m_temp_pkt.size; #else int l = avcodec_decode_audio4(c, m_decoded_frame, &got_frame, &m_temp_pkt); #endif @@ -443,7 +440,7 @@ void DecoderFFmpeg::seek(qint64 pos) void DecoderFFmpeg::fillBuffer() { - while(!m_output_at) + while(!m_output_at || m_skipBytes > 0) { if(!m_temp_pkt.size) { @@ -478,8 +475,6 @@ void DecoderFFmpeg::fillBuffer() ic->streams[m_pkt.stream_index]->time_base.den); m_skipBytes = (m_seekTime - rescaledPts) * c->sample_rate * 4 / AV_TIME_BASE; } - else - m_skipBytes = 0; m_seekTime = 0; } #if (LIBAVCODEC_VERSION_INT >= ((55<<16)+(34<<8)+0)) //libav 10 |
