{
switch (device.type) {
case InputSourceType::CAPTURE_CARD:
- return &cards[device.index];
- break;
+ return &video_cards[device.index];
case InputSourceType::SILENCE:
default:
assert(false);
vector<float> AudioMixer::get_output(double pts, unsigned num_samples, ResamplingQueue::RateAdjustmentPolicy rate_adjustment_policy)
{
- vector<float> samples_card[MAX_CARDS]; // TODO: Needs room for other kinds of capture cards.
+ vector<float> samples_card[MAX_VIDEO_CARDS]; // TODO: Needs room for other kinds of capture cards.
vector<float> samples_bus;
lock_guard<mutex> lock(audio_mutex);
// might have changed; if so, we need to do some sort of remapping
// to silence.
for (unsigned card_index = 0; card_index < num_cards; ++card_index) {
- AudioDevice *device = &cards[card_index];
+ AudioDevice *device = &video_cards[card_index];
if (!device->interesting_channels.empty()) {
samples_card[card_index].resize(num_samples * device->interesting_channels.size());
device->resampling_queue->get_output_samples(
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];
+ const AudioDevice *device = &video_cards[card_index];
DeviceInfo info;
info.name = device->name;
info.num_channels = 8; // FIXME: This is wrong for fake cards.
// Reset resamplers for all cards that don't have the exact same state as before.
for (unsigned card_index = 0; card_index < num_cards; ++card_index) {
DeviceSpec device_spec{InputSourceType::CAPTURE_CARD, card_index};
- AudioDevice *device = &cards[card_index];
+ AudioDevice *device = &video_cards[card_index];
if (device->interesting_channels != interesting_channels[device_spec]) {
device->interesting_channels = interesting_channels[device_spec];
reset_device_mutex_held(DeviceSpec{InputSourceType::CAPTURE_CARD, card_index});
mutable std::mutex audio_mutex;
- AudioDevice cards[MAX_CARDS]; // Under audio_mutex.
+ AudioDevice video_cards[MAX_VIDEO_CARDS]; // Under audio_mutex.
StereoFilter locut; // Default cutoff 120 Hz, 24 dB/oct.
std::atomic<float> locut_cutoff_hz;
#define WIDTH 1280
#define HEIGHT 720
#define FAKE_FPS 25 // Must be an integer.
-#define MAX_CARDS 16
+#define MAX_VIDEO_CARDS 16
#define MAX_BUSES 256 // Audio buses.
// For deinterlacing. See also comments on InputState.
// interlaced output (for deinterlacing), so if we detect progressive input,
// we immediately clear out all history and all entries will point to the same
// frame.
- BufferedFrame buffered_frames[MAX_CARDS][FRAME_HISTORY_LENGTH];
+ BufferedFrame buffered_frames[MAX_VIDEO_CARDS][FRAME_HISTORY_LENGTH];
};
#endif // !defined(_INPUT_STATE_H)
int stats_dropped_frames = 0;
while (!should_quit) {
- CaptureCard::NewFrame new_frames[MAX_CARDS];
- bool has_new_frame[MAX_CARDS] = { false };
- int num_samples[MAX_CARDS] = { 0 };
+ CaptureCard::NewFrame new_frames[MAX_VIDEO_CARDS];
+ bool has_new_frame[MAX_VIDEO_CARDS] = { false };
+ int num_samples[MAX_VIDEO_CARDS] = { 0 };
unsigned master_card_index = theme->map_signal(master_clock_channel);
assert(master_card_index < num_cards);
resource_pool->clean_context();
}
-void Mixer::get_one_frame_from_each_card(unsigned master_card_index, CaptureCard::NewFrame new_frames[MAX_CARDS], bool has_new_frame[MAX_CARDS], int num_samples[MAX_CARDS])
+void Mixer::get_one_frame_from_each_card(unsigned master_card_index, CaptureCard::NewFrame new_frames[MAX_VIDEO_CARDS], bool has_new_frame[MAX_VIDEO_CARDS], int num_samples[MAX_VIDEO_CARDS])
{
start:
// The first card is the master timer, so wait for it to have a new frame.
int last_timecode = -1; // Unwrapped.
};
- CaptureCard cards[MAX_CARDS]; // protected by <bmusb_mutex>
+ CaptureCard cards[MAX_VIDEO_CARDS]; // protected by <bmusb_mutex>
AudioMixer audio_mixer;
- void get_one_frame_from_each_card(unsigned master_card_index, CaptureCard::NewFrame new_frames[MAX_CARDS], bool has_new_frame[MAX_CARDS], int num_samples[MAX_CARDS]);
+ void get_one_frame_from_each_card(unsigned master_card_index, CaptureCard::NewFrame new_frames[MAX_VIDEO_CARDS], bool has_new_frame[MAX_VIDEO_CARDS], int num_samples[MAX_VIDEO_CARDS]);
InputState input_state;
std::queue<AudioTask> audio_task_queue; // Under audio_mutex.
// For mode scanning.
- bool is_mode_scanning[MAX_CARDS]{ false };
- std::vector<uint32_t> mode_scanlist[MAX_CARDS];
- unsigned mode_scanlist_index[MAX_CARDS]{ 0 };
- std::chrono::steady_clock::time_point last_mode_scan_change[MAX_CARDS];
+ bool is_mode_scanning[MAX_VIDEO_CARDS]{ false };
+ std::vector<uint32_t> mode_scanlist[MAX_VIDEO_CARDS];
+ unsigned mode_scanlist_index[MAX_VIDEO_CARDS]{ 0 };
+ std::chrono::steady_clock::time_point last_mode_scan_change[MAX_VIDEO_CARDS];
};
extern Mixer *global_mixer;
struct InputStateInfo {
InputStateInfo(const InputState& input_state);
- unsigned last_width[MAX_CARDS], last_height[MAX_CARDS];
- bool last_interlaced[MAX_CARDS], last_has_signal[MAX_CARDS], last_is_connected[MAX_CARDS];
- unsigned last_frame_rate_nom[MAX_CARDS], last_frame_rate_den[MAX_CARDS];
+ unsigned last_width[MAX_VIDEO_CARDS], last_height[MAX_VIDEO_CARDS];
+ bool last_interlaced[MAX_VIDEO_CARDS], last_has_signal[MAX_VIDEO_CARDS], last_is_connected[MAX_VIDEO_CARDS];
+ unsigned last_frame_rate_nom[MAX_VIDEO_CARDS], last_frame_rate_den[MAX_VIDEO_CARDS];
};
InputStateInfo::InputStateInfo(const InputState &input_state)
{
- for (unsigned signal_num = 0; signal_num < MAX_CARDS; ++signal_num) {
+ for (unsigned signal_num = 0; signal_num < MAX_VIDEO_CARDS; ++signal_num) {
BufferedFrame frame = input_state.buffered_frames[signal_num][0];
if (frame.frame == nullptr) {
last_width[signal_num] = last_height[signal_num] = 0;