]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-6083 --resolve SSML will pass through when renderer is specified
authorChris Rienzo <chris.rienzo@grasshopper.com>
Tue, 7 Jan 2014 19:07:49 +0000 (14:07 -0500)
committerChris Rienzo <chris.rienzo@grasshopper.com>
Tue, 7 Jan 2014 19:07:49 +0000 (14:07 -0500)
src/mod/event_handlers/mod_rayo/rayo_output_component.c

index e092ebd046e9e44bfb1a9559f683aefc96d3264e..3432bcefbf85184330290bb7849710bace613a1e 100644 (file)
@@ -47,6 +47,8 @@ struct output_component {
        switch_bool_t start_paused;
        /** true if stopped */
        int stop;
+       /** output renderer to use */
+       const char *renderer;
 };
 
 #define OUTPUT_FINISH "finish", RAYO_OUTPUT_COMPLETE_NS
@@ -71,6 +73,7 @@ static struct rayo_component *create_output_component(struct rayo_actor *actor,
        output_component->repeat_times = iks_find_int_attrib(output, "repeat-times");
        output_component->max_time = iks_find_int_attrib(output, "max-time");
        output_component->start_paused = iks_find_bool_attrib(output, "start-paused");
+       output_component->renderer = iks_find_attrib(output, "renderer");
 
        return (struct rayo_component *)output_component;
 }
@@ -402,7 +405,13 @@ static switch_status_t next_file(switch_file_handle_t *handle)
                if (speak) {
                        /* <speak> is child node */
                        char *ssml_str = iks_string(NULL, speak);
-                       context->ssml = switch_mprintf("ssml://%s", ssml_str);
+                       if (zstr(output->renderer)) {
+                               /* FS must parse the SSML */
+                               context->ssml = switch_mprintf("ssml://%s", ssml_str);
+                       } else {
+                               /* renderer will parse the SSML */
+                               context->ssml = switch_mprintf("tts://%s||%s", output->renderer, ssml_str);
+                       }
                        iks_free(ssml_str);
                } else if (iks_has_children(context->cur_doc)) {
                        /* check if <speak> is in CDATA */
@@ -415,7 +424,13 @@ static switch_status_t next_file(switch_file_handle_t *handle)
                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Missing <document> CDATA\n");
                                return SWITCH_STATUS_FALSE;
                        }
-                       context->ssml = switch_mprintf("ssml://%s", ssml_str);
+                       if (zstr(output->renderer)) {
+                               /* FS must parse the SSML */
+                               context->ssml = switch_mprintf("ssml://%s", ssml_str);
+                       } else {
+                               /* renderer will parse the SSML */
+                               context->ssml = switch_mprintf("tts://%s||%s", output->renderer, ssml_str);
+                       }
                } else {
                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Missing <speak>\n");
                        return SWITCH_STATUS_FALSE;