1104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten/*
2104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten * Copyright (C) 2010 The Android Open Source Project
3104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten *
4104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten * Licensed under the Apache License, Version 2.0 (the "License");
5104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten * you may not use this file except in compliance with the License.
6104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten * You may obtain a copy of the License at
7104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten *
8104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten *      http://www.apache.org/licenses/LICENSE-2.0
9104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten *
10104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten * Unless required by applicable law or agreed to in writing, software
11104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten * distributed under the License is distributed on an "AS IS" BASIS,
12104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten * See the License for the specific language governing permissions and
14104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten * limitations under the License.
15104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten */
16104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten
17104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten// Map minimal perfect hash of an interface ID to its name
18104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten
19b0ab2dee391dd2cb257faeaba252ee6ecccc5f03Glenn Kasten#include <assert.h>
20b0ab2dee391dd2cb257faeaba252ee6ecccc5f03Glenn Kasten#include <string.h>
21104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten#include "MPH.h"
22104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten
23104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kastenconst char * const interface_names[MPH_MAX] = {
24b0ab2dee391dd2cb257faeaba252ee6ecccc5f03Glenn Kasten
25b0ab2dee391dd2cb257faeaba252ee6ecccc5f03Glenn Kasten    // OpenSL ES 1.0.1 interfaces
26104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "3DCOMMIT",
27104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "3DDOPPLER",
28104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "3DGROUPING",
29104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "3DLOCATION",
30104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "3DMACROSCOPIC",
31104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "3DSOURCE",
32104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "AUDIODECODERCAPABILITIES",
33104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "AUDIOENCODER",
34104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "AUDIOENCODERCAPABILITIES",
35104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "AUDIOIODEVICECAPABILITIES",
36104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "BASSBOOST",
37104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "BUFFERQUEUE",
38104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "DEVICEVOLUME",
39104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "DYNAMICINTERFACEMANAGEMENT",
40104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "DYNAMICSOURCE",
41104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "EFFECTSEND",
42104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "ENGINE",
43104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "ENGINECAPABILITIES",
44104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "ENVIRONMENTALREVERB",
45104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "EQUALIZER",
46104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "LED",
47104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "METADATAEXTRACTION",
48104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "METADATATRAVERSAL",
49104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "MIDIMESSAGE",
50104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "MIDIMUTESOLO",
51104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "MIDITEMPO",
52104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "MIDITIME",
53104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "MUTESOLO",
54104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "NULL",
55104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "OBJECT",
56104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "OUTPUTMIX",
57104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "PITCH",
58104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "PLAY",
59104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "PLAYBACKRATE",
60104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "PREFETCHSTATUS",
61104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "PRESETREVERB",
62104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "RATEPITCH",
63104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "RECORD",
64104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "SEEK",
65104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "THREADSYNC",
66104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "VIBRA",
67104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "VIRTUALIZER",
68104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "VISUALIZATION",
69104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "VOLUME",
70b0ab2dee391dd2cb257faeaba252ee6ecccc5f03Glenn Kasten
71b0ab2dee391dd2cb257faeaba252ee6ecccc5f03Glenn Kasten    // Wilhelm desktop extended interfaces
72104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "OUTPUTMIXEXT",
73b0ab2dee391dd2cb257faeaba252ee6ecccc5f03Glenn Kasten
74b0ab2dee391dd2cb257faeaba252ee6ecccc5f03Glenn Kasten    // Android API level 9 extended interfaces
75104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "ANDROIDEFFECT",
76104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "ANDROIDEFFECTCAPABILITIES",
77104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "ANDROIDEFFECTSEND",
78104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten    "ANDROIDCONFIGURATION",
7928bc6b725c207fb8fbd618caea4aa127f35ce1e1Jean-Michel Trivi    "ANDROIDSIMPLEBUFFERQUEUE",
80b0ab2dee391dd2cb257faeaba252ee6ecccc5f03Glenn Kasten
81a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    // Android API level 12 extended interfaces
8260ca9f9ef02f6e486c3338cb811f603dd7825c05Glenn Kasten    "ANDROIDBUFFERQUEUESOURCE",
838db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten
84a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    // OpenMAX AL 1.0.1 interfaces
85a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    "XAAUDIODECODERCAPABILITIES",
86a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    "XAAUDIOENCODER",
87a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    "XAAUDIOENCODERCAPABILITIES",
88a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    "XAAUDIOIODEVICECAPABILITIES",
89a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    "XACAMERA",
90a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    "XACAMERACAPABILITIES",
91a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    "XACONFIGEXTENSION",
92a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    "XADEVICEVOLUME",
93a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    "XADYNAMICINTERFACEMANAGEMENT",
94a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    "XADYNAMICSOURCE",
958db0b106cdce5f5216b1535492de7930ad738aedGlenn Kasten    "XAENGINE",
96a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    "XAEQUALIZER",
97a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    "XAIMAGECONTROLS",
98a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    "XAIMAGEDECODERCAPABILITIES",
99a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    "XAIMAGEEFFECTS",
100a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    "XAIMAGEENCODER",
101a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    "XAIMAGEENCODERCAPABILITIES",
102a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    "XALED",
103a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    "XAMETADATAEXTRACTION",
104a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    "XAMETADATAINSERTION",
105a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    "XAMETADATATRAVERSAL",
106a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    // "XANULL",
107a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    "XAOBJECT",
108a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    "XAOUTPUTMIX",
10994a37e8117fb72790882dfb815f99e2365754c74Glenn Kasten    "XAPLAY",
110a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    "XAPLAYBACKRATE",
111a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    "XAPREFETCHSTATUS",
112a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    "XARADIO",
113a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    "XARDS",
114a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    "XARECORD",
115a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    "XASEEK",
116a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    "XASNAPSHOT",
1178ca039e1f9d95f8b14a59e135426882e3470e9d9Glenn Kasten    "XASTREAMINFORMATION",
118a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    "XATHREADSYNC",
119a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    "XAVIBRA",
120a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    "XAVIDEODECODERCAPABILITIES",
121a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    "XAVIDEOENCODER",
122a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    "XAVIDEOENCODERCAPABILITIES",
123a361b51914aeb5f8f65c7ecad719d1e01f90913bGlenn Kasten    "XAVIDEOPOSTPROCESSING",
12437dc2fccf3f122b79ebd554de209d0a3c94ae161Jean-Michel Trivi    "XAVOLUME",
125b0ab2dee391dd2cb257faeaba252ee6ecccc5f03Glenn Kasten
126104c000a6f36b871ca11e0394db1e5217f374cafGlenn Kasten};
127b0ab2dee391dd2cb257faeaba252ee6ecccc5f03Glenn Kasten
128b0ab2dee391dd2cb257faeaba252ee6ecccc5f03Glenn Kasten
129b0ab2dee391dd2cb257faeaba252ee6ecccc5f03Glenn Kasten/** Convert an MPH value to an MPH identifier */
130b0ab2dee391dd2cb257faeaba252ee6ecccc5f03Glenn Kasten
131b0ab2dee391dd2cb257faeaba252ee6ecccc5f03Glenn Kastenvoid MPH_to_MPH_string(unsigned MPH, char buffer[40])
132b0ab2dee391dd2cb257faeaba252ee6ecccc5f03Glenn Kasten{
133b0ab2dee391dd2cb257faeaba252ee6ecccc5f03Glenn Kasten    assert(MPH_MAX > MPH);
134b0ab2dee391dd2cb257faeaba252ee6ecccc5f03Glenn Kasten    const char *infix;
135b0ab2dee391dd2cb257faeaba252ee6ecccc5f03Glenn Kasten    infix = "";
136b0ab2dee391dd2cb257faeaba252ee6ecccc5f03Glenn Kasten    strcpy(buffer, "MPH");
137b0ab2dee391dd2cb257faeaba252ee6ecccc5f03Glenn Kasten    strcpy(&buffer[3], infix);
138b0ab2dee391dd2cb257faeaba252ee6ecccc5f03Glenn Kasten    strcat(buffer, "_");
139b0ab2dee391dd2cb257faeaba252ee6ecccc5f03Glenn Kasten    strcat(buffer, interface_names[MPH]);
140b0ab2dee391dd2cb257faeaba252ee6ecccc5f03Glenn Kasten}
141