NVIDIA VPI GStreamer Plug-in - Performance - Jetson TX1

From RidgeRun Developer Wiki


Previous: Performance/Jetson Nano Index Next: Performance/Jetson TX2






NVIDIA VPI GStreamer Plug-in Performance Measurements : Source - Onboard camera OV5693 (nvarguscamerasrc)

Algorithm : Gaussian Filter

Platform : Jetson TX1
Onboard camera : nvarguscamerasrc
Resolution: 1920x1080

For a Gaussian filter given by kernel size of 3 in the X direction and 3 in the Y direction.

Backend : CUDA (default)

gst-launch-1.0 nvarguscamerasrc ! nvvidconv ! vpiupload ! vpigaussianfilter size-x=3 size-y=3 ! perf print-arm-load=true ! vpidownload ! nvvidconv ! 'video/x-raw(memory:NVMM),format=I420' ! nvoverlaysink


Backend : CPU

gst-launch-1.0 nvarguscamerasrc ! nvvidconv ! 'video/x-raw'  ! vpiupload ! vpigaussianfilter size-x=3 size-y=3 backend=1 ! perf print-arm-load=true ! vpidownload ! nvvidconv ! 'video/x-raw(memory:NVMM),format=I420' ! nvoverlaysink
Backend CPU % GPU % FPS
CUDA 22.1724 % 21.0972 % @ 174.719 MHz 30.029
CPU 28.931 % 15.3284 % @ 150.901 MHz 30.039

For a Gaussian filter given by kernel size of 5 in the X direction and 5 in the Y direction.

Backend : CUDA (default)

gst-launch-1.0 nvarguscamerasrc ! nvvidconv ! vpiupload ! vpigaussianfilter size-x=5 size-y=5 ! perf print-arm-load=true ! vpidownload ! nvvidconv ! 'video/x-raw(memory:NVMM),format=I420' ! nvoverlaysink


Backend : CPU

gst-launch-1.0 nvarguscamerasrc ! nvvidconv ! 'video/x-raw' ! vpiupload ! vpigaussianfilter size-x=5 size-y=5 backend=1 ! perf print-arm-load=true ! vpidownload ! nvvidconv ! 'video/x-raw(memory:NVMM),format=I420' ! nvoverlaysink
Backend CPU % GPU % FPS
CUDA 22.3448 % 20.8561 % @ 170.427 MHz 30.034
CPU 31.1034 % 15.3284 % @ 150.901 MHz 30.035

For a Gaussian filter given by kernel size of 7 in the X direction and 7 in the Y direction.

Backend : CUDA (default)

gst-launch-1.0 nvarguscamerasrc ! nvvidconv ! vpiupload ! vpigaussianfilter size-x=7 size-y=7 ! perf print-arm-load=true ! vpidownload ! nvvidconv ! 'video/x-raw(memory:NVMM),format=I420' ! nvoverlaysink


Backend : CPU

gst-launch-1.0 nvarguscamerasrc ! nvvidconv ! 'video/x-raw' ! vpiupload ! vpigaussianfilter size-x=7 size-y=7 backend=1  ! perf print-arm-load=true ! vpidownload ! nvvidconv ! 'video/x-raw(memory:NVMM),format=I420' ! nvoverlaysink
Backend CPU % GPU % FPS
CUDA 21.7241 % 20.6293 % @ 166.493 MHz 30.034
CPU 31.3103 % 15.3284 % @ 150.901 MHz 30.031

For a Gaussian filter given by kernel size of 11 in the X direction and 11 in the Y direction.

Backend : CUDA (default)

gst-launch-1.0 nvarguscamerasrc ! nvvidconv ! vpiupload ! vpigaussianfilter size-x=11 size-y=11 ! perf print-arm-load=true ! vpidownload ! nvvidconv ! 'video/x-raw(memory:NVMM),format=I420' ! nvoverlaysink


Backend : CPU

gst-launch-1.0 nvarguscamerasrc ! nvvidconv !  'video/x-raw' ! vpiupload ! vpigaussianfilter size-x=11 size-y=11 backend=1 ! perf print-arm-load=true ! vpidownload ! nvvidconv ! 'video/x-raw(memory:NVMM),format=I420' ! nvoverlaysink
Backend CPU % GPU % FPS
CUDA 22.2759 % 20.869 % @ 162.873 MHz 30.032
CPU 31.7586 % 15.3284 % @ 150.901 MHz 30.039

Algorithm : Undistort

Platform : Jetson TX1
Onboard camera : nvarguscamerasrc
Resolution: 1920x1080

Fisheye Distortion


Backend : CUDA (default)

