Opened 18 years ago

Closed 18 years ago

#529 closed defect (fixed)

quickdnr filter causes "illegal instruction" with pentium 3

Reported by: hansi.urpils@… Owned by: Isaac Richards
Priority: minor Milestone: 0.19
Component: mythtv Version: head
Severity: medium Keywords:
Cc: Ticket locked: no

Description

Hello!

I'm trying to use the "quickdnr" filter. When I enter LiveTv? or when I want to watch a recording, mythfrontend dies and gives me an "illegal instruction" error.

From what I understand by looking at the docs and reading the source, it is important that my CPU supports SSE or MMX. This is a Pentium 3 with 450mhz and /proc/cpuinfo tells me that it supports both. I've tried a few things like compiling MythTV with --march=i686 or --march=pentium3, but it happens all the time.

I'm quite sure that filter_quickdnr.c gets compiled properly (with MMX, I mean) because an "#warning HELLO!" yields the expected result when put in the "#ifdev MMX" section.

I don't know if this is just a problem with my setup, maybe it's related to some hardware brokenness. If this is the case, please disregard this ticket. Otherwise, I'll be very happy to provide additional information when necessary and test patches.

Regards, Michael "laga" Haas

Attachments (1)

filter_quickdnr.s (50.5 KB) - added by hansi.urpils@… 18 years ago.

Download all attachments as: .zip

Change History (7)

comment:1 Changed 18 years ago by hansi.urpils@…

Resolution: invalid
Status: newclosed

It has fixed itself, kind of.

It seems that ./configure didn't accept --arch=i686 when I tried it the first time, thus using the old "-march=pentium2" optimization. That was likely related to my bad build script :). Now I've tried it again and it works, resulting in "-march=i686" being passed to gcc.

D'oh!

comment:2 Changed 18 years ago by anonymous

Could this be related to http://www.gossamer-threads.com/lists/mythtv/users/156230#156230 ? It still hasn't been fixed in SVN (of course, it hasn't officially been put into Trac, either. :)

comment:3 Changed 18 years ago by hansi.urpils@…

Resolution: invalid
Status: closedreopened

Hi again.

The problem still exists.

Let me summarize again, I'm afraid I've confused everyone.

When I run ./configure with --arch=pentium3, quickdnr will cause an illegal instruction when used as a playback filter.

When I run ./configure with --arch=i686, everything will just work fine.

Now the goal would be to make quickdnr work with --arch=pentium3, IMHO - because the CPU supports SSE and MMX, there shouldn't be a problem.

I'm going to see what http://www.gossamer-threads.com/lists/mythtv/users/156230#156230 can do for me.

comment:4 Changed 18 years ago by danielk

Milestone: 0.19

Can you get the backtrace on the bad instruction?

It would also be useful to see the assembler output of the file that is giving you problems. You can get this by using the same gcc line that make does except add "-S" to it and get rid of "-o objectfilename.o" It will then output a "sourcefilename.s" file which contains the assembler output. You need the backtrace first to find the file...

Changed 18 years ago by hansi.urpils@…

Attachment: filter_quickdnr.s added

comment:5 Changed 18 years ago by anonymous

Hello!

Here is the backtrace you've requested. I hope it is ok to post it inline and not as an attachment.

I've created this backtrace with libmpeg2 as video output method (sic ;)) and without deinterlacing, just quickdnr in my filter chain.

Thread 9 (Thread 1225358256 (LWP 1576)):
#0  0x451bbf6e in quickdnr2MMX (f=0x86f1638, frame=0x8bf6108)
    at filter_quickdnr.c:244
        tf = (ThisFilter *) 0x86f1638
        y = 1225357112
        buf = (uint64_t *) 0x471e2000
        av_p = (uint64_t *) 0x8a30dc0
        sign_convert = 9259542123273814144
#1  0x402e8e28 in FilterChain::ProcessFrame (this=0x850f268, Frame=0x8bf6108)
    at filtermanager.cpp:48
        VF = (VideoFilter *) 0x86f1638
#2  0x404aed29 in VideoOutputXv::ProcessFrameMem (this=0x870bc78, 
    frame=0x8bf6108, osd=0x87208b0, filterList=0x850f268, pipPlayer=0x0)
    at videoout_xv.cpp:2754
        deint_proc = false
        pauseframe = false
#3  0x404af0f6 in VideoOutputXv::ProcessFrame (this=0x870bc78, 
    frame=0x8bf6108, osd=0x87208b0, filterList=0x850f268, pipPlayer=0x0)
    at videoout_xv.cpp:2785
No locals.
#4  0x403f43d6 in NuppelVideoPlayer::DisplayNormalFrame (this=0x8216ac0)
    at NuppelVideoPlayer.cpp:1642        frame = (VideoFrame *) 0x8bf6108
