platform/upstream/gstreamer.git
6 years agortpmux: cleanup ssrc-handling code a bit
Havard Graff [Tue, 7 Jun 2016 12:38:19 +0000 (14:38 +0200)]
rtpmux: cleanup ssrc-handling code a bit

And add some better logging.

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

6 years agortpmux: protect against NULL caps
Havard Graff [Wed, 4 May 2016 09:48:04 +0000 (11:48 +0200)]
rtpmux: protect against NULL caps

Due to state-changes deactivating the pad from another thread,
this can happen.

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

6 years agortpmux: property should overrule both upstream and downstream
Havard Graff [Wed, 22 Jul 2015 07:47:22 +0000 (09:47 +0200)]
rtpmux: property should overrule both upstream and downstream

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

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

6 years agomeson: use new 'python' module instead of deprecated
Tim-Philipp Müller [Mon, 8 Oct 2018 19:45:08 +0000 (20:45 +0100)]
meson: use new 'python' module instead of deprecated

https://github.com/mesonbuild/meson/pull/4169

6 years agomeson: only build gtk gl examples if gst-gl was found
Tim-Philipp Müller [Mon, 8 Oct 2018 19:35:15 +0000 (20:35 +0100)]
meson: only build gtk gl examples if gst-gl was found

And fix typo in glliveshader example binary name.

6 years agosplitmuxsink: accept pads named 'sink' on the muxer, handle static pads as well
Peter Körner [Wed, 3 Oct 2018 14:17:22 +0000 (16:17 +0200)]
splitmuxsink: accept pads named 'sink' on the muxer, handle static pads as well

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

6 years agocairooverlay: Don't map input buffers if we just attach the overlay as meta
Sebastian Dröge [Tue, 25 Sep 2018 14:44:15 +0000 (17:44 +0300)]
cairooverlay: Don't map input buffers if we just attach the overlay as meta

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

6 years agocairooverlay: Add overlay as meta to the buffers if we can
Sebastian Dröge [Tue, 25 Sep 2018 14:02:26 +0000 (17:02 +0300)]
cairooverlay: Add overlay as meta to the buffers if we can

This requires that downstream supports it and
draw-on-transparent-surface is enabled.

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

6 years agocairooverlay: Pre-multiply and un-premultiply alpha in case of ARGB32
Sebastian Dröge [Tue, 25 Sep 2018 12:34:40 +0000 (15:34 +0300)]
cairooverlay: Pre-multiply and un-premultiply alpha in case of ARGB32

Cairo expects pre-multiplied alpha, we work on un-premultiplied alpha.

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

6 years agocairooverlay: Add property for drawing on a transparent surface and then blending
Sebastian Dröge [Tue, 25 Sep 2018 12:31:20 +0000 (15:31 +0300)]
cairooverlay: Add property for drawing on a transparent surface and then blending

This allows us to use the GstVideoOverlayComposition API and correctly
handle pre-multiplied alpha, while also only doing the alpha conversion
once instead of twice for the whole frame.

At a later point we can attach the meta to the buffer instead of
blending ourselves if downstream supports that.

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

6 years agomatroskdemux: do not use MapInfo.data after unmapping
Thibault Saunier [Wed, 3 Oct 2018 15:34:49 +0000 (17:34 +0200)]
matroskdemux: do not use MapInfo.data after unmapping

And minor gst-indenting

6 years agomatroska: Add the WebM encrypted content support in matroskademux
Yacine Bandou [Sun, 30 Sep 2018 17:28:07 +0000 (19:28 +0200)]
matroska: Add the WebM encrypted content support in matroskademux

This commit:

1. Reads the WebM and Matroska ContentEncryption subelements.

2. Creates a GST_PROTECTION event for each ContentEncryption, which
   will be sent before pushing the first source buffer.
   The DRM system id field in this event is set to GST_PROTECTION_UNSPECIFIED_SYSTEM_ID,
   because it isn't specified neither by Matroska nor by the WebM spec.

3. Reads the protection information of encrypted Block/SimpleBlock and
   extracts the IV and the partitioning format (subsamples).

4. Creates the metadata protection for each encrypted Block/SimpleBlock,
   with those informations: KeyID (extracted from ContentEncryption element),
   IV and partitioning format.

5. Adds a new caps for WebM encrypted content named "application/x-webm-enc",
   with the following new fields:

   "encryption-algorithm": The encryption algorithm used.
                           values: "None", "DES", "3DES", "Twofish", "Blowfish", "AES".

   "encoding-scope": The field that describes which Elements have been modified.
                     Values: "frame", "codec-data", "next-content".

   "cipher-mode": The cipher mode used in the encryption.
                  Values: "None", "CTR".

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

6 years agosplitmuxsink: Added a split-at-running-time action signal
John Nikolaides [Wed, 26 Sep 2018 14:43:05 +0000 (17:43 +0300)]
splitmuxsink: Added a split-at-running-time action signal

