platform/upstream/gst-plugins-good.git
5 years agoRelease 1.16.1
Tim-Philipp Müller [Mon, 23 Sep 2019 10:09:38 +0000 (11:09 +0100)]
Release 1.16.1

5 years agoUpdate docs
Tim-Philipp Müller [Mon, 23 Sep 2019 10:09:38 +0000 (11:09 +0100)]
Update docs

5 years agoUpdate translations
Tim-Philipp Müller [Mon, 23 Sep 2019 10:09:37 +0000 (11:09 +0100)]
Update translations

5 years agoalpha: Fix one_over_kc calculation
Doug Nazar [Mon, 9 Sep 2019 00:43:17 +0000 (20:43 -0400)]
alpha: Fix one_over_kc calculation

On arm/aarch64, converting from float directly to unsigned int uses
a different opcode and negative numbers result in 0. Cast to
signed int first.

5 years agovalgrind: suppress Cond error coming from gnutls
Mathieu Duponchelle [Wed, 7 Aug 2019 22:29:25 +0000 (18:29 -0400)]
valgrind: suppress Cond error coming from gnutls

taken from https://salsa.debian.org/debian/flatpak/commit/fb4a8dda211c4bc036781f2b0d706266e95ce068

5 years agosupp: Ignore leaks caused by shout/sethostent
Nicolas Dufresne [Tue, 4 Jun 2019 17:39:00 +0000 (13:39 -0400)]
supp: Ignore leaks caused by shout/sethostent

sethostent() seems to be using a global state and we endup with leaks from
that API when called through shout_init(). We had the option to only
ignore the shout case, but the impression is that if we have shout and
another sethostend user, as it's a global state, we may endup with a
different stack trace for the same leak. So in the end, we just ignore
memory allocated by sethostent in general.

5 years agosouphttpsrc: Fix incompatible type build warning
Seungha Yang [Wed, 21 Aug 2019 15:18:51 +0000 (00:18 +0900)]
souphttpsrc: Fix incompatible type build warning

gstsouphttpsrc.c(2191): warning C4133:
  '=': incompatible types - from 'guint (__cdecl *)(GType)' to 'GstURIType (__cdecl *)(GType)'

5 years agortpjitterbuffer: max-dropout-time gets cast to int32
Olivier Crête [Fri, 24 May 2019 14:31:39 +0000 (10:31 -0400)]
rtpjitterbuffer: max-dropout-time gets cast to int32

So any value over MAXINT32 gets considered as negative and is silently ignored.

5 years agortpjitterbuffer: Clear clock master before unreffing
Jan Schmidt [Fri, 14 Jun 2019 16:00:43 +0000 (02:00 +1000)]
rtpjitterbuffer: Clear clock master before unreffing

Make sure to clear any master clock on the media_clock
before unreffing it to release the timer callback that's
updating the clock and keeping it reffed.

5 years agoqtdemux: Use empty-array safe way to cleanup GPtrArray
Seungha Yang [Thu, 1 Aug 2019 06:02:23 +0000 (15:02 +0900)]
qtdemux: Use empty-array safe way to cleanup GPtrArray

Fix assertion fail
GLib-CRITICAL **: g_ptr_array_remove_range: assertion 'index_ < rarray->len' failed

5 years agov4l2: Fix type compatibility issue with glibc 2.30
Nicolas Dufresne [Wed, 7 Aug 2019 02:27:40 +0000 (22:27 -0400)]
v4l2: Fix type compatibility issue with glibc 2.30

From now on, we will use linux/types.h on Linux, and use typedef of the
various flavour of BSD.

Fixes #635

5 years agortpfunnel: forward correct segment when switching pad
Mathieu Duponchelle [Wed, 31 Jul 2019 19:55:16 +0000 (21:55 +0200)]
rtpfunnel: forward correct segment when switching pad

Forwarding a single segment event from the pad that first gets
chained is incorrect: when that first event was sent by an element
such as x264enc, with its offset start, we end pushing out of segment
buffers for the other pad(s).

Instead, everytime the active pad changes, forward the appropriate
segment event.

Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/issues/1028

5 years agogtkglsink: fix crash when widget is resized after element destruction
Guillaume Desmottes [Thu, 25 Jul 2019 15:51:26 +0000 (21:21 +0530)]
gtkglsink: fix crash when widget is resized after element destruction

Prevent _size_changed_cb() to be called after gtkglsink has been finalized.

Fix #632

5 years agojpegdec: Don't dereference NULL input state if we have no caps in TIME segments
Sebastian Dröge [Thu, 25 Jul 2019 12:08:54 +0000 (15:08 +0300)]
jpegdec: Don't dereference NULL input state if we have no caps in TIME segments

Simply assume that the JPEG frame is not going to be interlaced instead
of crashing.

