| // Copyright 2018 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. |
| |
| library fuchsia.media; |
| |
| const uint32 AudioGainInfoFlag_Mute = 0x01; |
| const uint32 AudioGainInfoFlag_AgcSupported = 0x02; |
| const uint32 AudioGainInfoFlag_AgcEnabled = 0x04; |
| |
| struct AudioGainInfo { |
| float32 gain_db; |
| uint32 flags; |
| }; |
| |
| struct AudioDeviceInfo { |
| string name; |
| string unique_id; |
| uint64 token_id; |
| bool is_input; |
| |
| // TODO(mpuryear): Verify whether or not we want to leave this stuff in place |
| // or not. Technically it is not needed (all of these things could be |
| // queried), but it seems like useful information to send during device |
| // enumeration as it saves a user a round trip to the server and eliminates |
| // any need to have extra states in a user's state machine when trying to |
| // figure out the current state of a device during initial enumeration. |
| AudioGainInfo gain_info; |
| bool is_default; |
| }; |
| |
| const uint32 SetAudioGainFlag_GainValid = 0x01; |
| const uint32 SetAudioGainFlag_MuteValid = 0x02; |
| const uint32 SetAudioGainFlag_AgcValid = 0x04; |
| |
| [Discoverable] |
| interface AudioDeviceEnumerator { |
| // Obtain the list of currently active audio devices. |
| 100: GetDevices() -> (vector<AudioDeviceInfo> devices); |
| |
| // Events sent when devices are added or removed, or when properties of a |
| // device change. |
| // |
| // TODO(mpuryear): Should we have a set of filters which control which of these |
| // events a user receives? |
| // |
| // Pro: Having filters like this removes the need for the server to send |
| // messages to clients who don't care. In particular, it seems likely that a |
| // client who just called SetDeviceGain will not care about the |
| // OnDeviceGainChanged event being fired. |
| // |
| // Con: Having filters like this means that the server needs to maintain a bit |
| // more per-client state. |
| 110: -> OnDeviceAdded(AudioDeviceInfo device); |
| 111: -> OnDeviceRemoved(uint64 device_token); |
| 112: -> OnDeviceGainChanged(uint64 device_token, AudioGainInfo gain_info); |
| 113: -> OnDefaultDeviceChanged(uint64 old_default_token, |
| uint64 new_default_token); |
| |
| // Gain/Mute/AGC control |
| // |
| // Note that each of these operations requires a device_token in order to |
| // target the proper input/output. |
| // |
| // The Get command returns the device_token |
| // of the device whose gain is being reported, or ZX_KOID_INVALID in the case |
| // that the requested device_token was invalid or the device had been removed |
| // from the system before the Get command could be processed. |
| // |
| // Set commands which are given an invalid device token are ignored and have |
| // no effect on the system. In addition, users do not need to control all of |
| // the gain settings for an audio device with each call. Only the settings |
| // with a corresponding flag set in the set_flags parameter will be affected. |
| // For example, passing SetAudioGainFlag_MuteValid will cause a SetDeviceGain |
| // call to care only about the mute setting in the gain_info structure, while |
| // passing (SetAudioGainFlag_GainValid | SetAudioGainFlag_MuteValid) will |
| // cause both the mute and the gain status to be changed simultaneously. |
| 200: GetDeviceGain(uint64 device_token) |
| -> (uint64 device_token, AudioGainInfo gain_info); |
| 201: SetDeviceGain(uint64 device_token, |
| AudioGainInfo gain_info, |
| uint32 set_flags); |
| |
| // Default Device |
| // |
| // Fetch the device ID of the current default input or output device, or |
| // ZX_KOID_INVALID if no such device exists. |
| // |
| // TODO(mpuryear): solidify the concept of "default" device. Right now, it |
| // basically means the device which would be chosen as the destination of an |
| // AudioRenderer stream (or the source for an AudioCapturer stream), in the |
| // absence of... |
| // |
| // 1) Any manual routing configuration imposed by the user. |
| // 2) Any property based routing decision made by the audio service. |
| // |
| // Currently, this translates to "the default inputs/output will be the last |
| // plugged input/output". As the human level logic which drives the audio |
| // routing policy evolves and becomes more complicated, this will probably |
| // change. |
| 300: GetDefaultInputDevice() -> (uint64 device_token); |
| 301: GetDefaultOutputDevice() -> (uint64 device_token); |
| }; |