Oboe
A library for creating real-time audio apps on Android
Loading...
Searching...
No Matches
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#include "oboe/Utilities.h"
23#include "ResultWithValue.h"
24
25namespace oboe {
26
27 // This depends on AudioStream, so we use forward declaration, it will close and delete the stream
28 struct StreamDeleterFunctor;
29 using ManagedStream = std::unique_ptr<AudioStream, StreamDeleterFunctor>;
30
35public:
36
38
39 AudioStreamBuilder(const AudioStreamBase &audioStreamBase): AudioStreamBase(audioStreamBase) {}
40
52 mChannelCount = channelCount;
53 mChannelMask = ChannelMask::Unspecified;
54 return this;
55 }
56
70 AudioStreamBuilder *setChannelMask(ChannelMask channelMask) {
71 mChannelMask = channelMask;
72 mChannelCount = getChannelCountFromChannelMask(channelMask);
73 return this;
74 }
75
81 AudioStreamBuilder *setDirection(Direction direction) {
82 mDirection = direction;
83 return this;
84 }
85
97 AudioStreamBuilder *setSampleRate(int32_t sampleRate) {
98 mSampleRate = sampleRate;
99 return this;
100 }
101
105 AudioStreamBuilder *setFramesPerCallback(int framesPerCallback) {
106 return setFramesPerDataCallback(framesPerCallback);
107 }
108
132 mFramesPerCallback = framesPerCallback;
133 return this;
134 }
135
142 AudioStreamBuilder *setFormat(AudioFormat format) {
143 mFormat = format;
144 return this;
145 }
146
159 AudioStreamBuilder *setBufferCapacityInFrames(int32_t bufferCapacityInFrames) {
160 mBufferCapacityInFrames = bufferCapacityInFrames;
161 return this;
162 }
163
174 AudioApi getAudioApi() const { return mAudioApi; }
175
189 AudioStreamBuilder *setAudioApi(AudioApi audioApi) {
190 mAudioApi = audioApi;
191 return this;
192 }
193
201 static bool isAAudioSupported();
202
211 static bool isAAudioRecommended();
212
221 AudioStreamBuilder *setSharingMode(SharingMode sharingMode) {
222 mSharingMode = sharingMode;
223 return this;
224 }
225
234 AudioStreamBuilder *setPerformanceMode(PerformanceMode performanceMode) {
235 mPerformanceMode = performanceMode;
236 return this;
237 }
238
239
254 mUsage = usage;
255 return this;
256 }
257
271 AudioStreamBuilder *setContentType(ContentType contentType) {
272 mContentType = contentType;
273 return this;
274 }
275
291 AudioStreamBuilder *setInputPreset(InputPreset inputPreset) {
292 mInputPreset = inputPreset;
293 return this;
294 }
295
320 AudioStreamBuilder *setSessionId(SessionId sessionId) {
321 mSessionId = sessionId;
322 return this;
323 }
324
346 AudioStreamBuilder *setDeviceId(int32_t deviceId) {
347 mDeviceIds.clear();
348 if (deviceId != kUnspecified) {
349 mDeviceIds.push_back(deviceId);
350 }
351 return this;
352 }
353
367 AudioStreamBuilder *setAllowedCapturePolicy(AllowedCapturePolicy allowedCapturePolicy) {
368 mAllowedCapturePolicy = allowedCapturePolicy;
369 return this;
370 }
371
391 AudioStreamBuilder *setPrivacySensitiveMode(PrivacySensitiveMode privacySensitiveMode) {
392 mPrivacySensitiveMode = privacySensitiveMode;
393 return this;
394 }
395
413
427 AudioStreamBuilder *setSpatializationBehavior(SpatializationBehavior spatializationBehavior) {
428 mSpatializationBehavior = spatializationBehavior;
429 return this;
430 }
431
444 AudioStreamBuilder *setDataCallback(std::shared_ptr<AudioStreamDataCallback> sharedDataCallback) {
445 // Use this raw pointer in the rest of the code to retain backwards compatibility.
446 mDataCallback = sharedDataCallback.get();
447 // Hold a shared_ptr to protect the raw pointer for the lifetime of the stream.
448 mSharedDataCallback = sharedDataCallback;
449 return this;
450 }
451
461 mDataCallback = dataCallback;
462 mSharedDataCallback = nullptr;
463 return this;
464 }
465
489 AudioStreamBuilder *setErrorCallback(std::shared_ptr<AudioStreamErrorCallback> sharedErrorCallback) {
490 // Use this raw pointer in the rest of the code to retain backwards compatibility.
491 mErrorCallback = sharedErrorCallback.get();
492 // Hold a shared_ptr to protect the raw pointer for the lifetime of the stream.
493 mSharedErrorCallback = sharedErrorCallback;
494 return this;
495 }
496
506 mErrorCallback = errorCallback;
507 mSharedErrorCallback = nullptr;
508 return this;
509 }
510
530 std::shared_ptr<AudioStreamPresentationCallback> sharedPresentationCallback) {
531 mSharedPresentationCallback = sharedPresentationCallback;
532 return this;
533 }
534
549 // Use the same callback object for both, dual inheritance.
550 mDataCallback = streamCallback;
551 mErrorCallback = streamCallback;
552 return this;
553 }
554
565 mChannelConversionAllowed = allowed;
566 return this;
567 }
568
577 mFormatConversionAllowed = allowed;
578 return this;
579 }
580
592 AudioStreamBuilder *setSampleRateConversionQuality(SampleRateConversionQuality quality) {
593 mSampleRateConversionQuality = quality;
594 return this;
595 }
596
615 AudioStreamBuilder *setPackageName(std::string packageName) {
616 mPackageName = packageName;
617 return this;
618 }
619
631 AudioStreamBuilder *setAttributionTag(std::string attributionTag) {
632 mAttributionTag = attributionTag;
633 return this;
634 }
635
639 bool willUseAAudio() const {
640 return (mAudioApi == AudioApi::AAudio && isAAudioSupported())
641 || (mAudioApi == AudioApi::Unspecified && isAAudioRecommended());
642 }
643
654 Result openStream(AudioStream **stream);
655
666 Result openStream(std::shared_ptr<oboe::AudioStream> &stream);
667
679 Result openManagedStream(ManagedStream &stream);
680
681private:
682
689 Result openStreamInternal(AudioStream **streamPP);
690
695 bool isCompatible(AudioStreamBase &other);
696
704 oboe::AudioStream *build();
705
706 AudioApi mAudioApi = AudioApi::Unspecified;
707};
708
709} // namespace oboe
710
711#endif /* OBOE_STREAM_BUILDER_H_ */
Definition AudioStreamBase.h:31
SpatializationBehavior mSpatializationBehavior
Definition AudioStreamBase.h:340
InputPreset mInputPreset
Definition AudioStreamBase.h:322
Direction mDirection
Definition AudioStreamBase.h:311
int32_t mFramesPerCallback
Definition AudioStreamBase.h:294
Usage mUsage
Definition AudioStreamBase.h:316
ContentType mContentType
Definition AudioStreamBase.h:318
int32_t mChannelCount
Definition AudioStreamBase.h:296
PrivacySensitiveMode mPrivacySensitiveMode
Definition AudioStreamBase.h:330
AudioStreamDataCallback * mDataCallback
Definition AudioStreamBase.h:284
AllowedCapturePolicy mAllowedCapturePolicy
Definition AudioStreamBase.h:327
AudioFormat mFormat
Definition AudioStreamBase.h:309
int32_t mSampleRate
Definition AudioStreamBase.h:298
bool mIsContentSpatialized
Definition AudioStreamBase.h:338
bool isContentSpatialized() const
Definition AudioStreamBase.h:185
ChannelMask mChannelMask
Definition AudioStreamBase.h:304
PerformanceMode mPerformanceMode
Definition AudioStreamBase.h:313
SessionId mSessionId
Definition AudioStreamBase.h:324
std::string mPackageName
Definition AudioStreamBase.h:333
int32_t mBufferCapacityInFrames
Definition AudioStreamBase.h:300
AudioStreamErrorCallback * mErrorCallback
Definition AudioStreamBase.h:288
std::string mAttributionTag
Definition AudioStreamBase.h:335
SharingMode mSharingMode
Definition AudioStreamBase.h:307
Definition AudioStreamBuilder.h:34
AudioStreamBuilder * setSampleRateConversionQuality(SampleRateConversionQuality quality)
Definition AudioStreamBuilder.h:592
AudioStreamBuilder * setChannelMask(ChannelMask channelMask)
Definition AudioStreamBuilder.h:70
static bool isAAudioSupported()
AudioStreamBuilder * setChannelCount(int channelCount)
Definition AudioStreamBuilder.h:51
AudioStreamBuilder * setFramesPerCallback(int framesPerCallback)
Definition AudioStreamBuilder.h:105
AudioStreamBuilder * setAudioApi(AudioApi audioApi)
Definition AudioStreamBuilder.h:189
AudioStreamBuilder * setErrorCallback(AudioStreamErrorCallback *errorCallback)
Definition AudioStreamBuilder.h:505
AudioStreamBuilder * setInputPreset(InputPreset inputPreset)
Definition AudioStreamBuilder.h:291
AudioStreamBuilder * setSessionId(SessionId sessionId)
Definition AudioStreamBuilder.h:320
AudioStreamBuilder * setSpatializationBehavior(SpatializationBehavior spatializationBehavior)
Definition AudioStreamBuilder.h:427
Result openStream(std::shared_ptr< oboe::AudioStream > &stream)
AudioStreamBuilder * setPrivacySensitiveMode(PrivacySensitiveMode privacySensitiveMode)
Definition AudioStreamBuilder.h:391
AudioStreamBuilder * setChannelConversionAllowed(bool allowed)
Definition AudioStreamBuilder.h:564
static bool isAAudioRecommended()
AudioStreamBuilder * setDeviceId(int32_t deviceId)
Definition AudioStreamBuilder.h:346
AudioStreamBuilder * setPackageName(std::string packageName)
Definition AudioStreamBuilder.h:615
AudioStreamBuilder * setSampleRate(int32_t sampleRate)
Definition AudioStreamBuilder.h:97
AudioStreamBuilder * setAllowedCapturePolicy(AllowedCapturePolicy allowedCapturePolicy)
Definition AudioStreamBuilder.h:367
Result openManagedStream(ManagedStream &stream)
AudioStreamBuilder * setDataCallback(std::shared_ptr< AudioStreamDataCallback > sharedDataCallback)
Definition AudioStreamBuilder.h:444
AudioStreamBuilder * setErrorCallback(std::shared_ptr< AudioStreamErrorCallback > sharedErrorCallback)
Definition AudioStreamBuilder.h:489
Result openStream(AudioStream **stream)
AudioStreamBuilder * setUsage(Usage usage)
Definition AudioStreamBuilder.h:253
AudioStreamBuilder * setAttributionTag(std::string attributionTag)
Definition AudioStreamBuilder.h:631
bool willUseAAudio() const
Definition AudioStreamBuilder.h:639
AudioStreamBuilder * setFormatConversionAllowed(bool allowed)
Definition AudioStreamBuilder.h:576
AudioStreamBuilder * setDirection(Direction direction)
Definition AudioStreamBuilder.h:81
AudioStreamBuilder * setSharingMode(SharingMode sharingMode)
Definition AudioStreamBuilder.h:221
AudioStreamBuilder * setFormat(AudioFormat format)
Definition AudioStreamBuilder.h:142
AudioStreamBuilder * setPresentationCallback(std::shared_ptr< AudioStreamPresentationCallback > sharedPresentationCallback)
Definition AudioStreamBuilder.h:529
AudioApi getAudioApi() const
Definition AudioStreamBuilder.h:174
AudioStreamBuilder * setPerformanceMode(PerformanceMode performanceMode)
Definition AudioStreamBuilder.h:234
AudioStreamBuilder * setBufferCapacityInFrames(int32_t bufferCapacityInFrames)
Definition AudioStreamBuilder.h:159
AudioStreamBuilder * setContentType(ContentType contentType)
Definition AudioStreamBuilder.h:271
AudioStreamBuilder * setDataCallback(AudioStreamDataCallback *dataCallback)
Definition AudioStreamBuilder.h:460
AudioStreamBuilder * setFramesPerDataCallback(int framesPerCallback)
Definition AudioStreamBuilder.h:131
AudioStreamBuilder * setCallback(AudioStreamCallback *streamCallback)
Definition AudioStreamBuilder.h:548
AudioStreamBuilder * setIsContentSpatialized(bool isContentSpatialized)
Definition AudioStreamBuilder.h:409
Definition AudioStreamCallback.h:208
Definition AudioStreamCallback.h:34
Definition AudioStreamCallback.h:102
Definition AudioStream.h:43