forked from gentoo/gentoo
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
games-emulation/mgba: Revbump to fix compilation against ffmpeg-5
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
Showing
2 changed files
with
249 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
} |