annotate src/portaudio_20161030/bindings/cpp/source/portaudiocpp/DirectionSpecificStreamParameters.cxx @ 55:284acf908dcd

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