VirtualBox

source: vbox/trunk/src/VBox/Devices/Audio/testcase/tstAudioClient3.cpp@ 90778

Last change on this file since 90778 was 87841, checked in by vboxsync, 3 years ago

Audio/testcase: Added initial tstAudioClient3 to manually report, verify and set audio periods on hardware level via IAudioClient3 [SCM fix].

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.4 KB
Line 
1/* $Id: tstAudioClient3.cpp 87841 2021-02-23 08:03:01Z vboxsync $ */
2/** @file
3 * Audio testcase - Tests for the IAudioClient3 interface.
4 */
5
6/*
7 * Copyright (C) 2021 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 */
17
18
19/*********************************************************************************************************************************
20* Header Files *
21*********************************************************************************************************************************/
22
23#include <iprt/errcore.h>
24#include <iprt/initterm.h>
25#include <iprt/mem.h>
26#include <iprt/rand.h>
27#include <iprt/stream.h>
28#include <iprt/string.h>
29#include <iprt/test.h>
30
31#include <iprt/win/windows.h>
32
33#include <Audioclient.h>
34#include <mmdeviceapi.h>
35
36int main(int argc, char **argv)
37{
38 RTR3InitExe(argc, &argv, 0);
39
40 /*
41 * Initialize IPRT and create the test.
42 */
43 RTTEST hTest;
44 int rc = RTTestInitAndCreate("tstAudioMixBuffer", &hTest);
45 if (rc)
46 return rc;
47 RTTestBanner(hTest);
48
49 /* Note: IAudioClient3 is supported on Win8 or newer. */
50
51 /** @todo Very crude for now, lacks error checking and such. Later. */
52
53 HRESULT hr = CoInitialize(NULL);
54
55 IMMDeviceEnumerator* pEnumerator;
56 hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL,
57 __uuidof(IMMDeviceEnumerator),
58 reinterpret_cast<void**>(&pEnumerator));
59
60 IMMDevice* pDevice;
61 hr = pEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, &pDevice);
62
63 IAudioClient3* pAudioClient;
64 hr = pDevice->Activate(__uuidof(IAudioClient3), CLSCTX_ALL, NULL, reinterpret_cast<void**>(&pAudioClient));
65
66 WAVEFORMATEX* pFormat;
67 hr = pAudioClient->GetMixFormat(&pFormat);
68
69 UINT32 defaultPeriodInFrames;
70 UINT32 fundamentalPeriodInFrames;
71 UINT32 minPeriodInFrames;
72 UINT32 maxPeriodInFrames;
73 hr = pAudioClient->GetSharedModeEnginePeriod(pFormat,
74 &defaultPeriodInFrames,
75 &fundamentalPeriodInFrames,
76 &minPeriodInFrames,
77 &maxPeriodInFrames);
78
79 RTTestPrintf(hTest, RTTESTLVL_ALWAYS, "def=%RU32, fundamental=%RU32, min=%RU32, max=%RU32\n",
80 defaultPeriodInFrames, fundamentalPeriodInFrames, minPeriodInFrames, maxPeriodInFrames);
81
82 uint32_t cfDefault = defaultPeriodInFrames * 2;
83
84 RTTestPrintf(hTest, RTTESTLVL_ALWAYS, "Trying to set %RU32 as default ...\n", cfDefault);
85
86 hr = pAudioClient->InitializeSharedAudioStream(0, cfDefault, pFormat, NULL);
87 if (hr != S_OK)
88 RTTestPrintf(hTest, RTTESTLVL_ALWAYS, "Unable to set new period");
89 else
90 {
91 RTTestPrintf(hTest, RTTESTLVL_ALWAYS, "OK");
92
93 hr = pAudioClient->Start();
94
95 /** @todo Do some waiting / testing here. */
96 }
97
98 /*
99 * Summary
100 */
101 return RTTestSummaryAndDestroy(hTest);
102}
Note: See TracBrowser for help on using the repository browser.

© 2023 Oracle
ContactPrivacy policyTerms of Use