[MPlayer-dev-eng] MPlayer segfaults in avg_pixels16_sse2 within dsputil_mmx.c, or in filtbank.c - update
Douglas Pearless
Douglas.Pearless at pearless.co.nz
Tue Nov 4 22:53:08 CET 2008
An update, when it segfaults in filtbank.c, I notice that the
memory address for 'overlap' is 0x0 and cannot be read be Eclipse/gdb,
whereas the other variables in the block of the "for" loop can all be
read.
ideas?
Cheers Douglas.
----- Forwarded message from Douglas.Pearless at pearless.co.nz -----
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.
----- End forwarded message -----
-------------- next part --------------
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