#5  0x403f48cd in NuppelVideoPlayer::OutputVideoLoop (this=0x8216ac0)
    at NuppelVideoPlayer.cpp:1721
        temp_speed = 1
        fr_int = 40000
#6  0x403f4b3c in NuppelVideoPlayer::kickoffOutputVideoLoop (player=0x8216ac0)
    at NuppelVideoPlayer.cpp:1786
        nvp = (NuppelVideoPlayer *) 0x8216ac0
#7  0x41b9fb63 in start_thread () from /lib/tls/libpthread.so.0
No symbol table info available.
#8  0x4189e18a in clone () from /lib/tls/libc.so.6
No symbol table info available.

Thread 8 (Thread 1190353840 (LWP 1575)):
#0  0x4186f99c in nanosleep () from /lib/tls/libc.so.6
No symbol table info available.
#1  0x4189828a in usleep () from /lib/tls/libc.so.6
No symbol table info available.
#2  0x40da87c0 in AudioOutputBase::OutputAudioLoop (this=0x465da008)
    at audiooutputbase.cpp:772
        space_on_soundcard = 2768
        last_space_on_soundcard = 2768
        zeros = "\000"
        fragment = "Jü"
        e = {<QCustomEvent> = {<> = {<No data fields>}, d = 0x0}, 
  error_msg = 0x0, elasped_seconds = 0, written_bytes = 0, brate = 0, 
  freq = 0, prec = 0, chan = 0}
#3  0x40da9251 in AudioOutputBase::kickoffOutputAudioLoop (player=0x465da008)
    at audiooutputbase.cpp:865
No locals.
#4  0x41b9fb63 in start_thread () from /lib/tls/libpthread.so.0
No symbol table info available.
#5  0x4189e18a in clone () from /lib/tls/libc.so.6
No symbol table info available.

Thread 7 (Thread 1176230832 (LWP 1574)):
#0  0x4186f99c in nanosleep () from /lib/tls/libc.so.6
No symbol table info available.
#1  0x4189828a in usleep () from /lib/tls/libc.so.6
No symbol table info available.
#2  0x402aa46f in RingBuffer::ReadAheadThread (this=0x86bda08)
    at RingBuffer.cpp:971
        totfree = 45055
        ret = 128000
        used = 2547713
        loops = 3
#3  0x402aa331 in RingBuffer::startReader (type=0x86bda08)
    at RingBuffer.cpp:937
        rbuffer = (RingBuffer *) 0x86bda08
#4  0x41b9fb63 in start_thread () from /lib/tls/libpthread.so.0
No symbol table info available.
#5  0x4189e18a in clone () from /lib/tls/libc.so.6
No symbol table info available.

Thread 6 (Thread 1167842224 (LWP 1573)):
#0  get_non_intra_block (decoder=0x89c6a40, quant_matrix=0x89c81f4)
    at slice.c:593
        i = 0
        j = 0
        val = -288
        scan = (const uint8_t * const) 0x407aec20 ""
        mismatch = 287
        tab = (const DCTtab *) 0x406c3448
        bit_buf = 2703559680
        bits = -8
        bit_ptr = (
    const uint8_t *) 0x464af0c0 "\2222¡\217F\202è\001J\032\"-\233"
        dest = (int16_t * const) 0x89c6b40
#1  0x4064c063 in slice_non_intra_DCT (decoder=0x89c6a40, cc=0,    dest=0x4773d178 "bbbcba``", stride=1280) at slice.c:969
        last = 144468544
#2  0x4064b50d in mpeg2_slice (decoder=0x89c6a40, code=7, 
    buffer=0x464af040 "R\025]θ7Cb÷¡6ÄD\004ÄíT*ãÁz\236©¥ê@­º\006I»]L\026aH6\030Ó\005øq&5Q\206*(ýF\tÂ\214 u}pÂ3]WoÁz\237P\233G\003Á\022Û\031B¬\022\bÖÔ*Ц\035Àlº\023`\027¢P¾\021'K¡&Ê\206$\016[\035S*;&7m\233Y5\n­ã\vêE\037¬¤*ÆÅ/¡%\f\2222¡\217F\202è\001J\032\"-\233") at slice.c:1896
        offset = 368
        dest_y = (uint8_t *) 0x4773d170 "ihgfdbbcbbbcba``"
        coded_block_pattern = 2
        DCT_offset = 640
        DCT_stride = 1280
        parser = (motion_parser_t *) 0x40643a42 <motion_fr_frame_420>
        macroblock_modes = 182
        mba_inc = 0
        mba = (const MBAtab *) 0x406c379c
        cpu_state = {dummy = 154806076}
#3  0x40641409 in mpeg2_parse (mpeg2dec=0x89c6a40) at decode.c:188
        size_buffer = 6821
        size_chunk = 1222656
        copied = 253
