platform/upstream/gst-plugins-good.git
5 years agov4l2videodec: Protect double calls to set_format()
Nicolas Dufresne [Mon, 9 Jul 2018 17:59:02 +0000 (13:59 -0400)]
v4l2videodec: Protect double calls to set_format()

In some cases, set_format() may get called twice before the output
format is set. Running an allocation query in this case is both not
needed and will cause assertion due tot he NULL caps.

5 years agoscaletempo: Mark as Audio in classification
Thibault Saunier [Mon, 9 Jul 2018 00:08:18 +0000 (20:08 -0400)]
scaletempo: Mark as Audio in classification

5 years agoqtdemux: Store and propagate SEGMENT sequence numbers
Edward Hervey [Fri, 6 Jul 2018 13:21:33 +0000 (15:21 +0200)]
qtdemux: Store and propagate SEGMENT sequence numbers

* When receiving a segment in TIME, use that seqnum
* Only reset the stored sequence number when doing HARD reset
  (and not when we get a FLUSH event from upstream)

5 years agov4l2transform: Implement stable element name
Michael Tretter [Sun, 1 Jul 2018 19:27:32 +0000 (15:27 -0400)]
v4l2transform: Implement stable element name

The first converter to be found will now gain the name v4l2convert.
Other converters will be named after the m2m dev node end point they are
attached to.

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

5 years agomatroskademux: Set subtitle tag title from TrackName field
Philippe Normand [Wed, 13 Jun 2018 16:39:57 +0000 (17:39 +0100)]
matroskademux: Set subtitle tag title from TrackName field

GUI applications can then use the title tag to set menu items or labels
representing the track.

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

5 years agov4l2videoenc: Only renegotiate with upstream
Nicolas Dufresne [Thu, 28 Jun 2018 23:08:35 +0000 (19:08 -0400)]
v4l2videoenc: Only renegotiate with upstream

When the decoder get linked further, it will receive a renegotiation
event from downstream. This case is not supported and should be ignored.

This fixes issues when this encoder is used inside an GstRtspServer
pipeline.

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

5 years agoqtdemux: rework segment event pushing, again
Alicia Boya García [Sat, 9 Jun 2018 21:58:01 +0000 (23:58 +0200)]
qtdemux: rework segment event pushing, again

This patch aims at fixing the recent regressions in the adaptive test
suite.

All segment pushing in push mode is now done with
gst_qtdemux_check_send_pending_segment(), which is idempotent and
handles both edit lists cases and cases where the upstream TIME segments
have to be sent directly.

Fragmented files that start with a non-zero tfdt are also taken into
account, but their handling has been vastly simplified: now they are
handled as implicit default seeks so there is no need to extend the
GstSegment formulas as was being done before.

qtdemux->segment.duration is no longer modified when
upstream_format_is_time, respecting in this way the durations provided
by dashdemux and fixing bugs in reverse playback tests where mangled
durations appeared in the emitted segments.

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

5 years agoqtdemux: Don't send EOS during upstream reverse playback
Alicia Boya García [Sun, 17 Jun 2018 00:01:59 +0000 (02:01 +0200)]
qtdemux: Don't send EOS during upstream reverse playback

Upstream driving elements such as dashdemux often do reverse playback by
feeding qtdemux with the fragments containing the requested playback
range in reverse order.

But the requested playback range stop may be somewhere in the
middle of a fragment. In that case, a naive pts >= segment.stop
condition may declare end of segment prematurely when demuxing this
first fragment.

This used not to happen because there were places in moov parsing where
segment.stop was overwritten to GST_CLOCK_TIME_NONE even if
upstream_format_is_time -- resulting in this case in a segment with rate
< 0 and stop == -1 and hence not triggering the EOS check, but that was
likely an accident.

This patch modifies the EOS check to take this case into account, not
sending EOS when upstream_format_is_time if rate < 0.

This fixes adaptive.dash.playback.seek_end_live.DASHIF_livestream_testpic_2s

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

5 years agov4l2transform: fold property set/get PROP_OUTPUT_IO_MODE case into default
Peter Seiderer [Tue, 6 Feb 2018 12:51:14 +0000 (13:51 +0100)]
v4l2transform: fold property set/get PROP_OUTPUT_IO_MODE case into default

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

5 years agov4l2videoenc: Don't set colorimetry on capture
Nicolas Dufresne [Fri, 22 Jun 2018 14:56:31 +0000 (14:56 +0000)]
v4l2videoenc: Don't set colorimetry on capture

The colorimetry will be set along with the raw format and those fields
will then be copied from sink to src caps by the gst encoder.

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

5 years agov4l2object: Really always set colorimetry
Nicolas Dufresne [Wed, 27 Jun 2018 20:57:29 +0000 (16:57 -0400)]
v4l2object: Really always set colorimetry

This fixes patch dd1c5aed656e07e3dad01f83410f3af16cfb14cf which
pretended to always set colorimetry but the patch was incomplete.
This is again best effort considering the spec says that for CAPTURE
you may only read this value.

5 years agov4l2videodec: do not call streamon while pool is flushing
Michael Tretter [Tue, 26 Jun 2018 13:04:39 +0000 (15:04 +0200)]
v4l2videodec: do not call streamon while pool is flushing

gst_v4l2_buffer_pool_flush() executes streamoff for the output, but
streamoff->streamon for the capture of the decoder.
gst_v4l2_buffer_pool_streamon() on capture assumes that is able to
resurrect the buffers from the pool, but acquiring buffers fails if the
buffer pool is still flushing.

The decoder needs to stop flushing the pools before calling
gst_v4l2_buffer_pool_flush() to restart the v4l2 device. Otherwise
starting the decoding thread might fail, because there are no buffers in
the capture pool.

This fixes a regression that was introduced in 97985a335c78
("v4l2videodec: Add dynamic resolution change support").

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

5 years agov4l2object: use S_SELECTION instead of S_CROP in gst_v4l2_object_set_crop
Philipp Zabel [Mon, 25 Jun 2018 14:03:17 +0000 (16:03 +0200)]
v4l2object: use S_SELECTION instead of S_CROP in gst_v4l2_object_set_crop

The S_CROP call doesn't work on mem2mem output queues. Use the
S_SELECTION call to set the crop rectangle and only fall back to
S_CROP for ancient kernels.
This will allow v4l2videoenc to set the coded size on the output
queue via S_FMT and then set the visible size via the crop rectangle,
as required by the V4L2 codec API.

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

5 years agov4l2videoenc: activate capture pool after output pool
Marian Mihailescu [Wed, 27 Jun 2018 13:46:00 +0000 (13:46 +0000)]
v4l2videoenc: activate capture pool after output pool

Some drivers need output buffers set before capture buffers.
CODA cannot set output format if capture is streaming.
Exynos MFC fails on output STREAMON if capture is already streaming.
This patch delays capture activation until output is configured and
streaming

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

5 years agoUpdate for g_type_class_add_private() deprecation in recent GLib
Tim-Philipp Müller [Sat, 23 Jun 2018 21:44:19 +0000 (23:44 +0200)]
Update for g_type_class_add_private() deprecation in recent GLib

https://gitlab.gnome.org/GNOME/glib/merge_requests/7

5 years agosouphttpsrc: Protect input stream with lock
Edward Hervey [Wed, 20 Jun 2018 08:03:59 +0000 (10:03 +0200)]
souphttpsrc: Protect input stream with lock

This was the last remaining place where modifying/unreffing the
input stream was not protected by the lock

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

5 years agosplitmuxsrc: Make sure events are writable before setting their seqnum
Sebastian Dröge [Mon, 18 Jun 2018 09:13:48 +0000 (12:13 +0300)]
splitmuxsrc: Make sure events are writable before setting their seqnum

5 years agov4l2bufferpool: Drop truncated frames
Nicolas Dufresne [Mon, 28 May 2018 19:19:52 +0000 (15:19 -0400)]
v4l2bufferpool: Drop truncated frames

Drop truncated frames regardless if they have the ERROR flag or not.
Truncated frame causes video frame map failure in many elements
including cluttersink, glupload etc.

5 years agov4l2bufferpool: Try return input buffer soon
Nicolas Dufresne [Mon, 2 Apr 2018 16:59:33 +0000 (12:59 -0400)]
v4l2bufferpool: Try return input buffer soon

In this patch we use a non-blocking poll in order to return all input
buffers (buffers from v4l2-output queue). This prevent holding too long
on upstreaming buffer in importing.

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

5 years agoqt: also check for un-suffixed moc
Matthew Waters [Thu, 7 Jun 2018 03:56:03 +0000 (13:56 +1000)]
qt: also check for un-suffixed moc

e.g. Qt windows installer doesn't have suffixes

5 years agoqtdemux: Do not set INVALID seqnum on events
Thibault Saunier [Wed, 6 Jun 2018 15:44:33 +0000 (11:44 -0400)]
qtdemux: Do not set INVALID seqnum on events

5 years agotests: qtdemux: Add checking exposed segment event
Seungha Yang [Fri, 1 Jun 2018 13:47:10 +0000 (22:47 +0900)]
tests: qtdemux: Add checking exposed segment event

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

5 years agoqtdemux: Forward upstream time-format segment without mapping
Seungha Yang [Fri, 1 Jun 2018 12:08:10 +0000 (21:08 +0900)]
qtdemux: Forward upstream time-format segment without mapping

Sample table based segment event (genereted by qtdemux) could break
presentation timeline. For example, qtdemux should not modify upstream
time format segment (e.g., adaptivedemux use case)

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

6 years agortspsrc: Seek handling is always done with a valid event
Edward Hervey [Thu, 19 Apr 2018 06:14:47 +0000 (08:14 +0200)]
rtspsrc: Seek handling is always done with a valid event

Remove the checks

6 years agowavparse: Don't set invalid seqnum on events
Edward Hervey [Wed, 6 Jun 2018 05:46:54 +0000 (07:46 +0200)]
wavparse: Don't set invalid seqnum on events

