HandsOn May 10 2017 ALSA Routing Adapter Plugin

  • Slides: 17
Download presentation
Hands-On May 10, 2017 | ALSA Routing Adapter Plugin Jens Lorenz Staff Engineer, ADIT

Hands-On May 10, 2017 | ALSA Routing Adapter Plugin Jens Lorenz Staff Engineer, ADIT Gmb. H, GENIVI Alliance

Why ALSA Routing Adapter?

Why ALSA Routing Adapter?

Overview • Existing Infrastructure – Daemon – Plugins • Common. API • DBus •

Overview • Existing Infrastructure – Daemon – Plugins • Common. API • DBus • Generic Controller 3 | May 10, 2017 | Copyright © GENIVI Alliance 2017

Motivation • Reduce learning curve – Playground to understand domain concept – Playground to

Motivation • Reduce learning curve – Playground to understand domain concept – Playground to understand static vs. dynamic IDs • Playground independent of audio server – AM works as a single daemon – ALSA plugins for processing only i. e. mixing • Works with Generic Controller • Usable for real products – Used in platforms with Hands-Free (ECNR) systems 4 | May 10, 2017 | Copyright © GENIVI Alliance 2017

What does it?

What does it?

Design • Domain Database – Filled on contraction – Registered on startup • Streaming

Design • Domain Database – Filled on contraction – Registered on startup • Streaming Control – Creates Proxies on demand – Proxies can be replaced • Volume Control – Works with Soft. Vol • ALSA Control – On Sound. Property Request 6 | May 10, 2017 | Copyright © GENIVI Alliance 2017

Proxy in Audio 7 | May 10, 2017 | Copyright © GENIVI Alliance 2017

Proxy in Audio 7 | May 10, 2017 | Copyright © GENIVI Alliance 2017

Proxy Interface class IAm. Routing. Adapter. ALSAProxy { IAm. Routing. Adapter. ALSAProxy(const ra_Proxy_s &

Proxy Interface class IAm. Routing. Adapter. ALSAProxy { IAm. Routing. Adapter. ALSAProxy(const ra_Proxy_s & proxy); virtual ~IAm. Routing. Adapter. ALSAProxy(); virtual am_time. Sync_t get. Delay() const = 0; virtual am_Error_e open. Streaming() = 0; virtual am_Error_e start. Streaming() = 0; virtual am_Error_e stop. Streaming() = 0; virtual am_Error_e close. Streaming() = 0; } 8 | May 10, 2017 | Copyright © GENIVI Alliance 2017

Example Needed?

Example Needed?

Domain Configuration with Gateway <amra_alsa> <t. DOMAIN dom. Nam = "Applications" nod. Nam =

Domain Configuration with Gateway <amra_alsa> <t. DOMAIN dom. Nam = "Applications" nod. Nam = "Cpu"> <t. SOURCE src. Nam = "Media. Player" src. Cls. Nam = "BASE“ /> <t. SINK sink. Nam = "Gateway. In" visible = "0“ /> </t. DOMAIN> <t. DOMAIN dom. Nam = "Virt. DSP" nod. Nam = "Cpu"> <t. SOURCE src. Nam = "Gateway. Out" src. Cls. Nam = "BASE" visible = "0“> <t. GATEWAY gateway. Nam = "Gateway" sink. Nam = "Gateway. In" sink. Dom. Nam = “Applications“ lst. Src. Frmt = "2" lst. Sink. Frmt = "2" convertion. Matrix = "1"> </t. GATEWAY> </t. SOURCE> <t. SINK sink. Nam = "AMP" sink. ID = "1“ /> </t. DOMAIN> </amra_alsa> 10 | May 10, 2017 | Copyright © GENIVI Alliance 2017

Volume Configuration <t. DOMAIN dom. Nam = "Applications" nod. Nam = "Cpu"> <t. SOURCE

Volume Configuration <t. DOMAIN dom. Nam = "Applications" nod. Nam = "Cpu"> <t. SOURCE src. Nam = "Media. Player" src. Cls. Nam = "BASE“ pcm. Nam = "vdev_app_mediaplayer" vol. Nam = "vol_mediaplayer" /> <t. SINK sink. Nam = "Gateway" visible = "0“ /> </t. DOMAIN> ALSA configuration: pcm. vdev_app_mediaplayer { type plug slave. pcm vdev_mpsv } pcm. vdev_mpsv { type softvol slave. pcm “hw: Loopback, 0" control. name vol_mediaplayer control. card 0 } 11 | May 10, 2017 | Copyright © GENIVI Alliance 2017

Proxy Configuration <t. DOMAIN dom. Nam = "Virt. DSP" nod. Nam = "Cpu"> <t.

Proxy Configuration <t. DOMAIN dom. Nam = "Virt. DSP" nod. Nam = "Cpu"> <t. SOURCE src. Nam = "Gateway" src. Cls. Nam = "BASE" visible = "0“ /> <t. SINK sink. Nam = "AMP" sink. ID = "1“ /> <t. PROXY src. Nam = "Gateway" sink. Nam = "AMP“ pcm. Src = "vdev_dsp_gateway“ pcm. Sink = "vdev_dsp_amp“ lst. Rates = "48000" ms. Buffersize = "8" CPUScheduling. Policy = "1" CPUScheduling. Priority = "80" /> </t. DOMAIN> ALSA configuration: 12 | May 10, 2017 | Copyright © GENIVI Alliance 2017 pcm. vdev_dsp_gateway { type hw slave. card “Loopback” slave. device 0 } pcm. vdev_dsp_amp { type dmix slave. pcm “hw: 0” slave. rate 48000 slave. channels 2 }

Sound Properties <t. DOMAIN dom. Nam = "Virt. DSP" nod. Nam = "Cpu"> <t.

Sound Properties <t. DOMAIN dom. Nam = "Virt. DSP" nod. Nam = "Cpu"> <t. SOURCE src. Nam = "Gateway" src. Cls. Nam = "BASE" pcm. Nam = "vdev_app_mediaplayer" /> <t. PROPERTY type = "1"> <t. PROPSPEC value = "1“ nams. Vals = "vol_mediaplayer, 50; ADC High-Pass Filter, High Pass; “ /> <t. PROPSPEC value = "2“ nams. Vals = "vol_mediaplayer, 200; ADC High-Pass Filter, None; “ /> </t. PROPERTY> </t. SOURCE> </t. DOMAIN> 13 | May 10, 2017 | Copyright © GENIVI Alliance 2017

Next?

Next?

Open Topics • Generic Controller works with fix topology • USB sound card detection

Open Topics • Generic Controller works with fix topology • USB sound card detection support 15 | May 10, 2017 | Copyright © GENIVI Alliance 2017

Questions? genivi-audio-manager@lists. genivi. org jlorenz@de. adit-jv. com References https: //github. com/GENIVI/Audio. Manager. Plugins

Questions? genivi-audio-manager@lists. genivi. org jlorenz@de. adit-jv. com References https: //github. com/GENIVI/Audio. Manager. Plugins

Thank You! Visit GENIVI at http: //www. genivi. org or http: //projects. genivi. org

Thank You! Visit GENIVI at http: //www. genivi. org or http: //projects. genivi. org Contact us: help@genivi. org This work is licensed under a Creative Commons Attribution-Share Alike 4. 0 (CC BY-SA 4. 0) GENIVI is a registered trademark of the GENIVI Alliance in the USA and other countries. Copyright © GENIVI Alliance 2017.