third-party-mirror / fuchsia-benchmarks / 4d8f191f6f9b09beca24415d898f0c31e2b8db44 / . / third_party / fuchsia-sdk / fidl / fuchsia.media / timeline_function.fidl

// 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; | |

}; |