cannam@92
|
1 #ifndef PA_WIN_WMME_H
|
cannam@92
|
2 #define PA_WIN_WMME_H
|
cannam@92
|
3 /*
|
cannam@92
|
4 * $Id: pa_win_wmme.h 1592 2011-02-04 10:41:58Z rossb $
|
cannam@92
|
5 * PortAudio Portable Real-Time Audio Library
|
cannam@92
|
6 * MME specific extensions
|
cannam@92
|
7 *
|
cannam@92
|
8 * Copyright (c) 1999-2000 Ross Bencina and Phil Burk
|
cannam@92
|
9 *
|
cannam@92
|
10 * Permission is hereby granted, free of charge, to any person obtaining
|
cannam@92
|
11 * a copy of this software and associated documentation files
|
cannam@92
|
12 * (the "Software"), to deal in the Software without restriction,
|
cannam@92
|
13 * including without limitation the rights to use, copy, modify, merge,
|
cannam@92
|
14 * publish, distribute, sublicense, and/or sell copies of the Software,
|
cannam@92
|
15 * and to permit persons to whom the Software is furnished to do so,
|
cannam@92
|
16 * subject to the following conditions:
|
cannam@92
|
17 *
|
cannam@92
|
18 * The above copyright notice and this permission notice shall be
|
cannam@92
|
19 * included in all copies or substantial portions of the Software.
|
cannam@92
|
20 *
|
cannam@92
|
21 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
cannam@92
|
22 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
cannam@92
|
23 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
cannam@92
|
24 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
|
cannam@92
|
25 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
|
cannam@92
|
26 * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
cannam@92
|
27 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
cannam@92
|
28 */
|
cannam@92
|
29
|
cannam@92
|
30 /*
|
cannam@92
|
31 * The text above constitutes the entire PortAudio license; however,
|
cannam@92
|
32 * the PortAudio community also makes the following non-binding requests:
|
cannam@92
|
33 *
|
cannam@92
|
34 * Any person wishing to distribute modifications to the Software is
|
cannam@92
|
35 * requested to send the modifications to the original developer so that
|
cannam@92
|
36 * they can be incorporated into the canonical version. It is also
|
cannam@92
|
37 * requested that these non-binding requests be included along with the
|
cannam@92
|
38 * license above.
|
cannam@92
|
39 */
|
cannam@92
|
40
|
cannam@92
|
41 /** @file
|
cannam@92
|
42 @ingroup public_header
|
cannam@92
|
43 @brief WMME-specific PortAudio API extension header file.
|
cannam@92
|
44 */
|
cannam@92
|
45
|
cannam@92
|
46 #include "portaudio.h"
|
cannam@92
|
47 #include "pa_win_waveformat.h"
|
cannam@92
|
48
|
cannam@92
|
49 #ifdef __cplusplus
|
cannam@92
|
50 extern "C"
|
cannam@92
|
51 {
|
cannam@92
|
52 #endif /* __cplusplus */
|
cannam@92
|
53
|
cannam@92
|
54
|
cannam@92
|
55 /* The following are flags which can be set in
|
cannam@92
|
56 PaWinMmeStreamInfo's flags field.
|
cannam@92
|
57 */
|
cannam@92
|
58
|
cannam@92
|
59 #define paWinMmeUseLowLevelLatencyParameters (0x01)
|
cannam@92
|
60 #define paWinMmeUseMultipleDevices (0x02) /* use mme specific multiple device feature */
|
cannam@92
|
61 #define paWinMmeUseChannelMask (0x04)
|
cannam@92
|
62
|
cannam@92
|
63 /* By default, the mme implementation drops the processing thread's priority
|
cannam@92
|
64 to THREAD_PRIORITY_NORMAL and sleeps the thread if the CPU load exceeds 100%
|
cannam@92
|
65 This flag disables any priority throttling. The processing thread will always
|
cannam@92
|
66 run at THREAD_PRIORITY_TIME_CRITICAL.
|
cannam@92
|
67 */
|
cannam@92
|
68 #define paWinMmeDontThrottleOverloadedProcessingThread (0x08)
|
cannam@92
|
69
|
cannam@92
|
70 /* Flags for non-PCM spdif passthrough.
|
cannam@92
|
71 */
|
cannam@92
|
72 #define paWinMmeWaveFormatDolbyAc3Spdif (0x10)
|
cannam@92
|
73 #define paWinMmeWaveFormatWmaSpdif (0x20)
|
cannam@92
|
74
|
cannam@92
|
75
|
cannam@92
|
76 typedef struct PaWinMmeDeviceAndChannelCount{
|
cannam@92
|
77 PaDeviceIndex device;
|
cannam@92
|
78 int channelCount;
|
cannam@92
|
79 }PaWinMmeDeviceAndChannelCount;
|
cannam@92
|
80
|
cannam@92
|
81
|
cannam@92
|
82 typedef struct PaWinMmeStreamInfo{
|
cannam@92
|
83 unsigned long size; /**< sizeof(PaWinMmeStreamInfo) */
|
cannam@92
|
84 PaHostApiTypeId hostApiType; /**< paMME */
|
cannam@92
|
85 unsigned long version; /**< 1 */
|
cannam@92
|
86
|
cannam@92
|
87 unsigned long flags;
|
cannam@92
|
88
|
cannam@92
|
89 /* low-level latency setting support
|
cannam@92
|
90 These settings control the number and size of host buffers in order
|
cannam@92
|
91 to set latency. They will be used instead of the generic parameters
|
cannam@92
|
92 to Pa_OpenStream() if flags contains the PaWinMmeUseLowLevelLatencyParameters
|
cannam@92
|
93 flag.
|
cannam@92
|
94
|
cannam@92
|
95 If PaWinMmeStreamInfo structures with PaWinMmeUseLowLevelLatencyParameters
|
cannam@92
|
96 are supplied for both input and output in a full duplex stream, then the
|
cannam@92
|
97 input and output framesPerBuffer must be the same, or the larger of the
|
cannam@92
|
98 two must be a multiple of the smaller, otherwise a
|
cannam@92
|
99 paIncompatibleHostApiSpecificStreamInfo error will be returned from
|
cannam@92
|
100 Pa_OpenStream().
|
cannam@92
|
101 */
|
cannam@92
|
102 unsigned long framesPerBuffer;
|
cannam@92
|
103 unsigned long bufferCount; /* formerly numBuffers */
|
cannam@92
|
104
|
cannam@92
|
105 /* multiple devices per direction support
|
cannam@92
|
106 If flags contains the PaWinMmeUseMultipleDevices flag,
|
cannam@92
|
107 this functionality will be used, otherwise the device parameter to
|
cannam@92
|
108 Pa_OpenStream() will be used instead.
|
cannam@92
|
109 If devices are specified here, the corresponding device parameter
|
cannam@92
|
110 to Pa_OpenStream() should be set to paUseHostApiSpecificDeviceSpecification,
|
cannam@92
|
111 otherwise an paInvalidDevice error will result.
|
cannam@92
|
112 The total number of channels accross all specified devices
|
cannam@92
|
113 must agree with the corresponding channelCount parameter to
|
cannam@92
|
114 Pa_OpenStream() otherwise a paInvalidChannelCount error will result.
|
cannam@92
|
115 */
|
cannam@92
|
116 PaWinMmeDeviceAndChannelCount *devices;
|
cannam@92
|
117 unsigned long deviceCount;
|
cannam@92
|
118
|
cannam@92
|
119 /*
|
cannam@92
|
120 support for WAVEFORMATEXTENSIBLE channel masks. If flags contains
|
cannam@92
|
121 paWinMmeUseChannelMask this allows you to specify which speakers
|
cannam@92
|
122 to address in a multichannel stream. Constants for channelMask
|
cannam@92
|
123 are specified in pa_win_waveformat.h
|
cannam@92
|
124
|
cannam@92
|
125 */
|
cannam@92
|
126 PaWinWaveFormatChannelMask channelMask;
|
cannam@92
|
127
|
cannam@92
|
128 }PaWinMmeStreamInfo;
|
cannam@92
|
129
|
cannam@92
|
130
|
cannam@92
|
131 /** Retrieve the number of wave in handles used by a PortAudio WinMME stream.
|
cannam@92
|
132 Returns zero if the stream is output only.
|
cannam@92
|
133
|
cannam@92
|
134 @return A non-negative value indicating the number of wave in handles
|
cannam@92
|
135 or, a PaErrorCode (which are always negative) if PortAudio is not initialized
|
cannam@92
|
136 or an error is encountered.
|
cannam@92
|
137
|
cannam@92
|
138 @see PaWinMME_GetStreamInputHandle
|
cannam@92
|
139 */
|
cannam@92
|
140 int PaWinMME_GetStreamInputHandleCount( PaStream* stream );
|
cannam@92
|
141
|
cannam@92
|
142
|
cannam@92
|
143 /** Retrieve a wave in handle used by a PortAudio WinMME stream.
|
cannam@92
|
144
|
cannam@92
|
145 @param stream The stream to query.
|
cannam@92
|
146 @param handleIndex The zero based index of the wave in handle to retrieve. This
|
cannam@92
|
147 should be in the range [0, PaWinMME_GetStreamInputHandleCount(stream)-1].
|
cannam@92
|
148
|
cannam@92
|
149 @return A valid wave in handle, or NULL if an error occurred.
|
cannam@92
|
150
|
cannam@92
|
151 @see PaWinMME_GetStreamInputHandle
|
cannam@92
|
152 */
|
cannam@92
|
153 HWAVEIN PaWinMME_GetStreamInputHandle( PaStream* stream, int handleIndex );
|
cannam@92
|
154
|
cannam@92
|
155
|
cannam@92
|
156 /** Retrieve the number of wave out handles used by a PortAudio WinMME stream.
|
cannam@92
|
157 Returns zero if the stream is input only.
|
cannam@92
|
158
|
cannam@92
|
159 @return A non-negative value indicating the number of wave out handles
|
cannam@92
|
160 or, a PaErrorCode (which are always negative) if PortAudio is not initialized
|
cannam@92
|
161 or an error is encountered.
|
cannam@92
|
162
|
cannam@92
|
163 @see PaWinMME_GetStreamOutputHandle
|
cannam@92
|
164 */
|
cannam@92
|
165 int PaWinMME_GetStreamOutputHandleCount( PaStream* stream );
|
cannam@92
|
166
|
cannam@92
|
167
|
cannam@92
|
168 /** Retrieve a wave out handle used by a PortAudio WinMME stream.
|
cannam@92
|
169
|
cannam@92
|
170 @param stream The stream to query.
|
cannam@92
|
171 @param handleIndex The zero based index of the wave out handle to retrieve.
|
cannam@92
|
172 This should be in the range [0, PaWinMME_GetStreamOutputHandleCount(stream)-1].
|
cannam@92
|
173
|
cannam@92
|
174 @return A valid wave out handle, or NULL if an error occurred.
|
cannam@92
|
175
|
cannam@92
|
176 @see PaWinMME_GetStreamOutputHandleCount
|
cannam@92
|
177 */
|
cannam@92
|
178 HWAVEOUT PaWinMME_GetStreamOutputHandle( PaStream* stream, int handleIndex );
|
cannam@92
|
179
|
cannam@92
|
180
|
cannam@92
|
181 #ifdef __cplusplus
|
cannam@92
|
182 }
|
cannam@92
|
183 #endif /* __cplusplus */
|
cannam@92
|
184
|
cannam@92
|
185 #endif /* PA_WIN_WMME_H */
|