Jetson TX2 - GStreamer - nvgstcapture-1.0

From RidgeRun Developer Wiki



Previous: GStreamer/VP8 Index Next: GStreamer/Example pipelines for Jetpack 4.2+





nvgstcapture-1.0

This is an application based on GStreamer and OMX to capture, encode and save the video to the filesystem, and exposes several application options. The source code is not released by NVIDIA yet but they are planning to release it in future versions of Linux 4 Tegra (L4T). For further reference, you can check the NVIDIA Embedded Computing Forum.

nvidia@tegra-ubuntu:~$ nvgstcapture-1.0 --help
Encoder null, cannot set bitrate!
Encoder Profile = Baseline
Usage:
  nvgstcapture-1.0 [OPTION...] Nvidia GStreamer Camera Model Test

Help Options:
  -h, --help                         Show help options
  --help-all                         Show all help options
  --help-gst                         Show GStreamer Options

Application Options:
  --prev-res                         Preview width & height. USB Range: 0 to 12 (5632x4224) and CSI Range: 2 to 12 (5632x4224) e.g., --prev-res=3
  --cus-prev-res                     Custom Preview width & height [for CSI only] e.g., --cus-prev-res=1920x1080
  --image-res                        Image width & height. Range: 0 to 12 (5632x4224) e.g., --image-res=3
  --video-res                        Video width & height. Range: 0 to 9 (3896x2192) e.g., --video-res=3
  -m, --mode                         Capture mode value (1=still 2=video)
  -v, --video-enc                    Video encoder type (0=h264[HW] 1=vp8[HW] 2=h265[HW] 3=vp9[HW])
  -b, --enc-bitrate                  Video encoding Bit-rate(in bytes) e.g., --enc-bitrate=4000000
  --enc-profile                      Video encoder profile (Only for H.264) (0=Baseline, 1=Main, 2=High)
  -J, --image-enc                    Image encoder type (0=jpeg_SW[jpegenc] 1=jpeg_HW[nvjpegenc])
  -k, --file-type                    Container file type (0=mp4 1=3gp 2=mkv)
  --cap-dev-node                     Video capture device node (0=/dev/video0[default], 1=/dev/video1, 2=/dev/video2) e.g., --cap-dev-node=0
  --svs                              [For USB] (=) chain for video Preview. [For CSI only] use "nvoverlaysink"
  --file-name                        Captured file name. nvcamtest is used by default
  --camsrc                           Camera Source to use (0=v4l2, 1=csi[default], 2=videotest, 3=eglstream)
  --orientation                      [For CSI only] Camera sensor orientation value
  -w, --whitebalance                 [For CSI only] Capture whitebalance value
  -s, --scene-mode                   [For CSI only] Camera Scene-Mode value
  -c, --color-effect                 [For CSI only] Camera Color Effect value
  --auto-exposure                    [For CSI only] Camera Auto-Exposure value
  --flash                            [For CSI only] Camera Flash value
  --flicker                          [For CSI only] Camera Flicker Detection and Avoidance Mode value
  --contrast                         [For CSI only] Camera Contrast value
  --saturation                       [For CSI only] Camera Saturation value
  --edge-enhancement                 [For CSI only] Camera Edge Enhancement value
  --tnr-strength                     [For CSI only] Camera TNR-Strength value
  --tnr-mode                         [For CSI only] Camera TNR Mode value
  --sensor-id                        [For CSI only] Camera Sensor ID value
  --eglstream-id                     [For CSI EGLStream Consumer] Select EGLStream Producer ID value. Default value 0
  --display-id                       [For nvoverlaysink only] Display ID value
  --aeRegion                         [For CSI Only] ROI for AE coordinates(top,left,bottom,right) and weight in that order.e.g., --aeRegion="30 40 200 200 1.2"
  --wbRegion                         [For CSI Only] ROI for AWB coordinates(top,left,bottom,right) and weight in that order.e.g., --wbRegion="30 40 200 200 1.2"
  --fpsRange                         [For CSI Only] FPS range values (low, high) e.g., --fpsRange="15 30"
  --exposure-time                    [For CSI only] Capture exposure time value. e.g., --exposure-time=0.033
  --wbGains                          [For CSI Only] WB gains values (R, GR, GB, B) in that order. e.g., --wbGains="1.2 1.4 0.8 1.6"
  --overlayConfig                    Overlay Configuration Options index and coordinates in (index, x_pos, y_pos, width, height) order  e.g. --overlayConfig="0, 0, 0, 1280, 720"
  --enable-exif                      Enable Exif data
  --dump-bayer                       Dump bayer data in addition to image capture.
  --eglConfig                        EGL window Coordinates (x_pos y_pos) in that order  e.g., --eglConfig="50 100"
  --aeLock                           [For CSI only] Enable auto exposure lock e.g., --aeLock
  --enable-meta                      Enable Sensor MetaData reporting
  --nvvideosink-create-eglstream     [For nvvideosink EGLStream Producer] Enable nvvideosink EGLStream Producer
  --callback                         Enable User callback to set capture settings per frame
  --app-profile                      Enable KPI profiling
  --kpi-numbers                      Enable KPI measurement
  -A, --automate                     Run application in automation mode
  -S, --start-time                   Start capture after specified time in seconds. Default = 5 sec (use with --automate or -A only)
  -Q, --quit-after                   Quit application once automation is done after specified time in seconds. Default = 0 sec (use with --automate or -A only)
  -C, --count                        Number of iterations of automation testcase. Default = 1 (use with --automate or -A only)
  --capture-gap                      Number of milliseconds between successive image/video capture. Default = 250 msec (use with --automate and --capture-auto only)
  --capture-time                     Capture video for specified time in seconds. Default = 10 sec (use with --automate and --capture-auto only)
  --toggle-mode                      Toggle between still and video capture modes for count number of times (use with --automate or -A only)
  --toggle-sensor                    Toggle between sensor-id 0 and 1 (use with --automate or -A only)
  --capture-auto                     Do image/video capture in automation mode for count number of times(use with --automate or -A only)
  --enum-wb                          Enumerate all white-balance modes for count number of times (use with --automate or -A only)
  --enum-scm                         Enumerate all scene modes for count number of times (use with --automate or -A only)
  --enum-ce                          Enumerate all color-effect modes for count number of times (use with --automate or -A only)
  --enum-ae                          Enumerate all auto-exposure modes for count number of times (use with --automate or -A only)
  --enum-f                           Enumerate all flash modes for count number of times (use with --automate or -A only)
  --enum-fl                          Enumerate all flicker detection and avoidance modes for count number of times (use with --automate or -A only)
  --enum-ct                          Enumerate contrast value through 0 to 1 by a step of 0.1 for count number of times (use with --automate or -A only)
  --enum-st                          Enumerate saturation value through 0 to 2 by a step of 0.1 for count number of times (use with --automate or -A only)
  --enum-ee                          Enumerate edge-enhancement value through 0 to 1 by a step of 0.1 for count number of times (use with --automate or -A only)
  --enum-ts                          Enumerate TNR strength value through 0 to 1 by a step of 0.1 for count number of times (use with --automate or -A only)
  --enum-tnr                         Enumerate all TNR modes for count number of times (use with --automate or -A only)
  --streaming-mode                   [For CSI Only] Enable streaming mode (1=stream only, 2=stream+record)
  --streaming-file                   File to stream instead of camera input

