<p><br>
><br>
> I am having issue with pulseaudiosink,<br>
> I used following command to play a wav file<br>
> gst-launch filesrc location=<wav file path> ! wavparse ! pulseaudiosink<br>
><br>
> if tsched is enabled, then play of wav file via pulseaudiosink gives me lots of Underrun, and the sound is distorted, following is the pulseaudio log when --log-level=3<br>
><br>
> I: [pulseaudio] protocol-native.c: Got credentials: uid=0 gid=0 success=1<br>
> I: [pulseaudio] sink-input.c: Trying to change sample rate<br>
> I: [pulseaudio] alsa-sink.c: Updating rate for device hw:0, new rate is 48000<br>
> I: [pulseaudio] source.c: Changed sampling rate successfully<br>
> I: [pulseaudio] sink.c: Changed sampling rate successfully<br>
> I: [pulseaudio] sink-input.c: Rate changed to 48000 Hz<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Trying resume...<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-util.c: cannot disable ALSA period wakeups<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-util.c: ALSA period wakeups were not disabled<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Time scheduling watermark is 18.38ms<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Resumed successfully...<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Starting playback.<br>
> I: [pulseaudio] sink-input.c: Created input 0 "pulsesink probe" on alsa_output.platform-sound.analog-s<br>
> tereo with sample spec s16le 2ch 48000Hz and channel map front-left,front-right<br>
> I: [pulseaudio] sink-input.c:     <a href="http://media.name">media.name</a> = "pulsesink probe"<br>
> I: [pulseaudio] sink-input.c:     <a href="http://application.name">application.name</a> = "gst-launch-0.10"<br>
> I: [pulseaudio] sink-input.c:     native-protocol.peer = "UNIX socket client"<br>
> I: [pulseaudio] sink-input.c:     native-protocol.version = "29"<br>
> I: [pulseaudio] sink-input.c:     <a href="http://application.process.id">application.process.id</a> = "985"<br>
> I: [pulseaudio] sink-input.c:     application.process.user = "root"<br>
> I: [pulseaudio] sink-input.c:     application.process.host = "mx6q"<br>
> I: [pulseaudio] sink-input.c:     application.process.binary = "gst-launch-0.10"<br>
> I: [pulseaudio] sink-input.c:     application.language = "C"<br>
> I: [pulseaudio] sink-input.c:     application.process.machine_id = "0aa7a9566c734f608cbd36f187de8645"<br>
> I: [pulseaudio] sink-input.c:     <a href="http://module-stream-restore.id">module-stream-restore.id</a> = "sink-input-by-application-name:gst-launc<br>
> h-0.10"<br>
> I: [pulseaudio] protocol-native.c: Requested tlength=250.00 ms, minreq=20.00 ms<br>
> I: [pulseaudio] protocol-native.c: Final latency 250.00 ms = 105.00 ms + 2*20.00 ms + 105.00 ms<br>
> I: [pulseaudio] sink-input.c: Freeing input 0 "pulsesink probe"<br>
> I: [pulseaudio] sink-input.c: Created input 1 "Playback Stream" on alsa_output.platform-sound.analog-s<br>
> tereo with sample spec s16le 2ch 48000Hz and channel map front-left,front-right<br>
> I: [pulseaudio] sink-input.c:     <a href="http://media.name">media.name</a> = "Playback Stream"<br>
> I: [pulseaudio] sink-input.c:     <a href="http://application.name">application.name</a> = "gst-launch-0.10"<br>
> I: [pulseaudio] sink-input.c:     native-protocol.peer = "UNIX socket client"<br>
> I: [pulseaudio] sink-input.c:     native-protocol.version = "29"<br>
> I: [pulseaudio] sink-input.c:     <a href="http://application.process.id">application.process.id</a> = "985"<br>
> I: [pulseaudio] sink-input.c:     application.process.user = "root"<br>
> I: [pulseaudio] sink-input.c:     application.process.host = "mx6q"<br>
> I: [pulseaudio] sink-input.c:     application.process.binary = "gst-launch-0.10"<br>
> I: [pulseaudio] sink-input.c:     application.language = "C"<br>
> I: [pulseaudio] sink-input.c:     application.process.machine_id = "0aa7a9566c734f608cbd36f187de8645"<br>
> I: [pulseaudio] sink-input.c:     <a href="http://module-stream-restore.id">module-stream-restore.id</a> = "sink-input-by-application-name:gst-launc<br>
> h-0.10"<br>
> I: [pulseaudio] protocol-native.c: Requested tlength=200.00 ms, minreq=10.00 ms<br>
> I: [pulseaudio] protocol-native.c: Final latency 200.00 ms = 90.00 ms + 2*10.00 ms + 90.00 ms<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Increasing wakeup watermark to 28.38 ms<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Increasing wakeup watermark to 38.38 ms<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Increasing wakeup watermark to 48.38 ms<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Increasing wakeup watermark to 58.38 ms<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Increasing wakeup watermark to 68.38 ms<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Increasing wakeup watermark to 78.38 ms<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Increasing wakeup watermark to 80.00 ms<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Increasing minimal latency to 1.00 ms<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Increasing minimal latency to 2.00 ms<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Increasing minimal latency to 4.00 ms<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Increasing minimal latency to 8.00 ms<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Increasing minimal latency to 16.00 ms<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Increasing minimal latency to 26.00 ms<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Increasing minimal latency to 36.00 ms<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Increasing minimal latency to 46.00 ms<br>
> E: [alsa-sink-HiFi wm8962-0] alsa-sink.c: ALSA woke us up to write new data to the device, but there w<br>
> as actually nothing to write!<br>
> E: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Most likely this is a bug in the ALSA driver '(null)'. Pleas<br>
> e report this issue to the ALSA developers.<br>
> E: [alsa-sink-HiFi wm8962-0] alsa-sink.c: We were woken up with POLLOUT set -- however a subsequent sn<br>
> d_pcm_avail() returned 0 or another value < min_avail.<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Increasing minimal latency to 56.00 ms<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Increasing minimal latency to 66.00 ms<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Increasing minimal latency to 76.00 ms<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Increasing minimal latency to 86.00 ms<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Increasing minimal latency to 96.00 ms<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Increasing wakeup watermark to 86.00 ms<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Increasing minimal latency to 106.00 ms<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Increasing wakeup watermark to 96.00 ms<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Increasing minimal latency to 116.00 ms<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Increasing wakeup watermark to 106.00 ms<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Increasing minimal latency to 126.00 ms<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Increasing wakeup watermark to 116.00 ms<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Increasing minimal latency to 136.00 ms<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Increasing wakeup watermark to 126.00 ms<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Underrun!<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Increasing minimal latency to 146.00 ms<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Underrun!<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Increasing wakeup watermark to 136.00 ms<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Underrun!<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Increasing minimal latency to 156.00 ms<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Increasing wakeup watermark to 146.00 ms<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Increasing minimal latency to 166.00 ms<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Increasing wakeup watermark to 156.00 ms<br>
> I: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Increasing minimal latency to 176.00 ms<br>
> I: [pulseaudio] sink-input.c: Freeing input 1 "Playback Stream"<br>
> I: [pulseaudio] client.c: Freed 4 "gst-launch-0.10"<br>
> I: [pulseaudio] protocol-native.c: Connection died.<br>
><br>
> from the log it seems like, when system timer based scheduling is used, then pulseaudio will try to keep minimum watermark/latency, only when Underrun occurs, it will increase watermark/latency.<br>
><br>
> Is this the expected behaviour of pulseaudio 'glict free' feature?</p>
<p>> And from the log there is some error message complain about ALSA driver<br>
> E: [alsa-sink-HiFi wm8962-0] alsa-sink.c: ALSA woke us up to write new data to the device, but there w<br>
> as actually nothing to write!<br>
> E: [alsa-sink-HiFi wm8962-0] alsa-sink.c: Most likely this is a bug in the ALSA driver '(null)'. Pleas<br>
> e report this issue to the ALSA developers.<br>
> E: [alsa-sink-HiFi wm8962-0] alsa-sink.c: We were woken up with POLLOUT set -- however a subsequent sn<br>
> d_pcm_avail() returned 0 or another value < min_avail.<br>
><br>
> does this mean, there is some bug in ALSA driver, or it just indicates the ALSA driver doesn't support glitch free feature very well<br><br></p>
<p>The timer base scheduling require sound card driver provide accurate  hw_ptr position at any time.</p>
<p>So far only two sound card drivers snd-hda-intel and snd-oxygen can provide accurate hw_ptr position from hardware register</p>
<p>static snd_pcm_uframes_t dmaengine_pcm_pointer(<br>
        struct snd_pcm_substream *substream)<br>
{<br>
        struct snd_soc_pcm_runtime *rtd = substream->private_data;<br>
        struct dmaengine_pcm *pcm = soc_platform_to_pcm(rtd->platform);</p>
<p>       if (pcm->flags & SND_DMAENGINE_PCM_FLAG_NO_RESIDUE)<br>
                return snd_dmaengine_pcm_pointer_no_residue(substream);<br>
        else<br>
                return snd_dmaengine_pcm_pointer(substream);<br>
}</p>
<p><a href="http://lxr.free-electrons.com/ident?i=dmaengine_tx_status">http://lxr.free-electrons.com/ident?i=dmaengine_tx_status</a></p>
<p>Seem none of soc sound drivers can report position accurate than period size </p>
<p>Is there any reason to enable timer based scheduling by default ?<br></p>
<p><a href="http://mailman.alsa-project.org/pipermail/alsa-devel/2014-September/081501.html">http://mailman.alsa-project.org/pipermail/alsa-devel/2014-September/081501.html</a></p>
<p>You can try alexandra 's program to find out how accuate hw_ptr can your sound card driver can report ?</p>