Skip to content

Commit

Permalink
games-emulation/mgba: Revbump to fix compilation against ffmpeg-5
Browse files Browse the repository at this point in the history
Closes: https://bugs.gentoo.org/834374
Signed-off-by: Lars Wendler <[email protected]>
  • Loading branch information
Lars Wendler committed Mar 1, 2022
1 parent 2ebbaee commit 219f791
Show file tree
Hide file tree
Showing 2 changed files with 249 additions and 0 deletions.
117 changes: 117 additions & 0 deletions games-emulation/mgba/files/mgba-0.9.3-ffmpeg5.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
From cdc753516798882a805db1d2042dbce8313382bf Mon Sep 17 00:00:00 2001
From: Ryan Tandy <[email protected]>
Date: Thu, 3 Feb 2022 19:02:52 -0800
Subject: [PATCH] FFmpeg: Support FFmpeg 5.0

---
src/feature/ffmpeg/ffmpeg-decoder.c | 3 ++-
src/feature/ffmpeg/ffmpeg-encoder.c | 25 ++++++++++++++-----------
2 files changed, 16 insertions(+), 12 deletions(-)

diff --git a/src/feature/ffmpeg/ffmpeg-decoder.c b/src/feature/ffmpeg/ffmpeg-decoder.c
index c3bb6d1c5c..daa47fbf2c 100644
--- a/src/feature/ffmpeg/ffmpeg-decoder.c
+++ b/src/feature/ffmpeg/ffmpeg-decoder.c
@@ -5,6 +5,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "ffmpeg-decoder.h"

+#include <libavcodec/avcodec.h>
#include <libswscale/swscale.h>