gst-launch-1.0 nvarguscamerasrc ! nvvidconv bl-output=false ! vpiupload ! vpiundistort k1=0.05 k2=0.01 k3=0 k4=0 model=fisheye ! perf print-arm-load=true ! vpidownload ! nvvidconv ! nvoverlaysink


Backend : CPU

gst-launch-1.0 nvarguscamerasrc ! nvvidconv ! 'video/x-raw' ! vpiupload ! vpiundistort k1=0.05 k2=0.01 k3=0 k4=0 model=fisheye backend=1 ! perf print-arm-load=true ! vpidownload ! nvvidconv ! nvoverlaysink
Backend CPU % GPU % FPS
CUDA 23.4483 % 21.748 % @ 168.719 MHz 30.066
CPU 83.3929 % 15.3284 % @ 150.901 MHz 12.995

Polynomial Distortion


Backend : CUDA (default)

gst-launch-1.0 nvarguscamerasrc ! nvvidconv bl-output=false ! vpiupload ! vpiundistort k1=0.52 k2=-0.02 p1=0 p2=0 k3=-0.001 k4=0.8 k5=0.05 k6=-0.008 model=polynomial ! perf print-arm-load=true ! vpidownload ! nvvidconv ! nvoverlaysink


Backend : CPU

gst-launch-1.0 nvarguscamerasrc ! nvvidconv  ! 'video/x-raw' ! vpiupload ! vpiundistort k1=0.52 k2=-0.02 p1=0 p2=0 k3=-0.001 k4=0.8 k5=0.05 k6=-0.008 model=polynomial backend=1 ! perf print-arm-load=true ! vpidownload ! nvvidconv ! nvoverlaysink
Backend CPU % GPU % FPS
CUDA 23.1034 % 22.5287 % @ 173.939 MHz 30.051
CPU 83.5 % 15.3284 % @ 150.901 MHz 12.977

Algorithm : KLT Tracker

Platform : Jetson TX1
Source: filesrc
Resolution: 1280x720


Backend : CUDA (default)

gst-launch-1.0 filesrc location=/opt/nvidia/vpi/samples/assets/dashcam.mp4 ! qtdemux name=demux demux.video_0 ! queue !  h264parse ! omxh264dec ! videoconvert ! vpiupload ! vpiklttracker name=klt boxes='<<613,332,23,23>,<669,329,30,29>,<790,376,41,22>>' ! perf print-arm-load=true ! vpidownload ! nvvidconv ! 'video/x-raw(memory:NVMM),format=I420' ! nvoverlaysink


Backend : CPU

gst-launch-1.0 filesrc location=/opt/nvidia/vpi/samples/assets/dashcam.mp4 ! qtdemux name=demux demux.video_0 ! queue !  h264parse ! omxh264dec ! videoconvert ! 'video/x-raw'  ! vpiupload ! vpiklttracker name=klt boxes='<<613,332,23,23>,<669,329,30,29>,<790,376,41,22>>' backend=1 ! perf print-arm-load=true ! vpidownload ! nvvidconv ! 'video/x-raw(memory:NVMM),format=I420' ! nvoverlaysink
Backend CPU % GPU % FPS
CUDA 29.2381 % 22.0185 % @ 172.243 MHz 26.44
CPU 34 % 15.3284 % @ 150.901 MHz 29.342

Algorithm : Harris Detector

Platform : Jetson TX1
Onboard camera : nvarguscamerasrc
Resolution: 1920x1080

Backend : CUDA (default)

gst-launch-1.0 nvarguscamerasrc ! nvvidconv ! vpiupload ! vpiharrisdetector gradient-size=3 block-size=3 ! vpioverlay ! perf print-arm-load=true ! vpidownload ! nvvidconv ! 'video/x-raw(memory:NVMM),format=I420' ! nvoverlaysink


Backend : CPU

gst-launch-1.0 nvarguscamerasrc ! nvvidconv  ! 'video/x-raw' !  vpiupload ! vpiharrisdetector gradient-size=3 block-size=3 backend=1 ! vpioverlay ! perf print-arm-load=true ! vpidownload ! nvvidconv ! 'video/x-raw(memory:NVMM),format=I420' ! nvoverlaysink
Backend CPU % GPU % FPS
CUDA 26.3793 % 22.7408 % @ 178.168 MHz 28.79
CPU 78.1724 % 15.3284 % @ 150.901 MHz 24.927

Platform : Jetson TX1
Onboard camera : nvarguscamerasrc
Resolution: 1920x1080

Backend : CUDA (default)

