Jetson TX2 - GStreamer - nvgstcapture-1.0

Revision as of 07:44, 9 July 2019 by Spalli (talk | contribs)



  Index  





nvgstcapture-1.0

This is an application based on gstreamer and omx to capture, encode and save video to the filesystem. It has a lot of options. The source code is not released by NVIDIA yet but they are planning to release in future versions of Linux 4 Tegra (L4T), you can read about it at 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 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.


  Index