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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.