[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