# Help with gstreamer speed improvement via using userptr buffer allocations

**URL:** <https://forums.developer.nvidia.com/t/help-with-gstreamer-speed-improvement-via-using-userptr-buffer-allocations/60154>\
**Category:** Jetson TX2\
**Created:** [April 12, 2018, 2:24am UTC](https://forums.developer.nvidia.com/t/help-with-gstreamer-speed-improvement-via-using-userptr-buffer-allocations/60154 "2018-04-12T02:24:34Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![albertr](https://developer.download.nvidia.com/images/forums/profile-default-devtalk-84.png) [@albertr](https://forums.developer.nvidia.com/u/albertr)\
**Post date:** [April 12, 2018, 2:24am UTC](https://forums.developer.nvidia.com/t/help-with-gstreamer-speed-improvement-via-using-userptr-buffer-allocations/60154/1 "2018-04-12T02:24:34Z")

</div>

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:

```auto
/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:

```auto
/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

```

```auto
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:

```auto
/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

```

```auto
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:

```auto
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

---

<div class="post-metadata">

**Author:** ![DaneLLL](https://sea2.discourse-cdn.com/nvidia/user_avatar/forums.developer.nvidia.com/danelll/32/14043_2.png) [@DaneLLL](https://forums.developer.nvidia.com/u/DaneLLL)\
**Post date:** [April 12, 2018, 4:26am UTC](https://forums.developer.nvidia.com/t/help-with-gstreamer-speed-improvement-via-using-userptr-buffer-allocations/60154/2 "2018-04-12T04:26:32Z")

</div>

Hi albertr,  
We suggest you try tegra\_multimedia\_api and refer to

```auto
tegra_multimedia_api\samples2_camera_v4l2_cuda
tegra_multimedia_api\samples\v4l2cuda

```

---

<div class="post-metadata">

**Author:** ![albertr](https://developer.download.nvidia.com/images/forums/profile-default-devtalk-84.png) [@albertr](https://forums.developer.nvidia.com/u/albertr)\
**Post date:** [April 12, 2018, 2:21pm UTC](https://forums.developer.nvidia.com/t/help-with-gstreamer-speed-improvement-via-using-userptr-buffer-allocations/60154/3 "2018-04-12T14:21:32Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![albertr](https://developer.download.nvidia.com/images/forums/profile-default-devtalk-84.png) [@albertr](https://forums.developer.nvidia.com/u/albertr)\
**Post date:** [April 12, 2018, 3:01pm UTC](https://forums.developer.nvidia.com/t/help-with-gstreamer-speed-improvement-via-using-userptr-buffer-allocations/60154/4 "2018-04-12T15:01:07Z")

</div>

yavta seems to be able to allocate buffers using IO\_METHOD\_USEPTR on the same system with the same camera, please see below.

```auto
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#

```

---

<div class="post-metadata">

**Author:** ![dgoetz](https://developer.download.nvidia.com/images/forums/profile-default-devtalk-84.png) [@dgoetz](https://forums.developer.nvidia.com/u/dgoetz)\
**Post date:** [April 13, 2018, 10:14pm UTC](https://forums.developer.nvidia.com/t/help-with-gstreamer-speed-improvement-via-using-userptr-buffer-allocations/60154/5 "2018-04-13T22:14:56Z")

</div>

I was just looking at some information about this:

> **[GStreamer1.0 and V4L2 UserPtr | V4L2 User Pointer | RidgeRun](https://developer.ridgerun.com/wiki/index.php?title=Gstreamer1.0_and_V4L2_UserPtr)**
>
> Some people have encountered the issue of V4L2 UserPtr not working in the newer GStreamer1.0. Learn how to work around this V4L2 user pointer problem ...

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

---

<div class="post-metadata">

**Author:** ![albertr](https://developer.download.nvidia.com/images/forums/profile-default-devtalk-84.png) [@albertr](https://forums.developer.nvidia.com/u/albertr)\
**Post date:** [April 14, 2018, 3:13pm UTC](https://forums.developer.nvidia.com/t/help-with-gstreamer-speed-improvement-via-using-userptr-buffer-allocations/60154/6 "2018-04-14T15:13:51Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![snarky](https://sea2.discourse-cdn.com/nvidia/user_avatar/forums.developer.nvidia.com/snarky/32/10446_2.png) [@snarky](https://forums.developer.nvidia.com/u/snarky)\
**Post date:** [April 14, 2018, 3:55pm UTC](https://forums.developer.nvidia.com/t/help-with-gstreamer-speed-improvement-via-using-userptr-buffer-allocations/60154/7 "2018-04-14T15:55:38Z")

</div>

You already have the clues you need.

This doesn’t work:

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

```

This works:

```auto
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.)

---

<div class="post-metadata">

**Author:** ![albertr](https://developer.download.nvidia.com/images/forums/profile-default-devtalk-84.png) [@albertr](https://forums.developer.nvidia.com/u/albertr)\
**Post date:** [April 14, 2018, 4:26pm UTC](https://forums.developer.nvidia.com/t/help-with-gstreamer-speed-improvement-via-using-userptr-buffer-allocations/60154/8 "2018-04-14T16:26:32Z")

</div>

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:

```auto
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.

```auto
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

```

```auto
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

```

```auto
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:

```auto
$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:

```auto
$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

---

<div class="post-metadata">

**Author:** ![albertr](https://developer.download.nvidia.com/images/forums/profile-default-devtalk-84.png) [@albertr](https://forums.developer.nvidia.com/u/albertr)\
**Post date:** [April 14, 2018, 5:15pm UTC](https://forums.developer.nvidia.com/t/help-with-gstreamer-speed-improvement-via-using-userptr-buffer-allocations/60154/9 "2018-04-14T17:15:47Z")

</div>

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

```auto
$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

```

```auto
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

---

<div class="post-metadata">

**Author:** ![xliu](https://developer.download.nvidia.com/images/forums/profile-default-devtalk-84.png) [@xliu](https://forums.developer.nvidia.com/u/xliu)\
**Post date:** [May 10, 2018, 2:51am UTC](https://forums.developer.nvidia.com/t/help-with-gstreamer-speed-improvement-via-using-userptr-buffer-allocations/60154/10 "2018-05-10T02:51:58Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![DaneLLL](https://sea2.discourse-cdn.com/nvidia/user_avatar/forums.developer.nvidia.com/danelll/32/14043_2.png) [@DaneLLL](https://forums.developer.nvidia.com/u/DaneLLL)\
**Post date:** [May 17, 2018, 8:08am UTC](https://forums.developer.nvidia.com/t/help-with-gstreamer-speed-improvement-via-using-userptr-buffer-allocations/60154/11 "2018-05-17T08:08:22Z")

</div>

> [@](#):
>
> hi,  
> I’m in the precisely same case with albertr. Any one successfully done it?

We suggest try tegra\_multimedia\_api
