kern/113785: [firewire] dropouts when playing DV on firewire

Dieter freebsd at sopwith.solgatos.com
Tue Oct 30 10:18:22 PDT 2007


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