#4  0x40415a3a in AvFormatDecoderPrivate::DecodeMPEG2Video (this=0x8599740, 
    avctx=0x86f9cc0, picture=0x459bd5c0, got_picture_ptr=0x459bd588, 
    buf=0x93a0630 "", buf_size=8460) at avformatdecoder.cpp:97
        info = (const mpeg2_info_t *) 0x89cac40
#5  0x40423a5a in AvFormatDecoder::GetFrame (this=0x86be400, onlyvideo=0)
    at avformatdecoder.cpp:2035
        context = (AVCodecContext *) 0x86f9cc0
        mpa_pic = {data = {
    0x4772e000 "\037\035\024\033\0325\207ÀÆÇÈÉËÌÎÎÑÒÓÒÒÑÑÒÒÒÓÓÓÓÒÐÖÕÓÓÔÔÑÑÓÕÖ×ÖÕÕÖÖÖ×ÙÚ×ØØÖÖ××ØÛÖ××Ö×ÙÙÙÚÚÚÚÜÝÜÛÛÛÕÚÚÛÜÜÝÞÞÝÝÝÝÝÝÝÜÜÞÝÝÞÞÞàßßßÞÞÞÜßààááââãàÞßáâááàááááááààáááááâáàÞÞßßßßßáààßßÞÞÝàÝÝÝÝÞààááàßááââãßßàààààààâääääääâäääääää"..., 0x47779000 "|\177\203\210\214\220\221\222\225\225\225\225\225\225\225\225\220\220\220\220\217\216\216\216\224\224\223\223\222\222\221\220\215\216\216\216\216\216\216\216\221\220\220\220\220\220\220\220\215\215\215\215\215\215\215\215\216\216\216\216\215\215\215\215\215\215\215\215\215\215\216\216\217\216\216\216\217\217\216\215\215\215\215\215\215\216\217\217\212\213\214\214\215", '\210' <repeats 15 times>, "\207\207\207\207\211\210\207\206\205\204\203\200\201\201\201\201\201\201\201\201\201\200\200\200\177\200\200\201\200\201\201\202\202\203\203\204\203\203\203\203\203\203\204\204\203\204\204\204\204\204\204\204\203\202\203\203\202\200}{{qpmjiiifeeeeeeejkkjjiiigggggggg"..., 
    0x4778bc00 "\200\177}{xusrrrrrrrrsrrrrsssstttttttssttttttttsssssssttttttttsssstttttttttt", 's' <repeats 15 times>, "tuuttttt", 'v' <repeats 15 times>, "uuuutuuvvwwy||||||{{yyy{|{{{z", 'y' <repeats 23 times>, "z|}\177\203\207\214\217\217\223\226\231\234\236    \237\237\236\236\235\235\234\234\234\234\234\234\234\234\233\233\233\233\233\233\233\233"..., 0x0}, linesize = {640, 320, 320, 0}, 
 base = {0x0, 0x0, 0x0, 0x0}, key_frame = 0, pict_type = 0, pts = 0, 
  coded_picture_number = 0, display_picture_number = 0, quality = 0, 
  age = 1073741824, reference = 0, qscale_table = 0x0, qstride = 0, 
  mbskip_table = 0x0, motion_val = {0x0, 0x0}, mb_type = 0x0, 
  motion_subsample_log2 = 0 '\0', opaque = 0x8bf6468, error = {0, 0, 0, 0}, 
  type = 2, repeat_pict = 0, qscale_type = 0, interlaced_frame = 0, 
  top_field_first = 0, pan_scan = 0x0, palette_has_changed = 0, 
  buffer_hints = 0, dct_coeff = 0x0, ref_index = {0x0, 0x0}}
        gotpicture = 0
        temppts = 608194102105533884
        picframe = (VideoFrame *) 0x8bf6348
        ctype = 0
        curstream = (AVStream *) 0x8769240
        pkt = (AVPacket *) 0x93719e0
        ret = 0
        ptr = (unsigned char *) 0x93a0630 ""
        firstloop = true
        have_err = false
        storevideoframes = false
        len = 8460
        data_size = 0
        pts = 479
        allowedquit = false        skipaudio = false
#6  0x403ef501 in NuppelVideoPlayer::GetFrame (this=0x8216ac0, onlyvideo=0, 
    unsafe=false) at NuppelVideoPlayer.cpp:851
No locals.
#7  0x403f625f in NuppelVideoPlayer::StartPlaying (this=0x8216ac0)
    at NuppelVideoPlayer.cpp:2103
        output_video = 1225358256
        decoder_thread = 1167842224
        pausecheck = 0
#8  0x403ae94d in SpawnDecode (param=0x8216ac0) at tv_play.cpp:163
        nvp = (NuppelVideoPlayer *) 0x8216ac0
#9  0x41b9fb63 in start_thread () from /lib/tls/libpthread.so.0
No symbol table info available.
#10 0x4189e18a in clone () from /lib/tls/libc.so.6
No symbol table info available.

