From 3278a4d7ef255e90626a9dd7b321e4a0bf0bafea Mon Sep 17 00:00:00 2001 From: Hamish Milne Date: Fri, 10 Apr 2020 14:02:18 +0100 Subject: [PATCH] Fix crashes when loading with cameras active --- src/core/hle/service/cam/cam.cpp | 13 +++++++++++++ src/core/hle/service/cam/cam.h | 10 ++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/core/hle/service/cam/cam.cpp b/src/core/hle/service/cam/cam.cpp index e247d998f..c093ed7e5 100644 --- a/src/core/hle/service/cam/cam.cpp +++ b/src/core/hle/service/cam/cam.cpp @@ -30,6 +30,19 @@ void Module::serialize(Archive& ar, const unsigned int) { ar& cameras; ar& ports; ar& is_camera_reload_pending; + if (Archive::is_loading::value) { + for (int i = 0; i < NumCameras; i++) { + LoadCameraImplementation(cameras[i], i); + } + for (std::size_t i = 0; i < ports.size(); i++) { + if (ports[i].is_busy) { + cameras[ports[i].camera_id].impl->StartCapture(); + } + if (ports[i].is_receiving) { + StartReceiving(static_cast(i)); + } + } + } } SERIALIZE_IMPL(Module) diff --git a/src/core/hle/service/cam/cam.h b/src/core/hle/service/cam/cam.h index 04dc0e2ea..7c36e02c5 100644 --- a/src/core/hle/service/cam/cam.h +++ b/src/core/hle/service/cam/cam.h @@ -13,6 +13,7 @@ #include #include #include +#include #include "common/common_types.h" #include "common/swap.h" #include "core/global.h" @@ -792,8 +793,12 @@ private: private: template - void serialize(Archive& ar, const unsigned int) { - ar& impl; + void serialize(Archive& ar, const unsigned int file_version) { + // For compatibility: put a nullptr here + if (file_version == 0) { + std::unique_ptr x; + ar& x; + } ar& contexts; ar& current_context; ar& frame_rate; @@ -883,3 +888,4 @@ void InstallInterfaces(Core::System& system); } // namespace Service::CAM SERVICE_CONSTRUCT(Service::CAM::Module) +BOOST_CLASS_VERSION(Service::CAM::Module::CameraConfig, 1)