[Bug 774049] New: New features/functionality in the Aggregator and VideoAggregator

GStreamer (GNOME Bugzilla) bugzilla at gnome.org
Mon Nov 7 11:15:39 UTC 2016


https://bugzilla.gnome.org/show_bug.cgi?id=774049

            Bug ID: 774049
           Summary: New features/functionality in the Aggregator and
                    VideoAggregator
    Classification: Platform
           Product: GStreamer
           Version: 1.x
                OS: Linux
            Status: NEW
          Severity: enhancement
          Priority: Normal
         Component: gst-plugins-bad
          Assignee: gstreamer-bugs at lists.freedesktop.org
          Reporter: msb at qtec.com
        QA Contact: gstreamer-bugs at lists.freedesktop.org
     GNOME version: ---

In the recent Gstreamer conference (2016) I have presented a talk about using
Gstreamer pipelines for image processing in industrial applications.
In this talk I mentioned that I had the need of muxing some metadata generated
by processing (and thus modifying) image frames into the original (unmodified)
images.

For this purpose I have created my own muxing element (using the Compositor as
inspiration) which uses the VideoAggregator as the base class.
However the VideoAggreagtor and it's base class the Aggregator didn't quite
cover my needs so I ended up modifying my own local copies of these 2 classes.

During the conference there was interest expressed in hearing which where my
different use cases because maybe they could be added upstream.

Since I want to mux what is actually the same original frame (just divided and
processed differently by 2 separate tee branches) I want to do timestamp
matching of the buffers (I don't care about maintaining the fps and don't want
to duplicate frames):

-Therefore I want to produce output frames only when I have received input
frames in all pads (in contrast to the Aggregator producing output as soon as 1
pad has data, in case of a live source which is what I have).
My easy solution for this was adding a new property to the Aggregator that
forces it to work as with non-live sources (so that it requires data in all
pads).

-Then I added to VideoAggregator a property that defines if it should work
"normally" (producing frames in a deadline, fps) or if it should check the
buffer timestamps and only produce frames when they match. I have created a
function like the fill_queues() function which does the timestamp checking.

-In case I'm only producing frames based on matched timestamps I have problems
with QOS because the segment times might not match anymore (since frames are
not necessarily produced regularly anymore). To solve this I have created a
function that adjusts the segment times based on the produced frames.

-Lastly, in my "Compositor like" Muxer element I needed the option to drop
frames in some cases so I have added a new GstFlowReturn to VideoAggregator
(GST_FLOW_VIDEO_AGGREGATOR_DROP_FRAME == GST_FLOW_CUSTOM_SUCCESS) just like it
exists for the BaseTransform

-- 
You are receiving this mail because:
You are the QA Contact for the bug.
You are the assignee for the bug.


More information about the gstreamer-bugs mailing list