linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
* [PATCH V3 0/2] Support more sample rate in asrc
@ 2019-04-17  9:06 S.j. Wang
  2019-04-17  9:06 ` [PATCH V3 1/2] ASoC: fsl_asrc: replace the process_option table with function S.j. Wang
  2019-04-17  9:06 ` [PATCH V3 2/2] ASoC: fsl_asrc: Unify the supported input and output rate S.j. Wang
  0 siblings, 2 replies; 11+ messages in thread
From: S.j. Wang @ 2019-04-17  9:06 UTC (permalink / raw)
  To: timur, nicoleotsuka, Xiubo.Lee, festevam, broonie, alsa-devel
  Cc: linuxppc-dev, linux-kernel

Support more sample rate in asrc

Shengjiu Wang (2):
  ASoC: fsl_asrc: replace the process_option table with function
  ASoC: fsl_asrc: Unify the supported input and output rate

Changes in v3
- remove FSL_ASRC_RATES
- refine fsl_asrc_sel_proc according to comments

Changes in v2
- add more comments in code
- add commit "Unify the supported input and output rate"

 sound/soc/fsl/fsl_asrc.c | 108 +++++++++++++++++++++++++++++++++--------------
 1 file changed, 76 insertions(+), 32 deletions(-)

-- 
1.9.1


^ permalink raw reply	[flat|nested] 11+ messages in thread
* Re: [PATCH V3 1/2] ASoC: fsl_asrc: replace the process_option table with function
@ 2019-04-18  2:37 S.j. Wang
  2019-04-18  8:03 ` Nicolin Chen
  0 siblings, 1 reply; 11+ messages in thread
From: S.j. Wang @ 2019-04-18  2:37 UTC (permalink / raw)
  To: Nicolin Chen
  Cc: alsa-devel, timur, Xiubo.Lee, festevam, linux-kernel, broonie,
	linuxppc-dev

Hi

> 
> Hi Shengjiu,
> 
> This looks better. Just a couple of more small comments inline.
> 
> On Wed, Apr 17, 2019 at 09:06:18AM +0000, S.j. Wang wrote:
> 
> > +static int fsl_asrc_sel_proc(int inrate, int outrate, int *pre_proc,
> > +                          int *post_proc)
> 
> Just a nit: it looks better by grouping them two-two.
> 
> static int fsl_asrc_sel_proc(int inrate, int outrate,
>                              int *pre_proc, int *post_proc)
> 
> > +     /* Condition for selection of post-processing */
> > +     post_proc_cond2 = (inrate * 15 > outrate * 16 && outrate < 56000) ||
> > +             (inrate > 56000 && outrate < 56000);
> 
> Could align the indentation:
>         post_proc_cond2 = (inrate * 15 > outrate * 16 && outrate < 56000) ||
>                           (inrate > 56000 && outrate < 56000);
> 
> Here:
> > +     /* Does not support cases: Tsout > 8.125 * Tsin */
> > +     if (inrate * 8 > 65 * outrate)
> > +             return -EINVAL;
> And here:
> > +     ret = fsl_asrc_sel_proc(inrate, outrate, &pre_proc, &post_proc);
> > +     if (ret) {
> > +             pair_err("No supported pre-processing options\n");
> > +             return ret;
> > +     }
> 
> Instead of a general message, I was thinking of a more specific one by
> telling users that the ratio between the two rates isn't supported --
> something similar to what I suggested previously:
> 
>         pair_err("Does not support %d (input) > 8.125 * %d (output)\n",
>                  outrate, inrate);
> 
In fsl_asrc_sel_proc,  we can't call the pair_err for there is no
struct fsl_asrc_pair *pair in the argument. Do you think we need to
add this argument?

> Thanks
> Nicolin

^ permalink raw reply	[flat|nested] 11+ messages in thread
* Re: [PATCH V3 1/2] ASoC: fsl_asrc: replace the process_option table with function
@ 2019-04-18  8:50 S.j. Wang
  2019-04-18  9:05 ` Nicolin Chen
  0 siblings, 1 reply; 11+ messages in thread
From: S.j. Wang @ 2019-04-18  8:50 UTC (permalink / raw)
  To: Nicolin Chen
  Cc: alsa-devel, timur, Xiubo.Lee, festevam, linux-kernel, broonie,
	linuxppc-dev

Hi

