session volume/mute polling
This commit is contained in:
parent
cb9446cb42
commit
064c16d9e7
10 changed files with 263 additions and 4 deletions
|
|
@ -1,6 +1,126 @@
|
|||
#include "backsessionclasses.h"
|
||||
#include "backfuncs.h"
|
||||
|
||||
SessionStateCallback::SessionStateCallback(SessionHandler *sh) {
|
||||
this->sh = sh;
|
||||
}
|
||||
|
||||
ULONG SessionStateCallback::AddRef() {
|
||||
return InterlockedIncrement(&ref);
|
||||
}
|
||||
|
||||
ULONG SessionStateCallback::Release() {
|
||||
ULONG tempRef = InterlockedDecrement(&ref);
|
||||
if (tempRef == 0) {
|
||||
delete this;
|
||||
}
|
||||
return tempRef;
|
||||
}
|
||||
|
||||
HRESULT SessionStateCallback::QueryInterface(REFIID riid, VOID **ppvInterface) {
|
||||
if (IID_IUnknown == riid)
|
||||
{
|
||||
AddRef();
|
||||
*ppvInterface = (IUnknown*)this;
|
||||
}
|
||||
else if (__uuidof(IAudioSessionNotification) == riid)
|
||||
{
|
||||
AddRef();
|
||||
*ppvInterface = (IMMNotificationClient*)this;
|
||||
}
|
||||
else
|
||||
{
|
||||
*ppvInterface = NULL;
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT SessionStateCallback::OnDisplayNameChanged(LPCWSTR NewDisplayName, LPCGUID EventContext) {
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT SessionStateCallback::OnIconPathChanged(LPCWSTR NewIconPath, LPCGUID EventContex) {
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT SessionStateCallback::OnSimpleVolumeChanged(float NewVolume, BOOL NewMute, LPCGUID EventContext) {
|
||||
sh->getVolumeInfo()->muted = NewMute;
|
||||
sh->getVolumeInfo()->mainVolume = NewVolume;
|
||||
sh->getVolumeInfo()->caller = GUIDToNGuid((LPGUID)EventContext);
|
||||
/*
|
||||
* if (NewMute)
|
||||
* {
|
||||
* printf("MUTE\n");
|
||||
* }
|
||||
* else
|
||||
* {
|
||||
* printf("Volume = %d percent\n",
|
||||
* (UINT32)(100*NewVolume + 0.5));
|
||||
* }
|
||||
*/
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT SessionStateCallback::OnChannelVolumeChanged(DWORD ChannelCount, float NewChannelVolumeArray[], DWORD ChangedChannel, LPCGUID EventContext) {
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT SessionStateCallback::OnGroupingParamChanged(LPCGUID NewGroupingParam, LPCGUID EventContext) {
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT SessionStateCallback::OnStateChanged(AudioSessionState NewState) {
|
||||
/*
|
||||
* char *pszState = "?????";
|
||||
*
|
||||
* switch (NewState)
|
||||
* {
|
||||
* case AudioSessionStateActive:
|
||||
* pszState = "active";
|
||||
* break;
|
||||
* case AudioSessionStateInactive:
|
||||
* pszState = "inactive";
|
||||
* break;
|
||||
* }
|
||||
* printf("New session state = %s\n", pszState);
|
||||
*/
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT SessionStateCallback::OnSessionDisconnected(AudioSessionDisconnectReason DisconnectReason) {
|
||||
/*
|
||||
* char *pszReason = "?????";
|
||||
*
|
||||
* switch (DisconnectReason)
|
||||
* {
|
||||
* case DisconnectReasonDeviceRemoval:
|
||||
* pszReason = "device removed";
|
||||
* break;
|
||||
* case DisconnectReasonServerShutdown:
|
||||
* pszReason = "server shut down";
|
||||
* break;
|
||||
* case DisconnectReasonFormatChanged:
|
||||
* pszReason = "format changed";
|
||||
* break;
|
||||
* case DisconnectReasonSessionLogoff:
|
||||
* pszReason = "user logged off";
|
||||
* break;
|
||||
* case DisconnectReasonSessionDisconnected:
|
||||
* pszReason = "session disconnected";
|
||||
* break;
|
||||
* case DisconnectReasonExclusiveModeOverride:
|
||||
* pszReason = "exclusive-mode override";
|
||||
* break;
|
||||
* }
|
||||
* printf("Audio session disconnected (reason: %s)\n",
|
||||
* pszReason);
|
||||
*/
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
Session::Session(Endpoint* ep, IAudioSessionControl2* sessionControl, size_t idx) {
|
||||
this->ep = ep;
|
||||
this->sessionControl = sessionControl;
|
||||
|
|
@ -147,3 +267,11 @@ wchar_t* fileDescription = NULL;
|
|||
free(fileVersionInfo);
|
||||
return exePath;
|
||||
}
|
||||
|
||||
void Session::setStateCallback(SessionStateCallback *ssc){
|
||||
sessionControl->RegisterAudioSessionNotification((IAudioSessionEvents*) ssc);
|
||||
}
|
||||
|
||||
void Session::removeStateCallback(SessionStateCallback *ssc){
|
||||
sessionControl->UnregisterAudioSessionNotification((IAudioSessionEvents*) ssc);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue