Oboe  1.2
A library for creating real-time audio apps on Android
AudioStreamBuilder.h
1 /*
2  * Copyright 2015 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef OBOE_STREAM_BUILDER_H_
18 #define OBOE_STREAM_BUILDER_H_
19 
20 #include "oboe/Definitions.h"
21 #include "oboe/AudioStreamBase.h"
22 
23 namespace oboe {
24 
25  // This depends on AudioStream, so we use forward declaration, it will close and delete the stream
26  struct StreamDeleterFunctor;
27  using ManagedStream = std::unique_ptr<AudioStream, StreamDeleterFunctor>;
32 public:
33 
35 
36  AudioStreamBuilder(const AudioStreamBase &audioStreamBase): AudioStreamBase(audioStreamBase) {}
37 
44  AudioStreamBuilder *setChannelCount(int channelCount) {
45  mChannelCount = channelCount;
46  return this;
47  }
48 
55  mDirection = direction;
56  return this;
57  }
58 
70  AudioStreamBuilder *setSampleRate(int32_t sampleRate) {
71  mSampleRate = sampleRate;
72  return this;
73  }
74 
89  AudioStreamBuilder *setFramesPerCallback(int framesPerCallback) {
90  mFramesPerCallback = framesPerCallback;
91  return this;
92  }
93 
101  mFormat = format;
102  return this;
103  }
104 
117  AudioStreamBuilder *setBufferCapacityInFrames(int32_t bufferCapacityInFrames) {
118  mBufferCapacityInFrames = bufferCapacityInFrames;
119  return this;
120  }
121 
132  AudioApi getAudioApi() const { return mAudioApi; }
133 
148  mAudioApi = audioApi;
149  return this;
150  }
151 
159  static bool isAAudioSupported();
160 
169  static bool isAAudioRecommended();
170 
180  mSharingMode = sharingMode;
181  return this;
182  }
183 
193  mPerformanceMode = performanceMode;
194  return this;
195  }
196 
197 
211  mUsage = usage;
212  return this;
213  }
214 
228  mContentType = contentType;
229  return this;
230  }
231 
248  mInputPreset = inputPreset;
249  return this;
250  }
251 
277  mSessionId = sessionId;
278  return this;
279  }
280 
299  AudioStreamBuilder *setDeviceId(int32_t deviceId) {
300  mDeviceId = deviceId;
301  return this;
302  }
303 
326  mStreamCallback = streamCallback;
327  return this;
328  }
329 
340  mChannelConversionAllowed = allowed;
341  return this;
342  }
343 
352  mFormatConversionAllowed = allowed;
353  return this;
354  }
355 
368  mSampleRateConversionQuality = quality;
369  return this;
370  }
371 
375  bool willUseAAudio() const {
376  return (mAudioApi == AudioApi::AAudio && isAAudioSupported())
377  || (mAudioApi == AudioApi::Unspecified && isAAudioRecommended());
378  }
379 
388  Result openStream(AudioStream **stream);
389 
390 
400  Result openManagedStream(ManagedStream &stream);
401 
402 private:
403 
408  bool isCompatible(AudioStreamBase &other);
409 
417  oboe::AudioStream *build();
418 
419  AudioApi mAudioApi = AudioApi::Unspecified;
420 };
421 
422 } // namespace oboe
423 
424 #endif /* OBOE_STREAM_BUILDER_H_ */
AudioStreamBuilder * setDeviceId(int32_t deviceId)
Definition: AudioStreamBuilder.h:299
Definition: AudioStreamBuilder.h:31
SessionId mSessionId
Definition: AudioStreamBase.h:189
AudioStreamBuilder * setPerformanceMode(PerformanceMode performanceMode)
Definition: AudioStreamBuilder.h:192
Direction mDirection
Definition: AudioStreamBase.h:176
AudioFormat mFormat
Definition: AudioStreamBase.h:174
ContentType mContentType
Definition: AudioStreamBase.h:183
static bool isAAudioRecommended()
AudioStreamBuilder * setSampleRateConversionQuality(SampleRateConversionQuality quality)
Definition: AudioStreamBuilder.h:367
PerformanceMode
Definition: Definitions.h:192
SessionId
Definition: Definitions.h:414
AudioStreamBuilder * setSessionId(SessionId sessionId)
Definition: AudioStreamBuilder.h:276
PerformanceMode mPerformanceMode
Definition: AudioStreamBase.h:178
Definition: AudioStreamCallback.h:33
SharingMode mSharingMode
Definition: AudioStreamBase.h:172
AudioStreamBuilder * setContentType(ContentType contentType)
Definition: AudioStreamBuilder.h:227
int32_t mChannelCount
Definition: AudioStreamBase.h:156
AudioApi
Definition: Definitions.h:213
ContentType
Definition: Definitions.h:339
AudioStreamBuilder * setUsage(Usage usage)
Definition: AudioStreamBuilder.h:210
int32_t mDeviceId
Definition: AudioStreamBase.h:160
static bool isAAudioSupported()
AudioStreamBuilder * setChannelConversionAllowed(bool allowed)
Definition: AudioStreamBuilder.h:339
AudioStreamBuilder * setFramesPerCallback(int framesPerCallback)
Definition: AudioStreamBuilder.h:89
AudioStreamBuilder * setDirection(Direction direction)
Definition: AudioStreamBuilder.h:54
AudioStreamBuilder * setFormat(AudioFormat format)
Definition: AudioStreamBuilder.h:100
Usage mUsage
Definition: AudioStreamBase.h:181
Definition: AudioStream.h:44
Usage
Definition: Definitions.h:263
AudioStreamBuilder * setAudioApi(AudioApi audioApi)
Definition: AudioStreamBuilder.h:147
AudioStreamBuilder * setInputPreset(InputPreset inputPreset)
Definition: AudioStreamBuilder.h:247
Result openManagedStream(ManagedStream &stream)
AudioStreamBuilder * setSampleRate(int32_t sampleRate)
Definition: AudioStreamBuilder.h:70
int32_t mSampleRate
Definition: AudioStreamBase.h:158
Definition: AudioStreamBase.h:29
int32_t mBufferCapacityInFrames
Definition: AudioStreamBase.h:162
AudioStreamBuilder * setBufferCapacityInFrames(int32_t bufferCapacityInFrames)
Definition: AudioStreamBuilder.h:117
Result openStream(AudioStream **stream)
AudioFormat
Definition: Definitions.h:94
Result
Definition: Definitions.h:131
AudioStreamBuilder * setSharingMode(SharingMode sharingMode)
Definition: AudioStreamBuilder.h:179
Definition: AudioStream.h:31
bool willUseAAudio() const
Definition: AudioStreamBuilder.h:375
SampleRateConversionQuality
Definition: Definitions.h:235
InputPreset mInputPreset
Definition: AudioStreamBase.h:187
AudioStreamCallback * mStreamCallback
Definition: AudioStreamBase.h:152
Direction
Definition: Definitions.h:78
SharingMode
Definition: Definitions.h:167
InputPreset
Definition: Definitions.h:372
AudioStreamBuilder * setChannelCount(int channelCount)
Definition: AudioStreamBuilder.h:44
AudioStreamBuilder * setCallback(AudioStreamCallback *streamCallback)
Definition: AudioStreamBuilder.h:325
int32_t mFramesPerCallback
Definition: AudioStreamBase.h:154
AudioStreamBuilder * setFormatConversionAllowed(bool allowed)
Definition: AudioStreamBuilder.h:351
AudioApi getAudioApi() const
Definition: AudioStreamBuilder.h:132