Mercurial > hg > sv-dependency-builds
comparison src/portaudio/bindings/cpp/source/portaudiocpp/DirectionSpecificStreamParameters.cxx @ 4:e13257ea84a4
Add bzip2, zlib, liblo, portaudio sources
author | Chris Cannam |
---|---|
date | Wed, 20 Mar 2013 13:59:52 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
3:6c505a35919a | 4:e13257ea84a4 |
---|---|
1 #include "portaudiocpp/DirectionSpecificStreamParameters.hxx" | |
2 | |
3 #include "portaudiocpp/Device.hxx" | |
4 | |
5 namespace portaudio | |
6 { | |
7 | |
8 // ----------------------------------------------------------------------------------- | |
9 | |
10 ////// | |
11 /// Returns a `nil' DirectionSpecificStreamParameters object. This can be used to | |
12 /// specify that one direction of a Stream is not required (i.e. when creating | |
13 /// a half-duplex Stream). All fields of the null DirectionSpecificStreamParameters | |
14 /// object are invalid except for the device and the number of channel, which are set | |
15 /// to paNoDevice and 0 respectively. | |
16 ////// | |
17 DirectionSpecificStreamParameters DirectionSpecificStreamParameters::null() | |
18 { | |
19 DirectionSpecificStreamParameters tmp; | |
20 tmp.paStreamParameters_.device = paNoDevice; | |
21 tmp.paStreamParameters_.channelCount = 0; | |
22 return tmp; | |
23 } | |
24 | |
25 // ----------------------------------------------------------------------------------- | |
26 | |
27 ////// | |
28 /// Default constructor -- all parameters will be uninitialized. | |
29 ////// | |
30 DirectionSpecificStreamParameters::DirectionSpecificStreamParameters() | |
31 { | |
32 } | |
33 | |
34 ////// | |
35 /// Constructor which sets all required fields. | |
36 ////// | |
37 DirectionSpecificStreamParameters::DirectionSpecificStreamParameters(const Device &device, int numChannels, | |
38 SampleDataFormat format, bool interleaved, PaTime suggestedLatency, void *hostApiSpecificStreamInfo) | |
39 { | |
40 setDevice(device); | |
41 setNumChannels(numChannels); | |
42 setSampleFormat(format, interleaved); | |
43 setSuggestedLatency(suggestedLatency); | |
44 setHostApiSpecificStreamInfo(hostApiSpecificStreamInfo); | |
45 } | |
46 | |
47 // ----------------------------------------------------------------------------------- | |
48 | |
49 void DirectionSpecificStreamParameters::setDevice(const Device &device) | |
50 { | |
51 paStreamParameters_.device = device.index(); | |
52 } | |
53 | |
54 void DirectionSpecificStreamParameters::setNumChannels(int numChannels) | |
55 { | |
56 paStreamParameters_.channelCount = numChannels; | |
57 } | |
58 | |
59 void DirectionSpecificStreamParameters::setSampleFormat(SampleDataFormat format, bool interleaved) | |
60 { | |
61 paStreamParameters_.sampleFormat = static_cast<PaSampleFormat>(format); | |
62 | |
63 if (!interleaved) | |
64 paStreamParameters_.sampleFormat |= paNonInterleaved; | |
65 } | |
66 | |
67 void DirectionSpecificStreamParameters::setHostApiSpecificSampleFormat(PaSampleFormat format, bool interleaved) | |
68 { | |
69 paStreamParameters_.sampleFormat = format; | |
70 | |
71 paStreamParameters_.sampleFormat |= paCustomFormat; | |
72 | |
73 if (!interleaved) | |
74 paStreamParameters_.sampleFormat |= paNonInterleaved; | |
75 } | |
76 | |
77 void DirectionSpecificStreamParameters::setSuggestedLatency(PaTime latency) | |
78 { | |
79 paStreamParameters_.suggestedLatency = latency; | |
80 } | |
81 | |
82 void DirectionSpecificStreamParameters::setHostApiSpecificStreamInfo(void *streamInfo) | |
83 { | |
84 paStreamParameters_.hostApiSpecificStreamInfo = streamInfo; | |
85 } | |
86 | |
87 // ----------------------------------------------------------------------------------- | |
88 | |
89 PaStreamParameters *DirectionSpecificStreamParameters::paStreamParameters() | |
90 { | |
91 if (paStreamParameters_.channelCount > 0 && paStreamParameters_.device != paNoDevice) | |
92 return &paStreamParameters_; | |
93 else | |
94 return NULL; | |
95 } | |
96 | |
97 const PaStreamParameters *DirectionSpecificStreamParameters::paStreamParameters() const | |
98 { | |
99 if (paStreamParameters_.channelCount > 0 && paStreamParameters_.device != paNoDevice) | |
100 return &paStreamParameters_; | |
101 else | |
102 return NULL; | |
103 } | |
104 | |
105 Device &DirectionSpecificStreamParameters::device() const | |
106 { | |
107 return System::instance().deviceByIndex(paStreamParameters_.device); | |
108 } | |
109 | |
110 int DirectionSpecificStreamParameters::numChannels() const | |
111 { | |
112 return paStreamParameters_.channelCount; | |
113 } | |
114 | |
115 ////// | |
116 /// Returns the (non host api-specific) sample format, without including | |
117 /// the paNonInterleaved flag. If the sample format is host api-spefific, | |
118 /// INVALID_FORMAT (0) will be returned. | |
119 ////// | |
120 SampleDataFormat DirectionSpecificStreamParameters::sampleFormat() const | |
121 { | |
122 if (isSampleFormatHostApiSpecific()) | |
123 return INVALID_FORMAT; | |
124 else | |
125 return static_cast<SampleDataFormat>(paStreamParameters_.sampleFormat & ~paNonInterleaved); | |
126 } | |
127 | |
128 bool DirectionSpecificStreamParameters::isSampleFormatInterleaved() const | |
129 { | |
130 return ((paStreamParameters_.sampleFormat & paNonInterleaved) == 0); | |
131 } | |
132 | |
133 bool DirectionSpecificStreamParameters::isSampleFormatHostApiSpecific() const | |
134 { | |
135 return ((paStreamParameters_.sampleFormat & paCustomFormat) == 0); | |
136 } | |
137 | |
138 ////// | |
139 /// Returns the host api-specific sample format, without including any | |
140 /// paCustomFormat or paNonInterleaved flags. Will return 0 if the sample format is | |
141 /// not host api-specific. | |
142 ////// | |
143 PaSampleFormat DirectionSpecificStreamParameters::hostApiSpecificSampleFormat() const | |
144 { | |
145 if (isSampleFormatHostApiSpecific()) | |
146 return paStreamParameters_.sampleFormat & ~paCustomFormat & ~paNonInterleaved; | |
147 else | |
148 return 0; | |
149 } | |
150 | |
151 PaTime DirectionSpecificStreamParameters::suggestedLatency() const | |
152 { | |
153 return paStreamParameters_.suggestedLatency; | |
154 } | |
155 | |
156 void *DirectionSpecificStreamParameters::hostApiSpecificStreamInfo() const | |
157 { | |
158 return paStreamParameters_.hostApiSpecificStreamInfo; | |
159 } | |
160 | |
161 // ----------------------------------------------------------------------------------- | |
162 | |
163 } // namespace portaudio |