Skip to contentSkip to conversation

pulseaudio: Customize pulseaudio configuration for i.MX6 platforms

PATCH In review Jun Zhu 2 participants 6 messages Aug 1, 2014

lore
Share & tools
lore

Jun Zhu

author
#0 lore raw

PATCH v2 1/3 pulseaudio: Customize pulseaudio configuration for i.MX6 platforms

on i.MX6 seriese boards, some pulseaudio's defualt setting should be modified to improve the user experience:
- Daemon's exit_idle_time: set value as -1 to make pulseaudio service
never be terminated by any user-space apps.
- Resample method: switch to the build-in ffmpeg library to improve the
sound quality.
- Flat_Volumes: set value as "no" to align with the normal use case.

These customized configuration would be installed to overwrite the original version.

---
 .../pulseaudio/pulseaudio/mx6/daemon.conf          |   87 ++++++++++
 .../pulseaudio/pulseaudio/mx6/default.pa           |  170 ++++++++++++++++++++
 .../pulseaudio/pulseaudio_5.0.bbappend             |   20 +++
 3 files changed, 277 insertions(+)
 create mode 100644 recipes-multimedia/pulseaudio/pulseaudio/mx6/daemon.conf
 create mode 100644 recipes-multimedia/pulseaudio/pulseaudio/mx6/default.pa
 create mode 100644 recipes-multimedia/pulseaudio/pulseaudio_5.0.bbappend
recipes-multimedia/pulseaudio/pulseaudio/mx6/daemon.conf new file +87 -0
new file mode 100644
index 0000000..54854eb
@@ -0,0 +1,87 @@
+# This file is part of PulseAudio.
+#
+# PulseAudio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# PulseAudio is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with PulseAudio; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA.
+
+## Configuration file for the PulseAudio daemon. See pulse-daemon.conf(5) for
+## more information. Default values are commented out.  Use either ; or # for
+## commenting.
+
+; daemonize = no
+; fail = yes
+; allow-module-loading = yes
+; allow-exit = yes
+; use-pid-file = yes
+; system-instance = no
+; local-server-type = user
+; enable-shm = yes
+; shm-size-bytes = 0 # setting this 0 will use the system-default, usually 64 MiB
+; lock-memory = no
+; cpu-limit = no
+
+; high-priority = yes
+; nice-level = -11
+
+; realtime-scheduling = yes
+; realtime-priority = 5
+
+exit-idle-time = -1
+; scache-idle-time = 20
+
+; dl-search-path = (depends on architecture)
+
+; load-default-script-file = yes
+; default-script-file = /etc/pulse/default.pa
+
+; log-target = auto
+; log-level = notice
+; log-meta = no
+; log-time = no
+; log-backtrace = 0
+
+resample-method = ffmpeg
+; enable-remixing = yes
+; enable-lfe-remixing = no
+
+flat-volumes = no
+
+; rlimit-fsize = -1
+; rlimit-data = -1
+; rlimit-stack = -1
+; rlimit-core = -1
+; rlimit-as = -1
+; rlimit-rss = -1
+; rlimit-nproc = -1
+; rlimit-nofile = 256
+; rlimit-memlock = -1
+; rlimit-locks = -1
+; rlimit-sigpending = -1
+; rlimit-msgqueue = -1
+; rlimit-nice = 31
+; rlimit-rtprio = 9
+; rlimit-rttime = 1000000
+
+; default-sample-format = s16le
+; default-sample-rate = 44100
+; alternate-sample-rate = 48000
+; default-sample-channels = 2
+; default-channel-map = front-left,front-right
+
+; default-fragments = 4
+; default-fragment-size-msec = 25
+
+; enable-deferred-volume = yes
+; deferred-volume-safety-margin-usec = 8000
+; deferred-volume-extra-delay-usec = 0
recipes-multimedia/pulseaudio/pulseaudio/mx6/default.pa new file +170 -0

170 lines not on this page · raw message