The video file can now be split at an arbitrary time, given by the user
as an argument to the action signal.

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

6 years agortpmp4gdepay: detect broken senders who send AAC with ADTS frames
Tim-Philipp Müller [Fri, 21 Sep 2018 18:47:44 +0000 (19:47 +0100)]
rtpmp4gdepay: detect broken senders who send AAC with ADTS frames

Strip ADTS headers if we detect any, apparently some Sony cameras
send AAC with ADTS headers. We could also change the stream-format
in the output caps, but that would be unexpected to pipeline builders
and would not exactly be backwards compatible.

6 years agortpmp4gdepay: factor out pushing of output buffer
Tim-Philipp Müller [Fri, 21 Sep 2018 17:17:25 +0000 (18:17 +0100)]
rtpmp4gdepay: factor out pushing of output buffer

6 years agoimagefreeze: Allow ANY capsfeatures
Sebastian Dröge [Wed, 26 Sep 2018 10:29:42 +0000 (13:29 +0300)]
imagefreeze: Allow ANY capsfeatures

6 years agodocs: update for git master
Tim-Philipp Müller [Tue, 25 Sep 2018 23:06:09 +0000 (00:06 +0100)]
docs: update for git master

6 years agoqtdemux: PIFF track encryption box support
Philippe Normand [Fri, 22 Jun 2018 11:05:17 +0000 (12:05 +0100)]
qtdemux: PIFF track encryption box support

The PIFF track encryption box is a UUID box containing the default encryption
values that should be used for PIFF sample encryption.

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

6 years agoosxaudio: add support for parsing more channel layouts ...
Nicola Murino [Mon, 24 Sep 2018 09:45:46 +0000 (11:45 +0200)]
osxaudio: add support for parsing more channel layouts ...

... and fallback to gst_audio_info_set_format for not yet supported layouts.

Fix audio playback on iOS 12.
Based on patch from Byron Schiel <byron@canary.is>

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

6 years agoqtdemux: turn impossible condition into an assert
Alicia Boya García [Sat, 22 Sep 2018 15:22:46 +0000 (17:22 +0200)]
qtdemux: turn impossible condition into an assert

qtdemux_update_streams() is only ever called after checking
`qtdemux->streams_aware` is TRUE. There is no need to check for that
condition again.

`qtdemux->streams_aware` is only modified when the demuxer is
hard-resetted, which is mutually exclusive with demuxing, so it cannot
be modified during the call.

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

6 years agomatroskademux: Emit no-more-pads after parsing Tracks
Alicia Boya García [Fri, 21 Sep 2018 20:24:02 +0000 (22:24 +0200)]
matroskademux: Emit no-more-pads after parsing Tracks

Currently matroskademux does not emit no-more-pads until the first
Cluster is parsed, even though the Tracks have already been parsed and
from that point on there can be no more tracks.

This is important in MSE because the browser needs to know when the MSE
initialization segment has been completely parsed so that it can expose
the tracks to the user. Some applications depend on this been done
before they feed frames to the demuxer.

As a consequence, historically WebKit has relied on hacks such as
listening to the `pad-added` event, which made impossible to support
multiple tracks in the same file. Let's fix that.

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

6 years agomatroskademux: Parse successive Tracks elements
Alicia Boya García [Fri, 21 Sep 2018 18:38:02 +0000 (20:38 +0200)]
matroskademux: Parse successive Tracks elements

This patch allows matroskademux to parse a second Tracks element,
erroring out if the tracks are not compatible (different number, type or
codec) and emitting new caps and tag events should they have changed.

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

6 years agomatroskademux: Refactor track parsing out from adding tracks
Alicia Boya García [Fri, 21 Sep 2018 14:23:57 +0000 (16:23 +0200)]
matroskademux: Refactor track parsing out from adding tracks

This splits gst_matroska_demux_add_stream() into:

* gst_matroska_demux_parse_stream(): will read the Matroska bytestream
  and fill a GstMatroskaTrackContext.

* gst_matroska_demux_parse_tracks(): will check there are no repeated
  tracks.

* gst_matroska_demux_add_stream(): creates and sets up the pad for the
  track.

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

6 years agomatroskademux: Allow Matroska headers to be read more than once
Alicia Boya García [Thu, 30 Nov 2017 19:44:23 +0000 (20:44 +0100)]
matroskademux: Allow Matroska headers to be read more than once

This is necessary for MSE, where a new MSE initialization segment may be
appended at any point. These MSE initialization segments consist of an
entire WebM file until the first Cluster element (not included). [1]

Note that track definitions are ignored on successive headers, they must
match, but this is not checked by matroskademux (look for
`(!demux->tracks_parsed)` in the code).

Source pads are not altered when the new headers are read.

