int dispatch_cmd(otts_synth_plugin_t *synth, char *cmd_line) { char *cmd = NULL; size_t cmd_len; char *msg = NULL; cmd_len = strcspn(cmd_line, " \t\n\r\f"); cmd = g_strndup(cmd_line, cmd_len); pthread_mutex_lock(&module_stdout_mutex); if (!strcasecmp("audio", cmd)) { msg = do_audio(synth); } else if (!strcasecmp("set", cmd)) { msg = do_set(synth); } else if (!strcasecmp("speak", cmd)) { msg = do_speak(synth); } else if (!strcasecmp("key", cmd)) { msg = do_key(synth); } else if (!strcasecmp("sound_icon", cmd)) { msg = do_sound_icon(synth); } else if (!strcasecmp("char", cmd)) { msg = do_char(synth); } else if (!strcasecmp("pause", cmd)) { do_pause(synth); } else if (!strcasecmp("stop", cmd)) { do_stop(synth); } else if (!strcasecmp("list_voices", cmd)) { msg = do_list_voices(synth); } else if (!strcasecmp("loglevel", cmd)) { msg = do_loglevel(synth); } else if (!strcasecmp("debug", cmd)) { msg = do_debug(synth, cmd_line); } else if (!strcasecmp("quit", cmd)) { do_quit(synth); } else { /*should we log?*/ printf("300 ERR UNKNOWN COMMAND\n"); fflush(stdout); } if (msg != NULL) { if (0 > printf("%s\n", msg)) { log_msg(OTTS_LOG_CRIT, "Broken pipe, exiting...\n"); synth->close(2); } fflush(stdout); g_free(msg); } pthread_mutex_unlock(&module_stdout_mutex); g_free(cmd); return (0); }
void process_cli_data() { int ret; ret = read(cli.in, buf, RXBUF); buf[ret]=0; if(buf[ret-1] == '\n') buf[ret-1] = 0; int done = 0; if ( !strncasecmp((char *)buf, "help", 4) ) { print_help(); done = 1; } if ( !strncasecmp((char *)buf, "fpscan", 6) ) { do_fpscan(); done = 1; } if ( !strncasecmp((char *)buf, "callscan", 8) ) { do_callscan(); done = 1; } if ( !strncasecmp((char *)buf, "autorec", 7) ) { do_autorec(); done = 1; } if ( !strncasecmp((char *)buf, "ppscan", 6) ) { do_ppscan_str(&buf[6]); done = 1; } if ( !strncasecmp((char *)buf, "chan", 4) ) { do_chan(&buf[4]); done = 1; } if ( !strncasecmp((char *)buf, "slot", 4) ) { do_slot(&buf[4]); done = 1; } if ( !strncasecmp((char *)buf, "jam", 3) ) { do_jam(); done = 1; } if ( !strncasecmp((char *)buf, "ignore", 6) ) { do_ignore_str(&buf[6]); done = 1; } if ( !strncasecmp((char *)buf, "dump", 4) ) { do_dump(); done = 1; } if ( !strncasecmp((char *)buf, "hop", 3) ) { do_hop(); done = 1; } if ( !strncasecmp((char *)buf, "audio", 5) ) { do_audio(); done = 1; } if ( !strncasecmp((char *)buf, "direction", 9) ) { do_direction(); done = 1; } if ( !strncasecmp((char *)buf, "wav", 3) ) { do_wav(); done = 1; } if ( !strncasecmp((char *)buf, "ima", 3) ) { do_ima(); done = 1; } if ( !strncasecmp((char *)buf, "verb", 4) ) { do_verb(); done = 1; } if ( !strncasecmp((char *)buf, "stop", 4) ) { do_stop(); done = 1; } if ( !strncasecmp((char *)buf, "quit", 4) ) do_quit(); if(!done) LOG("!!! no such command %s\n", buf); }
// Aborts and returns 1 if an error is encountered. int PackageRenderer::render_package(RenderPackage *package) { int audio_done = 0; int video_done = 0; int samples_rendered = 0; result = 0; this->package = package; // printf( // "PackageRenderer::render_package: audio s=%lld l=%lld video s=%lld l=%lld\n", // package->audio_start, // package->audio_end - package->audio_start, // package->video_start, // package->video_end - package->video_start); // FIXME: The design that we only get EDL once does not give us neccessary flexiblity to do things the way they should be donek default_asset->video_data = package->video_do; default_asset->audio_data = package->audio_do; Render::check_asset(edl, *default_asset); create_output(); if(!asset->video_data) video_done = 1; if(!asset->audio_data) audio_done = 1; // Create render engine if(!result) { create_engine(); //printf("PackageRenderer::render_package 5 %d\n", result); // Main loop while((!audio_done || !video_done) && !result) { int need_audio = 0, need_video = 0; // Calculate lengths to process. Audio fragment is constant. if(!audio_done) { if(audio_position + audio_read_length >= package->audio_end) { audio_done = 1; audio_read_length = package->audio_end - audio_position; } samples_rendered = audio_read_length; need_audio = 1; } //printf("PackageRenderer::render_package 6 %d\n", samples_rendered); if(!video_done) { if(audio_done) { video_read_length = package->video_end - video_position; // Packetize video length so progress gets updated video_read_length = (int)MIN(asset->frame_rate, video_read_length); video_read_length = MAX(video_read_length, 30); } else // Guide video with audio { video_read_length = Units::to_int64( (double)(audio_position + audio_read_length) / asset->sample_rate * asset->frame_rate) - video_position; } // Clamp length if(video_position + video_read_length >= package->video_end) { video_done = 1; video_read_length = package->video_end - video_position; } // Calculate samples rendered for progress bar. if(audio_done) samples_rendered = Units::round((double)video_read_length / asset->frame_rate * asset->sample_rate); need_video = 1; } //printf("PackageRenderer::render_package 1 %d %lld %lld\n", result, audio_read_length, video_read_length); if(need_video && !result) do_video(); //printf("PackageRenderer::render_package 7 %d %d\n", result, samples_rendered); if(need_audio && !result) do_audio(); if(!result) set_progress(samples_rendered); if(!result && progress_cancelled()) result = 1; // printf("PackageRenderer::render_package 10 %d %d %d %d\n", // audio_read_length, video_read_length, samples_rendered, result); if(result) set_result(result); else result = get_result(); } //printf("PackageRenderer::render_package 20\n"); stop_engine(); //printf("PackageRenderer::render_package 30\n"); stop_output(); //printf("PackageRenderer::render_package 40\n"); } //printf("PackageRenderer::render_package 50\n"); close_output(); //printf("PackageRenderer::render_package 60\n"); set_result(result); //printf("PackageRenderer::render_package 70\n"); return result; }