Enhance the support of USB webcams
Last Updated: July 27, 2007
Introduction
OpenSolaris already supports USB webcams and a video conferencing application (Ekiga). Please refer to USB webcam driver project page for detail. This project is going to enhance the support of USB webcams.
USB webcams are popular now, they are widely used in desktop/laptop systems. Some video applications, like video conferencing, can not work without these devices.
At present, USB webcam drivers running in OS kernel support some basic webcam functions, like read video stream from the device, issue some video control commands to the device, decode video formats, etc. However, it is too difficult to develop/update kernel drivers to support all the fancy features from webcam vendors. Some new features (like face tracing, pan, etc.) are vendor specific, and people need implementing proprietary algorithms to support them. Therefore, it is not easy to support these features in kernel drivers, especially in class drivers.
To further illustrate the problem, let's take USB video class spec (see usb.org) as an example. This class spec defines common video interfaces that a USB webcam may have, but these interfaces can not cover the new features mentioned above. From the hardware view, the spec does allow webcam vendors to extend their own fancy features by implementing some extra functions in the device. From the software view, although webcam vendors can write their own device drivers to support the fancy features, it is really a tough task to re-write a kernel driver. A much better choice is, keeping the kernel driver untouched or making only slight modifications to the kernel driver, instead, we implement the vendor specific features in userland libs and applications.
The first stage of this project will focus on supporting some Logitech webcams. Because they are popular in the market and there are several models of them are compliant to USB video class spec. There is a usb video class driver available for these class compliant webcams, so some basic video features are already supported by the driver. It is feasible to enhance the support of the webcams complaint to USB video class spec first.
Goal
- This project will deliver a set of userland libs and applications, and maybe some small patches to the existing USB webcam drivers .
Status
Investigating. We need have a good design first.
Discussion
How to participate
- Subscribe to driver-discuss@opensolaris.org mail list by sending an empty email to driver-discuss-subscribe@opensolaris.orgFailed to execute macro: codeorg.xwiki.rendering.macro.MacroExecutionException: Failed to highlight content
at org.xwiki.rendering.internal.macro.code.CodeMacro.parseContent(CodeMacro.java:85)
at org.xwiki.rendering.internal.macro.code.CodeMacro.parseContent(CodeMacro.java:46)
at org.xwiki.rendering.macro.box.AbstractBoxMacro.execute(AbstractBoxMacro.java:139)
at org.xwiki.rendering.macro.box.AbstractBoxMacro.execute(AbstractBoxMacro.java:55)
at org.xwiki.rendering.internal.transformation.MacroTransformation.transformOnce(MacroTransformation.java:168)
at org.xwiki.rendering.internal.transformation.MacroTransformation.transform(MacroTransformation.java:112)
at org.xwiki.rendering.internal.transformation.DefaultTransformationManager.performTransformations(DefaultTransformationManager.java:86)
at com.xpn.xwiki.doc.XWikiDocument.performSyntaxConversion(XWikiDocument.java:5079)
at com.xpn.xwiki.doc.XWikiDocument.performSyntaxConversion(XWikiDocument.java:5052)
at com.xpn.xwiki.doc.XWikiDocument.getRenderedContent(XWikiDocument.java:501)
at com.xpn.xwiki.api.Document.getRenderedContent(Document.java:454)
at sun.reflect.GeneratedMethodAccessor213.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.doInvoke(UberspectImpl.java:389)
at org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.invoke(UberspectImpl.java:378)
at org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:270)
at org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:252)
at org.apache.velocity.runtime.parser.node.ASTReference.render(ASTReference.java:332)
at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:336)
at org.xwiki.velocity.DefaultVelocityEngine.evaluate(DefaultVelocityEngine.java:178)
at org.xwiki.velocity.DefaultVelocityEngine.evaluate(DefaultVelocityEngine.java:143)
at com.xpn.xwiki.render.XWikiVelocityRenderer.evaluate(XWikiVelocityRenderer.java:108)
at com.xpn.xwiki.XWiki.parseTemplate(XWiki.java:1605)
at com.xpn.xwiki.api.XWiki.parseTemplate(XWiki.java:656)
at sun.reflect.GeneratedMethodAccessor139.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.doInvoke(UberspectImpl.java:389)
at org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.invoke(UberspectImpl.java:378)
at org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:270)
at org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:252)
at org.apache.velocity.runtime.parser.node.ASTReference.render(ASTReference.java:332)
at org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:72)
at org.apache.velocity.runtime.directive.VelocimacroProxy.render(VelocimacroProxy.java:212)
at org.apache.velocity.runtime.directive.RuntimeMacro.render(RuntimeMacro.java:247)
at org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirective.java:175)
at org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:72)
at org.apache.velocity.runtime.parser.node.ASTIfStatement.render(ASTIfStatement.java:87)
at org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:72)
at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:336)
at org.apache.velocity.runtime.parser.node.ASTIfStatement.render(ASTIfStatement.java:106)
at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:336)
at org.xwiki.velocity.DefaultVelocityEngine.evaluate(DefaultVelocityEngine.java:178)
at org.xwiki.velocity.DefaultVelocityEngine.evaluate(DefaultVelocityEngine.java:143)
at com.xpn.xwiki.render.XWikiVelocityRenderer.evaluate(XWikiVelocityRenderer.java:108)
at com.xpn.xwiki.XWiki.parseTemplate(XWiki.java:1605)
at com.xpn.xwiki.web.Utils.parseTemplate(Utils.java:124)
at com.xpn.xwiki.web.XWikiAction.execute(XWikiAction.java:226)
at com.xpn.xwiki.web.XWikiAction.execute(XWikiAction.java:115)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.xpn.xwiki.wysiwyg.server.filter.ConversionFilter.doFilter(ConversionFilter.java:145)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.xpn.xwiki.web.ActionFilter.doFilter(ActionFilter.java:111)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.xpn.xwiki.plugin.webdav.XWikiDavFilter.doFilter(XWikiDavFilter.java:68)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.xpn.xwiki.web.SavedRequestRestorerFilter.doFilter(SavedRequestRestorerFilter.java:295)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.xpn.xwiki.web.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:112)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:568)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:354)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
Caused by: Traceback (most recent call last):
File "<string>", line 3, in <module>
File "<string>", line 3, in <module>
File "/opt/oso/tomcat/work/Catalina/hub.opensolaris.org/_/loader/Lib/pygments/lexers/__init__.py", line 180, in guess_lexer
rv = lexer.analyse_text(_text)
File "/opt/oso/tomcat/work/Catalina/hub.opensolaris.org/_/loader/Lib/pygments/util.py", line 110, in text_analyse
rv = f(text)
File "/opt/oso/tomcat/work/Catalina/hub.opensolaris.org/_/loader/Lib/pygments/lexers/text.py", line 476, in analyse_text
if text[0] != '.':
IndexError: index out of range: 0
at org.python.core.PyException.fillInStackTrace(PyException.java:65)
at java.lang.Throwable.<init>(Throwable.java:181)
at java.lang.Exception.<init>(Exception.java:29)
at java.lang.RuntimeException.<init>(RuntimeException.java:32)
at org.python.core.PyException.<init>(PyException.java:46)
at org.python.core.PyException.<init>(PyException.java:43)
at org.python.core.PyException.<init>(PyException.java:56)
at org.python.core.Py.IndexError(Py.java:208)
at org.python.core.SequenceIndexDelegate.checkIdxAndGetItem(SequenceIndexDelegate.java:63)
at org.python.core.PySequence.seq___getitem__(PySequence.java:283)
at org.python.core.PySequence.__getitem__(PySequence.java:279)
at pygments.lexers.text$py.analyse_text$16(/opt/oso/tomcat/work/Catalina/hub.opensolaris.org/_/loader/Lib/pygments/lexers/text.py:483)
at pygments.lexers.text$py.call_function(/opt/oso/tomcat/work/Catalina/hub.opensolaris.org/_/loader/Lib/pygments/lexers/text.py)
at org.python.core.PyTableCode.call(PyTableCode.java:166)
at org.python.core.PyBaseCode.call(PyBaseCode.java:155)
at org.python.core.PyFunction.__call__(PyFunction.java:307)
at pygments.util$py.text_analyse$9(/opt/oso/tomcat/work/Catalina/hub.opensolaris.org/_/loader/Lib/pygments/util.py:113)
at pygments.util$py.call_function(/opt/oso/tomcat/work/Catalina/hub.opensolaris.org/_/loader/Lib/pygments/util.py)
at org.python.core.PyTableCode.call(PyTableCode.java:166)
at org.python.core.PyBaseCode.call(PyBaseCode.java:155)
at org.python.core.PyFunction.__call__(PyFunction.java:307)
at pygments.lexers$py.guess_lexer$9(/opt/oso/tomcat/work/Catalina/hub.opensolaris.org/_/loader/Lib/pygments/lexers/__init__.py:187)
at pygments.lexers$py.call_function(/opt/oso/tomcat/work/Catalina/hub.opensolaris.org/_/loader/Lib/pygments/lexers/__init__.py)
at org.python.core.PyTableCode.call(PyTableCode.java:166)
at org.python.core.PyBaseCode.call(PyBaseCode.java:303)
at org.python.core.PyFunction.function___call__(PyFunction.java:328)
at org.python.core.PyFunction.__call__(PyFunction.java:323)
at org.python.pycode._pyx1732277.f$0(<string>:5)
at org.python.pycode._pyx1732277.call_function(<string>)
at org.python.core.PyTableCode.call(PyTableCode.java:166)
at org.python.core.PyCode.call(PyCode.java:14)
at org.python.core.Py.runCode(Py.java:1206)
at org.python.core.Py.exec(Py.java:1237)
at org.python.util.PythonInterpreter.exec(PythonInterpreter.java:124)
at org.xwiki.rendering.internal.parser.pygments.PygmentsParser.highlight(PygmentsParser.java:183)
at org.xwiki.rendering.internal.macro.code.CodeMacro.highlight(CodeMacro.java:124)
at org.xwiki.rendering.internal.macro.code.CodeMacro.parseContent(CodeMacro.java:82)
... 85 more
- Send emails to driver-discuss@opensolaris.org with a subject including a "usb" string.
- You also can go to Driver Discuss Forum to post / reply / review all the discussions happened in wusb-discuss@opensolaris.org mail list.
References