X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=audio_mixer.h;h=855295dcd60f0bf207f435c75484a763eba77b89;hb=e4c99b681aceb0d960f1d56acc9dafc83643854b;hp=e5922674f1245382b2a0dd872ca6291b437d6def;hpb=b590a9a091974607517a9f872e28cbfa65014e2a;p=nageru diff --git a/audio_mixer.h b/audio_mixer.h index e592267..855295d 100644 --- a/audio_mixer.h +++ b/audio_mixer.h @@ -93,6 +93,13 @@ public: bool add_audio(DeviceSpec device_spec, const uint8_t *data, unsigned num_samples, bmusb::AudioFormat audio_format, int64_t frame_length); bool add_silence(DeviceSpec device_spec, unsigned samples_per_frame, unsigned num_frames, int64_t frame_length); + // If a given device is offline for whatever reason and cannot deliver audio + // (by means of add_audio() or add_silence()), you can call put it in silence mode, + // where it will be taken to only output silence. Note that when taking it _out_ + // of silence mode, the resampler will be reset, so that old audio will not + // affect it. Same true/false behavior as add_audio(). + bool silence_card(DeviceSpec device_spec, bool silence); + std::vector get_output(double pts, unsigned num_samples, ResamplingQueue::RateAdjustmentPolicy rate_adjustment_policy); void set_fader_volume(unsigned bus_index, float level_db) { fader_volume_db[bus_index] = level_db; } @@ -102,6 +109,12 @@ public: // or every card will be held forever. std::map get_devices(); + // See comments on ALSAPool::get_card_state(). + ALSAPool::Device::State get_alsa_card_state(unsigned index) + { + return alsa_pool.get_card_state(index); + } + void set_name(DeviceSpec device_spec, const std::string &name); void set_input_mapping(const InputMapping &input_mapping); @@ -257,6 +270,7 @@ private: unsigned capture_frequency = OUTPUT_FREQUENCY; // Which channels we consider interesting (ie., are part of some input_mapping). std::set interesting_channels; + bool silenced = false; }; const AudioDevice *find_audio_device(DeviceSpec device_spec) const