// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// The <code>chrome.webrtcAudioPrivate</code> API allows enumeration
// of audio output (sink) devices.
//
// Note that device IDs as used in this API are opaque (i.e. they are
// not the hardware identifier of the device) and while they are
// unique and persistent across sessions, they are valid only to the
// extension calling this API (i.e. they cannot be shared between
// extensions).
//
// See http://goo.gl/8rOmgk for further documentation of this API.
namespace webrtcAudioPrivate {
dictionary SinkInfo {
// The opaque identifier of the audio sink device, which is unique
// and static for the extension calling the API but invalid for
// others.
DOMString sinkId;
// The user-friendly name (e.g. "Bose Amplifier").
DOMString sinkLabel;
// Current sample rate of the device, in Hz. Useful e.g. to know
// if the remote side should be asked to send a lower sampling
// rate.
long sampleRate;
// True if the device is ready to play out audio. E.g. if it is a
// device that takes an audio jack, whether a jack is plugged in.
//
// TODO(joi): Do unplugged devices even get included in enumeration?
boolean isReady;
// True if this device is the default audio sink device on the
// machine.
boolean isDefault;
};
callback GetSinksCallback = void(SinkInfo[] sinkInfo);
callback SinkIdCallback = void(DOMString sinkId);
interface Functions {
// Retrieves a list of available audio sink devices.
static void getSinks(GetSinksCallback callback);
// Given a security origin and an input device ID valid for that
// security origin, retrieve an audio sink ID valid for the
// extension, or the empty string if there is no associated audio
// sink.
//
// The associated sink ID can be used as a sink ID for
// setActiveSink. It is valid irrespective of which process you are
// setting the active sink for.
static void getAssociatedSink(
DOMString securityOrigin,
DOMString sourceIdInOrigin,
SinkIdCallback callback);
};
interface Events {
// Fired when audio sink devices are added or removed.
static void onSinksChanged();
};
};