This patch has been splitted from the original patch from eocanha in [2].

[1] https://www.w3.org/TR/mse-byte-stream-format-webm/
[2] https://bug334082.bugzilla-attachments.gnome.org/attachment.cgi?id=362212

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

6 years agosplitmuxsink: Implement split-after
Mathieu Duponchelle [Thu, 16 Aug 2018 19:42:37 +0000 (21:42 +0200)]
splitmuxsink: Implement split-after

The behaviour of split-now is to output the current GOP after
starting a new file.

The newly-added split-after signal will output the current GOP
to the old file if possible once a new GOP is opened.

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

6 years agoflvmux: Don't leak codec_data buffer
Seungha Yang [Thu, 20 Sep 2018 03:12:55 +0000 (12:12 +0900)]
flvmux: Don't leak codec_data buffer

Use gst_buffer_replace() to prevent buffer leak

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

6 years agoqtmux: Set Closed Caption track width/height to that of the first video track
Sebastian Dröge [Tue, 18 Sep 2018 15:13:52 +0000 (18:13 +0300)]
qtmux: Set Closed Caption track width/height to that of the first video track

Otherwise software like Premiere or Final Cut Pro won't like our files.

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

6 years agomeson: add glib-checks option to disable API guards and such
Tim-Philipp Müller [Wed, 19 Sep 2018 10:45:59 +0000 (11:45 +0100)]
meson: add glib-checks option to disable API guards and such

We want this enabled by default, also in releases, but people
may want to disable this for performance-critical workloads or
on embedded devices.

6 years agomeson: fix missing closing bracket in option descriptions
Tim-Philipp Müller [Wed, 19 Sep 2018 10:45:00 +0000 (11:45 +0100)]
meson: fix missing closing bracket in option descriptions

6 years agoqtmux: Initialize caption track language code to 0 instead of "und"
Sebastian Dröge [Thu, 6 Sep 2018 17:10:30 +0000 (20:10 +0300)]
qtmux: Initialize caption track language code to 0 instead of "und"

Without this, Final Cut considers it "non-standard" and 0 (english) is a
good default for closed captions.

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

6 years agov4l2videodec: Add HEVC decoder support
Song Bing [Thu, 13 Sep 2018 03:16:32 +0000 (03:16 +0000)]
v4l2videodec: Add HEVC decoder support

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

6 years agov4l2videodec: Move capture probe after input format is set
Nicolas Dufresne [Thu, 13 Sep 2018 02:35:39 +0000 (02:35 +0000)]
v4l2videodec: Move capture probe after input format is set

This is to support Amlogic CODEC driver which does not provide a full
list of formats when the driver is initially opened. GStreamer does
not strictly need this full list initially, but only later, in order
to negotiate with downstream if multiple format can be selected.

With this change, we will no longer probe twice the device, since the
probed list can be directly used for negotation.

6 years agov4l2: Add a debug message beforing waiting for codec stop
Ezequiel Garcia [Tue, 11 Sep 2018 19:46:34 +0000 (16:46 -0300)]
v4l2: Add a debug message beforing waiting for codec stop

Add a debug message right before waiting for the driver.
This is useful in order to debug drivers without a properly
implemented decoder or encoder stop command.

6 years agov4l2: Add a debug message indicating probe operation
Ezequiel Garcia [Mon, 10 Sep 2018 16:18:45 +0000 (13:18 -0300)]
v4l2: Add a debug message indicating probe operation

It's useful to see the v4l2 element running the probe
operation, to confirm it's turned on and working.

6 years agov4l2: Add JPEG encoding support
Ezequiel Garcia [Mon, 10 Sep 2018 16:18:30 +0000 (13:18 -0300)]
v4l2: Add JPEG encoding support

This commit adds the support for V4L JPEG stateful encoders.

6 years agov4l2: Add FWHT codec support
Ezequiel Garcia [Mon, 10 Sep 2018 19:20:52 +0000 (16:20 -0300)]
v4l2: Add FWHT codec support

The recently added vicodec (virtual codec) V4L driver
uses the Fast Walsh-Hadamard Transform for encoding
and decoding.

Add support for it.

6 years agov4l2: Sync kernel header with linuxtv tree
Nicolas Dufresne [Thu, 13 Sep 2018 01:28:24 +0000 (21:28 -0400)]
v4l2: Sync kernel header with linuxtv tree

This notably add HEVC and FWHT support, and VP8/9 profiles are now an
enumeration and their control exposed as a menu.

6 years agoqtmux: Allow up to 1 trak timescale unit of lateness in prefill mode
Vivia Nikolaidou [Wed, 12 Sep 2018 14:24:00 +0000 (17:24 +0300)]
qtmux: Allow up to 1 trak timescale unit of lateness in prefill mode