5 years agortp: opuspay: fix memory leak in gst_rtp_opus_pay_setcaps.
Knut Andre Tidemann [Mon, 22 Jul 2019 08:28:50 +0000 (10:28 +0200)]
rtp: opuspay: fix memory leak in gst_rtp_opus_pay_setcaps.

The src caps were never dereferenced, causing a memory leak.

5 years agov4l2videodec: Fix drain() function return type
Song Bing [Wed, 13 Jun 2018 21:55:29 +0000 (14:55 -0700)]
v4l2videodec: Fix drain() function return type

Return right type for drain() function.

5 years agortpssrcdemux: Avoid taking streamlock out-of-band
Nicolas Dufresne [Tue, 21 May 2019 19:25:03 +0000 (15:25 -0400)]
rtpssrcdemux: Avoid taking streamlock out-of-band

In this change we now protect the internal srcpads list using the
stream lock and limit usage of the internal stream lock to
preventing data flowing on the other src pad type while creating
and signalling the new pad.

This fixes a deadlock with RTPBin shutdown lock. These two locks would
end up being taken in two different order, which caused a deadlock. More
generally, we should not rely on a streamlock when handling out-of-band
data, so as a side effect, we should not take a stream lock when
iterating internal links.

5 years agov4l2bufferpool: return TRUE when buffer pool orphaning succeeds
Damian Hobson-Garcia [Thu, 30 May 2019 02:13:07 +0000 (11:13 +0900)]
v4l2bufferpool: return TRUE when buffer pool orphaning succeeds

When trying to orphan a buffer pool, successfully return and unref
the pool when the pool is either successfully stopped or orphaned.
Indicate failure and leave the pool untouched otherwise.

5 years agov4l2bufferpool: Free orphaned allocator resources when buffers are released
Damian Hobson-Garcia [Thu, 30 May 2019 04:12:31 +0000 (13:12 +0900)]
v4l2bufferpool: Free orphaned allocator resources when buffers are released

Allocator resources cannot be freed when a buffer pool is orphaned
while its buffers are in use. They should, however, be freed once those
buffers are no longer needed. This patch disposes of any buffers
belonging to an orphaned pool as they are released, and makes sure
that the allocator is cleaned up when the last buffer is returned.

5 years agov4l2object: Orphan buffer pool on object_stop if supported
Damian Hobson-Garcia [Mon, 27 May 2019 09:08:54 +0000 (18:08 +0900)]
v4l2object: Orphan buffer pool on object_stop if supported

Use V4L2 buffer orphaning, on recent kernels so that
the device can be restarted immediately with
a new buffer pool during renogatiation.

5 years agosplitmuxsink: Only set running time on finalizing sink element when in async-finalize...
Sebastian Dröge [Wed, 22 May 2019 15:06:04 +0000 (18:06 +0300)]
splitmuxsink: Only set running time on finalizing sink element when in async-finalize mode

There is only a single sink element in async-finalize mode, and we would
keep the running time from previous fragments set in that case. As we
don't ever set the running time for the very last fragment on EOS, this
would mean that the closing time reported for the very last fragment is
the same as the closing time of the previous fragment.

5 years agortpsession: Always keep at least one NACK on early RTCP
Nicolas Dufresne [Tue, 14 May 2019 21:36:14 +0000 (17:36 -0400)]
rtpsession: Always keep at least one NACK on early RTCP

We recently added code to remove outdate NACK to avoid using bandwidth
for packet that have no chance of arriving on time. Though, this had a
side effect, which is that it was to get an early RTCP packet with no
feedback into it. This was pretty useless but also had a side effect,
which is that the RTX RTT value would never be updated. So we we stared
having late RTX request due to high RTT, we'd never manage to recover.

This fixes the regression by making sure we keep at least one NACK in
this situation. This is really light on the bandwidth and allow for
quick recover after the RTT have spiked higher then the jitterbuffer
capacity.

5 years agortpsession: Call on-new-ssrc earlier
Nicolas Dufresne [Wed, 24 Apr 2019 17:47:54 +0000 (13:47 -0400)]
rtpsession: Call on-new-ssrc earlier

Right now, we may call on-new-ssrc after we have processed the first
RTP packet. This prevents properly configuring the source as some
property like "probation" are copied internally for use as a
decreasing counter. For this specific property, it prevents the
application from disabling probation on auxiliary sparse stream.

Probation is harmful on sparse streams since the probation algorithm
assume frequent and contiguous RTP packets.

5 years agortpsource: Add more information to probation warning
Nicolas Dufresne [Wed, 24 Apr 2019 17:54:12 +0000 (13:54 -0400)]
rtpsource: Add more information to probation warning

5 years agortspsrc: do not try to send EOS with invalid seqnum
Thiago Santos [Fri, 3 May 2019 05:14:35 +0000 (22:14 -0700)]
rtspsrc: do not try to send EOS with invalid seqnum

