blob: 5bea32e2c3c149d0cacd02a88997d1f00fe49b14 [file] [log] [blame]
// 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);
};