New upstream version 1.9.2
diff --git a/ChangeLog b/ChangeLog
index 9c4fd2e..053b2a3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,9 +1,1001 @@
-=== release 1.9.1 ===
+=== release 1.9.2 ===
-2016-07-06 Sebastian Dröge <slomo@coaxion.net>
+2016-09-01 Sebastian Dröge <slomo@coaxion.net>
* configure.ac:
- releasing 1.9.1
+ releasing 1.9.2
+
+2016-09-01 11:23:33 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ * po/zh_HK.po:
+ * po/zh_TW.po:
+ po: Update translations
+
+2016-09-01 10:59:51 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * tests/examples/equalizer/demo.c:
+ * tests/examples/spectrum/demo-audiotest.c:
+ * tests/examples/spectrum/demo-osssrc.c:
+ tests/examples: #define GDK_DISABLE_DEPRECATION_WARNINGS
+ We use gdk_cairo_create() which is deprecated since 3.22.
+
+2016-08-31 05:50:44 +1000 Jan Schmidt <jan@centricular.com>
+
+ * sys/osxvideo/Makefile.am:
+ * sys/osxvideo/cocoawindow.h:
+ * sys/osxvideo/osxvideosink.h:
+ osxvideo: Remove QuickTime references.
+ QuickTime.h is no longer available on OS X 10.12 (Sierra),
+ and both the header and the framework seem unnecessary
+ for compilation - at least as of 10.11 (El Capitan).
+ https://bugzilla.gnome.org/show_bug.cgi?id=770526
+
+2016-08-19 11:11:03 -0700 Thibault Saunier <thibault.saunier@osg.samsung.com>
+
+ * ext/dv/gstdvdemux.c:
+ * ext/gdk_pixbuf/gstgdkpixbufdec.c:
+ * gst/avi/gstavidemux.c:
+ * gst/debugutils/rndbuffersize.c:
+ * gst/flv/gstflvdemux.c:
+ * gst/imagefreeze/gstimagefreeze.c:
+ * gst/isomp4/qtdemux.c:
+ * gst/matroska/matroska-demux.c:
+ * gst/matroska/matroska-parse.c:
+ * gst/multifile/gstsplitmuxsrc.c:
+ * gst/rtsp/gstrtspsrc.c:
+ * gst/wavparse/gstwavparse.c:
+ Use the new API to post flow ERROR messages on the bus
+ https://bugzilla.gnome.org/show_bug.cgi?id=770158
+
+2016-08-26 21:32:07 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * tests/check/elements/.gitignore:
+ gitignore: ignore qtdemux, rtph261 and rtpvp9 tests
+
+2016-08-26 21:22:16 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * tests/check/Makefile.am:
+ tests: use GST_NET_LIBS instead of hardcoded -lgstnet
+ Fixes build in OSX when running 'make check' in gst-uninstalled.
+
+2016-08-26 21:14:47 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * tests/check/elements/rtp-payloading.c:
+ tests: remove a wrong 'const' specifier
+ Fixes "error: duplicate 'const' declaration specifier"
+
+2016-08-26 21:11:59 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * configure.ac:
+ * tests/check/Makefile.am:
+ build: silence error about pthread for 'make check' in osx
+ Fixes "clang: error: argument unused during compilation: '-pthread'"
+
+2016-08-26 20:31:10 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * tests/check/Makefile.am:
+ vp9enc: Fix build of unit test by letting it link to libgstvideo
+
+2016-08-26 12:06:35 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * gst/rtpmanager/gstrtpmux.c:
+ * gst/rtpmanager/gstrtpmux.h:
+ Revert "rtpmux: fix PROP_TIMESTAMP_OFFSET range problems"
+ This broke API, so we need a better solution!
+ This reverts commit c7579d31a6e9d788e94b83258309063d0aae481e.
+
+2016-06-08 15:06:28 +0200 Stian Selnes <stian@pexip.com>
+
+ * gst/rtp/gstrtpvp9depay.c:
+ * tests/check/Makefile.am:
+ * tests/check/elements/rtpvp9.c:
+ rtpvp9depay: Support flexible mode
+
+2016-06-06 17:03:36 +0200 Stian Selnes <stian@pexip.com>
+
+ * ext/vpx/gstvp9enc.c:
+ * tests/check/Makefile.am:
+ * tests/check/elements/vp9enc.c:
+ vp9enc: Fix leak of vpx_image_t
+
+2016-05-06 13:33:22 +0200 Stian Selnes <stian@pexip.com>
+
+ * gst/rtp/gstrtph263pdepay.c:
+ * tests/check/elements/rtph263.c:
+ rtph263pdepay: Don't try to push empty frame
+ If the result of depayloading is an empty frame, just drop it. This is
+ likely the result of a buggy payloader.
+
+2016-05-06 16:06:53 +0200 Havard Graff <havard.graff@gmail.com>
+
+ * gst/rtpmanager/gstrtpmux.c:
+ * gst/rtpmanager/gstrtpmux.h:
+ rtpmux: fix PROP_TIMESTAMP_OFFSET range problems
+ It could not set the offset for the full guint32 range.
+
+2016-05-06 09:44:42 +0200 Havard Graff <havard.graff@gmail.com>
+
+ * gst/rtpmanager/gstrtpbin.c:
+ * gst/rtpmanager/gstrtpbin.h:
+ rtpbin: introduce max-streams property
+ To be able to cap the number of allowed streams for one session.
+ This is useful for preventing DoS attacks, where a sender can change
+ SSRC for every buffer, effectively bringing rtpbin to a halt.
+ https://bugzilla.gnome.org/show_bug.cgi?id=770292
+
+2016-03-31 00:10:49 +0200 Havard Graff <havard.graff@gmail.com>
+
+ * gst/rtpmanager/rtpsource.c:
+ rtpsource: reordered packets are very normal, and should not be a warning
+
+2016-02-05 14:19:25 +0100 Havard Graff <havard.graff@gmail.com>
+
+ * gst/rtpmanager/rtpsession.c:
+ rtpsession: degrade g_warning to GST_ERROR
+ So we don't blow up while investigating
+
+2016-02-04 14:16:40 +0100 Stian Selnes <stian@pexip.com>
+
+ * gst/rtp/gstrtph263pdepay.c:
+ * tests/check/elements/rtph263.c:
+ rtph263pdepay: Fix picture header for non-writable payload
+ Under certain conditions gst_rtp_buffer_get_payload() returns a copy of
+ the payload. In this case the payload modifications will not affect the
+ rtp buffer. So instead of modifying the payload buffer directly we
+ should modify the buffer that actually gets pushed on the adapter.
+
+2015-11-19 11:50:47 +0100 Stian Selnes <stian@pexip.com>
+
+ * gst/rtp/gstrtph261depay.c:
+ * tests/check/Makefile.am:
+ * tests/check/elements/rtph261.c:
+ rtph261depay: Fix check of valid payload length
+ Packets with no H.261 payload should be dropped to avoid invalid
+ write/reads.
+
+2015-11-09 10:06:21 +0100 Stian Selnes <stian@pexip.com>
+
+ * gst/rtp/gstrtph263pay.c:
+ * tests/check/elements/rtph263.c:
+ rtph263pay: Fix double free, invalid reads and leak
+
+2014-06-30 15:43:58 +0200 Stian Selnes <stian@pexip.com>
+
+ * gst/rtpmanager/rtpsession.c:
+ rtpsession: sanity check RTT before ignoring PLI/FIR
+
+2014-06-30 15:07:45 +0200 Stian Selnes <stian@pexip.com>
+
+ * gst/rtpmanager/rtpsession.c:
+ rtpsession: handle sdes messages with non-utf8 more gracefully
+
+2014-06-17 08:52:50 +0200 Stian Selnes <stian.selnes@gmail.com>
+
+ * gst/rtp/gstrtph263pay.c:
+ rtph263pay: change log level on bitstream parsing messages
+
+2016-07-07 11:13:18 +0200 Mikhail Fludkov <misha@pexip.com>
+
+ * tests/check/elements/rtprtx.c:
+ tests/rtprtx: refactor the tests to use gstharness
+ The functionality of all the tests was kept exactly the same. Some tests
+ were renamed:
+ test_push_forward_seq -> test_rtxsend_rtxreceive
+ test_drop_one_sender -> test_rtxsend_rtxreceive_with_packet_loss
+ test_drop_multiple_sender -> test_multi_rtxsend_rtxreceive_with_packet_loss
+ test_rtxreceive_data_reconstruction was testing that retransmitted
+ buffer produced by rtxsend was correctly transformed to the original
+ buffer by rtxreceive. Now we are checking for this in all the tests
+ where both rtxsend & rtxreceive are involved. That's why the test was
+ removed.
+
+2016-08-25 15:52:36 +0200 Jonas Holmberg <jonashg@axis.com>
+
+ * gst/rtp/gstrtph265pay.c:
+ rtph265pay: Set RTP marker bit
+ Set the RTP marker bit on the last RTP packet of an H.265 access unit.
+ https://bugzilla.gnome.org/show_bug.cgi?id=770394
+
+2016-07-26 19:39:58 +0200 Xabier Rodriguez Calvar <calvaris@igalia.com>
+
+ * gst/videofilter/gstvideoflip.c:
+ * gst/videofilter/gstvideoflip.h:
+ videoflip: added GstVideoDirection interface
+ It implements now this interface with its video-direction
+ property. Values are changed to GstVideoOrientationMethod but they have
+ the same value than the originals.
+ https://bugzilla.gnome.org/show_bug.cgi?id=768687
+
+2015-11-06 10:39:16 +0100 Havard Graff <havard.graff@gmail.com>
+
+ * gst/rtpmanager/gstrtpsession.c:
+ gstrtpsession: refactor duplicate code into a function
+ Less code, easier to read, more consistent.
+ https://bugzilla.gnome.org/show_bug.cgi?id=770293
+
+2016-08-23 17:06:44 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * gst/rtpmanager/gstrtpbin.c:
+ rtpbin: fix typo in max-misorder-time property name
+
+2016-08-22 00:05:52 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/multifile/gstsplitmuxsink.c:
+ splitmuxsink: fix printf format compiler warning in debug message
+ On 32-bit x86: gstsplitmuxsink.c:966:31: warning: format ‘%u’ expects
+ argument of type ‘unsigned int’, but argument 9 has type
+ ‘guint64 {aka long long unsigned int}’
+
+2016-08-12 21:12:30 +0530 Nirbheek Chauhan <nirbheek@centricular.com>
+
+ * .gitignore:
+ * config.h.meson:
+ * ext/cairo/meson.build:
+ * ext/dv/meson.build:
+ * ext/flac/meson.build:
+ * ext/gdk_pixbuf/meson.build:
+ * ext/jack/meson.build:
+ * ext/jpeg/meson.build:
+ * ext/libpng/meson.build:
+ * ext/meson.build:
+ * ext/pulse/meson.build:
+ * ext/shout2/meson.build:
+ * ext/soup/meson.build:
+ * ext/speex/meson.build:
+ * ext/taglib/meson.build:
+ * ext/vpx/meson.build:
+ * ext/wavpack/meson.build:
+ * gst/alpha/meson.build:
+ * gst/apetag/meson.build:
+ * gst/audiofx/meson.build:
+ * gst/audioparsers/meson.build:
+ * gst/auparse/meson.build:
+ * gst/autodetect/meson.build:
+ * gst/avi/meson.build:
+ * gst/cutter/meson.build:
+ * gst/debugutils/meson.build:
+ * gst/deinterlace/meson.build:
+ * gst/dtmf/meson.build:
+ * gst/effectv/meson.build:
+ * gst/equalizer/meson.build:
+ * gst/flv/meson.build:
+ * gst/flx/meson.build:
+ * gst/goom/meson.build:
+ * gst/goom2k1/meson.build:
+ * gst/icydemux/meson.build:
+ * gst/id3demux/meson.build:
+ * gst/imagefreeze/meson.build:
+ * gst/interleave/meson.build:
+ * gst/isomp4/meson.build:
+ * gst/law/meson.build:
+ * gst/level/meson.build:
+ * gst/matroska/meson.build:
+ * gst/meson.build:
+ * gst/monoscope/meson.build:
+ * gst/multifile/meson.build:
+ * gst/multipart/meson.build:
+ * gst/replaygain/meson.build:
+ * gst/rtp/meson.build:
+ * gst/rtpmanager/meson.build:
+ * gst/rtsp/meson.build:
+ * gst/shapewipe/meson.build:
+ * gst/smpte/meson.build:
+ * gst/spectrum/meson.build:
+ * gst/udp/meson.build:
+ * gst/videobox/meson.build:
+ * gst/videocrop/meson.build:
+ * gst/videofilter/meson.build:
+ * gst/videomixer/meson.build:
+ * gst/wavenc/meson.build:
+ * gst/wavparse/meson.build:
+ * gst/y4m/meson.build:
+ * meson.build:
+ * meson_options.txt:
+ * sys/directsound/meson.build:
+ * sys/meson.build:
+ * sys/v4l2/meson.build:
+ * sys/ximage/meson.build:
+ * tests/check/meson.build:
+ * tests/meson.build:
+ Add support for Meson as alternative/parallel build system
+ https://github.com/mesonbuild/meson
+ With contributions from:
+ Tim-Philipp Müller <tim@centricular.com>
+ Jussi Pakkanen <jpakkane@gmail.com> (original port)
+ Highlights of the features provided are:
+ * Faster builds on Linux (~40-50% faster)
+ * The ability to build with MSVC on Windows
+ * Generate Visual Studio project files
+ * Generate XCode project files
+ * Much faster builds on Windows (on-par with Linux)
+ * Seriously fast configure and building on embedded
+ ... and many more. For more details see:
+ http://blog.nirbheek.in/2016/05/gstreamer-and-meson-new-hope.html
+ http://blog.nirbheek.in/2016/07/building-and-developing-gstreamer-using.html
+ Building with Meson should work on both Linux and Windows, but may
+ need a few more tweaks on other operating systems.
+
+2016-08-20 16:59:30 +0800 Jie Jiang <jiangjie@nudt.edu.cn>
+
+ * gst/multifile/gstsplitmuxsink.c:
+ * gst/multifile/gstsplitmuxsink.h:
+ Fixed splitmuxsink 32-bit overflow bug
+ Extend the byte tracking counters to 64-bit on
+ all platforms, instead of using gsize, which overflows
+ after 4GB.
+ https://bugzilla.gnome.org/show_bug.cgi?id=770019
+
+2016-08-19 17:18:16 +0300 Vivia Nikolaidou <vivia@toolsonair.com>
+
+ * gst/isomp4/atoms.c:
+ isomp4: Fix coverity warning
+ If atom_copy_data fails to write anything, return 0
+ CID #1371458
+
+2016-04-09 07:51:03 +0530 Nirbheek Chauhan <nirbheek@centricular.com>
+
+ * sys/v4l2/gstv4l2deviceprovider.c:
+ * sys/v4l2/v4l2-utils.c:
+ v4l2: consistently check #ifdef HAVE_GUDEV instead of #if
+ Both work with autotools but they definitely don't mean the same thing, cause
+ problems with other build systems, and are bad form. Existence should always be
+ checked with #ifdef or #if defined.
+
+2016-04-19 10:53:05 +0530 Nirbheek Chauhan <nirbheek@centricular.com>
+
+ * sys/directsound/gstdirectsoundsink.c:
+ * sys/directsound/gstdirectsoundsink.h:
+ directsound: port away from old DirectX API
+ D3DX has been deprecated for the last 4 years and latest versions of
+ Windows no longer ship headers for it. This is fine as long as you're
+ building with Cerbero's Wine-based DirectX headers, but sucks if you
+ want to build against the actual Windows SDK.
+ We were just using it to get error strings anyway, so just use the
+ generic error string API.
+
+2016-08-18 12:02:01 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/audioparsers/gstflacparse.c:
+ Revert "flacparse: Add maximum bitrate tag"
+ This reverts commit c703ab69f526092bb26cce41ca691a896c8383d8.
+ https://bugzilla.gnome.org/show_bug.cgi?id=769392
+
+2016-08-18 09:57:51 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * tests/check/elements/rtpjitterbuffer.c:
+ rtpjitterbuffer: Fix unit test by disabling adaptive misorder/dropout calculations
+ Need to set max-misorder-time and max-dropout-time to 0 so the
+ jitterbuffer does not base them on packet rate calculations.
+ If it does, out gap is big enough to be considered a new stream and
+ we wait for a few consecutive packets just to be sure
+ https://bugzilla.gnome.org/show_bug.cgi?id=751311
+
+2016-08-09 12:55:59 +0300 Vivia Nikolaidou <vivia@ahiru.eu>
+
+ * gst/multifile/gstsplitmuxsink.c:
+ * gst/multifile/gstsplitmuxsink.h:
+ splitmuxsink: Add option to split at exactly max-size-time
+ Will try to request a keyframe from the encoder to be sent at the target
+ running time.
+ https://bugzilla.gnome.org/show_bug.cgi?id=769664
+
+2016-08-09 20:16:16 +0300 Vivia Nikolaidou <vivia@ahiru.eu>
+
+ * gst/multifile/gstsplitmuxsink.c:
+ splitmuxsink: Allow time and bytes to reach their respective thresholds
+ https://bugzilla.gnome.org/show_bug.cgi?id=769664
+
+2016-08-17 09:49:04 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst/rtsp/gstrtspsrc.c:
+ rtspsrc: Allow mimetypes with properties as long as they're application/sdp
+ Some servers add properties like charset, e.g.
+ application/sdp; charset=utf8
+ Ideally we should also parse the charset and do conversion of all messages,
+ but that's for a later time.
+
+2016-06-24 16:32:37 +0300 Vivia Nikolaidou <vivia@toolsonair.com>
+
+ * gst/isomp4/atoms.c:
+ * gst/isomp4/atoms.h:
+ * gst/isomp4/fourcc.h:
+ * gst/isomp4/gstqtmux.c:
+ * gst/isomp4/gstqtmux.h:
+ qtmux: Added support for writing timecode track
+ https://bugzilla.gnome.org/show_bug.cgi?id=767950
+
+2016-08-11 16:32:21 -0600 Thomas Bluemel <tbluemel@control4.com>
+
+ * gst/udp/gstmultiudpsink.c:
+ multiudpsink: Initialize bytes_sent field.
+ This fixes endpoints not receiving any data intermittently.
+ https://bugzilla.gnome.org/show_bug.cgi?id=769773
+
+2016-08-10 11:45:13 -0600 Thomas Bluemel <tbluemel@control4.com>
+
+ * gst/rtpmanager/gstrtpjitterbuffer.c:
+ * gst/rtpmanager/rtpstats.c:
+ rtpjitterbuffer: Actually calculate the packet rate for max-dropout and max-misorder calculations.
+ https://bugzilla.gnome.org/show_bug.cgi?id=751311
+
+2016-08-10 11:26:17 -0600 Thomas Bluemel <tbluemel@control4.com>
+
+ * gst/rtpmanager/rtpjitterbuffer.c:
+ rtpjitterbuffer: Don't warn for duplicate packets
+ This is a normal scenario and should not be a warning. This can
+ happen frequently when re-transmits of lost packets are enabled.
+ https://bugzilla.gnome.org/show_bug.cgi?id=762208
+
+2016-08-08 13:49:19 +1000 Jan Schmidt <jan@centricular.com>
+
+ * gst/multifile/gstsplitmuxsink.c:
+ splitmux: Fix typo converting to running time.
+ Use the correct collected timestamp.
+
+2016-08-08 02:53:48 +1000 Jan Schmidt <jan@centricular.com>
+
+ * gst/multifile/gstsplitmuxsink.c:
+ * gst/multifile/gstsplitmuxsink.h:
+ Revert "splitmuxsink: Use GstBin async-handling instead of our own."
+ This reverts commit fa008f271a52f82dededc28bd81b020ca7939b47.
+ async-handling in GstBin causes the pipeline to spin at 100%
+ CPU as the top-level pipeline tries to change that state
+ to PLAYING constantly. This is a workaround for a core
+ problem, essentially, but an improvement in this case for now.
+
+2016-08-08 00:56:38 +1000 Jan Schmidt <jan@centricular.com>
+
+ * gst/multifile/gstsplitmuxsink.c:
+ splitmux: Recheck state after unlocking mutex.
+ After dropping the splitmux lock, re-check the state,
+ don't just fall through and sleep unconditionally,
+ as we may have already missed the wakeup.
+ https://bugzilla.gnome.org/show_bug.cgi?id=769514
+
+2016-08-03 03:32:07 +1000 Jan Schmidt <jan@centricular.com>
+
+ * gst/multifile/gstsplitmuxsrc.c:
+ splitmuxsrc: Don't stop and error on EOS flow return
+ Don't immediately halt on EOS flow return from downstream
+ due to out of segment. Let the demuxer handle it and send
+ EOS.
+
+2016-08-04 00:36:28 -0300 Thiago Santos <thiagossantos@gmail.com>
+
+ * gst/rtpmanager/gstrtpjitterbuffer.c:
+ rtpjitterbuffer: avoid unref of null buffer
+ The current 'l' pointer will be NULL when the loop
+ is interrupted with a 'break' statement. Need to have
+ it advance to the next list item before interrupting.
+
+2016-08-02 14:01:14 +0200 Carlos Rafael Giani <dv@pseudoterminal.org>
+
+ * gst/wavparse/Makefile.am:
+ * gst/wavparse/gstwavparse.c:
+ wavparse: Add tags for container format and bitrate for uncompressed PCM
+ The PCM bitrate is added to help downstream elements (like uridecodebin)
+ figure out a proper network buffer size
+ https://bugzilla.gnome.org/show_bug.cgi?id=769390
+
+2016-08-01 18:52:26 +0200 Carlos Rafael Giani <dv@pseudoterminal.org>
+
+ * gst/audioparsers/gstflacparse.c:
+ flacparse: Add maximum bitrate tag
+ https://bugzilla.gnome.org/show_bug.cgi?id=769392
+
+2016-07-28 17:58:16 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst/isomp4/qtdemux.c:
+ qtdemux: When receiving a DISCONT buffer that does not point to a sample, remember the offset
+ And don't just reset everything. This makes sure that we can continue to
+ handle data in the following scenario:
+ moov: discont
+ moof: discont
+ mdat: continuous
+ Previously this would fail because the offset would be the accumulated offset
+ from moov and moof at the mdat position, while the buffer offset might be
+ something completely different.
+
+2016-07-25 13:34:02 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst/rtp/gstrtpbvpay.c:
+ * gst/rtp/gstrtpceltpay.c:
+ * gst/rtp/gstrtpg722pay.c:
+ * gst/rtp/gstrtph263ppay.c:
+ * gst/rtp/gstrtph265pay.c:
+ * gst/rtp/gstrtpilbcpay.c:
+ rtp: Filter with the filter caps in the payloader's getcaps
+
+2016-03-03 11:35:06 +0000 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * ext/soup/gstsouphttpsrc.c:
+ souphttpsrc: include http-status-code in error message details
+ https://bugzilla.gnome.org/show_bug.cgi?id=763038
+
+2016-07-25 18:20:03 +1000 Jan Schmidt <jan@centricular.com>
+
+ * gst/multifile/gstsplitmuxsink.c:
+ splitmuxsink: Fix debug statement signedness.
+ The ts variable is a GstClockTime, don't print it
+ as a GstClockTimeDiff.
+
+2016-07-17 22:41:02 +1000 Jan Schmidt <jan@centricular.com>
+
+ * gst/multifile/gstsplitmuxsink.c:
+ * gst/multifile/gstsplitmuxsink.h:
+ splitmuxsink: Handle negative running time
+ Use signed clock times for running time everywhere
+ so that we handle negative running times without
+ going haywire, similar to what queue and multiqueue
+ do these days.
+
+2016-07-18 00:12:55 +1000 Jan Schmidt <jan@centricular.com>
+
+ * gst/multifile/gstsplitmuxsink.c:
+ splitmuxsink: Drop lock when sending dummy event
+ When pushing the dummy event into the multiqueue,
+ drop the splitmux lock or else we might deadlock.
+
+2016-06-30 01:56:41 +1000 Jan Schmidt <thaytan@noraisin.net>
+
+ * gst/rtp/gstrtph264pay.c:
+ rtph264pay: Intersect with filter caps in getcaps function.
+ Always intersect with the filter caps in the getcaps function
+ to make sure we return a subset of what was requested.
+ Other payloaders also have this problem and need fixing
+ in future commits.
+
+2016-07-12 17:30:56 +0200 Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+ * tests/check/elements/qtdemux.c:
+ tests: qtdemux: fix element and pad leak
+ https://bugzilla.gnome.org/show_bug.cgi?id=768739
+
+2016-07-12 16:45:36 +0200 Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+ * tests/check/elements/audiofirfilter.c:
+ * tests/check/elements/audioiirfilter.c:
+ * tests/check/elements/rtp-payloading.c:
+ * tests/check/elements/videobox.c:
+ * tests/check/pipelines/effectv.c:
+ tests: fix bus leaks
+ gst_bus_add_signal_watch() takes a ref on the bus which should be
+ released using gst_bus_remove_signal_watch().
+ https://bugzilla.gnome.org/show_bug.cgi?id=768739
+
+2016-07-14 03:07:11 +0800 Ting-Wei Lan <lantw@src.gnome.org>
+
+ * configure.ac:
+ configure: Call AG_GST_PKG_CONFIG_PATH to set GST_PKG_CONFIG_PATH
+ GST_PKG_CONFIG_PATH is used in docs/plugins directory, so
+ AG_GST_PKG_CONFIG_PATH must be called to set it.
+ https://bugzilla.gnome.org/show_bug.cgi?id=768787
+
+2016-07-12 07:39:58 +0200 Edward Hervey <edward@centricular.com>
+
+ * ext/soup/gstsouphttpsrc.c:
+ souphttpsrc: Don't drop final bytes of a range request
+ At the end of a range request, we don't want to return GST_FLOW_EOS otherwise
+ the last bytes we just read will be dropped by basesrc.
+ Instead just return GST_FLOW_OK (which was set just before) and let basesrc
+ handle the fact we are at the end of the segment.
+
+2016-07-11 18:30:18 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * sys/v4l2/gstv4l2deviceprovider.c:
+ v4l2provider: Fix device type detection
+ The type detection would lead to assertion as it would try
+ to create a device without having found any type for it. It
+ also didn't detect MPLANE devices properly.
+
+2016-07-11 18:29:01 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * sys/v4l2/gstv4l2object.c:
+ v4l2object: Don't assert when used by the monitor
+ The monitor sets the object->element object as a GstObject. This
+ works for debug traces, but will assert for ELEMENT_ERROR. This
+ was the only case where that could happen. Add a check for that.
+
+2016-07-11 17:38:00 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * sys/v4l2/gstv4l2object.c:
+ v4l2object: Indent very long line
+
+2016-07-12 00:42:02 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/soup/gstsouphttpsrc.c:
+ souphttpsrc: At the end of a range request, read another time to finalize the request
+ If we're at the end of a range request, read again to let libsoup
+ finalize the request. This allows to reuse the connection again later,
+ otherwise we would have to cancel the message and close the connection.
+
+2016-07-11 21:13:47 +0200 Stefan Sauer <ensonic@users.sf.net>
+
+ * common:
+ Automatic update of common submodule
+ From f363b32 to f49c55e
+
+2016-07-11 19:57:18 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/soup/gstsouphttpsrc.c:
+ souphttpsrc: Fix keep-alive handling
+ We have to get rid of the message on EOS when the complete stream is read to
+ remember that we successfully finished handling this specific message.
+ Otherwise we will cancel it later and close the connection instead of reusing
+ it at a later time.
+ It might also make sense to reuse connections if a non-200 response is
+ received. As long as there was no connection error, the HTTP connection should
+ be re-usable.
+
+2016-07-11 12:05:06 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * configure.ac:
+ Also enable V4L2 probe on aarch64 (aka ARM 64bit)
+
+2016-07-11 11:59:19 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * tests/examples/rtp/client-PCMA.c:
+ rtp example: Fix leak
+ Also stop fetching the internal source as this
+ functionality has been broken.
+
+2016-07-08 14:58:37 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * configure.ac:
+ Enable v4l2 probe on Linux/ARM
+ Most of those have V4L2 drivers these days enabling it make sure that it
+ this code is enabled in major distribution, hence that HW accelerated
+ decoder/encoder can be used on platforms that support it. The probes are
+ slightly increasing the first init of gstreamer library, though the
+ result is cached in the registry for later use.
+
+2016-07-11 09:46:49 +0200 Jonas Holmberg <jonashg@axis.com>
+
+ * gst/rtp/gstrtph265pay.c:
+ * tests/check/elements/rtp-payloading.c:
+ rtph265pay: Accept array_completeness=1
+ When parsing NAL unit type in codec_data, check the 6bits of
+ NAL_unit_type only and do not require the array_completeness bit to be
+ 0, since the default and mandatory value of array_completeness is 1 for
+ hvc1.
+ https://bugzilla.gnome.org/show_bug.cgi?id=768653
+
+2016-07-10 21:35:06 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * sys/v4l2/v4l2_calls.c:
+ v4l2: Also copy device_caps in gst_v4l2_dup
+ This fixes regression where M2M error out saying they have no output
+ format (the V4L2 CAPTURE side).
+ https://bugzilla.gnome.org/show_bug.cgi?id=768195
+
+2016-07-10 21:30:27 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst/udp/gstudpsrc.c:
+ udpsrc: Use correct in6_pktinfo struct instead of in_pktinfo
+ Fixes the build on FreeBSD, which does not have the latter.
+ https://bugzilla.gnome.org/show_bug.cgi?id=768623
+
+2016-07-08 17:28:19 +0000 Luis de Bethencourt <luisbg@osg.samsung.com>
+
+ * sys/v4l2/v4l2_calls.c:
+ v4l2: fix multiplanar capture
+ After switching to using V4L2_CAP_DEVICE_CAPS we lost support for
+ multiplanar device types. After some research, it looks like
+ vcap.capabilities treated the multiplanar flag of output and capture
+ devices equally, but not the new device_caps.
+ https://bugzilla.gnome.org/show_bug.cgi?id=768195
+
+2016-07-08 14:56:30 +0200 Mats Lindestam <matslm@axis.com>
+
+ * gst/multipart/multipartmux.c:
+ * gst/multipart/multipartmux.h:
+ multipartmux: Use PTS and DTS instead of timestamp
+ And pass-through both of them.
+ Based on a patch by Göran Jönsson <goranjn@axis.com>
+ https://bugzilla.gnome.org/show_bug.cgi?id=767900
+
+2016-06-30 14:40:40 +0200 Thomas Scheuermann <Thomas.Scheuermann@barco.com>
+
+ * ext/jack/gstjackaudioclient.c:
+ jack: don't wait for callbacks if the jack server shut down
+ Otherwise we'll wait forever.
+ https://bugzilla.gnome.org/show_bug.cgi?id=747275
+
+2016-06-23 15:30:19 +0200 Edward Hervey <edward@centricular.com>
+
+ * gst/isomp4/qtdemux.c:
+ qtdemux: Let upstream events go through upstream
+ There's no real reason to avoid sending QOS/NAVIGATION events upstrea.
+ Some elements might want to have that information.
+
+2016-06-23 15:22:56 +0200 Edward Hervey <edward@centricular.com>
+
+ * gst/avi/gstavidemux.c:
+ avidemux: Let upstream events go through upstream
+ There's no real reason to avoid sending QOS/NAVIGATION events upstrea.
+ Some elements might want to have that information.
+
+2016-06-23 15:17:36 +0200 Edward Hervey <edward@centricular.com>
+
+ * ext/dv/gstdvdemux.c:
+ dvdemux: Let upstream events go through upstream
+ There's no real reason to avoid sending QOS/NAVIGATION events upstrea.
+ Some elements might want to have that information.
+ Also remove downstream-only CAPS event handling and minimize code
+
+2016-07-07 23:53:54 +0100 Luis de Bethencourt <luisbg@osg.samsung.com>
+
+ * sys/v4l2/gstv4l2.c:
+ v4l2: fix v4l2 probe build error
+ A typo in gst_v4l2_probe_and_register() caused a build error when building
+ with --enable-v4l2-probe. Fixing it.
+ gstv4l2.c: In function 'gst_v4l2_probe_and_register':
+ gstv4l2.c:150:25: error: 'struct v4l2_capability' has no member named 'capabilitites'
+ device_caps = vcap.capabilitites;
+
+2016-07-01 22:53:33 -0700 Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
+
+ * sys/v4l2/gstv4l2src.c:
+ v4l2src: use gst_caps_intersect_full in negotiate()
+ Instead of reimplementing the GST_CAPS_INTERSECT_FIRST
+ interection mode.
+ https://bugzilla.gnome.org/show_bug.cgi?id=768195
+
+2016-07-02 01:56:07 -0700 Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
+
+ * sys/v4l2/gstv4l2.c:
+ * sys/v4l2/gstv4l2bufferpool.c:
+ * sys/v4l2/gstv4l2deviceprovider.c:
+ * sys/v4l2/gstv4l2object.c:
+ * sys/v4l2/gstv4l2object.h:
+ * sys/v4l2/gstv4l2radio.c:
+ * sys/v4l2/gstv4l2sink.c:
+ * sys/v4l2/v4l2_calls.c:
+ v4l2: use opened device caps instead of physical device ones
+ The same physical device can export multiple devices. In
+ this case, the capabilities field now contains a union of
+ all caps available from all exported V4L2 devices alongside
+ a V4L2_CAP_DEVICE_CAPS flag that should be used to decide
+ what capabilities to consider. In our case, we need the
+ ones from the exported device we are using.
+ https://bugzilla.gnome.org/show_bug.cgi?id=768195
+
+2016-07-07 18:24:59 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst/matroska/matroska-mux.c:
+ matroskamux: Remove suspicious checks for pads being active and linked
+ We should add all pads, no matter if they are linked or active or not at this
+ point. Skipping some that are not will cause different behaviour than with
+ other muxers.
+
+2016-07-07 18:23:07 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst/matroska/matroska-mux.c:
+ matroskamux: Error out if we start writing data with some pads not having a codec id yet
+ This can only happen if a) upstream somehow gets around the CAPS event failing
+ or b) there never being any CAPS event.
+ The following code assumes that all pads have a codec-id.
+ https://bugzilla.gnome.org/show_bug.cgi?id=768509
+
+2016-07-07 18:14:43 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst/matroska/matroska-mux.c:
+ matroskamux: Consistently use gst_matroska_mux_set_codec_id() for setting the codec id
+
+2016-07-04 09:50:11 +0200 Jonas Holmberg <jonashg@axis.com>
+
+ * gst/rtp/gstrtph265depay.c:
+ * gst/rtp/gstrtph265pay.c:
+ * gst/rtp/gstrtph265pay.h:
+ * tests/check/elements/rtp-payloading.c:
+ rtph265pay/depay: Sync against RFC 7798
+ Handle sprop-vps, sprop-sps and sprop-pps in caps instead of
+ sprop-parameter-sets.
+ rtph265pay works with byte-stream and hvc1 formats but not hev1 yet. It
+ handles profile-id, tier-flag and level-id in caps query.
+ https://bugzilla.gnome.org/show_bug.cgi?id=753760
+
+2016-07-06 09:25:00 +0200 Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
+
+ * gst/flv/gstflvdemux.c:
+ * gst/flv/gstflvdemux.h:
+ flvdemux: Push nominal bitrate tags
+ Add per-stream tag lists, which are used to send nominal
+ bitrate tags. When remuxing FLV => FLV, this now passes
+ through the upstream bitrate.
+ https://bugzilla.gnome.org/show_bug.cgi?id=768440
+
+2016-07-06 09:24:49 +0200 Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
+
+ * gst/flv/gstflvdemux.c:
+ * gst/flv/gstflvdemux.h:
+ flvdemux: Refactor metadata tag handling
+ The FLV header cannot be trusted to indicate video or
+ audio presence, as the comments already mention. Don't
+ delay pushing tags waiting for streams that might never
+ appear.
+ Tags are now pushed immediately after they change:
+ - After parsing an onMetaData script object
+ - After negotiating caps on a pad
+ https://bugzilla.gnome.org/show_bug.cgi?id=768440
+
+2016-07-06 12:44:10 +0100 Luis de Bethencourt <luisbg@osg.samsung.com>
+
+ * gst/isomp4/qtdemux.c:
+ qtdemux: fix AAC codec_data values
+ As seen in the parent switch for object_type_id, the 4 possible values are
+ 0x40, 0x66, 0x67 and 0x68. Fixing the nested switch to match these values.
+ Looks like it was a typo making them decimal instead of hexadecimal.
+ CID 1363328
+
+2016-07-06 13:51:03 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * configure.ac:
+ Back to development
+
+=== release 1.9.1 ===
+
+2016-07-06 13:06:44 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * configure.ac:
+ * docs/plugins/gst-plugins-good-plugins.args:
+ * docs/plugins/gst-plugins-good-plugins.hierarchy:
+ * docs/plugins/inspect/plugin-1394.xml:
+ * docs/plugins/inspect/plugin-aasink.xml:
+ * docs/plugins/inspect/plugin-alaw.xml:
+ * docs/plugins/inspect/plugin-alpha.xml:
+ * docs/plugins/inspect/plugin-alphacolor.xml:
+ * docs/plugins/inspect/plugin-apetag.xml:
+ * docs/plugins/inspect/plugin-audiofx.xml:
+ * docs/plugins/inspect/plugin-audioparsers.xml:
+ * docs/plugins/inspect/plugin-auparse.xml:
+ * docs/plugins/inspect/plugin-autodetect.xml:
+ * docs/plugins/inspect/plugin-avi.xml:
+ * docs/plugins/inspect/plugin-cacasink.xml:
+ * docs/plugins/inspect/plugin-cairo.xml:
+ * docs/plugins/inspect/plugin-cutter.xml:
+ * docs/plugins/inspect/plugin-debug.xml:
+ * docs/plugins/inspect/plugin-deinterlace.xml:
+ * docs/plugins/inspect/plugin-dtmf.xml:
+ * docs/plugins/inspect/plugin-dv.xml:
+ * docs/plugins/inspect/plugin-effectv.xml:
+ * docs/plugins/inspect/plugin-equalizer.xml:
+ * docs/plugins/inspect/plugin-flac.xml:
+ * docs/plugins/inspect/plugin-flv.xml:
+ * docs/plugins/inspect/plugin-flxdec.xml:
+ * docs/plugins/inspect/plugin-gdkpixbuf.xml:
+ * docs/plugins/inspect/plugin-goom.xml:
+ * docs/plugins/inspect/plugin-goom2k1.xml:
+ * docs/plugins/inspect/plugin-icydemux.xml:
+ * docs/plugins/inspect/plugin-id3demux.xml:
+ * docs/plugins/inspect/plugin-imagefreeze.xml:
+ * docs/plugins/inspect/plugin-interleave.xml:
+ * docs/plugins/inspect/plugin-isomp4.xml:
+ * docs/plugins/inspect/plugin-jack.xml:
+ * docs/plugins/inspect/plugin-jpeg.xml:
+ * docs/plugins/inspect/plugin-level.xml:
+ * docs/plugins/inspect/plugin-matroska.xml:
+ * docs/plugins/inspect/plugin-mulaw.xml:
+ * docs/plugins/inspect/plugin-multifile.xml:
+ * docs/plugins/inspect/plugin-multipart.xml:
+ * docs/plugins/inspect/plugin-navigationtest.xml:
+ * docs/plugins/inspect/plugin-oss4.xml:
+ * docs/plugins/inspect/plugin-ossaudio.xml:
+ * docs/plugins/inspect/plugin-png.xml:
+ * docs/plugins/inspect/plugin-pulseaudio.xml:
+ * docs/plugins/inspect/plugin-replaygain.xml:
+ * docs/plugins/inspect/plugin-rtp.xml:
+ * docs/plugins/inspect/plugin-rtpmanager.xml:
+ * docs/plugins/inspect/plugin-rtsp.xml:
+ * docs/plugins/inspect/plugin-shapewipe.xml:
+ * docs/plugins/inspect/plugin-shout2send.xml:
+ * docs/plugins/inspect/plugin-smpte.xml:
+ * docs/plugins/inspect/plugin-soup.xml:
+ * docs/plugins/inspect/plugin-spectrum.xml:
+ * docs/plugins/inspect/plugin-speex.xml:
+ * docs/plugins/inspect/plugin-taglib.xml:
+ * docs/plugins/inspect/plugin-udp.xml:
+ * docs/plugins/inspect/plugin-video4linux2.xml:
+ * docs/plugins/inspect/plugin-videobox.xml:
+ * docs/plugins/inspect/plugin-videocrop.xml:
+ * docs/plugins/inspect/plugin-videofilter.xml:
+ * docs/plugins/inspect/plugin-videomixer.xml:
+ * docs/plugins/inspect/plugin-vpx.xml:
+ * docs/plugins/inspect/plugin-wavenc.xml:
+ * docs/plugins/inspect/plugin-wavpack.xml:
+ * docs/plugins/inspect/plugin-wavparse.xml:
+ * docs/plugins/inspect/plugin-ximagesrc.xml:
+ * docs/plugins/inspect/plugin-y4menc.xml:
+ * gst-plugins-good.doap:
+ * win32/common/config.h:
+ Release 1.9.1
+
+2016-07-06 11:46:26 +0300 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ * po/zh_HK.po:
+ * po/zh_TW.po:
+ Update .po files
2016-07-06 11:22:53 +0300 Steven Hoving <sh@bigbrother.nl>
@@ -16526,14 +17518,10 @@
* ext/pulse/Makefile.am:
* ext/pulse/plugin.c:
- * ext/pulse/pulsedevicemonitor.c:
- * ext/pulse/pulsedevicemonitor.h:
* ext/pulse/pulsedeviceprovider.c:
* ext/pulse/pulsedeviceprovider.h:
* sys/v4l2/Makefile.am:
* sys/v4l2/gstv4l2.c:
- * sys/v4l2/gstv4l2devicemonitor.c:
- * sys/v4l2/gstv4l2devicemonitor.h:
* sys/v4l2/gstv4l2deviceprovider.c:
* sys/v4l2/gstv4l2deviceprovider.h:
Rename GstDeviceMonitor to GstDeviceProvider
@@ -24899,8 +25887,6 @@
2013-09-10 16:44:53 -0600 Seán de Búrca <leftmostcat@gmail.com>
- * gst/videomixer/blendorc-dist.c:
- * gst/videomixer/blendorc-dist.h:
* gst/videomixer/videomixerorc-dist.c:
* gst/videomixer/videomixerorc-dist.h:
videomixer: fix build if orc is not installed
@@ -29646,8 +30632,6 @@
* sys/osxaudio/gstosxaudiosrc.h:
* sys/osxaudio/gstosxcoreaudiocommon.c:
* sys/osxaudio/gstosxcoreaudiocommon.h:
- * sys/osxaudio/gstosxringbuffer.c:
- * sys/osxaudio/gstosxringbuffer.h:
osxaudio: port to v.1.0
2013-04-16 19:29:48 -0400 Olivier Crête <olivier.crete@collabora.com>
@@ -35467,15 +36451,6 @@
2012-09-16 15:33:57 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
- * ext/vp8/GstVP8Enc.prs:
- * ext/vp8/Makefile.am:
- * ext/vp8/gstvp8dec.c:
- * ext/vp8/gstvp8dec.h:
- * ext/vp8/gstvp8enc.c:
- * ext/vp8/gstvp8enc.h:
- * ext/vp8/gstvp8utils.c:
- * ext/vp8/gstvp8utils.h:
- * ext/vp8/plugin.c:
* ext/vpx/GstVP8Enc.prs:
* ext/vpx/Makefile.am:
* ext/vpx/gstvp8dec.c:
@@ -37259,8 +38234,6 @@
* configure.ac:
* ext/gdk_pixbuf/Makefile.am:
- * ext/gdk_pixbuf/gstgdkpixbuf.c:
- * ext/gdk_pixbuf/gstgdkpixbuf.h:
* ext/gdk_pixbuf/gstgdkpixbufdec.c:
* ext/gdk_pixbuf/gstgdkpixbufdec.h:
* ext/gdk_pixbuf/gstgdkpixbufplugin.c:
@@ -46514,7 +47487,6 @@
* docs/plugins/gst-plugins-good-plugins-docs.sgml:
* docs/plugins/gst-plugins-good-plugins-sections.txt:
- * docs/plugins/inspect/plugin-gstrtpmanager.xml:
* docs/plugins/inspect/plugin-rtpmanager.xml:
* gst/rtpmanager/gstrtpbin.c:
* gst/rtpmanager/gstrtpmanager.c:
@@ -48521,8 +49493,6 @@
* ext/soup/gstsoup.c:
* ext/soup/gstsouphttpclientsink.c:
* ext/soup/gstsouphttpclientsink.h:
- * ext/soup/gstsouphttpsink.c:
- * ext/soup/gstsouphttpsink.h:
soup: rename souphttpsink to souphttpclientsink
To avoid confusion, and because we might want a server
sink at some point too.
@@ -49606,8 +50576,6 @@
* sys/v4l2/gstv4l2sink.c:
* sys/v4l2/gstv4l2videooverlay.c:
* sys/v4l2/gstv4l2videooverlay.h:
- * sys/v4l2/gstv4l2xoverlay.c:
- * sys/v4l2/gstv4l2xoverlay.h:
v4l2: update for GstXOverlay => GstVideoOverlay rename
2011-08-07 12:23:26 +0200 Sjoerd Simons <sjoerd.simons@collabora.co.uk>
@@ -53057,7 +54025,6 @@
* docs/plugins/Makefile.am:
* docs/plugins/gst-plugins-good-plugins-docs.sgml:
* docs/plugins/inspect/plugin-isomp4.xml:
- * docs/plugins/inspect/plugin-quicktime.xml:
* gst-plugins-good.spec.in:
* gst/isomp4/LEGAL:
* gst/isomp4/Makefile.am:
@@ -53094,41 +54061,6 @@
* gst/isomp4/qtdemux_types.c:
* gst/isomp4/qtdemux_types.h:
* gst/isomp4/qtpalette.h:
- * gst/quicktime/LEGAL:
- * gst/quicktime/Makefile.am:
- * gst/quicktime/atoms.c:
- * gst/quicktime/atoms.h:
- * gst/quicktime/atomsrecovery.c:
- * gst/quicktime/atomsrecovery.h:
- * gst/quicktime/descriptors.c:
- * gst/quicktime/descriptors.h:
- * gst/quicktime/fourcc.h:
- * gst/quicktime/ftypcc.h:
- * gst/quicktime/gstqtmoovrecover.c:
- * gst/quicktime/gstqtmoovrecover.h:
- * gst/quicktime/gstqtmux-doc.c:
- * gst/quicktime/gstqtmux-doc.h:
- * gst/quicktime/gstqtmux.c:
- * gst/quicktime/gstqtmux.h:
- * gst/quicktime/gstqtmuxmap.c:
- * gst/quicktime/gstqtmuxmap.h:
- * gst/quicktime/gstrtpxqtdepay.c:
- * gst/quicktime/gstrtpxqtdepay.h:
- * gst/quicktime/properties.c:
- * gst/quicktime/properties.h:
- * gst/quicktime/qtatomparser.h:
- * gst/quicktime/qtdemux.c:
- * gst/quicktime/qtdemux.h:
- * gst/quicktime/qtdemux.vcproj:
- * gst/quicktime/qtdemux_dump.c:
- * gst/quicktime/qtdemux_dump.h:
- * gst/quicktime/qtdemux_fourcc.h:
- * gst/quicktime/qtdemux_lang.c:
- * gst/quicktime/qtdemux_lang.h:
- * gst/quicktime/qtdemux_types.c:
- * gst/quicktime/qtdemux_types.h:
- * gst/quicktime/qtpalette.h:
- * gst/quicktime/quicktime.c:
* po/POTFILES.in:
quicktime: rename plugin to isomp4
https://bugzilla.gnome.org/show_bug.cgi?id=648004
@@ -53893,7 +54825,6 @@
* gst/dtmf/Makefile.am:
* gst/dtmf/gstdtmfcommon.h:
* gst/dtmf/gstdtmfsrc.c:
- * gst/dtmf/gstrtpdtmfcommon.h:
* gst/dtmf/gstrtpdtmfdepay.c:
* gst/dtmf/gstrtpdtmfdepay.h:
* gst/dtmf/gstrtpdtmfsrc.c:
@@ -55212,23 +56143,6 @@
* configure.ac:
* docs/plugins/Makefile.am:
* docs/plugins/inspect/plugin-quicktime.xml:
- * gst/qtdemux/LEGAL:
- * gst/qtdemux/Makefile.am:
- * gst/qtdemux/gstrtpxqtdepay.c:
- * gst/qtdemux/gstrtpxqtdepay.h:
- * gst/qtdemux/qtatomparser.h:
- * gst/qtdemux/qtdemux.c:
- * gst/qtdemux/qtdemux.h:
- * gst/qtdemux/qtdemux.vcproj:
- * gst/qtdemux/qtdemux_dump.c:
- * gst/qtdemux/qtdemux_dump.h:
- * gst/qtdemux/qtdemux_fourcc.h:
- * gst/qtdemux/qtdemux_lang.c:
- * gst/qtdemux/qtdemux_lang.h:
- * gst/qtdemux/qtdemux_types.c:
- * gst/qtdemux/qtdemux_types.h:
- * gst/qtdemux/qtpalette.h:
- * gst/qtdemux/quicktime.c:
* gst/quicktime/LEGAL:
* gst/quicktime/Makefile.am:
* gst/quicktime/gstrtpxqtdepay.c:
@@ -56619,11 +57533,6 @@
2009-11-28 18:13:31 +0100 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
* gst/aacparse/Makefile.am:
- * gst/aacparse/gstaacparse.c:
- * gst/aacparse/gstaacparse.h:
- * gst/aacparse/gstbaseparse.c:
- * gst/aacparse/gstbaseparse.h:
- * gst/aacparse/plugin.c:
* gst/audioparsers/Makefile.am:
* gst/audioparsers/gstaacparse.c:
* gst/audioparsers/gstaacparse.h:
@@ -84515,12 +85424,9 @@
2009-05-15 17:11:27 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
* tests/check/Makefile.am:
- * tests/check/audiotestsrc.flac:
* tests/check/elements/id3demux.c:
* tests/check/elements/souphttpsrc.c:
* tests/check/pipelines/flacdec.c:
- * tests/check/test-cert.pem:
- * tests/check/test-key.pem:
* tests/files/Makefile.am:
* tests/files/audiotestsrc.flac:
* tests/files/test-cert.pem:
@@ -84599,42 +85505,6 @@
* gst/deinterlace/tvtime/weavebff.c:
* gst/deinterlace/tvtime/weavetff.c:
* gst/deinterlace/tvtime/x86-64_macros.inc:
- * gst/deinterlace2/Makefile.am:
- * gst/deinterlace2/gstdeinterlace2.c:
- * gst/deinterlace2/gstdeinterlace2.h:
- * gst/deinterlace2/tvtime/greedy.c:
- * gst/deinterlace2/tvtime/greedyh.asm:
- * gst/deinterlace2/tvtime/greedyh.c:
- * gst/deinterlace2/tvtime/greedyhmacros.h:
- * gst/deinterlace2/tvtime/linear.c:
- * gst/deinterlace2/tvtime/linearblend.c:
- * gst/deinterlace2/tvtime/mmx.h:
- * gst/deinterlace2/tvtime/plugins.h:
- * gst/deinterlace2/tvtime/scalerbob.c:
- * gst/deinterlace2/tvtime/sse.h:
- * gst/deinterlace2/tvtime/tomsmocomp.c:
- * gst/deinterlace2/tvtime/tomsmocomp/SearchLoop0A.inc:
- * gst/deinterlace2/tvtime/tomsmocomp/SearchLoopBottom.inc:
- * gst/deinterlace2/tvtime/tomsmocomp/SearchLoopEdgeA.inc:
- * gst/deinterlace2/tvtime/tomsmocomp/SearchLoopEdgeA8.inc:
- * gst/deinterlace2/tvtime/tomsmocomp/SearchLoopOddA.inc:
- * gst/deinterlace2/tvtime/tomsmocomp/SearchLoopOddA2.inc:
- * gst/deinterlace2/tvtime/tomsmocomp/SearchLoopOddA6.inc:
- * gst/deinterlace2/tvtime/tomsmocomp/SearchLoopOddAH.inc:
- * gst/deinterlace2/tvtime/tomsmocomp/SearchLoopOddAH2.inc:
- * gst/deinterlace2/tvtime/tomsmocomp/SearchLoopTop.inc:
- * gst/deinterlace2/tvtime/tomsmocomp/SearchLoopVA.inc:
- * gst/deinterlace2/tvtime/tomsmocomp/SearchLoopVAH.inc:
- * gst/deinterlace2/tvtime/tomsmocomp/StrangeBob.inc:
- * gst/deinterlace2/tvtime/tomsmocomp/TomsMoCompAll.inc:
- * gst/deinterlace2/tvtime/tomsmocomp/TomsMoCompAll2.inc:
- * gst/deinterlace2/tvtime/tomsmocomp/WierdBob.inc:
- * gst/deinterlace2/tvtime/tomsmocomp/tomsmocompmacros.h:
- * gst/deinterlace2/tvtime/vfir.c:
- * gst/deinterlace2/tvtime/weave.c:
- * gst/deinterlace2/tvtime/weavebff.c:
- * gst/deinterlace2/tvtime/weavetff.c:
- * gst/deinterlace2/tvtime/x86-64_macros.inc:
Moved 'deinterlace2' from -bad to -good
And rename it to deinterlace.
@@ -87436,29 +88306,6 @@
* configure.ac:
* docs/plugins/Makefile.am:
- * gst/debug/Makefile.am:
- * gst/debug/breakmydata.c:
- * gst/debug/debug.vcproj:
- * gst/debug/efence.c:
- * gst/debug/efence.h:
- * gst/debug/efence.vcproj:
- * gst/debug/gstdebug.c:
- * gst/debug/gstnavigationtest.c:
- * gst/debug/gstnavigationtest.h:
- * gst/debug/gstnavseek.c:
- * gst/debug/gstnavseek.h:
- * gst/debug/gstpushfilesrc.c:
- * gst/debug/gstpushfilesrc.h:
- * gst/debug/gsttaginject.c:
- * gst/debug/gsttaginject.h:
- * gst/debug/navigationtest.vcproj:
- * gst/debug/negotiation.c:
- * gst/debug/progressreport.c:
- * gst/debug/progressreport.h:
- * gst/debug/rndbuffersize.c:
- * gst/debug/testplugin.c:
- * gst/debug/tests.c:
- * gst/debug/tests.h:
* gst/debugutils/Makefile.am:
* gst/debugutils/breakmydata.c:
* gst/debugutils/debug.vcproj:
@@ -88484,8 +89331,6 @@
2009-02-24 14:55:28 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
* ext/gconf/Makefile.am:
- * ext/gconf/gconf.c:
- * ext/gconf/gconf.h:
* ext/gconf/gstgconf.c:
* ext/gconf/gstgconf.h:
* ext/gconf/gstgconfelements.h:
@@ -90060,11 +90905,8 @@
* gst/audiofx/audioecho.c:
* gst/audiofx/audioecho.h:
* gst/audiofx/audiofx.c:
- * gst/audiofx/audioreverb.c:
- * gst/audiofx/audioreverb.h:
* tests/check/Makefile.am:
* tests/check/elements/audioecho.c:
- * tests/check/elements/audioreverb.c:
Rename audioreverb to audioecho. Fixes bug #568395.
The element can add an echo and a simple reverb effect to
an audio stream but for a real reverb filter it would need
diff --git a/Makefile.in b/Makefile.in
index b101ed1..1220c47 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -109,6 +109,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -208,7 +209,7 @@
$(top_srcdir)/common/release.mak \
$(top_srcdir)/common/win32.mak ABOUT-NLS AUTHORS COPYING \
ChangeLog INSTALL NEWS README compile config.guess \
- config.rpath config.sub depcomp install-sh ltmain.sh missing
+ config.rpath config.sub install-sh ltmain.sh missing
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
@@ -355,6 +356,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -461,6 +463,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -528,6 +533,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/NEWS b/NEWS
index 4c3baab..027c018 100644
--- a/NEWS
+++ b/NEWS
@@ -1 +1 @@
-This is GStreamer 1.9.1
+This is GStreamer 1.9.2
diff --git a/RELEASE b/RELEASE
index 3517f47..280533c 100644
--- a/RELEASE
+++ b/RELEASE
@@ -1,12 +1,13 @@
-Release notes for GStreamer Good Plugins 1.9.1
+Release notes for GStreamer Good Plugins 1.9.2
-The GStreamer team is pleased to announce the first release of the unstable
-1.9 release series. The 1.9 release series is adding new features on top of
-the 1.0, 1.2, 1.4, 1.6 and 1.8 series and is part of the API and ABI-stable 1.x release
-series of the GStreamer multimedia framework. The unstable 1.9 release series
-will lead to the stable 1.10 release series in the next weeks. Any newly added
-API can still change until that point.
+The GStreamer team is pleased to announce the second release of the unstable
+1.9 release series, which marks the feature freeze for 1.10. The 1.9 release
+series is adding new features on top of the 1.0, 1.2, 1.4, 1.6 and 1.8 series
+and is part of the API and ABI-stable 1.x release series of the GStreamer
+multimedia framework. The unstable 1.9 release series will lead to the stable
+1.10 release series in the next weeks. Any newly added API can still change
+until that point.
Binaries for Android, iOS, Mac OS X and Windows will be provided in the next days.
@@ -55,53 +56,21 @@
Bugs fixed in this release
- * 762207 : flvmux: Ensure we fallback to DTS when clipping
- * 767071 : qtdemux: Various SEGMENT event related fixes, including regression fixes
- * 689460 : Can't playback LPCM data via HTTP after playing back something else
- * 693911 : souphttpsrc: rewrite using new session/request API
- * 745187 : JPEG2000 RTP video streaming problem
- * 749110 : qtdemux: Add the function to get channels and sample rate for AAC
- * 752462 : multifilesrc: set position as offset from start-index
- * 753614 : qtdemux: PIFF box parsing support
- * 753625 : splitmuxsrc: add " format-location " signal as a way to specify arbitrarily named files as input
- * 755725 : rtpj2kdepay: can't sync to a start code and never outputs
- * 755937 : v4l2object: probe colorspace supported by device
- * 758059 : Avimux: Add support for PNG images
- * 762216 : rtpsession: don't lock while emitting the stats signal
- * 762217 : rtpsession: Add new signal 'on-app-rtcp'
- * 762259 : rtpjitterbuffer: Add RFC7273 media clock handling
- * 762489 : rtpjpegdepay may push buffers before setting output caps
- * 762860 : sdp: Add new sdpsrc element and some sdpdemux bugfixes
- * 762988 : rtpjitterbuffer: Performance improvements
- * 763076 : good plugins: use new gst_element_class_add_static_pad_template()
- * 763326 : gst-launch of 8-channel deinterleave pipeline stalls
- * 763869 : deinterlace: Add " auto " fields mode
- * 763965 : qtdemux: Modify data type of duration in handle_src_query function
- * 763968 : qtdemux: Add check condition for fail case in get_duration function
- * 764119 : rtpmanager: Set to initial value for 'ntpns' in get_current_times()
- * 764769 : matroskamux: make timecodescale configurable
- * 765583 : ximageutil: shouldn't implement transform if don't support it
- * 765669 : qtdemux: Incorrect handling of video file which has an internal rate not equal to 1
- * 766236 : rtp j2k payload/depayload messes up colours in sample pattern
- * 766381 : v4l2object: use G_SELECTION instead of G_CROP in gst_v4l2_object_acquire_format
- * 766383 : v4l2object: fill colorimetry in gst_v4l2_object_acquire_format
- * 766438 : rtpjitterbuffer: Accept streams with non-TIME segments.
- * 766561 : gst-plugins-good: fix leaks in various tests
- * 766718 : souphttpsrc: fix buffer leak when flushing
- * 766970 : aacparse: sticky event criticals with RTL HD mpeg-ts stream
- * 767156 : good: fix leaks in tests
- * 767157 : dvdemux: Pass-through buffer DISCONT flags and recalculate frame offsets when needed
- * 767194 : matroskademux: preserve seek flags
- * 767195 : rtpsource: complete warn log with SSRC
- * 767354 : qtdemux: Handle upstream GAP in push-mode/time segment
- * 767788 : rtpjitterbuffer: fix RTPJitterBufferMode documentation
- * 767789 : rtph264pay: Deprecated sprop-parameter-set property
- * 767817 : Build error: gstrtpj2kpay.c:364:21: error: implicit truncation from 'int' to bitfield changes value from -1 to 65535
- * 767833 : souphttpsrc: use dynamic blocksize
- * 767861 : make check fail in " elements/splitmux " if theora or ogg plugins are not available
- * 768006 : flvdemux: Add support for H263 and MPEG4 part2
- * 768232 : rtspsrc: protocols aren't reset after rtsp redirect
- * 767799 : rtspsrc: always fill all srtp encoder properties
+ * 753760 : rtph265: sync against latest spec
+ * 763038 : souphttpsrc: add http error code to element error messages
+ * 767900 : multipartmux is not clearing dts timestamp.
+ * 767950 : qtmux: Add support for writing timecode track
+ * 768440 : flvdemux: Create per-stream tag lists
+ * 768653 : rtph265pay: does not accept array_completeness=1 in codec_data
+ * 768739 : tests: fix bus leaks in -good tests
+ * 768787 : AG_GST_PKG_CONFIG_PATH is not called before using GST_PKG_CONFIG_PATH
+ * 769117 : Regression building master
+ * 769390 : wavparse: Add bitrate and container format tags
+ * 769664 : splitmuxsink: Add option to split at exactly max-size-time
+ * 770285 : rtpbin: fix typo in max-misorder-time property name
+ * 770292 : rtpbin: introduce max-streams property
+ * 770394 : rtph265pay does not set RTP marker bit
+ * 770526 : osxvideo: fatal error: 'QuickTime/QuickTime.h' file not found (macOS Sierra)
==== Download ====
@@ -138,62 +107,32 @@
Contributors to this release
- * Aaron Boxer
- * Aleix Conchillo Flaqué
- * Alex Ashley
- * Andreas Naumann
- * Aurélien Zanelli
- * Brad Lackey
* Carlos Rafael Giani
- * Damian Ziobro
- * David Buchmann
- * Dimitrios Katsaros
* Edward Hervey
- * Enrico Jorns
- * George Kiagiadakis
* Guillaume Desmottes
* Havard Graff
- * Hyunjun Ko
+ * Jan Alexander Steffens (heftig)
* Jan Schmidt
- * Jesper Larsen
- * Jihae Yi
- * Jimmy Ohn
+ * Jie Jiang
* Jonas Holmberg
* Josep Torra
- * Julien Isorce
- * Jürgen Slowack
- * Kieran Bingham
* Luis de Bethencourt
- * Mario Sanchez Prada
- * Mark Nauwelaerts
* Mats Lindestam
- * Michael Olbrich
- * Miguel París Díaz
* Mikhail Fludkov
- * Minjae Kim
- * Nicola Murino
* Nicolas Dufresne
* Nirbheek Chauhan
* Olivier Crête
- * Paolo Pettinato
- * Patricia Muscalu
- * Peter Seiderer
- * Philipp Zabel
- * Philippe Normand
- * Pierre Lamot
- * Prashant Gotarne
* Reynaldo H. Verdejo Pinochet
* Sebastian Dröge
- * Seungha Yang
- * Song Bing
* Stefan Sauer
- * Steven Hoving
* Stian Selnes
* Thiago Santos
* Thibault Saunier
+ * Thomas Bluemel
+ * Thomas Scheuermann
* Tim-Philipp Müller
- * Vineeth TM
+ * Ting-Wei Lan
+ * Vincent Penquerc'h
* Vivia Nikolaidou
- * Wim Taymans
- * Xavier Claessens
+ * Xabier Rodriguez Calvar
\ No newline at end of file
diff --git a/aclocal.m4 b/aclocal.m4
index 18f8476..8cd7778 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1480,6 +1480,7 @@
m4_include([common/m4/as-libtool.m4])
m4_include([common/m4/as-version.m4])
m4_include([common/m4/ax_create_stdint_h.m4])
+m4_include([common/m4/ax_pthread.m4])
m4_include([common/m4/gst-arch.m4])
m4_include([common/m4/gst-args.m4])
m4_include([common/m4/gst-check.m4])
diff --git a/common/Makefile.in b/common/Makefile.in
index 5cb51dd..a490184 100644
--- a/common/Makefile.in
+++ b/common/Makefile.in
@@ -97,6 +97,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -315,6 +316,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -421,6 +423,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -488,6 +493,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/common/gtk-doc.mak b/common/gtk-doc.mak
index 4beebcf..3f83491 100644
--- a/common/gtk-doc.mak
+++ b/common/gtk-doc.mak
@@ -125,7 +125,7 @@
for i in $(DOC_SOURCE_DIR) ; do \
_source_dir="$${_source_dir} --source-dir=$$i" ; \
done ; \
- gtkdoc-mkdb --module=$(DOC_MODULE) $$(_source_dir) --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) --output-format=xml $(MKDB_OPTIONS)
+ gtkdoc-mkdb --module=$(DOC_MODULE) $${_source_dir} --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) --output-format=xml $(MKDB_OPTIONS)
@cp ../version.entities xml
@touch sgml-build.stamp
diff --git a/common/m4/Makefile.in b/common/m4/Makefile.in
index 559c954..f1ce0bd 100644
--- a/common/m4/Makefile.in
+++ b/common/m4/Makefile.in
@@ -97,6 +97,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -255,6 +256,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -361,6 +363,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -428,6 +433,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/config.h.in b/config.h.in
index 045cb16..3b317b6 100644
--- a/config.h.in
+++ b/config.h.in
@@ -269,6 +269,12 @@
/* Define to 1 if you have the <process.h> header file. */
#undef HAVE_PROCESS_H
+/* Define if you have POSIX threads libraries and header files. */
+#undef HAVE_PTHREAD
+
+/* Have PTHREAD_PRIO_INHERIT. */
+#undef HAVE_PTHREAD_PRIO_INHERIT
+
/* Define to enable pulseaudio plug-in (used by pulseaudio). */
#undef HAVE_PULSE
@@ -404,6 +410,10 @@
/* directory where plugins are located */
#undef PLUGINDIR
+/* Define to necessary symbol if this constant uses a non-standard name on
+ your system. */
+#undef PTHREAD_CREATE_JOINABLE
+
/* The size of `char', as computed by sizeof. */
#undef SIZEOF_CHAR
diff --git a/configure b/configure
index 2fc8e65..23a3393 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for GStreamer Good Plug-ins 1.9.1.
+# Generated by GNU Autoconf 2.69 for GStreamer Good Plug-ins 1.9.2.
#
# Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer>.
#
@@ -591,8 +591,8 @@
# Identity of this package.
PACKAGE_NAME='GStreamer Good Plug-ins'
PACKAGE_TARNAME='gst-plugins-good'
-PACKAGE_VERSION='1.9.1'
-PACKAGE_STRING='GStreamer Good Plug-ins 1.9.1'
+PACKAGE_VERSION='1.9.2'
+PACKAGE_STRING='GStreamer Good Plug-ins 1.9.2'
PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer'
PACKAGE_URL=''
@@ -932,6 +932,10 @@
GST_HAVE_MMAP_TRUE
HAVE_GCC_ASM_FALSE
HAVE_GCC_ASM_TRUE
+PTHREAD_CFLAGS
+PTHREAD_LIBS
+PTHREAD_CC
+ax_pthread_config
LIBRT
LIBM
ENABLE_PLUGIN_DOCS_FALSE
@@ -1009,6 +1013,7 @@
HAVE_CPU_PPC_TRUE
HAVE_CPU_I386_FALSE
HAVE_CPU_I386_TRUE
+GST_PKG_CONFIG_PATH
BUILD_EXPERIMENTAL_FALSE
BUILD_EXPERIMENTAL_TRUE
USE_EXPERIMENTAL_FALSE
@@ -1964,7 +1969,7 @@
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures GStreamer Good Plug-ins 1.9.1 to adapt to many kinds of systems.
+\`configure' configures GStreamer Good Plug-ins 1.9.2 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -2037,7 +2042,7 @@
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of GStreamer Good Plug-ins 1.9.1:";;
+ short | recursive ) echo "Configuration of GStreamer Good Plug-ins 1.9.2:";;
esac
cat <<\_ACEOF
@@ -2413,7 +2418,7 @@
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-GStreamer Good Plug-ins configure 1.9.1
+GStreamer Good Plug-ins configure 1.9.2
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -3224,7 +3229,7 @@
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by GStreamer Good Plug-ins $as_me 1.9.1, which was
+It was created by GStreamer Good Plug-ins $as_me 1.9.2, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -4206,7 +4211,7 @@
# Define the identity of the package.
PACKAGE='gst-plugins-good'
- VERSION='1.9.1'
+ VERSION='1.9.2'
cat >>confdefs.h <<_ACEOF
@@ -4417,9 +4422,9 @@
- PACKAGE_VERSION_MAJOR=$(echo 1.9.1 | cut -d'.' -f1)
- PACKAGE_VERSION_MINOR=$(echo 1.9.1 | cut -d'.' -f2)
- PACKAGE_VERSION_MICRO=$(echo 1.9.1 | cut -d'.' -f3)
+ PACKAGE_VERSION_MAJOR=$(echo 1.9.2 | cut -d'.' -f1)
+ PACKAGE_VERSION_MINOR=$(echo 1.9.2 | cut -d'.' -f2)
+ PACKAGE_VERSION_MICRO=$(echo 1.9.2 | cut -d'.' -f3)
@@ -4430,7 +4435,7 @@
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking nano version" >&5
$as_echo_n "checking nano version... " >&6; }
- NANO=$(echo 1.9.1 | cut -d'.' -f4)
+ NANO=$(echo 1.9.2 | cut -d'.' -f4)
if test x"$NANO" = x || test "x$NANO" = "x0" ; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: 0 (release)" >&5
@@ -9271,10 +9276,10 @@
done
- GST_CURRENT=901
+ GST_CURRENT=902
GST_REVISION=0
- GST_AGE=901
- GST_LIBVERSION=901:0:901
+ GST_AGE=902
+ GST_LIBVERSION=902:0:902
@@ -13902,8 +13907,8 @@
-GST_REQ=1.9.1
-GSTPB_REQ=1.9.1
+GST_REQ=1.9.2
+GSTPB_REQ=1.9.2
@@ -16675,6 +16680,16 @@
+ GST_PKG_CONFIG_PATH="\$(top_builddir)/pkgconfig"
+ if test "x$PKG_CONFIG_PATH" != "x"; then
+ GST_PKG_CONFIG_PATH="$GST_PKG_CONFIG_PATH:$PKG_CONFIG_PATH"
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Using GST_PKG_CONFIG_PATH = $GST_PKG_CONFIG_PATH" >&5
+$as_echo "$as_me: Using GST_PKG_CONFIG_PATH = $GST_PKG_CONFIG_PATH" >&6;}
+
+
+
case "x${target_cpu}" in
@@ -23712,6 +23727,648 @@
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ax_pthread_ok=no
+
+# We used to check for pthread.h first, but this fails if pthread.h
+# requires special compiler flags (e.g. on Tru64 or Sequent).
+# It gets checked for in the link test anyway.
+
+# First of all, check if the user has set any of the PTHREAD_LIBS,
+# etcetera environment variables, and if threads linking works using
+# them:
+if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then
+ ax_pthread_save_CC="$CC"
+ ax_pthread_save_CFLAGS="$CFLAGS"
+ ax_pthread_save_LIBS="$LIBS"
+ if test "x$PTHREAD_CC" != "x"; then :
+ CC="$PTHREAD_CC"
+fi
+ CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+ LIBS="$PTHREAD_LIBS $LIBS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS" >&5
+$as_echo_n "checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char pthread_join ();
+int
+main ()
+{
+return pthread_join ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ax_pthread_ok=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
+$as_echo "$ax_pthread_ok" >&6; }
+ if test "x$ax_pthread_ok" = "xno"; then
+ PTHREAD_LIBS=""
+ PTHREAD_CFLAGS=""
+ fi
+ CC="$ax_pthread_save_CC"
+ CFLAGS="$ax_pthread_save_CFLAGS"
+ LIBS="$ax_pthread_save_LIBS"
+fi
+
+# We must check for the threads library under a number of different
+# names; the ordering is very important because some systems
+# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
+# libraries is broken (non-POSIX).
+
+# Create a list of thread flags to try. Items starting with a "-" are
+# C compiler flags, and other items are library names, except for "none"
+# which indicates that we try without any flags at all, and "pthread-config"
+# which is a program returning the flags for the Pth emulation library.
+
+ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
+
+# The ordering *is* (sometimes) important. Some notes on the
+# individual items follow:
+
+# pthreads: AIX (must check this before -lpthread)
+# none: in case threads are in libc; should be tried before -Kthread and
+# other compiler flags to prevent continual compiler warnings
+# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
+# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads), Tru64
+# (Note: HP C rejects this with "bad form for `-t' option")
+# -pthreads: Solaris/gcc (Note: HP C also rejects)
+# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
+# doesn't hurt to check since this sometimes defines pthreads and
+# -D_REENTRANT too), HP C (must be checked before -lpthread, which
+# is present but should not be used directly; and before -mthreads,
+# because the compiler interprets this as "-mt" + "-hreads")
+# -mthreads: Mingw32/gcc, Lynx/gcc
+# pthread: Linux, etcetera
+# --thread-safe: KAI C++
+# pthread-config: use pthread-config program (for GNU Pth library)
+
+case $host_os in
+
+ freebsd*)
+
+ # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
+ # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
+
+ ax_pthread_flags="-kthread lthread $ax_pthread_flags"
+ ;;
+
+ hpux*)
+
+ # From the cc(1) man page: "[-mt] Sets various -D flags to enable
+ # multi-threading and also sets -lpthread."
+
+ ax_pthread_flags="-mt -pthread pthread $ax_pthread_flags"
+ ;;
+
+ openedition*)
+
+ # IBM z/OS requires a feature-test macro to be defined in order to
+ # enable POSIX threads at all, so give the user a hint if this is
+ # not set. (We don't define these ourselves, as they can affect
+ # other portions of the system API in unpredictable ways.)
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+# if !defined(_OPEN_THREADS) && !defined(_UNIX03_THREADS)
+ AX_PTHREAD_ZOS_MISSING
+# endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "AX_PTHREAD_ZOS_MISSING" >/dev/null 2>&1; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&5
+$as_echo "$as_me: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&2;}
+fi
+rm -f conftest*
+
+ ;;
+
+ solaris*)
+
+ # On Solaris (at least, for some versions), libc contains stubbed
+ # (non-functional) versions of the pthreads routines, so link-based
+ # tests will erroneously succeed. (N.B.: The stubs are missing
+ # pthread_cleanup_push, or rather a function called by this macro,
+ # so we could check for that, but who knows whether they'll stub
+ # that too in a future libc.) So we'll check first for the
+ # standard Solaris way of linking pthreads (-mt -lpthread).
+
+ ax_pthread_flags="-mt,pthread pthread $ax_pthread_flags"
+ ;;
+esac
+
+# GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC)
+
+if test "x$GCC" = "xyes"; then :
+ ax_pthread_flags="-pthread -pthreads $ax_pthread_flags"
+fi
+
+# The presence of a feature test macro requesting re-entrant function
+# definitions is, on some systems, a strong hint that pthreads support is
+# correctly enabled
+
+case $host_os in
+ darwin* | hpux* | linux* | osf* | solaris*)
+ ax_pthread_check_macro="_REENTRANT"
+ ;;
+
+ aix*)
+ ax_pthread_check_macro="_THREAD_SAFE"
+ ;;
+
+ *)
+ ax_pthread_check_macro="--"
+ ;;
+esac
+if test "x$ax_pthread_check_macro" = "x--"; then :
+ ax_pthread_check_cond=0
+else
+ ax_pthread_check_cond="!defined($ax_pthread_check_macro)"
+fi
+
+# Are we compiling with Clang?
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC is Clang" >&5
+$as_echo_n "checking whether $CC is Clang... " >&6; }
+if ${ax_cv_PTHREAD_CLANG+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ax_cv_PTHREAD_CLANG=no
+ # Note that Autoconf sets GCC=yes for Clang as well as GCC
+ if test "x$GCC" = "xyes"; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+/* Note: Clang 2.7 lacks __clang_[a-z]+__ */
+# if defined(__clang__) && defined(__llvm__)
+ AX_PTHREAD_CC_IS_CLANG
+# endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "AX_PTHREAD_CC_IS_CLANG" >/dev/null 2>&1; then :
+ ax_cv_PTHREAD_CLANG=yes
+fi
+rm -f conftest*
+
+ fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG" >&5
+$as_echo "$ax_cv_PTHREAD_CLANG" >&6; }
+ax_pthread_clang="$ax_cv_PTHREAD_CLANG"
+
+ax_pthread_clang_warning=no
+
+# Clang needs special handling, because older versions handle the -pthread
+# option in a rather... idiosyncratic way
+
+if test "x$ax_pthread_clang" = "xyes"; then
+
+ # Clang takes -pthread; it has never supported any other flag
+
+ # (Note 1: This will need to be revisited if a system that Clang
+ # supports has POSIX threads in a separate library. This tends not
+ # to be the way of modern systems, but it's conceivable.)
+
+ # (Note 2: On some systems, notably Darwin, -pthread is not needed
+ # to get POSIX threads support; the API is always present and
+ # active. We could reasonably leave PTHREAD_CFLAGS empty. But
+ # -pthread does define _REENTRANT, and while the Darwin headers
+ # ignore this macro, third-party headers might not.)
+
+ PTHREAD_CFLAGS="-pthread"
+ PTHREAD_LIBS=
+
+ ax_pthread_ok=yes
+
+ # However, older versions of Clang make a point of warning the user
+ # that, in an invocation where only linking and no compilation is
+ # taking place, the -pthread option has no effect ("argument unused
+ # during compilation"). They expect -pthread to be passed in only
+ # when source code is being compiled.
+ #
+ # Problem is, this is at odds with the way Automake and most other
+ # C build frameworks function, which is that the same flags used in
+ # compilation (CFLAGS) are also used in linking. Many systems
+ # supported by AX_PTHREAD require exactly this for POSIX threads
+ # support, and in fact it is often not straightforward to specify a
+ # flag that is used only in the compilation phase and not in
+ # linking. Such a scenario is extremely rare in practice.
+ #
+ # Even though use of the -pthread flag in linking would only print
+ # a warning, this can be a nuisance for well-run software projects
+ # that build with -Werror. So if the active version of Clang has
+ # this misfeature, we search for an option to squash it.
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread" >&5
+$as_echo_n "checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread... " >&6; }
+if ${ax_cv_PTHREAD_CLANG_NO_WARN_FLAG+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown
+ # Create an alternate version of $ac_link that compiles and
+ # links in two steps (.c -> .o, .o -> exe) instead of one
+ # (.c -> exe), because the warning occurs only in the second
+ # step
+ ax_pthread_save_ac_link="$ac_link"
+ ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g'
+ ax_pthread_link_step=`$as_echo "$ac_link" | sed "$ax_pthread_sed"`
+ ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)"
+ ax_pthread_save_CFLAGS="$CFLAGS"
+ for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do
+ if test "x$ax_pthread_try" = "xunknown"; then :
+ break
+fi
+ CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS"
+ ac_link="$ax_pthread_save_ac_link"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int main(void){return 0;}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_link="$ax_pthread_2step_ac_link"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int main(void){return 0;}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ break
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ done
+ ac_link="$ax_pthread_save_ac_link"
+ CFLAGS="$ax_pthread_save_CFLAGS"
+ if test "x$ax_pthread_try" = "x"; then :
+ ax_pthread_try=no
+fi
+ ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&5
+$as_echo "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&6; }
+
+ case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in
+ no | unknown) ;;
+ *) PTHREAD_CFLAGS="$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG $PTHREAD_CFLAGS" ;;
+ esac
+
+fi # $ax_pthread_clang = yes
+
+if test "x$ax_pthread_ok" = "xno"; then
+for ax_pthread_try_flag in $ax_pthread_flags; do
+
+ case $ax_pthread_try_flag in
+ none)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5
+$as_echo_n "checking whether pthreads work without any flags... " >&6; }
+ ;;
+
+ -mt,pthread)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with -mt -lpthread" >&5
+$as_echo_n "checking whether pthreads work with -mt -lpthread... " >&6; }
+ PTHREAD_CFLAGS="-mt"
+ PTHREAD_LIBS="-lpthread"
+ ;;
+
+ -*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $ax_pthread_try_flag" >&5
+$as_echo_n "checking whether pthreads work with $ax_pthread_try_flag... " >&6; }
+ PTHREAD_CFLAGS="$ax_pthread_try_flag"
+ ;;
+
+ pthread-config)
+ # Extract the first word of "pthread-config", so it can be a program name with args.
+set dummy pthread-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ax_pthread_config+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ax_pthread_config"; then
+ ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ax_pthread_config="yes"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_prog_ax_pthread_config" && ac_cv_prog_ax_pthread_config="no"
+fi
+fi
+ax_pthread_config=$ac_cv_prog_ax_pthread_config
+if test -n "$ax_pthread_config"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5
+$as_echo "$ax_pthread_config" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ if test "x$ax_pthread_config" = "xno"; then :
+ continue
+fi
+ PTHREAD_CFLAGS="`pthread-config --cflags`"
+ PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
+ ;;
+
+ *)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$ax_pthread_try_flag" >&5
+$as_echo_n "checking for the pthreads library -l$ax_pthread_try_flag... " >&6; }
+ PTHREAD_LIBS="-l$ax_pthread_try_flag"
+ ;;
+ esac
+
+ ax_pthread_save_CFLAGS="$CFLAGS"
+ ax_pthread_save_LIBS="$LIBS"
+ CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+ LIBS="$PTHREAD_LIBS $LIBS"
+
+ # Check for various functions. We must include pthread.h,
+ # since some functions may be macros. (On the Sequent, we
+ # need a special flag -Kthread to make this header compile.)
+ # We check for pthread_join because it is in -lpthread on IRIX
+ # while pthread_create is in libc. We check for pthread_attr_init
+ # due to DEC craziness with -lpthreads. We check for
+ # pthread_cleanup_push because it is one of the few pthread
+ # functions on Solaris that doesn't have a non-functional libc stub.
+ # We try pthread_create on general principles.
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <pthread.h>
+# if $ax_pthread_check_cond
+# error "$ax_pthread_check_macro must be defined"
+# endif
+ static void routine(void *a) { a = 0; }
+ static void *start_routine(void *a) { return a; }
+int
+main ()
+{
+pthread_t th; pthread_attr_t attr;
+ pthread_create(&th, 0, start_routine, 0);
+ pthread_join(th, 0);
+ pthread_attr_init(&attr);
+ pthread_cleanup_push(routine, 0);
+ pthread_cleanup_pop(0) /* ; */
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ax_pthread_ok=yes
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+ CFLAGS="$ax_pthread_save_CFLAGS"
+ LIBS="$ax_pthread_save_LIBS"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
+$as_echo "$ax_pthread_ok" >&6; }
+ if test "x$ax_pthread_ok" = "xyes"; then :
+ break
+fi
+
+ PTHREAD_LIBS=""
+ PTHREAD_CFLAGS=""
+done
+fi
+
+# Various other checks:
+if test "x$ax_pthread_ok" = "xyes"; then
+ ax_pthread_save_CFLAGS="$CFLAGS"
+ ax_pthread_save_LIBS="$LIBS"
+ CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+ LIBS="$PTHREAD_LIBS $LIBS"
+
+ # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5
+$as_echo_n "checking for joinable pthread attribute... " >&6; }
+if ${ax_cv_PTHREAD_JOINABLE_ATTR+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ax_cv_PTHREAD_JOINABLE_ATTR=unknown
+ for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <pthread.h>
+int
+main ()
+{
+int attr = $ax_pthread_attr; return attr /* ; */
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_JOINABLE_ATTR" >&5
+$as_echo "$ax_cv_PTHREAD_JOINABLE_ATTR" >&6; }
+ if test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \
+ test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \
+ test "x$ax_pthread_joinable_attr_defined" != "xyes"; then :
+
+cat >>confdefs.h <<_ACEOF
+#define PTHREAD_CREATE_JOINABLE $ax_cv_PTHREAD_JOINABLE_ATTR
+_ACEOF
+
+ ax_pthread_joinable_attr_defined=yes
+
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether more special flags are required for pthreads" >&5
+$as_echo_n "checking whether more special flags are required for pthreads... " >&6; }
+if ${ax_cv_PTHREAD_SPECIAL_FLAGS+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ax_cv_PTHREAD_SPECIAL_FLAGS=no
+ case $host_os in
+ solaris*)
+ ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS"
+ ;;
+ esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_SPECIAL_FLAGS" >&5
+$as_echo "$ax_cv_PTHREAD_SPECIAL_FLAGS" >&6; }
+ if test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \
+ test "x$ax_pthread_special_flags_added" != "xyes"; then :
+ PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS"
+ ax_pthread_special_flags_added=yes
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5
+$as_echo_n "checking for PTHREAD_PRIO_INHERIT... " >&6; }
+if ${ax_cv_PTHREAD_PRIO_INHERIT+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <pthread.h>
+int
+main ()
+{
+int i = PTHREAD_PRIO_INHERIT;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ax_cv_PTHREAD_PRIO_INHERIT=yes
+else
+ ax_cv_PTHREAD_PRIO_INHERIT=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5
+$as_echo "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; }
+ if test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \
+ test "x$ax_pthread_prio_inherit_defined" != "xyes"; then :
+
+$as_echo "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h
+
+ ax_pthread_prio_inherit_defined=yes
+
+fi
+
+ CFLAGS="$ax_pthread_save_CFLAGS"
+ LIBS="$ax_pthread_save_LIBS"
+
+ # More AIX lossage: compile with *_r variant
+ if test "x$GCC" != "xyes"; then
+ case $host_os in
+ aix*)
+ case "x/$CC" in #(
+ x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6) :
+ #handle absolute path differently from PATH based program lookup
+ case "x$CC" in #(
+ x/*) :
+ if as_fn_executable_p ${CC}_r; then :
+ PTHREAD_CC="${CC}_r"
+fi ;; #(
+ *) :
+ for ac_prog in ${CC}_r
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_PTHREAD_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$PTHREAD_CC"; then
+ ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_PTHREAD_CC="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+PTHREAD_CC=$ac_cv_prog_PTHREAD_CC
+if test -n "$PTHREAD_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5
+$as_echo "$PTHREAD_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$PTHREAD_CC" && break
+done
+test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
+ ;;
+esac ;; #(
+ *) :
+ ;;
+esac
+ ;;
+ esac
+ fi
+fi
+
+test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
+
+
+
+
+
+# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
+if test "x$ax_pthread_ok" = "xyes"; then
+
+$as_echo "#define HAVE_PTHREAD 1" >>confdefs.h
+
+ :
+else
+ ax_pthread_ok=no
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
$as_echo_n "checking for ANSI C header files... " >&6; }
if ${ac_cv_header_stdc+:} false; then :
@@ -30423,12 +31080,27 @@
fi
fi
+case $host in #(
+ *-*linux*) :
+ case $host_cpu in #(
+ arm*) :
+
+ enable_v4l2_probe="yes" ;; #(
+ aarch64*) :
+
+ enable_v4l2_probe="yes" ;; #(
+ *) :
+ ;;
+esac ;; #(
+ *) :
+ ;;
+esac
# Check whether --enable-v4l2-probe was given.
if test "${enable_v4l2_probe+set}" = set; then :
enableval=$enable_v4l2_probe;
fi
-if test "x$enable_v4l2_probe" = xyes; then
+if test "x$enable_v4l2_probe" = "xyes"; then
$as_echo "#define GST_V4L2_ENABLE_PROBE 1" >>confdefs.h
@@ -36873,7 +37545,7 @@
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by GStreamer Good Plug-ins $as_me 1.9.1, which was
+This file was extended by GStreamer Good Plug-ins $as_me 1.9.2, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -36939,7 +37611,7 @@
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-GStreamer Good Plug-ins config.status 1.9.1
+GStreamer Good Plug-ins config.status 1.9.2
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
@@ -38282,7 +38954,6 @@
cat <<_LT_EOF >> "$cfgfile"
#! $SHELL
# Generated automatically by $as_me ($PACKAGE) $VERSION
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
# NOTE: Changes made to this file will be lost: look at ltmain.sh.
# Provide generalized library-building support services.
diff --git a/configure.ac b/configure.ac
index 12d57a9..9c9d043 100644
--- a/configure.ac
+++ b/configure.ac
@@ -5,7 +5,7 @@
dnl initialize autoconf
dnl releases only do -Wall, git and prerelease does -Werror too
dnl use a three digit version number for releases, and four for git/pre
-AC_INIT([GStreamer Good Plug-ins],[1.9.1],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gst-plugins-good])
+AC_INIT([GStreamer Good Plug-ins],[1.9.2],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gst-plugins-good])
AG_GST_INIT
@@ -43,11 +43,11 @@
[GStreamer API Version])
AG_GST_LIBTOOL_PREPARE
-AS_LIBTOOL(GST, 901, 0, 901)
+AS_LIBTOOL(GST, 902, 0, 902)
dnl *** required versions of GStreamer stuff ***
-GST_REQ=1.9.1
-GSTPB_REQ=1.9.1
+GST_REQ=1.9.2
+GSTPB_REQ=1.9.2
dnl *** autotools stuff ****
@@ -85,6 +85,8 @@
AG_GST_ARG_ENABLE_EXPERIMENTAL
+AG_GST_PKG_CONFIG_PATH
+
dnl *** checks for platform ***
dnl * hardware/architecture *
@@ -143,6 +145,9 @@
])
])
+dnl check for pthreads
+AX_PTHREAD
+
dnl *** checks for header files ***
dnl check if we have ANSI C header files
@@ -571,12 +576,19 @@
fi
dnl Allow enabling v4l2 device probing
+AS_CASE([$host],
+ [*-*linux*],
+ [AS_CASE([$host_cpu],
+ [arm*], [
+ enable_v4l2_probe="yes"],
+ [aarch64*], [
+ enable_v4l2_probe="yes"])])
AC_ARG_ENABLE(
v4l2-probe,
AC_HELP_STRING(
[--enable-v4l2-probe],
[enable V4L2 plugin to probe devices @<:@default=no@:>@]))
-if test "x$enable_v4l2_probe" = xyes; then
+if test "x$enable_v4l2_probe" = "xyes"; then
AC_DEFINE(GST_V4L2_ENABLE_PROBE, 1,
[Define if Video4Linux probe shall be run at plugin load])
fi
diff --git a/docs/Makefile.in b/docs/Makefile.in
index ce70b0a..c36a67b 100644
--- a/docs/Makefile.in
+++ b/docs/Makefile.in
@@ -97,6 +97,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -314,6 +315,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -420,6 +422,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -487,6 +492,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/docs/plugins/Makefile.in b/docs/plugins/Makefile.in
index 17e5ac8..634f9de 100644
--- a/docs/plugins/Makefile.in
+++ b/docs/plugins/Makefile.in
@@ -114,6 +114,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -274,6 +275,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -380,6 +382,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -447,6 +452,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/docs/plugins/gst-plugins-good-plugins.args b/docs/plugins/gst-plugins-good-plugins.args
index 252d228..28c1859 100644
--- a/docs/plugins/gst-plugins-good-plugins.args
+++ b/docs/plugins/gst-plugins-good-plugins.args
@@ -1015,7 +1015,7 @@
<FLAGS>rw</FLAGS>
<NICK>User Agent</NICK>
<BLURB>The User-Agent string to send to the server.</BLURB>
-<DEFAULT>"GStreamer/1.9.1"</DEFAULT>
+<DEFAULT>"GStreamer/1.9.2"</DEFAULT>
</ARG>
<ARG>
@@ -2234,7 +2234,7 @@
<RANGE></RANGE>
<FLAGS>rwx</FLAGS>
<NICK>method</NICK>
-<BLURB>method.</BLURB>
+<BLURB>method (deprecated, use video-direction instead).</BLURB>
<DEFAULT>Identity (no rotation)</DEFAULT>
</ARG>
@@ -20559,6 +20559,16 @@
</ARG>
<ARG>
+<NAME>GstRtpBin::max-streams</NAME>
+<TYPE>guint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Max Streams</NICK>
+<BLURB>The maximum number of streams to create for one session.</BLURB>
+<DEFAULT>4294967295</DEFAULT>
+</ARG>
+
+<ARG>
<NAME>GstRtpJitterBuffer::do-lost</NAME>
<TYPE>gboolean</TYPE>
<RANGE></RANGE>
@@ -23889,6 +23899,16 @@
</ARG>
<ARG>
+<NAME>GstSplitMuxSink::send-keyframe-requests</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Request keyframes at max-size-time</NICK>
+<BLURB>Request a keyframe every max-size-time ns to try splitting at that point. Needs max-size-bytes to be 0 in order to be effective.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
<NAME>GstRtpVP9Pay::picture-id-mode</NAME>
<TYPE>GstVP9RTPPayMode</TYPE>
<RANGE></RANGE>
diff --git a/docs/plugins/gst-plugins-good-plugins.hierarchy b/docs/plugins/gst-plugins-good-plugins.hierarchy
index f6e2da5..327d11d 100644
--- a/docs/plugins/gst-plugins-good-plugins.hierarchy
+++ b/docs/plugins/gst-plugins-good-plugins.hierarchy
@@ -358,4 +358,5 @@
GstTocSetter
GstTuner
GstURIHandler
+ GstVideoDirection
GstVideoOrientation
diff --git a/docs/plugins/gst-plugins-good-plugins.interfaces b/docs/plugins/gst-plugins-good-plugins.interfaces
index a065787..8b96cce 100644
--- a/docs/plugins/gst-plugins-good-plugins.interfaces
+++ b/docs/plugins/gst-plugins-good-plugins.interfaces
@@ -97,6 +97,7 @@
GstVideoBalance GstColorBalance
GstVideoBalance GstImplementsInterface GstColorBalance
GstVideoEncoder GstPreset
+GstVideoFlip GstVideoDirection
GstVideoMixer GstChildProxy
GstVideoMixer2 GstChildProxy
GstWavEnc GstTagSetter GstTocSetter
diff --git a/docs/plugins/html/gst-plugins-good-plugins-1.0.devhelp2 b/docs/plugins/html/gst-plugins-good-plugins-1.0.devhelp2
index af5bff1..cf8db40 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-1.0.devhelp2
+++ b/docs/plugins/html/gst-plugins-good-plugins-1.0.devhelp2
@@ -869,6 +869,7 @@
<keyword type="property" name="The “max-rtcp-rtp-time-diff” property" link="gst-plugins-good-plugins-rtpbin.html#GstRtpBin--max-rtcp-rtp-time-diff"/>
<keyword type="property" name="The “rtcp-sync-send-time” property" link="gst-plugins-good-plugins-rtpbin.html#GstRtpBin--rtcp-sync-send-time"/>
<keyword type="property" name="The “rfc7273-sync” property" link="gst-plugins-good-plugins-rtpbin.html#GstRtpBin--rfc7273-sync"/>
+ <keyword type="property" name="The “max-streams” property" link="gst-plugins-good-plugins-rtpbin.html#GstRtpBin--max-streams"/>
<keyword type="signal" name="The “clear-pt-map” signal" link="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-clear-pt-map"/>
<keyword type="signal" name="The “get-internal-session” signal" link="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-get-internal-session"/>
<keyword type="signal" name="The “on-bye-ssrc” signal" link="gst-plugins-good-plugins-rtpbin.html#GstRtpBin-on-bye-ssrc"/>
@@ -1252,6 +1253,7 @@
<keyword type="property" name="The “muxer” property" link="gst-plugins-good-plugins-splitmuxsink.html#GstSplitMuxSink--muxer"/>
<keyword type="property" name="The “sink” property" link="gst-plugins-good-plugins-splitmuxsink.html#GstSplitMuxSink--sink"/>
<keyword type="property" name="The “max-files” property" link="gst-plugins-good-plugins-splitmuxsink.html#GstSplitMuxSink--max-files"/>
+ <keyword type="property" name="The “send-keyframe-requests” property" link="gst-plugins-good-plugins-splitmuxsink.html#GstSplitMuxSink--send-keyframe-requests"/>
<keyword type="signal" name="The “format-location” signal" link="gst-plugins-good-plugins-splitmuxsink.html#GstSplitMuxSink-format-location"/>
<keyword type="struct" name="struct GstSplitMuxSrc" link="gst-plugins-good-plugins-splitmuxsrc.html#GstSplitMuxSrc-struct"/>
<keyword type="property" name="The “location” property" link="gst-plugins-good-plugins-splitmuxsrc.html#GstSplitMuxSrc--location"/>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-avidemux.html b/docs/plugins/html/gst-plugins-good-plugins-avidemux.html
index 8ac03f7..1d3afc7 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-avidemux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-avidemux.html
@@ -150,27 +150,27 @@
</tr>
<tr>
<td><p><span class="term">details</span></p></td>
-<td>audio/ms-gsm, rate=(int)[ 1, 96000 ], channels=(int)[ 1, 2 ]</td>
+<td>audio/ms-gsm</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/mpeg, mpegversion=(int)1, layer=(int)3, rate=(int)[ 8000, 48000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/mpeg, mpegversion=(int)1, layer=(int)3</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/mpeg, mpegversion=(int)1, layer=(int)2, rate=(int)[ 16000, 48000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/mpeg, mpegversion=(int)1, layer=(int)2</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/x-raw, format=(string){ S8, U8, S16LE, U16LE, S24LE, U24LE, S32LE, U32LE }, layout=(string)interleaved, rate=(int)[ 1000, 192000 ], channels=(int)[ 1, 8 ]</td>
+<td> audio/x-raw, format=(string){ S8, U8, S16LE, U16LE, S24LE, U24LE, S32LE, U32LE }, layout=(string)interleaved</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/x-vorbis, rate=(int)[ 1000, 192000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/x-vorbis</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/x-ac3, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 6 ]</td>
+<td> audio/x-ac3</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
@@ -178,75 +178,75 @@
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/mpeg, mpegversion=(int)4, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ]</td>
+<td> audio/mpeg, mpegversion=(int)4</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/x-alaw, rate=(int)[ 1000, 48000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/x-alaw</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/x-mulaw, rate=(int)[ 1000, 48000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/x-mulaw</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/x-wms, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ], block_align=(int)[ 1, 2147483647 ]</td>
+<td> audio/x-wms, bitrate=(int)[ 0, 2147483647 ], block_align=(int)[ 1, 2147483647 ]</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/x-adpcm, layout=(string)microsoft, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ], block_align=(int)[ 1, 2147483647 ]</td>
+<td> audio/x-adpcm, layout=(string)microsoft, block_align=(int)[ 1, 2147483647 ]</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/x-adpcm, layout=(string)dvi, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ], block_align=(int)[ 1, 2147483647 ]</td>
+<td> audio/x-adpcm, layout=(string)dvi, block_align=(int)[ 1, 2147483647 ]</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/x-truespeech, rate=(int)8000, channels=(int)[ 1, 2 ]</td>
+<td> audio/x-truespeech</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/x-wma, wmaversion=(int)1, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ], block_align=(int)[ 1, 2147483647 ]</td>
+<td> audio/x-wma, wmaversion=(int)1, bitrate=(int)[ 0, 2147483647 ], block_align=(int)[ 1, 2147483647 ]</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/x-wma, wmaversion=(int)2, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ], block_align=(int)[ 1, 2147483647 ]</td>
+<td> audio/x-wma, wmaversion=(int)2, bitrate=(int)[ 0, 2147483647 ], block_align=(int)[ 1, 2147483647 ]</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/x-wma, wmaversion=(int)3, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ], block_align=(int)[ 1, 2147483647 ]</td>
+<td> audio/x-wma, wmaversion=(int)3, bitrate=(int)[ 0, 2147483647 ], block_align=(int)[ 1, 2147483647 ]</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/x-vnd.sony.atrac3, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/x-vnd.sony.atrac3</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/x-raw, format=(string){ F32LE, F64LE }, layout=(string)interleaved, rate=(int)[ 1000, 192000 ], channels=(int)[ 1, 8 ]</td>
+<td> audio/x-raw, format=(string){ F32LE, F64LE }, layout=(string)interleaved</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/x-voxware, voxwaretype=(int)117, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/x-voxware, voxwaretype=(int)117</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/x-adpcm, layout=(string)dk4, rate=(int)[ 8000, 96000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/x-adpcm, layout=(string)dk4</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/x-adpcm, layout=(string)dk3, rate=(int)[ 8000, 96000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/x-adpcm, layout=(string)dk3</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/x-adpcm, layout=(string)dvi, rate=(int)[ 8000, 96000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/x-adpcm, layout=(string)dvi</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/AMR, rate=(int)8000, channels=(int)1</td>
+<td> audio/AMR</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/AMR-WB, rate=(int)16000, channels=(int)1</td>
+<td> audio/AMR-WB</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-1394.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-1394.html
index 5700a60..5a83d4b 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-1394.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-1394.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-aasink.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-aasink.html
index 0cf89a3..3b1e3c3 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-aasink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-aasink.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-alaw.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-alaw.html
index f119311..073c67b 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-alaw.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-alaw.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-alpha.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-alpha.html
index d9332ac..ff6b1cd 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-alpha.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-alpha.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-alphacolor.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-alphacolor.html
index 9641e38..3322980 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-alphacolor.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-alphacolor.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-apetag.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-apetag.html
index 09ca302..6c47372 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-apetag.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-apetag.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-audiofx.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-audiofx.html
index 355bbe9..20caa38 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-audiofx.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-audiofx.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-audioparsers.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-audioparsers.html
index f3d4c89..3ecc342 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-audioparsers.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-audioparsers.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-auparse.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-auparse.html
index 2746b94..1082d2d 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-auparse.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-auparse.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-autodetect.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-autodetect.html
index cecabea..1ba16f1 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-autodetect.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-autodetect.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-avi.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-avi.html
index 811ed79..5b64930 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-avi.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-avi.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-cacasink.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-cacasink.html
index cf32874..c3af9e4 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-cacasink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-cacasink.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-cairo.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-cairo.html
index 1b1355a..da063b9 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-cairo.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-cairo.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-cutter.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-cutter.html
index 8de1669..c83682f 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-cutter.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-cutter.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-debug.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-debug.html
index f0917dc..ac8962d 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-debug.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-debug.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-deinterlace.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-deinterlace.html
index c5b2ffc..109e7cc 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-deinterlace.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-deinterlace.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-dtmf.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-dtmf.html
index 51c54e9..55f7555 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-dtmf.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-dtmf.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-dv.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-dv.html
index 9ff920a..2943dcb 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-dv.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-dv.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-effectv.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-effectv.html
index 3912dfd..ecc25cc 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-effectv.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-effectv.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-equalizer.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-equalizer.html
index f44701b..476b4ac 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-equalizer.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-equalizer.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-flac.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-flac.html
index 520a100..dc0ed5e 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-flac.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-flac.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-flv.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-flv.html
index ec1b12d..3c275ca 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-flv.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-flv.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-flxdec.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-flxdec.html
index b2f9296..a9dc9f9 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-flxdec.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-flxdec.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-gdkpixbuf.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-gdkpixbuf.html
index 0b631d5..9df8607 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-gdkpixbuf.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-gdkpixbuf.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-goom.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-goom.html
index 3510297..28e4ecc 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-goom.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-goom.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-goom2k1.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-goom2k1.html
index d84e50e..e0d5d8a 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-goom2k1.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-goom2k1.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-icydemux.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-icydemux.html
index 489059a..443f39a 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-icydemux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-icydemux.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-id3demux.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-id3demux.html
index 5fe9366..e1eb976 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-id3demux.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-id3demux.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-imagefreeze.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-imagefreeze.html
index f89e55f..e66daaa 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-imagefreeze.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-imagefreeze.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-interleave.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-interleave.html
index 83dff22..16d1ffe 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-interleave.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-interleave.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-isomp4.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-isomp4.html
index 1339799..dcc9120 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-isomp4.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-isomp4.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-jack.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-jack.html
index 00b05e5..79f4f82 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-jack.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-jack.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-jpeg.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-jpeg.html
index 354e4cd..3020851 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-jpeg.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-jpeg.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-level.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-level.html
index bc0c2b3..ecd2797 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-level.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-level.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-matroska.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-matroska.html
index 339ee52..2f5ee33 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-matroska.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-matroska.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-mulaw.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-mulaw.html
index cc1aee6..73a58dd 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-mulaw.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-mulaw.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-multifile.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-multifile.html
index 94d3b0a..5f1d9b3 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-multifile.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-multifile.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-multipart.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-multipart.html
index a004485..b294df2 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-multipart.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-multipart.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-navigationtest.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-navigationtest.html
index a063412..a5b2cdf 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-navigationtest.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-navigationtest.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-oss4.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-oss4.html
index 794e694..36e5979 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-oss4.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-oss4.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-ossaudio.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-ossaudio.html
index 7857fca..f617844 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-ossaudio.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-ossaudio.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-png.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-png.html
index d8b29b3..8b784c5 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-png.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-png.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-pulseaudio.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-pulseaudio.html
index 368e406..2cabb01 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-pulseaudio.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-pulseaudio.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-replaygain.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-replaygain.html
index b937609..d716313 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-replaygain.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-replaygain.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-rtp.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-rtp.html
index 07790bd..04f0720 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-rtp.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-rtp.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -209,11 +209,11 @@
</tr>
<tr>
<td><p><span class="term"><a class="link" href="gst-plugins-good-plugins-rtph265depay.html" title="rtph265depay">rtph265depay</a></span></p></td>
-<td>Extracts H265 video from RTP packets (draft-ietf-payload-rtp-h265-03.txt)</td>
+<td>Extracts H265 video from RTP packets (RFC 7798)</td>
</tr>
<tr>
<td><p><span class="term"><a class="link" href="gst-plugins-good-plugins-rtph265pay.html" title="rtph265pay">rtph265pay</a></span></p></td>
-<td>Payload-encode H265 video into RTP packets (based on draft-ietf-payload-rtp-h265-03.txt)</td>
+<td>Payload-encode H265 video into RTP packets (RFC 7798)</td>
</tr>
<tr>
<td><p><span class="term"><a class="link" href="gst-plugins-good-plugins-rtpilbcdepay.html" title="rtpilbcdepay">rtpilbcdepay</a></span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-rtpmanager.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-rtpmanager.html
index cd7158b..1246100 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-rtpmanager.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-rtpmanager.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-rtsp.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-rtsp.html
index 174ad98..b6a8ae9 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-rtsp.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-rtsp.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-shapewipe.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-shapewipe.html
index 4b9d114..f3fa7ab 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-shapewipe.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-shapewipe.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-shout2send.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-shout2send.html
index c94a969..0acb0b3 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-shout2send.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-shout2send.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-smpte.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-smpte.html
index 5a906d0..3cf68af 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-smpte.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-smpte.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-soup.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-soup.html
index 0e73863..4054e48 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-soup.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-soup.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-spectrum.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-spectrum.html
index 3278778..f97cf3f 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-spectrum.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-spectrum.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-speex.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-speex.html
index e56a005..52db47c 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-speex.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-speex.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-taglib.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-taglib.html
index 313d8ad..927bc96 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-taglib.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-taglib.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-udp.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-udp.html
index 149c14c..d5e9775 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-udp.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-udp.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-video4linux2.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-video4linux2.html
index 2fc7837..6c2625c 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-video4linux2.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-video4linux2.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-videobox.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-videobox.html
index 26ee4e8..2e22c0e 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-videobox.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-videobox.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-videocrop.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-videocrop.html
index a679e67..921794b 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-videocrop.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-videocrop.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-videofilter.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-videofilter.html
index 3f53c6f..47ae926 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-videofilter.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-videofilter.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-videomixer.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-videomixer.html
index f83bf93..411b74e 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-videomixer.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-videomixer.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-vpx.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-vpx.html
index 59dbe54..623a4c1 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-vpx.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-vpx.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-wavenc.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-wavenc.html
index ad80180..f3c3d3a 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-wavenc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-wavenc.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-wavpack.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-wavpack.html
index c0aa8ce..85ae4f2 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-wavpack.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-wavpack.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-wavparse.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-wavparse.html
index 097d435..f10d12c 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-wavparse.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-wavparse.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-ximagesrc.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-ximagesrc.html
index e803aff..327d5b1 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-ximagesrc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-ximagesrc.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-plugin-y4menc.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-y4menc.html
index d73b18a..92718e9 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-plugin-y4menc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-y4menc.html
@@ -41,7 +41,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.9.1</td>
+<td>1.9.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpbin.html b/docs/plugins/html/gst-plugins-good-plugins-rtpbin.html
index 508488c..842020c 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-rtpbin.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-rtpbin.html
@@ -145,6 +145,11 @@
<td class="property_name"><a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtpBin--rfc7273-sync" title="The “rfc7273-sync” property">rfc7273-sync</a></td>
<td class="property_flags">Read / Write</td>
</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtpBin--max-streams" title="The “max-streams” property">max-streams</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
</tbody>
</table></div>
</div>
@@ -843,6 +848,14 @@
<p>Flags: Read / Write</p>
<p>Default value: FALSE</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="GstRtpBin--max-streams"></a><h3>The <code class="literal">“max-streams”</code> property</h3>
+<pre class="programlisting"> “max-streams” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#guint"><span class="type">guint</span></a></pre>
+<p>The maximum number of streams to create for one session.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: 4294967295</p>
+</div>
</div>
<div class="refsect1">
<a name="gst-plugins-good-plugins-rtpbin.signal-details"></a><h2>Signal Details</h2>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtph265pay.html b/docs/plugins/html/gst-plugins-good-plugins-rtph265pay.html
index b4423c2..72e7868 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-rtph265pay.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-rtph265pay.html
@@ -131,7 +131,11 @@
</tr>
<tr>
<td><p><span class="term">details</span></p></td>
-<td>video/x-h265, stream-format=(string)byte-stream, alignment=(string){ nal, au }</td>
+<td>video/x-h265, stream-format=(string)hvc1, alignment=(string)au</td>
+</tr>
+<tr>
+<td><p><span class="term"></span></p></td>
+<td> video/x-h265, stream-format=(string)byte-stream, alignment=(string){ nal, au }</td>
</tr>
</tbody>
</table></div>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtspsrc.html b/docs/plugins/html/gst-plugins-good-plugins-rtspsrc.html
index fc52963..44decdf 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-rtspsrc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-rtspsrc.html
@@ -693,7 +693,7 @@
<pre class="programlisting"> “user-agent” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *</pre>
<p>The User-Agent string to send to the server.</p>
<p>Flags: Read / Write</p>
-<p>Default value: "GStreamer/1.9.1"</p>
+<p>Default value: "GStreamer/1.9.2"</p>
</div>
<hr>
<div class="refsect2">
diff --git a/docs/plugins/html/gst-plugins-good-plugins-splitmuxsink.html b/docs/plugins/html/gst-plugins-good-plugins-splitmuxsink.html
index ba61c2d..6bbd430 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-splitmuxsink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-splitmuxsink.html
@@ -82,6 +82,11 @@
<td class="property_name"><a class="link" href="gst-plugins-good-plugins-splitmuxsink.html#GstSplitMuxSink--max-files" title="The “max-files” property">max-files</a></td>
<td class="property_flags">Read / Write</td>
</tr>
+<tr>
+<td class="property_type"><a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></td>
+<td class="property_name"><a class="link" href="gst-plugins-good-plugins-splitmuxsink.html#GstSplitMuxSink--send-keyframe-requests" title="The “send-keyframe-requests” property">send-keyframe-requests</a></td>
+<td class="property_flags">Read / Write</td>
+</tr>
</tbody>
</table></div>
</div>
@@ -334,6 +339,14 @@
<p>Flags: Read / Write</p>
<p>Default value: 0</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="GstSplitMuxSink--send-keyframe-requests"></a><h3>The <code class="literal">“send-keyframe-requests”</code> property</h3>
+<pre class="programlisting"> “send-keyframe-requests” <a href="/usr/share/gtk-doc/html/glibglib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a></pre>
+<p>Request a keyframe every max-size-time ns to try splitting at that point. Needs max-size-bytes to be 0 in order to be effective.</p>
+<p>Flags: Read / Write</p>
+<p>Default value: FALSE</p>
+</div>
</div>
<div class="refsect1">
<a name="gst-plugins-good-plugins-splitmuxsink.signal-details"></a><h2>Signal Details</h2>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-videoflip.html b/docs/plugins/html/gst-plugins-good-plugins-videoflip.html
index 1b9b53d..69272b4 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-videoflip.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-videoflip.html
@@ -16,7 +16,8 @@
<td width="100%" align="left" class="shortcuts">
<a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span>
<a href="#gst-plugins-good-plugins-videoflip.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span>
- <a href="#gst-plugins-good-plugins-videoflip.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span>
+ <a href="#gst-plugins-good-plugins-videoflip.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_interfaces"> <span class="dim">|</span>
+ <a href="#gst-plugins-good-plugins-videoflip.implemented-interfaces" class="shortcut">Implemented Interfaces</a></span><span id="nav_properties"> <span class="dim">|</span>
<a href="#gst-plugins-good-plugins-videoflip.properties" class="shortcut">Properties</a></span>
</td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
@@ -79,10 +80,16 @@
</pre>
</div>
<div class="refsect1">
+<a name="gst-plugins-good-plugins-videoflip.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
+<p>
+GstVideoFlip implements
+ GstVideoDirection.</p>
+</div>
+<div class="refsect1">
<a name="gst-plugins-good-plugins-videoflip.description"></a><h2>Description</h2>
<p>Flips and rotates video.</p>
<div class="refsect2">
-<a name="id-1.2.254.7.3"></a><h3>Example launch line</h3>
+<a name="id-1.2.254.8.3"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -98,7 +105,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="id-1.2.254.7.4.1"></a><h3>Element Information</h3>
+<a name="id-1.2.254.8.4.1"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -124,7 +131,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="id-1.2.254.7.4.2"></a><h3>Element Pads</h3>
+<a name="id-1.2.254.8.4.2"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
@@ -273,7 +280,7 @@
<div class="refsect2">
<a name="GstVideoFlip--method"></a><h3>The <code class="literal">“method”</code> property</h3>
<pre class="programlisting"> “method” <a class="link" href="gst-plugins-good-plugins-videoflip.html#GstVideoFlipMethod" title="enum GstVideoFlipMethod"><span class="type">GstVideoFlipMethod</span></a></pre>
-<p>method.</p>
+<p>method (deprecated, use video-direction instead).</p>
<p>Flags: Read / Write / Construct</p>
<p>Default value: Identity (no rotation)</p>
</div>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-wavparse.html b/docs/plugins/html/gst-plugins-good-plugins-wavparse.html
index db55742..85f71c3 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-wavparse.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-wavparse.html
@@ -175,27 +175,27 @@
</tr>
<tr>
<td><p><span class="term">details</span></p></td>
-<td>audio/ms-gsm, rate=(int)[ 1, 96000 ], channels=(int)[ 1, 2 ]</td>
+<td>audio/ms-gsm</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/mpeg, mpegversion=(int)1, layer=(int)3, rate=(int)[ 8000, 48000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/mpeg, mpegversion=(int)1, layer=(int)3</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/mpeg, mpegversion=(int)1, layer=(int)2, rate=(int)[ 16000, 48000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/mpeg, mpegversion=(int)1, layer=(int)2</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/x-raw, format=(string){ S8, U8, S16LE, U16LE, S24LE, U24LE, S32LE, U32LE }, layout=(string)interleaved, rate=(int)[ 1000, 192000 ], channels=(int)[ 1, 8 ]</td>
+<td> audio/x-raw, format=(string){ S8, U8, S16LE, U16LE, S24LE, U24LE, S32LE, U32LE }, layout=(string)interleaved</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/x-vorbis, rate=(int)[ 1000, 192000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/x-vorbis</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/x-ac3, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 6 ]</td>
+<td> audio/x-ac3</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
@@ -203,75 +203,75 @@
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/mpeg, mpegversion=(int)4, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ]</td>
+<td> audio/mpeg, mpegversion=(int)4</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/x-alaw, rate=(int)[ 1000, 48000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/x-alaw</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/x-mulaw, rate=(int)[ 1000, 48000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/x-mulaw</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/x-wms, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ], block_align=(int)[ 1, 2147483647 ]</td>
+<td> audio/x-wms, bitrate=(int)[ 0, 2147483647 ], block_align=(int)[ 1, 2147483647 ]</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/x-adpcm, layout=(string)microsoft, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ], block_align=(int)[ 1, 2147483647 ]</td>
+<td> audio/x-adpcm, layout=(string)microsoft, block_align=(int)[ 1, 2147483647 ]</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/x-adpcm, layout=(string)dvi, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ], block_align=(int)[ 1, 2147483647 ]</td>
+<td> audio/x-adpcm, layout=(string)dvi, block_align=(int)[ 1, 2147483647 ]</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/x-truespeech, rate=(int)8000, channels=(int)[ 1, 2 ]</td>
+<td> audio/x-truespeech</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/x-wma, wmaversion=(int)1, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ], block_align=(int)[ 1, 2147483647 ]</td>
+<td> audio/x-wma, wmaversion=(int)1, bitrate=(int)[ 0, 2147483647 ], block_align=(int)[ 1, 2147483647 ]</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/x-wma, wmaversion=(int)2, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ], block_align=(int)[ 1, 2147483647 ]</td>
+<td> audio/x-wma, wmaversion=(int)2, bitrate=(int)[ 0, 2147483647 ], block_align=(int)[ 1, 2147483647 ]</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/x-wma, wmaversion=(int)3, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ], block_align=(int)[ 1, 2147483647 ]</td>
+<td> audio/x-wma, wmaversion=(int)3, bitrate=(int)[ 0, 2147483647 ], block_align=(int)[ 1, 2147483647 ]</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/x-vnd.sony.atrac3, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/x-vnd.sony.atrac3</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/x-raw, format=(string){ F32LE, F64LE }, layout=(string)interleaved, rate=(int)[ 1000, 192000 ], channels=(int)[ 1, 8 ]</td>
+<td> audio/x-raw, format=(string){ F32LE, F64LE }, layout=(string)interleaved</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/x-voxware, voxwaretype=(int)117, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/x-voxware, voxwaretype=(int)117</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/x-adpcm, layout=(string)dk4, rate=(int)[ 8000, 96000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/x-adpcm, layout=(string)dk4</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/x-adpcm, layout=(string)dk3, rate=(int)[ 8000, 96000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/x-adpcm, layout=(string)dk3</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/x-adpcm, layout=(string)dvi, rate=(int)[ 8000, 96000 ], channels=(int)[ 1, 2 ]</td>
+<td> audio/x-adpcm, layout=(string)dvi</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/AMR, rate=(int)8000, channels=(int)1</td>
+<td> audio/AMR</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> audio/AMR-WB, rate=(int)16000, channels=(int)1</td>
+<td> audio/AMR-WB</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
diff --git a/docs/plugins/html/home.png b/docs/plugins/html/home.png
index 9346b33..4bf6d92 100644
--- a/docs/plugins/html/home.png
+++ b/docs/plugins/html/home.png
Binary files differ
diff --git a/docs/plugins/html/index.html b/docs/plugins/html/index.html
index 4a3c8ca..3e1557d 100644
--- a/docs/plugins/html/index.html
+++ b/docs/plugins/html/index.html
@@ -15,7 +15,7 @@
<div>
<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">GStreamer Good Plugins 1.0 Plugins Reference Manual</p></th></tr></table></div>
<div><p class="releaseinfo">
- for GStreamer Good Plugins 1.0 (1.9.1)
+ for GStreamer Good Plugins 1.0 (1.9.2)
The latest version of this documentation can be found on-line at
<a class="ulink" href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good/html/</a>.
</p></div>
diff --git a/docs/plugins/html/left-insensitive.png b/docs/plugins/html/left-insensitive.png
index 3269393..82cba0a 100644
--- a/docs/plugins/html/left-insensitive.png
+++ b/docs/plugins/html/left-insensitive.png
Binary files differ
diff --git a/docs/plugins/html/left.png b/docs/plugins/html/left.png
index 2abde03..8444ec0 100644
--- a/docs/plugins/html/left.png
+++ b/docs/plugins/html/left.png
Binary files differ
diff --git a/docs/plugins/html/right-insensitive.png b/docs/plugins/html/right-insensitive.png
index 4c95785..7a90b99 100644
--- a/docs/plugins/html/right-insensitive.png
+++ b/docs/plugins/html/right-insensitive.png
Binary files differ
diff --git a/docs/plugins/html/right.png b/docs/plugins/html/right.png
index 76260ec..55f3359 100644
--- a/docs/plugins/html/right.png
+++ b/docs/plugins/html/right.png
Binary files differ
diff --git a/docs/plugins/html/up-insensitive.png b/docs/plugins/html/up-insensitive.png
index f404986..fdb8cc7 100644
--- a/docs/plugins/html/up-insensitive.png
+++ b/docs/plugins/html/up-insensitive.png
Binary files differ
diff --git a/docs/plugins/html/up.png b/docs/plugins/html/up.png
index 80b4b37..c1aad52 100644
--- a/docs/plugins/html/up.png
+++ b/docs/plugins/html/up.png
Binary files differ
diff --git a/docs/plugins/inspect/plugin-1394.xml b/docs/plugins/inspect/plugin-1394.xml
index a977d77..ad9310a 100644
--- a/docs/plugins/inspect/plugin-1394.xml
+++ b/docs/plugins/inspect/plugin-1394.xml
@@ -3,7 +3,7 @@
<description>Source for video data via IEEE1394 interface</description>
<filename>../../ext/raw1394/.libs/libgst1394.so</filename>
<basename>libgst1394.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-aasink.xml b/docs/plugins/inspect/plugin-aasink.xml
index e991b3e..6f201fb 100644
--- a/docs/plugins/inspect/plugin-aasink.xml
+++ b/docs/plugins/inspect/plugin-aasink.xml
@@ -3,7 +3,7 @@
<description>ASCII Art video sink</description>
<filename>../../ext/aalib/.libs/libgstaasink.so</filename>
<basename>libgstaasink.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-alaw.xml b/docs/plugins/inspect/plugin-alaw.xml
index 666fcfe..601e798 100644
--- a/docs/plugins/inspect/plugin-alaw.xml
+++ b/docs/plugins/inspect/plugin-alaw.xml
@@ -3,7 +3,7 @@
<description>ALaw audio conversion routines</description>
<filename>../../gst/law/.libs/libgstalaw.so</filename>
<basename>libgstalaw.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-alpha.xml b/docs/plugins/inspect/plugin-alpha.xml
index 7348446..f48da93 100644
--- a/docs/plugins/inspect/plugin-alpha.xml
+++ b/docs/plugins/inspect/plugin-alpha.xml
@@ -3,7 +3,7 @@
<description>adds an alpha channel to video - constant or via chroma-keying</description>
<filename>../../gst/alpha/.libs/libgstalpha.so</filename>
<basename>libgstalpha.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-alphacolor.xml b/docs/plugins/inspect/plugin-alphacolor.xml
index 2b486ad..2e3298e 100644
--- a/docs/plugins/inspect/plugin-alphacolor.xml
+++ b/docs/plugins/inspect/plugin-alphacolor.xml
@@ -3,7 +3,7 @@
<description>RGBA from/to AYUV colorspace conversion preserving the alpha channel</description>
<filename>../../gst/alpha/.libs/libgstalphacolor.so</filename>
<basename>libgstalphacolor.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-apetag.xml b/docs/plugins/inspect/plugin-apetag.xml
index 92ca6fa..e3757dc 100644
--- a/docs/plugins/inspect/plugin-apetag.xml
+++ b/docs/plugins/inspect/plugin-apetag.xml
@@ -3,7 +3,7 @@
<description>APEv1/2 tag reader</description>
<filename>../../gst/apetag/.libs/libgstapetag.so</filename>
<basename>libgstapetag.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-audiofx.xml b/docs/plugins/inspect/plugin-audiofx.xml
index 96a2d67..36f2356 100644
--- a/docs/plugins/inspect/plugin-audiofx.xml
+++ b/docs/plugins/inspect/plugin-audiofx.xml
@@ -3,7 +3,7 @@
<description>Audio effects plugin</description>
<filename>../../gst/audiofx/.libs/libgstaudiofx.so</filename>
<basename>libgstaudiofx.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-audioparsers.xml b/docs/plugins/inspect/plugin-audioparsers.xml
index e3c125c..313680b 100644
--- a/docs/plugins/inspect/plugin-audioparsers.xml
+++ b/docs/plugins/inspect/plugin-audioparsers.xml
@@ -3,7 +3,7 @@
<description>Parsers for various audio formats</description>
<filename>../../gst/audioparsers/.libs/libgstaudioparsers.so</filename>
<basename>libgstaudioparsers.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-auparse.xml b/docs/plugins/inspect/plugin-auparse.xml
index d90b9c8..553b354 100644
--- a/docs/plugins/inspect/plugin-auparse.xml
+++ b/docs/plugins/inspect/plugin-auparse.xml
@@ -3,7 +3,7 @@
<description>parses au streams</description>
<filename>../../gst/auparse/.libs/libgstauparse.so</filename>
<basename>libgstauparse.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-autodetect.xml b/docs/plugins/inspect/plugin-autodetect.xml
index e26af7c..070d3d4 100644
--- a/docs/plugins/inspect/plugin-autodetect.xml
+++ b/docs/plugins/inspect/plugin-autodetect.xml
@@ -3,7 +3,7 @@
<description>Plugin contains auto-detection plugins for video/audio in- and outputs</description>
<filename>../../gst/autodetect/.libs/libgstautodetect.so</filename>
<basename>libgstautodetect.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-avi.xml b/docs/plugins/inspect/plugin-avi.xml
index e554861..c89e071 100644
--- a/docs/plugins/inspect/plugin-avi.xml
+++ b/docs/plugins/inspect/plugin-avi.xml
@@ -3,7 +3,7 @@
<description>AVI stream handling</description>
<filename>../../gst/avi/.libs/libgstavi.so</filename>
<basename>libgstavi.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
@@ -26,7 +26,7 @@
<name>audio_%u</name>
<direction>source</direction>
<presence>sometimes</presence>
- <details>audio/ms-gsm, rate=(int)[ 1, 96000 ], channels=(int)[ 1, 2 ]; audio/mpeg, mpegversion=(int)1, layer=(int)3, rate=(int)[ 8000, 48000 ], channels=(int)[ 1, 2 ]; audio/mpeg, mpegversion=(int)1, layer=(int)2, rate=(int)[ 16000, 48000 ], channels=(int)[ 1, 2 ]; audio/x-raw, format=(string){ S8, U8, S16LE, U16LE, S24LE, U24LE, S32LE, U32LE }, layout=(string)interleaved, rate=(int)[ 1000, 192000 ], channels=(int)[ 1, 8 ]; audio/x-vorbis, rate=(int)[ 1000, 192000 ], channels=(int)[ 1, 2 ]; audio/x-ac3, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 6 ]; audio/x-dts; audio/mpeg, mpegversion=(int)4, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ]; audio/x-alaw, rate=(int)[ 1000, 48000 ], channels=(int)[ 1, 2 ]; audio/x-mulaw, rate=(int)[ 1000, 48000 ], channels=(int)[ 1, 2 ]; audio/x-wms, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ], block_align=(int)[ 1, 2147483647 ]; audio/x-adpcm, layout=(string)microsoft, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ], block_align=(int)[ 1, 2147483647 ]; audio/x-adpcm, layout=(string)dvi, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ], block_align=(int)[ 1, 2147483647 ]; audio/x-truespeech, rate=(int)8000, channels=(int)[ 1, 2 ]; audio/x-wma, wmaversion=(int)1, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ], block_align=(int)[ 1, 2147483647 ]; audio/x-wma, wmaversion=(int)2, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ], block_align=(int)[ 1, 2147483647 ]; audio/x-wma, wmaversion=(int)3, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ], block_align=(int)[ 1, 2147483647 ]; audio/x-vnd.sony.atrac3, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ]; audio/x-raw, format=(string){ F32LE, F64LE }, layout=(string)interleaved, rate=(int)[ 1000, 192000 ], channels=(int)[ 1, 8 ]; audio/x-voxware, voxwaretype=(int)117, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ]; audio/x-adpcm, layout=(string)dk4, rate=(int)[ 8000, 96000 ], channels=(int)[ 1, 2 ]; audio/x-adpcm, layout=(string)dk3, rate=(int)[ 8000, 96000 ], channels=(int)[ 1, 2 ]; audio/x-adpcm, layout=(string)dvi, rate=(int)[ 8000, 96000 ], channels=(int)[ 1, 2 ]; audio/AMR, rate=(int)8000, channels=(int)1; audio/AMR-WB, rate=(int)16000, channels=(int)1; audio/x-siren; application/x-ogg-avi; audio/x-avi-unknown</details>
+ <details>audio/ms-gsm; audio/mpeg, mpegversion=(int)1, layer=(int)3; audio/mpeg, mpegversion=(int)1, layer=(int)2; audio/x-raw, format=(string){ S8, U8, S16LE, U16LE, S24LE, U24LE, S32LE, U32LE }, layout=(string)interleaved; audio/x-vorbis; audio/x-ac3; audio/x-dts; audio/mpeg, mpegversion=(int)4; audio/x-alaw; audio/x-mulaw; audio/x-wms, bitrate=(int)[ 0, 2147483647 ], block_align=(int)[ 1, 2147483647 ]; audio/x-adpcm, layout=(string)microsoft, block_align=(int)[ 1, 2147483647 ]; audio/x-adpcm, layout=(string)dvi, block_align=(int)[ 1, 2147483647 ]; audio/x-truespeech; audio/x-wma, wmaversion=(int)1, bitrate=(int)[ 0, 2147483647 ], block_align=(int)[ 1, 2147483647 ]; audio/x-wma, wmaversion=(int)2, bitrate=(int)[ 0, 2147483647 ], block_align=(int)[ 1, 2147483647 ]; audio/x-wma, wmaversion=(int)3, bitrate=(int)[ 0, 2147483647 ], block_align=(int)[ 1, 2147483647 ]; audio/x-vnd.sony.atrac3; audio/x-raw, format=(string){ F32LE, F64LE }, layout=(string)interleaved; audio/x-voxware, voxwaretype=(int)117; audio/x-adpcm, layout=(string)dk4; audio/x-adpcm, layout=(string)dk3; audio/x-adpcm, layout=(string)dvi; audio/AMR; audio/AMR-WB; audio/x-siren; application/x-ogg-avi; audio/x-avi-unknown</details>
</caps>
<caps>
<name>subpicture_%u</name>
diff --git a/docs/plugins/inspect/plugin-cacasink.xml b/docs/plugins/inspect/plugin-cacasink.xml
index e847c48..b60eaca 100644
--- a/docs/plugins/inspect/plugin-cacasink.xml
+++ b/docs/plugins/inspect/plugin-cacasink.xml
@@ -3,7 +3,7 @@
<description>Colored ASCII Art video sink</description>
<filename>../../ext/libcaca/.libs/libgstcacasink.so</filename>
<basename>libgstcacasink.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-cairo.xml b/docs/plugins/inspect/plugin-cairo.xml
index 626469f..25754f4 100644
--- a/docs/plugins/inspect/plugin-cairo.xml
+++ b/docs/plugins/inspect/plugin-cairo.xml
@@ -3,7 +3,7 @@
<description>Cairo-based elements</description>
<filename>../../ext/cairo/.libs/libgstcairo.so</filename>
<basename>libgstcairo.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-cutter.xml b/docs/plugins/inspect/plugin-cutter.xml
index 26f94ee..556cad4 100644
--- a/docs/plugins/inspect/plugin-cutter.xml
+++ b/docs/plugins/inspect/plugin-cutter.xml
@@ -3,7 +3,7 @@
<description>Audio Cutter to split audio into non-silent bits</description>
<filename>../../gst/cutter/.libs/libgstcutter.so</filename>
<basename>libgstcutter.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-debug.xml b/docs/plugins/inspect/plugin-debug.xml
index c34eb43..8baf539 100644
--- a/docs/plugins/inspect/plugin-debug.xml
+++ b/docs/plugins/inspect/plugin-debug.xml
@@ -3,7 +3,7 @@
<description>elements for testing and debugging</description>
<filename>../../gst/debugutils/.libs/libgstdebug.so</filename>
<basename>libgstdebug.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-deinterlace.xml b/docs/plugins/inspect/plugin-deinterlace.xml
index 989b61d..0d98e67 100644
--- a/docs/plugins/inspect/plugin-deinterlace.xml
+++ b/docs/plugins/inspect/plugin-deinterlace.xml
@@ -3,7 +3,7 @@
<description>Deinterlacer</description>
<filename>../../gst/deinterlace/.libs/libgstdeinterlace.so</filename>
<basename>libgstdeinterlace.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-dtmf.xml b/docs/plugins/inspect/plugin-dtmf.xml
index 5da71bc..496f1ae 100644
--- a/docs/plugins/inspect/plugin-dtmf.xml
+++ b/docs/plugins/inspect/plugin-dtmf.xml
@@ -3,7 +3,7 @@
<description>DTMF plugins</description>
<filename>../../gst/dtmf/.libs/libgstdtmf.so</filename>
<basename>libgstdtmf.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-dv.xml b/docs/plugins/inspect/plugin-dv.xml
index bb08a6e..238bdd0 100644
--- a/docs/plugins/inspect/plugin-dv.xml
+++ b/docs/plugins/inspect/plugin-dv.xml
@@ -3,7 +3,7 @@
<description>DV demuxer and decoder based on libdv (libdv.sf.net)</description>
<filename>../../ext/dv/.libs/libgstdv.so</filename>
<basename>libgstdv.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-effectv.xml b/docs/plugins/inspect/plugin-effectv.xml
index ac36bb1..6beb213 100644
--- a/docs/plugins/inspect/plugin-effectv.xml
+++ b/docs/plugins/inspect/plugin-effectv.xml
@@ -3,7 +3,7 @@
<description>effect plugins from the effectv project</description>
<filename>../../gst/effectv/.libs/libgsteffectv.so</filename>
<basename>libgsteffectv.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-equalizer.xml b/docs/plugins/inspect/plugin-equalizer.xml
index 1cd572b..d240f84 100644
--- a/docs/plugins/inspect/plugin-equalizer.xml
+++ b/docs/plugins/inspect/plugin-equalizer.xml
@@ -3,7 +3,7 @@
<description>GStreamer audio equalizers</description>
<filename>../../gst/equalizer/.libs/libgstequalizer.so</filename>
<basename>libgstequalizer.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-flac.xml b/docs/plugins/inspect/plugin-flac.xml
index f5ac54b..2a20d4a 100644
--- a/docs/plugins/inspect/plugin-flac.xml
+++ b/docs/plugins/inspect/plugin-flac.xml
@@ -3,7 +3,7 @@
<description>The FLAC Lossless compressor Codec</description>
<filename>../../ext/flac/.libs/libgstflac.so</filename>
<basename>libgstflac.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-flv.xml b/docs/plugins/inspect/plugin-flv.xml
index ffa0d8e..fded088 100644
--- a/docs/plugins/inspect/plugin-flv.xml
+++ b/docs/plugins/inspect/plugin-flv.xml
@@ -3,7 +3,7 @@
<description>FLV muxing and demuxing plugin</description>
<filename>../../gst/flv/.libs/libgstflv.so</filename>
<basename>libgstflv.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-flxdec.xml b/docs/plugins/inspect/plugin-flxdec.xml
index 96de942..54ce679 100644
--- a/docs/plugins/inspect/plugin-flxdec.xml
+++ b/docs/plugins/inspect/plugin-flxdec.xml
@@ -3,7 +3,7 @@
<description>FLC/FLI/FLX video decoder</description>
<filename>../../gst/flx/.libs/libgstflxdec.so</filename>
<basename>libgstflxdec.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-gdkpixbuf.xml b/docs/plugins/inspect/plugin-gdkpixbuf.xml
index e47af9a..6913e93 100644
--- a/docs/plugins/inspect/plugin-gdkpixbuf.xml
+++ b/docs/plugins/inspect/plugin-gdkpixbuf.xml
@@ -3,7 +3,7 @@
<description>GdkPixbuf-based image decoder, overlay and sink</description>
<filename>../../ext/gdk_pixbuf/.libs/libgstgdkpixbuf.so</filename>
<basename>libgstgdkpixbuf.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-goom.xml b/docs/plugins/inspect/plugin-goom.xml
index 293d32e..c9a8022 100644
--- a/docs/plugins/inspect/plugin-goom.xml
+++ b/docs/plugins/inspect/plugin-goom.xml
@@ -3,7 +3,7 @@
<description>GOOM visualization filter</description>
<filename>../../gst/goom/.libs/libgstgoom.so</filename>
<basename>libgstgoom.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-goom2k1.xml b/docs/plugins/inspect/plugin-goom2k1.xml
index 1964a72..1c967ef 100644
--- a/docs/plugins/inspect/plugin-goom2k1.xml
+++ b/docs/plugins/inspect/plugin-goom2k1.xml
@@ -3,7 +3,7 @@
<description>GOOM 2k1 visualization filter</description>
<filename>../../gst/goom2k1/.libs/libgstgoom2k1.so</filename>
<basename>libgstgoom2k1.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-icydemux.xml b/docs/plugins/inspect/plugin-icydemux.xml
index a76c4df..6d7c380 100644
--- a/docs/plugins/inspect/plugin-icydemux.xml
+++ b/docs/plugins/inspect/plugin-icydemux.xml
@@ -3,7 +3,7 @@
<description>Demux ICY tags from a stream</description>
<filename>../../gst/icydemux/.libs/libgsticydemux.so</filename>
<basename>libgsticydemux.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-id3demux.xml b/docs/plugins/inspect/plugin-id3demux.xml
index bf73c7c..15e57b4 100644
--- a/docs/plugins/inspect/plugin-id3demux.xml
+++ b/docs/plugins/inspect/plugin-id3demux.xml
@@ -3,7 +3,7 @@
<description>Demux ID3v1 and ID3v2 tags from a file</description>
<filename>../../gst/id3demux/.libs/libgstid3demux.so</filename>
<basename>libgstid3demux.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-imagefreeze.xml b/docs/plugins/inspect/plugin-imagefreeze.xml
index 5d40e92..fe70fae 100644
--- a/docs/plugins/inspect/plugin-imagefreeze.xml
+++ b/docs/plugins/inspect/plugin-imagefreeze.xml
@@ -3,7 +3,7 @@
<description>Still frame stream generator</description>
<filename>../../gst/imagefreeze/.libs/libgstimagefreeze.so</filename>
<basename>libgstimagefreeze.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-interleave.xml b/docs/plugins/inspect/plugin-interleave.xml
index fa76988..45b990a 100644
--- a/docs/plugins/inspect/plugin-interleave.xml
+++ b/docs/plugins/inspect/plugin-interleave.xml
@@ -3,7 +3,7 @@
<description>Audio interleaver/deinterleaver</description>
<filename>../../gst/interleave/.libs/libgstinterleave.so</filename>
<basename>libgstinterleave.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-isomp4.xml b/docs/plugins/inspect/plugin-isomp4.xml
index d16a122..9e439e3 100644
--- a/docs/plugins/inspect/plugin-isomp4.xml
+++ b/docs/plugins/inspect/plugin-isomp4.xml
@@ -3,7 +3,7 @@
<description>ISO base media file format support (mp4, 3gpp, qt, mj2)</description>
<filename>../../gst/isomp4/.libs/libgstisomp4.so</filename>
<basename>libgstisomp4.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-jack.xml b/docs/plugins/inspect/plugin-jack.xml
index 50f8fe2..4367901 100644
--- a/docs/plugins/inspect/plugin-jack.xml
+++ b/docs/plugins/inspect/plugin-jack.xml
@@ -3,7 +3,7 @@
<description>JACK audio elements</description>
<filename>../../ext/jack/.libs/libgstjack.so</filename>
<basename>libgstjack.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-jpeg.xml b/docs/plugins/inspect/plugin-jpeg.xml
index 71c5d11..1d3c1b5 100644
--- a/docs/plugins/inspect/plugin-jpeg.xml
+++ b/docs/plugins/inspect/plugin-jpeg.xml
@@ -3,7 +3,7 @@
<description>JPeg plugin library</description>
<filename>../../ext/jpeg/.libs/libgstjpeg.so</filename>
<basename>libgstjpeg.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-level.xml b/docs/plugins/inspect/plugin-level.xml
index 19de71f..4ea8902 100644
--- a/docs/plugins/inspect/plugin-level.xml
+++ b/docs/plugins/inspect/plugin-level.xml
@@ -3,7 +3,7 @@
<description>Audio level plugin</description>
<filename>../../gst/level/.libs/libgstlevel.so</filename>
<basename>libgstlevel.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-matroska.xml b/docs/plugins/inspect/plugin-matroska.xml
index 8e35668..f84631b 100644
--- a/docs/plugins/inspect/plugin-matroska.xml
+++ b/docs/plugins/inspect/plugin-matroska.xml
@@ -3,7 +3,7 @@
<description>Matroska and WebM stream handling</description>
<filename>../../gst/matroska/.libs/libgstmatroska.so</filename>
<basename>libgstmatroska.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-mulaw.xml b/docs/plugins/inspect/plugin-mulaw.xml
index 512b297..1b494ad 100644
--- a/docs/plugins/inspect/plugin-mulaw.xml
+++ b/docs/plugins/inspect/plugin-mulaw.xml
@@ -3,7 +3,7 @@
<description>MuLaw audio conversion routines</description>
<filename>../../gst/law/.libs/libgstmulaw.so</filename>
<basename>libgstmulaw.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-multifile.xml b/docs/plugins/inspect/plugin-multifile.xml
index d2df979..20935ca 100644
--- a/docs/plugins/inspect/plugin-multifile.xml
+++ b/docs/plugins/inspect/plugin-multifile.xml
@@ -3,7 +3,7 @@
<description>Reads/Writes buffers from/to sequentially named files</description>
<filename>../../gst/multifile/.libs/libgstmultifile.so</filename>
<basename>libgstmultifile.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-multipart.xml b/docs/plugins/inspect/plugin-multipart.xml
index 012ed67..f17c511 100644
--- a/docs/plugins/inspect/plugin-multipart.xml
+++ b/docs/plugins/inspect/plugin-multipart.xml
@@ -3,7 +3,7 @@
<description>multipart stream manipulation</description>
<filename>../../gst/multipart/.libs/libgstmultipart.so</filename>
<basename>libgstmultipart.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-navigationtest.xml b/docs/plugins/inspect/plugin-navigationtest.xml
index 7e3ffb4..394a3f7 100644
--- a/docs/plugins/inspect/plugin-navigationtest.xml
+++ b/docs/plugins/inspect/plugin-navigationtest.xml
@@ -3,7 +3,7 @@
<description>Template for a video filter</description>
<filename>../../gst/debugutils/.libs/libgstnavigationtest.so</filename>
<basename>libgstnavigationtest.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-oss4.xml b/docs/plugins/inspect/plugin-oss4.xml
index fc995bd..983a341 100644
--- a/docs/plugins/inspect/plugin-oss4.xml
+++ b/docs/plugins/inspect/plugin-oss4.xml
@@ -3,7 +3,7 @@
<description>Open Sound System (OSS) version 4 support for GStreamer</description>
<filename>../../sys/oss4/.libs/libgstoss4audio.so</filename>
<basename>libgstoss4audio.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-ossaudio.xml b/docs/plugins/inspect/plugin-ossaudio.xml
index 734e71e..cf2dcd4 100644
--- a/docs/plugins/inspect/plugin-ossaudio.xml
+++ b/docs/plugins/inspect/plugin-ossaudio.xml
@@ -3,7 +3,7 @@
<description>OSS (Open Sound System) support for GStreamer</description>
<filename>../../sys/oss/.libs/libgstossaudio.so</filename>
<basename>libgstossaudio.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-png.xml b/docs/plugins/inspect/plugin-png.xml
index 3c1dc46..cd449c5 100644
--- a/docs/plugins/inspect/plugin-png.xml
+++ b/docs/plugins/inspect/plugin-png.xml
@@ -3,7 +3,7 @@
<description>PNG plugin library</description>
<filename>../../ext/libpng/.libs/libgstpng.so</filename>
<basename>libgstpng.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-pulseaudio.xml b/docs/plugins/inspect/plugin-pulseaudio.xml
index 7edc82f..b57b394 100644
--- a/docs/plugins/inspect/plugin-pulseaudio.xml
+++ b/docs/plugins/inspect/plugin-pulseaudio.xml
@@ -3,7 +3,7 @@
<description>PulseAudio plugin library</description>
<filename>../../ext/pulse/.libs/libgstpulse.so</filename>
<basename>libgstpulse.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-replaygain.xml b/docs/plugins/inspect/plugin-replaygain.xml
index 8c7a749..c450ac1 100644
--- a/docs/plugins/inspect/plugin-replaygain.xml
+++ b/docs/plugins/inspect/plugin-replaygain.xml
@@ -3,7 +3,7 @@
<description>ReplayGain volume normalization</description>
<filename>../../gst/replaygain/.libs/libgstreplaygain.so</filename>
<basename>libgstreplaygain.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-rtp.xml b/docs/plugins/inspect/plugin-rtp.xml
index fd2c3b9..18decd7 100644
--- a/docs/plugins/inspect/plugin-rtp.xml
+++ b/docs/plugins/inspect/plugin-rtp.xml
@@ -3,7 +3,7 @@
<description>Real-time protocol plugins</description>
<filename>../../gst/rtp/.libs/libgstrtp.so</filename>
<basename>libgstrtp.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
@@ -748,7 +748,7 @@
<name>rtph265depay</name>
<longname>RTP H265 depayloader</longname>
<class>Codec/Depayloader/Network/RTP</class>
- <description>Extracts H265 video from RTP packets (draft-ietf-payload-rtp-h265-03.txt)</description>
+ <description>Extracts H265 video from RTP packets (RFC 7798)</description>
<author>Jurgen Slowack <jurgenslowack@gmail.com></author>
<pads>
<caps>
@@ -769,14 +769,14 @@
<name>rtph265pay</name>
<longname>RTP H265 payloader</longname>
<class>Codec/Payloader/Network/RTP</class>
- <description>Payload-encode H265 video into RTP packets (based on draft-ietf-payload-rtp-h265-03.txt)</description>
+ <description>Payload-encode H265 video into RTP packets (RFC 7798)</description>
<author>Jurgen Slowack <jurgenslowack@gmail.com></author>
<pads>
<caps>
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>video/x-h265, stream-format=(string)byte-stream, alignment=(string){ nal, au }</details>
+ <details>video/x-h265, stream-format=(string)hvc1, alignment=(string)au; video/x-h265, stream-format=(string)byte-stream, alignment=(string){ nal, au }</details>
</caps>
<caps>
<name>src</name>
diff --git a/docs/plugins/inspect/plugin-rtpmanager.xml b/docs/plugins/inspect/plugin-rtpmanager.xml
index 863c34f..b0d6a4f 100644
--- a/docs/plugins/inspect/plugin-rtpmanager.xml
+++ b/docs/plugins/inspect/plugin-rtpmanager.xml
@@ -3,7 +3,7 @@
<description>RTP session management plugin library</description>
<filename>../../gst/rtpmanager/.libs/libgstrtpmanager.so</filename>
<basename>libgstrtpmanager.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-rtsp.xml b/docs/plugins/inspect/plugin-rtsp.xml
index 5c9b749..04bb648 100644
--- a/docs/plugins/inspect/plugin-rtsp.xml
+++ b/docs/plugins/inspect/plugin-rtsp.xml
@@ -3,7 +3,7 @@
<description>transfer data via RTSP</description>
<filename>../../gst/rtsp/.libs/libgstrtsp.so</filename>
<basename>libgstrtsp.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-shapewipe.xml b/docs/plugins/inspect/plugin-shapewipe.xml
index 79c4b46..77e0b2c 100644
--- a/docs/plugins/inspect/plugin-shapewipe.xml
+++ b/docs/plugins/inspect/plugin-shapewipe.xml
@@ -3,7 +3,7 @@
<description>Shape Wipe transition filter</description>
<filename>../../gst/shapewipe/.libs/libgstshapewipe.so</filename>
<basename>libgstshapewipe.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-shout2send.xml b/docs/plugins/inspect/plugin-shout2send.xml
index e025be6..8cc7388 100644
--- a/docs/plugins/inspect/plugin-shout2send.xml
+++ b/docs/plugins/inspect/plugin-shout2send.xml
@@ -3,7 +3,7 @@
<description>Sends data to an icecast server using libshout2</description>
<filename>../../ext/shout2/.libs/libgstshout2.so</filename>
<basename>libgstshout2.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>libshout2</package>
diff --git a/docs/plugins/inspect/plugin-smpte.xml b/docs/plugins/inspect/plugin-smpte.xml
index 1014636..49e7512 100644
--- a/docs/plugins/inspect/plugin-smpte.xml
+++ b/docs/plugins/inspect/plugin-smpte.xml
@@ -3,7 +3,7 @@
<description>Apply the standard SMPTE transitions on video images</description>
<filename>../../gst/smpte/.libs/libgstsmpte.so</filename>
<basename>libgstsmpte.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-soup.xml b/docs/plugins/inspect/plugin-soup.xml
index 17e4d4d..519ad17 100644
--- a/docs/plugins/inspect/plugin-soup.xml
+++ b/docs/plugins/inspect/plugin-soup.xml
@@ -3,7 +3,7 @@
<description>libsoup HTTP client src/sink</description>
<filename>../../ext/soup/.libs/libgstsouphttpsrc.so</filename>
<basename>libgstsouphttpsrc.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-spectrum.xml b/docs/plugins/inspect/plugin-spectrum.xml
index afdbcef..4d4ca7d 100644
--- a/docs/plugins/inspect/plugin-spectrum.xml
+++ b/docs/plugins/inspect/plugin-spectrum.xml
@@ -3,7 +3,7 @@
<description>Run an FFT on the audio signal, output spectrum data</description>
<filename>../../gst/spectrum/.libs/libgstspectrum.so</filename>
<basename>libgstspectrum.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-speex.xml b/docs/plugins/inspect/plugin-speex.xml
index d794c0b..76e3ccd 100644
--- a/docs/plugins/inspect/plugin-speex.xml
+++ b/docs/plugins/inspect/plugin-speex.xml
@@ -3,7 +3,7 @@
<description>Speex plugin library</description>
<filename>../../ext/speex/.libs/libgstspeex.so</filename>
<basename>libgstspeex.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-taglib.xml b/docs/plugins/inspect/plugin-taglib.xml
index 114b384..7d0e90e 100644
--- a/docs/plugins/inspect/plugin-taglib.xml
+++ b/docs/plugins/inspect/plugin-taglib.xml
@@ -3,7 +3,7 @@
<description>Tag writing plug-in based on taglib</description>
<filename>../../ext/taglib/.libs/libgsttaglib.so</filename>
<basename>libgsttaglib.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-udp.xml b/docs/plugins/inspect/plugin-udp.xml
index b65005a..7a3dc28 100644
--- a/docs/plugins/inspect/plugin-udp.xml
+++ b/docs/plugins/inspect/plugin-udp.xml
@@ -3,7 +3,7 @@
<description>transfer data via UDP</description>
<filename>../../gst/udp/.libs/libgstudp.so</filename>
<basename>libgstudp.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-video4linux2.xml b/docs/plugins/inspect/plugin-video4linux2.xml
index d2767a6..0e25e52 100644
--- a/docs/plugins/inspect/plugin-video4linux2.xml
+++ b/docs/plugins/inspect/plugin-video4linux2.xml
@@ -3,7 +3,7 @@
<description>elements for Video 4 Linux</description>
<filename>../../sys/v4l2/.libs/libgstvideo4linux2.so</filename>
<basename>libgstvideo4linux2.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-videobox.xml b/docs/plugins/inspect/plugin-videobox.xml
index 86b3c37..8cbb6e5 100644
--- a/docs/plugins/inspect/plugin-videobox.xml
+++ b/docs/plugins/inspect/plugin-videobox.xml
@@ -3,7 +3,7 @@
<description>resizes a video by adding borders or cropping</description>
<filename>../../gst/videobox/.libs/libgstvideobox.so</filename>
<basename>libgstvideobox.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-videocrop.xml b/docs/plugins/inspect/plugin-videocrop.xml
index b80df04..c1281d7 100644
--- a/docs/plugins/inspect/plugin-videocrop.xml
+++ b/docs/plugins/inspect/plugin-videocrop.xml
@@ -3,7 +3,7 @@
<description>Crops video into a user-defined region</description>
<filename>../../gst/videocrop/.libs/libgstvideocrop.so</filename>
<basename>libgstvideocrop.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-videofilter.xml b/docs/plugins/inspect/plugin-videofilter.xml
index 1abd7f6..3653d59 100644
--- a/docs/plugins/inspect/plugin-videofilter.xml
+++ b/docs/plugins/inspect/plugin-videofilter.xml
@@ -3,7 +3,7 @@
<description>Video filters plugin</description>
<filename>../../gst/videofilter/.libs/libgstvideofilter.so</filename>
<basename>libgstvideofilter.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-videomixer.xml b/docs/plugins/inspect/plugin-videomixer.xml
index 53bad47..96e4f2d 100644
--- a/docs/plugins/inspect/plugin-videomixer.xml
+++ b/docs/plugins/inspect/plugin-videomixer.xml
@@ -3,7 +3,7 @@
<description>Video mixer</description>
<filename>../../gst/videomixer/.libs/libgstvideomixer.so</filename>
<basename>libgstvideomixer.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-vpx.xml b/docs/plugins/inspect/plugin-vpx.xml
index 46fec71..6c17a51 100644
--- a/docs/plugins/inspect/plugin-vpx.xml
+++ b/docs/plugins/inspect/plugin-vpx.xml
@@ -3,7 +3,7 @@
<description>VP8 plugin</description>
<filename>../../ext/vpx/.libs/libgstvpx.so</filename>
<basename>libgstvpx.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-wavenc.xml b/docs/plugins/inspect/plugin-wavenc.xml
index ffcd037..93a01e0 100644
--- a/docs/plugins/inspect/plugin-wavenc.xml
+++ b/docs/plugins/inspect/plugin-wavenc.xml
@@ -3,7 +3,7 @@
<description>Encode raw audio into WAV</description>
<filename>../../gst/wavenc/.libs/libgstwavenc.so</filename>
<basename>libgstwavenc.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-wavpack.xml b/docs/plugins/inspect/plugin-wavpack.xml
index 4a4355f..6ab1f1e 100644
--- a/docs/plugins/inspect/plugin-wavpack.xml
+++ b/docs/plugins/inspect/plugin-wavpack.xml
@@ -3,7 +3,7 @@
<description>Wavpack lossless/lossy audio format handling</description>
<filename>../../ext/wavpack/.libs/libgstwavpack.so</filename>
<basename>libgstwavpack.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-wavparse.xml b/docs/plugins/inspect/plugin-wavparse.xml
index 507c979..1c55615 100644
--- a/docs/plugins/inspect/plugin-wavparse.xml
+++ b/docs/plugins/inspect/plugin-wavparse.xml
@@ -3,7 +3,7 @@
<description>Parse a .wav file into raw audio</description>
<filename>../../gst/wavparse/.libs/libgstwavparse.so</filename>
<basename>libgstwavparse.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
@@ -26,7 +26,7 @@
<name>src</name>
<direction>source</direction>
<presence>always</presence>
- <details>audio/ms-gsm, rate=(int)[ 1, 96000 ], channels=(int)[ 1, 2 ]; audio/mpeg, mpegversion=(int)1, layer=(int)3, rate=(int)[ 8000, 48000 ], channels=(int)[ 1, 2 ]; audio/mpeg, mpegversion=(int)1, layer=(int)2, rate=(int)[ 16000, 48000 ], channels=(int)[ 1, 2 ]; audio/x-raw, format=(string){ S8, U8, S16LE, U16LE, S24LE, U24LE, S32LE, U32LE }, layout=(string)interleaved, rate=(int)[ 1000, 192000 ], channels=(int)[ 1, 8 ]; audio/x-vorbis, rate=(int)[ 1000, 192000 ], channels=(int)[ 1, 2 ]; audio/x-ac3, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 6 ]; audio/x-dts; audio/mpeg, mpegversion=(int)4, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ]; audio/x-alaw, rate=(int)[ 1000, 48000 ], channels=(int)[ 1, 2 ]; audio/x-mulaw, rate=(int)[ 1000, 48000 ], channels=(int)[ 1, 2 ]; audio/x-wms, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ], block_align=(int)[ 1, 2147483647 ]; audio/x-adpcm, layout=(string)microsoft, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ], block_align=(int)[ 1, 2147483647 ]; audio/x-adpcm, layout=(string)dvi, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ], block_align=(int)[ 1, 2147483647 ]; audio/x-truespeech, rate=(int)8000, channels=(int)[ 1, 2 ]; audio/x-wma, wmaversion=(int)1, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ], block_align=(int)[ 1, 2147483647 ]; audio/x-wma, wmaversion=(int)2, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ], block_align=(int)[ 1, 2147483647 ]; audio/x-wma, wmaversion=(int)3, bitrate=(int)[ 0, 2147483647 ], rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 8 ], block_align=(int)[ 1, 2147483647 ]; audio/x-vnd.sony.atrac3, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ]; audio/x-raw, format=(string){ F32LE, F64LE }, layout=(string)interleaved, rate=(int)[ 1000, 192000 ], channels=(int)[ 1, 8 ]; audio/x-voxware, voxwaretype=(int)117, rate=(int)[ 1000, 96000 ], channels=(int)[ 1, 2 ]; audio/x-adpcm, layout=(string)dk4, rate=(int)[ 8000, 96000 ], channels=(int)[ 1, 2 ]; audio/x-adpcm, layout=(string)dk3, rate=(int)[ 8000, 96000 ], channels=(int)[ 1, 2 ]; audio/x-adpcm, layout=(string)dvi, rate=(int)[ 8000, 96000 ], channels=(int)[ 1, 2 ]; audio/AMR, rate=(int)8000, channels=(int)1; audio/AMR-WB, rate=(int)16000, channels=(int)1; audio/x-siren; application/x-ogg-avi</details>
+ <details>audio/ms-gsm; audio/mpeg, mpegversion=(int)1, layer=(int)3; audio/mpeg, mpegversion=(int)1, layer=(int)2; audio/x-raw, format=(string){ S8, U8, S16LE, U16LE, S24LE, U24LE, S32LE, U32LE }, layout=(string)interleaved; audio/x-vorbis; audio/x-ac3; audio/x-dts; audio/mpeg, mpegversion=(int)4; audio/x-alaw; audio/x-mulaw; audio/x-wms, bitrate=(int)[ 0, 2147483647 ], block_align=(int)[ 1, 2147483647 ]; audio/x-adpcm, layout=(string)microsoft, block_align=(int)[ 1, 2147483647 ]; audio/x-adpcm, layout=(string)dvi, block_align=(int)[ 1, 2147483647 ]; audio/x-truespeech; audio/x-wma, wmaversion=(int)1, bitrate=(int)[ 0, 2147483647 ], block_align=(int)[ 1, 2147483647 ]; audio/x-wma, wmaversion=(int)2, bitrate=(int)[ 0, 2147483647 ], block_align=(int)[ 1, 2147483647 ]; audio/x-wma, wmaversion=(int)3, bitrate=(int)[ 0, 2147483647 ], block_align=(int)[ 1, 2147483647 ]; audio/x-vnd.sony.atrac3; audio/x-raw, format=(string){ F32LE, F64LE }, layout=(string)interleaved; audio/x-voxware, voxwaretype=(int)117; audio/x-adpcm, layout=(string)dk4; audio/x-adpcm, layout=(string)dk3; audio/x-adpcm, layout=(string)dvi; audio/AMR; audio/AMR-WB; audio/x-siren; application/x-ogg-avi</details>
</caps>
</pads>
</element>
diff --git a/docs/plugins/inspect/plugin-ximagesrc.xml b/docs/plugins/inspect/plugin-ximagesrc.xml
index 5515ab5..1ec3d79 100644
--- a/docs/plugins/inspect/plugin-ximagesrc.xml
+++ b/docs/plugins/inspect/plugin-ximagesrc.xml
@@ -3,7 +3,7 @@
<description>X11 video input plugin using standard Xlib calls</description>
<filename>../../sys/ximage/.libs/libgstximagesrc.so</filename>
<basename>libgstximagesrc.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-y4menc.xml b/docs/plugins/inspect/plugin-y4menc.xml
index d86684c..5376ce6 100644
--- a/docs/plugins/inspect/plugin-y4menc.xml
+++ b/docs/plugins/inspect/plugin-y4menc.xml
@@ -3,7 +3,7 @@
<description>Encodes a YUV frame into the yuv4mpeg format (mjpegtools)</description>
<filename>../../gst/y4m/.libs/libgsty4menc.so</filename>
<basename>libgsty4menc.so</basename>
- <version>1.9.1</version>
+ <version>1.9.2</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/ext/Makefile.in b/ext/Makefile.in
index a85bda2..ca046b2 100644
--- a/ext/Makefile.in
+++ b/ext/Makefile.in
@@ -102,6 +102,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -320,6 +321,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -426,6 +428,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -493,6 +498,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/ext/aalib/Makefile.in b/ext/aalib/Makefile.in
index af12e63..e9016f0 100644
--- a/ext/aalib/Makefile.in
+++ b/ext/aalib/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -342,6 +343,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -448,6 +450,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -515,6 +520,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/ext/cairo/Makefile.in b/ext/cairo/Makefile.in
index c536d73..b268db6 100644
--- a/ext/cairo/Makefile.in
+++ b/ext/cairo/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -343,6 +344,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -449,6 +451,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -516,6 +521,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/ext/dv/Makefile.in b/ext/dv/Makefile.in
index ed4d074..98d18c3 100644
--- a/ext/dv/Makefile.in
+++ b/ext/dv/Makefile.in
@@ -101,6 +101,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -352,6 +353,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -458,6 +460,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -525,6 +530,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/ext/dv/gstdvdemux.c b/ext/dv/gstdvdemux.c
index a259cc1..06e9297 100644
--- a/ext/dv/gstdvdemux.c
+++ b/ext/dv/gstdvdemux.c
@@ -1220,7 +1220,7 @@
gst_dvdemux_handle_src_event (GstPad * pad, GstObject * parent,
GstEvent * event)
{
- gboolean res = TRUE;
+ gboolean res = FALSE;
GstDVDemux *dvdemux;
dvdemux = GST_DVDEMUX (parent);
@@ -1230,25 +1230,12 @@
/* seek handler is installed based on scheduling mode */
if (dvdemux->seek_handler)
res = dvdemux->seek_handler (dvdemux, pad, event);
- else
- res = FALSE;
- break;
- case GST_EVENT_QOS:
- /* we can't really (yet) do QoS */
- res = FALSE;
- break;
- case GST_EVENT_NAVIGATION:
- case GST_EVENT_CAPS:
- /* no navigation or caps either... */
- res = FALSE;
+ gst_event_unref (event);
break;
default:
res = gst_pad_push_event (dvdemux->sinkpad, event);
- event = NULL;
break;
}
- if (event)
- gst_event_unref (event);
return res;
}
@@ -1905,8 +1892,7 @@
} else if (ret == GST_FLOW_NOT_LINKED || ret < GST_FLOW_EOS) {
GstEvent *event = gst_event_new_eos ();
/* for fatal errors or not-linked we post an error message */
- GST_ELEMENT_ERROR (dvdemux, STREAM, FAILED,
- (NULL), ("streaming stopped, reason %s", gst_flow_get_name (ret)));
+ GST_ELEMENT_FLOW_ERROR (dvdemux, ret);
if (dvdemux->segment_seqnum)
gst_event_set_seqnum (event, dvdemux->segment_seqnum);
gst_dvdemux_push_event (dvdemux, event);
diff --git a/ext/flac/Makefile.in b/ext/flac/Makefile.in
index 567f9f9..7eaa048 100644
--- a/ext/flac/Makefile.in
+++ b/ext/flac/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -344,6 +345,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -450,6 +452,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -517,6 +522,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/ext/gdk_pixbuf/Makefile.in b/ext/gdk_pixbuf/Makefile.in
index 02a30b2..459010f 100644
--- a/ext/gdk_pixbuf/Makefile.in
+++ b/ext/gdk_pixbuf/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -345,6 +346,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -451,6 +453,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -518,6 +523,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/ext/gdk_pixbuf/gstgdkpixbufdec.c b/ext/gdk_pixbuf/gstgdkpixbufdec.c
index 735f079..1598c53 100644
--- a/ext/gdk_pixbuf/gstgdkpixbufdec.c
+++ b/ext/gdk_pixbuf/gstgdkpixbufdec.c
@@ -417,8 +417,7 @@
* things failed */
if (res != GST_FLOW_OK && res != GST_FLOW_FLUSHING
&& res != GST_FLOW_EOS && res != GST_FLOW_NOT_LINKED) {
- GST_ELEMENT_ERROR (pixbuf, STREAM, FAILED, (NULL), ("Flow: %s",
- gst_flow_get_name (res)));
+ GST_ELEMENT_FLOW_ERROR (pixbuf, res);
forward = FALSE;
ret = FALSE;
}
diff --git a/ext/jack/Makefile.in b/ext/jack/Makefile.in
index 6c100f8..8b6489f 100644
--- a/ext/jack/Makefile.in
+++ b/ext/jack/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -344,6 +345,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -450,6 +452,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -517,6 +522,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/ext/jack/gstjackaudioclient.c b/ext/jack/gstjackaudioclient.c
index 0f06d10..9c50a6a 100644
--- a/ext/jack/gstjackaudioclient.c
+++ b/ext/jack/gstjackaudioclient.c
@@ -85,6 +85,7 @@
GstJackClientType type;
gboolean active;
gboolean deactivate;
+ gboolean server_down;
JackShutdownCallback shutdown;
JackProcessCallback process;
@@ -227,12 +228,16 @@
for (walk = conn->src_clients; walk; walk = g_list_next (walk)) {
GstJackAudioClient *client = (GstJackAudioClient *) walk->data;
+ client->server_down = TRUE;
+ g_cond_signal (&conn->flush_cond);
if (client->shutdown)
client->shutdown (client->user_data);
}
for (walk = conn->sink_clients; walk; walk = g_list_next (walk)) {
GstJackAudioClient *client = (GstJackAudioClient *) walk->data;
+ client->server_down = TRUE;
+ g_cond_signal (&conn->flush_cond);
if (client->shutdown)
client->shutdown (client->user_data);
}
@@ -520,6 +525,7 @@
client->buffer_size = buffer_size;
client->sample_rate = sample_rate;
client->user_data = user_data;
+ client->server_down = FALSE;
/* add the client to the connection */
gst_jack_audio_connection_add_client (conn, client);
@@ -600,7 +606,7 @@
client->deactivate = TRUE;
/* need to wait for process_cb run once more */
- while (client->deactivate)
+ while (client->deactivate && !client->server_down)
g_cond_wait (&client->conn->flush_cond, &client->conn->lock);
}
client->active = active;
diff --git a/ext/jpeg/Makefile.in b/ext/jpeg/Makefile.in
index 1505f34..12afd03 100644
--- a/ext/jpeg/Makefile.in
+++ b/ext/jpeg/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -343,6 +344,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -449,6 +451,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -516,6 +521,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/ext/libcaca/Makefile.in b/ext/libcaca/Makefile.in
index 6175d28..a72eb4e 100644
--- a/ext/libcaca/Makefile.in
+++ b/ext/libcaca/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -342,6 +343,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -448,6 +450,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -515,6 +520,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/ext/libpng/Makefile.in b/ext/libpng/Makefile.in
index 0a5879b..2501e16 100644
--- a/ext/libpng/Makefile.in
+++ b/ext/libpng/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -343,6 +344,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -449,6 +451,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -516,6 +521,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/ext/pulse/Makefile.in b/ext/pulse/Makefile.in
index 72a73d1..2659661 100644
--- a/ext/pulse/Makefile.in
+++ b/ext/pulse/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -345,6 +346,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -451,6 +453,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -518,6 +523,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/ext/raw1394/Makefile.in b/ext/raw1394/Makefile.in
index b27c3a9..40a90bd 100644
--- a/ext/raw1394/Makefile.in
+++ b/ext/raw1394/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -349,6 +350,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -455,6 +457,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -522,6 +527,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/ext/shout2/Makefile.in b/ext/shout2/Makefile.in
index 69ec4d8..0dc751e 100644
--- a/ext/shout2/Makefile.in
+++ b/ext/shout2/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -341,6 +342,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -447,6 +449,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -514,6 +519,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/ext/soup/Makefile.in b/ext/soup/Makefile.in
index 02764c0..36bf1d5 100644
--- a/ext/soup/Makefile.in
+++ b/ext/soup/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -345,6 +346,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -451,6 +453,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -518,6 +523,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/ext/soup/gstsouphttpsrc.c b/ext/soup/gstsouphttpsrc.c
index cd66704..aef64d3 100644
--- a/ext/soup/gstsouphttpsrc.c
+++ b/ext/soup/gstsouphttpsrc.c
@@ -968,11 +968,16 @@
GST_DEBUG_OBJECT (src, "Closing session");
g_mutex_lock (&src->mutex);
+ if (src->msg) {
+ soup_session_cancel_message (src->session, src->msg, SOUP_STATUS_CANCELLED);
+ g_object_unref (src->msg);
+ src->msg = NULL;
+ }
+
if (src->session) {
- soup_session_abort (src->session); /* This unrefs the message. */
+ soup_session_abort (src->session);
g_object_unref (src->session);
src->session = NULL;
- src->msg = NULL;
}
g_mutex_unlock (&src->mutex);
}
@@ -1218,10 +1223,13 @@
if (src->ret == GST_FLOW_CUSTOM_ERROR &&
src->read_position && msg->status_code != SOUP_STATUS_PARTIAL_CONTENT) {
src->seekable = FALSE;
- GST_ELEMENT_ERROR (src, RESOURCE, SEEK,
+ GST_ELEMENT_ERROR_WITH_DETAILS (src, RESOURCE, SEEK,
(_("Server does not support seeking.")),
("Server does not accept Range HTTP header, URL: %s, Redirect to: %s",
- src->location, GST_STR_NULL (src->redirection_uri)));
+ src->location, GST_STR_NULL (src->redirection_uri)),
+ ("http-status-code", G_TYPE_UINT, msg->status_code,
+ "http-redirection-uri", G_TYPE_STRING,
+ GST_STR_NULL (src->redirection_uri), NULL));
src->ret = GST_FLOW_ERROR;
}
@@ -1250,9 +1258,13 @@
}
#define SOUP_HTTP_SRC_ERROR(src,soup_msg,cat,code,error_message) \
- GST_ELEMENT_ERROR ((src), cat, code, ("%s", error_message), \
- ("%s (%d), URL: %s, Redirect to: %s", (soup_msg)->reason_phrase, \
- (soup_msg)->status_code, (src)->location, GST_STR_NULL ((src)->redirection_uri)));
+ do { \
+ GST_ELEMENT_ERROR_WITH_DETAILS ((src), cat, code, ("%s", error_message), \
+ ("%s (%d), URL: %s, Redirect to: %s", (soup_msg)->reason_phrase, \
+ (soup_msg)->status_code, (src)->location, GST_STR_NULL ((src)->redirection_uri)), \
+ ("http-status-code", G_TYPE_UINT, msg->status_code, \
+ "http-redirect-uri", G_TYPE_STRING, GST_STR_NULL ((src)->redirection_uri), NULL)); \
+ } while(0)
static void
gst_soup_http_src_parse_status (SoupMessage * msg, GstSoupHTTPSrc * src)
@@ -1319,25 +1331,33 @@
* error dialog according to libsoup documentation.
*/
if (msg->status_code == SOUP_STATUS_NOT_FOUND) {
- GST_ELEMENT_ERROR (src, RESOURCE, NOT_FOUND,
+ GST_ELEMENT_ERROR_WITH_DETAILS (src, RESOURCE, NOT_FOUND,
("%s", msg->reason_phrase),
("%s (%d), URL: %s, Redirect to: %s", msg->reason_phrase,
msg->status_code, src->location,
- GST_STR_NULL (src->redirection_uri)));
+ GST_STR_NULL (src->redirection_uri)),
+ ("http-status-code", G_TYPE_UINT, msg->status_code,
+ "http-redirect-uri", G_TYPE_STRING,
+ GST_STR_NULL (src->redirection_uri), NULL));
} else if (msg->status_code == SOUP_STATUS_UNAUTHORIZED
|| msg->status_code == SOUP_STATUS_PAYMENT_REQUIRED
|| msg->status_code == SOUP_STATUS_FORBIDDEN
|| msg->status_code == SOUP_STATUS_PROXY_AUTHENTICATION_REQUIRED) {
- GST_ELEMENT_ERROR (src, RESOURCE, NOT_AUTHORIZED, ("%s",
+ GST_ELEMENT_ERROR_WITH_DETAILS (src, RESOURCE, NOT_AUTHORIZED, ("%s",
msg->reason_phrase), ("%s (%d), URL: %s, Redirect to: %s",
msg->reason_phrase, msg->status_code, src->location,
- GST_STR_NULL (src->redirection_uri)));
+ GST_STR_NULL (src->redirection_uri)), ("http-status-code",
+ G_TYPE_UINT, msg->status_code, "http-redirect-uri", G_TYPE_STRING,
+ GST_STR_NULL (src->redirection_uri), NULL));
} else {
- GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ,
+ GST_ELEMENT_ERROR_WITH_DETAILS (src, RESOURCE, OPEN_READ,
("%s", msg->reason_phrase),
("%s (%d), URL: %s, Redirect to: %s", msg->reason_phrase,
msg->status_code, src->location,
- GST_STR_NULL (src->redirection_uri)));
+ GST_STR_NULL (src->redirection_uri)),
+ ("http-status-code", G_TYPE_UINT, msg->status_code,
+ "http-redirect-uri", G_TYPE_STRING,
+ GST_STR_NULL (src->redirection_uri), NULL));
}
src->ret = GST_FLOW_ERROR;
}
@@ -1626,7 +1646,6 @@
g_mutex_unlock (&src->mutex);
return GST_FLOW_FLUSHING;
}
- g_mutex_unlock (&src->mutex);
gst_buffer_unmap (*outbuf, &mapinfo);
if (read_bytes > 0) {
@@ -1639,16 +1658,41 @@
src->retry_count = 0;
gst_soup_http_src_check_update_blocksize (src, read_bytes);
+
+ /* If we're at the end of a range request, read again to let libsoup
+ * finalize the request. This allows to reuse the connection again later,
+ * otherwise we would have to cancel the message and close the connection
+ */
+ if (bsrc->segment.stop != -1
+ && bsrc->segment.position + read_bytes >= bsrc->segment.stop) {
+ guint8 tmp[128];
+
+ g_object_unref (src->msg);
+ src->msg = NULL;
+ src->have_body = TRUE;
+
+ /* This should return immediately as we're at the end of the range */
+ read_bytes =
+ g_input_stream_read (src->input_stream, tmp, sizeof (tmp),
+ src->cancellable, NULL);
+ if (read_bytes > 0)
+ GST_ERROR_OBJECT (src,
+ "Read %" G_GSIZE_FORMAT " bytes after end of range", read_bytes);
+ }
} else {
gst_buffer_unref (*outbuf);
if (read_bytes < 0) {
/* Maybe the server disconnected, retry */
ret = GST_FLOW_CUSTOM_ERROR;
} else {
+ g_object_unref (src->msg);
+ src->msg = NULL;
ret = GST_FLOW_EOS;
src->have_body = TRUE;
}
}
+ g_mutex_unlock (&src->mutex);
+
return ret;
}
diff --git a/ext/speex/Makefile.in b/ext/speex/Makefile.in
index 19ed9ff..1bb3c27 100644
--- a/ext/speex/Makefile.in
+++ b/ext/speex/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -343,6 +344,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -449,6 +451,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -516,6 +521,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/ext/taglib/Makefile.in b/ext/taglib/Makefile.in
index 1aef827..459d8bd 100644
--- a/ext/taglib/Makefile.in
+++ b/ext/taglib/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -360,6 +361,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -466,6 +468,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -533,6 +538,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/ext/vpx/Makefile.in b/ext/vpx/Makefile.in
index 5e78178..458c6ef 100644
--- a/ext/vpx/Makefile.in
+++ b/ext/vpx/Makefile.in
@@ -100,6 +100,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -348,6 +349,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -454,6 +456,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -521,6 +526,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/ext/vpx/gstvp9enc.c b/ext/vpx/gstvp9enc.c
index 593544a..0d8f9a2 100644
--- a/ext/vpx/gstvp9enc.c
+++ b/ext/vpx/gstvp9enc.c
@@ -235,9 +235,17 @@
}
static void
+gst_vp9_enc_user_data_free (vpx_image_t * image)
+{
+ g_slice_free (vpx_image_t, image);
+}
+
+static void
gst_vp9_enc_set_frame_user_data (GstVPXEnc * enc, GstVideoCodecFrame * frame,
vpx_image_t * image)
{
+ gst_video_codec_frame_set_user_data (frame, image,
+ (GDestroyNotify) gst_vp9_enc_user_data_free);
return;
}
diff --git a/ext/wavpack/Makefile.in b/ext/wavpack/Makefile.in
index 3ad6a40..19e0f1d 100644
--- a/ext/wavpack/Makefile.in
+++ b/ext/wavpack/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -346,6 +347,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -452,6 +454,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -519,6 +524,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst-plugins-good.doap b/gst-plugins-good.doap
index e9d4e2e..c86fed0 100644
--- a/gst-plugins-good.doap
+++ b/gst-plugins-good.doap
@@ -34,6 +34,16 @@
<release>
<Version>
+ <revision>1.9.2</revision>
+ <branch>master</branch>
+ <name></name>
+ <created>2016-09-01</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-1.9.2.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
<revision>1.9.1</revision>
<branch>master</branch>
<name></name>
diff --git a/gst-plugins-good.spec b/gst-plugins-good.spec
index 52db83e..89bbb66 100644
--- a/gst-plugins-good.spec
+++ b/gst-plugins-good.spec
@@ -4,7 +4,7 @@
%define gst_minver 0.11.0
Name: %{gstreamer}-plugins-good
-Version: 1.9.1
+Version: 1.9.2
Release: 1.gst
Summary: GStreamer plug-ins with good code and licensing
diff --git a/gst/Makefile.in b/gst/Makefile.in
index f058069..9de42f2 100644
--- a/gst/Makefile.in
+++ b/gst/Makefile.in
@@ -102,6 +102,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -320,6 +321,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -426,6 +428,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -493,6 +498,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/alpha/Makefile.in b/gst/alpha/Makefile.in
index f492c8d..e2c63dc 100644
--- a/gst/alpha/Makefile.in
+++ b/gst/alpha/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -351,6 +352,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -457,6 +459,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -524,6 +529,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/apetag/Makefile.in b/gst/apetag/Makefile.in
index 941c01b..48cc189 100644
--- a/gst/apetag/Makefile.in
+++ b/gst/apetag/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -341,6 +342,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -447,6 +449,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -514,6 +519,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/audiofx/Makefile.in b/gst/audiofx/Makefile.in
index 88465e3..cdf425f 100644
--- a/gst/audiofx/Makefile.in
+++ b/gst/audiofx/Makefile.in
@@ -123,6 +123,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -388,6 +389,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -494,6 +496,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -561,6 +566,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/audioparsers/Makefile.in b/gst/audioparsers/Makefile.in
index 723a13a..f3e75c5 100644
--- a/gst/audioparsers/Makefile.in
+++ b/gst/audioparsers/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -350,6 +351,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -456,6 +458,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -523,6 +528,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/auparse/Makefile.in b/gst/auparse/Makefile.in
index 986936e..3794b33 100644
--- a/gst/auparse/Makefile.in
+++ b/gst/auparse/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -341,6 +342,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -447,6 +449,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -514,6 +519,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/autodetect/Makefile.in b/gst/autodetect/Makefile.in
index 9289d78..c6dec54 100644
--- a/gst/autodetect/Makefile.in
+++ b/gst/autodetect/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -345,6 +346,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -451,6 +453,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -518,6 +523,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/avi/Makefile.in b/gst/avi/Makefile.in
index 19ef4c7..8a07d9b 100644
--- a/gst/avi/Makefile.in
+++ b/gst/avi/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -343,6 +344,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -449,6 +451,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -516,6 +521,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/avi/gstavidemux.c b/gst/avi/gstavidemux.c
index 5ccbbb1..1fe3176 100644
--- a/gst/avi/gstavidemux.c
+++ b/gst/avi/gstavidemux.c
@@ -926,11 +926,6 @@
}
gst_event_unref (event);
break;
- case GST_EVENT_QOS:
- case GST_EVENT_NAVIGATION:
- res = FALSE;
- gst_event_unref (event);
- break;
default:
res = gst_pad_event_default (pad, parent, event);
break;
@@ -5700,9 +5695,7 @@
/* for fatal errors we post an error message, wrong-state is
* not fatal because it happens due to flushes and only means
* that we should stop now. */
- GST_ELEMENT_ERROR (avi, STREAM, FAILED,
- (_("Internal data stream error.")),
- ("streaming stopped, reason %s", gst_flow_get_name (res)));
+ GST_ELEMENT_FLOW_ERROR (avi, res);
push_eos = TRUE;
}
if (push_eos) {
diff --git a/gst/cutter/Makefile.in b/gst/cutter/Makefile.in
index 3a67755..1893e7e 100644
--- a/gst/cutter/Makefile.in
+++ b/gst/cutter/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -341,6 +342,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -447,6 +449,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -514,6 +519,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/debugutils/Makefile.in b/gst/debugutils/Makefile.in
index 4f8ee29..4579eef 100644
--- a/gst/debugutils/Makefile.in
+++ b/gst/debugutils/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -358,6 +359,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -464,6 +466,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -531,6 +536,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/debugutils/rndbuffersize.c b/gst/debugutils/rndbuffersize.c
index a5f1d69..d33a23c 100644
--- a/gst/debugutils/rndbuffersize.c
+++ b/gst/debugutils/rndbuffersize.c
@@ -515,9 +515,7 @@
GST_DEBUG_OBJECT (self, "eos");
gst_pad_push_event (self->srcpad, gst_event_new_eos ());
} else if (ret < GST_FLOW_EOS || ret == GST_FLOW_NOT_LINKED) {
- GST_ELEMENT_ERROR (self, STREAM, FAILED,
- ("Internal data stream error."),
- ("streaming stopped, reason: %s", gst_flow_get_name (ret)));
+ GST_ELEMENT_FLOW_ERROR (self, ret);
}
goto pause_task;
}
diff --git a/gst/deinterlace/Makefile.in b/gst/deinterlace/Makefile.in
index 7e01931..b5b979f 100644
--- a/gst/deinterlace/Makefile.in
+++ b/gst/deinterlace/Makefile.in
@@ -121,6 +121,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -382,6 +383,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -488,6 +490,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -555,6 +560,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/dtmf/Makefile.in b/gst/dtmf/Makefile.in
index 6400e97..bbcc0a0 100644
--- a/gst/dtmf/Makefile.in
+++ b/gst/dtmf/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -344,6 +345,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -450,6 +452,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -517,6 +522,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/effectv/Makefile.in b/gst/effectv/Makefile.in
index 696c4fb..2568302 100644
--- a/gst/effectv/Makefile.in
+++ b/gst/effectv/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -349,6 +350,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -455,6 +457,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -522,6 +527,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/equalizer/Makefile.in b/gst/equalizer/Makefile.in
index 63295a0..eb7222c 100644
--- a/gst/equalizer/Makefile.in
+++ b/gst/equalizer/Makefile.in
@@ -100,6 +100,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -347,6 +348,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -453,6 +455,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -520,6 +525,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/flv/Makefile.in b/gst/flv/Makefile.in
index 8093778..e89eded 100644
--- a/gst/flv/Makefile.in
+++ b/gst/flv/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -342,6 +343,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -448,6 +450,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -515,6 +520,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/flv/gstflvdemux.c b/gst/flv/gstflvdemux.c
index f226907..e324b18 100644
--- a/gst/flv/gstflvdemux.c
+++ b/gst/flv/gstflvdemux.c
@@ -114,6 +114,8 @@
static GstIndex *gst_flv_demux_get_index (GstElement * element);
+static void gst_flv_demux_push_tags (GstFlvDemux * demux);
+
static void
gst_flv_demux_parse_and_add_index_entry (GstFlvDemux * demux, GstClockTime ts,
guint64 pos, gboolean keyframe)
@@ -368,6 +370,12 @@
demux->h = d;
} else if (!strcmp (tag_name, "framerate")) {
demux->framerate = d;
+ } else if (!strcmp (tag_name, "audiodatarate")) {
+ gst_tag_list_add (demux->audio_tags, GST_TAG_MERGE_REPLACE,
+ GST_TAG_NOMINAL_BITRATE, (guint) (d * 1024), NULL);
+ } else if (!strcmp (tag_name, "videodatarate")) {
+ gst_tag_list_add (demux->video_tags, GST_TAG_MERGE_REPLACE,
+ GST_TAG_NOMINAL_BITRATE, (guint) (d * 1024), NULL);
} else {
GST_INFO_OBJECT (demux, "Tag \'%s\' not handled", tag_name);
}
@@ -561,6 +569,28 @@
return FALSE;
}
+static void
+gst_flv_demux_clear_tags (GstFlvDemux * demux)
+{
+ GST_DEBUG_OBJECT (demux, "clearing taglist");
+
+ if (demux->taglist) {
+ gst_tag_list_unref (demux->taglist);
+ }
+ demux->taglist = gst_tag_list_new_empty ();
+ gst_tag_list_set_scope (demux->taglist, GST_TAG_SCOPE_GLOBAL);
+
+ if (demux->audio_tags) {
+ gst_tag_list_unref (demux->audio_tags);
+ }
+ demux->audio_tags = gst_tag_list_new_empty ();
+
+ if (demux->video_tags) {
+ gst_tag_list_unref (demux->video_tags);
+ }
+ demux->video_tags = gst_tag_list_new_empty ();
+}
+
static GstFlowReturn
gst_flv_demux_parse_tag_script (GstFlvDemux * demux, GstBuffer * buffer)
{
@@ -594,6 +624,8 @@
gboolean end_marker = FALSE;
GST_DEBUG_OBJECT (demux, "we have a metadata script object");
+ gst_flv_demux_clear_tags (demux);
+
if (!gst_byte_reader_get_uint8 (&reader, &type)) {
g_free (function_name);
goto cleanup;
@@ -636,7 +668,7 @@
goto cleanup;
}
- demux->push_tags = TRUE;
+ gst_flv_demux_push_tags (demux);
}
g_free (function_name);
@@ -689,7 +721,6 @@
guint32 rate, guint32 channels, guint32 width)
{
GstCaps *caps = NULL, *old_caps;
- gchar *codec_name = NULL;
gboolean ret = FALSE;
guint adjusted_rate = rate;
GstEvent *event;
@@ -871,18 +902,10 @@
demux->width = width;
if (caps) {
- codec_name = gst_pb_utils_get_codec_description (caps);
-
- if (codec_name) {
- if (demux->taglist == NULL)
- demux->taglist = gst_tag_list_new_empty ();
- gst_tag_list_add (demux->taglist, GST_TAG_MERGE_REPLACE,
- GST_TAG_AUDIO_CODEC, codec_name, NULL);
- g_free (codec_name);
- }
-
GST_DEBUG_OBJECT (demux->audio_pad, "successfully negotiated caps %"
GST_PTR_FORMAT, caps);
+
+ gst_flv_demux_push_tags (demux);
} else {
GST_DEBUG_OBJECT (demux->audio_pad, "delayed setting caps");
}
@@ -915,25 +938,49 @@
}
static void
+gst_flv_demux_add_codec_tag (GstFlvDemux * demux, const gchar * tag,
+ GstPad * pad)
+{
+ if (pad) {
+ GstCaps *caps = gst_pad_get_current_caps (pad);
+
+ if (caps) {
+ gchar *codec_name = gst_pb_utils_get_codec_description (caps);
+
+ if (codec_name) {
+ gst_tag_list_add (demux->taglist, GST_TAG_MERGE_REPLACE,
+ tag, codec_name, NULL);
+ g_free (codec_name);
+ }
+
+ gst_caps_unref (caps);
+ }
+ }
+}
+
+static void
gst_flv_demux_push_tags (GstFlvDemux * demux)
{
- if (demux->has_audio && !demux->audio_pad) {
- GST_DEBUG_OBJECT (demux,
- "Waiting for audio stream pad to come up before we can push tags");
- return;
+ gst_flv_demux_add_codec_tag (demux, GST_TAG_AUDIO_CODEC, demux->audio_pad);
+ gst_flv_demux_add_codec_tag (demux, GST_TAG_VIDEO_CODEC, demux->video_pad);
+
+ GST_DEBUG_OBJECT (demux, "pushing %" GST_PTR_FORMAT, demux->taglist);
+
+ gst_flv_demux_push_src_event (demux,
+ gst_event_new_tag (gst_tag_list_copy (demux->taglist)));
+
+ if (demux->audio_pad) {
+ GST_DEBUG_OBJECT (demux->audio_pad, "pushing audio %" GST_PTR_FORMAT,
+ demux->audio_tags);
+ gst_pad_push_event (demux->audio_pad,
+ gst_event_new_tag (gst_tag_list_copy (demux->audio_tags)));
}
- if (demux->has_video && !demux->video_pad) {
- GST_DEBUG_OBJECT (demux,
- "Waiting for video stream pad to come up before we can push tags");
- return;
- }
- if (demux->taglist) {
- GST_DEBUG_OBJECT (demux, "pushing tags out %" GST_PTR_FORMAT,
- demux->taglist);
- gst_tag_list_set_scope (demux->taglist, GST_TAG_SCOPE_GLOBAL);
- gst_flv_demux_push_src_event (demux, gst_event_new_tag (demux->taglist));
- demux->taglist = gst_tag_list_new_empty ();
- demux->push_tags = FALSE;
+
+ if (demux->video_pad) {
+ GST_DEBUG_OBJECT (demux->video_pad, "pushing video %" GST_PTR_FORMAT,
+ demux->video_tags);
+ gst_pad_push_event (demux->video_pad,
+ gst_event_new_tag (gst_tag_list_copy (demux->video_tags)));
}
}
@@ -1137,7 +1184,6 @@
GST_DEBUG_OBJECT (demux, "emitting no more pads");
gst_element_no_more_pads (GST_ELEMENT (demux));
demux->no_more_pads = TRUE;
- demux->push_tags = TRUE;
}
}
@@ -1156,10 +1202,6 @@
}
}
- /* Push taglist if present */
- if (G_UNLIKELY (demux->push_tags))
- gst_flv_demux_push_tags (demux);
-
/* Check if we have anything to push */
if (demux->tag_data_size <= codec_data) {
GST_LOG_OBJECT (demux, "Nothing left in this tag, returning");
@@ -1241,7 +1283,6 @@
" after 6 seconds of audio");
gst_element_no_more_pads (GST_ELEMENT_CAST (demux));
demux->no_more_pads = TRUE;
- demux->push_tags = TRUE;
}
/* Push downstream */
@@ -1273,7 +1314,6 @@
{
gboolean ret = FALSE;
GstCaps *caps = NULL, *old_caps;
- gchar *codec_name = NULL;
GstEvent *event;
gchar *stream_id;
@@ -1378,18 +1418,10 @@
demux->video_codec_tag = codec_tag;
if (caps) {
- codec_name = gst_pb_utils_get_codec_description (caps);
-
- if (codec_name) {
- if (demux->taglist == NULL)
- demux->taglist = gst_tag_list_new_empty ();
- gst_tag_list_add (demux->taglist, GST_TAG_MERGE_REPLACE,
- GST_TAG_VIDEO_CODEC, codec_name, NULL);
- g_free (codec_name);
- }
-
GST_DEBUG_OBJECT (demux->video_pad, "successfully negotiated caps %"
GST_PTR_FORMAT, caps);
+
+ gst_flv_demux_push_tags (demux);
} else {
GST_DEBUG_OBJECT (demux->video_pad, "delayed setting caps");
}
@@ -1568,7 +1600,6 @@
GST_DEBUG_OBJECT (demux, "emitting no more pads");
gst_element_no_more_pads (GST_ELEMENT (demux));
demux->no_more_pads = TRUE;
- demux->push_tags = TRUE;
}
}
@@ -1587,10 +1618,6 @@
demux->got_par = FALSE;
}
- /* Push taglist if present */
- if (G_UNLIKELY (demux->push_tags))
- gst_flv_demux_push_tags (demux);
-
/* Check if we have anything to push */
if (demux->tag_data_size <= codec_data) {
GST_LOG_OBJECT (demux, "Nothing left in this tag, returning");
@@ -1677,7 +1704,6 @@
" after 6 seconds of video");
gst_element_no_more_pads (GST_ELEMENT_CAST (demux));
demux->no_more_pads = TRUE;
- demux->push_tags = TRUE;
}
/* Push downstream */
@@ -1925,7 +1951,6 @@
demux->has_audio = FALSE;
demux->has_video = FALSE;
- demux->push_tags = FALSE;
demux->got_par = FALSE;
demux->indexed = FALSE;
@@ -1997,6 +2022,8 @@
g_array_free (demux->filepositions, TRUE);
demux->filepositions = NULL;
}
+
+ gst_flv_demux_clear_tags (demux);
}
/*
@@ -2702,9 +2729,7 @@
GST_WARNING_OBJECT (demux, "failed pushing EOS on streams");
}
} else if (ret == GST_FLOW_NOT_LINKED || ret < GST_FLOW_EOS) {
- GST_ELEMENT_ERROR (demux, STREAM, FAILED,
- ("Internal data stream error."),
- ("stream stopped, reason %s", reason));
+ GST_ELEMENT_FLOW_ERROR (demux, ret);
gst_flv_demux_push_src_event (demux, gst_event_new_eos ());
}
gst_object_unref (demux);
@@ -3495,6 +3520,16 @@
demux->taglist = NULL;
}
+ if (demux->audio_tags) {
+ gst_tag_list_unref (demux->audio_tags);
+ demux->audio_tags = NULL;
+ }
+
+ if (demux->video_tags) {
+ gst_tag_list_unref (demux->video_tags);
+ demux->video_tags = NULL;
+ }
+
if (demux->flowcombiner) {
gst_flow_combiner_free (demux->flowcombiner);
demux->flowcombiner = NULL;
@@ -3588,7 +3623,6 @@
gst_element_add_pad (GST_ELEMENT (demux), demux->sinkpad);
demux->adapter = gst_adapter_new ();
- demux->taglist = gst_tag_list_new_empty ();
demux->flowcombiner = gst_flow_combiner_new ();
gst_segment_init (&demux->segment, GST_FORMAT_TIME);
diff --git a/gst/flv/gstflvdemux.h b/gst/flv/gstflvdemux.h
index aa8d6ac..4eb1791 100644
--- a/gst/flv/gstflvdemux.h
+++ b/gst/flv/gstflvdemux.h
@@ -82,6 +82,8 @@
GstEvent *new_seg_event;
GstTagList *taglist;
+ GstTagList *audio_tags;
+ GstTagList *video_tags;
GstFlvDemuxState state;
@@ -126,7 +128,6 @@
gboolean need_header;
gboolean has_audio;
gboolean has_video;
- gboolean push_tags;
gboolean strict;
gboolean flushing;
diff --git a/gst/flx/Makefile.in b/gst/flx/Makefile.in
index 5a938cf..90df6f6 100644
--- a/gst/flx/Makefile.in
+++ b/gst/flx/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -342,6 +343,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -448,6 +450,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -515,6 +520,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/goom/Makefile.in b/gst/goom/Makefile.in
index ad13250..0357eaf 100644
--- a/gst/goom/Makefile.in
+++ b/gst/goom/Makefile.in
@@ -98,6 +98,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -360,6 +361,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -466,6 +468,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -533,6 +538,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/goom2k1/Makefile.in b/gst/goom2k1/Makefile.in
index ddd2578..22655a1 100644
--- a/gst/goom2k1/Makefile.in
+++ b/gst/goom2k1/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -345,6 +346,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -451,6 +453,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -518,6 +523,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/icydemux/Makefile.in b/gst/icydemux/Makefile.in
index deaf6b4..039fb86 100644
--- a/gst/icydemux/Makefile.in
+++ b/gst/icydemux/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -341,6 +342,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -447,6 +449,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -514,6 +519,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/id3demux/Makefile.in b/gst/id3demux/Makefile.in
index 12bdcfb..a391eed 100644
--- a/gst/id3demux/Makefile.in
+++ b/gst/id3demux/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -341,6 +342,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -447,6 +449,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -514,6 +519,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/imagefreeze/Makefile.in b/gst/imagefreeze/Makefile.in
index 4b02c41..487dcc8 100644
--- a/gst/imagefreeze/Makefile.in
+++ b/gst/imagefreeze/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -341,6 +342,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -447,6 +449,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -514,6 +519,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/imagefreeze/gstimagefreeze.c b/gst/imagefreeze/gstimagefreeze.c
index 42a14e6..f122645 100644
--- a/gst/imagefreeze/gstimagefreeze.c
+++ b/gst/imagefreeze/gstimagefreeze.c
@@ -846,9 +846,7 @@
} else if (flow_ret == GST_FLOW_NOT_LINKED || flow_ret < GST_FLOW_EOS) {
GstEvent *e = gst_event_new_eos ();
- GST_ELEMENT_ERROR (self, STREAM, FAILED,
- ("Internal data stream error."),
- ("stream stopped, reason %s", reason));
+ GST_ELEMENT_FLOW_ERROR (self, flow_ret);
if (self->seqnum)
gst_event_set_seqnum (e, self->seqnum);
diff --git a/gst/interleave/Makefile.in b/gst/interleave/Makefile.in
index d5cd553..d142f96 100644
--- a/gst/interleave/Makefile.in
+++ b/gst/interleave/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -343,6 +344,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -449,6 +451,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -516,6 +521,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/isomp4/Makefile.in b/gst/isomp4/Makefile.in
index d1651cb..2e53256 100644
--- a/gst/isomp4/Makefile.in
+++ b/gst/isomp4/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -350,6 +351,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -456,6 +458,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -523,6 +528,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/isomp4/atoms.c b/gst/isomp4/atoms.c
index e0ec513..f53004e 100644
--- a/gst/isomp4/atoms.c
+++ b/gst/isomp4/atoms.c
@@ -398,6 +398,96 @@
}
static void
+atom_tcmi_init (AtomTCMI * tcmi)
+{
+ guint8 flags[3] = { 0, 0, 0 };
+
+ atom_full_init (&tcmi->header, FOURCC_tcmi, 0, 0, 0, flags);
+}
+
+static void
+atom_tcmi_clear (AtomTCMI * tcmi)
+{
+ atom_full_clear (&tcmi->header);
+ tcmi->text_font = 0;
+ tcmi->text_face = 0;
+ tcmi->text_size = 0;
+ tcmi->text_color[0] = 0;
+ tcmi->text_color[1] = 0;
+ tcmi->text_color[2] = 0;
+ tcmi->bg_color[0] = 0;
+ tcmi->bg_color[1] = 0;
+ tcmi->bg_color[2] = 0;
+ g_free (tcmi->font_name);
+ tcmi->font_name = NULL;
+}
+
+static void
+atom_tmcd_init (AtomTMCD * tmcd)
+{
+ atom_header_set (&tmcd->header, FOURCC_tmcd, 0, 0);
+ atom_tcmi_init (&tmcd->tcmi);
+}
+
+static void
+atom_tmcd_clear (AtomTMCD * tmcd)
+{
+ atom_clear (&tmcd->header);
+ atom_tcmi_clear (&tmcd->tcmi);
+}
+
+static void
+atom_gmin_init (AtomGMIN * gmin)
+{
+ guint8 flags[3] = { 0, 0, 0 };
+
+ atom_full_init (&gmin->header, FOURCC_gmin, 0, 0, 0, flags);
+}
+
+static void
+atom_gmin_clear (AtomGMIN * gmin)
+{
+ atom_full_clear (&gmin->header);
+ gmin->graphics_mode = 0;
+ gmin->opcolor[0] = 0;
+ gmin->opcolor[1] = 0;
+ gmin->opcolor[2] = 0;
+ gmin->balance = 0;
+ gmin->reserved = 0;
+}
+
+static void
+atom_gmhd_init (AtomGMHD * gmhd)
+{
+ atom_header_set (&gmhd->header, FOURCC_gmhd, 0, 0);
+ atom_gmin_init (&gmhd->gmin);
+ atom_tmcd_init (&gmhd->tmcd);
+}
+
+static void
+atom_gmhd_clear (AtomGMHD * gmhd)
+{
+ atom_clear (&gmhd->header);
+ atom_gmin_clear (&gmhd->gmin);
+ atom_tmcd_clear (&gmhd->tmcd);
+}
+
+static AtomGMHD *
+atom_gmhd_new (void)
+{
+ AtomGMHD *gmhd = g_new0 (AtomGMHD, 1);
+ atom_gmhd_init (gmhd);
+ return gmhd;
+}
+
+static void
+atom_gmhd_free (AtomGMHD * gmhd)
+{
+ atom_gmhd_clear (gmhd);
+ g_free (gmhd);
+}
+
+static void
atom_sample_entry_init (SampleTableEntry * se, guint32 type)
{
atom_header_set (&se->header, type, 0, 0);
@@ -452,6 +542,30 @@
}
static void
+sample_entry_tmcd_init (SampleTableEntryTMCD * tmcd)
+{
+ atom_sample_entry_init (&tmcd->se, FOURCC_tmcd);
+
+ tmcd->tc_flags = 0;
+ tmcd->timescale = 0;
+ tmcd->frame_duration = 0;
+ tmcd->n_frames = 0;
+
+ tmcd->name.language_code = 0;
+ g_free (tmcd->name.name);
+ tmcd->name.name = NULL;
+}
+
+static SampleTableEntryTMCD *
+sample_entry_tmcd_new (void)
+{
+ SampleTableEntryTMCD *tmcd = g_new0 (SampleTableEntryTMCD, 1);
+
+ sample_entry_tmcd_init (tmcd);
+ return tmcd;
+}
+
+static void
sample_entry_mp4v_init (SampleTableEntryMP4V * mp4v, AtomsContext * context)
{
atom_sample_entry_init (&mp4v->se, FOURCC_mp4v);
@@ -934,6 +1048,7 @@
minf->vmhd = NULL;
minf->smhd = NULL;
minf->hmhd = NULL;
+ minf->gmhd = NULL;
if (context->flavor == ATOMS_TREE_FLAVOR_MOV) {
minf->hdlr = atom_hdlr_new (context);
@@ -961,6 +1076,10 @@
atom_hmhd_free (minf->hmhd);
minf->hmhd = NULL;
}
+ if (minf->gmhd) {
+ atom_gmhd_free (minf->gmhd);
+ minf->gmhd = NULL;
+ }
}
static void
@@ -1140,6 +1259,40 @@
atom_info_list_free (udta->entries);
}
+static void
+atom_tref_init (AtomTREF * tref, guint32 reftype)
+{
+ atom_header_set (&tref->header, FOURCC_tref, 0, 0);
+ tref->reftype = reftype;
+ atom_array_init (&tref->entries, 128);
+}
+
+static void
+atom_tref_clear (AtomTREF * tref)
+{
+ atom_clear (&tref->header);
+ tref->reftype = 0;
+ atom_array_clear (&tref->entries);
+}
+
+AtomTREF *
+atom_tref_new (guint32 reftype)
+{
+ AtomTREF *tref;
+
+ tref = g_new0 (AtomTREF, 1);
+ atom_tref_init (tref, reftype);
+
+ return tref;
+}
+
+static void
+atom_tref_free (AtomTREF * tref)
+{
+ atom_tref_clear (tref);
+ g_free (tref);
+}
+
/* Clear added tags, but keep the context/flavor the same */
void
atom_udta_clear_tags (AtomUDTA * udta)
@@ -1255,6 +1408,7 @@
atom_udta_init (&trak->udta, context);
trak->edts = NULL;
atom_mdia_init (&trak->mdia, context);
+ trak->tref = NULL;
}
AtomTRAK *
@@ -1275,6 +1429,8 @@
atom_edts_free (trak->edts);
atom_udta_clear (&trak->udta);
atom_mdia_clear (&trak->mdia);
+ if (trak->tref)
+ atom_tref_free (trak->tref);
}
static void
@@ -1651,6 +1807,91 @@
return original_offset - *offset;
}
+static guint64
+atom_tcmi_copy_data (AtomTCMI * tcmi, guint8 ** buffer, guint64 * size,
+ guint64 * offset)
+{
+ guint64 original_offset = *offset;
+
+ if (!atom_full_copy_data (&tcmi->header, buffer, size, offset)) {
+ return 0;
+ }
+ prop_copy_uint16 (tcmi->text_font, buffer, size, offset);
+ prop_copy_uint16 (tcmi->text_face, buffer, size, offset);
+ prop_copy_uint16 (tcmi->text_size, buffer, size, offset);
+ prop_copy_uint16 (tcmi->text_color[0], buffer, size, offset);
+ prop_copy_uint16 (tcmi->text_color[1], buffer, size, offset);
+ prop_copy_uint16 (tcmi->text_color[2], buffer, size, offset);
+ prop_copy_uint16 (tcmi->bg_color[0], buffer, size, offset);
+ prop_copy_uint16 (tcmi->bg_color[1], buffer, size, offset);
+ prop_copy_uint16 (tcmi->bg_color[2], buffer, size, offset);
+ /* reserved */
+ prop_copy_uint16 (0, buffer, size, offset);
+ prop_copy_size_string ((guint8 *) tcmi->font_name, strlen (tcmi->font_name),
+ buffer, size, offset);
+
+ atom_write_size (buffer, size, offset, original_offset);
+ return original_offset - *offset;
+}
+
+static guint64
+atom_tmcd_copy_data (AtomTMCD * tmcd, guint8 ** buffer, guint64 * size,
+ guint64 * offset)
+{
+ guint64 original_offset = *offset;
+
+ if (!atom_copy_data (&tmcd->header, buffer, size, offset)) {
+ return 0;
+ }
+ if (!atom_tcmi_copy_data (&tmcd->tcmi, buffer, size, offset)) {
+ return 0;
+ }
+
+ atom_write_size (buffer, size, offset, original_offset);
+ return original_offset - *offset;
+}
+
+static guint64
+atom_gmin_copy_data (AtomGMIN * gmin, guint8 ** buffer, guint64 * size,
+ guint64 * offset)
+{
+ guint64 original_offset = *offset;
+
+ if (!atom_full_copy_data (&gmin->header, buffer, size, offset)) {
+ return 0;
+ }
+ prop_copy_uint16 (gmin->graphics_mode, buffer, size, offset);
+ prop_copy_uint16 (gmin->opcolor[0], buffer, size, offset);
+ prop_copy_uint16 (gmin->opcolor[1], buffer, size, offset);
+ prop_copy_uint16 (gmin->opcolor[2], buffer, size, offset);
+ prop_copy_uint8 (gmin->balance, buffer, size, offset);
+ /* reserved */
+ prop_copy_uint8 (0, buffer, size, offset);
+
+ atom_write_size (buffer, size, offset, original_offset);
+ return original_offset - *offset;
+}
+
+static guint64
+atom_gmhd_copy_data (AtomGMHD * gmhd, guint8 ** buffer, guint64 * size,
+ guint64 * offset)
+{
+ guint64 original_offset = *offset;
+
+ if (!atom_copy_data (&gmhd->header, buffer, size, offset)) {
+ return 0;
+ }
+ if (!atom_gmin_copy_data (&gmhd->gmin, buffer, size, offset)) {
+ return 0;
+ }
+ if (!atom_tmcd_copy_data (&gmhd->tmcd, buffer, size, offset)) {
+ return 0;
+ }
+
+ atom_write_size (buffer, size, offset, original_offset);
+ return original_offset - *offset;
+}
+
static gboolean
atom_url_same_file_flag (AtomURL * url)
{
@@ -1874,7 +2115,8 @@
Atom atom;
atom_header_set (&atom, FOURCC_ftab, 18, 0);
- atom_copy_data (&atom, buffer, size, offset);
+ if (!atom_copy_data (&atom, buffer, size, offset))
+ return 0;
prop_copy_uint16 (1, buffer, size, offset); /* Count must be 1 */
prop_copy_uint16 (1, buffer, size, offset); /* Font id: 1 */
prop_copy_size_string ((guint8 *) "Serif", 5, buffer, size, offset);
@@ -1884,6 +2126,45 @@
return *offset - original_offset;
}
+static guint64
+sample_entry_tmcd_copy_data (SampleTableEntryTMCD * tmcd, guint8 ** buffer,
+ guint64 * size, guint64 * offset)
+{
+ guint64 original_offset = *offset;
+
+ if (!atom_sample_entry_copy_data (&tmcd->se, buffer, size, offset)) {
+ return 0;
+ }
+
+ /* reserved */
+ prop_copy_uint32 (0, buffer, size, offset);
+
+ prop_copy_uint32 (tmcd->tc_flags, buffer, size, offset);
+ prop_copy_uint32 (tmcd->timescale, buffer, size, offset);
+ prop_copy_uint32 (tmcd->frame_duration, buffer, size, offset);
+ prop_copy_uint8 (tmcd->n_frames, buffer, size, offset);
+
+ /* reserved */
+ prop_copy_uint8 (0, buffer, size, offset);
+ {
+ Atom atom;
+ guint64 name_offset = *offset;
+
+ atom_header_set (&atom, FOURCC_name, 0, 0);
+ if (!atom_copy_data (&atom, buffer, size, offset))
+ return 0;
+ prop_copy_uint16 (strlen (tmcd->name.name), buffer, size, offset);
+ prop_copy_uint16 (tmcd->name.language_code, buffer, size, offset);
+ prop_copy_fixed_size_string ((guint8 *) tmcd->name.name,
+ strlen (tmcd->name.name), buffer, size, offset);
+
+ atom_write_size (buffer, size, offset, name_offset);
+ }
+
+ atom_write_size (buffer, size, offset, original_offset);
+ return *offset - original_offset;
+}
+
guint64
atom_stsz_copy_data (AtomSTSZ * stsz, guint8 ** buffer, guint64 * size,
guint64 * offset)
@@ -2074,6 +2355,11 @@
walker->data, buffer, size, offset)) {
return 0;
}
+ } else if (se->kind == TIMECODE) {
+ if (!sample_entry_tmcd_copy_data ((SampleTableEntryTMCD *)
+ walker->data, buffer, size, offset)) {
+ return 0;
+ }
} else {
if (!atom_hint_sample_entry_copy_data (
(AtomHintSampleEntry *) walker->data, buffer, size, offset)) {
@@ -2205,6 +2491,10 @@
if (!atom_hmhd_copy_data (minf->hmhd, buffer, size, offset)) {
return 0;
}
+ } else if (minf->gmhd) {
+ if (!atom_gmhd_copy_data (minf->gmhd, buffer, size, offset)) {
+ return 0;
+ }
}
if (minf->hdlr) {
@@ -2294,6 +2584,34 @@
}
static guint64
+atom_tref_copy_data (AtomTREF * tref, guint8 ** buffer, guint64 * size,
+ guint64 * offset)
+{
+ guint64 original_offset = *offset;
+ guint i;
+
+ g_assert (atom_array_get_len (&tref->entries) > 0);
+
+ if (!atom_copy_data (&tref->header, buffer, size, offset)) {
+ return 0;
+ }
+
+ prop_copy_uint32 (8 + 4 * atom_array_get_len (&tref->entries), buffer, size,
+ offset);
+ prop_copy_fourcc (tref->reftype, buffer, size, offset);
+ /* minimize realloc */
+ prop_copy_ensure_buffer (buffer, size, offset,
+ 4 * atom_array_get_len (&tref->entries));
+ for (i = 0; i < atom_array_get_len (&tref->entries); i++) {
+ prop_copy_uint32 (atom_array_index (&tref->entries, i), buffer, size,
+ offset);
+ }
+
+ atom_write_size (buffer, size, offset, original_offset);
+ return *offset - original_offset;
+}
+
+static guint64
atom_edts_copy_data (AtomEDTS * edts, guint8 ** buffer, guint64 * size,
guint64 * offset)
{
@@ -2489,6 +2807,14 @@
return 0;
}
}
+ if (trak->tref) {
+ /* Make sure we need this atom (there is a referenced track */
+ if (atom_array_get_len (&trak->tref->entries) > 0) {
+ if (!atom_tref_copy_data (trak->tref, buffer, size, offset)) {
+ return 0;
+ }
+ }
+ }
if (!atom_mdia_copy_data (&trak->mdia, buffer, size, offset)) {
return 0;
@@ -2628,6 +2954,12 @@
stco64->header.header.type = FOURCC_co64;
}
+void
+atom_tref_add_entry (AtomTREF * tref, guint32 sample)
+{
+ atom_array_append (&tref->entries, sample, 512);
+}
+
static void
atom_stss_add_entry (AtomSTSS * stss, guint32 sample)
{
@@ -2789,6 +3121,36 @@
}
}
+static void
+timecode_atom_trak_set_duration (AtomTRAK * trak, guint64 duration,
+ guint64 timescale)
+{
+ STTSEntry *entry;
+ GList *iter;
+
+ /* Sanity checks to ensure we have a timecode */
+ g_assert (trak->mdia.minf.gmhd != NULL);
+ g_assert (atom_array_get_len (&trak->mdia.minf.stbl.stts.entries) == 1);
+
+ trak->tkhd.duration = duration;
+ trak->mdia.mdhd.time_info.duration = duration;
+ trak->mdia.mdhd.time_info.timescale = timescale;
+
+ entry = &atom_array_index (&trak->mdia.minf.stbl.stts.entries, 0);
+ entry->sample_delta = duration;
+
+ for (iter = trak->mdia.minf.stbl.stsd.entries; iter;
+ iter = g_list_next (iter)) {
+ SampleTableEntry *entry = iter->data;
+ if (entry->kind == TIMECODE) {
+ SampleTableEntryTMCD *tmcd = (SampleTableEntryTMCD *) entry;
+
+ tmcd->frame_duration = tmcd->frame_duration * timescale / tmcd->timescale;
+ tmcd->timescale = timescale;
+ }
+ }
+}
+
static guint32
atom_moov_get_timescale (AtomMOOV * moov)
{
@@ -2810,10 +3172,23 @@
while (traks) {
AtomTRAK *trak = (AtomTRAK *) traks->data;
- atom_trak_update_duration (trak, atom_moov_get_timescale (moov));
- dur = atom_trak_get_duration (trak);
- if (dur > duration)
- duration = dur;
+ /* Skip timecodes for now: they have a placeholder duration */
+ if (trak->mdia.minf.gmhd == NULL) {
+ atom_trak_update_duration (trak, atom_moov_get_timescale (moov));
+ dur = atom_trak_get_duration (trak);
+ if (dur > duration)
+ duration = dur;
+ }
+ traks = g_list_next (traks);
+ }
+ /* Now update the duration of the timecodes */
+ traks = moov->traks;
+ while (traks) {
+ AtomTRAK *trak = (AtomTRAK *) traks->data;
+
+ if (trak->mdia.minf.gmhd != NULL)
+ timecode_atom_trak_set_duration (trak, duration,
+ atom_moov_get_timescale (moov));
traks = g_list_next (traks);
}
moov->mvhd.time_info.duration = duration;
@@ -3323,6 +3698,34 @@
return mp4a;
}
+static SampleTableEntryTMCD *
+atom_trak_add_timecode_entry (AtomTRAK * trak, AtomsContext * context,
+ GstVideoTimeCode * tc)
+{
+ AtomSTSD *stsd = &trak->mdia.minf.stbl.stsd;
+ SampleTableEntryTMCD *tmcd = sample_entry_tmcd_new ();
+
+ trak->mdia.hdlr.component_type = FOURCC_mhlr;
+ trak->mdia.hdlr.handler_type = FOURCC_tmcd;
+ trak->mdia.hdlr.name = g_strdup ("Time Code Media Handler");
+ trak->mdia.mdhd.time_info.timescale = tc->config.fps_n / tc->config.fps_d;
+
+ tmcd->se.kind = TIMECODE;
+ tmcd->se.data_reference_index = 1;
+ tmcd->tc_flags = TC_24H_MAX;
+ if (tc->config.flags &= GST_VIDEO_TIME_CODE_FLAGS_DROP_FRAME)
+ tmcd->tc_flags |= TC_DROP_FRAME;
+ tmcd->name.language_code = 0;
+ tmcd->name.name = g_strdup ("Tape");
+ tmcd->timescale = tc->config.fps_n;
+ tmcd->frame_duration = tc->config.fps_d;
+ tmcd->n_frames = tc->config.fps_n / tc->config.fps_d;
+
+ stsd->entries = g_list_prepend (stsd->entries, tmcd);
+ stsd->n_entries++;
+ return tmcd;
+}
+
static SampleTableEntryMP4V *
atom_trak_add_video_entry (AtomTRAK * trak, AtomsContext * context,
guint32 type)
@@ -3467,6 +3870,34 @@
return ste;
}
+SampleTableEntryTMCD *
+atom_trak_set_timecode_type (AtomTRAK * trak, AtomsContext * context,
+ GstVideoTimeCode * tc)
+{
+ SampleTableEntryTMCD *ste;
+ AtomGMHD *gmhd = trak->mdia.minf.gmhd;
+
+ if (context->flavor != ATOMS_TREE_FLAVOR_MOV) {
+ return NULL;
+ }
+
+ ste = atom_trak_add_timecode_entry (trak, context, tc);
+
+ gmhd = atom_gmhd_new ();
+ gmhd->gmin.graphics_mode = 0x0040;
+ gmhd->gmin.opcolor[0] = 0x8000;
+ gmhd->gmin.opcolor[1] = 0x8000;
+ gmhd->gmin.opcolor[2] = 0x8000;
+ gmhd->tmcd.tcmi.text_size = 12;
+ gmhd->tmcd.tcmi.font_name = g_strdup ("Chicago"); /* Pascal string */
+
+ trak->mdia.minf.gmhd = gmhd;
+ trak->is_video = FALSE;
+ trak->is_h264 = FALSE;
+
+ return ste;
+}
+
static AtomInfo *
build_pasp_extension (gint par_width, gint par_height)
{
diff --git a/gst/isomp4/atoms.h b/gst/isomp4/atoms.h
index b105a4d..283d9cf 100644
--- a/gst/isomp4/atoms.h
+++ b/gst/isomp4/atoms.h
@@ -45,6 +45,7 @@
#include <glib.h>
#include <string.h>
+#include <gst/video/video.h>
#include "descriptors.h"
#include "properties.h"
@@ -281,6 +282,45 @@
guint32 sliding_avg_bitrate;
} AtomHMHD;
+typedef struct _AtomTCMI
+{
+ AtomFull header;
+
+ guint16 text_font;
+ guint16 text_face;
+ guint16 text_size;
+ guint16 text_color[3];
+ guint16 bg_color[3];
+ gchar *font_name;
+} AtomTCMI;
+
+typedef struct _AtomTMCD
+{
+ Atom header;
+
+ AtomTCMI tcmi;
+} AtomTMCD;
+
+typedef struct _AtomGMIN
+{
+ AtomFull header;
+
+ guint16 graphics_mode;
+ guint16 opcolor[3];
+ guint8 balance;
+ guint8 reserved;
+
+} AtomGMIN;
+
+typedef struct _AtomGMHD
+{
+ Atom header;
+
+ AtomGMIN gmin;
+ AtomTMCD tmcd;
+
+} AtomGMHD;
+
typedef struct _AtomURL
{
AtomFull header;
@@ -342,6 +382,7 @@
AUDIO,
VIDEO,
SUBTITLE,
+ TIMECODE
} SampleEntryKind;
typedef struct _SampleTableEntry
@@ -415,6 +456,27 @@
GList *extension_atoms;
} SampleTableEntryMP4A;
+typedef struct _AtomNAME
+{
+ Atom header;
+
+ guint8 language_code;
+ gchar *name;
+} AtomNAME;
+
+typedef struct _SampleTableEntryTMCD
+{
+ SampleTableEntry se;
+
+ guint32 tc_flags;
+ guint32 timescale;
+ guint32 frame_duration;
+ guint8 n_frames;
+
+ AtomNAME name;
+
+} SampleTableEntryTMCD;
+
typedef struct _SampleTableEntryTX3G
{
SampleTableEntry se;
@@ -463,6 +525,14 @@
ATOM_ARRAY (STSCEntry) entries;
} AtomSTSC;
+/* FIXME: this can support multiple tracks */
+typedef struct _AtomTREF
+{
+ Atom header;
+
+ guint32 reftype;
+ ATOM_ARRAY (guint32) entries;
+} AtomTREF;
/*
* used for both STCO and CO64
@@ -514,6 +584,7 @@
AtomVMHD *vmhd;
AtomSMHD *smhd;
AtomHMHD *hmhd;
+ AtomGMHD *gmhd;
AtomHDLR *hdlr;
AtomDINF dinf;
@@ -616,6 +687,15 @@
TF_DEFAULT_BASE_IS_MOOF = 0x020000 /* default-base-is-moof */
};
+/* Timecode flags */
+enum TcFlags
+{
+ TC_DROP_FRAME = 0x0001, /* Drop-frame timecode */
+ TC_24H_MAX = 0x0002, /* Whether the timecode wraps after 24 hours */
+ TC_NEGATIVE_OK = 0x0004, /* Whether negative time values are OK */
+ TC_COUNTER = 0x0008 /* Whether the time value corresponds to a tape counter value */
+};
+
typedef struct _AtomTRAK
{
Atom header;
@@ -624,6 +704,7 @@
AtomEDTS *edts;
AtomMDIA mdia;
AtomUDTA udta;
+ AtomTREF *tref;
/* some helper info for structural conformity checks */
gboolean is_video;
@@ -937,6 +1018,9 @@
SampleTableEntryTX3G * atom_trak_set_subtitle_type (AtomTRAK * trak, AtomsContext * context,
SubtitleSampleEntry * entry);
+SampleTableEntryTMCD *
+atom_trak_set_timecode_type (AtomTRAK * trak, AtomsContext * context, GstVideoTimeCode * tc);
+
void atom_trak_update_bitrates (AtomTRAK * trak, guint32 avg_bitrate,
guint32 max_bitrate);
@@ -997,6 +1081,9 @@
void atom_udta_add_xmp_tags (AtomUDTA *udta, GstBuffer * xmp);
+AtomTREF * atom_tref_new (guint32 reftype);
+void atom_tref_add_entry (AtomTREF * tref, guint32 sample);
+
#define GST_QT_MUX_DEFAULT_TAG_LANGUAGE "und" /* undefined/unknown */
guint16 language_code (const char * lang);
diff --git a/gst/isomp4/fourcc.h b/gst/isomp4/fourcc.h
index 5bb43e9..9e7408b 100644
--- a/gst/isomp4/fourcc.h
+++ b/gst/isomp4/fourcc.h
@@ -215,7 +215,9 @@
#define FOURCC_subp GST_MAKE_FOURCC('s','u','b','p')
#define FOURCC_subt GST_MAKE_FOURCC('s','u','b','t')
#define FOURCC_text GST_MAKE_FOURCC('t','e','x','t')
+#define FOURCC_tcmi GST_MAKE_FOURCC('t','c','m','i')
#define FOURCC_tkhd GST_MAKE_FOURCC('t','k','h','d')
+#define FOURCC_tmcd GST_MAKE_FOURCC('t','m','c','d')
#define FOURCC_tmpo GST_MAKE_FOURCC('t','m','p','o')
#define FOURCC_trak GST_MAKE_FOURCC('t','r','a','k')
#define FOURCC_tref GST_MAKE_FOURCC('t','r','e','f')
diff --git a/gst/isomp4/gstqtmux.c b/gst/isomp4/gstqtmux.c
index 5cabb8f..cf6633d 100644
--- a/gst/isomp4/gstqtmux.c
+++ b/gst/isomp4/gstqtmux.c
@@ -504,6 +504,7 @@
qtpad->total_duration = 0;
qtpad->total_bytes = 0;
qtpad->sparse = FALSE;
+ qtpad->tc_trak = NULL;
qtpad->buf_head = 0;
qtpad->buf_tail = 0;
@@ -604,6 +605,8 @@
qtmux->last_moov_update = GST_CLOCK_TIME_NONE;
qtmux->muxed_since_last_update = 0;
qtmux->reserved_duration_remaining = GST_CLOCK_TIME_NONE;
+ qtmux->first_pts = GST_CLOCK_TIME_NONE;
+ qtmux->tc_pos = -1;
}
static void
@@ -2498,6 +2501,10 @@
duration += lateness;
qtpad->trak->tkhd.duration = duration;
+ if (qtpad->tc_trak) {
+ qtpad->tc_trak->tkhd.duration = duration;
+ qtpad->tc_trak->mdia.mdhd.time_info.duration = duration;
+ }
/* And possibly grow the moov duration */
if (duration > qtmux->moov->mvhd.time_info.duration) {
@@ -2509,6 +2516,33 @@
}
static GstFlowReturn
+gst_qt_mux_update_timecode (GstQTMux * qtmux)
+{
+ GstSegment segment;
+ GstBuffer *buf;
+ GstMapInfo map;
+ guint64 offset = qtmux->tc_pos;
+
+ g_assert (qtmux->tc_pos != -1);
+
+ gst_segment_init (&segment, GST_FORMAT_BYTES);
+ segment.start = offset;
+ gst_pad_push_event (qtmux->srcpad, gst_event_new_segment (&segment));
+
+ buf = gst_buffer_new_and_alloc (4);
+ gst_buffer_map (buf, &map, GST_MAP_WRITE);
+
+ GST_WRITE_UINT32_BE (map.data,
+ gst_video_time_code_frames_since_daily_jam (qtmux->first_tc));
+ gst_buffer_unmap (buf, &map);
+
+ /* Reset this value, so the timecode won't be re-rewritten */
+ qtmux->tc_pos = -1;
+
+ return gst_qt_mux_send_buffer (qtmux, buf, &offset, FALSE);
+}
+
+static GstFlowReturn
gst_qt_mux_stop_file (GstQTMux * qtmux)
{
gboolean ret = GST_FLOW_OK;
@@ -2528,6 +2562,13 @@
}
gst_qt_mux_update_global_statistics (qtmux);
+ if (qtmux->tc_pos != -1) {
+ /* File is being stopped and timecode hasn't been updated. Update it now
+ * with whatever we have */
+ ret = gst_qt_mux_update_timecode (qtmux);
+ if (ret != GST_FLOW_OK)
+ return ret;
+ }
switch (qtmux->mux_mode) {
case GST_QT_MUX_MODE_FRAGMENTED:{
@@ -2979,6 +3020,84 @@
return ret;
}
+static GstFlowReturn
+gst_qt_mux_check_and_update_timecode (GstQTMux * qtmux, GstQTPad * pad,
+ GstBuffer * buf, GstFlowReturn ret)
+{
+ if (buf != NULL && (pad->tc_trak == NULL || qtmux->tc_pos != -1)) {
+ GstVideoTimeCodeMeta *tc_meta = gst_buffer_get_video_time_code_meta (buf);
+ if (tc_meta) {
+ GstVideoTimeCode *tc = &tc_meta->tc;
+ GstBuffer *tc_buf;
+ gsize szret;
+ guint32 frames_since_daily_jam;
+
+ /* This means we never got a timecode before */
+ if (qtmux->first_tc == NULL) {
+#ifndef GST_DISABLE_GST_DEBUG
+ gchar *tc_str = gst_video_time_code_to_string (tc);
+ GST_DEBUG_OBJECT (qtmux, "Found first timecode %s", tc_str);
+ g_free (tc_str);
+#endif
+ g_assert (pad->tc_trak == NULL);
+ tc_buf = gst_buffer_new_allocate (NULL, 4, NULL);
+ qtmux->first_tc = gst_video_time_code_copy (tc);
+ /* If frames are out of order, the frame we're currently getting might
+ * not be the first one. Just write a 0 timecode for now and wait
+ * until we receive a timecode that's lower than the current one */
+ if (pad->is_out_of_order) {
+ qtmux->first_pts = GST_BUFFER_PTS (buf);
+ frames_since_daily_jam = 0;
+ /* Position to rewrite */
+ qtmux->tc_pos = qtmux->mdat_size;
+ } else {
+ frames_since_daily_jam =
+ gst_video_time_code_frames_since_daily_jam (qtmux->first_tc);
+ frames_since_daily_jam = GUINT32_TO_BE (frames_since_daily_jam);
+ }
+ /* Write the timecode trak now */
+ pad->tc_trak = atom_trak_new (qtmux->context);
+ atom_moov_add_trak (qtmux->moov, pad->tc_trak);
+
+ pad->trak->tref = atom_tref_new (FOURCC_tmcd);
+ atom_tref_add_entry (pad->trak->tref, pad->tc_trak->tkhd.track_ID);
+
+ atom_trak_set_timecode_type (pad->tc_trak, qtmux->context,
+ qtmux->first_tc);
+
+ szret = gst_buffer_fill (tc_buf, 0, &frames_since_daily_jam, 4);
+ g_assert (szret == 4);
+
+ atom_trak_add_samples (pad->tc_trak, 1, 1, 4, qtmux->mdat_size, FALSE,
+ 0);
+ ret = gst_qt_mux_send_buffer (qtmux, tc_buf, &qtmux->mdat_size, TRUE);
+ } else if (pad->is_out_of_order) {
+ /* Check for a lower timecode than the one stored */
+ g_assert (pad->tc_trak != NULL);
+ if (GST_BUFFER_DTS (buf) <= qtmux->first_pts) {
+ if (gst_video_time_code_compare (tc, qtmux->first_tc) == -1) {
+ gst_video_time_code_free (qtmux->first_tc);
+ qtmux->first_tc = gst_video_time_code_copy (tc);
+ }
+ } else {
+ guint64 bk_size = qtmux->mdat_size;
+ GstSegment segment;
+ /* If this frame's DTS is after the first PTS received, it means
+ * we've already received the first frame to be presented. Otherwise
+ * the decoder would need to go back in time */
+ gst_qt_mux_update_timecode (qtmux);
+
+ /* Reset writing position */
+ gst_segment_init (&segment, GST_FORMAT_BYTES);
+ segment.start = bk_size;
+ gst_pad_push_event (qtmux->srcpad, gst_event_new_segment (&segment));
+ }
+ }
+ }
+ }
+ return ret;
+}
+
/*
* Here we push the buffer and update the tables in the track atoms
*/
@@ -3025,6 +3144,8 @@
}
}
+ ret = gst_qt_mux_check_and_update_timecode (qtmux, pad, buf, ret);
+
if (last_buf && !buf && !GST_BUFFER_DURATION_IS_VALID (last_buf)) {
/* this is last buffer; there is no next buffer so we need valid number as duration */
last_buf = gst_buffer_make_writable (last_buf);
@@ -4567,6 +4688,8 @@
case GST_STATE_CHANGE_READY_TO_PAUSED:
gst_collect_pads_start (qtmux->collect);
qtmux->state = GST_QT_MUX_STATE_STARTED;
+ qtmux->first_tc = NULL;
+ qtmux->tc_pos = -1;
break;
case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
break;
diff --git a/gst/isomp4/gstqtmux.h b/gst/isomp4/gstqtmux.h
index 81a23fa..5fd7df9 100644
--- a/gst/isomp4/gstqtmux.h
+++ b/gst/isomp4/gstqtmux.h
@@ -123,6 +123,7 @@
/* all the atom and chunk book-keeping is delegated here
* unowned/uncounted reference, parent MOOV owns */
AtomTRAK *trak;
+ AtomTRAK *tc_trak;
SampleTableEntry *trak_ste;
/* fragmented support */
/* meta data book-keeping delegated here */
@@ -205,6 +206,10 @@
/* Set when tags are received, cleared when written to moov */
gboolean tags_changed;
+ /* SMPTE timecode */
+ GstVideoTimeCode *first_tc;
+ GstClockTime first_pts;
+ guint64 tc_pos;
/* fragmented file index */
AtomMFRA *mfra;
diff --git a/gst/isomp4/qtdemux.c b/gst/isomp4/qtdemux.c
index be9b4e7..9768cc9 100644
--- a/gst/isomp4/qtdemux.c
+++ b/gst/isomp4/qtdemux.c
@@ -1719,11 +1719,6 @@
}
gst_event_unref (event);
break;
- case GST_EVENT_QOS:
- case GST_EVENT_NAVIGATION:
- res = FALSE;
- gst_event_unref (event);
- break;
default:
upstream:
res = gst_pad_event_default (pad, parent, event);
@@ -5771,8 +5766,7 @@
gst_qtdemux_push_event (qtdemux, event);
}
} else if (ret == GST_FLOW_NOT_LINKED || ret < GST_FLOW_EOS) {
- GST_ELEMENT_ERROR (qtdemux, STREAM, FAILED,
- (NULL), ("streaming stopped, reason %s", reason));
+ GST_ELEMENT_FLOW_ERROR (qtdemux, ret);
gst_qtdemux_push_event (qtdemux, gst_event_new_eos ());
}
goto done;
@@ -6095,6 +6089,7 @@
/* Reset state if it's a real discont */
demux->neededbytes = 16;
demux->state = QTDEMUX_STATE_INITIAL;
+ demux->offset = GST_BUFFER_OFFSET (inbuf);
}
}
/* Reverse fragmented playback, need to flush all we have before
@@ -12693,11 +12688,11 @@
profile_str = "main";
profile = 0;
break;
- case 67:
+ case 0x67:
profile_str = "lc";
profile = 1;
break;
- case 68:
+ case 0x68:
profile_str = "ssr";
profile = 2;
break;
diff --git a/gst/law/Makefile.in b/gst/law/Makefile.in
index 310f2fa..d7a6cc6 100644
--- a/gst/law/Makefile.in
+++ b/gst/law/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -352,6 +353,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -458,6 +460,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -525,6 +530,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/level/Makefile.in b/gst/level/Makefile.in
index 6d1908d..f619003 100644
--- a/gst/level/Makefile.in
+++ b/gst/level/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -341,6 +342,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -447,6 +449,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -514,6 +519,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/matroska/Makefile.in b/gst/matroska/Makefile.in
index 3e526c9..3a1382c 100644
--- a/gst/matroska/Makefile.in
+++ b/gst/matroska/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -350,6 +351,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -456,6 +458,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -523,6 +528,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/matroska/matroska-demux.c b/gst/matroska/matroska-demux.c
index ccfa04d..bceda52 100644
--- a/gst/matroska/matroska-demux.c
+++ b/gst/matroska/matroska-demux.c
@@ -4756,8 +4756,7 @@
}
} else if (ret == GST_FLOW_NOT_LINKED || ret < GST_FLOW_EOS) {
/* for fatal errors we post an error message */
- GST_ELEMENT_ERROR (demux, STREAM, FAILED, (NULL),
- ("stream stopped, reason %s", reason));
+ GST_ELEMENT_FLOW_ERROR (demux, ret);
push_eos = TRUE;
}
if (push_eos) {
diff --git a/gst/matroska/matroska-mux.c b/gst/matroska/matroska-mux.c
index 9f28024..4922496 100644
--- a/gst/matroska/matroska-mux.c
+++ b/gst/matroska/matroska-mux.c
@@ -1216,7 +1216,8 @@
} else if (!strcmp (mimetype, "video/x-msmpeg")) {
msmpeg43:
/* can only make it here if preceding case verified it was version 3 */
- context->codec_id = g_strdup (GST_MATROSKA_CODEC_ID_VIDEO_MSMPEG4V3);
+ gst_matroska_mux_set_codec_id (context,
+ GST_MATROSKA_CODEC_ID_VIDEO_MSMPEG4V3);
} else if (!strcmp (mimetype, "video/x-pn-realvideo")) {
gint rmversion;
const GValue *mdpr_data;
@@ -1854,7 +1855,8 @@
}
if (buf) {
- context->codec_id = g_strdup (GST_MATROSKA_CODEC_ID_AUDIO_AAC);
+ gst_matroska_mux_set_codec_id (context,
+ GST_MATROSKA_CODEC_ID_AUDIO_AAC);
context->codec_priv_size = gst_buffer_get_size (buf);
context->codec_priv = g_malloc (context->codec_priv_size);
gst_buffer_extract (buf, 0, context->codec_priv,
@@ -2290,7 +2292,7 @@
GstMatroskaTrackContext *context = NULL;
gint pad_id;
gboolean locked = TRUE;
- gchar *id = NULL;
+ const gchar *id = NULL;
if (templ == gst_element_class_get_pad_template (klass, "audio_%u")) {
/* don't mix named and unnamed pads, if the pad already exists we fail when
@@ -2335,7 +2337,7 @@
context->type = GST_MATROSKA_TRACK_TYPE_SUBTITLE;
context->name = g_strdup ("Subtitle");
/* setcaps may only provide proper one a lot later */
- id = g_strdup ("S_SUB_UNKNOWN");
+ id = "S_SUB_UNKNOWN";
locked = FALSE;
} else {
GST_WARNING_OBJECT (mux, "This is not our template!");
@@ -2354,7 +2356,8 @@
collect_pad->mux = mux;
collect_pad->track = context;
gst_matroska_pad_reset (collect_pad, FALSE);
- collect_pad->track->codec_id = id;
+ if (id)
+ gst_matroska_mux_set_codec_id (collect_pad->track, id);
collect_pad->track->dts_only = FALSE;
collect_pad->capsfunc = capsfunc;
@@ -2872,22 +2875,21 @@
for (collected = mux->collect->data; collected;
collected = g_slist_next (collected)) {
GstMatroskaPad *collect_pad;
- GstPad *thepad;
collect_pad = (GstMatroskaPad *) collected->data;
- thepad = collect_pad->collect.pad;
- if (gst_pad_is_linked (thepad) && gst_pad_is_active (thepad) &&
- collect_pad->track->codec_id != 0) {
- collect_pad->track->num = tracknum++;
- child = gst_ebml_write_master_start (ebml, GST_MATROSKA_ID_TRACKENTRY);
- gst_matroska_mux_track_header (mux, collect_pad->track);
- gst_ebml_write_master_finish (ebml, child);
- /* some remaining pad/track setup */
- collect_pad->default_duration_scaled =
- gst_util_uint64_scale (collect_pad->track->default_duration,
- 1, mux->time_scale);
- }
+ /* This will cause an error at a later time */
+ if (collect_pad->track->codec_id == NULL)
+ continue;
+
+ collect_pad->track->num = tracknum++;
+ child = gst_ebml_write_master_start (ebml, GST_MATROSKA_ID_TRACKENTRY);
+ gst_matroska_mux_track_header (mux, collect_pad->track);
+ gst_ebml_write_master_finish (ebml, child);
+ /* some remaining pad/track setup */
+ collect_pad->default_duration_scaled =
+ gst_util_uint64_scale (collect_pad->track->default_duration,
+ 1, mux->time_scale);
}
gst_ebml_write_master_finish (ebml, master);
@@ -3541,12 +3543,11 @@
}
/* for dirac we have to queue up everything up to a picture unit */
- if (!g_strcmp0 (collect_pad->track->codec_id,
- GST_MATROSKA_CODEC_ID_VIDEO_DIRAC)) {
+ if (!strcmp (collect_pad->track->codec_id, GST_MATROSKA_CODEC_ID_VIDEO_DIRAC)) {
buf = gst_matroska_mux_handle_dirac_packet (mux, collect_pad, buf);
if (!buf)
return GST_FLOW_OK;
- } else if (!g_strcmp0 (collect_pad->track->codec_id,
+ } else if (!strcmp (collect_pad->track->codec_id,
GST_MATROSKA_CODEC_ID_VIDEO_PRORES)) {
/* Remove the 'Frame container atom' header' */
buf = gst_buffer_make_writable (buf);
@@ -3817,6 +3818,12 @@
goto exit;
}
+ if (best->track->codec_id == NULL) {
+ GST_ERROR_OBJECT (best->collect.pad, "No codec-id for pad");
+ ret = GST_FLOW_NOT_NEGOTIATED;
+ goto exit;
+ }
+
/* if we have a best stream, should also have a buffer */
g_assert (buf);
diff --git a/gst/matroska/matroska-parse.c b/gst/matroska/matroska-parse.c
index cc064b0..97c57e7 100644
--- a/gst/matroska/matroska-parse.c
+++ b/gst/matroska/matroska-parse.c
@@ -2920,8 +2920,7 @@
}
} else if (ret == GST_FLOW_NOT_LINKED || ret < GST_FLOW_EOS) {
/* for fatal errors we post an error message */
- GST_ELEMENT_ERROR (parse, STREAM, FAILED, (NULL),
- ("stream stopped, reason %s", reason));
+ GST_ELEMENT_FLOW_ERROR (parse, ret);
push_eos = TRUE;
}
if (push_eos) {
diff --git a/gst/monoscope/Makefile.in b/gst/monoscope/Makefile.in
index 28a2bff..efa790b 100644
--- a/gst/monoscope/Makefile.in
+++ b/gst/monoscope/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -342,6 +343,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -448,6 +450,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -515,6 +520,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/multifile/Makefile.in b/gst/multifile/Makefile.in
index 6fb713f..80583fc 100644
--- a/gst/multifile/Makefile.in
+++ b/gst/multifile/Makefile.in
@@ -101,6 +101,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -371,6 +372,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -477,6 +479,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -544,6 +549,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/multifile/gstsplitmuxsink.c b/gst/multifile/gstsplitmuxsink.c
index 88fdce0..585b1ff 100644
--- a/gst/multifile/gstsplitmuxsink.c
+++ b/gst/multifile/gstsplitmuxsink.c
@@ -55,6 +55,7 @@
#include <string.h>
#include <glib/gstdio.h>
+#include <gst/video/video.h>
#include "gstsplitmuxsink.h"
GST_DEBUG_CATEGORY_STATIC (splitmux_debug);
@@ -71,6 +72,7 @@
PROP_LOCATION,
PROP_MAX_SIZE_TIME,
PROP_MAX_SIZE_BYTES,
+ PROP_SEND_KEYFRAME_REQUESTS,
PROP_MAX_FILES,
PROP_MUXER_OVERHEAD,
PROP_MUXER,
@@ -81,6 +83,7 @@
#define DEFAULT_MAX_SIZE_BYTES 0
#define DEFAULT_MAX_FILES 0
#define DEFAULT_MUXER_OVERHEAD 0.02
+#define DEFAULT_SEND_KEYFRAME_REQUESTS FALSE
#define DEFAULT_MUXER "mp4mux"
#define DEFAULT_SINK "filesink"
@@ -207,11 +210,18 @@
g_param_spec_uint64 ("max-size-bytes", "Max. size bytes",
"Max. amount of data per file (in bytes, 0=disable)", 0, G_MAXUINT64,
DEFAULT_MAX_SIZE_BYTES, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (gobject_class, PROP_SEND_KEYFRAME_REQUESTS,
+ g_param_spec_boolean ("send-keyframe-requests",
+ "Request keyframes at max-size-time",
+ "Request a keyframe every max-size-time ns to try splitting at that point. "
+ "Needs max-size-bytes to be 0 in order to be effective.",
+ DEFAULT_SEND_KEYFRAME_REQUESTS,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property (gobject_class, PROP_MAX_FILES,
g_param_spec_uint ("max-files", "Max files",
"Maximum number of files to keep on disk. Once the maximum is reached,"
- "old files start to be deleted to make room for new ones.",
- 0, G_MAXUINT, DEFAULT_MAX_FILES,
+ "old files start to be deleted to make room for new ones.", 0,
+ G_MAXUINT, DEFAULT_MAX_FILES,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
@@ -246,9 +256,9 @@
splitmux->threshold_time = DEFAULT_MAX_SIZE_TIME;
splitmux->threshold_bytes = DEFAULT_MAX_SIZE_BYTES;
splitmux->max_files = DEFAULT_MAX_FILES;
+ splitmux->send_keyframe_requests = DEFAULT_SEND_KEYFRAME_REQUESTS;
GST_OBJECT_FLAG_SET (splitmux, GST_ELEMENT_FLAG_SINK);
- g_object_set (splitmux, "async-handling", TRUE, NULL);
}
static void
@@ -321,6 +331,11 @@
splitmux->threshold_time = g_value_get_uint64 (value);
GST_OBJECT_UNLOCK (splitmux);
break;
+ case PROP_SEND_KEYFRAME_REQUESTS:
+ GST_OBJECT_LOCK (splitmux);
+ splitmux->send_keyframe_requests = g_value_get_boolean (value);
+ GST_OBJECT_UNLOCK (splitmux);
+ break;
case PROP_MAX_FILES:
GST_OBJECT_LOCK (splitmux);
splitmux->max_files = g_value_get_uint (value);
@@ -373,6 +388,11 @@
g_value_set_uint64 (value, splitmux->threshold_time);
GST_OBJECT_UNLOCK (splitmux);
break;
+ case PROP_SEND_KEYFRAME_REQUESTS:
+ GST_OBJECT_LOCK (splitmux);
+ g_value_set_boolean (value, splitmux->send_keyframe_requests);
+ GST_OBJECT_UNLOCK (splitmux);
+ break;
case PROP_MAX_FILES:
GST_OBJECT_LOCK (splitmux);
g_value_set_uint (value, splitmux->max_files);
@@ -399,6 +419,23 @@
}
}
+/* Convenience function */
+static inline GstClockTimeDiff
+my_segment_to_running_time (GstSegment * segment, GstClockTime val)
+{
+ GstClockTimeDiff res = GST_CLOCK_STIME_NONE;
+
+ if (GST_CLOCK_TIME_IS_VALID (val)) {
+ gboolean sign =
+ gst_segment_to_running_time_full (segment, GST_FORMAT_TIME, val, &val);
+ if (sign > 0)
+ res = val;
+ else if (sign < 0)
+ res = -val;
+ }
+ return res;
+}
+
static GstPad *
mq_sink_to_src (GstElement * mq, GstPad * sink_pad)
{
@@ -454,7 +491,7 @@
ctx->splitmux = splitmux;
gst_segment_init (&ctx->in_segment, GST_FORMAT_UNDEFINED);
gst_segment_init (&ctx->out_segment, GST_FORMAT_UNDEFINED);
- ctx->in_running_time = ctx->out_running_time = 0;
+ ctx->in_running_time = ctx->out_running_time = GST_CLOCK_STIME_NONE;
g_queue_init (&ctx->queued_bufs);
return ctx;
}
@@ -546,11 +583,11 @@
do {
GST_LOG_OBJECT (ctx->srcpad,
- "Checking running time %" GST_TIME_FORMAT " against max %"
- GST_TIME_FORMAT, GST_TIME_ARGS (ctx->out_running_time),
- GST_TIME_ARGS (splitmux->max_out_running_time));
+ "Checking running time %" GST_STIME_FORMAT " against max %"
+ GST_STIME_FORMAT, GST_STIME_ARGS (ctx->out_running_time),
+ GST_STIME_ARGS (splitmux->max_out_running_time));
- if (splitmux->max_out_running_time == GST_CLOCK_TIME_NONE ||
+ if (splitmux->max_out_running_time == GST_CLOCK_STIME_NONE ||
ctx->out_running_time < splitmux->max_out_running_time) {
splitmux->have_muxed_something = TRUE;
return;
@@ -571,20 +608,36 @@
GST_INFO_OBJECT (ctx->srcpad,
"Sleeping for running time %"
- GST_TIME_FORMAT " (max %" GST_TIME_FORMAT ")",
- GST_TIME_ARGS (ctx->out_running_time),
- GST_TIME_ARGS (splitmux->max_out_running_time));
+ GST_STIME_FORMAT " (max %" GST_STIME_FORMAT ")",
+ GST_STIME_ARGS (ctx->out_running_time),
+ GST_STIME_ARGS (splitmux->max_out_running_time));
ctx->out_blocked = TRUE;
/* Expand the mq if needed before sleeping */
check_queue_length (splitmux, ctx);
GST_SPLITMUX_WAIT (splitmux);
ctx->out_blocked = FALSE;
GST_INFO_OBJECT (ctx->srcpad,
- "Woken for new max running time %" GST_TIME_FORMAT,
- GST_TIME_ARGS (splitmux->max_out_running_time));
+ "Woken for new max running time %" GST_STIME_FORMAT,
+ GST_STIME_ARGS (splitmux->max_out_running_time));
} while (1);
}
+static gboolean
+request_next_keyframe (GstSplitMuxSink * splitmux)
+{
+ GstEvent *ev;
+
+ if (splitmux->send_keyframe_requests == FALSE || splitmux->threshold_time == 0
+ || splitmux->threshold_bytes != 0)
+ return TRUE;
+
+ ev = gst_video_event_new_upstream_force_key_unit (splitmux->fragment_id *
+ splitmux->threshold_time, TRUE, 0);
+ GST_DEBUG_OBJECT (splitmux, "Requesting next keyframe at %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (splitmux->fragment_id * splitmux->threshold_time));
+ return gst_pad_push_event (splitmux->reference_ctx->sinkpad, ev);
+}
+
static GstPadProbeReturn
handle_mq_output (GstPad * pad, GstPadProbeInfo * info, MqStreamCtx * ctx)
{
@@ -631,6 +684,7 @@
break;
case GST_EVENT_GAP:{
GstClockTime gap_ts;
+ GstClockTimeDiff rtime;
gst_event_parse_gap (event, &gap_ts, NULL);
if (gap_ts == GST_CLOCK_TIME_NONE)
@@ -638,28 +692,30 @@
GST_SPLITMUX_LOCK (splitmux);
- gap_ts = gst_segment_to_running_time (&ctx->out_segment,
- GST_FORMAT_TIME, gap_ts);
+ rtime = my_segment_to_running_time (&ctx->out_segment, gap_ts);
- GST_LOG_OBJECT (pad, "Have GAP w/ ts %" GST_TIME_FORMAT,
- GST_TIME_ARGS (gap_ts));
+ GST_LOG_OBJECT (pad, "Have GAP w/ ts %" GST_STIME_FORMAT,
+ GST_STIME_ARGS (rtime));
if (splitmux->state == SPLITMUX_STATE_STOPPED)
goto beach;
- ctx->out_running_time = gap_ts;
- complete_or_wait_on_out (splitmux, ctx);
+
+ if (rtime != GST_CLOCK_STIME_NONE) {
+ ctx->out_running_time = rtime;
+ complete_or_wait_on_out (splitmux, ctx);
+ }
GST_SPLITMUX_UNLOCK (splitmux);
break;
}
case GST_EVENT_CUSTOM_DOWNSTREAM:{
const GstStructure *s;
- GstClockTime ts = 0;
+ GstClockTimeDiff ts = 0;
s = gst_event_get_structure (event);
if (!gst_structure_has_name (s, "splitmuxsink-unblock"))
break;
- gst_structure_get_uint64 (s, "timestamp", &ts);
+ gst_structure_get_int64 (s, "timestamp", &ts);
GST_SPLITMUX_LOCK (splitmux);
@@ -691,29 +747,33 @@
ctx->out_running_time = buf_info->run_ts;
GST_LOG_OBJECT (splitmux,
- "Pad %" GST_PTR_FORMAT " buffer with TS %" GST_TIME_FORMAT
- " size %" G_GSIZE_FORMAT,
- pad, GST_TIME_ARGS (ctx->out_running_time), buf_info->buf_size);
+ "Pad %" GST_PTR_FORMAT " buffer with run TS %" GST_STIME_FORMAT
+ " size %" G_GUINT64_FORMAT,
+ pad, GST_STIME_ARGS (ctx->out_running_time), buf_info->buf_size);
if (splitmux->opening_first_fragment) {
+ if (request_next_keyframe (splitmux) == FALSE)
+ GST_WARNING_OBJECT (splitmux,
+ "Could not request a keyframe. Files may not split at the exact location they should");
send_fragment_opened_closed_msg (splitmux, TRUE);
splitmux->opening_first_fragment = FALSE;
}
complete_or_wait_on_out (splitmux, ctx);
- if (splitmux->muxed_out_time == GST_CLOCK_TIME_NONE ||
+ if (splitmux->muxed_out_time == GST_CLOCK_STIME_NONE ||
splitmux->muxed_out_time < buf_info->run_ts)
splitmux->muxed_out_time = buf_info->run_ts;
splitmux->muxed_out_bytes += buf_info->buf_size;
+ splitmux->last_frame_duration = buf_info->duration;
#ifndef GST_DISABLE_GST_DEBUG
{
GstBuffer *buf = gst_pad_probe_info_get_buffer (info);
GST_LOG_OBJECT (pad, "Returning to pass buffer %" GST_PTR_FORMAT
- " run ts %" GST_TIME_FORMAT, buf,
- GST_TIME_ARGS (ctx->out_running_time));
+ " run ts %" GST_STIME_FORMAT, buf,
+ GST_STIME_ARGS (ctx->out_running_time));
}
#endif
@@ -756,6 +816,8 @@
start_next_fragment (GstSplitMuxSink * splitmux)
{
/* 1 change to new file */
+ splitmux->switching_fragment = TRUE;
+
gst_element_set_locked_state (splitmux->muxer, TRUE);
gst_element_set_locked_state (splitmux->active_sink, TRUE);
gst_element_set_state (splitmux->muxer, GST_STATE_NULL);
@@ -768,6 +830,8 @@
gst_element_set_locked_state (splitmux->muxer, FALSE);
gst_element_set_locked_state (splitmux->active_sink, FALSE);
+ splitmux->switching_fragment = FALSE;
+
g_list_foreach (splitmux->contexts, (GFunc) restart_context, splitmux);
/* Switch state and go back to processing */
@@ -776,7 +840,7 @@
splitmux->max_out_running_time = splitmux->reference_ctx->in_running_time;
} else {
splitmux->state = SPLITMUX_STATE_WAITING_GOP_COMPLETE;
- splitmux->max_out_running_time = GST_CLOCK_TIME_NONE;
+ splitmux->max_out_running_time = GST_CLOCK_STIME_NONE;
splitmux->have_muxed_something = FALSE;
}
splitmux->have_muxed_something =
@@ -784,13 +848,18 @@
/* Store the overflow parameters as the basis for the next fragment */
splitmux->mux_start_time = splitmux->muxed_out_time;
+ if (splitmux->last_frame_duration != GST_CLOCK_STIME_NONE)
+ splitmux->mux_start_time += splitmux->last_frame_duration;
splitmux->mux_start_bytes = splitmux->muxed_out_bytes;
GST_DEBUG_OBJECT (splitmux,
- "Restarting flow for new fragment. New running time %" GST_TIME_FORMAT,
- GST_TIME_ARGS (splitmux->max_out_running_time));
+ "Restarting flow for new fragment. New running time %" GST_STIME_FORMAT,
+ GST_STIME_ARGS (splitmux->max_out_running_time));
send_fragment_opened_closed_msg (splitmux, TRUE);
+ if (request_next_keyframe (splitmux) == FALSE)
+ GST_WARNING_OBJECT (splitmux,
+ "Could not request a keyframe. Files may not split at the exact location they should");
GST_SPLITMUX_BROADCAST (splitmux);
}
@@ -808,7 +877,7 @@
send_fragment_opened_closed_msg (splitmux, FALSE);
if (splitmux->state == SPLITMUX_STATE_ENDING_FILE &&
- splitmux->max_out_running_time != GST_CLOCK_TIME_NONE) {
+ splitmux->max_out_running_time != GST_CLOCK_STIME_NONE) {
GST_DEBUG_OBJECT (splitmux, "Caught EOS at end of fragment, dropping");
splitmux->state = SPLITMUX_STATE_START_NEXT_FRAGMENT;
GST_SPLITMUX_BROADCAST (splitmux);
@@ -819,6 +888,20 @@
}
GST_SPLITMUX_UNLOCK (splitmux);
break;
+ case GST_MESSAGE_ASYNC_START:
+ case GST_MESSAGE_ASYNC_DONE:
+ /* Ignore state changes from our children while switching */
+ if (splitmux->switching_fragment) {
+ if (GST_MESSAGE_SRC (message) == (GstObject *) splitmux->active_sink ||
+ GST_MESSAGE_SRC (message) == (GstObject *) splitmux->muxer) {
+ GST_LOG_OBJECT (splitmux,
+ "Ignoring state change from child %" GST_PTR_FORMAT
+ " while switching", GST_MESSAGE_SRC (message));
+ gst_message_unref (message);
+ return;
+ }
+ }
+ break;
default:
break;
}
@@ -837,8 +920,8 @@
handle_gathered_gop (GstSplitMuxSink * splitmux)
{
GList *cur;
- gsize queued_bytes = 0;
- GstClockTime queued_time = 0;
+ guint64 queued_bytes = 0;
+ GstClockTimeDiff queued_time = 0;
/* Assess if the multiqueue contents overflowed the current file */
for (cur = g_list_first (splitmux->contexts);
@@ -849,6 +932,9 @@
queued_bytes += tmpctx->in_bytes;
}
+ GST_LOG_OBJECT (splitmux, " queued_bytes %" G_GUINT64_FORMAT
+ " splitmuxsink->mux_start_bytes %" G_GUINT64_FORMAT, queued_bytes,
+ splitmux->mux_start_bytes);
g_assert (queued_bytes >= splitmux->mux_start_bytes);
g_assert (queued_time >= splitmux->mux_start_time);
@@ -858,31 +944,30 @@
/* Expand queued bytes estimate by muxer overhead */
queued_bytes += (queued_bytes * splitmux->mux_overhead);
- GST_LOG_OBJECT (splitmux, "mq at TS %" GST_TIME_FORMAT
- " bytes %" G_GSIZE_FORMAT, GST_TIME_ARGS (queued_time), queued_bytes);
+ GST_LOG_OBJECT (splitmux, "mq at TS %" GST_STIME_FORMAT
+ " bytes %" G_GUINT64_FORMAT, GST_STIME_ARGS (queued_time), queued_bytes);
/* Check for overrun - have we output at least one byte and overrun
* either threshold? */
if ((splitmux->have_muxed_something &&
((splitmux->threshold_bytes > 0 &&
- queued_bytes >= splitmux->threshold_bytes) ||
+ queued_bytes > splitmux->threshold_bytes) ||
(splitmux->threshold_time > 0 &&
- queued_time >= splitmux->threshold_time)))) {
+ queued_time > splitmux->threshold_time)))) {
splitmux->state = SPLITMUX_STATE_ENDING_FILE;
-
GST_INFO_OBJECT (splitmux,
"mq overflowed since last, draining out. max out TS is %"
- GST_TIME_FORMAT, GST_TIME_ARGS (splitmux->max_out_running_time));
+ GST_STIME_FORMAT, GST_STIME_ARGS (splitmux->max_out_running_time));
GST_SPLITMUX_BROADCAST (splitmux);
} else {
/* No overflow */
GST_LOG_OBJECT (splitmux,
- "This GOP didn't overflow the fragment. Bytes sent %" G_GSIZE_FORMAT
- " queued %" G_GSIZE_FORMAT " time %" GST_TIME_FORMAT " Continuing.",
+ "This GOP didn't overflow the fragment. Bytes sent %" G_GUINT64_FORMAT
+ " queued %" G_GUINT64_FORMAT " time %" GST_STIME_FORMAT " Continuing.",
splitmux->muxed_out_bytes - splitmux->mux_start_bytes,
- queued_bytes, GST_TIME_ARGS (queued_time));
+ queued_bytes, GST_STIME_ARGS (queued_time));
/* Wake everyone up to push this one GOP, then sleep */
splitmux->have_muxed_something = TRUE;
@@ -892,11 +977,11 @@
splitmux->max_out_running_time = splitmux->reference_ctx->in_running_time;
} else {
splitmux->state = SPLITMUX_STATE_WAITING_GOP_COMPLETE;
- splitmux->max_out_running_time = GST_CLOCK_TIME_NONE;
+ splitmux->max_out_running_time = GST_CLOCK_STIME_NONE;
}
GST_LOG_OBJECT (splitmux, "Waking output for complete GOP, TS %"
- GST_TIME_FORMAT, GST_TIME_ARGS (splitmux->max_out_running_time));
+ GST_STIME_FORMAT, GST_STIME_ARGS (splitmux->max_out_running_time));
GST_SPLITMUX_BROADCAST (splitmux);
}
@@ -912,24 +997,24 @@
{
GList *cur;
gboolean ready = TRUE;
- GstClockTime current_max_in_running_time;
+ GstClockTimeDiff current_max_in_running_time;
if (splitmux->state == SPLITMUX_STATE_WAITING_GOP_COMPLETE) {
/* Iterate each pad, and check that the input running time is at least
* up to the reference running time, and if so handle the collected GOP */
GST_LOG_OBJECT (splitmux, "Checking GOP collected, Max in running time %"
- GST_TIME_FORMAT " ctx %p",
- GST_TIME_ARGS (splitmux->max_in_running_time), ctx);
+ GST_STIME_FORMAT " ctx %p",
+ GST_STIME_ARGS (splitmux->max_in_running_time), ctx);
for (cur = g_list_first (splitmux->contexts); cur != NULL;
cur = g_list_next (cur)) {
MqStreamCtx *tmpctx = (MqStreamCtx *) (cur->data);
GST_LOG_OBJECT (splitmux,
- "Context %p (src pad %" GST_PTR_FORMAT ") TS %" GST_TIME_FORMAT
+ "Context %p (src pad %" GST_PTR_FORMAT ") TS %" GST_STIME_FORMAT
" EOS %d", tmpctx, tmpctx->srcpad,
- GST_TIME_ARGS (tmpctx->in_running_time), tmpctx->in_eos);
+ GST_STIME_ARGS (tmpctx->in_running_time), tmpctx->in_eos);
- if (splitmux->max_in_running_time != GST_CLOCK_TIME_NONE &&
+ if (splitmux->max_in_running_time != G_MAXINT64 &&
tmpctx->in_running_time < splitmux->max_in_running_time &&
!tmpctx->in_eos) {
GST_LOG_OBJECT (splitmux,
@@ -1050,7 +1135,7 @@
gst_segment_init (&ctx->in_segment, GST_FORMAT_UNDEFINED);
ctx->in_eos = FALSE;
ctx->in_bytes = 0;
- ctx->in_running_time = 0;
+ ctx->in_running_time = GST_CLOCK_STIME_NONE;
GST_SPLITMUX_UNLOCK (splitmux);
break;
case GST_EVENT_EOS:
@@ -1063,7 +1148,7 @@
if (ctx->is_reference) {
GST_INFO_OBJECT (splitmux, "Got Reference EOS. Finishing up");
/* Act as if this is a new keyframe with infinite timestamp */
- splitmux->max_in_running_time = GST_CLOCK_TIME_NONE;
+ splitmux->max_in_running_time = G_MAXINT64;
splitmux->state = SPLITMUX_STATE_WAITING_GOP_COMPLETE;
/* Wake up other input pads to collect this GOP */
GST_SPLITMUX_BROADCAST (splitmux);
@@ -1091,6 +1176,8 @@
else
ts = GST_BUFFER_DTS (buf);
+ GST_LOG_OBJECT (pad, "Buffer TS is %" GST_TIME_FORMAT, GST_TIME_ARGS (ts));
+
GST_SPLITMUX_LOCK (splitmux);
if (splitmux->state == SPLITMUX_STATE_STOPPED)
@@ -1099,36 +1186,47 @@
/* If this buffer has a timestamp, advance the input timestamp of the
* stream */
if (GST_CLOCK_TIME_IS_VALID (ts)) {
- GstClockTime running_time =
- gst_segment_to_running_time (&ctx->in_segment, GST_FORMAT_TIME,
- GST_BUFFER_TIMESTAMP (buf));
+ GstClockTimeDiff running_time =
+ my_segment_to_running_time (&ctx->in_segment, ts);
- if (GST_CLOCK_TIME_IS_VALID (running_time) &&
- (ctx->in_running_time == GST_CLOCK_TIME_NONE
- || running_time > ctx->in_running_time))
+ GST_LOG_OBJECT (pad, "Buffer running TS is %" GST_STIME_FORMAT,
+ GST_STIME_ARGS (running_time));
+
+ if (GST_CLOCK_STIME_IS_VALID (running_time)
+ && running_time > ctx->in_running_time)
ctx->in_running_time = running_time;
}
/* Try to make sure we have a valid running time */
- if (!GST_CLOCK_TIME_IS_VALID (ctx->in_running_time)) {
+ if (!GST_CLOCK_STIME_IS_VALID (ctx->in_running_time)) {
ctx->in_running_time =
- gst_segment_to_running_time (&ctx->in_segment, GST_FORMAT_TIME,
- ctx->in_segment.start);
+ my_segment_to_running_time (&ctx->in_segment, ctx->in_segment.start);
}
+ GST_LOG_OBJECT (pad, "in running time now %" GST_STIME_FORMAT,
+ GST_STIME_ARGS (ctx->in_running_time));
+
buf_info->run_ts = ctx->in_running_time;
buf_info->buf_size = gst_buffer_get_size (buf);
+ buf_info->duration = GST_BUFFER_DURATION (buf);
/* Update total input byte counter for overflow detect */
ctx->in_bytes += buf_info->buf_size;
/* initialize mux_start_time */
- if (ctx->is_reference && splitmux->mux_start_time == 0)
+ if (ctx->is_reference && splitmux->mux_start_time == GST_CLOCK_STIME_NONE) {
splitmux->mux_start_time = buf_info->run_ts;
+ GST_LOG_OBJECT (splitmux, "Mux start time now %" GST_STIME_FORMAT,
+ GST_STIME_ARGS (splitmux->mux_start_time));
+ /* Also take this as the first start time when starting up,
+ * so that we start counting overflow from the first frame */
+ if (!GST_CLOCK_STIME_IS_VALID (splitmux->max_in_running_time))
+ splitmux->max_in_running_time = splitmux->mux_start_time;
+ }
- GST_DEBUG_OBJECT (pad, "Buf TS %" GST_TIME_FORMAT
- " total in_bytes %" G_GSIZE_FORMAT,
- GST_TIME_ARGS (buf_info->run_ts), ctx->in_bytes);
+ GST_DEBUG_OBJECT (pad, "Buf TS %" GST_STIME_FORMAT
+ " total in_bytes %" G_GUINT64_FORMAT,
+ GST_STIME_ARGS (buf_info->run_ts), ctx->in_bytes);
loop_again = TRUE;
do {
@@ -1140,15 +1238,15 @@
if (ctx->is_reference) {
/* If a keyframe, we have a complete GOP */
if (GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_DELTA_UNIT) ||
- !GST_CLOCK_TIME_IS_VALID (ctx->in_running_time) ||
+ !GST_CLOCK_STIME_IS_VALID (ctx->in_running_time) ||
splitmux->max_in_running_time >= ctx->in_running_time) {
/* Pass this buffer through */
loop_again = FALSE;
break;
}
GST_INFO_OBJECT (pad,
- "Have keyframe with running time %" GST_TIME_FORMAT,
- GST_TIME_ARGS (ctx->in_running_time));
+ "Have keyframe with running time %" GST_STIME_FORMAT,
+ GST_STIME_ARGS (ctx->in_running_time));
keyframe = TRUE;
splitmux->state = SPLITMUX_STATE_WAITING_GOP_COMPLETE;
splitmux->max_in_running_time = ctx->in_running_time;
@@ -1164,14 +1262,14 @@
}
break;
case SPLITMUX_STATE_WAITING_GOP_COMPLETE:
- /* After a GOP start is found, this buffer might complete the GOP */
+
/* If we overran the target timestamp, it might be time to process
* the GOP, otherwise bail out for more data
*/
GST_LOG_OBJECT (pad,
- "Checking TS %" GST_TIME_FORMAT " against max %" GST_TIME_FORMAT,
- GST_TIME_ARGS (ctx->in_running_time),
- GST_TIME_ARGS (splitmux->max_in_running_time));
+ "Checking TS %" GST_STIME_FORMAT " against max %" GST_STIME_FORMAT,
+ GST_STIME_ARGS (ctx->in_running_time),
+ GST_STIME_ARGS (splitmux->max_in_running_time));
if (ctx->in_running_time < splitmux->max_in_running_time) {
loop_again = FALSE;
@@ -1195,8 +1293,14 @@
event = gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM |
GST_EVENT_TYPE_SERIALIZED,
gst_structure_new ("splitmuxsink-unblock", "timestamp",
- G_TYPE_UINT64, splitmux->max_in_running_time, NULL));
+ G_TYPE_INT64, splitmux->max_in_running_time, NULL));
+
+ GST_SPLITMUX_UNLOCK (splitmux);
gst_pad_send_event (ctx->sinkpad, event);
+ GST_SPLITMUX_LOCK (splitmux);
+ /* state may have changed while we were unlocked. Loop again if so */
+ if (splitmux->state != SPLITMUX_STATE_ENDING_FILE)
+ break;
/* fallthrough */
}
case SPLITMUX_STATE_START_NEXT_FRAGMENT:
@@ -1224,7 +1328,7 @@
check_queue_length (splitmux, ctx);
GST_LOG_OBJECT (pad, "Returning to queue buffer %" GST_PTR_FORMAT
- " run ts %" GST_TIME_FORMAT, buf, GST_TIME_ARGS (ctx->in_running_time));
+ " run ts %" GST_STIME_FORMAT, buf, GST_STIME_ARGS (ctx->in_running_time));
GST_SPLITMUX_UNLOCK (splitmux);
return GST_PAD_PROBE_PASS;
@@ -1602,8 +1706,9 @@
GST_SPLITMUX_LOCK (splitmux);
/* Start by collecting one input on each pad */
splitmux->state = SPLITMUX_STATE_COLLECTING_GOP_START;
- splitmux->max_in_running_time = 0;
- splitmux->muxed_out_time = splitmux->mux_start_time = 0;
+ splitmux->max_in_running_time = GST_CLOCK_STIME_NONE;
+ splitmux->muxed_out_time = splitmux->mux_start_time =
+ splitmux->last_frame_duration = GST_CLOCK_STIME_NONE;
splitmux->muxed_out_bytes = splitmux->mux_start_bytes = 0;
splitmux->opening_first_fragment = TRUE;
GST_SPLITMUX_UNLOCK (splitmux);
diff --git a/gst/multifile/gstsplitmuxsink.h b/gst/multifile/gstsplitmuxsink.h
index a233642..aeda8a5 100644
--- a/gst/multifile/gstsplitmuxsink.h
+++ b/gst/multifile/gstsplitmuxsink.h
@@ -48,8 +48,9 @@
typedef struct _MqStreamBuf
{
gboolean keyframe;
- GstClockTime run_ts;
- gsize buf_size;
+ GstClockTimeDiff run_ts;
+ guint64 buf_size;
+ GstClockTime duration;
} MqStreamBuf;
typedef struct _MqStreamCtx
@@ -70,10 +71,10 @@
GstSegment in_segment;
GstSegment out_segment;
- GstClockTime in_running_time;
- GstClockTime out_running_time;
+ GstClockTimeDiff in_running_time;
+ GstClockTimeDiff out_running_time;
- gsize in_bytes;
+ guint64 in_bytes;
GQueue queued_bufs;
@@ -95,6 +96,7 @@
GstClockTime threshold_time;
guint64 threshold_bytes;
guint max_files;
+ gboolean send_keyframe_requests;
guint mq_max_buffers;
@@ -114,17 +116,19 @@
MqStreamCtx *reference_ctx;
guint queued_gops;
- GstClockTime max_in_running_time;
- GstClockTime max_out_running_time;
+ GstClockTimeDiff max_in_running_time;
+ GstClockTimeDiff max_out_running_time;
- GstClockTime muxed_out_time;
- gsize muxed_out_bytes;
+ GstClockTimeDiff muxed_out_time;
+ guint64 muxed_out_bytes;
gboolean have_muxed_something;
- GstClockTime mux_start_time;
- gsize mux_start_bytes;
+ GstClockTimeDiff mux_start_time;
+ guint64 mux_start_bytes;
+ GstClockTime last_frame_duration;
gboolean opening_first_fragment;
+ gboolean switching_fragment;
};
struct _GstSplitMuxSinkClass {
diff --git a/gst/multifile/gstsplitmuxsrc.c b/gst/multifile/gstsplitmuxsrc.c
index c55db9f..b710ca6 100644
--- a/gst/multifile/gstsplitmuxsrc.c
+++ b/gst/multifile/gstsplitmuxsrc.c
@@ -544,15 +544,12 @@
} else {
GstBuffer *buf = (GstBuffer *) (item->object);
GstFlowReturn ret = gst_splitmux_handle_buffer (splitmux, splitpad, buf);
- if (G_UNLIKELY (ret != GST_FLOW_OK)) {
+ if (G_UNLIKELY (ret != GST_FLOW_OK && ret != GST_FLOW_EOS)) {
/* Stop immediately on error or flushing */
GST_INFO_OBJECT (splitpad, "Stopping due to pad_push() result %d", ret);
gst_pad_pause_task (pad);
- if (ret <= GST_FLOW_EOS) {
- const gchar *reason = gst_flow_get_name (ret);
- GST_ELEMENT_ERROR (splitmux, STREAM, FAILED,
- (_("Internal data flow error.")),
- ("streaming task paused, reason %s (%d)", reason, ret));
+ if (ret < GST_FLOW_EOS) {
+ GST_ELEMENT_FLOW_ERROR (splitmux, ret);
}
}
}
diff --git a/gst/multipart/Makefile.in b/gst/multipart/Makefile.in
index 94dedcf..67064d1 100644
--- a/gst/multipart/Makefile.in
+++ b/gst/multipart/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -343,6 +344,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -449,6 +451,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -516,6 +521,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/multipart/multipartmux.c b/gst/multipart/multipartmux.c
index 17ae919..e6271ff 100644
--- a/gst/multipart/multipartmux.c
+++ b/gst/multipart/multipartmux.c
@@ -310,13 +310,20 @@
if (new == NULL || new->buffer == NULL)
return -1;
+ if (GST_CLOCK_TIME_IS_VALID (old->dts_timestamp) &&
+ GST_CLOCK_TIME_IS_VALID (new->dts_timestamp)) {
+ oldtime = old->dts_timestamp;
+ newtime = new->dts_timestamp;
+ } else {
+ oldtime = old->pts_timestamp;
+ newtime = new->pts_timestamp;
+ }
+
/* no timestamp on old buffer, it must go first */
- oldtime = old->timestamp;
if (oldtime == GST_CLOCK_TIME_NONE)
return -1;
/* no timestamp on new buffer, it must go first */
- newtime = new->timestamp;
if (newtime == GST_CLOCK_TIME_NONE)
return 1;
@@ -355,14 +362,22 @@
buf = gst_collect_pads_pop (mux->collect, data);
- /* Store timestamp with segment_start and preroll */
- if (buf && GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
- pad->timestamp =
+ /* Store timestamps with segment_start and preroll */
+ if (buf && GST_BUFFER_PTS_IS_VALID (buf)) {
+ pad->pts_timestamp =
gst_segment_to_running_time (&data->segment, GST_FORMAT_TIME,
- GST_BUFFER_TIMESTAMP (buf));
+ GST_BUFFER_PTS (buf));
} else {
- pad->timestamp = GST_CLOCK_TIME_NONE;
+ pad->pts_timestamp = GST_CLOCK_TIME_NONE;
}
+ if (buf && GST_BUFFER_DTS_IS_VALID (buf)) {
+ pad->dts_timestamp =
+ gst_segment_to_running_time (&data->segment, GST_FORMAT_TIME,
+ GST_BUFFER_DTS (buf));
+ } else {
+ pad->dts_timestamp = GST_CLOCK_TIME_NONE;
+ }
+
pad->buffer = buf;
}
@@ -462,10 +477,13 @@
GstClockTime time;
GstSegment segment;
- if (best->timestamp != -1)
- time = best->timestamp;
- else
+ if (best->dts_timestamp != GST_CLOCK_TIME_NONE) {
+ time = best->dts_timestamp;
+ } else if (best->pts_timestamp != GST_CLOCK_TIME_NONE) {
+ time = best->pts_timestamp;
+ } else {
time = 0;
+ }
/* for the segment, we take the first timestamp we see, we don't know the
* length and the position is 0 */
@@ -500,9 +518,10 @@
gst_buffer_fill (headerbuf, 0, header, headerlen);
g_free (header);
- /* the header has the same timestamp as the data buffer (which we will push
+ /* the header has the same timestamps as the data buffer (which we will push
* below) and has a duration of 0 */
- GST_BUFFER_TIMESTAMP (headerbuf) = best->timestamp;
+ GST_BUFFER_PTS (headerbuf) = best->pts_timestamp;
+ GST_BUFFER_DTS (headerbuf) = best->dts_timestamp;
GST_BUFFER_DURATION (headerbuf) = 0;
GST_BUFFER_OFFSET (headerbuf) = mux->offset;
mux->offset += headerlen;
@@ -521,8 +540,9 @@
databuf = gst_buffer_make_writable (best->buffer);
best->buffer = NULL;
- /* we need to updated the timestamp to match the running_time */
- GST_BUFFER_TIMESTAMP (databuf) = best->timestamp;
+ /* we need to updated the timestamps to match the running_time */
+ GST_BUFFER_PTS (databuf) = best->pts_timestamp;
+ GST_BUFFER_DTS (databuf) = best->dts_timestamp;
GST_BUFFER_OFFSET (databuf) = mux->offset;
mux->offset += gst_buffer_get_size (databuf);
GST_BUFFER_OFFSET_END (databuf) = mux->offset;
@@ -539,9 +559,10 @@
footerbuf = gst_buffer_new_allocate (NULL, 2, NULL);
gst_buffer_fill (footerbuf, 0, "\r\n", 2);
- /* the footer has the same timestamp as the data buffer and has a
+ /* the footer has the same timestamps as the data buffer and has a
* duration of 0 */
- GST_BUFFER_TIMESTAMP (footerbuf) = best->timestamp;
+ GST_BUFFER_PTS (footerbuf) = best->pts_timestamp;
+ GST_BUFFER_DTS (footerbuf) = best->dts_timestamp;
GST_BUFFER_DURATION (footerbuf) = 0;
GST_BUFFER_OFFSET (footerbuf) = mux->offset;
mux->offset += 2;
diff --git a/gst/multipart/multipartmux.h b/gst/multipart/multipartmux.h
index f66d35e..3b44f5a 100644
--- a/gst/multipart/multipartmux.h
+++ b/gst/multipart/multipartmux.h
@@ -45,7 +45,9 @@
GstCollectData collect; /* we extend the CollectData */
GstBuffer *buffer; /* the queued buffer for this pad */
- GstClockTime timestamp; /* its timestamp, converted to running_time so that we can
+ GstClockTime pts_timestamp; /* its pts timestamp, converted to running_time so that we can
+ correctly sort over multiple segments. */
+ GstClockTime dts_timestamp; /* its dts timestamp, converted to running_time so that we can
correctly sort over multiple segments. */
GstPad *pad;
}
diff --git a/gst/replaygain/Makefile.in b/gst/replaygain/Makefile.in
index d644145..8b1101a 100644
--- a/gst/replaygain/Makefile.in
+++ b/gst/replaygain/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -346,6 +347,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -452,6 +454,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -519,6 +524,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/rtp/Makefile.in b/gst/rtp/Makefile.in
index 4645fc5..866e878 100644
--- a/gst/rtp/Makefile.in
+++ b/gst/rtp/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -394,6 +395,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -500,6 +502,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -567,6 +572,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/rtp/gstrtpbvpay.c b/gst/rtp/gstrtpbvpay.c
index 9292681..e202015 100644
--- a/gst/rtp/gstrtpbvpay.c
+++ b/gst/rtp/gstrtpbvpay.c
@@ -217,6 +217,17 @@
}
gst_caps_unref (otherpadcaps);
}
+
+ if (filter) {
+ GstCaps *tmp;
+
+ GST_DEBUG_OBJECT (rtppayload, "Intersect %" GST_PTR_FORMAT " and filter %"
+ GST_PTR_FORMAT, caps, filter);
+ tmp = gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST);
+ gst_caps_unref (caps);
+ caps = tmp;
+ }
+
return caps;
}
diff --git a/gst/rtp/gstrtpceltpay.c b/gst/rtp/gstrtpceltpay.c
index db2ebff..1d5287d 100644
--- a/gst/rtp/gstrtpceltpay.c
+++ b/gst/rtp/gstrtpceltpay.c
@@ -200,6 +200,16 @@
gst_caps_unref (otherpadcaps);
}
+ if (filter) {
+ GstCaps *tmp;
+
+ GST_DEBUG_OBJECT (payload, "Intersect %" GST_PTR_FORMAT " and filter %"
+ GST_PTR_FORMAT, caps, filter);
+ tmp = gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST);
+ gst_caps_unref (caps);
+ caps = tmp;
+ }
+
return caps;
}
diff --git a/gst/rtp/gstrtpg722pay.c b/gst/rtp/gstrtpg722pay.c
index eb88c3c..c2fe88d 100644
--- a/gst/rtp/gstrtpg722pay.c
+++ b/gst/rtp/gstrtpg722pay.c
@@ -213,6 +213,17 @@
}
gst_caps_unref (otherpadcaps);
}
+
+ if (filter) {
+ GstCaps *tmp;
+
+ GST_DEBUG_OBJECT (rtppayload, "Intersect %" GST_PTR_FORMAT " and filter %"
+ GST_PTR_FORMAT, caps, filter);
+ tmp = gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST);
+ gst_caps_unref (caps);
+ caps = tmp;
+ }
+
return caps;
}
diff --git a/gst/rtp/gstrtph261depay.c b/gst/rtp/gstrtph261depay.c
index 1f99bd4..e9040c9 100644
--- a/gst/rtp/gstrtph261depay.c
+++ b/gst/rtp/gstrtph261depay.c
@@ -105,9 +105,9 @@
marker = gst_rtp_buffer_get_marker (rtp);
- if (payload_len < 4) {
- GST_WARNING_OBJECT (depay,
- "Dropping packet with payload length invalid length");
+ if (payload_len < header_len + 1) {
+ /* Must have at least one byte payload */
+ GST_WARNING_OBJECT (depay, "Dropping packet with invalid payload length");
return NULL;
}
diff --git a/gst/rtp/gstrtph263pay.c b/gst/rtp/gstrtph263pay.c
index 06091fc..6e40700 100644
--- a/gst/rtp/gstrtph263pay.c
+++ b/gst/rtp/gstrtph263pay.c
@@ -770,7 +770,7 @@
code = value >> 16;
- GST_DEBUG ("value:0x%08x, code:0x%04x", value, code);
+ GST_LOG ("value:0x%08x, code:0x%04x", value, code);
for (i = 0; i < MCBPC_I_LEN; i++) {
if ((code & mcbpc_I[i][1]) == mcbpc_I[i][0]) {
@@ -795,7 +795,7 @@
code = value >> 16;
- GST_DEBUG ("value:0x%08x, code:0x%04x", value, code);
+ GST_LOG ("value:0x%08x, code:0x%04x", value, code);
for (i = 0; i < MCBPC_P_LEN; i++) {
if ((code & mcbpc_P[i][1]) == mcbpc_P[i][0]) {
@@ -820,7 +820,7 @@
code = value >> 24;
- GST_DEBUG ("value:0x%08x, code:0x%04x", value, code);
+ GST_LOG ("value:0x%08x, code:0x%04x", value, code);
for (i = 0; i < CBPY_LEN; i++) {
if ((code & cbpy_table[i][1]) == cbpy_table[i][0]) {
@@ -845,7 +845,7 @@
code = value >> 16;
- GST_DEBUG ("value:0x%08x, code:0x%04x", value, code);
+ GST_LOG ("value:0x%08x, code:0x%04x", value, code);
for (i = 0; i < MVD_LEN; i++) {
if ((code & mvd[i][1]) == mvd[i][0]) {
@@ -870,7 +870,7 @@
code = value >> 16;
- GST_DEBUG ("value:0x%08x, code:0x%04x", value, code);
+ GST_LOG ("value:0x%08x, code:0x%04x", value, code);
for (i = 0; i < TCOEF_LEN; i++) {
if ((code & tcoef[i][1]) == tcoef[i][0]) {
@@ -894,21 +894,20 @@
guint rest_bits, guint8 ** orig_data, guint8 ** data_end)
{
- GST_DEBUG ("Moving window: 0x%08x from: %p for %d bits, rest_bits: %d",
- context->window, context->win_end, n, rest_bits);
+ GST_LOG ("Moving window: 0x%08x from: %p for %d bits, rest_bits: %d, data_end %p",
+ context->window, context->win_end, n, rest_bits, *data_end);
if (n == 0)
return rest_bits;
while (n != 0 || context->win_end == ((*data_end) + 1)) {
- //guint8 a = *data;
+ guint8 b = context->win_end <= *data_end ? *context->win_end : 0;
if (rest_bits == 0) {
if (n > 8) {
- context->window = (context->window << 8) | *context->win_end;
+ context->window = (context->window << 8) | b;
n -= 8;
} else {
- context->window =
- (context->window << n) | (*context->win_end >> (8 - n));
+ context->window = (context->window << n) | (b >> (8 - n));
rest_bits = 8 - n;
if (rest_bits == 0)
context->win_end++;
@@ -916,15 +915,14 @@
}
} else {
if (n > rest_bits) {
- context->window =
- (context->window << rest_bits) | (*context->
- win_end & (((guint) pow (2.0, (double) rest_bits)) - 1));
+ context->window = (context->window << rest_bits) |
+ (b & (((guint) pow (2.0, (double) rest_bits)) - 1));
n -= rest_bits;
rest_bits = 0;
} else {
- context->window =
- (context->window << n) | ((*context->win_end & (((guint) pow (2.0,
- (double) rest_bits)) - 1)) >> (rest_bits - n));
+ context->window = (context->window << n) |
+ ((b & (((guint) pow (2.0, (double) rest_bits)) - 1)) >>
+ (rest_bits - n));
rest_bits -= n;
if (rest_bits == 0)
context->win_end++;
@@ -937,7 +935,7 @@
*orig_data = context->win_end - 4;
- GST_DEBUG
+ GST_LOG
("Window moved to %p with value: 0x%08x and orig_data: %p rest_bits: %d",
context->win_end, context->window, *orig_data, rest_bits);
return rest_bits;
@@ -985,7 +983,7 @@
//Step 2 decode MCBPC I
mb_type_index = gst_rtp_h263_pay_decode_mcbpc_I (context->window);
- GST_DEBUG ("MCBPC index: %d", mb_type_index);
+ GST_LOG ("MCBPC index: %d", mb_type_index);
if (mb_type_index == -1) {
GST_ERROR ("MB index shouldn't be -1 in window: %08x", context->window);
goto beach;
@@ -1004,7 +1002,7 @@
//Step 3 decode CBPY I
cbpy_type_index = gst_rtp_h263_pay_decode_cbpy (context->window, cbpy_I);
- GST_DEBUG ("CBPY index: %d", cbpy_type_index);
+ GST_LOG ("CBPY index: %d", cbpy_type_index);
if (cbpy_type_index == -1) {
GST_ERROR ("CBPY index shouldn't be -1 in window: %08x", context->window);
goto beach;
@@ -1017,7 +1015,7 @@
//Step 4 decode rest of MB
//MB type 1 and 4 have DQUANT - we store it for packaging purposes
if (mcbpc_I[mb_type_index][5] == 4) {
- GST_DEBUG ("Shifting DQUANT");
+ GST_LOG ("Shifting DQUANT");
mac->quant = (context->window >> 30);
@@ -1029,7 +1027,7 @@
last = 0;
for (i = 0; i < N_BLOCKS; i++) {
- GST_DEBUG ("Decoding INTRADC and TCOEF, i:%d", i);
+ GST_LOG ("Decoding INTRADC and TCOEF, i:%d", i);
mac->ebit =
gst_rtp_h263_pay_move_window_right (context, 8, mac->ebit, &mac->end,
&gob->end);
@@ -1044,7 +1042,7 @@
while (last == 0) {
tcoef_type_index = gst_rtp_h263_pay_decode_tcoef (context->window);
- GST_DEBUG ("TCOEF index: %d", tcoef_type_index);
+ GST_LOG ("TCOEF index: %d", tcoef_type_index);
if (tcoef_type_index == -1) {
GST_ERROR ("TCOEF index shouldn't be -1 in window: %08x",
context->window);
@@ -1077,13 +1075,13 @@
guint ind;
//Step 1 check COD
- GST_DEBUG ("Checking for COD");
+ GST_LOG ("Checking for COD");
if ((context->window & 0x80000000) == 0x80000000) {
//The MB is not coded
mac->ebit =
gst_rtp_h263_pay_move_window_right (context, 1, mac->ebit, &mac->end,
&gob->end);
- GST_DEBUG ("COOOOOOOOOOOD = 1");
+ GST_LOG ("COOOOOOOOOOOD = 1");
return mac;
} else {
@@ -1096,7 +1094,7 @@
//Step 2 decode MCBPC P
mb_type_index = gst_rtp_h263_pay_decode_mcbpc_P (context->window);
- GST_DEBUG ("MCBPC index: %d", mb_type_index);
+ GST_LOG ("MCBPC index: %d", mb_type_index);
if (mb_type_index == -1) {
GST_ERROR ("MB index shouldn't be -1 in window: %08x", context->window);
goto beach;
@@ -1114,7 +1112,7 @@
//Step 3 decode CBPY P
cbpy_type_index = gst_rtp_h263_pay_decode_cbpy (context->window, cbpy_P);
- GST_DEBUG ("CBPY index: %d", cbpy_type_index);
+ GST_LOG ("CBPY index: %d", cbpy_type_index);
if (cbpy_type_index == -1) {
GST_ERROR ("CBPY index shouldn't be -1 in window: %08x", context->window);
goto beach;
@@ -1125,7 +1123,7 @@
//MB type 1 and 4 have DQUANT - we add it to MB object and jump over
if (mcbpc_P[mb_type_index][5] == 4 || mcbpc_P[mb_type_index][5] == 1) {
- GST_DEBUG ("Shifting DQUANT");
+ GST_LOG ("Shifting DQUANT");
mac->quant = context->window >> 30;
@@ -1169,12 +1167,12 @@
//if MB type 3 or 4 then INTRADC coef are present in blocks
if (mcbpc_P[mb_type_index][5] > 2) {
- GST_DEBUG ("INTRADC coef: %d", i);
+ GST_LOG ("INTRADC coef: %d", i);
mac->ebit =
gst_rtp_h263_pay_move_window_right (context, 8, mac->ebit,
&mac->end, &gob->end);
} else {
- GST_DEBUG ("INTRADC coef is not present");
+ GST_LOG ("INTRADC coef is not present");
}
//check if the block has TCOEF
@@ -1192,7 +1190,7 @@
while (last == 0) {
tcoef_type_index = gst_rtp_h263_pay_decode_tcoef (context->window);
- GST_DEBUG ("TCOEF index: %d", tcoef_type_index);
+ GST_LOG ("TCOEF index: %d", tcoef_type_index);
if (tcoef_type_index == -1) {
GST_ERROR ("TCOEF index shouldn't be -1 in window: %08x",
context->window);
@@ -1413,7 +1411,7 @@
/*---------- MODE B MODE FRAGMENTATION ----------*/
- GstRtpH263PayMB *mac = NULL;
+ GstRtpH263PayMB *mac, *mac0;
guint max_payload_size;
GstRtpH263PayBoundry boundry;
guint mb;
@@ -1509,20 +1507,25 @@
// We are on MB layer
- mac = gst_rtp_h263_pay_mb_new (&boundry, 0);
+ mac = mac0 = gst_rtp_h263_pay_mb_new (&boundry, 0);
for (mb = 0; mb < format_props[context->piclayer->ptype_srcformat][1]; mb++) {
- GST_DEBUG ("================ START MB %d =================", mb);
+ GST_LOG ("================ START MB %d =================", mb);
//Find next macroblock boundaries
ebit = mac->ebit;
if (!(mac = gst_rtp_h263_pay_B_mbfinder (context, gob, mac, mb))) {
- GST_DEBUG ("Error decoding MB - sbit: %d", 8 - ebit);
+ GST_LOG ("Error decoding MB - sbit: %d", 8 - ebit);
GST_ERROR ("Error decoding in GOB");
+ gst_rtp_h263_pay_mb_destroy (mac0);
goto decode_error;
}
+
+ gst_rtp_h263_pay_mb_destroy (gob->macroblocks[mb]);
+ gob->macroblocks[mb] = mac;
+
//If mb_type == stuffing, don't increment the mb address
if (mac->mb_type == 10) {
mb--;
@@ -1531,8 +1534,6 @@
gob->nmacroblocs++;
}
- gob->macroblocks[mb] = mac;
-
if (mac->end >= gob->end) {
GST_LOG ("No more MBs in this GOB");
if (!mac->ebit) {
@@ -1543,8 +1544,9 @@
}
GST_DEBUG ("Found MB: mba: %d start: %p end: %p len: %d sbit: %d ebit: %d",
mac->mba, mac->start, mac->end, mac->length, mac->sbit, mac->ebit);
- GST_DEBUG ("================ END MB %d =================", mb);
+ GST_LOG ("================ END MB %d =================", mb);
}
+ gst_rtp_h263_pay_mb_destroy (mac0);
mb = 0;
first = 0;
@@ -1562,6 +1564,8 @@
//GST_DEBUG ("Pushing GOBS %d to %d because payload size is %d", first,
// first == mb - 1, payload_len);
+ // FIXME: segfault if mb == 0 (first MB is larger than max_payload_size)
+ GST_DEBUG ("Push B mode fragment from mb %d to %d", first, mb - 1);
if (gst_rtp_h263_pay_B_fragment_push (rtph263pay, context, gob, first,
mb - 1, &boundry)) {
GST_ERROR ("Oooops, there was an error sending");
@@ -1580,6 +1584,7 @@
/* Push rest */
GST_DEBUG ("Remainder first: %d, MB: %d", first, mb);
if (payload_len != 0) {
+ GST_DEBUG ("Push B mode fragment from mb %d to %d", first, mb - 1);
if (gst_rtp_h263_pay_B_fragment_push (rtph263pay, context, gob, first,
mb - 1, &boundry)) {
GST_ERROR ("Oooops, there was an error sending!");
@@ -1588,11 +1593,10 @@
}
/*---------- END OF MODE B FRAGMENTATION ----------*/
- gst_rtp_h263_pay_mb_destroy (mac);
+
return TRUE;
decode_error:
- gst_rtp_h263_pay_mb_destroy (mac);
return FALSE;
}
diff --git a/gst/rtp/gstrtph263pdepay.c b/gst/rtp/gstrtph263pdepay.c
index dbfcb66..8290614 100644
--- a/gst/rtp/gstrtph263pdepay.c
+++ b/gst/rtp/gstrtph263pdepay.c
@@ -287,12 +287,8 @@
goto too_small;
if (P) {
- /* FIXME, have to make the packet writable hear. Better to reset these
- * bytes when we copy the packet below */
rtph263pdepay->wait_start = FALSE;
header_len -= 2;
- payload[header_len] = 0;
- payload[header_len + 1] = 0;
}
if (rtph263pdepay->wait_start)
@@ -304,7 +300,6 @@
/* FIXME do not ignore the VRC header (See RFC 2429 section 4.2) */
/* FIXME actually use the RTP picture header when it is lost in the network */
/* for now strip off header */
- payload += header_len;
payload_len -= header_len;
if (M) {
@@ -317,6 +312,8 @@
outbuf =
gst_rtp_buffer_get_payload_subbuffer (rtp, header_len, payload_len);
+ if (P)
+ gst_buffer_memset (outbuf, 0, 0, 2);
gst_adapter_push (rtph263pdepay->adapter, outbuf);
outbuf = NULL;
@@ -324,6 +321,9 @@
len = avail + payload_len;
padlen = (len % 4) + 4;
+ if (avail == 0)
+ goto empty_frame;
+
outbuf = gst_adapter_take_buffer (rtph263pdepay->adapter, avail);
if (padlen) {
padbuf = gst_buffer_new_and_alloc (padlen);
@@ -341,6 +341,8 @@
outbuf =
gst_rtp_buffer_get_payload_subbuffer (rtp, header_len, payload_len);
+ if (P)
+ gst_buffer_memset (outbuf, 0, 0, 2);
gst_adapter_push (rtph263pdepay->adapter, outbuf);
}
return NULL;
@@ -356,6 +358,11 @@
GST_DEBUG_OBJECT (rtph263pdepay, "waiting for picture start");
return NULL;
}
+empty_frame:
+ {
+ GST_WARNING_OBJECT (rtph263pdepay, "Depayloaded frame is empty, dropping");
+ return NULL;
+ }
}
static GstStateChangeReturn
diff --git a/gst/rtp/gstrtph263ppay.c b/gst/rtp/gstrtph263ppay.c
index 844d3f7..176d7cc 100644
--- a/gst/rtp/gstrtph263ppay.c
+++ b/gst/rtp/gstrtph263ppay.c
@@ -254,8 +254,9 @@
if (!peercaps || gst_caps_is_any (peercaps)) {
if (peercaps)
gst_caps_unref (peercaps);
- return
+ caps =
gst_pad_get_pad_template_caps (GST_RTP_BASE_PAYLOAD_SINKPAD (payload));
+ goto done;
}
/* We basically need to differentiate two use-cases here: One where there's
@@ -264,9 +265,11 @@
* we want it to produce. The second case is simply payloader ! depayloader
* where we are dealing with the depayloader's template caps. In this case
* we should accept any input compatible with our sink template caps. */
- if (!gst_caps_is_fixed (peercaps))
- return
+ if (!gst_caps_is_fixed (peercaps)) {
+ caps =
gst_pad_get_pad_template_caps (GST_RTP_BASE_PAYLOAD_SINKPAD (payload));
+ goto done;
+ }
templ = gst_pad_get_pad_template_caps (GST_RTP_BASE_PAYLOAD_SRCPAD (payload));
intersect = gst_caps_intersect (peercaps, templ);
@@ -601,6 +604,18 @@
gst_caps_unref (intersect);
+done:
+
+ if (filter) {
+ GstCaps *tmp;
+
+ GST_DEBUG_OBJECT (payload, "Intersect %" GST_PTR_FORMAT " and filter %"
+ GST_PTR_FORMAT, caps, filter);
+ tmp = gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST);
+ gst_caps_unref (caps);
+ caps = tmp;
+ }
+
return caps;
}
diff --git a/gst/rtp/gstrtph264pay.c b/gst/rtp/gstrtph264pay.c
index f5167da..808eb1d 100644
--- a/gst/rtp/gstrtph264pay.c
+++ b/gst/rtp/gstrtph264pay.c
@@ -340,6 +340,13 @@
caps = icaps;
done:
+ if (filter) {
+ GST_DEBUG_OBJECT (payload, "Intersect %" GST_PTR_FORMAT " and filter %"
+ GST_PTR_FORMAT, caps, filter);
+ icaps = gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST);
+ gst_caps_unref (caps);
+ caps = icaps;
+ }
gst_caps_unref (template_caps);
gst_caps_unref (allowed_caps);
diff --git a/gst/rtp/gstrtph265depay.c b/gst/rtp/gstrtph265depay.c
index 9705c4d..97353af 100644
--- a/gst/rtp/gstrtph265depay.c
+++ b/gst/rtp/gstrtph265depay.c
@@ -131,7 +131,7 @@
gst_element_class_set_static_metadata (gstelement_class,
"RTP H265 depayloader", "Codec/Depayloader/Network/RTP",
- "Extracts H265 video from RTP packets (draft-ietf-payload-rtp-h265-03.txt)",
+ "Extracts H265 video from RTP packets (RFC 7798)",
"Jurgen Slowack <jurgenslowack@gmail.com>");
gstelement_class->change_state = gst_rtp_h265_depay_change_state;
@@ -754,8 +754,10 @@
gint clock_rate;
GstStructure *structure = gst_caps_get_structure (caps, 0);
GstRtpH265Depay *rtph265depay;
- const gchar *ps;
- GstBuffer *codec_data;
+ const gchar *vps;
+ const gchar *sps;
+ const gchar *pps;
+ gchar *ps;
GstMapInfo map;
guint8 *ptr;
@@ -766,7 +768,14 @@
depayload->clock_rate = clock_rate;
/* Base64 encoded, comma separated config NALs */
- ps = gst_structure_get_string (structure, "sprop-parameter-sets");
+ vps = gst_structure_get_string (structure, "sprop-vps");
+ sps = gst_structure_get_string (structure, "sprop-sps");
+ pps = gst_structure_get_string (structure, "sprop-pps");
+ if (vps == NULL || sps == NULL || pps == NULL) {
+ ps = NULL;
+ } else {
+ ps = g_strdup_printf ("%s,%s,%s", vps, sps, pps);
+ }
/* negotiate with downstream w.r.t. output format and alignment */
gst_rtp_h265_depay_negotiate (rtph265depay);
@@ -775,6 +784,7 @@
/* for bytestream we only need the parameter sets but we don't error out
* when they are not there, we assume they are in the stream. */
gchar **params;
+ GstBuffer *codec_data;
guint len, total;
gint i;
@@ -855,10 +865,14 @@
}
g_strfreev (params);
- if (rtph265depay->sps->len == 0 || rtph265depay->pps->len == 0)
+ if (rtph265depay->vps->len == 0 || rtph265depay->sps->len == 0 ||
+ rtph265depay->pps->len == 0) {
goto incomplete_caps;
+ }
}
+ g_free (ps);
+
return gst_rtp_h265_set_src_caps (rtph265depay);
/* ERRORS */
@@ -866,6 +880,7 @@
{
GST_DEBUG_OBJECT (depayload, "we have incomplete caps,"
" doing setcaps later");
+ g_free (ps);
return TRUE;
}
}
diff --git a/gst/rtp/gstrtph265pay.c b/gst/rtp/gstrtph265pay.c
index 067e522..8e9a887 100644
--- a/gst/rtp/gstrtph265pay.c
+++ b/gst/rtp/gstrtph265pay.c
@@ -53,13 +53,12 @@
GST_PAD_SINK,
GST_PAD_ALWAYS,
GST_STATIC_CAPS (
- /* Only bytestream format supported for now */
+ /* only hvc1 and byte-stream formats supported for now */
+ "video/x-h265, stream-format = (string) hvc1, alignment = (string) au; "
/* "video/x-h265, "
- "stream-format = (string) hvc1, alignment = (string) au; "
- "video/x-h265, "
"stream-format = (string) hev1, alignment = (string) au; " */
- "video/x-h265, "
- "stream-format = (string) byte-stream, alignment = (string) { nal, au }")
+ "video/x-h265, stream-format = (string) byte-stream, "
+ "alignment = (string) { nal, au }")
);
static GstStaticPadTemplate gst_rtp_h265_pay_src_template =
@@ -110,7 +109,7 @@
PROP_CONFIG_INTERVAL
};
-#define IS_ACCESS_UNIT(x) (((x) > 0x00) && ((x) < 0x06))
+#define IS_ACCESS_UNIT(x) (((x) >= 0x00) && ((x) < 0x20))
static void gst_rtp_h265_pay_finalize (GObject * object);
@@ -167,7 +166,7 @@
gst_element_class_set_static_metadata (gstelement_class, "RTP H265 payloader",
"Codec/Payloader/Network/RTP",
- "Payload-encode H265 video into RTP packets (based on draft-ietf-payload-rtp-h265-03.txt)",
+ "Payload-encode H265 video into RTP packets (RFC 7798)",
"Jurgen Slowack <jurgenslowack@gmail.com>");
gstelement_class->change_state =
@@ -186,7 +185,6 @@
gst_rtp_h265_pay_init (GstRtpH265Pay * rtph265pay)
{
rtph265pay->queue = g_array_new (FALSE, FALSE, sizeof (guint));
- rtph265pay->profile = 0;
rtph265pay->sps = g_ptr_array_new_with_free_func (
(GDestroyNotify) gst_buffer_unref);
rtph265pay->pps = g_ptr_array_new_with_free_func (
@@ -241,6 +239,32 @@
"6.2"
};
+static gboolean
+parse_field (GstStructure * s, const gchar * field, gulong min, gulong max,
+ guint8 * result)
+{
+ const gchar *str;
+
+ g_assert (result != NULL);
+
+ str = gst_structure_get_string (s, field);
+ if (str != NULL && *str != '\0') {
+ gulong value;
+ gchar *end;
+
+ value = strtoul (str, &end, 10);
+ if (*end == '\0' && value >= min && value <= max) {
+ *result = (guint8) value;
+ } else {
+ return FALSE;
+ }
+ } else {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
static GstCaps *
gst_rtp_h265_pay_getcaps (GstRTPBasePayload * payload, GstPad * pad,
GstCaps * filter)
@@ -249,7 +273,6 @@
GstCaps *allowed_caps;
GstCaps *caps;
GstCaps *icaps;
- gboolean append_unrestricted;
guint i;
allowed_caps =
@@ -272,54 +295,48 @@
}
caps = gst_caps_new_empty ();
-
- append_unrestricted = FALSE;
for (i = 0; i < gst_caps_get_size (allowed_caps); i++) {
GstStructure *s = gst_caps_get_structure (allowed_caps, i);
GstStructure *new_s = gst_structure_new_empty ("video/x-h265");
- const gchar *profile_level_id;
+ guint8 ptl[12] = { 0, };
+ guint8 value;
- profile_level_id = gst_structure_get_string (s, "profile-level-id");
-
- if (profile_level_id && strlen (profile_level_id) == 6) { /* Code taken from gstrtph264pay.c, needs to be revised for H.265 */
+ if (parse_field (s, "profile-id", 0, 31, &value)) {
const gchar *profile;
+
+ ptl[0] = value;
+ profile = gst_codec_utils_h265_get_profile (ptl, sizeof (ptl));
+ if (profile != NULL) {
+ GST_DEBUG_OBJECT (payload, "profile %s", profile);
+ gst_structure_set (new_s, "profile", G_TYPE_STRING, profile, NULL);
+ } else {
+ GST_WARNING_OBJECT (payload, "invalid profile-id %d in caps", value);
+ }
+ } else {
+ GST_DEBUG_OBJECT (payload, "no valid profile-id in caps");
+ }
+
+ if (parse_field (s, "tier-flag", 0, 1, &value)) {
+ const gchar *tier;
+
+ ptl[0] |= value << 5;
+ tier = gst_codec_utils_h265_get_tier (ptl, sizeof (ptl));
+ GST_DEBUG_OBJECT (payload, "tier %s", tier);
+ gst_structure_set (new_s, "tier", G_TYPE_STRING, tier, NULL);
+ } else {
+ GST_DEBUG_OBJECT (payload, "no valid tier-flag in caps");
+ }
+
+ if (parse_field (s, "level-id", 0, 255, &value)) {
const gchar *level;
- long int spsint;
- guint8 sps[3];
- spsint = strtol (profile_level_id, NULL, 16);
- sps[0] = spsint >> 16;
- sps[1] = spsint >> 8;
- sps[2] = spsint;
-
- profile = gst_codec_utils_h265_get_profile (sps, 3);
- level = gst_codec_utils_h265_get_level (sps, 3);
-
- if (profile && level) {
- GST_LOG_OBJECT (payload, "In caps, have profile %s and level %s",
- profile, level);
-
- if (!strcmp (profile, "main"))
- gst_structure_set (new_s, "profile", G_TYPE_STRING, profile, NULL);
- else {
- GValue val = { 0, };
- GValue profiles = { 0, };
-
- g_value_init (&profiles, GST_TYPE_LIST);
- g_value_init (&val, G_TYPE_STRING);
-
- g_value_set_static_string (&val, profile);
- gst_value_list_append_value (&profiles, &val);
-
- g_value_set_static_string (&val, "main");
- gst_value_list_append_value (&profiles, &val);
-
- gst_structure_take_value (new_s, "profile", &profiles);
- }
-
- if (!strcmp (level, "1"))
+ ptl[11] = value;
+ level = gst_codec_utils_h265_get_level (ptl, sizeof (ptl));
+ if (level != NULL) {
+ GST_DEBUG_OBJECT (payload, "level %s", level);
+ if (strcmp (level, "1") == 0) {
gst_structure_set (new_s, "level", G_TYPE_STRING, level, NULL);
- else {
+ } else {
GValue levels = { 0, };
GValue val = { 0, };
int j;
@@ -336,32 +353,31 @@
gst_structure_take_value (new_s, "level", &levels);
}
} else {
- /* Invalid profile-level-id means main */
-
- gst_structure_set (new_s, "profile", G_TYPE_STRING, "main", NULL);
+ GST_WARNING_OBJECT (payload, "invalid level-id %d in caps", value);
}
} else {
- /* No profile-level-id means main or unrestricted */
-
- gst_structure_set (new_s, "profile", G_TYPE_STRING, "main", NULL);
- append_unrestricted = TRUE;
+ GST_DEBUG_OBJECT (payload, "no valid level-id in caps");
}
caps = gst_caps_merge_structure (caps, new_s);
}
- if (append_unrestricted) {
- caps =
- gst_caps_merge_structure (caps, gst_structure_new ("video/x-h265", NULL,
- NULL));
- }
-
icaps = gst_caps_intersect (caps, template_caps);
gst_caps_unref (caps);
caps = icaps;
done:
+ if (filter) {
+ GstCaps *tmp;
+
+ GST_DEBUG_OBJECT (payload, "Intersect %" GST_PTR_FORMAT " and filter %"
+ GST_PTR_FORMAT, caps, filter);
+ tmp = gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST);
+ gst_caps_unref (caps);
+ caps = tmp;
+ }
+
gst_caps_unref (template_caps);
gst_caps_unref (allowed_caps);
@@ -369,27 +385,26 @@
return caps;
}
-/* take the currently configured VPS, SPS and PPS lists and set them on the caps as
- * sprop-parameter-sets */
+/* take the currently configured VPS, SPS and PPS lists and set them on the
+ * caps */
static gboolean
gst_rtp_h265_pay_set_vps_sps_pps (GstRTPBasePayload * basepayload)
{
GstRtpH265Pay *payloader = GST_RTP_H265_PAY (basepayload);
- gchar *profile;
gchar *set;
- GString *sprops;
+ GString *vps;
+ GString *sps;
+ GString *pps;
guint count;
gboolean res;
GstMapInfo map;
guint i;
- sprops = g_string_new ("");
+ vps = g_string_new ("");
+ sps = g_string_new ("");
+ pps = g_string_new ("");
count = 0;
- GST_DEBUG_OBJECT (payloader,
- "Entering function gst_rtp_h265_pay_set_vps_sps_pps");
-
- /* build the sprop-parameter-sets */
for (i = 0; i < payloader->vps->len; i++) {
GstBuffer *vps_buf =
GST_BUFFER_CAST (g_ptr_array_index (payloader->vps, i));
@@ -398,7 +413,7 @@
set = g_base64_encode (map.data, map.size);
gst_buffer_unmap (vps_buf, &map);
- g_string_append_printf (sprops, "%s%s", count ? "," : "", set);
+ g_string_append_printf (vps, "%s%s", i ? "," : "", set);
g_free (set);
count++;
}
@@ -410,7 +425,7 @@
set = g_base64_encode (map.data, map.size);
gst_buffer_unmap (sps_buf, &map);
- g_string_append_printf (sprops, "%s%s", count ? "," : "", set);
+ g_string_append_printf (sps, "%s%s", i ? "," : "", set);
g_free (set);
count++;
}
@@ -422,22 +437,23 @@
set = g_base64_encode (map.data, map.size);
gst_buffer_unmap (pps_buf, &map);
- g_string_append_printf (sprops, "%s%s", count ? "," : "", set);
+ g_string_append_printf (pps, "%s%s", i ? "," : "", set);
g_free (set);
count++;
}
if (G_LIKELY (count)) {
- /* profile is 24 bit. Force it to respect the limit */
- profile = g_strdup_printf ("%06x", payloader->profile & 0xffffff);
/* combine into output caps */
res = gst_rtp_base_payload_set_outcaps (basepayload,
- "sprop-parameter-sets", G_TYPE_STRING, sprops->str, NULL);
- g_free (profile);
+ "sprop-vps", G_TYPE_STRING, vps->str,
+ "sprop-sps", G_TYPE_STRING, sps->str,
+ "sprop-pps", G_TYPE_STRING, pps->str, NULL);
} else {
res = gst_rtp_base_payload_set_outcaps (basepayload, NULL);
}
- g_string_free (sprops, TRUE);
+ g_string_free (vps, TRUE);
+ g_string_free (sps, TRUE);
+ g_string_free (pps, TRUE);
return res;
}
@@ -505,8 +521,7 @@
goto wrong_version;
/* profile_space | tier_flag | profile_idc */
- rtph265pay->profile = data[1];
- GST_DEBUG_OBJECT (rtph265pay, "profile %06x", rtph265pay->profile);
+ GST_DEBUG_OBJECT (rtph265pay, "profile %06x", data[1]);
/* profile_compatibility_flags */
for (i = 2; i < 6; i++) {
@@ -561,7 +576,7 @@
size -= 23;
if (num_arrays > 0) {
- if (data[0] == (0x00 | 0x20)) { /* VPS */
+ if ((data[0] & 0x3f) == 0x20) { /* VPS */
data++;
num_vps = data[0] << 8 | data[1];
@@ -598,7 +613,7 @@
}
if (num_arrays > 0) {
- if (data[0] == (0x00 | 0x21)) { /* SPS */
+ if ((data[0] & 0x3f) == 0x21) { /* SPS */
data++;
num_sps = data[0] << 8 | data[1];
@@ -635,7 +650,7 @@
}
if (num_arrays > 0) {
- if (data[0] == (0x00 | 0x22)) { /* PPS */
+ if ((data[0] & 0x3f) == 0x22) { /* PPS */
data++;
num_pps = data[0] << 8 | data[1];
@@ -773,7 +788,7 @@
/* encode the entire NAL in base64 */
GST_DEBUG_OBJECT (payloader, "found %s (type 0x%x), size %u",
type == GST_H265_NAL_VPS ? "VPS" : type == GST_H265_NAL_SPS ?
- "SPS" : "PPS", type, size);
+ "SPS" : "PPS", type, size);
nal = gst_buffer_new_allocate (NULL, size, NULL);
gst_buffer_fill (nal, 0, data, size);
@@ -948,8 +963,6 @@
packet_len = gst_rtp_buffer_calc_packet_len (size, 0, 0);
- GST_FIXME_OBJECT (rtph265pay, "Set RTP marker bit appropriately");
-
if (packet_len < mtu) {
GST_DEBUG_OBJECT (rtph265pay,
"NAL Unit fit in one packet datasize=%d mtu=%d", size, mtu);
@@ -962,10 +975,10 @@
gst_rtp_buffer_map (outbuf, GST_MAP_WRITE, &rtp);
- /* FIXME : only set the marker bit on packets containing access units */
- /* if (IS_ACCESS_UNIT (nalType) && end_of_au) {
- gst_rtp_buffer_set_marker (&rtp, 1);
- } */
+ /* only set the marker bit on packets containing access units */
+ if (IS_ACCESS_UNIT (nalType) && end_of_au) {
+ gst_rtp_buffer_set_marker (&rtp, 1);
+ }
/* timestamp the outbuffer */
GST_BUFFER_PTS (outbuf) = pts;
@@ -1030,10 +1043,10 @@
payload[0] = (nalHeader[0] & 0x81) | (49 << 1);
payload[1] = nalHeader[1];
- /* FIXME - set RTP marker bit appropriately */
- /* if (IS_ACCESS_UNIT (nalType)) {
- gst_rtp_buffer_set_marker (&rtp, end && end_of_au);
- } */
+ /* set the marker bit on the last packet of an access unit */
+ if (IS_ACCESS_UNIT (nalType)) {
+ gst_rtp_buffer_set_marker (&rtp, end && end_of_au);
+ }
/* FU Header */
payload[2] = (start << 7) | (end << 6) | (nalType & 0x3f);
@@ -1189,7 +1202,7 @@
GST_DEBUG_OBJECT (basepayload,
"found first start at %u, bytes left %" G_GSIZE_FORMAT, next, size);
- /* first pass to locate NALs and parse SPS/PPS */
+ /* first pass to locate NALs and parse VPS/SPS/PPS */
while (size > 4) {
/* skip start code */
data += 3;
@@ -1217,10 +1230,9 @@
nal_len);
/* We know our stream is a valid H265 NAL packet,
- * go parse it for SPS/PPS to enrich the caps */
+ * go parse it for VPS/SPS/PPS to enrich the caps */
/* order: make sure to check nal */
- update =
- gst_rtp_h265_pay_decode_nal (rtph265pay, data, nal_len, dts, pts)
+ update = gst_rtp_h265_pay_decode_nal (rtph265pay, data, nal_len, dts, pts)
|| update;
/* move to next NAL packet */
diff --git a/gst/rtp/gstrtph265pay.h b/gst/rtp/gstrtph265pay.h
index 9e6bb29..cd42fba 100644
--- a/gst/rtp/gstrtph265pay.h
+++ b/gst/rtp/gstrtph265pay.h
@@ -51,7 +51,6 @@
{
GstRTPBasePayload payload;
- guint profile;
GPtrArray *sps, *pps, *vps;
GstH265StreamFormat stream_format;
diff --git a/gst/rtp/gstrtpilbcpay.c b/gst/rtp/gstrtpilbcpay.c
index 83161ff..cbc7d93 100644
--- a/gst/rtp/gstrtpilbcpay.c
+++ b/gst/rtp/gstrtpilbcpay.c
@@ -206,6 +206,17 @@
}
gst_caps_unref (otherpadcaps);
}
+
+ if (filter) {
+ GstCaps *tmp;
+
+ GST_DEBUG_OBJECT (rtppayload, "Intersect %" GST_PTR_FORMAT " and filter %"
+ GST_PTR_FORMAT, caps, filter);
+ tmp = gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST);
+ gst_caps_unref (caps);
+ caps = tmp;
+ }
+
return caps;
}
diff --git a/gst/rtp/gstrtpvp9depay.c b/gst/rtp/gstrtpvp9depay.c
index 3d78e64..ad1b220 100644
--- a/gst/rtp/gstrtpvp9depay.c
+++ b/gst/rtp/gstrtpvp9depay.c
@@ -165,14 +165,6 @@
}
}
- /* flexible-mode not implemented */
- if (f_bit) {
- GST_ELEMENT_WARNING (depay, STREAM, NOT_IMPLEMENTED,
- ("Stream type not supported"),
- ("Depayloader does not implement flexible mode"));
- return NULL;
- }
-
/* Check L optional header layer indices */
if (l_bit) {
hdrsize++;
@@ -181,6 +173,24 @@
hdrsize++;
}
+ if (p_bit && f_bit) {
+ /* At least one P_DIFF|N, up to three times */
+ for (gint i = 0; i < 3; i++) {
+ guint p_diff, n_bit;
+
+ if (G_UNLIKELY (size < hdrsize + 1))
+ goto too_small;
+
+ p_diff = data[hdrsize] >> 1;
+ n_bit = data[hdrsize] & 0x1;
+ GST_TRACE_OBJECT (self, "P_DIFF[%d]=%d", i, p_diff);
+ hdrsize++;
+
+ if (!n_bit)
+ break;
+ }
+ }
+
/* Check V optional Scalability Structure */
if (v_bit) {
guint n_s, y_bit, g_bit;
@@ -252,7 +262,6 @@
GstBuffer *out;
gboolean key_frame_first_layer = !p_bit && spatial_layer == 0;
-
if (gst_adapter_available (self->adapter) < 10)
goto too_small;
diff --git a/gst/rtpmanager/Makefile.in b/gst/rtpmanager/Makefile.in
index 928943e..b3ab0b4 100644
--- a/gst/rtpmanager/Makefile.in
+++ b/gst/rtpmanager/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -356,6 +357,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -462,6 +464,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -529,6 +534,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/rtpmanager/gstrtpbin.c b/gst/rtpmanager/gstrtpbin.c
index cbe6901..648adb9 100644
--- a/gst/rtpmanager/gstrtpbin.c
+++ b/gst/rtpmanager/gstrtpbin.c
@@ -299,6 +299,7 @@
#define DEFAULT_MAX_DROPOUT_TIME 60000
#define DEFAULT_MAX_MISORDER_TIME 2000
#define DEFAULT_RFC7273_SYNC FALSE
+#define DEFAULT_MAX_STREAMS G_MAXUINT
enum
{
@@ -322,7 +323,8 @@
PROP_MAX_RTCP_RTP_TIME_DIFF,
PROP_MAX_DROPOUT_TIME,
PROP_MAX_MISORDER_TIME,
- PROP_RFC7273_SYNC
+ PROP_RFC7273_SYNC,
+ PROP_MAX_STREAMS
};
#define GST_RTP_BIN_RTCP_SYNC_TYPE (gst_rtp_bin_rtcp_sync_get_type())
@@ -1583,6 +1585,9 @@
rtpbin = session->bin;
+ if (g_slist_length (session->streams) >= rtpbin->max_streams)
+ goto max_streams;
+
if (!(buffer = gst_element_factory_make ("rtpjitterbuffer", NULL)))
goto no_jitterbuffer;
@@ -1659,6 +1664,12 @@
return stream;
/* ERRORS */
+max_streams:
+ {
+ GST_WARNING_OBJECT (rtpbin, "stream exeeds maximum (%d)",
+ rtpbin->max_streams);
+ return NULL;
+ }
no_jitterbuffer:
{
g_warning ("rtpbin: could not create rtpjitterbuffer element");
@@ -2323,6 +2334,12 @@
"(requires clock and offset to be provided)", DEFAULT_RFC7273_SYNC,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (gobject_class, PROP_MAX_STREAMS,
+ g_param_spec_uint ("max-streams", "Max Streams",
+ "The maximum number of streams to create for one session",
+ 0, G_MAXUINT, DEFAULT_MAX_STREAMS,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_rtp_bin_change_state);
gstelement_class->request_new_pad =
GST_DEBUG_FUNCPTR (gst_rtp_bin_request_new_pad);
@@ -2393,6 +2410,7 @@
rtpbin->max_dropout_time = DEFAULT_MAX_DROPOUT_TIME;
rtpbin->max_misorder_time = DEFAULT_MAX_MISORDER_TIME;
rtpbin->rfc7273_sync = DEFAULT_RFC7273_SYNC;
+ rtpbin->max_streams = DEFAULT_MAX_STREAMS;
/* some default SDES entries */
cname = g_strdup_printf ("user%u@host-%x", g_random_int (), g_random_int ());
@@ -2606,7 +2624,7 @@
GST_RTP_BIN_UNLOCK (rtpbin);
gst_rtp_bin_propagate_property_to_jitterbuffer (rtpbin,
"max-misorder-time", value);
- gst_rtp_bin_propagate_property_to_session (rtpbin, "max-dropout-time",
+ gst_rtp_bin_propagate_property_to_session (rtpbin, "max-misorder-time",
value);
break;
case PROP_RFC7273_SYNC:
@@ -2614,6 +2632,9 @@
gst_rtp_bin_propagate_property_to_jitterbuffer (rtpbin,
"rfc7273-sync", value);
break;
+ case PROP_MAX_STREAMS:
+ rtpbin->max_streams = g_value_get_uint (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -2699,6 +2720,9 @@
case PROP_RFC7273_SYNC:
g_value_set_boolean (value, rtpbin->rfc7273_sync);
break;
+ case PROP_MAX_STREAMS:
+ g_value_set_uint (value, rtpbin->max_streams);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
diff --git a/gst/rtpmanager/gstrtpbin.h b/gst/rtpmanager/gstrtpbin.h
index 15eb88a..fb13a47 100644
--- a/gst/rtpmanager/gstrtpbin.h
+++ b/gst/rtpmanager/gstrtpbin.h
@@ -74,6 +74,7 @@
guint32 max_dropout_time;
guint32 max_misorder_time;
gboolean rfc7273_sync;
+ guint max_streams;
/* a list of session */
GSList *sessions;
diff --git a/gst/rtpmanager/gstrtpjitterbuffer.c b/gst/rtpmanager/gstrtpjitterbuffer.c
index d9ea04c..1fc313b 100644
--- a/gst/rtpmanager/gstrtpjitterbuffer.c
+++ b/gst/rtpmanager/gstrtpjitterbuffer.c
@@ -1299,6 +1299,8 @@
rtp_jitter_buffer_set_clock_rate (priv->jbuf, priv->clock_rate);
+ gst_rtp_packet_rate_ctx_reset (&priv->packet_rate_ctx, priv->clock_rate);
+
/* The clock base is the RTP timestamp corrsponding to the npt-start value. We
* can use this to track the amount of time elapsed on the sender. */
if (gst_structure_get_uint (caps_struct, "clock-base", &val))
@@ -2632,6 +2634,8 @@
if (G_UNLIKELY (priv->clock_rate == -1))
goto no_clock_rate;
+
+ gst_rtp_packet_rate_ctx_reset (&priv->packet_rate_ctx, priv->clock_rate);
}
/* don't accept more data on EOS */
@@ -2783,8 +2787,10 @@
for (l = buffers; l; l = l->next) {
ret = gst_rtp_jitter_buffer_chain (pad, parent, l->data);
l->data = NULL;
- if (ret != GST_FLOW_OK)
+ if (ret != GST_FLOW_OK) {
+ l = l->next;
break;
+ }
}
for (; l; l = l->next)
gst_buffer_unref (l->data);
diff --git a/gst/rtpmanager/gstrtpsession.c b/gst/rtpmanager/gstrtpsession.c
index 3914f36..3688e85 100644
--- a/gst/rtpmanager/gstrtpsession.c
+++ b/gst/rtpmanager/gstrtpsession.c
@@ -1074,6 +1074,17 @@
*ntpnstime = ntpns;
}
+/* must be called with GST_RTP_SESSION_LOCK */
+static void
+signal_waiting_rtcp_thread_unlocked (GstRtpSession * rtpsession)
+{
+ if (rtpsession->priv->wait_send) {
+ GST_LOG_OBJECT (rtpsession, "signal RTCP thread");
+ rtpsession->priv->wait_send = FALSE;
+ GST_RTP_SESSION_SIGNAL (rtpsession);
+ }
+}
+
static void
rtcp_thread (GstRtpSession * rtpsession)
{
@@ -1194,8 +1205,7 @@
GST_RTP_SESSION_LOCK (rtpsession);
rtpsession->priv->stop_thread = TRUE;
- rtpsession->priv->wait_send = FALSE;
- GST_RTP_SESSION_SIGNAL (rtpsession);
+ signal_waiting_rtcp_thread_unlocked (rtpsession);
if (rtpsession->priv->id)
gst_clock_id_unschedule (rtpsession->priv->id);
GST_RTP_SESSION_UNLOCK (rtpsession);
@@ -1333,11 +1343,7 @@
GST_RTP_SESSION_LOCK (rtpsession);
if ((rtp_src = rtpsession->send_rtp_src))
gst_object_ref (rtp_src);
- if (rtpsession->priv->wait_send) {
- GST_LOG_OBJECT (rtpsession, "signal RTCP thread");
- rtpsession->priv->wait_send = FALSE;
- GST_RTP_SESSION_SIGNAL (rtpsession);
- }
+ signal_waiting_rtcp_thread_unlocked (rtpsession);
GST_RTP_SESSION_UNLOCK (rtpsession);
if (rtp_src) {
@@ -1901,11 +1907,7 @@
GST_LOG_OBJECT (rtpsession, "received RTP packet");
GST_RTP_SESSION_LOCK (rtpsession);
- if (rtpsession->priv->wait_send) {
- GST_LOG_OBJECT (rtpsession, "signal RTCP thread");
- rtpsession->priv->wait_send = FALSE;
- GST_RTP_SESSION_SIGNAL (rtpsession);
- }
+ signal_waiting_rtcp_thread_unlocked (rtpsession);
GST_RTP_SESSION_UNLOCK (rtpsession);
/* get NTP time when this packet was captured, this depends on the timestamp. */
@@ -1990,11 +1992,7 @@
GST_LOG_OBJECT (rtpsession, "received RTCP packet");
GST_RTP_SESSION_LOCK (rtpsession);
- if (rtpsession->priv->wait_send) {
- GST_LOG_OBJECT (rtpsession, "signal RTCP thread");
- rtpsession->priv->wait_send = FALSE;
- GST_RTP_SESSION_SIGNAL (rtpsession);
- }
+ signal_waiting_rtcp_thread_unlocked (rtpsession);
GST_RTP_SESSION_UNLOCK (rtpsession);
current_time = gst_clock_get_time (priv->sysclock);
diff --git a/gst/rtpmanager/rtpjitterbuffer.c b/gst/rtpmanager/rtpjitterbuffer.c
index 380948a..0ffbe54 100644
--- a/gst/rtpmanager/rtpjitterbuffer.c
+++ b/gst/rtpmanager/rtpjitterbuffer.c
@@ -1032,7 +1032,7 @@
/* ERRORS */
duplicate:
{
- GST_WARNING ("duplicate packet %d found", (gint) seqnum);
+ GST_DEBUG ("duplicate packet %d found", (gint) seqnum);
return FALSE;
}
}
diff --git a/gst/rtpmanager/rtpsession.c b/gst/rtpmanager/rtpsession.c
index 553d793..b33e909 100644
--- a/gst/rtpmanager/rtpsession.c
+++ b/gst/rtpmanager/rtpsession.c
@@ -2393,7 +2393,11 @@
value = g_strndup ((const gchar *) data, len);
- gst_structure_set (sdes, name, G_TYPE_STRING, value, NULL);
+ if (g_utf8_validate (value, -1, NULL)) {
+ gst_structure_set (sdes, name, G_TYPE_STRING, value, NULL);
+ } else {
+ GST_WARNING ("ignore SDES field %s with non-utf8 data %s", name, value);
+ }
g_free (name);
g_free (value);
@@ -2571,6 +2575,11 @@
GstClockTime round_trip_in_ns = gst_util_uint64_scale (round_trip,
GST_SECOND, 65536);
+ /* Sanity check to avoid always ignoring PLI/FIR if we receive RTCP
+ * packets with erroneous values resulting in crazy high RTT. */
+ if (round_trip_in_ns > 5 * GST_SECOND)
+ round_trip_in_ns = GST_SECOND / 2;
+
if (current_time - sess->last_keyframe_request < 2 * round_trip_in_ns) {
GST_DEBUG ("Ignoring %s request because one was send without one "
"RTT (%" GST_TIME_FORMAT " < %" GST_TIME_FORMAT ")",
@@ -4077,7 +4086,7 @@
empty_buffer = gst_buffer_get_size (buffer) == 0;
if (empty_buffer)
- g_warning ("rtpsession: Trying to send an empty RTCP packet");
+ GST_ERROR ("rtpsession: Trying to send an empty RTCP packet");
if (sess->callbacks.send_rtcp &&
!empty_buffer && (do_not_suppress || !data.may_suppress)) {
diff --git a/gst/rtpmanager/rtpsource.c b/gst/rtpmanager/rtpsource.c
index 9fe5888..b0177d4 100644
--- a/gst/rtpmanager/rtpsource.c
+++ b/gst/rtpmanager/rtpsource.c
@@ -1143,7 +1143,7 @@
g_queue_clear (src->packets);
/* duplicate or reordered packet, will be filtered by jitterbuffer. */
- GST_WARNING ("duplicate or reordered packet (seqnr %u, expected %u)",
+ GST_INFO ("duplicate or reordered packet (seqnr %u, expected %u)",
seqnr, expected);
}
}
diff --git a/gst/rtpmanager/rtpstats.c b/gst/rtpmanager/rtpstats.c
index 984bc9f..cc25dbf 100644
--- a/gst/rtpmanager/rtpstats.c
+++ b/gst/rtpmanager/rtpstats.c
@@ -27,6 +27,7 @@
ctx->clock_rate = clock_rate;
ctx->probed = FALSE;
ctx->avg_packet_rate = -1;
+ ctx->last_ts = -1;
}
guint32
@@ -41,15 +42,16 @@
return ctx->avg_packet_rate;
}
+ new_ts = ctx->last_ts;
+ gst_rtp_buffer_ext_timestamp (&new_ts, ts);
+
if (!ctx->probed) {
ctx->last_seqnum = seqnum;
- ctx->last_ts = ts;
+ ctx->last_ts = new_ts;
ctx->probed = TRUE;
return ctx->avg_packet_rate;
}
- new_ts = ctx->last_ts;
- gst_rtp_buffer_ext_timestamp (&new_ts, ts);
diff_seqnum = gst_rtp_buffer_compare_seqnum (ctx->last_seqnum, seqnum);
if (diff_seqnum <= 0 || new_ts <= ctx->last_ts) {
return ctx->avg_packet_rate;
@@ -64,6 +66,7 @@
* but it will go down again slowly.
* This is useful for bursty cases, where a lot of packets are close
* to each other and should allow a higher reorder/dropout there.
+ * Round up the new average.
*/
if (ctx->avg_packet_rate > new_packet_rate) {
ctx->avg_packet_rate = (7 * ctx->avg_packet_rate + new_packet_rate + 7) / 8;
diff --git a/gst/rtsp/Makefile.in b/gst/rtsp/Makefile.in
index 44d9127..e550688 100644
--- a/gst/rtsp/Makefile.in
+++ b/gst/rtsp/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -345,6 +346,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -451,6 +453,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -518,6 +523,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/rtsp/gstrtspsrc.c b/gst/rtsp/gstrtspsrc.c
index 58bed88..52fd737 100644
--- a/gst/rtsp/gstrtspsrc.c
+++ b/gst/rtsp/gstrtspsrc.c
@@ -5119,9 +5119,7 @@
} else if (ret == GST_FLOW_NOT_LINKED || ret < GST_FLOW_EOS) {
/* for fatal errors we post an error message, post the error before the
* EOS so the app knows about the error first. */
- GST_ELEMENT_ERROR (src, STREAM, FAILED,
- ("Internal data flow error."),
- ("streaming task paused, reason %s (%d)", reason, ret));
+ GST_ELEMENT_FLOW_ERROR (src, ret);
gst_rtspsrc_push_event (src, gst_event_new_eos ());
}
gst_rtspsrc_loop_send_cmd (src, CMD_WAIT, CMD_LOOP);
@@ -6792,8 +6790,24 @@
/* could not be set but since the request returned OK, we assume it
* was SDP, else check it. */
if (respcont) {
- if (g_ascii_strcasecmp (respcont, "application/sdp") != 0)
+ const gchar *props = strchr (respcont, ';');
+
+ if (props) {
+ gchar *mimetype = g_strndup (respcont, props - respcont);
+
+ mimetype = g_strstrip (mimetype);
+ if (g_ascii_strcasecmp (mimetype, "application/sdp") != 0) {
+ g_free (mimetype);
+ goto wrong_content_type;
+ }
+
+ /* TODO: Check for charset property and do conversions of all messages if
+ * needed. Some servers actually send that property */
+
+ g_free (mimetype);
+ } else if (g_ascii_strcasecmp (respcont, "application/sdp") != 0) {
goto wrong_content_type;
+ }
}
/* get message body and parse as SDP */
diff --git a/gst/shapewipe/Makefile.in b/gst/shapewipe/Makefile.in
index 3fde0ae..aecbc8e 100644
--- a/gst/shapewipe/Makefile.in
+++ b/gst/shapewipe/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -341,6 +342,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -447,6 +449,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -514,6 +519,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/smpte/Makefile.in b/gst/smpte/Makefile.in
index 8916318..a3a877a 100644
--- a/gst/smpte/Makefile.in
+++ b/gst/smpte/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -344,6 +345,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -450,6 +452,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -517,6 +522,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/spectrum/Makefile.in b/gst/spectrum/Makefile.in
index 528b843..6d5a75e 100644
--- a/gst/spectrum/Makefile.in
+++ b/gst/spectrum/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -342,6 +343,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -448,6 +450,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -515,6 +520,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/udp/Makefile.in b/gst/udp/Makefile.in
index 9d05a84..bf9c930 100644
--- a/gst/udp/Makefile.in
+++ b/gst/udp/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -345,6 +346,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -451,6 +453,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -518,6 +523,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/udp/gstmultiudpsink.c b/gst/udp/gstmultiudpsink.c
index fc8725a..379986c 100644
--- a/gst/udp/gstmultiudpsink.c
+++ b/gst/udp/gstmultiudpsink.c
@@ -818,6 +818,7 @@
msgs[i].vectors = &vecs[mem];
msgs[i].num_vectors = mem_nums[i];
msgs[i].num_control_messages = 0;
+ msgs[i].bytes_sent = 0;
msgs[i].control_messages = NULL;
msgs[i].address = clients[0]->addr;
mem += mem_nums[i];
diff --git a/gst/udp/gstudpsrc.c b/gst/udp/gstudpsrc.c
index efa2095..dcd99ba 100644
--- a/gst/udp/gstudpsrc.c
+++ b/gst/udp/gstudpsrc.c
@@ -285,7 +285,7 @@
if (level != IPPROTO_IPV6 || type != IPV6_PKTINFO)
return NULL;
- if (size < sizeof (struct in_pktinfo))
+ if (size < sizeof (struct in6_pktinfo))
return NULL;
pktinfo = data;
diff --git a/gst/videobox/Makefile.in b/gst/videobox/Makefile.in
index 8ef3c64..9ed9882 100644
--- a/gst/videobox/Makefile.in
+++ b/gst/videobox/Makefile.in
@@ -121,6 +121,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -369,6 +370,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -475,6 +477,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -542,6 +547,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/videocrop/Makefile.in b/gst/videocrop/Makefile.in
index 38445e4..dc9899c 100644
--- a/gst/videocrop/Makefile.in
+++ b/gst/videocrop/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -342,6 +343,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -448,6 +450,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -515,6 +520,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/videofilter/Makefile.in b/gst/videofilter/Makefile.in
index 74c2fa5..9c6e7ed 100644
--- a/gst/videofilter/Makefile.in
+++ b/gst/videofilter/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -345,6 +346,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -451,6 +453,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -518,6 +523,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/videofilter/gstvideoflip.c b/gst/videofilter/gstvideoflip.c
index beccd9d..f59f930 100644
--- a/gst/videofilter/gstvideoflip.c
+++ b/gst/videofilter/gstvideoflip.c
@@ -52,7 +52,8 @@
enum
{
PROP_0,
- PROP_METHOD
+ PROP_METHOD,
+ PROP_VIDEO_DIRECTION
/* FILL ME */
};
@@ -112,8 +113,17 @@
return video_flip_method_type;
}
+static void
+gst_video_flip_video_direction_interface_init (GstVideoDirectionInterface *
+ iface)
+{
+ /* We implement the video-direction property */
+}
+
#define gst_video_flip_parent_class parent_class
-G_DEFINE_TYPE (GstVideoFlip, gst_video_flip, GST_TYPE_VIDEO_FILTER);
+G_DEFINE_TYPE_WITH_CODE (GstVideoFlip, gst_video_flip, GST_TYPE_VIDEO_FILTER,
+ G_IMPLEMENT_INTERFACE (GST_TYPE_VIDEO_DIRECTION,
+ gst_video_flip_video_direction_interface_init))
static GstCaps *
gst_video_flip_transform_caps (GstBaseTransform * trans,
@@ -133,10 +143,10 @@
gst_structure_get_int (structure, "height", &height)) {
switch (videoflip->active_method) {
- case GST_VIDEO_FLIP_METHOD_90R:
- case GST_VIDEO_FLIP_METHOD_90L:
- case GST_VIDEO_FLIP_METHOD_TRANS:
- case GST_VIDEO_FLIP_METHOD_OTHER:
+ case GST_VIDEO_ORIENTATION_90R:
+ case GST_VIDEO_ORIENTATION_90L:
+ case GST_VIDEO_ORIENTATION_UL_LR:
+ case GST_VIDEO_ORIENTATION_UR_LL:
gst_structure_set (structure, "width", G_TYPE_INT, height,
"height", G_TYPE_INT, width, NULL);
if (gst_structure_get_fraction (structure, "pixel-aspect-ratio",
@@ -151,13 +161,16 @@
}
}
break;
- case GST_VIDEO_FLIP_METHOD_IDENTITY:
- case GST_VIDEO_FLIP_METHOD_180:
- case GST_VIDEO_FLIP_METHOD_HORIZ:
- case GST_VIDEO_FLIP_METHOD_VERT:
+ case GST_VIDEO_ORIENTATION_IDENTITY:
+ case GST_VIDEO_ORIENTATION_180:
+ case GST_VIDEO_ORIENTATION_HORIZ:
+ case GST_VIDEO_ORIENTATION_VERT:
gst_structure_set (structure, "width", G_TYPE_INT, width,
"height", G_TYPE_INT, height, NULL);
break;
+ case GST_VIDEO_ORIENTATION_CUSTOM:
+ GST_WARNING_OBJECT (videoflip, "unsuported custom orientation");
+ break;
default:
g_assert_not_reached ();
break;
@@ -221,7 +234,7 @@
dest_v_height = GST_VIDEO_FRAME_COMP_HEIGHT (dest, 2);
switch (videoflip->active_method) {
- case GST_VIDEO_FLIP_METHOD_90R:
+ case GST_VIDEO_ORIENTATION_90R:
/* Flip Y */
s = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
d = GST_VIDEO_FRAME_PLANE_DATA (dest, 0);
@@ -250,7 +263,7 @@
}
}
break;
- case GST_VIDEO_FLIP_METHOD_90L:
+ case GST_VIDEO_ORIENTATION_90L:
/* Flip Y */
s = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
d = GST_VIDEO_FRAME_PLANE_DATA (dest, 0);
@@ -279,7 +292,7 @@
}
}
break;
- case GST_VIDEO_FLIP_METHOD_180:
+ case GST_VIDEO_ORIENTATION_180:
/* Flip Y */
s = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
d = GST_VIDEO_FRAME_PLANE_DATA (dest, 0);
@@ -308,7 +321,7 @@
}
}
break;
- case GST_VIDEO_FLIP_METHOD_HORIZ:
+ case GST_VIDEO_ORIENTATION_HORIZ:
/* Flip Y */
s = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
d = GST_VIDEO_FRAME_PLANE_DATA (dest, 0);
@@ -337,7 +350,7 @@
}
}
break;
- case GST_VIDEO_FLIP_METHOD_VERT:
+ case GST_VIDEO_ORIENTATION_VERT:
/* Flip Y */
s = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
d = GST_VIDEO_FRAME_PLANE_DATA (dest, 0);
@@ -366,7 +379,7 @@
}
}
break;
- case GST_VIDEO_FLIP_METHOD_TRANS:
+ case GST_VIDEO_ORIENTATION_UL_LR:
/* Flip Y */
s = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
d = GST_VIDEO_FRAME_PLANE_DATA (dest, 0);
@@ -392,7 +405,7 @@
}
}
break;
- case GST_VIDEO_FLIP_METHOD_OTHER:
+ case GST_VIDEO_ORIENTATION_UR_LL:
/* Flip Y */
s = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
d = GST_VIDEO_FRAME_PLANE_DATA (dest, 0);
@@ -421,7 +434,7 @@
}
}
break;
- case GST_VIDEO_FLIP_METHOD_IDENTITY:
+ case GST_VIDEO_ORIENTATION_IDENTITY:
g_assert_not_reached ();
break;
default:
@@ -465,7 +478,7 @@
dest_uv_height = GST_VIDEO_FRAME_COMP_HEIGHT (dest, 1);
switch (videoflip->active_method) {
- case GST_VIDEO_FLIP_METHOD_90R:
+ case GST_VIDEO_ORIENTATION_90R:
/* Flip Y */
s = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
d = GST_VIDEO_FRAME_PLANE_DATA (dest, 0);
@@ -487,7 +500,7 @@
}
}
break;
- case GST_VIDEO_FLIP_METHOD_90L:
+ case GST_VIDEO_ORIENTATION_90L:
/* Flip Y */
s = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
d = GST_VIDEO_FRAME_PLANE_DATA (dest, 0);
@@ -509,7 +522,7 @@
}
}
break;
- case GST_VIDEO_FLIP_METHOD_180:
+ case GST_VIDEO_ORIENTATION_180:
/* Flip Y */
s = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
d = GST_VIDEO_FRAME_PLANE_DATA (dest, 0);
@@ -532,7 +545,7 @@
}
}
break;
- case GST_VIDEO_FLIP_METHOD_HORIZ:
+ case GST_VIDEO_ORIENTATION_HORIZ:
/* Flip Y */
s = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
d = GST_VIDEO_FRAME_PLANE_DATA (dest, 0);
@@ -554,7 +567,7 @@
}
}
break;
- case GST_VIDEO_FLIP_METHOD_VERT:
+ case GST_VIDEO_ORIENTATION_VERT:
/* Flip Y */
s = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
d = GST_VIDEO_FRAME_PLANE_DATA (dest, 0);
@@ -576,7 +589,7 @@
}
}
break;
- case GST_VIDEO_FLIP_METHOD_TRANS:
+ case GST_VIDEO_ORIENTATION_UL_LR:
/* Flip Y */
s = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
d = GST_VIDEO_FRAME_PLANE_DATA (dest, 0);
@@ -597,7 +610,7 @@
}
}
break;
- case GST_VIDEO_FLIP_METHOD_OTHER:
+ case GST_VIDEO_ORIENTATION_UR_LL:
/* Flip Y */
s = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
d = GST_VIDEO_FRAME_PLANE_DATA (dest, 0);
@@ -620,7 +633,7 @@
}
}
break;
- case GST_VIDEO_FLIP_METHOD_IDENTITY:
+ case GST_VIDEO_ORIENTATION_IDENTITY:
g_assert_not_reached ();
break;
default:
@@ -652,7 +665,7 @@
bpp = GST_VIDEO_FRAME_COMP_PSTRIDE (src, 0);
switch (videoflip->active_method) {
- case GST_VIDEO_FLIP_METHOD_90R:
+ case GST_VIDEO_ORIENTATION_90R:
for (y = 0; y < dh; y++) {
for (x = 0; x < dw; x++) {
for (z = 0; z < bpp; z++) {
@@ -662,7 +675,7 @@
}
}
break;
- case GST_VIDEO_FLIP_METHOD_90L:
+ case GST_VIDEO_ORIENTATION_90L:
for (y = 0; y < dh; y++) {
for (x = 0; x < dw; x++) {
for (z = 0; z < bpp; z++) {
@@ -672,7 +685,7 @@
}
}
break;
- case GST_VIDEO_FLIP_METHOD_180:
+ case GST_VIDEO_ORIENTATION_180:
for (y = 0; y < dh; y++) {
for (x = 0; x < dw; x++) {
for (z = 0; z < bpp; z++) {
@@ -682,7 +695,7 @@
}
}
break;
- case GST_VIDEO_FLIP_METHOD_HORIZ:
+ case GST_VIDEO_ORIENTATION_HORIZ:
for (y = 0; y < dh; y++) {
for (x = 0; x < dw; x++) {
for (z = 0; z < bpp; z++) {
@@ -692,7 +705,7 @@
}
}
break;
- case GST_VIDEO_FLIP_METHOD_VERT:
+ case GST_VIDEO_ORIENTATION_VERT:
for (y = 0; y < dh; y++) {
for (x = 0; x < dw; x++) {
for (z = 0; z < bpp; z++) {
@@ -702,7 +715,7 @@
}
}
break;
- case GST_VIDEO_FLIP_METHOD_TRANS:
+ case GST_VIDEO_ORIENTATION_UL_LR:
for (y = 0; y < dh; y++) {
for (x = 0; x < dw; x++) {
for (z = 0; z < bpp; z++) {
@@ -711,7 +724,7 @@
}
}
break;
- case GST_VIDEO_FLIP_METHOD_OTHER:
+ case GST_VIDEO_ORIENTATION_UR_LL:
for (y = 0; y < dh; y++) {
for (x = 0; x < dw; x++) {
for (z = 0; z < bpp; z++) {
@@ -721,7 +734,7 @@
}
}
break;
- case GST_VIDEO_FLIP_METHOD_IDENTITY:
+ case GST_VIDEO_ORIENTATION_IDENTITY:
g_assert_not_reached ();
break;
default:
@@ -762,7 +775,7 @@
bpp = y_stride;
switch (videoflip->active_method) {
- case GST_VIDEO_FLIP_METHOD_90R:
+ case GST_VIDEO_ORIENTATION_90R:
for (y = 0; y < dh; y++) {
for (x = 0; x < dw; x += 2) {
guint8 u;
@@ -789,7 +802,7 @@
}
}
break;
- case GST_VIDEO_FLIP_METHOD_90L:
+ case GST_VIDEO_ORIENTATION_90L:
for (y = 0; y < dh; y++) {
for (x = 0; x < dw; x += 2) {
guint8 u;
@@ -814,7 +827,7 @@
}
}
break;
- case GST_VIDEO_FLIP_METHOD_180:
+ case GST_VIDEO_ORIENTATION_180:
for (y = 0; y < dh; y++) {
for (x = 0; x < dw; x += 2) {
guint8 u;
@@ -838,7 +851,7 @@
}
}
break;
- case GST_VIDEO_FLIP_METHOD_HORIZ:
+ case GST_VIDEO_ORIENTATION_HORIZ:
for (y = 0; y < dh; y++) {
for (x = 0; x < dw; x += 2) {
guint8 u;
@@ -861,7 +874,7 @@
}
}
break;
- case GST_VIDEO_FLIP_METHOD_VERT:
+ case GST_VIDEO_ORIENTATION_VERT:
for (y = 0; y < dh; y++) {
for (x = 0; x < dw; x += 2) {
guint8 u;
@@ -884,7 +897,7 @@
}
}
break;
- case GST_VIDEO_FLIP_METHOD_TRANS:
+ case GST_VIDEO_ORIENTATION_UL_LR:
for (y = 0; y < dh; y++) {
for (x = 0; x < dw; x += 2) {
guint8 u;
@@ -909,7 +922,7 @@
}
}
break;
- case GST_VIDEO_FLIP_METHOD_OTHER:
+ case GST_VIDEO_ORIENTATION_UR_LL:
for (y = 0; y < dh; y++) {
for (x = 0; x < dw; x += 2) {
guint8 u;
@@ -937,7 +950,7 @@
}
}
break;
- case GST_VIDEO_FLIP_METHOD_IDENTITY:
+ case GST_VIDEO_ORIENTATION_IDENTITY:
g_assert_not_reached ();
break;
default:
@@ -961,10 +974,10 @@
/* Check that they are correct */
switch (vf->active_method) {
- case GST_VIDEO_FLIP_METHOD_90R:
- case GST_VIDEO_FLIP_METHOD_90L:
- case GST_VIDEO_FLIP_METHOD_TRANS:
- case GST_VIDEO_FLIP_METHOD_OTHER:
+ case GST_VIDEO_ORIENTATION_90R:
+ case GST_VIDEO_ORIENTATION_90L:
+ case GST_VIDEO_ORIENTATION_UL_LR:
+ case GST_VIDEO_ORIENTATION_UR_LL:
if ((in_info->width != out_info->height) ||
(in_info->height != out_info->width)) {
GST_ERROR_OBJECT (vf, "we are inverting width and height but caps "
@@ -973,12 +986,12 @@
goto beach;
}
break;
- case GST_VIDEO_FLIP_METHOD_IDENTITY:
+ case GST_VIDEO_ORIENTATION_IDENTITY:
break;
- case GST_VIDEO_FLIP_METHOD_180:
- case GST_VIDEO_FLIP_METHOD_HORIZ:
- case GST_VIDEO_FLIP_METHOD_VERT:
+ case GST_VIDEO_ORIENTATION_180:
+ case GST_VIDEO_ORIENTATION_HORIZ:
+ case GST_VIDEO_ORIENTATION_VERT:
if ((in_info->width != out_info->width) ||
(in_info->height != out_info->height)) {
GST_ERROR_OBJECT (vf, "we are keeping width and height but caps "
@@ -1039,11 +1052,17 @@
}
static void
-gst_video_flip_set_method (GstVideoFlip * videoflip, GstVideoFlipMethod method,
- gboolean from_tag)
+gst_video_flip_set_method (GstVideoFlip * videoflip,
+ GstVideoOrientationMethod method, gboolean from_tag)
{
GST_OBJECT_LOCK (videoflip);
+ if (method == GST_VIDEO_ORIENTATION_CUSTOM) {
+ GST_WARNING_OBJECT (videoflip, "unsupported custom orientation");
+ GST_OBJECT_UNLOCK (videoflip);
+ return;
+ }
+
/* Store updated method */
if (from_tag)
videoflip->tag_method = method;
@@ -1051,24 +1070,31 @@
videoflip->method = method;
/* Get the new method */
- if (videoflip->method == GST_VIDEO_FLIP_METHOD_AUTO)
+ if (videoflip->method == GST_VIDEO_ORIENTATION_AUTO)
method = videoflip->tag_method;
else
method = videoflip->method;
if (method != videoflip->active_method) {
+ GEnumValue *active_method_enum, *method_enum;
GstBaseTransform *btrans = GST_BASE_TRANSFORM (videoflip);
+ GEnumClass *enum_class =
+ g_type_class_ref (GST_TYPE_VIDEO_ORIENTATION_METHOD);
+ active_method_enum =
+ g_enum_get_value (enum_class, videoflip->active_method);
+ method_enum = g_enum_get_value (enum_class, method);
GST_DEBUG_OBJECT (videoflip, "Changing method from %s to %s",
- video_flip_methods[videoflip->active_method].value_nick,
- video_flip_methods[method].value_nick);
+ active_method_enum ? active_method_enum->value_nick : "(nil)",
+ method_enum ? method_enum->value_nick : "(nil)");
+ g_type_class_unref (enum_class);
videoflip->active_method = method;
GST_OBJECT_UNLOCK (videoflip);
gst_base_transform_set_passthrough (btrans,
- method == GST_VIDEO_FLIP_METHOD_IDENTITY);
+ method == GST_VIDEO_ORIENTATION_IDENTITY);
gst_base_transform_reconfigure_src (btrans);
} else {
GST_OBJECT_UNLOCK (videoflip);
@@ -1096,13 +1122,18 @@
gst_video_flip_transform_frame (GstVideoFilter * vfilter,
GstVideoFrame * in_frame, GstVideoFrame * out_frame)
{
+ GEnumClass *enum_class;
+ GEnumValue *active_method_enum;
GstVideoFlip *videoflip = GST_VIDEO_FLIP (vfilter);
if (G_UNLIKELY (videoflip->process == NULL))
goto not_negotiated;
+ enum_class = g_type_class_ref (GST_TYPE_VIDEO_ORIENTATION_METHOD);
+ active_method_enum = g_enum_get_value (enum_class, videoflip->active_method);
GST_LOG_OBJECT (videoflip, "videoflip: flipping (%s)",
- video_flip_methods[videoflip->active_method].value_nick);
+ active_method_enum ? active_method_enum->value_nick : "(nil)");
+ g_type_class_unref (enum_class);
GST_OBJECT_LOCK (videoflip);
videoflip->process (videoflip, out_frame, in_frame);
@@ -1138,31 +1169,31 @@
gst_structure_get_double (structure, "pointer_y", &y)) {
GST_DEBUG_OBJECT (vf, "converting %fx%f", x, y);
switch (vf->active_method) {
- case GST_VIDEO_FLIP_METHOD_90R:
+ case GST_VIDEO_ORIENTATION_90R:
new_x = y;
new_y = out_info->width - x;
break;
- case GST_VIDEO_FLIP_METHOD_90L:
+ case GST_VIDEO_ORIENTATION_90L:
new_x = out_info->height - y;
new_y = x;
break;
- case GST_VIDEO_FLIP_METHOD_OTHER:
+ case GST_VIDEO_ORIENTATION_UR_LL:
new_x = out_info->height - y;
new_y = out_info->width - x;
break;
- case GST_VIDEO_FLIP_METHOD_TRANS:
+ case GST_VIDEO_ORIENTATION_UL_LR:
new_x = y;
new_y = x;
break;
- case GST_VIDEO_FLIP_METHOD_180:
+ case GST_VIDEO_ORIENTATION_180:
new_x = out_info->width - x;
new_y = out_info->height - y;
break;
- case GST_VIDEO_FLIP_METHOD_HORIZ:
+ case GST_VIDEO_ORIENTATION_HORIZ:
new_x = out_info->width - x;
new_y = y;
break;
- case GST_VIDEO_FLIP_METHOD_VERT:
+ case GST_VIDEO_ORIENTATION_VERT:
new_x = x;
new_y = out_info->height - y;
break;
@@ -1201,21 +1232,21 @@
if (gst_tag_list_get_string (taglist, "image-orientation", &orientation)) {
if (!g_strcmp0 ("rotate-0", orientation))
- gst_video_flip_set_method (vf, GST_VIDEO_FLIP_METHOD_IDENTITY, TRUE);
+ gst_video_flip_set_method (vf, GST_VIDEO_ORIENTATION_IDENTITY, TRUE);
else if (!g_strcmp0 ("rotate-90", orientation))
- gst_video_flip_set_method (vf, GST_VIDEO_FLIP_METHOD_90R, TRUE);
+ gst_video_flip_set_method (vf, GST_VIDEO_ORIENTATION_90R, TRUE);
else if (!g_strcmp0 ("rotate-180", orientation))
- gst_video_flip_set_method (vf, GST_VIDEO_FLIP_METHOD_180, TRUE);
+ gst_video_flip_set_method (vf, GST_VIDEO_ORIENTATION_180, TRUE);
else if (!g_strcmp0 ("rotate-270", orientation))
- gst_video_flip_set_method (vf, GST_VIDEO_FLIP_METHOD_90L, TRUE);
+ gst_video_flip_set_method (vf, GST_VIDEO_ORIENTATION_90L, TRUE);
else if (!g_strcmp0 ("flip-rotate-0", orientation))
- gst_video_flip_set_method (vf, GST_VIDEO_FLIP_METHOD_HORIZ, TRUE);
+ gst_video_flip_set_method (vf, GST_VIDEO_ORIENTATION_HORIZ, TRUE);
else if (!g_strcmp0 ("flip-rotate-90", orientation))
- gst_video_flip_set_method (vf, GST_VIDEO_FLIP_METHOD_TRANS, TRUE);
+ gst_video_flip_set_method (vf, GST_VIDEO_ORIENTATION_UL_LR, TRUE);
else if (!g_strcmp0 ("flip-rotate-180", orientation))
- gst_video_flip_set_method (vf, GST_VIDEO_FLIP_METHOD_VERT, TRUE);
+ gst_video_flip_set_method (vf, GST_VIDEO_ORIENTATION_VERT, TRUE);
else if (!g_strcmp0 ("flip-rotate-270", orientation))
- gst_video_flip_set_method (vf, GST_VIDEO_FLIP_METHOD_OTHER, TRUE);
+ gst_video_flip_set_method (vf, GST_VIDEO_ORIENTATION_UR_LL, TRUE);
g_free (orientation);
}
@@ -1237,6 +1268,7 @@
switch (prop_id) {
case PROP_METHOD:
+ case PROP_VIDEO_DIRECTION:
gst_video_flip_set_method (videoflip, g_value_get_enum (value), FALSE);
break;
default:
@@ -1253,6 +1285,7 @@
switch (prop_id) {
case PROP_METHOD:
+ case PROP_VIDEO_DIRECTION:
g_value_set_enum (value, videoflip->method);
break;
default:
@@ -1275,10 +1308,13 @@
gobject_class->get_property = gst_video_flip_get_property;
g_object_class_install_property (gobject_class, PROP_METHOD,
- g_param_spec_enum ("method", "method", "method",
+ g_param_spec_enum ("method", "method",
+ "method (deprecated, use video-direction instead)",
GST_TYPE_VIDEO_FLIP_METHOD, PROP_METHOD_DEFAULT,
GST_PARAM_CONTROLLABLE | G_PARAM_READWRITE | G_PARAM_CONSTRUCT |
G_PARAM_STATIC_STRINGS));
+ g_object_class_override_property (gobject_class, PROP_VIDEO_DIRECTION,
+ "video-direction");
gst_element_class_set_static_metadata (gstelement_class, "Video flipper",
"Filter/Effect/Video",
@@ -1306,5 +1342,5 @@
{
/* AUTO is not valid for active method, this is just to ensure we setup the
* method in gst_video_flip_set_method() */
- videoflip->active_method = GST_VIDEO_FLIP_METHOD_AUTO;
+ videoflip->active_method = GST_VIDEO_ORIENTATION_AUTO;
}
diff --git a/gst/videofilter/gstvideoflip.h b/gst/videofilter/gstvideoflip.h
index 490de29..0fca8e9 100644
--- a/gst/videofilter/gstvideoflip.h
+++ b/gst/videofilter/gstvideoflip.h
@@ -75,9 +75,9 @@
GstVideoFilter videofilter;
/* < private > */
- GstVideoFlipMethod method;
- GstVideoFlipMethod tag_method;
- GstVideoFlipMethod active_method;
+ GstVideoOrientationMethod method;
+ GstVideoOrientationMethod tag_method;
+ GstVideoOrientationMethod active_method;
void (*process) (GstVideoFlip *videoflip, GstVideoFrame *dest, const GstVideoFrame *src);
};
diff --git a/gst/videomixer/Makefile.in b/gst/videomixer/Makefile.in
index 0012aee..95c1dff 100644
--- a/gst/videomixer/Makefile.in
+++ b/gst/videomixer/Makefile.in
@@ -121,6 +121,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -370,6 +371,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -476,6 +478,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -543,6 +548,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/wavenc/Makefile.in b/gst/wavenc/Makefile.in
index 5947dcb..44df2b9 100644
--- a/gst/wavenc/Makefile.in
+++ b/gst/wavenc/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -341,6 +342,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -447,6 +449,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -514,6 +519,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/gst/wavparse/Makefile.am b/gst/wavparse/Makefile.am
index d3f1818..4d4247e 100644
--- a/gst/wavparse/Makefile.am
+++ b/gst/wavparse/Makefile.am
@@ -10,6 +10,7 @@
-lgstriff-@GST_API_VERSION@ \
-lgstaudio-@GST_API_VERSION@ \
-lgsttag-@GST_API_VERSION@ \
+ -lgstpbutils-@GST_API_VERSION@ \
$(GST_BASE_LIBS) \
$(GST_LIBS) \
$(LIBM)
diff --git a/gst/wavparse/Makefile.in b/gst/wavparse/Makefile.in
index 93b8128..40de741 100644
--- a/gst/wavparse/Makefile.in
+++ b/gst/wavparse/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -342,6 +343,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -448,6 +450,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -515,6 +520,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
@@ -577,6 +583,7 @@
-lgstriff-@GST_API_VERSION@ \
-lgstaudio-@GST_API_VERSION@ \
-lgsttag-@GST_API_VERSION@ \
+ -lgstpbutils-@GST_API_VERSION@ \
$(GST_BASE_LIBS) \
$(GST_LIBS) \
$(LIBM)
diff --git a/gst/wavparse/gstwavparse.c b/gst/wavparse/gstwavparse.c
index a83b068..6650d18 100644
--- a/gst/wavparse/gstwavparse.c
+++ b/gst/wavparse/gstwavparse.c
@@ -54,6 +54,7 @@
#include "gstwavparse.h"
#include "gst/riff/riff-media.h"
#include <gst/base/gsttypefindhelper.h>
+#include <gst/pbutils/descriptions.h>
#include <gst/gst-i18n-plugin.h>
GST_DEBUG_CATEGORY_STATIC (wavparse_debug);
@@ -1223,9 +1224,25 @@
wav->got_fmt = TRUE;
- if (codec_name) {
+ if (wav->tags == NULL)
wav->tags = gst_tag_list_new_empty ();
+ {
+ GstCaps *templ_caps = gst_pad_get_pad_template_caps (wav->sinkpad);
+ gst_pb_utils_add_codec_description_to_tag_list (wav->tags,
+ GST_TAG_CONTAINER_FORMAT, templ_caps);
+ gst_caps_unref (templ_caps);
+ }
+
+ /* If bps is nonzero, then we do have a valid bitrate that can be
+ * announced in a tag list. */
+ if (wav->bps) {
+ guint bitrate = wav->bps * 8;
+ gst_tag_list_add (wav->tags, GST_TAG_MERGE_REPLACE,
+ GST_TAG_BITRATE, bitrate, NULL);
+ }
+
+ if (codec_name) {
gst_tag_list_add (wav->tags, GST_TAG_MERGE_REPLACE,
GST_TAG_AUDIO_CODEC, codec_name, NULL);
@@ -2229,9 +2246,7 @@
} else if (ret == GST_FLOW_NOT_LINKED || ret < GST_FLOW_EOS) {
/* for fatal errors we post an error message, post the error
* first so the app knows about the error first. */
- GST_ELEMENT_ERROR (wav, STREAM, FAILED,
- (_("Internal data flow error.")),
- ("streaming task paused, reason %s (%d)", reason, ret));
+ GST_ELEMENT_FLOW_ERROR (wav, ret);
gst_pad_push_event (wav->srcpad, gst_event_new_eos ());
}
return;
diff --git a/gst/y4m/Makefile.in b/gst/y4m/Makefile.in
index 403a92e..47600eb 100644
--- a/gst/y4m/Makefile.in
+++ b/gst/y4m/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -341,6 +342,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -447,6 +449,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -514,6 +519,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/ltmain.sh b/ltmain.sh
index 147d758..a736cf9 100644
--- a/ltmain.sh
+++ b/ltmain.sh
@@ -31,7 +31,7 @@
PROGRAM=libtool
PACKAGE=libtool
-VERSION="2.4.6 Debian-2.4.6-0.1"
+VERSION="2.4.6 Debian-2.4.6-2"
package_revision=2.4.6
@@ -2068,7 +2068,7 @@
compiler: $LTCC
compiler flags: $LTCFLAGS
linker: $LD (gnu? $with_gnu_ld)
- version: $progname (GNU libtool) 2.4.6
+ version: $progname $scriptversion Debian-2.4.6-2
automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q`
diff --git a/m4/Makefile.in b/m4/Makefile.in
index 9dc24c0..2d47c19 100644
--- a/m4/Makefile.in
+++ b/m4/Makefile.in
@@ -97,6 +97,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -255,6 +256,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -361,6 +363,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -428,6 +433,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/m4/libtool.m4 b/m4/libtool.m4
index 10ab284..ee80844 100644
--- a/m4/libtool.m4
+++ b/m4/libtool.m4
@@ -728,7 +728,6 @@
cat <<_LT_EOF >> "$cfgfile"
#! $SHELL
# Generated automatically by $as_me ($PACKAGE) $VERSION
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
# NOTE: Changes made to this file will be lost: look at ltmain.sh.
# Provide generalized library-building support services.
diff --git a/pkgconfig/Makefile.in b/pkgconfig/Makefile.in
index 3944f08..921639d 100644
--- a/pkgconfig/Makefile.in
+++ b/pkgconfig/Makefile.in
@@ -97,6 +97,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -256,6 +257,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -362,6 +364,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -429,6 +434,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/po/af.gmo b/po/af.gmo
index a0db1a7..f1578a6 100644
--- a/po/af.gmo
+++ b/po/af.gmo
Binary files differ
diff --git a/po/af.po b/po/af.po
index 52f6a6b..41d9bdd 100644
--- a/po/af.po
+++ b/po/af.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins 0.7.6\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2004-03-18 14:16+0200\n"
"Last-Translator: Petri Jooste <rkwjpj@puk.ac.za>\n"
"Language-Team: Afrikaans <i18n@af.org.za>\n"
@@ -55,9 +55,6 @@
msgid "Server sent bad data."
msgstr ""
-msgid "Internal data stream error."
-msgstr ""
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr "Geen of ongeldige klanktoevoer, AVI-stroom sal korrup wees."
@@ -86,9 +83,6 @@
msgid "This file contains too many streams. Only playing first %d"
msgstr ""
-msgid "Internal data flow error."
-msgstr ""
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
diff --git a/po/az.gmo b/po/az.gmo
index c50fc7a..65d4a77 100644
--- a/po/az.gmo
+++ b/po/az.gmo
Binary files differ
diff --git a/po/az.po b/po/az.po
index 19d13c1..1a2bbc4 100644
--- a/po/az.po
+++ b/po/az.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-0.8.0\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2004-03-19 18:29+0200\n"
"Last-Translator: Metin Amiroff <metin@karegen.com>\n"
"Language-Team: Azerbaijani <translation-team-az@lists.sourceforge.net>\n"
@@ -56,9 +56,6 @@
msgid "Server sent bad data."
msgstr ""
-msgid "Internal data stream error."
-msgstr ""
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr "Səhv ya da olmayan audio girişi, AVI yayımı pozulacaqdır."
@@ -87,9 +84,6 @@
msgid "This file contains too many streams. Only playing first %d"
msgstr ""
-msgid "Internal data flow error."
-msgstr ""
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
diff --git a/po/bg.gmo b/po/bg.gmo
index bc14aef..2610551 100644
--- a/po/bg.gmo
+++ b/po/bg.gmo
Binary files differ
diff --git a/po/bg.po b/po/bg.po
index 5b8f64d..e3df66f 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 1.7.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2016-02-21 21:03+0200\n"
"Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
"Language-Team: Bulgarian <dict@ludost.net>\n"
@@ -54,9 +54,6 @@
msgid "Server sent bad data."
msgstr "Сървърът изпрати лоши данни."
-msgid "Internal data stream error."
-msgstr "Вътрешна грешка на потока от данни."
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr "Аудио входът липсва или е грешен. Потокът с AVI ще бъде повреден."
@@ -86,9 +83,6 @@
msgstr ""
"Този файл съдържа прекалено много потоци. Изпълняват се само първите %d"
-msgid "Internal data flow error."
-msgstr "Вътрешна грешка в потока с данни."
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
@@ -427,3 +421,9 @@
msgid "Cannot operate without a clock"
msgstr "Работата без часовник е невъзможна."
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Вътрешна грешка на потока от данни."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Вътрешна грешка в потока с данни."
diff --git a/po/ca.gmo b/po/ca.gmo
index fcade88..c1d6fcc 100644
--- a/po/ca.gmo
+++ b/po/ca.gmo
Binary files differ
diff --git a/po/ca.po b/po/ca.po
index 33798cb..1d7d7ac 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -9,7 +9,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 0.10.28.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2012-01-01 14:19+0100\n"
"Last-Translator: Gil Forcada <gforcada@gnome.org>\n"
"Language-Team: Catalan <ca@dodds.net>\n"
@@ -58,9 +58,6 @@
msgid "Server sent bad data."
msgstr "El servidor ha enviat dades errònies."
-msgid "Internal data stream error."
-msgstr "S'ha produït un error intern de flux de dades."
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr "Manca o no és vàlida l'entrada d'àudio, el flux AVI estarà malmès."
@@ -90,9 +87,6 @@
msgstr ""
"Aquest fitxer conté massa fluxos. Només s'estan reproduint els primers %d"
-msgid "Internal data flow error."
-msgstr "S'ha produït un error intern de flux de dades."
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
@@ -470,6 +464,12 @@
msgid "Cannot operate without a clock"
msgstr "No es pot operar sense un rellotge"
+#~ msgid "Internal data stream error."
+#~ msgstr "S'ha produït un error intern de flux de dades."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "S'ha produït un error intern de flux de dades."
+
#, fuzzy
#~ msgid "Device '%s' does not support video capture"
#~ msgstr "El dispositiu «%s» no és un dispositiu de sortida."
diff --git a/po/cs.gmo b/po/cs.gmo
index 22cf1c0..f679647 100644
--- a/po/cs.gmo
+++ b/po/cs.gmo
Binary files differ
diff --git a/po/cs.po b/po/cs.po
index cfaecd1..483bb16 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -10,7 +10,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good-1.7.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2016-02-27 16:40+0100\n"
"Last-Translator: Marek Černocký <marek@manet.cz>\n"
"Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
@@ -57,9 +57,6 @@
msgid "Server sent bad data."
msgstr "Server odeslal chybná data."
-msgid "Internal data stream error."
-msgstr "Vnitřní chyba datového proudu."
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr "Žádný nebo neplatný zvukový vstup, proud AVI bude poškozen."
@@ -88,9 +85,6 @@
msgid "This file contains too many streams. Only playing first %d"
msgstr "Tento soubor obsahuje příliš mnoho proudů. Přehrává se pouze první %d"
-msgid "Internal data flow error."
-msgstr "Vnitřní chyba datového toku."
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
@@ -429,3 +423,9 @@
msgid "Cannot operate without a clock"
msgstr "Není možné fungovat bez hodin"
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Vnitřní chyba datového proudu."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Vnitřní chyba datového toku."
diff --git a/po/da.gmo b/po/da.gmo
index 0f4b838..cace6fd 100644
--- a/po/da.gmo
+++ b/po/da.gmo
Binary files differ
diff --git a/po/da.po b/po/da.po
index b860f03..f1bb97c 100644
--- a/po/da.po
+++ b/po/da.po
@@ -11,7 +11,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good-1.7.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2016-03-27 23:54+0200\n"
"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
@@ -57,9 +57,6 @@
msgid "Server sent bad data."
msgstr "Server sendte ugyldige data."
-msgid "Internal data stream error."
-msgstr "Intern datastrømsfejl."
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr "Ingen eller defekt inddatalyd, AVI-sekvens vil blive ødelagt."
@@ -91,9 +88,6 @@
msgid "This file contains too many streams. Only playing first %d"
msgstr "Denne fil indeholder for mange strømme. Afspil først kun %d"
-msgid "Internal data flow error."
-msgstr "Intern datastrømsfejl."
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
@@ -432,5 +426,11 @@
msgid "Cannot operate without a clock"
msgstr "Kan ikke fungere uden et ur"
+#~ msgid "Internal data stream error."
+#~ msgstr "Intern datastrømsfejl."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Intern datastrømsfejl."
+
#~ msgid "Device '%s' does not support video capture"
#~ msgstr "Enheden »%s« understøtter ikke videooptagelse"
diff --git a/po/de.gmo b/po/de.gmo
index d08cabf..2dba3a0 100644
--- a/po/de.gmo
+++ b/po/de.gmo
Binary files differ
diff --git a/po/de.po b/po/de.po
index b184296..d627439 100644
--- a/po/de.po
+++ b/po/de.po
@@ -14,7 +14,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 1.7.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2016-02-22 23:42+0100\n"
"Last-Translator: Christian Kirbach <christian.kirbach@gmail.com>\n"
"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
@@ -63,9 +63,6 @@
msgid "Server sent bad data."
msgstr "Server gab unerwartete Daten zurück."
-msgid "Internal data stream error."
-msgstr "Interner Datenstromfehler."
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr "Kein oder ungültiger Eingabeton, der AVI-Strom wird fehlerhaft sein."
@@ -98,9 +95,6 @@
"Diese Datei enthält zu viele Ströme. Es werden nur die ersten %d "
"wiedergegeben"
-msgid "Internal data flow error."
-msgstr "Interner Datenstromfehler."
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
@@ -451,6 +445,12 @@
msgid "Cannot operate without a clock"
msgstr "Es kann nicht ohne einen Taktgeber gearbeitet werden."
+#~ msgid "Internal data stream error."
+#~ msgstr "Interner Datenstromfehler."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Interner Datenstromfehler."
+
#~ msgid "Device '%s' does not support video capture"
#~ msgstr "Gerät »%s« unterstützt keine Videoaufnahme"
diff --git a/po/el.gmo b/po/el.gmo
index bcf5998..aa7f41c 100644
--- a/po/el.gmo
+++ b/po/el.gmo
Binary files differ
diff --git a/po/el.po b/po/el.po
index cb018bb..3cb143a 100644
--- a/po/el.po
+++ b/po/el.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 0.10.28.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2012-05-05 19:05+0100\n"
"Last-Translator: Savvas Radevic <vicedar@gmail.com>\n"
"Language-Team: Greek <team@lists.gnome.gr>\n"
@@ -57,9 +57,6 @@
msgid "Server sent bad data."
msgstr "Ο διακομιστής έστειλε λάθος δεδομένα."
-msgid "Internal data stream error."
-msgstr "Εσωτερικό σφάλμα ροής δεδομένων."
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr "Καμία ή άκυρη εισαγωγή ήχου, η AVI ροή θα καταρρεύσει."
@@ -88,9 +85,6 @@
msgid "This file contains too many streams. Only playing first %d"
msgstr "Αυτό το αρχείο περιέχει πολλές ροές. Αναπαράγεται μόνο η πρώτη %d"
-msgid "Internal data flow error."
-msgstr "Εσωτερικό σφάλμα ροής δεδομένων."
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
@@ -446,6 +440,12 @@
#~ msgid "Failed to query sound server capabilities"
#~ msgstr "Αποτυχία αναζήτησης των δυνατοτήτων του διακομιστή ήχου"
+#~ msgid "Internal data stream error."
+#~ msgstr "Εσωτερικό σφάλμα ροής δεδομένων."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Εσωτερικό σφάλμα ροής δεδομένων."
+
#~ msgid "Bass"
#~ msgstr "Μπάσα"
diff --git a/po/en_GB.gmo b/po/en_GB.gmo
index 6149a13..d9cd4a5 100644
--- a/po/en_GB.gmo
+++ b/po/en_GB.gmo
Binary files differ
diff --git a/po/en_GB.po b/po/en_GB.po
index 41d3716..15ae1e5 100644
--- a/po/en_GB.po
+++ b/po/en_GB.po
@@ -6,7 +6,7 @@
msgstr ""
"Project-Id-Version: gst-plugins 0.8.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2004-04-26 10:41-0400\n"
"Last-Translator: Gareth Owen <gowen72@yahoo.com>\n"
"Language-Team: English (British) <en_gb@li.org>\n"
@@ -55,9 +55,6 @@
msgid "Server sent bad data."
msgstr ""
-msgid "Internal data stream error."
-msgstr ""
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr "No or invalid input audio, AVI stream will be corrupt."
@@ -86,9 +83,6 @@
msgid "This file contains too many streams. Only playing first %d"
msgstr ""
-msgid "Internal data flow error."
-msgstr ""
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
diff --git a/po/eo.gmo b/po/eo.gmo
index b701d35..89ddba6 100644
--- a/po/eo.gmo
+++ b/po/eo.gmo
Binary files differ
diff --git a/po/eo.po b/po/eo.po
index 4c270ae..e3f8381 100644
--- a/po/eo.po
+++ b/po/eo.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 0.10.28.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2011-06-04 21:48+0100\n"
"Last-Translator: Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>\n"
"Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
@@ -53,9 +53,6 @@
msgid "Server sent bad data."
msgstr ""
-msgid "Internal data stream error."
-msgstr "Interna datumflu-eraro."
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr ""
@@ -84,9 +81,6 @@
msgid "This file contains too many streams. Only playing first %d"
msgstr ""
-msgid "Internal data flow error."
-msgstr ""
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
@@ -408,6 +402,9 @@
msgid "Cannot operate without a clock"
msgstr ""
+#~ msgid "Internal data stream error."
+#~ msgstr "Interna datumflu-eraro."
+
#~ msgid "Bass"
#~ msgstr "Baso"
diff --git a/po/es.gmo b/po/es.gmo
index 6ca1b99..35c5cfc 100644
--- a/po/es.gmo
+++ b/po/es.gmo
Binary files differ
diff --git a/po/es.po b/po/es.po
index 307734a..f3edfa0 100644
--- a/po/es.po
+++ b/po/es.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 0.10.26.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2011-02-12 18:30+0100\n"
"Last-Translator: Jorge González González <aloriel@gmail.com>\n"
"Language-Team: Spanish <es@li.org>\n"
@@ -56,9 +56,6 @@
msgid "Server sent bad data."
msgstr "El servidor envió datos erróneos."
-msgid "Internal data stream error."
-msgstr "Error interno de flujo de datos."
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr "El audio no existe o no es válido, el flujo AVI estará corrupto."
@@ -89,9 +86,6 @@
msgstr ""
"Este archivo contiene demasiados flujos. Sólo se reproducirá el primer %d"
-msgid "Internal data flow error."
-msgstr "Error en el flujo de datos interno."
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
@@ -466,6 +460,12 @@
msgid "Cannot operate without a clock"
msgstr "No se puede operar sin reloj"
+#~ msgid "Internal data stream error."
+#~ msgstr "Error interno de flujo de datos."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Error en el flujo de datos interno."
+
#, fuzzy
#~ msgid "Device '%s' does not support video capture"
#~ msgstr "El dispositivo «%s» no es un dispositivo de salida."
diff --git a/po/eu.gmo b/po/eu.gmo
index 0799966..c393772 100644
--- a/po/eu.gmo
+++ b/po/eu.gmo
Binary files differ
diff --git a/po/eu.po b/po/eu.po
index e848654..3377c78 100644
--- a/po/eu.po
+++ b/po/eu.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good-0.10.18.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2010-03-25 12:37+0100\n"
"Last-Translator: Mikel Olasagasti Uranga <hey_neken@mundurat.net>\n"
"Language-Team: Basque <translation-team-eu@lists.sourceforge.net>\n"
@@ -57,9 +57,6 @@
msgid "Server sent bad data."
msgstr ""
-msgid "Internal data stream error."
-msgstr "Datu-korrontearen barne-errorea."
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr ""
"Ez dago audio-sarrerarik, edo baliogabea da. AVI korrontea hondatua egongo "
@@ -92,9 +89,6 @@
msgstr ""
"Fitxategi horrek korronte gehiegi ditu. Erreproduzitu soilik lehen %d(r)ak"
-msgid "Internal data flow error."
-msgstr "Datu-fluxuaren barne-errorea."
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
@@ -460,6 +454,12 @@
msgid "Cannot operate without a clock"
msgstr "Ezin du funtzionatu erlojurik gabe"
+#~ msgid "Internal data stream error."
+#~ msgstr "Datu-korrontearen barne-errorea."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Datu-fluxuaren barne-errorea."
+
#, fuzzy
#~ msgid "Device '%s' does not support video capture"
#~ msgstr "'%s' gailua ez da irteerako gailu bat."
diff --git a/po/fi.gmo b/po/fi.gmo
index 6130182..65da6dc 100644
--- a/po/fi.gmo
+++ b/po/fi.gmo
Binary files differ
diff --git a/po/fi.po b/po/fi.po
index b374076..9e5339d 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -11,7 +11,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 0.10.25.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2010-11-17 23:03+0200\n"
"Last-Translator: Tommi Vainikainen <Tommi.Vainikainen@iki.fi>\n"
"Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
@@ -58,9 +58,6 @@
msgid "Server sent bad data."
msgstr "Palvelin lähetti virheellistä dataa."
-msgid "Internal data stream error."
-msgstr "Sisäisen tietovirran virhe."
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr ""
"Ääntä ei ole tai äänilähde on viallinen, AVI-virta tulee olemaan "
@@ -91,9 +88,6 @@
msgid "This file contains too many streams. Only playing first %d"
msgstr "Tiedosto sisältää useita virtoja. Soitetaan vain ensimmäiset %d"
-msgid "Internal data flow error."
-msgstr "Sisäisen tietovirran virhe."
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
@@ -438,6 +432,12 @@
msgid "Cannot operate without a clock"
msgstr "Ei voitu toimia ilman kelloa"
+#~ msgid "Internal data stream error."
+#~ msgstr "Sisäisen tietovirran virhe."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Sisäisen tietovirran virhe."
+
#, fuzzy
#~ msgid "Device '%s' does not support video capture"
#~ msgstr "Laite ”%s” ei ole ulostulolaite."
diff --git a/po/fr.gmo b/po/fr.gmo
index 9ad0c66..11f56b7 100644
--- a/po/fr.gmo
+++ b/po/fr.gmo
Binary files differ
diff --git a/po/fr.po b/po/fr.po
index d0c7adc..e3639f8 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -10,7 +10,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 1.7.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2016-02-20 16:27+0100\n"
"Last-Translator: Stéphane Aulery <lkppo@free.fr>\n"
"Language-Team: French <traduc@traduc.org>\n"
@@ -57,9 +57,6 @@
msgid "Server sent bad data."
msgstr "Le serveur a envoyé de mauvaises données."
-msgid "Internal data stream error."
-msgstr "Erreur du flux de données interne."
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr "Entrée audio absente ou non valide, le flux AVI sera corrompu."
@@ -90,9 +87,6 @@
msgid "This file contains too many streams. Only playing first %d"
msgstr "Ce fichier contient trop de flux. Seuls les %d premiers seront lus"
-msgid "Internal data flow error."
-msgstr "Erreur du flux de données interne."
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
@@ -459,3 +453,9 @@
msgid "Cannot operate without a clock"
msgstr "Impossible de fonctionner sans horloge"
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Erreur du flux de données interne."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Erreur du flux de données interne."
diff --git a/po/gl.gmo b/po/gl.gmo
index 0465f3d..9af1e42 100644
--- a/po/gl.gmo
+++ b/po/gl.gmo
Binary files differ
diff --git a/po/gl.po b/po/gl.po
index 8697bb9..c6320af 100644
--- a/po/gl.po
+++ b/po/gl.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 1.0.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2012-12-15 03:46+0200\n"
"Last-Translator: Fran Dieguez <frandieguez@ubuntu.com>\n"
"Language-Team: Galician <proxecto@trasno.net>\n"
@@ -58,9 +58,6 @@
msgid "Server sent bad data."
msgstr "O servidor enviou datos erróneos."
-msgid "Internal data stream error."
-msgstr "Produciuse un erro no fluxo de datos interno."
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr "O audio non existe ou non é válido, o fluxo AVI está corrompido."
@@ -90,9 +87,6 @@
msgstr ""
"Este ficheiro contén demasiados fluxos. Só se reproducirá o primeiro %d"
-msgid "Internal data flow error."
-msgstr "Produciuse un erro interno no fluxo de datos."
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
@@ -459,6 +453,12 @@
msgid "Cannot operate without a clock"
msgstr "Non é posíbel operar sen reloxo"
+#~ msgid "Internal data stream error."
+#~ msgstr "Produciuse un erro no fluxo de datos interno."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Produciuse un erro interno no fluxo de datos."
+
#~ msgid "Device '%s' does not support video capture"
#~ msgstr "O dispositivo «%s» non admite a captura de vídeo."
diff --git a/po/gst-plugins-good-1.0.pot b/po/gst-plugins-good-1.0.pot
index 917f580..21e46de 100644
--- a/po/gst-plugins-good-1.0.pot
+++ b/po/gst-plugins-good-1.0.pot
@@ -5,9 +5,9 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: gst-plugins-good 1.9.1\n"
+"Project-Id-Version: gst-plugins-good 1.9.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -41,35 +41,31 @@
msgid "No URL set."
msgstr ""
-#: ext/soup/gstsouphttpsrc.c:1222
+#: ext/soup/gstsouphttpsrc.c:1227
msgid "Server does not support seeking."
msgstr ""
-#: ext/soup/gstsouphttpsrc.c:1269
+#: ext/soup/gstsouphttpsrc.c:1281
msgid "Could not resolve server name."
msgstr ""
-#: ext/soup/gstsouphttpsrc.c:1275
+#: ext/soup/gstsouphttpsrc.c:1287
msgid "Could not establish connection to server."
msgstr ""
-#: ext/soup/gstsouphttpsrc.c:1280
+#: ext/soup/gstsouphttpsrc.c:1292
msgid "Secure connection setup failed."
msgstr ""
-#: ext/soup/gstsouphttpsrc.c:1288
+#: ext/soup/gstsouphttpsrc.c:1300
msgid ""
"A network error occurred, or the server closed the connection unexpectedly."
msgstr ""
-#: ext/soup/gstsouphttpsrc.c:1295
+#: ext/soup/gstsouphttpsrc.c:1307
msgid "Server sent bad data."
msgstr ""
-#: gst/avi/gstavidemux.c:5704
-msgid "Internal data stream error."
-msgstr ""
-
#: gst/avi/gstavimux.c:1832
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr ""
@@ -78,50 +74,46 @@
msgid "This file contains no playable streams."
msgstr ""
-#: gst/isomp4/qtdemux.c:714 gst/isomp4/qtdemux.c:6170 gst/isomp4/qtdemux.c:6237
-#: gst/isomp4/qtdemux.c:6526
+#: gst/isomp4/qtdemux.c:714 gst/isomp4/qtdemux.c:6165 gst/isomp4/qtdemux.c:6232
+#: gst/isomp4/qtdemux.c:6521
msgid "This file is invalid and cannot be played."
msgstr ""
-#: gst/isomp4/qtdemux.c:2742
+#: gst/isomp4/qtdemux.c:2737
msgid "Cannot play stream because it is encrypted with PlayReady DRM."
msgstr ""
-#: gst/isomp4/qtdemux.c:3859 gst/isomp4/qtdemux.c:7259
-#: gst/isomp4/qtdemux.c:7266 gst/isomp4/qtdemux.c:8100
-#: gst/isomp4/qtdemux.c:8529 gst/isomp4/qtdemux.c:8536
-#: gst/isomp4/qtdemux.c:10901
+#: gst/isomp4/qtdemux.c:3854 gst/isomp4/qtdemux.c:7254
+#: gst/isomp4/qtdemux.c:7261 gst/isomp4/qtdemux.c:8095
+#: gst/isomp4/qtdemux.c:8524 gst/isomp4/qtdemux.c:8531
+#: gst/isomp4/qtdemux.c:10896
msgid "This file is corrupt and cannot be played."
msgstr ""
-#: gst/isomp4/qtdemux.c:4101
+#: gst/isomp4/qtdemux.c:4096
msgid "Invalid atom size."
msgstr ""
-#: gst/isomp4/qtdemux.c:4179
+#: gst/isomp4/qtdemux.c:4174
msgid "This file is incomplete and cannot be played."
msgstr ""
-#: gst/isomp4/qtdemux.c:9510
+#: gst/isomp4/qtdemux.c:9505
msgid "The video in this file might not play correctly."
msgstr ""
-#: gst/isomp4/qtdemux.c:10942
+#: gst/isomp4/qtdemux.c:10937
#, c-format
msgid "This file contains too many streams. Only playing first %d"
msgstr ""
-#: gst/multifile/gstsplitmuxsrc.c:554 gst/wavparse/gstwavparse.c:2233
-msgid "Internal data flow error."
-msgstr ""
-
-#: gst/rtsp/gstrtspsrc.c:6438
+#: gst/rtsp/gstrtspsrc.c:6436
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
msgstr ""
-#: gst/rtsp/gstrtspsrc.c:6443
+#: gst/rtsp/gstrtspsrc.c:6441
msgid ""
"No supported stream was found. You might need to allow more transport "
"protocols or may otherwise be missing the right GStreamer RTSP extension "
@@ -261,109 +253,109 @@
msgid "Error reading %d bytes from device '%s'."
msgstr ""
-#: sys/v4l2/gstv4l2object.c:1160
+#: sys/v4l2/gstv4l2object.c:1168
#, c-format
msgid "Failed to enumerate possible video formats device '%s' can work with"
msgstr ""
-#: sys/v4l2/gstv4l2object.c:2865
+#: sys/v4l2/gstv4l2object.c:2876
#, c-format
msgid "Could not map buffers from device '%s'"
msgstr ""
-#: sys/v4l2/gstv4l2object.c:2873
+#: sys/v4l2/gstv4l2object.c:2884
#, c-format
msgid "The driver of device '%s' does not support the IO method %d"
msgstr ""
-#: sys/v4l2/gstv4l2object.c:2880
+#: sys/v4l2/gstv4l2object.c:2891
#, c-format
msgid "The driver of device '%s' does not support any known IO method."
msgstr ""
-#: sys/v4l2/gstv4l2object.c:3503 sys/v4l2/gstv4l2object.c:3514
+#: sys/v4l2/gstv4l2object.c:3514 sys/v4l2/gstv4l2object.c:3525
#, c-format
msgid "Device '%s' is busy"
msgstr ""
-#: sys/v4l2/gstv4l2object.c:3520 sys/v4l2/gstv4l2object.c:3532
+#: sys/v4l2/gstv4l2object.c:3531 sys/v4l2/gstv4l2object.c:3543
#, c-format
msgid "Device '%s' cannot capture at %dx%d"
msgstr ""
-#: sys/v4l2/gstv4l2object.c:3543
+#: sys/v4l2/gstv4l2object.c:3554
#, c-format
msgid "Device '%s' cannot capture in the specified format"
msgstr ""
-#: sys/v4l2/gstv4l2object.c:3556
+#: sys/v4l2/gstv4l2object.c:3567
#, c-format
msgid "Device '%s' does support non-contiguous planes"
msgstr ""
-#: sys/v4l2/gstv4l2object.c:3567
+#: sys/v4l2/gstv4l2object.c:3578
#, c-format
msgid "Could not get parameters on device '%s'"
msgstr ""
-#: sys/v4l2/gstv4l2object.c:3575
+#: sys/v4l2/gstv4l2object.c:3586
msgid "Video device did not accept new frame rate setting."
msgstr ""
-#: sys/v4l2/gstv4l2object.c:3697
+#: sys/v4l2/gstv4l2object.c:3708
msgid "Video device did not provide output format."
msgstr ""
-#: sys/v4l2/gstv4l2object.c:3703
+#: sys/v4l2/gstv4l2object.c:3714
msgid "Video device returned invalid dimensions."
msgstr ""
-#: sys/v4l2/gstv4l2object.c:3711
+#: sys/v4l2/gstv4l2object.c:3722
msgid "Video devices uses an unsupported interlacing method."
msgstr ""
-#: sys/v4l2/gstv4l2object.c:3718
+#: sys/v4l2/gstv4l2object.c:3729
msgid "Video devices uses an unsupported pixel format."
msgstr ""
-#: sys/v4l2/gstv4l2object.c:4145
+#: sys/v4l2/gstv4l2object.c:4156
msgid "Failed to configure internal buffer pool."
msgstr ""
-#: sys/v4l2/gstv4l2object.c:4151
+#: sys/v4l2/gstv4l2object.c:4162
msgid "Video device did not suggest any buffer size."
msgstr ""
-#: sys/v4l2/gstv4l2object.c:4166
+#: sys/v4l2/gstv4l2object.c:4177
msgid "No downstream pool to import from."
msgstr ""
-#: sys/v4l2/gstv4l2radio.c:138
+#: sys/v4l2/gstv4l2radio.c:143
#, c-format
msgid "Failed to get settings of tuner %d on device '%s'."
msgstr ""
-#: sys/v4l2/gstv4l2radio.c:145
+#: sys/v4l2/gstv4l2radio.c:150
#, c-format
msgid "Error getting capabilities for device '%s'."
msgstr ""
-#: sys/v4l2/gstv4l2radio.c:152
+#: sys/v4l2/gstv4l2radio.c:157
#, c-format
msgid "Device '%s' is not a tuner."
msgstr ""
-#: sys/v4l2/gstv4l2radio.c:179
+#: sys/v4l2/gstv4l2radio.c:184
#, c-format
msgid "Failed to get radio input on device '%s'. "
msgstr ""
-#: sys/v4l2/gstv4l2radio.c:202 sys/v4l2/v4l2_calls.c:1067
+#: sys/v4l2/gstv4l2radio.c:207 sys/v4l2/v4l2_calls.c:1073
#, c-format
msgid "Failed to set input %d on device %s."
msgstr ""
-#: sys/v4l2/gstv4l2radio.c:236
+#: sys/v4l2/gstv4l2radio.c:241
#, c-format
msgid "Failed to change mute state for device '%s'."
msgstr ""
@@ -372,7 +364,7 @@
msgid "Failed to allocated required memory."
msgstr ""
-#: sys/v4l2/gstv4l2src.c:543 sys/v4l2/gstv4l2videodec.c:709
+#: sys/v4l2/gstv4l2src.c:530 sys/v4l2/gstv4l2videodec.c:709
msgid "Failed to allocate required memory."
msgstr ""
@@ -404,110 +396,110 @@
msgid "Failed to process frame."
msgstr ""
-#: sys/v4l2/v4l2_calls.c:89
+#: sys/v4l2/v4l2_calls.c:94
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
"it is a v4l1 driver."
msgstr ""
-#: sys/v4l2/v4l2_calls.c:153
+#: sys/v4l2/v4l2_calls.c:158
#, c-format
msgid "Failed to query attributes of input %d in device %s"
msgstr ""
-#: sys/v4l2/v4l2_calls.c:184
+#: sys/v4l2/v4l2_calls.c:189
#, c-format
msgid "Failed to get setting of tuner %d on device '%s'."
msgstr ""
-#: sys/v4l2/v4l2_calls.c:232
+#: sys/v4l2/v4l2_calls.c:237
#, c-format
msgid "Failed to query norm on device '%s'."
msgstr ""
-#: sys/v4l2/v4l2_calls.c:411
+#: sys/v4l2/v4l2_calls.c:416
#, c-format
msgid "Failed getting controls attributes on device '%s'."
msgstr ""
-#: sys/v4l2/v4l2_calls.c:605
+#: sys/v4l2/v4l2_calls.c:610
#, c-format
msgid "Cannot identify device '%s'."
msgstr ""
-#: sys/v4l2/v4l2_calls.c:612
+#: sys/v4l2/v4l2_calls.c:617
#, c-format
msgid "This isn't a device '%s'."
msgstr ""
-#: sys/v4l2/v4l2_calls.c:619
+#: sys/v4l2/v4l2_calls.c:624
#, c-format
msgid "Could not open device '%s' for reading and writing."
msgstr ""
-#: sys/v4l2/v4l2_calls.c:626
+#: sys/v4l2/v4l2_calls.c:631
#, c-format
msgid "Device '%s' is not a capture device."
msgstr ""
-#: sys/v4l2/v4l2_calls.c:634
+#: sys/v4l2/v4l2_calls.c:639
#, c-format
msgid "Device '%s' is not a output device."
msgstr ""
-#: sys/v4l2/v4l2_calls.c:642
+#: sys/v4l2/v4l2_calls.c:647
#, c-format
msgid "Device '%s' is not a M2M device."
msgstr ""
-#: sys/v4l2/v4l2_calls.c:693
+#: sys/v4l2/v4l2_calls.c:699
#, c-format
msgid "Could not dup device '%s' for reading and writing."
msgstr ""
-#: sys/v4l2/v4l2_calls.c:777
+#: sys/v4l2/v4l2_calls.c:783
#, c-format
msgid "Failed to set norm for device '%s'."
msgstr ""
-#: sys/v4l2/v4l2_calls.c:815
+#: sys/v4l2/v4l2_calls.c:821
#, c-format
msgid "Failed to get current tuner frequency for device '%s'."
msgstr ""
-#: sys/v4l2/v4l2_calls.c:857
+#: sys/v4l2/v4l2_calls.c:863
#, c-format
msgid "Failed to set current tuner frequency for device '%s' to %lu Hz."
msgstr ""
-#: sys/v4l2/v4l2_calls.c:891
+#: sys/v4l2/v4l2_calls.c:897
#, c-format
msgid "Failed to get signal strength for device '%s'."
msgstr ""
-#: sys/v4l2/v4l2_calls.c:927
+#: sys/v4l2/v4l2_calls.c:933
#, c-format
msgid "Failed to get value for control %d on device '%s'."
msgstr ""
-#: sys/v4l2/v4l2_calls.c:962
+#: sys/v4l2/v4l2_calls.c:968
#, c-format
msgid "Failed to set value %d for control %d on device '%s'."
msgstr ""
-#: sys/v4l2/v4l2_calls.c:1042
+#: sys/v4l2/v4l2_calls.c:1048
#, c-format
msgid "Failed to get current input on device '%s'. May be it is a radio device"
msgstr ""
-#: sys/v4l2/v4l2_calls.c:1099
+#: sys/v4l2/v4l2_calls.c:1105
#, c-format
msgid ""
"Failed to get current output on device '%s'. May be it is a radio device"
msgstr ""
-#: sys/v4l2/v4l2_calls.c:1124
+#: sys/v4l2/v4l2_calls.c:1130
#, c-format
msgid "Failed to set output %d on device %s."
msgstr ""
diff --git a/po/hr.gmo b/po/hr.gmo
index 54949f4..6a6514d 100644
--- a/po/hr.gmo
+++ b/po/hr.gmo
Binary files differ
diff --git a/po/hr.po b/po/hr.po
index e6cd2da..6fe811c 100644
--- a/po/hr.po
+++ b/po/hr.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 1.7.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2016-05-27 12:47-0700\n"
"Last-Translator: Božidar Putanec <bozidarp@yahoo.com>\n"
"Language-Team: Croatian <lokalizacija@linux.hr>\n"
@@ -56,9 +56,6 @@
msgid "Server sent bad data."
msgstr "Poslužitelj je poslao neispravne podatke."
-msgid "Internal data stream error."
-msgstr "Interna greška toka (stream) podataka."
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr "Nema audio ulaza ili je neispravan, AVI stream će biti iskvaren."
@@ -90,9 +87,6 @@
"U ovoj datoteci ima previše streamova (streams). Samo prvih %d će se "
"reproducirati"
-msgid "Internal data flow error."
-msgstr "Interna greška protoka podataka."
-
# https://gstreamer.freedesktop.org/documentation/rtp.html
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
@@ -436,6 +430,12 @@
msgid "Cannot operate without a clock"
msgstr "Ne mogu raditi bez takta (sata)"
+#~ msgid "Internal data stream error."
+#~ msgstr "Interna greška toka (stream) podataka."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Interna greška protoka podataka."
+
#~ msgid "Could not establish connection to sound server"
#~ msgstr "Ne mogu ostvariti vezu prema poslužitelju zvuka"
diff --git a/po/hu.gmo b/po/hu.gmo
index 4797948..2ffafa0 100644
--- a/po/hu.gmo
+++ b/po/hu.gmo
Binary files differ
diff --git a/po/hu.po b/po/hu.po
index 5f419b0..13756a3 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -9,7 +9,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 1.7.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2016-03-14 18:35+0100\n"
"Last-Translator: Gabor Kelemen <kelemeng@gnome.hu>\n"
"Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
@@ -59,9 +59,6 @@
msgid "Server sent bad data."
msgstr "A kiszolgáló hibás adatokat küldött."
-msgid "Internal data stream error."
-msgstr "Belső adatfolyam-hiba."
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr "Nincs vagy érvénytelen bemeneti hang, az AVI-folyam sérült lesz."
@@ -92,9 +89,6 @@
msgstr ""
"A fájl túl sok adatfolyamot tartalmaz. Csak az első %d kerül lejátszásra."
-msgid "Internal data flow error."
-msgstr "Belső adatfolyam-hiba."
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
@@ -438,6 +432,12 @@
msgid "Cannot operate without a clock"
msgstr "Óra nélkül lehetetlen a működés"
+#~ msgid "Internal data stream error."
+#~ msgstr "Belső adatfolyam-hiba."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Belső adatfolyam-hiba."
+
#~ msgid "Device '%s' does not support video capture"
#~ msgstr "A(z) „%s” eszköz nem támogatja a videofelvételt"
diff --git a/po/id.gmo b/po/id.gmo
index 40d8eba..36c6e03 100644
--- a/po/id.gmo
+++ b/po/id.gmo
Binary files differ
diff --git a/po/id.po b/po/id.po
index 08a1062..3f372da 100644
--- a/po/id.po
+++ b/po/id.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 1.3.90\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2014-07-06 21:37+0700\n"
"Last-Translator: Andhika Padmawan <andhika.padmawan@gmail.com>\n"
"Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
@@ -57,9 +57,6 @@
msgid "Server sent bad data."
msgstr "Server mengirim data rusak."
-msgid "Internal data stream error."
-msgstr "Galat arus data internal."
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr "Masukan audio tidak ada atau tidak sah, arus AVI akan rusak."
@@ -88,9 +85,6 @@
msgid "This file contains too many streams. Only playing first %d"
msgstr "Berkas ini berisi terlalu banyak arus. Hanya memutar %d pertama"
-msgid "Internal data flow error."
-msgstr "Galat aliran data internal."
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
@@ -428,5 +422,11 @@
msgid "Cannot operate without a clock"
msgstr "Tak dapat beroperasi tanpa jam"
+#~ msgid "Internal data stream error."
+#~ msgstr "Galat arus data internal."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Galat aliran data internal."
+
#~ msgid "Device '%s' does not support video capture"
#~ msgstr "Divais '%s' tak mendukung penangkapan video"
diff --git a/po/it.gmo b/po/it.gmo
index 6e30743..b91aac1 100644
--- a/po/it.gmo
+++ b/po/it.gmo
Binary files differ
diff --git a/po/it.po b/po/it.po
index 0f3e084..8fd4c60 100644
--- a/po/it.po
+++ b/po/it.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 0.10.25.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2010-10-25 10:11+0200\n"
"Last-Translator: Luca Ferretti <elle.uca@infinito.it>\n"
"Language-Team: Italian <tp@lists.linux.it>\n"
@@ -55,9 +55,6 @@
msgid "Server sent bad data."
msgstr "In server ha inviato dati errati."
-msgid "Internal data stream error."
-msgstr "Errore interno nello stream dei dati."
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr ""
"Ingresso audio assente o non valido. Lo stream AVI risulterà danneggiato."
@@ -87,9 +84,6 @@
msgid "This file contains too many streams. Only playing first %d"
msgstr "Questo file contiene troppi stream. Riprodotti solo i primi %d"
-msgid "Internal data flow error."
-msgstr "Errore interno nel flusso di dati."
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
@@ -458,6 +452,12 @@
msgid "Cannot operate without a clock"
msgstr "Impossibile operare senza un clock"
+#~ msgid "Internal data stream error."
+#~ msgstr "Errore interno nello stream dei dati."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Errore interno nel flusso di dati."
+
#, fuzzy
#~ msgid "Device '%s' does not support video capture"
#~ msgstr "Il device «%s» non è un dispositivo di uscita."
diff --git a/po/ja.gmo b/po/ja.gmo
index 9c165ec..66e3526 100644
--- a/po/ja.gmo
+++ b/po/ja.gmo
Binary files differ
diff --git a/po/ja.po b/po/ja.po
index 795d1e5..70ee454 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 1.0.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2012-12-22 20:13+0900\n"
"Last-Translator: Takeshi Hamasaki <hmatrjp@users.sourceforge.jp>\n"
"Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
@@ -56,9 +56,6 @@
msgid "Server sent bad data."
msgstr "サーバが不正なデータを送信しました。"
-msgid "Internal data stream error."
-msgstr "内部データストリームエラー"
-
# SUN REVIEWED
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr "入力オーディオが存在しないか無効であるため、AVI ストリームは壊れます。"
@@ -90,9 +87,6 @@
"このファイルには多くのストリームが格納されているため、最初の %d 個のみ再生し"
"ます"
-msgid "Internal data flow error."
-msgstr "内部データフローエラー。"
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
@@ -450,6 +444,12 @@
msgid "Cannot operate without a clock"
msgstr "クロックなしでは動作できません。"
+#~ msgid "Internal data stream error."
+#~ msgstr "内部データストリームエラー"
+
+#~ msgid "Internal data flow error."
+#~ msgstr "内部データフローエラー。"
+
#~ msgid "Device '%s' does not support video capture"
#~ msgstr "デバイス '%s' はビデオキャプチャをサポートしていません"
diff --git a/po/lt.gmo b/po/lt.gmo
index 919db8d..0f14791 100644
--- a/po/lt.gmo
+++ b/po/lt.gmo
Binary files differ
diff --git a/po/lt.po b/po/lt.po
index 20b068a..76b74e2 100644
--- a/po/lt.po
+++ b/po/lt.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 0.10.23.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2010-07-16 19:34+0300\n"
"Last-Translator: Žygimantas Beručka <uid0@akl.lt>\n"
"Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n"
@@ -57,9 +57,6 @@
msgid "Server sent bad data."
msgstr ""
-msgid "Internal data stream error."
-msgstr "Vidinė duomenų srauto klaida."
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr "Nėra įvesties garso arba jis netinkamas, AVI srautas bus sugadintas."
@@ -88,9 +85,6 @@
msgid "This file contains too many streams. Only playing first %d"
msgstr "Šiame faile per daug srautų. Grojami tik pirmieji %d"
-msgid "Internal data flow error."
-msgstr "Vidinė duomenų srauto klaida."
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
@@ -433,6 +427,12 @@
msgid "Cannot operate without a clock"
msgstr "Negali veikti be laikrodžio"
+#~ msgid "Internal data stream error."
+#~ msgstr "Vidinė duomenų srauto klaida."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Vidinė duomenų srauto klaida."
+
#, fuzzy
#~ msgid "Device '%s' does not support video capture"
#~ msgstr "Įrenginys „%s“ nėra išvesties įrenginys."
diff --git a/po/lv.gmo b/po/lv.gmo
index aa4aaa9..39abb9f 100644
--- a/po/lv.gmo
+++ b/po/lv.gmo
Binary files differ
diff --git a/po/lv.po b/po/lv.po
index c7e1af4..d1f94b3 100644
--- a/po/lv.po
+++ b/po/lv.po
@@ -9,7 +9,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 1.2.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2014-04-20 16:38+0300\n"
"Last-Translator: Rihards Prieditis <rprieditis@gmail.com>\n"
"Language-Team: Latvian <translation-team-lv@lists.sourceforge.net>\n"
@@ -58,9 +58,6 @@
msgid "Server sent bad data."
msgstr "Serveris nosūtīja sliktus datus."
-msgid "Internal data stream error."
-msgstr "Iekšēja datu plūsmas kļūda."
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr "Nav vai nederīgs ievades audio, AVI straume tiks bojāta."
@@ -89,9 +86,6 @@
msgid "This file contains too many streams. Only playing first %d"
msgstr "Šī datne satur pārāk daudz straumju. Tiek atskaņota tikai pirmā %d"
-msgid "Internal data flow error."
-msgstr "Iekšēja datu plūsmas kļūda."
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
@@ -434,6 +428,12 @@
msgid "Cannot operate without a clock"
msgstr "Nevar veikt darbības bez pulksteņa"
+#~ msgid "Internal data stream error."
+#~ msgstr "Iekšēja datu plūsmas kļūda."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Iekšēja datu plūsmas kļūda."
+
#~ msgid "Device '%s' does not support video capture"
#~ msgstr "Ierīce “%s” neatbalsta video tveršanu"
diff --git a/po/mt.gmo b/po/mt.gmo
index b855350..23ef444 100644
--- a/po/mt.gmo
+++ b/po/mt.gmo
Binary files differ
diff --git a/po/mt.po b/po/mt.po
index 9dd1090..839c1db 100644
--- a/po/mt.po
+++ b/po/mt.po
@@ -5,7 +5,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good-0.10.10.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2008-10-26 19:09+0100\n"
"Last-Translator: Michel Bugeja <michelbugeja@rabatmalta.com>\n"
"Language-Team: Maltese <translation-team-mt@lists.sourceforge.net>\n"
@@ -55,9 +55,6 @@
msgid "Server sent bad data."
msgstr ""
-msgid "Internal data stream error."
-msgstr "Problema interna fid-data stream"
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr "Input audio ma nstabx jew mhux validu. AVI stream jista jkun korrott."
@@ -86,9 +83,6 @@
msgid "This file contains too many streams. Only playing first %d"
msgstr "Il-fajl fiħ aktar streams milli suppost. Ser indoqq l-ewwel %d"
-msgid "Internal data flow error."
-msgstr "Problema interna ta' data flow"
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
@@ -438,6 +432,12 @@
msgid "Cannot operate without a clock"
msgstr "Ma nistax nħaddem mingħajr arloġġ"
+#~ msgid "Internal data stream error."
+#~ msgstr "Problema interna fid-data stream"
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Problema interna ta' data flow"
+
#, fuzzy
#~ msgid "Device '%s' does not support video capture"
#~ msgstr "Device '%s' mhux capture device."
diff --git a/po/nb.gmo b/po/nb.gmo
index 5b18045..988aa45 100644
--- a/po/nb.gmo
+++ b/po/nb.gmo
Binary files differ
diff --git a/po/nb.po b/po/nb.po
index 8845dbb..ddce766 100644
--- a/po/nb.po
+++ b/po/nb.po
@@ -2,21 +2,21 @@
# This file is put in the public domain.
#
# Kjartan Maraas <kmaraas@gnome.org>, 2004-2010.
-# Johnny A. Solbu <johnny@solbu.net>, 2012-2015
+# Johnny A. Solbu <johnny@solbu.net>, 2012-2016
#
msgid ""
msgstr ""
-"Project-Id-Version: gst-plugins-good 1.6.0\n"
+"Project-Id-Version: gst-plugins-good 1.7.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
-"PO-Revision-Date: 2015-12-22 21:12+0100\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
+"PO-Revision-Date: 2016-08-05 23:47+0200\n"
"Last-Translator: Johnny A. Solbu <johnny@solbu.net>\n"
"Language-Team: Norwegian Bokmaal <i18n-nb@lister.ping.uio.no>\n"
"Language: nb_NO\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.6.9\n"
+"X-Generator: Poedit 1.8.7.1\n"
msgid "Jack server not found"
msgstr "Jack-server ikke funnet"
@@ -54,9 +54,6 @@
msgid "Server sent bad data."
msgstr "Tjener sendte ugyldige data."
-msgid "Internal data stream error."
-msgstr "Intern feil i datastrøm."
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr "Ingen eller ugyldig inndatalyd, AVI-strømmen vil bli skadet."
@@ -85,9 +82,6 @@
msgid "This file contains too many streams. Only playing first %d"
msgstr "Filen inneholder for mange strømmer. Spiller bare første %d"
-msgid "Internal data flow error."
-msgstr "Intern dataflytfeil."
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
@@ -151,10 +145,10 @@
msgstr "Kunne ikke åpne lydenhet for opptak."
msgid "CoreAudio device not found"
-msgstr ""
+msgstr "CoreAudio-enhet ikke funnet"
msgid "CoreAudio device could not be opened"
-msgstr ""
+msgstr "CoreAudio-enhet kune ikke åpnes"
msgid "Record Source"
msgstr "Opptakskilde"
@@ -424,6 +418,12 @@
msgid "Cannot operate without a clock"
msgstr "Kan ikke operere uten en klokke"
+#~ msgid "Internal data stream error."
+#~ msgstr "Intern feil i datastrøm."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Intern dataflytfeil."
+
#~ msgid "Device '%s' does not support video capture"
#~ msgstr "Enhet «%s» støtter ikke videoopptak"
diff --git a/po/nl.gmo b/po/nl.gmo
index e0f4fde..d0376ca 100644
--- a/po/nl.gmo
+++ b/po/nl.gmo
Binary files differ
diff --git a/po/nl.po b/po/nl.po
index f1f255b..30d2cf5 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -6,7 +6,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 1.7.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2016-02-20 16:40+0100\n"
"Last-Translator: Freek de Kruijf <f.de.kruijf@gmail.com>\n"
"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
@@ -55,9 +55,6 @@
msgid "Server sent bad data."
msgstr "De server stuurde onjuiste gegevens."
-msgid "Internal data stream error."
-msgstr "Interne fout in gegevensstroom."
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr "Geen of ongeldig invoergeluid, AVI-stroom zal slecht zijn."
@@ -87,9 +84,6 @@
msgstr ""
"Dit bestand bevat te veel stromen. Alleen de eerste %d worden afgespeeld."
-msgid "Internal data flow error."
-msgstr "Interne fout in de gegevensdoorvoer."
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
@@ -430,6 +424,12 @@
msgid "Cannot operate without a clock"
msgstr "Kan niet werken zonder een klok."
+#~ msgid "Internal data stream error."
+#~ msgstr "Interne fout in gegevensstroom."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Interne fout in de gegevensdoorvoer."
+
#~ msgid "Device '%s' does not support video capture"
#~ msgstr "Apparaat '%s' ondersteunt het opnemen van video niet"
diff --git a/po/or.gmo b/po/or.gmo
index af8ea9c..1fac66f 100644
--- a/po/or.gmo
+++ b/po/or.gmo
Binary files differ
diff --git a/po/or.po b/po/or.po
index fd6b48b..953edbc 100644
--- a/po/or.po
+++ b/po/or.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-0.8.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2004-09-27 13:32+0530\n"
"Last-Translator: Gora Mohanty <gora_mohanty@yahoo.co.in>\n"
"Language-Team: Oriya <gora_mohanty@yahoo.co.in>\n"
@@ -57,9 +57,6 @@
msgid "Server sent bad data."
msgstr ""
-msgid "Internal data stream error."
-msgstr ""
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr "ନିବେଶ ଧ୍ବନି ନାହିଁ ବା ଅବୈଧ ଅଛି. ଏ.ଭି.ଆଇ. ଧାରା ଭ୍ରଷ୍ଟ ହୋଇଯିବ."
@@ -88,9 +85,6 @@
msgid "This file contains too many streams. Only playing first %d"
msgstr ""
-msgid "Internal data flow error."
-msgstr ""
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
diff --git a/po/pl.gmo b/po/pl.gmo
index ea296e4..4860f6b 100644
--- a/po/pl.gmo
+++ b/po/pl.gmo
Binary files differ
diff --git a/po/pl.po b/po/pl.po
index 2b5ddd3..be08aef 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -6,7 +6,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 1.7.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2016-02-20 21:43+0100\n"
"Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
@@ -51,9 +51,6 @@
msgid "Server sent bad data."
msgstr "Serwer przysłał błędne dane."
-msgid "Internal data stream error."
-msgstr "Błąd wewnętrzny strumienia danych."
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr "Brak lub niepoprawne wejście dźwięku, strumień AVI będzie uszkodzony."
@@ -83,9 +80,6 @@
msgid "This file contains too many streams. Only playing first %d"
msgstr "Ten plik zawiera zbyt dużo strumieni. Odtwarzanie tylko %d pierwszych"
-msgid "Internal data flow error."
-msgstr "Błąd wewnętrzny przepływu danych."
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
@@ -426,3 +420,9 @@
msgid "Cannot operate without a clock"
msgstr "Nie można pracować bez zegara"
+
+#~ msgid "Internal data stream error."
+#~ msgstr "Błąd wewnętrzny strumienia danych."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Błąd wewnętrzny przepływu danych."
diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo
index 7f37350..c39470d 100644
--- a/po/pt_BR.gmo
+++ b/po/pt_BR.gmo
Binary files differ
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 5b5e022..a6d700a 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -13,7 +13,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good-1.7.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2016-05-06 17:49-0300\n"
"Last-Translator: Fabrício Godoy <skarllot@gmail.com>\n"
"Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge."
@@ -61,9 +61,6 @@
msgid "Server sent bad data."
msgstr "O servidor enviou dados ruins."
-msgid "Internal data stream error."
-msgstr "Erro interno no fluxo de dados."
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr "Entrada de áudio nula ou inválida, o fluxo AVI pode estar corrompido."
@@ -94,9 +91,6 @@
msgid "This file contains too many streams. Only playing first %d"
msgstr "Este arquivo contêm muitos fluxos. Apenas reproduzindo o primeiro %d"
-msgid "Internal data flow error."
-msgstr "Erro interno no fluxo de dados."
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
@@ -446,6 +440,12 @@
msgid "Cannot operate without a clock"
msgstr "Não é possível operar sem um temporizador"
+#~ msgid "Internal data stream error."
+#~ msgstr "Erro interno no fluxo de dados."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Erro interno no fluxo de dados."
+
#~ msgid "Device '%s' does not support video capture"
#~ msgstr "O dispositivo \"%s\" não tem suporte a captura de vídeo"
diff --git a/po/ro.gmo b/po/ro.gmo
index 36dbb98..9e13855 100644
--- a/po/ro.gmo
+++ b/po/ro.gmo
Binary files differ
diff --git a/po/ro.po b/po/ro.po
index b72cabb..a8a9c15 100644
--- a/po/ro.po
+++ b/po/ro.po
@@ -5,7 +5,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 0.10.23.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2010-08-16 03:22+0300\n"
"Last-Translator: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>\n"
"Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
@@ -56,9 +56,6 @@
msgid "Server sent bad data."
msgstr ""
-msgid "Internal data stream error."
-msgstr "Eroare internă a fluxului de date."
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr ""
"Intrarea audio nu există sau este nevalidă, fluxul de date AVI va fi corupt."
@@ -88,9 +85,6 @@
msgid "This file contains too many streams. Only playing first %d"
msgstr "Fișierul conține prea multe fluxuri. Se redau doar primele %d"
-msgid "Internal data flow error."
-msgstr "Eroare internă a fluxului de date."
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
@@ -454,6 +448,12 @@
msgid "Cannot operate without a clock"
msgstr "Nu se poate opera fără un ceas"
+#~ msgid "Internal data stream error."
+#~ msgstr "Eroare internă a fluxului de date."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Eroare internă a fluxului de date."
+
#, fuzzy
#~ msgid "Device '%s' does not support video capture"
#~ msgstr "Dispozitivul „%s” nu este un dispozitiv de ieșire."
diff --git a/po/ru.gmo b/po/ru.gmo
index 7262c2c..5201165 100644
--- a/po/ru.gmo
+++ b/po/ru.gmo
Binary files differ
diff --git a/po/ru.po b/po/ru.po
index 66afa19..84fe0a8 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -9,7 +9,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 1.7.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2016-02-21 09:55+0300\n"
"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
"Language-Team: Russian <gnu@d07.ru>\n"
@@ -57,9 +57,6 @@
msgid "Server sent bad data."
msgstr "Сервер прислал некорректные данные."
-msgid "Internal data stream error."
-msgstr "Внутренняя ошибка потока данных."
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr ""
"Входящие аудио-данные отсутствуют или недействительны, поток AVI будет "
@@ -93,9 +90,6 @@
msgstr ""
"Файл содержит слишком много потоков. Будет воспроизведёно только первых %d"
-msgid "Internal data flow error."
-msgstr "Внутренняя ошибка потока данных."
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
@@ -440,6 +434,12 @@
msgid "Cannot operate without a clock"
msgstr "Операция невозможна без часов"
+#~ msgid "Internal data stream error."
+#~ msgstr "Внутренняя ошибка потока данных."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Внутренняя ошибка потока данных."
+
#~ msgid "Device '%s' does not support video capture"
#~ msgstr "Устройство «%s» не поддерживает захват видео"
diff --git a/po/sk.gmo b/po/sk.gmo
index eda983c..255a034 100644
--- a/po/sk.gmo
+++ b/po/sk.gmo
Binary files differ
diff --git a/po/sk.po b/po/sk.po
index 58508b5..f5a8372 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -6,7 +6,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 1.7.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2016-05-20 12:31+0100\n"
"Last-Translator: Peter Tuhársky <tuharsky@misbb.sk>\n"
"Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
@@ -53,9 +53,6 @@
msgid "Server sent bad data."
msgstr "Server odoslal chybné údaje."
-msgid "Internal data stream error."
-msgstr "Vnútorná chyba prúdu údajov."
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr "Žiadny alebo chybný vstup zvuku, prúd údajov AVI bude poškodený."
@@ -85,9 +82,6 @@
msgid "This file contains too many streams. Only playing first %d"
msgstr "Tento súbor obsahuje príliš mnoho prúdov údajov. Prehrávam iba prvý %d"
-msgid "Internal data flow error."
-msgstr "Vnútorná chyba toku údajov."
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
@@ -429,6 +423,12 @@
msgid "Cannot operate without a clock"
msgstr "Nemôžem fungovať bez hodín"
+#~ msgid "Internal data stream error."
+#~ msgstr "Vnútorná chyba prúdu údajov."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Vnútorná chyba toku údajov."
+
#~ msgid "Could not establish connection to sound server"
#~ msgstr "Nepodarilo sa nadviazať spojenie so zvukovým serverom"
diff --git a/po/sl.gmo b/po/sl.gmo
index e952517..0a394ed 100644
--- a/po/sl.gmo
+++ b/po/sl.gmo
Binary files differ
diff --git a/po/sl.po b/po/sl.po
index 9c27c2a..8c56466 100644
--- a/po/sl.po
+++ b/po/sl.po
@@ -10,7 +10,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good-1.2.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2014-04-09 22:52+0100\n"
"Last-Translator: Klemen Košir <klemen913@gmail.com>\n"
"Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n"
@@ -59,9 +59,6 @@
msgid "Server sent bad data."
msgstr "Strežnik je poslal slabe podatke."
-msgid "Internal data stream error."
-msgstr "Notranja napaka pretoka podatkov."
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr "Napaka vhodnega zvoka, AVI pretok bo pokvarjen."
@@ -90,9 +87,6 @@
msgid "This file contains too many streams. Only playing first %d"
msgstr "Datoteka vsebuje več pretokov. Predvajano bo le začetnih %d"
-msgid "Internal data flow error."
-msgstr "Notranja napaka pretoka podatkov."
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
@@ -440,5 +434,11 @@
msgid "Cannot operate without a clock"
msgstr "Izvajanje opravil brez ure ni mogoče"
+#~ msgid "Internal data stream error."
+#~ msgstr "Notranja napaka pretoka podatkov."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Notranja napaka pretoka podatkov."
+
#~ msgid "Device '%s' does not support video capture"
#~ msgstr "Naprava \"%s\" ne podpira zajemanja videa."
diff --git a/po/sq.gmo b/po/sq.gmo
index 04c50c0..85c42d6 100644
--- a/po/sq.gmo
+++ b/po/sq.gmo
Binary files differ
diff --git a/po/sq.po b/po/sq.po
index b0efbd9..3cd328c 100644
--- a/po/sq.po
+++ b/po/sq.po
@@ -6,7 +6,7 @@
msgstr ""
"Project-Id-Version: gst-plugins 0.8.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2004-08-07 20:29+0200\n"
"Last-Translator: Laurent Dhima <laurenti@alblinux.net>\n"
"Language-Team: Albanian <begraj@hotmail.com>\n"
@@ -55,9 +55,6 @@
msgid "Server sent bad data."
msgstr ""
-msgid "Internal data stream error."
-msgstr ""
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr "Input audio i gabuar ose mungon, stream AVI mund të jetë i dëmtuar."
@@ -86,9 +83,6 @@
msgid "This file contains too many streams. Only playing first %d"
msgstr ""
-msgid "Internal data flow error."
-msgstr ""
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
diff --git a/po/sr.gmo b/po/sr.gmo
index ad6144f..4e635cf 100644
--- a/po/sr.gmo
+++ b/po/sr.gmo
Binary files differ
diff --git a/po/sr.po b/po/sr.po
index 81a563b..c2e8706 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good-1.7.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2016-03-05 09:52+0200\n"
"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
"Language-Team: Serbian <(nothing)>\n"
@@ -54,9 +54,6 @@
msgid "Server sent bad data."
msgstr "Сервер је послао лоше податке."
-msgid "Internal data stream error."
-msgstr "Унутрашња грешка тока података."
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr "Улазног звука нема или је неисправан, АВИ ток ће бити оштећен."
@@ -86,9 +83,6 @@
msgid "This file contains too many streams. Only playing first %d"
msgstr "Ова датотека садржи превише токова. Пуштам само први %d"
-msgid "Internal data flow error."
-msgstr "Унутрaшња грешка протока података."
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
@@ -428,5 +422,11 @@
msgid "Cannot operate without a clock"
msgstr "Не могу да радим без сата"
+#~ msgid "Internal data stream error."
+#~ msgstr "Унутрашња грешка тока података."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Унутрaшња грешка протока података."
+
#~ msgid "Device '%s' does not support video capture"
#~ msgstr "Уређај „%s“ не подржава видео снимање"
diff --git a/po/sv.gmo b/po/sv.gmo
index 8e271ce..1a84481 100644
--- a/po/sv.gmo
+++ b/po/sv.gmo
Binary files differ
diff --git a/po/sv.po b/po/sv.po
index ded95c6..676b37d 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -9,7 +9,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 1.7.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2016-02-20 16:13+0100\n"
"Last-Translator: Sebastian Rasmussen <sebras@gmail.com>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
@@ -55,9 +55,6 @@
msgid "Server sent bad data."
msgstr "Servern skickade felaktigt data."
-msgid "Internal data stream error."
-msgstr "Internt fel i dataström."
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr "Inget eller ogiltigt ingångsljud. AVI-strömmen kommer att skadas."
@@ -87,9 +84,6 @@
msgstr ""
"Den här filen innehåller för många strömmar. Spelar endast upp de första %d"
-msgid "Internal data flow error."
-msgstr "Internt fel i dataflöde."
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
@@ -437,5 +431,11 @@
msgid "Cannot operate without a clock"
msgstr "Kan inte fungera utan en klocka"
+#~ msgid "Internal data stream error."
+#~ msgstr "Internt fel i dataström."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Internt fel i dataflöde."
+
#~ msgid "Device '%s' does not support video capture"
#~ msgstr "Enheten \"%s\" stöder inte videoinfångning."
diff --git a/po/tr.gmo b/po/tr.gmo
index 4f2b0c7..4508878 100644
--- a/po/tr.gmo
+++ b/po/tr.gmo
Binary files differ
diff --git a/po/tr.po b/po/tr.po
index 763b231..0241ae8 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 1.4.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2015-01-10 21:07+0100\n"
"Last-Translator: Volkan Gezer <volkangezer@gmail.com>\n"
"Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
@@ -58,9 +58,6 @@
msgid "Server sent bad data."
msgstr "Sunucu yetersiz veri gönderdi."
-msgid "Internal data stream error."
-msgstr "İç veri akım hatası."
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr "Geçerli bir ses girişi bulunamadı. AVI akışı kesilecek."
@@ -89,9 +86,6 @@
msgid "This file contains too many streams. Only playing first %d"
msgstr "Bu dosya çok fazla akış içeriyor. Sadece ilki oynatılıyor %d"
-msgid "Internal data flow error."
-msgstr "İç veri akış hatası."
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
@@ -424,6 +418,12 @@
msgid "Cannot operate without a clock"
msgstr "Saat olmadan çalışamaz"
+#~ msgid "Internal data stream error."
+#~ msgstr "İç veri akım hatası."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "İç veri akış hatası."
+
#~ msgid "Device '%s' does not support video capture"
#~ msgstr "Aygıt '%s' video yakalamayı desteklemiyor"
diff --git a/po/uk.gmo b/po/uk.gmo
index 72e703f..0d05967 100644
--- a/po/uk.gmo
+++ b/po/uk.gmo
Binary files differ
diff --git a/po/uk.po b/po/uk.po
index b3eb1a9..a7251ca 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -8,7 +8,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 1.7.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2016-02-20 17:27+0200\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
@@ -57,9 +57,6 @@
msgid "Server sent bad data."
msgstr "Сервером надіслано помилкові дані."
-msgid "Internal data stream error."
-msgstr "Внутрішня помилка потоку даних."
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr ""
"Не вказано або вказано некоректний вхід звукових даних, AVI-потік буде "
@@ -93,9 +90,6 @@
msgid "This file contains too many streams. Only playing first %d"
msgstr "Файл містить надто багато потоків. Відтворюються лише перші %d"
-msgid "Internal data flow error."
-msgstr "Помилка внутрішнього перенесення даних."
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
@@ -446,6 +440,12 @@
msgid "Cannot operate without a clock"
msgstr "Робота без годинника неможлива"
+#~ msgid "Internal data stream error."
+#~ msgstr "Внутрішня помилка потоку даних."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Помилка внутрішнього перенесення даних."
+
#~ msgid "Device '%s' does not support video capture"
#~ msgstr "Пристрій «%s» не може захоплювати відеодані"
diff --git a/po/vi.gmo b/po/vi.gmo
index 1cb1298..7f1b079 100644
--- a/po/vi.gmo
+++ b/po/vi.gmo
Binary files differ
diff --git a/po/vi.po b/po/vi.po
index 346d394..17fa315 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -9,7 +9,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 1.7.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2016-02-21 07:25+0700\n"
"Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
"Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
@@ -57,9 +57,6 @@
msgid "Server sent bad data."
msgstr "Máy chủ gửi dữ liệu sai."
-msgid "Internal data stream error."
-msgstr "Lỗi luồng dữ liệu nội bộ."
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr ""
"Chưa có dữ liệu âm thanh nhập, hoặc dữ liệu âm thanh nhập không hợp lệ. Vì "
@@ -90,9 +87,6 @@
msgid "This file contains too many streams. Only playing first %d"
msgstr "Tập tin này chứa quá nhiều luồng nên chỉ phát %d đầu tiên"
-msgid "Internal data flow error."
-msgstr "Lỗi luồng dữ liệu nội bộ."
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
@@ -439,6 +433,12 @@
msgid "Cannot operate without a clock"
msgstr "Không thể thao tác khi không có đồng hồ"
+#~ msgid "Internal data stream error."
+#~ msgstr "Lỗi luồng dữ liệu nội bộ."
+
+#~ msgid "Internal data flow error."
+#~ msgstr "Lỗi luồng dữ liệu nội bộ."
+
#~ msgid "Device '%s' does not support video capture"
#~ msgstr "Thiết bị “%s” không hỗ trợ chức năng quay video"
diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo
index 3f0aa31..721a92f 100644
--- a/po/zh_CN.gmo
+++ b/po/zh_CN.gmo
Binary files differ
diff --git a/po/zh_CN.po b/po/zh_CN.po
index b4e5112..ae271fa 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good 1.7.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2016-02-21 16:52+0800\n"
"Last-Translator: Tianze Wang <zwpwjwtz@126.com>\n"
"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
@@ -53,9 +53,6 @@
msgid "Server sent bad data."
msgstr "服务器发送了错误的数据。"
-msgid "Internal data stream error."
-msgstr "内部数据流错误。"
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr "没有或无效的输入音频,AVI 流将损坏。"
@@ -84,9 +81,6 @@
msgid "This file contains too many streams. Only playing first %d"
msgstr "此文件包含了太多的流。只播放前面 %d 个"
-msgid "Internal data flow error."
-msgstr "内部数据流错误。"
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
@@ -409,6 +403,12 @@
msgid "Cannot operate without a clock"
msgstr "没有时钟的话无法操作"
+#~ msgid "Internal data stream error."
+#~ msgstr "内部数据流错误。"
+
+#~ msgid "Internal data flow error."
+#~ msgstr "内部数据流错误。"
+
#~ msgid "Failed to query sound server capabilities"
#~ msgstr "查寻音频服务器的服务失败"
diff --git a/po/zh_HK.gmo b/po/zh_HK.gmo
index b2c2f0e..a5a37ee 100644
--- a/po/zh_HK.gmo
+++ b/po/zh_HK.gmo
Binary files differ
diff --git a/po/zh_HK.po b/po/zh_HK.po
index f3eda69..537fe66 100644
--- a/po/zh_HK.po
+++ b/po/zh_HK.po
@@ -6,7 +6,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good-0.10.2 0.10.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2006-08-29 01:08+0800\n"
"Last-Translator: Abel Cheung <abelcheung@gmail.com>\n"
"Language-Team: Chinese (Hong Kong) <community@linuxhall.org>\n"
@@ -51,9 +51,6 @@
msgid "Server sent bad data."
msgstr ""
-msgid "Internal data stream error."
-msgstr "內部資料串流發生錯誤。"
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr "沒有任何輸入的音效資料或者資料無效,表示 AVI 串流出現錯誤。"
@@ -82,10 +79,6 @@
msgid "This file contains too many streams. Only playing first %d"
msgstr ""
-#, fuzzy
-msgid "Internal data flow error."
-msgstr "內部資料串流發生錯誤。"
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
@@ -407,6 +400,13 @@
msgid "Cannot operate without a clock"
msgstr ""
+#~ msgid "Internal data stream error."
+#~ msgstr "內部資料串流發生錯誤。"
+
+#, fuzzy
+#~ msgid "Internal data flow error."
+#~ msgstr "內部資料串流發生錯誤。"
+
#~ msgid ""
#~ "Could not open audio device for mixer control handling. This version of "
#~ "the Open Sound System is not supported by this element."
diff --git a/po/zh_TW.gmo b/po/zh_TW.gmo
index e87405a..b442619 100644
--- a/po/zh_TW.gmo
+++ b/po/zh_TW.gmo
Binary files differ
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 64ac7af..5eaecb6 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -6,7 +6,7 @@
msgstr ""
"Project-Id-Version: gst-plugins-good-0.10.2 0.10.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2016-07-06 11:45+0300\n"
+"POT-Creation-Date: 2016-09-01 11:23+0300\n"
"PO-Revision-Date: 2006-08-29 01:08+0800\n"
"Last-Translator: Abel Cheung <abelcheung@gmail.com>\n"
"Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n"
@@ -51,9 +51,6 @@
msgid "Server sent bad data."
msgstr ""
-msgid "Internal data stream error."
-msgstr "內部資料串流發生錯誤。"
-
msgid "No or invalid input audio, AVI stream will be corrupt."
msgstr "沒有任何輸入的音效資料或者資料無效,表示 AVI 串流出現錯誤。"
@@ -82,10 +79,6 @@
msgid "This file contains too many streams. Only playing first %d"
msgstr ""
-#, fuzzy
-msgid "Internal data flow error."
-msgstr "內部資料串流發生錯誤。"
-
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
@@ -407,6 +400,13 @@
msgid "Cannot operate without a clock"
msgstr ""
+#~ msgid "Internal data stream error."
+#~ msgstr "內部資料串流發生錯誤。"
+
+#, fuzzy
+#~ msgid "Internal data flow error."
+#~ msgstr "內部資料串流發生錯誤。"
+
#~ msgid ""
#~ "Could not open audio device for mixer control handling. This version of "
#~ "the Open Sound System is not supported by this element."
diff --git a/sys/Makefile.in b/sys/Makefile.in
index 882d2c7..b119e1b 100644
--- a/sys/Makefile.in
+++ b/sys/Makefile.in
@@ -108,6 +108,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -326,6 +327,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -432,6 +434,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -499,6 +504,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/sys/directsound/Makefile.in b/sys/directsound/Makefile.in
index c143c56..9ceebfe 100644
--- a/sys/directsound/Makefile.in
+++ b/sys/directsound/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -345,6 +346,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -451,6 +453,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -518,6 +523,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/sys/directsound/gstdirectsoundsink.c b/sys/directsound/gstdirectsoundsink.c
index 0f299ae..573e2b8 100644
--- a/sys/directsound/gstdirectsoundsink.c
+++ b/sys/directsound/gstdirectsoundsink.c
@@ -109,6 +109,8 @@
static gboolean gst_directsound_sink_is_spdif_format (GstAudioRingBufferSpec *
spec);
+static gchar *gst_hres_to_string (HRESULT hRes);
+
static GstStaticPadTemplate directsoundsink_sink_factory =
GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
@@ -442,10 +444,12 @@
/* create and initialize a DirecSound object */
if (FAILED (hRes = DirectSoundCreate (lpGuid, &dsoundsink->pDS, NULL))) {
+ gchar *error_text = gst_hres_to_string (hRes);
GST_ELEMENT_ERROR (dsoundsink, RESOURCE, OPEN_READ,
("gst_directsound_sink_open: DirectSoundCreate: %s",
- DXGetErrorString9 (hRes)), (NULL));
+ error_text), (NULL));
g_free (lpGuid);
+ g_free (error_text);
return FALSE;
}
@@ -453,9 +457,11 @@
if (FAILED (hRes = IDirectSound_SetCooperativeLevel (dsoundsink->pDS,
GetDesktopWindow (), DSSCL_PRIORITY))) {
+ gchar *error_text = gst_hres_to_string (hRes);
GST_ELEMENT_ERROR (dsoundsink, RESOURCE, OPEN_READ,
("gst_directsound_sink_open: IDirectSound_SetCooperativeLevel: %s",
- DXGetErrorString9 (hRes)), (NULL));
+ error_text), (NULL));
+ g_free (error_text);
return FALSE;
}
@@ -548,9 +554,11 @@
hRes = IDirectSound_CreateSoundBuffer (dsoundsink->pDS, &descSecondary,
&dsoundsink->pDSBSecondary, NULL);
if (FAILED (hRes)) {
+ gchar *error_text = gst_hres_to_string (hRes);
GST_ELEMENT_ERROR (dsoundsink, RESOURCE, OPEN_READ,
("gst_directsound_sink_prepare: IDirectSound_CreateSoundBuffer: %s",
- DXGetErrorString9 (hRes)), (NULL));
+ error_text), (NULL));
+ g_free (error_text);
return FALSE;
}
@@ -649,12 +657,19 @@
&& (dwStatus & DSBSTATUS_PLAYING))
goto calculate_freesize;
else {
+ gchar *err1, *err2;
+
dsoundsink->first_buffer_after_reset = FALSE;
GST_DSOUND_UNLOCK (dsoundsink);
+
+ err1 = gst_hres_to_string (hRes);
+ err2 = gst_hres_to_string (hRes2);
GST_ELEMENT_ERROR (dsoundsink, RESOURCE, OPEN_WRITE,
- ("gst_directsound_sink_write: IDirectSoundBuffer_GetStatus %s, IDirectSoundBuffer_GetCurrentPosition: %s, dwStatus: %lu",
- DXGetErrorString9 (hRes2), DXGetErrorString9 (hRes), dwStatus),
- (NULL));
+ ("gst_directsound_sink_write: IDirectSoundBuffer_GetStatus %s, "
+ "IDirectSoundBuffer_GetCurrentPosition: %s, dwStatus: %lu",
+ err2, err1, dwStatus), (NULL));
+ g_free (err1);
+ g_free (err2);
return -1;
}
}
@@ -819,9 +834,10 @@
hRes = IDirectSound_CreateSoundBuffer (dsoundsink->pDS, &descSecondary,
&tmpBuffer, NULL);
if (FAILED (hRes)) {
+ gchar *error_text = gst_hres_to_string (hRes);
GST_INFO_OBJECT (dsoundsink, "AC3 passthrough not supported "
- "(IDirectSound_CreateSoundBuffer returned: %s)\n",
- DXGetErrorString9 (hRes));
+ "(IDirectSound_CreateSoundBuffer returned: %s)\n", error_text);
+ g_free (error_text);
tmp = gst_caps_new_empty_simple ("audio/x-ac3");
tmp2 = gst_caps_subtract (caps, tmp);
gst_caps_unref (tmp);
@@ -836,9 +852,10 @@
GST_INFO_OBJECT (dsoundsink, "AC3 passthrough supported");
hRes = IDirectSoundBuffer_Release (tmpBuffer);
if (FAILED (hRes)) {
+ gchar *error_text = gst_hres_to_string (hRes);
GST_DEBUG_OBJECT (dsoundsink,
- "(IDirectSoundBuffer_Release returned: %s)\n",
- DXGetErrorString9 (hRes));
+ "(IDirectSoundBuffer_Release returned: %s)\n", error_text);
+ g_free (error_text);
}
}
#else
@@ -967,3 +984,28 @@
g_free (dsoundsink->device_id);
dsoundsink->device_id = g_strdup (device_id);
}
+
+/* Converts a HRESULT error to a text string
+ * LPTSTR is either a */
+static gchar *
+gst_hres_to_string (HRESULT hRes)
+{
+ DWORD flags;
+ gchar *ret_text;
+ LPTSTR error_text = NULL;
+
+ flags = FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER
+ | FORMAT_MESSAGE_IGNORE_INSERTS;
+ FormatMessage (flags, NULL, hRes, MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT),
+ (LPTSTR) & error_text, 0, NULL);
+
+#ifdef UNICODE
+ /* If UNICODE is defined, LPTSTR is LPWSTR which is UTF-16 */
+ ret_text = g_utf16_to_utf8 (error_text, 0, NULL, NULL, NULL);
+#else
+ ret_text = g_strdup (error_text);
+#endif
+
+ LocalFree (error_text);
+ return ret_text;
+}
diff --git a/sys/directsound/gstdirectsoundsink.h b/sys/directsound/gstdirectsoundsink.h
index c9f5879..51f7648 100644
--- a/sys/directsound/gstdirectsoundsink.h
+++ b/sys/directsound/gstdirectsoundsink.h
@@ -34,7 +34,6 @@
#include <gst/audio/gstaudiosink.h>
#include <windows.h>
-#include <dxerr9.h>
#include <dsound.h>
#include <mmreg.h>
#include <ks.h>
diff --git a/sys/oss/Makefile.in b/sys/oss/Makefile.in
index a6632bc..1a107b6 100644
--- a/sys/oss/Makefile.in
+++ b/sys/oss/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -343,6 +344,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -449,6 +451,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -516,6 +521,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/sys/oss4/Makefile.in b/sys/oss4/Makefile.in
index 74cacec..2b36cac 100644
--- a/sys/oss4/Makefile.in
+++ b/sys/oss4/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -344,6 +345,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -450,6 +452,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -517,6 +522,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/sys/osxaudio/Makefile.in b/sys/osxaudio/Makefile.in
index 0bacb76..7b93512 100644
--- a/sys/osxaudio/Makefile.in
+++ b/sys/osxaudio/Makefile.in
@@ -101,6 +101,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -355,6 +356,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -461,6 +463,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -528,6 +533,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/sys/osxvideo/Makefile.am b/sys/osxvideo/Makefile.am
index e908695..0d92a87 100644
--- a/sys/osxvideo/Makefile.am
+++ b/sys/osxvideo/Makefile.am
@@ -12,7 +12,7 @@
$(GST_PLUGINS_BASE_LIBS) \
-lgstvideo-$(GST_API_VERSION)
-libgstosxvideosink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -Wl,-framework -Wl,Cocoa -Wl,-framework -Wl,QuickTime -Wl,-framework -Wl,OpenGL
+libgstosxvideosink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -Wl,-framework -Wl,Cocoa -Wl,-framework -Wl,OpenGL
libgstosxvideosink_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS) --tag=CC
noinst_HEADERS = osxvideosink.h cocoawindow.h
diff --git a/sys/osxvideo/Makefile.in b/sys/osxvideo/Makefile.in
index f020480..71b151b 100644
--- a/sys/osxvideo/Makefile.in
+++ b/sys/osxvideo/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -343,6 +344,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -449,6 +451,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -516,6 +521,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
@@ -580,7 +586,7 @@
$(GST_PLUGINS_BASE_LIBS) \
-lgstvideo-$(GST_API_VERSION)
-libgstosxvideosink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -Wl,-framework -Wl,Cocoa -Wl,-framework -Wl,QuickTime -Wl,-framework -Wl,OpenGL
+libgstosxvideosink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -Wl,-framework -Wl,Cocoa -Wl,-framework -Wl,OpenGL
libgstosxvideosink_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS) --tag=CC
noinst_HEADERS = osxvideosink.h cocoawindow.h
all: all-am
diff --git a/sys/osxvideo/cocoawindow.h b/sys/osxvideo/cocoawindow.h
index 9355d3c..816f1bb 100644
--- a/sys/osxvideo/cocoawindow.h
+++ b/sys/osxvideo/cocoawindow.h
@@ -27,7 +27,6 @@
*/
#import <Cocoa/Cocoa.h>
-#import <QuickTime/QuickTime.h>
#import <glib.h>
#import <gst/video/navigation.h>
diff --git a/sys/osxvideo/osxvideosink.h b/sys/osxvideo/osxvideosink.h
index 2bf5d25..d467b0e 100644
--- a/sys/osxvideo/osxvideosink.h
+++ b/sys/osxvideo/osxvideosink.h
@@ -35,7 +35,6 @@
#include <objc/runtime.h>
#include <Cocoa/Cocoa.h>
-#include <QuickTime/QuickTime.h>
#import "cocoawindow.h"
GST_DEBUG_CATEGORY_EXTERN (gst_debug_osx_video_sink);
diff --git a/sys/sunaudio/Makefile.in b/sys/sunaudio/Makefile.in
index 7c9c124..305ec72 100644
--- a/sys/sunaudio/Makefile.in
+++ b/sys/sunaudio/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -347,6 +348,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -453,6 +455,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -520,6 +525,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/sys/v4l2/Makefile.in b/sys/v4l2/Makefile.in
index efe2bff..47afae7 100644
--- a/sys/v4l2/Makefile.in
+++ b/sys/v4l2/Makefile.in
@@ -107,6 +107,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -370,6 +371,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -476,6 +478,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -543,6 +548,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/sys/v4l2/gstv4l2.c b/sys/v4l2/gstv4l2.c
index 83fcc98..b5e826a 100644
--- a/sys/v4l2/gstv4l2.c
+++ b/sys/v4l2/gstv4l2.c
@@ -119,6 +119,7 @@
gint video_fd = -1;
struct v4l2_capability vcap;
gboolean ret = TRUE;
+ guint32 device_caps;
it = gst_v4l2_iterator_new ();
@@ -143,12 +144,16 @@
continue;
}
- if (!((vcap.capabilities & (V4L2_CAP_VIDEO_M2M |
- V4L2_CAP_VIDEO_M2M_MPLANE)) ||
+ if (vcap.capabilities & V4L2_CAP_DEVICE_CAPS)
+ device_caps = vcap.device_caps;
+ else
+ device_caps = vcap.capabilities;
+
+ if (!((device_caps & (V4L2_CAP_VIDEO_M2M | V4L2_CAP_VIDEO_M2M_MPLANE)) ||
/* But legacy driver may expose both CAPTURE and OUTPUT */
- ((vcap.capabilities &
+ ((device_caps &
(V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_VIDEO_CAPTURE_MPLANE)) &&
- (vcap.capabilities &
+ (device_caps &
(V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_VIDEO_OUTPUT_MPLANE)))))
continue;
diff --git a/sys/v4l2/gstv4l2bufferpool.c b/sys/v4l2/gstv4l2bufferpool.c
index 3184bd8..bfcfbaa 100644
--- a/sys/v4l2/gstv4l2bufferpool.c
+++ b/sys/v4l2/gstv4l2bufferpool.c
@@ -716,7 +716,7 @@
* poll before that will always fail. Doing an empty read, forces the
* queue to be initialized now. We only do this if we have a streaming
* driver. */
- if (obj->vcap.capabilities & V4L2_CAP_STREAMING)
+ if (obj->device_caps & V4L2_CAP_STREAMING)
v4l2_read (obj->video_fd, NULL, 0);
#endif
break;
diff --git a/sys/v4l2/gstv4l2deviceprovider.c b/sys/v4l2/gstv4l2deviceprovider.c
index d521838..61ca135 100644
--- a/sys/v4l2/gstv4l2deviceprovider.c
+++ b/sys/v4l2/gstv4l2deviceprovider.c
@@ -49,7 +49,7 @@
static void gst_v4l2_device_provider_finalize (GObject * object);
static GList *gst_v4l2_device_provider_probe (GstDeviceProvider * provider);
-#if HAVE_GUDEV
+#ifdef HAVE_GUDEV
static gboolean gst_v4l2_device_provider_start (GstDeviceProvider * provider);
static void gst_v4l2_device_provider_stop (GstDeviceProvider * provider);
#endif
@@ -63,7 +63,7 @@
dm_class->probe = gst_v4l2_device_provider_probe;
-#if HAVE_GUDEV
+#ifdef HAVE_GUDEV
dm_class->start = gst_v4l2_device_provider_start;
dm_class->stop = gst_v4l2_device_provider_stop;
#endif
@@ -79,7 +79,7 @@
static void
gst_v4l2_device_provider_init (GstV4l2DeviceProvider * provider)
{
-#if HAVE_GUDEV
+#ifdef HAVE_GUDEV
g_cond_init (&provider->started_cond);
#endif
}
@@ -87,7 +87,7 @@
static void
gst_v4l2_device_provider_finalize (GObject * object)
{
-#if HAVE_GUDEV
+#ifdef HAVE_GUDEV
GstV4l2DeviceProvider *provider = GST_V4L2_DEVICE_PROVIDER (object);
g_cond_clear (&provider->started_cond);
@@ -136,22 +136,30 @@
gst_structure_set (props, "v4l2.device.device_caps", G_TYPE_UINT,
v4l2obj->vcap.device_caps, NULL);
- if (v4l2obj->vcap.capabilities & V4L2_CAP_VIDEO_CAPTURE)
+ if (v4l2obj->device_caps &
+ (V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_VIDEO_CAPTURE_MPLANE))
type = GST_V4L2_DEVICE_TYPE_SOURCE;
- if (v4l2obj->vcap.capabilities & V4L2_CAP_VIDEO_OUTPUT) {
- /* Morph it in case our initial guess was wrong */
- v4l2obj->type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
-
- if (type == GST_V4L2_DEVICE_TYPE_INVALID)
- type = GST_V4L2_DEVICE_TYPE_SINK;
- else
- /* We ignore M2M devices that are both capture and output for now
- * The provider is not for them
- */
+ if (v4l2obj->device_caps &
+ (V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_VIDEO_OUTPUT_MPLANE)) {
+ /* We ignore M2M devices that are both capture and output for now
+ * The provider is not for them */
+ if (type != GST_V4L2_DEVICE_TYPE_INVALID)
goto close;
+
+ type = GST_V4L2_DEVICE_TYPE_SINK;
+
+ /* We have opened as a capture as we didn't know, now that know,
+ * let's fixed it */
+ if (v4l2obj->device_caps & V4L2_CAP_VIDEO_OUTPUT_MPLANE)
+ v4l2obj->type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE;
+ else
+ v4l2obj->type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
}
+ if (type == GST_V4L2_DEVICE_TYPE_INVALID)
+ goto close;
+
caps = gst_v4l2_object_get_caps (v4l2obj, NULL);
if (caps == NULL)
@@ -211,7 +219,7 @@
return devices;
}
-#if HAVE_GUDEV
+#ifdef HAVE_GUDEV
static GstDevice *
gst_v4l2_device_provider_device_from_udev (GstV4l2DeviceProvider * provider,
diff --git a/sys/v4l2/gstv4l2object.c b/sys/v4l2/gstv4l2object.c
index d4acbf9..e7637d2 100644
--- a/sys/v4l2/gstv4l2object.c
+++ b/sys/v4l2/gstv4l2object.c
@@ -700,17 +700,17 @@
guint flags = 0;
if (GST_V4L2_IS_OPEN (v4l2object)) {
- flags |= v4l2object->vcap.capabilities &
+ flags |= v4l2object->device_caps &
(V4L2_CAP_VIDEO_CAPTURE |
V4L2_CAP_VIDEO_OUTPUT |
V4L2_CAP_VIDEO_OVERLAY |
V4L2_CAP_VBI_CAPTURE |
V4L2_CAP_VBI_OUTPUT | V4L2_CAP_TUNER | V4L2_CAP_AUDIO);
- if (v4l2object->vcap.capabilities & V4L2_CAP_VIDEO_CAPTURE_MPLANE)
+ if (v4l2object->device_caps & V4L2_CAP_VIDEO_CAPTURE_MPLANE)
flags |= V4L2_CAP_VIDEO_CAPTURE;
- if (v4l2object->vcap.capabilities & V4L2_CAP_VIDEO_OUTPUT_MPLANE)
+ if (v4l2object->device_caps & V4L2_CAP_VIDEO_OUTPUT_MPLANE)
flags |= V4L2_CAP_VIDEO_OUTPUT;
}
g_value_set_flags (value, flags);
@@ -873,6 +873,9 @@
gst_caps_replace (&v4l2object->probed_caps, NULL);
+ /* reset our copy of the device caps */
+ v4l2object->device_caps = 0;
+
if (v4l2object->formats) {
gst_v4l2_object_clear_format_list (v4l2object);
}
@@ -1156,9 +1159,17 @@
/* ERRORS */
failed:
{
- GST_ELEMENT_ERROR (v4l2object->element, RESOURCE, SETTINGS,
- (_("Failed to enumerate possible video formats device '%s' can work with"), v4l2object->videodev), ("Failed to get number %d in pixelformat enumeration for %s. (%d - %s)", n, v4l2object->videodev, errno, g_strerror (errno)));
g_free (format);
+
+ if (!GST_IS_ELEMENT (v4l2object->element))
+ return FALSE;
+
+ GST_ELEMENT_ERROR (v4l2object->element, RESOURCE, SETTINGS,
+ (_("Failed to enumerate possible video formats device '%s' can work "
+ "with"), v4l2object->videodev),
+ ("Failed to get number %d in pixelformat enumeration for %s. (%d - %s)",
+ n, v4l2object->videodev, errno, g_strerror (errno)));
+
return FALSE;
}
}
@@ -2824,13 +2835,13 @@
/* find transport */
mode = v4l2object->req_mode;
- if (v4l2object->vcap.capabilities & V4L2_CAP_READWRITE) {
+ if (v4l2object->device_caps & V4L2_CAP_READWRITE) {
if (v4l2object->req_mode == GST_V4L2_IO_AUTO)
mode = GST_V4L2_IO_RW;
} else if (v4l2object->req_mode == GST_V4L2_IO_RW)
goto method_not_supported;
- if (v4l2object->vcap.capabilities & V4L2_CAP_STREAMING) {
+ if (v4l2object->device_caps & V4L2_CAP_STREAMING) {
if (v4l2object->req_mode == GST_V4L2_IO_AUTO)
mode = GST_V4L2_IO_MMAP;
} else if (v4l2object->req_mode == GST_V4L2_IO_MMAP)
diff --git a/sys/v4l2/gstv4l2object.h b/sys/v4l2/gstv4l2object.h
index 7117d43..5fff161 100644
--- a/sys/v4l2/gstv4l2object.h
+++ b/sys/v4l2/gstv4l2object.h
@@ -133,6 +133,8 @@
/* the video device's capabilities */
struct v4l2_capability vcap;
+ /* opened device specific capabilities */
+ guint32 device_caps;
/* the video device's window properties */
struct v4l2_window vwin;
diff --git a/sys/v4l2/gstv4l2radio.c b/sys/v4l2/gstv4l2radio.c
index 7a6463c..5d74e7e 100644
--- a/sys/v4l2/gstv4l2radio.c
+++ b/sys/v4l2/gstv4l2radio.c
@@ -90,7 +90,12 @@
if (res < 0)
goto caps_failed;
- if (!(vc.capabilities & V4L2_CAP_TUNER))
+ if (vc.capabilities & V4L2_CAP_DEVICE_CAPS)
+ v4l2object->device_caps = vc.device_caps;
+ else
+ v4l2object->device_caps = vc.capabilities;
+
+ if (!(v4l2object->device_caps & V4L2_CAP_TUNER))
goto not_a_tuner;
/* getting audio input */
diff --git a/sys/v4l2/gstv4l2sink.c b/sys/v4l2/gstv4l2sink.c
index ae4a3c2..b5f34eb 100644
--- a/sys/v4l2/gstv4l2sink.c
+++ b/sys/v4l2/gstv4l2sink.c
@@ -250,10 +250,10 @@
struct v4l2_format format;
memset (&format, 0x00, sizeof (struct v4l2_format));
- if ( v4l2sink->v4l2object->vcap.capabilities & V4L2_CAP_VIDEO_OUTPUT_OVERLAY )
- format.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY;
- else
- format.type = V4L2_BUF_TYPE_VIDEO_OVERLAY;
+ if (v4l2sink->v4l2object->device_caps & V4L2_CAP_VIDEO_OUTPUT_OVERLAY)
+ format.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY;
+ else
+ format.type = V4L2_BUF_TYPE_VIDEO_OVERLAY;
if (v4l2_ioctl (fd, VIDIOC_G_FMT, &format) < 0) {
GST_WARNING_OBJECT (v4l2sink, "VIDIOC_G_FMT failed");
diff --git a/sys/v4l2/gstv4l2src.c b/sys/v4l2/gstv4l2src.c
index a6d34b1..3b722b2 100644
--- a/sys/v4l2/gstv4l2src.c
+++ b/sys/v4l2/gstv4l2src.c
@@ -308,27 +308,13 @@
peercaps = gst_pad_peer_query_caps (GST_BASE_SRC_PAD (basesrc), NULL);
GST_DEBUG_OBJECT (basesrc, "caps of peer: %" GST_PTR_FORMAT, peercaps);
LOG_CAPS (basesrc, peercaps);
+
if (peercaps && !gst_caps_is_any (peercaps)) {
GstCaps *icaps = NULL;
- int i;
/* Prefer the first caps we are compatible with that the peer proposed */
- for (i = 0; i < gst_caps_get_size (peercaps); i++) {
- /* get intersection */
- GstCaps *ipcaps = gst_caps_copy_nth (peercaps, i);
-
- GST_DEBUG_OBJECT (basesrc, "peer: %" GST_PTR_FORMAT, ipcaps);
- LOG_CAPS (basesrc, ipcaps);
-
- icaps = gst_caps_intersect (thiscaps, ipcaps);
- gst_caps_unref (ipcaps);
-
- if (!gst_caps_is_empty (icaps))
- break;
-
- gst_caps_unref (icaps);
- icaps = NULL;
- }
+ icaps = gst_caps_intersect_full (peercaps, thiscaps,
+ GST_CAPS_INTERSECT_FIRST);
GST_DEBUG_OBJECT (basesrc, "intersect: %" GST_PTR_FORMAT, icaps);
LOG_CAPS (basesrc, icaps);
@@ -343,6 +329,7 @@
if (gst_structure_get_int (s, "width", &twidth)
&& gst_structure_get_int (s, "height", &theight)) {
+ int i;
/* Walk the structure backwards to get the first entry of the
* smallest resolution bigger (or equal to) the preferred resolution)
diff --git a/sys/v4l2/v4l2-utils.c b/sys/v4l2/v4l2-utils.c
index 73506b9..260c5df 100644
--- a/sys/v4l2/v4l2-utils.c
+++ b/sys/v4l2/v4l2-utils.c
@@ -29,7 +29,7 @@
/* Common device iterator */
/**************************/
-#if HAVE_GUDEV
+#ifdef HAVE_GUDEV
#include <gudev/gudev.h>
struct _GstV4l2GUdevIterator
diff --git a/sys/v4l2/v4l2_calls.c b/sys/v4l2/v4l2_calls.c
index bfb6557..23581ff 100644
--- a/sys/v4l2/v4l2_calls.c
+++ b/sys/v4l2/v4l2_calls.c
@@ -74,11 +74,16 @@
if (v4l2_ioctl (v4l2object->video_fd, VIDIOC_QUERYCAP, &v4l2object->vcap) < 0)
goto cap_failed;
+ if (v4l2object->vcap.capabilities & V4L2_CAP_DEVICE_CAPS)
+ v4l2object->device_caps = v4l2object->vcap.device_caps;
+ else
+ v4l2object->device_caps = v4l2object->vcap.capabilities;
+
GST_LOG_OBJECT (e, "driver: '%s'", v4l2object->vcap.driver);
GST_LOG_OBJECT (e, "card: '%s'", v4l2object->vcap.card);
GST_LOG_OBJECT (e, "bus_info: '%s'", v4l2object->vcap.bus_info);
GST_LOG_OBJECT (e, "version: %08x", v4l2object->vcap.version);
- GST_LOG_OBJECT (e, "capabilites: %08x", v4l2object->vcap.capabilities);
+ GST_LOG_OBJECT (e, "capabilites: %08x", v4l2object->device_caps);
return TRUE;
@@ -484,16 +489,17 @@
* in a contiguous manner. In this case the first v4l2 plane
* contains all the gst planes.
*/
-#define CHECK_CAPS (V4L2_CAP_VIDEO_OUTPUT_MPLANE | V4L2_CAP_VIDEO_M2M_MPLANE)
switch (v4l2object->type) {
case V4L2_BUF_TYPE_VIDEO_OUTPUT:
- if (v4l2object->vcap.capabilities & CHECK_CAPS) {
+ if (v4l2object->device_caps &
+ (V4L2_CAP_VIDEO_OUTPUT_MPLANE | V4L2_CAP_VIDEO_M2M_MPLANE)) {
GST_DEBUG ("adjust type to multi-planar output");
v4l2object->type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE;
}
break;
case V4L2_BUF_TYPE_VIDEO_CAPTURE:
- if (v4l2object->vcap.capabilities & CHECK_CAPS) {
+ if (v4l2object->device_caps &
+ (V4L2_CAP_VIDEO_CAPTURE_MPLANE | V4L2_CAP_VIDEO_M2M_MPLANE)) {
GST_DEBUG ("adjust type to multi-planar capture");
v4l2object->type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
}
@@ -501,7 +507,6 @@
default:
break;
}
-#undef CHECK_CAPS
}
/******************************************************
@@ -556,23 +561,23 @@
/* do we need to be a capture device? */
if (GST_IS_V4L2SRC (v4l2object->element) &&
- !(v4l2object->vcap.capabilities & (V4L2_CAP_VIDEO_CAPTURE |
+ !(v4l2object->device_caps & (V4L2_CAP_VIDEO_CAPTURE |
V4L2_CAP_VIDEO_CAPTURE_MPLANE)))
goto not_capture;
if (GST_IS_V4L2SINK (v4l2object->element) &&
- !(v4l2object->vcap.capabilities & (V4L2_CAP_VIDEO_OUTPUT |
+ !(v4l2object->device_caps & (V4L2_CAP_VIDEO_OUTPUT |
V4L2_CAP_VIDEO_OUTPUT_MPLANE)))
goto not_output;
if (GST_IS_V4L2_VIDEO_DEC (v4l2object->element) &&
/* Today's M2M device only expose M2M */
- !((v4l2object->vcap.capabilities & (V4L2_CAP_VIDEO_M2M |
+ !((v4l2object->device_caps & (V4L2_CAP_VIDEO_M2M |
V4L2_CAP_VIDEO_M2M_MPLANE)) ||
/* But legacy driver may expose both CAPTURE and OUTPUT */
- ((v4l2object->vcap.capabilities &
+ ((v4l2object->device_caps &
(V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_VIDEO_CAPTURE_MPLANE)) &&
- (v4l2object->vcap.capabilities &
+ (v4l2object->device_caps &
(V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_VIDEO_OUTPUT_MPLANE)))))
goto not_m2m;
@@ -625,7 +630,7 @@
GST_ELEMENT_ERROR (v4l2object->element, RESOURCE, NOT_FOUND,
(_("Device '%s' is not a capture device."),
v4l2object->videodev),
- ("Capabilities: 0x%x", v4l2object->vcap.capabilities));
+ ("Capabilities: 0x%x", v4l2object->device_caps));
goto error;
}
not_output:
@@ -633,7 +638,7 @@
GST_ELEMENT_ERROR (v4l2object->element, RESOURCE, NOT_FOUND,
(_("Device '%s' is not a output device."),
v4l2object->videodev),
- ("Capabilities: 0x%x", v4l2object->vcap.capabilities));
+ ("Capabilities: 0x%x", v4l2object->device_caps));
goto error;
}
not_m2m:
@@ -641,7 +646,7 @@
GST_ELEMENT_ERROR (v4l2object->element, RESOURCE, NOT_FOUND,
(_("Device '%s' is not a M2M device."),
v4l2object->videodev),
- ("Capabilities: 0x%x", v4l2object->vcap.capabilities));
+ ("Capabilities: 0x%x", v4l2object->device_caps));
goto error;
}
error:
@@ -670,6 +675,7 @@
GST_V4L2_CHECK_NOT_ACTIVE (v4l2object);
v4l2object->vcap = other->vcap;
+ v4l2object->device_caps = other->device_caps;
gst_v4l2_adjust_buf_type (v4l2object);
v4l2object->video_fd = v4l2_dup (other->video_fd);
@@ -1034,7 +1040,7 @@
/* ERRORS */
input_failed:
- if (v4l2object->vcap.capabilities & V4L2_CAP_TUNER) {
+ if (v4l2object->device_caps & V4L2_CAP_TUNER) {
/* only give a warning message if driver actually claims to have tuner
* support
*/
@@ -1059,7 +1065,7 @@
/* ERRORS */
input_failed:
- if (v4l2object->vcap.capabilities & V4L2_CAP_TUNER) {
+ if (v4l2object->device_caps & V4L2_CAP_TUNER) {
/* only give a warning message if driver actually claims to have tuner
* support
*/
@@ -1091,7 +1097,7 @@
/* ERRORS */
output_failed:
- if (v4l2object->vcap.capabilities & V4L2_CAP_TUNER) {
+ if (v4l2object->device_caps & V4L2_CAP_TUNER) {
/* only give a warning message if driver actually claims to have tuner
* support
*/
@@ -1116,7 +1122,7 @@
/* ERRORS */
output_failed:
- if (v4l2object->vcap.capabilities & V4L2_CAP_TUNER) {
+ if (v4l2object->device_caps & V4L2_CAP_TUNER) {
/* only give a warning message if driver actually claims to have tuner
* support
*/
diff --git a/sys/waveform/Makefile.in b/sys/waveform/Makefile.in
index 17d9922..5a6e9d9 100644
--- a/sys/waveform/Makefile.in
+++ b/sys/waveform/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -343,6 +344,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -449,6 +451,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -516,6 +521,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/sys/ximage/Makefile.in b/sys/ximage/Makefile.in
index ff70e60..78977c5 100644
--- a/sys/ximage/Makefile.in
+++ b/sys/ximage/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -344,6 +345,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -450,6 +452,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -517,6 +522,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/tests/Makefile.in b/tests/Makefile.in
index f313808..2e05f3a 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -97,6 +97,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -314,6 +315,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -420,6 +422,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -487,6 +492,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am
index e6f146c..aa40c70 100644
--- a/tests/check/Makefile.am
+++ b/tests/check/Makefile.am
@@ -221,7 +221,9 @@
if USE_PLUGIN_RTP
check_rtp = \
elements/rtp-payloading \
- elements/rtph263
+ elements/rtph261 \
+ elements/rtph263 \
+ elements/rtpvp9
else
check_rtp =
endif
@@ -307,7 +309,7 @@
endif
if USE_VPX
-check_vpx=elements/vp8enc elements/vp8dec
+check_vpx=elements/vp8enc elements/vp8dec elements/vp9enc
else
check_vpx=
endif
@@ -401,7 +403,7 @@
AM_CFLAGS = $(GST_OBJ_CFLAGS) $(GST_CHECK_CFLAGS) $(CHECK_CFLAGS) \
$(GST_OPTION_CFLAGS) $(GST_CFLAGS) -DGST_TEST_FILES_PATH="\"$(TEST_FILES_DIRECTORY)\"" \
-DGST_CHECK_TEST_ENVIRONMENT_BEACON="\"GST_PLUGIN_LOADING_WHITELIST\"" \
- -UG_DISABLE_ASSERT -UG_DISABLE_CAST_CHECKS
+ -UG_DISABLE_ASSERT -UG_DISABLE_CAST_CHECKS $(PTHREAD_CFLAGS)
LDADD = $(GST_OBJ_LIBS) $(GST_CHECK_LIBS) $(CHECK_LIBS)
# valgrind testing
@@ -531,6 +533,9 @@
$(GST_BASE_LIBS) $(GST_LIBS) $(GST_CHECK_LIBS) $(LDADD)
elements_rtpbin_buffer_list_SOURCES = elements/rtpbin_buffer_list.c
+elements_rtph261_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
+elements_rtph261_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstrtp-$(GST_API_VERSION) $(GST_BASE_LIBS) $(LDADD)
+
elements_rtph263_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
elements_rtph263_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstrtp-$(GST_API_VERSION) $(GST_BASE_LIBS) $(LDADD)
@@ -563,10 +568,10 @@
elements_rtprtx_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstrtp-$(GST_API_VERSION) $(LDADD)
elements_rtpsession_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
-elements_rtpsession_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstnet-$(GST_API_VERSION) -lgstrtp-$(GST_API_VERSION) $(GIO_LIBS) $(LDADD)
+elements_rtpsession_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_NET_LIBS) -lgstrtp-$(GST_API_VERSION) $(GIO_LIBS) $(LDADD)
elements_rtpcollision_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
-elements_rtpcollision_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstnet-$(GST_API_VERSION) -lgstrtp-$(GST_API_VERSION) $(GIO_LIBS) $(LDADD)
+elements_rtpcollision_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_NET_LIBS) -lgstrtp-$(GST_API_VERSION) $(GIO_LIBS) $(LDADD)
elements_rtpaux_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
elements_rtpaux_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstrtp-$(GST_API_VERSION) $(LDADD)
@@ -584,6 +589,9 @@
pipelines_flacdec_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
pipelines_flacdec_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstaudio-$(GST_API_VERSION) $(LDADD)
+elements_vp9enc_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
+elements_vp9enc_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) $(LDADD)
+
pipelines_wavenc_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
pipelines_wavenc_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstaudio-$(GST_API_VERSION) $(LDADD)
diff --git a/tests/check/Makefile.in b/tests/check/Makefile.in
index f64999f..9dcc99d 100644
--- a/tests/check/Makefile.in
+++ b/tests/check/Makefile.in
@@ -115,6 +115,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -223,7 +224,9 @@
@USE_PLUGIN_REPLAYGAIN_TRUE@ elements/rglimiter$(EXEEXT) \
@USE_PLUGIN_REPLAYGAIN_TRUE@ elements/rgvolume$(EXEEXT)
@USE_PLUGIN_RTP_TRUE@am__EXEEXT_25 = elements/rtp-payloading$(EXEEXT) \
-@USE_PLUGIN_RTP_TRUE@ elements/rtph263$(EXEEXT)
+@USE_PLUGIN_RTP_TRUE@ elements/rtph261$(EXEEXT) \
+@USE_PLUGIN_RTP_TRUE@ elements/rtph263$(EXEEXT) \
+@USE_PLUGIN_RTP_TRUE@ elements/rtpvp9$(EXEEXT)
@USE_PLUGIN_RTPMANAGER_TRUE@am__EXEEXT_26 = elements/rtpaux$(EXEEXT) \
@USE_PLUGIN_RTPMANAGER_TRUE@ elements/rtpbin$(EXEEXT) \
@USE_PLUGIN_RTPMANAGER_TRUE@ elements/rtpbin_buffer_list$(EXEEXT) \
@@ -250,7 +253,8 @@
@USE_PLUGIN_VIDEOMIXER_TRUE@am__EXEEXT_36 = \
@USE_PLUGIN_VIDEOMIXER_TRUE@ elements/videomixer$(EXEEXT)
@USE_VPX_TRUE@am__EXEEXT_37 = elements/vp8enc$(EXEEXT) \
-@USE_VPX_TRUE@ elements/vp8dec$(EXEEXT)
+@USE_VPX_TRUE@ elements/vp8dec$(EXEEXT) \
+@USE_VPX_TRUE@ elements/vp9enc$(EXEEXT)
@USE_PLUGIN_WAVENC_TRUE@am__EXEEXT_38 = pipelines/wavenc$(EXEEXT)
@USE_WAVPACK_TRUE@am__EXEEXT_39 = elements/wavpackdec$(EXEEXT) \
@USE_WAVPACK_TRUE@ elements/wavpackenc$(EXEEXT) \
@@ -646,11 +650,21 @@
elements_rtpcollision_OBJECTS = \
elements/elements_rtpcollision-rtpcollision.$(OBJEXT)
elements_rtpcollision_DEPENDENCIES = $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_2)
elements_rtpcollision_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(elements_rtpcollision_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
$(LDFLAGS) -o $@
+elements_rtph261_SOURCES = elements/rtph261.c
+elements_rtph261_OBJECTS = \
+ elements/elements_rtph261-rtph261.$(OBJEXT)
+elements_rtph261_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+elements_rtph261_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(elements_rtph261_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+ -o $@
elements_rtph263_SOURCES = elements/rtph263.c
elements_rtph263_OBJECTS = \
elements/elements_rtph263-rtph263.$(OBJEXT)
@@ -689,11 +703,16 @@
elements_rtpsession_OBJECTS = \
elements/elements_rtpsession-rtpsession.$(OBJEXT)
elements_rtpsession_DEPENDENCIES = $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_2)
elements_rtpsession_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(elements_rtpsession_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
$(LDFLAGS) -o $@
+elements_rtpvp9_SOURCES = elements/rtpvp9.c
+elements_rtpvp9_OBJECTS = elements/rtpvp9.$(OBJEXT)
+elements_rtpvp9_LDADD = $(LDADD)
+elements_rtpvp9_DEPENDENCIES = $(am__DEPENDENCIES_1)
elements_shapewipe_SOURCES = elements/shapewipe.c
elements_shapewipe_OBJECTS = elements/shapewipe.$(OBJEXT)
elements_shapewipe_LDADD = $(LDADD)
@@ -780,6 +799,14 @@
elements_vp8enc_OBJECTS = elements/vp8enc.$(OBJEXT)
elements_vp8enc_LDADD = $(LDADD)
elements_vp8enc_DEPENDENCIES = $(am__DEPENDENCIES_1)
+elements_vp9enc_SOURCES = elements/vp9enc.c
+elements_vp9enc_OBJECTS = elements/elements_vp9enc-vp9enc.$(OBJEXT)
+elements_vp9enc_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_2)
+elements_vp9enc_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(elements_vp9enc_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+ -o $@
elements_wavpackdec_SOURCES = elements/wavpackdec.c
elements_wavpackdec_OBJECTS = elements/wavpackdec.$(OBJEXT)
elements_wavpackdec_LDADD = $(LDADD)
@@ -925,16 +952,17 @@
elements/rglimiter.c elements/rgvolume.c \
elements/rtp-payloading.c elements/rtpaux.c elements/rtpbin.c \
$(elements_rtpbin_buffer_list_SOURCES) elements/rtpcollision.c \
- elements/rtph263.c elements/rtpjitterbuffer.c \
- elements/rtpmux.c elements/rtprtx.c elements/rtpsession.c \
- elements/shapewipe.c elements/souphttpsrc.c \
- elements/spectrum.c elements/splitmux.c elements/sunaudio.c \
- elements/udpsink.c elements/udpsrc.c elements/videobox.c \
- elements/videocrop.c elements/videofilter.c \
- elements/videomixer.c elements/vp8dec.c elements/vp8enc.c \
- elements/wavpackdec.c elements/wavpackenc.c \
- elements/wavpackparse.c elements/wavparse.c elements/y4menc.c \
- generic/states.c $(nodist_orc_deinterlace_SOURCES) \
+ elements/rtph261.c elements/rtph263.c \
+ elements/rtpjitterbuffer.c elements/rtpmux.c elements/rtprtx.c \
+ elements/rtpsession.c elements/rtpvp9.c elements/shapewipe.c \
+ elements/souphttpsrc.c elements/spectrum.c elements/splitmux.c \
+ elements/sunaudio.c elements/udpsink.c elements/udpsrc.c \
+ elements/videobox.c elements/videocrop.c \
+ elements/videofilter.c elements/videomixer.c elements/vp8dec.c \
+ elements/vp8enc.c elements/vp9enc.c elements/wavpackdec.c \
+ elements/wavpackenc.c elements/wavpackparse.c \
+ elements/wavparse.c elements/y4menc.c generic/states.c \
+ $(nodist_orc_deinterlace_SOURCES) \
$(nodist_orc_videobox_SOURCES) \
$(nodist_orc_videomixer_SOURCES) pipelines/effectv.c \
pipelines/flacdec.c pipelines/simple-launch-lines.c \
@@ -964,16 +992,17 @@
elements/rglimiter.c elements/rgvolume.c \
elements/rtp-payloading.c elements/rtpaux.c elements/rtpbin.c \
$(elements_rtpbin_buffer_list_SOURCES) elements/rtpcollision.c \
- elements/rtph263.c elements/rtpjitterbuffer.c \
- elements/rtpmux.c elements/rtprtx.c elements/rtpsession.c \
- elements/shapewipe.c elements/souphttpsrc.c \
- elements/spectrum.c elements/splitmux.c elements/sunaudio.c \
- elements/udpsink.c elements/udpsrc.c elements/videobox.c \
- elements/videocrop.c elements/videofilter.c \
- elements/videomixer.c elements/vp8dec.c elements/vp8enc.c \
- elements/wavpackdec.c elements/wavpackenc.c \
- elements/wavpackparse.c elements/wavparse.c elements/y4menc.c \
- generic/states.c pipelines/effectv.c pipelines/flacdec.c \
+ elements/rtph261.c elements/rtph263.c \
+ elements/rtpjitterbuffer.c elements/rtpmux.c elements/rtprtx.c \
+ elements/rtpsession.c elements/rtpvp9.c elements/shapewipe.c \
+ elements/souphttpsrc.c elements/spectrum.c elements/splitmux.c \
+ elements/sunaudio.c elements/udpsink.c elements/udpsrc.c \
+ elements/videobox.c elements/videocrop.c \
+ elements/videofilter.c elements/videomixer.c elements/vp8dec.c \
+ elements/vp8enc.c elements/vp9enc.c elements/wavpackdec.c \
+ elements/wavpackenc.c elements/wavpackparse.c \
+ elements/wavparse.c elements/y4menc.c generic/states.c \
+ pipelines/effectv.c pipelines/flacdec.c \
pipelines/simple-launch-lines.c pipelines/tagschecking.c \
pipelines/wavenc.c pipelines/wavpack.c
am__can_run_installinfo = \
@@ -1311,6 +1340,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -1417,6 +1447,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -1484,6 +1517,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
@@ -1667,7 +1701,9 @@
@USE_PLUGIN_RTP_FALSE@check_rtp =
@USE_PLUGIN_RTP_TRUE@check_rtp = \
@USE_PLUGIN_RTP_TRUE@ elements/rtp-payloading \
-@USE_PLUGIN_RTP_TRUE@ elements/rtph263
+@USE_PLUGIN_RTP_TRUE@ elements/rtph261 \
+@USE_PLUGIN_RTP_TRUE@ elements/rtph263 \
+@USE_PLUGIN_RTP_TRUE@ elements/rtpvp9
@USE_PLUGIN_RTPMANAGER_FALSE@check_rtpmanager =
@USE_PLUGIN_RTPMANAGER_TRUE@check_rtpmanager = \
@@ -1710,7 +1746,7 @@
@USE_PLUGIN_VIDEOMIXER_FALSE@check_videomixer =
@USE_PLUGIN_VIDEOMIXER_TRUE@check_videomixer = elements/videomixer
@USE_VPX_FALSE@check_vpx =
-@USE_VPX_TRUE@check_vpx = elements/vp8enc elements/vp8dec
+@USE_VPX_TRUE@check_vpx = elements/vp8enc elements/vp8dec elements/vp9enc
@USE_PLUGIN_WAVENC_FALSE@check_wavenc =
@USE_PLUGIN_WAVENC_TRUE@check_wavenc = pipelines/wavenc
@USE_WAVPACK_FALSE@check_wavpack =
@@ -1732,7 +1768,7 @@
AM_CFLAGS = $(GST_OBJ_CFLAGS) $(GST_CHECK_CFLAGS) $(CHECK_CFLAGS) \
$(GST_OPTION_CFLAGS) $(GST_CFLAGS) -DGST_TEST_FILES_PATH="\"$(TEST_FILES_DIRECTORY)\"" \
-DGST_CHECK_TEST_ENVIRONMENT_BEACON="\"GST_PLUGIN_LOADING_WHITELIST\"" \
- -UG_DISABLE_ASSERT -UG_DISABLE_CAST_CHECKS
+ -UG_DISABLE_ASSERT -UG_DISABLE_CAST_CHECKS $(PTHREAD_CFLAGS)
LDADD = $(GST_OBJ_LIBS) $(GST_CHECK_LIBS) $(CHECK_LIBS)
@@ -1835,6 +1871,8 @@
$(GST_BASE_LIBS) $(GST_LIBS) $(GST_CHECK_LIBS) $(LDADD)
elements_rtpbin_buffer_list_SOURCES = elements/rtpbin_buffer_list.c
+elements_rtph261_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
+elements_rtph261_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstrtp-$(GST_API_VERSION) $(GST_BASE_LIBS) $(LDADD)
elements_rtph263_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
elements_rtph263_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstrtp-$(GST_API_VERSION) $(GST_BASE_LIBS) $(LDADD)
elements_rtpmux_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
@@ -1860,9 +1898,9 @@
elements_rtprtx_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
elements_rtprtx_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstrtp-$(GST_API_VERSION) $(LDADD)
elements_rtpsession_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
-elements_rtpsession_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstnet-$(GST_API_VERSION) -lgstrtp-$(GST_API_VERSION) $(GIO_LIBS) $(LDADD)
+elements_rtpsession_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_NET_LIBS) -lgstrtp-$(GST_API_VERSION) $(GIO_LIBS) $(LDADD)
elements_rtpcollision_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
-elements_rtpcollision_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstnet-$(GST_API_VERSION) -lgstrtp-$(GST_API_VERSION) $(GIO_LIBS) $(LDADD)
+elements_rtpcollision_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_NET_LIBS) -lgstrtp-$(GST_API_VERSION) $(GIO_LIBS) $(LDADD)
elements_rtpaux_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
elements_rtpaux_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstrtp-$(GST_API_VERSION) $(LDADD)
@@ -1878,6 +1916,8 @@
elements_videomixer_CFLAGS = $(GST_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
pipelines_flacdec_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
pipelines_flacdec_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstaudio-$(GST_API_VERSION) $(LDADD)
+elements_vp9enc_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
+elements_vp9enc_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) $(LDADD)
pipelines_wavenc_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(CFLAGS) $(AM_CFLAGS)
pipelines_wavenc_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstaudio-$(GST_API_VERSION) $(LDADD)
pipelines_wavpack_LDADD = $(LDADD) $(GST_BASE_LIBS)
@@ -2296,6 +2336,12 @@
elements/rtpcollision$(EXEEXT): $(elements_rtpcollision_OBJECTS) $(elements_rtpcollision_DEPENDENCIES) $(EXTRA_elements_rtpcollision_DEPENDENCIES) elements/$(am__dirstamp)
@rm -f elements/rtpcollision$(EXEEXT)
$(AM_V_CCLD)$(elements_rtpcollision_LINK) $(elements_rtpcollision_OBJECTS) $(elements_rtpcollision_LDADD) $(LIBS)
+elements/elements_rtph261-rtph261.$(OBJEXT): elements/$(am__dirstamp) \
+ elements/$(DEPDIR)/$(am__dirstamp)
+
+elements/rtph261$(EXEEXT): $(elements_rtph261_OBJECTS) $(elements_rtph261_DEPENDENCIES) $(EXTRA_elements_rtph261_DEPENDENCIES) elements/$(am__dirstamp)
+ @rm -f elements/rtph261$(EXEEXT)
+ $(AM_V_CCLD)$(elements_rtph261_LINK) $(elements_rtph261_OBJECTS) $(elements_rtph261_LDADD) $(LIBS)
elements/elements_rtph263-rtph263.$(OBJEXT): elements/$(am__dirstamp) \
elements/$(DEPDIR)/$(am__dirstamp)
@@ -2326,6 +2372,12 @@
elements/rtpsession$(EXEEXT): $(elements_rtpsession_OBJECTS) $(elements_rtpsession_DEPENDENCIES) $(EXTRA_elements_rtpsession_DEPENDENCIES) elements/$(am__dirstamp)
@rm -f elements/rtpsession$(EXEEXT)
$(AM_V_CCLD)$(elements_rtpsession_LINK) $(elements_rtpsession_OBJECTS) $(elements_rtpsession_LDADD) $(LIBS)
+elements/rtpvp9.$(OBJEXT): elements/$(am__dirstamp) \
+ elements/$(DEPDIR)/$(am__dirstamp)
+
+elements/rtpvp9$(EXEEXT): $(elements_rtpvp9_OBJECTS) $(elements_rtpvp9_DEPENDENCIES) $(EXTRA_elements_rtpvp9_DEPENDENCIES) elements/$(am__dirstamp)
+ @rm -f elements/rtpvp9$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(elements_rtpvp9_OBJECTS) $(elements_rtpvp9_LDADD) $(LIBS)
elements/shapewipe.$(OBJEXT): elements/$(am__dirstamp) \
elements/$(DEPDIR)/$(am__dirstamp)
@@ -2404,6 +2456,12 @@
elements/vp8enc$(EXEEXT): $(elements_vp8enc_OBJECTS) $(elements_vp8enc_DEPENDENCIES) $(EXTRA_elements_vp8enc_DEPENDENCIES) elements/$(am__dirstamp)
@rm -f elements/vp8enc$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(elements_vp8enc_OBJECTS) $(elements_vp8enc_LDADD) $(LIBS)
+elements/elements_vp9enc-vp9enc.$(OBJEXT): elements/$(am__dirstamp) \
+ elements/$(DEPDIR)/$(am__dirstamp)
+
+elements/vp9enc$(EXEEXT): $(elements_vp9enc_OBJECTS) $(elements_vp9enc_DEPENDENCIES) $(EXTRA_elements_vp9enc_DEPENDENCIES) elements/$(am__dirstamp)
+ @rm -f elements/vp9enc$(EXEEXT)
+ $(AM_V_CCLD)$(elements_vp9enc_LINK) $(elements_vp9enc_OBJECTS) $(elements_vp9enc_LDADD) $(LIBS)
elements/wavpackdec.$(OBJEXT): elements/$(am__dirstamp) \
elements/$(DEPDIR)/$(am__dirstamp)
@@ -2567,6 +2625,7 @@
@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_rtpaux-rtpaux.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_rtpbin_buffer_list-rtpbin_buffer_list.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_rtpcollision-rtpcollision.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_rtph261-rtph261.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_rtph263-rtph263.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_rtpjitterbuffer-rtpjitterbuffer.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_rtpmux-rtpmux.Po@am__quote@
@@ -2579,6 +2638,7 @@
@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_videocrop-videocrop.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_videofilter-videofilter.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_videomixer-videomixer.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/elements_vp9enc-vp9enc.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/flacparse.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/flvmux.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/gdkpixbufoverlay.Po@am__quote@
@@ -2593,6 +2653,7 @@
@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/qtdemux.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/rtp-payloading.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/rtpbin.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/rtpvp9.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/shapewipe.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/splitmux.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@elements/$(DEPDIR)/udpsink.Po@am__quote@
@@ -3122,6 +3183,20 @@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_rtpcollision_CFLAGS) $(CFLAGS) -c -o elements/elements_rtpcollision-rtpcollision.obj `if test -f 'elements/rtpcollision.c'; then $(CYGPATH_W) 'elements/rtpcollision.c'; else $(CYGPATH_W) '$(srcdir)/elements/rtpcollision.c'; fi`
+elements/elements_rtph261-rtph261.o: elements/rtph261.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_rtph261_CFLAGS) $(CFLAGS) -MT elements/elements_rtph261-rtph261.o -MD -MP -MF elements/$(DEPDIR)/elements_rtph261-rtph261.Tpo -c -o elements/elements_rtph261-rtph261.o `test -f 'elements/rtph261.c' || echo '$(srcdir)/'`elements/rtph261.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_rtph261-rtph261.Tpo elements/$(DEPDIR)/elements_rtph261-rtph261.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='elements/rtph261.c' object='elements/elements_rtph261-rtph261.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_rtph261_CFLAGS) $(CFLAGS) -c -o elements/elements_rtph261-rtph261.o `test -f 'elements/rtph261.c' || echo '$(srcdir)/'`elements/rtph261.c
+
+elements/elements_rtph261-rtph261.obj: elements/rtph261.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_rtph261_CFLAGS) $(CFLAGS) -MT elements/elements_rtph261-rtph261.obj -MD -MP -MF elements/$(DEPDIR)/elements_rtph261-rtph261.Tpo -c -o elements/elements_rtph261-rtph261.obj `if test -f 'elements/rtph261.c'; then $(CYGPATH_W) 'elements/rtph261.c'; else $(CYGPATH_W) '$(srcdir)/elements/rtph261.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_rtph261-rtph261.Tpo elements/$(DEPDIR)/elements_rtph261-rtph261.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='elements/rtph261.c' object='elements/elements_rtph261-rtph261.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_rtph261_CFLAGS) $(CFLAGS) -c -o elements/elements_rtph261-rtph261.obj `if test -f 'elements/rtph261.c'; then $(CYGPATH_W) 'elements/rtph261.c'; else $(CYGPATH_W) '$(srcdir)/elements/rtph261.c'; fi`
+
elements/elements_rtph263-rtph263.o: elements/rtph263.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_rtph263_CFLAGS) $(CFLAGS) -MT elements/elements_rtph263-rtph263.o -MD -MP -MF elements/$(DEPDIR)/elements_rtph263-rtph263.Tpo -c -o elements/elements_rtph263-rtph263.o `test -f 'elements/rtph263.c' || echo '$(srcdir)/'`elements/rtph263.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_rtph263-rtph263.Tpo elements/$(DEPDIR)/elements_rtph263-rtph263.Po
@@ -3290,6 +3365,20 @@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_videomixer_CFLAGS) $(CFLAGS) -c -o elements/elements_videomixer-videomixer.obj `if test -f 'elements/videomixer.c'; then $(CYGPATH_W) 'elements/videomixer.c'; else $(CYGPATH_W) '$(srcdir)/elements/videomixer.c'; fi`
+elements/elements_vp9enc-vp9enc.o: elements/vp9enc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_vp9enc_CFLAGS) $(CFLAGS) -MT elements/elements_vp9enc-vp9enc.o -MD -MP -MF elements/$(DEPDIR)/elements_vp9enc-vp9enc.Tpo -c -o elements/elements_vp9enc-vp9enc.o `test -f 'elements/vp9enc.c' || echo '$(srcdir)/'`elements/vp9enc.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_vp9enc-vp9enc.Tpo elements/$(DEPDIR)/elements_vp9enc-vp9enc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='elements/vp9enc.c' object='elements/elements_vp9enc-vp9enc.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_vp9enc_CFLAGS) $(CFLAGS) -c -o elements/elements_vp9enc-vp9enc.o `test -f 'elements/vp9enc.c' || echo '$(srcdir)/'`elements/vp9enc.c
+
+elements/elements_vp9enc-vp9enc.obj: elements/vp9enc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_vp9enc_CFLAGS) $(CFLAGS) -MT elements/elements_vp9enc-vp9enc.obj -MD -MP -MF elements/$(DEPDIR)/elements_vp9enc-vp9enc.Tpo -c -o elements/elements_vp9enc-vp9enc.obj `if test -f 'elements/vp9enc.c'; then $(CYGPATH_W) 'elements/vp9enc.c'; else $(CYGPATH_W) '$(srcdir)/elements/vp9enc.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) elements/$(DEPDIR)/elements_vp9enc-vp9enc.Tpo elements/$(DEPDIR)/elements_vp9enc-vp9enc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='elements/vp9enc.c' object='elements/elements_vp9enc-vp9enc.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_vp9enc_CFLAGS) $(CFLAGS) -c -o elements/elements_vp9enc-vp9enc.obj `if test -f 'elements/vp9enc.c'; then $(CYGPATH_W) 'elements/vp9enc.c'; else $(CYGPATH_W) '$(srcdir)/elements/vp9enc.c'; fi`
+
orc/orc_deinterlace-deinterlace.o: orc/deinterlace.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(orc_deinterlace_CFLAGS) $(CFLAGS) -MT orc/orc_deinterlace-deinterlace.o -MD -MP -MF orc/$(DEPDIR)/orc_deinterlace-deinterlace.Tpo -c -o orc/orc_deinterlace-deinterlace.o `test -f 'orc/deinterlace.c' || echo '$(srcdir)/'`orc/deinterlace.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) orc/$(DEPDIR)/orc_deinterlace-deinterlace.Tpo orc/$(DEPDIR)/orc_deinterlace-deinterlace.Po
@@ -3969,6 +4058,13 @@
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
+elements/rtph261.log: elements/rtph261$(EXEEXT)
+ @p='elements/rtph261$(EXEEXT)'; \
+ b='elements/rtph261'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
elements/rtph263.log: elements/rtph263$(EXEEXT)
@p='elements/rtph263$(EXEEXT)'; \
b='elements/rtph263'; \
@@ -3976,6 +4072,13 @@
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
+elements/rtpvp9.log: elements/rtpvp9$(EXEEXT)
+ @p='elements/rtpvp9$(EXEEXT)'; \
+ b='elements/rtpvp9'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
elements/rtpaux.log: elements/rtpaux$(EXEEXT)
@p='elements/rtpaux$(EXEEXT)'; \
b='elements/rtpaux'; \
@@ -4137,6 +4240,13 @@
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
+elements/vp9enc.log: elements/vp9enc$(EXEEXT)
+ @p='elements/vp9enc$(EXEEXT)'; \
+ b='elements/vp9enc'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
pipelines/wavenc.log: pipelines/wavenc$(EXEEXT)
@p='pipelines/wavenc$(EXEEXT)'; \
b='pipelines/wavenc'; \
diff --git a/tests/check/elements/audiofirfilter.c b/tests/check/elements/audiofirfilter.c
index dd31e87..d8b452c 100644
--- a/tests/check/elements/audiofirfilter.c
+++ b/tests/check/elements/audiofirfilter.c
@@ -158,7 +158,6 @@
bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
gst_bus_add_signal_watch (bus);
g_signal_connect (G_OBJECT (bus), "message", G_CALLBACK (on_message), loop);
- gst_object_unref (GST_OBJECT (bus));
fail_if (gst_element_set_state (pipeline,
GST_STATE_PLAYING) == GST_STATE_CHANGE_FAILURE);
@@ -171,6 +170,8 @@
fail_unless (gst_element_set_state (pipeline,
GST_STATE_NULL) == GST_STATE_CHANGE_SUCCESS);
+ gst_bus_remove_signal_watch (bus);
+ gst_object_unref (GST_OBJECT (bus));
g_main_loop_unref (loop);
gst_object_unref (pipeline);
}
diff --git a/tests/check/elements/audioiirfilter.c b/tests/check/elements/audioiirfilter.c
index 8faae79..af2c9d3 100644
--- a/tests/check/elements/audioiirfilter.c
+++ b/tests/check/elements/audioiirfilter.c
@@ -155,7 +155,6 @@
bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
gst_bus_add_signal_watch (bus);
g_signal_connect (G_OBJECT (bus), "message", G_CALLBACK (on_message), loop);
- gst_object_unref (GST_OBJECT (bus));
fail_if (gst_element_set_state (pipeline,
GST_STATE_PLAYING) == GST_STATE_CHANGE_FAILURE);
@@ -168,6 +167,8 @@
fail_unless (gst_element_set_state (pipeline,
GST_STATE_NULL) == GST_STATE_CHANGE_SUCCESS);
+ gst_bus_remove_signal_watch (bus);
+ gst_object_unref (GST_OBJECT (bus));
g_main_loop_unref (loop);
gst_object_unref (pipeline);
}
diff --git a/tests/check/elements/qtdemux.c b/tests/check/elements/qtdemux.c
index 55d2862..56b6693 100644
--- a/tests/check/elements/qtdemux.c
+++ b/tests/check/elements/qtdemux.c
@@ -131,6 +131,10 @@
offset += seg_1_sample_sizes[i];
pts += seg_1_sample_duration;
}
+
+ gst_object_unref (sinkpad);
+ gst_element_set_state (qtdemux, GST_STATE_NULL);
+ gst_object_unref (qtdemux);
}
GST_END_TEST;
diff --git a/tests/check/elements/rtp-payloading.c b/tests/check/elements/rtp-payloading.c
index 2eea4a9..c59f9be 100644
--- a/tests/check/elements/rtp-payloading.c
+++ b/tests/check/elements/rtp-payloading.c
@@ -60,6 +60,7 @@
* Count the size of the payload in the buffer list.
*/
len = gst_buffer_list_length (list);
+ GST_LOG ("list length %u", len);
/* Loop through all groups */
for (i = 0; i < len; i++) {
@@ -69,12 +70,14 @@
paybuf = gst_buffer_list_get (list, i);
/* only count real data which is expected in last memory block */
+ GST_LOG ("n_memory %d", gst_buffer_n_memory (paybuf));
fail_unless (gst_buffer_n_memory (paybuf) > 1);
mem = gst_buffer_get_memory_range (paybuf, gst_buffer_n_memory (paybuf) - 1,
1);
size = gst_memory_get_sizes (mem, NULL, NULL);
gst_memory_unref (mem);
chain_list_bytes_received += size;
+ GST_LOG ("size %d, total %u", size, chain_list_bytes_received);
}
gst_buffer_list_unref (list);
@@ -296,7 +299,6 @@
bus = gst_pipeline_get_bus (GST_PIPELINE (p->pipeline));
gst_bus_add_watch (bus, rtp_bus_callback, (gpointer) mainloop);
- gst_object_unref (bus);
/* Set pipeline to PLAYING. */
gst_element_set_state (p->pipeline, GST_STATE_PLAYING);
@@ -351,6 +353,9 @@
/* Release mainloop. */
g_main_loop_unref (mainloop);
+ gst_bus_remove_watch (bus);
+ gst_object_unref (bus);
+
fail_if (p->custom_event);
}
@@ -752,6 +757,161 @@
GST_END_TEST;
+static const guint8 rtp_h265_frame_data[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static int rtp_h265_frame_data_size = 20;
+
+static int rtp_h265_frame_count = 1;
+
+GST_START_TEST (rtp_h265)
+{
+ rtp_pipeline_test (rtp_h265_frame_data, rtp_h265_frame_data_size,
+ rtp_h265_frame_count,
+ "video/x-h265,stream-format=(string)byte-stream,alignment=(string)nal",
+ "rtph265pay", "rtph265depay", 0, 0, FALSE);
+
+ /* config-interval property used to be of uint type, was changed to int,
+ * make sure old GValue stuff still works */
+ {
+ GValue val = G_VALUE_INIT;
+ GstElement *rtph265pay;
+ GParamSpec *pspec;
+
+
+ rtph265pay = gst_element_factory_make ("rtph265pay", NULL);
+ pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (rtph265pay),
+ "config-interval");
+ fail_unless (pspec->value_type == G_TYPE_INT);
+ g_value_init (&val, G_TYPE_UINT);
+ g_value_set_uint (&val, 10);
+ g_object_set_property (G_OBJECT (rtph265pay), "config-interval", &val);
+ g_value_set_uint (&val, 0);
+ g_object_get_property (G_OBJECT (rtph265pay), "config-interval", &val);
+ fail_unless_equals_int (10, g_value_get_uint (&val));
+ g_object_set (G_OBJECT (rtph265pay), "config-interval", -1, NULL);
+ g_object_get_property (G_OBJECT (rtph265pay), "config-interval", &val);
+ fail_unless (g_value_get_uint (&val) == G_MAXUINT);
+ g_value_unset (&val);
+ gst_object_unref (rtph265pay);
+ }
+}
+
+GST_END_TEST;
+static const guint8 rtp_h265_list_lt_mtu_frame_data[] = {
+ /* not packetized, next NALU starts with 0x00000001 */
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10
+};
+
+static int rtp_h265_list_lt_mtu_frame_data_size = 16;
+
+static int rtp_h265_list_lt_mtu_frame_count = 2;
+
+/* 3 bytes start code prefixed with one zero byte, NALU header is in payload */
+static int rtp_h265_list_lt_mtu_bytes_sent = 2 * (16 - 3 - 1);
+
+static int rtp_h265_list_lt_mtu_mtu_size = 1024;
+
+GST_START_TEST (rtp_h265_list_lt_mtu)
+{
+ rtp_pipeline_test (rtp_h265_list_lt_mtu_frame_data,
+ rtp_h265_list_lt_mtu_frame_data_size, rtp_h265_list_lt_mtu_frame_count,
+ "video/x-h265,stream-format=(string)byte-stream,alignment=(string)nal",
+ "rtph265pay", "rtph265depay", rtp_h265_list_lt_mtu_bytes_sent,
+ rtp_h265_list_lt_mtu_mtu_size, TRUE);
+}
+
+GST_END_TEST;
+static const guint8 rtp_h265_list_lt_mtu_frame_data_hvc1[] = {
+ /* packetized data */
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
+};
+
+/* length size is 3 bytes */
+static int rtp_h265_list_lt_mtu_bytes_sent_hvc1 = 2 * (16 - 2 * 3);
+
+
+GST_START_TEST (rtp_h265_list_lt_mtu_hvc1)
+{
+ rtp_pipeline_test (rtp_h265_list_lt_mtu_frame_data_hvc1,
+ rtp_h265_list_lt_mtu_frame_data_size, rtp_h265_list_lt_mtu_frame_count,
+ "video/x-h265,stream-format=(string)hvc1,alignment=(string)au,"
+ "codec_data=(buffer)0101c000000080000000000099f000fcfdf8f800000203a000010"
+ "01840010c01ffff01c000000300800000030000030099ac0900a10001003042010101c00"
+ "0000300800000030000030099a00a080f1fe36bbb5377725d602dc040404100000300010"
+ "00003000a0800a2000100074401c172b02240",
+ "rtph265pay", "rtph265depay", rtp_h265_list_lt_mtu_bytes_sent_hvc1,
+ rtp_h265_list_lt_mtu_mtu_size, TRUE);
+}
+
+GST_END_TEST;
+static const guint8 rtp_h265_list_gt_mtu_frame_data[] = {
+ /* not packetized, next NAL starts with 0x000001 */
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10
+};
+
+static const int rtp_h265_list_gt_mtu_frame_data_size = 62;
+
+static const int rtp_h265_list_gt_mtu_frame_count = 1;
+
+/* start code is 3 bytes, NALU header is 2 bytes */
+static int rtp_h265_list_gt_mtu_bytes_sent = 1 * (62 - 3 - 2);
+
+static int rtp_h265_list_gt_mtu_mtu_size = 28;
+
+GST_START_TEST (rtp_h265_list_gt_mtu)
+{
+ rtp_pipeline_test (rtp_h265_list_gt_mtu_frame_data,
+ rtp_h265_list_gt_mtu_frame_data_size, rtp_h265_list_gt_mtu_frame_count,
+ "video/x-h265,stream-format=(string)byte-stream,alignment=(string)nal",
+ "rtph265pay", "rtph265depay", rtp_h265_list_gt_mtu_bytes_sent,
+ rtp_h265_list_gt_mtu_mtu_size, TRUE);
+}
+
+GST_END_TEST;
+static const guint8 rtp_h265_list_gt_mtu_frame_data_hvc1[] = {
+ /* packetized data */
+ 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+/* length size is 3 bytes, NALU header is 2 bytes */
+static int rtp_h265_list_gt_mtu_bytes_sent_hvc1 = 1 * (62 - 2 * 3 - 2 * 2);
+
+GST_START_TEST (rtp_h265_list_gt_mtu_hvc1)
+{
+ rtp_pipeline_test (rtp_h265_list_gt_mtu_frame_data_hvc1,
+ rtp_h265_list_gt_mtu_frame_data_size, rtp_h265_list_gt_mtu_frame_count,
+ "video/x-h265,stream-format=(string)hvc1,alignment=(string)au,"
+ "codec_data=(buffer)0101c000000080000000000099f000fcfdf8f800000203a000010"
+ "01840010c01ffff01c000000300800000030000030099ac0900a10001003042010101c00"
+ "0000300800000030000030099a00a080f1fe36bbb5377725d602dc040404100000300010"
+ "00003000a0800a2000100074401c172b02240",
+ "rtph265pay", "rtph265depay", rtp_h265_list_gt_mtu_bytes_sent_hvc1,
+ rtp_h265_list_gt_mtu_mtu_size, TRUE);
+}
+
+GST_END_TEST;
+
/* KLV data from Day_Flight.mpg */
static const guint8 rtp_KLV_frame_data[] = {
0x06, 0x0e, 0x2b, 0x34, 0x02, 0x0b, 0x01, 0x01,
@@ -1200,6 +1360,11 @@
tcase_add_test (tc_chain, rtp_h264_list_lt_mtu_avc);
tcase_add_test (tc_chain, rtp_h264_list_gt_mtu);
tcase_add_test (tc_chain, rtp_h264_list_gt_mtu_avc);
+ tcase_add_test (tc_chain, rtp_h265);
+ tcase_add_test (tc_chain, rtp_h265_list_lt_mtu);
+ tcase_add_test (tc_chain, rtp_h265_list_lt_mtu_hvc1);
+ tcase_add_test (tc_chain, rtp_h265_list_gt_mtu);
+ tcase_add_test (tc_chain, rtp_h265_list_gt_mtu_hvc1);
tcase_add_test (tc_chain, rtp_klv);
tcase_add_test (tc_chain, rtp_klv_fragmented);
tcase_add_test (tc_chain, rtp_L16);
diff --git a/tests/check/elements/rtph261.c b/tests/check/elements/rtph261.c
new file mode 100644
index 0000000..7c34d37
--- /dev/null
+++ b/tests/check/elements/rtph261.c
@@ -0,0 +1,142 @@
+#include <gst/check/check.h>
+#include <gst/check/gstharness.h>
+#include <gst/rtp/gstrtpbuffer.h>
+
+#define H261_RTP_CAPS_STR \
+ "application/x-rtp,media=video,encoding-name=H261,clock-rate=90000,payload=31"
+
+typedef struct _GstRtpH261PayHeader
+{
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+ unsigned int v:1; /* Motion vector flag */
+ unsigned int i:1; /* Intra encoded data */
+ unsigned int ebit:3; /* End position */
+ unsigned int sbit:3; /* Start position */
+
+ unsigned int mbap1:4; /* MB address predictor - part1 */
+ unsigned int gobn:4; /* GOB number */
+
+ unsigned int hmvd1:2; /* Horizontal motion vector data - part1 */
+ unsigned int quant:5; /* Quantizer */
+ unsigned int mbap2:1; /* MB address predictor - part2 */
+
+ unsigned int vmvd:5; /* Horizontal motion vector data - part1 */
+ unsigned int hmvd2:3; /* Vertical motion vector data */
+#elif G_BYTE_ORDER == G_BIG_ENDIAN
+ unsigned int sbit:3; /* Start position */
+ unsigned int ebit:3; /* End position */
+ unsigned int i:1; /* Intra encoded data */
+ unsigned int v:1; /* Motion vector flag */
+
+ unsigned int gobn:4; /* GOB number */
+ unsigned int mbap1:4; /* MB address predictor - part1 */
+
+ unsigned int mbap2:1; /* MB address predictor - part2 */
+ unsigned int quant:5; /* Quantizer */
+ unsigned int hmvd1:2; /* Horizontal motion vector data - part1 */
+
+ unsigned int hmvd2:3; /* Vertical motion vector data */
+ unsigned int vmvd:5; /* Horizontal motion vector data - part1 */
+#else
+#error "G_BYTE_ORDER should be big or little endian."
+#endif
+} GstRtpH261PayHeader;
+
+#define GST_RTP_H261_PAYLOAD_HEADER_LEN 4
+
+static guint8 *
+create_h261_payload (gint sbit, gint ebit, gint psc, gsize size)
+{
+ GstRtpH261PayHeader header;
+ const gint header_len = 4;
+ guint8 *data = g_malloc0 (size);
+
+ memset (&header, 0x00, sizeof (header));
+
+ header.sbit = sbit;
+ header.ebit = ebit;
+
+ memset (data, 0xff, size);
+ memcpy (data, &header, header_len);
+
+ if (psc) {
+ guint32 word = 0x000100ff >> sbit;
+ data[header_len + 0] = (word >> 24) & 0xff;
+ data[header_len + 1] = (word >> 16) & 0xff;
+ data[header_len + 2] = (word >> 8) & 0xff;
+ data[header_len + 3] = (word >> 0) & 0xff;
+ }
+
+ return data;
+}
+
+static GstBuffer *
+create_rtp_copy_payload (const guint8 * data, gsize size, guint ts, guint16 seq,
+ gboolean marker, guint csrcs)
+{
+ GstBuffer *buf = gst_rtp_buffer_new_allocate (size, 0, csrcs);
+ GstRTPBuffer rtp = GST_RTP_BUFFER_INIT;
+
+ gst_rtp_buffer_map (buf, GST_MAP_WRITE, &rtp);
+
+ gst_rtp_buffer_set_seq (&rtp, seq);
+ gst_rtp_buffer_set_marker (&rtp, marker);
+ memcpy (gst_rtp_buffer_get_payload (&rtp), data, size);
+
+ GST_BUFFER_PTS (buf) = (ts) * (GST_SECOND / 30);
+ GST_BUFFER_DURATION (buf) = (GST_SECOND / 30);
+
+ gst_rtp_buffer_unmap (&rtp);
+
+ return buf;
+}
+
+GST_START_TEST (test_h263depay_empty_payload)
+{
+ GstHarness *h = gst_harness_new ("rtph261depay");
+ gint sbit = 4;
+ gint ebit = 4;
+ gsize size;
+ guint8 *payload;
+ guint seq = 0;
+
+ gst_harness_set_src_caps_str (h, H261_RTP_CAPS_STR);
+
+ /* First send a proper packet with picture start code */
+ size = 100;
+ payload = create_h261_payload (sbit, ebit, TRUE, size);
+ gst_harness_push (h, create_rtp_copy_payload (payload, size, 0, seq++, FALSE,
+ 0));
+ g_free (payload);
+
+ /* Not a complete frame */
+ fail_unless_equals_int (gst_harness_buffers_received (h), 0);
+
+ /* Second buffer has invalid empty payload */
+ size = GST_RTP_H261_PAYLOAD_HEADER_LEN;
+ payload = create_h261_payload (sbit, ebit, FALSE, size);
+ gst_harness_push (h, create_rtp_copy_payload (payload, size, 0, seq++, TRUE,
+ 0));
+ g_free (payload);
+
+ /* Invalid payload should be dropped */
+ fail_unless_equals_int (gst_harness_buffers_received (h), 0);
+
+ gst_harness_teardown (h);
+}
+
+GST_END_TEST;
+
+static Suite *
+rtph261_suite (void)
+{
+ Suite *s = suite_create ("rtph261");
+ TCase *tc_chain;
+
+ suite_add_tcase (s, (tc_chain = tcase_create ("h261depay")));
+ tcase_add_test (tc_chain, test_h263depay_empty_payload);
+
+ return s;
+}
+
+GST_CHECK_MAIN (rtph261);
diff --git a/tests/check/elements/rtph263.c b/tests/check/elements/rtph263.c
index 90f4d5c..64e97f5 100644
--- a/tests/check/elements/rtph263.c
+++ b/tests/check/elements/rtph263.c
@@ -27,6 +27,25 @@
"application/x-rtp,media=video,encoding-name=H263,clock-rate=90000," \
"payload=" G_STRINGIFY(p)
+#define H263P_RTP_CAPS_STR(p) \
+ "application/x-rtp,media=video,encoding-name=H263-1998,clock-rate=90000," \
+ "payload="G_STRINGIFY(p)
+
+static gboolean
+have_element (const gchar * element_name)
+{
+ GstElement *element;
+ gboolean ret;
+
+ element = gst_element_factory_make (element_name, NULL);
+ ret = element != NULL;
+
+ if (element)
+ gst_object_unref (element);
+
+ return ret;
+}
+
static GstBuffer *
create_rtp_buffer (guint8 * data, gsize size, guint ts, gint seqnum)
{
@@ -102,6 +121,158 @@
GST_END_TEST;
+GST_START_TEST (test_h263pay_mode_b_snow)
+{
+ /* Payloading one large frame (like snow) is more likely to use mode b and
+ * trigger issues in valgrind seen previously like double free, invalid read
+ * etc. */
+ GstHarness *h;
+ guint frames = 1;
+ guint i;
+
+ if (!have_element ("avenc_h263"))
+ return;
+
+ h = gst_harness_new_parse (
+ "avenc_h263 rtp-payload-size=1 ! rtph263pay mtu=1350 ");
+ gst_harness_add_src_parse (h, "videotestsrc pattern=snow is-live=1 ! "
+ "capsfilter caps=\"video/x-raw,format=I420,width=176,height=144\"", TRUE);
+
+ for (i = 0; i < frames; i++)
+ gst_harness_push_from_src (h);
+ fail_unless (gst_harness_buffers_received (h) >= frames);
+
+ gst_harness_teardown (h);
+}
+GST_END_TEST;
+
+/* gst_rtp_buffer_get_payload() may return a copy of the payload. This test
+ * makes sure that the rtph263pdepay also produces the correct output in this
+ * case. */
+GST_START_TEST (test_h263pdepay_fragmented_memory_non_writable_buffer)
+{
+ GstHarness *h;
+ GstBuffer *header_buf, *payload_buf, *buf;
+ GstRTPBuffer rtp = GST_RTP_BUFFER_INIT;
+ guint8 header[] = {
+ 0x04, 0x00 };
+ guint8 payload[] = {
+ 0x80, 0x02, 0x1c, 0xb8, 0x01, 0x00, 0x11, 0xe0, 0x44, 0xc4 };
+ guint8 frame[] = {
+ 0x00, 0x00, 0x80, 0x02, 0x1c, 0xb8, 0x01, 0x00, 0x11, 0xe0, 0x44, 0xc4 };
+
+ h = gst_harness_new ("rtph263pdepay");
+ gst_harness_set_src_caps_str (h, "application/x-rtp, media=video, "
+ "clock-rate=90000, encoding-name=H263-1998");
+
+ /* Packet with M=1, P=1 */
+ header_buf = gst_rtp_buffer_new_allocate (sizeof (header), 0, 0);
+ gst_rtp_buffer_map (header_buf, GST_MAP_WRITE, &rtp);
+ gst_rtp_buffer_set_marker (&rtp, TRUE);
+ memcpy (gst_rtp_buffer_get_payload (&rtp), header, sizeof (header));
+ gst_rtp_buffer_unmap (&rtp);
+
+ payload_buf = gst_buffer_new_allocate (NULL, sizeof (payload), NULL);
+ gst_buffer_fill (payload_buf, 0, payload, sizeof (payload));
+ buf = gst_buffer_append (header_buf, payload_buf);
+
+ gst_harness_push (h, gst_buffer_ref (buf));
+ gst_buffer_unref (buf);
+
+ buf = gst_harness_pull (h);
+ fail_unless (gst_buffer_memcmp (buf, 0, frame, sizeof (frame)) == 0);
+ gst_buffer_unref (buf);
+
+ gst_harness_teardown (h);
+}
+GST_END_TEST;
+
+/* gst_rtp_buffer_get_payload() may return a copy of the payload. This test
+ * makes sure that the rtph263pdepay also produces the correct output in this
+ * case. */
+GST_START_TEST (test_h263pdepay_fragmented_memory_non_writable_buffer_split_frame)
+{
+ GstHarness *h;
+ GstBuffer *header_buf, *payload_buf, *buf;
+ GstRTPBuffer rtp = GST_RTP_BUFFER_INIT;
+ guint8 header[] = {
+ 0x04, 0x00 };
+ guint8 payload[] = {
+ 0x80, 0x02, 0x1c, 0xb8, 0x01, 0x00, 0x11, 0xe0, 0x44, 0xc4 };
+ guint8 frame[] = {
+ 0x00, 0x00, 0x80, 0x02, 0x1c, 0xb8, 0x01, 0x00, 0x11, 0xe0, 0x44, 0xc4 };
+
+ h = gst_harness_new ("rtph263pdepay");
+ gst_harness_set_src_caps_str (h, "application/x-rtp, media=video, "
+ "clock-rate=90000, encoding-name=H263-1998");
+
+ /* First packet, M=0, P=1 */
+ header_buf = gst_rtp_buffer_new_allocate (sizeof (header), 0, 0);
+ gst_rtp_buffer_map (header_buf, GST_MAP_WRITE, &rtp);
+ gst_rtp_buffer_set_marker (&rtp, FALSE);
+ gst_rtp_buffer_set_seq (&rtp, 0);
+ memcpy (gst_rtp_buffer_get_payload (&rtp), header, sizeof (header));
+ gst_rtp_buffer_unmap (&rtp);
+
+ payload_buf = gst_buffer_new_allocate (NULL, sizeof (payload), NULL);
+ gst_buffer_fill (payload_buf, 0, payload, sizeof (payload));
+ buf = gst_buffer_append (header_buf, payload_buf);
+
+ gst_harness_push (h, gst_buffer_ref (buf));
+ gst_buffer_unref (buf);
+ fail_unless_equals_int (gst_harness_buffers_received (h), 0);
+
+ /* Second packet, M=1, P=1 */
+ header_buf = gst_rtp_buffer_new_allocate (sizeof (header), 0, 0);
+ gst_rtp_buffer_map (header_buf, GST_MAP_WRITE, &rtp);
+ gst_rtp_buffer_set_marker (&rtp, TRUE);
+ gst_rtp_buffer_set_seq (&rtp, 1);
+ memcpy (gst_rtp_buffer_get_payload (&rtp), header, sizeof (header));
+ gst_rtp_buffer_unmap (&rtp);
+
+ payload_buf = gst_buffer_new_allocate (NULL, sizeof (payload), NULL);
+ gst_buffer_memset (payload_buf, 0, 0, 10);
+ buf = gst_buffer_append (header_buf, payload_buf);
+
+ gst_harness_push (h, gst_buffer_ref (buf));
+ gst_buffer_unref (buf);
+ fail_unless_equals_int (gst_harness_buffers_received (h), 1);
+
+ buf = gst_harness_pull (h);
+ fail_unless (gst_buffer_memcmp (buf, 0, frame, sizeof (frame)) == 0);
+ gst_buffer_unref (buf);
+
+ gst_harness_teardown (h);
+}
+GST_END_TEST;
+
+GST_START_TEST (test_h263pdepay_dont_push_empty_frame)
+{
+ GstHarness *h = gst_harness_new ("rtph263pdepay");
+
+ /* Packet that only contains header information and an extra picture header
+ * (PLEN > 0). Partly handcrafted packet. Originally this packet did not
+ * have P=1 (hence it was not start of a picture). With both P=1 and M=1 we
+ * only need one packet to reproduce the issue where trying to push an empty
+ * frame when PLEN is set */
+ guint8 packet[] = {
+ 0x80, 0xe8, 0xbc, 0xaa, 0x14, 0x12, 0x16, 0x5c, 0xb8, 0x4e, 0x39, 0x04,
+ 0x25, 0x00, 0x54, 0x39, 0xd0, 0x12, 0x06, 0x9e, 0xb5, 0x0a, 0xf5, 0xe8,
+ 0x32, 0xeb, 0xd0, 0x6b, 0xd6, 0xa2, 0xfa, 0xd4, 0x3d, 0xd7, 0xa0, 0x2b,
+ 0x24, 0x97, 0xc3, 0xbf, 0xc0, 0xbb, 0xd7, 0xa0,
+ };
+
+ gst_harness_set_src_caps_str (h, H263P_RTP_CAPS_STR (100));
+
+ fail_unless_equals_int (GST_FLOW_OK, gst_harness_push (h,
+ create_rtp_buffer (packet, sizeof (packet), 0, 0)));
+
+ fail_unless_equals_int (gst_harness_buffers_received (h), 0);
+
+ gst_harness_teardown (h);
+}
+GST_END_TEST;
+
static Suite *
rtph263_suite (void)
{
@@ -113,6 +284,14 @@
tcase_add_test (tc_chain, test_h263depay_start_packet_too_small_mode_b);
tcase_add_test (tc_chain, test_h263depay_start_packet_too_small_mode_c);
+ suite_add_tcase (s, (tc_chain = tcase_create ("h263pay")));
+ tcase_add_test (tc_chain, test_h263pay_mode_b_snow);
+
+ suite_add_tcase (s, (tc_chain = tcase_create ("h263pdepay")));
+ tcase_add_test (tc_chain, test_h263pdepay_fragmented_memory_non_writable_buffer);
+ tcase_add_test (tc_chain, test_h263pdepay_fragmented_memory_non_writable_buffer_split_frame);
+ tcase_add_test (tc_chain, test_h263pdepay_dont_push_empty_frame);
+
return s;
}
diff --git a/tests/check/elements/rtpjitterbuffer.c b/tests/check/elements/rtpjitterbuffer.c
index 3b519e0..10810fa 100644
--- a/tests/check/elements/rtpjitterbuffer.c
+++ b/tests/check/elements/rtpjitterbuffer.c
@@ -532,7 +532,13 @@
gst_harness_set_src_caps (h, generate_caps ());
testclock = gst_harness_get_testclock (h);
- g_object_set (h->element, "do-lost", TRUE, "latency", jb_latency_ms, NULL);
+ /* Need to set max-misorder-time and max-dropout-time to 0 so the
+ * jitterbuffer does not base them on packet rate calculations.
+ * If it does, out gap is big enough to be considered a new stream and
+ * we wait for a few consecutive packets just to be sure
+ */
+ g_object_set (h->element, "do-lost", TRUE, "latency", jb_latency_ms,
+ "max-misorder-time", 0, "max-dropout-time", 0, NULL);
/* push the first buffer in */
fail_unless_equals_int (GST_FLOW_OK,
diff --git a/tests/check/elements/rtprtx.c b/tests/check/elements/rtprtx.c
index d3c5c6a..aaa1ac4 100644
--- a/tests/check/elements/rtprtx.c
+++ b/tests/check/elements/rtprtx.c
@@ -18,1249 +18,40 @@
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
-
#include <gst/check/gstcheck.h>
-#include <gst/check/gstconsistencychecker.h>
-
+#include <gst/check/gstharness.h>
#include <gst/rtp/gstrtpbuffer.h>
-/* For ease of programming we use globals to keep refs for our floating
- * src and sink pads we create; otherwise we always have to do get_pad,
- * get_peer, and then remove references in every test function */
-static GstPad *srcpad, *sinkpad;
-/* we also have a list of src buffers */
-static GList *inbuffers = NULL;
+#define verify_buf(buf, is_rtx, expected_ssrc, expted_pt, expected_seqnum) \
+ G_STMT_START { \
+ GstRTPBuffer _rtp = GST_RTP_BUFFER_INIT; \
+ fail_unless (gst_rtp_buffer_map (buf, GST_MAP_READ, &_rtp)); \
+ fail_unless_equals_int (gst_rtp_buffer_get_ssrc (&_rtp), expected_ssrc); \
+ fail_unless_equals_int (gst_rtp_buffer_get_payload_type (&_rtp), expted_pt); \
+ if (!(is_rtx)) { \
+ fail_unless_equals_int (gst_rtp_buffer_get_seq (&_rtp), expected_seqnum); \
+ } else { \
+ fail_unless_equals_int (GST_READ_UINT16_BE (gst_rtp_buffer_get_payload \
+ (&_rtp)), expected_seqnum); \
+ } \
+ gst_rtp_buffer_unmap (&_rtp); \
+ } G_STMT_END
-#define RTP_CAPS_STRING \
- "application/x-rtp, " \
- "media = (string)audio, " \
- "payload = (int) 0, " \
- "clock-rate = (int) 8000, " \
- "ssrc = (uint) 42, " \
- "encoding-name = (string)PCMU"
+#define pull_and_verify(h, is_rtx, expected_ssrc, expted_pt, expected_seqnum) \
+ G_STMT_START { \
+ GstBuffer *_buf = gst_harness_pull (h); \
+ verify_buf (_buf, is_rtx, expected_ssrc, expted_pt, expected_seqnum); \
+ gst_buffer_unref (_buf); \
+ } G_STMT_END
-#define RTP_FRAME_SIZE 20
-
-static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
- GST_PAD_SINK,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("application/x-rtp")
- );
-static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
- GST_PAD_SRC,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("application/x-rtp")
- );
-
-static void
-setup_rtprtx (GstElement * rtprtxsend, GstElement * rtprtxreceive,
- gint num_buffers)
-{
- GstBuffer *buffer;
- GstPad *sendsrcpad;
- GstPad *receivesinkpad;
- gboolean ret = FALSE;
-
- /* a 20 sample audio block (2,5 ms) generated with
- * gst-launch audiotestsrc wave=silence blocksize=40 num-buffers=3 !
- * "audio/x-raw,channels=1,rate=8000" ! mulawenc ! rtppcmupay !
- * fakesink dump=1
- */
- guint8 in[] = { /* first 4 bytes are rtp-header, next 4 bytes are timestamp */
- 0x80, 0x80, 0x1c, 0x24, 0x46, 0xcd, 0xb7, 0x11, 0x3c, 0x3a, 0x7c, 0x5b,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
- };
- GstClockTime ts = G_GUINT64_CONSTANT (0);
- GstClockTime tso = gst_util_uint64_scale (RTP_FRAME_SIZE, GST_SECOND, 8000);
- gint i;
-
- srcpad = gst_check_setup_src_pad (rtprtxsend, &srctemplate);
- sendsrcpad = gst_element_get_static_pad (rtprtxsend, "src");
- ret = gst_pad_set_active (srcpad, TRUE);
- fail_if (ret == FALSE);
-
- sinkpad = gst_check_setup_sink_pad (rtprtxreceive, &sinktemplate);
- receivesinkpad = gst_element_get_static_pad (rtprtxreceive, "sink");
- ret = gst_pad_set_active (sinkpad, TRUE);
- fail_if (ret == FALSE);
-
- fail_if (gst_pad_link (sendsrcpad, receivesinkpad) != GST_PAD_LINK_OK);
-
- ret = gst_pad_set_active (sendsrcpad, TRUE);
- fail_if (ret == FALSE);
- ret = gst_pad_set_active (receivesinkpad, TRUE);
- fail_if (ret == FALSE);
-
- gst_object_unref (sendsrcpad);
- gst_object_unref (receivesinkpad);
-
- for (i = 0; i < num_buffers; i++) {
- buffer = gst_buffer_new_and_alloc (sizeof (in));
- gst_buffer_fill (buffer, 0, in, sizeof (in));
- GST_BUFFER_DTS (buffer) = ts;
- GST_BUFFER_PTS (buffer) = ts;
- GST_BUFFER_DURATION (buffer) = tso;
- GST_DEBUG ("created buffer: %p", buffer);
-
- /*if (!i)
- GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT); */
-
- inbuffers = g_list_append (inbuffers, buffer);
-
- /* hackish way to update the rtp header */
- in[1] = 0x00;
- in[3]++; /* seqnumber */
- in[7] += RTP_FRAME_SIZE; /* inc. timestamp with framesize */
- ts += tso;
- }
-}
-
-static GstStateChangeReturn
-start_rtprtx (GstElement * element)
-{
- GstStateChangeReturn ret;
-
- ret = gst_element_set_state (element, GST_STATE_PLAYING);
- ck_assert_int_ne (ret, GST_STATE_CHANGE_FAILURE);
-
- ret = gst_element_get_state (element, NULL, NULL, GST_CLOCK_TIME_NONE);
- ck_assert_int_ne (ret, GST_STATE_CHANGE_FAILURE);
-
- return ret;
-}
-
-static void
-cleanup_rtprtx (GstElement * rtprtxsend, GstElement * rtprtxreceive)
-{
- GST_DEBUG ("cleanup_rtprtx");
-
- g_list_free (inbuffers);
- inbuffers = NULL;
-
- gst_check_drop_buffers ();
- gst_pad_set_active (srcpad, FALSE);
- gst_check_teardown_src_pad (rtprtxsend);
- gst_check_teardown_element (rtprtxsend);
-
- gst_pad_set_active (sinkpad, FALSE);
- gst_check_teardown_sink_pad (rtprtxreceive);
- gst_check_teardown_element (rtprtxreceive);
-}
-
-static void
-check_rtprtx_results (GstElement * rtprtxsend, GstElement * rtprtxreceive,
- gint num_buffers)
-{
- guint nbrtxrequests = 0;
- guint nbrtxpackets = 0;
-
- g_object_get (G_OBJECT (rtprtxsend), "num-rtx-requests", &nbrtxrequests,
- NULL);
- fail_unless_equals_int (nbrtxrequests, 3);
-
- g_object_get (G_OBJECT (rtprtxsend), "num-rtx-packets", &nbrtxpackets, NULL);
- fail_unless_equals_int (nbrtxpackets, 3);
-
- g_object_get (G_OBJECT (rtprtxreceive), "num-rtx-requests", &nbrtxrequests,
- NULL);
- fail_unless_equals_int (nbrtxrequests, 3);
-
- g_object_get (G_OBJECT (rtprtxreceive), "num-rtx-packets", &nbrtxpackets,
- NULL);
- fail_unless_equals_int (nbrtxpackets, 3);
-
- g_object_get (G_OBJECT (rtprtxreceive), "num-rtx-assoc-packets",
- &nbrtxpackets, NULL);
- fail_unless_equals_int (nbrtxpackets, 3);
-}
-
-
-GST_START_TEST (test_push_forward_seq)
-{
- GstElement *rtprtxsend;
- GstElement *rtprtxreceive;
- const guint num_buffers = 4;
- GList *node;
- gint i = 0;
- GstCaps *caps = NULL;
- GstStructure *pt_map;
-
- rtprtxsend = gst_check_setup_element ("rtprtxsend");
- rtprtxreceive = gst_check_setup_element ("rtprtxreceive");
- setup_rtprtx (rtprtxsend, rtprtxreceive, num_buffers);
- GST_DEBUG ("setup_rtprtx");
-
- fail_unless (start_rtprtx (rtprtxsend)
- == GST_STATE_CHANGE_SUCCESS, "could not set to playing");
-
- fail_unless (start_rtprtx (rtprtxreceive)
- == GST_STATE_CHANGE_SUCCESS, "could not set to playing");
-
- caps = gst_caps_from_string (RTP_CAPS_STRING);
- gst_check_setup_events (srcpad, rtprtxsend, caps, GST_FORMAT_TIME);
- gst_caps_unref (caps);
-
- pt_map = gst_structure_new ("application/x-rtp-pt-map",
- "0", G_TYPE_UINT, 97, NULL);
- g_object_set (rtprtxsend, "payload-type-map", pt_map, NULL);
- g_object_set (rtprtxreceive, "payload-type-map", pt_map, NULL);
- gst_structure_free (pt_map);
-
- /* push buffers: 0,1,2, */
- for (node = inbuffers; node; node = g_list_next (node)) {
- GstEvent *event = NULL;
- GstRTPBuffer rtp = GST_RTP_BUFFER_INIT;
- GstBuffer *buffer = (GstBuffer *) node->data;
- GList *last_out_buffer;
- guint64 end_time;
- gboolean res;
-
- gst_buffer_ref (buffer);
- fail_unless_equals_int (gst_pad_push (srcpad, buffer), GST_FLOW_OK);
-
- if (i < 3) {
- gst_rtp_buffer_map (buffer, GST_MAP_READ, &rtp);
- event = gst_event_new_custom (GST_EVENT_CUSTOM_UPSTREAM,
- gst_structure_new ("GstRTPRetransmissionRequest",
- "seqnum", G_TYPE_UINT, (guint) gst_rtp_buffer_get_seq (&rtp),
- "ssrc", G_TYPE_UINT, (guint) gst_rtp_buffer_get_ssrc (&rtp),
- "payload-type", G_TYPE_UINT,
- (guint) gst_rtp_buffer_get_payload_type (&rtp), NULL));
- gst_rtp_buffer_unmap (&rtp);
-
- /* synchronize with the chain() function of the "sinkpad"
- * to make sure that rtxsend has pushed the rtx buffer out
- * before continuing */
- last_out_buffer = g_list_last (buffers);
- g_mutex_lock (&check_mutex);
- fail_unless (gst_pad_push_event (sinkpad, event));
- end_time = g_get_monotonic_time () + G_TIME_SPAN_SECOND;
- do
- res = g_cond_wait_until (&check_cond, &check_mutex, end_time);
- while (res == TRUE && last_out_buffer == g_list_last (buffers));
- g_mutex_unlock (&check_mutex);
- }
- gst_buffer_unref (buffer);
- ++i;
- }
-
- /* check the buffer list */
- check_rtprtx_results (rtprtxsend, rtprtxreceive, num_buffers);
-
- /* cleanup */
- cleanup_rtprtx (rtprtxsend, rtprtxreceive);
-}
-
-GST_END_TEST;
-
-static void
-message_received (GstBus * bus, GstMessage * message, gboolean * eos)
-{
- GST_INFO ("bus message from \"%" GST_PTR_FORMAT "\": %" GST_PTR_FORMAT,
- GST_MESSAGE_SRC (message), message);
-
- switch (message->type) {
- case GST_MESSAGE_EOS:
- *eos = TRUE;
- break;
- case GST_MESSAGE_WARNING:{
- GError *gerror;
- gchar *debug;
-
- gst_message_parse_warning (message, &gerror, &debug);
- gst_object_default_error (GST_MESSAGE_SRC (message), gerror, debug);
- g_error_free (gerror);
- g_free (debug);
- break;
- }
- case GST_MESSAGE_ERROR:{
- GError *gerror;
- gchar *debug;
-
- gst_message_parse_error (message, &gerror, &debug);
- gst_object_default_error (GST_MESSAGE_SRC (message), gerror, debug);
- fail ("Error: %s / %s", gerror->message, debug);
- g_error_free (gerror);
- g_free (debug);
- break;
- }
- default:
- break;
- }
-}
-
-typedef struct
-{
- guint count;
- guint nb_packets;
- guint drop_every_n_packets;
-} RTXSendData;
-
-typedef struct
-{
- guint nb_packets;
- guint seqnum_offset;
- guint seqnum_prev;
-} RTXReceiveData;
-
-static GstPadProbeReturn
-do_buffer_list_as_buffers_probe (GstPad * pad, GstPadProbeInfo * info,
- gpointer user_data, GstPadProbeCallback callback)
-{
- /* Iterate the buffer list, removing any items that we're
- * told to drop and creating a new bufferlist. If all buffers
- * are dropped, return DROP.
- */
- guint i, len;
- GstBufferList *list;
- GstBufferList *outlist;
- GstPadProbeInfo buf_info = *info;
-
- GST_INFO_OBJECT (pad, "probing each buffer in list individually");
-
- list = gst_pad_probe_info_get_buffer_list (info);
-
- g_return_val_if_fail (list != NULL, GST_PAD_PROBE_REMOVE);
-
- len = gst_buffer_list_length (list);
- outlist = gst_buffer_list_new_sized (len);
-
- buf_info.type = GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_PUSH;
- for (i = 0; i < len; i++) {
- GstBuffer *buffer = gst_buffer_list_get (list, i);
- GstPadProbeReturn ret;
- buf_info.data = buffer;
- ret = callback (pad, &buf_info, user_data);
- /* If the buffer wasn't dropped, add it to the output list */
- if (ret != GST_PAD_PROBE_DROP)
- gst_buffer_list_insert (outlist, -1, gst_buffer_ref (buffer));
- }
-
- len = gst_buffer_list_length (outlist);
- if (len == 0) {
- /* Everything was discarded, drop our outlist */
- gst_buffer_list_unref (outlist);
- return GST_PAD_PROBE_DROP;
- }
-
- /* Replace the original buffer list with the modified one */
- gst_buffer_list_unref (list);
- info->data = outlist;
- return GST_PAD_PROBE_OK;
-}
-
-static GstPadProbeReturn
-rtprtxsend_srcpad_probe (GstPad * pad, GstPadProbeInfo * info,
- gpointer user_data)
-{
- GstPadProbeReturn ret = GST_PAD_PROBE_OK;
-
- GST_LOG_OBJECT (pad, "here");
- if (info->type == (GST_PAD_PROBE_TYPE_BUFFER_LIST | GST_PAD_PROBE_TYPE_PUSH))
- return do_buffer_list_as_buffers_probe (pad, info, user_data,
- rtprtxsend_srcpad_probe);
-
- if (info->type == (GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_PUSH)) {
- GstBuffer *buffer = GST_BUFFER (info->data);
- RTXSendData *rtxdata = (RTXSendData *) user_data;
- GstRTPBuffer rtp = GST_RTP_BUFFER_INIT;
- guint payload_type = 0;
-
- gst_rtp_buffer_map (buffer, GST_MAP_READ, &rtp);
- payload_type = gst_rtp_buffer_get_payload_type (&rtp);
-
- /* main stream packets */
- if (payload_type == 96) {
- /* count packets of the main stream */
- ++rtxdata->nb_packets;
- /* drop some packets */
- if (rtxdata->count < rtxdata->drop_every_n_packets) {
- ++rtxdata->count;
- } else {
- /* drop a packet every 'rtxdata->count' packets */
- rtxdata->count = 1;
- ret = GST_PAD_PROBE_DROP;
- }
- } else {
- /* retransmission packets */
- }
-
- gst_rtp_buffer_unmap (&rtp);
- }
-
- return ret;
-}
-
-static GstPadProbeReturn
-rtprtxreceive_srcpad_probe (GstPad * pad, GstPadProbeInfo * info,
- gpointer user_data)
-{
- if (info->type == (GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_PUSH)) {
- GstBuffer *buffer = GST_BUFFER (info->data);
- RTXReceiveData *rtxdata = (RTXReceiveData *) user_data;
- GstRTPBuffer rtp = GST_RTP_BUFFER_INIT;
- guint seqnum = 0;
- guint i = 0;
-
- gst_rtp_buffer_map (buffer, GST_MAP_READ, &rtp);
- seqnum = gst_rtp_buffer_get_seq (&rtp);
-
- /* check if there is a dropped packet */
- if (seqnum > rtxdata->seqnum_prev + rtxdata->seqnum_offset) {
- GstPad *peerpad = gst_pad_get_peer (pad);
-
- /* ask retransmission of missing packet */
- for (i = rtxdata->seqnum_prev + rtxdata->seqnum_offset; i < seqnum;
- i += rtxdata->seqnum_offset) {
- GstEvent *event = gst_event_new_custom (GST_EVENT_CUSTOM_UPSTREAM,
- gst_structure_new ("GstRTPRetransmissionRequest",
- "seqnum", G_TYPE_UINT, i,
- "ssrc", G_TYPE_UINT, gst_rtp_buffer_get_ssrc (&rtp),
- "payload-type", G_TYPE_UINT,
- gst_rtp_buffer_get_payload_type (&rtp),
- NULL));
- gst_pad_push_event (peerpad, event);
- }
- gst_object_unref (peerpad);
-
- rtxdata->seqnum_prev = seqnum;
- } else if (seqnum == rtxdata->seqnum_prev + rtxdata->seqnum_offset) {
- /* also update previous seqnum in this case */
- rtxdata->seqnum_prev = seqnum;
- }
-
- gst_rtp_buffer_unmap (&rtp);
-
- ++rtxdata->nb_packets;
- }
-
- return GST_PAD_PROBE_OK;
-}
-
-static void
-start_test_drop_and_check_results (GstElement * bin, GstElement * rtppayloader,
- GstElement * rtprtxsend, GstElement * rtprtxreceive,
- RTXSendData * send_rtxdata, RTXReceiveData * receive_rtxdata,
- guint drop_every_n_packets, gboolean * eos)
-{
- GstStateChangeReturn state_res = GST_STATE_CHANGE_FAILURE;
- guint nbrtxrequests = 0;
- guint nbrtxpackets = 0;
- guint nb_expected_requests = 0;
- GstStructure *pt_map;
-
- GST_INFO ("starting test");
-
- pt_map = gst_structure_new ("application/x-rtp-pt-map",
- "96", G_TYPE_UINT, 99, NULL);
- g_object_set (rtppayloader, "pt", 96, NULL);
- g_object_set (rtppayloader, "seqnum-offset", 1, NULL);
- g_object_set (rtprtxsend, "payload-type-map", pt_map, NULL);
- g_object_set (rtprtxreceive, "payload-type-map", pt_map, NULL);
- gst_structure_free (pt_map);
-
- send_rtxdata->count = 1;
- send_rtxdata->nb_packets = 0;
- send_rtxdata->drop_every_n_packets = drop_every_n_packets;
-
- receive_rtxdata->nb_packets = 0;
- receive_rtxdata->seqnum_offset = 0;
- receive_rtxdata->seqnum_prev = 0;
-
- *eos = FALSE;
-
- /* retrieve offset before going to paused */
- g_object_get (G_OBJECT (rtppayloader), "seqnum-offset",
- &receive_rtxdata->seqnum_offset, NULL);
-
- /* prepare playing */
- state_res = gst_element_set_state (bin, GST_STATE_PAUSED);
- ck_assert_int_ne (state_res, GST_STATE_CHANGE_FAILURE);
-
- /* wait for completion */
- state_res = gst_element_get_state (bin, NULL, NULL, GST_CLOCK_TIME_NONE);
- ck_assert_int_ne (state_res, GST_STATE_CHANGE_FAILURE);
-
- /* retrieve seqnum_prev here to make sure it has been reseted */
- g_object_get (G_OBJECT (rtppayloader), "seqnum",
- &receive_rtxdata->seqnum_prev, NULL);
-
- /* run pipeline */
- state_res = gst_element_set_state (bin, GST_STATE_PLAYING);
- ck_assert_int_ne (state_res, GST_STATE_CHANGE_FAILURE);
-
- GST_INFO ("running main loop");
- while (!*eos)
- g_main_context_iteration (NULL, TRUE);
-
- /* check results */
-
- if (send_rtxdata->nb_packets % drop_every_n_packets == 0) {
- /* special case because the last buffer will be dropped
- * so the receiver cannot know if it has been dropped (no next packet)
- */
- nb_expected_requests = send_rtxdata->nb_packets / drop_every_n_packets - 1;
- fail_unless_equals_int (send_rtxdata->nb_packets,
- receive_rtxdata->nb_packets + 1);
- } else {
- nb_expected_requests = send_rtxdata->nb_packets / drop_every_n_packets;
- fail_unless_equals_int (send_rtxdata->nb_packets,
- receive_rtxdata->nb_packets);
- }
-
- g_object_get (G_OBJECT (rtprtxsend), "num-rtx-requests", &nbrtxrequests,
- NULL);
- fail_unless_equals_int (nbrtxrequests, nb_expected_requests);
-
- g_object_get (G_OBJECT (rtprtxsend), "num-rtx-packets", &nbrtxpackets, NULL);
- fail_unless_equals_int (nbrtxpackets, nb_expected_requests);
-
- g_object_get (G_OBJECT (rtprtxreceive), "num-rtx-requests", &nbrtxrequests,
- NULL);
- fail_unless_equals_int (nbrtxrequests, nb_expected_requests);
-
- g_object_get (G_OBJECT (rtprtxreceive), "num-rtx-packets", &nbrtxpackets,
- NULL);
- fail_unless_equals_int (nbrtxpackets, nb_expected_requests);
-
- g_object_get (G_OBJECT (rtprtxreceive), "num-rtx-assoc-packets",
- &nbrtxpackets, NULL);
- fail_unless_equals_int (nbrtxpackets, nb_expected_requests);
-
- state_res = gst_element_set_state (bin, GST_STATE_NULL);
- ck_assert_int_ne (state_res, GST_STATE_CHANGE_FAILURE);
-}
-
-/* This test build the pipeline videotestsrc ! rtpvrawpay ! rtprtxsend ! rtprtxreceive ! fakesink
- * and drop some buffer between rtprtxsend and rtprtxreceive
- * Then it checks that every dropped packet has been re-sent and it checks that
- * not too much requests has been sent.
- */
-GST_START_TEST (test_drop_one_sender)
-{
- GstElement *bin, *src, *rtppayloader, *rtprtxsend, *rtprtxreceive, *sink;
- GstBus *bus;
- gboolean res;
- GstPad *srcpad, *sinkpad;
- GstStreamConsistency *chk_1, *chk_2, *chk_3;
- gint num_buffers = 20;
- guint drop_every_n_packets = 0;
- RTXSendData send_rtxdata;
- RTXReceiveData receive_rtxdata;
- gboolean eos = FALSE;
-
- GST_INFO ("preparing test");
-
- /* build pipeline */
- bin = gst_pipeline_new ("pipeline");
- bus = gst_element_get_bus (bin);
- gst_bus_add_signal_watch_full (bus, G_PRIORITY_HIGH);
-
- src = gst_element_factory_make ("videotestsrc", "src");
- g_object_set (src, "num-buffers", num_buffers, NULL);
- rtppayloader = gst_element_factory_make ("rtpvrawpay", "rtppayloader");
- rtprtxsend = gst_element_factory_make ("rtprtxsend", "rtprtxsend");
- rtprtxreceive = gst_element_factory_make ("rtprtxreceive", "rtprtxreceive");
- sink = gst_element_factory_make ("fakesink", "sink");
- gst_bin_add_many (GST_BIN (bin), src, rtppayloader, rtprtxsend, rtprtxreceive,
- sink, NULL);
-
- res = gst_element_link (src, rtppayloader);
- fail_unless (res == TRUE, NULL);
- res = gst_element_link (rtppayloader, rtprtxsend);
- fail_unless (res == TRUE, NULL);
- res = gst_element_link (rtprtxsend, rtprtxreceive);
- fail_unless (res == TRUE, NULL);
- res = gst_element_link (rtprtxreceive, sink);
- fail_unless (res == TRUE, NULL);
-
- /* create consistency checkers for the pads */
-
- srcpad = gst_element_get_static_pad (rtppayloader, "src");
- chk_1 = gst_consistency_checker_new (srcpad);
- gst_object_unref (srcpad);
-
- srcpad = gst_element_get_static_pad (rtprtxsend, "src");
- gst_pad_add_probe (srcpad,
- (GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_BUFFER_LIST |
- GST_PAD_PROBE_TYPE_PUSH),
- (GstPadProbeCallback) rtprtxsend_srcpad_probe, &send_rtxdata, NULL);
- sinkpad = gst_pad_get_peer (srcpad);
- fail_if (sinkpad == NULL);
- chk_2 = gst_consistency_checker_new (sinkpad);
- gst_object_unref (sinkpad);
- gst_object_unref (srcpad);
-
- srcpad = gst_element_get_static_pad (rtprtxreceive, "src");
- gst_pad_add_probe (srcpad,
- (GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_PUSH),
- (GstPadProbeCallback) rtprtxreceive_srcpad_probe, &receive_rtxdata, NULL);
- sinkpad = gst_pad_get_peer (srcpad);
- fail_if (sinkpad == NULL);
- chk_3 = gst_consistency_checker_new (sinkpad);
- gst_object_unref (sinkpad);
- gst_object_unref (srcpad);
-
- g_signal_connect (bus, "message::error", (GCallback) message_received, NULL);
- g_signal_connect (bus, "message::warning", (GCallback) message_received,
- NULL);
- g_signal_connect (bus, "message::eos", (GCallback) message_received, &eos);
-
- for (drop_every_n_packets = 2; drop_every_n_packets < 10;
- drop_every_n_packets++) {
- start_test_drop_and_check_results (bin, rtppayloader, rtprtxsend,
- rtprtxreceive, &send_rtxdata, &receive_rtxdata, drop_every_n_packets,
- &eos);
- }
-
- /* cleanup */
- gst_consistency_checker_free (chk_1);
- gst_consistency_checker_free (chk_2);
- gst_consistency_checker_free (chk_3);
- gst_bus_remove_signal_watch (bus);
- gst_object_unref (bus);
- gst_object_unref (bin);
-}
-
-GST_END_TEST;
-
-static void
-message_received_multiple (GstBus * bus, GstMessage * message, gpointer data)
-{
- GST_INFO ("bus message from \"%" GST_PTR_FORMAT "\": %" GST_PTR_FORMAT,
- GST_MESSAGE_SRC (message), message);
-
- switch (message->type) {
- case GST_MESSAGE_WARNING:{
- GError *gerror;
- gchar *debug;
-
- gst_message_parse_warning (message, &gerror, &debug);
- gst_object_default_error (GST_MESSAGE_SRC (message), gerror, debug);
- g_error_free (gerror);
- g_free (debug);
- break;
- }
- case GST_MESSAGE_ERROR:{
- GError *gerror;
- gchar *debug;
-
- gst_message_parse_error (message, &gerror, &debug);
- gst_object_default_error (GST_MESSAGE_SRC (message), gerror, debug);
- fail ("Error: %s / %s", gerror->message, debug);
- g_error_free (gerror);
- g_free (debug);
- break;
- }
- default:
- break;
- }
-}
-
-typedef struct
-{
- guint count;
- guint nb_packets;
- guint drop_every_n_packets;
- guint payload_type_master;
- guint total_packets;
-} RTXSendMultipleData;
-
-/* drop some packets */
-static GstPadProbeReturn
-rtprtxsend_srcpad_probe_multiple (GstPad * pad, GstPadProbeInfo * info,
- gpointer user_data)
-{
- GstPadProbeReturn ret = GST_PAD_PROBE_OK;
-
- if (info->type == (GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_PUSH)) {
- GstBuffer *buffer = GST_BUFFER (info->data);
- RTXSendMultipleData *rtxdata = (RTXSendMultipleData *) user_data;
- GstRTPBuffer rtp = GST_RTP_BUFFER_INIT;
- guint payload_type = 0;
-
- gst_rtp_buffer_map (buffer, GST_MAP_READ, &rtp);
- payload_type = gst_rtp_buffer_get_payload_type (&rtp);
-
- /* main stream packets */
- if (payload_type == rtxdata->payload_type_master) {
- /* count packets of the main stream */
- ++rtxdata->nb_packets;
- /* drop some packets */
- /* but make sure we never drop the last one, otherwise there
- * will be nothing to trigger a retransmission.
- */
- if (rtxdata->count < rtxdata->drop_every_n_packets ||
- rtxdata->nb_packets == rtxdata->total_packets) {
- ++rtxdata->count;
- } else {
- /* drop a packet every 'rtxdata->count' packets */
- rtxdata->count = 1;
- ret = GST_PAD_PROBE_DROP;
- }
- } else {
- /* retransmission packets */
- }
-
- gst_rtp_buffer_unmap (&rtp);
- }
-
- return ret;
-}
-
-/* make sure every sources has sent all their buffers */
-static GstPadProbeReturn
-source_srcpad_probe_multiple_drop_eos (GstPad * pad, GstPadProbeInfo * info,
- gpointer user_data)
-{
- GstEvent *event = GST_PAD_PROBE_INFO_EVENT (info);
-
- if (GST_EVENT_TYPE (event) == GST_EVENT_EOS)
- return GST_PAD_PROBE_DROP;
- else
- return GST_PAD_PROBE_OK;
-}
-
-typedef struct
-{
- GHashTable *ssrc_to_nb_packets_map;
- GHashTable *ssrc_to_seqnum_offset_map;
- guint seqnum_offset;
-
- gint to_send;
- volatile gint dropped_requests;
- volatile gint received;
- gboolean request_passed;
-} RTXReceiveMultipleData;
-
-/* add one branch videotestsrc ! rtpvrawpay ! rtprtxsend ! queue ! funnel. */
-static RTXSendMultipleData *
-add_sender (GstElement * bin, const gchar * src_name,
- const gchar * payloader_name, guint payload_type_master,
- guint payload_type_aux, RTXReceiveMultipleData * rtxdata)
-{
- GstElement *src = NULL;
- GstCaps *caps;
- GstElement *rtppayloader = NULL;
- GstElement *rtprtxsend = NULL;
- GstElement *queue = NULL;
- GstElement *funnel = NULL;
- GstPad *srcpad = NULL;
- gboolean res = FALSE;
- RTXSendMultipleData *send_rtxdata = g_slice_new0 (RTXSendMultipleData);
- gchar *pt_master;
- GstStructure *pt_map;
-
- send_rtxdata->count = 1;
- send_rtxdata->nb_packets = 0;
- send_rtxdata->drop_every_n_packets = 0;
- send_rtxdata->payload_type_master = payload_type_master;
- send_rtxdata->total_packets = 25;
- rtxdata->to_send += send_rtxdata->total_packets;
-
- src = gst_element_factory_make (src_name, NULL);
- rtppayloader = gst_element_factory_make (payloader_name, NULL);
- rtprtxsend = gst_element_factory_make ("rtprtxsend", NULL);
- queue = gst_element_factory_make ("queue", NULL);
- funnel = gst_bin_get_by_name (GST_BIN (bin), "funnel");
-
- pt_master = g_strdup_printf ("%" G_GUINT32_FORMAT, payload_type_master);
- pt_map = gst_structure_new ("application/x-rtp-pt-map",
- pt_master, G_TYPE_UINT, payload_type_aux, NULL);
- g_free (pt_master);
-
- g_object_set (src, "num-buffers", send_rtxdata->total_packets, NULL);
- g_object_set (src, "is-live", TRUE, NULL);
- g_object_set (rtppayloader, "pt", payload_type_master, NULL);
- g_object_set (rtppayloader, "seqnum-offset", 1, NULL);
- g_object_set (rtprtxsend, "payload-type-map", pt_map, NULL);
- /* we want that every drop packet be resent fast */
- g_object_set (queue, "max-size-buffers", 1, NULL);
- g_object_set (queue, "flush-on-eos", FALSE, NULL);
-
- gst_structure_free (pt_map);
-
- gst_bin_add_many (GST_BIN (bin), src, rtppayloader, rtprtxsend, queue, NULL);
-
- /* Make sure we have one buffer per frame, makes it easier to count! */
- caps =
- gst_caps_from_string ("video/x-raw, width=20, height=10, framerate=30/1");
- res = gst_element_link_filtered (src, rtppayloader, caps);
- gst_caps_unref (caps);
- fail_unless (res == TRUE, NULL);
- res = gst_element_link (rtppayloader, rtprtxsend);
- fail_unless (res == TRUE, NULL);
- res = gst_element_link (rtprtxsend, queue);
- fail_unless (res == TRUE, NULL);
- res = gst_element_link (queue, funnel);
- fail_unless (res == TRUE, NULL);
- gst_object_unref (funnel);
-
- /* to drop some packets */
- srcpad = gst_element_get_static_pad (rtprtxsend, "src");
- gst_pad_add_probe (srcpad,
- (GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_PUSH),
- (GstPadProbeCallback) rtprtxsend_srcpad_probe_multiple, send_rtxdata,
- NULL);
- gst_object_unref (srcpad);
-
- /* to make sure every sources has sent all their buffers */
- srcpad = gst_element_get_static_pad (src, "src");
- gst_pad_add_probe (srcpad, GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM,
- (GstPadProbeCallback) source_srcpad_probe_multiple_drop_eos, NULL, NULL);
- gst_object_unref (srcpad);
-
- return send_rtxdata;
-}
-
-static GstPadProbeReturn
-rtprtxreceive_sinkpad_probe_check_drop (GstPad * pad, GstPadProbeInfo * info,
- gpointer user_data)
-{
- GstEvent *event = GST_PAD_PROBE_INFO_EVENT (info);
- RTXReceiveMultipleData *rtxdata = (RTXReceiveMultipleData *) user_data;
-
- if (GST_EVENT_TYPE (event) == GST_EVENT_CUSTOM_UPSTREAM &&
- gst_event_get_structure (event) != NULL &&
- gst_structure_has_name (gst_event_get_structure (event),
- "GstRTPRetransmissionRequest"))
- rtxdata->request_passed = TRUE;
-
- return GST_PAD_PROBE_OK;
-}
-
-static gboolean
-check_finished (RTXReceiveMultipleData * rtxdata)
-{
- return (g_atomic_int_get (&rtxdata->received) >= (rtxdata->to_send -
- g_atomic_int_get (&rtxdata->dropped_requests)));
-}
-
-static GstPadProbeReturn
-rtprtxreceive_srcpad_probe_multiple (GstPad * pad, GstPadProbeInfo * info,
- gpointer user_data)
-{
- if (info->type == (GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_PUSH)) {
- GstBuffer *buffer = GST_BUFFER (info->data);
- RTXReceiveMultipleData *rtxdata = (RTXReceiveMultipleData *) user_data;
- GstRTPBuffer rtp = GST_RTP_BUFFER_INIT;
- guint ssrc = 0;
- guint seqnum = 0;
- gpointer seqnum_prev = 0;
- guint nb_packets = 0;
-
- gst_rtp_buffer_map (buffer, GST_MAP_READ, &rtp);
- ssrc = gst_rtp_buffer_get_ssrc (&rtp);
- seqnum = gst_rtp_buffer_get_seq (&rtp);
-
- g_atomic_int_inc (&rtxdata->received);
- if (check_finished (rtxdata))
- g_main_context_wakeup (NULL);
-
- if (!g_hash_table_lookup_extended (rtxdata->ssrc_to_seqnum_offset_map,
- GUINT_TO_POINTER (ssrc), NULL, &seqnum_prev)) {
- /*In our test we take care to never drop the first buffer */
- g_hash_table_insert (rtxdata->ssrc_to_seqnum_offset_map,
- GUINT_TO_POINTER (ssrc), GUINT_TO_POINTER (seqnum));
- g_hash_table_insert (rtxdata->ssrc_to_nb_packets_map,
- GUINT_TO_POINTER (ssrc), GUINT_TO_POINTER (1));
- gst_rtp_buffer_unmap (&rtp);
- return GST_PAD_PROBE_OK;
- }
-
-
- /* check if there is a dropped packet
- * (in our test every packet arrived in increasing order) */
- if (seqnum > GPOINTER_TO_UINT (seqnum_prev) + rtxdata->seqnum_offset) {
- GstPad *peerpad = gst_pad_get_peer (pad);
- guint i = 0;
-
- /* ask retransmission of missing packets */
- for (i = GPOINTER_TO_UINT (seqnum_prev) + rtxdata->seqnum_offset;
- i < seqnum; i += rtxdata->seqnum_offset) {
- GstEvent *event = gst_event_new_custom (GST_EVENT_CUSTOM_UPSTREAM,
- gst_structure_new ("GstRTPRetransmissionRequest",
- "seqnum", G_TYPE_UINT, i,
- "ssrc", G_TYPE_UINT, gst_rtp_buffer_get_ssrc (&rtp),
- "payload-type", G_TYPE_UINT,
- gst_rtp_buffer_get_payload_type (&rtp),
- NULL));
- rtxdata->request_passed = FALSE;
- gst_pad_push_event (peerpad, event);
- if (!rtxdata->request_passed) {
- g_atomic_int_inc (&rtxdata->dropped_requests);
- if (check_finished (rtxdata))
- g_main_context_wakeup (NULL);
- }
- }
- gst_object_unref (peerpad);
-
- g_hash_table_insert (rtxdata->ssrc_to_seqnum_offset_map,
- GUINT_TO_POINTER (ssrc), GUINT_TO_POINTER (seqnum));
- } else if (seqnum ==
- GPOINTER_TO_UINT (seqnum_prev) + rtxdata->seqnum_offset) {
- /* also update previous seqnum in this case */
- g_hash_table_insert (rtxdata->ssrc_to_seqnum_offset_map,
- GUINT_TO_POINTER (ssrc), GUINT_TO_POINTER (seqnum));
- } else {
- /* receive retransmited packet */
- }
-
- gst_rtp_buffer_unmap (&rtp);
-
- nb_packets =
- GPOINTER_TO_UINT (g_hash_table_lookup (rtxdata->ssrc_to_nb_packets_map,
- GUINT_TO_POINTER (ssrc)));
- g_hash_table_insert (rtxdata->ssrc_to_nb_packets_map,
- GUINT_TO_POINTER (ssrc), GUINT_TO_POINTER (++nb_packets));
- }
-
- return GST_PAD_PROBE_OK;
-}
-
-static void
-reset_rtx_send_data (RTXSendMultipleData * send_rtxdata, gpointer data)
-{
- send_rtxdata->count = 1;
- send_rtxdata->nb_packets = 0;
- send_rtxdata->drop_every_n_packets = *(guint *) data;
-}
-
-/* compute number of all packets sent by all sender */
-static void
-compute_total_packets_sent (RTXSendMultipleData * send_rtxdata, gpointer data)
-{
- guint *sum = (guint *) data;
- *sum += send_rtxdata->nb_packets;
-}
-
-/* compute number of all packets received by rtprtxreceive::src pad */
-static void
-compute_total_packets_received (gpointer key, gpointer value, gpointer data)
-{
- guint *sum = (guint *) data;
- *sum += GPOINTER_TO_UINT (value);
-}
-
-static void
-start_test_drop_multiple_and_check_results (GstElement * bin,
- GList * send_rtxdata_list, RTXReceiveMultipleData * receive_rtxdata,
- guint drop_every_n_packets)
-{
- GstStateChangeReturn state_res = GST_STATE_CHANGE_FAILURE;
- GstElement *rtprtxreceive =
- gst_bin_get_by_name (GST_BIN (bin), "rtprtxreceive");
- guint sum_all_packets_sent = 0;
- guint sum_rtx_packets_sent = 0;
- guint sum_all_packets_received = 0;
- guint sum_rtx_packets_received = 0;
- guint sum_rtx_assoc_packets_received = 0;
- guint sum_rtx_dropped_packets_received = 0;
- gdouble error_sent_recv = 0;
- GstIterator *itr_elements = NULL;
- gboolean done = FALSE;
- GValue item = { 0 };
- GstElement *element = NULL;
- gchar *name = NULL;
-
- GST_INFO ("starting test");
-
- g_atomic_int_set (&receive_rtxdata->received, 0);
- g_atomic_int_set (&receive_rtxdata->dropped_requests, 0);
-
- g_hash_table_remove_all (receive_rtxdata->ssrc_to_nb_packets_map);
- g_hash_table_remove_all (receive_rtxdata->ssrc_to_seqnum_offset_map);
-
- g_list_foreach (send_rtxdata_list, (GFunc) reset_rtx_send_data,
- &drop_every_n_packets);
-
- /* run pipeline */
- state_res = gst_element_set_state (bin, GST_STATE_PLAYING);
- ck_assert_int_ne (state_res, GST_STATE_CHANGE_FAILURE);
-
- state_res = gst_element_get_state (bin, NULL, NULL, GST_CLOCK_TIME_NONE);
- ck_assert_int_ne (state_res, GST_STATE_CHANGE_FAILURE);
-
- GST_INFO ("running main loop");
- while (!check_finished (receive_rtxdata))
- g_main_context_iteration (NULL, TRUE);
-
- /* check results */
- itr_elements = gst_bin_iterate_elements (GST_BIN (bin));
- done = FALSE;
- while (!done) {
- switch (gst_iterator_next (itr_elements, &item)) {
- case GST_ITERATOR_OK:
- element = GST_ELEMENT (g_value_get_object (&item));
- name = gst_element_get_name (element);
- if (g_str_has_prefix (name, "rtprtxsend") > 0) {
- guint nb_packets = 0;
- g_object_get (G_OBJECT (element), "num-rtx-packets", &nb_packets,
- NULL);
- sum_rtx_packets_sent += nb_packets;
- }
- g_free (name);
- g_value_reset (&item);
- break;
- case GST_ITERATOR_RESYNC:
- gst_iterator_resync (itr_elements);
- break;
- case GST_ITERATOR_ERROR:
- done = TRUE;
- break;
- case GST_ITERATOR_DONE:
- done = TRUE;
- break;
- }
- }
- g_value_unset (&item);
- gst_iterator_free (itr_elements);
-
- /* compute number of all packets sent by all sender */
- g_list_foreach (send_rtxdata_list, (GFunc) compute_total_packets_sent,
- &sum_all_packets_sent);
-
- /* compute number of all packets received by rtprtxreceive::src pad */
- g_hash_table_foreach (receive_rtxdata->ssrc_to_nb_packets_map,
- compute_total_packets_received, (gpointer) & sum_all_packets_received);
-
- sum_all_packets_received +=
- g_atomic_int_get (&receive_rtxdata->dropped_requests);
- fail_if (sum_all_packets_sent < sum_all_packets_received);
-
- /* some packet are not received, I still have to figure out why
- * but I suspect it comes from pipeline setup/shutdown
- */
- if (sum_all_packets_sent != sum_all_packets_received) {
- error_sent_recv =
- 1 - sum_all_packets_received / (gdouble) sum_all_packets_sent;
- fail_if (error_sent_recv > 0.30);
- /* it should be 0% */
- }
-
- /* retrieve number of retransmit packets received by rtprtxreceive */
- g_object_get (G_OBJECT (rtprtxreceive), "num-rtx-packets",
- &sum_rtx_packets_received, NULL);
-
- /* some of rtx packet are not received because the receiver avoids
- * collision (= requests that have the same seqnum)
- */
- fail_if (sum_rtx_packets_sent < sum_rtx_packets_received);
- g_object_get (G_OBJECT (rtprtxreceive), "num-rtx-assoc-packets",
- &sum_rtx_assoc_packets_received, NULL);
- sum_rtx_dropped_packets_received =
- sum_rtx_packets_received - sum_rtx_assoc_packets_received;
- fail_unless_equals_int (sum_rtx_packets_sent,
- sum_rtx_assoc_packets_received + sum_rtx_dropped_packets_received);
-
- gst_object_unref (rtprtxreceive);
- state_res = gst_element_set_state (bin, GST_STATE_NULL);
- ck_assert_int_ne (state_res, GST_STATE_CHANGE_FAILURE);
-}
-
-static void
-free_rtx_send_data (gpointer data)
-{
- g_slice_free (RTXSendMultipleData, data);
-}
-
-/* This test build the pipeline funnel name=funnel
- * videotestsrc ! rtpvrawpay ! rtprtxsend ! queue ! funnel.
- * videotestsrc ! rtpvrawpay ! rtprtxsend ! queue ! funnel.
- * N
- * funnel. ! rtprtxreceive ! fakesink
- * and drop some buffer just after each rtprtxsend
- * Then it checks that every dropped packet has been re-sent and it checks
- * that not too much requests has been sent.
- */
-GST_START_TEST (test_drop_multiple_sender)
-{
- GstElement *bin, *funnel, *rtprtxreceive, *sink;
- GstBus *bus;
- gboolean res;
- GstPad *srcpad, *sinkpad;
- guint drop_every_n_packets = 0;
- GList *send_rtxdata_list = NULL;
- RTXReceiveMultipleData receive_rtxdata = { NULL };
- GstStructure *pt_map;
-
- GST_INFO ("preparing test");
-
- receive_rtxdata.ssrc_to_nb_packets_map =
- g_hash_table_new (g_direct_hash, g_direct_equal);
- receive_rtxdata.ssrc_to_seqnum_offset_map =
- g_hash_table_new (g_direct_hash, g_direct_equal);
- receive_rtxdata.seqnum_offset = 1;
-
- /* build pipeline */
- bin = gst_pipeline_new ("pipeline");
- bus = gst_element_get_bus (bin);
- gst_bus_add_signal_watch_full (bus, G_PRIORITY_HIGH);
-
- funnel = gst_element_factory_make ("funnel", "funnel");
- rtprtxreceive = gst_element_factory_make ("rtprtxreceive", "rtprtxreceive");
- sink = gst_element_factory_make ("fakesink", "sink");
- g_object_set (sink, "sync", TRUE, NULL);
- g_object_set (sink, "qos", FALSE, NULL);
- gst_bin_add_many (GST_BIN (bin), funnel, rtprtxreceive, sink, NULL);
-
- send_rtxdata_list =
- g_list_append (send_rtxdata_list, add_sender (bin, "videotestsrc",
- "rtpvrawpay", 96, 121, &receive_rtxdata));
- send_rtxdata_list =
- g_list_append (send_rtxdata_list, add_sender (bin, "videotestsrc",
- "rtpvrawpay", 97, 122, &receive_rtxdata));
- send_rtxdata_list =
- g_list_append (send_rtxdata_list, add_sender (bin, "videotestsrc",
- "rtpvrawpay", 98, 123, &receive_rtxdata));
- send_rtxdata_list =
- g_list_append (send_rtxdata_list, add_sender (bin, "videotestsrc",
- "rtpvrawpay", 99, 124, &receive_rtxdata));
-
- pt_map = gst_structure_new ("application/x-rtp-pt-map",
- "96", G_TYPE_UINT, 121, "97", G_TYPE_UINT, 122,
- "98", G_TYPE_UINT, 123, "99", G_TYPE_UINT, 124, NULL);
- g_object_set (rtprtxreceive, "payload-type-map", pt_map, NULL);
- gst_structure_free (pt_map);
-
- res = gst_element_link (funnel, rtprtxreceive);
- fail_unless (res == TRUE, NULL);
- res = gst_element_link (rtprtxreceive, sink);
- fail_unless (res == TRUE, NULL);
-
- srcpad = gst_element_get_static_pad (rtprtxreceive, "src");
- gst_pad_add_probe (srcpad,
- (GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_PUSH),
- (GstPadProbeCallback) rtprtxreceive_srcpad_probe_multiple,
- &receive_rtxdata, NULL);
- gst_object_unref (srcpad);
-
- sinkpad = gst_element_get_static_pad (rtprtxreceive, "sink");
- gst_pad_add_probe (sinkpad,
- GST_PAD_PROBE_TYPE_EVENT_UPSTREAM,
- (GstPadProbeCallback) rtprtxreceive_sinkpad_probe_check_drop,
- &receive_rtxdata, NULL);
- gst_object_unref (sinkpad);
-
- g_signal_connect (bus, "message::error",
- (GCallback) message_received_multiple, NULL);
- g_signal_connect (bus, "message::warning",
- (GCallback) message_received_multiple, NULL);
-
- for (drop_every_n_packets = 2; drop_every_n_packets < 10;
- drop_every_n_packets++) {
- start_test_drop_multiple_and_check_results (bin, send_rtxdata_list,
- &receive_rtxdata, drop_every_n_packets);
- }
-
- /* cleanup */
-
- g_list_free_full (send_rtxdata_list, free_rtx_send_data);
- g_hash_table_destroy (receive_rtxdata.ssrc_to_nb_packets_map);
- g_hash_table_destroy (receive_rtxdata.ssrc_to_seqnum_offset_map);
-
- gst_bus_remove_signal_watch (bus);
- gst_object_unref (bus);
- gst_object_unref (bin);
-}
-
-GST_END_TEST;
-
-struct GenerateTestBuffersData
-{
- GstElement *src, *capsfilter, *payloader, *sink;
- GMutex mutex;
- GCond cond;
- GList *buffers;
- gint num_buffers;
- guint last_seqnum;
-};
-
-static void
-fakesink_handoff (GstElement * sink, GstBuffer * buf, GstPad * pad,
- gpointer user_data)
-{
- struct GenerateTestBuffersData *data = user_data;
-
- g_mutex_lock (&data->mutex);
-
- if (data->num_buffers > 0)
- data->buffers = g_list_append (data->buffers, gst_buffer_ref (buf));
-
- /* if we have collected enough buffers, unblock the main thread to stop */
- if (--data->num_buffers <= 0)
- g_cond_signal (&data->cond);
-
- if (data->num_buffers == 0)
- g_object_get (data->payloader, "seqnum", &data->last_seqnum, NULL);
-
- g_mutex_unlock (&data->mutex);
-}
-
-static GList *
-generate_test_buffers (const gint num_buffers, guint ssrc, guint * payload_type)
-{
- GstElement *bin;
- GstCaps *videotestsrc_caps;
- gboolean res;
- struct GenerateTestBuffersData data;
-
- fail_unless (num_buffers > 0);
-
- g_mutex_init (&data.mutex);
- g_cond_init (&data.cond);
- data.buffers = NULL;
- data.num_buffers = num_buffers;
-
- bin = gst_pipeline_new (NULL);
- data.src = gst_element_factory_make ("videotestsrc", NULL);
- data.capsfilter = gst_element_factory_make ("capsfilter", NULL);
- data.payloader = gst_element_factory_make ("rtpvrawpay", NULL);
- data.sink = gst_element_factory_make ("fakesink", NULL);
-
- /* small frame size will cause vrawpay to generate exactly one rtp packet
- * per video frame, which we need for the max-size-time test */
- videotestsrc_caps =
- gst_caps_from_string
- ("video/x-raw,format=I420,width=10,height=10,framerate=30/1");
-
- g_object_set (data.src, "do-timestamp", TRUE, NULL);
- g_object_set (data.capsfilter, "caps", videotestsrc_caps, NULL);
- g_object_set (data.payloader, "seqnum-offset", 1, "ssrc", ssrc, NULL);
- g_object_set (data.sink, "signal-handoffs", TRUE, NULL);
- g_signal_connect (data.sink, "handoff", (GCallback) fakesink_handoff, &data);
-
- gst_caps_unref (videotestsrc_caps);
-
- gst_bin_add_many (GST_BIN (bin), data.src, data.capsfilter, data.payloader,
- data.sink, NULL);
- res = gst_element_link_many (data.src, data.capsfilter, data.payloader,
- data.sink, NULL);
- fail_unless_equals_int (res, TRUE);
-
- g_mutex_lock (&data.mutex);
- ASSERT_SET_STATE (bin, GST_STATE_PLAYING, GST_STATE_CHANGE_ASYNC);
- while (data.num_buffers > 0)
- g_cond_wait (&data.cond, &data.mutex);
- g_mutex_unlock (&data.mutex);
-
- g_object_get (data.payloader, "pt", payload_type, NULL);
-
- ASSERT_SET_STATE (bin, GST_STATE_NULL, GST_STATE_CHANGE_SUCCESS);
-
- fail_unless_equals_int (g_list_length (data.buffers), num_buffers);
- fail_unless_equals_int (num_buffers, data.last_seqnum);
-
- g_mutex_clear (&data.mutex);
- g_cond_clear (&data.cond);
- gst_object_unref (bin);
-
- return data.buffers;
-}
+#define push_pull_and_verify(h, buf, is_rtx, expected_ssrc, expted_pt, expected_seqnum) \
+ G_STMT_START { \
+ gst_harness_push (h, buf); \
+ pull_and_verify (h, is_rtx, expected_ssrc, expted_pt, expected_seqnum); \
+ } G_STMT_END
static GstEvent *
-create_rtx_event (guint seqnum, guint ssrc, guint payload_type)
+create_rtx_event (guint32 ssrc, guint8 payload_type, guint16 seqnum)
{
return gst_event_new_custom (GST_EVENT_CUSTOM_UPSTREAM,
gst_structure_new ("GstRTPRetransmissionRequest",
@@ -1270,187 +61,6 @@
}
static void
-test_rtxsender_packet_retention (gboolean test_with_time)
-{
- const gint num_buffers = test_with_time ? 30 : 10;
- const gint half_buffers = num_buffers / 2;
- const guint ssrc = 1234567;
- const guint rtx_ssrc = 7654321;
- const guint rtx_payload_type = 99;
- GstStructure *pt_map;
- GstStructure *ssrc_map;
- GList *in_buffers, *node;
- guint payload_type;
- GstElement *rtxsend;
- GstPad *srcpad, *sinkpad;
- GstCaps *caps;
- GstRTPBuffer rtp = GST_RTP_BUFFER_INIT;
- gint i, j;
- gboolean res;
-
- /* generate test data */
- in_buffers = generate_test_buffers (num_buffers, ssrc, &payload_type);
-
- /* clear the global buffers list, which we are going to use later */
- gst_check_drop_buffers ();
-
- /* setup element & pads */
- rtxsend = gst_check_setup_element ("rtprtxsend");
-
- pt_map = gst_structure_new ("application/x-rtp-pt-map",
- "96", G_TYPE_UINT, rtx_payload_type, NULL);
- ssrc_map = gst_structure_new ("application/x-rtp-ssrc-map",
- "1234567", G_TYPE_UINT, rtx_ssrc, NULL);
-
- /* in both cases we want the rtxsend queue to store 'half_buffers'
- * amount of buffers at most. In max-size-packets mode, it's trivial.
- * In max-size-time mode, we specify almost half a second, which is
- * the equivalent of 15 frames in a 30fps video stream */
- g_object_set (rtxsend,
- "max-size-packets", test_with_time ? 0 : half_buffers,
- "max-size-time", test_with_time ? 499 : 0,
- "payload-type-map", pt_map, "ssrc-map", ssrc_map, NULL);
- gst_structure_free (pt_map);
- gst_structure_free (ssrc_map);
-
- srcpad = gst_check_setup_src_pad (rtxsend, &srctemplate);
- fail_unless_equals_int (gst_pad_set_active (srcpad, TRUE), TRUE);
-
- sinkpad = gst_check_setup_sink_pad (rtxsend, &sinktemplate);
- fail_unless_equals_int (gst_pad_set_active (sinkpad, TRUE), TRUE);
-
- ASSERT_SET_STATE (rtxsend, GST_STATE_PLAYING, GST_STATE_CHANGE_SUCCESS);
-
- caps = gst_caps_from_string ("application/x-rtp, "
- "media = (string)video, payload = (int)96, "
- "ssrc = (uint)1234567, clock-rate = (int)90000, "
- "encoding-name = (string)RAW");
- gst_check_setup_events (srcpad, rtxsend, caps, GST_FORMAT_TIME);
- gst_caps_unref (caps);
-
- /* now push all buffers and request retransmission every time for all of them */
- node = in_buffers;
- for (i = 1; i <= num_buffers; i++) {
- GstBuffer *buffer = GST_BUFFER (node->data);
-
- /* verify that the original packets are correct */
- res = gst_rtp_buffer_map (buffer, GST_MAP_READ, &rtp);
- fail_unless_equals_int (res, TRUE);
- fail_unless_equals_int (gst_rtp_buffer_get_ssrc (&rtp), ssrc);
- fail_unless_equals_int (gst_rtp_buffer_get_payload_type (&rtp),
- payload_type);
- fail_unless_equals_int (gst_rtp_buffer_get_seq (&rtp), i);
- gst_rtp_buffer_unmap (&rtp);
-
- /* retransmit all the previous ones */
- for (j = 1; j < i; j++) {
- /* synchronize with the chain() function of the "sinkpad"
- * to make sure that rtxsend has pushed the rtx buffer out
- * before continuing */
- GList *last_out_buffer = g_list_last (buffers);
- g_mutex_lock (&check_mutex);
- fail_unless_equals_int (gst_pad_push_event (sinkpad,
- create_rtx_event (j, ssrc, payload_type)), TRUE);
- /* wait for the rtx packet only if we expect the element
- * to actually retransmit something */
- if (j >= MAX (i - half_buffers, 1)) {
- guint64 end_time = g_get_monotonic_time () + G_TIME_SPAN_SECOND;
-
- while (last_out_buffer == g_list_last (buffers))
- fail_unless (g_cond_wait_until (&check_cond, &check_mutex, end_time));
- }
- g_mutex_unlock (&check_mutex);
- }
-
- /* push this one */
- gst_pad_push (srcpad, gst_buffer_ref (buffer));
- node = g_list_next (node);
- }
-
- /* verify the result. buffers should be in this order (numbers are seqnums):
- * 1, 1rtx, 2, 1rtx, 2rtx, 3, ... , 9, 5rtx, 6rtx, 7rtx, 8rtx, 9rtx, 10 */
- {
- GstRTPBuffer orig_rtp = GST_RTP_BUFFER_INIT;
- gint expected_rtx_requests, expected_rtx_packets;
- gint real_rtx_requests, real_rtx_packets;
-
- /* verify statistics first */
- expected_rtx_packets = half_buffers * half_buffers +
- ((half_buffers - 1) / 2.0f) * half_buffers;
- for (i = 1, expected_rtx_requests = 0; i < num_buffers; i++)
- expected_rtx_requests += i;
-
- g_object_get (rtxsend, "num-rtx-requests", &real_rtx_requests,
- "num-rtx-packets", &real_rtx_packets, NULL);
- fail_unless_equals_int (expected_rtx_requests, real_rtx_requests);
- fail_unless_equals_int (expected_rtx_packets, real_rtx_packets);
-
- /* and the number of actual buffers that we were pushed out of rtxsend */
- fail_unless_equals_int (g_list_length (buffers),
- num_buffers + expected_rtx_packets);
-
- node = buffers;
- for (i = 1; i <= num_buffers; i++) {
- /* verify the retransmission packets */
- for (j = MAX (i - half_buffers, 1); j < i; j++) {
- GST_INFO ("checking %d, %d", i, j);
-
- res = gst_rtp_buffer_map (GST_BUFFER (node->data), GST_MAP_READ, &rtp);
- fail_unless_equals_int (res, TRUE);
-
- fail_if (gst_rtp_buffer_get_ssrc (&rtp) == ssrc);
- fail_unless_equals_int (gst_rtp_buffer_get_ssrc (&rtp), rtx_ssrc);
- fail_unless_equals_int (gst_rtp_buffer_get_payload_type (&rtp),
- rtx_payload_type);
- fail_unless_equals_int (GST_READ_UINT16_BE (gst_rtp_buffer_get_payload (&rtp)), j); /* j == rtx seqnum */
-
- /* open the original packet for this rtx packet and verify timestamps */
- res = gst_rtp_buffer_map (GST_BUFFER (g_list_nth_data (in_buffers,
- j - 1)), GST_MAP_READ, &orig_rtp);
- fail_unless_equals_int (res, TRUE);
- fail_unless_equals_int (gst_rtp_buffer_get_timestamp (&orig_rtp),
- gst_rtp_buffer_get_timestamp (&rtp));
- gst_rtp_buffer_unmap (&orig_rtp);
-
- gst_rtp_buffer_unmap (&rtp);
- node = g_list_next (node);
- }
-
- /* verify the normal rtp flow packet */
- res = gst_rtp_buffer_map (GST_BUFFER (node->data), GST_MAP_READ, &rtp);
- fail_unless_equals_int (res, TRUE);
- fail_unless_equals_int (gst_rtp_buffer_get_ssrc (&rtp), ssrc);
- fail_unless_equals_int (gst_rtp_buffer_get_payload_type (&rtp),
- payload_type);
- fail_unless_equals_int (gst_rtp_buffer_get_seq (&rtp), i);
- gst_rtp_buffer_unmap (&rtp);
- node = g_list_next (node);
- }
- }
-
- g_list_free_full (in_buffers, (GDestroyNotify) gst_buffer_unref);
- gst_check_drop_buffers ();
-
- gst_check_teardown_src_pad (rtxsend);
- gst_check_teardown_sink_pad (rtxsend);
- gst_check_teardown_element (rtxsend);
-}
-
-GST_START_TEST (test_rtxsender_max_size_packets)
-{
- test_rtxsender_packet_retention (FALSE);
-}
-
-GST_END_TEST;
-
-GST_START_TEST (test_rtxsender_max_size_time)
-{
- test_rtxsender_packet_retention (TRUE);
-}
-
-GST_END_TEST;
-
-static void
compare_rtp_packets (GstBuffer * a, GstBuffer * b)
{
GstRTPBuffer rtp_a = GST_RTP_BUFFER_INIT;
@@ -1488,90 +98,469 @@
gst_rtp_buffer_unmap (&rtp_b);
}
-GST_START_TEST (test_rtxreceive_data_reconstruction)
+static GstBuffer *
+create_rtp_buffer (guint32 ssrc, guint8 payload_type, guint16 seqnum)
{
- const guint ssrc = 1234567;
- GList *in_buffers;
- guint payload_type;
- GstElement *rtxsend, *rtxrecv;
- GstPad *srcpad, *sinkpad;
- GstCaps *caps;
- GstBuffer *buffer;
+ GstRTPBuffer rtpbuf = GST_RTP_BUFFER_INIT;
+ guint payload_size = 29;
+ guint64 timestamp = gst_util_uint64_scale_int (seqnum, 90000, 30);
+ GstBuffer *buf = gst_rtp_buffer_new_allocate (payload_size, 0, 0);
+
+ gst_rtp_buffer_map (buf, GST_MAP_WRITE, &rtpbuf);
+ gst_rtp_buffer_set_ssrc (&rtpbuf, ssrc);
+ gst_rtp_buffer_set_payload_type (&rtpbuf, payload_type);
+ gst_rtp_buffer_set_seq (&rtpbuf, seqnum);
+ gst_rtp_buffer_set_timestamp (&rtpbuf, (guint32) timestamp);
+ memset (gst_rtp_buffer_get_payload (&rtpbuf), 0x29, payload_size);
+ gst_rtp_buffer_unmap (&rtpbuf);
+ return buf;
+}
+
+static GstBuffer *
+create_rtp_buffer_with_timestamp (guint32 ssrc, guint8 payload_type,
+ guint16 seqnum, guint32 timestamp)
+{
+ GstRTPBuffer rtpbuf = GST_RTP_BUFFER_INIT;
+ GstBuffer *buf = create_rtp_buffer (ssrc, payload_type, seqnum);
+ gst_rtp_buffer_map (buf, GST_MAP_WRITE, &rtpbuf);
+ gst_rtp_buffer_set_timestamp (&rtpbuf, timestamp);
+ gst_rtp_buffer_unmap (&rtpbuf);
+ return buf;
+}
+
+GST_START_TEST (test_rtxsend_rtxreceive)
+{
+ const guint packets_num = 5;
+ guint master_ssrc = 1234567;
+ guint master_pt = 96;
+ guint rtx_pt = 99;
GstStructure *pt_map;
-
- /* generate test data */
- in_buffers = generate_test_buffers (1, ssrc, &payload_type);
-
- /* clear the global buffers list, which we are going to use later */
- gst_check_drop_buffers ();
-
- /* setup element & pads */
- rtxsend = gst_check_setup_element ("rtprtxsend");
- rtxrecv = gst_check_setup_element ("rtprtxreceive");
+ GstBuffer *inbufs[5];
+ GstHarness *hrecv = gst_harness_new ("rtprtxreceive");
+ GstHarness *hsend = gst_harness_new ("rtprtxsend");
pt_map = gst_structure_new ("application/x-rtp-pt-map",
- "96", G_TYPE_UINT, 99, NULL);
- g_object_set (rtxsend, "payload-type-map", pt_map, NULL);
- g_object_set (rtxrecv, "payload-type-map", pt_map, NULL);
- gst_structure_free (pt_map);
+ "96", G_TYPE_UINT, rtx_pt, NULL);
+ g_object_set (hrecv->element, "payload-type-map", pt_map, NULL);
+ g_object_set (hsend->element, "payload-type-map", pt_map, NULL);
- fail_unless_equals_int (gst_element_link (rtxsend, rtxrecv), TRUE);
-
- srcpad = gst_check_setup_src_pad (rtxsend, &srctemplate);
- fail_unless_equals_int (gst_pad_set_active (srcpad, TRUE), TRUE);
-
- sinkpad = gst_check_setup_sink_pad (rtxrecv, &sinktemplate);
- fail_unless_equals_int (gst_pad_set_active (sinkpad, TRUE), TRUE);
-
- ASSERT_SET_STATE (rtxsend, GST_STATE_PLAYING, GST_STATE_CHANGE_SUCCESS);
- ASSERT_SET_STATE (rtxrecv, GST_STATE_PLAYING, GST_STATE_CHANGE_SUCCESS);
-
- caps = gst_caps_from_string ("application/x-rtp, "
+ gst_harness_set_src_caps_str (hsend, "application/x-rtp, "
"media = (string)video, payload = (int)96, "
"ssrc = (uint)1234567, clock-rate = (int)90000, "
"encoding-name = (string)RAW");
- gst_check_setup_events (srcpad, rtxsend, caps, GST_FORMAT_TIME);
- gst_caps_unref (caps);
+ gst_harness_set_src_caps_str (hrecv, "application/x-rtp, "
+ "media = (string)video, payload = (int)96, "
+ "ssrc = (uint)1234567, clock-rate = (int)90000, "
+ "encoding-name = (string)RAW");
- /* push buffer */
- buffer = gst_buffer_ref (GST_BUFFER (in_buffers->data));
- fail_unless_equals_int (gst_pad_push (srcpad, buffer), GST_FLOW_OK);
-
- /* push retransmission request */
- {
- GList *last_out_buffer;
- guint64 end_time;
- gboolean res;
-
- /* synchronize with the chain() function of the "sinkpad"
- * to make sure that rtxsend has pushed the rtx buffer out
- * before continuing */
- last_out_buffer = g_list_last (buffers);
- g_mutex_lock (&check_mutex);
- fail_unless_equals_int (gst_pad_push_event (sinkpad,
- create_rtx_event (1, ssrc, payload_type)), TRUE);
- end_time = g_get_monotonic_time () + G_TIME_SPAN_SECOND;
- do
- res = g_cond_wait_until (&check_cond, &check_mutex, end_time);
- while (res == TRUE && last_out_buffer == g_list_last (buffers));
- fail_unless_equals_int (res, TRUE);
- g_mutex_unlock (&check_mutex);
+ /* Push 'packets_num' packets through rtxsend to rtxreceive */
+ for (gint i = 0; i < packets_num; ++i) {
+ inbufs[i] = create_rtp_buffer (master_ssrc, master_pt, 100 + i);
+ gst_harness_push (hsend, gst_buffer_ref (inbufs[i]));
+ gst_harness_push (hrecv, gst_harness_pull (hsend));
+ pull_and_verify (hrecv, FALSE, master_ssrc, master_pt, 100 + i);
}
- /* verify */
- fail_unless_equals_int (g_list_length (buffers), 2);
- compare_rtp_packets (GST_BUFFER (buffers->data),
- GST_BUFFER (buffers->next->data));
+ /* Getting rid of reconfigure event. Preparation before the next step */
+ gst_event_unref (gst_harness_pull_upstream_event (hrecv));
+ fail_unless_equals_int (gst_harness_upstream_events_in_queue (hrecv), 0);
- /* cleanup */
- g_list_free_full (in_buffers, (GDestroyNotify) gst_buffer_unref);
- gst_check_drop_buffers ();
+ /* Push 'packets_num' RTX events through rtxreceive to rtxsend.
+ Push RTX packets from rtxsend to rtxreceive and
+ check that the packet produced out of RTX packet is the same
+ as an original packet */
+ for (gint i = 0; i < packets_num; ++i) {
+ GstBuffer *outbuf;
+ gst_harness_push_upstream_event (hrecv,
+ create_rtx_event (master_ssrc, master_pt, 100 + i));
+ gst_harness_push_upstream_event (hsend,
+ gst_harness_pull_upstream_event (hrecv));
+ gst_harness_push (hrecv, gst_harness_pull (hsend));
- gst_check_teardown_src_pad (rtxsend);
- gst_check_teardown_sink_pad (rtxrecv);
- gst_element_unlink (rtxsend, rtxrecv);
- gst_check_teardown_element (rtxsend);
- gst_check_teardown_element (rtxrecv);
+ outbuf = gst_harness_pull (hrecv);
+ compare_rtp_packets (inbufs[i], outbuf);
+ gst_buffer_unref (inbufs[i]);
+ gst_buffer_unref (outbuf);
+ }
+
+ /* Check RTX stats */
+ {
+ guint rtx_requests;
+ guint rtx_packets;
+ guint rtx_assoc_packets;
+ g_object_get (G_OBJECT (hsend->element),
+ "num-rtx-requests", &rtx_requests,
+ "num-rtx-packets", &rtx_packets, NULL);
+ fail_unless_equals_int (rtx_packets, packets_num);
+ fail_unless_equals_int (rtx_requests, packets_num);
+
+ g_object_get (G_OBJECT (hrecv->element),
+ "num-rtx-requests", &rtx_requests,
+ "num-rtx-packets", &rtx_packets,
+ "num-rtx-assoc-packets", &rtx_assoc_packets, NULL);
+ fail_unless_equals_int (rtx_packets, packets_num);
+ fail_unless_equals_int (rtx_requests, packets_num);
+ fail_unless_equals_int (rtx_assoc_packets, packets_num);
+ }
+
+ gst_structure_free (pt_map);
+ gst_harness_teardown (hrecv);
+ gst_harness_teardown (hsend);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_rtxsend_rtxreceive_with_packet_loss)
+{
+ guint packets_num = 20;
+ guint master_ssrc = 1234567;
+ guint master_pt = 96;
+ guint rtx_pt = 99;
+ guint seqnum = 100;
+ guint expected_rtx_packets = 0;
+ GstStructure *pt_map;
+ GstHarness *hrecv = gst_harness_new ("rtprtxreceive");
+ GstHarness *hsend = gst_harness_new ("rtprtxsend");
+
+ pt_map = gst_structure_new ("application/x-rtp-pt-map",
+ "96", G_TYPE_UINT, rtx_pt, NULL);
+ g_object_set (hrecv->element, "payload-type-map", pt_map, NULL);
+ g_object_set (hsend->element, "payload-type-map", pt_map, NULL);
+
+ gst_harness_set_src_caps_str (hsend, "application/x-rtp, "
+ "media = (string)video, payload = (int)96, "
+ "ssrc = (uint)1234567, clock-rate = (int)90000, "
+ "encoding-name = (string)RAW");
+ gst_harness_set_src_caps_str (hrecv, "application/x-rtp, "
+ "media = (string)video, payload = (int)96, "
+ "ssrc = (uint)1234567, clock-rate = (int)90000, "
+ "encoding-name = (string)RAW");
+
+ /* Getting rid of reconfigure event. Making sure there is no upstream
+ events in the queue. Preparation step before the test. */
+ gst_event_unref (gst_harness_pull_upstream_event (hrecv));
+ fail_unless_equals_int (gst_harness_upstream_events_in_queue (hrecv), 0);
+
+ /* Push 'packets_num' packets through rtxsend to rtxreceive loosing every
+ 'drop_every_n_packets' packet. When we loose the packet we send RTX event
+ through rtxreceive to rtxsend, and verify the packet was retransmitted */
+ for (gint drop_nth_packet = 2; drop_nth_packet < 10; ++drop_nth_packet) {
+ for (gint i = 0; i < packets_num; ++i, ++seqnum) {
+ GstBuffer *outbuf;
+ GstBuffer *inbuf = create_rtp_buffer (master_ssrc, master_pt, seqnum);
+ gboolean drop_this_packet = ((i + 1) % drop_nth_packet) == 0;
+
+ gst_harness_push (hsend, gst_buffer_ref (inbuf));
+ if (drop_this_packet) {
+ /* Dropping original packet */
+ gst_buffer_unref (gst_harness_pull (hsend));
+ /* Requesting retransmission */
+ gst_harness_push_upstream_event (hrecv,
+ create_rtx_event (master_ssrc, master_pt, seqnum));
+ gst_harness_push_upstream_event (hsend,
+ gst_harness_pull_upstream_event (hrecv));
+ /* Pushing RTX packet to rtxreceive */
+ gst_harness_push (hrecv, gst_harness_pull (hsend));
+ ++expected_rtx_packets;
+ } else {
+ gst_harness_push (hrecv, gst_harness_pull (hsend));
+ }
+
+ /* We making sure every buffer we pull is the same as original input
+ buffer */
+ outbuf = gst_harness_pull (hrecv);
+ compare_rtp_packets (inbuf, outbuf);
+ gst_buffer_unref (inbuf);
+ gst_buffer_unref (outbuf);
+
+ /*
+ We should not have any packets in the harness queue by this point. It
+ means rtxsend didn't send more packets than RTX events and rtxreceive
+ didn't produce more than one packet per RTX packet.
+ */
+ fail_unless_equals_int (gst_harness_buffers_in_queue (hsend), 0);
+ fail_unless_equals_int (gst_harness_buffers_in_queue (hrecv), 0);
+ }
+ }
+
+ /* Check RTX stats */
+ {
+ guint rtx_requests;
+ guint rtx_packets;
+ guint rtx_assoc_packets;
+ g_object_get (G_OBJECT (hsend->element),
+ "num-rtx-requests", &rtx_requests,
+ "num-rtx-packets", &rtx_packets, NULL);
+ fail_unless_equals_int (rtx_packets, expected_rtx_packets);
+ fail_unless_equals_int (rtx_requests, expected_rtx_packets);
+
+ g_object_get (G_OBJECT (hrecv->element),
+ "num-rtx-requests", &rtx_requests,
+ "num-rtx-packets", &rtx_packets,
+ "num-rtx-assoc-packets", &rtx_assoc_packets, NULL);
+ fail_unless_equals_int (rtx_packets, expected_rtx_packets);
+ fail_unless_equals_int (rtx_requests, expected_rtx_packets);
+ fail_unless_equals_int (rtx_assoc_packets, expected_rtx_packets);
+ }
+
+ gst_structure_free (pt_map);
+ gst_harness_teardown (hrecv);
+ gst_harness_teardown (hsend);
+}
+
+GST_END_TEST;
+
+typedef struct
+{
+ GstHarness *h;
+ guint master_ssrc;
+ guint master_pt;
+ guint rtx_ssrc;
+ guint rtx_pt;
+ guint seqnum;
+ guint expected_rtx_packets;
+} RtxSender;
+
+static GstStructure *
+create_rtxsenders (RtxSender * senders, guint senders_num)
+{
+ GstStructure *recv_pt_map =
+ gst_structure_new_empty ("application/x-rtp-pt-map");
+
+ for (gint i = 0; i < senders_num; ++i) {
+ gchar *master_pt_str;
+ gchar *master_caps_str;
+ GstStructure *send_pt_map;
+
+ senders[i].h = gst_harness_new ("rtprtxsend");
+ senders[i].master_ssrc = 1234567 + i;
+ senders[i].rtx_ssrc = 7654321 + i;
+ senders[i].master_pt = 80 + i;
+ senders[i].rtx_pt = 20 + i;
+ senders[i].seqnum = i * 1000;
+ senders[i].expected_rtx_packets = 0;
+
+ master_pt_str = g_strdup_printf ("%u", senders[i].master_pt);
+ master_caps_str = g_strdup_printf ("application/x-rtp, "
+ "media = (string)video, payload = (int)%u, "
+ "ssrc = (uint)%u, clock-rate = (int)90000, "
+ "encoding-name = (string)RAW",
+ senders[i].master_pt, senders[i].master_ssrc);
+
+ send_pt_map = gst_structure_new ("application/x-rtp-pt-map",
+ master_pt_str, G_TYPE_UINT, senders[i].rtx_pt, NULL);
+ gst_structure_set (recv_pt_map,
+ master_pt_str, G_TYPE_UINT, senders[i].rtx_pt, NULL);
+
+ g_object_set (senders[i].h->element, "payload-type-map", send_pt_map, NULL);
+ gst_harness_set_src_caps_str (senders[i].h, master_caps_str);
+
+ gst_structure_free (send_pt_map);
+ g_free (master_pt_str);
+ g_free (master_caps_str);
+ }
+ return recv_pt_map;
+}
+
+static guint
+check_rtxsenders_stats_and_teardown (RtxSender * senders, guint senders_num)
+{
+ guint total_pakets_num = 0;
+ for (gint i = 0; i < senders_num; ++i) {
+ guint rtx_requests;
+ guint rtx_packets;
+ g_object_get (G_OBJECT (senders[i].h->element),
+ "num-rtx-requests", &rtx_requests,
+ "num-rtx-packets", &rtx_packets, NULL);
+ fail_unless_equals_int (rtx_packets, senders[i].expected_rtx_packets);
+ fail_unless_equals_int (rtx_requests, senders[i].expected_rtx_packets);
+ total_pakets_num += rtx_packets;
+
+ gst_harness_teardown (senders[i].h);
+ }
+ return total_pakets_num;
+}
+
+GST_START_TEST (test_multi_rtxsend_rtxreceive_with_packet_loss)
+{
+ guint senders_num = 5;
+ guint packets_num = 10;
+ guint total_pakets_num = senders_num * packets_num;
+ guint total_dropped_packets = 0;
+ RtxSender senders[5];
+ GstStructure *pt_map;
+ GstHarness *hrecv = gst_harness_new ("rtprtxreceive");
+
+ pt_map = create_rtxsenders (senders, 5);
+ g_object_set (hrecv->element, "payload-type-map", pt_map, NULL);
+ gst_harness_set_src_caps_str (hrecv, "application/x-rtp, "
+ "media = (string)video, payload = (int)80, "
+ "ssrc = (uint)1234567, clock-rate = (int)90000, "
+ "encoding-name = (string)RAW");
+
+ /* Getting rid of reconfigure event. Making sure there is no upstream
+ events in the queue. Preparation step before the test. */
+ gst_event_unref (gst_harness_pull_upstream_event (hrecv));
+ fail_unless_equals_int (gst_harness_upstream_events_in_queue (hrecv), 0);
+
+ /* We are going to push the 1st packet from the 1st sender, 2nd from the 2nd,
+ 3rd from the 3rd, etc. until all the senders will push 'packets_num' packets.
+ We will drop every 'drop_nth_packet' packet and request its retransmission
+ from all the senders. Because only one of them can produce RTX packet.
+ We need to make sure that all other senders will ignore the RTX event they
+ can't act upon.
+ */
+ for (gint drop_nth_packet = 2; drop_nth_packet < 5; ++drop_nth_packet) {
+ for (gint i = 0; i < total_pakets_num; ++i) {
+ RtxSender *sender = &senders[i % senders_num];
+ gboolean drop_this_packet = ((i + 1) % drop_nth_packet) == 0;
+ GstBuffer *outbuf, *inbuf;
+ inbuf =
+ create_rtp_buffer (sender->master_ssrc, sender->master_pt,
+ sender->seqnum);
+
+ gst_harness_push (sender->h, gst_buffer_ref (inbuf));
+ if (drop_this_packet) {
+ GstEvent *rtxevent;
+ /* Dropping original packet */
+ gst_buffer_unref (gst_harness_pull (sender->h));
+
+ /* Pushing RTX event through rtxreceive to all the senders */
+ gst_harness_push_upstream_event (hrecv,
+ create_rtx_event (sender->master_ssrc, sender->master_pt,
+ sender->seqnum));
+ rtxevent = gst_harness_pull_upstream_event (hrecv);
+
+ /* ... to all the senders */
+ for (gint j = 0; j < senders_num; ++j)
+ gst_harness_push_upstream_event (senders[j].h,
+ gst_event_ref (rtxevent));
+ gst_event_unref (rtxevent);
+
+ /* Pushing RTX packet to rtxreceive */
+ gst_harness_push (hrecv, gst_harness_pull (sender->h));
+ ++sender->expected_rtx_packets;
+ ++total_dropped_packets;
+ } else {
+ gst_harness_push (hrecv, gst_harness_pull (sender->h));
+ }
+
+ /* It should not matter whether the buffer was dropped (and retransmitted)
+ or it went straight through rtxsend to rtxreceive. We should always pull
+ the same buffer that was pushed */
+ outbuf = gst_harness_pull (hrecv);
+ compare_rtp_packets (inbuf, outbuf);
+ gst_buffer_unref (inbuf);
+ gst_buffer_unref (outbuf);
+
+ /*
+ We should not have any packets in the harness queue by this point. It
+ means our senders didn't produce the packets for the unknown RTX event.
+ */
+ for (gint j = 0; j < senders_num; ++j)
+ fail_unless_equals_int (gst_harness_buffers_in_queue (senders[j].h), 0);
+
+ ++sender->seqnum;
+ }
+ }
+
+ /* Check RTX stats */
+ {
+ guint total_rtx_packets;
+ guint rtx_requests;
+ guint rtx_packets;
+ guint rtx_assoc_packets;
+
+ total_rtx_packets =
+ check_rtxsenders_stats_and_teardown (senders, senders_num);
+ fail_unless_equals_int (total_rtx_packets, total_dropped_packets);
+
+ g_object_get (G_OBJECT (hrecv->element),
+ "num-rtx-requests", &rtx_requests,
+ "num-rtx-packets", &rtx_packets,
+ "num-rtx-assoc-packets", &rtx_assoc_packets, NULL);
+ fail_unless_equals_int (rtx_packets, total_rtx_packets);
+ fail_unless_equals_int (rtx_requests, total_rtx_packets);
+ fail_unless_equals_int (rtx_assoc_packets, total_rtx_packets);
+ }
+
+ gst_structure_free (pt_map);
+ gst_harness_teardown (hrecv);
+}
+
+GST_END_TEST;
+
+static void
+test_rtxsender_packet_retention (gboolean test_with_time)
+{
+ guint master_ssrc = 1234567;
+ guint master_pt = 96;
+ guint rtx_ssrc = 7654321;
+ guint rtx_pt = 99;
+ gint num_buffers = test_with_time ? 30 : 10;
+ gint half_buffers = num_buffers / 2;
+ guint timestamp_delta = 90000 / 30;
+ guint timestamp = G_MAXUINT32 - half_buffers * timestamp_delta;
+ GstHarness *h;
+ GstStructure *pt_map = gst_structure_new ("application/x-rtp-pt-map",
+ "96", G_TYPE_UINT, rtx_pt, NULL);
+ GstStructure *ssrc_map = gst_structure_new ("application/x-rtp-ssrc-map",
+ "1234567", G_TYPE_UINT, rtx_ssrc, NULL);
+
+ h = gst_harness_new ("rtprtxsend");
+
+ /* In both cases we want the rtxsend queue to store 'half_buffers'
+ amount of buffers at most. In max-size-packets mode, it's trivial.
+ In max-size-time mode, we specify almost half a second, which is
+ the equivalent of 15 frames in a 30fps video stream.
+ */
+ g_object_set (h->element,
+ "max-size-packets", test_with_time ? 0 : half_buffers,
+ "max-size-time", test_with_time ? 499 : 0,
+ "payload-type-map", pt_map, "ssrc-map", ssrc_map, NULL);
+
+ gst_harness_set_src_caps_str (h, "application/x-rtp, "
+ "media = (string)video, payload = (int)96, "
+ "ssrc = (uint)1234567, clock-rate = (int)90000, "
+ "encoding-name = (string)RAW");
+
+ /* Now push all buffers and request retransmission every time for all of them */
+ for (gint i = 0; i < num_buffers; ++i, timestamp += timestamp_delta) {
+ /* Request to retransmit all the previous ones */
+ for (gint j = 0; j < i; ++j) {
+ guint rtx_seqnum = 0x100 + j;
+ gst_harness_push_upstream_event (h,
+ create_rtx_event (master_ssrc, master_pt, rtx_seqnum));
+
+ /* Pull only the ones supposed to be retransmited */
+ if (j >= i - half_buffers)
+ pull_and_verify (h, TRUE, rtx_ssrc, rtx_pt, rtx_seqnum);
+ }
+ /* Check there no extra buffers in the harness queue */
+ fail_unless_equals_int (gst_harness_buffers_in_queue (h), 0);
+
+ /* We create RTP buffers with timestamps that will eventualy wrap around 0
+ to be sure, rtprtxsend can handle it properly */
+ push_pull_and_verify (h,
+ create_rtp_buffer_with_timestamp (master_ssrc, master_pt, 0x100 + i,
+ timestamp), FALSE, master_ssrc, master_pt, 0x100 + i);
+ }
+
+ gst_structure_free (pt_map);
+ gst_structure_free (ssrc_map);
+ gst_harness_teardown (h);
+}
+
+GST_START_TEST (test_rtxsender_max_size_packets)
+{
+ test_rtxsender_packet_retention (FALSE);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_rtxsender_max_size_time)
+{
+ test_rtxsender_packet_retention (TRUE);
}
GST_END_TEST;
@@ -1586,12 +575,11 @@
suite_add_tcase (s, tc_chain);
- tcase_add_test (tc_chain, test_push_forward_seq);
- tcase_add_test (tc_chain, test_drop_one_sender);
- tcase_add_test (tc_chain, test_drop_multiple_sender);
+ tcase_add_test (tc_chain, test_rtxsend_rtxreceive);
+ tcase_add_test (tc_chain, test_rtxsend_rtxreceive_with_packet_loss);
+ tcase_add_test (tc_chain, test_multi_rtxsend_rtxreceive_with_packet_loss);
tcase_add_test (tc_chain, test_rtxsender_max_size_packets);
tcase_add_test (tc_chain, test_rtxsender_max_size_time);
- tcase_add_test (tc_chain, test_rtxreceive_data_reconstruction);
return s;
}
diff --git a/tests/check/elements/rtpvp9.c b/tests/check/elements/rtpvp9.c
new file mode 100644
index 0000000..1430c5f
--- /dev/null
+++ b/tests/check/elements/rtpvp9.c
@@ -0,0 +1,113 @@
+/* GStreamer
+ *
+ * Copyright (C) 2016 Pexip AS
+ * @author Stian Selnes <stian@pexip.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <gst/check/check.h>
+#include <gst/check/gstharness.h>
+
+#define RTP_VP9_CAPS_STR \
+ "application/x-rtp,media=video,encoding-name=VP9,clock-rate=90000,payload=96"
+
+
+GST_START_TEST (test_depay_flexible_mode)
+{
+ /* b-bit, e-bit, f-bit and marker bit set */
+ /* First packet of first frame, handcrafted to also set the e-bit and marker
+ * bit in addition to changing the seqnum */
+ guint8 intra[] = {
+ 0x80, 0xf4, 0x00, 0x00, 0x49, 0xb5, 0xbe, 0x32, 0xb1, 0x01, 0x64, 0xd1,
+ 0xbc, 0x98, 0xbf, 0x00, 0x83, 0x49, 0x83, 0x42, 0x00, 0x77, 0xf0, 0x43,
+ 0x71, 0xd8, 0xe0, 0x90, 0x70, 0x66, 0x80, 0x60, 0x0e, 0xf0, 0x5f, 0xfd,
+ };
+ /* b-bit, e-bit, p-bit, f-bit and marker bit set */
+ /* First packet of second frame, handcrafted to also set the e-bit and
+ * marker bit in addition to changing the seqnum */
+ guint8 inter[] = {
+ 0x80, 0xf4, 0x00, 0x01, 0x49, 0xb6, 0x02, 0xc0, 0xb1, 0x01, 0x64, 0xd1,
+ 0xfc, 0x98, 0xc0, 0x00, 0x02, 0x87, 0x01, 0x00, 0x09, 0x3f, 0x1c, 0x12,
+ 0x0e, 0x0c, 0xd0, 0x1b, 0xa7, 0x80, 0x80, 0xb0, 0x18, 0x0f, 0xda, 0x11,
+ };
+
+ GstHarness *h = gst_harness_new ("rtpvp9depay");
+ gst_harness_set_src_caps_str (h, RTP_VP9_CAPS_STR);
+
+ gst_harness_push (h, gst_buffer_new_wrapped_full (GST_MEMORY_FLAG_READONLY,
+ intra, sizeof (intra), 0, sizeof (intra), NULL, NULL));
+ fail_unless_equals_int (1, gst_harness_buffers_received (h));
+
+ gst_harness_push (h, gst_buffer_new_wrapped_full (GST_MEMORY_FLAG_READONLY,
+ inter, sizeof (inter), 0, sizeof (inter), NULL, NULL));
+ fail_unless_equals_int (2, gst_harness_buffers_received (h));
+
+ gst_harness_teardown (h);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_depay_non_flexible_mode)
+{
+ /* b-bit, e-bit and marker bit set. f-bit NOT set */
+ /* First packet of first frame, handcrafted to also set the e-bit and marker
+ * bit in addition to changing the seqnum */
+ guint8 intra[] = {
+ 0x80, 0xf4, 0x00, 0x00, 0x49, 0x88, 0xd9, 0xf8, 0xa0, 0x6c, 0x65, 0x6c,
+ 0x8c, 0x98, 0xc0, 0x87, 0x01, 0x02, 0x49, 0x3f, 0x1c, 0x12, 0x0e, 0x0c,
+ 0xd0, 0x1b, 0xb9, 0x80, 0x80, 0xb0, 0x18, 0x0f, 0xa6, 0x4d, 0x01, 0xa5
+ };
+ /* b-bit, e-bit, p-bit and marker bit set. f-bit NOT set */
+ /* First packet of second frame, handcrafted to also set the e-bit and
+ * marker bit in addition to changing the seqnum */
+ guint8 inter[] = {
+ 0x80, 0xf4, 0x00, 0x01, 0x49, 0x88, 0xe5, 0x38, 0xa0, 0x6c, 0x65, 0x6c,
+ 0xcc, 0x98, 0xc1, 0x87, 0x01, 0x02, 0x49, 0x3f, 0x1c, 0x12, 0x0e, 0x0c,
+ 0xd0, 0x1b, 0x97, 0x80, 0x80, 0xb0, 0x18, 0x0f, 0x8a, 0x9f, 0x01, 0xbc
+ };
+
+ GstHarness *h = gst_harness_new ("rtpvp9depay");
+ gst_harness_set_src_caps_str (h, RTP_VP9_CAPS_STR);
+
+ gst_harness_push (h, gst_buffer_new_wrapped_full (GST_MEMORY_FLAG_READONLY,
+ intra, sizeof (intra), 0, sizeof (intra), NULL, NULL));
+ fail_unless_equals_int (1, gst_harness_buffers_received (h));
+
+ gst_harness_push (h, gst_buffer_new_wrapped_full (GST_MEMORY_FLAG_READONLY,
+ inter, sizeof (inter), 0, sizeof (inter), NULL, NULL));
+ fail_unless_equals_int (2, gst_harness_buffers_received (h));
+
+ gst_harness_teardown (h);
+}
+GST_END_TEST;
+
+
+
+static Suite *
+rtpvp9_suite (void)
+{
+ Suite *s = suite_create ("rtpvp9");
+ TCase *tc_chain;
+
+ suite_add_tcase (s, (tc_chain = tcase_create ("vp9depay")));
+ tcase_add_test (tc_chain, test_depay_flexible_mode);
+ tcase_add_test (tc_chain, test_depay_non_flexible_mode);
+
+ return s;
+}
+
+GST_CHECK_MAIN (rtpvp9);
diff --git a/tests/check/elements/videobox.c b/tests/check/elements/videobox.c
index ec4825a..2d26535 100644
--- a/tests/check/elements/videobox.c
+++ b/tests/check/elements/videobox.c
@@ -163,7 +163,6 @@
fail_unless (bus != NULL);
gst_bus_add_watch (bus, bus_handler, loop);
- gst_object_unref (bus);
conversions_test_size = G_N_ELEMENTS (conversion_table);
for (itr = 0; itr < conversions_test_size; itr++) {
@@ -200,6 +199,8 @@
"couldn't set pipeline to READY state");
}
+ gst_bus_remove_watch (bus);
+ gst_object_unref (bus);
g_main_loop_unref (loop);
videobox_test_deinit_context (&ctx);
diff --git a/tests/check/elements/vp9enc.c b/tests/check/elements/vp9enc.c
new file mode 100644
index 0000000..62bc97f
--- /dev/null
+++ b/tests/check/elements/vp9enc.c
@@ -0,0 +1,76 @@
+/* GStreamer
+ *
+ * Copyright (c) 2016 Stian Selnes <stian@pexip.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+#include <gst/check/gstharness.h>
+#include <gst/check/gstcheck.h>
+#include <gst/video/video.h>
+
+GST_START_TEST (test_encode_lag_in_frames)
+{
+ GstHarness *h = gst_harness_new_parse ("vp9enc lag-in-frames=5 cpu-used=8 "
+ "deadline=1");
+ gst_harness_add_src_parse (h, "videotestsrc is-live=true pattern=black ! "
+ "capsfilter caps=\"video/x-raw,width=320,height=240,framerate=25/1\"",
+ TRUE);
+
+ /* Push 20 buffers into the encoder */
+ fail_unless_equals_int (GST_FLOW_OK,
+ gst_harness_src_crank_and_push_many (h, 20, 20));
+
+ /* Only 5 buffers are allowed to be queued now */
+ fail_unless (gst_harness_buffers_received (h) > 15);
+
+ /* EOS will cause the remaining buffers to be drained */
+ fail_unless (gst_harness_push_event (h, gst_event_new_eos ()));
+ fail_unless_equals_int (gst_harness_buffers_received (h), 20);
+
+ for (gint i = 0; i < 20; i++) {
+ GstBuffer *buffer = gst_harness_pull (h);
+
+ if (i == 0)
+ fail_if (GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DELTA_UNIT));
+
+ fail_unless_equals_uint64 (GST_BUFFER_TIMESTAMP (buffer),
+ gst_util_uint64_scale (i, GST_SECOND, 25));
+ fail_unless_equals_uint64 (GST_BUFFER_DURATION (buffer),
+ gst_util_uint64_scale (1, GST_SECOND, 25));
+
+ gst_buffer_unref (buffer);
+ }
+
+ gst_harness_teardown (h);
+}
+
+GST_END_TEST;
+
+
+static Suite *
+vp9enc_suite (void)
+{
+ Suite *s = suite_create ("vp9enc");
+ TCase *tc_chain = tcase_create ("general");
+
+ suite_add_tcase (s, tc_chain);
+
+ tcase_add_test (tc_chain, test_encode_lag_in_frames);
+
+ return s;
+}
+
+GST_CHECK_MAIN (vp9enc);
diff --git a/tests/check/pipelines/effectv.c b/tests/check/pipelines/effectv.c
index 6c25e4b..a14806e 100644
--- a/tests/check/pipelines/effectv.c
+++ b/tests/check/pipelines/effectv.c
@@ -72,7 +72,6 @@
g_signal_connect (bus, "message", (GCallback) on_message_cb, &omud);
- gst_object_unref (bus);
ret = gst_element_set_state (pipeline, GST_STATE_PLAYING);
fail_unless (ret == GST_STATE_CHANGE_SUCCESS
@@ -85,6 +84,8 @@
fail_unless (omud.eos == TRUE);
+ gst_bus_remove_signal_watch (bus);
+ gst_object_unref (bus);
gst_object_unref (pipeline);
g_main_loop_unref (loop);
}
diff --git a/tests/examples/Makefile.in b/tests/examples/Makefile.in
index 008ae56..6426db1 100644
--- a/tests/examples/Makefile.in
+++ b/tests/examples/Makefile.in
@@ -102,6 +102,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -320,6 +321,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -426,6 +428,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -493,6 +498,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/tests/examples/audiofx/Makefile.in b/tests/examples/audiofx/Makefile.in
index 6829e56..3b2c0b1 100644
--- a/tests/examples/audiofx/Makefile.in
+++ b/tests/examples/audiofx/Makefile.in
@@ -100,6 +100,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -324,6 +325,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -430,6 +432,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -497,6 +502,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/tests/examples/cairo/Makefile.in b/tests/examples/cairo/Makefile.in
index a024e6a..529d892 100644
--- a/tests/examples/cairo/Makefile.in
+++ b/tests/examples/cairo/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -310,6 +311,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -416,6 +418,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -483,6 +488,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/tests/examples/equalizer/Makefile.in b/tests/examples/equalizer/Makefile.in
index aa96796..8c6e9b4 100644
--- a/tests/examples/equalizer/Makefile.in
+++ b/tests/examples/equalizer/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -310,6 +311,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -416,6 +418,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -483,6 +488,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/tests/examples/equalizer/demo.c b/tests/examples/equalizer/demo.c
index 03b4ff6..70000e5 100644
--- a/tests/examples/equalizer/demo.c
+++ b/tests/examples/equalizer/demo.c
@@ -17,6 +17,9 @@
* Boston, MA 02110-1301, USA.
*/
+/* TODO: We use gdk_cairo_create() and others, which are deprecated */
+#define GDK_DISABLE_DEPRECATION_WARNINGS
+
#include <stdlib.h>
#include <string.h>
#include <math.h>
diff --git a/tests/examples/jack/Makefile.in b/tests/examples/jack/Makefile.in
index 644fe88..c98b1e4 100644
--- a/tests/examples/jack/Makefile.in
+++ b/tests/examples/jack/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -309,6 +310,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -415,6 +417,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -482,6 +487,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/tests/examples/level/Makefile.in b/tests/examples/level/Makefile.in
index 256b887..aa7e7bc 100644
--- a/tests/examples/level/Makefile.in
+++ b/tests/examples/level/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -310,6 +311,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -416,6 +418,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -483,6 +488,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/tests/examples/pulse/Makefile.in b/tests/examples/pulse/Makefile.in
index 62d670a..fe47d0d 100644
--- a/tests/examples/pulse/Makefile.in
+++ b/tests/examples/pulse/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -310,6 +311,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -416,6 +418,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -483,6 +488,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/tests/examples/rtp/Makefile.in b/tests/examples/rtp/Makefile.in
index 27134c5..89f412e 100644
--- a/tests/examples/rtp/Makefile.in
+++ b/tests/examples/rtp/Makefile.in
@@ -101,6 +101,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -337,6 +338,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -443,6 +445,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -510,6 +515,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/tests/examples/rtp/client-PCMA.c b/tests/examples/rtp/client-PCMA.c
index 664b336..8d7da61 100644
--- a/tests/examples/rtp/client-PCMA.c
+++ b/tests/examples/rtp/client-PCMA.c
@@ -88,13 +88,19 @@
/* get the right session */
g_signal_emit_by_name (rtpbin, "get-internal-session", sessid, &session);
+#if 0
+ /* FIXME: This is broken in rtpbin */
/* get the internal source (the SSRC allocated to us, the receiver */
g_object_get (session, "internal-source", &isrc, NULL);
print_source_stats (isrc);
+ g_object_unref (isrc);
+#endif
/* get the remote source that sent us RTCP */
g_signal_emit_by_name (session, "get-source-by-ssrc", ssrc, &osrc);
print_source_stats (osrc);
+ g_object_unref (osrc);
+ g_object_unref (session);
}
/* will be called when rtpbin has validated a payload that we can depayload */
diff --git a/tests/examples/shapewipe/Makefile.in b/tests/examples/shapewipe/Makefile.in
index 126e873..3d78500 100644
--- a/tests/examples/shapewipe/Makefile.in
+++ b/tests/examples/shapewipe/Makefile.in
@@ -100,6 +100,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -315,6 +316,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -421,6 +423,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -488,6 +493,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/tests/examples/spectrum/Makefile.in b/tests/examples/spectrum/Makefile.in
index 5732c30..88a8948 100644
--- a/tests/examples/spectrum/Makefile.in
+++ b/tests/examples/spectrum/Makefile.in
@@ -101,6 +101,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -332,6 +333,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -438,6 +440,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -505,6 +510,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/tests/examples/spectrum/demo-audiotest.c b/tests/examples/spectrum/demo-audiotest.c
index a5151c9..afa90c4 100644
--- a/tests/examples/spectrum/demo-audiotest.c
+++ b/tests/examples/spectrum/demo-audiotest.c
@@ -35,6 +35,9 @@
#include "config.h"
#endif
+/* TODO: We use gdk_cairo_create() and others, which are deprecated */
+#define GDK_DISABLE_DEPRECATION_WARNINGS
+
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
diff --git a/tests/examples/spectrum/demo-osssrc.c b/tests/examples/spectrum/demo-osssrc.c
index da684c9..2e5b195 100644
--- a/tests/examples/spectrum/demo-osssrc.c
+++ b/tests/examples/spectrum/demo-osssrc.c
@@ -21,6 +21,9 @@
#include "config.h"
#endif
+/* TODO: We use gdk_cairo_create() and others, which are deprecated */
+#define GDK_DISABLE_DEPRECATION_WARNINGS
+
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
diff --git a/tests/examples/v4l2/Makefile.in b/tests/examples/v4l2/Makefile.in
index d0e38db..2b61ba1 100644
--- a/tests/examples/v4l2/Makefile.in
+++ b/tests/examples/v4l2/Makefile.in
@@ -99,6 +99,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -310,6 +311,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -416,6 +418,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -483,6 +488,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/tests/files/Makefile.in b/tests/files/Makefile.in
index 6fff90a..c4beb9b 100644
--- a/tests/files/Makefile.in
+++ b/tests/files/Makefile.in
@@ -97,6 +97,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -255,6 +256,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -361,6 +363,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -428,6 +433,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/tests/icles/Makefile.in b/tests/icles/Makefile.in
index 8aaa73e..b6f88cf 100644
--- a/tests/icles/Makefile.in
+++ b/tests/icles/Makefile.in
@@ -103,6 +103,7 @@
$(top_srcdir)/common/m4/as-libtool.m4 \
$(top_srcdir)/common/m4/as-version.m4 \
$(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/ax_pthread.m4 \
$(top_srcdir)/common/m4/gst-arch.m4 \
$(top_srcdir)/common/m4/gst-args.m4 \
$(top_srcdir)/common/m4/gst-check.m4 \
@@ -410,6 +411,7 @@
GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PKG_CONFIG_PATH = @GST_PKG_CONFIG_PATH@
GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
@@ -516,6 +518,9 @@
PLUGINDIR = @PLUGINDIR@
POSUB = @POSUB@
PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
PULSE_CFLAGS = @PULSE_CFLAGS@
PULSE_LIBS = @PULSE_LIBS@
PYTHON = @PYTHON@
@@ -583,6 +588,7 @@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
diff --git a/win32/common/config.h b/win32/common/config.h
index 451017a..5a46b02 100644
--- a/win32/common/config.h
+++ b/win32/common/config.h
@@ -64,7 +64,7 @@
#define GST_PACKAGE_ORIGIN "Unknown package origin"
/* GStreamer package release date/time for plugins as YYYY-MM-DD */
-#define GST_PACKAGE_RELEASE_DATETIME "2016-06-06"
+#define GST_PACKAGE_RELEASE_DATETIME "2016-09-01"
/* Define if static plugins should be built */
#undef GST_PLUGIN_BUILD_STATIC
@@ -274,6 +274,12 @@
/* Define to 1 if you have the <process.h> header file. */
#define HAVE_PROCESS_H 1
+/* Define if you have POSIX threads libraries and header files. */
+#undef HAVE_PTHREAD
+
+/* Have PTHREAD_PRIO_INHERIT. */
+#undef HAVE_PTHREAD_PRIO_INHERIT
+
/* Define to enable pulseaudio plug-in (used by pulseaudio). */
#undef HAVE_PULSE
@@ -395,7 +401,7 @@
#define PACKAGE_NAME "GStreamer Good Plug-ins"
/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "GStreamer Good Plug-ins 1.9.1"
+#define PACKAGE_STRING "GStreamer Good Plug-ins 1.9.2"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "gst-plugins-good"
@@ -404,7 +410,7 @@
#undef PACKAGE_URL
/* Define to the version of this package. */
-#define PACKAGE_VERSION "1.9.1"
+#define PACKAGE_VERSION "1.9.2"
/* directory where plugins are located */
#ifdef _DEBUG
@@ -413,6 +419,10 @@
# define PLUGINDIR PREFIX "\\lib\\gstreamer-0.11"
#endif
+/* Define to necessary symbol if this constant uses a non-standard name on
+ your system. */
+#undef PTHREAD_CREATE_JOINABLE
+
/* The size of `char', as computed by sizeof. */
#undef SIZEOF_CHAR
@@ -435,7 +445,7 @@
#undef TARGET_CPU
/* Version number of package */
-#define VERSION "1.9.1"
+#define VERSION "1.9.2"
/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
significant byte first (like Motorola and SPARC, unlike Intel). */