AudioSystemLegacy.h revision 9b1b6064c1df329de41aaa056a88711e5783cc7d
1e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin/*
2e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin * Copyright (C) 2008 The Android Open Source Project
3e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin *
4e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin * Licensed under the Apache License, Version 2.0 (the "License");
5e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin * you may not use this file except in compliance with the License.
6e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin * You may obtain a copy of the License at
7e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin *
8e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin *      http://www.apache.org/licenses/LICENSE-2.0
9e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin *
10e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin * Unless required by applicable law or agreed to in writing, software
11e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin * distributed under the License is distributed on an "AS IS" BASIS,
12e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin * See the License for the specific language governing permissions and
14e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin * limitations under the License.
15e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin */
16e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
17e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin#ifndef ANDROID_AUDIOSYSTEM_LEGACY_H_
18e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin#define ANDROID_AUDIOSYSTEM_LEGACY_H_
19e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
20e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin#include <utils/Errors.h>
21e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin#include <media/AudioParameter.h>
22e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
234a0748be283a8c9efa02243c3e1716c49443a87cDima Zavin#include <system/audio.h>
24d17f66f33276e64e8e288f6ff2b1cb8169650c81Dima Zavin#include <system/audio_policy.h>
25e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
26e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavinnamespace android_audio_legacy {
27e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
28e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavinusing android::status_t;
29e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavinusing android::AudioParameter;
30e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
31e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavinenum {
32e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    OK                  = android::OK,
33e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    NO_ERROR            = android::NO_ERROR,
34e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
35e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    UNKNOWN_ERROR       = android::UNKNOWN_ERROR,
36e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
37e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    NO_MEMORY           = android::NO_MEMORY,
38e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    INVALID_OPERATION   = android::INVALID_OPERATION,
39e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    BAD_VALUE           = android::BAD_VALUE,
40e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    BAD_TYPE            = android::BAD_TYPE,
41e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    NAME_NOT_FOUND      = android::NAME_NOT_FOUND,
42e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    PERMISSION_DENIED   = android::PERMISSION_DENIED,
43e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    NO_INIT             = android::NO_INIT,
44e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    ALREADY_EXISTS      = android::ALREADY_EXISTS,
45e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    DEAD_OBJECT         = android::DEAD_OBJECT,
46e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    FAILED_TRANSACTION  = android::FAILED_TRANSACTION,
47e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    JPARKS_BROKE_IT     = android::JPARKS_BROKE_IT,
48e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    BAD_INDEX           = android::BAD_INDEX,
49e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    NOT_ENOUGH_DATA     = android::NOT_ENOUGH_DATA,
50e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    WOULD_BLOCK         = android::WOULD_BLOCK,
51e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    TIMED_OUT           = android::TIMED_OUT,
52e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    UNKNOWN_TRANSACTION = android::UNKNOWN_TRANSACTION,
53e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin};
54e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
55e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavinenum audio_source {
56e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    AUDIO_SOURCE_DEFAULT = 0,
57e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    AUDIO_SOURCE_MIC = 1,
58e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    AUDIO_SOURCE_VOICE_UPLINK = 2,
59e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    AUDIO_SOURCE_VOICE_DOWNLINK = 3,
60e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    AUDIO_SOURCE_VOICE_CALL = 4,
61e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    AUDIO_SOURCE_CAMCORDER = 5,
62e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    AUDIO_SOURCE_VOICE_RECOGNITION = 6,
63e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    AUDIO_SOURCE_VOICE_COMMUNICATION = 7,
64e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    AUDIO_SOURCE_MAX = AUDIO_SOURCE_VOICE_COMMUNICATION,
65e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
66e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    AUDIO_SOURCE_LIST_END  // must be last - used to validate audio source type
67e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin};
68e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
69e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavinclass AudioSystem {
70e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavinpublic:
71e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin#if 1
72e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum stream_type {
73e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEFAULT          =-1,
74e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        VOICE_CALL       = 0,
75e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        SYSTEM           = 1,
76e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        RING             = 2,
77e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        MUSIC            = 3,
78e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        ALARM            = 4,
79e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        NOTIFICATION     = 5,
80e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        BLUETOOTH_SCO    = 6,
81e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        ENFORCED_AUDIBLE = 7, // Sounds that cannot be muted by user and must be routed to speaker
82e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DTMF             = 8,
83e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        TTS              = 9,
84e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        NUM_STREAM_TYPES
85e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
86e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
87e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // Audio sub formats (see AudioSystem::audio_format).
88e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum pcm_sub_format {
89e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        PCM_SUB_16_BIT          = 0x1, // must be 1 for backward compatibility
90e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        PCM_SUB_8_BIT           = 0x2, // must be 2 for backward compatibility
91e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
92e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
93e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum audio_sessions {
94e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        SESSION_OUTPUT_STAGE = AUDIO_SESSION_OUTPUT_STAGE,
95e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        SESSION_OUTPUT_MIX = AUDIO_SESSION_OUTPUT_MIX,
96e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
97e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
98e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // MP3 sub format field definition : can use 11 LSBs in the same way as MP3 frame header to specify
99e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // bit rate, stereo mode, version...
100e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum mp3_sub_format {
101e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        //TODO
102e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
103e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
104e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // AMR NB/WB sub format field definition: specify frame block interleaving, bandwidth efficient or octet aligned,
105e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // encoding mode for recording...
106e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum amr_sub_format {
107e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        //TODO
108e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
109e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
110e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // AAC sub format field definition: specify profile or bitrate for recording...
111e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum aac_sub_format {
112e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        //TODO
113e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
114e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
115e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // VORBIS sub format field definition: specify quality for recording...
116e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum vorbis_sub_format {
117e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        //TODO
118e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
119e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
120e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // Audio format consists in a main format field (upper 8 bits) and a sub format field (lower 24 bits).
121e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // The main format indicates the main codec type. The sub format field indicates options and parameters
122e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // for each format. The sub format is mainly used for record to indicate for instance the requested bitrate
123e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // or profile. It can also be used for certain formats to give informations not present in the encoded
124e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // audio stream (e.g. octet alignement for AMR).
125e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum audio_format {
126e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        INVALID_FORMAT      = -1,
127e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FORMAT_DEFAULT      = 0,
128e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        PCM                 = 0x00000000, // must be 0 for backward compatibility
129e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        MP3                 = 0x01000000,
130e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        AMR_NB              = 0x02000000,
131e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        AMR_WB              = 0x03000000,
132e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        AAC                 = 0x04000000,
133e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        HE_AAC_V1           = 0x05000000,
134e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        HE_AAC_V2           = 0x06000000,
135e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        VORBIS              = 0x07000000,
136e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        MAIN_FORMAT_MASK    = 0xFF000000,
137e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        SUB_FORMAT_MASK     = 0x00FFFFFF,
138e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        // Aliases
139e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        PCM_16_BIT          = (PCM|PCM_SUB_16_BIT),
140e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        PCM_8_BIT          = (PCM|PCM_SUB_8_BIT)
141e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
142e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
143e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
1449b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi    // Channel mask definitions must be kept in sync with JAVA values
1459b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi    //   in /media/java/android/media/AudioFormat.java
146e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum audio_channels {
147e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        // output channels
1489b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi        CHANNEL_OUT_FRONT_LEFT            = 0x4,
1499b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi        CHANNEL_OUT_FRONT_RIGHT           = 0x8,
1509b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi        CHANNEL_OUT_FRONT_CENTER          = 0x10,
1519b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi        CHANNEL_OUT_LOW_FREQUENCY         = 0x20,
1529b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi        CHANNEL_OUT_BACK_LEFT             = 0x40,
1539b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi        CHANNEL_OUT_BACK_RIGHT            = 0x80,
1549b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi        CHANNEL_OUT_FRONT_LEFT_OF_CENTER  = 0x100,
155e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_OUT_FRONT_RIGHT_OF_CENTER = 0x200,
1569b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi        CHANNEL_OUT_BACK_CENTER           = 0x400,
1579b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi        CHANNEL_OUT_SIDE_LEFT             = 0x800,
1589b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi        CHANNEL_OUT_SIDE_RIGHT            = 0x1000,
1599b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi        CHANNEL_OUT_TOP_CENTER            = 0x2000,
1609b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi        CHANNEL_OUT_TOP_FRONT_LEFT        = 0x4000,
1619b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi        CHANNEL_OUT_TOP_FRONT_CENTER      = 0x8000,
1629b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi        CHANNEL_OUT_TOP_FRONT_RIGHT       = 0x10000,
1639b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi        CHANNEL_OUT_TOP_BACK_LEFT         = 0x20000,
1649b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi        CHANNEL_OUT_TOP_BACK_CENTER       = 0x40000,
1659b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi        CHANNEL_OUT_TOP_BACK_RIGHT        = 0x80000,
1669b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi
167e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_OUT_MONO = CHANNEL_OUT_FRONT_LEFT,
168e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_OUT_STEREO = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT),
169e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_OUT_QUAD = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT |
170e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                CHANNEL_OUT_BACK_LEFT | CHANNEL_OUT_BACK_RIGHT),
171e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_OUT_SURROUND = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT |
172e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                CHANNEL_OUT_FRONT_CENTER | CHANNEL_OUT_BACK_CENTER),
173e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_OUT_5POINT1 = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT |
1749b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi                CHANNEL_OUT_FRONT_CENTER | CHANNEL_OUT_LOW_FREQUENCY |
1759b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi                CHANNEL_OUT_BACK_LEFT | CHANNEL_OUT_BACK_RIGHT),
1769b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi        // matches the correct AudioFormat.CHANNEL_OUT_7POINT1_SURROUND definition for 7.1
177e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_OUT_7POINT1 = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT |
1789b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi                CHANNEL_OUT_FRONT_CENTER | CHANNEL_OUT_LOW_FREQUENCY |
1799b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi                CHANNEL_OUT_BACK_LEFT | CHANNEL_OUT_BACK_RIGHT |
1809b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi                CHANNEL_OUT_SIDE_LEFT | CHANNEL_OUT_SIDE_RIGHT),
181e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_OUT_ALL = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT |
1829b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi                CHANNEL_OUT_FRONT_CENTER | CHANNEL_OUT_LOW_FREQUENCY | CHANNEL_OUT_BACK_LEFT |
1839b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi                CHANNEL_OUT_BACK_RIGHT | CHANNEL_OUT_FRONT_LEFT_OF_CENTER |
1849b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi                CHANNEL_OUT_FRONT_RIGHT_OF_CENTER | CHANNEL_OUT_BACK_CENTER |
1859b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi                CHANNEL_OUT_SIDE_LEFT | CHANNEL_OUT_SIDE_RIGHT | CHANNEL_OUT_TOP_CENTER |
1869b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi                CHANNEL_OUT_TOP_FRONT_LEFT | CHANNEL_OUT_TOP_FRONT_CENTER |
1879b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi                CHANNEL_OUT_TOP_FRONT_RIGHT | CHANNEL_OUT_TOP_BACK_LEFT |
1889b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi                CHANNEL_OUT_TOP_BACK_CENTER | CHANNEL_OUT_TOP_BACK_RIGHT),
189e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
190e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        // input channels
191e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_LEFT = 0x4,
192e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_RIGHT = 0x8,
193e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_FRONT = 0x10,
194e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_BACK = 0x20,
195e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_LEFT_PROCESSED = 0x40,
196e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_RIGHT_PROCESSED = 0x80,
197e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_FRONT_PROCESSED = 0x100,
198e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_BACK_PROCESSED = 0x200,
199e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_PRESSURE = 0x400,
200e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_X_AXIS = 0x800,
201e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_Y_AXIS = 0x1000,
202e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_Z_AXIS = 0x2000,
203e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_VOICE_UPLINK = 0x4000,
204e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_VOICE_DNLINK = 0x8000,
205e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_MONO = CHANNEL_IN_FRONT,
206e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_STEREO = (CHANNEL_IN_LEFT | CHANNEL_IN_RIGHT),
207e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_ALL = (CHANNEL_IN_LEFT | CHANNEL_IN_RIGHT | CHANNEL_IN_FRONT | CHANNEL_IN_BACK|
208e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                CHANNEL_IN_LEFT_PROCESSED | CHANNEL_IN_RIGHT_PROCESSED | CHANNEL_IN_FRONT_PROCESSED | CHANNEL_IN_BACK_PROCESSED|
209e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                CHANNEL_IN_PRESSURE | CHANNEL_IN_X_AXIS | CHANNEL_IN_Y_AXIS | CHANNEL_IN_Z_AXIS |
210e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                CHANNEL_IN_VOICE_UPLINK | CHANNEL_IN_VOICE_DNLINK)
211e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
212e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
213e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum audio_mode {
214e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        MODE_INVALID = -2,
215e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        MODE_CURRENT = -1,
216e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        MODE_NORMAL = 0,
217e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        MODE_RINGTONE,
218e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        MODE_IN_CALL,
219e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        MODE_IN_COMMUNICATION,
220e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        NUM_MODES  // not a valid entry, denotes end-of-list
221e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
222e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
223e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum audio_in_acoustics {
224e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        AGC_ENABLE    = 0x0001,
225e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        AGC_DISABLE   = 0,
226e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        NS_ENABLE     = 0x0002,
227e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        NS_DISABLE    = 0,
228e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        TX_IIR_ENABLE = 0x0004,
229e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        TX_DISABLE    = 0
230e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
231e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
232e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum audio_devices {
233e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        // output devices
234e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_EARPIECE = 0x1,
235e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_SPEAKER = 0x2,
236e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_WIRED_HEADSET = 0x4,
237e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_WIRED_HEADPHONE = 0x8,
238e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_BLUETOOTH_SCO = 0x10,
239e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_BLUETOOTH_SCO_HEADSET = 0x20,
240e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_BLUETOOTH_SCO_CARKIT = 0x40,
241e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_BLUETOOTH_A2DP = 0x80,
242e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES = 0x100,
243e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER = 0x200,
244e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_AUX_DIGITAL = 0x400,
245e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_ANLG_DOCK_HEADSET = 0x800,
246e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_DGTL_DOCK_HEADSET = 0x1000,
247e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_DEFAULT = 0x8000,
248e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_ALL = (DEVICE_OUT_EARPIECE | DEVICE_OUT_SPEAKER | DEVICE_OUT_WIRED_HEADSET |
249e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                DEVICE_OUT_WIRED_HEADPHONE | DEVICE_OUT_BLUETOOTH_SCO | DEVICE_OUT_BLUETOOTH_SCO_HEADSET |
250e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                DEVICE_OUT_BLUETOOTH_SCO_CARKIT | DEVICE_OUT_BLUETOOTH_A2DP | DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES |
251e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER | DEVICE_OUT_AUX_DIGITAL |
252e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                DEVICE_OUT_ANLG_DOCK_HEADSET | DEVICE_OUT_DGTL_DOCK_HEADSET |
253e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                DEVICE_OUT_DEFAULT),
254e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_ALL_A2DP = (DEVICE_OUT_BLUETOOTH_A2DP | DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES |
255e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER),
256e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
257e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        // input devices
258e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_IN_COMMUNICATION = 0x10000,
259e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_IN_AMBIENT = 0x20000,
260e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_IN_BUILTIN_MIC = 0x40000,
261e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_IN_BLUETOOTH_SCO_HEADSET = 0x80000,
262e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_IN_WIRED_HEADSET = 0x100000,
263e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_IN_AUX_DIGITAL = 0x200000,
264e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_IN_VOICE_CALL = 0x400000,
265e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_IN_BACK_MIC = 0x800000,
266e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_IN_DEFAULT = 0x80000000,
267e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
268e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_IN_ALL = (DEVICE_IN_COMMUNICATION | DEVICE_IN_AMBIENT | DEVICE_IN_BUILTIN_MIC |
269e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                DEVICE_IN_BLUETOOTH_SCO_HEADSET | DEVICE_IN_WIRED_HEADSET | DEVICE_IN_AUX_DIGITAL |
270e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                DEVICE_IN_VOICE_CALL | DEVICE_IN_BACK_MIC | DEVICE_IN_DEFAULT)
271e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
272e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
273e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // request to open a direct output with getOutput() (by opposition to sharing an output with other AudioTracks)
274e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum output_flags {
275e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        OUTPUT_FLAG_INDIRECT = 0x0,
276e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        OUTPUT_FLAG_DIRECT = 0x1
277e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
278e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
279e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // device categories used for setForceUse()
280e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum forced_config {
281e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FORCE_NONE,
282e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FORCE_SPEAKER,
283e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FORCE_HEADPHONES,
284e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FORCE_BT_SCO,
285e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FORCE_BT_A2DP,
286e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FORCE_WIRED_ACCESSORY,
287e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FORCE_BT_CAR_DOCK,
288e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FORCE_BT_DESK_DOCK,
289e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FORCE_ANALOG_DOCK,
290e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FORCE_DIGITAL_DOCK,
291e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        NUM_FORCE_CONFIG,
292e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FORCE_DEFAULT = FORCE_NONE
293e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
294e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
295e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // usages used for setForceUse()
296e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum force_use {
297e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FOR_COMMUNICATION,
298e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FOR_MEDIA,
299e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FOR_RECORD,
300e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FOR_DOCK,
301e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        NUM_FORCE_USE
302e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
303e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
304e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    //
305e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // AudioPolicyService interface
306e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    //
307e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
308e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // device connection states used for setDeviceConnectionState()
309e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum device_connection_state {
310e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_STATE_UNAVAILABLE,
311e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_STATE_AVAILABLE,
312e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        NUM_DEVICE_STATES
313e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
314e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
315e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin#endif
316e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
317e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    static uint32_t popCount(uint32_t u) {
318e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        return popcount(u);
319e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    }
320e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
321e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin#if 1
322e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    static bool isOutputDevice(audio_devices device) {
323e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        return audio_is_output_device((audio_devices_t)device);
324e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    }
325e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    static bool isInputDevice(audio_devices device) {
326e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        return audio_is_input_device((audio_devices_t)device);
327e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    }
328e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    static bool isA2dpDevice(audio_devices device) {
329e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        return audio_is_a2dp_device((audio_devices_t)device);
330e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    }
331e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    static bool isBluetoothScoDevice(audio_devices device) {
332e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        return audio_is_bluetooth_sco_device((audio_devices_t)device);
333e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    }
334e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    static bool isLowVisibility(stream_type stream) {
335e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        return audio_is_low_visibility((audio_stream_type_t)stream);
336e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    }
337e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    static bool isValidFormat(uint32_t format) {
338e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        return audio_is_valid_format(format);
339e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    }
340e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    static bool isLinearPCM(uint32_t format) {
341e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        return audio_is_linear_pcm(format);
342e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    }
343e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    static bool isOutputChannel(uint32_t channel) {
344e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        return audio_is_output_channel(channel);
345e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    }
346e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    static bool isInputChannel(uint32_t channel) {
347e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        return audio_is_input_channel(channel);
348e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    }
349e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
350e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin#endif
351e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin};
352e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
353e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin};  // namespace android
354e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
355e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin#endif // ANDROID_AUDIOSYSTEM_LEGACY_H_
356