# HG changeset patch # User LocutusOfBorg # Date 1644075770 18000 # Node ID 8fd36e1b66edcbab60b5feb6e1dae3366f1e2ad9 # Parent b0fe8c8d0bb5f0537efc77956f442411e49aa7e4 avcodec 59+ compatibility diff -r b0fe8c8d0bb5 -r 8fd36e1b66ed QTfrontend/util/LibavInteraction.cpp --- a/QTfrontend/util/LibavInteraction.cpp Mon Aug 10 12:56:53 2020 +0300 +++ b/QTfrontend/util/LibavInteraction.cpp Sat Feb 05 10:42:50 2022 -0500 @@ -73,7 +73,11 @@ QMap formats; // test if given format supports given codec +#if LIBAVCODEC_VERSION_MAJOR >= 59 +bool FormatQueryCodec(const AVOutputFormat *ofmt, enum AVCodecID codec_id) +#else bool FormatQueryCodec(AVOutputFormat *ofmt, enum AVCodecID codec_id) +#endif { #if LIBAVFORMAT_VERSION_MAJOR >= 54 return avformat_query_codec(ofmt, codec_id, FF_COMPLIANCE_NORMAL) == 1; @@ -86,12 +90,20 @@ LibavInteraction::LibavInteraction() : QObject() { +#if LIBAVCODEC_VERSION_MAJOR < 59 // initialize libav and register all codecs and formats av_register_all(); +#endif // get list of all codecs +#if LIBAVCODEC_VERSION_MAJOR >= 59 + const AVCodec* pCodec = NULL; + void* i = 0; + while ((pCodec = av_codec_iterate(&i))) +#else AVCodec* pCodec = NULL; while ((pCodec = av_codec_next(pCodec))) +#endif { if (!av_codec_is_encoder(pCodec)) continue; @@ -179,8 +191,14 @@ } // get list of all formats +#if LIBAVCODEC_VERSION_MAJOR >= 59 + const AVOutputFormat* pFormat = NULL; + i = 0; + while ((pFormat = av_muxer_iterate(&i))) +#else AVOutputFormat* pFormat = NULL; while ((pFormat = av_oformat_next(pFormat))) +#endif { if (!pFormat->extensions) continue; @@ -296,12 +314,22 @@ AVStream* pStream = pContext->streams[i]; if (!pStream) continue; +#if LIBAVCODEC_VERSION_MAJOR >= 59 + const AVCodec *st_codec = avcodec_find_decoder(pContext->streams[i]->codecpar->codec_id); + AVCodecContext* pCodec = avcodec_alloc_context3(st_codec); + avcodec_parameters_to_context(pCodec, pContext->streams[i]->codecpar); +#else AVCodecContext* pCodec = pContext->streams[i]->codec; +#endif if (!pCodec) continue; +#if LIBAVCODEC_VERSION_MAJOR >= 59 + const AVCodec* pDecoder = avcodec_find_decoder(pCodec->codec_id); +#else AVCodec* pDecoder = avcodec_find_decoder(pCodec->codec_id); +#endif QString decoderName = pDecoder ? pDecoder->name : tr("unknown"); if (pCodec->codec_type == AVMEDIA_TYPE_VIDEO) { diff -r b0fe8c8d0bb5 -r 8fd36e1b66ed hedgewars/avwrapper/avwrapper.c --- a/hedgewars/avwrapper/avwrapper.c Mon Aug 10 12:56:53 2020 +0300 +++ b/hedgewars/avwrapper/avwrapper.c Sat Feb 05 10:42:50 2022 -0500 @@ -27,6 +27,10 @@ #include "libavutil/avutil.h" #include "libavutil/mathematics.h" +#if LIBAVCODEC_VERSION_MAJOR >= 59 +#include +#endif + #if (defined _MSC_VER) #define AVWRAP_DECL __declspec(dllexport) #elif ((__GNUC__ >= 3) && (!__EMX__) && (!sun)) @@ -171,7 +175,13 @@ } g_pAStream->id = 1; +#if LIBAVCODEC_VERSION_MAJOR >= 59 + const AVCodec *audio_st_codec = avcodec_find_decoder(g_pAStream->codecpar->codec_id); + g_pAudio = avcodec_alloc_context3(audio_st_codec); + avcodec_parameters_to_context(g_pAudio, g_pAStream->codecpar); +#else g_pAudio = g_pAStream->codec; +#endif avcodec_get_context_defaults3(g_pAudio, g_pACodec); g_pAudio->codec_id = g_pACodec->id; @@ -279,7 +289,13 @@ if (!g_pVStream) return FatalError("Could not allocate video stream"); +#if LIBAVCODEC_VERSION_MAJOR >= 59 + const AVCodec *video_st_codec = avcodec_find_decoder(g_pVStream->codecpar->codec_id); + g_pVideo = avcodec_alloc_context3(video_st_codec); + avcodec_parameters_to_context(g_pVideo, g_pVStream->codecpar); +#else g_pVideo = g_pVStream->codec; +#endif avcodec_get_context_defaults3(g_pVideo, g_pVCodec); g_pVideo->codec_id = g_pVCodec->id; @@ -499,8 +515,10 @@ g_Framerate.den = FramerateDen; g_VQuality = VQuality; +#if LIBAVCODEC_VERSION_MAJOR < 59 // initialize libav and register all codecs and formats av_register_all(); +#endif // find format g_pFormat = av_guess_format(pFormatName, NULL, NULL); @@ -522,8 +540,11 @@ strncpy(ext, g_pFormat->extensions, 16); ext[15] = 0; ext[strcspn(ext,",")] = 0; +#if LIBAVCODEC_VERSION_MAJOR >= 59 + snprintf(g_pContainer->url, sizeof(g_pContainer->url), "%s.%s", pFilename, ext); +#else snprintf(g_pContainer->filename, sizeof(g_pContainer->filename), "%s.%s", pFilename, ext); - +#endif // find codecs g_pVCodec = avcodec_find_encoder_by_name(pVCodecName); g_pACodec = avcodec_find_encoder_by_name(pACodecName); @@ -560,13 +581,22 @@ return FatalError("No video, no audio, aborting..."); // write format info to log +#if LIBAVCODEC_VERSION_MAJOR >= 59 + av_dump_format(g_pContainer, 0, g_pContainer->url, 1); +#else av_dump_format(g_pContainer, 0, g_pContainer->filename, 1); +#endif // open the output file, if needed if (!(g_pFormat->flags & AVFMT_NOFILE)) { +#if LIBAVCODEC_VERSION_MAJOR >= 59 + if (avio_open(&g_pContainer->pb, g_pContainer->url, AVIO_FLAG_WRITE) < 0) + return FatalError("Could not open output file (%s)", g_pContainer->url); +#else if (avio_open(&g_pContainer->pb, g_pContainer->filename, AVIO_FLAG_WRITE) < 0) return FatalError("Could not open output file (%s)", g_pContainer->filename); +#endif } g_pVFrame->pts = -1;