xref: /aosp_15_r20/frameworks/native/include/audiomanager/AudioManager.h (revision 38e8c45f13ce32b0dcecb25141ffecaf386fa17f)
1*38e8c45fSAndroid Build Coastguard Worker /*
2*38e8c45fSAndroid Build Coastguard Worker  * Copyright (C) 2016 The Android Open Source Project
3*38e8c45fSAndroid Build Coastguard Worker  *
4*38e8c45fSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*38e8c45fSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*38e8c45fSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*38e8c45fSAndroid Build Coastguard Worker  *
8*38e8c45fSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*38e8c45fSAndroid Build Coastguard Worker  *
10*38e8c45fSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*38e8c45fSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*38e8c45fSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*38e8c45fSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*38e8c45fSAndroid Build Coastguard Worker  * limitations under the License.
15*38e8c45fSAndroid Build Coastguard Worker  */
16*38e8c45fSAndroid Build Coastguard Worker 
17*38e8c45fSAndroid Build Coastguard Worker #ifndef ANDROID_AUDIOMANAGER_H
18*38e8c45fSAndroid Build Coastguard Worker #define ANDROID_AUDIOMANAGER_H
19*38e8c45fSAndroid Build Coastguard Worker 
20*38e8c45fSAndroid Build Coastguard Worker namespace android {
21*38e8c45fSAndroid Build Coastguard Worker 
22*38e8c45fSAndroid Build Coastguard Worker // must be kept in sync with definitions in AudioPlaybackConfiguration.java
23*38e8c45fSAndroid Build Coastguard Worker #define PLAYER_PIID_INVALID -1
24*38e8c45fSAndroid Build Coastguard Worker 
25*38e8c45fSAndroid Build Coastguard Worker // TODO (b/309532236) remove manual IAudioManager impl in favor of AIDL.
26*38e8c45fSAndroid Build Coastguard Worker typedef enum {
27*38e8c45fSAndroid Build Coastguard Worker     PLAYER_TYPE_SLES_AUDIOPLAYER_BUFFERQUEUE = 11,
28*38e8c45fSAndroid Build Coastguard Worker     PLAYER_TYPE_SLES_AUDIOPLAYER_URI_FD = 12,
29*38e8c45fSAndroid Build Coastguard Worker     PLAYER_TYPE_AAUDIO = 13,
30*38e8c45fSAndroid Build Coastguard Worker     PLAYER_TYPE_HW_SOURCE = 14,
31*38e8c45fSAndroid Build Coastguard Worker     PLAYER_TYPE_EXTERNAL_PROXY = 15,
32*38e8c45fSAndroid Build Coastguard Worker } player_type_t;
33*38e8c45fSAndroid Build Coastguard Worker 
34*38e8c45fSAndroid Build Coastguard Worker typedef enum {
35*38e8c45fSAndroid Build Coastguard Worker     PLAYER_STATE_UNKNOWN  = -1,
36*38e8c45fSAndroid Build Coastguard Worker     PLAYER_STATE_RELEASED = 0,
37*38e8c45fSAndroid Build Coastguard Worker     PLAYER_STATE_IDLE     = 1,
38*38e8c45fSAndroid Build Coastguard Worker     PLAYER_STATE_STARTED  = 2,
39*38e8c45fSAndroid Build Coastguard Worker     PLAYER_STATE_PAUSED   = 3,
40*38e8c45fSAndroid Build Coastguard Worker     PLAYER_STATE_STOPPED  = 4,
41*38e8c45fSAndroid Build Coastguard Worker     PLAYER_UPDATE_DEVICE_ID = 5,
42*38e8c45fSAndroid Build Coastguard Worker     PLAYER_UPDATE_PORT_ID = 6,
43*38e8c45fSAndroid Build Coastguard Worker     PLAYER_UPDATE_MUTED = 7,
44*38e8c45fSAndroid Build Coastguard Worker     PLAYER_UPDATE_FORMAT = 8,
45*38e8c45fSAndroid Build Coastguard Worker } player_state_t;
46*38e8c45fSAndroid Build Coastguard Worker 
47*38e8c45fSAndroid Build Coastguard Worker static constexpr char
48*38e8c45fSAndroid Build Coastguard Worker     kExtraPlayerEventSpatializedKey[] = "android.media.extra.PLAYER_EVENT_SPATIALIZED";
49*38e8c45fSAndroid Build Coastguard Worker static constexpr char
50*38e8c45fSAndroid Build Coastguard Worker     kExtraPlayerEventSampleRateKey[] = "android.media.extra.PLAYER_EVENT_SAMPLE_RATE";
51*38e8c45fSAndroid Build Coastguard Worker static constexpr char
52*38e8c45fSAndroid Build Coastguard Worker     kExtraPlayerEventChannelMaskKey[] = "android.media.extra.PLAYER_EVENT_CHANNEL_MASK";
53*38e8c45fSAndroid Build Coastguard Worker 
54*38e8c45fSAndroid Build Coastguard Worker static constexpr char
55*38e8c45fSAndroid Build Coastguard Worker     kExtraPlayerEventMuteKey[] = "android.media.extra.PLAYER_EVENT_MUTE";
56*38e8c45fSAndroid Build Coastguard Worker enum {
57*38e8c45fSAndroid Build Coastguard Worker     PLAYER_MUTE_MASTER = (1 << 0),
58*38e8c45fSAndroid Build Coastguard Worker     PLAYER_MUTE_STREAM_VOLUME = (1 << 1),
59*38e8c45fSAndroid Build Coastguard Worker     PLAYER_MUTE_STREAM_MUTED = (1 << 2),
60*38e8c45fSAndroid Build Coastguard Worker     PLAYER_MUTE_PLAYBACK_RESTRICTED = (1 << 3),
61*38e8c45fSAndroid Build Coastguard Worker     PLAYER_MUTE_CLIENT_VOLUME = (1 << 4),
62*38e8c45fSAndroid Build Coastguard Worker     PLAYER_MUTE_VOLUME_SHAPER = (1 << 5),
63*38e8c45fSAndroid Build Coastguard Worker     PLAYER_MUTE_PORT_VOLUME = (1 << 6),
64*38e8c45fSAndroid Build Coastguard Worker     PLAYER_MUTE_OP_AUDIO_CONTROL = (1 << 7),
65*38e8c45fSAndroid Build Coastguard Worker };
66*38e8c45fSAndroid Build Coastguard Worker 
67*38e8c45fSAndroid Build Coastguard Worker struct mute_state_t {
68*38e8c45fSAndroid Build Coastguard Worker     /** Flag used when the master volume is causing the mute state. */
69*38e8c45fSAndroid Build Coastguard Worker     bool muteFromMasterMute = false;
70*38e8c45fSAndroid Build Coastguard Worker     /** Flag used when the stream volume is causing the mute state. */
71*38e8c45fSAndroid Build Coastguard Worker     bool muteFromStreamVolume = false;
72*38e8c45fSAndroid Build Coastguard Worker     /** Flag used when the stream muted is causing the mute state. */
73*38e8c45fSAndroid Build Coastguard Worker     bool muteFromStreamMuted = false;
74*38e8c45fSAndroid Build Coastguard Worker     /** Flag used when playback is restricted by AppOps manager with OP_PLAY_AUDIO. */
75*38e8c45fSAndroid Build Coastguard Worker     bool muteFromPlaybackRestricted = false;
76*38e8c45fSAndroid Build Coastguard Worker     /** Flag used when audio track was muted by client volume. */
77*38e8c45fSAndroid Build Coastguard Worker     bool muteFromClientVolume = false;
78*38e8c45fSAndroid Build Coastguard Worker     /** Flag used when volume is muted by volume shaper. */
79*38e8c45fSAndroid Build Coastguard Worker     bool muteFromVolumeShaper = false;
80*38e8c45fSAndroid Build Coastguard Worker     /** Flag used when volume is muted by port volume. */
81*38e8c45fSAndroid Build Coastguard Worker     bool muteFromPortVolume = false;
82*38e8c45fSAndroid Build Coastguard Worker     /** Flag used when volume is muted by audio control op. */
83*38e8c45fSAndroid Build Coastguard Worker     bool muteFromOpAudioControl = false;
84*38e8c45fSAndroid Build Coastguard Worker 
85*38e8c45fSAndroid Build Coastguard Worker     explicit operator int() const
86*38e8c45fSAndroid Build Coastguard Worker     {
87*38e8c45fSAndroid Build Coastguard Worker         int result = muteFromMasterMute * PLAYER_MUTE_MASTER;
88*38e8c45fSAndroid Build Coastguard Worker         result |= muteFromStreamVolume * PLAYER_MUTE_STREAM_VOLUME;
89*38e8c45fSAndroid Build Coastguard Worker         result |= muteFromStreamMuted * PLAYER_MUTE_STREAM_MUTED;
90*38e8c45fSAndroid Build Coastguard Worker         result |= muteFromPlaybackRestricted * PLAYER_MUTE_PLAYBACK_RESTRICTED;
91*38e8c45fSAndroid Build Coastguard Worker         result |= muteFromClientVolume * PLAYER_MUTE_CLIENT_VOLUME;
92*38e8c45fSAndroid Build Coastguard Worker         result |= muteFromVolumeShaper * PLAYER_MUTE_VOLUME_SHAPER;
93*38e8c45fSAndroid Build Coastguard Worker         result |= muteFromPortVolume * PLAYER_MUTE_PORT_VOLUME;
94*38e8c45fSAndroid Build Coastguard Worker         result |= muteFromOpAudioControl * PLAYER_MUTE_OP_AUDIO_CONTROL;
95*38e8c45fSAndroid Build Coastguard Worker         return result;
96*38e8c45fSAndroid Build Coastguard Worker     }
97*38e8c45fSAndroid Build Coastguard Worker 
98*38e8c45fSAndroid Build Coastguard Worker     bool operator==(const mute_state_t& other) const
99*38e8c45fSAndroid Build Coastguard Worker     {
100*38e8c45fSAndroid Build Coastguard Worker         return static_cast<int>(*this) == static_cast<int>(other);
101*38e8c45fSAndroid Build Coastguard Worker     }
102*38e8c45fSAndroid Build Coastguard Worker };
103*38e8c45fSAndroid Build Coastguard Worker 
104*38e8c45fSAndroid Build Coastguard Worker // must be kept in sync with definitions in AudioManager.java
105*38e8c45fSAndroid Build Coastguard Worker #define RECORD_RIID_INVALID -1
106*38e8c45fSAndroid Build Coastguard Worker 
107*38e8c45fSAndroid Build Coastguard Worker typedef enum {
108*38e8c45fSAndroid Build Coastguard Worker     RECORDER_STATE_UNKNOWN  = -1,
109*38e8c45fSAndroid Build Coastguard Worker     RECORDER_STATE_STARTED  = 0,
110*38e8c45fSAndroid Build Coastguard Worker     RECORDER_STATE_STOPPED  = 1,
111*38e8c45fSAndroid Build Coastguard Worker } recorder_state_t;
112*38e8c45fSAndroid Build Coastguard Worker 
113*38e8c45fSAndroid Build Coastguard Worker }; // namespace android
114*38e8c45fSAndroid Build Coastguard Worker 
115*38e8c45fSAndroid Build Coastguard Worker #endif // ANDROID_AUDIOMANAGER_H
116