audio.h revision b63dd8a005ad3133915a949e6b31e81d51007688
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 640d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi * in frameworks/base/media/java/android/media/AudioAttributes.java 650d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi */ 660d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivitypedef enum { 670d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi AUDIO_CONTENT_TYPE_UNKNOWN = 0, 680d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi AUDIO_CONTENT_TYPE_SPEECH = 1, 690d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi AUDIO_CONTENT_TYPE_MUSIC = 2, 700d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi AUDIO_CONTENT_TYPE_MOVIE = 3, 710d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi AUDIO_CONTENT_TYPE_SONIFICATION = 4, 720d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi 730d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi AUDIO_CONTENT_TYPE_CNT, 740d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi AUDIO_CONTENT_TYPE_MAX = AUDIO_CONTENT_TYPE_CNT - 1, 750d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi} audio_content_type_t; 760d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi 770d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi/* Do not change these values without updating their counterparts 780d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi * in frameworks/base/media/java/android/media/AudioAttributes.java 790d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi */ 800d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivitypedef enum { 810d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi AUDIO_USAGE_UNKNOWN = 0, 820d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi AUDIO_USAGE_MEDIA = 1, 830d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi AUDIO_USAGE_VOICE_COMMUNICATION = 2, 840d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi AUDIO_USAGE_VOICE_COMMUNICATION_SIGNALLING = 3, 850d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi AUDIO_USAGE_ALARM = 4, 860d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi AUDIO_USAGE_NOTIFICATION = 5, 870d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi AUDIO_USAGE_NOTIFICATION_TELEPHONY_RINGTONE = 6, 880d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi AUDIO_USAGE_NOTIFICATION_COMMUNICATION_REQUEST = 7, 890d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi AUDIO_USAGE_NOTIFICATION_COMMUNICATION_INSTANT = 8, 900d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi AUDIO_USAGE_NOTIFICATION_COMMUNICATION_DELAYED = 9, 910d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi AUDIO_USAGE_NOTIFICATION_EVENT = 10, 920d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi AUDIO_USAGE_ASSISTANCE_ACCESSIBILITY = 11, 930d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi AUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE = 12, 940d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi AUDIO_USAGE_ASSISTANCE_SONIFICATION = 13, 950d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi AUDIO_USAGE_GAME = 14, 960d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi 970d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi AUDIO_USAGE_CNT, 980d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi AUDIO_USAGE_MAX = AUDIO_USAGE_CNT - 1, 990d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi} audio_usage_t; 1000d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi 1010d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivitypedef uint32_t audio_flags_mask_t; 1020d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi 1030d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi/* Do not change these values without updating their counterparts 1040d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi * in frameworks/base/media/java/android/media/AudioAttributes.java 1050d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi */ 1060d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivienum { 1070d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi AUDIO_FLAG_AUDIBILITY_ENFORCED = 0x1, 1080d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi AUDIO_FLAG_SECURE = 0x2, 1090d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi AUDIO_FLAG_SCO = 0x4, 1100d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi}; 1110d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi 1120d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi/* Do not change these values without updating their counterparts 1131c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten * in frameworks/base/media/java/android/media/MediaRecorder.java, 114c8183af4b3a3515f8f0cff27b2808a7139f18230Mike Lockwood * frameworks/av/services/audiopolicy/AudioPolicyService.cpp, 1151c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten * and system/media/audio_effects/include/audio_effects/audio_effects_conf.h! 116e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin */ 117e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavintypedef enum { 118e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_SOURCE_DEFAULT = 0, 119e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_SOURCE_MIC = 1, 120e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_SOURCE_VOICE_UPLINK = 2, 121e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_SOURCE_VOICE_DOWNLINK = 3, 122e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_SOURCE_VOICE_CALL = 4, 123e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_SOURCE_CAMCORDER = 5, 124e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_SOURCE_VOICE_RECOGNITION = 6, 125e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_SOURCE_VOICE_COMMUNICATION = 7, 126e11866a8799a2357b82c9217c8d6b726726f23feJean-Michel Trivi AUDIO_SOURCE_REMOTE_SUBMIX = 8, /* Source for the mix to be presented remotely. */ 127e11866a8799a2357b82c9217c8d6b726726f23feJean-Michel Trivi /* An example of remote presentation is Wifi Display */ 128e11866a8799a2357b82c9217c8d6b726726f23feJean-Michel Trivi /* where a dongle attached to a TV can be used to */ 129e11866a8799a2357b82c9217c8d6b726726f23feJean-Michel Trivi /* play the mix captured by this audio source. */ 130e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_SOURCE_CNT, 131e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_SOURCE_MAX = AUDIO_SOURCE_CNT - 1, 13204c12ca061cd4ffe79a8eb5d570c4830a0950c85Eric Laurent AUDIO_SOURCE_HOTWORD = 1999, /* A low-priority, preemptible audio source for 13304c12ca061cd4ffe79a8eb5d570c4830a0950c85Eric Laurent for background software hotword detection. 13404c12ca061cd4ffe79a8eb5d570c4830a0950c85Eric Laurent Same tuning as AUDIO_SOURCE_VOICE_RECOGNITION. 13504c12ca061cd4ffe79a8eb5d570c4830a0950c85Eric Laurent Used only internally to the framework. Not exposed 13604c12ca061cd4ffe79a8eb5d570c4830a0950c85Eric Laurent at the audio HAL. */ 137e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} audio_source_t; 138e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 1390d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi/* Audio attributes */ 1400d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi#define AUDIO_ATTRIBUTES_TAGS_MAX_SIZE 256 1410d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivitypedef struct { 1420d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi audio_content_type_t content_type; 1430d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi audio_usage_t usage; 1440d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi audio_source_t source; 1450d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi audio_flags_mask_t flags; 1460d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi char tags[AUDIO_ATTRIBUTES_TAGS_MAX_SIZE]; /* UTF8 */ 1470d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi} audio_attributes_t; 1480d580e83dd97b7f36869041cdc8f1af12dff8675Jean-Michel Trivi 149e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin/* special audio session values 150e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * (XXX: should this be living in the audio effects land?) 151e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin */ 152e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavintypedef enum { 153e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin /* session for effects attached to a particular output stream 154e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * (value must be less than 0) 155e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin */ 156e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_SESSION_OUTPUT_STAGE = -1, 157e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 158e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin /* session for effects applied to output mix. These effects can 159e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * be moved by audio policy manager to another output stream 160e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * (value must be 0) 161e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin */ 162e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_SESSION_OUTPUT_MIX = 0, 163b4f2b4eac4b9ae3d8c7804c5902343c4235f81adGlenn Kasten 164b4f2b4eac4b9ae3d8c7804c5902343c4235f81adGlenn Kasten /* application does not specify an explicit session ID to be used, 165b4f2b4eac4b9ae3d8c7804c5902343c4235f81adGlenn Kasten * and requests a new session ID to be allocated 166b4f2b4eac4b9ae3d8c7804c5902343c4235f81adGlenn Kasten * TODO use unique values for AUDIO_SESSION_OUTPUT_MIX and AUDIO_SESSION_ALLOCATE, 167b4f2b4eac4b9ae3d8c7804c5902343c4235f81adGlenn Kasten * after all uses have been updated from 0 to the appropriate symbol, and have been tested. 168b4f2b4eac4b9ae3d8c7804c5902343c4235f81adGlenn Kasten */ 169b4f2b4eac4b9ae3d8c7804c5902343c4235f81adGlenn Kasten AUDIO_SESSION_ALLOCATE = 0, 170e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} audio_session_t; 171e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 172e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin/* Audio sub formats (see enum audio_format). */ 173e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 174e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin/* PCM sub formats */ 175e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavintypedef enum { 176c0a51093a2604b27f7d78f88eecaea15ac744f2eGlenn Kasten /* All of these are in native byte order */ 1779714b27bb41d999cb61b22833d3f253552b3c82bEric Laurent AUDIO_FORMAT_PCM_SUB_16_BIT = 0x1, /* DO NOT CHANGE - PCM signed 16 bits */ 1789714b27bb41d999cb61b22833d3f253552b3c82bEric Laurent AUDIO_FORMAT_PCM_SUB_8_BIT = 0x2, /* DO NOT CHANGE - PCM unsigned 8 bits */ 1799714b27bb41d999cb61b22833d3f253552b3c82bEric Laurent AUDIO_FORMAT_PCM_SUB_32_BIT = 0x3, /* PCM signed .31 fixed point */ 1809714b27bb41d999cb61b22833d3f253552b3c82bEric Laurent AUDIO_FORMAT_PCM_SUB_8_24_BIT = 0x4, /* PCM signed 7.24 fixed point */ 1811c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten AUDIO_FORMAT_PCM_SUB_FLOAT = 0x5, /* PCM single-precision floating point */ 182c0a51093a2604b27f7d78f88eecaea15ac744f2eGlenn Kasten AUDIO_FORMAT_PCM_SUB_24_BIT_PACKED = 0x6, /* PCM signed .23 fixed point packed in 3 bytes */ 183e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} audio_format_pcm_sub_fmt_t; 184e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 1851c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten/* The audio_format_*_sub_fmt_t declarations are not currently used */ 1861c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten 187e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin/* MP3 sub format field definition : can use 11 LSBs in the same way as MP3 188e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * frame header to specify bit rate, stereo mode, version... 189e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin */ 190e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavintypedef enum { 191e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_MP3_SUB_NONE = 0x0, 192e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} audio_format_mp3_sub_fmt_t; 193e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 194e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin/* AMR NB/WB sub format field definition: specify frame block interleaving, 195e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * bandwidth efficient or octet aligned, encoding mode for recording... 196e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin */ 197e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavintypedef enum { 198e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_AMR_SUB_NONE = 0x0, 199e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} audio_format_amr_sub_fmt_t; 200e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 201e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin/* AAC sub format field definition: specify profile or bitrate for recording... */ 202e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavintypedef enum { 203e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_AAC_SUB_NONE = 0x0, 204e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} audio_format_aac_sub_fmt_t; 205e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 206e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin/* VORBIS sub format field definition: specify quality for recording... */ 207e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavintypedef enum { 208e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_VORBIS_SUB_NONE = 0x0, 209e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} audio_format_vorbis_sub_fmt_t; 210e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 2111c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten/* Audio format consists of a main format field (upper 8 bits) and a sub format 212e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * field (lower 24 bits). 213e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * 214e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * The main format indicates the main codec type. The sub format field 215e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * indicates options and parameters for each format. The sub format is mainly 216e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * used for record to indicate for instance the requested bitrate or profile. 217e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * It can also be used for certain formats to give informations not present in 218e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin * the encoded audio stream (e.g. octet alignement for AMR). 219e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin */ 220e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavintypedef enum { 221e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_INVALID = 0xFFFFFFFFUL, 222e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_DEFAULT = 0, 223e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_PCM = 0x00000000UL, /* DO NOT CHANGE */ 224e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_MP3 = 0x01000000UL, 225e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_AMR_NB = 0x02000000UL, 226e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_AMR_WB = 0x03000000UL, 227e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_AAC = 0x04000000UL, 228e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_HE_AAC_V1 = 0x05000000UL, 229e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_HE_AAC_V2 = 0x06000000UL, 230e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_VORBIS = 0x07000000UL, 23176edb1c0e644fe9f0b9f93939647a34123a60063Vignesh Venkatasubramanian AUDIO_FORMAT_OPUS = 0x08000000UL, 232ce30de3553ecaaa0a85eec8a788e808630d766b4Eric Laurent AUDIO_FORMAT_AC3 = 0x09000000UL, 233ce30de3553ecaaa0a85eec8a788e808630d766b4Eric Laurent AUDIO_FORMAT_E_AC3 = 0x0A000000UL, 234e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_MAIN_MASK = 0xFF000000UL, 235e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_SUB_MASK = 0x00FFFFFFUL, 236e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 237e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin /* Aliases */ 2381c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten /* note != AudioFormat.ENCODING_PCM_16BIT */ 239e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_PCM_16_BIT = (AUDIO_FORMAT_PCM | 240e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_PCM_SUB_16_BIT), 2411c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten /* note != AudioFormat.ENCODING_PCM_8BIT */ 242e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_PCM_8_BIT = (AUDIO_FORMAT_PCM | 243e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_FORMAT_PCM_SUB_8_BIT), 2449714b27bb41d999cb61b22833d3f253552b3c82bEric Laurent AUDIO_FORMAT_PCM_32_BIT = (AUDIO_FORMAT_PCM | 2459714b27bb41d999cb61b22833d3f253552b3c82bEric Laurent AUDIO_FORMAT_PCM_SUB_32_BIT), 2469714b27bb41d999cb61b22833d3f253552b3c82bEric Laurent AUDIO_FORMAT_PCM_8_24_BIT = (AUDIO_FORMAT_PCM | 2479714b27bb41d999cb61b22833d3f253552b3c82bEric Laurent AUDIO_FORMAT_PCM_SUB_8_24_BIT), 2481c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten AUDIO_FORMAT_PCM_FLOAT = (AUDIO_FORMAT_PCM | 2491c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten AUDIO_FORMAT_PCM_SUB_FLOAT), 250c0a51093a2604b27f7d78f88eecaea15ac744f2eGlenn Kasten AUDIO_FORMAT_PCM_24_BIT_PACKED = (AUDIO_FORMAT_PCM | 251c0a51093a2604b27f7d78f88eecaea15ac744f2eGlenn Kasten AUDIO_FORMAT_PCM_SUB_24_BIT_PACKED), 252e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} audio_format_t; 253e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 25416a7a0443a59c636ab20a3161ec630d037766eccGlenn Kastenenum { 2554cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent AUDIO_CHANNEL_NONE = 0x0, 256e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin /* output channels */ 2576d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_FRONT_LEFT = 0x1, 2586d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_FRONT_RIGHT = 0x2, 2596d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_FRONT_CENTER = 0x4, 2606d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_LOW_FREQUENCY = 0x8, 2616d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_BACK_LEFT = 0x10, 2626d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_BACK_RIGHT = 0x20, 2636d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_FRONT_LEFT_OF_CENTER = 0x40, 2646d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_FRONT_RIGHT_OF_CENTER = 0x80, 2656d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_BACK_CENTER = 0x100, 2666d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_SIDE_LEFT = 0x200, 2676d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_SIDE_RIGHT = 0x400, 2686d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_CENTER = 0x800, 2696d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_FRONT_LEFT = 0x1000, 2706d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_FRONT_CENTER = 0x2000, 2716d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_FRONT_RIGHT = 0x4000, 2726d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_BACK_LEFT = 0x8000, 2736d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_BACK_CENTER = 0x10000, 2746d4f39754bff9c1dcb8023839ea583b6d0723b14Jean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_BACK_RIGHT = 0x20000, 275e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 276e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_MONO = AUDIO_CHANNEL_OUT_FRONT_LEFT, 277e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_STEREO = (AUDIO_CHANNEL_OUT_FRONT_LEFT | 278e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_FRONT_RIGHT), 279e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_QUAD = (AUDIO_CHANNEL_OUT_FRONT_LEFT | 280e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_FRONT_RIGHT | 281e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_BACK_LEFT | 282e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_BACK_RIGHT), 283b8d59396dfb3b9135bb6dc869aa723ca618bd95dGlenn Kasten AUDIO_CHANNEL_OUT_QUAD_BACK = AUDIO_CHANNEL_OUT_QUAD, 284ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten /* like AUDIO_CHANNEL_OUT_QUAD_BACK with *_SIDE_* instead of *_BACK_* */ 285ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten AUDIO_CHANNEL_OUT_QUAD_SIDE = (AUDIO_CHANNEL_OUT_FRONT_LEFT | 286ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten AUDIO_CHANNEL_OUT_FRONT_RIGHT | 287ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten AUDIO_CHANNEL_OUT_SIDE_LEFT | 288ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten AUDIO_CHANNEL_OUT_SIDE_RIGHT), 289e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_5POINT1 = (AUDIO_CHANNEL_OUT_FRONT_LEFT | 290e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_FRONT_RIGHT | 291e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_FRONT_CENTER | 292e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_LOW_FREQUENCY | 293e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_BACK_LEFT | 294e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_BACK_RIGHT), 295b8d59396dfb3b9135bb6dc869aa723ca618bd95dGlenn Kasten AUDIO_CHANNEL_OUT_5POINT1_BACK = AUDIO_CHANNEL_OUT_5POINT1, 296ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten /* like AUDIO_CHANNEL_OUT_5POINT1_BACK with *_SIDE_* instead of *_BACK_* */ 297ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten AUDIO_CHANNEL_OUT_5POINT1_SIDE = (AUDIO_CHANNEL_OUT_FRONT_LEFT | 298ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten AUDIO_CHANNEL_OUT_FRONT_RIGHT | 299ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten AUDIO_CHANNEL_OUT_FRONT_CENTER | 300ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten AUDIO_CHANNEL_OUT_LOW_FREQUENCY | 301ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten AUDIO_CHANNEL_OUT_SIDE_LEFT | 302ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten AUDIO_CHANNEL_OUT_SIDE_RIGHT), 30333fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi // matches the correct AudioFormat.CHANNEL_OUT_7POINT1_SURROUND definition for 7.1 304e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_7POINT1 = (AUDIO_CHANNEL_OUT_FRONT_LEFT | 305e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_FRONT_RIGHT | 306e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_FRONT_CENTER | 307e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_LOW_FREQUENCY | 308e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_BACK_LEFT | 309e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_BACK_RIGHT | 31033fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi AUDIO_CHANNEL_OUT_SIDE_LEFT | 31133fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi AUDIO_CHANNEL_OUT_SIDE_RIGHT), 312e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_ALL = (AUDIO_CHANNEL_OUT_FRONT_LEFT | 313e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_FRONT_RIGHT | 314e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_FRONT_CENTER | 315e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_LOW_FREQUENCY | 316e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_BACK_LEFT | 317e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_BACK_RIGHT | 318e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_FRONT_LEFT_OF_CENTER | 319e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_OUT_FRONT_RIGHT_OF_CENTER | 32033fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi AUDIO_CHANNEL_OUT_BACK_CENTER| 32133fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi AUDIO_CHANNEL_OUT_SIDE_LEFT| 32233fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi AUDIO_CHANNEL_OUT_SIDE_RIGHT| 32333fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_CENTER| 32433fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_FRONT_LEFT| 32533fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_FRONT_CENTER| 32633fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_FRONT_RIGHT| 32733fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_BACK_LEFT| 32833fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_BACK_CENTER| 32933fad99acfaffb775ce0792b06ba97bb6cacce1aJean-Michel Trivi AUDIO_CHANNEL_OUT_TOP_BACK_RIGHT), 330e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 331e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin /* input channels */ 332e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_LEFT = 0x4, 333e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_RIGHT = 0x8, 334e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_FRONT = 0x10, 335e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_BACK = 0x20, 336e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_LEFT_PROCESSED = 0x40, 337e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_RIGHT_PROCESSED = 0x80, 338e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_FRONT_PROCESSED = 0x100, 339e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_BACK_PROCESSED = 0x200, 340e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_PRESSURE = 0x400, 341e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_X_AXIS = 0x800, 342e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_Y_AXIS = 0x1000, 343e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_Z_AXIS = 0x2000, 344e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_VOICE_UPLINK = 0x4000, 345e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_VOICE_DNLINK = 0x8000, 346e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 347e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_MONO = AUDIO_CHANNEL_IN_FRONT, 348e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_STEREO = (AUDIO_CHANNEL_IN_LEFT | AUDIO_CHANNEL_IN_RIGHT), 3496c70ceeefe4cd2838b5788f6db8eb35751a5ce21Eric Laurent AUDIO_CHANNEL_IN_FRONT_BACK = (AUDIO_CHANNEL_IN_FRONT | AUDIO_CHANNEL_IN_BACK), 350e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_ALL = (AUDIO_CHANNEL_IN_LEFT | 351e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_RIGHT | 352e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_FRONT | 353e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_BACK| 354e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_LEFT_PROCESSED | 355e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_RIGHT_PROCESSED | 356e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_FRONT_PROCESSED | 357e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_BACK_PROCESSED| 358e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_PRESSURE | 359e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_X_AXIS | 360e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_Y_AXIS | 361e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_Z_AXIS | 362e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_VOICE_UPLINK | 363e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_CHANNEL_IN_VOICE_DNLINK), 3644ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi}; 3654ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi 366ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten/* A channel mask per se only defines the presence or absence of a channel, not the order. 367ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten * But see AUDIO_INTERLEAVE_* below for the platform convention of order. 368ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten */ 3694ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivitypedef uint32_t audio_channel_mask_t; 370e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 3711c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten/* Expresses the convention when stereo audio samples are stored interleaved 3721c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten * in an array. This should improve readability by allowing code to use 3731c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten * symbolic indices instead of hard-coded [0] and [1]. 374ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten * 375ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten * For multi-channel beyond stereo, the platform convention is that channels 376ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten * are interleaved in order from least significant channel mask bit 377ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten * to most significant channel mask bit, with unused bits skipped. 378ee7c17b7fc816393afcc7e8dbe751c55a512495bGlenn Kasten * Any exceptions to this convention will be noted at the appropriate API. 3791c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten */ 3801c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kastenenum { 3811c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten AUDIO_INTERLEAVE_LEFT = 0, 3821c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten AUDIO_INTERLEAVE_RIGHT = 1, 3831c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten}; 3841c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten 385e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavintypedef enum { 386e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_MODE_INVALID = -2, 387e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_MODE_CURRENT = -1, 388e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_MODE_NORMAL = 0, 389e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_MODE_RINGTONE = 1, 390e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_MODE_IN_CALL = 2, 391e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_MODE_IN_COMMUNICATION = 3, 392e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 393e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_MODE_CNT, 394e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_MODE_MAX = AUDIO_MODE_CNT - 1, 395e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} audio_mode_t; 396e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 3971c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten/* This enum is deprecated */ 398e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavintypedef enum { 3991c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten AUDIO_IN_ACOUSTICS_NONE = 0, 400e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_IN_ACOUSTICS_AGC_ENABLE = 0x0001, 401e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_IN_ACOUSTICS_AGC_DISABLE = 0, 402e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_IN_ACOUSTICS_NS_ENABLE = 0x0002, 403e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_IN_ACOUSTICS_NS_DISABLE = 0, 404e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_IN_ACOUSTICS_TX_IIR_ENABLE = 0x0004, 405e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_IN_ACOUSTICS_TX_DISABLE = 0, 406e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} audio_in_acoustics_t; 407e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 40816a7a0443a59c636ab20a3161ec630d037766eccGlenn Kastenenum { 409eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_NONE = 0x0, 410eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent /* reserved bits */ 411eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_BIT_IN = 0x80000000, 412eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_BIT_DEFAULT = 0x40000000, 413e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin /* output devices */ 414e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_EARPIECE = 0x1, 415e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_SPEAKER = 0x2, 416e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_WIRED_HEADSET = 0x4, 417e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_WIRED_HEADPHONE = 0x8, 418e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_SCO = 0x10, 419e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET = 0x20, 420e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT = 0x40, 421e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_A2DP = 0x80, 422e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES = 0x100, 423e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER = 0x200, 424e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_AUX_DIGITAL = 0x400, 425abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_OUT_HDMI = AUDIO_DEVICE_OUT_AUX_DIGITAL, 4261c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten /* uses an analog connection (multiplexed over the USB connector pins for instance) */ 427e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET = 0x800, 428e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET = 0x1000, 4291c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten /* USB accessory mode: your Android device is a USB device and the dock is a USB host */ 43079f90bdc7de561aa31888948c0661568ccc33da1Eric Laurent AUDIO_DEVICE_OUT_USB_ACCESSORY = 0x2000, 4311c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten /* USB host mode: your Android device is a USB host and the dock is a USB device */ 43279f90bdc7de561aa31888948c0661568ccc33da1Eric Laurent AUDIO_DEVICE_OUT_USB_DEVICE = 0x4000, 433eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_OUT_REMOTE_SUBMIX = 0x8000, 434abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent /* Telephony voice TX path */ 435abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_OUT_TELEPHONY_TX = 0x10000, 436abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent /* Analog jack with line impedance detected */ 437abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_OUT_LINE = 0x20000, 438abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent /* HDMI Audio Return Channel */ 439abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_OUT_HDMI_ARC = 0x40000, 440abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent /* S/PDIF out */ 441abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_OUT_SPDIF = 0x80000, 442abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent /* FM transmitter out */ 443abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_OUT_FM = 0x100000, 444eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_OUT_DEFAULT = AUDIO_DEVICE_BIT_DEFAULT, 445e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_ALL = (AUDIO_DEVICE_OUT_EARPIECE | 446e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_SPEAKER | 447e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_WIRED_HEADSET | 448e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_WIRED_HEADPHONE | 449e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_SCO | 450e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET | 451e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT | 452e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_A2DP | 453e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES | 454e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER | 455abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_OUT_HDMI | 456e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET | 457e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET | 45879f90bdc7de561aa31888948c0661568ccc33da1Eric Laurent AUDIO_DEVICE_OUT_USB_ACCESSORY | 45979f90bdc7de561aa31888948c0661568ccc33da1Eric Laurent AUDIO_DEVICE_OUT_USB_DEVICE | 460eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_OUT_REMOTE_SUBMIX | 461abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_OUT_TELEPHONY_TX | 462abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_OUT_LINE | 463abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_OUT_HDMI_ARC | 464abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_OUT_SPDIF | 465abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_OUT_FM | 466e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_DEFAULT), 467e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_ALL_A2DP = (AUDIO_DEVICE_OUT_BLUETOOTH_A2DP | 468e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES | 469e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER), 470e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_ALL_SCO = (AUDIO_DEVICE_OUT_BLUETOOTH_SCO | 471e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET | 472e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT), 47379f90bdc7de561aa31888948c0661568ccc33da1Eric Laurent AUDIO_DEVICE_OUT_ALL_USB = (AUDIO_DEVICE_OUT_USB_ACCESSORY | 47479f90bdc7de561aa31888948c0661568ccc33da1Eric Laurent AUDIO_DEVICE_OUT_USB_DEVICE), 475e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 476e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin /* input devices */ 477eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_COMMUNICATION = AUDIO_DEVICE_BIT_IN | 0x1, 478eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_AMBIENT = AUDIO_DEVICE_BIT_IN | 0x2, 479eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_BUILTIN_MIC = AUDIO_DEVICE_BIT_IN | 0x4, 480eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET = AUDIO_DEVICE_BIT_IN | 0x8, 481eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_WIRED_HEADSET = AUDIO_DEVICE_BIT_IN | 0x10, 482eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_AUX_DIGITAL = AUDIO_DEVICE_BIT_IN | 0x20, 483abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_IN_HDMI = AUDIO_DEVICE_IN_AUX_DIGITAL, 484abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent /* Telephony voice RX path */ 485eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_VOICE_CALL = AUDIO_DEVICE_BIT_IN | 0x40, 486abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_IN_TELEPHONY_RX = AUDIO_DEVICE_IN_VOICE_CALL, 487eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_BACK_MIC = AUDIO_DEVICE_BIT_IN | 0x80, 488eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_REMOTE_SUBMIX = AUDIO_DEVICE_BIT_IN | 0x100, 489eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_ANLG_DOCK_HEADSET = AUDIO_DEVICE_BIT_IN | 0x200, 490eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_DGTL_DOCK_HEADSET = AUDIO_DEVICE_BIT_IN | 0x400, 491eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_USB_ACCESSORY = AUDIO_DEVICE_BIT_IN | 0x800, 492eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_USB_DEVICE = AUDIO_DEVICE_BIT_IN | 0x1000, 493abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent /* FM tuner input */ 494abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_IN_FM_TUNER = AUDIO_DEVICE_BIT_IN | 0x2000, 495abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent /* TV tuner input */ 496abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_IN_TV_TUNER = AUDIO_DEVICE_BIT_IN | 0x4000, 497abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent /* Analog jack with line impedance detected */ 498abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_IN_LINE = AUDIO_DEVICE_BIT_IN | 0x8000, 499abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent /* S/PDIF in */ 500abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_IN_SPDIF = AUDIO_DEVICE_BIT_IN | 0x10000, 501c8183af4b3a3515f8f0cff27b2808a7139f18230Mike Lockwood AUDIO_DEVICE_IN_BLUETOOTH_A2DP = AUDIO_DEVICE_BIT_IN | 0x20000, 502b63dd8a005ad3133915a949e6b31e81d51007688Terry Heo AUDIO_DEVICE_IN_LOOPBACK = AUDIO_DEVICE_BIT_IN | 0x40000, 503eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_DEFAULT = AUDIO_DEVICE_BIT_IN | AUDIO_DEVICE_BIT_DEFAULT, 504e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 505e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_IN_ALL = (AUDIO_DEVICE_IN_COMMUNICATION | 506e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_IN_AMBIENT | 507e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_IN_BUILTIN_MIC | 508e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET | 509e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_IN_WIRED_HEADSET | 510abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_IN_HDMI | 511abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_IN_TELEPHONY_RX | 512e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_IN_BACK_MIC | 513eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_REMOTE_SUBMIX | 514eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_ANLG_DOCK_HEADSET | 515eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_DGTL_DOCK_HEADSET | 516eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_USB_ACCESSORY | 517eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent AUDIO_DEVICE_IN_USB_DEVICE | 518abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_IN_FM_TUNER | 519abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_IN_TV_TUNER | 520abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_IN_LINE | 521abcb99927d9ad3f66288a5ce16d7c86c14b49249Eric Laurent AUDIO_DEVICE_IN_SPDIF | 522c8183af4b3a3515f8f0cff27b2808a7139f18230Mike Lockwood AUDIO_DEVICE_IN_BLUETOOTH_A2DP | 523b63dd8a005ad3133915a949e6b31e81d51007688Terry Heo AUDIO_DEVICE_IN_LOOPBACK | 524e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_IN_DEFAULT), 525e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin AUDIO_DEVICE_IN_ALL_SCO = AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET, 52600b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLean AUDIO_DEVICE_IN_ALL_USB = (AUDIO_DEVICE_IN_USB_ACCESSORY | 52700b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLean AUDIO_DEVICE_IN_USB_DEVICE), 52816a7a0443a59c636ab20a3161ec630d037766eccGlenn Kasten}; 52916a7a0443a59c636ab20a3161ec630d037766eccGlenn Kasten 53016a7a0443a59c636ab20a3161ec630d037766eccGlenn Kastentypedef uint32_t audio_devices_t; 531e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 532545ab46063f083239b29e59b8b491656d93f2a38Eric Laurent/* the audio output flags serve two purposes: 533545ab46063f083239b29e59b8b491656d93f2a38Eric Laurent * - when an AudioTrack is created they indicate a "wish" to be connected to an 534545ab46063f083239b29e59b8b491656d93f2a38Eric Laurent * output stream with attributes corresponding to the specified flags 535545ab46063f083239b29e59b8b491656d93f2a38Eric Laurent * - when present in an output profile descriptor listed for a particular audio 536545ab46063f083239b29e59b8b491656d93f2a38Eric Laurent * hardware module, they indicate that an output stream can be opened that 537545ab46063f083239b29e59b8b491656d93f2a38Eric Laurent * supports the attributes indicated by the flags. 538545ab46063f083239b29e59b8b491656d93f2a38Eric Laurent * the audio policy manager will try to match the flags in the request 539545ab46063f083239b29e59b8b491656d93f2a38Eric Laurent * (when getOuput() is called) to an available output stream. 540545ab46063f083239b29e59b8b491656d93f2a38Eric Laurent */ 541545ab46063f083239b29e59b8b491656d93f2a38Eric Laurenttypedef enum { 5429aec362e76a60725df1a444214f222297caf46a2Eric Laurent AUDIO_OUTPUT_FLAG_NONE = 0x0, // no attributes 5439aec362e76a60725df1a444214f222297caf46a2Eric Laurent AUDIO_OUTPUT_FLAG_DIRECT = 0x1, // this output directly connects a track 5449aec362e76a60725df1a444214f222297caf46a2Eric Laurent // to one output stream: no software mixer 5459aec362e76a60725df1a444214f222297caf46a2Eric Laurent AUDIO_OUTPUT_FLAG_PRIMARY = 0x2, // this output is the primary output of 5469aec362e76a60725df1a444214f222297caf46a2Eric Laurent // the device. It is unique and must be 5479aec362e76a60725df1a444214f222297caf46a2Eric Laurent // present. It is opened by default and 5489aec362e76a60725df1a444214f222297caf46a2Eric Laurent // receives routing, audio mode and volume 5499aec362e76a60725df1a444214f222297caf46a2Eric Laurent // controls related to voice calls. 5509aec362e76a60725df1a444214f222297caf46a2Eric Laurent AUDIO_OUTPUT_FLAG_FAST = 0x4, // output supports "fast tracks", 5519aec362e76a60725df1a444214f222297caf46a2Eric Laurent // defined elsewhere 55205529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald AUDIO_OUTPUT_FLAG_DEEP_BUFFER = 0x8, // use deep audio buffers 55305529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD = 0x10, // offload playback of compressed 55405529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald // streams to hardware codec 55505529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald AUDIO_OUTPUT_FLAG_NON_BLOCKING = 0x20 // use non-blocking write 556545ab46063f083239b29e59b8b491656d93f2a38Eric Laurent} audio_output_flags_t; 557545ab46063f083239b29e59b8b491656d93f2a38Eric Laurent 558c051ffd7c24bbe989c9e39c793c6bbbac3ee3effGlenn Kasten/* The audio input flags are analogous to audio output flags. 559c051ffd7c24bbe989c9e39c793c6bbbac3ee3effGlenn Kasten * Currently they are used only when an AudioRecord is created, 560c051ffd7c24bbe989c9e39c793c6bbbac3ee3effGlenn Kasten * to indicate a preference to be connected to an input stream with 561c051ffd7c24bbe989c9e39c793c6bbbac3ee3effGlenn Kasten * attributes corresponding to the specified flags. 562c051ffd7c24bbe989c9e39c793c6bbbac3ee3effGlenn Kasten */ 563c051ffd7c24bbe989c9e39c793c6bbbac3ee3effGlenn Kastentypedef enum { 564c051ffd7c24bbe989c9e39c793c6bbbac3ee3effGlenn Kasten AUDIO_INPUT_FLAG_NONE = 0x0, // no attributes 565c051ffd7c24bbe989c9e39c793c6bbbac3ee3effGlenn Kasten AUDIO_INPUT_FLAG_FAST = 0x1, // prefer an input that supports "fast tracks" 566c051ffd7c24bbe989c9e39c793c6bbbac3ee3effGlenn Kasten} audio_input_flags_t; 567c051ffd7c24bbe989c9e39c793c6bbbac3ee3effGlenn Kasten 56805529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald/* Additional information about compressed streams offloaded to 56905529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald * hardware playback 57005529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald * The version and size fields must be initialized by the caller by using 57105529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald * one of the constants defined here. 57205529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald */ 57305529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgeraldtypedef struct { 57405529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald uint16_t version; // version of the info structure 57505529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald uint16_t size; // total size of the structure including version and size 57605529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald uint32_t sample_rate; // sample rate in Hz 57705529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald audio_channel_mask_t channel_mask; // channel mask 57805529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald audio_format_t format; // audio format 57905529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald audio_stream_type_t stream_type; // stream type 58005529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald uint32_t bit_rate; // bit rate in bits per second 58105529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald int64_t duration_us; // duration in microseconds, -1 if unknown 58205529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald bool has_video; // true if stream is tied to a video stream 58305529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald bool is_streaming; // true if streaming, false if local playback 58405529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald} audio_offload_info_t; 58505529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald 58605529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald#define AUDIO_MAKE_OFFLOAD_INFO_VERSION(maj,min) \ 58705529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald ((((maj) & 0xff) << 8) | ((min) & 0xff)) 58805529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald 58905529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald#define AUDIO_OFFLOAD_INFO_VERSION_0_1 AUDIO_MAKE_OFFLOAD_INFO_VERSION(0, 1) 59005529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald#define AUDIO_OFFLOAD_INFO_VERSION_CURRENT AUDIO_OFFLOAD_INFO_VERSION_0_1 59105529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald 59205529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgeraldstatic const audio_offload_info_t AUDIO_INFO_INITIALIZER = { 59305529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald version: AUDIO_OFFLOAD_INFO_VERSION_CURRENT, 59405529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald size: sizeof(audio_offload_info_t), 5954887842c925f304dc862bdd5810f27cdd2eaedcbMark Salyzyn sample_rate: 0, 5964887842c925f304dc862bdd5810f27cdd2eaedcbMark Salyzyn channel_mask: 0, 5974887842c925f304dc862bdd5810f27cdd2eaedcbMark Salyzyn format: AUDIO_FORMAT_DEFAULT, 5984887842c925f304dc862bdd5810f27cdd2eaedcbMark Salyzyn stream_type: AUDIO_STREAM_VOICE_CALL, 5994887842c925f304dc862bdd5810f27cdd2eaedcbMark Salyzyn bit_rate: 0, 6004887842c925f304dc862bdd5810f27cdd2eaedcbMark Salyzyn duration_us: 0, 6014887842c925f304dc862bdd5810f27cdd2eaedcbMark Salyzyn has_video: false, 6024887842c925f304dc862bdd5810f27cdd2eaedcbMark Salyzyn is_streaming: false 60305529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald}; 60405529a1a10711d93745a9fcf07520f65a3eb4f3dRichard Fitzgerald 6054cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent 6064cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent/* audio hw module handle functions or structures referencing a module */ 6074cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurenttypedef int audio_module_handle_t; 6084cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent 6094cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent/****************************** 6104cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent * Volume control 6114cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent *****************************/ 6124cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent 6134cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent/* If the audio hardware supports gain control on some audio paths, 6144cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent * the platform can expose them in the audio_policy.conf file. The audio HAL 6154cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent * will then implement gain control functions that will use the following data 6164cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent * structures. */ 6174cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent 6184cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent/* Type of gain control exposed by an audio port */ 6194cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent#define AUDIO_GAIN_MODE_JOINT 0x1 /* supports joint channel gain control */ 6204cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent#define AUDIO_GAIN_MODE_CHANNELS 0x2 /* supports separate channel gain control */ 6214cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent#define AUDIO_GAIN_MODE_RAMP 0x4 /* supports gain ramps */ 6224cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent 6234cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurenttypedef uint32_t audio_gain_mode_t; 6244cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent 6254cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent 6264cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent/* An audio_gain struct is a representation of a gain stage. 6274cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent * A gain stage is always attached to an audio port. */ 6284cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurentstruct audio_gain { 6294cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent audio_gain_mode_t mode; /* e.g. AUDIO_GAIN_MODE_JOINT */ 6304cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent audio_channel_mask_t channel_mask; /* channels which gain an be controlled. 6314cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent N/A if AUDIO_GAIN_MODE_CHANNELS is not supported */ 6324cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent int min_value; /* minimum gain value in millibels */ 6334cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent int max_value; /* maximum gain value in millibels */ 6344cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent int default_value; /* default gain value in millibels */ 6354cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent unsigned int step_value; /* gain step in millibels */ 6364cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent unsigned int min_ramp_ms; /* minimum ramp duration in ms */ 6374cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent unsigned int max_ramp_ms; /* maximum ramp duration in ms */ 6384cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent}; 6394cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent 6404cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent/* The gain configuration structure is used to get or set the gain values of a 6414cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent * given port */ 6424cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurentstruct audio_gain_config { 6434cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent int index; /* index of the corresponding audio_gain in the 6444cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent audio_port gains[] table */ 6454cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent audio_gain_mode_t mode; /* mode requested for this command */ 6464cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent audio_channel_mask_t channel_mask; /* channels which gain value follows. 6474cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent N/A in joint mode */ 6484cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent int values[sizeof(audio_channel_mask_t)]; /* gain values in millibels for each 6494cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent channel ordered from LSb to MSb in channel mask. 6504cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent The number of values is 1 in joint mode or 6514cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent popcount(channel_mask) */ 6524cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent unsigned int ramp_duration_ms; /* ramp duration in ms */ 6534cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent}; 6544cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent 6554cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent/****************************** 6564cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent * Routing control 6574cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent *****************************/ 6584cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent 6594cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent/* Types defined here are used to describe an audio source or sink at internal 6604cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent * framework interfaces (audio policy, patch panel) or at the audio HAL. 6614cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent * Sink and sources are grouped in a concept of “audio port” representing an 6624cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent * audio end point at the edge of the system managed by the module exposing 6634cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent * the interface. */ 6644cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent 6654cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent/* Audio port role: either source or sink */ 6664cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurenttypedef enum { 6674cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent AUDIO_PORT_ROLE_NONE, 6684cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent AUDIO_PORT_ROLE_SOURCE, 6694cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent AUDIO_PORT_ROLE_SINK, 6704cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent} audio_port_role_t; 6714cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent 6724cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent/* Audio port type indicates if it is a session (e.g AudioTrack), 6734cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent * a mix (e.g PlaybackThread output) or a physical device 6744cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent * (e.g AUDIO_DEVICE_OUT_SPEAKER) */ 6754cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurenttypedef enum { 6764cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent AUDIO_PORT_TYPE_NONE, 6774cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent AUDIO_PORT_TYPE_DEVICE, 6784cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent AUDIO_PORT_TYPE_MIX, 6794cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent AUDIO_PORT_TYPE_SESSION, 6804cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent} audio_port_type_t; 6814cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent 6824cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent/* Each port has a unique ID or handle allocated by policy manager */ 6834cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurenttypedef int audio_port_handle_t; 6844cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent#define AUDIO_PORT_HANDLE_NONE 0 6854cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent 6864cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent 6874cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent/* maximum audio device address length */ 6884cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent#define AUDIO_DEVICE_MAX_ADDRESS_LEN 32 6894cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent 6904cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent/* extension for audio port configuration structure when the audio port is a 6914cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent * hardware device */ 6924cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurentstruct audio_port_config_device_ext { 6934cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent audio_module_handle_t hw_module; /* module the device is attached to */ 6944cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent audio_devices_t type; /* device type (e.g AUDIO_DEVICE_OUT_SPEAKER) */ 6954cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent char address[AUDIO_DEVICE_MAX_ADDRESS_LEN]; /* device address. "" if N/A */ 6964cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent}; 6974cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent 6984cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent/* extension for audio port configuration structure when the audio port is a 6994cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent * sub mix */ 7004cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurentstruct audio_port_config_mix_ext { 7014cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent audio_module_handle_t hw_module; /* module the stream is attached to */ 7024cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent audio_io_handle_t handle; /* I/O handle of the input/output stream */ 7034cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent union { 7044cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent //TODO: change use case for output streams: use strategy and mixer attributes 7054cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent audio_stream_type_t stream; 7064cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent audio_source_t source; 7074cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent } usecase; 7084cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent}; 7094cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent 7104cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent/* extension for audio port configuration structure when the audio port is an 7114cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent * audio session */ 7124cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurentstruct audio_port_config_session_ext { 7134cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent audio_session_t session; /* audio session */ 7144cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent}; 7154cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent 7164cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent/* Flags indicating which fields are to be considered in struct audio_port_config */ 7174cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent#define AUDIO_PORT_CONFIG_SAMPLE_RATE 0x1 7184cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent#define AUDIO_PORT_CONFIG_CHANNEL_MASK 0x2 7194cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent#define AUDIO_PORT_CONFIG_FORMAT 0x4 7204cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent#define AUDIO_PORT_CONFIG_GAIN 0x8 7214cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent#define AUDIO_PORT_CONFIG_ALL (AUDIO_PORT_CONFIG_SAMPLE_RATE | \ 7224cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent AUDIO_PORT_CONFIG_CHANNEL_MASK | \ 7234cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent AUDIO_PORT_CONFIG_FORMAT | \ 7244cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent AUDIO_PORT_CONFIG_GAIN) 7254cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent 7264cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent/* audio port configuration structure used to specify a particular configuration of 7274cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent * an audio port */ 7284cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurentstruct audio_port_config { 7294cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent audio_port_handle_t id; /* port unique ID */ 7304cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent audio_port_role_t role; /* sink or source */ 7314cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent audio_port_type_t type; /* device, mix ... */ 7324cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent unsigned int config_mask; /* e.g AUDIO_PORT_CONFIG_ALL */ 7334cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent unsigned int sample_rate; /* sampling rate in Hz */ 7344cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent audio_channel_mask_t channel_mask; /* channel mask if applicable */ 7354cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent audio_format_t format; /* format if applicable */ 7364cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent struct audio_gain_config gain; /* gain to apply if applicable */ 7374cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent union { 7384cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent struct audio_port_config_device_ext device; /* device specific info */ 7394cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent struct audio_port_config_mix_ext mix; /* mix specific info */ 7404cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent struct audio_port_config_session_ext session; /* session specific info */ 7414cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent } ext; 7424cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent}; 7434cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent 7444cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent 7454cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent/* max number of sampling rates in audio port */ 7464cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent#define AUDIO_PORT_MAX_SAMPLING_RATES 16 7474cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent/* max number of channel masks in audio port */ 7484cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent#define AUDIO_PORT_MAX_CHANNEL_MASKS 16 7494cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent/* max number of audio formats in audio port */ 7504cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent#define AUDIO_PORT_MAX_FORMATS 16 7514cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent/* max number of gain controls in audio port */ 7524cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent#define AUDIO_PORT_MAX_GAINS 16 7534cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent 7544cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent/* extension for audio port structure when the audio port is a hardware device */ 7554cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurentstruct audio_port_device_ext { 7564cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent audio_module_handle_t hw_module; /* module the device is attached to */ 7574cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent audio_devices_t type; /* device type (e.g AUDIO_DEVICE_OUT_SPEAKER) */ 7584cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent char address[AUDIO_DEVICE_MAX_ADDRESS_LEN]; 7594cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent}; 7604cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent 7614cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent/* Latency class of the audio mix */ 7624cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurenttypedef enum { 7634cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent AUDIO_LATENCY_LOW, 7644cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent AUDIO_LATENCY_NORMAL, 7654cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent} audio_mix_latency_class_t; 7664cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent 7674cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent/* extension for audio port structure when the audio port is a sub mix */ 7684cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurentstruct audio_port_mix_ext { 7694cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent audio_module_handle_t hw_module; /* module the stream is attached to */ 7704cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent audio_io_handle_t handle; /* I/O handle of the input.output stream */ 7714cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent audio_mix_latency_class_t latency_class; /* latency class */ 7724cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent // other attributes: routing strategies 7734cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent}; 7744cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent 7754cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent/* extension for audio port structure when the audio port is an audio session */ 7764cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurentstruct audio_port_session_ext { 7774cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent audio_session_t session; /* audio session */ 7784cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent}; 7794cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent 7804cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent 7814cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurentstruct audio_port { 7824cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent audio_port_handle_t id; /* port unique ID */ 7834cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent audio_port_role_t role; /* sink or source */ 7844cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent audio_port_type_t type; /* device, mix ... */ 7854cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent unsigned int num_sample_rates; /* number of sampling rates in following array */ 7864cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent unsigned int sample_rates[AUDIO_PORT_MAX_SAMPLING_RATES]; 7874cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent unsigned int num_channel_masks; /* number of channel masks in following array */ 7884cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent audio_channel_mask_t channel_masks[AUDIO_PORT_MAX_CHANNEL_MASKS]; 7894cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent unsigned int num_formats; /* number of formats in following array */ 7904cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent audio_format_t formats[AUDIO_PORT_MAX_FORMATS]; 7914cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent unsigned int num_gains; /* number of gains in following array */ 7924cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent struct audio_gain gains[AUDIO_PORT_MAX_GAINS]; 7934cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent struct audio_port_config active_config; /* current audio port configuration */ 7944cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent union { 7954cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent struct audio_port_device_ext device; 7964cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent struct audio_port_mix_ext mix; 7974cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent struct audio_port_session_ext session; 7984cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent } ext; 7994cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent}; 8004cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent 8014cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent/* An audio patch represents a connection between one or more source ports and 8024cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent * one or more sink ports. Patches are connected and disconnected by audio policy manager or by 8034cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent * applications via framework APIs. 8044cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent * Each patch is identified by a handle at the interface used to create that patch. For instance, 8054cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent * when a patch is created by the audio HAL, the HAL allocates and returns a handle. 8064cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent * This handle is unique to a given audio HAL hardware module. 8074cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent * But the same patch receives another system wide unique handle allocated by the framework. 8084cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent * This unique handle is used for all transactions inside the framework. 8094cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent */ 8104cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurenttypedef int audio_patch_handle_t; 8114cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent#define AUDIO_PATCH_HANDLE_NONE 0 8124cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent 8134cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent#define AUDIO_PATCH_PORTS_MAX 16 8144cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent 8154cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurentstruct audio_patch { 8164cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent audio_patch_handle_t id; /* patch unique ID */ 8174cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent unsigned int num_sources; /* number of sources in following array */ 8184cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent struct audio_port_config sources[AUDIO_PATCH_PORTS_MAX]; 8194cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent unsigned int num_sinks; /* number of sinks in following array */ 8204cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent struct audio_port_config sinks[AUDIO_PATCH_PORTS_MAX]; 8214cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent}; 8224cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent 8234cd050121fd22c0f7277a988d548d0e8f327a760Eric Laurent 824e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavinstatic inline bool audio_is_output_device(audio_devices_t device) 825e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin{ 826eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent if (((device & AUDIO_DEVICE_BIT_IN) == 0) && 827eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent (popcount(device) == 1) && ((device & ~AUDIO_DEVICE_OUT_ALL) == 0)) 828e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin return true; 829e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin else 830e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin return false; 831e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} 832e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 833e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavinstatic inline bool audio_is_input_device(audio_devices_t device) 834e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin{ 835eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent if ((device & AUDIO_DEVICE_BIT_IN) != 0) { 836eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent device &= ~AUDIO_DEVICE_BIT_IN; 837eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent if ((popcount(device) == 1) && ((device & ~AUDIO_DEVICE_IN_ALL) == 0)) 838eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent return true; 839eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent } 840eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent return false; 841e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} 842e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 843eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurentstatic inline bool audio_is_output_devices(audio_devices_t device) 844eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent{ 845eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent return (device & AUDIO_DEVICE_BIT_IN) == 0; 846eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent} 847eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent 848c8183af4b3a3515f8f0cff27b2808a7139f18230Mike Lockwoodstatic inline bool audio_is_a2dp_in_device(audio_devices_t device) 849c8183af4b3a3515f8f0cff27b2808a7139f18230Mike Lockwood{ 850c8183af4b3a3515f8f0cff27b2808a7139f18230Mike Lockwood if ((device & AUDIO_DEVICE_BIT_IN) != 0) { 851c8183af4b3a3515f8f0cff27b2808a7139f18230Mike Lockwood device &= ~AUDIO_DEVICE_BIT_IN; 852c8183af4b3a3515f8f0cff27b2808a7139f18230Mike Lockwood if ((popcount(device) == 1) && (device & AUDIO_DEVICE_IN_BLUETOOTH_A2DP)) 853c8183af4b3a3515f8f0cff27b2808a7139f18230Mike Lockwood return true; 854c8183af4b3a3515f8f0cff27b2808a7139f18230Mike Lockwood } 855c8183af4b3a3515f8f0cff27b2808a7139f18230Mike Lockwood return false; 856c8183af4b3a3515f8f0cff27b2808a7139f18230Mike Lockwood} 857eeeee802e9837c592b0f0f9fd183bcaa9e77732eEric Laurent 858c8183af4b3a3515f8f0cff27b2808a7139f18230Mike Lockwoodstatic inline bool audio_is_a2dp_out_device(audio_devices_t device) 859e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin{ 860e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin if ((popcount(device) == 1) && (device & AUDIO_DEVICE_OUT_ALL_A2DP)) 861e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin return true; 862e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin else 863e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin return false; 864e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} 865e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 866c8183af4b3a3515f8f0cff27b2808a7139f18230Mike Lockwood// Deprecated - use audio_is_a2dp_out_device() instead 867c8183af4b3a3515f8f0cff27b2808a7139f18230Mike Lockwoodstatic inline bool audio_is_a2dp_device(audio_devices_t device) 868c8183af4b3a3515f8f0cff27b2808a7139f18230Mike Lockwood{ 869c8183af4b3a3515f8f0cff27b2808a7139f18230Mike Lockwood return audio_is_a2dp_out_device(device); 870c8183af4b3a3515f8f0cff27b2808a7139f18230Mike Lockwood} 871c8183af4b3a3515f8f0cff27b2808a7139f18230Mike Lockwood 872e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavinstatic inline bool audio_is_bluetooth_sco_device(audio_devices_t device) 873e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin{ 874b526630ab843f9a405be23618d5808d8e65755f3Eric Laurent if ((device & AUDIO_DEVICE_BIT_IN) == 0) { 875b526630ab843f9a405be23618d5808d8e65755f3Eric Laurent if ((popcount(device) == 1) && ((device & ~AUDIO_DEVICE_OUT_ALL_SCO) == 0)) 876b526630ab843f9a405be23618d5808d8e65755f3Eric Laurent return true; 877b526630ab843f9a405be23618d5808d8e65755f3Eric Laurent } else { 878b526630ab843f9a405be23618d5808d8e65755f3Eric Laurent device &= ~AUDIO_DEVICE_BIT_IN; 879b526630ab843f9a405be23618d5808d8e65755f3Eric Laurent if ((popcount(device) == 1) && ((device & ~AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET) == 0)) 880b526630ab843f9a405be23618d5808d8e65755f3Eric Laurent return true; 881b526630ab843f9a405be23618d5808d8e65755f3Eric Laurent } 882b526630ab843f9a405be23618d5808d8e65755f3Eric Laurent 883b526630ab843f9a405be23618d5808d8e65755f3Eric Laurent return false; 884e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} 885e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 88600b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLeanstatic inline bool audio_is_usb_out_device(audio_devices_t device) 88700b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLean{ 88800b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLean return ((popcount(device) == 1) && (device & AUDIO_DEVICE_OUT_ALL_USB)); 88900b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLean} 89000b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLean 89100b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLeanstatic inline bool audio_is_usb_in_device(audio_devices_t device) 89200b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLean{ 89300b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLean if ((device & AUDIO_DEVICE_BIT_IN) != 0) { 89400b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLean device &= ~AUDIO_DEVICE_BIT_IN; 89500b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLean if (popcount(device) == 1 && (device & AUDIO_DEVICE_IN_ALL_USB) != 0) 89600b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLean return true; 89700b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLean } 89800b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLean return false; 89900b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLean} 90000b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLean 90100b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLean/* OBSOLETE - use audio_is_usb_out_device() instead. */ 90279f90bdc7de561aa31888948c0661568ccc33da1Eric Laurentstatic inline bool audio_is_usb_device(audio_devices_t device) 90379f90bdc7de561aa31888948c0661568ccc33da1Eric Laurent{ 90400b8972062fb32dd02bcac7821a6612ce27ebd86Paul McLean return audio_is_usb_out_device(device); 90579f90bdc7de561aa31888948c0661568ccc33da1Eric Laurent} 90679f90bdc7de561aa31888948c0661568ccc33da1Eric Laurent 907e11866a8799a2357b82c9217c8d6b726726f23feJean-Michel Trivistatic inline bool audio_is_remote_submix_device(audio_devices_t device) 908e11866a8799a2357b82c9217c8d6b726726f23feJean-Michel Trivi{ 9098ecc7afca42d0bb27aad25733790309f71f307d6Jeff Brown if ((device & AUDIO_DEVICE_OUT_REMOTE_SUBMIX) == AUDIO_DEVICE_OUT_REMOTE_SUBMIX 9108ecc7afca42d0bb27aad25733790309f71f307d6Jeff Brown || (device & AUDIO_DEVICE_IN_REMOTE_SUBMIX) == AUDIO_DEVICE_IN_REMOTE_SUBMIX) 911e11866a8799a2357b82c9217c8d6b726726f23feJean-Michel Trivi return true; 912e11866a8799a2357b82c9217c8d6b726726f23feJean-Michel Trivi else 913e11866a8799a2357b82c9217c8d6b726726f23feJean-Michel Trivi return false; 914e11866a8799a2357b82c9217c8d6b726726f23feJean-Michel Trivi} 915e11866a8799a2357b82c9217c8d6b726726f23feJean-Michel Trivi 916f7326dc0aa2da2df6bf1fa1ae7ef259a0ebdbd7bGlenn Kastenstatic inline bool audio_is_input_channel(audio_channel_mask_t channel) 917e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin{ 918e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin if ((channel & ~AUDIO_CHANNEL_IN_ALL) == 0) 919f7326dc0aa2da2df6bf1fa1ae7ef259a0ebdbd7bGlenn Kasten return channel != 0; 920e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin else 921e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin return false; 922e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} 923e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 924f7326dc0aa2da2df6bf1fa1ae7ef259a0ebdbd7bGlenn Kastenstatic inline bool audio_is_output_channel(audio_channel_mask_t channel) 925e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin{ 926e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin if ((channel & ~AUDIO_CHANNEL_OUT_ALL) == 0) 927f7326dc0aa2da2df6bf1fa1ae7ef259a0ebdbd7bGlenn Kasten return channel != 0; 928e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin else 929e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin return false; 930e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} 931e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 932a7e8f8615d357357712660d1ed3863c274c2c7bbAndy Hung/* Returns the number of channels from an input channel mask, 933a7e8f8615d357357712660d1ed3863c274c2c7bbAndy Hung * used in the context of audio input or recording. 934a7e8f8615d357357712660d1ed3863c274c2c7bbAndy Hung */ 935a7e8f8615d357357712660d1ed3863c274c2c7bbAndy Hungstatic inline uint32_t audio_channel_count_from_in_mask(audio_channel_mask_t channel) 936a7e8f8615d357357712660d1ed3863c274c2c7bbAndy Hung{ 937a7e8f8615d357357712660d1ed3863c274c2c7bbAndy Hung return popcount(channel & AUDIO_CHANNEL_IN_ALL); 938a7e8f8615d357357712660d1ed3863c274c2c7bbAndy Hung} 939a7e8f8615d357357712660d1ed3863c274c2c7bbAndy Hung 940a7e8f8615d357357712660d1ed3863c274c2c7bbAndy Hung/* Returns the number of channels from an output channel mask, 941a7e8f8615d357357712660d1ed3863c274c2c7bbAndy Hung * used in the context of audio output or playback. 942a7e8f8615d357357712660d1ed3863c274c2c7bbAndy Hung */ 943a7e8f8615d357357712660d1ed3863c274c2c7bbAndy Hungstatic inline uint32_t audio_channel_count_from_out_mask(audio_channel_mask_t channel) 944a7e8f8615d357357712660d1ed3863c274c2c7bbAndy Hung{ 945a7e8f8615d357357712660d1ed3863c274c2c7bbAndy Hung return popcount(channel & AUDIO_CHANNEL_OUT_ALL); 946a7e8f8615d357357712660d1ed3863c274c2c7bbAndy Hung} 947a7e8f8615d357357712660d1ed3863c274c2c7bbAndy Hung 94889f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten/* Derive an output channel mask from a channel count. 9494ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi * This is to be used when the content channel mask is unknown. The 1, 2, 4, 5, 6, 7 and 8 channel 9504ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi * cases are mapped to the standard game/home-theater layouts, but note that 4 is mapped to quad, 9514ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi * and not stereo + FC + mono surround. A channel count of 3 is arbitrarily mapped to stereo + FC 9524ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi * for continuity with stereo. 9534ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi * Returns the matching channel mask, or 0 if the number of channels exceeds that of the 9544ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi * configurations for which a default channel mask is defined. 9554ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi */ 95689f7ba3df8fc359023b494c2e625beed900bc706Glenn Kastenstatic inline audio_channel_mask_t audio_channel_out_mask_from_count(uint32_t channel_count) 9574ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi{ 9581c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten switch (channel_count) { 9594ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi case 1: 9604ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi return AUDIO_CHANNEL_OUT_MONO; 9614ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi case 2: 9624ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi return AUDIO_CHANNEL_OUT_STEREO; 9634ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi case 3: 9644ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi return (AUDIO_CHANNEL_OUT_STEREO | AUDIO_CHANNEL_OUT_FRONT_CENTER); 9654ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi case 4: // 4.0 9664ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi return AUDIO_CHANNEL_OUT_QUAD; 9674ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi case 5: // 5.0 9684ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi return (AUDIO_CHANNEL_OUT_QUAD | AUDIO_CHANNEL_OUT_FRONT_CENTER); 9694ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi case 6: // 5.1 9704ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi return AUDIO_CHANNEL_OUT_5POINT1; 9714ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi case 7: // 6.1 9724ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi return (AUDIO_CHANNEL_OUT_5POINT1 | AUDIO_CHANNEL_OUT_BACK_CENTER); 9734ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi case 8: 9744ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi return AUDIO_CHANNEL_OUT_7POINT1; 9754ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi default: 9764ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi return 0; 9774ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi } 9784ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi} 9794ab051ab4613f2622dc3f3f0f57bb34d8a40a6a9Jean-Michel Trivi 98089f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten/* Similar to above, but for input. Currently handles only mono and stereo. */ 98189f7ba3df8fc359023b494c2e625beed900bc706Glenn Kastenstatic inline audio_channel_mask_t audio_channel_in_mask_from_count(uint32_t channel_count) 98289f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten{ 98389f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten switch (channel_count) { 98489f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten case 1: 98589f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten return AUDIO_CHANNEL_IN_MONO; 98689f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten case 2: 98789f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten return AUDIO_CHANNEL_IN_STEREO; 98889f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten default: 98989f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten return 0; 99089f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten } 99189f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten} 99289f7ba3df8fc359023b494c2e625beed900bc706Glenn Kasten 993828bf0cdf4e869fa7bb007331670328c834f8277Glenn Kastenstatic inline bool audio_is_valid_format(audio_format_t format) 994e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin{ 995e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin switch (format & AUDIO_FORMAT_MAIN_MASK) { 996e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin case AUDIO_FORMAT_PCM: 99745b9581fc9884da4bf60203ece1563e29aac8c96Glenn Kasten switch (format) { 99845b9581fc9884da4bf60203ece1563e29aac8c96Glenn Kasten case AUDIO_FORMAT_PCM_16_BIT: 99945b9581fc9884da4bf60203ece1563e29aac8c96Glenn Kasten case AUDIO_FORMAT_PCM_8_BIT: 100045b9581fc9884da4bf60203ece1563e29aac8c96Glenn Kasten case AUDIO_FORMAT_PCM_32_BIT: 100145b9581fc9884da4bf60203ece1563e29aac8c96Glenn Kasten case AUDIO_FORMAT_PCM_8_24_BIT: 100245b9581fc9884da4bf60203ece1563e29aac8c96Glenn Kasten case AUDIO_FORMAT_PCM_FLOAT: 100345b9581fc9884da4bf60203ece1563e29aac8c96Glenn Kasten case AUDIO_FORMAT_PCM_24_BIT_PACKED: 100445b9581fc9884da4bf60203ece1563e29aac8c96Glenn Kasten return true; 100545b9581fc9884da4bf60203ece1563e29aac8c96Glenn Kasten default: 1006da382248758eacd9f91d6f0a50dff3f021791c24Eric Laurent return false; 1007da382248758eacd9f91d6f0a50dff3f021791c24Eric Laurent } 100845b9581fc9884da4bf60203ece1563e29aac8c96Glenn Kasten /* not reached */ 1009e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin case AUDIO_FORMAT_MP3: 1010e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin case AUDIO_FORMAT_AMR_NB: 1011e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin case AUDIO_FORMAT_AMR_WB: 1012e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin case AUDIO_FORMAT_AAC: 1013e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin case AUDIO_FORMAT_HE_AAC_V1: 1014e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin case AUDIO_FORMAT_HE_AAC_V2: 1015e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin case AUDIO_FORMAT_VORBIS: 1016ce30de3553ecaaa0a85eec8a788e808630d766b4Eric Laurent case AUDIO_FORMAT_OPUS: 1017ce30de3553ecaaa0a85eec8a788e808630d766b4Eric Laurent case AUDIO_FORMAT_AC3: 1018ce30de3553ecaaa0a85eec8a788e808630d766b4Eric Laurent case AUDIO_FORMAT_E_AC3: 1019e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin return true; 1020e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin default: 1021e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin return false; 1022e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin } 1023e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} 1024e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 1025828bf0cdf4e869fa7bb007331670328c834f8277Glenn Kastenstatic inline bool audio_is_linear_pcm(audio_format_t format) 1026e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin{ 1027da382248758eacd9f91d6f0a50dff3f021791c24Eric Laurent return ((format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_PCM); 1028da382248758eacd9f91d6f0a50dff3f021791c24Eric Laurent} 1029da382248758eacd9f91d6f0a50dff3f021791c24Eric Laurent 1030828bf0cdf4e869fa7bb007331670328c834f8277Glenn Kastenstatic inline size_t audio_bytes_per_sample(audio_format_t format) 1031da382248758eacd9f91d6f0a50dff3f021791c24Eric Laurent{ 1032da382248758eacd9f91d6f0a50dff3f021791c24Eric Laurent size_t size = 0; 1033da382248758eacd9f91d6f0a50dff3f021791c24Eric Laurent 1034e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin switch (format) { 1035427d2b43c23c48aedadca008482f495145411e2bJean-Michel Trivi case AUDIO_FORMAT_PCM_32_BIT: 1036427d2b43c23c48aedadca008482f495145411e2bJean-Michel Trivi case AUDIO_FORMAT_PCM_8_24_BIT: 1037427d2b43c23c48aedadca008482f495145411e2bJean-Michel Trivi size = sizeof(int32_t); 1038427d2b43c23c48aedadca008482f495145411e2bJean-Michel Trivi break; 1039173f4995b075e67abdb1874da9f6e83fd7324a5eAndy Hung case AUDIO_FORMAT_PCM_24_BIT_PACKED: 1040173f4995b075e67abdb1874da9f6e83fd7324a5eAndy Hung size = sizeof(uint8_t) * 3; 1041173f4995b075e67abdb1874da9f6e83fd7324a5eAndy Hung break; 1042427d2b43c23c48aedadca008482f495145411e2bJean-Michel Trivi case AUDIO_FORMAT_PCM_16_BIT: 1043427d2b43c23c48aedadca008482f495145411e2bJean-Michel Trivi size = sizeof(int16_t); 1044427d2b43c23c48aedadca008482f495145411e2bJean-Michel Trivi break; 1045427d2b43c23c48aedadca008482f495145411e2bJean-Michel Trivi case AUDIO_FORMAT_PCM_8_BIT: 1046427d2b43c23c48aedadca008482f495145411e2bJean-Michel Trivi size = sizeof(uint8_t); 1047427d2b43c23c48aedadca008482f495145411e2bJean-Michel Trivi break; 10481c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten case AUDIO_FORMAT_PCM_FLOAT: 10491c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten size = sizeof(float); 10501c3e16fb40780c010f35119cdf782e6fcb7ce017Glenn Kasten break; 1051427d2b43c23c48aedadca008482f495145411e2bJean-Michel Trivi default: 1052427d2b43c23c48aedadca008482f495145411e2bJean-Michel Trivi break; 1053e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin } 1054da382248758eacd9f91d6f0a50dff3f021791c24Eric Laurent return size; 1055e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin} 1056e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 1057e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin__END_DECLS 1058e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin 1059e8e4be57aa45f621d231a40801a4dea877be09d5Dima Zavin#endif // ANDROID_AUDIO_CORE_H 1060