20#include <freerdp/config.h>
22#include <freerdp/log.h>
25#include "shadow_audin.h"
26#include <freerdp/server/server-common.h>
28#if defined(CHANNEL_AUDIN_SERVER)
29#include <freerdp/server/audin.h>
32#if defined(CHANNEL_AUDIN_SERVER)
35static UINT AudinServerData(audin_server_context* audin,
const SNDIN_DATA* data)
37 rdpShadowClient* client =
nullptr;
38 rdpShadowSubsystem* subsystem =
nullptr;
43 client = audin->userdata;
45 WINPR_ASSERT(client->server);
46 subsystem = client->server->subsystem;
47 WINPR_ASSERT(subsystem);
49 if (!client->mayInteract)
52 if (!IFCALLRESULT(TRUE, subsystem->AudinServerReceiveSamples, subsystem, client,
53 audin_server_get_negotiated_format(client->audin), data->Data))
54 return ERROR_INTERNAL_ERROR;
61BOOL shadow_client_audin_init(rdpShadowClient* client)
65#if defined(CHANNEL_AUDIN_SERVER)
66 audin_server_context* audin = client->audin = audin_server_context_new(client->vcm);
71 audin->userdata = client;
73 audin->Data = AudinServerData;
75 if (client->subsystem->audinFormats)
77 if (client->subsystem->nAudinFormats > SSIZE_MAX)
80 if (!audin_server_set_formats(client->audin, (SSIZE_T)client->subsystem->nAudinFormats,
81 client->subsystem->audinFormats))
86 if (!audin_server_set_formats(client->audin, -1,
nullptr))
92 audin_server_context_free(audin);
93 client->audin =
nullptr;
98void shadow_client_audin_uninit(rdpShadowClient* client)
100 WINPR_ASSERT(client);
102#if defined(CHANNEL_AUDIN_SERVER)
103 audin_server_context_free(client->audin);
104 client->audin =
nullptr;