[Bug 709224] audio/videodecoder: Not returning GST_FLOW_EOS when after segment
GStreamer (bugzilla.gnome.org)
bugzilla at gnome.org
Thu Nov 14 10:42:09 PST 2013
https://bugzilla.gnome.org/show_bug.cgi?id=709224
GStreamer | gst-plugins-base | git
--- Comment #43 from Thiago Sousa Santos <thiago.sousa.santos at collabora.co.uk> 2013-11-14 18:42:00 UTC ---
Finally organized all the branches and ran some scenarios for all of them under
valgrind. Here are the candidates:
1) Current version - the upstream implementation, no flow combiner.
2) Array iteration - Stores the pad last_return into an array, has the drawback
of needing to return a GstPadFlowId to identify the pad, users need to store
this data.
3) Hashtable - Uses a hashtable internally, straightforward approach, but there
is a hashtable
4) EOS/Notlinked lists - Stores a list of pads currently on EOS and another
list for NOT_LINKED. Everything else is returned immediately. This has a
different meaning for the scenario where you do: _OK, _ERROR, _OK. The returns
for those updates would be: _OK, _ERROR, and *_OK*. The last one returns _OK
because the error has already been returned and the user and it was ignored as
it proceeded to combine flows.
5) Callback - Uses a callback function to ask the user for the current
flow-return of a stream. It also doesn't store pads, but gpointer to generic
structs that represent the streams for the elements using them.
All of the implementations can be found at:
http://cgit.freedesktop.org/~thiagoss/gst-plugins-bad
The scenarios tested (all under callgrind):
* tee: gst-launch-1.0 fakesrc num-buffers=1000000 ! tee name=t ! queue!
fakesink t. ! queue ! fakesink t. ! queue ! fakesink t. ! queue ! fakesink t. !
queue ! fakesink
* tee-notlinked: gst-launch-1.0 fakesrc num-buffers=1000000 ! tee name=t !
queue! fakesink t. ! queue ! fakesink t. ! queue ! fakesink t. ! queue !
fakesink t. ! queue
* ogg: gst-launch-1.0 filesrc location=/home/thiagoss/gst/head/test.ogg !
oggdemux name=d ! queue ! fakesink d. ! queue ! fakesink d. ! queue ! fakesink
* ogg-notlinked: gst-launch-1.0 filesrc
location=/home/thiagoss/gst/head/test.ogg ! oggdemux name=d ! queue ! fakesink
d. ! queue ! fakesink
test.ogg contains 1 video and 2 audios, ~28min.
Results:
tee | tee not linked | ogg | ogg not linked
Current : 1 358 000 000 | 1 355 000 003 | 237 625 753 | 235 570 313
array : 1 479 000 000 | 1 571 999 907 | 244 333 265 | 247 011 452
hashtable : 1 989 000 000 | 2 312 937 087 | 266 927 779 | 283 175 577
eos/notlinked: 2 757 000 000 | 2 566 038 218 | 255 379 011 | 255 598 118
callback : 1 469 000 000 | 1 571 978 800 | 243 745 984 | 246 878 300
For tee those are the callgrind 'absolute' results for the gst_tee_handle_data
function, for ogg are for the gst_ogg_demux_chain_peer function.
--
Configure bugmail: https://bugzilla.gnome.org/userprefs.cgi?tab=email
------- 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