Update of /cvsroot/alsa/alsa-kernel/core/oss
In directory sc8-pr-cvs1:/tmp/cvs-serv4141

Modified Files:
        pcm_plugin.c 
Log Message:
Added rate_match() function to ignore very close rate resampling requests

Index: pcm_plugin.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/core/oss/pcm_plugin.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- pcm_plugin.c        7 Feb 2003 08:29:08 -0000       1.10
+++ pcm_plugin.c        21 Jul 2003 12:36:10 -0000      1.11
@@ -56,6 +56,17 @@
        return 0;
 }
 
+/*
+ *  because some cards might have rates "very close", we ignore
+ *  all "resampling" requests within +-5%
+ */
+static int rate_match(unsigned int src_rate, unsigned int dst_rate)
+{
+       unsigned int low = (src_rate * 95) / 100;
+       unsigned int high = (src_rate * 105) / 105;
+       return dst_rate >= low && dst_rate <= high;
+}
+
 static int snd_pcm_plugin_alloc(snd_pcm_plugin_t *plugin, snd_pcm_uframes_t frames)
 {
        snd_pcm_plugin_format_t *format;
@@ -420,7 +431,7 @@
 
        /* Format change (linearization) */
        if ((srcformat.format != dstformat.format ||
-            srcformat.rate != dstformat.rate ||
+            !rate_match(srcformat.rate, dstformat.rate) ||
             srcformat.channels != dstformat.channels) &&
            !snd_pcm_format_linear(srcformat.format)) {
                if (snd_pcm_format_linear(dstformat.format))
@@ -468,7 +479,7 @@
                                ttable[v * sv + v] = FULL;
                }
                tmpformat.channels = dstformat.channels;
-               if (srcformat.rate == dstformat.rate &&
+               if (rate_match(srcformat.rate, dstformat.rate) &&
                    snd_pcm_format_linear(dstformat.format))
                        tmpformat.format = dstformat.format;
                err = snd_pcm_plugin_build_route(plug,
@@ -490,7 +501,7 @@
        }
 
        /* rate resampling */
-       if (srcformat.rate != dstformat.rate) {
+       if (!rate_match(srcformat.rate, dstformat.rate)) {
                tmpformat.rate = dstformat.rate;
                if (srcformat.channels == dstformat.channels &&
                    snd_pcm_format_linear(dstformat.format))



-------------------------------------------------------
This SF.net email is sponsored by: VM Ware
With VMware you can run multiple operating systems on a single machine.
WITHOUT REBOOTING! Mix Linux / Windows / Novell virtual machines at the
same time. Free trial click here: http://www.vmware.com/wl/offer/345/0
_______________________________________________
Alsa-cvslog mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-cvslog

Reply via email to