Effect factory: Test that the xml is correctly parsed
Compare the dump after parsing with the reference dump.
Test: This is it
Bug: 37492580
Change-Id: I7dbbe2754f182a0f5818bdf9010d89ac6f0498e2
Signed-off-by: Kevin Rocard <krocard@google.com>
diff --git a/media/libeffects/factory/Android.bp b/media/libeffects/factory/Android.bp
index 9c6b5b6..21be587 100644
--- a/media/libeffects/factory/Android.bp
+++ b/media/libeffects/factory/Android.bp
@@ -31,3 +31,24 @@
header_libs: ["libeffects_headers"],
export_header_lib_headers: ["libeffects_headers"],
}
+
+cc_binary {
+ name: "dumpEffectConfigFile",
+ vendor: true,
+ srcs: ["test/DumpConfig.cpp"],
+
+ compile_multilib: "32",
+
+ cflags: [
+ "-Wall",
+ "-Wextra",
+ "-Werror",
+ ],
+
+
+ shared_libs: [
+ "libeffectsconfig",
+ "libeffects",
+ ],
+ local_include_dirs:[".", "include"],
+}
diff --git a/media/libeffects/factory/EffectsConfigLoader.c b/media/libeffects/factory/EffectsConfigLoader.c
index c9b0337..5c973b4 100644
--- a/media/libeffects/factory/EffectsConfigLoader.c
+++ b/media/libeffects/factory/EffectsConfigLoader.c
@@ -44,7 +44,7 @@
static lib_entry_t *gCachedLibrary; // last library accessed by getLibrary()
-int loadEffectConfig()
+int EffectLoadEffectConfig()
{
if (access(AUDIO_EFFECT_VENDOR_CONFIG_FILE, R_OK) == 0) {
return loadEffectConfigFile(AUDIO_EFFECT_VENDOR_CONFIG_FILE);
diff --git a/media/libeffects/factory/EffectsConfigLoader.h b/media/libeffects/factory/EffectsConfigLoader.h
index 1dbf638..3f82609 100644
--- a/media/libeffects/factory/EffectsConfigLoader.h
+++ b/media/libeffects/factory/EffectsConfigLoader.h
@@ -17,6 +17,7 @@
#ifndef ANDROID_EFFECTSCONFIGLOADER_H
#define ANDROID_EFFECTSCONFIGLOADER_H
+#include <cutils/compiler.h>
#include "EffectsFactoryState.h"
#ifdef __cplusplus
@@ -26,7 +27,8 @@
/** Parses the platform effect configuration
* and stores its content in the global EffectFactoryState. */
-int loadEffectConfig();
+ANDROID_API
+int EffectLoadEffectConfig();
#ifdef __cplusplus
diff --git a/media/libeffects/factory/EffectsFactory.c b/media/libeffects/factory/EffectsFactory.c
index a2fdcc5..f5a9acd 100644
--- a/media/libeffects/factory/EffectsFactory.c
+++ b/media/libeffects/factory/EffectsFactory.c
@@ -27,8 +27,8 @@
#include <media/EffectsFactoryApi.h>
#include "EffectsConfigLoader.h"
-#include "EffectsXmlConfigLoader.h"
#include "EffectsFactoryState.h"
+#include "EffectsXmlConfigLoader.h"
#include "EffectsFactory.h"
@@ -437,10 +437,10 @@
if (ignoreFxConfFiles) {
ALOGI("Audio effects in configuration files will be ignored");
} else {
- ssize_t loadResult = loadXmlEffectConfig(NULL);
+ ssize_t loadResult = EffectLoadXmlEffectConfig(NULL);
if (loadResult < 0) {
ALOGW("Failed to load XML effect configuration, fallback to .conf");
- loadEffectConfig();
+ EffectLoadEffectConfig();
} else if (loadResult > 0) {
ALOGE("Effect config is partially invalid, skipped %zd elements", loadResult);
}
diff --git a/media/libeffects/factory/EffectsXmlConfigLoader.cpp b/media/libeffects/factory/EffectsXmlConfigLoader.cpp
index 6b12571..42e00f8 100644
--- a/media/libeffects/factory/EffectsXmlConfigLoader.cpp
+++ b/media/libeffects/factory/EffectsXmlConfigLoader.cpp
@@ -313,7 +313,7 @@
// Interface function
/////////////////////////////////////////////////
-extern "C" ssize_t loadXmlEffectConfig(const char* path)
+extern "C" ssize_t EffectLoadXmlEffectConfig(const char* path)
{
using effectsConfig::parse;
auto result = path ? parse(path) : parse();
diff --git a/media/libeffects/factory/EffectsXmlConfigLoader.h b/media/libeffects/factory/EffectsXmlConfigLoader.h
index 9bf4d18..a3fe9a3 100644
--- a/media/libeffects/factory/EffectsXmlConfigLoader.h
+++ b/media/libeffects/factory/EffectsXmlConfigLoader.h
@@ -19,6 +19,10 @@
#include <unistd.h>
+#include <cutils/compiler.h>
+
+#include "EffectsFactoryState.h"
+
#if __cplusplus
extern "C" {
#endif
@@ -28,8 +32,10 @@
* @return -1 on unrecoverable error (eg: no configuration file)
* 0 on success
* the number of invalid elements (lib & effect) skipped if the config is partially invalid
+ * @note this function is exported for test purpose only. Do not call from outside this library.
*/
-ssize_t loadXmlEffectConfig(const char* path);
+ANDROID_API
+ssize_t EffectLoadXmlEffectConfig(const char* path);
#if __cplusplus
} // extern "C"
diff --git a/media/libeffects/factory/test/DumpConfig.cpp b/media/libeffects/factory/test/DumpConfig.cpp
new file mode 100644
index 0000000..0a156b4
--- /dev/null
+++ b/media/libeffects/factory/test/DumpConfig.cpp
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2017 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 <media/EffectsFactoryApi.h>
+#include <unistd.h>
+#include "EffectsXmlConfigLoader.h"
+#include "EffectsConfigLoader.h"
+
+int main(int argc, char* argv[]) {
+ const char* path = nullptr;
+ bool legacyFormat;
+
+ if (argc == 2 && strcmp(argv[1], "--legacy") == 0) {
+ legacyFormat = true;
+ fprintf(stderr, "Dumping legacy effect config file\n");
+ } else if ((argc == 2 || argc == 3) && strcmp(argv[1], "--xml") == 0) {
+ legacyFormat = false;
+ if (argc == 3) {
+ fprintf(stderr, "Dumping XML effect config file: %s\n", path);
+ } else {
+ fprintf(stderr, "Dumping default XML effect config file.\n");
+ }
+ } else {
+ fprintf(stderr, "Invalid arguments.\n"
+ "Usage: %s [--legacy|--xml [FILE]]\n", argv[0]);
+ return 1;
+ }
+
+ if (!legacyFormat) {
+ ssize_t ret = EffectLoadXmlEffectConfig(path);
+ if (ret < 0) {
+ fprintf(stderr, "loadXmlEffectConfig failed, see logcat for detail.\n");
+ return 2;
+ }
+ if (ret > 0) {
+ fprintf(stderr, "Partially failed to load config. Skipped %zu elements, "
+ "see logcat for detail.\n", (size_t)ret);
+ }
+ }
+
+ if (legacyFormat) {
+ auto ret = EffectLoadEffectConfig();
+ if (ret < 0) {
+ fprintf(stderr, "loadEffectConfig failed, see logcat for detail.\n");
+ return 3;
+ }
+ fprintf(stderr, "legacy loadEffectConfig has probably succeed, see logcat to make sure.\n");
+ }
+
+ if (EffectDumpEffects(STDOUT_FILENO) != 0) {
+ fprintf(stderr, "Effect dump failed, see logcat for detail.\n");
+ return 4;
+ }
+}