Commit graph

37 commits

Author SHA1 Message Date
Thibault Saunier
4b3798fedc decodebin3: Protect fields related to streams handling with the SELECTION_LOCK
Fields related to stream handling (input_streams,
output_streams, slots, guint slot_id) where used totally unprotected
until know.

This lead to several races, especially playing back RTSP streams.

To protect those fields, the OBJECT_LOCK can not be used as we sometimes
need to be able to post message on the bus while holding it.

decodebin3 already has a lock to manage stream selection, and in the end
it makes sense to protect all the stream management fields with the same
lock which is why we reuse the SELECTION_LOCK here.

https://bugzilla.gnome.org/show_bug.cgi?id=784012
2017-07-18 13:05:06 +02:00
Edward Hervey
1188345886 decodebin3: Protect dbin->collection usage
Use the selection lock to protect dbin->collection access

https://bugzilla.gnome.org/show_bug.cgi?id=784012
2017-07-18 11:25:53 +02:00
Seungha Yang
60cae68c4e decodebin3: Push EOS to output stream if they are all drained
decodebin3 checks input streams and pushes EOS if all input streams
are EOSed. If not, fake EOS is pushed to the corresponding slot.

When adaptivedemux is used with multi-track configuration,
adaptivedemux never ever push EOS to non-selected track
because streaming thread for the slot stops with not-linked flow return.
So, decodebin3 should generate EOS itself to finish playback.

https://bugzilla.gnome.org/show_bug.cgi?id=777735
2017-07-13 07:32:42 +02:00
Seungha Yang
06cf7440ce decodebin3: Don't send duplicated stream-start event
group-id in stream-start event might be updated in
parse_chain_output_probe (). This cause duplicated stream-start
twice with identical stream-id and seq-num, but only group-id is
different. Although there is no change, stream-start event will
be followed by the first buffer.

https://bugzilla.gnome.org/show_bug.cgi?id=771088
2017-07-12 15:55:26 +02:00
Thibault Saunier
099ac9faf2 docs: Convert gtkdoc comments to markdown
Modernizing the documentation, making it simpler to read an
modify and allowing us to possibly switch to hotdoc in the
future.
2017-03-10 18:19:17 -03:00
Sebastian Dröge
033057cf74 decodebin3: Fix potential NULL pointer dereference on slot deactivation
CID 1363331
2017-02-28 15:17:24 +02:00
Seungha Yang
6b5617c2a7 decodebin3: Fix crash caused by slot double freeing
Probe for MultiQueue source pad might receive EOS twice,
the first is fake-eos and the other is actual EOS.
And the slot can be freed with fake-eos/EOS if the slot has no input.

Since slot freeing is async, double free can be possible.
So, decodebin3 needs to remove the probe also with slot freeing.

https://bugzilla.gnome.org/show_bug.cgi?id=777530
2017-01-31 17:16:16 +01:00
Seungha Yang
e6ee68a34f decodebin3: Fix list leak on handle_stream_switch()
Free no more used list variables

https://bugzilla.gnome.org/show_bug.cgi?id=775553
2017-01-31 16:48:04 +01:00
Seungha Yang
44bc10219c decodebin3: Change requested_selection to have its own memory for stream-id
"requested_selection" list might be generated by select-streams event.
And memory of stream-id(s) in select-streams is independent from that of stream-collection.

https://bugzilla.gnome.org/show_bug.cgi?id=775553
2017-01-31 16:48:04 +01:00
Seungha Yang
30fe123fdb decodebin3: Change return types of stream_in_{list,collection}
Change return types of functions to get memory address of stream-id.

https://bugzilla.gnome.org/show_bug.cgi?id=775553
2017-01-31 16:48:04 +01:00
Seungha Yang
10fe0497b2 playback: Fix leak on select_streams
Since gst_event_parse_select_streams() returns newly allocated
memory for stream-id(s), it should be freed explicitly.

https://bugzilla.gnome.org/show_bug.cgi?id=775553
2017-01-31 16:48:04 +01:00
Seungha Yang
49653b058a decodebin3: Remove unused variable
https://bugzilla.gnome.org/show_bug.cgi?id=773341
2016-12-08 16:59:07 +01:00
Seungha Yang
6bd7a5602c decodebin3: Drop duration query during _input_pad_unlink ()
Playbin3 takes lock when querying duration and handling
stream-collection message. So,to post stream-collection message,
duration query should be dropped when input pad is being unlinked.