For 59.94 FPS, it's common to set 60000 as timescale. For that
timescale, if the audio is late by as little as 0:00:00.000016666
(definitely less than one audio sample), lateness gets rounded to 1.
Added a safeguard that allows lateness up to 1 sample with the specific
trak's timescale, to make sure that values less than e.g. one audio
sample won't break the prefill mode. What will happen in this case is
that the audio will get squeezed back to the video's timestamp, which in
practice means that the audio will be 0.000016666 seconds early (with
the patch).

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

6 years agov4l2object: Fix indentation
Nicolas Dufresne [Tue, 11 Sep 2018 00:20:39 +0000 (20:20 -0400)]
v4l2object: Fix indentation

6 years agov4l2object: Protect against zero PAR num/demu
Nicolas Dufresne [Tue, 11 Sep 2018 00:18:32 +0000 (00:18 +0000)]
v4l2object: Protect against zero PAR num/demu

This fixes an assertion when the driver implement CROPCAP but does
not set the PAR.

6 years agowavpackparse: fix handling of correction streams
Tim-Philipp Müller [Tue, 11 Sep 2018 23:52:19 +0000 (00:52 +0100)]
wavpackparse: fix handling of correction streams

Accept wavpack correction streams (.wvc) on sink pad, so
that wavpackparse can also be used to packetise correction
streams.

Fix parsing of subblock ID tags - the higher bits are
flags and are not part of the ID. This resulted in
correction blocks not being recognised properly and
the output not having the right (correction) caps.

6 years agomeson: Explicitly pass -DWIN32 while building speex
Nirbheek Chauhan [Fri, 7 Sep 2018 13:17:22 +0000 (18:47 +0530)]
meson: Explicitly pass -DWIN32 while building speex

The speex headers assume that WIN32 will always be defined when
building on Windows, but this is only true by default on MinGW.
Always set it explicitly.

6 years agoflvmux: Don't omit streamheader from caps on downstream reconfigure
Seungha Yang [Thu, 6 Sep 2018 04:13:19 +0000 (13:13 +0900)]
flvmux: Don't omit streamheader from caps on downstream reconfigure

The reconfigured downstream elements (e.g., dynamically added sink element)
most likely require the flv streamheader

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

6 years agomatroskamux: don't store used UIDs
Martin Kelly [Wed, 5 Sep 2018 23:11:00 +0000 (16:11 -0700)]
matroskamux: don't store used UIDs

Currently, whenever we generate a 128-bit UID, we store it in a list and
return 0 if we ever encounter a collision. This is so mathematically
improbable that it's not worth checking for, so we can save memory and
time by not tracking the UID. Even if a collision happened, a list of
only 10 UIDs would be unlikely to detect it.

This article has a good description of how improbable a collision is:
https://en.wikipedia.org/wiki/Universally_unique_identifier#Collisions

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

6 years agoqtmux: Use existing helper function to create "und" language code
Sebastian Dröge [Thu, 6 Sep 2018 17:06:10 +0000 (20:06 +0300)]
qtmux: Use existing helper function to create "und" language code

6 years agomeson: Don't skip plugins that don't build with MSVC
Nirbheek Chauhan [Wed, 5 Sep 2018 14:45:57 +0000 (20:15 +0530)]
meson: Don't skip plugins that don't build with MSVC

We now have options for all plugins, so we will just disable these in
the cerbero recipe instead. These require external deps, so they won't
affect gst-build either.

6 years agompg123: Remove ssize_t fallback, not needed anymore
Nirbheek Chauhan [Mon, 3 Sep 2018 10:34:33 +0000 (16:04 +0530)]
mpg123: Remove ssize_t fallback, not needed anymore

The mpg123 headers now contain a definition for ssize_t and building
with MSVC fails because of a redefinition for ssize_t

6 years agoqtdemux: Keep sample data from the current fragment only (push mode)
Alicia Boya García [Tue, 31 Jul 2018 10:52:36 +0000 (12:52 +0200)]
qtdemux: Keep sample data from the current fragment only (push mode)

This patch clears the sample table whenever the demuxing of a new
fragment begins. This avoids increasing memory usage for long videos.
This behavior was already present when upstream_format_is_time; this
patch extends it to all push mode operation (e.g. Media Source
Extensions).

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

6 years agomeson: Fix osxaudio build on iOS
Nirbheek Chauhan [Sat, 1 Sep 2018 04:00:23 +0000 (09:30 +0530)]
meson: Fix osxaudio build on iOS

Must define HAVE_IOS, and use appleframeworks dependency to ensure the
right frameworks are picked up.

6 years agov4l2object: Only offer MMAP/DMABUF pool
Nicolas Dufresne [Wed, 22 Aug 2018 19:23:53 +0000 (19:23 +0000)]
v4l2object: Only offer MMAP/DMABUF pool

The propose allocation was offering a pool even in DMABUF_IMPORT or
USERPTR mode. These pool are internal only.