Thread 5 (Thread 1150049200 (LWP 1572)):
#0  0x4186f99c in nanosleep () from /lib/tls/libc.so.6
No symbol table info available.
#1  0x4189828a in usleep () from /lib/tls/libc.so.6
No symbol table info available.
#2  0x403bbed7 in TV::RunTV (this=0x86bdb20) at tv_play.cpp:1348
        doHandle = false        keypressed = (QKeyEvent *) 0x448c5ae4
        updatecheck = 3
#3  0x403bb93f in TV::EventThread (param=0x86bdb20) at tv_play.cpp:1280
        thetv = (class TV *) 0x86bdb20
#4  0x41b9fb63 in start_thread () from /lib/tls/libpthread.so.0
No symbol table info available.
#5  0x4189e18a in clone () from /lib/tls/libc.so.6
No symbol table info available.

Thread 4 (Thread 1158437808 (LWP 1571)):
#0  0x41897a27 in select () from /lib/tls/libc.so.6
No symbol table info available.
#1  0x40ddf0a4 in JoystickMenuClient::Process (this=0x8437248)
    at jsmenu.cpp:217
        rc = 8
        readfds = {fds_bits = {4096, 0 <repeats 31 times>}}
        js = {time = 1378932, value = 0, type = 130 '\202', number = 1 '\001'}
#2  0x40d593e6 in SpawnJoystickMenu (param=0x83bd4e8) at mythdialogs.cpp:66
        main_window = (MythMainWindow *) 0x83bd4e8
        config_file = {static null = {
    static null = <same as static member of an already seen type>, 
    d = 0x8176388, static shared_null = 0x8176388}, d = 0x8437100, 
  static shared_null = 0x8176388}
        js = (class JoystickMenuClient *) 0x8437248
#3  0x41b9fb63 in start_thread () from /lib/tls/libpthread.so.0
No symbol table info available.
#4  0x4189e18a in clone () from /lib/tls/libc.so.6
No symbol table info available.

Thread 2 (Thread 1125669808 (LWP 1569)):
#0  0x41ba2295 in pthread_cond_wait@@GLIBC_2.3.2 ()
   from /lib/tls/libpthread.so.0
No symbol table info available.
#1  0x42603db9 in QWaitCondition::wait () from /usr/lib/libqt-mt.so.3
No symbol table info available.
#2  0x40c99337 in MythContext::waitPrivRequest (this=0x81a3c78)
    at mythcontext.cpp:2514
No locals.
#3  0x08073051 in run_priv_thread (data=0x0) at main.cpp:698
No locals.
#4  0x41b9fb63 in start_thread () from /lib/tls/libpthread.so.0
No symbol table info available.
#5  0x4189e18a in clone () from /lib/tls/libc.so.6
No symbol table info available.

Thread 1 (Thread 1089181984 (LWP 1564)):
#0  0x4186f99c in nanosleep () from /lib/tls/libc.so.6
No symbol table info available.
#1  0x4189828a in usleep () from /lib/tls/libc.so.6
No symbol table info available.
#2  0x08090f69 in PlaybackBox::play (this=0xbfffe9a0, rec=0x859a178, 
    inPlaylist=false) at playbackbox.cpp:1861
        playCompleted = false
        tv = (class TV *) 0x86bdb20
        tvrec = (ProgramInfo *) 0x870a330
        doremove = 65
        doprompt = 143
#3  0x0808ff16 in PlaybackBox::playSelected (this=0xbfffe9a0)
    at playbackbox.cpp:1642
No locals.
#4  0x080902b7 in PlaybackBox::selected (this=0xbfffe9a0)
    at playbackbox.cpp:1740
No locals.
#5  0x0809a362 in PlaybackBox::keyPressEvent (this=0xbfffe9a0, e=0xbfffe510)
    at playbackbox.cpp:3194
        action = {static null = {
    static null = <same as static member of an already seen type>, 
    d = 0x8176388, static shared_null = 0x8176388}, d = 0x8436ef8, 
  static shared_null = 0x8176388}

       i = 0
        handled = true
        actions = {<QValueList<QString>> = {sh = 0x82181b8}, <No data fields>}
#6  0x4239d405 in QWidget::event () from /usr/lib/libqt-mt.so.3
No symbol table info available.
#7  0x4230a69f in QApplication::internalNotify () from /usr/lib/libqt-mt.so.3
No symbol table info available.
#8  0x4230a194 in QApplication::notify () from /usr/lib/libqt-mt.so.3
No symbol table info available.
#9  0x422a0ea0 in QETWidget::translateKeyEvent () from /usr/lib/libqt-mt.so.3
No symbol table info available.
#10 0x4229cb82 in QApplication::x11ProcessEvent () from /usr/lib/libqt-mt.so.3
No symbol table info available.
#11 0x422b3ad4 in QEventLoop::processEvents () from /usr/lib/libqt-mt.so.3
No symbol table info available.
#12 0x4231ca58 in QEventLoop::enterLoop () from /usr/lib/libqt-mt.so.3
No symbol table info available.
#13 0x4230a951 in QApplication::enter_loop () from /usr/lib/libqt-mt.so.3
No symbol table info available.
#14 0x40d63913 in MythDialog::exec (this=0xbfffe9a0) at mythdialogs.cpp:1042
        res = 32157864
