TechNexion USB Camera User Guide
Introduction
This article guides you how to get started using TechNexion USB camera on Windows and Linux.
Supported Camera Modules
| Camera Series | Products |
|---|---|
| VCS | VCS-AR0145 |
| VCI | VCI-AR0144 VCI-AR0234 VCI-AR0521 VCI-AR0522 VCI-AR0821 VCI-AR0822 VCI-AR1335 |
| UVC-VLS3 | UVC-VLS3-AR0144 UVC-VLS3-AR0145 UVC-VLS3-AR0234 UVC-VLS3-AR0521 UVC-VLS3-AR0522 UVC-VLS3-AR0821 UVC-VLS3-AR0822 UVC-VLS3-AR1335 |
More Camera Products Details...
How to use
There are several methods to use the camera when you connect it to a computer or embedded development kit via a USB cable.
Method 1 - Using TechNexion VizionViewer (Windows/Linux)
Method 2 - Using V4L2 Control (Linux)
-
List all devices.
$ v4l2-ctl --list-device
VCI-AR0144-C (usb-xhci-hcd.1.auto-1.2):
/dev/video0
/dev/video1
/dev/media0 -
List camera formats.
$ v4l2-ctl -d /dev/video0 --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
Type: Video Capture
[0]: 'UYVY' (UYVY 4:2:2)
Size: Discrete 1280x800
Interval: Discrete 0.017s (60.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 1280x720
Interval: Discrete 0.017s (60.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x480
Interval: Discrete 0.017s (60.000 fps)
Interval: Discrete 0.033s (30.000 fps)
[1]: 'MJPG' (Motion-JPEG, compressed)
Size: Discrete 1280x800
Interval: Discrete 0.017s (60.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 1280x720
Interval: Discrete 0.017s (60.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x480
Interval: Discrete 0.017s (60.000 fps)
Interval: Discrete 0.033s (30.000 fps) -
List camera v4l2 controls.
$ v4l2-ctl -d /dev/video0 --list-ctrls
User Controls
brightness 0x00980900 (int) : min=0 max=32 step=4 default=16 value=16
contrast 0x00980901 (int) : min=0 max=10 step=1 default=5 value=5
saturation 0x00980902 (int) : min=0 max=80 step=8 default=16 value=16
white_balance_automatic 0x0098090c (bool) : default=1 value=1
gamma 0x00980910 (int) : min=0 max=40 step=1 default=18 value=18
gain 0x00980913 (int) : min=1 max=48 step=1 default=1 value=1
power_line_frequency 0x00980918 (menu) : min=0 max=2 default=0 value=0 (Disabled)
white_balance_temperature 0x0098091a (int) : min=2300 max=15000 step=1 default=5000 value=5000 flags=inactive
sharpness 0x0098091b (int) : min=0 max=64 step=8 default=32 value=32
backlight_compensation 0x0098091c (int) : min=0 max=480 step=8 default=256 value=256
Camera Controls
auto_exposure 0x009a0901 (menu) : min=0 max=3 default=0 value=0 (Auto Mode)
exposure_time_absolute 0x009a0902 (int) : min=1 max=10000 step=1 default=330 value=100 flags=inactive
pan_absolute 0x009a0908 (int) : min=-648000 max=648000 step=3600 default=0 value=0
tilt_absolute 0x009a0909 (int) : min=-648000 max=648000 step=3600 default=0 value=0
zoom_absolute 0x009a090d (int) : min=100 max=800 step=1 default=100 value=100 -
Camera streaming test with UYVY format.
$ v4l2-ctl -d /dev/video0 --set-fmt-video=pixelformat=UYVY,width=1280,height=800 --stream-mmap
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 59.84 fps
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 59.85 fpsnoteUsing "Ctrl+C " to exit v4l2 streaming.
-
Camera streaming test with MJPG format.
$ v4l2-ctl -d /dev/video0 --set-fmt-video=pixelformat=MJPG,width=1280,height=800 --stream-mmap
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 59.84 fps
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 59.85 fpsnoteUsing "Ctrl+C " to exit v4l2 streaming.
Method 3 - Using GStreamer (Linux)
-
List all devices and formats.
$ gst-device-monitor-1.0
Device found:
name : VCI-AR0144-C
class : Video/Source
caps : video/x-raw, format=UYVY, width=1280, height=800, pixel-aspect-ratio=1/1, framerate={ (fraction)60/1, (fraction)30/1 }
video/x-raw, format=UYVY, width=1280, height=720, pixel-aspect-ratio=1/1, framerate={ (fraction)60/1, (fraction)30/1 }
video/x-raw, format=UYVY, width=640, height=480, pixel-aspect-ratio=1/1, framerate={ (fraction)60/1, (fraction)30/1 }
image/jpeg, parsed=true, width=1280, height=800, pixel-aspect-ratio=1/1, framerate={ (fraction)60/1, (fraction)30/1 }
image/jpeg, parsed=true, width=1280, height=720, pixel-aspect-ratio=1/1, framerate={ (fraction)60/1, (fraction)30/1 }
image/jpeg, parsed=true, width=640, height=480, pixel-aspect-ratio=1/1, framerate={ (fraction)60/1, (fraction)30/1 }
properties:
udev-probed = true
device.bus_path = platform-xhci-hcd.1.auto-usb-0:1.2:1.0
sysfs.path = /sys/devices/platform/soc@0/32f10108.usb/38200000.usb/xhci-hcd.1.auto/usb2/2-1/2-1.2/2-1.2:1.0/video4linux/video0
device.bus = usb
device.subsystem = video4linux
device.vendor.id = 3407
device.vendor.name = TechNexion
device.product.id = 0144
device.product.name = VCI-AR0144-C
device.serial = TechNexion_VCI-AR0144-C_000000008E604600A159178868A11A1A
device.capabilities = :capture:
device.api = v4l2
device.path = /dev/video0
v4l2.device.driver = uvcvideo
v4l2.device.card = VCI-AR0144-C
v4l2.device.bus_info = usb-xhci-hcd.1.auto-1.2
v4l2.device.version = 393527 (0x00060137)
v4l2.device.capabilities = 2225078273 (0x84a00001)
v4l2.device.device_caps = 69206017 (0x04200001)
gst-launch-1.0 v4l2src ! ... -
Preview with UYVY format.
$ gst-launch-1.0 v4l2src device=/dev/video0 ! "video/x-raw, format=(string)UYVY, width=(int)1280, height=(int)800" ! videoconvert ! autovideosink sync=false -
Preview with MJPG format.
$ gst-launch-1.0 v4l2src device=/dev/video0 ! "image/jpeg, width=(int)1280, height=(int)800" ! jpegdec ! autovideosink sync=falsenoteGStreamer element
The element depends on your system, so the example may not be suitable for your system.
Troubleshooting
Auto-suspend
Since the camera's standby power consumption is low, the system may disconnect camera through the auto-suspend function as like below.
[86452.959044] usb 2-1.2: new SuperSpeed USB device number 5 using xhci-hcd
[86452.983505] usb 2-1.2: LPM exit latency is zeroed, disabling LPM.
[86453.022662] usb 2-1.2: Found UVC 1.10 device VCI-AR0144-C (3407:0144)
[86453.139540] input: VCI-AR0144-C as /devices/platform/soc@0/32f10108.usb/38200000.usb/xhci-hcd.1.auto/usb2/2-1/2-1.2/2-1.2:1.0/input/input8
[86467.470212] usb 2-1.2: USB disconnect, device number 5
[86468.959511] usb 2-1.2: new SuperSpeed USB device number 6 using xhci-hcd
[86468.983960] usb 2-1.2: LPM exit latency is zeroed, disabling LPM.
[86469.022673] usb 2-1.2: Found UVC 1.10 device VCI-AR0144-C (3407:0144)
[86469.139501] input: VCI-AR0144-C as /devices/platform/soc@0/32f10108.usb/38200000.usb/xhci-hcd.1.auto/usb2/2-1/2-1.2/2-1.2:1.0/input/input9
[86472.078213] usb 2-1.2: USB disconnect, device number 6
You can first check flag of auto-suspend and modify it to turn off this function.
$ cat /sys/module/usbcore/parameters/autosuspend
2
$ echo -1 > /sys/module/usbcore/parameters/autosuspend
After turning off auto-suspend, you need to reconnect the camera.
Floating framerate
Because of the product feature "Designed for Low Light Applications ", the camera will increase exposure time via automatic exposure mode to maintain image quality in low-light environment. You can change the camera to manual exposure mode to keep the framerate. However, if you increase exposure gain in low-light environment, you will see more noise.
$ v4l2-ctl -d /dev/video0 --set-ctrl auto_exposure=1
The other way, you can use VizionViewer™ or VizionCTL to change to AGC mode (Auto gain control, Manual exposure time).
Camera Firmware Issues
If you encounter camera firmware-related problems or need to restore factory settings, please refer to the USB Camera Factory Recondition Tool for detailed instructions on how to recondition and restore your camera to factory defaults.
Camera issue on NVIDIA JetPack
On NVIDIA Jetson platforms, a UVC camera stream may freeze, stop after several frames, or show frame corruption when streaming high-resolution or high-bandwidth video. This issue can be caused by insufficient UVC transfer buffers in the uvcvideo kernel driver.
The solution is to rebuild the uvcvideo kernel module with larger UVC_URBS and UVC_MAX_PACKETS values, then replace the module on the Jetson system.
The following steps replace a Linux kernel module on the target system. Build and install the module on the same Jetson device and JetPack/L4T version where the camera will be used.
Verified Environment
We verified this solution on JetPack 6.2.x. For other JetPack versions, use the same procedure but download the BSP source package that matches the Jetson Linux/L4T version installed on the target device.
The following JetPack 6.2.x packages are verified examples:
| JetPack version | L4T version | BSP source package |
|---|---|---|
| JetPack 6.2 | R36.4.3 | https://developer.nvidia.com/downloads/embedded/l4t/r36_release_v4.3/sources/public_sources.tbz2 |
| JetPack 6.2.1 | R36.4.4 | https://developer.nvidia.com/downloads/embedded/l4t/r36_release_v4.4/sources/public_sources.tbz2 |
For other JetPack/L4T versions, go to the NVIDIA Jetson Linux Archive, open the page for the matching Jetson Linux release, and download Sources > Driver Package (BSP) Sources.
Build and Install uvcvideo Module
- Check the JetPack/L4T version.
$ cat /etc/nv_tegra_release
- Install build dependencies.
$ sudo apt-get update
$ sudo apt-get install -y libssl-dev build-essential pkg-config libncurses-dev lbzip2
- Download and extract the NVIDIA kernel source.
Replace <BSP_SOURCE_URL> with the BSP source URL that matches your L4T version.
$ mkdir -p ~/uvc_driver/build_dir
$ cd ~/uvc_driver
$ wget "<BSP_SOURCE_URL>" -O public_sources.tbz2
$ tar -xf public_sources.tbz2
$ cd Linux_for_Tegra/source/
$ tar -xf kernel_src.tbz2
$ cd kernel/kernel-jammy-src/
- Update the UVC driver buffer settings.
$ sed -i -e '/#define DRIVER_VERSION/ s/"\(.*\)"/"\1-tn1"/' drivers/media/usb/uvc/uvcvideo.h
$ sed -i -e 's/#define UVC_URBS.*/#define UVC_URBS 1000/' drivers/media/usb/uvc/uvcvideo.h
$ sed -i -e 's/#define UVC_MAX_PACKETS.*/#define UVC_MAX_PACKETS 64/' drivers/media/usb/uvc/uvcvideo.h
- Prepare the kernel build configuration.
$ if [ -f /proc/config.gz ]; then \
zcat /proc/config.gz > ~/uvc_driver/build_dir/.config; \
else \
cp /boot/config-$(uname -r) ~/uvc_driver/build_dir/.config; \
fi
$ make ARCH=arm64 O=~/uvc_driver/build_dir olddefconfig
$ make ARCH=arm64 O=~/uvc_driver/build_dir modules_prepare
- Build the UVC driver module.
$ make ARCH=arm64 O=~/uvc_driver/build_dir M=$PWD/drivers/media/usb/uvc modules
After the build completes, the new module should be available at:
drivers/media/usb/uvc/uvcvideo.ko
- Back up the original module and install the rebuilt module.
Make sure the camera application is stopped before replacing the driver.
$ sudo cp -av /lib/modules/$(uname -r)/kernel/drivers/media/usb/uvc/uvcvideo.ko \
/lib/modules/$(uname -r)/kernel/drivers/media/usb/uvc/uvcvideo.ko.backup
$ sudo install -m 0644 drivers/media/usb/uvc/uvcvideo.ko \
/lib/modules/$(uname -r)/kernel/drivers/media/usb/uvc/uvcvideo.ko
$ sudo depmod -a
$ sudo reboot
- Verify the installed module.
After reboot, confirm that the installed uvcvideo module version includes the -tn1 suffix.
$ modinfo /lib/modules/$(uname -r)/kernel/drivers/media/usb/uvc/uvcvideo.ko | grep '^version:'
version: 1.1.1-tn1
Then run a camera streaming test again:
$ v4l2-ctl -d /dev/video0 --stream-mmap --stream-count=100
Reference
Windows Laptop streaming Issue
When using UVC cameras on Windows laptops, intermittent frame freezing may occur during UYVY video streaming. This behavior is caused by Windows power-saving features, such as CPU C-states and USB selective suspend, which can slow down USB interrupt handling.
To resolve this issue, manually disable CPU C-states and USB selective suspend on your Windows system. These settings must be configured before starting the stream to ensure stable performance.
Disable power-saving settings (before streaming):
Download disable_pwr_setting.reg, then run the following commands in PowerShell to apply the registry settings that disable CPU C-states and USB selective suspend:
# Import the registry file silently without confirmation dialog
# Using -Wait ensures the registry update is finished before the next step
Start-Process -FilePath "regedit.exe" -ArgumentList "/s", "disable_pwr_setting.reg" -Wait
# Force Windows to reload the current power scheme to apply changes immediately
powercfg -setactive scheme_current
Restore power-saving settings (after streaming):
Download restore_pwr_setting.reg, then run the following commands to restore the original power settings:
# Import the registry file silently without confirmation dialog
Start-Process -FilePath "regedit.exe" -ArgumentList "/s", "restore_pwr_setting.reg" -Wait
# Force Windows to reload the current power scheme to apply changes immediately
powercfg -setactive scheme_current