// 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_common.mojom";
import "mojo/services/media/common/interfaces/media_metadata.mojom";
import "mojo/services/media/common/interfaces/media_state.mojom";
import "mojo/services/media/common/interfaces/media_transport.mojom";
import "mojo/services/media/common/interfaces/media_types.mojom";

// Produces media streams delivered from a specified origin.
interface MediaSource {
  // Special value for GetStatus version_last_seen parameter to get the current
  // status immediately.
  const uint64 kInitialStatus = 0;

  // Gets the streams produced by this source.
  GetStreams() => (array<MediaSourceStreamDescriptor> streams);

  // Gets the producer for the specified stream.
  GetProducer(uint32 stream_index, MediaProducer& producer);

  // Gets the pull mode producer for the specified stream.
  GetPullModeProducer(uint32 stream_index, MediaPullModeProducer& producer);

  // 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, MediaSourceStatus status);

  // Prepares the source.
  Prepare() => ();

  // Primes the source and downstream components.
  Prime() => ();

  // Flushes the source and downstream components.
  Flush() => ();

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

// Describes a media stream produced by a source.
struct MediaSourceStreamDescriptor {
  // Zero-based index.
  uint32 index;

  // Media type of the stream after conversion.
  MediaType media_type;

  // Media type of the stream before conversion (as produced by the demux).
  MediaType original_media_type;
};

// Describes the media source.
struct MediaSourceStatus {
  // Current state of the source.
  MediaState state;

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