+ struct AudioDevice {
+ std::unique_ptr<ResamplingQueue> resampling_queue;
+ int64_t next_local_pts = 0;
+ std::string display_name;
+ unsigned capture_frequency = OUTPUT_FREQUENCY;
+ // Which channels we consider interesting (ie., are part of some input_mapping).
+ std::set<unsigned> interesting_channels;
+ bool silenced = false;
+ };
+
+ const AudioDevice *find_audio_device(DeviceSpec device_spec) const
+ {
+ return const_cast<AudioMixer *>(this)->find_audio_device(device_spec);
+ }
+
+ AudioDevice *find_audio_device(DeviceSpec device_spec);
+
+ void find_sample_src_from_device(const std::map<DeviceSpec, std::vector<float>> &samples_card, DeviceSpec device_spec, int source_channel, const float **srcptr, unsigned *stride);
+ void fill_audio_bus(const std::map<DeviceSpec, std::vector<float>> &samples_card, const InputMapping::Bus &bus, unsigned num_samples, float *output);
+ void reset_resampler_mutex_held(DeviceSpec device_spec);
+ void apply_eq(unsigned bus_index, std::vector<float> *samples_bus);
+ void update_meters(const std::vector<float> &samples);
+ void add_bus_to_master(unsigned bus_index, const std::vector<float> &samples_bus, std::vector<float> *samples_out);
+ void measure_bus_levels(unsigned bus_index, const std::vector<float> &left, const std::vector<float> &right);
+ void send_audio_level_callback();
+ std::vector<DeviceSpec> get_active_devices() const;
+