// 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_types.mojom";
import "mojo/services/media/control/interfaces/media_player.mojom";
import "mojo/services/media/control/interfaces/media_sink.mojom";
import "mojo/services/media/control/interfaces/media_source.mojom";
import "mojo/services/media/core/interfaces/media_type_converter.mojom";

// Exposed by the factory service to create media-related agents.
[ServiceName="mojo::media::MediaFactory"]
interface MediaFactory {
  // Creates a player.
  // TODO(dalesat): Add means of specifying destinations.
  CreatePlayer(string origin_url, MediaPlayer& player);

  // Creates a source. If allowed_media_types is supplied, conversions will be
  // added to each stream as needed to make the media type of the stream match
  // one of the allowed types. If a stream cannot be converted to one of the
  // allowed types, its media type will have the scheme NONE, and the stream
  // will not be usable.
  CreateSource(string origin_url,
               array<MediaTypeSet>? allowed_media_types,
               MediaSource& source);

  // Creates a sink. Conversions are added to the pipeline as appropriate to
  // convert the indicated media type to a type compatible with the
  // destination.
  CreateSink(string destination_url, MediaType media_type, MediaSink& sink);

  // Creates a decoder.
  CreateDecoder(MediaType input_media_type, MediaTypeConverter& decoder);
};
