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

Reply via email to