From 973f0046cf0dad1a5c5d847aaa02c8bfb21b5804 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Fri, 2 Sep 2022 10:26:12 +0200 Subject: [PATCH] ffmpeg 5.1 compat -- closes #51 --- src/xjadeo/ffcompat.h | 11 +++++++++++ src/xjadeo/xjadeo.c | 28 +++++++++++----------------- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src/xjadeo/ffcompat.h b/src/xjadeo/ffcompat.h index b60baad..4aadde9 100644 --- a/src/xjadeo/ffcompat.h +++ b/src/xjadeo/ffcompat.h @@ -151,5 +151,16 @@ register_codecs_compat () #endif } +static inline void +maybe_avcodec_flush_buffers(AVCodecContext *avctx) +{ +#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(59, 26, 100) + if (avctx->codec->flush) { + avcodec_flush_buffers(avctx); + } +#else + avcodec_flush_buffers(avctx); +#endif +} #endif /* FFCOMPAT_H */ diff --git a/src/xjadeo/xjadeo.c b/src/xjadeo/xjadeo.c index d626f92..a8807f3 100644 --- a/src/xjadeo/xjadeo.c +++ b/src/xjadeo/xjadeo.c @@ -575,9 +575,7 @@ static int seek_frame (AVPacket *packet, int64_t framenumber) { seek = av_seek_frame (pFormatCtx, videoStream, fidx[framenumber].seekpts, AVSEEK_FLAG_BACKWARD); } - if (pCodecCtx->codec->flush) { - avcodec_flush_buffers (pCodecCtx); - } + maybe_avcodec_flush_buffers (pCodecCtx); if (seek < 0) { if (!want_quiet) @@ -915,9 +913,7 @@ static int index_frames () { error |= 16; break; } - if (pCodecCtx->codec->flush) { - avcodec_flush_buffers (pCodecCtx); - } + maybe_avcodec_flush_buffers (pCodecCtx); int err = 0; int bailout = 100; @@ -1053,9 +1049,7 @@ static int index_frames () { printf("NOBYTE 2\n"); break; } - if (pCodecCtx->codec->flush) { - avcodec_flush_buffers (pCodecCtx); - } + maybe_avcodec_flush_buffers (pCodecCtx); int64_t pts = AV_NOPTS_VALUE; while (!got_pic) { @@ -1118,9 +1112,7 @@ static int index_frames () { } else { av_seek_frame (pFormatCtx, videoStream, fidx[i].seekpts, AVSEEK_FLAG_BACKWARD); } - if (pCodecCtx->codec->flush) { - avcodec_flush_buffers (pCodecCtx); - } + maybe_avcodec_flush_buffers (pCodecCtx); while (!got_pic) { if (av_read_frame (pFormatCtx, &packet) < 0) { @@ -1192,9 +1184,7 @@ static int index_frames () { } av_seek_frame (pFormatCtx, videoStream, 0, AVSEEK_FLAG_BACKWARD); - if (pCodecCtx->codec->flush) { - avcodec_flush_buffers (pCodecCtx); - } + maybe_avcodec_flush_buffers (pCodecCtx); if (!error) { scan_complete = 1; } @@ -1271,8 +1261,12 @@ static void clear_info () { int open_movie (char* file_name) { int i; - AVCodec *pCodec; - AVStream *av_stream; +#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(59, 0, 100) + AVCodec* pCodec; +#else + AVCodec const* pCodec; +#endif + AVStream* av_stream; if (pFrameFMT) { close_movie ();