X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=h264encode.h;h=53c6c569feab9724f5fd8c0780a6ebbc54814946;hb=fec3f686bf239f9d98782603616613c16f8025b1;hp=7a10d927ca84f94a7f8abc74fb7c6c7910b2e8d0;hpb=4ec330853ee13b230f089253fedd20b49229e42b;p=nageru diff --git a/h264encode.h b/h264encode.h index 7a10d92..53c6c56 100644 --- a/h264encode.h +++ b/h264encode.h @@ -27,9 +27,12 @@ #define _H264ENCODE_H extern "C" { +#include #include } #include +#include +#include #include #include #include @@ -78,13 +81,21 @@ 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_thread_func(); + void encode_remaining_frames_as_p(int encoding_frame_num, int gop_start_display_frame_num, int64_t last_dts); + void encode_frame(PendingFrame frame, int encoding_frame_num, int display_frame_num, int gop_start_display_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; + std::thread encode_thread, storage_thread; std::mutex storage_task_queue_mutex; std::condition_variable storage_task_queue_changed; @@ -94,17 +105,12 @@ private: std::mutex frame_queue_mutex; std::condition_variable frame_queue_nonempty; - bool copy_thread_should_quit = false; // under frame_queue_mutex + bool encode_thread_should_quit = false; // under frame_queue_mutex //int frame_width, frame_height; //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;