Supported resolutions in case of CSI Camera
  (2) : 640x480
  (3) : 1280x720
  (4) : 1920x1080
  (5) : 2104x1560
  (6) : 2592x1944
  (7) : 2616x1472
  (8) : 3840x2160
  (9) : 3896x2192
  (10): 4208x3120
  (11): 5632x3168
  (12): 5632x4224

Runtime CSI Camera Commands:

  Help : 'h'
  Quit : 'q'
  Set Capture Mode:
      mo:<val>
          (1): image
          (2): video
  Get Capture Mode:
      gmo
  Set Sensor Id (0 to 10):
      sid:<val> e.g., sid:2 
  Get Sensor Id:
      gsid
  Set sensor orientation:
      so:<val>
          (0): none
          (1): Rotate counter-clockwise 90 degrees
          (2): Rotate 180 degrees
          (3): Rotate clockwise 90 degrees
  Get sensor orientation:
      gso
  Set Whitebalance Mode:
      wb:<val>
          (0): off
          (1): auto
          (2): incandescent
          (3): fluorescent
          (4): warm-fluorescent
          (5): daylight
          (6): cloudy-daylight
          (7): twilight
          (8): shade
          (9): manual
  Get Whitebalance Mode:
      gwb
  Set Scene-Mode:
      scm:<val>
          (0): face-priority
          (1): action
          (2): portrait
          (3): landscape
          (4): night
          (5): night-portrait
          (6): theatre
          (7): beach
          (8): snow
          (9): sunset
          (10): steady-photo
          (11): fireworks
          (12): sports
          (13): party
          (14): candle-light
          (15): barcode
  Get Scene-Mode:
      gscm
  Set Color Effect Mode:
      ce:<val>
          (1): off
          (2): mono
          (3): negative
          (4): solarize
          (5): sepia
          (6): posterize
          (7): aqua
  Get Color Effect Mode:
      gce
  Set Auto-Exposure Mode:
      ae:<val>
          (1): off
          (2): on
          (3): OnAutoFlash
          (4): OnAlwaysFlash
          (5): OnFlashRedEye
  Get Auto-Exposure Mode:
      gae
  Set Flash Mode:
      f:<val>
          (0): off
          (1): on
          (2): torch
          (3): auto
  Get Flash Mode:
      gf
  Set Flicker Detection and Avoidance Mode:
      fl:<val>
          (0): off
          (1): 50Hz
          (2): 60Hz
          (3): auto
  Get Flicker Detection and Avoidance Mode:
      gfl
  Set Contrast (0 to 1):
      ct:<val> e.g., ct:0.75
  Get Contrast:
      gct
  Set Saturation (0 to 2):
      st:<val> e.g., st:1.25
  Get Saturation:
      gst
  Set Exposure Time in seconds:
      ext:<val> e.g., ext:0.033
  Get Exposure Time:
      gext
  Set Auto Exposure Lock(0/1):
      ael:<val> e.g., ael:1
  Get Auto Exposure Lock:
      gael
  Set Edge Enhancement (0 to 1):
      ee:<val> e.g., ee:0.75
  Get Edge Enhancement:
      gee
  Set ROI for AE:
      It needs five values, ROI coordinates(top,left,bottom,right)
      and weight in that order
      aer:<val> e.g., aer:20 20 400 400 1.2
  Get ROI for AE:
      gaer
  Set ROI for AWB:
      It needs five values, ROI coordinates(top,left,bottom,right)
      and weight in that order
      wbr:<val> e.g., wbr:20 20 400 400 1.2
  Get ROI for AWB:
      gwbr
  Set FPS range:
      It needs two values, FPS Range (low, high) in that order
      fpsr:<val> e.g., fpsr:15 30
  Get FPS range:
      gfpsr
  Set WB Gains:
      It needs four values (R, GR, GB, B) in that order
      wbg:<val> e.g., wbg:1.2 2.2 0.8 1.6
  Get WB Gains:
      gwbg
  Set TNR Strength (0 to 1):
      ts:<val> e.g., ts:0.75
  Get TNR Strength:
      gts
  Set TNR Mode:
      tnr:<val>
          (0): NoiseReduction_Off
          (1): NoiseReduction_Fast
          (2): NoiseReduction_HighQuality
  Get TNR Mode:
      gtnr
  Capture: enter 'j' OR
           followed by a timer (e.g., jx5000, capture after 5 seconds) OR
           followed by multishot count (e.g., j:6, capture 6 images)
           timer/multihot values are optional, capture defaults to single shot with timer=0s
  Start Recording : enter '1'
  Stop Recording  : enter '0'
  Video snapshot  : enter '2' (While recording video)
  Set Preview Resolution:
      pcr:<val> e.g., pcr:3
          (2) : 640x480
          (3) : 1280x720
          (4) : 1920x1080
          (5) : 2104x1560
          (6) : 2592x1944
          (7) : 2616x1472
          (8) : 3840x2160
          (9) : 3896x2192
          (10): 4208x3120
          (11): 5632x3168
          (12): 5632x4224
  Note - For preview resolutions 4208x3120 and more use option --svs=nveglglessink
  Get Preview Resolution:
      gpcr
  Set Image Resolution:
      icr:<val> e.g., icr:3
          (2) : 640x480
          (3) : 1280x720
          (4) : 1920x1080
          (5) : 2104x1560
          (6) : 2592x1944
          (7) : 2616x1472
          (8) : 3840x2160
          (9) : 3896x2192
          (10): 4208x3120
          (11): 5632x3168
          (12): 5632x4224
  Get Image Capture Resolution:
      gicr
  Set Video Resolution:
      vcr:<val> e.g., vcr:3
          (2) : 640x480
          (3) : 1280x720
          (4) : 1920x1080
          (5) : 2104x1560
          (6) : 2592x1944
          (7) : 2616x1472
          (8) : 3840x2160
          (9) : 3896x2192
  Get Video Capture Resolution:
      gvcr

