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)
return index < other.index;
}
};
+struct DeviceInfo {
+ std::string name;
+ unsigned num_channels;
+};
static inline uint64_t DeviceSpec_to_key(const DeviceSpec &device_spec)
{
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);
: 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);
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);
}
}
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));