shithub: m8c

Download patch

ref: de923fd0d773a575d3bff75600b0b0f0673f8790
parent: 2ffe2f98fc92726badd0de39414cafdf6d3d88d5
author: Jonne Kokkonen <jonne.kokkonen@gmail.com>
date: Tue Apr 8 18:04:51 EDT 2025

various (midi backend) bugfixes
- cancel callback when freeing midiports and reset sysex received boolean
- destroy queue on device disconnect and reset empty cycles counter
- set default empty frames threshold to 256 to timeout faster

--- a/src/backends/m8_rtmidi.c
+++ b/src/backends/m8_rtmidi.c
@@ -126,6 +126,7 @@
 
 void close_and_free_midi_ports(void) {
   SDL_LogDebug(SDL_LOG_CATEGORY_SYSTEM, "Freeing MIDI ports");
+  rtmidi_in_cancel_callback(midi_in);
   rtmidi_close_port(midi_in);
   rtmidi_close_port(midi_out);
   rtmidi_in_free(midi_in);
@@ -132,6 +133,7 @@
   rtmidi_out_free(midi_out);
   midi_in = NULL;
   midi_out = NULL;
+  midi_sysex_received = false;
 }
 
 int initialize_rtmidi() {
@@ -301,6 +303,8 @@
     if (empty_cycles >= conf->wait_packets) {
       SDL_Log("No messages received for %d cycles, assuming device disconnected", empty_cycles);
       close_and_free_midi_ports();
+      destroy_queue(&queue);
+      empty_cycles = 0;
       return 0;
     }
   }
--- a/src/config.c
+++ b/src/config.c
@@ -32,7 +32,7 @@
   c.integer_scaling = 1; // use integer scaling for the user interface
   c.idle_ms = 10;        // default to high performance
   c.wait_for_device = 1; // default to exit if device disconnected
-  c.wait_packets = 512;  // amount of empty command queue reads before assuming device disconnected
+  c.wait_packets = 256;  // amount of empty command queue reads before assuming device disconnected
   c.audio_enabled = 0;        // route M8 audio to default output
   c.audio_buffer_size = 0; // requested audio buffer size in samples: 0 = let SDL decide
   c.audio_device_name = NULL; // Use this device, leave NULL to use the default output device
--- a/src/input.c
+++ b/src/input.c
@@ -198,6 +198,7 @@
       break;
 
     case SDL_EVENT_WINDOW_RESIZED:
+    case SDL_EVENT_WINDOW_MOVED:
       renderer_fix_texture_scaling_after_window_resize();
       break;
 
--