Exemple #1
0
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;
}