X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=mixer.h;h=6d0cbce1593b6da92c4f426668d948c982683921;hb=35d4e46a1e3628c7be6566f2a985bc7da435cdf9;hp=b9acfc4c607e2a9b880ef8dea5bc7867da9fa286;hpb=86f32b5a80b232e6d824776a87ecc1b5f8fbfa96;p=nageru diff --git a/mixer.h b/mixer.h index b9acfc4..6d0cbce 100644 --- a/mixer.h +++ b/mixer.h @@ -34,6 +34,7 @@ #include "timebase.h" #include "stereocompressor.h" #include "filter.h" +#include "input_state.h" class H264Encoder; class QSurface; @@ -170,16 +171,6 @@ public: void reset_meters(); - struct BufferedFrame { - RefCountedFrame frame; - unsigned field_number; - }; - - BufferedFrame get_buffered_frame(int card, int history_pos) - { - return buffered_frames[card][history_pos]; - } - private: void bm_frame(unsigned card_index, uint16_t timecode, FrameAllocator::Frame video_frame, size_t video_offset, uint16_t video_format, @@ -237,12 +228,7 @@ private: }; CaptureCard cards[MAX_CARDS]; // protected by - // For each card, the last three frames (or fields), with 0 being the - // most recent one. Note that we only need the actual history if we have - // 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]; + InputState input_state; class OutputChannel { public: @@ -268,7 +254,8 @@ private: std::atomic should_quit{false}; audio_level_callback_t audio_level_callback = nullptr; - Ebu_r128_proc r128; + std::mutex r128_mutex; + Ebu_r128_proc r128; // Under r128_mutex. Resampler peak_resampler; std::atomic peak{0.0f};