X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=video_encoder.h;h=8578462be9a4304fce3d9800f8ebef9aaf90f7ea;hb=ee7da87b4aa284b7babd59dc21db925f7c384ce7;hp=0991f91195330a4f32409c9ed047f22455cb922e;hpb=cf7b9ee186d4ef8e5da0531b75854c97b821be44;p=nageru diff --git a/video_encoder.h b/video_encoder.h index 0991f91..8578462 100644 --- a/video_encoder.h +++ b/video_encoder.h @@ -6,6 +6,7 @@ #define _VIDEO_ENCODER_H #include +#include #include #include #include @@ -40,8 +41,18 @@ public: ~VideoEncoder(); void add_audio(int64_t pts, std::vector audio); - bool begin_frame(GLuint *y_tex, GLuint *cbcr_tex); - RefCountedGLsync end_frame(int64_t pts, int64_t duration, const std::vector &input_frames); + + // Allocate a frame to render into. The returned two textures + // are yours to render into (build them into an FBO). + // Call end_frame() when you're done. + bool begin_frame(int64_t pts, int64_t duration, movit::YCbCrLumaCoefficients ycbcr_coefficients, const std::vector &input_frames, GLuint *y_tex, GLuint *cbcr_tex); + + // Call after you are done rendering into the frame; at this point, + // y_tex and cbcr_tex will be assumed done, and handed over to the + // encoder. The returned fence is purely a convenience; you do not + // need to use it for anything, but it's useful if you wanted to set + // one anyway. + RefCountedGLsync end_frame(); // Does a cut of the disk stream immediately ("frame" is used for the filename only). void do_cut(int frame); @@ -63,6 +74,8 @@ private: HTTPD *httpd; DiskSpaceEstimator *disk_space_estimator; + bool seen_sync_markers = false; + std::unique_ptr stream_mux; // To HTTP. std::unique_ptr stream_audio_encoder; std::unique_ptr x264_encoder; // nullptr if not using x264.