void place_rectangle(movit::Effect *resample_effect, movit::Effect *padding_effect, float x0, float y0, float x1, float y1);
void thread_func();
void render_one_frame();
+ void send_audio_level_callback();
void audio_thread_func();
void process_audio_one_frame(int64_t frame_pts_int, int num_samples);
void subsample_chroma(GLuint src_tex, GLuint dst_dst);
int64_t next_local_pts = 0; // Beginning of next frame, in TIMEBASE units.
};
CaptureCard cards[MAX_CARDS]; // protected by <bmusb_mutex>
+ 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]);
InputState input_state;