ump: Add a function to provide the packet word length of a UMP type

Add a helper function to return the number of words of a given UMP
packet type.  Used for parsing MIDI Clip File stream, for example.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
Takashi Iwai 2024-07-04 09:53:20 +02:00
parent ade099fab7
commit 568b2ac1db
3 changed files with 19 additions and 0 deletions

View file

@ -1003,6 +1003,7 @@ static inline uint8_t snd_ump_sysex_msg_length(const uint32_t *ump)
int snd_ump_msg_sysex_expand(const uint32_t *ump, uint8_t *buf, size_t maxlen,
size_t *filled);
int snd_ump_packet_length(unsigned int type);
#ifdef __cplusplus
}

View file

@ -212,5 +212,6 @@ ALSA_1.2.13 {
@SYMBOL_PREFIX@snd_ump_endpoint_info_set_*;
@SYMBOL_PREFIX@snd_ump_block_info_clear;
@SYMBOL_PREFIX@snd_ump_block_info_set_*;
@SYMBOL_PREFIX@snd_ump_packet_length;
#endif
} ALSA_1.2.10;

View file

@ -1072,3 +1072,20 @@ int snd_ump_msg_sysex_expand(const uint32_t *ump, uint8_t *buf, size_t maxlen,
return -EINVAL;
}
}
/**
* \brief return the length of a UMP packet type
* \param type UMP packet type
* \return the length of the given UMP packet type in 32bit words (from 1 to 4),
* or 0 for negative inputs.
*/
int snd_ump_packet_length(unsigned int type)
{
static int packet_length[16] = {
1, 1, 1, 2, 2, 4, 1, 1, 2, 2, 2, 3, 3, 4, 4, 4
};
if (type > 16)
return 0;
return packet_length[type];
}