<div dir="auto"><div><br><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Le lun. 7 nov. 2022, 10 h 50, Christian Hattenberger <<a href="mailto:christian.hattenberger@gmail.com">christian.hattenberger@gmail.com</a>> a écrit :<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="DE" link="blue" vlink="purple"><div class="m_1142378048348340693WordSection1"><p class="MsoNormal"><span lang="EN-US">Thnx I understand now the dmabuff problem with the v4l2loopback driver, but why is vaapi decode slower than sw decoder with memcopy?</span></p></div></div></blockquote></div></div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="DE" link="blue" vlink="purple"><div class="m_1142378048348340693WordSection1"><p class="MsoNormal"><span lang="EN-US"><u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">gst-launch-1.0 filesrc location=/mnt/DATA/tearing.mp4 ! qtdemux ! vaapih264dec ! queue ! fpsdisplaysink video-sink="xvimagesink" sync=false text-overlay=true<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">is playing with 9fps<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">gst-launch-1.0 filesrc location=/mnt/DATA/tearing.mp4 ! qtdemux ! avdec_h264 ! queue ! fpsdisplaysink video-sink="xvimagesink" sync=false text-overlay=true<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">is playing with 45fps</span></p></div></div></blockquote></div></div><div dir="auto"><br></div><div dir="auto">There is more the one possible explanation. One is that GPU memory is often setup without cpu cache, so they stay coherent. Read and writes are then over 20x slower.</div><div dir="auto"><br></div><div dir="auto">avdec_h264 do direct decoder into xv allocated memory, this gives an important boost. The decoder is multithreaded, so it can be very fast. He decoders are steady, but they are not fast.</div><div dir="auto"><br></div><div dir="auto">The fallback in your va driver to download the images and convert the to a linear representation might be entirely software, and possibly using uncached read/writes.</div><div dir="auto"><br></div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="DE" link="blue" vlink="purple"><div class="m_1142378048348340693WordSection1"><p class="MsoNormal"><span lang="EN-US"><u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><b>Von:</b> Nicolas Dufresne <<a href="mailto:nicolas@ndufresne.ca" target="_blank" rel="noreferrer">nicolas@ndufresne.ca</a>> <br><b>Gesendet:</b> Montag, 7. November 2022 02:56<br><b>An:</b> Christian Hattenberger <<a href="mailto:christian.hattenberger@gmail.com" target="_blank" rel="noreferrer">christian.hattenberger@gmail.com</a>><br><b>Cc:</b> Discussion of the development of and with GStreamer <<a href="mailto:gstreamer-devel@lists.freedesktop.org" target="_blank" rel="noreferrer">gstreamer-devel@lists.freedesktop.org</a>><br><b>Betreff:</b> Re: Why is connecting vaapi decoder to v4l2sink stuttering?<u></u><u></u></p><p class="MsoNormal"><u></u> <u></u></p><div><div><p class="MsoNormal" style="margin-bottom:12.0pt"><u></u> <u></u></p><div><div><p class="MsoNormal">Le dim. 6 nov. 2022, 10 h 22, Christian Hattenberger <<a href="mailto:christian.hattenberger@gmail.com" target="_blank" rel="noreferrer">christian.hattenberger@gmail.com</a>> a écrit :<u></u><u></u></p></div><blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm"><div><div><p class="MsoNormal"><span lang="EN-US">If I use vaapipostproc in the chain with vaapisink it seems ok, so I think it does dmabuff, </span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">but when I use  io-mode=dmabuf-import with v4l2sink I get “Failed to allocated required memory” </span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US"> </span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">gst-launch-1.0 filesrc location=/mnt/DATA/tearing.mp4 ! decodebin ! v4l2sink io-mode=dmabuf-import device=/dev/video10<br>…<br>0:00:00.376954941 18843 0x7f4d44041460 ERROR          v4l2allocator gstv4l2allocator.c:740:gst_v4l2_allocator_start:<v4l2sink0:pool1:sink:allocator> error requesting 2 buffers: Invalid argument</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">0:00:00.377023310 18843 0x7f4d44041460 ERROR         v4l2bufferpool gstv4l2bufferpool.c:920:gst_v4l2_buffer_pool_start:<v4l2sink0:pool1:sink> we received 0 buffer from device '/dev/video10', we want at least 2</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">0:00:00.377052711 18843 0x7f4d44041460 ERROR             bufferpool gstbufferpool.c:559:gst_buffer_pool_set_active:<v4l2sink0:pool1:sink> start failed</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">…</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US"> </span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">v4l2-ctl -d /dev/video0 --all</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">Driver Info:</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">        Driver name      : v4l2 loopback</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">        Card type        : Dummy video device (0x0000)</span><u></u><u></u></p></div></div></blockquote></div></div><div><p class="MsoNormal">This out-of-tree driver is incomplete, it does not support dmabuf. You are out of luck here, unless you have time to improve it.<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><div><blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm"><div><div><p class="MsoNormal"><span lang="EN-US">        Bus info         : platform:v4l2loopback-000</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">        Driver version   : 5.15.49</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">        Capabilities     : 0x85208003</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">                Video Capture</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">                Video Output</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">                Video Memory-to-Memory</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">                Read/Write</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">                Streaming</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">                Extended Pix Format</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">                Device Capabilities</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">        Device Caps      : 0x05208003</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">                Video Capture</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">                Video Output</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">                Video Memory-to-Memory</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">                Read/Write</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">                Streaming</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">                Extended Pix Format</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">Priority: 2</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">Video input : 0 (loopback: ok)</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">Video output: 0 (loopback in)</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">Format Video Output:</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">        Width/Height      : 1920/1080</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">        </span>Pixel Format      : 'NV12' (Y/CbCr 4:2:0)<u></u><u></u></p><p class="MsoNormal">        <span lang="EN-US">Field             : None</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">        Bytes per Line    : 1920</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">        Size Image        : 3110400</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">        Colorspace        : Rec. 709</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">        Transfer Function : sRGB</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">        YCbCr/HSV Encoding: ITU-R 601</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">        Quantization      : Limited Range</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">        Flags             :</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">Streaming Parameters Video Capture:</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">        Frames per second: 30.000 (30/1)</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">        Read buffers     : 2</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">Streaming Parameters Video Output:</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">        Frames per second: 30.000 (30/1)</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">        Write buffers    : 2</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US"> </span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">User Controls</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US"> </span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">                    keep_format 0x0098f900 (bool)   : default=0 value=0</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">              sustain_framerate 0x0098f901 (bool)   : default=0 value=0</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">                        timeout 0x0098f902 (int)    : min=0 max=100000 step=1 default=0 value=0        </span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US">               timeout_image_io 0x0098f903 (bool)   : default=0 value=0</span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US"> </span><u></u><u></u></p><p class="MsoNormal"><span lang="EN-US"> </span><u></u><u></u></p><p class="MsoNormal"><b>Von:</b> Nicolas Dufresne <<a href="mailto:nicolas@ndufresne.ca" target="_blank" rel="noreferrer">nicolas@ndufresne.ca</a>> <br><b>Gesendet:</b> Sonntag, 6. November 2022 14:32<br><b>An:</b> Discussion of the development of and with GStreamer <<a href="mailto:gstreamer-devel@lists.freedesktop.org" target="_blank" rel="noreferrer">gstreamer-devel@lists.freedesktop.org</a>><br><b>Cc:</b> Christian Hattenberger <<a href="mailto:christian.hattenberger@gmail.com" target="_blank" rel="noreferrer">christian.hattenberger@gmail.com</a>><br><b>Betreff:</b> Re: Why is connecting vaapi decoder to v4l2sink stuttering?<u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p><div><div><p class="MsoNormal" style="margin-bottom:12.0pt"> <u></u><u></u></p><div><div><p class="MsoNormal">Le sam. 5 nov. 2022, 13 h 16, Christian Hattenberger via gstreamer-devel <<a href="mailto:gstreamer-devel@lists.freedesktop.org" target="_blank" rel="noreferrer">gstreamer-devel@lists.freedesktop.org</a>> a écrit :<u></u><u></u></p></div><blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt"><div><p style="margin:0cm;margin-bottom:.0001pt;font-stretch:normal"><span style="font-size:14.5pt;font-family:"UICTFontTextStyleBody",serif;color:black">When I connect a vaapi decoder to v4l2sink the result is not as expected, same happens if I use autovideosink, I know for this I have to use vaapisink and it is working as expected, but is there a solution for v4l2sink? Can someone explain me the reason, is there a solution?</span><u></u><u></u></p><p style="margin:0cm;margin-bottom:.0001pt;font-stretch:normal;min-height:24.7px"><span style="font-size:14.5pt;color:black"> </span><u></u><u></u></p><p style="margin:0cm;margin-bottom:.0001pt;font-stretch:normal"><span style="font-size:14.5pt;font-family:"UICTFontTextStyleBody",serif;color:black">gst-launch-1.0 filesrc location=/tmp/video.mp4 ! decodebin ! vaapipostproc ! video/x-raw,format=YUY2 ! v4l2sink device=/dev/video10 </span><u></u><u></u></p></div></blockquote></div></div><div><p class="MsoNormal"> <u></u><u></u></p></div><div><p class="MsoNormal">Its experimental, and I am not sure if vaapipostproc does produce dmabuf in this case, but you can enable dmabuf-import on v4l2sink with property io-mode=dmabuf-import . By default, the frames are cpu copied from VA allocated memory into V4L2 allocated memory.<u></u><u></u></p></div><div><p class="MsoNormal"> <u></u><u></u></p></div><div><p class="MsoNormal">Nicolas<u></u><u></u></p></div><div><p class="MsoNormal"> <u></u><u></u></p></div></div></div></div></blockquote></div></div></div></div></div></blockquote></div></div></div>