X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=nageru%2Fmjpeg_encoder.h;h=bb783d83b0c76af83c5637f7bc78bfd296542aac;hb=a60a2c892c08f6fab3a1e6b7cf4343cad8689058;hp=aee1b9bf52f0da0891df85313a878635d2bb6bf3;hpb=575f6eb1b052bb1291987753b1a8cccc7f1e3ab3;p=nageru diff --git a/nageru/mjpeg_encoder.h b/nageru/mjpeg_encoder.h index aee1b9b..bb783d8 100644 --- a/nageru/mjpeg_encoder.h +++ b/nageru/mjpeg_encoder.h @@ -38,13 +38,7 @@ 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); - - // If the frame was started (data_copy != nullptr) but will not be finished - // (MJPEG decoding was turned off in the meantime), you'll need to call finish_frame() - // to release any VA-API resources. - void finish_frame(RefCountedFrame frame); - + 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); bool using_vaapi() const { return va_dpy != nullptr; } // Returns -1 for inactive (ie., don't encode frames for this card right now). @@ -110,6 +104,7 @@ private: RefCountedFrame frame; bmusb::VideoFormat video_format; size_t y_offset, cbcr_offset; + std::vector audio; // Only for frames in the process of being encoded by VA-API. VAResources resources; @@ -121,6 +116,7 @@ private: void encode_jpeg_va(QueuedFrame &&qf); 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);