astro/celestia: compatibility with ffmpeg 9.0

Kirill A. Korinsky <[email protected]>
Newsgroups gmane.os.openbsd.ports
Message-ID <[email protected]>
Antoine,

I'd like to backport from upstream a diff to fix ffmpeg 9.0 compatibility in
astro/celestia.

Build tested against ffmpeg-9.0 and ffmpeg-8.1.2

Ok?

Index: Makefile
===================================================================
RCS file: /home/cvs/ports/astro/celestia/Makefile,v
diff -u -p -r1.63 Makefile
--- Makefile	25 Mar 2026 14:51:54 -0000	1.63
+++ Makefile	12 Aug 2026 22:27:01 -0000
@@ -5,6 +5,7 @@ GH_PROJECT=		Celestia
 GH_COMMIT=		504e54ca7decb483c81f76357ada8bd95a7b0f47
 
 DISTNAME=		celestia-1.7.0pre20260319
+REVISION=		0
 EPOCH=			0
 
 SHARED_LIBS +=	celestia                  0.0 # 0.0
Index: patches/patch-src_celestia_ffmpegcapture_cpp
===================================================================
RCS file: patches/patch-src_celestia_ffmpegcapture_cpp
diff -N patches/patch-src_celestia_ffmpegcapture_cpp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_celestia_ffmpegcapture_cpp	12 Aug 2026 22:30:05 -0000
@@ -0,0 +1,61 @@
+https://github.com/CelestiaProject/Celestia/commit/c2152be2385429660a2c02351110a8af08db6df8
+
+Index: src/celestia/ffmpegcapture.cpp
+--- src/celestia/ffmpegcapture.cpp.orig
++++ src/celestia/ffmpegcapture.cpp
+@@ -98,7 +98,8 @@ bool FFMPEGCapturePrivate::init(const std::filesystem:
+ 
+ bool FFMPEGCapturePrivate::isSupportedPixelFormat(enum AVPixelFormat format) const
+ {
+-    const enum AVPixelFormat *p = vc->pix_fmts;
++#if (LIBAVCODEC_VERSION_INT < AV_VERSION_INT(61, 19, 100)) // ffmpeg < 7.1
++    const AVPixelFormat* p = vc->pix_fmts;
+     if (p == nullptr)
+         return false;
+ 
+@@ -109,6 +110,20 @@ bool FFMPEGCapturePrivate::isSupportedPixelFormat(enum
+     }
+ 
+     return false;
++#else
++    const void* p;
++    int ret = avcodec_get_supported_config(enc, vc, AV_CODEC_CONFIG_PIX_FORMAT, 0, &p, nullptr);
++    if (ret < 0)
++        return false;
++
++    for (auto f = static_cast<const AVPixelFormat*>(p); *f != AV_PIX_FMT_NONE; ++f)
++    {
++        if (*f == format)
++            return true;
++    }
++
++    return false;
++#endif
+ }
+ 
+ #if AVCODEC_DEBUG
+@@ -268,7 +283,15 @@ bool FFMPEGCapturePrivate::addStream(int width, int he
+     }
+     else
+     {
++#if (LIBAVCODEC_VERSION_INT < AV_VERSION_INT(61, 19, 100)) // ffmpeg < 7.1
+         enc->pix_fmt = avcodec_find_best_pix_fmt_of_list(vc->pix_fmts, format, 0, nullptr);
++#else
++        const void* p;
++        int ret = avcodec_get_supported_config(enc, vc, AV_CODEC_CONFIG_PIX_FORMAT, 0, &p, nullptr);
++        enc->pix_fmt = ret >= 0
++            ? avcodec_find_best_pix_fmt_of_list(static_cast<const AVPixelFormat*>(p), format, 0, nullptr)
++            : AV_PIX_FMT_NONE;
++#endif
+         if (enc->pix_fmt == AV_PIX_FMT_NONE)
+             avcodec_default_get_format(enc, &(enc->pix_fmt));
+     }
+@@ -451,7 +474,7 @@ bool FFMPEGCapturePrivate::writeVideoFrame(bool finali
+         frame->pts = nextPts++;
+     }
+ 
+-#if (LIBAVCODEC_VERSION_INT < AV_VERSION_INT(58, 133, 100))
++#if (LIBAVCODEC_VERSION_INT < AV_VERSION_INT(58, 133, 100)) // ffmpeg < 4.4
+     av_init_packet(pkt);
+ #endif
+ 


-- 
wbr, Kirill
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.