[pulseaudio-discuss] snd_pcm_avail no reliable
golden
magic.lixin at gmail.com
Tue Jun 9 00:26:02 PDT 2015
Hi all
I tried using a smaller period_size (about 1/16 of hwbuf_size),
snd_pcm_avail returned a better value.
But cpu usage moved from 1% to 4%, since we are using it in a
automotive, we don`t care about power saving, I think it is acceptable.
But I`m not sure if there is any other down side about "time based
scheduling" ?
BR,
Lixin
在 2015年06月09日 15:15, Arun Raghavan 写道:
> On 9 June 2015 at 12:38, Raymond Yau <superquad.vortex2 at gmail.com> wrote:
>>>>>>
>>>>>> >
>>>>>> > below is what the terminate shows when running pcm_avail.c
>>>>>> >
>>>>>> > uid=0 gid=1007 at nutshell:/ # alsactl_test
>>>>>> > min_period_size: 8 frames, dir: 0
>>>>>> > Playback hwparams: FIFO size is 8
>>>>>> > Hardware PCM card 0 'rsnd-dai.0-dirana3.0' device 0 subdevice 0
>>>>>> > Its setup is:
>>>>>> > stream : PLAYBACK
>>>>>> > access : RW_INTERLEAVED
>>>>>> > format : S16_LE
>>>>>> > subformat : STD
>>>>>> > channels : 2
>>>>>> > rate : 48000
>>>>>> > exact rate : 48000 (48000/1)
>>>>>> > msbits : 16
>>>>>> > buffer_size : 4096
>>>>>> > period_size : 1024
>>>>>> > period_time : 21333
>>>>>> > tstamp_mode : NONE
>>>>>> > period_step : 1
>>>>>> > avail_min : 1024
>>>>>> > period_event : 0
>>>>>> > start_threshold : 1024
>>>>>> > stop_threshold : 4096
>>>>>> > silence_threshold: 0
>>>>>> > silence_size : 0
>>>>>> > boundary : 1073741824
>>>>>> > appl_ptr : 0
>>>>>> > hw_ptr : 0
>>>>>> > Playing silence
>>>>>> > Available: 0, loop iteration: 0
>>>>>> > Available: 1024, loop iteration: 1469
>>>>>> > Available: 2048, loop iteration: 5609
>>>>>> > Available: 3072, loop iteration: 9667
>>>>>> >
>>>>>> > All I got is just the 4 lines.
>>>>>>
>>>>>> If your sound card only increment hw_ptr only at interrupt occur, you
>>>>>> need to increase default_rewind_safeguard from 256 bytes to your
>>>>>> selected period size
>>>>>
>>>>> No. PulseAudio, in timer-scheduling mode, does not use periods at all.
>>>>> You need to change the driver so that it reports SNDRV_PCM_INFO_BATCH, so
>>>>> that PulseAudio does not try to use this mode.
>>>>>
>>>>>
>>>>>> This mean that your sound card won't work with timer scheduling or
>>>>>> dynamic latency, you can only archieve low latency by decrease period
>>>>>> size
>>>>>> Why do pulseaudio enable timer scheduling when most sound card use
>>>>>> IRQ ?
>>>>>
>>>>> Because most broken sound cards driver authors forget to report
>>>>> SNDRV_PCM_INFO_BATCH?
>>>> Why pulseaudio rely on the flag if your program can find out the
>>>> granulatity ?
>>> AFAIK, there isn't a way to figure out granularity. Having this would be
>>> nice as we could be more intelligent about our tsched behaviour.
>>>
>> But in this case, alecandra `s program already indicate hw_ptr only
>> increment by period size which is not suitable to enable timer base
>> scheduling
> There are two cases: the first is that pointer updates happen at
> period size, which should imply the BATCH flag, and we just disable
> timer-based scheduling.
>
> The second case is that the pointer changes at some granularity >1
> byte and we need to know what that value is to set up the sleep time
> and rewind safeguard etc. correctly if the value isn't "too high".
>
>> The result also indicate pulseaudio have to change default rewind safeguard
>>
>> What granularity do pulseaudio need for timer base scheduling ?
> Currently, it's what HDA gives us (which is byte-level precision?)
>
>> (e.g. sound card must report position better than 10ms processing time)
> It'll probably work for < rewind safety margin (the tsched sleep
> threshold is even larger). But that's a matter of luck, rather than
> being intentionally supported.
> _______________________________________________
> pulseaudio-discuss mailing list
> pulseaudio-discuss at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss
More information about the pulseaudio-discuss
mailing list