Skip to content

Commit

Permalink
Merge branch 'dev'
Browse files Browse the repository at this point in the history
  • Loading branch information
GoldenTao committed May 31, 2016
2 parents 817edd0 + 66c2540 commit 6f1f46c
Show file tree
Hide file tree
Showing 16 changed files with 314 additions and 216 deletions.
19 changes: 17 additions & 2 deletions EarTrumpet.Interop/AudioDeviceService.cpp
@@ -1,8 +1,8 @@
#include "common.h"
#include "Mmdeviceapi.h"
#include "PolicyConfig.h"
#include "AudioDeviceService.h"
#include "Functiondiscoverykeys_devpkey.h"
#include "PolicyConfig.h"
#include "Propidl.h"
#include "Endpointvolume.h"

Expand Down Expand Up @@ -82,10 +82,25 @@ HRESULT AudioDeviceService::RefreshAudioDevices()
HRESULT AudioDeviceService::SetDefaultAudioDevice(LPWSTR deviceId)
{
CComPtr<IPolicyConfig> policyConfig;
FAST_FAIL(CoCreateInstance(__uuidof(CPolicyConfigClient), nullptr, CLSCTX_INPROC, IID_PPV_ARGS(&policyConfig)));
FAST_FAIL(GetPolicyConfigClient(&policyConfig));
return policyConfig->SetDefaultEndpoint(deviceId, ERole::eMultimedia);
}

HRESULT AudioDeviceService::GetPolicyConfigClient(IPolicyConfig** client)
{
//
// The IPolicyConfig interface GUID changed multiple times between Windows 10 TH1 and RS1
// breaking app compat along the way. We attempt CoCreateInstance twice with known valid GUIDs
// to cover all Windows 10 scenarios.
//
if (FAILED(CoCreateInstance(CLSID_PolicyConfigClient, nullptr, CLSCTX_INPROC, IID_IPolicyConfig_TH2, reinterpret_cast<LPVOID*>(client))))
{
FAST_FAIL(CoCreateInstance(CLSID_PolicyConfigClient, nullptr, CLSCTX_INPROC, IID_IPolicyConfig_TH1, reinterpret_cast<LPVOID*>(client)));
}

return S_OK;
}

HRESULT AudioDeviceService::GetDeviceByDeviceId(PWSTR deviceId, IMMDevice** device)
{
CComPtr<IMMDeviceEnumerator> deviceEnumerator;
Expand Down
1 change: 1 addition & 0 deletions EarTrumpet.Interop/AudioDeviceService.h
Expand Up @@ -21,6 +21,7 @@ namespace EarTrumpet
void CleanUpAudioDevices();
HRESULT GetDeviceByDeviceId(PWSTR deviceId, IMMDevice** device);
HRESULT SetMuteBoolForDevice(LPWSTR deviceId, BOOL value);
HRESULT GetPolicyConfigClient(IPolicyConfig** client);

public:
static AudioDeviceService* instance()
Expand Down
24 changes: 12 additions & 12 deletions EarTrumpet.Interop/AudioSessionService.cpp
Expand Up @@ -89,7 +89,7 @@ HRESULT AudioSessionService::CreateEtAudioSessionFromAudioSession(CComPtr<IAudio
FAST_FAIL(audioSessionControl2->GetGroupingParam(&etAudioSession->GroupingId));

CComHeapPtr<wchar_t> sessionIdString;
FAST_FAIL(audioSessionControl2->GetSessionIdentifier(&sessionIdString));
FAST_FAIL(audioSessionControl2->GetSessionInstanceIdentifier(&sessionIdString));

hash<wstring> stringHash;
etAudioSession->SessionId = stringHash(static_cast<PWSTR>(sessionIdString));
Expand All @@ -100,9 +100,9 @@ HRESULT AudioSessionService::CreateEtAudioSessionFromAudioSession(CComPtr<IAudio
FAST_FAIL(audioSessionControl->QueryInterface(IID_PPV_ARGS(&simpleAudioVolume)));
FAST_FAIL(simpleAudioVolume->GetMasterVolume(&etAudioSession->Volume));

BOOL isMuted;
FAST_FAIL(simpleAudioVolume->GetMute(&isMuted));
etAudioSession->IsMuted = !!isMuted;
BOOL isMuted;
FAST_FAIL(simpleAudioVolume->GetMute(&isMuted));
etAudioSession->IsMuted = !!isMuted;

HRESULT hr = IsImmersiveProcess(pid);
if (hr == S_OK)
Expand Down Expand Up @@ -275,16 +275,16 @@ HRESULT AudioSessionService::SetAudioSessionVolume(unsigned long sessionId, floa

HRESULT AudioSessionService::SetAudioSessionMute(unsigned long sessionId, bool isMuted)
{
if (!_sessionMap[sessionId])
{
return E_INVALIDARG;
}
if (!_sessionMap[sessionId])
{
return E_INVALIDARG;
}

CComPtr<ISimpleAudioVolume> simpleAudioVolume;
FAST_FAIL(_sessionMap[sessionId]->QueryInterface(IID_PPV_ARGS(&simpleAudioVolume)));
CComPtr<ISimpleAudioVolume> simpleAudioVolume;
FAST_FAIL(_sessionMap[sessionId]->QueryInterface(IID_PPV_ARGS(&simpleAudioVolume)));

FAST_FAIL(simpleAudioVolume->SetMute(isMuted, nullptr));
return S_OK;
FAST_FAIL(simpleAudioVolume->SetMute(isMuted, nullptr));
return S_OK;
}

HRESULT AudioSessionService::GetAppProperties(PCWSTR pszAppId, PWSTR* ppszName, PWSTR* ppszIcon, ULONG *background)
Expand Down
10 changes: 8 additions & 2 deletions EarTrumpet.Interop/PolicyConfig.h
@@ -1,7 +1,13 @@
#pragma once

interface DECLSPEC_UUID("f8679f50-850a-41cf-9c72-430f290290c8") IPolicyConfig;
class DECLSPEC_UUID("870af99c-171d-4f9e-af0d-e63df40c2bc9") CPolicyConfigClient;
// 870AF99C-171D-4F9E-AF0D-E63DF40C2BC9
const CLSID CLSID_PolicyConfigClient = { 0x870AF99C, 0x171D, 0x4F9E, { 0xAF, 0x0D, 0xE6, 0x3D, 0xF4, 0x0C, 0x2B, 0xC9 } };

// CA286FC3-91FD-42C3-8E9B-CAAFA66242E3
const GUID IID_IPolicyConfig_TH1 = { 0xCA286FC3, 0x91FD, 0x42C3, { 0x8E, 0x9B, 0xCA, 0xAF, 0xA6, 0x62, 0x42, 0xE3 } };

// 6BE54BE8-A068-4875-A49D-0C2966473B11
const GUID IID_IPolicyConfig_TH2 = { 0x6BE54BE8, 0xA068, 0x4875, { 0xA4, 0x9D, 0x0C, 0x29, 0x66, 0x47, 0x3B, 0x11 } };

interface IPolicyConfig : public IUnknown
{
Expand Down
1 change: 1 addition & 0 deletions EarTrumpet.Interop/exports.cpp
@@ -1,6 +1,7 @@
#include "common.h"
#include <Audiopolicy.h>
#include <Mmdeviceapi.h>
#include "PolicyConfig.h"
#include "AudioSessionService.h"
#include "AudioDeviceService.h"

Expand Down

0 comments on commit 6f1f46c

Please sign in to comment.