Runtime USB Camera Commands:

  Help : 'h'
  Quit : 'q'
  Set Capture Mode:
      mo:<val>
          (1): image
          (2): video
  Get Capture Mode:
      gmo
  Capture: enter 'j' OR
           followed by a timer (e.g., jx5000, capture after 5 seconds) OR
           followed by multishot count (e.g., j:6, capture 6 images)
           timer/multihot values are optional, capture defaults to single shot with timer=0s
  Start Recording : enter '1'
  Stop Recording  : enter '0'
  Set Preview Resolution:
      pcr:<val> e.g., pcr:2
          (0) : 176x144
          (1) : 320x240
          (2) : 640x480
          (3) : 1280x720
          (4) : 1920x1080
  NOTE: Preview/Encode resolution will be same as Capture resolution for USB-Camera
  Get Preview Resolution:
      gpcr
  Get Image Capture Resolution:
      gicr
  Get Video Capture Resolution:
      gvcr
  Set Capture Device Node:
      cdn:<val> e.g., cdn:0
          (0): /dev/video0
          (1): /dev/video1
          (2): /dev/video2
  Get Capture Device Node:
      gcdn

Runtime encoder configuration options:

  Set Encoding Bit-rate(in bytes):
      br:<val> e.g., br:4000000
  Get Encoding Bit-rate(in bytes):
      gbr
  Set Encoding Profile(only for H.264):
      ep:<val> e.g., ep:1
          (0): Baseline
          (1): Main
          (2): High
  Get Encoding Profile(only for H.264):
      gep
  Force IDR Frame on video Encoder(only for H.264):
      Enter 'f' 