Some codepath will call gst_wavparse_perform_seek without an event
and therefore without a valid seqnum

6 years agoqtdemux: Clarify field name about stream-encryption-system
Thibault Saunier [Fri, 25 May 2018 10:28:04 +0000 (12:28 +0200)]
qtdemux: Clarify field name about stream-encryption-system

This field is actually only informatory and the user can potentially
choose something else. EME tests in WebKit testsuite actually doesn't
take it into and force another encryption system to be used, and expects
to be given the occasion to do so.

This basically also reverts 3e063703b3a51b8aaa7f75f36c4660c583a60e93.

6 years agoqtdemux: mark segment as sent after pushing when moov is received
Thiago Santos [Mon, 28 May 2018 18:01:42 +0000 (11:01 -0700)]
qtdemux: mark segment as sent after pushing when moov is received

Otherwise we would try to send it a second time if the same moov is
received or in any other situation that might trigger segment sending.

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

6 years agotests: qtdemux: Avoid using data beyond array and improve error msg
Thiago Santos [Mon, 28 May 2018 17:59:14 +0000 (10:59 -0700)]
tests: qtdemux: Avoid using data beyond array and improve error msg

Makes it easier to debug the failures as well as prevents problems
reading out of bounds data.

6 years agov4l2object: Don't open the device in get property
Nicolas Dufresne [Thu, 17 May 2018 00:16:44 +0000 (20:16 -0400)]
v4l2object: Don't open the device in get property

This is both racy and inefficient. This function is still missing some
locking which will be address in later patch.

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

6 years agotests: rtpstorage: fix potential crashes / test failures on 32-bit
Tim-Philipp Müller [Sun, 27 May 2018 19:29:47 +0000 (20:29 +0100)]
tests: rtpstorage: fix potential crashes / test failures on 32-bit

Pass 64 bits to g_object_set() for 64-bit integer properties like
rtpstorage's "size-time" property.

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

6 years agoqtdemux: do not update segment.stop is it is not a valid time
Thiago Santos [Mon, 14 May 2018 04:59:49 +0000 (21:59 -0700)]
qtdemux: do not update segment.stop is it is not a valid time

Otherwise it overflows and starts having a meaningful and wrong value.

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

6 years agoqtdemux: offset edts segments by the min timestamp of the stream
Thiago Santos [Tue, 26 Apr 2016 19:54:30 +0000 (16:54 -0300)]
qtdemux: offset edts segments by the min timestamp of the stream

Otherwise if the stream is starting at timestamp=X it would wait
'X' to start playing.

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

6 years agoqtdemux: rework segment event pushing
Thiago Santos [Tue, 26 Apr 2016 17:34:16 +0000 (14:34 -0300)]
qtdemux: rework segment event pushing

Instead of always keeping a safe segment (start=0) event from the beginning,
delay the creation of this event to when we really know the timestamp of the
first sample. This is important to properly start fragmented streams that
we might join in the middle or to play isolated fragment files that might
have an advanced tfdt.

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

6 years agoqtdemux: Do not unref a NULL stream_tags
Thibault Saunier [Fri, 25 May 2018 08:49:21 +0000 (10:49 +0200)]
qtdemux: Do not unref a NULL stream_tags

stream->stream_tags is reset to NULL once we expose the stream and
these have been consumed, we need to check that when cleaning up
the stream.

6 years agoqtdemux: Do not run the preferred decryptor context query if no decryptor avalaible
Thibault Saunier [Fri, 25 May 2018 08:17:29 +0000 (10:17 +0200)]
qtdemux: Do not run the preferred decryptor context query if no decryptor avalaible

Ultimately this avoids a segfault as the code expect a non NULL array
here.

6 years agoqtdemux: Allow edit lists on fragmented files on push mode
Alicia Boya García [Fri, 30 Mar 2018 15:03:13 +0000 (17:03 +0200)]
qtdemux: Allow edit lists on fragmented files on push mode

Fragmented files often use elst.duration=0 which before
ee78825eaef2c5fffac7d6c5526fe18cec6b3eef was wrongly interpreted as
having no frames.

Since that issue has now been fixed, there is no reason to disable edit
lists in fragmented files. This commit enables them, therefore producing
correct stream time for files containing edit lists.

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

6 years agoqtdemux: fix computation of first_duration for fragmented files in push mode
Alicia Boya García [Thu, 24 May 2018 10:58:00 +0000 (12:58 +0200)]
qtdemux: fix computation of first_duration for fragmented files in push mode

Since ca068865c391e87932b1268d0c675be233dd2ffe the duration of the first
frame is not used for estimating the frame rate.

For this purpose, stream->first_duration was initialized with the
duration of the first frame. In fragmented files, this was previously
done by peeking the first moof, but that can only be done in pull mode.

Fortunately, we don't really need to do that, at least with the current
design: When we are estimating the frame rate we already have the
sample table, regardless of the scheduling mode and whether the file is
fragmented or not, so we can obtain first_duration there much more
reliably.

This fixes frame rate estimation for fragmented files in push mode.

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

