audio.h revision abcb99927d9ad3f66288a5ce16d7c86c14b49249
1e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin/* 2e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * Copyright (C) 2011 The Android Open Source Project 3e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * 4e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * Licensed under the Apache License, Version 2.0 (the "License"); 5e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * you may not use this file except in compliance with the License. 6e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * You may obtain a copy of the License at 7e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * 8e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * http://www.apache.org/licenses/LICENSE-2.0 9e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * 10e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * Unless required by applicable law or agreed to in writing, software 11e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * distributed under the License is distributed on an "AS IS" BASIS, 12e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * See the License for the specific language governing permissions and 14e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * limitations under the License. 15e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin */ 16e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 17e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 18e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin#ifndef ANDROID_AUDIO_CORE_H 19e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin#define ANDROID_AUDIO_CORE_H 20e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 21e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin#include <stdbool.h> 22e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin#include <stdint.h> 23e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin#include <sys/cdefs.h> 24e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin#include <sys/types.h> 25e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 26e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin#include <cutils/bitops.h> 27e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 28e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin__BEGIN_DECLS 29e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 30e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin/* The enums were moved here mostly from 31e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * frameworks/base/include/media/AudioSystem.h 32e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin */ 33e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 348ecc7afca42d0bb27aad25733790309f71f307d6Jeff Brown/* device address used to refer to the standard remote submix */ 358ecc7afca42d0bb27aad25733790309f71f307d6Jeff Brown#define AUDIO_REMOTE_SUBMIX_DEVICE_ADDRESS "0" 368ecc7afca42d0bb27aad25733790309f71f307d6Jeff Brown 371c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten/* AudioFlinger and AudioPolicy services use I/O handles to identify audio sources and sinks */ 38e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavintypedef int audio_io_handle_t; 391c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten#define AUDIO_IO_HANDLE_NONE 0 40e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 41e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin/* Audio stream types */ 42e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavintypedef enum { 431c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten /* These values must kept in sync with 441c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten * frameworks/base/media/java/android/media/AudioSystem.java 451c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten */ 46e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_STREAM_DEFAULT = -1, 471c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten AUDIO_STREAM_MIN = 0, 48e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_STREAM_VOICE_CALL = 0, 49e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_STREAM_SYSTEM = 1, 50e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_STREAM_RING = 2, 51e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_STREAM_MUSIC = 3, 52e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_STREAM_ALARM = 4, 53e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_STREAM_NOTIFICATION = 5, 54e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_STREAM_BLUETOOTH_SCO = 6, 55e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_STREAM_ENFORCED_AUDIBLE = 7, /* Sounds that cannot be muted by user and must be routed to speaker */ 56e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_STREAM_DTMF = 8, 57e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_STREAM_TTS = 9, 58e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 59e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_STREAM_CNT, 60e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_STREAM_MAX = AUDIO_STREAM_CNT - 1, 61e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} audio_stream_type_t; 62e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 63e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin/* Do not change these values without updating their counterparts 641c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten * in frameworks/base/media/java/android/media/MediaRecorder.java, 651c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten * frameworks/av/services/audioflinger/AudioPolicyService.cpp, 661c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten * and system/media/audio_effects/include/audio_effects/audio_effects_conf.h! 67e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin */ 68e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavintypedef enum { 69e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_SOURCE_DEFAULT = 0, 70e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_SOURCE_MIC = 1, 71e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_SOURCE_VOICE_UPLINK = 2, 72e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_SOURCE_VOICE_DOWNLINK = 3, 73e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_SOURCE_VOICE_CALL = 4, 74e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_SOURCE_CAMCORDER = 5, 75e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_SOURCE_VOICE_RECOGNITION = 6, 76e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_SOURCE_VOICE_COMMUNICATION = 7, 77e11866a8799a2357b82c9217c8d6b726726f23feJean-Michel Trivi AUDIO_SOURCE_REMOTE_SUBMIX = 8, /* Source for the mix to be presented remotely. */ 78e11866a8799a2357b82c9217c8d6b726726f23feJean-Michel Trivi /* An example of remote presentation is Wifi Display */ 79e11866a8799a2357b82c9217c8d6b726726f23feJean-Michel Trivi /* where a dongle attached to a TV can be used to */ 80e11866a8799a2357b82c9217c8d6b726726f23feJean-Michel Trivi /* play the mix captured by this audio source. */ 81e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_SOURCE_CNT, 82e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_SOURCE_MAX = AUDIO_SOURCE_CNT - 1, 8304c12ca061cd4ffe79a8eb5d570c4830a0950c85Eric Laurent AUDIO_SOURCE_HOTWORD = 1999, /* A low-priority, preemptible audio source for 8404c12ca061cd4ffe79a8eb5d570c4830a0950c85Eric Laurent for background software hotword detection. 8504c12ca061cd4ffe79a8eb5d570c4830a0950c85Eric Laurent Same tuning as AUDIO_SOURCE_VOICE_RECOGNITION. 8604c12ca061cd4ffe79a8eb5d570c4830a0950c85Eric Laurent Used only internally to the framework. Not exposed 8704c12ca061cd4ffe79a8eb5d570c4830a0950c85Eric Laurent at the audio HAL. */ 88e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} audio_source_t; 89e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 90e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin/* special audio session values 91e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * (XXX: should this be living in the audio effects land?) 92e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin */ 93e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavintypedef enum { 94e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin /* session for effects attached to a particular output stream 95e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * (value must be less than 0) 96e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin */ 97e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_SESSION_OUTPUT_STAGE = -1, 98e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 99e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin /* session for effects applied to output mix. These effects can 100e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * be moved by audio policy manager to another output stream 101e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * (value must be 0) 102e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin */ 103e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_SESSION_OUTPUT_MIX = 0, 104b4f2b4eac4b9ae3d8c7804c5902343c4235f81adGlenn Kasten 105b4f2b4eac4b9ae3d8c7804c5902343c4235f81adGlenn Kasten /* application does not specify an explicit session ID to be used, 106b4f2b4eac4b9ae3d8c7804c5902343c4235f81adGlenn Kasten * and requests a new session ID to be allocated 107b4f2b4eac4b9ae3d8c7804c5902343c4235f81adGlenn Kasten * TODO use unique values for AUDIO_SESSION_OUTPUT_MIX and AUDIO_SESSION_ALLOCATE, 108b4f2b4eac4b9ae3d8c7804c5902343c4235f81adGlenn Kasten * after all uses have been updated from 0 to the appropriate symbol, and have been tested. 109b4f2b4eac4b9ae3d8c7804c5902343c4235f81adGlenn Kasten */ 110b4f2b4eac4b9ae3d8c7804c5902343c4235f81adGlenn Kasten AUDIO_SESSION_ALLOCATE = 0, 111e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} audio_session_t; 112e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 113e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin/* Audio sub formats (see enum audio_format). */ 114e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 115e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin/* PCM sub formats */ 116e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavintypedef enum { 117c0a51093a2604b27f7d78f88eecaea15ac744f2eGlenn Kasten /* All of these are in native byte order */ 1189714b27bb41d999cb61b22833d3f253552b3c82bEric Laurent AUDIO_FORMAT_PCM_SUB_16_BIT = 0x1, /* DO NOT CHANGE - PCM signed 16 bits */ 1199714b27bb41d999cb61b22833d3f253552b3c82bEric Laurent AUDIO_FORMAT_PCM_SUB_8_BIT = 0x2, /* DO NOT CHANGE - PCM unsigned 8 bits */ 1209714b27bb41d999cb61b22833d3f253552b3c82bEric Laurent AUDIO_FORMAT_PCM_SUB_32_BIT = 0x3, /* PCM signed .31 fixed point */ 1219714b27bb41d999cb61b22833d3f253552b3c82bEric Laurent AUDIO_FORMAT_PCM_SUB_8_24_BIT = 0x4, /* PCM signed 7.24 fixed point */ 1221c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten AUDIO_FORMAT_PCM_SUB_FLOAT = 0x5, /* PCM single-precision floating point */ 123c0a51093a2604b27f7d78f88eecaea15ac744f2eGlenn Kasten AUDIO_FORMAT_PCM_SUB_24_BIT_PACKED = 0x6, /* PCM signed .23 fixed point packed in 3 bytes */ 124e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} audio_format_pcm_sub_fmt_t; 125e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 1261c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten/* The audio_format_*_sub_fmt_t declarations are not currently used */ 1271c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten 128e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin/* MP3 sub format field definition : can use 11 LSBs in the same way as MP3 129e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * frame header to specify bit rate, stereo mode, version... 130e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin */ 131e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavintypedef enum { 132e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_MP3_SUB_NONE = 0x0, 133e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} audio_format_mp3_sub_fmt_t; 134e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 135e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin/* AMR NB/WB sub format field definition: specify frame block interleaving, 136e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * bandwidth efficient or octet aligned, encoding mode for recording... 137e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin */ 138e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavintypedef enum { 139e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_AMR_SUB_NONE = 0x0, 140e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} audio_format_amr_sub_fmt_t; 141e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 142e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin/* AAC sub format field definition: specify profile or bitrate for recording... */ 143e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavintypedef enum { 144e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_AAC_SUB_NONE = 0x0, 145e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} audio_format_aac_sub_fmt_t; 146e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 147e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin/* VORBIS sub format field definition: specify quality for recording... */ 148e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavintypedef enum { 149e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_VORBIS_SUB_NONE = 0x0, 150e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} audio_format_vorbis_sub_fmt_t; 151e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 1521c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten/* Audio format consists of a main format field (upper 8 bits) and a sub format 153e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * field (lower 24 bits). 154e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * 155e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * The main format indicates the main codec type. The sub format field 156e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * indicates options and parameters for each format. The sub format is mainly 157e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * used for record to indicate for instance the requested bitrate or profile. 158e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * It can also be used for certain formats to give informations not present in 159e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * the encoded audio stream (e.g. octet alignement for AMR). 160e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin */ 161e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavintypedef enum { 162e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_INVALID = 0xFFFFFFFFUL, 163e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_DEFAULT = 0, 164e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_PCM = 0x00000000UL, /* DO NOT CHANGE */ 165e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_MP3 = 0x01000000UL, 166e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_AMR_NB = 0x02000000UL, 167e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_AMR_WB = 0x03000000UL, 168e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_AAC = 0x04000000UL, 169e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_HE_AAC_V1 = 0x05000000UL, 170e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_HE_AAC_V2 = 0x06000000UL, 171e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_VORBIS = 0x07000000UL, 17276edb1c0e644fe9f0b9f93939647a34123a60063Vignesh Venkatasubramanian AUDIO_FORMAT_OPUS = 0x08000000UL, 173e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_MAIN_MASK = 0xFF000000UL, 174e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_SUB_MASK = 0x00FFFFFFUL, 175e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 176e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin /* Aliases */ 1771c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten /* note != AudioFormat.ENCODING_PCM_16BIT */ 178e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_PCM_16_BIT = (AUDIO_FORMAT_PCM | 179e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_PCM_SUB_16_BIT), 1801c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten /* note != AudioFormat.ENCODING_PCM_8BIT */ 181e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_PCM_8_BIT = (AUDIO_FORMAT_PCM | 182e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_PCM_SUB_8_BIT), 1839714b27bb41d999cb61b22833d3f253552b3c82bEric Laurent AUDIO_FORMAT_PCM_32_BIT = (AUDIO_FORMAT_PCM | 1849714b27bb41d999cb61b22833d3f253552b3c82bEric Laurent AUDIO_FORMAT_PCM_SUB_32_BIT), 1859714b27bb41d999cb61b22833d3f253552b3c82bEric Laurent AUDIO_FORMAT_PCM_8_24_BIT = (AUDIO_FORMAT_PCM | 1869714b27bb41d999cb61b22833d3f253552b3c82bEric Laurent AUDIO_FORMAT_PCM_SUB_8_24_BIT), 1871c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten AUDIO_FORMAT_PCM_FLOAT = (AUDIO_FORMAT_PCM | 1881c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten AUDIO_FORMAT_PCM_SUB_FLOAT), 189c0a51093a2604b27f7d78f88eecaea15ac744f2eGlenn Kasten AUDIO_FORMAT_PCM_24_BIT_PACKED = (AUDIO_FORMAT_PCM | 190c0a51093a2604b27f7d78f88eecaea15ac744f2eGlenn Kasten AUDIO_FORMAT_PCM_SUB_24_BIT_PACKED), 191e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} audio_format_t; 192e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 19316a7a0443a59c636ab20a3161ec630d037766eccGlenn Kastenenum { 194e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin /* output channels */ 1956d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_FRONT_LEFT = 0x1, 1966d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_FRONT_RIGHT = 0x2, 1976d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_FRONT_CENTER = 0x4, 1986d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_LOW_FREQUENCY = 0x8, 1996d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_BACK_LEFT = 0x10, 2006d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_BACK_RIGHT = 0x20, 2016d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_FRONT_LEFT_OF_CENTER = 0x40, 2026d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_FRONT_RIGHT_OF_CENTER = 0x80, 2036d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_BACK_CENTER = 0x100, 2046d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_SIDE_LEFT = 0x200, 2056d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_SIDE_RIGHT = 0x400, 2066d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_CENTER = 0x800, 2076d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_FRONT_LEFT = 0x1000, 2086d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_FRONT_CENTER = 0x2000, 2096d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_FRONT_RIGHT = 0x4000, 2106d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_BACK_LEFT = 0x8000, 2116d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_BACK_CENTER = 0x10000, 2126d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_BACK_RIGHT = 0x20000, 213e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 214e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_MONO = AUDIO_CHANNEL_OUT_FRONT_LEFT, 215e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_STEREO = (AUDIO_CHANNEL_OUT_FRONT_LEFT | 216e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_FRONT_RIGHT), 217e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_QUAD = (AUDIO_CHANNEL_OUT_FRONT_LEFT | 218e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_FRONT_RIGHT | 219e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_BACK_LEFT | 220e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_BACK_RIGHT), 221b8d59396dfb3b9135bb6dc869aa723ca618bd95dGlenn Kasten AUDIO_CHANNEL_OUT_QUAD_BACK = AUDIO_CHANNEL_OUT_QUAD, 222ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten /* like AUDIO_CHANNEL_OUT_QUAD_BACK with *_SIDE_* instead of *_BACK_* */ 223ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten AUDIO_CHANNEL_OUT_QUAD_SIDE = (AUDIO_CHANNEL_OUT_FRONT_LEFT | 224ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten AUDIO_CHANNEL_OUT_FRONT_RIGHT | 225ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten AUDIO_CHANNEL_OUT_SIDE_LEFT | 226ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten AUDIO_CHANNEL_OUT_SIDE_RIGHT), 227e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_5POINT1 = (AUDIO_CHANNEL_OUT_FRONT_LEFT | 228e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_FRONT_RIGHT | 229e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_FRONT_CENTER | 230e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_LOW_FREQUENCY | 231e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_BACK_LEFT | 232e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_BACK_RIGHT), 233b8d59396dfb3b9135bb6dc869aa723ca618bd95dGlenn Kasten AUDIO_CHANNEL_OUT_5POINT1_BACK = AUDIO_CHANNEL_OUT_5POINT1, 234ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten /* like AUDIO_CHANNEL_OUT_5POINT1_BACK with *_SIDE_* instead of *_BACK_* */ 235ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten AUDIO_CHANNEL_OUT_5POINT1_SIDE = (AUDIO_CHANNEL_OUT_FRONT_LEFT | 236ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten AUDIO_CHANNEL_OUT_FRONT_RIGHT | 237ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten AUDIO_CHANNEL_OUT_FRONT_CENTER | 238ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten AUDIO_CHANNEL_OUT_LOW_FREQUENCY | 239ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten AUDIO_CHANNEL_OUT_SIDE_LEFT | 240ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten AUDIO_CHANNEL_OUT_SIDE_RIGHT), 24133fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi // matches the correct AudioFormat.CHANNEL_OUT_7POINT1_SURROUND definition for 7.1 242e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_7POINT1 = (AUDIO_CHANNEL_OUT_FRONT_LEFT | 243e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_FRONT_RIGHT | 244e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_FRONT_CENTER | 245e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_LOW_FREQUENCY | 246e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_BACK_LEFT | 247e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_BACK_RIGHT | 24833fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi AUDIO_CHANNEL_OUT_SIDE_LEFT | 24933fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi AUDIO_CHANNEL_OUT_SIDE_RIGHT), 250e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_ALL = (AUDIO_CHANNEL_OUT_FRONT_LEFT | 251e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_FRONT_RIGHT | 252e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_FRONT_CENTER | 253e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_LOW_FREQUENCY | 254e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_BACK_LEFT | 255e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_BACK_RIGHT | 256e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_FRONT_LEFT_OF_CENTER | 257e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_FRONT_RIGHT_OF_CENTER | 25833fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi AUDIO_CHANNEL_OUT_BACK_CENTER| 25933fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi AUDIO_CHANNEL_OUT_SIDE_LEFT| 26033fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi AUDIO_CHANNEL_OUT_SIDE_RIGHT| 26133fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_CENTER| 26233fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_FRONT_LEFT| 26333fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_FRONT_CENTER| 26433fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_FRONT_RIGHT| 26533fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_BACK_LEFT| 26633fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_BACK_CENTER| 26733fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_BACK_RIGHT), 268e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 269e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin /* input channels */ 270e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_LEFT = 0x4, 271e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_RIGHT = 0x8, 272e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_FRONT = 0x10, 273e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_BACK = 0x20, 274e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_LEFT_PROCESSED = 0x40, 275e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_RIGHT_PROCESSED = 0x80, 276e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_FRONT_PROCESSED = 0x100, 277e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_BACK_PROCESSED = 0x200, 278e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_PRESSURE = 0x400, 279e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_X_AXIS = 0x800, 280e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_Y_AXIS = 0x1000, 281e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_Z_AXIS = 0x2000, 282e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_VOICE_UPLINK = 0x4000, 283e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_VOICE_DNLINK = 0x8000, 284e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 285e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_MONO = AUDIO_CHANNEL_IN_FRONT, 286e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_STEREO = (AUDIO_CHANNEL_IN_LEFT | AUDIO_CHANNEL_IN_RIGHT), 2876c70ceeefe4cd2838b5788f6db8eb35751a5ce21Eric Laurent AUDIO_CHANNEL_IN_FRONT_BACK = (AUDIO_CHANNEL_IN_FRONT | AUDIO_CHANNEL_IN_BACK), 288e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_ALL = (AUDIO_CHANNEL_IN_LEFT | 289e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_RIGHT | 290e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_FRONT | 291e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_BACK| 292e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_LEFT_PROCESSED | 293e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_RIGHT_PROCESSED | 294e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_FRONT_PROCESSED | 295e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_BACK_PROCESSED| 296e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_PRESSURE | 297e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_X_AXIS | 298e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_Y_AXIS | 299e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_Z_AXIS | 300e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_VOICE_UPLINK | 301e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_VOICE_DNLINK), 3024ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi}; 3034ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi 304ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten/* A channel mask per se only defines the presence or absence of a channel, not the order. 305ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten * But see AUDIO_INTERLEAVE_* below for the platform convention of order. 306ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten */ 3074ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivitypedef uint32_t audio_channel_mask_t; 308e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 3091c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten/* Expresses the convention when stereo audio samples are stored interleaved 3101c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten * in an array. This should improve readability by allowing code to use 3111c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten * symbolic indices instead of hard-coded [0] and [1]. 312ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten * 313ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten * For multi-channel beyond stereo, the platform convention is that channels 314ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten * are interleaved in order from least significant channel mask bit 315ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten * to most significant channel mask bit, with unused bits skipped. 316ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten * Any exceptions to this convention will be noted at the appropriate API. 3171c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten */ 3181c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kastenenum { 3191c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten AUDIO_INTERLEAVE_LEFT = 0, 3201c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten AUDIO_INTERLEAVE_RIGHT = 1, 3211c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten}; 3221c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten 323e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavintypedef enum { 324e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_MODE_INVALID = -2, 325e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_MODE_CURRENT = -1, 326e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_MODE_NORMAL = 0, 327e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_MODE_RINGTONE = 1, 328e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_MODE_IN_CALL = 2, 329e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_MODE_IN_COMMUNICATION = 3, 330e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 331e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_MODE_CNT, 332e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_MODE_MAX = AUDIO_MODE_CNT - 1, 333e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} audio_mode_t; 334e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 3351c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten/* This enum is deprecated */ 336e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavintypedef enum { 3371c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten AUDIO_IN_ACOUSTICS_NONE = 0, 338e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_IN_ACOUSTICS_AGC_ENABLE = 0x0001, 339e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_IN_ACOUSTICS_AGC_DISABLE = 0, 340e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_IN_ACOUSTICS_NS_ENABLE = 0x0002, 341e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_IN_ACOUSTICS_NS_DISABLE = 0, 342e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_IN_ACOUSTICS_TX_IIR_ENABLE = 0x0004, 343e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_IN_ACOUSTICS_TX_DISABLE = 0, 344e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} audio_in_acoustics_t; 345e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 34616a7a0443a59c636ab20a3161ec630d037766eccGlenn Kastenenum { 347eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_NONE = 0x0, 348eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent /* reserved bits */ 349eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_BIT_IN = 0x80000000, 350eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_BIT_DEFAULT = 0x40000000, 351e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin /* output devices */ 352e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_EARPIECE = 0x1, 353e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_SPEAKER = 0x2, 354e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_WIRED_HEADSET = 0x4, 355e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_WIRED_HEADPHONE = 0x8, 356e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_SCO = 0x10, 357e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET = 0x20, 358e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT = 0x40, 359e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_A2DP = 0x80, 360e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES = 0x100, 361e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER = 0x200, 362e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_AUX_DIGITAL = 0x400, 363abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_OUT_HDMI = AUDIO_DEVICE_OUT_AUX_DIGITAL, 3641c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten /* uses an analog connection (multiplexed over the USB connector pins for instance) */ 365e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET = 0x800, 366e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET = 0x1000, 3671c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten /* USB accessory mode: your Android device is a USB device and the dock is a USB host */ 36879f90bdc7de561aa31888948c0661568ccc33da1Eric Laurent AUDIO_DEVICE_OUT_USB_ACCESSORY = 0x2000, 3691c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten /* USB host mode: your Android device is a USB host and the dock is a USB device */ 37079f90bdc7de561aa31888948c0661568ccc33da1Eric Laurent AUDIO_DEVICE_OUT_USB_DEVICE = 0x4000, 371eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_OUT_REMOTE_SUBMIX = 0x8000, 372abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent /* Telephony voice TX path */ 373abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_OUT_TELEPHONY_TX = 0x10000, 374abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent /* Analog jack with line impedance detected */ 375abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_OUT_LINE = 0x20000, 376abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent /* HDMI Audio Return Channel */ 377abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_OUT_HDMI_ARC = 0x40000, 378abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent /* S/PDIF out */ 379abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_OUT_SPDIF = 0x80000, 380abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent /* FM transmitter out */ 381abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_OUT_FM = 0x100000, 382eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_OUT_DEFAULT = AUDIO_DEVICE_BIT_DEFAULT, 383e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_ALL = (AUDIO_DEVICE_OUT_EARPIECE | 384e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_SPEAKER | 385e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_WIRED_HEADSET | 386e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_WIRED_HEADPHONE | 387e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_SCO | 388e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET | 389e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT | 390e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_A2DP | 391e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES | 392e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER | 393abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_OUT_HDMI | 394e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET | 395e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET | 39679f90bdc7de561aa31888948c0661568ccc33da1Eric Laurent AUDIO_DEVICE_OUT_USB_ACCESSORY | 39779f90bdc7de561aa31888948c0661568ccc33da1Eric Laurent AUDIO_DEVICE_OUT_USB_DEVICE | 398eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_OUT_REMOTE_SUBMIX | 399abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_OUT_TELEPHONY_TX | 400abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_OUT_LINE | 401abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_OUT_HDMI_ARC | 402abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_OUT_SPDIF | 403abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_OUT_FM | 404e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_DEFAULT), 405e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_ALL_A2DP = (AUDIO_DEVICE_OUT_BLUETOOTH_A2DP | 406e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES | 407e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER), 408e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_ALL_SCO = (AUDIO_DEVICE_OUT_BLUETOOTH_SCO | 409e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET | 410e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT), 41179f90bdc7de561aa31888948c0661568ccc33da1Eric Laurent AUDIO_DEVICE_OUT_ALL_USB = (AUDIO_DEVICE_OUT_USB_ACCESSORY | 41279f90bdc7de561aa31888948c0661568ccc33da1Eric Laurent AUDIO_DEVICE_OUT_USB_DEVICE), 413e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 414e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin /* input devices */ 415eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_COMMUNICATION = AUDIO_DEVICE_BIT_IN | 0x1, 416eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_AMBIENT = AUDIO_DEVICE_BIT_IN | 0x2, 417eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_BUILTIN_MIC = AUDIO_DEVICE_BIT_IN | 0x4, 418eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET = AUDIO_DEVICE_BIT_IN | 0x8, 419eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_WIRED_HEADSET = AUDIO_DEVICE_BIT_IN | 0x10, 420eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_AUX_DIGITAL = AUDIO_DEVICE_BIT_IN | 0x20, 421abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_IN_HDMI = AUDIO_DEVICE_IN_AUX_DIGITAL, 422abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent /* Telephony voice RX path */ 423eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_VOICE_CALL = AUDIO_DEVICE_BIT_IN | 0x40, 424abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_IN_TELEPHONY_RX = AUDIO_DEVICE_IN_VOICE_CALL, 425eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_BACK_MIC = AUDIO_DEVICE_BIT_IN | 0x80, 426eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_REMOTE_SUBMIX = AUDIO_DEVICE_BIT_IN | 0x100, 427eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_ANLG_DOCK_HEADSET = AUDIO_DEVICE_BIT_IN | 0x200, 428eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_DGTL_DOCK_HEADSET = AUDIO_DEVICE_BIT_IN | 0x400, 429eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_USB_ACCESSORY = AUDIO_DEVICE_BIT_IN | 0x800, 430eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_USB_DEVICE = AUDIO_DEVICE_BIT_IN | 0x1000, 431abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent /* FM tuner input */ 432abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_IN_FM_TUNER = AUDIO_DEVICE_BIT_IN | 0x2000, 433abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent /* TV tuner input */ 434abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_IN_TV_TUNER = AUDIO_DEVICE_BIT_IN | 0x4000, 435abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent /* Analog jack with line impedance detected */ 436abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_IN_LINE = AUDIO_DEVICE_BIT_IN | 0x8000, 437abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent /* S/PDIF in */ 438abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_IN_SPDIF = AUDIO_DEVICE_BIT_IN | 0x10000, 439eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_DEFAULT = AUDIO_DEVICE_BIT_IN | AUDIO_DEVICE_BIT_DEFAULT, 440e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 441e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_IN_ALL = (AUDIO_DEVICE_IN_COMMUNICATION | 442e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_IN_AMBIENT | 443e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_IN_BUILTIN_MIC | 444e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET | 445e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_IN_WIRED_HEADSET | 446abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_IN_HDMI | 447abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_IN_TELEPHONY_RX | 448e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_IN_BACK_MIC | 449eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_REMOTE_SUBMIX | 450eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_ANLG_DOCK_HEADSET | 451eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_DGTL_DOCK_HEADSET | 452eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_USB_ACCESSORY | 453eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_USB_DEVICE | 454abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_IN_FM_TUNER | 455abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_IN_TV_TUNER | 456abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_IN_LINE | 457abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_IN_SPDIF | 458e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_IN_DEFAULT), 459e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_IN_ALL_SCO = AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET, 46000b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLean AUDIO_DEVICE_IN_ALL_USB = (AUDIO_DEVICE_IN_USB_ACCESSORY | 46100b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLean AUDIO_DEVICE_IN_USB_DEVICE), 46216a7a0443a59c636ab20a3161ec630d037766eccGlenn Kasten}; 46316a7a0443a59c636ab20a3161ec630d037766eccGlenn Kasten 46416a7a0443a59c636ab20a3161ec630d037766eccGlenn Kastentypedef uint32_t audio_devices_t; 465e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 466545ab46063f083239b29e59b8b491656d93f2a38Eric Laurent/* the audio output flags serve two purposes: 467545ab46063f083239b29e59b8b491656d93f2a38Eric Laurent * - when an AudioTrack is created they indicate a "wish" to be connected to an 468545ab46063f083239b29e59b8b491656d93f2a38Eric Laurent * output stream with attributes corresponding to the specified flags 469545ab46063f083239b29e59b8b491656d93f2a38Eric Laurent * - when present in an output profile descriptor listed for a particular audio 470545ab46063f083239b29e59b8b491656d93f2a38Eric Laurent * hardware module, they indicate that an output stream can be opened that 471545ab46063f083239b29e59b8b491656d93f2a38Eric Laurent * supports the attributes indicated by the flags. 472545ab46063f083239b29e59b8b491656d93f2a38Eric Laurent * the audio policy manager will try to match the flags in the request 473545ab46063f083239b29e59b8b491656d93f2a38Eric Laurent * (when getOuput() is called) to an available output stream. 474545ab46063f083239b29e59b8b491656d93f2a38Eric Laurent */ 475545ab46063f083239b29e59b8b491656d93f2a38Eric Laurenttypedef enum { 4769aec362e76a60725df1a444214f222297caf46a2Eric Laurent AUDIO_OUTPUT_FLAG_NONE = 0x0, // no attributes 4779aec362e76a60725df1a444214f222297caf46a2Eric Laurent AUDIO_OUTPUT_FLAG_DIRECT = 0x1, // this output directly connects a track 4789aec362e76a60725df1a444214f222297caf46a2Eric Laurent // to one output stream: no software mixer 4799aec362e76a60725df1a444214f222297caf46a2Eric Laurent AUDIO_OUTPUT_FLAG_PRIMARY = 0x2, // this output is the primary output of 4809aec362e76a60725df1a444214f222297caf46a2Eric Laurent // the device. It is unique and must be 4819aec362e76a60725df1a444214f222297caf46a2Eric Laurent // present. It is opened by default and 4829aec362e76a60725df1a444214f222297caf46a2Eric Laurent // receives routing, audio mode and volume 4839aec362e76a60725df1a444214f222297caf46a2Eric Laurent // controls related to voice calls. 4849aec362e76a60725df1a444214f222297caf46a2Eric Laurent AUDIO_OUTPUT_FLAG_FAST = 0x4, // output supports "fast tracks", 4859aec362e76a60725df1a444214f222297caf46a2Eric Laurent // defined elsewhere 48605529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald AUDIO_OUTPUT_FLAG_DEEP_BUFFER = 0x8, // use deep audio buffers 48705529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD = 0x10, // offload playback of compressed 48805529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald // streams to hardware codec 48905529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald AUDIO_OUTPUT_FLAG_NON_BLOCKING = 0x20 // use non-blocking write 490545ab46063f083239b29e59b8b491656d93f2a38Eric Laurent} audio_output_flags_t; 491545ab46063f083239b29e59b8b491656d93f2a38Eric Laurent 492c051ffd7c24bbe989c9e39c793c6bbbac3ee3effGlenn Kasten/* The audio input flags are analogous to audio output flags. 493c051ffd7c24bbe989c9e39c793c6bbbac3ee3effGlenn Kasten * Currently they are used only when an AudioRecord is created, 494c051ffd7c24bbe989c9e39c793c6bbbac3ee3effGlenn Kasten * to indicate a preference to be connected to an input stream with 495c051ffd7c24bbe989c9e39c793c6bbbac3ee3effGlenn Kasten * attributes corresponding to the specified flags. 496c051ffd7c24bbe989c9e39c793c6bbbac3ee3effGlenn Kasten */ 497c051ffd7c24bbe989c9e39c793c6bbbac3ee3effGlenn Kastentypedef enum { 498c051ffd7c24bbe989c9e39c793c6bbbac3ee3effGlenn Kasten AUDIO_INPUT_FLAG_NONE = 0x0, // no attributes 499c051ffd7c24bbe989c9e39c793c6bbbac3ee3effGlenn Kasten AUDIO_INPUT_FLAG_FAST = 0x1, // prefer an input that supports "fast tracks" 500c051ffd7c24bbe989c9e39c793c6bbbac3ee3effGlenn Kasten} audio_input_flags_t; 501c051ffd7c24bbe989c9e39c793c6bbbac3ee3effGlenn Kasten 50205529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald/* Additional information about compressed streams offloaded to 50305529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald * hardware playback 50405529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald * The version and size fields must be initialized by the caller by using 50505529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald * one of the constants defined here. 50605529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald */ 50705529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgeraldtypedef struct { 50805529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald uint16_t version; // version of the info structure 50905529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald uint16_t size; // total size of the structure including version and size 51005529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald uint32_t sample_rate; // sample rate in Hz 51105529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald audio_channel_mask_t channel_mask; // channel mask 51205529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald audio_format_t format; // audio format 51305529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald audio_stream_type_t stream_type; // stream type 51405529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald uint32_t bit_rate; // bit rate in bits per second 51505529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald int64_t duration_us; // duration in microseconds, -1 if unknown 51605529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald bool has_video; // true if stream is tied to a video stream 51705529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald bool is_streaming; // true if streaming, false if local playback 51805529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald} audio_offload_info_t; 51905529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald 52005529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald#define AUDIO_MAKE_OFFLOAD_INFO_VERSION(maj,min) \ 52105529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald ((((maj) & 0xff) << 8) | ((min) & 0xff)) 52205529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald 52305529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald#define AUDIO_OFFLOAD_INFO_VERSION_0_1 AUDIO_MAKE_OFFLOAD_INFO_VERSION(0, 1) 52405529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald#define AUDIO_OFFLOAD_INFO_VERSION_CURRENT AUDIO_OFFLOAD_INFO_VERSION_0_1 52505529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald 52605529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgeraldstatic const audio_offload_info_t AUDIO_INFO_INITIALIZER = { 52705529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald version: AUDIO_OFFLOAD_INFO_VERSION_CURRENT, 52805529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald size: sizeof(audio_offload_info_t), 52905529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald}; 53005529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald 531e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavinstatic inline bool audio_is_output_device(audio_devices_t device) 532e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin{ 533eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent if (((device & AUDIO_DEVICE_BIT_IN) == 0) && 534eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent (popcount(device) == 1) && ((device & ~AUDIO_DEVICE_OUT_ALL) == 0)) 535e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin return true; 536e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin else 537e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin return false; 538e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} 539e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 540e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavinstatic inline bool audio_is_input_device(audio_devices_t device) 541e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin{ 542eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent if ((device & AUDIO_DEVICE_BIT_IN) != 0) { 543eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent device &= ~AUDIO_DEVICE_BIT_IN; 544eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent if ((popcount(device) == 1) && ((device & ~AUDIO_DEVICE_IN_ALL) == 0)) 545eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent return true; 546eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent } 547eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent return false; 548e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} 549e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 550eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurentstatic inline bool audio_is_output_devices(audio_devices_t device) 551eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent{ 552eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent return (device & AUDIO_DEVICE_BIT_IN) == 0; 553eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent} 554eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent 555eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent 556e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavinstatic inline bool audio_is_a2dp_device(audio_devices_t device) 557e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin{ 558e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin if ((popcount(device) == 1) && (device & AUDIO_DEVICE_OUT_ALL_A2DP)) 559e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin return true; 560e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin else 561e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin return false; 562e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} 563e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 564e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavinstatic inline bool audio_is_bluetooth_sco_device(audio_devices_t device) 565e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin{ 566b526630ab843f9a405be23618d5808d8e65755f3Eric Laurent if ((device & AUDIO_DEVICE_BIT_IN) == 0) { 567b526630ab843f9a405be23618d5808d8e65755f3Eric Laurent if ((popcount(device) == 1) && ((device & ~AUDIO_DEVICE_OUT_ALL_SCO) == 0)) 568b526630ab843f9a405be23618d5808d8e65755f3Eric Laurent return true; 569b526630ab843f9a405be23618d5808d8e65755f3Eric Laurent } else { 570b526630ab843f9a405be23618d5808d8e65755f3Eric Laurent device &= ~AUDIO_DEVICE_BIT_IN; 571b526630ab843f9a405be23618d5808d8e65755f3Eric Laurent if ((popcount(device) == 1) && ((device & ~AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET) == 0)) 572b526630ab843f9a405be23618d5808d8e65755f3Eric Laurent return true; 573b526630ab843f9a405be23618d5808d8e65755f3Eric Laurent } 574b526630ab843f9a405be23618d5808d8e65755f3Eric Laurent 575b526630ab843f9a405be23618d5808d8e65755f3Eric Laurent return false; 576e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} 577e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 57800b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLeanstatic inline bool audio_is_usb_out_device(audio_devices_t device) 57900b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLean{ 58000b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLean return ((popcount(device) == 1) && (device & AUDIO_DEVICE_OUT_ALL_USB)); 58100b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLean} 58200b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLean 58300b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLeanstatic inline bool audio_is_usb_in_device(audio_devices_t device) 58400b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLean{ 58500b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLean if ((device & AUDIO_DEVICE_BIT_IN) != 0) { 58600b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLean device &= ~AUDIO_DEVICE_BIT_IN; 58700b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLean if (popcount(device) == 1 && (device & AUDIO_DEVICE_IN_ALL_USB) != 0) 58800b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLean return true; 58900b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLean } 59000b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLean return false; 59100b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLean} 59200b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLean 59300b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLean/* OBSOLETE - use audio_is_usb_out_device() instead. */ 59479f90bdc7de561aa31888948c0661568ccc33da1Eric Laurentstatic inline bool audio_is_usb_device(audio_devices_t device) 59579f90bdc7de561aa31888948c0661568ccc33da1Eric Laurent{ 59600b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLean return audio_is_usb_out_device(device); 59779f90bdc7de561aa31888948c0661568ccc33da1Eric Laurent} 59879f90bdc7de561aa31888948c0661568ccc33da1Eric Laurent 599e11866a8799a2357b82c9217c8d6b726726f23feJean-Michel Trivistatic inline bool audio_is_remote_submix_device(audio_devices_t device) 600e11866a8799a2357b82c9217c8d6b726726f23feJean-Michel Trivi{ 6018ecc7afca42d0bb27aad25733790309f71f307d6Jeff Brown if ((device & AUDIO_DEVICE_OUT_REMOTE_SUBMIX) == AUDIO_DEVICE_OUT_REMOTE_SUBMIX 6028ecc7afca42d0bb27aad25733790309f71f307d6Jeff Brown || (device & AUDIO_DEVICE_IN_REMOTE_SUBMIX) == AUDIO_DEVICE_IN_REMOTE_SUBMIX) 603e11866a8799a2357b82c9217c8d6b726726f23feJean-Michel Trivi return true; 604e11866a8799a2357b82c9217c8d6b726726f23feJean-Michel Trivi else 605e11866a8799a2357b82c9217c8d6b726726f23feJean-Michel Trivi return false; 606e11866a8799a2357b82c9217c8d6b726726f23feJean-Michel Trivi} 607e11866a8799a2357b82c9217c8d6b726726f23feJean-Michel Trivi 608f7326dc0aa2da2df6bf1fa1ae7ef259a0ebdbd7bGlenn Kastenstatic inline bool audio_is_input_channel(audio_channel_mask_t channel) 609e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin{ 610e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin if ((channel & ~AUDIO_CHANNEL_IN_ALL) == 0) 611f7326dc0aa2da2df6bf1fa1ae7ef259a0ebdbd7bGlenn Kasten return channel != 0; 612e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin else 613e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin return false; 614e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} 615e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 616f7326dc0aa2da2df6bf1fa1ae7ef259a0ebdbd7bGlenn Kastenstatic inline bool audio_is_output_channel(audio_channel_mask_t channel) 617e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin{ 618e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin if ((channel & ~AUDIO_CHANNEL_OUT_ALL) == 0) 619f7326dc0aa2da2df6bf1fa1ae7ef259a0ebdbd7bGlenn Kasten return channel != 0; 620e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin else 621e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin return false; 622e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} 623e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 624a7e8f8615d357357712660d1ed3863c274c2c7bbAndy Hung/* Returns the number of channels from an input channel mask, 625a7e8f8615d357357712660d1ed3863c274c2c7bbAndy Hung * used in the context of audio input or recording. 626a7e8f8615d357357712660d1ed3863c274c2c7bbAndy Hung */ 627a7e8f8615d357357712660d1ed3863c274c2c7bbAndy Hungstatic inline uint32_t audio_channel_count_from_in_mask(audio_channel_mask_t channel) 628a7e8f8615d357357712660d1ed3863c274c2c7bbAndy Hung{ 629a7e8f8615d357357712660d1ed3863c274c2c7bbAndy Hung return popcount(channel & AUDIO_CHANNEL_IN_ALL); 630a7e8f8615d357357712660d1ed3863c274c2c7bbAndy Hung} 631a7e8f8615d357357712660d1ed3863c274c2c7bbAndy Hung 632a7e8f8615d357357712660d1ed3863c274c2c7bbAndy Hung/* Returns the number of channels from an output channel mask, 633a7e8f8615d357357712660d1ed3863c274c2c7bbAndy Hung * used in the context of audio output or playback. 634a7e8f8615d357357712660d1ed3863c274c2c7bbAndy Hung */ 635a7e8f8615d357357712660d1ed3863c274c2c7bbAndy Hungstatic inline uint32_t audio_channel_count_from_out_mask(audio_channel_mask_t channel) 636a7e8f8615d357357712660d1ed3863c274c2c7bbAndy Hung{ 637a7e8f8615d357357712660d1ed3863c274c2c7bbAndy Hung return popcount(channel & AUDIO_CHANNEL_OUT_ALL); 638a7e8f8615d357357712660d1ed3863c274c2c7bbAndy Hung} 639a7e8f8615d357357712660d1ed3863c274c2c7bbAndy Hung 64089f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten/* Derive an output channel mask from a channel count. 6414ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi * This is to be used when the content channel mask is unknown. The 1, 2, 4, 5, 6, 7 and 8 channel 6424ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi * cases are mapped to the standard game/home-theater layouts, but note that 4 is mapped to quad, 6434ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi * and not stereo + FC + mono surround. A channel count of 3 is arbitrarily mapped to stereo + FC 6444ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi * for continuity with stereo. 6454ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi * Returns the matching channel mask, or 0 if the number of channels exceeds that of the 6464ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi * configurations for which a default channel mask is defined. 6474ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi */ 64889f7ba3df8fc359023b494c2e625beed900bc706Glenn Kastenstatic inline audio_channel_mask_t audio_channel_out_mask_from_count(uint32_t channel_count) 6494ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi{ 6501c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten switch (channel_count) { 6514ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi case 1: 6524ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi return AUDIO_CHANNEL_OUT_MONO; 6534ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi case 2: 6544ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi return AUDIO_CHANNEL_OUT_STEREO; 6554ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi case 3: 6564ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi return (AUDIO_CHANNEL_OUT_STEREO | AUDIO_CHANNEL_OUT_FRONT_CENTER); 6574ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi case 4: // 4.0 6584ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi return AUDIO_CHANNEL_OUT_QUAD; 6594ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi case 5: // 5.0 6604ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi return (AUDIO_CHANNEL_OUT_QUAD | AUDIO_CHANNEL_OUT_FRONT_CENTER); 6614ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi case 6: // 5.1 6624ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi return AUDIO_CHANNEL_OUT_5POINT1; 6634ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi case 7: // 6.1 6644ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi return (AUDIO_CHANNEL_OUT_5POINT1 | AUDIO_CHANNEL_OUT_BACK_CENTER); 6654ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi case 8: 6664ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi return AUDIO_CHANNEL_OUT_7POINT1; 6674ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi default: 6684ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi return 0; 6694ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi } 6704ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi} 6714ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi 67289f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten/* Similar to above, but for input. Currently handles only mono and stereo. */ 67389f7ba3df8fc359023b494c2e625beed900bc706Glenn Kastenstatic inline audio_channel_mask_t audio_channel_in_mask_from_count(uint32_t channel_count) 67489f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten{ 67589f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten switch (channel_count) { 67689f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten case 1: 67789f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten return AUDIO_CHANNEL_IN_MONO; 67889f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten case 2: 67989f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten return AUDIO_CHANNEL_IN_STEREO; 68089f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten default: 68189f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten return 0; 68289f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten } 68389f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten} 68489f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten 685828bf0cdf4e869fa7bb007331670328c834f8277Glenn Kastenstatic inline bool audio_is_valid_format(audio_format_t format) 686e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin{ 687e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin switch (format & AUDIO_FORMAT_MAIN_MASK) { 688e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin case AUDIO_FORMAT_PCM: 68945b9581fc9884da4bf60203ece1563e29aac8c96Glenn Kasten switch (format) { 69045b9581fc9884da4bf60203ece1563e29aac8c96Glenn Kasten case AUDIO_FORMAT_PCM_16_BIT: 69145b9581fc9884da4bf60203ece1563e29aac8c96Glenn Kasten case AUDIO_FORMAT_PCM_8_BIT: 69245b9581fc9884da4bf60203ece1563e29aac8c96Glenn Kasten case AUDIO_FORMAT_PCM_32_BIT: 69345b9581fc9884da4bf60203ece1563e29aac8c96Glenn Kasten case AUDIO_FORMAT_PCM_8_24_BIT: 69445b9581fc9884da4bf60203ece1563e29aac8c96Glenn Kasten case AUDIO_FORMAT_PCM_FLOAT: 69545b9581fc9884da4bf60203ece1563e29aac8c96Glenn Kasten case AUDIO_FORMAT_PCM_24_BIT_PACKED: 69645b9581fc9884da4bf60203ece1563e29aac8c96Glenn Kasten return true; 69745b9581fc9884da4bf60203ece1563e29aac8c96Glenn Kasten default: 698da382248758eacd9f91d6f0a50dff3f021791c24Eric Laurent return false; 699da382248758eacd9f91d6f0a50dff3f021791c24Eric Laurent } 70045b9581fc9884da4bf60203ece1563e29aac8c96Glenn Kasten /* not reached */ 701e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin case AUDIO_FORMAT_MP3: 702e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin case AUDIO_FORMAT_AMR_NB: 703e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin case AUDIO_FORMAT_AMR_WB: 704e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin case AUDIO_FORMAT_AAC: 705e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin case AUDIO_FORMAT_HE_AAC_V1: 706e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin case AUDIO_FORMAT_HE_AAC_V2: 707e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin case AUDIO_FORMAT_VORBIS: 708e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin return true; 709e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin default: 710e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin return false; 711e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin } 712e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} 713e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 714828bf0cdf4e869fa7bb007331670328c834f8277Glenn Kastenstatic inline bool audio_is_linear_pcm(audio_format_t format) 715e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin{ 716da382248758eacd9f91d6f0a50dff3f021791c24Eric Laurent return ((format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_PCM); 717da382248758eacd9f91d6f0a50dff3f021791c24Eric Laurent} 718da382248758eacd9f91d6f0a50dff3f021791c24Eric Laurent 719828bf0cdf4e869fa7bb007331670328c834f8277Glenn Kastenstatic inline size_t audio_bytes_per_sample(audio_format_t format) 720da382248758eacd9f91d6f0a50dff3f021791c24Eric Laurent{ 721da382248758eacd9f91d6f0a50dff3f021791c24Eric Laurent size_t size = 0; 722da382248758eacd9f91d6f0a50dff3f021791c24Eric Laurent 723e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin switch (format) { 724427d2b43c23c48aedadca008482f495145411e2bJean-Michel Trivi case AUDIO_FORMAT_PCM_32_BIT: 725427d2b43c23c48aedadca008482f495145411e2bJean-Michel Trivi case AUDIO_FORMAT_PCM_8_24_BIT: 726427d2b43c23c48aedadca008482f495145411e2bJean-Michel Trivi size = sizeof(int32_t); 727427d2b43c23c48aedadca008482f495145411e2bJean-Michel Trivi break; 728173f4995b075e67abdb1874da9f6e83fd7324a5eAndy Hung case AUDIO_FORMAT_PCM_24_BIT_PACKED: 729173f4995b075e67abdb1874da9f6e83fd7324a5eAndy Hung size = sizeof(uint8_t) * 3; 730173f4995b075e67abdb1874da9f6e83fd7324a5eAndy Hung break; 731427d2b43c23c48aedadca008482f495145411e2bJean-Michel Trivi case AUDIO_FORMAT_PCM_16_BIT: 732427d2b43c23c48aedadca008482f495145411e2bJean-Michel Trivi size = sizeof(int16_t); 733427d2b43c23c48aedadca008482f495145411e2bJean-Michel Trivi break; 734427d2b43c23c48aedadca008482f495145411e2bJean-Michel Trivi case AUDIO_FORMAT_PCM_8_BIT: 735427d2b43c23c48aedadca008482f495145411e2bJean-Michel Trivi size = sizeof(uint8_t); 736427d2b43c23c48aedadca008482f495145411e2bJean-Michel Trivi break; 7371c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten case AUDIO_FORMAT_PCM_FLOAT: 7381c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten size = sizeof(float); 7391c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten break; 740427d2b43c23c48aedadca008482f495145411e2bJean-Michel Trivi default: 741427d2b43c23c48aedadca008482f495145411e2bJean-Michel Trivi break; 742e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin } 743da382248758eacd9f91d6f0a50dff3f021791c24Eric Laurent return size; 744e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} 745e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 746e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin__END_DECLS 747e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 748e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin#endif // ANDROID_AUDIO_CORE_H 749