From 45626bf9f45117638282511219a75553dd968950 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <slomo@circular-chaos.org> Date: Tue, 24 Sep 2013 16:47:44 +0200 Subject: [PATCH] Imported Upstream version 1.2.0 --- ChangeLog | 424 +++++++++++++- NEWS | 123 ++++- RELEASE | 40 +- autogen.sh | 12 +- common/check.mak | 6 +- common/extract-release-date-from-doap-file | 8 +- common/gst.supp | 8 + common/m4/gst-args.m4 | 9 +- common/m4/gst-glib2.m4 | 12 +- common/m4/gst-package-release-datetime.m4 | 4 +- configure | 61 +- configure.ac | 8 +- docs/plugins/gst-plugins-good-plugins.args | 18 +- .../gst-plugins-good-plugins.hierarchy | 1 - .../gst-plugins-good-plugins-1.0.devhelp2 | 28 +- .../html/gst-plugins-good-plugins-mj2mux.html | 2 +- .../gst-plugins-good-plugins-monoscope.html | 56 +- .../html/gst-plugins-good-plugins-mp4mux.html | 2 +- .../gst-plugins-good-plugins-plugin-1394.html | 2 +- ...st-plugins-good-plugins-plugin-aasink.html | 2 +- .../gst-plugins-good-plugins-plugin-alaw.html | 2 +- ...gst-plugins-good-plugins-plugin-alpha.html | 2 +- ...lugins-good-plugins-plugin-alphacolor.html | 2 +- ...st-plugins-good-plugins-plugin-apetag.html | 2 +- ...t-plugins-good-plugins-plugin-audiofx.html | 2 +- ...t-plugins-good-plugins-plugin-auparse.html | 2 +- ...lugins-good-plugins-plugin-autodetect.html | 2 +- .../gst-plugins-good-plugins-plugin-avi.html | 2 +- ...-plugins-good-plugins-plugin-cacasink.html | 2 +- ...gst-plugins-good-plugins-plugin-cairo.html | 2 +- ...st-plugins-good-plugins-plugin-cutter.html | 2 +- ...gst-plugins-good-plugins-plugin-debug.html | 2 +- ...ugins-good-plugins-plugin-deinterlace.html | 2 +- .../gst-plugins-good-plugins-plugin-dtmf.html | 2 +- .../gst-plugins-good-plugins-plugin-dv.html | 2 +- ...t-plugins-good-plugins-plugin-effectv.html | 2 +- ...plugins-good-plugins-plugin-equalizer.html | 2 +- .../gst-plugins-good-plugins-plugin-flac.html | 2 +- .../gst-plugins-good-plugins-plugin-flv.html | 2 +- ...st-plugins-good-plugins-plugin-flxdec.html | 2 +- ...plugins-good-plugins-plugin-gdkpixbuf.html | 2 +- .../gst-plugins-good-plugins-plugin-goom.html | 2 +- ...t-plugins-good-plugins-plugin-goom2k1.html | 2 +- ...-plugins-good-plugins-plugin-icydemux.html | 2 +- ...-plugins-good-plugins-plugin-id3demux.html | 2 +- ...ugins-good-plugins-plugin-imagefreeze.html | 2 +- ...lugins-good-plugins-plugin-interleave.html | 2 +- ...st-plugins-good-plugins-plugin-isomp4.html | 2 +- .../gst-plugins-good-plugins-plugin-jack.html | 2 +- .../gst-plugins-good-plugins-plugin-jpeg.html | 2 +- ...gst-plugins-good-plugins-plugin-level.html | 2 +- ...-plugins-good-plugins-plugin-matroska.html | 2 +- ...gst-plugins-good-plugins-plugin-mulaw.html | 2 +- ...plugins-good-plugins-plugin-multifile.html | 2 +- ...plugins-good-plugins-plugin-multipart.html | 2 +- ...ns-good-plugins-plugin-navigationtest.html | 2 +- .../gst-plugins-good-plugins-plugin-oss4.html | 2 +- ...-plugins-good-plugins-plugin-ossaudio.html | 2 +- .../gst-plugins-good-plugins-plugin-png.html | 2 +- ...lugins-good-plugins-plugin-pulseaudio.html | 2 +- ...lugins-good-plugins-plugin-replaygain.html | 2 +- .../gst-plugins-good-plugins-plugin-rtp.html | 2 +- ...lugins-good-plugins-plugin-rtpmanager.html | 2 +- .../gst-plugins-good-plugins-plugin-rtsp.html | 2 +- ...plugins-good-plugins-plugin-shapewipe.html | 2 +- ...lugins-good-plugins-plugin-shout2send.html | 2 +- ...gst-plugins-good-plugins-plugin-smpte.html | 2 +- .../gst-plugins-good-plugins-plugin-soup.html | 2 +- ...-plugins-good-plugins-plugin-spectrum.html | 2 +- ...gst-plugins-good-plugins-plugin-speex.html | 2 +- ...st-plugins-good-plugins-plugin-taglib.html | 2 +- .../gst-plugins-good-plugins-plugin-udp.html | 2 +- ...gins-good-plugins-plugin-video4linux2.html | 2 +- ...-plugins-good-plugins-plugin-videobox.html | 2 +- ...plugins-good-plugins-plugin-videocrop.html | 2 +- ...ugins-good-plugins-plugin-videofilter.html | 2 +- ...lugins-good-plugins-plugin-videomixer.html | 2 +- .../gst-plugins-good-plugins-plugin-vpx.html | 2 +- ...st-plugins-good-plugins-plugin-wavenc.html | 2 +- ...t-plugins-good-plugins-plugin-wavpack.html | 2 +- ...-plugins-good-plugins-plugin-wavparse.html | 2 +- ...plugins-good-plugins-plugin-ximagesrc.html | 2 +- ...st-plugins-good-plugins-plugin-y4menc.html | 2 +- .../html/gst-plugins-good-plugins-qtmux.html | 2 +- ...-plugins-good-plugins-rtpjitterbuffer.html | 117 +++- .../gst-plugins-good-plugins-rtpptdemux.html | 42 +- .../gst-plugins-good-plugins-rtpsession.html | 135 ++++- ...gst-plugins-good-plugins-rtpssrcdemux.html | 35 +- docs/plugins/html/index.html | 2 +- docs/plugins/html/index.sgml | 5 +- docs/plugins/inspect/plugin-1394.xml | 2 +- docs/plugins/inspect/plugin-aasink.xml | 2 +- docs/plugins/inspect/plugin-alaw.xml | 2 +- docs/plugins/inspect/plugin-alpha.xml | 2 +- docs/plugins/inspect/plugin-alphacolor.xml | 2 +- docs/plugins/inspect/plugin-apetag.xml | 2 +- docs/plugins/inspect/plugin-audiofx.xml | 2 +- docs/plugins/inspect/plugin-audioparsers.xml | 2 +- docs/plugins/inspect/plugin-auparse.xml | 2 +- docs/plugins/inspect/plugin-autodetect.xml | 2 +- docs/plugins/inspect/plugin-avi.xml | 2 +- docs/plugins/inspect/plugin-cacasink.xml | 2 +- docs/plugins/inspect/plugin-cairo.xml | 2 +- docs/plugins/inspect/plugin-cutter.xml | 2 +- docs/plugins/inspect/plugin-debug.xml | 2 +- docs/plugins/inspect/plugin-deinterlace.xml | 2 +- docs/plugins/inspect/plugin-dtmf.xml | 2 +- docs/plugins/inspect/plugin-dv.xml | 2 +- docs/plugins/inspect/plugin-effectv.xml | 2 +- docs/plugins/inspect/plugin-equalizer.xml | 2 +- docs/plugins/inspect/plugin-flac.xml | 2 +- docs/plugins/inspect/plugin-flv.xml | 2 +- docs/plugins/inspect/plugin-flxdec.xml | 2 +- docs/plugins/inspect/plugin-gdkpixbuf.xml | 2 +- docs/plugins/inspect/plugin-goom.xml | 2 +- docs/plugins/inspect/plugin-goom2k1.xml | 2 +- docs/plugins/inspect/plugin-icydemux.xml | 2 +- docs/plugins/inspect/plugin-id3demux.xml | 2 +- docs/plugins/inspect/plugin-imagefreeze.xml | 2 +- docs/plugins/inspect/plugin-interleave.xml | 2 +- docs/plugins/inspect/plugin-isomp4.xml | 2 +- docs/plugins/inspect/plugin-jack.xml | 2 +- docs/plugins/inspect/plugin-jpeg.xml | 2 +- docs/plugins/inspect/plugin-level.xml | 2 +- docs/plugins/inspect/plugin-matroska.xml | 2 +- docs/plugins/inspect/plugin-mulaw.xml | 2 +- docs/plugins/inspect/plugin-multifile.xml | 2 +- docs/plugins/inspect/plugin-multipart.xml | 2 +- .../plugins/inspect/plugin-navigationtest.xml | 2 +- docs/plugins/inspect/plugin-oss4.xml | 2 +- docs/plugins/inspect/plugin-ossaudio.xml | 2 +- docs/plugins/inspect/plugin-png.xml | 2 +- docs/plugins/inspect/plugin-pulseaudio.xml | 2 +- docs/plugins/inspect/plugin-replaygain.xml | 2 +- docs/plugins/inspect/plugin-rtp.xml | 2 +- docs/plugins/inspect/plugin-rtpmanager.xml | 2 +- docs/plugins/inspect/plugin-rtsp.xml | 2 +- docs/plugins/inspect/plugin-shapewipe.xml | 2 +- docs/plugins/inspect/plugin-shout2send.xml | 2 +- docs/plugins/inspect/plugin-smpte.xml | 2 +- docs/plugins/inspect/plugin-soup.xml | 2 +- docs/plugins/inspect/plugin-spectrum.xml | 2 +- docs/plugins/inspect/plugin-speex.xml | 2 +- docs/plugins/inspect/plugin-taglib.xml | 2 +- docs/plugins/inspect/plugin-udp.xml | 2 +- docs/plugins/inspect/plugin-video4linux2.xml | 2 +- docs/plugins/inspect/plugin-videobox.xml | 2 +- docs/plugins/inspect/plugin-videocrop.xml | 2 +- docs/plugins/inspect/plugin-videofilter.xml | 2 +- docs/plugins/inspect/plugin-videomixer.xml | 2 +- docs/plugins/inspect/plugin-vpx.xml | 2 +- docs/plugins/inspect/plugin-wavenc.xml | 2 +- docs/plugins/inspect/plugin-wavpack.xml | 2 +- docs/plugins/inspect/plugin-wavparse.xml | 2 +- docs/plugins/inspect/plugin-ximagesrc.xml | 2 +- docs/plugins/inspect/plugin-y4menc.xml | 2 +- gst-plugins-good.doap | 10 + gst-plugins-good.spec | 2 +- gst/alpha/gstalpha.c | 192 +++---- gst/goom/mmx.h | 12 + gst/isomp4/gstqtmux.c | 58 +- gst/matroska/matroska-demux.c | 17 + gst/rtpmanager/gstrtpbin.c | 10 +- gst/rtpmanager/gstrtpjitterbuffer.c | 441 ++++++++++----- gst/rtpmanager/gstrtpptdemux.c | 6 +- gst/rtpmanager/gstrtpsession.c | 30 +- gst/rtpmanager/gstrtpssrcdemux.c | 6 +- gst/rtpmanager/rtpjitterbuffer.c | 215 +++++--- gst/rtpmanager/rtpjitterbuffer.h | 40 +- gst/videomixer/videomixerorc-dist.c | 206 +++---- po/af.gmo | Bin 666 -> 666 bytes po/af.po | 2 +- po/az.gmo | Bin 723 -> 723 bytes po/az.po | 2 +- po/bg.gmo | Bin 11149 -> 11149 bytes po/bg.po | 2 +- po/ca.gmo | Bin 9124 -> 9124 bytes po/ca.po | 2 +- po/cs.gmo | Bin 11134 -> 11134 bytes po/cs.po | 2 +- po/da.gmo | Bin 9513 -> 9513 bytes po/da.po | 2 +- po/de.gmo | Bin 10919 -> 10919 bytes po/de.po | 2 +- po/el.gmo | Bin 11597 -> 11597 bytes po/el.po | 2 +- po/en_GB.gmo | Bin 671 -> 671 bytes po/en_GB.po | 2 +- po/eo.gmo | Bin 1328 -> 1328 bytes po/eo.po | 2 +- po/es.gmo | Bin 9369 -> 9369 bytes po/es.po | 2 +- po/eu.gmo | Bin 7626 -> 7626 bytes po/eu.po | 2 +- po/fi.gmo | Bin 8041 -> 8041 bytes po/fi.po | 2 +- po/fr.gmo | Bin 9222 -> 9222 bytes po/fr.po | 2 +- po/gl.gmo | Bin 11055 -> 11055 bytes po/gl.po | 2 +- po/gst-plugins-good-1.0.pot | 6 +- po/hr.gmo | Bin 8525 -> 8525 bytes po/hr.po | 2 +- po/hu.gmo | Bin 10807 -> 10807 bytes po/hu.po | 2 +- po/id.gmo | Bin 8586 -> 8586 bytes po/id.po | 2 +- po/it.gmo | Bin 8539 -> 8539 bytes po/it.po | 2 +- po/ja.gmo | Bin 12193 -> 12193 bytes po/ja.po | 2 +- po/lt.gmo | Bin 7460 -> 7460 bytes po/lt.po | 2 +- po/lv.gmo | Bin 8543 -> 8543 bytes po/lv.po | 2 +- po/mt.gmo | Bin 5942 -> 5942 bytes po/mt.po | 2 +- po/nb.gmo | Bin 9840 -> 9840 bytes po/nb.po | 2 +- po/nl.gmo | Bin 10595 -> 10595 bytes po/nl.po | 2 +- po/or.gmo | Bin 832 -> 832 bytes po/or.po | 2 +- po/pl.gmo | Bin 11035 -> 11035 bytes po/pl.po | 2 +- po/pt_BR.gmo | Bin 10713 -> 10713 bytes po/pt_BR.po | 2 +- po/ro.gmo | Bin 8001 -> 8001 bytes po/ro.po | 2 +- po/ru.gmo | Bin 13730 -> 13730 bytes po/ru.po | 2 +- po/sk.gmo | Bin 8854 -> 8854 bytes po/sk.po | 2 +- po/sl.gmo | Bin 9825 -> 9825 bytes po/sl.po | 2 +- po/sq.gmo | Bin 685 -> 685 bytes po/sq.po | 2 +- po/sr.gmo | Bin 11202 -> 11202 bytes po/sr.po | 2 +- po/sv.gmo | Bin 8861 -> 8861 bytes po/sv.po | 2 +- po/tr.gmo | Bin 9917 -> 9917 bytes po/tr.po | 2 +- po/uk.gmo | Bin 14097 -> 14097 bytes po/uk.po | 2 +- po/vi.gmo | Bin 12220 -> 12220 bytes po/vi.po | 2 +- po/zh_CN.gmo | Bin 6295 -> 6295 bytes po/zh_CN.po | 2 +- po/zh_HK.gmo | Bin 1571 -> 1571 bytes po/zh_HK.po | 2 +- po/zh_TW.gmo | Bin 1570 -> 1570 bytes po/zh_TW.po | 2 +- sys/osxvideo/osxvideosink.m | 12 +- sys/v4l2/gstv4l2bufferpool.c | 31 +- sys/v4l2/gstv4l2bufferpool.h | 1 - tests/check/Makefile.in | 2 + tests/check/elements/rtpjitterbuffer.c | 522 ++++++++++++++++-- win32/common/config.h | 8 +- 259 files changed, 2457 insertions(+), 874 deletions(-) diff --git a/ChangeLog b/ChangeLog index cb7b048f7..36f60b8a3 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 b1d92ae85..56255fa9f 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 ed805e25b..3a80727ac 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 95e1bfaef..93f88d49b 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 285876cb4..611546a27 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 f2bc418cd..f57e30742 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 05ecbb9d6..8a3617fe7 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 4872e3c09..b478c824c 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 9a3a92339..0b9273462 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 126919bc7..bc885e37f 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 dd721b142..31b57849b 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 1c8c53d69..86807f5c1 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 57c382c2d..d91b2c8cf 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 1818d7c3b..b612c8113 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 594ebc49c..0b76d5c21 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 988740d24..20b219860 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 98979c568..0254c4180 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 ec84c2dc9..8d796723f 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 6f9dc3016..f6b7ce04b 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 5526afb88..9c99f2e4d 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 3ecb3f2ab..e53851d8c 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 1e9d66733..07724278f 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 2c08188ca..065cef05c 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 93ce7872a..e2920f498 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 b1c5e55f7..fa14cf8af 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 299b6b5fa..fdf69c945 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 464954a86..c032127a3 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 3864b7836..cf283ef72 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 f0acc36ef..47124b6db 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 caad99000..bd2d9a2de 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 cb2349cc3..dd59a9e6d 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 ec9f754e2..79a85a9ba 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 c8ce29355..dae32f55a 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 483fe9f07..0a4f7033d 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 3c064a3cc..35389585f 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 aa3c5421c..15da84d35 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 452dbd774..f69e3920f 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 e7445f7bf..6177f082c 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 143f3ba73..002c7d0c1 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 040296358..7ec83fe3e 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 c2100f045..bfb9c78cf 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 0d95f2627..e67da595c 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 73e2b73d4..b80dd89cc 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 7ca468987..3865acf5a 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 1087f0e7f..eb5576947 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 5f60f6023..62ce3d6ae 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 5286ab22a..98d6c0d14 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 014b12a66..9c7048e76 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 5618e8b98..b209f985a 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 23a71c74a..c5124f135 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 2d3ab3928..5d1d0f3c4 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 f422972cf..16b863820 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 94a9fa426..948591ac8 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 57c4d6b08..451697db3 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 d17278a0e..8a579ee9e 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 d21f14726..69bd3d1bb 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 54b4ba503..7c71ac91d 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 639ddf9e5..89a8c9083 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 41d3e6440..09bc27e12 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 830c89d89..4e73480b0 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 61d461516..d58bf44dc 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 6ed5d4a8e..16c7b7016 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 afa9ad2e1..d5acb7520 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 5908799da..f7a200e03 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 90a7fe1d1..829c75ec0 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 3054459c0..a24c4b84e 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 b311e2e14..4fe2a3880 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 adda77778..f052c51e3 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 b644b03d1..26a51e7b3 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 cd74e8f1e..dfa18667a 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 463460212..c8b557fa7 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 bd4fba046..0cd7fcef0 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 18cb8731f..d5b2ae5a0 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 68156c2a3..facc7786d 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 17b21d4f2..6589f0a29 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 ba3001473..f656f9ac0 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 f45b604c8..e7fbf99ad 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 87464ec48..e485f733c 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 6914fbb70..36ad64487 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 a0f938ffd..6be0f0164 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 b348e5144..dcfaff00a 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 54dcfa527..34bae23b2 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 b5ceb29fc..e97e86bad 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 361753f2b..650734bc3 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 1de7d0d7a..e55fed6c1 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 8095f53c0..aea23dbf3 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 e092a69ec..3787aa2c8 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 116e3bb1b..d3ed788d2 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 bc8c133fc..195106ff0 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 cad6a72b7..d3af905cb 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 18fc864d2..a2cf34118 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 865bead83..e35a0962c 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 122dd301a..e80dc97e0 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 2df32913c..99e4811d3 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 660f76545..ebb423c05 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 361bb4820..ef3d3d3e0 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 818d45ec5..7e526c828 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 79027f9a7..f4a039df0 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 9deb95b05..c241d1d6e 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 6d38314d3..6cb3bd806 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 5631a7a95..a95dbaa9b 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 921291379..6ccd37391 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 8324f44c2..01d3c96ce 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 650443f39..74ed6bc7b 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 52787a1fe..28d50689a 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 f5e8f3896..c39639a91 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 9ad65b0f9..67bcbea70 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 cdd9d7bc4..9c9f79e10 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 f5763a783..117e9b99e 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 1e7ade12b..b5ebba22f 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 c3afda2f4..d643aa992 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 4870014a2..0db77dfef 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 6ed063f46..b2bfe87f9 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 65e093952..2f230b758 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 d8c9c922d..e4b544dbe 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 a7b103d3d..7dfb7dff7 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 9d6b636d0..53c071de5 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 04b72bba2..387f6af15 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 56695f93b..7d5239ad1 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 c69bf5918..2efc3b238 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 14fe3892b..0eeec7866 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 7a4159a40..da09aa53d 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 6dabe5363..42f48b8f1 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 67e96b648..2c151da84 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 e02f9f2d1..d22a19cc1 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 fa26bbf96..e94a41a15 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 f2e6652a4..d29285ef4 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 0f690bf21..6c88732ec 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 a0c87863a..94b92de37 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 721ae9708..fdbcea471 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 396154254..8ce5c5db8 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 5682fe86e..a32b56c2a 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 39d71e0e2..08d32083f 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 8520fe5be..dc4c8bd38 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 449b7c6ce..e5c0e0bc6 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 e1887ed6e..747348451 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 93a9d4a10..9ab755afe 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 b0f088941..b2adf8f4a 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 157584906..29a06cfee 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 e33367d25..f919a265d 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 e0aba161d..d42f0169e 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 6ba2f8559..c50bf172c 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 2fd898a70..ce8c52603 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 9a006484a..a70983cd8 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 027d41e0c..cff3b4885 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 da99191c1..349a008d4 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 07be7d646..8603c773a 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 a900246e4..c2ea1ebba 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 57a4101e1..99668a26c 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 d132928f0..250d64752 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 10b49eea3..12b062866 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 08d9bfc4b..68cc83ab4 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 f866910b9..ff91e1a66 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 45d5519a0..db62d993e 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 b43ea0e47..589a07274 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 1f494c83a..089c1053f 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 41693c709..b28dbe507 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 c1ecd7301..29ecfc286 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 5213d2c7e..09ba0b0df 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 3fae26b98..2649e109e 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 710d0dad6..58533a455 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 d5d705eae..d7b8901b5 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 4236cd160..e615c94e1 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 bf676e6ee..2fb633b54 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 dbc0016ab..2c80ae033 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 a445be97e..6ff65ebf7 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 b04d4365e..75730a443 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 5b1c6f164..332a1f7ab 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 6a0f3d0ce..49817bf75 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 9106640f5..ee4ba19a1 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 GIT binary patch delta 21 ccmbQmI*WCK4<m<>iGrbtm7(S45Jopf06oS9A^-pY delta 21 ccmbQmI*WCK4<m=6rGlY>m7&Gv5Jopf06ohEApigX diff --git a/po/af.po b/po/af.po index f97ac7451..95b182e29 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 GIT binary patch delta 21 ccmcc2dYN^D4<m<>iGrbtm7(S45XO2&07oDN%>V!Z delta 21 ccmcc2dYN^D4<m=6rGlY>m7&Gv5XO2&07oSS%m4rY diff --git a/po/az.po b/po/az.po index a9b7f6492..e02c89e96 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 GIT binary patch delta 21 ccmeAT?+xFOD8yl8qF`uZWoWrMQ%FS;07{ev?f?J) delta 21 ccmeAT?+xFOD8ylCsbFYeWoWTEQ%FS;07{t!?EnA( diff --git a/po/bg.po b/po/bg.po index b5268cf7d..be29dfe75 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 GIT binary patch delta 21 ccmZ4DzQlb)q7a9XiGrbtm7(S4Od)GQ088=)3jhEB delta 21 ccmZ4DzQlb)q7a9nrGlY>m7&GvOd)GQ0894<3IG5A diff --git a/po/ca.po b/po/ca.po index 0f6a5ff50..cdc334299 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 GIT binary patch delta 21 dcmewt_AhM1BQXvm69q#PD?`i8uf(Q^003uA2txn> delta 21 dcmewt_AhM1BQXv`O9ev%D?^LTuf(Q^003uF2toh= diff --git a/po/cs.po b/po/cs.po index feadd317d..c00886464 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 GIT binary patch delta 21 ccmZ4KwbE;Yo+yWriGrbtm7(QkGttld07}#baR2}S delta 21 ccmZ4KwbE;Yo+yW*rGlY>m7&FEGttld07}^gZ~y=R diff --git a/po/da.po b/po/da.po index 461f3bafb..ae498a2f8 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 GIT binary patch delta 21 ccmZ1;x;%7)o*0LbiGrbtm7(QkGqFMu082Rr2mk;8 delta 21 ccmZ1;x;%7)o*0LrrGlY>m7&FEGqFMu082gw2LJ#7 diff --git a/po/de.po b/po/de.po index c8ec9c759..417ab66ff 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 GIT binary patch delta 21 ccmX>bbv9~4q7a9XiGrbtm7(S4Ora-I09J<wH2?qr delta 21 ccmX>bbv9~4q7a9nrGlY>m7&GvOra-I09K3#Gynhq diff --git a/po/el.po b/po/el.po index b15239441..07f81eec9 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 GIT binary patch delta 21 ccmbQwI-hle4<m<>iGrbtm7(S45JqoC06v%nF#rGn delta 21 ccmbQwI-hle4<m=6rGlY>m7&Gv5JqoC06v`sFaQ7m diff --git a/po/en_GB.po b/po/en_GB.po index 312cd3ed1..fe25abdcd 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 GIT binary patch delta 21 ccmdnMwSjBHMkWp;69q#PD?`i8JDJLv07^{;RsaA1 delta 21 ccmdnMwSjBHMkWqJO9ev%D?^LTJDJLv07_B@RR910 diff --git a/po/eo.po b/po/eo.po index 68c3b29d3..7984875b7 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 GIT binary patch delta 21 ccmbQ~In#54sW69;iGrbtm7(QkTj3Z%07q&C!~g&Q delta 21 ccmbQ~In#54sW6A3rGlY>m7&FETj3Z%07q{H!vFvP diff --git a/po/es.po b/po/es.po index c71958756..48254a0fd 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 GIT binary patch delta 21 ccmX?Qead=+gaC(;iGrbtm7(Qk1%Xw(081PO6aWAK delta 21 ccmX?Qead=+gaC)3rGlY>m7&FE1%Xw(081eT6951J diff --git a/po/eu.po b/po/eu.po index a15b2b9f5..bbc497d71 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 GIT binary patch delta 21 dcmaE9_tI{|d_fK)69q#PD?`i8%LNbd0svby2Y>(o delta 21 dcmaE9_tI{|d_fLFO9ev%D?^LT%LNbd0svb%2Y&zn diff --git a/po/fi.po b/po/fi.po index db8456cef..4c978ad1a 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 GIT binary patch delta 21 ccmZqkX!F>RD8yl8qF`uZWoWrMQ)sRr07xtbGXMYp delta 21 ccmZqkX!F>RD8ylCsbFYeWoWTEQ)sRr07x+gG5`Po diff --git a/po/fr.po b/po/fr.po index 081aab2d6..e395eb565 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 GIT binary patch delta 21 ccmZ1<wmxiwo*0LbiGrbtm7(QkGqIl{08Ot3q5uE@ delta 21 ccmZ1<wmxiwo*0LrrGlY>m7&FEGqIl{08O+8p#T5? diff --git a/po/gl.po b/po/gl.po index a4b86eb51..d0afa3199 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 fb1c04537..e31c02738 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 GIT binary patch delta 21 ccmX@>bk=D@q7a9XiGrbtm7(S4Ora-y08;A)`2YX_ delta 21 ccmX@>bk=D@q7a9nrGlY>m7&GvOra-y08;P<_y7O^ diff --git a/po/hr.po b/po/hr.po index ccc502c7c..1677b56a1 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 GIT binary patch delta 21 ccmdlUvOQ#jo*0LbiGrbtm7(QkGciUH08Fz5wg3PC delta 21 ccmdlUvOQ#jo*0LrrGlY>m7&FEGciUH08F?AwEzGB diff --git a/po/hu.po b/po/hu.po index 5a96f3948..98a238550 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 GIT binary patch delta 21 ccmeBj?sDE>D$HSIqF`uZWoWtCR@j#h07MN1hyVZp delta 21 ccmeBj?sDE>D$HSMsbFYeWoWV4R@j#h07Mc6hX4Qo diff --git a/po/id.po b/po/id.po index cc0ad1152..546c591b3 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 GIT binary patch delta 21 dcmccZblYjed_fK)69q#PD?`i8%LTXa0{~fq2VejI delta 21 dcmccZblYjed_fLFO9ev%D?^LT%LTXa0{~fv2VVdH diff --git a/po/it.po b/po/it.po index e9d84ed89..b0ff05f8c 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 GIT binary patch delta 21 ccmZ1&zc7A-o*0LbiGrbtm7(QkGqG$*0873G4*&oF delta 21 ccmZ1&zc7A-o*0LrrGlY>m7&FEGqG$*087IL4gdfE diff --git a/po/ja.po b/po/ja.po index b20bf34cd..e7fd9bd8b 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 GIT binary patch delta 21 ccmZ2twZv+JgaC(;iGrbtm7(Qk1pyXb07JS3AOHXW delta 21 ccmZ2twZv+JgaC)3rGlY>m7&FE1pyXb07Jh89{>OV diff --git a/po/lt.po b/po/lt.po index e134cdc8d..518b5fa3a 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 GIT binary patch delta 21 ccmccbbl+)1q7a9XiGrbtm7(S4OrdXl09D@yF8}}l delta 21 ccmccbbl+)1q7a9nrGlY>m7&GvOrdXl09E7%E&u=k diff --git a/po/lv.po b/po/lv.po index ec721d1db..7e2beb294 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 GIT binary patch delta 21 ccmdm{w@q)u2_6n369q#PD?`i87kJXR08;w~;{X5v delta 21 ccmdm{w@q)u2_6nZO9ev%D?^LT7kJXR08;=4;s5{u diff --git a/po/mt.po b/po/mt.po index c1f674592..e0b784d85 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 GIT binary patch delta 21 ccmez1^TB6>o*0LbiGrbtm7(QkGchXx094rqO#lD@ delta 21 ccmez1^TB6>o*0LrrGlY>m7&FEGchXx094)vOaK4? diff --git a/po/nb.po b/po/nb.po index d001e47d8..dc8374f23 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 GIT binary patch delta 21 ccmaDH^f+k4BQXvm69q#PD?`i8uf!^a0AfW4=l}o! delta 21 ccmaDH^f+k4BQXv`O9ev%D?^LTuf!^a0Afl9=Kufz diff --git a/po/nl.po b/po/nl.po index bcd355659..51d590ff6 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 GIT binary patch delta 21 ccmX@Wc7Sbz4<m<>iGrbtm7(S45XLu*07WPU761SM delta 21 ccmX@Wc7Sbz4<m=6rGlY>m7&Gv5XLu*07WeZ6#xJL diff --git a/po/or.po b/po/or.po index f5e7c04f1..983cbf055 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 GIT binary patch delta 21 ccmbOoHal#?BQXvm69q#PD?`i8ufz;R09OwO8UO$Q delta 21 ccmbOoHal#?BQXv`O9ev%D?^LTufz;R09O<T82|tP diff --git a/po/pl.po b/po/pl.po index bce78bc49..b999d9eec 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 GIT binary patch delta 21 ccmcZ^d^321o*0LbiGrbtm7(QkGqJ_O08=0anE(I) delta 21 ccmcZ^d^321o*0LrrGlY>m7&FEGqJ_O08=Ffm;e9( diff --git a/po/pt_BR.po b/po/pt_BR.po index 71c48c30b..cd311aaa4 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 GIT binary patch delta 21 ccmX?TchGKwgaC(;iGrbtm7(Qk1p!5V07(`FfdBvi delta 21 ccmX?TchGKwgaC)3rGlY>m7&FE1p!5V07)AKfB*mh diff --git a/po/ro.po b/po/ro.po index ed237390a..eec3e77a0 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 GIT binary patch delta 21 ccmZ3Ky(oKwo*0LbiGrbtm7(QkGqD_b08O?AFaQ7m delta 21 ccmZ3Ky(oKwo*0LrrGlY>m7&FEGqD_b08P6FF8}}l diff --git a/po/ru.po b/po/ru.po index 831981e88..21e0ca81a 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 GIT binary patch delta 21 ccmbQ{I?Z)MwGfAqiGrbtm7(S4W+7n#081?e_5c6? delta 21 ccmbQ{I?Z)MwGfA)rGlY>m7&GvW+7n#0826j^#A|> diff --git a/po/sk.po b/po/sk.po index e0c108960..9507cc891 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 GIT binary patch delta 21 ccmaFp^U!C5o+yWriGrbtm7(QkGf{0p08&y09{>OV delta 21 ccmaFp^U!C5o+yW*rGlY>m7&FEGf{0p08&>59smFU diff --git a/po/sl.po b/po/sl.po index f50839e99..e05d51a75 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 GIT binary patch delta 21 ccmZ3>x|Vf=4<m<>iGrbtm7(S45XMMG06^pgTL1t6 delta 21 ccmZ3>x|Vf=4<m=6rGlY>m7&Gv5XMMG06^&lS^xk5 diff --git a/po/sq.po b/po/sq.po index cb60e08a9..3eb5985a7 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 GIT binary patch delta 21 ccmX>UekgoHq7a9XiGrbtm7(S4Orc0g08>T=jQ{`u delta 21 ccmX>UekgoHq7a9nrGlY>m7&GvOrc0g08>i_i~s-t diff --git a/po/sr.po b/po/sr.po index 390054677..8cfb86ca7 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 GIT binary patch delta 21 ccmbR1I@fiBsW69;iGrbtm7(QkTj2zL07rNQ#sB~S delta 21 ccmbR1I@fiBsW6A3rGlY>m7&FETj2zL07rcV#Q*>R diff --git a/po/sv.po b/po/sv.po index 40c55c024..e44ff4f2f 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 GIT binary patch delta 21 ccmdn%yVrMvo*0LbiGrbtm7(QkGqH9708OC=HUIzs delta 21 ccmdn%yVrMvo*0LrrGlY>m7&FEGqH9708OR_H2?qr diff --git a/po/tr.po b/po/tr.po index 536b77b48..be995d489 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 GIT binary patch delta 21 ccmbQ3H!*L+BQXvm69q#PD?`i8uf)_909gkIH~;_u delta 21 ccmbQ3H!*L+BQXv`O9ev%D?^LTuf)_909gzNHvj+t diff --git a/po/uk.po b/po/uk.po index 4fc97b030..efb371a47 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 GIT binary patch delta 21 dcmdlJzbAgfBQXvm69q#PD?`i8uf#4%003Uo2onGR delta 21 dcmdlJzbAgfBQXv`O9ev%D?^LTuf#4%003Ut2oeAQ diff --git a/po/vi.po b/po/vi.po index 5584843e2..63a0a936a 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 GIT binary patch delta 21 ccmbPkINfkVEgy%GiGrbtm7(S4Rz4vv07x|j#Q*>R delta 21 ccmbPkINfkVEgy%WrGlY>m7&GvRz4vv07yCo!~g&Q diff --git a/po/zh_CN.po b/po/zh_CN.po index b9eef162a..42cb3b8e7 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 GIT binary patch delta 21 ccmZ3?vzTW?3Nwe1iGrbtm7(S49Omsz07D-I=l}o! delta 21 ccmZ3?vzTW?3NweHrGlY>m7&Gv9Omsz07E1N=Kufz diff --git a/po/zh_HK.po b/po/zh_HK.po index 1e2572ea6..601a80d03 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 GIT binary patch delta 21 ccmZ3)vxsLy3Nwe1iGrbtm7(S49Oi9I07CTz<p2Nx delta 21 ccmZ3)vxsLy3NweHrGlY>m7&Gv9Oi9I07Ci&<NyEw diff --git a/po/zh_TW.po b/po/zh_TW.po index dbb9719b6..75ed61232 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 89e980767..f8c45ee6f 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 0bc88ca7b..00c6086aa 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 90ccad431..3582bcea9 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 d1b0bb22c..a7a603ea1 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 bc868cba1..f7d9e4107 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 a73fb4ae5..cf4c3761f 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 -- GitLab