Full Code of saki4510t/UVCCamera for AI

master c9399e63dfab cached
1018 files
12.0 MB
3.2M tokens
5822 symbols
2 requests
Copy disabled (too large) Download .txt
Showing preview only (12,779K chars total). Download the full file to get everything.
Repository: saki4510t/UVCCamera
Branch: master
Commit: c9399e63dfab
Files: 1018
Total size: 12.0 MB

Directory structure:
gitextract_nybbmgne/

├── .gitignore
├── .idea/
│   ├── encodings.xml
│   ├── gradle.xml
│   ├── inspectionProfiles/
│   │   └── Project_Default.xml
│   └── vcs.xml
├── README.md
├── build.gradle
├── gradle/
│   └── wrapper/
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── libuvccamera/
│   ├── build.gradle
│   └── src/
│       └── main/
│           ├── AndroidManifest.xml
│           ├── java/
│           │   └── com/
│           │       └── serenegiant/
│           │           ├── common/
│           │           │   ├── BaseActivity.java
│           │           │   ├── BaseFragment.java
│           │           │   └── BaseService.java
│           │           └── usb/
│           │               ├── CameraDialog.java
│           │               ├── DeviceFilter.java
│           │               ├── IButtonCallback.java
│           │               ├── IFrameCallback.java
│           │               ├── IStatusCallback.java
│           │               ├── Size.java
│           │               ├── USBMonitor.java
│           │               ├── USBVendorId.java
│           │               └── UVCCamera.java
│           ├── jni/
│           │   ├── Android.mk
│           │   ├── Application.mk
│           │   ├── UVCCamera/
│           │   │   ├── Android.mk
│           │   │   ├── Parameters.cpp
│           │   │   ├── Parameters.h
│           │   │   ├── UVCButtonCallback.cpp
│           │   │   ├── UVCButtonCallback.h
│           │   │   ├── UVCCamera.cpp
│           │   │   ├── UVCCamera.h
│           │   │   ├── UVCPreview.cpp
│           │   │   ├── UVCPreview.h
│           │   │   ├── UVCStatusCallback.cpp
│           │   │   ├── UVCStatusCallback.h
│           │   │   ├── _onload.cpp
│           │   │   ├── _onload.h
│           │   │   ├── libUVCCamera.h
│           │   │   ├── objectarray.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
│           │   │   │   ├── PreviewPipeline.cpp
│           │   │   │   ├── PreviewPipeline.h
│           │   │   │   ├── PublisherPipeline.cpp
│           │   │   │   ├── PublisherPipeline.h
│           │   │   │   ├── SQLiteBufferedPipeline.cpp
│           │   │   │   ├── SQLiteBufferedPipeline.h
│           │   │   │   ├── SimpleBufferedPipeline.cpp
│           │   │   │   ├── SimpleBufferedPipeline.h
│           │   │   │   ├── pipeline_helper.cpp
│           │   │   │   └── pipeline_helper.h
│           │   │   ├── serenegiant_usb_UVCCamera.cpp
│           │   │   └── utilbase.cpp
│           │   ├── libjpeg-turbo-1.5.0/
│           │   │   ├── Android.mk
│           │   │   ├── BUILDING.md
│           │   │   ├── CMakeLists.txt
│           │   │   ├── ChangeLog.md
│           │   │   ├── LICENSE.md
│           │   │   ├── Makefile.am
│           │   │   ├── Makefile.in
│           │   │   ├── README.ijg
│           │   │   ├── README.md
│           │   │   ├── acinclude.m4
│           │   │   ├── aclocal.m4
│           │   │   ├── ar-lib
│           │   │   ├── bmp.c
│           │   │   ├── bmp.h
│           │   │   ├── cderror.h
│           │   │   ├── cdjpeg.c
│           │   │   ├── cdjpeg.h
│           │   │   ├── change.log
│           │   │   ├── cjpeg.1
│           │   │   ├── cjpeg.c
│           │   │   ├── 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
│           │   │   │       ├── classes.html
│           │   │   │       ├── doxygen-extra.css
│           │   │   │       ├── doxygen.css
│           │   │   │       ├── dynsections.js
│           │   │   │       ├── functions.html
│           │   │   │       ├── functions_vars.html
│           │   │   │       ├── group___turbo_j_p_e_g.html
│           │   │   │       ├── index.html
│           │   │   │       ├── jquery.js
│           │   │   │       ├── modules.html
│           │   │   │       ├── 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
│           │   │   │       │   ├── enums_74.html
│           │   │   │       │   ├── enums_74.js
│           │   │   │       │   ├── enumvalues_74.html
│           │   │   │       │   ├── enumvalues_74.js
│           │   │   │       │   ├── functions_74.html
│           │   │   │       │   ├── functions_74.js
│           │   │   │       │   ├── groups_74.html
│           │   │   │       │   ├── groups_74.js
│           │   │   │       │   ├── nomatches.html
│           │   │   │       │   ├── search.css
│           │   │   │       │   ├── search.js
│           │   │   │       │   ├── 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
│           │   │   │       └── tabs.css
│           │   │   ├── doxygen-extra.css
│           │   │   ├── doxygen.config
│           │   │   ├── example.c
│           │   │   ├── include/
│           │   │   │   ├── config.h
│           │   │   │   ├── jconfig.h
│           │   │   │   ├── jconfigint.h
│           │   │   │   └── jsimdcfg.inc
│           │   │   ├── install-sh
│           │   │   ├── jaricom.c
│           │   │   ├── java/
│           │   │   │   ├── CMakeLists.txt
│           │   │   │   ├── MANIFEST.MF
│           │   │   │   ├── Makefile.am
│           │   │   │   ├── Makefile.in
│           │   │   │   ├── README
│           │   │   │   ├── TJBench.java
│           │   │   │   ├── TJExample.java
│           │   │   │   ├── TJUnitTest.java
│           │   │   │   ├── doc/
│           │   │   │   │   ├── allclasses-frame.html
│           │   │   │   │   ├── allclasses-noframe.html
│           │   │   │   │   ├── constant-values.html
│           │   │   │   │   ├── deprecated-list.html
│           │   │   │   │   ├── help-doc.html
│           │   │   │   │   ├── index-all.html
│           │   │   │   │   ├── index.html
│           │   │   │   │   ├── org/
│           │   │   │   │   │   └── libjpegturbo/
│           │   │   │   │   │       └── turbojpeg/
│           │   │   │   │   │           ├── TJ.html
│           │   │   │   │   │           ├── TJCompressor.html
│           │   │   │   │   │           ├── TJCustomFilter.html
│           │   │   │   │   │           ├── TJDecompressor.html
│           │   │   │   │   │           ├── TJException.html
│           │   │   │   │   │           ├── TJScalingFactor.html
│           │   │   │   │   │           ├── TJTransform.html
│           │   │   │   │   │           ├── TJTransformer.html
│           │   │   │   │   │           ├── YUVImage.html
│           │   │   │   │   │           ├── package-frame.html
│           │   │   │   │   │           ├── package-summary.html
│           │   │   │   │   │           └── package-tree.html
│           │   │   │   │   ├── overview-tree.html
│           │   │   │   │   ├── package-list
│           │   │   │   │   ├── serialized-form.html
│           │   │   │   │   └── stylesheet.css
│           │   │   │   ├── org/
│           │   │   │   │   └── libjpegturbo/
│           │   │   │   │       └── turbojpeg/
│           │   │   │   │           ├── TJ.java
│           │   │   │   │           ├── TJCompressor.java
│           │   │   │   │           ├── TJCustomFilter.java
│           │   │   │   │           ├── TJDecompressor.java
│           │   │   │   │           ├── TJException.java
│           │   │   │   │           ├── TJLoader.java.in
│           │   │   │   │           ├── TJLoader.java.tmpl
│           │   │   │   │           ├── TJScalingFactor.java
│           │   │   │   │           ├── TJTransform.java
│           │   │   │   │           ├── TJTransformer.java
│           │   │   │   │           └── YUVImage.java
│           │   │   │   ├── org_libjpegturbo_turbojpeg_TJ.h
│           │   │   │   ├── org_libjpegturbo_turbojpeg_TJCompressor.h
│           │   │   │   ├── org_libjpegturbo_turbojpeg_TJDecompressor.h
│           │   │   │   └── org_libjpegturbo_turbojpeg_TJTransformer.h
│           │   │   ├── 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
│           │   │   ├── jconfig.txt
│           │   │   ├── jconfigint.h.in
│           │   │   ├── jcparam.c
│           │   │   ├── jcphuff.c
│           │   │   ├── jcprepct.c
│           │   │   ├── jcsample.c
│           │   │   ├── jcstest.c
│           │   │   ├── jctrans.c
│           │   │   ├── jdapimin.c
│           │   │   ├── jdapistd.c
│           │   │   ├── jdarith.c
│           │   │   ├── jdatadst-tj.c
│           │   │   ├── jdatadst.c
│           │   │   ├── jdatasrc-tj.c
│           │   │   ├── jdatasrc.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
│           │   │   ├── jpeg_nbits_table.h
│           │   │   ├── jpegcomp.h
│           │   │   ├── jpegint.h
│           │   │   ├── jpeglib.h
│           │   │   ├── jpegtran.1
│           │   │   ├── jpegtran.c
│           │   │   ├── jquant1.c
│           │   │   ├── jquant2.c
│           │   │   ├── jsimd.h
│           │   │   ├── jsimd_none.c
│           │   │   ├── jsimddct.h
│           │   │   ├── jstdhuff.c
│           │   │   ├── jutils.c
│           │   │   ├── jversion.h
│           │   │   ├── libjpeg.map.in
│           │   │   ├── libjpeg.txt
│           │   │   ├── ltmain.sh
│           │   │   ├── md5/
│           │   │   │   ├── CMakeLists.txt
│           │   │   │   ├── Makefile.am
│           │   │   │   ├── Makefile.in
│           │   │   │   ├── md5.c
│           │   │   │   ├── md5.h
│           │   │   │   ├── md5cmp.c
│           │   │   │   └── md5hl.c
│           │   │   ├── missing
│           │   │   ├── rdbmp.c
│           │   │   ├── rdcolmap.c
│           │   │   ├── rdgif.c
│           │   │   ├── rdjpgcom.1
│           │   │   ├── rdjpgcom.c
│           │   │   ├── rdppm.c
│           │   │   ├── rdrle.c
│           │   │   ├── rdswitch.c
│           │   │   ├── rdtarga.c
│           │   │   ├── release/
│           │   │   │   ├── Distribution.xml
│           │   │   │   ├── License.rtf
│           │   │   │   ├── ReadMe.txt
│           │   │   │   ├── Welcome.rtf
│           │   │   │   ├── deb-control.tmpl
│           │   │   │   ├── libjpeg-turbo.nsi.in
│           │   │   │   ├── libjpeg-turbo.spec.in
│           │   │   │   ├── libjpeg.pc.in
│           │   │   │   ├── libturbojpeg.pc.in
│           │   │   │   ├── makecygwinpkg.in
│           │   │   │   ├── makedpkg.in
│           │   │   │   ├── makemacpkg.in
│           │   │   │   └── uninstall.in
│           │   │   ├── sharedlib/
│           │   │   │   └── CMakeLists.txt
│           │   │   ├── simd/
│           │   │   │   ├── CMakeLists.txt
│           │   │   │   ├── Makefile.am
│           │   │   │   ├── Makefile.in
│           │   │   │   ├── 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-mmx.asm
│           │   │   │   ├── jcsample-sse2-64.asm
│           │   │   │   ├── jcsample-sse2.asm
│           │   │   │   ├── jcsample.h
│           │   │   │   ├── 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-sse.asm
│           │   │   │   ├── jidctflt-sse2-64.asm
│           │   │   │   ├── jidctflt-sse2.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
│           │   │   │   ├── jquant-mmx.asm
│           │   │   │   ├── jquant-sse.asm
│           │   │   │   ├── jquantf-sse2-64.asm
│           │   │   │   ├── jquantf-sse2.asm
│           │   │   │   ├── jquanti-altivec.c
│           │   │   │   ├── jquanti-sse2-64.asm
│           │   │   │   ├── jquanti-sse2.asm
│           │   │   │   ├── jsimd.h
│           │   │   │   ├── jsimd_altivec.h
│           │   │   │   ├── jsimd_arm.c
│           │   │   │   ├── jsimd_arm64.c
│           │   │   │   ├── jsimd_arm64_neon.S
│           │   │   │   ├── jsimd_arm_neon.S
│           │   │   │   ├── jsimd_i386.c
│           │   │   │   ├── jsimd_mips.c
│           │   │   │   ├── jsimd_mips_dspr2.S
│           │   │   │   ├── jsimd_mips_dspr2_asm.h
│           │   │   │   ├── jsimd_powerpc.c
│           │   │   │   ├── jsimd_x86_64.c
│           │   │   │   ├── jsimdcfg.inc.h
│           │   │   │   ├── jsimdcpu.asm
│           │   │   │   ├── jsimdext.inc
│           │   │   │   └── nasm_lt.sh
│           │   │   ├── structure.txt
│           │   │   ├── testimages/
│           │   │   │   ├── nightshot_iso_100.txt
│           │   │   │   └── testorig.ppm
│           │   │   ├── tjbench.c
│           │   │   ├── tjbenchtest.in
│           │   │   ├── tjbenchtest.java.in
│           │   │   ├── tjexampletest.in
│           │   │   ├── tjunittest.c
│           │   │   ├── tjutil.c
│           │   │   ├── tjutil.h
│           │   │   ├── transupp.c
│           │   │   ├── transupp.h
│           │   │   ├── turbojpeg-jni.c
│           │   │   ├── turbojpeg-mapfile
│           │   │   ├── turbojpeg-mapfile.jni
│           │   │   ├── turbojpeg.c
│           │   │   ├── turbojpeg.h
│           │   │   ├── usage.txt
│           │   │   ├── win/
│           │   │   │   ├── jconfig.h.in
│           │   │   │   ├── jconfigint.h.in
│           │   │   │   ├── jpeg62-memsrcdst.def
│           │   │   │   ├── jpeg62.def
│           │   │   │   ├── jpeg7-memsrcdst.def
│           │   │   │   ├── jpeg7.def
│           │   │   │   ├── jpeg8.def
│           │   │   │   └── jsimdcfg.inc
│           │   │   ├── wizard.txt
│           │   │   ├── wrbmp.c
│           │   │   ├── wrgif.c
│           │   │   ├── wrjpgcom.1
│           │   │   ├── wrjpgcom.c
│           │   │   ├── wrppm.c
│           │   │   ├── wrppm.h
│           │   │   ├── wrrle.c
│           │   │   └── wrtarga.c
│           │   ├── libusb/
│           │   │   ├── .private/
│           │   │   │   ├── README.txt
│           │   │   │   ├── bd.cmd
│           │   │   │   ├── bm.sh
│           │   │   │   ├── bwince.cmd
│           │   │   │   ├── post-rewrite.sh
│           │   │   │   ├── pre-commit.sh
│           │   │   │   ├── wbs.txt
│           │   │   │   └── wbs_wince.txt
│           │   │   ├── AUTHORS
│           │   │   ├── COPYING
│           │   │   ├── ChangeLog
│           │   │   ├── INSTALL
│           │   │   ├── INSTALL_WIN.txt
│           │   │   ├── Makefile.am
│           │   │   ├── NEWS
│           │   │   ├── PORTING
│           │   │   ├── README
│           │   │   ├── README.git
│           │   │   ├── TODO
│           │   │   ├── Xcode/
│           │   │   │   ├── common.xcconfig
│           │   │   │   ├── config.h
│           │   │   │   ├── debug.xcconfig
│           │   │   │   ├── libusb.xcconfig
│           │   │   │   ├── libusb.xcodeproj/
│           │   │   │   │   └── project.pbxproj
│           │   │   │   ├── libusb_debug.xcconfig
│           │   │   │   ├── libusb_release.xcconfig
│           │   │   │   └── release.xcconfig
│           │   │   ├── android/
│           │   │   │   ├── README
│           │   │   │   ├── config.h
│           │   │   │   ├── config_original.h
│           │   │   │   └── jni/
│           │   │   │       ├── Android.mk
│           │   │   │       ├── Android_original.mk
│           │   │   │       ├── Application.mk
│           │   │   │       ├── examples.mk
│           │   │   │       ├── libusb.mk
│           │   │   │       ├── libusb_original.mk
│           │   │   │       └── tests.mk
│           │   │   ├── autogen.sh
│           │   │   ├── bootstrap.sh
│           │   │   ├── configure.ac
│           │   │   ├── doc/
│           │   │   │   ├── Makefile.am
│           │   │   │   └── doxygen.cfg.in
│           │   │   ├── examples/
│           │   │   │   ├── Makefile.am
│           │   │   │   ├── dpfp.c
│           │   │   │   ├── dpfp_threaded.c
│           │   │   │   ├── ezusb.c
│           │   │   │   ├── ezusb.h
│           │   │   │   ├── fxload.c
│           │   │   │   ├── getopt/
│           │   │   │   │   ├── getopt.c
│           │   │   │   │   ├── getopt.h
│           │   │   │   │   └── getopt1.c
│           │   │   │   ├── hotplugtest.c
│           │   │   │   ├── listdevs.c
│           │   │   │   ├── sam3u_benchmark.c
│           │   │   │   └── xusb.c
│           │   │   ├── libusb/
│           │   │   │   ├── Makefile.am
│           │   │   │   ├── 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
│           │   │   │   ├── libusb_original.h
│           │   │   │   ├── libusbi.h
│           │   │   │   ├── libusbi_original.h
│           │   │   │   ├── 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
│           │   │   ├── 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.dsw
│           │   │   │   ├── libusb_2005.sln
│           │   │   │   ├── libusb_2010.sln
│           │   │   │   ├── libusb_2012.sln
│           │   │   │   ├── libusb_2013.sln
│           │   │   │   ├── libusb_dll.dsp
│           │   │   │   ├── 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_wince.vcproj
│           │   │   │   ├── libusb_sources
│           │   │   │   ├── libusb_static.dsp
│           │   │   │   ├── 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_wince.vcproj
│           │   │   │   ├── libusb_wince.sln
│           │   │   │   ├── listdevs.dsp
│           │   │   │   ├── listdevs_2005.vcproj
│           │   │   │   ├── listdevs_2010.vcxproj
│           │   │   │   ├── listdevs_2010.vcxproj.filters
│           │   │   │   ├── listdevs_2012.vcxproj
│           │   │   │   ├── listdevs_2012.vcxproj.filters
│           │   │   │   ├── listdevs_2013.vcxproj
│           │   │   │   ├── 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.dsp
│           │   │   │   ├── xusb_2005.vcproj
│           │   │   │   ├── xusb_2010.vcxproj
│           │   │   │   ├── xusb_2010.vcxproj.filters
│           │   │   │   ├── xusb_2012.vcxproj
│           │   │   │   ├── xusb_2012.vcxproj.filters
│           │   │   │   ├── xusb_2013.vcxproj
│           │   │   │   ├── xusb_sources
│           │   │   │   └── xusb_wince.vcproj
│           │   │   └── tests/
│           │   │       ├── Makefile.am
│           │   │       ├── libusb_testlib.h
│           │   │       ├── stress.c
│           │   │       └── testlib.c
│           │   ├── libuvc/
│           │   │   ├── CMakeLists.txt
│           │   │   ├── README.md
│           │   │   ├── android/
│           │   │   │   └── jni/
│           │   │   │       └── Android.mk
│           │   │   ├── cameras/
│           │   │   │   ├── isight_imac.txt
│           │   │   │   ├── isight_macbook.txt
│           │   │   │   ├── ms_lifecam_show.txt
│           │   │   │   ├── quickcampro9000.txt
│           │   │   │   ├── quickcampro9000_builtin_ctrls.txt
│           │   │   │   └── quickcampro9000_extra_ctrls.txt
│           │   │   ├── changelog.txt
│           │   │   ├── doxygen.conf
│           │   │   ├── include/
│           │   │   │   ├── libuvc/
│           │   │   │   │   ├── libuvc.h
│           │   │   │   │   ├── libuvc_config.h
│           │   │   │   │   ├── libuvc_config.h.in
│           │   │   │   │   ├── libuvc_internal.h
│           │   │   │   │   ├── libuvc_internal_original.h
│           │   │   │   │   └── libuvc_original.h
│           │   │   │   └── utlist.h
│           │   │   ├── libuvcConfig.cmake.in
│           │   │   ├── libuvcConfigVersion.cmake.in
│           │   │   └── src/
│           │   │       ├── ctrl.c
│           │   │       ├── ctrl_original.c
│           │   │       ├── device.c
│           │   │       ├── device_original.c
│           │   │       ├── diag.c
│           │   │       ├── diag_original.c
│           │   │       ├── example.c
│           │   │       ├── frame-mjpeg.c
│           │   │       ├── frame-mjpeg_original.c
│           │   │       ├── frame.c
│           │   │       ├── frame_original.c
│           │   │       ├── init.c
│           │   │       ├── init_original.c
│           │   │       ├── misc.c
│           │   │       ├── stream.c
│           │   │       ├── stream_original.c
│           │   │       └── test.c
│           │   ├── localdefines.h
│           │   ├── rapidjson/
│           │   │   ├── .gitmodules
│           │   │   ├── .travis.yml
│           │   │   ├── doc/
│           │   │   │   ├── diagram/
│           │   │   │   │   ├── insituparsing.dot
│           │   │   │   │   ├── iterative-parser-states-diagram.dot
│           │   │   │   │   ├── makefile
│           │   │   │   │   ├── move1.dot
│           │   │   │   │   ├── move2.dot
│           │   │   │   │   ├── move3.dot
│           │   │   │   │   ├── normalparsing.dot
│           │   │   │   │   ├── simpledom.dot
│           │   │   │   │   └── tutorial.dot
│           │   │   │   ├── dom.md
│           │   │   │   ├── encoding.md
│           │   │   │   ├── faq.md
│           │   │   │   ├── features.md
│           │   │   │   ├── internals.md
│           │   │   │   ├── misc/
│           │   │   │   │   ├── DoxygenLayout.xml
│           │   │   │   │   ├── doxygenextra.css
│           │   │   │   │   ├── 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
│           │   │       │   ├── LICENSE
│           │   │       │   ├── README.txt
│           │   │       │   ├── include/
│           │   │       │   │   └── json/
│           │   │       │   │       ├── autolink.h
│           │   │       │   │       ├── config.h
│           │   │       │   │       ├── features.h
│           │   │       │   │       ├── forwards.h
│           │   │       │   │       ├── json.h
│           │   │       │   │       ├── reader.h
│           │   │       │   │       ├── value.h
│           │   │       │   │       └── writer.h
│           │   │       │   ├── 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
│           │   │       │   ├── ultrajson.h
│           │   │       │   ├── ultrajsondec.c
│           │   │       │   └── ultrajsonenc.c
│           │   │       └── yajl/
│           │   │           ├── COPYING
│           │   │           ├── ChangeLog
│           │   │           ├── README
│           │   │           ├── TODO
│           │   │           ├── include/
│           │   │           │   └── yajl/
│           │   │           │       ├── yajl_common.h
│           │   │           │       ├── yajl_gen.h
│           │   │           │       ├── yajl_parse.h
│           │   │           │       ├── yajl_tree.h
│           │   │           │       └── yajl_version.h
│           │   │           └── src/
│           │   │               ├── CMakeLists.txt
│           │   │               ├── YAJL.dxy
│           │   │               ├── api/
│           │   │               │   ├── yajl_common.h
│           │   │               │   ├── yajl_gen.h
│           │   │               │   ├── yajl_parse.h
│           │   │               │   ├── yajl_tree.h
│           │   │               │   └── yajl_version.h.cmake
│           │   │               ├── yajl
│           │   │               ├── yajl.c
│           │   │               ├── yajl_alloc.c
│           │   │               ├── yajl_alloc.h
│           │   │               ├── yajl_buf.c
│           │   │               ├── yajl_buf.h
│           │   │               ├── yajl_bytestack.h
│           │   │               ├── 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
│           │   └── utilbase.h
│           └── res/
│               ├── layout/
│               │   ├── dialog_camera.xml
│               │   └── listitem_device.xml
│               ├── values/
│               │   ├── dimens.xml
│               │   └── strings.xml
│               ├── values-ja/
│               │   └── strings.xml
│               └── xml/
│                   └── device_filter.xml
├── settings.gradle
├── usbCameraCommon/
│   ├── build.gradle
│   ├── proguard-rules.pro
│   └── src/
│       └── main/
│           ├── AndroidManifest.xml
│           ├── java/
│           │   └── com/
│           │       └── serenegiant/
│           │           ├── encoder/
│           │           │   ├── IAudioEncoder.java
│           │           │   ├── IVideoEncoder.java
│           │           │   ├── MediaAudioEncoder.java
│           │           │   ├── MediaEncoder.java
│           │           │   ├── MediaMuxerWrapper.java
│           │           │   ├── MediaSurfaceEncoder.java
│           │           │   ├── MediaVideoBufferEncoder.java
│           │           │   └── MediaVideoEncoder.java
│           │           ├── usbcameracommon/
│           │           │   ├── AbstractUVCCameraHandler.java
│           │           │   ├── UVCCameraHandler.java
│           │           │   └── UVCCameraHandlerMultiSurface.java
│           │           └── widget/
│           │               ├── AspectRatioTextureView.java
│           │               ├── CameraViewInterface.java
│           │               └── UVCCameraTextureView.java
│           └── res/
│               ├── raw/
│               │   └── camera_click.ogg
│               └── values/
│                   └── strings.xml
├── usbCameraTest/
│   ├── build.gradle
│   ├── lint.xml
│   ├── proguard-project.txt
│   └── src/
│       └── main/
│           ├── AndroidManifest.xml
│           ├── java/
│           │   └── com/
│           │       └── serenegiant/
│           │           ├── usbcameratest/
│           │           │   └── MainActivity.java
│           │           └── widget/
│           │               ├── AspectRatioViewInterface.java
│           │               └── SimpleUVCCameraTextureView.java
│           └── res/
│               ├── layout/
│               │   └── activity_main.xml
│               ├── values/
│               │   ├── dimens.xml
│               │   ├── strings.xml
│               │   └── styles.xml
│               ├── values-ja/
│               │   └── strings.xml
│               ├── values-v11/
│               │   └── styles.xml
│               ├── values-v14/
│               │   └── styles.xml
│               ├── values-w820dp/
│               │   └── dimens.xml
│               └── xml/
│                   └── device_filter.xml
├── usbCameraTest0/
│   ├── build.gradle
│   ├── lint.xml
│   ├── proguard-project.txt
│   └── src/
│       └── main/
│           ├── AndroidManifest.xml
│           ├── java/
│           │   └── com/
│           │       └── serenegiant/
│           │           └── usbcameratest0/
│           │               └── MainActivity.java
│           └── res/
│               ├── layout/
│               │   └── activity_main.xml
│               ├── values/
│               │   ├── dimens.xml
│               │   ├── strings.xml
│               │   └── styles.xml
│               ├── values-ja/
│               │   └── strings.xml
│               ├── values-v11/
│               │   └── styles.xml
│               ├── values-v14/
│               │   └── styles.xml
│               ├── values-w820dp/
│               │   └── dimens.xml
│               └── xml/
│                   └── device_filter.xml
├── usbCameraTest2/
│   ├── build.gradle
│   ├── lint.xml
│   ├── proguard-project.txt
│   └── src/
│       └── main/
│           ├── AndroidManifest.xml
│           ├── java/
│           │   └── com/
│           │       └── serenegiant/
│           │           ├── usbcameratest2/
│           │           │   └── MainActivity.java
│           │           ├── video/
│           │           │   ├── Encoder.java
│           │           │   └── SurfaceEncoder.java
│           │           └── widget/
│           │               ├── AspectRatioViewInterface.java
│           │               └── SimpleUVCCameraTextureView.java
│           └── res/
│               ├── drawable/
│               │   └── border.xml
│               ├── layout/
│               │   └── activity_main.xml
│               ├── values/
│               │   ├── dimens.xml
│               │   ├── strings.xml
│               │   └── styles.xml
│               ├── values-ja/
│               │   └── strings.xml
│               ├── values-v11/
│               │   └── styles.xml
│               ├── values-v14/
│               │   └── styles.xml
│               ├── values-w820dp/
│               │   └── dimens.xml
│               └── xml/
│                   └── device_filter.xml
├── usbCameraTest3/
│   ├── build.gradle
│   ├── lint.xml
│   ├── proguard-project.txt
│   └── src/
│       └── main/
│           ├── AndroidManifest.xml
│           ├── java/
│           │   └── com/
│           │       └── serenegiant/
│           │           ├── usbcameratest3/
│           │           │   └── MainActivity.java
│           │           └── widget/
│           │               └── UVCCameraTextureView2.java
│           └── res/
│               ├── drawable/
│               │   └── border.xml
│               ├── layout/
│               │   ├── activity_main.xml
│               │   └── activity_main2.xml
│               ├── values/
│               │   ├── colors.xml
│               │   ├── dimens.xml
│               │   ├── strings.xml
│               │   └── styles.xml
│               ├── values-ja/
│               │   └── strings.xml
│               ├── values-v11/
│               │   └── styles.xml
│               ├── values-v14/
│               │   └── styles.xml
│               ├── values-w820dp/
│               │   └── dimens.xml
│               └── xml/
│                   └── device_filter.xml
├── usbCameraTest4/
│   ├── build.gradle
│   ├── proguard-project.txt
│   └── src/
│       └── main/
│           ├── AndroidManifest.xml
│           ├── aidl/
│           │   ├── android/
│           │   │   ├── hardware/
│           │   │   │   └── usb/
│           │   │   │       └── UsbDevice.aidl
│           │   │   └── view/
│           │   │       └── Surface.aidl
│           │   └── com/
│           │       └── serenegiant/
│           │           └── service/
│           │               ├── IUVCService.aidl
│           │               ├── IUVCServiceCallback.aidl
│           │               ├── IUVCServiceOnFrameAvailable.aidl
│           │               └── IUVCSlaveService.aidl
│           ├── java/
│           │   └── com/
│           │       └── serenegiant/
│           │           ├── service/
│           │           │   ├── CameraServer.java
│           │           │   └── UVCService.java
│           │           ├── serviceclient/
│           │           │   ├── CameraClient.java
│           │           │   ├── ICameraClient.java
│           │           │   └── ICameraClientCallback.java
│           │           └── usbcameratest4/
│           │               ├── CameraFragment.java
│           │               └── MainActivity.java
│           └── res/
│               ├── drawable/
│               │   └── border.xml
│               ├── layout/
│               │   ├── activity_main.xml
│               │   └── fragment_main.xml
│               ├── raw/
│               │   └── camera_click.ogg
│               ├── values/
│               │   ├── colors.xml
│               │   ├── dimens.xml
│               │   ├── strings.xml
│               │   └── styles.xml
│               ├── values-ja/
│               │   └── strings.xml
│               ├── values-v11/
│               │   └── styles.xml
│               ├── values-v14/
│               │   └── styles.xml
│               ├── values-w820dp/
│               │   └── dimens.xml
│               └── xml/
│                   └── device_filter.xml
├── usbCameraTest5/
│   ├── build.gradle
│   ├── lint.xml
│   ├── proguard-project.txt
│   └── src/
│       └── main/
│           ├── AndroidManifest.xml
│           ├── java/
│           │   └── com/
│           │       └── serenegiant/
│           │           └── usbcameratest5/
│           │               └── MainActivity.java
│           └── res/
│               ├── drawable/
│               │   └── border.xml
│               ├── layout/
│               │   └── activity_main.xml
│               ├── raw/
│               │   └── camera_click.ogg
│               ├── values/
│               │   ├── colors.xml
│               │   ├── dimens.xml
│               │   ├── strings.xml
│               │   └── styles.xml
│               ├── values-ja/
│               │   └── strings.xml
│               ├── values-v11/
│               │   └── styles.xml
│               ├── values-v14/
│               │   └── styles.xml
│               ├── values-w820dp/
│               │   └── dimens.xml
│               └── xml/
│                   └── device_filter.xml
├── usbCameraTest6/
│   ├── build.gradle
│   ├── lint.xml
│   ├── proguard-project.txt
│   └── src/
│       └── main/
│           ├── AndroidManifest.xml
│           ├── java/
│           │   └── com/
│           │       └── serenegiant/
│           │           └── usbcameratest6/
│           │               └── MainActivity.java
│           └── res/
│               ├── drawable/
│               │   └── border.xml
│               ├── layout/
│               │   └── activity_main.xml
│               ├── raw/
│               │   └── camera_click.ogg
│               ├── values/
│               │   ├── colors.xml
│               │   ├── dimens.xml
│               │   ├── strings.xml
│               │   └── styles.xml
│               ├── values-ja/
│               │   └── strings.xml
│               ├── values-v11/
│               │   └── styles.xml
│               ├── values-v14/
│               │   └── styles.xml
│               ├── values-w820dp/
│               │   └── dimens.xml
│               └── xml/
│                   └── device_filter.xml
├── usbCameraTest7/
│   ├── build.gradle
│   ├── lint.xml
│   ├── proguard-project.txt
│   └── src/
│       └── main/
│           ├── AndroidManifest.xml
│           ├── java/
│           │   └── com/
│           │       └── serenegiant/
│           │           └── usbcameratest7/
│           │               └── MainActivity.java
│           └── res/
│               ├── drawable/
│               │   └── border.xml
│               ├── layout/
│               │   └── activity_main.xml
│               ├── raw/
│               │   └── camera_click.ogg
│               ├── values/
│               │   ├── colors.xml
│               │   ├── dimens.xml
│               │   ├── strings.xml
│               │   └── styles.xml
│               ├── values-ja/
│               │   └── strings.xml
│               ├── values-v11/
│               │   └── styles.xml
│               ├── values-v14/
│               │   └── styles.xml
│               ├── values-w820dp/
│               │   └── dimens.xml
│               └── xml/
│                   └── device_filter.xml
└── usbCameraTest8/
    ├── build.gradle
    ├── proguard-rules.pro
    └── src/
        ├── androidTest/
        │   └── java/
        │       └── com/
        │           └── serenegiant/
        │               └── usbcameratest8/
        │                   └── ExampleInstrumentedTest.java
        ├── main/
        │   ├── AndroidManifest.xml
        │   ├── java/
        │   │   └── com/
        │   │       └── serenegiant/
        │   │           └── usbcameratest8/
        │   │               └── MainActivity.java
        │   └── res/
        │       ├── layout/
        │       │   └── activity_main.xml
        │       ├── values/
        │       │   ├── colors.xml
        │       │   ├── dimens.xml
        │       │   ├── strings.xml
        │       │   └── styles.xml
        │       ├── values-ja/
        │       │   └── strings.xml
        │       └── values-w820dp/
        │           └── dimens.xml
        └── test/
            └── java/
                └── com/
                    └── serenegiant/
                        └── usbcameratest8/
                            └── ExampleUnitTest.java

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
# built application files
*.apk
*.ap_

# files for the dex VM
*.dex

# Java class files
*.class

# Mobile Tools for Java (J2ME)
.mtj.tmp/


# generated files
bin/
obj
obj/local
gen/
bin/dexedLibs
bin/res
bin/*.xml
bin/classes
bin/res
bin/jarlist.cache
*.cache

# Local configuration file (sdk path, etc)
local.properties

# Eclipse project files
.classpath
.project

# Proguard folder generated by Eclipse
proguard/

# Intellij project files
*.iml
*.ipr
*.iws

# Gradle
.gradle/
.gradle
build/
build

# gedit
*~

.idea/*.xml
!.idea/codeStyleSettings.xml
!.idea/copyright/*.xml
!.idea/fileColors.xml
!.idea/encodings.xml
!.idea/gradle.xml
!.idea/runConfigurations/*.xml

!.idea/inspectionProfiles/*.xml
.idea/inspectionProfiles/profiles_settings.xml

!.idea/scopes/*.xml
.idea/scopes/scope_settings.xml

!.idea/templateLanguages.xml
!.idea/vcs.xml
profiles_settings.xml
.idea/libraries
libuvccamera/src/main/libs
.idea/copyright
.idea/scopes
.idea/caches
.idea/codeStyles


================================================
FILE: .idea/encodings.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="Encoding">
    <file url="PROJECT" charset="UTF-8" />
  </component>
</project>

================================================
FILE: .idea/gradle.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="GradleSettings">
    <option name="linkedExternalProjectsSettings">
      <GradleProjectSettings>
        <option name="distributionType" value="DEFAULT_WRAPPED" />
        <option name="externalProjectPath" value="$PROJECT_DIR$" />
        <option name="gradleHome" value="$APPLICATION_HOME_DIR$/gradle/gradle-2.14.1" />
        <option name="modules">
          <set>
            <option value="$PROJECT_DIR$" />
            <option value="$PROJECT_DIR$/libuvccamera" />
            <option value="$PROJECT_DIR$/usbCameraCommon" />
            <option value="$PROJECT_DIR$/usbCameraTest" />
            <option value="$PROJECT_DIR$/usbCameraTest0" />
            <option value="$PROJECT_DIR$/usbCameraTest2" />
            <option value="$PROJECT_DIR$/usbCameraTest3" />
            <option value="$PROJECT_DIR$/usbCameraTest4" />
            <option value="$PROJECT_DIR$/usbCameraTest5" />
            <option value="$PROJECT_DIR$/usbCameraTest6" />
            <option value="$PROJECT_DIR$/usbCameraTest7" />
            <option value="$PROJECT_DIR$/usbCameraTest8" />
          </set>
        </option>
        <option name="resolveModulePerSourceSet" value="false" />
      </GradleProjectSettings>
    </option>
  </component>
</project>

================================================
FILE: .idea/inspectionProfiles/Project_Default.xml
================================================
<component name="InspectionProjectProfileManager">
  <profile version="1.0">
    <option name="myName" value="Project Default" />
    <inspection_tool class="Anonymous2MethodRef" enabled="false" level="WARNING" enabled_by_default="false" />
    <inspection_tool class="CanBeFinal" enabled="false" level="WARNING" enabled_by_default="false">
      <option name="REPORT_CLASSES" value="false" />
      <option name="REPORT_METHODS" value="false" />
      <option name="REPORT_FIELDS" value="true" />
    </inspection_tool>
    <inspection_tool class="CaughtExceptionImmediatelyRethrown" enabled="false" level="WARNING" enabled_by_default="false" />
    <inspection_tool class="CodeBlock2Expr" enabled="false" level="WARNING" enabled_by_default="false" />
    <inspection_tool class="ConstantConditionalExpression" enabled="false" level="WARNING" enabled_by_default="false" />
    <inspection_tool class="ConstantConditions" enabled="false" level="WARNING" enabled_by_default="false">
      <option name="SUGGEST_NULLABLE_ANNOTATIONS" value="false" />
      <option name="DONT_REPORT_TRUE_ASSERT_STATEMENTS" value="false" />
    </inspection_tool>
    <inspection_tool class="ConstantIfStatement" enabled="false" level="WARNING" enabled_by_default="false" />
    <inspection_tool class="ContinueOrBreakFromFinallyBlock" enabled="false" level="WARNING" enabled_by_default="false" />
    <inspection_tool class="Convert2Diamond" enabled="false" level="WARNING" enabled_by_default="false" />
    <inspection_tool class="Convert2Lambda" enabled="false" level="WARNING" enabled_by_default="false" />
    <inspection_tool class="Convert2MethodRef" enabled="false" level="WARNING" enabled_by_default="false" />
    <inspection_tool class="Convert2streamapi" enabled="false" level="WEAK WARNING" enabled_by_default="false" />
    <inspection_tool class="DialogTitleCapitalization" enabled="false" level="WARNING" enabled_by_default="false" />
    <inspection_tool class="EmptyCatchBlock" enabled="false" level="WARNING" enabled_by_default="false">
      <option name="m_includeComments" value="true" />
      <option name="m_ignoreTestCases" value="true" />
      <option name="m_ignoreIgnoreParameter" value="true" />
    </inspection_tool>
    <inspection_tool class="EmptyFinallyBlock" enabled="false" level="WARNING" enabled_by_default="false" />
    <inspection_tool class="EmptyMethod" enabled="false" level="WARNING" enabled_by_default="false" />
    <inspection_tool class="EmptyTryBlock" enabled="false" level="WARNING" enabled_by_default="false" />
    <inspection_tool class="FinalPrivateMethod" enabled="false" level="WARNING" enabled_by_default="false" />
    <inspection_tool class="FinalStaticMethod" enabled="false" level="WARNING" enabled_by_default="false" />
    <inspection_tool class="FinallyBlockCannotCompleteNormally" enabled="false" level="WARNING" enabled_by_default="false" />
    <inspection_tool class="ForCanBeForeach" enabled="false" level="WARNING" enabled_by_default="false">
      <option name="REPORT_INDEXED_LOOP" value="false" />
      <option name="ignoreUntypedCollections" value="false" />
    </inspection_tool>
    <inspection_tool class="IfCanBeSwitch" enabled="false" level="WARNING" enabled_by_default="false">
      <option name="minimumBranches" value="3" />
      <option name="suggestIntSwitches" value="false" />
      <option name="suggestEnumSwitches" value="false" />
    </inspection_tool>
    <inspection_tool class="InfiniteLoopStatement" enabled="false" level="WARNING" enabled_by_default="false" />
    <inspection_tool class="JavaDoc" enabled="false" level="WARNING" enabled_by_default="false">
      <option name="TOP_LEVEL_CLASS_OPTIONS">
        <value>
          <option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
          <option name="REQUIRED_TAGS" value="" />
        </value>
      </option>
      <option name="INNER_CLASS_OPTIONS">
        <value>
          <option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
          <option name="REQUIRED_TAGS" value="" />
        </value>
      </option>
      <option name="METHOD_OPTIONS">
        <value>
          <option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
          <option name="REQUIRED_TAGS" value="@return@param@throws or @exception" />
        </value>
      </option>
      <option name="FIELD_OPTIONS">
        <value>
          <option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
          <option name="REQUIRED_TAGS" value="" />
        </value>
      </option>
      <option name="IGNORE_DEPRECATED" value="false" />
      <option name="IGNORE_JAVADOC_PERIOD" value="true" />
      <option name="IGNORE_DUPLICATED_THROWS" value="false" />
      <option name="IGNORE_POINT_TO_ITSELF" value="false" />
      <option name="myAdditionalJavadocTags" value="" />
    </inspection_tool>
    <inspection_tool class="JniMissingFunction" enabled="false" level="ERROR" enabled_by_default="false" />
    <inspection_tool class="LoggerInitializedWithForeignClass" enabled="false" level="WARNING" enabled_by_default="false">
      <option name="loggerClassName" value="org.apache.log4j.Logger,org.slf4j.LoggerFactory,org.apache.commons.logging.LogFactory,java.util.logging.Logger" />
      <option name="loggerFactoryMethodName" value="getLogger,getLogger,getLog,getLogger" />
    </inspection_tool>
    <inspection_tool class="LoopStatementsThatDontLoop" enabled="false" level="WARNING" enabled_by_default="false" />
    <inspection_tool class="ReturnFromFinallyBlock" enabled="false" level="WARNING" enabled_by_default="false" />
    <inspection_tool class="SafeVarargsDetector" enabled="false" level="WARNING" enabled_by_default="false" />
    <inspection_tool class="ThrowFromFinallyBlock" enabled="false" level="WARNING" enabled_by_default="false" />
    <inspection_tool class="TryFinallyCanBeTryWithResources" enabled="false" level="WARNING" enabled_by_default="false" />
    <inspection_tool class="TryWithIdenticalCatches" enabled="false" level="WARNING" enabled_by_default="false" />
    <inspection_tool class="UnnecessaryEnumModifier" enabled="false" level="WARNING" enabled_by_default="false" />
    <inspection_tool class="UnnecessaryInterfaceModifier" enabled="false" level="WARNING" enabled_by_default="false" />
    <inspection_tool class="UnnecessaryLabelOnBreakStatement" enabled="false" level="WARNING" enabled_by_default="false" />
    <inspection_tool class="UnnecessaryLabelOnContinueStatement" enabled="false" level="WARNING" enabled_by_default="false" />
    <inspection_tool class="UnnecessaryLocalVariable" enabled="false" level="WARNING" enabled_by_default="false">
      <option name="m_ignoreImmediatelyReturnedVariables" value="false" />
      <option name="m_ignoreAnnotatedVariables" value="false" />
    </inspection_tool>
    <inspection_tool class="UnnecessaryModuleDependencyInspection" enabled="false" level="WARNING" enabled_by_default="false" />
    <inspection_tool class="UnusedLabel" enabled="false" level="WARNING" enabled_by_default="false" />
    <inspection_tool class="UnusedParameters" enabled="false" level="WARNING" enabled_by_default="false" />
    <inspection_tool class="UnusedReturnValue" enabled="false" level="WARNING" enabled_by_default="false" />
    <inspection_tool class="WeakerAccess" enabled="false" level="WARNING" enabled_by_default="false">
      <option name="SUGGEST_PACKAGE_LOCAL_FOR_MEMBERS" value="true" />
      <option name="SUGGEST_PACKAGE_LOCAL_FOR_TOP_CLASSES" value="true" />
      <option name="SUGGEST_PRIVATE_FOR_INNERS" value="false" />
    </inspection_tool>
    <inspection_tool class="WhileCanBeForeach" enabled="false" level="WARNING" enabled_by_default="false" />
    <inspection_tool class="unused" enabled="false" level="WARNING" enabled_by_default="false">
      <option name="LOCAL_VARIABLE" value="true" />
      <option name="FIELD" value="true" />
      <option name="METHOD" value="true" />
      <option name="CLASS" value="true" />
      <option name="PARAMETER" value="true" />
      <option name="REPORT_PARAMETER_FOR_PUBLIC_METHODS" value="true" />
      <option name="ADD_MAINS_TO_ENTRIES" value="true" />
      <option name="ADD_APPLET_TO_ENTRIES" value="true" />
      <option name="ADD_SERVLET_TO_ENTRIES" value="true" />
      <option name="ADD_NONJAVA_TO_ENTRIES" value="true" />
    </inspection_tool>
  </profile>
</component>

================================================
FILE: .idea/vcs.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="VcsDirectoryMappings">
    <mapping directory="" vcs="Git" />
  </component>
</project>

================================================
FILE: README.md
================================================
UVCCamera
=========

library and sample to access to UVC web camera on non-rooted Android device

Copyright (c) 2014-2017 saki t_saki@serenegiant.com

 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.

All files in the folder are under this Apache License, Version 2.0.
Files in the jni/libjpeg, jni/libusb and jin/libuvc folders may have a different license,
see the respective files.

How to compile library  
=========
The Gradle build system will build the entire project, including the NDK parts. If you want to build with Gradle build system,

1. make directory on your favorite place (this directory is parent directory of `UVCCamera` project).
2. change directory into the directory.
3. clone this repository with `git  clone https://github.com/saki4510t/UVCCamera.git`
4. change directory into `UVCCamera` directory with `cd UVCCamera`
5. build library with all sample projects using `gradle build`

It will takes several minutes to build. Now you can see apks in each `{sample project}/build/outputs/apks` directory.  
Or if you want to install and try all sample projects on your device, run `gradle installDebug`.  

Note: Just make sure that `local.properties` contains the paths for `sdk.dir` and `ndk.dir`. Or you can set them as enviroment variables of you shell. On some system, you may need add `JAVA_HOME` envairoment valiable that points to JDK directory.  

If you want to use Android Studio(unfortunately NDK supporting on Android Studio is very poor though),
1. make directory on your favorite place (this directory is parent directory of `UVCCamera` project).
2. change directory into the directory.
3. clone this repository with `git  clone https://github.com/saki4510t/UVCCamera.git`
4. start Android Studio and open the cloned repository using `Open an existing Android Studio project`
5. Android Studio raise some errors but just ignore now. Android Studio generate `local.properties` file. Please open `local.properties` and add `ndk.dir` key to the end of the file. The contents of the file looks like this.
```
sdk.dir={path to Android SDK on your storage}
ndk.dir={path to Android SDK on your storage}
```
Please replace actual path to SDK and NDK on your storage.  
Of course you can make `local.properties` by manually instead of using automatically generated ones by Android Studio.
6. Synchronize project
7. execute `Make project` from `Build` menu.

If you want to use build-in VCS on Android Studio, use `Check out project from Version Control` from `https://github.com/saki4510t/UVCCamera.git`. After cloning, Android Studio ask you open the project but don't open now. Instead open the project using `Open an existing Android Studio project`. Other procedures are same as above.

If you still need to use Eclipse or if you don't want to use Gradle with some reason, you can build suing `ndk-build` command.

1. make directory on your favorite place.
2. change directory into the directory.
3. clone this repository with `git  clone https://github.com/saki4510t/UVCCamera.git`
4. change directory into `{UVCCamera}/libuvccamera/build/src/main/jni` directory.
5. run `ndk-build`
6. resulted shared libraries are available under `{UVCCamera}/libuvccamera/build/src/main/libs` directory and copy them into your project with directories by manually.
7. copy files under `{UVCCamera}/libuvccamera/build/src/main/java` into your project source directory by manually.

How to use
=========
Please see sample project and/or our web site(but sorry web site is Japanese only).
These sample projects are IntelliJ projects, as is the library.
This library works on at least Android 3.1 or later(API >= 12), but Android 4.0(API >= 14)
or later is better. USB host function must be required.
If you want to try on Android 3.1, you will need some modification(need to remove
setPreviewTexture method in UVCCamera.java etc.), but we have not confirm whether the sample
project run on Android 3.1 yet.
Some sample projects need API>=18 though.

### 2014/07/25
Add some modification to the library and new sample project named "USBCameraTest2".
This new sample project demonstrate how to capture movie using frame data from
UVC camera with MediaCodec and MediaMuxer.
New sample requires at least Android 4.3(API>=18).
This limitation does not come from the library itself but from the limitation of
MediaMuxer and MediaCodec#createInputSurface.

### 2014/09/01
Add new sample project named `USBCameraTest3`
This new sample project demonstrate how to capture audio and movie simultaneously
using frame data from UVC camera and internal mic with MediaCodec and MediaMuxer.
This new sample includes still image capturing as png file.(you can easily change to
save as jpeg) This sample also requires at least Android 4.3(API>=18).
This limitation does not come from the library itself but from the limitation of
MediaMuxer and MediaCodec#createInputSurface.

### 2014/11/16
Add new sample project named `USBCameraTest4`
This new sample project mainly demonstrate how to use offscreen rendering
and record movie without any display.
The communication with camera execute as Service and continue working
even if you stop app. If you stop camera communication, click "stop service" button.

### 2014/12/17
Add bulk transfer mode and update sample projects.

### 2015/01/12
Add wiki page, [HowTo](https://github.com/saki4510t/UVCCamera/wiki/howto "HowTo")

### 2015/01/22
Add method to adjust preview resolution and frame data mode.

### 2015/02/12
Add IFrameCallback interface to get frame data as ByteArray
and new sample project `USBCameraTest5` to demonstrate how to use the callback method.

### 2015/02/18
Add `libUVCCamera` as a library project(source code is almost same as previous release except Android.mk).
All files and directories under `library` directory is deprecated.

### 2015/05/25
libraryProject branch merged to master.

### 2015/05/30
Fixed the issue that DeviceFilter class could not work well when providing venderID, productID etc.

### 2015/06/03
Add new sample project named `USBCameraTest6`
This new sample project mainly demonstrate how to show video images on two TextureView simultaneously, side by side.

### 2015/06/10
Fixed the issue of pixel format is wrong when NV21 mode on calling IFrameCallback#onFrame(U and V plane was swapped) and added YUV420SP mode.

### 2015/06/11
Improve the issue of `USBCameraTest4` that fails to connect/disconnect.

### 2015/07/19
Add new methods to get/set camera features like brightness, contrast etc.  
Add new method to get supported resolution from camera as json format.  

### 2015/08/17
Add new sample project `USBCameraTest7` to demonstrate how to use two camera at the same time.  

### 2015/09/20
Fixed the issue that building native libraries fail on Windows.

### 2015/10/30
Merge pull request(add status and button callback). Thanks Alexey Pelykh.

### 2015/12/16
Add feature so that user can request fps range from Java code when negotiating with camera. Actual resulted fps depends on each UVC camera. Currently there is no way to get resulted fps(will add on future).

### 2016/03/01
update minoru001 branch, experimentaly support streo camera.

### 2016/06/18
replace libjpeg-turbo 1.4.0 with 1.5.0

### 2016/11/17
apply bandwidth factor setting of usbcameratest7 on master branch

### 2016/11/21
Now this repository supports Android N(7.x) and dynamic permission model of Android N and later.

### 2017/01/16
Add new sample app `usbCameraTest8` to show how to set/get uvc control like brightness 

### 2017/04/17
Add new sample app on [OpenCVwithUVC](https://github.com/saki4510t/OpenCVwithUVC.git) repository.
This shows the way to pass video images from UVC into `cv::Mat` (after optional applying video effect by OpenGL|ES) and execute image processing by `OpenCV`.


================================================
FILE: build.gradle
================================================
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
//		google()
		maven { url 'https://maven.google.com' }
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.4'
    }
}

allprojects {
    repositories {
//    	google()
		maven { url 'https://maven.google.com' }
		jcenter()
		maven { url 'http://raw.github.com/saki4510t/libcommon/master/repository/' }
    }
}

task clean(type: Delete) {
	delete rootProject.buildDir
}

ext {
	supportLibVersion = '27.1.1'  // variable that can be referenced to keep support libs consistent
	commonLibVersion= '2.12.4'
	versionBuildTool = '27.0.3'
	versionCompiler = 27
	versionTarget = 27
	versionNameString = '1.0.0'
	javaSourceCompatibility = JavaVersion.VERSION_1_8
	javaTargetCompatibility = JavaVersion.VERSION_1_8
}


================================================
FILE: gradle/wrapper/gradle-wrapper.properties
================================================
#Tue Oct 02 16:16:11 JST 2018
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip


================================================
FILE: gradle.properties
================================================
# Project-wide Gradle settings.

# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.

# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html

# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx10248m -XX:MaxPermSize=256m
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
org.gradle.parallel=true

================================================
FILE: gradlew
================================================
#!/usr/bin/env bash

##############################################################################
##
##  Gradle start up script for UN*X
##
##############################################################################

# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""

APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`

# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"

warn ( ) {
    echo "$*"
}

die ( ) {
    echo
    echo "$*"
    echo
    exit 1
}

# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
case "`uname`" in
  CYGWIN* )
    cygwin=true
    ;;
  Darwin* )
    darwin=true
    ;;
  MINGW* )
    msys=true
    ;;
esac

# For Cygwin, ensure paths are in UNIX format before anything is touched.
if $cygwin ; then
    [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
fi

# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
    ls=`ls -ld "$PRG"`
    link=`expr "$ls" : '.*-> \(.*\)$'`
    if expr "$link" : '/.*' > /dev/null; then
        PRG="$link"
    else
        PRG=`dirname "$PRG"`"/$link"
    fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >&-
APP_HOME="`pwd -P`"
cd "$SAVED" >&-

CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar

# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
        # IBM's JDK on AIX uses strange locations for the executables
        JAVACMD="$JAVA_HOME/jre/sh/java"
    else
        JAVACMD="$JAVA_HOME/bin/java"
    fi
    if [ ! -x "$JAVACMD" ] ; then
        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
    fi
else
    JAVACMD="java"
    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi

# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
    MAX_FD_LIMIT=`ulimit -H -n`
    if [ $? -eq 0 ] ; then
        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
            MAX_FD="$MAX_FD_LIMIT"
        fi
        ulimit -n $MAX_FD
        if [ $? -ne 0 ] ; then
            warn "Could not set maximum file descriptor limit: $MAX_FD"
        fi
    else
        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
    fi
fi

# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi

# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`

    # We build the pattern for arguments to be converted via cygpath
    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
    SEP=""
    for dir in $ROOTDIRSRAW ; do
        ROOTDIRS="$ROOTDIRS$SEP$dir"
        SEP="|"
    done
    OURCYGPATTERN="(^($ROOTDIRS))"
    # Add a user-defined pattern to the cygpath arguments
    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
    fi
    # Now convert the arguments - kludge to limit ourselves to /bin/sh
    i=0
    for arg in "$@" ; do
        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option

        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
        else
            eval `echo args$i`="\"$arg\""
        fi
        i=$((i+1))
    done
    case $i in
        (0) set -- ;;
        (1) set -- "$args0" ;;
        (2) set -- "$args0" "$args1" ;;
        (3) set -- "$args0" "$args1" "$args2" ;;
        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
    esac
fi

# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
function splitJvmOpts() {
    JVM_OPTS=("$@")
}
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"

exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"


================================================
FILE: gradlew.bat
================================================
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem  Gradle startup script for Windows
@rem
@rem ##########################################################################

@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal

@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=

set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%

@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome

set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init

echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.

goto fail

:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe

if exist "%JAVA_EXE%" goto init

echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.

goto fail

:init
@rem Get command-line arguments, handling Windowz variants

if not "%OS%" == "Windows_NT" goto win9xME_args
if "%@eval[2+2]" == "4" goto 4NT_args

:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2

:win9xME_args_slurp
if "x%~1" == "x" goto execute

set CMD_LINE_ARGS=%*
goto execute

:4NT_args
@rem Get arguments from the 4NT Shell from JP Software
set CMD_LINE_ARGS=%$

:execute
@rem Setup the command line

set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar

@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%

:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd

:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1

:mainEnd
if "%OS%"=="Windows_NT" endlocal

:omega


================================================
FILE: libuvccamera/build.gradle
================================================
apply plugin: 'com.android.library'
/*
 *  UVCCamera
 *  library and sample to access to UVC web camera on non-rooted Android device
 *
 * Copyright (c) 2014-2017 saki t_saki@serenegiant.com
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 *
 *  All files in the folder are under this Apache License, Version 2.0.
 *  Files in the libjpeg-turbo, libusb, libuvc, rapidjson folder
 *  may have a different license, see the respective files.
 */

import org.apache.tools.ant.taskdefs.condition.Os

android {
	compileSdkVersion versionCompiler
	buildToolsVersion versionBuildTool

	compileOptions {
		sourceCompatibility javaSourceCompatibility
		targetCompatibility javaTargetCompatibility
	}

    defaultConfig {
        minSdkVersion 14
		targetSdkVersion versionTarget
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
	sourceSets {
		main {
			jniLibs.srcDir 'src/main/libs'
			jni.srcDirs = []
		}
	}
}

tasks.withType(JavaCompile) {
	compileTask -> compileTask.dependsOn ndkBuild
}

String getNdkBuildPath() {
	Properties properties = new Properties()
	properties.load(project.rootProject.file('local.properties').newDataInputStream())
	def ndkBuildingDir = properties.getProperty("ndk.dir")
	def ndkBuildPath = ndkBuildingDir
	if (Os.isFamily(Os.FAMILY_WINDOWS)) {
		ndkBuildPath = ndkBuildingDir + '/ndk-build.cmd'
	} else {
		ndkBuildPath = ndkBuildingDir + '/ndk-build'
	}
	return ndkBuildPath
}

task ndkBuild(type: Exec, description: 'Compile JNI source via NDK') {
	println('executing ndkBuild')
	def ndkBuildPath = getNdkBuildPath();
	commandLine ndkBuildPath, '-j8', '-C', file('src/main').absolutePath
}

task ndkClean(type: Exec, description: 'clean JNI libraries') {
	println('executing ndkBuild clean')
	def ndkBuildPath = getNdkBuildPath();
	commandLine ndkBuildPath, 'clean', '-C', file('src/main').absolutePath
}

clean.dependsOn 'ndkClean'

dependencies {
    implementation fileTree(dir: new File(buildDir, 'libs'), include: '*.jar')

	implementation "com.android.support:support-v4:${supportLibVersion}"
	implementation "com.android.support:support-annotations:${supportLibVersion}"

	implementation("com.serenegiant:common:${commonLibVersion}") {
		exclude module: 'support-v4'
	}
}


================================================
FILE: libuvccamera/src/main/AndroidManifest.xml
================================================
<!--
  ~  UVCCamera
  ~  library and sample to access to UVC web camera on non-rooted Android device
  ~
  ~ Copyright (c) 2014-2017 saki t_saki@serenegiant.com
  ~
  ~  Licensed under the Apache License, Version 2.0 (the "License");
  ~  you may not use this file except in compliance with the License.
  ~   You may obtain a copy of the License at
  ~
  ~      http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~   Unless required by applicable law or agreed to in writing, software
  ~   distributed under the License is distributed on an "AS IS" BASIS,
  ~   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~   See the License for the specific language governing permissions and
  ~   limitations under the License.
  ~
  ~  All files in the folder are under this Apache License, Version 2.0.
  ~  Files in the libjpeg-turbo, libusb, libuvc, rapidjson folder
  ~  may have a different license, see the respective files.
  -->

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.serenegiant.uvccamera"
    android:versionCode="2"
    android:versionName="1.1" >

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="22" />

</manifest>


================================================
FILE: libuvccamera/src/main/java/com/serenegiant/common/BaseActivity.java
================================================
/*
 *  UVCCamera
 *  library and sample to access to UVC web camera on non-rooted Android device
 *
 * Copyright (c) 2014-2017 saki t_saki@serenegiant.com
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 *
 *  All files in the folder are under this Apache License, Version 2.0.
 *  Files in the libjpeg-turbo, libusb, libuvc, rapidjson folder
 *  may have a different license, see the respective files.
 */

package com.serenegiant.common;

import android.Manifest;
import android.annotation.SuppressLint;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.support.annotation.NonNull;
import android.support.annotation.StringRes;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.Toast;

import com.serenegiant.dialog.MessageDialogFragmentV4;
import com.serenegiant.utils.BuildCheck;
import com.serenegiant.utils.HandlerThreadHandler;
import com.serenegiant.utils.PermissionCheck;

/**
 * Created by saki on 2016/11/18.
 *
 */
public class BaseActivity extends AppCompatActivity
	implements MessageDialogFragmentV4.MessageDialogListener {

	private static boolean DEBUG = false;	// FIXME 実働時はfalseにセットすること
	private static final String TAG = BaseActivity.class.getSimpleName();

	/** UI操作のためのHandler */
	private final Handler mUIHandler = new Handler(Looper.getMainLooper());
	private final Thread mUiThread = mUIHandler.getLooper().getThread();
	/** ワーカースレッド上で処理するためのHandler */
	private Handler mWorkerHandler;
	private long mWorkerThreadID = -1;

	@Override
	protected void onCreate(final Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// ワーカースレッドを生成
		if (mWorkerHandler == null) {
			mWorkerHandler = HandlerThreadHandler.createHandler(TAG);
			mWorkerThreadID = mWorkerHandler.getLooper().getThread().getId();
		}
	}

	@Override
	protected void onPause() {
		clearToast();
		super.onPause();
	}

	@Override
	protected synchronized void onDestroy() {
		// ワーカースレッドを破棄
		if (mWorkerHandler != null) {
			try {
				mWorkerHandler.getLooper().quit();
			} catch (final Exception e) {
				//
			}
			mWorkerHandler = null;
		}
		super.onDestroy();
	}

//================================================================================
	/**
	 * UIスレッドでRunnableを実行するためのヘルパーメソッド
	 * @param task
	 * @param duration
	 */
	public final void runOnUiThread(final Runnable task, final long duration) {
		if (task == null) return;
		mUIHandler.removeCallbacks(task);
		if ((duration > 0) || Thread.currentThread() != mUiThread) {
			mUIHandler.postDelayed(task, duration);
		} else {
			try {
				task.run();
			} catch (final Exception e) {
				Log.w(TAG, e);
			}
		}
	}

	/**
	 * UIスレッド上で指定したRunnableが実行待ちしていれば実行待ちを解除する
	 * @param task
	 */
	public final void removeFromUiThread(final Runnable task) {
		if (task == null) return;
		mUIHandler.removeCallbacks(task);
	}

	/**
	 * ワーカースレッド上で指定したRunnableを実行する
	 * 未実行の同じRunnableがあればキャンセルされる(後から指定した方のみ実行される)
	 * @param task
	 * @param delayMillis
	 */
	protected final synchronized void queueEvent(final Runnable task, final long delayMillis) {
		if ((task == null) || (mWorkerHandler == null)) return;
		try {
			mWorkerHandler.removeCallbacks(task);
			if (delayMillis > 0) {
				mWorkerHandler.postDelayed(task, delayMillis);
			} else if (mWorkerThreadID == Thread.currentThread().getId()) {
				task.run();
			} else {
				mWorkerHandler.post(task);
			}
		} catch (final Exception e) {
			// ignore
		}
	}

	/**
	 * 指定したRunnableをワーカースレッド上で実行予定であればキャンセルする
	 * @param task
	 */
	protected final synchronized void removeEvent(final Runnable task) {
		if (task == null) return;
		try {
			mWorkerHandler.removeCallbacks(task);
		} catch (final Exception e) {
			// ignore
		}
	}

//================================================================================
	private Toast mToast;
	/**
	 * Toastでメッセージを表示
	 * @param msg
	 */
	protected void showToast(@StringRes final int msg, final Object... args) {
		removeFromUiThread(mShowToastTask);
		mShowToastTask = new ShowToastTask(msg, args);
		runOnUiThread(mShowToastTask, 0);
	}

	/**
	 * Toastが表示されていればキャンセルする
	 */
	protected void clearToast() {
		removeFromUiThread(mShowToastTask);
		mShowToastTask = null;
		try {
			if (mToast != null) {
				mToast.cancel();
				mToast = null;
			}
		} catch (final Exception e) {
			// ignore
		}
	}

	private ShowToastTask mShowToastTask;
	private final class ShowToastTask implements Runnable {
		final int msg;
		final Object args;
		private ShowToastTask(@StringRes final int msg, final Object... args) {
			this.msg = msg;
			this.args = args;
		}

		@Override
		public void run() {
			try {
				if (mToast != null) {
					mToast.cancel();
					mToast = null;
				}
				final String _msg = (args != null) ? getString(msg, args) : getString(msg);
				mToast = Toast.makeText(BaseActivity.this, _msg, Toast.LENGTH_SHORT);
				mToast.show();
			} catch (final Exception e) {
				// ignore
			}
		}
	}

//================================================================================
	/**
	 * MessageDialogFragmentメッセージダイアログからのコールバックリスナー
	 * @param dialog
	 * @param requestCode
	 * @param permissions
	 * @param result
	 */
	@SuppressLint("NewApi")
	@Override
	public void onMessageDialogResult(final MessageDialogFragmentV4 dialog, final int requestCode, final String[] permissions, final boolean result) {
		if (result) {
			// メッセージダイアログでOKを押された時はパーミッション要求する
			if (BuildCheck.isMarshmallow()) {
				requestPermissions(permissions, requestCode);
				return;
			}
		}
		// メッセージダイアログでキャンセルされた時とAndroid6でない時は自前でチェックして#checkPermissionResultを呼び出す
		for (final String permission: permissions) {
			checkPermissionResult(requestCode, permission, PermissionCheck.hasPermission(this, permission));
		}
	}

	/**
	 * パーミッション要求結果を受け取るためのメソッド
	 * @param requestCode
	 * @param permissions
	 * @param grantResults
	 */
	@Override
	public void onRequestPermissionsResult(final int requestCode, @NonNull final String[] permissions, @NonNull final int[] grantResults) {
		super.onRequestPermissionsResult(requestCode, permissions, grantResults);	// 何もしてないけど一応呼んどく
		final int n = Math.min(permissions.length, grantResults.length);
		for (int i = 0; i < n; i++) {
			checkPermissionResult(requestCode, permissions[i], grantResults[i] == PackageManager.PERMISSION_GRANTED);
		}
	}

	/**
	 * パーミッション要求の結果をチェック
	 * ここではパーミッションを取得できなかった時にToastでメッセージ表示するだけ
	 * @param requestCode
	 * @param permission
	 * @param result
	 */
	protected void checkPermissionResult(final int requestCode, final String permission, final boolean result) {
		// パーミッションがないときにはメッセージを表示する
		if (!result && (permission != null)) {
			if (Manifest.permission.RECORD_AUDIO.equals(permission)) {
				showToast(R.string.permission_audio);
			}
			if (Manifest.permission.WRITE_EXTERNAL_STORAGE.equals(permission)) {
				showToast(R.string.permission_ext_storage);
			}
			if (Manifest.permission.INTERNET.equals(permission)) {
				showToast(R.string.permission_network);
			}
		}
	}

	// 動的パーミッション要求時の要求コード
	protected static final int REQUEST_PERMISSION_WRITE_EXTERNAL_STORAGE = 0x12345;
	protected static final int REQUEST_PERMISSION_AUDIO_RECORDING = 0x234567;
	protected static final int REQUEST_PERMISSION_NETWORK = 0x345678;
	protected static final int REQUEST_PERMISSION_CAMERA = 0x537642;

	/**
	 * 外部ストレージへの書き込みパーミッションが有るかどうかをチェック
	 * なければ説明ダイアログを表示する
	 * @return true 外部ストレージへの書き込みパーミッションが有る
	 */
	protected boolean checkPermissionWriteExternalStorage() {
		if (!PermissionCheck.hasWriteExternalStorage(this)) {
			MessageDialogFragmentV4.showDialog(this, REQUEST_PERMISSION_WRITE_EXTERNAL_STORAGE,
				R.string.permission_title, R.string.permission_ext_storage_request,
				new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE});
			return false;
		}
		return true;
	}

	/**
	 * 録音のパーミッションが有るかどうかをチェック
	 * なければ説明ダイアログを表示する
	 * @return true 録音のパーミッションが有る
	 */
	protected boolean checkPermissionAudio() {
		if (!PermissionCheck.hasAudio(this)) {
			MessageDialogFragmentV4.showDialog(this, REQUEST_PERMISSION_AUDIO_RECORDING,
				R.string.permission_title, R.string.permission_audio_recording_request,
				new String[]{Manifest.permission.RECORD_AUDIO});
			return false;
		}
		return true;
	}

	/**
	 * ネットワークアクセスのパーミッションが有るかどうかをチェック
	 * なければ説明ダイアログを表示する
	 * @return true ネットワークアクセスのパーミッションが有る
	 */
	protected boolean checkPermissionNetwork() {
		if (!PermissionCheck.hasNetwork(this)) {
			MessageDialogFragmentV4.showDialog(this, REQUEST_PERMISSION_NETWORK,
				R.string.permission_title, R.string.permission_network_request,
				new String[]{Manifest.permission.INTERNET});
			return false;
		}
		return true;
	}

	/**
	 * カメラアクセスのパーミッションがあるかどうかをチェック
	 * なければ説明ダイアログを表示する
	 * @return true カメラアクセスのパーミッションが有る
	 */
	protected boolean checkPermissionCamera() {
		if (!PermissionCheck.hasCamera(this)) {
			MessageDialogFragmentV4.showDialog(this, REQUEST_PERMISSION_CAMERA,
				R.string.permission_title, R.string.permission_camera_request,
				new String[]{Manifest.permission.CAMERA});
			return false;
		}
		return true;
	}

}


================================================
FILE: libuvccamera/src/main/java/com/serenegiant/common/BaseFragment.java
================================================
/*
 *  UVCCamera
 *  library and sample to access to UVC web camera on non-rooted Android device
 *
 * Copyright (c) 2014-2017 saki t_saki@serenegiant.com
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 *
 *  All files in the folder are under this Apache License, Version 2.0.
 *  Files in the libjpeg-turbo, libusb, libuvc, rapidjson folder
 *  may have a different license, see the respective files.
 */

package com.serenegiant.common;

import android.Manifest;
import android.annotation.SuppressLint;
import android.app.Fragment;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.support.annotation.NonNull;
import android.support.annotation.StringRes;
import android.util.Log;
import android.widget.Toast;

import com.serenegiant.dialog.MessageDialogFragment;
import com.serenegiant.utils.BuildCheck;
import com.serenegiant.utils.HandlerThreadHandler;
import com.serenegiant.utils.PermissionCheck;

/**
 * Created by saki on 2016/11/19.
 *
 */
public class BaseFragment extends Fragment
	implements MessageDialogFragment.MessageDialogListener {

	private static boolean DEBUG = false;	// FIXME 実働時はfalseにセットすること
	private static final String TAG = BaseFragment.class.getSimpleName();

	/** UI操作のためのHandler */
	private final Handler mUIHandler = new Handler(Looper.getMainLooper());
	private final Thread mUiThread = mUIHandler.getLooper().getThread();
	/** ワーカースレッド上で処理するためのHandler */
	private Handler mWorkerHandler;
	private long mWorkerThreadID = -1;

	public BaseFragment() {
		super();
	}

	@Override
	public void onCreate(final Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// ワーカースレッドを生成
		if (mWorkerHandler == null) {
			mWorkerHandler = HandlerThreadHandler.createHandler(TAG);
			mWorkerThreadID = mWorkerHandler.getLooper().getThread().getId();
		}
	}

	@Override
	public void onPause() {
		clearToast();
		super.onPause();
	}

	@Override
	public synchronized void onDestroy() {
		// ワーカースレッドを破棄
		if (mWorkerHandler != null) {
			try {
				mWorkerHandler.getLooper().quit();
			} catch (final Exception e) {
				//
			}
			mWorkerHandler = null;
		}
		super.onDestroy();
	}

//================================================================================
	/**
	 * UIスレッドでRunnableを実行するためのヘルパーメソッド
	 * @param task
	 * @param duration
	 */
	public final void runOnUiThread(final Runnable task, final long duration) {
		if (task == null) return;
		mUIHandler.removeCallbacks(task);
		if ((duration > 0) || Thread.currentThread() != mUiThread) {
			mUIHandler.postDelayed(task, duration);
		} else {
			try {
				task.run();
			} catch (final Exception e) {
				Log.w(TAG, e);
			}
		}
	}

	/**
	 * UIスレッド上で指定したRunnableが実行待ちしていれば実行待ちを解除する
	 * @param task
	 */
	public final void removeFromUiThread(final Runnable task) {
		if (task == null) return;
		mUIHandler.removeCallbacks(task);
	}

	/**
	 * ワーカースレッド上で指定したRunnableを実行する
	 * 未実行の同じRunnableがあればキャンセルされる(後から指定した方のみ実行される)
	 * @param task
	 * @param delayMillis
	 */
	protected final synchronized void queueEvent(final Runnable task, final long delayMillis) {
		if ((task == null) || (mWorkerHandler == null)) return;
		try {
			mWorkerHandler.removeCallbacks(task);
			if (delayMillis > 0) {
				mWorkerHandler.postDelayed(task, delayMillis);
			} else if (mWorkerThreadID == Thread.currentThread().getId()) {
				task.run();
			} else {
				mWorkerHandler.post(task);
			}
		} catch (final Exception e) {
			// ignore
		}
	}

	/**
	 * 指定したRunnableをワーカースレッド上で実行予定であればキャンセルする
	 * @param task
	 */
	protected final synchronized void removeEvent(final Runnable task) {
		if (task == null) return;
		try {
			mWorkerHandler.removeCallbacks(task);
		} catch (final Exception e) {
			// ignore
		}
	}

//================================================================================
	private Toast mToast;
	/**
	 * Toastでメッセージを表示
	 * @param msg
	 */
	protected void showToast(@StringRes final int msg, final Object... args) {
		removeFromUiThread(mShowToastTask);
		mShowToastTask = new ShowToastTask(msg, args);
		runOnUiThread(mShowToastTask, 0);
	}

	/**
	 * Toastが表示されていればキャンセルする
	 */
	protected void clearToast() {
		removeFromUiThread(mShowToastTask);
		mShowToastTask = null;
		try {
			if (mToast != null) {
				mToast.cancel();
				mToast = null;
			}
		} catch (final Exception e) {
			// ignore
		}
	}

	private ShowToastTask mShowToastTask;
	private final class ShowToastTask implements Runnable {
		final int msg;
		final Object args;
		private ShowToastTask(@StringRes final int msg, final Object... args) {
			this.msg = msg;
			this.args = args;
		}

		@Override
		public void run() {
			try {
				if (mToast != null) {
					mToast.cancel();
					mToast = null;
				}
				if (args != null) {
					final String _msg = getString(msg, args);
					mToast = Toast.makeText(getActivity(), _msg, Toast.LENGTH_SHORT);
				} else {
					mToast = Toast.makeText(getActivity(), msg, Toast.LENGTH_SHORT);
				}
				mToast.show();
			} catch (final Exception e) {
				// ignore
			}
		}
	}

//================================================================================
	/**
	 * MessageDialogFragmentメッセージダイアログからのコールバックリスナー
	 * @param dialog
	 * @param requestCode
	 * @param permissions
	 * @param result
	 */
	@SuppressLint("NewApi")
	@Override
	public void onMessageDialogResult(final MessageDialogFragment dialog, final int requestCode, final String[] permissions, final boolean result) {
		if (result) {
			// メッセージダイアログでOKを押された時はパーミッション要求する
			if (BuildCheck.isMarshmallow()) {
				requestPermissions(permissions, requestCode);
				return;
			}
		}
		// メッセージダイアログでキャンセルされた時とAndroid6でない時は自前でチェックして#checkPermissionResultを呼び出す
		for (final String permission: permissions) {
			checkPermissionResult(requestCode, permission, PermissionCheck.hasPermission(getActivity(), permission));
		}
	}

	/**
	 * パーミッション要求結果を受け取るためのメソッド
	 * @param requestCode
	 * @param permissions
	 * @param grantResults
	 */
	@Override
	public void onRequestPermissionsResult(final int requestCode, @NonNull final String[] permissions, @NonNull final int[] grantResults) {
		super.onRequestPermissionsResult(requestCode, permissions, grantResults);	// 何もしてないけど一応呼んどく
		final int n = Math.min(permissions.length, grantResults.length);
		for (int i = 0; i < n; i++) {
			checkPermissionResult(requestCode, permissions[i], grantResults[i] == PackageManager.PERMISSION_GRANTED);
		}
	}

	/**
	 * パーミッション要求の結果をチェック
	 * ここではパーミッションを取得できなかった時にToastでメッセージ表示するだけ
	 * @param requestCode
	 * @param permission
	 * @param result
	 */
	protected void checkPermissionResult(final int requestCode, final String permission, final boolean result) {
		// パーミッションがないときにはメッセージを表示する
		if (!result && (permission != null)) {
			if (Manifest.permission.RECORD_AUDIO.equals(permission)) {
				showToast(com.serenegiant.common.R.string.permission_audio);
			}
			if (Manifest.permission.WRITE_EXTERNAL_STORAGE.equals(permission)) {
				showToast(com.serenegiant.common.R.string.permission_ext_storage);
			}
			if (Manifest.permission.INTERNET.equals(permission)) {
				showToast(com.serenegiant.common.R.string.permission_network);
			}
		}
	}

	// 動的パーミッション要求時の要求コード
	protected static final int REQUEST_PERMISSION_WRITE_EXTERNAL_STORAGE = 0x12345;
	protected static final int REQUEST_PERMISSION_AUDIO_RECORDING = 0x234567;
	protected static final int REQUEST_PERMISSION_NETWORK = 0x345678;
	protected static final int REQUEST_PERMISSION_CAMERA = 0x537642;

	/**
	 * 外部ストレージへの書き込みパーミッションが有るかどうかをチェック
	 * なければ説明ダイアログを表示する
	 * @return true 外部ストレージへの書き込みパーミッションが有る
	 */
	protected boolean checkPermissionWriteExternalStorage() {
		if (!PermissionCheck.hasWriteExternalStorage(getActivity())) {
			MessageDialogFragment.showDialog(this, REQUEST_PERMISSION_WRITE_EXTERNAL_STORAGE,
				com.serenegiant.common.R.string.permission_title, com.serenegiant.common.R.string.permission_ext_storage_request,
				new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE});
			return false;
		}
		return true;
	}

	/**
	 * 録音のパーミッションが有るかどうかをチェック
	 * なければ説明ダイアログを表示する
	 * @return true 録音のパーミッションが有る
	 */
	protected boolean checkPermissionAudio() {
		if (!PermissionCheck.hasAudio(getActivity())) {
			MessageDialogFragment.showDialog(this, REQUEST_PERMISSION_AUDIO_RECORDING,
				com.serenegiant.common.R.string.permission_title, com.serenegiant.common.R.string.permission_audio_recording_request,
				new String[]{Manifest.permission.RECORD_AUDIO});
			return false;
		}
		return true;
	}

	/**
	 * ネットワークアクセスのパーミッションが有るかどうかをチェック
	 * なければ説明ダイアログを表示する
	 * @return true ネットワークアクセスのパーミッションが有る
	 */
	protected boolean checkPermissionNetwork() {
		if (!PermissionCheck.hasNetwork(getActivity())) {
			MessageDialogFragment.showDialog(this, REQUEST_PERMISSION_NETWORK,
				com.serenegiant.common.R.string.permission_title, com.serenegiant.common.R.string.permission_network_request,
				new String[]{Manifest.permission.INTERNET});
			return false;
		}
		return true;
	}

	/**
	 * カメラアクセスのパーミッションがあるかどうかをチェック
	 * なければ説明ダイアログを表示する
	 * @return true カメラアクセスのパーミッションが有る
	 */
	protected boolean checkPermissionCamera() {
		if (!PermissionCheck.hasCamera(getActivity())) {
			MessageDialogFragment.showDialog(this, REQUEST_PERMISSION_CAMERA,
				com.serenegiant.common.R.string.permission_title, com.serenegiant.common.R.string.permission_camera_request,
				new String[]{Manifest.permission.CAMERA});
			return false;
		}
		return true;
	}
}


================================================
FILE: libuvccamera/src/main/java/com/serenegiant/common/BaseService.java
================================================
/*
 *  UVCCamera
 *  library and sample to access to UVC web camera on non-rooted Android device
 *
 * Copyright (c) 2014-2017 saki t_saki@serenegiant.com
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 *
 *  All files in the folder are under this Apache License, Version 2.0.
 *  Files in the libjpeg-turbo, libusb, libuvc, rapidjson folder
 *  may have a different license, see the respective files.
 */

package com.serenegiant.common;

import android.app.Service;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;

import com.serenegiant.utils.HandlerThreadHandler;

public abstract class BaseService extends Service {
	private static boolean DEBUG = false;	// FIXME 実働時はfalseにセットすること
	private static final String TAG = BaseService.class.getSimpleName();

	/** UI操作のためのHandler */
	private final Handler mUIHandler = new Handler(Looper.getMainLooper());
	private final Thread mUiThread = mUIHandler.getLooper().getThread();
	/** ワーカースレッド上で処理するためのHandler */
	private Handler mWorkerHandler;
	private long mWorkerThreadID = -1;

	@Override
	public void onCreate() {
		super.onCreate();
		// ワーカースレッドを生成
		if (mWorkerHandler == null) {
			mWorkerHandler = HandlerThreadHandler.createHandler(TAG);
			mWorkerThreadID = mWorkerHandler.getLooper().getThread().getId();
		}
	}

	@Override
	public synchronized void onDestroy() {
		// ワーカースレッドを破棄
		if (mWorkerHandler != null) {
			try {
				mWorkerHandler.getLooper().quit();
			} catch (final Exception e) {
				//
			}
			mWorkerHandler = null;
		}
		super.onDestroy();
	}

//================================================================================
	/**
	 * UIスレッドでRunnableを実行するためのヘルパーメソッド
	 * @param task
	 * @param duration
	 */
	public final void runOnUiThread(final Runnable task, final long duration) {
		if (task == null) return;
		mUIHandler.removeCallbacks(task);
		if ((duration > 0) || Thread.currentThread() != mUiThread) {
			mUIHandler.postDelayed(task, duration);
		} else {
			try {
				task.run();
			} catch (final Exception e) {
				Log.w(TAG, e);
			}
		}
	}

	/**
	 * UIスレッド上で指定したRunnableが実行待ちしていれば実行待ちを解除する
	 * @param task
	 */
	public final void removeFromUiThread(final Runnable task) {
		if (task == null) return;
		mUIHandler.removeCallbacks(task);
	}

	/**
	 * ワーカースレッド上で指定したRunnableを実行する
	 * 未実行の同じRunnableがあればキャンセルされる(後から指定した方のみ実行される)
	 * @param task
	 * @param delayMillis
	 */
	protected final synchronized void queueEvent(final Runnable task, final long delayMillis) {
		if ((task == null) || (mWorkerHandler == null)) return;
		try {
			mWorkerHandler.removeCallbacks(task);
			if (delayMillis > 0) {
				mWorkerHandler.postDelayed(task, delayMillis);
			} else if (mWorkerThreadID == Thread.currentThread().getId()) {
				task.run();
			} else {
				mWorkerHandler.post(task);
			}
		} catch (final Exception e) {
			// ignore
		}
	}

	/**
	 * 指定したRunnableをワーカースレッド上で実行予定であればキャンセルする
	 * @param task
	 */
	protected final synchronized void removeEvent(final Runnable task) {
		if (task == null) return;
		try {
			mWorkerHandler.removeCallbacks(task);
		} catch (final Exception e) {
			// ignore
		}
	}
}


================================================
FILE: libuvccamera/src/main/java/com/serenegiant/usb/CameraDialog.java
================================================
/*
 *  UVCCamera
 *  library and sample to access to UVC web camera on non-rooted Android device
 *
 * Copyright (c) 2014-2017 saki t_saki@serenegiant.com
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 *
 *  All files in the folder are under this Apache License, Version 2.0.
 *  Files in the libjpeg-turbo, libusb, libuvc, rapidjson folder
 *  may have a different license, see the respective files.
 */

package com.serenegiant.usb;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.Context;
import android.content.DialogInterface;
import android.hardware.usb.UsbDevice;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckedTextView;
import android.widget.Spinner;

import com.serenegiant.usb.DeviceFilter;
import com.serenegiant.usb.USBMonitor;

import com.serenegiant.uvccamera.R;

public class CameraDialog extends DialogFragment {
	private static final String TAG = CameraDialog.class.getSimpleName();

	public interface CameraDialogParent {
		public USBMonitor getUSBMonitor();
		public void onDialogResult(boolean canceled);
	}
	
	/**
	 * Helper method
	 * @param parent FragmentActivity
	 * @return
	 */
	public static CameraDialog showDialog(final Activity parent/* add parameters here if you need */) {
		CameraDialog dialog = newInstance(/* add parameters here if you need */);
		try {
			dialog.show(parent.getFragmentManager(), TAG);
		} catch (final IllegalStateException e) {
			dialog = null;
		}
    	return dialog;
	}

	public static CameraDialog newInstance(/* add parameters here if you need */) {
		final CameraDialog dialog = new CameraDialog();
		final Bundle args = new Bundle();
		// add parameters here if you need
		dialog.setArguments(args);
		return dialog;
	}

	protected USBMonitor mUSBMonitor;
	private Spinner mSpinner;
	private DeviceListAdapter mDeviceListAdapter;

	public CameraDialog(/* no arguments */) {
		// Fragment need default constructor
	}

	@SuppressWarnings("deprecation")
	@Override
	public void onAttach(final Activity activity) {
		super.onAttach(activity);
       if (mUSBMonitor == null)
        try {
    		mUSBMonitor = ((CameraDialogParent)activity).getUSBMonitor();
        } catch (final ClassCastException e) {
    	} catch (final NullPointerException e) {
        }
		if (mUSBMonitor == null) {
        	throw new ClassCastException(activity.toString() + " must implement CameraDialogParent#getUSBController");
		}
	}

	@Override
    public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		if (savedInstanceState == null)
			savedInstanceState = getArguments();
	}

	@Override
	public void onSaveInstanceState(final Bundle saveInstanceState) {
		final Bundle args = getArguments();
		if (args != null)
			saveInstanceState.putAll(args);
		super.onSaveInstanceState(saveInstanceState);
	}

	@Override
    public Dialog onCreateDialog(final Bundle savedInstanceState) {
		final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
		builder.setView(initView());
    	builder.setTitle(R.string.select);
	    builder.setPositiveButton(android.R.string.ok, mOnDialogClickListener);
	    builder.setNegativeButton(android.R.string.cancel , mOnDialogClickListener);
	    builder.setNeutralButton(R.string.refresh, null);
	    final Dialog dialog = builder.create();
	    dialog.setCancelable(true);
	    dialog.setCanceledOnTouchOutside(true);
        return dialog;
	}

	/**
	 * create view that this fragment shows
	 * @return
	 */
	private final View initView() {
		final View rootView = getActivity().getLayoutInflater().inflate(R.layout.dialog_camera, null);
		mSpinner = (Spinner)rootView.findViewById(R.id.spinner1);
		final View empty = rootView.findViewById(android.R.id.empty);
		mSpinner.setEmptyView(empty);
		return rootView;
	}


	@Override
	public void onResume() {
		super.onResume();
		updateDevices();
	    final Button button = (Button)getDialog().findViewById(android.R.id.button3);
	    if (button != null) {
	    	button.setOnClickListener(mOnClickListener);
	    }
	}

	private final OnClickListener mOnClickListener = new OnClickListener() {
		@Override
		public void onClick(final View v) {
			switch (v.getId()) {
			case android.R.id.button3:
				updateDevices();
				break;
			}
		}
	};

	private final DialogInterface.OnClickListener mOnDialogClickListener = new DialogInterface.OnClickListener() {
		@Override
		public void onClick(final DialogInterface dialog, final int which) {
			switch (which) {
			case DialogInterface.BUTTON_POSITIVE:
				final Object item = mSpinner.getSelectedItem();
				if (item instanceof UsbDevice) {
					mUSBMonitor.requestPermission((UsbDevice)item);
					((CameraDialogParent)getActivity()).onDialogResult(false);
				}
				break;
			case DialogInterface.BUTTON_NEGATIVE:
				((CameraDialogParent)getActivity()).onDialogResult(true);
				break;
			}
		}
	};

	@Override
	public void onCancel(final DialogInterface dialog) {
		((CameraDialogParent)getActivity()).onDialogResult(true);
		super.onCancel(dialog);
	}

	public void updateDevices() {
//		mUSBMonitor.dumpDevices();
		final List<DeviceFilter> filter = DeviceFilter.getDeviceFilters(getActivity(), R.xml.device_filter);
		mDeviceListAdapter = new DeviceListAdapter(getActivity(), mUSBMonitor.getDeviceList(filter.get(0)));
		mSpinner.setAdapter(mDeviceListAdapter);
	}

	private static final class DeviceListAdapter extends BaseAdapter {

		private final LayoutInflater mInflater;
		private final List<UsbDevice> mList;

		public DeviceListAdapter(final Context context, final List<UsbDevice>list) {
			mInflater = LayoutInflater.from(context);
			mList = list != null ? list : new ArrayList<UsbDevice>();
		}

		@Override
		public int getCount() {
			return mList.size();
		}

		@Override
		public UsbDevice getItem(final int position) {
			if ((position >= 0) && (position < mList.size()))
				return mList.get(position);
			else
				return null;
		}

		@Override
		public long getItemId(final int position) {
			return position;
		}

		@Override
		public View getView(final int position, View convertView, final ViewGroup parent) {
			if (convertView == null) {
				convertView = mInflater.inflate(R.layout.listitem_device, parent, false);
			}
			if (convertView instanceof CheckedTextView) {
				final UsbDevice device = getItem(position);
				((CheckedTextView)convertView).setText(
					String.format("UVC Camera:(%x:%x:%s)", device.getVendorId(), device.getProductId(), device.getDeviceName()));
			}
			return convertView;
		}
	}
}


================================================
FILE: libuvccamera/src/main/java/com/serenegiant/usb/DeviceFilter.java
================================================
/*
 *  UVCCamera
 *  library and sample to access to UVC web camera on non-rooted Android device
 *
 * Copyright (c) 2014-2017 saki t_saki@serenegiant.com
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 *
 *  All files in the folder are under this Apache License, Version 2.0.
 *  Files in the libjpeg-turbo, libusb, libuvc, rapidjson folder
 *  may have a different license, see the respective files.
 */

package com.serenegiant.usb;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import android.content.Context;
import android.content.res.Resources.NotFoundException;
import android.hardware.usb.UsbDevice;
import android.hardware.usb.UsbInterface;
import android.text.TextUtils;
import android.util.Log;

public final class DeviceFilter {

	private static final String TAG = "DeviceFilter";

	// USB Vendor ID (or -1 for unspecified)
	public final int mVendorId;
	// USB Product ID (or -1 for unspecified)
	public final int mProductId;
	// USB device or interface class (or -1 for unspecified)
	public final int mClass;
	// USB device subclass (or -1 for unspecified)
	public final int mSubclass;
	// USB device protocol (or -1 for unspecified)
	public final int mProtocol;
	// USB device manufacturer name string (or null for unspecified)
	public final String mManufacturerName;
	// USB device product name string (or null for unspecified)
	public final String mProductName;
	// USB device serial number string (or null for unspecified)
	public final String mSerialNumber;
	// set true if specific device(s) should exclude
	public final boolean isExclude;

	public DeviceFilter(final int vid, final int pid, final int clasz, final int subclass,
			final int protocol, final String manufacturer, final String product, final String serialNum) {
		this(vid, pid, clasz, subclass, protocol, manufacturer, product, serialNum, false);
	}

	public DeviceFilter(final int vid, final int pid, final int clasz, final int subclass,
			final int protocol, final String manufacturer, final String product, final String serialNum, final boolean isExclude) {
		mVendorId = vid;
		mProductId = pid;
		mClass = clasz;
		mSubclass = subclass;
		mProtocol = protocol;
		mManufacturerName = manufacturer;
		mProductName = product;
		mSerialNumber = serialNum;
		this.isExclude = isExclude;
/*		Log.i(TAG, String.format("vendorId=0x%04x,productId=0x%04x,class=0x%02x,subclass=0x%02x,protocol=0x%02x",
			mVendorId, mProductId, mClass, mSubclass, mProtocol)); */
	}

	public DeviceFilter(final UsbDevice device) {
		this(device, false);
	}

	public DeviceFilter(final UsbDevice device, final boolean isExclude) {
		mVendorId = device.getVendorId();
		mProductId = device.getProductId();
		mClass = device.getDeviceClass();
		mSubclass = device.getDeviceSubclass();
		mProtocol = device.getDeviceProtocol();
		mManufacturerName = null;	// device.getManufacturerName();
		mProductName = null;		// device.getProductName();
		mSerialNumber = null;		// device.getSerialNumber();
		this.isExclude = isExclude;
/*		Log.i(TAG, String.format("vendorId=0x%04x,productId=0x%04x,class=0x%02x,subclass=0x%02x,protocol=0x%02x",
			mVendorId, mProductId, mClass, mSubclass, mProtocol)); */
	}

	/**
	 * 指定したxmlリソースからDeviceFilterリストを生成する
	 * @param context
	 * @param deviceFilterXmlId
	 * @return
	 */
	public static List<DeviceFilter> getDeviceFilters(final Context context, final int deviceFilterXmlId) {
		final XmlPullParser parser = context.getResources().getXml(deviceFilterXmlId);
		final List<DeviceFilter> deviceFilters = new ArrayList<DeviceFilter>();
		try {
			int eventType = parser.getEventType();
			while (eventType != XmlPullParser.END_DOCUMENT) {
	            if (eventType == XmlPullParser.START_TAG) {
					final DeviceFilter deviceFilter = readEntryOne(context, parser);
					if (deviceFilter != null) {
						deviceFilters.add(deviceFilter);
					}
	            }
				eventType = parser.next();
			}
		} catch (final XmlPullParserException e) {
			Log.d(TAG, "XmlPullParserException", e);
		} catch (final IOException e) {
			Log.d(TAG, "IOException", e);
		}

		return Collections.unmodifiableList(deviceFilters);
	}

	/**
	 * read as integer values with default value from xml(w/o exception throws)
	 * resource integer id is also resolved into integer
	 * @param parser
	 * @param namespace
	 * @param name
	 * @param defaultValue
	 * @return
	 */
	private static final int getAttributeInteger(final Context context, final XmlPullParser parser, final String namespace, final String name, final int defaultValue) {
		int result = defaultValue;
		try {
			String v = parser.getAttributeValue(namespace, name);
			if (!TextUtils.isEmpty(v) && v.startsWith("@")) {
				final String r = v.substring(1);
				final int resId = context.getResources().getIdentifier(r, null, context.getPackageName());
				if (resId > 0) {
					result = context.getResources().getInteger(resId);
				}
			} else {
                int radix = 10;
                if (v != null && v.length() > 2 && v.charAt(0) == '0' &&
                    (v.charAt(1) == 'x' || v.charAt(1) == 'X')) {
                    // allow hex values starting with 0x or 0X
                    radix = 16;
                    v = v.substring(2);
                }
				result = Integer.parseInt(v, radix);
			}
		} catch (final NotFoundException e) {
			result = defaultValue;
		} catch (final NumberFormatException e) {
			result = defaultValue;
		} catch (final NullPointerException e) {
			result = defaultValue;
		}
		return result;
	}

	/**
	 * read as boolean values with default value from xml(w/o exception throws)
	 * resource boolean id is also resolved into boolean
	 * if the value is zero, return false, if the value is non-zero integer, return true
	 * @param context
	 * @param parser
	 * @param namespace
	 * @param name
	 * @param defaultValue
	 * @return
	 */
	private static final boolean getAttributeBoolean(final Context context, final XmlPullParser parser, final String namespace, final String name, final boolean defaultValue) {
		boolean result = defaultValue;
		try {
			String v = parser.getAttributeValue(namespace, name);
			if ("TRUE".equalsIgnoreCase(v)) {
				result = true;
			} else if ("FALSE".equalsIgnoreCase(v)) {
				result = false;
			} else if (!TextUtils.isEmpty(v) && v.startsWith("@")) {
				final String r = v.substring(1);
				final int resId = context.getResources().getIdentifier(r, null, context.getPackageName());
				if (resId > 0) {
					result = context.getResources().getBoolean(resId);
				}
			} else {
                int radix = 10;
                if (v != null && v.length() > 2 && v.charAt(0) == '0' &&
                    (v.charAt(1) == 'x' || v.charAt(1) == 'X')) {
                    // allow hex values starting with 0x or 0X
                    radix = 16;
                    v = v.substring(2);
                }
				final int val = Integer.parseInt(v, radix);
				result = val != 0;
			}
		} catch (final NotFoundException e) {
			result = defaultValue;
		} catch (final NumberFormatException e) {
			result = defaultValue;
		} catch (final NullPointerException e) {
			result = defaultValue;
		}
		return result;
	}

	/**
	 * read as String attribute with default value from xml(w/o exception throws)
	 * resource string id is also resolved into string
	 * @param parser
	 * @param namespace
	 * @param name
	 * @param defaultValue
	 * @return
	 */
	private static final String getAttributeString(final Context context, final XmlPullParser parser, final String namespace, final String name, final String defaultValue) {
		String result = defaultValue;
		try {
			result = parser.getAttributeValue(namespace, name);
			if (result == null)
				result = defaultValue;
			if (!TextUtils.isEmpty(result) && result.startsWith("@")) {
				final String r = result.substring(1);
				final int resId = context.getResources().getIdentifier(r, null, context.getPackageName());
				if (resId > 0)
					result = context.getResources().getString(resId);
			}
		} catch (final NotFoundException e) {
			result = defaultValue;
		} catch (final NumberFormatException e) {
			result = defaultValue;
		} catch (final NullPointerException e) {
			result = defaultValue;
		}
		return result;
	}

	public static DeviceFilter readEntryOne(final Context context, final XmlPullParser parser)
			throws XmlPullParserException, IOException {
		int vendorId = -1;
		int productId = -1;
		int deviceClass = -1;
		int deviceSubclass = -1;
		int deviceProtocol = -1;
		boolean exclude = false;
		String manufacturerName = null;
		String productName = null;
		String serialNumber = null;
		boolean hasValue = false;

		String tag;
        int eventType = parser.getEventType();
        while (eventType != XmlPullParser.END_DOCUMENT) {
        	tag = parser.getName();
        	if (!TextUtils.isEmpty(tag) && (tag.equalsIgnoreCase("usb-device"))) {
        		if (eventType == XmlPullParser.START_TAG) {
        			hasValue = true;
					vendorId = getAttributeInteger(context, parser, null, "vendor-id", -1);
        			if (vendorId == -1) {
        				vendorId = getAttributeInteger(context, parser, null, "vendorId", -1);
        				if (vendorId == -1)
                			vendorId = getAttributeInteger(context, parser, null, "venderId", -1);
        			}
    				productId = getAttributeInteger(context, parser, null, "product-id", -1);
        			if (productId == -1)
            			productId = getAttributeInteger(context, parser, null, "productId", -1);
        			deviceClass = getAttributeInteger(context, parser, null, "class", -1);
        			deviceSubclass = getAttributeInteger(context, parser, null, "subclass", -1);
        			deviceProtocol = getAttributeInteger(context, parser, null, "protocol", -1);
        			manufacturerName = getAttributeString(context, parser, null, "manufacturer-name", null);
        			if (TextUtils.isEmpty(manufacturerName))
        				manufacturerName = getAttributeString(context, parser, null, "manufacture", null);
        			productName = getAttributeString(context, parser, null, "product-name", null);
        			if (TextUtils.isEmpty(productName))
        				productName = getAttributeString(context, parser, null, "product", null);
        			serialNumber = getAttributeString(context, parser, null, "serial-number", null);
        			if (TextUtils.isEmpty(serialNumber))
            			serialNumber = getAttributeString(context, parser, null, "serial", null);
					exclude = getAttributeBoolean(context, parser, null, "exclude", false);
        		} else if (eventType == XmlPullParser.END_TAG) {
        			if (hasValue) {
	        			return new DeviceFilter(vendorId, productId, deviceClass,
	        					deviceSubclass, deviceProtocol, manufacturerName, productName,
	        					serialNumber, exclude);
        			}
        		}
        	}
        	eventType = parser.next();
        }
        return null;
	}

/*	public void write(XmlSerializer serializer) throws IOException {
		serializer.startTag(null, "usb-device");
		if (mVendorId != -1) {
			serializer
					.attribute(null, "vendor-id", Integer.toString(mVendorId));
		}
		if (mProductId != -1) {
			serializer.attribute(null, "product-id",
					Integer.toString(mProductId));
		}
		if (mClass != -1) {
			serializer.attribute(null, "class", Integer.toString(mClass));
		}
		if (mSubclass != -1) {
			serializer.attribute(null, "subclass", Integer.toString(mSubclass));
		}
		if (mProtocol != -1) {
			serializer.attribute(null, "protocol", Integer.toString(mProtocol));
		}
		if (mManufacturerName != null) {
			serializer.attribute(null, "manufacturer-name", mManufacturerName);
		}
		if (mProductName != null) {
			serializer.attribute(null, "product-name", mProductName);
		}
		if (mSerialNumber != null) {
			serializer.attribute(null, "serial-number", mSerialNumber);
		}
		serializer.attribute(null, "serial-number", Boolean.toString(isExclude));
		serializer.endTag(null, "usb-device");
	} */

	/**
	 * 指定したクラス・サブクラス・プロトコルがこのDeviceFilterとマッチするかどうかを返す
	 * mExcludeフラグは別途#isExcludeか自前でチェックすること
	 * @param clasz
	 * @param subclass
	 * @param protocol
	 * @return
	 */
	private boolean matches(final int clasz, final int subclass, final int protocol) {
		return ((mClass == -1 || clasz == mClass)
				&& (mSubclass == -1 || subclass == mSubclass) && (mProtocol == -1 || protocol == mProtocol));
	}

	/**
	 * 指定したUsbDeviceがこのDeviceFilterにマッチするかどうかを返す
	 * mExcludeフラグは別途#isExcludeか自前でチェックすること
	 * @param device
	 * @return
	 */
	public boolean matches(final UsbDevice device) {
		if (mVendorId != -1 && device.getVendorId() != mVendorId) {
			return false;
		}
		if (mProductId != -1 && device.getProductId() != mProductId) {
			return false;
		}
/*		if (mManufacturerName != null && device.getManufacturerName() == null)
			return false;
		if (mProductName != null && device.getProductName() == null)
			return false;
		if (mSerialNumber != null && device.getSerialNumber() == null)
			return false;
		if (mManufacturerName != null && device.getManufacturerName() != null
				&& !mManufacturerName.equals(device.getManufacturerName()))
			return false;
		if (mProductName != null && device.getProductName() != null
				&& !mProductName.equals(device.getProductName()))
			return false;
		if (mSerialNumber != null && device.getSerialNumber() != null
				&& !mSerialNumber.equals(device.getSerialNumber()))
			return false; */

		// check device class/subclass/protocol
		if (matches(device.getDeviceClass(), device.getDeviceSubclass(), device.getDeviceProtocol())) {
			return true;
		}

		// if device doesn't match, check the interfaces
		final int count = device.getInterfaceCount();
		for (int i = 0; i < count; i++) {
			final UsbInterface intf = device.getInterface(i);
			if (matches(intf.getInterfaceClass(), intf.getInterfaceSubclass(), intf.getInterfaceProtocol())) {
				return true;
			}
		}

		return false;
	}

	/**
	 * このDeviceFilterに一致してかつmExcludeがtrueならtrueを返す
	 * @param device
	 * @return
	 */
	public boolean isExclude(final UsbDevice device) {
		return isExclude && matches(device);
	}

	/**
	 * これって要らんかも, equalsでできる気が
	 * @param f
	 * @return
	 */
	public boolean matches(final DeviceFilter f) {
		if (isExclude != f.isExclude) {
			return false;
		}
		if (mVendorId != -1 && f.mVendorId != mVendorId) {
			return false;
		}
		if (mProductId != -1 && f.mProductId != mProductId) {
			return false;
		}
		if (f.mManufacturerName != null && mManufacturerName == null) {
			return false;
		}
		if (f.mProductName != null && mProductName == null) {
			return false;
		}
		if (f.mSerialNumber != null && mSerialNumber == null) {
			return false;
		}
		if (mManufacturerName != null && f.mManufacturerName != null
				&& !mManufacturerName.equals(f.mManufacturerName)) {
			return false;
		}
		if (mProductName != null && f.mProductName != null
				&& !mProductName.equals(f.mProductName)) {
			return false;
		}
		if (mSerialNumber != null && f.mSerialNumber != null
				&& !mSerialNumber.equals(f.mSerialNumber)) {
			return false;
		}

		// check device class/subclass/protocol
		return matches(f.mClass, f.mSubclass, f.mProtocol);
	}

	@Override
	public boolean equals(final Object obj) {
		// can't compare if we have wildcard strings
		if (mVendorId == -1 || mProductId == -1 || mClass == -1
				|| mSubclass == -1 || mProtocol == -1) {
			return false;
		}
		if (obj instanceof DeviceFilter) {
			final DeviceFilter filter = (DeviceFilter) obj;

			if (filter.mVendorId != mVendorId
					|| filter.mProductId != mProductId
					|| filter.mClass != mClass || filter.mSubclass != mSubclass
					|| filter.mProtocol != mProtocol) {
				return false;
			}
			if ((filter.mManufacturerName != null && mManufacturerName == null)
					|| (filter.mManufacturerName == null && mManufacturerName != null)
					|| (filter.mProductName != null && mProductName == null)
					|| (filter.mProductName == null && mProductName != null)
					|| (filter.mSerialNumber != null && mSerialNumber == null)
					|| (filter.mSerialNumber == null && mSerialNumber != null)) {
				return false;
			}
			if ((filter.mManufacturerName != null && mManufacturerName != null && !mManufacturerName
					.equals(filter.mManufacturerName))
					|| (filter.mProductName != null && mProductName != null && !mProductName
							.equals(filter.mProductName))
					|| (filter.mSerialNumber != null && mSerialNumber != null && !mSerialNumber
							.equals(filter.mSerialNumber))) {
				return false;
			}
			return (filter.isExclude != isExclude);
		}
		if (obj instanceof UsbDevice) {
			final UsbDevice device = (UsbDevice) obj;
			if (isExclude
					|| (device.getVendorId() != mVendorId)
					|| (device.getProductId() != mProductId)
					|| (device.getDeviceClass() != mClass)
					|| (device.getDeviceSubclass() != mSubclass)
					|| (device.getDeviceProtocol() != mProtocol) ) {
				return false;
			}
/*			if ((mManufacturerName != null && device.getManufacturerName() == null)
					|| (mManufacturerName == null && device
							.getManufacturerName() != null)
					|| (mProductName != null && device.getProductName() == null)
					|| (mProductName == null && device.getProductName() != null)
					|| (mSerialNumber != null && device.getSerialNumber() == null)
					|| (mSerialNumber == null && device.getSerialNumber() != null)) {
				return (false);
			} */
/*			if ((device.getManufacturerName() != null && !mManufacturerName
					.equals(device.getManufacturerName()))
					|| (device.getProductName() != null && !mProductName
							.equals(device.getProductName()))
					|| (device.getSerialNumber() != null && !mSerialNumber
							.equals(device.getSerialNumber()))) {
				return (false);
			} */
			return true;
		}
		return false;
	}

	@Override
	public int hashCode() {
		return (((mVendorId << 16) | mProductId) ^ ((mClass << 16)
				| (mSubclass << 8) | mProtocol));
	}

	@Override
	public String toString() {
		return "DeviceFilter[mVendorId=" + mVendorId + ",mProductId="
			+ mProductId + ",mClass=" + mClass + ",mSubclass=" + mSubclass
			+ ",mProtocol=" + mProtocol
			+ ",mManufacturerName=" + mManufacturerName
			+ ",mProductName=" + mProductName
			+ ",mSerialNumber=" + mSerialNumber
			+ ",isExclude=" + isExclude
			+ "]";
	}

}


================================================
FILE: libuvccamera/src/main/java/com/serenegiant/usb/IButtonCallback.java
================================================
package com.serenegiant.usb;

public interface IButtonCallback {
    void onButton(int button, int state);
}


================================================
FILE: libuvccamera/src/main/java/com/serenegiant/usb/IFrameCallback.java
================================================
/*
 *  UVCCamera
 *  library and sample to access to UVC web camera on non-rooted Android device
 *
 * Copyright (c) 2014-2017 saki t_saki@serenegiant.com
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 *
 *  All files in the folder are under this Apache License, Version 2.0.
 *  Files in the libjpeg-turbo, libusb, libuvc, rapidjson folder
 *  may have a different license, see the respective files.
 */

package com.serenegiant.usb;

import java.nio.ByteBuffer;
/**
 * Callback interface for UVCCamera class
 * If you need frame data as ByteBuffer, you can use this callback interface with UVCCamera#setFrameCallback
 */
public interface IFrameCallback {
	/**
	 * This method is called from native library via JNI on the same thread as UVCCamera#startCapture.
	 * You can use both UVCCamera#startCapture and #setFrameCallback
	 * but it is better to use either for better performance.
	 * You can also pass pixel format type to UVCCamera#setFrameCallback for this method.
	 * Some frames may drops if this method takes a time.
	 * When you use some color format like NV21, this library never execute color space conversion,
	 * just execute pixel format conversion. If you want to get same result as on screen, please try to
	 * consider to get images via texture(SurfaceTexture) and read pixel buffer from it using OpenGL|ES2/3
	 * instead of using IFrameCallback(this way is much efficient in most case than using IFrameCallback).
	 * @param frame this is direct ByteBuffer from JNI layer and you should handle it's byte order and limitation.
	 */
	public void onFrame(ByteBuffer frame);
}


================================================
FILE: libuvccamera/src/main/java/com/serenegiant/usb/IStatusCallback.java
================================================
package com.serenegiant.usb;

import java.nio.ByteBuffer;

public interface IStatusCallback {
    void onStatus(int statusClass, int event, int selector, int statusAttribute, ByteBuffer data);
}


================================================
FILE: libuvccamera/src/main/java/com/serenegiant/usb/Size.java
================================================
/*
 *  UVCCamera
 *  library and sample to access to UVC web camera on non-rooted Android device
 *
 * Copyright (c) 2014-2017 saki t_saki@serenegiant.com
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 *
 *  All files in the folder are under this Apache License, Version 2.0.
 *  Files in the libjpeg-turbo, libusb, libuvc, rapidjson folder
 *  may have a different license, see the respective files.
 */

package com.serenegiant.usb;

import java.util.Locale;

import android.os.Parcel;
import android.os.Parcelable;

public class Size implements Parcelable {
	//
	/**
	 * native側のuvc_raw_format_tの値, こっちは主にlibuvc用
	 * 9999 is still image
	 */
	public int type;
	/**
	 * native側のraw_frame_tの値, androusb用,
	 * libuvcは対応していない
	 */
	public int frame_type;
	public int index;
	public int width;
	public int height;
	public int frameIntervalType;
	public int frameIntervalIndex;
	public int[] intervals;
	// ここ以下はframeIntervalTypeとintervalsから#updateFrameRateで計算する
	public float[] fps;
	private String frameRates;

	/**
	 * コンストラクタ
	 * @param _type native側のraw_format_tの値, ただし9999は静止画
	 * @param _frame_type native側のraw_frame_tの値
	 * @param _index
	 * @param _width
	 * @param _height
	 */
	public Size(final int _type, final int _frame_type, final int _index, final int _width, final int _height) {
		type = _type;
		frame_type = _frame_type;
		index = _index;
		width = _width;
		height = _height;
		frameIntervalType = -1;
		frameIntervalIndex = 0;
		intervals = null;
		updateFrameRate();
	}

	/**
	 * コンストラクタ
	 * @param _type native側のraw_format_tの値, ただし9999は静止画
	 * @param _frame_type native側のraw_frame_tの値
	 * @param _index
	 * @param _width
	 * @param _height
	 * @param _min_intervals
	 * @param _max_intervals
	 */
	public Size(final int _type, final int _frame_type, final int _index, final int _width, final int _height, final int _min_intervals, final int _max_intervals, final int _step) {
		type = _type;
		frame_type = _frame_type;
		index = _index;
		width = _width;
		height = _height;
		frameIntervalType = 0;
		frameIntervalIndex = 0;
		intervals = new int[3];
		intervals[0] = _min_intervals;
		intervals[1] = _max_intervals;
		intervals[2] = _step;
		updateFrameRate();
	}

	/**
	 * コンストラクタ
	 * @param _type native側のraw_format_tの値, ただし9999は静止画
	 * @param _frame_type native側のraw_frame_tの値
	 * @param _index
	 * @param _width
	 * @param _height
     * @param _intervals
     */
	public Size(final int _type, final int _frame_type, final int _index, final int _width, final int _height, final int[] _intervals) {
		type = _type;
		frame_type = _frame_type;
		index = _index;
		width = _width;
		height = _height;
		final int n = _intervals != null ? _intervals.length : -1;
		if (n > 0) {
			frameIntervalType = n;
			intervals = new int[n];
			System.arraycopy(_intervals, 0, intervals, 0, n);
		} else {
			frameIntervalType = -1;
			intervals = null;
		}
		frameIntervalIndex = 0;
		updateFrameRate();
	}

	/**
	 * コピーコンストラクタ
	 * @param other
	 */
	public Size(final Size other) {
		type = other.type;
		frame_type = other.frame_type;
		index = other.index;
		width = other.width;
		height = other.height;
		frameIntervalType = other.frameIntervalType;
		frameIntervalIndex = other.frameIntervalIndex;
		final int n = other.intervals != null ? other.intervals.length : -1;
		if (n > 0) {
			intervals = new int[n];
			System.arraycopy(other.intervals, 0, intervals, 0, n);
		} else {
			intervals = null;
		}
		updateFrameRate();
	}

	private Size(final Parcel source) {
		// 読み取り順はwriteToParcelでの書き込み順と同じでないとダメ
		type = source.readInt();
		frame_type = source.readInt();
		index = source.readInt();
		width = source.readInt();
		height = source.readInt();
		frameIntervalType = source.readInt();
		frameIntervalIndex = source.readInt();
		if (frameIntervalType >= 0) {
			if (frameIntervalType > 0) {
				intervals = new int[frameIntervalType];
			} else {
				intervals = new int[3];
			}
			source.readIntArray(intervals);
		} else {
			intervals = null;
		}
		updateFrameRate();
	}

	public Size set(final Size other) {
		if (other != null) {
			type = other.type;
			frame_type = other.frame_type;
			index = other.index;
			width = other.width;
			height = other.height;
			frameIntervalType = other.frameIntervalType;
			frameIntervalIndex = other.frameIntervalIndex;
			final int n = other.intervals != null ? other.intervals.length : -1;
			if (n > 0) {
				intervals = new int[n];
				System.arraycopy(other.intervals, 0, intervals, 0, n);
			} else {
				intervals = null;
			}
			updateFrameRate();
		}
		return this;
	}

	public float getCurrentFrameRate() throws IllegalStateException {
		final int n = fps != null ? fps.length : 0;
		if ((frameIntervalIndex >= 0) && (frameIntervalIndex < n)) {
			return fps[frameIntervalIndex];
		}
		throw new IllegalStateException("unknown frame rate or not ready");
	}

	public void setCurrentFrameRate(final float frameRate) {
		// 一番近いのを選ぶ
		int index = -1;
		final int n = fps != null ? fps.length : 0;
		for (int i = 0; i < n; i++) {
			if (fps[i] <= frameRate) {
				index = i;
				break;
			}
		}
		frameIntervalIndex = index;
	}

	@Override
	public int describeContents() {
		return 0;
	}

	@Override
	public void writeToParcel(final Parcel dest, final int flags) {
		dest.writeInt(type);
		dest.writeInt(frame_type);
		dest.writeInt(index);
		dest.writeInt(width);
		dest.writeInt(height);
		dest.writeInt(frameIntervalType);
		dest.writeInt(frameIntervalIndex);
		if (intervals != null) {
			dest.writeIntArray(intervals);
		}
	}

	public void updateFrameRate() {
		final int n = frameIntervalType;
		if (n > 0) {
			fps = new float[n];
			for (int i = 0; i < n; i++) {
				final float _fps = fps[i] = 10000000.0f / intervals[i];
			}
		} else if (n == 0) {
			try {
				final int min = Math.min(intervals[0], intervals[1]);
				final int max = Math.max(intervals[0], intervals[1]);
				final int step = intervals[2];
				if (step > 0) {
					int m = 0;
					for (int i = min; i <= max; i+= step) { m++; }
					fps = new float[m];
					m = 0;
					for (int i = min; i <= max; i+= step) {
						final float _fps = fps[m++] = 10000000.0f / i;
					}
				} else {
					final float max_fps = 10000000.0f / min;
					int m = 0;
					for (float fps = 10000000.0f / min; fps <= max_fps; fps += 1.0f) { m++; }
					fps = new float[m];
					m = 0;
					for (float fps = 10000000.0f / min; fps <= max_fps; fps += 1.0f) {
						this.fps[m++] = fps;
					}
				}
			} catch (final Exception e) {
				// ignore, なんでかminとmaxが0になってるんちゃうかな
				fps = null;
			}
		}
		final int m = fps != null ? fps.length : 0;
		final StringBuilder sb = new StringBuilder();
		sb.append("[");
		for (int i = 0; i < m; i++) {
			sb.append(String.format(Locale.US, "%4.1f", fps[i]));
			if (i < m-1) {
				sb.append(",");
			}
		}
		sb.append("]");
		frameRates = sb.toString();
		if (frameIntervalIndex > m) {
			frameIntervalIndex = 0;
		}
	}

	@Override
	public String toString() {
		float frame_rate = 0.0f;
		try {
			frame_rate = getCurrentFrameRate();
		} catch (final Exception e) {
		}
		return String.format(Locale.US, "Size(%dx%d@%4.1f,type:%d,frame:%d,index:%d,%s)", width, height, frame_rate, type, frame_type, index, frameRates);
	}

	public static final Creator<Size> CREATOR = new Parcelable.Creator<Size>() {
		@Override
		public Size createFromParcel(final Parcel source) {
			return new Size(source);
		}
		@Override
		public Size[] newArray(final int size) {
			return new Size[size];
		}
	};
}


================================================
FILE: libuvccamera/src/main/java/com/serenegiant/usb/USBMonitor.java
================================================
/*
 *  UVCCamera
 *  library and sample to access to UVC web camera on non-rooted Android device
 *
 * Copyright (c) 2014-2017 saki t_saki@serenegiant.com
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 *
 *  All files in the folder are under this Apache License, Version 2.0.
 *  Files in the libjpeg-turbo, libusb, libuvc, rapidjson folder
 *  may have a different license, see the respective files.
 */

package com.serenegiant.usb;

import java.io.UnsupportedEncodingException;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;

import android.annotation.SuppressLint;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.hardware.usb.UsbDevice;
import android.hardware.usb.UsbDeviceConnection;
import android.hardware.usb.UsbInterface;
import android.hardware.usb.UsbManager;
import android.os.Handler;
import android.text.TextUtils;
import android.util.Log;
import android.util.SparseArray;

import com.serenegiant.utils.BuildCheck;
import com.serenegiant.utils.HandlerThreadHandler;

public final class USBMonitor {

	private static final boolean DEBUG = false;	// TODO set false on production
	private static final String TAG = "USBMonitor";

	private static final String ACTION_USB_PERMISSION_BASE = "com.serenegiant.USB_PERMISSION.";
	private final String ACTION_USB_PERMISSION = ACTION_USB_PERMISSION_BASE + hashCode();

	public static final String ACTION_USB_DEVICE_ATTACHED = "android.hardware.usb.action.USB_DEVICE_ATTACHED";

	/**
	 * openしているUsbControlBlock
	 */
	private final ConcurrentHashMap<UsbDevice, UsbControlBlock> mCtrlBlocks = new ConcurrentHashMap<UsbDevice, UsbControlBlock>();
	private final SparseArray<WeakReference<UsbDevice>> mHasPermissions = new SparseArray<WeakReference<UsbDevice>>();

	private final WeakReference<Context> mWeakContext;
	private final UsbManager mUsbManager;
	private final OnDeviceConnectListener mOnDeviceConnectListener;
	private PendingIntent mPermissionIntent = null;
	private List<DeviceFilter> mDeviceFilters = new ArrayList<DeviceFilter>();

	/**
	 * コールバックをワーカースレッドで呼び出すためのハンドラー
	 */
	private final Handler mAsyncHandler;
	private volatile boolean destroyed;
	/**
	 * USB機器の状態変更時のコールバックリスナー
	 */
	public interface OnDeviceConnectListener {
		/**
		 * called when device attached
		 * @param device
		 */
		public void onAttach(UsbDevice device);
		/**
		 * called when device dettach(after onDisconnect)
		 * @param device
		 */
		public void onDettach(UsbDevice device);
		/**
		 * called after device opend
		 * @param device
		 * @param ctrlBlock
		 * @param createNew
		 */
		public void onConnect(UsbDevice device, UsbControlBlock ctrlBlock, boolean createNew);
		/**
		 * called when USB device removed or its power off (this callback is called after device closing)
		 * @param device
		 * @param ctrlBlock
		 */
		public void onDisconnect(UsbDevice device, UsbControlBlock ctrlBlock);
		/**
		 * called when canceled or could not get permission from user
		 * @param device
		 */
		public void onCancel(UsbDevice device);
	}

	public USBMonitor(final Context context, final OnDeviceConnectListener listener) {
		if (DEBUG) Log.v(TAG, "USBMonitor:Constructor");
		if (listener == null)
			throw new IllegalArgumentException("OnDeviceConnectListener should not null.");
		mWeakContext = new WeakReference<Context>(context);
		mUsbManager = (UsbManager)context.getSystemService(Context.USB_SERVICE);
		mOnDeviceConnectListener = listener;
		mAsyncHandler = HandlerThreadHandler.createHandler(TAG);
		destroyed = false;
		if (DEBUG) Log.v(TAG, "USBMonitor:mUsbManager=" + mUsbManager);
	}

	/**
	 * Release all related resources,
	 * never reuse again
	 */
	public void destroy() {
		if (DEBUG) Log.i(TAG, "destroy:");
		unregister();
		if (!destroyed) {
			destroyed = true;
			// モニターしているUSB機器を全てcloseする
			final Set<UsbDevice> keys = mCtrlBlocks.keySet();
			if (keys != null) {
				UsbControlBlock ctrlBlock;
				try {
					for (final UsbDevice key: keys) {
						ctrlBlock = mCtrlBlocks.remove(key);
						if (ctrlBlock != null) {
							ctrlBlock.close();
						}
					}
				} catch (final Exception e) {
					Log.e(TAG, "destroy:", e);
				}
			}
			mCtrlBlocks.clear();
			try {
				mAsyncHandler.getLooper().quit();
			} catch (final Exception e) {
				Log.e(TAG, "destroy:", e);
			}
		}
	}

	/**
	 * register BroadcastReceiver to monitor USB events
	 * @throws IllegalStateException
	 */
	public synchronized void register() throws IllegalStateException {
		if (destroyed) throw new IllegalStateException("already destroyed");
		if (mPermissionIntent == null) {
			if (DEBUG) Log.i(TAG, "register:");
			final Context context = mWeakContext.get();
			if (context != null) {
				mPermissionIntent = PendingIntent.getBroadcast(context, 0, new Intent(ACTION_USB_PERMISSION), 0);
				final IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
				// ACTION_USB_DEVICE_ATTACHED never comes on some devices so it should not be added here
				filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
				context.registerReceiver(mUsbReceiver, filter);
			}
			// start connection check
			mDeviceCounts = 0;
			mAsyncHandler.postDelayed(mDeviceCheckRunnable, 1000);
		}
	}

	/**
	 * unregister BroadcastReceiver
	 * @throws IllegalStateException
	 */
	public synchronized void unregister() throws IllegalStateException {
		// 接続チェック用Runnableを削除
		mDeviceCounts = 0;
		if (!destroyed) {
			mAsyncHandler.removeCallbacks(mDeviceCheckRunnable);
		}
		if (mPermissionIntent != null) {
//			if (DEBUG) Log.i(TAG, "unregister:");
			final Context context = mWeakContext.get();
			try {
				if (context != null) {
					context.unregisterReceiver(mUsbReceiver);
				}
			} catch (final Exception e) {
				Log.w(TAG, e);
			}
			mPermissionIntent = null;
		}
	}

	public synchronized boolean isRegistered() {
		return !destroyed && (mPermissionIntent != null);
	}

	/**
	 * set device filter
	 * @param filter
	 * @throws IllegalStateException
	 */
	public void setDeviceFilter(final DeviceFilter filter) throws IllegalStateException {
		if (destroyed) throw new IllegalStateException("already destroyed");
		mDeviceFilters.clear();
		mDeviceFilters.add(filter);
	}

	/**
	 * デバイスフィルターを追加
	 * @param filter
	 * @throws IllegalStateException
	 */
	public void addDeviceFilter(final DeviceFilter filter) throws IllegalStateException {
		if (destroyed) throw new IllegalStateException("already destroyed");
		mDeviceFilters.add(filter);
	}

	/**
	 * デバイスフィルターを削除
	 * @param filter
	 * @throws IllegalStateException
	 */
	public void removeDeviceFilter(final DeviceFilter filter) throws IllegalStateException {
		if (destroyed) throw new IllegalStateException("already destroyed");
		mDeviceFilters.remove(filter);
	}

	/**
	 * set device filters
	 * @param filters
	 * @throws IllegalStateException
	 */
	public void setDeviceFilter(final List<DeviceFilter> filters) throws IllegalStateException {
		if (destroyed) throw new IllegalStateException("already destroyed");
		mDeviceFilters.clear();
		mDeviceFilters.addAll(filters);
	}

	/**
	 * add device filters
	 * @param filters
	 * @throws IllegalStateException
	 */
	public void addDeviceFilter(final List<DeviceFilter> filters) throws IllegalStateException {
		if (destroyed) throw new IllegalStateException("already destroyed");
		mDeviceFilters.addAll(filters);
	}

	/**
	 * remove device filters
	 * @param filters
	 */
	public void removeDeviceFilter(final List<DeviceFilter> filters) throws IllegalStateException {
		if (destroyed) throw new IllegalStateException("already destroyed");
		mDeviceFilters.removeAll(filters);
	}

	/**
	 * return the number of connected USB devices that matched device filter
	 * @return
	 * @throws IllegalStateException
	 */
	public int getDeviceCount() throws IllegalStateException {
		if (destroyed) throw new IllegalStateException("already destroyed");
		return getDeviceList().size();
	}

	/**
	 * return device list, return empty list if no device matched
	 * @return
	 * @throws IllegalStateException
	 */
	public List<UsbDevice> getDeviceList() throws IllegalStateException {
		if (destroyed) throw new IllegalStateException("already destroyed");
		return getDeviceList(mDeviceFilters);
	}

	/**
	 * return device list, return empty list if no device matched
	 * @param filters
	 * @return
	 * @throws IllegalStateException
	 */
	public List<UsbDevice> getDeviceList(final List<DeviceFilter> filters) throws IllegalStateException {
		if (destroyed) throw new IllegalStateException("already destroyed");
		final HashMap<String, UsbDevice> deviceList = mUsbManager.getDeviceList();
		final List<UsbDevice> result = new ArrayList<UsbDevice>();
		if (deviceList != null) {
			if ((filters == null) || filters.isEmpty()) {
				result.addAll(deviceList.values());
			} else {
				for (final UsbDevice device: deviceList.values() ) {
					for (final DeviceFilter filter: filters) {
						if ((filter != null) && filter.matches(device)) {
							// when filter matches
							if (!filter.isExclude) {
								result.add(device);
							}
							break;
						}
					}
				}
			}
		}
		return result;
	}

	/**
	 * return device list, return empty list if no device matched
	 * @param filter
	 * @return
	 * @throws IllegalStateException
	 */
	public List<UsbDevice> getDeviceList(final DeviceFilter filter) throws IllegalStateException {
		if (destroyed) throw new IllegalStateException("already destroyed");
		final HashMap<String, UsbDevice> deviceList = mUsbManager.getDeviceList();
		final List<UsbDevice> result = new ArrayList<UsbDevice>();
		if (deviceList != null) {
			for (final UsbDevice device: deviceList.values() ) {
				if ((filter == null) || (filter.matches(device) && !filter.isExclude)) {
					result.add(device);
				}
			}
		}
		return result;
	}

	/**
	 * get USB device list, without filter
	 * @return
	 * @throws IllegalStateException
	 */
	public Iterator<UsbDevice> getDevices() throws IllegalStateException {
		if (destroyed) throw new IllegalStateException("already destroyed");
		Iterator<UsbDevice> iterator = null;
		final HashMap<String, UsbDevice> list = mUsbManager.getDeviceList();
		if (list != null)
			iterator = list.values().iterator();
		return iterator;
	}

	/**
	 * output device list to LogCat
	 */
	public final void dumpDevices() {
		final HashMap<String, UsbDevice> list = mUsbManager.getDeviceList();
		if (list != null) {
			final Set<String> keys = list.keySet();
			if (keys != null && keys.size() > 0) {
				final StringBuilder sb = new StringBuilder();
				for (final String key: keys) {
					final UsbDevice device = list.get(key);
					final int num_interface = device != null ? device.getInterfaceCount() : 0;
					sb.setLength(0);
					for (int i = 0; i < num_interface; i++) {
						sb.append(String.format(Locale.US, "interface%d:%s", i, device.getInterface(i).toString()));
					}
					Log.i(TAG, "key=" + key + ":" + device + ":" + sb.toString());
				}
			} else {
				Log.i(TAG, "no device");
			}
		} else {
			Log.i(TAG, "no device");
		}
	}

	/**
	 * return whether the specific Usb device has permission
	 * @param device
	 * @return true: 指定したUsbDeviceにパーミッションがある
	 * @throws IllegalStateException
	 */
	public final boolean hasPermission(final UsbDevice device) throws IllegalStateException {
		if (destroyed) throw new IllegalStateException("already destroyed");
		return updatePermission(device, device != null && mUsbManager.hasPermission(device));
	}

	/**
	 * 内部で保持しているパーミッション状態を更新
	 * @param device
	 * @param hasPermission
	 * @return hasPermission
	 */
	private boolean updatePermission(final UsbDevice device, final boolean hasPermission) {
		final int deviceKey = getDeviceKey(device, true);
		synchronized (mHasPermissions) {
			if (hasPermission) {
				if (mHasPermissions.get(deviceKey) == null) {
					mHasPermissions.put(deviceKey, new WeakReference<UsbDevice>(device));
				}
			} else {
				mHasPermissions.remove(deviceKey);
			}
		}
		return hasPermission;
	}

	/**
	 * request permission to access to USB device
	 * @param device
	 * @return true if fail to request permission
	 */
	public synchronized boolean requestPermission(final UsbDevice device) {
//		if (DEBUG) Log.v(TAG, "requestPermission:device=" + device);
		boolean result = false;
		if (isRegistered()) {
			if (device != null) {
				if (mUsbManager.hasPermission(device)) {
					// call onConnect if app already has permission
					processConnect(device);
				} else {
					try {
						// パーミッションがなければ要求する
						mUsbManager.requestPermission(device, mPermissionIntent);
					} catch (final Exception e) {
						// Android5.1.xのGALAXY系でandroid.permission.sec.MDM_APP_MGMTという意味不明の例外生成するみたい
						Log.w(TAG, e);
						processCancel(device);
						result = true;
					}
				}
			} else {
				processCancel(device);
				result = true;
			}
		} else {
			processCancel(device);
			result = true;
		}
		return result;
	}

	/**
	 * 指定したUsbDeviceをopenする
	 * @param device
	 * @return
	 * @throws SecurityException パーミッションがなければSecurityExceptionを投げる
	 */
	public UsbControlBlock openDevice(final UsbDevice device) throws SecurityException {
		if (hasPermission(device)) {
			UsbControlBlock result = mCtrlBlocks.get(device);
			if (result == null) {
				result = new UsbControlBlock(USBMonitor.this, device);    // この中でopenDeviceする
				mCtrlBlocks.put(device, result);
			}
			return result;
		} else {
			throw new SecurityException("has no permission");
		}
	}

	/**
	 * BroadcastReceiver for USB permission
	 */
	private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {

		@Override
		public void onReceive(final Context context, final Intent intent) {
			if (destroyed) return;
			final String action = intent.getAction();
			if (ACTION_USB_PERMISSION.equals(action)) {
				// when received the result of requesting USB permission
				synchronized (USBMonitor.this) {
					final UsbDevice device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
					if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
						if (device != null) {
							// get permission, call onConnect
							processConnect(device);
						}
					} else {
						// failed to get permission
						processCancel(device);
					}
				}
			} else if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {
				final UsbDevice device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
				updatePermission(device, hasPermission(device));
				processAttach(device);
			} else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) {
				// when device removed
				final UsbDevice device = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
				if (device != null) {
					UsbControlBlock ctrlBlock = mCtrlBlocks.remove(device);
					if (ctrlBlock != null) {
						// cleanup
						ctrlBlock.close();
					}
					mDeviceCounts = 0;
					processDettach(device);
				}
			}
		}
	};

	/** number of connected & detected devices */
	private volatile int mDeviceCounts = 0;
	/**
	 * periodically check connected devices and if it changed, call onAttach
	 */
	private final Runnable mDeviceCheckRunnable = new Runnable() {
		@Override
		public void run() {
			if (destroyed) return;
			final List<UsbDevice> devices = getDeviceList();
			final int n = devices.size();
			final int hasPermissionCounts;
			final int m;
			synchronized (mHasPermissions) {
				hasPermissionCounts = mHasPermissions.size();
				mHasPermissions.clear();
				for (final UsbDevice device: devices) {
					hasPermission(device);
				}
				m = mHasPermissions.size();
			}
			if ((n > mDeviceCounts) || (m > hasPermissionCounts)) {
				mDeviceCounts = n;
				if (mOnDeviceConnectListener != null) {
					for (int i = 0; i < n; i++) {
						final UsbDevice device = devices.get(i);
						mAsyncHandler.post(new Runnable() {
							@Override
							public void run() {
								mOnDeviceConnectListener.onAttach(device);
							}
						});
					}
				}
			}
			mAsyncHandler.postDelayed(this, 2000);	// confirm every 2 seconds
		}
	};

	/**
	 * open specific USB device
	 * @param device
	 */
	private final void processConnect(final UsbDevice device) {
		if (destroyed) return;
		updatePermission(device, true);
		mAsyncHandler.post(new Runnable() {
			@Override
			public void run() {
				if (DEBUG) Log.v(TAG, "processConnect:device=" + device);
				UsbControlBlock ctrlBlock;
				final boolean createNew;
				ctrlBlock = mCtrlBlocks.get(device);
				if (ctrlBlock == null) {
					ctrlBlock = new UsbControlBlock(USBMonitor.this, device);
					mCtrlBlocks.put(device, ctrlBlock);
					createNew = true;
				} else {
					createNew = false;
				}
				if (mOnDeviceConnectListener != null) {
					mOnDeviceConnectListener.onConnect(device, ctrlBlock, createNew);
				}
			}
		});
	}

	private final void processCancel(final UsbDevice device) {
		if (destroyed) return;
		if (DEBUG) Log.v(TAG, "processCancel:");
		updatePermission(device, false);
		if (mOnDeviceConnectListener != null) {
			mAsyncHandler.post(new Runnable() {
				@Override
				public void run() {
					mOnDeviceConnectListener.onCancel(device);
				}
			});
		}
	}

	private final void processAttach(final UsbDevice device) {
		if (destroyed) return;
		if (DEBUG) Log.v(TAG, "processAttach:");
		if (mOnDeviceConnectListener != null) {
			mAsyncHandler.post(new Runnable() {
				@Override
				public void run() {
					mOnDeviceConnectListener.onAttach(device);
				}
			});
		}
	}

	private final void processDettach(final UsbDevice device) {
		if (destroyed) return;
		if (DEBUG) Log.v(TAG, "processDettach:");
		if (mOnDeviceConnectListener != null) {
			mAsyncHandler.post(new Runnable() {
				@Override
				public void run() {
					mOnDeviceConnectListener.onDettach(device);
				}
			});
		}
	}

	/**
	 * USB機器毎の設定保存用にデバイスキー名を生成する。
	 * ベンダーID, プロダクトID, デバイスクラス, デバイスサブクラス, デバイスプロトコルから生成
	 * 同種の製品だと同じキー名になるので注意
	 * @param device nullなら空文字列を返す
	 * @return
	 */
	public static final String getDeviceKeyName(final UsbDevice device) {
		return getDeviceKeyName(device, null, false);
	}

	/**
	 * USB機器毎の設定保存用にデバイスキー名を生成する。
	 * useNewAPI=falseで同種の製品だと同じデバイスキーになるので注意
	 * @param device
	 * @param useNewAPI
	 * @return
	 */
	public static final String getDeviceKeyName(final UsbDevice device, final boolean useNewAPI) {
		return getDeviceKeyName(device, null, useNewAPI);
	}
	/**
	 * USB機器毎の設定保存用にデバイスキー名を生成する。この機器名をHashMapのキーにする
	 * UsbDeviceがopenしている時のみ有効
	 * ベンダーID, プロダクトID, デバイスクラス, デバイスサブクラス, デバイスプロトコルから生成
	 * serialがnullや空文字でなければserialを含めたデバイスキー名を生成する
	 * useNewAPI=trueでAPIレベルを満たしていればマニュファクチャ名, バージョン, コンフィギュレーションカウントも使う
	 * @param device nullなら空文字列を返す
	 * @param serial	UsbDeviceConnection#getSerialで取得したシリアル番号を渡す, nullでuseNewAPI=trueでAPI>=21なら内部で取得
	 * @param useNewAPI API>=21またはAPI>=23のみで使用可能なメソッドも使用する(ただし機器によってはnullが返ってくるので有効かどうかは機器による)
	 * @return
	 */
	@SuppressLint("NewApi")
	public static final String getDeviceKeyName(final UsbDevice device, final String serial, final boolean useNewAPI) {
		if (device == null) return "";
		final StringBuilder sb = new StringBuilder();
		sb.append(device.getVendorId());			sb.append("#");	// API >= 12
		sb.append(device.getProductId());			sb.append("#");	// API >= 12
		sb.append(device.getDeviceClass());			sb.append("#");	// API >= 12
		sb.append(device.getDeviceSubclass());		sb.append("#");	// API >= 12
		sb.append(device.getDeviceProtocol());						// API >= 12
		if (!TextUtils.isEmpty(serial)) {
			sb.append("#");	sb.append(serial);
		}
		if (useNewAPI && BuildCheck.isAndroid5()) {
			sb.append("#");
			if (TextUtils.isEmpty(serial)) {
				sb.append(device.getSerialNumber());	sb.append("#");	// API >= 21
			}
			sb.append(device.getManufacturerName());	sb.append("#");	// API >= 21
			sb.append(device.getConfigurationCount());	sb.append("#");	// API >= 21
			if (BuildCheck.isMarshmallow()) {
				sb.append(device.getVersion());			sb.append("#");	// API >= 23
			}
		}
//		if (DEBUG) Log.v(TAG, "getDeviceKeyName:" + sb.toString());
		return sb.toString();
	}

	/**
	 * デバイスキーを整数として取得
	 * getDeviceKeyNameで得られる文字列のhasCodeを取得
	 * ベンダーID, プロダクトID, デバイスクラス, デバイスサブクラス, デバイスプロトコルから生成
	 * 同種の製品だと同じデバイスキーになるので注意
	 * @param device nullなら0を返す
	 * @return
	 */
	public static final int getDeviceKey(final UsbDevice device) {
		return device != null ? getDeviceKeyName(device, null, false).hashCode() : 0;
	}

	/**
	 * デバイスキーを整数として取得
	 * getDeviceKeyNameで得られる文字列のhasCodeを取得
	 * useNewAPI=falseで同種の製品だと同じデバイスキーになるので注意
	 * @param device
	 * @param useNewAPI
	 * @return
	 */
	public static final int getDeviceKey(final UsbDevice device, final boolean useNewAPI) {
		return device != null ? getDeviceKeyName(device, null, useNewAPI).hashCode() : 0;
	}

	/**
	 * デバイスキーを整数として取得
	 * getDeviceKeyNameで得られる文字列のhasCodeを取得
	 * serialがnullでuseNewAPI=falseで同種の製品だと同じデバイスキーになるので注意
	 * @param device nullなら0を返す
	 * @param serial UsbDeviceConnection#getSerialで取得したシリアル番号を渡す, nullでuseNewAPI=trueでAPI>=21なら内部で取得
	 * @param useNewAPI API>=21またはAPI>=23のみで使用可能なメソッドも使用する(ただし機器によってはnullが返ってくるので有効かどうかは機器による)
	 * @return
	 */
	public static final int getDeviceKey(final UsbDevice device, final String serial, final boolean useNewAPI) {
		return device != null ? getDeviceKeyName(device, serial, useNewAPI).hashCode() : 0;
	}

	public static class UsbDeviceInfo {
		public String usb_version;
		public String manufacturer;
		public String product;
		public String version;
		public String serial;

		private void clear() {
			usb_version = manufacturer = product = version = serial = null;
		}

		@Override
		public String toString() {
			return String.format("UsbDevice:usb_version=%s,manufacturer=%s,product=%s,version=%s,serial=%s",
				usb_version != null ? usb_version : "",
				manufacturer != null ? manufacturer : "",
				product != null ? product : "",
				version != null ? version : "",
				serial != null ? serial : "");
		}
	}

	private static final int USB_DIR_OUT = 0;
	private static final int USB_DIR_IN = 0x80;
	private static final int USB_TYPE_MASK = (0x03 << 5);
	private static final int USB_TYPE_STANDARD = (0x00 << 5);
	private static final int USB_TYPE_CLASS = (0x01 << 5);
	private static final int USB_TYPE_VENDOR = (0x02 << 5);
	private static final int USB_TYPE_RESERVED = (0x03 << 5);
	private static final int USB_RECIP_MASK = 0x1f;
	private static final int USB_RECIP_DEVICE = 0x00;
	private static final int USB_RECIP_INTERFACE = 0x01;
	private static final int USB_RECIP_ENDPOINT = 0x02;
	private static final int USB_RECIP_OTHER = 0x03;
	private static final int USB_RECIP_PORT = 0x04;
	private static final int USB_RECIP_RPIPE = 0x05;
	private static final int USB_REQ_GET_STATUS = 0x00;
	private static final int USB_REQ_CLEAR_FEATURE = 0x01;
	private static final int USB_REQ_SET_FEATURE = 0x03;
	private static final int USB_REQ_SET_ADDRESS = 0x05;
	private static final int USB_REQ_GET_DESCRIPTOR = 0x06;
	private static final int USB_REQ_SET_DESCRIPTOR = 0x07;
	private static final int USB_REQ_GET_CONFIGURATION = 0x08;
	private static final int USB_REQ_SET_CONFIGURATION = 0x09;
	private static final int USB_REQ_GET_INTERFACE = 0x0A;
	private static final int USB_REQ_SET_INTERFACE = 0x0B;
	private static final int USB_REQ_SYNCH_FRAME = 0x0C;
	private static final int USB_REQ_SET_SEL = 0x30;
	private static final int USB_REQ_SET_ISOCH_DELAY = 0x31;
	private static final int USB_REQ_SET_ENCRYPTION = 0x0D;
	private static final int USB_REQ_GET_ENCRYPTION = 0x0E;
	private static final int USB_REQ_RPIPE_ABORT = 0x0E;
	private static final int USB_REQ_SET_HANDSHAKE = 0x0F;
	private static final int USB_REQ_RPIPE_RESET = 0x0F;
	private static final int USB_REQ_GET_HANDSHAKE = 0x10;
	private static final int USB_REQ_SET_CONNECTION = 0x11;
	private static final int USB_REQ_SET_SECURITY_DATA = 0x12;
	private static final int USB_REQ_GET_SECURITY_DATA = 0x13;
	private static final int USB_REQ_SET_WUSB_DATA = 0x14;
	private static final int USB_REQ_LOOPBACK_DATA_WRITE = 0x15;
	private static final int USB_REQ_LOOPBACK_DATA_READ = 0x16;
	private static final int USB_REQ_SET_INTERFACE_DS = 0x17;

	private static final int USB_REQ_STANDARD_DEVICE_SET = (USB_DIR_OUT | USB_TYPE_STANDARD | USB_RECIP_DEVICE);		// 0x10
	private static final int USB_REQ_STANDARD_DEVICE_GET = (USB_DIR_IN | USB_TYPE_STANDARD | USB_RECIP_DEVICE);			// 0x90
	private static final int USB_REQ_STANDARD_INTERFACE_SET = (USB_DIR_OUT | USB_TYPE_STANDARD | USB_RECIP_INTERFACE);	// 0x11
	private static final int USB_REQ_STANDARD_INTERFACE_GET = (USB_DIR_IN | USB_TYPE_STANDARD | USB_RECIP_INTERFACE);	// 0x91
	private static final int USB_REQ_STANDARD_ENDPOINT_SET = (USB_DIR_OUT | USB_TYPE_STANDARD | USB_RECIP_ENDPOINT);	// 0x12
	private static final int USB_REQ_STANDARD_ENDPOINT_GET = (USB_DIR_IN | USB_TYPE_STANDARD | USB_RECIP_ENDPOINT);		// 0x92

	private static final int USB_REQ_CS_DEVICE_SET  = (USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_DEVICE);				// 0x20
	private static final int USB_REQ_CS_DEVICE_GET = (USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_DEVICE);					// 0xa0
	private static final int USB_REQ_CS_INTERFACE_SET = (USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE);			// 0x21
	private static final int USB_REQ_CS_INTERFACE_GET = (USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE);			// 0xa1
	private static final int USB_REQ_CS_ENDPOINT_SET = (USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_ENDPOINT);				// 0x22
	private static final int USB_REQ_CS_ENDPOINT_GET = (USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_ENDPOINT);				// 0xa2

	private static final int USB_REQ_VENDER_DEVICE_SET = (USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_DEVICE);				// 0x40
	private static final int USB_REQ_VENDER_DEVICE_GET = (USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_DEVICE);				// 0xc0
	private static final int USB_REQ_VENDER_INTERFACE_SET = (USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE);		// 0x41
	private static final int USB_REQ_VENDER_INTERFACE_GET = (USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE);		// 0xc1
	private static final int USB_REQ_VENDER_ENDPOINT_SET = (USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_ENDPOINT);			// 0x42
	private static final int USB_REQ_VENDER_ENDPOINT_GET = (USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_ENDPOINT);			// 0xc2

	private static final int USB_DT_DEVICE = 0x01;
	private static final int USB_DT_CONFIG = 0x02;
	private static final int USB_DT_STRING = 0x03;
	private static final int USB_DT_INTERFACE = 0x04;
	private static final int USB_DT_ENDPOINT = 0x05;
	private static final int USB_DT_DEVICE_QUALIFIER = 0x06;
	private static final int USB_DT_OTHER_SPEED_CONFIG = 0x07;
	private static final int USB_DT_INTERFACE_POWER = 0x08;
	private static final int USB_DT_OTG = 0x09;
	private static final int USB_DT_DEBUG = 0x0a;
	private static final int USB_DT_INTERFACE_ASSOCIATION = 0x0b;
	private static final int USB_DT_SECURITY = 0x0c;
	private static final int USB_DT_KEY = 0x0d;
	private static final int USB_DT_ENCRYPTION_TYPE = 0x0e;
	private static final int USB_DT_BOS = 0x0f;
	private static final int USB_DT_DEVICE_CAPABILITY = 0x10;
	private static final int USB_DT_WIRELESS_ENDPOINT_COMP = 0x11;
	private static final int USB_DT_WIRE_ADAPTER = 0x21;
	private static final int USB_DT_RPIPE = 0x22;
	private static final int USB_DT_CS_RADIO_CONTROL = 0x23;
	private static final int USB_DT_PIPE_USAGE = 0x24;
	private static final int USB_DT_SS_ENDPOINT_COMP = 0x30;
	private static final int USB_DT_CS_DEVICE = (USB_TYPE_CLASS | USB_DT_DEVICE);
	private static final int USB_DT_CS_CONFIG = (USB_TYPE_CLASS | USB_DT_CONFIG);
	private static final int USB_DT_CS_STRING = (USB_TYPE_CLASS | USB_DT_STRING);
	private static final int USB_DT_CS_INTERFACE = (USB_TYPE_CLASS | USB_DT_INTERFACE);
	private static final int USB_DT_CS_ENDPOINT = (USB_TYPE_CLASS | USB_DT_ENDPOINT);
	private static final int USB_DT_DEVICE_SIZE = 18;

	/**
	 * 指定したIDのStringディスクリプタから文字列を取得する。取得できなければnull
	 * @param connection
	 * @param id
	 * @param languageCount
	 * @param languages
	 * @return
	 */
	private static String getString(final UsbDeviceConnection connection, final int id, final int languageCount, final byte[] languages) {
		final byte[] work = new byte[256];
		String result = null;
		for (int i = 1; i <= languageCount; i++) {
			int ret = connection.controlTransfer(
				USB_REQ_STANDARD_DEVICE_GET, // USB_DIR_IN | USB_TYPE_STANDARD | USB_RECIP_DEVICE
				USB_REQ_GET_DESCRIPTOR,
				(USB_DT_STRING << 8) | id, languages[i], work, 256, 0);
			if ((ret > 2) && (work[0] == ret) && (work[1] == USB_DT_STRING)) {
				// skip first two bytes(bLength & bDescriptorType), and copy the rest to the string
				try {
					result = new String(work, 2, ret - 2, "UTF-16LE");
					if (!"Љ".equals(result)) {	// 変なゴミが返ってくる時がある
						break;
					} else {
						result = null;
					}
				} catch (final UnsupportedEncodingException e) {
					// ignore
				}
			}
		}
		return result;
	}

	/**
	 * ベンダー名・製品名・バージョン・シリアルを取得する
	 * @param device
	 * @return
	 */
	public UsbDeviceInfo getDeviceInfo(final UsbDevice device) {
		return updateDeviceInfo(mUsbManager, device, null);
	}

	/**
	 * ベンダー名・製品名・バージョン・シリアルを取得する
	 * #updateDeviceInfo(final UsbManager, final UsbDevice, final UsbDeviceInfo)のヘルパーメソッド
	 * @param context
	 * @param device
	 * @return
	 */
	public static UsbDeviceInfo getDeviceInfo(final Context context, final UsbDevice device) {
		return updateDeviceInfo((UsbManager)context.getSystemService(Context.USB_SERVICE), device, new UsbDeviceInfo());
	}

	/**
	 * ベンダー名・製品名・バージョン・シリアルを取得する
	 * @param manager
	 * @param device
	 * @param _info
	 * @return
	 */
	public static UsbDeviceInfo updateDeviceInfo(final UsbManager manager, final UsbDevice device, final UsbDeviceInfo _info) {
		final UsbDeviceInfo info = _info != null ? _info : new UsbDeviceInfo();
		info.clear();

		if (device != null) {
			if (BuildCheck.isLollipop()) {
				info.manufacturer = device.getManufacturerName();
				info.product = device.getProductName();
				info.serial = device.getSerialNumber();
			}
			if (BuildCheck.isMarshmallow()) {
				info.usb_version = device.getVersion();
			}
			if ((manager != null) && manager.hasPermission(device)) {
				final UsbDeviceConnection connection = manager.openDevice(device);
				final byte[] desc = connection.getRawDescriptors();

				if (TextUtils.isEmpty(info.usb_version)) {
					info.usb_version = String.format("%x.%02x", ((int)desc[3] & 0xff), ((int)desc[2] & 0xff));
				}
				if (TextUtils.isEmpty(info.version)) {
					info.version = String.format("%x.%02x", ((int)desc[13] & 0xff), ((int)desc[12] & 0xff));
				}
				if (TextUtils.isEmpty(info.serial)) {
					info.serial = connection.getSerial();
				}

				final byte[] languages = new byte[256];
				int languageCount = 0;
				// controlTransfer(int requestType, int request, int value, int index, byte[] buffer, int length, int timeout)
				try {
					int result = connection.controlTransfer(
						USB_REQ_STANDARD_DEVICE_GET, // USB_DIR_IN | USB_TYPE_STANDARD | USB_RECIP_DEVICE
	    				USB_REQ_GET_DESCRIPTOR,
	    				(USB_DT_STRING << 8) | 0, 0, languages, 256, 0);
					if (result > 0) {
	        			languageCount = (result - 2) / 2;
					}
					if (languageCount > 0) {
						if (TextUtils.isEmpty(info.manufacturer)) {
							info.manufacturer = getString(connection, desc[14], languageCount, languages);
						}
						if (TextUtils.isEmpty(info.product)) {
							info.product = getString(connection, desc[15], languageCount, languages);
						}
						if (TextUtils.isEmpty(info.serial)) {
							info.serial = getString(connection, desc[16], languageCount, languages);
						}
					}
				} finally {
					connection.close();
				}
			}
			if (TextUtils.isEmpty(info.manufacturer)) {
				info.manufacturer = USBVendorId.vendorName(device.getVendorId());
			}
			if (TextUtils.isEmpty(info.manufacturer)) {
				info.manufacturer = String.format("%04x", device.getVendorId());
			}
			if (TextUtils.isEmpty(info.product)) {
				info.product = String.format("%04x", device.getProductId());
			}
		}
		return info;
	}

	/**
	 * control class
	 * never reuse the instance when it closed
	 */
	public static final class UsbControlBlock implements Cloneable {
		private final WeakReference<USBMonitor> mWeakMonitor;
		private final WeakReference<UsbDevice> mWeakDevice;
		protected UsbDeviceConnection mConnection;
		protected final UsbDeviceInfo mInfo;
		private final int mBusNum;
		private final int mDevNum;
		private final SparseArray<SparseArray<UsbInterface>> mInterfaces = new SparseArray<SparseArray<UsbInterface>>();

		/**
		 * this class needs permission to access USB device before constructing
		 * @param monitor
		 * @param device
		 */
		private UsbControlBlock(final USBMonitor monitor, final UsbDevice device) {
			if (DEBUG) Log.i(TAG, "UsbControlBlock:constructor");
			mWeakMonitor = new WeakReference<USBMonitor>(monitor);
			mWeakDevice = new WeakReference<UsbDevice>(device);
			mConnection = monitor.mUsbManager.openDevice(device);
			mInfo = updateDeviceInfo(monitor.mUsbManager, device, null);
			final String name = device.getDeviceName();
			final String[] v = !TextUtils.isEmpty(name) ? name.split("/") : null;
			int busnum = 0;
			int devnum = 0;
			if (v != null) {
				busnum = Integer.parseInt(v[v.length-2]);
				devnum = Integer.parseInt(v[v.length-1]);
			}
			mBusNum = busnum;
			mDevNum = devnum;
//			if (DEBUG) {
				if (mConnection != null) {
					final int desc = mConnection.getFileDescriptor();
					final byte[] rawDesc = mConnection.getRawDescriptors();
					Log.i(TAG, String.format(Locale.US, "name=%s,desc=%d,busnum=%d,devnum=%d,rawDesc=", name, desc, busnum, devnum) + rawDesc);
				} else {
					Log.e(TAG, "could not connect to device " + name);
				}
//			}
		}

		/**
		 * copy constructor
		 * @param src
		 * @throws IllegalStateException
		 */
		private UsbControlBlock(final UsbControlBlock src) throws IllegalStateException {
			final USBMonitor monitor = src.getUSBMonitor();
			final UsbDevice device = src.getDevice();
			if (device == null) {
				throw new IllegalStateException("device may already be removed");
			}
			mConnection = monitor.mUsbManager.openDevice(device);
			if (mConnection == null) {
				throw new IllegalStateException("device may already be removed or have no permission");
			}
			mInfo = updateDeviceInfo(monitor.mUsbManager, device, null);
			mWeakMonitor = new WeakReference<USBMonitor>(monitor);
			mWeakDevice = new WeakReference<UsbDevice>(device);
			mBusNum = src.mBusNum;
			mDevNum = src.mDevNum;
			// FIXME USBMonitor.mCtrlBlocksに追加する(今はHashMapなので追加すると置き換わってしまうのでだめ, ListかHashMapにListをぶら下げる?)
		}

		/**
		 * duplicate by clone
		 * need permission
		 * USBMonitor never handle cloned UsbControlBlock, you should release it after using it.
		 * @return
		 * @throws CloneNotSupportedException
		 */
		@Override
		public UsbControlBlock clone() throws CloneNotSupportedException {
			final UsbControlBlock ctrlblock;
			try {
				ctrlblock = new UsbControlBlock(this);
			} catch (final IllegalStateException e) {
				throw new CloneNotSupportedException(e.getMessage());
			}
			return ctrlblock;
		}

		public USBMonitor getUSBMonitor() {
			return mWeakMonitor.get();
		}

		public final UsbDevice getDevice() {
			return mWeakDevice.get();
		}

		/**
		 * get device name
		 * @return
		 */
		public String getDeviceName() {
			final UsbDevice device = mWeakDevice.get();
			return device != null ? device.getDeviceName() : "";
		}

		/**
		 * get device id
		 * @return
		 */
		public int getDeviceId() {
			final UsbDevice device = mWeakDevice.get();
			return device != null ? device.getDeviceId() : 0;
		}

		/**
		 * get device key string
		 * @return same value if the devices has same vendor id, product id, device class, device subclass and device protocol
		 */
		public String getDeviceKeyName() {
			return USBMonitor.getDeviceKeyName(mWeakDevice.get());
		}

		/**
		 * get device key string
		 * @param useNewAPI if true, try to use serial number
		 * @return
		 * @throws IllegalStateException
		 */
		public String getDeviceKeyName(final boolean useNewAPI) throws IllegalStateException {
			if (useNewAPI) checkConnection();
			return USBMonitor.getDeviceKeyName(mWeakDevice.get(), mInfo.serial, useNewAPI);
		}

		/**
		 * get device key
		 * @return
		 * @throws IllegalStateException
		 */
		public int getDeviceKey() throws IllegalStateException {
			checkConnection();
			return USBMonitor.getDeviceKey(mWeakDevice.get());
		}

		/**
		 * get device key
		 * @param useNewAPI if true, try to use serial number
		 * @return
		 * @throws IllegalStateException
		 */
		public int getDeviceKey(final boolean useNewAPI) throws IllegalStateException {
			if (useNewAPI) checkConnection();
			return USBMonitor.getDeviceKey(mWeakDevice.get(), mInfo.serial, useNewAPI);
		}

		/**
		 * get device key string
		 * if device has serial number, use it
		 * @return
		 */
		public String getDeviceKeyNameWithSerial() {
			return USBMonitor.getDeviceKeyName(mWeakDevice.get(), mInfo.serial, false);
		}

		/**
		 * get device key
		 * if device has serial number, use it
		 * @return
		 */
		public int getDeviceKeyWithSerial() {
			return getDeviceKeyNameWithSerial().hashCode();
		}

		/**
		 * get UsbDeviceConnection
		 * @return
		 */
		public synchronized UsbDeviceConnection getConnection() {
			return mConnection;
		}

		/**
		 * get file descriptor to access USB device
		 * @return
		 * @throws IllegalStateException
		 */
		public synchronized int getFileDescriptor() throws IllegalStateException {
			checkConnection();
			return mConnection.getFileDescriptor();
		}

		/**
		 * get raw descriptor for the USB device
		 * @return
		 * @throws IllegalStateException
		 */
		public synchronized byte[] getRawDescriptors() throws IllegalStateException {
			checkConnection();
			return mConnection.getRawDescriptors();
		}

		/**
		 * get vendor id
		 * @return
		 */
		public int getVenderId() {
			final UsbDevice device = mWeakDevice.get();
			return device != null ? device.getVendorId() : 0;
		}

		/**
		 * get product id
		 * @return
		 */
		public int getProductId() {
			final UsbDevice device = mWeakDevice.get();
			return device != null ? device.getProductId() : 0;
		}

		/**
		 * get version string of USB
		 * @return
		 */
		public String getUsbVersion() {
			return mInfo.usb_version;
		}

		/**
		 * get manufacture
		 * @return
		 */
		public String getManufacture() {
			return mInfo.manufacturer;
		}

		/**
		 * get product name
		 * @return
		 */
		public String getProductName() {
			return mInfo.product;
		}

		/**
		 * get version
		 * @return
		 */
		public String getVersion() {
			return mInfo.version;
		}

		/**
		 * get serial number
		 * @return
		 */
		public String getSerial() {
			return mInfo.serial;
		}

		public int getBusNum() {
			return mBusNum;
		}

		public int getDevNum() {
			return mDevNum;
		}

		/**
		 * get interface
		 * @param interface_id
		 * @throws IllegalStateException
		 */
		public synchronized UsbInterface getInterface(final int interface_id) throws IllegalStateException {
			return getInterface(interface_id, 0);
		}

		/**
		 * get interface
		 * @param interface_id
		 * @param altsetting
		 * @return
		 * @throws IllegalStateException
		 */
		public synchronized UsbInterface getInterface(final int interface_id, final int altsetting) throws IllegalStateException {
			checkConnection();
			SparseArray<UsbInterface> intfs = mInterfaces.get(interface_id);
			if (intfs == null) {
				intfs = new SparseArray<UsbInterface>();
				mInterfaces.put(interface_id, intfs);
			}
			UsbInterface intf = intfs.get(altsetting);
			if (intf == null) {
				final UsbDevice device = mWeakDevice.get();
				final int n = device.getInterfaceCount();
				for (int i = 0; i < n; i++) {
					final UsbInterface temp = device.getInterface(i);
					if ((temp.getId() == interface_id) && (temp.getAlternateSetting() == altsetting)) {
						intf = temp;
						break;
					}
				}
				if (intf != null) {
					intfs.append(altsetting, intf);
				}
			}
			return intf;
		}

		/**
		 * open specific interface
		 * @param intf
		 */
		public synchronized void claimInterface(final UsbInterface intf) {
			claimInterface(intf, true);
		}

		public synchronized void claimInterface(final UsbInterface intf, final boolean force) {
			checkConnection();
			mConnection.claimInterface(intf, force);
		}

		/**
		 * close interface
		 * @param intf
		 * @throws IllegalStateException
		 */
		public synchronized void releaseInterface(final UsbInterface intf) throws IllegalStateException {
			checkConnection();
			final SparseArray<UsbInterface> intfs = mInterfaces.get(intf.getId());
			if (intfs != null) {
				final int index = intfs.indexOfValue(intf);
				intfs.removeAt(index);
				if (intfs.size() == 0) {
					mInterfaces.remove(intf.getId());
				}
			}
			mConnection.releaseInterface(intf);
		}

		/**
		 * Close device
		 * This also close interfaces if they are opened in Java side
		 */
		public synchronized void close() {
			if (DEBUG) Log.i(TAG, "UsbControlBlock#close:");

			if (mConnection != null) {
				final int n = mInterfaces.size();
				for (int i = 0; i < n; i++) {
					final SparseArray<UsbInterface> intfs = mInterfaces.valueAt(i);
					if (intfs != null) {
						final int m = intfs.size();
						for (int j = 0; j < m; j++) {
							final UsbInterface intf = intfs.valueAt(j);
							mConnection.releaseInterface(intf);
						}
						intfs.clear();
					}
				}
				mInterfaces.clear();
				mConnection.close();
				mConnection = null;
				final USBMonitor monitor = mWeakMonitor.get();
				if (monitor != null) {
					if (monitor.mOnDeviceConnectListener != null) {
						monitor.mOnDeviceConnectListener.onDisconnect(mWeakDevice.get(), UsbControlBlock.this);
					}
					monitor.mCtrlBlocks.remove(getDevice());
				}
			}
		}

		@Override
		public boolean equals(final Object o) {
			if (o == null) return false;
			if (o instanceof UsbControlBlock) {
				final UsbDevice device = ((UsbControlBlock) o).getDevice();
				return device == null ? mWeakDevice.get() == null
						: device.equals(mWeakDevice.get());
			} else if (o instanceof UsbDevice) {
				return o.equals(mWeakDevice.get());
			}
			return super.equals(o);
		}

//		@Override
//		protected void finalize() throws Throwable {
///			close();
//			super.finalize();
//		}

		private synchronized void checkConnection() throws IllegalStateException {
			if (mConnection == null) {
				throw new IllegalStateException("already closed");
			}
		}
	}

}


================================================
FILE: libuvccamera/src/main/java/com/serenegiant/usb/USBVendorId.java
================================================
/*
 *  UVCCamera
 *  library and sample to access to UVC web camera on non-rooted Android device
 *
 * Copyright (c) 2014-2017 saki t_saki@serenegiant.com
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 *
 *  All files in the folder are under this Apache License, Version 2.0.
 *  Files in the libjpeg-turbo, libusb, libuvc, rapidjson folder
 *  may have a different license, see the respective files.
 */

package com.serenegiant.usb;

import android.util.SparseArray;

public class USBVendorId {
	private static final SparseArray<String> IDS = new SparseArray<String>();

	public static String vendorName(final int vendor_id) {
		return IDS.get(vendor_id);
	}

	static {
		IDS.put(10006, "YUEN DA ELECTRONIC PRODUCTS FACTORY");
		IDS.put(10013, "Gionee Communication Equipment Co., Ltd. ShenZhen");
		IDS.put(10022, "Universal Electronics Inc. (dba: TVIEW)");
		IDS.put(1003, "Atmel Corporation");
		IDS.put(1006, "Mitsumi");
		IDS.put(1008, "HP Inc.");
		IDS.put(10112, "M31 Technology Corp.");
		IDS.put(10113, "Liteconn Co., Ltd.");
		IDS.put(10121, "Suzhou WEIJU Electronics Technology Co., Ltd.");
		IDS.put(10144, "Mondokey Limited");
		IDS.put(10149, "Advantest Corporation");
		IDS.put(10150, "iRobot Corporation");
		IDS.put(1020, "Elitegroup Computer Systems");
		IDS.put(1021, "Xilinx Inc.");
		IDS.put(10226, "Sibridge Tech.");
		IDS.put(1026, "ALi Corporation");
		IDS.put(1027, "Future Technology Devices International Limited");
		IDS.put(10275, "Dongguan Jiumutong Industry Co., Ltd.");
		IDS.put(10289, "Power Integrations");
		IDS.put(10291, "Oculus VR, Inc.");
		IDS.put(10300, "HIGH TEK HARNESS ENTERPRISE CO., LTD.");
		IDS.put(10316, "Full in Hope Co., Ltd.");
		IDS.put(1032, "Quanta Computer Inc.");
		IDS.put(10329, "Viconn Technology (HK) Co., Ltd.");
		IDS.put(1033, "NEC Corporation");
		IDS.put(1035, "Weltrend Semiconductor");
		IDS.put(1037, "VIA Technologies, Inc.");
		IDS.put(10374, "Seeed Technology Co., Ltd.");
		IDS.put(10375, "Specwerkz");
		IDS.put(1038, "MCCI Corporation");
		IDS.put(10398, "Esselte Leitz GmbH & Co. KG");
		IDS.put(10406, "E-SEEK Inc.");
		IDS.put(1041, "BUFFALO INC.");
		IDS.put(10423, "Pleora Technologies Inc.");
		IDS.put(10431, "Vitetech Int'l Co., Ltd.");
		IDS.put(1044, "Giga-Byte Technology Co., Ltd.");
		IDS.put(10446, "Changzhou Shi Wujin Miqi East Electronic Co., Ltd.");
		IDS.put(10457, "Shenzhen Ourconn Technology Co., Ltd.");
		IDS.put(10458, "G.SKILL Int'l Enterprice Co., Ltd.");
		IDS.put(1046, "Nuvoton Technology Corp.");
		IDS.put(10466, "Surplus Electronic Technology Co., Ltd.");
		IDS.put(10470, "BIAMP SYSTEMS");
		IDS.put(10509, "IBCONN Technologies (Shenzhen) Co., Ltd.");
		IDS.put(10510, "Fugoo Inc.");
		IDS.put(10519, "Pan Xin Precision Electronics Co., Ltd.");
		IDS.put(10530, "Dongguan Digi-in Digital Technology Co., Ltd.");
		IDS.put(1054, "Creative Labs");
		IDS.put(10540, "GENUSION, Inc.");
		IDS.put(10544, "Ineda Systems Inc.");
		IDS.put(10545, "Jolla Ltd.");
		IDS.put(10546, "Peraso Technologies, Inc.");
		IDS.put(10549, "Nanjing Magewell Electronics Co., Ltd.");
		IDS.put(10560, "Shenzhen Yiwanda Electronics Co., Ltd.");
		IDS.put(1057, "Nokia Corporation");
		IDS.put(10575, "Dollar Connection Ltd.");
		IDS.put(10595, "BIO-key International, Inc.");
		IDS.put(1060, "Microchip-SMSC");
		IDS.put(10603, "Xacti Corporation");
		IDS.put(10615, "Shenzhen Zowee Technology Co., Ltd.");
		IDS.put(10643, "ADPlaus Technology Limited");
		IDS.put(10646, "Unwired Technology");
		IDS.put(1065, "Cirrus Logic Inc.");
		IDS.put(10657, "Union Electric Plug & Connector Corp.");
		IDS.put(10674, "Canova Tech");
		IDS.put(10685, "Silicon Works");
		IDS.put(10695, "HANRICO ANFU ELECTRONICS CO., LTD.");
		IDS.put(10700, "Kodak Alaris");
		IDS.put(10702, "JGR Optics Inc.");
		IDS.put(10703, "Richtek Technology Corporation");
		IDS.put(10705, "Binatone Electronics Int. Ltd.");
		IDS.put(1071, "Molex Inc.");
		IDS.put(10715, "Shenzhen iBoard Technology Co., Ltd.");
		IDS.put(10719, "SMIT(HK) Limited");
		IDS.put(1072, "Fujitsu Component Limited");
		IDS.put(10725, "Dongguan Kechenda Electronic Technology Co., Ltd.");
		IDS.put(10726, "Fengshun Peiying Electro-Acoustic Co., Ltd.");
		IDS.put(10744, "MD ELEKTRONIK GmbH");
		IDS.put(10749, "Bad Elf, LLC");
		IDS.put(10770, "Vreo Limited");
		IDS.put(10772, "Kanex");
		IDS.put(10781, "Oxford Nanopore Technologies");
		IDS.put(10782, "Obsidian Technology");
		IDS.put(10783, "Lucent Trans Electronics Co., Ltd.");
		IDS.put(10784, "GUOGUANG GROUP CO., LTD.");
		IDS.put(10788, "CNPLUS");
		IDS.put(10789, "Fourstar Group");
		IDS.put(10790, "Tragant International Co., Ltd.");
		IDS.put(10791, "DongGuan LianGang Optoelectronic Technology Co., Ltd.");
		IDS.put(10797, "Atrust Computer Corp.");
		IDS.put(10798, "VIA Alliance Semiconductor Co., Ltd.");
		IDS.put(10799, "BSUN Electronics Co., Ltd.");
		IDS.put(1080, "Advanced Micro Devices");
		IDS.put(10807, "RTD Embedded Technologies, Inc.");
		IDS.put(10816, "Shenzhen Choseal Industrial Co., Ltd.");
		IDS.put(10817, "Canyon Semiconductor");
		IDS.put(10818, "Spectra7 Microsystems Corp.");
		IDS.put(10821, "Meizu Technology Co., Ltd.");
		IDS.put(10822, "Hubei Yingtong Telecommunication Cable Inc.");
		IDS.put(10829, "Wilder Technologies");
		IDS.put(10837, "Diodes Inc.");
		IDS.put(10846, "DuPont");
		IDS.put(1085, "Lexmark International Inc.");
		IDS.put(10852, "Zhejiang Songcheng Electronics Co., Ltd.");
		IDS.put(10859, "VSN Mobil");
		IDS.put(10875, "Bellwether Electronic Corp.");
		IDS.put(10878, "VAIO Corporation");
		IDS.put(10879, "Perixx Computer GmbH");
		IDS.put(10885, "HANK ELECTRONICS CO., LTD");
		IDS.put(10892, "Sonnet Technologies, Inc.");
		IDS.put(10893, "Keysight Technologies Inc.");
		IDS.put(10895, "Manutronics Vietnam Joint Stock Company");
		IDS.put(10900, "G2 Touch Co., Ltd.");
		IDS.put(10902, "Micromax Informatics Ltd");
		IDS.put(10910, "SEIKO SOLUTIONS Inc.");
		IDS.put(10912, "Casco Products Corp.");
		IDS.put(10922, "Virtium Technology, Inc.");
		IDS.put(10923, "Field and Company LLC, dba Leef USA");
		IDS.put(10928, "GM Global Technology Operations LLC");
		IDS.put(10931, "Key Asic Inc.");
		IDS.put(10943, "Revolabs, Inc.");
		IDS.put(10945, "Lattice Semiconductor Corp");
		IDS.put(10947, "Foshan Nanhai Saga Audio Equipment Co., Ltd.");
		IDS.put(10957, "Silergy Corp.");
		IDS.put(10963, "Shenzhen Hali-Power Industrial Co., Ltd.");
		IDS.put(10971, "I-PEX (Dai-ichi Seiko)");
		IDS.put(10973, "SEE-PLUS INDUSTRIAL LTD.");
		IDS.put(10990, "Adapt-IP Company");
		IDS.put(10997, "Libratone A/S");
		IDS.put(10999, "Shenzhen Hazens Automotive Electronics (SZ) Co., Ltd.");
		IDS.put(11000, "Jiangsu Toppower Automotive Electronics Co., Ltd.");
		IDS.put(11001, "Drapho Electronics Technology Co., Ltd.");
		IDS.put(1102, "Alps Electric Co., Ltd.");
		IDS.put(11022, "Le Shi Zhi Xin Electronic Technology (Tian Jin) Limited");
		IDS.put(11024, "Cardiac Insight, Inc.");
		IDS.put(11028, "EverPro Technologies Company, Ltd.");
		IDS.put(11029, "Rosenberger Hochfrequenztechnik");
		IDS.put(11035, "Dongguan City Sanji Electronics Co., Ltd.");
		IDS.put(11037, "Lintes Technology Co., Ltd.");
		IDS.put(11039, "KinnexA, Inc.");
		IDS.put(11042, "Metra Electronics Corp.");
		IDS.put(11044, "KeepKey, LLC");
		IDS.put(11047, "FluxData Incorporated");
		IDS.put(1105, "Texas Instruments");
		IDS.put(11061, "Assem Technology Co., Ltd.");
		IDS.put(11062, "Dongguan City Jianghan Electronics Co., Ltd.");
		IDS.put(11063, "Huizhou Desay SV Automotive Co., Ltd.");
		IDS.put(11064, "Ningbo Rixing Electronics Co., Ltd.");
		IDS.put(11069, "GuangDong YuanFeng Automotive Electroics Co., Ltd.");
		IDS.put(11080, "Sounding Audio Industrial Limited");
		IDS.put(11082, "Yueqing Huaxin Electronic Co., Ltd.");
		IDS.put(11098, "Universal Audio, Inc.");
		IDS.put(11111, "Lifesize, Inc.");
		IDS.put(11123, "Pioneer DJ Corporation");
		IDS.put(11124, "Embedded Intelligence, Inc.");
		IDS.put(11125, "New Matter");
		IDS.put(11126, "Shanghai Wingtech Electronic Technology Co., Ltd.");
		IDS.put(11127, "Epiphan Systems Inc.");
		IDS.put(11130, "Spin Master Far East Ltd.");
		IDS.put(11131, "Gigaset Digital Technology (Shenzhen) Co., Ltd.");
		IDS.put(11132, "Noveltek Semiconductor Corp.");
		IDS.put(11139, "Silicon Line GmbH");
		IDS.put(11140, "Ever Win International Corp.");
		IDS.put(11144, "Socionext Inc.");
		IDS.put(11145, "Ugreen Group Limited");
		IDS.put(11146, "Shanghai Pateo Electronic Equipment Mfg. Co., Ltd.");
		IDS.put(1115, "Renesas Electronics Corp.");
		IDS.put(11154, "i-BLADES, Inc.");
		IDS.put(11155, "Altia Systems Inc.");
		IDS.put(11156, "ShenZhen Baoyuanda Electronics Co., Ltd.");
		IDS.put(11157, "iST - Integrated Service Technology Inc.");
		IDS.put(11158, "HYUNDAI MOBIS Co., Ltd.");
		IDS.put(11161, "360fly, Inc.");
		IDS.put(11162, "HUIZHOU CHENG SHUO HARDWARE PLASTIC CO., LTD.");
		IDS.put(11163, "Zhongshan Aute Electronics Technology Co., Ltd.");
		IDS.put(11164, "Guangdong King Link Industrial Co., Ltd.");
		IDS.put(11167, "Scietera Technologies, Inc.");
		IDS.put(11168, "InVue Security Products");
		IDS.put(11169, "I-Sheng Electric Wire & Cable Co., Ltd.");
		IDS.put(11170, "China Daheng Group Inc Beijing Image Vision Tech Branch");
		IDS.put(11171, "Shenzhen FeiTianXia Technology Ltd.");
		IDS.put(11172, "Shenzhen HengJia New Energy Auto Part Co., Ltd.");
		IDS.put(11175, "77 Elektronika Kft.");
		IDS.put(11176, "YUDU EASON ELECTRONIC CO., LTD.");
		IDS.put(1118, "Microsoft Corporation");
		IDS.put(11181, "XIN JI (SHENZHEN) COMPUTER PARTS CO., LTD.");
		IDS.put(11189, "Silk ID Systems");
		IDS.put(11190, "3D Imaging & Simulations Corp. (3DISC)");
		IDS.put(11191, "Dongguan ChengXiang Industrial Co., Ltd.");
		IDS.put(11192, "OCC (Zhuhai) Electronic Co., Ltd.");
		IDS.put(11194, "Sinseader Electronic Co., Ltd.");
		IDS.put(11195, "DONGGUAN YELLOWKNIFE Industrial Co., Ltd.");
		IDS.put(11197, "RF Creations Ltd.");
		IDS.put(11198, "Chengyi Semiconductors (Shanghai) Co., Ltd.");
		IDS.put(11199, "Shenzhen Shinning Electronic Co., Ltd.");
		IDS.put(11200, "Shenzhen WFD Electronics Co., Ltd.");
		IDS.put(11201, "Dongguan Sino Syncs Industrial Co., Ltd.");
		IDS.put(11202, "JNTC Co., Ltd.");
		IDS.put(11208, "DONGGUAN POLIXIN ELECTRIC CO., LTD.");
		IDS.put(11209, "Tama Electric (Suzhou) Co., Ltd.");
		IDS.put(1121, "Primax Electronics");
		IDS.put(11210, "Exvision, Inc.");
		IDS.put(11216, "mophie, LLC");
		IDS.put(11219, "Dongguan ULT-unite electronic technology co., LTD");
		IDS.put(11220, "JL Audio, Inc.");
		IDS.put(11221, "Cable Matters Inc.");
		IDS.put(11222, "CoroWare, Inc.");
		IDS.put(11229, "Charm Sciences Inc.");
		IDS.put(1123, "EATON");
		IDS.put(11230, "Pickering Interfaces Limited");
		IDS.put(11231, "Hangzhou Hikvision Digital Technology Co., Ltd.");
		IDS.put(11232, "FULLINK ELECTRONICS TECHNOLOGY (SZ) LTD");
		IDS.put(11233, "AutoChips Inc.");
		IDS.put(11234, "Electric Connector Technology Co., Ltd.");
		IDS.put(11237, "LELTEK");
		IDS.put(11238, "Dongguan KaiWin Electronics Co., Ltd.");
		IDS.put(11239, "BEFS Co., Ltd.");
		IDS.put(11240, "Archisite, Inc.");
		IDS.put(11241, "Magneti Marelli S.p.A Electr BL");
		IDS.put(11246, "Ventev Mobile");
		IDS.put(11247, "Quanta Storage Inc.");
		IDS.put(11248, "Tech-Top Technology Limited");
		IDS.put(11253, "Shenzhen YOOBAO Technology Co., Ltd.");
		IDS.put(11254, "Shenzhen Sinotek Technology Co., Ltd.");
		IDS.put(11255, "KEYW");
		IDS.put(11256, "Visual Land Inc.");
		IDS.put(11264, "MEEM SL Ltd");
		IDS.put(11265, "Dongguan Arin Electronics Technology Co., Ltd.");
		IDS.put(11266, "DongGuan City JianNuo Electronics Co., Ltd.");
		IDS.put(11268, "Shenzhen XOX Electronics Co., Ltd.");
		IDS.put(11269, "Protop International Inc.");
		IDS.put(11270, "Microsemi Semiconductor (US) Inc.");
		IDS.put(11271, "Webcloak LLC");
		IDS.put(11272, "INVECAS INC.");
		IDS.put(11274, "ATANS Technology Inc.");
		IDS.put(11275, "Triple Win Precision Technology Co., Ltd.");
		IDS.put(11276, "IC Realtech");
		IDS.put(11277, "Embrava Pty Ltd");
		IDS.put(1128, "Wieson Technologies Co., Ltd.");
		IDS.put(11280, "Sinotronics Co., Ltd.");
		IDS.put(11281, "ALLBEST ELECTRONICS TECHNOLOGY CO., LTD.");
		IDS.put(11282, "Shenzhen Xin Kai Feng Electronics Factory");
		IDS.put(11283, "MOST WELL Technology Corp.");
		IDS.put(11284, "Buffalo Memory Co., Ltd.");
		IDS.put(11285, "Xentris Wireless");
		IDS.put(11286, "Priferential Accessories Ltd");
		IDS.put(11289, "Sunlike Technology Co., Ltd.");
		IDS.put(11290, "Young Fast Optoelectronics Co., Ltd.");
		IDS.put(11291, "ISAW Camera Inc");
		IDS.put(11298, "Qanba USA, LLC");
		IDS.put(11299, "Super Micro Computer Inc.");
		IDS.put(11302, "Micromax International Corporation");
		IDS.put(11304, "Granite River Labs Japan Ltd.");
		IDS.put(11305, "Coagent Enterprise Limited");
		IDS.put(11306, "LEIA Inc.");
		IDS.put(11309, "Shenzhen Ebull Technology Limited");
		IDS.put(1131, "American Megatrends");
		IDS.put(11310, "Hualun Technology Co., Ltd.");
		IDS.put(11311, "Sensel, Inc.");
		IDS.put(11319, "Shenzhen Adition Audio Science & Technology Co., Ltd.");
		IDS.put(11320, "Goldenconn Electronics Technology (Suzhou) Co., Ltd.");
		IDS.put(11321, "JIB Electronics Technology Co., Ltd.");
		IDS.put(11322, "Changzhou Shinco Automotive Electronics Co., Ltd.");
		IDS.put(11323, "Shenzhen Hangsheng Electronics Corp., Ltd.");
		IDS.put(11324, "Beartooth Radio, Inc.");
		IDS.put(11325, "Audience, A Knowles Company");
		IDS.put(11327, "Nextbit Systems, Inc.");
		IDS.put(11328, "Leadtrend");
		IDS.put(11329, "Adaptertek Technology Co., Ltd.");
		IDS.put(1133, "Logitech Inc.");
		IDS.put(11330, "Feature Integration Technology Inc.");
		IDS.put(11331, "Avegant Corporation");
		IDS.put(11335, "Chunghsin International Electronics Co., Ltd.");
		IDS.put(11336, "Delphi Electrical Centers (Shanghai) Co., Ltd.");
		IDS.put(11341, "VVETEK DOO");
		IDS.put(11347, "Huizhou Foryou General Electronics Co., Ltd.");
		IDS.put(11348, "LifeWatch Technologies Ltd.");
		IDS.put(11349, "Magicleap");
		IDS.put(11355, "Dongguan City Shenglan Electronics Co., LTD.");
		IDS.put(11356, "Neusoft Corporation");
		IDS.put(11357, "SIP Simya Electronics Technology Co., Ltd.");
		IDS.put(11358, "GNSD Automotive Co., Ltd.");
		IDS.put(11359, "YOODS Co., Ltd.");
		IDS.put(11360, "Sirin Mobile Technologies AG");
		IDS.put(11361, "Jadmam Corporation dba: Boytone");
		IDS.put(11373, "Gibson Innovations");
		IDS.put(11374, "Shen Zhen Xian Shuo Technology Co. LTD");
		IDS.put(11375, "PST Eletronica LTDA");
		IDS.put(11376, "PERI, Inc.");
		IDS.put(11377, "Bozhou BoTong Information Technology Co., Ltd.");
		IDS.put(11383, "Profindustry GmbH");
		IDS.put(11384, "BRAGI GmbH");
		IDS.put(11385, "WAWGD, Inc. (DBA: Foresight Sports)");
		IDS.put(11390, "Dongguan Allpass Electronic Co., Ltd.");
		IDS.put(11391, "SHENZHEN D-VITEC INDUSTRIAL CO., LTD.");
		IDS.put(11392, "motomobile AG");
		IDS.put(11393, "Indie Semiconductor");
		IDS.put(11397, "Audientes");
		IDS.put(11403, "Huizhou Dehong Technology Co., Ltd.");
		IDS.put(11404, "PowerCenter Technology Limited");
		IDS.put(11405, "Mizco International, Inc.");
		IDS.put(11408, "I. AM. PLUS, LLC");
		IDS.put(11409, "Corigine, Inc.");
		IDS.put(11410, "Ningbo Yinzhou Shengke Electronics Co., Ltd.");
		IDS.put(11417, "Prusa Research s.r.o.");
		IDS.put(11423, "e-Smart Systems Pvt. Ltd.");
		IDS.put(11424, "Leagtech Jiangxi Electronic Co., Ltd.");
		IDS.put(11425, "Dongguan Yujia Electronics Technology Co., Ltd.");
		IDS.put(11426, "GuangZhou MingPing Electronics Technology");
		IDS.put(11427, "DJI Technology Co., Ltd.");
		IDS.put(11428, "Shenzhen Alex Technology Co., Ltd.");
		IDS.put(11433, "JITS TECHNOLOGY CO., LIMITED");
		IDS.put(11434, "LIVV Brand llc");
		IDS.put(11444, "Ava Enterprises, Inc. dba: Boss Audio Systems");
		IDS.put(11448, "Shenzhen Sydixon Electronic Technology Co., Ltd.");
		IDS.put(11449, "On-Bright Electronics (Shanghai) Co., Ltd.");
		IDS.put(11450, "Dongguan Puxu Industrial Co., Ltd.");
		IDS.put(11451, "Shenzhen Soling Indusrtial Co., Ltd.");
		IDS.put(11453, "EGGCYTE, INC.");
		IDS.put(11455, "Donggguan Yuhua Electronic Co., Ltd.");
		IDS.put(11456, "Hangzhou Zero Zero Technology Co., Ltd.");
		IDS.put(11462, "Prodigy Technovations Pvt Ltd");
		IDS.put(11463, "EmergiTech, Inc");
		IDS.put(11464, "Hewlett Packard Enterprise");
		IDS.put(11465, "Monolithic Power Systems Inc.");
		IDS.put(11467, "USB Memory Direct");
		IDS.put(11468, "Silicon Mitus Inc.");
		IDS.put(11472, "Technics Global Electronics & JCE Co., Ltd.");
		IDS.put(11478, "Immersive Media");
		IDS.put(11479, "Cosemi Technologies Inc.");
		IDS.put(11481, "Cambrionix Ltd");
		IDS.put(11482, "CXUN Co. Ltd.");
		IDS.put(11483, "China Tsp Inc");
		IDS.put(11490, "Yanfeng Visteon (Chongqing) Automotive Electronics Co");
		IDS.put(11491, "Alcorlink Corp.");
		IDS.put(11492, "ISBC Ltd.");
		IDS.put(11493, "InX8 Inc dba: AKiTiO");
		IDS.put(11494, "SDAN Tecchnology Co., Ltd.");
		IDS.put(11495, "Lemobile Information Technology (Beijing) Co., Ltd.");
		IDS.put(11496, "GongGuan HWX Electronic Technology Co., Ltd.");
		IDS.put(11497, "Suzhu Jingshi Electronic Technology Co., Ltd.");
		IDS.put(11498, "Zhong Shan City Richsound Electronic Industrial Ltd.");
		IDS.put(11499, "Dongguang Kangbang Electronics Co., Ltd.");
		IDS.put(1151, "Plantronics, Inc.");
		IDS.put(1154, "Kyocera Corporation");
		IDS.put(1155, "STMicroelectronics");
		IDS.put(1161, "Foxconn / Hon Hai");
		IDS.put(1165, "ITE Tech Inc.");
		IDS.put(1177, "Yamaha Corporation");
		IDS.put(1188, "Hitachi, Ltd.");
		IDS.put(1191, "Visioneer");
		IDS.put(1193, "Canon Inc.");
		IDS.put(1200, "Nikon Corporation");
		IDS.put(1201, "Pan International");
		IDS.put(1204, "Cypress Semiconductor");
		IDS.put(1205, "ROHM Co., Ltd.");
		IDS.put(1207, "Compal Electronics, Inc.");
		IDS.put(1208, "Seiko Epson Corp.");
		IDS.put(1211, "I-O Data Device, Inc.");
		IDS.put(1221, "Fujitsu Ltd.");
		IDS.put(1227, "FUJIFILM Corporation");
		IDS.put(1238, "Mentor Graphics");
		IDS.put(1240, "Microchip Technology Inc.");
		IDS.put(1241, "Holtek Semiconductor, Inc.");
		IDS.put(1242, "Panasonic Corporation");
		IDS.put(1245, "Sharp Corporation");
		IDS.put(1250, "Exar Corporation");
		IDS.put(1254, "Identiv, Inc.");
		IDS.put(1256, "Samsung Electronics Co., Ltd.");
		IDS.put(1260, "Tokyo Electron Device Limited");
		IDS.put(1266, "Chicony Electronics Co., Ltd.");
		IDS.put(1271, "Newnex Technology Corp.");
		IDS.put(1273, "Brother Industries, Ltd.");
		IDS.put(1276, "SUNPLUS TECHNOLOGY CO., LTD.");
		IDS.put(1278, "PFU Limited");
		IDS.put(1281, "Fujikura/DDK");
		IDS.put(1282, "Acer, Inc.");
		IDS.put(1287, "Hosiden Corporation");
		IDS.put(1293, "Belkin International, Inc.");
		IDS.put(1300, "FCI Electronics");
		IDS.put(1302, "Longwell Electronics/Longwell Company");
		IDS.put(1305, "Star Micronics Co., LTD");
		IDS.put(1309, "American Power Conversion");
		IDS.put(1314, "ACON, Advanced-Connectek, Inc.");
		IDS.put(1343, "Synopsys, Inc.");
		IDS.put(1356, "Sony Corporation");
		IDS.put(1360, "Fuji Xerox Co., Ltd.");
		IDS.put(1367, "ATEN International Co. Ltd.");
		IDS.put(1369, "Cadence Design Systems, Inc.");
		IDS.put(1386, "WACOM Co., Ltd.");
		IDS.put(1389, "EIZO Corporation");
		IDS.put(1390, "Elecom Co., Ltd.");
		IDS.put(1394, "Conexant Systems, Inc.");
		IDS.put(1398, "BAFO/Quality Computer Accessories");
		IDS.put(1403, "Y-E Data, Inc.");
		IDS.put(1404, "AVM GmbH");
		IDS.put(1410, "Roland Corporation");
		IDS.put(1412, "RATOC Systems, Inc.");
		IDS.put(1419, "Infineon Technologies");
		IDS.put(1423, "Alcor Micro, Corp.");
		IDS.put(1424, "OMRON Corporation");
		IDS.put(1447, "Bose Corporation");
		IDS.put(1449, "OmniVision Technologies, Inc.");
		IDS.put(1452, "Apple");
		IDS.put(1453, "Y.C. Cable U.S.A., Inc");
		IDS.put(14627, "National Instruments");
		IDS.put(1470, "Tyco Electronics Corp., a TE Connectivity Ltd. company");
		IDS.put(1473, "MegaChips Corporation");
		IDS.put(1478, "Qualcomm, Inc");
		IDS.put(1480, "Foxlink/Cheng Uei Precision Industry Co., Ltd.");
		IDS.put(1482, "Ricoh Company Ltd.");
		IDS.put(1498, "Microtek International Inc.");
		IDS.put(1504, "Symbol Technologies");
		IDS.put(1507, "Genesys Logic, Inc.");
		IDS.put(1509, "Fuji Electric Co., Ltd.");
		IDS.put(1525, "Unixtar Technology Inc.");
		IDS.put(1529, "Datalogic ADC");
		IDS.put(1535, "LeCroy Corporation");
		IDS.put(1539, "Novatek Microelectronics Corp.");
		IDS.put(1545, "SMK Manufacturing Inc.");
		IDS.put(1551, "Joinsoon Electronics Mfg. Co., Ltd.");
		IDS.put(1555, "TransAct Technologies Incorporated");
		IDS.put(1561, "Seiko Instruments Inc.");
		IDS.put(1582, "JPC/MAIN SUPER Inc.");
		IDS.put(1583, "Sin Sheng Terminal & Machine Inc.");
		IDS.put(1593, "Chrontel, Inc.");
		IDS.put(1611, "Analog Devices, Inc. Development Tools");
		IDS.put(1612, "Ji-Haw Industrial Co., Ltd");
		IDS.put(1614, "Suyin Corporation");
		IDS.put(1621, "Space Shuttle Hi-Tech Co.,Ltd.");
		IDS.put(1622, "Glory Mark Electronic Ltd.");
		IDS.put(1623, "Tekcon Electronics Corp.");
		IDS.put(1624, "Sigma Designs, Inc.");
		IDS.put(1631, "Good Way Technology Co., Ltd. & GWC technology Inc");
		IDS.put(1632, "TSAY-E (BVI) International Inc.");
		IDS.put(1633, "Hamamatsu Photonics K.K.");
		IDS.put(1642, "Total Technologies, Ltd.");
		IDS.put(1659, "Prolific Technology, Inc.");
		IDS.put(16700, "Dell Inc.");
		IDS.put(1680, "Golden Bridge Electech Inc.");
		IDS.put(1689, "Tektronix, Inc.");
		IDS.put(1690, "Askey Computer Corporation");
		IDS.put(1709, "Greatland Electronics Taiwan Ltd.");
		IDS.put(1710, "Eurofins Digital Testing Belgium");
		IDS.put(1720, "Pixela Corporation");
		IDS.put(1724, "Oki Data Corporation");
		IDS.put(1727, "Leoco Corporation");
		IDS.put(1732, "Bizlink Technology, Inc.");
		IDS.put(1736, "SIIG, Inc.");
		IDS.put(1747, "Mitsubishi Electric Corporation");
		IDS.put(1758, "Heisei Technology Co., Ltd.");
		IDS.put(1802, "Oki Electric Industry Co., Ltd.");
		IDS.put(1805, "Comoss Electronic Co., Ltd.");
		IDS.put(1809, "Magic Control Technology Corp.");
		IDS.put(1816, "Imation Corp.");
		IDS.put(1838, "Sunix Co., Ltd.");
		IDS.put(1846, "Lorom Industrial Co., Ltd.");
		IDS.put(1848, "Mad Catz, Inc.");
		IDS.put(1899, "HID Global GmbH");
		IDS.put(1901, "Denso Corporation");
		IDS.put(1913, "Fairchild Semiconductor");
		IDS.put(1921, "SanDisk Corporation");
		IDS.put(1937, "Copartner Technology Corporation");
		IDS.put(1954, "National Technical Systems");
		IDS.put(1971, "Plustek, Inc.");
		IDS.put(1972, "OLYMPUS CORPORATION");
		IDS.put(1975, "TIME Interconnect Ltd.");
		IDS.put(1994, "AVerMedia Technologies, Inc.");
		IDS.put(1999, "Casio Computer Co., Ltd.");
		IDS.put(2015, "David Electronics Company, Ltd.");
		IDS.put(2039, "Century Corporation");
		IDS.put(2058, "Evermuch Technology Co., Ltd.");
		IDS.put(2101, "Action Star Enterprise Co., Ltd.");
		IDS.put(2112, "Argosy Research Inc.");
		IDS.put(2122, "Wipro Limited");
		IDS.put(2159, "MEC IMEX INC/HPT");
		IDS.put(2205, "Icron Technologies Corporation");
		IDS.put(2247, "TAI TWUN ENTERPRISE CO., LTD.");
		IDS.put(2276, "Pioneer Corporation");
		IDS.put(2278, "Gemalto SA");
		IDS.put(2310, "FARADAY Technology Corp.");
		IDS.put(2313, "Audio-Technica Corp.");
		IDS.put(2316, "Silicon Motion, Inc. - Taiwan");
		IDS.put(2334, "Garmin International");
		IDS.put(2352, "Toshiba Corporation");
		IDS.put(2362, "Pixart Imaging, Inc.");
		IDS.put(2363, "Plextor LLC");
		IDS.put(2366, "J.S.T. Mfg. Co., Ltd.");
		IDS.put(2385, "Kingston Technology Company");
		IDS.put(2389, "NVIDIA");
		IDS.put(2395, "Medialogic Corporation");
		IDS.put(2397, "Polycom, Inc.");
		IDS.put(2468, "Contech Research, Inc.");
		IDS.put(2472, "Lin Shiung Enterprise Co., Ltd.");
		IDS.put(2475, "Japan Cash Machine Co., Ltd.");
		IDS.put(2498, "NISCA Corporation");
		IDS.put(2511, "Electronics Testing Center, Taiwan");
		IDS.put(2522, "A-FOUR TECH CO., LTD.");
		IDS.put(2555, "Altera");
		IDS.put(2578, "Cambridge Silicon Radio Ltd.");
		IDS.put(2583, "HOYA Corporation");
		IDS.put(2631, "Hirose Electric Co., Ltd.");
		IDS.put(2636, "COMPUTEX Co., Ltd.");
		IDS.put(2640, "Mimaki Engineering Co., Ltd.");
		IDS.put(2652, "Broadcom Corp.");
		IDS.put(2667, "Green House Co., Ltd.");
		IDS.put(2702, "Japan Aviation Electronics Industry Ltd. (JAE)");
		IDS.put(2727, "Wincor Nixdorf GmbH & Co KG");
		IDS.put(2733, "Rohde & Schwarz GmbH & Co. KG");
		IDS.put(2787, "Allion Labs, Inc.");
		IDS.put(2821, "ASUSTek Computer Inc.");
		IDS.put(2849, "Yokogawa Electric Corporation");
		IDS.put(2851, "Pan-Asia Electronics Co., Ltd.");
		IDS.put(2894, "Musical Electronics Ltd.");
		IDS.put(2907, "Anritsu Corporation");
		IDS.put(2922, "Maxim Integrated Products");
		IDS.put(2965, "ASIX Electronics Corporation");
		IDS.put(2967, "O2Micro, Inc.");
		IDS.put(3010, "Seagate Technology LLC");
		IDS.put(3034, "Realtek Semiconductor Corp.");
		IDS.put(3035, "Ericsson AB");
		IDS.put(3044, "Elka International Ltd.");
		IDS.put(3056, "Pace Micro Technology PLC");
		IDS.put(3108, "Taiyo Yuden Co., Ltd.");
		IDS.put(3129, "Aeroflex");
		IDS.put(3132, "Radius Co., Ltd.");
		IDS.put(3141, "Sonix Technology Co., Ltd.");
		IDS.put(3158, "Billion Bright (HK) Corporation Limited");
		IDS.put(3161, "Dong Guan Shinko Wire Co., Ltd.");
		IDS.put(3170, "Chant Sincere Co., Ltd");
		IDS.put(3190, "Solid State System Co., Ltd.");
		IDS.put(3209, "Honda Tsushin Kogyo Co., Ltd");
		IDS.put(3245, "Motorola Solutions");
		IDS.put(3255, "Singatron Enterprise Co. Ltd.");
		IDS.put(3268, "emsys Embedded Systems GmbH");
		IDS.put(32902, "Intel Corporation");
		IDS.put(3294, "Z-Com INC.");
		IDS.put(3313, "e-CONN ELECTRONIC CO., LTD.");
		IDS.put(3314, "ENE Technology Inc.");
		IDS.put(3351, "NALTEC, Inc.");
		IDS.put(3402, "NF Corporation");
		IDS.put(3403, "Grape Systems Inc.");
		IDS.put(3409, "Volex (Asia) Pte Ltd");
		IDS.put(3425, "MEILU ELECTRONICS (SHENZHEN) CO., LTD.");
		IDS.put(3441, "Hirakawa Hewtech Corp.");
		IDS.put(3452, "Taiwan Line Tek Electronic Co., Ltd.");
		IDS.put(3463, "Dolby Laboratories Inc.");
		IDS.put(3468, "C-MEDIA ELECTRONICS INC.");
		IDS.put(3472, "Sure-Fire Electrical Corporation");
		IDS.put(3495, "IOGEAR, Inc.");
		IDS.put(3504, "Micro-Star International Co., Ltd.");
		IDS.put(3537, "Contek Electronics Co., Ltd.");
		IDS.put(3540, "Custom Engineering SPA");
		IDS.put(3641, "Smart Modular Technologies, Inc.");
		IDS.put(3658, "Shenzhen Bao Hing Electric Wire & Cable Mfr. Co.");
		IDS.put(3673, "Bourns, Inc.");
		IDS.put(3690, "Megawin Technology Co., Ltd.");
		IDS.put(3698, "Hsi-Chin Electronics Co., Ltd.");
		IDS.put(3714, "Ching Tai Electric Wire & Cable Co., Ltd.");
		IDS.put(3724, "Well Force Electronic Co., Ltd");
		IDS.put(3725, "MediaTek Inc.");
		IDS.put(3728, "CRU");
		IDS.put(3744, "Ours Technology Inc.");
		IDS.put(3762, "Y-S ELECTRONIC CO., LTD.");
		IDS.put(3778, "Sweetray Industrial Ltd.");
		IDS.put(3779, "Axell Corporation");
		IDS.put(3782, "InnoVISION Multimedia Limited");
		IDS.put(3790, "TaiSol Electronics Co., Ltd.");
		IDS.put(3812, "Sunrich Technology (H.K.) Ltd.");
		IDS.put(3868, "Funai Electric Co., Ltd.");
		IDS.put(3873, "IOI Technology Corporation");
		IDS.put(3890, "YFC-BonEagle Electric Co., Ltd.");
		IDS.put(3896, "Nien-Yi Industrial Corp.");
		IDS.put(3916, "WORLDWIDE CABLE OPTO CORP.");
		IDS.put(3923, "Taiyo Cable (Dongguan) Co. Ltd.");
		IDS.put(3924, "Kawai Musical Instruments Mfg. Co., Ltd.");
		IDS.put(3936, "GuangZhou Chief Tech Electronic Technology Co. Ltd.");
		IDS.put(3944, "UQUEST, LTD.");
		IDS.put(3991, "CviLux Corporation");
		IDS.put(4003, "Chief Land Electronic Co., Ltd.");
		IDS.put(4046, "Sony Mobile Communications");
		IDS.put(4087, "CHI SHING COMPUTER ACCESSORIES CO., LTD.");
		IDS.put(4096, "Speed Tech Corp.");
		IDS.put(4100, "LG Electronics Inc.");
		IDS.put(4101, "Apacer Technology Inc.");
		IDS.put(4134, "Newly Corporation");
		IDS.put(4168, "Targus Group International");
		IDS.put(4172, "AMCO TEC International Inc.");
		IDS.put(4183, "ON Semiconductor");
		IDS.put(4184, "Western Digital Technologies, Inc.");
		IDS.put(4227, "CANON ELECTRONICS INC.");
		IDS.put(4235, "Grand-tek Technology Co., Ltd.");
		IDS.put(4236, "Robert Bosch GmbH");
		IDS.put(4238, "Lotes Co., Ltd.");
		IDS.put(4266, "Cables To Go");
		IDS.put(4267, "Universal Global Scientific Industrial Co., Ltd.");
		IDS.put(4292, "Silicon Laboratories, Inc.");
		IDS.put(4301, "Kycon Inc.");
		IDS.put(4362, "Moxa Inc.");
		IDS.put(4370, "Golden Bright (Sichuan) Electronic Technology Co Ltd");
		IDS.put(4382, "VSO ELECTRONICS CO., LTD.");
		IDS.put(4398, "Master Hill Electric Wire and Cable Co., Ltd.");
		IDS.put(4477, "Santa Electronic Inc.");
		IDS.put(4505, "Sierra Wireless Inc.");
		IDS.put(4522, "GlobalMedia Group, LLC");
		IDS.put(4528, "ATECH FLASH TECHNOLOGY");
		IDS.put(4643, "SKYCABLE ENTERPRISE CO., LTD.");
		IDS.put(4703, "ADATA Technology Co., Ltd.");
		IDS.put(4716, "Aristocrat Technologies");
		IDS.put(4717, "Bel Stewart");
		IDS.put(4742, "MARVELL SEMICONDUCTOR, INC.");
		IDS.put(4756, "RISO KAGAKU CORP.");
		IDS.put(4792, "Zhejiang Xinya Electronic Technology Co., Ltd.");
		IDS.put(4817, "Huawei Technologies Co., Ltd.");
		IDS.put(4823, "Better Holdings (HK) Limited");
		IDS.put(4907, "Konica Minolta, Inc.");
		IDS.put(4925, "Jasco Products Company");
		IDS.put(4989, "Pericom Semiconductor Corp.");
		IDS.put(5008, "TomTom International B.V.");
		IDS.put(5075, "AzureWave Technologies, Inc.");
		IDS.put(5117, "Initio Corporation");
		IDS.put(5118, "Phison Electronics Corp.");
		IDS.put(5134, "Telechips, Inc.");
		IDS.put(5145, "ABILITY ENTERPRISE CO., LTD.");
		IDS.put(5148, "Leviton Manufacturing");
		IDS.put(5271, "Panstrong Company Ltd.");
		IDS.put(5293, "CTK Corporation");
		IDS.put(5296, "StarTech.com Ltd.");
		IDS.put(5376, "Ellisys");
		IDS.put(5404, "VeriSilicon Holdings Co., Ltd.");
		IDS.put(5421, "JMicron Technology Corp.");
		IDS.put(5422, "HLDS (Hitachi-LG Data Storage, Inc.)");
		IDS.put(5440, "Phihong Technology Co., Ltd.");
		IDS.put(5451, "PNY Technologies Inc.");
		IDS.put(5453, "Rapid Conn, Connect County Holdings Bhd");
		IDS.put(5454, "D & M Holdings, Inc.");
		IDS.put(5480, "Sunf Pu Technology Co., Ltd");
		IDS.put(5488, "ALLTOP TECHNOLOGY CO., LTD.");
		IDS.put(5510, "Palconn Technology Co., Ltd.");
		IDS.put(5528, "Kunshan Guoji Electronics Co., Ltd.");
		IDS.put(5546, "DongGuan Ya Lian Electronics Co., Ltd.");
		IDS.put(5645, "Samtec");
		IDS.put(5694, "HongLin Electronics Co., Ltd.");
		IDS.put(5753, "Total Phase");
		IDS.put(5766, "ZOOM Corporation");
		IDS.put(5836, "silex technology, Inc.");
		IDS.put(5946, "F. Hoffmann-La Roche AG");
		IDS.put(5960, "MQP Electronics Ltd.");
		IDS.put(5964, "ASMedia Technology Inc.");
		IDS.put(5998, "UD electronic corp.");
		IDS.put(6001, "Shenzhen Alex Connector Co., Ltd.");
		IDS.put(6002, "System Level Solutions, Inc.");
		IDS.put(6018, "Spreadtrum Hong Kong Limited");
		IDS.put(6024, "ShenZhen Litkconn Technology Co., Ltd.");
		IDS.put(6053, "Advanced Connection Technology Inc.");
		IDS.put(6095, "Hip Hing Cable & Plug Mfy. Ltd.");
		IDS.put(6121, "DisplayLink (UK) Ltd.");
		IDS.put(6127, "Lenovo");
		IDS.put(6133, "K.K. Rocky");
		IDS.put(6160, "Wanshih Electronic Co., Ltd.");
		IDS.put(6185, "Dongguan YuQiu Electronics Co., Ltd.");
		IDS.put(6193, "Gwo Jinn Industries Co., Ltd.");
		IDS.put(6297, "Linkiss Co., Ltd.");
		IDS.put(6353, "Google Inc.");
		IDS.put(6394, "Kuang Ying Computer Equipment Co., Ltd.");
		IDS.put(6421, "Nordic Semiconductor ASA");
		IDS.put(6448, "Shenzhen Xianhe Technology Co., Ltd.");
		IDS.put(6449, "Ningbo Broad Telecommunication Co., Ltd.");
		IDS.put(6470, "Irisguard UK Ltd");
		IDS.put(6473, "Lab126");
		IDS.put(6481, "Hyperstone GmbH");
		IDS.put(6487, "BIOS Corporation");
		IDS.put(6626, "Solomon Systech Limited");
		IDS.put(6639, "Pak Heng Technology (Shenzhen) Co., Ltd.");
		IDS.put(6655, "Best Buy China Ltd.");
		IDS.put(6666, "USB-IF non-workshop");
		IDS.put(6709, "Artesyn Technologies Inc.");
		IDS.put(6720, "TERMINUS TECHNOLOGY INC.");
		IDS.put(6766, "Global Unichip Corp.");
		IDS.put(6786, "Proconn Technology Co., Ltd.");
		IDS.put(6794, "Simula Technology Inc.");
		IDS.put(6795, "SGS Taiwan Ltd.");
		IDS.put(6830, "Johnson Component & Equipments Co., Ltd.");
		IDS.put(6834, "Allied Vision Technologies GmbH");
		IDS.put(6859, "Salcomp Plc");
		IDS.put(6865, "Desan Wire Co., Ltd.");
		IDS.put(6944, "MStar Semiconductor, Inc.");
		IDS.put(6984, "Plastron Precision Co., Ltd.");
		IDS.put(7013, "The Hong Kong Standards and Testing Centre Ltd.");
		IDS.put(7048, "ShenMing Electron (Dong Guan) Co., Ltd.");
		IDS.put(7086, "Vuzix Corporation");
		IDS.put(7108, "Ford Motor Co.");
		IDS.put(7118, "Contac Cable Industrial Limited");
		IDS.put(7119, "Sunplus Innovation Technology Inc.");
		IDS.put(7120, "Hangzhou Riyue Electronics Co., Ltd.");
		IDS.put(7158, "Orient Semiconductor Electronics, Ltd.");
		IDS.put(7207, "SHENZHEN DNS INDUSTRIES CO., LTD.");
		IDS.put(7217, "LS Mtron Ltd.");
		IDS.put(7229, "NONIN MEDICAL INC.");
		IDS.put(7275, "Philips & Lite-ON Digital Solutions Corporation");
		IDS.put(7310, "ASTRON INTERNATIONAL CORP.");
		IDS.put(7320, "ALPINE ELECTRONICS, INC.");
		IDS.put(7347, "Aces Electronics Co., Ltd.");
		IDS.put(7348, "OPEX CORPORATION");
		IDS.put(7390, "Telecommunications Technology Association (TTA)");
		IDS.put(7434, "Visteon Corporation");
		IDS.put(7465, "Horng Tong Enterprise Co., Ltd.");
		IDS.put(7501, "Pegatron Corporation");
		IDS.put(7516, "Fresco Logic Inc.");
		IDS.put(7529, "Walta Electronic Co., Ltd.");
		IDS.put(7543, "Yueqing Changling Electronic Instrument Corp., Ltd.");
		IDS.put(7584, "Parade Technologies, Inc.");
		IDS.put(7647, "L&T Technology Services");
		IDS.put(7649, "Actions Microelectronics Co., Ltd.");
		IDS.put(7666, "China Telecommunication Technology Labs - Terminals");
		IDS.put(7668, "SHEN ZHEN FORMAN PRECISION INDUSTRY CO., LTD.");
		IDS.put(7682, "GLOBEMASTER TECHNOLOGIES CO., LTD.");
		IDS.put(7696, "Point Grey Research Inc.");
		IDS.put(7751, "HUNG TA H.T.ENTERPRISE CO., LTD.");
		IDS.put(7758, "Etron Technology, Inc.");
		IDS.put(7795, "COMLINK ELECTRONICS CO., LTD.");
		IDS.put(7818, "HIBEST Electronic (DongGuan) Co., Ltd.");
		IDS.put(7825, "Other World Computing");
		IDS.put(7863, "WIN WIN PRECISION INDUSTRIAL CO., LTD.");
		IDS.put(7879, "Gefen Inc.");
		IDS.put(7881, "MOSER BAER INDIA LIMITED");
		IDS.put(7898, "AIRTIES WIRELESS NETWORKS");
		IDS.put(7956, "Astoria Networks GmbH");
		IDS.put(7969, "Scosche Industries");
		IDS.put(7976, "Cal-Comp Electronics & Communications");
		IDS.put(7977, "Analogix Semiconductor, Inc.");
		IDS.put(7989, "Amphenol ShouhMin Industry (ShenZhen) Co., Ltd");
		IDS.put(7996, "Chang Yang Electronics Company Ltd.");
		IDS.put(8073, "Dongguan Goldconn Electronics Co., Ltd.");
		IDS.put(8074, "Morning Star Industrial Co., Ltd.");
		IDS.put(8117, "Unify Software and Solutions GmbH & Co. KG");
		IDS.put(8137, "NXP Semiconductors");
		IDS.put(8181, "Changzhou Wujin BEST Electronic Cables Co., Ltd.");
		IDS.put(8205, "Belkin Electronic (Changzhou) Co., Ltd.");
		IDS.put(8220, "Freeport Resources Enterprises Corp.");
		IDS.put(8222, "Qingdao Haier Telecom Co., Ltd.");
		IDS.put(8284, "Shenzhen Tronixin Electronics Co., Ltd.");
		IDS.put(8294, "Unicorn Electronics Components Co., Ltd.");
		IDS.put(8334, "Luxshare-ICT");
		IDS.put(8341, "CE LINK LIMITED");
		IDS.put(8342, "Microconn Electronic Co., Ltd.");
		IDS.put(8367, "Shenzhen CARVE Electronics Co., Ltd.");
		IDS.put(8382, "BURY GmbH & Co. KG");
		IDS.put(8384, "FENGHUA KINGSUN CO., LTD.");
		IDS.put(8386, "Sumitomo Electric Ind., Ltd., Optical Comm. R&D Lab");
		IDS.put(8439, "XIMEA s.r.o.");
		IDS.put(8457, "VIA Labs, Inc.");
		IDS.put(8492, "Shenzhen Linoya Electronic Co., Ltd.");
		IDS.put(8494, "Amphenol AssembleTech (Xiamen) Co., Ltd.");
		IDS.put(8524, "Y Soft Corporation");
		IDS.put(8550, "JVC KENWOOD Corporation");
		IDS.put(8564, "Transcend Information, Inc.");
		IDS.put(8566, "TMC/Allion Test Labs");
		IDS.put(8613, "Genesis Technology USA, Inc.");
		IDS.put(8627, "Dongguan Teconn Electronics Technology Co., Ltd.");
		IDS.put(8644, "Netcom Technology (HK) Limited");
		IDS.put(8659, "Compupack Technology Co., Ltd.");
		IDS.put(8667, "G-Max Technology Co., Ltd.");
		IDS.put(8679, "Sagemcom Broadband SAS");
		IDS.put(8695, "Wuerth-Elektronik eiSos GmbH & Co. KG");
		IDS.put(8707, "Shin Shin Co., Ltd.");
		IDS.put(8709, "3eYamaichi Electronics Co., Ltd.");
		IDS.put(8710, "Wiretek International Investment Ltd.");
		IDS.put(8711, "Fuzhou Rockchip Electronics Co., Ltd.");
		IDS.put(8752, "Plugable Technologies");
		IDS.put(8756, "T-CONN PRECISION CORPORATION");
		IDS.put(8831, "Granite River Labs");
		IDS.put(8842, "Hotron Precision Electronic Ind. Corp.");
		IDS.put(8875, "Trigence Semiconductor, Inc.");
		IDS.put(8888, "Motorola Mobility Inc.");
		IDS.put(8904, "Karming Electronic (Shenzhen) Co., Ltd.");
		IDS.put(8981, "Avery Design Systems, Inc.");
		IDS.put(8993, "iKingdom Corp. (d.b.a. iConnectivity)");
		IDS.put(9051, "KangXiang Electronic Co., Ltd.");
		IDS.put(9068, "ZheJiang Chunsheng Electronics Co., Ltd.");
		IDS.put(9130, "DOK (HK) Trading Limited");
		IDS.put(9132, "Marunix Electron Limited");
		IDS.put(9165, "Avconn Precise Connector Co., Ltd.");
		IDS.put(9184, "BitifEye Digital Test Solutions GmbH");
		IDS.put(9205, "Speed Conn Co., Ltd.");
		IDS.put(9222, "INSIDE Secure");
		IDS.put(9292, "Minebea Co., Ltd.");
		IDS.put(9299, "BAANTO");
		IDS.put(9338, "Suzhou Jutze Technologies Co., Ltd");
		IDS.put(9355, "DONGGUAN SYNCONN PRECISION INDUSTRY CO. LTD.");
		IDS.put(9382, "Shenzhen Pangngai Industrial Co., Ltd.");
		IDS.put(9422, "Shenzhen Deren Electronic Co., Ltd.");
		IDS.put(9424, "Smith Micro Software, Inc.");
		IDS.put(9453, "ZEN FACTORY GROUP (ASIA) LTD.");
		IDS.put(9481, "Chain-In Electronic Co., Ltd.");
		IDS.put(9514, "SUZHOU KELI TECHNOLOGY DEVELOPMENT CO., LTD.");
		IDS.put(9515, "TOP Exactitude Industry (ShenZhen) Co., Ltd.");
		IDS.put(9525, "ShenZhen Hogend Precision Technology Co., Ltd.");
		IDS.put(9527, "Norel Systems Ltd.");
		IDS.put(9556, "ASSA ABLOY AB");
		IDS.put(9575, "DongGuan LongTao Electronic Co., Ltd.");
		IDS.put(9577, "DongGuan City MingJi Electronics Co., Ltd.");
		IDS.put(9589, "Weida Hi-Tech Co., Ltd.");
		IDS.put(9593, "Dongguan Wisechamp Electronic Co., Ltd.");
		IDS.put(9613, "Sequans Communications");
		IDS.put(9636, "ALGOLTEK, INC.");
		IDS.put(9651, "DongGuan Elinke Industrial Co., Ltd.");
		IDS.put(9679, "Corning Optical Communications LLC");
		IDS.put(9714, "Dongguan Jinyue Electronics Co., Ltd.");
		IDS.put(9723, "RICOH IMAGING COMPANY, LTD.");
		IDS.put(9742, "DongGuan HYX Industrial Co., Ltd.");
		IDS.put(9753, "Advanced Silicon SA");
		IDS.put(9756, "EISST Limited");
		IDS.put(9771, "YTOP Electronics Technical (Kunshan) Co., Ltd.");
		IDS.put(9841, "Innovative Logic");
		IDS.put(9842, "GoPro");
		IDS.put(9846, "Basler AG");
		IDS.put(9851, "Palpilot International Corp.");
		IDS.put(9896, "UNIREX CORPORATION");
		IDS.put(9917, "Integral Memory Plc.");
		IDS.put(9973, "Morning Star Digital Connector Co., Ltd.");
		IDS.put(9984, "MITACHI CO., LTD.");
		IDS.put(9999, "HGST, a Western Digital Company");
	}
}


================================================
FILE: libuvccamera/src/main/java/com/serenegiant/usb/UVCCamera.java
================================================
/*
 *  UVCCamera
 *  library and sample to access to UVC web camera on non-rooted Android device
 *
 * Copyright (c) 2014-2017 saki t_saki@serenegiant.com
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 *
 *  All files in the folder are under this Apache License, Version 2.0.
 *  Files in the libjpeg-turbo, libusb, libuvc, rapidjson folder
 *  may have a different license, see the respective files.
 */

package com.serenegiant.usb;

import java.util.ArrayList;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.graphics.SurfaceTexture;
import android.hardware.usb.UsbDevice;
import android.text.TextUtils;
import android.util.Log;
import android.view.Surface;
import android.view.SurfaceHolder;

import com.serenegiant.usb.USBMonitor.UsbControlBlock;

public class UVCCamera {
	private static final boolean DEBUG = false;	// TODO set false when releasing
	private static final String TAG = UVCCamera.class.getSimpleName();
	private static final String DEFAULT_USBFS = "/dev/bus/usb";

	public static final int DEFAULT_PREVIEW_WIDTH = 640;
	public static final int DEFAULT_PREVIEW_HEIGHT = 480;
	public static final int DEFAULT_PREVIEW_MODE = 0;
	public static final int DEFAULT_PREVIEW_MIN_FPS = 1;
	public static final int DEFAULT_PREVIEW_MAX_FPS = 30;
	public static final float DEFAULT_BANDWIDTH = 1.0f;

	public static final int FRAME_FORMAT_YUYV = 0;
	public static final int FRAME_FORMAT_MJPEG = 1;

	public static final int PIXEL_FORMAT_RAW = 0;
	public static final int PIXEL_FORMAT_YUV = 1;
	public static final int PIXEL_FORMAT_RGB565 = 2;
	public static final int PIXEL_FORMAT_RGBX = 3;
	public static final int PIXEL_FORMAT_YUV420SP = 4;
	public static final int PIXEL_FORMAT_NV21 = 5;		// = YVU420SemiPlanar

	//--------------------------------------------------------------------------------
    public static final int	CTRL_SCANNING		= 0x00000001;	// D0:  Scanning Mode
    public static final int CTRL_AE				= 0x00000002;	// D1:  Auto-Exposure Mode
    public static final int CTRL_AE_PRIORITY	= 0x00000004;	// D2:  Auto-Exposure Priority
    public static final int CTRL_AE_ABS			= 0x00000008;	// D3:  Exposure Time (Absolute)
    public static final int CTRL_AR_REL			= 0x00000010;	// D4:  Exposure Time (Relative)
    public static final int CTRL_FOCUS_ABS		= 0x00000020;	// D5:  Focus (Absolute)
    public static final int CTRL_FOCUS_REL		= 0x00000040;	// D6:  Focus (Relative)
    public static final int CTRL_IRIS_ABS		= 0x00000080;	// D7:  Iris (Absolute)
    public static final int CTRL_IRIS_REL		= 0x00000100;	// D8:  Iris (Relative)
    public static final int CTRL_ZOOM_ABS		= 0x00000200;	// D9:  Zoom (Absolute)
    public static final int CTRL_ZOOM_REL		= 0x00000400;	// D10: Zoom (Relative)
    public static final int CTRL_PANTILT_ABS	= 0x00000800;	// D11: PanTilt (Absolute)
    public static final int CTRL_PANTILT_REL	= 0x00001000;	// D12: PanTilt (Relative)
    public static final int CTRL_ROLL_ABS		= 0x00002000;	// D13: Roll (Absolute)
    public static final int CTRL_ROLL_REL		= 0x00004000;	// D14: Roll (Relative)
    public static final int CTRL_FOCUS_AUTO		= 0x00020000;	// D17: Focus, Auto
    public static final int CTRL_PRIVACY		= 0x00040000;	// D18: Privacy
    public static final int CTRL_FOCUS_SIMPLE	= 0x00080000;	// D19: Focus, Simple
    public static final int CTRL_WINDOW			= 0x00100000;	// D20: Window

    public static final int PU_BRIGHTNESS		= 0x80000001;	// D0: Brightness
    public static final int PU_CONTRAST			= 0x80000002;	// D1: Contrast
    public static final int PU_HUE				= 0x80000004;	// D2: Hue
    public static final int PU_SATURATION		= 0x80000008;	// D3: Saturation
    public static final int PU_SHARPNESS		= 0x80000010;	// D4: Sharpness
    public static final int PU_GAMMA			= 0x80000020;	// D5: Gamma
    public static final int PU_WB_TEMP			= 0x80000040;	// D6: White Balance Temperature
    public static final int PU_WB_COMPO			= 0x80000080;	// D7: White Balance Component
    public static final int PU_BACKLIGHT		= 0x80000100;	// D8: Backlight Compensation
    public static final int PU_GAIN				= 0x80000200;	// D9: Gain
    public static final int PU_POWER_LF			= 0x80000400;	// D10: Power Line Frequency
    public static final int PU_HUE_AUTO			= 0x80000800;	// D11: Hue, Auto
    public static final int PU_WB_TEMP_AUTO		= 0x80001000;	// D12: White Balance Temperature, Auto
    public static final int PU_WB_COMPO_AUTO	= 0x80002000;	// D13: White Balance Component, Auto
    public static final int PU_DIGITAL_MULT		= 0x80004000;	// D14: Digital Multiplier
    public static final int PU_DIGITAL_LIMIT	= 0x80008000;	// D15: Digital Multiplier Limit
    public static final int PU_AVIDEO_STD		= 0x80010000;	// D16: Analog Video Standard
    public static final int PU_AVIDEO_LOCK		= 0x80020000;	// D17: Analog Video Lock Status
    public static final int PU_CONTRAST_AUTO	= 0x80040000;	// D18: Contrast, Auto

	// uvc_status_class from libuvc.h
	public static final int STATUS_CLASS_CONTROL = 0x10;
	public static final int STATUS_CLASS_CONTROL_CAMERA = 0x11;
	public static final int STATUS_CLASS_CONTROL_PROCESSING = 0x12;

	// uvc_status_attribute from libuvc.h
	public static final int STATUS_ATTRIBUTE_VALUE_CHANGE = 0x00;
	public static final int STATUS_ATTRIBUTE_INFO_CHANGE = 0x01;
	public static final int STATUS_ATTRIBUTE_FAILURE_CHANGE = 0x02;
	public static final int STATUS_ATTRIBUTE_UNKNOWN = 0xff;

	private static boolean isLoaded;
	static {
		if (!isLoaded) {
			System.loadLibrary("jpeg-turbo1500");
			System.loadLibrary("usb100");
			System.loadLibrary("uvc");
			System.loadLibrary("UVCCamera");
			isLoaded = true;
		}
	}

	private UsbControlBlock mCtrlBlock;
    protected long mControlSupports;			// カメラコントロールでサポートしている機能フラグ
    protected long mProcSupports;				// プロセッシングユニットでサポートしている機能フラグ
    protected int mCurrentFrameFormat = FRAME_FORMAT_MJPEG;
	protected int mCurrentWidth = DEFAULT_PREVIEW_WIDTH, mCurrentHeight = DEFAULT_PREVIEW_HEIGHT;
	protected float mCurrentBandwidthFactor = DEFAULT_BANDWIDTH;
    protected String mSupportedSize;
    protected List<Size> mCurrentSizeList;
	// these fields from here are accessed from native code and do not change name and remove
    protected long mNativePtr;
    protected int mScanningModeMin, mScanningModeMax, mScanningModeDef;
    protected int mExposureModeMin, mExposureModeMax, mExposureModeDef;
    protected int mExposurePriorityMin, mExposurePriorityMax, mExposurePriorityDef;
    protected int mExposureMin, mExposureMax, mExposureDef;
    protected int mAutoFocusMin, mAutoFocusMax, mAutoFocusDef;
    protected int mFocusMin, mFocusMax, mFocusDef;
    protected int mFocusRelMin, mFocusRelMax, mFocusRelDef;
    protected int mFocusSimpleMin, mFocusSimpleMax, mFocusSimpleDef;
    protected int mIrisMin, mIrisMax, mIrisDef;
    protected int mIrisRelMin, mIrisRelMax, mIrisRelDef;
    protected int mPanMin, mPanMax, mPanDef;
    protected int mTiltMin, mTiltMax, mTiltDef;
    protected int mRollMin, mRollMax, mRollDef;
    protected int mPanRelMin, mPanRelMax, mPanRelDef;
    protected int mTiltRelMin, mTiltRelMax, mTiltRelDef;
    protected int mRollRelMin, mRollRelMax, mRollRelDef;
    protected int mPrivacyMin, mPrivacyMax, mPrivacyDef;
    protected int mAutoWhiteBlanceMin, mAutoWhiteBlanceMax, mAutoWhiteBlanceDef;
    protected int mAutoWhiteBlanceCompoMin, mAutoWhiteBlanceCompoMax, mAutoWhiteBlanceCompoDef;
    protected int mWhiteBlanceMin, mWhiteBlanceMax, mWhiteBlanceDef;
    protected int mWhiteBlanceCompoMin, mWhiteBlanceCompoMax, mWhiteBlanceCompoDef;
    protected int mWhiteBlanceRelMin, mWhiteBlanceRelMax, mWhiteBlanceRelDef;
    protected int mBacklightCompMin, mBacklightCompMax, mBacklightCompDef;
    protected int mBrightnessMin, mBrightnessMax, mBrightnessDef;
    protected int mContrastMin, mContrastMax, mContrastDef;
    protected int mSharpnessMin, mSharpnessMax, mSharpnessDef;
    protected int mGainMin, mGainMax, mGainDef;
    protected int mGammaMin, mGammaMax, mGammaDef;
    protected int mSaturationMin, mSaturationMax, mSaturationDef;
    protected int mHueMin, mHueMax, mHueDef;
    protected int mZoomMin, mZoomMax, mZoomDef;
    protected int mZoomRelMin, mZoomRelMax, mZoomRelDef;
    protected int mPowerlineFrequencyMin, mPowerlineFrequencyMax, mPowerlineFrequencyDef;
    protected int mMultiplierMin, mMultiplierMax, mMultiplierDef;
    protected int mMultiplierLimitMin, mMultiplierLimitMax, mMultiplierLimitDef;
    protected int mAnalogVideoStandardMin, mAnalogVideoStandardMax, mAnalogVideoStandardDef;
    protected int mAnalogVideoLockStateMin, mAnalogVideoLockStateMax, mAnalogVideoLockStateDef;
    // until here
    /**
     * the sonctructor of this class should be call within the thread that has a looper
     * (UI thread or a thread that called Looper.prepare)
     */
    public UVCCamera() {
    	mNativePtr = nativeCreate();
    	mSupportedSize = null;
	}

    /**
     * connect to a UVC camera
     * USB permission is necessary before this method is called
     * @param ctrlBlock
     */
    public synchronized void open(final UsbControlBlock ctrlBlock) {
    	int result;
    	try {
			mCtrlBlock = ctrlBlock.clone();
			result = nativeConnect(mNativePtr,
				mCtrlBlock.getVenderId(), mCtrlBlock.getProductId(),
				mCtrlBlock.getFileDescriptor(),
				mCtrlBlock.getBusNum(),
				mCtrlBlock.getDevNum(),
				getUSBFSName(mCtrlBlock));
		} catch (final Exception e) {
			Log.w(TAG, e);
			result = -1;
		}
		if (result != 0) {
			throw new UnsupportedOperationException("open failed:result=" + result);
		}
    	if (mNativePtr != 0 && TextUtils.isEmpty(mSupportedSize)) {
    		mSupportedSize = nativeGetSupportedSize(mNativePtr);
    	}
		nativeSetPreviewSize(mNativePtr, DEFAULT_PREVIEW_WIDTH, DEFAULT_PREVIEW_HEIGHT,
			DEFAULT_PREVIEW_MIN_FPS, DEFAULT_PREVIEW_MAX_FPS, DEFAULT_PREVIEW_MODE, DEFAULT_BANDWIDTH);
    }

	/**
	 * set status callback
	 * @param callback
	 */
	public void setStatusCallback(final IStatusCallback callback) {
		if (mNativePtr != 0) {
			nativeSetStatusCallback(mNativePtr, callback);
		}
	}

	/**
	 * set button callback
	 * @param callback
	 */
	public void setButtonCallback(final IButtonCallback callback) {
		if (mNativePtr != 0) {
			nativeSetButtonCallback(mNativePtr, callback);
		}
	}

    /**
     * close and release UVC camera
     */
    public synchronized void close() {
    	stopPreview();
    	if (mNativePtr != 0) {
    		nativeRelease(mNativePtr);
//    		mNativePtr = 0;	// nativeDestroyを呼ぶのでここでクリアしちゃダメ
    	}
    	if (mCtrlBlock != null) {
			mCtrlBlock.close();
   			mCtrlBlock = null;
		}
		mControlSupports = mProcSupports = 0;
		mCurrentFrameFormat = -1;
		mCurrentBandwidthFactor = 0;
		mSupportedSize = null;
		mCurrentSizeList = null;
    	if (DEBUG) Log.v(TAG, "close:finished");
    }

	public UsbDevice getDevice() {
		return mCtrlBlock != null ? mCtrlBlock.getDevice() : null;
	}

	public String getDeviceName(){
		return mCtrlBlock != null ? mCtrlBlock.getDeviceName() : null;
	}

	public UsbControlBlock getUsbControlBlock() {
		return mCtrlBlock;
	}

	public synchronized String getSupportedSize() {
    	return !TextUtils.isEmpty(mSupportedSize) ? mSupportedSize : (mSupportedSize = nativeGetSupportedSize(mNativePtr));
    }

	public Size getPreviewSize() {
		Size result = null;
		final List<Size> list = getSupportedSizeList();
		for (final Size sz: list) {
			if ((sz.width == mCurrentWidth)
				|| (sz.height == mCurrentHeight)) {
				result =sz;
				break;
			}
		}
		return result;
	}
	
	/**
	 * Set preview size and preview mode
	 * @param width
	   @param height
	 */
	public void setPreviewSize(final int width, final int height) {
		setPreviewSize(width, height, DEFAULT_PREVIEW_MIN_FPS, DEFAULT_PREVIEW_MAX_FPS, mCurrentFrameFormat, mCurrentBandwidthFactor);
	}

	/**
	 * Set preview size and preview mode
	 * @param width
	 * @param height
	 * @param frameFormat either FRAME_FORMAT_YUYV(0) or FRAME_FORMAT_MJPEG(1)
	 */
	public void setPreviewSize(final int width, final int height, final int frameFormat) {
		setPreviewSize(width, height, DEFAULT_PREVIEW_MIN_FPS, DEFAULT_PREVIEW_MAX_FPS, frameFormat, mCurrentBandwidthFactor);
	}
	
	/**
	 * Set preview size and preview mode
	 * @param width
	   @param height
	   @param frameFormat either FRAME_FORMAT_YUYV(0) or FRAME_FORMAT_MJPEG(1)
	   @param bandwidth [0.0f,1.0f]
	 */
	public void setPreviewSize(final int width, final int height, final int frameFormat, final float bandwidth) {
		setPreviewSize(width, height, DEFAULT_PREVIEW_MIN_FPS, DEFAULT_PREVIEW_MAX_FPS, frameFormat, bandwidth);
	}

	/**
	 * Set preview size and preview mode
	 * @param width
	 * @param height
	 * @param min_fps
	 * @param max_fps
	 * @param frameFormat either FRAME_FORMAT_YUYV(0) or FRAME_FORMAT_MJPEG(1)
	 * @param bandwidthFactor
	 */
	public void setPreviewSize(final int width, final int height, final int min_fps, final int max_fps, final int frameFormat, final float bandwidthFactor) {
		if ((width == 0) || (height == 0))
			throw new IllegalArgumentException("invalid preview size");
		if (mNativePtr != 0) {
			final int result = nativeSetPreviewSize(mNativePtr, width, height, min_fps, max_fps, frameFormat, bandwidthFactor);
			if (result != 0)
				throw new IllegalArgumentException("Failed to set preview size");
			mCurrentFrameFormat = frameFormat;
			mCurrentWidth = width;
			mCurrentHeight = height;
			mCurrentBandwidthFactor = bandwidthFactor;
		}
	}

	public List<Size> getSupportedSizeList() {
		final int type = (mCurrentFrameFormat > 0) ? 6 : 4;
		return getSupportedSize(type, mSupportedSize);
	}

	public static List<Size> getSupportedSize(final int type, final String supportedSize) {
		final List<Size> result = new ArrayList<Size>();
		if (!TextUtils.isEmpty(supportedSize))
		try {
			final JSONObject json = new JSONObject(supportedSize);
			final JSONArray formats = json.getJSONArray("formats");
			final int format_nums = formats.length();
			for (int i = 0; i < format_nums; i++) {
				final JSONObject format = formats.getJSONObject(i);
				if(format.has("type") && format.has("size")) {
					final int format_type = format.getInt("type");
					if ((format_type == type) || (type == -1)) {
						addSize(format, format_type, 0, result);
					}
				}
			}
		} catch (final JSONException e) {
			e.printStackTrace();
		}
		return result;
	}

	private static final void addSize(final JSONObject format, final int formatType, final int frameType, final List<Size> size_list) throws JSONException {
		final JSONArray size = format.getJSONArray("size");
		final int size_nums = size.length();
		for (int j = 0; j < size_nums; j++) {
			final String[] sz = size.getString(j).split("x");
			try {
				size_list.add(new Size(formatType, frameType, j, Integer.parseInt(sz[0]), Integer.parseInt(sz[1])));
			} catch (final Exception e) {
				break;
			}
		}
	}

    /**
     * set preview surface with SurfaceHolder</br>
     * you can use SurfaceHolder came from SurfaceView/GLSurfaceView
     * @param holder
     */
    public synchronized void setPreviewDisplay(final SurfaceHolder holder) {
   		nativeSetPreviewDisplay(mNativePtr, holder.getSurface());
    }

    /**
     * set preview surface with SurfaceTexture.
     * this method require API >= 14
     * @param texture
     */
    public synchronized void setPreviewTexture(final SurfaceTexture texture) {	// API >= 11
    	final Surface surface = new Surface(texture);	// XXX API >= 14
    	nativeSetPreviewDisplay(mNativePtr, surface);
    }

    /**
     * set preview surface with Surface
     * @param surface
     */
    public synchronized void setPreviewDisplay(final Surface surface) {
    	nativeSetPreviewDisplay(mNativePtr, surface);
    }

    /**
     * set frame callback
     * @param callback
     * @param pixelFormat
     */
    public void setFrameCallback(final IFrameCallback callback, final int pixelFormat) {
    	if (mNativePtr != 0) {
        	nativeSetFrameCallback(mNativePtr, callback, pixelFormat);
    	}
    }

    /**
     * start preview
     */
    public synchronized void startPreview() {
    	if (mCtrlBlock != null) {
    		nativeStartPreview(mNativePtr);
    	}
    }

    /**
     * stop preview
     */
    public synchronized void stopPreview() {
    	setFrameCallback(null, 0);
    	if (mCtrlBlock != null) {
    		nativeStopPreview(mNativePtr);
    	}
    }

    /**
     * destroy UVCCamera object
     */
    public synchronized void destroy() {
    	close();
    	if (mNativePtr != 0) {
    		nativeDestroy(mNativePtr);
    		mNativePtr = 0;
    	}
    }

    // wrong result may return when you call this just after camera open.
    // it is better to wait several hundreads millseconds.
	public boolean checkSupportFlag(final long flag) {
    	updateCameraParams();
    	if ((flag & 0x80000000) == 0x80000000)
    		return ((mProcSupports & flag) == (flag & 0x7ffffffF));
    	else
    		return (mControlSupports & flag) == flag;
    }

//================================================================================
	public synchronized void setAutoFocus(final boolean autoFocus) {
    	if (mNativePtr != 0) {
    		nativeSetAutoFocus(mNativePtr, autoFocus);
    	}
    }

	public synchronized boolean getAutoFocus() {
    	boolean result = true;
    	if (mNativePtr != 0) {
    		result = nativeGetAutoFocus(mNativePtr) > 0;
    	}
    	return result;
    }
//================================================================================
    /**
     * @param focus [%]
     */
	public synchronized void setFocus(final int focus) {
    	if (mNativePtr != 0) {
 		   final float range = Math.abs(mFocusMax - mFocusMin);
 		   if (range > 0)
 			   nativeSetFocus(mNativePtr, (int)(focus / 100.f * range) + mFocusMin);
    	}
    }

    /**
     * @param focus_abs
     * @return focus[%]
     */
	public synchronized int getFocus(final int focus_abs) {
	   int result = 0;
	   if (mNativePtr != 0) {
		   nativeUpdateFocusLimit(mNativePtr);
		   final float range = Math.abs(mFocusMax - mFocusMin);
		   if (range > 0) {
			   result = (int)((focus_abs - mFocusMin) * 100.f / range);
		   }
	   }
	   return result;
	}

    /**
     * @return focus[%]
     */
	public synchronized int getFocus() {
    	return getFocus(nativeGetFocus(mNativePtr));
    }

	public synchronized void resetFocus() {
    	if (mNativePtr != 0) {
    		nativeSetFocus(mNativePtr, mFocusDef);
    	}
    }

//================================================================================
	public synchronized void setAutoWhiteBlance(final boolean autoWhiteBlance) {
    	if (mNativePtr != 0) {
    		nativeSetAutoWhiteBlance(mNativePtr, autoWhiteBlance);
    	}
    }

	public synchronized boolean getAutoWhiteBlance() {
    	boolean result = true;
    	if (mNativePtr != 0) {
    		result = nativeGetAutoWhiteBlance(mNativePtr) > 0;
    	}
    	return result;
    }

//================================================================================
    /**
     * @param whiteBlance [%]
     */
	public synchronized void setWhiteBlance(final int whiteBlance) {
    	if (mNativePtr != 0) {
 		   final float range = Math.abs(mWhiteBlanceMax - mWhiteBlanceMin);
 		   if (range > 0)
 			   nativeSetWhiteBlance(mNativePtr, (int)(whiteBlance / 100.f * range) + mWhiteBlanceMin);
    	}
    }

    /**
     * @param whiteBlance_abs
     * @return whiteBlance[%]
     */
	public synchronized int getWhiteBlance(final int whiteBlance_abs) {
	   int result = 0;
	   if (mNativePtr != 0) {
		   nativeUpdateWhiteBlanceLimit(mNativePtr);
		   final float range = Math.abs(mWhiteBlanceMax - mWhiteBlanceMin);
		   if (range > 0) {
			   result = (int)((whiteBlance_abs - mWhiteBlanceMin) * 100.f / range);
		   }
	   }
	   return result;
	}

    /**
     * @return white blance[%]
     */
	public synchronized int getWhiteBlance() {
    	return getFocus(nativeGetWhiteBlance(mNativePtr));
    }

	public synchronized void resetWhiteBlance() {
    	if (mNativePtr != 0) {
    		nativeSetWhiteBlance(mNativePtr, mWhiteBlanceDe
Download .txt
gitextract_nybbmgne/

├── .gitignore
├── .idea/
│   ├── encodings.xml
│   ├── gradle.xml
│   ├── inspectionProfiles/
│   │   └── Project_Default.xml
│   └── vcs.xml
├── README.md
├── build.gradle
├── gradle/
│   └── wrapper/
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── libuvccamera/
│   ├── build.gradle
│   └── src/
│       └── main/
│           ├── AndroidManifest.xml
│           ├── java/
│           │   └── com/
│           │       └── serenegiant/
│           │           ├── common/
│           │           │   ├── BaseActivity.java
│           │           │   ├── BaseFragment.java
│           │           │   └── BaseService.java
│           │           └── usb/
│           │               ├── CameraDialog.java
│           │               ├── DeviceFilter.java
│           │               ├── IButtonCallback.java
│           │               ├── IFrameCallback.java
│           │               ├── IStatusCallback.java
│           │               ├── Size.java
│           │               ├── USBMonitor.java
│           │               ├── USBVendorId.java
│           │               └── UVCCamera.java
│           ├── jni/
│           │   ├── Android.mk
│           │   ├── Application.mk
│           │   ├── UVCCamera/
│           │   │   ├── Android.mk
│           │   │   ├── Parameters.cpp
│           │   │   ├── Parameters.h
│           │   │   ├── UVCButtonCallback.cpp
│           │   │   ├── UVCButtonCallback.h
│           │   │   ├── UVCCamera.cpp
│           │   │   ├── UVCCamera.h
│           │   │   ├── UVCPreview.cpp
│           │   │   ├── UVCPreview.h
│           │   │   ├── UVCStatusCallback.cpp
│           │   │   ├── UVCStatusCallback.h
│           │   │   ├── _onload.cpp
│           │   │   ├── _onload.h
│           │   │   ├── libUVCCamera.h
│           │   │   ├── objectarray.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
│           │   │   │   ├── PreviewPipeline.cpp
│           │   │   │   ├── PreviewPipeline.h
│           │   │   │   ├── PublisherPipeline.cpp
│           │   │   │   ├── PublisherPipeline.h
│           │   │   │   ├── SQLiteBufferedPipeline.cpp
│           │   │   │   ├── SQLiteBufferedPipeline.h
│           │   │   │   ├── SimpleBufferedPipeline.cpp
│           │   │   │   ├── SimpleBufferedPipeline.h
│           │   │   │   ├── pipeline_helper.cpp
│           │   │   │   └── pipeline_helper.h
│           │   │   ├── serenegiant_usb_UVCCamera.cpp
│           │   │   └── utilbase.cpp
│           │   ├── libjpeg-turbo-1.5.0/
│           │   │   ├── Android.mk
│           │   │   ├── BUILDING.md
│           │   │   ├── CMakeLists.txt
│           │   │   ├── ChangeLog.md
│           │   │   ├── LICENSE.md
│           │   │   ├── Makefile.am
│           │   │   ├── Makefile.in
│           │   │   ├── README.ijg
│           │   │   ├── README.md
│           │   │   ├── acinclude.m4
│           │   │   ├── aclocal.m4
│           │   │   ├── ar-lib
│           │   │   ├── bmp.c
│           │   │   ├── bmp.h
│           │   │   ├── cderror.h
│           │   │   ├── cdjpeg.c
│           │   │   ├── cdjpeg.h
│           │   │   ├── change.log
│           │   │   ├── cjpeg.1
│           │   │   ├── cjpeg.c
│           │   │   ├── 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
│           │   │   │       ├── classes.html
│           │   │   │       ├── doxygen-extra.css
│           │   │   │       ├── doxygen.css
│           │   │   │       ├── dynsections.js
│           │   │   │       ├── functions.html
│           │   │   │       ├── functions_vars.html
│           │   │   │       ├── group___turbo_j_p_e_g.html
│           │   │   │       ├── index.html
│           │   │   │       ├── jquery.js
│           │   │   │       ├── modules.html
│           │   │   │       ├── 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
│           │   │   │       │   ├── enums_74.html
│           │   │   │       │   ├── enums_74.js
│           │   │   │       │   ├── enumvalues_74.html
│           │   │   │       │   ├── enumvalues_74.js
│           │   │   │       │   ├── functions_74.html
│           │   │   │       │   ├── functions_74.js
│           │   │   │       │   ├── groups_74.html
│           │   │   │       │   ├── groups_74.js
│           │   │   │       │   ├── nomatches.html
│           │   │   │       │   ├── search.css
│           │   │   │       │   ├── search.js
│           │   │   │       │   ├── 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
│           │   │   │       └── tabs.css
│           │   │   ├── doxygen-extra.css
│           │   │   ├── doxygen.config
│           │   │   ├── example.c
│           │   │   ├── include/
│           │   │   │   ├── config.h
│           │   │   │   ├── jconfig.h
│           │   │   │   ├── jconfigint.h
│           │   │   │   └── jsimdcfg.inc
│           │   │   ├── install-sh
│           │   │   ├── jaricom.c
│           │   │   ├── java/
│           │   │   │   ├── CMakeLists.txt
│           │   │   │   ├── MANIFEST.MF
│           │   │   │   ├── Makefile.am
│           │   │   │   ├── Makefile.in
│           │   │   │   ├── README
│           │   │   │   ├── TJBench.java
│           │   │   │   ├── TJExample.java
│           │   │   │   ├── TJUnitTest.java
│           │   │   │   ├── doc/
│           │   │   │   │   ├── allclasses-frame.html
│           │   │   │   │   ├── allclasses-noframe.html
│           │   │   │   │   ├── constant-values.html
│           │   │   │   │   ├── deprecated-list.html
│           │   │   │   │   ├── help-doc.html
│           │   │   │   │   ├── index-all.html
│           │   │   │   │   ├── index.html
│           │   │   │   │   ├── org/
│           │   │   │   │   │   └── libjpegturbo/
│           │   │   │   │   │       └── turbojpeg/
│           │   │   │   │   │           ├── TJ.html
│           │   │   │   │   │           ├── TJCompressor.html
│           │   │   │   │   │           ├── TJCustomFilter.html
│           │   │   │   │   │           ├── TJDecompressor.html
│           │   │   │   │   │           ├── TJException.html
│           │   │   │   │   │           ├── TJScalingFactor.html
│           │   │   │   │   │           ├── TJTransform.html
│           │   │   │   │   │           ├── TJTransformer.html
│           │   │   │   │   │           ├── YUVImage.html
│           │   │   │   │   │           ├── package-frame.html
│           │   │   │   │   │           ├── package-summary.html
│           │   │   │   │   │           └── package-tree.html
│           │   │   │   │   ├── overview-tree.html
│           │   │   │   │   ├── package-list
│           │   │   │   │   ├── serialized-form.html
│           │   │   │   │   └── stylesheet.css
│           │   │   │   ├── org/
│           │   │   │   │   └── libjpegturbo/
│           │   │   │   │       └── turbojpeg/
│           │   │   │   │           ├── TJ.java
│           │   │   │   │           ├── TJCompressor.java
│           │   │   │   │           ├── TJCustomFilter.java
│           │   │   │   │           ├── TJDecompressor.java
│           │   │   │   │           ├── TJException.java
│           │   │   │   │           ├── TJLoader.java.in
│           │   │   │   │           ├── TJLoader.java.tmpl
│           │   │   │   │           ├── TJScalingFactor.java
│           │   │   │   │           ├── TJTransform.java
│           │   │   │   │           ├── TJTransformer.java
│           │   │   │   │           └── YUVImage.java
│           │   │   │   ├── org_libjpegturbo_turbojpeg_TJ.h
│           │   │   │   ├── org_libjpegturbo_turbojpeg_TJCompressor.h
│           │   │   │   ├── org_libjpegturbo_turbojpeg_TJDecompressor.h
│           │   │   │   └── org_libjpegturbo_turbojpeg_TJTransformer.h
│           │   │   ├── 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
│           │   │   ├── jconfig.txt
│           │   │   ├── jconfigint.h.in
│           │   │   ├── jcparam.c
│           │   │   ├── jcphuff.c
│           │   │   ├── jcprepct.c
│           │   │   ├── jcsample.c
│           │   │   ├── jcstest.c
│           │   │   ├── jctrans.c
│           │   │   ├── jdapimin.c
│           │   │   ├── jdapistd.c
│           │   │   ├── jdarith.c
│           │   │   ├── jdatadst-tj.c
│           │   │   ├── jdatadst.c
│           │   │   ├── jdatasrc-tj.c
│           │   │   ├── jdatasrc.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
│           │   │   ├── jpeg_nbits_table.h
│           │   │   ├── jpegcomp.h
│           │   │   ├── jpegint.h
│           │   │   ├── jpeglib.h
│           │   │   ├── jpegtran.1
│           │   │   ├── jpegtran.c
│           │   │   ├── jquant1.c
│           │   │   ├── jquant2.c
│           │   │   ├── jsimd.h
│           │   │   ├── jsimd_none.c
│           │   │   ├── jsimddct.h
│           │   │   ├── jstdhuff.c
│           │   │   ├── jutils.c
│           │   │   ├── jversion.h
│           │   │   ├── libjpeg.map.in
│           │   │   ├── libjpeg.txt
│           │   │   ├── ltmain.sh
│           │   │   ├── md5/
│           │   │   │   ├── CMakeLists.txt
│           │   │   │   ├── Makefile.am
│           │   │   │   ├── Makefile.in
│           │   │   │   ├── md5.c
│           │   │   │   ├── md5.h
│           │   │   │   ├── md5cmp.c
│           │   │   │   └── md5hl.c
│           │   │   ├── missing
│           │   │   ├── rdbmp.c
│           │   │   ├── rdcolmap.c
│           │   │   ├── rdgif.c
│           │   │   ├── rdjpgcom.1
│           │   │   ├── rdjpgcom.c
│           │   │   ├── rdppm.c
│           │   │   ├── rdrle.c
│           │   │   ├── rdswitch.c
│           │   │   ├── rdtarga.c
│           │   │   ├── release/
│           │   │   │   ├── Distribution.xml
│           │   │   │   ├── License.rtf
│           │   │   │   ├── ReadMe.txt
│           │   │   │   ├── Welcome.rtf
│           │   │   │   ├── deb-control.tmpl
│           │   │   │   ├── libjpeg-turbo.nsi.in
│           │   │   │   ├── libjpeg-turbo.spec.in
│           │   │   │   ├── libjpeg.pc.in
│           │   │   │   ├── libturbojpeg.pc.in
│           │   │   │   ├── makecygwinpkg.in
│           │   │   │   ├── makedpkg.in
│           │   │   │   ├── makemacpkg.in
│           │   │   │   └── uninstall.in
│           │   │   ├── sharedlib/
│           │   │   │   └── CMakeLists.txt
│           │   │   ├── simd/
│           │   │   │   ├── CMakeLists.txt
│           │   │   │   ├── Makefile.am
│           │   │   │   ├── Makefile.in
│           │   │   │   ├── 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-mmx.asm
│           │   │   │   ├── jcsample-sse2-64.asm
│           │   │   │   ├── jcsample-sse2.asm
│           │   │   │   ├── jcsample.h
│           │   │   │   ├── 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-sse.asm
│           │   │   │   ├── jidctflt-sse2-64.asm
│           │   │   │   ├── jidctflt-sse2.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
│           │   │   │   ├── jquant-mmx.asm
│           │   │   │   ├── jquant-sse.asm
│           │   │   │   ├── jquantf-sse2-64.asm
│           │   │   │   ├── jquantf-sse2.asm
│           │   │   │   ├── jquanti-altivec.c
│           │   │   │   ├── jquanti-sse2-64.asm
│           │   │   │   ├── jquanti-sse2.asm
│           │   │   │   ├── jsimd.h
│           │   │   │   ├── jsimd_altivec.h
│           │   │   │   ├── jsimd_arm.c
│           │   │   │   ├── jsimd_arm64.c
│           │   │   │   ├── jsimd_arm64_neon.S
│           │   │   │   ├── jsimd_arm_neon.S
│           │   │   │   ├── jsimd_i386.c
│           │   │   │   ├── jsimd_mips.c
│           │   │   │   ├── jsimd_mips_dspr2.S
│           │   │   │   ├── jsimd_mips_dspr2_asm.h
│           │   │   │   ├── jsimd_powerpc.c
│           │   │   │   ├── jsimd_x86_64.c
│           │   │   │   ├── jsimdcfg.inc.h
│           │   │   │   ├── jsimdcpu.asm
│           │   │   │   ├── jsimdext.inc
│           │   │   │   └── nasm_lt.sh
│           │   │   ├── structure.txt
│           │   │   ├── testimages/
│           │   │   │   ├── nightshot_iso_100.txt
│           │   │   │   └── testorig.ppm
│           │   │   ├── tjbench.c
│           │   │   ├── tjbenchtest.in
│           │   │   ├── tjbenchtest.java.in
│           │   │   ├── tjexampletest.in
│           │   │   ├── tjunittest.c
│           │   │   ├── tjutil.c
│           │   │   ├── tjutil.h
│           │   │   ├── transupp.c
│           │   │   ├── transupp.h
│           │   │   ├── turbojpeg-jni.c
│           │   │   ├── turbojpeg-mapfile
│           │   │   ├── turbojpeg-mapfile.jni
│           │   │   ├── turbojpeg.c
│           │   │   ├── turbojpeg.h
│           │   │   ├── usage.txt
│           │   │   ├── win/
│           │   │   │   ├── jconfig.h.in
│           │   │   │   ├── jconfigint.h.in
│           │   │   │   ├── jpeg62-memsrcdst.def
│           │   │   │   ├── jpeg62.def
│           │   │   │   ├── jpeg7-memsrcdst.def
│           │   │   │   ├── jpeg7.def
│           │   │   │   ├── jpeg8.def
│           │   │   │   └── jsimdcfg.inc
│           │   │   ├── wizard.txt
│           │   │   ├── wrbmp.c
│           │   │   ├── wrgif.c
│           │   │   ├── wrjpgcom.1
│           │   │   ├── wrjpgcom.c
│           │   │   ├── wrppm.c
│           │   │   ├── wrppm.h
│           │   │   ├── wrrle.c
│           │   │   └── wrtarga.c
│           │   ├── libusb/
│           │   │   ├── .private/
│           │   │   │   ├── README.txt
│           │   │   │   ├── bd.cmd
│           │   │   │   ├── bm.sh
│           │   │   │   ├── bwince.cmd
│           │   │   │   ├── post-rewrite.sh
│           │   │   │   ├── pre-commit.sh
│           │   │   │   ├── wbs.txt
│           │   │   │   └── wbs_wince.txt
│           │   │   ├── AUTHORS
│           │   │   ├── COPYING
│           │   │   ├── ChangeLog
│           │   │   ├── INSTALL
│           │   │   ├── INSTALL_WIN.txt
│           │   │   ├── Makefile.am
│           │   │   ├── NEWS
│           │   │   ├── PORTING
│           │   │   ├── README
│           │   │   ├── README.git
│           │   │   ├── TODO
│           │   │   ├── Xcode/
│           │   │   │   ├── common.xcconfig
│           │   │   │   ├── config.h
│           │   │   │   ├── debug.xcconfig
│           │   │   │   ├── libusb.xcconfig
│           │   │   │   ├── libusb.xcodeproj/
│           │   │   │   │   └── project.pbxproj
│           │   │   │   ├── libusb_debug.xcconfig
│           │   │   │   ├── libusb_release.xcconfig
│           │   │   │   └── release.xcconfig
│           │   │   ├── android/
│           │   │   │   ├── README
│           │   │   │   ├── config.h
│           │   │   │   ├── config_original.h
│           │   │   │   └── jni/
│           │   │   │       ├── Android.mk
│           │   │   │       ├── Android_original.mk
│           │   │   │       ├── Application.mk
│           │   │   │       ├── examples.mk
│           │   │   │       ├── libusb.mk
│           │   │   │       ├── libusb_original.mk
│           │   │   │       └── tests.mk
│           │   │   ├── autogen.sh
│           │   │   ├── bootstrap.sh
│           │   │   ├── configure.ac
│           │   │   ├── doc/
│           │   │   │   ├── Makefile.am
│           │   │   │   └── doxygen.cfg.in
│           │   │   ├── examples/
│           │   │   │   ├── Makefile.am
│           │   │   │   ├── dpfp.c
│           │   │   │   ├── dpfp_threaded.c
│           │   │   │   ├── ezusb.c
│           │   │   │   ├── ezusb.h
│           │   │   │   ├── fxload.c
│           │   │   │   ├── getopt/
│           │   │   │   │   ├── getopt.c
│           │   │   │   │   ├── getopt.h
│           │   │   │   │   └── getopt1.c
│           │   │   │   ├── hotplugtest.c
│           │   │   │   ├── listdevs.c
│           │   │   │   ├── sam3u_benchmark.c
│           │   │   │   └── xusb.c
│           │   │   ├── libusb/
│           │   │   │   ├── Makefile.am
│           │   │   │   ├── 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
│           │   │   │   ├── libusb_original.h
│           │   │   │   ├── libusbi.h
│           │   │   │   ├── libusbi_original.h
│           │   │   │   ├── 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
│           │   │   ├── 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.dsw
│           │   │   │   ├── libusb_2005.sln
│           │   │   │   ├── libusb_2010.sln
│           │   │   │   ├── libusb_2012.sln
│           │   │   │   ├── libusb_2013.sln
│           │   │   │   ├── libusb_dll.dsp
│           │   │   │   ├── 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_wince.vcproj
│           │   │   │   ├── libusb_sources
│           │   │   │   ├── libusb_static.dsp
│           │   │   │   ├── 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_wince.vcproj
│           │   │   │   ├── libusb_wince.sln
│           │   │   │   ├── listdevs.dsp
│           │   │   │   ├── listdevs_2005.vcproj
│           │   │   │   ├── listdevs_2010.vcxproj
│           │   │   │   ├── listdevs_2010.vcxproj.filters
│           │   │   │   ├── listdevs_2012.vcxproj
│           │   │   │   ├── listdevs_2012.vcxproj.filters
│           │   │   │   ├── listdevs_2013.vcxproj
│           │   │   │   ├── 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.dsp
│           │   │   │   ├── xusb_2005.vcproj
│           │   │   │   ├── xusb_2010.vcxproj
│           │   │   │   ├── xusb_2010.vcxproj.filters
│           │   │   │   ├── xusb_2012.vcxproj
│           │   │   │   ├── xusb_2012.vcxproj.filters
│           │   │   │   ├── xusb_2013.vcxproj
│           │   │   │   ├── xusb_sources
│           │   │   │   └── xusb_wince.vcproj
│           │   │   └── tests/
│           │   │       ├── Makefile.am
│           │   │       ├── libusb_testlib.h
│           │   │       ├── stress.c
│           │   │       └── testlib.c
│           │   ├── libuvc/
│           │   │   ├── CMakeLists.txt
│           │   │   ├── README.md
│           │   │   ├── android/
│           │   │   │   └── jni/
│           │   │   │       └── Android.mk
│           │   │   ├── cameras/
│           │   │   │   ├── isight_imac.txt
│           │   │   │   ├── isight_macbook.txt
│           │   │   │   ├── ms_lifecam_show.txt
│           │   │   │   ├── quickcampro9000.txt
│           │   │   │   ├── quickcampro9000_builtin_ctrls.txt
│           │   │   │   └── quickcampro9000_extra_ctrls.txt
│           │   │   ├── changelog.txt
│           │   │   ├── doxygen.conf
│           │   │   ├── include/
│           │   │   │   ├── libuvc/
│           │   │   │   │   ├── libuvc.h
│           │   │   │   │   ├── libuvc_config.h
│           │   │   │   │   ├── libuvc_config.h.in
│           │   │   │   │   ├── libuvc_internal.h
│           │   │   │   │   ├── libuvc_internal_original.h
│           │   │   │   │   └── libuvc_original.h
│           │   │   │   └── utlist.h
│           │   │   ├── libuvcConfig.cmake.in
│           │   │   ├── libuvcConfigVersion.cmake.in
│           │   │   └── src/
│           │   │       ├── ctrl.c
│           │   │       ├── ctrl_original.c
│           │   │       ├── device.c
│           │   │       ├── device_original.c
│           │   │       ├── diag.c
│           │   │       ├── diag_original.c
│           │   │       ├── example.c
│           │   │       ├── frame-mjpeg.c
│           │   │       ├── frame-mjpeg_original.c
│           │   │       ├── frame.c
│           │   │       ├── frame_original.c
│           │   │       ├── init.c
│           │   │       ├── init_original.c
│           │   │       ├── misc.c
│           │   │       ├── stream.c
│           │   │       ├── stream_original.c
│           │   │       └── test.c
│           │   ├── localdefines.h
│           │   ├── rapidjson/
│           │   │   ├── .gitmodules
│           │   │   ├── .travis.yml
│           │   │   ├── doc/
│           │   │   │   ├── diagram/
│           │   │   │   │   ├── insituparsing.dot
│           │   │   │   │   ├── iterative-parser-states-diagram.dot
│           │   │   │   │   ├── makefile
│           │   │   │   │   ├── move1.dot
│           │   │   │   │   ├── move2.dot
│           │   │   │   │   ├── move3.dot
│           │   │   │   │   ├── normalparsing.dot
│           │   │   │   │   ├── simpledom.dot
│           │   │   │   │   └── tutorial.dot
│           │   │   │   ├── dom.md
│           │   │   │   ├── encoding.md
│           │   │   │   ├── faq.md
│           │   │   │   ├── features.md
│           │   │   │   ├── internals.md
│           │   │   │   ├── misc/
│           │   │   │   │   ├── DoxygenLayout.xml
│           │   │   │   │   ├── doxygenextra.css
│           │   │   │   │   ├── 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
│           │   │       │   ├── LICENSE
│           │   │       │   ├── README.txt
│           │   │       │   ├── include/
│           │   │       │   │   └── json/
│           │   │       │   │       ├── autolink.h
│           │   │       │   │       ├── config.h
│           │   │       │   │       ├── features.h
│           │   │       │   │       ├── forwards.h
│           │   │       │   │       ├── json.h
│           │   │       │   │       ├── reader.h
│           │   │       │   │       ├── value.h
│           │   │       │   │       └── writer.h
│           │   │       │   ├── 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
│           │   │       │   ├── ultrajson.h
│           │   │       │   ├── ultrajsondec.c
│           │   │       │   └── ultrajsonenc.c
│           │   │       └── yajl/
│           │   │           ├── COPYING
│           │   │           ├── ChangeLog
│           │   │           ├── README
│           │   │           ├── TODO
│           │   │           ├── include/
│           │   │           │   └── yajl/
│           │   │           │       ├── yajl_common.h
│           │   │           │       ├── yajl_gen.h
│           │   │           │       ├── yajl_parse.h
│           │   │           │       ├── yajl_tree.h
│           │   │           │       └── yajl_version.h
│           │   │           └── src/
│           │   │               ├── CMakeLists.txt
│           │   │               ├── YAJL.dxy
│           │   │               ├── api/
│           │   │               │   ├── yajl_common.h
│           │   │               │   ├── yajl_gen.h
│           │   │               │   ├── yajl_parse.h
│           │   │               │   ├── yajl_tree.h
│           │   │               │   └── yajl_version.h.cmake
│           │   │               ├── yajl
│           │   │               ├── yajl.c
│           │   │               ├── yajl_alloc.c
│           │   │               ├── yajl_alloc.h
│           │   │               ├── yajl_buf.c
│           │   │               ├── yajl_buf.h
│           │   │               ├── yajl_bytestack.h
│           │   │               ├── 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
│           │   └── utilbase.h
│           └── res/
│               ├── layout/
│               │   ├── dialog_camera.xml
│               │   └── listitem_device.xml
│               ├── values/
│               │   ├── dimens.xml
│               │   └── strings.xml
│               ├── values-ja/
│               │   └── strings.xml
│               └── xml/
│                   └── device_filter.xml
├── settings.gradle
├── usbCameraCommon/
│   ├── build.gradle
│   ├── proguard-rules.pro
│   └── src/
│       └── main/
│           ├── AndroidManifest.xml
│           ├── java/
│           │   └── com/
│           │       └── serenegiant/
│           │           ├── encoder/
│           │           │   ├── IAudioEncoder.java
│           │           │   ├── IVideoEncoder.java
│           │           │   ├── MediaAudioEncoder.java
│           │           │   ├── MediaEncoder.java
│           │           │   ├── MediaMuxerWrapper.java
│           │           │   ├── MediaSurfaceEncoder.java
│           │           │   ├── MediaVideoBufferEncoder.java
│           │           │   └── MediaVideoEncoder.java
│           │           ├── usbcameracommon/
│           │           │   ├── AbstractUVCCameraHandler.java
│           │           │   ├── UVCCameraHandler.java
│           │           │   └── UVCCameraHandlerMultiSurface.java
│           │           └── widget/
│           │               ├── AspectRatioTextureView.java
│           │               ├── CameraViewInterface.java
│           │               └── UVCCameraTextureView.java
│           └── res/
│               ├── raw/
│               │   └── camera_click.ogg
│               └── values/
│                   └── strings.xml
├── usbCameraTest/
│   ├── build.gradle
│   ├── lint.xml
│   ├── proguard-project.txt
│   └── src/
│       └── main/
│           ├── AndroidManifest.xml
│           ├── java/
│           │   └── com/
│           │       └── serenegiant/
│           │           ├── usbcameratest/
│           │           │   └── MainActivity.java
│           │           └── widget/
│           │               ├── AspectRatioViewInterface.java
│           │               └── SimpleUVCCameraTextureView.java
│           └── res/
│               ├── layout/
│               │   └── activity_main.xml
│               ├── values/
│               │   ├── dimens.xml
│               │   ├── strings.xml
│               │   └── styles.xml
│               ├── values-ja/
│               │   └── strings.xml
│               ├── values-v11/
│               │   └── styles.xml
│               ├── values-v14/
│               │   └── styles.xml
│               ├── values-w820dp/
│               │   └── dimens.xml
│               └── xml/
│                   └── device_filter.xml
├── usbCameraTest0/
│   ├── build.gradle
│   ├── lint.xml
│   ├── proguard-project.txt
│   └── src/
│       └── main/
│           ├── AndroidManifest.xml
│           ├── java/
│           │   └── com/
│           │       └── serenegiant/
│           │           └── usbcameratest0/
│           │               └── MainActivity.java
│           └── res/
│               ├── layout/
│               │   └── activity_main.xml
│               ├── values/
│               │   ├── dimens.xml
│               │   ├── strings.xml
│               │   └── styles.xml
│               ├── values-ja/
│               │   └── strings.xml
│               ├── values-v11/
│               │   └── styles.xml
│               ├── values-v14/
│               │   └── styles.xml
│               ├── values-w820dp/
│               │   └── dimens.xml
│               └── xml/
│                   └── device_filter.xml
├── usbCameraTest2/
│   ├── build.gradle
│   ├── lint.xml
│   ├── proguard-project.txt
│   └── src/
│       └── main/
│           ├── AndroidManifest.xml
│           ├── java/
│           │   └── com/
│           │       └── serenegiant/
│           │           ├── usbcameratest2/
│           │           │   └── MainActivity.java
│           │           ├── video/
│           │           │   ├── Encoder.java
│           │           │   └── SurfaceEncoder.java
│           │           └── widget/
│           │               ├── AspectRatioViewInterface.java
│           │               └── SimpleUVCCameraTextureView.java
│           └── res/
│               ├── drawable/
│               │   └── border.xml
│               ├── layout/
│               │   └── activity_main.xml
│               ├── values/
│               │   ├── dimens.xml
│               │   ├── strings.xml
│               │   └── styles.xml
│               ├── values-ja/
│               │   └── strings.xml
│               ├── values-v11/
│               │   └── styles.xml
│               ├── values-v14/
│               │   └── styles.xml
│               ├── values-w820dp/
│               │   └── dimens.xml
│               └── xml/
│                   └── device_filter.xml
├── usbCameraTest3/
│   ├── build.gradle
│   ├── lint.xml
│   ├── proguard-project.txt
│   └── src/
│       └── main/
│           ├── AndroidManifest.xml
│           ├── java/
│           │   └── com/
│           │       └── serenegiant/
│           │           ├── usbcameratest3/
│           │           │   └── MainActivity.java
│           │           └── widget/
│           │               └── UVCCameraTextureView2.java
│           └── res/
│               ├── drawable/
│               │   └── border.xml
│               ├── layout/
│               │   ├── activity_main.xml
│               │   └── activity_main2.xml
│               ├── values/
│               │   ├── colors.xml
│               │   ├── dimens.xml
│               │   ├── strings.xml
│               │   └── styles.xml
│               ├── values-ja/
│               │   └── strings.xml
│               ├── values-v11/
│               │   └── styles.xml
│               ├── values-v14/
│               │   └── styles.xml
│               ├── values-w820dp/
│               │   └── dimens.xml
│               └── xml/
│                   └── device_filter.xml
├── usbCameraTest4/
│   ├── build.gradle
│   ├── proguard-project.txt
│   └── src/
│       └── main/
│           ├── AndroidManifest.xml
│           ├── aidl/
│           │   ├── android/
│           │   │   ├── hardware/
│           │   │   │   └── usb/
│           │   │   │       └── UsbDevice.aidl
│           │   │   └── view/
│           │   │       └── Surface.aidl
│           │   └── com/
│           │       └── serenegiant/
│           │           └── service/
│           │               ├── IUVCService.aidl
│           │               ├── IUVCServiceCallback.aidl
│           │               ├── IUVCServiceOnFrameAvailable.aidl
│           │               └── IUVCSlaveService.aidl
│           ├── java/
│           │   └── com/
│           │       └── serenegiant/
│           │           ├── service/
│           │           │   ├── CameraServer.java
│           │           │   └── UVCService.java
│           │           ├── serviceclient/
│           │           │   ├── CameraClient.java
│           │           │   ├── ICameraClient.java
│           │           │   └── ICameraClientCallback.java
│           │           └── usbcameratest4/
│           │               ├── CameraFragment.java
│           │               └── MainActivity.java
│           └── res/
│               ├── drawable/
│               │   └── border.xml
│               ├── layout/
│               │   ├── activity_main.xml
│               │   └── fragment_main.xml
│               ├── raw/
│               │   └── camera_click.ogg
│               ├── values/
│               │   ├── colors.xml
│               │   ├── dimens.xml
│               │   ├── strings.xml
│               │   └── styles.xml
│               ├── values-ja/
│               │   └── strings.xml
│               ├── values-v11/
│               │   └── styles.xml
│               ├── values-v14/
│               │   └── styles.xml
│               ├── values-w820dp/
│               │   └── dimens.xml
│               └── xml/
│                   └── device_filter.xml
├── usbCameraTest5/
│   ├── build.gradle
│   ├── lint.xml
│   ├── proguard-project.txt
│   └── src/
│       └── main/
│           ├── AndroidManifest.xml
│           ├── java/
│           │   └── com/
│           │       └── serenegiant/
│           │           └── usbcameratest5/
│           │               └── MainActivity.java
│           └── res/
│               ├── drawable/
│               │   └── border.xml
│               ├── layout/
│               │   └── activity_main.xml
│               ├── raw/
│               │   └── camera_click.ogg
│               ├── values/
│               │   ├── colors.xml
│               │   ├── dimens.xml
│               │   ├── strings.xml
│               │   └── styles.xml
│               ├── values-ja/
│               │   └── strings.xml
│               ├── values-v11/
│               │   └── styles.xml
│               ├── values-v14/
│               │   └── styles.xml
│               ├── values-w820dp/
│               │   └── dimens.xml
│               └── xml/
│                   └── device_filter.xml
├── usbCameraTest6/
│   ├── build.gradle
│   ├── lint.xml
│   ├── proguard-project.txt
│   └── src/
│       └── main/
│           ├── AndroidManifest.xml
│           ├── java/
│           │   └── com/
│           │       └── serenegiant/
│           │           └── usbcameratest6/
│           │               └── MainActivity.java
│           └── res/
│               ├── drawable/
│               │   └── border.xml
│               ├── layout/
│               │   └── activity_main.xml
│               ├── raw/
│               │   └── camera_click.ogg
│               ├── values/
│               │   ├── colors.xml
│               │   ├── dimens.xml
│               │   ├── strings.xml
│               │   └── styles.xml
│               ├── values-ja/
│               │   └── strings.xml
│               ├── values-v11/
│               │   └── styles.xml
│               ├── values-v14/
│               │   └── styles.xml
│               ├── values-w820dp/
│               │   └── dimens.xml
│               └── xml/
│                   └── device_filter.xml
├── usbCameraTest7/
│   ├── build.gradle
│   ├── lint.xml
│   ├── proguard-project.txt
│   └── src/
│       └── main/
│           ├── AndroidManifest.xml
│           ├── java/
│           │   └── com/
│           │       └── serenegiant/
│           │           └── usbcameratest7/
│           │               └── MainActivity.java
│           └── res/
│               ├── drawable/
│               │   └── border.xml
│               ├── layout/
│               │   └── activity_main.xml
│               ├── raw/
│               │   └── camera_click.ogg
│               ├── values/
│               │   ├── colors.xml
│               │   ├── dimens.xml
│               │   ├── strings.xml
│               │   └── styles.xml
│               ├── values-ja/
│               │   └── strings.xml
│               ├── values-v11/
│               │   └── styles.xml
│               ├── values-v14/
│               │   └── styles.xml
│               ├── values-w820dp/
│               │   └── dimens.xml
│               └── xml/
│                   └── device_filter.xml
└── usbCameraTest8/
    ├── build.gradle
    ├── proguard-rules.pro
    └── src/
        ├── androidTest/
        │   └── java/
        │       └── com/
        │           └── serenegiant/
        │               └── usbcameratest8/
        │                   └── ExampleInstrumentedTest.java
        ├── main/
        │   ├── AndroidManifest.xml
        │   ├── java/
        │   │   └── com/
        │   │       └── serenegiant/
        │   │           └── usbcameratest8/
        │   │               └── MainActivity.java
        │   └── res/
        │       ├── layout/
        │       │   └── activity_main.xml
        │       ├── values/
        │       │   ├── colors.xml
        │       │   ├── dimens.xml
        │       │   ├── strings.xml
        │       │   └── styles.xml
        │       ├── values-ja/
        │       │   └── strings.xml
        │       └── values-w820dp/
        │           └── dimens.xml
        └── test/
            └── java/
                └── com/
                    └── serenegiant/
                        └── usbcameratest8/
                            └── ExampleUnitTest.java
Download .txt
Showing preview only (476K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (5822 symbols across 384 files)

FILE: libuvccamera/src/main/java/com/serenegiant/common/BaseActivity.java
  class BaseActivity (line 47) | public class BaseActivity extends AppCompatActivity
    method onCreate (line 60) | @Override
    method onPause (line 70) | @Override
    method onDestroy (line 76) | @Override
    method runOnUiThread (line 96) | public final void runOnUiThread(final Runnable task, final long durati...
    method removeFromUiThread (line 114) | public final void removeFromUiThread(final Runnable task) {
    method queueEvent (line 125) | protected final synchronized void queueEvent(final Runnable task, fina...
    method removeEvent (line 145) | protected final synchronized void removeEvent(final Runnable task) {
    method showToast (line 160) | protected void showToast(@StringRes final int msg, final Object... arg...
    method clearToast (line 169) | protected void clearToast() {
    class ShowToastTask (line 183) | private final class ShowToastTask implements Runnable {
      method ShowToastTask (line 186) | private ShowToastTask(@StringRes final int msg, final Object... args) {
      method run (line 191) | @Override
    method onMessageDialogResult (line 215) | @SuppressLint("NewApi")
    method onRequestPermissionsResult (line 237) | @Override
    method checkPermissionResult (line 253) | protected void checkPermissionResult(final int requestCode, final Stri...
    method checkPermissionWriteExternalStorage (line 279) | protected boolean checkPermissionWriteExternalStorage() {
    method checkPermissionAudio (line 294) | protected boolean checkPermissionAudio() {
    method checkPermissionNetwork (line 309) | protected boolean checkPermissionNetwork() {
    method checkPermissionCamera (line 324) | protected boolean checkPermissionCamera() {

FILE: libuvccamera/src/main/java/com/serenegiant/common/BaseFragment.java
  class BaseFragment (line 47) | public class BaseFragment extends Fragment
    method BaseFragment (line 60) | public BaseFragment() {
    method onCreate (line 64) | @Override
    method onPause (line 74) | @Override
    method onDestroy (line 80) | @Override
    method runOnUiThread (line 100) | public final void runOnUiThread(final Runnable task, final long durati...
    method removeFromUiThread (line 118) | public final void removeFromUiThread(final Runnable task) {
    method queueEvent (line 129) | protected final synchronized void queueEvent(final Runnable task, fina...
    method removeEvent (line 149) | protected final synchronized void removeEvent(final Runnable task) {
    method showToast (line 164) | protected void showToast(@StringRes final int msg, final Object... arg...
    method clearToast (line 173) | protected void clearToast() {
    class ShowToastTask (line 187) | private final class ShowToastTask implements Runnable {
      method ShowToastTask (line 190) | private ShowToastTask(@StringRes final int msg, final Object... args) {
      method run (line 195) | @Override
    method onMessageDialogResult (line 223) | @SuppressLint("NewApi")
    method onRequestPermissionsResult (line 245) | @Override
    method checkPermissionResult (line 261) | protected void checkPermissionResult(final int requestCode, final Stri...
    method checkPermissionWriteExternalStorage (line 287) | protected boolean checkPermissionWriteExternalStorage() {
    method checkPermissionAudio (line 302) | protected boolean checkPermissionAudio() {
    method checkPermissionNetwork (line 317) | protected boolean checkPermissionNetwork() {
    method checkPermissionCamera (line 332) | protected boolean checkPermissionCamera() {

FILE: libuvccamera/src/main/java/com/serenegiant/common/BaseService.java
  class BaseService (line 33) | public abstract class BaseService extends Service {
    method onCreate (line 44) | @Override
    method onDestroy (line 54) | @Override
    method runOnUiThread (line 74) | public final void runOnUiThread(final Runnable task, final long durati...
    method removeFromUiThread (line 92) | public final void removeFromUiThread(final Runnable task) {
    method queueEvent (line 103) | protected final synchronized void queueEvent(final Runnable task, fina...
    method removeEvent (line 123) | protected final synchronized void removeEvent(final Runnable task) {

FILE: libuvccamera/src/main/java/com/serenegiant/usb/CameraDialog.java
  class CameraDialog (line 51) | public class CameraDialog extends DialogFragment {
    type CameraDialogParent (line 54) | public interface CameraDialogParent {
      method getUSBMonitor (line 55) | public USBMonitor getUSBMonitor();
      method onDialogResult (line 56) | public void onDialogResult(boolean canceled);
    method showDialog (line 64) | public static CameraDialog showDialog(final Activity parent/* add para...
    method newInstance (line 74) | public static CameraDialog newInstance(/* add parameters here if you n...
    method CameraDialog (line 86) | public CameraDialog(/* no arguments */) {
    method onAttach (line 90) | @SuppressWarnings("deprecation")
    method onCreate (line 105) | @Override
    method onSaveInstanceState (line 112) | @Override
    method onCreateDialog (line 120) | @Override
    method initView (line 138) | private final View initView() {
    method onResume (line 147) | @Override
    method onClick (line 158) | @Override
    method onClick (line 169) | @Override
    method onCancel (line 186) | @Override
    method updateDevices (line 192) | public void updateDevices() {
    class DeviceListAdapter (line 199) | private static final class DeviceListAdapter extends BaseAdapter {
      method DeviceListAdapter (line 204) | public DeviceListAdapter(final Context context, final List<UsbDevice...
      method getCount (line 209) | @Override
      method getItem (line 214) | @Override
      method getItemId (line 222) | @Override
      method getView (line 227) | @Override

FILE: libuvccamera/src/main/java/com/serenegiant/usb/DeviceFilter.java
  class DeviceFilter (line 41) | public final class DeviceFilter {
    method DeviceFilter (line 64) | public DeviceFilter(final int vid, final int pid, final int clasz, fin...
    method DeviceFilter (line 69) | public DeviceFilter(final int vid, final int pid, final int clasz, fin...
    method DeviceFilter (line 84) | public DeviceFilter(final UsbDevice device) {
    method DeviceFilter (line 88) | public DeviceFilter(final UsbDevice device, final boolean isExclude) {
    method getDeviceFilters (line 108) | public static List<DeviceFilter> getDeviceFilters(final Context contex...
    method getAttributeInteger (line 140) | private static final int getAttributeInteger(final Context context, fi...
    method getAttributeBoolean (line 181) | private static final boolean getAttributeBoolean(final Context context...
    method getAttributeString (line 225) | private static final String getAttributeString(final Context context, ...
    method readEntryOne (line 247) | public static DeviceFilter readEntryOne(final Context context, final X...
    method matches (line 342) | private boolean matches(final int clasz, final int subclass, final int...
    method matches (line 353) | public boolean matches(final UsbDevice device) {
    method isExclude (line 398) | public boolean isExclude(final UsbDevice device) {
    method matches (line 407) | public boolean matches(final DeviceFilter f) {
    method equals (line 443) | @Override
    method hashCode (line 509) | @Override
    method toString (line 515) | @Override

FILE: libuvccamera/src/main/java/com/serenegiant/usb/IButtonCallback.java
  type IButtonCallback (line 3) | public interface IButtonCallback {
    method onButton (line 4) | void onButton(int button, int state);

FILE: libuvccamera/src/main/java/com/serenegiant/usb/IFrameCallback.java
  type IFrameCallback (line 31) | public interface IFrameCallback {
    method onFrame (line 44) | public void onFrame(ByteBuffer frame);

FILE: libuvccamera/src/main/java/com/serenegiant/usb/IStatusCallback.java
  type IStatusCallback (line 5) | public interface IStatusCallback {
    method onStatus (line 6) | void onStatus(int statusClass, int event, int selector, int statusAttr...

FILE: libuvccamera/src/main/java/com/serenegiant/usb/Size.java
  class Size (line 31) | public class Size implements Parcelable {
    method Size (line 61) | public Size(final int _type, final int _frame_type, final int _index, ...
    method Size (line 83) | public Size(final int _type, final int _frame_type, final int _index, ...
    method Size (line 107) | public Size(final int _type, final int _frame_type, final int _index, ...
    method Size (line 130) | public Size(final Size other) {
    method Size (line 148) | private Size(final Parcel source) {
    method set (line 170) | public Size set(final Size other) {
    method getCurrentFrameRate (line 191) | public float getCurrentFrameRate() throws IllegalStateException {
    method setCurrentFrameRate (line 199) | public void setCurrentFrameRate(final float frameRate) {
    method describeContents (line 212) | @Override
    method writeToParcel (line 217) | @Override
    method updateFrameRate (line 231) | public void updateFrameRate() {
    method toString (line 282) | @Override
    method createFromParcel (line 293) | @Override
    method newArray (line 297) | @Override

FILE: libuvccamera/src/main/java/com/serenegiant/usb/USBMonitor.java
  class USBMonitor (line 54) | public final class USBMonitor {
    type OnDeviceConnectListener (line 84) | public interface OnDeviceConnectListener {
      method onAttach (line 89) | public void onAttach(UsbDevice device);
      method onDettach (line 94) | public void onDettach(UsbDevice device);
      method onConnect (line 101) | public void onConnect(UsbDevice device, UsbControlBlock ctrlBlock, b...
      method onDisconnect (line 107) | public void onDisconnect(UsbDevice device, UsbControlBlock ctrlBlock);
      method onCancel (line 112) | public void onCancel(UsbDevice device);
    method USBMonitor (line 115) | public USBMonitor(final Context context, final OnDeviceConnectListener...
    method destroy (line 131) | public void destroy() {
    method register (line 164) | public synchronized void register() throws IllegalStateException {
    method unregister (line 186) | public synchronized void unregister() throws IllegalStateException {
    method isRegistered (line 206) | public synchronized boolean isRegistered() {
    method setDeviceFilter (line 215) | public void setDeviceFilter(final DeviceFilter filter) throws IllegalS...
    method addDeviceFilter (line 226) | public void addDeviceFilter(final DeviceFilter filter) throws IllegalS...
    method removeDeviceFilter (line 236) | public void removeDeviceFilter(final DeviceFilter filter) throws Illeg...
    method setDeviceFilter (line 246) | public void setDeviceFilter(final List<DeviceFilter> filters) throws I...
    method addDeviceFilter (line 257) | public void addDeviceFilter(final List<DeviceFilter> filters) throws I...
    method removeDeviceFilter (line 266) | public void removeDeviceFilter(final List<DeviceFilter> filters) throw...
    method getDeviceCount (line 276) | public int getDeviceCount() throws IllegalStateException {
    method getDeviceList (line 286) | public List<UsbDevice> getDeviceList() throws IllegalStateException {
    method getDeviceList (line 297) | public List<UsbDevice> getDeviceList(final List<DeviceFilter> filters)...
    method getDeviceList (line 327) | public List<UsbDevice> getDeviceList(final DeviceFilter filter) throws...
    method getDevices (line 346) | public Iterator<UsbDevice> getDevices() throws IllegalStateException {
    method dumpDevices (line 358) | public final void dumpDevices() {
    method hasPermission (line 387) | public final boolean hasPermission(final UsbDevice device) throws Ille...
    method updatePermission (line 398) | private boolean updatePermission(final UsbDevice device, final boolean...
    method requestPermission (line 417) | public synchronized boolean requestPermission(final UsbDevice device) {
    method openDevice (line 453) | public UsbControlBlock openDevice(final UsbDevice device) throws Secur...
    method onReceive (line 471) | @Override
    method run (line 515) | @Override
    method processConnect (line 552) | private final void processConnect(final UsbDevice device) {
    method processCancel (line 576) | private final void processCancel(final UsbDevice device) {
    method processAttach (line 590) | private final void processAttach(final UsbDevice device) {
    method processDettach (line 603) | private final void processDettach(final UsbDevice device) {
    method getDeviceKeyName (line 623) | public static final String getDeviceKeyName(final UsbDevice device) {
    method getDeviceKeyName (line 634) | public static final String getDeviceKeyName(final UsbDevice device, fi...
    method getDeviceKeyName (line 648) | @SuppressLint("NewApi")
    method getDeviceKey (line 683) | public static final int getDeviceKey(final UsbDevice device) {
    method getDeviceKey (line 695) | public static final int getDeviceKey(final UsbDevice device, final boo...
    method getDeviceKey (line 708) | public static final int getDeviceKey(final UsbDevice device, final Str...
    class UsbDeviceInfo (line 712) | public static class UsbDeviceInfo {
      method clear (line 719) | private void clear() {
      method toString (line 723) | @Override
    method getString (line 833) | private static String getString(final UsbDeviceConnection connection, ...
    method getDeviceInfo (line 863) | public UsbDeviceInfo getDeviceInfo(final UsbDevice device) {
    method getDeviceInfo (line 874) | public static UsbDeviceInfo getDeviceInfo(final Context context, final...
    method updateDeviceInfo (line 885) | public static UsbDeviceInfo updateDeviceInfo(final UsbManager manager,...
    class UsbControlBlock (line 955) | public static final class UsbControlBlock implements Cloneable {
      method UsbControlBlock (line 969) | private UsbControlBlock(final USBMonitor monitor, final UsbDevice de...
      method UsbControlBlock (line 1001) | private UsbControlBlock(final UsbControlBlock src) throws IllegalSta...
      method clone (line 1026) | @Override
      method getUSBMonitor (line 1037) | public USBMonitor getUSBMonitor() {
      method getDevice (line 1041) | public final UsbDevice getDevice() {
      method getDeviceName (line 1049) | public String getDeviceName() {
      method getDeviceId (line 1058) | public int getDeviceId() {
      method getDeviceKeyName (line 1067) | public String getDeviceKeyName() {
      method getDeviceKeyName (line 1077) | public String getDeviceKeyName(final boolean useNewAPI) throws Illeg...
      method getDeviceKey (line 1087) | public int getDeviceKey() throws IllegalStateException {
      method getDeviceKey (line 1098) | public int getDeviceKey(final boolean useNewAPI) throws IllegalState...
      method getDeviceKeyNameWithSerial (line 1108) | public String getDeviceKeyNameWithSerial() {
      method getDeviceKeyWithSerial (line 1117) | public int getDeviceKeyWithSerial() {
      method getConnection (line 1125) | public synchronized UsbDeviceConnection getConnection() {
      method getFileDescriptor (line 1134) | public synchronized int getFileDescriptor() throws IllegalStateExcep...
      method getRawDescriptors (line 1144) | public synchronized byte[] getRawDescriptors() throws IllegalStateEx...
      method getVenderId (line 1153) | public int getVenderId() {
      method getProductId (line 1162) | public int getProductId() {
      method getUsbVersion (line 1171) | public String getUsbVersion() {
      method getManufacture (line 1179) | public String getManufacture() {
      method getProductName (line 1187) | public String getProductName() {
      method getVersion (line 1195) | public String getVersion() {
      method getSerial (line 1203) | public String getSerial() {
      method getBusNum (line 1207) | public int getBusNum() {
      method getDevNum (line 1211) | public int getDevNum() {
      method getInterface (line 1220) | public synchronized UsbInterface getInterface(final int interface_id...
      method getInterface (line 1231) | public synchronized UsbInterface getInterface(final int interface_id...
      method claimInterface (line 1260) | public synchronized void claimInterface(final UsbInterface intf) {
      method claimInterface (line 1264) | public synchronized void claimInterface(final UsbInterface intf, fin...
      method releaseInterface (line 1274) | public synchronized void releaseInterface(final UsbInterface intf) t...
      method close (line 1291) | public synchronized void close() {
      method equals (line 1320) | @Override
      method checkConnection (line 1339) | private synchronized void checkConnection() throws IllegalStateExcep...

FILE: libuvccamera/src/main/java/com/serenegiant/usb/USBVendorId.java
  class USBVendorId (line 28) | public class USBVendorId {
    method vendorName (line 31) | public static String vendorName(final int vendor_id) {

FILE: libuvccamera/src/main/java/com/serenegiant/usb/UVCCamera.java
  class UVCCamera (line 42) | public class UVCCamera {
    method UVCCamera (line 179) | public UVCCamera() {
    method open (line 189) | public synchronized void open(final UsbControlBlock ctrlBlock) {
    method setStatusCallback (line 217) | public void setStatusCallback(final IStatusCallback callback) {
    method setButtonCallback (line 227) | public void setButtonCallback(final IButtonCallback callback) {
    method close (line 236) | public synchronized void close() {
    method getDevice (line 254) | public UsbDevice getDevice() {
    method getDeviceName (line 258) | public String getDeviceName(){
    method getUsbControlBlock (line 262) | public UsbControlBlock getUsbControlBlock() {
    method getSupportedSize (line 266) | public synchronized String getSupportedSize() {
    method getPreviewSize (line 270) | public Size getPreviewSize() {
    method setPreviewSize (line 288) | public void setPreviewSize(final int width, final int height) {
    method setPreviewSize (line 298) | public void setPreviewSize(final int width, final int height, final in...
    method setPreviewSize (line 309) | public void setPreviewSize(final int width, final int height, final in...
    method setPreviewSize (line 322) | public void setPreviewSize(final int width, final int height, final in...
    method getSupportedSizeList (line 336) | public List<Size> getSupportedSizeList() {
    method getSupportedSize (line 341) | public static List<Size> getSupportedSize(final int type, final String...
    method addSize (line 363) | private static final void addSize(final JSONObject format, final int f...
    method setPreviewDisplay (line 381) | public synchronized void setPreviewDisplay(final SurfaceHolder holder) {
    method setPreviewTexture (line 390) | public synchronized void setPreviewTexture(final SurfaceTexture textur...
    method setPreviewDisplay (line 399) | public synchronized void setPreviewDisplay(final Surface surface) {
    method setFrameCallback (line 408) | public void setFrameCallback(final IFrameCallback callback, final int ...
    method startPreview (line 417) | public synchronized void startPreview() {
    method stopPreview (line 426) | public synchronized void stopPreview() {
    method destroy (line 436) | public synchronized void destroy() {
    method checkSupportFlag (line 446) | public boolean checkSupportFlag(final long flag) {
    method setAutoFocus (line 455) | public synchronized void setAutoFocus(final boolean autoFocus) {
    method getAutoFocus (line 461) | public synchronized boolean getAutoFocus() {
    method setFocus (line 472) | public synchronized void setFocus(final int focus) {
    method getFocus (line 484) | public synchronized int getFocus(final int focus_abs) {
    method getFocus (line 499) | public synchronized int getFocus() {
    method resetFocus (line 503) | public synchronized void resetFocus() {
    method setAutoWhiteBlance (line 510) | public synchronized void setAutoWhiteBlance(final boolean autoWhiteBla...
    method getAutoWhiteBlance (line 516) | public synchronized boolean getAutoWhiteBlance() {
    method setWhiteBlance (line 528) | public synchronized void setWhiteBlance(final int whiteBlance) {
    method getWhiteBlance (line 540) | public synchronized int getWhiteBlance(final int whiteBlance_abs) {
    method getWhiteBlance (line 555) | public synchronized int getWhiteBlance() {
    method resetWhiteBlance (line 559) | public synchronized void resetWhiteBlance() {
    method setBrightness (line 568) | public synchronized void setBrightness(final int brightness) {
    method getBrightness (line 580) | public synchronized int getBrightness(final int brightness_abs) {
    method getBrightness (line 595) | public synchronized int getBrightness() {
    method resetBrightness (line 599) | public synchronized void resetBrightness() {
    method setContrast (line 609) | public synchronized void setContrast(final int contrast) {
    method getContrast (line 622) | public synchronized int getContrast(final int contrast_abs) {
    method getContrast (line 636) | public synchronized int getContrast() {
    method resetContrast (line 640) | public synchronized void resetContrast() {
    method setSharpness (line 650) | public synchronized void setSharpness(final int sharpness) {
    method getSharpness (line 662) | public synchronized int getSharpness(final int sharpness_abs) {
    method getSharpness (line 677) | public synchronized int getSharpness() {
    method resetSharpness (line 681) | public synchronized void resetSharpness() {
    method setGain (line 690) | public synchronized void setGain(final int gain) {
    method getGain (line 702) | public synchronized int getGain(final int gain_abs) {
    method getGain (line 717) | public synchronized int getGain() {
    method resetGain (line 721) | public synchronized void resetGain() {
    method setGamma (line 731) | public synchronized void setGamma(final int gamma) {
    method getGamma (line 743) | public synchronized int getGamma(final int gamma_abs) {
    method getGamma (line 758) | public synchronized int getGamma() {
    method resetGamma (line 762) | public synchronized void resetGamma() {
    method setSaturation (line 772) | public synchronized void setSaturation(final int saturation) {
    method getSaturation (line 784) | public synchronized int getSaturation(final int saturation_abs) {
    method getSaturation (line 799) | public synchronized int getSaturation() {
    method resetSaturation (line 803) | public synchronized void resetSaturation() {
    method setHue (line 812) | public synchronized void setHue(final int hue) {
    method getHue (line 824) | public synchronized int getHue(final int hue_abs) {
    method getHue (line 839) | public synchronized int getHue() {
    method resetHue (line 843) | public synchronized void resetHue() {
    method setPowerlineFrequency (line 850) | public void setPowerlineFrequency(final int frequency) {
    method getPowerlineFrequency (line 855) | public int getPowerlineFrequency() {
    method setZoom (line 864) | public synchronized void setZoom(final int zoom) {
    method getZoom (line 879) | public synchronized int getZoom(final int zoom_abs) {
    method getZoom (line 894) | public synchronized int getZoom() {
    method resetZoom (line 898) | public synchronized void resetZoom() {
    method updateCameraParams (line 905) | public synchronized void updateCameraParams() {
    method dumpControls (line 1000) | private static final void dumpControls(final long controlSupports) {
    method dumpProc (line 1007) | private static final void dumpProc(final long procSupports) {
    method getUSBFSName (line 1014) | private final String getUSBFSName(final UsbControlBlock ctrlBlock) {
    method nativeCreate (line 1032) | private final native long nativeCreate();
    method nativeDestroy (line 1033) | private final native void nativeDestroy(final long id_camera);
    method nativeConnect (line 1035) | private final native int nativeConnect(long id_camera, int venderId, i...
    method nativeRelease (line 1036) | private static final native int nativeRelease(final long id_camera);
    method nativeSetStatusCallback (line 1038) | private static final native int nativeSetStatusCallback(final long mNa...
    method nativeSetButtonCallback (line 1039) | private static final native int nativeSetButtonCallback(final long mNa...
    method nativeSetPreviewSize (line 1041) | private static final native int nativeSetPreviewSize(final long id_cam...
    method nativeGetSupportedSize (line 1042) | private static final native String nativeGetSupportedSize(final long i...
    method nativeStartPreview (line 1043) | private static final native int nativeStartPreview(final long id_camera);
    method nativeStopPreview (line 1044) | private static final native int nativeStopPreview(final long id_camera);
    method nativeSetPreviewDisplay (line 1045) | private static final native int nativeSetPreviewDisplay(final long id_...
    method nativeSetFrameCallback (line 1046) | private static final native int nativeSetFrameCallback(final long mNat...
    method startCapture (line 1053) | public void startCapture(final Surface surface) {
    method stopCapture (line 1063) | public void stopCapture() {
    method nativeSetCaptureDisplay (line 1068) | private static final native int nativeSetCaptureDisplay(final long id_...
    method nativeGetCtrlSupports (line 1070) | private static final native long nativeGetCtrlSupports(final long id_c...
    method nativeGetProcSupports (line 1071) | private static final native long nativeGetProcSupports(final long id_c...
    method nativeUpdateScanningModeLimit (line 1073) | private final native int nativeUpdateScanningModeLimit(final long id_c...
    method nativeSetScanningMode (line 1074) | private static final native int nativeSetScanningMode(final long id_ca...
    method nativeGetScanningMode (line 1075) | private static final native int nativeGetScanningMode(final long id_ca...
    method nativeUpdateExposureModeLimit (line 1077) | private final native int nativeUpdateExposureModeLimit(final long id_c...
    method nativeSetExposureMode (line 1078) | private static final native int nativeSetExposureMode(final long id_ca...
    method nativeGetExposureMode (line 1079) | private static final native int nativeGetExposureMode(final long id_ca...
    method nativeUpdateExposurePriorityLimit (line 1081) | private final native int nativeUpdateExposurePriorityLimit(final long ...
    method nativeSetExposurePriority (line 1082) | private static final native int nativeSetExposurePriority(final long i...
    method nativeGetExposurePriority (line 1083) | private static final native int nativeGetExposurePriority(final long i...
    method nativeUpdateExposureLimit (line 1085) | private final native int nativeUpdateExposureLimit(final long id_camera);
    method nativeSetExposure (line 1086) | private static final native int nativeSetExposure(final long id_camera...
    method nativeGetExposure (line 1087) | private static final native int nativeGetExposure(final long id_camera);
    method nativeUpdateExposureRelLimit (line 1089) | private final native int nativeUpdateExposureRelLimit(final long id_ca...
    method nativeSetExposureRel (line 1090) | private static final native int nativeSetExposureRel(final long id_cam...
    method nativeGetExposureRel (line 1091) | private static final native int nativeGetExposureRel(final long id_cam...
    method nativeUpdateAutoFocusLimit (line 1093) | private final native int nativeUpdateAutoFocusLimit(final long id_came...
    method nativeSetAutoFocus (line 1094) | private static final native int nativeSetAutoFocus(final long id_camer...
    method nativeGetAutoFocus (line 1095) | private static final native int nativeGetAutoFocus(final long id_camera);
    method nativeUpdateFocusLimit (line 1097) | private final native int nativeUpdateFocusLimit(final long id_camera);
    method nativeSetFocus (line 1098) | private static final native int nativeSetFocus(final long id_camera, f...
    method nativeGetFocus (line 1099) | private static final native int nativeGetFocus(final long id_camera);
    method nativeUpdateFocusRelLimit (line 1101) | private final native int nativeUpdateFocusRelLimit(final long id_camera);
    method nativeSetFocusRel (line 1102) | private static final native int nativeSetFocusRel(final long id_camera...
    method nativeGetFocusRel (line 1103) | private static final native int nativeGetFocusRel(final long id_camera);
    method nativeUpdateIrisLimit (line 1105) | private final native int nativeUpdateIrisLimit(final long id_camera);
    method nativeSetIris (line 1106) | private static final native int nativeSetIris(final long id_camera, fi...
    method nativeGetIris (line 1107) | private static final native int nativeGetIris(final long id_camera);
    method nativeUpdateIrisRelLimit (line 1109) | private final native int nativeUpdateIrisRelLimit(final long id_camera);
    method nativeSetIrisRel (line 1110) | private static final native int nativeSetIrisRel(final long id_camera,...
    method nativeGetIrisRel (line 1111) | private static final native int nativeGetIrisRel(final long id_camera);
    method nativeUpdatePanLimit (line 1113) | private final native int nativeUpdatePanLimit(final long id_camera);
    method nativeSetPan (line 1114) | private static final native int nativeSetPan(final long id_camera, fin...
    method nativeGetPan (line 1115) | private static final native int nativeGetPan(final long id_camera);
    method nativeUpdatePanRelLimit (line 1117) | private final native int nativeUpdatePanRelLimit(final long id_camera);
    method nativeSetPanRel (line 1118) | private static final native int nativeSetPanRel(final long id_camera, ...
    method nativeGetPanRel (line 1119) | private static final native int nativeGetPanRel(final long id_camera);
    method nativeUpdateTiltLimit (line 1121) | private final native int nativeUpdateTiltLimit(final long id_camera);
    method nativeSetTilt (line 1122) | private static final native int nativeSetTilt(final long id_camera, fi...
    method nativeGetTilt (line 1123) | private static final native int nativeGetTilt(final long id_camera);
    method nativeUpdateTiltRelLimit (line 1125) | private final native int nativeUpdateTiltRelLimit(final long id_camera);
    method nativeSetTiltRel (line 1126) | private static final native int nativeSetTiltRel(final long id_camera,...
    method nativeGetTiltRel (line 1127) | private static final native int nativeGetTiltRel(final long id_camera);
    method nativeUpdateRollLimit (line 1129) | private final native int nativeUpdateRollLimit(final long id_camera);
    method nativeSetRoll (line 1130) | private static final native int nativeSetRoll(final long id_camera, fi...
    method nativeGetRoll (line 1131) | private static final native int nativeGetRoll(final long id_camera);
    method nativeUpdateRollRelLimit (line 1133) | private final native int nativeUpdateRollRelLimit(final long id_camera);
    method nativeSetRollRel (line 1134) | private static final native int nativeSetRollRel(final long id_camera,...
    method nativeGetRollRel (line 1135) | private static final native int nativeGetRollRel(final long id_camera);
    method nativeUpdateAutoWhiteBlanceLimit (line 1137) | private final native int nativeUpdateAutoWhiteBlanceLimit(final long i...
    method nativeSetAutoWhiteBlance (line 1138) | private static final native int nativeSetAutoWhiteBlance(final long id...
    method nativeGetAutoWhiteBlance (line 1139) | private static final native int nativeGetAutoWhiteBlance(final long id...
    method nativeUpdateAutoWhiteBlanceCompoLimit (line 1141) | private final native int nativeUpdateAutoWhiteBlanceCompoLimit(final l...
    method nativeSetAutoWhiteBlanceCompo (line 1142) | private static final native int nativeSetAutoWhiteBlanceCompo(final lo...
    method nativeGetAutoWhiteBlanceCompo (line 1143) | private static final native int nativeGetAutoWhiteBlanceCompo(final lo...
    method nativeUpdateWhiteBlanceLimit (line 1145) | private final native int nativeUpdateWhiteBlanceLimit(final long id_ca...
    method nativeSetWhiteBlance (line 1146) | private static final native int nativeSetWhiteBlance(final long id_cam...
    method nativeGetWhiteBlance (line 1147) | private static final native int nativeGetWhiteBlance(final long id_cam...
    method nativeUpdateWhiteBlanceCompoLimit (line 1149) | private final native int nativeUpdateWhiteBlanceCompoLimit(final long ...
    method nativeSetWhiteBlanceCompo (line 1150) | private static final native int nativeSetWhiteBlanceCompo(final long i...
    method nativeGetWhiteBlanceCompo (line 1151) | private static final native int nativeGetWhiteBlanceCompo(final long i...
    method nativeUpdateBacklightCompLimit (line 1153) | private final native int nativeUpdateBacklightCompLimit(final long id_...
    method nativeSetBacklightComp (line 1154) | private static final native int nativeSetBacklightComp(final long id_c...
    method nativeGetBacklightComp (line 1155) | private static final native int nativeGetBacklightComp(final long id_c...
    method nativeUpdateBrightnessLimit (line 1157) | private final native int nativeUpdateBrightnessLimit(final long id_cam...
    method nativeSetBrightness (line 1158) | private static final native int nativeSetBrightness(final long id_came...
    method nativeGetBrightness (line 1159) | private static final native int nativeGetBrightness(final long id_came...
    method nativeUpdateContrastLimit (line 1161) | private final native int nativeUpdateContrastLimit(final long id_camera);
    method nativeSetContrast (line 1162) | private static final native int nativeSetContrast(final long id_camera...
    method nativeGetContrast (line 1163) | private static final native int nativeGetContrast(final long id_camera);
    method nativeUpdateAutoContrastLimit (line 1165) | private final native int nativeUpdateAutoContrastLimit(final long id_c...
    method nativeSetAutoContrast (line 1166) | private static final native int nativeSetAutoContrast(final long id_ca...
    method nativeGetAutoContrast (line 1167) | private static final native int nativeGetAutoContrast(final long id_ca...
    method nativeUpdateSharpnessLimit (line 1169) | private final native int nativeUpdateSharpnessLimit(final long id_came...
    method nativeSetSharpness (line 1170) | private static final native int nativeSetSharpness(final long id_camer...
    method nativeGetSharpness (line 1171) | private static final native int nativeGetSharpness(final long id_camera);
    method nativeUpdateGainLimit (line 1173) | private final native int nativeUpdateGainLimit(final long id_camera);
    method nativeSetGain (line 1174) | private static final native int nativeSetGain(final long id_camera, fi...
    method nativeGetGain (line 1175) | private static final native int nativeGetGain(final long id_camera);
    method nativeUpdateGammaLimit (line 1177) | private final native int nativeUpdateGammaLimit(final long id_camera);
    method nativeSetGamma (line 1178) | private static final native int nativeSetGamma(final long id_camera, f...
    method nativeGetGamma (line 1179) | private static final native int nativeGetGamma(final long id_camera);
    method nativeUpdateSaturationLimit (line 1181) | private final native int nativeUpdateSaturationLimit(final long id_cam...
    method nativeSetSaturation (line 1182) | private static final native int nativeSetSaturation(final long id_came...
    method nativeGetSaturation (line 1183) | private static final native int nativeGetSaturation(final long id_came...
    method nativeUpdateHueLimit (line 1185) | private final native int nativeUpdateHueLimit(final long id_camera);
    method nativeSetHue (line 1186) | private static final native int nativeSetHue(final long id_camera, fin...
    method nativeGetHue (line 1187) | private static final native int nativeGetHue(final long id_camera);
    method nativeUpdateAutoHueLimit (line 1189) | private final native int nativeUpdateAutoHueLimit(final long id_camera);
    method nativeSetAutoHue (line 1190) | private static final native int nativeSetAutoHue(final long id_camera,...
    method nativeGetAutoHue (line 1191) | private static final native int nativeGetAutoHue(final long id_camera);
    method nativeUpdatePowerlineFrequencyLimit (line 1193) | private final native int nativeUpdatePowerlineFrequencyLimit(final lon...
    method nativeSetPowerlineFrequency (line 1194) | private static final native int nativeSetPowerlineFrequency(final long...
    method nativeGetPowerlineFrequency (line 1195) | private static final native int nativeGetPowerlineFrequency(final long...
    method nativeUpdateZoomLimit (line 1197) | private final native int nativeUpdateZoomLimit(final long id_camera);
    method nativeSetZoom (line 1198) | private static final native int nativeSetZoom(final long id_camera, fi...
    method nativeGetZoom (line 1199) | private static final native int nativeGetZoom(final long id_camera);
    method nativeUpdateZoomRelLimit (line 1201) | private final native int nativeUpdateZoomRelLimit(final long id_camera);
    method nativeSetZoomRel (line 1202) | private static final native int nativeSetZoomRel(final long id_camera,...
    method nativeGetZoomRel (line 1203) | private static final native int nativeGetZoomRel(final long id_camera);
    method nativeUpdateDigitalMultiplierLimit (line 1205) | private final native int nativeUpdateDigitalMultiplierLimit(final long...
    method nativeSetDigitalMultiplier (line 1206) | private static final native int nativeSetDigitalMultiplier(final long ...
    method nativeGetDigitalMultiplier (line 1207) | private static final native int nativeGetDigitalMultiplier(final long ...
    method nativeUpdateDigitalMultiplierLimitLimit (line 1209) | private final native int nativeUpdateDigitalMultiplierLimitLimit(final...
    method nativeSetDigitalMultiplierLimit (line 1210) | private static final native int nativeSetDigitalMultiplierLimit(final ...
    method nativeGetDigitalMultiplierLimit (line 1211) | private static final native int nativeGetDigitalMultiplierLimit(final ...
    method nativeUpdateAnalogVideoStandardLimit (line 1213) | private final native int nativeUpdateAnalogVideoStandardLimit(final lo...
    method nativeSetAnalogVideoStandard (line 1214) | private static final native int nativeSetAnalogVideoStandard(final lon...
    method nativeGetAnalogVideoStandard (line 1215) | private static final native int nativeGetAnalogVideoStandard(final lon...
    method nativeUpdateAnalogVideoLockStateLimit (line 1217) | private final native int nativeUpdateAnalogVideoLockStateLimit(final l...
    method nativeSetAnalogVideoLoackState (line 1218) | private static final native int nativeSetAnalogVideoLoackState(final l...
    method nativeGetAnalogVideoLoackState (line 1219) | private static final native int nativeGetAnalogVideoLoackState(final l...
    method nativeUpdatePrivacyLimit (line 1221) | private final native int nativeUpdatePrivacyLimit(final long id_camera);
    method nativeSetPrivacy (line 1222) | private static final native int nativeSetPrivacy(final long id_camera,...
    method nativeGetPrivacy (line 1223) | private static final native int nativeGetPrivacy(final long id_camera);

FILE: libuvccamera/src/main/jni/UVCCamera/Parameters.cpp
  function write (line 34) | static void write(Writer<StringBuffer> &writer, const char *key, const c...
  function write (line 39) | static void write(Writer<StringBuffer> &writer, const char *key, uint16_...
  function write (line 44) | static void write(Writer<StringBuffer> &writer, const char *key, int32_t...
  function write (line 49) | static void write(Writer<StringBuffer> &writer, const char *key, uint32_...
  function write (line 54) | static void write(Writer<StringBuffer> &writer, const char *key, int64_t...
  function write (line 59) | static void write(Writer<StringBuffer> &writer, const char *key, uint64_...
  function writerFormat (line 130) | static void writerFormat(Writer<StringBuffer> &writer, uvc_format_desc_t...
  function writerFormatDescriptions (line 223) | static void writerFormatDescriptions(Writer<StringBuffer> &writer, uvc_s...

FILE: libuvccamera/src/main/jni/UVCCamera/Parameters.h
  function class (line 31) | class UVCDiags {

FILE: libuvccamera/src/main/jni/UVCCamera/UVCButtonCallback.h
  type Fields_ibuttoncallback (line 12) | typedef struct {
  function class (line 16) | class UVCButtonCallback {

FILE: libuvccamera/src/main/jni/UVCCamera/UVCCamera.cpp
  function DL_FOREACH (line 313) | DL_FOREACH(input_terminals, it)
  function DL_FOREACH (line 338) | DL_FOREACH(proc_units, pu)
  function uvc_error_t (line 363) | static uvc_error_t update_ctrl_values(uvc_device_handle_t *devh, control...
  function uvc_error_t (line 393) | static uvc_error_t update_ctrl_values(uvc_device_handle_t *devh, control...
  function uvc_error_t (line 423) | static uvc_error_t update_ctrl_values(uvc_device_handle_t *devh, control...
  function uvc_error_t (line 453) | static uvc_error_t update_ctrl_values(uvc_device_handle_t *devh, control...
  function uvc_error_t (line 483) | static uvc_error_t update_ctrl_values(uvc_device_handle_t *devh, control...
  function uvc_error_t (line 513) | static uvc_error_t update_ctrl_values(uvc_device_handle_t *devh, control...
  function uvc_error_t (line 544) | static uvc_error_t update_ctrl_values(uvc_device_handle_t *devh, control...
  function uvc_error_t (line 576) | static uvc_error_t update_ctrl_values(uvc_device_handle_t *devh, control...
  function uvc_error_t (line 606) | static uvc_error_t update_ctrl_values(uvc_device_handle_t *devh, control...
  function uvc_error_t (line 636) | static uvc_error_t update_ctrl_values(uvc_device_handle_t *devh, control...

FILE: libuvccamera/src/main/jni/UVCCamera/UVCCamera.h
  type control_value_t (line 80) | typedef struct control_value {
  type uvc_error_t (line 88) | typedef uvc_error_t (*paramget_func_i8)(uvc_device_handle_t *devh, int8_...
  type uvc_error_t (line 89) | typedef uvc_error_t (*paramget_func_i16)(uvc_device_handle_t *devh, int1...
  type uvc_error_t (line 90) | typedef uvc_error_t (*paramget_func_i32)(uvc_device_handle_t *devh, int3...
  type uvc_error_t (line 91) | typedef uvc_error_t (*paramget_func_u8)(uvc_device_handle_t *devh, uint8...
  type uvc_error_t (line 92) | typedef uvc_error_t (*paramget_func_u16)(uvc_device_handle_t *devh, uint...
  type uvc_error_t (line 93) | typedef uvc_error_t (*paramget_func_u32)(uvc_device_handle_t *devh, uint...
  type uvc_error_t (line 94) | typedef uvc_error_t (*paramget_func_u8u8)(uvc_device_handle_t *devh, uin...
  type uvc_error_t (line 95) | typedef uvc_error_t (*paramget_func_i8u8)(uvc_device_handle_t *devh, int...
  type uvc_error_t (line 96) | typedef uvc_error_t (*paramget_func_i8u8u8)(uvc_device_handle_t *devh, i...
  type uvc_error_t (line 97) | typedef uvc_error_t (*paramget_func_i32i32)(uvc_device_handle_t *devh, i...
  type uvc_error_t (line 99) | typedef uvc_error_t (*paramset_func_i8)(uvc_device_handle_t *devh, int8_...
  type uvc_error_t (line 100) | typedef uvc_error_t (*paramset_func_i16)(uvc_device_handle_t *devh, int1...
  type uvc_error_t (line 101) | typedef uvc_error_t (*paramset_func_i32)(uvc_device_handle_t *devh, int3...
  type uvc_error_t (line 102) | typedef uvc_error_t (*paramset_func_u8)(uvc_device_handle_t *devh, uint8...
  type uvc_error_t (line 103) | typedef uvc_error_t (*paramset_func_u16)(uvc_device_handle_t *devh, uint...
  type uvc_error_t (line 104) | typedef uvc_error_t (*paramset_func_u32)(uvc_device_handle_t *devh, uint...
  type uvc_error_t (line 105) | typedef uvc_error_t (*paramset_func_u8u8)(uvc_device_handle_t *devh, uin...
  type uvc_error_t (line 106) | typedef uvc_error_t (*paramset_func_i8u8)(uvc_device_handle_t *devh, int...
  type uvc_error_t (line 107) | typedef uvc_error_t (*paramset_func_i8u8u8)(uvc_device_handle_t *devh, i...
  type uvc_error_t (line 108) | typedef uvc_error_t (*paramset_func_i32i32)(uvc_device_handle_t *devh, i...
  function class (line 110) | class UVCCamera {

FILE: libuvccamera/src/main/jni/UVCCamera/UVCPreview.cpp
  function uvc_frame_t (line 109) | uvc_frame_t *UVCPreview::get_frame(size_t data_bytes) {
  function uvc_frame_t (line 434) | uvc_frame_t *UVCPreview::waitPreviewFrame() {
  function copyFrame (line 568) | static void copyFrame(const uint8_t *src, uint8_t *dest, const int width...
  function copyToSurface (line 596) | int copyToSurface(uvc_frame_t *frame, ANativeWindow **window) {
  function uvc_frame_t (line 627) | uvc_frame_t *UVCPreview::draw_preview_one(uvc_frame_t *frame, ANativeWin...
  function uvc_frame_t (line 717) | uvc_frame_t *UVCPreview::waitCaptureFrame() {
  function LIKELY (line 816) | LIKELY(isCapturing()) {

FILE: libuvccamera/src/main/jni/UVCCamera/UVCPreview.h
  type uvc_error_t (line 42) | typedef uvc_error_t (*convFunc_t)(uvc_frame_t *in, uvc_frame_t *out);
  type Fields_iframecallback (line 52) | typedef struct {
  function class (line 56) | class UVCPreview {

FILE: libuvccamera/src/main/jni/UVCCamera/UVCStatusCallback.h
  type Fields_istatuscallback (line 12) | typedef struct {
  function class (line 16) | class UVCStatusCallback {

FILE: libuvccamera/src/main/jni/UVCCamera/_onload.cpp
  function jint (line 32) | jint JNI_OnLoad(JavaVM *vm, void *reserved) {

FILE: libuvccamera/src/main/jni/UVCCamera/objectarray.h
  function size (line 46) | void size(int new_size) {
  function T (line 64) | inline T &operator[](int index) { return m_elements[index]; }
  function T (line 65) | inline const T &operator[](int index) const { return m_elements[index]; }
  function put (line 66) | int put(T object) {
  function T (line 78) | T remove(int index) {
  function removeObject (line 89) | void removeObject(T object) {
  function T (line 101) | inline T last() {
  function getIndex (line 111) | int getIndex(const T object) {
  function clear (line 125) | inline void clear() {

FILE: libuvccamera/src/main/jni/UVCCamera/pipeline/AbstractBufferedPipeline.cpp
  function uvc_frame_t (line 140) | uvc_frame_t *AbstractBufferedPipeline::get_frame(const size_t &data_byte...
  function uvc_frame_t (line 279) | uvc_frame_t *AbstractBufferedPipeline::wait_frame() {

FILE: libuvccamera/src/main/jni/UVCCamera/pipeline/AbstractBufferedPipeline.h
  function class (line 26) | class AbstractBufferedPipeline : virtual public IPipeline {

FILE: libuvccamera/src/main/jni/UVCCamera/pipeline/CallbackPipeline.cpp
  function ID_TYPE (line 172) | static ID_TYPE nativeCreate(JNIEnv *env, jobject thiz) {
  function nativeDestroy (line 180) | static void nativeDestroy(JNIEnv *env, jobject thiz,
  function jint (line 193) | static jint nativeGetState(JNIEnv *env, jobject thiz,
  function jint (line 205) | static jint nativeSetPipeline(JNIEnv *env, jobject thiz,
  function jint (line 219) | static jint nativeStart(JNIEnv *env, jobject thiz,
  function jint (line 232) | static jint nativeStop(JNIEnv *env, jobject thiz,
  function jint (line 244) | static jint nativeSetFrameCallback(JNIEnv *env, jobject thiz,
  function register_callback_pipeline (line 273) | int register_callback_pipeline(JNIEnv *env) {

FILE: libuvccamera/src/main/jni/UVCCamera/pipeline/CallbackPipeline.h
  function class (line 11) | class CallbackPipeline : virtual public CaptureBasePipeline {

FILE: libuvccamera/src/main/jni/UVCCamera/pipeline/CaptureBasePipeline.cpp
  function uvc_frame_t (line 96) | uvc_frame_t *CaptureBasePipeline::waitCaptureFrame() {

FILE: libuvccamera/src/main/jni/UVCCamera/pipeline/CaptureBasePipeline.h
  function class (line 16) | class CaptureBasePipeline : virtual public AbstractBufferedPipeline {

FILE: libuvccamera/src/main/jni/UVCCamera/pipeline/ConvertPipeline.cpp
  function ID_TYPE (line 123) | static ID_TYPE nativeCreate(JNIEnv *env, jobject thiz, jint pixel_format) {
  function nativeDestroy (line 131) | static void nativeDestroy(JNIEnv *env, jobject thiz,
  function jint (line 144) | static jint nativeGetState(JNIEnv *env, jobject thiz,
  function jint (line 156) | static jint nativeSetPipeline(JNIEnv *env, jobject thiz,
  function jint (line 170) | static jint nativeStart(JNIEnv *env, jobject thiz,
  function jint (line 183) | static jint nativeStop(JNIEnv *env, jobject thiz,
  function register_convert_pipeline (line 210) | int register_convert_pipeline(JNIEnv *env) {

FILE: libuvccamera/src/main/jni/UVCCamera/pipeline/ConvertPipeline.h
  function class (line 11) | class ConvertPipeline : virtual public AbstractBufferedPipeline {

FILE: libuvccamera/src/main/jni/UVCCamera/pipeline/DistributePipeline.cpp
  function ID_TYPE (line 88) | static ID_TYPE nativeCreate(JNIEnv *env, jobject thiz) {
  function nativeDestroy (line 96) | static void nativeDestroy(JNIEnv *env, jobject thiz,
  function jint (line 109) | static jint nativeGetState(JNIEnv *env, jobject thiz,
  function jint (line 121) | static jint nativeSetPipeline(JNIEnv *env, jobject thiz,
  function jint (line 135) | static jint nativeAddPipeline(JNIEnv *env, jobject thiz,
  function jint (line 149) | static jint nativeRemovePipeline(JNIEnv *env, jobject thiz,
  function jint (line 163) | static jint nativeStart(JNIEnv *env, jobject thiz,
  function jint (line 176) | static jint nativeStop(JNIEnv *env, jobject thiz,
  function register_distribute_pipeline (line 204) | int register_distribute_pipeline(JNIEnv *env) {

FILE: libuvccamera/src/main/jni/UVCCamera/pipeline/DistributePipeline.h
  function class (line 12) | class DistributePipeline : virtual public AbstractBufferedPipeline {

FILE: libuvccamera/src/main/jni/UVCCamera/pipeline/IPipeline.cpp
  function pipeline_state_t (line 48) | const pipeline_state_t IPipeline::getState() const { return (state); }

FILE: libuvccamera/src/main/jni/UVCCamera/pipeline/IPipeline.h
  type pipeline_type_t (line 20) | typedef enum pipeline_type {
  type pipeline_state_t (line 31) | typedef enum _pipeline_state {
  function class (line 42) | class IPipeline {

FILE: libuvccamera/src/main/jni/UVCCamera/pipeline/PreviewPipeline.cpp
  function copyFrame (line 57) | static void copyFrame(const uint8_t *src, uint8_t *dest, const int width...
  function copyToSurface (line 85) | static int copyToSurface(uvc_frame_t *frame, ANativeWindow **window) {
  function ID_TYPE (line 216) | static ID_TYPE nativeCreate(JNIEnv *env, jobject thiz) {
  function nativeDestroy (line 224) | static void nativeDestroy(JNIEnv *env, jobject thiz,
  function jint (line 237) | static jint nativeGetState(JNIEnv *env, jobject thiz,
  function jint (line 249) | static jint nativeSetPipeline(JNIEnv *env, jobject thiz,
  function jint (line 263) | static jint nativeStart(JNIEnv *env, jobject thiz,
  function jint (line 276) | static jint nativeStop(JNIEnv *env, jobject thiz,
  function jint (line 288) | static jint nativeSetCaptureDisplay(JNIEnv *env, jobject thiz,
  function register_preview_pipeline (line 318) | int register_preview_pipeline(JNIEnv *env) {

FILE: libuvccamera/src/main/jni/UVCCamera/pipeline/PreviewPipeline.h
  function class (line 13) | class PreviewPipeline : virtual public CaptureBasePipeline {

FILE: libuvccamera/src/main/jni/UVCCamera/pipeline/PublisherPipeline.cpp
  function build_header (line 99) | static void build_header(publish_header_t &header, uvc_frame_t *frame) {
  function ID_TYPE (line 229) | static ID_TYPE nativeCreate(JNIEnv *env, jobject thiz,
  function nativeDestroy (line 244) | static void nativeDestroy(JNIEnv *env, jobject thiz,
  function jint (line 257) | static jint nativeGetState(JNIEnv *env, jobject thiz,
  function jint (line 269) | static jint nativeSetPipeline(JNIEnv *env, jobject thiz,
  function jint (line 283) | static jint nativeStart(JNIEnv *env, jobject thiz,
  function jint (line 297) | static jint nativeStop(JNIEnv *env, jobject thiz,
  function register_publisher_pipeline (line 322) | int register_publisher_pipeline(JNIEnv *env) {

FILE: libuvccamera/src/main/jni/UVCCamera/pipeline/PublisherPipeline.h
  function class (line 20) | class PublisherPipeline : virtual public AbstractBufferedPipeline {

FILE: libuvccamera/src/main/jni/UVCCamera/pipeline/SQLiteBufferedPipeline.cpp
  type timespec (line 273) | struct timespec
  function ID_TYPE (line 365) | static ID_TYPE nativeCreate(JNIEnv *env, jobject thiz,
  function nativeDestroy (line 383) | static void nativeDestroy(JNIEnv *env, jobject thiz,
  function jint (line 396) | static jint nativeGetState(JNIEnv *env, jobject thiz,
  function jint (line 408) | static jint nativeSetPipeline(JNIEnv *env, jobject thiz,
  function jint (line 422) | static jint nativeStart(JNIEnv *env, jobject thiz,
  function jint (line 435) | static jint nativeStop(JNIEnv *env, jobject thiz,
  function register_sqlite_buffered_pipeline (line 462) | int register_sqlite_buffered_pipeline(JNIEnv *env) {

FILE: libuvccamera/src/main/jni/UVCCamera/pipeline/SQLiteBufferedPipeline.h
  function class (line 25) | class SQLiteBufferedPipeline : virtual public IPipeline {

FILE: libuvccamera/src/main/jni/UVCCamera/pipeline/SimpleBufferedPipeline.cpp
  function ID_TYPE (line 48) | static ID_TYPE nativeCreate(JNIEnv *env, jobject thiz) {
  function nativeDestroy (line 56) | static void nativeDestroy(JNIEnv *env, jobject thiz,
  function jint (line 69) | static jint nativeGetState(JNIEnv *env, jobject thiz,
  function jint (line 81) | static jint nativeSetPipeline(JNIEnv *env, jobject thiz,
  function jint (line 95) | static jint nativeStart(JNIEnv *env, jobject thiz,
  function jint (line 108) | static jint nativeStop(JNIEnv *env, jobject thiz,
  function register_simple_buffered_pipeline (line 134) | int register_simple_buffered_pipeline(JNIEnv *env) {

FILE: libuvccamera/src/main/jni/UVCCamera/pipeline/SimpleBufferedPipeline.h
  function class (line 10) | class SimpleBufferedPipeline : virtual public AbstractBufferedPipeline {

FILE: libuvccamera/src/main/jni/UVCCamera/pipeline/pipeline_helper.cpp
  function IPipeline (line 17) | IPipeline *getPipeline(JNIEnv *env, jobject pipeline_obj) {

FILE: libuvccamera/src/main/jni/UVCCamera/serenegiant_usb_UVCCamera.cpp
  function jlong (line 49) | static jlong setField_long(JNIEnv *env, jobject java_obj, const char *fi...
  function jlong (line 71) | static jlong __setField_long(JNIEnv *env, jobject java_obj, jclass clazz...
  function jint (line 89) | jint __setField_int(JNIEnv *env, jobject java_obj, jclass clazz, const c...
  function jint (line 109) | jint setField_int(JNIEnv *env, jobject java_obj, const char *field_name,...
  function ID_TYPE (line 120) | static ID_TYPE nativeCreate(JNIEnv *env, jobject thiz) {
  function nativeDestroy (line 129) | static void nativeDestroy(JNIEnv *env, jobject thiz,
  function jint (line 143) | static jint nativeConnect(JNIEnv *env, jobject thiz,
  function jint (line 161) | static jint nativeRelease(JNIEnv *env, jobject thiz,
  function jint (line 174) | static jint nativeSetStatusCallback(JNIEnv *env, jobject thiz,
  function jint (line 187) | static jint nativeSetButtonCallback(JNIEnv *env, jobject thiz,
  function jobject (line 200) | static jobject nativeGetSupportedSize(JNIEnv *env, jobject thiz,
  function jint (line 218) | static jint nativeSetPreviewSize(JNIEnv *env, jobject thiz,
  function jint (line 229) | static jint nativeStartPreview(JNIEnv *env, jobject thiz,
  function jint (line 241) | static jint nativeStopPreview(JNIEnv *env, jobject thiz,
  function jint (line 253) | static jint nativeSetPreviewDisplay(JNIEnv *env, jobject thiz,
  function jint (line 266) | static jint nativeSetFrameCallback(JNIEnv *env, jobject thiz,
  function jint (line 279) | static jint nativeSetCaptureDisplay(JNIEnv *env, jobject thiz,
  function jlong (line 294) | static jlong nativeGetCtrlSupports(JNIEnv *env, jobject thiz,
  function jlong (line 310) | static jlong nativeGetProcSupports(JNIEnv *env, jobject thiz,
  function jint (line 327) | static jint nativeUpdateScanningModeLimit(JNIEnv *env, jobject thiz,
  function jint (line 345) | static jint nativeSetScanningMode(JNIEnv *env, jobject thiz,
  function jint (line 357) | static jint nativeGetScanningMode(JNIEnv *env, jobject thiz,
  function jint (line 371) | static jint nativeUpdateExposureModeLimit(JNIEnv *env, jobject thiz,
  function jint (line 389) | static jint nativeSetExposureMode(JNIEnv *env, jobject thiz,
  function jint (line 401) | static jint nativeGetExposureMode(JNIEnv *env, jobject thiz,
  function jint (line 415) | static jint nativeUpdateExposurePriorityLimit(JNIEnv *env, jobject thiz,
  function jint (line 433) | static jint nativeSetExposurePriority(JNIEnv *env, jobject thiz,
  function jint (line 445) | static jint nativeGetExposurePriority(JNIEnv *env, jobject thiz,
  function jint (line 459) | static jint nativeUpdateExposureLimit(JNIEnv *env, jobject thiz,
  function jint (line 477) | static jint nativeSetExposure(JNIEnv *env, jobject thiz,
  function jint (line 489) | static jint nativeGetExposure(JNIEnv *env, jobject thiz,
  function jint (line 503) | static jint nativeUpdateExposureRelLimit(JNIEnv *env, jobject thiz,
  function jint (line 521) | static jint nativeSetExposureRel(JNIEnv *env, jobject thiz,
  function jint (line 533) | static jint nativeGetExposureRel(JNIEnv *env, jobject thiz,
  function jint (line 547) | static jint nativeUpdateAutoFocusLimit(JNIEnv *env, jobject thiz,
  function jint (line 565) | static jint nativeSetAutoFocus(JNIEnv *env, jobject thiz,
  function jint (line 577) | static jint nativeGetAutoFocus(JNIEnv *env, jobject thiz,
  function jint (line 591) | static jint nativeUpdateAutoWhiteBlanceLimit(JNIEnv *env, jobject thiz,
  function jint (line 609) | static jint nativeSetAutoWhiteBlance(JNIEnv *env, jobject thiz,
  function jint (line 621) | static jint nativeGetAutoWhiteBlance(JNIEnv *env, jobject thiz,
  function jint (line 635) | static jint nativeUpdateAutoWhiteBlanceCompoLimit(JNIEnv *env, jobject t...
  function jint (line 653) | static jint nativeSetAutoWhiteBlanceCompo(JNIEnv *env, jobject thiz,
  function jint (line 665) | static jint nativeGetAutoWhiteBlanceCompo(JNIEnv *env, jobject thiz,
  function jint (line 679) | static jint nativeUpdateBrightnessLimit(JNIEnv *env, jobject thiz,
  function jint (line 697) | static jint nativeSetBrightness(JNIEnv *env, jobject thiz,
  function jint (line 709) | static jint nativeGetBrightness(JNIEnv *env, jobject thiz,
  function jint (line 723) | static jint nativeUpdateFocusLimit(JNIEnv *env, jobject thiz,
  function jint (line 741) | static jint nativeSetFocus(JNIEnv *env, jobject thiz,
  function jint (line 753) | static jint nativeGetFocus(JNIEnv *env, jobject thiz,
  function jint (line 767) | static jint nativeUpdateFocusRelLimit(JNIEnv *env, jobject thiz,
  function jint (line 785) | static jint nativeSetFocusRel(JNIEnv *env, jobject thiz,
  function jint (line 797) | static jint nativeGetFocusRel(JNIEnv *env, jobject thiz,
  function jint (line 811) | static jint nativeUpdateIrisLimit(JNIEnv *env, jobject thiz,
  function jint (line 829) | static jint nativeSetIris(JNIEnv *env, jobject thiz,
  function jint (line 841) | static jint nativeGetIris(JNIEnv *env, jobject thiz,
  function jint (line 855) | static jint nativeUpdateIrisRelLimit(JNIEnv *env, jobject thiz,
  function jint (line 873) | static jint nativeSetIrisRel(JNIEnv *env, jobject thiz,
  function jint (line 885) | static jint nativeGetIrisRel(JNIEnv *env, jobject thiz,
  function jint (line 899) | static jint nativeUpdatePanLimit(JNIEnv *env, jobject thiz,
  function jint (line 917) | static jint nativeSetPan(JNIEnv *env, jobject thiz,
  function jint (line 929) | static jint nativeGetPan(JNIEnv *env, jobject thiz,
  function jint (line 943) | static jint nativeUpdateTiltLimit(JNIEnv *env, jobject thiz,
  function jint (line 961) | static jint nativeSetTilt(JNIEnv *env, jobject thiz,
  function jint (line 973) | static jint nativeGetTilt(JNIEnv *env, jobject thiz,
  function jint (line 987) | static jint nativeUpdateRollLimit(JNIEnv *env, jobject thiz,
  function jint (line 1005) | static jint nativeSetRoll(JNIEnv *env, jobject thiz,
  function jint (line 1017) | static jint nativeGetRoll(JNIEnv *env, jobject thiz,
  function jint (line 1031) | static jint nativeUpdatePanRelLimit(JNIEnv *env, jobject thiz,
  function jint (line 1049) | static jint nativeSetPanRel(JNIEnv *env, jobject thiz,
  function jint (line 1061) | static jint nativeGetPanRel(JNIEnv *env, jobject thiz,
  function jint (line 1075) | static jint nativeUpdateTiltRelLimit(JNIEnv *env, jobject thiz,
  function jint (line 1093) | static jint nativeSetTiltRel(JNIEnv *env, jobject thiz,
  function jint (line 1105) | static jint nativeGetTiltRel(JNIEnv *env, jobject thiz,
  function jint (line 1119) | static jint nativeUpdateRollRelLimit(JNIEnv *env, jobject thiz,
  function jint (line 1137) | static jint nativeSetRollRel(JNIEnv *env, jobject thiz,
  function jint (line 1149) | static jint nativeGetRollRel(JNIEnv *env, jobject thiz,
  function jint (line 1163) | static jint nativeUpdateContrastLimit(JNIEnv *env, jobject thiz,
  function jint (line 1181) | static jint nativeSetContrast(JNIEnv *env, jobject thiz,
  function jint (line 1193) | static jint nativeGetContrast(JNIEnv *env, jobject thiz,
  function jint (line 1207) | static jint nativeUpdateAutoContrastLimit(JNIEnv *env, jobject thiz,
  function jint (line 1225) | static jint nativeSetAutoContrast(JNIEnv *env, jobject thiz,
  function jint (line 1237) | static jint nativeGetAutoContrast(JNIEnv *env, jobject thiz,
  function jint (line 1251) | static jint nativeUpdateSharpnessLimit(JNIEnv *env, jobject thiz,
  function jint (line 1269) | static jint nativeSetSharpness(JNIEnv *env, jobject thiz,
  function jint (line 1281) | static jint nativeGetSharpness(JNIEnv *env, jobject thiz,
  function jint (line 1295) | static jint nativeUpdateGainLimit(JNIEnv *env, jobject thiz,
  function jint (line 1313) | static jint nativeSetGain(JNIEnv *env, jobject thiz,
  function jint (line 1325) | static jint nativeGetGain(JNIEnv *env, jobject thiz,
  function jint (line 1339) | static jint nativeUpdateGammaLimit(JNIEnv *env, jobject thiz,
  function jint (line 1357) | static jint nativeSetGamma(JNIEnv *env, jobject thiz,
  function jint (line 1369) | static jint nativeGetGamma(JNIEnv *env, jobject thiz,
  function jint (line 1383) | static jint nativeUpdateWhiteBlanceLimit(JNIEnv *env, jobject thiz,
  function jint (line 1401) | static jint nativeSetWhiteBlance(JNIEnv *env, jobject thiz,
  function jint (line 1413) | static jint nativeGetWhiteBlance(JNIEnv *env, jobject thiz,
  function jint (line 1427) | static jint nativeUpdateWhiteBlanceCompoLimit(JNIEnv *env, jobject thiz,
  function jint (line 1445) | static jint nativeSetWhiteBlanceCompo(JNIEnv *env, jobject thiz,
  function jint (line 1457) | static jint nativeGetWhiteBlanceCompo(JNIEnv *env, jobject thiz,
  function jint (line 1471) | static jint nativeUpdateBacklightCompLimit(JNIEnv *env, jobject thiz,
  function jint (line 1489) | static jint nativeSetBacklightComp(JNIEnv *env, jobject thiz,
  function jint (line 1501) | static jint nativeGetBacklightComp(JNIEnv *env, jobject thiz,
  function jint (line 1515) | static jint nativeUpdateSaturationLimit(JNIEnv *env, jobject thiz,
  function jint (line 1533) | static jint nativeSetSaturation(JNIEnv *env, jobject thiz,
  function jint (line 1545) | static jint nativeGetSaturation(JNIEnv *env, jobject thiz,
  function jint (line 1559) | static jint nativeUpdateHueLimit(JNIEnv *env, jobject thiz,
  function jint (line 1577) | static jint nativeSetHue(JNIEnv *env, jobject thiz,
  function jint (line 1589) | static jint nativeGetHue(JNIEnv *env, jobject thiz,
  function jint (line 1603) | static jint nativeUpdateAutoHueLimit(JNIEnv *env, jobject thiz,
  function jint (line 1621) | static jint nativeSetAutoHue(JNIEnv *env, jobject thiz,
  function jint (line 1633) | static jint nativeGetAutoHue(JNIEnv *env, jobject thiz,
  function jint (line 1647) | static jint nativeUpdatePowerlineFrequencyLimit(JNIEnv *env, jobject thiz,
  function jint (line 1665) | static jint nativeSetPowerlineFrequency(JNIEnv *env, jobject thiz,
  function jint (line 1677) | static jint nativeGetPowerlineFrequency(JNIEnv *env, jobject thiz,
  function jint (line 1691) | static jint nativeUpdateZoomLimit(JNIEnv *env, jobject thiz,
  function jint (line 1709) | static jint nativeSetZoom(JNIEnv *env, jobject thiz,
  function jint (line 1721) | static jint nativeGetZoom(JNIEnv *env, jobject thiz,
  function jint (line 1735) | static jint nativeUpdateZoomRelLimit(JNIEnv *env, jobject thiz,
  function jint (line 1753) | static jint nativeSetZoomRel(JNIEnv *env, jobject thiz,
  function jint (line 1765) | static jint nativeGetZoomRel(JNIEnv *env, jobject thiz,
  function jint (line 1779) | static jint nativeUpdateDigitalMultiplierLimit(JNIEnv *env, jobject thiz,
  function jint (line 1797) | static jint nativeSetDigitalMultiplier(JNIEnv *env, jobject thiz,
  function jint (line 1809) | static jint nativeGetDigitalMultiplier(JNIEnv *env, jobject thiz,
  function jint (line 1823) | static jint nativeUpdateDigitalMultiplierLimitLimit(JNIEnv *env, jobject...
  function jint (line 1841) | static jint nativeSetDigitalMultiplierLimit(JNIEnv *env, jobject thiz,
  function jint (line 1853) | static jint nativeGetDigitalMultiplierLimit(JNIEnv *env, jobject thiz,
  function jint (line 1867) | static jint nativeUpdateAnalogVideoStandardLimit(JNIEnv *env, jobject thiz,
  function jint (line 1885) | static jint nativeSetAnalogVideoStandard(JNIEnv *env, jobject thiz,
  function jint (line 1897) | static jint nativeGetAnalogVideoStandard(JNIEnv *env, jobject thiz,
  function jint (line 1911) | static jint nativeUpdateAnalogVideoLockStateLimit(JNIEnv *env, jobject t...
  function jint (line 1929) | static jint nativeSetAnalogVideoLockState(JNIEnv *env, jobject thiz,
  function jint (line 1941) | static jint nativeGetAnalogVideoLockState(JNIEnv *env, jobject thiz,
  function jint (line 1955) | static jint nativeUpdatePrivacyLimit(JNIEnv *env, jobject thiz,
  function jint (line 1973) | static jint nativeSetPrivacy(JNIEnv *env, jobject thiz,
  function jint (line 1985) | static jint nativeGetPrivacy(JNIEnv *env, jobject thiz,
  function jint (line 2000) | jint registerNativeMethods(JNIEnv* env, const char *class_name, JNINativ...
  function register_uvccamera (line 2194) | int register_uvccamera(JNIEnv *env) {

FILE: libuvccamera/src/main/jni/UVCCamera/utilbase.cpp
  function setVM (line 29) | void setVM(JavaVM *vm) {
  function JavaVM (line 33) | JavaVM *getVM() {
  function JNIEnv (line 37) | JNIEnv *getEnv() {

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/bmp.c
  type my_error_mgr (line 48) | struct my_error_mgr
  type my_error_mgr (line 53) | struct my_error_mgr
  function my_error_exit (line 55) | static void my_error_exit(j_common_ptr cinfo)
  function my_output_message (line 64) | static void my_output_message(j_common_ptr cinfo)
  function pixelconvert (line 75) | static void pixelconvert(unsigned char *srcbuf, int srcpf, int srcbottomup,
  function loadbmp (line 161) | int loadbmp(char *filename, unsigned char **buf, int *w, int *h,
  function savebmp (line 244) | int savebmp(char *filename, unsigned char *buf, int w, int h, int srcpf,

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/cdjpeg.c
  function progress_monitor (line 30) | METHODDEF(void)
  function start_progress_monitor (line 51) | GLOBAL(void)
  function end_progress_monitor (line 65) | GLOBAL(void)
  function keymatch (line 84) | GLOBAL(boolean)
  function read_stdin (line 111) | GLOBAL(FILE *)
  function write_stdout (line 129) | GLOBAL(FILE *)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/cdjpeg.h
  type cjpeg_source_struct (line 27) | struct cjpeg_source_struct
  type cjpeg_source_struct (line 29) | struct cjpeg_source_struct {
  type djpeg_dest_struct (line 45) | struct djpeg_dest_struct
  type djpeg_dest_struct (line 47) | struct djpeg_dest_struct {
  type cdjpeg_progress_mgr (line 78) | struct cdjpeg_progress_mgr {
  type cdjpeg_progress_mgr (line 86) | struct cdjpeg_progress_mgr

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/cjpeg.c
  function select_file_type (line 84) | LOCAL(cjpeg_source_ptr)
  function usage (line 146) | LOCAL(void)
  function parse_switches (line 210) | LOCAL(int)
  function main (line 488) | int

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/djpeg.c
  type IMAGE_FORMATS (line 66) | typedef enum {
  function usage (line 101) | LOCAL(void)
  function parse_switches (line 182) | LOCAL(int)
  function jpeg_getc (line 421) | LOCAL(unsigned int)
  function print_text_marker (line 436) | METHODDEF(boolean)
  function main (line 491) | int

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/dynsections.js
  function toggleVisibility (line 1) | function toggleVisibility(linkObj)
  function updateStripes (line 22) | function updateStripes()
  function toggleLevel (line 27) | function toggleLevel(level)
  function toggleFolder (line 48) | function toggleFolder(id)
  function toggleInherit (line 84) | function toggleInherit(id)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/jquery.js
  function cy (line 2) | function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.pa...
  function cv (line 2) | function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.cs...
  function cu (line 2) | function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),funct...
  function ct (line 2) | function ct(){cr=b}
  function cs (line 2) | function cs(){setTimeout(ct,0);return cr=f.now()}
  function cj (line 2) | function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(...
  function ci (line 2) | function ci(){try{return new a.XMLHttpRequest}catch(b){}}
  function cc (line 2) | function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.da...
  function cb (line 2) | function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i...
  function ca (line 2) | function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a...
  function b_ (line 2) | function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d...
  function b$ (line 2) | function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],...
  function bZ (line 2) | function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f...
  function bC (line 2) | function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b===...
  function bp (line 2) | function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f....
  function bo (line 2) | function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTM...
  function bn (line 2) | function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!...
  function bm (line 2) | function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked...
  function bl (line 2) | function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getEl...
  function bk (line 2) | function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttr...
  function bj (line 2) | function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(...
  function bi (line 2) | function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tb...
  function U (line 2) | function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.creat...
  function T (line 2) | function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d...
  function S (line 2) | function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}
  function K (line 2) | function K(){return!0}
  function J (line 2) | function J(){return!1}
  function n (line 2) | function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);...
  function m (line 2) | function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))conti...
  function l (line 2) | function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-...
  function h (line 2) | function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;...
  function J (line 2) | function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch...
  function a (line 2) | function a(b,c){return new a.fn.init(b,c)}
  function m (line 3) | function m(a){return function(b){e[a]=arguments.length>1?i.call(argument...
  function l (line 3) | function l(a){return function(c){b[a]=arguments.length>1?i.call(argument...
  function m (line 3) | function m(){--h||d.resolveWith(e,[e])}
  function x (line 4) | function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j)...
  function w (line 4) | function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j)...
  function w (line 7) | function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.ready...
  function g (line 8) | function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nod...
  function h (line 8) | function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}
  function h (line 8) | function h(a){return e.step(a)}

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/search.js
  function convertToId (line 32) | function convertToId(search)
  function getXPos (line 55) | function getXPos(item)
  function getYPos (line 69) | function getYPos(item)
  function SearchBox (line 90) | function SearchBox(name, resultsPath, inFrame, label)
  function SearchResults (line 437) | function SearchResults(name)
  function setKeyActions (line 742) | function setKeyActions(elem,action)
  function setClassAttr (line 749) | function setClassAttr(elem,attr)
  function createResults (line 755) | function createResults()

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/example.c
  function write_JPEG_file (line 71) | GLOBAL(void)
  type my_error_mgr (line 250) | struct my_error_mgr {
  type my_error_mgr (line 256) | struct my_error_mgr
  function my_error_exit (line 262) | METHODDEF(void)
  function read_JPEG_file (line 283) | GLOBAL(int)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/java/TJBench.java
  class TJBench (line 35) | class TJBench {
    method getTime (line 61) | static final double getTime() {
    method formatName (line 66) | static String formatName(int subsamp, int cs) {
    method sigFig (line 76) | static String sigFig(double val, int figs) {
    method loadImage (line 87) | static byte[] loadImage(String fileName, int[] w, int[] h, int pixelFo...
    method saveImage (line 112) | static void saveImage(String fileName, byte[] srcBuf, int w, int h,
    method decomp (line 133) | static void decomp(byte[] srcBuf, byte[][] jpegBuf, int[] jpegSize,
    method fullTest (line 274) | static void fullTest(byte[] srcBuf, int w, int h, int subsamp, int jpe...
    method decompTest (line 419) | static void decompTest(String fileName) throws Exception {
    method usage (line 607) | static void usage() throws Exception {
    method main (line 673) | public static void main(String[] argv) {

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/java/TJExample.java
  class TJExample (line 42) | public class TJExample implements TJCustomFilter {
    method usage (line 46) | private static void usage() throws Exception {
    method main (line 100) | public static void main(String[] argv) {
    method customFilter (line 351) | public void customFilter(ShortBuffer coeffBuffer, Rectangle bufferRegion,

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/java/TJUnitTest.java
  class TJUnitTest (line 40) | public class TJUnitTest {
    method usage (line 45) | private static void usage() {
    method biTypePF (line 101) | private static int biTypePF(int biType) {
    method biTypeStr (line 131) | private static String biTypeStr(int biType) {
    method initBuf (line 153) | private static void initBuf(byte[] buf, int w, int pitch, int h, int pf,
    method initIntBuf (line 222) | private static void initIntBuf(int[] buf, int w, int pitch, int h, int...
    method initImg (line 254) | private static void initImg(BufferedImage img, int pf, int flags)
    method checkVal (line 277) | private static void checkVal(int row, int col, int v, String vname, in...
    method checkVal0 (line 286) | private static void checkVal0(int row, int col, int v, String vname)
    method checkVal255 (line 295) | private static void checkVal255(int row, int col, int v, String vname)
    method checkBuf (line 304) | private static int checkBuf(byte[] buf, int w, int pitch, int h, int pf,
    method checkIntBuf (line 428) | private static int checkIntBuf(int[] buf, int w, int pitch, int h, int...
    method checkImg (line 506) | private static int checkImg(BufferedImage img, int pf, int subsamp,
    method PAD (line 531) | private static int PAD(int v, int p) {
    method checkBufYUV (line 535) | private static int checkBufYUV(byte[] buf, int size, int w, int h,
    method writeJPEG (line 628) | private static void writeJPEG(byte[] jpegBuf, int jpegBufSize,
    method compTest (line 636) | private static int compTest(TJCompressor tjc, byte[] dstBuf, int w,
    method decompTest (line 705) | private static void decompTest(TJDecompressor tjd, byte[] jpegBuf,
    method decompTest (line 787) | private static void decompTest(TJDecompressor tjd, byte[] jpegBuf,
    method doTest (line 806) | private static void doTest(int w, int h, int[] formats, int subsamp,
    method bufSizeTest (line 849) | private static void bufSizeTest() throws Exception {
    method main (line 908) | public static void main(String[] argv) {

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/java/org/libjpegturbo/turbojpeg/TJ.java
  class TJ (line 35) | public final class TJ {
    method getMCUWidth (line 91) | public static int getMCUWidth(int subsamp) {
    method getMCUHeight (line 111) | public static int getMCUHeight(int subsamp) {
    method getPixelSize (line 219) | public static int getPixelSize(int pixelFormat) {
    method getRedOffset (line 240) | public static int getRedOffset(int pixelFormat) {
    method getGreenOffset (line 261) | public static int getGreenOffset(int pixelFormat) {
    method getBlueOffset (line 282) | public static int getBlueOffset(int pixelFormat) {
    method bufSize (line 405) | public static native int bufSize(int width, int height, int jpegSubsamp);
    method bufSizeYUV (line 424) | public static native int bufSizeYUV(int width, int pad, int height,
    method bufSizeYUV (line 430) | @Deprecated
    method planeSizeYUV (line 454) | public static native int planeSizeYUV(int componentID, int width, int ...
    method planeWidth (line 471) | public static native int planeWidth(int componentID, int width, int su...
    method planeHeight (line 487) | public static native int planeHeight(int componentID, int height,
    method getScalingFactors (line 497) | public static native TJScalingFactor[] getScalingFactors();
    method checkPixelFormat (line 503) | private static void checkPixelFormat(int pixelFormat) {
    method checkSubsampling (line 508) | private static void checkSubsampling(int subsamp) {

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/java/org/libjpegturbo/turbojpeg/TJCompressor.java
  class TJCompressor (line 39) | public class TJCompressor implements Closeable {
    method TJCompressor (line 47) | public TJCompressor() throws TJException {
    method TJCompressor (line 71) | public TJCompressor(byte[] srcImage, int x, int y, int width, int pitch,
    method TJCompressor (line 80) | @Deprecated
    method TJCompressor (line 106) | public TJCompressor(BufferedImage srcImage, int x, int y, int width,
    method setSourceImage (line 142) | public void setSourceImage(byte[] srcImage, int x, int y, int width,
    method setSourceImage (line 167) | @Deprecated
    method setSourceImage (line 195) | public void setSourceImage(BufferedImage srcImage, int x, int y, int w...
    method setSourceImage (line 267) | public void setSourceImage(YUVImage srcImage) throws TJException {
    method setSubsamp (line 297) | public void setSubsamp(int newSubsamp) {
    method setJPEGQuality (line 309) | public void setJPEGQuality(int quality) {
    method compress (line 327) | public void compress(byte[] dstBuf, int flags) throws TJException {
    method compress (line 377) | public byte[] compress(int flags) throws TJException {
    method compress (line 389) | @Deprecated
    method compress (line 401) | @Deprecated
    method encodeYUV (line 422) | public void encodeYUV(YUVImage dstImage, int flags) throws TJException {
    method encodeYUV (line 448) | @Deprecated
    method encodeYUV (line 475) | public YUVImage encodeYUV(int pad, int flags) throws TJException {
    method encodeYUV (line 506) | public YUVImage encodeYUV(int[] strides, int flags) throws TJException {
    method encodeYUV (line 517) | @Deprecated
    method encodeYUV (line 531) | @Deprecated
    method encodeYUV (line 543) | @Deprecated
    method getCompressedSize (line 557) | public int getCompressedSize() {
    method close (line 564) | @Override
    method finalize (line 570) | @Override
    method init (line 580) | private native void init() throws TJException;
    method destroy (line 582) | private native void destroy() throws TJException;
    method compress (line 585) | @Deprecated
    method compress (line 590) | private native int compress(byte[] srcBuf, int x, int y, int width,
    method compress (line 594) | @Deprecated
    method compress (line 599) | private native int compress(int[] srcBuf, int x, int y, int width,
    method compressFromYUV (line 603) | private native int compressFromYUV(byte[][] srcPlanes, int[] srcOffsets,
    method encodeYUV (line 608) | @Deprecated
    method encodeYUV (line 613) | private native void encodeYUV(byte[] srcBuf, int x, int y, int width,
    method encodeYUV (line 618) | @Deprecated
    method encodeYUV (line 623) | private native void encodeYUV(int[] srcBuf, int x, int y, int width,
    method checkSourceImage (line 632) | private void checkSourceImage() {
    method checkSubsampling (line 637) | private void checkSubsampling() {

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/java/org/libjpegturbo/turbojpeg/TJCustomFilter.java
  type TJCustomFilter (line 37) | public interface TJCustomFilter {
    method customFilter (line 72) | void customFilter(ShortBuffer coeffBuffer, Rectangle bufferRegion,

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/java/org/libjpegturbo/turbojpeg/TJDecompressor.java
  class TJDecompressor (line 39) | public class TJDecompressor implements Closeable {
    method TJDecompressor (line 47) | public TJDecompressor() throws TJException {
    method TJDecompressor (line 58) | public TJDecompressor(byte[] jpegImage) throws TJException {
    method TJDecompressor (line 72) | public TJDecompressor(byte[] jpegImage, int imageSize) throws TJExcept...
    method TJDecompressor (line 85) | public TJDecompressor(YUVImage yuvImage) throws TJException {
    method setSourceImage (line 99) | public void setSourceImage(byte[] jpegImage, int imageSize)
    method setJPEGImage (line 112) | @Deprecated
    method setSourceImage (line 126) | public void setSourceImage(YUVImage srcImage) {
    method getWidth (line 142) | public int getWidth() {
    method getHeight (line 157) | public int getHeight() {
    method getSubsamp (line 173) | public int getSubsamp() {
    method getColorspace (line 191) | public int getColorspace() {
    method getJPEGBuf (line 206) | public byte[] getJPEGBuf() {
    method getJPEGSize (line 219) | public int getJPEGSize() {
    method getScaledWidth (line 244) | public int getScaledWidth(int desiredWidth, int desiredHeight) {
    method getScaledHeight (line 285) | public int getScaledHeight(int desiredWidth, int desiredHeight) {
    method decompress (line 371) | public void decompress(byte[] dstBuf, int x, int y, int desiredWidth,
    method decompress (line 399) | @Deprecated
    method decompress (line 431) | public byte[] decompress(int desiredWidth, int pitch, int desiredHeight,
    method decompressToYUV (line 465) | public void decompressToYUV(YUVImage dstImage, int flags)
    method decompressToYUV (line 489) | @Deprecated
    method decompressToYUV (line 534) | public YUVImage decompressToYUV(int desiredWidth, int[] strides,
    method decompressToYUV (line 588) | public YUVImage decompressToYUV(int desiredWidth, int pad, int desired...
    method decompressToYUV (line 610) | @Deprecated
    method decompress (line 679) | public void decompress(int[] dstBuf, int x, int y, int desiredWidth,
    method decompress (line 714) | public void decompress(BufferedImage dstImage, int flags)
    method decompress (line 822) | public BufferedImage decompress(int desiredWidth, int desiredHeight,
    method close (line 839) | @Override
    method finalize (line 845) | @Override
    method init (line 855) | private native void init() throws TJException;
    method destroy (line 857) | private native void destroy() throws TJException;
    method decompressHeader (line 859) | private native void decompressHeader(byte[] srcBuf, int size)
    method decompress (line 862) | @Deprecated
    method decompress (line 867) | private native void decompress(byte[] srcBuf, int size, byte[] dstBuf,...
    method decompress (line 871) | @Deprecated
    method decompress (line 876) | private native void decompress(byte[] srcBuf, int size, int[] dstBuf, ...
    method decompressToYUV (line 880) | @Deprecated
    method decompressToYUV (line 884) | private native void decompressToYUV(byte[] srcBuf, int size,
    method decodeYUV (line 888) | private native void decodeYUV(byte[][] srcPlanes, int[] srcOffsets,
    method decodeYUV (line 892) | private native void decodeYUV(byte[][] srcPlanes, int[] srcOffsets,

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/java/org/libjpegturbo/turbojpeg/TJException.java
  class TJException (line 33) | public class TJException extends IOException {
    method TJException (line 37) | public TJException() {
    method TJException (line 41) | public TJException(String message, Throwable cause) {
    method TJException (line 45) | public TJException(String message) {
    method TJException (line 49) | public TJException(Throwable cause) {

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/java/org/libjpegturbo/turbojpeg/TJScalingFactor.java
  class TJScalingFactor (line 35) | public class TJScalingFactor {
    method TJScalingFactor (line 37) | public TJScalingFactor(int num, int denom) {
    method getNum (line 49) | public int getNum() {
    method getDenom (line 58) | public int getDenom() {
    method getScaled (line 69) | public int getScaled(int dimension) {
    method equals (line 80) | public boolean equals(TJScalingFactor other) {
    method isOne (line 91) | public boolean isOne() {

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/java/org/libjpegturbo/turbojpeg/TJTransform.java
  class TJTransform (line 36) | public class TJTransform extends Rectangle {
    method TJTransform (line 134) | public TJTransform() {
    method TJTransform (line 162) | public TJTransform(int x, int y, int w, int h, int op, int options,
    method TJTransform (line 186) | public TJTransform(Rectangle r, int op, int options,

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/java/org/libjpegturbo/turbojpeg/TJTransformer.java
  class TJTransformer (line 35) | public class TJTransformer extends TJDecompressor {
    method TJTransformer (line 40) | public TJTransformer() throws TJException {
    method TJTransformer (line 51) | public TJTransformer(byte[] jpegImage) throws TJException {
    method TJTransformer (line 65) | public TJTransformer(byte[] jpegImage, int imageSize) throws TJExcepti...
    method transform (line 97) | public void transform(byte[][] dstBufs, TJTransform[] transforms,
    method transform (line 120) | public TJDecompressor[] transform(TJTransform[] transforms, int flags)
    method getTransformedSizes (line 147) | public int[] getTransformedSizes() {
    method init (line 153) | private native void init() throws TJException;
    method transform (line 155) | private native int[] transform(byte[] srcBuf, int srcSize, byte[][] ds...

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/java/org/libjpegturbo/turbojpeg/YUVImage.java
  class YUVImage (line 66) | public class YUVImage {
    method YUVImage (line 90) | public YUVImage(int width, int[] strides, int height, int subsamp) {
    method YUVImage (line 108) | public YUVImage(int width, int pad, int height, int subsamp) {
    method YUVImage (line 147) | public YUVImage(byte[][] planes, int[] offsets, int width, int[] strides,
    method YUVImage (line 173) | public YUVImage(byte[] yuvImage, int width, int pad, int height,
    method setBuf (line 211) | public void setBuf(byte[][] planes, int[] offsets, int width, int stri...
    method setBuf (line 216) | private void setBuf(byte[][] planes, int[] offsets, int width, int str...
    method setBuf (line 280) | public void setBuf(byte[] yuvImage, int width, int pad, int height,
    method getWidth (line 313) | public int getWidth() {
    method getHeight (line 324) | public int getHeight() {
    method getPad (line 336) | public int getPad() {
    method getStrides (line 349) | public int[] getStrides() {
    method getOffsets (line 362) | public int[] getOffsets() {
    method getSubsamp (line 374) | public int getSubsamp() {
    method getPlanes (line 386) | public byte[][] getPlanes() {
    method getBuf (line 398) | public byte[] getBuf() {
    method getSize (line 415) | public int getSize() {
    method PAD (line 428) | private static final int PAD(int v, int p) {

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jcapimin.c
  function jpeg_CreateCompress (line 33) | GLOBAL(void)
  function jpeg_destroy_compress (line 102) | GLOBAL(void)
  function jpeg_abort_compress (line 114) | GLOBAL(void)
  function jpeg_suppress_tables (line 133) | GLOBAL(void)
  function jpeg_finish_compress (line 161) | GLOBAL(void)
  function jpeg_write_marker (line 206) | GLOBAL(void)
  function jpeg_write_m_header (line 228) | GLOBAL(void)
  function jpeg_write_m_byte (line 240) | GLOBAL(void)
  function jpeg_write_tables (line 268) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jcapistd.c
  function jpeg_start_compress (line 38) | GLOBAL(void)
  function jpeg_write_scanlines (line 77) | GLOBAL(JDIMENSION)
  function jpeg_write_raw_data (line 120) | GLOBAL(JDIMENSION)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jcarith.c
  type arith_entropy_encoder (line 26) | typedef struct {
  type arith_entropy_encoder (line 51) | typedef arith_entropy_encoder *arith_entropy_ptr;
  function emit_byte (line 118) | LOCAL(void)
  function finish_pass (line 135) | METHODDEF(void)
  function arith_encode (line 221) | LOCAL(void)
  function emit_restart (line 321) | LOCAL(void)
  function encode_mcu_DC_first (line 364) | METHODDEF(boolean)
  function encode_mcu_AC_first (line 455) | METHODDEF(boolean)
  function encode_mcu_DC_refine (line 554) | METHODDEF(boolean)
  function encode_mcu_AC_refine (line 589) | METHODDEF(boolean)
  function encode_mcu (line 682) | METHODDEF(boolean)
  function start_pass (line 824) | METHODDEF(void)
  function jinit_arith_encoder (line 907) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jccoefct.c
  type my_coef_controller (line 37) | typedef struct {
  type my_coef_controller (line 57) | typedef my_coef_controller *my_coef_ptr;
  function start_iMCU_row (line 71) | LOCAL(void)
  function start_pass_coef (line 99) | METHODDEF(void)
  function compress_data (line 142) | METHODDEF(boolean)
  function compress_first_pass (line 244) | METHODDEF(boolean)
  function compress_output (line 340) | METHODDEF(boolean)
  function jinit_c_coef_controller (line 404) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jccolext.c
  function INLINE (line 30) | INLINE
  function INLINE (line 87) | INLINE
  function INLINE (line 124) | INLINE

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jccolor.c
  type my_color_converter (line 25) | typedef struct {
  type my_color_converter (line 32) | typedef my_color_converter *my_cconvert_ptr;
  function rgb_ycc_start (line 197) | METHODDEF(void)
  function rgb_ycc_convert (line 233) | METHODDEF(void)
  function rgb_gray_convert (line 282) | METHODDEF(void)
  function rgb_rgb_convert (line 328) | METHODDEF(void)
  function cmyk_ycck_convert (line 378) | METHODDEF(void)
  function grayscale_convert (line 433) | METHODDEF(void)
  function null_convert (line 462) | METHODDEF(void)
  function null_method (line 524) | METHODDEF(void)
  function jinit_color_converter (line 535) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jcdctmgr.c
  type my_fdct_controller (line 46) | typedef struct {
  type my_fdct_controller (line 73) | typedef my_fdct_controller *my_fdct_ptr;
  function flss (line 82) | LOCAL(int)
  function compute_reciprocal (line 172) | LOCAL(int)
  function start_pass_fdctmgr (line 235) | METHODDEF(void)
  function convsamp (line 372) | METHODDEF(void)
  function quantize (line 407) | METHODDEF(void)
  function forward_DCT (line 489) | METHODDEF(void)
  function convsamp_float (line 526) | METHODDEF(void)
  function quantize_float (line 557) | METHODDEF(void)
  function forward_DCT_float (line 579) | METHODDEF(void)
  function jinit_forward_dct (line 620) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jchuff.c
  type savable_state (line 69) | typedef struct {
  type huff_entropy_encoder (line 95) | typedef struct {
  type huff_entropy_encoder (line 116) | typedef huff_entropy_encoder *huff_entropy_ptr;
  type working_state (line 122) | typedef struct {
  function start_pass_huff (line 146) | METHODDEF(void)
  function jpeg_make_c_derived_tbl (line 221) | GLOBAL(void)
  function dump_buffer (line 320) | LOCAL(boolean)
  function flush_bits (line 463) | LOCAL(boolean)
  function encode_one_block_simd (line 488) | LOCAL(boolean)
  function encode_one_block (line 505) | LOCAL(boolean)
  function emit_restart (line 618) | LOCAL(boolean)
  function encode_mcu_huff (line 643) | METHODDEF(boolean)
  function finish_pass_huff (line 714) | METHODDEF(void)
  function htest_one_block (line 753) | LOCAL(void)
  function encode_mcu_gather (line 826) | METHODDEF(boolean)
  function jpeg_gen_optimal_table (line 886) | GLOBAL(void)
  function finish_pass_gather (line 1027) | METHODDEF(void)
  function jinit_huff_encoder (line 1072) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jchuff.h
  type c_derived_tbl (line 30) | typedef struct {

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jcinit.c
  function jinit_compress_master (line 30) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jcmainct.c
  type my_main_controller (line 23) | typedef struct {
  type my_main_controller (line 38) | typedef my_main_controller *my_main_ptr;
  function start_pass_main (line 51) | METHODDEF(void)
  function process_data_simple_main (line 77) | METHODDEF(void)
  function jinit_c_main_controller (line 130) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jcmarker.c
  type JPEG_MARKER (line 21) | typedef enum {                  /* JPEG marker codes */
  type my_marker_writer (line 91) | typedef struct {
  type my_marker_writer (line 97) | typedef my_marker_writer *my_marker_ptr;
  function emit_byte (line 112) | LOCAL(void)
  function emit_marker (line 126) | LOCAL(void)
  function emit_2bytes (line 135) | LOCAL(void)
  function emit_dqt (line 148) | LOCAL(int)
  function emit_dht (line 188) | LOCAL(void)
  function emit_dac (line 226) | LOCAL(void)
  function emit_dri (line 275) | LOCAL(void)
  function emit_sof (line 287) | LOCAL(void)
  function emit_sos (line 318) | LOCAL(void)
  function emit_jfif_app0 (line 353) | LOCAL(void)
  function emit_adobe_app14 (line 388) | LOCAL(void)
  function write_marker_header (line 442) | METHODDEF(void)
  function write_marker_byte (line 454) | METHODDEF(void)
  function write_file_header (line 473) | METHODDEF(void)
  function write_frame_header (line 498) | METHODDEF(void)
  function write_scan_header (line 558) | METHODDEF(void)
  function write_file_trailer (line 602) | METHODDEF(void)
  function write_tables_only (line 616) | METHODDEF(void)
  function jinit_marker_writer (line 645) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jcmaster.c
  type c_pass_type (line 27) | typedef enum {
  type my_comp_master (line 33) | typedef struct {
  type my_comp_master (line 54) | typedef my_comp_master *my_master_ptr;
  function jpeg_calc_jpeg_dimensions (line 68) | GLOBAL(void)
  function validate_script (line 176) | LOCAL(void)
  function select_scan_parameters (line 313) | LOCAL(void)
  function per_scan_setup (line 354) | LOCAL(void)
  function prepare_for_pass (line 447) | METHODDEF(void)
  function pass_startup (line 535) | METHODDEF(void)
  function finish_pass_master (line 549) | METHODDEF(void)
  function jinit_c_master_control (line 589) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jcomapi.c
  function jpeg_abort (line 31) | GLOBAL(void)
  function jpeg_destroy (line 71) | GLOBAL(void)
  function jpeg_alloc_quant_table (line 88) | GLOBAL(JQUANT_TBL *)
  function jpeg_alloc_huff_table (line 100) | GLOBAL(JHUFF_TBL *)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jcparam.c
  function jpeg_add_quant_table (line 27) | GLOBAL(void)
  function jpeg_default_qtables (line 95) | GLOBAL(void)
  function jpeg_set_linear_quality (line 111) | GLOBAL(void)
  function jpeg_quality_scaling (line 128) | GLOBAL(int)
  function jpeg_set_quality (line 154) | GLOBAL(void)
  function jpeg_set_defaults (line 180) | GLOBAL(void)
  function jpeg_default_colorspace (line 280) | GLOBAL(void)
  function jpeg_set_colorspace (line 322) | GLOBAL(void)
  function fill_a_scan (line 406) | LOCAL(jpeg_scan_info *)
  function fill_scans (line 421) | LOCAL(jpeg_scan_info *)
  function fill_dc_scans (line 440) | LOCAL(jpeg_scan_info *)
  function jpeg_simple_progression (line 468) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jcphuff.c
  type phuff_entropy_encoder (line 27) | typedef struct {
  type phuff_entropy_encoder (line 65) | typedef phuff_entropy_encoder *phuff_entropy_ptr;
  function start_pass_phuff (line 108) | METHODDEF(void)
  function dump_buffer (line 207) | LOCAL(void)
  function emit_bits (line 229) | LOCAL(void)
  function flush_bits (line 268) | LOCAL(void)
  function emit_symbol (line 281) | LOCAL(void)
  function emit_buffered_bits (line 297) | LOCAL(void)
  function emit_eobrun (line 316) | LOCAL(void)
  function emit_restart (line 347) | LOCAL(void)
  function encode_mcu_DC_first (line 377) | METHODDEF(boolean)
  function encode_mcu_AC_first (line 464) | METHODDEF(boolean)
  function encode_mcu_DC_refine (line 571) | METHODDEF(boolean)
  function encode_mcu_AC_refine (line 618) | METHODDEF(boolean)
  function finish_pass_phuff (line 746) | METHODDEF(void)
  function finish_pass_gather_phuff (line 767) | METHODDEF(void)
  function jinit_phuff_encoder (line 814) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jcprepct.c
  type my_prep_controller (line 56) | typedef struct {
  type my_prep_controller (line 73) | typedef my_prep_controller *my_prep_ptr;
  function start_pass_prep (line 80) | METHODDEF(void)
  function expand_bottom_edge (line 108) | LOCAL(void)
  function pre_process_data (line 130) | METHODDEF(void)
  function pre_process_context (line 197) | METHODDEF(void)
  function create_context_buffer (line 269) | LOCAL(void)
  function jinit_c_prep_controller (line 317) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jcsample.c
  type my_downsampler (line 67) | typedef struct {
  type my_downsampler (line 74) | typedef my_downsampler *my_downsample_ptr;
  function start_pass_downsample (line 81) | METHODDEF(void)
  function expand_right_edge (line 93) | LOCAL(void)
  function sep_downsample (line 120) | METHODDEF(void)
  function int_downsample (line 146) | METHODDEF(void)
  function fullsize_downsample (line 193) | METHODDEF(void)
  function h2v1_downsample (line 218) | METHODDEF(void)
  function h2v2_downsample (line 255) | METHODDEF(void)
  function h2v2_smooth_downsample (line 298) | METHODDEF(void)
  function fullsize_smooth_downsample (line 398) | METHODDEF(void)
  function jinit_downsampler (line 470) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jcstest.c
  type error_mgr (line 46) | typedef struct _error_mgr {
  function my_error_exit (line 51) | static void my_error_exit(j_common_ptr cinfo)
  function my_output_message (line 58) | static void my_output_message(j_common_ptr cinfo)
  function main (line 63) | int main(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jctrans.c
  function jpeg_write_coefficients (line 41) | GLOBAL(void)
  function jpeg_copy_critical_parameters (line 66) | GLOBAL(void)
  function transencode_master_selection (line 167) | LOCAL(void)
  type my_coef_controller (line 222) | typedef struct {
  type my_coef_controller (line 237) | typedef my_coef_controller *my_coef_ptr;
  function start_iMCU_row (line 240) | LOCAL(void)
  function start_pass_coef (line 268) | METHODDEF(void)
  function compress_output (line 291) | METHODDEF(boolean)
  function transencode_coef_controller (line 376) | LOCAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jdapimin.c
  function jpeg_CreateDecompress (line 33) | GLOBAL(void)
  function jpeg_destroy_decompress (line 102) | GLOBAL(void)
  function jpeg_abort_decompress (line 114) | GLOBAL(void)
  function default_decompress_parms (line 125) | LOCAL(void)
  function jpeg_read_header (line 252) | GLOBAL(int)
  function jpeg_consume_input (line 298) | GLOBAL(int)
  function jpeg_input_complete (line 345) | GLOBAL(boolean)
  function jpeg_has_multiple_scans (line 360) | GLOBAL(boolean)
  function jpeg_finish_decompress (line 380) | GLOBAL(boolean)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jdapistd.c
  function jpeg_start_decompress (line 42) | GLOBAL(boolean)
  function output_pass_setup (line 99) | LOCAL(boolean)
  function jpeg_crop_scanline (line 152) | GLOBAL(void)
  function jpeg_read_scanlines (line 260) | GLOBAL(JDIMENSION)
  function noop_convert (line 289) | LOCAL(void)
  function read_and_discard_scanlines (line 304) | LOCAL(void)
  function increment_simple_rowgroup_ctr (line 327) | LOCAL(void)
  function jpeg_skip_scanlines (line 356) | GLOBAL(JDIMENSION)
  function jpeg_read_raw_data (line 523) | GLOBAL(JDIMENSION)
  function jpeg_start_output (line 566) | GLOBAL(boolean)
  function jpeg_finish_output (line 591) | GLOBAL(boolean)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jdarith.c
  type arith_entropy_decoder (line 26) | typedef struct {
  type arith_entropy_decoder (line 48) | typedef arith_entropy_decoder *arith_entropy_ptr;
  function get_byte (line 67) | LOCAL(int)
  function arith_decode (line 108) | LOCAL(int)
  function process_restart (line 192) | LOCAL(void)
  function decode_mcu_DC_first (line 243) | METHODDEF(boolean)
  function decode_mcu_AC_first (line 322) | METHODDEF(boolean)
  function decode_mcu_DC_refine (line 396) | METHODDEF(boolean)
  function decode_mcu_AC_refine (line 429) | METHODDEF(boolean)
  function decode_mcu (line 498) | METHODDEF(boolean)
  function start_pass (line 625) | METHODDEF(void)
  function jinit_arith_decoder (line 734) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jdatadst-tj.c
  type my_mem_destination_mgr (line 37) | typedef struct {
  type my_mem_destination_mgr (line 48) | typedef my_mem_destination_mgr *my_mem_dest_ptr;
  function init_mem_destination (line 56) | METHODDEF(void)
  function empty_mem_output_buffer (line 86) | METHODDEF(boolean)
  function term_mem_destination (line 128) | METHODDEF(void)
  function jpeg_mem_dest_tj (line 149) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jdatadst.c
  type my_destination_mgr (line 34) | typedef struct {
  type my_destination_mgr (line 41) | typedef my_destination_mgr *my_dest_ptr;
  type my_mem_destination_mgr (line 49) | typedef struct {
  type my_mem_destination_mgr (line 59) | typedef my_mem_destination_mgr *my_mem_dest_ptr;
  function init_destination (line 68) | METHODDEF(void)
  function init_mem_destination (line 83) | METHODDEF(void)
  function empty_output_buffer (line 114) | METHODDEF(boolean)
  function empty_mem_output_buffer (line 130) | METHODDEF(boolean)
  function term_destination (line 171) | METHODDEF(void)
  function term_mem_destination (line 189) | METHODDEF(void)
  function jpeg_stdio_dest (line 206) | GLOBAL(void)
  function jpeg_mem_dest (line 251) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jdatasrc-tj.c
  function init_mem_source (line 32) | METHODDEF(void)
  function fill_mem_input_buffer (line 72) | METHODDEF(boolean)
  function skip_input_data (line 106) | METHODDEF(void)
  function term_source (line 147) | METHODDEF(void)
  function jpeg_mem_src_tj (line 159) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jdatasrc.c
  type my_source_mgr (line 29) | typedef struct {
  type my_source_mgr (line 37) | typedef my_source_mgr *my_src_ptr;
  function init_source (line 47) | METHODDEF(void)
  function init_mem_source (line 60) | METHODDEF(void)
  function fill_input_buffer (line 101) | METHODDEF(boolean)
  function fill_mem_input_buffer (line 127) | METHODDEF(boolean)
  function skip_input_data (line 162) | METHODDEF(void)
  function term_source (line 203) | METHODDEF(void)
  function jpeg_stdio_src (line 216) | GLOBAL(void)
  function jpeg_mem_src (line 262) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jdcoefct.c
  function start_input_pass (line 45) | METHODDEF(void)
  function start_output_pass (line 57) | METHODDEF(void)
  function decompress_onepass (line 85) | METHODDEF(int)
  function dummy_consume_data (line 174) | METHODDEF(int)
  function consume_data (line 190) | METHODDEF(int)
  function decompress_data (line 261) | METHODDEF(int)
  function smoothing_ok (line 352) | LOCAL(boolean)
  function decompress_smooth_data (line 408) | METHODDEF(int)
  function jinit_d_coef_controller (line 627) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jdcoefct.h
  type my_coef_controller (line 24) | typedef struct {
  type my_coef_controller (line 58) | typedef my_coef_controller *my_coef_ptr;
  function start_iMCU_row (line 61) | LOCAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jdcol565.c
  function INLINE (line 18) | INLINE
  function INLINE (line 97) | INLINE
  function INLINE (line 183) | INLINE
  function INLINE (line 238) | INLINE
  function INLINE (line 297) | INLINE
  function INLINE (line 337) | INLINE

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jdcolext.c
  function INLINE (line 29) | INLINE
  function INLINE (line 82) | INLINE
  function INLINE (line 113) | INLINE

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jdcolor.c
  type my_color_deconverter (line 26) | typedef struct {
  type my_color_deconverter (line 39) | typedef my_color_deconverter *my_cconvert_ptr;
  function build_ycc_rgb_table (line 210) | LOCAL(void)
  function ycc_rgb_convert (line 253) | METHODDEF(void)
  function build_rgb_y_table (line 302) | LOCAL(void)
  function rgb_gray_convert (line 326) | METHODDEF(void)
  function null_convert (line 363) | METHODDEF(void)
  function grayscale_convert (line 425) | METHODDEF(void)
  function gray_rgb_convert (line 439) | METHODDEF(void)
  function rgb_rgb_convert (line 485) | METHODDEF(void)
  function ycck_cmyk_convert (line 534) | METHODDEF(void)
  function INLINE (line 616) | static INLINE boolean is_big_endian(void)
  function ycc_rgb565_convert (line 664) | METHODDEF(void)
  function ycc_rgb565D_convert (line 676) | METHODDEF(void)
  function rgb_rgb565_convert (line 688) | METHODDEF(void)
  function rgb_rgb565D_convert (line 700) | METHODDEF(void)
  function gray_rgb565_convert (line 712) | METHODDEF(void)
  function gray_rgb565D_convert (line 724) | METHODDEF(void)
  function start_pass_dcolor (line 740) | METHODDEF(void)
  function jinit_color_deconverter (line 751) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jdct.h
  type DCTELEM (line 35) | typedef int DCTELEM;
  type UDCTELEM (line 36) | typedef unsigned int UDCTELEM;
  type UDCTELEM2 (line 37) | typedef unsigned long long UDCTELEM2;
  type DCTELEM (line 39) | typedef short DCTELEM;
  type UDCTELEM (line 40) | typedef unsigned short UDCTELEM;
  type UDCTELEM2 (line 41) | typedef unsigned int UDCTELEM2;
  type JLONG (line 44) | typedef JLONG DCTELEM;
  type UDCTELEM2 (line 45) | typedef unsigned long long UDCTELEM2;
  type MULTIPLIER (line 66) | typedef MULTIPLIER ISLOW_MULT_TYPE;
  type MULTIPLIER (line 68) | typedef MULTIPLIER IFAST_MULT_TYPE;
  type JLONG (line 71) | typedef JLONG IFAST_MULT_TYPE;
  type FAST_FLOAT (line 74) | typedef FAST_FLOAT FLOAT_MULT_TYPE;

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jddctmgr.c
  type my_idct_controller (line 51) | typedef struct {
  type my_idct_controller (line 62) | typedef my_idct_controller *my_idct_ptr;
  type multiplier_table (line 67) | typedef union {
  function start_pass (line 96) | METHODDEF(void)
  function jinit_inverse_dct (line 329) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jdhuff.c
  type savable_state (line 35) | typedef struct {
  type huff_entropy_decoder (line 57) | typedef struct {
  type huff_entropy_decoder (line 83) | typedef huff_entropy_decoder *huff_entropy_ptr;
  function start_pass_huff_decoder (line 90) | METHODDEF(void)
  function jpeg_make_d_derived_tbl (line 154) | GLOBAL(void)
  function jpeg_fill_bit_buffer (line 298) | GLOBAL(boolean)
  function jpeg_huff_decode (line 448) | GLOBAL(int)
  function process_restart (line 520) | LOCAL(boolean)
  function decode_mcu_slow (line 554) | LOCAL(boolean)
  function decode_mcu_fast (line 651) | LOCAL(boolean)
  function decode_mcu (line 755) | METHODDEF(boolean)
  function jinit_huff_decoder (line 799) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jdhuff.h
  type d_derived_tbl (line 23) | typedef struct {
  type bit_buf_type (line 79) | typedef size_t bit_buf_type;
  type bit_buf_type (line 84) | typedef unsigned long bit_buf_type;
  type bitread_perm_state (line 96) | typedef struct {                /* Bitreading state saved across MCUs */
  type bitread_working_state (line 101) | typedef struct {                /* Bitreading working state within an MC...

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jdinput.c
  type my_input_controller (line 26) | typedef struct {
  type my_input_controller (line 32) | typedef my_input_controller *my_inputctl_ptr;
  function initial_setup (line 43) | LOCAL(void)
  function per_scan_setup (line 144) | LOCAL(void)
  function latch_quant_tables (line 243) | LOCAL(void)
  function start_input_pass (line 277) | METHODDEF(void)
  function finish_input_pass (line 294) | METHODDEF(void)
  function consume_markers (line 311) | METHODDEF(int)
  function reset_input_controller (line 362) | METHODDEF(void)
  function jinit_input_controller (line 384) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jdmainct.c
  function alloc_funny_pointers (line 128) | LOCAL(void)
  function make_funny_pointers (line 166) | LOCAL(void)
  function set_bottom_pointers (line 209) | LOCAL(void)
  function start_pass_main (line 250) | METHODDEF(void)
  function process_data_simple_main (line 288) | METHODDEF(void)
  function process_data_context_main (line 328) | METHODDEF(void)
  function process_data_crank_post (line 402) | METHODDEF(void)
  function jinit_d_main_controller (line 419) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jdmainct.h
  type my_main_controller (line 17) | typedef struct {
  type my_main_controller (line 37) | typedef my_main_controller *my_main_ptr;
  function set_wraparound_pointers (line 46) | LOCAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jdmarker.c
  type JPEG_MARKER (line 23) | typedef enum {                  /* JPEG marker codes */
  type my_marker_reader (line 93) | typedef struct {
  type my_marker_reader (line 110) | typedef my_marker_reader *my_marker_ptr;
  function get_soi (line 199) | LOCAL(boolean)
  function get_sof (line 239) | LOCAL(boolean)
  function get_sos (line 303) | LOCAL(boolean)
  function get_dac (line 386) | LOCAL(boolean)
  function get_dht (line 432) | LOCAL(boolean)
  function get_dqt (line 506) | LOCAL(boolean)
  function get_dri (line 564) | LOCAL(boolean)
  function examine_app0 (line 600) | LOCAL(void)
  function examine_app14 (line 676) | LOCAL(void)
  function get_interesting_appn (line 707) | METHODDEF(boolean)
  function save_marker (line 755) | METHODDEF(boolean)
  function skip_variable (line 861) | METHODDEF(boolean)
  function next_marker (line 890) | LOCAL(boolean)
  function first_marker (line 937) | LOCAL(boolean)
  function read_markers (line 968) | METHODDEF(int)
  function read_restart_marker (line 1129) | METHODDEF(boolean)
  function jpeg_resync_to_restart (line 1208) | GLOBAL(boolean)
  function reset_marker_reader (line 1258) | METHODDEF(void)
  function jinit_marker_reader (line 1278) | GLOBAL(void)
  function jpeg_save_markers (line 1316) | GLOBAL(void)
  function jpeg_set_marker_processor (line 1365) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jdmaster.c
  function use_merged_upsample (line 32) | LOCAL(boolean)
  function jpeg_calc_output_dimensions (line 258) | GLOBAL(void)
  function prepare_range_limit_table (line 407) | LOCAL(void)
  function master_selection (line 447) | LOCAL(void)
  function prepare_for_output_pass (line 607) | METHODDEF(void)
  function finish_output_pass (line 667) | METHODDEF(void)
  function jpeg_new_colormap (line 684) | GLOBAL(void)
  function jinit_master_decompress (line 712) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jdmaster.h
  type my_decomp_master (line 14) | typedef struct {
  type my_decomp_master (line 28) | typedef my_decomp_master *my_master_ptr;

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jdmerge.c
  type my_upsampler (line 51) | typedef struct {
  type my_upsampler (line 76) | typedef my_upsampler *my_upsample_ptr;
  function build_ycc_rgb_table (line 189) | LOCAL(void)
  function start_pass_merged_upsample (line 232) | METHODDEF(void)
  function merged_2v_upsample (line 250) | METHODDEF(void)
  function merged_1v_upsample (line 302) | METHODDEF(void)
  function h2v1_merged_upsample (line 335) | METHODDEF(void)
  function h2v2_merged_upsample (line 381) | METHODDEF(void)
  function INLINE (line 503) | static INLINE boolean is_big_endian(void)
  function h2v1_merged_upsample_565 (line 512) | METHODDEF(void)
  function h2v1_merged_upsample_565D (line 526) | METHODDEF(void)
  function h2v2_merged_upsample_565 (line 540) | METHODDEF(void)
  function h2v2_merged_upsample_565D (line 554) | METHODDEF(void)
  function jinit_merged_upsampler (line 576) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jdmrg565.c
  function INLINE (line 16) | INLINE
  function INLINE (line 87) | INLINE
  function INLINE (line 161) | INLINE
  function INLINE (line 257) | INLINE

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jdmrgext.c
  function INLINE (line 22) | INLINE
  function INLINE (line 95) | INLINE

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jdphuff.c
  type savable_state (line 35) | typedef struct {
  type phuff_entropy_decoder (line 59) | typedef struct {
  type phuff_entropy_decoder (line 77) | typedef phuff_entropy_decoder *phuff_entropy_ptr;
  function start_pass_phuff_decoder (line 94) | METHODDEF(void)
  function process_restart (line 233) | LOCAL(boolean)
  function decode_mcu_DC_first (line 291) | METHODDEF(boolean)
  function decode_mcu_AC_first (line 362) | METHODDEF(boolean)
  function decode_mcu_DC_refine (line 447) | METHODDEF(boolean)
  function decode_mcu_AC_refine (line 496) | METHODDEF(boolean)
  function jinit_phuff_decoder (line 646) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jdpostct.c
  type my_post_controller (line 29) | typedef struct {
  type my_post_controller (line 45) | typedef my_post_controller *my_post_ptr;
  function start_pass_dpost (line 72) | METHODDEF(void)
  function post_process_1pass (line 125) | METHODDEF(void)
  function post_process_prepass (line 157) | METHODDEF(void)
  function post_process_2pass (line 201) | METHODDEF(void)
  function jinit_d_post_controller (line 249) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jdsample.c
  function start_pass_upsample (line 38) | METHODDEF(void)
  function sep_upsample (line 58) | METHODDEF(void)
  function fullsize_upsample (line 126) | METHODDEF(void)
  function noop_upsample (line 139) | METHODDEF(void)
  function int_upsample (line 158) | METHODDEF(void)
  function h2v1_upsample (line 202) | METHODDEF(void)
  function h2v2_upsample (line 230) | METHODDEF(void)
  function h2v1_fancy_upsample (line 273) | METHODDEF(void)
  function h2v2_fancy_upsample (line 314) | METHODDEF(void)
  function jinit_upsampler (line 368) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jdsample.h
  type my_upsampler (line 22) | typedef struct {
  type my_upsampler (line 50) | typedef my_upsampler *my_upsample_ptr;

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jdtrans.c
  function jpeg_read_coefficients (line 47) | GLOBAL(jvirt_barray_ptr *)
  function transdecode_master_selection (line 99) | LOCAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jerror.c
  function error_exit (line 68) | METHODDEF(void)
  function output_message (line 96) | METHODDEF(void)
  function emit_message (line 126) | METHODDEF(void)
  function format_message (line 155) | METHODDEF(void)
  function reset_error_mgr (line 210) | METHODDEF(void)
  function jpeg_std_error (line 229) | GLOBAL(struct jpeg_error_mgr *)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jfdctflt.c
  function jpeg_fdct_float (line 59) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jfdctfst.c
  function jpeg_fdct_ifast (line 116) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jfdctint.c
  function jpeg_fdct_islow (line 142) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jidctflt.c
  function jpeg_idct_float (line 71) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jidctfst.c
  function jpeg_idct_ifast (line 170) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jidctint.c
  function jpeg_idct_islow (line 172) | GLOBAL(void)
  function jpeg_idct_7x7 (line 426) | GLOBAL(void)
  function jpeg_idct_6x6 (line 575) | GLOBAL(void)
  function jpeg_idct_5x5 (line 696) | GLOBAL(void)
  function jpeg_idct_3x3 (line 811) | GLOBAL(void)
  function jpeg_idct_9x9 (line 901) | GLOBAL(void)
  function jpeg_idct_10x10 (line 1072) | GLOBAL(void)
  function jpeg_idct_11x11 (line 1267) | GLOBAL(void)
  function jpeg_idct_12x12 (line 1461) | GLOBAL(void)
  function jpeg_idct_13x13 (line 1677) | GLOBAL(void)
  function jpeg_idct_14x14 (line 1905) | GLOBAL(void)
  function jpeg_idct_15x15 (line 2131) | GLOBAL(void)
  function jpeg_idct_16x16 (line 2373) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jidctred.c
  function jpeg_idct_4x4 (line 120) | GLOBAL(void)
  function jpeg_idct_2x2 (line 274) | GLOBAL(void)
  function jpeg_idct_1x1 (line 383) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jmemmgr.c
  function round_up_pow2 (line 43) | LOCAL(size_t)
  type small_pool_struct (line 100) | struct small_pool_struct
  type small_pool_hdr (line 102) | typedef struct small_pool_struct {
  type large_pool_struct (line 108) | struct large_pool_struct
  type large_pool_hdr (line 110) | typedef struct large_pool_struct {
  type my_memory_mgr (line 120) | typedef struct {
  type my_memory_mgr (line 144) | typedef my_memory_mgr *my_mem_ptr;
  type jvirt_sarray_control (line 154) | struct jvirt_sarray_control {
  type jvirt_barray_control (line 170) | struct jvirt_barray_control {
  function print_mem_stats (line 189) | LOCAL(void)
  function out_of_memory (line 220) | LOCAL(void)
  function alloc_small (line 264) | METHODDEF(void *)
  function alloc_large (line 360) | METHODDEF(void *)
  function alloc_sarray (line 431) | METHODDEF(JSAMPARRAY)
  function alloc_barray (line 491) | METHODDEF(JBLOCKARRAY)
  function request_virt_sarray (line 575) | METHODDEF(jvirt_sarray_ptr)
  function request_virt_barray (line 605) | METHODDEF(jvirt_barray_ptr)
  function realize_virt_arrays (line 635) | METHODDEF(void)
  function do_sarray_io (line 742) | LOCAL(void)
  function do_barray_io (line 775) | LOCAL(void)
  function access_virt_sarray (line 808) | METHODDEF(JSAMPARRAY)
  function access_virt_barray (line 893) | METHODDEF(JBLOCKARRAY)
  function free_pool (line 982) | METHODDEF(void)
  function self_destruct (line 1054) | METHODDEF(void)
  function jinit_memory_mgr (line 1080) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jmemnobs.c
  function jpeg_get_small (line 37) | GLOBAL(void *)
  function jpeg_free_small (line 43) | GLOBAL(void)
  function jpeg_get_large (line 54) | GLOBAL(void *)
  function jpeg_free_large (line 60) | GLOBAL(void)
  function jpeg_mem_available (line 72) | GLOBAL(size_t)
  function jpeg_open_backing_store (line 86) | GLOBAL(void)
  function jpeg_mem_init (line 99) | GLOBAL(long)
  function jpeg_mem_term (line 105) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jmemsys.h
  type XMSH (line 104) | typedef unsigned short XMSH;
  type EMSH (line 105) | typedef unsigned short EMSH;
  type handle_union (line 107) | typedef union {
  type backing_store_struct (line 120) | struct backing_store_struct
  type backing_store_info (line 122) | typedef struct backing_store_struct {

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jmorecfg.h
  type JSAMPLE (line 51) | typedef unsigned char JSAMPLE;
  type JSAMPLE (line 56) | typedef char JSAMPLE;
  type JSAMPLE (line 76) | typedef short JSAMPLE;
  type JCOEF (line 91) | typedef short JCOEF;
  type JOCTET (line 102) | typedef unsigned char JOCTET;
  type JOCTET (line 107) | typedef char JOCTET;
  type UINT8 (line 127) | typedef unsigned char UINT8;
  type UINT8 (line 130) | typedef char UINT8;
  type UINT8 (line 132) | typedef short UINT8;
  type UINT16 (line 139) | typedef unsigned short UINT16;
  type UINT16 (line 141) | typedef unsigned int UINT16;
  type INT16 (line 147) | typedef short INT16;
  type INT32 (line 179) | typedef long INT32;
  type JDIMENSION (line 194) | typedef unsigned int JDIMENSION;
  type boolean (line 242) | typedef int boolean;

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jpegint.h
  type J_BUF_MODE (line 21) | typedef enum {            /* Operating modes for buffer controllers */
  type JLONG (line 48) | typedef long JLONG;
  type jpeg_comp_master (line 62) | struct jpeg_comp_master {
  type jpeg_c_main_controller (line 73) | struct jpeg_c_main_controller {
  type jpeg_c_prep_controller (line 80) | struct jpeg_c_prep_controller {
  type jpeg_c_coef_controller (line 90) | struct jpeg_c_coef_controller {
  type jpeg_color_converter (line 96) | struct jpeg_color_converter {
  type jpeg_downsampler (line 104) | struct jpeg_downsampler {
  type jpeg_forward_dct (line 114) | struct jpeg_forward_dct {
  type jpeg_entropy_encoder (line 124) | struct jpeg_entropy_encoder {
  type jpeg_marker_writer (line 131) | struct jpeg_marker_writer {
  type jpeg_decomp_master (line 148) | struct jpeg_decomp_master {
  type jpeg_input_controller (line 164) | struct jpeg_input_controller {
  type jpeg_d_main_controller (line 176) | struct jpeg_d_main_controller {
  type jpeg_d_coef_controller (line 183) | struct jpeg_d_coef_controller {
  type jpeg_d_post_controller (line 193) | struct jpeg_d_post_controller {
  type jpeg_marker_reader (line 203) | struct jpeg_marker_reader {
  type jpeg_entropy_decoder (line 223) | struct jpeg_entropy_decoder {
  type jpeg_inverse_dct (line 239) | struct jpeg_inverse_dct {
  type jpeg_upsampler (line 246) | struct jpeg_upsampler {
  type jpeg_color_deconverter (line 257) | struct jpeg_color_deconverter {
  type jpeg_color_quantizer (line 265) | struct jpeg_color_quantizer {
  type jvirt_sarray_control (line 365) | struct jvirt_sarray_control { long dummy; }
  type jvirt_barray_control (line 366) | struct jvirt_barray_control { long dummy; }

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jpeglib.h
  type JSAMPLE (line 69) | typedef JSAMPLE *JSAMPROW;
  type JSAMPROW (line 70) | typedef JSAMPROW *JSAMPARRAY;
  type JSAMPARRAY (line 71) | typedef JSAMPARRAY *JSAMPIMAGE;
  type JCOEF (line 73) | typedef JCOEF JBLOCK[DCTSIZE2];
  type JBLOCK (line 74) | typedef JBLOCK *JBLOCKROW;
  type JBLOCKROW (line 75) | typedef JBLOCKROW *JBLOCKARRAY;
  type JBLOCKARRAY (line 76) | typedef JBLOCKARRAY *JBLOCKIMAGE;
  type JCOEF (line 78) | typedef JCOEF *JCOEFPTR;
  type JQUANT_TBL (line 86) | typedef struct {
  type JHUFF_TBL (line 103) | typedef struct {
  type jpeg_component_info (line 119) | typedef struct {
  type jpeg_scan_info (line 192) | typedef struct {
  type jpeg_marker_struct (line 201) | struct jpeg_marker_struct
  type jpeg_marker_struct (line 203) | struct jpeg_marker_struct {
  type J_COLOR_SPACE (line 217) | typedef enum {
  type J_DCT_METHOD (line 246) | typedef enum {
  type J_DITHER_MODE (line 261) | typedef enum {
  type jpeg_memory_mgr (line 272) | struct jpeg_memory_mgr
  type jpeg_progress_mgr (line 273) | struct jpeg_progress_mgr
  type jpeg_common_struct (line 282) | struct jpeg_common_struct {
  type jpeg_common_struct (line 290) | struct jpeg_common_struct
  type jpeg_compress_struct (line 291) | struct jpeg_compress_struct
  type jpeg_decompress_struct (line 292) | struct jpeg_decompress_struct
  type jpeg_compress_struct (line 297) | struct jpeg_compress_struct {
  type jpeg_decompress_struct (line 472) | struct jpeg_decompress_struct {
  type jpeg_error_mgr (line 720) | struct jpeg_error_mgr {
  type jpeg_progress_mgr (line 778) | struct jpeg_progress_mgr {
  type jpeg_destination_mgr (line 790) | struct jpeg_destination_mgr {
  type jpeg_source_mgr (line 802) | struct jpeg_source_mgr {
  type jvirt_sarray_control (line 829) | struct jvirt_sarray_control
  type jvirt_barray_control (line 830) | struct jvirt_barray_control
  type jpeg_memory_mgr (line 833) | struct jpeg_memory_mgr {
  type boolean (line 877) | typedef boolean (*jpeg_marker_parser_method) (j_decompress_ptr cinfo);
  type jpeg_error_mgr (line 891) | struct jpeg_error_mgr
  type jpeg_error_mgr (line 891) | struct jpeg_error_mgr
  type jvirt_sarray_control (line 1078) | struct jvirt_sarray_control { long dummy; }
  type jvirt_barray_control (line 1079) | struct jvirt_barray_control { long dummy; }
  type jpeg_comp_master (line 1080) | struct jpeg_comp_master { long dummy; }
  type jpeg_c_main_controller (line 1081) | struct jpeg_c_main_controller { long dummy; }
  type jpeg_c_prep_controller (line 1082) | struct jpeg_c_prep_controller { long dummy; }
  type jpeg_c_coef_controller (line 1083) | struct jpeg_c_coef_controller { long dummy; }
  type jpeg_marker_writer (line 1084) | struct jpeg_marker_writer { long dummy; }
  type jpeg_color_converter (line 1085) | struct jpeg_color_converter { long dummy; }
  type jpeg_downsampler (line 1086) | struct jpeg_downsampler { long dummy; }
  type jpeg_forward_dct (line 1087) | struct jpeg_forward_dct { long dummy; }
  type jpeg_entropy_encoder (line 1088) | struct jpeg_entropy_encoder { long dummy; }
  type jpeg_decomp_master (line 1089) | struct jpeg_decomp_master { long dummy; }
  type jpeg_d_main_controller (line 1090) | struct jpeg_d_main_controller { long dummy; }
  type jpeg_d_coef_controller (line 1091) | struct jpeg_d_coef_controller { long dummy; }
  type jpeg_d_post_controller (line 1092) | struct jpeg_d_post_controller { long dummy; }
  type jpeg_input_controller (line 1093) | struct jpeg_input_controller { long dummy; }
  type jpeg_marker_reader (line 1094) | struct jpeg_marker_reader { long dummy; }
  type jpeg_entropy_decoder (line 1095) | struct jpeg_entropy_decoder { long dummy; }
  type jpeg_inverse_dct (line 1096) | struct jpeg_inverse_dct { long dummy; }
  type jpeg_upsampler (line 1097) | struct jpeg_upsampler { long dummy; }
  type jpeg_color_deconverter (line 1098) | struct jpeg_color_deconverter { long dummy; }
  type jpeg_color_quantizer (line 1099) | struct jpeg_color_quantizer { long dummy; }

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jpegtran.c
  function usage (line 48) | LOCAL(void)
  function select_transform (line 99) | LOCAL(void)
  function parse_switches (line 122) | LOCAL(int)
  function main (line 372) | int

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jquant1.c
  type INT16 (line 128) | typedef INT16 FSERROR;
  type LOCFSERROR (line 129) | typedef int LOCFSERROR;
  type JLONG (line 131) | typedef JLONG FSERROR;
  type JLONG (line 132) | typedef JLONG LOCFSERROR;
  type FSERROR (line 135) | typedef FSERROR *FSERRPTR;
  type my_cquantizer (line 142) | typedef struct {
  type my_cquantizer (line 167) | typedef my_cquantizer *my_cquantize_ptr;
  function select_ncolors (line 185) | LOCAL(int)
  function output_value (line 247) | LOCAL(int)
  function largest_input_value (line 261) | LOCAL(int)
  function create_colormap (line 275) | LOCAL(void)
  function create_colorindex (line 335) | LOCAL(void)
  function make_odither_array (line 398) | LOCAL(ODITHER_MATRIX_PTR)
  function create_odither_tables (line 434) | LOCAL(void)
  function color_quantize (line 461) | METHODDEF(void)
  function color_quantize3 (line 489) | METHODDEF(void)
  function quantize_ord_dither (line 517) | METHODDEF(void)
  function quantize3_ord_dither (line 566) | METHODDEF(void)
  function quantize_fs_dither (line 611) | METHODDEF(void)
  function alloc_fs_workspace (line 722) | LOCAL(void)
  function start_pass_1_quant (line 741) | METHODDEF(void)
  function finish_pass_1_quant (line 798) | METHODDEF(void)
  function new_color_map_1_quant (line 810) | METHODDEF(void)
  function jinit_1pass_quantizer (line 821) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jquant2.c
  type UINT16 (line 129) | typedef UINT16 histcell;
  type histcell (line 131) | typedef histcell *histptr;
  type histcell (line 133) | typedef histcell hist1d[HIST_C2_ELEMS];
  type hist1d (line 134) | typedef hist1d *hist2d;
  type hist2d (line 135) | typedef hist2d *hist3d;
  type INT16 (line 160) | typedef INT16 FSERROR;
  type LOCFSERROR (line 161) | typedef int LOCFSERROR;
  type JLONG (line 163) | typedef JLONG FSERROR;
  type JLONG (line 164) | typedef JLONG LOCFSERROR;
  type FSERROR (line 167) | typedef FSERROR *FSERRPTR;
  type my_cquantizer (line 172) | typedef struct {
  type my_cquantizer (line 190) | typedef my_cquantizer *my_cquantize_ptr;
  function prescan_quantize (line 202) | METHODDEF(void)
  type box (line 237) | typedef struct {
  type box (line 248) | typedef box *boxptr;
  function find_biggest_color_pop (line 251) | LOCAL(boxptr)
  function find_biggest_volume (line 271) | LOCAL(boxptr)
  function update_box (line 291) | LOCAL(void)
  function median_cut (line 402) | LOCAL(int)
  function compute_color (line 478) | LOCAL(void)
  function select_colors (line 518) | LOCAL(void)
  function find_nearby_colors (line 625) | LOCAL(int)
  function find_best_colors (line 754) | LOCAL(void)
  function fill_inverse_cmap (line 834) | LOCAL(void)
  function pass2_no_dither (line 894) | METHODDEF(void)
  function pass2_fs_dither (line 928) | METHODDEF(void)
  function init_error_limit (line 1078) | LOCAL(void)
  function finish_pass1 (line 1113) | METHODDEF(void)
  function finish_pass2 (line 1126) | METHODDEF(void)
  function start_pass_2_quant (line 1137) | METHODDEF(void)
  function new_color_map_2_quant (line 1200) | METHODDEF(void)
  function jinit_2pass_quantizer (line 1214) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jsimd_none.c
  function jsimd_can_rgb_ycc (line 22) | GLOBAL(int)
  function jsimd_can_rgb_gray (line 28) | GLOBAL(int)
  function jsimd_can_ycc_rgb (line 34) | GLOBAL(int)
  function jsimd_can_ycc_rgb565 (line 40) | GLOBAL(int)
  function jsimd_c_can_null_convert (line 46) | GLOBAL(int)
  function jsimd_rgb_ycc_convert (line 52) | GLOBAL(void)
  function jsimd_rgb_gray_convert (line 59) | GLOBAL(void)
  function jsimd_ycc_rgb_convert (line 66) | GLOBAL(void)
  function jsimd_ycc_rgb565_convert (line 73) | GLOBAL(void)
  function jsimd_c_null_convert (line 80) | GLOBAL(void)
  function jsimd_can_h2v2_downsample (line 87) | GLOBAL(int)
  function jsimd_can_h2v1_downsample (line 93) | GLOBAL(int)
  function jsimd_can_h2v2_smooth_downsample (line 99) | GLOBAL(int)
  function jsimd_h2v2_downsample (line 105) | GLOBAL(void)
  function jsimd_h2v2_smooth_downsample (line 111) | GLOBAL(void)
  function jsimd_h2v1_downsample (line 118) | GLOBAL(void)
  function jsimd_can_h2v2_upsample (line 124) | GLOBAL(int)
  function jsimd_can_h2v1_upsample (line 130) | GLOBAL(int)
  function jsimd_can_int_upsample (line 136) | GLOBAL(int)
  function jsimd_int_upsample (line 142) | GLOBAL(void)
  function jsimd_h2v2_upsample (line 148) | GLOBAL(void)
  function jsimd_h2v1_upsample (line 156) | GLOBAL(void)
  function jsimd_can_h2v2_fancy_upsample (line 164) | GLOBAL(int)
  function jsimd_can_h2v1_fancy_upsample (line 170) | GLOBAL(int)
  function jsimd_h2v2_fancy_upsample (line 176) | GLOBAL(void)
  function jsimd_h2v1_fancy_upsample (line 184) | GLOBAL(void)
  function jsimd_can_h2v2_merged_upsample (line 192) | GLOBAL(int)
  function jsimd_can_h2v1_merged_upsample (line 198) | GLOBAL(int)
  function jsimd_h2v2_merged_upsample (line 204) | GLOBAL(void)
  function jsimd_h2v1_merged_upsample (line 212) | GLOBAL(void)
  function jsimd_can_convsamp (line 220) | GLOBAL(int)
  function jsimd_can_convsamp_float (line 226) | GLOBAL(int)
  function jsimd_convsamp (line 232) | GLOBAL(void)
  function jsimd_convsamp_float (line 238) | GLOBAL(void)
  function jsimd_can_fdct_islow (line 244) | GLOBAL(int)
  function jsimd_can_fdct_ifast (line 250) | GLOBAL(int)
  function jsimd_can_fdct_float (line 256) | GLOBAL(int)
  function jsimd_fdct_islow (line 262) | GLOBAL(void)
  function jsimd_fdct_ifast (line 267) | GLOBAL(void)
  function jsimd_fdct_float (line 272) | GLOBAL(void)
  function jsimd_can_quantize (line 277) | GLOBAL(int)
  function jsimd_can_quantize_float (line 283) | GLOBAL(int)
  function jsimd_quantize (line 289) | GLOBAL(void)
  function jsimd_quantize_float (line 295) | GLOBAL(void)
  function jsimd_can_idct_2x2 (line 301) | GLOBAL(int)
  function jsimd_can_idct_4x4 (line 307) | GLOBAL(int)
  function jsimd_can_idct_6x6 (line 313) | GLOBAL(int)
  function jsimd_can_idct_12x12 (line 319) | GLOBAL(int)
  function jsimd_idct_2x2 (line 325) | GLOBAL(void)
  function jsimd_idct_4x4 (line 332) | GLOBAL(void)
  function jsimd_idct_6x6 (line 339) | GLOBAL(void)
  function jsimd_idct_12x12 (line 346) | GLOBAL(void)
  function jsimd_can_idct_islow (line 353) | GLOBAL(int)
  function jsimd_can_idct_ifast (line 359) | GLOBAL(int)
  function jsimd_can_idct_float (line 365) | GLOBAL(int)
  function jsimd_idct_islow (line 371) | GLOBAL(void)
  function jsimd_idct_ifast (line 378) | GLOBAL(void)
  function jsimd_idct_float (line 385) | GLOBAL(void)
  function jsimd_can_huff_encode_one_block (line 392) | GLOBAL(int)
  function jsimd_huff_encode_one_block (line 398) | GLOBAL(JOCTET*)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jstdhuff.c
  function add_huff_table (line 19) | LOCAL(void)
  function std_huff_tables (line 52) | LOCAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jutils.c
  function jdiv_round_up (line 74) | GLOBAL(long)
  function jround_up (line 83) | GLOBAL(long)
  function jcopy_sample_rows (line 93) | GLOBAL(void)
  function jcopy_block_row (line 118) | GLOBAL(void)
  function jzero_far (line 127) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/md5/md5.c
  function Encode (line 55) | static void
  function Decode (line 70) | static void
  function MD5Init (line 123) | void
  function MD5Update (line 143) | void
  function MD5Pad (line 186) | void

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/md5/md5.h
  type MD5_CTX (line 36) | typedef struct MD5Context {

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/md5/md5cmp.c
  function main (line 35) | int main(int argc, char *argv[])

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/md5/md5hl.c
  type stat (line 66) | struct stat

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/rdbmp.c
  type U_CHAR (line 37) | typedef unsigned char U_CHAR;
  type U_CHAR (line 41) | typedef char U_CHAR;
  type U_CHAR (line 44) | typedef char U_CHAR;
  type _bmp_source_struct (line 55) | struct _bmp_source_struct
  type bmp_source_struct (line 57) | typedef struct _bmp_source_struct {
  function read_byte (line 72) | LOCAL(int)
  function read_colormap (line 85) | LOCAL(void)
  function get_8bit_row (line 123) | METHODDEF(JDIMENSION)
  function get_24bit_row (line 154) | METHODDEF(JDIMENSION)
  function get_32bit_row (line 185) | METHODDEF(JDIMENSION)
  function preload_image (line 222) | METHODDEF(JDIMENSION)
  function start_input_bmp (line 278) | METHODDEF(void)
  function finish_input_bmp (line 455) | METHODDEF(void)
  function jinit_read_bmp (line 466) | GLOBAL(cjpeg_source_ptr)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/rdcolmap.c
  function add_map_entry (line 46) | LOCAL(void)
  function read_gif_map (line 79) | LOCAL(void)
  function pbm_getc (line 121) | LOCAL(int)
  function read_pbm_integer (line 138) | LOCAL(unsigned int)
  function read_ppm_map (line 171) | LOCAL(void)
  function read_color_map (line 231) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/rdgif.c
  function jinit_read_gif (line 31) | GLOBAL(cjpeg_source_ptr)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/rdjpgcom.c
  function read_1_byte (line 71) | static int
  function read_2_bytes (line 84) | static unsigned int
  function next_marker (line 136) | static int
  function first_marker (line 171) | static int
  function skip_variable (line 193) | static void
  function process_COM (line 219) | static void
  function process_SOFn (line 276) | static void
  function scan_JPEG_header (line 334) | static int
  function usage (line 403) | static void
  function keymatch (line 419) | static int
  function main (line 448) | int

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/rdppm.c
  type U_CHAR (line 46) | typedef unsigned char U_CHAR;
  type U_CHAR (line 50) | typedef char U_CHAR;
  type U_CHAR (line 53) | typedef char U_CHAR;
  type ppm_source_struct (line 64) | typedef struct {
  type ppm_source_struct (line 75) | typedef ppm_source_struct *ppm_source_ptr;
  function pbm_getc (line 78) | LOCAL(int)
  function read_pbm_integer (line 95) | LOCAL(unsigned int)
  function get_text_gray_row (line 139) | METHODDEF(JDIMENSION)
  function get_text_rgb_row (line 158) | METHODDEF(JDIMENSION)
  function get_scaled_gray_row (line 179) | METHODDEF(JDIMENSION)
  function get_scaled_rgb_row (line 200) | METHODDEF(JDIMENSION)
  function get_raw_row (line 223) | METHODDEF(JDIMENSION)
  function get_word_gray_row (line 238) | METHODDEF(JDIMENSION)
  function get_word_rgb_row (line 265) | METHODDEF(JDIMENSION)
  function start_input_ppm (line 306) | METHODDEF(void)
  function finish_input_ppm (line 444) | METHODDEF(void)
  function jinit_read_ppm (line 455) | GLOBAL(cjpeg_source_ptr)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/rdrle.c
  type rle_kind (line 54) | typedef enum
  type _rle_source_struct (line 65) | struct _rle_source_struct
  type rle_source_struct (line 67) | typedef struct _rle_source_struct {
  function start_input_rle (line 83) | METHODDEF(void)
  function get_rle_row (line 189) | METHODDEF(JDIMENSION)
  function get_pseudocolor_row (line 207) | METHODDEF(JDIMENSION)
  function load_image (line 243) | METHODDEF(JDIMENSION)
  function finish_input_rle (line 361) | METHODDEF(void)
  function jinit_read_rle (line 372) | GLOBAL(cjpeg_source_ptr)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/rdswitch.c
  function text_getc (line 24) | LOCAL(int)
  function read_text_integer (line 41) | LOCAL(boolean)
  function read_quant_tables (line 80) | GLOBAL(boolean)
  function read_scan_integer (line 142) | LOCAL(boolean)
  function read_scan_script (line 171) | GLOBAL(boolean)
  function jpeg_default_qtables (line 306) | LOCAL(void)
  function set_quality_ratings (line 317) | GLOBAL(boolean)
  function set_quant_slots (line 357) | GLOBAL(boolean)
  function set_sample_factors (line 392) | GLOBAL(boolean)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/rdtarga.c
  type U_CHAR (line 31) | typedef unsigned char U_CHAR;
  type U_CHAR (line 35) | typedef char U_CHAR;
  type U_CHAR (line 38) | typedef char U_CHAR;
  type _tga_source_struct (line 49) | struct _tga_source_struct
  type tga_source_struct (line 51) | typedef struct _tga_source_struct {
  function read_byte (line 89) | LOCAL(int)
  function read_colormap (line 102) | LOCAL(void)
  function read_non_rle_pixel (line 124) | METHODDEF(void)
  function read_rle_pixel (line 137) | METHODDEF(void)
  function get_8bit_gray_row (line 175) | METHODDEF(JDIMENSION)
  function get_8bit_row (line 191) | METHODDEF(JDIMENSION)
  function get_16bit_row (line 212) | METHODDEF(JDIMENSION)
  function get_24bit_row (line 240) | METHODDEF(JDIMENSION)
  function get_memory_row (line 274) | METHODDEF(JDIMENSION)
  function preload_image (line 301) | METHODDEF(JDIMENSION)
  function start_input_tga (line 334) | METHODDEF(void)
  function finish_input_tga (line 475) | METHODDEF(void)
  function jinit_read_targa (line 486) | GLOBAL(cjpeg_source_ptr)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/simd/jccolext-altivec.c
  function jsimd_rgb_ycc_convert_altivec (line 27) | void jsimd_rgb_ycc_convert_altivec (JDIMENSION img_width, JSAMPARRAY inp...

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/simd/jcgryext-altivec.c
  function jsimd_rgb_gray_convert_altivec (line 27) | void jsimd_rgb_gray_convert_altivec (JDIMENSION img_width,

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/simd/jcsample-altivec.c
  function jsimd_h2v1_downsample_altivec (line 29) | void
  function jsimd_h2v2_downsample_altivec (line 85) | void

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/simd/jcsample.h
  function expand_right_edge (line 10) | LOCAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/simd/jdcolext-altivec.c
  function jsimd_ycc_rgb_convert_altivec (line 26) | void jsimd_ycc_rgb_convert_altivec (JDIMENSION out_width, JSAMPIMAGE inp...

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/simd/jdmrgext-altivec.c
  function jsimd_h2v1_merged_upsample_altivec (line 26) | void jsimd_h2v1_merged_upsample_altivec (JDIMENSION output_width,
  function jsimd_h2v2_merged_upsample_altivec (line 302) | void jsimd_h2v2_merged_upsample_altivec (JDIMENSION output_width,

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/simd/jdsample-altivec.c
  function jsimd_h2v1_fancy_upsample_altivec (line 28) | void
  function jsimd_h2v2_fancy_upsample_altivec (line 124) | void
  function jsimd_h2v1_upsample_altivec (line 309) | void
  function jsimd_h2v2_upsample_altivec (line 348) | void

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/simd/jfdctfst-altivec.c
  function jsimd_fdct_ifast_altivec (line 91) | void

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/simd/jfdctint-altivec.c
  function jsimd_fdct_islow_altivec (line 185) | void

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/simd/jidctfst-altivec.c
  function jsimd_idct_ifast_altivec (line 113) | void

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/simd/jidctint-altivec.c
  function jsimd_idct_islow_altivec (line 208) | void

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/simd/jquanti-altivec.c
  function jsimd_convsamp_altivec (line 51) | void
  function jsimd_quantize_altivec (line 117) | void

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/simd/jsimd_arm.c
  function check_feature (line 36) | LOCAL(int)
  function parse_proc_cpuinfo (line 64) | LOCAL(int)
  function init_simd (line 99) | LOCAL(void)
  function jsimd_can_rgb_ycc (line 137) | GLOBAL(int)
  function jsimd_can_rgb_gray (line 156) | GLOBAL(int)
  function jsimd_can_ycc_rgb (line 164) | GLOBAL(int)
  function jsimd_can_ycc_rgb565 (line 183) | GLOBAL(int)
  function jsimd_rgb_ycc_convert (line 200) | GLOBAL(void)
  function jsimd_rgb_gray_convert (line 238) | GLOBAL(void)
  function jsimd_ycc_rgb_convert (line 245) | GLOBAL(void)
  function jsimd_ycc_rgb565_convert (line 283) | GLOBAL(void)
  function jsimd_can_h2v2_downsample (line 292) | GLOBAL(int)
  function jsimd_can_h2v1_downsample (line 300) | GLOBAL(int)
  function jsimd_h2v2_downsample (line 308) | GLOBAL(void)
  function jsimd_h2v1_downsample (line 314) | GLOBAL(void)
  function jsimd_can_h2v2_upsample (line 320) | GLOBAL(int)
  function jsimd_can_h2v1_upsample (line 328) | GLOBAL(int)
  function jsimd_h2v2_upsample (line 336) | GLOBAL(void)
  function jsimd_h2v1_upsample (line 344) | GLOBAL(void)
  function jsimd_can_h2v2_fancy_upsample (line 352) | GLOBAL(int)
  function jsimd_can_h2v1_fancy_upsample (line 360) | GLOBAL(int)
  function jsimd_h2v2_fancy_upsample (line 377) | GLOBAL(void)
  function jsimd_h2v1_fancy_upsample (line 385) | GLOBAL(void)
  function jsimd_can_h2v2_merged_upsample (line 396) | GLOBAL(int)
  function jsimd_can_h2v1_merged_upsample (line 404) | GLOBAL(int)
  function jsimd_h2v2_merged_upsample (line 412) | GLOBAL(void)
  function jsimd_h2v1_merged_upsample (line 420) | GLOBAL(void)
  function jsimd_can_convsamp (line 428) | GLOBAL(int)
  function jsimd_can_convsamp_float (line 449) | GLOBAL(int)
  function jsimd_convsamp (line 457) | GLOBAL(void)
  function jsimd_convsamp_float (line 464) | GLOBAL(void)
  function jsimd_can_fdct_islow (line 470) | GLOBAL(int)
  function jsimd_can_fdct_ifast (line 478) | GLOBAL(int)
  function jsimd_can_fdct_float (line 495) | GLOBAL(int)
  function jsimd_fdct_islow (line 503) | GLOBAL(void)
  function jsimd_fdct_ifast (line 508) | GLOBAL(void)
  function jsimd_fdct_float (line 514) | GLOBAL(void)
  function jsimd_can_quantize (line 519) | GLOBAL(int)
  function jsimd_can_quantize_float (line 538) | GLOBAL(int)
  function jsimd_quantize (line 546) | GLOBAL(void)
  function jsimd_quantize_float (line 553) | GLOBAL(void)
  function jsimd_can_idct_2x2 (line 559) | GLOBAL(int)
  function jsimd_can_idct_4x4 (line 582) | GLOBAL(int)
  function jsimd_idct_2x2 (line 605) | GLOBAL(void)
  function jsimd_idct_4x4 (line 614) | GLOBAL(void)
  function jsimd_can_idct_islow (line 623) | GLOBAL(int)
  function jsimd_can_idct_ifast (line 646) | GLOBAL(int)
  function jsimd_can_idct_float (line 671) | GLOBAL(int)
  function jsimd_idct_islow (line 679) | GLOBAL(void)
  function jsimd_idct_ifast (line 688) | GLOBAL(void)
  function jsimd_idct_float (line 697) | GLOBAL(void)
  function jsimd_can_huff_encode_one_block (line 704) | GLOBAL(int)
  function jsimd_huff_encode_one_block (line 720) | GLOBAL(JOCTET*)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/simd/jsimd_arm64.c
  function check_cpuinfo (line 42) | LOCAL(int)
  function parse_proc_cpuinfo (line 70) | LOCAL(int)
  function init_simd (line 120) | LOCAL(void)
  function jsimd_can_rgb_ycc (line 164) | GLOBAL(int)
  function jsimd_can_rgb_gray (line 183) | GLOBAL(int)
  function jsimd_can_ycc_rgb (line 191) | GLOBAL(int)
  function jsimd_can_ycc_rgb565 (line 210) | GLOBAL(int)
  function jsimd_rgb_ycc_convert (line 227) | GLOBAL(void)
  function jsimd_rgb_gray_convert (line 274) | GLOBAL(void)
  function jsimd_ycc_rgb_convert (line 281) | GLOBAL(void)
  function jsimd_ycc_rgb565_convert (line 328) | GLOBAL(void)
  function jsimd_can_h2v2_downsample (line 337) | GLOBAL(int)
  function jsimd_can_h2v1_downsample (line 356) | GLOBAL(int)
  function jsimd_h2v2_downsample (line 375) | GLOBAL(void)
  function jsimd_h2v1_downsample (line 384) | GLOBAL(void)
  function jsimd_can_h2v2_upsample (line 393) | GLOBAL(int)
  function jsimd_can_h2v1_upsample (line 401) | GLOBAL(int)
  function jsimd_h2v2_upsample (line 409) | GLOBAL(void)
  function jsimd_h2v1_upsample (line 417) | GLOBAL(void)
  function jsimd_can_h2v2_fancy_upsample (line 425) | GLOBAL(int)
  function jsimd_can_h2v1_fancy_upsample (line 433) | GLOBAL(int)
  function jsimd_h2v2_fancy_upsample (line 441) | GLOBAL(void)
  function jsimd_h2v1_fancy_upsample (line 449) | GLOBAL(void)
  function jsimd_can_h2v2_merged_upsample (line 457) | GLOBAL(int)
  function jsimd_can_h2v1_merged_upsample (line 465) | GLOBAL(int)
  function jsimd_h2v2_merged_upsample (line 473) | GLOBAL(void)
  function jsimd_h2v1_merged_upsample (line 481) | GLOBAL(void)
  function jsimd_can_convsamp (line 489) | GLOBAL(int)
  function jsimd_can_convsamp_float (line 510) | GLOBAL(int)
  function jsimd_convsamp (line 518) | GLOBAL(void)
  function jsimd_convsamp_float (line 525) | GLOBAL(void)
  function jsimd_can_fdct_islow (line 531) | GLOBAL(int)
  function jsimd_can_fdct_ifast (line 548) | GLOBAL(int)
  function jsimd_can_fdct_float (line 565) | GLOBAL(int)
  function jsimd_fdct_islow (line 573) | GLOBAL(void)
  function jsimd_fdct_ifast (line 579) | GLOBAL(void)
  function jsimd_fdct_float (line 585) | GLOBAL(void)
  function jsimd_can_quantize (line 590) | GLOBAL(int)
  function jsimd_can_quantize_float (line 609) | GLOBAL(int)
  function jsimd_quantize (line 617) | GLOBAL(void)
  function jsimd_quantize_float (line 624) | GLOBAL(void)
  function jsimd_can_idct_2x2 (line 630) | GLOBAL(int)
  function jsimd_can_idct_4x4 (line 653) | GLOBAL(int)
  function jsimd_idct_2x2 (line 676) | GLOBAL(void)
  function jsimd_idct_4x4 (line 685) | GLOBAL(void)
  function jsimd_can_idct_islow (line 694) | GLOBAL(int)
  function jsimd_can_idct_ifast (line 717) | GLOBAL(int)
  function jsimd_can_idct_float (line 742) | GLOBAL(int)
  function jsimd_idct_islow (line 750) | GLOBAL(void)
  function jsimd_idct_ifast (line 759) | GLOBAL(void)
  function jsimd_idct_float (line 768) | GLOBAL(void)
  function jsimd_can_huff_encode_one_block (line 775) | GLOBAL(int)
  function jsimd_huff_encode_one_block (line 791) | GLOBAL(JOCTET*)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/simd/jsimd_i386.c
  function init_simd (line 41) | LOCAL(void)
  function jsimd_can_rgb_ycc (line 72) | GLOBAL(int)
  function jsimd_can_rgb_gray (line 94) | GLOBAL(int)
  function jsimd_can_ycc_rgb (line 116) | GLOBAL(int)
  function jsimd_can_ycc_rgb565 (line 138) | GLOBAL(int)
  function jsimd_rgb_ycc_convert (line 144) | GLOBAL(void)
  function jsimd_rgb_gray_convert (line 194) | GLOBAL(void)
  function jsimd_ycc_rgb_convert (line 244) | GLOBAL(void)
  function jsimd_ycc_rgb565_convert (line 294) | GLOBAL(void)
  function jsimd_can_h2v2_downsample (line 301) | GLOBAL(int)
  function jsimd_can_h2v1_downsample (line 320) | GLOBAL(int)
  function jsimd_h2v2_downsample (line 339) | GLOBAL(void)
  function jsimd_h2v1_downsample (line 354) | GLOBAL(void)
  function jsimd_can_h2v2_upsample (line 369) | GLOBAL(int)
  function jsimd_can_h2v1_upsample (line 388) | GLOBAL(int)
  function jsimd_h2v2_upsample (line 407) | GLOBAL(void)
  function jsimd_h2v1_upsample (line 421) | GLOBAL(void)
  function jsimd_can_h2v2_fancy_upsample (line 435) | GLOBAL(int)
  function jsimd_can_h2v1_fancy_upsample (line 455) | GLOBAL(int)
  function jsimd_h2v2_fancy_upsample (line 475) | GLOBAL(void)
  function jsimd_h2v1_fancy_upsample (line 492) | GLOBAL(void)
  function jsimd_can_h2v2_merged_upsample (line 509) | GLOBAL(int)
  function jsimd_can_h2v1_merged_upsample (line 529) | GLOBAL(int)
  function jsimd_h2v2_merged_upsample (line 549) | GLOBAL(void)
  function jsimd_h2v1_merged_upsample (line 600) | GLOBAL(void)
  function jsimd_can_convsamp (line 651) | GLOBAL(int)
  function jsimd_can_convsamp_float (line 674) | GLOBAL(int)
  function jsimd_convsamp (line 699) | GLOBAL(void)
  function jsimd_convsamp_float (line 709) | GLOBAL(void)
  function jsimd_can_fdct_islow (line 721) | GLOBAL(int)
  function jsimd_can_fdct_ifast (line 740) | GLOBAL(int)
  function jsimd_can_fdct_float (line 759) | GLOBAL(int)
  function jsimd_fdct_islow (line 778) | GLOBAL(void)
  function jsimd_fdct_ifast (line 787) | GLOBAL(void)
  function jsimd_fdct_float (line 796) | GLOBAL(void)
  function jsimd_can_quantize (line 805) | GLOBAL(int)
  function jsimd_can_quantize_float (line 826) | GLOBAL(int)
  function jsimd_quantize (line 849) | GLOBAL(void)
  function jsimd_quantize_float (line 859) | GLOBAL(void)
  function jsimd_can_idct_2x2 (line 871) | GLOBAL(int)
  function jsimd_can_idct_4x4 (line 896) | GLOBAL(int)
  function jsimd_idct_2x2 (line 921) | GLOBAL(void)
  function jsimd_idct_4x4 (line 933) | GLOBAL(void)
  function jsimd_can_idct_islow (line 945) | GLOBAL(int)
  function jsimd_can_idct_ifast (line 970) | GLOBAL(int)
  function jsimd_can_idct_float (line 997) | GLOBAL(int)
  function jsimd_idct_islow (line 1025) | GLOBAL(void)
  function jsimd_idct_ifast (line 1038) | GLOBAL(void)
  function jsimd_idct_float (line 1051) | GLOBAL(void)
  function jsimd_can_huff_encode_one_block (line 1067) | GLOBAL(int)
  function jsimd_huff_encode_one_block (line 1084) | GLOBAL(JOCTET*)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/simd/jsimd_mips.c
  function parse_proc_cpuinfo (line 34) | LOCAL(int)
  function init_simd (line 63) | LOCAL(void)
  type my_upsampler (line 95) | typedef struct {
  type my_upsampler (line 106) | typedef my_upsampler *my_upsample_ptr;
  function jsimd_can_rgb_ycc (line 108) | GLOBAL(int)
  function jsimd_can_rgb_gray (line 127) | GLOBAL(int)
  function jsimd_can_ycc_rgb (line 146) | GLOBAL(int)
  function jsimd_can_ycc_rgb565 (line 165) | GLOBAL(int)
  function jsimd_c_can_null_convert (line 171) | GLOBAL(int)
  function jsimd_rgb_ycc_convert (line 188) | GLOBAL(void)
  function jsimd_rgb_gray_convert (line 229) | GLOBAL(void)
  function jsimd_ycc_rgb_convert (line 269) | GLOBAL(void)
  function jsimd_ycc_rgb565_convert (line 309) | GLOBAL(void)
  function jsimd_c_null_convert (line 316) | GLOBAL(void)
  function jsimd_can_h2v2_downsample (line 327) | GLOBAL(int)
  function jsimd_can_h2v2_smooth_downsample (line 344) | GLOBAL(int)
  function jsimd_can_h2v1_downsample (line 363) | GLOBAL(int)
  function jsimd_h2v2_downsample (line 380) | GLOBAL(void)
  function jsimd_h2v2_smooth_downsample (line 392) | GLOBAL(void)
  function jsimd_h2v1_downsample (line 405) | GLOBAL(void)
  function jsimd_can_h2v2_upsample (line 417) | GLOBAL(int)
  function jsimd_can_h2v1_upsample (line 434) | GLOBAL(int)
  function jsimd_can_int_upsample (line 451) | GLOBAL(int)
  function jsimd_h2v2_upsample (line 468) | GLOBAL(void)
  function jsimd_h2v1_upsample (line 480) | GLOBAL(void)
  function jsimd_int_upsample (line 492) | GLOBAL(void)
  function jsimd_can_h2v2_fancy_upsample (line 505) | GLOBAL(int)
  function jsimd_can_h2v1_fancy_upsample (line 522) | GLOBAL(int)
  function jsimd_h2v2_fancy_upsample (line 539) | GLOBAL(void)
  function jsimd_h2v1_fancy_upsample (line 551) | GLOBAL(void)
  function jsimd_can_h2v2_merged_upsample (line 563) | GLOBAL(int)
  function jsimd_can_h2v1_merged_upsample (line 579) | GLOBAL(int)
  function jsimd_h2v2_merged_upsample (line 595) | GLOBAL(void)
  function jsimd_h2v1_merged_upsample (line 636) | GLOBAL(void)
  function jsimd_can_convsamp (line 677) | GLOBAL(int)
  function jsimd_can_convsamp_float (line 698) | GLOBAL(int)
  function jsimd_convsamp (line 721) | GLOBAL(void)
  function jsimd_convsamp_float (line 729) | GLOBAL(void)
  function jsimd_can_fdct_islow (line 737) | GLOBAL(int)
  function jsimd_can_fdct_ifast (line 754) | GLOBAL(int)
  function jsimd_can_fdct_float (line 771) | GLOBAL(int)
  function jsimd_fdct_islow (line 779) | GLOBAL(void)
  function jsimd_fdct_ifast (line 786) | GLOBAL(void)
  function jsimd_fdct_float (line 793) | GLOBAL(void)
  function jsimd_can_quantize (line 798) | GLOBAL(int)
  function jsimd_can_quantize_float (line 817) | GLOBAL(int)
  function jsimd_quantize (line 840) | GLOBAL(void)
  function jsimd_quantize_float (line 848) | GLOBAL(void)
  function jsimd_can_idct_2x2 (line 856) | GLOBAL(int)
  function jsimd_can_idct_4x4 (line 879) | GLOBAL(int)
  function jsimd_can_idct_6x6 (line 902) | GLOBAL(int)
  function jsimd_can_idct_12x12 (line 925) | GLOBAL(int)
  function jsimd_idct_2x2 (line 947) | GLOBAL(void)
  function jsimd_idct_4x4 (line 957) | GLOBAL(void)
  function jsimd_idct_6x6 (line 969) | GLOBAL(void)
  function jsimd_idct_12x12 (line 979) | GLOBAL(void)
  function jsimd_can_idct_islow (line 1006) | GLOBAL(int)
  function jsimd_can_idct_ifast (line 1029) | GLOBAL(int)
  function jsimd_can_idct_float (line 1054) | GLOBAL(int)
  function jsimd_idct_islow (line 1062) | GLOBAL(void)
  function jsimd_idct_ifast (line 1084) | GLOBAL(void)
  function jsimd_idct_float (line 1111) | GLOBAL(void)
  function jsimd_can_huff_encode_one_block (line 1118) | GLOBAL(int)
  function jsimd_huff_encode_one_block (line 1124) | GLOBAL(JOCTET*)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/simd/jsimd_powerpc.c
  function init_simd (line 27) | LOCAL(void)
  function jsimd_can_rgb_ycc (line 43) | GLOBAL(int)
  function jsimd_can_rgb_gray (line 62) | GLOBAL(int)
  function jsimd_can_ycc_rgb (line 81) | GLOBAL(int)
  function jsimd_can_ycc_rgb565 (line 100) | GLOBAL(int)
  function jsimd_rgb_ycc_convert (line 106) | GLOBAL(void)
  function jsimd_rgb_gray_convert (line 144) | GLOBAL(void)
  function jsimd_ycc_rgb_convert (line 182) | GLOBAL(void)
  function jsimd_ycc_rgb565_convert (line 220) | GLOBAL(void)
  function jsimd_can_h2v2_downsample (line 227) | GLOBAL(int)
  function jsimd_can_h2v1_downsample (line 244) | GLOBAL(int)
  function jsimd_h2v2_downsample (line 261) | GLOBAL(void)
  function jsimd_h2v1_downsample (line 271) | GLOBAL(void)
  function jsimd_can_h2v2_upsample (line 281) | GLOBAL(int)
  function jsimd_can_h2v1_upsample (line 298) | GLOBAL(int)
  function jsimd_h2v2_upsample (line 315) | GLOBAL(void)
  function jsimd_h2v1_upsample (line 325) | GLOBAL(void)
  function jsimd_can_h2v2_fancy_upsample (line 335) | GLOBAL(int)
  function jsimd_can_h2v1_fancy_upsample (line 352) | GLOBAL(int)
  function jsimd_h2v2_fancy_upsample (line 369) | GLOBAL(void)
  function jsimd_h2v1_fancy_upsample (line 380) | GLOBAL(void)
  function jsimd_can_h2v2_merged_upsample (line 391) | GLOBAL(int)
  function jsimd_can_h2v1_merged_upsample (line 408) | GLOBAL(int)
  function jsimd_h2v2_merged_upsample (line 425) | GLOBAL(void)
  function jsimd_h2v1_merged_upsample (line 464) | GLOBAL(void)
  function jsimd_can_convsamp (line 503) | GLOBAL(int)
  function jsimd_can_convsamp_float (line 524) | GLOBAL(int)
  function jsimd_convsamp (line 530) | GLOBAL(void)
  function jsimd_convsamp_float (line 537) | GLOBAL(void)
  function jsimd_can_fdct_islow (line 543) | GLOBAL(int)
  function jsimd_can_fdct_ifast (line 560) | GLOBAL(int)
  function jsimd_can_fdct_float (line 577) | GLOBAL(int)
  function jsimd_fdct_islow (line 583) | GLOBAL(void)
  function jsimd_fdct_ifast (line 589) | GLOBAL(void)
  function jsimd_fdct_float (line 595) | GLOBAL(void)
  function jsimd_can_quantize (line 600) | GLOBAL(int)
  function jsimd_can_quantize_float (line 619) | GLOBAL(int)
  function jsimd_quantize (line 625) | GLOBAL(void)
  function jsimd_quantize_float (line 632) | GLOBAL(void)
  function jsimd_can_idct_2x2 (line 638) | GLOBAL(int)
  function jsimd_can_idct_4x4 (line 644) | GLOBAL(int)
  function jsimd_idct_2x2 (line 650) | GLOBAL(void)
  function jsimd_idct_4x4 (line 657) | GLOBAL(void)
  function jsimd_can_idct_islow (line 664) | GLOBAL(int)
  function jsimd_can_idct_ifast (line 681) | GLOBAL(int)
  function jsimd_can_idct_float (line 698) | GLOBAL(int)
  function jsimd_idct_islow (line 704) | GLOBAL(void)
  function jsimd_idct_ifast (line 713) | GLOBAL(void)
  function jsimd_idct_float (line 722) | GLOBAL(void)
  function jsimd_can_huff_encode_one_block (line 729) | GLOBAL(int)
  function jsimd_huff_encode_one_block (line 735) | GLOBAL(JOCTET*)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/simd/jsimd_x86_64.c
  function init_simd (line 41) | LOCAL(void)
  function jsimd_can_rgb_ycc (line 60) | GLOBAL(int)
  function jsimd_can_rgb_gray (line 80) | GLOBAL(int)
  function jsimd_can_ycc_rgb (line 100) | GLOBAL(int)
  function jsimd_can_ycc_rgb565 (line 120) | GLOBAL(int)
  function jsimd_rgb_ycc_convert (line 126) | GLOBAL(void)
  function jsimd_rgb_gray_convert (line 164) | GLOBAL(void)
  function jsimd_ycc_rgb_convert (line 202) | GLOBAL(void)
  function jsimd_ycc_rgb565_convert (line 240) | GLOBAL(void)
  function jsimd_can_h2v2_downsample (line 247) | GLOBAL(int)
  function jsimd_can_h2v1_downsample (line 264) | GLOBAL(int)
  function jsimd_h2v2_downsample (line 281) | GLOBAL(void)
  function jsimd_h2v1_downsample (line 290) | GLOBAL(void)
  function jsimd_can_h2v2_upsample (line 299) | GLOBAL(int)
  function jsimd_can_h2v1_upsample (line 316) | GLOBAL(int)
  function jsimd_h2v2_upsample (line 333) | GLOBAL(void)
  function jsimd_h2v1_upsample (line 343) | GLOBAL(void)
  function jsimd_can_h2v2_fancy_upsample (line 353) | GLOBAL(int)
  function jsimd_can_h2v1_fancy_upsample (line 371) | GLOBAL(int)
  function jsimd_h2v2_fancy_upsample (line 389) | GLOBAL(void)
  function jsimd_h2v1_fancy_upsample (line 400) | GLOBAL(void)
  function jsimd_can_h2v2_merged_upsample (line 411) | GLOBAL(int)
  function jsimd_can_h2v1_merged_upsample (line 429) | GLOBAL(int)
  function jsimd_h2v2_merged_upsample (line 447) | GLOBAL(void)
  function jsimd_h2v1_merged_upsample (line 486) | GLOBAL(void)
  function jsimd_can_convsamp (line 525) | GLOBAL(int)
  function jsimd_can_convsamp_float (line 546) | GLOBAL(int)
  function jsimd_convsamp (line 567) | GLOBAL(void)
  function jsimd_convsamp_float (line 574) | GLOBAL(void)
  function jsimd_can_fdct_islow (line 581) | GLOBAL(int)
  function jsimd_can_fdct_ifast (line 598) | GLOBAL(int)
  function jsimd_can_fdct_float (line 615) | GLOBAL(int)
  function jsimd_fdct_islow (line 632) | GLOBAL(void)
  function jsimd_fdct_ifast (line 638) | GLOBAL(void)
  function jsimd_fdct_float (line 644) | GLOBAL(void)
  function jsimd_can_quantize (line 650) | GLOBAL(int)
  function jsimd_can_quantize_float (line 669) | GLOBAL(int)
  function jsimd_quantize (line 688) | GLOBAL(void)
  function jsimd_quantize_float (line 695) | GLOBAL(void)
  function jsimd_can_idct_2x2 (line 702) | GLOBAL(int)
  function jsimd_can_idct_4x4 (line 725) | GLOBAL(int)
  function jsimd_idct_2x2 (line 748) | GLOBAL(void)
  function jsimd_idct_4x4 (line 756) | GLOBAL(void)
  function jsimd_can_idct_islow (line 764) | GLOBAL(int)
  function jsimd_can_idct_ifast (line 787) | GLOBAL(int)
  function jsimd_can_idct_float (line 812) | GLOBAL(int)
  function jsimd_idct_islow (line 836) | GLOBAL(void)
  function jsimd_idct_ifast (line 845) | GLOBAL(void)
  function jsimd_idct_float (line 854) | GLOBAL(void)
  function jsimd_can_huff_encode_one_block (line 863) | GLOBAL(int)
  function jsimd_huff_encode_one_block (line 880) | GLOBAL(JOCTET*)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/tjbench.c
  function dummyDCTFilter (line 94) | int dummyDCTFilter(short *coeffs, tjregion arrayRegion, tjregion planeRe...
  function decomp (line 104) | int decomp(unsigned char *srcbuf, unsigned char **jpegbuf,
  function fullTest (line 279) | int fullTest(unsigned char *srcbuf, int w, int h, int subsamp, int jpegq...
  function decompTest (line 480) | int decompTest(char *filename)
  function usage (line 707) | void usage(char *progname)
  function main (line 771) | int main(int argc, char *argv[])

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/tjunittest.c
  function usage (line 45) | void usage(char *progName)
  function initBuf (line 88) | void initBuf(unsigned char *buf, int w, int h, int pf, int flags)
  function checkBuf (line 180) | int checkBuf(unsigned char *buf, int w, int h, int pf, int subsamp,
  function checkBufYUV (line 297) | int checkBufYUV(unsigned char *buf, int w, int h, int subsamp,
  function writeJPEG (line 381) | void writeJPEG(unsigned char *jpegBuf, unsigned long jpegSize, char *fil...
  function compTest (line 395) | void compTest(tjhandle handle, unsigned char **dstBuf,
  function _decompTest (line 454) | void _decompTest(tjhandle handle, unsigned char *jpegBuf,
  function decompTest (line 523) | void decompTest(tjhandle handle, unsigned char *jpegBuf,
  function doTest (line 547) | void doTest(int w, int h, const int *formats, int nformats, int subsamp,
  function bufSizeTest (line 596) | void bufSizeTest(void)
  function main (line 689) | int main(int argc, char *argv[])

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/tjutil.c
  function getfreq (line 33) | static double getfreq(void)
  function gettime (line 42) | double gettime(void)
  function gettime (line 59) | double gettime(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/transupp.c
  function do_crop (line 91) | LOCAL(void)
  function do_flip_h_no_crop (line 129) | LOCAL(void)
  function do_flip_h (line 196) | LOCAL(void)
  function do_flip_v (line 258) | LOCAL(void)
  function do_transpose (line 338) | LOCAL(void)
  function do_rot_90 (line 386) | LOCAL(void)
  function do_rot_270 (line 467) | LOCAL(void)
  function do_rot_180 (line 538) | LOCAL(void)
  function do_transverse (line 646) | LOCAL(void)
  function jt_read_integer (line 766) | LOCAL(boolean)
  function jtransform_parse_crop_spec (line 796) | GLOBAL(boolean)
  function trim_right_edge (line 850) | LOCAL(void)
  function trim_bottom_edge (line 861) | LOCAL(void)
  function jtransform_request_workspace (line 890) | GLOBAL(boolean)
  function transpose_critical_parameters (line 1132) | LOCAL(void)
  function adjust_exif_parameters (line 1181) | LOCAL(void)
  function jtransform_adjust_parameters (line 1344) | GLOBAL(jvirt_barray_ptr *)
  function jtransform_execute_transform (line 1451) | GLOBAL(void)
  function jtransform_perfect_transform (line 1524) | GLOBAL(boolean)
  function jcopy_markers_setup (line 1563) | GLOBAL(void)
  function jcopy_markers_execute (line 1588) | GLOBAL(void)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/transupp.h
  type JXFORM_CODE (line 87) | typedef enum {
  type JCROP_CODE (line 104) | typedef enum {
  type jpeg_transform_info (line 117) | typedef struct {
  type JCOPY_OPTION (line 193) | typedef enum {

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/turbojpeg-jni.c
  function ProcessSystemProperties (line 83) | int ProcessSystemProperties(JNIEnv *env)
  function JNICALL (line 104) | JNICALL Java_org_libjpegturbo_turbojpeg_TJ_bufSize
  function JNICALL (line 115) | JNICALL Java_org_libjpegturbo_turbojpeg_TJ_bufSizeYUV__IIII
  function JNICALL (line 126) | JNICALL Java_org_libjpegturbo_turbojpeg_TJ_bufSizeYUV__III
  function JNICALL (line 134) | JNICALL Java_org_libjpegturbo_turbojpeg_TJ_planeSizeYUV__IIIII
  function JNICALL (line 147) | JNICALL Java_org_libjpegturbo_turbojpeg_TJ_planeWidth__III
  function JNICALL (line 158) | JNICALL Java_org_libjpegturbo_turbojpeg_TJ_planeHeight__III
  function JNICALL (line 169) | JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_init
  function jint (line 187) | static jint TJCompressor_compress
  function JNICALL (line 230) | JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_compress___3BIIIIII...
  function JNICALL (line 240) | JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_compress___3BIIII_3...
  function JNICALL (line 250) | JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_compress___3IIIIIII...
  function JNICALL (line 268) | JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_compress___3IIIII_3...
  function JNICALL (line 286) | JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_compressFromYUV___3...
  function TJCompressor_encodeYUV (line 363) | static void TJCompressor_encodeYUV
  function JNICALL (line 441) | JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_encodeYUV___3BIIIII...
  function JNICALL (line 451) | JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_encodeYUV___3IIIIII...
  function JNICALL (line 469) | JNICALL TJCompressor_encodeYUV_12
  function JNICALL (line 506) | JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_encodeYUV___3BIIII_...
  function JNICALL (line 515) | JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_encodeYUV___3IIIII_...
  function JNICALL (line 532) | JNICALL Java_org_libjpegturbo_turbojpeg_TJCompressor_destroy
  function JNICALL (line 547) | JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_init
  function JNICALL (line 565) | JNICALL Java_org_libjpegturbo_turbojpeg_TJ_getScalingFactors
  function JNICALL (line 594) | JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompressHeader
  function TJDecompressor_decompress (line 630) | static void TJDecompressor_decompress
  function JNICALL (line 668) | JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress___3BI_...
  function JNICALL (line 677) | JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress___3BI_...
  function JNICALL (line 686) | JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress___3BI_...
  function JNICALL (line 703) | JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompress___3BI_...
  function JNICALL (line 721) | JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompressToYUV__...
  function JNICALL (line 810) | JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decompressToYUV__...
  function TJDecompressor_decodeYUV (line 845) | static void TJDecompressor_decodeYUV
  function JNICALL (line 925) | JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decodeYUV___3_3B_...
  function JNICALL (line 935) | JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_decodeYUV___3_3B_...
  function JNICALL (line 954) | JNICALL Java_org_libjpegturbo_turbojpeg_TJTransformer_init
  type JNICustomFilterParams (line 971) | typedef struct _JNICustomFilterParams
  function JNICustomFilter (line 978) | static int JNICustomFilter(short *coeffs, tjregion arrayRegion,
  function JNICALL (line 1036) | JNICALL Java_org_libjpegturbo_turbojpeg_TJTransformer_transform
  function JNICALL (line 1162) | JNICALL Java_org_libjpegturbo_turbojpeg_TJDecompressor_destroy

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/turbojpeg.c
  type my_error_mgr (line 58) | struct my_error_mgr
  type my_error_mgr (line 65) | struct my_error_mgr
  function my_error_exit (line 67) | static void my_error_exit(j_common_ptr cinfo)
  function my_output_message (line 76) | static void my_output_message(j_common_ptr cinfo)
  function my_emit_message (line 81) | static void my_emit_message(j_common_ptr cinfo, int msg_level)
  type tjinstance (line 93) | typedef struct _tjinstance
  function getPixelFormat (line 150) | static int getPixelFormat(int pixelSize, int flags)
  function setCompDefaults (line 174) | static int setCompDefaults(struct jpeg_compress_struct *cinfo,
  function setDecompDefaults (line 275) | static int setDecompDefaults(struct jpeg_decompress_struct *dinfo,
  function getSubsamp (line 333) | static int getSubsamp(j_decompress_ptr dinfo)
  function fromRGB (line 459) | static void fromRGB(unsigned char *src, unsigned char *dst, int width,
  function DLLEXPORT (line 522) | DLLEXPORT char* DLLCALL tjGetErrorStr(void)
  function DLLCALL (line 528) | DLLCALL tjDestroy(tjhandle handle)
  function DLLCALL (line 544) | DLLCALL tjFree(unsigned char *buf)
  function tjhandle (line 558) | static tjhandle _tjInitCompress(tjinstance *this)
  function DLLCALL (line 584) | DLLCALL tjInitCompress(void)
  function tjBufSize (line 598) | DLLEXPORT unsigned long DLLCALL tjBufSize(int width, int height,
  function TJBUFSIZE (line 617) | DLLEXPORT unsigned long DLLCALL TJBUFSIZE(int width, int height)
  function tjBufSizeYUV2 (line 633) | DLLEXPORT unsigned long DLLCALL tjBufSizeYUV2(int width, int pad, int he...
  function tjBufSizeYUV (line 655) | DLLEXPORT unsigned long DLLCALL tjBufSizeYUV(int width, int height,
  function TJBUFSIZEYUV (line 661) | DLLEXPORT unsigned long DLLCALL TJBUFSIZEYUV(int width, int height,
  function DLLEXPORT (line 668) | DLLEXPORT int tjPlaneWidth(int componentID, int width, int subsamp)
  function DLLEXPORT (line 689) | DLLEXPORT int tjPlaneHeight(int componentID, int height, int subsamp)
  function tjPlaneSizeYUV (line 710) | DLLEXPORT unsigned long DLLCALL tjPlaneSizeYUV(int componentID, int width,
  function DLLCALL (line 733) | DLLCALL tjCompress2(tjhandle handle, const unsigned char *srcBuf,
  function DLLCALL (line 811) | DLLCALL tjCompress(tjhandle handle, unsigned char *srcBuf,
  function DLLCALL (line 833) | DLLCALL tjEncodeYUVPlanes(tjhandle handle,
  function DLLCALL (line 996) | DLLCALL tjEncodeYUV3(tjhandle handle,
  function DLLCALL (line 1032) | DLLCALL tjEncodeYUV2(tjhandle handle, unsigned char *srcBuf,
  function DLLCALL (line 1040) | DLLCALL tjEncodeYUV(tjhandle handle, unsigned char *srcBuf,
  function DLLCALL (line 1049) | DLLCALL tjCompressFromYUVPlanes(tjhandle handle,
  function DLLCALL (line 1181) | DLLCALL tjCompressFromYUV(tjhandle handle,
  function tjhandle (line 1220) | static tjhandle _tjInitDecompress(tjinstance *this)
  function DLLCALL (line 1245) | DLLCALL tjInitDecompress(void)
  function DLLCALL (line 1259) | DLLCALL tjDecompressHeader3(tjhandle handle,
  function DLLCALL (line 1309) | DLLCALL tjDecompressHeader2(tjhandle handle,
  function DLLCALL (line 1318) | DLLCALL tjDecompressHeader(tjhandle handle,
  function DLLCALL (line 1341) | DLLCALL tjDecompress2(tjhandle handle,
  function DLLCALL (line 1443) | DLLCALL tjDecompress(tjhandle handle, unsigned char *jpegBuf,
  function setDecodeDefaults (line 1455) | static int setDecodeDefaults(struct jpeg_decompress_struct *dinfo,
  function my_read_markers (line 1499) | int my_read_markers(j_decompress_ptr dinfo)
  function my_reset_marker_reader (line 1504) | void my_reset_marker_reader(j_decompress_ptr dinfo)
  function DLLCALL (line 1508) | DLLCALL tjDecodeYUVPlanes(tjhandle handle,
  function DLLCALL (line 1671) | DLLCALL tjDecodeYUV(tjhandle handle, const unsigned char *srcBuf,
  function DLLCALL (line 1707) | DLLCALL tjDecompressToYUVPlanes(tjhandle handle,
  function DLLCALL (line 1881) | DLLCALL tjDecompressToYUV2(tjhandle handle,
  function DLLCALL (line 1948) | DLLCALL tjDecompressToYUV(tjhandle handle,
  function DLLCALL (line 1958) | DLLCALL tjInitTransform(void)
  function DLLCALL (line 1975) | DLLCALL tjTransform(tjhandle handle,

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/turbojpeg.h
  type TJSAMP (line 92) | enum TJSAMP
  type TJPF (line 166) | enum TJPF
  type TJCS (line 293) | enum TJCS
  type TJXOP (line 396) | enum TJXOP
  type tjscalingfactor (line 483) | typedef struct
  type tjregion (line 498) | typedef struct
  type tjtransform (line 525) | typedef struct tjtransform

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/wrbmp.c
  type bmp_dest_struct (line 49) | typedef struct {
  type bmp_dest_struct (line 61) | typedef bmp_dest_struct *bmp_dest_ptr;
  function INLINE (line 70) | static INLINE boolean is_big_endian(void)
  function put_pixel_rows (line 84) | METHODDEF(void)
  function put_gray_rows (line 138) | METHODDEF(void)
  function start_output_bmp (line 174) | METHODDEF(void)
  function write_bmp_header (line 189) | LOCAL(void)
  function write_os2_header (line 265) | LOCAL(void)
  function write_colormap (line 330) | LOCAL(void)
  function finish_output_bmp (line 382) | METHODDEF(void)
  function jinit_write_bmp (line 428) | GLOBAL(djpeg_dest_ptr)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/wrgif.c
  type gif_dest_struct (line 50) | typedef struct {
  type gif_dest_struct (line 72) | typedef gif_dest_struct *gif_dest_ptr;
  function flush_packet (line 83) | LOCAL(void)
  function output (line 107) | LOCAL(void)
  function compress_init (line 145) | LOCAL(void)
  function compress_pixel (line 164) | LOCAL(void)
  function compress_term (line 184) | LOCAL(void)
  function put_word (line 202) | LOCAL(void)
  function put_3bytes (line 211) | LOCAL(void)
  function emit_header (line 221) | LOCAL(void)
  function start_output_gif (line 304) | METHODDEF(void)
  function put_pixel_rows (line 321) | METHODDEF(void)
  function finish_output_gif (line 340) | METHODDEF(void)
  function jinit_write_gif (line 362) | GLOBAL(djpeg_dest_ptr)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/wrjpgcom.c
  function read_1_byte (line 85) | static int
  function read_2_bytes (line 98) | static unsigned int
  function write_1_byte (line 115) | static void
  function write_2_bytes (line 121) | static void
  function write_marker (line 128) | static void
  function copy_rest_of_file (line 135) | static void
  function next_marker (line 180) | static int
  function first_marker (line 215) | static int
  function copy_variable (line 237) | static void
  function skip_variable (line 257) | static void
  function scan_JPEG_header (line 282) | static int
  function usage (line 344) | static void
  function keymatch (line 377) | static int
  function main (line 406) | int

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/wrppm.c
  function put_pixel_rows (line 74) | METHODDEF(void)
  function copy_pixel_rows (line 89) | METHODDEF(void)
  function put_demapped_rgb (line 112) | METHODDEF(void)
  function put_demapped_gray (line 137) | METHODDEF(void)
  function start_output_ppm (line 160) | METHODDEF(void)
  function finish_output_ppm (line 189) | METHODDEF(void)
  function jinit_write_ppm (line 203) | GLOBAL(djpeg_dest_ptr)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/wrppm.h
  type ppm_dest_struct (line 14) | typedef struct {
  type ppm_dest_struct (line 24) | typedef ppm_dest_struct *ppm_dest_ptr;

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/wrrle.c
  type rle_dest_struct (line 56) | typedef struct {
  type rle_dest_struct (line 65) | typedef rle_dest_struct *rle_dest_ptr;
  function start_output_rle (line 79) | METHODDEF(void)
  function rle_put_pixel_rows (line 155) | METHODDEF(void)
  function finish_output_rle (line 174) | METHODDEF(void)
  function jinit_write_rle (line 278) | GLOBAL(djpeg_dest_ptr)

FILE: libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/wrtarga.c
  type tga_dest_struct (line 37) | typedef struct {
  type tga_dest_struct (line 44) | typedef tga_dest_struct *tga_dest_ptr;
  function write_header (line 47) | LOCAL(void)
  function put_pixel_rows (line 92) | METHODDEF(void)
  function put_gray_rows (line 113) | METHODDEF(void)
  function put_demapped_gray (line 137) | METHODDEF(void)
  function start_output_tga (line 160) | METHODDEF(void)
  function finish_output_tga (line 204) | METHODDEF(void)
  function jinit_write_targa (line 218) | GLOBAL(djpeg_dest_ptr)

FILE: libuvccamera/src/main/jni/libusb/examples/dpfp.c
  type libusb_device_handle (line 60) | struct libusb_device_handle
  type libusb_transfer (line 63) | struct libusb_transfer
  type libusb_transfer (line 64) | struct libusb_transfer
  function find_dpfp_device (line 68) | static int find_dpfp_device(void)
  function print_f0_data (line 74) | static int print_f0_data(void)
  function get_hwstat (line 98) | static int get_hwstat(unsigned char *status)
  function set_hwstat (line 116) | static int set_hwstat(unsigned char data)
  function set_mode (line 134) | static int set_mode(unsigned char data)
  function cb_mode_changed (line 152) | static void LIBUSB_CALL cb_mode_changed(struct libusb_transfer *transfer)
  function set_mode_async (line 165) | static int set_mode_async(unsigned char data)
  function do_sync_intr (line 190) | static int do_sync_intr(unsigned char *data)
  function sync_intr (line 210) | static int sync_intr(unsigned char type)
  function save_to_file (line 224) | static int save_to_file(unsigned char *data)
  function next_state (line 241) | static int next_state(void)
  function cb_irq (line 279) | static void LIBUSB_CALL cb_irq(struct libusb_transfer *transfer)
  function cb_img (line 318) | static void LIBUSB_CALL cb_img(struct libusb_transfer *transfer)
  function init_capture (line 338) | static int init_capture(void)
  function do_init (line 360) | static int do_init(void)
  function alloc_transfers (line 394) | static int alloc_transfers(void)
  function sighandler (line 412) | static void sighandler(int signum)
  function main (line 417) | int main(void)

FILE: libuvccamera/src/main/jni/libusb/examples/dpfp_threaded.c
  type libusb_device_handle (line 61) | struct libusb_device_handle
  type libusb_transfer (line 64) | struct libusb_transfer
  type libusb_transfer (line 65) | struct libusb_transfer
  function request_exit (line 73) | static void request_exit(int code)
  type timeval (line 85) | struct timeval
  function find_dpfp_device (line 97) | static int find_dpfp_device(void)
  function print_f0_data (line 103) | static int print_f0_data(void)
  function get_hwstat (line 127) | static int get_hwstat(unsigned char *status)
  function set_hwstat (line 145) | static int set_hwstat(unsigned char data)
  function set_mode (line 163) | static int set_mode(unsigned char data)
  function cb_mode_changed (line 181) | static void LIBUSB_CALL cb_mode_changed(struct libusb_transfer *transfer)
  function set_mode_async (line 194) | static int set_mode_async(unsigned char data)
  function do_sync_intr (line 219) | static int do_sync_intr(unsigned char *data)
  function sync_intr (line 239) | static int sync_intr(unsigned char type)
  function save_to_file (line 253) | static int save_to_file(unsigned char *data)
  function next_state (line 270) | static int next_state(void)
  function cb_irq (line 308) | static void LIBUSB_CALL cb_irq(struct libusb_transfer *transfer)
  function cb_img (line 346) | static void LIBUSB_CALL cb_img(struct libusb_transfer *transfer)
  function init_capture (line 365) | static int init_capture(void)
  function do_init (line 387) | static int do_init(void)
  function alloc_transfers (line 421) | static int alloc_transfers(void)
  function sighandler (line 439) | static void sighandler(int signum)
  function main (line 444) | int main(void)

FILE: libuvccamera/src/main/jni/libusb/examples/ezusb.c
  function fx_is_external (line 56) | static bool fx_is_external(uint32_t addr, size_t len)
  function fx2_is_external (line 75) | static bool fx2_is_external(uint32_t addr, size_t len)
  function fx2lp_is_external (line 94) | static bool fx2lp_is_external(uint32_t addr, size_t len)
  function ezusb_write (line 125) | static int ezusb_write(libusb_device_handle *device, const char *label,
  function ezusb_read (line 148) | static int ezusb_read(libusb_device_handle *device, const char *label,
  function ezusb_cpucs (line 172) | static bool ezusb_cpucs(libusb_device_handle *device, uint32_t addr, boo...
  function ezusb_fx3_jump (line 201) | static bool ezusb_fx3_jump(libusb_device_handle *device, uint32_t addr)
  function parse_ihex (line 242) | static int parse_ihex(FILE *image, void *context,
  function parse_bin (line 391) | static int parse_bin(FILE *image, void *context,
  function parse_iic (line 429) | static int parse_iic(FILE *image, void *context,
  type ram_mode (line 488) | typedef enum {
  type ram_poke_context (line 495) | struct ram_poke_context {
  function ram_poke (line 503) | static int ram_poke(void *context, uint32_t addr, bool external,
  function fx3_load_ram (line 564) | static int fx3_load_ram(libusb_device_handle *device, const char *path)
  function ezusb_load_ram (line 715) | int ezusb_load_ram(libusb_device_handle *device, const char *path, int f...

FILE: libuvccamera/src/main/jni/libusb/examples/ezusb.h
  type fx_known_device (line 66) | typedef struct {

FILE: libuvccamera/src/main/jni/libusb/examples/fxload.c
  function logerror (line 53) | void logerror(const char *format, ...)
  function print_usage (line 67) | static int print_usage(int error_code) {
  function main (line 81) | int main(int argc, char*argv[])

FILE: libuvccamera/src/main/jni/libusb/examples/getopt/getopt.c
  function exchange (line 303) | static void
  function _getopt_internal (line 510) | int
  function getopt (line 976) | int
  function main (line 995) | int

FILE: libuvccamera/src/main/jni/libusb/examples/getopt/getopt.h
  type option (line 94) | struct option
  type option (line 152) | struct option
  type option (line 155) | struct option
  type option (line 160) | struct option

FILE: libuvccamera/src/main/jni/libusb/examples/getopt/getopt1.c
  function getopt_long (line 66) | int
  function getopt_long_only (line 82) | int
  function main (line 100) | int

FILE: libuvccamera/src/main/jni/libusb/examples/hotplugtest.c
  function hotplug_callback (line 29) | static int LIBUSB_CALL hotplug_callback(libusb_context *ctx, libusb_devi...
  function hotplug_callback_detach (line 48) | static int LIBUSB_CALL hotplug_callback_detach(libusb_context *ctx, libu...
  function main (line 58) | int main(int argc, char *argv[])

FILE: libuvccamera/src/main/jni/libusb/examples/listdevs.c
  function print_devs (line 24) | static void print_devs(libusb_device **devs)
  function main (line 52) | int main(void)

FILE: libuvccamera/src/main/jni/libusb/examples/sam3u_benchmark.c
  type libusb_device_handle (line 38) | struct libusb_device_handle
  type timeval (line 41) | struct timeval
  function cb_xfr (line 43) | static void LIBUSB_CALL cb_xfr(struct libusb_transfer *xfr)
  function benchmark_in (line 85) | static int benchmark_in(uint8_t ep)
  function measure (line 125) | static void measure(void)
  function sig_hdlr (line 139) | static void sig_hdlr(int signum)
  function main (line 149) | int main(int argc, char **argv)

FILE: libuvccamera/src/main/jni/libusb/examples/xusb.c
  function perr (line 56) | static int perr(char const *format, ...)
  type command_block_wrapper (line 94) | struct command_block_wrapper {
  type command_status_wrapper (line 105) | struct command_status_wrapper {
  type test_type (line 132) | enum test_type {
  function display_buffer_hex (line 141) | static void display_buffer_hex(unsigned char *buffer, unsigned size)
  function display_ps3_status (line 181) | static int display_ps3_status(libusb_device_handle *handle)
  function display_xbox_status (line 272) | static int display_xbox_status(libusb_device_handle *handle)
  function set_xbox_actuators (line 293) | static int set_xbox_actuators(libusb_device_handle *handle, uint8_t left...
  function send_mass_storage_command (line 310) | static int send_mass_storage_command(libusb_device_handle *handle, uint8...
  function get_mass_storage_status (line 366) | static int get_mass_storage_status(libusb_device_handle *handle, uint8_t...
  function get_sense (line 413) | static void get_sense(libusb_device_handle *handle, uint8_t endpoint_in,...
  function test_mass_storage (line 449) | static int test_mass_storage(libusb_device_handle *handle, uint8_t endpo...
  function get_hid_record_size (line 548) | static int get_hid_record_size(uint8_t *hid_report_descriptor, int size,...
  function test_hid (line 602) | static int test_hid(libusb_device_handle *handle, uint8_t endpoint_in)
  function read_ms_winsub_feature_descriptors (line 699) | static void read_ms_winsub_feature_descriptors(libusb_device_handle *han...
  function print_device_cap (line 751) | static void print_device_cap(struct libusb_bos_dev_capability_descriptor...
  function test_device (line 790) | static int test_device(uint16_t vid, uint16_t pid)
  function main (line 966) | int main(int argc, char** argv)

FILE: libuvccamera/src/main/jni/libusb/libusb/core.c
  type usbi_os_backend (line 68) | struct usbi_os_backend
  type usbi_os_backend (line 70) | struct usbi_os_backend
  type usbi_os_backend (line 72) | struct usbi_os_backend
  type usbi_os_backend (line 74) | struct usbi_os_backend
  type usbi_os_backend (line 76) | struct usbi_os_backend
  type usbi_os_backend (line 78) | struct usbi_os_backend
  type usbi_os_backend (line 80) | struct usbi_os_backend
  type libusb_context (line 85) | struct libusb_context
  type libusb_version (line 86) | struct libusb_version
  type timeval (line 91) | struct timeval
  type list_head (line 94) | struct list_head
  type libusb_context (line 97) | struct libusb_context
  type libusb_device (line 97) | struct libusb_device
  type discovered_devs (line 480) | struct discovered_devs
  type discovered_devs (line 482) | struct discovered_devs
  type discovered_devs (line 494) | struct discovered_devs
  type discovered_devs (line 495) | struct discovered_devs
  type libusb_device (line 495) | struct libusb_device
  function discovered_devs_free (line 521) | static void discovered_devs_free(struct discovered_devs *discdevs) {
  type libusb_device (line 533) | struct libusb_device
  type libusb_context (line 533) | struct libusb_context
  type libusb_device (line 537) | struct libusb_device
  function usbi_connect_device (line 561) | void usbi_connect_device(struct libusb_device *dev) {
  function usbi_disconnect_device (line 589) | void usbi_disconnect_device(struct libusb_device *dev) {
  function usbi_sanitize_device (line 626) | int usbi_sanitize_device(struct libusb_device *dev) {
  type libusb_device (line 649) | struct libusb_device
  type libusb_context (line 649) | struct libusb_context
  type libusb_device (line 652) | struct libusb_device
  type libusb_device (line 653) | struct libusb_device
  function libusb_get_device_list (line 688) | ssize_t API_EXPORTED libusb_get_device_list(libusb_context *ctx,
  function libusb_device (line 764) | libusb_device *libusb_find_device(libusb_context *ctx, const int vid,
  function libusb_free_device_list (line 809) | void API_EXPORTED libusb_free_device_list(libusb_device **list,
  function libusb_get_bus_number (line 830) | uint8_t API_EXPORTED libusb_get_bus_number(libusb_device *dev) {
  function libusb_get_port_number (line 849) | uint8_t API_EXPORTED libusb_get_port_number(libusb_device *dev) {
  function libusb_get_port_numbers (line 865) | int API_EXPORTED libusb_get_port_numbers(libusb_device *dev,
  function libusb_get_port_path (line 891) | int API_EXPORTED libusb_get_port_path(libusb_context *ctx, libusb_device...
  function libusb_get_device_address (line 921) | uint8_t API_EXPORTED libusb_get_device_address(libusb_device *dev) {
  function libusb_get_device_speed (line 932) | int API_EXPORTED libusb_get_device_speed(libusb_device *dev) {
  type libusb_endpoint_descriptor (line 937) | struct libusb_endpoint_descriptor
  type libusb_config_descriptor (line 938) | struct libusb_config_descriptor
  type libusb_interface (line 942) | struct libusb_interface
  type libusb_interface_descriptor (line 947) | struct libusb_interface_descriptor
  type libusb_endpoint_descriptor (line 952) | struct libusb_endpoint_descriptor
  function libusb_get_max_packet_size (line 978) | int API_EXPORTED libusb_get_max_packet_size(libusb_device *dev,
  function libusb_get_max_iso_packet_size (line 1031) | int API_EXPORTED libusb_get_max_iso_packet_size(libusb_device *dev,
  function libusb_unref_device (line 1089) | void API_EXPORTED libusb_unref_device(libusb_device *dev) {
  function usbi_fd_notification (line 1125) | void usbi_fd_notification(struct libusb_context *ctx) {
  function libusb_open (line 1190) | int API_EXPORTED libusb_open(libusb_device *dev, libusb_device_handle **...
  function libusb_set_device_fd (line 1244) | int API_EXPORTED libusb_set_device_fd(libusb_device *dev, int fd) {
  type libusb_device (line 1254) | struct libusb_device
  type libusb_device (line 1285) | struct libusb_device
  type libusb_device (line 1286) | struct libusb_device
  type libusb_device (line 1287) | struct libusb_device
  type libusb_device_handle (line 1288) | struct libusb_device_handle
  type libusb_device_descriptor (line 1296) | struct libusb_device_descriptor
  function do_close (line 1317) | static void do_close(struct libusb_context *ctx,
  function libusb_close (line 1396) | void API_EXPORTED libusb_close(libusb_device_handle *dev_handle) {
  function libusb_get_configuration (line 1491) | int API_EXPORTED libusb_get_configuration(libusb_device_handle *dev,
  function libusb_set_configuration (line 1567) | int API_EXPORTED libusb_set_configuration(libusb_device_handle *dev,
  function libusb_claim_interface (line 1602) | int API_EXPORTED libusb_claim_interface(libusb_device_handle *dev,
  function libusb_release_interface (line 1663) | int API_EXPORTED libusb_release_interface(libusb_device_handle *dev,
  function libusb_set_interface_alt_setting (line 1714) | int API_EXPORTED libusb_set_interface_alt_setting(libusb_device_handle *...
  function libusb_clear_halt (line 1755) | int API_EXPORTED libusb_clear_halt(libusb_device_handle *dev,
  function libusb_reset_device (line 1784) | int API_EXPORTED libusb_reset_device(libusb_device_handle *dev) {
  function libusb_alloc_streams (line 1814) | int API_EXPORTED libusb_alloc_streams(libusb_device_handle *dev,
  function libusb_free_streams (line 1841) | int API_EXPORTED libusb_free_streams(libusb_device_handle *dev,
  function libusb_kernel_driver_active (line 1877) | int API_EXPORTED libusb_kernel_driver_active(libusb_device_handle *dev,
  function libusb_detach_kernel_driver (line 1917) | int API_EXPORTED libusb_detach_kernel_driver(libusb_device_handle *dev,
  function libusb_attach_kernel_driver (line 1951) | int API_EXPORTED libusb_attach_kernel_driver(libusb_device_handle *dev,
  function libusb_set_auto_detach_kernel_driver (line 1992) | int API_EXPORTED libusb_set_auto_detach_kernel_driver(libusb_device_hand...
  function libusb_set_debug (line 2032) | void API_EXPORTED libusb_set_debug(libusb_context *ctx, int level) {
  function libusb_init2 (line 2039) | int API_EXPORTED libusb_init2(libusb_context **context, const char *usbf...
  function libusb_init (line 2189) | int API_EXPORTED libusb_init(libusb_context **context) {
  function libusb_exit (line 2311) | void API_EXPORTED libusb_exit(struct libusb_context *ctx) {
  function libusb_has_capability (line 2390) | int API_EXPORTED libusb_has_capability(uint32_t capability) {
  function usbi_gettimeofday (line 2432) | int usbi_gettimeofday(struct timeval *tp, void *tzp)
  function usbi_log_str (line 2457) | static void usbi_log_str(struct libusb_context *ctx,
  function usbi_log_v (line 2496) | void usbi_log_v(struct libusb_context *ctx, enum libusb_log_level level,
  function usbi_log (line 2604) | void usbi_log(struct libusb_context *ctx, enum libusb_log_level level,
  function DEFAULT_VISIBILITY (line 2624) | DEFAULT_VISIBILITY const char * LIBUSB_CALL libusb_error_name(int error_...

FILE: libuvccamera/src/main/jni/libusb/libusb/core_original.c
  type usbi_os_backend (line 48) | struct usbi_os_backend
  type usbi_os_backend (line 50) | struct usbi_os_backend
  type usbi_os_backend (line 52) | struct usbi_os_backend
  type usbi_os_backend (line 54) | struct usbi_os_backend
  type usbi_os_backend (line 56) | struct usbi_os_backend
  type usbi_os_backend (line 58) | struct usbi_os_backend
  type libusb_context (line 63) | struct libusb_context
  type libusb_version (line 64) | struct libusb_version
  type timeval (line 69) | struct timeval
  type list_head (line 72) | struct list_head
  type discovered_devs (line 453) | struct discovered_devs
  type discovered_devs (line 455) | struct discovered_devs
  type discovered_devs (line 467) | struct discovered_devs
  type discovered_devs (line 468) | struct discovered_devs
  type libusb_device (line 468) | struct libusb_device
  function discovered_devs_free (line 494) | static void discovered_devs_free(struct discovered_devs *discdevs)
  type libusb_device (line 506) | struct libusb_device
  type libusb_context (line 506) | struct libusb_context
  type libusb_device (line 510) | struct libusb_device
  function usbi_connect_device (line 534) | void usbi_connect_device(struct libusb_device *dev)
  function usbi_disconnect_device (line 559) | void usbi_disconnect_device(struct libusb_device *dev)
  function usbi_sanitize_device (line 591) | int usbi_sanitize_device(struct libusb_device *dev)
  type libusb_device (line 614) | struct libusb_device
  type libusb_context (line 614) | struct libusb_context
  type libusb_device (line 617) | struct libusb_device
  type libusb_device (line 618) | struct libusb_device
  function libusb_get_device_list (line 651) | ssize_t API_EXPORTED libusb_get_device_list(libusb_context *ctx,
  function libusb_free_device_list (line 718) | void API_EXPORTED libusb_free_device_list(libusb_device **list,
  function libusb_get_bus_number (line 739) | uint8_t API_EXPORTED libusb_get_bus_number(libusb_device *dev)
  function libusb_get_port_number (line 758) | uint8_t API_EXPORTED libusb_get_port_number(libusb_device *dev)
  function libusb_get_port_numbers (line 774) | int API_EXPORTED libusb_get_port_numbers(libusb_device *dev,
  function libusb_get_port_path (line 800) | int API_EXPORTED libusb_get_port_path(libusb_context *ctx, libusb_device...
  function libusb_get_device_address (line 830) | uint8_t API_EXPORTED libusb_get_device_address(libusb_device *dev)
  function libusb_get_device_speed (line 841) | int API_EXPORTED libusb_get_device_speed(libusb_device *dev)
  type libusb_endpoint_descriptor (line 846) | struct libusb_endpoint_descriptor
  type libusb_config_descriptor (line 847) | struct libusb_config_descriptor
  type libusb_interface (line 851) | struct libusb_interface
  type libusb_interface_descriptor (line 856) | struct libusb_interface_descriptor
  type libusb_endpoint_descriptor (line 861) | struct libusb_endpoint_descriptor
  function libusb_get_max_packet_size (line 887) | int API_EXPORTED libusb_get_max_packet_size(libusb_device *dev,
  function libusb_get_max_iso_packet_size (line 936) | int API_EXPORTED libusb_get_max_iso_packet_size(libusb_device *dev,
  function libusb_unref_device (line 986) | void API_EXPORTED libusb_unref_device(libusb_device *dev)
  function usbi_fd_notification (line 1019) | void usbi_fd_notification(struct libusb_context *ctx)
  function libusb_open (line 1078) | int API_EXPORTED libusb_open(libusb_device *dev,
  type libusb_device (line 1151) | struct libusb_device
  type libusb_device (line 1152) | struct libusb_device
  type libusb_device (line 1153) | struct libusb_device
  type libusb_device_handle (line 1154) | struct libusb_device_handle
  type libusb_device_descriptor (line 1162) | struct libusb_device_descriptor
  function do_close (line 1183) | static void do_close(struct libusb_context *ctx,
  function libusb_close (line 1252) | void API_EXPORTED libusb_close(libusb_device_handle *dev_handle)
  function libusb_get_configuration (line 1339) | int API_EXPORTED libusb_get_configuration(libusb_device_handle *dev,
  function libusb_set_configuration (line 1416) | int API_EXPORTED libusb_set_configuration(libusb_device_handle *dev,
  function libusb_claim_interface (line 1451) | int API_EXPORTED libusb_claim_interface(libusb_device_handle *dev,
  function libusb_release_interface
Copy disabled (too large) Download .json
Condensed preview — 1018 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (13,258K chars).
[
  {
    "path": ".gitignore",
    "chars": 971,
    "preview": "# built application files\n*.apk\n*.ap_\n\n# files for the dex VM\n*.dex\n\n# Java class files\n*.class\n\n# Mobile Tools for Java"
  },
  {
    "path": ".idea/encodings.xml",
    "chars": 159,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"Encoding\">\n    <file url=\"PROJECT\" chars"
  },
  {
    "path": ".idea/gradle.xml",
    "chars": 1324,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"GradleSettings\">\n    <option name=\"linke"
  },
  {
    "path": ".idea/inspectionProfiles/Project_Default.xml",
    "chars": 8373,
    "preview": "<component name=\"InspectionProjectProfileManager\">\n  <profile version=\"1.0\">\n    <option name=\"myName\" value=\"Project De"
  },
  {
    "path": ".idea/vcs.xml",
    "chars": 167,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"VcsDirectoryMappings\">\n    <mapping dire"
  },
  {
    "path": "README.md",
    "chars": 8253,
    "preview": "UVCCamera\n=========\n\nlibrary and sample to access to UVC web camera on non-rooted Android device\n\nCopyright (c) 2014-201"
  },
  {
    "path": "build.gradle",
    "chars": 885,
    "preview": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\nbuildscript {\n    re"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "chars": 230,
    "preview": "#Tue Oct 02 16:16:11 JST 2018\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_"
  },
  {
    "path": "gradle.properties",
    "chars": 851,
    "preview": "# Project-wide Gradle settings.\n\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will o"
  },
  {
    "path": "gradlew",
    "chars": 5080,
    "preview": "#!/usr/bin/env bash\n\n##############################################################################\n##\n##  Gradle start "
  },
  {
    "path": "gradlew.bat",
    "chars": 2404,
    "preview": "@if \"%DEBUG%\" == \"\" @echo off\r\n@rem ##########################################################################\r\n@rem\r\n@r"
  },
  {
    "path": "libuvccamera/build.gradle",
    "chars": 2866,
    "preview": "apply plugin: 'com.android.library'\n/*\n *  UVCCamera\n *  library and sample to access to UVC web camera on non-rooted An"
  },
  {
    "path": "libuvccamera/src/main/AndroidManifest.xml",
    "chars": 1230,
    "preview": "<!--\n  ~  UVCCamera\n  ~  library and sample to access to UVC web camera on non-rooted Android device\n  ~\n  ~ Copyright ("
  },
  {
    "path": "libuvccamera/src/main/java/com/serenegiant/common/BaseActivity.java",
    "chars": 9611,
    "preview": "/*\n *  UVCCamera\n *  library and sample to access to UVC web camera on non-rooted Android device\n *\n * Copyright (c) 201"
  },
  {
    "path": "libuvccamera/src/main/java/com/serenegiant/common/BaseFragment.java",
    "chars": 9973,
    "preview": "/*\n *  UVCCamera\n *  library and sample to access to UVC web camera on non-rooted Android device\n *\n * Copyright (c) 201"
  },
  {
    "path": "libuvccamera/src/main/java/com/serenegiant/common/BaseService.java",
    "chars": 3648,
    "preview": "/*\n *  UVCCamera\n *  library and sample to access to UVC web camera on non-rooted Android device\n *\n * Copyright (c) 201"
  },
  {
    "path": "libuvccamera/src/main/java/com/serenegiant/usb/CameraDialog.java",
    "chars": 7347,
    "preview": "/*\n *  UVCCamera\n *  library and sample to access to UVC web camera on non-rooted Android device\n *\n * Copyright (c) 201"
  },
  {
    "path": "libuvccamera/src/main/java/com/serenegiant/usb/DeviceFilter.java",
    "chars": 18824,
    "preview": "/*\n *  UVCCamera\n *  library and sample to access to UVC web camera on non-rooted Android device\n *\n * Copyright (c) 201"
  },
  {
    "path": "libuvccamera/src/main/java/com/serenegiant/usb/IButtonCallback.java",
    "chars": 109,
    "preview": "package com.serenegiant.usb;\n\npublic interface IButtonCallback {\n    void onButton(int button, int state);\n}\n"
  },
  {
    "path": "libuvccamera/src/main/java/com/serenegiant/usb/IFrameCallback.java",
    "chars": 2121,
    "preview": "/*\n *  UVCCamera\n *  library and sample to access to UVC web camera on non-rooted Android device\n *\n * Copyright (c) 201"
  },
  {
    "path": "libuvccamera/src/main/java/com/serenegiant/usb/IStatusCallback.java",
    "chars": 195,
    "preview": "package com.serenegiant.usb;\n\nimport java.nio.ByteBuffer;\n\npublic interface IStatusCallback {\n    void onStatus(int stat"
  },
  {
    "path": "libuvccamera/src/main/java/com/serenegiant/usb/Size.java",
    "chars": 7987,
    "preview": "/*\n *  UVCCamera\n *  library and sample to access to UVC web camera on non-rooted Android device\n *\n * Copyright (c) 201"
  },
  {
    "path": "libuvccamera/src/main/java/com/serenegiant/usb/USBMonitor.java",
    "chars": 43208,
    "preview": "/*\n *  UVCCamera\n *  library and sample to access to UVC web camera on non-rooted Android device\n *\n * Copyright (c) 201"
  },
  {
    "path": "libuvccamera/src/main/java/com/serenegiant/usb/USBVendorId.java",
    "chars": 39851,
    "preview": "/*\n *  UVCCamera\n *  library and sample to access to UVC web camera on non-rooted Android device\n *\n * Copyright (c) 201"
  },
  {
    "path": "libuvccamera/src/main/java/com/serenegiant/usb/UVCCamera.java",
    "chars": 46538,
    "preview": "/*\n *  UVCCamera\n *  library and sample to access to UVC web camera on non-rooted Android device\n *\n * Copyright (c) 201"
  },
  {
    "path": "libuvccamera/src/main/jni/Android.mk",
    "chars": 283,
    "preview": "#include $(call all-subdir-makefiles)\nPROJ_PATH\t:= $(call my-dir)\ninclude $(CLEAR_VARS)\ninclude $(PROJ_PATH)/UVCCamera/A"
  },
  {
    "path": "libuvccamera/src/main/jni/Application.mk",
    "chars": 1297,
    "preview": "#/*\n# * UVCCamera\n# * library and sample to access to UVC web camera on non-rooted Android device\n# * \n# * Copyright (c)"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/Android.mk",
    "chars": 2128,
    "preview": "#/*\n# * UVCCamera\n# * library and sample to access to UVC web camera on non-rooted Android device\n# * \n# * Copyright (c)"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/Parameters.cpp",
    "chars": 12910,
    "preview": "/*\n * UVCCamera\n * library and sample to access to UVC web camera on non-rooted Android device\n *\n * Copyright (c) 2014-"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/Parameters.h",
    "chars": 1324,
    "preview": "/*\n * UVCCamera\n * library and sample to access to UVC web camera on non-rooted Android device\n *\n * Copyright (c) 2015-"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/UVCButtonCallback.cpp",
    "chars": 2192,
    "preview": "#include <stdlib.h>\n#include <linux/time.h>\n#include <unistd.h>\n#include \"utilbase.h\"\n#include \"UVCButtonCallback.h\"\n#in"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/UVCButtonCallback.h",
    "chars": 781,
    "preview": "#ifndef UVCBUTTONCALLBACK_H_\n#define UVCBUTTONCALLBACK_H_\n\n#include \"libUVCCamera.h\"\n#include <pthread.h>\n#include <andr"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/UVCCamera.cpp",
    "chars": 61765,
    "preview": "/*\n * UVCCamera\n * library and sample to access to UVC web camera on non-rooted Android device\n *\n * Copyright (c) 2014-"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/UVCCamera.h",
    "chars": 13630,
    "preview": "/*\n * UVCCamera\n * library and sample to access to UVC web camera on non-rooted Android device\n *\n * Copyright (c) 2014-"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/UVCPreview.cpp",
    "chars": 23720,
    "preview": "/*\n * UVCCamera\n * library and sample to access to UVC web camera on non-rooted Android device\n *\n * Copyright (c) 2014-"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/UVCPreview.h",
    "chars": 4140,
    "preview": "/*\n * UVCCamera\n * library and sample to access to UVC web camera on non-rooted Android device\n *\n * Copyright (c) 2014-"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/UVCStatusCallback.cpp",
    "chars": 2604,
    "preview": "#include <stdlib.h>\n#include <linux/time.h>\n#include <unistd.h>\n#include \"utilbase.h\"\n#include \"UVCStatusCallback.h\"\n#in"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/UVCStatusCallback.h",
    "chars": 983,
    "preview": "#ifndef UVCSTATUSCALLBACK_H_\n#define UVCSTATUSCALLBACK_H_\n\n#include \"libUVCCamera.h\"\n#include <pthread.h>\n#include <andr"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/_onload.cpp",
    "chars": 1477,
    "preview": "/*\n * UVCCamera\n * library and sample to access to UVC web camera on non-rooted Android device\n *\n * Copyright (c) 2014-"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/_onload.h",
    "chars": 1164,
    "preview": "/*\n * UVCCamera\n * library and sample to access to UVC web camera on non-rooted Android device\n *\n * Copyright (c) 2014-"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/libUVCCamera.h",
    "chars": 1115,
    "preview": "/*\n * UVCCamera\n * library and sample to access to UVC web camera on non-rooted Android device\n *\n * Copyright (c) 2014-"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/objectarray.h",
    "chars": 3358,
    "preview": "/*\n * UVCCamera\n * library and sample to access to UVC web camera on non-rooted Android device\n *\n * Copyright (c) 2014-"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/pipeline/AbstractBufferedPipeline.cpp",
    "chars": 7957,
    "preview": "//\n// Created by saki on 15/11/05.\n//\n\n#if 1\t// set 1 if you don't need debug message\n\t#ifndef LOG_NDEBUG\n\t\t#define\tLOG_"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/pipeline/AbstractBufferedPipeline.h",
    "chars": 1882,
    "preview": "//\n// Created by saki on 15/11/05.\n//\n\n#ifndef PUPILMOBILE_ABSTRACTBUFFEREDPIPELINE_H\n#define PUPILMOBILE_ABSTRACTBUFFER"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/pipeline/CallbackPipeline.cpp",
    "chars": 7528,
    "preview": "//\n// Created by saki on 15/11/07.\n//\n\n#if 1\t// set 1 if you don't need debug message\n\t#ifndef LOG_NDEBUG\n\t\t#define\tLOG_"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/pipeline/CallbackPipeline.h",
    "chars": 762,
    "preview": "//\n// Created by saki on 15/11/07.\n//\n\n#ifndef PUPILMOBILE_CALLBACKPIPELINE_H\n#define PUPILMOBILE_CALLBACKPIPELINE_H\n\n#i"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/pipeline/CaptureBasePipeline.cpp",
    "chars": 4189,
    "preview": "//\n// Created by saki on 15/11/07.\n//\n\n#if 1\t// set 1 if you don't need debug message\n\t#ifndef LOG_NDEBUG\n\t\t#define\tLOG_"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/pipeline/CaptureBasePipeline.h",
    "chars": 1274,
    "preview": "//\n// Created by saki on 15/11/07.\n//\n\n#ifndef PUPILMOBILE_CAPTUREBASEPIPELINE_H\n#define PUPILMOBILE_CAPTUREBASEPIPELINE"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/pipeline/ConvertPipeline.cpp",
    "chars": 5038,
    "preview": "//\n// Created by saki on 15/11/05.\n//\n\n#if 1\t// set 1 if you don't need debug message\n\t#ifndef LOG_NDEBUG\n\t\t#define\tLOG_"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/pipeline/ConvertPipeline.h",
    "chars": 626,
    "preview": "//\n// Created by saki on 15/11/05.\n//\n\n#ifndef PUPILMOBILE_CONVERTPIPELINE_H\n#define PUPILMOBILE_CONVERTPIPELINE_H\n\n#inc"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/pipeline/DistributePipeline.cpp",
    "chars": 5239,
    "preview": "//\n// Created by saki on 15/11/25.\n//\n\n#include \"utilbase.h\"\n#include \"common_utils.h\"\n#include \"libUVCCamera.h\"\n\n#inclu"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/pipeline/DistributePipeline.h",
    "chars": 819,
    "preview": "//\n// Created by saki on 15/11/25.\n//\n\n#ifndef PUPILMOBILE_DISTRIBUTEPIPELINE_H\n#define PUPILMOBILE_DISTRIBUTEPIPELINE_H"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/pipeline/IPipeline.cpp",
    "chars": 1517,
    "preview": "//\n// Created by saki on 15/11/05.\n//\n\n#if 1\t// set 1 if you don't need debug message\n\t#ifndef LOG_NDEBUG\n\t\t#define\tLOG_"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/pipeline/IPipeline.h",
    "chars": 1866,
    "preview": "//\n// Created by saki on 15/11/05.\n//\n\n#ifndef PUPILMOBILE_IPIPELINE_H\n#define PUPILMOBILE_IPIPELINE_H\n\n#include <stdlib"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/pipeline/PreviewPipeline.cpp",
    "chars": 9247,
    "preview": "//\n// Created by saki on 15/11/06.\n//\n\n#if 1\t// set 1 if you don't need debug message\n\t#ifndef LOG_NDEBUG\n\t\t#define\tLOG_"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/pipeline/PreviewPipeline.h",
    "chars": 564,
    "preview": "//\n// Created by saki on 15/11/06.\n//\n\n#ifndef PUPILMOBILE_PREVIEWPIPELINE_H\n#define PUPILMOBILE_PREVIEWPIPELINE_H\n\n#inc"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/pipeline/PublisherPipeline.cpp",
    "chars": 9924,
    "preview": "//\n// Created by saki on 15/10/06.\n//\n\n#define MEAS_TIME 0\n\n#if 1\t// set 1 if you don't need debug message\n\t#ifndef LOG_"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/pipeline/PublisherPipeline.h",
    "chars": 989,
    "preview": "//\n// Created by saki on 15/10/06.\n//\n\n#ifndef PUPILMOBILE_PUBLISHER_PIPELINE_H\n#define PUPILMOBILE_PUBLISHER_PIPELINE_H"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/pipeline/SQLiteBufferedPipeline.cpp",
    "chars": 13228,
    "preview": "//\n// Created by saki on 15/11/09.\n//\n\n#if 1\t// set 1 if you don't need debug message\n\t#ifndef LOG_NDEBUG\n\t\t#define\tLOG_"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/pipeline/SQLiteBufferedPipeline.h",
    "chars": 1464,
    "preview": "//\n// Created by saki on 15/11/09.\n//\n\n#ifndef PUPILMOBILE_SQLITEBUFFEREDPIPELINE_H\n#define PUPILMOBILE_SQLITEBUFFEREDPI"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/pipeline/SimpleBufferedPipeline.cpp",
    "chars": 3653,
    "preview": "//\n// Created by saki on 15/11/23.\n//\n\n#include \"utilbase.h\"\n#include \"common_utils.h\"\n\n#include \"libUVCCamera.h\"\n#inclu"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/pipeline/SimpleBufferedPipeline.h",
    "chars": 684,
    "preview": "//\n// Created by saki on 15/11/23.\n//\n\n#ifndef PUPILMOBILE_SIMPLEBUFFEREDPIPELINE_H\n#define PUPILMOBILE_SIMPLEBUFFEREDPI"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/pipeline/pipeline_helper.cpp",
    "chars": 1600,
    "preview": "//\n// Created by saki on 15/11/12.\n//\n\n#include \"utilbase.h\"\n#include \"Timers.h\"\n#include \"SimpleBufferedPipeline.h\"\n#in"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/pipeline/pipeline_helper.h",
    "chars": 272,
    "preview": "//\n// Created by saki on 15/11/12.\n//\n\n#ifndef PUPILMOBILE_PIPELINE_HELPER_H_H\n#define PUPILMOBILE_PIPELINE_HELPER_H_H\n\n"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/serenegiant_usb_UVCCamera.cpp",
    "chars": 65676,
    "preview": "/*\n * UVCCamera\n * library and sample to access to UVC web camera on non-rooted Android device\n *\n * Copyright (c) 2014-"
  },
  {
    "path": "libuvccamera/src/main/jni/UVCCamera/utilbase.cpp",
    "chars": 1255,
    "preview": "/*\n * UVCCamera\n * library and sample to access to UVC web camera on non-rooted Android device\n *\n * Copyright (c) 2014-"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/Android.mk",
    "chars": 6157,
    "preview": "#/*\n# * UVCCamera\n# * library and sample to access to UVC web camera on non-rooted Android device\n# * \n# * Copyright (c)"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/BUILDING.md",
    "chars": 30662,
    "preview": "Building on Un*x Platforms (including Cygwin and OS X)\n=======================================================\n\n\nBuild R"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/CMakeLists.txt",
    "chars": 37114,
    "preview": "#\n# Setup\n#\n\ncmake_minimum_required(VERSION 2.8.11)\n# Use LINK_INTERFACE_LIBRARIES instead of INTERFACE_LINK_LIBRARIES\ni"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/ChangeLog.md",
    "chars": 45392,
    "preview": "1.5.0\n=====\n\n### Significant changes relative to 1.5 beta1:\n\n1. Fixed an issue whereby a malformed motion-JPEG frame cou"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/LICENSE.md",
    "chars": 2939,
    "preview": "libjpeg-turbo Licenses\n======================\n\nlibjpeg-turbo is covered by three compatible BSD-style open source licens"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/Makefile.am",
    "chars": 33538,
    "preview": "lib_LTLIBRARIES = libjpeg.la\nlibjpeg_la_LDFLAGS = -version-info ${LIBTOOL_CURRENT}:${SO_MINOR_VERSION}:${SO_AGE} -no-und"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/Makefile.in",
    "chars": 200684,
    "preview": "# Makefile.in generated by automake 1.15 from Makefile.am.\n# @configure_input@\n\n# Copyright (C) 1994-2014 Free Software "
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/README.ijg",
    "chars": 13668,
    "preview": "libjpeg-turbo note:  This file has been modified by The libjpeg-turbo Project\nto include only information relevant to li"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/README.md",
    "chars": 16108,
    "preview": "Background\n==========\n\nlibjpeg-turbo is a JPEG image codec that uses SIMD instructions (MMX, SSE2,\nNEON, AltiVec) to acc"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/acinclude.m4",
    "chars": 6049,
    "preview": "# AC_PROG_NASM\n# --------------------------\n# Check that NASM exists and determine flags\nAC_DEFUN([AC_PROG_NASM],[\n\nAC_A"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/aclocal.m4",
    "chars": 380392,
    "preview": "# generated automatically by aclocal 1.15 -*- Autoconf -*-\n\n# Copyright (C) 1996-2014 Free Software Foundation, Inc.\n\n# "
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/ar-lib",
    "chars": 5826,
    "preview": "#! /bin/sh\n# Wrapper for Microsoft lib.exe\n\nme=ar-lib\nscriptversion=2012-03-01.08; # UTC\n\n# Copyright (C) 2010-2014 Free"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/bmp.c",
    "chars": 9880,
    "preview": "/*\n * Copyright (C)2011, 2015 D. R. Commander.  All Rights Reserved.\n *\n * Redistribution and use in source and binary f"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/bmp.h",
    "chars": 1856,
    "preview": "/*\n * Copyright (C)2011 D. R. Commander.  All Rights Reserved.\n *\n * Redistribution and use in source and binary forms, "
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/cderror.h",
    "chars": 5435,
    "preview": "/*\n * cderror.h\n *\n * Copyright (C) 1994-1997, Thomas G. Lane.\n * Modified 2009 by Guido Vollbeding.\n * This file is par"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/cdjpeg.c",
    "chars": 4006,
    "preview": "/*\n * cdjpeg.c\n *\n * This file was part of the Independent JPEG Group's software:\n * Copyright (C) 1991-1997, Thomas G. "
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/cdjpeg.h",
    "chars": 5149,
    "preview": "/*\n * cdjpeg.h\n *\n * This file was part of the Independent JPEG Group's software:\n * Copyright (C) 1994-1997, Thomas G. "
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/change.log",
    "chars": 12401,
    "preview": "libjpeg-turbo note:  This file has been modified by The libjpeg-turbo Project\nto include only information relevant to li"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/cjpeg.1",
    "chars": 13564,
    "preview": ".TH CJPEG 1 \"17 February 2016\"\n.SH NAME\ncjpeg \\- compress an image file to a JPEG file\n.SH SYNOPSIS\n.B cjpeg\n[\n.I option"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/cjpeg.c",
    "chars": 21837,
    "preview": "/*\n * cjpeg.c\n *\n * This file was part of the Independent JPEG Group's software:\n * Copyright (C) 1991-1998, Thomas G. L"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/cmakescripts/testclean.cmake",
    "chars": 518,
    "preview": "file(GLOB FILES\n  testout*\n  *_GRAY_*.bmp\n  *_GRAY_*.png\n  *_GRAY_*.ppm\n  *_GRAY_*.jpg\n  *_GRAY.yuv\n  *_420_*.bmp\n  *_42"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/coderules.txt",
    "chars": 3467,
    "preview": "IJG JPEG LIBRARY:  CODING RULES\n\nThis file was part of the Independent JPEG Group's software:\nCopyright (C) 1991-1996, T"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/compile",
    "chars": 7333,
    "preview": "#! /bin/sh\n# Wrapper for compilers which do not understand '-c -o'.\n\nscriptversion=2012-10-14.11; # UTC\n\n# Copyright (C)"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/config.guess",
    "chars": 42938,
    "preview": "#! /bin/sh\n# Attempt to guess a canonical system name.\n#   Copyright 1992-2014 Free Software Foundation, Inc.\n\ntimestamp"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/config.h.in",
    "chars": 3766,
    "preview": "/* config.h.in.  Generated from configure.ac by autoheader.  */\n\n/* use 8 or 12 */\n#undef BITS_IN_JSAMPLE\n\n/* libjpeg-tu"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/config.sub",
    "chars": 35987,
    "preview": "#! /bin/sh\n# Configuration validation subroutine script.\n#   Copyright 1992-2014 Free Software Foundation, Inc.\n\ntimesta"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/configure",
    "chars": 527370,
    "preview": "#! /bin/sh\n# Guess values for system-dependent variables and create Makefiles.\n# Generated by GNU Autoconf 2.69 for libj"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/configure.ac",
    "chars": 19886,
    "preview": "#                                               -*- Autoconf -*-\n# Process this file with autoconf to produce a configur"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/depcomp",
    "chars": 23566,
    "preview": "#! /bin/sh\n# depcomp - compile a program generating dependencies as side-effects\n\nscriptversion=2013-05-30.07; # UTC\n\n# "
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/djpeg.1",
    "chars": 9744,
    "preview": ".TH DJPEG 1 \"18 February 2016\"\n.SH NAME\ndjpeg \\- decompress a JPEG file to an image file\n.SH SYNOPSIS\n.B djpeg\n[\n.I opti"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/djpeg.c",
    "chars": 26408,
    "preview": "/*\n * djpeg.c\n *\n * This file was part of the Independent JPEG Group's software:\n * Copyright (C) 1991-1997, Thomas G. L"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/annotated.html",
    "chars": 5905,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/classes.html",
    "chars": 5797,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/doxygen-extra.css",
    "chars": 27,
    "preview": "code {\n\tcolor: #4665A2; \n}\n"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/doxygen.css",
    "chars": 20452,
    "preview": "/* The standard CSS for doxygen 1.8.3.1 */\n\nbody, table, div, p, dl {\n\tfont: 400 14px/19px Roboto,sans-serif;\n}\n\n/* @gro"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/dynsections.js",
    "chars": 2983,
    "preview": "function toggleVisibility(linkObj)\n{\n var base = $(linkObj).attr('id');\n var summary = $('#'+base+'-summary');\n var cont"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/functions.html",
    "chars": 6371,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/functions_vars.html",
    "chars": 6243,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/group___turbo_j_p_e_g.html",
    "chars": 182344,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/index.html",
    "chars": 4570,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/jquery.js",
    "chars": 93872,
    "preview": "/*! jQuery v1.7.1 jquery.com | jquery.org/license */\n(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/modules.html",
    "chars": 4925,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/all_63.html",
    "chars": 1014,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/all_63.js",
    "chars": 137,
    "preview": "var searchData=\n[\n  ['customfilter',['customFilter',['../structtjtransform.html#a43ee1bcdd2a8d7249a756774f78793c1',1,'tj"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/all_64.html",
    "chars": 1014,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/all_64.js",
    "chars": 232,
    "preview": "var searchData=\n[\n  ['data',['data',['../structtjtransform.html#a688fe8f1a8ecc12a538d9e561cf338e3',1,'tjtransform']]],\n "
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/all_68.html",
    "chars": 1014,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/all_68.js",
    "chars": 109,
    "preview": "var searchData=\n[\n  ['h',['h',['../structtjregion.html#aecefc45a26f4d8b60dd4d825c1710115',1,'tjregion']]]\n];\n"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/all_6e.html",
    "chars": 1014,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/all_6e.js",
    "chars": 127,
    "preview": "var searchData=\n[\n  ['num',['num',['../structtjscalingfactor.html#a9b011e57f981ee23083e2c1aa5e640ec',1,'tjscalingfactor'"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/all_6f.html",
    "chars": 1014,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/all_6f.js",
    "chars": 224,
    "preview": "var searchData=\n[\n  ['op',['op',['../structtjtransform.html#a2525aab4ba6978a1c273f74fef50e498',1,'tjtransform']]],\n  ['o"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/all_72.html",
    "chars": 1014,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/all_72.js",
    "chars": 115,
    "preview": "var searchData=\n[\n  ['r',['r',['../structtjtransform.html#ac324e5e442abec8a961e5bf219db12cf',1,'tjtransform']]]\n];\n"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/all_74.html",
    "chars": 1014,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/all_74.js",
    "chars": 11742,
    "preview": "var searchData=\n[\n  ['tj_5fnumcs',['TJ_NUMCS',['../group___turbo_j_p_e_g.html#ga39f57a6fb02d9cf32e7b6890099b5a71',1,'tur"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/all_77.html",
    "chars": 1014,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/all_77.js",
    "chars": 109,
    "preview": "var searchData=\n[\n  ['w',['w',['../structtjregion.html#ab6eb73ceef584fc23c8c8097926dce42',1,'tjregion']]]\n];\n"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/all_78.html",
    "chars": 1014,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/all_78.js",
    "chars": 109,
    "preview": "var searchData=\n[\n  ['x',['x',['../structtjregion.html#a4b6a37a93997091b26a75831fa291ad9',1,'tjregion']]]\n];\n"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/all_79.html",
    "chars": 1014,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/all_79.js",
    "chars": 109,
    "preview": "var searchData=\n[\n  ['y',['y',['../structtjregion.html#a7b3e0c24cfe87acc80e334cafdcf22c2',1,'tjregion']]]\n];\n"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/classes_74.html",
    "chars": 1018,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/classes_74.js",
    "chars": 233,
    "preview": "var searchData=\n[\n  ['tjregion',['tjregion',['../structtjregion.html',1,'']]],\n  ['tjscalingfactor',['tjscalingfactor',["
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/enums_74.html",
    "chars": 1016,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/enums_74.js",
    "chars": 450,
    "preview": "var searchData=\n[\n  ['tjcs',['TJCS',['../group___turbo_j_p_e_g.html#ga4f83ad3368e0e29d1957be0efa7c3720',1,'turbojpeg.h']"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/enumvalues_74.html",
    "chars": 1021,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/enumvalues_74.js",
    "chars": 4794,
    "preview": "var searchData=\n[\n  ['tjcs_5fcmyk',['TJCS_CMYK',['../group___turbo_j_p_e_g.html#gga4f83ad3368e0e29d1957be0efa7c3720a6c8b"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/functions_74.html",
    "chars": 1020,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/functions_74.js",
    "chars": 3174,
    "preview": "var searchData=\n[\n  ['tjalloc',['tjAlloc',['../group___turbo_j_p_e_g.html#ga5c9234bda6d993cdaffdd89bf81a00ff',1,'turbojp"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/groups_74.html",
    "chars": 1017,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/groups_74.js",
    "chars": 90,
    "preview": "var searchData=\n[\n  ['turbojpeg',['TurboJPEG',['../group___turbo_j_p_e_g.html',1,'']]]\n];\n"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/nomatches.html",
    "chars": 461,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/search.css",
    "chars": 4461,
    "preview": "/*---------------- Search Box */\n\n#FSearchBox {\n    float: left;\n}\n\n#MSearchBox {\n    white-space : nowrap;\n    position"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/search.js",
    "chars": 24124,
    "preview": "// Search script generated by doxygen\n// Copyright (C) 2009 by Dimitri van Heesch.\n\n// The code in this file is loosly b"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/typedefs_74.html",
    "chars": 1019,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/typedefs_74.js",
    "chars": 254,
    "preview": "var searchData=\n[\n  ['tjhandle',['tjhandle',['../group___turbo_j_p_e_g.html#ga758d2634ecb4949de7815cba621f5763',1,'turbo"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/variables_63.html",
    "chars": 1020,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/variables_63.js",
    "chars": 137,
    "preview": "var searchData=\n[\n  ['customfilter',['customFilter',['../structtjtransform.html#a43ee1bcdd2a8d7249a756774f78793c1',1,'tj"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/variables_64.html",
    "chars": 1020,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/variables_64.js",
    "chars": 232,
    "preview": "var searchData=\n[\n  ['data',['data',['../structtjtransform.html#a688fe8f1a8ecc12a538d9e561cf338e3',1,'tjtransform']]],\n "
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/variables_68.html",
    "chars": 1020,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/variables_68.js",
    "chars": 109,
    "preview": "var searchData=\n[\n  ['h',['h',['../structtjregion.html#aecefc45a26f4d8b60dd4d825c1710115',1,'tjregion']]]\n];\n"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/variables_6e.html",
    "chars": 1020,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/variables_6e.js",
    "chars": 127,
    "preview": "var searchData=\n[\n  ['num',['num',['../structtjscalingfactor.html#a9b011e57f981ee23083e2c1aa5e640ec',1,'tjscalingfactor'"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/variables_6f.html",
    "chars": 1020,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/variables_6f.js",
    "chars": 224,
    "preview": "var searchData=\n[\n  ['op',['op',['../structtjtransform.html#a2525aab4ba6978a1c273f74fef50e498',1,'tjtransform']]],\n  ['o"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/variables_72.html",
    "chars": 1020,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/variables_72.js",
    "chars": 115,
    "preview": "var searchData=\n[\n  ['r',['r',['../structtjtransform.html#ac324e5e442abec8a961e5bf219db12cf',1,'tjtransform']]]\n];\n"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/variables_74.html",
    "chars": 1020,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/variables_74.js",
    "chars": 744,
    "preview": "var searchData=\n[\n  ['tjblueoffset',['tjBlueOffset',['../group___turbo_j_p_e_g.html#ga84e2e35d3f08025f976ec1ec53693dea',"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/variables_77.html",
    "chars": 1020,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/variables_77.js",
    "chars": 109,
    "preview": "var searchData=\n[\n  ['w',['w',['../structtjregion.html#ab6eb73ceef584fc23c8c8097926dce42',1,'tjregion']]]\n];\n"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/variables_78.html",
    "chars": 1020,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/variables_78.js",
    "chars": 109,
    "preview": "var searchData=\n[\n  ['x',['x',['../structtjregion.html#a4b6a37a93997091b26a75831fa291ad9',1,'tjregion']]]\n];\n"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/variables_79.html",
    "chars": 1020,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/search/variables_79.js",
    "chars": 109,
    "preview": "var searchData=\n[\n  ['y',['y',['../structtjregion.html#a7b3e0c24cfe87acc80e334cafdcf22c2',1,'tjregion']]]\n];\n"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/structtjregion.html",
    "chars": 9951,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/structtjscalingfactor.html",
    "chars": 7398,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/structtjtransform.html",
    "chars": 13720,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doc/html/tabs.css",
    "chars": 1163,
    "preview": ".tabs, .tabs2, .tabs3 {\n    background-image: url('tab_b.png');\n    width: 100%;\n    z-index: 101;\n    font-size: 13px;\n"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doxygen-extra.css",
    "chars": 27,
    "preview": "code {\n\tcolor: #4665A2; \n}\n"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/doxygen.config",
    "chars": 401,
    "preview": "PROJECT_NAME = TurboJPEG\nPROJECT_NUMBER = 1.5\nOUTPUT_DIRECTORY = doc/\nUSE_WINDOWS_ENCODING = NO\nOPTIMIZE_OUTPUT_FOR_C = "
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/example.c",
    "chars": 17210,
    "preview": "/*\n * example.c\n *\n * This file illustrates how to use the IJG code as a subroutine library\n * to read or write JPEG ima"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/include/config.h",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/include/jconfig.h",
    "chars": 2426,
    "preview": "/* jconfig.h.  Generated from jconfig.h.in by configure.  */\n/* Version ID for the JPEG library.\n * Might be useful for "
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/include/jconfigint.h",
    "chars": 360,
    "preview": "/* jconfigint.h.  Generated from jconfigint.h.in by configure.  */\n/* libjpeg-turbo build number */\n#define BUILD \"20160"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/include/jsimdcfg.inc",
    "chars": 2898,
    "preview": ";\n; Automatically generated include file from jsimdcfg.inc.h\n;\n;\n; -- jpeglib.h\n;\n%define DCTSIZE 8\n%define DCTSIZE2 64\n"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/install-sh",
    "chars": 14675,
    "preview": "#!/bin/sh\n# install - install a program, script, or datafile\n\nscriptversion=2013-12-25.23; # UTC\n\n# This originates from"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/jaricom.c",
    "chars": 5146,
    "preview": "/*\n * jaricom.c\n *\n * This file was part of the Independent JPEG Group's software:\n * Developed 1997-2009 by Guido Vollb"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/java/CMakeLists.txt",
    "chars": 1994,
    "preview": "set(JAR_FILE turbojpeg.jar)\nset(MANIFEST_FILE ${CMAKE_CURRENT_SOURCE_DIR}/MANIFEST.MF)\n\nset(JAVA_CLASSNAMES org/libjpegt"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/java/MANIFEST.MF",
    "chars": 44,
    "preview": "Manifest-Version: 1.0\nMain-Class: TJExample\n"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/java/Makefile.am",
    "chars": 2641,
    "preview": "JAVAROOT = .\n\norg/libjpegturbo/turbojpeg/TJLoader.java: $(srcdir)/org/libjpegturbo/turbojpeg/TJLoader.java.tmpl\n\tmkdir -"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/java/Makefile.in",
    "chars": 16591,
    "preview": "# Makefile.in generated by automake 1.15 from Makefile.am.\n# @configure_input@\n\n# Copyright (C) 1994-2014 Free Software "
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/java/README",
    "chars": 2603,
    "preview": "TurboJPEG Java Wrapper\n======================\n\nThe TurboJPEG shared library can optionally be built with a Java Native\nI"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/java/TJBench.java",
    "chars": 35999,
    "preview": "/*\n * Copyright (C)2009-2014, 2016 D. R. Commander.  All Rights Reserved.\n *\n * Redistribution and use in source and bin"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/java/TJExample.java",
    "chars": 15027,
    "preview": "/*\n * Copyright (C)2011-2012, 2014-2015 D. R. Commander.  All Rights Reserved.\n *\n * Redistribution and use in source an"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/java/TJUnitTest.java",
    "chars": 34390,
    "preview": "/*\n * Copyright (C)2011-2016 D. R. Commander.  All Rights Reserved.\n *\n * Redistribution and use in source and binary fo"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/java/doc/allclasses-frame.html",
    "chars": 1658,
    "preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/java/doc/allclasses-noframe.html",
    "chars": 1478,
    "preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/java/doc/constant-values.html",
    "chars": 19341,
    "preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/java/doc/deprecated-list.html",
    "chars": 11658,
    "preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/java/doc/help-doc.html",
    "chars": 7627,
    "preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/java/doc/index-all.html",
    "chars": 79374,
    "preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/java/doc/index.html",
    "chars": 2679,
    "preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Frameset//EN\" \"http://www.w3.org/TR/html4/frameset.dtd\">\n<!-- NewPage -->\n<"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/java/doc/org/libjpegturbo/turbojpeg/TJ.html",
    "chars": 54603,
    "preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/java/doc/org/libjpegturbo/turbojpeg/TJCompressor.html",
    "chars": 49794,
    "preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/java/doc/org/libjpegturbo/turbojpeg/TJCustomFilter.html",
    "chars": 9803,
    "preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/java/doc/org/libjpegturbo/turbojpeg/TJDecompressor.html",
    "chars": 64678,
    "preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/java/doc/org/libjpegturbo/turbojpeg/TJException.html",
    "chars": 9259,
    "preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/java/doc/org/libjpegturbo/turbojpeg/TJScalingFactor.html",
    "chars": 11473,
    "preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/java/doc/org/libjpegturbo/turbojpeg/TJTransform.html",
    "chars": 30675,
    "preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/java/doc/org/libjpegturbo/turbojpeg/TJTransformer.html",
    "chars": 22876,
    "preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n"
  },
  {
    "path": "libuvccamera/src/main/jni/libjpeg-turbo-1.5.0/java/doc/org/libjpegturbo/turbojpeg/YUVImage.html",
    "chars": 32148,
    "preview": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<!-- NewPage -->\n"
  }
]

// ... and 818 more files (download for full content)

About this extraction

This page contains the full source code of the saki4510t/UVCCamera GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1018 files (12.0 MB), approximately 3.2M tokens, and a symbol index with 5822 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!