6 years agosplitmuxsink: Added new async-finalize mode
Vivia Nikolaidou [Tue, 13 Jun 2017 14:42:55 +0000 (17:42 +0300)]
splitmuxsink: Added new async-finalize mode

This mode is useful for muxers that can take a long time to finalize a
file. Instead of blocking the whole upstream pipeline while the muxer is
doing its stuff, we can unlink it and spawn a new muxer+sink combination
to continue running normally.

This requires us to receive the muxer and sink (if needed) as factories,
optionally accompanied by their respective properties structures. Also
added the muxer-added and sink-added signals, in case custom code has to
be called for them.

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

6 years agoqtdemux: Don't send gaps bigger than 1 second (now in push mode too)
Alicia Boya García [Wed, 23 May 2018 17:00:48 +0000 (19:00 +0200)]
qtdemux: Don't send gaps bigger than 1 second (now in push mode too)

This applies the same workaround to gaps that is being used in pull
mode.

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

6 years agoqtdemux: Properly handle edit list in push mode
Seungha Yang [Wed, 23 May 2018 11:08:56 +0000 (20:08 +0900)]
qtdemux: Properly handle edit list in push mode

If there are empty segments in edit list, demux should
adjust "accumulated_base" to apply it into running time.

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

6 years agomatroska-mux: write colorimetry
Mathieu Duponchelle [Tue, 22 May 2018 20:14:03 +0000 (22:14 +0200)]
matroska-mux: write colorimetry

This is a straightforward translation of 5dd39d8, can be trivially
checked by running:

gst-launch-1.0 -v videotestsrc ! video/x-raw, colorimetry=2:4:7:1 ! \
matroskamux ! matroskademux ! fakesink

and verifying that the colorimetry is correctly preserved.

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

6 years agoqtdemux: fix buggy duration in edits with duration=0 in fragmented files without...
Alicia Boya García [Sat, 31 Mar 2018 15:19:03 +0000 (17:19 +0200)]
qtdemux: fix buggy duration in edits with duration=0 in fragmented files without a mehd

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

6 years agodocs: fix typos
Tim-Philipp Müller [Wed, 23 May 2018 12:14:27 +0000 (13:14 +0100)]
docs: fix typos

6 years agoqtdemux: Clarify variable name
Seungha Yang [Sat, 31 Mar 2018 09:42:47 +0000 (18:42 +0900)]
qtdemux: Clarify variable name

As defined by spec, use "empty edit". It's more straightforward.

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

6 years agoqtdemux: add context for a preferred protection
Xabier Rodriguez Calvar [Wed, 21 Jun 2017 15:59:21 +0000 (17:59 +0200)]
qtdemux: add context for a preferred protection

qtdemux selected the first system corresponding to a working GStreamer
decryptor. With this change, before selecting that decryptor, qtdemux
will check if it has context (a preferred decryptor id) and if not, it
will request it.

The request includes track-id, available key system ids for the
available decryptors and even the events so that the init data is
accessible.

[eocanha@igalia.com: select the preferred protection system even if not available]

Test "4. ClearKeyVideo" in YouTube leanback EME conformance tests 2016 for
H.264[1] uses a media file[2] with cenc encryption which embeds 'pssh' boxes
with the init data for the Playready and Widevine encryption systems, but not
for the ClearKey encryption system (as defined by the EMEv0.1b spec[3] and with
the encryption system id defined in [4]).

Instead, the ClearKey encryption system is manually selected by the web page
code (even if not originally detected by qtdemux) and the proper decryption key
is dispatched to the decryptor, which can then decrypt the video successfully.

[1] http://yt-dash-mse-test.commondatastorage.googleapis.com/unit-tests/2016.html?test_type=encryptedmedia-test&webm=false
[2] http://yt-dash-mse-test.commondatastorage.googleapis.com/unit-tests/media/car_cenc-20120827-86.mp4
[3] https://dvcs.w3.org/hg/html-media/raw-file/eme-v0.1b/encrypted-media/encrypted-media.html#simple-decryption-clear-key
[4] https://www.w3.org/Bugs/Public/show_bug.cgi?id=24027#c2

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

6 years agoqtdemux: also push buffers without encryption info instead of dropping them
Enrique Ocaña González [Sat, 20 May 2017 16:55:40 +0000 (16:55 +0000)]
qtdemux: also push buffers without encryption info instead of dropping them

Test "17. PlayReadyH264Video" in YouTube leanback EME conformance tests 2016
for H.264[1] uses a media file[2] with cenc encryption whose first two 'moof'
boxes have no encryption information (no 'saiz' and 'saio' boxes).

Those boxes are actually not encrypted and the current qtdemux implementation
was just dropping them, breaking the test use case.

This patch detects those kind of situations and just lets the unencrypted
buffers pass. Of course, this needs some collaboration by the decryptors,
which should also do the same and not to try to decrypt those clear buffers.

[1] http://yt-dash-mse-test.commondatastorage.googleapis.com/unit-tests/2016.html?test_type=encryptedmedia-test&webm=false
[2] http://yt-dash-mse-test.commondatastorage.googleapis.com/unit-tests/media/oops_cenc-20121114-142.mp4

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

