reportPlayback method

void reportPlayback({
  1. required int totalFrames,
  2. required int droppedFrames,
  3. required int width,
  4. required int height,
  5. required DateTime at,
})

The video's counters at at: two reports give the frames per second between them.

Implementation

void reportPlayback({
  required int totalFrames,
  required int droppedFrames,
  required int width,
  required int height,
  required DateTime at,
}) {
  final previous = _lastPlayback;
  _lastPlayback = (totalFrames, at);
  final elapsed = previous == null
      ? 0
      : at.difference(previous.$2).inMilliseconds;
  // A new session restarts the counters; a negative difference is that, not a rate.
  if (previous == null || elapsed <= 0 || totalFrames < previous.$1) return;
  playback.value = PlaybackStats(
    fps: (totalFrames - previous.$1) * 1000 / elapsed,
    dropped: droppedFrames,
    width: width,
    height: height,
  );
}