annotate src/portaudio/bindings/cpp/source/portaudiocpp/DirectionSpecificStreamParameters.cxx @ 19:891f60ab2af1

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