6 years agomeson: use cdata.set_quoted() in more places
Tim-Philipp Müller [Mon, 21 May 2018 10:49:08 +0000 (11:49 +0100)]
meson: use cdata.set_quoted() in more places

6 years agomeson: add 'nls' option to disable translations
Tim-Philipp Müller [Mon, 21 May 2018 10:46:59 +0000 (11:46 +0100)]
meson: add 'nls' option to disable translations

And enable by default. Was implicitly disabled because
ENABLE_NLS was not defined.

6 years agoid3v2mux: ensure valid sentinal for gst_structure_get()
Andre McCurdy [Tue, 9 Feb 2016 22:00:00 +0000 (14:00 -0800)]
id3v2mux: ensure valid sentinal for gst_structure_get()

gst_structure_get() is declared with G_GNUC_NULL_TERMINATED, ie
__attribute__((__sentinel__)), which means gcc will generate a
warning if the last parameter passed to the function is not NULL
(where a valid NULL in this context is defined as zero with any
pointer type).

The C code callers to gst_structure_get() within gst-plugins-good
use the C NULL definition (ie ((void*)0)), which is a valid sentinel.

However gstid3v2mux.cc uses the C++ NULL definition (ie 0L), which
is not a valid sentinel without an explicit cast to a pointer type.

Upstream-Status: Pending

Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
6 years agoraw1394: avoid including <sys/poll.h> directly
Andre McCurdy [Thu, 4 Feb 2016 02:12:38 +0000 (18:12 -0800)]
raw1394: avoid including <sys/poll.h> directly

Note from Edward Hervey: Patch from git.yoctoproject.org

musl libc generates warnings if <sys/poll.h> is included directly.

Upstream-Status: Pending

Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
6 years agoqtdemux_parse_segments: remove superfluous variable
Alicia Boya García [Fri, 23 Feb 2018 12:38:32 +0000 (13:38 +0100)]
qtdemux_parse_segments: remove superfluous variable

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

6 years agoflvmux: Remove custom get_next_time implementation
Olivier Crête [Mon, 23 Apr 2018 17:29:30 +0000 (13:29 -0400)]
flvmux: Remove custom get_next_time implementation

GstAggregator now does the same thing in the simple implementation.

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

6 years agortpsession: Add tests for PLI and FIR
Havard Graff [Tue, 15 May 2018 10:50:30 +0000 (11:50 +0100)]
rtpsession: Add tests for PLI and FIR

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

6 years agortpsession: make "clear-pt-map" action signal actually work
Havard Graff [Mon, 30 Apr 2018 06:41:19 +0000 (08:41 +0200)]
rtpsession: make "clear-pt-map" action signal actually work

Needed for PLI + FIR unit tests in follow-up commit.

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

6 years agortpsession: Avoid unnecessary copy of stats structure
Mikhail Fludkov [Thu, 6 Oct 2016 14:08:38 +0000 (16:08 +0200)]
rtpsession: Avoid unnecessary copy of stats structure

The code before copied GstStructure twice. The first time inside
gst_value_set_structure and the second time in g_value_array_append.
Optimized version does no copies, just transfers ownership to
GValueArray. It takes advantage of the fact that array has already
enough elements preallocated and the memory is zero initialized.

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

6 years agoRevert "BugFix : Change peak value to normalize audio file with fallback gain"
Tim-Philipp Müller [Tue, 15 May 2018 09:35:09 +0000 (10:35 +0100)]
Revert "BugFix : Change peak value to normalize audio file with fallback gain"

This reverts commit 36e49fd6f872f0b3f33083107a55fb7f671a47d0.

Breaks unit test, someone needs to investigate if it's the
patch's fault or if the test needs adjusting/updating.

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

6 years agortpsession: Drop packet if trying to send from non-internal source
Stian Selnes [Tue, 13 Dec 2016 09:13:52 +0000 (10:13 +0100)]
rtpsession: Drop packet if trying to send from non-internal source

If obtain_internal_source() returns a source that is not internal it
means there exists a non-internal source with the same ssrc. Such an
ssrc collision should be handled by sending a GstRTPCollision event
upstream and choose a new ssrc, but for now we simply drop the packet.
Trying to process the packet further will cause it to be pushed
usptream (!) since the source is not internal (see source_push_rtp()).

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

6 years agomatroskademux: tag disabled streams with FLAG_UNSELECT
Tim-Philipp Müller [Sun, 13 May 2018 23:29:24 +0000 (00:29 +0100)]
matroskademux: tag disabled streams with FLAG_UNSELECT

So they're never picked as default, only by explicit
user action.

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

6 years agoqtmux: Print expected/actual values in debug log on mismatch in prefill mode
Sebastian Dröge [Mon, 14 May 2018 18:06:55 +0000 (21:06 +0300)]
qtmux: Print expected/actual values in debug log on mismatch in prefill mode

This helps debugging a lot.

6 years agortpsession: Try media_ssrc if no src can be found for PLI sender_ssrc
Havard Graff [Tue, 10 Apr 2018 16:05:47 +0000 (18:05 +0200)]
rtpsession: Try media_ssrc if no src can be found for PLI sender_ssrc

