Intro to Topology2.0

GitHub pull_request - opened github at alsa-project.org
Wed Apr 28 04:07:35 CEST 2021


alsa-project/alsa-utils pull request #86 was opened from ranj063:

Add support for pre-processing Topology2.0 conf file and building the tplg binary.

An example implementation of topology with Topology2.0 can be found here:
https://github.com/thesofproject/sof/pull/3983
Introduction to Topology 2.0
-----

Topology2.0 is a high level keyword extension on top of the existing ALSA
conf topology format designed to:

1) Simplify the ALSA conf topology definitions by providing high level
   "classes" so topology designers need to write less config for common
   object definitions.

2) Allow simple reuse of objects. Define once and reuse (like M4) with
   the ability to alter objects configuration attributes from defaults.

3) Allow data type and value verification. This is not done today and
   frequently crops up in FW bug reports.

Common Topology Classes
-----------------------

Topology today has some common classes that are often reused throughout
with slightly altered configurations. i.e. widgets (components),
pipelines, dais and controls.

Topology2.0 introduces the high level concept of reusable "class" like
definition for a AIF_IN/AIF_OUT type object that can be used to create
topology objects.

Common Topology Attributes
--------------------------
Topology defines a lot of attributes per object with different types
and constraints. Today there is no easy way to validate type or
constraints and this can lead to many hard to find problems in FW at
runtime.

A new keyword "DefineAttribute" has been added to define attribute
type, size, min value, max value, enum_values. This then allows
alsatplg to validate each topology object attribute.

Topology Classes define the list of attributes that they use and
whether the attribute is mandatory, can be overridden by parent users
or is immutable. This also helps alsatplg emit the appropriate errors
for attribute misuse.

Attribute validation
-------------------------
One of the main features of Topology2.0 is the ability to add constraints to
attributes to define a set of valid values, specify min/max values etc in 
the class definition.

Attribute Inheritance
----------------------
One of the key features of Topology2.0 is howthe attribute values are
propagated from a parent object to a child object. This is accomplished
by adding attributes/arguments with the same name for a parent and an
object. By doing so, when creating a child object, the value for the
common attribute is populated from the parent. If the value is provided
in the child object instance, then it overrides the value coming from
the parent.

**ALSA Conf Parser**
----------------

All the changes being proposed and discussed here must be 100%
compliant with the ALSA conf parser. i.e. no syntax changes or
changes to semantics for any existing keyword.

It's intended that there will be NO changes to the ALSA conf parser

Request URL   : https://github.com/alsa-project/alsa-utils/pull/86
Patch URL     : https://github.com/alsa-project/alsa-utils/pull/86.patch
Repository URL: https://github.com/alsa-project/alsa-utils


More information about the Alsa-devel mailing list