Commit Graph

74 Commits

Author SHA1 Message Date
Huw Davies ce0e6ccb32 winecoreaudio: Build with msvcrt.
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-12-01 18:13:54 +01:00
Huw Davies 14029a47c9 winecoreaudio: Always start the notification thread.
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-12-01 18:13:54 +01:00
Huw Davies 92f7c86f68 winecoreaudio: Move the midi input event processing to the unixlib.
Notifications of incoming data are now directly added to a notify
ring-buffer by macOS's midi read callback.  The ring-buffer is
implemented with an unused sentinel directly before the read ptr to
distinguish between the full vs empty state.  Notifications are
processed by the client's notify thread via the midi_notify_wait
syscall.

Note that the read callback thread is not a Win32 thread, so the
Win32 api cannot be used in anything that it calls.

Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-12-01 18:13:54 +01:00
Huw Davies 06bb1bdb14 winecoreaudio: Introduce a notification thread.
Currently the thread just blocks until told to quit by midi_release.
Eventually, this thread will dispatch the MIM_DATA and MIM_LONGDATA
notifications and essentially replace the existing RunLoop-based
mechanism.

Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-12-01 18:13:54 +01:00
Huw Davies 3b043e72b5 winecoreaudio: Introduce a helper to retrieve the time.
The motivation is that this will need to be called from a
non-Win32 thread and so shouldn't use the Win32 API.  An
added benefit is that it will eliminate the 16ms jitter
associated with GetTickCount().

The instance of the helper on the user-side is temporary.

Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-12-01 18:13:54 +01:00
Huw Davies ac1059ff60 winecoreaudio: Move midi_in_reset to the unixlib.
The headers are removed one at a time so that each notification
can be reported back to the client-side.  If there are remaining
headers, the unixlib will return ERROR_RETRY to request that the
client calls again.

Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-29 23:25:46 +01:00
Huw Davies 01ad503004 winecoreaudio: Pass the time relative to the start time to the callback.
This matches the behaviour of the other instance of the invocation of
the MIM_LONGDATA callback.

It's rather difficult to reliably write a test for this, but it has
been observed to be the case on Windows.

Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-29 23:25:46 +01:00
Huw Davies 27bda12c99 winecoreaudio: Move midi_in_add_buffer to the unixlib.
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-29 23:25:46 +01:00
Huw Davies 9eeee3ddbf winecoreaudio: Move the midi in lock to the unixlib.
The syscall itself is temporary.

Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-29 23:25:46 +01:00
Huw Davies 05731b14d3 winecoreaudio: Move midi_in_start and midi_in_stop to the unixlib.
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-29 23:25:46 +01:00
Huw Davies 15bb0e79d6 winecoreaudio: Move midi_in_get_num_devs to the unixlib.
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-29 23:25:46 +01:00
Huw Davies 6f0b73a68d winecoreaudio: Move midi_in_get_devcaps to the unixlib.
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-29 23:25:46 +01:00
Huw Davies 4180aa9f9b winecoreaudio: Move midi_in_prepare and midi_in_unprepare to the unixlib.
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-29 23:25:46 +01:00
Huw Davies a66199f560 winecoreaudio: Move midi_in_close to the unixlib.
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-29 23:25:46 +01:00
Huw Davies a9dec89f49 winecoreaudio: Move midi_in_open to the unixlib.
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-29 23:25:46 +01:00
Huw Davies b74a8ab202 winecoreaudio: Move midi_out_reset to the unixlib.
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-26 18:10:48 +01:00
Huw Davies 5df38b4708 winecoreaudio: Move midi_out_[gs]et_volume to the unixlib.
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-26 18:10:46 +01:00
Huw Davies 501cbc1944 winecoreaudio: Move midi_out_get_num_devs to the unixlib.
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-26 18:10:44 +01:00
Huw Davies 266efe5c5d winecoreaudio: Move midi_out_get_devcaps to the unixlib.
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-26 18:10:42 +01:00
Huw Davies 15e30a492e winecoreaudio: Move midi_out_prepare and midi_out_unprepare to the unixlib.
While these could be left on the user-side, it seems simplest to move
everything across.

Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-26 18:10:39 +01:00
Huw Davies 47c698fc14 winecoreaudio: Move midi_out_long_data to the unixlib.
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-26 18:10:37 +01:00
Huw Davies 1a1ef23079 winecoreaudio: Move midi_out_data to the unixlib.
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-26 18:10:35 +01:00
Huw Davies bf502e3685 winecoreaudio: Move midi_out_close to the unixlib.
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-26 18:10:33 +01:00
Huw Davies ec9d2a7773 winecoreaudio: Move midi_out_open to the unixlib.
Notifications are filled out by the unixlib and returned to
the user-side for dispatch.

Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-26 18:10:30 +01:00
Huw Davies e506d99ceb winecoreaudio: Move midi_init and midi_release to the unixlib.
midi_init temporarily returns unix-side info, which will eventually
be removed.

Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-26 18:10:28 +01:00
Huw Davies dcbbe18519 winecoreaudio: Combine MIDIIn_SendMessage into MIDIIn_ReadProc.
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-26 18:10:25 +01:00
Huw Davies 80be5c25e3 winecoreaudio: Avoid 64-bit ptr truncation.
This makes winecoreaudio consistent with the other midi drivers.

Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-24 18:48:09 +01:00
Huw Davies 0e52d77f92 winecoreaudio: Move DriverProc to midi.c.
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-11-17 16:22:51 +01:00
Brendan Shanks 1fc8a8f234 winecoreaudio.drv: Only read 'length' bytes from received MIDIPackets.
The Core MIDI MIDIPacket struct is declared with a 256-byte data array,
but this is just for convenience. There may be only one accessible byte,
or there may be more than 256.
Only read 'length' bytes from the packet, and correctly handle a
length > 256.

