alsa-project/alsa-utils pull request #268 was edited from ranj063: Add 2 new keywords for class definitions to allow new pipeline classes extend the definitions in the base class. This feature is useful for extending previous pipeline class definitions with the addition of one or more widgets without having to duplicate everything in the new class definition. For example: Consider a pipeline class definition as below. Note that only the widgets & routes are shown here. ``` Class.Pipeline.mixout-gain-dai-copier-playback { Object.Widget { mixout."1" {} dai-copier."1" {} gain."1" {} pipeline."1" {} } Object.Base { !route [ { source mixout.$index.1 sink gain.$index.1 } ] } } ``` If we want to extend this pipeline with the addition of an eqiir/eqfir, the extends keyword can be used as below: ``` Class.Pipeline.mixout-gain-eqiir-eqfir-dai-copier-playback { extends "mixout-gain-dai-copier-playback" Object.Widget { eqiir.1 {} eqfir.1 {} } Object.Base { !route [ { source gain.$index.1 sink eqiir.$index.1 } { source eqiir.$index.1 sink eqfir.$index.1 } ] } } ``` This allows for defining a new class without having to duplicate everything in the base class and just adding the new widgets/routes that extend the current pipeline definition in the base class. The extends keyword is useful when extending a pipeline while keeping the routes in the base class intact and adding new widgets at the end of the pipeline. But if we want to modify an existing pipeline class while modifying the order of widgets and/or inserting new widgets, we should use the overridess keyword instead. This allows for adding new widgets to the list of widgets in the base class definition while also allowing overriding the routes to allow inserting the new widgets and reordering the widgets in the base class. For example, if we want to add a drc widget between the gain and the eqiir modules in the above class, we can do the following: ``` Class.Pipeline.mixout-efx-dai-copier-playback { overrides "mixout-gain-eqiir-eqfir-dai-copier-playback" Object.Widget { drc.1 {} } Object.Base { !route [ { source mixout.$index.1 sink gain.$index.1 } { source gain.$index.1 sink drc.$index.1 } { source drc.$index.1 sink eqiir.$index.1 } { source eqiir.$index.1 sink eqfir.$index.1 } ] } } ``` Nore that the routes array contains all the routes in the new class definition. Link: https://github.com/thesofproject/sof/issues/9082 Request URL : https://github.com/alsa-project/alsa-utils/pull/268 Patch URL : https://github.com/alsa-project/alsa-utils/pull/268.patch Repository URL: https://github.com/alsa-project/alsa-utils