Skip to content

Instantly share code, notes, and snippets.

@andrewssobral
Last active August 11, 2021 21:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save andrewssobral/12cf5e1356647373f2f3e924869865e9 to your computer and use it in GitHub Desktop.
Save andrewssobral/12cf5e1356647373f2f3e924869865e9 to your computer and use it in GitHub Desktop.
Jetson-Nano GStreamer OpenCV Plugins

Basic tutorial 10: GStreamer tools

# (optional)
$ export GST_PLUGIN_PATH=/usr/lib/aarch64-linux-gnu/gstreamer-1.0:/usr/lib/aarch64-linux-gnu/gstreamer-1.0/deepstream

$ apt list --installed | grep streamer

To install GStreamer-1.0

https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide/accelerated_gstreamer.html#wwpID0E0A40HA

• Install GStreamer-1.0 on the platform with the following commands:

sudo add-apt-repository universe
sudo add-apt-repository multiverse
sudo apt-get update
sudo apt-get install gstreamer1.0-tools gstreamer1.0-alsa \
  gstreamer1.0-plugins-base gstreamer1.0-plugins-good \
  gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly \
  gstreamer1.0-libav
sudo apt-get install libgstreamer1.0-dev \
  libgstreamer-plugins-base1.0-dev \
  libgstreamer-plugins-good1.0-dev \
  libgstreamer-plugins-bad1.0-dev

To check the GStreamer-1.0 version

• Check the GStreamer-1.0 version with the following command:

gst-inspect-1.0 --version
v4l2-ctl --list-formats-ext
$ sudo apt install libgstreamer1.0-0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good  \
  gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav libgstrtspserver-1.0-0  \
  gstreamer1.0-doc gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl \
  gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio libgstreamer1.0-dev \
  libgstreamer-plugins-base1.0-dev libgstrtspserver-1.0-dev

$ sudo apt install gstreamer1.0-opencv
$ dpkg -L gstreamer1.0-plugins-base
$ dpkg -L gstreamer1.0-plugins-bad
$ dpkg -L libgstreamer-plugins-bad1.0-dev
$ dpkg -L libgstreamer-opencv1.0-0
$ dpkg -L gstreamer1.0-opencv
$ gst-launch-1.0 \
  v4l2src device=/dev/video0 ! \
  videoconvert ! \
  ximagesink
$ gst-launch-1.0 \
  v4l2src device=/dev/video0 ! jpegdec ! video/x-raw,framerate=30/1,width=640,height=480 ! \
  videoconvert ! \
  xvimagesink

$ gst-launch-1.0 \
  v4l2src device=/dev/video1 ! video/x-raw,framerate=30/1,width=640,height=480 ! \
  videoconvert ! \
  xvimagesink

dual show:

gst-launch-1.0 \
  v4l2src device=/dev/video1 ! video/x-raw,framerate=30/1,width=640,height=480 ! \
  videoconvert ! \
  tee name=t ! \
  queue ! \
  ximagesink t. ! \
  queue ! \
  ximagesink

face detection

$ gst-inspect-1.0 facedetect

$ gst-launch-1.0 \
  autovideosrc ! video/x-raw,width=640,height=480 ! \
  videoconvert ! \
  facedetect min-size-width=60 min-size-height=60 profile=/usr/share/opencv4/haarcascades/haarcascade_frontalface_default.xml ! \
  videoconvert ! \
  xvimagesink

$ gst-launch-1.0 \
  v4l2src device=/dev/video0 ! jpegdec ! video/x-raw,framerate=30/1,width=640,height=480 ! \
  videoconvert ! \
  facedetect min-size-width=60 min-size-height=60 profile=/usr/share/opencv4/haarcascades/haarcascade_frontalface_default.xml ! \
  videoconvert ! \
  xvimagesink

$ gst-launch-1.0 \
  v4l2src device=/dev/video1 ! video/x-raw,framerate=30/1,width=640,height=480 ! \
  videoconvert ! \
  facedetect min-size-width=60 min-size-height=60 profile=/usr/share/opencv4/haarcascades/haarcascade_frontalface_default.xml ! \
  videoconvert ! \
  xvimagesink

face detection to file

