-
Notifications
You must be signed in to change notification settings - Fork 347
topology2: add google rtc aec support #7237
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
0d13fae to
64768c1
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In general logic looks good, but we need to work on the naming and definitions. Is this specific to "google-rtc-audio-processing" or are parts of the PR something that apply to allt types of AEC modules? We need to identify which parts are specific to Google RTC, and which are generic definitions that can be used by all AEC implementes (current there are no others in SOF upstream but this is a very common type of DSP audio module).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
AEC is not a generic solution, there's just too many variants.
The other concern is that this is starting to be too much for a nocodec topology, which has become a dumping ground. We are not going to add all possible variants of aec, smart-amp, wov in nocodec.conf. We need to revisit the goals and how tests will be handled.
NAK NAK NAK.
0c57011 to
297604e
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
not ok with the assumption that the AEC is directly connected to a copier. This may or may not be true if noise suppression comes into play. That's why we introduced the 3 input paths (raw, AEC, AEC+NS).
In other words, we need to defer the connections to the very top level and not create artificial restrictions we'll have to undo later.
Adding @cujomalainey and @singalsu for additional comments.
tools/topology/topology2/include/components/google-rtc-aec.conf
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
we should never assume how an element is connected.
Specifically in this case, it's possible that there is a noise-suppression inserted before the host copier, or that there are two input paths, one with a direct host copier and one with the noise suppression.
I think we need to leave the choice of how an algorithm is inserted to the top-level topology. Don't introduce restrictions when we already know they don't always hold.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@plbossart In current plan, we have three pipelines for output: (1) raw (2) AEC (3) AEC+NS. This PR focus on pipeline (2) and if we have NS module, we will change one of AEC pipeline to AEC+NS.
Do you prefer to merge (2) and (3) with some flag ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@RanderWang not following what you meant by "we will change one of AEC pipeline to AEC+NS".
It's the same AEC in both cases, no? This is a hierarchical set of paths.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is my understanding of the ask:
DMIC ---> copier ---> host
|
+------> AEC -----> copier -----> host
|
+----------> NS -------> copier -----------> host
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
thanks. My understanding is. The advantage is that it will skip 2 copiers to improve performance.
Copier DMIC --> EQ -----> copier module ---------> host
|----------------> AEC ------> host
|------> AEC ------> NS---> host
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@plbossart we are planning to roll AEC out on spk+dmic, it would be good to leave a HS+HS-mic option for experimentation in the config for us to test with
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry, I don't get your point @cujomalainey. It might be easier to provide Rander with a picture of the desired topology...
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I meant an image of how the noise reduction will be added @cujomalainey. I suggested a hierarchy in #7237 (comment) and @RanderWang suggested two separate instances of AEC in #7237 (comment)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@plbossart ah thanks I missed that, hierarchy is better, less instances.
|
@RanderWang Can you share a tplgtool.py created picture of this topology? |
@plbossart thanks. @thesofproject/google should be CCed on all things related to our AEC and related components. Thanks |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'll reinforce this again as in my other PR. I will not approve commits that relate to google code if I don't have the documentation to approve what I am reviewing. please prioritize these documents
tools/topology/topology2/include/components/google-rtc-aec.conf
Outdated
Show resolved
Hide resolved
tools/topology/topology2/include/components/google-rtc-aec.conf
Outdated
Show resolved
Hide resolved
tools/topology/topology2/include/components/google-rtc-aec.conf
Outdated
Show resolved
Hide resolved
tools/topology/topology2/include/components/google-rtc-aec.conf
Outdated
Show resolved
Hide resolved
tools/topology/topology2/include/components/google-rtc-aec.conf
Outdated
Show resolved
Hide resolved
tools/topology/topology2/include/pipelines/cavs/google-rtc-aec-capture.conf
Outdated
Show resolved
Hide resolved
tools/topology/topology2/platform/intel/google-rtc-aec-generic.conf
Outdated
Show resolved
Hide resolved
According to the question, a documents of topology2 and ipc4 is needed. @lgirdwood this is a big task |
@singalsu Do we need gain for each pipeline ? if not we can remove them and one copier module so that we have better performance |
297604e to
4eb25ee
Compare
Thanks for the picture. I would place AEC up one layer and have and leave gains there after AEC as placeholder for other processing. Gain may be needed for mic mute feature anyway with some device button & led. But it depends on what the google rtc aec topology requirement is. Can you please comment @cujomalainey @johnylin76 . |
|
I don't think we need gain on capture, I believe it includes an AGC @perahgren to correct me if I am wrong |
|
@cujomalainey could you please help to answer #7237 (comment). What is your picture of pipeline ? |
f6a1ba8 to
d8dacd0
Compare
|
@plbossart @cujomalainey this diagram is for the pipeline. There is no NS support now, so I temporarily gain for NS. And Copier.SSP.8.1 provides loop back data of speaker playback stream. |
Ack - @mmaka1 and @mwasko have some sof-docs text and diagrams now in progress to help explain the new features being upstreamed into sof-docs. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks @RanderWang , all my concerns now addressed.
tools/topology/topology2/include/components/google-rtc-aec.conf
Outdated
Show resolved
Hide resolved
|
Can one of the admins verify this patch? |
|
@RanderWang Status of this? |
@kv2019i rebase to latest code. @cujomalainey do you have any comments ? If not, let's merge it. |
|
https://sof-ci.01.org/sofpr/PR7237/build7147/devicetest/index.html failed with some PS: maybe a direct link to the new sof-docs would be useful? |
This PR only affects sof-mtl-max98357a-rt5682.conf, not the nocodec topology. sof-docs for google-rtc-aec ? Actually this PR follows the topology1 for google-rtc-aec and it is better for google to provide how their aec work. |
|
SOFCI TEST |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
getting close, thanks
tools/topology/topology2/include/components/google-rtc-aec.conf
Outdated
Show resolved
Hide resolved
Goolge rtc aec only supports 16bits input & output and 2 channels Signed-off-by: Rander Wang <[email protected]>
This aec is connected to host copier Signed-off-by: Rander Wang <[email protected]>
Top topology can include this conf file to enable google rtc aec Signed-off-by: Rander Wang <[email protected]>
Add google rtc aec in topolog for chrome project Signed-off-by: Rander Wang <[email protected]>
|
@cujomalainey updated, thanks |




No description provided.