[MPlayer-dev-eng] MPlayer segfaults in avg_pixels16_sse2 within dsputil_mmx.c, or in filtbank.c

Douglas Pearless Douglas.Pearless at pearless.co.nz
Tue Nov 4 22:46:13 CET 2008



   I have just recompiled the latest mplayer from source:

   ./configure --enable-debug=3
./make -j 30

   mplayer dvb://"TV ONE"

   I run it using Eclipse and GDB and it runs for a short while and  
then segfaults, at the asm volatile block:

   static void avg_pixels16_sse2(uint8_t *block, const uint8_t  
*pixels, int line_size, int h)
{
    asm volatile(
         "1:                            \n\t"
         "movdqu (%1), %%xmm0           \n\t"
         "movdqu (%1,%3), %%xmm1        \n\t"
         "movdqu (%1,%3,2), %%xmm2      \n\t"
         "movdqu (%1,%4), %%xmm3        \n\t"
         "pavgb  (%2), %%xmm0           \n\t"
         "pavgb  (%2,%3), %%xmm1        \n\t"
         "pavgb  (%2,%3,2), %%xmm2      \n\t"
         "pavgb  (%2,%4), %%xmm3        \n\t"
         "movdqa %%xmm0, (%2)           \n\t"
         "movdqa %%xmm1, (%2,%3)        \n\t"
         "movdqa %%xmm2, (%2,%3,2)      \n\t"
         "movdqa %%xmm3, (%2,%4)        \n\t"
         "subl $4, %0                   \n\t"
         "lea (%1,%3,4), %1             \n\t"
         "lea (%2,%3,4), %2             \n\t"
         "jnz 1b                        \n\t"
         : "+g"(h), "+r" (pixels),  "+r" (block)
         : "r"((x86_reg)line_size), "r"((x86_reg)3L*line_size)
         : "memory"
        );
}

   I am using an intel QX6800 with MythBuntu (up to the latest patches  
here too) and a NOVA T 500 tuner here in New Zealand.

   Sometimes I get from the console:

   A:15621.3 V:15618.1 A-V:  3.238 ct:  1.571 924/924 50%  4% 43.8%  
411 0         
A:15621.3 V:15618.1 A-V:  3.209 ct:  1.573 925/925 50%  4% 43.8% 412  
0         
A:15621.3 V:15618.2 A-V:  3.156 ct:  1.575 926/926 50%  4% 43.7% 413  
0         
A:15621.3 V:15618.1 A-V:  3.186 ct:  1.577 927/927 50%  4% 43.7% 414  
0         
A:15621.3 V:15618.2 A-V:  3.134 ct:  1.579 928/928 50%  4% 43.6% 415  
0         
[h264 @ 0x86e6cd0]concealing 3047 DC, 3047 AC, 3047 MV errors
A:15621.3 V:15618.4 A-V:  2.962 ct:  1.581 929/929 50%  4% 43.6% 416  
0         
A:15621.3 V:15618.3 A-V:  3.058 ct:  1.583 930/930 50%  4% 43.5% 417  
0         
A:15621.4 V:15618.2 A-V:  3.111 ct:  1.585 931/931 50%  4% 43.5% 418  
0         
A:15621.3 V:15618.2 A-V:  3.120 ct:  1.587 932/932 50%  4% 43.4% 419  
0         
A:15621.4 V:15618.3 A-V:  3.090 ct:  1.589 933/933 50%  4% 43.4% 420  
0         
A:15621.4 V:15618.3 A-V:  3.037 ct:  1.591 934/934 50%  4% 43.3% 421  
0         
A:15621.4 V:15618.3 A-V:  3.067 ct:  1.593 935/935 50%  4% 43.3% 422  
0         
A:15621.6 V:15618.3 A-V:  3.207 ct:  1.595 936/936 50%  4% 43.6% 423  
0         
A:15621.5 V:15618.5 A-V:  3.016 ct:  1.597 937/937 50%  4% 43.5% 424  
0         
A:15621.6 V:15618.4 A-V:  3.113 ct:  1.599 938/938 50%  4% 43.5% 425  
0         
A:15621.6 V:15618.4 A-V:  3.151 ct:  1.601 939/939 50%  4% 43.4% 426  
0         
A:15621.6 V:15618.4 A-V:  3.182 ct:  1.603 940/940 50%  4% 43.4% 427  
0         
A:15621.6 V:15618.4 A-V:  3.150 ct:  1.605 941/941 50%  4% 43.4% 428  
0         
FAAD: error: Maximum number of scalefactor bands exceeded, trying to resync!

   and mplayer segfaults in filtbank.c:

           /* add second half output of previous frame to windowed  
output of current frame */
        for (i = 0; i < nlong; i+=4)
        {
            time_out[i]   = overlap[i]   +  
MUL_F(transf_buf[i],window_long_prev[i]);
            time_out[i+1] = overlap[i+1] +  
MUL_F(transf_buf[i+1],window_long_prev[i+1]);
            time_out[i+2] = overlap[i+2] +  
MUL_F(transf_buf[i+2],window_long_prev[i+2]);
            time_out[i+3] = overlap[i+3] +  
MUL_F(transf_buf[i+3],window_long_prev[i+3]);
        }

   in the first line of the "for" loop, with i = 4

   Ideas?

   Cheers

   Douglas.






More information about the MPlayer-dev-eng mailing list