#15 0x0806fb44 in startPlayback () at main.cpp:191
        pbb = {<MythDialog> = {<> = {<No data fields>}, 
  static metaObj = 0x83f55e0, wmult = 1.60000002, hmult = 1.60000002, 
    screenwidth = 1280, screenheight = 960, xbase = 0, ybase = 0, 
    m_parent = 0x83bd4e8, rescode = 0, in_loop = true, defaultBigFont = {
      d = 0x857a620}, defaultMediumFont = {d = 0x86ca3f8}, defaultSmallFont = {
      d = 0x83c9240}}, static metaObj = 0x8722088, backup = {<Qt> = {
      static color0 = @0x427da800, static color1 = @0x427da808, 
      static black = @0x427da810, static white = @0x427da818, 
      static darkGray = @0x427da820, static gray = @0x427da828, 
      static lightGray = @0x427da830, static red = @0x427da838, 
      static green = @0x427da840, static blue = @0x427da848, 
      static cyan = @0x427da850, static magenta = @0x427da858, 
      static yellow = @0x427da860, static darkRed = @0x427da868, 
      static darkGreen = @0x427da870, static darkBlue = @0x427da878, 
      static darkCyan = @0x427da880, static darkMagenta = @0x427da888, 
      static darkYellow = @0x427da890, static arrowCursor = @0x427d8ee0, 
      static upArrowCursor = @0x427d8ee4, static crossCursor = @0x427d8ee8, 
      static waitCursor = @0x427d8eec, static ibeamCursor = @0x427d8ef0, 
      static sizeVerCursor = @0x427d8ef4, static sizeHorCursor = @0x427d8ef8, 
      static sizeBDiagCursor = @0x427d8efc, 
      static sizeFDiagCursor = @0x427d8f00, 
      static sizeAllCursor = @0x427d8f04, static blankCursor = @0x427d8f08, 
      static splitVCursor = @0x427d8f0c, static splitHCursor = @0x427d8f10, 
      static pointingHandCursor = @0x427d8f14, 
    static forbiddenCursor = @0x427d8f18, 
      static whatsThisCursor = @0x427d8f1c, static busyCursor = @0x427d8f20}, 
    flags = 4, d = 0x0, pdev = 0x0, bg_col = {static color_init = true, 
      static globals_init = true, static colormodel = QColor::d32, d = {
        argb = 4294967295, d8 = {argb = 4294967295, pix = 84 'T', 
          invalid = 82 'R', dirty = 73 'I', direct = 68 'D'}, d32 = {
          argb = 4294967295, pix = 1145655892}}}, bg_mode = 0 '\0', 
    rop = 0 '\0', pu = 255 'ÿ', bro = {xp = 0, yp = 0}, cfont = {
      d = 0x819e1b0}, pfont = 0x0, cpen = {<Qt> = {
        static color0 = @0x427da800, static color1 = @0x427da808, 
        static black = @0x427da810, static white = @0x427da818, 
        static darkGray = @0x427da820, static gray = @0x427da828, 
        static lightGray = @0x427da830, static red = @0x427da838, 
        static green = @0x427da840, static blue = @0x427da848, 
        static cyan = @0x427da850, static magenta = @0x427da858, 
        static yellow = @0x427da860, static darkRed = @0x427da868, 
        static darkGreen = @0x427da870, static darkBlue = @0x427da878, 
        static darkCyan = @0x427da880, static darkMagenta = @0x427da888, 
        static darkYellow = @0x427da890, static arrowCursor = @0x427d8ee0, 
        static upArrowCursor = @0x427d8ee4, static crossCursor = @0x427d8ee8, 
        static waitCursor = @0x427d8eec, static ibeamCursor = @0x427d8ef0, 
        static sizeVerCursor = @0x427d8ef4, 
        static sizeHorCursor = @0x427d8ef8, 
    static sizeFDiagCursor = @0x427d8f00, 
        static sizeAllCursor = @0x427d8f04, static blankCursor = @0x427d8f08, 
        static splitVCursor = @0x427d8f0c, static splitHCursor = @0x427d8f10, 
        static pointingHandCursor = @0x427d8f14, 
        static forbiddenCursor = @0x427d8f18, 
        static whatsThisCursor = @0x427d8f1c, 
        static busyCursor = @0x427d8f20}, data = 0x818dd18}, crgn = {
      data = 0x84368e0}, tabstops = 0, tabarray = 0x0, tabarraylen = 0, 
    block_ext = false, wx = 1099140644, wy = 1115483580, ww = -1073746880, 
    wh = 1, vx = 72, vy = 1086831658, vw = 1099139140, vh = 0, wxmat = {
      _m11 = 1, _m12 = 0, _m21 = 0, _m22 = 1, _dx = 0, _dy = 0}, xmat = {
      _m11 = 1, _m12 = 0, _m21 = 0, _m22 = 1, _dx = 0, _dy = 0}, ixmat = {
      _m11 = 1, _m12 = 0, _m21 = 0, _m22 = 1, _dx = 0, _dy = 0}, txop = 0, 
    txinv = false, penRef = 0x0, brushRef = 0x0, ps_stack = 0x0, 
    wm_stack = 0x0, dpy = 0x0, scrn = 1089122472, hd = 1099140644, 
    rendhd = 1087225507, gc = 0x0, gc_brush = 0x0, curPt = {xp = 0, yp = 0}, 
    clip_serial = 0}, haveGroupInfoSet = false, skipUpdate = true, 
  pageDowner = false, connected = true, curitem = 0x859a178, delitem = 0x0, 
  lastProgram = 0x0, theme = 0x81a44d8, xmldata = <incomplete type>, 
  skipCnt = 0, inTitle = false, playingVideo = false, leftRight = false, 
  titleIndex = 0, progIndex = 0, titleList = {<QValueList<QString>> = {
      sh = 0x85a5730}, <No data fields>}, playList = {<QValueList<QString>> = {
      sh = 0x8437a60}, <No data fields>}, progLists = {sh = 0x83d41d8}, 
 type = PlaybackBox::Play, arrowAccel = true, timer = 0x86bec18, nvp = 0x0, 
  rbuffer = 0x0, decoder = 3221220416, state = PlaybackBox::kKilling, 
  killState = PlaybackBox::kDone, killTimeout = {m_timer = {ds = 0}}, 
  nvpTimeout = {m_timer = {ds = 0}}, waitToStartPreviewTimer = {m_timer = {
      ds = 77586836}}, waitToStart = true, lastUpdateTime = {d = {
      jd = 2453673}, t = {ds = 77571151}}, graphicPopup = true, 
  playbackPreview = false, generatePreviewPixmap = false, dateformat = {
    static null = {
      static null = <same as static member of an already seen type>, 
      d = 0x8176388, static shared_null = 0x8176388}, d = 0x870e428, 
    static shared_null = 0x8176388}, timeformat = {static null = {
      static null = <same as static member of an already seen type>, 
      d = 0x8176388, static shared_null = 0x8176388}, d = 0x86cdce8, 
    static shared_null = 0x8176388}, showDateFormat = {static null = {
      static null = <same as static member of an already seen type>, 
      d = 0x8176388, static shared_null = 0x8176388}, d = 0x8599700, 
    static shared_null = 0x8176388}, showTimeFormat = {static null = {
      static null = <same as static member of an already seen type>, 
      d = 0x8176388, static shared_null = 0x8176388}, d = 0x86f3528, 
    static shared_null = 0x8176388}, popup = 0x0, 
  myBackground = <incomplete type>, containerPixmap = 0x418f8840, 
  fillerPixmap = 0x14, bgTransBackup = 0x83f5e68, fullRect = {x1 = 0, y1 = 0, 
    x2 = 1279, y2 = 959}, listRect = {x1 = 0, y1 = 80, x2 = 1279, y2 = 575}, 
  infoRect = {x1 = 0, y1 = 576, x2 = 1279, y2 = 959}, groupRect = {x1 = 0, 
    y1 = 576, x2 = 1277, y2 = 959}, usageRect = {x1 = 0, y1 = 888, x2 = 1279, 
    y2 = 951}, videoRect = {x1 = 992, y1 = 576, x2 = 1247, y2 = 767}, 
  curGroupRect = {x1 = 0, y1 = 0, x2 = -1, y2 = -1}, listsize = 7, 
  popupForeground = {static color_init = true, static globals_init = true, 
    static colormodel = QColor::d32, d = {argb = 4294967295, d8 = {
        argb = 4294967295, pix = 84 'T', invalid = 82 'R', dirty = 73 'I', 
        direct = 68 'D'}, d32 = {argb = 4294967295, pix = 1145655892}}}, 
  popupBackground = {static color_init = true, static globals_init = true, 
    static colormodel = QColor::d32, d = {argb = 1224736768, d8 = {
        argb = 1224736768, pix = 84 'T', invalid = 82 'R', dirty = 73 'I', 
        direct = 68 'D'}, d32 = {argb = 1224736768, pix = 1145655892}}}, 
  popupHighlight = {static color_init = true, static globals_init = true, 
    static colormodel = QColor::d32, d = {argb = 4294967295, d8 = {
        argb = 4294967295, pix = 84 'T', invalid = 82 'R', dirty = 73 'I', 
        direct = 68 'D'}, d32 = {argb = 4294967295, pix = 1145655892}}}, 
  expectingPopup = false, updateFreeSpace = true, freeSpaceTimer = 0x86ed1c0, 
  freeSpaceTotal = 0, freeSpaceUsed = 0, groupDisplayName = {static null = {
      static null = <same as static member of an already seen type>, 
      d = 0x8176388, static shared_null = 0x8176388}, d = 0x8593088, 
    static shared_null = 0x8176388}, recGroup = {static null = {
      static null = <same as static member of an already seen type>, 
      d = 0x8176388, static shared_null = 0x8176388}, d = 0x83c02a8, 
   static shared_null = 0x8176388}, recGroupPassword = {static null = {
      static null = <same as static member of an already seen type>, 
      d = 0x8176388, static shared_null = 0x8176388}, d = 0x858fab0, 
    static shared_null = 0x8176388}, curGroupPassword = {static null = {
      static null = <same as static member of an already seen type>, 
      d = 0x8176388, static shared_null = 0x8176388}, d = 0x87134a8, 
    static shared_null = 0x8176388}, recGroupType = {sh = 0x82da700}, 
  recGroupPwCache = {sh = 0x8579a08}, recGroupLastItem = 0, 
  recGroupPopup = 0x0, recGroupListBox = 0xbfffed50, 
  recGroupLineEdit = 0x42721c40, recGroupLineEdit1 = 0xbfffed20, 
  recGroupOldPassword = 0x0, recGroupNewPassword = 0x83b3488, 
  recGroupOkButton = 0x67, recGroupChooserPassword = {static null = {
      static null = <same as static member of an already seen type>, 
      d = 0x8176388, static shared_null = 0x8176388}, d = 0x8176388, 
    static shared_null = 0x8176388}, groupnameAsAllProg = false, 
  previewPixmap = 0x0, previewLastModified = {d = {jd = 0}, t = {ds = 0}}, 
  previewFilets = {d = {jd = 0}, t = {ds = 0}}, previewStartts = {d = {
      jd = 2453673}, t = {ds = 77568733}}, previewChanid = {static null = {
      static null = <same as static member of an already seen type>, 
      d = 0x8176388, static shared_null = 0x8176388}, d = 0x85954f0, 
    static shared_null = 0x8176388}, listOrder = 1, playingSomething = true, 
  titleView = true, useRecGroups = false, useCategories = false, 
  conv_yuv2rgba = 0x40496206 <mmx_argb32>, conv_rgba_buf = 0x0, 
 conv_rgba_size = {wd = 0, ht = 0}, everStartedVideo = false, 
  previewGeneratorLock = <incomplete type>, previewGenerator = {
    sh = 0x82d9e20}}
#16 0x0807060e in TVMenuCallback (data=0x81a3c78, selection=@0x83b3488)
    at main.cpp:372
        sel = {static null = {
    static null = <same as static member of an already seen type>, 
    d = 0x8176388, static shared_null = 0x8176388}, d = 0x86ca430, 
  static shared_null = 0x8176388}
#17 0x40ce0fc3 in ThemedMenuPrivate::handleAction (this=0x83b3390, 
    action=@0x83f61a0) at themedmenu.cpp:2497
        ok = true
#18 0x40cdf42d in ThemedMenuPrivate::keyPressHandler (this=0x83b3390, 
    e=0xbffff5c0) at themedmenu.cpp:2325
        it = {node = 0x83f6198}
        action = {static null = {
    static null = <same as static member of an already seen type>, 
    d = 0x8176388, static shared_null = 0x8176388}, d = 0x8436ef8, 
  static shared_null = 0x8176388}
        i = 0
        lastbutton = (ThemedButton *) 0x85df868
        oldrow = 0
        handled = true
      actions = {<QValueList<QString>> = {sh = 0x8709418}, <No data fields>}
#19 0x40ce26f4 in ThemedMenu::keyPressEvent (this=0x8578598, e=0xbffff5c0)
    at themedmenu.cpp:2695
