X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=futatabi%2Fvideo_stream.h;h=26cb7c808a537af72d0f01cccbc4f0331185a912;hb=ba87f70eef2fdfee4d008593e7c8e9f2c05f4f67;hp=906cd77af9224056e6524c3a01a7c91ab0e061bf;hpb=4a9e97065dade428e373a83618bc973cd93cbe52;p=nageru diff --git a/futatabi/video_stream.h b/futatabi/video_stream.h index 906cd77..26cb7c8 100644 --- a/futatabi/video_stream.h +++ b/futatabi/video_stream.h @@ -47,21 +47,21 @@ public: void schedule_original_frame(std::chrono::steady_clock::time_point, int64_t output_pts, std::function &&display_func, QueueSpotHolder &&queue_spot_holder, - FrameOnDisk frame); + FrameOnDisk frame, const std::string &subtitle); void schedule_faded_frame(std::chrono::steady_clock::time_point, int64_t output_pts, std::function &&display_func, QueueSpotHolder &&queue_spot_holder, FrameOnDisk frame1, FrameOnDisk frame2, - float fade_alpha); + float fade_alpha, const std::string &subtitle); void schedule_interpolated_frame(std::chrono::steady_clock::time_point, int64_t output_pts, std::function)> &&display_func, QueueSpotHolder &&queue_spot_holder, FrameOnDisk frame1, FrameOnDisk frame2, - float alpha, FrameOnDisk secondary_frame = {}, // Empty = no secondary (fade) frame. - float fade_alpha = 0.0f); + float alpha, FrameOnDisk secondary_frame, // Empty = no secondary (fade) frame. + float fade_alpha, const std::string &subtitle); void schedule_refresh_frame(std::chrono::steady_clock::time_point, int64_t output_pts, std::function &&display_func, - QueueSpotHolder &&queue_spot_holder); + QueueSpotHolder &&queue_spot_holder, const std::string &subtitle); private: FrameReader frame_reader; @@ -111,7 +111,13 @@ private: int64_t output_pts; enum Type { ORIGINAL, FADED, INTERPOLATED, FADED_INTERPOLATED, REFRESH } type; - FrameOnDisk frame1; // The only frame for original frames. + + // For original frames only. Made move-only so we know explicitly + // we don't copy these ~200 kB files around inadvertedly. + std::unique_ptr encoded_jpeg; + + // For everything except original frames. + FrameOnDisk frame1; // For fades only (including fades against interpolated frames). FrameOnDisk secondary_frame; @@ -127,6 +133,8 @@ private: std::function display_func; // Called when the image is done decoding. std::function)> display_decoded_func; // Same, except for INTERPOLATED and FADED_INTERPOLATED. + std::string subtitle; // Blank for none. + QueueSpotHolder queue_spot_holder; }; std::deque frame_queue; // Under . @@ -150,7 +158,7 @@ private: GLuint last_flow_tex = 0; FrameOnDisk last_frame1, last_frame2; - std::vector last_frame; + std::string last_frame; }; #endif // !defined(_VIDEO_STREAM_H)