From: Pavel Hofman <pavel.hofman@ivitera.com>
To: Takashi Iwai <tiwai@suse.de>
Cc: alsa-devel <alsa-devel@alsa-project.org>
Subject: Re: alsa-lib rate plugins - float samples - patches
Date: Fri, 01 Jul 2011 11:27:03 +0200 [thread overview]
Message-ID: <4E0D92E7.1020907@ivitera.com> (raw)
In-Reply-To: <s5hliwjwkmp.wl%tiwai@suse.de>
Dne 30.6.2011 14:48, Takashi Iwai napsal(a):
> At Tue, 28 Jun 2011 09:11:02 +0200,
>
> Thanks for the patches.
> The basic strategy looks good to me, but a few things to be considered:
>
> - The extension of API should be done in binary-compatible way; i.e.
> append new stuff to the existing structure, not inserting in the
> middle. In that way, you can use still old plugins.
Hi Takashi, thanks a lot for your reply. Would moving the new method to
the end of snd_pcm_rate_ops struct suffice? Or do I have to create a new
API number with corresponding checks? I am afraid the latter is the case :)
>
> - From the performance POV, we may need to have the built-in
> float conversion in rate plugin indeed. Anyway, if rate plugin
> supports float, it should add FLOAT as the supported format.
> This needs changes in the parameter setup in rate plugin.
> Then it should accept the float format as is without conversions.
If I understand correctly, the rate plugin accepts only linear formats
now. What was the original reason to exclude float? The "convert" API
method is generic enough, perhaps I should add float support to all the
rate converters using the API "convert" method. Again there is the
question of new API version - the new one would offer convert_float and
allow float samples in the generic convert method.
The specific convert_s16/float methods in pcm_rate.c can be modified to
accept float too.
>
> - The float-support has to be disabled when the float is suppressed
> via configure option. Also this needs to be exposed somehow to the
> plugin.
Is softfloat/HAVE_SOFT_FLOAT the corresponding configure option? BTW, is
the ifndef check in pcm_softvol.c correct?
#ifndef HAVE_SOFT_FLOAT
svol->dB_value = calloc(resolution, sizeof(unsigned int));
if (! svol->dB_value) {
SNDERR("cannot allocate dB table");
return -ENOMEM;
}
svol->min_dB = min_dB;
svol->max_dB = max_dB;
for (i = 0; i <= svol->max_val; i++) {
double db = svol->min_dB + (i * (svol->max_dB -
svol->min_dB)) / svol->max_val;
double v = (pow(10.0, db / 20.0) * (double)(1 <<
VOL_SCALE_SHIFT));
svol->dB_value[i] = (unsigned int)v;
}
if (svol->zero_dB_val)
svol->dB_value[svol->zero_dB_val] = 65535;
#else
SNDERR("Cannot handle the given dB range and resolution");
return -EINVAL;
#endif
It occurs to me the check should be ifdef, but perhaps I just get it
wrong :)
>
> - At best, the rate converters (plugin of plugin) should support both
> cases with and without float.
Well, the libsamplerate is using float internally, I am afraid the
float-less case would require disabling this rate converter alltogether.
Thanks a lot for your help and guidance.
Pavel.
next prev parent reply other threads:[~2011-07-01 9:27 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-20 7:35 alsa-lib rate plugins - float samples Pavel Hofman
2011-06-28 7:11 ` alsa-lib rate plugins - float samples - patches Pavel Hofman
2011-06-30 12:48 ` Takashi Iwai
2011-07-01 9:27 ` Pavel Hofman [this message]
2011-07-01 9:35 ` Takashi Iwai
2011-07-01 9:50 ` Pavel Hofman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4E0D92E7.1020907@ivitera.com \
--to=pavel.hofman@ivitera.com \
--cc=alsa-devel@alsa-project.org \
--cc=tiwai@suse.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox