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
454 std::shared_ptr<AudioStreamDataCallback> sharedDataCallback) {
455 // Use this raw pointer in the rest of the code to retain backwards compatibility.
456 mDataCallback = sharedDataCallback.get();
457 // Hold a shared_ptr to protect the raw pointer for the lifetime of the stream.
458 mSharedDataCallback = sharedDataCallback;
459 mSharedPartialDataCallback.reset();
460 mPartialDataCallback = nullptr;
461 return this;
462 }
463
482 mDataCallback = dataCallback;
483 mSharedDataCallback = nullptr;
484 mPartialDataCallback = nullptr;
485 mSharedPartialDataCallback.reset();
486 return this;
487 }
488
525 const std::shared_ptr<AudioStreamPartialDataCallback>& partialDataCallback) {
526 mSharedDataCallback.reset();
527 mDataCallback = nullptr;
528 mSharedPartialDataCallback = partialDataCallback;
529 mPartialDataCallback = mSharedPartialDataCallback.get();
530 return this;
531 }
532
556 AudioStreamBuilder *setErrorCallback(std::shared_ptr<AudioStreamErrorCallback> sharedErrorCallback) {
557 // Use this raw pointer in the rest of the code to retain backwards compatibility.
558 mErrorCallback = sharedErrorCallback.get();
559 // Hold a shared_ptr to protect the raw pointer for the lifetime of the stream.
560 mSharedErrorCallback = sharedErrorCallback;
561 return this;
562 }
563
573 mErrorCallback = errorCallback;
574 mSharedErrorCallback = nullptr;
575 return this;
576 }
577
597 std::shared_ptr<AudioStreamPresentationCallback> sharedPresentationCallback) {
598 mSharedPresentationCallback = sharedPresentationCallback;
599 return this;
600 }
601
618 // Use the same callback object for both, dual inheritance.
619 mDataCallback = streamCallback;
620 mErrorCallback = streamCallback;
621 mSharedPartialDataCallback.reset();
622 mPartialDataCallback = nullptr;
623 return this;
624 }
625
636 mChannelConversionAllowed = allowed;
637 return this;
638 }
639
648 mFormatConversionAllowed = allowed;
649 return this;
650 }
651
663 AudioStreamBuilder *setSampleRateConversionQuality(SampleRateConversionQuality quality) {
664 mSampleRateConversionQuality = quality;
665 return this;
666 }
667
686 AudioStreamBuilder *setPackageName(std::string packageName) {
687 mPackageName = packageName;
688 return this;
689 }
690
702 AudioStreamBuilder *setAttributionTag(std::string attributionTag) {
703 mAttributionTag = attributionTag;
704 return this;
705 }
706
710 bool willUseAAudio() const {
711 return (mAudioApi == AudioApi::AAudio && isAAudioSupported())
712 || (mAudioApi == AudioApi::Unspecified && isAAudioRecommended());
713 }
714
725 Result openStream(AudioStream **stream);
726
737 Result openStream(std::shared_ptr<oboe::AudioStream> &stream);
738
750 Result openManagedStream(ManagedStream &stream);
751
752private:
753
760 Result openStreamInternal(AudioStream **streamPP);
761
766 bool isCompatible(AudioStreamBase &other);
767
775 oboe::AudioStream *build();
776
777 AudioApi mAudioApi = AudioApi::Unspecified;
778};
779
780} // namespace oboe
781
782#endif /* OBOE_STREAM_BUILDER_H_ */
Definition AudioStreamBase.h:31
SpatializationBehavior mSpatializationBehavior
Definition AudioStreamBase.h:366
InputPreset mInputPreset
Definition AudioStreamBase.h:348
Direction mDirection
Definition AudioStreamBase.h:337
int32_t mFramesPerCallback
Definition AudioStreamBase.h:320
Usage mUsage
Definition AudioStreamBase.h:342
ContentType mContentType
Definition AudioStreamBase.h:344
int32_t mChannelCount
Definition AudioStreamBase.h:322
PrivacySensitiveMode mPrivacySensitiveMode
Definition AudioStreamBase.h:356
AudioStreamDataCallback * mDataCallback
Definition AudioStreamBase.h:306
AllowedCapturePolicy mAllowedCapturePolicy
Definition AudioStreamBase.h:353
AudioFormat mFormat
Definition AudioStreamBase.h:335
int32_t mSampleRate
Definition AudioStreamBase.h:324
bool mIsContentSpatialized
Definition AudioStreamBase.h:364
bool isContentSpatialized() const
Definition AudioStreamBase.h:207
ChannelMask mChannelMask
Definition AudioStreamBase.h:330
PerformanceMode mPerformanceMode
Definition AudioStreamBase.h:339
SessionId mSessionId
Definition AudioStreamBase.h:350
std::string mPackageName
Definition AudioStreamBase.h:359
int32_t mBufferCapacityInFrames
Definition AudioStreamBase.h:326
AudioStreamErrorCallback * mErrorCallback
Definition AudioStreamBase.h:314
AudioStreamPartialDataCallback * mPartialDataCallback
Definition AudioStreamBase.h:310
std::string mAttributionTag
Definition AudioStreamBase.h:361
SharingMode mSharingMode
Definition AudioStreamBase.h:333
Definition AudioStreamBuilder.h:34
AudioStreamBuilder * setSampleRateConversionQuality(SampleRateConversionQuality quality)
Definition AudioStreamBuilder.h:663
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:572
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:635
static bool isAAudioRecommended()
AudioStreamBuilder * setDeviceId(int32_t deviceId)
Definition AudioStreamBuilder.h:346
AudioStreamBuilder * setPackageName(std::string packageName)
Definition AudioStreamBuilder.h:686
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:453
AudioStreamBuilder * setErrorCallback(std::shared_ptr< AudioStreamErrorCallback > sharedErrorCallback)
Definition AudioStreamBuilder.h:556
Result openStream(AudioStream **stream)
AudioStreamBuilder * setUsage(Usage usage)
Definition AudioStreamBuilder.h:253
AudioStreamBuilder * setAttributionTag(std::string attributionTag)
Definition AudioStreamBuilder.h:702
bool willUseAAudio() const
Definition AudioStreamBuilder.h:710
AudioStreamBuilder * setFormatConversionAllowed(bool allowed)
Definition AudioStreamBuilder.h:647
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:596
AudioApi getAudioApi() const
Definition AudioStreamBuilder.h:174
AudioStreamBuilder * setPartialDataCallback(const std::shared_ptr< AudioStreamPartialDataCallback > &partialDataCallback)
Definition AudioStreamBuilder.h:524
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:481
AudioStreamBuilder * setFramesPerDataCallback(int framesPerCallback)
Definition AudioStreamBuilder.h:131
AudioStreamBuilder * setCallback(AudioStreamCallback *streamCallback)
Definition AudioStreamBuilder.h:617
AudioStreamBuilder * setIsContentSpatialized(bool isContentSpatialized)
Definition AudioStreamBuilder.h:409
Definition AudioStreamCallback.h:284
Definition AudioStreamCallback.h:34
Definition AudioStreamCallback.h:102
Definition AudioStream.h:43