Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 25 Mar 2006 05:00:46 GMT
From:      "Naram Qashat" <cyberbotx@cyberbotx.com>
To:        freebsd-ports-bugs@FreeBSD.org
Subject:   Re: ports/94894: multimedia/fxtv causes freeze and reboot on DGA failure on FreeBSD 6.1-PRERELEASES
Message-ID:  <200603250500.k2P50kTv046767@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR ports/94894; it has been noted by GNATS.

From: "Naram Qashat" <cyberbotx@cyberbotx.com>
To: <bug-followup@FreeBSD.org>,
	<cyberbotx@cyberbotx.com>
Cc:  
Subject: Re: ports/94894: multimedia/fxtv causes freeze and reboot on DGA failure on FreeBSD 6.1-PRERELEASES
Date: Fri, 24 Mar 2006 23:51:43 -0500

 I did a bit of debugging on this to see where the problem was.  I went into
 the multimedia/fxtv folder and told it to patch the source but not build it.
 I then did 'gmake DEBUG=YES' to get a debugging version of fxtv.  Using
 this, I managed to find out where fxtv was freezing up my system.  The
 output from gdb is below.  Aparently it's getting held up at the ioctl of
 TVTUNER_SETCHNL.  I'm not sure if that means it's a bktr issue or a fxtv
 issue, because I also installed xawtv and kbtv, and of those, xawtv can play
 the audio but not the video (although it does show something if I turn off
 overlay, but it never changes), and kbtv (using mplayer as it's base) can
 only show a messed up picture and plays the audio.  If it is a bktr issue,
 which list would be the correct one to submit the problem report to?  In any
 case, since I haven't been able to view TV properly with my card and am only
 using it to play on my GameCube using the video inputs, I edited the source
 to bypass that ioctl and a later function that was killing it.  It now runs
 fine for video input.  But since that won't help anyone wanting to watch TV,
 I don't have a patch.  Just in case, here's the dmesg clip for my tuner:
 
 bktr0: <BrookTree 878> mem 0xdc000000-0xdc000fff irq 11 at device 9.0 on
 pci1
 bktr0: [GIANT-LOCKED]
 smbus0: <System Management Bus> on bktr0
 iicbb0: <I2C bit-banging driver> on bktr0
 iicbus0: <Philips I2C bus> on iicbb0 master-only
 ic0 on iicbus0
 iic0: <I2C generic I/O> on iicbus0
 iicsmb0: <SMBus over I2C bridge> on iicbus0
 smbus1: <System Management Bus> on iicsmb0
 bktr0: Hauppauge Model 29440  @ %
 bktr0: Warning - Unknown Hauppauge Tuner 0xd5
 bktr0: Hauppauge WinCast/TV.
 
 And the gdb clip:
 
 [kirby /usr/ports/multimedia/fxtv/work/fxtv-1.03]> gdb fxtv
 GNU gdb 6.1.1 [FreeBSD]
 Copyright 2004 Free Software Foundation, Inc.
 GDB is free software, covered by the GNU General Public License, and you are
 welcome to change it and/or distribute copies of it under certain
 conditions.
 Type "show copying" to see the conditions.
 There is absolutely no warranty for GDB.  Type "show warranty" for details.
 This GDB was configured as "i386-marcel-freebsd"...
 (gdb) break TVSetInitialCaptureDefaults
 Breakpoint 1 at 0x8056c16: file tv.c, line 419.
 (gdb) run
 Starting program: /usr/ports/multimedia/fxtv/work/fxtv-1.03/fxtv
 Xlib:  extension "XFree86-DGA" missing on display ":0.0".
 Xlib:  extension "XFree86-VidModeExtension" missing on display ":0.0".
 
 Breakpoint 1, TVSetInitialCaptureDefaults (c=0x80af8a0, p=0x80afc30) at
 tv.c:419
 419         TV_DISK                *dsk = &G_glob.disk;
 (gdb) next
 428         if ( !TVCAPTUREQueryDriverState( c, &s ) ) {
 (gdb)
 434         if ( !App_res.driver_defaults ) {
 (gdb)
 437             input_format = TV_INPUT_NTSCM;
 (gdb)
 438             for ( i = 0; i < XtNumber(formats); i++ )
 (gdb)
 439                 if ( strcasecmp( App_res.input_format, formats[i].str )
 == 0 )
 (gdb)
 440                     input_format = formats[i].mode;
 (gdb)
 438             for ( i = 0; i < XtNumber(formats); i++ )
 (gdb)
 439                 if ( strcasecmp( App_res.input_format, formats[i].str )
 == 0 )
 (gdb)
 438             for ( i = 0; i < XtNumber(formats); i++ )
 (gdb)
 439                 if ( strcasecmp( App_res.input_format, formats[i].str )
 == 0 )
 (gdb)
 438             for ( i = 0; i < XtNumber(formats); i++ )
 (gdb)
 439                 if ( strcasecmp( App_res.input_format, formats[i].str )
 == 0 )
 (gdb)
 438             for ( i = 0; i < XtNumber(formats); i++ )
 (gdb)
 439                 if ( strcasecmp( App_res.input_format, formats[i].str )
 == 0 )
 (gdb)
 438             for ( i = 0; i < XtNumber(formats); i++ )
 (gdb)
 439                 if ( strcasecmp( App_res.input_format, formats[i].str )
 == 0 )
 (gdb)
 438             for ( i = 0; i < XtNumber(formats); i++ )
 (gdb)
 439                 if ( strcasecmp( App_res.input_format, formats[i].str )
 == 0 )
 (gdb)
 438             for ( i = 0; i < XtNumber(formats); i++ )
 (gdb)
 439                 if ( strcasecmp( App_res.input_format, formats[i].str )
 == 0 )
 (gdb)
 438             for ( i = 0; i < XtNumber(formats); i++ )
 (gdb)
 439                 if ( strcasecmp( App_res.input_format, formats[i].str )
 == 0 )
 (gdb)
 438             for ( i = 0; i < XtNumber(formats); i++ )
 (gdb)
 439                 if ( strcasecmp( App_res.input_format, formats[i].str )
 == 0 )
 (gdb)
 438             for ( i = 0; i < XtNumber(formats); i++ )
 (gdb)
 442             TVCAPTURESetInputFormat( c, input_format );
 (gdb)
 443             dsk->video.geom.w = c->width_max  / 2;
 (gdb)
 444             dsk->video.geom.h = c->height_max / 2;
 (gdb)
 445             dsk->video.fps    = c->fps_max;
 (gdb)
 448             if ( App_res.display_fps < 0 )
 (gdb)
 449                 App_res.display_fps = c->fps_max;
 (gdb)
 450             App_res.display_fps = MAX( 1, MIN( c->fps_max,
 App_res.display_fps ) );
 (gdb)
 453             p->ant_freq_set   = 1;
 (gdb)
 454             p->cable_freq_set = 1;
 (gdb)
 456             for ( i = 0; i < 2; i++ ) {
 (gdb)
 457                 TV_FREQ_SET *set = (i == 0) ? &p->ant_freq_set
 (gdb)
 461                 str[0] = '\0';
 (gdb)
 462                 if ( i == 0 )
 (gdb)
 463                     strncat( str, App_res.ant_freq_set  ,
 sizeof(str)-1 );
 (gdb)
 466                 for ( p = str; *p != '\0'; p++ )
 (gdb)
 467                     *p = tolower( *p );
 (gdb)
 466                 for ( p = str; *p != '\0'; p++ )
 (gdb)
 467                     *p = tolower( *p );
 (gdb)
 466                 for ( p = str; *p != '\0'; p++ )
 (gdb)
 467                     *p = tolower( *p );
 (gdb)
 466                 for ( p = str; *p != '\0'; p++ )
 (gdb)
 467                     *p = tolower( *p );
 (gdb)
 466                 for ( p = str; *p != '\0'; p++ )
 (gdb)
 467                     *p = tolower( *p );
 (gdb)
 466                 for ( p = str; *p != '\0'; p++ )
 (gdb)
 467                     *p = tolower( *p );
 (gdb)
 466                 for ( p = str; *p != '\0'; p++ )
 (gdb)
 469                 for ( j = 1; ; j++ ) {
 (gdb)
 470                      if ( (p = TVCAPTUREGetTunerFreqSetName(c,j)) ==
 NULL  ) {
 (gdb)
 475                      if ( strstr( str, p ) != NULL ) {
 (gdb)
 476                          *set = j;
 (gdb)
 477                          break;
 (gdb)
 456             for ( i = 0; i < 2; i++ ) {
 (gdb)
 457                 TV_FREQ_SET *set = (i == 0) ? &p->ant_freq_set
 (gdb)
 461                 str[0] = '\0';
 (gdb)
 462                 if ( i == 0 )
 (gdb)
 465                     strncat( str, App_res.cable_freq_set,
 sizeof(str)-1 );
 (gdb)
 466                 for ( p = str; *p != '\0'; p++ )
 (gdb)
 467                     *p = tolower( *p );
 (gdb)
 466                 for ( p = str; *p != '\0'; p++ )
 (gdb)
 467                     *p = tolower( *p );
 (gdb)
 466                 for ( p = str; *p != '\0'; p++ )
 (gdb)
 467                     *p = tolower( *p );
 (gdb)
 466                 for ( p = str; *p != '\0'; p++ )
 (gdb)
 467                     *p = tolower( *p );
 (gdb)
 466                 for ( p = str; *p != '\0'; p++ )
 (gdb)
 467                     *p = tolower( *p );
 (gdb)
 466                 for ( p = str; *p != '\0'; p++ )
 (gdb)
 467                     *p = tolower( *p );
 (gdb)
 466                 for ( p = str; *p != '\0'; p++ )
 (gdb)
 467                     *p = tolower( *p );
 (gdb)
 466                 for ( p = str; *p != '\0'; p++ )
 (gdb)
 467                     *p = tolower( *p );
 (gdb)
 466                 for ( p = str; *p != '\0'; p++ )
 (gdb)
 469                 for ( j = 1; ; j++ ) {
 (gdb)
 470                      if ( (p = TVCAPTUREGetTunerFreqSetName(c,j)) ==
 NULL  ) {
 (gdb)
 475                      if ( strstr( str, p ) != NULL ) {
 (gdb)
 469                 for ( j = 1; ; j++ ) {
 (gdb)
 470                      if ( (p = TVCAPTUREGetTunerFreqSetName(c,j)) ==
 NULL  ) {
 (gdb)
 475                      if ( strstr( str, p ) != NULL ) {
 (gdb)
 476                          *set = j;
 (gdb)
 477                          break;
 (gdb)
 456             for ( i = 0; i < 2; i++ ) {
 (gdb)
 483             p->tuner_mode = TV_TUNER_MODE_ANTENNA;
 (gdb)
 484             if (( strstr( App_res.tuner_mode, "cable" ) != NULL ) ||
 (gdb)
 488             if ( p->tuner_mode == TV_TUNER_MODE_ANTENNA )
 (gdb)
 489                 TVCAPTURESetTunerFreqSet( c, p->ant_freq_set );
 (gdb) step
 TVCAPTURESetTunerFreqSet (c=0x80af8a0, set=1) at tvcapture.c:649
 649         larg = set;
 (gdb) next
 651         if ( ioctl( c->tfd, TVTUNER_SETTYPE, &larg ) < 0 ) {
 (gdb)
 660             if ( !TVCAPTUREQueryDriverState( c, &s ) ) {
 (gdb)
 664             TVCAPTURESetTunerChannel( c, s.tuner_chan );
 (gdb) step
 TVCAPTURESetTunerChannel (c=0x80af8a0, chan_num=0) at tvcapture.c:599
 599         TV_INT32 larg = chan_num;
 (gdb)
 604         if ( ioctl( c->tfd, BT848_GAUDIO, &old_audio ) < 0 ) {
 (gdb)
 609         if ( ioctl( c->tfd, TVTUNER_SETCHNL, &larg ) < 0 ) {
 
 The system freezes after that line and I couldn't even step into it.
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200603250500.k2P50kTv046767>