61        switch (ump[0] >> 28) {
 
   63                midi[size++] = (ump[0] >> 16) & 0xff;
 
   64                if (midi[0] >= 0xf1 && midi[0] <= 0xf3) {
 
   65                        midi[size++] = (ump[0] >> 8) & 0x7f;
 
   67                                midi[size++] = ump[0] & 0x7f;
 
   71                midi[size++] = (ump[0] >> 16);
 
   72                midi[size++] = (ump[0] >> 8);
 
   73                if (midi[0] < 0xc0 || midi[0] > 0xdf)
 
   74                        midi[size++] = (ump[0]);
 
   78                uint8_t status, i, bytes;
 
   83                status = (ump[0] >> 20) & 0xf;
 
   84                bytes = 
SPA_CLAMP((ump[0] >> 16) & 0xf, 0u, 6u);
 
   86                if (status == 0 || status == 1)
 
   88                for (i = 0 ; i < bytes; i++)
 
   90                        midi[size++] = ump[(i+2)/4] >> ((5-i)%4 * 8);
 
   91                if (status == 0 || status == 3)
 
   98                midi[size++] = (ump[0] >> 16) | 0x80;
 
   99                switch (midi[0] & 0xf0) {
 
  101                        midi[size++] = (ump[1] >> 24);
 
  104                        midi[size++] = (ump[0] >> 8) & 0x7f;
 
  107                        midi[size++] = (ump[1] >> 25);
 
  121                uint32_t *ump, 
size_t ump_maxsize, uint8_t group, uint64_t *state)
 
  124        uint32_t i, prefix = group << 24, to_consume = 0, bytes;
 
  125        uint8_t status, *m = (*midi), end;
 
 
  129        if (ump_maxsize < 16)
 
  138                else if (status == 0xf7)
 
  142                prefix |= 0x30000000;
 
  147                bytes = 
SPA_CLAMP(*midi_size - to_consume, 0u, 7u);
 
  166                        } 
else if (*state == 1) {
 
  174                        ump[size++] = prefix | bytes << 16;
 
  176                        for (i = 0 ; i < bytes; i++)
 
  181                                ump[(i+2)/4] |= (m[i] & 0x7f) << ((5-i)%4 * 8);
 
  192                        prefix |= 0x20000000;
 
  196                        prefix |= 0x20000000;
 
  202                case 0xf1: 
case 0xf3:
 
  213                if (*midi_size < to_consume) {
 
  214                        to_consume = *midi_size;
 
  216                        prefix |= status << 16;
 
  218                                prefix |= (m[1] & 0x7f) << 8;
 
  220                                prefix |= (m[2] & 0x7f);
 
  221                        ump[size++] = prefix;
 
  224        (*midi_size) -= to_consume;
 
  225        (*midi) += to_consume;
 
 
SPA_API_CONTROL_UMP_UTILS int spa_ump_to_midi(uint32_t *ump, size_t ump_size, uint8_t *midi, size_t midi_maxsize)
Definition ump-utils.h:58
SPA_API_CONTROL_UMP_UTILS 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:127