Commit graph

17587 commits

Author SHA1 Message Date
Nicolas Dufresne
b3e089d415 v4l2src: Speedup camera startup by skipping try_fmt
In this commit, we enabled skip_try_fmt_probes quirk in order to speed
up the start which is known to be disastrously slow with certain USB
cameras.

This has the side effect that we needed to rewrite the entire
negotiation process in a way that we iterate over the possible caps
until we find one that works.

The new negotiation method consist of extracting a preferred structure
from the peer caps and using this to fixate and sort the caps. To
reflect the old behaviour, we sort all resolution strictly bigger
to the preferred one with the closes one first. The rest is appended,
keeping the same order. We then normalize the caps in case there was
some list of interlace-mode or colorimetry left. We finally iterate
over all fixed caps and try it. 99% of the time, the first or the
second one should work, whit the result of a single S_FMT being issues.

From there, it will be relatively easy to introduce new negotiation
algorithm. The current algorithm is made for optimal image quality
with a scaling sink that sets it's window resolution as preference.
This the case if for:

  v4l2src ! videoconvert ! videoscale ! ximagesink

Other strategy would be needed to optimize for non-scaling sink like
ximagesink or kmssink when the driver does not scale.

https://bugzilla.gnome.org/show_bug.cgi?id=785156
2017-07-21 15:29:10 -04:00
Nicolas Dufresne
cae0b9a2d2 v4l2object: Introduce quirk to skip slow probes
skip_try_fmt_probes quirk is set, V4L2 object will not probe for
interlace-mode and colorimetry to avoid relying on try_fmt. This quirk
will be used by v4l2src to avoid desastrous startup time with slow
USB webcams.

When this quirk is enabled, caller will have to iterate over the
negotiated caps as it may contains unsupported formats. If the peer
didn't choose a specific interlace-mode, or colorimetry, the value
chosen by the driver is set into the caps. For this reason, when this
mode is enabled, gst_v4l2_object_set_format() will require writable
caps.

https://bugzilla.gnome.org/show_bug.cgi?id=785156
2017-07-21 15:29:10 -04:00
Nicolas Dufresne
7d3b2628df v4l2object: always set the GstV4l2Error on error
Some of the error case were conditional to using try_fmt or not.
This is slightly unexpected, always set the error so the caller
can decide.

https://bugzilla.gnome.org/show_bug.cgi?id=785156
2017-07-21 15:29:10 -04:00
Nicolas Dufresne
059ccf9749 v4l2object: Minor style fix and useful trace
https://bugzilla.gnome.org/show_bug.cgi?id=785156
2017-07-21 15:29:10 -04:00
Nicolas Dufresne
c00d4cae3c v4l2object: Fix try/s_fmt errors
According to the spec,TRY_FMT cannot return EBUSY, though it can
return EINVAL if it was not possible to update the format to
something supported.

https://bugzilla.gnome.org/show_bug.cgi?id=785156
2017-07-21 15:29:10 -04:00
Nicolas Dufresne
558e9f4e57 v4l2object: Validate colorimetry in S/TRY_FMT
This is in preparation for removing slow TRY_FMT probes for
colorimetry. As we won't have tried that colorimetry we cannot
assume the driver will accept it.

https://bugzilla.gnome.org/show_bug.cgi?id=785156
2017-07-21 15:29:10 -04:00
Nicolas Dufresne
336c8a7dad v4l2object: Validate field in S/TRY_FMT
This is in preparation from removing the slow TRY_FMT probes for
interlacing. As we won't have tried that interlace-mode already
we need to validate that the driver isn't refusing it.

https://bugzilla.gnome.org/show_bug.cgi?id=785156
2017-07-21 15:29:10 -04:00
Tim-Philipp Müller
81e5b0bdee tests: icles: fix build
Can't do additions/subtractions on void* pointers.
2017-07-21 19:02:26 +01:00
Thibault Saunier
b028d91439 tests:icles: Fix previous patch by implementing our memmem
Using the string version of it will fail on '\0'.
2017-07-21 11:10:00 -04:00
Thibault Saunier
7e8fe2844b tests:icles: Do not use memmem GNU extension function
As it is not avalaible on windows/msvc and we can use pure GLib for that
2017-07-21 10:19:37 -04:00
Nicolas Dufresne
a3545637de directsound: Fix .c file name in Makefile
This was broken by accident, bad search and replace.
2017-07-20 17:21:05 -04:00
Nicolas Dufresne
7edf41b470 waveform: Fix DLL name to match plugin name
https://bugzilla.gnome.org/show_bug.cgi?id=785168
2017-07-20 15:46:38 -04:00
Nicolas Dufresne
608abe4a7f directsound: Fix DLL name to match plugin name
https://bugzilla.gnome.org/show_bug.cgi?id=785168
2017-07-20 15:46:38 -04:00
Mark Nauwelaerts
7bd439efb5 qtdemux: preferably send open-ended segment rather than repeated segment events 2017-07-19 18:35:58 +02:00
Mark Nauwelaerts
854f85acb4 qtdemux: fix seeking in fragmented file without mfra random access info
... which no longer worked due to unconditionally clearing sample info and
ending up in inconsistent state.  Let's tread a bit more carefully and also
allow for the old seek handling that resorts to scanning if no mfra info
is available.
2017-07-19 18:35:49 +02:00
Nicolas Dechesne
52c017caca v4l2videodec: add some useful debug messages
Add a couple of useful debug traces , they happened to be useful to
debug/investigate a 4K video playback issue with v4l2, so let's make these
changes more permanent.

