54 switch (ump[0] >> 28) {
56 midi[size++] = (ump[0] >> 16) & 0xff;
57 if (midi[0] >= 0xf1 && midi[0] <= 0xf3) {
58 midi[size++] = (ump[0] >> 8) & 0x7f;
60 midi[size++] = ump[0] & 0x7f;
64 midi[size++] = (ump[0] >> 16);
65 midi[size++] = (ump[0] >> 8);
66 if (midi[0] < 0xc0 || midi[0] > 0xdf)
67 midi[size++] = (ump[0]);
71 uint8_t status, i, bytes;
76 status = (ump[0] >> 20) & 0xf;
77 bytes =
SPA_CLAMP((ump[0] >> 16) & 0xf, 0u, 6u);
79 if (status == 0 || status == 1)
81 for (i = 0 ; i < bytes; i++)
83 midi[size++] = ump[(i+2)/4] >> ((5-i)%4 * 8);
84 if (status == 0 || status == 3)
91 midi[size++] = (ump[0] >> 16) | 0x80;
92 if (midi[0] < 0xc0 || midi[0] > 0xdf)
93 midi[size++] = (ump[0] >> 8) & 0x7f;
94 midi[size++] = (ump[1] >> 25);
106 uint32_t *ump,
size_t ump_maxsize, uint8_t group, uint64_t *state)
109 uint32_t i, prefix = group << 24, to_consume = 0, bytes;
110 uint8_t status, *m = (*midi), end;
114 if (ump_maxsize < 16)
123 else if (status == 0xf7)
127 prefix |= 0x30000000;
132 bytes =
SPA_CLAMP(*midi_size - to_consume, 0u, 7u);
151 }
else if (*state == 1) {
159 ump[size++] = prefix | bytes << 16;
161 for (i = 0 ; i < bytes; i++)
166 ump[(i+2)/4] |= (m[i] & 0x7f) << ((5-i)%4 * 8);
177 prefix |= 0x20000000;
181 prefix |= 0x20000000;
187 case 0xf1:
case 0xf3:
198 if (*midi_size < to_consume) {
199 to_consume = *midi_size;
201 prefix |= status << 16;
203 prefix |= (m[1] & 0x7f) << 8;
205 prefix |= (m[2] & 0x7f);
206 ump[size++] = prefix;
209 (*midi_size) -= to_consume;
210 (*midi) += to_consume;
static int spa_ump_to_midi(uint32_t *ump, size_t ump_size, uint8_t *midi, size_t midi_maxsize)
Definition ump-utils.h:49
static int spa_ump_from_midi(uint8_t **midi, size_t *midi_size, uint32_t *ump, size_t ump_maxsize, uint8_t group, uint64_t *state)
Definition ump-utils.h:110