Some RTP stacks out there does not set the sender_ssrc. In order to be
more robust, try to lookup the media_ssrc before dropping the PLI.

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

6 years agortpsession: Fix on-feedback-rtcp race
Mikhail Fludkov [Fri, 25 Aug 2017 09:59:00 +0000 (11:59 +0200)]
rtpsession: Fix on-feedback-rtcp race

If there is an external source which is about to timeout and be removed
from the source hashtable and we receive feedback RTCP packet with the
media ssrc of the source, we unlock the session in
rtp_session_process_feedback before emitting 'on-feedback-rtcp' signal
allowing rtcp timer to kick in and grab the lock. It will get rid of
the source and rtp_session_process_feedback will be left with RTPSource
with ref count 0.

The fix is to grab the ref to the RTPSource object in
rtp_session_process_feedback.

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

6 years agortpsession: Add missing lock around sess->ssrcs iteration
Stian Selnes [Mon, 27 Nov 2017 09:56:47 +0000 (10:56 +0100)]
rtpsession: Add missing lock around sess->ssrcs iteration

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

6 years agortpsession: do not emit RBs for internal senders.
John-Mark Bell [Fri, 25 Aug 2017 09:22:47 +0000 (11:22 +0200)]
rtpsession: do not emit RBs for internal senders.

These are the sources we send from, so there is no reason to
report receive statistics for them (as we do not receive on them,
and the remote side has no knowledge of them).

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

6 years agotests: rtpsession: fix indentation
Havard Graff [Tue, 10 Apr 2018 16:22:57 +0000 (18:22 +0200)]
tests: rtpsession: fix indentation

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

6 years agov4l2: Fix typo in debug messages
Edward Hervey [Sat, 12 May 2018 06:03:28 +0000 (08:03 +0200)]
v4l2: Fix typo in debug messages

It's a decoder, not an encoder :)

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

6 years agosplitmuxsink: Added caption_%u pad template
Vivia Nikolaidou [Thu, 22 Mar 2018 17:00:37 +0000 (18:00 +0100)]
splitmuxsink: Added caption_%u pad template

For closed-caption-enabled muxers (e.g. qtmux)

6 years agoqtdemux: Initialize riff library
Edward Hervey [Thu, 10 May 2018 11:57:30 +0000 (13:57 +0200)]
qtdemux: Initialize riff library

Avoids debugging message issues. Also just use the main riff header

6 years agotests: qtdemux: Add test for stream change
Seungha Yang [Tue, 8 May 2018 11:31:41 +0000 (20:31 +0900)]
tests: qtdemux: Add test for stream change

Add test case to verify track-id change and stream change

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

6 years agoqtdemux: Protect _expose_streams() from flush event
Seungha Yang [Tue, 8 May 2018 11:30:18 +0000 (20:30 +0900)]
qtdemux: Protect _expose_streams() from flush event

Flush during stream change can break autoplugging or the
flush event could be dropped.

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

6 years agoqtdemux: Try to expose whenever got new moov or new stream-start
Seungha Yang [Tue, 8 May 2018 11:26:41 +0000 (20:26 +0900)]
qtdemux: Try to expose whenever got new moov or new stream-start

Whenever got new moov or new stream-start,
demux will try to expose new pad by following rule.

Comparing stream-id in the current moov with previous one, then
* If matched stream-id is found from previous one,
  reuse existing pad (most common case)
* Otherwise, expose new pad with new stream-start
* No more used stream will be freed

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

6 years agoqtdemux: Remove duplication of initializing member variables
Seungha Yang [Tue, 8 May 2018 11:10:39 +0000 (20:10 +0900)]
qtdemux: Remove duplication of initializing member variables

Most initialization of variables in gst_qtdemux_init() are duplicated in
gst_qtdemux_reset() function.

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

6 years agoqtdemux: Create stream whenever got new moov
Seungha Yang [Tue, 8 May 2018 11:09:10 +0000 (20:09 +0900)]
qtdemux: Create stream whenever got new moov

Whenever demux got moov, demux will create new stream. Only exception is
duplicated track-id in a moov box. In that case the first stream
will be accepted. This patch is pre-work for rework of moov handling.

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

6 years agoqtdemux: Store stream-id to manage streams
Seungha Yang [Tue, 8 May 2018 10:57:11 +0000 (19:57 +0900)]
qtdemux: Store stream-id to manage streams

In order to figure out stream change such as
track-id change or stream-id change, demux will store
 stream-id per QtDemuxStream structure.

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

6 years agoqtdemux: Use GList to manage QtDemuxStream
Seungha Yang [Tue, 8 May 2018 10:39:02 +0000 (19:39 +0900)]
qtdemux: Use GList to manage QtDemuxStream

* Move to GList from static array
* Logging track-id instead of array index. It's more meaningful.

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

6 years agoqtdemux: Adjust the number of args of some functions
Seungha Yang [Tue, 8 May 2018 09:44:15 +0000 (18:44 +0900)]
qtdemux: Adjust the number of args of some functions