$ gst-launch-1.0 \
  v4l2src device=/dev/video0 ! jpegdec ! video/x-raw,framerate=30/1,width=640,height=480 ! \
  videoconvert ! \
  facedetect min-size-width=60 min-size-height=60 profile=/usr/share/opencv4/haarcascades/haarcascade_frontalface_default.xml ! \
  videoconvert ! \
  nvvidconv ! 'video/x-raw(memory:NVMM),format=NV12' ! \
  omxh264enc ! \
  qtmux ! \
  filesink location=cam_usb.mp4 -e

$ gst-launch-1.0 \
  v4l2src device=/dev/video1 ! video/x-raw,framerate=30/1,width=640,height=480 ! \
  videoconvert ! \
  facedetect min-size-width=60 min-size-height=60 profile=/usr/share/opencv4/haarcascades/haarcascade_frontalface_default.xml ! \
  videoconvert ! \
  nvvidconv ! 'video/x-raw(memory:NVMM),format=NV12' ! \
  omxh264enc ! \
  qtmux ! \
  filesink location=cam_pseye.mp4 -e

foreground segmentation

$ gst-inspect-1.0 segmentation
$ GST_DEBUG=5 gst-inspect-1.0 segmentation

$ gst-launch-1.0 \
  v4l2src device=/dev/video0 ! jpegdec ! video/x-raw,framerate=30/1,width=640,height=480 ! \
  videoconvert ! \
  segmentation test-mode=true method=2 ! \
  videoconvert ! \
  ximagesink

$ gst-launch-1.0 \
  v4l2src device=/dev/video1 ! video/x-raw,framerate=30/1,width=640,height=480 ! \
  videoconvert ! \
  segmentation test-mode=true method=2 ! \
  videoconvert ! \
  ximagesink

$ gst-launch-1.0 \
  v4l2src device=/dev/video1 ! video/x-raw,framerate=30/1,width=640,height=480 ! \
  videoconvert ! \
  tee name=t ! \
  queue ! \
  ximagesink t. ! \
  queue ! \
  videoconvert ! \
  segmentation test-mode=true method=2 ! \
  videoconvert ! \
  ximagesink
$ gst-launch-1.0 videotestsrc ! videoconvert ! autovideosink

$ gst-launch-1.0 videotestsrc pattern=11 ! videoconvert ! autovideosink
$ gst-launch-1.0 videotestsrc pattern=ball ! videoconvert ! autovideosink

$ gst-discoverer-1.0 https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm -v

$ gst-launch-1.0 playbin uri=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm

$ gst-launch-1.0 souphttpsrc location=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm ! decodebin ! autovideosink

$ gst-launch-1.0 audiotestsrc ! audioconvert ! autoaudiosink
$ gst-launch-1.0 audiotestsrc ! identity drop-probability=0.1 ! audioconvert ! autoaudiosink
$ gst-launch-1.0 \
  uridecodebin uri=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm ! \
  audioresample ! 'audio/x-raw,rate=4000' ! \
  audioconvert ! \
  autoaudiosink

From Youtube:

Live:

$ youtube-dl --list-formats "https://www.youtube.com/watch?v=EXvKXsmAmPg"
# [youtube] EXvKXsmAmPg: Downloading webpage
# [youtube] EXvKXsmAmPg: Downloading m3u8 information
# [youtube] EXvKXsmAmPg: Downloading MPD manifest
# [info] Available formats for EXvKXsmAmPg:
# format code  extension  resolution note
# 91           mp4        256x144     290k , avc1.42c00b, 15.0fps, mp4a.40.5
# 92           mp4        426x240     546k , avc1.4d4015, 30.0fps, mp4a.40.5
# 93           mp4        640x360    1209k , avc1.4d401e, 30.0fps, mp4a.40.2
# 94           mp4        854x480    1568k , avc1.4d401f, 30.0fps, mp4a.40.2
# 95           mp4        1280x720   2969k , avc1.4d401f, 30.0fps, mp4a.40.2
# 96           mp4        1920x1080  5420k , avc1.640028, 30.0fps, mp4a.40.2 (best)

