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