X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=nageru%2Faudio_mixer.h;h=c62c7fec36b87888f231832460a4fc56da3e1089;hb=a0e57ec99e9dfdd7e79bcf21e8c996dc43b6cb49;hp=14e7e85d098065aabc5cd39d70ed5b31a8713041;hpb=25326c82bda01dfa1b86fb4f074d7697705239f8;p=nageru diff --git a/nageru/audio_mixer.h b/nageru/audio_mixer.h index 14e7e85..c62c7fe 100644 --- a/nageru/audio_mixer.h +++ b/nageru/audio_mixer.h @@ -19,9 +19,11 @@ #include #include #include +#include #include #include "alsa_pool.h" +#include "card_type.h" #include "correlation_measurer.h" #include "decibel.h" #include "defs.h" @@ -30,6 +32,7 @@ #include "input_mapping.h" #include "resampling_queue.h" #include "stereocompressor.h" +#include "shared/shared_defs.h" class DeviceSpecProto; @@ -50,7 +53,7 @@ enum EQBand { class AudioMixer { public: - AudioMixer(unsigned num_capture_cards, unsigned num_ffmpeg_inputs); + AudioMixer(); void reset_resampler(DeviceSpec device_spec); void reset_meters(); @@ -95,7 +98,9 @@ public: return DeviceSpec{InputSourceType::ALSA_INPUT, dead_card_index}; } - void set_display_name(DeviceSpec device_spec, const std::string &name); + // NOTE: The display name is not overridden if active == false. + void set_device_parameters(DeviceSpec device_spec, const std::string &display_name, CardType card_type, unsigned num_channels, bool active); + bool get_active(DeviceSpec device_spec); // Note: The card should be held (currently this isn't enforced, though). void serialize_device(DeviceSpec device_spec, DeviceSpecProto *device_spec_proto); @@ -324,6 +329,9 @@ private: // Which channels we consider interesting (ie., are part of some input_mapping). std::set interesting_channels; bool silenced = false; + CardType card_type; + unsigned num_channels = 2; // Ignored for ALSA cards, which check the device directly. + bool active = false; // Only really relevant for capture cards (not ALSA cards). }; const AudioDevice *find_audio_device(DeviceSpec device_spec) const @@ -343,15 +351,13 @@ private: void send_audio_level_callback(); std::vector get_active_devices() const; void set_input_mapping_lock_held(const InputMapping &input_mapping); - - unsigned num_capture_cards, num_ffmpeg_inputs; + std::string spec_to_string(DeviceSpec device_spec) const; mutable std::timed_mutex audio_mutex; ALSAPool alsa_pool; AudioDevice video_cards[MAX_VIDEO_CARDS]; // Under audio_mutex. AudioDevice alsa_inputs[MAX_ALSA_CARDS]; // Under audio_mutex. - std::unique_ptr ffmpeg_inputs; // Under audio_mutex. std::atomic locut_cutoff_hz{120}; StereoFilter locut[MAX_BUSES]; // Default cutoff 120 Hz, 24 dB/oct.