$ youtube-dl -f 93 --get-url "https://www.youtube.com/watch?v=EXvKXsmAmPg"
# https://manifest.googlevideo.com/api/manifest/hls_playlist/expire/1628735515/ei/uzMUYc2WD6bYxN8Pvu6lwAM/ip/78.199.116.24/id/EXvKXsmAmPg.1/itag/93/source/yt_live_broadcast/requiressl/yes/ratebypass/yes/live/1/sgoap/gir%3Dyes%3Bitag%3D140/sgovp/gir%3Dyes%3Bitag%3D134/hls_chunk_host/rr11---sn-4gxx-25gel.googlevideo.com/playlist_duration/30/manifest_duration/30/vprv/1/playlist_type/DVR/initcwndbps/5730/mh/NL/mm/44/mn/sn-4gxx-25gel/ms/lva/mv/m/mvi/11/nh/EAE/pl/11/dover/11/keepalive/yes/fexp/24001373,24007246/mt/1628713484/sparams/expire,ei,ip,id,itag,source,requiressl,ratebypass,live,sgoap,sgovp,playlist_duration,manifest_duration,vprv,playlist_type/sig/AOq0QJ8wRgIhAMxVe7WlECLwgMHvkW2a5NBNTBNaZEjW8wuiNYu3cAIgAiEAyaxtqU86WJrcHu8-C8NHHc8vbOxBbKBhni5L_OKO-1I%3D/lsparams/hls_chunk_host,initcwndbps,mh,mm,mn,ms,mv,mvi,nh,pl/lsig/AG3C_xAwRgIhAKdPrwncfHstku3DzKBTmMyUtSMh_9ZLyJzYRwjR6B4QAiEA-0gI5m9FTT0dHasxZJtUoebPUhAkYnpjdhvbZzu2b5o%3D/playlist/index.m3u8

# Requirements:
# On mac/osx: brew install gst-plugins-bad
# https://formulae.brew.sh/formula/gst-plugins-bad#default

$ gst-inspect-1.0 | grep hls  
# hls:  hlssink2: HTTP Live Streaming sink
# hls:  hlssink: HTTP Live Streaming sink
# hls:  hlsdemux: HLS Demuxer
# typefindfunctions: application/x-hls: m3u8

$ brew info gstreamer
# gstreamer: stable 1.18.4 (bottled), HEAD
# Development framework for multimedia applications
# https://gstreamer.freedesktop.org/

$ gst-launch-1.0 souphttpsrc is-live=true \
  location="$(youtube-dl -f 93 --get-url "https://www.youtube.com/watch?v=EXvKXsmAmPg")" ! \
  decodebin ! autovideosink

$ gst-launch-1.0 souphttpsrc is-live=true \
  location="$(youtube-dl -f 93 --get-url "https://www.youtube.com/watch?v=EXvKXsmAmPg")" ! \
  decodebin ! filesink location=output.mp4 -e

$ gst-launch-1.0 souphttpsrc is-live=true \
  location="$(youtube-dl -f 95 --get-url "https://www.youtube.com/watch?v=EXvKXsmAmPg")" ! \
  decodebin ! videoconvert ! video/x-raw,framerate=30/1,width=1280,height=720 ! autovideosink

$ gst-launch-1.0 souphttpsrc is-live=true \
  location="$(youtube-dl -f 95 --get-url "https://www.youtube.com/watch?v=EXvKXsmAmPg")" ! \
  decodebin ! videoscale ! video/x-raw,width=1280,height=720 ! videoconvert ! autovideosink

