diff --git a/rpcs3/rpcs3.vcxproj b/rpcs3/rpcs3.vcxproj
index ad2ef88ed4..637ca2c13a 100644
--- a/rpcs3/rpcs3.vcxproj
+++ b/rpcs3/rpcs3.vcxproj
@@ -348,7 +348,7 @@
true
-
+
true
@@ -612,7 +612,7 @@
true
-
+
true
@@ -752,7 +752,6 @@
-
@@ -1398,8 +1397,7 @@
-
-
+
$(QTDIR)\bin\moc.exe;%(FullPath)
Moc%27ing %(Identity)...
.\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp
diff --git a/rpcs3/rpcs3.vcxproj.filters b/rpcs3/rpcs3.vcxproj.filters
index 01cb7c7c6c..0db0fce5d5 100644
--- a/rpcs3/rpcs3.vcxproj.filters
+++ b/rpcs3/rpcs3.vcxproj.filters
@@ -849,13 +849,10 @@
Io\music
-
- Io\music
-
-
+
Generated Files\Debug
-
+
Generated Files\Release
@@ -1202,9 +1199,6 @@
Gui\utils
-
- Io\music
-
Gui\utils
@@ -1486,7 +1480,7 @@
Gui\settings
-
+
Io\music
@@ -1639,4 +1633,4 @@
Scripts
-
\ No newline at end of file
+
diff --git a/rpcs3/rpcs3qt/CMakeLists.txt b/rpcs3/rpcs3qt/CMakeLists.txt
index 0a27e49eec..9bb2e8fd8a 100644
--- a/rpcs3/rpcs3qt/CMakeLists.txt
+++ b/rpcs3/rpcs3qt/CMakeLists.txt
@@ -65,7 +65,6 @@ add_library(rpcs3_ui STATIC
progress_indicator.cpp
qt_camera_handler.cpp
qt_camera_video_sink.cpp
- qt_music_error_handler.cpp
qt_music_handler.cpp
qt_utils.cpp
register_editor_dialog.cpp
diff --git a/rpcs3/rpcs3qt/qt_music_error_handler.cpp b/rpcs3/rpcs3qt/qt_music_error_handler.cpp
deleted file mode 100644
index 347e52934a..0000000000
--- a/rpcs3/rpcs3qt/qt_music_error_handler.cpp
+++ /dev/null
@@ -1,95 +0,0 @@
-#include "qt_music_error_handler.h"
-#include "util/logs.hpp"
-
-LOG_CHANNEL(music_log, "Music");
-
-template <>
-void fmt_class_string::format(std::string& out, u64 arg)
-{
- format_enum(out, arg, [](QMediaPlayer::Error value)
- {
- switch (value)
- {
- case QMediaPlayer::Error::NoError: return "NoError";
- case QMediaPlayer::Error::ResourceError: return "ResourceError";
- case QMediaPlayer::Error::FormatError: return "FormatError";
- case QMediaPlayer::Error::NetworkError: return "NetworkError";
- case QMediaPlayer::Error::AccessDeniedError: return "AccessDeniedError";
- }
-
- return unknown;
- });
-}
-
-template <>
-void fmt_class_string::format(std::string& out, u64 arg)
-{
- format_enum(out, arg, [](QMediaPlayer::MediaStatus value)
- {
- switch (value)
- {
- case QMediaPlayer::MediaStatus::NoMedia: return "NoMedia";
- case QMediaPlayer::MediaStatus::LoadingMedia: return "LoadingMedia";
- case QMediaPlayer::MediaStatus::LoadedMedia: return "LoadedMedia";
- case QMediaPlayer::MediaStatus::StalledMedia: return "StalledMedia";
- case QMediaPlayer::MediaStatus::BufferingMedia: return "BufferingMedia";
- case QMediaPlayer::MediaStatus::BufferedMedia: return "BufferedMedia";
- case QMediaPlayer::MediaStatus::EndOfMedia: return "EndOfMedia";
- case QMediaPlayer::MediaStatus::InvalidMedia: return "InvalidMedia";
- }
-
- return unknown;
- });
-}
-
-template <>
-void fmt_class_string::format(std::string& out, u64 arg)
-{
- format_enum(out, arg, [](QMediaPlayer::PlaybackState value)
- {
- switch (value)
- {
- case QMediaPlayer::PlaybackState::StoppedState: return "StoppedState";
- case QMediaPlayer::PlaybackState::PlayingState: return "PlayingState";
- case QMediaPlayer::PlaybackState::PausedState: return "PausedState";
- }
-
- return unknown;
- });
-}
-
-qt_music_error_handler::qt_music_error_handler(std::shared_ptr media_player, std::function status_callback)
- : m_media_player(std::move(media_player))
- , m_status_callback(std::move(status_callback))
-{
- if (m_media_player)
- {
- connect(m_media_player.get(), &QMediaPlayer::mediaStatusChanged, this, &qt_music_error_handler::handle_media_status);
- connect(m_media_player.get(), &QMediaPlayer::playbackStateChanged, this, &qt_music_error_handler::handle_music_state);
- connect(m_media_player.get(), &QMediaPlayer::errorOccurred, this, &qt_music_error_handler::handle_music_error);
- }
-}
-
-qt_music_error_handler::~qt_music_error_handler()
-{
-}
-
-void qt_music_error_handler::handle_media_status(QMediaPlayer::MediaStatus status)
-{
- music_log.notice("New media status: %s (status=%d)", status, static_cast(status));
-
- if (m_status_callback)
- {
- m_status_callback(status);
- }
-}
-
-void qt_music_error_handler::handle_music_state(QMediaPlayer::PlaybackState state)
-{
- music_log.notice("New playback state: %s (state=%d)", state, static_cast(state));
-}
-
-void qt_music_error_handler::handle_music_error(QMediaPlayer::Error error, const QString& errorString)
-{
- music_log.error("Error event: \"%s\" (error=%s)", errorString, error);
-}
diff --git a/rpcs3/rpcs3qt/qt_music_error_handler.h b/rpcs3/rpcs3qt/qt_music_error_handler.h
deleted file mode 100644
index 7d19c22d5c..0000000000
--- a/rpcs3/rpcs3qt/qt_music_error_handler.h
+++ /dev/null
@@ -1,22 +0,0 @@
-#pragma once
-
-#include
-#include
-
-class qt_music_error_handler : public QObject
-{
- Q_OBJECT
-
-public:
- qt_music_error_handler(std::shared_ptr media_player, std::function status_callback);
- virtual ~qt_music_error_handler();
-
-private Q_SLOTS:
- void handle_media_status(QMediaPlayer::MediaStatus status);
- void handle_music_state(QMediaPlayer::PlaybackState state);
- void handle_music_error(QMediaPlayer::Error error, const QString& errorString);
-
-private:
- std::shared_ptr m_media_player;
- std::function m_status_callback = nullptr;
-};
diff --git a/rpcs3/rpcs3qt/qt_music_handler.cpp b/rpcs3/rpcs3qt/qt_music_handler.cpp
index d92d379cd9..7eda064f6c 100644
--- a/rpcs3/rpcs3qt/qt_music_handler.cpp
+++ b/rpcs3/rpcs3qt/qt_music_handler.cpp
@@ -1,7 +1,6 @@
#include "qt_music_handler.h"
#include "Emu/Cell/Modules/cellMusic.h"
#include "Emu/System.h"
-#include "Utilities/Thread.h"
#include "util/logs.hpp"
#include
@@ -9,6 +8,61 @@
LOG_CHANNEL(music_log, "Music");
+template <>
+void fmt_class_string::format(std::string& out, u64 arg)
+{
+ format_enum(out, arg, [](QMediaPlayer::Error value)
+ {
+ switch (value)
+ {
+ case QMediaPlayer::Error::NoError: return "NoError";
+ case QMediaPlayer::Error::ResourceError: return "ResourceError";
+ case QMediaPlayer::Error::FormatError: return "FormatError";
+ case QMediaPlayer::Error::NetworkError: return "NetworkError";
+ case QMediaPlayer::Error::AccessDeniedError: return "AccessDeniedError";
+ }
+
+ return unknown;
+ });
+}
+
+template <>
+void fmt_class_string::format(std::string& out, u64 arg)
+{
+ format_enum(out, arg, [](QMediaPlayer::MediaStatus value)
+ {
+ switch (value)
+ {
+ case QMediaPlayer::MediaStatus::NoMedia: return "NoMedia";
+ case QMediaPlayer::MediaStatus::LoadingMedia: return "LoadingMedia";
+ case QMediaPlayer::MediaStatus::LoadedMedia: return "LoadedMedia";
+ case QMediaPlayer::MediaStatus::StalledMedia: return "StalledMedia";
+ case QMediaPlayer::MediaStatus::BufferingMedia: return "BufferingMedia";
+ case QMediaPlayer::MediaStatus::BufferedMedia: return "BufferedMedia";
+ case QMediaPlayer::MediaStatus::EndOfMedia: return "EndOfMedia";
+ case QMediaPlayer::MediaStatus::InvalidMedia: return "InvalidMedia";
+ }
+
+ return unknown;
+ });
+}
+
+template <>
+void fmt_class_string::format(std::string& out, u64 arg)
+{
+ format_enum(out, arg, [](QMediaPlayer::PlaybackState value)
+ {
+ switch (value)
+ {
+ case QMediaPlayer::PlaybackState::StoppedState: return "StoppedState";
+ case QMediaPlayer::PlaybackState::PlayingState: return "PlayingState";
+ case QMediaPlayer::PlaybackState::PausedState: return "PausedState";
+ }
+
+ return unknown;
+ });
+}
+
qt_music_handler::qt_music_handler()
{
music_log.notice("Constructing Qt music handler...");
@@ -16,32 +70,9 @@ qt_music_handler::qt_music_handler()
m_media_player = std::make_shared();
m_media_player->setAudioOutput(new QAudioOutput());
- m_error_handler = std::make_unique(m_media_player,
- [this](QMediaPlayer::MediaStatus status)
- {
- if (!m_status_callback)
- {
- return;
- }
-
- switch (status)
- {
- case QMediaPlayer::MediaStatus::NoMedia:
- case QMediaPlayer::MediaStatus::LoadingMedia:
- case QMediaPlayer::MediaStatus::LoadedMedia:
- case QMediaPlayer::MediaStatus::StalledMedia:
- case QMediaPlayer::MediaStatus::BufferingMedia:
- case QMediaPlayer::MediaStatus::BufferedMedia:
- case QMediaPlayer::MediaStatus::InvalidMedia:
- break;
- case QMediaPlayer::MediaStatus::EndOfMedia:
- m_status_callback(player_status::end_of_media);
- break;
- default:
- music_log.error("Ignoring unknown status %d", static_cast(status));
- break;
- }
- });
+ connect(m_media_player.get(), &QMediaPlayer::mediaStatusChanged, this, &qt_music_handler::handle_media_status);
+ connect(m_media_player.get(), &QMediaPlayer::playbackStateChanged, this, &qt_music_handler::handle_music_state);
+ connect(m_media_player.get(), &QMediaPlayer::errorOccurred, this, &qt_music_handler::handle_music_error);
}
qt_music_handler::~qt_music_handler()
@@ -51,7 +82,6 @@ qt_music_handler::~qt_music_handler()
music_log.notice("Destroying Qt music handler...");
m_media_player->stop();
m_media_player.reset();
- m_error_handler.reset();
});
}
@@ -166,3 +196,41 @@ f32 qt_music_handler::get_volume() const
return volume;
}
+
+void qt_music_handler::handle_media_status(QMediaPlayer::MediaStatus status)
+{
+ music_log.notice("New media status: %s (status=%d)", status, static_cast(status));
+
+ if (!m_status_callback)
+ {
+ return;
+ }
+
+ switch (status)
+ {
+ case QMediaPlayer::MediaStatus::NoMedia:
+ case QMediaPlayer::MediaStatus::LoadingMedia:
+ case QMediaPlayer::MediaStatus::LoadedMedia:
+ case QMediaPlayer::MediaStatus::StalledMedia:
+ case QMediaPlayer::MediaStatus::BufferingMedia:
+ case QMediaPlayer::MediaStatus::BufferedMedia:
+ case QMediaPlayer::MediaStatus::InvalidMedia:
+ break;
+ case QMediaPlayer::MediaStatus::EndOfMedia:
+ m_status_callback(player_status::end_of_media);
+ break;
+ default:
+ music_log.error("Ignoring unknown status %d", static_cast(status));
+ break;
+ }
+}
+
+void qt_music_handler::handle_music_state(QMediaPlayer::PlaybackState state)
+{
+ music_log.notice("New playback state: %s (state=%d)", state, static_cast(state));
+}
+
+void qt_music_handler::handle_music_error(QMediaPlayer::Error error, const QString& errorString)
+{
+ music_log.error("Error event: \"%s\" (error=%s)", errorString, error);
+}
diff --git a/rpcs3/rpcs3qt/qt_music_handler.h b/rpcs3/rpcs3qt/qt_music_handler.h
index fbfe3d5e19..1e672fd8ec 100644
--- a/rpcs3/rpcs3qt/qt_music_handler.h
+++ b/rpcs3/rpcs3qt/qt_music_handler.h
@@ -1,13 +1,15 @@
#pragma once
#include "Emu/Io/music_handler_base.h"
-#include "qt_music_error_handler.h"
#include
+#include
#include
-class qt_music_handler final : public music_handler_base
+class qt_music_handler final : public QObject, public music_handler_base
{
+ Q_OBJECT
+
public:
qt_music_handler();
virtual ~qt_music_handler();
@@ -20,9 +22,13 @@ public:
void set_volume(f32 volume) override;
f32 get_volume() const override;
+private Q_SLOTS:
+ void handle_media_status(QMediaPlayer::MediaStatus status);
+ void handle_music_state(QMediaPlayer::PlaybackState state);
+ void handle_music_error(QMediaPlayer::Error error, const QString& errorString);
+
private:
mutable std::mutex m_mutex;
- std::unique_ptr m_error_handler;
std::shared_ptr m_media_player;
std::string m_path;
};