Capture snapshots

Sometimes when the board has been just flashed you need to run reboot in order to run nvgstcapture-1.0 successfully. To take snapshots:

nvgstcapture-1.0
#then press j to take an snapshot
q 

Resolutions available to create snapshot:

          (2) : 640x480
          (3) : 1280x720
          (4) : 1920x1080
          (5) : 2104x1560
          (6) : 2592x1944
          (7) : 2616x1472
          (8) : 3840x2160
          (9) : 3896x2192
          (10): 4208x3120
          (11): 5632x3168
          (12): 5632x4224

 nvgstcapture-1.0 -m 1 --image-res=10 #set 1 to snapshot mode

In general the application is consuming 15% of each of four cores. It is always displaying video, so this could affect.

Capture and record video

nvgstcapture-1.0 -m 2 # set the mode in video
1 # start video recording
2 # take a snapshot
0 # stop video recording

In case of video it should support:

          (2) : 640x480
          (3) : 1280x720
          (4) : 1920x1080
          (5) : 2104x1560
          (6) : 2592x1944
          (7) : 2616x1472
          (8) : 3840x2160
          (9) : 3896x2192
 

However, it is not possible to set other value than 2,3,4,5 up to 9.

nvgstcapture-1.0 -m 2 --video-res=5

top


top - 22:15:09 up  2:30,  4 users,  load average: 0.47, 0.45, 0.30
Tasks: 267 total,   1 running, 266 sleeping,   0 stopped,   0 zombie
%Cpu(s): 11.0 us,  6.0 sy,  0.0 ni, 83.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  8041332 total,   754840 free,  1611400 used,  5675092 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  6303032 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                                                                            
 1639 root      20   0  9.979g 264612  45284 S  52.3  3.3   6:14.66 nvcamera-daemon                                                                                                                                                    
27513 nvidia    20   0  815040  13932  10272 S   4.3  0.2   0:01.48 nvgstcapture-1.

There is a daemon and a pipeline. Interesting.

While recording the pipeline (nvgstcapture) increases the ARM load to 10% and then it goes down again, even with the highest resolution. It will be interesting to understand what is the daemon doing.


Previous: GStreamer/VP8 Index Next: GStreamer/Example pipelines for Jetpack 4.2+