blob: 9683e762127361a933c08815b18596bb6ec886d6 [file] [log] [blame]
// Copyright 2016 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 "mojo/public/mojom/base/unguessable_token.mojom";
import "media/mojo/interfaces/audio_data_pipe.mojom";
import "media/mojo/interfaces/audio_parameters.mojom";
import "media/mojo/interfaces/media_types.mojom";
// An interface for controlling an audio output stream.
// To close the stream, just close the message pipe.
// The AudioOutputStream may expire due to other reasons than actual errors,
// such as user-initiated actions to close the stream. In this case, the
// connection is closed without calling OnError.
interface AudioOutputStream {
// Starts rendering audio.
// Stops rendering audio and sends a signal on the AudioDataPipe indicating
// this.
// Sets volume. Volume must be in the range [0, 1].
SetVolume(double volume);
// An AudioOutputStreamObserver gets notifications about events related to an
// AudioOutputStream. DidStartPlaying() is invoked when the stream starts
// playing and it is eventually followed by a DidStopPlaying() call. A stream
// may start playing again after being stopped.
// Note: It is possible that DidStopPlaying() is not called in shutdown
// situations.
interface AudioOutputStreamObserver {
// These values are persisted to logs. Entries should not be renumbered and
// numeric values should never be reused.
enum DisconnectReason {
// The Disconnect reason wasn't given explicitly. This probably means that
// the audio service crashed.
kDefault = 0,
// This code is used as disconnect reason when stream ended or failed to
// start due to an unrecoverable platform error, e.g. the hardware device is
// busy or disconnected.
kPlatformError = 1,
kTerminatedByClient = 2,
kStreamCreationFailed = 3,
kDocumentDestroyed = 4,
// This notification indicates that the stream started playing. The stream
// should be considered non-audible until a DidChangeAudibleState() call says
// otherwise.
// This notification indicates that the stream stopped playing. The stream
// should be considered no longer audible at this time; no further
// audible-state change notifications will be issued.
// This notification carries the latest value of the audible state of the
// stream. Multiple instances of this notification may occur after
// DidStartPlaying() and before DidStopPlaying().
DidChangeAudibleState(bool is_audible);
interface AudioOutputStreamProvider {
// Creates a new AudioOutputStream using |params|. |client| is notified when
// the stream is ready. The stream lifetime is bound by the lifetime of
// |client|. On error, the |client| will have a disconnect reason among the
// specified ones in AudioOutputStreamProviderClient. |processing_id|, if
// provided, identifies the group of input and output streams that are related
// during audio processing.
// Can only be called once.
Acquire(AudioParameters params, AudioOutputStreamProviderClient client,
mojo_base.mojom.UnguessableToken? processing_id);
interface AudioOutputStreamProviderClient {
// |stream| is used to pass commands to the stream, and |data_pipe| is used
// to transfer the audio data.
// TODO( Currently, this will be called at most
// once. In the future, it may be called several times.
Created(AudioOutputStream stream, ReadWriteAudioDataPipe data_pipe);