blob: 9672c1588182d8b79dd1fae5e8203d27baa229ca [file] [log] [blame]
// Copyright 2019 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/media_types.mojom";
import "mojo/public/mojom/base/time.mojom";
import "mojo/public/mojom/base/unguessable_token.mojom";
import "ui/gfx/geometry/mojom/geometry.mojom";
// Extension of the mojo::RendererClient communication layer for HLS and Android
// software rendering fallback paths.
// This allows the Browser side to call back into the Renderer side. Concretely,
// the MediaPlayerRenderer uses these methods to propagate events it raises to
// the MediaPlayerRendererClient, which lives in the Renderer process.
interface MediaPlayerRendererClientExtension {
// Called when the first time the metadata is updated, and whenever the
// metadata changes.
OnVideoSizeChange(gfx.mojom.Size size);
OnDurationChange(mojo_base.mojom.TimeDelta duration);
};
// Extension of the mojo::Renderer communication layer for HLS and Android
// software rendering fallback paths.
// This allows the Renderer side to call into the Browser side.
// Concretely, the MediaPlayerRendererClient uses these methods to send commands
// to MediaPlayerRenderer, which lives in the Browser process.
interface MediaPlayerRendererExtension {
// Registers a new request in the ScopedSurfaceRequestManager, and returns
// its token.
// Called once, during media::Renderer initialization, as part of
// StreamTexture's set-up.
InitiateScopedSurfaceRequest()
=> (mojo_base.mojom.UnguessableToken request_token);
};
// Extension of the mojo::RendererClient communication layer for media flinging,
// a.k.a RemotePlayback, when playing media on a remote Cast device.
// This allows the Browser side to call back into the Renderer side.
// Concretely, the FlingingRenderer uses these methods to propagate events it
// raises to the FlingingRendererClient, which lives in the Renderer process.
interface FlingingRendererClientExtension {
// Called when the play state of a casted device goes out of sync with WMPI's
// play state (e.g. when another phone play/pauses a cast device on the same
// network).
OnRemotePlayStateChange(MediaStatusState state);
};
[EnableIf=is_win]
// Extension of the mojo::Renderer communication layer for MediaFoundation-based
// Renderer.
// This allows the MediaFoundationRendererClient in the render process to call
// into the MediaFoundationRenderer in the MediaFoundationService (utility/LPAC)
// process.
// Please refer to media/renderers/win/media_foundation_renderer_extension.h
// for its C++ interface equivalence.
interface MediaFoundationRendererExtension {
// Enables Direct Composition video rendering and gets the token associated
// with the Direct Composition surface handle, which can be retrieved later
// in the GPU process using the token. Returns a null token on failures.
GetDCOMPSurface() => (mojo_base.mojom.UnguessableToken? token);
// Notifies whether video is enabled.
SetVideoStreamEnabled(bool enabled);
// Notifies of output composition parameters. It might fail if
// MediaFoundationRenderer runs into error while setting the `rect`
// information onto MFMediaEngine. It it fails, the video will be displayed
// incorrectly (e.g. a smaller video rendered at the corner of the video
// output area.). In case of failure, caller should not use the `rect` for
// further operations.
SetOutputRect(gfx.mojom.Rect rect) => (bool success);
};