Attached is a patch that fixes the problem. It holds off creating the osd object until width/height are non-zero and fps/aspect are non-nan.
jim Jim Westfall <[EMAIL PROTECTED]> wrote [03.05.05]: > The crash is in frame #10 > (gdb) f 10 > #10 0xb7c75d1c in OSDTypeEditSlider::Reinit(float, float, float, float) ( > this=0xb41faad0, wchange=inf, hchange=inf, wmult=3, hmult=2.25) > at osdtypes.cpp:1223 > 1223 m_drawMap = new unsigned char[m_drawwidth + 1]; > (gdb) print m_drawwidth > $2 = -2147483648 > > The underlying problem looks like NuppelVideoPlayer can create a new > OSD object with bogus height/width data as seen in the backtrace below this > one. This is causing m_hmult and m_wmult to be zero. When OSDSet::Reinit > is called its breaking the following code. > > float wchange = wmult / m_wmult; > float hchange = hmult / m_hmult; > > resulting in wchange/hchange both being inf. > > jim > > (gdb) bt full > #0 0xb69ef7b1 in kill () from /lib/libc.so.6 > No symbol table info available. > #1 0xb6bbb729 in pthread_kill () from /lib/libpthread.so.0 > No symbol table info available. > #2 0xb6bbba7d in raise () from /lib/libpthread.so.0 > No symbol table info available. > #3 0xb69ef404 in raise () from /lib/libc.so.6 > No symbol table info available. > #4 0xb69f0a58 in abort () from /lib/libc.so.6 > No symbol table info available. > #5 0xb6b8b103 in __cxa_call_unexpected () > from /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.5/libstdc++.so.5 > No symbol table info available. > #6 0xb6b8b136 in std::terminate() () > from /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.5/libstdc++.so.5 > No symbol table info available. > #7 0xb6b8b281 in __cxa_throw () > from /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.5/libstdc++.so.5 > No symbol table info available. > #8 0xb6b8b48d in operator new(unsigned) () > from /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.5/libstdc++.so.5 > No symbol table info available. > #9 0xb6b8b54b in operator new[](unsigned) () > from /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.5/libstdc++.so.5 > No symbol table info available. > #10 0xb7c75d1c in OSDTypeEditSlider::Reinit(float, float, float, float) ( > this=0xb41faad0, wchange=inf, hchange=inf, wmult=3, hmult=2.25) > at osdtypes.cpp:1223 > width = -2147483648 > height = -2147483648 > x = -2147483648 > y = -2147483648 > #11 0xb7c6fe01 in OSDSet::Reinit(int, int, int, int, int, int, float, > float, in$ > screenwidth=1920, screenheight=1088, xoff=0, yoff=0, > displaywidth=1920, displayheight=1080, wmult=3, hmult=2.25, > frint=33366) > at osdtypes.cpp:192 > item = (OSDTypeEditSlider *) 0xb41faad0 > item = (OSDTypeFillSlider *) 0x0 > item = (OSDTypePosSlider *) 0x0 > item = (OSDTypePositionImage *) 0x0 > item = (OSDTypeText *) 0x0 > item = (OSDTypePositionImage *) 0x0 > item = (OSDTypeText *) 0x0 > type = (class OSDType *) 0xb41faad0 > wchange = inf > hchange = inf > iter = > {<iterator<std::random_access_iterator_tag,OSDType*,int,OSDType**,OSDType*&>> > = {<No > data fields>}, _M_current = 0x8218a68} > #12 0xb7c5abbd in OSD::Reinit(int, int, int, int, int, int, int) ( > this=0xb63abd68, width=1920, height=1088, frint=33366, dispx=0, > dispy=0, > dispw=1920, disph=1080) at osd.cpp:232 > set = (class OSDSet *) 0xb41fa858 > fonts = {node = 0xb63abad0} > sets = {node = 0xb41fa920} > #13 0xb7c43798 in NuppelVideoPlayer::ReinitOSD() (this=0x82fbe50) > at NuppelVideoPlayer.cpp:458 > dispx = 0 > dispy = 0 > dispw = 1920 > disph = 1080 > #14 0xb7c43812 in NuppelVideoPlayer::ReinitVideo() (this=0x82fbe50) > at NuppelVideoPlayer.cpp:469 > No locals. > #15 0xb7c443fd in NuppelVideoPlayer::SetVideoParams(int, int, double, int, > float, FrameScanType, > bool) (this=0x82fbe50, width=1920, height=1088, > fps=29.970029970029969, keyframedistance=15, aspect=1.77777779, > scan=kScan_Detect, reinit=true) at NuppelVideoPlayer.cpp:564 > No locals. > ... > > > > (gdb) > #0 0xb69ef7b1 in kill () from /lib/libc.so.6 > #1 0xb6bbb729 in pthread_kill () from /lib/libpthread.so.0 > #2 0xb6bbba7d in raise () from /lib/libpthread.so.0 > #3 0xb69ef404 in raise () from /lib/libc.so.6 > #4 0xb69f0a58 in abort () from /lib/libc.so.6 > #5 0xb7c5f9c3 in OSD::parseSlider(OSDSet*, QDomElement&) (this=0xb65990e0, > container=0x82f6ea8, [EMAIL PROTECTED]) at osd.cpp:708 > #6 0xb7c63c59 in OSD::parseContainer(QDomElement&) (this=0xb65990e0, > [EMAIL PROTECTED]) at osd.cpp:1084 > #7 0xb7c64921 in OSD::LoadTheme() (this=0xb65990e0) at osd.cpp:1166 > #8 0xb7c5913a in OSD (this=0xb65990e0, width=0, height=0, frint=-1, dispx=0, > dispy=0, dispw=0, disph=0) at osd.cpp:68 > #9 0xb7c4ab1c in NuppelVideoPlayer::StartPlaying() (this=0x82b2600) > at NuppelVideoPlayer.cpp:1816 > > _______________________________________________ > mythtv-dev mailing list > mythtv-dev@mythtv.org > http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-dev
Index: libs/libmythtv/NuppelVideoPlayer.cpp =================================================================== RCS file: /var/lib/mythcvs/mythtv/libs/libmythtv/NuppelVideoPlayer.cpp,v retrieving revision 1.443 diff -u -r1.443 NuppelVideoPlayer.cpp --- libs/libmythtv/NuppelVideoPlayer.cpp 27 Feb 2005 21:54:36 -0000 1.443 +++ libs/libmythtv/NuppelVideoPlayer.cpp 6 Mar 2005 02:43:35 -0000 @@ -1809,19 +1809,8 @@ return; } - if (!disablevideo) - { - int dispx = 0, dispy = 0, dispw = video_width, disph = video_height; - videoOutput->GetVisibleSize(dispx, dispy, dispw, disph); - osd = new OSD(video_width, video_height, frame_interval, - dispx, dispy, dispw, disph); - - if (forceVideoOutput != kVideoOutput_Default && - forceVideoOutput != kVideoOutput_IVTV) - osd->DisableFade(); - } - - playing = true; + if(disablevideo) + playing = true; rewindtime = fftime = 0; skipcommercials = 0; @@ -1903,6 +1892,21 @@ break; } + if (!disablevideo && !osd && video_height && video_width && + !isnan(video_aspect) && !isnan(video_frame_rate)) + { + int dispx = 0, dispy = 0, dispw = video_width, disph = video_height; + videoOutput->GetVisibleSize(dispx, dispy, dispw, disph); + osd = new OSD(video_width, video_height, frame_interval, + dispx, dispy, dispw, disph); + + if (forceVideoOutput != kVideoOutput_Default && + forceVideoOutput != kVideoOutput_IVTV) + osd->DisableFade(); + + playing = true; + } + if (play_speed != next_play_speed) { decoder_lock.lock();
_______________________________________________ mythtv-dev mailing list mythtv-dev@mythtv.org http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-dev