gst-launch-1.0 nvarguscamerasrc ! nvvidconv ! vpiupload ! vpiharrisdetector gradient-size=5 block-size=5 ! vpioverlay ! perf print-arm-load=true ! vpidownload ! nvvidconv ! 'video/x-raw(memory:NVMM),format=I420' ! nvoverlaysink


Backend : CPU

gst-launch-1.0 nvarguscamerasrc ! nvvidconv ! 'video/x-raw' ! vpiupload ! vpiharrisdetector gradient-size=5 block-size=5 backend=1 ! vpioverlay ! perf print-arm-load=true ! vpidownload ! nvvidconv ! 'video/x-raw(memory:NVMM),format=I420' ! nvoverlaysink
Backend CPU % GPU % FPS
CUDA 26.7586 % 23.5425 % @ 182.813 MHz 28.749
CPU 81.5357 % 15.3284 % @ 150.901 MHz 20.402

Platform : Jetson TX1
Onboard camera : nvarguscamerasrc
Resolution: 1920x1080

Backend : CUDA (default)

gst-launch-1.0 nvarguscamerasrc ! nvvidconv ! vpiupload ! vpiharrisdetector gradient-size=7 block-size=7 ! vpioverlay ! perf print-arm-load=true ! vpidownload ! nvvidconv ! 'video/x-raw(memory:NVMM),format=I420' ! nvoverlaysink


Backend : CPU

gst-launch-1.0 nvarguscamerasrc ! nvvidconv ! 'video/x-raw' ! vpiupload ! vpiharrisdetector gradient-size=7 block-size=7 backend=1  ! vpioverlay ! perf print-arm-load=true ! vpidownload ! nvvidconv ! 'video/x-raw(memory:NVMM),format=I420' ! nvoverlaysink
Backend CPU % GPU % FPS
CUDA 26.4828 % 24.0178 % @ 189.046 MHz 28.812
CPU 84.1724 % 15.3284 % @ 150.901 MHz 16.665

Algorithm : Convolution

Platform : Jetson TX1
Onboard camera : nvarguscamerasrc
Resolution: 1920x1080

For a convolution filter given by kernel size of 3 in the X direction and 3 in the Y direction.
Backend : CUDA (default)

gst-launch-1.0 nvarguscamerasrc ! nvvidconv  ! 'video/x-raw' ! vpiupload ! vpiconvolution kernel="<<0.1111,0.1111,0.1111>,<0.1111,0.1111,0.1111>,<0.1111,0.1111,0.1111>>" ! perf print-arm-load=true ! vpidownload ! nvvidconv ! "video/x-raw(memory:NVMM),format=I420" ! nvoverlaysink


Backend : CPU

gst-launch-1.0 nvarguscamerasrc ! nvvidconv  ! video/x-raw ! vpiupload ! vpiconvolution kernel="<<0.1111,0.1111,0.1111>,<0.1111,0.1111,0.1111>,<0.1111,0.1111,0.1111>>" backend=1 ! perf print-arm-load=true ! vpidownload ! nvvidconv ! "video/x-raw(memory:NVMM),format=I420" ! nvoverlaysink
Backend CPU % GPU % FPS
CUDA 16.4138 % 16.0526 % @ 150.512 MHz 30.073
CPU 33.2414 % 15.3284 % @ 150.901 MHz 30.031

For a convolution filter given by kernel size of 5 in the X direction and 5 in the Y direction.
Backend : CUDA (default)

gst-launch-1.0 nvarguscamerasrc ! nvvidconv ! 'video/x-raw' ! vpiupload ! vpiconvolution kernel="<<0.04,0.04,0.04,0.04,0.04>,<0.04,0.04,0.04,0.04,0.04>,<0.04,0.04,0.04,0.04,0.04>,<0.04,0.04,0.04,0.04,0.04>,<0.04,0.04,0.04,0.04,0.04>>" ! perf print-arm-load=true ! vpidownload ! nvvidconv ! "video/x-raw(memory:NVMM),format=I420" ! nvoverlaysink


Backend : CPU

gst-launch-1.0 nvarguscamerasrc ! nvvidconv ! video/x-raw ! vpiupload ! vpiconvolution kernel="<<0.04,0.04,0.04,0.04,0.04>,<0.04,0.04,0.04,0.04,0.04>,<0.04,0.04,0.04,0.04,0.04>,<0.04,0.04,0.04,0.04,0.04>,<0.04,0.04,0.04,0.04,0.04>>"  backend=1 ! perf print-arm-load=true ! vpidownload ! nvvidconv ! "video/x-raw(memory:NVMM),format=I420" ! nvoverlaysink
Backend CPU % GPU % FPS
CUDA 17.8966 % 16.1235 % @ 149.31 MHz 30.042
CPU 36.7931 % 15.3284 % @ 150.901 MHz 30.032

