├── .editorconfig ├── .gitattributes ├── .github ├── dependabot.yml └── workflows │ ├── android-lint.yml │ └── android-test.yml ├── .gitignore ├── LICENSE ├── README.md ├── app ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── dev │ │ └── alejandrorosas │ │ └── apptemplate │ │ └── ExampleInstrumentedTest.kt │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── dev │ │ └── alejandrorosas │ │ └── apptemplate │ │ ├── AndroidApplication.kt │ │ ├── MainActivity.kt │ │ ├── MainViewModel.kt │ │ ├── SettingsActivity.kt │ │ └── SettingsFragment.kt │ └── res │ ├── drawable-v24 │ └── ic_launcher_foreground.xml │ ├── drawable │ ├── ic_launcher_background.xml │ └── ic_settings.xml │ ├── layout │ ├── activity_main.xml │ └── activity_settings.xml │ ├── mipmap-anydpi-v26 │ ├── ic_launcher.xml │ └── ic_launcher_round.xml │ ├── mipmap-hdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-mdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-xhdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-xxhdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-xxxhdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── values │ ├── colors.xml │ ├── strings.xml │ └── styles.xml │ └── xml │ ├── device_filterall.xml │ └── preferences.xml ├── build.gradle ├── core ├── build.gradle └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── dev │ └── alejandrorosas │ └── core │ ├── di │ └── CoreModule.kt │ └── livedata │ └── SingleLiveEvent.java ├── dependencies.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── ktlint.gradle ├── libraries ├── libuvccamera │ ├── LICENSE │ ├── build.gradle │ ├── 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-2.0.6 │ │ │ ├── Android.mk │ │ │ ├── BUILDING.md │ │ │ ├── CMakeLists.txt │ │ │ ├── ChangeLog.md │ │ │ ├── LICENSE.md │ │ │ ├── README.ijg │ │ │ ├── README.md │ │ │ ├── cderror.h │ │ │ ├── cdjpeg.c │ │ │ ├── cdjpeg.h │ │ │ ├── change.log │ │ │ ├── cjpeg.1 │ │ │ ├── cjpeg.c │ │ │ ├── cmakescripts │ │ │ │ ├── BuildPackages.cmake │ │ │ │ ├── GNUInstallDirs.cmake │ │ │ │ ├── cmake_uninstall.cmake.in │ │ │ │ └── testclean.cmake │ │ │ ├── cmyk.h │ │ │ ├── coderules.txt │ │ │ ├── croptest.in │ │ │ ├── djpeg.1 │ │ │ ├── djpeg.c │ │ │ ├── doc │ │ │ │ └── html │ │ │ │ │ ├── annotated.html │ │ │ │ │ ├── bc_s.png │ │ │ │ │ ├── bdwn.png │ │ │ │ │ ├── classes.html │ │ │ │ │ ├── closed.png │ │ │ │ │ ├── doc.png │ │ │ │ │ ├── doxygen-extra.css │ │ │ │ │ ├── doxygen.css │ │ │ │ │ ├── doxygen.svg │ │ │ │ │ ├── dynsections.js │ │ │ │ │ ├── folderclosed.png │ │ │ │ │ ├── folderopen.png │ │ │ │ │ ├── functions.html │ │ │ │ │ ├── functions_vars.html │ │ │ │ │ ├── group___turbo_j_p_e_g.html │ │ │ │ │ ├── index.html │ │ │ │ │ ├── jquery.js │ │ │ │ │ ├── menu.js │ │ │ │ │ ├── menudata.js │ │ │ │ │ ├── modules.html │ │ │ │ │ ├── nav_f.png │ │ │ │ │ ├── nav_g.png │ │ │ │ │ ├── nav_h.png │ │ │ │ │ ├── open.png │ │ │ │ │ ├── search │ │ │ │ │ ├── all_0.html │ │ │ │ │ ├── all_0.js │ │ │ │ │ ├── all_1.html │ │ │ │ │ ├── all_1.js │ │ │ │ │ ├── all_2.html │ │ │ │ │ ├── all_2.js │ │ │ │ │ ├── all_3.html │ │ │ │ │ ├── all_3.js │ │ │ │ │ ├── all_4.html │ │ │ │ │ ├── all_4.js │ │ │ │ │ ├── all_5.html │ │ │ │ │ ├── all_5.js │ │ │ │ │ ├── all_6.html │ │ │ │ │ ├── all_6.js │ │ │ │ │ ├── all_7.html │ │ │ │ │ ├── all_7.js │ │ │ │ │ ├── all_8.html │ │ │ │ │ ├── all_8.js │ │ │ │ │ ├── all_9.html │ │ │ │ │ ├── all_9.js │ │ │ │ │ ├── classes_0.html │ │ │ │ │ ├── classes_0.js │ │ │ │ │ ├── close.svg │ │ │ │ │ ├── enums_0.html │ │ │ │ │ ├── enums_0.js │ │ │ │ │ ├── enumvalues_0.html │ │ │ │ │ ├── enumvalues_0.js │ │ │ │ │ ├── functions_0.html │ │ │ │ │ ├── functions_0.js │ │ │ │ │ ├── groups_0.html │ │ │ │ │ ├── groups_0.js │ │ │ │ │ ├── mag_sel.svg │ │ │ │ │ ├── nomatches.html │ │ │ │ │ ├── search.css │ │ │ │ │ ├── search.js │ │ │ │ │ ├── search_l.png │ │ │ │ │ ├── search_m.png │ │ │ │ │ ├── search_r.png │ │ │ │ │ ├── searchdata.js │ │ │ │ │ ├── typedefs_0.html │ │ │ │ │ ├── typedefs_0.js │ │ │ │ │ ├── variables_0.html │ │ │ │ │ ├── variables_0.js │ │ │ │ │ ├── variables_1.html │ │ │ │ │ ├── variables_1.js │ │ │ │ │ ├── variables_2.html │ │ │ │ │ ├── variables_2.js │ │ │ │ │ ├── variables_3.html │ │ │ │ │ ├── variables_3.js │ │ │ │ │ ├── variables_4.html │ │ │ │ │ ├── variables_4.js │ │ │ │ │ ├── variables_5.html │ │ │ │ │ ├── variables_5.js │ │ │ │ │ ├── variables_6.html │ │ │ │ │ ├── variables_6.js │ │ │ │ │ ├── variables_7.html │ │ │ │ │ ├── variables_7.js │ │ │ │ │ ├── variables_8.html │ │ │ │ │ ├── variables_8.js │ │ │ │ │ ├── variables_9.html │ │ │ │ │ └── variables_9.js │ │ │ │ │ ├── splitbar.png │ │ │ │ │ ├── structtjregion.html │ │ │ │ │ ├── structtjscalingfactor.html │ │ │ │ │ ├── structtjtransform.html │ │ │ │ │ ├── sync_off.png │ │ │ │ │ ├── sync_on.png │ │ │ │ │ ├── tab_a.png │ │ │ │ │ ├── tab_b.png │ │ │ │ │ ├── tab_h.png │ │ │ │ │ ├── tab_s.png │ │ │ │ │ └── tabs.css │ │ │ ├── doxygen-extra.css │ │ │ ├── doxygen.config │ │ │ ├── example.txt │ │ │ ├── include │ │ │ │ ├── config.h │ │ │ │ ├── jconfig.h │ │ │ │ ├── jconfigint.h │ │ │ │ └── jsimdcfg.inc │ │ │ ├── jaricom.c │ │ │ ├── java │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── MANIFEST.MF │ │ │ │ ├── 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 │ │ │ │ │ ├── resources │ │ │ │ │ │ ├── background.gif │ │ │ │ │ │ ├── tab.gif │ │ │ │ │ │ ├── titlebar.gif │ │ │ │ │ │ └── titlebar_end.gif │ │ │ │ │ ├── script.js │ │ │ │ │ ├── serialized-form.html │ │ │ │ │ └── stylesheet.css │ │ │ │ ├── org │ │ │ │ │ └── libjpegturbo │ │ │ │ │ │ └── turbojpeg │ │ │ │ │ │ ├── TJ.java │ │ │ │ │ │ ├── TJCompressor.java │ │ │ │ │ │ ├── TJCustomFilter.java │ │ │ │ │ │ ├── TJDecompressor.java │ │ │ │ │ │ ├── TJException.java │ │ │ │ │ │ ├── TJLoader-unix.java.in │ │ │ │ │ │ ├── TJLoader-win.java.in │ │ │ │ │ │ ├── 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 │ │ │ ├── jcicc.c │ │ │ ├── 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 │ │ │ ├── jdicc.c │ │ │ ├── jdinput.c │ │ │ ├── jdmainct.c │ │ │ ├── jdmainct.h │ │ │ ├── jdmarker.c │ │ │ ├── jdmaster.c │ │ │ ├── jdmaster.h │ │ │ ├── jdmerge.c │ │ │ ├── jdmerge.h │ │ │ ├── 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 │ │ │ ├── md5 │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── md5.c │ │ │ │ ├── md5.h │ │ │ │ ├── md5cmp.c │ │ │ │ └── md5hl.c │ │ │ ├── rdbmp.c │ │ │ ├── rdcolmap.c │ │ │ ├── rdgif.c │ │ │ ├── rdjpgcom.1 │ │ │ ├── rdjpgcom.c │ │ │ ├── rdppm.c │ │ │ ├── rdrle.c │ │ │ ├── rdswitch.c │ │ │ ├── rdtarga.c │ │ │ ├── release │ │ │ │ ├── Distribution.xml.in │ │ │ │ ├── License.rtf │ │ │ │ ├── ReadMe.txt │ │ │ │ ├── Welcome.rtf │ │ │ │ ├── deb-control.in │ │ │ │ ├── installer.nsi.in │ │ │ │ ├── libjpeg.pc.in │ │ │ │ ├── libturbojpeg.pc.in │ │ │ │ ├── makecygwinpkg.in │ │ │ │ ├── makedpkg.in │ │ │ │ ├── makemacpkg.in │ │ │ │ ├── makerpm.in │ │ │ │ ├── makesrpm.in │ │ │ │ ├── maketarball.in │ │ │ │ ├── rpm.spec.in │ │ │ │ └── uninstall.in │ │ │ ├── sharedlib │ │ │ │ └── CMakeLists.txt │ │ │ ├── simd │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── arm │ │ │ │ │ ├── jsimd.c │ │ │ │ │ └── jsimd_neon.S │ │ │ │ ├── arm64 │ │ │ │ │ ├── jsimd.c │ │ │ │ │ └── jsimd_neon.S │ │ │ │ ├── gas-preprocessor.in │ │ │ │ ├── i386 │ │ │ │ │ ├── jccolext-avx2.asm │ │ │ │ │ ├── jccolext-mmx.asm │ │ │ │ │ ├── jccolext-sse2.asm │ │ │ │ │ ├── jccolor-avx2.asm │ │ │ │ │ ├── jccolor-mmx.asm │ │ │ │ │ ├── jccolor-sse2.asm │ │ │ │ │ ├── jcgray-avx2.asm │ │ │ │ │ ├── jcgray-mmx.asm │ │ │ │ │ ├── jcgray-sse2.asm │ │ │ │ │ ├── jcgryext-avx2.asm │ │ │ │ │ ├── jcgryext-mmx.asm │ │ │ │ │ ├── jcgryext-sse2.asm │ │ │ │ │ ├── jchuff-sse2.asm │ │ │ │ │ ├── jcphuff-sse2.asm │ │ │ │ │ ├── jcsample-avx2.asm │ │ │ │ │ ├── jcsample-mmx.asm │ │ │ │ │ ├── jcsample-sse2.asm │ │ │ │ │ ├── jdcolext-avx2.asm │ │ │ │ │ ├── jdcolext-mmx.asm │ │ │ │ │ ├── jdcolext-sse2.asm │ │ │ │ │ ├── jdcolor-avx2.asm │ │ │ │ │ ├── jdcolor-mmx.asm │ │ │ │ │ ├── jdcolor-sse2.asm │ │ │ │ │ ├── jdmerge-avx2.asm │ │ │ │ │ ├── jdmerge-mmx.asm │ │ │ │ │ ├── jdmerge-sse2.asm │ │ │ │ │ ├── jdmrgext-avx2.asm │ │ │ │ │ ├── jdmrgext-mmx.asm │ │ │ │ │ ├── jdmrgext-sse2.asm │ │ │ │ │ ├── jdsample-avx2.asm │ │ │ │ │ ├── jdsample-mmx.asm │ │ │ │ │ ├── jdsample-sse2.asm │ │ │ │ │ ├── jfdctflt-3dn.asm │ │ │ │ │ ├── jfdctflt-sse.asm │ │ │ │ │ ├── jfdctfst-mmx.asm │ │ │ │ │ ├── jfdctfst-sse2.asm │ │ │ │ │ ├── jfdctint-avx2.asm │ │ │ │ │ ├── jfdctint-mmx.asm │ │ │ │ │ ├── jfdctint-sse2.asm │ │ │ │ │ ├── jidctflt-3dn.asm │ │ │ │ │ ├── jidctflt-sse.asm │ │ │ │ │ ├── jidctflt-sse2.asm │ │ │ │ │ ├── jidctfst-mmx.asm │ │ │ │ │ ├── jidctfst-sse2.asm │ │ │ │ │ ├── jidctint-avx2.asm │ │ │ │ │ ├── jidctint-mmx.asm │ │ │ │ │ ├── jidctint-sse2.asm │ │ │ │ │ ├── jidctred-mmx.asm │ │ │ │ │ ├── jidctred-sse2.asm │ │ │ │ │ ├── jquant-3dn.asm │ │ │ │ │ ├── jquant-mmx.asm │ │ │ │ │ ├── jquant-sse.asm │ │ │ │ │ ├── jquantf-sse2.asm │ │ │ │ │ ├── jquanti-avx2.asm │ │ │ │ │ ├── jquanti-sse2.asm │ │ │ │ │ ├── jsimd.c │ │ │ │ │ └── jsimdcpu.asm │ │ │ │ ├── jsimd.h │ │ │ │ ├── loongson │ │ │ │ │ ├── jccolext-mmi.c │ │ │ │ │ ├── jccolor-mmi.c │ │ │ │ │ ├── jcsample-mmi.c │ │ │ │ │ ├── jcsample.h │ │ │ │ │ ├── jdcolext-mmi.c │ │ │ │ │ ├── jdcolor-mmi.c │ │ │ │ │ ├── jdsample-mmi.c │ │ │ │ │ ├── jfdctint-mmi.c │ │ │ │ │ ├── jidctint-mmi.c │ │ │ │ │ ├── jquanti-mmi.c │ │ │ │ │ ├── jsimd.c │ │ │ │ │ ├── jsimd_mmi.h │ │ │ │ │ └── loongson-mmintrin.h │ │ │ │ ├── mips │ │ │ │ │ ├── jsimd.c │ │ │ │ │ ├── jsimd_dspr2.S │ │ │ │ │ └── jsimd_dspr2_asm.h │ │ │ │ ├── nasm │ │ │ │ │ ├── jcolsamp.inc │ │ │ │ │ ├── jdct.inc │ │ │ │ │ ├── jpeg_nbits_table.inc │ │ │ │ │ ├── jsimdcfg.inc │ │ │ │ │ ├── jsimdcfg.inc.h │ │ │ │ │ └── jsimdext.inc │ │ │ │ ├── powerpc │ │ │ │ │ ├── jccolext-altivec.c │ │ │ │ │ ├── jccolor-altivec.c │ │ │ │ │ ├── jcgray-altivec.c │ │ │ │ │ ├── jcgryext-altivec.c │ │ │ │ │ ├── jcsample-altivec.c │ │ │ │ │ ├── jcsample.h │ │ │ │ │ ├── jdcolext-altivec.c │ │ │ │ │ ├── jdcolor-altivec.c │ │ │ │ │ ├── jdmerge-altivec.c │ │ │ │ │ ├── jdmrgext-altivec.c │ │ │ │ │ ├── jdsample-altivec.c │ │ │ │ │ ├── jfdctfst-altivec.c │ │ │ │ │ ├── jfdctint-altivec.c │ │ │ │ │ ├── jidctfst-altivec.c │ │ │ │ │ ├── jidctint-altivec.c │ │ │ │ │ ├── jquanti-altivec.c │ │ │ │ │ ├── jsimd.c │ │ │ │ │ └── jsimd_altivec.h │ │ │ │ └── x86_64 │ │ │ │ │ ├── jccolext-avx2.asm │ │ │ │ │ ├── jccolext-sse2.asm │ │ │ │ │ ├── jccolor-avx2.asm │ │ │ │ │ ├── jccolor-sse2.asm │ │ │ │ │ ├── jcgray-avx2.asm │ │ │ │ │ ├── jcgray-sse2.asm │ │ │ │ │ ├── jcgryext-avx2.asm │ │ │ │ │ ├── jcgryext-sse2.asm │ │ │ │ │ ├── jchuff-sse2.asm │ │ │ │ │ ├── jcphuff-sse2.asm │ │ │ │ │ ├── jcsample-avx2.asm │ │ │ │ │ ├── jcsample-sse2.asm │ │ │ │ │ ├── jdcolext-avx2.asm │ │ │ │ │ ├── jdcolext-sse2.asm │ │ │ │ │ ├── jdcolor-avx2.asm │ │ │ │ │ ├── jdcolor-sse2.asm │ │ │ │ │ ├── jdmerge-avx2.asm │ │ │ │ │ ├── jdmerge-sse2.asm │ │ │ │ │ ├── jdmrgext-avx2.asm │ │ │ │ │ ├── jdmrgext-sse2.asm │ │ │ │ │ ├── jdsample-avx2.asm │ │ │ │ │ ├── jdsample-sse2.asm │ │ │ │ │ ├── jfdctflt-sse.asm │ │ │ │ │ ├── jfdctfst-sse2.asm │ │ │ │ │ ├── jfdctint-avx2.asm │ │ │ │ │ ├── jfdctint-sse2.asm │ │ │ │ │ ├── jidctflt-sse2.asm │ │ │ │ │ ├── jidctfst-sse2.asm │ │ │ │ │ ├── jidctint-avx2.asm │ │ │ │ │ ├── jidctint-sse2.asm │ │ │ │ │ ├── jidctred-sse2.asm │ │ │ │ │ ├── jquantf-sse2.asm │ │ │ │ │ ├── jquanti-avx2.asm │ │ │ │ │ ├── jquanti-sse2.asm │ │ │ │ │ ├── jsimd.c │ │ │ │ │ └── jsimdcpu.asm │ │ │ ├── structure.txt │ │ │ ├── testimages │ │ │ │ ├── nightshot_iso_100.bmp │ │ │ │ ├── nightshot_iso_100.txt │ │ │ │ ├── test.scan │ │ │ │ ├── test1.icc │ │ │ │ ├── test1.icc.txt │ │ │ │ ├── test2.icc │ │ │ │ ├── test2.icc.txt │ │ │ │ ├── testimgari.jpg │ │ │ │ ├── testimgint.jpg │ │ │ │ ├── testorig.jpg │ │ │ │ ├── testorig.ppm │ │ │ │ ├── testorig12.jpg │ │ │ │ ├── vgl_5674_0098.bmp │ │ │ │ ├── vgl_6434_0018a.bmp │ │ │ │ └── vgl_6548_0026a.bmp │ │ │ ├── tjbench.c │ │ │ ├── tjbenchtest.in │ │ │ ├── tjbenchtest.java.in │ │ │ ├── tjexample.c │ │ │ ├── tjexampletest.in │ │ │ ├── tjexampletest.java.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 │ │ │ │ ├── jpeg62-memsrcdst.def │ │ │ │ ├── jpeg62.def │ │ │ │ ├── jpeg7-memsrcdst.def │ │ │ │ ├── jpeg7.def │ │ │ │ └── jpeg8.def │ │ │ ├── wizard.txt │ │ │ ├── wrbmp.c │ │ │ ├── wrgif.c │ │ │ ├── wrjpgcom.1 │ │ │ ├── wrjpgcom.c │ │ │ ├── wrppm.c │ │ │ ├── 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 │ │ │ │ └── libusb.png │ │ │ ├── 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-1.0.pc.in │ │ │ ├── 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 │ │ │ ├── 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 │ │ │ │ │ ├── insituparsing.png │ │ │ │ │ ├── iterative-parser-states-diagram.dot │ │ │ │ │ ├── iterative-parser-states-diagram.png │ │ │ │ │ ├── makefile │ │ │ │ │ ├── move1.dot │ │ │ │ │ ├── move1.png │ │ │ │ │ ├── move2.dot │ │ │ │ │ ├── move2.png │ │ │ │ │ ├── move3.dot │ │ │ │ │ ├── move3.png │ │ │ │ │ ├── normalparsing.dot │ │ │ │ │ ├── normalparsing.png │ │ │ │ │ ├── simpledom.dot │ │ │ │ │ ├── simpledom.png │ │ │ │ │ ├── tutorial.dot │ │ │ │ │ └── tutorial.png │ │ │ │ ├── dom.md │ │ │ │ ├── encoding.md │ │ │ │ ├── faq.md │ │ │ │ ├── features.md │ │ │ │ ├── internals.md │ │ │ │ ├── logo │ │ │ │ │ ├── rapidjson.png │ │ │ │ │ └── rapidjson.svg │ │ │ │ ├── misc │ │ │ │ │ ├── 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 │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── serenegiant │ │ │ └── usb │ │ │ ├── CameraDialog.java │ │ │ ├── DeviceFilter.java │ │ │ ├── IButtonCallback.java │ │ │ ├── IFrameCallback.java │ │ │ ├── IStatusCallback.java │ │ │ ├── Size.java │ │ │ ├── USBMonitor.java │ │ │ ├── USBVendorId.java │ │ │ └── UVCCamera.java │ │ └── res │ │ ├── layout │ │ ├── dialog_camera.xml │ │ └── listitem_device.xml │ │ ├── values │ │ ├── dimens.xml │ │ └── strings.xml │ │ └── xml │ │ └── device_filter.xml └── streamlib │ ├── build.gradle │ └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── dev │ └── alejandrorosas │ └── streamlib │ ├── RtmpUSB.java │ ├── StreamService.kt │ └── USBBase.java └── settings.gradle /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | insert_final_newline = true 5 | 6 | [*.{kt,kts}] 7 | indent_style = space 8 | indent_size = 4 9 | max_line_length = 140 10 | ij_kotlin_allow_trailing_comma = true 11 | ij_kotlin_allow_trailing_comma_on_call_site = true -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | libraries/libuvccamera/* linguist-vendored 2 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: gradle 4 | directory: "/" 5 | schedule: 6 | interval: daily 7 | time: "04:00" 8 | open-pull-requests-limit: 10 9 | -------------------------------------------------------------------------------- /.github/workflows/android-lint.yml: -------------------------------------------------------------------------------- 1 | name: Style 2 | on: push 3 | jobs: 4 | Lint: 5 | runs-on: ubuntu-latest 6 | steps: 7 | - uses: actions/checkout@v2 8 | 9 | - uses: actions/cache@v2 10 | with: 11 | path: | 12 | ~/.gradle/caches 13 | ~/.gradle/wrapper 14 | key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} 15 | restore-keys: | 16 | ${{ runner.os }}-gradle- 17 | 18 | - name: Lint 19 | run: ./gradlew ktlint 20 | -------------------------------------------------------------------------------- /.github/workflows/android-test.yml: -------------------------------------------------------------------------------- 1 | name: Test 2 | on: push 3 | jobs: 4 | Build: 5 | runs-on: ubuntu-latest 6 | steps: 7 | - uses: actions/checkout@v2 8 | 9 | - uses: actions/cache@v2 10 | with: 11 | path: | 12 | ~/.gradle/caches 13 | ~/.gradle/wrapper 14 | key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} 15 | restore-keys: | 16 | ${{ runner.os }}-gradle- 17 | 18 | - name: Test 19 | run: ./gradlew test 20 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .idea 3 | .externalNativeBuild 4 | 5 | build/ 6 | captures/ 7 | 8 | .gradle 9 | local.properties 10 | 11 | .DS_Store 12 | .cxx 13 | 14 | *.so 15 | *.class 16 | bin/ 17 | obj 18 | obj/local 19 | gen/ 20 | *.cache 21 | libuvccamera/src/main/libs 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # UVC Rtmp Stream App for Android 2 | 3 | [![](https://github.com/alejandrorosas/android-uvc-rtmp-stream/workflows/Test/badge.svg)](https://github.com/alejandrorosas/android-uvc-rtmp-stream/actions) [![](https://github.com/alejandrorosas/android-uvc-rtmp-stream/workflows/Style/badge.svg)](https://github.com/alejandrorosas/android-uvc-rtmp-stream/actions) 4 | 5 | Simple Android app to Stream over RTMP using an USB camera. 6 | 7 | ## Libraries 8 | 9 | - [UVCCamera](https://github.com/saki4510t/UVCCamera) 10 | - [rtmp-rtsp-stream-client-java](https://github.com/pedroSG94/rtmp-rtsp-stream-client-java) 11 | 12 | ## License 13 | 14 | ``` 15 | Copyright 2021 Alejandro Rosas 16 | 17 | Licensed under the Apache License, Version 2.0 (the "License"); 18 | you may not use this file except in compliance with the License. 19 | You may obtain a copy of the License at 20 | 21 | https://www.apache.org/licenses/LICENSE-2.0 22 | 23 | Unless required by applicable law or agreed to in writing, software 24 | distributed under the License is distributed on an "AS IS" BASIS, 25 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 26 | See the License for the specific language governing permissions and 27 | limitations under the License. 28 | ``` 29 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /app/src/androidTest/java/dev/alejandrorosas/apptemplate/ExampleInstrumentedTest.kt: -------------------------------------------------------------------------------- 1 | package dev.alejandrorosas.apptemplate 2 | 3 | import androidx.test.ext.junit.runners.AndroidJUnit4 4 | import androidx.test.platform.app.InstrumentationRegistry 5 | import org.junit.Assert.assertEquals 6 | import org.junit.Test 7 | import org.junit.runner.RunWith 8 | 9 | /** 10 | * Instrumented test, which will execute on an Android device. 11 | * 12 | * See [testing documentation](http://d.android.com/tools/testing). 13 | */ 14 | @RunWith(AndroidJUnit4::class) 15 | class ExampleInstrumentedTest { 16 | @Test 17 | fun useAppContext() { 18 | // Context of the app under test. 19 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext 20 | assertEquals("dev.alejandrorosas.apptemplate", appContext.packageName) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/dev/alejandrorosas/apptemplate/AndroidApplication.kt: -------------------------------------------------------------------------------- 1 | package dev.alejandrorosas.apptemplate 2 | 3 | import android.app.Application 4 | import dagger.hilt.android.HiltAndroidApp 5 | 6 | @HiltAndroidApp 7 | class AndroidApplication : Application() 8 | -------------------------------------------------------------------------------- /app/src/main/java/dev/alejandrorosas/apptemplate/SettingsActivity.kt: -------------------------------------------------------------------------------- 1 | package dev.alejandrorosas.apptemplate 2 | 3 | import android.os.Bundle 4 | import androidx.appcompat.app.AppCompatActivity 5 | 6 | class SettingsActivity : AppCompatActivity(R.layout.activity_settings) { 7 | override fun onCreate(savedInstanceState: Bundle?) { 8 | super.onCreate(savedInstanceState) 9 | supportFragmentManager 10 | .beginTransaction() 11 | .replace(R.id.fragment_container, SettingsFragment()) 12 | .commit() 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/dev/alejandrorosas/apptemplate/SettingsFragment.kt: -------------------------------------------------------------------------------- 1 | package dev.alejandrorosas.apptemplate 2 | 3 | import android.os.Bundle 4 | import androidx.preference.PreferenceFragmentCompat 5 | 6 | class SettingsFragment : PreferenceFragmentCompat() { 7 | override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { 8 | setPreferencesFromResource(R.xml.preferences, rootKey) 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 17 | 18 | 29 | 30 |