void FFmpegDecoderInit(struct FFmpegDecoder* decoder) {
@@ -38,7 +39,7 @@ bool FFmpegDecoderOpen(struct FFmpegDecoder* decoder, const char* infile) {
#else
enum AVMediaType type = decoder->context->streams[i]->codec->codec_type;
#endif
- struct AVCodec* codec;
+ const struct AVCodec* codec;
struct AVCodecContext* context = NULL;
if (type == AVMEDIA_TYPE_VIDEO && decoder->videoStream < 0) {
decoder->video = avcodec_alloc_context3(NULL);
diff --git a/src/feature/ffmpeg/ffmpeg-encoder.c b/src/feature/ffmpeg/ffmpeg-encoder.c
index ad76ca57b2..be6bd3af5e 100644
--- a/src/feature/ffmpeg/ffmpeg-encoder.c
+++ b/src/feature/ffmpeg/ffmpeg-encoder.c
@@ -12,6 +12,9 @@

#include <libavcodec/version.h>
#include <libavcodec/avcodec.h>
+#if LIBAVCODEC_VERSION_MAJOR >= 58
+#include <libavcodec/bsf.h>
+#endif

#include <libavfilter/buffersink.h>
#include <libavfilter/buffersrc.h>
@@ -121,7 +124,7 @@ bool FFmpegEncoderSetAudio(struct FFmpegEncoder* encoder, const char* acodec, un
return true;
}

- AVCodec* codec = avcodec_find_encoder_by_name(acodec);
+ const AVCodec* codec = avcodec_find_encoder_by_name(acodec);
if (!codec) {
return false;
}
@@ -193,7 +196,7 @@ bool FFmpegEncoderSetVideo(struct FFmpegEncoder* encoder, const char* vcodec, in
return true;
}

- AVCodec* codec = avcodec_find_encoder_by_name(vcodec);
+ const AVCodec* codec = avcodec_find_encoder_by_name(vcodec);
if (!codec) {
return false;
}
@@ -213,7 +216,7 @@ bool FFmpegEncoderSetVideo(struct FFmpegEncoder* encoder, const char* vcodec, in
if (encoder->pixFormat == AV_PIX_FMT_NONE) {
return false;
}
- if (vbr < 0 && !av_opt_find(&codec->priv_class, "crf", NULL, 0, 0)) {
+ if (vbr < 0 && !av_opt_find((void*) &codec->priv_class, "crf", NULL, 0, 0)) {
return false;
}
encoder->videoCodec = vcodec;
@@ -223,7 +226,7 @@ bool FFmpegEncoderSetVideo(struct FFmpegEncoder* encoder, const char* vcodec, in
}

bool FFmpegEncoderSetContainer(struct FFmpegEncoder* encoder, const char* container) {
- AVOutputFormat* oformat = av_guess_format(container, 0, 0);
+ const AVOutputFormat* oformat = av_guess_format(container, 0, 0);
if (!oformat) {
return false;
}
@@ -241,9 +244,9 @@ void FFmpegEncoderSetLooping(struct FFmpegEncoder* encoder, bool loop) {
}

bool FFmpegEncoderVerifyContainer(struct FFmpegEncoder* encoder) {
- AVOutputFormat* oformat = av_guess_format(encoder->containerFormat, 0, 0);
- AVCodec* acodec = avcodec_find_encoder_by_name(encoder->audioCodec);
- AVCodec* vcodec = avcodec_find_encoder_by_name(encoder->videoCodec);
+ const AVOutputFormat* oformat = av_guess_format(encoder->containerFormat, 0, 0);
+ const AVCodec* acodec = avcodec_find_encoder_by_name(encoder->audioCodec);
+ const AVCodec* vcodec = avcodec_find_encoder_by_name(encoder->videoCodec);
if ((encoder->audioCodec && !acodec) || (encoder->videoCodec && !vcodec) || !oformat || (!acodec && !vcodec)) {
return false;
}
@@ -257,8 +260,8 @@ bool FFmpegEncoderVerifyContainer(struct FFmpegEncoder* encoder) {
}

bool FFmpegEncoderOpen(struct FFmpegEncoder* encoder, const char* outfile) {
- AVCodec* acodec = avcodec_find_encoder_by_name(encoder->audioCodec);
- AVCodec* vcodec = avcodec_find_encoder_by_name(encoder->videoCodec);
+ const AVCodec* acodec = avcodec_find_encoder_by_name(encoder->audioCodec);
+ const AVCodec* vcodec = avcodec_find_encoder_by_name(encoder->videoCodec);
if ((encoder->audioCodec && !acodec) || (encoder->videoCodec && !vcodec) || !FFmpegEncoderVerifyContainer(encoder)) {
return false;
}
@@ -272,9 +275,9 @@ bool FFmpegEncoderOpen(struct FFmpegEncoder* encoder, const char* outfile) {
encoder->currentVideoFrame = 0;
encoder->skipResidue = 0;

- AVOutputFormat* oformat = av_guess_format(encoder->containerFormat, 0, 0);
+ const AVOutputFormat* oformat = av_guess_format(encoder->containerFormat, 0, 0);
#ifndef USE_LIBAV
- avformat_alloc_output_context2(&encoder->context, oformat, 0, outfile);
+ avformat_alloc_output_context2(&encoder->context, (AVOutputFormat*) oformat, 0, outfile);
#else
encoder->context = avformat_alloc_context();
strncpy(encoder->context->filename, outfile, sizeof(encoder->context->filename) - 1);
132 changes: 132 additions & 0 deletions games-emulation/mgba/mgba-0.9.3-r1.ebuild
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
# Copyright 1999-2022 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

inherit cmake desktop xdg

DESCRIPTION="Game Boy Advance emulator written in C"
HOMEPAGE="https://mgba.io"
if [[ "${PV}" == 9999 ]] ; then
inherit git-r3
EGIT_REPO_URI="https://github.com/mgba-emu/mgba.git"
else
MY_PV="${PV/_beta/-b}"
SRC_URI="https://github.com/${PN}-emu/${PN}/archive/${MY_PV}.tar.gz -> ${P}.tar.gz"
[[ "${PV}" == *_beta* ]] || \
KEYWORDS="~amd64 ~arm64 ~x86"
S="${WORKDIR}/${PN}-${MY_PV}"
fi
LICENSE="MPL-2.0"
SLOT="0"
IUSE="debug discord elf ffmpeg gles2 gles3 opengl qt5 +sdl sqlite"
REQUIRED_USE="|| ( qt5 sdl )
qt5? ( opengl )"

RDEPEND="
media-libs/libpng:0=
sys-libs/zlib[minizip]
debug? ( dev-libs/libedit )
elf? ( dev-libs/elfutils )
ffmpeg? ( media-video/ffmpeg:= )
opengl? ( media-libs/libglvnd )
qt5? (
dev-qt/qtcore:5
dev-qt/qtgui:5
dev-qt/qtmultimedia:5
dev-qt/qtwidgets:5
opengl? ( dev-qt/qtopengl:5 )
)
sdl? ( media-libs/libsdl2[X,sound,joystick,video,opengl?] )
sqlite? ( dev-db/sqlite:3 )
"
DEPEND="${RDEPEND}
gles2? ( media-libs/libglvnd )
gles3? ( media-libs/libglvnd )
"

PATCHES=(
"${FILESDIR}/${P}-ffmpeg5.patch" #834374
)

src_prepare() {
xdg_environment_reset
cmake_src_prepare

# Get rid of any bundled stuff we don't want
local pkg
for pkg in libpng lzma sqlite3 zlib ; do
rm -r src/third-party/${pkg} || die
done
}

src_configure() {
local mycmakeargs=(
-DCMAKE_SKIP_RPATH=ON
-DBUILD_GL="$(usex opengl)"
-DBUILD_GLES2="$(usex gles2)"
-DBUILD_GLES3="$(usex gles3)"
-DBUILD_PYTHON=OFF
-DBUILD_QT="$(usex qt5)"
-DBUILD_SDL="$(usex sdl)"
-DBUILD_SHARED=ON
# test suite fails to build (>=0.6.0)
-DBUILD_SUITE=OFF
-DBUILD_TEST=OFF
-DM_CORE_GB=ON
-DM_CORE_GBA=ON
-DUSE_DEBUGGERS="$(usex debug)"
-DUSE_DISCORD_RPC="$(usex discord)"
-DUSE_EDITLINE="$(usex debug)"
-DUSE_ELF="$(usex elf)"
-DUSE_EPOXY=OFF
-DUSE_FFMPEG="$(usex ffmpeg)"
-DUSE_GDB_STUB="$(usex debug)"
-DUSE_LIBZIP=OFF
-DUSE_LZMA=OFF
-DUSE_MINIZIP=ON
-DUSE_PNG=ON
-DUSE_SQLITE3="$(usex sqlite)"
-DUSE_ZLIB=ON
)
cmake_src_configure
}

src_compile() {
cmake_src_compile
}

src_install() {
if use qt5 ; then
dobin ${BUILD_DIR}/qt/${PN}-qt
doman doc/${PN}-qt.6
domenu res/${PN}-qt.desktop
for size in 16 24 32 48 64 96 128 256 ; do
newicon -s ${size} res/${PN}-${size}.png ${PN}.png
done
fi
if use sdl ; then
doman doc/${PN}.6
newbin ${BUILD_DIR}/sdl/${PN} ${PN}-sdl
fi

dolib.so ${BUILD_DIR}/lib${PN}.so*
}

pkg_preinst() {
if use qt5 ; then
xdg_pkg_preinst
fi
}

pkg_postinst() {
if use qt5 ; then
xdg_pkg_postinst
fi
}

pkg_postrm() {
if use qt5 ; then
xdg_pkg_postrm
fi
}

0 comments on commit 219f791

Please sign in to comment.