Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
170 changes: 170 additions & 0 deletions pkgs/by-name/pp/ppsspp/fix-ffmpeg-6.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
Backported from <https://github.com/hrydgard/ppsspp/commit/930b7f644d74c74d9e58bf8e5300bf9ea9fb78a9>.

Original author: Andrew Udvare <audvare@gmail.com>

diff --git a/CMakeLists.txt b/CMakeLists.txt
index bfd5e69035..f7c43800fa 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -117,6 +117,7 @@
endif()

include(ccache)
+include(CheckCXXSourceCompiles)
include(GNUInstallDirs)

add_definitions(-DASSETS_DIR="${CMAKE_INSTALL_FULL_DATADIR}/ppsspp/assets/")
@@ -949,6 +950,23 @@
endif()

find_package(FFmpeg REQUIRED avcodec avformat avutil swresample swscale)
+ # Check if we need to use avcodec_(alloc|free)_frame instead of av_frame_(alloc|free)
+ # Check if we need to use const AVCodec
+ set(CMAKE_REQUIRED_LIBRARIES avcodec;avformat)
+ set(CMAKE_REQUIRED_FLAGS "-pedantic -Wall -Werror -Wno-unused-variable")
+ check_cxx_source_compiles("extern \"C\" {
+ #include <libavcodec/avcodec.h>
+ #include <libavformat/avformat.h>
+ }
+ static AVCodecContext *s_codec_context = NULL;
+ int main() {
+ const AVCodec *codec = avcodec_find_encoder(s_codec_context->codec_id);
+ return 0;
+ }
+ " HAVE_LIBAVCODEC_CONST_AVCODEC FAIL_REGEX "invalid conversion")
+
+ # Check if we need to use avcodec_alloc_context3 instead of stream->codec
+ # Check if we need to use av_frame_get_buffer instead of avcodec_default_get_buffer
endif(USE_FFMPEG)

find_package(ZLIB)
@@ -2020,6 +2038,7 @@
Core/ELF/PrxDecrypter.h
Core/ELF/ParamSFO.cpp
Core/ELF/ParamSFO.h
+ Core/FFMPEGCompat.h
Core/FileSystems/tlzrc.cpp
Core/FileSystems/BlobFileSystem.cpp
Core/FileSystems/BlobFileSystem.h
@@ -2354,6 +2373,9 @@

if(FFmpeg_FOUND)
target_compile_definitions(${CoreLibName} PRIVATE USE_FFMPEG=1)
+ if (HAVE_LIBAVCODEC_CONST_AVCODEC)
+ target_compile_definitions(${CoreLibName} PRIVATE HAVE_LIBAVCODEC_CONST_AVCODEC=1)
+ endif()
set_target_properties(${CoreLibName} PROPERTIES NO_SYSTEM_FROM_IMPORTED true)
target_include_directories(${CoreLibName} BEFORE PUBLIC ${FFmpeg_INCLUDE_avcodec})
target_link_libraries(${CoreLibName}
diff --git a/Core/AVIDump.cpp b/Core/AVIDump.cpp
index 7c9576d292..aa81165031 100644
--- a/Core/AVIDump.cpp
+++ b/Core/AVIDump.cpp
@@ -45,9 +45,7 @@
#define av_frame_free avcodec_free_frame
#endif

-#if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(59, 16, 100)
-#define AVCodec const AVCodec
-#endif
+#include "FFMPEGCompat.h"

static AVFormatContext *s_format_context = nullptr;
static AVCodecContext *s_codec_context = nullptr;
diff --git a/Core/FFMPEGCompat.h b/Core/FFMPEGCompat.h
new file mode 100644
index 0000000000..fed3b1c853
--- /dev/null
+++ b/Core/FFMPEGCompat.h
@@ -1,0 +1,8 @@
+#ifndef FFMPEG_COMPAT_H
+#define FFMPEG_COMPAT_H
+
+#ifdef HAVE_LIBAVCODEC_CONST_AVCODEC
+#define AVCodec const AVCodec
+#endif
+
+#endif // FFMPEG_COMPAT_H
diff --git a/Core/HLE/sceAtrac.cpp b/Core/HLE/sceAtrac.cpp
index fe0e8a54de..f83d9ffdf1 100644
--- a/Core/HLE/sceAtrac.cpp
+++ b/Core/HLE/sceAtrac.cpp
@@ -129,10 +129,7 @@
#include "libavcodec/avcodec.h"
#include "libavutil/version.h"
}
-
-#if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(59, 16, 100)
-#define AVCodec const AVCodec
-#endif
+#include "Core/FFMPEGCompat.h"

