Oboe
A library for creating real-time audio apps on Android
All Classes Functions Variables Pages
Definitions.h
1/*
2 * Copyright (C) 2016 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_DEFINITIONS_H
18#define OBOE_DEFINITIONS_H
19
20#include <cstdint>
21#include <type_traits>
22
23// Oboe needs to be able to build on old NDKs so we use hard coded constants.
24// The correctness of these constants is verified in "aaudio/AAudioLoader.cpp".
25
26namespace oboe {
27
31 constexpr int32_t kUnspecified = 0;
32
33 // TODO: Investigate using std::chrono
37 constexpr int64_t kNanosPerMicrosecond = 1000;
38
42 constexpr int64_t kNanosPerMillisecond = kNanosPerMicrosecond * 1000;
43
47 constexpr int64_t kMillisPerSecond = 1000;
48
52 constexpr int64_t kNanosPerSecond = kNanosPerMillisecond * kMillisPerSecond;
53
57 enum class StreamState : int32_t { // aaudio_stream_state_t
58 Uninitialized = 0, // AAUDIO_STREAM_STATE_UNINITIALIZED,
59 Unknown = 1, // AAUDIO_STREAM_STATE_UNKNOWN,
60 Open = 2, // AAUDIO_STREAM_STATE_OPEN,
61 Starting = 3, // AAUDIO_STREAM_STATE_STARTING,
62 Started = 4, // AAUDIO_STREAM_STATE_STARTED,
63 Pausing = 5, // AAUDIO_STREAM_STATE_PAUSING,
64 Paused = 6, // AAUDIO_STREAM_STATE_PAUSED,
65 Flushing = 7, // AAUDIO_STREAM_STATE_FLUSHING,
66 Flushed = 8, // AAUDIO_STREAM_STATE_FLUSHED,
67 Stopping = 9, // AAUDIO_STREAM_STATE_STOPPING,
68 Stopped = 10, // AAUDIO_STREAM_STATE_STOPPED,
69 Closing = 11, // AAUDIO_STREAM_STATE_CLOSING,
70 Closed = 12, // AAUDIO_STREAM_STATE_CLOSED,
71 Disconnected = 13, // AAUDIO_STREAM_STATE_DISCONNECTED,
72 };
73
77 enum class Direction : int32_t { // aaudio_direction_t
78
82 Output = 0, // AAUDIO_DIRECTION_OUTPUT,
83
87 Input = 1, // AAUDIO_DIRECTION_INPUT,
88 };
89
93 enum class AudioFormat : int32_t { // aaudio_format_t
97 Invalid = -1, // AAUDIO_FORMAT_INVALID,
98
104 Unspecified = 0, // AAUDIO_FORMAT_UNSPECIFIED,
105
109 I16 = 1, // AAUDIO_FORMAT_PCM_I16,
110
118 Float = 2, // AAUDIO_FORMAT_PCM_FLOAT,
119
129 I24 = 3, // AAUDIO_FORMAT_PCM_I24_PACKED
130
140 I32 = 4, // AAUDIO_FORMAT_PCM_I32
141
154 IEC61937 = 5, // AAUDIO_FORMAT_IEC61937
155
159 MP3 = 6, // AAUDIO_FORMAT_MP3
160
164 AAC_LC, // AAUDIO_FORMAT_AAC_LC
165
169 AAC_HE_V1, // AAUDIO_FORMAT_AAC_HE_V1,
170
174 AAC_HE_V2, // AAUDIO_FORMAT_AAC_HE_V2
175
179 AAC_ELD, // AAUDIO_FORMAT_AAC_ELD
180
184 AAC_XHE, // AAUDIO_FORMAT_AAC_XHE
185
189 OPUS, // AAUDIO_FORMAT_OPUS
190 };
191
195 enum class DataCallbackResult : int32_t { // aaudio_data_callback_result_t
196 // Indicates to the caller that the callbacks should continue.
197 Continue = 0, // AAUDIO_CALLBACK_RESULT_CONTINUE,
198
199 // Indicates to the caller that the callbacks should stop immediately.
200 Stop = 1, // AAUDIO_CALLBACK_RESULT_STOP,
201 };
202
207 enum class Result : int32_t { // aaudio_result_t
208 OK = 0, // AAUDIO_OK
209 ErrorBase = -900, // AAUDIO_ERROR_BASE,
210 ErrorDisconnected = -899, // AAUDIO_ERROR_DISCONNECTED,
211 ErrorIllegalArgument = -898, // AAUDIO_ERROR_ILLEGAL_ARGUMENT,
212 ErrorInternal = -896, // AAUDIO_ERROR_INTERNAL,
213 ErrorInvalidState = -895, // AAUDIO_ERROR_INVALID_STATE,
214 ErrorInvalidHandle = -892, // AAUDIO_ERROR_INVALID_HANDLE,
215 ErrorUnimplemented = -890, // AAUDIO_ERROR_UNIMPLEMENTED,
216 ErrorUnavailable = -889, // AAUDIO_ERROR_UNAVAILABLE,
217 ErrorNoFreeHandles = -888, // AAUDIO_ERROR_NO_FREE_HANDLES,
218 ErrorNoMemory = -887, // AAUDIO_ERROR_NO_MEMORY,
219 ErrorNull = -886, // AAUDIO_ERROR_NULL,
220 ErrorTimeout = -885, // AAUDIO_ERROR_TIMEOUT,
221 ErrorWouldBlock = -884, // AAUDIO_ERROR_WOULD_BLOCK,
222 ErrorInvalidFormat = -883, // AAUDIO_ERROR_INVALID_FORMAT,
223 ErrorOutOfRange = -882, // AAUDIO_ERROR_OUT_OF_RANGE,
224 ErrorNoService = -881, // AAUDIO_ERROR_NO_SERVICE,
225 ErrorInvalidRate = -880, // AAUDIO_ERROR_INVALID_RATE,
226 // Reserved for future AAudio result types
227 Reserved1,
228 Reserved2,
229 Reserved3,
230 Reserved4,
231 Reserved5,
232 Reserved6,
233 Reserved7,
234 Reserved8,
235 Reserved9,
236 Reserved10,
237 ErrorClosed = -869,
238 };
239
243 enum class SharingMode : int32_t { // aaudio_sharing_mode_t
244
253 Exclusive = 0, // AAUDIO_SHARING_MODE_EXCLUSIVE,
254
262 Shared = 1, // AAUDIO_SHARING_MODE_SHARED,
263 };
264
268 enum class PerformanceMode : int32_t { // aaudio_performance_mode_t
269
273 None = 10, // AAUDIO_PERFORMANCE_MODE_NONE,
274
278 PowerSaving = 11, // AAUDIO_PERFORMANCE_MODE_POWER_SAVING,
279
283 LowLatency = 12, // AAUDIO_PERFORMANCE_MODE_LOW_LATENCY
284
293 POWER_SAVING_OFFLOADED = 13, // AAUDIO_PERFORMANCE_MODE_POWER_SAVING_OFFLOADED
294 };
295
299 enum class AudioApi : int32_t {
303 Unspecified = kUnspecified,
304
309 OpenSLES,
310
316 AAudio
317 };
318
324 enum class SampleRateConversionQuality : int32_t {
328 None,
333 Fastest,
337 Low,
341 Medium,
345 High,
349 Best,
350 };
351
361 enum class Usage : int32_t { // aaudio_usage_t
365 Media = 1, // AAUDIO_USAGE_MEDIA
366
370 VoiceCommunication = 2, // AAUDIO_USAGE_VOICE_COMMUNICATION
371
375 VoiceCommunicationSignalling = 3, // AAUDIO_USAGE_VOICE_COMMUNICATION_SIGNALLING
376
380 Alarm = 4, // AAUDIO_USAGE_ALARM
381
386 Notification = 5, // AAUDIO_USAGE_NOTIFICATION
387
391 NotificationRingtone = 6, // AAUDIO_USAGE_NOTIFICATION_RINGTONE
392
396 NotificationEvent = 10, // AAUDIO_USAGE_NOTIFICATION_EVENT
397
401 AssistanceAccessibility = 11, // AAUDIO_USAGE_ASSISTANCE_ACCESSIBILITY
402
406 AssistanceNavigationGuidance = 12, // AAUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE
407
411 AssistanceSonification = 13, // AAUDIO_USAGE_ASSISTANCE_SONIFICATION
412
416 Game = 14, // AAUDIO_USAGE_GAME
417
421 Assistant = 16, // AAUDIO_USAGE_ASSISTANT
422 };
423
424
437 enum ContentType : int32_t { // aaudio_content_type_t
438
442 Speech = 1, // AAUDIO_CONTENT_TYPE_SPEECH
443
447 Music = 2, // AAUDIO_CONTENT_TYPE_MUSIC
448
452 Movie = 3, // AAUDIO_CONTENT_TYPE_MOVIE
453
458 Sonification = 4, // AAUDIO_CONTENT_TYPE_SONIFICATION
459 };
460
470 enum InputPreset : int32_t { // aaudio_input_preset_t
474 Generic = 1, // AAUDIO_INPUT_PRESET_GENERIC
475
479 Camcorder = 5, // AAUDIO_INPUT_PRESET_CAMCORDER
480
484 VoiceRecognition = 6, // AAUDIO_INPUT_PRESET_VOICE_RECOGNITION
485
489 VoiceCommunication = 7, // AAUDIO_INPUT_PRESET_VOICE_COMMUNICATION
490
496 Unprocessed = 9, // AAUDIO_INPUT_PRESET_UNPROCESSED
497
503 VoicePerformance = 10, // AAUDIO_INPUT_PRESET_VOICE_PERFORMANCE
504
505 };
506
512 enum SessionId {
518 None = -1, // AAUDIO_SESSION_ID_NONE
519
527 Allocate = 0, // AAUDIO_SESSION_ID_ALLOCATE
528 };
529
540 enum ChannelCount : int32_t {
544 Unspecified = kUnspecified,
545
549 Mono = 1,
550
554 Stereo = 2,
555 };
556
571 enum class ChannelMask : uint32_t { // aaudio_channel_mask_t
572 Unspecified = kUnspecified,
573 FrontLeft = 1 << 0,
574 FrontRight = 1 << 1,
575 FrontCenter = 1 << 2,
576 LowFrequency = 1 << 3,
577 BackLeft = 1 << 4,
578 BackRight = 1 << 5,
579 FrontLeftOfCenter = 1 << 6,
580 FrontRightOfCenter = 1 << 7,
581 BackCenter = 1 << 8,
582 SideLeft = 1 << 9,
583 SideRight = 1 << 10,
584 TopCenter = 1 << 11,
585 TopFrontLeft = 1 << 12,
586 TopFrontCenter = 1 << 13,
587 TopFrontRight = 1 << 14,
588 TopBackLeft = 1 << 15,
589 TopBackCenter = 1 << 16,
590 TopBackRight = 1 << 17,
591 TopSideLeft = 1 << 18,
592 TopSideRight = 1 << 19,
593 BottomFrontLeft = 1 << 20,
594 BottomFrontCenter = 1 << 21,
595 BottomFrontRight = 1 << 22,
596 LowFrequency2 = 1 << 23,
597 FrontWideLeft = 1 << 24,
598 FrontWideRight = 1 << 25,
599
603 Mono = FrontLeft,
604
608 Stereo = FrontLeft |
609 FrontRight,
610
614 CM2Point1 = FrontLeft |
615 FrontRight |
616 LowFrequency,
617
621 Tri = FrontLeft |
622 FrontRight |
623 FrontCenter,
624
628 TriBack = FrontLeft |
629 FrontRight |
630 BackCenter,
631
635 CM3Point1 = FrontLeft |
636 FrontRight |
637 FrontCenter |
638 LowFrequency,
639
643 CM2Point0Point2 = FrontLeft |
644 FrontRight |
645 TopSideLeft |
646 TopSideRight,
647
651 CM2Point1Point2 = CM2Point0Point2 |
652 LowFrequency,
653
657 CM3Point0Point2 = FrontLeft |
658 FrontRight |
659 FrontCenter |
660 TopSideLeft |
661 TopSideRight,
662
666 CM3Point1Point2 = CM3Point0Point2 |
667 LowFrequency,
668
672 Quad = FrontLeft |
673 FrontRight |
674 BackLeft |
675 BackRight,
676
680 QuadSide = FrontLeft |
681 FrontRight |
682 SideLeft |
683 SideRight,
684
688 Surround = FrontLeft |
689 FrontRight |
690 FrontCenter |
691 BackCenter,
692
696 Penta = Quad |
697 FrontCenter,
698
702 CM5Point1 = FrontLeft |
703 FrontRight |
704 FrontCenter |
705 LowFrequency |
706 BackLeft |
707 BackRight,
708
712 CM5Point1Side = FrontLeft |
713 FrontRight |
714 FrontCenter |
715 LowFrequency |
716 SideLeft |
717 SideRight,
718
722 CM6Point1 = FrontLeft |
723 FrontRight |
724 FrontCenter |
725 LowFrequency |
726 BackLeft |
727 BackRight |
728 BackCenter,
729
733 CM7Point1 = CM5Point1 |
734 SideLeft |
735 SideRight,
736
740 CM5Point1Point2 = CM5Point1 |
741 TopSideLeft |
742 TopSideRight,
743
747 CM5Point1Point4 = CM5Point1 |
748 TopFrontLeft |
749 TopFrontRight |
750 TopBackLeft |
751 TopBackRight,
752
756 CM7Point1Point2 = CM7Point1 |
757 TopSideLeft |
758 TopSideRight,
759
763 CM7Point1Point4 = CM7Point1 |
764 TopFrontLeft |
765 TopFrontRight |
766 TopBackLeft |
767 TopBackRight,
768
772 CM9Point1Point4 = CM7Point1Point4 |
773 FrontWideLeft |
774 FrontWideRight,
775
779 CM9Point1Point6 = CM9Point1Point4 |
780 TopSideLeft |
781 TopSideRight,
782
786 FrontBack = FrontCenter |
787 BackCenter,
788 };
789
793 enum class SpatializationBehavior : int32_t {
794
798 Unspecified = kUnspecified,
799
804 Auto = 1,
805
810 Never = 2,
811 };
812
820 enum class PrivacySensitiveMode : int32_t {
821
826 Unspecified = kUnspecified,
827
831 Disabled = 1,
832
836 Enabled = 2,
837 };
838
847 enum class AllowedCapturePolicy : int32_t {
852 Unspecified = kUnspecified,
863 All = 1,
871 System = 2,
879 None = 3,
880 };
881
890 enum class DeviceType : int32_t {
894 BuiltinEarpiece = 1,
895
900 BuiltinSpeaker = 2,
901
906 WiredHeadset = 3,
907
911 WiredHeadphones = 4,
912
916 LineAnalog = 5,
917
921 LineDigital = 6,
922
926 BluetoothSco = 7,
927
931 BluetoothA2dp = 8,
932
936 Hdmi = 9,
937
941 HdmiArc = 10,
942
946 UsbDevice = 11,
947
951 UsbAccessory = 12,
952
956 Dock = 13,
957
961 FM = 14,
962
966 BuiltinMic = 15,
967
971 FMTuner = 16,
972
976 TVTuner = 17,
977
981 Telephony = 18,
982
986 AuxLine = 19,
987
991 IP = 20,
992
996 Bus = 21,
997
1001 UsbHeadset = 22,
1002
1006 HearingAid = 23,
1007
1015 BuiltinSpeakerSafe = 24,
1016
1021 RemoteSubmix = 25,
1027 BleHeadset = 26,
1028
1032 BleSpeaker = 27,
1033
1037 HdmiEarc = 29,
1038
1042 BleBroadcast = 30,
1043
1048 DockAnalog = 31
1049 };
1050
1056 enum class MMapPolicy : int32_t {
1060 Unspecified = kUnspecified,
1061
1065 Never = 1,
1066
1072 Auto,
1073
1077 Always
1078 };
1079
1099
1100 public:
1101
1103 static int32_t SampleRate;
1105 static int32_t FramesPerBurst;
1107 static int32_t ChannelCount;
1108
1109 };
1110
1115 int64_t position; // in frames
1116 int64_t timestamp; // in nanoseconds
1117 };
1118
1120 public:
1121
1122 static bool areWorkaroundsEnabled() {
1123 return mWorkaroundsEnabled;
1124 }
1125
1131 static void setWorkaroundsEnabled(bool enabled) {
1132 mWorkaroundsEnabled = enabled;
1133 }
1134
1135 private:
1136 static bool mWorkaroundsEnabled;
1137 };
1138} // namespace oboe
1139
1140#endif // OBOE_DEFINITIONS_H
Definition Definitions.h:1098
static int32_t SampleRate
Definition Definitions.h:1103
static int32_t FramesPerBurst
Definition Definitions.h:1105
static int32_t ChannelCount
Definition Definitions.h:1107
Definition Definitions.h:1119
static void setWorkaroundsEnabled(bool enabled)
Definition Definitions.h:1131
Definition Definitions.h:1114