[PATCH 4/6] winealsa: Move MIDM_OPEN and MIDM_CLOSE to the unixlib.

Andrew Eikum aeikum at codeweavers.com
Fri Mar 25 08:59:33 CDT 2022


Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>

On Fri, Mar 25, 2022 at 08:42:17AM +0000, Huw Davies wrote:
> Signed-off-by: Huw Davies <huw at codeweavers.com>
> ---
>  dlls/winealsa.drv/Makefile.in |   2 +-
>  dlls/winealsa.drv/alsa.c      |   4 -
>  dlls/winealsa.drv/alsamidi.c  | 231 ++++++++++++++++++++++++---
>  dlls/winealsa.drv/midi.c      | 287 ----------------------------------
>  dlls/winealsa.drv/unixlib.h   |  33 ----
>  5 files changed, 206 insertions(+), 351 deletions(-)
> 
> diff --git a/dlls/winealsa.drv/Makefile.in b/dlls/winealsa.drv/Makefile.in
> index 41be57d8b83..2113594fbe3 100644
> --- a/dlls/winealsa.drv/Makefile.in
> +++ b/dlls/winealsa.drv/Makefile.in
> @@ -3,7 +3,7 @@ MODULE    = winealsa.drv
>  UNIXLIB   = winealsa.so
>  IMPORTS   = uuid ole32 advapi32
>  DELAYIMPORTS = winmm
> -EXTRALIBS = $(ALSA_LIBS)
> +EXTRALIBS = $(ALSA_LIBS) $(PTHREAD_LIBS)
>  
>  EXTRADLLFLAGS = -mcygwin
>  
> diff --git a/dlls/winealsa.drv/alsa.c b/dlls/winealsa.drv/alsa.c
> index b18588ab1c0..e068f6608f3 100644
> --- a/dlls/winealsa.drv/alsa.c
> +++ b/dlls/winealsa.drv/alsa.c
> @@ -2449,8 +2449,4 @@ unixlib_entry_t __wine_unix_call_funcs[] =
>      midi_out_message,
>      midi_in_message,
>      midi_notify_wait,
> -
> -    midi_seq_lock, /* temporary */
> -    midi_seq_open,
> -    midi_handle_event,
>  };
> diff --git a/dlls/winealsa.drv/alsamidi.c b/dlls/winealsa.drv/alsamidi.c
> index 1633268b533..8ec646281d2 100644
> --- a/dlls/winealsa.drv/alsamidi.c
> +++ b/dlls/winealsa.drv/alsamidi.c
> @@ -60,6 +60,19 @@ struct midi_dest
>      int                 port_out;
>  };
>  
> +struct midi_src
> +{
> +    int                 state; /* -1 disabled, 0 is no recording started, 1 in recording, bit 2 set if in sys exclusive recording */
> +    MIDIOPENDESC        midiDesc;
> +    WORD                wFlags;
> +    MIDIHDR            *lpQueueHdr;
> +    UINT                startTime;
> +    MIDIINCAPSW         caps;
> +    snd_seq_t          *seq;
> +    snd_seq_addr_t      addr;
> +    int                 port_in;
> +};
> +
>  static pthread_mutex_t seq_mutex = PTHREAD_MUTEX_INITIALIZER;
>  static pthread_mutex_t in_buffer_mutex = PTHREAD_MUTEX_INITIALIZER;
>  
> @@ -70,6 +83,10 @@ static snd_seq_t *midi_seq;
>  static unsigned int seq_refs;
>  static int port_in = -1;
>  
> +static unsigned int num_midi_in_started;
> +static int rec_cancel_pipe[2];
> +static pthread_t rec_thread_id;
> +
>  static pthread_mutex_t notify_mutex = PTHREAD_MUTEX_INITIALIZER;
>  static pthread_cond_t notify_cond = PTHREAD_COND_INITIALIZER;
>  static BOOL notify_quit;
> @@ -87,14 +104,6 @@ static void seq_unlock(void)
>      pthread_mutex_unlock(&seq_mutex);
>  }
>  
> -NTSTATUS midi_seq_lock(void *args)
> -{
> -    if (args) seq_lock();
> -    else seq_unlock();
> -
> -    return STATUS_SUCCESS;
> -}
> -
>  static void in_buffer_lock(void)
>  {
>      pthread_mutex_lock(&in_buffer_mutex);
> @@ -233,18 +242,6 @@ static void seq_close(void)
>      seq_unlock();
>  }
>  
> -NTSTATUS midi_seq_open(void *args)
> -{
> -    struct midi_seq_open_params *params = args;
> -
> -    if (!params->close)
> -        params->seq = seq_open(params->port_in);
> -    else
> -        seq_close();
> -
> -    return STATUS_SUCCESS;
> -}
> -
>  static int alsa_to_win_device_type(unsigned int type)
>  {
>      /* MOD_MIDIPORT     output port
> @@ -458,8 +455,6 @@ NTSTATUS midi_init(void *args)
>      free( pinfo );
>  
>      *params->err = NOERROR;
> -    params->num_srcs = num_srcs;
> -    params->srcs = srcs;
>  
>      TRACE("End\n");
>  
> @@ -1033,9 +1028,8 @@ static void handle_regular_event(struct midi_src *src, snd_seq_event_t *ev)
>      }
>  }
>  
> -NTSTATUS midi_handle_event(void *args)
> +static void midi_handle_event(snd_seq_event_t *ev)
>  {
> -    snd_seq_event_t *ev = args;
>      struct midi_src *src;
>  
>      /* Find the target device */
> @@ -1043,14 +1037,193 @@ NTSTATUS midi_handle_event(void *args)
>          if ((ev->source.client == src->addr.client) && (ev->source.port == src->addr.port))
>              break;
>      if ((src == srcs + num_srcs) || (src->state != 1))
> -        return STATUS_SUCCESS;
> +        return;
>  
>      if (ev->type == SND_SEQ_EVENT_SYSEX)
>          handle_sysex_event(src, ev->data.ext.ptr, ev->data.ext.len);
>      else
>          handle_regular_event(src, ev);
> +}
>  
> -    return STATUS_SUCCESS;
> +static void *rec_thread_proc(void *arg)
> +{
> +    snd_seq_t *midi_seq = (snd_seq_t *)arg;
> +    int num_fds;
> +    struct pollfd *pollfd;
> +    int ret;
> +
> +    /* Add on one for the read end of the cancel pipe */
> +    num_fds = snd_seq_poll_descriptors_count(midi_seq, POLLIN) + 1;
> +    pollfd = malloc(num_fds * sizeof(struct pollfd));
> +
> +    while(1)
> +    {
> +        pollfd[0].fd = rec_cancel_pipe[0];
> +        pollfd[0].events = POLLIN;
> +
> +        seq_lock();
> +        snd_seq_poll_descriptors(midi_seq, pollfd + 1, num_fds - 1, POLLIN);
> +        seq_unlock();
> +
> +        /* Check if an event is present */
> +        if (poll(pollfd, num_fds, -1) <= 0)
> +            continue;
> +
> +        if (pollfd[0].revents & POLLIN) /* cancelled */
> +            break;
> +
> +        do
> +        {
> +            snd_seq_event_t *ev;
> +
> +            seq_lock();
> +            snd_seq_event_input(midi_seq, &ev);
> +            seq_unlock();
> +
> +            if (ev)
> +            {
> +                midi_handle_event(ev);
> +                snd_seq_free_event(ev);
> +            }
> +
> +            seq_lock();
> +            ret = snd_seq_event_input_pending(midi_seq, 0);
> +            seq_unlock();
> +        } while(ret > 0);
> +    }
> +
> +    free(pollfd);
> +    return 0;
> +}
> +
> +static UINT midi_in_open(WORD dev_id, MIDIOPENDESC *desc, UINT flags, struct notify_context *notify)
> +{
> +    struct midi_src *src;
> +    int ret = 0, port_in;
> +    snd_seq_t *midi_seq;
> +
> +    TRACE("(%04X, %p, %08X);\n", dev_id, desc, flags);
> +
> +    if (!desc)
> +    {
> +        WARN("Invalid Parameter !\n");
> +        return MMSYSERR_INVALPARAM;
> +    }
> +
> +    /* FIXME: check that contents of desc are correct */
> +
> +    if (dev_id >= num_srcs)
> +    {
> +        WARN("dev_id too large (%u) !\n", dev_id);
> +        return MMSYSERR_BADDEVICEID;
> +    }
> +    src = srcs + dev_id;
> +
> +    if (src->state == -1)
> +    {
> +        WARN("device disabled\n");
> +        return MIDIERR_NODEVICE;
> +    }
> +    if (src->midiDesc.hMidi)
> +    {
> +        WARN("device already open !\n");
> +        return MMSYSERR_ALLOCATED;
> +    }
> +    if (flags & MIDI_IO_STATUS)
> +    {
> +        WARN("No support for MIDI_IO_STATUS in flags yet, ignoring it\n");
> +        flags &= ~MIDI_IO_STATUS;
> +    }
> +    if (flags & ~CALLBACK_TYPEMASK)
> +    {
> +        FIXME("Bad flags %08X\n", flags);
> +        return MMSYSERR_INVALFLAG;
> +    }
> +
> +    if (!(midi_seq = seq_open(&port_in)))
> +        return MMSYSERR_ERROR;
> +
> +    src->wFlags = HIWORD(flags & CALLBACK_TYPEMASK);
> +
> +    src->lpQueueHdr = NULL;
> +    src->midiDesc = *desc;
> +    src->state = 0;
> +    src->startTime = 0;
> +    src->seq = midi_seq;
> +    src->port_in = port_in;
> +
> +    /* Connect our app port to the device port */
> +    seq_lock();
> +    ret = snd_seq_connect_from(midi_seq, port_in, src->addr.client, src->addr.port);
> +    seq_unlock();
> +    if (ret < 0)
> +        return MMSYSERR_NOTENABLED;
> +
> +    TRACE("Input port :%d connected %d:%d\n", port_in, src->addr.client, src->addr.port);
> +
> +    if (num_midi_in_started++ == 0)
> +    {
> +        pipe(rec_cancel_pipe);
> +        if (pthread_create(&rec_thread_id, NULL, rec_thread_proc, midi_seq))
> +        {
> +            close(rec_cancel_pipe[0]);
> +            close(rec_cancel_pipe[1]);
> +            num_midi_in_started = 0;
> +            WARN("Couldn't create thread for midi-in\n");
> +            seq_close();
> +            return MMSYSERR_ERROR;
> +        }
> +    }
> +
> +    set_in_notify(notify, src, dev_id, MIM_OPEN, 0, 0);
> +    return MMSYSERR_NOERROR;
> +}
> +
> +static UINT midi_in_close(WORD dev_id, struct notify_context *notify)
> +{
> +    struct midi_src *src;
> +
> +    TRACE("(%04X);\n", dev_id);
> +
> +    if (dev_id >= num_srcs)
> +    {
> +        WARN("dev_id too big (%u) !\n", dev_id);
> +        return MMSYSERR_BADDEVICEID;
> +    }
> +    src = srcs + dev_id;
> +    if (!src->midiDesc.hMidi)
> +    {
> +        WARN("device not opened !\n");
> +        return MMSYSERR_ERROR;
> +    }
> +    if (src->lpQueueHdr)
> +        return MIDIERR_STILLPLAYING;
> +
> +    if (src->seq == NULL)
> +    {
> +        WARN("ooops !\n");
> +        return MMSYSERR_ERROR;
> +    }
> +    if (--num_midi_in_started == 0)
> +    {
> +        TRACE("Stopping thread for midi-in\n");
> +        write(rec_cancel_pipe[1], "x", 1);
> +        pthread_join(rec_thread_id, NULL);
> +        close(rec_cancel_pipe[0]);
> +        close(rec_cancel_pipe[1]);
> +        TRACE("Stopped thread for midi-in\n");
> +    }
> +
> +    seq_lock();
> +    snd_seq_disconnect_from(src->seq, src->port_in, src->addr.client, src->addr.port);
> +    seq_unlock();
> +    seq_close();
> +
> +    set_in_notify(notify, src, dev_id, MIM_CLOSE, 0, 0);
> +    src->midiDesc.hMidi = 0;
> +    src->seq = NULL;
> +
> +    return MMSYSERR_NOERROR;
>  }
>  
>  static UINT midi_in_add_buffer(WORD dev_id, MIDIHDR *hdr, UINT hdr_size)
> @@ -1257,6 +1430,12 @@ NTSTATUS midi_in_message(void *args)
>          /* FIXME: Pretend this is supported */
>          *params->err = MMSYSERR_NOERROR;
>          break;
> +    case MIDM_OPEN:
> +        *params->err = midi_in_open(params->dev_id, (MIDIOPENDESC *)params->param_1, params->param_2, params->notify);
> +        break;
> +    case MIDM_CLOSE:
> +        *params->err = midi_in_close(params->dev_id, params->notify);
> +        break;
>      case MIDM_ADDBUFFER:
>          *params->err = midi_in_add_buffer(params->dev_id, (MIDIHDR *)params->param_1, params->param_2);
>          break;
> diff --git a/dlls/winealsa.drv/midi.c b/dlls/winealsa.drv/midi.c
> index 327d4b7b200..b768517e655 100644
> --- a/dlls/winealsa.drv/midi.c
> +++ b/dlls/winealsa.drv/midi.c
> @@ -47,26 +47,6 @@
>  
>  WINE_DEFAULT_DEBUG_CHANNEL(midi);
>  
> -static WINE_MIDIIN	*MidiInDev;
> -
> -/* this is the total number of MIDI out devices found */
> -static	int 		MIDM_NumDevs = 0;
> -
> -static	int		numStartedMidiIn = 0;
> -
> -static int rec_cancel_pipe[2];
> -static HANDLE hThread;
> -
> -static void seq_lock(void)
> -{
> -    ALSA_CALL(midi_seq_lock, (void *)(UINT_PTR)1);
> -}
> -
> -static void seq_unlock(void)
> -{
> -    ALSA_CALL(midi_seq_lock, (void *)(UINT_PTR)0);
> -}
> -
>  static void notify_client(struct notify_context *notify)
>  {
>      TRACE("dev_id = %d msg = %d param1 = %04lX param2 = %04lX\n", notify->dev_id, notify->msg, notify->param_1, notify->param_2);
> @@ -75,264 +55,6 @@ static void notify_client(struct notify_context *notify)
>                     notify->instance, notify->param_1, notify->param_2);
>  }
>  
> -/*======================================================================*
> - *                  Low level MIDI implementation			*
> - *======================================================================*/
> -
> -#if 0 /* Debug Purpose */
> -static void error_handler(const char* file, int line, const char* function, int err, const char* fmt, ...)
> -{
> -    va_list arg;
> -    if (err == ENOENT)
> -        return;
> -    va_start(arg, fmt);
> -    fprintf(stderr, "ALSA lib %s:%i:(%s) ", file, line, function);
> -    vfprintf(stderr, fmt, arg);
> -    if (err)
> -        fprintf(stderr, ": %s", snd_strerror(err));
> -    putc('\n', stderr);
> -    va_end(arg);
> -}
> -#endif
> -
> -/**************************************************************************
> - * 			MIDI_NotifyClient			[internal]
> - */
> -static void MIDI_NotifyClient(UINT wDevID, WORD wMsg,
> -			      DWORD_PTR dwParam1, DWORD_PTR dwParam2)
> -{
> -    DWORD_PTR 		dwCallBack;
> -    UINT 		uFlags;
> -    HANDLE		hDev;
> -    DWORD_PTR 		dwInstance;
> -
> -    TRACE("wDevID = %04X wMsg = %d dwParm1 = %04lX dwParam2 = %04lX\n",
> -	  wDevID, wMsg, dwParam1, dwParam2);
> -
> -    switch (wMsg) {
> -    case MIM_OPEN:
> -    case MIM_CLOSE:
> -	if (wDevID > MIDM_NumDevs) return;
> -
> -	dwCallBack = MidiInDev[wDevID].midiDesc.dwCallback;
> -	uFlags = MidiInDev[wDevID].wFlags;
> -	hDev = MidiInDev[wDevID].midiDesc.hMidi;
> -	dwInstance = MidiInDev[wDevID].midiDesc.dwInstance;
> -	break;
> -    default:
> -	ERR("Unsupported MSW-MIDI message %u\n", wMsg);
> -	return;
> -    }
> -
> -    DriverCallback(dwCallBack, uFlags, hDev, wMsg, dwInstance, dwParam1, dwParam2);
> -}
> -
> -/**************************************************************************
> - * 			midiOpenSeq				[internal]
> - */
> -static snd_seq_t *midiOpenSeq(int *port_in_ret)
> -{
> -    struct midi_seq_open_params params;
> -
> -    params.port_in = port_in_ret;
> -    params.close = 0;
> -    ALSA_CALL(midi_seq_open, &params);
> -
> -    return params.seq;
> -}
> -
> -/**************************************************************************
> - * 			midiCloseSeq				[internal]
> - */
> -static int midiCloseSeq(void)
> -{
> -    struct midi_seq_open_params params;
> -
> -    params.port_in = NULL;
> -    params.close = 1;
> -    ALSA_CALL(midi_seq_open, &params);
> -
> -    return 0;
> -}
> -
> -static DWORD WINAPI midRecThread(void *arg)
> -{
> -    snd_seq_t *midi_seq = arg;
> -    int num_fds;
> -    struct pollfd *pollfd;
> -    int ret;
> -
> -    /* Add on one for the read end of the cancel pipe */
> -    num_fds = snd_seq_poll_descriptors_count(midi_seq, POLLIN) + 1;
> -    pollfd = malloc(num_fds * sizeof(struct pollfd));
> -
> -    while(1) {
> -        pollfd[0].fd = rec_cancel_pipe[0];
> -        pollfd[0].events = POLLIN;
> -
> -        seq_lock();
> -        snd_seq_poll_descriptors(midi_seq, pollfd + 1, num_fds - 1, POLLIN);
> -        seq_unlock();
> -
> -	/* Check if an event is present */
> -        if (poll(pollfd, num_fds, -1) <= 0)
> -            continue;
> -
> -        if (pollfd[0].revents & POLLIN) /* cancelled */
> -            break;
> -
> -	do {
> -            snd_seq_event_t *ev;
> -
> -            seq_lock();
> -            snd_seq_event_input(midi_seq, &ev);
> -            seq_unlock();
> -
> -            if (ev) {
> -                ALSA_CALL(midi_handle_event, ev);
> -                snd_seq_free_event(ev);
> -            }
> -
> -            seq_lock();
> -            ret = snd_seq_event_input_pending(midi_seq, 0);
> -            seq_unlock();
> -	} while(ret > 0);
> -    }
> -
> -    free(pollfd);
> -    return 0;
> -}
> -
> -/**************************************************************************
> - * 			midOpen					[internal]
> - */
> -static DWORD midOpen(WORD wDevID, LPMIDIOPENDESC lpDesc, DWORD dwFlags)
> -{
> -    int ret = 0, port_in;
> -    snd_seq_t *midi_seq;
> -
> -    TRACE("(%04X, %p, %08X);\n", wDevID, lpDesc, dwFlags);
> -
> -    if (lpDesc == NULL) {
> -	WARN("Invalid Parameter !\n");
> -	return MMSYSERR_INVALPARAM;
> -    }
> -
> -    /* FIXME :
> -     *	how to check that content of lpDesc is correct ?
> -     */
> -    if (wDevID >= MIDM_NumDevs) {
> -	WARN("wDevID too large (%u) !\n", wDevID);
> -	return MMSYSERR_BADDEVICEID;
> -    }
> -    if (MidiInDev[wDevID].state == -1) {        
> -        WARN("device disabled\n");
> -        return MIDIERR_NODEVICE;
> -    }
> -    if (MidiInDev[wDevID].midiDesc.hMidi != 0) {
> -	WARN("device already open !\n");
> -	return MMSYSERR_ALLOCATED;
> -    }
> -    if ((dwFlags & MIDI_IO_STATUS) != 0) {
> -	WARN("No support for MIDI_IO_STATUS in dwFlags yet, ignoring it\n");
> -	dwFlags &= ~MIDI_IO_STATUS;
> -    }
> -    if ((dwFlags & ~CALLBACK_TYPEMASK) != 0) {
> -	FIXME("Bad dwFlags\n");
> -	return MMSYSERR_INVALFLAG;
> -    }
> -
> -    if (!(midi_seq = midiOpenSeq(&port_in))) {
> -	return MMSYSERR_ERROR;
> -    }
> -
> -    MidiInDev[wDevID].wFlags = HIWORD(dwFlags & CALLBACK_TYPEMASK);
> -
> -    MidiInDev[wDevID].lpQueueHdr = NULL;
> -    MidiInDev[wDevID].midiDesc = *lpDesc;
> -    MidiInDev[wDevID].state = 0;
> -    MidiInDev[wDevID].startTime = 0;
> -    MidiInDev[wDevID].seq = midi_seq;
> -    MidiInDev[wDevID].port_in = port_in;
> -
> -    /* Connect our app port to the device port */
> -    seq_lock();
> -    ret = snd_seq_connect_from(midi_seq, port_in, MidiInDev[wDevID].addr.client,
> -                               MidiInDev[wDevID].addr.port);
> -    seq_unlock();
> -    if (ret < 0)
> -	return MMSYSERR_NOTENABLED;
> -
> -    TRACE("Input port :%d connected %d:%d\n",port_in,MidiInDev[wDevID].addr.client,MidiInDev[wDevID].addr.port);
> -
> -    if (numStartedMidiIn++ == 0) {
> -	pipe(rec_cancel_pipe);
> -	hThread = CreateThread(NULL, 0, midRecThread, midi_seq, 0, NULL);
> -	if (!hThread) {
> -            close(rec_cancel_pipe[0]);
> -            close(rec_cancel_pipe[1]);
> -	    numStartedMidiIn = 0;
> -	    WARN("Couldn't create thread for midi-in\n");
> -	    midiCloseSeq();
> -	    return MMSYSERR_ERROR;
> -	}
> -        SetThreadPriority(hThread, THREAD_PRIORITY_TIME_CRITICAL);
> -	TRACE("Created thread for midi-in\n");
> -    }
> -
> -    MIDI_NotifyClient(wDevID, MIM_OPEN, 0L, 0L);
> -    return MMSYSERR_NOERROR;
> -}
> -
> -/**************************************************************************
> - * 			midClose				[internal]
> - */
> -static DWORD midClose(WORD wDevID)
> -{
> -    int		ret = MMSYSERR_NOERROR;
> -
> -    TRACE("(%04X);\n", wDevID);
> -
> -    if (wDevID >= MIDM_NumDevs) {
> -	WARN("wDevID too big (%u) !\n", wDevID);
> -	return MMSYSERR_BADDEVICEID;
> -    }
> -    if (MidiInDev[wDevID].midiDesc.hMidi == 0) {
> -	WARN("device not opened !\n");
> -	return MMSYSERR_ERROR;
> -    }
> -    if (MidiInDev[wDevID].lpQueueHdr != 0) {
> -	return MIDIERR_STILLPLAYING;
> -    }
> -
> -    if (MidiInDev[wDevID].seq == NULL) {
> -	WARN("ooops !\n");
> -	return MMSYSERR_ERROR;
> -    }
> -    if (--numStartedMidiIn == 0) {
> -	TRACE("Stopping thread for midi-in\n");
> -        write(rec_cancel_pipe[1], "x", 1);
> -	if (WaitForSingleObject(hThread, 5000) != WAIT_OBJECT_0) {
> -	    WARN("Thread end not signaled, force termination\n");
> -	    TerminateThread(hThread, 0);
> -	}
> -        close(rec_cancel_pipe[0]);
> -        close(rec_cancel_pipe[1]);
> -    	TRACE("Stopped thread for midi-in\n");
> -    }
> -
> -    seq_lock();
> -    snd_seq_disconnect_from(MidiInDev[wDevID].seq, MidiInDev[wDevID].port_in, MidiInDev[wDevID].addr.client, MidiInDev[wDevID].addr.port);
> -    seq_unlock();
> -    midiCloseSeq();
> -
> -    MIDI_NotifyClient(wDevID, MIM_CLOSE, 0L, 0L);
> -    MidiInDev[wDevID].midiDesc.hMidi = 0;
> -    MidiInDev[wDevID].seq = NULL;
> -
> -    return ret;
> -}
> -
>  /*======================================================================*
>   *                  	    MIDI entry points 				*
>   *======================================================================*/
> @@ -350,11 +72,6 @@ static BOOL ALSA_MidiInit(void)
>      params.err = &err;
>      ALSA_CALL(midi_init, &params);
>  
> -    if (!err)
> -    {
> -        MIDM_NumDevs = params.num_srcs;
> -        MidiInDev = params.srcs;
> -    }
>      return TRUE;
>  }
>  
> @@ -374,10 +91,6 @@ DWORD WINAPI ALSA_midMessage(UINT wDevID, UINT wMsg, DWORD_PTR dwUser,
>      case DRVM_INIT:
>          ALSA_MidiInit();
>          return 0;
> -    case MIDM_OPEN:
> -	return midOpen(wDevID, (LPMIDIOPENDESC)dwParam1, dwParam2);
> -    case MIDM_CLOSE:
> -	return midClose(wDevID);
>      }
>  
>      params.dev_id = wDevID;
> diff --git a/dlls/winealsa.drv/unixlib.h b/dlls/winealsa.drv/unixlib.h
> index 46f256a1c6a..ad8865a0988 100644
> --- a/dlls/winealsa.drv/unixlib.h
> +++ b/dlls/winealsa.drv/unixlib.h
> @@ -207,27 +207,9 @@ struct get_prop_value_params
>      unsigned int *buffer_size;
>  };
>  
> -#include <alsa/asoundlib.h>
> -#include "mmddk.h"
> -
> -typedef struct midi_src
> -{
> -    int                 state;          /* -1 disabled, 0 is no recording started, 1 in recording, bit 2 set if in sys exclusive recording */
> -    MIDIOPENDESC        midiDesc;
> -    WORD                wFlags;
> -    MIDIHDR            *lpQueueHdr;
> -    UINT                startTime;
> -    MIDIINCAPSW         caps;
> -    snd_seq_t          *seq;
> -    snd_seq_addr_t      addr;
> -    int                 port_in;
> -} WINE_MIDIIN;
> -
>  struct midi_init_params
>  {
>      UINT *err;
> -    unsigned int num_srcs;
> -    void *srcs;
>  };
>  
>  struct notify_context
> @@ -271,13 +253,6 @@ struct midi_notify_wait_params
>      struct notify_context *notify;
>  };
>  
> -struct midi_seq_open_params
> -{
> -    int close;
> -    snd_seq_t *seq;
> -    int *port_in;
> -};
> -
>  enum alsa_funcs
>  {
>      alsa_get_endpoint_ids,
> @@ -308,10 +283,6 @@ enum alsa_funcs
>      alsa_midi_out_message,
>      alsa_midi_in_message,
>      alsa_midi_notify_wait,
> -
> -    alsa_midi_seq_lock, /* temporary */
> -    alsa_midi_seq_open,
> -    alsa_midi_handle_event,
>  };
>  
>  NTSTATUS midi_init(void *args) DECLSPEC_HIDDEN;
> @@ -320,10 +291,6 @@ NTSTATUS midi_out_message(void *args) DECLSPEC_HIDDEN;
>  NTSTATUS midi_in_message(void *args) DECLSPEC_HIDDEN;
>  NTSTATUS midi_notify_wait(void *args) DECLSPEC_HIDDEN;
>  
> -NTSTATUS midi_seq_lock(void *args) DECLSPEC_HIDDEN;
> -NTSTATUS midi_seq_open(void *args) DECLSPEC_HIDDEN;
> -NTSTATUS midi_handle_event(void *args) DECLSPEC_HIDDEN;
> -
>  extern unixlib_handle_t alsa_handle;
>  
>  #define ALSA_CALL(func, params) __wine_unix_call(alsa_handle, alsa_ ## func, params)
> -- 
> 2.25.1
> 
> 



More information about the wine-devel mailing list