#endif // USE_FFMPEG

diff --git a/Core/HLE/sceMpeg.cpp b/Core/HLE/sceMpeg.cpp
index d050d62f3d..8be78c73e0 100644
--- a/Core/HLE/sceMpeg.cpp
+++ b/Core/HLE/sceMpeg.cpp
@@ -113,9 +113,7 @@
#include "libswscale/swscale.h"
#include "libavcodec/avcodec.h"
}
-#if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(59, 16, 100)
-#define AVCodec const AVCodec
-#endif
+#include "Core/FFMPEGCompat.h"
static AVPixelFormat pmp_want_pix_fmt;

#endif
diff --git a/Core/HW/MediaEngine.cpp b/Core/HW/MediaEngine.cpp
index 0ed957edfd..7e8b37d4dc 100644
--- a/Core/HW/MediaEngine.cpp
+++ b/Core/HW/MediaEngine.cpp
@@ -56,9 +56,7 @@

#ifdef USE_FFMPEG

-#if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(59, 16, 100)
-#define AVCodec const AVCodec
-#endif
+#include "Core/FFMPEGCompat.h"

static AVPixelFormat getSwsFormat(int pspFormat)
{
diff --git a/Core/HW/SimpleAudioDec.cpp b/Core/HW/SimpleAudioDec.cpp
index 7994a7f402..80397bf6da 100644
--- a/Core/HW/SimpleAudioDec.cpp
+++ b/Core/HW/SimpleAudioDec.cpp
@@ -33,6 +33,7 @@
#include "libavutil/samplefmt.h"
#include "libavcodec/avcodec.h"
}
+#include "Core/FFMPEGCompat.h"

#endif // USE_FFMPEG

diff --git a/Core/HW/SimpleAudioDec.h b/Core/HW/SimpleAudioDec.h
index 52a78bf3b4..9bf2427a4a 100644
--- a/Core/HW/SimpleAudioDec.h
+++ b/Core/HW/SimpleAudioDec.h
@@ -33,10 +33,6 @@
#include "libavutil/version.h"
};

-#if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(59, 16, 100)
-#define AVCodec const AVCodec
-#endif
-
#endif

// Wraps FFMPEG for audio decoding in a nice interface.
@@ -90,6 +86,9 @@
int wanted_resample_freq; // wanted resampling rate/frequency

AVFrame *frame_;
+#if HAVE_LIBAVCODEC_CONST_AVCODEC // USE_FFMPEG is implied
+ const
+#endif
AVCodec *codec_;
AVCodecContext *codecCtx_;
SwrContext *swrCtx_;
8 changes: 6 additions & 2 deletions pkgs/by-name/pp/ppsspp/package.nix
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
cmake,
copyDesktopItems,
fetchFromGitHub,
ffmpeg,
ffmpeg_6,
glew,
libffi,
libsForQt5,
Expand Down Expand Up @@ -48,6 +48,10 @@ stdenv.mkDerivation (finalAttrs: {
hash = "sha256-I84zJqEE1X/eo/ukeGA2iZe3lWKvilk+RNGUzl2wZXY=";
};

patches = lib.optionals useSystemFfmpeg [
./fix-ffmpeg-6.patch
];

postPatch = ''
substituteInPlace git-version.cmake --replace unknown ${finalAttrs.src.rev}
substituteInPlace UI/NativeApp.cpp --replace /usr/share $out/share
Expand All @@ -69,7 +73,7 @@ stdenv.mkDerivation (finalAttrs: {
zlib
]
++ lib.optionals useSystemFfmpeg [
ffmpeg
ffmpeg_6
]
++ lib.optionals useSystemSnappy [
snappy
Expand Down
3 changes: 0 additions & 3 deletions pkgs/top-level/all-packages.nix
Original file line number Diff line number Diff line change
Expand Up @@ -2673,7 +2673,6 @@ with pkgs;

ppsspp-sdl = let
argset = {
ffmpeg = ffmpeg_4;
enableQt = false;
enableVulkan = true;
forceWayland = false;
Expand All @@ -2683,7 +2682,6 @@ with pkgs;

ppsspp-sdl-wayland = let
argset = {
ffmpeg = ffmpeg_4;
enableQt = false;
enableVulkan = false; # https://github.com/hrydgard/ppsspp/issues/13845
forceWayland = true;
Expand All @@ -2693,7 +2691,6 @@ with pkgs;

ppsspp-qt = let
argset = {
ffmpeg = ffmpeg_4;
enableQt = true;
enableVulkan = false; # https://github.com/hrydgard/ppsspp/issues/11628
forceWayland = false;
Expand Down