annotate src/portaudio_20140130/bindings/cpp/source/portaudiocpp/DirectionSpecificStreamParameters.cxx @ 39:7ddb4fc30dac

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