|  | // Copyright 2016 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. | 
|  |  | 
|  | #include <lib/media/cpp/timeline_function.h> | 
|  |  | 
|  | #include <limits> | 
|  | #include <utility> | 
|  |  | 
|  | namespace media { | 
|  |  | 
|  | // static | 
|  | int64_t TimelineFunction::Apply(int64_t subject_time, int64_t reference_time, | 
|  | TimelineRate rate,  // subject_delta / reference_delta | 
|  | int64_t reference_input) { | 
|  | return rate.Scale(reference_input - reference_time) + subject_time; | 
|  | } | 
|  |  | 
|  | // static | 
|  | TimelineFunction TimelineFunction::Compose(const TimelineFunction& bc, const TimelineFunction& ab, | 
|  | bool exact) { | 
|  | // TODO(dalesat): Improve this implementation. | 
|  | // This particular approach to composing two timeline functions compromises | 
|  | // range and accuracy (in some cases) for simplicity. It should be replaced | 
|  | // with something that provides maximum range and accuracy without adding a | 
|  | // lot of runtime cost. | 
|  | return TimelineFunction(bc.Apply(ab.subject_time()), ab.reference_time(), | 
|  | TimelineRate::Product(ab.rate(), bc.rate(), exact)); | 
|  | } | 
|  |  | 
|  | }  // namespace media |