6 years agov4l2transform: Add "disable-passthrough" property
Nicolas Dufresne [Wed, 22 Aug 2018 17:51:52 +0000 (17:51 +0000)]
v4l2transform: Add "disable-passthrough" property

This allow forcing going through the transform driver even if there
isn't an conversion happening. This is usedful when the m2m driver can
be used to adapt the type of memory between two drivers.

6 years agodeinterlace: Reset frame/tc/caption pointer to NULL after moving it in the history
Sebastian Dröge [Fri, 31 Aug 2018 11:25:09 +0000 (14:25 +0300)]
deinterlace: Reset frame/tc/caption pointer to NULL after moving it in the history

6 years agortpmp4vpay: Increase ranking
Edward Hervey [Wed, 29 Aug 2018 07:51:42 +0000 (09:51 +0200)]
rtpmp4vpay: Increase ranking

Both rtpmp4vpay and rtpmp4gpay support MPEG4 elementary streams. But
the most supported variant is the video-specific one (rtpmp4vpay),
therefore increase the rank of that one so that auto-plugging of
payloaders for MPEG4 elementary streams ends up picking that one
and not the generic one.

6 years agomatroskademux: implement keyframe search also without cluster prev size
Tim-Philipp Müller [Wed, 15 Aug 2018 11:53:34 +0000 (12:53 +0100)]
matroskademux: implement keyframe search also without cluster prev size

If we have cluster prev size (GStreamer muxer will write it by default),
we can go back to the previous cluster efficiently, but if we don't then
just search backwards until we find a cluster ebml identifier, like we
do when searching for clusters in the bisection loop.

6 years agomatroskademux: make max backtrack distance for keyframe search configurable
Tim-Philipp Müller [Wed, 15 Aug 2018 11:14:24 +0000 (12:14 +0100)]
matroskademux: make max backtrack distance for keyframe search configurable

Add property instead of hardcoding it in the code.

In some scenarios such as CCTV variable fps and extra long GOPs are
used to minimise storage space, for example. In those cases there might
not be any keyframes for many minutes, so provide a property to override
the max allowed distance.

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

6 years agomatroskademux: set limit how much to backtrack to find a keyframe
Tim-Philipp Müller [Wed, 15 Aug 2018 10:49:57 +0000 (11:49 +0100)]
matroskademux: set limit how much to backtrack to find a keyframe

If we seek without an index and land on a cluster that starts
with a delta frame.

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

6 years agomatroskademux: no need to search for keyframes for intra-only streams
Tim-Philipp Müller [Wed, 15 Aug 2018 10:25:21 +0000 (11:25 +0100)]
matroskademux: no need to search for keyframes for intra-only streams

If the video streams are all I-frame only then we don't need to look
for a cluster with a keyframe, we can just assume there will be one.

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

6 years agomatroskademux: figure out if we have prev_size when starting up
Tim-Philipp Müller [Wed, 15 Aug 2018 00:10:32 +0000 (01:10 +0100)]
matroskademux: figure out if we have prev_size when starting up

This is useful to know in case someone initiates a seek or
direction change before we reach the second cluster.

6 years agomatroskademux: try to ensure keyframe when seeking without index
Tim-Philipp Müller [Wed, 8 Aug 2018 11:37:54 +0000 (12:37 +0100)]
matroskademux: try to ensure keyframe when seeking without index

When seeking in pull mode without an index (because there is no index
or the file is still being written to) we bisect to find the right
cluster to jump to. However, it's possible the cluster we found doesn't
start with a keyframe, which leads to decoding errors, so if we know
that the found cluster starts with a delta frame try to scan back to
previous clusters until we find one that starts with a keyframe or
we are back at the beginning. Theoretically it's possible that all
clusters but the first one do not start with a keyframe and the
keyframes are in the middle of clusters, but this is extremely
unusual, so we will cover this case with a basic sanity check.

This problem is especially problematic with content recorded with
dynamic GOP and FPS, where long GOP lengths and low FPS may cause a
large set of clusters to lack key frames. Playback would then be
started on a non-keyframe cluster, and the large number of such frames
would make the content impossible to decode fo a long stretch of time.

Based on patch by: Mats Lindestam <matslm@axis.com>

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

6 years agomatroskademux: extract cluster prevsize if available
Tim-Philipp Müller [Wed, 18 Jan 2017 10:27:38 +0000 (10:27 +0000)]
matroskademux: extract cluster prevsize if available

This is useful for reverse playback/trickmodes
without an index, and will also be useful in the
seek handler if we need to scan back to find a cluster
that starts with a keyframe.

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

6 years agov4l2bufferpool: Validate stride/offset when importing
Nicolas Dufresne [Wed, 25 Jul 2018 23:27:01 +0000 (19:27 -0400)]
v4l2bufferpool: Validate stride/offset when importing

