[Sound-open-firmware] [PATCH] topology: SRC: Use 4ms for topology scheduling and increase buffers

Pierre-Louis Bossart pierre-louis.bossart at linux.intel.com
Fri Sep 8 20:29:44 CEST 2017



On 09/08/2017 01:01 PM, Seppo Ingalsuo wrote:
>
> On 08.09.2017 17:48, Pierre-Louis Bossart wrote:
>> On 9/8/17 1:37 AM, Seppo Ingalsuo wrote:
>>>
>>>
>>> On 07.09.2017 19:17, Pierre-Louis Bossart wrote:
>>>> On 9/7/17 8:28 AM, Liam Girdwood wrote:
>>>>> SRC should be scheduled on at least 4ms tick. Increase buffers to
>>>>> deal with 2 times output rate.
>>>>
>>>> It's ok to increase buffer sizes to account for the varying sizes 
>>>> between input/output, but why would the scheduling be impacted? 4ms 
>>>> is a very large tick, this makes no sense to me.
>>>
>>> Yes, you are right that the scheduling for this pipeline could be 
>>> kept 2 ms while buffer size would be increased to fit the SRC output 
>>> block size. For 44.1 kHz to 48 kHz conversion the SRC produces 160 
>>> samples blocks at 48 kHz side every ~3.3ms. This change can be 
>>> restored after the configuration errors check code in SRC params() 
>>> is improved. I will work with that.
>>
>> temporary fixes are just fine. I was just trying to figure out if 
>> there is a minimum block or scheduling assumption here. I probably 
>> need more coffee this morning but does the implementation wait for 
>> 147 input samples to be available before being able to generate an 
>> output so as to have predictable scheduling? if we tolerated more 
>> variability on the number of cycles, could we not reduce this block 
>> size?
>
> The current SRC implementation is such that it executes the whole 
> polyphase filter matrix in a single run when sufficient amount of data 
> is available. That simplifies filter core and improves computation 
> performance with avoiding of control code but it increases latency.
>
> That may need be revisited (it's not that complicated but the jitter 
> in number of samples in/out happens - it shouldn't be an issue for 
> SOF) since for 11025 Hz to 48 kHz the used fraction is 640/147. It 
> would cause much longer buffers need and delay.
>
> In 48 kHz family fractional conversions with easier fractions the min. 
> buffer needs are much shorter. It might be useful to make two variants 
> of filters core.

For the 48khz and integer resampling, why do we even have a min buffer? 
Apart from the downsampling case where you need N samples before being 
able to generate a new one, for upsampling you could work at the sample 
level. If you push the input into a delay line and work from there you 
are good to go. what am I missing?


More information about the Sound-open-firmware mailing list