William Manley [Fri, 13 Mar 2015 13:43:59 +0000 (13:43 +0000)]
socketsrc: Tidy up usage of `g_object_unref`/`g_clear_object` and locking
This is clearer, and should make future changes safer. No functional
change intended.
See https://bugzilla.gnome.org/show_bug.cgi?id=739546
William Manley [Fri, 13 Mar 2015 13:30:48 +0000 (13:30 +0000)]
socketsrc: Refactor to simplify
* Don't bother polling, just do a blocking read, the `GCancellable` will
take care of unlocking. This should also be faster on MS Windows where
the GIO documentation for `g_socket_get_available_bytes` states: "Note
that on Windows, this function is rather inefficient in the UDP case".
* Implement `GstPushSrc.fill` rather than `GstPushSrc.create`. This means
that we will be using the downstream allocator which may be more
efficient. It also means that socketsrc is likely to respect its
"blocksize" property (assuming that there is enough data available).
See https://bugzilla.gnome.org/show_bug.cgi?id=739546
William Manley [Mon, 3 Nov 2014 02:47:14 +0000 (02:47 +0000)]
tcp: Add element socketsrc
`socketsrc` can be considered a source counterpart to `multisocketsink`.
It can be considered a generalization of `tcpclientsrc` and
`tcpserversrc`: it contains all the logic required to communicate over
the socket but none of the logic for creating the sockets/establishing
the connection in the first place, allowing the user to accomplish this
externally in whatever manner they wish making it applicable to other
types of sockets besides TCP.
This commit essentially copies the implementation directly from
tcpserversrc. Later patches will tidy the implementation up and
re-implement `tcpclientsrc` and `tcpserversrc` in terms of `socketsrc`.
See https://bugzilla.gnome.org/show_bug.cgi?id=739546
Arun Raghavan [Fri, 13 Mar 2015 17:54:23 +0000 (23:24 +0530)]
audioringbuffer: Log with the ringbuffer object where possible
William Manley [Fri, 13 Mar 2015 12:49:31 +0000 (12:49 +0000)]
multisocketsink: Map `GstMemory`s individually when sending
If a buffer is made up of non-contiguous `GstMemory`s `gst_buffer_map`
has to copy all the data into a new `GstMemory` which is contiguous. By
mapping all the `GstMemory`s individually and then using scatter-gather
IO we avoid this situation.
This is a preparatory step for adding support to multisocketsink for
sending file descriptors, where a GstBuffer may be made up of several
`GstMemory`s, some of which are backed by a memfd or file, but I think this
patch is valid and useful on its own.
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=746150
Nicolas Dufresne [Fri, 13 Mar 2015 10:30:43 +0000 (10:30 +0000)]
video-frame: Relax width/height assertion
When doing CROP META it is exepcted that the width and/or height in the
GstVideoMeta is bigger or equal to the caps negotiated size.
Nicolas Dufresne [Thu, 12 Mar 2015 16:32:31 +0000 (16:32 +0000)]
videopool: Choose the biggest buffer size
We should respect what has been negotiated.
Vincent Penquerc'h [Thu, 12 Mar 2015 10:06:15 +0000 (10:06 +0000)]
oggdemux: recover from EOS when searching for chain in push mode
If we get EOS when we're trying to build a chain, we disable seeking
and continue instead of posting an error. This can happen for corner
cases such as a stream with a video that stops before the end, for
instance.
https://bugzilla.gnome.org/show_bug.cgi?id=745980
Vincent Penquerc'h [Wed, 11 Mar 2015 16:46:38 +0000 (16:46 +0000)]
oggdemux: fix seeking in files with a "missing" stream
When looking for pages when seeking, we stop looking for non sparse
streams if we don't find one within a given threshold. This fixes
seeking filling up queues and blocking in corner cases such as an
audio file with a pathological 1 frame video stream (yes, I saw one).
https://bugzilla.gnome.org/show_bug.cgi?id=745980
Jan Schmidt [Thu, 12 Mar 2015 14:06:57 +0000 (01:06 +1100)]
docs: Add new video functions and objects. Cleanup a little.
Add GstVideoChroma, GstVideoDither, GstVideoScaler and friends to the docs.
Remove and clean up a few obsolete/deleted refs and typos
Sebastian Dröge [Thu, 12 Mar 2015 12:17:11 +0000 (12:17 +0000)]
playbin: Disconnect signals and invalidate group if it fails to activate
Otherwise playbin might move to the group directly after EOS of the next
group, and then error out again.
Jan Schmidt [Sat, 31 Jan 2015 16:39:07 +0000 (03:39 +1100)]
theoradec: Fix decoding in the presence of GstVideoCropMeta
Store the video info of the internal frame decode width/height
separate to the exposed (cropped) frame info, so that it can be
used for mapping the downstream allocated video frame buffer correctly
when using GstVideoCropMeta.
Fixes playback of files with sizes that aren't a multiple of 16-pixels
width or height.
https://bugzilla.gnome.org/show_bug.cgi?id=741030
Song Bing [Tue, 3 Mar 2015 07:18:04 +0000 (15:18 +0800)]
streamsynchronizer: Should wait state change complete before start another state change
Should wait state change complete before start another state change.
Can't ensure can received async-done message when state change from PLAYING to PAUSED.
https://bugzilla.gnome.org/show_bug.cgi?id=736655
Song Bing [Fri, 27 Feb 2015 08:40:23 +0000 (16:40 +0800)]
streamsynchronizer: Remove unnecessary ERROR message.
Remove unnecessary ERROR message.
Push GAP will fail as flushing. Needn't ERROR message.
https://bugzilla.gnome.org/show_bug.cgi?id=736655
Vincent Penquerc'h [Thu, 5 Mar 2015 17:42:53 +0000 (17:42 +0000)]
oggdemux: do not send seek events from the streaming thread
This will usually deadlock, despite this patch being in master for
quite some time and working fine. Nevertheless, we deem it to be
not working, disregarding facts.
As such, we fix it by keeping track of seek events, and sending
them upstream from a separate thread. Buffers are then discarded
till we get a new segment with the expected seqnum.
Vincent Penquerc'h [Mon, 23 Feb 2015 13:07:41 +0000 (13:07 +0000)]
oggdemux: set correct seqnum on segment events after a seek in push mode
There is already a seqnum field for this, which was used to overwrite
the seqnum that was set by the push specific code.
Vincent Penquerc'h [Mon, 23 Feb 2015 11:30:36 +0000 (11:30 +0000)]
oggdemux: try harder to query duration from upstream
READY->PAUSED can be too early as souphttpsrc can get the HTTP
headers after this. Try again in the chain function.
Also use seeking query to disable seeking if upstream reports
being unseekable.
Vincent Penquerc'h [Fri, 31 Oct 2014 10:55:14 +0000 (10:55 +0000)]
oggdemux: add non flushing time seeking in push mode
Some resetting code has to be done in the NEW_SEGMENT
event handler, instead of the missing FLUSH_STOP one.
Segment base was also wrongly accounted for. This was hidden
by the fact that flushing resets the base.
A discontinuity is now also signalled on seeking. We have to
also ensure that the discontinuity "sticks" till a buffer
with a valid timestamp goes out, or the audio decoder base
class will ignore the discontinuity for purposes of keeping
track of the current time.
This allows using non flushing segment seeks for looping
HTML audio in particular, and more generally non flushing seeks.
https://bugzilla.gnome.org/show_bug.cgi?id=729198
Vincent Penquerc'h [Wed, 4 Feb 2015 17:13:44 +0000 (17:13 +0000)]
oggdemux: fix wrong first granule
The code was using the first nonnegative granulepos to seed the
granule tracking, which appeared to work since headers have zero
granulepos. However, this does not work for files with a hole at
start, which are common in live streaming.
The correct behavior is to look for the first granule, and subtract
the duration of all the packets finishing on this page.
The function which does this relies on the fact that the ogg_stream
structure can be duplicated by shallow copy, in order to pull the
packets from the first page(s) on the copy without affecting the
original stream state.
Wim Taymans [Wed, 11 Mar 2015 08:48:20 +0000 (09:48 +0100)]
video-converter: fix border handling of YUY2 and friends
Don't draw the border in groups of 4 pixels for YUY2 but instead in
groups of 2 with alternating U and V. This avoids a crash on odd width
borders.
Wim Taymans [Wed, 11 Mar 2015 08:47:23 +0000 (09:47 +0100)]
video-converter: force yuv conversion for border
Make sure we always do yuv conversion for the border.
Wim Taymans [Tue, 10 Mar 2015 16:29:51 +0000 (17:29 +0100)]
video-format: fix A422 subsampling description
Wim Taymans [Tue, 10 Mar 2015 14:12:30 +0000 (15:12 +0100)]
video-converter: add table based matrix8 implementation
Based on patch from Mozzhuhin Andrey <nopscmn at gmail.com>
Add a table based matrix8 multiplication implementation. The algorithm
does not do any clipping so we need to make sure we never call this on
input that might need to be clipped. In general, this algorithm is
2 times faster than the orc optimized one and would be chosen for all
RGB -> YUV conversions and some YUV->YUV and RGB->RGB conversions.
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=732186
Wim Taymans [Tue, 10 Mar 2015 10:55:11 +0000 (11:55 +0100)]
videotestsrc: add all colors mode
Sebastian Dröge [Tue, 10 Mar 2015 09:19:22 +0000 (10:19 +0100)]
video: Add support for 10 bit planar AYUV formats
Tim-Philipp Müller [Tue, 10 Mar 2015 09:27:08 +0000 (09:27 +0000)]
Fix double semicolons
Olivier Crete [Tue, 10 Mar 2015 01:35:59 +0000 (21:35 -0400)]
videorate: Accept any capsfeatures
Wim Taymans [Mon, 9 Mar 2015 15:28:02 +0000 (16:28 +0100)]
video-info: validate parsed colorimetry
Validate the parsed colorimetry and reset to defaults when we get RGB
with a matrix or YUV without a matrix.
Wim Taymans [Mon, 9 Mar 2015 15:01:19 +0000 (16:01 +0100)]
video-converter: detect identity matrix
Do nothing if we have an identity matrix conversion.
Wim Taymans [Mon, 9 Mar 2015 14:58:50 +0000 (15:58 +0100)]
video-info: use default colorimetry on error
When we fail to parse the colorimetry property, fall back to the default
colorimetry for the format and dimension instead of leaving things
undefined.
Luis de Bethencourt [Mon, 9 Mar 2015 11:25:41 +0000 (11:25 +0000)]
videoencoder: unused value
Value set in ret is immediately overwritten in the next line outside of the if
block. Run reset but don't store return.
CID #1226470
Wim Taymans [Mon, 9 Mar 2015 11:13:44 +0000 (12:13 +0100)]
video-converter: only convert to/from rgb when needed
Only use the YUV->RGB matrix when we have YUV as input and only use the
matrix when we need to make YUV output.
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=745780
Sebastian Dröge [Mon, 9 Mar 2015 10:12:46 +0000 (11:12 +0100)]
rtpbuffer: Link to an explanation why the seqnum comparison function does the right thing even for wraparounds
Mark Nauwelaerts [Sun, 22 Feb 2015 20:13:35 +0000 (21:13 +0100)]
videodecoder: only return EOS upon clipping if applicable
See also https://bugzilla.gnome.org/show_bug.cgi?id=709224
Mark Nauwelaerts [Sun, 22 Feb 2015 20:11:50 +0000 (21:11 +0100)]
audiodecoder: only return EOS upon clipping if applicable
See also https://bugzilla.gnome.org/show_bug.cgi?id=709224
Sebastian Dröge [Sat, 7 Mar 2015 15:49:07 +0000 (16:49 +0100)]
video: Update orc generated C files
Wim Taymans [Fri, 6 Mar 2015 11:54:56 +0000 (12:54 +0100)]
video-converter: add transfer full annotation for config
Ravi Kiran K N [Fri, 6 Mar 2015 04:00:51 +0000 (09:30 +0530)]
video-converter: correct right-border location for YUY2, YVYU, UYVY
Remove 'r_border /= 2' in convert_fill_border(). It doesn't
take the right border to correct location.
https://bugzilla.gnome.org/show_bug.cgi?id=745719
Sebastian Dröge [Thu, 5 Mar 2015 11:31:06 +0000 (12:31 +0100)]
volume: Explicitly cast integers to doubles and then back to integers after multiplication
gcc 4.9.1 on ARM seems to have a bug that causes it to cast the float to an
integer first, resulting in a 0 scale factor for volume < 1.0.
As a side effect this change here will also improve accuracy of the result a
bit because we go via doubles instead of floats.
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65325
https://bugzilla.gnome.org/show_bug.cgi?id=745667
Wim Taymans [Thu, 5 Mar 2015 08:52:18 +0000 (09:52 +0100)]
video-converter: avoid scaler when size is unchanged
Wim Taymans [Wed, 4 Mar 2015 15:45:35 +0000 (16:45 +0100)]
video-scaler: add horizontal 2tap u16 orc function
Add slightly faster u16 horizontal resampler orc function.
Wim Taymans [Wed, 4 Mar 2015 11:28:47 +0000 (12:28 +0100)]
check: add another generic converter test
Run conversion and scaling with borders.
Wim Taymans [Wed, 4 Mar 2015 11:21:33 +0000 (12:21 +0100)]
video-converter: don't reuse the input line when adding borders
When we need to add borders, we need a writable input line, so
don't reuse the source memory directly.
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=745207
Nicolas Dufresne [Tue, 3 Mar 2015 21:36:20 +0000 (16:36 -0500)]
textoverlay: Re-render if video size changed
https://bugzilla.gnome.org/show_bug.cgi?id=745554
Arun Raghavan [Tue, 3 Mar 2015 17:26:37 +0000 (22:56 +0530)]
audiobasesink: Reset audio clock if necessary
When the ringbuffer is deactivated and then acquired, if the audio clock
provided by the sink gets reset to zero, we need to add an offset to the
clock to make sure that subsequent samples are written out at the right
times. While we need to leave this to derived classes to take care of
when they provide their own clock (since that clock may or may not be
reset to zero), we can do this ourselves if we know the provided clock
is our own (which does reset to zero on a re-acquire).
Wim Taymans [Mon, 2 Mar 2015 15:42:23 +0000 (16:42 +0100)]
video-converter: avoid making scalers for outsize == 0
Wim Taymans [Mon, 2 Mar 2015 15:33:09 +0000 (16:33 +0100)]
video-converter: v-resample enough pixels
When we are using the fast linear resampler, use the ->inc to calculate
the first and last pixel we need so that we can do vertical resampling
on the right amount of pixels.
Wim Taymans [Mon, 2 Mar 2015 14:07:34 +0000 (15:07 +0100)]
video-orc: fix unpack functions for RGB/RGB15 on BE
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=745337
Wim Taymans [Mon, 2 Mar 2015 12:27:23 +0000 (13:27 +0100)]
video-format: more fixes for big endian
Wim Taymans [Mon, 2 Mar 2015 11:26:23 +0000 (12:26 +0100)]
video-format: add big-endian versions of RGB/BGR 15/16 pack/unpack
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=745337
Tim-Philipp Müller [Sat, 28 Feb 2015 13:31:41 +0000 (13:31 +0000)]
gst-play: fix compiler warning
‘return’ with no value, in function returning non-void
Tim-Philipp Müller [Sat, 28 Feb 2015 12:26:21 +0000 (12:26 +0000)]
gst-play: add keyboard shortcut to cycle through trick modes
Make "t" activate trick modes and cycle through the various
modes.
Tim-Philipp Müller [Sat, 28 Feb 2015 11:37:27 +0000 (11:37 +0000)]
gst-play: fix indentation
Prevent gst-indent from messing up indentation, it
really doesn't like the G_GNUC_PRINTF thing here.
Tim-Philipp Müller [Fri, 27 Feb 2015 20:22:59 +0000 (20:22 +0000)]
tests: fix crashes in {audio,video}{decoder,encoder} tests on 32-bit
Don't feed 64-bit integer variable into vararg function that expects
an unsigned integer to go with GST_TAG_TRACK_NUMBER. This would
cause crashes on 32-bit platforms, and if not that then test
failures if the comparisons fail later (at least on big endian
platforms).
Olivier Crête [Fri, 27 Feb 2015 20:07:36 +0000 (15:07 -0500)]
pbutils: description: Make static strings static
Otherwise, they're not guaranteed to still be valid when leaving the scope.
https://bugzilla.gnome.org/show_bug.cgi?id=673976
Tim-Philipp Müller [Fri, 27 Feb 2015 14:28:35 +0000 (14:28 +0000)]
tests: pbutils: more checking of returned description strings
https://bugzilla.gnome.org/show_bug.cgi?id=673976
Arun Raghavan [Thu, 26 Feb 2015 19:06:43 +0000 (00:36 +0530)]
adder: Drop custom latency querying logic
The default latency query handler now implements the same logic already.
Luis de Bethencourt [Thu, 26 Feb 2015 14:47:28 +0000 (14:47 +0000)]
video-converter: remove check for below zero for unsigned int
CLAMP checks both if value is '< 0' and '> max'. Value will never be a negative
number since it in an unsigned integer. Removing that check and only checking
if it is bigger than max and setting it appropriately.
CID #1271606
Edward Hervey [Thu, 26 Feb 2015 11:06:23 +0000 (12:06 +0100)]
playback: Fix broken GList modification
When we modify a GList (via g_list_delete_link), always reassign the
new head to the original GList. Otherwise we end up with
filtered_errors being corrupt (the head might have been the element
removed)
Tim-Philipp Müller [Thu, 26 Feb 2015 11:06:35 +0000 (11:06 +0000)]
gst-play: add new keyboard shortcuts to man page
Tim-Philipp Müller [Thu, 26 Feb 2015 10:57:56 +0000 (10:57 +0000)]
gst-play: more fine-grained playback rate control
Use smaller steps for lower rates to allow more
fine-grained control. Handle jump across 0 properly
from both sides (just flip direction where we would
have gone down to 0 instead). Don't artificially
limit rates to +/- 10x. Print new rate.
https://bugzilla.gnome.org/show_bug.cgi?id=745174
Tim-Philipp Müller [Thu, 26 Feb 2015 10:20:20 +0000 (10:20 +0000)]
gst-play: stash current playback rate in app structure
https://bugzilla.gnome.org/show_bug.cgi?id=745174
Víctor Manuel Jáquez Leal [Wed, 25 Feb 2015 17:52:11 +0000 (18:52 +0100)]
gst-play: support changing the playback rate in interactive mode
It is fun to have this feature, also it is useful for testing decoders.
https://bugzilla.gnome.org/show_bug.cgi?id=745174
Wim Taymans [Wed, 25 Feb 2015 16:00:34 +0000 (17:00 +0100)]
video-converter: we can use the scaler without scalers to copy
Wim Taymans [Wed, 25 Feb 2015 15:50:02 +0000 (16:50 +0100)]
video-converter: only make a scaler when we are scaling
Only make a scaler when we are actually doing any scaling. Without
scalers, the scale function will simply do a copy.
Wim Taymans [Wed, 25 Feb 2015 15:49:20 +0000 (16:49 +0100)]
video-scaler: add support for copy
When no scalers are given, simply do a copy of the requested area.
Wim Taymans [Wed, 25 Feb 2015 15:15:52 +0000 (16:15 +0100)]
video-converter: activate scaler fastpath depending on method
Only activate the scaler fastpath for x2 up and downscale when the
scaler method is respectively nearest and linear because that is what
those fastpaths really implement.
Wim Taymans [Wed, 25 Feb 2015 14:33:26 +0000 (15:33 +0100)]
video-scaler: add scaler optimization
If we are vertically downscaling, it is better to first downscale and
then do the horizontal scaling in most cases.
Wim Taymans [Wed, 25 Feb 2015 14:32:57 +0000 (15:32 +0100)]
video-scaler: remove unused case
Wim Taymans [Wed, 25 Feb 2015 10:38:17 +0000 (11:38 +0100)]
video-converter: don't overwrite border alpha
Let border alpha and image alpha be independent.
Wim Taymans [Tue, 24 Feb 2015 16:33:57 +0000 (17:33 +0100)]
video-converter: use 1.0 as default alpha
Wim Taymans [Tue, 24 Feb 2015 16:26:31 +0000 (17:26 +0100)]
video-converter: add alpha handling
Add support for alpha. Make it possible to copy, set and multiply the
alpha value of a frame during conversion.
Set the border alpha to 0xff by default.
Go over some of the fastpaths and add alpha handling.
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=745006
Wim Taymans [Tue, 24 Feb 2015 16:20:53 +0000 (17:20 +0100)]
video-converter: fix chroma subsampling
Also adjust the output line number with the offset.
Wim Taymans [Tue, 24 Feb 2015 09:01:18 +0000 (10:01 +0100)]
video-converter: disable fastpath when scaling and gamma
Disable the fastpath when scaling and doing gamma remap.
Wim Taymans [Tue, 24 Feb 2015 08:54:18 +0000 (09:54 +0100)]
video-converter: don't do gamma on alpha channel
The alpha channel is not supposed to be gamma encoded.
Vincent Penquerc'h [Tue, 24 Feb 2015 16:06:08 +0000 (16:06 +0000)]
decodebin: fix deadlock when resetting buffering
This function is static, and only ever called with the expose lock
taken. It thus has no reason to take this lock itself.
This was introduced by one of my locking fixes from 741355.
https://bugzilla.gnome.org/show_bug.cgi?id=741355
Tim-Philipp Müller [Tue, 24 Feb 2015 12:38:10 +0000 (12:38 +0000)]
video-converter: minor docs fix
Vincent Penquerc'h [Tue, 27 May 2014 13:54:06 +0000 (13:54 +0000)]
playbin: forward template and ring buffer settings to existing decodebins
https://bugzilla.gnome.org/show_bug.cgi?id=744844
Luis de Bethencourt [Mon, 23 Feb 2015 17:24:52 +0000 (17:24 +0000)]
decodebin: move null check
Check if dbin->decode_chain is NULL before running drain_and_switch_chains()
because if it is, we shouldn't run that function or it will segfault.
CID #1271074
Jan Schmidt [Sun, 22 Feb 2015 14:32:14 +0000 (01:32 +1100)]
audiodecoder: Don't send pending events before decode
Make sure to update the output segment to track the segment
we're decoding in, but don't actually push it downstream until
after buffers are decoded.
https://bugzilla.gnome.org/show_bug.cgi?id=744806
Jan Schmidt [Sat, 7 Feb 2015 18:19:25 +0000 (05:19 +1100)]
videodecoder: Add drain() vfunc
drain() is a new vfunc which does what finish() does, while
explicitly requiring the decoder be able to continue processing
data afterward.
https://bugzilla.gnome.org/show_bug.cgi?id=734617
Mark Nauwelaerts [Sun, 22 Feb 2015 15:57:57 +0000 (16:57 +0100)]
Revert "videodecoder: drain current segment upon new one to ensure correct flow return"
This reverts commit
cc1b4eaf9ebe4568f9c2c64338cef1b2edbdca3f.
See https://bugzilla.gnome.org/show_bug.cgi?id=734617
Mark Nauwelaerts [Sun, 22 Feb 2015 15:57:50 +0000 (16:57 +0100)]
Revert "audiodecoder: drain current segment upon new one to ensure correct flow return"
This reverts commit
696b8cdc40f033ff0a45ebe620279130152fb2f8.
See https://bugzilla.gnome.org/show_bug.cgi?id=734617
Mark Nauwelaerts [Sat, 21 Feb 2015 16:42:08 +0000 (17:42 +0100)]
videodecoder: drain current segment upon new one to ensure correct flow return
See also https://bugzilla.gnome.org/show_bug.cgi?id=709224
Mark Nauwelaerts [Sat, 21 Feb 2015 16:41:50 +0000 (17:41 +0100)]
audiodecoder: drain current segment upon new one to ensure correct flow return
See also https://bugzilla.gnome.org/show_bug.cgi?id=709224
Sebastian Dröge [Fri, 20 Feb 2015 10:34:11 +0000 (12:34 +0200)]
decodebin: Only consider non-parser factories for generating the post-parser capsfilter caps
Otherwise if there are multiple parsers we would most likely break negotiation
of the stream-format/alignment wanted by the decoders as parsers generally
support all possible stream-formats and alignments.
Thiago Santos [Thu, 19 Feb 2015 18:51:19 +0000 (15:51 -0300)]
audio: video: fix a few GI annotations
transfer-full -> transfer full
@Since -> Since
Vincent Penquerc'h [Thu, 5 Feb 2015 12:07:50 +0000 (12:07 +0000)]
decodebin: fix deadlock between downward state change and pad addition
If caps on a newly added pad are NULL, analyze_new_pad will try to
acquire the chain lock to add a probe to the pad so the chain can
be built later. This comes from the streaming thread, in response
to headers or other buffers causing this pad to be added, so the
stream lock is taken.
Meanwhile, another thread might be destroying the chain from a
downward state change. This will cause the chain to be freed with
the chain lock taken, and some elements are set to NULL here, which
can include the parser. This causes pad deactivation, which tries
to take the element's pad's stream lock, deadlocking.
Fix this by keeping track of which elements need setting to NULL,
and only do this after the chain lock is released. Only the chain
manipulation needs to be locked, not the elements' state changes.
https://bugzilla.gnome.org/show_bug.cgi?id=741355
Vincent Penquerc'h [Wed, 4 Feb 2015 11:46:09 +0000 (11:46 +0000)]
decodebin: guard against the decode chain going while a pad is added
https://bugzilla.gnome.org/show_bug.cgi?id=741355
Vincent Penquerc'h [Tue, 3 Feb 2015 17:06:43 +0000 (17:06 +0000)]
decodebin: possible fix for deadlock when spamming "next song"
There was a deadlock between a thread changing decodebin/demuxer
state from PAUSED to READY, and another thread pushing data
when starting.
From the stack trace at
https://bug741355.bugzilla-attachments.gnome.org/attachment.cgi?id=292471,
I deduce the following is happening, though I did not reproduce the
problem so I'm not sure this patch fixes it.
The streaming thread (thread 2 in that stack trace) takes the demuxer's
sink pad's stream lock in gst_ogg_demux_perform_seek_pull and will
activate a new chain. This ends up causing the expose lock being taken
in _pad_added_cb in decodebin.
Meanwhile, a state changed is triggered on thread 1, which takes the
expose lock in decodebin in gst_decode_bin_change_state, then frees
the previous chain, which ends up calling gst_pad_stop_task on the
demuxer's task, which in turn takes the demuxer's sink pad's stream
lock, deadlocking as both threads are now waiting for each other.
https://bugzilla.gnome.org/show_bug.cgi?id=741355
Thiago Santos [Wed, 18 Feb 2015 23:58:15 +0000 (20:58 -0300)]
tagdemux: ensure tags have been fetched before pulling data
Otherwise upstream can get confused about offsets as there will
be a jump once the tags have been parsed due to the stripped area.
If upstream pulls from 0 to 100, and then tagdemux does the
tag reading and finds out that the first 200 bytes are the tag, the
next pull from upstream will have an offset of 200 bytes. So
upstream will get the following data:
0 - 100, 300 - (EOS), as it will continue requesting from where
it has last stopped, but tagdemux will add an offset to skip the
tags.
This patch makes sure that the tags have been parsed and skipped
since the first pull range call.
https://bugzilla.gnome.org/show_bug.cgi?id=744580
Sebastian Dröge [Wed, 18 Feb 2015 23:30:05 +0000 (01:30 +0200)]
uridecodebin: Reset the default query return value when the iterator has to resync
Sebastian Dröge [Wed, 18 Feb 2015 23:21:47 +0000 (01:21 +0200)]
uridecodebin: Let the latency query fail if one of the source queries fails
Tim-Philipp Müller [Wed, 18 Feb 2015 11:34:15 +0000 (11:34 +0000)]
pbutils: description: fix MPEG-2 video profiles in description
We would accidentally use the profile nick as profile name
in the description for MPEG video that's not version 4.
Olivier Crête [Thu, 29 Jan 2015 23:49:45 +0000 (18:49 -0500)]
uridecodebin: Pass object, not GValue to debug print
Tim-Philipp Müller [Mon, 16 Feb 2015 23:54:28 +0000 (23:54 +0000)]
audiovisualizer: don't use private GMutex implementation details
Don't use private GMutex implementation details to check
whether it has been freed already or not. Just turn dispose
function into finalize function which will only be called
once, that way we can just clear the mutex unconditionally.
Song Bing [Sun, 15 Feb 2015 05:51:36 +0000 (13:51 +0800)]
streamsynchronizer: Use the same waiting function for EOS and stream switches
Also improve the waiting condition for stream switches, which was assuming
before that the condition variable will only stop waiting once when it is
signaled. But the documentation says that there might be spurious wakeups.
https://bugzilla.gnome.org/show_bug.cgi?id=736655
Song Bing [Mon, 26 Jan 2015 03:14:13 +0000 (11:14 +0800)]
streamsynchronizer: Unit test for streamsynchronizer's EOS handling
Test that a pipeline can change from PLAYING to PAUSED and back in
the following scenarios:
1. One track reach EOS after pushed some buffers while another track
still pushes buffers
2. One track reach EOS without buffers while another track still pushes
buffers
https://bugzilla.gnome.org/show_bug.cgi?id=736655
Song Bing [Mon, 12 Jan 2015 09:40:25 +0000 (17:40 +0800)]
streamsynchronizer: Send GAP events from the pads' streaming threads
Change the GAP events that are currently sent from the chain function of
the current pad to all other EOS pads. They should instead be sent from
their own streaming threads.
https://bugzilla.gnome.org/show_bug.cgi?id=736655
Song Bing [Mon, 12 Jan 2015 08:08:33 +0000 (16:08 +0800)]
streamsynchronizer: Send GAP event to finish preroll when change state from PLAYING to PAUSED
Wait in the event function when EOS is received until all pads are EOS
and then forward the EOS event from each pads own event function.
Also send a new GAP event for EOS pads from the event function whenever
going from PLAYING->PAUSED by shortly waking up the GCond. This is needed
to allow sinks to pre-roll again, as they did not receive EOS yet because
we blocked that, but also will never get data again.
https://bugzilla.gnome.org/show_bug.cgi?id=736655