[alsa-devel] [PATCH] rawmidi.c Set a name for a newly allocated rawmidi substream
Rationale: Bitwig Studio (and possibly other rawmidi clients) enumerate the Midi I/Os by substream names. With the current rawmidi implementation, the name is an empty string and only the USB mididriver changes it to a meaningful value after allocation.
This patch sets a default substream name of the form "somename x-y-z"
--- linux-source-3.13.0/sound/core/rawmidi.c.orig 2014-05-06 20:25:33.683081389 +0200 +++ linux-source-3.13.0/sound/core/rawmidi.c 2014-05-06 17:42:35.058097185 +0200 @@ -34,6 +34,7 @@ #include <sound/control.h> #include <sound/minors.h> #include <sound/initval.h> +#include <linux/string.h>
MODULE_AUTHOR("Jaroslav Kysela perex@perex.cz"); MODULE_DESCRIPTION("Midlevel RawMidi code for ALSA."); @@ -1420,6 +1421,8 @@ static int snd_rawmidi_alloc_substreams( substream->number = idx; substream->rmidi = rmidi; substream->pstr = stream; + snprintf(substream->name, sizeof(substream->name), + "%s %d-%d-%d", rmidi->id, rmidi->card->number, rmidi->device, idx); list_add_tail(&substream->list, &stream->substreams); stream->substream_count++; }
Ralf Beck wrote:
Rationale: Bitwig Studio (and possibly other rawmidi clients) enumerate the Midi I/Os by substream names. With the current rawmidi implementation, the name is an empty string and only the USB mididriver changes it to a meaningful value after allocation.
Many RawMIDI devices have only one substream, or multiple substreams that are merged into one port. For these, separate substream names do not make sense.
This patch sets a default substream name of the form "somename x-y-z"
The ID string is not meant to be a name.
Also see Documentation/SubmittingPatches.
@@ -1420,6 +1421,8 @@ static int snd_rawmidi_alloc_substreams( substream->number = idx; substream->rmidi = rmidi; substream->pstr = stream;
snprintf(substream->name, sizeof(substream->name),
Your mailer broke whitespaces.
Regards, Clemens
Am 07.05.2014 19:39, schrieb Clemens Ladisch:
Ralf Beck wrote:
Rationale: Bitwig Studio (and possibly other rawmidi clients) enumerate the Midi I/Os by substream names. With the current rawmidi implementation, the name is an empty string and only the USB mididriver changes it to a meaningful value after allocation.
Many RawMIDI devices have only one substream, or multiple substreams that are merged into one port. For these, separate substream names do not make sense.
Any having no substream name at all makes more sense?
This patch sets a default substream name of the form "somename x-y-z"
The ID string is not meant to be a name.
Would it be acceptable, if i remove the ID string and only return x-y-z ? Other than the alsa developers i would call creating rawmidi substreams, but not assigning a name to them a bug.
Best regards, Ralf
Ralf Beck wrote:
Am 07.05.2014 19:39, schrieb Clemens Ladisch:
Ralf Beck wrote:
Rationale: Bitwig Studio (and possibly other rawmidi clients) enumerate the Midi I/Os by substream names. With the current rawmidi implementation, the name is an empty string and only the USB mididriver changes it to a meaningful value after allocation.
Many RawMIDI devices have only one substream, or multiple substreams that are merged into one port. For these, separate substream names do not make sense.
Any having no substream name at all makes more sense?
The device itself already has a name.
Apparently, Bitwig has not been tested with any driver except snd-usb-audio.
This patch sets a default substream name of the form "somename x-y-z"
The ID string is not meant to be a name.
Would it be acceptable, if i remove the ID string and only return x-y-z ?
No; you should use the device name or something like that.
But the substream name buffer is rather short; a better idea would be to fix all rawmidi drivers to set the substream name(s) to the appropriate value.
Other than the alsa developers i would call creating rawmidi substreams, but not assigning a name to them a bug.
For most drivers, substreams do not have a logical identity separate from the device.
Regards, Clemens
participants (2)
-
Clemens Ladisch
-
Ralf Beck