diff --git a/ChangeLog b/ChangeLog index cb7b048f7467aa6488bae59fa0aa918bc334158b..36f60b8a3651d0eff32c87232fe8c72bf6f5b3a3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,9 +1,429 @@ +=== release 1.2.0 === + +2013-09-24 Sebastian Dröge <sebastian.droege@collabora.co.uk> + + * configure.ac: + releasing 1.2.0 + +2013-09-20 19:43:21 +0200 Andoni Morales Alastruey <ylatuya@gmail.com> + + * sys/osxvideo/osxvideosink.m: + osxvideosink: fix segfault releasing the sink + show_frame is deferred to the main thread and can be called + when the sink has been released, so we need to keep an extra ref + on ObjectiveC object helper. + https://bugzilla.gnome.org/show_bug.cgi?id=708501 + +2013-09-19 17:11:34 -0400 Robert Krakora <rob.krakora@messagenetsystems.com> + + * sys/v4l2/gstv4l2bufferpool.c: + v4l2bufferpool: Restore original GstMemory in buffer if it has been changed + https://bugzilla.gnome.org/show_bug.cgi?id=706083 + +2013-09-23 16:34:15 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/rtpmanager/gstrtpjitterbuffer.c: + * gst/rtpmanager/gstrtpsession.c: + rtpmanager: update docs + +2013-09-23 15:36:32 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/rtpmanager/gstrtpbin.c: + * gst/rtpmanager/gstrtpjitterbuffer.c: + * gst/rtpmanager/gstrtpptdemux.c: + * gst/rtpmanager/gstrtpsession.c: + * gst/rtpmanager/gstrtpssrcdemux.c: + docs: update docs with 1.0 element names + +2013-09-23 14:13:30 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * tests/check/elements/rtpjitterbuffer.c: + tests: add test for retransmission because of reordering + +2013-09-23 14:12:03 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/rtpmanager/gstrtpjitterbuffer.c: + rtpjitterbuffer: always store lost event in jitterbuffer + Always prepare a lost event in the jitterbuffer, it is to wake up and make the + pushing thread continue. We drop the event when we are not supposed to push lost + events downstream. + +2013-09-23 11:18:46 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/rtpmanager/gstrtpjitterbuffer.c: + rtpjitterbuffer: schedule lost event differently + Schedule the lost event by placing it inside the jitterbuffer with the seqnum + that was lost so that the pushing thread can interleave and push it properly. + +2013-09-23 11:17:34 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * tests/check/elements/rtpjitterbuffer.c: + tests: remove timeouts from check + Timeouts make the test unreliable and are not needed. + +2013-09-23 11:15:30 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/rtpmanager/rtpjitterbuffer.c: + rtpjitterbuffer: remove list debug + +2013-09-23 11:14:01 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/rtpmanager/gstrtpjitterbuffer.c: + * gst/rtpmanager/rtpjitterbuffer.h: + rtpjitterbuffer: add type to the item + So that the upper layer can know what data is contained in the item. + +2013-09-23 09:58:32 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/rtpmanager/gstrtpjitterbuffer.c: + * gst/rtpmanager/rtpjitterbuffer.c: + * gst/rtpmanager/rtpjitterbuffer.h: + rtpjitterbuffer: fix flush + Pass function to flush to properly free the queue items. + +2013-09-21 00:08:20 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/rtpmanager/rtpjitterbuffer.c: + rtpjitterbuffer: append seqnum -1 packets + +2013-09-20 23:48:20 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/rtpmanager/gstrtpjitterbuffer.c: + * gst/rtpmanager/rtpjitterbuffer.c: + * gst/rtpmanager/rtpjitterbuffer.h: + rtpjitterbuffer: use structure to hold packet information + Make the jitterbuffer operate on a structure containing all the packet + information. This avoids mapping the buffer multiple times just to get the RTP + information. It will also make it possible to store other miniobjects such as + events later. + +2013-09-20 17:48:52 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/rtpmanager/gstrtpjitterbuffer.c: + rtpjitterbuffer: update expected timer when possible + When we receive a packet and we have some missing packets, we can update their + estimated arrival times based on the timestamp difference. + +2013-09-20 17:18:27 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/rtpmanager/gstrtpjitterbuffer.c: + rtpjitterbuffer: fix order of timeout events + Improve the order of the timeout events, if there are timers with the same + timeout, we want to trigger the lowest seqnum first. For this we need to loop + over the complete array of timers to find the best one before triggering the + timeout. + +2013-09-20 16:58:38 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/rtpmanager/gstrtpjitterbuffer.c: + rtpjitterbuffer: send lost event before signaling next buffer + First send the lost event, then update the next_seqnum counter and then + send the signal to the pushing thread that it can retry to push a buffer. This + avoids pushing out buffers before the lost event is pushed. + +2013-09-20 15:35:25 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/rtpmanager/gstrtpjitterbuffer.c: + * gst/rtpmanager/rtpjitterbuffer.c: + * gst/rtpmanager/rtpjitterbuffer.h: + jitterbuffer: configure clock-rate on jitterbuffer + Add a get and setter to configure the clock-rate in the jitterbuffer instead of + passing it as an argument to the insert method. + +2013-09-20 12:29:39 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * tests/check/elements/rtpjitterbuffer.c: + tests: add test for packet delay and retransmission + +2013-09-20 12:27:26 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/rtpmanager/gstrtpjitterbuffer.c: + rtpjitterbuffer: add option to reset retransmission timers + +2013-09-20 12:25:43 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/rtpmanager/gstrtpjitterbuffer.c: + rtpjitterbuffer: stop the timer thread + The timeout code could release the lock so we need to check if we are allowed to + wait for the clock some more. + +2013-09-20 12:25:12 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/rtpmanager/gstrtpjitterbuffer.c: + rtpjitterbuffer: unlock only once + +2013-09-20 11:30:04 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * tests/check/elements/rtpjitterbuffer.c: + tests: check both PTS and DTS + +2013-09-20 10:55:03 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * tests/check/elements/rtpjitterbuffer.c: + tests: add unit-test for multiple missing packets + Check if multiple missing packets generate retransmission events and that the + retranmission requests are canceled when the missing packet arrives. + +2013-09-20 10:53:29 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/rtpmanager/gstrtpjitterbuffer.c: + rtpjitterbuffer: improve flush and shutdown + There is no need to unschedule the timer in flush-start, flush-stop will remove + the timers and unschedule. + Unschedule the current timer before attempting to join the timer thread. + +2013-09-20 10:43:53 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * tests/check/elements/rtpjitterbuffer.c: + tests: improve debug + +2013-09-20 10:42:27 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/rtpmanager/gstrtpjitterbuffer.c: + rtpjitterbuffer: set correct expected time + When we already have a timer for a packet, skip it but don't forget to adjust + the dts to the expected dts of the next packet. + +2013-09-20 10:41:59 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/rtpmanager/gstrtpjitterbuffer.c: + jitterbuffer: improve debug + +2013-09-19 16:55:25 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/alpha/gstalpha.c: + alpha: use POFFSET instead of OFFSET + Use the more correct POFFSET macro to get the offset of a component in its + plane. The offset macro gives the offset of the component relative to the start + of the frame. + +2013-09-21 18:46:29 +0200 Sebastian Dröge <slomo@circular-chaos.org> + + * gst/goom/mmx.h: + goom: Fix MMX assembly compilation with clang + clang does not want or need a clobber list for emms: + error: clobbers must be last on the x87 stack + Patch taken from the FreeBSD ports, provided by + Dan McGregor <dan.mcgregor@usask.ca> + +2013-09-20 16:16:57 +0200 Edward Hervey <edward@collabora.com> + + * common: + Automatic update of common submodule + From b613661 to 6b03ba7 + +2013-09-20 10:19:22 +0200 Sebastian Dröge <slomo@circular-chaos.org> + + * gst/matroska/matroska-demux.c: + matroska-demux: Make sure that subtitle buffers are \0-terminated + https://bugzilla.gnome.org/show_bug.cgi?id=707933 + +2013-09-17 12:17:54 +0200 Andoni Morales Alastruey <ylatuya@gmail.com> + + * gst/isomp4/gstqtmux.c: + qtmux: handle issues correctly when downstream is not seekable + The streamable property only make sense for fragmented formats. + For regular MP4, when downstream is not seekable we can't rewrite + the headers, so qtmux can only work with fast-start=TRUE, where + the headers are written finishing the file. + For fragmented MP4, when streamable is not seekable and the streamable + property is FALSE, we must enforce streamable=TRUE warning the user + about this change + https://bugzilla.gnome.org/show_bug.cgi?id=707242 + +2013-09-17 12:06:06 +0200 Andoni Morales Alastruey <ylatuya@gmail.com> + + * gst/isomp4/gstqtmux.c: + qtmux: make "streamable" TRUE as default + The most common use case for fragmented MP4 (Dash and Smooth Streaming) + is producing streamable content (even for VOD). streamable=FALSE would only + be used to generate fragmented MP4 with and index of MOOF's that could + be reproduced without a playlist/manifest + https://bugzilla.gnome.org/show_bug.cgi?id=707242 + +2013-09-17 12:01:30 +0200 Andoni Morales Alastruey <ylatuya@gmail.com> + + * gst/isomp4/gstqtmux.c: + qtmux: deprecate the streamable property for non-fragmented MP4 + The streamable property only makes sense for fragmented MP4. + https://bugzilla.gnome.org/show_bug.cgi?id=707242 + +2013-09-19 17:08:19 -0400 Olivier Crête <olivier.crete@collabora.com> + + * sys/v4l2/gstv4l2bufferpool.h: + v4l2: Remove commented out line + +2013-09-19 18:43:08 +0100 Tim-Philipp Müller <tim@centricular.net> + + * common: + Automatic update of common submodule + From 74a6857 to b613661 + +2013-09-19 17:35:27 +0100 Tim-Philipp Müller <tim@centricular.net> + + * autogen.sh: + * common: + Automatic update of common submodule + From 098c0d7 to 74a6857 + +2013-09-19 16:50:44 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/alpha/gstalpha.c: + alpha: don't assume planar formats have just 1 block + Don't assume planar formats have just one memory block with the data but use the + macros to access the right memory block where a component can be found. + +2013-09-19 14:14:52 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * tests/check/elements/rtpjitterbuffer.c: + tests: add retransmission jitterbuffer test + Store both DTS and PTS on buffers. + Make a queue for srcpad events. + Activate pads after linking so that we don't get RECONFIGURE events. + Add test for retransmission. + +2013-09-19 14:12:18 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/rtpmanager/gstrtpjitterbuffer.c: + rtpjitterbuffer: keep delay as a separate variable in timer + Keep a separate delay in the timer so that we still know the original timestamp + of the packet that this timer refers to. We can then place the correct + running-time in the Retransmission event. + +2013-09-19 14:08:56 +0200 Wim Taymans <wim.taymans@collabora.co.uk> + + * gst/rtpmanager/gstrtpjitterbuffer.c: + rtpjitterbuffer: fix writability of properties + +2013-09-19 11:34:57 +0200 Sebastian Dröge <slomo@circular-chaos.org> + + * configure.ac: + Back to development + === release 1.1.90 === -2013-09-19 Sebastian Dröge <sebastian.droege@collabora.co.uk> +2013-09-19 10:50:23 +0200 Sebastian Dröge <slomo@circular-chaos.org> + * ChangeLog: + * NEWS: + * RELEASE: * configure.ac: - releasing 1.1.90 + * 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.1.90 + +2013-09-19 10:21:42 +0200 Sebastian Dröge <slomo@circular-chaos.org> + + * 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 2013-09-19 09:45:18 +0200 Sebastian Dröge <slomo@circular-chaos.org> diff --git a/NEWS b/NEWS index b1d92ae85cd61edd0043fa6021f97c3f9d85f343..56255fa9f714a9ba69f089c540918b0a39fd105d 100644 --- a/NEWS +++ b/NEWS @@ -1,2 +1,123 @@ -This is GStreamer Good Plugins 1.1.90 +This is GStreamer Good Plugins 1.2.0 + +Changes since 1.0: + +New API: + • GstContext negotiation / sharing / announcing for sharing a + generic context between elements, e.g. a display handle + • GL texture upload conversion meta for allowing different + buffer types to be converted to an OpenGL texture + • GstCapsFeatures as extension to GstCaps for allowing the + negotiation of specific memory or meta requirements between + elements + • GstMemory flags for contiguous and non-mappable memory + • The stream-start event has optional flags now, e.g. for signalling + sparse streams + • The stream-start even has an optional group-id field now to signal + all streams that should be played together + • Allocators library in gst-plugins-base, currently only with generic + dmabuf memory support + • insertbin library for easier handling of dynamically linked + pipelines (in -bad for now) + • EGL helper library (in -bad for now) + • MPEG-TS data structure library (in -bad for now) + • New GstVideoRegionOfInterestMeta to describe a region of interest on + video frames. + • GstVideoDecoder/Encoder has new ::flush() vfunc to replace the + ill-defined ::reset() vfunc. + • The URI query allows to query the redirected URI now. + +Major changes: + • New tool: gst-play-1.0 in gst-plugins-base for basic playback + testing on the command line. + • New plugins: + ∘ mssdemux for Microsoft Smooth Streaming + ∘ dashdemux for DASH adaptive streaming protocol + ∘ bluez for interaction with Bluetooth devices + ∘ openjpeg for JPEG2000 decoding and encoding + ∘ daala for experimental Daala decoding and encoding + ∘ vpx plugin has experimental VP9 decoding and encoding support + ∘ webp plugin for WebP decoding (encoding to be added later) + ∘ Various others: yadif, srtp, sbc, fluidsynth, midiparse, + mfc, ivtv, accuraterip and audiofxbad + + • Moved plugins: + ∘ dtmf, vp8rtp, scaletempo and rtpmux plugins are in + gst-plugins-good now + + • Video: + ∘ Fix handling of interlaced video in converters such as videoscale + and videoconvert (e.g. scale both fields independently) + ∘ videoconvert will try harder to minimise quality losses when + conversion is necessary + ∘ The experimental GstSurfaceConverter, GstSurfaceMeta and + GstVideoContext APIs from the (confusingly-named) + libgstbasevideo-1.0 library in gst-plugins-bad have now been + removed and been replaced by new APIs in GStreamer Core and + gst-plugins-base (see above). Since that was all that was left in + this library, the entire experimental libgstbasevideo-1.0 library + has been removed from gst-plugins-bad + ∘ Chroma subsampling and chroma siting conversion is better handled + in videoconvert and the support for interlaced video was improved. + ∘ New pinwheel and spoke patterns in videotestsrc + ∘ videomixer can now accept different video formats on its sinkpads + and converts to a common format during mixing + + • Audio: + ∘ audioconvert will try harder to minimise quality losses when + conversion is necessary + ∘ adder now allows muting/unmuting of its input streams, and also + per-input stream volume + ∘ pulseaudio elements can switch between devices during playback now + ∘ aacparse can convert between ADTSâ†â†’RAW + + • Platform specific changes: + ∘ Caps, events, etc. are now printed in the GStreamer debug logs + with their content instead of just the pointer address even on + non-glibc platforms (e.g. Windows, OSX, Android). + ∘ Network elements (UDP/TCP) now work better with platforms, + where IPv6 sockets can't handle IPv4 (e.g. Windows) + ∘ Linux/BSD: v4l2 had many improvements and cleanups + + • Other changes: + ∘ gst-libav now uses libav 9 + ∘ Static linking of plugins is supported now (also in 1.0.7) + ∘ rtspsrc: add support for NetClientClock: when the server suggests a + GstNetTimeProvider in the SDP, set up a GstNetClientClock that + slaves to the remote clock and suggest this clock in provide_clock. + Simplifies synchronized playback of a resource from an RTSP server. + gst-rtsp-server now supports adding this to the SDP and can provide + a network clock + ∘ RTP retransmission / NACK support and big RTP jitterbuffer improvements + ∘ SRTP and DTLS support + ∘ Changes to many elements and core to use the correct sticky event + order and also not lose any important sticky events during flushing + ∘ >1000 fixed bug reports, and many other bug fixes and other + improvements everywhere that had no bug report + +Things to look out for: + • Single header includes for all libraries, e.g. #include + <gst/video/video.h> - this was needed for some bindings. + • Stricter (correct) caps subset checking in some cases where this was + not correct before. Caps will now always fail to be a compatible + subset of another set of caps if the subset caps are missing some + fields that the superset caps have. This might lead to not-negotiated + errors if caps are incomplete now. However, it also prevents possible + data corruption caused by piping data formatted in an + incompatible/unexpected way into some elements. Check your h264 caps + for stream-format and alignment fields and AAC caps for the + stream-format field. This change will also be included in the next + stable 1.0.8 release. + • Stricter checking for missing events and correct sticky event order + (stream-start, caps, segment) in some places; this is not enabled in + stable releases by default, but you may get warnings when using git + builds, development releases or when compiling with + -UG_DISABLE_ASSERT in CFLAGS + • x264enc now outputs data in byte-stream by default if downstream has + ANY caps (e.g. appsink without caps set, filesink, udpsink, + tcpserversink etc.) + • The MPEG TS demuxer posts messages contain the PMT, PAT, etc. in a + different format now. This new format uses the data structures from + the new MPEGTS library + • The GstContext API has changed between 1.1.4 and 1.1.90 diff --git a/RELEASE b/RELEASE index ed805e25bf2de3310e337f7678a5e6a9cfd4d137..3a80727ac431fc051906c68de2f9f0f4fb389c14 100644 --- a/RELEASE +++ b/RELEASE @@ -1,8 +1,8 @@ -Release notes for GStreamer Good Plugins 1.1.90 +Release notes for GStreamer Good Plugins 1.2.0 -The GStreamer team is proud to announce a new bug-fix release +The GStreamer team is proud to announce a new feature release in the 1.x stable series of the core of the GStreamer streaming media framework. @@ -57,24 +57,11 @@ contains a set of codecs plugins based on libav (formerly gst-ffmpeg) Bugs fixed in this release - * 646963 : rtpmanager: Only update last_rtcp_send_time when actually sending a report - * 687657 : rtpsession: Demux RTCP buffers from the RTP stream - * 695090 : rganalysis: fix tests - * 702004 : qtdemux: add support for the avc3 sample entry format of the AVC file format - * 704950 : videomixer: add colorspace conversion - * 705371 : souphttpsrc: Does network operations from the state change thread - * 706955 : autoaudiosink/autovideosink: Introduce " sync " property - * 707042 : udpsrc binds to INADDR_ANY instead of multicast group address - * 707303 : flacenc: 'Got data flow before stream-start event' warnings - * 707340 : qtmux: should NOT use PTS if DTS is missing - * 707411 : qtmux: what is purpose of MAX_TOLERATED_LATENESS? - * 707530 : qtdemux: Handle segments correctly in push mode seeks - * 707688 : matroskademux: leaking buffer and caps when parsing attachments - * 707734 : rtp: add payloader and depayloader for 24bit raw audio - * 707758 : v4l2: Incorrect UV plane stride value for NV12/NV21 formats - * 707886 : videomixer: build fails due to unrenamed files if orc is not installed + * 706083 : v4l2src: UVC Allocated buffers wrapped in GstBuffer get orphaned by GstBuffer API + * 707242 : qtmux: streamable and faststart property have no effect * 707933 : matroskademux: Wrong UTF8 detection causes wrong detection of subtitle encoding - * 708131 : videomixer: undefined reference to `videomixer_video_convert_orc_convert_I420_BGRA' + * 708501 : osxvideosink: fix segfault releasing the element + * 708622 : rtpjitterbuffer: fix various regressions ==== Download ==== @@ -111,20 +98,11 @@ subscribe to the gstreamer-devel list. Contributors to this release - * Alex Ashley - * Andreea Fulger - * Bernhard Miller - * Christoph Reiter - * David Holroyd - * Jan Schmidt - * Matej Knopp - * Mathieu Duponchelle + * Andoni Morales Alastruey + * Edward Hervey * Olivier Crête - * Rico Tzschichholz + * Robert Krakora * Sebastian Dröge - * Seán de Búrca - * Thiago Santos - * Thibault Saunier * Tim-Philipp Müller * Wim Taymans  \ No newline at end of file diff --git a/autogen.sh b/autogen.sh index 95e1bfaefed95cdac832c3eff6ec86f48fdf4aec..93f88d49b01ae8deab0c4146d38f3987eacc0386 100755 --- a/autogen.sh +++ b/autogen.sh @@ -88,12 +88,14 @@ toplevel_check $srcfile # autopoint # first remove patch if necessary, then run autopoint, then reapply -if test -f po/Makefile.in.in; -then - patch -p0 -R --forward < common/gettext.patch +if test -d po ; then + if test -f po/Makefile.in.in; + then + patch -p0 -R --forward < common/gettext.patch + fi + tool_run "$autopoint" "--force" "patch -p0 < common/gettext.patch" + patch -p0 < common/gettext.patch fi -tool_run "$autopoint" "--force" "patch -p0 < common/gettext.patch" -patch -p0 < common/gettext.patch # aclocal if test -f acinclude.m4; then rm acinclude.m4; fi diff --git a/common/check.mak b/common/check.mak index 285876cb4dce24c818db0711d8e9c0076160c3b2..611546a2785a193ef13a9c6774e10616fd49734d 100644 --- a/common/check.mak +++ b/common/check.mak @@ -53,6 +53,7 @@ LOOPS ?= 10 $(VALGRIND_PATH) -q \ $(foreach s,$(SUPPRESSIONS),--suppressions=$(s)) \ --tool=memcheck --leak-check=full --trace-children=yes \ + --show-possibly-lost=no \ --leak-resolution=high --num-callers=20 \ ./$* 2>&1 | tee valgrind.log @if grep "==" valgrind.log > /dev/null 2>&1; then \ @@ -60,7 +61,7 @@ LOOPS ?= 10 exit 1; \ fi @rm valgrind.log - + # valgrind any given test and generate suppressions for it %.valgrind.gen-suppressions: % @$(TESTS_ENVIRONMENT) \ @@ -70,10 +71,11 @@ LOOPS ?= 10 $(VALGRIND_PATH) -q \ $(foreach s,$(SUPPRESSIONS),--suppressions=$(s)) \ --tool=memcheck --leak-check=full --trace-children=yes \ + --show-possibly-lost=no \ --leak-resolution=high --num-callers=20 \ --gen-suppressions=all \ ./$* 2>&1 | tee suppressions.log - + # valgrind torture any given test %.valgrind-torture: % @for i in `seq 1 $(LOOPS)`; do \ diff --git a/common/extract-release-date-from-doap-file b/common/extract-release-date-from-doap-file index f2bc418cd1651da3c9a5dcf7b302aa9ef9ce5ea4..f57e30742a82ddac690569380f99b34f675c70c7 100755 --- a/common/extract-release-date-from-doap-file +++ b/common/extract-release-date-from-doap-file @@ -18,12 +18,12 @@ fi awk 'BEGIN {x=0} { -if ($0~"<release>") {x=1; chunk=""} +if ( $0 ~ /<release>/ ) {x=1; chunk=""} if (x==1) { - if ($0~"<revision>") { chunk = chunk $0 } - if ($0~"<created>") { chunk = chunk $0 } + if ($0 ~ /<revision>/) { chunk = chunk $0 } + if ($0 ~ /<created>/) { chunk = chunk $0 } } -if ($0~"</release>") {x=0; print chunk} +if ($0 ~ /<\/release>/) {x=0; print chunk} }' < "$2" | \ \ grep '<revision>'"$1"'</revision>' | \ diff --git a/common/gst.supp b/common/gst.supp index 05ecbb9d6599198943fc66bcb85f5322f07e503e..8a3617fe7ea2ca4aad8019959ba51b5400e0e5bb 100644 --- a/common/gst.supp +++ b/common/gst.supp @@ -91,6 +91,14 @@ fun:pthread_create@@* } +{ + <tls> + Memcheck:Leak + fun:calloc + fun:allocate_dtv + fun:_dl_allocate_tls +} + # I get an extra stack entry on x86/dapper { <tls> diff --git a/common/m4/gst-args.m4 b/common/m4/gst-args.m4 index 4872e3c0984c14f8a520d3f7eff26e3a2a1ad5b0..b478c824c226e7c4c0d6391f093e26a2b58220eb 100644 --- a/common/m4/gst-args.m4 +++ b/common/m4/gst-args.m4 @@ -337,6 +337,7 @@ AC_DEFUN([AG_GST_ARG_ENABLE_BROKEN], dnl allow people (or build tools) to override default behaviour dnl for fatal compiler warnings +dnl Enable fatal warnings by default only for development versions AC_DEFUN([AG_GST_ARG_DISABLE_FATAL_WARNINGS], [ AC_ARG_ENABLE(fatal-warnings, @@ -349,5 +350,11 @@ AC_DEFUN([AG_GST_ARG_DISABLE_FATAL_WARNINGS], *) AC_MSG_ERROR(bad value ${enableval} for --disable-fatal-warnings) ;; esac ], - [FATAL_WARNINGS=$GST_GIT]) dnl Default value + [ + if test "x`expr $PACKAGE_VERSION_MINOR % 2`" = "x1" -a "x`expr $PACKAGE_VERSION_MICRO '<' 90`" = "x1"; then + FATAL_WARNINGS=yes + else + FATAL_WARNINGS=no + fi + ]) ]) diff --git a/common/m4/gst-glib2.m4 b/common/m4/gst-glib2.m4 index 9a3a92339e2fb24e89a58366dc83989ef30a3c32..0b9273462613d21f6a0f577559ea7b4bdfbc2fa5 100644 --- a/common/m4/gst-glib2.m4 +++ b/common/m4/gst-glib2.m4 @@ -27,8 +27,8 @@ AC_DEFUN([AG_GST_GLIB_CHECK], dnl when using threading primitives) GLIB_EXTRA_CFLAGS="$GLIB_EXTRA_CFLAGS -DG_THREADS_MANDATORY" - dnl Define G_DISABLE_DEPRECATED for GIT versions - if test "x$PACKAGE_VERSION_NANO" = "x1" -o "x`expr $PACKAGE_VERSION_MINOR % 2`" = "x1"; then + dnl Define G_DISABLE_DEPRECATED for development versions + if test "x`expr $PACKAGE_VERSION_MINOR % 2`" = "x1" -a "x`expr $PACKAGE_VERSION_MICRO '<' 90`" = "x1"; then GLIB_EXTRA_CFLAGS="$GLIB_EXTRA_CFLAGS -DG_DISABLE_DEPRECATED" fi @@ -38,8 +38,8 @@ AC_DEFUN([AG_GST_GLIB_CHECK], [enable_gobject_cast_checks=auto]) if test "x$enable_gobject_cast_checks" = "xauto"; then - dnl For releases, turn off the cast checks - if test "x$PACKAGE_VERSION_NANO" = "x1" -o "x`expr $PACKAGE_VERSION_MINOR % 2`" = "x1"; then + dnl Turn on cast checks only for development versions + if test "x`expr $PACKAGE_VERSION_MINOR % 2`" = "x1" -a "x`expr $PACKAGE_VERSION_MICRO '<' 90`" = "x1"; then enable_gobject_cast_checks=yes else enable_gobject_cast_checks=no @@ -56,8 +56,8 @@ AC_DEFUN([AG_GST_GLIB_CHECK], [enable_glib_assertions=auto]) if test "x$enable_glib_assertions" = "xauto"; then - dnl For releases, turn off the assertions - if test "x$PACKAGE_VERSION_NANO" = "x1" -o "x`expr $PACKAGE_VERSION_MINOR % 2`" = "x1"; then + dnl Enable assertions only for development versions + if test "x`expr $PACKAGE_VERSION_MINOR % 2`" = "x1" -a "x`expr $PACKAGE_VERSION_MICRO '<' 90`" = "x1"; then enable_glib_assertions=yes else enable_glib_assertions=no diff --git a/common/m4/gst-package-release-datetime.m4 b/common/m4/gst-package-release-datetime.m4 index 126919bc7ad5cab2c6ecf5fef4236f77ec72f822..bc885e37f3cc22e220d05e104d616aca8f837ca4 100644 --- a/common/m4/gst-package-release-datetime.m4 +++ b/common/m4/gst-package-release-datetime.m4 @@ -33,7 +33,7 @@ AC_DEFUN([AG_GST_SET_PACKAGE_RELEASE_DATETIME], elif test "x$1" = "xyes"; then dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([no], ["YYYY-MM-DD"]) dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([no], [DOAP-FILE], [RELEASE-VERSION]) - if ( echo $1 | grep -e '^20[1-9][0-9]-[0-1][0-9]-[0-3][0-9]' >/dev/null ) ; then + if ( echo $1 | grep '^20[1-9][0-9]-[0-1][0-9]-[0-3][0-9]' >/dev/null ) ; then GST_PACKAGE_RELEASE_DATETIME=$1 else dnl we assume the .doap file contains the date as YYYY-MM-DD @@ -47,7 +47,7 @@ AC_DEFUN([AG_GST_SET_PACKAGE_RELEASE_DATETIME], fi fi dnl AG_GST_SET_PACKAGE_RELEASE_DATETIME([YYYY-MM-DD]) - elif ( echo $1 | grep -e '^20[1-9][0-9]-[0-1][0-9]-[0-3][0-9]' >/dev/null ) ; then + elif ( echo $1 | grep '^20[1-9][0-9]-[0-1][0-9]-[0-3][0-9]' >/dev/null ) ; then GST_PACKAGE_RELEASE_DATETIME=$1 else AC_MSG_WARN([SET_PACKAGE_RELEASE_DATETIME: invalid first argument]) diff --git a/configure b/configure index dd721b1422b2b77356f50519e0fc140f8bbfa129..31b57849b12f48d8587d08339ed47a5f0b1492d9 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.1.90. +# Generated by GNU Autoconf 2.69 for GStreamer Good Plug-ins 1.2.0. # # Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer>. # @@ -591,8 +591,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='GStreamer Good Plug-ins' PACKAGE_TARNAME='gst-plugins-good' -PACKAGE_VERSION='1.1.90' -PACKAGE_STRING='GStreamer Good Plug-ins 1.1.90' +PACKAGE_VERSION='1.2.0' +PACKAGE_STRING='GStreamer Good Plug-ins 1.2.0' PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer' PACKAGE_URL='' @@ -1945,7 +1945,7 @@ if test "$ac_init_help" = "long"; then # 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.1.90 to adapt to many kinds of systems. +\`configure' configures GStreamer Good Plug-ins 1.2.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -2021,7 +2021,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of GStreamer Good Plug-ins 1.1.90:";; + short | recursive ) echo "Configuration of GStreamer Good Plug-ins 1.2.0:";; esac cat <<\_ACEOF @@ -2381,7 +2381,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -GStreamer Good Plug-ins configure 1.1.90 +GStreamer Good Plug-ins configure 1.2.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -3192,7 +3192,7 @@ cat >config.log <<_ACEOF 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.1.90, which was +It was created by GStreamer Good Plug-ins $as_me 1.2.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -4174,7 +4174,7 @@ fi # Define the identity of the package. PACKAGE='gst-plugins-good' - VERSION='1.1.90' + VERSION='1.2.0' cat >>confdefs.h <<_ACEOF @@ -4384,9 +4384,9 @@ END fi - PACKAGE_VERSION_MAJOR=$(echo 1.1.90 | cut -d'.' -f1) - PACKAGE_VERSION_MINOR=$(echo 1.1.90 | cut -d'.' -f2) - PACKAGE_VERSION_MICRO=$(echo 1.1.90 | cut -d'.' -f3) + PACKAGE_VERSION_MAJOR=$(echo 1.2.0 | cut -d'.' -f1) + PACKAGE_VERSION_MINOR=$(echo 1.2.0 | cut -d'.' -f2) + PACKAGE_VERSION_MICRO=$(echo 1.2.0 | cut -d'.' -f3) @@ -4397,7 +4397,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking nano version" >&5 $as_echo_n "checking nano version... " >&6; } - NANO=$(echo 1.1.90 | cut -d'.' -f4) + NANO=$(echo 1.2.0 | cut -d'.' -f4) if test x"$NANO" = x || test "x$NANO" = "x0" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: 0 (release)" >&5 @@ -9047,10 +9047,10 @@ fi done - GST_CURRENT=190 + GST_CURRENT=200 GST_REVISION=0 - GST_AGE=190 - GST_LIBVERSION=190:0:190 + GST_AGE=200 + GST_LIBVERSION=200:0:200 @@ -13375,8 +13375,8 @@ CC="$lt_save_CC" -GST_REQ=1.1.90 -GSTPB_REQ=1.1.90 +GST_REQ=1.2.0 +GSTPB_REQ=1.2.0 @@ -15411,11 +15411,18 @@ if test "${enable_fatal_warnings+set}" = set; then : esac else - FATAL_WARNINGS=$GST_GIT + + if test "x`expr $PACKAGE_VERSION_MINOR % 2`" = "x1" -a "x`expr $PACKAGE_VERSION_MICRO '<' 90`" = "x1"; then + FATAL_WARNINGS=yes + else + FATAL_WARNINGS=no + fi + fi + # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : enableval=$enable_debug; @@ -24133,7 +24140,7 @@ fi GLIB_EXTRA_CFLAGS="$GLIB_EXTRA_CFLAGS -DG_THREADS_MANDATORY" - if test "x$PACKAGE_VERSION_NANO" = "x1" -o "x`expr $PACKAGE_VERSION_MINOR % 2`" = "x1"; then + if test "x`expr $PACKAGE_VERSION_MINOR % 2`" = "x1" -a "x`expr $PACKAGE_VERSION_MICRO '<' 90`" = "x1"; then GLIB_EXTRA_CFLAGS="$GLIB_EXTRA_CFLAGS -DG_DISABLE_DEPRECATED" fi @@ -24146,7 +24153,7 @@ fi if test "x$enable_gobject_cast_checks" = "xauto"; then - if test "x$PACKAGE_VERSION_NANO" = "x1" -o "x`expr $PACKAGE_VERSION_MINOR % 2`" = "x1"; then + if test "x`expr $PACKAGE_VERSION_MINOR % 2`" = "x1" -a "x`expr $PACKAGE_VERSION_MICRO '<' 90`" = "x1"; then enable_gobject_cast_checks=yes else enable_gobject_cast_checks=no @@ -24166,7 +24173,7 @@ fi if test "x$enable_glib_assertions" = "xauto"; then - if test "x$PACKAGE_VERSION_NANO" = "x1" -o "x`expr $PACKAGE_VERSION_MINOR % 2`" = "x1"; then + if test "x`expr $PACKAGE_VERSION_MINOR % 2`" = "x1" -a "x`expr $PACKAGE_VERSION_MICRO '<' 90`" = "x1"; then enable_glib_assertions=yes else enable_glib_assertions=no @@ -25430,7 +25437,7 @@ $as_echo "$as_me: Using $PLUGINDIR as the plugin install location" >&6;} if test "xyes" = "xno" -o "xyes" = "x"; then GST_PACKAGE_RELEASE_DATETIME=`date -u "+%Y-%m-%dT%H:%MZ"` elif test "xyes" = "xyes"; then - if ( echo yes | grep -e '^201-90-9-0-10-9-0-30-9' >/dev/null ) ; then + if ( echo yes | grep '^201-90-9-0-10-9-0-30-9' >/dev/null ) ; then GST_PACKAGE_RELEASE_DATETIME=yes else YYYY_MM_DD=`sh "${srcdir}/common/extract-release-date-from-doap-file" $PACKAGE_VERSION_MAJOR.$PACKAGE_VERSION_MINOR.$PACKAGE_VERSION_MICRO "${srcdir}/gst-plugins-good.doap" `; @@ -25442,7 +25449,7 @@ $as_echo "$as_me: Using $PLUGINDIR as the plugin install location" >&6;} GST_PACKAGE_RELEASE_DATETIME="" fi fi - elif ( echo yes | grep -e '^201-90-9-0-10-9-0-30-9' >/dev/null ) ; then + elif ( echo yes | grep '^201-90-9-0-10-9-0-30-9' >/dev/null ) ; then GST_PACKAGE_RELEASE_DATETIME=yes else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: SET_PACKAGE_RELEASE_DATETIME: invalid first argument" >&5 @@ -25469,7 +25476,7 @@ _ACEOF if test "xno" = "xno" -o "xno" = "x"; then GST_PACKAGE_RELEASE_DATETIME=`date -u "+%Y-%m-%dT%H:%MZ"` elif test "xno" = "xyes"; then - if ( echo no | grep -e '^201-90-9-0-10-9-0-30-9' >/dev/null ) ; then + if ( echo no | grep '^201-90-9-0-10-9-0-30-9' >/dev/null ) ; then GST_PACKAGE_RELEASE_DATETIME=no else YYYY_MM_DD=`sh "${srcdir}/common/extract-release-date-from-doap-file" `; @@ -25481,7 +25488,7 @@ _ACEOF GST_PACKAGE_RELEASE_DATETIME="" fi fi - elif ( echo no | grep -e '^201-90-9-0-10-9-0-30-9' >/dev/null ) ; then + elif ( echo no | grep '^201-90-9-0-10-9-0-30-9' >/dev/null ) ; then GST_PACKAGE_RELEASE_DATETIME=no else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: SET_PACKAGE_RELEASE_DATETIME: invalid first argument" >&5 @@ -37782,7 +37789,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # 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.1.90, which was +This file was extended by GStreamer Good Plug-ins $as_me 1.2.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -37848,7 +37855,7 @@ _ACEOF 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.1.90 +GStreamer Good Plug-ins config.status 1.2.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 1c8c53d6927d66ff641d347f8234b7678c3a76eb..86807f5c17cd5708301570641c00823100a9e885 100644 --- a/configure.ac +++ b/configure.ac @@ -5,7 +5,7 @@ dnl please read gstreamer/docs/random/autotools before changing this file 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.1.90],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gst-plugins-good]) +AC_INIT([GStreamer Good Plug-ins],[1.2.0],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gst-plugins-good]) AG_GST_INIT @@ -43,11 +43,11 @@ AC_DEFINE_UNQUOTED(GST_API_VERSION, "$GST_API_VERSION", [GStreamer API Version]) AG_GST_LIBTOOL_PREPARE -AS_LIBTOOL(GST, 190, 0, 190) +AS_LIBTOOL(GST, 200, 0, 200) dnl *** required versions of GStreamer stuff *** -GST_REQ=1.1.90 -GSTPB_REQ=1.1.90 +GST_REQ=1.2.0 +GSTPB_REQ=1.2.0 dnl *** autotools stuff **** diff --git a/docs/plugins/gst-plugins-good-plugins.args b/docs/plugins/gst-plugins-good-plugins.args index 57c382c2de6946c437e0c0819231bdebe41d2cd6..d91b2c8cf903f5377320e21ba6ff90f98163b57b 100644 --- a/docs/plugins/gst-plugins-good-plugins.args +++ b/docs/plugins/gst-plugins-good-plugins.args @@ -21332,7 +21332,7 @@ <NAME>GstRtpJitterBuffer::rtx-delay</NAME> <TYPE>gint</TYPE> <RANGE>>= G_MAXULONG</RANGE> -<FLAGS>r</FLAGS> +<FLAGS>rw</FLAGS> <NICK>RTX Delay</NICK> <BLURB>Extra time in ms to wait before sending retransmission event (-1 automatic).</BLURB> <DEFAULT>20</DEFAULT> @@ -21342,7 +21342,7 @@ <NAME>GstRtpJitterBuffer::rtx-delay-reorder</NAME> <TYPE>gint</TYPE> <RANGE>>= G_MAXULONG</RANGE> -<FLAGS>r</FLAGS> +<FLAGS>rw</FLAGS> <NICK>RTX Delay Reorder</NICK> <BLURB>Sending retransmission event when this much reordering (-1 automatic).</BLURB> <DEFAULT>3</DEFAULT> @@ -21352,7 +21352,7 @@ <NAME>GstRtpJitterBuffer::rtx-retry-period</NAME> <TYPE>gint</TYPE> <RANGE>>= G_MAXULONG</RANGE> -<FLAGS>r</FLAGS> +<FLAGS>rw</FLAGS> <NICK>RTX Retry Period</NICK> <BLURB>Try to get a retransmission for this many ms (-1 automatic).</BLURB> <DEFAULT>160</DEFAULT> @@ -21362,7 +21362,7 @@ <NAME>GstRtpJitterBuffer::rtx-retry-timeout</NAME> <TYPE>gint</TYPE> <RANGE>>= G_MAXULONG</RANGE> -<FLAGS>r</FLAGS> +<FLAGS>rw</FLAGS> <NICK>RTX Retry Timeout</NICK> <BLURB>Retry sending a transmission event after this timeout in ms (-1 automatic).</BLURB> <DEFAULT>40</DEFAULT> @@ -22114,7 +22114,7 @@ <RANGE></RANGE> <FLAGS>rwx</FLAGS> <NICK>Streamable</NICK> -<BLURB>If set to true, the output should be as if it is to be streamed and hence no indexes written or duration written.</BLURB> +<BLURB>If set to true, the output should be as if it is to be streamed and hence no indexes written or duration written. (DEPRECATED, only valid for fragmented MP4).</BLURB> <DEFAULT>FALSE</DEFAULT> </ARG> @@ -22244,7 +22244,7 @@ <RANGE></RANGE> <FLAGS>rwx</FLAGS> <NICK>Streamable</NICK> -<BLURB>If set to true, the output should be as if it is to be streamed and hence no indexes written or duration written.</BLURB> +<BLURB>If set to true, the output should be as if it is to be streamed and hence no indexes written or duration written. (DEPRECATED, only valid for fragmented MP4).</BLURB> <DEFAULT>FALSE</DEFAULT> </ARG> @@ -22334,7 +22334,7 @@ <RANGE></RANGE> <FLAGS>rwx</FLAGS> <NICK>Streamable</NICK> -<BLURB>If set to true, the output should be as if it is to be streamed and hence no indexes written or duration written.</BLURB> +<BLURB>If set to true, the output should be as if it is to be streamed and hence no indexes written or duration written. (DEPRECATED, only valid for fragmented MP4).</BLURB> <DEFAULT>FALSE</DEFAULT> </ARG> @@ -22425,7 +22425,7 @@ <FLAGS>rwx</FLAGS> <NICK>Streamable</NICK> <BLURB>If set to true, the output should be as if it is to be streamed and hence no indexes written or duration written.</BLURB> -<DEFAULT>FALSE</DEFAULT> +<DEFAULT>TRUE</DEFAULT> </ARG> <ARG> @@ -22604,7 +22604,7 @@ <RANGE></RANGE> <FLAGS>rwx</FLAGS> <NICK>Streamable</NICK> -<BLURB>If set to true, the output should be as if it is to be streamed and hence no indexes written or duration written.</BLURB> +<BLURB>If set to true, the output should be as if it is to be streamed and hence no indexes written or duration written. (DEPRECATED, only valid for fragmented MP4).</BLURB> <DEFAULT>FALSE</DEFAULT> </ARG> diff --git a/docs/plugins/gst-plugins-good-plugins.hierarchy b/docs/plugins/gst-plugins-good-plugins.hierarchy index 1818d7c3b67e384f3728c222e821478153bf304c..b612c81134f4b790efef35bfd283fd9d7629e7eb 100644 --- a/docs/plugins/gst-plugins-good-plugins.hierarchy +++ b/docs/plugins/gst-plugins-good-plugins.hierarchy @@ -169,7 +169,6 @@ GObject GstMatroskaMux GstWebMMux GstMatroskaParse - GstMonoscope GstMultipartDemux GstMultipartMux GstQTDemux 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 594ebc49cdcbd2e759c697387760e55bd49c89c5..0b76d5c219604183344cb223fb9fdae861818851 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-1.0.devhelp2 +++ b/docs/plugins/html/gst-plugins-good-plugins-1.0.devhelp2 @@ -725,10 +725,10 @@ <keyword type="property" name="The "presentation-time" property" link="gst-plugins-good-plugins-mj2mux.html#GstMJ2Mux--presentation-time"/> <keyword type="property" name="The "streamable" property" link="gst-plugins-good-plugins-mj2mux.html#GstMJ2Mux--streamable"/> <keyword type="property" name="The "trak-timescale" property" link="gst-plugins-good-plugins-mj2mux.html#GstMJ2Mux--trak-timescale"/> - <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-monoscope.html#id-1.2.78.5.3.1"/> - <keyword type="" name="Element Information" link="gst-plugins-good-plugins-monoscope.html#id-1.2.78.5.4.1"/> - <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-monoscope.html#id-1.2.78.5.4.2"/> - <keyword type="struct" name="struct GstMonoscope" link="gst-plugins-good-plugins-monoscope.html#GstMonoscope-struct"/> + <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-monoscope.html#id-1.2.78.4.3.1"/> + <keyword type="" name="Element Information" link="gst-plugins-good-plugins-monoscope.html#id-1.2.78.4.4.1"/> + <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-monoscope.html#id-1.2.78.4.4.2"/> + <keyword type="struct" name="struct GstMonoscope" link="gst-plugins-good-plugins-monoscope.html#GstMonoscope"/> <keyword type="" name="Example launch line" link="gst-plugins-good-plugins-mpegaudioparse.html#id-1.2.79.5.3.1"/> <keyword type="" name="Element Information" link="gst-plugins-good-plugins-mpegaudioparse.html#id-1.2.79.5.4.1"/> <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-mpegaudioparse.html#id-1.2.79.5.4.2"/> @@ -1113,8 +1113,9 @@ <keyword type="property" name="The "ssrc" property" link="gst-plugins-good-plugins-rtpdtmfsrc.html#GstRTPDTMFSrc--ssrc"/> <keyword type="property" name="The "timestamp" property" link="gst-plugins-good-plugins-rtpdtmfsrc.html#GstRTPDTMFSrc--timestamp"/> <keyword type="property" name="The "timestamp-offset" property" link="gst-plugins-good-plugins-rtpdtmfsrc.html#GstRTPDTMFSrc--timestamp-offset"/> - <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpjitterbuffer.html#id-1.2.127.7.2.1"/> - <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpjitterbuffer.html#id-1.2.127.7.2.2"/> + <keyword type="" name="Example pipelines" link="gst-plugins-good-plugins-rtpjitterbuffer.html#id-1.2.127.7.13.1"/> + <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpjitterbuffer.html#id-1.2.127.7.15.1"/> + <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpjitterbuffer.html#id-1.2.127.7.15.2"/> <keyword type="struct" name="struct GstRtpJitterBuffer" link="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer-struct"/> <keyword type="property" name="The "do-lost" property" link="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer--do-lost"/> <keyword type="property" name="The "drop-on-latency" property" link="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer--drop-on-latency"/> @@ -1140,15 +1141,17 @@ <keyword type="property" name="The "seqnum-offset" property" link="gst-plugins-good-plugins-rtpmux.html#GstRTPMux--seqnum-offset"/> <keyword type="property" name="The "ssrc" property" link="gst-plugins-good-plugins-rtpmux.html#GstRTPMux--ssrc"/> <keyword type="property" name="The "timestamp-offset" property" link="gst-plugins-good-plugins-rtpmux.html#GstRTPMux--timestamp-offset"/> - <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpptdemux.html#id-1.2.129.6.2.1"/> - <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpptdemux.html#id-1.2.129.6.2.2"/> + <keyword type="" name="Example pipelines" link="gst-plugins-good-plugins-rtpptdemux.html#id-1.2.129.6.5.1"/> + <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpptdemux.html#id-1.2.129.6.7.1"/> + <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpptdemux.html#id-1.2.129.6.7.2"/> <keyword type="struct" name="struct GstRtpPtDemux" link="gst-plugins-good-plugins-rtpptdemux.html#GstRtpPtDemux-struct"/> <keyword type="signal" name="The "clear-pt-map" signal" link="gst-plugins-good-plugins-rtpptdemux.html#GstRtpPtDemux-clear-pt-map"/> <keyword type="signal" name="The "new-payload-type" signal" link="gst-plugins-good-plugins-rtpptdemux.html#GstRtpPtDemux-new-payload-type"/> <keyword type="signal" name="The "payload-type-change" signal" link="gst-plugins-good-plugins-rtpptdemux.html#GstRtpPtDemux-payload-type-change"/> <keyword type="signal" name="The "request-pt-map" signal" link="gst-plugins-good-plugins-rtpptdemux.html#GstRtpPtDemux-request-pt-map"/> - <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpsession.html#id-1.2.130.7.2.1"/> - <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpsession.html#id-1.2.130.7.2.2"/> + <keyword type="" name="Example pipelines" link="gst-plugins-good-plugins-rtpsession.html#id-1.2.130.7.10.1"/> + <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpsession.html#id-1.2.130.7.12.1"/> + <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpsession.html#id-1.2.130.7.12.2"/> <keyword type="struct" name="struct GstRtpSession" link="gst-plugins-good-plugins-rtpsession.html#GstRtpSession-struct"/> <keyword type="property" name="The "bandwidth" property" link="gst-plugins-good-plugins-rtpsession.html#GstRtpSession--bandwidth"/> <keyword type="property" name="The "internal-session" property" link="gst-plugins-good-plugins-rtpsession.html#GstRtpSession--internal-session"/> @@ -1173,8 +1176,9 @@ <keyword type="signal" name="The "on-ssrc-validated" signal" link="gst-plugins-good-plugins-rtpsession.html#GstRtpSession-on-ssrc-validated"/> <keyword type="signal" name="The "on-timeout" signal" link="gst-plugins-good-plugins-rtpsession.html#GstRtpSession-on-timeout"/> <keyword type="signal" name="The "request-pt-map" signal" link="gst-plugins-good-plugins-rtpsession.html#GstRtpSession-request-pt-map"/> - <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpssrcdemux.html#id-1.2.131.6.2.1"/> - <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpssrcdemux.html#id-1.2.131.6.2.2"/> + <keyword type="" name="Example pipelines" link="gst-plugins-good-plugins-rtpssrcdemux.html#id-1.2.131.6.4.1"/> + <keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpssrcdemux.html#id-1.2.131.6.6.1"/> + <keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpssrcdemux.html#id-1.2.131.6.6.2"/> <keyword type="struct" name="struct GstRtpSsrcDemux" link="gst-plugins-good-plugins-rtpssrcdemux.html#GstRtpSsrcDemux-struct"/> <keyword type="signal" name="The "clear-ssrc" signal" link="gst-plugins-good-plugins-rtpssrcdemux.html#GstRtpSsrcDemux-clear-ssrc"/> <keyword type="signal" name="The "new-ssrc-pad" signal" link="gst-plugins-good-plugins-rtpssrcdemux.html#GstRtpSsrcDemux-new-ssrc-pad"/> diff --git a/docs/plugins/html/gst-plugins-good-plugins-mj2mux.html b/docs/plugins/html/gst-plugins-good-plugins-mj2mux.html index 988740d2442cf7ae07c3a053dbf494832fee8c3a..20b2198603aab8ae6dcc389ce84bf2fc4e0393a2 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-mj2mux.html +++ b/docs/plugins/html/gst-plugins-good-plugins-mj2mux.html @@ -332,7 +332,7 @@ Documentation last reviewed on 2011-04-21 <div class="refsect2"> <a name="GstMJ2Mux--streamable"></a><h3>The <code class="literal">"streamable"</code> property</h3> <pre class="programlisting"> "streamable" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct</pre> -<p>If set to true, the output should be as if it is to be streamed and hence no indexes written or duration written.</p> +<p>If set to true, the output should be as if it is to be streamed and hence no indexes written or duration written. (DEPRECATED, only valid for fragmented MP4).</p> <p>Default value: FALSE</p> </div> <hr> diff --git a/docs/plugins/html/gst-plugins-good-plugins-monoscope.html b/docs/plugins/html/gst-plugins-good-plugins-monoscope.html index 98979c568aae346b26a710a410c81aca345cef23..0254c418009fa3e0310dd25f3aff66a27aae00d0 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-monoscope.html +++ b/docs/plugins/html/gst-plugins-good-plugins-monoscope.html @@ -24,8 +24,6 @@ <a href="#gst-plugins-good-plugins-monoscope.synopsis" class="shortcut">Top</a>  | <a href="#gst-plugins-good-plugins-monoscope.description" class="shortcut">Description</a> -  | - <a href="#gst-plugins-good-plugins-monoscope.object-hierarchy" class="shortcut">Object Hierarchy</a> </td></tr> </table> <div class="refentry"> @@ -39,17 +37,7 @@ </tr></table></div> <div class="refsynopsisdiv"> <a name="gst-plugins-good-plugins-monoscope.synopsis"></a><h2>Synopsis</h2> -<a name="GstMonoscope"></a><pre class="synopsis">struct <a class="link" href="gst-plugins-good-plugins-monoscope.html#GstMonoscope-struct" title="struct GstMonoscope">GstMonoscope</a>; -</pre> -</div> -<div class="refsect1"> -<a name="gst-plugins-good-plugins-monoscope.object-hierarchy"></a><h2>Object Hierarchy</h2> -<pre class="synopsis"> - <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a> - +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a> - +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a> - +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a> - +----GstMonoscope +<pre class="synopsis">struct <a class="link" href="gst-plugins-good-plugins-monoscope.html#GstMonoscope" title="struct GstMonoscope">GstMonoscope</a>; </pre> </div> <div class="refsect1"> @@ -61,7 +49,7 @@ curve of the audio signal like on an oscilloscope. <p> </p> <div class="refsect2"> -<a name="id-1.2.78.5.3.1"></a><h3>Example launch line</h3> +<a name="id-1.2.78.4.3.1"></a><h3>Example launch line</h3> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> @@ -79,7 +67,7 @@ curve of the audio signal like on an oscilloscope. <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="id-1.2.78.5.4.1"></a><h3>Element Information</h3> +<a name="id-1.2.78.4.4.1"></a><h3>Element Information</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -105,7 +93,7 @@ curve of the audio signal like on an oscilloscope. </div> <hr> <div class="refsect2"> -<a name="id-1.2.78.5.4.2"></a><h3>Element Pads</h3> +<a name="id-1.2.78.4.4.2"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -162,8 +150,40 @@ curve of the audio signal like on an oscilloscope. <div class="refsect1"> <a name="gst-plugins-good-plugins-monoscope.details"></a><h2>Details</h2> <div class="refsect2"> -<a name="GstMonoscope-struct"></a><h3>struct GstMonoscope</h3> -<pre class="programlisting">struct GstMonoscope;</pre> +<a name="GstMonoscope"></a><h3>struct GstMonoscope</h3> +<pre class="programlisting">struct GstMonoscope { + GstElement element; + + /* pads */ + GstPad *sinkpad; + GstPad *srcpad; + + GstAdapter *adapter; + + guint64 next_ts; /* expected timestamp of the next frame */ + guint64 frame_duration; /* video frame duration */ + gint rate; /* sample rate */ + guint bps; /* bytes per sample */ + guint spf; /* samples per video frame */ + GstBufferPool *pool; + + GstSegment segment; + + /* QoS stuff *//* with LOCK */ + gdouble proportion; + GstClockTime earliest_time; + + /* video state */ + gint fps_num; + gint fps_denom; + gint width; + gint height; + guint outsize; + + /* visualisation state */ + struct monoscope_state *visstate; +}; +</pre> <p> </p> </div> diff --git a/docs/plugins/html/gst-plugins-good-plugins-mp4mux.html b/docs/plugins/html/gst-plugins-good-plugins-mp4mux.html index ec84c2dc960c83b94886c230806d478589173f73..8d796723f1dad00b28877a9d9e5a648c734a61a3 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-mp4mux.html +++ b/docs/plugins/html/gst-plugins-good-plugins-mp4mux.html @@ -345,7 +345,7 @@ Documentation last reviewed on 2011-04-21 <div class="refsect2"> <a name="GstMP4Mux--streamable"></a><h3>The <code class="literal">"streamable"</code> property</h3> <pre class="programlisting"> "streamable" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct</pre> -<p>If set to true, the output should be as if it is to be streamed and hence no indexes written or duration written.</p> +<p>If set to true, the output should be as if it is to be streamed and hence no indexes written or duration written. (DEPRECATED, only valid for fragmented MP4).</p> <p>Default value: FALSE</p> </div> <hr> 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 6f9dc30168b3943bfe7236bd28567867cb907f40..f6b7ce04bb64dc8b9fcfb627b56418614814dcc2 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.1.90</td> +<td>1.2.0</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 5526afb8838c28aa1bb35904746d705165711342..9c99f2e4de93d303d2ce29baa6c2bd853c000f1c 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.1.90</td> +<td>1.2.0</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 3ecb3f2ab0d7f2bb7c3cef1e264f74193a9b1756..e53851d8c6ed503737968dabe99f577c064cb5f0 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.1.90</td> +<td>1.2.0</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 1e9d66733018f8264f60230d6e985ced88d39c48..07724278fc40153f0c9903957c72d902623bb8f4 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.1.90</td> +<td>1.2.0</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 2c08188ca858b1f041d19a1c2c0db8922b4216c1..065cef05c077af640d06857ebc9599404f116195 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.1.90</td> +<td>1.2.0</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 93ce7872a52fdd617881958ea49b4a2271a1772f..e2920f4980863e263193911329f3f3f5f91afc5e 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.1.90</td> +<td>1.2.0</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 b1c5e55f75da4cba20ef1283812fa9a258b13cec..fa14cf8af3b31e8f0bc8e36587c27dc3e652d3d7 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.1.90</td> +<td>1.2.0</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 299b6b5fadc54316e836b94a2f3f1df434bfcee6..fdf69c94532e9a1ae6902407b8d0e97d6c712961 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.1.90</td> +<td>1.2.0</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 464954a86fc0a09e0d0d5dcc7df4e1cd63b81b92..c032127a3833e2ec713f41a73bf5cf454bfbdf80 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.1.90</td> +<td>1.2.0</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 3864b7836979765f21acf50bedc01888f789e241..cf283ef72f3fda3150a24a7342a8b64940820d38 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.1.90</td> +<td>1.2.0</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 f0acc36ef30b87d287d4221bf753b82beb984f3b..47124b6dbcd5480567b03f73c19f1100ea9765f5 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.1.90</td> +<td>1.2.0</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 caad990009519b92bf6e3085b10d58b68351c0d7..bd2d9a2de328c4f5ae9ac4e329b5f192e08273c2 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.1.90</td> +<td>1.2.0</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 cb2349cc3ad7dd339be22a52d03f7fcdb91bf39d..dd59a9e6d4cab994971706c8d524380916455d46 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.1.90</td> +<td>1.2.0</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 ec9f754e24be0f56b9ac33e353ece3c00357af23..79a85a9ba565a04538d431ee5b4bf3698db82d2c 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.1.90</td> +<td>1.2.0</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 c8ce29355793220a77c18a75228925886f5d1d85..dae32f55ab5b57de2c766dcca7fad25003686029 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.1.90</td> +<td>1.2.0</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 483fe9f072d298a09000dc73565dfe2fd733c88e..0a4f7033dfd8579fed5ceb49bbe567246baebf81 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.1.90</td> +<td>1.2.0</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 3c064a3cc89a09524c11cea5c3260556714ed8c1..35389585f1059c7a113ae33af44d5a05609a8743 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.1.90</td> +<td>1.2.0</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 aa3c5421cef8852155180e0fe0298a6ca577690d..15da84d35f912a9fb5bf5c87042a380ec99face6 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.1.90</td> +<td>1.2.0</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 452dbd774c6f0f1a1270b2d5218dc06a94bb4eba..f69e3920fdf37d3a8201420eb5ae9e4fd76f8240 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.1.90</td> +<td>1.2.0</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 e7445f7bfb9d6726276aa13c2107281b1f910016..6177f082c87547005efd918b44e6e5ce2c315276 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.1.90</td> +<td>1.2.0</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 143f3ba73e64a64b1547e3e81ef08857e010795c..002c7d0c1ce9bbe11b3d295c1ae3aa2afe78a4b5 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.1.90</td> +<td>1.2.0</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 0402963583d999ef1a5935dd9b667b711f6e67ca..7ec83fe3e31bafc8c19afddef972bfb7cd0d92ab 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.1.90</td> +<td>1.2.0</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 c2100f045f797513955293631bc964e166d72623..bfb9c78cf23a55927dcac1ff8cfaaa88970d8811 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.1.90</td> +<td>1.2.0</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 0d95f2627744584ff6969ae6aca710eebb1e31d2..e67da595c3d827460eb7a13c449461314575bf9f 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.1.90</td> +<td>1.2.0</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 73e2b73d44d2870ce0aae61c939dc64d2edf1a96..b80dd89ccdc02939bc7709999b7a71e7e4fc60ff 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.1.90</td> +<td>1.2.0</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 7ca46898704344a1238c9507a15e19fe39df5252..3865acf5afcb01c22a15916fd44ada5739b8ff10 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.1.90</td> +<td>1.2.0</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 1087f0e7f5721d61cee2093dd61879c5d3e22c6a..eb5576947abe5c7c3d0d0533d1dc7de509d928b5 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.1.90</td> +<td>1.2.0</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 5f60f6023ce485f996365191482504bbfe09c5db..62ce3d6ae4f73e0b37286b76fe601fb4bf694319 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.1.90</td> +<td>1.2.0</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 5286ab22a0315c107015d8c5be32f6754de50507..98d6c0d145902676f527da9ddfb3b3a516b8b88b 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.1.90</td> +<td>1.2.0</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 014b12a6649b2153dfd6fade407877d6ad0b7d3e..9c7048e76cc64164d51ce17e1b6bf82ff34a69b6 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.1.90</td> +<td>1.2.0</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 5618e8b981c19081148eb688dbdb4acf83f72859..b209f985a10812d58a5e6f30b510113019c609ed 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.1.90</td> +<td>1.2.0</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 23a71c74ae3f9ff5495b439b43d1e667fb9c5c82..c5124f13538f990c89517e6a76b2d7b559a14d53 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.1.90</td> +<td>1.2.0</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 2d3ab39280f8b9d04f60f84f0dc2cdf8aadcc933..5d1d0f3c42cfcd552f5c40aa50af9c055806c9d3 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.1.90</td> +<td>1.2.0</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 f422972cf155cefbce400f6b3b918c0e9da4576b..16b863820aab5c91ee7aa706adde5104600ecc3f 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.1.90</td> +<td>1.2.0</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 94a9fa426076fc41542de16da47120a8facdad67..948591ac8729e57d68d8689eaef4fe66fcf2d249 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.1.90</td> +<td>1.2.0</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 57c4d6b08a90de55be87aa32045b9bb88bff6bbc..451697db32e717a9caf10029c2dbef0699e1922a 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.1.90</td> +<td>1.2.0</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 d17278a0e960bf5fd40fc86a8d0bddc716066967..8a579ee9e6f035a092314c4f2aa7adbecef66394 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.1.90</td> +<td>1.2.0</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 d21f14726ea2fa7b54c93e4668c22a8bea5292b9..69bd3d1bb7ff868483b728d73c44f7d4e7dec01f 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.1.90</td> +<td>1.2.0</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 54b4ba50314bf3faa210cd831de3eb4c28c25409..7c71ac91dd2061ebc9779920b33f2dd4f725e9b4 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.1.90</td> +<td>1.2.0</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 639ddf9e5c839da2b726abcdd342757b5af7fd40..89a8c9083b9ba9c4aa06171c4465ab34ec2f9ed8 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.1.90</td> +<td>1.2.0</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 41d3e6440ebb16db89ebf98e29e888b704932cc8..09bc27e126a818eac7df57ef60632e22a3cdd396 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.1.90</td> +<td>1.2.0</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 830c89d89210208e0281324e8e65a6e349e72945..4e73480b09c83b11edcc8a2e9b2e1f1113697cf8 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.1.90</td> +<td>1.2.0</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 61d461516a36207a2639fa5054f5b6d48351525e..d58bf44dc39b9c8518c1b40dec6f0164fbf4c7f4 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.1.90</td> +<td>1.2.0</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 6ed5d4a8e9caa79852f9b1dd9d8696b425e23277..16c7b70166e657a5c6c8e34d3af0f276e24544ee 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.1.90</td> +<td>1.2.0</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-rtpmanager.html b/docs/plugins/html/gst-plugins-good-plugins-plugin-rtpmanager.html index afa9ad2e17efef29e201155ae14c24fde8c75800..d5acb752038c781de1e592aba8c4edf6856a3463 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.1.90</td> +<td>1.2.0</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 5908799da23cf8f6562abc2ca42bfce2c51ab46b..f7a200e03d8805ec5fa9a2b78f46495f54516de1 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.1.90</td> +<td>1.2.0</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 90a7fe1d1ffefe9db7c663fdf9ef90deff260ac4..829c75ec0591a8b868ffb3180d0b8a6e9bc27875 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.1.90</td> +<td>1.2.0</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 3054459c028463f59d3a195fdd92174abe619c92..a24c4b84e81bf7e3c2dc701ebab9d99d9743977f 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.1.90</td> +<td>1.2.0</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 b311e2e143604800904bed3cb5a11cf8cd623336..4fe2a388019af1195f0f4166b17fd80b9ff4c7e3 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.1.90</td> +<td>1.2.0</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 adda77778fdda7c84f70aec4c8fea1c5e04c76d0..f052c51e39eda0cbe09643c2e732d5e16070f247 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.1.90</td> +<td>1.2.0</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 b644b03d1db13280f7fa7334aa30415c07eb27b2..26a51e7b31e66b82c4c263fdbce3b77967cff249 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.1.90</td> +<td>1.2.0</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 cd74e8f1e495bea5eb84fa99e5a7d975326cb423..dfa18667ad440f7e598e9ca234b030398d7d04a4 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.1.90</td> +<td>1.2.0</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 4634602127034e24dca4ef3eff57ffb40fd571b2..c8b557fa79e85345adc6ca96deee941e2154968f 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.1.90</td> +<td>1.2.0</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 bd4fba046627b0f4ebebcbb705d8e896c256f372..0cd7fcef09cc368beb0d317fa99498f9b6b4ed69 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.1.90</td> +<td>1.2.0</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 18cb8731fd536e26e25cf0f15910a355f5bb07b5..d5b2ae5a03519af8cd14f7579d33e3beb6e47b91 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.1.90</td> +<td>1.2.0</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 68156c2a3d52b7d08db9c9fb300d90992dc039ba..facc7786d6670d038d929556be45a8060f9bc7d8 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.1.90</td> +<td>1.2.0</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 17b21d4f23be627b8ea8cfebd5a3b6dbe03bca8e..6589f0a292074a1b8016b198c9bf0b0f83c24963 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.1.90</td> +<td>1.2.0</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 ba3001473ccabc8706c79e15b5a11de5915fd7a0..f656f9ac01700426f8e9d414b61d746bdefa696b 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.1.90</td> +<td>1.2.0</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 f45b604c8f13262d8c43a28921b902ef7047c601..e7fbf99ad29487ee261f50da66d0c07afc8f049e 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.1.90</td> +<td>1.2.0</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 87464ec48e332aa2f86b7f081c161e67201a972d..e485f733c4d853a23199d47cc649ae94b67ab7dc 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.1.90</td> +<td>1.2.0</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 6914fbb70dcc84a93957a92cd3704bddefbee0de..36ad64487c8920ad5467abf31b486fbafa296e85 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.1.90</td> +<td>1.2.0</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 a0f938ffdb9824b13b3a3d568573d4a35e41d7c3..6be0f01649d089f3b653825e066c7d56a2705939 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.1.90</td> +<td>1.2.0</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 b348e5144b958403687d5815437ba99a344f01b1..dcfaff00a1bd806a282c3f9f1ff0344121d3bb49 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.1.90</td> +<td>1.2.0</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 54dcfa527bcb0db53b65cdd3c6b4e8db656e3cbb..34bae23b2f82e0a134d51314ab36fcb7cd6eb5f5 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.1.90</td> +<td>1.2.0</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 b5ceb29fc4174cc71b31ac4fa84b93b9c2506912..e97e86bad1edfdbec9250ff20dbc4e2769938c5a 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-plugin-y4menc.html +++ b/docs/plugins/html/gst-plugins-good-plugins-plugin-y4menc.html @@ -42,7 +42,7 @@ </tr> <tr> <td><p><span class="term">version</span></p></td> -<td>1.1.90</td> +<td>1.2.0</td> </tr> <tr> <td><p><span class="term">run-time license</span></p></td> diff --git a/docs/plugins/html/gst-plugins-good-plugins-qtmux.html b/docs/plugins/html/gst-plugins-good-plugins-qtmux.html index 361753f2b31e2d6d0c1f501471132ef0d9a9312b..650734bc3eeb898c81f8f1f479dea52a4cd3e4c6 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-qtmux.html +++ b/docs/plugins/html/gst-plugins-good-plugins-qtmux.html @@ -398,7 +398,7 @@ Last reviewed on 2010-12-03 <div class="refsect2"> <a name="GstQTMux--streamable"></a><h3>The <code class="literal">"streamable"</code> property</h3> <pre class="programlisting"> "streamable" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write / Construct</pre> -<p>If set to true, the output should be as if it is to be streamed and hence no indexes written or duration written.</p> +<p>If set to true, the output should be as if it is to be streamed and hence no indexes written or duration written. (DEPRECATED, only valid for fragmented MP4).</p> <p>Default value: FALSE</p> </div> <hr> diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpjitterbuffer.html b/docs/plugins/html/gst-plugins-good-plugins-rtpjitterbuffer.html index 1de7d0d7a1684ebe4c5ea920ed5c7d6e6ce21a17..e55fed6c1e9ce0d9add3bf5278bb657682440299 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-rtpjitterbuffer.html +++ b/docs/plugins/html/gst-plugins-good-plugins-rtpjitterbuffer.html @@ -66,10 +66,10 @@ "<a class="link" href="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer--mode" title='The "mode" property'>mode</a>" <span class="type">RTPJitterBufferMode</span> : Read / Write "<a class="link" href="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer--percent" title='The "percent" property'>percent</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read "<a class="link" href="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer--do-retransmission" title='The "do-retransmission" property'>do-retransmission</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> : Read / Write - "<a class="link" href="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer--rtx-delay" title='The "rtx-delay" property'>rtx-delay</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read - "<a class="link" href="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer--rtx-delay-reorder" title='The "rtx-delay-reorder" property'>rtx-delay-reorder</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read - "<a class="link" href="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer--rtx-retry-period" title='The "rtx-retry-period" property'>rtx-retry-period</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read - "<a class="link" href="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer--rtx-retry-timeout" title='The "rtx-retry-timeout" property'>rtx-retry-timeout</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read + "<a class="link" href="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer--rtx-delay" title='The "rtx-delay" property'>rtx-delay</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read / Write + "<a class="link" href="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer--rtx-delay-reorder" title='The "rtx-delay-reorder" property'>rtx-delay-reorder</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read / Write + "<a class="link" href="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer--rtx-retry-period" title='The "rtx-retry-period" property'>rtx-retry-period</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read / Write + "<a class="link" href="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer--rtx-retry-timeout" title='The "rtx-retry-timeout" property'>rtx-retry-timeout</a>" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read / Write </pre> </div> <div class="refsect1"> @@ -84,10 +84,107 @@ </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-rtpjitterbuffer.description"></a><h2>Description</h2> +<p> +This element reorders and removes duplicate RTP packets as they are received +from a network source. +</p> +<p> +The element needs the clock-rate of the RTP payload in order to estimate the +delay. This information is obtained either from the caps on the sink pad or, +when no caps are present, from the <a class="link" href="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer-request-pt-map" title='The "request-pt-map" signal'><span class="type">"request-pt-map"</span></a> signal. +To clear the previous pt-map use the <a class="link" href="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer-clear-pt-map" title='The "clear-pt-map" signal'><span class="type">"clear-pt-map"</span></a> signal. +</p> +<p> +The rtpjitterbuffer will wait for missing packets up to a configurable time +limit using the <a class="link" href="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer--latency" title='The "latency" property'><span class="type">"latency"</span></a> property. Packets arriving too +late are considered to be lost packets. If the <a class="link" href="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer--do-lost" title='The "do-lost" property'><span class="type">"do-lost"</span></a> +property is set, lost packets will result in a custom serialized downstream +event of name GstRTPPacketLost. The lost packet events are usually used by a +depayloader or other element to create concealment data or some other logic +to gracefully handle the missing packets. +</p> +<p> +The jitterbuffer will use the DTS (or PTS if no DTS is set) of the incomming +buffer and the rtptime inside the RTP packet to create a PTS on the outgoing +buffer. +</p> +<p> +The jitterbuffer can also be configured to send early retransmission events +upstream by setting the <a class="link" href="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer--do-retransmission" title='The "do-retransmission" property'><span class="type">"do-retransmission"</span></a> property. In +this mode, the jitterbuffer tries to estimate when a packet should arrive and +sends a custom upstream event named GstRTPRetransmissionRequest when the +packet is considered late. The initial expected packet arrival time is +calculated as follows: +</p> +<p> +</p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>If seqnum N arrived at time T, seqnum N+1 is expected to arrive at + T + packet-spacing + <a class="link" href="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer--rtx-delay" title='The "rtx-delay" property'><span class="type">"rtx-delay"</span></a>. The packet spacing is + calculated from the DTS (or PTS is no DTS) of two consecutive RTP + packets with different rtptime.</p></li></ul></div> +<p> +</p> +<p> +</p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>If seqnum N0 arrived at time T0 and seqnum Nm arrived at time Tm, + seqnum Ni is expected at time Ti = T0 + i*(Tm - T0)/(Nm - N0). Any + previously scheduled timeout is overwritten.</p></li></ul></div> +<p> +</p> +<p> +</p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>If seqnum N arrived, all seqnum older than + N - <a class="link" href="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer--rtx-delay-reorder" title='The "rtx-delay-reorder" property'><span class="type">"rtx-delay-reorder"</span></a> are considered late + immediately. This is to request fast feedback for abonormally reorder + packets before any of the previous timeouts is triggered.</p></li></ul></div> +<p> +</p> +<p> +A late packet triggers the GstRTPRetransmissionRequest custom upstream +event. After the initial timeout expires and the retransmission event is +sent, the timeout is scheduled for +T + <a class="link" href="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer--rtx-retry-timeout" title='The "rtx-retry-timeout" property'><span class="type">"rtx-retry-timeout"</span></a>. If the missing packet did not +arrive after <a class="link" href="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer--rtx-retry-timeout" title='The "rtx-retry-timeout" property'><span class="type">"rtx-retry-timeout"</span></a>, a new +GstRTPRetransmissionRequest is sent upstream and the timeout is rescheduled +again for T + <a class="link" href="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer--rtx-retry-timeout" title='The "rtx-retry-timeout" property'><span class="type">"rtx-retry-timeout"</span></a>. This repeats until +<a class="link" href="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer--rtx-retry-period" title='The "rtx-retry-period" property'><span class="type">"rtx-retry-period"</span></a> elapsed, at which point no further +retransmission requests are sent and the regular logic is performed to +schedule a lost packet as discussed above. +</p> +<p> +This element acts as a live element and so adds <a class="link" href="gst-plugins-good-plugins-rtpjitterbuffer.html#GstRtpJitterBuffer--latency" title='The "latency" property'><span class="type">"latency"</span></a> +to the pipeline. +</p> +<p> +This element will automatically be used inside rtpbin. +</p> +<p> +</p> +<div class="refsect2"> +<a name="id-1.2.127.7.13.1"></a><h3>Example pipelines</h3> +<div class="informalexample"> + <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> + <tbody> + <tr> + <td class="listing_lines" align="right"><pre>1</pre></td> + <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> rtspsrc location<span class="gtkdoc opt">=</span>rtsp<span class="gtkdoc opt">:</span><span class="gtkdoc slc">//192.168.1.133:8554/mpeg1or2AudioVideoTest ! rtpjitterbuffer ! rtpmpvdepay ! mpeg2dec ! xvimagesink</span></pre></td> + </tr> + </tbody> + </table> +</div> + Connect to a streaming server and decode the MPEG video. The jitterbuffer is +inserted into the pipeline to smooth out network jitter and to reorder the +out-of-order RTP packets. +</div> +<p> +</p> +<p> +Last reviewed on 2007-05-28 (0.10.5) +</p> <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="id-1.2.127.7.2.1"></a><h3>Element Information</h3> +<a name="id-1.2.127.7.15.1"></a><h3>Element Information</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -113,7 +210,7 @@ </div> <hr> <div class="refsect2"> -<a name="id-1.2.127.7.2.2"></a><h3>Element Pads</h3> +<a name="id-1.2.127.7.15.2"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -255,7 +352,7 @@ Opaque jitterbuffer structure. <hr> <div class="refsect2"> <a name="GstRtpJitterBuffer--rtx-delay"></a><h3>The <code class="literal">"rtx-delay"</code> property</h3> -<pre class="programlisting"> "rtx-delay" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read</pre> +<pre class="programlisting"> "rtx-delay" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read / Write</pre> <p>Extra time in ms to wait before sending retransmission event (-1 automatic).</p> <p>Allowed values: >= G_MAXULONG</p> <p>Default value: 20</p> @@ -263,7 +360,7 @@ Opaque jitterbuffer structure. <hr> <div class="refsect2"> <a name="GstRtpJitterBuffer--rtx-delay-reorder"></a><h3>The <code class="literal">"rtx-delay-reorder"</code> property</h3> -<pre class="programlisting"> "rtx-delay-reorder" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read</pre> +<pre class="programlisting"> "rtx-delay-reorder" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read / Write</pre> <p>Sending retransmission event when this much reordering (-1 automatic).</p> <p>Allowed values: >= G_MAXULONG</p> <p>Default value: 3</p> @@ -271,7 +368,7 @@ Opaque jitterbuffer structure. <hr> <div class="refsect2"> <a name="GstRtpJitterBuffer--rtx-retry-period"></a><h3>The <code class="literal">"rtx-retry-period"</code> property</h3> -<pre class="programlisting"> "rtx-retry-period" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read</pre> +<pre class="programlisting"> "rtx-retry-period" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read / Write</pre> <p>Try to get a retransmission for this many ms (-1 automatic).</p> <p>Allowed values: >= G_MAXULONG</p> <p>Default value: 160</p> @@ -279,7 +376,7 @@ Opaque jitterbuffer structure. <hr> <div class="refsect2"> <a name="GstRtpJitterBuffer--rtx-retry-timeout"></a><h3>The <code class="literal">"rtx-retry-timeout"</code> property</h3> -<pre class="programlisting"> "rtx-retry-timeout" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read</pre> +<pre class="programlisting"> "rtx-retry-timeout" <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> : Read / Write</pre> <p>Retry sending a transmission event after this timeout in ms (-1 automatic).</p> <p>Allowed values: >= G_MAXULONG</p> <p>Default value: 40</p> diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpptdemux.html b/docs/plugins/html/gst-plugins-good-plugins-rtpptdemux.html index 8095f53c0337d8276d628f36ca5aaaee50928d26..aea23dbf323a6bf07c4a5ee40de45bd71fefc303 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-rtpptdemux.html +++ b/docs/plugins/html/gst-plugins-good-plugins-rtpptdemux.html @@ -65,10 +65,48 @@ </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-rtpptdemux.description"></a><h2>Description</h2> +<p> +rtpptdemux acts as a demuxer for RTP packets based on the payload type of +the packets. Its main purpose is to allow an application to easily receive +and decode an RTP stream with multiple payload types. +</p> +<p> +For each payload type that is detected, a new pad will be created and the +<a class="link" href="gst-plugins-good-plugins-rtpptdemux.html#GstRtpPtDemux-new-payload-type" title='The "new-payload-type" signal'><span class="type">"new-payload-type"</span></a> signal will be emitted. When the payload for +the RTP stream changes, the <a class="link" href="gst-plugins-good-plugins-rtpptdemux.html#GstRtpPtDemux-payload-type-change" title='The "payload-type-change" signal'><span class="type">"payload-type-change"</span></a> signal will be +emitted. +</p> +<p> +The element will try to set complete and unique application/x-rtp caps on the +outgoing buffers and pads based on the result of the +<a class="link" href="gst-plugins-good-plugins-rtpptdemux.html#GstRtpPtDemux-request-pt-map" title='The "request-pt-map" signal'><span class="type">"request-pt-map"</span></a> signal. +</p> +<p> +</p> +<div class="refsect2"> +<a name="id-1.2.129.6.5.1"></a><h3>Example pipelines</h3> +<div class="informalexample"> + <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> + <tbody> + <tr> + <td class="listing_lines" align="right"><pre>1</pre></td> + <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> udpsrc caps<span class="gtkdoc opt">=</span><span class="string">"application/x-rtp"</span> <span class="gtkdoc opt">!</span> rtpptdemux <span class="gtkdoc opt">!</span> fakesink</pre></td> + </tr> + </tbody> + </table> +</div> + Takes an RTP stream and send the RTP packets with the first detected +payload type to fakesink, discarding the other payload types. +</div> +<p> +</p> +<p> +Last reviewed on 2007-05-28 (0.10.5) +</p> <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="id-1.2.129.6.2.1"></a><h3>Element Information</h3> +<a name="id-1.2.129.6.7.1"></a><h3>Element Information</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -94,7 +132,7 @@ </div> <hr> <div class="refsect2"> -<a name="id-1.2.129.6.2.2"></a><h3>Element Pads</h3> +<a name="id-1.2.129.6.7.2"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpsession.html b/docs/plugins/html/gst-plugins-good-plugins-rtpsession.html index e092a69ec7fefe052d3bf2d11ce59b5f1b18d336..3787aa2c841fd8b4f52dadd7974685ec66817049 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-rtpsession.html +++ b/docs/plugins/html/gst-plugins-good-plugins-rtpsession.html @@ -91,10 +91,137 @@ </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-rtpsession.description"></a><h2>Description</h2> +<p> +The RTP session manager models participants with unique SSRC in an RTP +session. This session can be used to send and receive RTP and RTCP packets. +Based on what REQUEST pads are requested from the session manager, specific +functionality can be activated. +</p> +<p> +The session manager currently implements RFC 3550 including: +</p> +<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> +<li class="listitem"><p>RTP packet validation based on consecutive sequence numbers.</p></li> +<li class="listitem"><p>Maintainance of the SSRC participant database.</p></li> +<li class="listitem"><p>Keeping per participant statistics based on received RTCP packets.</p></li> +<li class="listitem"><p>Scheduling of RR/SR RTCP packets.</p></li> +<li class="listitem"><p>Support for multiple sender SSRC.</p></li> +</ul></div> +<p> +</p> +<p> +The rtpsession will not demux packets based on SSRC or payload type, nor will +it correct for packet reordering and jitter. Use <span class="type">GstRtpsSrcDemux</span>, +<a class="link" href="gst-plugins-good-plugins-rtpptdemux.html#GstRtpPtDemux"><span class="type">GstRtpPtDemux</span></a> and GstRtpJitterBuffer in addition to <a class="link" href="gst-plugins-good-plugins-rtpsession.html#GstRtpSession"><span class="type">GstRtpSession</span></a> to +perform these tasks. It is usually a good idea to use <a class="link" href="gst-plugins-good-plugins-rtpbin.html#GstRtpBin"><span class="type">GstRtpBin</span></a>, which +combines all these features in one element. +</p> +<p> +To use <a class="link" href="gst-plugins-good-plugins-rtpsession.html#GstRtpSession"><span class="type">GstRtpSession</span></a> as an RTP receiver, request a recv_rtp_sink pad, which will +automatically create recv_rtp_src pad. Data received on the recv_rtp_sink pad +will be processed in the session and after being validated forwarded on the +recv_rtp_src pad. +</p> +<p> +To also use <a class="link" href="gst-plugins-good-plugins-rtpsession.html#GstRtpSession"><span class="type">GstRtpSession</span></a> as an RTCP receiver, request a recv_rtcp_sink pad, +which will automatically create a sync_src pad. Packets received on the RTCP +pad will be used by the session manager to update the stats and database of +the other participants. SR packets will be forwarded on the sync_src pad +so that they can be used to perform inter-stream synchronisation when needed. +</p> +<p> +If you want the session manager to generate and send RTCP packets, request +the send_rtcp_src pad. Packet pushed on this pad contain SR/RR RTCP reports +that should be sent to all participants in the session. +</p> +<p> +To use <a class="link" href="gst-plugins-good-plugins-rtpsession.html#GstRtpSession"><span class="type">GstRtpSession</span></a> as a sender, request a send_rtp_sink pad, which will +automatically create a send_rtp_src pad. The session manager will +forward the packets on the send_rtp_src pad after updating its internal state. +</p> +<p> +The session manager needs the clock-rate of the payload types it is handling +and will signal the <a class="link" href="gst-plugins-good-plugins-rtpsession.html#GstRtpSession-request-pt-map" title='The "request-pt-map" signal'><span class="type">"request-pt-map"</span></a> signal when it needs such a +mapping. One can clear the cached values with the <a class="link" href="gst-plugins-good-plugins-rtpsession.html#GstRtpSession-clear-pt-map" title='The "clear-pt-map" signal'><span class="type">"clear-pt-map"</span></a> +signal. +</p> +<p> +</p> +<div class="refsect2"> +<a name="id-1.2.130.7.10.1"></a><h3>Example pipelines</h3> +<div class="informalexample"> + <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> + <tbody> + <tr> + <td class="listing_lines" align="right"><pre>1</pre></td> + <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> udpsrc port<span class="gtkdoc opt">=</span><span class="number">5000</span> caps<span class="gtkdoc opt">=</span><span class="string">"application/x-rtp, ..."</span> <span class="gtkdoc opt">! .</span>recv_rtp_sink rtpsession <span class="gtkdoc opt">.</span>recv_rtp_src <span class="gtkdoc opt">!</span> rtptheoradepay <span class="gtkdoc opt">!</span> theoradec <span class="gtkdoc opt">!</span> xvimagesink</pre></td> + </tr> + </tbody> + </table> +</div> + Receive theora RTP packets from port 5000 and send them to the depayloader, +decoder and display. Note that the application/x-rtp caps on udpsrc should be +configured based on some negotiation process such as RTSP for this pipeline +to work correctly. +<div class="informalexample"> + <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> + <tbody> + <tr> + <td class="listing_lines" align="right"><pre>1 +2 +3</pre></td> + <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> udpsrc port<span class="gtkdoc opt">=</span><span class="number">5000</span> caps<span class="gtkdoc opt">=</span><span class="string">"application/x-rtp, ..."</span> <span class="gtkdoc opt">! .</span>recv_rtp_sink rtpsession name<span class="gtkdoc opt">=</span>session \ + <span class="gtkdoc opt">.</span>recv_rtp_src <span class="gtkdoc opt">!</span> rtptheoradepay <span class="gtkdoc opt">!</span> theoradec <span class="gtkdoc opt">!</span> xvimagesink \ + udpsrc port<span class="gtkdoc opt">=</span><span class="number">5001</span> caps<span class="gtkdoc opt">=</span><span class="string">"application/x-rtcp"</span> <span class="gtkdoc opt">!</span> session<span class="gtkdoc opt">.</span>recv_rtcp_sink</pre></td> + </tr> + </tbody> + </table> +</div> + Receive theora RTP packets from port 5000 and send them to the depayloader, +decoder and display. Receive RTCP packets from port 5001 and process them in +the session manager. +Note that the application/x-rtp caps on udpsrc should be +configured based on some negotiation process such as RTSP for this pipeline +to work correctly. +<div class="informalexample"> + <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> + <tbody> + <tr> + <td class="listing_lines" align="right"><pre>1</pre></td> + <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> videotestsrc <span class="gtkdoc opt">!</span> theoraenc <span class="gtkdoc opt">!</span> rtptheorapay <span class="gtkdoc opt">! .</span>send_rtp_sink rtpsession <span class="gtkdoc opt">.</span>send_rtp_src <span class="gtkdoc opt">!</span> udpsink port<span class="gtkdoc opt">=</span><span class="number">5000</span></pre></td> + </tr> + </tbody> + </table> +</div> + Send theora RTP packets through the session manager and out on UDP port +5000. +<div class="informalexample"> + <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> + <tbody> + <tr> + <td class="listing_lines" align="right"><pre>1 +2</pre></td> + <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> videotestsrc <span class="gtkdoc opt">!</span> theoraenc <span class="gtkdoc opt">!</span> rtptheorapay <span class="gtkdoc opt">! .</span>send_rtp_sink rtpsession name<span class="gtkdoc opt">=</span>session <span class="gtkdoc opt">.</span>send_rtp_src \ + <span class="gtkdoc opt">!</span> udpsink port<span class="gtkdoc opt">=</span><span class="number">5000</span> session<span class="gtkdoc opt">.</span>send_rtcp_src <span class="gtkdoc opt">!</span> udpsink port<span class="gtkdoc opt">=</span><span class="number">5001</span></pre></td> + </tr> + </tbody> + </table> +</div> + Send theora RTP packets through the session manager and out on UDP port +5000. Send RTCP packets on port 5001. Note that this pipeline will not preroll +correctly because the second udpsink will not preroll correctly (no RTCP +packets are sent in the PAUSED state). Applications should manually set and +keep (see <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html#gst-element-set-locked-state"><code class="function">gst_element_set_locked_state()</code></a>) the RTCP udpsink to the PLAYING state. +</div> +<p> +</p> +<p> +Last reviewed on 2007-05-28 (0.10.5) +</p> <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="id-1.2.130.7.2.1"></a><h3>Element Information</h3> +<a name="id-1.2.130.7.12.1"></a><h3>Element Information</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -120,7 +247,7 @@ </div> <hr> <div class="refsect2"> -<a name="id-1.2.130.7.2.2"></a><h3>Element Pads</h3> +<a name="id-1.2.130.7.12.2"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -703,6 +830,10 @@ Request the payload type as <a href="http://gstreamer.freedesktop.org/data/doc/g </table></div> </div> </div> +<div class="refsect1"> +<a name="gst-plugins-good-plugins-rtpsession.see-also"></a><h2>See Also</h2> +rtpjitterbuffer, rtpbin, rtpptdemux, rtpssrcdemux +</div> </div> <div class="footer"> <hr> diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtpssrcdemux.html b/docs/plugins/html/gst-plugins-good-plugins-rtpssrcdemux.html index 116e3bb1b4050ea2f051656baa8d076daf759e35..d3ed788d276dfeb5c03aa73985a9f2d23d481030 100644 --- a/docs/plugins/html/gst-plugins-good-plugins-rtpssrcdemux.html +++ b/docs/plugins/html/gst-plugins-good-plugins-rtpssrcdemux.html @@ -64,10 +64,41 @@ </div> <div class="refsect1"> <a name="gst-plugins-good-plugins-rtpssrcdemux.description"></a><h2>Description</h2> +<p> +rtpssrcdemux acts as a demuxer for RTP packets based on the SSRC of the +packets. Its main purpose is to allow an application to easily receive and +decode an RTP stream with multiple SSRCs. +</p> +<p> +For each SSRC that is detected, a new pad will be created and the +<a class="link" href="gst-plugins-good-plugins-rtpssrcdemux.html#GstRtpSsrcDemux-new-ssrc-pad" title='The "new-ssrc-pad" signal'><span class="type">"new-ssrc-pad"</span></a> signal will be emitted. +</p> +<p> +</p> +<div class="refsect2"> +<a name="id-1.2.131.6.4.1"></a><h3>Example pipelines</h3> +<div class="informalexample"> + <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> + <tbody> + <tr> + <td class="listing_lines" align="right"><pre>1</pre></td> + <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> udpsrc caps<span class="gtkdoc opt">=</span><span class="string">"application/x-rtp"</span> <span class="gtkdoc opt">!</span> rtpssrcdemux <span class="gtkdoc opt">!</span> fakesink</pre></td> + </tr> + </tbody> + </table> +</div> + Takes an RTP stream and send the RTP packets with the first detected SSRC +to fakesink, discarding the other SSRCs. +</div> +<p> +</p> +<p> +Last reviewed on 2007-05-28 (0.10.5) +</p> <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="refsect2"> -<a name="id-1.2.131.6.2.1"></a><h3>Element Information</h3> +<a name="id-1.2.131.6.6.1"></a><h3>Element Information</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> @@ -93,7 +124,7 @@ </div> <hr> <div class="refsect2"> -<a name="id-1.2.131.6.2.2"></a><h3>Element Pads</h3> +<a name="id-1.2.131.6.6.2"></a><h3>Element Pads</h3> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> diff --git a/docs/plugins/html/index.html b/docs/plugins/html/index.html index bc8c133fc4743ad2628dadafb148232acbc07126..195106ff0abd0f96bf7b22b2c0748c7d37e6df6c 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.1.90) + for GStreamer Good Plugins 1.0 (1.2.0) 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/index.sgml b/docs/plugins/html/index.sgml index cad6a72b762ae866d3eb990f11cd9c3b111591bd..d3af905cb60b9da1e135f48518facf35694e227b 100644 --- a/docs/plugins/html/index.sgml +++ b/docs/plugins/html/index.sgml @@ -874,11 +874,9 @@ <ANCHOR id="GstMJ2Mux--trak-timescale" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-mj2mux.html#GstMJ2Mux--trak-timescale"> <ANCHOR id="gst-plugins-good-plugins-monoscope" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-monoscope.html"> <ANCHOR id="gst-plugins-good-plugins-monoscope.synopsis" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-monoscope.html#gst-plugins-good-plugins-monoscope.synopsis"> -<ANCHOR id="GstMonoscope" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-monoscope.html#GstMonoscope"> -<ANCHOR id="gst-plugins-good-plugins-monoscope.object-hierarchy" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-monoscope.html#gst-plugins-good-plugins-monoscope.object-hierarchy"> <ANCHOR id="gst-plugins-good-plugins-monoscope.description" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-monoscope.html#gst-plugins-good-plugins-monoscope.description"> <ANCHOR id="gst-plugins-good-plugins-monoscope.details" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-monoscope.html#gst-plugins-good-plugins-monoscope.details"> -<ANCHOR id="GstMonoscope-struct" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-monoscope.html#GstMonoscope-struct"> +<ANCHOR id="GstMonoscope" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-monoscope.html#GstMonoscope"> <ANCHOR id="gst-plugins-good-plugins-monoscope.see-also" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-monoscope.html#gst-plugins-good-plugins-monoscope.see-also"> <ANCHOR id="gst-plugins-good-plugins-mpegaudioparse" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-mpegaudioparse.html"> <ANCHOR id="gst-plugins-good-plugins-mpegaudioparse.synopsis" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-mpegaudioparse.html#gst-plugins-good-plugins-mpegaudioparse.synopsis"> @@ -1621,6 +1619,7 @@ <ANCHOR id="GstRtpSession-on-ssrc-validated" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-rtpsession.html#GstRtpSession-on-ssrc-validated"> <ANCHOR id="GstRtpSession-on-timeout" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-rtpsession.html#GstRtpSession-on-timeout"> <ANCHOR id="GstRtpSession-request-pt-map" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-rtpsession.html#GstRtpSession-request-pt-map"> +<ANCHOR id="gst-plugins-good-plugins-rtpsession.see-also" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-rtpsession.html#gst-plugins-good-plugins-rtpsession.see-also"> <ANCHOR id="gst-plugins-good-plugins-rtpssrcdemux" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-rtpssrcdemux.html"> <ANCHOR id="gst-plugins-good-plugins-rtpssrcdemux.synopsis" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-rtpssrcdemux.html#gst-plugins-good-plugins-rtpssrcdemux.synopsis"> <ANCHOR id="GstRtpSsrcDemux" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-rtpssrcdemux.html#GstRtpSsrcDemux"> diff --git a/docs/plugins/inspect/plugin-1394.xml b/docs/plugins/inspect/plugin-1394.xml index 18fc864d2aed8ce2b29bf267063a60cb88524904..a2cf34118dd0b81a610f8a72d8e0aa26463728c1 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.1.90</version> + <version>1.2.0</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 865bead83aa2af58b419290963c474124af59348..e35a0962c7056a74c16abf2bfb11fbc38e1ca052 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.1.90</version> + <version>1.2.0</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 122dd301a437d4bb478e005471d8f5448ec4fda8..e80dc97e09d4343495bb4a5bb62437bbfa30e582 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.1.90</version> + <version>1.2.0</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 2df32913c5b3f39833e91394579530cd8e470b49..99e4811d36ca2fc3d079e756669e5b96d678c356 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.1.90</version> + <version>1.2.0</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 660f76545f1f72f078577ff53cf71532b5c8756e..ebb423c05a81b28e02a0b55e5a3f473793b20478 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.1.90</version> + <version>1.2.0</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 361bb48204c41e1c1977a39a71b3da075b1dcd65..ef3d3d3e01e508ec1743901cfebef594377c8642 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.1.90</version> + <version>1.2.0</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 818d45ec5bc909e73b11ea8137cde2560adf5207..7e526c82821ffc5b323178de9610bb03aab229e6 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.1.90</version> + <version>1.2.0</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 79027f9a7ec1c755359f9761f2b182c46bf85219..f4a039df0fdf00b5ce658e37063d061d2f90f033 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.1.90</version> + <version>1.2.0</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 9deb95b05aa6a5755add352a55a6dfcac4fed16a..c241d1d6ee8d4b60e5050f289fb62cda47dc6e5b 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.1.90</version> + <version>1.2.0</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 6d38314d3355f26ec3bc2ff082d3de7291172b1b..6cb3bd806b146036075bb0785e259c4825764cac 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.1.90</version> + <version>1.2.0</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 5631a7a9551f73ceca1a13ddebb159ab90698fa8..a95dbaa9b3b80a184ae5c6ab8e988d5e2f91c887 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.1.90</version> + <version>1.2.0</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-cacasink.xml b/docs/plugins/inspect/plugin-cacasink.xml index 921291379c4aad5026e9607b5720b7353c4f6295..6ccd3739180d865dcab8ce289a432390dd7937fe 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.1.90</version> + <version>1.2.0</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 8324f44c2b03d9cab9ef33675ac8a0d6c4b6e422..01d3c96ce0d272a9dc3487e089f9b306d405f888 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.1.90</version> + <version>1.2.0</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 650443f39393983aba82a8f568dca1821285c3e8..74ed6bc7b865acf7c56ef0b00fcba0c445d58b3f 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.1.90</version> + <version>1.2.0</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 52787a1fe3e6bc579cac96bcaeb2454c181bb7ce..28d50689a796797af03f5199740c5d998729f5f5 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.1.90</version> + <version>1.2.0</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 f5e8f38961222940864ef20cc38e92470b26afa6..c39639a919bcfe5007af2f71bae4bcac2de5ae25 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.1.90</version> + <version>1.2.0</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 9ad65b0f9873fd793337b6fd449972b6f2273681..67bcbea7000b7a43f50a8cf86c6bce8376000da3 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.1.90</version> + <version>1.2.0</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 cdd9d7bc449e767c10067d9cd4467c61b264a333..9c9f79e105428ba8a0f658a09f1bbefaa232468c 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.1.90</version> + <version>1.2.0</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 f5763a7834e8d8979f67e6c65fdc2c69e36bbd1b..117e9b99edd0d808e5182c8087cac817ef1bc9e5 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.1.90</version> + <version>1.2.0</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 1e7ade12b473e776824bc3ed17f25fe2ad3ddc54..b5ebba22fff040ae8801aa21c51880a3b18c5e78 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.1.90</version> + <version>1.2.0</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 c3afda2f4e1b720afc778cb686576e7e55d8d928..d643aa992b4028d8317b3ca1f5222f9f0aeceedc 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.1.90</version> + <version>1.2.0</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 4870014a2abea4e54e10cbca9311b82505ed1d46..0db77dfefa86f48b6bafa8bd935cf6800ba674ca 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.1.90</version> + <version>1.2.0</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 6ed063f465aeb01209e82cc8b56f327d27fb1b4d..b2bfe87f90efc93c77903e2fca6e0741daa688d1 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.1.90</version> + <version>1.2.0</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 65e0939523b764704a37dfda417d7a478889abb5..2f230b7584c35d78910ac817d185466e74d43a5a 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.1.90</version> + <version>1.2.0</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 d8c9c922d40706590d9ef05a6e8a4abf718d9e29..e4b544dbe668bac9f0ae3ab19d46a121487bf055 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.1.90</version> + <version>1.2.0</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 a7b103d3d87fa922eedd92598c4dbd6cd87fc36b..7dfb7dff7200dc559e1134cbe88f68d0fed46713 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.1.90</version> + <version>1.2.0</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 9d6b636d0423fbd6b9b411e1d7a0e5ec8db36595..53c071de5b0efa517c05a364da7fafcd54f02d67 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.1.90</version> + <version>1.2.0</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 04b72bba23dbd8307957af7b65f77ad166f685c1..387f6af1500a55099090ab6be11feb28687b03d6 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.1.90</version> + <version>1.2.0</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 56695f93b52e45d918d17cee5e8f7be1b839f346..7d5239ad12599787f76150444b7f0d42613f0a32 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.1.90</version> + <version>1.2.0</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 c69bf5918406f00f60dbd76129118c51e43f1441..2efc3b2388c6268328e7cf6f172e22bfd1d0d259 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.1.90</version> + <version>1.2.0</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 14fe3892b13d5a427c4461ed55499a379b9ee260..0eeec7866441ad3db0a052200df071e5f0ca174d 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.1.90</version> + <version>1.2.0</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 7a4159a405da5c7c7213ce2e7d96c12422deac32..da09aa53dea0b6e7ed54f99332bf2eecde5e110a 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.1.90</version> + <version>1.2.0</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 6dabe5363543a5ea4f512dfb55bca0046852c1fe..42f48b8f138c792306ccdeb74dac153e32e29741 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.1.90</version> + <version>1.2.0</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 67e96b6483519b7b6b0d1c38948bf3fded2965af..2c151da84226bfbd3978966ac1e81e44144d5598 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.1.90</version> + <version>1.2.0</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 e02f9f2d1f8e909584ff042fb2bfa11208939446..d22a19cc1bc766f42f71250158885d1002352593 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.1.90</version> + <version>1.2.0</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 fa26bbf96cde7feea4ae7a1aedf85caf79520777..e94a41a154c07760126bba9e8212c3f22fba0210 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.1.90</version> + <version>1.2.0</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 f2e6652a413d9e9bb2d0214339d4d28f9d8cb5f8..d29285ef44b1c01cb9e5ad2aee5de2a3f507a84f 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.1.90</version> + <version>1.2.0</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 0f690bf2167c3f908a2a171219e5b12322a8298e..6c88732ec1897344508056019558890cdaa93b02 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.1.90</version> + <version>1.2.0</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 a0c87863a28959383c881dc6c6e97bb3035cd3a1..94b92de37857a68986c4deb2f6cb9525904cbd6b 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.1.90</version> + <version>1.2.0</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 721ae970844de7781799aad81ede2aa91faa5d2b..fdbcea471a28d13ca785847729852edebb567f24 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.1.90</version> + <version>1.2.0</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 396154254de08d23030d4b302a3b89ca97ece28f..8ce5c5db8166210fbce16d63869a378154da98eb 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.1.90</version> + <version>1.2.0</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 5682fe86e48b35a5b584c9b0fa75505832a564e9..a32b56c2a32752ef5408e0a573f5917535cf0dec 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.1.90</version> + <version>1.2.0</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 39d71e0e216c6865c031229972c954c5a4638552..08d32083f7573caecebc02d0dd4619e0f4d1b952 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.1.90</version> + <version>1.2.0</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 8520fe5be8e742778f6d39633bbf61e8b9a8ab28..dc4c8bd389379b6ad18d3dfda20afad1bd981d23 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.1.90</version> + <version>1.2.0</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 449b7c6ceec7ac93f6db9ba47afe9a57243441d8..e5c0e0bc6b7a745d8243ba6861792d86ccc8c9e2 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.1.90</version> + <version>1.2.0</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-rtpmanager.xml b/docs/plugins/inspect/plugin-rtpmanager.xml index e1887ed6ee0a23dc6e10dbfbc38c5f7fb330aee0..74734845179f1a5e5f30e0c8b55656b2e7d7dcf2 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.1.90</version> + <version>1.2.0</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 93a9d4a103ac8863f356e37fbeb11958a9a09926..9ab755afe112557bb1888a07c8edf8c504c83797 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.1.90</version> + <version>1.2.0</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 b0f08894174b3157c3e248a0c4fb2243fcc46718..b2adf8f4af51bfa3d222233c1688384e68142b1e 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.1.90</version> + <version>1.2.0</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 1575849062bf4d5594219ddcd67d6007e3ba6435..29a06cfee06d9eaee0e3715fdde7dd9c43c1ee2e 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.1.90</version> + <version>1.2.0</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 e33367d25b004ff8f8e389d51b82af2e383b6534..f919a265d1008bae55bc61e4dd8ffaf7eed4af1a 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.1.90</version> + <version>1.2.0</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 e0aba161d53931750816bfb5d73a8176a0447d4c..d42f0169e0c07ebf8ac845ca8038efd0c4e82363 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.1.90</version> + <version>1.2.0</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 6ba2f8559a7ff0a7e638e26222c2c1efe67f9d87..c50bf172cb2f6dffe692162d35977a88c744c087 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.1.90</version> + <version>1.2.0</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 2fd898a7063104b3bfe38b72ab957059e9142f50..ce8c52603ab6701a1cc4817d9b1608aba35bc532 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.1.90</version> + <version>1.2.0</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 9a006484afa0668baf88d88d94609c301d562880..a70983cd86b55a14a4c597d875c3685188a940e4 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.1.90</version> + <version>1.2.0</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 027d41e0c556e9c7f3d3398125f4548414d8a152..cff3b4885fd7787dd7887a2c8a623130bcc3fe63 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.1.90</version> + <version>1.2.0</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 da99191c19b8c1a14f7e1acb02bf1e9253a6e006..349a008d4766ab8a690caaee5103ff0be9bb7e1f 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.1.90</version> + <version>1.2.0</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 07be7d646bd255a51b804ef917af871055f7f740..8603c773ac37fe69bb5786b26aaaf981f7fd49f4 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.1.90</version> + <version>1.2.0</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 a900246e411fb97146d1180fcbc358758eca5987..c2ea1ebba184e67680c2632f24799f479fda1a57 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.1.90</version> + <version>1.2.0</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 57a4101e153994926573a963c8287afeeb22789c..99668a26ce3427af1be4209654116575f5745b59 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.1.90</version> + <version>1.2.0</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 d132928f0aefb5cb6c097a706782c6a1963794ef..250d6475284ae65fab7b2905c71aa36d3a3b83b6 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.1.90</version> + <version>1.2.0</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 10b49eea394e2e4295ce3ab782badf37c1f84779..12b062866d97844a36f65c2d09c8d239d693386b 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.1.90</version> + <version>1.2.0</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 08d9bfc4bfd5d2e0c083ab7cee6ad70721df70f3..68cc83ab4ff93bd3cbb73c86b4b6046ac4e1a92e 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.1.90</version> + <version>1.2.0</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 f866910b94569b55cac39eceb741b42045173c63..ff91e1a66e7e1dae2ccd72a8eb6fbaf5ab7e8314 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.1.90</version> + <version>1.2.0</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 45d5519a0371d9a9707ef082971ee75027f0f4e1..db62d993eb54b745f9dd4f679b77207dcf707971 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.1.90</version> + <version>1.2.0</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/docs/plugins/inspect/plugin-ximagesrc.xml b/docs/plugins/inspect/plugin-ximagesrc.xml index b43ea0e4702b9dc3ed7bc48ede8735ee50a5a102..589a072743f7eee55318ae044a052fc9d61b2b1e 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.1.90</version> + <version>1.2.0</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 1f494c83a74560e32b7cff3cb2dd00f89570338f..089c1053fac40f6d0e0a2b5b8dda1de0cd9d6af5 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.1.90</version> + <version>1.2.0</version> <license>LGPL</license> <source>gst-plugins-good</source> <package>GStreamer Good Plug-ins source release</package> diff --git a/gst-plugins-good.doap b/gst-plugins-good.doap index 41693c709b097753208249b5e6a45580fc7ce1a1..b28dbe5073339e9a4d9f1f528c935f9e96d669f4 100644 --- a/gst-plugins-good.doap +++ b/gst-plugins-good.doap @@ -32,6 +32,16 @@ the plug-in code, LGPL or LGPL-compatible for the supporting library). </GitRepository> </repository> + <release> + <Version> + <revision>1.2.0</revision> + <branch>1.2</branch> + <name></name> + <created>2013-09-24</created> + <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-1.2.0.tar.xz" /> + </Version> + </release> + <release> <Version> <revision>1.1.90</revision> diff --git a/gst-plugins-good.spec b/gst-plugins-good.spec index c1ecd7301871c90b2321abfcc393b2eab9e7c892..29ecfc286917bb63e3b0385dbf2e1ee579c3a846 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.1.90 +Version: 1.2.0 Release: 1.gst Summary: GStreamer plug-ins with good code and licensing diff --git a/gst/alpha/gstalpha.c b/gst/alpha/gstalpha.c index 5213d2c7e6a2efcc3b0b1d87d6a995280e98a371..09ba0b0df205a1621a9c122f307c332727c3e99b 100644 --- a/gst/alpha/gstalpha.c +++ b/gst/alpha/gstalpha.c @@ -637,10 +637,10 @@ gst_alpha_set_argb_ayuv (const GstVideoFrame * in_frame, width = GST_VIDEO_FRAME_WIDTH (in_frame); height = GST_VIDEO_FRAME_HEIGHT (in_frame); - o[0] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 3); - o[1] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 0); - o[2] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 1); - o[3] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 2); + o[0] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 3); + o[1] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 0); + o[2] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 1); + o[3] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 2); memcpy (matrix, alpha->out_sdtv ? cog_rgb_to_ycbcr_matrix_8bit_sdtv : @@ -692,10 +692,10 @@ gst_alpha_chroma_key_argb_ayuv (const GstVideoFrame * in_frame, width = GST_VIDEO_FRAME_WIDTH (in_frame); height = GST_VIDEO_FRAME_HEIGHT (in_frame); - o[0] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 3); - o[1] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 0); - o[2] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 1); - o[3] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 2); + o[0] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 3); + o[1] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 0); + o[2] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 1); + o[3] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 2); smin = 128 - alpha->black_sensitivity; smax = 128 + alpha->white_sensitivity; @@ -750,15 +750,15 @@ gst_alpha_set_argb_argb (const GstVideoFrame * in_frame, width = GST_VIDEO_FRAME_WIDTH (in_frame); height = GST_VIDEO_FRAME_HEIGHT (in_frame); - p[0] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 3); - p[1] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 0); - p[2] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 1); - p[3] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 2); + p[0] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 3); + p[1] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 0); + p[2] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 1); + p[3] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 2); - o[0] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 3); - o[1] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 0); - o[2] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 1); - o[3] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 2); + o[0] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 3); + o[1] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 0); + o[2] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 1); + o[3] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 2); for (i = 0; i < height; i++) { for (j = 0; j < width; j++) { @@ -802,15 +802,15 @@ gst_alpha_chroma_key_argb_argb (const GstVideoFrame * in_frame, width = GST_VIDEO_FRAME_WIDTH (in_frame); height = GST_VIDEO_FRAME_HEIGHT (in_frame); - p[0] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 3); - p[1] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 0); - p[2] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 1); - p[3] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 2); + p[0] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 3); + p[1] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 0); + p[2] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 1); + p[3] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 2); - o[0] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 3); - o[1] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 0); - o[2] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 1); - o[3] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 2); + o[0] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 3); + o[1] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 0); + o[2] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 1); + o[3] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 2); smin = 128 - alpha->black_sensitivity; smax = 128 + alpha->white_sensitivity; @@ -870,10 +870,10 @@ gst_alpha_set_ayuv_argb (const GstVideoFrame * in_frame, width = GST_VIDEO_FRAME_WIDTH (in_frame); height = GST_VIDEO_FRAME_HEIGHT (in_frame); - p[0] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 3); - p[1] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 0); - p[2] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 1); - p[3] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 2); + p[0] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 3); + p[1] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 0); + p[2] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 1); + p[3] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 2); memcpy (matrix, alpha->in_sdtv ? cog_ycbcr_to_rgb_matrix_8bit_sdtv : @@ -925,10 +925,10 @@ gst_alpha_chroma_key_ayuv_argb (const GstVideoFrame * in_frame, width = GST_VIDEO_FRAME_WIDTH (in_frame); height = GST_VIDEO_FRAME_HEIGHT (in_frame); - p[0] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 3); - p[1] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 0); - p[2] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 1); - p[3] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 2); + p[0] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 3); + p[1] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 0); + p[2] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 1); + p[3] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 2); smin = 128 - alpha->black_sensitivity; smax = 128 + alpha->white_sensitivity; @@ -1121,9 +1121,9 @@ gst_alpha_set_rgb_ayuv (const GstVideoFrame * in_frame, height = GST_VIDEO_FRAME_HEIGHT (in_frame); bpp = GST_VIDEO_FRAME_COMP_PSTRIDE (in_frame, 0); - o[0] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 0); - o[1] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 1); - o[2] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 2); + o[0] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 0); + o[1] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 1); + o[2] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 2); memcpy (matrix, alpha->out_sdtv ? cog_rgb_to_ycbcr_matrix_8bit_sdtv : @@ -1178,9 +1178,9 @@ gst_alpha_chroma_key_rgb_ayuv (const GstVideoFrame * in_frame, bpp = GST_VIDEO_FRAME_COMP_PSTRIDE (in_frame, 0); - o[0] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 0); - o[1] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 1); - o[2] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 2); + o[0] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 0); + o[1] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 1); + o[2] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 2); smin = 128 - alpha->black_sensitivity; smax = 128 + alpha->white_sensitivity; @@ -1238,14 +1238,14 @@ gst_alpha_set_rgb_argb (const GstVideoFrame * in_frame, bpp = GST_VIDEO_FRAME_COMP_PSTRIDE (in_frame, 0); - o[0] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 0); - o[1] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 1); - o[2] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 2); + o[0] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 0); + o[1] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 1); + o[2] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 2); - p[0] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 3); - p[1] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 0); - p[2] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 1); - p[3] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 2); + p[0] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 3); + p[1] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 0); + p[2] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 1); + p[3] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 2); for (i = 0; i < height; i++) { for (j = 0; j < width; j++) { @@ -1292,14 +1292,14 @@ gst_alpha_chroma_key_rgb_argb (const GstVideoFrame * in_frame, bpp = GST_VIDEO_FRAME_COMP_PSTRIDE (in_frame, 0); - o[0] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 0); - o[1] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 1); - o[2] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 2); + o[0] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 0); + o[1] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 1); + o[2] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 2); - p[0] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 3); - p[1] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 0); - p[2] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 1); - p[3] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 2); + p[0] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 3); + p[1] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 0); + p[2] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 1); + p[3] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 2); smin = 128 - alpha->black_sensitivity; smax = 128 + alpha->white_sensitivity; @@ -1344,7 +1344,6 @@ static void gst_alpha_set_planar_yuv_ayuv (const GstVideoFrame * in_frame, GstVideoFrame * out_frame, GstAlpha * alpha) { - const guint8 *src; guint8 *dest; gint width, height; gint b_alpha = CLAMP ((gint) (alpha->alpha * 255), 0, 255); @@ -1355,7 +1354,6 @@ gst_alpha_set_planar_yuv_ayuv (const GstVideoFrame * in_frame, gint y_stride, uv_stride; gint v_subs, h_subs; - src = GST_VIDEO_FRAME_PLANE_DATA (in_frame, 0); dest = GST_VIDEO_FRAME_PLANE_DATA (out_frame, 0); width = GST_VIDEO_FRAME_WIDTH (in_frame); @@ -1364,9 +1362,9 @@ gst_alpha_set_planar_yuv_ayuv (const GstVideoFrame * in_frame, y_stride = GST_VIDEO_FRAME_COMP_STRIDE (in_frame, 0); uv_stride = GST_VIDEO_FRAME_COMP_STRIDE (in_frame, 1); - srcY_tmp = srcY = src; - srcU_tmp = srcU = src + GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 1); - srcV_tmp = srcV = src + GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 2); + srcY_tmp = srcY = GST_VIDEO_FRAME_COMP_DATA (in_frame, 0); + srcU_tmp = srcU = GST_VIDEO_FRAME_COMP_DATA (in_frame, 1); + srcV_tmp = srcV = GST_VIDEO_FRAME_COMP_DATA (in_frame, 2); switch (GST_VIDEO_FRAME_FORMAT (in_frame)) { case GST_VIDEO_FORMAT_I420: @@ -1458,7 +1456,6 @@ static void gst_alpha_chroma_key_planar_yuv_ayuv (const GstVideoFrame * in_frame, GstVideoFrame * out_frame, GstAlpha * alpha) { - const guint8 *src; guint8 *dest; gint width, height; gint b_alpha = CLAMP ((gint) (alpha->alpha * 255), 0, 255); @@ -1479,7 +1476,6 @@ gst_alpha_chroma_key_planar_yuv_ayuv (const GstVideoFrame * in_frame, guint8 kfgy_scale = alpha->kfgy_scale; guint noise_level2 = alpha->noise_level2; - src = GST_VIDEO_FRAME_PLANE_DATA (in_frame, 0); dest = GST_VIDEO_FRAME_PLANE_DATA (out_frame, 0); width = GST_VIDEO_FRAME_WIDTH (in_frame); @@ -1488,9 +1484,9 @@ gst_alpha_chroma_key_planar_yuv_ayuv (const GstVideoFrame * in_frame, y_stride = GST_VIDEO_FRAME_COMP_STRIDE (in_frame, 0); uv_stride = GST_VIDEO_FRAME_COMP_STRIDE (in_frame, 1); - srcY_tmp = srcY = src; - srcU_tmp = srcU = src + GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 1); - srcV_tmp = srcV = src + GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 2); + srcY_tmp = srcY = GST_VIDEO_FRAME_COMP_DATA (in_frame, 0); + srcU_tmp = srcU = GST_VIDEO_FRAME_COMP_DATA (in_frame, 1); + srcV_tmp = srcV = GST_VIDEO_FRAME_COMP_DATA (in_frame, 2); switch (GST_VIDEO_FRAME_FORMAT (in_frame)) { case GST_VIDEO_FORMAT_I420: @@ -1597,7 +1593,6 @@ static void gst_alpha_set_planar_yuv_argb (const GstVideoFrame * in_frame, GstVideoFrame * out_frame, GstAlpha * alpha) { - const guint8 *src; guint8 *dest; gint width, height; gint b_alpha = CLAMP ((gint) (alpha->alpha * 255), 0, 255); @@ -1612,23 +1607,22 @@ gst_alpha_set_planar_yuv_argb (const GstVideoFrame * in_frame, gint r, g, b; gint p[4]; - src = GST_VIDEO_FRAME_PLANE_DATA (in_frame, 0); dest = GST_VIDEO_FRAME_PLANE_DATA (out_frame, 0); width = GST_VIDEO_FRAME_WIDTH (in_frame); height = GST_VIDEO_FRAME_HEIGHT (in_frame); - p[0] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 3); - p[1] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 0); - p[2] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 1); - p[3] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 2); + p[0] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 3); + p[1] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 0); + p[2] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 1); + p[3] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 2); y_stride = GST_VIDEO_FRAME_COMP_STRIDE (in_frame, 0); uv_stride = GST_VIDEO_FRAME_COMP_STRIDE (in_frame, 1); - srcY_tmp = srcY = src; - srcU_tmp = srcU = src + GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 1); - srcV_tmp = srcV = src + GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 2); + srcY_tmp = srcY = GST_VIDEO_FRAME_COMP_DATA (in_frame, 0); + srcU_tmp = srcU = GST_VIDEO_FRAME_COMP_DATA (in_frame, 1); + srcV_tmp = srcV = GST_VIDEO_FRAME_COMP_DATA (in_frame, 2); switch (GST_VIDEO_FRAME_FORMAT (in_frame)) { case GST_VIDEO_FORMAT_I420: @@ -1693,7 +1687,6 @@ static void gst_alpha_chroma_key_planar_yuv_argb (const GstVideoFrame * in_frame, GstVideoFrame * out_frame, GstAlpha * alpha) { - const guint8 *src; guint8 *dest; gint width, height; gint b_alpha = CLAMP ((gint) (alpha->alpha * 255), 0, 255); @@ -1717,23 +1710,22 @@ gst_alpha_chroma_key_planar_yuv_argb (const GstVideoFrame * in_frame, gint matrix[12]; gint p[4]; - src = GST_VIDEO_FRAME_PLANE_DATA (in_frame, 0); dest = GST_VIDEO_FRAME_PLANE_DATA (out_frame, 0); width = GST_VIDEO_FRAME_WIDTH (in_frame); height = GST_VIDEO_FRAME_HEIGHT (in_frame); - p[0] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 3); - p[1] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 0); - p[2] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 1); - p[3] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 2); + p[0] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 3); + p[1] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 0); + p[2] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 1); + p[3] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 2); y_stride = GST_VIDEO_FRAME_COMP_STRIDE (in_frame, 0); uv_stride = GST_VIDEO_FRAME_COMP_STRIDE (in_frame, 1); - srcY_tmp = srcY = src; - srcU_tmp = srcU = src + GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 1); - srcV_tmp = srcV = src + GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 2); + srcY_tmp = srcY = GST_VIDEO_FRAME_COMP_DATA (in_frame, 0); + srcU_tmp = srcU = GST_VIDEO_FRAME_COMP_DATA (in_frame, 1); + srcV_tmp = srcV = GST_VIDEO_FRAME_COMP_DATA (in_frame, 2); switch (GST_VIDEO_FRAME_FORMAT (in_frame)) { case GST_VIDEO_FORMAT_I420: @@ -1823,10 +1815,10 @@ gst_alpha_set_packed_422_ayuv (const GstVideoFrame * in_frame, src_stride = GST_VIDEO_FRAME_COMP_STRIDE (in_frame, 0); - p[0] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 0); + p[0] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 0); p[2] = p[0] + 2; - p[1] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 1); - p[3] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 2); + p[1] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 1); + p[3] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 2); if (alpha->in_sdtv != alpha->out_sdtv) { gint matrix[12]; @@ -1953,10 +1945,10 @@ gst_alpha_chroma_key_packed_422_ayuv (const GstVideoFrame * in_frame, src_stride = GST_VIDEO_FRAME_COMP_STRIDE (in_frame, 0); - p[0] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 0); + p[0] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 0); p[2] = p[0] + 2; - p[1] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 1); - p[3] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 2); + p[1] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 1); + p[3] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 2); smin = 128 - alpha->black_sensitivity; smax = 128 + alpha->white_sensitivity; @@ -2101,15 +2093,15 @@ gst_alpha_set_packed_422_argb (const GstVideoFrame * in_frame, src_stride = GST_VIDEO_FRAME_COMP_STRIDE (in_frame, 0); - o[0] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 0); + o[0] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 0); o[2] = o[0] + 2; - o[1] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 1); - o[3] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 2); + o[1] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 1); + o[3] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 2); - p[0] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 3); - p[1] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 0); - p[2] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 1); - p[3] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 2); + p[0] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 3); + p[1] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 0); + p[2] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 1); + p[3] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 2); memcpy (matrix, alpha->in_sdtv ? cog_ycbcr_to_rgb_matrix_8bit_sdtv : @@ -2190,15 +2182,15 @@ gst_alpha_chroma_key_packed_422_argb (const GstVideoFrame * in_frame, src_stride = GST_VIDEO_FRAME_COMP_STRIDE (in_frame, 0); - o[0] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 0); + o[0] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 0); o[2] = o[0] + 2; - o[1] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 1); - o[3] = GST_VIDEO_FRAME_COMP_OFFSET (in_frame, 2); + o[1] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 1); + o[3] = GST_VIDEO_FRAME_COMP_POFFSET (in_frame, 2); - p[0] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 3); - p[1] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 0); - p[2] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 1); - p[3] = GST_VIDEO_FRAME_COMP_OFFSET (out_frame, 2); + p[0] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 3); + p[1] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 0); + p[2] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 1); + p[3] = GST_VIDEO_FRAME_COMP_POFFSET (out_frame, 2); memcpy (matrix, alpha->in_sdtv ? cog_ycbcr_to_rgb_matrix_8bit_sdtv : diff --git a/gst/goom/mmx.h b/gst/goom/mmx.h index 3fae26b9854224e11c9e504406e4870041b4bd50..2649e109ea065d524105665a6391571282fcc3f4 100644 --- a/gst/goom/mmx.h +++ b/gst/goom/mmx.h @@ -711,17 +711,29 @@ void zoom_filter_xmmx (int prevX, int prevY, Pixel *expix1, Pixel *expix2, */ #ifdef MMX_TRACE +#ifdef __clang__ +#define emms() \ + { \ + printf("emms()\n"); \ + __asm__ __volatile__ ("emms"); \ + } +#else #define emms() \ { \ printf("emms()\n"); \ __asm__ __volatile__ ("emms" \ "st(1)","st(2)","st(3)","st(4)","st(5)","st(6)","st(7)"); \ } +#endif #else +#ifdef __clang__ +#define emms() __asm__ __volatile__ ("emms") +#else #define emms() __asm__ __volatile__ ("emms"::: \ "st(1)","st(2)","st(3)","st(4)","st(5)","st(6)","st(7)") +#endif #endif diff --git a/gst/isomp4/gstqtmux.c b/gst/isomp4/gstqtmux.c index 710d0dad647277e9aee139f5acf2f26db77af830..58533a455b4ec0520b6b9759a85294683e06a815 100644 --- a/gst/isomp4/gstqtmux.c +++ b/gst/isomp4/gstqtmux.c @@ -196,7 +196,7 @@ enum #define DEFAULT_FAST_START_TEMP_FILE NULL #define DEFAULT_MOOV_RECOV_FILE NULL #define DEFAULT_FRAGMENT_DURATION 0 -#define DEFAULT_STREAMABLE FALSE +#define DEFAULT_STREAMABLE TRUE #ifndef GST_REMOVE_DEPRECATED #define DEFAULT_DTS_METHOD DTS_METHOD_REORDER #endif @@ -278,6 +278,10 @@ gst_qt_mux_class_init (GstQTMuxClass * klass) { GObjectClass *gobject_class; GstElementClass *gstelement_class; + const gchar *streamable_desc; + gboolean streamable; +#define STREAMABLE_DESC "If set to true, the output should be as if it is to "\ + "be streamed and hence no indexes written or duration written." gobject_class = (GObjectClass *) klass; gstelement_class = (GstElementClass *) klass; @@ -288,6 +292,15 @@ gst_qt_mux_class_init (GstQTMuxClass * klass) gobject_class->get_property = gst_qt_mux_get_property; gobject_class->set_property = gst_qt_mux_set_property; + if (klass->format == GST_QT_MUX_FORMAT_ISML) { + streamable_desc = STREAMABLE_DESC; + streamable = DEFAULT_STREAMABLE; + } else { + streamable_desc = + STREAMABLE_DESC " (DEPRECATED, only valid for fragmented MP4)"; + streamable = FALSE; + } + g_object_class_install_property (gobject_class, PROP_MOVIE_TIMESCALE, g_param_spec_uint ("movie-timescale", "Movie timescale", "Timescale to use in the movie (units per second)", @@ -337,10 +350,8 @@ gst_qt_mux_class_init (GstQTMuxClass * klass) 2000 : DEFAULT_FRAGMENT_DURATION, G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_STREAMABLE, - g_param_spec_boolean ("streamable", "Streamable", - "If set to true, the output should be as if it is to be streamed " - "and hence no indexes written or duration written.", - DEFAULT_STREAMABLE, + g_param_spec_boolean ("streamable", "Streamable", streamable_desc, + streamable, G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS)); gstelement_class->request_new_pad = @@ -1604,6 +1615,7 @@ serialize_error: static GstFlowReturn gst_qt_mux_start_file (GstQTMux * qtmux) { + GstQTMuxClass *qtmux_klass = (GstQTMuxClass *) (G_OBJECT_GET_CLASS (qtmux)); GstFlowReturn ret = GST_FLOW_OK; GstCaps *caps; GstSegment segment; @@ -1637,14 +1649,20 @@ gst_qt_mux_start_file (GstQTMux * qtmux) GST_WARNING_OBJECT (qtmux, "downstream did not handle seeking query"); seekable = FALSE; } + gst_query_unref (query); if (!seekable) { - qtmux->streamable = TRUE; - g_object_notify (G_OBJECT (qtmux), "streamable"); - GST_WARNING_OBJECT (qtmux, "downstream is not seekable, but " - "streamable=false. Will ignore that and create streamable output " - "instead"); + if (qtmux_klass->format != GST_QT_MUX_FORMAT_ISML) { + if (!qtmux->fast_start) { + goto not_seekable_error; + } + } else { + GST_WARNING_OBJECT (qtmux, "downstream is not seekable, but " + "streamable=false. Will ignore that and create streamable output " + "instead"); + qtmux->streamable = TRUE; + g_object_notify (G_OBJECT (qtmux), "streamable"); + } } - gst_query_unref (query); } /* let downstream know we think in BYTES and expect to do seeking later on */ @@ -1756,6 +1774,15 @@ gst_qt_mux_start_file (GstQTMux * qtmux) exit: return ret; +not_seekable_error: + { + GST_ELEMENT_ERROR (qtmux, STREAM, FAILED, + ("Downstream is not seekable and headers can't be rewritten"), + GST_ERROR_SYSTEM); + GST_OBJECT_UNLOCK (qtmux); + return GST_FLOW_ERROR; + } + /* ERRORS */ open_failed: { @@ -3399,9 +3426,14 @@ gst_qt_mux_set_property (GObject * object, case PROP_FRAGMENT_DURATION: qtmux->fragment_duration = g_value_get_uint (value); break; - case PROP_STREAMABLE: - qtmux->streamable = g_value_get_boolean (value); + case PROP_STREAMABLE:{ + GstQTMuxClass *qtmux_klass = + (GstQTMuxClass *) (G_OBJECT_GET_CLASS (qtmux)); + if (qtmux_klass->format == GST_QT_MUX_FORMAT_ISML) { + qtmux->streamable = g_value_get_boolean (value); + } break; + } default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; diff --git a/gst/matroska/matroska-demux.c b/gst/matroska/matroska-demux.c index d5d705eae717a1551a3980f7f2a6eac34b9382b5..d7b8901b5a86e12e77e6dd0edfab092aa5baaf60 100644 --- a/gst/matroska/matroska-demux.c +++ b/gst/matroska/matroska-demux.c @@ -3060,6 +3060,23 @@ gst_matroska_demux_check_subtitle_buffer (GstElement * element, gst_buffer_map (*buf, &map, GST_MAP_READ); next: + /* Need \0-terminator at the end */ + if (map.data[map.size - 1] != '\0') { + newbuf = gst_buffer_new_and_alloc (map.size + 1); + + /* Copy old buffer and add a 0 at the end */ + gst_buffer_fill (newbuf, 0, map.data, map.size); + gst_buffer_memset (newbuf, map.size, 0, 1); + gst_buffer_unmap (*buf, &map); + + gst_buffer_copy_into (newbuf, *buf, + GST_BUFFER_COPY_TIMESTAMPS | GST_BUFFER_COPY_FLAGS | + GST_BUFFER_COPY_META, 0, -1); + gst_buffer_unref (*buf); + *buf = newbuf; + gst_buffer_map (*buf, &map, GST_MAP_READ); + } + if (sub_stream->check_markup) { /* caps claim markup text, so we need to escape text, * except if text is already markup and then needs no further escaping */ diff --git a/gst/rtpmanager/gstrtpbin.c b/gst/rtpmanager/gstrtpbin.c index 4236cd160b1280e6c7b7d9cc54dc2102037688a3..e615c94e11a9178ecbd6e9236fbd7f659f30ad20 100644 --- a/gst/rtpmanager/gstrtpbin.c +++ b/gst/rtpmanager/gstrtpbin.c @@ -633,13 +633,13 @@ create_session (GstRtpBin * rtpbin, gint id) /* ERRORS */ no_session: { - g_warning ("rtpbin: could not create gstrtpsession element"); + g_warning ("rtpbin: could not create rtpsession element"); return NULL; } no_demux: { gst_object_unref (session); - g_warning ("rtpbin: could not create gstrtpssrcdemux element"); + g_warning ("rtpbin: could not create rtpssrcdemux element"); return NULL; } } @@ -1465,13 +1465,13 @@ create_stream (GstRtpBinSession * session, guint32 ssrc) /* ERRORS */ no_jitterbuffer: { - g_warning ("rtpbin: could not create gstrtpjitterbuffer element"); + g_warning ("rtpbin: could not create rtpjitterbuffer element"); return NULL; } no_demux: { gst_object_unref (buffer); - g_warning ("rtpbin: could not create gstrtpptdemux element"); + g_warning ("rtpbin: could not create rtpptdemux element"); return NULL; } } @@ -2598,7 +2598,7 @@ new_ssrc_pad_found (GstElement * element, guint ssrc, GstPad * pad, stream->demux_ptchange_sig = g_signal_connect (stream->demux, "payload-type-change", (GCallback) payload_type_change, session); } else { - /* add gstrtpjitterbuffer src pad to pads */ + /* add rtpjitterbuffer src pad to pads */ GstElementClass *klass; GstPadTemplate *templ; gchar *padname; diff --git a/gst/rtpmanager/gstrtpjitterbuffer.c b/gst/rtpmanager/gstrtpjitterbuffer.c index bf676e6eeb9867e07d88366f194d5bf8abce1818..2fb633b548f2e77f5271abf9d1f94423e054fb43 100644 --- a/gst/rtpmanager/gstrtpjitterbuffer.c +++ b/gst/rtpmanager/gstrtpjitterbuffer.c @@ -24,27 +24,69 @@ */ /** - * SECTION:element-gstrtpjitterbuffer + * SECTION:element-rtpjitterbuffer * * This element reorders and removes duplicate RTP packets as they are received - * from a network source. It will also wait for missing packets up to a - * configurable time limit using the #GstRtpJitterBuffer:latency property. - * Packets arriving too late are considered to be lost packets. - * - * This element acts as a live element and so adds #GstRtpJitterBuffer:latency - * to the pipeline. + * from a network source. * * The element needs the clock-rate of the RTP payload in order to estimate the * delay. This information is obtained either from the caps on the sink pad or, * when no caps are present, from the #GstRtpJitterBuffer::request-pt-map signal. * To clear the previous pt-map use the #GstRtpJitterBuffer::clear-pt-map signal. * - * This element will automatically be used inside gstrtpbin. + * The rtpjitterbuffer will wait for missing packets up to a configurable time + * limit using the #GstRtpJitterBuffer:latency property. Packets arriving too + * late are considered to be lost packets. If the #GstRtpJitterBuffer:do-lost + * property is set, lost packets will result in a custom serialized downstream + * event of name GstRTPPacketLost. The lost packet events are usually used by a + * depayloader or other element to create concealment data or some other logic + * to gracefully handle the missing packets. + * + * The jitterbuffer will use the DTS (or PTS if no DTS is set) of the incomming + * buffer and the rtptime inside the RTP packet to create a PTS on the outgoing + * buffer. + * + * The jitterbuffer can also be configured to send early retransmission events + * upstream by setting the #GstRtpJitterBuffer:do-retransmission property. In + * this mode, the jitterbuffer tries to estimate when a packet should arrive and + * sends a custom upstream event named GstRTPRetransmissionRequest when the + * packet is considered late. The initial expected packet arrival time is + * calculated as follows: + * + * - If seqnum N arrived at time T, seqnum N+1 is expected to arrive at + * T + packet-spacing + #GstRtpJitterBuffer:rtx-delay. The packet spacing is + * calculated from the DTS (or PTS is no DTS) of two consecutive RTP + * packets with different rtptime. + * + * - If seqnum N0 arrived at time T0 and seqnum Nm arrived at time Tm, + * seqnum Ni is expected at time Ti = T0 + i*(Tm - T0)/(Nm - N0). Any + * previously scheduled timeout is overwritten. + * + * - If seqnum N arrived, all seqnum older than + * N - #GstRtpJitterBuffer:rtx-delay-reorder are considered late + * immediately. This is to request fast feedback for abonormally reorder + * packets before any of the previous timeouts is triggered. + * + * A late packet triggers the GstRTPRetransmissionRequest custom upstream + * event. After the initial timeout expires and the retransmission event is + * sent, the timeout is scheduled for + * T + #GstRtpJitterBuffer:rtx-retry-timeout. If the missing packet did not + * arrive after #GstRtpJitterBuffer:rtx-retry-timeout, a new + * GstRTPRetransmissionRequest is sent upstream and the timeout is rescheduled + * again for T + #GstRtpJitterBuffer:rtx-retry-timeout. This repeats until + * #GstRtpJitterBuffer:rtx-retry-period elapsed, at which point no further + * retransmission requests are sent and the regular logic is performed to + * schedule a lost packet as discussed above. + * + * This element acts as a live element and so adds #GstRtpJitterBuffer:latency + * to the pipeline. + * + * This element will automatically be used inside rtpbin. * * <refsect2> * <title>Example pipelines</title> * |[ - * gst-launch-1.0 rtspsrc location=rtsp://192.168.1.133:8554/mpeg1or2AudioVideoTest ! gstrtpjitterbuffer ! rtpmpvdepay ! mpeg2dec ! xvimagesink + * gst-launch-1.0 rtspsrc location=rtsp://192.168.1.133:8554/mpeg1or2AudioVideoTest ! rtpjitterbuffer ! rtpmpvdepay ! mpeg2dec ! xvimagesink * ]| Connect to a streaming server and decode the MPEG video. The jitterbuffer is * inserted into the pipeline to smooth out network jitter and to reorder the * out-of-order RTP packets. @@ -244,6 +286,7 @@ typedef struct GstClockTime timeout; GstClockTime duration; GstClockTime rtx_base; + GstClockTime rtx_delay; GstClockTime rtx_retry; } TimerData; @@ -448,7 +491,7 @@ gst_rtp_jitter_buffer_class_init (GstRtpJitterBufferClass * klass) g_param_spec_int ("rtx-delay", "RTX Delay", "Extra time in ms to wait before sending retransmission " "event (-1 automatic)", -1, G_MAXINT, DEFAULT_RTX_DELAY, - G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /** * GstRtpJitterBuffer::rtx-delay-reorder: * @@ -464,7 +507,7 @@ gst_rtp_jitter_buffer_class_init (GstRtpJitterBufferClass * klass) g_param_spec_int ("rtx-delay-reorder", "RTX Delay Reorder", "Sending retransmission event when this much reordering (-1 automatic)", -1, G_MAXINT, DEFAULT_RTX_DELAY_REORDER, - G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /** * GstRtpJitterBuffer::rtx-retry-timeout: * @@ -480,7 +523,7 @@ gst_rtp_jitter_buffer_class_init (GstRtpJitterBufferClass * klass) g_param_spec_int ("rtx-retry-timeout", "RTX Retry Timeout", "Retry sending a transmission event after this timeout in " "ms (-1 automatic)", -1, G_MAXINT, DEFAULT_RTX_RETRY_TIMEOUT, - G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /** * GstRtpJitterBuffer::rtx-retry-period: * @@ -495,7 +538,7 @@ gst_rtp_jitter_buffer_class_init (GstRtpJitterBufferClass * klass) g_param_spec_int ("rtx-retry-period", "RTX Retry Period", "Try to get a retransmission for this many ms " "(-1 automatic)", -1, G_MAXINT, DEFAULT_RTX_RETRY_PERIOD, - G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /** * GstRtpJitterBuffer::request-pt-map: @@ -592,7 +635,7 @@ gst_rtp_jitter_buffer_class_init (GstRtpJitterBufferClass * klass) klass->set_active = GST_DEBUG_FUNCPTR (gst_rtp_jitter_buffer_set_active); GST_DEBUG_CATEGORY_INIT - (rtpjitterbuffer_debug, "gstrtpjitterbuffer", 0, "RTP Jitter Buffer"); + (rtpjitterbuffer_debug, "rtpjitterbuffer", 0, "RTP Jitter Buffer"); } static void @@ -653,19 +696,52 @@ gst_rtp_jitter_buffer_init (GstRtpJitterBuffer * jitterbuffer) GST_OBJECT_FLAG_SET (jitterbuffer, GST_ELEMENT_FLAG_PROVIDE_CLOCK); } +#define ITEM_TYPE_BUFFER 0 +#define ITEM_TYPE_LOST 1 + +static RTPJitterBufferItem * +alloc_item (gpointer data, guint type, GstClockTime dts, GstClockTime pts, + guint seqnum, guint rtptime) +{ + RTPJitterBufferItem *item; + + item = g_slice_new (RTPJitterBufferItem); + item->data = data; + item->next = NULL; + item->prev = NULL; + item->type = type; + item->dts = dts; + item->pts = pts; + item->seqnum = seqnum; + item->rtptime = rtptime; + + return item; +} + +static void +free_item (RTPJitterBufferItem * item) +{ + if (item->data) + gst_mini_object_unref (item->data); + g_slice_free (RTPJitterBufferItem, item); +} + static void gst_rtp_jitter_buffer_finalize (GObject * object) { GstRtpJitterBuffer *jitterbuffer; + GstRtpJitterBufferPrivate *priv; jitterbuffer = GST_RTP_JITTER_BUFFER (object); + priv = jitterbuffer->priv; - g_array_free (jitterbuffer->priv->timers, TRUE); - g_mutex_clear (&jitterbuffer->priv->jbuf_lock); - g_cond_clear (&jitterbuffer->priv->jbuf_timer); - g_cond_clear (&jitterbuffer->priv->jbuf_event); + g_array_free (priv->timers, TRUE); + g_mutex_clear (&priv->jbuf_lock); + g_cond_clear (&priv->jbuf_timer); + g_cond_clear (&priv->jbuf_event); - g_object_unref (jitterbuffer->priv->jbuf); + rtp_jitter_buffer_flush (priv->jbuf, (GFunc) free_item, NULL); + g_object_unref (priv->jbuf); G_OBJECT_CLASS (parent_class)->finalize (object); } @@ -767,12 +843,12 @@ gst_rtp_jitter_buffer_request_new_pad (GstElement * element, /* ERRORS */ wrong_template: { - g_warning ("gstrtpjitterbuffer: this is not our template"); + g_warning ("rtpjitterbuffer: this is not our template"); return NULL; } exists: { - g_warning ("gstrtpjitterbuffer: pad already requested"); + g_warning ("rtpjitterbuffer: pad already requested"); return NULL; } } @@ -837,7 +913,7 @@ gst_rtp_jitter_buffer_set_active (GstRtpJitterBuffer * jbuf, gboolean active, { GstRtpJitterBufferPrivate *priv; GstClockTime last_out; - GstBuffer *head; + RTPJitterBufferItem *item; priv = jbuf->priv; @@ -858,9 +934,9 @@ gst_rtp_jitter_buffer_set_active (GstRtpJitterBuffer * jbuf, gboolean active, if (!active) { rtp_jitter_buffer_set_buffering (priv->jbuf, TRUE); } - if ((head = rtp_jitter_buffer_peek (priv->jbuf))) { + if ((item = rtp_jitter_buffer_peek (priv->jbuf))) { /* head buffer timestamp and offset gives our output time */ - last_out = GST_BUFFER_DTS (head) + priv->ts_offset; + last_out = item->dts + priv->ts_offset; } else { /* use last known time when the buffer is empty */ last_out = priv->last_out_time; @@ -936,6 +1012,8 @@ gst_jitter_buffer_sink_parse_caps (GstRtpJitterBuffer * jitterbuffer, GST_DEBUG_OBJECT (jitterbuffer, "got clock-rate %d", priv->clock_rate); + rtp_jitter_buffer_set_clock_rate (priv->jbuf, 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)) @@ -1003,9 +1081,6 @@ gst_rtp_jitter_buffer_flush_start (GstRtpJitterBuffer * jitterbuffer) GST_DEBUG_OBJECT (jitterbuffer, "Disabling pop on queue"); /* this unblocks any waiting pops on the src pad task */ JBUF_SIGNAL_EVENT (priv); - /* unlock clock, we just unschedule, the entry will be released by the - * locking streaming thread. */ - unschedule_current_timer (jitterbuffer); JBUF_UNLOCK (priv); } @@ -1034,7 +1109,7 @@ gst_rtp_jitter_buffer_flush_stop (GstRtpJitterBuffer * jitterbuffer) priv->last_elapsed = 0; priv->ext_timestamp = -1; GST_DEBUG_OBJECT (jitterbuffer, "flush and reset jitterbuffer"); - rtp_jitter_buffer_flush (priv->jbuf); + rtp_jitter_buffer_flush (priv->jbuf, (GFunc) free_item, NULL); rtp_jitter_buffer_reset_skew (priv->jbuf); remove_all_timers (jitterbuffer); JBUF_UNLOCK (priv); @@ -1136,6 +1211,7 @@ gst_rtp_jitter_buffer_change_state (GstElement * element, JBUF_LOCK (priv); gst_buffer_replace (&priv->last_sr, NULL); priv->timer_running = FALSE; + unschedule_current_timer (jitterbuffer); JBUF_SIGNAL_TIMER (priv); JBUF_UNLOCK (priv); g_thread_join (priv->timer_thread); @@ -1449,6 +1525,7 @@ unschedule_current_timer (GstRtpJitterBuffer * jitterbuffer) if (priv->clock_id) { GST_DEBUG_OBJECT (jitterbuffer, "unschedule current timer"); gst_clock_id_unschedule (priv->clock_id); + priv->clock_id = NULL; } } @@ -1487,15 +1564,16 @@ recalculate_timer (GstRtpJitterBuffer * jitterbuffer, TimerData * timer) static TimerData * add_timer (GstRtpJitterBuffer * jitterbuffer, TimerType type, - guint16 seqnum, guint num, GstClockTime timeout, GstClockTime duration) + guint16 seqnum, guint num, GstClockTime timeout, GstClockTime delay, + GstClockTime duration) { GstRtpJitterBufferPrivate *priv = jitterbuffer->priv; TimerData *timer; gint len; GST_DEBUG_OBJECT (jitterbuffer, - "add timer for seqnum %d to %" GST_TIME_FORMAT, - seqnum, GST_TIME_ARGS (timeout)); + "add timer for seqnum %d to %" GST_TIME_FORMAT ", delay %" + GST_TIME_FORMAT, seqnum, GST_TIME_ARGS (timeout), GST_TIME_ARGS (delay)); len = priv->timers->len; g_array_set_size (priv->timers, len + 1); @@ -1504,10 +1582,11 @@ add_timer (GstRtpJitterBuffer * jitterbuffer, TimerType type, timer->type = type; timer->seqnum = seqnum; timer->num = num; - timer->timeout = timeout; + timer->timeout = timeout + delay; timer->duration = duration; if (type == TIMER_TYPE_EXPECTED) { timer->rtx_base = timeout; + timer->rtx_delay = delay; timer->rtx_retry = 0; } recalculate_timer (jitterbuffer, timer); @@ -1518,7 +1597,7 @@ add_timer (GstRtpJitterBuffer * jitterbuffer, TimerType type, static void reschedule_timer (GstRtpJitterBuffer * jitterbuffer, TimerData * timer, - guint16 seqnum, GstClockTime timeout) + guint16 seqnum, GstClockTime timeout, GstClockTime delay, gboolean reset) { GstRtpJitterBufferPrivate *priv = jitterbuffer->priv; gboolean seqchange, timechange; @@ -1536,10 +1615,11 @@ reschedule_timer (GstRtpJitterBuffer * jitterbuffer, TimerData * timer, "replace timer for seqnum %d->%d to %" GST_TIME_FORMAT, oldseq, seqnum, GST_TIME_ARGS (timeout)); - timer->timeout = timeout; + timer->timeout = timeout + delay; timer->seqnum = seqnum; - if (seqchange && timer->type == TIMER_TYPE_EXPECTED) { + if (reset) { timer->rtx_base = timeout; + timer->rtx_delay = delay; timer->rtx_retry = 0; } @@ -1564,9 +1644,9 @@ set_timer (GstRtpJitterBuffer * jitterbuffer, TimerType type, /* find the seqnum timer */ timer = find_timer (jitterbuffer, type, seqnum); if (timer == NULL) { - timer = add_timer (jitterbuffer, type, seqnum, 0, timeout, -1); + timer = add_timer (jitterbuffer, type, seqnum, 0, timeout, 0, -1); } else { - reschedule_timer (jitterbuffer, timer, seqnum, timeout); + reschedule_timer (jitterbuffer, timer, seqnum, timeout, 0, FALSE); } return timer; } @@ -1633,21 +1713,24 @@ update_timers (GstRtpJitterBuffer * jitterbuffer, guint16 seqnum, /* max gap, we exceeded the max reorder distance and we don't expect the * missing packet to be this reordered */ if (test->rtx_retry == 0 && test->type == TIMER_TYPE_EXPECTED) - reschedule_timer (jitterbuffer, test, test->seqnum, -1); + reschedule_timer (jitterbuffer, test, test->seqnum, -1, 0, FALSE); } } if (priv->packet_spacing > 0 && do_next_seqnum && priv->do_retransmission) { - GstClockTime expected; + GstClockTime expected, delay; /* calculate expected arrival time of the next seqnum */ - expected = dts + priv->packet_spacing + (priv->rtx_delay * GST_MSECOND); + expected = dts + priv->packet_spacing; + delay = priv->rtx_delay * GST_MSECOND; + /* and update/install timer for next seqnum */ if (timer) - reschedule_timer (jitterbuffer, timer, priv->next_in_seqnum, expected); + reschedule_timer (jitterbuffer, timer, priv->next_in_seqnum, expected, + delay, TRUE); else add_timer (jitterbuffer, TIMER_TYPE_EXPECTED, priv->next_in_seqnum, 0, - expected, priv->packet_spacing); + expected, delay, priv->packet_spacing); } else if (timer && timer->type != TIMER_TYPE_DEADLINE) { /* if we had a timer, remove it, we don't know when to expect the next * packet. */ @@ -1683,6 +1766,9 @@ send_lost_event (GstRtpJitterBuffer * jitterbuffer, guint seqnum, gboolean late) { GstRtpJitterBufferPrivate *priv = jitterbuffer->priv; + guint next_seqnum; + GstEvent *event; + RTPJitterBufferItem *item; /* we had a gap and thus we lost some packets. Create an event for this. */ if (lost_packets > 1) @@ -1692,27 +1778,26 @@ send_lost_event (GstRtpJitterBuffer * jitterbuffer, guint seqnum, GST_DEBUG_OBJECT (jitterbuffer, "Packet #%d lost", seqnum); priv->num_late += lost_packets; - priv->discont = TRUE; - /* update our expected next packet but make sure the seqnum increases */ - if (seqnum + lost_packets > priv->next_seqnum) { - priv->next_seqnum = (seqnum + lost_packets) & 0xffff; - priv->last_popped_seqnum = seqnum; - priv->last_out_time = timestamp; - } - if (priv->do_lost) { - GstEvent *event; + next_seqnum = seqnum + lost_packets - 1; - /* create paket lost event */ - event = gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM, - gst_structure_new ("GstRTPPacketLost", - "seqnum", G_TYPE_UINT, (guint) seqnum, - "timestamp", G_TYPE_UINT64, timestamp, - "duration", G_TYPE_UINT64, duration, - "late", G_TYPE_BOOLEAN, late, NULL)); - JBUF_UNLOCK (priv); - gst_pad_push_event (priv->srcpad, event); - JBUF_LOCK (priv); + /* create paket lost event */ + event = gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM, + gst_structure_new ("GstRTPPacketLost", + "seqnum", G_TYPE_UINT, (guint) seqnum, + "timestamp", G_TYPE_UINT64, timestamp, + "duration", G_TYPE_UINT64, duration, + "late", G_TYPE_BOOLEAN, late, NULL)); + + item = alloc_item (event, ITEM_TYPE_LOST, -1, -1, next_seqnum, -1); + rtp_jitter_buffer_insert (priv->jbuf, item, NULL, NULL); + + if (seqnum == priv->next_seqnum) { + GST_DEBUG_OBJECT (jitterbuffer, "lost seqnum %d == %d next_seqnum -> %d", + seqnum, priv->next_seqnum, next_seqnum); + priv->next_seqnum = next_seqnum & 0xffff; + priv->last_popped_seqnum = next_seqnum; + priv->last_out_time = timestamp; } } @@ -1765,7 +1850,7 @@ calculate_expected (GstRtpJitterBuffer * jitterbuffer, guint32 expected, /* this timer will fire immediately and the lost event will be pushed from * the timer thread */ add_timer (jitterbuffer, TIMER_TYPE_LOST, expected, lost_packets, - priv->last_in_dts + duration, gap_time); + priv->last_in_dts + duration, 0, gap_time); expected += lost_packets; priv->last_in_dts += gap_time; @@ -1774,16 +1859,28 @@ calculate_expected (GstRtpJitterBuffer * jitterbuffer, guint32 expected, expected_dts = priv->last_in_dts + duration; if (priv->do_retransmission) { + TimerData *timer; + type = TIMER_TYPE_EXPECTED; - /* if we had a timer for the first missing packet, leave it. */ - if (find_timer (jitterbuffer, type, expected)) + /* if we had a timer for the first missing packet, update it. */ + if ((timer = find_timer (jitterbuffer, type, expected))) { + GstClockTime timeout = timer->timeout; + + timer->duration = duration; + if (timeout > expected_dts) { + GstClockTime delay = timeout - expected_dts - timer->rtx_retry; + reschedule_timer (jitterbuffer, timer, timer->seqnum, expected_dts, + delay, TRUE); + } expected++; + expected_dts += duration; + } } else { type = TIMER_TYPE_LOST; } while (expected < seqnum) { - add_timer (jitterbuffer, type, expected, 0, expected_dts, duration); + add_timer (jitterbuffer, type, expected, 0, expected_dts, 0, duration); expected_dts += duration; expected++; } @@ -1805,6 +1902,7 @@ gst_rtp_jitter_buffer_chain (GstPad * pad, GstObject * parent, guint8 pt; GstRTPBuffer rtp = GST_RTP_BUFFER_INIT; gboolean do_next_seqnum = FALSE; + RTPJitterBufferItem *item; jitterbuffer = GST_RTP_JITTER_BUFFER (parent); @@ -1917,7 +2015,7 @@ gst_rtp_jitter_buffer_chain (GstPad * pad, GstObject * parent, } if (G_UNLIKELY (reset)) { GST_DEBUG_OBJECT (jitterbuffer, "flush and reset jitterbuffer"); - rtp_jitter_buffer_flush (priv->jbuf); + rtp_jitter_buffer_flush (priv->jbuf, (GFunc) free_item, NULL); rtp_jitter_buffer_reset_skew (priv->jbuf); remove_all_timers (jitterbuffer); priv->last_popped_seqnum = -1; @@ -1966,28 +2064,22 @@ gst_rtp_jitter_buffer_chain (GstPad * pad, GstObject * parent, gst_util_uint64_scale_int (priv->latency_ms, priv->clock_rate, 1000); if (G_UNLIKELY (rtp_jitter_buffer_get_ts_diff (priv->jbuf) >= latency_ts)) { - GstBuffer *old_buf; - - old_buf = rtp_jitter_buffer_pop (priv->jbuf, &percent); + RTPJitterBufferItem *old_item; + old_item = rtp_jitter_buffer_pop (priv->jbuf, &percent); GST_DEBUG_OBJECT (jitterbuffer, "Queue full, dropping old packet %p", - old_buf); - - gst_buffer_unref (old_buf); + old_item); + free_item (old_item); } } - /* we need to make the metadata writable before pushing it in the jitterbuffer - * because the jitterbuffer will update the PTS */ - buffer = gst_buffer_make_writable (buffer); - GST_BUFFER_DTS (buffer) = dts; - GST_BUFFER_PTS (buffer) = pts; + item = alloc_item (buffer, ITEM_TYPE_BUFFER, dts, pts, seqnum, rtptime); /* now insert the packet into the queue in sorted order. This function returns * FALSE if a packet with the same seqnum was already in the queue, meaning we * have a duplicate. */ - if (G_UNLIKELY (!rtp_jitter_buffer_insert (priv->jbuf, buffer, dts, - priv->clock_rate, &tail, &percent))) + if (G_UNLIKELY (!rtp_jitter_buffer_insert (priv->jbuf, item, + &tail, &percent))) goto duplicate; /* update timers */ @@ -2064,23 +2156,20 @@ duplicate: GST_WARNING_OBJECT (jitterbuffer, "Duplicate packet #%d detected, dropping", seqnum); priv->num_duplicates++; - gst_buffer_unref (buffer); + free_item (item); goto finished; } } static GstClockTime -compute_elapsed (GstRtpJitterBuffer * jitterbuffer, GstBuffer * outbuf) +compute_elapsed (GstRtpJitterBuffer * jitterbuffer, RTPJitterBufferItem * item) { guint64 ext_time, elapsed; guint32 rtp_time; GstRtpJitterBufferPrivate *priv; - GstRTPBuffer rtp = GST_RTP_BUFFER_INIT; priv = jitterbuffer->priv; - gst_rtp_buffer_map (outbuf, GST_MAP_READ, &rtp); - rtp_time = gst_rtp_buffer_get_timestamp (&rtp); - gst_rtp_buffer_unmap (&rtp); + rtp_time = item->rtptime; GST_LOG_OBJECT (jitterbuffer, "rtp %" G_GUINT32_FORMAT ", ext %" G_GUINT64_FORMAT, rtp_time, priv->ext_timestamp); @@ -2101,7 +2190,8 @@ compute_elapsed (GstRtpJitterBuffer * jitterbuffer, GstBuffer * outbuf) } static void -update_estimated_eos (GstRtpJitterBuffer * jitterbuffer, GstBuffer * outbuf) +update_estimated_eos (GstRtpJitterBuffer * jitterbuffer, + RTPJitterBufferItem * item) { GstRtpJitterBufferPrivate *priv = jitterbuffer->priv; @@ -2109,7 +2199,7 @@ update_estimated_eos (GstRtpJitterBuffer * jitterbuffer, GstBuffer * outbuf) && priv->clock_base != -1 && priv->clock_rate > 0) { guint64 elapsed, estimated; - elapsed = compute_elapsed (jitterbuffer, outbuf); + elapsed = compute_elapsed (jitterbuffer, item); if (elapsed > priv->last_elapsed || !priv->last_elapsed) { guint64 left; @@ -2121,7 +2211,7 @@ update_estimated_eos (GstRtpJitterBuffer * jitterbuffer, GstBuffer * outbuf) GST_LOG_OBJECT (jitterbuffer, "left %" GST_TIME_FORMAT, GST_TIME_ARGS (left)); - out_time = GST_BUFFER_DTS (outbuf); + out_time = item->dts; if (elapsed > 0) estimated = gst_util_uint64_scale (out_time, left, elapsed); @@ -2151,58 +2241,85 @@ pop_and_push_next (GstRtpJitterBuffer * jitterbuffer, guint16 seqnum) { GstRtpJitterBufferPrivate *priv = jitterbuffer->priv; GstFlowReturn result; + RTPJitterBufferItem *item; GstBuffer *outbuf; + GstEvent *outevent; GstClockTime dts, pts; gint percent = -1; + gboolean is_buffer, do_push = TRUE; /* when we get here we are ready to pop and push the buffer */ - outbuf = rtp_jitter_buffer_pop (priv->jbuf, &percent); + item = rtp_jitter_buffer_pop (priv->jbuf, &percent); - check_buffering_percent (jitterbuffer, &percent); + is_buffer = GST_IS_BUFFER (item->data); - if (G_UNLIKELY (priv->discont)) { - /* set DISCONT flag when we missed a packet. We pushed the buffer writable - * into the jitterbuffer so we can modify now. */ - GST_DEBUG_OBJECT (jitterbuffer, "mark output buffer discont"); - GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT); - priv->discont = FALSE; - } - if (G_UNLIKELY (priv->ts_discont)) { - GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_RESYNC); - priv->ts_discont = FALSE; - } + if (is_buffer) { + check_buffering_percent (jitterbuffer, &percent); + + /* we need to make writable to change the flags and timestamps */ + outbuf = gst_buffer_make_writable (item->data); + + if (G_UNLIKELY (priv->discont)) { + /* set DISCONT flag when we missed a packet. We pushed the buffer writable + * into the jitterbuffer so we can modify now. */ + GST_DEBUG_OBJECT (jitterbuffer, "mark output buffer discont"); + GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT); + priv->discont = FALSE; + } + if (G_UNLIKELY (priv->ts_discont)) { + GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_RESYNC); + priv->ts_discont = FALSE; + } - dts = GST_BUFFER_DTS (outbuf); - pts = GST_BUFFER_PTS (outbuf); + dts = gst_segment_to_position (&priv->segment, GST_FORMAT_TIME, item->dts); + pts = gst_segment_to_position (&priv->segment, GST_FORMAT_TIME, item->pts); - dts = gst_segment_to_position (&priv->segment, GST_FORMAT_TIME, dts); - pts = gst_segment_to_position (&priv->segment, GST_FORMAT_TIME, pts); + /* apply timestamp with offset to buffer now */ + GST_BUFFER_DTS (outbuf) = apply_offset (jitterbuffer, dts); + GST_BUFFER_PTS (outbuf) = apply_offset (jitterbuffer, pts); - /* apply timestamp with offset to buffer now */ - GST_BUFFER_DTS (outbuf) = apply_offset (jitterbuffer, dts); - GST_BUFFER_PTS (outbuf) = apply_offset (jitterbuffer, pts); + /* update the elapsed time when we need to check against the npt stop time. */ + update_estimated_eos (jitterbuffer, item); - /* update the elapsed time when we need to check against the npt stop time. */ - update_estimated_eos (jitterbuffer, outbuf); + priv->last_out_time = GST_BUFFER_PTS (outbuf); + } else { + outevent = item->data; + if (item->type == ITEM_TYPE_LOST) { + priv->discont = TRUE; + if (!priv->do_lost) + do_push = FALSE; + } + } /* now we are ready to push the buffer. Save the seqnum and release the lock * so the other end can push stuff in the queue again. */ priv->last_popped_seqnum = seqnum; - priv->last_out_time = GST_BUFFER_PTS (outbuf); priv->next_seqnum = (seqnum + 1) & 0xffff; JBUF_UNLOCK (priv); - if (percent != -1) - post_buffering_percent (jitterbuffer, percent); + item->data = NULL; + free_item (item); - /* push buffer */ - GST_DEBUG_OBJECT (jitterbuffer, - "Pushing buffer %d, dts %" GST_TIME_FORMAT ", pts %" GST_TIME_FORMAT, - seqnum, GST_TIME_ARGS (GST_BUFFER_DTS (outbuf)), - GST_TIME_ARGS (GST_BUFFER_PTS (outbuf))); + if (is_buffer) { + /* push buffer */ + if (percent != -1) + post_buffering_percent (jitterbuffer, percent); - result = gst_pad_push (priv->srcpad, outbuf); + GST_DEBUG_OBJECT (jitterbuffer, + "Pushing buffer %d, dts %" GST_TIME_FORMAT ", pts %" GST_TIME_FORMAT, + seqnum, GST_TIME_ARGS (GST_BUFFER_DTS (outbuf)), + GST_TIME_ARGS (GST_BUFFER_PTS (outbuf))); + result = gst_pad_push (priv->srcpad, outbuf); + } else { + GST_DEBUG_OBJECT (jitterbuffer, "Pushing event %d", seqnum); + if (do_push) + gst_pad_push_event (priv->srcpad, outevent); + else + gst_event_unref (outevent); + + result = GST_FLOW_OK; + } JBUF_LOCK_CHECK (priv, out_flushing); return result; @@ -2225,11 +2342,10 @@ handle_next_buffer (GstRtpJitterBuffer * jitterbuffer) { GstRtpJitterBufferPrivate *priv = jitterbuffer->priv; GstFlowReturn result = GST_FLOW_OK; - GstBuffer *outbuf; + RTPJitterBufferItem *item; guint16 seqnum; guint32 next_seqnum; gint gap; - GstRTPBuffer rtp = { NULL, }; /* only push buffers when PLAYING and active and not buffering */ if (priv->blocked || !priv->active || @@ -2241,14 +2357,12 @@ again: * If all is fine, we'll pop and push it. If the sequence number is wrong we * wait for a timeout or something to change. * The peeked buffer is valid for as long as we hold the jitterbuffer lock. */ - outbuf = rtp_jitter_buffer_peek (priv->jbuf); - if (outbuf == NULL) + item = rtp_jitter_buffer_peek (priv->jbuf); + if (item == NULL) goto wait; /* get the seqnum and the next expected seqnum */ - gst_rtp_buffer_map (outbuf, GST_MAP_READ, &rtp); - seqnum = gst_rtp_buffer_get_seq (&rtp); - gst_rtp_buffer_unmap (&rtp); + seqnum = item->seqnum; next_seqnum = priv->next_seqnum; @@ -2268,12 +2382,13 @@ again: /* no missing packet, pop and push */ result = pop_and_push_next (jitterbuffer, seqnum); } else if (G_UNLIKELY (gap < 0)) { + RTPJitterBufferItem *item; /* if we have a packet that we already pushed or considered dropped, pop it * off and get the next packet */ GST_DEBUG_OBJECT (jitterbuffer, "Old packet #%d, next #%d dropping", seqnum, next_seqnum); - outbuf = rtp_jitter_buffer_pop (priv->jbuf, NULL); - gst_buffer_unref (outbuf); + item = rtp_jitter_buffer_pop (priv->jbuf, NULL); + free_item (item); goto again; } else { /* the chain function has scheduled timers to request retransmission or @@ -2311,11 +2426,12 @@ do_expected_timeout (GstRtpJitterBuffer * jitterbuffer, TimerData * timer, gst_structure_new ("GstRTPRetransmissionRequest", "seqnum", G_TYPE_UINT, (guint) timer->seqnum, "running-time", G_TYPE_UINT64, timer->rtx_base, - "delay", G_TYPE_UINT, GST_TIME_AS_MSECONDS (timer->rtx_retry), - "frequency", G_TYPE_UINT, priv->rtx_retry_timeout, - "period", G_TYPE_UINT, priv->rtx_retry_period, - "deadline", G_TYPE_UINT, priv->latency_ms, - "packet-spacing", G_TYPE_UINT64, priv->packet_spacing, NULL)); + "delay", G_TYPE_UINT, + GST_TIME_AS_MSECONDS (timer->rtx_delay + timer->rtx_retry), + "frequency", G_TYPE_UINT, priv->rtx_retry_timeout, "period", + G_TYPE_UINT, priv->rtx_retry_period, "deadline", G_TYPE_UINT, + priv->latency_ms, "packet-spacing", G_TYPE_UINT64, + priv->packet_spacing, NULL)); JBUF_UNLOCK (priv); gst_pad_push_event (priv->sinkpad, event); @@ -2323,15 +2439,17 @@ do_expected_timeout (GstRtpJitterBuffer * jitterbuffer, TimerData * timer, /* calculate the timeout for the next retransmission attempt */ timer->rtx_retry += (priv->rtx_retry_timeout * GST_MSECOND); - if (timer->rtx_retry > (priv->rtx_retry_period * GST_MSECOND)) { + if (timer->rtx_retry + timer->rtx_delay > + (priv->rtx_retry_period * GST_MSECOND)) { GST_DEBUG_OBJECT (jitterbuffer, "reschedule as LOST timer"); /* too many retransmission request, we now convert the timer * to a lost timer */ timer->type = TIMER_TYPE_LOST; + timer->rtx_delay = 0; timer->rtx_retry = 0; } reschedule_timer (jitterbuffer, timer, timer->seqnum, - timer->rtx_base + timer->rtx_retry); + timer->rtx_base + timer->rtx_retry, timer->rtx_delay, FALSE); return FALSE; } @@ -2356,10 +2474,13 @@ do_lost_timeout (GstRtpJitterBuffer * jitterbuffer, TimerData * timer, /* remove timer now */ remove_timer (jitterbuffer, timer); - JBUF_SIGNAL_EVENT (priv); + /* this releases the lock */ send_lost_event (jitterbuffer, seqnum, num, timestamp, duration, late); + /* now we can let the pushing thread try again */ + JBUF_SIGNAL_EVENT (priv); + return TRUE; } @@ -2440,17 +2561,31 @@ wait_next_timeout (GstRtpJitterBuffer * jitterbuffer) for (i = 0; i < len; i++) { TimerData *test = &g_array_index (priv->timers, TimerData, i); GstClockTime test_timeout = get_timeout (jitterbuffer, test); + gboolean save_best = FALSE; GST_DEBUG_OBJECT (jitterbuffer, "%d, %d, %d, %" GST_TIME_FORMAT, i, test->type, test->seqnum, GST_TIME_ARGS (test_timeout)); - /* no timestamp, timeout immeditately */ - if (test_timeout == -1 || test_timeout <= now) { - if (do_timeout (jitterbuffer, test, now)) - len--; - i--; - } else if (timer == NULL || test_timeout < timer_timeout) { - /* find the smallest timeout */ + /* find the smallest timeout */ + if (timer == NULL) { + save_best = TRUE; + } else if (timer_timeout == -1) { + /* we already have an immediate timeout, the new timer must be an + * immediate timer with smaller seqnum to become the best */ + if (test_timeout == -1 && test->seqnum < timer->seqnum) + save_best = TRUE; + } else if (test_timeout == -1) { + /* first immediate timer */ + save_best = TRUE; + } else if (test_timeout < timer_timeout) { + /* earlier timer */ + save_best = TRUE; + } else if (test_timeout == timer_timeout && test->seqnum < timer->seqnum) { + /* same timer, smaller seqnum */ + save_best = TRUE; + } + if (save_best) { + GST_DEBUG_OBJECT (jitterbuffer, "new best %d", i); timer = test; timer_timeout = test_timeout; } @@ -2462,6 +2597,14 @@ wait_next_timeout (GstRtpJitterBuffer * jitterbuffer) GstClockReturn ret; GstClockTimeDiff clock_jitter; + if (timer_timeout == -1 || timer_timeout <= now) { + do_timeout (jitterbuffer, timer, now); + /* check here, do_timeout could have released the lock */ + if (!priv->timer_running) + break; + continue; + } + GST_OBJECT_LOCK (jitterbuffer); clock = GST_ELEMENT_CLOCK (jitterbuffer); if (!clock) { @@ -2496,14 +2639,16 @@ wait_next_timeout (GstRtpJitterBuffer * jitterbuffer) if (!priv->timer_running) break; - GST_DEBUG_OBJECT (jitterbuffer, "sync done, %d, #%d, %" G_GINT64_FORMAT, - ret, priv->timer_seqnum, clock_jitter); + if (ret != GST_CLOCK_UNSCHEDULED) { + now = timer_timeout + MAX (clock_jitter, 0); + GST_DEBUG_OBJECT (jitterbuffer, "sync done, %d, #%d, %" G_GINT64_FORMAT, + ret, priv->timer_seqnum, clock_jitter); + } else { + GST_DEBUG_OBJECT (jitterbuffer, "sync unscheduled"); + } /* and free the entry */ gst_clock_id_unref (id); priv->clock_id = NULL; - - if (ret != GST_CLOCK_UNSCHEDULED) - now = timer_timeout + MAX (clock_jitter, 0); } else { /* no timers, wait for activity */ GST_DEBUG_OBJECT (jitterbuffer, "waiting"); diff --git a/gst/rtpmanager/gstrtpptdemux.c b/gst/rtpmanager/gstrtpptdemux.c index dbc0016ab28a6d13f6aa51b72d6f81e77f07c6fc..2c80ae0337f27695f622fdf9501852da4073c3e8 100644 --- a/gst/rtpmanager/gstrtpptdemux.c +++ b/gst/rtpmanager/gstrtpptdemux.c @@ -24,9 +24,9 @@ */ /** - * SECTION:element-gstrtpptdemux + * SECTION:element-rtpptdemux * - * gstrtpptdemux acts as a demuxer for RTP packets based on the payload type of + * rtpptdemux acts as a demuxer for RTP packets based on the payload type of * the packets. Its main purpose is to allow an application to easily receive * and decode an RTP stream with multiple payload types. * @@ -42,7 +42,7 @@ * <refsect2> * <title>Example pipelines</title> * |[ - * gst-launch-1.0 udpsrc caps="application/x-rtp" ! gstrtpptdemux ! fakesink + * gst-launch-1.0 udpsrc caps="application/x-rtp" ! rtpptdemux ! fakesink * ]| Takes an RTP stream and send the RTP packets with the first detected * payload type to fakesink, discarding the other payload types. * </refsect2> diff --git a/gst/rtpmanager/gstrtpsession.c b/gst/rtpmanager/gstrtpsession.c index a445be97e547c5e2e23b9205a5d5aab6fb4ac68c..6ff65ebf71efdf37bd43529dabce6cf10dcdbb5b 100644 --- a/gst/rtpmanager/gstrtpsession.c +++ b/gst/rtpmanager/gstrtpsession.c @@ -18,10 +18,10 @@ */ /** - * SECTION:element-gstrtpsession - * @see_also: gstrtpjitterbuffer, gstrtpbin, gstrtpptdemux, gstrtpssrcdemux + * SECTION:element-rtpsession + * @see_also: rtpjitterbuffer, rtpbin, rtpptdemux, rtpssrcdemux * - * The RTP session manager models one participant with a unique SSRC in an RTP + * The RTP session manager models participants with unique SSRC in an RTP * session. This session can be used to send and receive RTP and RTCP packets. * Based on what REQUEST pads are requested from the session manager, specific * functionality can be activated. @@ -40,9 +40,12 @@ * <listitem> * <para>Scheduling of RR/SR RTCP packets.</para> * </listitem> + * <listitem> + * <para>Support for multiple sender SSRC.</para> + * </listitem> * </itemizedlist> * - * The gstrtpsession will not demux packets based on SSRC or payload type, nor will + * The rtpsession will not demux packets based on SSRC or payload type, nor will * it correct for packet reordering and jitter. Use #GstRtpsSrcDemux, * #GstRtpPtDemux and GstRtpJitterBuffer in addition to #GstRtpSession to * perform these tasks. It is usually a good idea to use #GstRtpBin, which @@ -64,9 +67,8 @@ * that should be sent to all participants in the session. * * To use #GstRtpSession as a sender, request a send_rtp_sink pad, which will - * automatically create a send_rtp_src pad. The session manager will modify the - * SSRC in the RTP packets to its own SSRC and wil forward the packets on the - * send_rtp_src pad after updating its internal state. + * automatically create a send_rtp_src pad. The session manager will + * forward the packets on the send_rtp_src pad after updating its internal state. * * The session manager needs the clock-rate of the payload types it is handling * and will signal the #GstRtpSession::request-pt-map signal when it needs such a @@ -76,13 +78,13 @@ * <refsect2> * <title>Example pipelines</title> * |[ - * gst-launch-1.0 udpsrc port=5000 caps="application/x-rtp, ..." ! .recv_rtp_sink gstrtpsession .recv_rtp_src ! rtptheoradepay ! theoradec ! xvimagesink + * gst-launch-1.0 udpsrc port=5000 caps="application/x-rtp, ..." ! .recv_rtp_sink rtpsession .recv_rtp_src ! rtptheoradepay ! theoradec ! xvimagesink * ]| Receive theora RTP packets from port 5000 and send them to the depayloader, * decoder and display. Note that the application/x-rtp caps on udpsrc should be * configured based on some negotiation process such as RTSP for this pipeline * to work correctly. * |[ - * gst-launch-1.0 udpsrc port=5000 caps="application/x-rtp, ..." ! .recv_rtp_sink gstrtpsession name=session \ + * gst-launch-1.0 udpsrc port=5000 caps="application/x-rtp, ..." ! .recv_rtp_sink rtpsession name=session \ * .recv_rtp_src ! rtptheoradepay ! theoradec ! xvimagesink \ * udpsrc port=5001 caps="application/x-rtcp" ! session.recv_rtcp_sink * ]| Receive theora RTP packets from port 5000 and send them to the depayloader, @@ -92,11 +94,11 @@ * configured based on some negotiation process such as RTSP for this pipeline * to work correctly. * |[ - * gst-launch-1.0 videotestsrc ! theoraenc ! rtptheorapay ! .send_rtp_sink gstrtpsession .send_rtp_src ! udpsink port=5000 + * gst-launch-1.0 videotestsrc ! theoraenc ! rtptheorapay ! .send_rtp_sink rtpsession .send_rtp_src ! udpsink port=5000 * ]| Send theora RTP packets through the session manager and out on UDP port * 5000. * |[ - * gst-launch-1.0 videotestsrc ! theoraenc ! rtptheorapay ! .send_rtp_sink gstrtpsession name=session .send_rtp_src \ + * gst-launch-1.0 videotestsrc ! theoraenc ! rtptheorapay ! .send_rtp_sink rtpsession name=session .send_rtp_src \ * ! udpsink port=5000 session.send_rtcp_src ! udpsink port=5001 * ]| Send theora RTP packets through the session manager and out on UDP port * 5000. Send RTCP packets on port 5001. Note that this pipeline will not preroll @@ -2269,13 +2271,13 @@ gst_rtp_session_request_new_pad (GstElement * element, wrong_template: { GST_RTP_SESSION_UNLOCK (rtpsession); - g_warning ("gstrtpsession: this is not our template"); + g_warning ("rtpsession: this is not our template"); return NULL; } exists: { GST_RTP_SESSION_UNLOCK (rtpsession); - g_warning ("gstrtpsession: pad already requested"); + g_warning ("rtpsession: pad already requested"); return NULL; } } @@ -2313,7 +2315,7 @@ gst_rtp_session_release_pad (GstElement * element, GstPad * pad) wrong_pad: { GST_RTP_SESSION_UNLOCK (rtpsession); - g_warning ("gstrtpsession: asked to release an unknown pad"); + g_warning ("rtpsession: asked to release an unknown pad"); return; } } diff --git a/gst/rtpmanager/gstrtpssrcdemux.c b/gst/rtpmanager/gstrtpssrcdemux.c index b04d4365e96ff1b582845ca1ba711fb619dd682c..75730a44386e69015169116c9007148928f96854 100644 --- a/gst/rtpmanager/gstrtpssrcdemux.c +++ b/gst/rtpmanager/gstrtpssrcdemux.c @@ -20,9 +20,9 @@ */ /** - * SECTION:element-gstrtpssrcdemux + * SECTION:element-rtpssrcdemux * - * gstrtpssrcdemux acts as a demuxer for RTP packets based on the SSRC of the + * rtpssrcdemux acts as a demuxer for RTP packets based on the SSRC of the * packets. Its main purpose is to allow an application to easily receive and * decode an RTP stream with multiple SSRCs. * @@ -32,7 +32,7 @@ * <refsect2> * <title>Example pipelines</title> * |[ - * gst-launch-1.0 udpsrc caps="application/x-rtp" ! gstrtpssrcdemux ! fakesink + * gst-launch-1.0 udpsrc caps="application/x-rtp" ! rtpssrcdemux ! fakesink * ]| Takes an RTP stream and send the RTP packets with the first detected SSRC * to fakesink, discarding the other SSRCs. * </refsect2> diff --git a/gst/rtpmanager/rtpjitterbuffer.c b/gst/rtpmanager/rtpjitterbuffer.c index 5b1c6f164708dbc5d3d3ef5b5e14388444bd2781..332a1f7abaddac6924ccb2dda63270c1530f9113 100644 --- a/gst/rtpmanager/rtpjitterbuffer.c +++ b/gst/rtpmanager/rtpjitterbuffer.c @@ -96,7 +96,6 @@ rtp_jitter_buffer_finalize (GObject * object) jbuf = RTP_JITTER_BUFFER_CAST (object); - rtp_jitter_buffer_flush (jbuf); g_queue_free (jbuf->packets); G_OBJECT_CLASS (rtp_jitter_buffer_parent_class)->finalize (object); @@ -166,6 +165,44 @@ rtp_jitter_buffer_set_delay (RTPJitterBuffer * jbuf, GstClockTime delay) GST_TIME_ARGS (jbuf->low_level), GST_TIME_ARGS (jbuf->high_level)); } +/** + * rtp_jitter_buffer_set_clock_rate: + * @jbuf: an #RTPJitterBuffer + * + * Set the clock rate in the jitterbuffer. + */ +void +rtp_jitter_buffer_set_clock_rate (RTPJitterBuffer * jbuf, guint32 clock_rate) +{ + if (jbuf->clock_rate != clock_rate) { + if (jbuf->clock_rate == -1) { + GST_DEBUG ("Clock rate changed from %" G_GUINT32_FORMAT " to %" + G_GUINT32_FORMAT, jbuf->clock_rate, clock_rate); + } else { + GST_WARNING ("Clock rate changed from %" G_GUINT32_FORMAT " to %" + G_GUINT32_FORMAT, jbuf->clock_rate, clock_rate); + } + jbuf->base_time = -1; + jbuf->base_rtptime = -1; + jbuf->clock_rate = clock_rate; + jbuf->prev_out_time = -1; + jbuf->prev_send_diff = -1; + } +} + +/** + * rtp_jitter_buffer_get_clock_rate: + * @jbuf: an #RTPJitterBuffer + * + * Get the currently configure clock rate in @jbuf. + * + * Returns: the current clock-rate + */ +guint32 +rtp_jitter_buffer_get_clock_rate (RTPJitterBuffer * jbuf) +{ + return jbuf->clock_rate; +} /** * rtp_jitter_buffer_reset_skew: @@ -212,29 +249,24 @@ rtp_jitter_buffer_resync (RTPJitterBuffer * jbuf, GstClockTime time, static guint64 get_buffer_level (RTPJitterBuffer * jbuf) { - GstBuffer *high_buf = NULL, *low_buf = NULL; + RTPJitterBufferItem *high_buf = NULL, *low_buf = NULL; guint64 level; - GList *find; /* first first buffer with timestamp */ - find = g_queue_peek_head_link (jbuf->packets); - while (find) { - high_buf = find->data; - if (GST_BUFFER_TIMESTAMP (high_buf) != -1) + high_buf = (RTPJitterBufferItem *) g_queue_peek_head_link (jbuf->packets); + while (high_buf) { + if (high_buf->dts != -1) break; - high_buf = NULL; - find = g_list_next (find); + high_buf = (RTPJitterBufferItem *) g_list_next (high_buf); } - find = g_queue_peek_tail_link (jbuf->packets); - while (find) { - low_buf = find->data; - if (GST_BUFFER_TIMESTAMP (low_buf) != -1) + low_buf = (RTPJitterBufferItem *) g_queue_peek_tail_link (jbuf->packets); + while (low_buf) { + if (low_buf->dts != -1) break; - low_buf = NULL; - find = g_list_previous (find); + low_buf = (RTPJitterBufferItem *) g_list_previous (low_buf); } if (!high_buf || !low_buf || high_buf == low_buf) { @@ -242,8 +274,8 @@ get_buffer_level (RTPJitterBuffer * jbuf) } else { guint64 high_ts, low_ts; - high_ts = GST_BUFFER_TIMESTAMP (high_buf); - low_ts = GST_BUFFER_TIMESTAMP (low_buf); + high_ts = high_buf->dts; + low_ts = low_buf->dts; if (high_ts > low_ts) level = high_ts - low_ts; @@ -360,8 +392,7 @@ update_buffer_level (RTPJitterBuffer * jbuf, gint * percent) * Returns: @time adjusted with the clock skew. */ static GstClockTime -calculate_skew (RTPJitterBuffer * jbuf, guint32 rtptime, GstClockTime time, - guint32 clock_rate) +calculate_skew (RTPJitterBuffer * jbuf, guint32 rtptime, GstClockTime time) { guint64 ext_rtptime; guint64 send_diff, recv_diff; @@ -376,26 +407,12 @@ calculate_skew (RTPJitterBuffer * jbuf, guint32 rtptime, GstClockTime time, if (jbuf->last_rtptime != -1 && ext_rtptime == jbuf->last_rtptime) return jbuf->prev_out_time; - gstrtptime = gst_util_uint64_scale_int (ext_rtptime, GST_SECOND, clock_rate); + gstrtptime = + gst_util_uint64_scale_int (ext_rtptime, GST_SECOND, jbuf->clock_rate); /* keep track of the last extended rtptime */ jbuf->last_rtptime = ext_rtptime; - if (jbuf->clock_rate != clock_rate) { - if (jbuf->clock_rate == -1) { - GST_DEBUG ("Clock rate changed from %" G_GUINT32_FORMAT " to %" - G_GUINT32_FORMAT, jbuf->clock_rate, clock_rate); - } else { - GST_WARNING ("Clock rate changed from %" G_GUINT32_FORMAT " to %" - G_GUINT32_FORMAT, jbuf->clock_rate, clock_rate); - } - jbuf->base_time = -1; - jbuf->base_rtptime = -1; - jbuf->clock_rate = clock_rate; - jbuf->prev_out_time = -1; - jbuf->prev_send_diff = -1; - } - /* first time, lock on to time and gstrtptime */ if (G_UNLIKELY (jbuf->base_time == -1)) { jbuf->base_time = time; @@ -588,47 +605,70 @@ no_skew: return out_time; } +static void +queue_do_insert (RTPJitterBuffer * jbuf, GList * list, GList * item) +{ + GQueue *queue = jbuf->packets; + + /* It's more likely that the packet was inserted in the front of the buffer */ + if (G_LIKELY (list)) { + item->prev = list->prev; + item->next = list; + list->prev = item; + if (item->prev) { + item->prev->next = item; + } else { + queue->head = item; + } + } else { + queue->tail = g_list_concat (queue->tail, item); + if (queue->tail->next) + queue->tail = queue->tail->next; + else + queue->head = queue->tail; + } + queue->length++; +} + /** * rtp_jitter_buffer_insert: * @jbuf: an #RTPJitterBuffer - * @buf: a buffer - * @time: a running_time when this buffer was received in nanoseconds - * @clock_rate: the clock-rate of the payload of @buf - * @max_delay: the maximum lateness of @buf + * @item: an #RTPJitterBufferItem to insert * @tail: TRUE when the tail element changed. + * @percent: the buffering percent after insertion * - * Inserts @buf into the packet queue of @jbuf. The sequence number of the + * Inserts @item into the packet queue of @jbuf. The sequence number of the * packet will be used to sort the packets. This function takes ownerhip of * @buf when the function returns %TRUE. - * @buf should have writable metadata when calling this function. * * Returns: %FALSE if a packet with the same number already existed. */ gboolean -rtp_jitter_buffer_insert (RTPJitterBuffer * jbuf, GstBuffer * buf, - GstClockTime time, guint32 clock_rate, gboolean * tail, gint * percent) +rtp_jitter_buffer_insert (RTPJitterBuffer * jbuf, RTPJitterBufferItem * item, + gboolean * tail, gint * percent) { - GList *list; + GList *list = NULL; guint32 rtptime; guint16 seqnum; - GstRTPBuffer rtp = { NULL }; + GstClockTime dts; g_return_val_if_fail (jbuf != NULL, FALSE); - g_return_val_if_fail (buf != NULL, FALSE); - - gst_rtp_buffer_map (buf, GST_MAP_READ, &rtp); + g_return_val_if_fail (item != NULL, FALSE); - seqnum = gst_rtp_buffer_get_seq (&rtp); + seqnum = item->seqnum; + /* no seqnum, simply append then */ + if (seqnum == -1) + goto append; /* loop the list to skip strictly smaller seqnum buffers */ for (list = jbuf->packets->head; list; list = g_list_next (list)) { guint16 qseq; gint gap; - GstRTPBuffer rtpb = { NULL }; + RTPJitterBufferItem *qitem = (RTPJitterBufferItem *) list; - gst_rtp_buffer_map (GST_BUFFER_CAST (list->data), GST_MAP_READ, &rtpb); - qseq = gst_rtp_buffer_get_seq (&rtpb); - gst_rtp_buffer_unmap (&rtpb); + qseq = qitem->seqnum; + if (qseq == -1) + continue; /* compare the new seqnum to the one in the buffer */ gap = gst_rtp_buffer_compare_seqnum (seqnum, qseq); @@ -642,20 +682,22 @@ rtp_jitter_buffer_insert (RTPJitterBuffer * jbuf, GstBuffer * buf, break; } - rtptime = gst_rtp_buffer_get_timestamp (&rtp); + dts = item->dts; + rtptime = item->rtptime; + /* rtp time jumps are checked for during skew calculation, but bypassed * in other mode, so mind those here and reset jb if needed. * Only reset if valid input time, which is likely for UDP input * where we expect this might happen due to async thread effects * (in seek and state change cycles), but not so much for TCP input */ - if (GST_CLOCK_TIME_IS_VALID (time) && + if (GST_CLOCK_TIME_IS_VALID (dts) && jbuf->mode != RTP_JITTER_BUFFER_MODE_SLAVE && jbuf->base_time != -1 && jbuf->last_rtptime != -1) { GstClockTime ext_rtptime = jbuf->ext_rtptime; ext_rtptime = gst_rtp_buffer_ext_timestamp (&ext_rtptime, rtptime); - if (ext_rtptime > jbuf->last_rtptime + 3 * clock_rate || - ext_rtptime + 3 * clock_rate < jbuf->last_rtptime) { + if (ext_rtptime > jbuf->last_rtptime + 3 * jbuf->clock_rate || + ext_rtptime + 3 * jbuf->clock_rate < jbuf->last_rtptime) { /* reset even if we don't have valid incoming time; * still better than producing possibly very bogus output timestamp */ GST_WARNING ("rtp delta too big, reset skew"); @@ -671,25 +713,20 @@ rtp_jitter_buffer_insert (RTPJitterBuffer * jbuf, GstBuffer * buf, * mode we will adjust the outgoing timestamps according to the amount of * time we spent buffering. */ if (jbuf->base_time == -1) - time = 0; + dts = 0; else - time = -1; + dts = -1; break; case RTP_JITTER_BUFFER_MODE_SLAVE: default: break; } /* do skew calculation by measuring the difference between rtptime and the - * receive time, this function will retimestamp @buf with the skew corrected - * running time. */ - time = calculate_skew (jbuf, rtptime, time, clock_rate); - GST_BUFFER_PTS (buf) = time; + * receive dts, this function will return the skew corrected rtptime. */ + item->pts = calculate_skew (jbuf, rtptime, dts); - /* It's more likely that the packet was inserted in the front of the buffer */ - if (G_LIKELY (list)) - g_queue_insert_before (jbuf->packets, list, buf); - else - g_queue_push_tail (jbuf->packets, buf); +append: + queue_do_insert (jbuf, list, (GList *) item); /* buffering mode, update buffer stats */ if (jbuf->mode == RTP_JITTER_BUFFER_MODE_BUFFER) @@ -702,14 +739,11 @@ rtp_jitter_buffer_insert (RTPJitterBuffer * jbuf, GstBuffer * buf, if (G_LIKELY (tail)) *tail = (list == NULL); - gst_rtp_buffer_unmap (&rtp); - return TRUE; /* ERRORS */ duplicate: { - gst_rtp_buffer_unmap (&rtp); GST_WARNING ("duplicate packet %d found", (gint) seqnum); return FALSE; } @@ -726,14 +760,25 @@ duplicate: * * Returns: a #GstBuffer or %NULL when there was no packet in the queue. */ -GstBuffer * +RTPJitterBufferItem * rtp_jitter_buffer_pop (RTPJitterBuffer * jbuf, gint * percent) { - GstBuffer *buf; + GList *item = NULL; + GQueue *queue; g_return_val_if_fail (jbuf != NULL, NULL); - buf = g_queue_pop_tail (jbuf->packets); + queue = jbuf->packets; + + item = queue->tail; + if (item) { + queue->tail = item->prev; + if (queue->tail) + queue->tail->next = NULL; + else + queue->head = NULL; + queue->length--; + } /* buffering mode, update buffer stats */ if (jbuf->mode == RTP_JITTER_BUFFER_MODE_BUFFER) @@ -741,7 +786,7 @@ rtp_jitter_buffer_pop (RTPJitterBuffer * jbuf, gint * percent) else if (percent) *percent = -1; - return buf; + return (RTPJitterBufferItem *) item; } /** @@ -754,33 +799,33 @@ rtp_jitter_buffer_pop (RTPJitterBuffer * jbuf, gint * percent) * * Returns: a #GstBuffer or %NULL when there was no packet in the queue. */ -GstBuffer * +RTPJitterBufferItem * rtp_jitter_buffer_peek (RTPJitterBuffer * jbuf) { - GstBuffer *buf; - g_return_val_if_fail (jbuf != NULL, NULL); - buf = g_queue_peek_tail (jbuf->packets); - - return buf; + return (RTPJitterBufferItem *) jbuf->packets->tail; } /** * rtp_jitter_buffer_flush: * @jbuf: an #RTPJitterBuffer + * @free_func: function to free each item + * @user_data: user data passed to @free_func * * Flush all packets from the jitterbuffer. */ void -rtp_jitter_buffer_flush (RTPJitterBuffer * jbuf) +rtp_jitter_buffer_flush (RTPJitterBuffer * jbuf, GFunc free_func, + gpointer user_data) { - GstBuffer *buffer; + GList *item; g_return_if_fail (jbuf != NULL); + g_return_if_fail (free_func != NULL); - while ((buffer = g_queue_pop_head (jbuf->packets))) - gst_buffer_unref (buffer); + while ((item = g_queue_pop_head_link (jbuf->packets))) + free_func ((RTPJitterBufferItem *) item, user_data); } /** diff --git a/gst/rtpmanager/rtpjitterbuffer.h b/gst/rtpmanager/rtpjitterbuffer.h index 6a0f3d0ce904fb5b876e11b4886810a89a118158..49817bf75a06cd5e851ccf4147a0e0fc5b21c77e 100644 --- a/gst/rtpmanager/rtpjitterbuffer.h +++ b/gst/rtpmanager/rtpjitterbuffer.h @@ -25,6 +25,7 @@ typedef struct _RTPJitterBuffer RTPJitterBuffer; typedef struct _RTPJitterBufferClass RTPJitterBufferClass; +typedef struct _RTPJitterBufferItem RTPJitterBufferItem; #define RTP_TYPE_JITTER_BUFFER (rtp_jitter_buffer_get_type()) #define RTP_JITTER_BUFFER(src) (G_TYPE_CHECK_INSTANCE_CAST((src),RTP_TYPE_JITTER_BUFFER,RTPJitterBuffer)) @@ -99,6 +100,30 @@ struct _RTPJitterBufferClass { GObjectClass parent_class; }; +/** + * RTPJitterBufferItem: + * @data: the data of the item + * @next: pointer to next item + * @prev: pointer to previous item + * @type: the type of @data + * @dts: input DTS + * @pts: output PTS + * @seqnum: seqnum + * @rtptime: rtp timestamp + * + * An object containing an RTP packet or event. + */ +struct _RTPJitterBufferItem { + gpointer data; + GList *next; + GList *prev; + guint type; + GstClockTime dts; + GstClockTime pts; + guint seqnum; + guint rtptime; +}; + GType rtp_jitter_buffer_get_type (void); /* managing lifetime */ @@ -110,16 +135,19 @@ void rtp_jitter_buffer_set_mode (RTPJitterBuffer *jbuf, GstClockTime rtp_jitter_buffer_get_delay (RTPJitterBuffer *jbuf); void rtp_jitter_buffer_set_delay (RTPJitterBuffer *jbuf, GstClockTime delay); +void rtp_jitter_buffer_set_clock_rate (RTPJitterBuffer *jbuf, guint32 clock_rate); +guint32 rtp_jitter_buffer_get_clock_rate (RTPJitterBuffer *jbuf); + void rtp_jitter_buffer_reset_skew (RTPJitterBuffer *jbuf); -gboolean rtp_jitter_buffer_insert (RTPJitterBuffer *jbuf, GstBuffer *buf, - GstClockTime time, - guint32 clock_rate, +gboolean rtp_jitter_buffer_insert (RTPJitterBuffer *jbuf, + RTPJitterBufferItem *item, gboolean *tail, gint *percent); -GstBuffer * rtp_jitter_buffer_peek (RTPJitterBuffer *jbuf); -GstBuffer * rtp_jitter_buffer_pop (RTPJitterBuffer *jbuf, gint *percent); +RTPJitterBufferItem * rtp_jitter_buffer_peek (RTPJitterBuffer *jbuf); +RTPJitterBufferItem * rtp_jitter_buffer_pop (RTPJitterBuffer *jbuf, gint *percent); -void rtp_jitter_buffer_flush (RTPJitterBuffer *jbuf); +void rtp_jitter_buffer_flush (RTPJitterBuffer *jbuf, + GFunc free_func, gpointer user_data); gboolean rtp_jitter_buffer_is_buffering (RTPJitterBuffer * jbuf); void rtp_jitter_buffer_set_buffering (RTPJitterBuffer * jbuf, gboolean buffering); diff --git a/gst/videomixer/videomixerorc-dist.c b/gst/videomixer/videomixerorc-dist.c index 9106640f52a35c843c4b84dd6b72efef5ded6c13..ee4ba19a13101dffcd1e8a032b659d42db724700 100644 --- a/gst/videomixer/videomixerorc-dist.c +++ b/gst/videomixer/videomixerorc-dist.c @@ -1890,7 +1890,7 @@ video_mixer_orc_overlay_argb (guint8 * ORC_RESTRICT d1, int d1_stride, static const orc_uint8 bc[] = { 1, 7, 9, 28, 118, 105, 100, 101, 111, 95, 109, 105, 120, 101, 114, 95, 111, 114, 99, 95, 111, 118, 101, 114, 108, 97, 121, 95, 97, 114, 103, - 98, + 98, 11, 4, 4, 12, 4, 4, 14, 4, 255, 255, 255, 255, 14, 4, 255, 0, 0, 0, 14, 4, 0, 255, 255, 255, 14, 4, 8, 0, 0, 0, 16, 2, 20, 4, 20, 2, 20, 1, 20, 8, 20, 8, 20, 8, 20, 4, 20, 8, @@ -2456,7 +2456,7 @@ video_mixer_orc_overlay_bgra (guint8 * ORC_RESTRICT d1, int d1_stride, static const orc_uint8 bc[] = { 1, 7, 9, 28, 118, 105, 100, 101, 111, 95, 109, 105, 120, 101, 114, 95, 111, 114, 99, 95, 111, 118, 101, 114, 108, 97, 121, 95, 98, 103, 114, - 97, + 97, 11, 4, 4, 12, 4, 4, 14, 4, 255, 255, 255, 255, 14, 4, 0, 0, 0, 255, 14, 4, 255, 255, 255, 0, 14, 4, 24, 0, 0, 0, 14, 4, 8, 0, 0, 0, 16, 2, 20, 4, 20, 4, 20, 2, 20, 1, 20, 8, @@ -2665,7 +2665,7 @@ videomixer_video_convert_orc_memcpy_2d (guint8 * ORC_RESTRICT d1, int d1_stride, static const orc_uint8 bc[] = { 1, 7, 9, 38, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, - 99, + 99, 95, 109, 101, 109, 99, 112, 121, 95, 50, 100, 11, 1, 1, 12, 1, 1, 42, 0, 4, 2, 0, }; @@ -2887,9 +2887,9 @@ videomixer_video_convert_orc_convert_I420_UYVY (guint8 * ORC_RESTRICT d1, #if 1 static const orc_uint8 bc[] = { 1, 9, 46, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, - 105, + 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, 99, - 95, + 95, 99, 111, 110, 118, 101, 114, 116, 95, 73, 52, 50, 48, 95, 85, 89, 86, 89, 11, 4, 4, 11, 4, 4, 12, 2, 2, 12, 2, 2, 12, 1, 1, 12, 1, 1, 20, 2, 196, 32, 6, 7, 21, 1, 196, 0, 32, 4, 21, @@ -3123,9 +3123,9 @@ videomixer_video_convert_orc_convert_I420_YUY2 (guint8 * ORC_RESTRICT d1, #if 1 static const orc_uint8 bc[] = { 1, 9, 46, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, - 105, + 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, 99, - 95, + 95, 99, 111, 110, 118, 101, 114, 116, 95, 73, 52, 50, 48, 95, 89, 85, 89, 50, 11, 4, 4, 11, 4, 4, 12, 2, 2, 12, 2, 2, 12, 1, 1, 12, 1, 1, 20, 2, 196, 32, 6, 7, 21, 1, 196, 0, 4, 32, 21, @@ -3395,9 +3395,9 @@ videomixer_video_convert_orc_convert_I420_AYUV (guint8 * ORC_RESTRICT d1, #if 1 static const orc_uint8 bc[] = { 1, 9, 46, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, - 105, + 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, 99, - 95, + 95, 99, 111, 110, 118, 101, 114, 116, 95, 73, 52, 50, 48, 95, 65, 89, 85, 86, 11, 4, 4, 11, 4, 4, 12, 1, 1, 12, 1, 1, 12, 1, 1, 12, 1, 1, 14, 1, 255, 0, 0, 0, 20, 2, 20, 2, 20, 1, 20, @@ -3654,9 +3654,9 @@ videomixer_video_convert_orc_convert_YUY2_I420 (guint8 * ORC_RESTRICT d1, #if 1 static const orc_uint8 bc[] = { 1, 9, 46, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, - 105, + 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, 99, - 95, + 95, 99, 111, 110, 118, 101, 114, 116, 95, 89, 85, 89, 50, 95, 73, 52, 50, 48, 11, 2, 2, 11, 2, 2, 11, 1, 1, 11, 1, 1, 12, 4, 4, 12, 4, 4, 20, 2, 20, 2, 20, 2, 21, 1, 199, 32, 34, 4, 97, @@ -3801,7 +3801,7 @@ videomixer_video_convert_orc_convert_UYVY_YUY2 (guint8 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 7, 9, 46, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, - 99, + 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 85, 89, 86, 89, 95, 89, 85, 89, 50, 11, 4, 4, 12, 4, 4, 21, 1, 183, 0, 4, 2, 0, }; @@ -3946,7 +3946,7 @@ videomixer_video_convert_orc_planar_chroma_420_422 (guint8 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 7, 9, 50, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, - 99, + 99, 95, 112, 108, 97, 110, 97, 114, 95, 99, 104, 114, 111, 109, 97, 95, 52, 50, 48, 95, 52, 50, 50, 11, 1, 1, 11, 1, 1, 12, 1, 1, 42, 0, 4, 42, 1, 4, 2, 0, @@ -4085,7 +4085,7 @@ videomixer_video_convert_orc_planar_chroma_420_444 (guint8 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 7, 9, 50, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, - 99, + 99, 95, 112, 108, 97, 110, 97, 114, 95, 99, 104, 114, 111, 109, 97, 95, 52, 50, 48, 95, 52, 52, 52, 11, 2, 2, 11, 2, 2, 12, 1, 1, 20, 2, 151, 32, 4, 97, 0, 32, 97, 1, 32, 2, 0, @@ -4217,7 +4217,7 @@ videomixer_video_convert_orc_planar_chroma_422_444 (guint8 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 7, 9, 50, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, - 99, + 99, 95, 112, 108, 97, 110, 97, 114, 95, 99, 104, 114, 111, 109, 97, 95, 52, 50, 50, 95, 52, 52, 52, 11, 2, 2, 12, 1, 1, 20, 2, 151, 32, 4, 97, 0, 32, 2, 0, @@ -4362,7 +4362,7 @@ videomixer_video_convert_orc_planar_chroma_444_422 (guint8 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 7, 9, 50, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, - 99, + 99, 95, 112, 108, 97, 110, 97, 114, 95, 99, 104, 114, 111, 109, 97, 95, 52, 52, 52, 95, 52, 50, 50, 11, 1, 1, 12, 2, 2, 20, 1, 20, 1, 199, 32, 33, 4, 39, 0, 32, 33, 2, 0, @@ -4532,7 +4532,7 @@ videomixer_video_convert_orc_planar_chroma_444_420 (guint8 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 7, 9, 50, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, - 99, + 99, 95, 112, 108, 97, 110, 97, 114, 95, 99, 104, 114, 111, 109, 97, 95, 52, 52, 52, 95, 52, 50, 48, 11, 1, 1, 12, 2, 2, 12, 2, 2, 20, 2, 20, 1, 20, 1, 21, 1, 39, 32, 4, 5, 199, 33, 34, 32, 39, @@ -4679,7 +4679,7 @@ videomixer_video_convert_orc_planar_chroma_422_420 (guint8 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 7, 9, 50, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, - 99, + 99, 95, 112, 108, 97, 110, 97, 114, 95, 99, 104, 114, 111, 109, 97, 95, 52, 50, 50, 95, 52, 50, 48, 11, 1, 1, 12, 1, 1, 12, 1, 1, 39, 0, 4, 5, 2, 0, @@ -4918,7 +4918,7 @@ videomixer_video_convert_orc_convert_YUY2_AYUV (guint8 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 7, 9, 46, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, - 99, + 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 89, 85, 89, 50, 95, 65, 89, 85, 86, 11, 8, 8, 12, 4, 4, 14, 2, 255, 0, 0, 0, 20, 2, 20, 2, 20, 4, 20, 4, 21, 1, 199, 33, 32, 4, 21, 1, 196, 34, @@ -5166,7 +5166,7 @@ videomixer_video_convert_orc_convert_UYVY_AYUV (guint8 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 7, 9, 46, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, - 99, + 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 85, 89, 86, 89, 95, 65, 89, 85, 86, 11, 8, 8, 12, 4, 4, 14, 2, 255, 0, 0, 0, 20, 2, 20, 2, 20, 4, 20, 4, 21, 1, 199, 32, 33, 4, 21, 1, 196, 34, @@ -5364,7 +5364,7 @@ videomixer_video_convert_orc_convert_YUY2_Y42B (guint8 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 7, 9, 46, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, - 99, + 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 89, 85, 89, 50, 95, 89, 52, 50, 66, 11, 2, 2, 11, 1, 1, 11, 1, 1, 12, 4, 4, 20, 2, 21, 1, 199, 32, 0, 4, 199, 2, 1, 32, 2, 0, @@ -5559,7 +5559,7 @@ videomixer_video_convert_orc_convert_UYVY_Y42B (guint8 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 7, 9, 46, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, - 99, + 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 85, 89, 86, 89, 95, 89, 52, 50, 66, 11, 2, 2, 11, 1, 1, 11, 1, 1, 12, 4, 4, 20, 2, 21, 1, 199, 0, 32, 4, 199, 2, 1, 32, 2, 0, @@ -5766,7 +5766,7 @@ videomixer_video_convert_orc_convert_YUY2_Y444 (guint8 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 7, 9, 46, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, - 99, + 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 89, 85, 89, 50, 95, 89, 52, 52, 52, 11, 2, 2, 11, 2, 2, 11, 2, 2, 12, 4, 4, 20, 2, 20, 1, 20, 1, 21, 1, 199, 32, 0, 4, 199, 34, 33, 32, 151, 1, @@ -5980,7 +5980,7 @@ videomixer_video_convert_orc_convert_UYVY_Y444 (guint8 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 7, 9, 46, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, - 99, + 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 85, 89, 86, 89, 95, 89, 52, 52, 52, 11, 2, 2, 11, 2, 2, 11, 2, 2, 12, 4, 4, 20, 2, 20, 1, 20, 1, 21, 1, 199, 0, 32, 4, 199, 34, 33, 32, 151, 1, @@ -6230,9 +6230,9 @@ videomixer_video_convert_orc_convert_UYVY_I420 (guint8 * ORC_RESTRICT d1, #if 1 static const orc_uint8 bc[] = { 1, 9, 46, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, - 105, + 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, 99, - 95, + 95, 99, 111, 110, 118, 101, 114, 116, 95, 85, 89, 86, 89, 95, 73, 52, 50, 48, 11, 2, 2, 11, 2, 2, 11, 1, 1, 11, 1, 1, 12, 4, 4, 12, 4, 4, 20, 2, 20, 2, 20, 2, 21, 1, 199, 34, 32, 4, 97, @@ -6615,7 +6615,7 @@ videomixer_video_convert_orc_convert_AYUV_I420 (guint8 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 7, 9, 46, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, - 99, + 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 65, 89, 85, 86, 95, 73, 52, 50, 48, 11, 2, 2, 11, 2, 2, 11, 1, 1, 11, 1, 1, 12, 8, 8, 12, 8, 8, 20, 4, 20, 4, 20, 4, 20, 4, 20, 2, 20, 2, @@ -6887,7 +6887,7 @@ videomixer_video_convert_orc_convert_AYUV_YUY2 (guint8 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 7, 9, 46, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, - 99, + 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 65, 89, 85, 86, 95, 89, 85, 89, 50, 11, 4, 4, 12, 8, 8, 20, 2, 20, 2, 20, 2, 20, 4, 20, 4, 21, 1, 198, 36, 35, 4, 198, 33, 34, 36, 21, 1, 39, 33, @@ -7131,7 +7131,7 @@ videomixer_video_convert_orc_convert_AYUV_UYVY (guint8 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 7, 9, 46, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, - 99, + 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 65, 89, 85, 86, 95, 85, 89, 86, 89, 11, 4, 4, 12, 8, 8, 20, 2, 20, 2, 20, 2, 20, 4, 20, 4, 21, 1, 198, 36, 35, 4, 198, 33, 34, 36, 21, 1, 39, 33, @@ -7385,7 +7385,7 @@ videomixer_video_convert_orc_convert_AYUV_Y42B (guint8 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 7, 9, 46, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, - 99, + 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 65, 89, 85, 86, 95, 89, 52, 50, 66, 11, 2, 2, 11, 1, 1, 11, 1, 1, 12, 8, 8, 20, 4, 20, 4, 20, 2, 20, 2, 21, 1, 198, 33, 32, 4, 198, 34, 35, 33, @@ -7593,7 +7593,7 @@ videomixer_video_convert_orc_convert_AYUV_Y444 (guint8 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 7, 9, 46, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, - 99, + 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 65, 89, 85, 86, 95, 89, 52, 52, 52, 11, 1, 1, 11, 1, 1, 11, 1, 1, 12, 4, 4, 20, 2, 20, 2, 198, 33, 32, 4, 199, 2, 1, 33, 189, 0, 32, 2, 0, @@ -7791,7 +7791,7 @@ videomixer_video_convert_orc_convert_Y42B_YUY2 (guint8 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 7, 9, 46, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, - 99, + 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 89, 52, 50, 66, 95, 89, 85, 89, 50, 11, 4, 4, 12, 2, 2, 12, 1, 1, 12, 1, 1, 20, 2, 196, 32, 5, 6, 21, 1, 196, 0, 4, 32, 2, 0, @@ -7986,7 +7986,7 @@ videomixer_video_convert_orc_convert_Y42B_UYVY (guint8 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 7, 9, 46, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, - 99, + 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 89, 52, 50, 66, 95, 85, 89, 86, 89, 11, 4, 4, 12, 2, 2, 12, 1, 1, 12, 1, 1, 20, 2, 196, 32, 5, 6, 21, 1, 196, 0, 32, 4, 2, 0, @@ -8241,7 +8241,7 @@ videomixer_video_convert_orc_convert_Y42B_AYUV (guint8 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 7, 9, 46, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, - 99, + 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 89, 52, 50, 66, 95, 65, 89, 85, 86, 11, 8, 8, 12, 2, 2, 12, 1, 1, 12, 1, 1, 14, 1, 255, 0, 0, 0, 20, 2, 20, 2, 20, 4, 20, 4, 196, 32, 5, 6, @@ -8488,7 +8488,7 @@ videomixer_video_convert_orc_convert_Y444_YUY2 (guint8 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 7, 9, 46, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, - 99, + 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 89, 52, 52, 52, 95, 89, 85, 89, 50, 11, 4, 4, 12, 2, 2, 12, 2, 2, 12, 2, 2, 20, 2, 20, 4, 20, 2, 20, 2, 21, 1, 196, 33, 5, 6, 198, 34, 35, 33, @@ -8733,7 +8733,7 @@ videomixer_video_convert_orc_convert_Y444_UYVY (guint8 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 7, 9, 46, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, - 99, + 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 89, 52, 52, 52, 95, 85, 89, 86, 89, 11, 4, 4, 12, 2, 2, 12, 2, 2, 12, 2, 2, 20, 2, 20, 4, 20, 2, 20, 2, 21, 1, 196, 33, 5, 6, 198, 34, 35, 33, @@ -8954,7 +8954,7 @@ videomixer_video_convert_orc_convert_Y444_AYUV (guint8 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 7, 9, 46, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, - 99, + 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 89, 52, 52, 52, 95, 65, 89, 85, 86, 11, 4, 4, 12, 1, 1, 12, 1, 1, 12, 1, 1, 14, 1, 255, 0, 0, 0, 20, 2, 20, 2, 196, 32, 5, 6, 196, 33, 16, 4, @@ -9478,7 +9478,7 @@ videomixer_video_convert_orc_convert_AYUV_ARGB (guint8 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 7, 9, 46, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, - 99, + 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 65, 89, 85, 86, 95, 65, 82, 71, 66, 11, 4, 4, 12, 4, 4, 14, 1, 8, 0, 0, 0, 14, 4, 128, 0, 0, 0, 14, 4, 42, 0, 0, 0, 14, 4, 103, 0, 0, 0, @@ -10089,7 +10089,7 @@ videomixer_video_convert_orc_convert_AYUV_BGRA (guint8 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 7, 9, 46, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, - 99, + 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 65, 89, 85, 86, 95, 66, 71, 82, 65, 11, 4, 4, 12, 4, 4, 14, 1, 8, 0, 0, 0, 14, 4, 128, 0, 0, 0, 14, 4, 42, 0, 0, 0, 14, 4, 103, 0, 0, 0, @@ -10700,7 +10700,7 @@ videomixer_video_convert_orc_convert_AYUV_ABGR (guint8 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 7, 9, 46, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, - 99, + 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 65, 89, 85, 86, 95, 65, 66, 71, 82, 11, 4, 4, 12, 4, 4, 14, 1, 8, 0, 0, 0, 14, 4, 128, 0, 0, 0, 14, 4, 42, 0, 0, 0, 14, 4, 103, 0, 0, 0, @@ -11311,7 +11311,7 @@ videomixer_video_convert_orc_convert_AYUV_RGBA (guint8 * ORC_RESTRICT d1, static const orc_uint8 bc[] = { 1, 7, 9, 46, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, - 99, + 99, 95, 99, 111, 110, 118, 101, 114, 116, 95, 65, 89, 85, 86, 95, 82, 71, 66, 65, 11, 4, 4, 12, 4, 4, 14, 1, 8, 0, 0, 0, 14, 4, 128, 0, 0, 0, 14, 4, 42, 0, 0, 0, 14, 4, 103, 0, 0, 0, @@ -11932,9 +11932,9 @@ videomixer_video_convert_orc_convert_I420_BGRA (guint8 * ORC_RESTRICT d1, #if 1 static const orc_uint8 bc[] = { 1, 9, 46, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, - 105, + 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, 99, - 95, + 95, 99, 111, 110, 118, 101, 114, 116, 95, 73, 52, 50, 48, 95, 66, 71, 82, 65, 11, 4, 4, 12, 1, 1, 12, 1, 1, 12, 1, 1, 14, 1, 8, 0, 0, 0, 14, 1, 128, 0, 0, 0, 14, 4, 42, 0, 0, 0, 14, @@ -12597,9 +12597,9 @@ videomixer_video_convert_orc_convert_I420_BGRA_avg (guint8 * ORC_RESTRICT d1, #if 1 static const orc_uint8 bc[] = { 1, 9, 50, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, - 105, + 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, 99, - 95, + 95, 99, 111, 110, 118, 101, 114, 116, 95, 73, 52, 50, 48, 95, 66, 71, 82, 65, 95, 97, 118, 103, 11, 4, 4, 12, 1, 1, 12, 1, 1, 12, 1, 1, 12, 1, 1, 12, 1, 1, 14, 1, 8, 0, 0, 0, 14, 1, 128, @@ -12909,9 +12909,9 @@ videomixer_video_convert_orc_getline_I420 (guint8 * ORC_RESTRICT d1, #if 1 static const orc_uint8 bc[] = { 1, 9, 41, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, - 105, + 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, 99, - 95, + 95, 103, 101, 116, 108, 105, 110, 101, 95, 73, 52, 50, 48, 11, 4, 4, 12, 1, 1, 12, 1, 1, 12, 1, 1, 14, 1, 255, 0, 0, 0, 20, 2, 20, 2, 20, 1, 20, 1, 45, 34, 5, 45, 35, 6, 196, 32, 34, 35, @@ -13160,9 +13160,9 @@ videomixer_video_convert_orc_getline_YUV9 (guint8 * ORC_RESTRICT d1, #if 1 static const orc_uint8 bc[] = { 1, 9, 41, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, - 105, + 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, 99, - 95, + 95, 103, 101, 116, 108, 105, 110, 101, 95, 89, 85, 86, 57, 11, 8, 8, 12, 2, 2, 12, 1, 1, 12, 1, 1, 14, 1, 255, 0, 0, 0, 20, 2, 20, 4, 20, 4, 20, 1, 20, 1, 45, 35, 5, 45, 36, 6, 196, 32, @@ -13407,9 +13407,9 @@ videomixer_video_convert_orc_getline_YUY2 (guint8 * ORC_RESTRICT d1, #if 1 static const orc_uint8 bc[] = { 1, 9, 41, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, - 105, + 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, 99, - 95, + 95, 103, 101, 116, 108, 105, 110, 101, 95, 89, 85, 89, 50, 11, 8, 8, 12, 4, 4, 14, 2, 255, 0, 0, 0, 20, 2, 20, 2, 20, 4, 20, 4, 21, 1, 199, 33, 32, 4, 21, 1, 196, 34, 16, 32, 195, 35, 33, 33, @@ -13644,9 +13644,9 @@ videomixer_video_convert_orc_getline_UYVY (guint8 * ORC_RESTRICT d1, #if 1 static const orc_uint8 bc[] = { 1, 9, 41, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, - 105, + 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, 99, - 95, + 95, 103, 101, 116, 108, 105, 110, 101, 95, 85, 89, 86, 89, 11, 8, 8, 12, 4, 4, 14, 2, 255, 0, 0, 0, 20, 2, 20, 2, 20, 4, 20, 4, 21, 1, 199, 32, 33, 4, 21, 1, 196, 34, 16, 32, 195, 35, 33, 33, @@ -13887,9 +13887,9 @@ videomixer_video_convert_orc_getline_YVYU (guint8 * ORC_RESTRICT d1, #if 1 static const orc_uint8 bc[] = { 1, 9, 41, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, - 105, + 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, 99, - 95, + 95, 103, 101, 116, 108, 105, 110, 101, 95, 89, 86, 89, 85, 11, 8, 8, 12, 4, 4, 14, 2, 255, 0, 0, 0, 20, 2, 20, 2, 20, 4, 20, 4, 21, 1, 199, 33, 32, 4, 183, 33, 33, 21, 1, 196, 34, 16, 32, 195, @@ -14134,9 +14134,9 @@ videomixer_video_convert_orc_getline_Y42B (guint8 * ORC_RESTRICT d1, #if 1 static const orc_uint8 bc[] = { 1, 9, 41, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, - 105, + 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, 99, - 95, + 95, 103, 101, 116, 108, 105, 110, 101, 95, 89, 52, 50, 66, 11, 8, 8, 12, 2, 2, 12, 1, 1, 12, 1, 1, 14, 1, 255, 0, 0, 0, 20, 2, 20, 2, 20, 4, 20, 4, 196, 32, 5, 6, 21, 1, 196, 35, 16, 4, @@ -14341,9 +14341,9 @@ videomixer_video_convert_orc_getline_Y444 (guint8 * ORC_RESTRICT d1, #if 1 static const orc_uint8 bc[] = { 1, 9, 41, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, - 105, + 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, 99, - 95, + 95, 103, 101, 116, 108, 105, 110, 101, 95, 89, 52, 52, 52, 11, 4, 4, 12, 1, 1, 12, 1, 1, 12, 1, 1, 14, 1, 255, 0, 0, 0, 20, 2, 20, 2, 196, 32, 5, 6, 196, 33, 16, 4, 195, 0, 33, 32, 2, 0, @@ -14520,9 +14520,9 @@ videomixer_video_convert_orc_getline_Y800 (guint8 * ORC_RESTRICT d1, #if 1 static const orc_uint8 bc[] = { 1, 9, 41, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, - 105, + 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, 99, - 95, + 95, 103, 101, 116, 108, 105, 110, 101, 95, 89, 56, 48, 48, 11, 4, 4, 12, 1, 1, 14, 1, 255, 0, 0, 0, 14, 2, 128, 128, 0, 0, 20, 2, 196, 32, 16, 4, 195, 0, 32, 17, 2, 0, @@ -14697,9 +14697,9 @@ videomixer_video_convert_orc_getline_Y16 (guint8 * ORC_RESTRICT d1, #if 1 static const orc_uint8 bc[] = { 1, 9, 40, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, - 105, + 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, 99, - 95, + 95, 103, 101, 116, 108, 105, 110, 101, 95, 89, 49, 54, 11, 4, 4, 12, 2, 2, 14, 1, 255, 0, 0, 0, 14, 2, 128, 128, 0, 0, 20, 2, 20, 1, 158, 33, 4, 196, 32, 16, 33, 195, 0, 32, 17, 2, 0, @@ -14818,9 +14818,9 @@ videomixer_video_convert_orc_getline_BGRA (guint8 * ORC_RESTRICT d1, #if 1 static const orc_uint8 bc[] = { 1, 9, 41, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, - 105, + 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, 99, - 95, + 95, 103, 101, 116, 108, 105, 110, 101, 95, 66, 71, 82, 65, 11, 4, 4, 12, 4, 4, 184, 0, 4, 2, 0, }; @@ -15026,9 +15026,9 @@ videomixer_video_convert_orc_getline_ABGR (guint8 * ORC_RESTRICT d1, #if 1 static const orc_uint8 bc[] = { 1, 9, 41, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, - 105, + 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, 99, - 95, + 95, 103, 101, 116, 108, 105, 110, 101, 95, 65, 66, 71, 82, 11, 4, 4, 12, 4, 4, 20, 1, 20, 1, 20, 1, 20, 1, 20, 2, 20, 2, 20, 2, 20, 2, 198, 36, 37, 4, 199, 33, 34, 36, 199, 35, 32, 37, 196, 38, @@ -15254,9 +15254,9 @@ videomixer_video_convert_orc_getline_RGBA (guint8 * ORC_RESTRICT d1, #if 1 static const orc_uint8 bc[] = { 1, 9, 41, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, - 105, + 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, 99, - 95, + 95, 103, 101, 116, 108, 105, 110, 101, 95, 82, 71, 66, 65, 11, 4, 4, 12, 4, 4, 20, 1, 20, 1, 20, 1, 20, 1, 20, 2, 20, 2, 20, 2, 20, 2, 198, 37, 36, 4, 199, 34, 33, 36, 199, 32, 35, 37, 196, 38, @@ -15484,9 +15484,9 @@ videomixer_video_convert_orc_getline_NV12 (guint8 * ORC_RESTRICT d1, #if 1 static const orc_uint8 bc[] = { 1, 9, 41, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, - 105, + 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, 99, - 95, + 95, 103, 101, 116, 108, 105, 110, 101, 95, 78, 86, 49, 50, 11, 8, 8, 12, 2, 2, 12, 2, 2, 14, 1, 255, 0, 0, 0, 20, 4, 20, 4, 195, 33, 5, 5, 21, 1, 196, 32, 16, 4, 21, 1, 195, 0, 32, 33, 2, @@ -15705,9 +15705,9 @@ videomixer_video_convert_orc_getline_NV21 (guint8 * ORC_RESTRICT d1, #if 1 static const orc_uint8 bc[] = { 1, 9, 41, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, - 105, + 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, 99, - 95, + 95, 103, 101, 116, 108, 105, 110, 101, 95, 78, 86, 50, 49, 11, 8, 8, 12, 2, 2, 12, 2, 2, 14, 1, 255, 0, 0, 0, 20, 2, 20, 4, 20, 4, 183, 32, 5, 195, 34, 32, 32, 21, 1, 196, 33, 16, 4, 21, 1, @@ -15905,9 +15905,9 @@ videomixer_video_convert_orc_getline_A420 (guint8 * ORC_RESTRICT d1, #if 1 static const orc_uint8 bc[] = { 1, 9, 41, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, - 105, + 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, 99, - 95, + 95, 103, 101, 116, 108, 105, 110, 101, 95, 65, 52, 50, 48, 11, 4, 4, 12, 1, 1, 12, 1, 1, 12, 1, 1, 12, 1, 1, 20, 2, 20, 2, 20, 1, 20, 1, 45, 34, 5, 45, 35, 6, 196, 32, 34, 35, 196, 33, 7, @@ -16181,9 +16181,9 @@ videomixer_video_convert_orc_putline_I420 (guint8 * ORC_RESTRICT d1, #if 1 static const orc_uint8 bc[] = { 1, 9, 41, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, - 105, + 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, 99, - 95, + 95, 112, 117, 116, 108, 105, 110, 101, 95, 73, 52, 50, 48, 11, 2, 2, 11, 1, 1, 11, 1, 1, 12, 8, 8, 20, 4, 20, 4, 20, 2, 20, 2, 20, 1, 20, 1, 21, 1, 198, 33, 32, 4, 21, 1, 189, 0, 32, 21, @@ -16420,9 +16420,9 @@ videomixer_video_convert_orc_putline_YUY2 (guint8 * ORC_RESTRICT d1, #if 1 static const orc_uint8 bc[] = { 1, 9, 41, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, - 105, + 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, 99, - 95, + 95, 112, 117, 116, 108, 105, 110, 101, 95, 89, 85, 89, 50, 11, 4, 4, 12, 8, 8, 20, 2, 20, 2, 20, 2, 20, 4, 20, 4, 21, 1, 198, 36, 35, 4, 198, 33, 34, 36, 21, 1, 39, 33, 33, 34, 21, 1, 189, 32, @@ -16655,9 +16655,9 @@ videomixer_video_convert_orc_putline_YVYU (guint8 * ORC_RESTRICT d1, #if 1 static const orc_uint8 bc[] = { 1, 9, 41, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, - 105, + 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, 99, - 95, + 95, 112, 117, 116, 108, 105, 110, 101, 95, 89, 86, 89, 85, 11, 4, 4, 12, 8, 8, 20, 2, 20, 2, 20, 2, 20, 4, 20, 4, 21, 1, 198, 36, 35, 4, 198, 33, 34, 36, 21, 1, 39, 33, 33, 34, 21, 1, 189, 32, @@ -16886,9 +16886,9 @@ videomixer_video_convert_orc_putline_UYVY (guint8 * ORC_RESTRICT d1, #if 1 static const orc_uint8 bc[] = { 1, 9, 41, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, - 105, + 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, 99, - 95, + 95, 112, 117, 116, 108, 105, 110, 101, 95, 85, 89, 86, 89, 11, 4, 4, 12, 8, 8, 20, 2, 20, 2, 20, 2, 20, 4, 20, 4, 21, 1, 198, 36, 35, 4, 198, 33, 34, 36, 21, 1, 39, 33, 33, 34, 21, 1, 189, 32, @@ -17123,9 +17123,9 @@ videomixer_video_convert_orc_putline_Y42B (guint8 * ORC_RESTRICT d1, #if 1 static const orc_uint8 bc[] = { 1, 9, 41, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, - 105, + 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, 99, - 95, + 95, 112, 117, 116, 108, 105, 110, 101, 95, 89, 52, 50, 66, 11, 2, 2, 11, 1, 1, 11, 1, 1, 12, 8, 8, 20, 4, 20, 4, 20, 2, 20, 2, 21, 1, 198, 33, 32, 4, 198, 34, 35, 33, 21, 1, 39, 34, 34, 35, @@ -17315,9 +17315,9 @@ videomixer_video_convert_orc_putline_Y444 (guint8 * ORC_RESTRICT d1, #if 1 static const orc_uint8 bc[] = { 1, 9, 41, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, - 105, + 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, 99, - 95, + 95, 112, 117, 116, 108, 105, 110, 101, 95, 89, 52, 52, 52, 11, 1, 1, 11, 1, 1, 11, 1, 1, 12, 4, 4, 20, 2, 20, 2, 198, 33, 32, 4, 199, 2, 1, 33, 189, 0, 32, 2, 0, @@ -17460,9 +17460,9 @@ videomixer_video_convert_orc_putline_Y800 (guint8 * ORC_RESTRICT d1, #if 1 static const orc_uint8 bc[] = { 1, 9, 41, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, - 105, + 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, 99, - 95, + 95, 112, 117, 116, 108, 105, 110, 101, 95, 89, 56, 48, 48, 11, 1, 1, 12, 4, 4, 20, 2, 190, 32, 4, 189, 0, 32, 2, 0, }; @@ -17608,9 +17608,9 @@ videomixer_video_convert_orc_putline_Y16 (guint8 * ORC_RESTRICT d1, #if 1 static const orc_uint8 bc[] = { 1, 9, 40, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, - 105, + 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, 99, - 95, + 95, 112, 117, 116, 108, 105, 110, 101, 95, 89, 49, 54, 11, 2, 2, 12, 4, 4, 14, 4, 8, 0, 0, 0, 20, 2, 20, 1, 190, 32, 4, 189, 33, 32, 150, 32, 33, 93, 0, 32, 16, 2, 0, @@ -17730,9 +17730,9 @@ videomixer_video_convert_orc_putline_BGRA (guint8 * ORC_RESTRICT d1, #if 1 static const orc_uint8 bc[] = { 1, 9, 41, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, - 105, + 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, 99, - 95, + 95, 112, 117, 116, 108, 105, 110, 101, 95, 66, 71, 82, 65, 11, 4, 4, 12, 4, 4, 184, 0, 4, 2, 0, }; @@ -17938,9 +17938,9 @@ videomixer_video_convert_orc_putline_ABGR (guint8 * ORC_RESTRICT d1, #if 1 static const orc_uint8 bc[] = { 1, 9, 41, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, - 105, + 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, 99, - 95, + 95, 112, 117, 116, 108, 105, 110, 101, 95, 65, 66, 71, 82, 11, 4, 4, 12, 4, 4, 20, 1, 20, 1, 20, 1, 20, 1, 20, 2, 20, 2, 20, 2, 20, 2, 198, 39, 38, 4, 199, 35, 34, 39, 199, 33, 32, 38, 196, 37, @@ -18166,9 +18166,9 @@ videomixer_video_convert_orc_putline_RGBA (guint8 * ORC_RESTRICT d1, #if 1 static const orc_uint8 bc[] = { 1, 9, 41, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, - 105, + 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, 99, - 95, + 95, 112, 117, 116, 108, 105, 110, 101, 95, 82, 71, 66, 65, 11, 4, 4, 12, 4, 4, 20, 1, 20, 1, 20, 1, 20, 1, 20, 2, 20, 2, 20, 2, 20, 2, 198, 39, 38, 4, 199, 35, 34, 39, 199, 33, 32, 38, 196, 37, @@ -18380,9 +18380,9 @@ videomixer_video_convert_orc_putline_NV12 (guint8 * ORC_RESTRICT d1, #if 1 static const orc_uint8 bc[] = { 1, 9, 41, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, - 105, + 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, 99, - 95, + 95, 112, 117, 116, 108, 105, 110, 101, 95, 78, 86, 49, 50, 11, 2, 2, 11, 2, 2, 12, 8, 8, 20, 4, 20, 4, 20, 2, 20, 2, 21, 1, 198, 33, 32, 4, 21, 1, 189, 0, 32, 198, 34, 35, 33, 21, 1, 39, 1, @@ -18594,9 +18594,9 @@ videomixer_video_convert_orc_putline_NV21 (guint8 * ORC_RESTRICT d1, #if 1 static const orc_uint8 bc[] = { 1, 9, 41, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, - 105, + 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, 99, - 95, + 95, 112, 117, 116, 108, 105, 110, 101, 95, 78, 86, 50, 49, 11, 2, 2, 11, 2, 2, 12, 8, 8, 20, 4, 20, 4, 20, 2, 20, 2, 20, 2, 21, 1, 198, 33, 32, 4, 21, 1, 189, 0, 32, 198, 34, 35, 33, 21, 1, @@ -18899,9 +18899,9 @@ videomixer_video_convert_orc_putline_A420 (guint8 * ORC_RESTRICT d1, #if 1 static const orc_uint8 bc[] = { 1, 9, 41, 118, 105, 100, 101, 111, 109, 105, 120, 101, 114, 95, 118, - 105, + 105, 100, 101, 111, 95, 99, 111, 110, 118, 101, 114, 116, 95, 111, 114, 99, - 95, + 95, 112, 117, 116, 108, 105, 110, 101, 95, 65, 52, 50, 48, 11, 2, 2, 11, 1, 1, 11, 1, 1, 11, 2, 2, 12, 8, 8, 20, 4, 20, 4, 20, 2, 20, 2, 20, 1, 20, 1, 21, 1, 198, 33, 32, 4, 21, 1, 189, diff --git a/po/af.gmo b/po/af.gmo index ec87c10e0babfb28226682a8896bdb6051f04459..9adac3ec81167e744f5708fa029912cf7a903547 100644 Binary files a/po/af.gmo and b/po/af.gmo differ diff --git a/po/af.po b/po/af.po index f97ac7451df9f2028eade6aef36e12d18a5f8a4d..95b182e29d7f625469e0531e3fed4c62b1417a05 100644 --- a/po/af.po +++ b/po/af.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins 0.7.6\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\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" diff --git a/po/az.gmo b/po/az.gmo index 3586969f1d4282d72c65a9e4d97e716df0ae1818..d472c3f50b45f2dd0676b39bfa42ea2f454c32f7 100644 Binary files a/po/az.gmo and b/po/az.gmo differ diff --git a/po/az.po b/po/az.po index a9b7f6492b02a2db2e4764d21e84f8ac1476b499..e02c89e96e812fadd8b37c1851babed3ab1f2aa6 100644 --- a/po/az.po +++ b/po/az.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-0.8.0\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\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" diff --git a/po/bg.gmo b/po/bg.gmo index 08f85d4975e316a1094a67216e5bff5cbe903f5a..d4675316e75011632585be1d5e0fc57c8ee37643 100644 Binary files a/po/bg.gmo and b/po/bg.gmo differ diff --git a/po/bg.po b/po/bg.po index b5268cf7d81abdbaeee66920fe8aaeaf36af3df2..be29dfe753694bf6739f094cc1e7cc34f9e237bc 100644 --- a/po/bg.po +++ b/po/bg.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 0.10.28.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\n" "PO-Revision-Date: 2011-04-26 22:35+0300\n" "Last-Translator: Alexander Shopov <ash@kambanaria.org>\n" "Language-Team: Bulgarian <dict@fsa-bg.org>\n" diff --git a/po/ca.gmo b/po/ca.gmo index 1517fb188683b749c249030123d03be8f88698fb..4aca6195f02c7f534a85af848b6600ef9e96660f 100644 Binary files a/po/ca.gmo and b/po/ca.gmo differ diff --git a/po/ca.po b/po/ca.po index 0f6a5ff50e61892fc573322682b56afd23309334..cdc334299571ef5d95c8017bcdfb56e088d5a58a 100644 --- a/po/ca.po +++ b/po/ca.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 0.10.28.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\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" diff --git a/po/cs.gmo b/po/cs.gmo index 2baf64f117efa1f554fbe4c41b8db32996b47216..00059d97c6162b0f40123a85b45b4826fcffb4b9 100644 Binary files a/po/cs.gmo and b/po/cs.gmo differ diff --git a/po/cs.po b/po/cs.po index feadd317d2fd410e468071410d4e6d489dd1a497..c00886464b7eeb88ea2b955a24121a4bca30171f 100644 --- a/po/cs.po +++ b/po/cs.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good-1.1.4\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\n" "PO-Revision-Date: 2013-09-18 19:18+0200\n" "Last-Translator: Marek ÄŒernocký <marek@manet.cz>\n" "Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n" diff --git a/po/da.gmo b/po/da.gmo index ef4448da40e6af15dcb2d9e607cf946eda330b01..96c7fec96eb9fe679fdfbc257b7b2571d89adc5a 100644 Binary files a/po/da.gmo and b/po/da.gmo differ diff --git a/po/da.po b/po/da.po index 461f3bafb35cd204429afd6fda3f23b3c299aaa1..ae498a2f8fb9a9bea239f1635b22960ebeda9cd9 100644 --- a/po/da.po +++ b/po/da.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good-1.0.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\n" "PO-Revision-Date: 2012-12-13 23:54+0200\n" "Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n" "Language-Team: Danish <dansk@dansk-gruppen.dk>\n" diff --git a/po/de.gmo b/po/de.gmo index c17e166bdc061a3138c0fbe04df3548c5f4accb8..ee524b3d9a83851d6253210092dad8b9bac2821f 100644 Binary files a/po/de.gmo and b/po/de.gmo differ diff --git a/po/de.po b/po/de.po index c8ec9c759eadf627555460376655980f4b428d2a..417ab66ff1d6674aa76013fc41da4ec77e9aa3cd 100644 --- a/po/de.po +++ b/po/de.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 1.0.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\n" "PO-Revision-Date: 2012-11-28 19:56+0100\n" "Last-Translator: Christian Kirbach <christian.kirbach@gmail.com>\n" "Language-Team: German <translation-team-de@lists.sourceforge.net>\n" diff --git a/po/el.gmo b/po/el.gmo index 9f0dca06ea822c61807daa43abc8e0cbc0d1e759..062353909933b0c242f12a53e2b8df18824ae529 100644 Binary files a/po/el.gmo and b/po/el.gmo differ diff --git a/po/el.po b/po/el.po index b15239441810e71876dc10bbaccec04ff64baf55..07f81eec933bb2897dcc7841a8e37c383e53e490 100644 --- a/po/el.po +++ b/po/el.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 0.10.28.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\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" diff --git a/po/en_GB.gmo b/po/en_GB.gmo index ca1914939b2e74ca28ed3f3e309050d15fa52564..b339ba6b6d4e959d63c1cccf2a1ceaa30c97877a 100644 Binary files a/po/en_GB.gmo and b/po/en_GB.gmo differ diff --git a/po/en_GB.po b/po/en_GB.po index 312cd3ed1e1ec313918357d0cc20c8c7b4be1942..fe25abdcd717ecb8abcefa95909e258f2c50946f 100644 --- a/po/en_GB.po +++ b/po/en_GB.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins 0.8.1\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\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" diff --git a/po/eo.gmo b/po/eo.gmo index cee0bab6b9ead4f00bcbd60d1bcf6ab01befd445..febd872d7b3ef1724c424ab9abab26f90cb31d96 100644 Binary files a/po/eo.gmo and b/po/eo.gmo differ diff --git a/po/eo.po b/po/eo.po index 68c3b29d30b6383e57493243bab3904301293683..7984875b75c0fd7485a7da70acb29cb08f5e4bf8 100644 --- a/po/eo.po +++ b/po/eo.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 0.10.28.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\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" diff --git a/po/es.gmo b/po/es.gmo index 7bc6db9371326084cb9a6441a41d000b8c334458..bf3653778573f83818dd0a89ad32fb83fa6eb18d 100644 Binary files a/po/es.gmo and b/po/es.gmo differ diff --git a/po/es.po b/po/es.po index c719587560fadbb15503950926cdde9c654355c3..48254a0fd2dd5c141febc9327619430aee975fd1 100644 --- a/po/es.po +++ b/po/es.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 0.10.26.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\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" diff --git a/po/eu.gmo b/po/eu.gmo index 880a137f463b7ae92650464c0e71878559c2594e..6b51ab616eafc24d79db214f349ba69cd9c74857 100644 Binary files a/po/eu.gmo and b/po/eu.gmo differ diff --git a/po/eu.po b/po/eu.po index a15b2b9f5ee3bc8822cfb924dd812ee82bd64798..bbc497d719cf5ebac3ef8aa9bcb7611763f7aa34 100644 --- a/po/eu.po +++ b/po/eu.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good-0.10.18.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\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" diff --git a/po/fi.gmo b/po/fi.gmo index 5af02d0f6c4017e24806318f16d99695871e21d0..53cb8c2d923d058211d5ebfefbfaf79be37c3759 100644 Binary files a/po/fi.gmo and b/po/fi.gmo differ diff --git a/po/fi.po b/po/fi.po index db8456cefc0d66def6a7c304979e1e3946b53e17..4c978ad1aba6963533b902bda751bde88787ad67 100644 --- a/po/fi.po +++ b/po/fi.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 0.10.25.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\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" diff --git a/po/fr.gmo b/po/fr.gmo index 69814da1f7185f62149d6f0acc16212eed5a24a5..e73720d9e2c7f442425f23907d07c20805452f3d 100644 Binary files a/po/fr.gmo and b/po/fr.gmo differ diff --git a/po/fr.po b/po/fr.po index 081aab2d6ebcd12709bb028813df7847997a3b76..e395eb565effc3b05a6ed8235b0ba1dbe4b5b2fd 100644 --- a/po/fr.po +++ b/po/fr.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 0.10.28.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\n" "PO-Revision-Date: 2011-04-28 09:22+0200\n" "Last-Translator: Claude Paroz <claude@2xlibre.net>\n" "Language-Team: French <traduc@traduc.org>\n" diff --git a/po/gl.gmo b/po/gl.gmo index 618d5619c4920fe6b3cda9a27d7fb53081e85306..b2398da2afac6fd425e23a22ab4911a0231c222a 100644 Binary files a/po/gl.gmo and b/po/gl.gmo differ diff --git a/po/gl.po b/po/gl.po index a4b86eb510f12d347729247ba9779864993073ff..d0afa3199620e04353b221094a8eb9d93f948ca0 100644 --- a/po/gl.po +++ b/po/gl.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 1.0.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\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" diff --git a/po/gst-plugins-good-1.0.pot b/po/gst-plugins-good-1.0.pot index fb1c045378fb7682ad98c2a6268c72337a4829f3..e31c027380b850e63b8b38949b88d101b04c1e72 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.1.90\n" +"Project-Id-Version: gst-plugins-good 1.2.0\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\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" @@ -252,7 +252,7 @@ msgstr "" msgid "AUX 2 Out" msgstr "" -#: sys/v4l2/gstv4l2bufferpool.c:1151 +#: sys/v4l2/gstv4l2bufferpool.c:1164 #, c-format msgid "Error reading %d bytes from device '%s'." msgstr "" diff --git a/po/hr.gmo b/po/hr.gmo index e346405e8f1365ddee483d1cc73f93a52b001a4f..bbb9b28e4209c3d7012ac6df1c5fef8d4f55ed24 100644 Binary files a/po/hr.gmo and b/po/hr.gmo differ diff --git a/po/hr.po b/po/hr.po index ccc502c7cf2c612a8f2d1e7f693227bf4d6bf236..1677b56a1955bca972ae02701d7bd6fd263ffbb1 100644 --- a/po/hr.po +++ b/po/hr.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 0.10.28.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\n" "PO-Revision-Date: 2012-04-16 03:04+0200\n" "Last-Translator: Tomislav Krznar <tomislav.krznar@gmail.com>\n" "Language-Team: Croatian <lokalizacija@linux.hr>\n" diff --git a/po/hu.gmo b/po/hu.gmo index cb3ae6403b42ffb89314fb0d86bef0577bfebae7..0abbc322e916dac87b2bc63df656f61cc29e7e66 100644 Binary files a/po/hu.gmo and b/po/hu.gmo differ diff --git a/po/hu.po b/po/hu.po index 5a96f39481443d76fea0b62bda747c696dba3ca0..98a2385500ebc8cc6918fdb9bc3ae20caacf61e6 100644 --- a/po/hu.po +++ b/po/hu.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 1.0.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\n" "PO-Revision-Date: 2012-11-30 15:05+0100\n" "Last-Translator: Gabor Kelemen <kelemeng@gnome.hu>\n" "Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n" diff --git a/po/id.gmo b/po/id.gmo index bf422c36bc228c89394b1df4b1d207f5dfe96599..9ac21291ce13ef1be2a419d3108ce07681382185 100644 Binary files a/po/id.gmo and b/po/id.gmo differ diff --git a/po/id.po b/po/id.po index cc0ad1152f28559660d340918321bf4e82ea10df..546c591b3da3c8707697719e3f42cec2a0052310 100644 --- a/po/id.po +++ b/po/id.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 0.10.26.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\n" "PO-Revision-Date: 2011-02-26 18:09+0700\n" "Last-Translator: Andhika Padmawan <andhika.padmawan@gmail.com>\n" "Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n" diff --git a/po/it.gmo b/po/it.gmo index 0acb11442c966be513867e73ee59e9f91ff74e7d..2aa2ef2fb8077769da3a7c0fd0dd63be8392dbab 100644 Binary files a/po/it.gmo and b/po/it.gmo differ diff --git a/po/it.po b/po/it.po index e9d84ed89b77cdcd2e7ce8386755546989f98955..b0ff05f8c7f4cf35476afaa2fcbc6addad43424b 100644 --- a/po/it.po +++ b/po/it.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 0.10.25.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\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" diff --git a/po/ja.gmo b/po/ja.gmo index 022d9627eb8446e4d186fc0e8ece057d5e925875..8456a0afcc304dfcaf0fcdd7cbce2149283ad52e 100644 Binary files a/po/ja.gmo and b/po/ja.gmo differ diff --git a/po/ja.po b/po/ja.po index b20bf34cd87cdc9a7a56b77a34b1d701f030cb2e..e7fd9bd8b29aaec36c9a035d1ab3cf2ae206d693 100644 --- a/po/ja.po +++ b/po/ja.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 1.0.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\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" diff --git a/po/lt.gmo b/po/lt.gmo index 2488dc1bb36979c6f02c2db70b319cc97823c0b3..3fc6132614ea7acc085e74dce879186adf12de8f 100644 Binary files a/po/lt.gmo and b/po/lt.gmo differ diff --git a/po/lt.po b/po/lt.po index e134cdc8d57de2c82da1774b414b48626aad8420..518b5fa3a4fb92b392534d133fc6453de1430f21 100644 --- a/po/lt.po +++ b/po/lt.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 0.10.23.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\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" diff --git a/po/lv.gmo b/po/lv.gmo index aea90a52d42081e7725432c94e1935eb30cc56cc..1ee1c6d61681bd8931dec4b5d78b7c0a2725927a 100644 Binary files a/po/lv.gmo and b/po/lv.gmo differ diff --git a/po/lv.po b/po/lv.po index ec721d1dbb85bfd8a3730e9fc391037a29f8b11e..7e2beb29464f172fcbb9cb278513143c6b89a092 100644 --- a/po/lv.po +++ b/po/lv.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 0.10.28.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\n" "PO-Revision-Date: 2011-09-02 11:23-0000\n" "Last-Translator: Rihards PriedÄ«tis <rprieditis@gmail.com>\n" "Language-Team: Latvian <translation-team-lv@lists.sourceforge.net>\n" diff --git a/po/mt.gmo b/po/mt.gmo index b9cf43f757a1dacf0cc63875cd9f98b37816e727..e9af73cbddbfebbb737fc4d20532a6d6a0039e08 100644 Binary files a/po/mt.gmo and b/po/mt.gmo differ diff --git a/po/mt.po b/po/mt.po index c1f6745921aa63fe207e19013a552fccaa0bd9a4..e0b784d8547ec64712ec601b4fdda0925ec10025 100644 --- a/po/mt.po +++ b/po/mt.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good-0.10.10.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\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" diff --git a/po/nb.gmo b/po/nb.gmo index bdbb43c6234139c8d3418ee821cee253ccfdd4af..9e225d70343e57d9d459e86075b76c9f8dba207f 100644 Binary files a/po/nb.gmo and b/po/nb.gmo differ diff --git a/po/nb.po b/po/nb.po index d001e47d86bcf323d874cf171d51f5c39a01eda4..dc8374f237de58f2b1a13288beec794c25c31552 100644 --- a/po/nb.po +++ b/po/nb.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 1.0.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\n" "PO-Revision-Date: 2012-12-21 22:13+0100\n" "Last-Translator: Johnny A. Solbu <johnny@solbu.net>\n" "Language-Team: Norwegian Bokmaal <i18n-nb@lister.ping.uio.no>\n" diff --git a/po/nl.gmo b/po/nl.gmo index d934e7fe263e83feb8489c12a9255d8012999360..7626c2b5f76aff41d44446b1a502b66ae0312ccc 100644 Binary files a/po/nl.gmo and b/po/nl.gmo differ diff --git a/po/nl.po b/po/nl.po index bcd355659ef5ce51d6df8b8b2a211b89753dd5b7..51d590ff69360249e383f322dd4fd642a820b169 100644 --- a/po/nl.po +++ b/po/nl.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 1.1.4\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\n" "PO-Revision-Date: 2013-09-15 13:31+0200\n" "Last-Translator: Freek de Kruijf <f.de.kruijf@gmail.com>\n" "Language-Team: Dutch <vertaling@vrijschrift.org>\n" diff --git a/po/or.gmo b/po/or.gmo index 2e16035c43154d6d2e9ad94899fd108a60020e88..5343b9362c1b9c6440e8424a010652bd17f5271d 100644 Binary files a/po/or.gmo and b/po/or.gmo differ diff --git a/po/or.po b/po/or.po index f5e7c04f19d0cad866705bf107d66e93e6fe0384..983cbf05580439af716a8a507af04ca0de0d9063 100644 --- a/po/or.po +++ b/po/or.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-0.8.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\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" diff --git a/po/pl.gmo b/po/pl.gmo index 998f34e118cc928d6448b3fd4be5b681aa3da4a5..712df45fef7f5d90e12ccabbc28d4868fd33e3d3 100644 Binary files a/po/pl.gmo and b/po/pl.gmo differ diff --git a/po/pl.po b/po/pl.po index bce78bc4942ad51aaf1975a6b6586d9003256e33..b999d9eecde99011ba8d3e74cee1430ed90765a3 100644 --- a/po/pl.po +++ b/po/pl.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 1.1.4\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\n" "PO-Revision-Date: 2013-09-15 11:26+0200\n" "Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n" "Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n" diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo index 69efad69e9215e2a2088f09f27b8825ac4fbbcfe..9f3b7f51e18f4a3fe4c2d2a3ed5b674660b71735 100644 Binary files a/po/pt_BR.gmo and b/po/pt_BR.gmo differ diff --git a/po/pt_BR.po b/po/pt_BR.po index 71c48c30b79322783a70345bf122b663bba7113f..cd311aaa45fe4a06334a2de2e8f710d3247c80c2 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good-1.0.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\n" "PO-Revision-Date: 2013-08-21 00:12-0300\n" "Last-Translator: FabrÃcio Godoy <skarllot@gmail.com>\n" "Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge." diff --git a/po/ro.gmo b/po/ro.gmo index 058340e148a03aa51421d9fd6f3afe6c06814dec..953e3862234642ddb6226f176f7cf5fa24138102 100644 Binary files a/po/ro.gmo and b/po/ro.gmo differ diff --git a/po/ro.po b/po/ro.po index ed237390a25b865f869e5cc5e47a229ba5fabee1..eec3e77a072248d0a154a3bcd256d67484375458 100644 --- a/po/ro.po +++ b/po/ro.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 0.10.23.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\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" diff --git a/po/ru.gmo b/po/ru.gmo index e1dd8258733d4e8b354a0d81dba044fb47d2bde2..5920f1233c4cffc9a5147e998d4f35854848cab2 100644 Binary files a/po/ru.gmo and b/po/ru.gmo differ diff --git a/po/ru.po b/po/ru.po index 831981e886578b392685b61e3801963af6aa8bec..21e0ca81a0c9c089c5cd9a26f785d1f3bb41f793 100644 --- a/po/ru.po +++ b/po/ru.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 1.0.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\n" "PO-Revision-Date: 2013-03-09 17:09+0200\n" "Last-Translator: Pavel Maryanov <acid@jack.kiev.ua>\n" "Language-Team: Russian <gnu@mx.ru>\n" diff --git a/po/sk.gmo b/po/sk.gmo index f55cb523e15c9c4ae37b9795307b0d281254f77e..f8dee56fd757d5200ec7438f9c80862f226adbf1 100644 Binary files a/po/sk.gmo and b/po/sk.gmo differ diff --git a/po/sk.po b/po/sk.po index e0c10896073ab9bf15d094fec5e6a10b349894fb..9507cc891d48b2abb8c381e8a2511d797f452c61 100644 --- a/po/sk.po +++ b/po/sk.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 0.10.25.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\n" "PO-Revision-Date: 2010-11-08 15:48+0100\n" "Last-Translator: Peter Tuhársky <tuharsky@misbb.sk>\n" "Language-Team: Slovak <sk-i18n@lists.linux.sk>\n" diff --git a/po/sl.gmo b/po/sl.gmo index 56d06c2e00b6ccd8bee005dd121abc6e28d9cfb6..208358a5c0e91dfbce3830c8c7028b6375652a7b 100644 Binary files a/po/sl.gmo and b/po/sl.gmo differ diff --git a/po/sl.po b/po/sl.po index f50839e99468c7a7b77992240323bf7a5ce94286..e05d51a759536a5742bbae04a07e0b1c1ac98448 100644 --- a/po/sl.po +++ b/po/sl.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good-1.0.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\n" "PO-Revision-Date: 2013-01-05 10:03+0100\n" "Last-Translator: Klemen KoÅ¡ir <klemen913@gmail.com>\n" "Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n" diff --git a/po/sq.gmo b/po/sq.gmo index 9fa0b2d9c49f9c1a8c9da360570a2ff4087f77f5..effa30131fd33c58810db22c9d17929ff54df1b5 100644 Binary files a/po/sq.gmo and b/po/sq.gmo differ diff --git a/po/sq.po b/po/sq.po index cb60e08a9c8e8d2e5f466d96718ca646a8ca136c..3eb5985a7b7266425433838003390737d36f22cb 100644 --- a/po/sq.po +++ b/po/sq.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins 0.8.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\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" diff --git a/po/sr.gmo b/po/sr.gmo index 715e451aa341d755658d935b9679ed890cce8d0a..15c46c4b3ded694bb1f8206b5671baaa3997ddd8 100644 Binary files a/po/sr.gmo and b/po/sr.gmo differ diff --git a/po/sr.po b/po/sr.po index 3900546779125b1928034b23a9112133b7d94179..8cfb86ca76a29fa9395effb796fe5480714c1ba7 100644 --- a/po/sr.po +++ b/po/sr.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good-0.10.28.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\n" "PO-Revision-Date: 2011-12-04 16:44+0200\n" "Last-Translator: МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>\n" "Language-Team: Serbian <gnu@prevod.org>\n" diff --git a/po/sv.gmo b/po/sv.gmo index 9dc8f1d754331e3275fb9920917ee479a1336cbf..069b9b1c4ec64764fb7a5f9b53182afda938d4f0 100644 Binary files a/po/sv.gmo and b/po/sv.gmo differ diff --git a/po/sv.po b/po/sv.po index 40c55c024d6fb23c5cdc6a72b3de4052b03008d3..e44ff4f2fabaaffc3b97ae1f1c316916d28f416b 100644 --- a/po/sv.po +++ b/po/sv.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 0.10.26.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\n" "PO-Revision-Date: 2011-01-09 19:36+0100\n" "Last-Translator: Daniel Nylander <po@danielnylander.se>\n" "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" diff --git a/po/tr.gmo b/po/tr.gmo index 7f47bbf382d89a33e4449d312fa948813b96a2c2..4840bb18f878b577bd08d8e8910584512d0f6fdb 100644 Binary files a/po/tr.gmo and b/po/tr.gmo differ diff --git a/po/tr.po b/po/tr.po index 536b77b48640ea611f850a7f6b8b24257c00113d..be995d489db6609bdd016fb3f4da795351ad5e6a 100644 --- a/po/tr.po +++ b/po/tr.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 1.0.3\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\n" "PO-Revision-Date: 2013-03-10 13:05+0200\n" "Last-Translator: Server Acim <serveracim@gmail.com>\n" "Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n" diff --git a/po/uk.gmo b/po/uk.gmo index 4be2e07301863a8648c3aa4c5c71bbb733678050..30258be8d3595964b4dfb9a3c68e6382089a896d 100644 Binary files a/po/uk.gmo and b/po/uk.gmo differ diff --git a/po/uk.po b/po/uk.po index 4fc97b030f79621145d47ca5809fdadcb28e4d92..efb371a4736e5d37422de3c903d014513cb68dda 100644 --- a/po/uk.po +++ b/po/uk.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 1.1.4\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\n" "PO-Revision-Date: 2013-09-14 22:23+0300\n" "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n" "Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n" diff --git a/po/vi.gmo b/po/vi.gmo index 136f160f9c1253f6506b98ae88eb30f2a8d65061..0a954acbb20eef3d372848af4d15948d03d3f6c6 100644 Binary files a/po/vi.gmo and b/po/vi.gmo differ diff --git a/po/vi.po b/po/vi.po index 5584843e2d8735ebd40335ab138e2626e068a051..63a0a936a5bba683b4a11210bd0bc80225307960 100644 --- a/po/vi.po +++ b/po/vi.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good-1.1.4\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\n" "PO-Revision-Date: 2013-09-16 14:36+0700\n" "Last-Translator: Trần Ngá»c Quân <vnwildman@gmail.com>\n" "Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n" diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo index 3ed270939c4c629c7afe767787508eb7dd7a58f7..b1ecb90eb772d9ef28b54fc79291c8bcfffb7bf2 100644 Binary files a/po/zh_CN.gmo and b/po/zh_CN.gmo differ diff --git a/po/zh_CN.po b/po/zh_CN.po index b9eef162ac30d95bcde0e82cf08dcf9f5c528b4e..42cb3b8e79de1c5d711b179f966ea8aeb48199f0 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gst-plugins-good 0.10.16.2\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n" -"POT-Creation-Date: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\n" "PO-Revision-Date: 2009-11-13 22:20+0800\n" "Last-Translator: Ji ZhengYu <zhengyuji@gmail.com>\n" "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n" diff --git a/po/zh_HK.gmo b/po/zh_HK.gmo index 0049d528371df12e496598f6126da77be7605bbc..33450c00240682507b2d971c786a2fc764b4ec29 100644 Binary files a/po/zh_HK.gmo and b/po/zh_HK.gmo differ diff --git a/po/zh_HK.po b/po/zh_HK.po index 1e2572ea65ce71f3aa32611eb1825ddf62aa3d62..601a80d03808464b4c0a0cf805b248dd095a3d5e 100644 --- a/po/zh_HK.po +++ b/po/zh_HK.po @@ -6,7 +6,7 @@ msgid "" 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: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\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" diff --git a/po/zh_TW.gmo b/po/zh_TW.gmo index 349d26cd4acf31ca0b218063a89dda5189c6600d..8daf242ad584cccbec443c617082000d57b33712 100644 Binary files a/po/zh_TW.gmo and b/po/zh_TW.gmo differ diff --git a/po/zh_TW.po b/po/zh_TW.po index dbb9719b60296fbad9b1b1121cbdba737d90cf92..75ed612320cfdfa9ddb209acf87ac338d1efb61f 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -6,7 +6,7 @@ msgid "" 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: 2013-09-19 10:18+0200\n" +"POT-Creation-Date: 2013-09-24 14:19+0200\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" diff --git a/sys/osxvideo/osxvideosink.m b/sys/osxvideo/osxvideosink.m index 89e980767f09b9c68996385497a4c0038d3c691f..f8c45ee6fce455dbe58d73cdb9448965434eeb91 100644 --- a/sys/osxvideo/osxvideosink.m +++ b/sys/osxvideo/osxvideosink.m @@ -330,9 +330,11 @@ gst_osx_video_sink_osxwindow_destroy (GstOSXVideoSink * osxvideosink) g_return_if_fail (GST_IS_OSX_VIDEO_SINK (osxvideosink)); pool = [[NSAutoreleasePool alloc] init]; + GST_OBJECT_LOCK (osxvideosink); gst_osx_video_sink_call_from_main_thread(osxvideosink, osxvideosink->osxvideosinkobject, @selector(destroy), (id) nil, YES); + GST_OBJECT_UNLOCK (osxvideosink); gst_osx_video_sink_stop_cocoa_loop (osxvideosink); [pool release]; } @@ -779,10 +781,15 @@ gst_osx_video_sink_get_type (void) -(id) initWithSink: (GstOSXVideoSink*) sink { self = [super init]; - self->osxvideosink = sink; + self->osxvideosink = gst_object_ref (sink); return self; } +-(void) dealloc { + gst_object_unref (osxvideosink); + [super dealloc]; +} + -(void) createInternalWindow { GstOSXWindow *osxwindow = osxvideosink->osxwindow; @@ -896,6 +903,7 @@ gst_osx_video_sink_get_type (void) NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; GstBuffer *buf = object->buf; + GST_OBJECT_LOCK (osxvideosink); if (osxvideosink->osxwindow != NULL) { gst_buffer_map (buf, &info, GST_MAP_READ); @@ -910,7 +918,7 @@ gst_osx_video_sink_get_type (void) gst_buffer_unmap (buf, &info); } } - + GST_OBJECT_UNLOCK (osxvideosink); [object release]; [pool release]; diff --git a/sys/v4l2/gstv4l2bufferpool.c b/sys/v4l2/gstv4l2bufferpool.c index 0bc88ca7b6ba322474fc1240cc231b4f7834a242..00c6086aa01031d8e430d959aa7de1a0f8ca9d46 100644 --- a/sys/v4l2/gstv4l2bufferpool.c +++ b/sys/v4l2/gstv4l2bufferpool.c @@ -682,9 +682,9 @@ gst_v4l2_buffer_pool_qbuf (GstV4l2BufferPool * pool, GstBuffer * buf) meta->vbuffer.bytesused = gst_buffer_get_size (buf); GST_LOG_OBJECT (pool, - "enqueue buffer %p, index:%d, queued:%d, flags:%08x used:%d", + "enqueue buffer %p, index:%d, queued:%d, flags:%08x mem:%p used:%d", buf, index, pool->num_queued, meta->vbuffer.flags, - meta->vbuffer.bytesused); + meta->mem, meta->vbuffer.bytesused); if (pool->buffers[index] != NULL) goto already_queued; @@ -720,6 +720,7 @@ gst_v4l2_buffer_pool_dqbuf (GstV4l2BufferPool * pool, GstBuffer ** buffer) struct v4l2_buffer vbuffer; GstV4l2Object *obj = pool->obj; GstClockTime timestamp; + GstV4l2Meta *meta; if ((res = gst_v4l2_object_poll (obj)) != GST_FLOW_OK) goto poll_error; @@ -750,10 +751,13 @@ gst_v4l2_buffer_pool_dqbuf (GstV4l2BufferPool * pool, GstBuffer ** buffer) timestamp = GST_TIMEVAL_TO_TIME (vbuffer.timestamp); + meta = GST_V4L2_META_GET (outbuf); + g_assert (meta != NULL); + GST_LOG_OBJECT (pool, - "dequeued buffer %p seq:%d (ix=%d), used %d, flags %08x, ts %" + "dequeued buffer %p seq:%d (ix=%d), mem %p used %d, flags %08x, ts %" GST_TIME_FORMAT ", pool-queued=%d, buffer=%p", outbuf, vbuffer.sequence, - vbuffer.index, vbuffer.bytesused, vbuffer.flags, + vbuffer.index, meta->mem, vbuffer.bytesused, vbuffer.flags, GST_TIME_ARGS (timestamp), pool->num_queued, outbuf); /* set top/bottom field first if v4l2_buffer has the information */ @@ -764,9 +768,17 @@ gst_v4l2_buffer_pool_dqbuf (GstV4l2BufferPool * pool, GstBuffer ** buffer) GST_BUFFER_FLAG_UNSET (outbuf, GST_VIDEO_BUFFER_FLAG_TFF); } - /* this can change at every frame, esp. with jpeg */ - if (obj->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) - gst_buffer_resize (outbuf, 0, vbuffer.bytesused); + /* The size can change at every frame, esp. with jpeg. The GstMemory + * inside the GstBuffer could have been changed by some other + * element, so just put back the original one. We always set it as + * no share, so if it's not there, it's not used at all. + */ + if (obj->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) { + gst_buffer_remove_all_memory (outbuf); + gst_buffer_append_memory (outbuf, + gst_memory_new_wrapped (GST_MEMORY_FLAG_NO_SHARE, + meta->mem, vbuffer.length, 0, vbuffer.bytesused, NULL, NULL)); + } GST_BUFFER_TIMESTAMP (outbuf) = timestamp; @@ -882,8 +894,9 @@ gst_v4l2_buffer_pool_acquire_buffer (GstBufferPool * bpool, GstBuffer ** buffer, } #endif - /* copy the memory */ - copy = gst_buffer_copy (*buffer); + /* copy the buffer */ + copy = gst_buffer_copy_region (*buffer, + GST_BUFFER_COPY_ALL | GST_BUFFER_COPY_DEEP, 0, -1); GST_LOG_OBJECT (pool, "copy buffer %p->%p", *buffer, copy); /* and requeue so that we can continue capturing */ diff --git a/sys/v4l2/gstv4l2bufferpool.h b/sys/v4l2/gstv4l2bufferpool.h index 90ccad4319f68f57dafd3ee4077387b2262e8276..3582bcea9a2962630b9378299832ad271b954bf8 100644 --- a/sys/v4l2/gstv4l2bufferpool.h +++ b/sys/v4l2/gstv4l2bufferpool.h @@ -32,7 +32,6 @@ typedef struct _GstV4l2BufferPoolClass GstV4l2BufferPoolClass; typedef struct _GstV4l2Meta GstV4l2Meta; #include "gstv4l2object.h" -//#include "v4l2_calls.h" GST_DEBUG_CATEGORY_EXTERN (v4l2buffer_debug); diff --git a/tests/check/Makefile.in b/tests/check/Makefile.in index d1b0bb22c6cbfa44072874bfc25dd8d1c209decb..a7a603ea15571c0e1e0482c6a15a6f98ad5f4bbc 100644 --- a/tests/check/Makefile.in +++ b/tests/check/Makefile.in @@ -3816,6 +3816,7 @@ LOOPS ?= 10 $(VALGRIND_PATH) -q \ $(foreach s,$(SUPPRESSIONS),--suppressions=$(s)) \ --tool=memcheck --leak-check=full --trace-children=yes \ + --show-possibly-lost=no \ --leak-resolution=high --num-callers=20 \ ./$* 2>&1 | tee valgrind.log @if grep "==" valgrind.log > /dev/null 2>&1; then \ @@ -3833,6 +3834,7 @@ LOOPS ?= 10 $(VALGRIND_PATH) -q \ $(foreach s,$(SUPPRESSIONS),--suppressions=$(s)) \ --tool=memcheck --leak-check=full --trace-children=yes \ + --show-possibly-lost=no \ --leak-resolution=high --num-callers=20 \ --gen-suppressions=all \ ./$* 2>&1 | tee suppressions.log diff --git a/tests/check/elements/rtpjitterbuffer.c b/tests/check/elements/rtpjitterbuffer.c index bc868cba17b495079f11d23e6a6b712c5066b2a0..f7d9e41074bf88c342d69e6a2d375b181cec8921 100644 --- a/tests/check/elements/rtpjitterbuffer.c +++ b/tests/check/elements/rtpjitterbuffer.c @@ -110,7 +110,8 @@ setup_jitterbuffer (gint num_buffers) 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_TIMESTAMP (buffer) = ts; + GST_BUFFER_DTS (buffer) = ts; + GST_BUFFER_PTS (buffer) = ts; GST_BUFFER_DURATION (buffer) = tso; gst_mini_object_weak_ref (GST_MINI_OBJECT (buffer), buffer_dropped, NULL); GST_DEBUG ("created buffer: %p", buffer); @@ -190,7 +191,8 @@ check_jitterbuffer_results (GstElement * jitterbuffer, gint num_buffers) fail_unless_equals_int (g_list_length (buffers), num_buffers); for (node = buffers; node; node = g_list_next (node)) { fail_if ((buffer = (GstBuffer *) node->data) == NULL); - fail_if (GST_BUFFER_TIMESTAMP (buffer) != ts); + fail_if (GST_BUFFER_PTS (buffer) != ts); + fail_if (GST_BUFFER_DTS (buffer) != ts); gst_buffer_map (buffer, &map, GST_MAP_READ); cur_sn = ((guint16) map.data[2] << 8) | map.data[3]; cur_ts = ((guint32) map.data[4] << 24) | ((guint32) map.data[5] << 16) | @@ -317,7 +319,8 @@ GST_START_TEST (test_basetime) fail_unless_equals_int ((g_list_length (buffers) + num_dropped), num_buffers); buffer = (GstBuffer *) buffers->data; - fail_unless (GST_BUFFER_TIMESTAMP (buffer) != (num_buffers * tso)); + fail_unless (GST_BUFFER_DTS (buffer) != (num_buffers * tso)); + fail_unless (GST_BUFFER_PTS (buffer) != (num_buffers * tso)); /* cleanup */ cleanup_jitterbuffer (jitterbuffer); @@ -336,8 +339,10 @@ typedef struct GstPad *test_sink_pad, *test_src_pad; GstClock *clock; GAsyncQueue *buf_queue; - GAsyncQueue *event_queue; + GAsyncQueue *sink_event_queue; + GAsyncQueue *src_event_queue; gint lost_event_count; + gint rtx_event_count; } TestData; static GstCaps * @@ -361,7 +366,8 @@ generate_test_buffer (GstClockTime gst_ts, GstRTPBuffer rtp = GST_RTP_BUFFER_INIT; buf = gst_rtp_buffer_new_allocate (payload_size, 0, 0); - GST_BUFFER_TIMESTAMP (buf) = gst_ts; + GST_BUFFER_DTS (buf) = gst_ts; + GST_BUFFER_PTS (buf) = gst_ts; gst_rtp_buffer_map (buf, GST_MAP_READWRITE, &rtp); gst_rtp_buffer_set_payload_type (&rtp, pcmu_payload_type); @@ -395,10 +401,31 @@ test_sink_pad_event_cb (GstPad * pad, GstObject * parent, GstEvent * event) GST_DEBUG ("got event %" GST_PTR_FORMAT, event); - if (strcmp (gst_structure_get_name (structure), "GstRTPPacketLost") == 0) + if (strcmp (gst_structure_get_name (structure), "GstRTPPacketLost") == 0) { data->lost_event_count++; + GST_DEBUG ("lost event count %d", data->lost_event_count); + } - g_async_queue_push (data->event_queue, event); + g_async_queue_push (data->sink_event_queue, event); + return TRUE; +} + +static gboolean +test_src_pad_event_cb (GstPad * pad, GstObject * parent, GstEvent * event) +{ + TestData *data = gst_pad_get_element_private (pad); + const GstStructure *structure = gst_event_get_structure (event); + + GST_DEBUG ("got event %" GST_PTR_FORMAT, event); + + if (structure + && strcmp (gst_structure_get_name (structure), + "GstRTPRetransmissionRequest") == 0) { + data->rtx_event_count++; + GST_DEBUG ("rtx event count %d", data->rtx_event_count); + } + + g_async_queue_push (data->src_event_queue, event); return TRUE; } @@ -422,33 +449,39 @@ setup_testharness (TestData * data) g_assert_cmpint (gst_element_set_state (data->jitter_buffer, GST_STATE_PLAYING), !=, GST_STATE_CHANGE_FAILURE); + /* set up the buf and event queues */ + data->buf_queue = + g_async_queue_new_full ((GDestroyNotify) gst_mini_object_unref); + data->sink_event_queue = + g_async_queue_new_full ((GDestroyNotify) gst_mini_object_unref); + data->src_event_queue = + g_async_queue_new_full ((GDestroyNotify) gst_mini_object_unref); + + data->lost_event_count = 0; + data->rtx_event_count = 0; + /* link in the test source-pad */ data->test_src_pad = gst_pad_new ("src", GST_PAD_SRC); + gst_pad_set_element_private (data->test_src_pad, data); + gst_pad_set_event_function (data->test_src_pad, test_src_pad_event_cb); jb_sink_pad = gst_element_get_static_pad (data->jitter_buffer, "sink"); g_assert_cmpint (gst_pad_link (data->test_src_pad, jb_sink_pad), ==, GST_PAD_LINK_OK); - g_assert (gst_pad_set_active (data->test_src_pad, TRUE)); gst_object_unref (jb_sink_pad); /* link in the test sink-pad */ data->test_sink_pad = gst_pad_new ("sink", GST_PAD_SINK); + gst_pad_set_element_private (data->test_sink_pad, data); gst_pad_set_caps (data->test_sink_pad, generate_caps ()); gst_pad_set_chain_function (data->test_sink_pad, test_sink_pad_chain_cb); gst_pad_set_event_function (data->test_sink_pad, test_sink_pad_event_cb); jb_src_pad = gst_element_get_static_pad (data->jitter_buffer, "src"); g_assert_cmpint (gst_pad_link (jb_src_pad, data->test_sink_pad), ==, GST_PAD_LINK_OK); - g_assert (gst_pad_set_active (data->test_sink_pad, TRUE)); gst_object_unref (jb_src_pad); - /* set up the buf and event queues */ - data->buf_queue = - g_async_queue_new_full ((GDestroyNotify) gst_mini_object_unref); - data->event_queue = - g_async_queue_new_full ((GDestroyNotify) gst_mini_object_unref); - - data->lost_event_count = 0; - gst_pad_set_element_private (data->test_sink_pad, data); + g_assert (gst_pad_set_active (data->test_src_pad, TRUE)); + g_assert (gst_pad_set_active (data->test_sink_pad, TRUE)); gst_segment_init (&seg, GST_FORMAT_TIME); @@ -457,7 +490,7 @@ setup_testharness (TestData * data) gst_pad_set_caps (data->test_src_pad, generate_caps ()); gst_pad_push_event (data->test_src_pad, gst_event_new_segment (&seg)); - while ((obj = g_async_queue_try_pop (data->event_queue))) + while ((obj = g_async_queue_try_pop (data->sink_event_queue))) gst_mini_object_unref (obj); } @@ -482,8 +515,10 @@ destroy_testharness (TestData * data) g_async_queue_unref (data->buf_queue); data->buf_queue = NULL; - g_async_queue_unref (data->event_queue); - data->event_queue = NULL; + g_async_queue_unref (data->sink_event_queue); + data->sink_event_queue = NULL; + g_async_queue_unref (data->src_event_queue); + data->src_event_queue = NULL; data->lost_event_count = 0; } @@ -499,6 +534,7 @@ verify_lost_event (GstEvent * event, guint32 expected_seqnum, GstClockTime timestamp; GstClockTime duration; gboolean late; + g_assert (gst_structure_get_uint (s, "seqnum", &seqnum)); value = gst_structure_get_value (s, "timestamp"); @@ -517,11 +553,41 @@ verify_lost_event (GstEvent * event, guint32 expected_seqnum, g_assert (late == expected_late); } +static void +verify_rtx_event (GstEvent * event, guint32 expected_seqnum, + GstClockTime expected_timestamp, guint expected_delay, + GstClockTime expected_spacing) +{ + const GstStructure *s = gst_event_get_structure (event); + const GValue *value; + guint32 seqnum; + GstClockTime timestamp, spacing; + guint delay; + + g_assert (gst_structure_get_uint (s, "seqnum", &seqnum)); + + value = gst_structure_get_value (s, "running-time"); + g_assert (value && G_VALUE_HOLDS_UINT64 (value)); + timestamp = g_value_get_uint64 (value); + + value = gst_structure_get_value (s, "delay"); + g_assert (value && G_VALUE_HOLDS_UINT (value)); + delay = g_value_get_uint (value); + + value = gst_structure_get_value (s, "packet-spacing"); + g_assert (value && G_VALUE_HOLDS_UINT64 (value)); + spacing = g_value_get_uint64 (value); + + g_assert_cmpint (seqnum, ==, expected_seqnum); + g_assert_cmpint (timestamp, ==, expected_timestamp); + g_assert_cmpint (delay, ==, expected_delay); + g_assert_cmpint (spacing, ==, expected_spacing); +} + GST_START_TEST (test_only_one_lost_event_on_large_gaps) { TestData data; GstClockID id, test_id; - guint64 timeout; GstBuffer *in_buf, *out_buf; GstEvent *out_event; gint jb_latency_ms = 200; @@ -529,7 +595,6 @@ GST_START_TEST (test_only_one_lost_event_on_large_gaps) GstRTPBuffer rtp = GST_RTP_BUFFER_INIT; setup_testharness (&data); - timeout = 20 * G_USEC_PER_SEC; g_object_set (data.jitter_buffer, "latency", jb_latency_ms, NULL); @@ -548,9 +613,10 @@ GST_START_TEST (test_only_one_lost_event_on_large_gaps) == id); /* check for the buffer coming out that was pushed in */ - out_buf = g_async_queue_timeout_pop (data.buf_queue, timeout); + out_buf = g_async_queue_pop (data.buf_queue); g_assert (out_buf != NULL); - g_assert_cmpint (GST_BUFFER_TIMESTAMP (out_buf), ==, 0); + g_assert_cmpint (GST_BUFFER_DTS (out_buf), ==, 0); + g_assert_cmpint (GST_BUFFER_PTS (out_buf), ==, 0); /* move time ahead 10 seconds */ gst_test_clock_set_time (GST_TEST_CLOCK (data.clock), 10 * GST_SECOND); @@ -569,16 +635,13 @@ GST_START_TEST (test_only_one_lost_event_on_large_gaps) g_assert_cmpint (gst_pad_push (data.test_src_pad, in_buf), ==, GST_FLOW_OK); /* release the wait */ - GST_DEBUG ("wait for id"); gst_test_clock_wait_for_next_pending_id (GST_TEST_CLOCK (data.clock), &id); - GST_DEBUG ("got wait id %p", id); gst_test_clock_advance_time (GST_TEST_CLOCK (data.clock), GST_MSECOND * 20); test_id = gst_test_clock_process_next_clock_id (GST_TEST_CLOCK (data.clock)); - GST_DEBUG ("process id %p", test_id); g_assert (id == test_id); /* we should now receive a packet-lost-event for buffers 1 through 489 */ - out_event = g_async_queue_timeout_pop (data.event_queue, timeout); + out_event = g_async_queue_pop (data.sink_event_queue); g_assert (out_event != NULL); g_assert_cmpint (data.lost_event_count, ==, 1); verify_lost_event (out_event, 1, 1 * GST_MSECOND * 20, GST_MSECOND * 20 * 490, @@ -595,13 +658,14 @@ GST_START_TEST (test_only_one_lost_event_on_large_gaps) } } - out_buf = g_async_queue_timeout_pop (data.buf_queue, timeout); + out_buf = g_async_queue_pop (data.buf_queue); g_assert (out_buf != NULL); g_assert (GST_BUFFER_FLAG_IS_SET (out_buf, GST_BUFFER_FLAG_DISCONT)); gst_rtp_buffer_map (out_buf, GST_MAP_READ, &rtp); g_assert_cmpint (gst_rtp_buffer_get_seq (&rtp), ==, 500); gst_rtp_buffer_unmap (&rtp); - g_assert_cmpint (GST_BUFFER_TIMESTAMP (out_buf), ==, (10 * GST_SECOND)); + g_assert_cmpint (GST_BUFFER_DTS (out_buf), ==, (10 * GST_SECOND)); + g_assert_cmpint (GST_BUFFER_PTS (out_buf), ==, (10 * GST_SECOND)); /* we get as many lost events as the the number of buffers the jitterbuffer * is able to wait for (+ the one we already got) */ @@ -616,7 +680,6 @@ GST_START_TEST (test_two_lost_one_arrives_in_time) { TestData data; GstClockID id; - guint64 timeout; GstBuffer *in_buf, *out_buf; GstEvent *out_event; gint jb_latency_ms = 100; @@ -625,7 +688,6 @@ GST_START_TEST (test_two_lost_one_arrives_in_time) GstRTPBuffer rtp = GST_RTP_BUFFER_INIT; setup_testharness (&data); - timeout = 20 * G_USEC_PER_SEC; g_object_set (data.jitter_buffer, "latency", jb_latency_ms, NULL); @@ -638,7 +700,7 @@ GST_START_TEST (test_two_lost_one_arrives_in_time) gst_test_clock_set_time (GST_TEST_CLOCK (data.clock), now); g_assert (gst_test_clock_process_next_clock_id (GST_TEST_CLOCK (data.clock)) == id); - out_buf = g_async_queue_timeout_pop (data.buf_queue, timeout); + out_buf = g_async_queue_pop (data.buf_queue); g_assert (out_buf != NULL); /* push some buffers arriving in perfect time! */ @@ -649,9 +711,10 @@ GST_START_TEST (test_two_lost_one_arrives_in_time) g_assert_cmpint (gst_pad_push (data.test_src_pad, in_buf), ==, GST_FLOW_OK); /* check for the buffer coming out that was pushed in */ - out_buf = g_async_queue_timeout_pop (data.buf_queue, timeout); + out_buf = g_async_queue_pop (data.buf_queue); g_assert (out_buf != NULL); - g_assert_cmpint (GST_BUFFER_TIMESTAMP (out_buf), ==, buffer_time); + g_assert_cmpint (GST_BUFFER_DTS (out_buf), ==, buffer_time); + g_assert_cmpint (GST_BUFFER_PTS (out_buf), ==, buffer_time); } /* hop over 2 packets and make another one (gap of 2) */ @@ -673,7 +736,7 @@ GST_START_TEST (test_two_lost_one_arrives_in_time) == id); /* we should now receive a packet-lost-event for buffer 3 */ - out_event = g_async_queue_timeout_pop (data.event_queue, timeout); + out_event = g_async_queue_pop (data.sink_event_queue); g_assert (out_event != NULL); g_assert_cmpint (data.lost_event_count, ==, 1); verify_lost_event (out_event, 3, 3 * GST_MSECOND * 20, GST_MSECOND * 20, @@ -686,7 +749,7 @@ GST_START_TEST (test_two_lost_one_arrives_in_time) g_assert_cmpint (gst_pad_push (data.test_src_pad, in_buf), ==, GST_FLOW_OK); /* verify that buffer 4 made it through! */ - out_buf = g_async_queue_timeout_pop (data.buf_queue, timeout); + out_buf = g_async_queue_pop (data.buf_queue); g_assert (out_buf != NULL); g_assert (GST_BUFFER_FLAG_IS_SET (out_buf, GST_BUFFER_FLAG_DISCONT)); gst_rtp_buffer_map (out_buf, GST_MAP_READ, &rtp); @@ -694,7 +757,7 @@ GST_START_TEST (test_two_lost_one_arrives_in_time) gst_rtp_buffer_unmap (&rtp); /* and see that buffer 5 now arrives in a normal fashion */ - out_buf = g_async_queue_timeout_pop (data.buf_queue, timeout); + out_buf = g_async_queue_pop (data.buf_queue); g_assert (out_buf != NULL); g_assert (!GST_BUFFER_FLAG_IS_SET (out_buf, GST_BUFFER_FLAG_DISCONT)); gst_rtp_buffer_map (out_buf, GST_MAP_READ, &rtp); @@ -713,7 +776,6 @@ GST_START_TEST (test_late_packets_still_makes_lost_events) { TestData data; GstClockID id; - guint64 timeout; GstBuffer *in_buf, *out_buf; GstEvent *out_event; gint jb_latency_ms = 10; @@ -722,7 +784,6 @@ GST_START_TEST (test_late_packets_still_makes_lost_events) GstRTPBuffer rtp = GST_RTP_BUFFER_INIT; setup_testharness (&data); - timeout = 20 * G_USEC_PER_SEC; g_object_set (data.jitter_buffer, "latency", jb_latency_ms, NULL); @@ -735,7 +796,7 @@ GST_START_TEST (test_late_packets_still_makes_lost_events) gst_test_clock_wait_for_next_pending_id (GST_TEST_CLOCK (data.clock), &id); g_assert (gst_test_clock_process_next_clock_id (GST_TEST_CLOCK (data.clock)) == id); - out_buf = g_async_queue_timeout_pop (data.buf_queue, timeout); + out_buf = g_async_queue_pop (data.buf_queue); g_assert (out_buf != NULL); /* push some buffers in! */ @@ -745,9 +806,10 @@ GST_START_TEST (test_late_packets_still_makes_lost_events) g_assert_cmpint (gst_pad_push (data.test_src_pad, in_buf), ==, GST_FLOW_OK); /* check for the buffer coming out that was pushed in */ - out_buf = g_async_queue_timeout_pop (data.buf_queue, timeout); + out_buf = g_async_queue_pop (data.buf_queue); g_assert (out_buf != NULL); - g_assert_cmpint (GST_BUFFER_TIMESTAMP (out_buf), ==, buffer_time); + g_assert_cmpint (GST_BUFFER_DTS (out_buf), ==, buffer_time); + g_assert_cmpint (GST_BUFFER_PTS (out_buf), ==, buffer_time); } /* hop over 2 packets and make another one (gap of 2) */ @@ -757,14 +819,14 @@ GST_START_TEST (test_late_packets_still_makes_lost_events) g_assert_cmpint (gst_pad_push (data.test_src_pad, in_buf), ==, GST_FLOW_OK); /* we should now receive a packet-lost-event for buffer 3 and 4 */ - out_event = g_async_queue_timeout_pop (data.event_queue, timeout); + out_event = g_async_queue_pop (data.sink_event_queue); g_assert (out_event != NULL); g_assert_cmpint (data.lost_event_count, ==, 1); verify_lost_event (out_event, 3, 3 * GST_MSECOND * 20, GST_MSECOND * 20 * 2, TRUE); /* verify that buffer 5 made it through! */ - out_buf = g_async_queue_timeout_pop (data.buf_queue, timeout); + out_buf = g_async_queue_pop (data.buf_queue); g_assert (out_buf != NULL); g_assert (GST_BUFFER_FLAG_IS_SET (out_buf, GST_BUFFER_FLAG_DISCONT)); gst_rtp_buffer_map (out_buf, GST_MAP_READ, &rtp); @@ -783,7 +845,6 @@ GST_START_TEST (test_all_packets_are_timestamped_zero) { TestData data; GstClockID id; - guint64 timeout; GstBuffer *in_buf, *out_buf; GstEvent *out_event; gint jb_latency_ms = 10; @@ -791,7 +852,6 @@ GST_START_TEST (test_all_packets_are_timestamped_zero) GstRTPBuffer rtp = GST_RTP_BUFFER_INIT; setup_testharness (&data); - timeout = 20 * G_USEC_PER_SEC; g_object_set (data.jitter_buffer, "latency", jb_latency_ms, NULL); @@ -804,7 +864,7 @@ GST_START_TEST (test_all_packets_are_timestamped_zero) gst_test_clock_wait_for_next_pending_id (GST_TEST_CLOCK (data.clock), &id); g_assert (gst_test_clock_process_next_clock_id (GST_TEST_CLOCK (data.clock)) == id); - out_buf = g_async_queue_timeout_pop (data.buf_queue, timeout); + out_buf = g_async_queue_pop (data.buf_queue); g_assert (out_buf != NULL); /* push some buffers in! */ @@ -813,9 +873,10 @@ GST_START_TEST (test_all_packets_are_timestamped_zero) g_assert_cmpint (gst_pad_push (data.test_src_pad, in_buf), ==, GST_FLOW_OK); /* check for the buffer coming out that was pushed in */ - out_buf = g_async_queue_timeout_pop (data.buf_queue, timeout); + out_buf = g_async_queue_pop (data.buf_queue); g_assert (out_buf != NULL); - g_assert_cmpint (GST_BUFFER_TIMESTAMP (out_buf), ==, 0); + g_assert_cmpint (GST_BUFFER_DTS (out_buf), ==, 0); + g_assert_cmpint (GST_BUFFER_PTS (out_buf), ==, 0); } /* hop over 2 packets and make another one (gap of 2) */ @@ -824,25 +885,25 @@ GST_START_TEST (test_all_packets_are_timestamped_zero) g_assert_cmpint (gst_pad_push (data.test_src_pad, in_buf), ==, GST_FLOW_OK); /* we should now receive a packet-lost-event for buffer 3 and 4 */ - out_event = g_async_queue_timeout_pop (data.event_queue, timeout); + out_event = g_async_queue_pop (data.sink_event_queue); g_assert (out_event != NULL); verify_lost_event (out_event, 3, 0, 0, FALSE); - out_event = g_async_queue_timeout_pop (data.event_queue, timeout); + out_event = g_async_queue_pop (data.sink_event_queue); g_assert (out_event != NULL); verify_lost_event (out_event, 4, 0, 0, FALSE); g_assert_cmpint (data.lost_event_count, ==, 2); /* verify that buffer 5 made it through! */ - out_buf = g_async_queue_timeout_pop (data.buf_queue, timeout); + out_buf = g_async_queue_pop (data.buf_queue); g_assert (out_buf != NULL); g_assert (GST_BUFFER_FLAG_IS_SET (out_buf, GST_BUFFER_FLAG_DISCONT)); gst_rtp_buffer_map (out_buf, GST_MAP_READ, &rtp); g_assert_cmpint (gst_rtp_buffer_get_seq (&rtp), ==, 5); gst_rtp_buffer_unmap (&rtp); - /* should still have only seen 1 packet lost event */ + /* should still have only seen 2 packet lost events */ g_assert_cmpint (data.lost_event_count, ==, 2); destroy_testharness (&data); @@ -850,6 +911,356 @@ GST_START_TEST (test_all_packets_are_timestamped_zero) GST_END_TEST; +GST_START_TEST (test_rtx_expected_next) +{ + TestData data; + GstClockID id, tid; + GstBuffer *in_buf, *out_buf; + GstEvent *out_event; + gint jb_latency_ms = 200; + + setup_testharness (&data); + g_object_set (data.jitter_buffer, "do-retransmission", TRUE, NULL); + g_object_set (data.jitter_buffer, "latency", jb_latency_ms, NULL); + g_object_set (data.jitter_buffer, "rtx-retry-period", 120, NULL); + + gst_test_clock_set_time (GST_TEST_CLOCK (data.clock), 0); + + /* push the first buffer in */ + in_buf = generate_test_buffer (0 * GST_MSECOND, TRUE, 0, 0); + g_assert_cmpint (gst_pad_push (data.test_src_pad, in_buf), ==, GST_FLOW_OK); + + gst_test_clock_set_time (GST_TEST_CLOCK (data.clock), 20 * GST_MSECOND); + + gst_test_clock_wait_for_next_pending_id (GST_TEST_CLOCK (data.clock), &id); + + /* put second buffer, the jitterbuffer should now know that the packet spacing + * is 20ms and should ask for retransmission of seqnum 2 in 20ms */ + in_buf = generate_test_buffer (20 * GST_MSECOND, TRUE, 1, 160); + g_assert_cmpint (gst_pad_push (data.test_src_pad, in_buf), ==, GST_FLOW_OK); + + gst_test_clock_wait_for_next_pending_id (GST_TEST_CLOCK (data.clock), &id); + gst_test_clock_set_time (GST_TEST_CLOCK (data.clock), 60 * GST_MSECOND); + g_assert (gst_test_clock_process_next_clock_id (GST_TEST_CLOCK (data.clock)) + == id); + + out_event = g_async_queue_pop (data.src_event_queue); + g_assert (out_event != NULL); + verify_rtx_event (out_event, 2, 40 * GST_MSECOND, 20, 20 * GST_MSECOND); + + /* now we wait for the next timeout */ + gst_test_clock_wait_for_next_pending_id (GST_TEST_CLOCK (data.clock), &id); + gst_test_clock_set_time (GST_TEST_CLOCK (data.clock), 100 * GST_MSECOND); + tid = gst_test_clock_process_next_clock_id (GST_TEST_CLOCK (data.clock)); + g_assert (id == tid); + + out_event = g_async_queue_pop (data.src_event_queue); + g_assert (out_event != NULL); + verify_rtx_event (out_event, 2, 40 * GST_MSECOND, 60, 20 * GST_MSECOND); + + gst_test_clock_wait_for_next_pending_id (GST_TEST_CLOCK (data.clock), &id); + gst_test_clock_set_time (GST_TEST_CLOCK (data.clock), 140 * GST_MSECOND); + tid = gst_test_clock_process_next_clock_id (GST_TEST_CLOCK (data.clock)); + g_assert (id == tid); + + out_event = g_async_queue_pop (data.src_event_queue); + g_assert (out_event != NULL); + verify_rtx_event (out_event, 2, 40 * GST_MSECOND, 100, 20 * GST_MSECOND); + + gst_test_clock_wait_for_next_pending_id (GST_TEST_CLOCK (data.clock), &id); + gst_test_clock_set_time (GST_TEST_CLOCK (data.clock), 200 * GST_MSECOND); + tid = gst_test_clock_process_next_clock_id (GST_TEST_CLOCK (data.clock)); + g_assert (id == tid); + + out_buf = g_async_queue_pop (data.buf_queue); + g_assert (out_buf != NULL); + + + gst_test_clock_wait_for_next_pending_id (GST_TEST_CLOCK (data.clock), &id); + gst_test_clock_set_time (GST_TEST_CLOCK (data.clock), 260 * GST_MSECOND); + g_assert (gst_test_clock_process_next_clock_id (GST_TEST_CLOCK (data.clock)) + == id); + + /* we should now receive a packet-lost-event for buffer 2 */ + out_event = g_async_queue_pop (data.sink_event_queue); + g_assert (out_event != NULL); + verify_lost_event (out_event, 2, 40 * GST_MSECOND, 20 * GST_MSECOND, FALSE); + + destroy_testharness (&data); +} + +GST_END_TEST; + +GST_START_TEST (test_rtx_two_missing) +{ + TestData data; + GstClockID id, tid; + GstBuffer *in_buf, *out_buf; + GstEvent *out_event; + gint jb_latency_ms = 200; + gint i; + GstRTPBuffer rtp = GST_RTP_BUFFER_INIT; + + setup_testharness (&data); + g_object_set (data.jitter_buffer, "do-retransmission", TRUE, NULL); + g_object_set (data.jitter_buffer, "latency", jb_latency_ms, NULL); + g_object_set (data.jitter_buffer, "rtx-retry-period", 120, NULL); + + gst_test_clock_set_time (GST_TEST_CLOCK (data.clock), 0); + + /* push the first buffer in */ + in_buf = generate_test_buffer (0 * GST_MSECOND, TRUE, 0, 0); + g_assert_cmpint (gst_pad_push (data.test_src_pad, in_buf), ==, GST_FLOW_OK); + + gst_test_clock_set_time (GST_TEST_CLOCK (data.clock), 20 * GST_MSECOND); + + /* put second buffer, the jitterbuffer should now know that the packet spacing + * is 20ms and should ask for retransmission of seqnum 2 at 60ms */ + in_buf = generate_test_buffer (20 * GST_MSECOND, TRUE, 1, 160); + g_assert_cmpint (gst_pad_push (data.test_src_pad, in_buf), ==, GST_FLOW_OK); + + /* push buffer 4, 2 and 3 are missing now, we should get retransmission events + * for 3 at 100ms*/ + in_buf = generate_test_buffer (80 * GST_MSECOND, TRUE, 4, 4 * 160); + g_assert_cmpint (gst_pad_push (data.test_src_pad, in_buf), ==, GST_FLOW_OK); + + /* wait for first retransmission request */ + gst_test_clock_set_time (GST_TEST_CLOCK (data.clock), 60 * GST_MSECOND); + do { + gst_test_clock_wait_for_next_pending_id (GST_TEST_CLOCK (data.clock), &id); + } while (id != + gst_test_clock_process_next_clock_id (GST_TEST_CLOCK (data.clock))); + + /* we should have 2 events now, one for 2 and another for 3 */ + out_event = g_async_queue_pop (data.src_event_queue); + g_assert (out_event != NULL); + verify_rtx_event (out_event, 2, 40 * GST_MSECOND, 20, 20 * GST_MSECOND); + out_event = g_async_queue_pop (data.src_event_queue); + g_assert (out_event != NULL); + verify_rtx_event (out_event, 3, 60 * GST_MSECOND, 0, 20 * GST_MSECOND); + + /* now we wait for the next timeout */ + gst_test_clock_wait_for_next_pending_id (GST_TEST_CLOCK (data.clock), &id); + gst_test_clock_set_time (GST_TEST_CLOCK (data.clock), 100 * GST_MSECOND); + tid = gst_test_clock_process_next_clock_id (GST_TEST_CLOCK (data.clock)); + g_assert (id == tid); + + /* we should have 2 events now, one for 2 and another for 3 */ + out_event = g_async_queue_pop (data.src_event_queue); + g_assert (out_event != NULL); + verify_rtx_event (out_event, 2, 40 * GST_MSECOND, 60, 20 * GST_MSECOND); + out_event = g_async_queue_pop (data.src_event_queue); + g_assert (out_event != NULL); + verify_rtx_event (out_event, 3, 60 * GST_MSECOND, 40, 20 * GST_MSECOND); + + /* make buffer 3 */ + in_buf = generate_test_buffer (60 * GST_MSECOND, TRUE, 3, 3 * 160); + g_assert_cmpint (gst_pad_push (data.test_src_pad, in_buf), ==, GST_FLOW_OK); + + /* make more buffers */ + for (i = 5; i < 15; i++) { + in_buf = generate_test_buffer (i * 20 * GST_MSECOND, TRUE, i, i * 160); + g_assert_cmpint (gst_pad_push (data.test_src_pad, in_buf), ==, GST_FLOW_OK); + } + + gst_test_clock_wait_for_next_pending_id (GST_TEST_CLOCK (data.clock), &id); + gst_test_clock_set_time (GST_TEST_CLOCK (data.clock), 140 * GST_MSECOND); + tid = gst_test_clock_process_next_clock_id (GST_TEST_CLOCK (data.clock)); + g_assert (id == tid); + + /* now we only get requests for 2 */ + out_event = g_async_queue_pop (data.src_event_queue); + g_assert (out_event != NULL); + verify_rtx_event (out_event, 2, 40 * GST_MSECOND, 100, 20 * GST_MSECOND); + + /* this is when buffer 0 deadline expires */ + gst_test_clock_wait_for_next_pending_id (GST_TEST_CLOCK (data.clock), &id); + gst_test_clock_set_time (GST_TEST_CLOCK (data.clock), 200 * GST_MSECOND); + tid = gst_test_clock_process_next_clock_id (GST_TEST_CLOCK (data.clock)); + g_assert (id == tid); + + for (i = 0; i < 2; i++) { + GST_DEBUG ("popping %d", i); + out_buf = g_async_queue_pop (data.buf_queue); + g_assert (out_buf != NULL); + gst_rtp_buffer_map (out_buf, GST_MAP_READ, &rtp); + g_assert_cmpint (gst_rtp_buffer_get_seq (&rtp), ==, i); + gst_rtp_buffer_unmap (&rtp); + } + + /* this is when 2 is lost */ + gst_test_clock_wait_for_next_pending_id (GST_TEST_CLOCK (data.clock), &id); + gst_test_clock_set_time (GST_TEST_CLOCK (data.clock), 240 * GST_MSECOND); + tid = gst_test_clock_process_next_clock_id (GST_TEST_CLOCK (data.clock)); + g_assert (id == tid); + + /* we should now receive a packet-lost-event for buffer 2 */ + out_event = g_async_queue_pop (data.sink_event_queue); + g_assert (out_event != NULL); + verify_lost_event (out_event, 2, 40 * GST_MSECOND, 20 * GST_MSECOND, FALSE); + + /* verify that buffers made it through! */ + for (i = 3; i < 15; i++) { + GST_DEBUG ("popping %d", i); + out_buf = g_async_queue_pop (data.buf_queue); + g_assert (out_buf != NULL); + gst_rtp_buffer_map (out_buf, GST_MAP_READ, &rtp); + g_assert_cmpint (gst_rtp_buffer_get_seq (&rtp), ==, i); + gst_rtp_buffer_unmap (&rtp); + } + /* should still have only seen 1 packet lost events */ + g_assert_cmpint (data.lost_event_count, ==, 1); + + destroy_testharness (&data); +} + +GST_END_TEST; + +GST_START_TEST (test_rtx_packet_delay) +{ + TestData data; + GstClockID id, tid; + GstBuffer *in_buf, *out_buf; + GstEvent *out_event; + gint jb_latency_ms = 200; + gint i; + GstRTPBuffer rtp = GST_RTP_BUFFER_INIT; + + setup_testharness (&data); + g_object_set (data.jitter_buffer, "do-retransmission", TRUE, NULL); + g_object_set (data.jitter_buffer, "latency", jb_latency_ms, NULL); + g_object_set (data.jitter_buffer, "rtx-retry-period", 120, NULL); + + gst_test_clock_set_time (GST_TEST_CLOCK (data.clock), 0); + + /* push the first buffer in */ + in_buf = generate_test_buffer (0 * GST_MSECOND, TRUE, 0, 0); + GST_BUFFER_FLAG_SET (in_buf, GST_BUFFER_FLAG_DISCONT); + g_assert_cmpint (gst_pad_push (data.test_src_pad, in_buf), ==, GST_FLOW_OK); + + gst_test_clock_set_time (GST_TEST_CLOCK (data.clock), 20 * GST_MSECOND); + + /* put second buffer, the jitterbuffer should now know that the packet spacing + * is 20ms and should ask for retransmission of seqnum 2 at 60ms */ + in_buf = generate_test_buffer (20 * GST_MSECOND, TRUE, 1, 160); + g_assert_cmpint (gst_pad_push (data.test_src_pad, in_buf), ==, GST_FLOW_OK); + + /* push buffer 8, 2 -> 7 are missing now. note that the rtp time is the same + * as packet 1 because it was part of a fragmented payload. This means that + * the estimate for 2 could be refined now to 20ms. also packet 2, 3 and 4 are + * exceeding the max allowed reorder distance and should request a + * retransmission right away */ + in_buf = generate_test_buffer (20 * GST_MSECOND, TRUE, 8, 8 * 160); + g_assert_cmpint (gst_pad_push (data.test_src_pad, in_buf), ==, GST_FLOW_OK); + + /* we should now receive retransmission requests for 2 -> 5 */ + out_event = g_async_queue_pop (data.src_event_queue); + g_assert (out_event != NULL); + verify_rtx_event (out_event, 2, 20 * GST_MSECOND, 40, 20 * GST_MSECOND); + + for (i = 3; i < 5; i++) { + GST_DEBUG ("popping %d", i); + out_event = g_async_queue_pop (data.src_event_queue); + g_assert (out_event != NULL); + verify_rtx_event (out_event, i, 20 * GST_MSECOND, 0, 20 * GST_MSECOND); + } + g_assert_cmpint (data.rtx_event_count, ==, 3); + + /* push 9, this should immediately request retransmission of 5 */ + in_buf = generate_test_buffer (20 * GST_MSECOND, TRUE, 9, 9 * 160); + g_assert_cmpint (gst_pad_push (data.test_src_pad, in_buf), ==, GST_FLOW_OK); + + /* we should now receive retransmission requests for 5 */ + out_event = g_async_queue_pop (data.src_event_queue); + g_assert (out_event != NULL); + verify_rtx_event (out_event, 5, 20 * GST_MSECOND, 0, 20 * GST_MSECOND); + + /* wait for timeout for rtx 6 -> 7 */ + gst_test_clock_wait_for_next_pending_id (GST_TEST_CLOCK (data.clock), &id); + tid = gst_test_clock_process_next_clock_id (GST_TEST_CLOCK (data.clock)); + g_assert (id == tid); + + for (i = 6; i < 8; i++) { + GST_DEBUG ("popping %d", i); + out_event = g_async_queue_pop (data.src_event_queue); + g_assert (out_event != NULL); + verify_rtx_event (out_event, i, 20 * GST_MSECOND, 0, 20 * GST_MSECOND); + } + + /* churn through sync_times until the new buffer gets pushed out */ + while (g_async_queue_length (data.buf_queue) < 1) { + if (gst_test_clock_peek_next_pending_id (GST_TEST_CLOCK (data.clock), &id)) { + GstClockTime t = gst_clock_id_get_time (id); + if (t > gst_clock_get_time (data.clock)) { + gst_test_clock_set_time (GST_TEST_CLOCK (data.clock), t); + } + gst_test_clock_process_next_clock_id (GST_TEST_CLOCK (data.clock)); + } + } + + /* verify that buffer 0 and 1 made it through! */ + for (i = 0; i < 2; i++) { + out_buf = g_async_queue_pop (data.buf_queue); + g_assert (out_buf != NULL); + if (i == 0) + g_assert (GST_BUFFER_FLAG_IS_SET (out_buf, GST_BUFFER_FLAG_DISCONT)); + gst_rtp_buffer_map (out_buf, GST_MAP_READ, &rtp); + g_assert_cmpint (gst_rtp_buffer_get_seq (&rtp), ==, i); + gst_rtp_buffer_unmap (&rtp); + } + + /* churn through sync_times until the next buffer gets pushed out */ + while (g_async_queue_length (data.buf_queue) < 1) { + if (gst_test_clock_peek_next_pending_id (GST_TEST_CLOCK (data.clock), &id)) { + GstClockTime t = gst_clock_id_get_time (id); + if (t >= 240 * GST_MSECOND) + break; + if (t > gst_clock_get_time (data.clock)) { + gst_test_clock_set_time (GST_TEST_CLOCK (data.clock), t); + } + gst_test_clock_process_next_clock_id (GST_TEST_CLOCK (data.clock)); + } + } + + for (i = 2; i < 8; i++) { + GST_DEBUG ("popping lost event %d", i); + out_event = g_async_queue_pop (data.sink_event_queue); + g_assert (out_event != NULL); + verify_lost_event (out_event, i, 20 * GST_MSECOND, 0, FALSE); + } + + /* verify that buffer 8 made it through! */ + for (i = 8; i < 10; i++) { + GST_DEBUG ("popping buffer %d", i); + out_buf = g_async_queue_pop (data.buf_queue); + g_assert (out_buf != NULL); + if (i == 8) + g_assert (GST_BUFFER_FLAG_IS_SET (out_buf, GST_BUFFER_FLAG_DISCONT)); + gst_rtp_buffer_map (out_buf, GST_MAP_READ, &rtp); + g_assert_cmpint (gst_rtp_buffer_get_seq (&rtp), ==, i); + gst_rtp_buffer_unmap (&rtp); + } + + GST_DEBUG ("waiting for 240ms"); + gst_test_clock_wait_for_next_pending_id (GST_TEST_CLOCK (data.clock), &id); + gst_test_clock_set_time (GST_TEST_CLOCK (data.clock), 240 * GST_MSECOND); + tid = gst_test_clock_process_next_clock_id (GST_TEST_CLOCK (data.clock)); + g_assert (id == tid); + + GST_DEBUG ("popping lost event 10"); + out_event = g_async_queue_pop (data.sink_event_queue); + g_assert (out_event != NULL); + verify_lost_event (out_event, 10, 40 * GST_MSECOND, 20 * GST_MSECOND, FALSE); + + /* should have seen 6 packet lost events */ + g_assert_cmpint (data.lost_event_count, ==, 7); + g_assert_cmpint (data.rtx_event_count, ==, 26); + + destroy_testharness (&data); +} + +GST_END_TEST; + static Suite * rtpjitterbuffer_suite (void) { @@ -865,6 +1276,9 @@ rtpjitterbuffer_suite (void) tcase_add_test (tc_chain, test_two_lost_one_arrives_in_time); tcase_add_test (tc_chain, test_late_packets_still_makes_lost_events); tcase_add_test (tc_chain, test_all_packets_are_timestamped_zero); + tcase_add_test (tc_chain, test_rtx_expected_next); + tcase_add_test (tc_chain, test_rtx_two_missing); + tcase_add_test (tc_chain, test_rtx_packet_delay); return s; } diff --git a/win32/common/config.h b/win32/common/config.h index a73fb4ae5d2e610d7050bbf942f4c8f9f0457f4c..cf4c3761ff049d1ef17b981bd369d2851be5c249 100644 --- a/win32/common/config.h +++ b/win32/common/config.h @@ -58,7 +58,7 @@ #define GST_PACKAGE_ORIGIN "Unknown package origin" /* GStreamer package release date/time for plugins as YYYY-MM-DD */ -#define GST_PACKAGE_RELEASE_DATETIME "2013-09-19" +#define GST_PACKAGE_RELEASE_DATETIME "2013-09-24" /* Define if static plugins should be built */ #undef GST_PLUGIN_BUILD_STATIC @@ -385,7 +385,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.1.90" +#define PACKAGE_STRING "GStreamer Good Plug-ins 1.2.0" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "gst-plugins-good" @@ -394,7 +394,7 @@ #undef PACKAGE_URL /* Define to the version of this package. */ -#define PACKAGE_VERSION "1.1.90" +#define PACKAGE_VERSION "1.2.0" /* directory where plugins are located */ #ifdef _DEBUG @@ -428,7 +428,7 @@ #undef TARGET_CPU /* Version number of package */ -#define VERSION "1.1.90" +#define VERSION "1.2.0" /* old wavpack API */ #undef WAVPACK_OLD_API