This will prevent situation where buffer size allow importing but rendering
goes wrong due to a miss-match in expected stride and offset.

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

6 years agov4l2object: Add a method to try and import buffers
Nicolas Dufresne [Wed, 1 Aug 2018 17:07:52 +0000 (13:07 -0400)]
v4l2object: Add a method to try and import buffers

This method will check if a buffer, base on it's video meta,
can be imported. It will also try and adapt the request stride
in case this is the only that miss-match.

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

6 years agov4l2allocator: Trace the buffer index we import to
Nicolas Dufresne [Wed, 1 Aug 2018 16:07:20 +0000 (12:07 -0400)]
v4l2allocator: Trace the buffer index we import to

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

6 years agov4l2bufferpool: Fix typo in error message
Nicolas Dufresne [Thu, 26 Jul 2018 02:16:59 +0000 (22:16 -0400)]
v4l2bufferpool: Fix typo in error message

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

6 years agov4l2bufferpool: Only queue buffer if preparation worked
Nicolas Dufresne [Tue, 24 Jul 2018 16:07:22 +0000 (12:07 -0400)]
v4l2bufferpool: Only queue buffer if preparation worked

The preparation code imports the buffer, doing bunch of
validation. Only queue the buffer in the driver if the
importation worked. This way we don't rely on the driver
to validate.

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

6 years agov4l2object: Only allow DMABuf export for STREAMING device
Nicolas Dufresne [Tue, 24 Jul 2018 16:05:45 +0000 (12:05 -0400)]
v4l2object: Only allow DMABuf export for STREAMING device

DMABuf exportation requires mmap, which requires STREAMING
capabilities.

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

6 years agov4l2bufferpool: Activate the other pool first
Nicolas Dufresne [Fri, 13 Jul 2018 18:42:21 +0000 (14:42 -0400)]
v4l2bufferpool: Activate the other pool first

This change has no effect. We will need to acquire a buffer from the
pool later in order to validate / adapt with the video alignment for
the downstream buffers.

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

6 years agov4l2src: Simplify format handling
Nicolas Dufresne [Mon, 9 Jul 2018 19:33:02 +0000 (15:33 -0400)]
v4l2src: Simplify format handling

Always initially use try_format(), delaying set_format() to when the
allocation is being negotiated. This avoid having two code paths, and
will be help adding support for properly importing buffers of specific
strides and offsets.

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

6 years agomatroska: fix handling of FlagInterlaced
Tim-Philipp Müller [Thu, 23 Aug 2018 20:57:35 +0000 (22:57 +0200)]
matroska: fix handling of FlagInterlaced

This is an enum not a boolean, and a value of 2 signals
that the video is progressive, but we would mistakenly set
interlace-mode=mixed on the output caps.

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

6 years agov4l2object: complete colorspace info in debug log
Philipp Zabel [Thu, 9 Aug 2018 13:14:05 +0000 (15:14 +0200)]
v4l2object: complete colorspace info in debug log

The desired colorimetry is logged with all parameters (colorpsace,
range, matrix, and transfer function), but of the values actually
set by the driver, only colorspace is logged. Complete the debug
log message to display all colorimetry parameters:

  Desired colorspace is 8:1:1:1
  Got format of 640x480, format YU12, nb planes 1, colorspace 8

->

  Desired colorspace is 8:1:1:1
  Got format of 640x480, format YU12, nb planes 1, colorspace 8:0:0:0

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

6 years agov4l2object: fix typo in comment
Philipp Zabel [Thu, 9 Aug 2018 13:12:57 +0000 (15:12 +0200)]
v4l2object: fix typo in comment

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

6 years agov4l2object: improve colorspace handling for JPEG sources
Philipp Zabel [Thu, 9 Aug 2018 13:08:59 +0000 (15:08 +0200)]
v4l2object: improve colorspace handling for JPEG sources

gstjpegdec sets 1:4:0:0 colorimetry (full range BT.601 YCbCr encoding
with unknown primaries and unknown transfer function). This currently
gets translated to bt601 or bt709 depending on resolution.
Both cases result in a negotiation failure:

    ERROR: from element /GstPipeline:pipeline0/v4l2video0convert:v4l2video0convert0: Device '/dev/video0' does not support 1:4:0:0 colorimetry

Improve the guessing game by selecting JPEG colorimetry (JPEG colorspace
with sRGB transfer function) under these specific conditions, and loosen
the matching so that 1:4:0:0 input gets accepted if the device is
actually configured to 1:4:7:1 (V4L2_PIX_FMT_JPEG default).

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

6 years agov4l2object: stop V4L2 from zeroing extended colorimetry for non-mplane
Philipp Zabel [Thu, 9 Aug 2018 15:24:35 +0000 (17:24 +0200)]
v4l2object: stop V4L2 from zeroing extended colorimetry for non-mplane

