1df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi/* 2df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi * Copyright (C) 2014 The Android Open Source Project 3df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi * 4df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi * Licensed under the Apache License, Version 2.0 (the "License"); 5df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi * you may not use this file except in compliance with the License. 6df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi * You may obtain a copy of the License at 7df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi * 8df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi * http://www.apache.org/licenses/LICENSE-2.0 9df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi * 10df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi * Unless required by applicable law or agreed to in writing, software 11df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi * distributed under the License is distributed on an "AS IS" BASIS, 12df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi * See the License for the specific language governing permissions and 14df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi * limitations under the License. 15df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi */ 16df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi#ifndef AUDIO_POLICY_HELPER_H_ 17df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi#define AUDIO_POLICY_HELPER_H_ 18df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi 19df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi#include <system/audio.h> 20df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi 21e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurentstatic audio_stream_type_t audio_attributes_to_stream_type(const audio_attributes_t *attr) 22df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi{ 23df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi // flags to stream type mapping 24df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi if ((attr->flags & AUDIO_FLAG_AUDIBILITY_ENFORCED) == AUDIO_FLAG_AUDIBILITY_ENFORCED) { 25df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi return AUDIO_STREAM_ENFORCED_AUDIBLE; 26df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi } 27df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi if ((attr->flags & AUDIO_FLAG_SCO) == AUDIO_FLAG_SCO) { 28df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi return AUDIO_STREAM_BLUETOOTH_SCO; 29df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi } 30df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi 31df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi // usage to stream type mapping 32df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi switch (attr->usage) { 33df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi case AUDIO_USAGE_MEDIA: 34df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi case AUDIO_USAGE_GAME: 35df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi case AUDIO_USAGE_ASSISTANCE_ACCESSIBILITY: 36df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi case AUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE: 37df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi return AUDIO_STREAM_MUSIC; 38df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi case AUDIO_USAGE_ASSISTANCE_SONIFICATION: 39df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi return AUDIO_STREAM_SYSTEM; 40df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi case AUDIO_USAGE_VOICE_COMMUNICATION: 41df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi return AUDIO_STREAM_VOICE_CALL; 42df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi 43df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi case AUDIO_USAGE_VOICE_COMMUNICATION_SIGNALLING: 44df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi return AUDIO_STREAM_DTMF; 45df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi 46df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi case AUDIO_USAGE_ALARM: 47df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi return AUDIO_STREAM_ALARM; 48df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi case AUDIO_USAGE_NOTIFICATION_TELEPHONY_RINGTONE: 49df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi return AUDIO_STREAM_RING; 50df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi 51df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi case AUDIO_USAGE_NOTIFICATION: 52df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi case AUDIO_USAGE_NOTIFICATION_COMMUNICATION_REQUEST: 53df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi case AUDIO_USAGE_NOTIFICATION_COMMUNICATION_INSTANT: 54df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi case AUDIO_USAGE_NOTIFICATION_COMMUNICATION_DELAYED: 55df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi case AUDIO_USAGE_NOTIFICATION_EVENT: 56df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi return AUDIO_STREAM_NOTIFICATION; 57df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi 58df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi case AUDIO_USAGE_UNKNOWN: 59df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi default: 60df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi return AUDIO_STREAM_MUSIC; 61df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi } 62df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi} 63df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi 64e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurentstatic void stream_type_to_audio_attributes(audio_stream_type_t streamType, 65e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent audio_attributes_t *attr) { 66275e8e9de2e11b4b344f5a201f1f0e51fda02d9cEric Laurent memset(attr, 0, sizeof(audio_attributes_t)); 67e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent 68e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent switch (streamType) { 69e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent case AUDIO_STREAM_DEFAULT: 70e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent case AUDIO_STREAM_MUSIC: 71e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent attr->content_type = AUDIO_CONTENT_TYPE_MUSIC; 72e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent attr->usage = AUDIO_USAGE_MEDIA; 73e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent break; 74e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent case AUDIO_STREAM_VOICE_CALL: 75e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent attr->content_type = AUDIO_CONTENT_TYPE_SPEECH; 76e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent attr->usage = AUDIO_USAGE_VOICE_COMMUNICATION; 77e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent break; 78e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent case AUDIO_STREAM_ENFORCED_AUDIBLE: 79e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent attr->flags |= AUDIO_FLAG_AUDIBILITY_ENFORCED; 80e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent // intended fall through, attributes in common with STREAM_SYSTEM 81e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent case AUDIO_STREAM_SYSTEM: 82e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent attr->content_type = AUDIO_CONTENT_TYPE_SONIFICATION; 83e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent attr->usage = AUDIO_USAGE_ASSISTANCE_SONIFICATION; 84e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent break; 85e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent case AUDIO_STREAM_RING: 86e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent attr->content_type = AUDIO_CONTENT_TYPE_SONIFICATION; 87e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent attr->usage = AUDIO_USAGE_NOTIFICATION_TELEPHONY_RINGTONE; 88e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent break; 89e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent case AUDIO_STREAM_ALARM: 90e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent attr->content_type = AUDIO_CONTENT_TYPE_SONIFICATION; 91e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent attr->usage = AUDIO_USAGE_ALARM; 92e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent break; 93e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent case AUDIO_STREAM_NOTIFICATION: 94e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent attr->content_type = AUDIO_CONTENT_TYPE_SONIFICATION; 95e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent attr->usage = AUDIO_USAGE_NOTIFICATION; 96e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent break; 97e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent case AUDIO_STREAM_BLUETOOTH_SCO: 98e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent attr->content_type = AUDIO_CONTENT_TYPE_SPEECH; 99e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent attr->usage = AUDIO_USAGE_VOICE_COMMUNICATION; 100e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent attr->flags |= AUDIO_FLAG_SCO; 101e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent break; 102e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent case AUDIO_STREAM_DTMF: 103e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent attr->content_type = AUDIO_CONTENT_TYPE_SONIFICATION; 104e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent attr->usage = AUDIO_USAGE_VOICE_COMMUNICATION_SIGNALLING; 105e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent break; 106e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent case AUDIO_STREAM_TTS: 107e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent attr->content_type = AUDIO_CONTENT_TYPE_SPEECH; 108e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent attr->usage = AUDIO_USAGE_ASSISTANCE_ACCESSIBILITY; 109e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent break; 110e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent default: 111e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent ALOGE("invalid stream type %d when converting to attributes", streamType); 112e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent } 113e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent} 114e83b55dc29ca16092ba02f36f55fa6e0e37fd78cEric Laurent 115df813a3ba59109ca519ce0cb00a1a9144074f40eJean-Michel Trivi#endif //AUDIO_POLICY_HELPER_H_ 116