1fe834d30f4f3f51b754d55fecb36f11279733948Glenn Kasten/* 2fe834d30f4f3f51b754d55fecb36f11279733948Glenn Kasten * Copyright (C) 2014 The Android Open Source Project 3fe834d30f4f3f51b754d55fecb36f11279733948Glenn Kasten * 4fe834d30f4f3f51b754d55fecb36f11279733948Glenn Kasten * Licensed under the Apache License, Version 2.0 (the "License"); 5fe834d30f4f3f51b754d55fecb36f11279733948Glenn Kasten * you may not use this file except in compliance with the License. 6fe834d30f4f3f51b754d55fecb36f11279733948Glenn Kasten * You may obtain a copy of the License at 7fe834d30f4f3f51b754d55fecb36f11279733948Glenn Kasten * 8fe834d30f4f3f51b754d55fecb36f11279733948Glenn Kasten * http://www.apache.org/licenses/LICENSE-2.0 9fe834d30f4f3f51b754d55fecb36f11279733948Glenn Kasten * 10fe834d30f4f3f51b754d55fecb36f11279733948Glenn Kasten * Unless required by applicable law or agreed to in writing, software 11fe834d30f4f3f51b754d55fecb36f11279733948Glenn Kasten * distributed under the License is distributed on an "AS IS" BASIS, 12fe834d30f4f3f51b754d55fecb36f11279733948Glenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13fe834d30f4f3f51b754d55fecb36f11279733948Glenn Kasten * See the License for the specific language governing permissions and 14fe834d30f4f3f51b754d55fecb36f11279733948Glenn Kasten * limitations under the License. 15fe834d30f4f3f51b754d55fecb36f11279733948Glenn Kasten */ 16fe834d30f4f3f51b754d55fecb36f11279733948Glenn Kasten 17fe834d30f4f3f51b754d55fecb36f11279733948Glenn Kasten#ifndef ANDROID_MEDIA_AUDIOFORMAT_H 18fe834d30f4f3f51b754d55fecb36f11279733948Glenn Kasten#define ANDROID_MEDIA_AUDIOFORMAT_H 19fe834d30f4f3f51b754d55fecb36f11279733948Glenn Kasten 20fe834d30f4f3f51b754d55fecb36f11279733948Glenn Kasten#include <system/audio.h> 21fe834d30f4f3f51b754d55fecb36f11279733948Glenn Kasten 22fe834d30f4f3f51b754d55fecb36f11279733948Glenn Kasten// keep these values in sync with AudioFormat.java 23b4fae5ba3980df1690492c70deb134e31bef5b4dEric Laurent#define ENCODING_PCM_16BIT 2 24b4fae5ba3980df1690492c70deb134e31bef5b4dEric Laurent#define ENCODING_PCM_8BIT 3 25b4fae5ba3980df1690492c70deb134e31bef5b4dEric Laurent#define ENCODING_PCM_FLOAT 4 26b4fae5ba3980df1690492c70deb134e31bef5b4dEric Laurent#define ENCODING_AC3 5 27b4fae5ba3980df1690492c70deb134e31bef5b4dEric Laurent#define ENCODING_E_AC3 6 28b4fae5ba3980df1690492c70deb134e31bef5b4dEric Laurent#define ENCODING_DTS 7 29b4fae5ba3980df1690492c70deb134e31bef5b4dEric Laurent#define ENCODING_DTS_HD 8 30b4fae5ba3980df1690492c70deb134e31bef5b4dEric Laurent#define ENCODING_MP3 9 31b4fae5ba3980df1690492c70deb134e31bef5b4dEric Laurent#define ENCODING_AAC_LC 10 32b4fae5ba3980df1690492c70deb134e31bef5b4dEric Laurent#define ENCODING_AAC_HE_V1 11 33b4fae5ba3980df1690492c70deb134e31bef5b4dEric Laurent#define ENCODING_AAC_HE_V2 12 34b4fae5ba3980df1690492c70deb134e31bef5b4dEric Laurent#define ENCODING_IEC61937 13 35b4fae5ba3980df1690492c70deb134e31bef5b4dEric Laurent#define ENCODING_DOLBY_TRUEHD 14 36b4fae5ba3980df1690492c70deb134e31bef5b4dEric Laurent 37ff0d9f098e51c54e1a030ed21fd980680cb7b405Eric Laurent#define ENCODING_INVALID 0 38ff0d9f098e51c54e1a030ed21fd980680cb7b405Eric Laurent#define ENCODING_DEFAULT 1 39ff0d9f098e51c54e1a030ed21fd980680cb7b405Eric Laurent 40ff0d9f098e51c54e1a030ed21fd980680cb7b405Eric Laurent 41b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent 42b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent#define CHANNEL_INVALID 0 43b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent#define CHANNEL_OUT_DEFAULT 1 44fe834d30f4f3f51b754d55fecb36f11279733948Glenn Kasten 45fe834d30f4f3f51b754d55fecb36f11279733948Glenn Kastenstatic inline audio_format_t audioFormatToNative(int audioFormat) 46fe834d30f4f3f51b754d55fecb36f11279733948Glenn Kasten{ 47fe834d30f4f3f51b754d55fecb36f11279733948Glenn Kasten switch (audioFormat) { 48fe834d30f4f3f51b754d55fecb36f11279733948Glenn Kasten case ENCODING_PCM_16BIT: 49fe834d30f4f3f51b754d55fecb36f11279733948Glenn Kasten return AUDIO_FORMAT_PCM_16_BIT; 50fe834d30f4f3f51b754d55fecb36f11279733948Glenn Kasten case ENCODING_PCM_8BIT: 51fe834d30f4f3f51b754d55fecb36f11279733948Glenn Kasten return AUDIO_FORMAT_PCM_8_BIT; 52313f59887b1439fa2f39dbf3578407c52fcbf60dGlenn Kasten case ENCODING_PCM_FLOAT: 53313f59887b1439fa2f39dbf3578407c52fcbf60dGlenn Kasten return AUDIO_FORMAT_PCM_FLOAT; 54ff0d9f098e51c54e1a030ed21fd980680cb7b405Eric Laurent case ENCODING_AC3: 55ff0d9f098e51c54e1a030ed21fd980680cb7b405Eric Laurent return AUDIO_FORMAT_AC3; 56ff0d9f098e51c54e1a030ed21fd980680cb7b405Eric Laurent case ENCODING_E_AC3: 57ff0d9f098e51c54e1a030ed21fd980680cb7b405Eric Laurent return AUDIO_FORMAT_E_AC3; 58e12189dee6504cf793d37f5689a7bbf0773293c7Phil Burk case ENCODING_DTS: 59e12189dee6504cf793d37f5689a7bbf0773293c7Phil Burk return AUDIO_FORMAT_DTS; 60e12189dee6504cf793d37f5689a7bbf0773293c7Phil Burk case ENCODING_DTS_HD: 61e12189dee6504cf793d37f5689a7bbf0773293c7Phil Burk return AUDIO_FORMAT_DTS_HD; 62cae346633321e237f824f3ca10d7e6fff2307b2fEric Laurent case ENCODING_MP3: 63cae346633321e237f824f3ca10d7e6fff2307b2fEric Laurent return AUDIO_FORMAT_MP3; 64cae346633321e237f824f3ca10d7e6fff2307b2fEric Laurent case ENCODING_AAC_LC: 65cae346633321e237f824f3ca10d7e6fff2307b2fEric Laurent return AUDIO_FORMAT_AAC_LC; 66cae346633321e237f824f3ca10d7e6fff2307b2fEric Laurent case ENCODING_AAC_HE_V1: 67cae346633321e237f824f3ca10d7e6fff2307b2fEric Laurent return AUDIO_FORMAT_AAC_HE_V1; 68cae346633321e237f824f3ca10d7e6fff2307b2fEric Laurent case ENCODING_AAC_HE_V2: 69cae346633321e237f824f3ca10d7e6fff2307b2fEric Laurent return AUDIO_FORMAT_AAC_HE_V2; 70b4fae5ba3980df1690492c70deb134e31bef5b4dEric Laurent case ENCODING_DOLBY_TRUEHD: 71b4fae5ba3980df1690492c70deb134e31bef5b4dEric Laurent return AUDIO_FORMAT_DOLBY_TRUEHD; 7243f4b276a56e6fb5a3c9637c0e3a6865657e3be7Phil Burk case ENCODING_IEC61937: 7343f4b276a56e6fb5a3c9637c0e3a6865657e3be7Phil Burk return AUDIO_FORMAT_IEC61937; 74b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent case ENCODING_DEFAULT: 75b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent return AUDIO_FORMAT_DEFAULT; 76fe834d30f4f3f51b754d55fecb36f11279733948Glenn Kasten default: 77fe834d30f4f3f51b754d55fecb36f11279733948Glenn Kasten return AUDIO_FORMAT_INVALID; 78fe834d30f4f3f51b754d55fecb36f11279733948Glenn Kasten } 79fe834d30f4f3f51b754d55fecb36f11279733948Glenn Kasten} 80fe834d30f4f3f51b754d55fecb36f11279733948Glenn Kasten 81b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurentstatic inline int audioFormatFromNative(audio_format_t nativeFormat) 82b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent{ 83b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent switch (nativeFormat) { 84b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent case AUDIO_FORMAT_PCM_16_BIT: 85b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent return ENCODING_PCM_16BIT; 86b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent case AUDIO_FORMAT_PCM_8_BIT: 87b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent return ENCODING_PCM_8BIT; 88b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent case AUDIO_FORMAT_PCM_FLOAT: 89b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent return ENCODING_PCM_FLOAT; 904e5e9e9405dc626a03a653161644841102ad89f1Paul McLean 914e5e9e9405dc626a03a653161644841102ad89f1Paul McLean // map these to ENCODING_PCM_FLOAT 924e5e9e9405dc626a03a653161644841102ad89f1Paul McLean case AUDIO_FORMAT_PCM_8_24_BIT: 934e5e9e9405dc626a03a653161644841102ad89f1Paul McLean case AUDIO_FORMAT_PCM_24_BIT_PACKED: 944e5e9e9405dc626a03a653161644841102ad89f1Paul McLean case AUDIO_FORMAT_PCM_32_BIT: 954e5e9e9405dc626a03a653161644841102ad89f1Paul McLean return ENCODING_PCM_FLOAT; 964e5e9e9405dc626a03a653161644841102ad89f1Paul McLean 97ff0d9f098e51c54e1a030ed21fd980680cb7b405Eric Laurent case AUDIO_FORMAT_AC3: 98ff0d9f098e51c54e1a030ed21fd980680cb7b405Eric Laurent return ENCODING_AC3; 99ff0d9f098e51c54e1a030ed21fd980680cb7b405Eric Laurent case AUDIO_FORMAT_E_AC3: 100ff0d9f098e51c54e1a030ed21fd980680cb7b405Eric Laurent return ENCODING_E_AC3; 101e12189dee6504cf793d37f5689a7bbf0773293c7Phil Burk case AUDIO_FORMAT_DTS: 102e12189dee6504cf793d37f5689a7bbf0773293c7Phil Burk return ENCODING_DTS; 103e12189dee6504cf793d37f5689a7bbf0773293c7Phil Burk case AUDIO_FORMAT_DTS_HD: 104e12189dee6504cf793d37f5689a7bbf0773293c7Phil Burk return ENCODING_DTS_HD; 105cae346633321e237f824f3ca10d7e6fff2307b2fEric Laurent case AUDIO_FORMAT_MP3: 106cae346633321e237f824f3ca10d7e6fff2307b2fEric Laurent return ENCODING_MP3; 107cae346633321e237f824f3ca10d7e6fff2307b2fEric Laurent case AUDIO_FORMAT_AAC_LC: 108cae346633321e237f824f3ca10d7e6fff2307b2fEric Laurent return ENCODING_AAC_LC; 109cae346633321e237f824f3ca10d7e6fff2307b2fEric Laurent case AUDIO_FORMAT_AAC_HE_V1: 110cae346633321e237f824f3ca10d7e6fff2307b2fEric Laurent return ENCODING_AAC_HE_V1; 111cae346633321e237f824f3ca10d7e6fff2307b2fEric Laurent case AUDIO_FORMAT_AAC_HE_V2: 112cae346633321e237f824f3ca10d7e6fff2307b2fEric Laurent return ENCODING_AAC_HE_V2; 11343f4b276a56e6fb5a3c9637c0e3a6865657e3be7Phil Burk case AUDIO_FORMAT_IEC61937: 11443f4b276a56e6fb5a3c9637c0e3a6865657e3be7Phil Burk return ENCODING_IEC61937; 115b4fae5ba3980df1690492c70deb134e31bef5b4dEric Laurent case AUDIO_FORMAT_DOLBY_TRUEHD: 116b4fae5ba3980df1690492c70deb134e31bef5b4dEric Laurent return ENCODING_DOLBY_TRUEHD; 117b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent case AUDIO_FORMAT_DEFAULT: 118b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent return ENCODING_DEFAULT; 119b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent default: 120b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent return ENCODING_INVALID; 121b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent } 122b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent} 123b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent 124b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurentstatic inline audio_channel_mask_t outChannelMaskToNative(int channelMask) 125b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent{ 126b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent switch (channelMask) { 127b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent case CHANNEL_OUT_DEFAULT: 128b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent case CHANNEL_INVALID: 129b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent return AUDIO_CHANNEL_NONE; 130b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent default: 131b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent return (audio_channel_mask_t)(channelMask>>2); 132b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent } 133b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent} 134b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent 135b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurentstatic inline int outChannelMaskFromNative(audio_channel_mask_t nativeMask) 136b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent{ 137b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent switch (nativeMask) { 138b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent case AUDIO_CHANNEL_NONE: 139b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent return CHANNEL_OUT_DEFAULT; 140b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent default: 141b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent return (int)nativeMask<<2; 142b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent } 143b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent} 144b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent 145b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurentstatic inline audio_channel_mask_t inChannelMaskToNative(int channelMask) 146b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent{ 147b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent return (audio_channel_mask_t)channelMask; 148b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent} 149b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent 150b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurentstatic inline int inChannelMaskFromNative(audio_channel_mask_t nativeMask) 151b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent{ 152b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent return (int)nativeMask; 153b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent} 154b69681c894c663e84f2826d9b0c832ceb9b45047Eric Laurent 155fe834d30f4f3f51b754d55fecb36f11279733948Glenn Kasten#endif // ANDROID_MEDIA_AUDIOFORMAT_H 156