Skip to content

Latest commit

 

History

History
108 lines (76 loc) · 3.74 KB

configure.md

File metadata and controls

108 lines (76 loc) · 3.74 KB

Configure

Resolution

Camera capture and resolution exposed is controlled by three parameters:

  • --camera-width and --camera-height define the camera capture resolution
  • --camera-snapshot.height - define height for an aspect ratio scaled resolution for /snapshot (JPEG) output - this might require rescaller and might not always work
  • --camera-video.height - define height for an aspect ratio scaled resolution for /video and /webrtc (H264) output - this might require rescaller and might not always work, this is no larger than --camera-snapshot.height
  • --camera-stream.height - define height for an aspect ratio scaled resolution for /stream (MJPEG) output - this might require rescaller and might not always work, this is no larger than --camera-video.height

The resolution scaling is following the snapshot >= video >= stream:

  • snapshot provides a high quality image for the purpose of timelapses (3Mbps-10Mbps)
  • video is an efficient high-quality H264 video stream (3-10Mbps)
  • stream is an inefficient MJPEG stream requiring significant amount of bandwidth (10-100Mbps)

Example: Raspberry PI v3 Camera (best)

libcamera-still --list-cameras
Available cameras
-----------------
0 : imx708_wide [4608x2592] (/base/soc/i2c0mux/i2c@1/imx708@1a)
    Modes: 'SRGGB10_CSI2P' : 1536x864 [120.13 fps - (0, 0)/4608x2592 crop]
                             2304x1296 [56.03 fps - (0, 0)/4608x2592 crop]
                             4608x2592 [14.35 fps - (0, 0)/4608x2592 crop]

To get the best resolution for the above camera, the --camera-width and --camera-height needs to be configured with the native resolution of camera sensor, only then the resolution can be downscaled.

--camera-width=2304 --camera-height=1296 --camera-snapshot.height=1080 --camera-video.height=720 --camera-stream.height=480

This will result in:

  • camera will capture 2304x1296 a full sensor
  • snapshot be ~1920x1080
  • video be ~1280x720
  • stream be ~640x480

Example: Raspberry PI v3 Camera with cropped output (bad)

If the camera capture is not configured properly the result image will be cropped.

--camera-width=1920 --camera-height=1080 --camera-snapshot.height=1080 --camera-video.height=720 --camera-stream.height=480

This will result in:

  • camera will capture the middle 1920x1080 from the 2304x1296
  • snapshot be ~1920x1080
  • video be ~1280x720
  • stream be ~640x480

List all available controls

You can view all available configuration parameters by adding --log-verbose to one of the above commands, like:

tools/libcamera_camera.sh --camera-list_options ...

Or navigate to http://<ip>:8080/option while running.

Depending on control they have to be used for camera, ISP, or JPEG or H264 codec:

# specify camera option
--camera-options=brightness=1000

# specify ISP option
--camera-isp.options=digital_gain=1000

# specify H264 option
--camera-video.options=bitrate=10000000

# specify snapshot option
--camera-snapshot.options=compression_quality=60
--camera-stream.options=compression_quality=60

List all available formats and use proper one

You might list all available capture formats for your camera:

v4l2-ctl -d /dev/video0 --list-formats-ext

Some of them might be specified to streamer:

tools/*_camera.sh --camera-format=RG10 # Bayer 10 packed
tools/*_camera.sh --camera-format=YUYV
tools/*_camera.sh --camera-format=MJPEG
tools/*_camera.sh --camera-format=H264 # This is unstable due to h264 key frames support

It is advised to always use:

  • for libcamera the --camera-type=libcamera --camera-format=YUYV (better image quality) or --camera-format=YUV420 (better performance)
  • for USB cameras the --camera-type=libcamera --camera-format=MJPEG