Commit graph

18185 commits

Author SHA1 Message Date
Tim-Philipp Müller 4e4438de21 aggregator: add doc blurb for gst_aggregator_pad_is_eos() 2017-12-02 15:10:27 +00:00
Tim-Philipp Müller 41f7b04c81 aggregator: also remove now-unused PadForeachFunc declaration
https://bugzilla.gnome.org/show_bug.cgi?id=785679
2017-12-02 15:10:27 +00:00
Olivier Crête e9fafb3e17 aggregator: Remove pad iterator function
Use new gst_element_foreach_sink_pad() from core instead.

https://bugzilla.gnome.org/show_bug.cgi?id=785679
2017-12-02 15:10:27 +00:00
Tim-Philipp Müller 2f3fbf24bc aggregator: use new gst_element_foreach_sink_pad()
Instead of gst_aggregator_iterate_sinkpads() which will
soon be removed.

https://bugzilla.gnome.org/show_bug.cgi?id=785679
2017-12-02 15:10:27 +00:00
Stefan Sauer f51557dbc5 aggregator: add more comments 2017-12-02 15:10:27 +00:00
Stefan Sauer 917214ed91 tests: comment and logging cleanups for audiomixer and aggregator
Remove some references to 'collectpads'. Logs pads through the object variants.
Add some more comments. Remove a left over comment.
2017-12-02 15:10:27 +00:00
Stefan Sauer 063787d770 aggregator: fix type for latency property (int64 -> GStClockTime)
The value is used as GstClockTiem in the code. Adapt the hack^H^H^H^Hcode
in live-adder.
2017-12-02 15:10:27 +00:00
Olivier Crête 3d0dad59a0 aggregator: Don't take flush lock from output thread
Instead just take it in the chain function.

https://bugzilla.gnome.org/show_bug.cgi?id=784911
2017-12-02 15:10:27 +00:00
Olivier Crête 8b60b25917 aggregator: Don't block if adding to the tail of the queue
If we're adding to the tail of the queue, it's because we're converting
a gap event, so don't block there it means we're calling from the output
thread.

https://bugzilla.gnome.org/show_bug.cgi?id=784911
2017-12-02 15:10:27 +00:00
Stefan Sauer a083391fb5 aggregator: review code related to time level
Add a comment for when the state matters. Use a local var for priv in
update_time_level() to improve readability. Move the our_latency local
var below the query results checks.
2017-12-02 15:10:27 +00:00
Stefan Sauer 23692ee688 aggregator: init latency values with 0 instead of FALSE 2017-12-02 15:10:27 +00:00
Stefan Sauer fb3c9f3808 aggregator: code cleanup for event and query func
Only look up klass for non serialized events/queries. For events remove
superfluous assignment for the return value in the flushing case.
2017-12-02 15:10:27 +00:00
Stefan Sauer 8776900cf7 aggregator: simplify pad_event_func for FLUSH_STOP events
We want to skip serialization for FLUSH_STOP events (apparently). We can
simplify the code to add it to the top-level conditions. There was nothing
done in the first code path if the event was FLUSH_STOP.
2017-12-02 15:10:27 +00:00
Stefan Sauer 5509920c27 aggregator: drop special casing for eos
Just queue it like any other serialized event. This way we don't need to
check if there still are buffers in the queue.

Validated with the tests and gst-launch-1.0 pipelines.
2017-12-02 15:10:27 +00:00
Stefan Sauer 113a2c508b aggregator: add a doc-blob for the event_func 2017-12-02 15:10:27 +00:00
Stefan Sauer 45cef5726f aggregator: rename a local variable
The variable tracks wheter the queue is not empty, but num_buffers==0. That
means we have events or queries to process. Rename accordingly.
2017-12-02 15:10:27 +00:00
Stefan Sauer 498cdd8fac aggregator: remove commented code
The SEGMENT_DONE event does not require any special treatment. This is
commented out in 6efc106a67.
2017-12-02 15:10:27 +00:00
Stefan Sauer 656a2616f2 aggregator: move the comment for the locks to the lock macros
Looks like some code was inserted afterwards.
2017-12-02 15:10:27 +00:00
Stefan Sauer 5a06c3d12b aggregator: improve section docs
Mention how data ends up in the queues. Document the relation of the pad
functions and the class vmethods to get events and queries.
2017-12-02 15:10:27 +00:00
Stefan Sauer 00d6f46ff8 aggregator: add two more tests for a sequence of data
This verifies that we handle events and queries at the head of the queue and
then buffers.
2017-12-02 15:10:27 +00:00
Stefan Sauer fbe82b7fa1 aggregator: refactor the test helper
Make the test helpers use a queue. This lets us also test sequences of events,
queries and data.
2017-12-02 15:10:27 +00:00
Stefan Sauer 9efffd05e2 aggregator: test cleanup
Remove gst_init() from a few tests. Use _OBJECT variants in logging. Remove
arbitrary extra blank lines. Make push_event() more like push_buffer() - set
the event to NULL and add cleanup to _chain_data_clear().
2017-12-02 15:10:27 +00:00
Stefan Sauer 4808f4836c aggregator: cleanup event forwarding
Don't copy the whole event struct. Set the input params when we call the
forwarding helper. Initialize the internal fields and return values in the
helper.
2017-12-02 15:10:27 +00:00
Stefan Sauer a82e6bc650 aggregator: simplify src_event
Avoid extra ref/unref, we have a ref and do_seek unrefs. Just return the result
as we have. This lets us remove the local var plus the label.
2017-12-02 15:10:27 +00:00
Stefan Sauer 70d0945b35 aggregator: register func for do_events_and_queries
This fixes logging the func ptr from _iterate_sinkpads().
2017-12-02 15:10:27 +00:00
Stefan Sauer bedc9de46c aggregator: only set clipped_buffer to NULL if needed 2017-12-02 15:10:27 +00:00
Stefan Sauer 06d62ccb94 aggregator: rename check_events
This function also handles queries. Update the code to loop until all events and
queuries are handled.
2017-12-02 15:10:27 +00:00
Stefan Sauer 1869886a96 aggregator: add a few more comments to PadPrivate struct 2017-12-02 15:10:27 +00:00
Stefan Sauer 82bde3446d aggregator: rename buffers field to data
The queue stores buffers, events and queries.
2017-12-02 15:10:27 +00:00
Stefan Sauer caafb59af5 aggregator: documentaion fixes
Fix typos and remove params docs, where the param was moved.
2017-12-02 15:10:27 +00:00
Edward Hervey ab4dd3f577 check: Fix usage of dual probes
Using two (or more) probes on the same pad where one of the probe
returns HANDLED or DROP is tricky since the other probes might
not be called.

