]> git.sesse.net Git - nageru/blobdiff - futatabi/frame_on_disk.h
Fix a dangling reference (found by GCC 14).
[nageru] / futatabi / frame_on_disk.h
index dbe121113f185bb9011ce3c58c9d0a835a5daa0c..c8a74a758ffdc19e6fad72c34a9246408893971f 100644 (file)
@@ -41,7 +41,12 @@ class FrameReader {
 public:
        FrameReader();
        ~FrameReader();
-       std::string read_frame(FrameOnDisk frame);
+
+       struct Frame {
+               std::string video;
+               std::string audio;
+       };
+       Frame read_frame(FrameOnDisk frame, bool read_video, bool read_audio);
 
 private:
        int fd = -1;
@@ -56,6 +61,13 @@ find_last_frame_before(std::vector<FrameOnDisk> &frames, int64_t pts_origin)
                                [](const FrameOnDisk &frame, int64_t pts) { return frame.pts < pts; });
 }
 
+inline std::vector<FrameOnDisk>::const_iterator
+find_last_frame_before(const std::vector<FrameOnDisk> &frames, int64_t pts_origin)
+{
+       return std::lower_bound(frames.begin(), frames.end(), pts_origin,
+                               [](const FrameOnDisk &frame, int64_t pts) { return frame.pts < pts; });
+}
+
 inline std::vector<FrameOnDisk>::iterator
 find_first_frame_at_or_after(std::vector<FrameOnDisk> &frames, int64_t pts_origin)
 {
@@ -63,4 +75,11 @@ find_first_frame_at_or_after(std::vector<FrameOnDisk> &frames, int64_t pts_origi
                                [](int64_t pts, const FrameOnDisk &frame) { return pts < frame.pts; });
 }
 
+inline std::vector<FrameOnDisk>::const_iterator
+find_first_frame_at_or_after(const std::vector<FrameOnDisk> &frames, int64_t pts_origin)
+{
+       return std::upper_bound(frames.begin(), frames.end(), pts_origin - 1,
+                               [](int64_t pts, const FrameOnDisk &frame) { return pts < frame.pts; });
+}
+
 #endif  // !defined(_FRAME_ON_DISK_H)