AnsweredAssumed Answered

Freescale i.MX6DL GStreamer imxv4l2src tee'd framerate-issue

Question asked by Philipp Kaiser on Mar 14, 2018
Latest reply on Mar 16, 2018 by Philipp Kaiser

Hi everyone,

 

I'm working on a project using the i.MX6 to send out two different video/image signals using GStreamer.
The basic idea of the project/pipe is this:

My pipe-construct looks like this:

gst-launch-1.0 __SOURCE__ ! tee name=t \
t. ! videorate drop-only=true ! capsfilter name=frame_rate ! imxvideoconvert_ipu ! queue max-size-buffers=1 leaky=2 name=q ! vpuenc_h264 ! flvmux ! rtmpsink_rlm #someworkingrtmpsink# \
t. ! queue !  __FRAMERATE__ ! videoscale sharpen=1 sharpness=1.5 ! pngenc compression-level=1 !  multifilesink max-files=3 location=/tmp/SinkPic%05d.png

 

Now when using "__SOURCE__" = "videotestsrc" the following results occur:

 

__FRAMERATE__=   " videorate drop-only=true max-rate= X " [X from 1 to ~10]  everything works fine

__FRAMERATE__=   " videorate drop-only=true ! video/x-raw,framerate=1/2 " it works fine, but for any other value than 1/2 i get the following error:


0:00:00.093046097  1076  0x10ec5c0 DEBUG              videorate gstvideorate.c:563:gst_video_rate_reset:<GstVideoRate@0x10fe090> resetting internal variables
0:00:00.093229099  1076  0x10ec5c0 LOG                videorate gstvideorate.c:671:gst_video_rate_swap_prev:<GstVideoRate@0x10fe090> swap_prev: storing buffer (nil) in prev
0:00:00.142006516  1076  0x10ec5c0 DEBUG              videorate gstvideorate.c:563:gst_video_rate_reset:<GstVideoRate@0x10fe3c0> resetting internal variables
0:00:00.142134518  1076  0x10ec5c0 LOG                videorate gstvideorate.c:671:gst_video_rate_swap_prev:<GstVideoRate@0x10fe3c0> swap_prev: storing buffer (nil) in prev
0:00:00.142498857  1076  0x10ec5c0 DEBUG              videorate gstvideorate.c:563:gst_video_rate_reset:<GstVideoRate@0x10fe6f0> resetting internal variables
0:00:00.142558191  1076  0x10ec5c0 LOG                videorate gstvideorate.c:671:gst_video_rate_swap_prev:<GstVideoRate@0x10fe6f0> swap_prev: storing buffer (nil) in prev
0:00:00.198065044  1076  0x10ec5c0 ERROR           GST_PIPELINE grammar.y:617:gst_parse_perform_link: could not link videorate2 to pngenc0

----------------------------------------------------------------------------------------------

Now when using the desired "__SOURCE__" = "imxv4l2src" thats what happens for above framerate settings:

 

__FRAMERATE__=   " videorate drop-only=true max-rate= 10 "  works fine

__FRAMERATE__=   " videorate drop-only=true max-rate= 1 " aka close to what I desire gives the following error:

 

0:00:02.052936041  1232   0x6a5090 LOG                videorate gstvideorate.c:653:gst_video_rate_flush_prev:<videorate0> old is best, dup, pushing buffer outgoing ts 0:00:00.400000000
0:00:02.146247057  1232   0x6a5090 ERROR                imxv4l2 gstimxv4l2.c:1563:gst_imx_v4l2_find_buffer: Can't find the buffer 0x45100000.
0:00:02.146391726  1232   0x6a5090 ERROR             imxv4l2src gstimxv4l2src.c:631:gst_imx_v4l2src_acquire_buffer:<source> Queue buffer 0x74b06b68 failed.
0:00:02.146513394  1232   0x6a5090 WARN                 basesrc gstbasesrc.c:2943:gst_base_src_loop:<source> error: Internal data flow error.
0:00:02.146569061  1232   0x6a5090 WARN                 basesrc gstbasesrc.c:2943:gst_base_src_loop:<source> error: streaming task paused, reason error (-5)
0:00:02.146958399  1232   0x6a5090 DEBUG              videorate gstvideorate.c:755:gst_video_rate_sink_event:<videorate0> Got EOS
ERROR: from element /GstPipeline:pipeline0/GstImxV4l2Src:source: Internal data flow error.
Additional debug info:
/jenkins/workspace/MDevice_Multibranch_rc_v1.1-IMWRTTOUOSNT5UGOVXMW3LATAWM6UV37YLJC3KJFBLYJVMX2TSYA/yocto_project/build_test/tmp/work/cortexa9hf-vfp-neon-poky-linux-gnueabi/gstreamer1.0/1.6.0-r0/gstreamer-1.6.0/libs/gst/base/gstbasesrc.c(2943): gst_base_src_loop (): /GstPipeline:pipeline0/GstImxV4l2Src:source:
streaming task paused, reason error (-5)
0:00:02.147277735  1232   0x6a4c00 DEBUG              videorate gstvideorate.c:1124:gst_video_rate_transform_ip:<videorate1> got buffer with timestamp 0:00:01.206030355
Execution ended after 0:00:01.505231404
0:00:02.147375070  1232   0x6a4c00 LOG                videorate gstvideorate.c:671:gst_video_rate_swap_prev:<videorate1> swap_prev: storing buffer 0x74b068e8 in prev
Setting pipeline to PAUSED ...

 

 

