X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=h264encode.h;h=c87779738626a612149e23e75b5967f7ecb9ae75;hb=021c4779665c734dcde1f15a6d9b38a37820bb38;hp=48dd3291df457b1c2b8dbb7f3cdf6c380b848cc6;hpb=b4f16ea9f8969a3ba14be8cd9c88cfe00d19533b;p=nageru diff --git a/h264encode.h b/h264encode.h index 48dd329..c877797 100644 --- a/h264encode.h +++ b/h264encode.h @@ -27,9 +27,12 @@ #define _H264ENCODE_H extern "C" { +#include #include } #include +#include +#include #include #include #include @@ -52,7 +55,7 @@ class QSurface; class H264Encoder { public: - H264Encoder(QSurface *surface, int width, int height, const char *output_filename, HTTPD *httpd); + H264Encoder(QSurface *surface, int width, int height, HTTPD *httpd); ~H264Encoder(); //void add_frame(FrameAllocator::Frame frame, GLsync fence); @@ -78,11 +81,17 @@ private: std::vector audio; int64_t pts, dts; }; + struct PendingFrame { + RefCountedGLsync fence; + std::vector input_frames; + int64_t pts; + }; void copy_thread_func(); + void encode_frame(PendingFrame frame, int encoding_frame_num, int frame_type, int64_t pts, int64_t dts); void storage_task_thread(); void storage_task_enqueue(storage_task task); - int save_codeddata(storage_task task); + void save_codeddata(storage_task task); std::thread copy_thread, storage_thread; @@ -100,18 +109,11 @@ private: //int ; int current_storage_frame; - 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 QSurface *surface; - AVFormatContext *avctx; - AVStream *avstream_video; - AVStream *avstream_audio; + AVCodecContext *context_audio; HTTPD *httpd; };