recipes-multimedia/pulseaudio/pulseaudio_5.0.bbappend new file +20 -0
new file mode 100644
index 0000000..1774224
@@ -0,0 +1,20 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
+
+SRC_URI_append_mx6 = " file://daemon.conf \
+        file://default.pa \
+"
+
+do_install_append_mx6 () {
+    # FIXME: Install the customized pulseaudio damon setting to overwrite the default one
+    install -m 0644 ${WORKDIR}/daemon.conf ${D}${sysconfdir}/pulse/daemon.conf
+    install -m 0644 ${WORKDIR}/default.pa ${D}${sysconfdir}/pulse/default.pa
+
+    #FIXME: Remove the kde desktop, because there are two destop in default
+    #        (pulseaudio-kde.destop, pulseaudio.destop), then the pulseaudio server
+    #        will be started twice, pulseaudio will have issue to switch to default input/output.
+    if [ -e ${D}${sysconfdir}/xdg/autostart/pulseaudio-kde.desktop ]
+    then
+        rm ${D}${sysconfdir}/xdg/autostart/pulseaudio-kde.desktop
+    fi
+}
+
Signature · 1 line
1.7.9.5
author
#1 lore raw

PATCH v2 2/3 pulseaudio: Fix mutext issue when do pause in gstreamer

Pulseaudio crashes when other program using sound:
Assertion 'pthread_mutex_unlock(&m->mutex) == 0' failed at pulsecore/mutex-posix.c:106, function pa_mutex_unlock().

Disable the feature PTHREAD priority inheritance is the easiest workaround for this issue.

---
 .../pulseaudio/pulseaudio_5.0.bbappend             |    1 +
 1 file changed, 1 insertion(+)
recipes-multimedia/pulseaudio/pulseaudio_5.0.bbappend +1 -0
index 1774224..81b03f6 100644
@@ -18,3 +18,4 @@ do_install_append_mx6 () {
     fi
 }
 
+CACHED_CONFIGUREVARS_append_mx6 = " ax_cv_PTHREAD_PRIO_INHERIT=no"
Signature · 1 line
1.7.9.5
#2 lore raw

Re: [meta-fsl-arm][PATCH v2 2/3] pulseaudio: Fix mutext issue when do pause in gstreamer

Quoted 8 lines · Jun Zhu

Pulseaudio crashes when other program using sound:
Assertion 'pthread_mutex_unlock(&m->mutex) == 0' failed at pulsecore/mutex-posix.c:106, function pa_mutex_unlock().

Disable the feature PTHREAD priority inheritance is the easiest workaround for this issue.

I am fine with this patch, please rebase it to it not depend on 1/3 to be applied so we include it in master-next for testing.

Signature · 3 lines
Otavio Salvador                             O.S. Systems
http://www.ossystems.com.br        http://code.ossystems.com.br
Mobile: +55 (53) 9981-7854            Mobile: +1 (347) 903-9750
author
#3 lore raw

PATCH v2 3/3 pulseaudio: Fix no sound issue after plugin/out headphone

In reply to Jun Zhu

This issue found on the i.MX6 testing: when switch audio output between headphone and speaker, sometimes it founds no sound when plugin headphone.
Root cause is the the core-subscribe.c has a defer queue for audio sink's switch event and stores the status in database. Because it is a defer queue, sometimes the stored status is changed not as user expected.

---
 ...s-no-sound-after-plugin-plugout-headphone.patch |  127 ++++++++++++++++++++
 .../pulseaudio/pulseaudio_5.0.bbappend             |    1 +
 2 files changed, 128 insertions(+)
 create mode 100644 recipes-multimedia/pulseaudio/pulseaudio/mx6/Fix-issue-there-is-no-sound-after-plugin-plugout-headphone.patch