In the first case  (framerate = 10 ) I can detect that TOP CPU-usage for the pipe is very high and actually there are way less pngs created per second than the defined 10, so my guess is that once my fps defined are below the maximum pngs/sec the CPU is capable of the above error occurs. 

 

__FRAMERATE__=   " videorate drop-only=true ! video/x-raw,framerate=X " [X>1] same as with the videotestsrc

 

__FRAMERATE__=   " videorate drop-only=true ! video/x-raw,framerate=1/2 " works perfectly for about 2-20 seconds, when finally it crashes with the following

 

0:00:23.032327854  1279  0x15bcc60 DEBUG              videorate gstvideorate.c:1124:gst_video_rate_transform_ip:<videorate1> got buffer with timestamp 0:00:22.088522467
0:00:23.032538190  1279  0x15bcc60 LOG                videorate gstvideorate.c:671:gst_video_rate_swap_prev:<videorate1> swap_prev: storing buffer 0x75408528 in prev
0:00:23.032738525  1279  0x15bcc30 ERROR                imxv4l2 gstimxv4l2.c:1563:gst_imx_v4l2_find_buffer: Can't find the buffer 0x45300000.
0:00:23.032866193  1279  0x15bcc30 ERROR             imxv4l2src gstimxv4l2src.c:631:gst_imx_v4l2src_acquire_buffer:<source> Queue buffer 0x75408528 failed.
0:00:23.033049195  1279  0x15bcc30 WARN                 basesrc gstbasesrc.c:2943:gst_base_src_loop:<source> error: Internal data flow error.
0:00:23.033113529  1279  0x15bcc30 WARN                 basesrc gstbasesrc.c:2943:gst_base_src_loop:<source> error: streaming task paused, reason error (-5)
0:00:23.033483867  1279  0x15bcc30 DEBUG              videorate gstvideorate.c:755:gst_video_rate_sink_event:<videorate0> Got EOS
ERROR: from element /GstPipeline:pipeline0/GstImxV4l2Src:source: Internal data flow error.
Additional debug info:
/jenkins/workspace/MDevice_Multibranch_rc_v1.1-IMWRTTOUOSNT5UGOVXMW3LATAWM6UV37YLJC3KJFBLYJVMX2TSYA/yocto_project/build_test/tmp/work/cortexa9hf-vfp-neon-poky-linux-gnueabi/gstreamer1.0/1.6.0-r0/gstreamer-1.6.0/libs/gst/base/gstbasesrc.c(2943): gst_base_src_loop (): /GstPipeline:pipeline0/GstImxV4l2Src:source:
streaming task paused, reason error (-5)
Execution ended after 0:00:22.354271400
Setting pipeline to PAUSED ...

 

Additionally when using the above pipe without the queue for the png-tee-branch the pngs get created every 2 seconds as they should, the pipe doesn't break, but

the live-image is stuttering exactly every 2 seconds which is intolerable for the application.
-----------------------------------------------

My question would be if there is a known issue concerning the imxv4l2src in connection with queues and framerate-changes, or if I'm just missing something within my pipe.

I'm grateful for every help and hoping that my attached logs help finding the issue.

Thanks in advance
Philipp

Outcomes