chromium/media/mojo/mojom/audio_input_stream.mojom

// Copyright 2017 The Chromium Authors
// 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_parameters.mojom";
import "media/mojo/mojom/media_types.mojom";

// An interface for controlling an audio input stream.
// On error, the message pipe is closed.
// To close the stream, just close the message pipe.
interface AudioInputStream {
  // Starts recording audio, can be called only once.
  Record();

  // Sets volume. Volume must be in the range [0, 1].
  SetVolume(double volume);
};

// An interface for receiving notifications of state changes of an
// AudioInputStream.
interface AudioInputStreamClient {
  OnError(InputStreamErrorCode code);
  OnMutedStateChanged(bool is_muted);
};

// An AudioInputStreamObserver gets notifications about events related to an
// AudioInputStream. DidStartRecording() is invoked when the stream starts
// recording. Stream destruction is notified through binding connection error.
interface AudioInputStreamObserver {
  // 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,
    kSystemPermissions = 5,
    kDeviceInUse = 6,
  };

  // It will be called only once when input stream starts recording.
  DidStartRecording();
};