$ gst-discoverer-1.0 "$(youtube-dl -f 95 --get-url "https://www.youtube.com/watch?v=EXvKXsmAmPg")" -v
# Analyzing https://manifest.googlevideo.com/api/manifest/hls_playlist/expire/1628736982/ei/djkUYYPtFK2EvdIP6OGKmAM/ip/78.199.116.24/id/EXvKXsmAmPg.1/itag/95/source/yt_live_broadcast/requiressl/yes/ratebypass/yes/live/1/sgoap/gir%3Dyes%3Bitag%3D140/sgovp/gir%3Dyes%3Bitag%3D136/hls_chunk_host/rr11---sn-4gxx-25gel.googlevideo.com/playlist_duration/30/manifest_duration/30/vprv/1/playlist_type/DVR/initcwndbps/4920/mh/NL/mm/44/mn/sn-4gxx-25gel/ms/lva/mv/m/mvi/11/nh/EAE/pl/11/dover/11/keepalive/yes/fexp/24001373,24007246/mt/1628714437/sparams/expire,ei,ip,id,itag,source,requiressl,ratebypass,live,sgoap,sgovp,playlist_duration,manifest_duration,vprv,playlist_type/sig/AOq0QJ8wRQIgRpWD2dcdOrTODacu-9DVPPDdbdRU7OeUuQatOxyLqkkCIQCL-FnMZ59DFSLqE7RE-qF2TP_tj488nuh4TAiYLGHhyA%3D%3D/lsparams/hls_chunk_host,initcwndbps,mh,mm,mn,ms,mv,mvi,nh,pl/lsig/AG3C_xAwRQIhAO9h6Ul77CXBn0tJa828PMpzJ95guFk2FfGdLT7sDUdPAiAQecdr6E6GoRByY3fF1uOwZMAOt2Pm6AWjv8pMbiRzDQ%3D%3D/playlist/index.m3u8
# Done discovering https://manifest.googlevideo.com/api/manifest/hls_playlist/expire/1628736982/ei/djkUYYPtFK2EvdIP6OGKmAM/ip/78.199.116.24/id/EXvKXsmAmPg.1/itag/95/source/yt_live_broadcast/requiressl/yes/ratebypass/yes/live/1/sgoap/gir%3Dyes%3Bitag%3D140/sgovp/gir%3Dyes%3Bitag%3D136/hls_chunk_host/rr11---sn-4gxx-25gel.googlevideo.com/playlist_duration/30/manifest_duration/30/vprv/1/playlist_type/DVR/initcwndbps/4920/mh/NL/mm/44/mn/sn-4gxx-25gel/ms/lva/mv/m/mvi/11/nh/EAE/pl/11/dover/11/keepalive/yes/fexp/24001373,24007246/mt/1628714437/sparams/expire,ei,ip,id,itag,source,requiressl,ratebypass,live,sgoap,sgovp,playlist_duration,manifest_duration,vprv,playlist_type/sig/AOq0QJ8wRQIgRpWD2dcdOrTODacu-9DVPPDdbdRU7OeUuQatOxyLqkkCIQCL-FnMZ59DFSLqE7RE-qF2TP_tj488nuh4TAiYLGHhyA%3D%3D/lsparams/hls_chunk_host,initcwndbps,mh,mm,mn,ms,mv,mvi,nh,pl/lsig/AG3C_xAwRQIhAO9h6Ul77CXBn0tJa828PMpzJ95guFk2FfGdLT7sDUdPAiAQecdr6E6GoRByY3fF1uOwZMAOt2Pm6AWjv8pMbiRzDQ%3D%3D/playlist/index.m3u8

Properties:
  Duration: 99:99:99.999999999
  Seekable: yes
  Live: no
  Tags: 
      audio codec: MPEG-4 AAC
      video codec: H.264
  container: application/x-hls
    container: video/mpegts, systemstream=(boolean)true, packetsize=(int)188
      video: video/x-h264, stream-format=(string)avc, pixel-aspect-ratio=(fraction)1/1, width=(int)1280, height=(int)720, framerate=(fraction)30/1, chroma-format=(string)4:2:0, bit-depth-luma=(uint)8, bit-depth-chroma=(uint)8, colorimetry=(string)bt709, parsed=(boolean)true, alignment=(string)au, profile=(string)main, level=(string)3.1, codec_data=(buffer)014d401fffe1001c674d401fda014016ec05a808080a000003000200000300781e30654001000468ef3c80
        Tags:
          video codec: H.264
        
        Codec:
          video/x-h264, stream-format=(string)avc, pixel-aspect-ratio=(fraction)1/1, width=(int)1280, height=(int)720, framerate=(fraction)30/1, chroma-format=(string)4:2:0, bit-depth-luma=(uint)8, bit-depth-chroma=(uint)8, colorimetry=(string)bt709, parsed=(boolean)true, alignment=(string)au, profile=(string)main, level=(string)3.1, codec_data=(buffer)014d401fffe1001c674d401fda014016ec05a808080a000003000200000300781e30654001000468ef3c80
        Stream ID: 3ae4ee10e2467a4e9905e13df83e63f2173c5258cc4f882b1a3663043927cad0/src_0:1/00000100
        Width: 1280
        Height: 720
        Depth: 24
        Frame rate: 30/1
        Pixel aspect ratio: 1/1
        Interlaced: false
        Bitrate: 0
        Max bitrate: 0
      audio: audio/mpeg, framed=(boolean)true, mpegversion=(int)4, level=(string)2, base-profile=(string)lc, profile=(string)lc, rate=(int)44100, channels=(int)2, stream-format=(string)adts
        Tags:
          audio codec: MPEG-4 AAC
        
        Codec:
          audio/mpeg, framed=(boolean)true, mpegversion=(int)4, level=(string)2, base-profile=(string)lc, profile=(string)lc, rate=(int)44100, channels=(int)2, stream-format=(string)adts
        Stream ID: 3ae4ee10e2467a4e9905e13df83e63f2173c5258cc4f882b1a3663043927cad0/src_0:1/00000101
        Language: <unknown>
        Channels: 2 (front-left, front-right)
        Sample rate: 44100
        Depth: 16
        Bitrate: 0
        Max bitrate: 0