To be used with g_list_free_full in the next patch

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

6 years agoqtdemux: Add parentheses in macro
Seungha Yang [Tue, 8 May 2018 09:22:58 +0000 (18:22 +0900)]
qtdemux: Add parentheses in macro

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

6 years agoisomp4: Use full date time if available
Marinus Schraal [Mon, 19 Mar 2018 22:36:13 +0000 (23:36 +0100)]
isomp4: Use full date time if available

The ©day tag contains a full date time, use it for the DATE_TIME tag
instead of just the DATE tag. This overrules the unreliable qt creation
time.

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

6 years agortspsrc: Fix doc comment markers
Jan Schmidt [Thu, 15 Mar 2018 11:59:39 +0000 (22:59 +1100)]
rtspsrc: Fix doc comment markers

6 years agoicydemux: avoid timestamp field initialisation for tag event
Kyrylo Polezhaiev [Tue, 2 Feb 2016 16:58:24 +0000 (18:58 +0200)]
icydemux: avoid timestamp field initialisation for tag event

This field is not used and will be removed in 2.0 API.

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

6 years agodcaparse: do not accept header with invalid channel count
Matej Knopp [Sun, 5 Oct 2014 13:51:18 +0000 (15:51 +0200)]
dcaparse: do not accept header with invalid channel count

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

6 years agomeson: Update option names to omit disable_ and with- prefixes
Nirbheek Chauhan [Sat, 5 May 2018 13:57:24 +0000 (19:27 +0530)]
meson: Update option names to omit disable_ and with- prefixes

Also yield common options to the outer project (gst-build in our case)
so that they don't have to be set manually.

6 years agoBugFix : Change peak value to normalize audio file with fallback gain
Anthony Violo [Thu, 12 Apr 2012 07:53:24 +0000 (09:53 +0200)]
BugFix : Change peak value to normalize audio file with fallback gain

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

6 years agortpvrawpay: don't use buffer lists if everything fits into one buffer
Tim-Philipp Müller [Sat, 5 May 2018 14:32:59 +0000 (16:32 +0200)]
rtpvrawpay: don't use buffer lists if everything fits into one buffer

People might use very large mtu sizes where every payload
fits into a single output packet.

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

6 years agoconfigure: Fix hard-coded enabled v4l2 probe on Linux/ARM
Kirill Marinushkin [Wed, 4 Apr 2018 13:50:55 +0000 (15:50 +0200)]
configure: Fix hard-coded enabled v4l2 probe on Linux/ARM

Currently, enable_v4l2_probe is hard-coded to "yes" on linux, platforms
arm and aarch64. This even overrides the --disable-v4l2-probe argument.
As a result, it is impossible to disable v4l2_probe. It becomes a problem
for use-cases, when startup time is critical, because the v4l2_probe
feature increases the initialization time.

This commit makes the v4l2_probe feature configurable.
On linux, platforms arm and aarch64, the default value is still "yes".
But now it can be disabled by the --disable-v4l2-probe argument.

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

6 years agoflvmux: Don't wake up the muxer unless there is data
Olivier Crête [Mon, 23 Apr 2018 15:26:12 +0000 (11:26 -0400)]
flvmux: Don't wake up the muxer unless there is data

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

6 years agoflvmux: Save the current position in the output segment
Olivier Crête [Mon, 23 Apr 2018 15:19:18 +0000 (11:19 -0400)]
flvmux: Save the current position in the output segment

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

6 years agoflvmux: Wait for caps from both srcs before writing header
Olivier Crête [Thu, 19 Apr 2018 21:53:51 +0000 (17:53 -0400)]
flvmux: Wait for caps from both srcs before writing header

Wait for caps on all pads to start writing data even when source is live.

Includes unit test by Havard Graff that simulates it.

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

6 years agov4l2: rely on gst_v4l2_dup() to set no_initial_format and keep_aspect
Guillaume Desmottes [Fri, 13 Apr 2018 11:29:06 +0000 (13:29 +0200)]
v4l2: rely on gst_v4l2_dup() to set no_initial_format and keep_aspect

gst_v4l2_dup() will now take care of setting
v4l2capture->no_initial_format and keep_aspect instead of doing it
manually.

Fix a typo as keep_aspect was set twice on v4l2output but never on
v4l2capture.

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

6 years agoMeson: Generate pc file for all plugins in good
Xavier Claessens [Tue, 24 Apr 2018 18:06:10 +0000 (14:06 -0400)]
Meson: Generate pc file for all plugins in good

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

6 years agomeson: use -Wl,-Bsymbolic-functions where supported
Tim-Philipp Müller [Wed, 25 Apr 2018 09:58:41 +0000 (10:58 +0100)]
meson: use -Wl,-Bsymbolic-functions where supported

Just like the autotools build.

6 years agoqtmux: Read caption from input buffer
Edward Hervey [Wed, 25 Apr 2018 08:37:40 +0000 (10:37 +0200)]
qtmux: Read caption from input buffer

And not from unallocated output buffer GstMapInfo

