mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
[ALSA] add more sequencer port type information bits
Add four new information flags SNDRV_SEQ_PORT_TYPE_HARDWARE, _SOFTWARE, _SYNTHESIZER, _PORT for sequencer ports. This makes it easier for apps like Rosegarden to make policy decisions based on the port type. Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
This commit is contained in:
parent
c97f3dd854
commit
450047a78f
@ -605,6 +605,10 @@ struct snd_seq_remove_events {
|
||||
#define SNDRV_SEQ_PORT_TYPE_DIRECT_SAMPLE (1<<11) /* Sampling device (support sample download) */
|
||||
#define SNDRV_SEQ_PORT_TYPE_SAMPLE (1<<12) /* Sampling device (sample can be downloaded at any time) */
|
||||
/*...*/
|
||||
#define SNDRV_SEQ_PORT_TYPE_HARDWARE (1<<16) /* driver for a hardware device */
|
||||
#define SNDRV_SEQ_PORT_TYPE_SOFTWARE (1<<17) /* implemented in software */
|
||||
#define SNDRV_SEQ_PORT_TYPE_SYNTHESIZER (1<<18) /* generates sound */
|
||||
#define SNDRV_SEQ_PORT_TYPE_PORT (1<<19) /* connects to other device(s) */
|
||||
#define SNDRV_SEQ_PORT_TYPE_APPLICATION (1<<20) /* application (sequencer/editor) */
|
||||
|
||||
/* misc. conditioning flags */
|
||||
|
@ -171,7 +171,9 @@ create_port(int idx, int type)
|
||||
pinfo.capability |= SNDRV_SEQ_PORT_CAP_WRITE | SNDRV_SEQ_PORT_CAP_SUBS_WRITE;
|
||||
if (duplex)
|
||||
pinfo.capability |= SNDRV_SEQ_PORT_CAP_DUPLEX;
|
||||
pinfo.type = SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC;
|
||||
pinfo.type = SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC
|
||||
| SNDRV_SEQ_PORT_TYPE_SOFTWARE
|
||||
| SNDRV_SEQ_PORT_TYPE_PORT;
|
||||
memset(&pcb, 0, sizeof(pcb));
|
||||
pcb.owner = THIS_MODULE;
|
||||
pcb.unuse = dummy_unuse;
|
||||
|
@ -376,7 +376,9 @@ snd_seq_midisynth_register_port(struct snd_seq_device *dev)
|
||||
if ((port->capability & (SNDRV_SEQ_PORT_CAP_WRITE|SNDRV_SEQ_PORT_CAP_READ)) == (SNDRV_SEQ_PORT_CAP_WRITE|SNDRV_SEQ_PORT_CAP_READ) &&
|
||||
info->flags & SNDRV_RAWMIDI_INFO_DUPLEX)
|
||||
port->capability |= SNDRV_SEQ_PORT_CAP_DUPLEX;
|
||||
port->type = SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC;
|
||||
port->type = SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC
|
||||
| SNDRV_SEQ_PORT_TYPE_HARDWARE
|
||||
| SNDRV_SEQ_PORT_TYPE_PORT;
|
||||
port->midi_channels = 16;
|
||||
memset(&pcallbacks, 0, sizeof(pcallbacks));
|
||||
pcallbacks.owner = THIS_MODULE;
|
||||
|
@ -390,7 +390,9 @@ static int snd_virmidi_dev_attach_seq(struct snd_virmidi_dev *rdev)
|
||||
pinfo->capability |= SNDRV_SEQ_PORT_CAP_WRITE | SNDRV_SEQ_PORT_CAP_SYNC_WRITE | SNDRV_SEQ_PORT_CAP_SUBS_WRITE;
|
||||
pinfo->capability |= SNDRV_SEQ_PORT_CAP_READ | SNDRV_SEQ_PORT_CAP_SYNC_READ | SNDRV_SEQ_PORT_CAP_SUBS_READ;
|
||||
pinfo->capability |= SNDRV_SEQ_PORT_CAP_DUPLEX;
|
||||
pinfo->type = SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC;
|
||||
pinfo->type = SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC
|
||||
| SNDRV_SEQ_PORT_TYPE_SOFTWARE
|
||||
| SNDRV_SEQ_PORT_TYPE_PORT;
|
||||
pinfo->midi_channels = 16;
|
||||
memset(&pcallbacks, 0, sizeof(pcallbacks));
|
||||
pcallbacks.owner = THIS_MODULE;
|
||||
|
@ -99,7 +99,9 @@ static int snd_opl3_oss_create_port(struct snd_opl3 * opl3)
|
||||
opl3->oss_chset->port = snd_seq_event_port_attach(opl3->seq_client, &callbacks,
|
||||
SNDRV_SEQ_PORT_CAP_WRITE,
|
||||
SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC |
|
||||
SNDRV_SEQ_PORT_TYPE_MIDI_GM,
|
||||
SNDRV_SEQ_PORT_TYPE_MIDI_GM |
|
||||
SNDRV_SEQ_PORT_TYPE_HARDWARE |
|
||||
SNDRV_SEQ_PORT_TYPE_SYNTHESIZER,
|
||||
voices, voices,
|
||||
name);
|
||||
if (opl3->oss_chset->port < 0) {
|
||||
|
@ -203,7 +203,9 @@ static int snd_opl3_synth_create_port(struct snd_opl3 * opl3)
|
||||
SNDRV_SEQ_PORT_CAP_SUBS_WRITE,
|
||||
SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC |
|
||||
SNDRV_SEQ_PORT_TYPE_MIDI_GM |
|
||||
SNDRV_SEQ_PORT_TYPE_DIRECT_SAMPLE,
|
||||
SNDRV_SEQ_PORT_TYPE_DIRECT_SAMPLE |
|
||||
SNDRV_SEQ_PORT_TYPE_HARDWARE |
|
||||
SNDRV_SEQ_PORT_TYPE_SYNTHESIZER,
|
||||
16, voices,
|
||||
name);
|
||||
if (opl3->chset->port < 0) {
|
||||
|
@ -164,7 +164,9 @@ static int snd_opl4_seq_new_device(struct snd_seq_device *dev)
|
||||
SNDRV_SEQ_PORT_CAP_WRITE |
|
||||
SNDRV_SEQ_PORT_CAP_SUBS_WRITE,
|
||||
SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC |
|
||||
SNDRV_SEQ_PORT_TYPE_MIDI_GM,
|
||||
SNDRV_SEQ_PORT_TYPE_MIDI_GM |
|
||||
SNDRV_SEQ_PORT_TYPE_HARDWARE |
|
||||
SNDRV_SEQ_PORT_TYPE_SYNTHESIZER,
|
||||
16, 24,
|
||||
"OPL4 Wavetable Port");
|
||||
if (opl4->chset->port < 0) {
|
||||
|
@ -194,7 +194,9 @@ static int snd_gus_synth_create_port(struct snd_gus_card * gus, int idx)
|
||||
&callbacks,
|
||||
SNDRV_SEQ_PORT_CAP_WRITE | SNDRV_SEQ_PORT_CAP_SUBS_WRITE,
|
||||
SNDRV_SEQ_PORT_TYPE_DIRECT_SAMPLE |
|
||||
SNDRV_SEQ_PORT_TYPE_SYNTH,
|
||||
SNDRV_SEQ_PORT_TYPE_SYNTH |
|
||||
SNDRV_SEQ_PORT_TYPE_HARDWARE |
|
||||
SNDRV_SEQ_PORT_TYPE_SYNTHESIZER,
|
||||
16, 0,
|
||||
name);
|
||||
if (p->chset->port < 0) {
|
||||
|
@ -914,7 +914,9 @@ static int snd_trident_synth_create_port(struct snd_trident * trident, int idx)
|
||||
&callbacks,
|
||||
SNDRV_SEQ_PORT_CAP_WRITE | SNDRV_SEQ_PORT_CAP_SUBS_WRITE,
|
||||
SNDRV_SEQ_PORT_TYPE_DIRECT_SAMPLE |
|
||||
SNDRV_SEQ_PORT_TYPE_SYNTH,
|
||||
SNDRV_SEQ_PORT_TYPE_SYNTH |
|
||||
SNDRV_SEQ_PORT_TYPE_HARDWARE |
|
||||
SNDRV_SEQ_PORT_TYPE_SYNTHESIZER,
|
||||
16, 0,
|
||||
name);
|
||||
if (p->chset->port < 0) {
|
||||
|
@ -54,7 +54,9 @@ static struct snd_midi_op emux_ops = {
|
||||
#define DEFAULT_MIDI_TYPE (SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC |\
|
||||
SNDRV_SEQ_PORT_TYPE_MIDI_GM |\
|
||||
SNDRV_SEQ_PORT_TYPE_MIDI_GS |\
|
||||
SNDRV_SEQ_PORT_TYPE_MIDI_XG)
|
||||
SNDRV_SEQ_PORT_TYPE_MIDI_XG |\
|
||||
SNDRV_SEQ_PORT_TYPE_HARDWARE |\
|
||||
SNDRV_SEQ_PORT_TYPE_SYNTHESIZER)
|
||||
|
||||
/*
|
||||
* Initialise the EMUX Synth by creating a client and registering
|
||||
|
Loading…
Reference in New Issue
Block a user