X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=nageru%2Fmixer.h;h=b4ed76f4575ff0403b4865a470af8925d548ddd1;hb=09f6cb41070d746115bbb4ca12325622b564c025;hp=32a1ea476f21547137e680fb13675c80b6b42835;hpb=392f9d1ccb835c05a3874c4bea163788b2c37024;p=nageru diff --git a/nageru/mixer.h b/nageru/mixer.h index 32a1ea4..b4ed76f 100644 --- a/nageru/mixer.h +++ b/nageru/mixer.h @@ -28,20 +28,21 @@ #include "audio_mixer.h" #include "bmusb/bmusb.h" #include "defs.h" -#include "httpd.h" +#include "shared/httpd.h" #include "input_state.h" #include "libusb.h" #include "pbo_frame_allocator.h" #include "ref_counted_frame.h" -#include "ref_counted_gl_sync.h" +#include "shared/ref_counted_gl_sync.h" #include "theme.h" -#include "timebase.h" +#include "shared/timebase.h" #include "video_encoder.h" #include "ycbcr_interpretation.h" class ALSAOutput; class ChromaSubsampler; class DeckLinkOutput; +class MJPEGEncoder; class QSurface; class QSurfaceFormat; class TimecodeRenderer; @@ -475,6 +476,7 @@ private: std::unique_ptr chroma_subsampler; std::unique_ptr v210_converter; std::unique_ptr video_encoder; + std::unique_ptr mjpeg_encoder; std::unique_ptr timecode_renderer; std::atomic display_timecode_in_stream{false}; @@ -530,6 +532,12 @@ private: std::function upload_func; // Needs to be called to actually upload the texture to OpenGL. unsigned dropped_frames = 0; // Number of dropped frames before this one. std::chrono::steady_clock::time_point received_timestamp = std::chrono::steady_clock::time_point::min(); + + // Used for MJPEG encoding. (upload_func packs everything it needs + // into the functor, but would otherwise also use these.) + // width=0 or height=0 means a broken frame, ie., do not upload. + bmusb::VideoFormat video_format; + size_t y_offset, cbcr_offset; }; std::deque new_frames; std::condition_variable new_frames_changed; // Set whenever new_frames is changed.