Raspberry Pi v3

# enable camera on raspi-config by
sudo raspi-config

# test capture
raspivid -w 1024 -h 768 -fps 30 --vflip -f -t 0

# test gstreamer
gst-launch-1.0 \
  v4l2src device=/dev/video0 ! video/x-raw,width=640,height=480 ! \
  videoconvert ! \
  videoflip method=2 ! \
  ximagesink

gst-launch-1.0 \
  v4l2src device=/dev/video0 ! video/x-raw,width=320,height=240 ! \
  videoconvert ! \
  videoflip method=2 ! \
  videoconvert ! \
  segmentation test-mode=true method=2 ! \
  videoconvert ! \
  ximagesink
$ raspivid --help

"raspivid" Camera App (commit 4a0a19b88b43 Tainted)

Display camera output to display, and optionally saves an H264 capture at requested bitrate


usage: raspivid [options]

Image parameter commands

-b, --bitrate   : Set bitrate. Use bits per second (e.g. 10MBits/s would be -b 10000000)
-t, --timeout   : Time (in ms) to capture for. If not specified, set to 5s. Zero to disable
-d, --demo      : Run a demo mode (cycle through range of camera options, no capture)
-fps, --framerate       : Specify the frames per second to record
-e, --penc      : Display preview image *after* encoding (shows compression artifacts)
-g, --intra     : Specify the intra refresh period (key frame rate/GoP size). Zero to produce an initial I-frame and then just P-frames.
-pf, --profile  : Specify H264 profile to use for encoding
-td, --timed    : Cycle between capture and pause. -cycle on,off where on is record time and off is pause time in ms
-s, --signal    : Cycle between capture and pause on Signal
-k, --keypress  : Cycle between capture and pause on ENTER
-i, --initial   : Initial state. Use 'record' or 'pause'. Default 'record'
-qp, --qp       : Quantisation parameter. Use approximately 10-40. Default 0 (off)
-ih, --inline   : Insert inline headers (SPS, PPS) to stream
-sg, --segment  : Segment output file in to multiple files at specified interval <ms>
-wr, --wrap     : In segment mode, wrap any numbered filename back to 1 when reach number
-sn, --start    : In segment mode, start with specified segment number
-sp, --split    : In wait mode, create new output file for each start event
-c, --circular  : Run encoded data through circular buffer until triggered then save
-x, --vectors   : Output filename <filename> for inline motion vectors
-if, --irefresh : Set intra refresh type
-fl, --flush    : Flush buffers in order to decrease latency
-pts, --save-pts        : Save Timestamps to file for mkvmerge
-cd, --codec    : Specify the codec to use - H264 (default) or MJPEG
-lev, --level   : Specify H264 level to use for encoding
-r, --raw       : Output filename <filename> for raw video
-rf, --raw-format       : Specify output format for raw video. Default is yuv
-l, --listen    : Listen on a TCP socket
-stm, --spstimings      : Add in h.264 sps timings
-sl, --slices   : Horizontal slices per frame. Default 1 (off)


