class DeckLinkOutput;
class QSurface;
class QSurfaceFormat;
+class TimecodeRenderer;
+class v210Converter;
namespace movit {
class Effect;
class EffectChain;
-class FlatInput;
class ResourcePool;
+class YCbCrInput;
} // namespace movit
// For any card that's not the master (where we pick out the frames as they
desired_output_video_mode = mode;
}
+ void set_display_timecode_in_stream(bool enable) {
+ display_timecode_in_stream = enable;
+ }
+
+ void set_display_timecode_on_stdout(bool enable) {
+ display_timecode_on_stdout = enable;
+ }
+
private:
struct CaptureCard;
void thread_func();
void handle_hotplugged_cards();
void schedule_audio_resampling_tasks(unsigned dropped_frames, int num_samples_per_frame, int length_per_frame, bool is_preroll, std::chrono::steady_clock::time_point frame_timestamp);
+ std::string get_timecode_text() const;
void render_one_frame(int64_t duration);
void audio_thread_func();
void release_display_frame(DisplayFrame *frame);
std::unique_ptr<movit::EffectChain> display_chain;
std::unique_ptr<ChromaSubsampler> chroma_subsampler;
+ std::unique_ptr<v210Converter> v210_converter;
std::unique_ptr<VideoEncoder> video_encoder;
+ std::unique_ptr<TimecodeRenderer> timecode_renderer;
+ std::atomic<bool> display_timecode_in_stream{false};
+ std::atomic<bool> display_timecode_on_stdout{false};
+
// Effects part of <display_chain>. Owned by <display_chain>.
- movit::FlatInput *display_input;
+ movit::YCbCrInput *display_input;
int64_t pts_int = 0; // In TIMEBASE units.
+ unsigned frame_num = 0;
// Accumulated errors in number of 1/TIMEBASE audio samples. If OUTPUT_FREQUENCY divided by
// frame rate is integer, will always stay zero.