]> git.alsa-project.org Git - alsa-lib.git/commitdiff
Added lfloat plugin code (not finished)
authorJaroslav Kysela <perex@perex.cz>
Mon, 26 Nov 2001 16:08:49 +0000 (16:08 +0000)
committerJaroslav Kysela <perex@perex.cz>
Mon, 26 Nov 2001 16:08:49 +0000 (16:08 +0000)
include/pcm.h
src/pcm/Makefile.am
src/pcm/pcm_local.h
src/pcm/pcm_misc.c
src/pcm/pcm_share.c
src/pcm/pcm_symbols.c

index e86662d56e07c71371b666358ad204d1b75549b2..2782b34337bfe8c6ec39955e53fd724944d1d4ec 100644 (file)
@@ -318,7 +318,7 @@ enum _snd_pcm_type {
        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,
@@ -808,6 +808,7 @@ snd_pcm_sframes_t snd_pcm_mmap_readn(snd_pcm_t *pcm, void **bufs, snd_pcm_uframe
 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);
index fe42e1181d5e054f831ba91793b01f84e1e9b2b5..42dd6be2dbf0a0aeaf922a896da741ae51baef9e 100644 (file)
@@ -7,7 +7,7 @@ libpcm_la_SOURCES = atomic.c mask.c interval.c \
                    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
 
index 5fef6ff0e97970f3089614b599285b11cb1f6b6c..bf963d52a30f2bd4e2c6ba9c15d2127ace014a9d 100644 (file)
@@ -594,3 +594,9 @@ int snd_pcm_conf_generic_id(const char *id);
         (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))
index a33375dcd2d36dbb3ae6d91caed3fad3272f73cd..b96621f9c26cbac965e1d864d73bf9bb01f738a6 100644 (file)
@@ -81,6 +81,24 @@ int snd_pcm_format_linear(snd_pcm_format_t format)
        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
index 2fa4170a2dc489306958ac7f30f6ca70d2d3b0b6..ec282faae812d6e2a1c7ec09f33d79332d063978 100644 (file)
@@ -324,7 +324,7 @@ static snd_pcm_uframes_t _snd_pcm_share_slave_missing(snd_pcm_share_slave_t *sla
 {
        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);
@@ -396,7 +396,7 @@ static void _snd_pcm_share_update(snd_pcm_t *pcm)
        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) {
@@ -823,6 +823,8 @@ static int snd_pcm_share_prepare(snd_pcm_t *pcm)
        case SND_PCM_STATE_PREPARED:
                err = 0;
                goto _end;
+       default:        /* nothing todo */
+               break;
        }
        if (slave->prepared_count == 0) {
                err = snd_pcm_prepare(slave->pcm);
index 83f55d821dc18a2a22185d9f8d198d2791b86750..1c0a7b97a1442e2ffc41cb5f14347604a3ca386e 100644 (file)
@@ -36,6 +36,7 @@ extern const char *_snd_module_pcm_rate;
 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[] = {
@@ -55,6 +56,7 @@ 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
 };