Class RppgResult#

Class Documentation#

class RppgResult#

Parses a “<video_stem>.<backend>.rppg.json” file written by analysis/run_rppg.py into a queryable in-memory structure, for the Analysis tab’s Remote Heart Rate (rPPG) plugin.

Usage:

auto result = RppgResult::load(jsonPath);
if (result.is_valid()) { ... }

Warning

EXPERIMENTAL — this is a research-grade heart-rate estimate only, not a medical device and not clinically validated (see the plugin’s own persistent UI disclaimer banner).

Public Functions

RppgResult() = default#
inline bool is_valid() const#
inline const QString &source_video() const#
inline const QString &backend() const#
inline double window_sec() const#
inline double hop_sec() const#
inline const QVector<RppgWindow> &windows() const#
inline const QVector<RppgFrame> &frames() const#
inline std::optional<double> mean_bpm() const#

Precomputed by run_rppg.py from the raw (non-smoothed) per-window bpm values — not recomputed here, avoiding duplicating percentile/ mean math in two languages. std::nullopt if no window in the file had any reliable estimate.

inline std::optional<double> median_bpm() const#
inline std::optional<double> min_bpm() const#
inline std::optional<double> max_bpm() const#
inline double pct_windows_good() const#
const RppgWindow *nearest_window(int64_t timestampMsEstimate) const#

Binary search by start time (windows()/frames() are both written in chronological order by run_rppg.py) with a before/after numerically-closer tie-break — mirrors GazeFusionResult:: nearest_frame()’s exact convention. Returns nullptr only if windows()/frames() is empty.

const RppgFrame *nearest_frame(int64_t timestampMsEstimate) const#

Public Static Functions

static RppgResult load(const QString &jsonPath)#

Parses jsonPath. Returns a default-constructed (is_valid() == false) result if the file is missing or malformed.