annotate src/portaudio/bindings/cpp/source/portaudiocpp/DirectionSpecificStreamParameters.cxx @ 109:9d5448da9449

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