H264 Profile options :
baseline,main,high

H264 Level options :
4,4.1,4.2

H264 Intra refresh options :
cyclic,adaptive,both,cyclicrows

Raw output format options :
yuv,rgb,gray

Raspivid allows output to a remote IPv4 host e.g. -o tcp://192.168.1.2:1234or -o udp://192.168.1.2:1234
To listen on a TCP port (IPv4) and wait for an incoming connection use the -l option
e.g. raspivid -l -o tcp://0.0.0.0:3333 -> bind to all network interfaces,
raspivid -l -o tcp://192.168.1.1:3333 -> bind to a certain local IPv4 port

Common Settings commands

-?, --help      : This help information
-w, --width     : Set image width <size>
-h, --height    : Set image height <size>
-o, --output    : Output filename <filename> (to write to stdout, use '-o -'). If not specified, no file is saved
-v, --verbose   : Output verbose information during run
-cs, --camselect        : Select camera <number>. Default 0
-md, --mode     : Force sensor mode. 0=auto. See docs for other modes available
-gps, --gpsdexif        : Apply real-time GPS information to output (e.g. EXIF in JPG, annotation in video (requires libgps.so.23)

Preview parameter commands

-p, --preview   : Preview window settings <'x,y,w,h'>
-f, --fullscreen        : Fullscreen preview mode
-op, --opacity  : Preview window opacity (0-255)
-n, --nopreview : Do not display a preview window
-dn, --dispnum  : Display on which to display the preview window (dispmanx/tvservice numbering)

Image parameter commands

-sh, --sharpness        : Set image sharpness (-100 to 100)
-co, --contrast : Set image contrast (-100 to 100)
-br, --brightness       : Set image brightness (0 to 100)
-sa, --saturation       : Set image saturation (-100 to 100)
-ISO, --ISO     : Set capture ISO
-vs, --vstab    : Turn on video stabilisation
-ev, --ev       : Set EV compensation - steps of 1/6 stop
-ex, --exposure : Set exposure mode (see Notes)
-fli, --flicker : Set flicker avoid mode (see Notes)
-awb, --awb     : Set AWB mode (see Notes)
-ifx, --imxfx   : Set image effect (see Notes)
-cfx, --colfx   : Set colour effect (U:V)
-mm, --metering : Set metering mode (see Notes)
-rot, --rotation        : Set image rotation (0, 90, 180, or 270)
-hf, --hflip    : Set horizontal flip
-vf, --vflip    : Set vertical flip
-roi, --roi     : Set region of interest (x,y,w,d as normalised coordinates [0.0-1.0])
-ss, --shutter  : Set shutter speed in microseconds
-awbg, --awbgains       : Set AWB gains - AWB mode must be off
-drc, --drc     : Set DRC Level (see Notes)
-st, --stats    : Force recomputation of statistics on stills capture pass
-a, --annotate  : Enable/Set annotate flags or text
-3d, --stereo   : Select stereoscopic mode
-dec, --decimate        : Half width/height of stereo image
-3dswap, --3dswap       : Swap camera order for stereoscopic
-ae, --annotateex       : Set extra annotation parameters (text size, text colour(hex YUV), bg colour(hex YUV), justify, x, y)
-ag, --analoggain       : Set the analog gain (floating point)
-dg, --digitalgain      : Set the digital gain (floating point)
-set, --settings        : Retrieve camera settings and write to stdout
-fw, --focus    : Draw a window with the focus FoM value on the image.


Notes

Exposure mode options :
off,auto,night,nightpreview,backlight,spotlight,sports,snow,beach,verylong,fixedfps,antishake,fireworks

Flicker avoid mode options :
off,auto,50hz,60hz

AWB mode options :
off,auto,sun,cloud,shade,tungsten,fluorescent,incandescent,flash,horizon,greyworld

Image Effect mode options :
none,negative,solarise,sketch,denoise,emboss,oilpaint,hatch,gpen,pastel,watercolour,film,blur,saturation,colourswap,washedout,posterise,colourpoint,colourbalance,cartoon

Metering Mode options :
average,spot,backlit,matrix

Dynamic Range Compression (DRC) options :
off,low,med,high
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment