fuchsia.hardware.audio.signalprocessing

Added: 7

PROTOCOLS

Connector

Defined in fuchsia.hardware.audio.signalprocessing/connector.fidl

For an overview of the signal processing protocols see Audio Signal Processing

SignalProcessingConnect

Connect to a SignalProcessing protocol. Multiple connections may be supported, if a new connection request is not supported, i.e. the maximum number of connections have already been created, for instance one, then the protocol channel (not the channel upon which SignalProcessingConnect is being called) will be closed with a ZX_ERR_ALREADY_BOUND epitaph. If signal processing is not supported at all, then the protocol channel (again, not the channel upon which SignalProcessingConnect is being called) will be closed with a ZX_ERR_NOT_SUPPORTED epitaph. This method is named SignalProcessingConnect instead of Connect because this protocol is intended to be composed, and hence the more verbose name allows differentiation and improved clarity.

Request

NameType
protocol server_end:SignalProcessing

Reader

Defined in fuchsia.hardware.audio.signalprocessing/signal_processing.fidl

This protocol is required for Composite audio drivers, and unsupported for other audio driver types (Codec, Dai, StreamConfig).

For an overview see [Signal Processing Interface].

GetElements

Returns a vector of supported processing elements. This vector must include one or more processing elements.

Request

<EMPTY>

Response

NameType
payload Reader_GetElements_Result

GetTopologies

Returns a vector of supported topologies. This vector must include one or more topologies. If more than one topology is returned, then the client may select any topology from the list by calling SetTopology. If only one topology is returned, SetTopology can still be called but causes no change.

Each Element must be included in at least one Topology, but need not be included in every Topology.

Request

<EMPTY>

Response

NameType
payload Reader_GetTopologies_Result

WatchElementState

Get the processing element state via a hanging get. For a given processing_element_id, the driver will immediately reply to the first WatchElementState sent by the client. The driver will not respond to subsequent client WatchElementState calls for that processing_element_id until any portion of the ElementState has changed from what was most recently reported for that element.

The driver will close the protocol channel with an error of ZX_ERR_INVALID_ARGS, if processing_element_id does not match an ElementId returned by GetElements.

The driver will close the protocol channel with an error of ZX_ERR_BAD_STATE, if this method is called again while there is already a pending WatchElementState for this client and processing_element_id.

Request

NameType
processing_element_id ElementId

Response

NameType
state ElementState

WatchTopology

Get the current topology via a hanging get. The driver will immediately reply to the first WatchTopology sent by each client. The driver will not respond to subsequent WatchTopology calls from that client until the signal processing topology changes; this occurs as a result of a SetTopology call.

The driver will close the protocol channel with an error of ZX_ERR_BAD_STATE, if this method is called again while there is already a pending WatchTopology for this client.

Added: 27

Request

<EMPTY>

Response

NameType
payload Reader_WatchTopology_Result

SignalProcessing

Defined in fuchsia.hardware.audio.signalprocessing/signal_processing.fidl

This protocol is required for Composite audio drivers, and unsupported for other audio driver types (Codec, Dai, StreamConfig).

For an overview see [Signal Processing Interface].

GetElements

Returns a vector of supported processing elements. This vector must include one or more processing elements.

Request

<EMPTY>

Response

NameType
payload Reader_GetElements_Result

GetTopologies

Returns a vector of supported topologies. This vector must include one or more topologies. If more than one topology is returned, then the client may select any topology from the list by calling SetTopology. If only one topology is returned, SetTopology can still be called but causes no change.

Each Element must be included in at least one Topology, but need not be included in every Topology.

Request

<EMPTY>

Response

NameType
payload Reader_GetTopologies_Result

SetElementState

Controls the processing element specified by processing_element_id, a unique ElementId returned by GetElements. The state specified in calls to SetElementState is a SettableElementState. This is a subset of ElementState because some fields returned by WatchElementState (e.g. latency or plug_state) can only be observed (not set) by the client.

Returns ZX_ERR_INVALID_ARGS if processing_element_id does not match a known ElementId returned by GetElements, or if state is not valid for the element. This entails any violation of the rules specified in this protocol.

Examples: state specifies that an element should be stopped or bypassed, but the corresponding element does not specify (or explicitly set to false) can_stop or can_bypass. state includes a type_specific entry, but that SettableTypeSpecificElementState does not match the ElementType of the element corresponding to processing_element_id. state changes an EqualizerBandState for an EQUALIZER element (so far so good), but specifies a change to frequency when this element did not set CAN_CONTROL_FREQUENCY in its supported_controls. state specifies a GainElementState for a GAIN element with a gain value that is -infinity, NAN, or outside the Element's stated min_gain, max_gain range.

Callers may intersperse method calls to the SignalProcessing protocol with calls to other driver protocols. Some non-SignalProcessing configuration changes may require a renegotiation of the driver state before certain elements can receive a SetElementState. For example, if a DaiFormat is changed, then SetElementState changing an AGL element's parameters may not require renegotiation of driver state because changing gain parameters usually does not change the set of supported audio formats. By contrast, following the same DaiFormat change, before SetElementState can be called on a CONNECTION_POINT element, the driver state may need to be reestablished because the format change may invalidate the set of supported formats returned in a previous GetDaiFormats protocol call for another part of the Topology.

It is the driver's job to determine when renegotiation is required. When this is needed, the related SetElementState call must return ZX_ERR_BAD_STATE and the client must close the protocol channel entirely, such that the protocol negotiations are started over. The client then must re-invoke the SetElementState call that returned ZX_ERR_BAD_STATE before any non-SignalProcessing protocol calls.

Request

NameType
processing_element_id ElementId
state SettableElementState

Response

NameType
payload SignalProcessing_SetElementState_Result

SetTopology

Sets the currently active topology by specifying a topology_id, which matches to an entry in the vector returned by GetTopologies. The currently active topology is communicated by WatchTopology responses. To change which topology is active, a client uses SetTopology.

If GetTopologies returns only one Topology, SetTopology is optional and has no effect.

This call will fail and return ZX_ERR_INVALID_ARGS if the specified topology_id is not found within thetopologies returned by GetTopologies.

SetTopology may be called before or after non-SignalProcessing protocol calls. If called after non-SignalProcessing protocol calls, then SetTopology may return ZX_ERR_BAD_STATE to indicate that the operation can not proceed without renegotiation of the driver state. See SetElementState for further discussion.

Request

NameType
topology_id TopologyId

Response

NameType
payload SignalProcessing_SetTopology_Result

WatchElementState

Get the processing element state via a hanging get. For a given processing_element_id, the driver will immediately reply to the first WatchElementState sent by the client. The driver will not respond to subsequent client WatchElementState calls for that processing_element_id until any portion of the ElementState has changed from what was most recently reported for that element.

The driver will close the protocol channel with an error of ZX_ERR_INVALID_ARGS, if processing_element_id does not match an ElementId returned by GetElements.

The driver will close the protocol channel with an error of ZX_ERR_BAD_STATE, if this method is called again while there is already a pending WatchElementState for this client and processing_element_id.

Request

NameType
processing_element_id ElementId

Response

NameType
state ElementState

WatchTopology

Get the current topology via a hanging get. The driver will immediately reply to the first WatchTopology sent by each client. The driver will not respond to subsequent WatchTopology calls from that client until the signal processing topology changes; this occurs as a result of a SetTopology call.

The driver will close the protocol channel with an error of ZX_ERR_BAD_STATE, if this method is called again while there is already a pending WatchTopology for this client.

Added: 27

Request

<EMPTY>

Response

NameType
payload Reader_WatchTopology_Result

STRUCTS

EdgePair

Defined in fuchsia.hardware.audio.signalprocessing/signal_processing.fidl

Edge pairs between processing elements, used to specify how audio flows sequentially through a collection of processing elements arrangements.

FieldTypeDescriptionDefault
processing_element_id_from ElementId No default
processing_element_id_to ElementId No default

Reader_GetElements_Response

Defined in fuchsia.hardware.audio.signalprocessing/signal_processing.fidl

FieldTypeDescriptionDefault
processing_elements vector<Element>:64 No default

Reader_GetTopologies_Response

Defined in fuchsia.hardware.audio.signalprocessing/signal_processing.fidl

FieldTypeDescriptionDefault
topologies vector<Topology>:64 No default

Reader_WatchTopology_Response

Defined in fuchsia.hardware.audio.signalprocessing/signal_processing.fidl

FieldTypeDescriptionDefault
topology_id TopologyId No default

SignalProcessing_SetElementState_Response

Defined in fuchsia.hardware.audio.signalprocessing/signal_processing.fidl

<EMPTY>

SignalProcessing_SetTopology_Response

Defined in fuchsia.hardware.audio.signalprocessing/signal_processing.fidl

<EMPTY>

ENUMS

ElementType flexible

Type: uint32

Defined in fuchsia.hardware.audio.signalprocessing/signal_processing.fidl

NameValueDescription
1

Vendor Specific. A type of processing element not covered by any subsequent type definition.

3

Controls pipelines channel mixing and routing.

4

Gain control, a.k.a. Volume control.

5

Automatic Gain Control. Automatically maintains a suitable signal level regardless of variation of its input.

6

Automatic Gain Limiter. Automatically maintains a signal level below a level specified. Input below the level is unaffected, and peaks above the level are attenuated.

7

Alters the dynamic range of the signal, e.g. dynamic range compression.

8

Mute.

9

Delay.

10

Equalizer.

11

Sample Rate Conversion.

12

The start/end of a pipeline.

Deprecation

Use RING_BUFFER or DAI_INTERCONNECT instead.

Removed: 20
13

Ring Buffer. This is the first of two types of elements that can start/end processing pipelines.

Added: 20
14

Digital Audio Interface Interconnect. This is the second of two types of elements that can start/end processing pipelines.

Added: 20

EndpointType flexible

Type: uint8

Defined in fuchsia.hardware.audio.signalprocessing/dai_interconnect.fidl

Endpoint types.

Deprecation

Use ElementType RING_BUFFER or DAI_INTERCONNECT instead.

Removed: 20

NameValueDescription
1

The endpoint represents a ring buffer. A ring buffer processing element's id allows for multi-ring buffer topologies to be supported by a driver providing the fuchsia.hardware.audio/Composite API.

2

The endpoint represents a Digital Audio Interface Interconnect, e.g. connecting an SoC audio subsystem to a DAC + amplifier hardware codec.

EqualizerBandType flexible

Type: uint64

Defined in fuchsia.hardware.audio.signalprocessing/equalizer.fidl

Type of the equalizer band.

NameValueDescription
1

Increase/decrease in gain_db in the vicinity of a frequency with an optional q.

2

Narrow band rejection significantly attenuating a frequency with an optional q.

3

Decrease gain below a frequency with an optional q, a.k.a high pass.

4

Decrease gain above a frequency with an optional q, a.k.a low pass.

5

Decrease gain below a frequency for a gain_db amount with a plateau effect.

6

Decrease gain above a frequency for a gain_db amount with a plateau effect.

GainDomain flexible

Type: uint8

Defined in fuchsia.hardware.audio.signalprocessing/gain.fidl

Hardware domain of the gain, e.g. ANALOG.

NameValueDescription
1

The processing element gain is applied in the digital domain.

2

The processing element gain is applied in the analog domain.

3

The processing element gain is mixed using digital and analog hardware.

GainType strict

Type: uint8

Defined in fuchsia.hardware.audio.signalprocessing/gain.fidl

Gain type of representation.

NameValueDescription
1

Gain specified in dB, for example -103.0dB or +3.2dB.

2

Gain specified as a percentage, for example 10.0% or 80.5%.

LevelType strict

Type: uint8

Defined in fuchsia.hardware.audio.signalprocessing/dynamics.fidl

Level type.

NameValueDescription
1

Level Gain specified as peak.

2

Level specified as RMS.

PlugDetectCapabilities flexible

Type: uint32

Defined in fuchsia.hardware.audio.signalprocessing/dai_interconnect.fidl

Plug detection capabilities for the interconnect.

NameValueDescription
0

Interconnect is hardwired (will always be plugged in).

1

Interconnect can be unplugged/plugged and can asynchronously notify of plug state changes.

ThresholdType strict

Type: uint8

Defined in fuchsia.hardware.audio.signalprocessing/dynamics.fidl

Threshold type.

NameValueDescription
1

Apply dynamics processing above the threshold.

2

Apply dynamics processing below the threshold.

TABLES

DaiInterconnect

Defined in fuchsia.hardware.audio.signalprocessing/dai_interconnect.fidl

Parameters for an Element with ElementType DAI_INTERCONNECT.

Added: 20

OrdinalFieldTypeDescription
plug_detect_capabilities PlugDetectCapabilities

Plug Detect Capabilities.

Required.

DaiInterconnectElementState

Defined in fuchsia.hardware.audio.signalprocessing/dai_interconnect.fidl

State for an Element with ElementType DAI_INTERCONNECT.

Added: 20

OrdinalFieldTypeDescription
plug_state PlugState

The plug state for this DAI interconnect.

Required.

external_delay zx/Duration

The driver's best estimate of the external delay beyond this DAI endpoint, as the pipeline is currently configured.

external_delay must be taken into account by the client when determining the requirements for minimum lead time (during playback) and minimum capture delay (during capture).

If not included, external_delay is unknown; the client may treat it however it chooses (e.g. consider it zero or some other duration, autodetect it, etc).

Optional. If specified, must be non-negative.

Dynamics

Defined in fuchsia.hardware.audio.signalprocessing/dynamics.fidl

Parameters for an Element with type equal to DYNAMICS.

OrdinalFieldTypeDescription
bands vector<DynamicsBand>:64

Dynamics elements in this protocol may support multiple bands. Each band specifies a number of parameters in DynamicsElementState that can be changed with SetElementState. The number of elements in the bands vector determines the number of bands supported by this processing element.

Required. Must contain at least one entry.

supported_controls DynamicsSupportedControls

The controls supported by this processing element (i.e. that can be changed by a call to SetElementState).

Optional.

DynamicsBand

Defined in fuchsia.hardware.audio.signalprocessing/dynamics.fidl

Parameters for a Dynamics element band.

OrdinalFieldTypeDescription
id uint64

Unique ID for this band, only required to be unique within the corresponding Element, and valid until the channel associated with the SignalProcessing protocol is closed.

Required.

DynamicsBandState

Defined in fuchsia.hardware.audio.signalprocessing/dynamics.fidl

State for a single band within an Element with type equal to DYNAMICS. WatchElementState may return control band fields, even if the values cannot be changed by the client (i.e. the bits are not set in supported_controls).

OrdinalFieldTypeDescription
id uint64

Unique ID for the band. Must match one of the ids specified in Dynamics bands.

min_frequency uint32

Minimum frequency for the band in Hz. This field could be 0, for instance for single band dynamics processing to specify (together with max_frequency) that the band is full range.

max_frequency uint32

Maximum frequency for the band in Hz. This field could be the Nyquist frequency, for instance for single band dynamics processing to specify (together with min_frequency) that the band is full range.

Required.

threshold_db float32

The value beyond which the dynamics main processing starts (subject to the knee_width_db), in input dB. Some signal processing like input_gain and output_gain are not affected by this value.

Required. Must be finite.

threshold_type ThresholdType

Dynamics processing is applied ABOVE or BELOW the threshold.

Required for WatchElementState. Disallowed in SetElementState if DynamicsSupportedControls.THRESHOLD_TYPE is not set in supported_controls.

ratio float32

The input-to-output dB ratio above or below (see threshold_type) the knee region.

Required. Must be finite.

knee_width_db float32

The width of the knee region, in input dB. If present, cannot be negative. If not included, the width of the knee region is unspecified. A value of zero is a "hard" knee; larger values lead to "softer" knees. This knee is centered on threshold_db.

Optional. If specified, must be finite. Disallowed in SetElementState if DynamicsSupportedControls.KNEE_WIDTH is not set in supported_controls.

attack zx/Duration

Attack time. If not included, the attack time is unspecified.

Optional. If specified, must be non-negative. Disallowed in SetElementState if DynamicsSupportedControls.ATTACK is not set in supported_controls.

release zx/Duration

Release time. If not included, the release time is unspecified.

Optional. If specified, must be non-negative. Disallowed in SetElementState if DynamicsSupportedControls.RELEASE is not set in supported_controls.

output_gain_db float32

Output (a.k.a. make up or post) gain value in dB. If not included, the output gain is unspecified.

Optional. If specified, must be finite. Disallowed in SetElementState if DynamicsSupportedControls.OUTPUT_GAIN is not set in supported_controls.

input_gain_db float32

Input (a.k.a. pre) gain value in dB. If not included, the input gain is unspecified.

Optional. If specified, must be finite. Disallowed in SetElementState if DynamicsSupportedControls.INPUT_GAIN is not set in supported_controls.

level_type LevelType

Level type (peak or RMS). If not included, the level type is unspecified.

Optional. Disallowed in SetElementState if DynamicsSupportedControls.LEVEL_TYPE is not set in supported_controls.

lookahead zx/Duration

Look-ahead time. If not included, the look-ahead time is unspecified.

Optional. If specified, must be non-negative. Disallowed in SetElementState if DynamicsSupportedControls.LOOKAHEAD is not set in supported_controls.

linked_channels bool

Linked channels (a.k.a. Stereo linked for 2-channel systems). If not included, the linked channels option is unspecified. If true, the dynamics response is applied to all channels. If false, each channel has its own dynamics response.

Optional. Disallowed in SetElementState if DynamicsSupportedControls.LINKED_CHANNELS is not set in supported_controls.

DynamicsElementState

Defined in fuchsia.hardware.audio.signalprocessing/dynamics.fidl

State for an Element with type equal to DYNAMICS.

OrdinalFieldTypeDescription
band_states vector<DynamicsBandState>:64

Each id must match an id from Dynamics.bands and ids cannot be repeated. band_states must have at least one element. The bands controlled by band_states are determined by each band.id.

Required. Must contain at least one entry.

Element

Defined in fuchsia.hardware.audio.signalprocessing/signal_processing.fidl

OrdinalFieldTypeDescription
id ElementId

Unique ID for this element. The scope of this id is only within the SignalProcessing protocol lifespan, i.e. until the channel associated with the protocol is closed.

Required.

type ElementType

Processing element type.

Required.

type_specific TypeSpecificElement

Type-specific parameters for the processing element.

Required for ElementTypes DAI_INTERCONNECT, DYNAMICS, EQUALIZER, GAIN, VENDOR_SPECIFIC. Invalid if specified for elements of type AUTOMATIC_GAIN_CONTROL, AUTOMATIC_GAIN_LIMITER, CONNECTION_POINT, DELAY, MUTE, RING_BUFFER or SAMPLE_RATE_CONVERSION.

can_disable bool

Can the processing element be disabled via SetElementState.

Deprecation

Use can_bypass instead.

Removed: 20
description string:256

If included, a textual description of the processing element.

Optional. If present, must not be empty.

can_stop bool

If true, the processing element can be stopped via SetElementState. If not included or false, the processing element is always started.

Optional.

Added: 20
can_bypass bool

