Oboe
A library for creating real-time audio apps on Android
Loading...
Searching...
No Matches
AudioStreamBase.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_BASE_H_
18#define OBOE_STREAM_BASE_H_
19
20#include <memory>
21#include <string>
22#include <vector>
23#include "oboe/AudioStreamCallback.h"
24#include "oboe/Definitions.h"
25
26namespace oboe {
27
32
33public:
34
36
37 virtual ~AudioStreamBase() = default;
38
39 // This class only contains primitives so we can use default constructor and copy methods.
40
45
50
54 int32_t getChannelCount() const { return mChannelCount; }
55
59 Direction getDirection() const { return mDirection; }
60
64 int32_t getSampleRate() const { return mSampleRate; }
65
69 int32_t getFramesPerCallback() const { return getFramesPerDataCallback(); }
70
74 int32_t getFramesPerDataCallback() const { return mFramesPerCallback; }
75
79 AudioFormat getFormat() const { return mFormat; }
80
87 virtual int32_t getBufferSizeInFrames() { return mBufferSizeInFrames; }
88
92 virtual int32_t getBufferCapacityInFrames() const { return mBufferCapacityInFrames; }
93
97 SharingMode getSharingMode() const { return mSharingMode; }
98
102 PerformanceMode getPerformanceMode() const { return mPerformanceMode; }
103
107 virtual int32_t getDeviceId() const {
108 return mDeviceIds.empty() ? kUnspecified : mDeviceIds[0];
109 }
110
111 virtual std::vector<int32_t> getDeviceIds() const {
112 return mDeviceIds;
113 }
114
122
130
138
143 std::shared_ptr<AudioStreamPresentationCallback> getPresentationCallback() const {
144 return mSharedPresentationCallback;
145 }
146
151 std::shared_ptr<AudioStreamRoutingCallback> getRoutingCallback() const {
152 return mSharedRoutingCallback;
153 }
154
159 return mDataCallback != nullptr;
160 }
161
166 return mPartialDataCallback != nullptr;
167 }
168
175
182 return mErrorCallback != nullptr;
183 }
184
189 return mSharedPresentationCallback != nullptr;
190 }
191
195 Usage getUsage() const { return mUsage; }
196
200 ContentType getContentType() const { return mContentType; }
201
205 InputPreset getInputPreset() const { return mInputPreset; }
206
211 SessionId getSessionId() const { return mSessionId; }
212
217
221 SpatializationBehavior getSpatializationBehavior() const { return mSpatializationBehavior; }
222
233 AllowedCapturePolicy getAllowedCapturePolicy() const { return mAllowedCapturePolicy; }
234
246 PrivacySensitiveMode getPrivacySensitiveMode() const { return mPrivacySensitiveMode; }
247
257 std::string getPackageName() const { return mPackageName; }
258
268 std::string getAttributionTag() const { return mAttributionTag; }
269
274 return mChannelConversionAllowed;
275 }
276
281 return mFormatConversionAllowed;
282 }
283
287 SampleRateConversionQuality getSampleRateConversionQuality() const {
288 return mSampleRateConversionQuality;
289 }
290
294 ChannelMask getChannelMask() const {
295 return mChannelMask;
296 }
297
302
306 int32_t getHardwareSampleRate() const { return mHardwareSampleRate; }
307
311 AudioFormat getHardwareFormat() const { return mHardwareFormat; }
312
313protected:
316 std::shared_ptr<AudioStreamDataCallback> mSharedDataCallback;
317
320 std::shared_ptr<AudioStreamPartialDataCallback> mSharedPartialDataCallback;
321
324 std::shared_ptr<AudioStreamErrorCallback> mSharedErrorCallback;
325
326 std::shared_ptr<AudioStreamPresentationCallback> mSharedPresentationCallback;
327
328 std::shared_ptr<AudioStreamRoutingCallback> mSharedRoutingCallback;
329
331 int32_t mFramesPerCallback = kUnspecified;
333 int32_t mChannelCount = kUnspecified;
335 int32_t mSampleRate = kUnspecified;
337 int32_t mBufferCapacityInFrames = kUnspecified;
339 int32_t mBufferSizeInFrames = kUnspecified;
341 ChannelMask mChannelMask = ChannelMask::Unspecified;
342
344 SharingMode mSharingMode = SharingMode::Shared;
346 AudioFormat mFormat = AudioFormat::Unspecified;
348 Direction mDirection = Direction::Output;
350 PerformanceMode mPerformanceMode = PerformanceMode::None;
351
353 Usage mUsage = Usage::Media;
355 ContentType mContentType = ContentType::Music;
359 InputPreset mInputPreset = InputPreset::VoiceRecognition;
361 SessionId mSessionId = SessionId::None;
362
364 AllowedCapturePolicy mAllowedCapturePolicy = AllowedCapturePolicy::Unspecified;
365
367 PrivacySensitiveMode mPrivacySensitiveMode = PrivacySensitiveMode::Unspecified;
368
370 std::string mPackageName;
372 std::string mAttributionTag;
373
377 SpatializationBehavior mSpatializationBehavior = SpatializationBehavior::Unspecified;
378
380 int32_t mHardwareChannelCount = kUnspecified;
382 int32_t mHardwareSampleRate = kUnspecified;
384 AudioFormat mHardwareFormat = AudioFormat::Unspecified;
385
386 // Control whether Oboe can convert channel counts to achieve optimal results.
387 bool mChannelConversionAllowed = false;
388 // Control whether Oboe can convert data formats to achieve optimal results.
389 bool mFormatConversionAllowed = false;
390 // Control whether and how Oboe can convert sample rates to achieve optimal results.
391 SampleRateConversionQuality mSampleRateConversionQuality = SampleRateConversionQuality::Medium;
392
393 std::vector<int32_t> mDeviceIds;
394
396 virtual Result isValidConfig() {
397 switch (mFormat) {
398 case AudioFormat::Unspecified:
399 case AudioFormat::I16:
400 case AudioFormat::Float:
401 case AudioFormat::I24:
402 case AudioFormat::I32:
403 case AudioFormat::IEC61937:
404 case AudioFormat::MP3:
405 case AudioFormat::AAC_LC:
406 case AudioFormat::AAC_HE_V1:
407 case AudioFormat::AAC_HE_V2:
408 case AudioFormat::AAC_ELD:
409 case AudioFormat::AAC_XHE:
410 case AudioFormat::OPUS:
411 break;
412
413 default:
414 return Result::ErrorInvalidFormat;
415 }
416
417 switch (mSampleRateConversionQuality) {
418 case SampleRateConversionQuality::None:
419 case SampleRateConversionQuality::Fastest:
420 case SampleRateConversionQuality::Low:
421 case SampleRateConversionQuality::Medium:
422 case SampleRateConversionQuality::High:
423 case SampleRateConversionQuality::Best:
424 return Result::OK;
425 default:
426 return Result::ErrorIllegalArgument;
427 }
428 }
429};
430
431} // namespace oboe
432
433#endif /* OBOE_STREAM_BASE_H_ */
Definition AudioStreamBase.h:31
bool isPartialDataCallbackSpecified() const
Definition AudioStreamBase.h:165
int32_t mHardwareSampleRate
Definition AudioStreamBase.h:382
Usage getUsage() const
Definition AudioStreamBase.h:195
AudioFormat mHardwareFormat
Definition AudioStreamBase.h:384
SpatializationBehavior mSpatializationBehavior
Definition AudioStreamBase.h:377
virtual int32_t getDeviceId() const
Definition AudioStreamBase.h:107
AudioStreamDataCallback * getDataCallback() const
Definition AudioStreamBase.h:119
SampleRateConversionQuality getSampleRateConversionQuality() const
Definition AudioStreamBase.h:287
InputPreset mInputPreset
Definition AudioStreamBase.h:359
SharingMode getSharingMode() const
Definition AudioStreamBase.h:97
std::string getAttributionTag() const
Definition AudioStreamBase.h:268
Direction mDirection
Definition AudioStreamBase.h:348
PerformanceMode getPerformanceMode() const
Definition AudioStreamBase.h:102
int32_t mFramesPerCallback
Definition AudioStreamBase.h:331
int32_t mBufferSizeInFrames
Definition AudioStreamBase.h:339
PrivacySensitiveMode getPrivacySensitiveMode() const
Definition AudioStreamBase.h:246
AudioFormat getHardwareFormat() const
Definition AudioStreamBase.h:311
Usage mUsage
Definition AudioStreamBase.h:353
InputPreset getInputPreset() const
Definition AudioStreamBase.h:205
virtual Result isValidConfig()
Definition AudioStreamBase.h:396
ContentType mContentType
Definition AudioStreamBase.h:355
int32_t mChannelCount
Definition AudioStreamBase.h:333
PrivacySensitiveMode mPrivacySensitiveMode
Definition AudioStreamBase.h:367
int32_t getHardwareSampleRate() const
Definition AudioStreamBase.h:306
AudioStreamDataCallback * mDataCallback
Definition AudioStreamBase.h:315
AllowedCapturePolicy mAllowedCapturePolicy
Definition AudioStreamBase.h:364
Direction getDirection() const
Definition AudioStreamBase.h:59
std::shared_ptr< AudioStreamRoutingCallback > getRoutingCallback() const
Definition AudioStreamBase.h:151
AudioStreamErrorCallback * getErrorCallback() const
Definition AudioStreamBase.h:135
bool anyDataCallbackSpecified() const
Definition AudioStreamBase.h:172
AudioFormat mFormat
Definition AudioStreamBase.h:346
std::shared_ptr< AudioStreamPresentationCallback > getPresentationCallback() const
Definition AudioStreamBase.h:143
int32_t mHardwareChannelCount
Definition AudioStreamBase.h:380
int32_t getChannelCount() const
Definition AudioStreamBase.h:54
int32_t getFramesPerCallback() const
Definition AudioStreamBase.h:69
ChannelMask getChannelMask() const
Definition AudioStreamBase.h:294
int32_t mSampleRate
Definition AudioStreamBase.h:335
bool isDataCallbackSpecified() const
Definition AudioStreamBase.h:158
bool mIsContentSpatialized
Definition AudioStreamBase.h:375
bool isContentSpatialized() const
Definition AudioStreamBase.h:216
SessionId getSessionId() const
Definition AudioStreamBase.h:211
ChannelMask mChannelMask
Definition AudioStreamBase.h:341
bool isChannelConversionAllowed() const
Definition AudioStreamBase.h:273
AudioStreamBase(const AudioStreamBase &)=default
ContentType getContentType() const
Definition AudioStreamBase.h:200
virtual int32_t getBufferCapacityInFrames() const
Definition AudioStreamBase.h:92
AudioFormat getFormat() const
Definition AudioStreamBase.h:79
PerformanceMode mPerformanceMode
Definition AudioStreamBase.h:350
bool isPresentationCallbackSpecified() const
Definition AudioStreamBase.h:188
int32_t getFramesPerDataCallback() const
Definition AudioStreamBase.h:74
SessionId mSessionId
Definition AudioStreamBase.h:361
std::string mPackageName
Definition AudioStreamBase.h:370
int32_t mBufferCapacityInFrames
Definition AudioStreamBase.h:337
bool isFormatConversionAllowed() const
Definition AudioStreamBase.h:280
AllowedCapturePolicy getAllowedCapturePolicy() const
Definition AudioStreamBase.h:233
int32_t getHardwareChannelCount() const
Definition AudioStreamBase.h:301
std::string getPackageName() const
Definition AudioStreamBase.h:257
AudioStreamErrorCallback * mErrorCallback
Definition AudioStreamBase.h:323
AudioStreamPartialDataCallback * getPartialDataCallback() const
Definition AudioStreamBase.h:127
SpatializationBehavior getSpatializationBehavior() const
Definition AudioStreamBase.h:221
AudioStreamBase & operator=(const AudioStreamBase &)=default
AudioStreamPartialDataCallback * mPartialDataCallback
Definition AudioStreamBase.h:319
std::string mAttributionTag
Definition AudioStreamBase.h:372
SharingMode mSharingMode
Definition AudioStreamBase.h:344
int32_t getSampleRate() const
Definition AudioStreamBase.h:64
bool isErrorCallbackSpecified() const
Definition AudioStreamBase.h:181
virtual int32_t getBufferSizeInFrames()
Definition AudioStreamBase.h:87
Definition AudioStreamCallback.h:34
Definition AudioStreamCallback.h:102
Definition AudioStreamCallback.h:230