// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

library fuchsia.media;

/// A TimelineFunction represents a relationship between a subject timeline and a
/// reference timeline with a linear relation.
///
/// For example, consider a common use case in which reference time is the
/// monotonic clock of a system and subject time is intended presentation time
/// for some media such as a video.
///
/// `reference_time` is the value of the monotonic clock at the beginning of
/// playback. `subject_time` is 0 assuming playback starts at the beginning of
/// the media. We then choose a `reference_delta` and `subject_delta` so that
/// `subject_delta` / `reference_delta` represents the desired playback rate,
/// e.g. 0/1 for paused and 1/1 for normal playback.
///
/// ## Formulas
///
/// With a function we can determine the subject timeline value `s` in terms of
/// reference timeline value `r` with this formula (where `reference_delta` > 0):
///
///   s = (r - reference_time) * (subject_delta / reference_delta) + subject_time
///
/// And similarly we can find the reference timeline value `r` in terms of
/// subject timeline value `s` with this formula (where `subject_delta` > 0):
///
///   r = (s - subject_time) * (reference_delta / subject_delta) + referenc_time
///
/// ## Choosing time values
///
/// Time values can be arbitrary and our linear relation will of course be the
/// same, but we can use them to represent the bounds of pieces in a piecewise
/// linear relation.
///
/// For example, if a user performs skip-chapter, we might want to describe
/// this with a TimelineFunction whose `subject_time` is the time to skip to,
/// `reference_time` is now plus some epsilon, and delta ratio is 1/1 for normal
/// playback rate.
struct TimelineFunction {
    /// A value from the subject timeline that correlates to reference_time.
    int64 subject_time = 0;

    /// A value from the reference timeline that correlates to subject_time.
    int64 reference_time = 0;

    /// The change in the subject timeline corresponding to reference_delta.
    uint32 subject_delta = 0;

    /// The change in the reference timeline corresponding to subject_delta.
    /// Cannot be zero.
    uint32 reference_delta = 1;
};
