Commit graph portaudio/src/hostapi/wasapi
Author SHA1 Message Date
Nicholas Appleton
ea11061b20 commit Rainer's work and make some minor modifications to the top-level cmakelists to make visual studio happy 2018-10-02 21:54:44 +10:00
dmitrykos
eb4a7d25dc wasapi: fixed callback not called for Input stream if 1 channel format is requested 2018-09-23 20:44:21 +03:00
dmitrykos
5dec767af1 wasapi: fixed crash on NULL 2018-09-10 23:09:44 +03:00
dmitrykos
fe2c8e1f42 wasapi: fixed input device can not be opened in Exclusive mode (regression of previous commit) 2018-09-10 22:55:27 +03:00
dmitrykos
c3fee03ff1 wasapi: support Exclusive mode on UWP (use new function PaWasapi_SetDefaultInterfaceId to set device's interface id to make Exclusive mode work);
- support for explicit 8.24 format (24-bit inside 32-bit container) by specifying paCustomFormat (see IMPORTANT notes in the header file);
 - new flag paWinWasapiExplicitSampleFormat to force explicit format and avoid fallback to a closest working;
 - new function PaWasapi_GetDeviceCurrentFormat to get device format of the opened stream;
 - support PaWasapi_ThreadPriorityXXX API on UWP to boot thread priority;
 - improved selection of the closest format in Exclusive mode.
2018-09-06 20:45:22 +03:00
dmitrykos
d7a4cb482d wasapi: fixed compilation error of PaWasapi_GetAudioClient() 2018-07-19 21:42:21 +03:00
dmitrykos
a802290e83 wasapi: new PaWasapi_GetAudioClient() API to get pointer to IAudioClient from PaStream, workaround to get real Windows version in order to be able to create correct version of IAudioClient interface (Windows 10 was reported as Windows 8 when using just GetVersion()) 2018-06-30 12:21:59 +03:00
dmitrykos
d3e65ce690 wasapi: correction to PaWasapi_UpdateDeviceList() API by making it unavailable by default unless PA_WASAPI_MAX_CONST_DEVICE_COUNT is explicitly defined 2018-04-02 22:15:49 +03:00
dmitrykos
eb62287494 wasapi: new WASAPI specific API PaWasapi_UpdateDeviceList() which allows to update WASAPI device list dynamically without a need to call Pa_Terminate() and then Pa_Initialize().
This new implementation overcomes current limitation of Pa_GetDeviceCount() API which gives constant device count by making WASAPI device list constant (32 devices by default) where 32 device slots can either be filled with a real device info or be empty for a future device changes.

Constant device list size can be altered by PA_WASAPI_MAX_CONST_DEVICE_COUNT define during a compile time. If PA_WASAPI_MAX_CONST_DEVICE_COUNT is set to 0 then PaWasapi_UpdateDeviceList() will be unavailable as well as dynamic device list update functionality.

This implementation also detects the audio device format change if user alters it via Windows Audio Controller GUI.

This implementation also makes WASAPI backend ready for a future implementation of device list updates via PortAudio public API. See internal PaError UpdateDeviceList().
2018-04-02 21:50:16 +03:00
dmitrykos
a525c38289 wasapi: fixed failure to initialize when Capture device is not provided by OS, silenced warnings in log functions 2018-01-10 20:58:14 +02:00
Ross Bencina
1bdcb9e413 Merge branch 'winrt' into 'master'
WASAPI: corrections for Windows 10 UWP

+1: Ross Bencina, Anonymous, Roland Winklmeier

Merged-on: https://assembla.com/code/portaudio/git/merge_requests/4995123
2017-11-13 06:42:49 +00:00
dmitrykos
bc40f42cba wasapi: corrected GetWindowsVersion() to return Windows 10 (was max Windows 8)
wasapi: use IAudioClient3 for Windows 10 for best compatibility
wasapi: fix compilation when Windows 10 SDK (10.0.15063.0) is used by removing SignalObjectAndWait() definition which creates duplicates with the system defined SignalObjectAndWait() (since 10.0.15063.0 it is supported by the OS again)
2017-05-29 22:44:36 +03:00
Ross Bencina
1cf10aa43f remove Microsoft copyright include files from src/hostapi/wasapi/mingw-include 2016-09-17 18:21:52 +10:00
dmitrykos
e1d4ec6664 wasapi: made ActivateAudioInterface_WINRT more universal in terms of getting other audio interfaces, for example IAudioEndpointVolume 2016-09-01 09:00:38 +03:00
dmitrykos
72dd5db968 wasapi: return E_NOINTERFACE in PaActivateAudioInterfaceCompletionHandler::QueryInterface, use C-style API for calling interface functions (in order to be unified with the rest of WASAPI code) 2016-08-29 09:54:49 +03:00
dmitrykos
319b19203a wasapi: replaced InterlockedCompareExchange with InterlockedOr and added clarifying comment why Interlocked API is used 2016-08-26 22:31:45 +03:00
dmitrykos
dae0d7f8e7 wasapi: reverted the usage of Interlocked APIs for PaWasapiStream::running 2016-08-26 09:43:50 +03:00
dmitrykos
46bce3c39f wasapi: use InterlockedXXX APIs to secure inter-thread r/w access to variables to avoid possible deadlocks or logic corruption 2016-08-24 22:04:17 +03:00
dmitrykos
ef449bb5bf wasapi: more cleanup - normalized WIN32_WINRT to PA_WINRT, removed excessive declarations from SignalObjectAndWait, ActivateAudioInterfaceCompletionHandler set of functions 2016-08-14 19:01:20 +03:00
dmitrykos
326549c55e wasapi: use Windows common Sleep() API instead of PA_Sleep()
use GetTickCount64() API which is awailable for Windows Store app instead of _ftime_s()
remove WAVEFORMAT and WAVEFORMATEX declaration and use the corresponding Windows include file instead
2016-08-14 10:52:36 +03:00
dmitrykos
26c0dc4458 wasapi: code cleanup, removed compiler warnings 2016-08-08 21:09:15 +03:00
dmitrykos
2e7545f17f wasapi: ported to WinRT (UWP)
os: compatibility fixes for compilation of PortAudio as Windows Store library (only WASAPI hostapi is compatible with Windows Store APIs)
2016-08-03 22:39:41 +03:00
Phil Burk
ed463ba658 Normalize all the line endings 2016-05-18 22:13:20 -07:00
dmitrykos
f7b2d1542f wasapi: correction to the previous commit 2015-10-21 14:25:07 +00:00
dmitrykos
58eca02986 wasapi: workaround to avoid PaWasapi_Initialize() failure when enumerating devices and device fails to report min/default periods with IAudioClient::GetDevicePeriod(): ignore error and assign WASAPI common known period values for min/default 2015-10-20 16:02:39 +00:00
dmitrykos
4e194eaecf wasapi: support for setting the WASAPI's AudioClientProperties options via PaWasapiStreamInfo struct (__IAudioClient2_INTERFACE_DEFINED__ must be defined by Windows SDK (for Windows 8 and up) to have effect from these new options, otherwise it will be noop) 2015-10-19 11:03:31 +00:00
robiwan
3438e46e74 Minor refactoring to remove some warnings 2012-06-29 11:44:12 +00:00
robiwan
2f29f8611c Added GUID, enumerators and structs to accomodate Vista and later OSs. 2012-06-29 09:58:48 +00:00
dmitrykos
4ae4fa0ef9 wasapi: provide meaningful error code when opening the stream and error occurred instead of just paInvalidDevice 2012-04-16 08:16:20 +00:00
dmitrykos
5701b05e0f wasapi: zero wasapi host api rep immediately after init. prevents (unlikely) issue with trying to free uninited allocations if com init fails during Pa_Initialize() (Ross Bencina) 2012-04-02 12:25:14 +00:00
dmitrykos
341eb04550 wasapi:
- fixed possible buffer overrun inside WASAPI for Output poll-driven mode according ticket #196 (thanks to Ross Bencina for spotting this and proposing the solution)
2012-02-16 15:02:08 +00:00
dmitrykos
9bc432b603 wasapi:
- fixed device name incorrect in case it contains non-Latin characters (thanks to Robert Bielik for proposed solution), now it is converted to UTF-8 encoded string
- fixed damaged audio (pops & clicks) for Input exclusive event-driven mode if specified latency was below 23 ms
2012-02-16 14:49:28 +00:00
rossb
52ab9d6600 refactored COM initialization for dsound, asio and wasapi to new source file pa_win_coinitialize.c. fixes com uninitialisation bugs in error cases. resolves ticket #128 2011-05-09 20:05:34 +00:00
rossb
cbd24dc45c renamed PaUtil_GetBufferProcessorInputLatency to PaUtil_GetBufferProcessorInputLatencyFrames and PaUtil_GetBufferProcessorOutputLatency to PaUtil_GetBufferProcessorOutputLatencyFrames. see ticket #161 2011-05-02 17:07:11 +00:00
dmitrykos
ff61de145b wasapi:
- fixed warning of incompatible type usage when ring-buffer is used for blocking interface
 - fixed compilation using MSYS with MinGW compiler (regenerate makefile with configure)
2011-03-08 17:20:07 +00:00
dmitrykos
3fb0ef9e30 wasapi: fixed the bug when on stream stop/start/stop/start sequence callback could be called with number of samples smaller than requested by user in Pa_OpenStream 2011-02-21 22:41:06 +00:00
dmitrykos
f588f3cd5d wasapi: - releasing Input/Output buffer if error occurred inside the processing routine 2011-02-03 15:37:12 +00:00
dmitrykos
2b0faea85c wasapi:
- fixed blocking interface, Input and Output
 - improved Exclusive Input device latency tunning
 - applied path provided by Jean-François Charron (D-BOX Technologies Inc.) which improves handling of COM objects in multi-threaded environment and initialization stage which could under certain conditions return paNoError event when initialization failed
2011-02-03 15:15:44 +00:00
dmitrykos
272adbefc7 wasapi: allow mono input/output streams be created when Blocking interface is used. Thanks to Chris ([email protected]) for providing the patch. 2011-01-03 18:33:32 +00:00
dmitrykos
8b6f0610b6 wasapi: fixed audio device not released to other applications if WASAPI Exclusive stream is stopped but not yet closed. Bug does not affect Shared mode streams. Fixed possible object's leakage in situation when WASAPI thread encountered an error and stopped and user decided to start stream again without prior closing it. 2010-12-26 16:36:52 +00:00
dmitrykos
41645b30d5 wasapi: fixed audio gain is decreased by 2 when audio stream is opened for capturing and 1 (Mono) channel selected, this bug occurs only if non-Stereo input source used (mono mic). 2010-12-26 16:17:56 +00:00
dmitrykos
f1e8193ae1 wasapi:
- using WAVE_FORMAT_PCM for mono/stereo 8/16-bit stream configuration to avoid possible driver refusal upon audio client creation
 - modified default speaker mask for 5.1 and 7.1 configuration to _SURROUND (correct) versions, added default speaker configuration for 2.1, 4.1, 6.1 cases
2010-11-07 08:23:51 +00:00
dmitrykos
7b3d837bbb wasapi: fixed audio stream failing to open on Windows 7 in Exclusive mode if suggestedLatency parameter is 0 and user framesPerBuffer is less than 3 milliseconds 2010-11-06 01:16:34 +00:00
dmitrykos
e5b04a89da wasapi: fixed capturing (Input stream) if Polling mode is used, ProcessInputBuffer was broken erroneously returning AUDCLNT_S_BUFFER_EMPTY and thus breaking Input thread. 2010-10-20 17:32:04 +00:00
dmitrykos
738b8ad327 wasapi: improved audio quality stability in Shared mode if framesPerBuffer (from user-side) value is lower than 10 milliseconds, now even 1 frame provides stable quality. Exclusive mode is also affected by this improvement. 2010-10-20 17:00:54 +00:00
dmitrykos
52a9ce20ad wasapi:
- fixed compile under MinGW64 compiler (gcc version 4.5.1 20100702)
 - cleaned portability typedefs, thanks to MinGW64 project added KS headers which also work well for MinGW32 (tested: gcc version 4.5.0)
wdmks:
 - made it possible to use additional WDM/KS info for WMME/DS back-ends by defining PAWIN_USE_WDMKS_DEVICE_INFO for compilation by MinGW32/64 compilers if you include modified headers located in '\src\hostapi\wasapi\mingw-include'
2010-08-24 17:44:00 +00:00
dmitrykos
9c7974c76c wasapi:
- fixed alignment missing for host buffer if overall buffer size was set to less than 3ms that results in device timeout
 - advanced Event driven mode and extended the range of host buffer size which can operate in this mode up up to 20.66 ms, e.g. your device buffer size will vary in range 3 - 20.66 ms, if goes above then Poll driven mode is switched on automatically
2010-08-06 20:25:07 +00:00
dmitrykos
24c304db21 wasapi:
- fixed compilation by MinGW, was failing due to double ambiguous jack describing enums used in KS
ds:
 - fixed compile by MinGW, was failing due to missing casts to LPVOID * and usage of UINT instead of DWORD by PaWinDsStream::previousPlayCursor
2010-08-03 21:02:52 +00:00
dmitrykos
f2badb7725 wasapi:
- added functionality to enumerate jacks and their description
 - added example which demonstrates jacks enumeration technique
Thanks Reid Bishop for providing the idea for this extended functionality and patch with implementation.
2010-07-23 10:04:03 +00:00
dmitrykos
e540964ffc wasapi: - fixed frames preloading for buffer mode - paUtilFixedHostBufferSize 2010-07-20 21:01:07 +00:00