kern/113785: [firewire] dropouts when playing DV on firewire
Dieter
freebsd at sopwith.solgatos.com
Fri Nov 16 14:20:03 PST 2007
The following reply was made to PR kern/113785; it has been noted by GNATS.
From: Dieter <freebsd at sopwith.solgatos.com>
To: bug-followup at FreeBSD.org
Cc:
Subject: Re: kern/113785: [firewire] dropouts when playing DV on firewire
Date: Fri, 16 Nov 2007 13:23:35 +0000
[ previous reply didn't make it into the PR system, trying again ]
In message <200710300119.l9U1Jsv8040070 at freefall.freebsd.org>, simokawa at FreeBSD.org writes:
> Synopsis: [firewire] dropouts when playing DV on firewire
>
> State-Changed-From-To: open->feedback
> State-Changed-By: simokawa
> State-Changed-When: Tue Oct 30 01:17:44 UTC 2007
> State-Changed-Why:
> I increased tx/rx buffer size in rev. 1.7 and 1.5.12.2 of
> src/usr.sbin/fwcontrol/fwdv.c. I hope this fixes your problem.
>
> http://www.freebsd.org/cgi/query-pr.cgi?pr=113785
-#define NCHUNK 8
+#define NCHUNK 64
I tried this, it didn't help. I also tried cranking it up to 256,
which still didn't help. :-(
Given that the NEC controller has the problem only when "hot powered-up",
I wonder if it is an initialization problem. Is there a way to log
what FreeBSD sends to the camcorder, similar to tcpdump(1) ? Comparing
what FreeBSD sends if it detects the camcorder at boot time with what
it sends when the camcorder is powered up later might allow fixing the
having-to-reboot problem. Perhaps the VIA controller always sends
the bad initialization?
The compiler whined:
fwcontrol.c:611: warning: control reaches end of non-void function
fwdv.c:93: warning: no previous prototype for 'dvrecv'
fwdv.c:248: warning: no previous prototype for 'dvsend'
At least the compiler warnings are easily fixed:
diff -u -r1.1 fwcontrol.c
--- fwcontrol.c 2007/10/30 15:32:15 1.1
+++ fwcontrol.c 2007/10/30 15:33:10
@@ -58,7 +58,7 @@
extern int dvrecv(int, char *, char, int);
extern int dvsend(int, char *, char, int);
-int sysctl_set_int(const char *, int);
+void sysctl_set_int(const char *, int);
static void
usage(void)
@@ -603,7 +603,7 @@
}
}
-int
+void
sysctl_set_int(const char *name, int val)
{
if (sysctlbyname(name, NULL, NULL, &val, sizeof(int)) < 0)
diff -u -r1.1 fwdv.c
--- fwdv.c 2007/10/30 02:50:42 1.1
+++ fwdv.c 2007/10/30 15:45:42
@@ -88,6 +88,10 @@
#define MAXBLOCKS (300)
#define CYCLE_FRAC 0xc00
+/* prototypes */
+int dvrecv(int, char *, char, int);
+int dvsend(int, char *, char, int);
+
int
dvrecv(int d, char *filename, char ich, int count)
{
More information about the freebsd-firewire
mailing list