1 #ifndef _DISK_SPACE_ESTIMATOR_H
2 #define _DISK_SPACE_ESTIMATOR_H
4 // A class responsible for measuring how much disk there is left when we
5 // store our video to disk, and how much recording time that equates to.
6 // It gets callbacks from the Mux writing the stream to disk (which also
7 // knows which filesystem the file is going to), makes its calculations,
8 // and calls back to the MainWindow, which shows it to the user.
10 // The bitrate is measured over a simple 30-second sliding window.
13 #include <sys/types.h>
21 class DiskSpaceEstimator
24 typedef std::function<void(off_t free_bytes, double estimated_seconds_left)> callback_t;
25 DiskSpaceEstimator(callback_t callback);
27 // Report that a video frame with the given pts has just been written
28 // to the given file, so the estimator should stat the file and see
29 // by how much it grew since last time. Called by the Mux object
30 // responsible for writing to the stream on disk.
32 // If the filename changed since last time, the estimation is reset.
33 // <pts> is taken to be in TIMEBASE units (see timebase.h).
34 void report_write(const std::string &filename, uint64_t pts);
37 static constexpr int64_t window_length = 30 * TIMEBASE;
40 std::string last_filename;
46 std::deque<MeasurePoint> measure_points;
47 uint64_t last_pts_reported = 0;
50 std::atomic<int64_t> metric_disk_free_bytes{-1};
53 extern DiskSpaceEstimator *global_disk_space_estimator;
55 #endif // !defined(_DISK_SPACE_ESTIMATOR_H)