]> git.sesse.net Git - nageru/blobdiff - midi_mapper.cpp
Support audio-only FFmpeg inputs. Somewhat wonky, though.
[nageru] / midi_mapper.cpp
index b19f42c316cd40a7940edd1788845abfeb503481..3b22192b3b8b0670356ebdb9230a8133777b0983 100644 (file)
@@ -270,6 +270,8 @@ void MIDIMapper::handle_event(snd_seq_t *seq, snd_seq_event_t *event)
                        value, bind(&ControllerReceiver::set_makeup_gain, receiver, _2));
 
                // Bus controllers.
+               match_controller(controller, MIDIMappingBusProto::kStereoWidthFieldNumber, MIDIMappingProto::kStereoWidthBankFieldNumber,
+                       value, bind(&ControllerReceiver::set_stereo_width, receiver, _1, _2));
                match_controller(controller, MIDIMappingBusProto::kTrebleFieldNumber, MIDIMappingProto::kTrebleBankFieldNumber,
                        value, bind(&ControllerReceiver::set_treble, receiver, _1, _2));
                match_controller(controller, MIDIMappingBusProto::kMidFieldNumber, MIDIMappingProto::kMidBankFieldNumber,
@@ -390,8 +392,14 @@ void MIDIMapper::handle_event(snd_seq_t *seq, snd_seq_event_t *event)
 
 void MIDIMapper::subscribe_to_port_lock_held(snd_seq_t *seq, const snd_seq_addr_t &addr)
 {
-       // Client 0 is basically the system; ignore it.
-       if (addr.client == 0) {
+       // Client 0 (SNDRV_SEQ_CLIENT_SYSTEM) is basically the system; ignore it.
+       // MIDI through (SNDRV_SEQ_CLIENT_DUMMY) echoes back what we give it, so ignore that, too.
+       if (addr.client == 0 || addr.client == 14) {
+               return;
+       }
+
+       // Don't listen to ourselves.
+       if (addr.client == snd_seq_client_id(seq)) {
                return;
        }
 
@@ -537,6 +545,8 @@ void MIDIMapper::update_highlights()
 
        // Per-bus controllers.
        for (size_t bus_idx = 0; bus_idx < size_t(mapping_proto->bus_mapping_size()); ++bus_idx) {
+               receiver->highlight_stereo_width(bus_idx, has_active_controller(
+                       bus_idx, MIDIMappingBusProto::kStereoWidthFieldNumber, MIDIMappingProto::kStereoWidthBankFieldNumber));
                receiver->highlight_treble(bus_idx, has_active_controller(
                        bus_idx, MIDIMappingBusProto::kTrebleFieldNumber, MIDIMappingProto::kTrebleBankFieldNumber));
                receiver->highlight_mid(bus_idx, has_active_controller(