OK, I found it. The problem - in my case at least - lies in
svolume_mmx.c (not svolume_sse.c). Reverting that file back to the
previous version gets rid of the problem. These are the changes which
caused the appearance of the distorted sound problem on my box:

diff -pruN ../pulseaudio-0.9.16~test7-14-g7ca81/src/pulsecore/svolume_mmx.c 
src/pulsecore/svolume_mmx.c
--- ../pulseaudio-0.9.16~test7-14-g7ca81/src/pulsecore/svolume_mmx.c    
2009-09-20 17:26:04.657239828 +0200
+++ src/pulsecore/svolume_mmx.c 2009-09-18 22:21:44.000000000 +0200
@@ -57,14 +57,12 @@
       " punpcklwd %%mm4, "#s"        \n\t" /* .. |    0  |   p0  | */          
         \
       " pcmpgtw "#v", %%mm4          \n\t" /* .. |    0  | s(vl) | */          
         \
       " pand "#s", %%mm4             \n\t" /* .. |    0  |  (p0) |  (vl >> 15) 
& p */   \
-      " movq %%mm6, %%mm5            \n\t" /* .. |  ffff |   0   | */          
         \
-      " pand "#v", %%mm5             \n\t" /* .. |   vh  |   0   | */          
         \
-      " por %%mm5, %%mm4             \n\t" /* .. |   vh  |  (p0) | */          
         \
-      " pmulhw "#s", "#v"            \n\t" /* .. |    0  | vl*p0 | */          
         \
-      " paddw %%mm4, "#v"            \n\t" /* .. |   vh  | vl*p0 | vh + sign 
correct */ \
-      " pslld $16, "#s"              \n\t" /* .. |   p0  |    0  | */          
         \
-      " por %%mm7, "#s"              \n\t" /* .. |   p0  |    1  | */          
         \
-      " pmaddwd "#s", "#v"           \n\t" /* .. |    p0 * v0    | */          
         \
+      " movq "#s", %%mm5             \n\t"                                     
         \
+      " pmulhw "#v", "#s"            \n\t" /* .. |    0  | vl*p0 | */          
         \
+      " paddw %%mm4, "#s"            \n\t" /* .. |    0  | vl*p0 | + sign 
correct */    \
+      " psrld $16, "#v"              \n\t" /* .. |    0  |   vh  | */          
         \
+      " pmaddwd %%mm5, "#v"          \n\t" /* .. |    p0 * vh    | */          
         \
+      " paddd "#s", "#v"             \n\t" /* .. |    p0 * v0    | */          
         \
       " packssdw "#v", "#v"          \n\t" /* .. | p1*v1 | p0*v0 | */

 /* approximately advances %3 = (%3 + a) % b. This function requires that
@@ -105,10 +103,6 @@ pa_volume_s16ne_mmx (int16_t *samples, i
     __asm__ __volatile__ (
         " xor %3, %3                    \n\t"
         " sar $1, %2                    \n\t" /* length /= sizeof (int16_t) */
-        " pcmpeqw %%mm6, %%mm6          \n\t" /* .. |  ffff |  ffff | */
-        " pcmpeqw %%mm7, %%mm7          \n\t" /* .. |  ffff |  ffff | */
-        " pslld  $16, %%mm6             \n\t" /* .. |  ffff |     0 | */
-        " psrld  $31, %%mm7             \n\t" /* .. |     0 |     1 | */

         " test $1, %2                   \n\t" /* check for odd samples */
         " je 2f                         \n\t"

The simplest solution is to revert that piece of assembly back to what
it was. The attached patch accomplishes this.

** Attachment added: "revert svolume_mmx.c back to last known good version"
   
http://launchpadlibrarian.net/32144505/revert_svolume_mmx_to_known_good_version.patch

-- 
pulseaudio crackle/distortion with cs46xx on latest update
https://bugs.launchpad.net/bugs/428619
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to