1*bebae9c0SAndroid Build Coastguard Worker /*
2*bebae9c0SAndroid Build Coastguard Worker * Copyright (C) 2010 The Android Open Source Project
3*bebae9c0SAndroid Build Coastguard Worker *
4*bebae9c0SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*bebae9c0SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*bebae9c0SAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*bebae9c0SAndroid Build Coastguard Worker *
8*bebae9c0SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*bebae9c0SAndroid Build Coastguard Worker *
10*bebae9c0SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*bebae9c0SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*bebae9c0SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*bebae9c0SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*bebae9c0SAndroid Build Coastguard Worker * limitations under the License.
15*bebae9c0SAndroid Build Coastguard Worker */
16*bebae9c0SAndroid Build Coastguard Worker
17*bebae9c0SAndroid Build Coastguard Worker /** \file OpenSLESUT.c OpenSL ES Utility Toolkit */
18*bebae9c0SAndroid Build Coastguard Worker
19*bebae9c0SAndroid Build Coastguard Worker #include <SLES/OpenSLES.h>
20*bebae9c0SAndroid Build Coastguard Worker #include <OMXAL/OpenMAXAL.h>
21*bebae9c0SAndroid Build Coastguard Worker #ifdef ANDROID
22*bebae9c0SAndroid Build Coastguard Worker #include <SLES/OpenSLES_Android.h>
23*bebae9c0SAndroid Build Coastguard Worker #include <OMXAL/OpenMAXAL_Android.h>
24*bebae9c0SAndroid Build Coastguard Worker #endif
25*bebae9c0SAndroid Build Coastguard Worker #include "OpenSLESUT.h"
26*bebae9c0SAndroid Build Coastguard Worker #include <stdio.h>
27*bebae9c0SAndroid Build Coastguard Worker #include <string.h>
28*bebae9c0SAndroid Build Coastguard Worker
29*bebae9c0SAndroid Build Coastguard Worker
30*bebae9c0SAndroid Build Coastguard Worker /** \brief Maps an interface ID to its display name */
31*bebae9c0SAndroid Build Coastguard Worker
32*bebae9c0SAndroid Build Coastguard Worker typedef struct
33*bebae9c0SAndroid Build Coastguard Worker {
34*bebae9c0SAndroid Build Coastguard Worker const SLInterfaceID *iid; ///< The interface ID
35*bebae9c0SAndroid Build Coastguard Worker const char *name; ///< The display name
36*bebae9c0SAndroid Build Coastguard Worker } Pair;
37*bebae9c0SAndroid Build Coastguard Worker
38*bebae9c0SAndroid Build Coastguard Worker // ## is token concatenation e.g. a##b becomes ab
39*bebae9c0SAndroid Build Coastguard Worker // # is stringize operator to convert a symbol to a string constant e.g. #a becomes "a"
40*bebae9c0SAndroid Build Coastguard Worker
41*bebae9c0SAndroid Build Coastguard Worker #define _(x) { &SL_IID_##x, "SL_IID_" #x }
42*bebae9c0SAndroid Build Coastguard Worker #define _X(x) { (const SLInterfaceID *) &XA_IID_##x, "XA_IID_" #x }
43*bebae9c0SAndroid Build Coastguard Worker
44*bebae9c0SAndroid Build Coastguard Worker /** \brief Array of mappings from interface IDs to display names */
45*bebae9c0SAndroid Build Coastguard Worker
46*bebae9c0SAndroid Build Coastguard Worker static Pair pairs[] = {
47*bebae9c0SAndroid Build Coastguard Worker _(3DCOMMIT),
48*bebae9c0SAndroid Build Coastguard Worker _(3DDOPPLER),
49*bebae9c0SAndroid Build Coastguard Worker _(3DGROUPING),
50*bebae9c0SAndroid Build Coastguard Worker _(3DLOCATION),
51*bebae9c0SAndroid Build Coastguard Worker _(3DMACROSCOPIC),
52*bebae9c0SAndroid Build Coastguard Worker _(3DSOURCE),
53*bebae9c0SAndroid Build Coastguard Worker _(AUDIODECODERCAPABILITIES),
54*bebae9c0SAndroid Build Coastguard Worker _(AUDIOENCODER),
55*bebae9c0SAndroid Build Coastguard Worker _(AUDIOENCODERCAPABILITIES),
56*bebae9c0SAndroid Build Coastguard Worker _(AUDIOIODEVICECAPABILITIES),
57*bebae9c0SAndroid Build Coastguard Worker _(BASSBOOST),
58*bebae9c0SAndroid Build Coastguard Worker _(BUFFERQUEUE),
59*bebae9c0SAndroid Build Coastguard Worker _(DEVICEVOLUME),
60*bebae9c0SAndroid Build Coastguard Worker _(DYNAMICINTERFACEMANAGEMENT),
61*bebae9c0SAndroid Build Coastguard Worker _(DYNAMICSOURCE),
62*bebae9c0SAndroid Build Coastguard Worker _(EFFECTSEND),
63*bebae9c0SAndroid Build Coastguard Worker _(ENGINE),
64*bebae9c0SAndroid Build Coastguard Worker _(ENGINECAPABILITIES),
65*bebae9c0SAndroid Build Coastguard Worker _(ENVIRONMENTALREVERB),
66*bebae9c0SAndroid Build Coastguard Worker _(EQUALIZER),
67*bebae9c0SAndroid Build Coastguard Worker _(LED),
68*bebae9c0SAndroid Build Coastguard Worker _(METADATAEXTRACTION),
69*bebae9c0SAndroid Build Coastguard Worker _(METADATATRAVERSAL),
70*bebae9c0SAndroid Build Coastguard Worker _(MIDIMESSAGE),
71*bebae9c0SAndroid Build Coastguard Worker _(MIDIMUTESOLO),
72*bebae9c0SAndroid Build Coastguard Worker _(MIDITEMPO),
73*bebae9c0SAndroid Build Coastguard Worker _(MIDITIME),
74*bebae9c0SAndroid Build Coastguard Worker _(MUTESOLO),
75*bebae9c0SAndroid Build Coastguard Worker _(NULL),
76*bebae9c0SAndroid Build Coastguard Worker _(OBJECT),
77*bebae9c0SAndroid Build Coastguard Worker _(OUTPUTMIX),
78*bebae9c0SAndroid Build Coastguard Worker _(PITCH),
79*bebae9c0SAndroid Build Coastguard Worker _(PLAY),
80*bebae9c0SAndroid Build Coastguard Worker _(PLAYBACKRATE),
81*bebae9c0SAndroid Build Coastguard Worker _(PREFETCHSTATUS),
82*bebae9c0SAndroid Build Coastguard Worker _(PRESETREVERB),
83*bebae9c0SAndroid Build Coastguard Worker _(RATEPITCH),
84*bebae9c0SAndroid Build Coastguard Worker _(RECORD),
85*bebae9c0SAndroid Build Coastguard Worker _(SEEK),
86*bebae9c0SAndroid Build Coastguard Worker _(THREADSYNC),
87*bebae9c0SAndroid Build Coastguard Worker _(VIBRA),
88*bebae9c0SAndroid Build Coastguard Worker _(VIRTUALIZER),
89*bebae9c0SAndroid Build Coastguard Worker _(VISUALIZATION),
90*bebae9c0SAndroid Build Coastguard Worker _(VOLUME),
91*bebae9c0SAndroid Build Coastguard Worker #if 0 // ifdef USE_OUTPUTMIXEXT
92*bebae9c0SAndroid Build Coastguard Worker _(OUTPUTMIXEXT),
93*bebae9c0SAndroid Build Coastguard Worker #endif
94*bebae9c0SAndroid Build Coastguard Worker _X(ENGINE),
95*bebae9c0SAndroid Build Coastguard Worker _X(VIDEODECODERCAPABILITIES),
96*bebae9c0SAndroid Build Coastguard Worker #ifdef ANDROID
97*bebae9c0SAndroid Build Coastguard Worker _(ANDROIDEFFECT),
98*bebae9c0SAndroid Build Coastguard Worker _(ANDROIDEFFECTCAPABILITIES),
99*bebae9c0SAndroid Build Coastguard Worker _(ANDROIDEFFECTSEND),
100*bebae9c0SAndroid Build Coastguard Worker _(ANDROIDCONFIGURATION),
101*bebae9c0SAndroid Build Coastguard Worker _(ANDROIDSIMPLEBUFFERQUEUE),
102*bebae9c0SAndroid Build Coastguard Worker _(ANDROIDBUFFERQUEUESOURCE),
103*bebae9c0SAndroid Build Coastguard Worker _(ANDROIDACOUSTICECHOCANCELLATION),
104*bebae9c0SAndroid Build Coastguard Worker _(ANDROIDAUTOMATICGAINCONTROL),
105*bebae9c0SAndroid Build Coastguard Worker _(ANDROIDNOISESUPPRESSION)
106*bebae9c0SAndroid Build Coastguard Worker #endif
107*bebae9c0SAndroid Build Coastguard Worker };
108*bebae9c0SAndroid Build Coastguard Worker
109*bebae9c0SAndroid Build Coastguard Worker
110*bebae9c0SAndroid Build Coastguard Worker /** \brief Print an interface ID in human-readable format */
111*bebae9c0SAndroid Build Coastguard Worker
slesutPrintIID(SLInterfaceID iid)112*bebae9c0SAndroid Build Coastguard Worker void slesutPrintIID(SLInterfaceID iid)
113*bebae9c0SAndroid Build Coastguard Worker {
114*bebae9c0SAndroid Build Coastguard Worker Pair *p;
115*bebae9c0SAndroid Build Coastguard Worker const Pair *end = &pairs[sizeof(pairs)/sizeof(pairs[0])];
116*bebae9c0SAndroid Build Coastguard Worker for (p = pairs; p != end; ++p) {
117*bebae9c0SAndroid Build Coastguard Worker if (!memcmp(*p->iid, iid, sizeof(struct SLInterfaceID_))) {
118*bebae9c0SAndroid Build Coastguard Worker printf("SL_IID_%s = ", p->name);
119*bebae9c0SAndroid Build Coastguard Worker break;
120*bebae9c0SAndroid Build Coastguard Worker }
121*bebae9c0SAndroid Build Coastguard Worker }
122*bebae9c0SAndroid Build Coastguard Worker printf(
123*bebae9c0SAndroid Build Coastguard Worker "{ 0x%08X, 0x%04X, 0x%04X, 0x%04X, { 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X } }\n",
124*bebae9c0SAndroid Build Coastguard Worker (unsigned) iid->time_low, iid->time_mid, iid->time_hi_and_version, iid->clock_seq,
125*bebae9c0SAndroid Build Coastguard Worker iid->node[0], iid->node[1], iid->node[2], iid->node[3], iid->node[4], iid->node[5]);
126*bebae9c0SAndroid Build Coastguard Worker }
127*bebae9c0SAndroid Build Coastguard Worker
128*bebae9c0SAndroid Build Coastguard Worker
129*bebae9c0SAndroid Build Coastguard Worker /** \brief Print an array of interface IDs in human-readable format,
130*bebae9c0SAndroid Build Coastguard Worker * including whether they are required or optional
131*bebae9c0SAndroid Build Coastguard Worker */
132*bebae9c0SAndroid Build Coastguard Worker
slesutPrintIIDs(SLInterfaceID * pInterfaceIds,SLboolean * pInterfaceRequired,unsigned numInterfaces)133*bebae9c0SAndroid Build Coastguard Worker void slesutPrintIIDs(SLInterfaceID *pInterfaceIds, SLboolean *pInterfaceRequired,
134*bebae9c0SAndroid Build Coastguard Worker unsigned numInterfaces)
135*bebae9c0SAndroid Build Coastguard Worker {
136*bebae9c0SAndroid Build Coastguard Worker unsigned i;
137*bebae9c0SAndroid Build Coastguard Worker for (i = 0; i < numInterfaces; ++i) {
138*bebae9c0SAndroid Build Coastguard Worker printf("interfaces[%u]=", i);
139*bebae9c0SAndroid Build Coastguard Worker slesutPrintIID(pInterfaceIds[i]);
140*bebae9c0SAndroid Build Coastguard Worker printf(" %s\n", (unsigned) pInterfaceRequired[i] ? "required" : "optional");
141*bebae9c0SAndroid Build Coastguard Worker }
142*bebae9c0SAndroid Build Coastguard Worker }
143*bebae9c0SAndroid Build Coastguard Worker
144*bebae9c0SAndroid Build Coastguard Worker
145*bebae9c0SAndroid Build Coastguard Worker /** \brief Convert an object ID to a string or NULL. */
146*bebae9c0SAndroid Build Coastguard Worker
slesutObjectIDToString(SLuint32 objectID)147*bebae9c0SAndroid Build Coastguard Worker const char *slesutObjectIDToString(SLuint32 objectID)
148*bebae9c0SAndroid Build Coastguard Worker {
149*bebae9c0SAndroid Build Coastguard Worker static const char * const objectIDstrings[10] = {
150*bebae9c0SAndroid Build Coastguard Worker "SL_OBJECTID_ENGINE",
151*bebae9c0SAndroid Build Coastguard Worker "SL_OBJECTID_LEDDEVICE",
152*bebae9c0SAndroid Build Coastguard Worker "SL_OBJECTID_VIBRADEVICE",
153*bebae9c0SAndroid Build Coastguard Worker "SL_OBJECTID_AUDIOPLAYER",
154*bebae9c0SAndroid Build Coastguard Worker "SL_OBJECTID_AUDIORECORDER",
155*bebae9c0SAndroid Build Coastguard Worker "SL_OBJECTID_MIDIPLAYER",
156*bebae9c0SAndroid Build Coastguard Worker "SL_OBJECTID_LISTENER",
157*bebae9c0SAndroid Build Coastguard Worker "SL_OBJECTID_3DGROUP",
158*bebae9c0SAndroid Build Coastguard Worker "SL_OBJECTID_OUTPUTMIX",
159*bebae9c0SAndroid Build Coastguard Worker "SL_OBJECTID_METADATAEXTRACTOR"
160*bebae9c0SAndroid Build Coastguard Worker };
161*bebae9c0SAndroid Build Coastguard Worker return (0x1001 <= objectID) && (objectID <= 0x100A) ? objectIDstrings[objectID - 0x1001] : NULL;
162*bebae9c0SAndroid Build Coastguard Worker }
163