blob: 72a9a1fae4bd925d066d3d15010d1cbc084e133a [file] [log] [blame]
// 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