blob: 0b1e61f23f17135b6a71eb7a4fec498cff2aa089 [file] [log] [blame]
// Copyright 2018 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_data_pipe.mojom";
import "media/mojo/mojom/audio_input_stream.mojom";
import "media/mojo/mojom/audio_logging.mojom";
import "media/mojo/mojom/audio_output_stream.mojom";
import "media/mojo/mojom/audio_parameters.mojom";
import "mojo/public/mojom/base/shared_memory.mojom";
import "mojo/public/mojom/base/unguessable_token.mojom";
// Mutes a group of AudioOutputStreams while at least one binding to an instance
// exists. Once the last binding is dropped, all streams in the group are
// un-muted.
interface LocalMuter {};
// This interface is exposed by the audio service to allow trusted clients
// (like the browser process) to create streams. Note that while the factory
// interface itself is only for trusted clients, the created streams and data
// pipes may be forwarded to untrusted clients.
//
// The client must keep the connection to the factory while streams are
// running.
interface AudioStreamFactory {
// Creates an AudioInputStream and returns the AudioDataPipe it writes data to
// and a bool indicating whether the stream is initially muted. |data_pipe| is
// null, |initially_muted| is false and |stream_id| is empty in case stream
// creation failed.
// |device_id| is either the |unique_id| field from an AudioDeviceDescription
// obtained from the audio.mojom.SystemInfo interface, or "default".
// |shared_memory_count| indicates how many buffer segments can the input
// stream client read at once, to avoid data overwriting. |enable_agc| is used
// for enabling automatic gain control. |key_press_count_buffer| is an
// optional readonly shared memory handle for reading the current key press
// count, updated by browser process in media::UserInputMonitor
// implementation.
CreateInputStream(
pending_receiver<media.mojom.AudioInputStream> stream,
pending_remote<media.mojom.AudioInputStreamClient> client,
pending_remote<media.mojom.AudioInputStreamObserver>? observer,
pending_remote<media.mojom.AudioLog>? log,
string device_id, media.mojom.AudioParameters params,
uint32 shared_memory_count, bool enable_agc,
mojo_base.mojom.ReadOnlySharedMemoryRegion? key_press_count_buffer)
=> (media.mojom.ReadOnlyAudioDataPipe? data_pipe, bool initially_muted,
mojo_base.mojom.UnguessableToken? stream_id);
// Associates an output device with an input stream, so that the input knows
// which output device to cancel echo from. |input_stream_id| is the id
// returned when the stream was created. |output_device_id| is a raw device
// id. In case either of the parameters are invalid, the operation will
// silently fail.
AssociateInputAndOutputForAec(
mojo_base.mojom.UnguessableToken input_stream_id,
string output_device_id);
// Creates an AudioOutputStream and returns the AudioDataPipe it reads data
// from. |data_pipe| is null in case stream creation failed. |device_id| is
// either the |unique_id| field from an AudioDeviceDescription obtained from
// the audio.mojom.SystemInfo interface, or "default". The stream |group_id|
// is used for muting streams or capturing them for loopback.
CreateOutputStream(
pending_receiver<media.mojom.AudioOutputStream> stream,
pending_associated_remote<media.mojom.AudioOutputStreamObserver>? observer,
pending_remote<media.mojom.AudioLog>? log,
string device_id, media.mojom.AudioParameters params,
mojo_base.mojom.UnguessableToken group_id)
=> (media.mojom.ReadWriteAudioDataPipe? data_pipe);
// Binds the request to the LocalMuter associated with the given |group_id|.
// While one or more bindings to a group's LocalMuter exists, all local audio
// playout for the streams in that group is muted.
//
// It is the responsibility of the client to bind to a muter before creating
// any output streams that should be started muted. Likewise, if existing
// output streams must remain muted until they are shut down, the binding to
// the muter must not be closed until after all other streams' binding. (This
// is the reason for the associated request argument.)
BindMuter(pending_associated_receiver<LocalMuter> receiver,
mojo_base.mojom.UnguessableToken group_id);
// Creates an AudioInputStream that provides the result of looping-back and
// mixing-together all current and future AudioOutputStreams tagged with the
// given |group_id|. The loopback re-mixes audio, if necessary, so that the
// resulting data stream format matches the specified |params|. All other args
// and the result are as described in CreateInputStream() above, except for
// |stream_id|. Loopback streams have no ID, since they cannot be used in
// echo cancellation.
CreateLoopbackStream(
pending_receiver<media.mojom.AudioInputStream> receiver,
pending_remote<media.mojom.AudioInputStreamClient> client,
pending_remote<media.mojom.AudioInputStreamObserver> observer,
media.mojom.AudioParameters params,
uint32 shared_memory_count,
mojo_base.mojom.UnguessableToken group_id)
=> (media.mojom.ReadOnlyAudioDataPipe? data_pipe);
};