#include "fgc/CameraStall.h" #include namespace fgc { long long firstFrameLimitMs(double exposure_us) { const long long exposure_ms = exposure_us > 0 ? static_cast(exposure_us / 1000) : 0; return std::max(30000, 3 * exposure_ms + 5000); } StallAction onNoFirstFrame(long long waited_ms, double exposure_us, int failed_restarts) { if (waited_ms < firstFrameLimitMs(exposure_us)) return StallAction::Wait; return failed_restarts >= kRestartsBeforeReset ? StallAction::Reset : StallAction::Restart; } long long staleFrameLimitMs(double exposure_us, double frame_period_ms) { const double exposure_ms = exposure_us > 0 ? exposure_us / 1000 : 0; const double slowest = std::max(exposure_ms, frame_period_ms > 0 ? frame_period_ms : 0); return std::max(2000, static_cast(2 * slowest) + 1000); } StallAction onStaleFrame(long long since_newest_ms, double exposure_us, double frame_period_ms) { return since_newest_ms < staleFrameLimitMs(exposure_us, frame_period_ms) ? StallAction::Wait : StallAction::Restart; } StallAction onRestartFailed(int failed_restarts) { return failed_restarts >= kRestartsBeforeReset ? StallAction::Reset : StallAction::Restart; } } // namespace fgc