blob: 9fc5ae4512577c9372addc65c523371d0f00b3d3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
#include <stdafx.h>
#include <initguid.h>
#include "propkey.h"
#include <AudioClient.h>
#include <SpatialAudioClient.h>
#include <functiondiscoverykeys.h>
#include <DevPKey.h>
#include <AudioEngineBaseAPOP.h>
#include "TestMediaType.h"
#include <audioenginebaseapo.h>
#include <MMDeviceAPI.h>
#include <MMDeviceAPIP.h>
#include <WexTestClass.h>
#include <list>
#include <memory>
#include <ctime>
#include <thread>
#include <future>
#include <mutex>
#include <functional>
#include <atlbase.h>
#include "APOOSUpgradeTest.h"
#include "APOStressTest.h"
#include "sinewave.h"
using namespace std;
using namespace wil;
using namespace WEX::Logging;
using namespace WEX::Common;
#define IF_FAILED_RETURN(hr) { HRESULT hrCode = hr; if(FAILED(hrCode)) { return hrCode; } }
#define IF_SUCCEEDED(hr) { HRESULT hrCode = hr; if (!(hrCode == S_OK || hrCode == AUDCLNT_E_WRONG_ENDPOINT_TYPE)) { VERIFY_SUCCEEDED(hrCode); } }
bool SetupSkipRTHeap();
bool CleanupSkipRTHeap();
bool CAPOUpgradeTest::setUpMethod()
{
return SetupSkipRTHeap();
}
bool CAPOUpgradeTest::tearDownMethod()
{
return CleanupSkipRTHeap();
}
void CAPOUpgradeTest::TestUpgrade()
{
UINT cDevices = 0;
com_ptr_nothrow<IMMDeviceEnumerator> spEnumerator;
com_ptr_nothrow<IMMDeviceCollection> spDevices;
VERIFY_SUCCEEDED(CoCreateInstance(__uuidof(MMDeviceEnumerator), nullptr, CLSCTX_ALL, IID_PPV_ARGS(&spEnumerator)));
VERIFY_SUCCEEDED(spEnumerator->EnumAudioEndpoints(eAll, DEVICE_STATE_ACTIVE, &spDevices));
VERIFY_SUCCEEDED(spDevices->GetCount(&cDevices));
for (UINT i = 0; i < cDevices; i++)
{
com_ptr_nothrow<IMMDevice> pDevice = nullptr;
com_ptr_nothrow<IAudioClient2> pAudioClient = nullptr;
com_ptr_nothrow<IMMEndpoint> pEndpoint = nullptr;
BOOL bOffloadCapable = FALSE;
EDataFlow eFlow = eAll;
VERIFY_SUCCEEDED(spDevices->Item(i, &pDevice));
VERIFY_SUCCEEDED(com_query_to_nothrow(pDevice, &pEndpoint));
VERIFY_SUCCEEDED(pEndpoint->GetDataFlow(&eFlow));
VERIFY_SUCCEEDED(pDevice->Activate(__uuidof(IAudioClient2), CLSCTX_ALL, NULL, (void**)&pAudioClient));
VERIFY_SUCCEEDED(pAudioClient->IsOffloadCapable(AudioCategory_Media, &bOffloadCapable));
if (eFlow == eAll || eFlow == eRender)
{
VERIFY_SUCCEEDED(BasicAudioStreaming(pDevice.get()));
VERIFY_SUCCEEDED(BasicSpatialAudio(pDevice.get()));
VERIFY_SUCCEEDED(BasicAudioLoopback(pDevice.get()));
if (bOffloadCapable)
{
VERIFY_SUCCEEDED(BasicOffloadStreaming(pDevice.get()));
}
}
if (eFlow == eAll || eFlow == eCapture)
{
VERIFY_SUCCEEDED(BasicAudioCapture(pDevice.get()));
}
}
}
|