No locals.
#20 0x4239d405 in QWidget::event () from /usr/lib/libqt-mt.so.3
No symbol table info available.
#21 0x4230a69f in QApplication::internalNotify () from /usr/lib/libqt-mt.so.3
No symbol table info available.
#22 0x4230a194 in QApplication::notify () from /usr/lib/libqt-mt.so.3
No symbol table info available.
#23 0x422a0ea0 in QETWidget::translateKeyEvent () from /usr/lib/libqt-mt.so.3
No symbol table info available.
#24 0x4229cb82 in QApplication::x11ProcessEvent () from /usr/lib/libqt-mt.so.3
No symbol table info available.
#25 0x422b3ad4 in QEventLoop::processEvents () from /usr/lib/libqt-mt.so.3
No symbol table info available.
#26 0x4231ca58 in QEventLoop::enterLoop () from /usr/lib/libqt-mt.so.3
No symbol table info available.
#27 0x4230a951 in QApplication::enter_loop () from /usr/lib/libqt-mt.so.3
No symbol table info available.
#28 0x40d63913 in MythDialog::exec (this=0x8578598) at mythdialogs.cpp:1042
        res = 1087781020
#29 0x08071476 in RunMenu (themedir=     {static null = {static null = <same as static member of an already seen type>, d = 0x8176388, static shared_null = 0x8176388}, d = 0x83bd640, static shared_null = 0x8176388}) at main.cpp:533
        exitstatus = 0