If true, the processing element can be bypassed via SetElementState. If not included or false, the processing element cannot be bypassed.

Optional.

Added: 20

ElementState

Defined in fuchsia.hardware.audio.signalprocessing/signal_processing.fidl

The current state of an element, as returned from the driver. Note that this table contains fields that are not present in SettableElementState, since they cannot be changed by clients.

OrdinalFieldTypeDescription
type_specific TypeSpecificElementState

Type-specific state parameters for the processing element.

If this processing element is disabled and its type-specific state is provided, then the type-specific state is only informational (e.g. the state of a stopped element, if it were to be re-started without also providing additional superceding state information).

Required for DAI_INTERCONNECT, DYNAMICS, EQUALIZER, GAIN and VENDOR_SPECIFIC elements. Invalid if specified for elements of type AUTOMATIC_GAIN_CONTROL, AUTOMATIC_GAIN_LIMITER, CONNECTION_POINT, DELAY, MUTE, RING_BUFFER or SAMPLE_RATE_CONVERSION.

enabled bool

Enable/disable state for the processing element.

Deprecation

Use bypassed instead.

Removed: 20
latency Latency

How much latency this element adds, if enabled.

Deprecation

Use processing_delay instead.

Removed: 20
vendor_specific_data vector<uint8>:4096

If included, an opaque object of octets for conveying vendor-specific information from the driver to SignalProcessing clients.

