The i810_audio driver supports really weird sample rates. Eg:
44100 -> 43512
48000 -> 47360

In addition, some i810's only support 48000 as a sample rate -- I added this rate to the list.

The i810 driver bases its rates off rates like 48000 and factors in an offset based on DMA transfer rate (see i810_configure_clocking() in i810_audio.c) which accounts for the discrepancy.

As the OSS driver already has a 1% fudge factor in it for the requested vs supplied sample rate, the quick & dirty fix is to bump that factor up to 2%, which gets it working on my machine at home :)


Index: client/audiosvc/hxaudses.cpp
===================================================================
RCS file: /cvsroot/client/audiosvc/hxaudses.cpp,v
retrieving revision 1.39.2.3.2.1
diff -u -r1.39.2.3.2.1 hxaudses.cpp
--- client/audiosvc/hxaudses.cpp        13 Dec 2004 23:12:44 -0000      
1.39.2.3.2.1
+++ client/audiosvc/hxaudses.cpp        16 Jan 2005 05:56:46 -0000
@@ -162,7 +162,8 @@
                                                 16000,
                                                 22050,
                                                 32000,
-                                                44100
+                                                44100,
+                                                48000
                                                 };
 #else
 const unsigned short z_anValidSampleRates[] = { 11025,
Index: audio/device/platform/unix/audlinux_oss.cpp
===================================================================
RCS file: /cvsroot/audio/device/platform/unix/audlinux_oss.cpp,v
retrieving revision 1.6.18.1
diff -u -r1.6.18.1 audlinux_oss.cpp
--- audio/device/platform/unix/audlinux_oss.cpp 9 Jul 2004 02:01:42 -0000      
1.6.18.1
+++ audio/device/platform/unix/audlinux_oss.cpp 16 Jan 2005 05:56:58 -0000
@@ -677,8 +677,11 @@
     //instead of 44100 (.2%) and 7984 instead of 8000 (.6%).
     //So, if we are close enough just say it is OK.
     //How about 1%?
+
+    //XXXRGG: i810 gives sample rates like 43512 for 44100 (1.3%), how
+    //about 2%?
     fTmp = (float)ulTmp/(float)pFormat->ulSamplesPerSec;
-    if( fabs(1.0-fTmp) > .01 )
+    if( fabs(1.0-fTmp) > .02 )
     {
         //It is NOT supported
         retCode = RA_AOE_BADFORMAT;
_______________________________________________
Audio-dev mailing list
[email protected]
http://lists.helixcommunity.org/mailman/listinfo/audio-dev

Reply via email to