Files
orin-nano-env-setup/docs/impl/reports/USB-CAMERA.md
T

5.5 KiB
Raw Blame History

type, date
type date
report 2026-10-11

USB camera (IMX662, Sunplus UVC bridge)

First look at the camera on the car Orin: what it presents over USB, what it actually delivers, and what that means for recording and for the tablet link. Indoor bench measurements, camera pointing at a lit ceiling.

Short version

  • A generic UVC webcam: uvcvideo and snd-usb-audio bind with no setup, /dev/video0 (capture) and /dev/video1 (metadata), plus a USB microphone.
  • MJPEG only at useful rates (up to 1920×1080 at 60 fps, nominally). Raw YUYV is 5 fps at 1080p. No H.264 from the camera, and the Orin Nano has no hardware video encoder (no NVENC; no nvhost-*enc device nodes).
  • The frame rate follows the light. With auto exposure indoors it gives 17–20 fps whatever was requested; with a fixed 10 ms exposure it gives 27.6 fps at 1080p30 and 55.9 fps at 720p60 (but a near-black image indoors).
  • MJPEG is heavy: about 245 KB per 1080p frame and 113 KB per 720p frame, for this scene. At a full 30 fps that is ~7.3 MB/s and ~3.4 MB/s. A busier road scene will likely be larger.
  • Software H.264 works: 1080p MJPEG → jpegdec → x264enc ultrafast at 6 Mbit/s took 1.3 cores at 19 fps (≈ 2 cores at 30 fps, of 6); veryfast took 2.4 cores. Output ~0.5 MB/s for this static scene.

Device

Field Value
USB ID 1bcf:2d4f, Sunplus Innovation Technology, product "USB Camera 1080P"
Sensor Sony IMX662 per the seller (1/2.8", STARVIS 2). Not visible over USB: the bridge identifies only itself
Speed USB 2.0 high-speed (480 Mbit/s)
Topology Bus 1, behind the carrier board's internal USB 2.0 hub, shared with the SIM7600 modem
Interfaces UVC video (/dev/video0 capture, /dev/video1 metadata); UAC audio (ALSA card U1080P, capture only: S16_LE, 2 channels, 48 kHz)
Driver In-tree uvcvideo, snd-usb-audio; nothing to build
Documentation None beyond the seller's listing; everything here is from the device itself

Formats

Format Sizes Frame rates
MJPEG 1920×1080, 1280×960, 1280×720, 960×536, 800×600, 640×480, 320×240 60, 30, 25, 20, 15, 10, 5 at every size
YUYV 4:2:2 1920×1080, 1280×960 5, 2
1280×720, 960×536 10, 5, 2
800×600 20 and below
640×480 30 and below
320×240 60 and below

Controls (v4l2-ctl -d /dev/video0 --list-ctrls-menus)

Brightness, contrast, saturation, hue, gamma, gain, sharpness, backlight compensation; white balance auto or 2800–6500 K; power-line frequency (currently 60 Hz, default 50 Hz: right for western Japan, flicker otherwise); auto exposure (aperture priority) or manual, exposure 1–10000 in 100 µs units; pan, tilt and zoom (digital).

UVC controls reset when the camera is replugged or re-enumerated: whatever captures from it should set them on open, not rely on the last session.

Measurements

Frame rate and MJPEG size

Mode requested Exposure Delivered MJPEG per frame Rate
1920×1080 @ 30 auto 17.5 fps 243 KB 4.35 MB/s
1920×1080 @ 60 auto 19.6 fps 252 KB 5.05 MB/s
1280×720 @ 30 auto 19.1 fps 113 KB 2.22 MB/s
1280×720 @ 60 auto 19.6 fps 113 KB 2.28 MB/s
1920×1080 @ 30 fixed 10 ms 27.6 fps 61 KB (dark) —
1280×720 @ 60 fixed 10 ms 55.9 fps 29 KB (dark) —

Frame size depends on the scene and the exposure: a dark frame compresses to a quarter of a lit one. Daylight in a car should allow full frame rate with auto exposure; at night the IMX662's low-light sensitivity is the reason to have it, and the frame rate will drop.

Software H.264 (1080p, 200 frames, camera-limited at ~19 fps)

v4l2src ! image/jpeg,1920x1080 ! jpegdec ! videoconvert ! x264enc tune=zerolatency bitrate=6000 key-int-max=60 ! h264parse ! matroskamux

speed-preset CPU (whole system, idle baseline 0.01) Output
ultrafast 1.29 cores at 18.8 fps 5.2 MB per 10.6 s ≈ 0.49 MB/s
veryfast 2.40 cores at 19.0 fps 5.2 MB per 10.5 s ≈ 0.49 MB/s

The hardware JPEG decoder (nvjpegdec) rejected the camera's frames (no valid frames found). UVC MJPEG commonly omits the Huffman tables, which jpegdec fills in and NVIDIA's decoder does not; not investigated further. The CPU figures include software JPEG decoding.

What it means

Use Fits?
Live view on the tablet (link: ~5 MB/s Orin → tablet, paced; app-flutter docs/impl/reports/LINK-TEST-2026-10-11.md) 720p MJPEG passthrough at 30 fps, ~3.4 MB/s: yes, no CPU. 1080p MJPEG at 30 fps, ~7.3 MB/s: no. H.264 at any size: yes, at 1.3–2 cores
Recording (recorder bound: 50 GB) MJPEG at 1080p30 is ~26 GB per hour: no. H.264 at 6 Mbit/s is ~2.7 GB per hour: yes, ~18 hours in the bound
Inference Frames are local; decoding is the cost. No constraint from the link
ASR microphone Possible, as a USB capture device on the Orin; quality and placement untested

The USB 2.0 hub it shares with the modem has headroom: 7.3 MB/s of MJPEG is ~60 Mbit/s of 480, and LTE Cat 4 tops out at 150 Mbit/s down.

Open

  • Daylight and night frame rates and frame sizes in the car, on a real road scene.
  • Mounting and orientation (the image can be flipped in the pipeline; the camera has no flip control).
  • Whether the bridge's MJPEG can be made acceptable to nvjpegdec (inserting standard Huffman tables), which would free about a core.
  • The microphone: quality, and whether it is the ASR input (Whisper takes 16 kHz mono; resampling is trivial).