CID #1435131

6 years agoisomp4: qtmux: Add Closed Caption support
Edward Hervey [Wed, 7 Feb 2018 10:00:18 +0000 (11:00 +0100)]
isomp4: qtmux: Add Closed Caption support

Supports CEA 608 and CEA 708 CC streams

Also supports usage in "Robust Prefill" mode if the incoming caption
stream is constant (i.e. there is one incoming CC buffer for each
video frame).

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

6 years agoisomp4: Make 'gmhd' atom usage more generic
Edward Hervey [Tue, 6 Feb 2018 14:38:00 +0000 (15:38 +0100)]
isomp4: Make 'gmhd' atom usage more generic

Only the 'gmin' atom is required. Any other entry within it are
optional.

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

6 years agojpegenc: Accept sof-marker=4
Thibault Saunier [Sun, 22 Apr 2018 13:40:19 +0000 (10:40 -0300)]
jpegenc: Accept sof-marker=4

sof-marker is 4 when input is in the RGB colorspace.

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

6 years agoulpfecdec: output perfect seqnums
Mathieu Duponchelle [Mon, 2 Apr 2018 14:06:35 +0000 (16:06 +0200)]
ulpfecdec: output perfect seqnums

ULP FEC, as defined in RFC 5109, has the protected and protection
packets sharing the same ssrc, and a different payload type, and
implies rewriting the seqnums of the protected stream when encoding
the protection packets. This has the unfortunate drawback of not
being able to tell whether a lost packet was a protection packet.

rtpbasedepayload relies on gaps in the seqnums to set the DISCONT
flag on buffers it outputs. Before that commit, this created two
problems:

* The protection packets don't make it as far as the depayloader,
  which means it will mark buffers as DISCONT every time the previous
  packets were protected

* While we could work around the previous issue by looking at
  the protection packets ignored and dropped in rtpptdemux, we
  would still mark buffers as DISCONT when a FEC packet was lost,
  as we cannot know that it was indeed a FEC packet, even though
  this should have no impact on the decoding of the stream

With this commit, we consider that when using ULPFEC, gaps in
the seqnums are not a reliable indicator of whether buffers should
be marked as DISCONT or not, and thus rewrite the seqnums on
the decoding side as well to form a perfect sequence, this
obviously doesn't prevent the jitterbuffer from doing its job
as the ulpfec decoder is downstream from it.

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

6 years agoRevert "rtspsrc: Fix up sendonly/recvonly attribute handling"
Sebastian Dröge [Tue, 17 Apr 2018 14:57:16 +0000 (17:57 +0300)]
Revert "rtspsrc: Fix up sendonly/recvonly attribute handling"

This reverts commit af273b4de9eb292c0b6af63665e10ca015895902.

While RFC 3264 (SDP) says that sendonly/recvonly are from the point of view of
the requester, the actual RTSP RFCs (RFC 2326 / 7826) disagree and say
the opposite, just like the ONVIF standard.

Let's follow those RFCs as we're doing RTSP here, and add a property at
a later time if needed to switch to the SDP RFC behaviour.

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

6 years agoflacparse: Drain the parser when a CAPS event is received
Sebastian Dröge [Mon, 16 Apr 2018 18:27:47 +0000 (21:27 +0300)]
flacparse: Drain the parser when a CAPS event is received

After a CAPS event, in theory a new stream can start and it might start
with the FLAC headers again. We can't detect FLAC headers in the middle
of the stream, so we drain the parser to be able to detect either FLAC
headers after the CAPS event or the continuation of the previous stream.

This fixes for example

gst-launch-1.0 audiotestsrc num-buffers=200 ! flacenc ! c. \
    audiotestsrc num-buffers=200 freq=880 ! flacenc ! c. \
    concat name=c ! rtpgstpay ! udpsink host=127.0.0.1 port=5000

gst-launch-1.0 udpsrc multicast-group=127.0.0.1 port=5000 \
    caps=application/x-rtp,media=application,clock-rate=90000,encoding-name=X-GST ! \
    rtpgstdepay ! flacparse ! flacdec ! audioconvert ! pulsesin

6 years agoAutomatic update of common submodule
Tim-Philipp Müller [Mon, 16 Apr 2018 09:52:56 +0000 (10:52 +0100)]
Automatic update of common submodule

From 3fa2c9e to ed78bee

6 years agomeson: add build files for the qml plugin
Matthew Waters [Thu, 5 Apr 2018 06:05:12 +0000 (16:05 +1000)]
meson: add build files for the qml plugin

Tested on linux with X11/wayland and semi-tested on Windows.

Windows crashes on item destruction however this is better than nothing.

Fix up some win32 build issues on the way with mismatched {} and
G_STMT_{START,END}

6 years agoflvmux test: refactor looped test.
Mathieu Duponchelle [Fri, 13 Apr 2018 21:02:26 +0000 (23:02 +0200)]
flvmux test: refactor looped test.

Looping the test 500 times to only execute the test once every
33 times means we inited and deinited gstreamer 467 times
for no reason at all, which was annoying when running the test
with valgrind.