X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=futatabi%2Fvideo_stream.h;h=d522ab1e8f5a98f9494004599b9c1aa2a74a76c0;hb=eaba7288c4fb39ca195c9355970293bcaf088dbc;hp=736a20fe275ca7acacf9bd6be1e79377877840ac;hpb=9b7d691b4cc5db7dbfc18c82e86c1207fcac4722;p=nageru diff --git a/futatabi/video_stream.h b/futatabi/video_stream.h index 736a20f..d522ab1 100644 --- a/futatabi/video_stream.h +++ b/futatabi/video_stream.h @@ -5,14 +5,16 @@ #include extern "C" { +#include #include } #include "frame_on_disk.h" #include "jpeg_frame_view.h" -#include "ref_counted_gl_sync.h" +#include "shared/ref_counted_gl_sync.h" #include "queue_spot_holder.h" +#include #include #include #include @@ -34,7 +36,7 @@ class YCbCrConverter; class VideoStream { public: - VideoStream(); + VideoStream(AVFormatContext *file_avctx); // nullptr if output to stream. ~VideoStream(); void start(); void stop(); @@ -66,6 +68,7 @@ private: void encode_thread_func(); std::thread encode_thread; + std::atomic should_quit{false}; static int write_packet2_thunk(void *opaque, uint8_t *buf, int buf_size, AVIODataMarkerType type, int64_t time); int write_packet2(uint8_t *buf, int buf_size, AVIODataMarkerType type, int64_t time); @@ -129,9 +132,11 @@ private: std::deque frame_queue; // Under . std::condition_variable queue_changed; - std::unique_ptr stream_mux; // To HTTP. - std::string stream_mux_header; + AVFormatContext *avctx; + std::unique_ptr mux; // To HTTP, or to file. + std::string stream_mux_header; // Only used in HTTP. bool seen_sync_markers = false; + bool output_fast_forward; std::unique_ptr ycbcr_converter; std::unique_ptr ycbcr_semiplanar_converter;