tee: needs to aggregate QoS THROTTLE events from all source branches
Submitted by Yongnian
Link to original bug (#638891)
Description
There might be many cases that some window is invisible
(for example other window is in full screen), its related sink elements are still busy in rendering and upstream elements are busy in processing and decoding. Here a new event type "QOS_OBSCURED" is introduced.
The UI toolkit (Gtk+, Qt) already keeps track of windows status information: visible or invisible etc. So it would be straightforward to extend the GstVideoSink class to have a property that encourages degraded rendering. When such property is set, the "QOS_OBSCURED" event is pushed to upstream elements for handling: degraded quality for less resources.
And, for bonus points, as there is a trend in the industry toward stream switching for video over the internet, such event could be used to select appropriate media info in future.
After discussion with David Schleef (ds@entropywave.com) and Halley Zhao (halley.zhao@intel.com), the patches (based on version 0.10.28) for such mechanism are ready for video rendering degradation when it is invisible. They include below changes:
- gstquark.h/gstquark.c: new quark string
- gstevent.h/gstevent.c: new QoS event
- gstvideosink.c: generate new QoS event when it encourages degraded rendering
- gsttee.c: degrade handling rate when it receives degraded rendering request