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) 
   34static UINT AudinServerData(audin_server_context* audin, 
const SNDIN_DATA* data)
 
   36  rdpShadowClient* client = NULL;
 
   37  rdpShadowSubsystem* subsystem = NULL;
 
   42  client = audin->userdata;
 
   44  WINPR_ASSERT(client->server);
 
   45  subsystem = client->server->subsystem;
 
   46  WINPR_ASSERT(subsystem);
 
   48  if (!client->mayInteract)
 
   51  if (!IFCALLRESULT(TRUE, subsystem->AudinServerReceiveSamples, subsystem, client,
 
   52                    audin_server_get_negotiated_format(client->audin), data->Data))
 
   53    return ERROR_INTERNAL_ERROR;
 
   60BOOL shadow_client_audin_init(rdpShadowClient* client)
 
   64#if defined(CHANNEL_AUDIN_SERVER) 
   65  audin_server_context* audin = client->audin = audin_server_context_new(client->vcm);
 
   70  audin->userdata = client;
 
   72  audin->Data = AudinServerData;
 
   74  if (client->subsystem->audinFormats)
 
   76    if (client->subsystem->nAudinFormats > SSIZE_MAX)
 
   79    if (!audin_server_set_formats(client->audin, (SSIZE_T)client->subsystem->nAudinFormats,
 
   80                                  client->subsystem->audinFormats))
 
   85    if (!audin_server_set_formats(client->audin, -1, NULL))
 
   91  audin_server_context_free(audin);
 
   97void shadow_client_audin_uninit(rdpShadowClient* client)
 
  101#if defined(CHANNEL_AUDIN_SERVER) 
  102  audin_server_context_free(client->audin);
 
  103  client->audin = NULL;