]> git.sesse.net Git - nageru/commitdiff
Communicate number of channels to the input mapping dialog.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Wed, 10 Aug 2016 21:00:49 +0000 (23:00 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Wed, 19 Oct 2016 22:55:44 +0000 (00:55 +0200)
audio_mixer.cpp
audio_mixer.h
input_mapping_dialog.cpp
input_mapping_dialog.h

index 426125f888061a17546de06c4d3338b90098892a..b61a3c300009eda219179863617914325517ba1e 100644 (file)
@@ -399,16 +399,19 @@ vector<float> AudioMixer::get_output(double pts, unsigned num_samples, Resamplin
        return samples_out;
 }
 
-map<DeviceSpec, string> AudioMixer::get_names() const
+map<DeviceSpec, DeviceInfo> AudioMixer::get_devices() const
 {
        lock_guard<mutex> lock(audio_mutex);
-       map<DeviceSpec, string> names;
+       map<DeviceSpec, DeviceInfo> devices;
        for (unsigned card_index = 0; card_index < num_cards; ++card_index) {
                const DeviceSpec spec{ InputSourceType::CAPTURE_CARD, card_index };
                const AudioDevice *device = &cards[card_index];
-               names.insert(make_pair(spec, device->name));
+               DeviceInfo info;
+               info.name = device->name;
+               info.num_channels = 8;  // FIXME: This is wrong for fake cards.
+               devices.insert(make_pair(spec, info));
        }
-       return names;
+       return devices;
 }
 
 void AudioMixer::set_name(DeviceSpec device_spec, const string &name)
index d45fd438153de3b6c768d59e760bb4c6b64c16d1..f2c77b91c8130cfba4a4edd3aa5200df87178b94 100644 (file)
@@ -46,6 +46,10 @@ struct DeviceSpec {
                return index < other.index;
        }
 };
+struct DeviceInfo {
+       std::string name;
+       unsigned num_channels;
+};
 
 static inline uint64_t DeviceSpec_to_key(const DeviceSpec &device_spec)
 {
@@ -81,7 +85,7 @@ public:
        void set_current_loudness(double level_lufs) { loudness_lufs = level_lufs; }
 
        void set_fader_volume(unsigned bus_index, float level_db) { fader_volume_db[bus_index] = level_db; }
-       std::map<DeviceSpec, std::string> get_names() const;
+       std::map<DeviceSpec, DeviceInfo> get_devices() const;
        void set_name(DeviceSpec device_spec, const std::string &name);
 
        void set_input_mapping(const InputMapping &input_mapping);
index 54936a8312a52114dde2e23b7887be79d8196c68..2d40cc2a500a839557e46aef541fa1c52677a86f 100644 (file)
@@ -11,7 +11,7 @@ InputMappingDialog::InputMappingDialog()
        : ui(new Ui::InputMappingDialog),
          mapping(global_mixer->get_audio_mixer()->get_input_mapping()),
          old_mapping(mapping),
-         card_names(global_mixer->get_audio_mixer()->get_names())
+         devices(global_mixer->get_audio_mixer()->get_devices())
 {
        ui->setupUi(this);
        ui->table->setSelectionBehavior(QAbstractItemView::SelectRows);
@@ -53,12 +53,12 @@ void InputMappingDialog::fill_row_from_bus(unsigned row, const InputMapping::Bus
        QComboBox *card_combo = new QComboBox;
        unsigned current_index = 0;
        card_combo->addItem(QString("(none)   "));
-       for (const auto &spec_and_name : card_names) {
+       for (const auto &spec_and_info : devices) {
                ++current_index;
                card_combo->addItem(
-                       QString::fromStdString(spec_and_name.second + "   "),
-                       qulonglong(DeviceSpec_to_key(spec_and_name.first)));
-               if (bus.device == spec_and_name.first) {
+                       QString::fromStdString(spec_and_info.second.name + "   "),
+                       qulonglong(DeviceSpec_to_key(spec_and_info.first)));
+               if (bus.device == spec_and_info.first) {
                        card_combo->setCurrentIndex(current_index);
                }
        }
@@ -76,7 +76,10 @@ void InputMappingDialog::setup_channel_choices_from_bus(unsigned row, const Inpu
                QComboBox *channel_combo = new QComboBox;
                channel_combo->addItem(QString("(none)"));
                if (bus.device.type == InputSourceType::CAPTURE_CARD) {
-                       for (unsigned source = 0; source < 8; ++source) {  // TODO: Ask the card about number of channels, and names.
+                       auto device_it = devices.find(bus.device);
+                       assert(device_it != devices.end());
+                       unsigned num_device_channels = device_it->second.num_channels;
+                       for (unsigned source = 0; source < num_device_channels; ++source) {
                                char buf[256];
                                snprintf(buf, sizeof(buf), "Channel %u   ", source + 1);
                                channel_combo->addItem(QString(buf));
index 93a84b02d5c8d55c8465bec792de068f8f5a3dce..d092a34cd5f12f71356a67f59956575de8e5ffca 100644 (file)
@@ -43,7 +43,7 @@ private:
        // held forever).
        InputMapping old_mapping;
 
-       const std::map<DeviceSpec, std::string> card_names;
+       const std::map<DeviceSpec, DeviceInfo> devices;
 };
 
 #endif  // !defined(_INPUT_MAPPING_DIALOG_H)