For a convolution filter given by kernel size of 7 in the X direction and 7 in the Y direction.
Backend : CUDA (default)

gst-launch-1.0 nvarguscamerasrc ! nvvidconv ! 'video/x-raw' ! vpiupload ! vpiconvolution kernel="<<0.0204,0.0204,0.0204,0.0204,0.0204,0.0204,0.0204>,<0.0204,0.0204,0.0204,0.0204,0.0204,0.0204,0.0204>,<0.0204,0.0204,0.0204,0.0204,0.0204,0.0204,0.0204>,<0.0204,0.0204,0.0204,0.0204,0.0204,0.0204,0.0204>,<0.0204,0.0204,0.0204,0.0204,0.0204,0.0204,0.0204>,<0.0204,0.0204,0.0204,0.0204,0.0204,0.0204,0.0204>,<0.0204,0.0204,0.0204,0.0204,0.0204,0.0204,0.0204>>" ! perf print-arm-load=true ! vpidownload ! nvvidconv ! "video/x-raw(memory:NVMM),format=I420" ! nvoverlaysink


Backend : CPU

gst-launch-1.0 nvarguscamerasrc ! nvvidconv ! video/x-raw ! vpiupload ! vpiconvolution kernel="<<0.0204,0.0204,0.0204,0.0204,0.0204,0.0204,0.0204>,<0.0204,0.0204,0.0204,0.0204,0.0204,0.0204,0.0204>,<0.0204,0.0204,0.0204,0.0204,0.0204,0.0204,0.0204>,<0.0204,0.0204,0.0204,0.0204,0.0204,0.0204,0.0204>,<0.0204,0.0204,0.0204,0.0204,0.0204,0.0204,0.0204>,<0.0204,0.0204,0.0204,0.0204,0.0204,0.0204,0.0204>,<0.0204,0.0204,0.0204,0.0204,0.0204,0.0204,0.0204>>" backend=1 ! perf print-arm-load=true ! vpidownload ! nvvidconv ! "video/x-raw(memory:NVMM),format=I420" ! nvoverlaysink
Backend CPU % GPU % FPS
CUDA 15.4483 % 15.8318 % @ 147.682 MHz 30.028
CPU 40.6207 % 15.3284 % @ 150.901 MHz 30.041

For a convolution filter given by kernel size of 11 in the X direction and 11 in the Y direction.
Backend : CUDA (default)

gst-launch-1.0 nvarguscamerasrc ! nvvidconv ! 'video/x-raw' ! vpiupload ! vpiconvolution kernel="<<0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083>,<0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083>,<0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083>,<0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083>,<0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083>,<0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083>,<0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083>,<0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083>,<0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083>,<0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083>,<0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083>>" ! perf print-arm-load=true ! vpidownload ! nvvidconv ! "video/x-raw(memory:NVMM),format=I420" ! nvoverlaysink


Backend : CPU

gst-launch-1.0 nvarguscamerasrc ! nvvidconv ! video/x-raw ! vpiupload ! vpiconvolution kernel="<<0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083>,<0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083>,<0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083>,<0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083>,<0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083>,<0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083>,<0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083>,<0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083>,<0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083>,<0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083>,<0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083,0.0083>>" backend=1 ! perf print-arm-load=true ! vpidownload ! nvvidconv ! "video/x-raw(memory:NVMM),format=I420" ! nvoverlaysink
Backend CPU % GPU % FPS
CUDA 15.8276 % 15.9488 % @ 148.083 MHz 30.024
CPU 75.5862 % 15.3284 % @ 150.901 MHz 29.485

Algorithm : Separable Convolution

Platform : Jetson TX1
Onboard camera : nvarguscamerasrc
Resolution: 1920x1080

For a separable convolution filter given by kernel size of 3 in the X direction and 3 in the Y direction.
Backend : CUDA (default)

gst-launch-1.0 nvarguscamerasrc ! nvvidconv  ! 'video/x-raw' ! vpiupload ! vpiseparableconvolution kernel-row="<-1.0,0.0,1.0>" kernel-col="<1.0,2.0,1.0>" ! perf print-arm-load=true ! vpidownload ! nvvidconv ! "video/x-raw(memory:NVMM),format=I420" ! nvoverlaysink


Backend : CPU