https://bugzilla.gnome.org/show_bug.cgi?id=773341
2016-12-08 16:59:07 +01:00
Seungha Yang
7e76405895 decodebin3: Update stream-collection with _input_pad_unlink()
Since parsebin does not post new stream-collection message when
it was being removed, decodebin3 should update it itself.

https://bugzilla.gnome.org/show_bug.cgi?id=773341
2016-12-08 16:59:07 +01:00
Seungha Yang
f08e4592a4 decodebin3: Cleanup no more used DecodebinInput
Remove DecodebinInput using gst_element_call_async() API.

https://bugzilla.gnome.org/show_bug.cgi?id=773341
2016-12-08 16:59:07 +01:00
Seungha Yang
bd6ec225b9 decodebin3: Cleanup no more used MultiQueueSlot
Since MultiQueueSlot cannot be removed inside of streaming thread,
use gst_element_call_async() API.

https://bugzilla.gnome.org/show_bug.cgi?id=773341
2016-12-08 16:59:07 +01:00
Seungha Yang
4fcbcf4e48 decodebin3: Send custom-eos event to notify drained state
Likewise how urisourcebin is doing, use custom event if other streams
are still alive.

https://bugzilla.gnome.org/show_bug.cgi?id=773341
2016-12-08 16:59:07 +01:00
Seungha Yang
858ee3d913 playback: Remove trailing whitespace
https://bugzilla.gnome.org/show_bug.cgi?id=773341
2016-12-08 16:59:07 +01:00
Graham Leggett
98ea3e4647 decodebin3: Fix assertion failure when unreffing NULL stream caps
GStreamer-CRITICAL **: gst_mini_object_unref: assertion 'mini_object != NULL' failed

https://bugzilla.gnome.org/show_bug.cgi?id=773441
2016-10-25 12:43:22 +03:00
Seungha Yang
5f2c0c8ea7 decodebin3: More SELECTION_LOCK when linking to slot
Since there can be multiple parsebin in a decodebin3,
linking parsebin with MultiQueueSlot should be protected also.

https://bugzilla.gnome.org/show_bug.cgi?id=772855
2016-10-14 08:29:46 +02:00
Edward Hervey
8485a8d786 playback: GstStreamType is a flag
Therefor don't use equality
2016-10-13 11:42:28 +02:00
Edward Hervey
acc3a9d242 playback: decodebin3 and parsebin are streams-aware
Elements within can add/remove pads at anytime without complying
with the fallback system.

https://bugzilla.gnome.org/show_bug.cgi?id=772741
2016-10-12 15:05:55 +02:00
Guillaume Desmottes
f66e6839c5 decodebin3: don't leak alternate inputs
Fix leaks (including parsebin elements) with this pipeline:
playbin3
uri=http://127.0.0.1:8079/defaults/exMPD_BIP_TC1/exMPD_BIP_TC1.mpd

https://bugzilla.gnome.org/show_bug.cgi?id=769270
2016-08-04 11:18:05 +02:00
Guillaume Desmottes
487ef12fd1 decodebin3: fix output->decoder_{sink,src} leak
output->decoder_sink and output->decoder_src are both going to be
replaced in the 2 branches of the following 'if'.

https://bugzilla.gnome.org/show_bug.cgi?id=769270
2016-08-03 17:49:45 +02:00
Guillaume Desmottes
acbaa83450 decodebin3: fix tag list leak
https://bugzilla.gnome.org/show_bug.cgi?id=769270
2016-08-03 17:49:45 +02:00
Guillaume Desmottes
0b77ede079 decodebin3: consume select-streams event
https://bugzilla.gnome.org/show_bug.cgi?id=769270
2016-08-03 17:49:45 +02:00
Guillaume Desmottes
ba74c06721 decodebin3: fix collection ref handling
gst_stream_collection_add_stream() consumes the collection reference
passed to it but gst_stream_collection_get_stream() is (transfer none).

Fix this pipeline:

playbin3
uri=http://127.0.0.1:8079/defaults/exMPD_BIP_TC1/exMPD_BIP_TC1.mpd

