annotate src/portaudio_20161030/bindings/cpp/source/portaudiocpp/DirectionSpecificStreamParameters.cxx @ 169:223a55898ab9 tip default

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