Folks,
I'm testing a computer vision element in a GStreamer pipeline; my element receives a live video stream from a webcam and runs some image processing code on it and saves the results to a database. When compiled with a debug flag, it also updates the video stream with some debugging marks. For debugging and development, I also run it from recorded videos.
My pipeline for live debugging from a recorded video (it works):
gst-launch filesrc location=test-16.avi ! h264parse ! ffdec_h264 ! people-heatmap db-path=test-16.sqlite ! xvimagesink
When I try a "blind debug" (i.e., save the data to the database, but with no video output), I do:
gst-launch filesrc location=test-16.avi ! h264parse ! ffdec_h264 ! people-heatmap db-path=test-16.sqlite ! fakesink sync=true
notice the "sync=true" in the fakesink. Without it, the code runs in a very high framerate and my vision algorithm gets lost (as it depends on the system clock to run).
But, when I try to re-encode the debug-marked video to a file (for later analysis) with:
gst-launch filesrc location=test-16.avi ! h264parse ! ffdec_h264 ! people-heatmap db-path=test-16.sqlite ! ffmpegcolorspace ! ffenc_mpeg4 ! ffmux_avi ! filesink location="debug-test-16.avi"
my code runs at a high frame rate (which, I suppose, is the maximum supported by my CPU).
I assumed it was the same problem I solved with the "sync=true" in the blind-debug case, but putting this option in the filesink element got me nothing.
So, how can I force the entire pipeline to run in real time (according to the video frame rate) when encoding the video to a file?
Thanks in advance,