#30 0x08076c6b in main (argc=1, argv=0xbffffe14) at main.cpp:1109
        a = <incomplete type>
        dir = <incomplete type>
        themedir = {static null = {
    static null = <same as static member of an already seen type>, 
    d = 0x8176388, static shared_null = 0x8176388}, d = 0x83bd640, 
  static shared_null = 0x8176388}
        exitstatus = 29812
        binname = {static null = {
    static null = <same as static member of an already seen type>, 
    d = 0x8176388, static shared_null = 0x8176388}, d = 0x81a3ab0, 
  static shared_null = 0x8176388}
        logfd = -1
        priv_thread = 1125669808
        randomtheme = false
        mainWindow = (class MythMainWindow *) 0x83bd4e8
        pmanager = (MythPluginManager *) 0x850e4f8
        geometry = {static null = {
    static null = <same as static member of an already seen type>, 
  d = 0x8176388, static shared_null = 0x8176388}, d = 0x818b708, 
  static shared_null = 0x8176388}
        verboseString = {static null = {
    static null = <same as static member of an already seen type>, 
    d = 0x8176388, static shared_null = 0x8176388}, d = 0x81a3a38, 
  static shared_null = 0x8176388}
        pluginname = {static null = {
    static null = <same as static member of an already seen type>, 
    d = 0x8176388, static shared_null = 0x8176388}, d = 0x81a3a50, 
  static shared_null = 0x8176388}
        fileprefix = {static null = {
    static null = <same as static member of an already seen type>, 
    d = 0x8176388, static shared_null = 0x8176388}, d = 0x81a3b58, 
  static shared_null = 0x8176388}
        status = 0
        logfile = {static null = {
    static null = <same as static member of an already seen type>, 
    d = 0x8176388, static shared_null = 0x8176388}, d = 0x81a3a20, 
  static shared_null = 0x8176388}
        finfo = {fn = {static null = {
      static null = <same as static member of an already seen type>, 
      d = 0x8176388, static shared_null = 0x8176388}, d = 0x81a3a98, 
    static shared_null = 0x8176388}, fic = 0x0, cache = true, symLink = false}
---Type <return> to continue, or q <return> to quit---
        themename = {static null = {
    static null = <same as static member of an already seen type>, 
    d = 0x8176388, static shared_null = 0x8176388}, d = 0x8512428, 
  static shared_null = 0x8176388}
        mon = (class MediaMonitor *) 0x0
#31 0x417db974 in __libc_start_main () from /lib/tls/libc.so.6
No symbol table info available.
#32 0x0806ec61 in _start () at ../sysdeps/i386/elf/start.S:102
No locals.
0x451bbf6e      244     in filter_quickdnr.c

I'm not sure what file is giving me problems, but the last line of the backtrace mentions filter_quickdnr.c, so I'm going to attach the assembler output of that one. To be more specific, I've used this command line:

 gcc-3.4 -c -pipe -march=pentium3 -Wall -W -g -Wno-missing-prototypes -D_REENTRANT -DPIC -fPIC  -DMMX -Di386 -DUSING_DBOX2 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -DPREFIX=\"/usr\" -DQT_THREAD_SUPPORT -DQT_PLUGIN -DQT_SHARED -DQT_NO_DEBUG -I/usr/share/qt3/mkspecs/default -I. -I/usr/include -I/usr/X11R6/include -I../../libs/libavcodec -I../../libs/libavutil -I../../libs/libmythtv -I../../libs/libavcodec -I../.. -I/usr/include/qt3 -S filter_quickdnr.c

I hope this is what you've been asking for. If not, just complain :)

comment:6 Changed 18 years ago by danielk

Resolution: fixed
Status: reopenedclosed

(In [7657]) Fixes #529.

The quickdnr function was using prefetch which is only available some a subset of MMX capable processors and this was being used based on a simple MMX available test.

Also these prefetches are pointless and may even slow down the code because sequental array accesses are already prefetched at the T0 level by the processors that support prefetch; the extra instructions just give the instruction decoder more to do without any benefit.

I commented them out rather than removing them entirely because this code might be resynced to from outside MythTV.

Note: See TracTickets for help on using tickets.