Oboe
A library for creating real-time audio apps on Android
All Classes Functions Variables Pages
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 "oboe/AudioStreamCallback.h"
23#include "oboe/Definitions.h"
24
25namespace oboe {
26
31
32public:
33
35
36 virtual ~AudioStreamBase() = default;
37
38 // This class only contains primitives so we can use default constructor and copy methods.
39
44
49
53 int32_t getChannelCount() const { return mChannelCount; }
54
58 Direction getDirection() const { return mDirection; }
59
63 int32_t getSampleRate() const { return mSampleRate; }
64
68 int32_t getFramesPerCallback() const { return getFramesPerDataCallback(); }
69
73 int32_t getFramesPerDataCallback() const { return mFramesPerCallback; }
74
78 AudioFormat getFormat() const { return mFormat; }
79
86 virtual int32_t getBufferSizeInFrames() { return mBufferSizeInFrames; }
87
91 virtual int32_t getBufferCapacityInFrames() const { return mBufferCapacityInFrames; }
92
96 SharingMode getSharingMode() const { return mSharingMode; }
97
101 PerformanceMode getPerformanceMode() const { return mPerformanceMode; }
102
106 int32_t getDeviceId() const { return mDeviceId; }
107
115
123
128 std::shared_ptr<AudioStreamPresentationCallback> getPresentationCallback() const {
129 return mSharedPresentationCallback;
130 }
131
136 return mDataCallback != nullptr;
137 }
138
145 return mErrorCallback != nullptr;
146 }
147
152 return mSharedPresentationCallback != nullptr;
153 }
154
158 Usage getUsage() const { return mUsage; }
159
163 ContentType getContentType() const { return mContentType; }
164
168 InputPreset getInputPreset() const { return mInputPreset; }
169
173 SessionId getSessionId() const { return mSessionId; }
174
179
183 SpatializationBehavior getSpatializationBehavior() const { return mSpatializationBehavior; }
184
195 AllowedCapturePolicy getAllowedCapturePolicy() const { return mAllowedCapturePolicy; }
196
208 PrivacySensitiveMode getPrivacySensitiveMode() const { return mPrivacySensitiveMode; }
209
214 return mChannelConversionAllowed;
215 }
216
221 return mFormatConversionAllowed;
222 }
223
227 SampleRateConversionQuality getSampleRateConversionQuality() const {
228 return mSampleRateConversionQuality;
229 }
230
234 ChannelMask getChannelMask() const {
235 return mChannelMask;
236 }
237
242
246 int32_t getHardwareSampleRate() const { return mHardwareSampleRate; }
247
251 AudioFormat getHardwareFormat() const { return mHardwareFormat; }
252
253protected:
256 std::shared_ptr<AudioStreamDataCallback> mSharedDataCallback;
257
260 std::shared_ptr<AudioStreamErrorCallback> mSharedErrorCallback;
261
262 std::shared_ptr<AudioStreamPresentationCallback> mSharedPresentationCallback;
263
265 int32_t mFramesPerCallback = kUnspecified;
267 int32_t mChannelCount = kUnspecified;
269 int32_t mSampleRate = kUnspecified;
271 int32_t mDeviceId = kUnspecified;
273 int32_t mBufferCapacityInFrames = kUnspecified;
275 int32_t mBufferSizeInFrames = kUnspecified;
277 ChannelMask mChannelMask = ChannelMask::Unspecified;
278
280 SharingMode mSharingMode = SharingMode::Shared;
282 AudioFormat mFormat = AudioFormat::Unspecified;
284 Direction mDirection = Direction::Output;
286 PerformanceMode mPerformanceMode = PerformanceMode::None;
287
289 Usage mUsage = Usage::Media;
291 ContentType mContentType = ContentType::Music;
295 InputPreset mInputPreset = InputPreset::VoiceRecognition;
297 SessionId mSessionId = SessionId::None;
298
300 AllowedCapturePolicy mAllowedCapturePolicy = AllowedCapturePolicy::Unspecified;
301
303 PrivacySensitiveMode mPrivacySensitiveMode = PrivacySensitiveMode::Unspecified;
304
306 std::string mPackageName;
308 std::string mAttributionTag;
309
313 SpatializationBehavior mSpatializationBehavior = SpatializationBehavior::Unspecified;
314
316 int32_t mHardwareChannelCount = kUnspecified;
318 int32_t mHardwareSampleRate = kUnspecified;
320 AudioFormat mHardwareFormat = AudioFormat::Unspecified;
321
322 // Control whether Oboe can convert channel counts to achieve optimal results.
323 bool mChannelConversionAllowed = false;
324 // Control whether Oboe can convert data formats to achieve optimal results.
325 bool mFormatConversionAllowed = false;
326 // Control whether and how Oboe can convert sample rates to achieve optimal results.
327 SampleRateConversionQuality mSampleRateConversionQuality = SampleRateConversionQuality::Medium;
328
330 virtual Result isValidConfig() {
331 switch (mFormat) {
332 case AudioFormat::Unspecified:
333 case AudioFormat::I16:
334 case AudioFormat::Float:
335 case AudioFormat::I24:
336 case AudioFormat::I32:
337 case AudioFormat::IEC61937:
338 break;
339
340 default:
341 return Result::ErrorInvalidFormat;
342 }
343
344 switch (mSampleRateConversionQuality) {
345 case SampleRateConversionQuality::None:
346 case SampleRateConversionQuality::Fastest:
347 case SampleRateConversionQuality::Low:
348 case SampleRateConversionQuality::Medium:
349 case SampleRateConversionQuality::High:
350 case SampleRateConversionQuality::Best:
351 return Result::OK;
352 default:
353 return Result::ErrorIllegalArgument;
354 }
355 }
356};
357
358} // namespace oboe
359
360#endif /* OBOE_STREAM_BASE_H_ */
Definition AudioStreamBase.h:30
int32_t mHardwareSampleRate
Definition AudioStreamBase.h:318
int32_t getDeviceId() const
Definition AudioStreamBase.h:106
Usage getUsage() const
Definition AudioStreamBase.h:158
AudioFormat mHardwareFormat
Definition AudioStreamBase.h:320
SpatializationBehavior mSpatializationBehavior
Definition AudioStreamBase.h:313
AudioStreamDataCallback * getDataCallback() const
Definition AudioStreamBase.h:112
SampleRateConversionQuality getSampleRateConversionQuality() const
Definition AudioStreamBase.h:227
InputPreset mInputPreset
Definition AudioStreamBase.h:295
SharingMode getSharingMode() const
Definition AudioStreamBase.h:96
int32_t mDeviceId
Definition AudioStreamBase.h:271
Direction mDirection
Definition AudioStreamBase.h:284
PerformanceMode getPerformanceMode() const
Definition AudioStreamBase.h:101
int32_t mFramesPerCallback
Definition AudioStreamBase.h:265
int32_t mBufferSizeInFrames
Definition AudioStreamBase.h:275
PrivacySensitiveMode getPrivacySensitiveMode() const
Definition AudioStreamBase.h:208
AudioFormat getHardwareFormat() const
Definition AudioStreamBase.h:251
Usage mUsage
Definition AudioStreamBase.h:289
InputPreset getInputPreset() const
Definition AudioStreamBase.h:168
virtual Result isValidConfig()
Definition AudioStreamBase.h:330
ContentType mContentType
Definition AudioStreamBase.h:291
int32_t mChannelCount
Definition AudioStreamBase.h:267
PrivacySensitiveMode mPrivacySensitiveMode
Definition AudioStreamBase.h:303
int32_t getHardwareSampleRate() const
Definition AudioStreamBase.h:246
AudioStreamDataCallback * mDataCallback
Definition AudioStreamBase.h:255
AllowedCapturePolicy mAllowedCapturePolicy
Definition AudioStreamBase.h:300
Direction getDirection() const
Definition AudioStreamBase.h:58
AudioStreamErrorCallback * getErrorCallback() const
Definition AudioStreamBase.h:120
AudioFormat mFormat
Definition AudioStreamBase.h:282
std::shared_ptr< AudioStreamPresentationCallback > getPresentationCallback() const
Definition AudioStreamBase.h:128
int32_t mHardwareChannelCount
Definition AudioStreamBase.h:316
int32_t getChannelCount() const
Definition AudioStreamBase.h:53
int32_t getFramesPerCallback() const
Definition AudioStreamBase.h:68
ChannelMask getChannelMask() const
Definition AudioStreamBase.h:234
int32_t mSampleRate
Definition AudioStreamBase.h:269
bool isDataCallbackSpecified() const
Definition AudioStreamBase.h:135
bool mIsContentSpatialized
Definition AudioStreamBase.h:311
bool isContentSpatialized() const
Definition AudioStreamBase.h:178
SessionId getSessionId() const
Definition AudioStreamBase.h:173
ChannelMask mChannelMask
Definition AudioStreamBase.h:277
bool isChannelConversionAllowed() const
Definition AudioStreamBase.h:213
AudioStreamBase(const AudioStreamBase &)=default
ContentType getContentType() const
Definition AudioStreamBase.h:163
virtual int32_t getBufferCapacityInFrames() const
Definition AudioStreamBase.h:91
AudioFormat getFormat() const
Definition AudioStreamBase.h:78
PerformanceMode mPerformanceMode
Definition AudioStreamBase.h:286
bool isPresentationCallbackSpecified() const
Definition AudioStreamBase.h:151
int32_t getFramesPerDataCallback() const
Definition AudioStreamBase.h:73
SessionId mSessionId
Definition AudioStreamBase.h:297
std::string mPackageName
Definition AudioStreamBase.h:306
int32_t mBufferCapacityInFrames
Definition AudioStreamBase.h:273
bool isFormatConversionAllowed() const
Definition AudioStreamBase.h:220
AllowedCapturePolicy getAllowedCapturePolicy() const
Definition AudioStreamBase.h:195
int32_t getHardwareChannelCount() const
Definition AudioStreamBase.h:241
AudioStreamErrorCallback * mErrorCallback
Definition AudioStreamBase.h:259
SpatializationBehavior getSpatializationBehavior() const
Definition AudioStreamBase.h:183
AudioStreamBase & operator=(const AudioStreamBase &)=default
std::string mAttributionTag
Definition AudioStreamBase.h:308
SharingMode mSharingMode
Definition AudioStreamBase.h:280
int32_t getSampleRate() const
Definition AudioStreamBase.h:63
bool isErrorCallbackSpecified() const
Definition AudioStreamBase.h:144
virtual int32_t getBufferSizeInFrames()
Definition AudioStreamBase.h:86
Definition AudioStreamCallback.h:34
Definition AudioStreamCallback.h:102