[mythtv] XvMC crashing - gdb backtrace

Craig Rindy developstuff at qwest.net
Sun Nov 23 21:47:51 EST 2003


I get the same segfault with both my MX440 or FX5200Ultra (same backtrace, so I won't bother duplicating that).  I believe there are two issues:

Issue #1:  The fact that it's segfaulting.  I believe I've tracked it down to NuppelVideoPlayer::InitVideo not heeding the return value (in this case:  false) from its calls to VideoOutput::Init (in this case:  VideoOutputXvMC::Init).  Could someone explain where/how an initialization failure should be handled so that we can gracefully fail?

Issue #2:  The underlying problem which will keep us from watching video even if the segfault is cured.  The XvMC context is not being created, which could be a problem with the way MythTV is using the nVidia API or it could be an internal problem within the implementation of the nVidia API.  My guess is the latter since nVidia seems to have been making many mistakes for the past year or more in their Linux support, but I'll try to look at the former anyway (I'm totally green to all of this, but it's worth a look).  I went back as far as build 4191 of the nVidia drivers with no joy; I wondered why no one else seemed to be having this problem.  The relevant lines in the output are:

> NV: could not map register space on /dev/nvidia0 at 0xec000002 for 0x1000 bytes (Invalid argument)
> Unable to create XvMC Context

Cheese makes me poop.

Chris Wieringa wrote:
> Hey all,
>   Alright, I'm having some problems getting XvMC working on MythTV .12 with my GF4MX.  Basically, I can get it compiled correctly and it starts running fine.  I can watch one program using XvMC, but after the first program any additional program playing seg faults the program.  After restarting X I can watch another show.
> 
> I've already posted my steps in trying to get XvMC working on the mythtv-users list, and I'm reposting that here.  Below the repost, I've posted the gdb backtrace for the crash.  Hopefully I can get this working soon, the entire system just rocks.
> 
> -----------------------
> 
> Repost of XvMC steps to get it working:
> 
> Originally, when I would try to playback XvMC content mythfrontend would seg
> fault.  I also could not use mplayer's XvMC output plugin, so I figured there
> was something wrong with my X setup.  After downgrading my NVIDIA drivers from
> 1.0-4496 to 1.0-4363 (as was suggested from this list), it still didn't work. 
> 
> This morning I started digging through my XF86config file, and noticed that I
> had TwinView set up even though I'm only using the TV for video output.  Also,
> re-reading NVIDIA's readme on TwinView I noticed that there was a warning about
> overlay support / etc when TwinView was enabled.  So, I disabled TwinView and
> setup the TV to be my only monitor in the XF86config file.  After reloading X,
> I found the mplayer's XvMC support now worked.  So I recompiled MythTV with
> XvMC support and loaded it up.
> 
> Eureka!  Mythfrontend played back a recording just fine, and CPU usage was at
> 35% compared to the typical 85%.  Just to make sure things were working, I
> tried to play another show and disaster struck.  As soon as I tried to play the
> second show, mythfrontend seg faults and I get this following error on my
> command line:
> 
> Using XvMC version: 1.0
> Using XV port 105
> Unable to create XvMC Context
> Changing from None to WatchingPreRecorded
> Segmentation fault
> 
> Does anyone have any idea what this means?  And secondly, what I need to do to
> resolve this?
> 
> Some stats about my system:
>   - K6-3 450Mhz CPU, NVidia GF4 MX 440 Graphics, PVR-250 for tuner
>   - Running MythTV 0.12
> 
> -----------------------
> 
> This is the GDB backtrace:
> 
> Starting program: /usr/local/bin/mythfrontend 
> [New Thread 16384 (LWP 9248)]
> 2003-11-11 18:04:21 Enabled verbose msgs : important general
> connecting to backend server: 127.0.0.1:6543
> Could not connect to backend server
> connecting to backend server: 127.0.0.1:6543
> [New Thread 32769 (LWP 9274)]
> [New Thread 16386 (LWP 9275)]
> [New Thread 32771 (LWP 9276)]
> [New Thread 49156 (LWP 9277)]
> Input #0, mpeg, from '/storage/av/tv/1036_20031110230000_20031110233000.nuv':
>   Stream #0.0: Video: mpegvideo_xvmc, 480x480, 29.97 fps, 6000 kb/s
>   Stream #0.1: Audio: mp2, 48000 Hz, stereo, 384 kb/s
> Opening OSS audio device '/dev/dsp'.
> audio device cannot report buffer state accurately,
> audio/video sync will be bad, continuing anyway
> [New Thread 65541 (LWP 9278)]
> Over/underscanning. V: 0.000000, H: 0.000000, XOff: 0, YOff: 20
> Using XvMC version: 1.0
> Using XV port 105
> [New Thread 81926 (LWP 9279)]
> Changing from None to WatchingPreRecorded
> 2003-11-11 18:05:19 prebuffering pause
> Changing from WatchingPreRecorded to None
> Changing from None to None
> [New Thread 98311 (LWP 9280)]
> [New Thread 114696 (LWP 9281)]
> [New Thread 131081 (LWP 9282)]
> Input #0, mpeg, from '/storage/av/tv/1005_20031102230500_20031103000500.nuv':
>   Stream #0.0: Video: mpegvideo_xvmc, 480x480, 29.97 fps, 6000 kb/s
>   Stream #0.1: Audio: mp2, 48000 Hz, stereo, 384 kb/s
> Opening OSS audio device '/dev/dsp'.
> audio device cannot report buffer state accurately,
> audio/video sync will be bad, continuing anyway
> [New Thread 147466 (LWP 9283)]
> Over/underscanning. V: 0.000000, H: 0.000000, XOff: 0, YOff: 20
> Using XvMC version: 1.0
> Using XV port 105
> NV: could not map register space on /dev/nvidia0 at 0xec000002 for 0x1000 bytes (Invalid argument)
> Unable to create XvMC Context
> [New Thread 163851 (LWP 9284)]
> Changing from None to WatchingPreRecorded
> 
> Program received signal SIGSEGV, Segmentation fault.
> [Switching to Thread 114696 (LWP 9281)]
> 0x0819fa2c in get_avf_buffer_xvmc(AVCodecContext*, AVFrame*) (c=0x871a0f8, 
>     pic=0x876aedc) at avformatdecoder.cpp:579
> 579     avformatdecoder.cpp: No such file or directory.
>         in avformatdecoder.cpp
> (gdb) thread apply all bt full
> 
> Thread 12 (Thread 163851 (LWP 9284)):
> #0  0x40beb6d6 in nanosleep () from /lib/libc.so.6
> No symbol table info available.
> #1  0x00000000 in ?? ()
> No symbol table info available.
> 
> Thread 11 (Thread 147466 (LWP 9283)):
> #0  0x40beb6d6 in nanosleep () from /lib/libc.so.6
> No symbol table info available.
> #1  0x00000000 in ?? ()
> No symbol table info available.
> 
> Thread 10 (Thread 131081 (LWP 9282)):
> #0  0x40beb6d6 in nanosleep () from /lib/libc.so.6
> No symbol table info available.
> #1  0x00000000 in ?? ()
> No symbol table info available.
> 
> Thread 9 (Thread 114696 (LWP 9281)):
> #0  0x0819fa2c in get_avf_buffer_xvmc(AVCodecContext*, AVFrame*) (c=0x871a0f8, 
>     pic=0x876aedc) at avformatdecoder.cpp:579
>         nd = (AvFormatDecoder *) 0x852e1c8
>         frame = (VideoFrame *) 0x875d218
>         render = (xvmc_render_state_t *) 0x0
> #1  0x081fae08 in alloc_picture (s=0x876ae20, pic=0x876aedc, shared=0)
>     at mpegvideo.c:251
>         r = 1001
>         big_mb_num = 962
>         mb_array_size = 930
>         i = 0
> #2  0x081fd9fb in MPV_frame_start (s=0x876ae20, avctx=0x871a0f8)
>     at mpegvideo.c:1019
>         i = 0
>         pic = (AVFrame *) 0x876aedc
> #3  0x082a0d2f in mpeg_decode_slice (avctx=0x871a0f8, pict=0xbebdf90c, 
>     start_code=0, buf=0xbebdf81c, buf_size=46549) at mpeg12.c:1942
>         s1 = (Mpeg1Context *) 0x876ae20
>         s = (MpegEncContext *) 0x876ae20
>         ret = 141995552
>         field_pic = 0
> #4  0x082a267b in mpeg_decode_frame (avctx=0x871a0f8, data=0xbebdf90c, 
>     data_size=0xbebdf9b0, buf=0x8adb550 "", buf_size=46728) at mpeg12.c:2533
>         s = (Mpeg1Context *) 0x876ae20
>         buf_end = (uint8_t *) 0x8ae6bd8 ""
>         buf_ptr = (
>     uint8_t *) 0x8adb603 "\032¥ñbÉ>¶©$\237[et×9\bÂqi\bªl%\232\222¢ò\024¤E\204&¤åqOJJ-#JDï#-'\027hB2\235¥#IEÌ!\031Å\204i\031EÅ)H\235å)IιKI\b\002l\036G³Z\211¤\214\002 \021å\025Ï4%óN/)\nJ\233ÊR\223\213ÊR\221+ÈR1\027\020\215\"v\021¥\"W\224\205\"W\220\215'+ÊR\021;\230R1\026\024¥\"V\224¤\"+\221 EuIS\224"
>         ret = 139676816
>         start_code = 257
>         input_size = 46549
>         picture = (AVFrame *) 0xbebdf90c
>         s2 = (MpegEncContext *) 0x876ae20
> #5  0x081f95b3 in avcodec_decode_video (avctx=0x871a0f8, picture=0xbebdf90c, 
>     got_picture_ptr=0xbebdf9b0, buf=0x87cdde0 "", buf_size=2020) at utils.c:367
>         ret = 212
> #6  0x081a065a in AvFormatDecoder::GetFrame(int) (this=0x852e1c8, onlyvideo=0)
>     at avformatdecoder.cpp:943
>         context = (AVCodecContext *) 0x871a0f8
>         mpa_pic = {data = {0x2ad02b9 <Address 0x2ad02b9 out of bounds>, 
>     0x2df02fa <Address 0x2df02fa out of bounds>, 
>     0x24f024a <Address 0x24f024a out of bounds>, 
>     0x11c0100 <Address 0x11c0100 out of bounds>}, linesize = {-5898355, 
>     -37749320, -65668071, -54985550}, base = {
>     0xfff5ffde <Address 0xfff5ffde out of bounds>, 
>     0x30a02fc <Address 0x30a02fc out of bounds>, 
>     0x3e803fd <Address 0x3e803fd out of bounds>, 
>     0x349036a <Address 0x349036a out of bounds>}, key_frame = 31982055, 
>   pict_type = -9175207, pts = -192250192279962329, 
>   coded_picture_number = -6881366, display_picture_number = 18809108, 
>   quality = 2.70003589e-38, age = 15007973, reference = 16580886, 
>   qscale_table = 0x7b0096 <Address 0x7b0096 out of bounds>, 
>   qstride = -7733369, 
>   mbskip_table = 0xff3cff2c <Address 0xff3cff2c out of bounds>, 
>   opaque = 0xffedfff7, error = {185494883005235530, 322012282568704970, 
>     177332035713106951, 18444773688758698236}, type = -9765015, 
>   repeat_pict = -9437305, qscale_type = -2621462}
>         gotpicture = 0
>         picframe = (VideoFrame *) 0x1e0
>         curstream = (AVStream *) 0x871a0f0
>         pkt = (AVPacket *) 0x87620f0
>         len = 2020
>         ret = 212
>         ptr = (unsigned char *) 0x87cdde0 ""
>         samples = {-775, -743, -1504, -1482, -1657, -1670, -995, -993, 72, 81, 
>   649, 617, 312, 286, -514, -492, -1117, -1118, -1050, -1088, -364, -351, 398, 
>   441, 620, 614, 163, 162, -509, -462, -716, -703, -187, -217, 630, 646, 1020, 
>   1051, 639, 611, -314, -337, -1182, -1156, -1239, -1248, -500, -540, 137, 
>   169, -41, 26, -823, -832, -1534, -1575, -1647, -1634, -1063, -1032, -218, 
>   -200, 347, 375, 517, 519, 364, 311, -190, -221, -1041, -1001, -1707, -1663, 
>   -1669, -1668, -766, -786, 428, 397, 835, 818, 205, 249, -388, -315, -144, 
>   -132, 402, 354, 516, 486, 179, 202, -363, -307, -802, -746, -745, -727, 
>   -357, -378, -378, -394, -1050, -1028, -1727, -1684, -1687, -1653, -808, 
>   -807, 359, 328, 1044, 1022, 1004, 1017, 584, 597, 51, 36, -478, -475, -687, 
>   -643, -505, -484, -458, -489, -871, -872, -1333, -1254, -1403, -1323, -1152, 
>   -1146, -835, -874, -664, -685, -745, -726, -863, -823, -726, -709, -493, 
>   -520, -462, -498, -500, -514, -478, -482, -723, -712, -1296, -1252, -1544, 
>   -1509, -1072, -1090, -413, -445, -290, -283, -792, -753, -1398, -1360, 
>   -1423, -1415, -653, -678, 355, 342, 914, 933, 884, 900, 431, 436, -250, 
>   -230, -728, -713, -638, -642, -279, -263, -248, -215, -597, -576, -835, 
>   -825, -632, -645...}
>         data_size = 0
>         temppts = 276412580441621665
>         gotvideo = false
>         allowedquit = false
>         storevideoframes = false
> #7  0x080ff48f in NuppelVideoPlayer::GetFrame(int, bool) (this=0x8534b00, 
>     onlyvideo=0, unsafe=false) at NuppelVideoPlayer.cpp:592
> No locals.
> #8  0x08101bdd in NuppelVideoPlayer::StartPlaying() (this=0x8534b00)
>     at NuppelVideoPlayer.cpp:1428
>         seeks = 64
>         lockit = {mtx = 0x8898f58}
>         output_video = 163851
>         pausecheck = 0
> #9  0x0817afd3 in SpawnDecode(void*) (param=0x8534b00) at tv_play.cpp:67
>         nvp = (NuppelVideoPlayer *) 0x8534b00
> #10 0x40a01c3e in pthread_start_thread () from /lib/libpthread.so.0
> No symbol table info available.
> #11 0x40a01cbb in pthread_start_thread_event () from /lib/libpthread.so.0
> No symbol table info available.
> 
> Thread 8 (Thread 98311 (LWP 9280)):
> #0  0x40beb6d6 in nanosleep () from /lib/libc.so.6
> No symbol table info available.
> #1  0x00000000 in ?? ()
> No symbol table info available.
> 
> Thread 2 (Thread 32769 (LWP 9274)):
> #0  0x40c0f04c in poll () from /lib/libc.so.6
> No symbol table info available.
> #1  0x40a01988 in __pthread_manager () from /lib/libpthread.so.0
> No symbol table info available.
> #2  0x40a01b53 in __pthread_manager_event () from /lib/libpthread.so.0
> No symbol table info available.
> 
> Thread 1 (Thread 16384 (LWP 9248)):
> #0  0x40beb6d6 in nanosleep () from /lib/libc.so.6
> No symbol table info available.
> #1  0x00000000 in ?? ()
> No symbol table info available.
> 0x0819fa2c      579     in avformatdecoder.cpp
> 
> ---------------------------------------------------
> 
> Thanks for all the help and the great program!
> 
> Chris Wieringa
> cwieri39 at calvin.edu 
> 
> 
> 
> _______________________________________________
> mythtv-dev mailing list
> mythtv-dev at mythtv.org
> http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-dev
> 



More information about the mythtv-dev mailing list