wineoss: Implement Wow64 mmdevapi entry points in the Unix library.
Signed-off-by: Huw Davies <huw@codeweavers.com> Signed-off-by: Jacek Caban <jacek@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
e3b9aa1487
commit
e235240ef4
|
@ -1641,3 +1641,356 @@ unixlib_entry_t __wine_unix_call_funcs[] =
|
|||
midi_notify_wait,
|
||||
aux_message,
|
||||
};
|
||||
|
||||
#ifdef _WIN64
|
||||
|
||||
typedef UINT PTR32;
|
||||
|
||||
static NTSTATUS wow64_get_endpoint_ids(void *args)
|
||||
{
|
||||
struct
|
||||
{
|
||||
EDataFlow flow;
|
||||
PTR32 endpoints;
|
||||
unsigned int size;
|
||||
HRESULT result;
|
||||
unsigned int num;
|
||||
unsigned int default_idx;
|
||||
} *params32 = args;
|
||||
struct get_endpoint_ids_params params =
|
||||
{
|
||||
.flow = params32->flow,
|
||||
.endpoints = ULongToPtr(params32->endpoints),
|
||||
.size = params32->size
|
||||
};
|
||||
get_endpoint_ids(¶ms);
|
||||
params32->size = params.size;
|
||||
params32->result = params.result;
|
||||
params32->num = params.num;
|
||||
params32->default_idx = params.default_idx;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static NTSTATUS wow64_create_stream(void *args)
|
||||
{
|
||||
struct
|
||||
{
|
||||
PTR32 device;
|
||||
EDataFlow flow;
|
||||
AUDCLNT_SHAREMODE share;
|
||||
UINT flags;
|
||||
REFERENCE_TIME duration;
|
||||
REFERENCE_TIME period;
|
||||
PTR32 fmt;
|
||||
HRESULT result;
|
||||
PTR32 stream;
|
||||
} *params32 = args;
|
||||
struct create_stream_params params =
|
||||
{
|
||||
.device = ULongToPtr(params32->device),
|
||||
.flow = params32->flow,
|
||||
.share = params32->share,
|
||||
.flags = params32->flags,
|
||||
.duration = params32->duration,
|
||||
.period = params32->period,
|
||||
.fmt = ULongToPtr(params32->fmt),
|
||||
.stream = ULongToPtr(params32->stream)
|
||||
};
|
||||
create_stream(¶ms);
|
||||
params32->result = params.result;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static NTSTATUS wow64_release_stream(void *args)
|
||||
{
|
||||
struct
|
||||
{
|
||||
stream_handle stream;
|
||||
PTR32 timer_thread;
|
||||
HRESULT result;
|
||||
} *params32 = args;
|
||||
struct release_stream_params params =
|
||||
{
|
||||
.stream = params32->stream,
|
||||
.timer_thread = ULongToHandle(params32->timer_thread)
|
||||
};
|
||||
release_stream(¶ms);
|
||||
params32->result = params.result;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static NTSTATUS wow64_get_render_buffer(void *args)
|
||||
{
|
||||
struct
|
||||
{
|
||||
stream_handle stream;
|
||||
UINT32 frames;
|
||||
HRESULT result;
|
||||
PTR32 data;
|
||||
} *params32 = args;
|
||||
BYTE *data = NULL;
|
||||
struct get_render_buffer_params params =
|
||||
{
|
||||
.stream = params32->stream,
|
||||
.frames = params32->frames,
|
||||
.data = &data
|
||||
};
|
||||
get_render_buffer(¶ms);
|
||||
params32->result = params.result;
|
||||
*(unsigned int *)ULongToPtr(params32->data) = PtrToUlong(data);
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static NTSTATUS wow64_get_capture_buffer(void *args)
|
||||
{
|
||||
struct
|
||||
{
|
||||
stream_handle stream;
|
||||
HRESULT result;
|
||||
PTR32 data;
|
||||
PTR32 frames;
|
||||
PTR32 flags;
|
||||
PTR32 devpos;
|
||||
PTR32 qpcpos;
|
||||
} *params32 = args;
|
||||
BYTE *data = NULL;
|
||||
struct get_capture_buffer_params params =
|
||||
{
|
||||
.stream = params32->stream,
|
||||
.data = &data,
|
||||
.frames = ULongToPtr(params32->frames),
|
||||
.flags = ULongToPtr(params32->flags),
|
||||
.devpos = ULongToPtr(params32->devpos),
|
||||
.qpcpos = ULongToPtr(params32->qpcpos)
|
||||
};
|
||||
get_capture_buffer(¶ms);
|
||||
params32->result = params.result;
|
||||
*(unsigned int *)ULongToPtr(params32->data) = PtrToUlong(data);
|
||||
return STATUS_SUCCESS;
|
||||
};
|
||||
|
||||
static NTSTATUS wow64_is_format_supported(void *args)
|
||||
{
|
||||
struct
|
||||
{
|
||||
PTR32 device;
|
||||
EDataFlow flow;
|
||||
AUDCLNT_SHAREMODE share;
|
||||
PTR32 fmt_in;
|
||||
PTR32 fmt_out;
|
||||
HRESULT result;
|
||||
} *params32 = args;
|
||||
struct is_format_supported_params params =
|
||||
{
|
||||
.device = ULongToPtr(params32->device),
|
||||
.flow = params32->flow,
|
||||
.share = params32->share,
|
||||
.fmt_in = ULongToPtr(params32->fmt_in),
|
||||
.fmt_out = ULongToPtr(params32->fmt_out)
|
||||
};
|
||||
is_format_supported(¶ms);
|
||||
params32->result = params.result;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static NTSTATUS wow64_get_mix_format(void *args)
|
||||
{
|
||||
struct
|
||||
{
|
||||
PTR32 device;
|
||||
EDataFlow flow;
|
||||
PTR32 fmt;
|
||||
HRESULT result;
|
||||
} *params32 = args;
|
||||
struct get_mix_format_params params =
|
||||
{
|
||||
.device = ULongToPtr(params32->device),
|
||||
.flow = params32->flow,
|
||||
.fmt = ULongToPtr(params32->fmt)
|
||||
};
|
||||
get_mix_format(¶ms);
|
||||
params32->result = params.result;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static NTSTATUS wow64_get_buffer_size(void *args)
|
||||
{
|
||||
struct
|
||||
{
|
||||
stream_handle stream;
|
||||
HRESULT result;
|
||||
PTR32 size;
|
||||
} *params32 = args;
|
||||
struct get_buffer_size_params params =
|
||||
{
|
||||
.stream = params32->stream,
|
||||
.size = ULongToPtr(params32->size)
|
||||
};
|
||||
get_buffer_size(¶ms);
|
||||
params32->result = params.result;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static NTSTATUS wow64_get_latency(void *args)
|
||||
{
|
||||
struct
|
||||
{
|
||||
stream_handle stream;
|
||||
HRESULT result;
|
||||
PTR32 latency;
|
||||
} *params32 = args;
|
||||
struct get_latency_params params =
|
||||
{
|
||||
.stream = params32->stream,
|
||||
.latency = ULongToPtr(params32->latency)
|
||||
};
|
||||
get_latency(¶ms);
|
||||
params32->result = params.result;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static NTSTATUS wow64_get_current_padding(void *args)
|
||||
{
|
||||
struct
|
||||
{
|
||||
stream_handle stream;
|
||||
HRESULT result;
|
||||
PTR32 padding;
|
||||
} *params32 = args;
|
||||
struct get_current_padding_params params =
|
||||
{
|
||||
.stream = params32->stream,
|
||||
.padding = ULongToPtr(params32->padding)
|
||||
};
|
||||
get_current_padding(¶ms);
|
||||
params32->result = params.result;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static NTSTATUS wow64_get_next_packet_size(void *args)
|
||||
{
|
||||
struct
|
||||
{
|
||||
stream_handle stream;
|
||||
HRESULT result;
|
||||
PTR32 frames;
|
||||
} *params32 = args;
|
||||
struct get_next_packet_size_params params =
|
||||
{
|
||||
.stream = params32->stream,
|
||||
.frames = ULongToPtr(params32->frames)
|
||||
};
|
||||
get_next_packet_size(¶ms);
|
||||
params32->result = params.result;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static NTSTATUS wow64_get_frequency(void *args)
|
||||
{
|
||||
struct
|
||||
{
|
||||
stream_handle stream;
|
||||
HRESULT result;
|
||||
PTR32 frequency;
|
||||
} *params32 = args;
|
||||
struct get_frequency_params params =
|
||||
{
|
||||
.stream = params32->stream,
|
||||
.frequency = ULongToPtr(params32->frequency)
|
||||
};
|
||||
get_frequency(¶ms);
|
||||
params32->result = params.result;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static NTSTATUS wow64_get_position(void *args)
|
||||
{
|
||||
struct
|
||||
{
|
||||
stream_handle stream;
|
||||
HRESULT result;
|
||||
PTR32 position;
|
||||
PTR32 qpctime;
|
||||
} *params32 = args;
|
||||
struct get_position_params params =
|
||||
{
|
||||
.stream = params32->stream,
|
||||
.position = ULongToPtr(params32->position),
|
||||
.qpctime = ULongToPtr(params32->qpctime)
|
||||
};
|
||||
get_position(¶ms);
|
||||
params32->result = params.result;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static NTSTATUS wow64_set_volumes(void *args)
|
||||
{
|
||||
struct
|
||||
{
|
||||
stream_handle stream;
|
||||
float master_volume;
|
||||
PTR32 volumes;
|
||||
PTR32 session_volumes;
|
||||
} *params32 = args;
|
||||
struct set_volumes_params params =
|
||||
{
|
||||
.stream = params32->stream,
|
||||
.master_volume = params32->master_volume,
|
||||
.volumes = ULongToPtr(params32->volumes),
|
||||
.session_volumes = ULongToPtr(params32->session_volumes)
|
||||
};
|
||||
return set_volumes(¶ms);
|
||||
}
|
||||
|
||||
static NTSTATUS wow64_set_event_handle(void *args)
|
||||
{
|
||||
struct
|
||||
{
|
||||
stream_handle stream;
|
||||
PTR32 event;
|
||||
HRESULT result;
|
||||
} *params32 = args;
|
||||
struct set_event_handle_params params =
|
||||
{
|
||||
.stream = params32->stream,
|
||||
.event = ULongToHandle(params32->event)
|
||||
};
|
||||
|
||||
set_event_handle(¶ms);
|
||||
params32->result = params.result;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
unixlib_entry_t __wine_unix_call_wow64_funcs[] =
|
||||
{
|
||||
test_connect,
|
||||
wow64_get_endpoint_ids,
|
||||
wow64_create_stream,
|
||||
wow64_release_stream,
|
||||
start,
|
||||
stop,
|
||||
reset,
|
||||
timer_loop,
|
||||
wow64_get_render_buffer,
|
||||
release_render_buffer,
|
||||
wow64_get_capture_buffer,
|
||||
release_capture_buffer,
|
||||
wow64_is_format_supported,
|
||||
wow64_get_mix_format,
|
||||
wow64_get_buffer_size,
|
||||
wow64_get_latency,
|
||||
wow64_get_current_padding,
|
||||
wow64_get_next_packet_size,
|
||||
wow64_get_frequency,
|
||||
wow64_get_position,
|
||||
wow64_set_volumes,
|
||||
wow64_set_event_handle,
|
||||
is_started,
|
||||
midi_release,
|
||||
midi_out_message,
|
||||
midi_in_message,
|
||||
midi_notify_wait,
|
||||
aux_message,
|
||||
};
|
||||
|
||||
#endif /* _WIN64 */
|
||||
|
|
Loading…
Reference in New Issue