recipes-multimedia/pulseaudio/pulseaudio/mx6/Fix-issue-there-is-no-sound-after-plugin-plugout-headphone.patch new file +127 -0
new file mode 100644
index 0000000..0d4d73a
@@ -0,0 +1,127 @@
+From 7dfff7e62296779dca9831598af082ee72bfed41 Mon Sep 17 00:00:00 2001
+From: Shengjiu Wang <[email protected]>
+Date: Mon, 5 May 2014 14:21:16 +0800
+Subject: [PATCH] Fix issue: there is no sound after plugin/plugout headphone
+
+In default config, when switching headphone with speaker, the unused one will
+be switch off. And pulseaudio will store the setting in the database for
+restore later, when switch back to the output path.
+But the core-subscribe.c has a defer queue for these events, like sink|new,
+sink|change, which will read the current switch status and store it in
+the database. Because it is a defer queue, sometimes the stored status is
+changed not as user's requirement. below is the call flow.
+
+init:
+        store on for speaker to database.
+        store on for headphone to database.
+---Activating analog-output-speaker
+	switch on speaker
+	switch off headphone
+----headphone plugin
+   ---analog-output-speaker status no
+   ---Activating analog-output
+      Queued event (SINK|CHANGE|0)
+      switch off speaker
+      switch off headphone
+   ---analog-output-headphone status yes
+   ---Activating analog-output-headphone
+      switch off speaker
+      switch off headphone
+      Dispatched event (SINK|CHANGE|0)
+       store off for headphone to database.
+
+Meantime the root cause is not found, a workaround is used by changing the
+configure file.
+
+Another change is remain the volume same as the asound.state.
+
+Upstream Status: N/A
+  - It is i.Mx specific 
+
+Signed-off-by: Shengjiu Wang <[email protected]>
+---
+ .../alsa/mixer/paths/analog-output-headphones.conf |    8 ++++----
+ .../alsa/mixer/paths/analog-output-speaker.conf    |    8 ++++----
+ src/modules/alsa/mixer/paths/analog-output.conf    |    8 ++++----
+ 3 files changed, 12 insertions(+), 12 deletions(-)
+
+diff --git a/src/modules/alsa/mixer/paths/analog-output-headphones.conf b/src/modules/alsa/mixer/paths/analog-output-headphones.conf
+index b1a349a..7bfa79e 100644
+--- a/src/modules/alsa/mixer/paths/analog-output-headphones.conf
++++ b/src/modules/alsa/mixer/paths/analog-output-headphones.conf
+@@ -63,8 +63,8 @@ volume = off
+ 
+ [Element Headphone]
+ required-any = any
+-switch = mute
+-volume = merge
++switch = on
++volume = ignore
+ override-map.1 = all
+ override-map.2 = all-left,all-right
+ 
+@@ -86,8 +86,8 @@ switch = mute
+ volume = zero
+ 
+ [Element Speaker]
+-switch = off
+-volume = off
++switch = on
++volume = ignore
+ 
+ [Element Desktop Speaker]
+ switch = off
+diff --git a/src/modules/alsa/mixer/paths/analog-output-speaker.conf b/src/modules/alsa/mixer/paths/analog-output-speaker.conf
+index d79fad1..eae40a0 100644
+--- a/src/modules/alsa/mixer/paths/analog-output-speaker.conf
++++ b/src/modules/alsa/mixer/paths/analog-output-speaker.conf
+@@ -62,8 +62,8 @@ volume = off
+ ; This profile path is intended to control the speaker, let's mute headphones
+ ; else there will be a spike when plugging in headphones
+ [Element Headphone]
+-switch = off
+-volume = off
++switch = on
++volume = ignore
+ 
+ [Element Headphone2]
+ switch = off
+@@ -71,8 +71,8 @@ volume = off
+ 
+ [Element Speaker]
+ required-any = any
+-switch = mute
+-volume = merge
++switch = on
++volume = ignore
+ override-map.1 = all
+ override-map.2 = all-left,all-right
+ 
+diff --git a/src/modules/alsa/mixer/paths/analog-output.conf b/src/modules/alsa/mixer/paths/analog-output.conf
+index 3a552c9..bd5c12b 100644
+--- a/src/modules/alsa/mixer/paths/analog-output.conf
++++ b/src/modules/alsa/mixer/paths/analog-output.conf
+@@ -53,16 +53,16 @@ switch = off
+ ; headphones. But it should not hurt if we leave the headphone jack
+ ; enabled nonetheless.
+ [Element Headphone]
+-switch = mute
+-volume = zero
++switch = on
++volume = ignore
+ 
+ [Element Headphone2]
+ switch = mute
+ volume = zero
+ 
+ [Element Speaker]
+-switch = mute
+-volume = off
++switch = on
++volume = ignore
+ 
+ [Element Desktop Speaker]
+ switch = mute
+-- 
+1.7.9.5
+
recipes-multimedia/pulseaudio/pulseaudio_5.0.bbappend +1 -0
index 81b03f6..63f522d 100644
@@ -2,6 +2,7 @@ FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
 
 SRC_URI_append_mx6 = " file://daemon.conf \
         file://default.pa \
+        file://Fix-issue-there-is-no-sound-after-plugin-plugout-headphone.patch \
 "
 
 do_install_append_mx6 () {
Signature · 1 line
1.7.9.5
#4 lore raw

Re: [meta-fsl-arm][PATCH v2 3/3] pulseaudio: Fix no sound issue after plugin/out headphone

Quoted 9 lines · Jun Zhu

This issue found on the i.MX6 testing: when switch audio output between headphone and speaker, sometimes it founds no sound when plugin headphone.
Root cause is the the core-subscribe.c has a defer queue for audio sink's switch event and stores the status in database. Because it is a defer queue, sometimes the stored status is changed not as user expected.

...

Quoted 1 line

+Another change is remain the volume same as the asound.state.

...

Could the asound change be reverted? This is indeed an application option and people making Media Servers would expect PulseAudio to be the authority here in case it is in use.

Signature · 3 lines
Otavio Salvador                             O.S. Systems
http://www.ossystems.com.br        http://code.ossystems.com.br
Mobile: +55 (53) 9981-7854            Mobile: +1 (347) 903-9750
#5 lore raw
In reply to Jun Zhu
Quoted 1 line · Jun Zhu

on i.MX6 seriese boards, some pulseaudio's defualt setting should be

series

default

Quoted 11 lines

modified to improve the user experience:
- Daemon's exit_idle_time: set value as -1 to make pulseaudio service
never be terminated by any user-space apps.
- Resample method: switch to the build-in ffmpeg library to improve the
sound quality.
- Flat_Volumes: set value as "no" to align with the normal use case.

These customized configuration would be installed to overwrite the original version.

I am a little unsure about this patch. Let me explain...

Here you /decide/ by user it ought to use ALSA for volume. This has a considerable risk break someone's application which uses PulseAudio to manage it and expect it to be used as the default setting.

This is not a BSP thing but a application layer/product option.

What others think?

...

Quoted 15 lines
recipes-multimedia/pulseaudio/pulseaudio_5.0.bbappend new file +9 -0
new file mode 100644
index 0000000..1774224
@@ -0,0 +1,20 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
+
+SRC_URI_append_mx6 = " file://daemon.conf \
+        file://default.pa \
+"
+
+do_install_append_mx6 () {
+    # FIXME: Install the customized pulseaudio damon setting to overwrite the default one
+    install -m 0644 ${WORKDIR}/daemon.conf ${D}${sysconfdir}/pulse/daemon.conf

recipes-multimedia/pulseaudio/pulseaudio_5.0.bbappend line 19

Quoted 10 lines
recipes-multimedia/pulseaudio/pulseaudio_5.0.bbappend new file +10 -0
+    install -m 0644 ${WORKDIR}/default.pa ${D}${sysconfdir}/pulse/default.pa
+
+    #FIXME: Remove the kde desktop, because there are two destop in default
+    #        (pulseaudio-kde.destop, pulseaudio.destop), then the pulseaudio server
+    #        will be started twice, pulseaudio will have issue to switch to default input/output.
+    if [ -e ${D}${sysconfdir}/xdg/autostart/pulseaudio-kde.desktop ]
+    then
+        rm ${D}${sysconfdir}/xdg/autostart/pulseaudio-kde.desktop
+    fi
+}

The .desktop fix is not a BSP one, please work on a proper fix in OE-Core.

Signature · 3 lines
Otavio Salvador                             O.S. Systems
http://www.ossystems.com.br        http://code.ossystems.com.br
Mobile: +55 (53) 9981-7854            Mobile: +1 (347) 903-9750