예제 #1
0
static void rdpsnd_process_connect(rdpSvcPlugin* plugin)
{
	rdpsndPlugin* rdpsnd = (rdpsndPlugin*) plugin;
	RDP_PLUGIN_DATA* data;
	RDP_PLUGIN_DATA default_data[2] = { { 0 }, { 0 } };

	DEBUG_SVC("connecting");

	plugin->interval_callback = rdpsnd_process_interval;

	rdpsnd->data_out_list = list_new();
	rdpsnd->latency = -1;

	data = (RDP_PLUGIN_DATA*)plugin->channel_entry_points.pExtendedData;

	while (data && data->size > 0)
	{
		rdpsnd_process_plugin_data(rdpsnd, data);
		data = (RDP_PLUGIN_DATA*) (((uint8*) data) + data->size);
	}

	if (rdpsnd->device == NULL)
	{
		default_data[0].size = sizeof(RDP_PLUGIN_DATA);
		default_data[0].data[0] = "pulse";
		default_data[0].data[1] = "";
		if (!rdpsnd_load_device_plugin(rdpsnd, "pulse", default_data))
		{
			default_data[0].data[0] = "alsa";
			default_data[0].data[1] = "default";

			if (!rdpsnd_load_device_plugin(rdpsnd, "alsa", default_data))
			{
				default_data[0].data[0] = "macaudio";
				default_data[0].data[1] = "default";
				
				rdpsnd_load_device_plugin(rdpsnd, "macaudio", default_data);
			}
			else
			{
				printf("rdpsnd: successfully loaded alsa plugin\n");
			}
		}
		else
		{
			printf("rdpsnd: successfully loaded pulseaudio plugin\n");
		}
	}
	if (rdpsnd->device == NULL)
	{
		DEBUG_WARN("no sound device.");
	}
}
예제 #2
0
파일: rdpsnd_main.c 프로젝트: alama/freerdp
static int
rdpsnd_process_plugin_data(rdpsndPlugin * plugin, RD_PLUGIN_DATA * data)
{
	if (strcmp((char*)data->data[0], "buffer") == 0)
	{
		/* TODO: Set the sound buffer size */
		return 0;
	}
	else
	{
		return rdpsnd_load_device_plugin(plugin, (char*)data->data[0], data);
	}
}
예제 #3
0
static void rdpsnd_process_plugin_data(rdpsndPlugin* rdpsnd, RDP_PLUGIN_DATA* data)
{
	if (strcmp((char*)data->data[0], "format") == 0)
	{
		rdpsnd->fixed_format = atoi(data->data[1]);
	}
	else if (strcmp((char*)data->data[0], "rate") == 0)
	{
		rdpsnd->fixed_rate = atoi(data->data[1]);
	}
	else if (strcmp((char*)data->data[0], "channel") == 0)
	{
		rdpsnd->fixed_channel = atoi(data->data[1]);
	}
	else if (strcmp((char*)data->data[0], "latency") == 0)
	{
		rdpsnd->latency = atoi(data->data[1]);
	}
	else
	{
		rdpsnd_load_device_plugin(rdpsnd, (char*)data->data[0], data);
	}
}
예제 #4
0
static int
rdpsnd_process_plugin_data(rdpsndPlugin * plugin, RD_PLUGIN_DATA * data)
{
	if (strcmp((char*)data->data[0], "format") == 0)
	{
		plugin->fixed_format = atoi(data->data[1]);
		return 0;
	}
	else if (strcmp((char*)data->data[0], "rate") == 0)
	{
		plugin->fixed_rate = atoi(data->data[1]);
		return 0;
	}
	else if (strcmp((char*)data->data[0], "channel") == 0)
	{
		plugin->fixed_channel = atoi(data->data[1]);
		return 0;
	}
	else
	{
		return rdpsnd_load_device_plugin(plugin, (char*)data->data[0], data);
	}
}
예제 #5
0
파일: rdpsnd_main.c 프로젝트: alama/freerdp
/* this registers two channels but only rdpsnd is used */
int
VirtualChannelEntry(PCHANNEL_ENTRY_POINTS pEntryPoints)
{
	rdpsndPlugin * plugin;
	RD_PLUGIN_DATA * data;
	RD_PLUGIN_DATA default_data[2] = { { 0 }, { 0 } };

	LLOGLN(10, ("VirtualChannelEntry:"));

	plugin = (rdpsndPlugin *) malloc(sizeof(rdpsndPlugin));
	memset(plugin, 0, sizeof(rdpsndPlugin));

	chan_plugin_init((rdpChanPlugin *) plugin);

	plugin->data_in_size = 0;
	plugin->data_in = 0;
	plugin->ep = *pEntryPoints;
	memset(&(plugin->channel_def), 0, sizeof(plugin->channel_def));
	plugin->channel_def.options = CHANNEL_OPTION_INITIALIZED |
		CHANNEL_OPTION_ENCRYPT_RDP;
	strcpy(plugin->channel_def.name, "rdpsnd");
	plugin->in_mutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t));
	pthread_mutex_init(plugin->in_mutex, 0);
	plugin->in_list_head = 0;
	plugin->in_list_tail = 0;
	plugin->out_list_head = 0;
	plugin->out_list_tail = 0;
	plugin->term_event = wait_obj_new("freerdprdpsndterm");
	plugin->data_in_event = wait_obj_new("freerdprdpsnddatain");
	plugin->expectingWave = 0;
	plugin->current_format = -1;
	plugin->thread_status = 0;
	plugin->ep.pVirtualChannelInit(&plugin->chan_plugin.init_handle, &plugin->channel_def, 1,
		VIRTUAL_CHANNEL_VERSION_WIN2000, InitEvent);

	if (pEntryPoints->cbSize >= sizeof(CHANNEL_ENTRY_POINTS_EX))
	{
		data = (RD_PLUGIN_DATA *) (((PCHANNEL_ENTRY_POINTS_EX)pEntryPoints)->pExtendedData);
	}
	else
	{
		data = NULL;
	}
	while (data && data->size > 0)
	{
		rdpsnd_process_plugin_data(plugin, data);
		data = (RD_PLUGIN_DATA *) (((void *) data) + data->size);
	}
	if (plugin->device_plugin == NULL)
	{
		default_data[0].size = sizeof(RD_PLUGIN_DATA);
		default_data[0].data[0] = "alsa";
		default_data[0].data[1] = "default";
		rdpsnd_load_device_plugin(plugin, "alsa", default_data);
	}
	if (plugin->device_plugin == NULL)
	{
		LLOGLN(0, ("rdpsnd: no sound device."));
	}

	return 1;
}