mirror of
https://github.com/hedge-dev/UnleashedRecomp.git
synced 2025-12-19 22:42:25 +00:00
Move media playback detection to OS namespace
This commit is contained in:
parent
26dbd7c697
commit
7b2383e8ad
6 changed files with 95 additions and 77 deletions
|
|
@ -67,12 +67,14 @@ set(SWA_KERNEL_CXX_SOURCES
|
||||||
)
|
)
|
||||||
|
|
||||||
set(SWA_OS_CXX_SOURCES
|
set(SWA_OS_CXX_SOURCES
|
||||||
|
"os/media.cpp"
|
||||||
"os/process.cpp"
|
"os/process.cpp"
|
||||||
"os/version.cpp"
|
"os/version.cpp"
|
||||||
)
|
)
|
||||||
|
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
list(APPEND SWA_OS_CXX_SOURCES
|
list(APPEND SWA_OS_CXX_SOURCES
|
||||||
|
"os/win32/media_win32.cpp"
|
||||||
"os/win32/process_win32.cpp"
|
"os/win32/process_win32.cpp"
|
||||||
"os/win32/version_win32.cpp"
|
"os/win32/version_win32.cpp"
|
||||||
)
|
)
|
||||||
|
|
|
||||||
7
UnleashedRecomp/os/media.cpp
Normal file
7
UnleashedRecomp/os/media.cpp
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
#include <os/media.h>
|
||||||
|
#include <os/media_detail.h>
|
||||||
|
|
||||||
|
bool os::media::IsExternalMediaPlaying()
|
||||||
|
{
|
||||||
|
return detail::IsExternalMediaPlaying();
|
||||||
|
}
|
||||||
6
UnleashedRecomp/os/media.h
Normal file
6
UnleashedRecomp/os/media.h
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace os::media
|
||||||
|
{
|
||||||
|
bool IsExternalMediaPlaying();
|
||||||
|
}
|
||||||
6
UnleashedRecomp/os/media_detail.h
Normal file
6
UnleashedRecomp/os/media_detail.h
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace os::media::detail
|
||||||
|
{
|
||||||
|
bool IsExternalMediaPlaying();
|
||||||
|
}
|
||||||
72
UnleashedRecomp/os/win32/media_win32.cpp
Normal file
72
UnleashedRecomp/os/win32/media_win32.cpp
Normal file
|
|
@ -0,0 +1,72 @@
|
||||||
|
#include <os/media_detail.h>
|
||||||
|
#include <winrt/Windows.Foundation.h>
|
||||||
|
#include <winrt/Windows.Media.Control.h>
|
||||||
|
|
||||||
|
using namespace winrt;
|
||||||
|
using namespace winrt::Windows::Foundation;
|
||||||
|
using namespace winrt::Windows::Media::Control;
|
||||||
|
|
||||||
|
static GlobalSystemMediaTransportControlsSessionManager g_sessionManager = nullptr;
|
||||||
|
|
||||||
|
static GlobalSystemMediaTransportControlsSessionManager GetSessionManager()
|
||||||
|
{
|
||||||
|
if (g_sessionManager)
|
||||||
|
return g_sessionManager;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
init_apartment();
|
||||||
|
return g_sessionManager = GlobalSystemMediaTransportControlsSessionManager::RequestAsync().get();
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
printf("[*] Failed to retrieve GSMTC session manager: 0x%08X\n", to_hresult().value);
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static GlobalSystemMediaTransportControlsSession GetCurrentSession()
|
||||||
|
{
|
||||||
|
auto sessionManager = GetSessionManager();
|
||||||
|
|
||||||
|
if (!sessionManager)
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return sessionManager.GetCurrentSession();
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
printf("[*] Failed to retrieve current GSMTC session: 0x%08X\n", to_hresult().value);
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static GlobalSystemMediaTransportControlsSessionPlaybackInfo GetPlaybackInfo()
|
||||||
|
{
|
||||||
|
auto session = GetCurrentSession();
|
||||||
|
|
||||||
|
if (!session)
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return session.GetPlaybackInfo();
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
printf("[*] Failed to retrieve GSMTC playback info: 0x%08X\n", to_hresult().value);
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool os::media::detail::IsExternalMediaPlaying()
|
||||||
|
{
|
||||||
|
auto playbackInfo = GetPlaybackInfo();
|
||||||
|
|
||||||
|
if (!playbackInfo)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return playbackInfo.PlaybackStatus() == GlobalSystemMediaTransportControlsSessionPlaybackStatus::Playing;
|
||||||
|
}
|
||||||
|
|
@ -1,85 +1,12 @@
|
||||||
#include <cpu/guest_code.h>
|
#include <cpu/guest_code.h>
|
||||||
#include <user/config.h>
|
#include <user/config.h>
|
||||||
#include <kernel/function.h>
|
#include <kernel/function.h>
|
||||||
|
#include <os/media.h>
|
||||||
#include <os/version.h>
|
#include <os/version.h>
|
||||||
#include <patches/audio_patches.h>
|
#include <patches/audio_patches.h>
|
||||||
#include <api/SWA.h>
|
#include <api/SWA.h>
|
||||||
|
|
||||||
#if _WIN32
|
|
||||||
#include <winrt/Windows.Foundation.h>
|
|
||||||
#include <winrt/Windows.Media.Control.h>
|
|
||||||
|
|
||||||
using namespace winrt;
|
|
||||||
using namespace winrt::Windows::Foundation;
|
|
||||||
using namespace winrt::Windows::Media::Control;
|
|
||||||
|
|
||||||
static GlobalSystemMediaTransportControlsSessionManager g_sessionManager = nullptr;
|
|
||||||
|
|
||||||
static GlobalSystemMediaTransportControlsSessionManager GetSessionManager()
|
|
||||||
{
|
|
||||||
if (g_sessionManager)
|
|
||||||
return g_sessionManager;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
init_apartment();
|
|
||||||
return g_sessionManager = GlobalSystemMediaTransportControlsSessionManager::RequestAsync().get();
|
|
||||||
}
|
|
||||||
catch (...)
|
|
||||||
{
|
|
||||||
printf("[*] Failed to retrieve GSMTC session manager: 0x%08X\n", to_hresult().value);
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static GlobalSystemMediaTransportControlsSession GetCurrentSession()
|
|
||||||
{
|
|
||||||
auto sessionManager = GetSessionManager();
|
|
||||||
|
|
||||||
if (!sessionManager)
|
|
||||||
return nullptr;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
return sessionManager.GetCurrentSession();
|
|
||||||
}
|
|
||||||
catch (...)
|
|
||||||
{
|
|
||||||
printf("[*] Failed to retrieve current GSMTC session: 0x%08X\n", to_hresult().value);
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static GlobalSystemMediaTransportControlsSessionPlaybackInfo GetPlaybackInfo()
|
|
||||||
{
|
|
||||||
auto session = GetCurrentSession();
|
|
||||||
|
|
||||||
if (!session)
|
|
||||||
return nullptr;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
return session.GetPlaybackInfo();
|
|
||||||
}
|
|
||||||
catch (...)
|
|
||||||
{
|
|
||||||
printf("[*] Failed to retrieve GSMTC playback info: 0x%08X\n", to_hresult().value);
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool IsExternalAudioPlaying()
|
|
||||||
{
|
|
||||||
auto playbackInfo = GetPlaybackInfo();
|
|
||||||
|
|
||||||
if (!playbackInfo)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return playbackInfo.PlaybackStatus() == GlobalSystemMediaTransportControlsSessionPlaybackStatus::Playing;
|
|
||||||
}
|
|
||||||
|
|
||||||
int AudioPatches::m_isAttenuationSupported = -1;
|
int AudioPatches::m_isAttenuationSupported = -1;
|
||||||
#endif
|
|
||||||
|
|
||||||
static be<float>* GetVolume(bool isMusic = true)
|
static be<float>* GetVolume(bool isMusic = true)
|
||||||
{
|
{
|
||||||
|
|
@ -116,12 +43,11 @@ void AudioPatches::Update(float deltaTime)
|
||||||
if (!pMusicVolume || !pEffectsVolume)
|
if (!pMusicVolume || !pEffectsVolume)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
#if _WIN32
|
|
||||||
if (Config::MusicAttenuation && CanAttenuate())
|
if (Config::MusicAttenuation && CanAttenuate())
|
||||||
{
|
{
|
||||||
auto time = 1.0f - expf(2.5f * -deltaTime);
|
auto time = 1.0f - expf(2.5f * -deltaTime);
|
||||||
|
|
||||||
if (IsExternalAudioPlaying())
|
if (os::media::IsExternalMediaPlaying())
|
||||||
{
|
{
|
||||||
*pMusicVolume = std::lerp(*pMusicVolume, 0.0f, time);
|
*pMusicVolume = std::lerp(*pMusicVolume, 0.0f, time);
|
||||||
}
|
}
|
||||||
|
|
@ -131,7 +57,6 @@ void AudioPatches::Update(float deltaTime)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
*pMusicVolume = Config::MusicVolume;
|
*pMusicVolume = Config::MusicVolume;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue