Hey all,
I'm working with the B990 on an ARM-based embedded system based on
linux-2.6.27.47.
H.264 is coming out of the cam, but I don't see an SPS/PPS, and all
the frames are
P slices, e.g. like this and similar:
00 00 00 01 61 9a 00 38 37 e0 20 30 ...
Secondly, after some period of running, the USB controller throws up
an over-current error,
and then the device is not usable without a reboot. Maybe this big
sucker
really draws too much current?
Usually I am not able to two consecutive successful opens of the
device.
By the way, I patched the driver to make the trace and quirks sysctl
parameters, since I have it compiled into the kernel.
Index: linux-2.6.27.47/drivers/media/video/uvc/uvc_driver.c
===================================================================
--- linux-2.6.27.47.orig/drivers/media/video/uvc/uvc_driver.c
+++ linux-2.6.27.47/drivers/media/video/uvc/uvc_driver.c
@@ -30,6 +30,7 @@
#include <linux/usb.h>
#include <linux/videodev2.h>
#include <linux/vmalloc.h>
+#include <linux/sysctl.h>
#include <linux/wait.h>
#include <asm/atomic.h>
@@ -39,6 +40,7 @@
#define DRIVER_AUTHOR "Laurent Pinchart
<laurent.pinch...@skynet.be>"
#define DRIVER_DESC "USB Video Class driver"
+#define DRIVER_NAME "uvcvideo"
#ifndef DRIVER_VERSION
#define DRIVER_VERSION "v0.1.0"
#endif
@@ -1970,6 +1972,37 @@ struct uvc_driver uvc_driver = {
},
};
+static struct ctl_table uvc_sysctl_entries[] =
+{
+ {
+ .procname = "trace",
+ .data = &uvc_trace_param,
+ .maxlen = sizeof( int ),
+ .mode = 0644,
+ .proc_handler = &proc_dointvec,
+ },
+ {
+ .procname = "quirks",
+ .data = &uvc_quirks_param,
+ .maxlen = sizeof( int ),
+ .mode = 0644,
+ .proc_handler = &proc_dointvec,
+ },
+ { .ctl_name = 0 }
+};
+
+static struct ctl_table uvc_sysctl_root[] =
+{
+ {
+ .procname = "uvc_video",
+ .mode = 0555,
+ .child = uvc_sysctl_entries,
+ },
+ { .ctl_name = 0 }
+};
+
+static struct ctl_table_header *uvc_sysctl_header;
+
static int __init uvc_init(void)
{
int result;
@@ -1981,14 +2014,22 @@ static int __init uvc_init(void)
uvc_ctrl_init();
+ uvc_sysctl_header = register_sysctl_table(uvc_sysctl_root);
+
result = usb_register(&uvc_driver.driver);
+
if (result == 0)
- printk(KERN_INFO DRIVER_DESC " (" DRIVER_VERSION
")\n");
+ printk(KERN_INFO DRIVER_NAME ": " DRIVER_DESC " ("
DRIVER_VERSION ")\n");
+
+ if (uvc_sysctl_header == 0)
+ printk(KERN_ERR DRIVER_NAME ": unable to register
sysctl table\n");
+
return result;
}
static void __exit uvc_cleanup(void)
{
+ unregister_sysctl_table(uvc_sysctl_header);
usb_deregister(&uvc_driver.driver);
}
_______________________________________________
Linux-uvc-devel mailing list
Linux-uvc-devel@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/linux-uvc-devel