channels.c revision 680943a4c349712f641b7577e5b0a3fdf49e39d9
1ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten/* 2ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten * Copyright (C) 2015 The Android Open Source Project 3ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten * 4ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten * Licensed under the Apache License, Version 2.0 (the "License"); 5ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten * you may not use this file except in compliance with the License. 6ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten * You may obtain a copy of the License at 7ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten * 8ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten * http://www.apache.org/licenses/LICENSE-2.0 9ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten * 10ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten * Unless required by applicable law or agreed to in writing, software 11ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten * distributed under the License is distributed on an "AS IS" BASIS, 12ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten * See the License for the specific language governing permissions and 14ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten * limitations under the License. 15ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten */ 16ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten 17ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten#include <SLES/OpenSLES.h> 18680943a4c349712f641b7577e5b0a3fdf49e39d9Glenn Kasten#include <system/audio.h> 19ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten#include "channels.h" 20ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten 21ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten// Return an OpenSL ES channel mask, as used in SLDataFormat_PCM.channelMask 22ff25010cb77455a46357d6dd012631a2599d7bf4Glenn KastenSLuint32 channelCountToMask(unsigned channelCount) 23ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten{ 24ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten // FIXME channel mask is not yet implemented by Stagefright, so use a reasonable default 25ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten // that is computed from the channel count 26680943a4c349712f641b7577e5b0a3fdf49e39d9Glenn Kasten if (channelCount > FCC_8) { 27680943a4c349712f641b7577e5b0a3fdf49e39d9Glenn Kasten return UNKNOWN_CHANNELMASK; 28680943a4c349712f641b7577e5b0a3fdf49e39d9Glenn Kasten } 29ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten switch (channelCount) { 30ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten case 1: 31ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten // see explanation in data.c re: default channel mask for mono 32ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten return SL_SPEAKER_FRONT_LEFT; 33ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten case 2: 34ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten return SL_SPEAKER_FRONT_LEFT | SL_SPEAKER_FRONT_RIGHT; 35ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten // Android-specific 3684bbadf848f606ff28273baf26fc246cf967059aAndy Hung case 3: 3784bbadf848f606ff28273baf26fc246cf967059aAndy Hung return SL_SPEAKER_FRONT_LEFT | SL_SPEAKER_FRONT_RIGHT | SL_SPEAKER_FRONT_CENTER; 38ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten case 4: 39ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten return SL_ANDROID_SPEAKER_QUAD; 4084bbadf848f606ff28273baf26fc246cf967059aAndy Hung case 5: 4184bbadf848f606ff28273baf26fc246cf967059aAndy Hung return SL_ANDROID_SPEAKER_QUAD | SL_SPEAKER_FRONT_CENTER; 42ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten case 6: 43ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten return SL_ANDROID_SPEAKER_5DOT1; 4484bbadf848f606ff28273baf26fc246cf967059aAndy Hung case 7: 4584bbadf848f606ff28273baf26fc246cf967059aAndy Hung return SL_ANDROID_SPEAKER_5DOT1 | SL_SPEAKER_BACK_CENTER; 46ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten case 8: 47ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten return SL_ANDROID_SPEAKER_7DOT1; 48ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten default: 49ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten return UNKNOWN_CHANNELMASK; 50ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten } 51ff25010cb77455a46357d6dd012631a2599d7bf4Glenn Kasten} 52