| // Copyright 2014 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/demuxer_stream.mojom"; |
| import "media/mojo/mojom/media_types.mojom"; |
| import "mojo/public/mojom/base/time.mojom"; |
| import "mojo/public/mojom/base/unguessable_token.mojom"; |
| import "services/network/public/mojom/site_for_cookies.mojom"; |
| import "ui/gfx/geometry/mojom/geometry.mojom"; |
| import "url/mojom/url.mojom"; |
| import "url/mojom/origin.mojom"; |
| |
| // See media/base/media_url_params.h for descriptions. |
| struct MediaUrlParams { |
| url.mojom.Url media_url; |
| network.mojom.SiteForCookies site_for_cookies; |
| url.mojom.Origin top_frame_origin; |
| bool allow_credentials; |
| bool is_hls; |
| }; |
| |
| // A Mojo equivalent of media::Renderer. Used when audio and video decoding |
| // happens outside of the sandboxed render process. |
| // See media/mojo/README.md |
| interface Renderer { |
| // Initializes the Renderer with one or more audio / video `streams`, or a URL |
| // via `media_url_params`. Exactly one of `streams` and `media_urls_params` |
| // should be set. |
| // TODO(sandersd): These should be separate methods or a union type. |
| Initialize(pending_associated_remote<RendererClient> client, |
| array<pending_remote<DemuxerStream>>? streams, |
| MediaUrlParams? media_url_params) => (bool success); |
| |
| // Discards any buffered data, executing callback when completed. |
| // NOTE: If an error occurs, RendererClient::OnError() can be called |
| // before the callback is executed. |
| Flush() => (); |
| |
| // Starts rendering from `time`. |
| StartPlayingFrom(mojo_base.mojom.TimeDelta time); |
| |
| // Updates the current playback rate. The default playback rate should be 1. |
| SetPlaybackRate(double playback_rate); |
| |
| // Sets the output volume. The default volume should be 1. |
| SetVolume(float volume); |
| |
| // Attaches the CDM associated with `cdm_id` to the renderer service, |
| // executing the callback with whether the CDM was successfully attached. |
| SetCdm(mojo_base.mojom.UnguessableToken? cdm_id) => (bool success); |
| }; |
| |
| // A Mojo equivalent of media::RendererClient. See media/mojo/README.md |
| interface RendererClient { |
| // Called to report media time advancement by `time`. |
| // `time` and `max_time` can be used to interpolate time between |
| // calls to OnTimeUpdate(). |
| // `max_time` is typically the media timestamp of the last audio frame |
| // buffered by the audio hardware. |
| // `capture_time` is monotonic clock time at which the times were captured. |
| // `max_time` must be greater or equal to `time`. |
| OnTimeUpdate(mojo_base.mojom.TimeDelta time, |
| mojo_base.mojom.TimeDelta max_time, |
| mojo_base.mojom.TimeTicks capture_time); |
| |
| // Called to report buffering state changes, see media_types.mojom. |
| OnBufferingStateChange(BufferingState state, |
| BufferingStateChangeReason reason); |
| |
| // Executed when rendering has reached the end of stream. |
| OnEnded(); |
| |
| // Executed if any error was encountered during decode or rendering. If |
| // this error happens during an operation that has a completion callback, |
| // OnError() will be called before firing the completion callback. |
| OnError(Status status); |
| |
| // Executed whenever DemuxerStream status returns kConfigChange. Initial |
| // configs provided by OnMetadata. |
| OnAudioConfigChange(AudioDecoderConfig config); |
| OnVideoConfigChange(VideoDecoderConfig config); |
| |
| // Executed for the first video frame and whenever natural size changes. |
| OnVideoNaturalSizeChange(gfx.mojom.Size size); |
| |
| // Executed for the first video frame and whenever opacity changes. |
| OnVideoOpacityChange(bool opaque); |
| |
| // Called periodically to pass statistics to the web player. See |
| // media_types.mojom. |
| OnStatisticsUpdate(PipelineStatistics stats); |
| |
| // Called when the remote rendering service is waiting for `reason`, |
| // e.g. waiting for decryption key. |
| OnWaiting(WaitingReason reason); |
| }; |