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