Signed-off-by: Nicolas Dechesne <nicolas.dechesne@linaro.org>

https://bugzilla.gnome.org/show_bug.cgi?id=785109
2017-07-19 10:25:11 -04:00
Nicolas Dufresne
6d0a9abdf0 v4l2: Fix 4K colorimetry
Since 1.6, the transfer function for BT2020 has been changed from BT709
to BT2020_12. It's the same function, but with more precision. As a side
effect, the V4L2 colorpsace didn't match GStreamer colorspace. When
GStreamer ended up making a guess, it would not match anything supported
by V4L2 anymore. This this by using BT2020_12 for BT2020 colorspace and
BT2020 transfer function in replacement of BT709 whenever a 4K
resolution is detected.
2017-07-18 12:03:17 -04:00
Nicolas Dufresne
08643993df v4l2object: Only check CROPCAP for par once
The pixel aspect ratio is documented to not change unless the TV
Standard is changed. So this mean that this will be uniform across all
possible format and resolutions.

https://bugzilla.gnome.org/show_bug.cgi?id=784674
2017-07-18 12:03:17 -04:00
Sebastian Dröge
7e718d6039 Revert "matroskamux: adjust unit test to modified behaviour"
This reverts commit 8fe478c8a7.

We're back to previous behaviour
2017-07-18 10:08:33 +03:00
Nicola Murino
1bbdfa8738 matroskamux: add properties to control cluster duration
https://bugzilla.gnome.org/show_bug.cgi?id=784971
2017-07-18 10:08:33 +03:00
Nicolas Dufresne
a6d224521e v4l2: UVC driver is named uvcvideo these days
The quirk to avoid probing interlacing didn't work anymore as the driver
is now name uvcvideo. This should slightly speed up camera startup.
2017-07-17 20:48:28 -04:00
Nicolas Dufresne
83cb5ef957 v4l2object: Remove unused defines 2017-07-17 20:48:28 -04:00
Nicolas Dufresne
9b9cba3798 v4l2: Make gst_v4l2_get_capabilities static
It's not used outside of v4l2_calls.c
2017-07-17 20:48:28 -04:00
Nicolas Dufresne
bec03858fa v4l2: Merge v4l2_calls.h into gstv4l2object.h
First step of a larger cleanup, all function from v4l2_calls are in fact
methods on GstV4l2Object. This split makes the code really confusing.
This also remove no longer unused macros.
2017-07-17 20:48:28 -04:00
Tim-Philipp Müller
e0714f67b3 mpg123audiodec: fix caps leak
The pad template takes its own ref, so we should unref the caps.

https://bugzilla.gnome.org/show_bug.cgi?id=784982
2017-07-15 14:57:49 +01:00
Tim-Philipp Müller
dac2862e06 meson: po: use glib preset and read language list from LINGUAS
Supported since meson 0.37, so we can use it now.
2017-07-15 12:48:19 +01:00
Nicolas Dufresne
3bbd43f7eb v4l2object: Trace unknown fourcc as text
This makes it easier to find out what is not supported.
2017-07-14 13:31:30 -04:00
Nicolas Dufresne
06424c438e v4l2: Don't probe for unneeded format
For v4l2videodec/enc, we generate elements per formats, and in
this case we can speed up the start up by only probing the format
we care about.
2017-07-14 13:31:30 -04:00
Nicolas Dufresne
724a3ceec5 v4l2videodec: Implement stable element names
Before that, each m2m node would be wrapped as a single, multi-format
decoder element. As a unique name was needed, we where using the device
name, which changes between re-boots. This led to unpredictable element
names. In this patch, we generate an element per codec, using
v4l2<codec>dec name. If there is multiple decoder for the same format,
the following elements will be named v4l2<node><codec>dec.

https://bugzilla.gnome.org/show_bug.cgi?id=784908
2017-07-14 13:31:30 -04:00
Sebastian Dröge
d0dfbb04c0 souphttpsrc: Post an element message with the HTTP headers on the bus too
Instead of just sending a sticky event with them downstream. This allows
getting the HTTP headers easily in the application, and especially also
on errors.
2017-07-13 14:50:44 +03:00
Sebastian Dröge
c0318f3d60 qtdemux: Fix parsing of RLE depth
Regression introduced by 86b427dc70

https://bugzilla.gnome.org/show_bug.cgi?id=784812
2017-07-13 12:47:27 +03:00
Jan Schmidt
ac068bd2b9 qt: Use a proxy object for access to the QML widget
QML can destroy the video widget at any time, leaving
us with a dangling pointer. Use a lock and a proxy
object to cope with that, and block in the widget
destructor if there are ongoing calls into the widget.
2017-07-12 15:51:11 +10:00
Philippe Renon
c8204780b2 shout2: use gint and guint in place of int and uint
this fixes a compilation error with gcc 7.1.0 on mys2 where uint is not defined