The second udpsrc (rtcp) might not have seen the segment event if it was
not enabled or if rtcp is not available on the server. So if the
application tries to send an EOS event it will try to set an invalid
seqnum to the event.

5 years agortprawdepay: Don't get rid of the buffer pool on FLUSH_STOP
Sebastian Dröge [Wed, 1 May 2019 07:00:51 +0000 (10:00 +0300)]
rtprawdepay: Don't get rid of the buffer pool on FLUSH_STOP

We expect there to be a pool as long as the caps are known and
FLUSH_STOP is not resetting the caps. Getting rid of the pool would
cause assertions.

Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/issues/584

5 years agortpbin: Free storage when freeing session
Danny Smith [Fri, 8 Feb 2019 09:09:17 +0000 (10:09 +0100)]
rtpbin: Free storage when freeing session

5 years agoscaletempo: Advertise interleaved layout in caps templates
Philippe Normand [Tue, 23 Apr 2019 09:10:01 +0000 (10:10 +0100)]
scaletempo: Advertise interleaved layout in caps templates

Scaletempo doesn't support non-interleaved layout. Not explicitely stating this
would trigger critical warnings and a caps negotiation failure when scaletempo
is used as playbin audio-filter.

Patch suggested by George Kiagiadakis <george.kiagiadakis@collabora.com>.

Fixes #591

5 years agoci: use template from 1.16 branch
Tim-Philipp Müller [Thu, 2 May 2019 11:35:21 +0000 (12:35 +0100)]
ci: use template from 1.16 branch

5 years agoRelease 1.16.0
Tim-Philipp Müller [Thu, 18 Apr 2019 23:23:16 +0000 (00:23 +0100)]
Release 1.16.0

5 years agoUpdate docs
Tim-Philipp Müller [Thu, 18 Apr 2019 23:23:16 +0000 (00:23 +0100)]
Update docs

5 years agoUpdate translations
Tim-Philipp Müller [Thu, 18 Apr 2019 23:23:14 +0000 (00:23 +0100)]
Update translations

5 years agoqmlglsink: fix compilation with Qt >= 5.5 on Windows
Benjamin Sigonneau [Thu, 18 Apr 2019 15:14:18 +0000 (17:14 +0200)]
qmlglsink: fix compilation with Qt >= 5.5 on Windows

As of Qt >= 5.5, qmake do not link to opengl32 by default anymore. This commit adds opengl32.lib to the .pro
file so that the plugin can be build using QtCreator on Windows.

5 years agomeson: Build qt plugin in C++11 mode explicitly
Nirbheek Chauhan [Wed, 17 Apr 2019 10:18:26 +0000 (15:48 +0530)]
meson: Build qt plugin in C++11 mode explicitly

This works implicitly most of the time, but we need to set it
explicitly for building with Android.

5 years agov4l2: fix use after free when handling events
Guillaume Desmottes [Tue, 16 Apr 2019 09:05:06 +0000 (14:35 +0530)]
v4l2: fix use after free when handling events

The sink_event parent function may consume the event so we shouldn't use
it after having calling it.

5 years agoRelease 1.15.90
Tim-Philipp Müller [Wed, 10 Apr 2019 23:26:58 +0000 (00:26 +0100)]
Release 1.15.90

5 years agoUpdate docs
Tim-Philipp Müller [Wed, 10 Apr 2019 23:26:58 +0000 (00:26 +0100)]
Update docs

5 years agortpulpfecdec,enc: unbreak plugin gtk-doc build in autotools
Tim-Philipp Müller [Tue, 9 Apr 2019 22:51:22 +0000 (23:51 +0100)]
rtpulpfecdec,enc: unbreak plugin gtk-doc build in autotools

Fix doc chunks to not use that syntax for links that have the
url as description, it will be put verbatim into the xml/*.xml
file and then the expat parser will throw a syntax error like:

  File "../../common/mangle-db.py", line 71, in <module>
    main()
  File "../../common/mangle-db.py", line 69, in main
    patch (details.replace("-details", ""), os.path.basename(details))
  File "../../common/mangle-db.py", line 20, in patch
    doc = xml.dom.minidom.parse(related)
  File "/usr/lib/python2.7/xml/dom/minidom.py", line 1918, in parse
    return expatbuilder.parse(file)
  File "/usr/lib/python2.7/xml/dom/expatbuilder.py", line 924, in parse
    result = builder.parseFile(fp)
  File "/usr/lib/python2.7/xml/dom/expatbuilder.py", line 207, in parseFile
    parser.Parse(buffer, 0)
xml.parsers.expat.ExpatError: not well-formed (invalid token): line 84, column 7

5 years agortpvrawpay: preserve GST_BUFFER_FLAG_DISCONT on the first outputted buffer
Antonio Ospite [Mon, 8 Apr 2019 09:35:34 +0000 (11:35 +0200)]
rtpvrawpay: preserve GST_BUFFER_FLAG_DISCONT on the first outputted buffer

If the incoming frame buffer has GST_BUFFER_FLAG_DISCONT set this should
be preserved and set for the first output buffer too, like other
payloaders do.

Spotted with gst-validate-1.0 when adding integration tests for
rtpsession, a minimal test to reproduce the issue is:

$ gst-validate-1.0 videotestsrc num-buffers=1 ! rtpvrawpay ! identity ! fakesink
Starting pipeline
Pipeline started
   warning : Buffer didn't have expected DISCONT flag333 speed: 1.000000 />
             Detected on <identity0:sink>
             Detected on <identity0:src>
             Detected on <fakesink0:sink>
             Description : Buffers after SEGMENT and FLUSH must have a DISCONT flag

Issues found: 1

=======> Test PASSED (Return value: 0)

5 years agortpulpfec*: Replace github URIs with gitlab.fdo ones
Olivier Crête [Fri, 22 Mar 2019 16:42:14 +0000 (12:42 -0400)]
rtpulpfec*: Replace github URIs with gitlab.fdo ones

5 years agortpred*: Add example pipelines
Olivier Crête [Thu, 21 Mar 2019 21:01:11 +0000 (17:01 -0400)]
rtpred*: Add example pipelines

5 years agortpulpfec*: Improve documentation
Olivier Crête [Thu, 21 Mar 2019 20:48:37 +0000 (16:48 -0400)]
rtpulpfec*: Improve documentation

5 years agortpstorage + rtpulpfecdec: Get the storage using a query as fallback
Olivier Crête [Wed, 20 Mar 2019 22:31:48 +0000 (18:31 -0400)]
rtpstorage + rtpulpfecdec: Get the storage using a query as fallback

This allows it to be used using gst-launch for easier testing.

5 years agoosxvideo: fix mac os 10.14 build
Dan Kegel [Tue, 19 Mar 2019 13:22:29 +0000 (06:22 -0700)]
osxvideo: fix mac os 10.14 build

lockFocusIfCanDraw is deprecated in mac os 10.14.  Apple suggests a
different way to do what that does, but for now, just suppress the deprecation.

There's no way to disable just that deprecation, so shut them all down.

OpenGL is also deprecated in mac os 10.14.  There is a gentle way to
turn off just those deprecations (GL_SILENCE_DEPRECATION), but since
this commit turns them all off, that's moot.

https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/issues/577

5 years agotest: rtpsession: Verify on-sending-nacks callback
Nicolas Dufresne [Sun, 7 Apr 2019 16:00:49 +0000 (12:00 -0400)]
test: rtpsession: Verify on-sending-nacks callback

5 years agortpsession: Allow overriding NACK packet creation
Nicolas Dufresne [Wed, 27 Mar 2019 20:19:15 +0000 (16:19 -0400)]
rtpsession: Allow overriding NACK packet creation

This introduce a new signal on RTSession, on-sending-nacks is emited
right before the list of seqnums to be nacked are processed and
transformed into FB Nack. This allow implementing custom nacks
handling through another mechanism with APP feedback.

5 years agortpsession: Add disable-sr-timestamp property
Mathieu Duponchelle [Tue, 20 Nov 2018 01:45:04 +0000 (02:45 +0100)]
rtpsession: Add disable-sr-timestamp property

The Onvif Streaming Spec, in section 6.11, mandates that when
Rate-Control is disabled potential RTCP packets shall have
their timestamps set to 0.

<https://www.onvif.org/specs/stream/ONVIF-Streaming-Spec.pdf>

5 years agov4l2: remove __user define from types-compat.h
Philipp Zabel [Tue, 5 Mar 2019 19:57:44 +0000 (20:57 +0100)]
v4l2: remove __user define from types-compat.h

Remove the now unused __user define.

5 years agov4l2object: use opRGB colorspace and xfer func defines
Philipp Zabel [Tue, 5 Mar 2019 19:53:47 +0000 (20:53 +0100)]
v4l2object: use opRGB colorspace and xfer func defines

AdobeRGB defines have been renamed to opRGB in the kernel headers,
use the new names.

5 years agov4l2videodec: support orphaning
Philipp Zabel [Thu, 24 Jan 2019 15:12:13 +0000 (16:12 +0100)]
v4l2videodec: support orphaning

Recent kernels allow REQBUFS(0) on a queue that still has buffers in
use (mmapped or exported via dmabuf), orphaning all buffers on the queue.
If this is supported, the v4l2videodec element does not have to send a
drain request downstream.

5 years agov4l2bufferpool: support orphaning
Philipp Zabel [Thu, 24 Jan 2019 15:12:13 +0000 (16:12 +0100)]
v4l2bufferpool: support orphaning

Now that the v4l2allocator allows orphaning the V4L2 buffer queue, add
support for orphaning in the v4l2bufferpool. gst_v4l2_buffer_pool_orphan
can be used as a replacement for gst_v4l2_buffer_pool_stop, without
having to wait for buffers to be returned to the pool.

5 years agov4l2allocator: support orphaning
Philipp Zabel [Thu, 24 Jan 2019 15:12:13 +0000 (16:12 +0100)]
v4l2allocator: support orphaning

Recent kernels allow REQBUFS(0) on a queue that still has buffers in
use (mmapped or exported via dmabuf), orphaning all buffers on the queue.

Orphaning the allocator causes it to release all buffers with
REQBUFS(0), even if they are still in use. An orphaned allocator can
only be stopped. It can not be restarted or create new buffers.

5 years agov4l2: update kernel headers to latest from media tree
Philipp Zabel [Thu, 24 Jan 2019 14:36:49 +0000 (15:36 +0100)]
v4l2: update kernel headers to latest from media tree

Update to the latest installed headers (output of make headers_install)
from the media tree, keeping the slight modifications to the includes.

This includes new HEVC controls, the AdobeRGB -> opRGB rename, a new
capabilities field for v4l2_requestbuffers and v4l2_create_buffers, new
32-bit YUV formats, and request_fd changes.

5 years agoshout2: Fix leak on error in start
Nicolas Dufresne [Wed, 3 Apr 2019 18:13:49 +0000 (14:13 -0400)]
shout2: Fix leak on error in start

5 years agotest: rtpsession: Test FB Nack packing
Nicolas Dufresne [Sat, 30 Mar 2019 02:48:53 +0000 (22:48 -0400)]
test: rtpsession: Test FB Nack packing

We used to split the NACK if a smaller seqnum of a range of seqnum was
submited. This test also make sure that the three operations (append,
prepend, update) works properly.

5 years agotest: rtpsession: Test handling of NACK surplus
Nicolas Dufresne [Sat, 30 Mar 2019 02:34:47 +0000 (22:34 -0400)]
test: rtpsession: Test handling of NACK surplus

This test verify that NACKs that didn't fit in one packet are properly
filtered and inserted into the following pipeline.

5 years agortpsession: Send as many nack seqnum as possible
Nicolas Dufresne [Mon, 25 Mar 2019 17:42:25 +0000 (13:42 -0400)]
rtpsession: Send as many nack seqnum as possible

In order to do that, we now split the nacks registration from the actual
FB nack packet construction. We then try and add as many FB Nacks as
possible into the active packets and leave the remaining seqnums in the
RTPSource. In order to avoid sending outdated NACK later on, we save the
seqnum calculated deadline and cleanup the outdated seqnums before the
next RTCP send.

Fixes #583

5 years agortpsession: Fix race when sending PLI, FIR and NACK packets
John Bassett [Mon, 30 Apr 2018 08:54:19 +0000 (10:54 +0200)]
rtpsession: Fix race when sending PLI, FIR and NACK packets

Calling rtp_session_send_rtcp before marking the source as requiring a
pli/fir/nack meant the rtcp_thread could be scheduled and start running
before the source was updated. This meant the request would not be sent
early but instead was transmitted with the next regular RTCP packet.

Add test for nack generation.

5 years agortpsession: Fix early rtcp time comparision
Nicolas Dufresne [Fri, 29 Mar 2019 20:49:37 +0000 (16:49 -0400)]
rtpsession: Fix early rtcp time comparision

If the current time is equal to the early rtcp time deadline, there is
no need to schedule a timer. This ensure that immediate feedback is
really immediate and simplify implementing unit tests with the test
clock, which stops perfectly on the timeout time.

This fix has been extracted from Pexip feature patch called
  "rtpsession: Allow instant transmission of RTCP packets"

5 years agov4l2src: preserve features when fixating caps
Guillaume Desmottes [Thu, 24 Jan 2019 10:54:49 +0000 (11:54 +0100)]
v4l2src: preserve features when fixating caps

The caps features were lost when sorting caps structures in
gst_v4l2src_fixate(). This was breaking alternate as
GST_CAPS_FEATURE_FORMAT_INTERLACED was removed from the caps.

5 years agortpgstpay: Set DELTA_UNIT flag when appropriate
Mathieu Duponchelle [Tue, 13 Nov 2018 20:23:30 +0000 (21:23 +0100)]
rtpgstpay: Set DELTA_UNIT flag when appropriate

When used in combination with a rtponviftimestamp element
downstream, forwarding this flag ensures it gets correctly
serialized in the ONVIF header extension.

5 years agodocs: fix typo s/abonormally/abnormally/
Antonio Ospite [Wed, 3 Apr 2019 14:42:26 +0000 (16:42 +0200)]
docs: fix typo s/abonormally/abnormally/

5 years agodocs: fix typo s/incomming/incoming/
Antonio Ospite [Wed, 3 Apr 2019 14:38:56 +0000 (16:38 +0200)]
docs: fix typo s/incomming/incoming/

5 years agortp: fix indentation after G_DEFINE_TYPE
Antonio Ospite [Wed, 3 Apr 2019 14:34:22 +0000 (16:34 +0200)]
rtp: fix indentation after G_DEFINE_TYPE

A missing colon after G_DEFINE_TYPE declaration was confusing gst-indent
and causing problem in the pre-commit hook.

Add the missing colon and fix the following function declaration to
follow the normal GStreamer style.

5 years agortpsession: fix comment to refer to buffers instead of groups
Antonio Ospite [Thu, 7 Mar 2019 14:34:03 +0000 (15:34 +0100)]
rtpsession: fix comment to refer to buffers instead of groups

One comments in gst_rtp_session_chain_send_rtp_common() is referring to
groups in a buffer list, however this concept of "group" comes from
GStreamer 0.10 and does not exist anymore in GStreamer 1.0, so update the
comment to refer to buffers instead.

5 years agortpsource: add comment to explain why probation queue is not always cleared
Antonio Ospite [Wed, 6 Mar 2019 08:52:45 +0000 (09:52 +0100)]
rtpsource: add comment to explain why probation queue is not always cleared

5 years agotest: rtpbin_buffer_list: add test to verify that stats are correct
Antonio Ospite [Tue, 2 Apr 2019 10:51:04 +0000 (12:51 +0200)]
test: rtpbin_buffer_list: add test to verify that stats are correct

Add a test to verify that stats about sent and received packets are
correct even when using buffer lists.

NOTE: the newly introduced get_session_source_stats() selects the
desired source (sender or receiver) by filtering them by type (using the
get_sender parameter) rather than by ssrc because this simplifies the
code and it's good enough for testing purposes as there is usually one
source per type in the test setup.

Filtering by ssrc would have required handling asynchronous signals like
"on-new-sender-ssrc", with the relative locking, just to retrieve the
actual ssrc of the sender.

5 years agortpsource: fix stats about received packets
Antonio Ospite [Tue, 5 Mar 2019 12:43:12 +0000 (13:43 +0100)]
rtpsource: fix stats about received packets

The update_receiver_stats() function is called also when sending packets
in rtp_source_send_rtp(), and sending packets may happen using a buffer
list rather than individual buffers.

So update the stats using the actual number of packets sent.

NOTE: this is fine for the receive path too (rtp_process_send_rtp)
because the receive path does not support buffer lists and
pinfo->packets would always be equal to 1 in this case.

5 years agotest: rtpbin_buffer_list: move buffer list creation next to its validation
Antonio Ospite [Mon, 11 Mar 2019 09:08:21 +0000 (10:08 +0100)]
test: rtpbin_buffer_list: move buffer list creation next to its validation

The tests create a buffer list and then use the chain_list callback to
verify that the correct packets have been pushed.

Move the creation and validation code next to each other so that the
reader can more easily understand what is going on.

While at it add some comments to introduce the two related functions.

5 years agotest: rtpbin_buffer_list: set the chain_list function directly in the test
Antonio Ospite [Wed, 6 Mar 2019 18:27:01 +0000 (19:27 +0100)]
test: rtpbin_buffer_list: set the chain_list function directly in the test

The helper function set_chain_function does not really do anything useful, remove it.

5 years agotest: rtpbin_buffer_list: make check_packet more flexible
Antonio Ospite [Wed, 6 Mar 2019 18:19:03 +0000 (19:19 +0100)]
test: rtpbin_buffer_list: make check_packet more flexible

Make it possible to differentiate between the position in the list and
the packet index in the global structures in check_packet, in some
future case the list may change, in case some element removes a buffer
from the list, and the two indices may not coincide.

5 years agotest: rtpbin_buffer_list: factor out a function to create packets buffers
Antonio Ospite [Tue, 5 Mar 2019 11:47:29 +0000 (12:47 +0100)]
test: rtpbin_buffer_list: factor out a function to create packets buffers

5 years agotest: rtpbin_buffer_list: check if the chain_list function has been called
Antonio Ospite [Mon, 4 Mar 2019 10:27:33 +0000 (11:27 +0100)]
test: rtpbin_buffer_list: check if the chain_list function has been called

Make the test more useful to verify that the chain list function has
actually been called.

5 years agotest: rtpbin_buffer_list: port to GStreamer 1.0
Antonio Ospite [Wed, 27 Feb 2019 11:27:21 +0000 (12:27 +0100)]
test: rtpbin_buffer_list: port to GStreamer 1.0

Port the rtpbin_buffer_list test to GStreamer 1.0 and re-enable it.

Some other changes include:
  - the check on the caps has been moved from the buffer level to the
    pad level;
  - remove underscore prefix from static functions names, this is not
    idiomatic in C and rarely used in the other tests;
  - the unused header_buffer variable has been removed;
  - check_group() has been renamed to check_packet() because in
    GStreamer 1.0 there is no concept of "group" anymore, the comments
    have also been updated to reflect this.

5 years agotests: jpegdec: bump discoverer timeout for valgrind
Tim-Philipp Müller [Mon, 1 Apr 2019 17:20:53 +0000 (18:20 +0100)]
tests: jpegdec: bump discoverer timeout for valgrind

Tests might take a bit longer, esp. when run under valgrind
and/or they're running on the CI with other things going on,
so let's just bump the timeout to something higher and let
the test runner time us out if needed.

5 years agomeson: Only ensure that moc is available on Linux
Nirbheek Chauhan [Mon, 1 Apr 2019 12:50:28 +0000 (18:20 +0530)]
meson: Only ensure that moc is available on Linux

On other OSes, it's not possible to have qmake or the qt5 pkg-config
files and not have moc, and `moc` will not be in `PATH`, so this only
causes problems.

5 years agortpstorage: Limit the queue size
Olivier Crête [Thu, 21 Mar 2019 22:24:43 +0000 (18:24 -0400)]
rtpstorage: Limit the queue size

Limit to the queue size in case there is no arrival time or in case there is
a huge flood of packets.

5 years agortpbin: Request the FEC decoder even if ignore-pt is set
Olivier Crête [Mon, 18 Mar 2019 19:30:54 +0000 (15:30 -0400)]
rtpbin: Request the FEC decoder even if ignore-pt is set

5 years agortpbin: Factor out the code that exposes the src pad
Olivier Crête [Mon, 18 Mar 2019 19:27:21 +0000 (15:27 -0400)]
rtpbin: Factor out the code that exposes the src pad

5 years agortpreddec: Add some more debug prints
Olivier Crête [Fri, 22 Mar 2019 06:08:01 +0000 (02:08 -0400)]
rtpreddec: Add some more debug prints

5 years agortpstorage: Issue warning if request by size if 0
Olivier Crête [Thu, 21 Mar 2019 21:32:18 +0000 (17:32 -0400)]
rtpstorage: Issue warning if request by size if 0

If the size is 0, then nothing will ever be in the storage, if a request is
received, it generally implies a misconfigured pipeline.

5 years agortpstorage: Add more debug messages
Olivier Crête [Thu, 21 Mar 2019 21:24:42 +0000 (17:24 -0400)]
rtpstorage: Add more debug messages

5 years agortpstorage: Make debug category available to sub objects
Olivier Crête [Thu, 21 Mar 2019 21:12:53 +0000 (17:12 -0400)]
rtpstorage: Make debug category available to sub objects

5 years agortpstorage: Add debug funcptr to chain function
Olivier Crête [Thu, 21 Mar 2019 21:12:33 +0000 (17:12 -0400)]
rtpstorage: Add debug funcptr to chain function

5 years agoflac: report latency in flacenc and flacdec
Julian Bouzas [Fri, 22 Mar 2019 11:01:01 +0000 (12:01 +0100)]
flac: report latency in flacenc and flacdec

The FLAC specification states that the data is processed in blocks, regardless of the number of channels. Thus, The latency can be calculated using the blocksize and rate. For example a 1 second block sampled at 44.1KHz has a blocksize of 44100

5 years agoexamples: rtsp: fix compiler warning
Tim-Philipp Müller [Fri, 22 Mar 2019 23:36:42 +0000 (23:36 +0000)]
examples: rtsp: fix compiler warning

"control reaches end of non-void function"

5 years agogstrtpsession: Remove set but not use running-time
Nicolas Dufresne [Fri, 22 Mar 2019 19:07:56 +0000 (15:07 -0400)]
gstrtpsession: Remove set but not use running-time

5 years agortpmanager: Register chain functions to debug
Olivier Crête [Tue, 19 Mar 2019 13:50:04 +0000 (09:50 -0400)]
rtpmanager: Register chain functions to debug

5 years agortpbin: Allow reusing the sender AUX bin
Nicolas Dufresne [Wed, 27 Feb 2019 20:49:13 +0000 (15:49 -0500)]
rtpbin: Allow reusing the sender AUX bin

This is needed for the case you don't know in advance all the sessions
you will be using, but would like to place all the related AUX element
in the same GstBin. As per current implementation, each time an sender
AUX bin is requested and returned, RTPBin will walk the src pads and
create sessions for these pads.

In the current implementation, if a src pad already have a sessions, it
returns an error and stops. As a side effect, if an AUX bin is reused in
a following AUX bin request, it can only work if the pads are created on
the last request.

This change simply relax the restriction in order to keep walking, and
just ensure that all newly created pads have a sessions.

5 years agov4l2videoenc: set GstVideoCodecFrame sync point flag
Philipp Zabel [Mon, 25 Jun 2018 15:49:07 +0000 (17:49 +0200)]
v4l2videoenc: set GstVideoCodecFrame sync point flag

The V4L2 elements already set the delta unit buffer flag when dequeueing
the buffer, but gst_video_encoder_finish_frame overwrites it from the
passed codec frame's sync point flag. Set the flag correctly.

5 years agogstrtpsession: improve stats about rtx requests
George Kiagiadakis [Thu, 23 Aug 2018 08:47:14 +0000 (11:47 +0300)]
gstrtpsession: improve stats about rtx requests

5 years agortprtxsend: Improve looging of not found RTX packet
George Kiagiadakis [Wed, 20 Mar 2019 19:45:35 +0000 (15:45 -0400)]
rtprtxsend: Improve looging of not found RTX packet

When an RTX packet is not found, display a message that say if the
packet have not arrived yet or if it was already removed from the RTX
packet queue.

5 years agortpsession: Remove unused rtp_session_create_source
Nicolas Dufresne [Thu, 9 Aug 2018 13:40:26 +0000 (16:40 +0300)]
rtpsession: Remove unused rtp_session_create_source

5 years agomeson: add -Wno-unused also to C++ args when gst debug system is disabled
Tim-Philipp Müller [Thu, 21 Mar 2019 11:17:08 +0000 (11:17 +0000)]
meson: add -Wno-unused also to C++ args when gst debug system is disabled

And check if argument is supported instead of just passing it blindly,
and make meson code slightly cleaner, centralising the argument setting
in one place.

5 years agoUpdate LINGUAS
Piotr Drąg [Sun, 10 Mar 2019 19:30:50 +0000 (19:30 +0000)]
Update LINGUAS

5 years agoqtdemux: Don't pass zero to denominator for framerate
Seungha Yang [Tue, 19 Mar 2019 03:31:35 +0000 (12:31 +0900)]
qtdemux: Don't pass zero to denominator for framerate

Need to respect return of gst_video_guess_framerate() to ensure
non-zero denominator.

This patch is to fix below error with an abnormal (but has valid frame) file.
(gst-play-1.0:17940): GStreamer-CRITICAL **: passed '0' as denominator for `GstFraction'

5 years agov4l2: Set Hardware classifier on encoders
Philippe Normand [Tue, 5 Mar 2019 09:43:47 +0000 (09:43 +0000)]
v4l2: Set Hardware classifier on encoders

5 years agov4l2: Set Hardware classifier on video decoders
Philippe Normand [Wed, 27 Feb 2019 11:56:20 +0000 (11:56 +0000)]
v4l2: Set Hardware classifier on video decoders

5 years agov4l2transform: don't segfault if flushed without pools
Philipp Zabel [Fri, 1 Mar 2019 13:58:24 +0000 (14:58 +0100)]
v4l2transform: don't segfault if flushed without pools

The v4l2output and v4l2capture v4l2objects can have pool == NULL if they
have been stopped before.

5 years agoqtdemux: Find mp4a esds atoms in protected streams sample description tables.
Charlie Turner [Thu, 7 Feb 2019 11:58:19 +0000 (11:58 +0000)]
qtdemux: Find mp4a esds atoms in protected streams sample description tables.

This problem was found in Test. 2 of the YouTube 2018 EME
tests[1]. The code was accidentally not finding an mp4a's esds atom in
the sample description table when the stream was encrypted. It assumed
that if the stream is protected, then only an enca atom will be found
here. What happens with YouTube is they often provide protected
content with a few seconds of clear content, and then switch to the
encrypted stream.

The failure case here was an incorrect codec_data field being sent
into aacparse. The advertisement of stereo audio @ 44.1kHz for the
mp4a (unprotected) stream was incorrect. As usual, the esds contained
the real values here which were mono at 22050 Hz.

Here's what the MP4 tree looks like for these types of files,
demonstrating why the code was making a wrong assumption (or maybe
YouTube is being unusual),

[ftyp] size=8+16
...
[moov] size=8+1571
...
  [trak] size=8+559
...
          [stsd] size=12+234
            entry-count = 2
            [enca] size=8+147
              channel_count = 2
              sample_size = 16
              sample_rate = 44100
              [esds] size=12+27
                ...
            ...
            [mp4a] size=8+67
              channel_count = 2
              sample_size = 16
              sample_rate = 44100
              [esds] size=12+27
                ...

In addition to fixing this, the checks for esds atoms in mp4a and mp4v
have been made symmetrical. While I haven't seen a test case for video
with the same problem, it seemed better to make the same checks. This
also fixes a crash reported from another user[2], they also noted the
asymmetry with mp4v and mp4a.

[1] https://yt-dash-mse-test.commondatastorage.googleapis.com/unit-tests/2018.html?test_type=encryptedmedia-test
[2] https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/issues/398