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

module media.mojom;

import "media/mojo/mojom/audio_decoder.mojom";
import "media/mojo/mojom/decryptor.mojom";
import "media/mojo/mojom/content_decryption_module.mojom";
import "media/mojo/mojom/media_log.mojom";
import "media/mojo/mojom/renderer.mojom";
import "media/mojo/mojom/renderer_extensions.mojom";
import "media/mojo/mojom/video_decoder.mojom";
import "mojo/public/mojom/base/token.mojom";
import "mojo/public/mojom/base/unguessable_token.mojom";

// A factory for creating media mojo interfaces. Renderers can only access
// ContentDecryptionModules created with the same factory.
interface InterfaceFactory {
  CreateAudioDecoder(pending_receiver<AudioDecoder> audio_decoder);
  CreateVideoDecoder(pending_receiver<VideoDecoder> video_decoder);

  // Creates a regular media::Renderer (DefaultRendererFactory).
  // TODO(guohuideng): remove |audio_device_id|, it's not used.
  CreateDefaultRenderer(string audio_device_id,
                        pending_receiver<Renderer> renderer);

  [EnableIf=enable_cast_renderer]
  // Creates a CastRenderer (CastRendererClientFactory).
  // This is used on Chromecast only. The |overlay_plane_id| is generated by
  // VideoOverlayFactory owned by MojoRenderer, therefore identifies the
  // MojoRenderer. With |overlay_plane_id|, The service can keep track of
  // which hosted CastRenderer is associated with which client.
  // This is necessary because MediaService will need to look up CastRenderer
  // by the |overlay_plane_id| to set video geometry on.
  CreateCastRenderer(mojo_base.mojom.UnguessableToken overlay_plane_id,
                     pending_receiver<Renderer> renderer);

  [EnableIf=is_android]
  // Creates a MediaPlayerRenderer (MediaPlayerRendererClientFactory).
  // - |renderer_extension| is bound in MediaPlayerRenderer, and receives calls
  //   from MediaPlayerRendererClient.
  // - |client_extension| is bound in MediaPlayerRendererClient, and receives
  //   calls from the MediaPlayerRenderer.
  CreateMediaPlayerRenderer(
      pending_remote<MediaPlayerRendererClientExtension> client_extension,
      pending_receiver<Renderer> renderer,
      pending_receiver<MediaPlayerRendererExtension> renderer_extension);

  [EnableIf=is_win]
  // Creates a MediaFoundationRenderer (MediaFoundationRendererClientFactory).
  // - |renderer_extension| is bound in MediaFoundationRenderer, and receives
  //   calls from MediaFoundationRendererClient.
  CreateMediaFoundationRenderer(
      pending_remote<MediaLog> media_log,
      pending_receiver<Renderer> renderer,
      pending_receiver<MediaFoundationRendererExtension> renderer_extension);

  [EnableIf=is_android]
  // Creates a FlingingRenderer (FlingingRendererClientFactory).
  // The |presentation_id| is used to find an already set-up RemotePlayback
  // session (see blink::RemotePlayback).
  CreateFlingingRenderer(
      string presentation_id,
      pending_remote<FlingingRendererClientExtension> client_extension,
      pending_receiver<Renderer> renderer);

  // Creates a CDM based on the |key_system| and |cdm_config| provided. A
  // |key_system| is a generic term for a decryption mechanism and/or content
  // protection provider. It should be a reverse domain name,
  // e.g. "com.example.somesystem". However, this call may be initiated by an
  // untrusted process (e.g. renderer), so the implementation must fully
  // validate |key_system| before creating the CDM. |cdm_config| specifies other
  // properties of the CDM which may influence creation. Upon failure, the
  // returned |cdm| and |cdm_context| will be null, and |error_message| will
  // specify the error reason. Upon success, |cdm| and |cdm_context| will be
  // valid, and |error_message| will be empty.
  CreateCdm(string key_system, CdmConfig cdm_config) =>
            (pending_remote<ContentDecryptionModule>? cdm,
             CdmContext? cdm_context,
             string error_message);
};