gst-launch-1.0 nvarguscamerasrc ! nvvidconv  ! video/x-raw ! vpiupload ! vpiseparableconvolution kernel-row="<-1.0,0.0,1.0>" kernel-col="<1.0,2.0,1.0>" backend=1 ! perf print-arm-load=true ! vpidownload ! nvvidconv ! "video/x-raw(memory:NVMM),format=I420" ! nvoverlaysink
Backend CPU % GPU % FPS
CUDA 15.4138 % 16.1116 % @ 116.296 MHz 30.035
CPU 33.2759 % 15.3284 % @ 150.901 MHz 30.033

For a separable convolution filter given by kernel size of 5 in the X direction and 5 in the Y direction.
Backend : CUDA (default)

gst-launch-1.0 nvarguscamerasrc ! nvvidconv ! 'video/x-raw' ! vpiupload ! vpiseparableconvolution kernel-row="<-2.0,-1.0,0.0,1.0,2.0>" kernel-col="<1.0,2.0,4.0,2.0,1.0>" ! perf print-arm-load=true ! vpidownload ! nvvidconv ! "video/x-raw(memory:NVMM),format=I420" ! nvoverlaysink


Backend : CPU

gst-launch-1.0 nvarguscamerasrc ! nvvidconv ! video/x-raw ! vpiupload ! vpiseparableconvolution kernel-row="<-2.0,-1.0,0.0,1.0,2.0>" kernel-col="<1.0,2.0,4.0,2.0,1.0>"  backend=1 ! perf print-arm-load=true ! vpidownload ! nvvidconv ! "video/x-raw(memory:NVMM),format=I420" ! nvoverlaysink
Backend CPU % GPU % FPS
CUDA 15.5862 % 17.4856 % @ 123.793 MHz 30.031
CPU 34.5172 % 15.3284 % @ 150.901 MHz 30.043

For a separable convolution filter given by kernel size of 7 in the X direction and 7 in the Y direction.
Backend : CUDA (default)

gst-launch-1.0 nvarguscamerasrc ! nvvidconv ! 'video/x-raw' ! vpiupload ! vpiseparableconvolution kernel-row="<-4.0,-2.0,-1.0,0.0,1.0,2.0,4.0>" kernel-col="<1.0,2.0,4.0,6.0,4.0,2.0,1.0>"  ! perf print-arm-load=true ! vpidownload ! nvvidconv ! "video/x-raw(memory:NVMM),format=I420" ! nvoverlaysink


Backend : CPU

gst-launch-1.0 nvarguscamerasrc ! nvvidconv ! video/x-raw ! vpiupload ! vpiseparableconvolution kernel-row="<-4.0,-2.0,-1.0,0.0,1.0,2.0,4.0>" kernel-col="<1.0,2.0,4.0,6.0,4.0,2.0,1.0>"  backend=1 ! perf print-arm-load=true ! vpidownload ! nvvidconv ! "video/x-raw(memory:NVMM),format=I420" ! nvoverlaysink
Backend CPU % GPU % FPS
CUDA 15.7241 % 17.6708 % @ 126.448 MHz 30.029
CPU 34.9655 % 15.3284 % @ 150.901 MHz 30.035

For a separable convolution filter given by kernel size of 11 in the X direction and 11 in the Y direction.
Backend : CUDA (default)

gst-launch-1.0 nvarguscamerasrc ! nvvidconv ! 'video/x-raw' ! vpiupload ! vpiseparableconvolution kernel-row="<-16.0,-8.0,-4.0,-2.0,-1.0,0.0,1.0,2.0,4.0,8.0,16.0>" kernel-col="<1.0,2.0,4.0,6.0,12.0,24.0,12.0,6.0,4.0,2.0,1.0>" ! perf print-arm-load=true ! vpidownload ! nvvidconv ! "video/x-raw(memory:NVMM),format=I420" ! nvoverlaysink


Backend : CPU

gst-launch-1.0 nvarguscamerasrc ! nvvidconv ! video/x-raw ! vpiupload ! vpiseparableconvolution kernel-row="<-16.0,-8.0,-4.0,-2.0,-1.0,0.0,1.0,2.0,4.0,8.0,16.0>" kernel-col="<1.0,2.0,4.0,6.0,12.0,24.0,12.0,6.0,4.0,2.0,1.0>" backend=1 ! perf print-arm-load=true ! vpidownload ! nvvidconv ! "video/x-raw(memory:NVMM),format=I420" ! nvoverlaysink
Backend CPU % GPU % FPS
CUDA 16 % 17.4695 % @ 123.385 MHz 30.036
CPU 37.8276 % 15.3284 % @ 150.901 MHz 30.048


Previous: Performance/Jetson Nano Index Next: Performance/Jetson TX2