Optional (permitted even if the element's type is not VENDOR_SPECIFIC).

Added: 27
started bool

The start/stop state for this processing element. If true, the hardware associated with the element is started. If false, it is stopped.

If the corresponding Element omitted can_stop or set it to false, then this field can never be false.

A stopped processing element does not provide its abstracted functionality. No audio data flows through stopped elements.

Required.

Added: 20
bypassed bool

The bypass state for this processing element. If true, the hardware associated with the element is bypassed. If false or missing, the associated hardware is not bypassed.

By default, processing elements are not bypassed. If the corresponding Element omitted can_bypass or set it to false, then this field can never be set to true.

A bypassed element does not affect the flow of audio through the topology. Audio flows through a bypassed element, unchanged.

Optional.

Added: 20
turn_on_delay zx/Duration

If included, the driver's best estimate of the amount of time it takes the element's hardware to enter a fully operational mode after started has changed from false to true. Hardware may require some duration to reach a fully operational mode after changing its power state, for example.

If turn_on_delay is not taken into account, then an audio stream's initial frames might be lost while audio elements are powering up. If not included, turn_on_delay is unknown.

Optional. If specified, must be non-negative.

Added: 20
turn_off_delay zx/Duration

If included, the driver's best estimate of the amount of time it takes the element's hardware to enter a fully disabled mode after started has changed from true to false. Hardware may require some duration to get into a fully stopped state after a change in power state, for example.

If turn_off_delay is not taken into account, more frames will be emitted/captured than a client might expect, while audio elements are powering down. If not included, turn_off_delay is unknown.

Optional. If specified, must be non-negative.

Added: 20
processing_delay zx/Duration

If included, the driver's best estimate of the delay added by this processing element, as it is currently configured (including bypassed state).

This value should be taken into account by timing-sensitive clients, when determining the requirements for (playback) minimum lead time and minimum capture delay.

For an element of type RING_BUFFER, this delay should not include the inherent delay added by the temporary buffering needed to copy data in and out of a ring buffer, which is contained in the RingBufferProperties field driver_transfer_bytes.

Optional. If specified, must be non-negative.

Added: 20

Endpoint

Defined in fuchsia.hardware.audio.signalprocessing/dai_interconnect.fidl

Parameters for an Element with type equal to ENDPOINT.

Deprecation

Use DaiInterconnect and ElementType DAI_INTERCONNECT instead.

Removed: 20

OrdinalFieldTypeDescription
type EndpointType

Specifies what the endpoint represents.

Required.

plug_detect_capabilities PlugDetectCapabilities

Plug Detect Capabilities. Required.

EndpointElementState

Defined in fuchsia.hardware.audio.signalprocessing/dai_interconnect.fidl

State for an Element with type equal to ENDPOINT.

Deprecation

Use DaiInterconnectElementState and ElementType DAI_INTERCONNECT instead.

Removed: 20

OrdinalFieldTypeDescription
plug_state PlugState

If included the plug detect state for this endpoint.

Required for servers.

Equalizer

Defined in fuchsia.hardware.audio.signalprocessing/equalizer.fidl

Parameters for a Element with type equal to EQUALIZER.

OrdinalFieldTypeDescription
bands vector<EqualizerBand>:64

Equalizers in this protocol are built by a number of bands, each specifying a number of parameters here and in EqualizerElementState that can be changed with SetElementState. The number of elements of the bands vector determines the number of bands supported by this processing element.

Required. Must contain at least one entry.

supported_controls EqualizerSupportedControls

The controls supported by this equalizer (i.e. that can be changed via SetElementState).

Optional.

can_disable_bands bool

If included and true, individual bands can be disabled via SetElementState. If not included or false, bands are always enabled. For EQ bands to be functional, the enclosing equalizer processing element must also be started and not bypassed.

Optional.

min_frequency uint32

Minimum frequency for all bands, in Hz.

Required.

max_frequency uint32

Maximum frequency for all bands, in Hz.

Required.

max_q float32

Maximum quality factor, usually denoted by "Q", for all bands. This indicates how narrow the frequency transition is. Higher Q values imply narrower notches/peaks and steeper cuts/shelves. Must be positive.

Optional. If specified, must be finite.

min_gain_db float32

Minimum gain in dB.

Required, if supported_controls is present and includes SUPPORTS_TYPE_PEAK, SUPPORTS_TYPE_LOW_SHELF or SUPPORTS_TYPE_HIGH_SHELF. Must be finite. Disallowed, otherwise.

max_gain_db float32

Maximum gain in dB.

Required, if supported_controls is present and includes SUPPORTS_TYPE_PEAK, SUPPORTS_TYPE_LOW_SHELF or SUPPORTS_TYPE_HIGH_SHELF. Must be finite. Disallowed, otherwise.

EqualizerBand

Defined in fuchsia.hardware.audio.signalprocessing/equalizer.fidl

Parameters for an equalizer Band.

OrdinalFieldTypeDescription
id uint64

Unique ID for this band. Must only be unique within the corresponding Element. Only valid until the channel associated with the SignalProcessing protocol is closed.

Required.

EqualizerBandState

Defined in fuchsia.hardware.audio.signalprocessing/equalizer.fidl

State for a single band within a Element with type equal to EQUALIZER.

OrdinalFieldTypeDescription
id uint64

Unique ID for the band. Must match one of the ids specified in Equalizer bands.

Required.

type EqualizerBandType

Type of band.

Required. If this is a call to SetElementState, then the corresponding SUPPORTS_TYPE_... EqualizerSupportedControls bit for type must be set in Element.supported_controls.

frequency uint32

Center frequency for the band.

Required. If this is a call to SetElementState and represents a change in this band's frequency, then CAN_CONTROL_FREQUENCY must be set in Element.supported_controls.

q float32

Quality factor, usually denoted as "Q". Indicates how narrow the frequency transition is. Higher Q values imply narrower notches/peaks and steeper cuts/shelves. Must be positive.

Optional. If used in SetElementState and represents a change in this band's q, then CAN_CONTROL_Q must be set in Element.supported_controls. Must be finite.

gain_db float32

Gain in dB.

Required, for EqualizerBandType of PEAK, LOW_SHELF and HIGH_SHELF. Must be finite. Disallowed, for EqualizerBandType of NOTCH, LOW_CUT and HIGH_CUT.

enabled bool

Enable/disable the band. If disabled, audio still flows through the equalizer but this band has no effect.

If absent in the return value from WatchElementState, the band is enabled. If omitted in a SetElementState call, the band's enable/disable state is unchanged.

Bypassing the entire enclosing processing element (by setting ElementState.bypassed to true) does not change this field's value, although for an equalizer band to be functional, its enclosing equalizer processing element must be both started and not bypassed.

Optional.

EqualizerElementState

Defined in fuchsia.hardware.audio.signalprocessing/equalizer.fidl

State for a Element with type equal to EQUALIZER.

OrdinalFieldTypeDescription
bands_state vector<EqualizerBandState>:64

The states of the bands in this equalizer processing element.

Deprecation

Use band_states instead.

Removed: 20
band_states vector<EqualizerBandState>:64

The states of the bands in this equalizer processing element.

The number of elements of the band_states vector must be equal or smaller than the number of elements of the bands returned in returned in the corresponding Equalizer. band_states must have at least one element. The bands controlled by band_states are determined by each band.id.

Required. Must contain at least one entry.

Added: 20

Gain

Defined in fuchsia.hardware.audio.signalprocessing/gain.fidl

Parameters for an Element with type equal to GAIN.

OrdinalFieldTypeDescription
type GainType

Specifies what the numbers for gain represent, e.g. a percentage.

Required.

domain GainDomain

If included, the gain is applied in the specified GainDomain. If not included, the gain domain is unspecified.

Optional.

min_gain float32

Minimum gain in GainType format.

Required. Must be finite.

max_gain float32

Maximum gain in GainType format.

Required. Must be finite.

min_gain_step float32

Minimum gain step in GainType format, this value must not be negative, but may be zero to convey an effectively continuous range of values. Must not exceed max_gain - min_gain. The actual gain set may be queried by the client with a WatchElementState call.

Required. Must be finite.

GainElementState

Defined in fuchsia.hardware.audio.signalprocessing/gain.fidl

State for an Element with type equal to GAIN.

OrdinalFieldTypeDescription
gain float32

Current gain in GainType format.

Required. Must be finite.

PlugState

Defined in fuchsia.hardware.audio.signalprocessing/dai_interconnect.fidl

Plug state for the interconnect. If the driver reports a plug_detect_capabilities equal to HARDWIRED, then the driver should respond to WatchElementState only the first time it is called for a given interconnect, with plugged set to true and plug_state_time set to time '0'.

OrdinalFieldTypeDescription
plugged bool

Indicates whether the interconnect is currently plugged in.

Required

plug_state_time zx/Time

Indicates when the current plugged state was set, using ZX_CLOCK_MONOTONIC. Cannot be negative.

Required.

SettableElementState

Defined in fuchsia.hardware.audio.signalprocessing/signal_processing.fidl

Processing element state that can be set by clients.

Added: 20

OrdinalFieldTypeDescription
type_specific SettableTypeSpecificElementState

Type-specific element-state parameters that can be set by clients.

If an element is disabled, changes in this field (and all others in SettableElementState) are purely informational and take no effect until the element is enabled.

If not set, then the element's previous type_specific state is preserved.

Optional for DYNAMICS, EQUALIZER, GAIN and VENDOR_SPECIFIC types. Invalid if specified for AUTOMATIC_GAIN_CONTROL, AUTOMATIC_GAIN_LIMITER, CONNECTION_POINT, DAI_INTERCONNECT, DELAY, MUTE, RING_BUFFER or SAMPLE_RATE_CONVERSION elements.

vendor_specific_data vector<uint8>:4096

If included, an opaque object of octets for conveying vendor-specific information from a client to the audio driver. This can be used with any element type, not just VENDOR_SPECIFIC elements.

Optional.

Added: 27
started bool

Whether to start or stop this processing element. A stopped processing element does not provide its abstracted functionality. Specifically, no audio data flows through a stopped element.

If the corresponding Element returned can_stop equals to false, then this field must not be set to false -- SetElementState will return ZX_ERR_INVALID_ARGS in that case. If not set, then the element's previous started state will be unchanged.

Optional.

bypassed bool

Whether to bypass this processing element. A bypassed element does not affect the flow of audio through the topology. Specifically, audio flows through a bypassed element, without change.

If the corresponding Element omits can_bypass or sets it to false, then this field must not be set to true. If this occurs, SetElementState will fail and return error ZX_ERR_INVALID_ARGS. If not set, then the element's previous bypassed state will be unchanged.

Optional.

Topology

Defined in fuchsia.hardware.audio.signalprocessing/signal_processing.fidl

A Topology specifies how processing elements are arranged within the hardware.

OrdinalFieldTypeDescription
id TopologyId

Unique ID for this topology. The scope of this id is only within the SignalProcessing protocol lifespan, i.e. until the channel associated with the protocol is closed.

Required.

processing_elements_edge_pairs vector<EdgePair>:64

Vector of processing elements edge pairs that specify connections between elements. Processing elements are connected by edge pairs, to form multi-element pipelines. A Topology can contain more than one distinct pipeline: the Topology need not be a single interconnected sequence (e.g. Topology A->B->C D->E->F is valid).

To define multiple possible configurations where one possibility can be selected by the client, return multiple Topology entries in GetTopologies.

If a device does support multiple Topology entries, then each specific Topology is not required to include every Element. However, every element must be included in at least one Topology.

Within each Topology, every sequence of connected elements must begin with an element of type DAI_INTERCONNECT or RING_BUFFER, and must end with an element of type DAI_INTERCONNECT or RING_BUFFER.

An DAI_INTERCONNECT element is permitted to be the endpoint for an element sequence, but a RING_BUFFER is required to be one. If a certain RING_BUFFER element is listed in an EdgeList entry as a processing_element_id_from, then within that Topology it must not be listed in any EdgeList entry as a processing_element_id_to (and vice versa).

Required. Must contain at least one entry.

VendorSpecific

Defined in fuchsia.hardware.audio.signalprocessing/vendor_specific.fidl

Parameters for an Element with type equal to VENDOR_SPECIFIC.

OrdinalFieldTypeDescription

VendorSpecificState

Defined in fuchsia.hardware.audio.signalprocessing/vendor_specific.fidl

State for an Element with type equal to VENDOR_SPECIFIC.

OrdinalFieldTypeDescription

UNIONS

Latency flexible

Defined in fuchsia.hardware.audio.signalprocessing/signal_processing.fidl

Deprecation

Use processing_delay instead.

Removed: 20
OrdinalVariantTypeDescription
latency_time zx/Duration

Latency added to the pipeline as a zx.Duration.

latency_frames uint32

Latency added to the pipeline as a number of frames.

Reader_GetElements_Result strict

Defined in fuchsia.hardware.audio.signalprocessing/signal_processing.fidl

OrdinalVariantTypeDescription
response Reader_GetElements_Response
err zx/Status

Reader_GetTopologies_Result strict

Defined in fuchsia.hardware.audio.signalprocessing/signal_processing.fidl

OrdinalVariantTypeDescription
response Reader_GetTopologies_Response
err zx/Status

Reader_WatchTopology_Result strict

Defined in fuchsia.hardware.audio.signalprocessing/signal_processing.fidl

OrdinalVariantTypeDescription
response Reader_WatchTopology_Response
framework_err internal

SettableTypeSpecificElementState flexible

Defined in fuchsia.hardware.audio.signalprocessing/signal_processing.fidl

Type-specific processing element state that can be set by clients. The type of processing element control is defined by the type of parameters provided in this union. This type-specific variant must match the ElementType entry in the corresponding Element.

Added: 20
OrdinalVariantTypeDescription
vendor_specific VendorSpecificState
gain GainElementState
equalizer EqualizerElementState
dynamics DynamicsElementState

SignalProcessing_SetElementState_Result strict

Defined in fuchsia.hardware.audio.signalprocessing/signal_processing.fidl

OrdinalVariantTypeDescription
response SignalProcessing_SetElementState_Response
err zx/Status

SignalProcessing_SetTopology_Result strict

Defined in fuchsia.hardware.audio.signalprocessing/signal_processing.fidl

OrdinalVariantTypeDescription
response SignalProcessing_SetTopology_Response
err zx/Status

TypeSpecificElement flexible

Defined in fuchsia.hardware.audio.signalprocessing/signal_processing.fidl

Type-specific Parameters for an Element.

OrdinalVariantTypeDescription
vendor_specific VendorSpecific
gain Gain
equalizer Equalizer
dynamics Dynamics
endpoint Endpoint
Removed: 20
dai_interconnect DaiInterconnect
Added: 20

TypeSpecificElementState flexible

Defined in fuchsia.hardware.audio.signalprocessing/signal_processing.fidl

Type-specific processing element state, as returned from the driver. The type of processing element control is defined by the type of parameters provided in this union. This type-specific variant must match the ElementType entry in the corresponding Element.

OrdinalVariantTypeDescription
vendor_specific VendorSpecificState
gain GainElementState
equalizer EqualizerElementState
dynamics DynamicsElementState
endpoint EndpointElementState
Removed: 20
dai_interconnect DaiInterconnectElementState
Added: 20

BITS

DynamicsSupportedControls flexible

Type: uint64

Defined in fuchsia.hardware.audio.signalprocessing/dynamics.fidl

Supported controls for Dynamics. If included, each bit representing a parameter of the dynamics processing bands can be changed with SetElementState.

NameValueDescription
1

If set, SetElementState can change a dynamics band's knee_width_db parameter.

2

If set, SetElementState can change a dynamics band's attack parameter.

4

If set, SetElementState can change a dynamics band's release parameter.

8

If set, SetElementState can change a dynamics band's output_gain_db parameter.

16

If set, SetElementState can change a dynamics band's input_gain_db parameter.

32

If set, SetElementState can change a dynamics band's lookahead parameter.

64

If set, SetElementState can change a dynamics band's level_type parameter.

128

If set, SetElementState can change a dynamics band's linked_channels parameter.

256

If set, SetElementState can change a dynamics band's threshold_type parameter.

Added: 20

EqualizerSupportedControls flexible

Type: uint64

Defined in fuchsia.hardware.audio.signalprocessing/equalizer.fidl

Equalizer supported controls specified in Equalizer.

NameValueDescription
1

If set, SetElementState can change an equalizer band's frequency.

2

If set, SetElementState can change an equalizer band's q.

4

If set, SetElementState can change a band's type to EqualizerBandType.PEAK.

8

If set, SetElementState can change a band's type to EqualizerBandType.NOTCH.

16

If set, SetElementState can change a band's type to EqualizerBandType.LOW_CUT.

32

If set, SetElementState can change a band's type to EqualizerBandType.HIGH_CUT.

64

If set, SetElementState can change a band's type EqualizerBandType.LOW_SHELF.

128

If set, SetElementState can change a band's type to EqualizerBandType.HIGH_SHELF.

CONSTANTS

NameValueTypeDescription
MAX_BYTES_ELEMENT_VENDOR_SPECIFIC 4096 uint32
Added: 27
MAX_COUNT_DYNAMICS_BANDS 64 uint32
MAX_COUNT_EQUALIZER_BANDS 64 uint32
MAX_COUNT_PROCESSING_ELEMENTS 64 uint32
MAX_COUNT_PROCESSING_ELEMENTS_EDGE_PAIRS 64 uint32
MAX_COUNT_TOPOLOGIES 64 uint32
MAX_STRING_SIZE 256 uint32

ALIASES

NameValueDescription
ElementId uint64
TopologyId uint64

SERVICES

ConnectorService

Defined in fuchsia.hardware.audio.signalprocessing/connector.fidl

NameTypeTransport
connector fuchsia.hardware.audio.signalprocessing/Connector Channel