Commit graph

2258 commits

Author SHA1 Message Date
Thibault Saunier
054569cce7 composition: Implement the logic to PAUSE the task while executing actions
We need to wait for the pipeline update to be actually finished before we can start another
action. That means that we pause the task until one buffer from the new stack is
outputed.

Co-Authored by: Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
2014-10-31 11:58:09 +01:00
Mathieu Duponchelle
6e476ddd24 composition: Do not forget to set expandables state to NULL when disposing
Co-Authored by: Thibault Saunier <tsaunier@gnome.org>
2014-10-31 11:58:09 +01:00
Thibault Saunier
bd47c57d1a composition: Factor out a function to commit only the values
Co-Authored by: Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
2014-10-31 11:58:09 +01:00
Mathieu Duponchelle
de9c348ae0 composition: Get the current position before actually commiting values on commit
Co-Authored by: Thibault Saunier <tsaunier@gnome.org>
2014-10-31 11:58:09 +01:00
Thibault Saunier
eeb530e19d composition: Add a method that set the current bin to READY
We need to get the stream lock in some conditions, and thuse send
flush event in those cases.

Co-Authored by: Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
2014-10-31 11:58:09 +01:00
Mathieu Duponchelle
c99642fe66 composition: Remove useless code
Co-Authored by: Thibault Saunier <tsaunier@gnome.org>
2014-10-31 11:58:09 +01:00
Thibault Saunier
5efd167bf2 composition: Clear the old stack when removing children that where used
Co-Authored by: Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
2014-10-31 11:58:09 +01:00
Mathieu Duponchelle
e522427cb4 composition: Remove useless toplevel_seek argiment from activate_new_stack
Co-Authored by: Thibault Saunier <tsaunier@gnome.org>
2014-10-31 11:58:08 +01:00
Thibault Saunier
7de8b9c16c composition: Rework the seqnum logic to avoid races when setting the new stack seqnum
When we were seeking the same stack without a logic that gurantees that we actually
saw the seek with the new seqnum set, we could have ended up with an EOS set with
the right seqnum even if it was actually not the case.

Co-Authored by: Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
2014-10-31 11:58:08 +01:00
Mathieu Duponchelle
7b55a91284 composition: Add/Remove children in the same order as they were called
Co-Authored by: Thibault Saunier <tsaunier@gnome.org>
2014-10-31 11:58:08 +01:00
Thibault Saunier
5ec01408df composition: Remove useless flush_start argument from the stop_task method
Co-Authored by: Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
2014-10-31 11:58:08 +01:00
Mathieu Duponchelle
44e95d240a composition: Force setting children state to NULL rebfore unrefing them
Co-Authored by: Thibault Saunier <tsaunier@gnome.org>
2014-10-31 11:58:08 +01:00
Thibault Saunier
f0c5f87284 compositition: Check last stack in the children thread
Avoiding to take the OBJECT_LOCK when recieving EOS. The computation is
based on the GstEvent.seqnum to make sure that the EOS we receive
corresponds to the right sequence.

In that patch we tweak seqnums so that they are correctly computed
avoiding to depend on all elements to do it properly as it might pretty
much not be the case!

Co-Authored by: Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
2014-10-31 11:58:08 +01:00
Mathieu Duponchelle
2e01715209 composition: Actiually set current_bin state even when not debugging
Co-Authored by: Thibault Saunier <tsaunier@gnome.org>
2014-10-31 11:58:08 +01:00
Thibault Saunier
5df6986a81 composition: Set *all* children state when going back to READY and then NULL
Co-Authored by: Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
2014-10-31 11:58:08 +01:00
Mathieu Duponchelle
27d58a30af composition: Fix toplevel seek event refcounting
Co-Authored by: Thibault Saunier <tsaunier@gnome.org>
2014-10-31 11:58:08 +01:00
Thibault Saunier
0e663da588 composition: Teach the composition to seek same stack
Co-Authored by: Thibault Saunier <tsaunier@gnome.org>
2014-10-31 11:58:08 +01:00
Thibault Saunier
c05898a169 composition: The ref the user gave us is our, and we give another to the bin when needed
Co-Authored by: Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
2014-10-31 11:58:08 +01:00
Mathieu Duponchelle
976cebeaed composition: Rename commit_pipeline_func to commit_func
We do not commit any pipeline, we commit the new state of the composition internals

Co-Authored by: Thibault Saunier <tsaunier@gnome.org>
2014-10-31 11:58:08 +01:00
Thibault Saunier
3f76ea7c2f composition: Set the state of the internal bin before removing its children
Otherwize when we set the composition state to READY or NULL we can end
up with children in PAUSED state outside of everything

