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

[DartPackage="mojo_services"]
module mojo.media;

// TimelineQuad
// TODO(dalesat): Rename reference -> presentation.
// TODO(dalesat): Rename target -> reference.
//
// A structure which holds the four numbers needed to define a linear
// relationship between the points in two different timelines.  The relationship
// is expressed using 4 integers in order to facilitate compositions of multiple
// transformations (A->B can be composed with B->C to produce the transformation
// from A->C), and to minimize rounding and scaling errors when mapping points
// between timelines which do not have an integer scaling relationship between
// each other.
//
// These values are used to define the following functions which map from
// points from the reference timeline to the target timeline, and back again.
//
// Let r be a point in the reference timeline.
// Let t be a point in the target timeline timeline.
// Let ref and tgt be abbreviations for reference and target in equations below.
//
// Given that r and t represent the same instant in time (in a single frame of
// reference)
//
// t = f(r) = (((r - ref_offset) * tgt_delta) / ref_delta) + tgt_offset
// r = F(t) = (((t - tgt_offset) * ref_delta) / tgt_delta) + ref_offset
//
// See also...
// mojo/services/media/common/linear_transform.h
//
// no-format
struct TimelineQuad {
  int64  reference_offset = 0;
  int64  target_offset    = 0;
  uint32 reference_delta  = 0;
  uint32 target_delta     = 1;
};
// end-no-format

// TimelineTransform
// TODO(dalesat): Rename reference -> presentation.
// TODO(dalesat): Rename target -> reference.
//
// A structure which holds both a timeline quad, and a pair of identifiers which
// define the specific timelines which are the reference and target timelines.
struct TimelineTransform {
  // TODO: These constants should probably defined by a central time management
  // service, not here.
  const uint32 kLocalTimeID = 0xFFFFFFFF;
  const uint32 kContextual = 0xFFFFFFFE;

  TimelineQuad quad;
  uint32 reference_timeline_id = kContextual;
  uint32 target_timeline_id = kLocalTimeID;
};

// RateControl
//
// An interface typically exposed by media renderers which allow producers of
// media to specify how the presentation time stamps of the media queued to the
// renderer relate to real time.  Users may initialize the transformation with a
// specific Quad, change the rate immediately in a first order contiguous
// fashion, or schedule ranges in the rate at points in time on either the
// reference or target timelines.
interface RateControl {
  // Get the current quad which describes the transformation between the
  // reference and target timelines.
  GetCurrentTransform() => (TimelineTransform trans);

  // Immediately, explicitly set the quad which describes the mapping from
  // reference to target timeline.  It is understood that this can cause
  // discontinuities and should only be used in situations which are already
  // fundamentally discontinuous (startup/seeking, for example)
  SetCurrentQuad(TimelineQuad quad);

  // Configure the target timeline ID.  Note, the reference timeline ID will
  // always be contextual.
  SetTargetTimelineID(uint32 id);

  // Immediately change the rate of the existing transformation in a fashion
  // which is first order continuous with the current transformation.
  SetRate(uint32 reference_delta, uint32 target_delta);

  // Schedule a first order continuous rate change at the specified reference
  // time.
  SetRateAtReferenceTime(uint32 reference_delta,
                         uint32 target_delta,
                         int64 reference_time);

  // Schedule a first order continuous rate change at the specified target time.
  SetRateAtTargetTime(uint32 reference_delta,
                      uint32 target_delta,
                      int64 target_time);

  // Cancel any pending rate changes
  CancelPendingChanges();
};