Instead use regular probes and a proper pad (the sinkpad already existed,
it only required to be activated and have a dummy chain function for
the events/buffers to be received/handled properly)
2017-12-02 15:10:27 +00:00
Stefan Sauer 2cd988e763 aggregator: log all events
We already log a few events explicitly, just log them all with more detail.
2017-12-02 15:10:27 +00:00
Tim-Philipp Müller bb9f3d2be5 aggregator: fix header formatting 2017-12-02 15:10:27 +00:00
Sebastian Dröge 70b4395e95 aggregator: Remove the GAP event from the queue before queueing up the GAP buffer
Otherwise check_events() will not remove the GAP event (as the queue
tail is not the event anymore but the GAP buffer), then the GAP buffer
is handled, then the GAP event is handled again, ... forever.
2017-12-02 15:10:27 +00:00
Tim-Philipp Müller e018273183 aggregator: mark symbols explicitly for export with GST_EXPORT 2017-12-02 15:10:27 +00:00
Stefan Sauer 27708ff7c1 aggregator: remove duplicated code fragment
This code already runs above when (event || query).
2017-12-02 15:10:27 +00:00
Stefan Sauer b609fd7138 aggregator: code cleanups
Fix comment typos, some copy'n'paste in logging. Add more doc comments.
2017-12-02 15:10:27 +00:00
Mathieu Duponchelle 4f81aa8742 aggregator: Invalidate pad's tail position ...
when dequeuing a segment event.

https://bugzilla.gnome.org/show_bug.cgi?id=784593
2017-12-02 15:10:27 +00:00
Stefan Sauer 7b82eb546f aggregator: fix "'aggclass' may be used uninitialized in this function" 2017-12-02 15:10:27 +00:00
Olivier Crête 474acca0a8 aggregator: Process serialized queries through the queue
This ensures that they really get processed in order with
buffers. Just waiting for the queue to be empty is sometimes not
enough as the buffers are dropped from the pad before the result is
pushed to the next element, sometimes resulting in surprising
re-ordering.
2017-12-02 15:10:27 +00:00
Olivier Crête 0500807b55 aggregator: Set flow to FLUSHING on pad stop
Fixes a rare race where the pad is being stopped while doing a query.
2017-12-02 15:10:27 +00:00
Olivier Crête a001f6d587 aggregator: Request pad templates which are not request pad
https://bugzilla.gnome.org/show_bug.cgi?id=782920
2017-12-02 15:10:27 +00:00
Olivier Crête 6eda156b20 aggregator: Don't restrict sink pad names
Sink pads could have other names than sink_%u

https://bugzilla.gnome.org/show_bug.cgi?id=782920
2017-12-02 15:10:27 +00:00
Olivier Crête c4209ba5d1 aggregator: Implement propose allocation
https://bugzilla.gnome.org/show_bug.cgi?id=782918
2017-12-02 15:10:27 +00:00
Olivier Crête 87299b640a aggregator: Check for the result of caps events
https://bugzilla.gnome.org/show_bug.cgi?id=782918
2017-12-02 15:10:27 +00:00
Olivier Crête 0e973bc4fc aggregator: Caps event always goes to the aggregate thread
So no need to check it here.

https://bugzilla.gnome.org/show_bug.cgi?id=782918
2017-12-02 15:10:27 +00:00
Olivier Crête e76c35857d aggregator: Add downstream allocation query
https://bugzilla.gnome.org/show_bug.cgi?id=746529
2017-12-02 15:10:27 +00:00
Olivier Crête 838e01723f aggregator: Remove unused GST_FLOW_NOT_HANDLED 2017-12-02 15:10:27 +00:00
Matthew Waters f35b05a2f2 aggregator: add simple support for caps handling
Modelled off the videoaggregator caps handling as that seems the most
mature aggregtor-using implementation that has caps handling there is.

https://bugzilla.gnome.org/show_bug.cgi?id=776931
2017-12-02 15:10:27 +00:00
Nicolas Dufresne c54d253301 aggregator: Reset upstream latency on first buffer
In the case an aggregator is created and pads are requested but only
linked later, we end up never updating the upstream latency.
This was because latency queries on pads that are not linked succeed,
so we never did a new query once a live source has been linked, so the
thread was never started.

https://bugzilla.gnome.org/show_bug.cgi?id=757548
2017-12-02 15:10:27 +00:00