Co-Authored by: Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
2014-10-31 11:58:08 +01:00
Mathieu Duponchelle
d73cab7186 tests: Minor cleanup
Co-Authored by: Thibault Saunier <tsaunier@gnome.org>
2014-10-31 11:58:08 +01:00
Thibault Saunier
9c9fe03b8f gnlobject: Allow commiting of object that are not inside a composition
Co-Authored by: Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
2014-10-31 11:58:08 +01:00
Mathieu Duponchelle
23f58e27e6 composition: Empty current_bin on gnl_composition_reset
Co-Authored by: Thibault Saunier <tsaunier@gnome.org>
2014-10-31 11:58:08 +01:00
Thibault Saunier
be37cb14bd composition: Remove now useless external_gst_bin_add_remove field
Co-Authored by: Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
2014-10-31 11:58:08 +01:00
Mathieu Duponchelle
2af389dc87 composition: Remove now useless pad probes
Co-Authored by: Thibault Saunier <tsaunier@gnome.org>
2014-10-31 11:58:08 +01:00
Thibault Saunier
74c30001f9 composition: Add an internal bin where that contain used children
Co-Authored by: Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
2014-10-31 11:58:08 +01:00
Thibault Saunier
d8ca412cd9 composition: Add objects to the pending IO list in a GSource
This way we make sure we do not manipulate our children from another
thread than the dedicated one.
2014-10-31 11:58:08 +01:00
Thibault Saunier
bb7fa996b4 composition: Start implementing seeking in a GSource 2014-10-31 11:58:08 +01:00
Thibault Saunier
5faa417583 composition: switch to using an action signal to add and remove objects. 2014-10-31 11:58:08 +01:00
Mathieu Duponchelle
be269c833f composition: chain up finalize before clering mcontext_lock. 2014-10-31 11:58:08 +01:00
Thibault Saunier
33aea7c5f4 composition: Initialize the first stack async 2014-10-31 11:58:08 +01:00
Thibault Saunier
3c958af13c Finish fixing tests 2014-10-31 11:58:08 +01:00
Mathieu Duponchelle
ab1d577a10 tests/common: disconnect commited handler 2014-10-31 11:58:08 +01:00
Mathieu Duponchelle
6dc52ca0d2 composition: Actually commit in on our own thread
Avoiding races
2014-10-31 11:58:08 +01:00
Mathieu Duponchelle
23e7788921 composition: start and stop task in init and finalize 2014-10-31 11:58:07 +01:00
Mathieu Duponchelle
170ea10cde tests: unref message correctly 2014-10-31 11:58:07 +01:00
Mathieu Duponchelle
e81d987fad composition: home grown task 2014-10-31 11:58:07 +01:00
Mathieu Duponchelle
c9bbb1d230 Don't be sync silly test 2014-10-31 11:58:07 +01:00
Mathieu Duponchelle
13ae2cecd3 composition: simplify update_pipeline_func 2014-10-31 11:58:07 +01:00
Thibault Saunier
9c10aa34d1 composition: Reset the srcpad target when removing the toplevelentry 2014-10-31 11:58:07 +01:00
Thibault Saunier
550aaf522d composition: Use a GstPad task to run the update pipeline thread 2014-10-31 11:58:07 +01:00
Thibault Saunier
6b193cdbda gnlcomposition: Factor out code to deactivate old stack and activate new one 2014-10-31 11:58:07 +01:00
Thibault Saunier
924f9ecf83 composition: Avoid looping using gotos 2014-10-31 11:58:07 +01:00
Thibault Saunier
03b11d58e4 gnlcomposition: Use the new _object_block_and_drop_data where appropriate
Renaming block_object_src_pad to _object_block_and_drop_data
2014-10-31 11:58:07 +01:00
Thibault Saunier
978e5cbe48 gnlcomposition: factor out some functions 2014-10-31 11:58:07 +01:00
Thibault Saunier
bf367f704c gnlcomposition: Factor out the condition of _parent_or_priority_changed 2014-10-31 11:58:07 +01:00
Thibault Saunier
381f7d2aee gnlcomposition: Add a function to block object source pad 2014-10-31 11:58:07 +01:00
Mathieu Duponchelle
4cb834fa21 gnl: Add the srcpad directly to GnlObject
Starting from now we will not claim that we support GnlObject that have
several source pads as this is
1- Not true at all;
2- the design of priorities in the GnlComposition tree does not allow that;
3- Not very useful in most of the cases and it complexifies quite a lot the code
   in the composition.

Conflicts:
	configure.ac
	tests/check/Makefile.am
2014-10-31 11:58:07 +01:00
Thibault Saunier
38b080deb3 Revert "gnlobject: Commit object in READY_TO_PAUSED"
This causes races when seeking, reverting for now even if we will
probably want to bring something like that back.

This reverts commit 3549e745a8f0de3977b83c60e9b447afaf55d8a0.
2014-10-31 11:58:07 +01:00
Mathieu Duponchelle
bd7d8776a1 gnlsource: remove useless "controls_one" field. 2014-10-31 11:58:07 +01:00