#include "defs.h"
#include "ebu_r128_proc.h"
#include "filter.h"
+#include "input_mapping.h"
#include "resampling_queue.h"
#include "stereocompressor.h"
struct AudioFormat;
} // namespace bmusb
-enum class InputSourceType { SILENCE, CAPTURE_CARD, ALSA_INPUT };
-struct DeviceSpec {
- InputSourceType type;
- unsigned index;
-
- bool operator== (const DeviceSpec &other) const {
- return type == other.type && index == other.index;
- }
-
- bool operator< (const DeviceSpec &other) const {
- if (type != other.type)
- return type < other.type;
- return index < other.index;
- }
-};
-struct DeviceInfo {
- std::string display_name;
- unsigned num_channels;
-};
-
enum EQBand {
EQ_BAND_BASS = 0,
EQ_BAND_MID,
NUM_EQ_BANDS
};
-static inline uint64_t DeviceSpec_to_key(const DeviceSpec &device_spec)
-{
- return (uint64_t(device_spec.type) << 32) | device_spec.index;
-}
-
-static inline DeviceSpec key_to_DeviceSpec(uint64_t key)
-{
- return DeviceSpec{ InputSourceType(key >> 32), unsigned(key & 0xffffffff) };
-}
-
-struct InputMapping {
- struct Bus {
- std::string name;
- DeviceSpec device;
- int source_channel[2] { -1, -1 }; // Left and right. -1 = none.
- };
-
- std::vector<Bus> buses;
-};
-
class AudioMixer {
public:
AudioMixer(unsigned num_cards);
return alsa_pool.get_card_state(index);
}
+ // See comments on ALSAPool::create_dead_card().
+ DeviceSpec create_dead_card(const std::string &name, const std::string &info, unsigned num_channels)
+ {
+ unsigned dead_card_index = alsa_pool.create_dead_card(name, info, num_channels);
+ return DeviceSpec{InputSourceType::ALSA_INPUT, dead_card_index};
+ }
+
void set_display_name(DeviceSpec device_spec, const std::string &name);
+ // Note: The card should be held (currently this isn't enforced, though).
+ void serialize_device(DeviceSpec device_spec, DeviceSpecProto *device_spec_proto);
+
void set_input_mapping(const InputMapping &input_mapping);
InputMapping get_input_mapping() const;