// 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();
};
