X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=h264encode.h;h=1eb09b4ffe5e9ed41f144aa9540c9331e2accaf6;hb=5bc2d4de98e960f40a11cd2991a25ea7d1d5a143;hp=b9effa76d86eadcd0b466762196392d1d9adef05;hpb=d147175aaa3e5abfe271940c4518e9ef8dbbc932;p=nageru diff --git a/h264encode.h b/h264encode.h index b9effa7..1eb09b4 100644 --- a/h264encode.h +++ b/h264encode.h @@ -39,9 +39,10 @@ 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 QSurface; @@ -66,19 +67,20 @@ public: void #endif bool begin_frame(GLuint *y_tex, GLuint *cbcr_tex); - void end_frame(RefCountedGLsync fence, const std::vector &input_frames_to_release); + void end_frame(RefCountedGLsync fence, int64_t pts, std::vector audio, 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; }; void copy_thread_func(); void storage_task_thread(); - void storage_task_enqueue(unsigned long long display_order, unsigned long long encode_order, int frame_type); - int save_codeddata(unsigned long long display_order, unsigned long long encode_order, int frame_type); + void storage_task_enqueue(storage_task task); + int save_codeddata(storage_task task); std::thread copy_thread, storage_thread; @@ -98,13 +100,16 @@ private: struct PendingFrame { RefCountedGLsync fence; - std::vector input_frames_to_release; + std::vector input_frames; }; - std::map pending_frames; + 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 QSurface *surface; AVFormatContext *avctx; - AVStream *avstream; + AVStream *avstream_video; + AVStream *avstream_audio; }; #endif