- void set_frame_ready_callback(Output output, new_frame_ready_callback_t callback)
+ void add_frame_ready_callback(Output output, void *key, new_frame_ready_callback_t callback)
+ {
+ output_channel[output].add_frame_ready_callback(key, callback);
+ }
+
+ void remove_frame_ready_callback(Output output, void *key)
- void configure_card(unsigned card_index, bmusb::CaptureInterface *capture, bool is_fake_capture, DeckLinkOutput *output);
+ enum class CardType {
+ LIVE_CARD,
+ FAKE_CAPTURE,
+ FFMPEG_INPUT
+ };
+ void configure_card(unsigned card_index, bmusb::CaptureInterface *capture, CardType card_type, DeckLinkOutput *output);
void set_output_card_internal(int card_index); // Should only be called from the mixer thread.
void bm_frame(unsigned card_index, uint16_t timecode,
bmusb::FrameAllocator::Frame video_frame, size_t video_offset, bmusb::VideoFormat video_format,
void set_output_card_internal(int card_index); // Should only be called from the mixer thread.
void bm_frame(unsigned card_index, uint16_t timecode,
bmusb::FrameAllocator::Frame video_frame, size_t video_offset, bmusb::VideoFormat video_format,
QSurface *mixer_surface, *h264_encoder_surface, *decklink_output_surface;
std::unique_ptr<movit::ResourcePool> resource_pool;
QSurface *mixer_surface, *h264_encoder_surface, *decklink_output_surface;
std::unique_ptr<movit::ResourcePool> resource_pool;
std::atomic<bool> display_timecode_on_stdout{false};
// Effects part of <display_chain>. Owned by <display_chain>.
std::atomic<bool> display_timecode_on_stdout{false};
// Effects part of <display_chain>. Owned by <display_chain>.
std::unique_ptr<DeckLinkOutput> output;
// If this card is used for output (ie., output_card_index points to it),
std::unique_ptr<DeckLinkOutput> output;
// If this card is used for output (ie., output_card_index points to it),
int last_timecode = -1; // Unwrapped.
};
CaptureCard cards[MAX_VIDEO_CARDS]; // Protected by <card_mutex>.
int last_timecode = -1; // Unwrapped.
};
CaptureCard cards[MAX_VIDEO_CARDS]; // Protected by <card_mutex>.
AudioMixer audio_mixer; // Same as global_audio_mixer (see audio_mixer.h).
bool input_card_is_master_clock(unsigned card_index, unsigned master_card_index) const;
struct OutputFrameInfo {
AudioMixer audio_mixer; // Same as global_audio_mixer (see audio_mixer.h).
bool input_card_is_master_clock(unsigned card_index, unsigned master_card_index) const;
struct OutputFrameInfo {
void set_transition_names_updated_callback(transition_names_updated_callback_t callback);
void set_name_updated_callback(name_updated_callback_t callback);
void set_color_updated_callback(color_updated_callback_t callback);
void set_transition_names_updated_callback(transition_names_updated_callback_t callback);
void set_name_updated_callback(name_updated_callback_t callback);
void set_color_updated_callback(color_updated_callback_t callback);
std::mutex frame_mutex;
DisplayFrame current_frame, ready_frame; // protected by <frame_mutex>
bool has_current_frame = false, has_ready_frame = false; // protected by <frame_mutex>
std::mutex frame_mutex;
DisplayFrame current_frame, ready_frame; // protected by <frame_mutex>
bool has_current_frame = false, has_ready_frame = false; // protected by <frame_mutex>
transition_names_updated_callback_t transition_names_updated_callback;
name_updated_callback_t name_updated_callback;
color_updated_callback_t color_updated_callback;
transition_names_updated_callback_t transition_names_updated_callback;
name_updated_callback_t name_updated_callback;
color_updated_callback_t color_updated_callback;