SND_PCM_TYPE_DROUTE,
/** Loopback server plugin (not yet implemented) */
SND_PCM_TYPE_LBSERVER,
- /** Linear <-> float format conversion PCM */
+ /** Linear Integer <-> Linear Float format conversion PCM */
SND_PCM_TYPE_LINEAR_FLOAT,
/** LADSPA integration plugin */
SND_PCM_TYPE_LADSPA,
int snd_pcm_format_signed(snd_pcm_format_t format);
int snd_pcm_format_unsigned(snd_pcm_format_t format);
int snd_pcm_format_linear(snd_pcm_format_t format);
+int snd_pcm_format_float(snd_pcm_format_t format);
int snd_pcm_format_little_endian(snd_pcm_format_t format);
int snd_pcm_format_big_endian(snd_pcm_format_t format);
int snd_pcm_format_cpu_endian(snd_pcm_format_t format);
pcm_route.c pcm_mulaw.c pcm_alaw.c pcm_adpcm.c \
pcm_rate.c pcm_plug.c pcm_misc.c pcm_mmap.c pcm_multi.c \
pcm_shm.c pcm_file.c pcm_null.c pcm_share.c \
- pcm_meter.c pcm_hooks.c pcm_ladspa.c pcm_symbols.c
+ pcm_meter.c pcm_hooks.c pcm_lfloat.c pcm_ladspa.c pcm_symbols.c
noinst_HEADERS = atomic.h pcm_local.h pcm_plugin.h mask.h mask_inline.h \
interval.h interval_inline.h plugin_ops.h
(1U << SND_PCM_FORMAT_S32_BE) | \
(1U << SND_PCM_FORMAT_U32_LE) | \
(1U << SND_PCM_FORMAT_U32_BE))
+
+#define SND_PCM_FMTBIT_FLOAT \
+ ((1U << SND_PCM_FORMAT_FLOAT_LE) | \
+ (1U << SND_PCM_FORMAT_FLOAT_BE) | \
+ (1U << SND_PCM_FORMAT_FLOAT64_LE) | \
+ (1U << SND_PCM_FORMAT_FLOAT64_BE))
return snd_pcm_format_signed(format) >= 0;
}
+/**
+ * \brief Return float info for a PCM sample format
+ * \param format Format
+ * \return 0 non float, 1 float
+ */
+int snd_pcm_format_float(snd_pcm_format_t format)
+{
+ switch (format) {
+ case SNDRV_PCM_FORMAT_FLOAT_LE:
+ case SNDRV_PCM_FORMAT_FLOAT_BE:
+ case SNDRV_PCM_FORMAT_FLOAT64_LE:
+ case SNDRV_PCM_FORMAT_FLOAT64_BE:
+ return 1;
+ default:
+ return 0;
+ }
+}
+
/**
* \brief Return endian info for a PCM sample format
* \param format Format
{
snd_pcm_uframes_t missing = INT_MAX;
struct list_head *i;
- snd_pcm_sframes_t avail = snd_pcm_avail_update(slave->pcm);
+ /* snd_pcm_sframes_t avail = */ snd_pcm_avail_update(slave->pcm);
slave->hw_ptr = *slave->pcm->hw_ptr;
list_for_each(i, &slave->clients) {
snd_pcm_share_t *share = list_entry(i, snd_pcm_share_t, list);
snd_pcm_share_slave_t *slave = share->slave;
snd_pcm_t *spcm = slave->pcm;
snd_pcm_uframes_t missing;
- snd_pcm_sframes_t avail = snd_pcm_avail_update(spcm);
+ /* snd_pcm_sframes_t avail = */ snd_pcm_avail_update(spcm);
slave->hw_ptr = *slave->pcm->hw_ptr;
missing = _snd_pcm_share_missing(pcm);
if (!slave->polling) {
case SND_PCM_STATE_PREPARED:
err = 0;
goto _end;
+ default: /* nothing todo */
+ break;
}
if (slave->prepared_count == 0) {
err = snd_pcm_prepare(slave->pcm);
extern const char *_snd_module_pcm_route;
extern const char *_snd_module_pcm_share;
extern const char *_snd_module_pcm_shm;
+extern const char *_snd_module_pcm_lfloat;
extern const char *_snd_module_pcm_ladspa;
static const char **snd_pcm_open_objects[] = {
&_snd_module_pcm_route,
&_snd_module_pcm_share,
&_snd_module_pcm_shm,
+ &_snd_module_pcm_lfloat,
&_snd_module_pcm_ladspa
};