diff --git a/externals/cmake-modules/FindFFmpeg.cmake b/externals/cmake-modules/FindFFmpeg.cmake index 6cb5960bb..cac21c614 100644 --- a/externals/cmake-modules/FindFFmpeg.cmake +++ b/externals/cmake-modules/FindFFmpeg.cmake @@ -116,6 +116,10 @@ function(find_ffmpeg LIBNAME) endforeach() string(TOUPPER ${LIBNAME} LIBNAME_UPPER) file(STRINGS "${FFmpeg_INCLUDE_${LIBNAME}}/lib${LIBNAME}/version.h" _FFmpeg_VERSION_H_CONTENTS REGEX "#define LIB${LIBNAME_UPPER}_VERSION_(MAJOR|MINOR|MICRO) ") + if (EXISTS "${FFmpeg_INCLUDE_${LIBNAME}}/lib${LIBNAME}/version_major.h") + file(STRINGS "${FFmpeg_INCLUDE_${LIBNAME}}/lib${LIBNAME}/version_major.h" _FFmpeg_MAJOR_VERSION_H_CONTENTS REGEX "#define LIB${LIBNAME_UPPER}_VERSION_MAJOR ") + string(APPEND _FFmpeg_VERSION_H_CONTENTS "\n" ${_FFmpeg_MAJOR_VERSION_H_CONTENTS}) + endif() set(_FFmpeg_VERSION_REGEX "([0-9]+)") foreach(v MAJOR MINOR MICRO) if("${_FFmpeg_VERSION_H_CONTENTS}" MATCHES "#define LIB${LIBNAME_UPPER}_VERSION_${v}[\\t ]+${_FFmpeg_VERSION_REGEX}") diff --git a/src/citra/citra.cpp b/src/citra/citra.cpp index a9b0b3eca..cf3d51869 100644 --- a/src/citra/citra.cpp +++ b/src/citra/citra.cpp @@ -391,6 +391,9 @@ int main(int argc, char** argv) { return -1; case Core::System::ResultStatus::Success: break; // Expected case + default: + LOG_ERROR(Frontend, "Error while loading ROM: {}", system.GetStatusDetails()); + break; } system.TelemetrySession().AddField(Common::Telemetry::FieldType::App, "Frontend", "SDL"); @@ -437,7 +440,18 @@ int main(int argc, char** argv) { }); while (emu_window->IsOpen()) { - system.RunLoop(); + const auto result = system.RunLoop(); + + switch (result) { + case Core::System::ResultStatus::ShutdownRequested: + emu_window->RequestClose(); + break; + case Core::System::ResultStatus::Success: + break; + default: + LOG_ERROR(Frontend, "Error in main run loop: {}", result, system.GetStatusDetails()); + break; + } } render_thread.join(); diff --git a/src/citra/emu_window/emu_window_sdl2.cpp b/src/citra/emu_window/emu_window_sdl2.cpp index e5a0594c4..08b36bf61 100644 --- a/src/citra/emu_window/emu_window_sdl2.cpp +++ b/src/citra/emu_window/emu_window_sdl2.cpp @@ -104,6 +104,10 @@ bool EmuWindow_SDL2::IsOpen() const { return is_open; } +void EmuWindow_SDL2::RequestClose() { + is_open = false; +} + void EmuWindow_SDL2::OnResize() { int width, height; SDL_GetWindowSize(render_window, &width, &height); @@ -134,7 +138,7 @@ void EmuWindow_SDL2::Fullscreen() { EmuWindow_SDL2::EmuWindow_SDL2(bool fullscreen) { // Initialize the window if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_GAMECONTROLLER) < 0) { - LOG_CRITICAL(Frontend, "Failed to initialize SDL2! Exiting..."); + LOG_CRITICAL(Frontend, "Failed to initialize SDL2: {}! Exiting...", SDL_GetError()); exit(1); } @@ -256,7 +260,7 @@ void EmuWindow_SDL2::PollEvents() { OnResize(); break; case SDL_WINDOWEVENT_CLOSE: - is_open = false; + RequestClose(); break; } break; @@ -287,7 +291,7 @@ void EmuWindow_SDL2::PollEvents() { OnFingerUp(); break; case SDL_QUIT: - is_open = false; + RequestClose(); break; default: break; diff --git a/src/citra/emu_window/emu_window_sdl2.h b/src/citra/emu_window/emu_window_sdl2.h index 64dec5381..27a0f0787 100644 --- a/src/citra/emu_window/emu_window_sdl2.h +++ b/src/citra/emu_window/emu_window_sdl2.h @@ -46,6 +46,9 @@ public: /// Whether the window is still open, and a close request hasn't yet been sent bool IsOpen() const; + /// Close the window. + void RequestClose(); + /// Creates a new context that is shared with the current context std::unique_ptr CreateSharedContext() const override;