mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	midifile: unpack the UMP SysRT bytes correctly
They are packed in a native endian uint32_t so read it like that and then use shifts to get the right bytes.
This commit is contained in:
		
							parent
							
								
									63bf21d7b8
								
							
						
					
					
						commit
						8c1e1ea17f
					
				
					 1 changed files with 10 additions and 10 deletions
				
			
		| 
						 | 
					@ -940,17 +940,19 @@ static int dump_event_ump(FILE *out, const struct midi_event *ev)
 | 
				
			||||||
		dump_mem(out, "Utility", ev->data, ev->size);
 | 
							dump_mem(out, "Utility", ev->data, ev->size);
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	case 0x1:
 | 
						case 0x1:
 | 
				
			||||||
		switch (ev->data[2]) {
 | 
						{
 | 
				
			||||||
 | 
							uint8_t b[3] = { (d[0] >> 16) & 0x7f, (d[0] >> 8) & 0x7f, d[0] & 0x7f };
 | 
				
			||||||
 | 
							switch (b[0]) {
 | 
				
			||||||
		case 0xf1:
 | 
							case 0xf1:
 | 
				
			||||||
			fprintf(out, "MIDI Time Code Quarter Frame: type %d values %d",
 | 
								fprintf(out, "MIDI Time Code Quarter Frame: type %d values %d",
 | 
				
			||||||
					ev->data[0] >> 4, ev->data[0] & 0xf);
 | 
										b[1] >> 4, b[1] & 0xf);
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case 0xf2:
 | 
							case 0xf2:
 | 
				
			||||||
			fprintf(out, "Song Position Pointer: value %d",
 | 
								fprintf(out, "Song Position Pointer: value %d",
 | 
				
			||||||
					((int)ev->data[1] << 7 | ev->data[0]));
 | 
										((int)b[2] << 7 | b[1]));
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case 0xf3:
 | 
							case 0xf3:
 | 
				
			||||||
			fprintf(out, "Song Select: value %d", (ev->data[0] & 0x7f));
 | 
								fprintf(out, "Song Select: value %d", b[1]);
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case 0xf6:
 | 
							case 0xf6:
 | 
				
			||||||
			fprintf(out, "Tune Request");
 | 
								fprintf(out, "Tune Request");
 | 
				
			||||||
| 
						 | 
					@ -978,20 +980,18 @@ static int dump_event_ump(FILE *out, const struct midi_event *ev)
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	case 0x2:
 | 
						case 0x2:
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		struct midi_event ev1;
 | 
							struct midi_event ev1;
 | 
				
			||||||
		uint8_t msg[4];
 | 
							uint8_t b[3] = { d[0] >> 16, d[0] >> 8, d[0] };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ev1 = *ev;
 | 
							ev1 = *ev;
 | 
				
			||||||
		msg[0] = (d[0] >> 16);
 | 
							if (b[0] >= 0xc0 && b[0] <= 0xdf)
 | 
				
			||||||
		msg[1] = (d[0] >> 8);
 | 
					 | 
				
			||||||
		msg[2] = (d[0]);
 | 
					 | 
				
			||||||
		if (msg[0] >= 0xc0 && msg[0] <= 0xdf)
 | 
					 | 
				
			||||||
			ev1.size = 2;
 | 
								ev1.size = 2;
 | 
				
			||||||
                else
 | 
					                else
 | 
				
			||||||
			ev1.size = 3;
 | 
								ev1.size = 3;
 | 
				
			||||||
		ev1.data = msg;
 | 
							ev1.data = b;
 | 
				
			||||||
		dump_event_midi1(out, &ev1);
 | 
							dump_event_midi1(out, &ev1);
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue