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    enum audio_channels {
144e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        // output channels
14520324efa14255de566551f6880740ee40809a18bJean-Michel Trivi        CHANNEL_OUT_FRONT_LEFT            = 0x1,
14620324efa14255de566551f6880740ee40809a18bJean-Michel Trivi        CHANNEL_OUT_FRONT_RIGHT           = 0x2,
14720324efa14255de566551f6880740ee40809a18bJean-Michel Trivi        CHANNEL_OUT_FRONT_CENTER          = 0x4,
14820324efa14255de566551f6880740ee40809a18bJean-Michel Trivi        CHANNEL_OUT_LOW_FREQUENCY         = 0x8,
14920324efa14255de566551f6880740ee40809a18bJean-Michel Trivi        CHANNEL_OUT_BACK_LEFT             = 0x10,
15020324efa14255de566551f6880740ee40809a18bJean-Michel Trivi        CHANNEL_OUT_BACK_RIGHT            = 0x20,
15120324efa14255de566551f6880740ee40809a18bJean-Michel Trivi        CHANNEL_OUT_FRONT_LEFT_OF_CENTER  = 0x40,
15220324efa14255de566551f6880740ee40809a18bJean-Michel Trivi        CHANNEL_OUT_FRONT_RIGHT_OF_CENTER = 0x80,
15320324efa14255de566551f6880740ee40809a18bJean-Michel Trivi        CHANNEL_OUT_BACK_CENTER           = 0x100,
15420324efa14255de566551f6880740ee40809a18bJean-Michel Trivi        CHANNEL_OUT_SIDE_LEFT             = 0x200,
15520324efa14255de566551f6880740ee40809a18bJean-Michel Trivi        CHANNEL_OUT_SIDE_RIGHT            = 0x400,
15620324efa14255de566551f6880740ee40809a18bJean-Michel Trivi        CHANNEL_OUT_TOP_CENTER            = 0x800,
15720324efa14255de566551f6880740ee40809a18bJean-Michel Trivi        CHANNEL_OUT_TOP_FRONT_LEFT        = 0x1000,
15820324efa14255de566551f6880740ee40809a18bJean-Michel Trivi        CHANNEL_OUT_TOP_FRONT_CENTER      = 0x2000,
15920324efa14255de566551f6880740ee40809a18bJean-Michel Trivi        CHANNEL_OUT_TOP_FRONT_RIGHT       = 0x4000,
16020324efa14255de566551f6880740ee40809a18bJean-Michel Trivi        CHANNEL_OUT_TOP_BACK_LEFT         = 0x8000,
16120324efa14255de566551f6880740ee40809a18bJean-Michel Trivi        CHANNEL_OUT_TOP_BACK_CENTER       = 0x10000,
16220324efa14255de566551f6880740ee40809a18bJean-Michel Trivi        CHANNEL_OUT_TOP_BACK_RIGHT        = 0x20000,
1639b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi
164e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_OUT_MONO = CHANNEL_OUT_FRONT_LEFT,
165e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_OUT_STEREO = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT),
166e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_OUT_QUAD = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT |
167e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                CHANNEL_OUT_BACK_LEFT | CHANNEL_OUT_BACK_RIGHT),
168e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_OUT_SURROUND = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT |
169e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                CHANNEL_OUT_FRONT_CENTER | CHANNEL_OUT_BACK_CENTER),
170e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_OUT_5POINT1 = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT |
1719b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi                CHANNEL_OUT_FRONT_CENTER | CHANNEL_OUT_LOW_FREQUENCY |
1729b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi                CHANNEL_OUT_BACK_LEFT | CHANNEL_OUT_BACK_RIGHT),
1739b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi        // matches the correct AudioFormat.CHANNEL_OUT_7POINT1_SURROUND definition for 7.1
174e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_OUT_7POINT1 = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT |
1759b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi                CHANNEL_OUT_FRONT_CENTER | CHANNEL_OUT_LOW_FREQUENCY |
1769b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi                CHANNEL_OUT_BACK_LEFT | CHANNEL_OUT_BACK_RIGHT |
1779b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi                CHANNEL_OUT_SIDE_LEFT | CHANNEL_OUT_SIDE_RIGHT),
178e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_OUT_ALL = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT |
1799b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi                CHANNEL_OUT_FRONT_CENTER | CHANNEL_OUT_LOW_FREQUENCY | CHANNEL_OUT_BACK_LEFT |
1809b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi                CHANNEL_OUT_BACK_RIGHT | CHANNEL_OUT_FRONT_LEFT_OF_CENTER |
1819b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi                CHANNEL_OUT_FRONT_RIGHT_OF_CENTER | CHANNEL_OUT_BACK_CENTER |
1829b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi                CHANNEL_OUT_SIDE_LEFT | CHANNEL_OUT_SIDE_RIGHT | CHANNEL_OUT_TOP_CENTER |
1839b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi                CHANNEL_OUT_TOP_FRONT_LEFT | CHANNEL_OUT_TOP_FRONT_CENTER |
1849b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi                CHANNEL_OUT_TOP_FRONT_RIGHT | CHANNEL_OUT_TOP_BACK_LEFT |
1859b1b6064c1df329de41aaa056a88711e5783cc7dJean-Michel Trivi                CHANNEL_OUT_TOP_BACK_CENTER | CHANNEL_OUT_TOP_BACK_RIGHT),
186e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
187e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        // input channels
188e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_LEFT = 0x4,
189e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_RIGHT = 0x8,
190e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_FRONT = 0x10,
191e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_BACK = 0x20,
192e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_LEFT_PROCESSED = 0x40,
193e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_RIGHT_PROCESSED = 0x80,
194e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_FRONT_PROCESSED = 0x100,
195e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_BACK_PROCESSED = 0x200,
196e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_PRESSURE = 0x400,
197e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_X_AXIS = 0x800,
198e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_Y_AXIS = 0x1000,
199e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_Z_AXIS = 0x2000,
200e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_VOICE_UPLINK = 0x4000,
201e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_VOICE_DNLINK = 0x8000,
202e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_MONO = CHANNEL_IN_FRONT,
203e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_STEREO = (CHANNEL_IN_LEFT | CHANNEL_IN_RIGHT),
204e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        CHANNEL_IN_ALL = (CHANNEL_IN_LEFT | CHANNEL_IN_RIGHT | CHANNEL_IN_FRONT | CHANNEL_IN_BACK|
205e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                CHANNEL_IN_LEFT_PROCESSED | CHANNEL_IN_RIGHT_PROCESSED | CHANNEL_IN_FRONT_PROCESSED | CHANNEL_IN_BACK_PROCESSED|
206e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                CHANNEL_IN_PRESSURE | CHANNEL_IN_X_AXIS | CHANNEL_IN_Y_AXIS | CHANNEL_IN_Z_AXIS |
207e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                CHANNEL_IN_VOICE_UPLINK | CHANNEL_IN_VOICE_DNLINK)
208e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
209e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
210e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum audio_mode {
211e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        MODE_INVALID = -2,
212e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        MODE_CURRENT = -1,
213e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        MODE_NORMAL = 0,
214e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        MODE_RINGTONE,
215e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        MODE_IN_CALL,
216e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        MODE_IN_COMMUNICATION,
217e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        NUM_MODES  // not a valid entry, denotes end-of-list
218e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
219e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
220e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum audio_in_acoustics {
221e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        AGC_ENABLE    = 0x0001,
222e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        AGC_DISABLE   = 0,
223e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        NS_ENABLE     = 0x0002,
224e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        NS_DISABLE    = 0,
225e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        TX_IIR_ENABLE = 0x0004,
226e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        TX_DISABLE    = 0
227e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
228e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
229c8101f5b14e745b348592c5609e55f121a11a6bfJean-Michel Trivi    // DO NOT USE: the "audio_devices" enumeration below is obsolete, use type "audio_devices_t" and
230c8101f5b14e745b348592c5609e55f121a11a6bfJean-Michel Trivi    //   audio device enumeration from system/audio.h instead.
231e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum audio_devices {
232e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        // output devices
233e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_EARPIECE = 0x1,
234e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_SPEAKER = 0x2,
235e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_WIRED_HEADSET = 0x4,
236e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_WIRED_HEADPHONE = 0x8,
237e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_BLUETOOTH_SCO = 0x10,
238e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_BLUETOOTH_SCO_HEADSET = 0x20,
239e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_BLUETOOTH_SCO_CARKIT = 0x40,
240e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_BLUETOOTH_A2DP = 0x80,
241e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES = 0x100,
242e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER = 0x200,
243e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_AUX_DIGITAL = 0x400,
244e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_ANLG_DOCK_HEADSET = 0x800,
245e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_DGTL_DOCK_HEADSET = 0x1000,
246e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_DEFAULT = 0x8000,
247e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_ALL = (DEVICE_OUT_EARPIECE | DEVICE_OUT_SPEAKER | DEVICE_OUT_WIRED_HEADSET |
248e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                DEVICE_OUT_WIRED_HEADPHONE | DEVICE_OUT_BLUETOOTH_SCO | DEVICE_OUT_BLUETOOTH_SCO_HEADSET |
249e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                DEVICE_OUT_BLUETOOTH_SCO_CARKIT | DEVICE_OUT_BLUETOOTH_A2DP | DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES |
250e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER | DEVICE_OUT_AUX_DIGITAL |
251e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                DEVICE_OUT_ANLG_DOCK_HEADSET | DEVICE_OUT_DGTL_DOCK_HEADSET |
252e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                DEVICE_OUT_DEFAULT),
253e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_OUT_ALL_A2DP = (DEVICE_OUT_BLUETOOTH_A2DP | DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES |
254e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER),
255e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
256e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        // input devices
257e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_IN_COMMUNICATION = 0x10000,
258e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_IN_AMBIENT = 0x20000,
259e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_IN_BUILTIN_MIC = 0x40000,
260e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_IN_BLUETOOTH_SCO_HEADSET = 0x80000,
261e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_IN_WIRED_HEADSET = 0x100000,
262e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_IN_AUX_DIGITAL = 0x200000,
263e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_IN_VOICE_CALL = 0x400000,
264e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_IN_BACK_MIC = 0x800000,
265e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_IN_DEFAULT = 0x80000000,
266e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
267e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_IN_ALL = (DEVICE_IN_COMMUNICATION | DEVICE_IN_AMBIENT | DEVICE_IN_BUILTIN_MIC |
268e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                DEVICE_IN_BLUETOOTH_SCO_HEADSET | DEVICE_IN_WIRED_HEADSET | DEVICE_IN_AUX_DIGITAL |
269e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin                DEVICE_IN_VOICE_CALL | DEVICE_IN_BACK_MIC | DEVICE_IN_DEFAULT)
270e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
271e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
272e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // request to open a direct output with getOutput() (by opposition to sharing an output with other AudioTracks)
273e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum output_flags {
274e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        OUTPUT_FLAG_INDIRECT = 0x0,
275e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        OUTPUT_FLAG_DIRECT = 0x1
276e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
277e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
278e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // device categories used for setForceUse()
279e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum forced_config {
280e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FORCE_NONE,
281e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FORCE_SPEAKER,
282e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FORCE_HEADPHONES,
283e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FORCE_BT_SCO,
284e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FORCE_BT_A2DP,
285e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FORCE_WIRED_ACCESSORY,
286e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FORCE_BT_CAR_DOCK,
287e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FORCE_BT_DESK_DOCK,
288e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FORCE_ANALOG_DOCK,
289e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FORCE_DIGITAL_DOCK,
2901afd84f62291d20414cbf58c7af01462a8fdca60Eric Laurent        FORCE_NO_BT_A2DP,
291738207def5f691d605ae33d041116829a74513a9Eric Laurent        FORCE_SYSTEM_ENFORCED,
292e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        NUM_FORCE_CONFIG,
293e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FORCE_DEFAULT = FORCE_NONE
294e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
295e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
296e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // usages used for setForceUse()
297e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum force_use {
298e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FOR_COMMUNICATION,
299e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FOR_MEDIA,
300e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FOR_RECORD,
301e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        FOR_DOCK,
302738207def5f691d605ae33d041116829a74513a9Eric Laurent        FOR_SYSTEM,
303e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        NUM_FORCE_USE
304e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
305e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
306e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    //
307e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // AudioPolicyService interface
308e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    //
309e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
310e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    // device connection states used for setDeviceConnectionState()
311e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    enum device_connection_state {
312e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_STATE_UNAVAILABLE,
313e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        DEVICE_STATE_AVAILABLE,
314e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        NUM_DEVICE_STATES
315e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    };
316e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
317e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin#endif
318e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
319e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    static uint32_t popCount(uint32_t u) {
320e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        return popcount(u);
321e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    }
322e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
323e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin#if 1
324e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    static bool isOutputDevice(audio_devices device) {
325ed8f62d4faa53bbd53a358c5f494b653a09285e4Eric Laurent        if ((popcount(device) == 1) && ((device & ~DEVICE_OUT_ALL) == 0))
326ed8f62d4faa53bbd53a358c5f494b653a09285e4Eric Laurent             return true;
327ed8f62d4faa53bbd53a358c5f494b653a09285e4Eric Laurent         else
328ed8f62d4faa53bbd53a358c5f494b653a09285e4Eric Laurent             return false;
329e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    }
330e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    static bool isInputDevice(audio_devices device) {
331ed8f62d4faa53bbd53a358c5f494b653a09285e4Eric Laurent        if ((popcount(device) == 1) && ((device & ~DEVICE_IN_ALL) == 0))
332ed8f62d4faa53bbd53a358c5f494b653a09285e4Eric Laurent             return true;
333ed8f62d4faa53bbd53a358c5f494b653a09285e4Eric Laurent         else
334ed8f62d4faa53bbd53a358c5f494b653a09285e4Eric Laurent             return false;
335e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    }
336e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    static bool isA2dpDevice(audio_devices device) {
337e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        return audio_is_a2dp_device((audio_devices_t)device);
338e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    }
339e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    static bool isBluetoothScoDevice(audio_devices device) {
340e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        return audio_is_bluetooth_sco_device((audio_devices_t)device);
341e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    }
342e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    static bool isLowVisibility(stream_type stream) {
343e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        return audio_is_low_visibility((audio_stream_type_t)stream);
344e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    }
345e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    static bool isValidFormat(uint32_t format) {
34653e2cfab45b411db0bf6c4b5d146cd9d8b1b1425Glenn Kasten        return audio_is_valid_format((audio_format_t) format);
347e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    }
348e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    static bool isLinearPCM(uint32_t format) {
34953e2cfab45b411db0bf6c4b5d146cd9d8b1b1425Glenn Kasten        return audio_is_linear_pcm((audio_format_t) format);
350e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    }
351e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    static bool isOutputChannel(uint32_t channel) {
352e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        return audio_is_output_channel(channel);
353e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    }
354e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    static bool isInputChannel(uint32_t channel) {
355e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin        return audio_is_input_channel(channel);
356e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin    }
357e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
358e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin#endif
359e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin};
360e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
361e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin};  // namespace android
362e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin
363e81531e91ecae92aff471dbff9cbeb0f95ff4a80Dima Zavin#endif // ANDROID_AUDIOSYSTEM_LEGACY_H_
364