From 402f9acb5ea4111d784d535db87d49681857f390 Mon Sep 17 00:00:00 2001 From: Andrew Udvare Date: Sun, 7 Jan 2024 01:41:04 -0500 Subject: [PATCH] Fix compilation with newer ffmpeg versions --- Core/AVIDump.cpp | 4 ++++ Core/HLE/sceAtrac.cpp | 8 +++++++- Core/HLE/sceMpeg.cpp | 4 ++++ Core/HW/MediaEngine.cpp | 17 ++++++++++++++--- Core/HW/SimpleAudioDec.cpp | 1 + Core/HW/SimpleAudioDec.h | 12 ++++++++++++ 6 files changed, 42 insertions(+), 4 deletions(-) diff --git a/Core/AVIDump.cpp b/Core/AVIDump.cpp index 99c74af7bf..7c9576d292 100644 --- a/Core/AVIDump.cpp +++ b/Core/AVIDump.cpp @@ -45,6 +45,10 @@ extern "C" { #define av_frame_free avcodec_free_frame #endif +#if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(59, 16, 100) +#define AVCodec const AVCodec +#endif + static AVFormatContext *s_format_context = nullptr; static AVCodecContext *s_codec_context = nullptr; static AVStream *s_stream = nullptr; diff --git a/Core/HLE/sceAtrac.cpp b/Core/HLE/sceAtrac.cpp index 86017681b6..2bef0b4327 100644 --- a/Core/HLE/sceAtrac.cpp +++ b/Core/HLE/sceAtrac.cpp @@ -126,8 +126,14 @@ extern "C" { #include "libavformat/avformat.h" #include "libswresample/swresample.h" #include "libavutil/samplefmt.h" +#include "libavcodec/avcodec.h" +#include "libavutil/version.h" } +#if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(59, 16, 100) +#define AVCodec const AVCodec +#endif + #endif // USE_FFMPEG enum AtracDecodeResult { @@ -1858,7 +1864,7 @@ int __AtracSetContext(Atrac *atrac) { atrac->ReleaseFFMPEGContext(); } - const AVCodec *codec = avcodec_find_decoder(ff_codec); + AVCodec *codec = avcodec_find_decoder(ff_codec); atrac->codecCtx_ = avcodec_alloc_context3(codec); if (atrac->codecType_ == PSP_MODE_AT_3) { diff --git a/Core/HLE/sceMpeg.cpp b/Core/HLE/sceMpeg.cpp index 8e4586a6d0..7672eb2471 100644 --- a/Core/HLE/sceMpeg.cpp +++ b/Core/HLE/sceMpeg.cpp @@ -111,7 +111,11 @@ extern "C" { #include "libavformat/avformat.h" #include "libavutil/imgutils.h" #include "libswscale/swscale.h" +#include "libavcodec/avcodec.h" } +#if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(59, 16, 100) +#define AVCodec const AVCodec +#endif static AVPixelFormat pmp_want_pix_fmt; #endif diff --git a/Core/HW/MediaEngine.cpp b/Core/HW/MediaEngine.cpp index fa4b8191c4..3e4c187aa2 100644 --- a/Core/HW/MediaEngine.cpp +++ b/Core/HW/MediaEngine.cpp @@ -42,6 +42,11 @@ extern "C" { #endif // USE_FFMPEG #ifdef USE_FFMPEG + +#if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(59, 16, 100) +#define AVCodec const AVCodec +#endif + static AVPixelFormat getSwsFormat(int pspFormat) { switch (pspFormat) @@ -394,7 +399,7 @@ bool MediaEngine::addVideoStream(int streamNum, int streamId) { // no need to add an existing stream. if ((u32)streamNum < m_pFormatCtx->nb_streams) return true; - const AVCodec *h264_codec = avcodec_find_decoder(AV_CODEC_ID_H264); + AVCodec *h264_codec = avcodec_find_decoder(AV_CODEC_ID_H264); if (!h264_codec) return false; AVStream *stream = avformat_new_stream(m_pFormatCtx, h264_codec); @@ -409,14 +414,20 @@ bool MediaEngine::addVideoStream(int streamNum, int streamId) { stream->codecpar->codec_id = AV_CODEC_ID_H264; #else stream->request_probe = 0; -#endif stream->need_parsing = AVSTREAM_PARSE_FULL; +#endif // We could set the width here, but we don't need to. if (streamNum >= m_expectedVideoStreams) { ++m_expectedVideoStreams; } - m_codecsToClose.push_back(stream->codec); +#if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(59, 16, 100) + AVCodec *codec = avcodec_find_decoder(stream->codecpar->codec_id); + AVCodecContext *codecCtx = avcodec_alloc_context3(codec); +#else + AVCodecContext *codecCtx = stream->codec; +#endif + m_codecsToClose.push_back(codecCtx); return true; } } diff --git a/Core/HW/SimpleAudioDec.cpp b/Core/HW/SimpleAudioDec.cpp index 8f250abdd8..7994a7f402 100644 --- a/Core/HW/SimpleAudioDec.cpp +++ b/Core/HW/SimpleAudioDec.cpp @@ -31,6 +31,7 @@ extern "C" { #include "libavformat/avformat.h" #include "libswresample/swresample.h" #include "libavutil/samplefmt.h" +#include "libavcodec/avcodec.h" } #endif // USE_FFMPEG diff --git a/Core/HW/SimpleAudioDec.h b/Core/HW/SimpleAudioDec.h index ec792c9031..52a78bf3b4 100644 --- a/Core/HW/SimpleAudioDec.h +++ b/Core/HW/SimpleAudioDec.h @@ -27,6 +27,18 @@ struct AVCodec; struct AVCodecContext; struct SwrContext; +#ifdef USE_FFMPEG + +extern "C" { +#include "libavutil/version.h" +}; + +#if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(59, 16, 100) +#define AVCodec const AVCodec +#endif + +#endif + // Wraps FFMPEG for audio decoding in a nice interface. // Decodes packet by packet - does NOT demux.