int freerdp_rdpsnd_client_subsystem_entry(PFREERDP_RDPSND_DEVICE_ENTRY_POINTS pEntryPoints) { ADDIN_ARGV* args; rdpsndWinmmPlugin* winmm; winmm = (rdpsndWinmmPlugin*) calloc(1, sizeof(rdpsndWinmmPlugin)); if (!winmm) return -1; winmm->device.DisableConfirmThread = TRUE; winmm->device.Open = rdpsnd_winmm_open; winmm->device.FormatSupported = rdpsnd_winmm_format_supported; winmm->device.SetFormat = rdpsnd_winmm_set_format; winmm->device.GetVolume = rdpsnd_winmm_get_volume; winmm->device.SetVolume = rdpsnd_winmm_set_volume; winmm->device.WaveDecode = rdpsnd_winmm_wave_decode; winmm->device.WavePlay = rdpsnd_winmm_wave_play; winmm->device.Start = rdpsnd_winmm_start; winmm->device.Close = rdpsnd_winmm_close; winmm->device.Free = rdpsnd_winmm_free; args = pEntryPoints->args; rdpsnd_winmm_parse_addin_args((rdpsndDevicePlugin*) winmm, args); winmm->dsp_context = freerdp_dsp_context_new(); pEntryPoints->pRegisterRdpsndDevice(pEntryPoints->rdpsnd, (rdpsndDevicePlugin*) winmm); return 0; }
audin_server_context* audin_server_context_new(HANDLE vcm) { audin_server* audin; audin = (audin_server *)calloc(1, sizeof(audin_server)); if (!audin) { WLog_ERR(TAG, "calloc failed!"); return NULL; } audin->context.vcm = vcm; audin->context.selected_client_format = -1; audin->context.frames_per_packet = 4096; audin->context.SelectFormat = audin_server_select_format; audin->context.Open = audin_server_open; audin->context.Close = audin_server_close; audin->dsp_context = freerdp_dsp_context_new(); if (!audin->dsp_context) { WLog_ERR(TAG, "freerdp_dsp_context_new failed!"); free(audin); return NULL; } return (audin_server_context*) audin; }
RdpsndServerContext* rdpsnd_server_context_new(HANDLE vcm) { RdpsndServerContext* context; RdpsndServerPrivate *priv; context = (RdpsndServerContext *)calloc(1, sizeof(RdpsndServerContext)); if (!context) { WLog_ERR(TAG, "calloc failed!"); return NULL; } context->vcm = vcm; context->Start = rdpsnd_server_start; context->Stop = rdpsnd_server_stop; context->selected_client_format = -1; context->Initialize = rdpsnd_server_initialize; context->SelectFormat = rdpsnd_server_select_format; context->SendSamples = rdpsnd_server_send_samples; context->SetVolume = rdpsnd_server_set_volume; context->Close = rdpsnd_server_close; context->priv = priv = (RdpsndServerPrivate *)calloc(1, sizeof(RdpsndServerPrivate)); if (!priv) { WLog_ERR(TAG, "calloc failed!"); goto out_free; } priv->dsp_context = freerdp_dsp_context_new(); if (!priv->dsp_context) { WLog_ERR(TAG, "freerdp_dsp_context_new failed!"); goto out_free_priv; } priv->input_stream = Stream_New(NULL, 4); if (!priv->input_stream) { WLog_ERR(TAG, "Stream_New failed!"); goto out_free_dsp; } priv->expectedBytes = 4; priv->waitingHeader = TRUE; priv->ownThread = TRUE; return context; out_free_dsp: freerdp_dsp_context_free(priv->dsp_context); out_free_priv: free(context->priv); out_free: free(context); return NULL; }
int FreeRDPRdpsndDeviceEntry(PFREERDP_RDPSND_DEVICE_ENTRY_POINTS pEntryPoints) { rdpsndPulsePlugin* pulse; RDP_PLUGIN_DATA* data; pulse = xnew(rdpsndPulsePlugin); pulse->device.Open = rdpsnd_pulse_open; pulse->device.FormatSupported = rdpsnd_pulse_format_supported; pulse->device.SetFormat = rdpsnd_pulse_set_format; pulse->device.SetVolume = rdpsnd_pulse_set_volume; pulse->device.Play = rdpsnd_pulse_play; pulse->device.Start = rdpsnd_pulse_start; pulse->device.Close = rdpsnd_pulse_close; pulse->device.Free = rdpsnd_pulse_free; data = pEntryPoints->plugin_data; if (data && strcmp((char*)data->data[0], "pulse") == 0) { if(data->data[1] && strlen((char*)data->data[1]) > 0) pulse->device_name = xstrdup((char*)data->data[1]); else pulse->device_name = NULL; } pulse->dsp_context = freerdp_dsp_context_new(); pulse->mainloop = pa_threaded_mainloop_new(); if (!pulse->mainloop) { DEBUG_WARN("pa_threaded_mainloop_new failed"); rdpsnd_pulse_free((rdpsndDevicePlugin*)pulse); return 1; } pulse->context = pa_context_new(pa_threaded_mainloop_get_api(pulse->mainloop), "freerdp"); if (!pulse->context) { DEBUG_WARN("pa_context_new failed"); rdpsnd_pulse_free((rdpsndDevicePlugin*)pulse); return 1; } pa_context_set_state_callback(pulse->context, rdpsnd_pulse_context_state_callback, pulse); if (!rdpsnd_pulse_connect((rdpsndDevicePlugin*)pulse)) { DEBUG_WARN("rdpsnd_pulse_connect failed"); rdpsnd_pulse_free((rdpsndDevicePlugin*)pulse); return 1; } pEntryPoints->pRegisterRdpsndDevice(pEntryPoints->rdpsnd, (rdpsndDevicePlugin*)pulse); return 0; }
ITSMFAudioDevice *freerdp_tsmf_client_audio_subsystem_entry(void) { TSMFAlsaAudioDevice *alsa; alsa = (TSMFAlsaAudioDevice *) malloc(sizeof(TSMFAlsaAudioDevice)); ZeroMemory(alsa, sizeof(TSMFAlsaAudioDevice)); alsa->iface.Open = tsmf_alsa_open; alsa->iface.SetFormat = tsmf_alsa_set_format; alsa->iface.Play = tsmf_alsa_play; alsa->iface.GetLatency = tsmf_alsa_get_latency; alsa->iface.Flush = tsmf_alsa_flush; alsa->iface.Free = tsmf_alsa_free; alsa->dsp_context = freerdp_dsp_context_new(); return (ITSMFAudioDevice *) alsa; }
audin_server_context* audin_server_context_new(WTSVirtualChannelManager* vcm) { audin_server* audin; audin = xnew(audin_server); audin->context.vcm = vcm; audin->context.selected_client_format = -1; audin->context.frames_per_packet = 4096; audin->context.SelectFormat = audin_server_select_format; audin->context.Open = audin_server_open; audin->context.Close = audin_server_close; audin->dsp_context = freerdp_dsp_context_new(); return (audin_server_context*) audin; }
ITSMFAudioDevice* TSMFAudioDeviceEntry(void) { TSMFALSAAudioDevice* alsa; alsa = xnew(TSMFALSAAudioDevice); alsa->iface.Open = tsmf_alsa_open; alsa->iface.SetFormat = tsmf_alsa_set_format; alsa->iface.Play = tsmf_alsa_play; alsa->iface.GetLatency = tsmf_alsa_get_latency; alsa->iface.Flush = tsmf_alsa_flush; alsa->iface.Free = tsmf_alsa_free; alsa->dsp_context = freerdp_dsp_context_new(); return (ITSMFAudioDevice*) alsa; }
audin_server_context* audin_server_context_new(HANDLE vcm) { audin_server* audin; audin = (audin_server *)calloc(1, sizeof(audin_server)); audin->context.vcm = vcm; audin->context.selected_client_format = -1; audin->context.frames_per_packet = 4096; audin->context.SelectFormat = audin_server_select_format; audin->context.Open = audin_server_open; audin->context.Close = audin_server_close; audin->dsp_context = freerdp_dsp_context_new(); return (audin_server_context*) audin; }
int FreeRDPAudinDeviceEntry(PFREERDP_AUDIN_DEVICE_ENTRY_POINTS pEntryPoints) { AudinALSADevice* alsa; RDP_PLUGIN_DATA* data; alsa = xnew(AudinALSADevice); alsa->iface.Open = audin_alsa_open; alsa->iface.FormatSupported = audin_alsa_format_supported; alsa->iface.SetFormat = audin_alsa_set_format; alsa->iface.Close = audin_alsa_close; alsa->iface.Free = audin_alsa_free; alsa->device_name[0] = '\0'; data = pEntryPoints->plugin_data; if (data) { char *data2 = (char *) (data->data[2]); if (data->data[0] && (strcmp(data->data[0], "audin") == 0) && data->data[1] && (strcmp(data->data[1], "alsa") == 0) && data2 && (*data2 != '\0')) { strncpy(alsa->device_name, data2, sizeof(alsa->device_name)); } } if (alsa->device_name[0] == '\0') { strcpy(alsa->device_name, "default"); } alsa->frames_per_packet = 128; alsa->target_rate = 22050; alsa->actual_rate = 22050; alsa->format = SND_PCM_FORMAT_S16_LE; alsa->target_channels = 2; alsa->actual_channels = 2; alsa->bytes_per_channel = 2; alsa->thread = freerdp_thread_new(); alsa->dsp_context = freerdp_dsp_context_new(); pEntryPoints->pRegisterAudinDevice(pEntryPoints->plugin, (IAudinDevice*) alsa); return 0; }
rdpsnd_server_context* rdpsnd_server_context_new(WTSVirtualChannelManager* vcm) { rdpsnd_server* rdpsnd; rdpsnd = xnew(rdpsnd_server); rdpsnd->context.vcm = vcm; rdpsnd->context.selected_client_format = -1; rdpsnd->context.Initialize = rdpsnd_server_initialize; rdpsnd->context.SelectFormat = rdpsnd_server_select_format; rdpsnd->context.SendSamples = rdpsnd_server_send_samples; rdpsnd->context.SetVolume = rdpsnd_server_set_volume; rdpsnd->context.Close = rdpsnd_server_close; rdpsnd->dsp_context = freerdp_dsp_context_new(); return (rdpsnd_server_context*) rdpsnd; }
RdpsndServerContext* rdpsnd_server_context_new(HANDLE vcm) { RdpsndServerContext* context; context = (RdpsndServerContext*) calloc(1, sizeof(RdpsndServerContext)); if (!context) return NULL; context->vcm = vcm; context->Start = rdpsnd_server_start; context->Stop = rdpsnd_server_stop; context->selected_client_format = -1; context->Initialize = rdpsnd_server_initialize; context->SelectFormat = rdpsnd_server_select_format; context->SendSamples = rdpsnd_server_send_samples; context->SetVolume = rdpsnd_server_set_volume; context->Close = rdpsnd_server_close; context->priv = (RdpsndServerPrivate*) calloc(1, sizeof(RdpsndServerPrivate)); if (!context->priv) goto out_free; context->priv->dsp_context = freerdp_dsp_context_new(); if (!context->priv->dsp_context) goto out_free_priv; return context; out_free_priv: free(context->priv); out_free: free(context); return NULL; }