Comments (3)
Hi, sorry my answer delayed.
Unfortunately I don't know certain way to get them work well, could you try followings?
- Connect one camera
- open and start preview with 640x480, MJPEG. if it works, set smaller value to bandwidth factor than before (please repeat step 2 until you find minimum value of bandwidth factor).
- set minimum bandwidth factor for both camera
- connect two camera and try to start preview.
FYI, shorter cabling and self powered USB hub (if you use bus powered USB hub now) may produce better result.
saki
from uvccamera.
Hey, thanks for getting in touch. I have tried changing DEFAULT_BANDWIDTH in master branch with various values (0.2f, 0.5f, 0.67f, 0.8f and 1.0f) but the issue still occurs.
I have done some further testing on master branch and this is the sequence of what happens:
- Run app with no cameras connected.
- Connect camera 1.
- Select left view on UI; dialog with unique USB appears with Camera 1 listed - select camera 1 ID.
- Camera 1 stream appears on left view of UI.
- Connect camera 2.
- Select right view on UI; dialog with unique USB appears with Camera 2 listed - select camera 2 ID.
- Camera 2 stream appears on left view of UI.
The second camera takes over the first. Here's the LogCat of the above sequence:
05-11 13:45:16.055 10289-10289/com.serenegiant.usbcameratest7 W/InputEventReceiver: Attempted to finish an input event but the input event receiver has already been disposed.
05-11 13:45:16.725 10289-10320/com.serenegiant.usbcameratest7 V/CameraThread: handleStopRecording:mMuxer=null
05-11 13:45:16.725 10289-10320/com.serenegiant.usbcameratest7 V/CameraThread: handleStopPreview:
05-11 13:45:16.725 10289-10289/com.serenegiant.usbcameratest7 V/UVCCameraTextureView: onPause:
05-11 13:45:16.725 10289-10289/com.serenegiant.usbcameratest7 V/UVCCameraTextureView: release:
05-11 13:45:16.725 10289-10320/com.serenegiant.usbcameratest7 V/CameraThread: handleClose:
05-11 13:45:16.725 10289-10317/com.serenegiant.usbcameratest7 V/CameraThread: handleStopRecording:mMuxer=null
05-11 13:45:16.725 10289-10320/com.serenegiant.usbcameratest7 V/CameraThread: handleStopRecording:mMuxer=null
05-11 13:45:16.725 10289-10317/com.serenegiant.usbcameratest7 V/CameraThread: handleStopPreview:
05-11 13:45:16.725 10289-11244/com.serenegiant.usbcameratest7 D/UVCCameraTextureView: RenderThread finishing
05-11 13:45:16.725 10289-10289/com.serenegiant.usbcameratest7 V/UVCCameraTextureView: onPause:
05-11 13:45:16.725 10289-11244/com.serenegiant.usbcameratest7 V/UVCCameraTextureView: RenderThread#release:
05-11 13:45:16.725 10289-11244/com.serenegiant.usbcameratest7 V/EGLBase: EglSurface:release:
05-11 13:45:16.725 10289-11244/com.serenegiant.usbcameratest7 V/EGLBase: makeDefault:
05-11 13:45:16.725 10289-11244/com.serenegiant.usbcameratest7 V/EGLBase: destroySurface:
[ 05-11 13:45:16.725 10289:11244 D/ ]
Surface destroy: ANDROID_NATIVE_WINDOW_MAGIC
05-11 13:45:16.725 10289-10317/com.serenegiant.usbcameratest7 V/CameraThread: handleClose:
05-11 13:45:16.725 10289-11244/com.serenegiant.usbcameratest7 V/EGLBase: destroySurface:finished
05-11 13:45:16.725 10289-11244/com.serenegiant.usbcameratest7 V/EGLBase: release:
05-11 13:45:16.725 10289-11244/com.serenegiant.usbcameratest7 V/EGLBase: destroyContext:
05-11 13:45:16.725 10289-10317/com.serenegiant.usbcameratest7 V/CameraThread: handleStopRecording:mMuxer=null
05-11 13:45:16.725 10289-10289/com.serenegiant.usbcameratest7 V/UVCCameraTextureView: release:
05-11 13:45:16.725 10289-11245/com.serenegiant.usbcameratest7 D/UVCCameraTextureView: RenderThread finishing
05-11 13:45:16.725 10289-11245/com.serenegiant.usbcameratest7 V/UVCCameraTextureView: RenderThread#release:
05-11 13:45:16.725 10289-11245/com.serenegiant.usbcameratest7 V/GLDrawer2D: deleteTex:
05-11 13:45:16.725 10289-11245/com.serenegiant.usbcameratest7 V/EGLBase: EglSurface:release:
05-11 13:45:16.725 10289-11245/com.serenegiant.usbcameratest7 V/EGLBase: makeDefault:
05-11 13:45:16.725 10289-11245/com.serenegiant.usbcameratest7 V/EGLBase: destroySurface:
[ 05-11 13:45:16.725 10289:11245 D/ ]
Surface destroy: ANDROID_NATIVE_WINDOW_MAGIC
05-11 13:45:16.725 10289-11245/com.serenegiant.usbcameratest7 V/EGLBase: destroySurface:finished
05-11 13:45:16.725 10289-11245/com.serenegiant.usbcameratest7 V/EGLBase: release:
05-11 13:45:16.725 10289-11245/com.serenegiant.usbcameratest7 V/EGLBase: destroyContext:
05-11 13:45:19.325 10289-10289/com.serenegiant.usbcameratest7 V/UVCCameraTextureView: onResume:
05-11 13:45:19.325 10289-10289/com.serenegiant.usbcameratest7 V/UVCCameraTextureView: RenderThread#getHandler:
05-11 13:45:19.325 10289-13137/com.serenegiant.usbcameratest7 D/UVCCameraTextureView: RenderThread started
05-11 13:45:19.325 10289-13137/com.serenegiant.usbcameratest7 V/UVCCameraTextureView: RenderThread#init:
05-11 13:45:19.325 10289-13137/com.serenegiant.usbcameratest7 V/EGLBase: EGLBase:
05-11 13:45:19.325 10289-13137/com.serenegiant.usbcameratest7 V/EGLBase: init:
[ 05-11 13:45:19.325 10289:13137 D/ ]
droid_create_context : config id = 1 conf->NativeVisualID=1
[ 05-11 13:45:19.325 10289:13137 D/ ]
Pixel Format : GGL_PIXEL_FORMAT_RGBA_8888
[ 05-11 13:45:19.325 10289:13137 I/ ]
Requested context : GLES 2.0
[ 05-11 13:45:19.335 603: 603 D/ ]
Surface destroy: ANDROID_NATIVE_WINDOW_MAGIC
05-11 13:45:19.335 10289-13137/com.serenegiant.usbcameratest7 D/EGLBase: EGLContext created, client version 2
05-11 13:45:19.335 10289-13137/com.serenegiant.usbcameratest7 V/EGLBase: makeDefault:
05-11 13:45:19.335 10289-13137/com.serenegiant.usbcameratest7 V/EGLBase: createFromSurface:
05-11 13:45:19.335 10289-13137/com.serenegiant.usbcameratest7 V/EGLBase: EglSurface:
05-11 13:45:19.335 10289-13137/com.serenegiant.usbcameratest7 V/EGLBase: createWindowSurface:nativeWindow=android.graphics.SurfaceTexture@267d32a0
[ 05-11 13:45:19.335 10289:13137 D/ ]
Pixel Format : GGL_PIXEL_FORMAT_RGBA_8888
05-11 13:45:19.335 10289-13137/com.serenegiant.usbcameratest7 V/GLDrawer2D: loadShader:
05-11 13:45:19.355 10289-10289/com.serenegiant.usbcameratest7 V/UVCCameraTextureView: onResume:
05-11 13:45:19.355 10289-13138/com.serenegiant.usbcameratest7 D/UVCCameraTextureView: RenderThread started
05-11 13:45:19.355 10289-10289/com.serenegiant.usbcameratest7 V/UVCCameraTextureView: RenderThread#getHandler:
05-11 13:45:19.355 10289-13138/com.serenegiant.usbcameratest7 V/UVCCameraTextureView: RenderThread#init:
05-11 13:45:19.355 10289-13138/com.serenegiant.usbcameratest7 V/EGLBase: EGLBase:
05-11 13:45:19.355 10289-13138/com.serenegiant.usbcameratest7 V/EGLBase: init:
[ 05-11 13:45:19.355 10289:13138 D/ ]
droid_create_context : config id = 1 conf->NativeVisualID=1
[ 05-11 13:45:19.355 10289:13138 D/ ]
Pixel Format : GGL_PIXEL_FORMAT_RGBA_8888
[ 05-11 13:45:19.355 10289:13138 I/ ]
Requested context : GLES 2.0
05-11 13:45:19.365 10289-13138/com.serenegiant.usbcameratest7 D/EGLBase: EGLContext created, client version 2
05-11 13:45:19.365 10289-13138/com.serenegiant.usbcameratest7 V/EGLBase: makeDefault:
05-11 13:45:19.365 10289-13138/com.serenegiant.usbcameratest7 V/EGLBase: createFromSurface:
05-11 13:45:19.365 10289-13138/com.serenegiant.usbcameratest7 V/EGLBase: EglSurface:
05-11 13:45:19.365 10289-13138/com.serenegiant.usbcameratest7 V/EGLBase: createWindowSurface:nativeWindow=android.graphics.SurfaceTexture@267ce0a8
[ 05-11 13:45:19.365 10289:13138 D/ ]
Pixel Format : GGL_PIXEL_FORMAT_RGBA_8888
05-11 13:45:19.365 10289-13138/com.serenegiant.usbcameratest7 V/GLDrawer2D: loadShader:
05-11 13:45:19.535 10289-10289/com.serenegiant.usbcameratest7 V/UVCCameraTextureView: getPreviewTexture:
05-11 13:45:19.535 10289-10317/com.serenegiant.usbcameratest7 V/CameraThread: handleOpen:
05-11 13:45:19.535 10289-10317/com.serenegiant.usbcameratest7 V/CameraThread: handleClose:
05-11 13:45:19.535 10289-10317/com.serenegiant.usbcameratest7 V/CameraThread: handleStopRecording:mMuxer=null
05-11 13:45:19.535 10289-13138/com.serenegiant.usbcameratest7 I/UVCCameraTextureView: RenderThread#updatePreviewSurface:
05-11 13:45:19.535 10289-13138/com.serenegiant.usbcameratest7 V/GLDrawer2D: initTex:
05-11 13:45:19.535 10289-13138/com.serenegiant.usbcameratest7 V/UVCCameraTextureView: getPreviewSurface:tex_id=1
05-11 13:45:19.675 10289-10317/com.serenegiant.usbcameratest7 I/CameraHandler: supportedSize:{"formats":[{"index":1,"type":6,"default":1,"size":["640x480","320x240","800x600","1024x768","1280x720","640x480"]},{"index":2,"type":4,"default":1,"size":["640x480","320x240","1280x1024","1600x1200","640x480"]}]}
05-11 13:45:19.675 10289-10317/com.serenegiant.usbcameratest7 V/CameraThread: handleStartPreview:
05-11 13:45:19.695 10289-13146/com.serenegiant.usbcameratest7 I/libUVCCamera: [13146*UVCPreview.cpp:492:prepare_preview]:frameSize=(640,480)@MJPEG
05-11 13:45:20.945 10289-13147/com.serenegiant.usbcameratest7 W/libUVCCamera: [13147*UVCPreview.cpp:119:get_frame]:allocate new frame
05-11 13:45:20.945 10289-13146/com.serenegiant.usbcameratest7 W/libUVCCamera: [13146*UVCPreview.cpp:119:get_frame]:allocate new frame
05-11 13:45:37.985 10289-10289/com.serenegiant.usbcameratest7 W/InputEventReceiver: Attempted to finish an input event but the input event receiver has already been disposed.
05-11 13:45:38.635 10289-10289/com.serenegiant.usbcameratest7 D/dalvikvm: GC_FOR_ALLOC freed 4091K, 37% free 7216K/11352K, paused 5ms, total 6ms
05-11 13:45:39.385 10289-10320/com.serenegiant.usbcameratest7 V/CameraThread: handleStopRecording:mMuxer=null
05-11 13:45:39.385 10289-10320/com.serenegiant.usbcameratest7 V/CameraThread: handleStopPreview:
05-11 13:45:39.385 10289-10289/com.serenegiant.usbcameratest7 V/UVCCameraTextureView: onPause:
05-11 13:45:39.385 10289-10289/com.serenegiant.usbcameratest7 V/UVCCameraTextureView: release:
05-11 13:45:39.385 10289-10320/com.serenegiant.usbcameratest7 V/CameraThread: handleClose:
05-11 13:45:39.385 10289-10320/com.serenegiant.usbcameratest7 V/CameraThread: handleStopRecording:mMuxer=null
05-11 13:45:39.385 10289-13137/com.serenegiant.usbcameratest7 D/UVCCameraTextureView: RenderThread finishing
05-11 13:45:39.385 10289-13137/com.serenegiant.usbcameratest7 V/UVCCameraTextureView: RenderThread#release:
05-11 13:45:39.385 10289-13137/com.serenegiant.usbcameratest7 V/EGLBase: EglSurface:release:
05-11 13:45:39.385 10289-10317/com.serenegiant.usbcameratest7 V/CameraThread: handleStopRecording:mMuxer=null
05-11 13:45:39.385 10289-10317/com.serenegiant.usbcameratest7 V/CameraThread: handleStopPreview:
05-11 13:45:39.385 10289-13137/com.serenegiant.usbcameratest7 V/EGLBase: makeDefault:
05-11 13:45:39.385 10289-13137/com.serenegiant.usbcameratest7 V/EGLBase: destroySurface:
[ 05-11 13:45:39.385 10289:13137 D/ ]
Surface destroy: ANDROID_NATIVE_WINDOW_MAGIC
05-11 13:45:39.385 10289-13137/com.serenegiant.usbcameratest7 V/EGLBase: destroySurface:finished
05-11 13:45:39.385 10289-13137/com.serenegiant.usbcameratest7 V/EGLBase: release:
05-11 13:45:39.385 10289-13137/com.serenegiant.usbcameratest7 V/EGLBase: destroyContext:
05-11 13:45:39.435 10289-10289/com.serenegiant.usbcameratest7 V/UVCCameraTextureView: onPause:
05-11 13:45:39.435 10289-10289/com.serenegiant.usbcameratest7 V/UVCCameraTextureView: release:
05-11 13:45:39.435 10289-10317/com.serenegiant.usbcameratest7 V/CameraThread: handleClose:
05-11 13:45:39.435 10289-10317/com.serenegiant.usbcameratest7 V/CameraThread: handleStopRecording:mMuxer=null
05-11 13:45:39.435 10289-13138/com.serenegiant.usbcameratest7 D/UVCCameraTextureView: RenderThread finishing
05-11 13:45:39.435 10289-13138/com.serenegiant.usbcameratest7 V/UVCCameraTextureView: RenderThread#release:
05-11 13:45:39.435 10289-13138/com.serenegiant.usbcameratest7 V/GLDrawer2D: deleteTex:
05-11 13:45:39.435 10289-13138/com.serenegiant.usbcameratest7 V/EGLBase: EglSurface:release:
05-11 13:45:39.435 10289-13138/com.serenegiant.usbcameratest7 V/EGLBase: makeDefault:
05-11 13:45:39.435 10289-13138/com.serenegiant.usbcameratest7 V/EGLBase: destroySurface:
[ 05-11 13:45:39.435 10289:13138 D/ ]
Surface destroy: ANDROID_NATIVE_WINDOW_MAGIC
05-11 13:45:39.435 10289-13138/com.serenegiant.usbcameratest7 V/EGLBase: destroySurface:finished
05-11 13:45:39.435 10289-13138/com.serenegiant.usbcameratest7 V/EGLBase: release:
05-11 13:45:39.435 10289-13138/com.serenegiant.usbcameratest7 V/EGLBase: destroyContext:
05-11 13:45:40.795 10289-10289/com.serenegiant.usbcameratest7 V/UVCCameraTextureView: onResume:
05-11 13:45:40.805 10289-10289/com.serenegiant.usbcameratest7 V/UVCCameraTextureView: RenderThread#getHandler:
05-11 13:45:40.805 10289-13460/com.serenegiant.usbcameratest7 D/UVCCameraTextureView: RenderThread started
05-11 13:45:40.805 10289-13460/com.serenegiant.usbcameratest7 V/UVCCameraTextureView: RenderThread#init:
05-11 13:45:40.805 10289-13460/com.serenegiant.usbcameratest7 V/EGLBase: EGLBase:
05-11 13:45:40.805 10289-13460/com.serenegiant.usbcameratest7 V/EGLBase: init:
[ 05-11 13:45:40.805 10289:13460 D/ ]
droid_create_context : config id = 1 conf->NativeVisualID=1
[ 05-11 13:45:40.805 10289:13460 D/ ]
Pixel Format : GGL_PIXEL_FORMAT_RGBA_8888
[ 05-11 13:45:40.805 10289:13460 I/ ]
Requested context : GLES 2.0
05-11 13:45:40.815 10289-13460/com.serenegiant.usbcameratest7 D/EGLBase: EGLContext created, client version 2
05-11 13:45:40.815 10289-13460/com.serenegiant.usbcameratest7 V/EGLBase: makeDefault:
05-11 13:45:40.815 10289-13460/com.serenegiant.usbcameratest7 V/EGLBase: createFromSurface:
05-11 13:45:40.815 10289-13460/com.serenegiant.usbcameratest7 V/EGLBase: EglSurface:
05-11 13:45:40.815 10289-13460/com.serenegiant.usbcameratest7 V/EGLBase: createWindowSurface:nativeWindow=android.graphics.SurfaceTexture@267d32a0
[ 05-11 13:45:40.815 10289:13460 D/ ]
Pixel Format : GGL_PIXEL_FORMAT_RGBA_8888
05-11 13:45:40.815 10289-13460/com.serenegiant.usbcameratest7 V/GLDrawer2D: loadShader:
05-11 13:45:40.825 10289-10289/com.serenegiant.usbcameratest7 V/UVCCameraTextureView: onResume:
05-11 13:45:40.825 10289-10289/com.serenegiant.usbcameratest7 V/UVCCameraTextureView: RenderThread#getHandler:
05-11 13:45:40.825 10289-13461/com.serenegiant.usbcameratest7 D/UVCCameraTextureView: RenderThread started
05-11 13:45:40.825 10289-13461/com.serenegiant.usbcameratest7 V/UVCCameraTextureView: RenderThread#init:
05-11 13:45:40.825 10289-13461/com.serenegiant.usbcameratest7 V/EGLBase: EGLBase:
05-11 13:45:40.825 10289-13461/com.serenegiant.usbcameratest7 V/EGLBase: init:
[ 05-11 13:45:40.825 10289:13461 D/ ]
droid_create_context : config id = 1 conf->NativeVisualID=1
[ 05-11 13:45:40.825 10289:13461 D/ ]
Pixel Format : GGL_PIXEL_FORMAT_RGBA_8888
[ 05-11 13:45:40.825 10289:13461 I/ ]
Requested context : GLES 2.0
05-11 13:45:40.835 10289-13461/com.serenegiant.usbcameratest7 D/EGLBase: EGLContext created, client version 2
05-11 13:45:40.835 10289-13461/com.serenegiant.usbcameratest7 V/EGLBase: makeDefault:
05-11 13:45:40.835 10289-13461/com.serenegiant.usbcameratest7 V/EGLBase: createFromSurface:
05-11 13:45:40.835 10289-13461/com.serenegiant.usbcameratest7 V/EGLBase: EglSurface:
05-11 13:45:40.835 10289-13461/com.serenegiant.usbcameratest7 V/EGLBase: createWindowSurface:nativeWindow=android.graphics.SurfaceTexture@267ce0a8
[ 05-11 13:45:40.835 10289:13461 D/ ]
Pixel Format : GGL_PIXEL_FORMAT_RGBA_8888
05-11 13:45:40.835 10289-13461/com.serenegiant.usbcameratest7 V/GLDrawer2D: loadShader:
05-11 13:45:40.915 10289-10289/com.serenegiant.usbcameratest7 V/UVCCameraTextureView: getPreviewTexture:
05-11 13:45:40.915 10289-13461/com.serenegiant.usbcameratest7 I/UVCCameraTextureView: RenderThread#updatePreviewSurface:
05-11 13:45:40.915 10289-13461/com.serenegiant.usbcameratest7 V/GLDrawer2D: initTex:
05-11 13:45:40.915 10289-13461/com.serenegiant.usbcameratest7 V/UVCCameraTextureView: getPreviewSurface:tex_id=1
05-11 13:45:40.915 10289-10317/com.serenegiant.usbcameratest7 V/CameraThread: handleOpen:
05-11 13:45:40.915 10289-10317/com.serenegiant.usbcameratest7 V/CameraThread: handleClose:
05-11 13:45:40.915 10289-10317/com.serenegiant.usbcameratest7 V/CameraThread: handleStopRecording:mMuxer=null
05-11 13:45:41.015 10289-10317/com.serenegiant.usbcameratest7 I/CameraHandler: supportedSize:{"formats":[{"index":1,"type":6,"default":1,"size":["640x480","320x240","800x600","1024x768","1280x720","640x480"]},{"index":2,"type":4,"default":1,"size":["640x480","320x240","1280x1024","1600x1200","640x480"]}]}
05-11 13:45:41.015 10289-10317/com.serenegiant.usbcameratest7 V/CameraThread: handleStartPreview:
05-11 13:45:41.045 10289-13469/com.serenegiant.usbcameratest7 I/libUVCCamera: [13469*UVCPreview.cpp:492:prepare_preview]:frameSize=(640,480)@MJPEG
05-11 13:45:42.325 10289-13470/com.serenegiant.usbcameratest7 W/libUVCCamera: [13470*UVCPreview.cpp:119:get_frame]:allocate new frame
05-11 13:45:42.325 10289-13469/com.serenegiant.usbcameratest7 W/libUVCCamera: [13469*UVCPreview.cpp:119:get_frame]:allocate new frame
from uvccamera.
I had the same issue.
The second camera would take either take over, or it would start a blank screen.
Update:
I reverted the current code to a previous commit.
https://github.com/saki4510t/UVCCamera/blob/4be6cab3bef3d2007fe2078d31e561df303fe7b1/usbCameraTest7/src/main/java/com/serenegiant/usbcameratest7/MainActivity.java
This code works fine with dual cams.
Apparently the current code doesn't work with dual camera.
from uvccamera.
Related Issues (20)
- pthread_mutex_lock called on a destroyed mutex
- How to compile this code in Android Studio Flamingo | 2022.2.1
- A patch for USBMonitor.java to avoid crash in USB 3.0 HUB
- Working with FLIR Boson camera
- jpeg_read_scanlines crash
- java.lang.RuntimeException: Unable to start activity ComponentInfo : java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity HOT 1
- How to make zoom of texture ( input frames of camera) in UVCCameraTextureView ? HOT 1
- After multiple attempts to open the UVC camera, it fails to reopen. Assistance is requested HOT 2
- Caused by: org.gradle.internal.resolve.ModuleVersionNotFoundException: Could not find com.serenegiant:common:2.12.5.
- The preview freezes when you press record on the Samsung a54 HOT 1
- MediaRecorder instead of MediaEncoder
- [Security] libjpeg-turbo used in this project is vulnerable
- Can't get started HOT 1
- Android11, RK3568, null pointer dereference HOT 2
- Permission pop-up giving illegal agruement exception in TargetSdk>27
- SQ 29 Camera does not display image HOT 1
- 有人知道如何解决4K以上画质得延迟问题吗?解决成功可以给予报酬。 HOT 1
- Android app crashing when using multiple .aar libraries
- Difference between ( 'Y', '8', ' ', ' ' ) and ('Y', '8', '0', '0') HOT 1
- Execution failed for task ':libuvc:ndkBuild'. HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from uvccamera.