Setting the priv field to a magic value stops V4L2 core from zeroing
the extended colorimetry fields quantization, ycbcr_enc, and xfer_func
for non-mplane queues.

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

6 years agov4l2: Remove a trailing whitespace
Zeeshan Ali [Sun, 19 Aug 2018 13:39:16 +0000 (15:39 +0200)]
v4l2: Remove a trailing whitespace

Otherwise, the latest gst-indent check doesn't pass.

6 years agomeson: add options to disable gobject cast checks and glib asserts
Tim-Philipp Müller [Sat, 18 Aug 2018 20:08:55 +0000 (21:08 +0100)]
meson: add options to disable gobject cast checks and glib asserts

... and define G_DISABLE_DEPRECATED for development versions,
like we do in autotools.

6 years agomeson: find libjpeg via pkg-config
Tim-Philipp Müller [Sat, 18 Aug 2018 20:01:52 +0000 (21:01 +0100)]
meson: find libjpeg via pkg-config

This effectively (but optionally) requires libjpeg-turbo which
ships with a .pc file and is what pretty much everyone these days
uses anyway for libjpeg, so shouldn't be a problem hopefully.

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

6 years agoudpsrc: Fix build when SO_RCVBUFFORCE is not defined
Nicolas Dufresne [Fri, 17 Aug 2018 21:35:43 +0000 (17:35 -0400)]
udpsrc: Fix build when SO_RCVBUFFORCE is not defined

This shoudl fix the mingw build.

6 years agoudpsrc: Balance Linux value of get/set_rcvbuf
Nicolas Dufresne [Fri, 17 Aug 2018 18:17:39 +0000 (14:17 -0400)]
udpsrc: Balance Linux value of get/set_rcvbuf

On Linux, the kernel returns twice the size as it will allocate extra
space for accouting. We devides this value by two in order to ensure
that get/set value now match. This fixes the set buffer size validation
and allow having a nice warning when the size if surpassed and the
process does not have CAP_NET_ADMIN capabilities.

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

6 years agoupdsrc: set udp buffer size forcibly
Guillaume Desmottes [Fri, 17 Aug 2018 12:05:04 +0000 (14:05 +0200)]
updsrc: set udp buffer size forcibly

The udp buffer size is limited to a maximum of around 100K.
Some apps need to set the force bufsize for their own operation.
Use the SO_RCVBUFFORCE option in order to override the rmem_max limit
of linux kernel. Require user to have the CAP_NET_ADMIN privilege to
work.

Original patch from Kyungnam Bae <kyungnam.bae@lge.com>

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

6 years agoudpsrc: factor out gst_udpsrc_get_rcvbuf()
Guillaume Desmottes [Fri, 17 Aug 2018 11:59:00 +0000 (13:59 +0200)]
udpsrc: factor out gst_udpsrc_get_rcvbuf()

No semantic change.

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

6 years agomeson: Rename caca option to libcaca
Nirbheek Chauhan [Fri, 17 Aug 2018 13:41:21 +0000 (19:11 +0530)]
meson: Rename caca option to libcaca

All options must match the plugin directory name.

6 years agomeson: Add build files for osxaudio, osxvideo, waveform
Nirbheek Chauhan [Fri, 17 Aug 2018 13:26:54 +0000 (18:56 +0530)]
meson: Add build files for osxaudio, osxvideo, waveform

osxaudio is for macOS and iOS
osxvideo is for macOS
waveform is for Windows

6 years agodocs: update for changes in master
Tim-Philipp Müller [Fri, 17 Aug 2018 13:44:26 +0000 (14:44 +0100)]
docs: update for changes in master

6 years agoexamples: dist qt examples
Tim-Philipp Müller [Fri, 17 Aug 2018 10:45:47 +0000 (11:45 +0100)]
examples: dist qt examples

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

6 years agomeson: Add an option for tests
Nirbheek Chauhan [Thu, 16 Aug 2018 18:57:59 +0000 (00:27 +0530)]
meson: Add an option for tests

This is needed because we don't always have gstreamer-check available,
for instance inside Cerbero on iOS.

6 years agomp4 robust muxing: improve documentation and logging
Mathieu Duponchelle [Thu, 16 Aug 2018 16:55:29 +0000 (18:55 +0200)]
mp4 robust muxing: improve documentation and logging

6 years agortph26*pay: Update param set timestamp even if parameters unchanged
Jan Alexander Steffens (heftig) [Tue, 3 Jul 2018 21:11:56 +0000 (23:11 +0200)]
rtph26*pay: Update param set timestamp even if parameters unchanged

rtph264pay and rtph265pay skip updating the parameter set timestamp if
the units they see contain no new configuration. This can result in
them injecting duplicate parameters.

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

