]> git.sesse.net Git - nageru/blobdiff - mixer.h
Add support for FFmpeg inputs.
[nageru] / mixer.h
diff --git a/mixer.h b/mixer.h
index 2543c24962ccbc960ec1c35c5ee7b512183fe85e..5fb195ec77793faf0a8e9d3989758caf6650b7de 100644 (file)
--- a/mixer.h
+++ b/mixer.h
 class ALSAOutput;
 class ChromaSubsampler;
 class DeckLinkOutput;
-class TimecodeRenderer;
 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
@@ -333,7 +334,12 @@ public:
 private:
        struct CaptureCard;
 
-       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,
@@ -354,7 +360,7 @@ private:
        void trim_queue(CaptureCard *card, unsigned card_index);
 
        HTTPD httpd;
-       unsigned num_cards;
+       unsigned num_cards, num_video_inputs;
 
        QSurface *mixer_surface, *h264_encoder_surface, *decklink_output_surface;
        std::unique_ptr<movit::ResourcePool> resource_pool;
@@ -374,6 +380,7 @@ private:
 
        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;
@@ -381,7 +388,7 @@ private:
        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;