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 37e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavintypedef int audio_io_handle_t; 38e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 39e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin/* Audio stream types */ 40e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavintypedef enum { 41e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_STREAM_DEFAULT = -1, 42e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_STREAM_VOICE_CALL = 0, 43e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_STREAM_SYSTEM = 1, 44e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_STREAM_RING = 2, 45e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_STREAM_MUSIC = 3, 46e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_STREAM_ALARM = 4, 47e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_STREAM_NOTIFICATION = 5, 48e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_STREAM_BLUETOOTH_SCO = 6, 49e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_STREAM_ENFORCED_AUDIBLE = 7, /* Sounds that cannot be muted by user and must be routed to speaker */ 50e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_STREAM_DTMF = 8, 51e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_STREAM_TTS = 9, 52e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 53e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_STREAM_CNT, 54e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_STREAM_MAX = AUDIO_STREAM_CNT - 1, 55e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} audio_stream_type_t; 56e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 57e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin/* Do not change these values without updating their counterparts 58e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * in media/java/android/media/MediaRecorder.java! 59e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin */ 60e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavintypedef enum { 61e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_SOURCE_DEFAULT = 0, 62e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_SOURCE_MIC = 1, 63e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_SOURCE_VOICE_UPLINK = 2, 64e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_SOURCE_VOICE_DOWNLINK = 3, 65e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_SOURCE_VOICE_CALL = 4, 66e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_SOURCE_CAMCORDER = 5, 67e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_SOURCE_VOICE_RECOGNITION = 6, 68e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_SOURCE_VOICE_COMMUNICATION = 7, 69e11866a8799a2357b82c9217c8d6b726726f23feJean-Michel Trivi AUDIO_SOURCE_REMOTE_SUBMIX = 8, /* Source for the mix to be presented remotely. */ 70e11866a8799a2357b82c9217c8d6b726726f23feJean-Michel Trivi /* An example of remote presentation is Wifi Display */ 71e11866a8799a2357b82c9217c8d6b726726f23feJean-Michel Trivi /* where a dongle attached to a TV can be used to */ 72e11866a8799a2357b82c9217c8d6b726726f23feJean-Michel Trivi /* play the mix captured by this audio source. */ 73e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_SOURCE_CNT, 74e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_SOURCE_MAX = AUDIO_SOURCE_CNT - 1, 7504c12ca061cd4ffe79a8eb5d570c4830a0950c85Eric Laurent AUDIO_SOURCE_HOTWORD = 1999, /* A low-priority, preemptible audio source for 7604c12ca061cd4ffe79a8eb5d570c4830a0950c85Eric Laurent for background software hotword detection. 7704c12ca061cd4ffe79a8eb5d570c4830a0950c85Eric Laurent Same tuning as AUDIO_SOURCE_VOICE_RECOGNITION. 7804c12ca061cd4ffe79a8eb5d570c4830a0950c85Eric Laurent Used only internally to the framework. Not exposed 7904c12ca061cd4ffe79a8eb5d570c4830a0950c85Eric Laurent at the audio HAL. */ 80e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} audio_source_t; 81e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 82e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin/* special audio session values 83e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * (XXX: should this be living in the audio effects land?) 84e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin */ 85e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavintypedef enum { 86e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin /* session for effects attached to a particular output stream 87e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * (value must be less than 0) 88e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin */ 89e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_SESSION_OUTPUT_STAGE = -1, 90e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 91e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin /* session for effects applied to output mix. These effects can 92e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * be moved by audio policy manager to another output stream 93e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * (value must be 0) 94e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin */ 95e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_SESSION_OUTPUT_MIX = 0, 96e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} audio_session_t; 97e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 98e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin/* Audio sub formats (see enum audio_format). */ 99e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 100e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin/* PCM sub formats */ 101e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavintypedef enum { 1029714b27bb41d999cb61b22833d3f253552b3c82bEric Laurent AUDIO_FORMAT_PCM_SUB_16_BIT = 0x1, /* DO NOT CHANGE - PCM signed 16 bits */ 1039714b27bb41d999cb61b22833d3f253552b3c82bEric Laurent AUDIO_FORMAT_PCM_SUB_8_BIT = 0x2, /* DO NOT CHANGE - PCM unsigned 8 bits */ 1049714b27bb41d999cb61b22833d3f253552b3c82bEric Laurent AUDIO_FORMAT_PCM_SUB_32_BIT = 0x3, /* PCM signed .31 fixed point */ 1059714b27bb41d999cb61b22833d3f253552b3c82bEric Laurent AUDIO_FORMAT_PCM_SUB_8_24_BIT = 0x4, /* PCM signed 7.24 fixed point */ 106e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} audio_format_pcm_sub_fmt_t; 107e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 108e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin/* MP3 sub format field definition : can use 11 LSBs in the same way as MP3 109e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * frame header to specify bit rate, stereo mode, version... 110e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin */ 111e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavintypedef enum { 112e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_MP3_SUB_NONE = 0x0, 113e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} audio_format_mp3_sub_fmt_t; 114e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 115e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin/* AMR NB/WB sub format field definition: specify frame block interleaving, 116e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * bandwidth efficient or octet aligned, encoding mode for recording... 117e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin */ 118e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavintypedef enum { 119e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_AMR_SUB_NONE = 0x0, 120e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} audio_format_amr_sub_fmt_t; 121e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 122e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin/* AAC sub format field definition: specify profile or bitrate for recording... */ 123e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavintypedef enum { 124e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_AAC_SUB_NONE = 0x0, 125e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} audio_format_aac_sub_fmt_t; 126e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 127e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin/* VORBIS sub format field definition: specify quality for recording... */ 128e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavintypedef enum { 129e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_VORBIS_SUB_NONE = 0x0, 130e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} audio_format_vorbis_sub_fmt_t; 131e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 132e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin/* Audio format consists in a main format field (upper 8 bits) and a sub format 133e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * field (lower 24 bits). 134e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * 135e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * The main format indicates the main codec type. The sub format field 136e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * indicates options and parameters for each format. The sub format is mainly 137e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * used for record to indicate for instance the requested bitrate or profile. 138e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * It can also be used for certain formats to give informations not present in 139e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * the encoded audio stream (e.g. octet alignement for AMR). 140e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin */ 141e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavintypedef enum { 142e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_INVALID = 0xFFFFFFFFUL, 143e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_DEFAULT = 0, 144e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_PCM = 0x00000000UL, /* DO NOT CHANGE */ 145e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_MP3 = 0x01000000UL, 146e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_AMR_NB = 0x02000000UL, 147e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_AMR_WB = 0x03000000UL, 148e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_AAC = 0x04000000UL, 149e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_HE_AAC_V1 = 0x05000000UL, 150e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_HE_AAC_V2 = 0x06000000UL, 151e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_VORBIS = 0x07000000UL, 152e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_MAIN_MASK = 0xFF000000UL, 153e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_SUB_MASK = 0x00FFFFFFUL, 154e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 155e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin /* Aliases */ 156e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_PCM_16_BIT = (AUDIO_FORMAT_PCM | 157e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_PCM_SUB_16_BIT), 158e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_PCM_8_BIT = (AUDIO_FORMAT_PCM | 159e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_PCM_SUB_8_BIT), 1609714b27bb41d999cb61b22833d3f253552b3c82bEric Laurent AUDIO_FORMAT_PCM_32_BIT = (AUDIO_FORMAT_PCM | 1619714b27bb41d999cb61b22833d3f253552b3c82bEric Laurent AUDIO_FORMAT_PCM_SUB_32_BIT), 1629714b27bb41d999cb61b22833d3f253552b3c82bEric Laurent AUDIO_FORMAT_PCM_8_24_BIT = (AUDIO_FORMAT_PCM | 1639714b27bb41d999cb61b22833d3f253552b3c82bEric Laurent AUDIO_FORMAT_PCM_SUB_8_24_BIT), 164e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} audio_format_t; 165e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 16616a7a0443a59c636ab20a3161ec630d037766eccGlenn Kastenenum { 167e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin /* output channels */ 1686d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_FRONT_LEFT = 0x1, 1696d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_FRONT_RIGHT = 0x2, 1706d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_FRONT_CENTER = 0x4, 1716d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_LOW_FREQUENCY = 0x8, 1726d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_BACK_LEFT = 0x10, 1736d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_BACK_RIGHT = 0x20, 1746d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_FRONT_LEFT_OF_CENTER = 0x40, 1756d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_FRONT_RIGHT_OF_CENTER = 0x80, 1766d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_BACK_CENTER = 0x100, 1776d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_SIDE_LEFT = 0x200, 1786d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_SIDE_RIGHT = 0x400, 1796d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_CENTER = 0x800, 1806d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_FRONT_LEFT = 0x1000, 1816d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_FRONT_CENTER = 0x2000, 1826d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_FRONT_RIGHT = 0x4000, 1836d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_BACK_LEFT = 0x8000, 1846d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_BACK_CENTER = 0x10000, 1856d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_BACK_RIGHT = 0x20000, 186e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 187e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_MONO = AUDIO_CHANNEL_OUT_FRONT_LEFT, 188e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_STEREO = (AUDIO_CHANNEL_OUT_FRONT_LEFT | 189e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_FRONT_RIGHT), 190e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_QUAD = (AUDIO_CHANNEL_OUT_FRONT_LEFT | 191e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_FRONT_RIGHT | 192e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_BACK_LEFT | 193e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_BACK_RIGHT), 194e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_SURROUND = (AUDIO_CHANNEL_OUT_FRONT_LEFT | 195e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_FRONT_RIGHT | 196e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_FRONT_CENTER | 197e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_BACK_CENTER), 198e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_5POINT1 = (AUDIO_CHANNEL_OUT_FRONT_LEFT | 199e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_FRONT_RIGHT | 200e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_FRONT_CENTER | 201e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_LOW_FREQUENCY | 202e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_BACK_LEFT | 203e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_BACK_RIGHT), 20433fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi // matches the correct AudioFormat.CHANNEL_OUT_7POINT1_SURROUND definition for 7.1 205e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_7POINT1 = (AUDIO_CHANNEL_OUT_FRONT_LEFT | 206e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_FRONT_RIGHT | 207e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_FRONT_CENTER | 208e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_LOW_FREQUENCY | 209e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_BACK_LEFT | 210e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_BACK_RIGHT | 21133fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi AUDIO_CHANNEL_OUT_SIDE_LEFT | 21233fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi AUDIO_CHANNEL_OUT_SIDE_RIGHT), 213e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_ALL = (AUDIO_CHANNEL_OUT_FRONT_LEFT | 214e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_FRONT_RIGHT | 215e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_FRONT_CENTER | 216e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_LOW_FREQUENCY | 217e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_BACK_LEFT | 218e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_BACK_RIGHT | 219e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_FRONT_LEFT_OF_CENTER | 220e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_FRONT_RIGHT_OF_CENTER | 22133fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi AUDIO_CHANNEL_OUT_BACK_CENTER| 22233fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi AUDIO_CHANNEL_OUT_SIDE_LEFT| 22333fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi AUDIO_CHANNEL_OUT_SIDE_RIGHT| 22433fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_CENTER| 22533fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_FRONT_LEFT| 22633fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_FRONT_CENTER| 22733fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_FRONT_RIGHT| 22833fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_BACK_LEFT| 22933fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_BACK_CENTER| 23033fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_BACK_RIGHT), 231e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 232e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin /* input channels */ 233e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_LEFT = 0x4, 234e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_RIGHT = 0x8, 235e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_FRONT = 0x10, 236e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_BACK = 0x20, 237e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_LEFT_PROCESSED = 0x40, 238e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_RIGHT_PROCESSED = 0x80, 239e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_FRONT_PROCESSED = 0x100, 240e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_BACK_PROCESSED = 0x200, 241e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_PRESSURE = 0x400, 242e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_X_AXIS = 0x800, 243e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_Y_AXIS = 0x1000, 244e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_Z_AXIS = 0x2000, 245e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_VOICE_UPLINK = 0x4000, 246e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_VOICE_DNLINK = 0x8000, 247e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 248e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_MONO = AUDIO_CHANNEL_IN_FRONT, 249e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_STEREO = (AUDIO_CHANNEL_IN_LEFT | AUDIO_CHANNEL_IN_RIGHT), 2506c70ceeefe4cd2838b5788f6db8eb35751a5ce21Eric Laurent AUDIO_CHANNEL_IN_FRONT_BACK = (AUDIO_CHANNEL_IN_FRONT | AUDIO_CHANNEL_IN_BACK), 251e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_ALL = (AUDIO_CHANNEL_IN_LEFT | 252e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_RIGHT | 253e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_FRONT | 254e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_BACK| 255e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_LEFT_PROCESSED | 256e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_RIGHT_PROCESSED | 257e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_FRONT_PROCESSED | 258e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_BACK_PROCESSED| 259e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_PRESSURE | 260e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_X_AXIS | 261e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_Y_AXIS | 262e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_Z_AXIS | 263e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_VOICE_UPLINK | 264e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_VOICE_DNLINK), 2654ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi}; 2664ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi 2674ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivitypedef uint32_t audio_channel_mask_t; 268e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 269e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavintypedef enum { 270e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_MODE_INVALID = -2, 271e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_MODE_CURRENT = -1, 272e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_MODE_NORMAL = 0, 273e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_MODE_RINGTONE = 1, 274e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_MODE_IN_CALL = 2, 275e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_MODE_IN_COMMUNICATION = 3, 276e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 277e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_MODE_CNT, 278e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_MODE_MAX = AUDIO_MODE_CNT - 1, 279e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} audio_mode_t; 280e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 281e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavintypedef enum { 282e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_IN_ACOUSTICS_AGC_ENABLE = 0x0001, 283e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_IN_ACOUSTICS_AGC_DISABLE = 0, 284e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_IN_ACOUSTICS_NS_ENABLE = 0x0002, 285e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_IN_ACOUSTICS_NS_DISABLE = 0, 286e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_IN_ACOUSTICS_TX_IIR_ENABLE = 0x0004, 287e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_IN_ACOUSTICS_TX_DISABLE = 0, 288e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} audio_in_acoustics_t; 289e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 29016a7a0443a59c636ab20a3161ec630d037766eccGlenn Kastenenum { 291eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_NONE = 0x0, 292eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent /* reserved bits */ 293eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_BIT_IN = 0x80000000, 294eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_BIT_DEFAULT = 0x40000000, 295e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin /* output devices */ 296e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_EARPIECE = 0x1, 297e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_SPEAKER = 0x2, 298e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_WIRED_HEADSET = 0x4, 299e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_WIRED_HEADPHONE = 0x8, 300e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_SCO = 0x10, 301e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET = 0x20, 302e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT = 0x40, 303e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_A2DP = 0x80, 304e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES = 0x100, 305e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER = 0x200, 306e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_AUX_DIGITAL = 0x400, 307e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET = 0x800, 308e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET = 0x1000, 30979f90bdc7de561aa31888948c0661568ccc33da1Eric Laurent AUDIO_DEVICE_OUT_USB_ACCESSORY = 0x2000, 31079f90bdc7de561aa31888948c0661568ccc33da1Eric Laurent AUDIO_DEVICE_OUT_USB_DEVICE = 0x4000, 311eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_OUT_REMOTE_SUBMIX = 0x8000, 312eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_OUT_DEFAULT = AUDIO_DEVICE_BIT_DEFAULT, 313e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_ALL = (AUDIO_DEVICE_OUT_EARPIECE | 314e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_SPEAKER | 315e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_WIRED_HEADSET | 316e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_WIRED_HEADPHONE | 317e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_SCO | 318e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET | 319e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT | 320e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_A2DP | 321e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES | 322e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER | 323e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_AUX_DIGITAL | 324e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET | 325e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET | 32679f90bdc7de561aa31888948c0661568ccc33da1Eric Laurent AUDIO_DEVICE_OUT_USB_ACCESSORY | 32779f90bdc7de561aa31888948c0661568ccc33da1Eric Laurent AUDIO_DEVICE_OUT_USB_DEVICE | 328eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_OUT_REMOTE_SUBMIX | 329e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_DEFAULT), 330e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_ALL_A2DP = (AUDIO_DEVICE_OUT_BLUETOOTH_A2DP | 331e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES | 332e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER), 333e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_ALL_SCO = (AUDIO_DEVICE_OUT_BLUETOOTH_SCO | 334e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET | 335e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT), 33679f90bdc7de561aa31888948c0661568ccc33da1Eric Laurent AUDIO_DEVICE_OUT_ALL_USB = (AUDIO_DEVICE_OUT_USB_ACCESSORY | 33779f90bdc7de561aa31888948c0661568ccc33da1Eric Laurent AUDIO_DEVICE_OUT_USB_DEVICE), 338e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 339e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin /* input devices */ 340eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_COMMUNICATION = AUDIO_DEVICE_BIT_IN | 0x1, 341eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_AMBIENT = AUDIO_DEVICE_BIT_IN | 0x2, 342eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_BUILTIN_MIC = AUDIO_DEVICE_BIT_IN | 0x4, 343eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET = AUDIO_DEVICE_BIT_IN | 0x8, 344eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_WIRED_HEADSET = AUDIO_DEVICE_BIT_IN | 0x10, 345eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_AUX_DIGITAL = AUDIO_DEVICE_BIT_IN | 0x20, 346eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_VOICE_CALL = AUDIO_DEVICE_BIT_IN | 0x40, 347eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_BACK_MIC = AUDIO_DEVICE_BIT_IN | 0x80, 348eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_REMOTE_SUBMIX = AUDIO_DEVICE_BIT_IN | 0x100, 349eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_ANLG_DOCK_HEADSET = AUDIO_DEVICE_BIT_IN | 0x200, 350eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_DGTL_DOCK_HEADSET = AUDIO_DEVICE_BIT_IN | 0x400, 351eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_USB_ACCESSORY = AUDIO_DEVICE_BIT_IN | 0x800, 352eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_USB_DEVICE = AUDIO_DEVICE_BIT_IN | 0x1000, 353eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_DEFAULT = AUDIO_DEVICE_BIT_IN | AUDIO_DEVICE_BIT_DEFAULT, 354e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 355e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_IN_ALL = (AUDIO_DEVICE_IN_COMMUNICATION | 356e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_IN_AMBIENT | 357e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_IN_BUILTIN_MIC | 358e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET | 359e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_IN_WIRED_HEADSET | 360e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_IN_AUX_DIGITAL | 361e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_IN_VOICE_CALL | 362e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_IN_BACK_MIC | 363eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_REMOTE_SUBMIX | 364eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_ANLG_DOCK_HEADSET | 365eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_DGTL_DOCK_HEADSET | 366eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_USB_ACCESSORY | 367eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_USB_DEVICE | 368e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_IN_DEFAULT), 369e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_IN_ALL_SCO = AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET, 37016a7a0443a59c636ab20a3161ec630d037766eccGlenn Kasten}; 37116a7a0443a59c636ab20a3161ec630d037766eccGlenn Kasten 37216a7a0443a59c636ab20a3161ec630d037766eccGlenn Kastentypedef uint32_t audio_devices_t; 373e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 374545ab46063f083239b29e59b8b491656d93f2a38Eric Laurent/* the audio output flags serve two purposes: 375545ab46063f083239b29e59b8b491656d93f2a38Eric Laurent * - when an AudioTrack is created they indicate a "wish" to be connected to an 376545ab46063f083239b29e59b8b491656d93f2a38Eric Laurent * output stream with attributes corresponding to the specified flags 377545ab46063f083239b29e59b8b491656d93f2a38Eric Laurent * - when present in an output profile descriptor listed for a particular audio 378545ab46063f083239b29e59b8b491656d93f2a38Eric Laurent * hardware module, they indicate that an output stream can be opened that 379545ab46063f083239b29e59b8b491656d93f2a38Eric Laurent * supports the attributes indicated by the flags. 380545ab46063f083239b29e59b8b491656d93f2a38Eric Laurent * the audio policy manager will try to match the flags in the request 381545ab46063f083239b29e59b8b491656d93f2a38Eric Laurent * (when getOuput() is called) to an available output stream. 382545ab46063f083239b29e59b8b491656d93f2a38Eric Laurent */ 383545ab46063f083239b29e59b8b491656d93f2a38Eric Laurenttypedef enum { 3849aec362e76a60725df1a444214f222297caf46a2Eric Laurent AUDIO_OUTPUT_FLAG_NONE = 0x0, // no attributes 3859aec362e76a60725df1a444214f222297caf46a2Eric Laurent AUDIO_OUTPUT_FLAG_DIRECT = 0x1, // this output directly connects a track 3869aec362e76a60725df1a444214f222297caf46a2Eric Laurent // to one output stream: no software mixer 3879aec362e76a60725df1a444214f222297caf46a2Eric Laurent AUDIO_OUTPUT_FLAG_PRIMARY = 0x2, // this output is the primary output of 3889aec362e76a60725df1a444214f222297caf46a2Eric Laurent // the device. It is unique and must be 3899aec362e76a60725df1a444214f222297caf46a2Eric Laurent // present. It is opened by default and 3909aec362e76a60725df1a444214f222297caf46a2Eric Laurent // receives routing, audio mode and volume 3919aec362e76a60725df1a444214f222297caf46a2Eric Laurent // controls related to voice calls. 3929aec362e76a60725df1a444214f222297caf46a2Eric Laurent AUDIO_OUTPUT_FLAG_FAST = 0x4, // output supports "fast tracks", 3939aec362e76a60725df1a444214f222297caf46a2Eric Laurent // defined elsewhere 39405529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald AUDIO_OUTPUT_FLAG_DEEP_BUFFER = 0x8, // use deep audio buffers 39505529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD = 0x10, // offload playback of compressed 39605529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald // streams to hardware codec 39705529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald AUDIO_OUTPUT_FLAG_NON_BLOCKING = 0x20 // use non-blocking write 398545ab46063f083239b29e59b8b491656d93f2a38Eric Laurent} audio_output_flags_t; 399545ab46063f083239b29e59b8b491656d93f2a38Eric Laurent 400c051ffd7c24bbe989c9e39c793c6bbbac3ee3effGlenn Kasten/* The audio input flags are analogous to audio output flags. 401c051ffd7c24bbe989c9e39c793c6bbbac3ee3effGlenn Kasten * Currently they are used only when an AudioRecord is created, 402c051ffd7c24bbe989c9e39c793c6bbbac3ee3effGlenn Kasten * to indicate a preference to be connected to an input stream with 403c051ffd7c24bbe989c9e39c793c6bbbac3ee3effGlenn Kasten * attributes corresponding to the specified flags. 404c051ffd7c24bbe989c9e39c793c6bbbac3ee3effGlenn Kasten */ 405c051ffd7c24bbe989c9e39c793c6bbbac3ee3effGlenn Kastentypedef enum { 406c051ffd7c24bbe989c9e39c793c6bbbac3ee3effGlenn Kasten AUDIO_INPUT_FLAG_NONE = 0x0, // no attributes 407c051ffd7c24bbe989c9e39c793c6bbbac3ee3effGlenn Kasten AUDIO_INPUT_FLAG_FAST = 0x1, // prefer an input that supports "fast tracks" 408c051ffd7c24bbe989c9e39c793c6bbbac3ee3effGlenn Kasten} audio_input_flags_t; 409c051ffd7c24bbe989c9e39c793c6bbbac3ee3effGlenn Kasten 41005529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald/* Additional information about compressed streams offloaded to 41105529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald * hardware playback 41205529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald * The version and size fields must be initialized by the caller by using 41305529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald * one of the constants defined here. 41405529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald */ 41505529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgeraldtypedef struct { 41605529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald uint16_t version; // version of the info structure 41705529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald uint16_t size; // total size of the structure including version and size 41805529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald uint32_t sample_rate; // sample rate in Hz 41905529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald audio_channel_mask_t channel_mask; // channel mask 42005529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald audio_format_t format; // audio format 42105529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald audio_stream_type_t stream_type; // stream type 42205529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald uint32_t bit_rate; // bit rate in bits per second 42305529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald int64_t duration_us; // duration in microseconds, -1 if unknown 42405529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald bool has_video; // true if stream is tied to a video stream 42505529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald bool is_streaming; // true if streaming, false if local playback 42605529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald} audio_offload_info_t; 42705529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald 42805529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald#define AUDIO_MAKE_OFFLOAD_INFO_VERSION(maj,min) \ 42905529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald ((((maj) & 0xff) << 8) | ((min) & 0xff)) 43005529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald 43105529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald#define AUDIO_OFFLOAD_INFO_VERSION_0_1 AUDIO_MAKE_OFFLOAD_INFO_VERSION(0, 1) 43205529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald#define AUDIO_OFFLOAD_INFO_VERSION_CURRENT AUDIO_OFFLOAD_INFO_VERSION_0_1 43305529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald 43405529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgeraldstatic const audio_offload_info_t AUDIO_INFO_INITIALIZER = { 43505529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald version: AUDIO_OFFLOAD_INFO_VERSION_CURRENT, 43605529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald size: sizeof(audio_offload_info_t), 43705529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald}; 43805529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald 439e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavinstatic inline bool audio_is_output_device(audio_devices_t device) 440e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin{ 441eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent if (((device & AUDIO_DEVICE_BIT_IN) == 0) && 442eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent (popcount(device) == 1) && ((device & ~AUDIO_DEVICE_OUT_ALL) == 0)) 443e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin return true; 444e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin else 445e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin return false; 446e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} 447e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 448e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavinstatic inline bool audio_is_input_device(audio_devices_t device) 449e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin{ 450eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent if ((device & AUDIO_DEVICE_BIT_IN) != 0) { 451eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent device &= ~AUDIO_DEVICE_BIT_IN; 452eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent if ((popcount(device) == 1) && ((device & ~AUDIO_DEVICE_IN_ALL) == 0)) 453eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent return true; 454eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent } 455eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent return false; 456e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} 457e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 458eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurentstatic inline bool audio_is_output_devices(audio_devices_t device) 459eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent{ 460eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent return (device & AUDIO_DEVICE_BIT_IN) == 0; 461eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent} 462eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent 463eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent 464e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavinstatic inline bool audio_is_a2dp_device(audio_devices_t device) 465e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin{ 466e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin if ((popcount(device) == 1) && (device & AUDIO_DEVICE_OUT_ALL_A2DP)) 467e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin return true; 468e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin else 469e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin return false; 470e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} 471e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 472e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavinstatic inline bool audio_is_bluetooth_sco_device(audio_devices_t device) 473e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin{ 474eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent device &= ~AUDIO_DEVICE_BIT_IN; 475e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin if ((popcount(device) == 1) && (device & (AUDIO_DEVICE_OUT_ALL_SCO | 476e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET))) 477e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin return true; 478e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin else 479e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin return false; 480e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} 481e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 48279f90bdc7de561aa31888948c0661568ccc33da1Eric Laurentstatic inline bool audio_is_usb_device(audio_devices_t device) 48379f90bdc7de561aa31888948c0661568ccc33da1Eric Laurent{ 48479f90bdc7de561aa31888948c0661568ccc33da1Eric Laurent if ((popcount(device) == 1) && (device & AUDIO_DEVICE_OUT_ALL_USB)) 48579f90bdc7de561aa31888948c0661568ccc33da1Eric Laurent return true; 48679f90bdc7de561aa31888948c0661568ccc33da1Eric Laurent else 48779f90bdc7de561aa31888948c0661568ccc33da1Eric Laurent return false; 48879f90bdc7de561aa31888948c0661568ccc33da1Eric Laurent} 48979f90bdc7de561aa31888948c0661568ccc33da1Eric Laurent 490e11866a8799a2357b82c9217c8d6b726726f23feJean-Michel Trivistatic inline bool audio_is_remote_submix_device(audio_devices_t device) 491e11866a8799a2357b82c9217c8d6b726726f23feJean-Michel Trivi{ 4928ecc7afca42d0bb27aad25733790309f71f307d6Jeff Brown if ((device & AUDIO_DEVICE_OUT_REMOTE_SUBMIX) == AUDIO_DEVICE_OUT_REMOTE_SUBMIX 4938ecc7afca42d0bb27aad25733790309f71f307d6Jeff Brown || (device & AUDIO_DEVICE_IN_REMOTE_SUBMIX) == AUDIO_DEVICE_IN_REMOTE_SUBMIX) 494e11866a8799a2357b82c9217c8d6b726726f23feJean-Michel Trivi return true; 495e11866a8799a2357b82c9217c8d6b726726f23feJean-Michel Trivi else 496e11866a8799a2357b82c9217c8d6b726726f23feJean-Michel Trivi return false; 497e11866a8799a2357b82c9217c8d6b726726f23feJean-Michel Trivi} 498e11866a8799a2357b82c9217c8d6b726726f23feJean-Michel Trivi 499f7326dc0aa2da2df6bf1fa1ae7ef259a0ebdbd7bGlenn Kastenstatic inline bool audio_is_input_channel(audio_channel_mask_t channel) 500e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin{ 501e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin if ((channel & ~AUDIO_CHANNEL_IN_ALL) == 0) 502f7326dc0aa2da2df6bf1fa1ae7ef259a0ebdbd7bGlenn Kasten return channel != 0; 503e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin else 504e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin return false; 505e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} 506e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 507f7326dc0aa2da2df6bf1fa1ae7ef259a0ebdbd7bGlenn Kastenstatic inline bool audio_is_output_channel(audio_channel_mask_t channel) 508e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin{ 509e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin if ((channel & ~AUDIO_CHANNEL_OUT_ALL) == 0) 510f7326dc0aa2da2df6bf1fa1ae7ef259a0ebdbd7bGlenn Kasten return channel != 0; 511e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin else 512e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin return false; 513e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} 514e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 51589f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten/* Derive an output channel mask from a channel count. 5164ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi * This is to be used when the content channel mask is unknown. The 1, 2, 4, 5, 6, 7 and 8 channel 5174ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi * cases are mapped to the standard game/home-theater layouts, but note that 4 is mapped to quad, 5184ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi * and not stereo + FC + mono surround. A channel count of 3 is arbitrarily mapped to stereo + FC 5194ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi * for continuity with stereo. 5204ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi * Returns the matching channel mask, or 0 if the number of channels exceeds that of the 5214ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi * configurations for which a default channel mask is defined. 5224ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi */ 52389f7ba3df8fc359023b494c2e625beed900bc706Glenn Kastenstatic inline audio_channel_mask_t audio_channel_out_mask_from_count(uint32_t channel_count) 5244ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi{ 5254ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi switch(channel_count) { 5264ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi case 1: 5274ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi return AUDIO_CHANNEL_OUT_MONO; 5284ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi case 2: 5294ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi return AUDIO_CHANNEL_OUT_STEREO; 5304ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi case 3: 5314ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi return (AUDIO_CHANNEL_OUT_STEREO | AUDIO_CHANNEL_OUT_FRONT_CENTER); 5324ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi case 4: // 4.0 5334ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi return AUDIO_CHANNEL_OUT_QUAD; 5344ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi case 5: // 5.0 5354ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi return (AUDIO_CHANNEL_OUT_QUAD | AUDIO_CHANNEL_OUT_FRONT_CENTER); 5364ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi case 6: // 5.1 5374ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi return AUDIO_CHANNEL_OUT_5POINT1; 5384ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi case 7: // 6.1 5394ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi return (AUDIO_CHANNEL_OUT_5POINT1 | AUDIO_CHANNEL_OUT_BACK_CENTER); 5404ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi case 8: 5414ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi return AUDIO_CHANNEL_OUT_7POINT1; 5424ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi default: 5434ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi return 0; 5444ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi } 5454ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi} 5464ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi 54789f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten/* Similar to above, but for input. Currently handles only mono and stereo. */ 54889f7ba3df8fc359023b494c2e625beed900bc706Glenn Kastenstatic inline audio_channel_mask_t audio_channel_in_mask_from_count(uint32_t channel_count) 54989f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten{ 55089f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten switch (channel_count) { 55189f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten case 1: 55289f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten return AUDIO_CHANNEL_IN_MONO; 55389f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten case 2: 55489f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten return AUDIO_CHANNEL_IN_STEREO; 55589f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten default: 55689f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten return 0; 55789f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten } 55889f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten} 55989f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten 560828bf0cdf4e869fa7bb007331670328c834f8277Glenn Kastenstatic inline bool audio_is_valid_format(audio_format_t format) 561e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin{ 562e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin switch (format & AUDIO_FORMAT_MAIN_MASK) { 563e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin case AUDIO_FORMAT_PCM: 564da382248758eacd9f91d6f0a50dff3f021791c24Eric Laurent if (format != AUDIO_FORMAT_PCM_16_BIT && 565da382248758eacd9f91d6f0a50dff3f021791c24Eric Laurent format != AUDIO_FORMAT_PCM_8_BIT) { 566da382248758eacd9f91d6f0a50dff3f021791c24Eric Laurent return false; 567da382248758eacd9f91d6f0a50dff3f021791c24Eric Laurent } 568e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin case AUDIO_FORMAT_MP3: 569e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin case AUDIO_FORMAT_AMR_NB: 570e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin case AUDIO_FORMAT_AMR_WB: 571e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin case AUDIO_FORMAT_AAC: 572e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin case AUDIO_FORMAT_HE_AAC_V1: 573e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin case AUDIO_FORMAT_HE_AAC_V2: 574e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin case AUDIO_FORMAT_VORBIS: 575e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin return true; 576e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin default: 577e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin return false; 578e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin } 579e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} 580e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 581828bf0cdf4e869fa7bb007331670328c834f8277Glenn Kastenstatic inline bool audio_is_linear_pcm(audio_format_t format) 582e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin{ 583da382248758eacd9f91d6f0a50dff3f021791c24Eric Laurent return ((format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_PCM); 584da382248758eacd9f91d6f0a50dff3f021791c24Eric Laurent} 585da382248758eacd9f91d6f0a50dff3f021791c24Eric Laurent 586828bf0cdf4e869fa7bb007331670328c834f8277Glenn Kastenstatic inline size_t audio_bytes_per_sample(audio_format_t format) 587da382248758eacd9f91d6f0a50dff3f021791c24Eric Laurent{ 588da382248758eacd9f91d6f0a50dff3f021791c24Eric Laurent size_t size = 0; 589da382248758eacd9f91d6f0a50dff3f021791c24Eric Laurent 590e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin switch (format) { 591427d2b43c23c48aedadca008482f495145411e2bJean-Michel Trivi case AUDIO_FORMAT_PCM_32_BIT: 592427d2b43c23c48aedadca008482f495145411e2bJean-Michel Trivi case AUDIO_FORMAT_PCM_8_24_BIT: 593427d2b43c23c48aedadca008482f495145411e2bJean-Michel Trivi size = sizeof(int32_t); 594427d2b43c23c48aedadca008482f495145411e2bJean-Michel Trivi break; 595427d2b43c23c48aedadca008482f495145411e2bJean-Michel Trivi case AUDIO_FORMAT_PCM_16_BIT: 596427d2b43c23c48aedadca008482f495145411e2bJean-Michel Trivi size = sizeof(int16_t); 597427d2b43c23c48aedadca008482f495145411e2bJean-Michel Trivi break; 598427d2b43c23c48aedadca008482f495145411e2bJean-Michel Trivi case AUDIO_FORMAT_PCM_8_BIT: 599427d2b43c23c48aedadca008482f495145411e2bJean-Michel Trivi size = sizeof(uint8_t); 600427d2b43c23c48aedadca008482f495145411e2bJean-Michel Trivi break; 601427d2b43c23c48aedadca008482f495145411e2bJean-Michel Trivi default: 602427d2b43c23c48aedadca008482f495145411e2bJean-Michel Trivi break; 603e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin } 604da382248758eacd9f91d6f0a50dff3f021791c24Eric Laurent return size; 605e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} 606e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 607e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin__END_DECLS 608e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 609e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin#endif // ANDROID_AUDIO_CORE_H 610