21#include <freerdp/config.h>
28#include <winpr/stream.h>
29#include <winpr/cmdline.h>
31#include <freerdp/types.h>
32#include <freerdp/settings.h>
34#include "rdpsnd_main.h"
38 rdpsndDevicePlugin device;
41static BOOL rdpsnd_fake_open(WINPR_ATTR_UNUSED rdpsndDevicePlugin* device,
43 WINPR_ATTR_UNUSED UINT32 latency)
48static void rdpsnd_fake_close(WINPR_ATTR_UNUSED rdpsndDevicePlugin* device)
52static BOOL rdpsnd_fake_set_volume(WINPR_ATTR_UNUSED rdpsndDevicePlugin* device,
53 WINPR_ATTR_UNUSED UINT32 value)
58static void rdpsnd_fake_free(rdpsndDevicePlugin* device)
60 rdpsndFakePlugin* fake = (rdpsndFakePlugin*)device;
68static BOOL rdpsnd_fake_format_supported(WINPR_ATTR_UNUSED rdpsndDevicePlugin* device,
74static UINT rdpsnd_fake_play(WINPR_ATTR_UNUSED rdpsndDevicePlugin* device,
75 WINPR_ATTR_UNUSED
const BYTE* data, WINPR_ATTR_UNUSED
size_t size)
85static UINT rdpsnd_fake_parse_addin_args(rdpsndFakePlugin* fake,
const ADDIN_ARGV* args)
93 COMMAND_LINE_SIGIL_NONE | COMMAND_LINE_SEPARATOR_COLON | COMMAND_LINE_IGN_UNKNOWN_KEYWORD;
94 status = CommandLineParseArgumentsA(args->argc, args->argv, rdpsnd_fake_args, flags, fake,
98 return ERROR_INVALID_DATA;
100 arg = rdpsnd_fake_args;
104 if (!(arg->Flags & COMMAND_LINE_VALUE_PRESENT))
107 CommandLineSwitchStart(arg) CommandLineSwitchEnd(arg)
108 }
while ((arg = CommandLineFindNextArgumentA(arg)) !=
nullptr);
110 return CHANNEL_RC_OK;
118FREERDP_ENTRY_POINT(UINT VCAPITYPE fake_freerdp_rdpsnd_client_subsystem_entry(
122 rdpsndFakePlugin* fake =
nullptr;
123 UINT ret = CHANNEL_RC_OK;
124 fake = (rdpsndFakePlugin*)calloc(1,
sizeof(rdpsndFakePlugin));
127 return CHANNEL_RC_NO_MEMORY;
129 fake->device.Open = rdpsnd_fake_open;
130 fake->device.FormatSupported = rdpsnd_fake_format_supported;
131 fake->device.SetVolume = rdpsnd_fake_set_volume;
132 fake->device.Play = rdpsnd_fake_play;
133 fake->device.Close = rdpsnd_fake_close;
134 fake->device.Free = rdpsnd_fake_free;
135 args = pEntryPoints->args;
139 ret = rdpsnd_fake_parse_addin_args(fake, args);
141 if (ret != CHANNEL_RC_OK)
143 WLog_ERR(TAG,
"error parsing arguments");
148 pEntryPoints->pRegisterRdpsndDevice(pEntryPoints->rdpsnd, &fake->device);
151 rdpsnd_fake_free(&fake->device);