Help with gstreamer speed improvement via using userptr buffer allocations

Hi everybody,

I’m trying to increate the speed of gstreamer pipeline running on TX2.
Here’s a simplified pipeline I’m using for testing:

/usr/local/bin/gst-launch-1.0 v4l2src device=/dev/video0 ! 'video/x-raw, format=I420, width=1280, height=720, framerate=30/1' ! fakesink

It runs fine, but the CPU utilization is around 40% of a single core where it runs.

I’m trying to improve the speed (and reduce latency) by using userptr buffers allocation (io-mode=3), but it fails with the error below:

/usr/local/bin/gst-launch-1.0 v4l2src io-mode=3 device=/dev/video0 ! 'video/x-raw, format=I420, width=1280, height=720, framerate=30/1' ! fakesink
ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: No downstream pool to import from.
Additional debug info:
gstv4l2object.c(4088): gst_v4l2_object_decide_allocation (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
When importing DMABUF or USERPTR, we need a pool to import from

So, it looks like we need to allocate buffers first, so adding videomedian for the sake of testing.
Now it fails with a different error:

/usr/local/bin/gst-launch-1.0 v4l2src io-mode=3 device=/dev/video0 ! 'video/x-raw, format=I420, width=1280, height=720, framerate=30/1' ! videomedian ! fakesink
ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Failed to allocate required memory.
Additional debug info:
gstv4l2src.c(511): gst_v4l2src_decide_allocation (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
Buffer pool activation failed

After recompiling gst-plugins-good-1.8.0 without using libv4l library (#undef HAVE_LIBV4L2), getting yet another error:

ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Internal data flow error.
Additional debug info:
gstbasesrc.c(2948): gst_base_src_loop (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
streaming task paused, reason not-negotiated (-4)

Does anyone know how to fix it?

-albertr

Hi albertr,
We suggest you try tegra_multimedia_api and refer to

tegra_multimedia_api\samples2_camera_v4l2_cuda
tegra_multimedia_api\samples\v4l2cuda

Thanks Dane, but I would like to use gstreamer and trying to figure out how to make IO_METHOD_USEPTR buffer allocation work on Jetson with v4l2 source. If anyone seen this issue in past and know how to fix it, please shed some light.

Also, I should have mentioned that we are using a USB attached UVC camera, not the DevKit camera. We use TX2 with L4T 28.1 kernel and gstreamer 1.8.0 if it matters.

Any help is much appreciated!

-albertr

yavta seems to be able to allocate buffers using IO_METHOD_USEPTR on the same system with the same camera, please see below.

root@tx2:/usr/src/yavta# ./yavta -c4 -n4 -s1280x720 -t1/30 -fMJPEG -u -Fcam.raw /dev/video0 
Device /dev/video0 opened.
Device `Git2' on `usb-3530000.xhci-2' (driver 'uvcvideo') supports video, capture, without mplanes.
Video format set: MJPEG (47504a4d) 1280x720 (stride 0) field none buffer size 3145728
Video format: MJPEG (47504a4d) 1280x720 (stride 0) field none buffer size 3145728
Current frame rate: 1/30
Setting frame rate to: 1/30
Frame rate set: 1/30
4 buffers requested.
length: 3145728 offset: 0 timestamp type/source: mono/SoE
Buffer 0/0 allocated at address 0x7fa35de000.
length: 3145728 offset: 0 timestamp type/source: mono/SoE
Buffer 1/0 allocated at address 0x7fa32dc000.
length: 3145728 offset: 0 timestamp type/source: mono/SoE
Buffer 2/0 allocated at address 0x7fa2fda000.
length: 3145728 offset: 0 timestamp type/source: mono/SoE
Buffer 3/0 allocated at address 0x7fa2cd8000.
0 (0) [-] none 0 44020 B 56189.995163 56189.999267 1.868 fps ts mono/SoE
1 (1) [-] none 1 62288 B 56190.031165 56190.035329 27.776 fps ts mono/SoE
2 (2) [-] none 2 82612 B 56190.059171 56190.071246 35.707 fps ts mono/SoE
3 (3) [-] none 3 90448 B 56190.095166 56190.107180 27.782 fps ts mono/SoE
Captured 4 frames in 0.647465 seconds (6.177938 fps, 431479.517283 B/s).
4 buffers released.
root@tx2:/usr/src/yavta#

I was just looking at some information about this:

Seems you’d need to recompile gstreamer configured with the ‘–without-libv4l2’ option

Well, I did recompile gst-plugins-good-1.8.0 without linking to libv4l library as mentioned in the original post, however the V4L2 code in this plugin cannot negotiate correct format with my camera. I have a suspicion that libv4l doesn’t list the native capabilities of this camera correctly and while it’s not good, somehow it allows to negotiate something that works. When linked without libv4l library, gstreamer gets accurate capabilities and refuses to negotiate format.

I now have a few megabytes of debug logs generated by gstreamer to review, and I’m totally terrified by the way how logging is implemented in this product. All I need to see if which format was negotiated when gst-plugins-good-1.8.0 is linked with libv4l library, and I’m totally lost in millions of caps messages spit by gstreamer. And being novice to this product doesn’t help either.

-albertr

You already have the clues you need.

This doesn’t work:

'video/x-raw, format=I420, width=1280, height=720, framerate=30/1'

This works:

Video format set: MJPEG (47504a4d) 1280x720 (stride 0) field none buffer size 3145728

Is your camera a USB 3 camera, and is it connected to the USB 3 port of the Jetson?

If not, there is not enough USB 2 bandwidth to support 1280x720 at 30 Hz with uncompressed YUV format.
Each YUV420 frame is 1280x720x6/4 bytes, times 30, plus overhead, is more than 40 MB per second, which the USB 2 bus cannot sustain in practice. (Despite the “up to 480 Mb/s” specification rating)

You can either reduce the resolution (try 640x360 if the camera supports it) or use MJPEG like the working program uses (at which point you may need a separate plugin to decode it once received.)

We are testing with two cameras, both do not support USB3 and negotiate speed to 480Mbit/s.
Here’re the capabilities as reported by v4l2-ctl:

albertr@tx2:~$ sudo v4l2-ctl --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
	Index       : 0
	Type        : Video Capture
	Pixel Format: 'H264' (compressed)
	Name        : H.264
		Size: Discrete 1920x1440
			Interval: Discrete 0.033s (30.000 fps)
		Size: Discrete 1280x720
			Interval: Discrete 0.033s (30.000 fps)
		Size: Discrete 640x480
			Interval: Discrete 0.033s (30.000 fps)
		Size: Discrete 320x240
			Interval: Discrete 0.033s (30.000 fps)

	Index       : 1
	Type        : Video Capture
	Pixel Format: 'MJPG' (compressed)
	Name        : Motion-JPEG
		Size: Discrete 1920x1440
			Interval: Discrete 0.033s (30.000 fps)
		Size: Discrete 1280x720
			Interval: Discrete 0.033s (30.000 fps)
		Size: Discrete 640x480
			Interval: Discrete 0.033s (30.000 fps)
		Size: Discrete 320x240
			Interval: Discrete 0.033s (30.000 fps)

albertr@tx2:~$

Quite interesting is that if I compile gst-plugins-good-1.8.0 without linking to libv4l library, then it negotiate format to I420!
I’m trying to figure out how I can force the same when compiling without linking to libv4l library. Below are some snippets from negotiation sequence when it’s using libv4l library.

0:00:04.028593041  3548       0x7fec50 DEBUG                   v4l2 gstv4l2object.c:1106:gst_v4l2_ob
ject_fill_format_list:<v4l2src0> getting src format enumerations
0:00:04.028659025  3548       0x7fec50 INFO                    v4l2 gstv4l2object.c:1143:gst_v4l2_ob
ject_fill_format_list:<v4l2src0> got 6 format(s):
0:00:04.028674097  3548       0x7fec50 INFO                    v4l2 gstv4l2object.c:1149:gst_v4l2_ob
ject_fill_format_list:<v4l2src0>   MJPG
0:00:04.028699185  3548       0x7fec50 INFO                    v4l2 gstv4l2object.c:1149:gst_v4l2_ob
ject_fill_format_list:<v4l2src0>   YU12 (emulated)
0:00:04.028721649  3548       0x7fec50 INFO                    v4l2 gstv4l2object.c:1149:gst_v4l2_ob
ject_fill_format_list:<v4l2src0>   YV12 (emulated)
0:00:04.028737393  3548       0x7fec50 INFO                    v4l2 gstv4l2object.c:1149:gst_v4l2_ob
ject_fill_format_list:<v4l2src0>   BGR3 (emulated)
0:00:04.028750705  3548       0x7fec50 INFO                    v4l2 gstv4l2object.c:1149:gst_v4l2_ob
ject_fill_format_list:<v4l2src0>   RGB3 (emulated)
0:00:04.028781329  3548       0x7fec50 INFO                    v4l2 gstv4l2object.c:1149:gst_v4l2_ob
ject_fill_format_list:<v4l2src0>   H264
0:00:04.122161706  3548       0x7fec50 DEBUG                   v4l2 gstv4l2object.c:3812:gst_v4l2_object_get_caps:<v4l2src0> ret: image/jpeg, width=(int)1920, height=(int)1440, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1; image/jpeg, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1; image/jpeg, width=(int)640, height=(int)480, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1; image/jpeg, width=(int)320, height=(int)240, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1; video/x-raw, format=(string)I420, width=(int)1920, height=(int)1440, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1; video/x-raw, format=(string)I420, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1; video/x-raw, format=(string)I420, width=(int)640, height=(int)480, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1; video/x-raw, format=(string)I420, width=(int)320, height=(int)240, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1; video/x-raw, format=(string)YV12, width=(int)1920, height=(int)1440, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1; video/x-raw, format=(string)YV12, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1; video/x-raw, format=(string)YV12, width=(int)640, height=(int)480, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1; video/x-raw, format=(string)YV12, width=(int)320, height=(int)240, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1; video/x-raw, format=(string)BGR, width=(int)1920, height=(int)1440, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1; video/x-raw, format=(string)BGR, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1; video/x-raw, format=(string)BGR, width=(int)640, height=(int)480, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1; video/x-raw, format=(string)BGR, width=(int)320, height=(int)240, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1; video/x-raw, format=(string)RGB, width=(int)1920, height=(int)1440, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1; video/x-raw, format=(string)RGB, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1; video/x-raw, format=(string)RGB, width=(int)640, height=(int)480, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1; video/x-raw, format=(string)RGB, width=(int)320, height=(int)240, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1; video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, width=(int)1920, height=(int)1440, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1; video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1; video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, width=(int)640, height=(int)480, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1; video/x-h264, stream-format=(string)byte-stream, alignment=(string)au, width=(int)320, height=(int)240, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1
0:00:04.131981456  3548       0x7fec50 DEBUG                v4l2src gstv4l2src.c:385:gst_v4l2src_negotiate:<v4l2src0> caps: video/x-raw, format=(string)I420, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1
0:00:04.132222896  3548       0x7fec50 DEBUG             video-info video-info.c:300:gst_video_info_from_caps: parsing caps video/x-raw, format=(string)I420, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1
0:00:04.132384304  3548       0x7fec50 DEBUG                   v4l2 gstv4l2object.c:3078:gst_v4l2_object_set_format_full:<v4l2src0> progressive video
0:00:04.132414320  3548       0x7fec50 DEBUG                   v4l2 gstv4l2object.c:3212:gst_v4l2_object_set_format_full:<v4l2src0> Desired format 1280x720, format YU12 stride: 1280
0:00:04.132476656  3548       0x7fec50 DEBUG                   v4l2 gstv4l2object.c:3263:gst_v4l2_object_set_format_full:<v4l2src0> Desired format is 1280x720, format YU12, nb planes 1
0:00:04.132531344  3548       0x7fec50 DEBUG                   v4l2 gstv4l2object.c:3272:gst_v4l2_object_set_format_full:<v4l2src0>   stride 1280
0:00:04.139354708  3548       0x7fec50 DEBUG                   v4l2 gstv4l2object.c:3306:gst_v4l2_object_set_format_full:<v4l2src0> Got format of 1280x720, format YU12, nb planes 1, colorspace 0
0:00:04.139435220  3548       0x7fec50 DEBUG                   v4l2 gstv4l2object.c:3316:gst_v4l2_object_set_format_full:<v4l2src0>   stride 1280, sizeimage 1382400
0:00:04.139472532  3548       0x7fec50 DEBUG                   v4l2 gstv4l2object.c:3357:gst_v4l2_object_set_format_full:<v4l2src0> Desired framerate: 30/1
0:00:04.139511924  3548       0x7fec50 DEBUG                   v4l2 gstv4l2object.c:3373:gst_v4l2_object_set_format_full:<v4l2src0> Got framerate: 30/1
0:00:04.152201724  3548       0x7fec50 INFO                    v4l2 gstv4l2object.c:3405:gst_v4l2_object_set_format_full:<v4l2src0> Set framerate to 30/1
0:00:04.152316028  3548       0x7fec50 DEBUG                   v4l2 gstv4l2object.c:2974:gst_v4l2_object_save_format:<v4l2src0> Got sizeimage 1382400
0:00:04.153337885  3548       0x7fec50 DEBUG         v4l2bufferpool gstv4l2bufferpool.c:503:gst_v4l2_buffer_pool_set_config:<v4l2src0:pool:src> config GstBufferPoolConfig, caps=(GstCaps)"video/x-raw\,\ format\=\(string\)I420\,\ width\=\(int\)1280\,\ height\=\(int\)720\,\ pixel-aspect-ratio\=\(fraction\)1/1\,\ interlace-mode\=\(string\)progressive\,\ framerate\=\(fraction\)30/1", size=(uint)1382400, min-buffers=(uint)0, max-buffers=(uint)0, allocator=(GstAllocator)"NULL", params=(GstAllocationParams)NULL;
0:00:04.153705757  3548       0x7fec50 DEBUG             video-info video-info.c:300:gst_video_info_from_caps: parsing caps video/x-raw, format=(string)I420, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive, framerate=(fraction)30/1

It works very well, but CPU utilization of the core where gstreamer run on is fluctuating around 55% when using the following pipeline:

$PREFIX/bin/gst-launch-1.0 -vvv v4l2src device=/dev/video0 ! 'video/x-raw, width=1280, height=720, framerate=30/1' !  nvvidconv ! 'video/x-raw(memory:NVMM), width=1280, height=720, format=I420, framerate=30/1'  ! nvoverlaysink -e -vvv  --gst-debug-no-color=1

I’m trying to see if using userptr buffers allocation can help to reduce CPU load and latency.
Let me know if you have any ideas.

BTW, I’ve also tried to use the following pipeline and while technically it “works”, the CPU load shoot over the roof and I’m getting missed frames and choppy video:

$PREFIX/bin/gst-launch-1.0 -vvv v4l2src device=/dev/video0 ! 'image/jpeg,width=1280,height=720' ! nvjpegdec ! nvvidconv ! 'video/x-raw(memory:NVMM), width=1280, height=720, format=I420, framerate=30/1' ! nvoverlaysink -e -vvv  --gst-debug-no-color=1

From what I understand I420 is the same as YU12, but with reversed order of Y and U planes. Both are 12bit per pixel RAW formats and 30 fps @ 720p would be about 320Mbit/s. So how it can be negotiated by libv4l library if v4l2-ctl reports no RAW formats supported by this camera?

-albertr

According to fpsdisplaysink measurments, it’s solid 30 fps with no frame drops.

$PREFIX/bin/gst-launch-1.0 -vvv v4l2src device=/dev/video0 ! 'video/x-raw, width=1280, height=720, framerate=30/1' !  nvvidconv ! 'video/x-raw(memory:NVMM), width=1280, height=720, format=I420, framerate=30/1'  ! fpsdisplaysink video-sink=nvoverlaysink text-overlay=false --gst-debug-no-color=1
albertr@tx2:~$ ./gst.sh 
Setting pipeline to PAUSED ...
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0/GstNvOverlaySink-nvoverlaysink:nvoverlaysink-nvoverlaysink0: sync = true
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
/GstPipeline:pipeline0/GstV4l2Src:v4l2src0.GstPad:src: caps = "video/x-raw\,\ format\=\(string\)I420\,\ width\=\(int\)1280\,\ height\=\(int\)720\,\ pixel-aspect-ratio\=\(fraction\)1/1\,\ interlace-mode\=\(string\)progressive\,\ framerate\=\(fraction\)30/1"
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src: caps = "video/x-raw\,\ format\=\(string\)I420\,\ width\=\(int\)1280\,\ height\=\(int\)720\,\ pixel-aspect-ratio\=\(fraction\)1/1\,\ interlace-mode\=\(string\)progressive\,\ framerate\=\(fraction\)30/1"
/GstPipeline:pipeline0/Gstnvvconv:nvvconv0.GstPad:src: caps = "video/x-raw\(memory:NVMM\)\,\ width\=\(int\)1280\,\ height\=\(int\)720\,\ pixel-aspect-ratio\=\(fraction\)1/1\,\ interlace-mode\=\(string\)progressive\,\ framerate\=\(fraction\)30/1\,\ format\=\(string\)I420"
/GstPipeline:pipeline0/GstCapsFilter:capsfilter1.GstPad:src: caps = "video/x-raw\(memory:NVMM\)\,\ width\=\(int\)1280\,\ height\=\(int\)720\,\ pixel-aspect-ratio\=\(fraction\)1/1\,\ interlace-mode\=\(string\)progressive\,\ framerate\=\(fraction\)30/1\,\ format\=\(string\)I420"
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0.GstGhostPad:sink.GstProxyPad:proxypad0: caps = "video/x-raw\(memory:NVMM\)\,\ width\=\(int\)1280\,\ height\=\(int\)720\,\ pixel-aspect-ratio\=\(fraction\)1/1\,\ interlace-mode\=\(string\)progressive\,\ framerate\=\(fraction\)30/1\,\ format\=\(string\)I420"
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0/GstNvOverlaySink-nvoverlaysink:nvoverlaysink-nvoverlaysink0.GstPad:sink: caps = "video/x-raw\(memory:NVMM\)\,\ width\=\(int\)1280\,\ height\=\(int\)720\,\ pixel-aspect-ratio\=\(fraction\)1/1\,\ interlace-mode\=\(string\)progressive\,\ framerate\=\(fraction\)30/1\,\ format\=\(string\)I420"
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0.GstGhostPad:sink: caps = "video/x-raw\(memory:NVMM\)\,\ width\=\(int\)1280\,\ height\=\(int\)720\,\ pixel-aspect-ratio\=\(fraction\)1/1\,\ interlace-mode\=\(string\)progressive\,\ framerate\=\(fraction\)30/1\,\ format\=\(string\)I420"
/GstPipeline:pipeline0/GstCapsFilter:capsfilter1.GstPad:sink: caps = "video/x-raw\(memory:NVMM\)\,\ width\=\(int\)1280\,\ height\=\(int\)720\,\ pixel-aspect-ratio\=\(fraction\)1/1\,\ interlace-mode\=\(string\)progressive\,\ framerate\=\(fraction\)30/1\,\ format\=\(string\)I420"
/GstPipeline:pipeline0/Gstnvvconv:nvvconv0.GstPad:sink: caps = "video/x-raw\,\ format\=\(string\)I420\,\ width\=\(int\)1280\,\ height\=\(int\)720\,\ pixel-aspect-ratio\=\(fraction\)1/1\,\ interlace-mode\=\(string\)progressive\,\ framerate\=\(fraction\)30/1"
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:sink: caps = "video/x-raw\,\ format\=\(string\)I420\,\ width\=\(int\)1280\,\ height\=\(int\)720\,\ pixel-aspect-ratio\=\(fraction\)1/1\,\ interlace-mode\=\(string\)progressive\,\ framerate\=\(fraction\)30/1"
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0/GstNvOverlaySink-nvoverlaysink:nvoverlaysink-nvoverlaysink0: sync = true
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 16, dropped: 0, current: 31.01, average: 31.01
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 31, dropped: 0, current: 29.94, average: 30.48
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 47, dropped: 0, current: 30.09, average: 30.35
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 62, dropped: 0, current: 29.99, average: 30.26
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 78, dropped: 0, current: 29.85, average: 30.18
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 94, dropped: 0, current: 30.06, average: 30.16
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 110, dropped: 0, current: 30.10, average: 30.15
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 125, dropped: 0, current: 29.98, average: 30.13
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 141, dropped: 0, current: 29.85, average: 30.10
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 157, dropped: 0, current: 30.10, average: 30.10
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 172, dropped: 0, current: 29.97, average: 30.09
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 188, dropped: 0, current: 30.05, average: 30.08
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 204, dropped: 0, current: 29.86, average: 30.07
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 220, dropped: 0, current: 30.10, average: 30.07
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 235, dropped: 0, current: 29.98, average: 30.06
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 251, dropped: 0, current: 30.07, average: 30.06
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 267, dropped: 0, current: 29.89, average: 30.05
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 283, dropped: 0, current: 30.04, average: 30.05
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 299, dropped: 0, current: 30.08, average: 30.05
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 315, dropped: 0, current: 29.86, average: 30.04
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 331, dropped: 0, current: 30.09, average: 30.04
^[c/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 346, dropped: 0, current: 29.99, average: 30.04
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 362, dropped: 0, current: 30.08, average: 30.04
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 378, dropped: 0, current: 29.85, average: 30.04
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 394, dropped: 0, current: 30.11, average: 30.04
/GstPipeline:pipeline0/GstFPSDisplaySink:fpsdisplaysink0: last-message = rendered: 409, dropped: 0, current: 29.99, average: 30.04
...

-albertr

hi,
I’m in the precisely same case with albertr. Any one successfully done it?

We suggest try tegra_multimedia_api