ports/94894: multimedia/fxtv causes freeze and reboot on DGA failure on FreeBSD 6.1-PRERELEASES
Naram Qashat
cyberbotx at cyberbotx.com
Sat Mar 25 05:00:46 UTC 2006
The following reply was made to PR ports/94894; it has been noted by GNATS.
From: "Naram Qashat" <cyberbotx at cyberbotx.com>
To: <bug-followup at FreeBSD.org>,
<cyberbotx at 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.
More information about the freebsd-ports-bugs
mailing list