https://bugzilla.gnome.org/show_bug.cgi?id=769270
2016-08-03 17:40:05 +02:00
Guillaume Desmottes
500e4117bb decodebin3: handle full removal of streams
Fix the
validate.file.playback.disable_subtitle_track_while_paused.* validate
scenarios when using playbin3.

https://bugzilla.gnome.org/show_bug.cgi?id=769298
2016-08-03 17:37:30 +02:00
Guillaume Desmottes
2c0a4d20d4 decodebin3: fix collection refcounting
My collection leak fix 83f30627cd
introduced a crash in this scenario: audiotestsrc ! decodebin3 ! fakesink

The reference handling of collection in decodebin3 wasn't very clear and
my attempt to fix the leak introduced a regression where we went one
reference short in some other scenarios.

Fixing this by:
- Giving a strong reference to DecodebinInput making things clearer
- Fixing get_merged_collection() which was sometimes returning an
  existing reference and sometimes a new one.

https://bugzilla.gnome.org/show_bug.cgi?id=769080
2016-07-25 09:02:53 +02:00
Jan Schmidt
e68c85e5a5 playback: Flesh out docs a bit for new elements
Add some more text to the docs for urisourcebin,
parsebin, decodebin3 and playbin3, including a warning
that they are unstable API for now
2016-07-22 23:21:36 +10:00
Guillaume Desmottes
6c58f5ee2f decodebin3: actually check result of accept caps query
We were just checking if the query was handled, not its result.

Also fix a leak as gst_pad_query() was not consuming the query.

https://bugzilla.gnome.org/show_bug.cgi?id=768811
2016-07-18 14:54:35 +01:00
Guillaume Desmottes
83f30627cd decodebin3: fix collection leak
The collection owned by GstDecodebin3 has to be unreffed when disposing.

gst_event_new_stream_collection() doesn't consume the collection passed
to it so no need to give it an extra ref.

https://bugzilla.gnome.org/show_bug.cgi?id=768811
2016-07-18 13:58:33 +01:00
Guillaume Desmottes
c1db195ba5 decodebin3: fix stream leaks
MultiQueueSlot owns a ref on the active stream so it should release it
when being freed.

DecodebinInputStream owns ref on the active and pending stream so they
should be dropped when being freed.

https://bugzilla.gnome.org/show_bug.cgi?id=768811
2016-07-18 13:57:44 +01:00
Guillaume Desmottes
e2263673d1 decodebin3: fix event leaks
Returning GST_PAD_PROBE_HANDLED means we are taking care of unreffing
the probe info.

https://bugzilla.gnome.org/show_bug.cgi?id=768811
2016-07-18 13:57:44 +01:00
Guillaume Desmottes
51055f1924 decodebin3: fix caps leaks
gst_stream_get_caps() returns a reffed caps.

The caps passed to gst_query_set_caps_result() are not transfered.

The caps in gst_parse_pad_stream_start_event() was either acquired
using gst_pad_get_current_caps() which returns a new ref or
explicitly reffed.

https://bugzilla.gnome.org/show_bug.cgi?id=768811
2016-07-18 13:57:10 +01:00
Guillaume Desmottes
c1d55f29a1 playbin3: fix leaks of collection returned by message parse API
gst_message_parse_stream_collection() and
gst_message_parse_streams_selected() actually return a reffed
GstStreamCollection.

https://bugzilla.gnome.org/show_bug.cgi?id=768776
2016-07-15 16:43:07 +01:00
Edward Hervey
d514e79bee playback: New elements
With contributions from Jan Schmidt <jan@centricular.com>

* decodebin3 and playbin3 have the same purpose as the decodebin and
playbin elements, except make usage of more 1.x features and the new
GstStream API. This allows them to be more memory/cpu efficient.

* parsebin is a new element that demuxers/depayloads/parses an incoming
stream and exposes elementary streams. It is used by decodebin3.
It also automatically creates GstStream and GstStreamCollection for
elements that don't natively create them and sends the corresponding
events and messages

* Any application using playbin can use playbin3 by setting the env
variable USE_PLAYBIN3=1 without reconfiguration/recompilation.
2016-06-30 14:15:47 +02:00