> 
> 
> On Thu, Apr 18, 2019 at 02:37:03AM +0000, S.j. Wang wrote:
> > > Here:
> > > > +     /* Does not support cases: Tsout > 8.125 * Tsin */
> > > > +     if (inrate * 8 > 65 * outrate)
> 
> Though it might not matter any more (see my last comments), it should be
> "inrate > 8.125 * outrate" in the comments.
> 
> > > > +             return -EINVAL;
> > > And here:
> > > > +     ret = fsl_asrc_sel_proc(inrate, outrate, &pre_proc, &post_proc);
> > > > +     if (ret) {
> > > > +             pair_err("No supported pre-processing options\n");
> > > > +             return ret;
> > > > +     }
> > >
> > > Instead of a general message, I was thinking of a more specific one
> > > by telling users that the ratio between the two rates isn't
> > > supported -- something similar to what I suggested previously:
> > >
> > >         pair_err("Does not support %d (input) > 8.125 * %d (output)\n",
> > >                  outrate, inrate);
> > >
> 
> > In fsl_asrc_sel_proc,  we can't call the pair_err for there is no
> > struct fsl_asrc_pair *pair in the argument. Do you think we need to
> > add this argument?
> 
> I's thinking of adding it to the top of fsl_asrc_config_pair() as a part of
> inrate-outrate-validation, however, I found that actually we already have a
> similar check in the early routine:
>         if ((outrate > 8000 && outrate < 30000) &&
>             (outrate/inrate > 24 || inrate/outrate > 8)) {
>                 pair_err("exceed supported ratio range [1/24, 8] for \
>                          inrate/outrate: %d/%d\n", inrate, outrate);
>                 return -EINVAL;
>         }
> 
> And this is according to IMX6DQRM:
>     Limited support for the case when output sampling rates is
>     between 8kHz and 30kHz. The limitation is the supported ratio
>     (Fsin/Fsout) range as between 1/24 to 8
> 
> This should cover your 8.125 condition already, even if having an outrate
> range between [8KHz, 30KHz] check, since an outrate above 30KHz will not
> have an inrate bigger than 8.125 times of it, given the maximum input rate
> is 192KHz.
> 
> So I think that we can just drop that 8.125 condition from your change and
> there's no need to error out any more.
> 
No, if outrate=8kHz,  inrate > 88.2kHz, these cases are not supported. 
This is not covered by

        if ((outrate > 8000 && outrate < 30000) &&
            (outrate/inrate > 24 || inrate/outrate > 8)) {

> However, we do need a patch to fix a potential rounding issue:
> -           (outrate/inrate > 24 || inrate/outrate > 8)) {
> +           (outrate > 24 * inrate || inrate > 8 * outrate)) {
> 
> Should fix the missing whitespace also. And it will be needed to send to
> stable kernel too. Will you help submit a change?
> 
> Thanks

^ permalink raw reply	[flat|nested] 11+ messages in thread
* Re: [PATCH V3 1/2] ASoC: fsl_asrc: replace the process_option table with function
@ 2019-04-18  9:37 S.j. Wang
  2019-04-18 19:17 ` Nicolin Chen
  0 siblings, 1 reply; 11+ messages in thread
From: S.j. Wang @ 2019-04-18  9:37 UTC (permalink / raw)
  To: Nicolin Chen
  Cc: alsa-devel, timur, Xiubo.Lee, festevam, linux-kernel, broonie,
	linuxppc-dev

Hi

> 
> On Thu, Apr 18, 2019 at 08:50:48AM +0000, S.j. Wang wrote:
> > > And this is according to IMX6DQRM:
> > >     Limited support for the case when output sampling rates is
> > >     between 8kHz and 30kHz. The limitation is the supported ratio
> > >     (Fsin/Fsout) range as between 1/24 to 8
> > >
> > > This should cover your 8.125 condition already, even if having an
> > > outrate range between [8KHz, 30KHz] check, since an outrate above
> > > 30KHz will not have an inrate bigger than 8.125 times of it, given
> > > the maximum input rate is 192KHz.
> > >
> > > So I think that we can just drop that 8.125 condition from your
> > > change and there's no need to error out any more.
> > >
> > No, if outrate=8kHz,  inrate > 88.2kHz, these cases are not supported.
> > This is not covered by
> >
> >         if ((outrate > 8000 && outrate < 30000) &&
> >             (outrate/inrate > 24 || inrate/outrate > 8)) {
> 
> Good catch. The range should be [8KHz, 30KHz] vs. (8KHz, 32KHz) in the
> code. Then I think the fix should be at both lines:
> 
> -         if ((outrate > 8000 && outrate < 30000) &&
> -             (outrate/inrate > 24 || inrate/outrate > 8)) {
> +         if ((outrate >= 8000 && outrate =< 30000) &&
> +             (outrate > 24 * inrate || inrate > 8 * outrate)) {
> 
> Overall, I think we should fix this instead of adding an extra one, since it is
> very likely saying the same thing.

Actually if outrate < 8kHz, there will be issue too.

Best regards
Wang shengjiu

^ permalink raw reply	[flat|nested] 11+ messages in thread
* Re: [PATCH V3 1/2] ASoC: fsl_asrc: replace the process_option table with function
@ 2019-04-19 10:21 S.j. Wang
  0 siblings, 0 replies; 11+ messages in thread
From: S.j. Wang @ 2019-04-19 10:21 UTC (permalink / raw)
  To: Nicolin Chen
  Cc: alsa-devel, timur, Xiubo.Lee, festevam, linux-kernel, broonie,
	linuxppc-dev

Hi

> 
> 
> On Thu, Apr 18, 2019 at 09:37:06AM +0000, S.j. Wang wrote:
> > > > > And this is according to IMX6DQRM:
> > > > >     Limited support for the case when output sampling rates is
> > > > >     between 8kHz and 30kHz. The limitation is the supported ratio
> > > > >     (Fsin/Fsout) range as between 1/24 to 8
> > > > >
> > > > > This should cover your 8.125 condition already, even if having
> > > > > an outrate range between [8KHz, 30KHz] check, since an outrate
> > > > > above 30KHz will not have an inrate bigger than 8.125 times of
> > > > > it, given the maximum input rate is 192KHz.
> > > > >
> > > > > So I think that we can just drop that 8.125 condition from your
> > > > > change and there's no need to error out any more.
> > > > >
> > > > No, if outrate=8kHz,  inrate > 88.2kHz, these cases are not supported.
> > > > This is not covered by
> > > >
> > > >         if ((outrate > 8000 && outrate < 30000) &&
> > > >             (outrate/inrate > 24 || inrate/outrate > 8)) {
> > >
> > > Good catch. The range should be [8KHz, 30KHz] vs. (8KHz, 32KHz) in
> > > the code. Then I think the fix should be at both lines:
> > >
> > > -         if ((outrate > 8000 && outrate < 30000) &&
> > > -             (outrate/inrate > 24 || inrate/outrate > 8)) {
> > > +         if ((outrate >= 8000 && outrate =< 30000) &&
> > > +             (outrate > 24 * inrate || inrate > 8 * outrate)) {
> > >
> > > Overall, I think we should fix this instead of adding an extra one,
> > > since it is very likely saying the same thing.
> >
> > Actually if outrate < 8kHz, there will be issue too.
> 
> Here is the thing, the RM doesn't explicitly state that ASRC can support a
> lower output sample rate than 8KHz. And I actually had a concern when
> reviewing your PATCH-2, as the table of supported output sample rate no
> longer matches RM.
> 
> If you've verified a lower output sample rate working solid with the
> process_option function, that means our driver can go beyond the
> limitation mentioned in the RM, then I believe [8KHz, 32KHz] should be
> updated too -- that says we can do:
> -       if ((outrate > 8000 && outrate < 30000) &&
> -           (outrate/inrate > 24 || inrate/outrate > 8)) {
> +       if ((outrate >= 5512 && outrate =< 30000) &&
> +           (outrate > 24 * inrate || inrate > 8 * outrate)) {
> 
> Actually "ourate > 24 * inrate" is kind of pointless for range [5KHz, 32KHz]
> but we can keep it since it matches RM.

Ok, will send v4.

Best regards
Wang shengjiu

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2019-04-19 10:23 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-04-17  9:06 [PATCH V3 0/2] Support more sample rate in asrc S.j. Wang
2019-04-17  9:06 ` [PATCH V3 1/2] ASoC: fsl_asrc: replace the process_option table with function S.j. Wang
2019-04-17 18:52   ` Nicolin Chen
2019-04-17  9:06 ` [PATCH V3 2/2] ASoC: fsl_asrc: Unify the supported input and output rate S.j. Wang
2019-04-18  2:37 [PATCH V3 1/2] ASoC: fsl_asrc: replace the process_option table with function S.j. Wang
2019-04-18  8:03 ` Nicolin Chen
2019-04-18  8:50 S.j. Wang
2019-04-18  9:05 ` Nicolin Chen
2019-04-18  9:37 S.j. Wang
2019-04-18 19:17 ` Nicolin Chen
2019-04-19 10:21 S.j. Wang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).