Skip to content
This repository has been archived by the owner on Jan 17, 2019. It is now read-only.

topology: enable pcm rate setting from top level m4 #92

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

juimonen
Copy link

@juimonen juimonen commented Oct 5, 2018

Enable setting pcm min and max rate from top level
m4 pipeline macro. This way it is possible to configure
the whole pipeline to correct samplerate range in
1 file. Previously you needed to modify the pipeline
macros where the rate was hardcoded.

Signed-off-by: Jaska Uimonen jaska.uimonen@intel.com

This is possible fix for #60, but needs testing, probably QA should run tests

Enable setting pcm min and max rate from top level
m4 pipeline macro. This way it is possible to configure
the whole pipeline to correct samplerate range in
1 file. Previously you needed to modify the pipeline
macros where the rate was hardcoded.

Signed-off-by: Jaska Uimonen <jaska.uimonen@intel.com>
@@ -32,26 +32,26 @@ DEBUG_START
# Schedule 48 frames per 1000us deadline on core 0 with priority 0
PIPELINE_PCM_ADD(sof/pipe-volume-playback.m4,
1, 0, 2, s32le,
48, 1000, 0, 0)
48, 1000, 0, 0, 48000, 48000)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@juimonen can we remove the 48 here, since it can be derived now from the min/max rates. This may need an ABI update and a pipeline update since we will be sending min/max rate with topology and runtime rate via hw_params.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@lgirdwood sorry I didn't get it...? isn't the 48 like frames per scheduling slice (1000 us in this case). Min and max rates define the range of sample rates that the pipeline accepts. So, I mean aren't these values orthogonal? For e.g. I could have range 8000-192000Hz and scheduling of, say, 108 frames per 1020 us?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@juimonen I think the logic is that we have a constant sample rate and a schedule time, meaning our processing size is always rate / schedule time.
Variable sample rate components would know their schedule time and would have to determine how many samples to produce/consume every time they are scheduled. Does this make sense ?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@lgirdwood ok I see. The difficulty is that if we have only min and max rate, it might be that neither of them is the "main" constant sample rate. For e.g. if range is 8-192kHz, the SSP/ADC might be running 44.1/48 kHz and SRC converts other rates. Also on speech capture pipeline we might be running 16kHz main rate but SRC can do from 8-192kHz.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@juimonen the intention is that the real run time rate will be passed in during hw_params(), this is then propagated through the pipeline from host component to DAI. The components will then have a chance to calculate samples per schedule based on the real rate. If an SRC is in the pipeline then it can alter the rate downstream or upstream of it so the subsequent components will use the SRC rate.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants