From 493bd6a5ba5c83817ad1d863fd4be1913f573d5c Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Mon, 13 Oct 2008 21:57:07 +0000 Subject: [PATCH] add configuration to mod_shout to resolve some crazyness, also commit #10,000 if I only had a dollar for each one..... git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@10000 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- conf/autoload_configs/shout.conf.xml | 8 +++ src/mod/formats/mod_shout/mod_shout.c | 75 ++++++++++++++++++++++++--- 2 files changed, 75 insertions(+), 8 deletions(-) create mode 100644 conf/autoload_configs/shout.conf.xml diff --git a/conf/autoload_configs/shout.conf.xml b/conf/autoload_configs/shout.conf.xml new file mode 100644 index 0000000000..3f381e6278 --- /dev/null +++ b/conf/autoload_configs/shout.conf.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/mod/formats/mod_shout/mod_shout.c b/src/mod/formats/mod_shout/mod_shout.c index bf26ca1463..64ebaac0ed 100644 --- a/src/mod/formats/mod_shout/mod_shout.c +++ b/src/mod/formats/mod_shout/mod_shout.c @@ -47,21 +47,42 @@ SWITCH_MODULE_DEFINITION(mod_shout, mod_shout_load, mod_shout_shutdown, NULL); static char *supported_formats[SWITCH_MAX_CODECS] = { 0 }; +static struct { + char decoder[256]; + float vol; + uint32_t outscale; +} globals; + mpg123_handle *our_mpg123_new(const char* decoder, int *error) { mpg123_handle *mh; const char *arch = "auto"; int x64 = 0; - - if (sizeof(void *) == 4) { - arch = "i586"; + + if (*globals.decoder || globals.outscale || globals.vol) { + if (*globals.decoder) { + arch = globals.decoder; + } + if ((mh = mpg123_new(arch, NULL))) { + if (globals.outscale) { + mpg123_param(mh, MPG123_OUTSCALE, globals.outscale, 0); + } + if (globals.vol) { + mpg123_volume(mh, globals.vol); + } + } } else { - x64++; - } - if ((mh = mpg123_new(arch, NULL))) { - if (x64) { - mpg123_param(mh, MPG123_OUTSCALE, 8192, 0); + if (sizeof(void *) == 4) { + arch = "i586"; + } else { + x64++; + } + + if ((mh = mpg123_new(arch, NULL))) { + if (x64) { + mpg123_param(mh, MPG123_OUTSCALE, 8192, 0); + } } } @@ -1391,6 +1412,42 @@ SWITCH_STANDARD_API(telecast_api_function) return SWITCH_STATUS_SUCCESS; } +static switch_status_t load_config(void) +{ + char *cf = "shout.conf"; + switch_xml_t cfg, xml, settings, param; + + memset(&globals, 0, sizeof(globals)); + + if (!(xml = switch_xml_open_cfg(cf, &cfg, NULL))) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Open of %s failed\n", cf); + return SWITCH_STATUS_TERM; + } + + if ((settings = switch_xml_child(cfg, "settings"))) { + for (param = switch_xml_child(settings, "param"); param; param = param->next) { + char *var = (char *) switch_xml_attr_soft(param, "name"); + char *val = (char *) switch_xml_attr_soft(param, "value"); + + if (!strcmp(var, "decoder")) { + switch_set_string(globals.decoder, val); + } else if (!strcmp(var, "volume")) { + globals.vol = atof(val); + } else if (!strcmp(var, "outscale")) { + int tmp = atoi(val); + if (tmp > 0) { + globals.outscale = tmp; + } + } + } + } + + + switch_xml_free(xml); + + return SWITCH_STATUS_SUCCESS; +} + SWITCH_MODULE_LOAD_FUNCTION(mod_shout_load) { switch_api_interface_t *shout_api_interface; @@ -1421,6 +1478,8 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_shout_load) SWITCH_ADD_API(shout_api_interface, "telecast", "telecast", telecast_api_function, TELECAST_SYNTAX); + load_config(); + /* indicate that the module should continue to be loaded */ return SWITCH_STATUS_SUCCESS; }