From: Steinar H. Gunderson Date: Wed, 10 Aug 2016 21:00:49 +0000 (+0200) Subject: Communicate number of channels to the input mapping dialog. X-Git-Tag: 1.4.0~104 X-Git-Url: https://git.sesse.net/?p=nageru;a=commitdiff_plain;h=95c6bc9d8e340b02112f713389390102d547cc4c Communicate number of channels to the input mapping dialog. --- diff --git a/audio_mixer.cpp b/audio_mixer.cpp index 426125f..b61a3c3 100644 --- a/audio_mixer.cpp +++ b/audio_mixer.cpp @@ -399,16 +399,19 @@ vector AudioMixer::get_output(double pts, unsigned num_samples, Resamplin return samples_out; } -map AudioMixer::get_names() const +map AudioMixer::get_devices() const { lock_guard lock(audio_mutex); - map names; + map 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) diff --git a/audio_mixer.h b/audio_mixer.h index d45fd43..f2c77b9 100644 --- a/audio_mixer.h +++ b/audio_mixer.h @@ -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 get_names() const; + std::map get_devices() const; void set_name(DeviceSpec device_spec, const std::string &name); void set_input_mapping(const InputMapping &input_mapping); diff --git a/input_mapping_dialog.cpp b/input_mapping_dialog.cpp index 54936a8..2d40cc2 100644 --- a/input_mapping_dialog.cpp +++ b/input_mapping_dialog.cpp @@ -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)); diff --git a/input_mapping_dialog.h b/input_mapping_dialog.h index 93a84b0..d092a34 100644 --- a/input_mapping_dialog.h +++ b/input_mapping_dialog.h @@ -43,7 +43,7 @@ private: // held forever). InputMapping old_mapping; - const std::map card_names; + const std::map devices; }; #endif // !defined(_INPUT_MAPPING_DIALOG_H)