OSDN Git Service

original
[gb-231r1-is01/GB_2.3_IS01.git] / system / media / opensles / tests / examples / slesTestEffectCapabilities.cpp
diff --git a/system/media/opensles/tests/examples/slesTestEffectCapabilities.cpp b/system/media/opensles/tests/examples/slesTestEffectCapabilities.cpp
new file mode 100644 (file)
index 0000000..6d55721
--- /dev/null
@@ -0,0 +1,164 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/time.h>
+#include <fcntl.h>
+
+#include "SLES/OpenSLES.h"
+#include "SLES/OpenSLES_Android.h"
+
+
+#define MAX_NUMBER_INTERFACES 1
+
+#define GUID_DISPLAY_LENGTH 35
+#define FX_NAME_LENGTH 64
+
+static int testMode;
+//-----------------------------------------------------------------
+/* Exits the application if an error is encountered */
+#define ExitOnError(x) ExitOnErrorFunc(x,__LINE__)
+
+void ExitOnErrorFunc( SLresult result , int line)
+{
+    if (SL_RESULT_SUCCESS != result) {
+        fprintf(stderr, "%lu error code encountered at line %d, exiting\n", result, line);
+        exit(EXIT_FAILURE);
+    }
+}
+
+//-----------------------------------------------------------------
+void guidToString(const SLInterfaceID guid, char *str) {
+    if ((NULL == guid) || (NULL == str)) {
+        return;
+    }
+    snprintf(str, GUID_DISPLAY_LENGTH, "%08lx-%04x-%04x-%04x-%02x%02x%02x%02x%02x%02x",
+            guid->time_low,
+            guid->time_mid,
+            guid->time_hi_and_version,
+            guid->clock_seq,
+            guid->node[0],
+            guid->node[1],
+            guid->node[2],
+            guid->node[3],
+            guid->node[4],
+            guid->node[5]);
+}
+
+//-----------------------------------------------------------------
+
+/* Query available effects on Android  */
+void TestGenericFxCapabilities(  )
+{
+
+    SLresult    result;
+    SLObjectItf sl;
+
+    /* ------------------------------------------------------ */
+    /* Engine configuration and creation */
+
+    SLEngineOption EngineOption[] = {
+            {(SLuint32) SL_ENGINEOPTION_THREADSAFE, (SLuint32) SL_BOOLEAN_TRUE}
+    };
+
+    SLboolean required[MAX_NUMBER_INTERFACES];
+    SLInterfaceID iidArray[MAX_NUMBER_INTERFACES];
+
+    /* Initialize arrays required[] and iidArray[] */
+    for (int i=0 ; i < MAX_NUMBER_INTERFACES ; i++) {
+        required[i] = SL_BOOLEAN_FALSE;
+        iidArray[i] = SL_IID_NULL;
+    }
+
+    iidArray[0] = SL_IID_ANDROIDEFFECTCAPABILITIES;
+    required[0] = SL_BOOLEAN_TRUE;
+
+
+    result = slCreateEngine( &sl, 1, EngineOption, 1, iidArray, required);
+    ExitOnError(result);
+
+    /* Realizing the SL Engine in synchronous mode. */
+    result = (*sl)->Realize(sl, SL_BOOLEAN_FALSE);
+    ExitOnError(result);
+
+
+    SLEngineItf EngineItf;
+    SLAndroidEffectCapabilitiesItf EffectLibItf;
+
+    /* Get the SL Engine interface which is implicit */
+    result = (*sl)->GetInterface(sl, SL_IID_ENGINE, (void*)&EngineItf);
+    ExitOnError(result);
+
+    /* Get the Android Effect Capabilities interface */
+    result = (*sl)->GetInterface(sl, SL_IID_ANDROIDEFFECTCAPABILITIES, (void*)&EffectLibItf);
+    ExitOnError(result);
+
+    /* ------------------------------------------------------ */
+    /* Query the effect library */
+
+    SLuint32 nbEffects = 0;
+    result = (*EffectLibItf)->QueryNumEffects(EffectLibItf, &nbEffects);
+    ExitOnError(result);
+    fprintf(stdout, "Effect library contains %ld effects:\n", nbEffects);
+
+    SLchar effectName[FX_NAME_LENGTH+1];
+    SLuint16 effectNameLength = FX_NAME_LENGTH;
+    char typeString[GUID_DISPLAY_LENGTH];
+    char implString[GUID_DISPLAY_LENGTH];
+
+    SLInterfaceID effectType, effectImplementation;
+    for (SLuint32 i = 0 ; i < nbEffects ; i++ ) {
+        fprintf(stdout,"- effect %ld: ", i);
+        memset(effectName, 'Z', FX_NAME_LENGTH+1);
+        effectNameLength = FX_NAME_LENGTH;
+        result = (*EffectLibItf)->QueryEffect(EffectLibItf, i,
+                &effectType, &effectImplementation, effectName, &effectNameLength);
+        if ('Z' != effectName[FX_NAME_LENGTH]) {
+            fprintf(stderr, "QueryEffect wrote beyond end of buffer\n");
+            continue;
+        }
+        ExitOnError(result);
+        printf("length=%u ", effectNameLength);
+        if (FX_NAME_LENGTH < effectNameLength) {
+            printf(" (>max) ");
+            effectNameLength = FX_NAME_LENGTH;
+        }
+        guidToString(effectType, typeString);
+        guidToString(effectImplementation, implString);
+        effectName[FX_NAME_LENGTH - 1] = '\0';
+        fprintf(stdout, " type=%s, impl=%s name=%.*s \n", typeString, implString, effectNameLength,
+                effectName);
+    }
+
+    /* Shutdown OpenSL ES */
+     (*sl)->Destroy(sl);
+}
+
+//-----------------------------------------------------------------
+int main(int argc, char* const argv[])
+{
+    SLresult    result;
+    SLObjectItf sl;
+
+    fprintf(stdout, "OpenSL ES test %s: exercises SLAndroidEffectCapabilitiesItf.\n", argv[0]);
+
+    TestGenericFxCapabilities();
+
+    return EXIT_SUCCESS;
+}