blob: 180b90747fbc0210aff50c1719c038afed411918 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//TODO(36191): Move to fuchsia.media.audio
library fuchsia.media;
/// A state of audio usages in which no policy actions are taken on any streams with the usage.
table UsageStateUnadjusted {
};
/// A state of audio usages in which a policy decision has been made to temporarily
/// lower the volume of all streams with this usage.
table UsageStateDucked {
};
/// A state of audio usages in which a policy decision has been made to temporarily
/// mute the volume of all streams with this usage.
table UsageStateMuted {
};
/// The state of audio policy enforcement on a stream or set of streams.
flexible union UsageState {
1: UsageStateUnadjusted unadjusted;
2: UsageStateDucked ducked;
3: UsageStateMuted muted;
};
/// A protocol for listening to changes to the policy state of an audio usage.
///
/// User actions, such as lowering the volume or muting a stream, are not reflected in this
/// API.
protocol UsageWatcher {
/// Called on first connection and whenever the watched usage changes. The provided
/// usage will always be the bound usage; it is provided so that an implementation of
/// this protocol may be bound to more than one usage.
///
/// Clients must respond to acknowledge the event. Clients that do not acknowledge their
/// events will eventually be disconnected.
OnStateChanged(Usage usage, UsageState state) -> ();
};
/// A protocol for setting up watchers of audio usages.
[Discoverable]
protocol UsageReporter {
Watch(
Usage usage,
UsageWatcher usage_watcher);
};
/// A protocol for setting up watchers of usage gain.
[Discoverable]
protocol UsageGainReporter {
/// Connects a listener to a stream of usage gain setting changes
/// for `usage` on the device identified by `device_token`. Usage
/// Gain is not set directly by any client; it is a translation of
/// the usage volume setting for each device.
///
/// Devices may map the same volume level to different dbfs, so
/// a `device_unique_id` is needed to indentify the device.
///
/// `AudioDeviceEnumerator` provides programmatic access to devices
/// and their unique ids if it is necessary for a client to select
/// an id at runtime.
RegisterListener(
string:36 device_unique_id,
Usage usage,
UsageGainListener usage_gain_listener);
};
/// A protocol for watching changes to usage gain settings.
///
/// The channel will close when the device is not present.
protocol UsageGainListener {
/// Called immediately on connection and afterward any time
/// the usage gain setting changes.
///
/// Clients must respond to acknowledge the event. Clients that do not acknowledge their
/// events will eventually be disconnected.
OnGainMuteChanged(bool muted, float32 gain_dbfs) -> ();
};