Signed-off-by: Brendan Shanks <bshanks@codeweavers.com>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2020-11-09 20:15:11 +01:00
Michael Stefaniuc 2170cce2af winecoreaudio.drv: Use the ARRAY_SIZE() macro.
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2018-11-16 16:33:11 +01:00
Andrew Eikum 387fbdc7a1 winecoreaudio: Handle sysex MIDI messages.
Originally submitted by "tinez <tinez@tlen.pl>".

Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2015-11-11 19:39:23 +09:00
Ken Thomases 9a7993045e winecoreaudio: Fix a potential leak. (Clang). 2013-10-21 10:46:48 +02:00
Jörg Höhle b95910ccbc winmm: More compatible midiIn/Out[Un]Prepare MHDR_* flag handling. 2013-02-13 17:19:43 +01:00
Nikolay Sivov d05757d29a winecoreaudio: Fix variable types so pointer is not truncated on 64bit. 2012-08-21 11:46:03 +02:00
Francois Gouget fac36c55e9 Assorted typo, spelling, wording and case fixes. 2012-05-15 16:26:43 +02:00
Pierre Schweitzer 8975ad6e31 winecoreaudio.drv: Fix handle leak. 2012-01-03 12:37:36 +01:00
Francois Gouget cfce8ab459 winecoreaudio.drv: Give a name to the midi and mmdevapi critical sections. 2011-11-08 09:49:30 +01:00
Alexandre Julliard 41d9d0a2f3 winecoreaudio.drv: Remove unnecessary ifdefs. 2011-03-28 22:15:12 +02:00
Jörg Höhle a74c29e081 winecoreaudio: Fix 64-bits incompatibilities. 2011-03-14 13:13:17 +01:00
Jörg Höhle c0d6db3944 winecoreaudio: Do not access MIDIHDR past notification callback. 2011-03-14 13:12:16 +01:00
Michael Stefaniuc bf00cd3380 winecoreaudio.drv: Remove superfluous casts of zero. 2010-03-29 11:49:53 +02:00
Jörg Höhle 64b6287e83 winmm: Accept the ancient, smaller MIDIHDR. 2010-02-22 13:18:26 +01:00
Jörg Höhle 945588a302 winecoreaudio: Ignore failure to notify MIDI clients. 2010-02-05 13:14:45 +01:00
Jörg Höhle 9c8ce89bf0 winecoreaudio: MOD_MIDIPORT has 0 voices and notes and FFFF ChannelMask. 2010-02-03 15:49:32 +01:00
Jörg Höhle a758c6a981 winmm: The 64KB buffer limit on MIDIHDR buffers applies to streams only. 2010-02-03 15:49:09 +01:00
Jörg Höhle ffeef37be2 winecoreaudio: Fix a float cast in the computation of MIDI volume. 2010-02-02 11:47:20 +01:00
Ken Thomases 1b5ca01aeb winecoreaudio: Consolidate formatting of FOURCC values in a function. 2009-10-12 12:19:02 +02:00
Christian Costa d700042f05 winecoreaudio.drv: Initialize correctly the header before adding it to the queue. 2008-12-22 14:14:52 +01:00
Ken Thomases fa2d39e45f coreaudio: Standardize on DRV_SUCCESS/FAILURE status codes for setup functions. 2008-03-12 12:01:31 +01:00
Francois Gouget d0794c4aeb Assorted spelling fixes. 2008-01-23 21:16:22 +01:00