From d4affcc0cbde9d77ce6bea6029715414c37618a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sl=C3=A1vek=20Banko?= Date: Wed, 25 Aug 2021 16:35:47 +0200 Subject: [PATCH] plugins/ffmpeg_decoder: Add support for older FFmpeg API. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Slávek Banko --- .../plugins/ffmpeg_decoder/ffmpeg_decoder.cpp | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/akode/plugins/ffmpeg_decoder/ffmpeg_decoder.cpp b/akode/plugins/ffmpeg_decoder/ffmpeg_decoder.cpp index 4d0506c..43f5a35 100644 --- a/akode/plugins/ffmpeg_decoder/ffmpeg_decoder.cpp +++ b/akode/plugins/ffmpeg_decoder/ffmpeg_decoder.cpp @@ -18,6 +18,8 @@ Boston, MA 02110-1301, USA. */ +#define __STDC_CONSTANT_MACROS + #include "akodelib.h" // #ifdef HAVE_FFMPEG @@ -236,7 +238,11 @@ void FFMPEGDecoder::closeFile() { #endif } if( d->packetSize > 0 ) { +#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(57, 7, 0) + av_free_packet(&d->packet); +#else av_packet_unref( &d->packet ); +#endif d->packetSize = 0; } @@ -259,7 +265,11 @@ bool FFMPEGDecoder::readPacket() { do { av_init_packet(&d->packet); if ( av_read_frame(d->ic, &d->packet) < 0 ) { +#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(57, 7, 0) + av_free_packet(&d->packet); +#else av_packet_unref( &d->packet ); +#endif d->packetSize = 0; d->packetData = 0; return false; @@ -269,7 +279,11 @@ bool FFMPEGDecoder::readPacket() { d->packetData = d->packet.data; return true; } +#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(57, 7, 0) + av_free_packet(&d->packet); +#else av_packet_unref(&d->packet); +#endif } while (true); return false; @@ -313,7 +327,11 @@ bool FFMPEGDecoder::readFrame(AudioFrame* frame) assert(d->packet.stream_index == d->audioStream); retry: +#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(55, 45, 101) + AVFrame *decodeFrame = avcodec_alloc_frame(); +#else AVFrame *decodeFrame = av_frame_alloc(); +#endif if (!decodeFrame) { return false; } @@ -363,12 +381,24 @@ retry: default: assert(false); } +#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(54, 28, 0) + av_free(decodeFrame); +#elif LIBAVCODEC_VERSION_INT < AV_VERSION_INT(55, 45, 101) + avcodec_free_frame(&decodeFrame); +#else av_frame_free(&decodeFrame); +#endif if (length == 0) return readFrame(frame); // std::cout << "akode: FFMPEG: Frame length: " << length << "\n"; if( d->packetSize <= 0 ) + { +#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(57, 7, 0) + av_free_packet(&d->packet); +#else av_packet_unref( &d->packet ); +#endif + } frame->pos = (d->position*1000)/d->config.sample_rate; d->position += length;