Commit graph

5021 commits

Author SHA1 Message Date
Philippe Normand dc5006fa25 playbin: New text-offset property
This new property controls the synchronisation offset between the text and video
streams. Positive values make the text ahead of the video and negative values
make the text go behind the video.

https://bugzilla.gnome.org/show_bug.cgi?id=797134
2018-11-01 09:52:34 +00:00
Philippe Normand ea3b074ead playsink: Add text-offset property
When the playsink contains a text chain this property controls the
synchronisation of the subtitles and video by controlling the underlying
subtitleoverlay::subtitle-ts-offset property.

https://bugzilla.gnome.org/show_bug.cgi?id=797134
2018-11-01 09:52:34 +00:00
Philippe Normand 3cd38be94b subtitleoverlay: Add a subtitle-ts-offset property
This property controls the synchronisation offset between text and video in
nanoseconds, by updating the parser src pad offset.

https://bugzilla.gnome.org/show_bug.cgi?id=797134
2018-11-01 09:52:34 +00:00
Víctor Manuel Jáquez Leal 95436fa667 compositor: Fix enum type mismatch
The variable blend_mode is GstCompositorBlendMode but it is
assigned to a GstCompositorOperator enum value.
2018-10-31 19:22:35 +01:00
Johan Bjäreholt 4ab4db11ec compositor: fix undeclared functions 2018-10-30 13:32:33 +01:00
Johan Bjäreholt f780c718e7 overlaycomposition: Fix implicit use of memset
https://bugzilla.gnome.org/show_bug.cgi?id=797353
2018-10-29 13:12:30 +00:00
Sebastian Dröge e87fa73e60 compositor: Implement different operators via per-pad property
This removes the crossfade-ratio property and replaces it with an
operator property. Currently this implements the following operators:

- SOURCE: Copy over the source and don't look at the destination
- OVER: Default blending of the source over the destination
- ADD: Like OVER but simply adding the alpha instead

See the example for how to implement crossfading with this.

https://bugzilla.gnome.org/show_bug.cgi?id=797169
2018-10-28 17:13:26 +00:00
Sebastian Dröge 088b4c0c52 overlaycomposition: New element that allows applications to draw GstVideoOverlayComposition on a stream
https://bugzilla.gnome.org/show_bug.cgi?id=797234
2018-10-28 17:03:47 +00:00
Sebastian Dröge 596a4ee12f parsebin: Add missing locks/unlocks of the chain mutex
Before freeing pending pads it is required to hold the mutex, that's
what is protecting the list of pending pads in other places.

https://bugzilla.gnome.org/show_bug.cgi?id=796935
2018-10-28 17:03:47 +00:00
Sebastian Dröge c41439d16f compositor: Remove extra header for the pad declaration
There's no reason for having this separate apart from making things less
discoverable.
2018-10-27 13:59:57 +01:00
Roland Jon a15baf7976 decodebin3: fix eos event leak
https://bugzilla.gnome.org/show_bug.cgi?id=796860
2018-10-18 13:03:31 +01:00
Seungha Yang 5adec0db4f meson: Replace empty configuration_data() with copy keyword
Use 'copy' keyword to avoid meson warning message.
Note that 'copy' keyword in configure_file() is available
since meson 0.47.0

https://bugzilla.gnome.org/show_bug.cgi?id=797298
2018-10-17 14:08:47 +01:00
Seungha Yang 3499d9ea64 meson: Replace empty configuration_data() with copy keyword
Use 'copy' keyword to avoid meson warning message.
Note that 'copy' keyword in configure_file() is available
since meson 0.47.0

https://bugzilla.gnome.org/show_bug.cgi?id=797298
2018-10-17 13:48:47 +01:00
Matej Knopp 18f082a0d8 audioconvert: remove layout from structure when fixating caps
otherwise caps intersection always fails when converting non-interleaved to interleaved audio

https://bugzilla.gnome.org/show_bug.cgi?id=797225
2018-10-05 15:40:13 +03:00
Johan Bjäreholt 448ed0f244 Removed unused GST_CAT_PERFORMANCE
https://bugzilla.gnome.org/show_bug.cgi?id=797175
2018-09-19 15:06:19 +03:00
Philippe Normand 62e4e15245 playsink: audio visualization support fixes
The queue between the audiotee and the audio chain wasn't properly added to the
bin, leading to streamsynchronizer locks on EOS. Reconfiguration of the
visualization chain wasn't working as expected either. It is now possible to
dynamically enable/disable the audio visualization support.

https://bugzilla.gnome.org/show_bug.cgi?id=796553
2018-08-16 17:17:42 +01:00
Sebastian Dröge 5485a2b9ee compositor: Define crossfade-ratio to have range [0.0,1.0]
Previously negative values had the same effect as 0.0, which was
confusing.

https://bugzilla.gnome.org/show_bug.cgi?id=796845
2018-08-16 17:08:06 +03:00
Nirbheek Chauhan eadedc68f8 meson: Add feature options for all plugins
GL dependency detection is still automagic.

https://bugzilla.gnome.org/show_bug.cgi?id=795107
2018-07-27 18:42:11 +05:30
Sebastian Dröge 3e067ae333 compositor: Don't leak all buffers while crossfading and not all pads are crossfading 2018-07-26 00:20:02 +03:00
Sebastian Dröge aa3e64c71d compositor: Use 255 as maximum alpha instead of 256
255 will easily become 0 in the blending function as they expect
the maximum value to be 255.

Can be reproduce with

gst-launch-1.0 videotestsrc pattern=ball ! c.sink_0 \
               videotestsrc pattern=snow ! c.sink_1 \
               compositor name=c \
                 sink_0::zorder=0 sink_1::zorder=1 sink_0::crossfade-ratio=0.5 \
                 background=black ! \
               videoconvert ! xvimagesink

crossfade-ratio +/- 0.001 makes it work correctly and the same happens
at e.g. 0.25, 0.75, N*0.0625

https://bugzilla.gnome.org/show_bug.cgi?id=796846
2018-07-23 18:59:33 +03:00
Justin Kim 4fa850e3e6 audiorate: accumulate offset by time diff
The fomula, 'offset = time / rate', is correct only if
the rate is never changed. When the rate is changed,
the offset should be re-calculated based on the previous
offset.

https://bugzilla.gnome.org/show_bug.cgi?id=791269
2018-07-19 18:19:19 -04:00
Seungha Yang 4380d57779 compositor: Update conversion info in property setter
... not in getter. Otherwise, video-converter will not be updated
with new width/height

https://bugzilla.gnome.org/show_bug.cgi?id=796828
2018-07-18 14:41:31 +03:00
Wonchul Lee 53ae7df2e2 urisourcebin: Rename urisourcebin variable and query functions
https://bugzilla.gnome.org/show_bug.cgi?id=770693
2018-07-18 11:11:50 +02:00
Seungha Yang e3362e459b urisourcebin: Set streams-aware flag
https://bugzilla.gnome.org/show_bug.cgi?id=777213

https://bugzilla.gnome.org/show_bug.cgi?id=775132
2018-07-18 09:22:56 +02:00
Guillaume Desmottes 86b0802378 rawvideoparse: fix typo in 'plane-offsets' description
The property is 'plane-offsets', not 'plane-offset' so the example in
the description was wrong.

https://bugzilla.gnome.org/show_bug.cgi?id=796817
2018-07-16 13:14:34 +02:00
George Kiagiadakis 09171b11ac audiorate: fix support for non-interleaved buffers
https://bugzilla.gnome.org/show_bug.cgi?id=796741
2018-07-12 13:38:27 +03:00
George Kiagiadakis a498d3fe6e adder: remove non-interleaved layout from caps
adder needs more than just trivial work to support planar buffers properly
because it currently reads sub-buffers from GstCollectPads in order for all
of them to have matching sizes. In planar mode, this means it would truncate
some channels and mix them up in strange ways. It only works if all input
buffers in all sink pads have matching sizes.
2018-07-11 16:56:50 +03:00
George Kiagiadakis 114f0abbd7 audioresample: implement support for non-interleaved buffers
https://bugzilla.gnome.org/show_bug.cgi?id=705986
2018-07-11 16:26:13 +03:00
George Kiagiadakis 0eda002cfd audioconvert: implement support for converting between interleaved and non-interleaved layouts
https://bugzilla.gnome.org/show_bug.cgi?id=705986
2018-07-11 16:26:13 +03:00
George Kiagiadakis f6f8b979d6 audiotestsrc: implement producing non-interleaved audio buffers
https://bugzilla.gnome.org/show_bug.cgi?id=796739
2018-07-11 12:23:19 +03:00
Sebastian Dröge 268c5e7e17 parsebin: Don't try to continue autoplugging a parser if we got raw caps
Otherwise we'll fail with an unhelpful message that no decoder for the
raw caps was found if a container contains raw media.
2018-07-06 17:49:39 +02:00
Edward Hervey 2657fc1fdd typefindfunctions: Bail out on huge EBML chunks
We can't handle/store more than guint32 anyway
2018-07-06 13:48:09 +02:00
Edward Hervey 38ba954e82 typefindfunctions: Use guint32 for sizes
This brings it in sync with the type used with gst_type_find_*() API
2018-07-06 13:47:58 +02:00
Edward Hervey a87724138b typefindfunctions: Use types of same size/signedness
Where applicable/possible
2018-07-06 13:12:51 +02:00
Edward Hervey a7e8f16df3 playsink: Properly propagate SEGMENT seqnum
When flushing chains, make sure the FLUSH events have seqnum
that are consistent with the current SEGMENT seqnum
2018-06-05 17:30:47 +02:00
Edward Hervey 5efa8e1f89 streamsynchronizer: Properly propagate seqnum on EOS event 2018-06-05 17:29:53 +02:00
Edward Hervey 3ac37bbe67 subparse: Don't read beyond array
If num_open_tags is 0, we shouldn't try to get the "last" open tag
since there isn't any.
2018-05-30 11:39:40 +02:00
Tim-Philipp Müller 9158f9f7eb docs: Fix typos 2018-05-22 14:10:03 +01:00
hoonhee.lee 88196c36f1 playbin3: Collect appropriate stream-type when doing stream selection
https://bugzilla.gnome.org/show_bug.cgi?id=796193
2018-05-17 10:19:07 +01:00
Philippe Normand b7e8d1657d subparse: follow-up build fix after d871b1205 2018-05-12 17:21:01 +01:00
Philippe Normand 8cfd85ec61 subparse: support for more than 32 unclosed markup tags
https://bugzilla.gnome.org/show_bug.cgi?id=796043
2018-05-12 17:05:06 +01:00
Roland Jon afca8d4815 parsebin: remove unused macro definitions
https://bugzilla.gnome.org/show_bug.cgi?id=796039
2018-05-12 07:59:21 +02:00
Seungha Yang 3678866474 decodebin3: Do not modify structure of EOS event
https://bugzilla.gnome.org/show_bug.cgi?id=795981
2018-05-10 09:09:08 +02:00
Seungha Yang 4567fcc64c urisourcebin: Do not modify structure of EOS event
https://bugzilla.gnome.org/show_bug.cgi?id=795981
2018-05-10 09:09:08 +02:00
Seungha Yang 7e724bddf3 uridecodebin3: Fix GList leak
https://bugzilla.gnome.org/show_bug.cgi?id=795937
2018-05-09 07:03:13 +01:00
Seungha Yang 12694200d5 uridecodebin3: Fix string leak
uri and suburi should be free'd

https://bugzilla.gnome.org/show_bug.cgi?id=795932
2018-05-08 16:20:08 +01:00
hoonhee.lee 1e28cba088 decodebin3: Re-order all streams and add to collection
Sort all streams from parsebins by stream type and SELECT flag
and stream-id. First video, then audio, then others.

https://bugzilla.gnome.org/show_bug.cgi?id=775615
2018-05-06 16:31:43 +02:00
Sebastian Dröge 33a8e28207 videoaggregator: Switch to a GstVideoAggregatorConvertPad subclass
This moves all the conversion related code to a single place, allows
less code-duplication inside compositor and makes the glmixer code less
awkward. It's also the same pattern as used by GstAudioAggregator.
2018-05-06 15:22:51 +02:00
Tim-Philipp Müller 1654faad38 typefindfunctions: fix tap typefinder
If we memcmp() 12 bytes we should make sure to get
at least 12 bytes as well, and not just 8 bytes.

Thanks oss-fuzz!
2018-05-06 11:10:21 +02:00
Tim-Philipp Müller 4187242a7c tcp: fix markup for example pipelines in docs
gtk-doc doesn't like the # it seems.

https://bugzilla.gnome.org/show_bug.cgi?id=795548
2018-05-05 18:02:16 +02:00
Fabrizio Gennari 401555ffb8 typefind: Add TAP and DMP files support
https://bugzilla.gnome.org/show_bug.cgi?id=661137
2018-05-05 17:13:50 +02:00
Sebastian Dröge 233ee9f077 videoaggregator: Move needs_alpha pad field to the private struct
And also trigger renegotiation if the value has changed.

https://bugzilla.gnome.org/show_bug.cgi?id=795836
2018-05-05 16:32:19 +02:00
Sebastian Dröge 1c8110ab17 videoaggregator: Move aggregated_frame and the pad buffer into the private struct
The aggregated_frame is now called prepared_frame and passed to the
prepare_frame and cleanup_frame virtual methods directly. For the
currently queued buffer there is a method on the video aggregator pad
now.
2018-05-05 16:32:19 +02:00
Sebastian Dröge a240fb7997 videoaggregator: Move GstChildProxy implementations into leaf classes
Not every subclass will want to expose the pads via the interface.

https://bugzilla.gnome.org/show_bug.cgi?id=739011
2018-05-04 16:13:16 +02:00
Thibault Saunier 9ce8cf89ba encodebin: Also lock input caps when dynamic output is disabled
With the way caps negotiation work in encoders, the only way to ensure
that no downstream renegotiation is done in the encoder is to also lock
upstream caps. Anyway with the current behavior upstream of encoders
*require* to handle any file format so locking upstream format should
be safe.

https://bugzilla.gnome.org/show_bug.cgi?id=795464
2018-05-01 21:15:25 +02:00
hoonhee.lee 5b01f9bbc2 uridecodebin3: don't segfault if a pad is not a source pad when it is removed
Ignore to handling a pad of decodebin3 which doesn't have corresponding output
when it is removed.

https://bugzilla.gnome.org/show_bug.cgi?id=795529
2018-05-01 09:33:16 +02:00
Tim-Philipp Müller 637f26f3f8 meson: fix copy'n'paste-o in app plugin build description 2018-04-25 11:26:17 +01:00
Xavier Claessens 9ae9d2686f Meson: Generate pc file for all plugins in bad
https://bugzilla.gnome.org/show_bug.cgi?id=794568
2018-04-25 11:08:09 +01:00
Xavier Claessens 201e7c7803 Meson: Generate pc file for all plugins in base
https://bugzilla.gnome.org/show_bug.cgi?id=794568
2018-04-25 11:05:56 +01:00
Thibault Saunier 89d0e9cc92 parsebin: Post STREAM_COLLECTION on EVENT_STREAM_COLLECTION
Otherwise decodebin won't get notified about STREAM_COLLECTION comming
from the sources and thus will never get informored about it. Without
being informed about the stream collection decodebin won't be able to
select any streams. It ends up not creating any output for the streams
defined from outside parserbin.

https://bugzilla.gnome.org/show_bug.cgi?id=795364
2018-04-19 08:40:35 -03:00
Thibault Saunier f0399ed435 urisourcebin: Avoid unreffing a pad we are not owning
expose_output_pad takes ownership of the pad.
2018-04-12 16:10:44 -03:00
Mathieu Duponchelle faaa2423c2 uridecodebin3: free_play_items when READY_TO_PAUSED failed.
We will never go through the PAUSED_TO_READY transition if
that is the case, and thus never free the play items.
2018-04-12 19:33:18 +02:00
Tim-Philipp Müller b6853f783f playbin3: fix leak of recursive mutex 2018-04-12 18:12:49 +01:00
Edward Hervey 1d2a311c1d playback: Add support for CEA 608/708 CC overlay elements
https://bugzilla.gnome.org/show_bug.cgi?id=794901
2018-04-09 15:15:24 +02:00
Thibault Saunier a2011519ec encodebin: Always respect encoding profile preset factory name
And fail if it is not present.
2018-04-04 20:50:07 -03:00
Thibault Saunier dbc89373ea encodebin: Inform about missing elements in the "text" error field
Instead of the debug field, that information should be directly
exposed to end users.

https://bugzilla.gnome.org/show_bug.cgi?id=794663
2018-04-02 19:31:00 -03:00
Sebastian Dröge bec7f4ad5e videorate: In reverse playback mode, don't output the first buffer with ts=segment.stop
Instead go backwards before segment.stop based on the framerate or the
next buffers end timestamp. Otherwise the first buffer will usually be
dropped because outside the segment.

https://bugzilla.gnome.org/show_bug.cgi?id=781899
2018-03-29 20:48:27 +03:00
Seungha Yang 07eab6de3f encodebin: Use gst_object_unref() instead of g_object_unref()
... for better debugging (e.g., tracing refcount)

https://bugzilla.gnome.org/show_bug.cgi?id=794654
2018-03-24 10:31:42 -03:00
Edward Hervey 247b22ae1a playback: Remove subtitle-encoding property on uridecodebin3
For now, until we found a more future-proof solution
2018-03-12 13:48:18 +01:00
Mathieu Duponchelle b59da8eced Port to latest GstAggregator segment API
The aggregator segment is now exposed on the src pad

https://bugzilla.gnome.org/show_bug.cgi?id=793946
2018-03-01 15:37:06 +01:00
Mathieu Duponchelle 318eb61e23 audioaggregator: remove GstAudioAggregator->info
As we now require subclasses to use a subclass of
GstAudioAggregatorPad, we can reuse its info field

https://bugzilla.gnome.org/show_bug.cgi?id=793943
2018-03-01 15:33:25 +01:00
Mathieu Duponchelle 10835e9919 audioaggregator: refactor conversion API
For the rationale, see:

https://bugzilla.gnome.org/show_bug.cgi?id=793917

Also test audiomixer conversion of current output buffer
2018-03-01 00:40:24 +01:00
Edward Hervey 2c4dfa101a Update disted backup ORC files 2018-02-15 07:14:20 +01:00
Nicolas Dufresne a8ee76bd30 doc: Remove obsolete Since 0.10.X marks 2018-02-14 14:39:32 -05:00
Edward Hervey 3b9843d13b Update ORC fallback disted code 2018-02-14 14:36:00 +01:00
Philippe Normand 22a6287b8e playbin3: fix source-setup signal emission
Previous code would pass 0 as source element.
2018-02-14 10:23:03 +00:00
Tim-Philipp Müller 8c5725c4ea audiomixer, audiointerleave: add to build
https://bugzilla.gnome.org/show_bug.cgi?id=791218
2018-02-13 16:38:32 +00:00
Tim-Philipp Müller ab758a9a39 audioaggregator, audiomixer, audiointerleave: move from -bad to -base
https://bugzilla.gnome.org/show_bug.cgi?id=791218
2018-02-13 15:56:49 +00:00
Edward Hervey eacb7a77d2 playbin3: Re-enable buffering message handling
Buffering messages are only sent for the active group (in case there
is more than one).

If the inactive group posts buffering messages we keep the last one
around and will post it once it becomes the playing one.
2018-02-10 15:43:54 +01:00
François Laignel ec7d81f67c decodebin3: high cpu usage after eos
After eos, decodebin3 enters a loop sending eos events which causes high cpu usage.

https://bugzilla.gnome.org/show_bug.cgi?id=792693
2018-02-10 13:37:27 +01:00
Edward Hervey 1f792ab89d decodebin3: Handle dual-output of STREAM_START/EOS
In order to flush out multiqueue, we send again a STREAM_START and
then a EOS event.

The problem was that was that we might end up pushing out on the
output of multiqueue (and therefore decodebin3) a series of:
* EOS / STREAM_START / EOS

Apart from the uglyness of such output, If decodebin3 is used with
elements such as concat on their output, they might potentially
block on that second STREAM_START.

In order to make sure we don't end up in that situation we send
a custom STREAM_START event when refreshing multiqueue (which we
drop on the output) and we don't special case EOS events on streams
on which we already got EOS.

At worst we now end up sending at most two EOS on the output of
multiqueue (and decodebin3).
2018-02-10 12:24:10 +01:00
Edward Hervey c1e902a084 playbin3: Implement gapless playback
Similar in vein to the playbin2 architecture except that uridecodebin3
are prerolled much earlier and all streams of the same type are
fed through a 'concat' element.

This keeps the philosphy of having all elements connected as soon
as possible.

The 'about-to-finish' signal is emitted whenever one of the uridecodebin
is about to finish, allowing the users to set the next uri/suburi.

The notion of a group being active has changed. It now means that the
uridecodebin3 has been activated, but doesn't mean it is the one
currently being outputted by the sinks (i.e. curr_group and next_group).
This is done via detecting GST_MESSAGE_STREAM_START emission by playsink
and figuring out which group is really playing.

When the current group changes, a new thread is started to deactivate
the previous one and optionnaly fire 'about-to-finish'.
2018-02-10 12:24:10 +01:00
Edward Hervey b9e73d0575 playbin3: Use uridecodebin3 and link/reconfigure immediately
Apologies for the big commit, but it wasn't really possible to split it
in anything smaller.

* Switch to uridecodebin3 instead of managing urisourcebin and decodebin3
ourselves. No major architectural change with this.

* Reconfigure sinks/outputs when needed. This is possible thanks to the
various streams-related API. Instead of blocking new pads and waiting
for a (fake) no-more-pads to decide what to connect, we instead reconfigure
playsink and the combiners to whatever types are currently selected. All of
this is done in reconfigure_output().
  New pads are immediately connected to (combiners and) sinks, allowing
immediate negotiation and usage.

* Since elements are always connected, the "cached-duration" feature is gone
and queries can reach the target elements.

* The auto-plugging related code is currently disabled entirely until
we get the new proper API.

* Store collections at the GstSourceGroup level and not globally

* And more comments a bit everywhere

NOTE: gapless is still not functional, but this opens the way to be able
to handle it in a streams-aware fashion (where several uridecodebin3 can
be active at the same time).
2018-02-10 12:24:09 +01:00
Edward Hervey ebf138e29e urisourcebin: Add 'about-to-finish' signal
With push-based sources, urisourcebin will emit this signal when
the stream has been fully consumed.

This signal can be used to know when the source is done providing
data.
2018-02-10 12:24:09 +01:00
Edward Hervey 08044ab7e6 playback: New uridecodebin3 element
In the same vein as old uridecodebin except that it also
accepts a suburi and uses urisourcebin and decodebin3 internally
2018-02-10 12:24:09 +01:00
Edward Hervey 2858400608 playbin3: Remove wrong 'notify'
Those properties doesn't exist on playbin3, don't emit a notify for that
2018-02-10 12:17:39 +01:00
Edward Hervey 8386ea706f playbin3: Remove setting 'subtitle-encoding' on decodebin
That property doesn't exist
2018-02-10 12:17:39 +01:00
Edward Hervey 7b8cfb9e53 playbin3: Clarify documentation of combiner properties 2018-02-10 12:17:39 +01:00
Edward Hervey 4ed0708f78 playbin3: Remove unused define 2018-02-10 12:17:39 +01:00
Edward Hervey 9e7401bedf decodebin3: Use GST_GROUP_ID_INVALID 2018-02-10 12:17:39 +01:00
Edward Hervey dd7a1407a4 decodebin3: Don't forward already-handling SELECT_STREAMS
Upstream might respond negatively to the event, whereas we actually
handled it.
2018-02-10 12:17:38 +01:00
Edward Hervey 401cadfd74 decodebin3: Add new about-to-finish signal 2018-02-10 12:17:38 +01:00
Edward Hervey c136acf27a decodebin3: Remove unused definition 2018-02-10 12:17:38 +01:00
Edward Hervey fa710a59aa decodebin3: Don't take the lock when creating a new input
We only need to take the input lock when adding/removing
inputs from the list.
2018-02-10 12:17:38 +01:00
Edward Hervey fa9adbe986 playbin3: Remove unused variable
The lock is never used
2018-02-10 12:17:38 +01:00
Edward Hervey 1717e33da5 urisourcebin: Remove auto-plugging signals
They were never used and we need a better system
2018-02-10 12:17:36 +01:00
Edward Hervey e5157ca400 urisourcebin: Remove ASYNC behaviour
It is not needed in the new streams-aware world
2018-02-10 12:16:09 +01:00
Edward Hervey f4035e430a urisourcebin: Remove 'unknown-type' signal
It was never used and makes no sense in the new streams-based world
2018-02-10 12:16:09 +01:00
Edward Hervey 0f51dde728 playbin3: Disable autoplug-related code
The signals were never emitted from decodebin3. This needs
switching to a new signalling system
2018-02-10 12:16:09 +01:00
Edward Hervey 29f57e23c7 playbin3: fix "no-more-pads" handling
That signal is never emitted by decodebin3 and is handled differently
2018-02-10 12:14:47 +01:00
Edward Hervey 9f1063e4a3 playbin3: Remove duration caching
This is now handled directly via sinks and queries through pads
2018-02-10 12:14:47 +01:00
Edward Hervey fc93302087 parsebin: Remove async behaviour
There's no reason to do async changing
2018-02-10 12:14:17 +01:00
Jan Schmidt 577c14495c tcp/multihandlesink: Handle the case of no caps
Pass data with no caps and no streamheaders without
throwing a bunch of criticals
2018-02-09 18:07:59 +11:00
Tim-Philipp Müller 3219b704fd subparse: fix pushing out of last chunk if last line has no newline
With playbin the last subtitle chunk would not get displayed
if the last chunk was missing a newline at the end. This is
because streamsynchronizer will hold back the EOS event until
the audio and video streams are finished too, so subparse
would never forcefully push out the last chunk until the very
end when it is too late.

We get a STREAM_GROUP_DONE event from streamsynchronizer however,
so handle that like EOS and force out any remaining text then.

https://bugzilla.gnome.org/show_bug.cgi?id=771853
2018-01-25 18:42:08 +00:00
Ashish Kumar b927d60371 playback-utils: Fix caps leak on failure
https://bugzilla.gnome.org/show_bug.cgi?id=789358
2018-01-17 12:18:41 +00:00
Sam Thursfield f1324f9cb0 videotestsrc: Document the num-buffers property
It's not obvious from the existing docs that this option exists, nor
that it can be used to give a pipeline an exact length in video frames.

https://bugzilla.gnome.org/show_bug.cgi?id=777647
2018-01-12 00:49:20 +00:00
Edward Hervey 384d27002c typefind: Fix mp3 typefinding with multiple different headers
(yes, this has never worked since it was introduced, don't worry)

If we want to actually detect layer/channels/samplerate changes,
it would be better to:
* not reset the various prev_* variables at every iteration.
* and actually store the values when they change

CID #206079
CID #206080
CID #206081
2018-01-03 15:51:34 +01:00
Mathieu Duponchelle 164b5a7f94 audioaggregator: implement input conversion
https://bugzilla.gnome.org/show_bug.cgi?id=786344
2017-12-19 23:39:37 +01:00
Nicolas Dufresne 5affe09c48 videoconvert: Filter-out crop meta
To passthrough crop-meta, the converter would need to allocate and
convert buffers of the size of the originating buffer. This is currently
made difficult by GstBaseTransform since we cannot alter the caps passed
though the allocation query. We would also need to wait for the first
input buffer to be received in order to make the decision around that
size.

So the short and safe solution is just to stop pretending we can
passthrought that meta.

https://bugzilla.gnome.org/show_bug.cgi?id=791412
2017-12-17 15:50:00 -05:00
Dongil Park a8a5905ec6 playbin3: Fix accessing invalid index in GstStream when received select-stream event
If select-stream event was send to playbin3 as missing any GstStream of ES type
(V or A or TEX) of collection then, playbin will access to invalid address of
GstStream due to invalid index limit. This caused SIGSEGV.

https://bugzilla.gnome.org/show_bug.cgi?id=791638
2017-12-15 09:03:12 +01:00
Edward Hervey aa10e82257 typefind: Avoid overflow calculation (image/quicktime)
The qt typefinder uses guint64 values for offset and size calculation
but the typefinder system only supports gint64 values.

Make sure we don't end up using potentially overflowing values.
2017-12-08 09:12:33 +01:00
Edward Hervey 1df9b05f18 typefind: Avoid overflow calculation
The qt typefinder uses guint64 values for offset and size calculation
but the typefinder system only supports gint64 values.

Make sure we don't end up using potentially overflowing values.
2017-12-08 08:05:10 +01:00
Edward Hervey 32eae2b166 typefind: Fix previous commit
We need to make sure we have *enough* data to read (including the
next 4 bytes)
2017-12-07 16:10:22 +01:00
Edward Hervey b1c135aa72 typefind: Optimize qt/3gp typefinding
Request the whole 'ftyp' atom data and scan within it. Avoids doing
a lot of small 4 byte pull from upstream if it's invalid.
2017-12-07 15:05:07 +01:00
Edward Hervey 0428b4afda typefind: wavpack: limit search in blocksize
The maximum blocksize is 131072 bytes, anything bigger is a corrupted
file.
2017-12-07 15:05:07 +01:00
Edward Hervey a3bf3094d1 typefind: Fix ico out-of-bound read
The furthest we go to verify the data is reading a guint32 at offset
18, therefore make sure we can read as much.
2017-12-07 11:04:50 +01:00
Tim-Philipp Müller 2b933a2827 Remove GstAggregator from -bad, moved to core
https://bugzilla.gnome.org/show_bug.cgi?id=739010
2017-12-02 16:14:36 +00:00
Tim-Philipp Müller 6c0744a5fc Remove GstAggregator from -bad, moved to core
https://bugzilla.gnome.org/show_bug.cgi?id=739010
2017-12-02 16:14:36 +00:00
Jun Xie f88b20397f decodebin: Fix typo in docs
https://bugzilla.gnome.org/show_bug.cgi?id=791058
2017-12-01 10:03:40 +02:00
Edward Hervey f2f87d220f urisourcebin: Don't leak mutexes 2017-11-25 12:45:03 +01:00
Mathieu Duponchelle 9e4b3fbd82 aggregator: Remove klass->sinkpads_type
This posed problems for the python bindings (and possibly others).

Instead, subclasses now use add_pad_template_with_gtype.

https://bugzilla.gnome.org/show_bug.cgi?id=789986
2017-11-22 16:52:29 +01:00
Mathieu Duponchelle 14f886b7b0 aggregator: Remove klass->sinkpads_type
This posed problems for the python bindings (and possibly others).

Instead, subclasses now use add_pad_template_with_gtype.

https://bugzilla.gnome.org/show_bug.cgi?id=789986
2017-11-22 16:52:29 +01:00
Edward Hervey a47881100d videotestsrc: Avoid overflow calculation
n_frames could end up being quite big (potentially up to G_MAXINT64). Which
would result in overflowing 64bits when multiplying it by GST_SECOND.

Instead move GST_SECOND to the num argument
2017-11-21 10:15:02 +01:00
Edward Hervey 38c835ec1e decodebin2: Don't spawn threads on shutdown
If we are shutting down, don't spawn a cleanup thread to cleanup old
groups and instead queue them to be cleaned up in the state change
thread.

This avoids (hopefully for good) having a race between the state change
thread and other threads trying to deactivate elements/pads.
2017-11-16 18:22:20 +01:00
Edward Hervey e72aa501b0 decodebin2: Avoid deactivation races
Deactivating pads from two threads isn't 100% MT-safe. There is a
slim chance that the GstPadActivateFunc might be called twice with
the same values (in this case from the cleanup thread *and* from
the GstElement change_state function when going from PAUSED to READY).

In order to avoid that, call any existing cleanup function *before*
calling the parent change_state implementation on downwards state
changes.
2017-11-16 06:44:10 +01:00
Edward Hervey ce8f51e30e decodebin2: Don't try to add pads when shutting down
Be even more agressive than before and just hold the DYN lock when/if
adding pads and return if we are shutting down.
2017-11-14 13:40:50 +01:00
Edward Hervey 77e5a71a15 decodebin2: Don't take locks when deactivating pads
When deactivating pads, we need to ensure that the streaming threads
going through the pads we wish to deactivate can cleanly return.
Failure to do that would result in the streaming locks of those
pads never being released. The end result would be a deadlock
when stopping decodebin2.

In order to avoid that situation, release the "dyn" lock around
the deactivation code. And refactor the code to cope with the
list of blocked pads having potentially changed when re-acquiring
the lock.
2017-11-14 13:40:48 +01:00
Edward Hervey 6280547be7 playbin3: Remove unneeded blacklisting
Blacklisted mimetypes have been empty in almost 10 years ...
2017-11-10 17:22:36 +01:00
Edward Hervey cd508aff97 playbin3: Remove context caching
This is now handled by the GstBin baseclass
2017-11-10 17:22:22 +01:00
Edward Hervey 3dd0888d1e playbin3: Remove source property
And instead use the "setup-source" signal. This opens the way to deal
with more than one 'source' for a given playlist entry
2017-11-10 17:06:46 +01:00
Edward Hervey 35a8d42724 parsebin: Don't let thread run after unref
We have a dedicated one-shot thread to handle cleanup of old groups.

While this is a good idea. It's an even better idea to make sure
that thread is *completed* before the parsebin element to which
it is related isn't freed/gone.

* There can only be one cleanup thread happening at any point in time.
  If there is already one, we wait for the previous one to finish.
* When shutting down (NULL=>READY) make sure the thread is finished

https://bugzilla.gnome.org/show_bug.cgi?id=790007
2017-11-10 17:06:45 +01:00
Edward Hervey 43b9bcbddb decodebin2: Don't let thread run after unref
We have a dedicated one-shot thread to handle cleanup of old groups.

While this is a good idea. It's an even better idea to make sure
that thread is *completed* before the decodebin2 element to which
it is related isn't freed/gone.

* There can only be one cleanup thread happening at any point in time.
  If there is already one, we wait for the previous one to finish.
* When shutting down (NULL=>READY) make sure the thread is finished

https://bugzilla.gnome.org/show_bug.cgi?id=790007
2017-11-10 17:06:10 +01:00
Edward Hervey d53ccfd8e5 parsebin: Check for shutdown before exposing pads
We already checked previously, but we need to do it before adding
pads.
2017-11-10 17:06:10 +01:00
Edward Hervey 92e8876844 parsebin: Emit 'drained' only for the top-level chain
Instead of emitting 'drained' whenever every single chain is drained
(which would result in plenty of signal emission, and would also
occur when switching groups), only emit it when the top-level chain
is drained.

Furthermore, mark unknown (and therefore unexposed) pads as drained
since we'll never get EOS on them.

https://bugzilla.gnome.org/show_bug.cgi?id=787367
2017-11-10 10:05:26 +01:00
shakin chou 2ec51ef998 playbin: Don't ref_sink() the sinks twice
Since we're already sunk floating reference, we shouldn't call ref_sink
again, which increases the ref_count and cause leaks.

https://bugzilla.gnome.org/show_bug.cgi?id=789547
2017-11-07 10:32:34 +02:00
Edward Hervey c81e3e6fce videotestsrc: Fix undefined left shift
Cast value to target type
2017-11-04 12:19:46 +01:00
Edward Hervey a23d4d1c1f typefind: Fix out-of-bound read in PNM typefinder 2017-11-02 17:59:29 +01:00
Tim-Philipp Müller eca9739bca videoaggregator: drop ABI compat in padding for new struct member
Don't really have to do that while it's in -bad and most users
are in-tree anyway.
2017-11-02 11:57:24 +00:00
Tim-Philipp Müller 6c749f75a5 typefindfunctions: fix off-by-one in webvtt typefinder
We're also checking the byte after the WEBVTT magic.
2017-11-02 09:05:47 +00:00
Edward Hervey f448cecceb decodebin2: Recheck shutdown behaviour in error case
If we can expose the main chain, recheck whether we are shutting
down or not.

decodebin2 might have been set to READY/NULL during the attempt
to expose, which would cause it to fail ... but it is not a fatal
issue.
2017-11-02 07:55:16 +01:00
Edward Hervey cb0b73672c Update disted orc file
For latest orc fixes
2017-10-31 11:57:23 +01:00
Edward Hervey 5bcc1e2b57 typefind: Use GST_READ_UINT32 macros
Avoids undefined behaviour with shifting
2017-10-30 11:10:11 +01:00
Edward Hervey 7b5d97e9c3 typefind: Fix out-of-bound memory access
We were not checking the proper amount of available data in several
places
2017-10-30 08:57:19 +01:00
Vivia Nikolaidou b2be4169ee audioconvert: Fix empty mix matrix documentation typo 2017-10-27 18:29:40 +03:00
Seungha Yang 466cbef6ab decodebin3: Allow configure output stream without reassign slot
By select-streams event, current implementation of decodebin3
supports deactivate output stream (i.e., decoder element)
in reassign slot(), but cannot activate any slot without track change.

https://bugzilla.gnome.org/show_bug.cgi?id=778015
2017-10-27 09:55:59 +02:00
Seungha Yang 969ab3f48c playbin3: Use STREAMS_SELECTED message to update selected stream types
Application might choose only specific type among all available types
using select-streams event. In this case, it is desired that reconfigure
of playsink to clear unused stream path.

https://bugzilla.gnome.org/show_bug.cgi?id=778015
2017-10-27 09:55:59 +02:00
Mathieu Duponchelle b0c184e189 audioconvert: document passing an empty mix-matrix 2017-10-26 18:05:46 +02:00
Stefan Sauer 8f4479b874 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-10-23 11:41:17 +02:00
Mathieu Duponchelle d4db88772b audioconvert: allow empty mix matrix
When an empty mix matrix is passed, audio-channel-mixer
will now generate a (potentially truncated) identity matrix,
this replicates the behaviour of audiomixmatrix in first-channels
mode.

https://bugzilla.gnome.org/show_bug.cgi?id=788833
2017-10-11 22:57:38 +02:00
Reynaldo H. Verdejo Pinochet e81c334ca9 Use proper GtkDoc notation for NULL/FALSE/TRUE 2017-10-03 14:31:18 -07:00
Mathieu Duponchelle 8d52a107a4 audioconvert: [API]: expose mix-matrix property.
This obsoletes audiomixmatrix

https://bugzilla.gnome.org/show_bug.cgi?id=785471
2017-09-22 20:17:48 +02:00
Mathieu Duponchelle 7a407b69e1 audioconvert: refactor format removal.
remove_format_info was a bit confusing to read, this removes
it in favor of standard gst_caps_map_in_place calls.

This no longer simplifies the resulting caps, but I
consider this should be the job of basetransform.

https://bugzilla.gnome.org/show_bug.cgi?id=785471
2017-09-22 15:03:41 +02:00
Mark Nauwelaerts 2372894c63 playbin: ref_sink() sink rather than pointer to sink 2017-08-20 12:25:29 +02:00
Edward Hervey ce65017d03 decodebin3/urisourcebin: Switch to actual EOS events internally
Use the intended sequence for re-using elements:
* EOS
* STREAM_START if element is to be re-used

This avoids having elements (such as queue/multiqueue/queue2) not
properly resetting themselves.

When delaying EOS propagation (because we want to wait until all
streams of a group are done for example), we re-trigger them by
first sending the cached STREAM_START and then EOS (which will
cause elements to re-set themselves if needed and accept new
buffers/events).

https://bugzilla.gnome.org/show_bug.cgi?id=785951
2017-08-11 11:23:29 +03:00
Mathieu Duponchelle 663ef174d8 compositor: improve conversion debugging
https://bugzilla.gnome.org/show_bug.cgi?id=786078
2017-08-10 13:55:59 +02:00
Sebastian Dröge b4899a5a65 playbin: Make sure to ref_sink() any sinks before calling activate_sink()
It is forwarding messages to the playbin bus, thus forwarding messages
that contain a floating reference to the application. This generally
makes bindings unhappy, we must not leak floating references to them.
2017-08-07 15:27:45 +03:00
Tim-Philipp Müller 61b54cdb40 compositor: update disted orc fallback files 2017-08-03 20:14:41 +01:00
Thibault Saunier effb593a93 compositor: Add support for crossfade blending
Crossfading is a bit more complex than just having two pads with the
right keyframes as the blending is not exactly the same.

The difference is in the way we compute the alpha channel, in the case
of crossfading, we have to compute an additive operation between
the destination and the source (factored by the alpha property of both
the input pad alpha property and the crossfading ratio) basically so
that the crossfade result of 2 opaque frames is also fully opaque at any
time in the crossfading process, avoid bleeding through the layer
blending.

Some rationnal can be found in https://phabricator.freedesktop.org/T7773.

https://bugzilla.gnome.org/show_bug.cgi?id=784827
2017-08-03 12:59:43 -04:00
Thibault Saunier ffd4c990c1 audioconvert: Consider channel=1, channel-mask=0x0 as mono
channels=1 is always mono, having it 'unpositioned' does not make
sense.

This fixes pipeline such as:

  gst-validate-1.0 audiotestsrc ! audio/x-raw,channels=2,rate=44100,layout=interleaved ! audioconvert ! audioresample ! audio/x-raw, rate=44100, channels=1 ! avenc_mp2 ! fakesink

https://bugzilla.gnome.org/show_bug.cgi?id=785407
2017-07-26 09:26:39 -04:00
Satya Prakash Gupta 075dac486f ssaparse: Fix buffer leak in error case
https://bugzilla.gnome.org/show_bug.cgi?id=785331
2017-07-24 11:56:50 +03:00
Stefan Sauer 2bf83de168 adder: comment and formatting cleanups
Log a few more details. Update method comments. Remove some extra blank lines.
2017-07-23 13:13:14 +02:00
Mathieu Duponchelle 875af55937 videorate: flush remaining buffers on SEGMENT_DONE
Just as we do on EOS.

https://bugzilla.gnome.org/show_bug.cgi?id=784666
2017-07-21 14:22:07 -04:00
Seungha Yang bf32c0b3b0 decodebin3: Remove FIXME and do remove_input_stream() only for the corresponding parsebin
Do not remove other parsebin's input streams. It will cause unexpected
removal of any input streams in multi-parsebin use case.

Basically, the purpose of blocking buffers is similar to checking
no-more-pads of chain/group. That is, it gives hint to know the timing
to remove old (EOSed) streams of the parsebin and to add/reuse slots
for new input streams. But, that doesn't mean that we need to remove
other parsebin's EOSed stream. Each parsebin has most likely its
own streaming thread and therefore EOSed time can be much different.
(i.e., much early EOS of subtitle only parsebin)

https://bugzilla.gnome.org/show_bug.cgi?id=785120
2017-07-19 17:13:20 +02:00
Seungha Yang abe1183c17 parsebin: Ensure StreamType and Caps of GstStream object before exposing it
The final StreamType and Caps might not be set yet on GstStream at exposing the pads.

https://bugzilla.gnome.org/show_bug.cgi?id=785120
2017-07-19 17:13:20 +02:00
Seungha Yang 7a236e2302 playbin3: Delay linking text output until video stream is shown
We are not sure that which stream's collection arrives first
when there are multiple parsebins such as adaptive streaming.

https://bugzilla.gnome.org/show_bug.cgi?id=785120
2017-07-19 17:13:20 +02:00
Satya Prakash Gupta 3cc824c9ce encodebin: fix possible pad ref leak in error code path
https://bugzilla.gnome.org/show_bug.cgi?id=785065
2017-07-19 09:07:27 +01:00
Edward Hervey 6ccba23752 playbin3: We only care about source pads going away 2017-07-18 13:05:06 +02:00
Edward Hervey 651a0fe312 decodebin3: use lock macro where applicable 2017-07-18 13:05:06 +02:00
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
Tim-Philipp Müller 1692f910e7 audiomixer: document caps negotiation raciness
Until we land conversion support in audioaggregator (#773762).

https://bugzilla.gnome.org/show_bug.cgi?id=777915
2017-07-14 13:54:48 +01:00
Tim-Philipp Müller 88fea7c511 adder: fix docs typo 2017-07-14 13:48:53 +01:00
Tim-Philipp Müller cb5a2dcfbb adder: document caps negotiation raciness and workaround
https://bugzilla.gnome.org/show_bug.cgi?id=777915
2017-07-14 13:40:07 +01: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 fc67a689af urisourcebin: Push EOS if slot is still eos state
linked input of slot can be old input, so urisourcebin should check
eos state to figure out whether it's new one or not.
If not, urisourcebin never ever forwards EOS to downstream at the end
of presentation, because the old input is still there without removal

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
Aaron Boxer 12c69c4cdf typefind: Detect JPEG2000 codestreams
https://bugzilla.gnome.org/show_bug.cgi?id=783625
2017-07-10 10:00:41 +03:00
Mathieu Duponchelle bfba213437 uridecodebin: aggregate topology messages
This makes it possible for GstDiscoverer to work with sources that
have multiple source pads and hence will trigger the creation of multiple
decodebin instances such as rtspsrc.

Based on the work of Vineeth TM <vineeth.tm@samsung.com>

https://bugzilla.gnome.org/show_bug.cgi?id=754178
2017-07-03 20:08:55 -04:00
Jimmy Ohn ca18b1f8fd encodebin: Simplify the are_raw_caps function
Remove unnecessary if statement in are_raw_caps function.
we can use result returned by gst_caps_can_intersect quite simple.

https://bugzilla.gnome.org/show_bug.cgi?id=784312
2017-06-29 15:51:53 -04:00
Mark Nauwelaerts dac113a867 subparse: ensure serialized sending of segment event at proper time 2017-06-25 22:25:40 +02:00
Thibault Saunier 7e94d2824f urisourcebin: Call do_async_done when source state change returns NO_PREROLL
Otherwise for RTSP streams for example, the pipeline will never go to
PLAYING as it will be missing an ASYNC_DONE message.

https://bugzilla.gnome.org/show_bug.cgi?id=780099
2017-06-15 14:35:06 -04:00
Nicolas Dufresne cc28e7cce0 rawvideoparse: Fix missing VideoMeta
The base class is trying to align the processed data, but it endup
removing the GstVideoMeta. That caused wrong result. Instead, just copy
from the process function with the appropriate alignment.

https://bugzilla.gnome.org/show_bug.cgi?id=781204
2017-06-12 15:55:31 -04:00
Sebastian Dröge 66929f8970 urisourcebin: Use downloadbuffer element
And only set low-percent/high-percent if not using downloadbuffer, just
like in old uridecodebin. using the watermark based buffering causes
playback to hang never finish buffering with downloadbuffer.
2017-06-12 10:24:43 +03:00
Arun Raghavan 25e0b77bbe encodebin: Don't try rate adjustment before the first buffer
With both audiorate and videorate, it seems more sensible to apply rate
adjustments after the first buffer appears. For example, with v4l2src,
there is often a small delay before the first video buffer turns up, and
this can cause a stuttery start because of videorate trying to ensure a
perfect stream.
2017-06-08 12:35:23 +05:30
Arun Raghavan 08525d825d encodebin: Don't set audiorate property before NULL check 2017-06-08 12:34:24 +05:30
Wim Taymans 16b8851440 audioconvert: resize output buffer to correct size
If we are using a downstream bufferpool we need to set the size of the
buffer to our output size.
2017-06-02 09:44:19 +02:00
Sebastian Dröge d5069d27ef Revert "decodebin2: Set a time limit on "upstream" multiqueues"
This reverts commit 07dc9ba071. It causes
timeouts in validate because queues run full before prerolling.
2017-05-31 12:30:40 +03:00
Edward Hervey 07dc9ba071 decodebin2: Set a time limit on "upstream" multiqueues
Those multiqueue are the ones dealing with adaptive demuxers. They should
have a time limit set so that they don't end up buffering too much data.

They would previously be set with no limits at all, which would cause them
to grow indefinitely until downstream blocks.
2017-05-31 10:27:19 +03:00
Olivier Crête 4fdb5ab675 videotestsrc: Protect videoinfo with object lock
The videoinfo is set in the streaming thread, but can be read by any
thread from the various queries, so protect it with the object lock.
2017-05-23 08:54:25 +02:00
Olivier Crête 930c3cea40 audioaggregate: Don't hold object locks across calls to aggregate_one
https://bugzilla.gnome.org/show_bug.cgi?id=782878
2017-05-21 18:44:53 +02:00
Olivier Crête 7b2e201bfa audiointerleave: Take object lock while modifying channel count 2017-05-20 17:52:00 +02:00
Guillaume Desmottes 36b7e5890f videorate: stop copying buffers in drop-only mode
gst_video_rate_flush_prev() ensures that the pushed buffer is writable
by calling gst_buffer_make_writable() on videorate->prevbuf.

In drop-only mode we always push buffers directly when they are received
from GstBaseTransform (gst_video_rate_transform_ip()) and do not keep them
around. GstBaseTransform already ensures that those buffers are
writable so there is no need to do it twice.

This change saves us from copying buffers in drop-only mode as we no longer
calls gst_buffer_make_writable() with a buffer having a refcount of 2
(one ref owned by GstBaseTransform and one in videorate->prevbuf).

https://bugzilla.gnome.org/show_bug.cgi?id=780767
2017-05-20 16:35:53 +02:00
Guillaume Desmottes 2c2d2a444c videorate: factor out gst_video_rate_push_buffer()
No semantic change, just factor out this function from
gst_video_rate_flush_prev().

I'm about to use it to change the 'drop-only' code path.

https://bugzilla.gnome.org/show_bug.cgi?id=780767
2017-05-20 16:35:53 +02:00
Matthew Waters 719498601f 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-05-20 16:21:17 +02:00
Matthew Waters 57673e608e 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-05-20 16:21:17 +02:00
George Kiagiadakis 2a60a9f66f videoaggregator: delay using new caps from a sink pad until the next buffer in the queue is taken
When caps changes while streaming, the new caps was getting processed
immediately in videoaggregator, but the next buffer in the queue that
corresponds to this new caps was not necessarily being used immediately,
which resulted sometimes in using an old buffer with new caps. Of course
there used to be a separate buffer_vinfo for mapping the buffer with its
own caps, but in compositor the GstVideoConverter was still using wrong
info and resulted in invalid reads and corrupt output.

This approach here is more safe. We delay using the new caps
until we actually select the next buffer in the queue for use.
This way we also eliminate the need for buffer_vinfo, since the
pad->info is always in sync with the format of the selected buffer.

https://bugzilla.gnome.org/show_bug.cgi?id=780682
2017-05-20 16:21:16 +02:00
Sebastian Dröge efbda07cfa urisourcebin: Unref query with gst_query_unref()
Not gst_object_unref().
2017-05-18 11:03:07 +03:00
Nicolas Dufresne c483cbf904 Remove plugin specific static build option
Static and dynamic plugins now have the same interface. The standard
--enable-static/--enable-shared toggle are sufficient.
2017-05-16 14:05:52 -04:00
Nicolas Dufresne 40f4fc3d84 Remove plugin specific static build option
Static and dynamic plugins now have the same interface. The standard
--enable-static/--enable-shared toggle are sufficient.
2017-05-16 14:05:52 -04:00
Nicolas Dufresne 8e6c6266d7 Remove plugin specific static build option
Static and dynamic plugins now have the same interface. The standard
--enable-static/--enable-shared toggle are sufficient.
2017-05-16 13:42:07 -04:00
Vincent Penquerc'h b97cbe678f decodebin2: fix use after free from demuxer flush pad probe
In some cases, we could get a flush-stop event after the chain structure
containing the demuxer was freed.

https://bugzilla.gnome.org/show_bug.cgi?id=782095
2017-05-03 17:37:12 +01:00
Sebastian Dröge 0be4504b10 Revert "videorate: In reverse playback mode, don't output the first buffer with ts=segment.stop"
This reverts commit e6736e9925.

This one is for after 1.12.0 and shouldn't have been merged yet.
2017-05-02 14:32:02 +03:00
Sebastian Dröge e6736e9925 videorate: In reverse playback mode, don't output the first buffer with ts=segment.stop
Instead go backwards before segment.stop based on the framerate or the
next buffers end timestamp. Otherwise the first buffer will usually be
dropped because outside the segment.

https://bugzilla.gnome.org/show_bug.cgi?id=781899
2017-05-02 14:05:39 +03:00
Tim-Philipp Müller 6a3640f367 playbin: minor docs fix
The "frame" property is no more, it's "sample" these days.
2017-04-28 15:54:04 +01:00
Thibault Saunier 3a9a603276 docs: Port all docstring to gtk-doc markdown 2017-04-12 12:57:57 -03:00
Thibault Saunier 2bf2696945 docs: Port all docstring to gtk-doc markdown 2017-04-12 12:57:57 -03:00
Tim-Philipp Müller 4246198fb3 No need for newlines in debug log statements 2017-04-12 09:58:49 +01:00
Sebastian Dröge 711504aad1 volume: Store volume as a double for consistency with the property type
And the potential increased precision, which shouldn't matter much here.

https://bugzilla.gnome.org/show_bug.cgi?id=781149
2017-04-11 11:17:18 +03:00
Vincent Penquerc'h 9c8e700b91 encodebin: fix list leak when requesting a new pad
https://bugzilla.gnome.org/show_bug.cgi?id=780769
2017-03-31 16:14:50 +01:00
Douglas Bagnall 974cbfb3c4 audiointerleave: don't overflow channel map with >64 channels
When there are more than 64 channels, we don't want to exceed the
bounds of the ordering_map buffer, and in these cases we don't want to
remap at all. Here we avoid doing that.

Based on a patch originally for plugins-good/interleave in
https://bugzilla.gnome.org/show_bug.cgi?id=780331
2017-03-31 14:11:56 +03:00
Jan Schmidt 546a99026b urisourcebin: Set removed flag when removing buffering msg
Forgot to set the flag, resulting in a missed check for
sending 100% in some cases. Spotted by Coverity.

CID: 1403263
2017-03-27 23:00:34 +11:00
Vincent Penquerc'h 1ad791792c rawvideoparse: fix assert on large width/height in caps
https://bugzilla.gnome.org/show_bug.cgi?id=776446
2017-03-27 11:27:19 +01:00
Jan Schmidt 0bb82827f7 typefind: Expand the search range for HLS detection
HLS files can have arbitrary extra tags in them, and
those can be quite long lines. We need to search
further than 256 bytes sometimes just to get past the
first few lines of the file. Make the limit 4KB,
which matches a typical input block size and should
hopefully cover every crazy input.

https://bugzilla.gnome.org/show_bug.cgi?id=780559
2017-03-27 13:01:39 +11:00
Nicolas Dufresne d81a6da702 rawvideoparse: Rename frame-stride in to frame-size
The term stride is confusing here, since the stride is always use
to signal the pixel row size of an image (including padding). Also
a frame may have a single stride, which adds to the confusion. This
patch uses frame-size, which simply indicate the frame size in the
case the images have some padding in between.

https://bugzilla.gnome.org/show_bug.cgi?id=780053
2017-03-24 13:50:06 -04:00
Nicolas Dufresne 2b4a173e89 rawvideoparse: Use GstValueArray for strides and offsets
This allow using those property through gst-launch-1.0. This type
gained a deserilizer recently. The syntax is: <val1, val2, ...>.
Note that we also use the type int instead of uint to avoid having
to cast when specifying the values. The deserilizers assume
int by default.

https://bugzilla.gnome.org/show_bug.cgi?id=780053
2017-03-24 13:50:06 -04:00
Haihua Hu 6749e81ce2 streamsynchronizer: every stream need keep their own send_gap_event flag
When a clip has video audio and subtitle, if need send gap event
to audio and subtitle, we should make sure all has been sent, so
need every stream keep one send_gap_event.

https://bugzilla.gnome.org/show_bug.cgi?id=780429
2017-03-23 12:55:57 +02:00
Jan Schmidt a0f870a215 urisourcebin: Mention which queue is being linked in debug output 2017-03-23 00:21:44 +11:00
Seungha Yang 587c417d89 urisourcebin: Fix typefind list leak
https://bugzilla.gnome.org/show_bug.cgi?id=780257
2017-03-20 11:57:11 +02:00
Jan Schmidt 0b6a933e01 decodebin: Close a small race posting 100% buffering
When posting 100% buffering due to removing the last
buffering element, we still need to hold the posting
lock as well, to avoid any race with other elements
that might post a buffering message at that exact
moment
2017-03-18 02:03:47 +11:00
Jan Schmidt 94da76d301 urisourcebin: Fix buffering message aggregation.
Add locking, and handle EOS properly now that urisourcebin
uses custom events in place of real EOS events, so we
need to manually remove buffering messages and potentially
post 100% in that situation
2017-03-18 02:03:47 +11:00
Jan Schmidt 8cb57a4fe8 urisourcebin: Store slot info on the queue object too
The buffering message handling tries to look up the
slot info on the queue itself.
2017-03-18 02:03:47 +11:00
Jan Schmidt 97001a886a videotestsrc: Publish multiview-mode info in the caps
Don't allow downstream to accidentally pretend that
the output is anything than a mono or single-eye
left/right view.

https://bugzilla.gnome.org/show_bug.cgi?id=776172
2017-03-18 02:03:47 +11:00
Olivier Crête c1acb1c1fb multifdsink: Remove GValueArray from the doc
It's been a GstStructure for a long time. Also fix
a typo in the name of one of the fields.
2017-03-14 16:30:46 -04: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
Nicolas Dufresne fb7d9e26ff Fix plugin filenames to match pugin names
- libgstencodebin.so is now libgstencoding.so
 - libgstximage.so is now libgstximagesink.so (meson only)

https://bugzilla.gnome.org/show_bug.cgi?id=779344
2017-03-08 20:04:17 -05:00
Jan Schmidt 4e911760d2 urisourcebin: Shrink queue2 max-size-time buffering
The expanded 4 second buffering was making radio streams that are
being delivered at real-time speeds too slow. We might need
a better plan for matching the queue2 size to incoming bitrate
in the absence of tag information or timestamping.

In uridecodebin, it used tags on the output of decodebin to
adjust the queue2 buffering, but urisourcebin doesn't have that
view - decodebin is downstream from us.
2017-03-09 01:42:14 +11:00
Sebastian Dröge 903a8863ce playbin3/urisourcebin: Enable buffering by default
This only has effect on network streams in these elements, and by
enabling it by default we get the same behaviour as in playbin2.
2017-03-07 14:59:36 +02:00
Sebastian Dröge 6eef6bd1f5 rawbaseparse: Assert that frame size is > 0
We would later divide by zero otherwise, and generally won't do the
right thing.

CID 1401383
2017-02-28 15:51:00 +02:00
Sebastian Dröge 9a62892428 rawaudioparse: Fix potential NULL pointer dereference
CID 1364606
2017-02-28 15:26:36 +02:00
Sebastian Dröge 033057cf74 decodebin3: Fix potential NULL pointer dereference on slot deactivation
CID 1363331
2017-02-28 15:17:24 +02:00
Sebastian Dröge bd9fd89d61 urisourcebin: Fix inverted check for an existing slot
CID 1363330
2017-02-28 15:15:31 +02:00
Sebastian Dröge f41198db9d decodebin3: Handle stream-start events without group id correctly
CID 1363327
2017-02-28 15:13:49 +02:00
Sebastian Dröge aee020c26f glvideomixer/compositor: Correctly error out if calculating DAR fails
CID 1320700
2017-02-28 13:06:41 +02:00
Tim-Philipp Müller 14f04c3b69 rawparse: fix linking for audio/video libs
Broke build in gnome continuous
2017-02-25 19:20:19 +00:00
Sebastian Dröge 8d4a98d2ae rawparse: Fix meson build 2017-02-25 15:14:07 +02:00
Sebastian Dröge 38ec8f396f rawparse: Move to gst-plugins-base
https://bugzilla.gnome.org/show_bug.cgi?id=774544
2017-02-25 14:48:40 +02:00
Sebastian Dröge 498ee680fe Merge branch 'rawparse-moved-plugin' 2017-02-25 14:32:33 +02:00
Sebastian Dröge 49ac382b47 video-converter: Implement multi-threaded scaling/conversion
This adds a property to select the maximum number of threads to use for
conversion and scaling. During processing, each plane is split into
an equal number of consecutive lines that are then processed by each
thread.

During tests, this gave up to 1.8x speedup with 2 threads and up to 3.2x
speedup with 4 threads when converting e.g. 1080p to 4k in v210.

https://bugzilla.gnome.org/show_bug.cgi?id=778974
2017-02-23 21:55:29 +02:00
Sebastian Dröge 4cde35553f rawbaseparse: Drop incomplete frames at EOS
See https://bugzilla.gnome.org/show_bug.cgi?id=773666

This would ideally be solved in baseparse but that requires further
thought at this point, and in the meantime it would be good to have
rawbaseparse not assert on this but handle it gracefully instead.
2017-02-18 20:18:50 +02:00
Heekyoung Seo 0889d89407 typefindfunctions: prevent unsigned int overflow
https://bugzilla.gnome.org/show_bug.cgi?id=778432
2017-02-14 12:22:37 +02:00
Stefan Sauer 66148a770c adder: ensure the discont flag is correct
Previously it happened that reused buffer caused the discont to be on the wrong
buffers.
2017-02-10 21:41:29 +01: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
Tim-Philipp Müller f9d110f596 videorate: fix LATENCY query
The latency query originally had a fallthrough to the default
label at the end as fallback, but that got messed up when the
DURATION and POSITION queries were added, so it then fell through
to the duration query handler instead. Restore original behaviour.

https://bugzilla.gnome.org/show_bug.cgi?id=699077
2017-01-24 01:04:53 +00:00
Tim-Philipp Müller d6c0e9072b videorate: fix duration and position query handling
Duration query would return TRUE and duration=-1. This
worked in the unit test because the unit test implementation
was a bit broken.

Both queries need to access rate with a lock.

Fix broken duration query test as well. It relied on broken
behaviour by the videorate query handler, and also it was
implemented as a downstream query rather than an upstream
query. And we must return HANDLED from the probe so that the
query we intercept actually returns TRUE.

https://bugzilla.gnome.org/show_bug.cgi?id=699077
2017-01-24 01:04:39 +00:00
Sebastian Dröge d894c19db6 samiparse: Check that the string has a non-zero length before overwriting the last byte with '\0'
https://bugzilla.gnome.org/show_bug.cgi?id=777502
2017-01-20 08:03:33 +02:00
Jan Schmidt 54bf104274 decodebin: Don't leak blocked pad references on errors
When the decodebin state change fails because of an error
message, we might not go through PAUSED->READY. Don't leak
a ref to decodebin pads due to pad blocking in that case.

This is because we return ASYNC going to PAUSED, and if
we fail before reaching PAUSED the only transition we'll
see is READY->NULL.

https://bugzilla.gnome.org/show_bug.cgi?id=775893
2017-01-18 13:09:06 +02:00