https://bugzilla.gnome.org/show_bug.cgi?id=784758
2017-07-11 09:26:35 +03:00
Yasushi SHOJI
c7f42cc3bc rtpgsmpay: fix accidental garbage data before actual payload
Do not allocate payload size outbuf if appending payload buffer.

The commit 137672ff18 attached payload
to the output buffer but forgot to remove payload allocation.  That
effectively doubled payload size and add zero'ed or random bytes.

Makes the following pipeline work again:

gst-launch-1.0 -v audiotestsrc wave=2 ! gsmenc ! rtpgsmpay ! rtpgsmdepay ! gsmdec ! autoaudiosink

https://bugzilla.gnome.org/show_bug.cgi?id=784616
2017-07-09 13:21:23 +01:00
Mark Nauwelaerts
286df32e03 matroskademux: segment seek position is expressed in buffer time
... so it need not be corrected again for stream start
2017-07-09 10:55:00 +02:00
Mark Nauwelaerts
dad2b41e4d avidemux: provide average bitrate tag 2017-07-09 10:55:00 +02:00
Reynaldo H. Verdejo Pinochet
3cfec119b1 examples: v4l2: fix wrong initializations brought by 4e8ad58302
https://bugzilla.gnome.org/show_bug.cgi?id=682770
2017-07-07 23:53:01 -07:00
Nicolas Dufresne
4e8ad58302 examples: v4l2: add example for v4l2src renegotiation
Based on work from Thiago Santos <thiagoss@osg.samsung.com>

https://bugzilla.gnome.org/show_bug.cgi?id=682770
2017-07-07 17:19:17 -04:00
Tim-Philipp Müller
ad0dd78b1b meson: find python3 via python3 module
https://bugzilla.gnome.org/show_bug.cgi?id=783198
2017-07-07 11:58:10 +01:00
Tim-Philipp Müller
e5f3e2268d tests: rtpbin: fix build in uninstalled setup 2017-07-05 14:44:41 +01:00
Olivier Crête
96e71b0286 rtpsession: Send EOS if all internal sources sent bye
The ones which are not internal should not matter, and we should
wait for all sources to have sent their BYEs.

And add unit test

https://bugzilla.gnome.org/show_bug.cgi?id=773218
2017-07-04 21:14:10 -04:00
Olivier Crête
7e7e52caa0 rtpsession: Only send EOS if all sources have been marked bye
Now that multiple sender RTPSource can share the same RTPSession, we
must not send an EOS unless they're all marked bye.
2017-07-04 13:36:44 -04:00
Thibault Saunier
0444342c05 caca: Do not include, unused, sys/time.h
Which moreover makes building on windows (mingw/msvc) fail:
 https://ci.appveyor.com/project/thiblahute/gst-build-ge9m5
2017-07-04 11:51:47 -04:00
Nicolas Dufresne
bf5cbce3b4 rtprtxreceive: Add memory and boudary checks
This element was not checking if mapping the RTP buffer and the payload
worked, and was not checking if the RTX payload was large enough.

https://bugzilla.gnome.org/show_bug.cgi?id=784484
2017-07-04 09:58:15 -04:00
Seungha Yang
b0f09d4ad0 souphttpsrc: Unset limit on the number of connection if soup session sharing is used
Soup allows only up to two connections per host in a session,
if we use default value. When session sharing is used, however,
more connections might be required in a session.
(e.g., multi-audio adaptive streaming case)

https://bugzilla.gnome.org/show_bug.cgi?id=784495
2017-07-04 09:13:12 +03:00
Tim-Philipp Müller
d712a2f4b7 imagefreeze: fix use-after-free on seek event
Get seqnum before unreffing the seek event.

https://bugzilla.gnome.org/show_bug.cgi?id=784486
2017-07-03 20:43:12 +01:00
Mark Nauwelaerts
f9f1a03653 qtmux: robustify time tracking for sparse subtitle stream 2017-07-01 18:59:14 +02:00
Mark Nauwelaerts
d1d149ce82 qtmux: correctly track chunk size of subtitle stream
... thereby ensuring correct chunk offset tracking for all streams.
2017-07-01 18:59:07 +02:00
Julien Isorce
afbabaefbe rtpstats: fix assertion 'denom > 0' failed
gst_util_uint64_scale_int takes a gint as denom parameter
whereas ctx->clock_rate is a guint32.

It happens when gst_rtp_packet_rate_ctx_reset set clock_rate
to -1.

So just define clock_rate as gint like it is done in rtpsource.h

https://bugzilla.gnome.org/show_bug.cgi?id=784250
2017-06-29 15:58:44 -04:00
Matt Fischer
52a5658030 v4l2: Block recursive calls to resurect_buffer
When resurrecting a buffer, the subsequent free call can result
in the group-released handler being called again, which causes
a recursive loop.  This patch blocks the signal handler during
the time that it executes, ensuring that the loop will not occur.

https://bugzilla.gnome.org/show_bug.cgi?id=759292
2017-06-29 15:54:42 -04:00