6 years agortspsrc: Add support for SET_PARAMETER and GET_PARAMETER using signals
Ulf Olsson [Wed, 15 Aug 2018 11:43:53 +0000 (13:43 +0200)]
rtspsrc: Add support for SET_PARAMETER and GET_PARAMETER using signals

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

6 years agosplitmuxsink: Don't leak old muxer/sink in async mode
Jan Schmidt [Tue, 14 Aug 2018 16:28:20 +0000 (02:28 +1000)]
splitmuxsink: Don't leak old muxer/sink in async mode

Make sure to clear the reference taken earlier in the function
when switching muxer/sink asynchronously so they don't leak

6 years agosplitmuxsink: Fix reference counting loop
Jan Schmidt [Tue, 14 Aug 2018 16:10:25 +0000 (02:10 +1000)]
splitmuxsink: Fix reference counting loop

The stream context was holding a reference to the
internal queue and pads, with pad probes that were
in turn holding references to the stream context.

This lead to a leak if the request pads weren't explicitly
released.

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

6 years agoaacparse: fix codec_data buffer leak
Roland Jon [Sat, 11 Aug 2018 08:45:25 +0000 (16:45 +0800)]
aacparse: fix codec_data buffer leak

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

6 years agoqtdemux: Handle closed captions as subtitle streams
Sebastian Dröge [Thu, 2 Aug 2018 13:12:45 +0000 (16:12 +0300)]
qtdemux: Handle closed captions as subtitle streams

6 years agov4l2src: fix first input used is always used next times
Iñigo Huguet [Thu, 2 Aug 2018 06:40:17 +0000 (08:40 +0200)]
v4l2src: fix first input used is always used next times

The input from an v4l2 device that was used the first time was
remembered for next times, and set again always the pipeline is
set to READY state. This was making that users wasn't able to
select a different input without having to create a new pipeline.

This patch makes that v4l2src element forget previous used input
when going to NULL state, so it will check again for the current
selected input when going again to READY state. Users can change
to NULL state, select a new input with a VIDIOC_S_INPUT ioctl
and change to PLAYING again.

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

6 years agoqtmux: The sample size we have to reserve is 256+8 bytes for the header for CDP packets
Sebastian Dröge [Thu, 2 Aug 2018 10:40:09 +0000 (13:40 +0300)]
qtmux: The sample size we have to reserve is 256+8 bytes for the header for CDP packets

6 years agoqtmux: Properly allocate 256 bytes per CDP packet in prefill mode
Sebastian Dröge [Thu, 2 Aug 2018 09:27:45 +0000 (12:27 +0300)]
qtmux: Properly allocate 256 bytes per CDP packet in prefill mode

Instead of allowing 256 but only pre-allocating 100.

6 years agoRevert "qtmux: Allow for CDP packets up to 320 bytes"
Sebastian Dröge [Thu, 2 Aug 2018 09:27:17 +0000 (12:27 +0300)]
Revert "qtmux: Allow for CDP packets up to 320 bytes"

This reverts commit 5eed1d49bdb7e7a632c7135656c482ed38a6ac2a.

255 is actually the maximum, there's a bug if more is arriving.

6 years agoqtmux: Allow for CDP packets up to 320 bytes
Sebastian Dröge [Wed, 1 Aug 2018 13:50:03 +0000 (16:50 +0300)]
qtmux: Allow for CDP packets up to 320 bytes

Apparently they can be bigger than 256 bytes sometimes.

6 years agortppayload: Fix VP8/VP9/OPUS dual encoding name handling
Nicolas Dufresne [Sat, 14 Jul 2018 02:31:04 +0000 (22:31 -0400)]
rtppayload: Fix VP8/VP9/OPUS dual encoding name handling

All these were copy pasted and would lead to assertion when chained with
rtpmux. This commit rewrite the negotiation with downstream. This also
drop the fallback to ancient names if the pad is unlinked. This was
completly arbitrary decision that made no sense.

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

6 years agoqt: Ensure GL headers are included
Matthew Waters [Wed, 1 Aug 2018 02:06:23 +0000 (12:06 +1000)]
qt: Ensure GL headers are included

Otherwise there may be no valid typedef of GLsync.

...
/usr/include/gstreamer-1.0/gst/gl/gstglfuncs.h:93:24: note: in definition of macro 'GST_GL_EXT_FUNCTION'
   ret (GSTGLAPI *name) args;
                        ^~~~
/usr/include/gstreamer-1.0/gst/gl/glprototypes/sync.h:33:23: error: 'GLsync' has not been declared
                      (GLsync sync))
                       ^~~~~~
...

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

6 years agomeson: Fix oss4 header checks
Nirbheek Chauhan [Tue, 31 Jul 2018 21:48:58 +0000 (03:18 +0530)]
meson: Fix oss4 header checks

Otherwise, oss4 ends up getting built when force-disabled.