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

import "mojo/services/media/common/interfaces/media_metadata.mojom";
import "mojo/services/media/common/interfaces/timelines.mojom";

// Plays media.
interface MediaPlayer {
  // Special value for GetStatus version_last_seen parameter to get the current
  // status immediately.
  const uint64 kInitialStatus = 0;

  // Starts playback.
  Play();

  // Pauses playback.
  Pause();

  // Seeks to the specified position, specified in nanoseconds.
  Seek(int64 position);

  // Gets the status. To get the status immediately, call
  // GetStatus(kInitialStatus). To get updates thereafter, pass the version
  // sent in the previous callback.
  GetStatus(uint64 version_last_seen)
      => (uint64 version, MediaPlayerStatus status);
};

// MediaPlayer status information.
struct MediaPlayerStatus {
  // Transform translating local time to presentation time. Reverse translation
  // (presentation time to local time) is only valid when media is playing.
  mojo.TimelineTransform? timeline_transform;

  // Indicates whether presentation has reached end-of-stream.
  bool end_of_stream;

  // Describes the media.
  MediaMetadata? metadata;
};
