精华内容
下载资源
问答
  • 【实例简介】android USB调用摄像头,经过半月时间终于搞定了, 在网上找了好多,还有日文注释的 希望段友多多包涵,首先手机支持uvc 测试机 荣耀8. 我也是在网上找啊找,如何谁在学习接触这方面,共同学习,【实例...

    【实例简介】

    android USB调用摄像头,经过半月时间终于搞定了, 在网上找了好多,还有日文注释的 希望段友多多包涵,首先手机支持uvc 测试机 荣耀8. 我也是在网上找啊找,如何谁在学习接触这方面,共同学习,

    【实例截图】

    【核心代码】

    UVCCdemo

    └── UVCCdemo

    ├── AndroidManifest.xml

    ├── bin

    │   ├── AndroidManifest.xml

    │   ├── classes

    │   │   └── com

    │   │   └── serenegiant

    │   │   ├── act

    │   │   │   ├── MainActivity$1.class

    │   │   │   ├── MainActivity$2$1.class

    │   │   │   ├── MainActivity$2$2.class

    │   │   │   ├── MainActivity$2.class

    │   │   │   ├── MainActivity$3.class

    │   │   │   └── MainActivity.class

    │   │   ├── uitl

    │   │   │   ├── BuildCheck.class

    │   │   │   └── HandlerThreadHandler.class

    │   │   ├── usb

    │   │   │   ├── CameraDialog$1.class

    │   │   │   ├── CameraDialog$2.class

    │   │   │   ├── CameraDialog$CameraDialogParent.class

    │   │   │   ├── CameraDialog$DeviceListAdapter.class

    │   │   │   ├── CameraDialog.class

    │   │   │   ├── DeviceFilter.class

    │   │   │   ├── IButtonCallback.class

    │   │   │   ├── IFrameCallback.class

    │   │   │   ├── IStatusCallback.class

    │   │   │   ├── Size$1.class

    │   │   │   ├── Size.class

    │   │   │   ├── USBMonitor$1.class

    │   │   │   ├── USBMonitor$2$1.class

    │   │   │   ├── USBMonitor$2.class

    │   │   │   ├── USBMonitor$3.class

    │   │   │   ├── USBMonitor$4.class

    │   │   │   ├── USBMonitor$5.class

    │   │   │   ├── USBMonitor$6.class

    │   │   │   ├── USBMonitor$OnDeviceConnectListener.class

    │   │   │   ├── USBMonitor$UsbControlBlock.class

    │   │   │   ├── USBMonitor$UsbDeviceInfo.class

    │   │   │   ├── USBMonitor.class

    │   │   │   ├── USBVendorId.class

    │   │   │   └── UVCCamera.class

    │   │   └── uvccdemo

    │   │   ├── BuildConfig.class

    │   │   ├── R$attr.class

    │   │   ├── R$dimen.class

    │   │   ├── R$drawable.class

    │   │   ├── R$id.class

    │   │   ├── R$layout.class

    │   │   ├── R$menu.class

    │   │   ├── R$string.class

    │   │   ├── R$style.class

    │   │   ├── R$xml.class

    │   │   └── R.class

    │   ├── classes.dex

    │   ├── dexedLibs

    │   │   ├── android-support-v4-669ead4e445f4f36bee34703638d6877.jar

    │   │   └── core-3.0.0-9c7a7554113f660eb959efdf9a628a7b.jar

    │   ├── jarlist.cache

    │   ├── res

    │   │   ├── drawable-hdpi

    │   │   │   └── ic_launcher.png

    │   │   ├── drawable-mdpi

    │   │   │   └── ic_launcher.png

    │   │   ├── drawable-xhdpi

    │   │   │   └── ic_launcher.png

    │   │   └── drawable-xxhdpi

    │   │   └── ic_launcher.png

    │   ├── resources.ap_

    │   └── UVCCdemo.apk

    ├── gen

    │   └── com

    │   └── serenegiant

    │   └── uvccdemo

    │   ├── BuildConfig.java

    │   └── R.java

    ├── ic_launcher-web.png

    ├── jni

    │   ├── Android.mk

    │   ├── Application.mk

    │   ├── libjpeg-turbo-1.5.0

    │   │   ├── acinclude.m4

    │   │   ├── aclocal.m4

    │   │   ├── Android.mk

    │   │   ├── ar-lib

    │   │   ├── bmp.c

    │   │   ├── bmp.h

    │   │   ├── BUILDING.md

    │   │   ├── cderror.h

    │   │   ├── cdjpeg.c

    │   │   ├── cdjpeg.h

    │   │   ├── change.log

    │   │   ├── ChangeLog.md

    │   │   ├── cjpeg.1

    │   │   ├── cjpeg.c

    │   │   ├── CMakeLists.txt

    │   │   ├── cmakescripts

    │   │   │   └── testclean.cmake

    │   │   ├── coderules.txt

    │   │   ├── compile

    │   │   ├── config.guess

    │   │   ├── config.h.in

    │   │   ├── config.sub

    │   │   ├── configure

    │   │   ├── configure.ac

    │   │   ├── depcomp

    │   │   ├── djpeg.1

    │   │   ├── djpeg.c

    │   │   ├── doc

    │   │   │   └── html

    │   │   │   ├── annotated.html

    │   │   │   ├── bc_s.png

    │   │   │   ├── bdwn.png

    │   │   │   ├── classes.html

    │   │   │   ├── closed.png

    │   │   │   ├── doxygen.css

    │   │   │   ├── doxygen-extra.css

    │   │   │   ├── doxygen.png

    │   │   │   ├── dynsections.js

    │   │   │   ├── ftv2blank.png

    │   │   │   ├── ftv2cl.png

    │   │   │   ├── ftv2doc.png

    │   │   │   ├── ftv2folderclosed.png

    │   │   │   ├── ftv2folderopen.png

    │   │   │   ├── ftv2lastnode.png

    │   │   │   ├── ftv2link.png

    │   │   │   ├── ftv2mlastnode.png

    │   │   │   ├── ftv2mnode.png

    │   │   │   ├── ftv2mo.png

    │   │   │   ├── ftv2node.png

    │   │   │   ├── ftv2ns.png

    │   │   │   ├── ftv2plastnode.png

    │   │   │   ├── ftv2pnode.png

    │   │   │   ├── ftv2splitbar.png

    │   │   │   ├── ftv2vertline.png

    │   │   │   ├── functions.html

    │   │   │   ├── functions_vars.html

    │   │   │   ├── group___turbo_j_p_e_g.html

    │   │   │   ├── index.html

    │   │   │   ├── jquery.js

    │   │   │   ├── modules.html

    │   │   │   ├── nav_f.png

    │   │   │   ├── nav_g.png

    │   │   │   ├── nav_h.png

    │   │   │   ├── open.png

    │   │   │   ├── search

    │   │   │   │   ├── all_63.html

    │   │   │   │   ├── all_63.js

    │   │   │   │   ├── all_64.html

    │   │   │   │   ├── all_64.js

    │   │   │   │   ├── all_68.html

    │   │   │   │   ├── all_68.js

    │   │   │   │   ├── all_6e.html

    │   │   │   │   ├── all_6e.js

    │   │   │   │   ├── all_6f.html

    │   │   │   │   ├── all_6f.js

    │   │   │   │   ├── all_72.html

    │   │   │   │   ├── all_72.js

    │   │   │   │   ├── all_74.html

    │   │   │   │   ├── all_74.js

    │   │   │   │   ├── all_77.html

    │   │   │   │   ├── all_77.js

    │   │   │   │   ├── all_78.html

    │   │   │   │   ├── all_78.js

    │   │   │   │   ├── all_79.html

    │   │   │   │   ├── all_79.js

    │   │   │   │   ├── classes_74.html

    │   │   │   │   ├── classes_74.js

    │   │   │   │   ├── close.png

    │   │   │   │   ├── enums_74.html

    │   │   │   │   ├── enums_74.js

    │   │   │   │   ├── enumvalues_74.html

    │   │   │   │   ├── enumvalues_74.js

    │   │   │   │   ├── functions_74.html

    │   │   │   │   ├── functions_74.js

    │   │   │   │   ├── groups_74.html

    │   │   │   │   ├── groups_74.js

    │   │   │   │   ├── mag_sel.png

    │   │   │   │   ├── nomatches.html

    │   │   │   │   ├── search.css

    │   │   │   │   ├── search.js

    │   │   │   │   ├── search_l.png

    │   │   │   │   ├── search_m.png

    │   │   │   │   ├── search_r.png

    │   │   │   │   ├── typedefs_74.html

    │   │   │   │   ├── typedefs_74.js

    │   │   │   │   ├── variables_63.html

    │   │   │   │   ├── variables_63.js

    │   │   │   │   ├── variables_64.html

    │   │   │   │   ├── variables_64.js

    │   │   │   │   ├── variables_68.html

    │   │   │   │   ├── variables_68.js

    │   │   │   │   ├── variables_6e.html

    │   │   │   │   ├── variables_6e.js

    │   │   │   │   ├── variables_6f.html

    │   │   │   │   ├── variables_6f.js

    │   │   │   │   ├── variables_72.html

    │   │   │   │   ├── variables_72.js

    │   │   │   │   ├── variables_74.html

    │   │   │   │   ├── variables_74.js

    │   │   │   │   ├── variables_77.html

    │   │   │   │   ├── variables_77.js

    │   │   │   │   ├── variables_78.html

    │   │   │   │   ├── variables_78.js

    │   │   │   │   ├── variables_79.html

    │   │   │   │   └── variables_79.js

    │   │   │   ├── structtjregion.html

    │   │   │   ├── structtjscalingfactor.html

    │   │   │   ├── structtjtransform.html

    │   │   │   ├── sync_off.png

    │   │   │   ├── sync_on.png

    │   │   │   ├── tab_a.png

    │   │   │   ├── tab_b.png

    │   │   │   ├── tab_h.png

    │   │   │   ├── tabs.css

    │   │   │   └── tab_s.png

    │   │   ├── doxygen.config

    │   │   ├── doxygen-extra.css

    │   │   ├── example.c

    │   │   ├── include

    │   │   │   ├── config.h

    │   │   │   ├── jconfig.h

    │   │   │   ├── jconfigint.h

    │   │   │   └── jsimdcfg.inc

    │   │   ├── install-sh

    │   │   ├── jaricom.c

    │   │   ├── java

    │   │   │   ├── CMakeLists.txt

    │   │   │   ├── doc

    │   │   │   │   ├── allclasses-frame.html

    │   │   │   │   ├── allclasses-noframe.html

    │   │   │   │   ├── constant-values.html

    │   │   │   │   ├── deprecated-list.html

    │   │   │   │   ├── help-doc.html

    │   │   │   │   ├── index-all.html

    │   │   │   │   ├── index.html

    │   │   │   │   ├── org

    │   │   │   │   │   └── libjpegturbo

    │   │   │   │   │   └── turbojpeg

    │   │   │   │   │   ├── package-frame.html

    │   │   │   │   │   ├── package-summary.html

    │   │   │   │   │   ├── package-tree.html

    │   │   │   │   │   ├── TJCompressor.html

    │   │   │   │   │   ├── TJCustomFilter.html

    │   │   │   │   │   ├── TJDecompressor.html

    │   │   │   │   │   ├── TJException.html

    │   │   │   │   │   ├── TJ.html

    │   │   │   │   │   ├── TJScalingFactor.html

    │   │   │   │   │   ├── TJTransformer.html

    │   │   │   │   │   ├── TJTransform.html

    │   │   │   │   │   └── YUVImage.html

    │   │   │   │   ├── overview-tree.html

    │   │   │   │   ├── package-list

    │   │   │   │   ├── resources

    │   │   │   │   │   ├── background.gif

    │   │   │   │   │   ├── tab.gif

    │   │   │   │   │   ├── titlebar_end.gif

    │   │   │   │   │   └── titlebar.gif

    │   │   │   │   ├── serialized-form.html

    │   │   │   │   └── stylesheet.css

    │   │   │   ├── Makefile.am

    │   │   │   ├── Makefile.in

    │   │   │   ├── MANIFEST.MF

    │   │   │   ├── org

    │   │   │   │   └── libjpegturbo

    │   │   │   │   └── turbojpeg

    │   │   │   │   ├── TJCompressor.java

    │   │   │   │   ├── TJCustomFilter.java

    │   │   │   │   ├── TJDecompressor.java

    │   │   │   │   ├── TJException.java

    │   │   │   │   ├── TJ.java

    │   │   │   │   ├── TJLoader.java.in

    │   │   │   │   ├── TJLoader.java.tmpl

    │   │   │   │   ├── TJScalingFactor.java

    │   │   │   │   ├── TJTransformer.java

    │   │   │   │   ├── TJTransform.java

    │   │   │   │   └── YUVImage.java

    │   │   │   ├── org_libjpegturbo_turbojpeg_TJCompressor.h

    │   │   │   ├── org_libjpegturbo_turbojpeg_TJDecompressor.h

    │   │   │   ├── org_libjpegturbo_turbojpeg_TJ.h

    │   │   │   ├── org_libjpegturbo_turbojpeg_TJTransformer.h

    │   │   │   ├── README

    │   │   │   ├── TJBench.java

    │   │   │   ├── TJExample.java

    │   │   │   └── TJUnitTest.java

    │   │   ├── jcapimin.c

    │   │   ├── jcapistd.c

    │   │   ├── jcarith.c

    │   │   ├── jccoefct.c

    │   │   ├── jccolext.c

    │   │   ├── jccolor.c

    │   │   ├── jcdctmgr.c

    │   │   ├── jchuff.c

    │   │   ├── jchuff.h

    │   │   ├── jcinit.c

    │   │   ├── jcmainct.c

    │   │   ├── jcmarker.c

    │   │   ├── jcmaster.c

    │   │   ├── jcomapi.c

    │   │   ├── jconfig.h.in

    │   │   ├── jconfigint.h.in

    │   │   ├── jconfig.txt

    │   │   ├── jcparam.c

    │   │   ├── jcphuff.c

    │   │   ├── jcprepct.c

    │   │   ├── jcsample.c

    │   │   ├── jcstest.c

    │   │   ├── jctrans.c

    │   │   ├── jdapimin.c

    │   │   ├── jdapistd.c

    │   │   ├── jdarith.c

    │   │   ├── jdatadst.c

    │   │   ├── jdatadst-tj.c

    │   │   ├── jdatasrc.c

    │   │   ├── jdatasrc-tj.c

    │   │   ├── jdcoefct.c

    │   │   ├── jdcoefct.h

    │   │   ├── jdcol565.c

    │   │   ├── jdcolext.c

    │   │   ├── jdcolor.c

    │   │   ├── jdct.h

    │   │   ├── jddctmgr.c

    │   │   ├── jdhuff.c

    │   │   ├── jdhuff.h

    │   │   ├── jdinput.c

    │   │   ├── jdmainct.c

    │   │   ├── jdmainct.h

    │   │   ├── jdmarker.c

    │   │   ├── jdmaster.c

    │   │   ├── jdmaster.h

    │   │   ├── jdmerge.c

    │   │   ├── jdmrg565.c

    │   │   ├── jdmrgext.c

    │   │   ├── jdphuff.c

    │   │   ├── jdpostct.c

    │   │   ├── jdsample.c

    │   │   ├── jdsample.h

    │   │   ├── jdtrans.c

    │   │   ├── jerror.c

    │   │   ├── jerror.h

    │   │   ├── jfdctflt.c

    │   │   ├── jfdctfst.c

    │   │   ├── jfdctint.c

    │   │   ├── jidctflt.c

    │   │   ├── jidctfst.c

    │   │   ├── jidctint.c

    │   │   ├── jidctred.c

    │   │   ├── jinclude.h

    │   │   ├── jmemmgr.c

    │   │   ├── jmemnobs.c

    │   │   ├── jmemsys.h

    │   │   ├── jmorecfg.h

    │   │   ├── jpegcomp.h

    │   │   ├── jpegint.h

    │   │   ├── jpeglib.h

    │   │   ├── jpeg_nbits_table.h

    │   │   ├── jpegtran.1

    │   │   ├── jpegtran.c

    │   │   ├── jquant1.c

    │   │   ├── jquant2.c

    │   │   ├── jsimddct.h

    │   │   ├── jsimd.h

    │   │   ├── jsimd_none.c

    │   │   ├── jstdhuff.c

    │   │   ├── jutils.c

    │   │   ├── jversion.h

    │   │   ├── libjpeg.map.in

    │   │   ├── libjpeg.txt

    │   │   ├── LICENSE.md

    │   │   ├── ltmain.sh

    │   │   ├── Makefile.am

    │   │   ├── Makefile.in

    │   │   ├── md5

    │   │   │   ├── CMakeLists.txt

    │   │   │   ├── Makefile.am

    │   │   │   ├── Makefile.in

    │   │   │   ├── md5.c

    │   │   │   ├── md5cmp.c

    │   │   │   ├── md5.h

    │   │   │   └── md5hl.c

    │   │   ├── missing

    │   │   ├── rdbmp.c

    │   │   ├── rdcolmap.c

    │   │   ├── rdgif.c

    │   │   ├── rdjpgcom.1

    │   │   ├── rdjpgcom.c

    │   │   ├── rdppm.c

    │   │   ├── rdrle.c

    │   │   ├── rdswitch.c

    │   │   ├── rdtarga.c

    │   │   ├── README.ijg

    │   │   ├── README.md

    │   │   ├── release

    │   │   │   ├── deb-control.tmpl

    │   │   │   ├── Distribution.xml

    │   │   │   ├── libjpeg.pc.in

    │   │   │   ├── libjpeg-turbo.nsi.in

    │   │   │   ├── libjpeg-turbo.spec.in

    │   │   │   ├── libturbojpeg.pc.in

    │   │   │   ├── License.rtf

    │   │   │   ├── makecygwinpkg.in

    │   │   │   ├── makedpkg.in

    │   │   │   ├── makemacpkg.in

    │   │   │   ├── ReadMe.txt

    │   │   │   ├── uninstall.in

    │   │   │   └── Welcome.rtf

    │   │   ├── sharedlib

    │   │   │   └── CMakeLists.txt

    │   │   ├── simd

    │   │   │   ├── CMakeLists.txt

    │   │   │   ├── jccolext-altivec.c

    │   │   │   ├── jccolext-mmx.asm

    │   │   │   ├── jccolext-sse2-64.asm

    │   │   │   ├── jccolext-sse2.asm

    │   │   │   ├── jccolor-altivec.c

    │   │   │   ├── jccolor-mmx.asm

    │   │   │   ├── jccolor-sse2-64.asm

    │   │   │   ├── jccolor-sse2.asm

    │   │   │   ├── jcgray-altivec.c

    │   │   │   ├── jcgray-mmx.asm

    │   │   │   ├── jcgray-sse2-64.asm

    │   │   │   ├── jcgray-sse2.asm

    │   │   │   ├── jcgryext-altivec.c

    │   │   │   ├── jcgryext-mmx.asm

    │   │   │   ├── jcgryext-sse2-64.asm

    │   │   │   ├── jcgryext-sse2.asm

    │   │   │   ├── jchuff-sse2-64.asm

    │   │   │   ├── jchuff-sse2.asm

    │   │   │   ├── jcolsamp.inc

    │   │   │   ├── jcsample-altivec.c

    │   │   │   ├── jcsample.h

    │   │   │   ├── jcsample-mmx.asm

    │   │   │   ├── jcsample-sse2-64.asm

    │   │   │   ├── jcsample-sse2.asm

    │   │   │   ├── jdcolext-altivec.c

    │   │   │   ├── jdcolext-mmx.asm

    │   │   │   ├── jdcolext-sse2-64.asm

    │   │   │   ├── jdcolext-sse2.asm

    │   │   │   ├── jdcolor-altivec.c

    │   │   │   ├── jdcolor-mmx.asm

    │   │   │   ├── jdcolor-sse2-64.asm

    │   │   │   ├── jdcolor-sse2.asm

    │   │   │   ├── jdct.inc

    │   │   │   ├── jdmerge-altivec.c

    │   │   │   ├── jdmerge-mmx.asm

    │   │   │   ├── jdmerge-sse2-64.asm

    │   │   │   ├── jdmerge-sse2.asm

    │   │   │   ├── jdmrgext-altivec.c

    │   │   │   ├── jdmrgext-mmx.asm

    │   │   │   ├── jdmrgext-sse2-64.asm

    │   │   │   ├── jdmrgext-sse2.asm

    │   │   │   ├── jdsample-altivec.c

    │   │   │   ├── jdsample-mmx.asm

    │   │   │   ├── jdsample-sse2-64.asm

    │   │   │   ├── jdsample-sse2.asm

    │   │   │   ├── jfdctflt-3dn.asm

    │   │   │   ├── jfdctflt-sse-64.asm

    │   │   │   ├── jfdctflt-sse.asm

    │   │   │   ├── jfdctfst-altivec.c

    │   │   │   ├── jfdctfst-mmx.asm

    │   │   │   ├── jfdctfst-sse2-64.asm

    │   │   │   ├── jfdctfst-sse2.asm

    │   │   │   ├── jfdctint-altivec.c

    │   │   │   ├── jfdctint-mmx.asm

    │   │   │   ├── jfdctint-sse2-64.asm

    │   │   │   ├── jfdctint-sse2.asm

    │   │   │   ├── jidctflt-3dn.asm

    │   │   │   ├── jidctflt-sse2-64.asm

    │   │   │   ├── jidctflt-sse2.asm

    │   │   │   ├── jidctflt-sse.asm

    │   │   │   ├── jidctfst-altivec.c

    │   │   │   ├── jidctfst-mmx.asm

    │   │   │   ├── jidctfst-sse2-64.asm

    │   │   │   ├── jidctfst-sse2.asm

    │   │   │   ├── jidctint-altivec.c

    │   │   │   ├── jidctint-mmx.asm

    │   │   │   ├── jidctint-sse2-64.asm

    │   │   │   ├── jidctint-sse2.asm

    │   │   │   ├── jidctred-mmx.asm

    │   │   │   ├── jidctred-sse2-64.asm

    │   │   │   ├── jidctred-sse2.asm

    │   │   │   ├── jpeg_nbits_table.inc

    │   │   │   ├── jquant-3dn.asm

    │   │   │   ├── jquantf-sse2-64.asm

    │   │   │   ├── jquantf-sse2.asm

    │   │   │   ├── jquanti-altivec.c

    │   │   │   ├── jquanti-sse2-64.asm

    │   │   │   ├── jquanti-sse2.asm

    │   │   │   ├── jquant-mmx.asm

    │   │   │   ├── jquant-sse.asm

    │   │   │   ├── jsimd_altivec.h

    │   │   │   ├── jsimd_arm64.c

    │   │   │   ├── jsimd_arm64_neon.S

    │   │   │   ├── jsimd_arm.c

    │   │   │   ├── jsimd_arm_neon.S

    │   │   │   ├── jsimdcfg.inc.h

    │   │   │   ├── jsimdcpu.asm

    │   │   │   ├── jsimdext.inc

    │   │   │   ├── jsimd.h

    │   │   │   ├── jsimd_i386.c

    │   │   │   ├── jsimd_mips.c

    │   │   │   ├── jsimd_mips_dspr2_asm.h

    │   │   │   ├── jsimd_mips_dspr2.S

    │   │   │   ├── jsimd_powerpc.c

    │   │   │   ├── jsimd_x86_64.c

    │   │   │   ├── Makefile.am

    │   │   │   ├── Makefile.in

    │   │   │   └── nasm_lt.sh

    │   │   ├── structure.txt

    │   │   ├── testimages

    │   │   │   ├── nightshot_iso_100.bmp

    │   │   │   ├── nightshot_iso_100.txt

    │   │   │   ├── testimgari.jpg

    │   │   │   ├── testimgint.jpg

    │   │   │   ├── testorig12.jpg

    │   │   │   ├── testorig.jpg

    │   │   │   ├── testorig.ppm

    │   │   │   ├── vgl_5674_0098.bmp

    │   │   │   ├── vgl_6434_0018a.bmp

    │   │   │   └── vgl_6548_0026a.bmp

    │   │   ├── tjbench.c

    │   │   ├── tjbenchtest.in

    │   │   ├── tjbenchtest.java.in

    │   │   ├── tjexampletest.in

    │   │   ├── tjunittest.c

    │   │   ├── tjutil.c

    │   │   ├── tjutil.h

    │   │   ├── transupp.c

    │   │   ├── transupp.h

    │   │   ├── turbojpeg.c

    │   │   ├── turbojpeg.h

    │   │   ├── turbojpeg-jni.c

    │   │   ├── turbojpeg-mapfile

    │   │   ├── turbojpeg-mapfile.jni

    │   │   ├── usage.txt

    │   │   ├── win

    │   │   │   ├── jconfig.h.in

    │   │   │   ├── jconfigint.h.in

    │   │   │   ├── jpeg62.def

    │   │   │   ├── jpeg62-memsrcdst.def

    │   │   │   ├── jpeg7.def

    │   │   │   ├── jpeg7-memsrcdst.def

    │   │   │   ├── jpeg8.def

    │   │   │   └── jsimdcfg.inc

    │   │   ├── wizard.txt

    │   │   ├── wrbmp.c

    │   │   ├── wrgif.c

    │   │   ├── wrjpgcom.1

    │   │   ├── wrjpgcom.c

    │   │   ├── wrppm.c

    │   │   ├── wrppm.h

    │   │   ├── wrrle.c

    │   │   └── wrtarga.c

    │   ├── libusb

    │   │   ├── android

    │   │   │   ├── config.h

    │   │   │   ├── config_original.h

    │   │   │   ├── jni

    │   │   │   │   ├── Android.mk

    │   │   │   │   ├── Android_original.mk

    │   │   │   │   ├── Application.mk

    │   │   │   │   ├── examples.mk

    │   │   │   │   ├── libusb.mk

    │   │   │   │   ├── libusb_original.mk

    │   │   │   │   └── tests.mk

    │   │   │   └── README

    │   │   ├── AUTHORS

    │   │   ├── autogen.sh

    │   │   ├── bootstrap.sh

    │   │   ├── ChangeLog

    │   │   ├── configure.ac

    │   │   ├── COPYING

    │   │   ├── doc

    │   │   │   ├── doxygen.cfg.in

    │   │   │   ├── libusb.png

    │   │   │   └── Makefile.am

    │   │   ├── examples

    │   │   │   ├── dpfp.c

    │   │   │   ├── dpfp_threaded.c

    │   │   │   ├── ezusb.c

    │   │   │   ├── ezusb.h

    │   │   │   ├── fxload.c

    │   │   │   ├── getopt

    │   │   │   │   ├── getopt1.c

    │   │   │   │   ├── getopt.c

    │   │   │   │   └── getopt.h

    │   │   │   ├── hotplugtest.c

    │   │   │   ├── listdevs.c

    │   │   │   ├── Makefile.am

    │   │   │   ├── sam3u_benchmark.c

    │   │   │   └── xusb.c

    │   │   ├── INSTALL

    │   │   ├── INSTALL_WIN.txt

    │   │   ├── libusb

    │   │   │   ├── config.h

    │   │   │   ├── core.c

    │   │   │   ├── core_original.c

    │   │   │   ├── descriptor.c

    │   │   │   ├── descriptor_original.c

    │   │   │   ├── hotplug.c

    │   │   │   ├── hotplug.h

    │   │   │   ├── hotplug_original.c

    │   │   │   ├── io.c

    │   │   │   ├── io_original.c

    │   │   │   ├── libusb-1.0.def

    │   │   │   ├── libusb-1.0.rc

    │   │   │   ├── libusb.h

    │   │   │   ├── libusbi.h

    │   │   │   ├── libusbi_original.h

    │   │   │   ├── libusb_original.h

    │   │   │   ├── Makefile.am

    │   │   │   ├── os

    │   │   │   │   ├── android_netlink.c

    │   │   │   │   ├── android_usbfs.c

    │   │   │   │   ├── android_usbfs.h

    │   │   │   │   ├── darwin_usb.c

    │   │   │   │   ├── darwin_usb.h

    │   │   │   │   ├── linux_netlink.c

    │   │   │   │   ├── linux_udev.c

    │   │   │   │   ├── linux_usbfs.c

    │   │   │   │   ├── linux_usbfs.h

    │   │   │   │   ├── netbsd_usb.c

    │   │   │   │   ├── openbsd_usb.c

    │   │   │   │   ├── poll_posix.c

    │   │   │   │   ├── poll_posix.h

    │   │   │   │   ├── poll_posix_original.c

    │   │   │   │   ├── poll_windows.c

    │   │   │   │   ├── poll_windows.h

    │   │   │   │   ├── threads_posix.c

    │   │   │   │   ├── threads_posix.h

    │   │   │   │   ├── threads_windows.c

    │   │   │   │   ├── threads_windows.h

    │   │   │   │   ├── wince_usb.c

    │   │   │   │   ├── wince_usb.h

    │   │   │   │   ├── windows_common.h

    │   │   │   │   ├── windows_usb.c

    │   │   │   │   └── windows_usb.h

    │   │   │   ├── strerror.c

    │   │   │   ├── sync.c

    │   │   │   ├── sync_original.c

    │   │   │   ├── version.h

    │   │   │   └── version_nano.h

    │   │   ├── libusb-1.0.pc.in

    │   │   ├── Makefile.am

    │   │   ├── msvc

    │   │   │   ├── config.h

    │   │   │   ├── ddk_build.cmd

    │   │   │   ├── errno.h

    │   │   │   ├── fxload_2010.vcxproj

    │   │   │   ├── fxload_2010.vcxproj.filters

    │   │   │   ├── fxload_2012.vcxproj

    │   │   │   ├── fxload_2012.vcxproj.filters

    │   │   │   ├── fxload_2013.vcxproj

    │   │   │   ├── fxload_sources

    │   │   │   ├── getopt_2005.vcproj

    │   │   │   ├── getopt_2010.vcxproj

    │   │   │   ├── getopt_2010.vcxproj.filters

    │   │   │   ├── getopt_2012.vcxproj

    │   │   │   ├── getopt_2012.vcxproj.filters

    │   │   │   ├── getopt_2013.vcxproj

    │   │   │   ├── getopt_sources

    │   │   │   ├── hotplugtest_2010.vcxproj

    │   │   │   ├── hotplugtest_2010.vcxproj.filters

    │   │   │   ├── hotplugtest_2012.vcxproj

    │   │   │   ├── hotplugtest_2012.vcxproj.filters

    │   │   │   ├── hotplugtest_2013.vcxproj

    │   │   │   ├── hotplugtest_sources

    │   │   │   ├── inttypes.h

    │   │   │   ├── libusb_2005.sln

    │   │   │   ├── libusb_2010.sln

    │   │   │   ├── libusb_2012.sln

    │   │   │   ├── libusb_2013.sln

    │   │   │   ├── libusb_dll_2005.vcproj

    │   │   │   ├── libusb_dll_2010.vcxproj

    │   │   │   ├── libusb_dll_2010.vcxproj.filters

    │   │   │   ├── libusb_dll_2012.vcxproj

    │   │   │   ├── libusb_dll_2012.vcxproj.filters

    │   │   │   ├── libusb_dll_2013.vcxproj

    │   │   │   ├── libusb_dll.dsp

    │   │   │   ├── libusb_dll_wince.vcproj

    │   │   │   ├── libusb.dsw

    │   │   │   ├── libusb_sources

    │   │   │   ├── libusb_static_2005.vcproj

    │   │   │   ├── libusb_static_2010.vcxproj

    │   │   │   ├── libusb_static_2010.vcxproj.filters

    │   │   │   ├── libusb_static_2012.vcxproj

    │   │   │   ├── libusb_static_2012.vcxproj.filters

    │   │   │   ├── libusb_static_2013.vcxproj

    │   │   │   ├── libusb_static.dsp

    │   │   │   ├── libusb_static_wince.vcproj

    │   │   │   ├── libusb_wince.sln

    │   │   │   ├── listdevs_2005.vcproj

    │   │   │   ├── listdevs_2010.vcxproj

    │   │   │   ├── listdevs_2010.vcxproj.filters

    │   │   │   ├── listdevs_2012.vcxproj

    │   │   │   ├── listdevs_2012.vcxproj.filters

    │   │   │   ├── listdevs_2013.vcxproj

    │   │   │   ├── listdevs.dsp

    │   │   │   ├── listdevs_sources

    │   │   │   ├── listdevs_wince.vcproj

    │   │   │   ├── missing.c

    │   │   │   ├── missing.h

    │   │   │   ├── stdint.h

    │   │   │   ├── stress_2005.vcproj

    │   │   │   ├── stress_2010.vcxproj

    │   │   │   ├── stress_2010.vcxproj.filters

    │   │   │   ├── stress_2012.vcxproj

    │   │   │   ├── stress_2012.vcxproj.filters

    │   │   │   ├── stress_2013.vcxproj

    │   │   │   ├── stress_wince.vcproj

    │   │   │   ├── xusb_2005.vcproj

    │   │   │   ├── xusb_2010.vcxproj

    │   │   │   ├── xusb_2010.vcxproj.filters

    │   │   │   ├── xusb_2012.vcxproj

    │   │   │   ├── xusb_2012.vcxproj.filters

    │   │   │   ├── xusb_2013.vcxproj

    │   │   │   ├── xusb.dsp

    │   │   │   ├── xusb_sources

    │   │   │   └── xusb_wince.vcproj

    │   │   ├── NEWS

    │   │   ├── PORTING

    │   │   ├── README

    │   │   ├── README.git

    │   │   ├── tests

    │   │   │   ├── libusb_testlib.h

    │   │   │   ├── Makefile.am

    │   │   │   ├── stress.c

    │   │   │   └── testlib.c

    │   │   ├── TODO

    │   │   └── Xcode

    │   │   ├── common.xcconfig

    │   │   ├── config.h

    │   │   ├── debug.xcconfig

    │   │   ├── libusb_debug.xcconfig

    │   │   ├── libusb_release.xcconfig

    │   │   ├── libusb.xcconfig

    │   │   ├── libusb.xcodeproj

    │   │   │   └── project.pbxproj

    │   │   └── release.xcconfig

    │   ├── libuvc

    │   │   ├── android

    │   │   │   └── jni

    │   │   │   └── Android.mk

    │   │   ├── cameras

    │   │   │   ├── isight_imac.txt

    │   │   │   ├── isight_macbook.txt

    │   │   │   ├── ms_lifecam_show.txt

    │   │   │   ├── quickcampro9000_builtin_ctrls.txt

    │   │   │   ├── quickcampro9000_extra_ctrls.txt

    │   │   │   └── quickcampro9000.txt

    │   │   ├── changelog.txt

    │   │   ├── CMakeLists.txt

    │   │   ├── doxygen.conf

    │   │   ├── include

    │   │   │   ├── libuvc

    │   │   │   │   ├── libuvc_config.h

    │   │   │   │   ├── libuvc_config.h.in

    │   │   │   │   ├── libuvc.h

    │   │   │   │   ├── libuvc_internal.h

    │   │   │   │   ├── libuvc_internal_original.h

    │   │   │   │   └── libuvc_original.h

    │   │   │   └── utlist.h

    │   │   ├── libuvcConfig.cmake.in

    │   │   ├── libuvcConfigVersion.cmake.in

    │   │   ├── README.md

    │   │   └── src

    │   │   ├── ctrl.c

    │   │   ├── ctrl_original.c

    │   │   ├── device.c

    │   │   ├── device_original.c

    │   │   ├── diag.c

    │   │   ├── diag_original.c

    │   │   ├── example.c

    │   │   ├── frame.c

    │   │   ├── frame-mjpeg.c

    │   │   ├── frame-mjpeg_original.c

    │   │   ├── frame_original.c

    │   │   ├── init.c

    │   │   ├── init_original.c

    │   │   ├── misc.c

    │   │   ├── stream.c

    │   │   ├── stream_original.c

    │   │   └── test.c

    │   ├── localdefines.h

    │   ├── rapidjson

    │   │   ├── doc

    │   │   │   ├── diagram

    │   │   │   │   ├── insituparsing.dot

    │   │   │   │   ├── insituparsing.png

    │   │   │   │   ├── iterative-parser-states-diagram.dot

    │   │   │   │   ├── iterative-parser-states-diagram.png

    │   │   │   │   ├── makefile

    │   │   │   │   ├── move1.dot

    │   │   │   │   ├── move1.png

    │   │   │   │   ├── move2.dot

    │   │   │   │   ├── move2.png

    │   │   │   │   ├── move3.dot

    │   │   │   │   ├── move3.png

    │   │   │   │   ├── normalparsing.dot

    │   │   │   │   ├── normalparsing.png

    │   │   │   │   ├── simpledom.dot

    │   │   │   │   ├── simpledom.png

    │   │   │   │   ├── tutorial.dot

    │   │   │   │   └── tutorial.png

    │   │   │   ├── dom.md

    │   │   │   ├── encoding.md

    │   │   │   ├── faq.md

    │   │   │   ├── features.md

    │   │   │   ├── internals.md

    │   │   │   ├── logo

    │   │   │   │   ├── rapidjson.png

    │   │   │   │   └── rapidjson.svg

    │   │   │   ├── misc

    │   │   │   │   ├── doxygenextra.css

    │   │   │   │   ├── DoxygenLayout.xml

    │   │   │   │   ├── footer.html

    │   │   │   │   └── header.html

    │   │   │   ├── performance.md

    │   │   │   ├── sax.md

    │   │   │   ├── stream.md

    │   │   │   └── tutorial.md

    │   │   ├── example

    │   │   │   ├── capitalize

    │   │   │   │   └── capitalize.cpp

    │   │   │   ├── condense

    │   │   │   │   └── condense.cpp

    │   │   │   ├── messagereader

    │   │   │   │   └── messagereader.cpp

    │   │   │   ├── pretty

    │   │   │   │   └── pretty.cpp

    │   │   │   ├── prettyauto

    │   │   │   │   └── prettyauto.cpp

    │   │   │   ├── serialize

    │   │   │   │   └── serialize.cpp

    │   │   │   ├── simpledom

    │   │   │   │   └── simpledom.cpp

    │   │   │   ├── simplereader

    │   │   │   │   └── simplereader.cpp

    │   │   │   ├── simplewriter

    │   │   │   │   └── simplewriter.cpp

    │   │   │   └── tutorial

    │   │   │   └── tutorial.cpp

    │   │   ├── include

    │   │   │   └── rapidjson

    │   │   │   ├── allocators.h

    │   │   │   ├── document.h

    │   │   │   ├── encodedstream.h

    │   │   │   ├── encodings.h

    │   │   │   ├── error

    │   │   │   │   ├── en.h

    │   │   │   │   └── error.h

    │   │   │   ├── filereadstream.h

    │   │   │   ├── filestream.h

    │   │   │   ├── filewritestream.h

    │   │   │   ├── internal

    │   │   │   │   ├── dtoa.h

    │   │   │   │   ├── itoa.h

    │   │   │   │   ├── meta.h

    │   │   │   │   ├── pow10.h

    │   │   │   │   ├── stack.h

    │   │   │   │   └── strfunc.h

    │   │   │   ├── memorybuffer.h

    │   │   │   ├── memorystream.h

    │   │   │   ├── msinttypes

    │   │   │   │   ├── inttypes.h

    │   │   │   │   └── stdint.h

    │   │   │   ├── prettywriter.h

    │   │   │   ├── rapidjson.h

    │   │   │   ├── reader.h

    │   │   │   ├── stringbuffer.h

    │   │   │   └── writer.h

    │   │   ├── license.txt

    │   │   ├── readme.md

    │   │   ├── test

    │   │   │   ├── perftest

    │   │   │   │   ├── jsoncpptest.cpp

    │   │   │   │   ├── misctest.cpp

    │   │   │   │   ├── perftest.cpp

    │   │   │   │   ├── perftest.h

    │   │   │   │   ├── platformtest.cpp

    │   │   │   │   ├── rapidjsontest.cpp

    │   │   │   │   ├── ultrajsontest.cpp

    │   │   │   │   ├── yajl_all.c

    │   │   │   │   └── yajltest.cpp

    │   │   │   └── unittest

    │   │   │   ├── documenttest.cpp

    │   │   │   ├── encodedstreamtest.cpp

    │   │   │   ├── encodingstest.cpp

    │   │   │   ├── filestreamtest.cpp

    │   │   │   ├── jsoncheckertest.cpp

    │   │   │   ├── readertest.cpp

    │   │   │   ├── unittest.cpp

    │   │   │   ├── unittest.h

    │   │   │   ├── valuetest.cpp

    │   │   │   └── writertest.cpp

    │   │   └── thirdparty

    │   │   ├── jsoncpp

    │   │   │   ├── AUTHORS

    │   │   │   ├── include

    │   │   │   │   └── json

    │   │   │   │   ├── autolink.h

    │   │   │   │   ├── config.h

    │   │   │   │   ├── features.h

    │   │   │   │   ├── forwards.h

    │   │   │   │   ├── json.h

    │   │   │   │   ├── reader.h

    │   │   │   │   ├── value.h

    │   │   │   │   └── writer.h

    │   │   │   ├── LICENSE

    │   │   │   ├── README.txt

    │   │   │   ├── src

    │   │   │   │   ├── jsontestrunner

    │   │   │   │   │   ├── main.cpp

    │   │   │   │   │   └── sconscript

    │   │   │   │   ├── lib_json

    │   │   │   │   │   ├── json_batchallocator.h

    │   │   │   │   │   ├── json_internalarray.inl

    │   │   │   │   │   ├── json_internalmap.inl

    │   │   │   │   │   ├── json_reader.cpp

    │   │   │   │   │   ├── json_value.cpp

    │   │   │   │   │   ├── json_valueiterator.inl

    │   │   │   │   │   ├── json_writer.cpp

    │   │   │   │   │   └── sconscript

    │   │   │   │   └── test_lib_json

    │   │   │   │   ├── jsontest.cpp

    │   │   │   │   ├── jsontest.h

    │   │   │   │   ├── main.cpp

    │   │   │   │   └── sconscript

    │   │   │   └── version

    │   │   ├── ultrajson

    │   │   │   ├── README

    │   │   │   ├── ultrajsondec.c

    │   │   │   ├── ultrajsonenc.c

    │   │   │   └── ultrajson.h

    │   │   └── yajl

    │   │   ├── ChangeLog

    │   │   ├── COPYING

    │   │   ├── include

    │   │   │   └── yajl

    │   │   │   ├── yajl_common.h

    │   │   │   ├── yajl_gen.h

    │   │   │   ├── yajl_parse.h

    │   │   │   ├── yajl_tree.h

    │   │   │   └── yajl_version.h

    │   │   ├── README

    │   │   ├── src

    │   │   │   ├── api

    │   │   │   │   ├── yajl_common.h

    │   │   │   │   ├── yajl_gen.h

    │   │   │   │   ├── yajl_parse.h

    │   │   │   │   ├── yajl_tree.h

    │   │   │   │   └── yajl_version.h.cmake

    │   │   │   ├── CMakeLists.txt

    │   │   │   ├── yajl

    │   │   │   ├── yajl_alloc.c

    │   │   │   ├── yajl_alloc.h

    │   │   │   ├── yajl_buf.c

    │   │   │   ├── yajl_buf.h

    │   │   │   ├── yajl_bytestack.h

    │   │   │   ├── yajl.c

    │   │   │   ├── YAJL.dxy

    │   │   │   ├── yajl_encode.c

    │   │   │   ├── yajl_encode.h

    │   │   │   ├── yajl_gen.c

    │   │   │   ├── yajl_lex.c

    │   │   │   ├── yajl_lex.h

    │   │   │   ├── yajl_parser.c

    │   │   │   ├── yajl_parser.h

    │   │   │   ├── yajl_tree.c

    │   │   │   └── yajl_version.c

    │   │   └── TODO

    │   ├── utilbase.h

    │   └── UVCCamera

    │   ├── Android.mk

    │   ├── libUVCCamera.h

    │   ├── objectarray.h

    │   ├── _onload.cpp

    │   ├── _onload.h

    │   ├── Parameters.cpp

    │   ├── Parameters.h

    │   ├── pipeline

    │   │   ├── AbstractBufferedPipeline.cpp

    │   │   ├── AbstractBufferedPipeline.h

    │   │   ├── CallbackPipeline.cpp

    │   │   ├── CallbackPipeline.h

    │   │   ├── CaptureBasePipeline.cpp

    │   │   ├── CaptureBasePipeline.h

    │   │   ├── ConvertPipeline.cpp

    │   │   ├── ConvertPipeline.h

    │   │   ├── DistributePipeline.cpp

    │   │   ├── DistributePipeline.h

    │   │   ├── IPipeline.cpp

    │   │   ├── IPipeline.h

    │   │   ├── pipeline_helper.cpp

    │   │   ├── pipeline_helper.h

    │   │   ├── PreviewPipeline.cpp

    │   │   ├── PreviewPipeline.h

    │   │   ├── PublisherPipeline.cpp

    │   │   ├── PublisherPipeline.h

    │   │   ├── SimpleBufferedPipeline.cpp

    │   │   ├── SimpleBufferedPipeline.h

    │   │   ├── SQLiteBufferedPipeline.cpp

    │   │   └── SQLiteBufferedPipeline.h

    │   ├── serenegiant_usb_UVCCamera.cpp

    │   ├── utilbase.cpp

    │   ├── UVCButtonCallback.cpp

    │   ├── UVCButtonCallback.h

    │   ├── UVCCamera.cpp

    │   ├── UVCCamera.h

    │   ├── UVCPreview.cpp

    │   ├── UVCPreview.h

    │   ├── UVCStatusCallback.cpp

    │   └── UVCStatusCallback.h

    ├── libs

    │   ├── android-support-v4.jar

    │   ├── armeabi

    │   │   ├── libjpeg-turbo1500.so

    │   │   ├── libusb100.so

    │   │   ├── libUVCCamera.so

    │   │   └── libuvc.so

    │   ├── armeabi-v7a

    │   │   ├── libjpeg-turbo1500.so

    │   │   ├── libusb100.so

    │   │   ├── libUVCCamera.so

    │   │   └── libuvc.so

    │   ├── core-3.0.0.jar

    │   ├── mips

    │   │   ├── libjpeg-turbo1500.so

    │   │   ├── libusb100.so

    │   │   ├── libUVCCamera.so

    │   │   └── libuvc.so

    │   └── x86

    │   ├── libjpeg-turbo1500.so

    │   ├── libusb100.so

    │   ├── libUVCCamera.so

    │   └── libuvc.so

    ├── obj

    │   └── local

    │   ├── armeabi

    │   │   ├── libjpeg-turbo1500.so

    │   │   ├── libjpeg-turbo1500_static.a

    │   │   ├── libstdc++.a

    │   │   ├── libusb100.so

    │   │   ├── libusb100_static.a

    │   │   ├── libUVCCamera.so

    │   │   ├── libuvc.so

    │   │   ├── libuvc_static.a

    │   │   └── objs

    │   │   ├── jpeg-turbo1500_static

    │   │   │   ├── jaricom.o

    │   │   │   ├── jaricom.o.d

    │   │   │   ├── jcapimin.o

    │   │   │   ├── jcapimin.o.d

    │   │   │   ├── jcapistd.o

    │   │   │   ├── jcapistd.o.d

    │   │   │   ├── jcarith.o

    │   │   │   ├── jcarith.o.d

    │   │   │   ├── jccoefct.o

    │   │   │   ├── jccoefct.o.d

    │   │   │   ├── jccolor.o

    │   │   │   ├── jccolor.o.d

    │   │   │   ├── jcdctmgr.o

    │   │   │   ├── jcdctmgr.o.d

    │   │   │   ├── jchuff.o

    │   │   │   ├── jchuff.o.d

    │   │   │   ├── jcinit.o

    │   │   │   ├── jcinit.o.d

    │   │   │   ├── jcmainct.o

    │   │   │   ├── jcmainct.o.d

    │   │   │   ├── jcmarker.o

    │   │   │   ├── jcmarker.o.d

    │   │   │   ├── jcmaster.o

    │   │   │   ├── jcmaster.o.d

    │   │   │   ├── jcomapi.o

    │   │   │   ├── jcomapi.o.d

    │   │   │   ├── jcparam.o

    │   │   │   ├── jcparam.o.d

    │   │   │   ├── jcphuff.o

    │   │   │   ├── jcphuff.o.d

    │   │   │   ├── jcprepct.o

    │   │   │   ├── jcprepct.o.d

    │   │   │   ├── jcsample.o

    │   │   │   ├── jcsample.o.d

    │   │   │   ├── jctrans.o

    │   │   │   ├── jctrans.o.d

    │   │   │   ├── jdapimin.o

    │   │   │   ├── jdapimin.o.d

    │   │   │   ├── jdapistd.o

    │   │   │   ├── jdapistd.o.d

    │   │   │   ├── jdarith.o

    │   │   │   ├── jdarith.o.d

    │   │   │   ├── jdatadst.o

    │   │   │   ├── jdatadst.o.d

    │   │   │   ├── jdatadst-tj.o

    │   │   │   ├── jdatadst-tj.o.d

    │   │   │   ├── jdatasrc.o

    │   │   │   ├── jdatasrc.o.d

    │   │   │   ├── jdatasrc-tj.o

    │   │   │   ├── jdatasrc-tj.o.d

    │   │   │   ├── jdcoefct.o

    │   │   │   ├── jdcoefct.o.d

    │   │   │   ├── jdcolor.o

    │   │   │   ├── jdcolor.o.d

    │   │   │   ├── jddctmgr.o

    │   │   │   ├── jddctmgr.o.d

    │   │   │   ├── jdhuff.o

    │   │   │   ├── jdhuff.o.d

    │   │   │   ├── jdinput.o

    │   │   │   ├── jdinput.o.d

    │   │   │   ├── jdmainct.o

    │   │   │   ├── jdmainct.o.d

    │   │   │   ├── jdmarker.o

    │   │   │   ├── jdmarker.o.d

    │   │   │   ├── jdmaster.o

    │   │   │   ├── jdmaster.o.d

    │   │   │   ├── jdmerge.o

    │   │   │   ├── jdmerge.o.d

    │   │   │   ├── jdphuff.o

    │   │   │   ├── jdphuff.o.d

    │   │   │   ├── jdpostct.o

    │   │   │   ├── jdpostct.o.d

    │   │   │   ├── jdsample.o

    │   │   │   ├── jdsample.o.d

    │   │   │   ├── jdtrans.o

    │   │   │   ├── jdtrans.o.d

    │   │   │   ├── jerror.o

    │   │   │   ├── jerror.o.d

    │   │   │   ├── jfdctflt.o

    │   │   │   ├── jfdctflt.o.d

    │   │   │   ├── jfdctfst.o

    │   │   │   ├── jfdctfst.o.d

    │   │   │   ├── jfdctint.o

    │   │   │   ├── jfdctint.o.d

    │   │   │   ├── jidctflt.o

    │   │   │   ├── jidctflt.o.d

    │   │   │   ├── jidctfst.o

    │   │   │   ├── jidctfst.o.d

    │   │   │   ├── jidctint.o

    │   │   │   ├── jidctint.o.d

    │   │   │   ├── jidctred.o

    │   │   │   ├── jidctred.o.d

    │   │   │   ├── jmemmgr.o

    │   │   │   ├── jmemmgr.o.d

    │   │   │   ├── jmemnobs.o

    │   │   │   ├── jmemnobs.o.d

    │   │   │   ├── jquant1.o

    │   │   │   ├── jquant1.o.d

    │   │   │   ├── jquant2.o

    │   │   │   ├── jquant2.o.d

    │   │   │   ├── jutils.o

    │   │   │   ├── jutils.o.d

    │   │   │   ├── simd

    │   │   │   │   ├── jsimd_arm_neon.o

    │   │   │   │   ├── jsimd_arm_neon.o.d

    │   │   │   │   ├── jsimd_arm.o

    │   │   │   │   └── jsimd_arm.o.d

    │   │   │   ├── transupp.o

    │   │   │   ├── transupp.o.d

    │   │   │   ├── turbojpeg.o

    │   │   │   └── turbojpeg.o.d

    │   │   ├── libusb100.so

    │   │   ├── libUVCCamera.so

    │   │   ├── libuvc.so

    │   │   ├── usb100_static

    │   │   │   └── libusb

    │   │   │   ├── core.o

    │   │   │   ├── core.o.d

    │   │   │   ├── descriptor.o

    │   │   │   ├── descriptor.o.d

    │   │   │   ├── hotplug.o

    │   │   │   ├── hotplug.o.d

    │   │   │   ├── io.o

    │   │   │   ├── io.o.d

    │   │   │   ├── os

    │   │   │   │   ├── android_netlink.o

    │   │   │   │   ├── android_netlink.o.d

    │   │   │   │   ├── android_usbfs.o

    │   │   │   │   ├── android_usbfs.o.d

    │   │   │   │   ├── poll_posix.o

    │   │   │   │   ├── poll_posix.o.d

    │   │   │   │   ├── threads_posix.o

    │   │   │   │   └── threads_posix.o.d

    │   │   │   ├── strerror.o

    │   │   │   ├── strerror.o.d

    │   │   │   ├── sync.o

    │   │   │   └── sync.o.d

    │   │   ├── UVCCamera

    │   │   │   ├── _onload.o

    │   │   │   ├── _onload.o.d

    │   │   │   ├── Parameters.o

    │   │   │   ├── Parameters.o.d

    │   │   │   ├── serenegiant_usb_UVCCamera.o

    │   │   │   ├── serenegiant_usb_UVCCamera.o.d

    │   │   │   ├── utilbase.o

    │   │   │   ├── utilbase.o.d

    │   │   │   ├── UVCButtonCallback.o

    │   │   │   ├── UVCButtonCallback.o.d

    │   │   │   ├── UVCCamera.o

    │   │   │   ├── UVCCamera.o.d

    │   │   │   ├── UVCPreview.o

    │   │   │   ├── UVCPreview.o.d

    │   │   │   ├── UVCStatusCallback.o

    │   │   │   └── UVCStatusCallback.o.d

    │   │   └── uvc_static

    │   │   └── src

    │   │   ├── ctrl.o

    │   │   ├── ctrl.o.d

    │   │   ├── device.o

    │   │   ├── device.o.d

    │   │   ├── diag.o

    │   │   ├── diag.o.d

    │   │   ├── frame-mjpeg.o

    │   │   ├── frame-mjpeg.o.d

    │   │   ├── frame.o

    │   │   ├── frame.o.d

    │   │   ├── init.o

    │   │   ├── init.o.d

    │   │   ├── stream.o

    │   │   └── stream.o.d

    │   ├── armeabi-v7a

    │   │   ├── libjpeg-turbo1500.so

    │   │   ├── libjpeg-turbo1500_static.a

    │   │   ├── libstdc++.a

    │   │   ├── libusb100.so

    │   │   ├── libusb100_static.a

    │   │   ├── libUVCCamera.so

    │   │   ├── libuvc.so

    │   │   ├── libuvc_static.a

    │   │   └── objs

    │   │   ├── jpeg-turbo1500_static

    │   │   │   ├── jaricom.o

    │   │   │   ├── jaricom.o.d

    │   │   │   ├── jcapimin.o

    │   │   │   ├── jcapimin.o.d

    │   │   │   ├── jcapistd.o

    │   │   │   ├── jcapistd.o.d

    │   │   │   ├── jcarith.o

    │   │   │   ├── jcarith.o.d

    │   │   │   ├── jccoefct.o

    │   │   │   ├── jccoefct.o.d

    │   │   │   ├── jccolor.o

    │   │   │   ├── jccolor.o.d

    │   │   │   ├── jcdctmgr.o

    │   │   │   ├── jcdctmgr.o.d

    │   │   │   ├── jchuff.o

    │   │   │   ├── jchuff.o.d

    │   │   │   ├── jcinit.o

    │   │   │   ├── jcinit.o.d

    │   │   │   ├── jcmainct.o

    │   │   │   ├── jcmainct.o.d

    │   │   │   ├── jcmarker.o

    │   │   │   ├── jcmarker.o.d

    │   │   │   ├── jcmaster.o

    │   │   │   ├── jcmaster.o.d

    │   │   │   ├── jcomapi.o

    │   │   │   ├── jcomapi.o.d

    │   │   │   ├── jcparam.o

    │   │   │   ├── jcparam.o.d

    │   │   │   ├── jcphuff.o

    │   │   │   ├── jcphuff.o.d

    │   │   │   ├── jcprepct.o

    │   │   │   ├── jcprepct.o.d

    │   │   │   ├── jcsample.o

    │   │   │   ├── jcsample.o.d

    │   │   │   ├── jctrans.o

    │   │   │   ├── jctrans.o.d

    │   │   │   ├── jdapimin.o

    │   │   │   ├── jdapimin.o.d

    │   │   │   ├── jdapistd.o

    │   │   │   ├── jdapistd.o.d

    │   │   │   ├── jdarith.o

    │   │   │   ├── jdarith.o.d

    │   │   │   ├── jdatadst.o

    │   │   │   ├── jdatadst.o.d

    │   │   │   ├── jdatadst-tj.o

    │   │   │   ├── jdatadst-tj.o.d

    │   │   │   ├── jdatasrc.o

    │   │   │   ├── jdatasrc.o.d

    │   │   │   ├── jdatasrc-tj.o

    │   │   │   ├── jdatasrc-tj.o.d

    │   │   │   ├── jdcoefct.o

    │   │   │   ├── jdcoefct.o.d

    │   │   │   ├── jdcolor.o

    │   │   │   ├── jdcolor.o.d

    │   │   │   ├── jddctmgr.o

    │   │   │   ├── jddctmgr.o.d

    │   │   │   ├── jdhuff.o

    │   │   │   ├── jdhuff.o.d

    │   │   │   ├── jdinput.o

    │   │   │   ├── jdinput.o.d

    │   │   │   ├── jdmainct.o

    │   │   │   ├── jdmainct.o.d

    │   │   │   ├── jdmarker.o

    │   │   │   ├── jdmarker.o.d

    │   │   │   ├── jdmaster.o

    │   │   │   ├── jdmaster.o.d

    │   │   │   ├── jdmerge.o

    │   │   │   ├── jdmerge.o.d

    │   │   │   ├── jdphuff.o

    │   │   │   ├── jdphuff.o.d

    │   │   │   ├── jdpostct.o

    │   │   │   ├── jdpostct.o.d

    │   │   │   ├── jdsample.o

    │   │   │   ├── jdsample.o.d

    │   │   │   ├── jdtrans.o

    │   │   │   ├── jdtrans.o.d

    │   │   │   ├── jerror.o

    │   │   │   ├── jerror.o.d

    │   │   │   ├── jfdctflt.o

    │   │   │   ├── jfdctflt.o.d

    │   │   │   ├── jfdctfst.o

    │   │   │   ├── jfdctfst.o.d

    │   │   │   ├── jfdctint.o

    │   │   │   ├── jfdctint.o.d

    │   │   │   ├── jidctflt.o

    │   │   │   ├── jidctflt.o.d

    │   │   │   ├── jidctfst.o

    │   │   │   ├── jidctfst.o.d

    │   │   │   ├── jidctint.o

    │   │   │   ├── jidctint.o.d

    │   │   │   ├── jidctred.o

    │   │   │   ├── jidctred.o.d

    │   │   │   ├── jmemmgr.o

    │   │   │   ├── jmemmgr.o.d

    │   │   │   ├── jmemnobs.o

    │   │   │   ├── jmemnobs.o.d

    │   │   │   ├── jquant1.o

    │   │   │   ├── jquant1.o.d

    │   │   │   ├── jquant2.o

    │   │   │   ├── jquant2.o.d

    │   │   │   ├── jutils.o

    │   │   │   ├── jutils.o.d

    │   │   │   ├── simd

    │   │   │   │   ├── jsimd_arm_neon.o

    │   │   │   │   ├── jsimd_arm_neon.o.d

    │   │   │   │   ├── jsimd_arm.o

    │   │   │   │   └── jsimd_arm.o.d

    │   │   │   ├── transupp.o

    │   │   │   ├── transupp.o.d

    │   │   │   ├── turbojpeg.o

    │   │   │   └── turbojpeg.o.d

    │   │   ├── usb100_static

    │   │   │   └── libusb

    │   │   │   ├── core.o

    │   │   │   ├── core.o.d

    │   │   │   ├── descriptor.o

    │   │   │   ├── descriptor.o.d

    │   │   │   ├── hotplug.o

    │   │   │   ├── hotplug.o.d

    │   │   │   ├── io.o

    │   │   │   ├── io.o.d

    │   │   │   ├── os

    │   │   │   │   ├── android_netlink.o

    │   │   │   │   ├── android_netlink.o.d

    │   │   │   │   ├── android_usbfs.o

    │   │   │   │   ├── android_usbfs.o.d

    │   │   │   │   ├── poll_posix.o

    │   │   │   │   ├── poll_posix.o.d

    │   │   │   │   ├── threads_posix.o

    │   │   │   │   └── threads_posix.o.d

    │   │   │   ├── strerror.o

    │   │   │   ├── strerror.o.d

    │   │   │   ├── sync.o

    │   │   │   └── sync.o.d

    │   │   ├── UVCCamera

    │   │   │   ├── _onload.o

    │   │   │   ├── _onload.o.d

    │   │   │   ├── Parameters.o

    │   │   │   ├── Parameters.o.d

    │   │   │   ├── serenegiant_usb_UVCCamera.o

    │   │   │   ├── serenegiant_usb_UVCCamera.o.d

    │   │   │   ├── utilbase.o

    │   │   │   ├── utilbase.o.d

    │   │   │   ├── UVCButtonCallback.o

    │   │   │   ├── UVCButtonCallback.o.d

    │   │   │   ├── UVCCamera.o

    │   │   │   ├── UVCCamera.o.d

    │   │   │   ├── UVCPreview.o

    │   │   │   ├── UVCPreview.o.d

    │   │   │   ├── UVCStatusCallback.o

    │   │   │   └── UVCStatusCallback.o.d

    │   │   └── uvc_static

    │   │   └── src

    │   │   ├── ctrl.o

    │   │   ├── ctrl.o.d

    │   │   ├── device.o

    │   │   ├── device.o.d

    │   │   ├── diag.o

    │   │   ├── diag.o.d

    │   │   ├── frame-mjpeg.o

    │   │   ├── frame-mjpeg.o.d

    │   │   ├── frame.o

    │   │   ├── frame.o.d

    │   │   ├── init.o

    │   │   ├── init.o.d

    │   │   ├── stream.o

    │   │   └── stream.o.d

    │   ├── mips

    │   │   ├── libjpeg-turbo1500.so

    │   │   ├── libjpeg-turbo1500_static.a

    │   │   ├── libstdc++.a

    │   │   ├── libusb100.so

    │   │   ├── libusb100_static.a

    │   │   ├── libUVCCamera.so

    │   │   ├── libuvc.so

    │   │   ├── libuvc_static.a

    │   │   └── objs

    │   │   ├── jpeg-turbo1500_static

    │   │   │   ├── jaricom.o

    │   │   │   ├── jaricom.o.d

    │   │   │   ├── jcapimin.o

    │   │   │   ├── jcapimin.o.d

    │   │   │   ├── jcapistd.o

    │   │   │   ├── jcapistd.o.d

    │   │   │   ├── jcarith.o

    │   │   │   ├── jcarith.o.d

    │   │   │   ├── jccoefct.o

    │   │   │   ├── jccoefct.o.d

    │   │   │   ├── jccolor.o

    │   │   │   ├── jccolor.o.d

    │   │   │   ├── jcdctmgr.o

    │   │   │   ├── jcdctmgr.o.d

    │   │   │   ├── jchuff.o

    │   │   │   ├── jchuff.o.d

    │   │   │   ├── jcinit.o

    │   │   │   ├── jcinit.o.d

    │   │   │   ├── jcmainct.o

    │   │   │   ├── jcmainct.o.d

    │   │   │   ├── jcmarker.o

    │   │   │   ├── jcmarker.o.d

    │   │   │   ├── jcmaster.o

    │   │   │   ├── jcmaster.o.d

    │   │   │   ├── jcomapi.o

    │   │   │   ├── jcomapi.o.d

    │   │   │   ├── jcparam.o

    │   │   │   ├── jcparam.o.d

    │   │   │   ├── jcphuff.o

    │   │   │   ├── jcphuff.o.d

    │   │   │   ├── jcprepct.o

    │   │   │   ├── jcprepct.o.d

    │   │   │   ├── jcsample.o

    │   │   │   ├── jcsample.o.d

    │   │   │   ├── jctrans.o

    │   │   │   ├── jctrans.o.d

    │   │   │   ├── jdapimin.o

    │   │   │   ├── jdapimin.o.d

    │   │   │   ├── jdapistd.o

    │   │   │   ├── jdapistd.o.d

    │   │   │   ├── jdarith.o

    │   │   │   ├── jdarith.o.d

    │   │   │   ├── jdatadst.o

    │   │   │   ├── jdatadst.o.d

    │   │   │   ├── jdatadst-tj.o

    │   │   │   ├── jdatadst-tj.o.d

    │   │   │   ├── jdatasrc.o

    │   │   │   ├── jdatasrc.o.d

    │   │   │   ├── jdatasrc-tj.o

    │   │   │   ├── jdatasrc-tj.o.d

    │   │   │   ├── jdcoefct.o

    │   │   │   ├── jdcoefct.o.d

    │   │   │   ├── jdcolor.o

    │   │   │   ├── jdcolor.o.d

    │   │   │   ├── jddctmgr.o

    │   │   │   ├── jddctmgr.o.d

    │   │   │   ├── jdhuff.o

    │   │   │   ├── jdhuff.o.d

    │   │   │   ├── jdinput.o

    │   │   │   ├── jdinput.o.d

    │   │   │   ├── jdmainct.o

    │   │   │   ├── jdmainct.o.d

    │   │   │   ├── jdmarker.o

    │   │   │   ├── jdmarker.o.d

    │   │   │   ├── jdmaster.o

    │   │   │   ├── jdmaster.o.d

    │   │   │   ├── jdmerge.o

    │   │   │   ├── jdmerge.o.d

    │   │   │   ├── jdphuff.o

    │   │   │   ├── jdphuff.o.d

    │   │   │   ├── jdpostct.o

    │   │   │   ├── jdpostct.o.d

    │   │   │   ├── jdsample.o

    │   │   │   ├── jdsample.o.d

    │   │   │   ├── jdtrans.o

    │   │   │   ├── jdtrans.o.d

    │   │   │   ├── jerror.o

    │   │   │   ├── jerror.o.d

    │   │   │   ├── jfdctflt.o

    │   │   │   ├── jfdctflt.o.d

    │   │   │   ├── jfdctfst.o

    │   │   │   ├── jfdctfst.o.d

    │   │   │   ├── jfdctint.o

    │   │   │   ├── jfdctint.o.d

    │   │   │   ├── jidctflt.o

    │   │   │   ├── jidctflt.o.d

    │   │   │   ├── jidctfst.o

    │   │   │   ├── jidctfst.o.d

    │   │   │   ├── jidctint.o

    │   │   │   ├── jidctint.o.d

    │   │   │   ├── jidctred.o

    │   │   │   ├── jidctred.o.d

    │   │   │   ├── jmemmgr.o

    │   │   │   ├── jmemmgr.o.d

    │   │   │   ├── jmemnobs.o

    │   │   │   ├── jmemnobs.o.d

    │   │   │   ├── jquant1.o

    │   │   │   ├── jquant1.o.d

    │   │   │   ├── jquant2.o

    │   │   │   ├── jquant2.o.d

    │   │   │   ├── jsimd_none.o

    │   │   │   ├── jsimd_none.o.d

    │   │   │   ├── jutils.o

    │   │   │   ├── jutils.o.d

    │   │   │   ├── transupp.o

    │   │   │   ├── transupp.o.d

    │   │   │   ├── turbojpeg.o

    │   │   │   └── turbojpeg.o.d

    │   │   ├── usb100_static

    │   │   │   └── libusb

    │   │   │   ├── core.o

    │   │   │   ├── core.o.d

    │   │   │   ├── descriptor.o

    │   │   │   ├── descriptor.o.d

    │   │   │   ├── hotplug.o

    │   │   │   ├── hotplug.o.d

    │   │   │   ├── io.o

    │   │   │   ├── io.o.d

    │   │   │   ├── os

    │   │   │   │   ├── android_netlink.o

    │   │   │   │   ├── android_netlink.o.d

    │   │   │   │   ├── android_usbfs.o

    │   │   │   │   ├── android_usbfs.o.d

    │   │   │   │   ├── poll_posix.o

    │   │   │   │   ├── poll_posix.o.d

    │   │   │   │   ├── threads_posix.o

    │   │   │   │   └── threads_posix.o.d

    │   │   │   ├── strerror.o

    │   │   │   ├── strerror.o.d

    │   │   │   ├── sync.o

    │   │   │   └── sync.o.d

    │   │   ├── UVCCamera

    │   │   │   ├── _onload.o

    │   │   │   ├── _onload.o.d

    │   │   │   ├── Parameters.o

    │   │   │   ├── Parameters.o.d

    │   │   │   ├── serenegiant_usb_UVCCamera.o

    │   │   │   ├── serenegiant_usb_UVCCamera.o.d

    │   │   │   ├── utilbase.o

    │   │   │   ├── utilbase.o.d

    │   │   │   ├── UVCButtonCallback.o

    │   │   │   ├── UVCButtonCallback.o.d

    │   │   │   ├── UVCCamera.o

    │   │   │   ├── UVCCamera.o.d

    │   │   │   ├── UVCPreview.o

    │   │   │   ├── UVCPreview.o.d

    │   │   │   ├── UVCStatusCallback.o

    │   │   │   └── UVCStatusCallback.o.d

    │   │   └── uvc_static

    │   │   └── src

    │   │   ├── ctrl.o

    │   │   ├── ctrl.o.d

    │   │   ├── device.o

    │   │   ├── device.o.d

    │   │   ├── diag.o

    │   │   ├── diag.o.d

    │   │   ├── frame-mjpeg.o

    │   │   ├── frame-mjpeg.o.d

    │   │   ├── frame.o

    │   │   ├── frame.o.d

    │   │   ├── init.o

    │   │   ├── init.o.d

    │   │   ├── stream.o

    │   │   └── stream.o.d

    │   └── x86

    │   ├── libjpeg-turbo1500.so

    │   ├── libjpeg-turbo1500_static.a

    │   ├── libstdc++.a

    │   ├── libusb100.so

    │   ├── libusb100_static.a

    │   ├── libUVCCamera.so

    │   ├── libuvc.so

    │   ├── libuvc_static.a

    │   └── objs

    │   ├── jpeg-turbo1500_static

    │   │   ├── jaricom.o

    │   │   ├── jaricom.o.d

    │   │   ├── jcapimin.o

    │   │   ├── jcapimin.o.d

    │   │   ├── jcapistd.o

    │   │   ├── jcapistd.o.d

    │   │   ├── jcarith.o

    │   │   ├── jcarith.o.d

    │   │   ├── jccoefct.o

    │   │   ├── jccoefct.o.d

    │   │   ├── jccolor.o

    │   │   ├── jccolor.o.d

    │   │   ├── jcdctmgr.o

    │   │   ├── jcdctmgr.o.d

    │   │   ├── jchuff.o

    │   │   ├── jchuff.o.d

    │   │   ├── jcinit.o

    │   │   ├── jcinit.o.d

    │   │   ├── jcmainct.o

    │   │   ├── jcmainct.o.d

    │   │   ├── jcmarker.o

    │   │   ├── jcmarker.o.d

    │   │   ├── jcmaster.o

    │   │   ├── jcmaster.o.d

    │   │   ├── jcomapi.o

    │   │   ├── jcomapi.o.d

    │   │   ├── jcparam.o

    │   │   ├── jcparam.o.d

    │   │   ├── jcphuff.o

    │   │   ├── jcphuff.o.d

    │   │   ├── jcprepct.o

    │   │   ├── jcprepct.o.d

    │   │   ├── jcsample.o

    │   │   ├── jcsample.o.d

    │   │   ├── jctrans.o

    │   │   ├── jctrans.o.d

    │   │   ├── jdapimin.o

    │   │   ├── jdapimin.o.d

    │   │   ├── jdapistd.o

    │   │   ├── jdapistd.o.d

    │   │   ├── jdarith.o

    │   │   ├── jdarith.o.d

    │   │   ├── jdatadst.o

    │   │   ├── jdatadst.o.d

    │   │   ├── jdatadst-tj.o

    │   │   ├── jdatadst-tj.o.d

    │   │   ├── jdatasrc.o

    │   │   ├── jdatasrc.o.d

    │   │   ├── jdatasrc-tj.o

    │   │   ├── jdatasrc-tj.o.d

    │   │   ├── jdcoefct.o

    │   │   ├── jdcoefct.o.d

    │   │   ├── jdcolor.o

    │   │   ├── jdcolor.o.d

    │   │   ├── jddctmgr.o

    │   │   ├── jddctmgr.o.d

    │   │   ├── jdhuff.o

    │   │   ├── jdhuff.o.d

    │   │   ├── jdinput.o

    │   │   ├── jdinput.o.d

    │   │   ├── jdmainct.o

    │   │   ├── jdmainct.o.d

    │   │   ├── jdmarker.o

    │   │   ├── jdmarker.o.d

    │   │   ├── jdmaster.o

    │   │   ├── jdmaster.o.d

    │   │   ├── jdmerge.o

    │   │   ├── jdmerge.o.d

    │   │   ├── jdphuff.o

    │   │   ├── jdphuff.o.d

    │   │   ├── jdpostct.o

    │   │   ├── jdpostct.o.d

    │   │   ├── jdsample.o

    │   │   ├── jdsample.o.d

    │   │   ├── jdtrans.o

    │   │   ├── jdtrans.o.d

    │   │   ├── jerror.o

    │   │   ├── jerror.o.d

    │   │   ├── jfdctflt.o

    │   │   ├── jfdctflt.o.d

    │   │   ├── jfdctfst.o

    │   │   ├── jfdctfst.o.d

    │   │   ├── jfdctint.o

    │   │   ├── jfdctint.o.d

    │   │   ├── jidctflt.o

    │   │   ├── jidctflt.o.d

    │   │   ├── jidctfst.o

    │   │   ├── jidctfst.o.d

    │   │   ├── jidctint.o

    │   │   ├── jidctint.o.d

    │   │   ├── jidctred.o

    │   │   ├── jidctred.o.d

    │   │   ├── jmemmgr.o

    │   │   ├── jmemmgr.o.d

    │   │   ├── jmemnobs.o

    │   │   ├── jmemnobs.o.d

    │   │   ├── jquant1.o

    │   │   ├── jquant1.o.d

    │   │   ├── jquant2.o

    │   │   ├── jquant2.o.d

    │   │   ├── jutils.o

    │   │   ├── jutils.o.d

    │   │   ├── simd

    │   │   │   ├── jccolor-mmx.o

    │   │   │   ├── jccolor-sse2.o

    │   │   │   ├── jcgray-mmx.o

    │   │   │   ├── jcgray-sse2.o

    │   │   │   ├── jchuff-sse2.o

    │   │   │   ├── jcsample-mmx.o

    │   │   │   ├── jcsample-sse2.o

    │   │   │   ├── jdcolor-mmx.o

    │   │   │   ├── jdcolor-sse2.o

    │   │   │   ├── jdmerge-mmx.o

    │   │   │   ├── jdmerge-sse2.o

    │   │   │   ├── jdsample-mmx.o

    │   │   │   ├── jdsample-sse2.o

    │   │   │   ├── jfdctflt-3dn.o

    │   │   │   ├── jfdctflt-sse.o

    │   │   │   ├── jfdctfst-mmx.o

    │   │   │   ├── jfdctfst-sse2.o

    │   │   │   ├── jfdctint-mmx.o

    │   │   │   ├── jfdctint-sse2.o

    │   │   │   ├── jidctflt-3dn.o

    │   │   │   ├── jidctflt-sse2.o

    │   │   │   ├── jidctflt-sse.o

    │   │   │   ├── jidctfst-mmx.o

    │   │   │   ├── jidctfst-sse2.o

    │   │   │   ├── jidctint-mmx.o

    │   │   │   ├── jidctint-sse2.o

    │   │   │   ├── jidctred-mmx.o

    │   │   │   ├── jidctred-sse2.o

    │   │   │   ├── jquant-3dn.o

    │   │   │   ├── jquantf-sse2.o

    │   │   │   ├── jquanti-sse2.o

    │   │   │   ├── jquant-mmx.o

    │   │   │   ├── jquant-sse.o

    │   │   │   ├── jsimdcpu.o

    │   │   │   ├── jsimd_i386.o

    │   │   │   └── jsimd_i386.o.d

    │   │   ├── transupp.o

    │   │   ├── transupp.o.d

    │   │   ├── turbojpeg.o

    │   │   └── turbojpeg.o.d

    │   ├── usb100_static

    │   │   └── libusb

    │   │   ├── core.o

    │   │   ├── core.o.d

    │   │   ├── descriptor.o

    │   │   ├── descriptor.o.d

    │   │   ├── hotplug.o

    │   │   ├── hotplug.o.d

    │   │   ├── io.o

    │   │   ├── io.o.d

    │   │   ├── os

    │   │   │   ├── android_netlink.o

    │   │   │   ├── android_netlink.o.d

    │   │   │   ├── android_usbfs.o

    │   │   │   ├── android_usbfs.o.d

    │   │   │   ├── poll_posix.o

    │   │   │   ├── poll_posix.o.d

    │   │   │   ├── threads_posix.o

    │   │   │   └── threads_posix.o.d

    │   │   ├── strerror.o

    │   │   ├── strerror.o.d

    │   │   ├── sync.o

    │   │   └── sync.o.d

    │   ├── UVCCamera

    │   │   ├── _onload.o

    │   │   ├── _onload.o.d

    │   │   ├── Parameters.o

    │   │   ├── Parameters.o.d

    │   │   ├── serenegiant_usb_UVCCamera.o

    │   │   ├── serenegiant_usb_UVCCamera.o.d

    │   │   ├── utilbase.o

    │   │   ├── utilbase.o.d

    │   │   ├── UVCButtonCallback.o

    │   │   ├── UVCButtonCallback.o.d

    │   │   ├── UVCCamera.o

    │   │   ├── UVCCamera.o.d

    │   │   ├── UVCPreview.o

    │   │   ├── UVCPreview.o.d

    │   │   ├── UVCStatusCallback.o

    │   │   └── UVCStatusCallback.o.d

    │   └── uvc_static

    │   └── src

    │   ├── ctrl.o

    │   ├── ctrl.o.d

    │   ├── device.o

    │   ├── device.o.d

    │   ├── diag.o

    │   ├── diag.o.d

    │   ├── frame-mjpeg.o

    │   ├── frame-mjpeg.o.d

    │   ├── frame.o

    │   ├── frame.o.d

    │   ├── init.o

    │   ├── init.o.d

    │   ├── stream.o

    │   └── stream.o.d

    ├── proguard-project.txt

    ├── project.properties

    ├── res

    │   ├── drawable-hdpi

    │   │   └── ic_launcher.png

    │   ├── drawable-mdpi

    │   │   └── ic_launcher.png

    │   ├── drawable-xhdpi

    │   │   └── ic_launcher.png

    │   ├── drawable-xxhdpi

    │   │   └── ic_launcher.png

    │   ├── layout

    │   │   ├── acti_main.xml

    │   │   ├── activity_main.xml

    │   │   ├── dialog_camera.xml

    │   │   └── listitem_device.xml

    │   ├── menu

    │   │   └── main.xml

    │   ├── values

    │   │   ├── dimens.xml

    │   │   ├── strings.xml

    │   │   └── styles.xml

    │   ├── values-sw600dp

    │   │   └── dimens.xml

    │   ├── values-sw720dp-land

    │   │   └── dimens.xml

    │   ├── values-v11

    │   │   └── styles.xml

    │   ├── values-v14

    │   │   └── styles.xml

    │   └── xml

    │   └── device_filter.xml

    └── src

    └── com

    └── serenegiant

    ├── act

    │   └── MainActivity.java

    ├── uitl

    │   ├── BuildCheck.java

    │   └── HandlerThreadHandler.java

    └── usb

    ├── CameraDialog.java

    ├── DeviceFilter.java

    ├── IButtonCallback.java

    ├── IFrameCallback.java

    ├── IStatusCallback.java

    ├── Size.java

    ├── USBMonitor.java

    ├── USBVendorId.java

    └── UVCCamera.java

    165 directories, 1667 files

    展开全文
  • Linux添加uvc摄像头上的按键拍照

    千次阅读 2019-06-29 18:17:41
    有的uvc镜头上带有按键按钮来实现拍照功能,本篇将讲述如何在Linux系统中获取uvc镜头的按键消息,实现拍照。 一、配置menuconfig 1、打开menuconfig, 在 -> Device Drivers -> Input device support -> ...

    有的uvc镜头上带有按键按钮来实现拍照功能,本篇将讲述如何在Linux系统中获取uvc镜头的按键消息,实现拍照。

    一、配置menuconfig

    1、打开menuconfig, 在 -> Device Drivers -> Input device support ->
    选中 < * > Generic input layer (needed for keyboard, mouse, …) 输入子系统核心层和 < * > Event interface 事件上报处理层
    想支持poll轮询选中<> Polled input device skeleton ,其余的不需要的可以不勾选减少体积,如图 。
    在这里插入图片描述
    2、在 -> Device Drivers -> Multimedia support -> Media USB Adapters 除选中 <
    > USB Video Class (UVC) 外还需选中[*] UVC input events device support ,以支持uvc输入设备的支持,如图。在这里插入图片描述

    二、创建设备节点

    配置好内核选项后编译烧录,如果没有mdev系统创建节点就得自己手动了。
    1、找到当前设备对用的event事件编号。cat /proc/bus/input/devices文件可以看到当前的输入设备信息,如下:
    #cat /proc/bus/input/devices
    I: Bus=0003 Vendor=eb1a Product=299f Version=0001
    N: Name=“supereyes”
    P: Phys=usb-ehci-platform-1/button
    S: Sysfs=/devices/platform/ehci-platform/usb1/1-1/1-1:1.0/input/input2
    U: Uniq=
    H: Handlers=event0
    B: PROP=0
    B: EV=3
    B: KEY=100000 0 0 0 0 0 0
    这是一个MJPEG格式的uvc镜头,在H字段后面可以看到该设备对应的是event0。
    2、找到设备号
    查看目录下/sys/class/input/event0/的dev文件找到主设备号和次设备号。
    #cat /sys/class/input/event0/dev
    13:64
    可以发现系统分给该设备的主设备号为13,次设备号为64。
    3、创建设备节点
    使用命令
    mknod /dev/event0 c 13 64
    创建节点。

    三、应用层读取消息

    创建好设备消息后就可以在应用层读取消息了,单独创建一个线程读取消息,代码如下。

    #include <linux/input.h>
    void *camera_key_thread( void *arg )
    {
    	struct input_event camera_key={0};
    	int ret;
    	int event0_fd ;
    	while(1){
    		event0_fd = open("/dev/event0",O_RDWR);
    		if(event0_fd < 0){
    				dprintf ("open /dev/event0 err: %d \n",event0_fd);
    		}
    		else {
    			dprintf("open /dev/event0 success \n");
    			while(1){
    				memset(&camera_key, 0, sizeof(struct input_event));
    				ret = read( event0_fd ,&camera_key,sizeof(camera_key));
    				if( ret == sizeof(camera_key)){
    					if(camera_key.type == EV_KEY && camera_key.code ==  KEY_CAMERA && camera_key.value  == 1 ){
    						//dprintf("type %d, code %d, value %d \n",camera_key.type ,camera_key.code, camera_key.value );
    		               /*   按键拍照处理*/
    					}
    				}else {
    					 dprintf("read err : ret %d \n", ret);
    					 close(event0_fd);	
    					 break;
    				}
    			}
    		}
    		usleep(1000*500);
    	}
    	return NULL;
    }
    

    为了支持热插拔使用了两层循环, 获得按键消息后就可抓取一帧图像数据保存即可实现拍照了。

    四、遇到的问题

    1、按键按的第一下read函数有反应,之后的按键read函数卡死,没有发回。(有的镜头可能没有这个bug)
    2、查找问题
    打开源码drivers\media\usb\uvc\uvc_driver.c 文件,从probe函数开始依次调用顺序依次为
    uvc_probe() ( 该函数在插入uvc设备时调,初始化各类信息 ) -> uvc_status_init() (初始化中断urb传输,uvc设备的按键,控制等消息)-> usb_fill_int_urb() (填充一个中断urb传输,该函数uvc_status_complete为urb传输完成时回调)。
    在 uvc_status_complete()(中断传输urb完成回调) -> uvc_event_streaming() (处理中断端点传输的消息) ->uvc_input_report_key()(上报按键消息)函数如下:

    static void uvc_input_report_key(struct uvc_device *dev, unsigned int code,int value)
    {
    	if (dev->input) {
    		input_report_key(dev->input, code, value);
    		input_sync(dev->input);
    	}
    }
    

    该函数为标准的输入按键事件上报,到此流程都没有问题,但是为什么按键第二次没有反应呢?我添加打印发现 uvc_input_report_key() 这个函数每按一次按键就会打印一次,上报一次按键消息。在这个函数的上一个函数uvc_event_streaming()打开打印消息。

    uvc_trace(UVC_TRACE_STATUS, "Button (intf %u) %s len %d\n",
    			data[1], data[3] ? "pressed" : "released", len);
    

    每按一次按键我们发现,只有Button (intf 1) pressed len 4的消息,也就是按键value值为1的 pressed消息。没有value为0的release消息,有人说输入子系统的按键消息一定要加按键抬起消息,也就是上报value为0的按键值,想想可能是这个原因。但是为什么呢?我们一探究竟。

    五 、 分析事件上报代码

    1、入口
    	input_report_key(dev->input, code, value);
    	input_sync(dev->input);
    

    函数开始,这两个函数都是调用的input_event()函数 (drivers\input\input.c),注意参数不同。唤醒read函数的流程如下:
    (input_report_key() / input_sync()) -> input_event() -> input_handle_event() -> input_pass_values() -> input_to_handler() -> handler->event() -> evdev_events -> evdev_pass_values 唤醒read函数。
    handler->event() 函数在 input_register_handler()注册。

    static int __init evdev_init(void)// 该函数为输入事件层起始函数。
    {
       return input_register_handler(&evdev_handler);
    }
    

    结构体如下:

    static struct input_handler evdev_handler = {
    	.event		 = evdev_event,
    	.events		= evdev_events,
    ......
    };
    
    2、关键函数

    我们在上诉流程的input_handle_event()函数中可以找到答案。
    可以发现能不能唤醒read函数的步骤就是调不调用input_pass_values()函数,代码如下。

    static void input_handle_event(struct input_dev *dev,
    			       unsigned int type, unsigned int code, int value)
    {
    	int disposition;
    	disposition = input_get_disposition(dev, type, code, value);
    //	printk("disposition %x \n" , disposition);
    	if ((disposition & INPUT_PASS_TO_DEVICE) && dev->event)
    		dev->event(dev, type, code, value);
    	if (!dev->vals)
    		return;
    	if (disposition & INPUT_PASS_TO_HANDLERS) {
    		struct input_value *v;
    
    		if (disposition & INPUT_SLOT) {
    			v = &dev->vals[dev->num_vals++];
    			v->type = EV_ABS;
    			v->code = ABS_MT_SLOT;
    			v->value = dev->mt->slot;
    		}
    		v = &dev->vals[dev->num_vals++];
    		v->type = type;
    		v->code = code;
    		v->value = value;
    	}
    //	printk("num_vals %d \n" , dev->num_vals);
    	if (disposition & INPUT_FLUSH) {
    		if (dev->num_vals >= 2)// 2
    			input_pass_values(dev, dev->vals, dev->num_vals);
    		dev->num_vals = 0;
    	} else if (dev->num_vals >= dev->max_vals - 2) {
    		dev->vals[dev->num_vals++] = input_value_sync;
    		input_pass_values(dev, dev->vals, dev->num_vals);
    		dev->num_vals = 0;
    	}
    }
    

    我们先看在哪里调用input_pass_values函数, 总共两个地方。
    第一个if条件为disposition & INPUT_FLUSH 条件为真,并且dev->num_vals 的值大于2,注意在判断之后dev->num_vals = 0;给清零了,dev->num_vals这个值是在哪里增加的呢?就在代码上面
    v = &dev->vals[dev->num_vals++];增加的。
    第二个条件为(dev->num_vals >= dev->max_vals - 2) ,改判断可以发现固定上班按键类型为宏input_value_sync,只是个同步按键值,并不是实际按键值,我猜是为了同一时间按键值泛滥的情况,将按键次数清零。
    所以按键值是在第一个if中上报过去的。

    3、对于disposition值 。

    disposition 这个变量是重点,dev->num_vals 的自增也需要这个变量disposition & INPUT_PASS_TO_HANDLERS成立。我们看看这个变量是如何赋值的。
    disposition = input_get_disposition(dev, type, code, value);
    函数源码如下:

    static int input_get_disposition(struct input_dev *dev,
    			  unsigned int type, unsigned int code, int value)
    {
    	int disposition = INPUT_IGNORE_EVENT;
    	switch (type) {
    	case EV_SYN:
    		switch (code) {
    		case SYN_CONFIG:
    			disposition = INPUT_PASS_TO_ALL;
    			break;
    		case SYN_REPORT:
    			disposition = INPUT_PASS_TO_HANDLERS | INPUT_FLUSH;
    			break;
    		case SYN_MT_REPORT:
    			disposition = INPUT_PASS_TO_HANDLERS;
    			break;
    		}
    		break;
    	case EV_KEY:
    		if (is_event_supported(code, dev->keybit, KEY_MAX)) {
    			/* auto-repeat bypasses state updates */
    			if (value == 2 ) {
    				disposition = INPUT_PASS_TO_HANDLERS;
    				break;
    			}
    			if (!!test_bit(code, dev->key) != !!value) {
    				__change_bit(code, dev->key);
    				disposition = INPUT_PASS_TO_HANDLERS;
    			}
    		}
    		break;
    ...........................
    return disposition;
    }
    

    在上报按键消息的时候我们总共调用了两个函数分别为:
    input_report_key -> 内敛为 input_event(dev, EV_KEY, code, !!value);
    input_sync -> 内敛为 input_event(dev, EV_SYN, SYN_REPORT, 0);
    该内敛函数的变量type,code 传递到了函数 input_get_disposition()中,当type为EV_KEY时,也就是我们填写上报的按键值的函数调用中,我们可以发现:
    第一个判断 (is_event_supported(code, dev->keybit, KEY_MAX) ,的目的是为了检查我们的参数code在系统的定义范围之内,我们的按键code值为宏 KEY_CAMERA 值为212 ,所以这个判断基本为一。
    我们先看!!test_bit(code, dev->key) != !!value这个条件。
    !!test_bit(code, dev->key) dev->key 的第code位是否为1, !!value 位我们上报的value,两次非运算是为了将值变成二值量。只有不等于值disposition = INPUT_PASS_TO_HANDLERS 才会赋值,后续的 dev->num_vals++ 才会执行到。read函数除了第一次按按键有返回,后面都没有返回也是因为这个条件不成立。为什么!!test_bit(code, dev->key) != !!value这个条件第二次进不来了呢?
    我们看看里面干了什么,里面就两句话。
    __change_bit(code, dev->key);
    disposition = INPUT_PASS_TO_HANDLERS;
    第二句作用我们知道,第一句__change_bit的作用是将dev->key的code位取反,这就可以解释为什么第一次可以进来而第二次、第三、四次进不来的原因。因为我们的value固定为1,要想不等于成立,只有改变value的值,这就是为什么我们一定要上报value为0的抬起消息。
    value == 2 直接可以得到我们想要的 disposition = INPUT_PASS_TO_HANDLERS;

    当我们调用input_sync()函数时type为EV_SYN,code为SYN_REPORT,所以disposition 为,
    disposition = INPUT_PASS_TO_HANDLERS | INPUT_FLUSH;

    4、回看

    我在urb中断回调里上报按键值总共回调了两个上报函数。
    调用 input_report_key ()函数,如果我们的value一直是0的话disposition除了第一次返回INPUT_PASS_TO_HANDLERS之后都是返回0,在input_handle_event函数按键赋值和dev->num_vals++也不会运行到,就唤不醒read函数,所以应用层就会一直在等待。假设正常流程都带按键抬起0上报,则每次都会返回disposition = INPUT_PASS_TO_HANDLERS,按键赋值和dev->num_vals++都会运行,这时候dev->num_vals的值会变成1;
    调用 input_sync()函数,该函数调用后值disposition 为
    disposition = INPUT_PASS_TO_HANDLERS | INPUT_FLUSH;这样
    disposition & INPUT_PASS_TO_HANDLERS会再次成立,指针dev->vals保留按键值,dev->num_vals会再次加一,出来后dev->num_vals会等于2。又因为disposition & INPUT_FLUSH也成立所以read函数被唤醒,dev->vals指针有两个按键值所以read函数会返回两次,一次为按键值一次为0的同步事件上报。

    六、解决方法

    大家以为我们只要这样,将我们上报的value值固定为2就可以了。
    input_report_key(dev->input, code, 2);
    跳进去看一下。
    input_event(dev, EV_KEY, code, !!value);
    哈哈,不管你写什么只要不是0,你的value都会是1,想要用这种方式改代码吧,不过不建议。
    用这种方式

    static void uvc_input_report_key(struct uvc_device *dev, unsigned int code,
    	int value)
    {
    	if (dev->input) {
    		input_report_key(dev->input, code, value);
    		input_sync(dev->input);
    		input_report_key(dev->input, code, 0);
    		input_sync(dev->input);
    	}
    }
    

    强制上报抬起事件,可以不用看过程直接修改drivers\media\usb\uvc\uvc_status.c 的大约第70行修改上述代码即可。

    展开全文
  • 目录: 一 USB摄像头驱动整体框架 ...2.2 分析UVC驱动调用过程 一 USB摄像头驱动整体框架 1.构造一个usb_driver 2.设置 probe: 2.1. 分配video_device:video_device_alloc 2.2. 设置 .fops ...

    目录:

    一 USB摄像头驱动整体框架
    二 UVC驱动简析
    • 2.1 USB摄像头硬件结构简析
    • 2.2 分析UVC驱动调用过程

    一 USB摄像头驱动整体框架

    1.构造一个usb_driver
    
    2.设置
       probe:
            2.1. 分配video_device:video_device_alloc
            2.2. 设置
               .fops
               .ioctl_ops (里面需要设置11项)
               如果要用内核提供的缓冲区操作函数,还需要构造一个videobuf_queue_ops
            2.3. 注册: video_register_device      
      id_table: 表示支持哪些USB设备      
      
    3.注册: usb_register
    

    二 UVC驱动简析

    UVC: USB Video Class
    UVC驱动:drivers\media\video\uvc\

    2.1 USB摄像头硬件结构简析

    在这里插入图片描述
    UVC 1.5 Class specification.pdf :

    Video functions are addressed through their video interfaces. Each video function has a single VideoControl (VC) interface and can have several VideoStreaming (VS) interfaces. TheVideoControl (VC) interface is used to access the device controls of the function whereas the VideoStreaming (VS) interfaces are used to transport data streams into and out of the function

    VC内部抽象出两个基本的模块 Units 和 Terminals,Terminals用于“内外连接”,Units 是VC 内部功能模块,IT用于输入,OT用于输出,SU用于多路选择,PU控制属性。

    The Input Terminal (IT) is used as an interface between the video function’s “outside world” and other Units inside the video function.

    The Output Terminal (OT) is used as an interface between Units inside the video function and the “outside world”.

    The Camera Terminal (CT) controls mechanical (or equivalent digital) features of the device component that transmits the video stream.

    The Selector Unit (SU) selects from n input data streams and routes them unaltered to the single output stream. It represents a source selector, capable of selecting among a number of sources. It has an Input Pin for each source stream and a single Output Pin
    在这里插入图片描述

    The Processing Unit (PU) controls image attributes of the video being streamed through it. It has a single input and output pin. It provides support for the following features:

    在这里插入图片描述

    User Controls
     Brightness
     Hue
     Saturation
     Sharpness
     Gamma
     Digital Multiplier (Zoom)
    

    VC 
    	Units
    		SU : Select Units
    		PU : Process Units
    		
    	Terminals
    		IT : Input Terminals
    		CT : Camera Terminals
    		OT : Output Terminals
    		
    VS
    

    小结:
    1 通过VideoControl Interface来控制,
    2 通过VideoStreaming Interface来读视频数据,
    3 VC里含有多个Unit/Terminal等功能模块,可以通过访问这些模块进行控制,比如调亮度

    2.2 分析UVC驱动调用过程:

    const struct v4l2_file_operations uvc_fops = {
    .owner = THIS_MODULE,
    .open = uvc_v4l2_open,
    .release = uvc_v4l2_release,
    .ioctl = uvc_v4l2_ioctl,
    .read = uvc_v4l2_read,
    .mmap = uvc_v4l2_mmap,
    .poll = uvc_v4l2_poll,
    };

    1. open:

       uvc_v4l2_open
      
    2. VIDIOC_QUERYCAP // video->streaming->type 应该是在设备被枚举时分析描述符时设置的

       if (video->streaming->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
       	cap->capabilities = V4L2_CAP_VIDEO_CAPTURE
       			  | V4L2_CAP_STREAMING;
       else
       	cap->capabilities = V4L2_CAP_VIDEO_OUTPUT
       			  | V4L2_CAP_STREAMING;
      
    3. VIDIOC_ENUM_FMT // format数组应是在设备被枚举时设置的

       format = &video->streaming->format[fmt->index];
      
    4. VIDIOC_G_FMT

       uvc_v4l2_get_format  // USB摄像头支持多种格式fromat, 每种格式下有多种frame(比如分辨率)
           	struct uvc_format *format = video->streaming->cur_format;
           	struct uvc_frame *frame = video->streaming->cur_frame;
      
    5. VIDIOC_TRY_FMT

      uvc_v4l2_try_format
          /* Check if the hardware supports the requested format. */
      
      	/* Find the closest image size. The distance between image sizes is
      	 * the size in pixels of the non-overlapping regions between the
      	 * requested size and the frame-specified size.
      	 */
      
    6. VIDIOC_S_FMT // 只是把参数保存起来,还没有发给USB摄像头

         uvc_v4l2_set_format
             uvc_v4l2_try_format
         			video->streaming->cur_format = format;
         			video->streaming->cur_frame = frame;
      
    7. VIDIOC_REQBUFS

       uvc_alloc_buffers
          	for (; nbuffers > 0; --nbuffers) {
       		mem = vmalloc_32(nbuffers * bufsize);
       		if (mem != NULL)
       			break;
      
    8. VIDIOC_QUERYBUF

       uvc_query_buffer
           __uvc_query_buffer
               memcpy(v4l2_buf, &buf->buf, sizeof *v4l2_buf);  // 复制参数
      
    9. mmap

       uvc_v4l2_mmap
      
    10. VIDIOC_QBUF

      uvc_queue_buffer
      	list_add_tail(&buf->stream, &queue->mainqueue);
      	list_add_tail(&buf->queue, &queue->irqqueue);
      
    11. VIDIOC_STREAMON

      uvc_video_enable(video, 1)  // 把所设置的参数发给硬件,然后启动摄像头
          /* Commit the streaming parameters. */
          uvc_commit_video
              uvc_set_video_ctrl  /* 设置格式fromat, frame */
                  	ret = __uvc_query_ctrl(video->dev /* 哪一个USB设备 */, SET_CUR, 0,
                  		video->streaming->intfnum  /* 哪一个接口: VS */,
                  		probe ? VS_PROBE_CONTROL : VS_COMMIT_CONTROL, data, size,
                  		uvc_timeout_param);
                  
          /* 启动:Initialize isochronous/bulk URBs and allocate transfer buffers. */
          uvc_init_video(video, GFP_KERNEL);
                  uvc_init_video_isoc / uvc_init_video_bulk
                      urb->complete = uvc_video_complete; (收到数据后此函数被调用,它又调用video->decode(urb, video, buf); ==> uvc_video_decode_isoc/uvc_video_encode_bulk => uvc_queue_next_buffer => wake_up(&buf->wait);)
                      
                  usb_submit_urb    
      
    12. poll

      uvc_v4l2_poll            
          uvc_queue_poll
              poll_wait(file, &buf->wait, wait);  // 休眠等待有数据
      
    13. VIDIOC_DQBUF

      uvc_dequeue_buffer
      	list_del(&buf->stream);
      
    14. VIDIOC_STREAMOFF

      uvc_video_enable(video, 0);
      	usb_kill_urb(urb);
      	usb_free_urb(urb);
      

    分析设置亮度过程:

    ioctl: VIDIOC_S_CTRL
                uvc_ctrl_set
                uvc_ctrl_commit
                    __uvc_ctrl_commit(video, 0);
                        uvc_ctrl_commit_entity(video->dev, entity, rollback);
                    			ret = uvc_query_ctrl(dev  /* 哪一个USB设备 */, SET_CUR, ctrl->entity->id  /* 哪一个unit/terminal */,
                    				dev->intfnum /* 哪一个接口: VC interface */, ctrl->info->selector,
                    				uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT),
                    				ctrl->info->size);
    

    小结:
    1 UVC设备有2个interface: VideoControl Interface, VideoStreaming Interface

    2 VideoControl Interface用于控制,比如设置亮度。它内部有多个Unit/Terminal(在程序里Unit/Terminal都称为entity)可以通过类似的函数来访问:

       ret = uvc_query_ctrl(dev  /* 哪一个USB设备 */, SET_CUR, ctrl->entity->id  /* 哪一个unit/terminal */,
                    				dev->intfnum /* 哪一个接口: VC interface */, ctrl->info->selector,
                    				uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT),
                    				ctrl->info->size);
    

    3 VideoStreaming Interface用于获得视频数据,也可以用来选择fromat/frame(VS可能有多种format, 一个format支持多种frame, frame用来表示分辨率等信息) 可以通过类似的函数来访问:

      ret = __uvc_query_ctrl(video->dev /* 哪一个USB设备 */, SET_CUR, 0,
                        		video->streaming->intfnum  /* 哪一个接口: VS */,
                        		probe ? VS_PROBE_CONTROL : VS_COMMIT_CONTROL, data, size,
                        		uvc_timeout_param);
    

    4 我们在设置FORMAT时只是简单的使用video->streaming->format[fmt->index]等数据,这些数据哪来的? 应是设备被枚举时设置的,也就是分析它的描述符时设置的。

    5 UVC驱动的重点在于:

       描述符的分析
       属性的控制: 通过VideoControl Interface来设置
       格式的选择:通过VideoStreaming Interface来设置
       数据的获得:通过VideoStreaming Interface的URB来获得
    
    展开全文
  • 坑一:直接装包,启用后图像是花屏 如果直接使用如下命令安装usb_cam功能包: sudo apt-get install ros-melodic-usb-cam 然后插上自己的UVC摄像头,运行如下指令:

    目录

     

    坑一:装包后直接启用,图像是花屏

    坑二:deprecated pixel format used, make sure you did set range correctly


    坑一:装包后直接启用,图像是花屏

    直接使用如下命令安装usb_cam功能包:

    sudo apt-get install ros-melodic-usb-cam

    然后插上自己的UVC摄像头,运行如下指令:

    roslaunch usb_cam usb_cam-test.launch

    此时可以检测到摄像头,但出来的图像是花的,如下:

     在查看了摄像头的数据手册之后,发现摄像头的默认像素格式是mjpeg格式的:

     于是乎查看了usb_cam-test.launch,发现原始的launch文件中定义的像素格式是yuyv格式的(第六行):

    <launch>
      <node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" >
        <param name="video_device" value="/dev/video0" />
        <param name="image_width" value="640" />
        <param name="image_height" value="480" />
        <param name="pixel_format" value="yuyv" />
        <param name="camera_frame_id" value="usb_cam" />
        <param name="io_method" value="mmap"/>
      </node>
      <node name="image_view" pkg="image_view" type="image_view" respawn="false" output="screen">
        <remap from="image" to="/usb_cam/image_raw"/>
        <param name="autosize" value="true" />
      </node>
    </launch>

    所以,将上述"yuyv"改成"mjpeg" ,在运行相应的launch文件,就可以的到正常的图片了:

    坑二:deprecated pixel format used, make sure you did set range correctly

    但是此时终端中会出现如下图所示的提示 :

    虽然看着并没有什么影响,但是对于我等强迫症患者来说简直等同于error(T_T) ,在网上找了下以下解决方法:

    usb_cam源码从GitHub上下载到工作空间中,然后在usb_cam源码src文件中找到usb_cam.cpp文件,大约在第430+行找到如下代码段:

      if (pic_size != avframe_camera_size_)
      {
        ROS_ERROR("outbuf size mismatch.  pic_size: %d bufsize: %d", pic_size, avframe_camera_size_);
        return;
      }
      video_sws_ = sws_getContext(xsize, ysize, avcodec_context_->pix_fmt, xsize, ysize, AV_PIX_FMT_RGB24, SWS_BILINEAR, NULL,
    			      NULL,  NULL);
      sws_scale(video_sws_, avframe_camera_->data, avframe_camera_->linesize, 0, ysize, avframe_rgb_->data,
                avframe_rgb_->linesize);
      sws_freeContext(video_sws_);

    在代码段:video_sws_ = sws_get...  位置上面一行插入以下代码:

      {
        AVPixelFormat pixFormat;
        switch (avcodec_context_->pix_fmt) {
        case AV_PIX_FMT_YUVJ420P :
            pixFormat = AV_PIX_FMT_YUV420P;
            break;
        case AV_PIX_FMT_YUVJ422P  :
            pixFormat = AV_PIX_FMT_YUV422P;
            break;
        case AV_PIX_FMT_YUVJ444P   :
            pixFormat = AV_PIX_FMT_YUV444P;
            break;
        case AV_PIX_FMT_YUVJ440P :
            pixFormat = AV_PIX_FMT_YUV440P;
            break;
        default:
            pixFormat = avcodec_context_->pix_fmt;
            break;
        }
        avcodec_context_->pix_fmt = pixFormat;
      }

    然后保存、重新编译、source devel/setup.bash、运行launch文件、完美解决问题。

    展开全文
  • linux使用UVC采集数据

    2015-08-14 16:51:00
    使用VIDIOC_REQBUFS,我们获取了req.count个缓存,下一步通过调用VIDIOC_QUERYBUF命令来获取这些缓存的地址,然后使用mmap函数转换成应用程序中的绝对地址,最后把这段缓存放入缓存队列:   typedef struct ...
  • 目录: 回顾 步骤 一 :实现USB驱动框架 步骤二:添加描述符-打印设备描述符即Device...步骤六 :添加描述符-打印UVC设备自定义描述符 回顾USB设备驱动内容,一个USB设备,包含如下一系列描述符 USB设备标准...
  • Linux uvc驱动分析

    千次阅读 2013-06-28 16:59:37
    一、ioctl调用流程 1.common/drivers/media/video/uvc/uvc_driver.c module_init(uvc_init); static int __init uvc_init(void){ result = usb_register(&uvc_driver.driver); } struct uvc_driver uvc_driver =...
  • 向USB摄像头设置参数: 比如使用哪个format, 使用这个format下的哪个frame(分辨率),参考UVC驱动,实现向USB摄像头设置参数的功能,分为如下三部分: 步骤一:myuvc_try_streaming_params() ; 测试参数 说明:...
  • 结合USB设备驱动框架,参考前面写的 myvivi.c 首先构建如下UVC驱动框架。需要回顾之前实现的虚拟摄像头驱动 myvivi.c的实现过程。 大致思路是: A1 APP 首先会 Open 驱动 A2 第二步 查询摄像头性能,确认该设备是一...
  • 本文代码参考 drivers/media/video/uvc !!! 主要工作如下: 工作1 填充 .vidioc_querycap cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING; 工作2 填充 .vidioc_enum_fmt_vid_cap,枚举...
  • 实现 myuvc_video_complete() ,当驱动程序收到一个URB包的时候,会调用此函数。 4.0 从 irqqueue 队列中取出第一个 buffer 4.1 判断子包状态 4.2 设置该子包传输的 起始和目的地址,即urb_buffer 以及 之前用于...
  • 现在,假如你的手上有一只摄像头,它是罗技高清网络摄像头webcam-C270,还有一块cortexA8开发板,这块开发板来自FriendlyARM,已经预装了linux系统,版本号是最新提供的linux-3.0.8,图形界面是Qtopia-2.2.0,交
  • 关于linux调用多个usb摄像头无法工作的问题
  • 这几天简单的研究了一下某个 UVC lib库,该库直接调用底层UVC驱动,通过JNI 响应APP的操控。内容如下: 目录: 一 说明 二 UVC 初始化概述 三 UVC 预览概述 四 UVC 拍照概述 五 UVC 录像概述 六 代码分析 ...
  • hisi平台UVC板端和linux pc端简单demo,有些SDK内有,有些没有,贡献给需要的朋友
  • linux uvc深入理解( 四)

    2017-06-16 16:33:00
    上文把uvc驱动的初始化部分分析的差不多了,从现在起我们开始着手uvc的操作流程,先给出我自己写的一个调用v4l2接口的应用,方便之后的分析 int main() { int ret; int camera_fd; //打开uvc设备,获取设备句柄 ...
  • CSDN仅用于增加百度收录权重,排版未优化,日常不维护。...Linux摄像头驱动学习第二篇,对USB摄像头驱动USB video class(UVC)进行详细分析、编写。 这次要写一个真正的摄像头驱动,内容有点多。 先简单的介绍了US...
  • 内核:Linux-3.4.2 驱动:drivers\media\video\uvc\...UVC 驱动整体调用流程: /* 打开设备描述符 */ 1. open: uvc_v4l2_open /* 查询设备属性 */ 2. VIDIOC_QUERYCAP if (video->streaming->type == V4L2...
  • (1) 添加系统调用号: arch/arm64/include/asm/unistd32.h eg: #define __NR_sysinfo 116 __SYSCALL(__NR_sysinfo, compat_sys_sysinfo) (2)添加用户空间和kernel中对应函数的向量表: arch/arm/tools/...
  • 香橙派PC笔记-05-编译linux内核和UVC摄像头驱动笔记 我的笔记和资料全共享在云盘: http://pan.baidu.com/s/1dD6T0f3 没有密码,欢迎下载~~~~~~   材料: 香橙派:orangepi PC TF卡:用原来...
  • 转载自 hceng blog ...Linux摄像头驱动学习第二篇,对USB摄像头驱动USB video class(UVC)进行详细分析、编写。 这次要写一个真正的摄像头驱动,内容有点多。 先简单的...
  • linux设备驱动——UVC驱动程序

    千次阅读 2014-10-05 19:23:50
    1.uvc驱动框架 首先,因为要用USB传数据,入口函数中注册usb_driver结构体,出口函数反之 static int myuvc_init(void) { usb_register(&myuvc_driver); return 0; } static void myuvc_exit(void) { ...
  • 转载于:... UVC: USB Video ClassUVC驱动:drivers\media\video\uvc\ uvc_driver.c分析:1. usb_register(&uvc_driver.driver);2. uvc_probe uvc_register_v...
  • ubuntu-Linux系统读取USB摄像头数据(uvc)

    万次阅读 2016-12-23 11:46:40
    我想现在用的摄像头是UVC免驱的。根据国嵌的教程中有一个gspca摄像头的程序。我发现把gspca的采集程序用到uvc上时,在显示图像的时候提示没有huffman表。但是在显示gspca的摄像头时却没有问题。为此特别找了以下的...
  • uvc_register_chains uvc_register_terms uvc_register_video uvc_video_init uvc_register_video_device vdev->v4l2_dev = &dev->vdev; vdev->fops = &uvc_fops; //使用UVC标准...
  • 嵌入式Linux驱动笔记(十七)------详解V4L2框架(UVC驱动)

    万次阅读 多人点赞 2017-11-18 17:36:15
    Video for Linux 2,简称V4l2,是Linux内核中关于视频设备的内核驱动框架,为上层的访问底层的视频设备提供了统一的接口。凡是内核中的子系统都有抽象底层硬件的差异,为上层提供统一的接口和提取出公共代码避免代码...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 938
精华内容 375
关键字:

linux调用uvc

linux 订阅