X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=h264encode.h;h=7a10d927ca84f94a7f8abc74fb7c6c7910b2e8d0;hb=4ec330853ee13b230f089253fedd20b49229e42b;hp=5662f05183608e061383fbe6633a2c9185ab696a;hpb=bc7862c72514f91de51c547b2efe26c90b9631f9;p=nageru diff --git a/h264encode.h b/h264encode.h index 5662f05..7a10d92 100644 --- a/h264encode.h +++ b/h264encode.h @@ -39,19 +39,20 @@ extern "C" { #include #include -#include "bmusb.h" +#include "bmusb/bmusb.h" #include "context.h" #include "pbo_frame_allocator.h" #include "ref_counted_frame.h" #include "ref_counted_gl_sync.h" +class HTTPD; class QSurface; #define SURFACE_NUM 16 /* 16 surfaces for source YUV */ class H264Encoder { public: - H264Encoder(QSurface *surface, int width, int height, const char *output_filename); + H264Encoder(QSurface *surface, int width, int height, HTTPD *httpd); ~H264Encoder(); //void add_frame(FrameAllocator::Frame frame, GLsync fence); @@ -66,15 +67,16 @@ public: }; void #endif + void add_audio(int64_t pts, std::vector audio); // Needs to come before end_frame() of same pts. bool begin_frame(GLuint *y_tex, GLuint *cbcr_tex); - void end_frame(RefCountedGLsync fence, int64_t pts, std::vector audio, const std::vector &input_frames); + void end_frame(RefCountedGLsync fence, int64_t pts, const std::vector &input_frames); private: struct storage_task { unsigned long long display_order; - unsigned long long encode_order; int frame_type; std::vector audio; + int64_t pts, dts; }; void copy_thread_func(); @@ -101,15 +103,14 @@ private: struct PendingFrame { RefCountedGLsync fence; std::vector input_frames; + int64_t pts; }; std::map pending_video_frames; // under frame_queue_mutex - std::map> pending_audio_frames; // under frame_queue_mutex - std::map timestamps; // under frame_queue_mutex + std::map> pending_audio_frames; // under frame_queue_mutex QSurface *surface; - AVFormatContext *avctx; - AVStream *avstream_video; - AVStream *avstream_audio; + AVCodecContext *context_audio; + HTTPD *httpd; }; #endif