X-Git-Url: https://git.sesse.net/?p=nageru;a=blobdiff_plain;f=nageru%2Fmjpeg_encoder.h;h=362e93461e2ed92c6a09b73153fe7dfc34b6b307;hp=bb783d83b0c76af83c5637f7bc78bfd296542aac;hb=e01e8253288b3b706b22ea0c788c2c8f50bfac2e;hpb=25326c82bda01dfa1b86fb4f074d7697705239f8 diff --git a/nageru/mjpeg_encoder.h b/nageru/mjpeg_encoder.h index bb783d8..362e934 100644 --- a/nageru/mjpeg_encoder.h +++ b/nageru/mjpeg_encoder.h @@ -20,6 +20,7 @@ extern "C" { #include #include +#include #include class HTTPD; @@ -38,11 +39,10 @@ public: MJPEGEncoder(HTTPD *httpd, const std::string &va_display); ~MJPEGEncoder(); void stop(); - void upload_frame(int64_t pts, unsigned card_index, RefCountedFrame frame, const bmusb::VideoFormat &video_format, size_t y_offset, size_t cbcr_offset, std::vector audio); + void upload_frame(int64_t pts, unsigned card_index, RefCountedFrame frame, const bmusb::VideoFormat &video_format, size_t y_offset, size_t cbcr_offset, std::vector audio, const movit::RGBTriplet &white_balance); bool using_vaapi() const { return va_dpy != nullptr; } - // Returns -1 for inactive (ie., don't encode frames for this card right now). - int get_mjpeg_stream_for_card(unsigned card_index); + bool should_encode_mjpeg_for_card(unsigned card_index); private: static constexpr int quality = 90; @@ -105,6 +105,7 @@ private: bmusb::VideoFormat video_format; size_t y_offset, cbcr_offset; std::vector audio; + movit::RGBTriplet white_balance; // Only for frames in the process of being encoded by VA-API. VAResources resources; @@ -117,8 +118,8 @@ private: std::vector encode_jpeg_libjpeg(const QueuedFrame &qf); void write_mjpeg_packet(int64_t pts, unsigned card_index, const uint8_t *jpeg, size_t jpeg_size); void write_audio_packet(int64_t pts, unsigned card_index, const std::vector &audio); - void init_jpeg_422(unsigned width, unsigned height, VectorDestinationManager *dest, jpeg_compress_struct *cinfo); - std::vector get_jpeg_header(unsigned width, unsigned height, jpeg_compress_struct *cinfo); + void init_jpeg_422(unsigned width, unsigned height, const movit::RGBTriplet &white_balance, VectorDestinationManager *dest, jpeg_compress_struct *cinfo); + std::vector get_jpeg_header(unsigned width, unsigned height, const movit::RGBTriplet &white_balance, jpeg_compress_struct *cinfo); static int write_packet2_thunk(void *opaque, uint8_t *buf, int buf_size, AVIODataMarkerType type, int64_t time); int write_packet2(uint8_t *buf, int buf_size, AVIODataMarkerType type, int64_t time); @@ -149,7 +150,7 @@ private: VAEncSliceParameterBufferJPEG parms; }; std::map, VAData> va_data_for_resolution; - VAData get_va_data_for_resolution(unsigned width, unsigned height); + VAData get_va_data_for_resolution(unsigned width, unsigned height, const movit::RGBTriplet &white_balance); std::list va_resources_freelist; std::mutex va_resources_mutex;