annotate src/portaudio_20140130/include/pa_win_waveformat.h @ 83:ae30d91d2ffe

Replace these with versions built using an older toolset (so as to avoid ABI compatibilities when linking on Ubuntu 14.04 for packaging purposes)
author Chris Cannam
date Fri, 07 Feb 2020 11:51:13 +0000
parents 7ddb4fc30dac
children
rev   line source
Chris@39 1 #ifndef PA_WIN_WAVEFORMAT_H
Chris@39 2 #define PA_WIN_WAVEFORMAT_H
Chris@39 3
Chris@39 4 /*
Chris@39 5 * PortAudio Portable Real-Time Audio Library
Chris@39 6 * Windows WAVEFORMAT* data structure utilities
Chris@39 7 * portaudio.h should be included before this file.
Chris@39 8 *
Chris@39 9 * Copyright (c) 2007 Ross Bencina
Chris@39 10 *
Chris@39 11 * Permission is hereby granted, free of charge, to any person obtaining
Chris@39 12 * a copy of this software and associated documentation files
Chris@39 13 * (the "Software"), to deal in the Software without restriction,
Chris@39 14 * including without limitation the rights to use, copy, modify, merge,
Chris@39 15 * publish, distribute, sublicense, and/or sell copies of the Software,
Chris@39 16 * and to permit persons to whom the Software is furnished to do so,
Chris@39 17 * subject to the following conditions:
Chris@39 18 *
Chris@39 19 * The above copyright notice and this permission notice shall be
Chris@39 20 * included in all copies or substantial portions of the Software.
Chris@39 21 *
Chris@39 22 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
Chris@39 23 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
Chris@39 24 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
Chris@39 25 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
Chris@39 26 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
Chris@39 27 * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
Chris@39 28 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Chris@39 29 */
Chris@39 30
Chris@39 31 /*
Chris@39 32 * The text above constitutes the entire PortAudio license; however,
Chris@39 33 * the PortAudio community also makes the following non-binding requests:
Chris@39 34 *
Chris@39 35 * Any person wishing to distribute modifications to the Software is
Chris@39 36 * requested to send the modifications to the original developer so that
Chris@39 37 * they can be incorporated into the canonical version. It is also
Chris@39 38 * requested that these non-binding requests be included along with the
Chris@39 39 * license above.
Chris@39 40 */
Chris@39 41
Chris@39 42 /** @file
Chris@39 43 @ingroup public_header
Chris@39 44 @brief Windows specific PortAudio API extension and utilities header file.
Chris@39 45 */
Chris@39 46
Chris@39 47 #ifdef __cplusplus
Chris@39 48 extern "C" {
Chris@39 49 #endif
Chris@39 50
Chris@39 51 /*
Chris@39 52 The following #defines for speaker channel masks are the same
Chris@39 53 as those in ksmedia.h, except with PAWIN_ prepended, KSAUDIO_ removed
Chris@39 54 in some cases, and casts to PaWinWaveFormatChannelMask added.
Chris@39 55 */
Chris@39 56
Chris@39 57 typedef unsigned long PaWinWaveFormatChannelMask;
Chris@39 58
Chris@39 59 /* Speaker Positions: */
Chris@39 60 #define PAWIN_SPEAKER_FRONT_LEFT ((PaWinWaveFormatChannelMask)0x1)
Chris@39 61 #define PAWIN_SPEAKER_FRONT_RIGHT ((PaWinWaveFormatChannelMask)0x2)
Chris@39 62 #define PAWIN_SPEAKER_FRONT_CENTER ((PaWinWaveFormatChannelMask)0x4)
Chris@39 63 #define PAWIN_SPEAKER_LOW_FREQUENCY ((PaWinWaveFormatChannelMask)0x8)
Chris@39 64 #define PAWIN_SPEAKER_BACK_LEFT ((PaWinWaveFormatChannelMask)0x10)
Chris@39 65 #define PAWIN_SPEAKER_BACK_RIGHT ((PaWinWaveFormatChannelMask)0x20)
Chris@39 66 #define PAWIN_SPEAKER_FRONT_LEFT_OF_CENTER ((PaWinWaveFormatChannelMask)0x40)
Chris@39 67 #define PAWIN_SPEAKER_FRONT_RIGHT_OF_CENTER ((PaWinWaveFormatChannelMask)0x80)
Chris@39 68 #define PAWIN_SPEAKER_BACK_CENTER ((PaWinWaveFormatChannelMask)0x100)
Chris@39 69 #define PAWIN_SPEAKER_SIDE_LEFT ((PaWinWaveFormatChannelMask)0x200)
Chris@39 70 #define PAWIN_SPEAKER_SIDE_RIGHT ((PaWinWaveFormatChannelMask)0x400)
Chris@39 71 #define PAWIN_SPEAKER_TOP_CENTER ((PaWinWaveFormatChannelMask)0x800)
Chris@39 72 #define PAWIN_SPEAKER_TOP_FRONT_LEFT ((PaWinWaveFormatChannelMask)0x1000)
Chris@39 73 #define PAWIN_SPEAKER_TOP_FRONT_CENTER ((PaWinWaveFormatChannelMask)0x2000)
Chris@39 74 #define PAWIN_SPEAKER_TOP_FRONT_RIGHT ((PaWinWaveFormatChannelMask)0x4000)
Chris@39 75 #define PAWIN_SPEAKER_TOP_BACK_LEFT ((PaWinWaveFormatChannelMask)0x8000)
Chris@39 76 #define PAWIN_SPEAKER_TOP_BACK_CENTER ((PaWinWaveFormatChannelMask)0x10000)
Chris@39 77 #define PAWIN_SPEAKER_TOP_BACK_RIGHT ((PaWinWaveFormatChannelMask)0x20000)
Chris@39 78
Chris@39 79 /* Bit mask locations reserved for future use */
Chris@39 80 #define PAWIN_SPEAKER_RESERVED ((PaWinWaveFormatChannelMask)0x7FFC0000)
Chris@39 81
Chris@39 82 /* Used to specify that any possible permutation of speaker configurations */
Chris@39 83 #define PAWIN_SPEAKER_ALL ((PaWinWaveFormatChannelMask)0x80000000)
Chris@39 84
Chris@39 85 /* DirectSound Speaker Config */
Chris@39 86 #define PAWIN_SPEAKER_DIRECTOUT 0
Chris@39 87 #define PAWIN_SPEAKER_MONO (PAWIN_SPEAKER_FRONT_CENTER)
Chris@39 88 #define PAWIN_SPEAKER_STEREO (PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_RIGHT)
Chris@39 89 #define PAWIN_SPEAKER_QUAD (PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_RIGHT | \
Chris@39 90 PAWIN_SPEAKER_BACK_LEFT | PAWIN_SPEAKER_BACK_RIGHT)
Chris@39 91 #define PAWIN_SPEAKER_SURROUND (PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_RIGHT | \
Chris@39 92 PAWIN_SPEAKER_FRONT_CENTER | PAWIN_SPEAKER_BACK_CENTER)
Chris@39 93 #define PAWIN_SPEAKER_5POINT1 (PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_RIGHT | \
Chris@39 94 PAWIN_SPEAKER_FRONT_CENTER | PAWIN_SPEAKER_LOW_FREQUENCY | \
Chris@39 95 PAWIN_SPEAKER_BACK_LEFT | PAWIN_SPEAKER_BACK_RIGHT)
Chris@39 96 #define PAWIN_SPEAKER_7POINT1 (PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_RIGHT | \
Chris@39 97 PAWIN_SPEAKER_FRONT_CENTER | PAWIN_SPEAKER_LOW_FREQUENCY | \
Chris@39 98 PAWIN_SPEAKER_BACK_LEFT | PAWIN_SPEAKER_BACK_RIGHT | \
Chris@39 99 PAWIN_SPEAKER_FRONT_LEFT_OF_CENTER | PAWIN_SPEAKER_FRONT_RIGHT_OF_CENTER)
Chris@39 100 #define PAWIN_SPEAKER_5POINT1_SURROUND (PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_RIGHT | \
Chris@39 101 PAWIN_SPEAKER_FRONT_CENTER | PAWIN_SPEAKER_LOW_FREQUENCY | \
Chris@39 102 PAWIN_SPEAKER_SIDE_LEFT | PAWIN_SPEAKER_SIDE_RIGHT)
Chris@39 103 #define PAWIN_SPEAKER_7POINT1_SURROUND (PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_RIGHT | \
Chris@39 104 PAWIN_SPEAKER_FRONT_CENTER | PAWIN_SPEAKER_LOW_FREQUENCY | \
Chris@39 105 PAWIN_SPEAKER_BACK_LEFT | PAWIN_SPEAKER_BACK_RIGHT | \
Chris@39 106 PAWIN_SPEAKER_SIDE_LEFT | PAWIN_SPEAKER_SIDE_RIGHT)
Chris@39 107 /*
Chris@39 108 According to the Microsoft documentation:
Chris@39 109 The following are obsolete 5.1 and 7.1 settings (they lack side speakers). Note this means
Chris@39 110 that the default 5.1 and 7.1 settings (KSAUDIO_SPEAKER_5POINT1 and KSAUDIO_SPEAKER_7POINT1 are
Chris@39 111 similarly obsolete but are unchanged for compatibility reasons).
Chris@39 112 */
Chris@39 113 #define PAWIN_SPEAKER_5POINT1_BACK PAWIN_SPEAKER_5POINT1
Chris@39 114 #define PAWIN_SPEAKER_7POINT1_WIDE PAWIN_SPEAKER_7POINT1
Chris@39 115
Chris@39 116 /* DVD Speaker Positions */
Chris@39 117 #define PAWIN_SPEAKER_GROUND_FRONT_LEFT PAWIN_SPEAKER_FRONT_LEFT
Chris@39 118 #define PAWIN_SPEAKER_GROUND_FRONT_CENTER PAWIN_SPEAKER_FRONT_CENTER
Chris@39 119 #define PAWIN_SPEAKER_GROUND_FRONT_RIGHT PAWIN_SPEAKER_FRONT_RIGHT
Chris@39 120 #define PAWIN_SPEAKER_GROUND_REAR_LEFT PAWIN_SPEAKER_BACK_LEFT
Chris@39 121 #define PAWIN_SPEAKER_GROUND_REAR_RIGHT PAWIN_SPEAKER_BACK_RIGHT
Chris@39 122 #define PAWIN_SPEAKER_TOP_MIDDLE PAWIN_SPEAKER_TOP_CENTER
Chris@39 123 #define PAWIN_SPEAKER_SUPER_WOOFER PAWIN_SPEAKER_LOW_FREQUENCY
Chris@39 124
Chris@39 125
Chris@39 126 /*
Chris@39 127 PaWinWaveFormat is defined here to provide compatibility with
Chris@39 128 compilation environments which don't have headers defining
Chris@39 129 WAVEFORMATEXTENSIBLE (e.g. older versions of MSVC, Borland C++ etc.
Chris@39 130
Chris@39 131 The fields for WAVEFORMATEX and WAVEFORMATEXTENSIBLE are declared as an
Chris@39 132 unsigned char array here to avoid clients who include this file having
Chris@39 133 a dependency on windows.h and mmsystem.h, and also to to avoid having
Chris@39 134 to write separate packing pragmas for each compiler.
Chris@39 135 */
Chris@39 136 #define PAWIN_SIZEOF_WAVEFORMATEX 18
Chris@39 137 #define PAWIN_SIZEOF_WAVEFORMATEXTENSIBLE (PAWIN_SIZEOF_WAVEFORMATEX + 22)
Chris@39 138
Chris@39 139 typedef struct{
Chris@39 140 unsigned char fields[ PAWIN_SIZEOF_WAVEFORMATEXTENSIBLE ];
Chris@39 141 unsigned long extraLongForAlignment; /* ensure that compiler aligns struct to DWORD */
Chris@39 142 } PaWinWaveFormat;
Chris@39 143
Chris@39 144 /*
Chris@39 145 WAVEFORMATEXTENSIBLE fields:
Chris@39 146
Chris@39 147 union {
Chris@39 148 WORD wValidBitsPerSample;
Chris@39 149 WORD wSamplesPerBlock;
Chris@39 150 WORD wReserved;
Chris@39 151 } Samples;
Chris@39 152 DWORD dwChannelMask;
Chris@39 153 GUID SubFormat;
Chris@39 154 */
Chris@39 155
Chris@39 156 #define PAWIN_INDEXOF_WVALIDBITSPERSAMPLE (PAWIN_SIZEOF_WAVEFORMATEX+0)
Chris@39 157 #define PAWIN_INDEXOF_DWCHANNELMASK (PAWIN_SIZEOF_WAVEFORMATEX+2)
Chris@39 158 #define PAWIN_INDEXOF_SUBFORMAT (PAWIN_SIZEOF_WAVEFORMATEX+6)
Chris@39 159
Chris@39 160
Chris@39 161 /*
Chris@39 162 Valid values to pass for the waveFormatTag PaWin_InitializeWaveFormatEx and
Chris@39 163 PaWin_InitializeWaveFormatExtensible functions below. These must match
Chris@39 164 the standard Windows WAVE_FORMAT_* values.
Chris@39 165 */
Chris@39 166 #define PAWIN_WAVE_FORMAT_PCM (1)
Chris@39 167 #define PAWIN_WAVE_FORMAT_IEEE_FLOAT (3)
Chris@39 168 #define PAWIN_WAVE_FORMAT_DOLBY_AC3_SPDIF (0x0092)
Chris@39 169 #define PAWIN_WAVE_FORMAT_WMA_SPDIF (0x0164)
Chris@39 170
Chris@39 171
Chris@39 172 /*
Chris@39 173 returns PAWIN_WAVE_FORMAT_PCM or PAWIN_WAVE_FORMAT_IEEE_FLOAT
Chris@39 174 depending on the sampleFormat parameter.
Chris@39 175 */
Chris@39 176 int PaWin_SampleFormatToLinearWaveFormatTag( PaSampleFormat sampleFormat );
Chris@39 177
Chris@39 178 /*
Chris@39 179 Use the following two functions to initialize the waveformat structure.
Chris@39 180 */
Chris@39 181
Chris@39 182 void PaWin_InitializeWaveFormatEx( PaWinWaveFormat *waveFormat,
Chris@39 183 int numChannels, PaSampleFormat sampleFormat, int waveFormatTag, double sampleRate );
Chris@39 184
Chris@39 185
Chris@39 186 void PaWin_InitializeWaveFormatExtensible( PaWinWaveFormat *waveFormat,
Chris@39 187 int numChannels, PaSampleFormat sampleFormat, int waveFormatTag, double sampleRate,
Chris@39 188 PaWinWaveFormatChannelMask channelMask );
Chris@39 189
Chris@39 190
Chris@39 191 /* Map a channel count to a speaker channel mask */
Chris@39 192 PaWinWaveFormatChannelMask PaWin_DefaultChannelMask( int numChannels );
Chris@39 193
Chris@39 194
Chris@39 195 #ifdef __cplusplus
Chris@39 196 }
Chris@39 197 #endif /* __cplusplus */
Chris@39 198
Chris@39 199 #endif /* PA_WIN_WAVEFORMAT_H */