aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2014-06-22 18:01:09 +0200
committerSebastian Dröge <sebastian@centricular.com>2014-06-22 18:01:09 +0200
commit8be2b6cc92c0470cae7cae0774a0c8e59cf908b2 (patch)
treebe1b2928704aecf276b43c53dd8d94be024bf4b9
parent3b06ae38f23ecd3f06e3756c194382d80f5bd0b3 (diff)
parenta0a5145939d77a557e7c1064795cd6e854de3f82 (diff)
Merge tag 'upstream/1.3.3' into debian-experimental
Upstream version 1.3.3
-rw-r--r--ChangeLog900
-rw-r--r--NEWS26
-rw-r--r--RELEASE62
-rwxr-xr-xconfigure38
-rw-r--r--configure.ac8
-rw-r--r--docs/plugins/gst-plugins-good-plugins.args10
-rw-r--r--docs/plugins/gst-plugins-good-plugins.signals8
-rw-r--r--docs/plugins/html/ch01.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-1.0.devhelp21
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-aacparse.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-ac3parse.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-amrparse.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-dcaparse.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-flacparse.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-mpegaudioparse.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-multiudpsink.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-1394.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-aasink.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-alaw.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-alpha.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-alphacolor.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-apetag.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-audiofx.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-auparse.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-autodetect.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-avi.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-cacasink.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-cairo.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-cutter.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-debug.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-deinterlace.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-dtmf.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-dv.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-effectv.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-equalizer.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-flac.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-flv.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-flxdec.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-gdkpixbuf.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-goom.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-goom2k1.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-icydemux.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-id3demux.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-imagefreeze.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-interleave.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-isomp4.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-jack.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-jpeg.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-level.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-matroska.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-mulaw.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-multifile.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-multipart.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-navigationtest.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-oss4.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-ossaudio.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-png.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-pulseaudio.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-replaygain.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-rtp.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-rtpmanager.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-rtsp.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-shapewipe.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-shout2send.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-smpte.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-soup.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-spectrum.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-speex.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-taglib.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-udp.html6
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-video4linux2.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-videobox.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-videocrop.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-videofilter.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-videomixer.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-vpx.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-wavenc.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-wavpack.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-wavparse.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-ximagesrc.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-plugin-y4menc.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-rtspsrc.html46
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-sbcparse.html2
-rw-r--r--docs/plugins/html/gst-plugins-good-plugins-wavpackparse.html2
-rw-r--r--docs/plugins/html/index.html4
-rw-r--r--docs/plugins/html/index.sgml1
-rw-r--r--docs/plugins/inspect/plugin-1394.xml2
-rw-r--r--docs/plugins/inspect/plugin-aasink.xml2
-rw-r--r--docs/plugins/inspect/plugin-alaw.xml2
-rw-r--r--docs/plugins/inspect/plugin-alpha.xml2
-rw-r--r--docs/plugins/inspect/plugin-alphacolor.xml2
-rw-r--r--docs/plugins/inspect/plugin-apetag.xml2
-rw-r--r--docs/plugins/inspect/plugin-audiofx.xml2
-rw-r--r--docs/plugins/inspect/plugin-audioparsers.xml2
-rw-r--r--docs/plugins/inspect/plugin-auparse.xml2
-rw-r--r--docs/plugins/inspect/plugin-autodetect.xml2
-rw-r--r--docs/plugins/inspect/plugin-avi.xml2
-rw-r--r--docs/plugins/inspect/plugin-cacasink.xml2
-rw-r--r--docs/plugins/inspect/plugin-cairo.xml2
-rw-r--r--docs/plugins/inspect/plugin-cutter.xml2
-rw-r--r--docs/plugins/inspect/plugin-debug.xml2
-rw-r--r--docs/plugins/inspect/plugin-deinterlace.xml2
-rw-r--r--docs/plugins/inspect/plugin-dtmf.xml2
-rw-r--r--docs/plugins/inspect/plugin-dv.xml2
-rw-r--r--docs/plugins/inspect/plugin-effectv.xml2
-rw-r--r--docs/plugins/inspect/plugin-equalizer.xml2
-rw-r--r--docs/plugins/inspect/plugin-flac.xml2
-rw-r--r--docs/plugins/inspect/plugin-flv.xml2
-rw-r--r--docs/plugins/inspect/plugin-flxdec.xml2
-rw-r--r--docs/plugins/inspect/plugin-gdkpixbuf.xml2
-rw-r--r--docs/plugins/inspect/plugin-goom.xml2
-rw-r--r--docs/plugins/inspect/plugin-goom2k1.xml2
-rw-r--r--docs/plugins/inspect/plugin-icydemux.xml2
-rw-r--r--docs/plugins/inspect/plugin-id3demux.xml2
-rw-r--r--docs/plugins/inspect/plugin-imagefreeze.xml2
-rw-r--r--docs/plugins/inspect/plugin-interleave.xml2
-rw-r--r--docs/plugins/inspect/plugin-isomp4.xml2
-rw-r--r--docs/plugins/inspect/plugin-jack.xml2
-rw-r--r--docs/plugins/inspect/plugin-jpeg.xml2
-rw-r--r--docs/plugins/inspect/plugin-level.xml2
-rw-r--r--docs/plugins/inspect/plugin-matroska.xml2
-rw-r--r--docs/plugins/inspect/plugin-mulaw.xml2
-rw-r--r--docs/plugins/inspect/plugin-multifile.xml2
-rw-r--r--docs/plugins/inspect/plugin-multipart.xml2
-rw-r--r--docs/plugins/inspect/plugin-navigationtest.xml2
-rw-r--r--docs/plugins/inspect/plugin-oss4.xml2
-rw-r--r--docs/plugins/inspect/plugin-ossaudio.xml2
-rw-r--r--docs/plugins/inspect/plugin-png.xml2
-rw-r--r--docs/plugins/inspect/plugin-pulseaudio.xml2
-rw-r--r--docs/plugins/inspect/plugin-replaygain.xml2
-rw-r--r--docs/plugins/inspect/plugin-rtp.xml2
-rw-r--r--docs/plugins/inspect/plugin-rtpmanager.xml2
-rw-r--r--docs/plugins/inspect/plugin-rtsp.xml2
-rw-r--r--docs/plugins/inspect/plugin-shapewipe.xml2
-rw-r--r--docs/plugins/inspect/plugin-shout2send.xml2
-rw-r--r--docs/plugins/inspect/plugin-smpte.xml2
-rw-r--r--docs/plugins/inspect/plugin-soup.xml2
-rw-r--r--docs/plugins/inspect/plugin-spectrum.xml2
-rw-r--r--docs/plugins/inspect/plugin-speex.xml2
-rw-r--r--docs/plugins/inspect/plugin-taglib.xml2
-rw-r--r--docs/plugins/inspect/plugin-udp.xml6
-rw-r--r--docs/plugins/inspect/plugin-video4linux2.xml2
-rw-r--r--docs/plugins/inspect/plugin-videobox.xml2
-rw-r--r--docs/plugins/inspect/plugin-videocrop.xml2
-rw-r--r--docs/plugins/inspect/plugin-videofilter.xml2
-rw-r--r--docs/plugins/inspect/plugin-videomixer.xml2
-rw-r--r--docs/plugins/inspect/plugin-vpx.xml2
-rw-r--r--docs/plugins/inspect/plugin-wavenc.xml2
-rw-r--r--docs/plugins/inspect/plugin-wavpack.xml2
-rw-r--r--docs/plugins/inspect/plugin-wavparse.xml2
-rw-r--r--docs/plugins/inspect/plugin-ximagesrc.xml2
-rw-r--r--docs/plugins/inspect/plugin-y4menc.xml2
-rw-r--r--ext/flac/gstflacdec.c5
-rw-r--r--ext/pulse/pulsedevicemonitor.c2
-rw-r--r--ext/soup/gstsouphttpsrc.c66
-rw-r--r--ext/soup/gstsouphttpsrc.h2
-rw-r--r--ext/speex/gstspeexenc.c1
-rw-r--r--ext/vpx/gstvp8enc.c8
-rw-r--r--ext/vpx/gstvp9enc.c8
-rw-r--r--gst-plugins-good.doap10
-rw-r--r--gst-plugins-good.spec2
-rw-r--r--gst/avi/gstavidemux.c44
-rw-r--r--gst/avi/gstavidemux.h4
-rw-r--r--gst/flv/gstflvdemux.c128
-rw-r--r--gst/flv/gstflvdemux.h3
-rw-r--r--gst/isomp4/fourcc.h5
-rw-r--r--gst/isomp4/qtdemux.c189
-rw-r--r--gst/isomp4/qtdemux.h3
-rw-r--r--gst/matroska/matroska-demux.c48
-rw-r--r--gst/matroska/matroska-demux.h3
-rw-r--r--gst/matroska/matroska-ids.h1
-rw-r--r--gst/matroska/matroska-parse.c1
-rw-r--r--gst/matroska/matroska-read-common.c4
-rw-r--r--gst/multipart/multipartdemux.c42
-rw-r--r--gst/multipart/multipartdemux.h4
-rw-r--r--gst/rtp/gstrtpdvpay.c17
-rw-r--r--gst/rtp/gstrtpg729pay.c15
-rw-r--r--gst/rtp/gstrtpgstpay.c9
-rw-r--r--gst/rtp/gstrtph263pay.c21
-rw-r--r--gst/rtp/gstrtph264depay.c6
-rw-r--r--gst/rtp/gstrtph264pay.c114
-rw-r--r--gst/rtp/gstrtph264pay.h5
-rw-r--r--gst/rtp/gstrtpj2kpay.c4
-rw-r--r--gst/rtp/gstrtpjpegpay.c17
-rw-r--r--gst/rtp/gstrtpmp4gpay.c7
-rw-r--r--gst/rtp/gstrtpmp4gpay.h1
-rw-r--r--gst/rtp/gstrtpmp4vpay.c10
-rw-r--r--gst/rtp/gstrtptheoradepay.c20
-rw-r--r--gst/rtp/gstrtpvp8depay.c21
-rw-r--r--gst/rtp/gstrtpvp8pay.c68
-rw-r--r--gst/rtp/gstrtpvrawpay.c146
-rw-r--r--gst/rtp/gstrtpvrawpay.h8
-rw-r--r--gst/rtsp/gstrtspsrc.c189
-rw-r--r--gst/rtsp/gstrtspsrc.h2
-rw-r--r--gst/udp/gstdynudpsink.c20
-rw-r--r--gst/udp/gstmultiudpsink.c22
-rw-r--r--gst/udp/gstmultiudpsink.h1
-rw-r--r--gst/videobox/gstvideobox.c21
-rw-r--r--gst/wavparse/gstwavparse.c10
-rw-r--r--po/POTFILES.in3
-rw-r--r--po/af.gmobin666 -> 666 bytes
-rw-r--r--po/af.po30
-rw-r--r--po/az.gmobin723 -> 723 bytes
-rw-r--r--po/az.po30
-rw-r--r--po/bg.gmobin11149 -> 11149 bytes
-rw-r--r--po/bg.po34
-rw-r--r--po/ca.gmobin9124 -> 9124 bytes
-rw-r--r--po/ca.po39
-rw-r--r--po/cs.gmobin11000 -> 11000 bytes
-rw-r--r--po/cs.po31
-rw-r--r--po/da.gmobin10088 -> 11242 bytes
-rw-r--r--po/da.po70
-rw-r--r--po/de.gmobin11119 -> 12321 bytes
-rw-r--r--po/de.po69
-rw-r--r--po/el.gmobin11597 -> 11597 bytes
-rw-r--r--po/el.po31
-rw-r--r--po/en_GB.gmobin671 -> 671 bytes
-rw-r--r--po/en_GB.po30
-rw-r--r--po/eo.gmobin1328 -> 1328 bytes
-rw-r--r--po/eo.po30
-rw-r--r--po/es.gmobin9369 -> 9369 bytes
-rw-r--r--po/es.po39
-rw-r--r--po/eu.gmobin7626 -> 7626 bytes
-rw-r--r--po/eu.po38
-rw-r--r--po/fi.gmobin8041 -> 8041 bytes
-rw-r--r--po/fi.po31
-rw-r--r--po/fr.gmobin9222 -> 9222 bytes
-rw-r--r--po/fr.po39
-rw-r--r--po/gl.gmobin10938 -> 10938 bytes
-rw-r--r--po/gl.po34
-rw-r--r--po/gst-plugins-good-1.0.pot160
-rw-r--r--po/hr.gmobin8525 -> 8525 bytes
-rw-r--r--po/hr.po31
-rw-r--r--po/hu.gmobin11028 -> 12010 bytes
-rw-r--r--po/hu.po61
-rw-r--r--po/id.gmobin10106 -> 11243 bytes
-rw-r--r--po/id.po67
-rw-r--r--po/it.gmobin8539 -> 8539 bytes
-rw-r--r--po/it.po34
-rw-r--r--po/ja.gmobin12052 -> 12052 bytes
-rw-r--r--po/ja.po31
-rw-r--r--po/lt.gmobin7460 -> 7460 bytes
-rw-r--r--po/lt.po31
-rw-r--r--po/lv.gmobin10527 -> 10527 bytes
-rw-r--r--po/lv.po31
-rw-r--r--po/mt.gmobin5942 -> 5942 bytes
-rw-r--r--po/mt.po35
-rw-r--r--po/nb.gmobin10047 -> 10047 bytes
-rw-r--r--po/nb.po31
-rw-r--r--po/nl.gmobin10492 -> 11644 bytes
-rw-r--r--po/nl.po70
-rw-r--r--po/or.gmobin832 -> 832 bytes
-rw-r--r--po/or.po30
-rw-r--r--po/pl.gmobin10921 -> 12125 bytes
-rw-r--r--po/pl.po68
-rw-r--r--po/pt_BR.gmobin10921 -> 10921 bytes
-rw-r--r--po/pt_BR.po31
-rw-r--r--po/ro.gmobin8001 -> 8001 bytes
-rw-r--r--po/ro.po36
-rw-r--r--po/ru.gmobin13965 -> 15628 bytes
-rw-r--r--po/ru.po70
-rw-r--r--po/sk.gmobin10768 -> 10768 bytes
-rw-r--r--po/sk.po31
-rw-r--r--po/sl.gmobin10412 -> 10412 bytes
-rw-r--r--po/sl.po31
-rw-r--r--po/sq.gmobin685 -> 685 bytes
-rw-r--r--po/sq.po30
-rw-r--r--po/sr.gmobin13708 -> 15169 bytes
-rw-r--r--po/sr.po70
-rw-r--r--po/sv.gmobin8861 -> 8861 bytes
-rw-r--r--po/sv.po31
-rw-r--r--po/tr.gmobin9816 -> 9816 bytes
-rw-r--r--po/tr.po31
-rw-r--r--po/uk.gmobin13920 -> 15559 bytes
-rw-r--r--po/uk.po69
-rw-r--r--po/vi.gmobin12111 -> 12111 bytes
-rw-r--r--po/vi.po31
-rw-r--r--po/zh_CN.gmobin6295 -> 6295 bytes
-rw-r--r--po/zh_CN.po31
-rw-r--r--po/zh_HK.gmobin1571 -> 1571 bytes
-rw-r--r--po/zh_HK.po30
-rw-r--r--po/zh_TW.gmobin1570 -> 1570 bytes
-rw-r--r--po/zh_TW.po30
-rw-r--r--sys/oss/gstosshelper.c92
-rw-r--r--sys/v4l2/gstv4l2allocator.c6
-rw-r--r--sys/v4l2/gstv4l2bufferpool.c592
-rw-r--r--sys/v4l2/gstv4l2bufferpool.h8
-rw-r--r--sys/v4l2/gstv4l2devicemonitor.c2
-rw-r--r--sys/v4l2/gstv4l2object.c77
-rw-r--r--sys/v4l2/gstv4l2object.h2
-rw-r--r--sys/v4l2/gstv4l2sink.c44
-rw-r--r--sys/v4l2/gstv4l2src.c2
-rw-r--r--sys/v4l2/gstv4l2transform.c22
-rw-r--r--sys/v4l2/gstv4l2videodec.c124
-rw-r--r--sys/v4l2/v4l2_calls.c25
-rw-r--r--sys/ximage/gstximagesrc.c12
-rw-r--r--tests/check/elements/rtp-payloading.c12
-rw-r--r--tests/check/elements/rtprtx.c2
-rw-r--r--win32/common/config.h8
299 files changed, 4185 insertions, 1386 deletions
diff --git a/ChangeLog b/ChangeLog
index f9997d84..682d2649 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,9 +1,905 @@
+=== release 1.3.3 ===
+
+2014-06-22 Sebastian Dröge <slomo@coaxion.net>
+
+ * configure.ac:
+ releasing 1.3.3
+
+2014-06-22 14:24:24 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ * po/zh_HK.po:
+ * po/zh_TW.po:
+ po: Update translations
+
+2014-06-21 01:32:03 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * ext/pulse/pulsedevicemonitor.c:
+ * sys/v4l2/gstv4l2devicemonitor.c:
+ pulse, v4l2: update for device "klass" -> "device-class" rename
+
+2014-06-20 12:21:05 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/udp/gstmultiudpsink.c:
+ multiudpsink: optimisation: avoid unnecessary memory ref/unrefs
+ We know the buffer will stay valid and we will also not
+ modify the buffer, we just want to send out the data.
+
+2014-06-19 14:59:48 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/udp/gstmultiudpsink.c:
+ * gst/udp/gstmultiudpsink.h:
+ multiudpsink: avoid some unnecessary run-time type checks
+
+2014-06-19 16:17:23 +0200 Wim Taymans <wtaymans@redhat.com>
+
+ * gst/rtsp/gstrtspsrc.c:
+ rtspsrc: pass the stream id when asking for crypto params
+ This way the app can choose different parameters for each stream.
+
+2014-05-20 14:58:07 -0700 Aleix Conchillo Flaqué <aleix@oblong.com>
+
+ * gst/rtsp/gstrtspsrc.c:
+ * gst/rtsp/gstrtspsrc.h:
+ rtspsrc: add support for key length parameters
+ This patch adds supports for the incoming key management parameters for
+ encryption and authentication key lengths.
+ It also adds a new signal request-rtcp-key that allows the user to
+ provide the crypto parameters and key for the RTCP stream.
+ https://bugzilla.gnome.org/show_bug.cgi?id=730473
+
+2014-06-19 15:25:01 +0200 Wim Taymans <wtaymans@redhat.com>
+
+ * gst/rtp/gstrtpvp8depay.c:
+ vp8depay: fix header size checking
+ Use a different variable name to make it clear that we are calculating
+ the header size.
+ Correctly check that we have enough bytes to read the header bits. We
+ were checking if there were 5 bytes available in the header while we
+ only needed 3, causing the packet to be discarded as too small.
+ Fixes https://bugzilla.gnome.org/show_bug.cgi?id=723595
+
+2014-05-20 12:39:31 +0200 Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+ * gst/rtp/gstrtph264pay.c:
+ * gst/rtp/gstrtph264pay.h:
+ rtph264pay: propagate the GST_BUFFER_FLAG_DISCONT flag
+ Similarly to what we did with the DELTA_UNIT flag, this patch
+ propagates the DISCONT flag to the first RTP packet being used to transfer a
+ DISCONT buffer.
+ https://bugzilla.gnome.org/show_bug.cgi?id=730563
+
+2014-05-06 17:42:14 +0200 Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+ * gst/rtp/gstrtph264pay.c:
+ * gst/rtp/gstrtph264pay.h:
+ rtph264pay: propagate the GST_BUFFER_FLAG_DELTA_UNIT flag
+ Downstream elements may be interested knowing if a RTP packet is the start
+ of a key frame (to implement a RTP extension as defined in the
+ ONVIF Streaming Spec for example).
+ We do this by checking the GST_BUFFER_FLAG_DELTA_UNIT flag we receive from
+ upstream and propagate it to the *first* RTP packet outputted to transfer this
+ buffer.
+ https://bugzilla.gnome.org/show_bug.cgi?id=730563
+
+2014-05-20 13:58:20 +0200 Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+ * gst/rtp/gstrtpmp4gpay.c:
+ * gst/rtp/gstrtpmp4gpay.h:
+ gstrtpmp4gpay: propagate the GST_BUFFER_FLAG_DISCONT flag
+ Propagate the DISCONT flag to the first RTP packet being used to transfer
+ a DISCONT buffer.
+ https://bugzilla.gnome.org/show_bug.cgi?id=730563
+
+2014-05-20 13:58:20 +0200 Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+
+ * gst/rtp/gstrtpjpegpay.c:
+ rtpjpegpay: propagate the GST_BUFFER_FLAG_DISCONT flag
+ Propagate the DISCONT flag to the first RTP packet being used to transfer
+ a DISCONT buffer.
+ https://bugzilla.gnome.org/show_bug.cgi?id=730563
+
+2014-06-18 15:03:25 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/avi/gstavidemux.c:
+ avidemux: don't leak flow combiner
+
+2014-06-18 14:38:55 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/rtp/gstrtpj2kpay.c:
+ rtpjp2kpay: pre-allocate buffer-list of the right size
+
+2014-06-18 14:34:09 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/rtp/gstrtpjpegpay.c:
+ rtpjpegpay: pre-allocate buffer list of the right size
+
+2014-06-18 14:19:28 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/rtp/gstrtpmp4vpay.c:
+ rtpmp4vpay: pre-allocate buffer list of the right size
+
+2014-06-18 13:44:31 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/rtp/gstrtpvp8pay.c:
+ rtpvp8pay: allocate bitreader on the stack
+
+2014-06-18 13:29:47 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/rtp/gstrtpvp8pay.c:
+ rtpvp8pay: post error message on bus on error and don't use g_message()
+
+2014-06-18 13:20:44 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/rtp/gstrtpvp8pay.c:
+ rtpvp8pay: couple of minor optimisations
+ Pre-allocate buffer list of the right size to avoid re-allocs.
+ Avoid plenty of double runtime cast checks and re-doing the
+ same calculation over and over again in rtp_vp8_calc_payload_len().
+ Only call gst_buffer_get_size() once.
+
+2014-06-18 08:10:03 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/rtp/gstrtpgstpay.c:
+ rtpgstpay: pre-allocate buffer list of the right size
+ To avoid re-allocs.
+
+2014-06-18 07:52:05 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/rtp/gstrtph264pay.c:
+ rtph264pay: pre-allocate bufferlist of the right size
+ To avoid unnecessary re-allocs.
+
+2014-06-16 20:15:43 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/rtp/gstrtph264pay.c:
+ * tests/check/elements/rtp-payloading.c:
+ rtph264pay: push single buffer directly, no need to wrap it in a bufferlist
+ No point in a buffer list if we just have one single
+ buffer to push. Fix up unit test to handle that case
+ as well.
+
+2014-06-16 15:35:12 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/rtp/gstrtpvrawpay.c:
+ * gst/rtp/gstrtpvrawpay.h:
+ rtpvrawpay: make chunks per frame configurable
+ Bit of a misnomer because it's really chunks per field
+ and not per frame, but we're going to ignore that for
+ the time being.
+
+2014-06-16 14:52:16 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/rtp/gstrtpvrawpay.c:
+ * gst/rtp/gstrtpvrawpay.h:
+ rtpvrawpay: remove unused variables
+
+2014-06-16 14:44:27 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/rtp/gstrtpvrawpay.c:
+ rtpvrawpay: pre-allocate buffer lists of sufficient size
+ Avoids unnecessary reallocs when appending buffers
+ to the bufferlist.
+
+2014-06-16 13:51:03 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/rtp/gstrtpvrawpay.c:
+ rtpvrawpay: micro-optimise variable access in inner loop
+ Store some values that don't change during the execution
+ of the inner loops locally, so the compiler knows that too.
+
+2014-06-16 13:38:47 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/rtp/gstrtpvrawpay.c:
+ rtpvrawpay: use buffer lists
+ Collect buffers to send out in buffer lists instead of
+ pushing out single buffers one at a time. For HD video
+ each frame might easily add up to a couple of thousand
+ packets, multiply that by the frame rate and that's a
+ lot of push() and sendmsg() calls per second.
+ A good reason to push out buffers as early as possible is
+ latency, so we don't accumulate the whole frame in a single
+ buffer list, but instead push it out in a few chunks, which
+ is hopefully a reasonable compromise.
+
+2014-06-16 16:40:07 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/udp/gstdynudpsink.c:
+ * gst/udp/gstmultiudpsink.c:
+ udp: improve element descriptions for dynudpsink and multiudpsink
+
+2014-06-16 16:17:16 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/udp/gstdynudpsink.c:
+ * gst/udp/gstmultiudpsink.c:
+ udp: remove suppression of compiler warnings for deprecated GLib API
+ Not needed any more.
+
+2014-06-17 13:16:27 +0530 Ravi Kiran K N <ravi.kiran@samsung.com>
+
+ * gst/videobox/gstvideobox.c:
+ videobox: Fix caps negotiation issue
+ Make sure that if AYUV is received it will detect that it can produce
+ both RGB and YUV formats
+ Signed-off-by: Ravi Kiran K N <ravi.kiran@samsung.com>
+ https://bugzilla.gnome.org/show_bug.cgi?id=725248
+
+2014-06-16 12:02:41 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/rtp/gstrtptheoradepay.c:
+ rtptheoradepay: fix double frees
+ Fix double-frees introduced to fix another coverity report.
+ CID 1223053
+
+2014-06-13 10:12:07 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/udp/gstdynudpsink.c:
+ dynudpsink: return FLUSHING when sendto got canceled, not an error
+
+2014-06-13 09:52:03 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * sys/oss/gstosshelper.c:
+ oss: simplify probed caps before returning them
+ Exposes all formats in the first structure if the
+ rest is the same for all of them.
+
+2014-06-13 09:45:28 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * sys/oss/gstosshelper.c:
+ oss: make sure 16-bit formats are before 8-bit formats in probed caps
+ Probe supported formats in order of desirability rather than in
+ what order they may happen to be in the formats bitmask. Fixes
+ accidentally exposure of 8-bit formats in caps before 16-bit formats
+ (in case where U16 was not supported S8 might be listed before S16).
+ https://bugzilla.gnome.org/show_bug.cgi?id=706884
+
+2014-06-12 16:36:24 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * sys/v4l2/gstv4l2bufferpool.c:
+ v4l2bufferpool: Cleanly handle v4l2_allocator_new failure
+
+2014-06-12 11:24:15 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * gst/rtp/gstrtptheoradepay.c:
+ rtptheordepay: fix leaks
+ Coverity 1212163
+
+2014-06-12 11:16:08 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * gst/rtp/gstrtpg729pay.c:
+ rtpg729pay: leak fixes
+ Coverity 1212159
+
+2014-06-12 11:11:38 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * gst/rtp/gstrtph263pay.c:
+ rtph263pay: fix leak
+ Coverity 1212157
+
+2014-06-12 10:43:53 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * gst/rtp/gstrtph263pay.c:
+ rtph263pay: fix leaks
+ Coverity 1212149
+
+2014-06-12 10:31:47 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * gst/rtp/gstrtpdvpay.c:
+ rtpdvpay: catch failures to map buffer
+ Coverity 1139741
+
+2014-06-11 17:43:42 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * gst/multipart/multipartdemux.c:
+ multipartdemux: guard against having no MIME type
+ The code would previously crash trying to insert a NULL string
+ into a hash table.
+ It does seem a little broken that indexing is done by MIME type
+ and not by index though, unless the spec says there cannot be
+ two parts with the same MIME type.
+ https://bugzilla.gnome.org/show_bug.cgi?id=659573
+
+2014-06-10 15:42:14 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+ * gst/multipart/multipartdemux.c:
+ * gst/multipart/multipartdemux.h:
+ multipartdemux: Send stream-start event
+ This event was not sent. Send it before caps, this requires the pad to
+ be parented. This removes warning like: "Got data flow before
+ stream-start event".
+ Fixes https://bugzilla.gnome.org/show_bug.cgi?id=731475
+
+2014-06-10 15:33:33 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * gst/isomp4/qtdemux.c:
+ qtdemux: avoid looping indefinitely in broken svq3 files
+ Abort if an atom with size 0 is read from within the svq3 stsd
+ atoms
+ https://bugzilla.gnome.org/show_bug.cgi?id=726512
+
+2014-06-10 10:52:23 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * ext/flac/gstflacdec.c:
+ flacdec: add const where appropriate
+
+2014-06-09 10:39:20 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * ext/speex/gstspeexenc.c:
+ speexenc: add missing va_end in variadic function
+ Coverity 1139944
+
+2014-06-09 10:04:38 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/flv/gstflvdemux.c:
+ flvdemux: Attempt upstream seek first
+ If we have an upstream element that can handle the seek (such as
+ rtmpsrc), try to do that first before attempting it ourself.
+
+2014-06-04 11:34:27 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * gst/wavparse/gstwavparse.c:
+ wavparse: do not include codec_data on raw audio caps
+ If the wav header contains an extended chunk, we want to keep
+ the codec_data field, but not for raw audio.
+ This fixes some elements (such as adder) from failing to intersect
+ raw audio caps which would otherwise be intersectable.
+
+2014-06-05 09:38:29 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * gst/flv/gstflvdemux.c:
+ flvdemux: Query duration upstream first
+ Upstream elements (like rtmpsrc) might be able to provide the duration
+ more accurately than flvdemux. Especially with index-less vod files
+
+2014-05-30 19:37:57 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * sys/v4l2/gstv4l2bufferpool.c:
+ v4l2bufferpool: Cleanup poll method and retry on EINTR/EAGAIN
+ https://bugzilla.gnome.org/show_bug.cgi?id=731015
+
+2014-03-06 16:37:51 +0100 Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
+
+ * gst/flv/gstflvdemux.c:
+ flvdemux: set RESYNC buffer flag when bridging large PTS gaps
+ So downstream gets notified when this happens.
+ https://bugzilla.gnome.org/show_bug.cgi?id=725903
+
+2014-06-03 17:59:32 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * tests/check/elements/rtprtx.c:
+ rtprtx: Reset state on each iteration
+ Otherwise it didn't wait for the test to finish before checking the results.
+ https://bugzilla.gnome.org/show_bug.cgi?id=728501
+
+2014-05-09 14:22:42 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/matroska/matroska-read-common.c:
+ matroskademux: don't leak doctype string in error code path
+ CID 1212145.
+
+2014-05-20 08:20:42 +0200 Edward Hervey <edward@collabora.com>
+
+ * ext/vpx/gstvp9enc.c:
+ vp9enc: Don't dereference NULL checks
+ CID #1197703
+
+2014-05-20 08:23:06 +0200 Edward Hervey <edward@collabora.com>
+
+ * ext/vpx/gstvp8enc.c:
+ vp8enc: Don't dereference NULL variable
+ CID #1139838
+
+2014-05-30 14:32:42 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * gst/isomp4/qtdemux.c:
+ qtdemux: upstream handles seek if fragmented and on time segment
+ Otherwise we can reject seeks on local files that contain fragmented-like
+ atoms like 'mvex'. Also improve a message log
+ https://bugzilla.gnome.org/show_bug.cgi?id=730722
+
+2014-05-30 16:43:44 +0200 Wim Taymans <wtaymans@redhat.com>
+
+ * gst/rtp/gstrtph264depay.c:
+ h264depay: make sure we call handle_nal for each NAL
+ Call handle_nal for each NAL in the STAP-A RTP packet. This makes
+ sure we correctly extract the SPS and PPS.
+ Fixes https://bugzilla.gnome.org/show_bug.cgi?id=730999
+
+2014-05-07 14:09:06 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/soup/gstsouphttpsrc.c:
+ * ext/soup/gstsouphttpsrc.h:
+ souphttpsrc: Add custom sticky event to contain the HTTP request and response headers
+ This can be useful to e.g. get cookie information downstream.
+ https://bugzilla.gnome.org/show_bug.cgi?id=729707
+
+2014-05-26 19:47:39 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * gst/avi/gstavidemux.c:
+ * gst/avi/gstavidemux.h:
+ avidemux: remove stream last flow return
+ GstPad already stores that information
+ https://bugzilla.gnome.org/show_bug.cgi?id=709224
+
+2014-05-26 19:37:46 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * gst/isomp4/qtdemux.c:
+ qtdemux: remove last flow return from stream struct
+ It is already stored on GstPad on core
+ https://bugzilla.gnome.org/show_bug.cgi?id=709224
+
+2014-05-26 19:19:45 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * gst/flv/gstflvdemux.c:
+ * gst/flv/gstflvdemux.h:
+ flvdemux: Use GstFlowCombiner
+ Use the flow combiner to have the standard combination results and avoid
+ repeating the same code
+ https://bugzilla.gnome.org/show_bug.cgi?id=709224
+
+2014-05-26 13:21:25 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * gst/matroska/matroska-demux.c:
+ * gst/matroska/matroska-demux.h:
+ * gst/matroska/matroska-ids.h:
+ * gst/matroska/matroska-parse.c:
+ * gst/matroska/matroska-read-common.c:
+ matroskademux: use GstFlowCombiner
+ Use the flow combiner to have the standard combination results and avoid
+ repeating the same code
+ https://bugzilla.gnome.org/show_bug.cgi?id=709224
+
+2014-05-26 13:04:10 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * gst/avi/gstavidemux.c:
+ * gst/avi/gstavidemux.h:
+ avidemux: use GstFlowCombiner
+ Removes flow return combination code to use the newly added GstFlowCombiner
+
+2014-05-23 17:53:00 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * gst/isomp4/qtdemux.c:
+ * gst/isomp4/qtdemux.h:
+ qtdemux: use GstFlowCombiner
+ Removes the common code to combining flow returns to let it be
+ handled by core gstutils' GstFlowCombiner
+ https://bugzilla.gnome.org/show_bug.cgi?id=709224
+
+2014-05-26 10:59:55 -0400 Julien Isorce <julien.isorce@collabora.co.uk>
+
+ * sys/v4l2/gstv4l2sink.c:
+ v4l2sink: implement gstvideosink.show_frame instead of gstbasesink.render
+ It allows to show preroll frame. Especially it allows to update the
+ frame when seeking in PAUSED state.
+ https://bugzilla.gnome.org/show_bug.cgi?id=722303
+
+2014-05-26 10:59:06 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * sys/v4l2/gstv4l2sink.c:
+ v4l2sink: Cleanup old pad alloc declaration
+
+2014-05-26 12:34:42 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * sys/v4l2/gstv4l2bufferpool.c:
+ * sys/v4l2/gstv4l2sink.c:
+ v4l2bufferpool: Copy already queued buffer
+ This is required as during preroll we pass the first buffer twice, hence already
+ queued. It is also useful, to allow filters replaying a previous rendered buffers.
+ This will require 1 more buffer in sink if last-sample is enabled, since the last
+ sample will not be the same as the currently queued buffer.
+ https://bugzilla.gnome.org/show_bug.cgi?id=722303
+
+2014-05-24 20:20:07 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+ * sys/v4l2/gstv4l2allocator.c:
+ * sys/v4l2/gstv4l2bufferpool.c:
+ * sys/v4l2/gstv4l2bufferpool.h:
+ * sys/v4l2/gstv4l2object.c:
+ * sys/v4l2/gstv4l2object.h:
+ * sys/v4l2/gstv4l2transform.c:
+ * sys/v4l2/gstv4l2videodec.c:
+ * sys/v4l2/v4l2_calls.c:
+ v4l2bufferpool: Port to bufferpool flush_start/stop method
+ Port the buffer pool to use the new flush_start/flush_stop virtual
+ methods added to GstBufferPool.
+ https://bugzilla.gnome.org/show_bug.cgi?id=727611
+
+2014-05-25 17:40:58 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ * po/zh_HK.po:
+ * po/zh_TW.po:
+ po: update
+
+2014-05-25 16:54:18 +0200 Piotr Drąg <piotrdrag@gmail.com>
+
+ * po/POTFILES.in:
+ po: update POTFILES
+ https://bugzilla.gnome.org/show_bug.cgi?id=726556
+
+2014-05-24 23:51:58 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+ * sys/v4l2/gstv4l2bufferpool.c:
+ v4l2bufferpool: Don't queue all the buffers before dequeueing first
+ For output device, we where queuing all the buffers, and then we would
+ dequeue one. This means we only have 1 buffer for the pipeline, no matter
+ the size of the queue. Instead, start dequeued when min_latency is reached.
+ Eventually, this the min_latency should also be affected by control
+ MIN_BUFFERS_FOR_OUTPUT (use by encoders).
+
+2014-05-24 23:49:19 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+ * sys/v4l2/gstv4l2object.c:
+ v4l2object: Simply read back the config to update the query
+ It's easy to get the min/max outdate when hacking decide allocation. In
+ order to avoid this, simply read back the choosen value from the config.
+
+2014-05-24 23:31:24 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+ * sys/v4l2/gstv4l2bufferpool.c:
+ * sys/v4l2/gstv4l2bufferpool.h:
+ * sys/v4l2/gstv4l2src.c:
+ v4l2: Cleanup and fix calculation of latency
+ Calculation of num_buffers (the max latency in buffers) was
+ up-side-down. If we can allcoate, then our maximum latency match
+ pool maximum number of buffers. Also renamed it to max latency. Finally
+ introduced a min_latency for clarity.
+
+2014-05-24 20:00:14 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+ * sys/v4l2/gstv4l2allocator.c:
+ * sys/v4l2/gstv4l2bufferpool.c:
+ * sys/v4l2/gstv4l2bufferpool.h:
+ * sys/v4l2/gstv4l2object.c:
+ * sys/v4l2/gstv4l2object.h:
+ * sys/v4l2/gstv4l2transform.c:
+ * sys/v4l2/gstv4l2videodec.c:
+ * sys/v4l2/v4l2_calls.c:
+ Revert "v4l2bufferpool: Port to bufferpool flush_start/stop method"
+ This reverts commit 2e0fb42e868fc9f6d98b028def80a3e953527307.
+ Conflicts:
+ sys/v4l2/gstv4l2allocator.c
+ sys/v4l2/gstv4l2bufferpool.c
+ sys/v4l2/gstv4l2videodec.c
+
+2014-05-24 18:56:32 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+ * sys/v4l2/gstv4l2object.c:
+ v4l2object: Fix configuration of other_pool and importation case
+ Fix the choice of min/max, don't override the min/max with own pool selected
+ size, correct other_pool is_active check, start from other_pool config when
+ configuring the other pool and finally validate the configuration.
+
+2014-05-24 18:45:30 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+ * sys/v4l2/gstv4l2object.c:
+ v4l2object: Use proposed allocator as default
+
+2014-05-24 18:43:28 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
+
+ * sys/v4l2/gstv4l2bufferpool.c:
+ v4l2bufferpool: Fix USERPTR map flags
+ We need to map READ only for output and write only for capture, we where
+ doing the opposite. This fixing USERPTR with glimagesink
+ https://bugzilla.gnome.org/show_bug.cgi?id=730698
+
+2014-05-24 11:16:35 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * gst/isomp4/qtdemux.c:
+ qtdemux: parse tkhd transformation matrix and add tags if appropriate
+ Handle the transformation matrix cases where there are only simple rotations
+ (90, 180 or 270 degrees) and use a tag for those cases. This is a common scenario
+ when recording with mobile devices
+ https://bugzilla.gnome.org/show_bug.cgi?id=679522
+
+2014-05-23 19:10:21 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * sys/v4l2/gstv4l2bufferpool.c:
+ v4l2bufferpool: Prevent num_queued from going negative
+
+2014-05-23 18:25:49 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * sys/v4l2/gstv4l2videodec.c:
+ v4l2videodec: don't stop if loop returned FLUSHING
+ The decodeing thread returning flushing isn't an error, we should simply
+ try starting the task again. If it's actually flushing, it will stop again by itself.
+
+2014-05-23 17:54:20 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * sys/v4l2/gstv4l2videodec.c:
+ v4l2videodec: Handle early task stop
+
+2014-05-23 17:28:13 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * sys/v4l2/gstv4l2videodec.c:
+ v4l2videodec: Handle gst_pad_start_task() failure
+
+2014-05-23 17:19:07 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * sys/v4l2/gstv4l2videodec.c:
+ v4l2videodec: Add trace for FLUSH_START/STOP handling
+
+2014-05-23 17:18:16 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * sys/v4l2/gstv4l2videodec.c:
+ v4l2videodec: Fix use of atomic value
+
+2014-05-23 17:01:53 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * sys/v4l2/gstv4l2bufferpool.c:
+ v4l2bufferpool: Improve debugging
+ No need to use obj->element, the pool now have a significant name. Also don't
+ warn if flushing.
+
+2014-05-23 17:01:02 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * sys/v4l2/gstv4l2videodec.c:
+ v4l2videodec: Fix handle_frame error handling
+
+2014-05-23 15:56:24 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * sys/v4l2/gstv4l2bufferpool.c:
+ v4l2bufferpool: Add a trace when _start() is called
+
+2014-05-23 15:56:02 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * sys/v4l2/gstv4l2allocator.c:
+ v4l2allocator: Add debug assert to detect calls in the wrong state
+
+2014-05-23 15:55:26 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * sys/v4l2/gstv4l2allocator.c:
+ v4l2allocator: Reset count when stopped
+
+2014-05-23 15:55:08 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * sys/v4l2/gstv4l2bufferpool.c:
+ v4l2allocator: Return a GstFlowReturn instead of boolean in alloc
+
+2014-05-23 15:17:27 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * sys/v4l2/gstv4l2object.c:
+ v4l2object: Don't leak config structure
+
+2014-05-23 14:12:10 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * sys/v4l2/gstv4l2allocator.c:
+ * sys/v4l2/gstv4l2bufferpool.c:
+ * sys/v4l2/gstv4l2bufferpool.h:
+ * sys/v4l2/gstv4l2object.c:
+ * sys/v4l2/gstv4l2object.h:
+ * sys/v4l2/gstv4l2transform.c:
+ * sys/v4l2/gstv4l2videodec.c:
+ * sys/v4l2/v4l2_calls.c:
+ v4l2bufferpool: Port to bufferpool flush_start/stop method
+
+2014-05-23 03:00:50 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * gst/isomp4/fourcc.h:
+ * gst/isomp4/qtdemux.c:
+ qtdemux: add tag mappings for _swr, _mak and _mod tags
+ swr -> Application name
+ mak -> device manufacturer
+ mod -> device model
+
+2014-05-20 17:37:49 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * sys/ximage/gstximagesrc.c:
+ ximagesrc: Fix ximage leaks when buffer has more then one ximage
+ From time to time, when the image_pool list has more then 1 element
+ and I suppose at start, all but 1 pooled ximage are leaked. This is
+ due to broken algorithm in gst_ximagesink_src_ximage_get(). There was
+ also a risk of use after free for the case where the ximage size has
+ changed.
+ https://bugzilla.gnome.org/show_bug.cgi?id=728502
+
+2014-05-21 13:23:27 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * configure.ac:
+ Back to development
+
=== release 1.3.2 ===
-2014-05-21 Sebastian Dröge <slomo@coaxion.net>
+2014-05-21 13:06:35 +0200 Sebastian Dröge <sebastian@centricular.com>
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * common:
* configure.ac:
- releasing 1.3.2
+ * docs/plugins/gst-plugins-good-plugins.hierarchy:
+ * docs/plugins/inspect-build.stamp:
+ * docs/plugins/inspect.stamp:
+ * 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.3.2
+
+2014-05-21 12:19:39 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hr.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ * po/zh_HK.po:
+ * po/zh_TW.po:
+ Update .po files
2014-05-21 10:51:10 +0200 Sebastian Dröge <sebastian@centricular.com>
diff --git a/NEWS b/NEWS
index da4707eb..de3b8050 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,4 @@
-This is GStreamer Good Plugins 1.3.2
+This is GStreamer Good Plugins 1.3.3
Changes since 1.2:
@@ -30,6 +30,10 @@ New API:
caps.
• GstCollectPads has support for flushing and a default handler for
SEEK events now.
+ • New GstFlowAggregator helper object that simplifies handling of
+ flow returns in elements with multiple source pads. Additionally
+ GstPad now always stores the last flow return and provides an
+ API to retrieve it.
• GstSegment has new API to offset the running time by a specific
value and this is used in GstPad to allow positive and negative
offsets in gst_pad_set_offset() in all situations.
@@ -43,6 +47,7 @@ New API:
• Support for tiled, raw video formats has been added.
• GstVideoDecoder and GstAudioDecoder have API to help aggregating tag
events and merge custom tags into them consistently.
+ • GstBufferPool has support for flushing now.
• playbin/playsink has support for application provided audio and video
filters.
• GstDiscoverer has new and simplified API to get details about missing
@@ -54,6 +59,10 @@ New API:
DispManX (Raspberry Pi), EAGL (iOS), WGL (Windows) and generic X11,
Wayland and EGL platforms.
This replaces eglglessink and also is supposed to replace osxvideosink.
+ • New GstAggregator base class in gst-plugins-bad. This is supposed to
+ replace GstCollectPads in the future and fix long-known shortcomings
+ in its API. Together with the base class some elements are provided
+ already, like a videomixer (compositor).
Major changes:
@@ -97,7 +106,8 @@ Major changes:
∘ dvbsrc supports more delivery mechanisms and other features
now, including DVB S2 and T2 support.
∘ The MPEGTS library has support for many more descriptors.
- ∘ Major improvements to tsdemux, especially time related.
+ ∘ Major improvements to tsdemux and tsparse, especially time and
+ seeking related.
∘ souphttpsrc now has support for keep-alive connections,
compression, configurable number of retries and configuration
for SSL certificate validation.
@@ -110,9 +120,16 @@ Major changes:
finish.
∘ videoflip can automatically flip based on the orientation tag.
∘ openjpeg supports the OpenJPEG2 API.
+ ∘ waylandsink was refactored and should be more useful now. It also
+ includes a small library which most likely is going to be removed
+ in the future and will result in extensions to the GstVideoOverlay
+ interface.
∘ gst-rtsp-server supports SRTP and MIKEY now.
+ ∘ gst-libav encoders are now negotiating any profile/level settings
+ with downstream via caps.
∘ Lots of fixes for coverity warnings all over the place.
- ∘ 400+ fixed bug reports, and many other bug fixes and other
+ ∘ Negotiation related performance improvements.
+ ∘ 500+ fixed bug reports, and many other bug fixes and other
improvements everywhere that had no bug report.
Things to look out for:
@@ -120,3 +137,6 @@ Things to look out for:
element.
• The mfcdec element was removed and replaced by v4l2videodec.
• osxvideosink is only available in OS X 10.6 or newer.
+ • The GstDeviceMonitor API will likely change slightly before the
+ 1.4.0 release.
+
diff --git a/RELEASE b/RELEASE
index 2e63499e..141e24b4 100644
--- a/RELEASE
+++ b/RELEASE
@@ -1,8 +1,8 @@
-Release notes for GStreamer Good Plugins 1.3.2
+Release notes for GStreamer Good Plugins 1.3.3
-The GStreamer team is pleased to announce the second release of the unstable
+The GStreamer team is pleased to announce the third release of the unstable
1.3 release series. The 1.3 release series is adding new features on top of
the 1.0 and 1.2 series and is part of the API and ABI-stable 1.x release
series of the GStreamer multimedia framework. The unstable 1.3 release series
@@ -10,23 +10,16 @@ will lead to the stable 1.4 release series in the next weeks, and newly added
API can still change until that point.
+This is hopefully the last 1.3 development release and will be followed by
+the first 1.4.0 release candidate (1.3.90) in 1-2 weeks. Which then hopefully
+is followed by 1.4.0 soonish in early July.
+
Binaries for Android, iOS, Mac OS X and Windows will be provided separately
during the unstable 1.3 release series.
-The versioning scheme that is used in general is that 1.x.y is API and
-ABI backwards compatible with previous 1.x.y releases. If x is an even
-number it is a stable release series and all releases in this series
-will only contain important bugfixes, e.g. the 1.0 series with 1.0.7. If
-x is odd it is a development release series that will lead to the next
-stable release series 1.x+1 and contains new features and bigger
-changes. During the development release series, new API can still
-change.
-
-
-
"Such ingratitude. After all the times I've saved your life."
@@ -70,25 +63,19 @@ contains a set of codecs plugins based on libav (formerly gst-ffmpeg)
Bugs fixed in this release
- * 583890 : v4l2: Implement V4L2_MEMORY_USERPTR support
+ * 725903 : flvdemux: set RESYNC buffer flag when bridging large PTS gaps
+ * 726512 : some svq3/mov files stall on start
+ * 726556 : POTFILES.in is out of date
* 728501 : rtpaux/rtprtx: Unit tests are racy and take very long sometimes
- * 663944 : souphttpsrc: leaking file descriptors + memory when destroyed while connecting
- * 707321 : flvdemux: complains too much when failed to send buffers
- * 720440 : rtpsession: internal sources are never removed
- * 725410 : v4l2videodec: Probe fails if first device does not start with 0
- * 725415 : v4l2videodec: Check caps are subset of encode or raw when probing devices
- * 727925 : v4l2: Share device enumeration
- * 729247 : rtp/README: update to work with gst 1.0
- * 729524 : rtpjitterbuffer: if retransmissions enabled, a gap larger than the latency can result in a stuck jitterbuffer
- * 729553 : qtdemux: tries to reply to a byte position query with a time position
- * 729591 : v4l2videodec: Remove meaningless properties
- * 730078 : rtpjitterbuffer: wrong packet insertion if events present in the jitter queue
- * 730146 : rtpbin: update rtp encoder/decoder documentation
- * 730200 : v4l2videodec: v4l2bufferpool must be updated according to driver requirement
- * 730207 : v4l2: Seeking with M2M devices
- * 730212 : rtspsrc: use a random ssrc for the internal session
- * 730217 : rtpsession: do not mark internal senders as expired
- * 724630 : v4l2videodec: alignment support
+ * 729707 : souphttpsrc: Add custom sticky event to contain the HTTP request and response headers
+ * 730473 : rtspsrc: add support for key length parameters
+ * 730476 : v4l2videodec: stalls on large seeks
+ * 730563 : Propagate DISCONT and DELTAUNIT flags through H264 and Jpeg payloaders
+ * 730698 : v4lsrc: Fails using glimagesink in userptr
+ * 730722 : Cannot seek in a m4a AAC audio file
+ * 731169 : wavparse: Puts codec_data on raw audio caps
+ * 731475 : multipartdemux: Got data flow before stream-start
+ * 722303 : v4l2sink: Enable rendering of the preroll buffer
==== Download ====
@@ -125,21 +112,18 @@ subscribe to the gstreamer-devel list.
Contributors to this release
- * Adrien SCH
* Aleix Conchillo Flaqué
- * Benjamin Gaignard
* Edward Hervey
- * Eric Trousset
- * George Kiagiadakis
* Guillaume Desmottes
- * Jason Litzinger
- * Mark Nauwelaerts
+ * Jan Alexander Steffens (heftig)
+ * Julien Isorce
* Nicolas Dufresne
* Olivier Crête
+ * Piotr Drąg
+ * Ravi Kiran K N
* Sebastian Dröge
+ * Thiago Santos
* Tim-Philipp Müller
* Vincent Penquerc'h
- * Víctor Manuel Jáquez Leal
* Wim Taymans
- * Руслан Ижбулатов
  \ No newline at end of file
diff --git a/configure b/configure
index e9e8040f..d9623157 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.3.2.
+# Generated by GNU Autoconf 2.69 for GStreamer Good Plug-ins 1.3.3.
#
# 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.3.2'
-PACKAGE_STRING='GStreamer Good Plug-ins 1.3.2'
+PACKAGE_VERSION='1.3.3'
+PACKAGE_STRING='GStreamer Good Plug-ins 1.3.3'
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.3.2 to adapt to many kinds of systems.
+\`configure' configures GStreamer Good Plug-ins 1.3.3 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.3.2:";;
+ short | recursive ) echo "Configuration of GStreamer Good Plug-ins 1.3.3:";;
esac
cat <<\_ACEOF
@@ -2384,7 +2384,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-GStreamer Good Plug-ins configure 1.3.2
+GStreamer Good Plug-ins configure 1.3.3
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -3195,7 +3195,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.3.2, which was
+It was created by GStreamer Good Plug-ins $as_me 1.3.3, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -4177,7 +4177,7 @@ fi
# Define the identity of the package.
PACKAGE='gst-plugins-good'
- VERSION='1.3.2'
+ VERSION='1.3.3'
cat >>confdefs.h <<_ACEOF
@@ -4388,9 +4388,9 @@ fi
- PACKAGE_VERSION_MAJOR=$(echo 1.3.2 | cut -d'.' -f1)
- PACKAGE_VERSION_MINOR=$(echo 1.3.2 | cut -d'.' -f2)
- PACKAGE_VERSION_MICRO=$(echo 1.3.2 | cut -d'.' -f3)
+ PACKAGE_VERSION_MAJOR=$(echo 1.3.3 | cut -d'.' -f1)
+ PACKAGE_VERSION_MINOR=$(echo 1.3.3 | cut -d'.' -f2)
+ PACKAGE_VERSION_MICRO=$(echo 1.3.3 | cut -d'.' -f3)
@@ -4401,7 +4401,7 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking nano version" >&5
$as_echo_n "checking nano version... " >&6; }
- NANO=$(echo 1.3.2 | cut -d'.' -f4)
+ NANO=$(echo 1.3.3 | cut -d'.' -f4)
if test x"$NANO" = x || test "x$NANO" = "x0" ; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: 0 (release)" >&5
@@ -9057,10 +9057,10 @@ fi
done
- GST_CURRENT=302
+ GST_CURRENT=303
GST_REVISION=0
- GST_AGE=302
- GST_LIBVERSION=302:0:302
+ GST_AGE=303
+ GST_LIBVERSION=303:0:303
@@ -13385,8 +13385,8 @@ CC="$lt_save_CC"
-GST_REQ=1.3.2
-GSTPB_REQ=1.3.2
+GST_REQ=1.3.3
+GSTPB_REQ=1.3.3
@@ -37425,7 +37425,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.3.2, which was
+This file was extended by GStreamer Good Plug-ins $as_me 1.3.3, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -37491,7 +37491,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.3.2
+GStreamer Good Plug-ins config.status 1.3.3
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/configure.ac b/configure.ac
index 17be4da3..9532a5af 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.3.2],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gst-plugins-good])
+AC_INIT([GStreamer Good Plug-ins],[1.3.3],[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, 302, 0, 302)
+AS_LIBTOOL(GST, 303, 0, 303)
dnl *** required versions of GStreamer stuff ***
-GST_REQ=1.3.2
-GSTPB_REQ=1.3.2
+GST_REQ=1.3.3
+GSTPB_REQ=1.3.3
dnl *** autotools stuff ****
diff --git a/docs/plugins/gst-plugins-good-plugins.args b/docs/plugins/gst-plugins-good-plugins.args
index 8e17826f..666f2f9a 100644
--- a/docs/plugins/gst-plugins-good-plugins.args
+++ b/docs/plugins/gst-plugins-good-plugins.args
@@ -24728,3 +24728,13 @@
<DEFAULT>1</DEFAULT>
</ARG>
+<ARG>
+<NAME>GstRtpVRawPay::chunks-per-frame</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= 1</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Chunks per Frame</NICK>
+<BLURB>Split and send out each frame in multiple chunks to reduce overhead.</BLURB>
+<DEFAULT>10</DEFAULT>
+</ARG>
+
diff --git a/docs/plugins/gst-plugins-good-plugins.signals b/docs/plugins/gst-plugins-good-plugins.signals
index b14af19a..ac5d1651 100644
--- a/docs/plugins/gst-plugins-good-plugins.signals
+++ b/docs/plugins/gst-plugins-good-plugins.signals
@@ -781,3 +781,11 @@ GstRTSPSrc *gstrtspsrc
GstElement *arg1
</SIGNAL>
+<SIGNAL>
+<NAME>GstRTSPSrc::request-rtcp-key</NAME>
+<RETURNS>GstCaps*</RETURNS>
+<FLAGS>l</FLAGS>
+GstRTSPSrc *gstrtspsrc
+guint arg1
+</SIGNAL>
+
diff --git a/docs/plugins/html/ch01.html b/docs/plugins/html/ch01.html
index 7f4dfaa6..cca7f47e 100644
--- a/docs/plugins/html/ch01.html
+++ b/docs/plugins/html/ch01.html
@@ -279,7 +279,7 @@
<span class="refentrytitle"><a href="gst-plugins-good-plugins-multipartmux.html">multipartmux</a></span><span class="refpurpose"> — mux multipart streams</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-good-plugins-multiudpsink.html">multiudpsink</a></span><span class="refpurpose"> — Send data over the network via UDP</span>
+<span class="refentrytitle"><a href="gst-plugins-good-plugins-multiudpsink.html">multiudpsink</a></span><span class="refpurpose"> — Send data over the network via UDP to one or multiple recipients which can be added or removed at runtime using action signals</span>
</dt>
<dt>
<span class="refentrytitle"><a href="gst-plugins-good-plugins-optv.html">optv</a></span><span class="refpurpose"> — Optical art meets real-time video effect</span>
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 197262e0..d7d93f94 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-1.0.devhelp2
+++ b/docs/plugins/html/gst-plugins-good-plugins-1.0.devhelp2
@@ -1089,6 +1089,7 @@
<keyword type="signal" name="The “on-sdp” signal" link="gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc-on-sdp"/>
<keyword type="signal" name="The “select-stream” signal" link="gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc-select-stream"/>
<keyword type="signal" name="The “new-manager” signal" link="gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc-new-manager"/>
+ <keyword type="signal" name="The “request-rtcp-key” signal" link="gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc-request-rtcp-key"/>
<keyword type="" name="Example pipelines" link="gst-plugins-good-plugins-rtpbin.html#id-1.2.124.9.12"/>
<keyword type="" name="Element Information" link="gst-plugins-good-plugins-rtpbin.html#id-1.2.124.9.13.1"/>
<keyword type="" name="Element Pads" link="gst-plugins-good-plugins-rtpbin.html#id-1.2.124.9.13.2"/>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-aacparse.html b/docs/plugins/html/gst-plugins-good-plugins-aacparse.html
index 1ff4111b..1ffe3564 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-aacparse.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-aacparse.html
@@ -51,7 +51,7 @@
<span class="lineart">╰──</span> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
<span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
<span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
- <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/gstreamer-libs-GstBaseParse.html#GstBaseParse">GstBaseParse</a>
+ <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseParse.html">GstBaseParse</a>
<span class="lineart">╰──</span> GstAacParse
</pre>
</div>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-ac3parse.html b/docs/plugins/html/gst-plugins-good-plugins-ac3parse.html
index 02fa22bb..a5270e44 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-ac3parse.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-ac3parse.html
@@ -51,7 +51,7 @@
<span class="lineart">╰──</span> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
<span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
<span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
- <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/gstreamer-libs-GstBaseParse.html#GstBaseParse">GstBaseParse</a>
+ <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseParse.html">GstBaseParse</a>
<span class="lineart">╰──</span> GstAc3Parse
</pre>
</div>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-amrparse.html b/docs/plugins/html/gst-plugins-good-plugins-amrparse.html
index cb4d4a41..684fab91 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-amrparse.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-amrparse.html
@@ -51,7 +51,7 @@
<span class="lineart">╰──</span> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
<span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
<span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
- <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/gstreamer-libs-GstBaseParse.html#GstBaseParse">GstBaseParse</a>
+ <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseParse.html">GstBaseParse</a>
<span class="lineart">╰──</span> GstAmrParse
</pre>
</div>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-dcaparse.html b/docs/plugins/html/gst-plugins-good-plugins-dcaparse.html
index 215bb442..859dbf41 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-dcaparse.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-dcaparse.html
@@ -51,7 +51,7 @@
<span class="lineart">╰──</span> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
<span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
<span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
- <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/gstreamer-libs-GstBaseParse.html#GstBaseParse">GstBaseParse</a>
+ <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseParse.html">GstBaseParse</a>
<span class="lineart">╰──</span> GstDcaParse
</pre>
</div>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-flacparse.html b/docs/plugins/html/gst-plugins-good-plugins-flacparse.html
index 0980b11c..4cfc0666 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-flacparse.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-flacparse.html
@@ -67,7 +67,7 @@
<span class="lineart">╰──</span> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
<span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
<span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
- <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/gstreamer-libs-GstBaseParse.html#GstBaseParse">GstBaseParse</a>
+ <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseParse.html">GstBaseParse</a>
<span class="lineart">╰──</span> GstFlacParse
</pre>
</div>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-mpegaudioparse.html b/docs/plugins/html/gst-plugins-good-plugins-mpegaudioparse.html
index 671f40f8..161b8b10 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-mpegaudioparse.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-mpegaudioparse.html
@@ -51,7 +51,7 @@
<span class="lineart">╰──</span> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
<span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
<span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
- <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/gstreamer-libs-GstBaseParse.html#GstBaseParse">GstBaseParse</a>
+ <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseParse.html">GstBaseParse</a>
<span class="lineart">╰──</span> GstMpegAudioParse
</pre>
</div>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-multiudpsink.html b/docs/plugins/html/gst-plugins-good-plugins-multiudpsink.html
index b95f5978..7d09f58d 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-multiudpsink.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-multiudpsink.html
@@ -30,7 +30,7 @@
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2><span class="refentrytitle"><a name="gst-plugins-good-plugins-multiudpsink.top_of_page"></a>multiudpsink</span></h2>
-<p>multiudpsink — Send data over the network via UDP</p>
+<p>multiudpsink — Send data over the network via UDP to one or multiple recipients which can be added or removed at runtime using action signals</p>
</td>
<td class="gallery_image" valign="top" align="right"></td>
</tr></table></div>
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 cca2848b..de6fe145 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.3.2</td>
+<td>1.3.3</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 e5f9a159..3b0a5287 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.3.2</td>
+<td>1.3.3</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 0fe3047b..525be0ce 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.3.2</td>
+<td>1.3.3</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 9a5055f2..92af448f 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.3.2</td>
+<td>1.3.3</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 e53d974b..8828d656 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.3.2</td>
+<td>1.3.3</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 e80dd3bc..51e20cb7 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.3.2</td>
+<td>1.3.3</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 386f4e08..1c745a4b 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.3.2</td>
+<td>1.3.3</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 2346d4df..7197eb47 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.3.2</td>
+<td>1.3.3</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 e956f6d6..434774bd 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.3.2</td>
+<td>1.3.3</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 18fe15e4..adba93bc 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.3.2</td>
+<td>1.3.3</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 1da58705..e7e51bd3 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.3.2</td>
+<td>1.3.3</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 e38b3320..f23a619b 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.3.2</td>
+<td>1.3.3</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 3ac346c1..577a046e 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.3.2</td>
+<td>1.3.3</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 68f1d54e..7a47005c 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.3.2</td>
+<td>1.3.3</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 c6769fda..801ee6aa 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.3.2</td>
+<td>1.3.3</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 1c793eda..ef12f757 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.3.2</td>
+<td>1.3.3</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 28a8a4a1..54159145 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.3.2</td>
+<td>1.3.3</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 13252854..fdf3b22d 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.3.2</td>
+<td>1.3.3</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 0b6ece21..80baa9b9 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.3.2</td>
+<td>1.3.3</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 b99e8786..39935333 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.3.2</td>
+<td>1.3.3</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 8a5acbfc..10f9ba2d 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.3.2</td>
+<td>1.3.3</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 089cf092..77e92d04 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.3.2</td>
+<td>1.3.3</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 a7e07c0b..7bd51a48 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.3.2</td>
+<td>1.3.3</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 c9e05349..d7ca1a73 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.3.2</td>
+<td>1.3.3</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 f5f12a81..2fe0aaa3 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.3.2</td>
+<td>1.3.3</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 9a20dfe2..6011dbb7 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.3.2</td>
+<td>1.3.3</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 f27bebcf..c9e54424 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.3.2</td>
+<td>1.3.3</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 2c75fe76..a5b3334c 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.3.2</td>
+<td>1.3.3</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 6b142623..e007b17b 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.3.2</td>
+<td>1.3.3</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 0dcc77a9..192b1ee9 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.3.2</td>
+<td>1.3.3</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 eeeadda4..5fe12842 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.3.2</td>
+<td>1.3.3</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 b29252b0..007ac4d0 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.3.2</td>
+<td>1.3.3</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 40cd9baf..be96de83 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.3.2</td>
+<td>1.3.3</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 9705ee3d..9626d250 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.3.2</td>
+<td>1.3.3</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 15a9642b..9832a59a 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.3.2</td>
+<td>1.3.3</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 074ecb05..6fd63d24 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.3.2</td>
+<td>1.3.3</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 a9b1d96e..5423aacd 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.3.2</td>
+<td>1.3.3</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 0c196847..527ce6af 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.3.2</td>
+<td>1.3.3</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 a100fb82..63e68f58 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.3.2</td>
+<td>1.3.3</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 ecbf7c8a..8b59b3d6 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.3.2</td>
+<td>1.3.3</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 a4ae523f..c7c3357b 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.3.2</td>
+<td>1.3.3</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 dd575028..d5d46052 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.3.2</td>
+<td>1.3.3</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 adcbad2d..39572d06 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.3.2</td>
+<td>1.3.3</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 43f8077d..ee6508c7 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.3.2</td>
+<td>1.3.3</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 9fbe16f5..63633fe7 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.3.2</td>
+<td>1.3.3</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 8ec448a4..07d55778 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.3.2</td>
+<td>1.3.3</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 d2b546b4..81a5f951 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.3.2</td>
+<td>1.3.3</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 f35781cb..1bd97568 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.3.2</td>
+<td>1.3.3</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 262d842b..402bce57 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.3.2</td>
+<td>1.3.3</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 2a922c87..33fbed0d 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.3.2</td>
+<td>1.3.3</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 3d79f291..7b3163f9 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.3.2</td>
+<td>1.3.3</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 dfc720af..fd5c257c 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.3.2</td>
+<td>1.3.3</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 fcc71325..c8a911ea 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.3.2</td>
+<td>1.3.3</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 78a30806..a8cea4b0 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.3.2</td>
+<td>1.3.3</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -69,11 +69,11 @@
<tbody>
<tr>
<td><p><span class="term">dynudpsink</span></p></td>
-<td>Send data over the network via UDP</td>
+<td>Send data over the network via UDP with packet destinations picked up dynamically from meta on the buffers passed</td>
</tr>
<tr>
<td><p><span class="term"><a class="link" href="gst-plugins-good-plugins-multiudpsink.html" title="multiudpsink">multiudpsink</a></span></p></td>
-<td>Send data over the network via UDP</td>
+<td>Send data over the network via UDP to one or multiple recipients which can be added or removed at runtime using action signals</td>
</tr>
<tr>
<td><p><span class="term"><a class="link" href="gst-plugins-good-plugins-udpsink.html" title="udpsink">udpsink</a></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 ff881ee1..89cec1b4 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.3.2</td>
+<td>1.3.3</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 e870e957..14d8d22f 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.3.2</td>
+<td>1.3.3</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 a3ca90ac..d14fb959 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.3.2</td>
+<td>1.3.3</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 86832770..b816380b 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.3.2</td>
+<td>1.3.3</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 5de1cc9c..065c79db 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.3.2</td>
+<td>1.3.3</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 a36606e1..d0c29d30 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.3.2</td>
+<td>1.3.3</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 c7e38aa7..5c48d5f0 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.3.2</td>
+<td>1.3.3</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 c9ec8ae0..a16e880b 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.3.2</td>
+<td>1.3.3</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 af68e0ef..6463ba80 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.3.2</td>
+<td>1.3.3</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 1e98570d..60680fbf 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.3.2</td>
+<td>1.3.3</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 7f85fd30..6cd6a7bc 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.3.2</td>
+<td>1.3.3</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-rtspsrc.html b/docs/plugins/html/gst-plugins-good-plugins-rtspsrc.html
index eca46822..3628b7f7 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-rtspsrc.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-rtspsrc.html
@@ -236,6 +236,12 @@
<td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc-new-manager" title="The “new-manager” signal">new-manager</a></td>
<td class="signal_flags">Run First</td>
</tr>
+<tr>
+<td class="signal_type">
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a>*</td>
+<td class="signal_name"><a class="link" href="gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc-request-rtcp-key" title="The “request-rtcp-key” signal">request-rtcp-key</a></td>
+<td class="signal_flags">Run Last</td>
+</tr>
</tbody>
</table></div>
</div>
@@ -819,6 +825,46 @@ properties were configured.</p>
<p>Flags: Run First</p>
<p class="since">Since 1.4</p>
</div>
+<hr>
+<div class="refsect2">
+<a name="GstRTSPSrc-request-rtcp-key"></a><h3>The <code class="literal">“request-rtcp-key”</code> signal</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstCaps.html#GstCaps"><span class="returnvalue">GstCaps</span></a>*
+user_function (<a class="link" href="gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc"><span class="type">GstRTSPSrc</span></a> *rtspsrc,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> num,
+ <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data)</pre>
+<p>Signal emited to get the crypto parameters relevant to the RTCP
+stream. User should provide the key and the RTCP encryption ciphers
+and authentication, and return them wrapped in a GstCaps.</p>
+<div class="refsect3">
+<a name="id-1.2.123.13.6.5"></a><h4>Parameters</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="150px" class="parameters_name">
+<col class="parameters_description">
+<col width="200px" class="parameters_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="parameter_name"><p>rtspsrc</p></td>
+<td class="parameter_description"><p>a <a class="link" href="gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc"><span class="type">GstRTSPSrc</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>num</p></td>
+<td class="parameter_description"><p>the stream number</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>user_data</p></td>
+<td class="parameter_description"><p>user data set when the signal handler was connected.</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<p>Flags: Run Last</p>
+<p class="since">Since 1.4</p>
+</div>
</div>
</div>
<div class="footer">
diff --git a/docs/plugins/html/gst-plugins-good-plugins-sbcparse.html b/docs/plugins/html/gst-plugins-good-plugins-sbcparse.html
index 70bb56a5..2b5ac3be 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-sbcparse.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-sbcparse.html
@@ -51,7 +51,7 @@
<span class="lineart">╰──</span> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
<span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
<span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
- <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/gstreamer-libs-GstBaseParse.html#GstBaseParse">GstBaseParse</a>
+ <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseParse.html">GstBaseParse</a>
<span class="lineart">╰──</span> GstSbcParse
</pre>
</div>
diff --git a/docs/plugins/html/gst-plugins-good-plugins-wavpackparse.html b/docs/plugins/html/gst-plugins-good-plugins-wavpackparse.html
index 0a11dc24..0c9b9944 100644
--- a/docs/plugins/html/gst-plugins-good-plugins-wavpackparse.html
+++ b/docs/plugins/html/gst-plugins-good-plugins-wavpackparse.html
@@ -51,7 +51,7 @@
<span class="lineart">╰──</span> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
<span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
<span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
- <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/gstreamer-libs-GstBaseParse.html#GstBaseParse">GstBaseParse</a>
+ <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseParse.html">GstBaseParse</a>
<span class="lineart">╰──</span> GstWavpackParse
</pre>
</div>
diff --git a/docs/plugins/html/index.html b/docs/plugins/html/index.html
index 6c68353a..5fc42220 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.3.2)
+ for GStreamer Good Plugins 1.0 (1.3.3)
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>
@@ -281,7 +281,7 @@
<span class="refentrytitle"><a href="gst-plugins-good-plugins-multipartmux.html">multipartmux</a></span><span class="refpurpose"> — mux multipart streams</span>
</dt>
<dt>
-<span class="refentrytitle"><a href="gst-plugins-good-plugins-multiudpsink.html">multiudpsink</a></span><span class="refpurpose"> — Send data over the network via UDP</span>
+<span class="refentrytitle"><a href="gst-plugins-good-plugins-multiudpsink.html">multiudpsink</a></span><span class="refpurpose"> — Send data over the network via UDP to one or multiple recipients which can be added or removed at runtime using action signals</span>
</dt>
<dt>
<span class="refentrytitle"><a href="gst-plugins-good-plugins-optv.html">optv</a></span><span class="refpurpose"> — Optical art meets real-time video effect</span>
diff --git a/docs/plugins/html/index.sgml b/docs/plugins/html/index.sgml
index 7b604622..cf88df8e 100644
--- a/docs/plugins/html/index.sgml
+++ b/docs/plugins/html/index.sgml
@@ -1618,6 +1618,7 @@
<ANCHOR id="GstRTSPSrc-on-sdp" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc-on-sdp">
<ANCHOR id="GstRTSPSrc-select-stream" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc-select-stream">
<ANCHOR id="GstRTSPSrc-new-manager" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc-new-manager">
+<ANCHOR id="GstRTSPSrc-request-rtcp-key" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-rtspsrc.html#GstRTSPSrc-request-rtcp-key">
<ANCHOR id="gst-plugins-good-plugins-rtpbin" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-rtpbin.html">
<ANCHOR id="gst-plugins-good-plugins-rtpbin.properties" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-rtpbin.html#gst-plugins-good-plugins-rtpbin.properties">
<ANCHOR id="gst-plugins-good-plugins-rtpbin.signals" href="gst-plugins-good-plugins-1.0/gst-plugins-good-plugins-rtpbin.html#gst-plugins-good-plugins-rtpbin.signals">
diff --git a/docs/plugins/inspect/plugin-1394.xml b/docs/plugins/inspect/plugin-1394.xml
index 6d5b5083..0e3a3357 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.3.2</version>
+ <version>1.3.3</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 7a8a8612..1413dbf1 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.3.2</version>
+ <version>1.3.3</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 460e8d5b..5a3141ff 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.3.2</version>
+ <version>1.3.3</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 4f05ef59..413ac89f 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.3.2</version>
+ <version>1.3.3</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 59ea3560..f0da08cd 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.3.2</version>
+ <version>1.3.3</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 3441857e..e475e948 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.3.2</version>
+ <version>1.3.3</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 c7329c01..3be61098 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.3.2</version>
+ <version>1.3.3</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 34eb617f..51e28f20 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.3.2</version>
+ <version>1.3.3</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 d4efc2da..f5c93c3d 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.3.2</version>
+ <version>1.3.3</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 fd32c113..726df7fc 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.3.2</version>
+ <version>1.3.3</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 7b3810e8..9331c961 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.3.2</version>
+ <version>1.3.3</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 f1f2caa6..64002372 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.3.2</version>
+ <version>1.3.3</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 2da90e0b..e565aff3 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.3.2</version>
+ <version>1.3.3</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 37803d90..b3bd432b 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.3.2</version>
+ <version>1.3.3</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 9d844f70..37fed155 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.3.2</version>
+ <version>1.3.3</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 97f3981e..cdea31a8 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.3.2</version>
+ <version>1.3.3</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 92968190..f234e024 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.3.2</version>
+ <version>1.3.3</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 7a34a78c..00459f68 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.3.2</version>
+ <version>1.3.3</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 290640f9..753bd431 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.3.2</version>
+ <version>1.3.3</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 ae4a53f0..dbbebb03 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.3.2</version>
+ <version>1.3.3</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 6121817e..f8634549 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.3.2</version>
+ <version>1.3.3</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 3fd91453..4c9abf44 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.3.2</version>
+ <version>1.3.3</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 08088de1..4d31fe3f 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.3.2</version>
+ <version>1.3.3</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 288e74ce..9d8c40c8 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.3.2</version>
+ <version>1.3.3</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 947229cb..57da6b9d 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.3.2</version>
+ <version>1.3.3</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 5e97c084..d96617c6 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.3.2</version>
+ <version>1.3.3</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 66c3cdf7..ed200040 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.3.2</version>
+ <version>1.3.3</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 1fe4a1c2..7de84aff 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.3.2</version>
+ <version>1.3.3</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 5dd77d55..fbfa754f 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.3.2</version>
+ <version>1.3.3</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 951ff24a..1f54157b 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.3.2</version>
+ <version>1.3.3</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 b1e074a6..4dd99d8d 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.3.2</version>
+ <version>1.3.3</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 0eaccd05..9f5d6e6e 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.3.2</version>
+ <version>1.3.3</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 f3ac3f28..1a213a4e 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.3.2</version>
+ <version>1.3.3</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 fd065621..e692add2 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.3.2</version>
+ <version>1.3.3</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 93775db2..f32e5c6e 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.3.2</version>
+ <version>1.3.3</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 46525a99..dd863f71 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.3.2</version>
+ <version>1.3.3</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 b3a6fa7c..5dd67c2e 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.3.2</version>
+ <version>1.3.3</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 14e937df..fde5bc83 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.3.2</version>
+ <version>1.3.3</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 ae5da569..83752f9a 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.3.2</version>
+ <version>1.3.3</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 933a015c..b49bccbc 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.3.2</version>
+ <version>1.3.3</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 25106a15..f4189c49 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.3.2</version>
+ <version>1.3.3</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 6d685859..b8377f85 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.3.2</version>
+ <version>1.3.3</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 aeb3608e..c7d99e8b 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.3.2</version>
+ <version>1.3.3</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 5c0fad57..dc3cff60 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.3.2</version>
+ <version>1.3.3</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 4762cccf..307b5d96 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.3.2</version>
+ <version>1.3.3</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 0f53304e..ab347252 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.3.2</version>
+ <version>1.3.3</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 d2db8079..8cb1f69a 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.3.2</version>
+ <version>1.3.3</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 0cf09999..6c86f252 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.3.2</version>
+ <version>1.3.3</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 6e4f2c79..386ae427 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.3.2</version>
+ <version>1.3.3</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 148eaa94..555bd737 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.3.2</version>
+ <version>1.3.3</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 a6aaa5f1..378d8e1f 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.3.2</version>
+ <version>1.3.3</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 fa2bc27e..2a49c363 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.3.2</version>
+ <version>1.3.3</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 d548ee62..24a85695 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.3.2</version>
+ <version>1.3.3</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 e2df20f3..02caded9 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.3.2</version>
+ <version>1.3.3</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 9a714dc6..26bd3a21 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.3.2</version>
+ <version>1.3.3</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
@@ -13,7 +13,7 @@
<name>dynudpsink</name>
<longname>UDP packet sender</longname>
<class>Sink/Network</class>
- <description>Send data over the network via UDP</description>
+ <description>Send data over the network via UDP with packet destinations picked up dynamically from meta on the buffers passed</description>
<author>Philippe Khalaf &lt;burger@speedy.org&gt;</author>
<pads>
<caps>
@@ -28,7 +28,7 @@
<name>multiudpsink</name>
<longname>UDP packet sender</longname>
<class>Sink/Network</class>
- <description>Send data over the network via UDP</description>
+ <description>Send data over the network via UDP to one or multiple recipients which can be added or removed at runtime using action signals</description>
<author>Wim Taymans &lt;wim.taymans@gmail.com&gt;</author>
<pads>
<caps>
diff --git a/docs/plugins/inspect/plugin-video4linux2.xml b/docs/plugins/inspect/plugin-video4linux2.xml
index 6b7f2e1b..36370c16 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.3.2</version>
+ <version>1.3.3</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 cbaa0e13..74438553 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.3.2</version>
+ <version>1.3.3</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 55ff1fba..66b25c2a 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.3.2</version>
+ <version>1.3.3</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 916ae609..70e93699 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.3.2</version>
+ <version>1.3.3</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 4dde821f..205b5aea 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.3.2</version>
+ <version>1.3.3</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 317fa3a3..5ef6d2b9 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.3.2</version>
+ <version>1.3.3</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 8c585e4f..4aa252b1 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.3.2</version>
+ <version>1.3.3</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 37324dff..f0f26fd7 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.3.2</version>
+ <version>1.3.3</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 a5a34f47..236faa14 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.3.2</version>
+ <version>1.3.3</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 4452ef5e..f6aa5717 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.3.2</version>
+ <version>1.3.3</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 aa3ee5cc..20e016bd 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.3.2</version>
+ <version>1.3.3</version>
<license>LGPL</license>
<source>gst-plugins-good</source>
<package>GStreamer Good Plug-ins source release</package>
diff --git a/ext/flac/gstflacdec.c b/ext/flac/gstflacdec.c
index 5de5bc0d..f5e07023 100644
--- a/ext/flac/gstflacdec.c
+++ b/ext/flac/gstflacdec.c
@@ -317,7 +317,7 @@ static const guint8 crc8_table[256] = {
};
static guint8
-gst_flac_calculate_crc8 (guint8 * data, guint length)
+gst_flac_calculate_crc8 (const guint8 * data, guint length)
{
guint8 crc = 0;
@@ -332,7 +332,8 @@ gst_flac_calculate_crc8 (guint8 * data, guint length)
/* FIXME: for our purposes it's probably enough to just check for the sync
* marker - we just want to know if it's a header frame or not */
static gboolean
-gst_flac_dec_scan_got_frame (GstFlacDec * flacdec, guint8 * data, guint size)
+gst_flac_dec_scan_got_frame (GstFlacDec * flacdec, const guint8 * data,
+ guint size)
{
guint headerlen;
guint sr_from_end = 0; /* can be 0, 8 or 16 */
diff --git a/ext/pulse/pulsedevicemonitor.c b/ext/pulse/pulsedevicemonitor.c
index b4ee8199..f697d104 100644
--- a/ext/pulse/pulsedevicemonitor.c
+++ b/ext/pulse/pulsedevicemonitor.c
@@ -630,7 +630,7 @@ gst_pulse_device_new (guint device_index, const gchar * device_name,
gstdev = g_object_new (GST_TYPE_PULSE_DEVICE,
- "display-name", device_name, "caps", caps, "klass", klass,
+ "display-name", device_name, "caps", caps, "device-class", klass,
"internal-name", internal_name, NULL);
gstdev->type = type;
diff --git a/ext/soup/gstsouphttpsrc.c b/ext/soup/gstsouphttpsrc.c
index 1ec661bb..11842f17 100644
--- a/ext/soup/gstsouphttpsrc.c
+++ b/ext/soup/gstsouphttpsrc.c
@@ -991,6 +991,40 @@ gst_soup_http_src_authenticate_cb (SoupSession * session, SoupMessage * msg,
}
static void
+insert_http_header (const gchar * name, const gchar * value, gpointer user_data)
+{
+ GstStructure *headers = user_data;
+ const GValue *gv;
+
+ gv = gst_structure_get_value (headers, name);
+ if (gv && GST_VALUE_HOLDS_ARRAY (gv)) {
+ GValue v = G_VALUE_INIT;
+
+ g_value_init (&v, G_TYPE_STRING);
+ g_value_set_string (&v, value);
+ gst_value_array_append_value ((GValue *) gv, &v);
+ g_value_unset (&v);
+ } else if (gv && G_VALUE_HOLDS_STRING (gv)) {
+ GValue arr = G_VALUE_INIT;
+ GValue v = G_VALUE_INIT;
+ const gchar *old_value = g_value_get_string (gv);
+
+ g_value_init (&arr, GST_TYPE_ARRAY);
+ g_value_init (&v, G_TYPE_STRING);
+ g_value_set_string (&v, old_value);
+ gst_value_array_append_value (&arr, &v);
+ g_value_set_string (&v, value);
+ gst_value_array_append_value (&arr, &v);
+
+ gst_structure_set_value (headers, name, &arr);
+ g_value_unset (&v);
+ g_value_unset (&arr);
+ } else {
+ gst_structure_set (headers, name, G_TYPE_STRING, value, NULL);
+ }
+}
+
+static void
gst_soup_http_src_got_headers_cb (SoupMessage * msg, GstSoupHTTPSrc * src)
{
const char *value;
@@ -998,6 +1032,8 @@ gst_soup_http_src_got_headers_cb (SoupMessage * msg, GstSoupHTTPSrc * src)
GstBaseSrc *basesrc;
guint64 newsize;
GHashTable *params = NULL;
+ GstEvent *http_headers_event;
+ GstStructure *http_headers, *headers;
GST_INFO_OBJECT (src, "got headers");
@@ -1021,6 +1057,29 @@ gst_soup_http_src_got_headers_cb (SoupMessage * msg, GstSoupHTTPSrc * src)
src->session_io_status = GST_SOUP_HTTP_SRC_SESSION_IO_STATUS_RUNNING;
src->got_headers = TRUE;
+ http_headers = gst_structure_new_empty ("http-headers");
+ gst_structure_set (http_headers, "uri", G_TYPE_STRING, src->location, NULL);
+ if (src->redirection_uri)
+ gst_structure_set (http_headers, "redirection-uri", G_TYPE_STRING,
+ src->redirection_uri, NULL);
+ headers = gst_structure_new_empty ("request-headers");
+ soup_message_headers_foreach (msg->request_headers, insert_http_header,
+ headers);
+ gst_structure_set (http_headers, "request-headers", GST_TYPE_STRUCTURE,
+ headers, NULL);
+ gst_structure_free (headers);
+ headers = gst_structure_new_empty ("response-headers");
+ soup_message_headers_foreach (msg->response_headers, insert_http_header,
+ headers);
+ gst_structure_set (http_headers, "response-headers", GST_TYPE_STRUCTURE,
+ headers, NULL);
+ gst_structure_free (headers);
+
+ http_headers_event =
+ gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM_STICKY, http_headers);
+ gst_event_replace (&src->http_headers_event, http_headers_event);
+ gst_event_unref (http_headers_event);
+
/* Parse Content-Length. */
if (soup_message_headers_get_encoding (msg->response_headers) ==
SOUP_ENCODING_CONTENT_LENGTH) {
@@ -1644,13 +1703,20 @@ gst_soup_http_src_create (GstPushSrc * psrc, GstBuffer ** outbuf)
{
GstSoupHTTPSrc *src;
GstFlowReturn ret;
+ GstEvent *http_headers_event;
src = GST_SOUP_HTTP_SRC (psrc);
g_mutex_lock (&src->mutex);
*outbuf = NULL;
ret = gst_soup_http_src_do_request (src, SOUP_METHOD_GET, outbuf);
+ http_headers_event = src->http_headers_event;
+ src->http_headers_event = NULL;
g_mutex_unlock (&src->mutex);
+
+ if (http_headers_event)
+ gst_pad_push_event (GST_BASE_SRC_PAD (src), http_headers_event);
+
return ret;
}
diff --git a/ext/soup/gstsouphttpsrc.h b/ext/soup/gstsouphttpsrc.h
index 77e1000b..e31dfcf7 100644
--- a/ext/soup/gstsouphttpsrc.h
+++ b/ext/soup/gstsouphttpsrc.h
@@ -108,6 +108,8 @@ struct _GstSoupHTTPSrc {
GMutex mutex;
GCond request_finished_cond;
+
+ GstEvent *http_headers_event;
};
struct _GstSoupHTTPSrcClass {
diff --git a/ext/speex/gstspeexenc.c b/ext/speex/gstspeexenc.c
index c17e8a39..8e13eb1c 100644
--- a/ext/speex/gstspeexenc.c
+++ b/ext/speex/gstspeexenc.c
@@ -658,6 +658,7 @@ _gst_caps_set_buffer_array (GstCaps * caps, const gchar * field,
buf = va_arg (va, GstBuffer *);
}
+ va_end (va);
gst_structure_set_value (structure, field, &array);
g_value_unset (&array);
diff --git a/ext/vpx/gstvp8enc.c b/ext/vpx/gstvp8enc.c
index 0271ffcd..c1c0a07e 100644
--- a/ext/vpx/gstvp8enc.c
+++ b/ext/vpx/gstvp8enc.c
@@ -932,18 +932,18 @@ gst_vp8_enc_set_property (GObject * object, guint prop_id,
memset (&gst_vp8_enc->cfg.ts_rate_decimator, 0,
sizeof (gst_vp8_enc->cfg.ts_rate_decimator));
- if (va->n_values > VPX_TS_MAX_LAYERS) {
+ if (va == NULL) {
+ gst_vp8_enc->n_ts_rate_decimator = 0;
+ } else if (va->n_values > VPX_TS_MAX_LAYERS) {
g_warning ("%s: Only %d layers allowed at maximum",
GST_ELEMENT_NAME (gst_vp8_enc), VPX_TS_MAX_LAYERS);
- } else if (va) {
+ } else {
gint i;
for (i = 0; i < va->n_values; i++)
gst_vp8_enc->cfg.ts_rate_decimator[i] =
g_value_get_int (g_value_array_get_nth (va, i));
gst_vp8_enc->n_ts_rate_decimator = va->n_values;
- } else {
- gst_vp8_enc->n_ts_rate_decimator = 0;
}
global = TRUE;
break;
diff --git a/ext/vpx/gstvp9enc.c b/ext/vpx/gstvp9enc.c
index 1b153118..9bf5efb6 100644
--- a/ext/vpx/gstvp9enc.c
+++ b/ext/vpx/gstvp9enc.c
@@ -909,18 +909,18 @@ gst_vp9_enc_set_property (GObject * object, guint prop_id,
memset (&gst_vp9_enc->cfg.ts_rate_decimator, 0,
sizeof (gst_vp9_enc->cfg.ts_rate_decimator));
- if (va->n_values > VPX_TS_MAX_LAYERS) {
+ if (va == NULL) {
+ gst_vp9_enc->n_ts_rate_decimator = 0;
+ } else if (va->n_values > VPX_TS_MAX_LAYERS) {
g_warning ("%s: Only %d layers allowed at maximum",
GST_ELEMENT_NAME (gst_vp9_enc), VPX_TS_MAX_LAYERS);
- } else if (va) {
+ } else {
gint i;
for (i = 0; i < va->n_values; i++)
gst_vp9_enc->cfg.ts_rate_decimator[i] =
g_value_get_int (g_value_array_get_nth (va, i));
gst_vp9_enc->n_ts_rate_decimator = va->n_values;
- } else {
- gst_vp9_enc->n_ts_rate_decimator = 0;
}
global = TRUE;
break;
diff --git a/gst-plugins-good.doap b/gst-plugins-good.doap
index f2675771..0f8b061e 100644
--- a/gst-plugins-good.doap
+++ b/gst-plugins-good.doap
@@ -34,6 +34,16 @@ the plug-in code, LGPL or LGPL-compatible for the supporting library).
<release>
<Version>
+ <revision>1.3.3</revision>
+ <branch>1.3</branch>
+ <name></name>
+ <created>2014-06-22</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-1.3.3.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
<revision>1.3.2</revision>
<branch>1.3</branch>
<name></name>
diff --git a/gst-plugins-good.spec b/gst-plugins-good.spec
index 2b25b333..67533af9 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.3.2
+Version: 1.3.3
Release: 1.gst
Summary: GStreamer plug-ins with good code and licensing
diff --git a/gst/avi/gstavidemux.c b/gst/avi/gstavidemux.c
index 22d3dbb8..c84ffce8 100644
--- a/gst/avi/gstavidemux.c
+++ b/gst/avi/gstavidemux.c
@@ -196,6 +196,7 @@ gst_avi_demux_init (GstAviDemux * avi)
gst_element_add_pad (GST_ELEMENT_CAST (avi), avi->sinkpad);
avi->adapter = gst_adapter_new ();
+ avi->flowcombiner = gst_flow_combiner_new ();
gst_avi_demux_reset (avi);
@@ -210,6 +211,7 @@ gst_avi_demux_finalize (GObject * object)
GST_DEBUG ("AVI: finalize");
g_object_unref (avi->adapter);
+ gst_flow_combiner_free (avi->flowcombiner);
G_OBJECT_CLASS (parent_class)->finalize (object);
}
@@ -232,6 +234,7 @@ gst_avi_demux_reset_stream (GstAviDemux * avi, GstAviStream * stream)
if (stream->exposed) {
gst_pad_set_active (stream->pad, FALSE);
gst_element_remove_pad (GST_ELEMENT_CAST (avi), stream->pad);
+ gst_flow_combiner_remove_pad (avi->flowcombiner, stream->pad);
} else
gst_object_unref (stream->pad);
}
@@ -898,7 +901,6 @@ gst_avi_demux_handle_sink_event (GstPad * pad, GstObject * parent,
gst_adapter_clear (avi->adapter);
avi->have_eos = FALSE;
for (i = 0; i < avi->num_streams; i++) {
- avi->stream[i].last_flow = GST_FLOW_OK;
avi->stream[i].discont = TRUE;
}
/* fall through to default case so that the event gets passed downstream */
@@ -1886,6 +1888,7 @@ gst_avi_demux_expose_streams (GstAviDemux * avi, gboolean force)
if (force || stream->idx_n != 0) {
GST_LOG_OBJECT (avi, "Adding pad %s", GST_PAD_NAME (stream->pad));
gst_element_add_pad ((GstElement *) avi, stream->pad);
+ gst_flow_combiner_add_pad (avi->flowcombiner, stream->pad);
#if 0
if (avi->element_index)
@@ -2404,7 +2407,6 @@ gst_avi_demux_parse_stream (GstAviDemux * avi, GstBuffer * buf)
stream->current_entry = -1;
stream->current_total = 0;
- stream->last_flow = GST_FLOW_OK;
stream->discont = TRUE;
stream->total_bytes = 0;
@@ -4638,7 +4640,6 @@ gst_avi_demux_handle_seek (GstAviDemux * avi, GstPad * pad, GstEvent * event)
/* reset the last flow and mark discont, seek is always DISCONT */
for (i = 0; i < avi->num_streams; i++) {
GST_DEBUG_OBJECT (avi, "marking DISCONT");
- avi->stream[i].last_flow = GST_FLOW_OK;
avi->stream[i].discont = TRUE;
}
GST_PAD_STREAM_UNLOCK (avi->sinkpad);
@@ -5003,37 +5004,11 @@ static GstFlowReturn
gst_avi_demux_combine_flows (GstAviDemux * avi, GstAviStream * stream,
GstFlowReturn ret)
{
- guint i;
- gboolean unexpected = FALSE, not_linked = TRUE;
-
- /* store the value */
- stream->last_flow = ret;
-
- /* any other error that is not-linked or eos can be returned right away */
- if (G_LIKELY (ret != GST_FLOW_EOS && ret != GST_FLOW_NOT_LINKED))
- goto done;
-
- /* only return NOT_LINKED if all other pads returned NOT_LINKED */
- for (i = 0; i < avi->num_streams; i++) {
- GstAviStream *ostream = &avi->stream[i];
-
- ret = ostream->last_flow;
- /* no unexpected or unlinked, return */
- if (G_LIKELY (ret != GST_FLOW_EOS && ret != GST_FLOW_NOT_LINKED))
- goto done;
+ GST_LOG_OBJECT (avi, "Stream %s:%s flow return: %s",
+ GST_DEBUG_PAD_NAME (stream->pad), gst_flow_get_name (ret));
+ ret = gst_flow_combiner_update_flow (avi->flowcombiner, ret);
+ GST_LOG_OBJECT (avi, "combined to return %s", gst_flow_get_name (ret));
- /* we check to see if we have at least 1 unexpected or all unlinked */
- unexpected |= (ret == GST_FLOW_EOS);
- not_linked &= (ret == GST_FLOW_NOT_LINKED);
- }
- /* when we get here, we all have unlinked or unexpected */
- if (not_linked)
- ret = GST_FLOW_NOT_LINKED;
- else if (unexpected)
- ret = GST_FLOW_EOS;
-done:
- GST_LOG_OBJECT (avi, "combined %s to return %s",
- gst_flow_get_name (stream->last_flow), gst_flow_get_name (ret));
return ret;
}
@@ -5092,7 +5067,6 @@ gst_avi_demux_advance (GstAviDemux * avi, GstAviStream * stream,
&stream->current_timestamp, &stream->current_ts_end,
&stream->current_offset, &stream->current_offset_end);
/* and MARK discont for this stream */
- stream->last_flow = GST_FLOW_OK;
stream->discont = TRUE;
GST_DEBUG_OBJECT (avi, "Moved from %u to %u, ts %" GST_TIME_FORMAT
", ts_end %" GST_TIME_FORMAT ", off %" G_GUINT64_FORMAT
@@ -5134,7 +5108,7 @@ gst_avi_demux_find_next (GstAviDemux * avi, gfloat rate)
stream = &avi->stream[i];
/* ignore streams that finished */
- if (stream->last_flow == GST_FLOW_EOS)
+ if (GST_PAD_LAST_FLOW_RETURN (stream->pad) == GST_FLOW_EOS)
continue;
position = stream->current_timestamp;
diff --git a/gst/avi/gstavidemux.h b/gst/avi/gstavidemux.h
index 0e8786fb..fd2af507 100644
--- a/gst/avi/gstavidemux.h
+++ b/gst/avi/gstavidemux.h
@@ -27,6 +27,7 @@
#include "gst/riff/riff-ids.h"
#include "gst/riff/riff-read.h"
#include <gst/base/gstadapter.h>
+#include <gst/base/gstflowcombiner.h>
G_BEGIN_DECLS
@@ -90,7 +91,6 @@ typedef struct {
guint64 current_offset;
guint64 current_offset_end;
- GstFlowReturn last_flow;
gboolean discont;
/* stream length */
@@ -165,6 +165,8 @@ typedef struct _GstAviDemux {
guint main_stream; /* used for seeking */
+ GstFlowCombiner *flowcombiner;
+
gboolean have_group_id;
guint group_id;
diff --git a/gst/flv/gstflvdemux.c b/gst/flv/gstflvdemux.c
index 212d18a3..0af779ca 100644
--- a/gst/flv/gstflvdemux.c
+++ b/gst/flv/gstflvdemux.c
@@ -885,10 +885,11 @@ gst_flv_demux_push_tags (GstFlvDemux * demux)
}
}
-static void
+static gboolean
gst_flv_demux_update_resync (GstFlvDemux * demux, guint32 pts, gboolean discont,
guint32 * last, GstClockTime * offset)
{
+ gboolean ret = FALSE;
gint32 dpts = pts - *last;
if (!discont && ABS (dpts) >= RESYNC_THRESHOLD) {
/* Theoretically, we should use substract the duration of the last buffer,
@@ -898,8 +899,12 @@ gst_flv_demux_update_resync (GstFlvDemux * demux, guint32 pts, gboolean discont,
GST_WARNING_OBJECT (demux,
"Large pts gap (%" G_GINT32_FORMAT " ms), assuming resync, offset now %"
GST_TIME_FORMAT "", dpts, GST_TIME_ARGS (*offset));
+
+ ret = TRUE;
}
*last = pts;
+
+ return ret;
}
static GstFlowReturn
@@ -1031,6 +1036,7 @@ gst_flv_demux_parse_tag_audio (GstFlvDemux * demux, GstBuffer * buffer)
/* We need to set caps before adding */
gst_element_add_pad (GST_ELEMENT (demux),
gst_object_ref (demux->audio_pad));
+ gst_flow_combiner_add_pad (demux->flowcombiner, demux->audio_pad);
/* We only emit no more pads when we have audio and video. Indeed we can
* not trust the FLV header to tell us if there will be only audio or
@@ -1098,8 +1104,10 @@ gst_flv_demux_parse_tag_audio (GstFlvDemux * demux, GstBuffer * buffer)
}
/* detect (and deem to be resyncs) large pts gaps */
- gst_flv_demux_update_resync (demux, pts, demux->audio_need_discont,
- &demux->last_audio_pts, &demux->audio_time_offset);
+ if (gst_flv_demux_update_resync (demux, pts, demux->audio_need_discont,
+ &demux->last_audio_pts, &demux->audio_time_offset)) {
+ GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_RESYNC);
+ }
/* Fill buffer with data */
GST_BUFFER_TIMESTAMP (outbuf) = pts * GST_MSECOND + demux->audio_time_offset;
@@ -1170,27 +1178,20 @@ gst_flv_demux_parse_tag_audio (GstFlvDemux * demux, GstBuffer * buffer)
/* Push downstream */
ret = gst_pad_push (demux->audio_pad, outbuf);
- if (G_UNLIKELY (ret != GST_FLOW_OK)) {
- if (demux->segment.rate < 0.0 && ret == GST_FLOW_EOS &&
- demux->segment.position > demux->segment.stop) {
- /* In reverse playback we can get a GST_FLOW_EOS when
- * we are at the end of the segment, so we just need to jump
- * back to the previous section. */
- GST_DEBUG_OBJECT (demux, "downstream has reached end of segment");
- demux->audio_done = TRUE;
- ret = GST_FLOW_OK;
- } else {
- if (ret == GST_FLOW_NOT_LINKED) {
- demux->audio_linked = FALSE;
- } else
- GST_WARNING_OBJECT (demux, "failed pushing a %" G_GUINT64_FORMAT
- " bytes audio buffer: %s", demux->tag_data_size,
- gst_flow_get_name (ret));
- goto beach;
- }
+
+ if (G_UNLIKELY (ret != GST_FLOW_OK) &&
+ demux->segment.rate < 0.0 && ret == GST_FLOW_EOS &&
+ demux->segment.position > demux->segment.stop) {
+ /* In reverse playback we can get a GST_FLOW_EOS when
+ * we are at the end of the segment, so we just need to jump
+ * back to the previous section. */
+ GST_DEBUG_OBJECT (demux, "downstream has reached end of segment");
+ demux->audio_done = TRUE;
+ ret = GST_FLOW_OK;
+ goto beach;
}
- demux->audio_linked = TRUE;
+ ret = gst_flow_combiner_update_flow (demux->flowcombiner, ret);
beach:
gst_buffer_unmap (buffer, &map);
@@ -1420,6 +1421,7 @@ gst_flv_demux_parse_tag_video (GstFlvDemux * demux, GstBuffer * buffer)
/* We need to set caps before adding */
gst_element_add_pad (GST_ELEMENT (demux),
gst_object_ref (demux->video_pad));
+ gst_flow_combiner_add_pad (demux->flowcombiner, demux->video_pad);
/* We only emit no more pads when we have audio and video. Indeed we can
* not trust the FLV header to tell us if there will be only audio or
@@ -1489,8 +1491,10 @@ gst_flv_demux_parse_tag_video (GstFlvDemux * demux, GstBuffer * buffer)
}
/* detect (and deem to be resyncs) large pts gaps */
- gst_flv_demux_update_resync (demux, pts, demux->video_need_discont,
- &demux->last_video_pts, &demux->video_time_offset);
+ if (gst_flv_demux_update_resync (demux, pts, demux->video_need_discont,
+ &demux->last_video_pts, &demux->video_time_offset)) {
+ GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_RESYNC);
+ }
/* Fill buffer with data */
GST_BUFFER_TIMESTAMP (outbuf) = pts * GST_MSECOND + demux->video_time_offset;
@@ -1564,27 +1568,19 @@ gst_flv_demux_parse_tag_video (GstFlvDemux * demux, GstBuffer * buffer)
/* Push downstream */
ret = gst_pad_push (demux->video_pad, outbuf);
- if (G_UNLIKELY (ret != GST_FLOW_OK)) {
- if (demux->segment.rate < 0.0 && ret == GST_FLOW_EOS &&
- demux->segment.position > demux->segment.stop) {
- /* In reverse playback we can get a GST_FLOW_EOS when
- * we are at the end of the segment, so we just need to jump
- * back to the previous section. */
- GST_DEBUG_OBJECT (demux, "downstream has reached end of segment");
- demux->video_done = TRUE;
- ret = GST_FLOW_OK;
- } else {
- if (ret == GST_FLOW_NOT_LINKED)
- demux->video_linked = FALSE;
- else
- GST_WARNING_OBJECT (demux, "failed pushing a %" G_GUINT64_FORMAT
- " bytes video buffer: %s", demux->tag_data_size,
- gst_flow_get_name (ret));
- goto beach;
- }
+ if (G_UNLIKELY (ret != GST_FLOW_OK) &&
+ demux->segment.rate < 0.0 && ret == GST_FLOW_EOS &&
+ demux->segment.position > demux->segment.stop) {
+ /* In reverse playback we can get a GST_FLOW_EOS when
+ * we are at the end of the segment, so we just need to jump
+ * back to the previous section. */
+ GST_DEBUG_OBJECT (demux, "downstream has reached end of segment");
+ demux->video_done = TRUE;
+ ret = GST_FLOW_OK;
+ goto beach;
}
- demux->video_linked = TRUE;
+ ret = gst_flow_combiner_update_flow (demux->flowcombiner, ret);
beach:
gst_buffer_unmap (buffer, &map);
@@ -1811,10 +1807,6 @@ gst_flv_demux_cleanup (GstFlvDemux * demux)
demux->audio_need_discont = TRUE;
demux->video_need_discont = TRUE;
- /* By default we consider them as linked */
- demux->audio_linked = TRUE;
- demux->video_linked = TRUE;
-
demux->has_audio = FALSE;
demux->has_video = FALSE;
demux->push_tags = FALSE;
@@ -1862,12 +1854,14 @@ gst_flv_demux_cleanup (GstFlvDemux * demux)
}
if (demux->audio_pad) {
+ gst_flow_combiner_remove_pad (demux->flowcombiner, demux->audio_pad);
gst_element_remove_pad (GST_ELEMENT (demux), demux->audio_pad);
gst_object_unref (demux->audio_pad);
demux->audio_pad = NULL;
}
if (demux->video_pad) {
+ gst_flow_combiner_remove_pad (demux->flowcombiner, demux->video_pad);
gst_element_remove_pad (GST_ELEMENT (demux), demux->video_pad);
gst_object_unref (demux->video_pad);
demux->video_pad = NULL;
@@ -1947,13 +1941,8 @@ gst_flv_demux_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
parse:
if (G_UNLIKELY (ret != GST_FLOW_OK)) {
- if (ret == GST_FLOW_NOT_LINKED && (demux->audio_linked
- || demux->video_linked)) {
- ret = GST_FLOW_OK;
- } else {
- GST_DEBUG_OBJECT (demux, "got flow return %s", gst_flow_get_name (ret));
- goto beach;
- }
+ GST_DEBUG_OBJECT (demux, "got flow return %s", gst_flow_get_name (ret));
+ goto beach;
}
if (G_UNLIKELY (demux->flushing)) {
@@ -2127,13 +2116,6 @@ parse:
}
beach:
- if (G_UNLIKELY (ret == GST_FLOW_NOT_LINKED)) {
- /* If either audio or video is linked we return GST_FLOW_OK */
- if (demux->audio_linked || demux->video_linked) {
- ret = GST_FLOW_OK;
- }
- }
-
return ret;
/* ERRORS */
@@ -2242,13 +2224,8 @@ gst_flv_demux_pull_tag (GstPad * pad, GstFlvDemux * demux)
demux->state = FLV_STATE_TAG_TYPE;
if (G_UNLIKELY (ret == GST_FLOW_NOT_LINKED)) {
- /* If either audio or video is linked we return GST_FLOW_OK */
- if (demux->audio_linked || demux->video_linked) {
- ret = GST_FLOW_OK;
- } else {
- GST_WARNING_OBJECT (demux, "parsing this tag returned not-linked and "
- "neither video nor audio are linked");
- }
+ GST_WARNING_OBJECT (demux, "parsing this tag returned not-linked and "
+ "neither video nor audio are linked");
}
beach:
@@ -3132,6 +3109,10 @@ gst_flv_demux_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_SEEK:
+ /* Try to push upstream first */
+ ret = gst_pad_push_event (demux->sinkpad, event);
+ if (ret)
+ break;
if (demux->random_access) {
ret = gst_flv_demux_handle_seek_pull (demux, event, TRUE);
} else {
@@ -3159,6 +3140,11 @@ gst_flv_demux_query (GstPad * pad, GstObject * parent, GstQuery * query)
{
GstFormat format;
+ /* Try to push upstream first */
+ res = gst_pad_peer_query (demux->sinkpad, query);
+ if (res)
+ goto beach;
+
gst_query_parse_duration (query, &format, NULL);
/* duration is time only */
@@ -3382,6 +3368,11 @@ gst_flv_demux_dispose (GObject * object)
demux->taglist = NULL;
}
+ if (demux->flowcombiner) {
+ gst_flow_combiner_free (demux->flowcombiner);
+ demux->flowcombiner = NULL;
+ }
+
if (demux->new_seg_event) {
gst_event_unref (demux->new_seg_event);
demux->new_seg_event = NULL;
@@ -3472,6 +3463,7 @@ gst_flv_demux_init (GstFlvDemux * demux)
demux->adapter = gst_adapter_new ();
demux->taglist = gst_tag_list_new_empty ();
+ demux->flowcombiner = gst_flow_combiner_new ();
gst_segment_init (&demux->segment, GST_FORMAT_TIME);
demux->own_index = FALSE;
diff --git a/gst/flv/gstflvdemux.h b/gst/flv/gstflvdemux.h
index 79a8902e..611482c3 100644
--- a/gst/flv/gstflvdemux.h
+++ b/gst/flv/gstflvdemux.h
@@ -22,6 +22,7 @@
#include <gst/gst.h>
#include <gst/base/gstadapter.h>
+#include <gst/base/gstflowcombiner.h>
#include "gstindex.h"
G_BEGIN_DECLS
@@ -74,6 +75,8 @@ struct _GstFlvDemux
GstAdapter *adapter;
+ GstFlowCombiner *flowcombiner;
+
GstSegment segment;
GstEvent *new_seg_event;
diff --git a/gst/isomp4/fourcc.h b/gst/isomp4/fourcc.h
index 64322a7a..4edf900b 100644
--- a/gst/isomp4/fourcc.h
+++ b/gst/isomp4/fourcc.h
@@ -304,6 +304,11 @@ G_BEGIN_DECLS
/* ilst metatags */
#define FOURCC__cmt GST_MAKE_FOURCC(0xa9, 'c','m','t')
+/* apple tags */
+#define FOURCC__mak GST_MAKE_FOURCC(0xa9, 'm','a','k')
+#define FOURCC__mod GST_MAKE_FOURCC(0xa9, 'm','o','d')
+#define FOURCC__swr GST_MAKE_FOURCC(0xa9, 's','w','r')
+
/* Chapters reference */
#define FOURCC_chap GST_MAKE_FOURCC('c','h','a','p')
diff --git a/gst/isomp4/qtdemux.c b/gst/isomp4/qtdemux.c
index 53847c00..7df62597 100644
--- a/gst/isomp4/qtdemux.c
+++ b/gst/isomp4/qtdemux.c
@@ -294,9 +294,6 @@ struct _QtDemuxStream
GstSegment segment;
guint32 segment_seqnum; /* segment event seqnum obtained from seek */
- /* last GstFlowReturn */
- GstFlowReturn last_ret;
-
/* quicktime segments */
guint32 n_segments;
QtDemuxSegment *segments;
@@ -467,7 +464,8 @@ static gboolean qtdemux_parse_samples (GstQTDemux * qtdemux,
static GstFlowReturn qtdemux_expose_streams (GstQTDemux * qtdemux);
static void gst_qtdemux_stream_free (GstQTDemux * qtdemux,
QtDemuxStream * stream);
-static void gst_qtdemux_stream_clear (QtDemuxStream * stream);
+static void gst_qtdemux_stream_clear (GstQTDemux * qtdemux,
+ QtDemuxStream * stream);
static void gst_qtdemux_remove_stream (GstQTDemux * qtdemux, int index);
static GstFlowReturn qtdemux_prepare_streams (GstQTDemux * qtdemux);
static void qtdemux_do_allocation (GstQTDemux * qtdemux,
@@ -546,6 +544,7 @@ gst_qtdemux_init (GstQTDemux * qtdemux)
qtdemux->have_group_id = FALSE;
qtdemux->group_id = G_MAXUINT;
gst_segment_init (&qtdemux->segment, GST_FORMAT_TIME);
+ qtdemux->flowcombiner = gst_flow_combiner_new ();
GST_OBJECT_FLAG_SET (qtdemux, GST_ELEMENT_FLAG_INDEXABLE);
}
@@ -559,6 +558,7 @@ gst_qtdemux_dispose (GObject * object)
g_object_unref (G_OBJECT (qtdemux->adapter));
qtdemux->adapter = NULL;
}
+ gst_flow_combiner_free (qtdemux->flowcombiner);
G_OBJECT_CLASS (parent_class)->dispose (object);
}
@@ -1397,7 +1397,6 @@ gst_qtdemux_perform_seek (GstQTDemux * qtdemux, GstSegment * segment,
stream->sample_index = -1;
stream->offset_in_sample = 0;
stream->segment_index = -1;
- stream->last_ret = GST_FLOW_OK;
stream->sent_eos = FALSE;
stream->segment_seqnum = seqnum;
@@ -1427,7 +1426,6 @@ gst_qtdemux_do_seek (GstQTDemux * qtdemux, GstPad * pad, GstEvent * event)
gboolean flush;
gboolean update;
GstSegment seeksegment;
- int i;
guint32 seqnum = 0;
GstEvent *flush_event;
@@ -1504,10 +1502,6 @@ gst_qtdemux_do_seek (GstQTDemux * qtdemux, GstPad * pad, GstEvent * event)
gst_element_post_message (GST_ELEMENT_CAST (qtdemux), msg);
}
- /* restart streaming, NEWSEGMENT will be sent from the streaming thread. */
- for (i = 0; i < qtdemux->n_streams; i++)
- qtdemux->streams[i]->last_ret = GST_FLOW_OK;
-
gst_pad_start_task (qtdemux->sinkpad, (GstTaskFunction) gst_qtdemux_loop,
qtdemux->sinkpad, NULL);
@@ -1562,10 +1556,10 @@ gst_qtdemux_handle_src_event (GstPad * pad, GstObject * parent,
GstClockTime ts = gst_util_get_timestamp ();
#endif
- if (qtdemux->upstream_newsegment || qtdemux->fragmented) {
+ if (qtdemux->upstream_newsegment && qtdemux->fragmented) {
/* seek should be handled by upstream, we might need to re-download fragments */
GST_DEBUG_OBJECT (qtdemux,
- "leting upstream handle seek for smoothstreaming");
+ "let upstream handle seek for fragmented playback");
goto upstream;
}
@@ -1715,7 +1709,6 @@ _create_stream (void)
stream->time_position = 0;
stream->sample_index = -1;
stream->offset_in_sample = 0;
- stream->last_ret = GST_FLOW_OK;
stream->new_stream = TRUE;
return stream;
}
@@ -1879,10 +1872,9 @@ gst_qtdemux_reset (GstQTDemux * qtdemux, gboolean hard)
qtdemux->got_moov = FALSE;
} else if (qtdemux->mss_mode) {
for (n = 0; n < qtdemux->n_streams; n++)
- gst_qtdemux_stream_clear (qtdemux->streams[n]);
+ gst_qtdemux_stream_clear (qtdemux, qtdemux->streams[n]);
} else {
for (n = 0; n < qtdemux->n_streams; n++) {
- qtdemux->streams[n]->last_ret = GST_FLOW_OK;
qtdemux->streams[n]->sent_eos = FALSE;
qtdemux->streams[n]->segment_seqnum = 0;
qtdemux->streams[n]->time_position = 0;
@@ -2130,7 +2122,7 @@ gst_qtdemux_stbl_free (QtDemuxStream * stream)
}
static void
-gst_qtdemux_stream_clear (QtDemuxStream * stream)
+gst_qtdemux_stream_clear (GstQTDemux * qtdemux, QtDemuxStream * stream)
{
if (stream->allocator)
gst_object_unref (stream->allocator);
@@ -2154,7 +2146,6 @@ gst_qtdemux_stream_clear (QtDemuxStream * stream)
/* free stbl sub-atoms */
gst_qtdemux_stbl_free (stream);
- stream->last_ret = GST_FLOW_OK;
stream->sent_eos = FALSE;
stream->segment_index = -1;
stream->time_position = 0;
@@ -2167,12 +2158,14 @@ gst_qtdemux_stream_clear (QtDemuxStream * stream)
static void
gst_qtdemux_stream_free (GstQTDemux * qtdemux, QtDemuxStream * stream)
{
- gst_qtdemux_stream_clear (stream);
+ gst_qtdemux_stream_clear (qtdemux, stream);
if (stream->caps)
gst_caps_unref (stream->caps);
stream->caps = NULL;
- if (stream->pad)
+ if (stream->pad) {
gst_element_remove_pad (GST_ELEMENT_CAST (qtdemux), stream->pad);
+ gst_flow_combiner_remove_pad (qtdemux->flowcombiner, stream->pad);
+ }
g_free (stream);
}
@@ -3511,8 +3504,6 @@ gst_qtdemux_activate_segment (GstQTDemux * qtdemux, QtDemuxStream * stream,
stream->segment_seqnum = 0;
}
gst_pad_push_event (stream->pad, event);
- /* assume we can send more data now */
- stream->last_ret = GST_FLOW_OK;
/* clear to send tags on this pad now */
gst_qtdemux_push_tags (qtdemux, stream);
}
@@ -3817,42 +3808,12 @@ gst_qtdemux_sync_streams (GstQTDemux * demux)
* GST_FLOW_EOS: when all pads EOS or NOT_LINKED.
*/
static GstFlowReturn
-gst_qtdemux_combine_flows (GstQTDemux * demux, QtDemuxStream * stream,
- GstFlowReturn ret)
+gst_qtdemux_combine_flows (GstQTDemux * demux, GstFlowReturn ret)
{
- gint i;
- gboolean unexpected = FALSE, not_linked = TRUE;
-
GST_LOG_OBJECT (demux, "flow return: %s", gst_flow_get_name (ret));
- /* store the value */
- stream->last_ret = ret;
-
- /* any other error that is not-linked or eos can be returned right away */
- if (G_LIKELY (ret != GST_FLOW_EOS && ret != GST_FLOW_NOT_LINKED))
- goto done;
+ ret = gst_flow_combiner_update_flow (demux->flowcombiner, ret);
- /* only return NOT_LINKED if all other pads returned NOT_LINKED */
- for (i = 0; i < demux->n_streams; i++) {
- QtDemuxStream *ostream = demux->streams[i];
-
- ret = ostream->last_ret;
-
- /* no unexpected or unlinked, return */
- if (G_LIKELY (ret != GST_FLOW_EOS && ret != GST_FLOW_NOT_LINKED))
- goto done;
-
- /* we check to see if we have at least 1 unexpected or all unlinked */
- unexpected |= (ret == GST_FLOW_EOS);
- not_linked &= (ret == GST_FLOW_NOT_LINKED);
- }
-
- /* when we get here, we all have unlinked or unexpected */
- if (not_linked)
- ret = GST_FLOW_NOT_LINKED;
- else if (unexpected)
- ret = GST_FLOW_EOS;
-done:
GST_LOG_OBJECT (demux, "combined flow return: %s", gst_flow_get_name (ret));
return ret;
}
@@ -4287,7 +4248,7 @@ gst_qtdemux_loop_state_movie (GstQTDemux * qtdemux)
goto next;
/* last pushed sample was out of boundary, goto next sample */
- if (G_UNLIKELY (stream->last_ret == GST_FLOW_EOS))
+ if (G_UNLIKELY (GST_PAD_LAST_FLOW_RETURN (stream->pad) == GST_FLOW_EOS))
goto next;
if (stream->max_buffer_size == 0 || sample_size <= stream->max_buffer_size) {
@@ -4346,7 +4307,7 @@ gst_qtdemux_loop_state_movie (GstQTDemux * qtdemux)
}
/* combine flows */
- ret = gst_qtdemux_combine_flows (qtdemux, stream, ret);
+ ret = gst_qtdemux_combine_flows (qtdemux, ret);
/* ignore unlinked, we will not push on the pad anymore and we will EOS when
* we have no more data for the pad to push */
if (ret == GST_FLOW_EOS)
@@ -5121,7 +5082,7 @@ gst_qtdemux_process_adapter (GstQTDemux * demux, gboolean force)
}
/* combine flows */
- ret = gst_qtdemux_combine_flows (demux, stream, ret);
+ ret = gst_qtdemux_combine_flows (demux, ret);
} else {
/* skip this data, stream is EOS */
gst_adapter_flush (demux->adapter, demux->neededbytes);
@@ -6020,6 +5981,7 @@ gst_qtdemux_add_stream (GstQTDemux * qtdemux,
GST_DEBUG_OBJECT (qtdemux, "adding pad %s %p to qtdemux %p",
GST_OBJECT_NAME (stream->pad), stream->pad, qtdemux);
gst_element_add_pad (GST_ELEMENT_CAST (qtdemux), stream->pad);
+ gst_flow_combiner_add_pad (qtdemux->flowcombiner, stream->pad);
if (stream->pending_tags)
gst_tag_list_unref (stream->pending_tags);
@@ -6952,6 +6914,12 @@ qtdemux_parse_svq3_stsd_data (GstQTDemux * qtdemux, GNode * stsd,
fourcc = QT_FOURCC (stsd_data + 4);
data = stsd_data + 8;
+ if (size == 0) {
+ GST_WARNING_OBJECT (qtdemux, "Atom of size 0 found, aborting "
+ "svq3 atom parsing");
+ goto end;
+ }
+
switch (fourcc) {
case FOURCC_gama:{
if (size == 12) {
@@ -7170,6 +7138,93 @@ bad_data:
return 0;
}
+static gboolean
+qtdemux_parse_transformation_matrix (GstQTDemux * qtdemux,
+ GstByteReader * reader, guint32 * matrix, const gchar * atom)
+{
+ /*
+ * 9 values of 32 bits (fixed point 16.16, except 2 5 and 8 that are 2.30)
+ * [0 1 2]
+ * [3 4 5]
+ * [6 7 8]
+ */
+
+ if (gst_byte_reader_get_remaining (reader) < 36)
+ return FALSE;
+
+ matrix[0] = gst_byte_reader_get_uint32_be_unchecked (reader);
+ matrix[1] = gst_byte_reader_get_uint32_be_unchecked (reader);
+ matrix[2] = gst_byte_reader_get_uint32_be_unchecked (reader);
+ matrix[3] = gst_byte_reader_get_uint32_be_unchecked (reader);
+ matrix[4] = gst_byte_reader_get_uint32_be_unchecked (reader);
+ matrix[5] = gst_byte_reader_get_uint32_be_unchecked (reader);
+ matrix[6] = gst_byte_reader_get_uint32_be_unchecked (reader);
+ matrix[7] = gst_byte_reader_get_uint32_be_unchecked (reader);
+ matrix[8] = gst_byte_reader_get_uint32_be_unchecked (reader);
+
+ GST_DEBUG_OBJECT (qtdemux, "Transformation matrix from atom %s", atom);
+ GST_DEBUG_OBJECT (qtdemux, "%u.%u %u.%u %u.%u", matrix[0] >> 16,
+ matrix[0] & 0xFFFF, matrix[1] >> 16, matrix[1] & 0xFF, matrix[2] >> 16,
+ matrix[2] & 0xFF);
+ GST_DEBUG_OBJECT (qtdemux, "%u.%u %u.%u %u.%u", matrix[3] >> 16,
+ matrix[3] & 0xFFFF, matrix[4] >> 16, matrix[4] & 0xFF, matrix[5] >> 16,
+ matrix[5] & 0xFF);
+ GST_DEBUG_OBJECT (qtdemux, "%u.%u %u.%u %u.%u", matrix[6] >> 16,
+ matrix[6] & 0xFFFF, matrix[7] >> 16, matrix[7] & 0xFF, matrix[8] >> 16,
+ matrix[8] & 0xFF);
+
+ return TRUE;
+}
+
+static void
+qtdemux_inspect_transformation_matrix (GstQTDemux * qtdemux,
+ QtDemuxStream * stream, guint32 * matrix, GstTagList ** taglist)
+{
+
+/* [a b c]
+ * [d e f]
+ * [g h i]
+ *
+ * This macro will only compare value abdegh, it expects cfi to have already
+ * been checked
+ */
+#define QTCHECK_MATRIX(m,a,b,d,e,g,h) ((m)[0] == (a << 16) && (m)[1] == (b << 16) && \
+ (m)[3] == (d << 16) && (m)[4] == (e << 16) && \
+ (m)[6] == (g << 16) && (m)[7] == (h << 16))
+
+ /* only handle the cases where the last column has standard values */
+ if (matrix[2] == 0 && matrix[5] == 0 && matrix[8] == 1 << 30) {
+ const gchar *rotation_tag = NULL;
+
+ /* no rotation needed */
+ if (QTCHECK_MATRIX (matrix, 1, 0, 0, 1, 0, 0)) {
+ /* NOP */
+ } else if (QTCHECK_MATRIX (matrix, 0, 1, G_MAXUINT16, 0,
+ stream->display_height, 0)) {
+ rotation_tag = "rotate-90";
+ } else if (QTCHECK_MATRIX (matrix, G_MAXUINT16, 0, 0, G_MAXUINT16,
+ stream->display_width, stream->display_height)) {
+ rotation_tag = "rotate-180";
+ } else if (QTCHECK_MATRIX (matrix, 0, G_MAXUINT16, 1, 0, 0,
+ stream->display_width)) {
+ rotation_tag = "rotate-270";
+ } else {
+ GST_FIXME_OBJECT (qtdemux, "Unhandled transformation matrix values");
+ }
+
+ GST_DEBUG_OBJECT (qtdemux, "Transformation matrix rotation %s",
+ rotation_tag);
+ if (rotation_tag != NULL) {
+ if (*taglist == NULL)
+ *taglist = gst_tag_list_new_empty ();
+ gst_tag_list_add (*taglist, GST_TAG_MERGE_REPLACE,
+ GST_TAG_IMAGE_ORIENTATION, rotation_tag, NULL);
+ }
+ } else {
+ GST_FIXME_OBJECT (qtdemux, "Unhandled transformation matrix values");
+ }
+}
+
/* parse the traks.
* With each track we associate a new QtDemuxStream that contains all the info
* about the trak.
@@ -7380,19 +7435,27 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak)
guint32 w = 0, h = 0;
gboolean gray;
gint depth, palette_size, palette_count;
+ guint32 matrix[9];
guint32 *palette_data = NULL;
stream->sampled = TRUE;
/* version 1 uses some 64-bit ints */
- if (!gst_byte_reader_skip (&tkhd, 56 + value_size)
- || !gst_byte_reader_get_uint32_be (&tkhd, &w)
+ if (!gst_byte_reader_skip (&tkhd, 20 + value_size))
+ goto corrupt_file;
+
+ if (!qtdemux_parse_transformation_matrix (qtdemux, &tkhd, matrix, "tkhd"))
+ goto corrupt_file;
+
+ if (!gst_byte_reader_get_uint32_be (&tkhd, &w)
|| !gst_byte_reader_get_uint32_be (&tkhd, &h))
goto corrupt_file;
stream->display_width = w >> 16;
stream->display_height = h >> 16;
+ qtdemux_inspect_transformation_matrix (qtdemux, stream, matrix, &list);
+
offset = 16;
if (len < 86)
goto corrupt_file;
@@ -7496,7 +7559,8 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak)
}
if (codec) {
- list = gst_tag_list_new_empty ();
+ if (list == NULL)
+ list = gst_tag_list_new_empty ();
gst_tag_list_add (list, GST_TAG_MERGE_REPLACE,
GST_TAG_VIDEO_CODEC, codec, NULL);
g_free (codec);
@@ -8276,7 +8340,8 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak)
GstStructure *s;
gint bitrate = 0;
- list = gst_tag_list_new_empty ();
+ if (list == NULL)
+ list = gst_tag_list_new_empty ();
gst_tag_list_add (list, GST_TAG_MERGE_REPLACE,
GST_TAG_AUDIO_CODEC, codec, NULL);
g_free (codec);
@@ -8886,6 +8951,7 @@ qtdemux_expose_streams (GstQTDemux * qtdemux)
gst_pad_push_event (oldpad, gst_event_new_eos ());
gst_pad_set_active (oldpad, FALSE);
gst_element_remove_pad (GST_ELEMENT (qtdemux), oldpad);
+ gst_flow_combiner_remove_pad (qtdemux->flowcombiner, oldpad);
gst_object_unref (oldpad);
}
@@ -9728,6 +9794,9 @@ static const struct
FOURCC_loci, GST_TAG_GEO_LOCATION_NAME, NULL, qtdemux_tag_add_location}, {
FOURCC_clsf, GST_QT_DEMUX_CLASSIFICATION_TAG, NULL,
qtdemux_tag_add_classification}, {
+ FOURCC__mak, GST_TAG_DEVICE_MANUFACTURER, NULL, qtdemux_tag_add_str}, {
+ FOURCC__mod, GST_TAG_DEVICE_MODEL, NULL, qtdemux_tag_add_str}, {
+ FOURCC__swr, GST_TAG_APPLICATION_NAME, NULL, qtdemux_tag_add_str}, {
/* This is a special case, some tags are stored in this
* 'reverse dns naming', according to:
diff --git a/gst/isomp4/qtdemux.h b/gst/isomp4/qtdemux.h
index 3fe01954..47c82029 100644
--- a/gst/isomp4/qtdemux.h
+++ b/gst/isomp4/qtdemux.h
@@ -23,6 +23,7 @@
#include <gst/gst.h>
#include <gst/base/gstadapter.h>
+#include <gst/base/gstflowcombiner.h>
G_BEGIN_DECLS
@@ -64,6 +65,8 @@ struct _GstQTDemux {
gint n_audio_streams;
gint n_sub_streams;
+ GstFlowCombiner *flowcombiner;
+
gboolean have_group_id;
guint group_id;
diff --git a/gst/matroska/matroska-demux.c b/gst/matroska/matroska-demux.c
index 7fa71590..63ecfe1b 100644
--- a/gst/matroska/matroska-demux.c
+++ b/gst/matroska/matroska-demux.c
@@ -190,6 +190,7 @@ gst_matroska_demux_finalize (GObject * object)
GstMatroskaDemux *demux = GST_MATROSKA_DEMUX (object);
gst_matroska_read_common_finalize (&demux->common);
+ gst_flow_combiner_free (demux->flowcombiner);
G_OBJECT_CLASS (parent_class)->finalize (object);
}
@@ -266,44 +267,7 @@ gst_matroska_demux_init (GstMatroskaDemux * demux)
/* finish off */
gst_matroska_demux_reset (GST_ELEMENT (demux));
-}
-
-/*
- * Returns the aggregated GstFlowReturn.
- */
-static GstFlowReturn
-gst_matroska_demux_combine_flows (GstMatroskaDemux * demux,
- GstMatroskaTrackContext * track, GstFlowReturn ret)
-{
- guint i;
-
- /* store the value */
- track->last_flow = ret;
-
- /* any other error that is not-linked can be returned right away */
- if (ret != GST_FLOW_NOT_LINKED)
- goto done;
-
- /* only return NOT_LINKED if all other pads returned NOT_LINKED */
- g_assert (demux->common.src->len == demux->common.num_streams);
- for (i = 0; i < demux->common.src->len; i++) {
- GstMatroskaTrackContext *ostream = g_ptr_array_index (demux->common.src,
- i);
-
- if (ostream == NULL)
- continue;
-
- ret = ostream->last_flow;
- /* some other return value (must be SUCCESS but we can return
- * other values as well) */
- if (ret != GST_FLOW_NOT_LINKED)
- goto done;
- }
- /* if we get here, all other pads were unlinked and we return
- * NOT_LINKED then */
-done:
- GST_LOG_OBJECT (demux, "combined return %s", gst_flow_get_name (ret));
- return ret;
+ demux->flowcombiner = gst_flow_combiner_new ();
}
static void
@@ -459,7 +423,6 @@ gst_matroska_demux_add_stream (GstMatroskaDemux * demux, GstEbmlRead * ebml)
context->flags =
GST_MATROSKA_TRACK_ENABLED | GST_MATROSKA_TRACK_DEFAULT |
GST_MATROSKA_TRACK_LACING;
- context->last_flow = GST_FLOW_OK;
context->from_time = GST_CLOCK_TIME_NONE;
context->from_offset = -1;
context->to_offset = G_MAXINT64;
@@ -1271,6 +1234,7 @@ gst_matroska_demux_add_stream (GstMatroskaDemux * demux, GstEbmlRead * ebml)
gst_pad_set_caps (context->pad, context->caps);
gst_element_add_pad (GST_ELEMENT (demux), context->pad);
+ gst_flow_combiner_add_pad (demux->flowcombiner, context->pad);
g_free (padname);
@@ -2555,7 +2519,7 @@ gst_matroska_demux_push_stream_headers (GstMatroskaDemux * demux,
stream->stream_headers = NULL;
/* combine flows */
- ret = gst_matroska_demux_combine_flows (demux, stream, ret);
+ ret = gst_flow_combiner_update_flow (demux->flowcombiner, ret);
return ret;
}
@@ -3657,7 +3621,7 @@ gst_matroska_demux_parse_blockgroup_or_simpleblock (GstMatroskaDemux * demux,
}
}
/* combine flows */
- ret = gst_matroska_demux_combine_flows (demux, stream, ret);
+ ret = gst_flow_combiner_update_flow (demux->flowcombiner, ret);
next_lace:
size -= lace_size[n];
@@ -3683,7 +3647,7 @@ eos:
stream->eos = TRUE;
ret = GST_FLOW_OK;
/* combine flows */
- ret = gst_matroska_demux_combine_flows (demux, stream, ret);
+ ret = gst_flow_combiner_update_flow (demux->flowcombiner, ret);
goto done;
}
invalid_lacing:
diff --git a/gst/matroska/matroska-demux.h b/gst/matroska/matroska-demux.h
index 4453fe8f..36a686da 100644
--- a/gst/matroska/matroska-demux.h
+++ b/gst/matroska/matroska-demux.h
@@ -24,6 +24,7 @@
#define __GST_MATROSKA_DEMUX_H__
#include <gst/gst.h>
+#include <gst/base/gstflowcombiner.h>
#include "ebml-read.h"
#include "matroska-ids.h"
@@ -58,6 +59,8 @@ typedef struct _GstMatroskaDemux {
guint group_id;
gboolean have_group_id;
+ GstFlowCombiner *flowcombiner;
+
/* state */
gboolean streaming;
guint level_up;
diff --git a/gst/matroska/matroska-ids.h b/gst/matroska/matroska-ids.h
index f7eea2b5..68a68d40 100644
--- a/gst/matroska/matroska-ids.h
+++ b/gst/matroska/matroska-ids.h
@@ -497,7 +497,6 @@ struct _GstMatroskaTrackContext {
GstPad *pad;
GstCaps *caps;
guint index;
- GstFlowReturn last_flow;
/* reverse playback */
GstClockTime from_time;
gint64 from_offset;
diff --git a/gst/matroska/matroska-parse.c b/gst/matroska/matroska-parse.c
index c53bcf3f..4d3cb421 100644
--- a/gst/matroska/matroska-parse.c
+++ b/gst/matroska/matroska-parse.c
@@ -299,7 +299,6 @@ gst_matroska_parse_add_stream (GstMatroskaParse * parse, GstEbmlRead * ebml)
context->flags =
GST_MATROSKA_TRACK_ENABLED | GST_MATROSKA_TRACK_DEFAULT |
GST_MATROSKA_TRACK_LACING;
- context->last_flow = GST_FLOW_OK;
context->to_offset = G_MAXINT64;
context->alignment = 1;
parse->common.num_streams++;
diff --git a/gst/matroska/matroska-read-common.c b/gst/matroska/matroska-read-common.c
index ae5ea463..73381baf 100644
--- a/gst/matroska/matroska-read-common.c
+++ b/gst/matroska/matroska-read-common.c
@@ -1213,7 +1213,7 @@ gst_matroska_read_common_parse_header (GstMatroskaReadCommon * common,
if (num != GST_EBML_VERSION) {
GST_ERROR_OBJECT (ebml, "Unsupported EBML version %" G_GUINT64_FORMAT,
num);
- return GST_FLOW_ERROR;
+ goto exit_error;
}
GST_DEBUG_OBJECT (ebml, "EbmlReadVersion: %" G_GUINT64_FORMAT, num);
@@ -2959,8 +2959,6 @@ gst_matroska_read_common_reset_streams (GstMatroskaReadCommon * common,
context->set_discont = TRUE;
context->eos = FALSE;
context->from_time = GST_CLOCK_TIME_NONE;
- if (full)
- context->last_flow = GST_FLOW_OK;
if (context->type == GST_MATROSKA_TRACK_TYPE_VIDEO) {
GstMatroskaTrackVideoContext *videocontext =
(GstMatroskaTrackVideoContext *) context;
diff --git a/gst/multipart/multipartdemux.c b/gst/multipart/multipartdemux.c
index 7ba880c6..a62c2a06 100644
--- a/gst/multipart/multipartdemux.c
+++ b/gst/multipart/multipartdemux.c
@@ -188,6 +188,8 @@ gst_multipart_demux_init (GstMultipartDemux * multipart)
multipart->header_completed = FALSE;
multipart->scanpos = 0;
multipart->singleStream = DEFAULT_SINGLE_STREAM;
+ multipart->have_group_id = FALSE;
+ multipart->group_id = G_MAXUINT;
}
static void
@@ -296,6 +298,8 @@ gst_multipart_find_pad_by_mime (GstMultipartDemux * demux, gchar * mime,
gchar *name;
const gchar *capsname;
GstCaps *caps;
+ gchar *stream_id;
+ GstEvent *event;
mppad = g_new0 (GstMultipartPad, 1);
@@ -316,17 +320,42 @@ gst_multipart_find_pad_by_mime (GstMultipartDemux * demux, gchar * mime,
demux->srcpads = g_slist_prepend (demux->srcpads, mppad);
demux->numpads++;
+ gst_pad_use_fixed_caps (pad);
+ gst_pad_set_active (pad, TRUE);
+ gst_element_add_pad (GST_ELEMENT_CAST (demux), pad);
+
+ /* prepare and send stream-start */
+ if (!demux->have_group_id) {
+ event = gst_pad_get_sticky_event (demux->sinkpad,
+ GST_EVENT_STREAM_START, 0);
+
+ if (event) {
+ demux->have_group_id =
+ gst_event_parse_group_id (event, &demux->group_id);
+ gst_event_unref (event);
+ } else if (!demux->have_group_id) {
+ demux->have_group_id = TRUE;
+ demux->group_id = gst_util_group_id_next ();
+ }
+ }
+
+ stream_id = gst_pad_create_stream_id (pad,
+ GST_ELEMENT_CAST (demux), demux->mime_type);
+
+ event = gst_event_new_stream_start (stream_id);
+ if (demux->have_group_id)
+ gst_event_set_group_id (event, demux->group_id);
+
+ gst_pad_push_event (pad, event);
+ g_free (stream_id);
+
/* take the mime type, convert it to the caps name */
capsname = gst_multipart_demux_get_gstname (demux, mime);
caps = gst_caps_from_string (capsname);
GST_DEBUG_OBJECT (demux, "caps for pad: %s", capsname);
- gst_pad_use_fixed_caps (pad);
- gst_pad_set_active (pad, TRUE);
gst_pad_set_caps (pad, caps);
gst_caps_unref (caps);
- gst_element_add_pad (GST_ELEMENT_CAST (demux), pad);
-
if (created) {
*created = TRUE;
}
@@ -592,6 +621,9 @@ gst_multipart_demux_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
if (G_UNLIKELY (datalen <= 0)) {
GST_DEBUG_OBJECT (multipart, "skipping empty content.");
gst_adapter_flush (adapter, size - datalen);
+ } else if (G_UNLIKELY (!multipart->mime_type)) {
+ GST_DEBUG_OBJECT (multipart, "content has no MIME type.");
+ gst_adapter_flush (adapter, size - datalen);
} else {
GstClockTime ts;
@@ -677,6 +709,8 @@ gst_multipart_demux_change_state (GstElement * element,
multipart->content_length = -1;
multipart->scanpos = 0;
gst_multipart_demux_remove_src_pads (multipart);
+ multipart->have_group_id = FALSE;
+ multipart->group_id = G_MAXUINT;
break;
case GST_STATE_CHANGE_READY_TO_NULL:
break;
diff --git a/gst/multipart/multipartdemux.h b/gst/multipart/multipartdemux.h
index 4db33c26..cb81a83d 100644
--- a/gst/multipart/multipartdemux.h
+++ b/gst/multipart/multipartdemux.h
@@ -87,6 +87,10 @@ struct _GstMultipartDemux
gint scanpos;
gboolean singleStream;
+
+ /* to handle stream-start */
+ gboolean have_group_id;
+ guint group_id;
};
struct _GstMultipartDemuxClass
diff --git a/gst/rtp/gstrtpdvpay.c b/gst/rtp/gstrtpdvpay.c
index d779f123..db75cf65 100644
--- a/gst/rtp/gstrtpdvpay.c
+++ b/gst/rtp/gstrtpdvpay.c
@@ -300,7 +300,12 @@ gst_rtp_dv_pay_handle_buffer (GstRTPBasePayload * basepayload,
max_payload_size = ((GST_RTP_BASE_PAYLOAD_MTU (rtpdvpay) - hdrlen) / 80) * 80;
/* The length of the buffer to transmit. */
- gst_buffer_map (buffer, &map, GST_MAP_READ);
+ if (!gst_buffer_map (buffer, &map, GST_MAP_READ)) {
+ GST_ELEMENT_ERROR (rtpdvpay, CORE, FAILED,
+ (NULL), ("Failed to map buffer"));
+ gst_buffer_unref (buffer);
+ return GST_FLOW_ERROR;
+ }
data = map.data;
size = map.size;
@@ -327,7 +332,13 @@ gst_rtp_dv_pay_handle_buffer (GstRTPBasePayload * basepayload,
outbuf = gst_rtp_buffer_new_allocate (max_payload_size, 0, 0);
GST_BUFFER_TIMESTAMP (outbuf) = GST_BUFFER_TIMESTAMP (buffer);
- gst_rtp_buffer_map (outbuf, GST_MAP_WRITE, &rtp);
+ if (!gst_rtp_buffer_map (outbuf, GST_MAP_WRITE, &rtp)) {
+ gst_buffer_unref (outbuf);
+ GST_ELEMENT_ERROR (rtpdvpay, CORE, FAILED,
+ (NULL), ("Failed to map RTP buffer"));
+ ret = GST_FLOW_ERROR;
+ goto beach;
+ }
dest = gst_rtp_buffer_get_payload (&rtp);
filled = 0;
}
@@ -368,6 +379,8 @@ gst_rtp_dv_pay_handle_buffer (GstRTPBasePayload * basepayload,
outbuf = NULL;
}
}
+
+beach:
gst_buffer_unmap (buffer, &map);
gst_buffer_unref (buffer);
diff --git a/gst/rtp/gstrtpg729pay.c b/gst/rtp/gstrtpg729pay.c
index 898bcd12..306e1757 100644
--- a/gst/rtp/gstrtpg729pay.c
+++ b/gst/rtp/gstrtpg729pay.c
@@ -204,6 +204,17 @@ gst_rtp_g729_pay_push (GstRTPG729Pay * rtpg729pay,
return ret;
}
+static GstFlowReturn
+gst_rtp_g729_pay_push_and_free (GstRTPG729Pay * rtpg729pay,
+ guint8 * data, guint payload_len)
+{
+ GstFlowReturn ret;
+
+ ret = gst_rtp_g729_pay_push (rtpg729pay, data, payload_len);
+ g_free (data);
+ return ret;
+}
+
static void
gst_rtp_g729_pay_recalc_rtp_time (GstRTPG729Pay * rtpg729pay, GstClockTime time)
{
@@ -309,7 +320,7 @@ gst_rtp_g729_pay_handle_buffer (GstRTPBasePayload * payload, GstBuffer * buf)
if (GST_BUFFER_IS_DISCONT (buf)) {
/* flush remainder */
if (available > 0) {
- gst_rtp_g729_pay_push (rtpg729pay,
+ gst_rtp_g729_pay_push_and_free (rtpg729pay,
gst_adapter_take (adapter, available), available);
available = 0;
}
@@ -354,7 +365,7 @@ gst_rtp_g729_pay_handle_buffer (GstRTPBasePayload * payload, GstBuffer * buf)
(available / G729_FRAME_SIZE) * G729_FRAME_SIZE);
}
- ret = gst_rtp_g729_pay_push (rtpg729pay,
+ ret = gst_rtp_g729_pay_push_and_free (rtpg729pay,
gst_adapter_take (adapter, payload_len), payload_len);
available -= payload_len;
}
diff --git a/gst/rtp/gstrtpgstpay.c b/gst/rtp/gstrtpgstpay.c
index 016cefe9..c0a9d94d 100644
--- a/gst/rtp/gstrtpgstpay.c
+++ b/gst/rtp/gstrtpgstpay.c
@@ -257,12 +257,13 @@ gst_rtp_gst_pay_change_state (GstElement * element, GstStateChange transition)
return ret;
}
+#define RTP_HEADER_LEN 12
static gboolean
gst_rtp_gst_pay_create_from_adapter (GstRtpGSTPay * rtpgstpay,
GstClockTime timestamp)
{
- guint avail;
+ guint avail, mtu;
guint frag_offset;
GstBufferList *list;
@@ -270,7 +271,9 @@ gst_rtp_gst_pay_create_from_adapter (GstRtpGSTPay * rtpgstpay,
if (avail == 0)
return FALSE;
- list = gst_buffer_list_new ();
+ mtu = GST_RTP_BASE_PAYLOAD_MTU (rtpgstpay);
+
+ list = gst_buffer_list_new_sized ((avail / (mtu - (RTP_HEADER_LEN + 8))) + 1);
frag_offset = 0;
while (avail) {
@@ -287,7 +290,7 @@ gst_rtp_gst_pay_create_from_adapter (GstRtpGSTPay * rtpgstpay,
packet_len = gst_rtp_buffer_calc_packet_len (8 + avail, 0, 0);
/* fill one MTU or all available bytes */
- towrite = MIN (packet_len, GST_RTP_BASE_PAYLOAD_MTU (rtpgstpay));
+ towrite = MIN (packet_len, mtu);
/* this is the payload length */
payload_len = gst_rtp_buffer_calc_payload_len (towrite, 0, 0);
diff --git a/gst/rtp/gstrtph263pay.c b/gst/rtp/gstrtph263pay.c
index a9672ec1..4de0fabd 100644
--- a/gst/rtp/gstrtph263pay.c
+++ b/gst/rtp/gstrtph263pay.c
@@ -958,7 +958,7 @@ gst_rtp_h263_pay_B_mbfinder (GstRtpH263PayContext * context,
GST_DEBUG ("MCBPC index: %d", mb_type_index);
if (mb_type_index == -1) {
GST_ERROR ("MB index shouldn't be -1 in window: %08x", context->window);
- return NULL;
+ goto beach;
}
mac->ebit =
@@ -977,7 +977,7 @@ gst_rtp_h263_pay_B_mbfinder (GstRtpH263PayContext * context,
GST_DEBUG ("CBPY index: %d", cbpy_type_index);
if (cbpy_type_index == -1) {
GST_ERROR ("CBPY index shouldn't be -1 in window: %08x", context->window);
- return NULL;
+ goto beach;
}
mac->ebit =
@@ -1018,7 +1018,7 @@ gst_rtp_h263_pay_B_mbfinder (GstRtpH263PayContext * context,
if (tcoef_type_index == -1) {
GST_ERROR ("TCOEF index shouldn't be -1 in window: %08x",
context->window);
- return NULL;
+ goto beach;
}
mac->ebit =
gst_rtp_h263_pay_move_window_right (context,
@@ -1069,7 +1069,7 @@ gst_rtp_h263_pay_B_mbfinder (GstRtpH263PayContext * context,
GST_DEBUG ("MCBPC index: %d", mb_type_index);
if (mb_type_index == -1) {
GST_ERROR ("MB index shouldn't be -1 in window: %08x", context->window);
- return NULL;
+ goto beach;
}
mac->ebit =
gst_rtp_h263_pay_move_window_right (context, mcbpc_P[mb_type_index][2],
@@ -1087,7 +1087,7 @@ gst_rtp_h263_pay_B_mbfinder (GstRtpH263PayContext * context,
GST_DEBUG ("CBPY index: %d", cbpy_type_index);
if (cbpy_type_index == -1) {
GST_ERROR ("CBPY index shouldn't be -1 in window: %08x", context->window);
- return NULL;
+ goto beach;
}
mac->ebit =
gst_rtp_h263_pay_move_window_right (context, cbpy_P[cbpy_type_index][2],
@@ -1121,7 +1121,7 @@ gst_rtp_h263_pay_B_mbfinder (GstRtpH263PayContext * context,
if (mvd_type == -1) {
GST_ERROR ("MVD1-4 index shouldn't be -1 in window: %08x",
context->window);
- return NULL;
+ goto beach;
}
//set the MB mvd values
mac->mvd[j] = mvd[mvd_type][3];
@@ -1166,7 +1166,7 @@ gst_rtp_h263_pay_B_mbfinder (GstRtpH263PayContext * context,
if (tcoef_type_index == -1) {
GST_ERROR ("TCOEF index shouldn't be -1 in window: %08x",
context->window);
- return NULL;
+ goto beach;
}
mac->ebit =
@@ -1193,6 +1193,10 @@ gst_rtp_h263_pay_B_mbfinder (GstRtpH263PayContext * context,
mac->length = mac->end - mac->start + 1;
return mac;
+
+beach:
+ gst_rtp_h263_pay_mb_destroy (mac);
+ return NULL;
}
static GstRtpH263PayMB *
@@ -1709,7 +1713,8 @@ gst_rtp_h263_pay_flush (GstRtpH263Pay * rtph263pay)
if (!gst_rtp_h263_pay_mode_B_fragment (rtph263pay, context,
context->gobs[i])) {
GST_ERROR ("There was an error fragmenting in mode B");
- return GST_FLOW_ERROR;
+ ret = GST_FLOW_ERROR;
+ goto end;
}
} else {
//IMPLEMENT C mode
diff --git a/gst/rtp/gstrtph264depay.c b/gst/rtp/gstrtph264depay.c
index a7b52bda..586cf734 100644
--- a/gst/rtp/gstrtph264depay.c
+++ b/gst/rtp/gstrtph264depay.c
@@ -944,7 +944,11 @@ gst_rtp_h264_depay_process (GstRTPBaseDepayload * depayload, GstBuffer * buf)
memcpy (map.data + sizeof (sync_bytes), payload, nalu_size);
gst_buffer_unmap (outbuf, &map);
- gst_adapter_push (rtph264depay->adapter, outbuf);
+ outbuf =
+ gst_rtp_h264_depay_handle_nal (rtph264depay, outbuf, timestamp,
+ marker);
+ if (outbuf)
+ gst_adapter_push (rtph264depay->adapter, outbuf);
payload += nalu_size;
payload_len -= nalu_size;
diff --git a/gst/rtp/gstrtph264pay.c b/gst/rtp/gstrtph264pay.c
index 5fb15ceb..3d835aeb 100644
--- a/gst/rtp/gstrtph264pay.c
+++ b/gst/rtp/gstrtph264pay.c
@@ -166,6 +166,8 @@ gst_rtp_h264_pay_init (GstRtpH264Pay * rtph264pay)
(GDestroyNotify) gst_buffer_unref);
rtph264pay->last_spspps = -1;
rtph264pay->spspps_interval = DEFAULT_CONFIG_INTERVAL;
+ rtph264pay->delta_unit = FALSE;
+ rtph264pay->discont = FALSE;
rtph264pay->adapter = gst_adapter_new ();
}
@@ -704,7 +706,8 @@ gst_rtp_h264_pay_decode_nal (GstRtpH264Pay * payloader,
static GstFlowReturn
gst_rtp_h264_pay_payload_nal (GstRTPBasePayload * basepayload,
- GstBuffer * paybuf, GstClockTime dts, GstClockTime pts, gboolean end_of_au);
+ GstBuffer * paybuf, GstClockTime dts, GstClockTime pts, gboolean end_of_au,
+ gboolean delta_unit, gboolean discont);
static GstFlowReturn
gst_rtp_h264_pay_send_sps_pps (GstRTPBasePayload * basepayload,
@@ -721,7 +724,7 @@ gst_rtp_h264_pay_send_sps_pps (GstRTPBasePayload * basepayload,
GST_DEBUG_OBJECT (rtph264pay, "inserting SPS in the stream");
/* resend SPS */
ret = gst_rtp_h264_pay_payload_nal (basepayload, gst_buffer_ref (sps_buf),
- dts, pts, FALSE);
+ dts, pts, FALSE, FALSE, FALSE);
/* Not critical here; but throw a warning */
if (ret != GST_FLOW_OK) {
sent_all_sps_pps = FALSE;
@@ -735,7 +738,7 @@ gst_rtp_h264_pay_send_sps_pps (GstRTPBasePayload * basepayload,
GST_DEBUG_OBJECT (rtph264pay, "inserting PPS in the stream");
/* resend PPS */
ret = gst_rtp_h264_pay_payload_nal (basepayload, gst_buffer_ref (pps_buf),
- dts, pts, FALSE);
+ dts, pts, FALSE, FALSE, FALSE);
/* Not critical here; but throw a warning */
if (ret != GST_FLOW_OK) {
sent_all_sps_pps = FALSE;
@@ -749,9 +752,15 @@ gst_rtp_h264_pay_send_sps_pps (GstRTPBasePayload * basepayload,
return ret;
}
+/* @delta_unit: if %FALSE the first packet sent won't have the
+ * GST_BUFFER_FLAG_DELTA_UNIT flag.
+ * @discont: if %TRUE the first packet sent will have the
+ * GST_BUFFER_FLAG_DISCONT flag.
+ */
static GstFlowReturn
gst_rtp_h264_pay_payload_nal (GstRTPBasePayload * basepayload,
- GstBuffer * paybuf, GstClockTime dts, GstClockTime pts, gboolean end_of_au)
+ GstBuffer * paybuf, GstClockTime dts, GstClockTime pts, gboolean end_of_au,
+ gboolean delta_unit, gboolean discont)
{
GstRtpH264Pay *rtph264pay;
GstFlowReturn ret;
@@ -824,12 +833,11 @@ gst_rtp_h264_pay_payload_nal (GstRTPBasePayload * basepayload,
packet_len = gst_rtp_buffer_calc_packet_len (size, 0, 0);
if (packet_len < mtu) {
+ /* will fit in one packet */
GST_DEBUG_OBJECT (basepayload,
"NAL Unit fit in one packet datasize=%d mtu=%d", size, mtu);
- /* will fit in one packet */
- /* use buffer lists
- * create buffer without payload containing only the RTP header
+ /* create buffer without payload containing only the RTP header
* (memory block at index 0) */
outbuf = gst_rtp_buffer_new_allocate (0, 0, 0);
@@ -844,18 +852,25 @@ gst_rtp_h264_pay_payload_nal (GstRTPBasePayload * basepayload,
GST_BUFFER_PTS (outbuf) = pts;
GST_BUFFER_DTS (outbuf) = dts;
- /* insert payload memory block */
- outbuf = gst_buffer_append (outbuf, paybuf);
-
- list = gst_buffer_list_new ();
+ if (!delta_unit)
+ /* Only the first packet sent should not have the flag */
+ delta_unit = TRUE;
+ else
+ GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DELTA_UNIT);
- /* add the buffer to the buffer list */
- gst_buffer_list_add (list, outbuf);
+ if (discont) {
+ GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT);
+ /* Only the first packet sent should have the flag */
+ discont = FALSE;
+ }
gst_rtp_buffer_unmap (&rtp);
- /* push the list to the next element in the pipe */
- ret = gst_rtp_base_payload_push_list (basepayload, list);
+ /* insert payload memory block */
+ outbuf = gst_buffer_append (outbuf, paybuf);
+
+ /* push the buffer to the next element */
+ ret = gst_rtp_base_payload_push (basepayload, outbuf);
} else {
/* fragmentation Units FU-A */
guint limitedSize;
@@ -875,7 +890,7 @@ gst_rtp_h264_pay_payload_nal (GstRTPBasePayload * basepayload,
/* We keep 2 bytes for FU indicator and FU Header */
payload_len = gst_rtp_buffer_calc_payload_len (mtu - 2, 0, 0);
- list = gst_buffer_list_new ();
+ list = gst_buffer_list_new_sized ((size / payload_len) + 1);
while (end == 0) {
limitedSize = size < payload_len ? size : payload_len;
@@ -915,6 +930,18 @@ gst_rtp_h264_pay_payload_nal (GstRTPBasePayload * basepayload,
gst_buffer_copy_region (paybuf, GST_BUFFER_COPY_MEMORY, pos,
limitedSize));
+ if (!delta_unit)
+ /* Only the first packet sent should not have the flag */
+ delta_unit = TRUE;
+ else
+ GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DELTA_UNIT);
+
+ if (discont) {
+ GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT);
+ /* Only the first packet sent should have the flag */
+ discont = FALSE;
+ }
+
/* add the buffer to the buffer list */
gst_buffer_list_add (list, outbuf);
@@ -946,6 +973,8 @@ gst_rtp_h264_pay_handle_buffer (GstRTPBasePayload * basepayload,
gboolean avc;
GstBuffer *paybuf = NULL;
gsize skip;
+ gboolean delayed_not_delta_unit = FALSE;
+ gboolean delayed_discont = FALSE;
rtph264pay = GST_RTP_H264_PAY (basepayload);
@@ -962,11 +991,34 @@ gst_rtp_h264_pay_handle_buffer (GstRTPBasePayload * basepayload,
size = map.size;
pts = GST_BUFFER_PTS (buffer);
dts = GST_BUFFER_DTS (buffer);
+ rtph264pay->delta_unit = GST_BUFFER_FLAG_IS_SET (buffer,
+ GST_BUFFER_FLAG_DELTA_UNIT);
+ rtph264pay->discont = GST_BUFFER_IS_DISCONT (buffer);
GST_DEBUG_OBJECT (basepayload, "got %" G_GSIZE_FORMAT " bytes", size);
} else {
dts = gst_adapter_prev_dts (rtph264pay->adapter, NULL);
pts = gst_adapter_prev_pts (rtph264pay->adapter, NULL);
if (buffer) {
+ if (!GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DELTA_UNIT)) {
+ if (gst_adapter_available (rtph264pay->adapter) == 0)
+ rtph264pay->delta_unit = FALSE;
+ else
+ /* This buffer contains a key frame but the adapter isn't empty. So
+ * we'll purge it first by sending a first packet and then the second
+ * one won't have the DELTA_UNIT flag. */
+ delayed_not_delta_unit = TRUE;
+ }
+
+ if (GST_BUFFER_IS_DISCONT (buffer)) {
+ if (gst_adapter_available (rtph264pay->adapter) == 0)
+ rtph264pay->discont = TRUE;
+ else
+ /* This buffer has the DISCONT flag but the adapter isn't empty. So
+ * we'll purge it first by sending a first packet and then the second
+ * one will have the DISCONT flag set. */
+ delayed_discont = TRUE;
+ }
+
if (!GST_CLOCK_TIME_IS_VALID (dts))
dts = GST_BUFFER_DTS (buffer);
if (!GST_CLOCK_TIME_IS_VALID (pts))
@@ -1030,7 +1082,16 @@ gst_rtp_h264_pay_handle_buffer (GstRTPBasePayload * basepayload,
nal_len);
ret =
gst_rtp_h264_pay_payload_nal (basepayload, paybuf, dts, pts,
- end_of_au);
+ end_of_au, rtph264pay->delta_unit, rtph264pay->discont);
+
+ if (!rtph264pay->delta_unit)
+ /* Only the first outgoing packet doesn't have the DELTA_UNIT flag */
+ rtph264pay->delta_unit = TRUE;
+
+ if (rtph264pay->discont)
+ /* Only the first outgoing packet have the DISCONT flag */
+ rtph264pay->discont = FALSE;
+
if (ret != GST_FLOW_OK)
break;
@@ -1161,7 +1222,24 @@ gst_rtp_h264_pay_handle_buffer (GstRTPBasePayload * basepayload,
/* put the data in one or more RTP packets */
ret =
gst_rtp_h264_pay_payload_nal (basepayload, paybuf, dts, pts,
- end_of_au);
+ end_of_au, rtph264pay->delta_unit, rtph264pay->discont);
+
+ if (delayed_not_delta_unit) {
+ rtph264pay->delta_unit = FALSE;
+ delayed_not_delta_unit = FALSE;
+ } else {
+ /* Only the first outgoing packet doesn't have the DELTA_UNIT flag */
+ rtph264pay->delta_unit = TRUE;
+ }
+
+ if (delayed_discont) {
+ rtph264pay->discont = TRUE;
+ delayed_discont = FALSE;
+ } else {
+ /* Only the first outgoing packet have the DISCONT flag */
+ rtph264pay->discont = FALSE;
+ }
+
if (ret != GST_FLOW_OK) {
break;
}
diff --git a/gst/rtp/gstrtph264pay.h b/gst/rtp/gstrtph264pay.h
index e1f6c7f1..44f7af44 100644
--- a/gst/rtp/gstrtph264pay.h
+++ b/gst/rtp/gstrtph264pay.h
@@ -74,6 +74,11 @@ struct _GstRtpH264Pay
guint spspps_interval;
gboolean send_spspps;
GstClockTime last_spspps;
+
+ /* TRUE if the next NALU processed should have the DELTA_UNIT flag */
+ gboolean delta_unit;
+ /* TRUE if the next NALU processed should have the DISCONT flag */
+ gboolean discont;
};
struct _GstRtpH264PayClass
diff --git a/gst/rtp/gstrtpj2kpay.c b/gst/rtp/gstrtpj2kpay.c
index 6cefc314..98880b29 100644
--- a/gst/rtp/gstrtpj2kpay.c
+++ b/gst/rtp/gstrtpj2kpay.c
@@ -353,11 +353,11 @@ gst_rtp_j2k_pay_handle_buffer (GstRTPBasePayload * basepayload,
state.next_sot = 0;
state.force_packet = FALSE;
- list = gst_buffer_list_new ();
-
/* get max packet length */
max_size = gst_rtp_buffer_calc_payload_len (mtu - HEADER_SIZE, 0, 0);
+ list = gst_buffer_list_new_sized ((mtu / max_size) + 1);
+
do {
GstBuffer *outbuf;
guint8 *header;
diff --git a/gst/rtp/gstrtpjpegpay.c b/gst/rtp/gstrtpjpegpay.c
index 227d8ddb..3e820a08 100644
--- a/gst/rtp/gstrtpjpegpay.c
+++ b/gst/rtp/gstrtpjpegpay.c
@@ -662,6 +662,8 @@ gst_rtp_jpeg_pay_scan_marker (const guint8 * data, guint size, guint * offset)
}
}
+#define RTP_HEADER_LEN 12
+
static GstFlowReturn
gst_rtp_jpeg_pay_handle_buffer (GstRTPBasePayload * basepayload,
GstBuffer * buffer)
@@ -678,7 +680,7 @@ gst_rtp_jpeg_pay_handle_buffer (GstRTPBasePayload * basepayload,
GstMapInfo map;
guint8 *data;
gsize size;
- guint mtu;
+ guint mtu, max_payload_size;
guint bytes_left;
guint jpeg_header_size = 0;
guint offset;
@@ -686,6 +688,7 @@ gst_rtp_jpeg_pay_handle_buffer (GstRTPBasePayload * basepayload,
gboolean sos_found, sof_found, dqt_found, dri_found;
gint i;
GstBufferList *list = NULL;
+ gboolean discont;
pay = GST_RTP_JPEG_PAY (basepayload);
mtu = GST_RTP_BASE_PAYLOAD_MTU (pay);
@@ -695,6 +698,7 @@ gst_rtp_jpeg_pay_handle_buffer (GstRTPBasePayload * basepayload,
size = map.size;
timestamp = GST_BUFFER_TIMESTAMP (buffer);
offset = 0;
+ discont = GST_BUFFER_IS_DISCONT (buffer);
GST_LOG_OBJECT (pay, "got buffer size %" G_GSIZE_FORMAT
" , timestamp %" GST_TIME_FORMAT, size, GST_TIME_ARGS (timestamp));
@@ -802,13 +806,14 @@ gst_rtp_jpeg_pay_handle_buffer (GstRTPBasePayload * basepayload,
GST_LOG_OBJECT (pay, "quant_data size %u", quant_data_size);
- list = gst_buffer_list_new ();
-
bytes_left = sizeof (jpeg_header) + quant_data_size + size;
if (dri_found)
bytes_left += sizeof (restart_marker_header);
+ max_payload_size = mtu - (RTP_HEADER_LEN + sizeof (jpeg_header));
+ list = gst_buffer_list_new_sized ((bytes_left / max_payload_size) + 1);
+
frame_done = FALSE;
do {
GstBuffer *outbuf;
@@ -892,6 +897,12 @@ gst_rtp_jpeg_pay_handle_buffer (GstRTPBasePayload * basepayload,
GST_BUFFER_TIMESTAMP (outbuf) = timestamp;
+ if (discont) {
+ GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT);
+ /* Only the first outputted buffer has the DISCONT flag */
+ discont = FALSE;
+ }
+
/* and add to list */
gst_buffer_list_insert (list, -1, outbuf);
diff --git a/gst/rtp/gstrtpmp4gpay.c b/gst/rtp/gstrtpmp4gpay.c
index 7913d9ab..e374e5cd 100644
--- a/gst/rtp/gstrtpmp4gpay.c
+++ b/gst/rtp/gstrtpmp4gpay.c
@@ -543,6 +543,12 @@ gst_rtp_mp4g_pay_flush (GstRtpMP4GPay * rtpmp4gpay)
rtpmp4gpay->offset += rtpmp4gpay->frame_len;
}
+ if (rtpmp4gpay->discont) {
+ GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT);
+ /* Only the first outputted buffer has the DISCONT flag */
+ rtpmp4gpay->discont = FALSE;
+ }
+
ret = gst_rtp_base_payload_push (GST_RTP_BASE_PAYLOAD (rtpmp4gpay), outbuf);
avail -= payload_len;
@@ -563,6 +569,7 @@ gst_rtp_mp4g_pay_handle_buffer (GstRTPBasePayload * basepayload,
rtpmp4gpay->first_timestamp = GST_BUFFER_TIMESTAMP (buffer);
rtpmp4gpay->first_duration = GST_BUFFER_DURATION (buffer);
+ rtpmp4gpay->discont = GST_BUFFER_IS_DISCONT (buffer);
/* we always encode and flush a full AU */
gst_adapter_push (rtpmp4gpay->adapter, buffer);
diff --git a/gst/rtp/gstrtpmp4gpay.h b/gst/rtp/gstrtpmp4gpay.h
index fed9c930..7506fad9 100644
--- a/gst/rtp/gstrtpmp4gpay.h
+++ b/gst/rtp/gstrtpmp4gpay.h
@@ -47,6 +47,7 @@ struct _GstRtpMP4GPay
GstAdapter *adapter;
GstClockTime first_timestamp;
GstClockTime first_duration;
+ gboolean discont;
GstClockTime duration;
guint64 offset;
diff --git a/gst/rtp/gstrtpmp4vpay.c b/gst/rtp/gstrtpmp4vpay.c
index 8ac6d061..56cf9f73 100644
--- a/gst/rtp/gstrtpmp4vpay.c
+++ b/gst/rtp/gstrtpmp4vpay.c
@@ -223,10 +223,12 @@ gst_rtp_mp4v_pay_empty (GstRtpMP4VPay * rtpmp4vpay)
gst_adapter_clear (rtpmp4vpay->adapter);
}
+#define RTP_HEADER_LEN 12
+
static GstFlowReturn
gst_rtp_mp4v_pay_flush (GstRtpMP4VPay * rtpmp4vpay)
{
- guint avail;
+ guint avail, mtu;
GstBuffer *outbuf;
GstBuffer *outbuf_data = NULL;
GstFlowReturn ret;
@@ -248,12 +250,12 @@ gst_rtp_mp4v_pay_flush (GstRtpMP4VPay * rtpmp4vpay)
if (!avail)
return GST_FLOW_OK;
- ret = GST_FLOW_OK;
+ mtu = GST_RTP_BASE_PAYLOAD_MTU (rtpmp4vpay);
/* Use buffer lists. Each frame will be put into a list
* of buffers and the whole list will be pushed downstream
* at once */
- list = gst_buffer_list_new ();
+ list = gst_buffer_list_new_sized ((avail / (mtu - RTP_HEADER_LEN)) + 1);
while (avail > 0) {
guint towrite;
@@ -265,7 +267,7 @@ gst_rtp_mp4v_pay_flush (GstRtpMP4VPay * rtpmp4vpay)
packet_len = gst_rtp_buffer_calc_packet_len (avail, 0, 0);
/* fill one MTU or all available bytes */
- towrite = MIN (packet_len, GST_RTP_BASE_PAYLOAD_MTU (rtpmp4vpay));
+ towrite = MIN (packet_len, mtu);
/* this is the payload length */
payload_len = gst_rtp_buffer_calc_payload_len (towrite, 0, 0);
diff --git a/gst/rtp/gstrtptheoradepay.c b/gst/rtp/gstrtptheoradepay.c
index 39c8d2ac..ccfe12db 100644
--- a/gst/rtp/gstrtptheoradepay.c
+++ b/gst/rtp/gstrtptheoradepay.c
@@ -570,19 +570,16 @@ gst_rtp_theora_depay_process (GstRTPBaseDepayload * depayload, GstBuffer * buf)
break;
}
- g_free (to_free);
-
if (rtptheoradepay->needs_keyframe)
goto request_keyframe;
+out:
+no_output:
+
gst_rtp_buffer_unmap (&rtp);
+ g_free (to_free);
return NULL;
-no_output:
- {
- gst_rtp_buffer_unmap (&rtp);
- return NULL;
- }
/* ERORRS */
switch_failed:
{
@@ -599,8 +596,7 @@ packet_short:
ignore_reserved:
{
GST_WARNING_OBJECT (rtptheoradepay, "reserved TDT ignored");
- gst_rtp_buffer_unmap (&rtp);
- return NULL;
+ goto out;
}
length_short:
{
@@ -621,8 +617,7 @@ request_config:
gst_event_new_custom (GST_EVENT_CUSTOM_UPSTREAM,
gst_structure_new ("GstForceKeyUnit",
"all-headers", G_TYPE_BOOLEAN, TRUE, NULL)));
- gst_rtp_buffer_unmap (&rtp);
- return NULL;
+ goto out;
}
request_keyframe:
{
@@ -630,8 +625,7 @@ request_keyframe:
gst_pad_push_event (GST_RTP_BASE_DEPAYLOAD_SINKPAD (depayload),
gst_event_new_custom (GST_EVENT_CUSTOM_UPSTREAM,
gst_structure_new_empty ("GstForceKeyUnit")));
- gst_rtp_buffer_unmap (&rtp);
- return NULL;
+ goto out;
}
}
diff --git a/gst/rtp/gstrtpvp8depay.c b/gst/rtp/gstrtpvp8depay.c
index 7cc4504a..40f3375e 100644
--- a/gst/rtp/gstrtpvp8depay.c
+++ b/gst/rtp/gstrtpvp8depay.c
@@ -106,7 +106,7 @@ gst_rtp_vp8_depay_process (GstRTPBaseDepayload * depay, GstBuffer * buf)
GstRtpVP8Depay *self = GST_RTP_VP8_DEPAY (depay);
GstBuffer *payload;
guint8 *data;
- guint offset;
+ guint hdrsize;
guint size;
GstRTPBuffer rtpbuffer = GST_RTP_BUFFER_INIT;
@@ -134,31 +134,32 @@ gst_rtp_vp8_depay_process (GstRTPBaseDepayload * depay, GstBuffer * buf)
self->started = TRUE;
}
- offset = 1;
+ hdrsize = 1;
/* Check X optional header */
if ((data[0] & 0x80) != 0) {
- offset++;
+ hdrsize++;
/* Check I optional header */
if ((data[1] & 0x80) != 0) {
- offset++;
- if (G_UNLIKELY (offset + 2 >= size))
+ if (G_UNLIKELY (size < 3))
goto too_small;
+ hdrsize++;
/* Check for 16 bits PictureID */
if ((data[2] & 0x80) != 0)
- offset++;
+ hdrsize++;
}
/* Check L optional header */
if ((data[1] & 0x40) != 0)
- offset++;
+ hdrsize++;
/* Check T or K optional headers */
if ((data[1] & 0x20) != 0 || (data[1] & 0x10) != 0)
- offset++;
+ hdrsize++;
}
+ GST_DEBUG_OBJECT (depay, "hdrsize %u, size %u", hdrsize, size);
- if (G_UNLIKELY (offset >= size))
+ if (G_UNLIKELY (hdrsize >= size))
goto too_small;
- payload = gst_rtp_buffer_get_payload_subbuffer (&rtpbuffer, offset, -1);
+ payload = gst_rtp_buffer_get_payload_subbuffer (&rtpbuffer, hdrsize, -1);
gst_adapter_push (self->adapter, payload);
/* Marker indicates that it was the last rtp packet for this frame */
diff --git a/gst/rtp/gstrtpvp8pay.c b/gst/rtp/gstrtpvp8pay.c
index 47837819..f3ad8455 100644
--- a/gst/rtp/gstrtpvp8pay.c
+++ b/gst/rtp/gstrtpvp8pay.c
@@ -171,12 +171,13 @@ gst_rtp_vp8_pay_get_property (GObject * object,
}
static gboolean
-gst_rtp_vp8_pay_parse_frame (GstRtpVP8Pay * self, GstBuffer * buffer)
+gst_rtp_vp8_pay_parse_frame (GstRtpVP8Pay * self, GstBuffer * buffer,
+ gsize buffer_size)
{
- GstBitReader *reader = NULL;
+ GstMapInfo map = GST_MAP_INFO_INIT;
+ GstBitReader reader;
guint8 *data;
gsize size;
- GstMapInfo map;
int i;
gboolean keyframe;
guint32 partition0_size;
@@ -187,7 +188,7 @@ gst_rtp_vp8_pay_parse_frame (GstRtpVP8Pay * self, GstBuffer * buffer)
BOOL_DECODER bc;
guint8 *pdata;
- if (G_UNLIKELY (gst_buffer_get_size (buffer) < 3))
+ if (G_UNLIKELY (buffer_size < 3))
goto error;
if (!gst_buffer_map (buffer, &map, GST_MAP_READ) || !map.data)
@@ -195,7 +196,8 @@ gst_rtp_vp8_pay_parse_frame (GstRtpVP8Pay * self, GstBuffer * buffer)
data = map.data;
size = map.size;
- reader = gst_bit_reader_new (data, size);
+
+ gst_bit_reader_init (&reader, data, size);
self->is_keyframe = keyframe = ((data[0] & 0x1) == 0);
version = (data[0] >> 1) & 0x7;
@@ -212,22 +214,22 @@ gst_rtp_vp8_pay_parse_frame (GstRtpVP8Pay * self, GstBuffer * buffer)
offset = keyframe ? 10 : 3;
partition0_size += offset;
- if (!gst_bit_reader_skip (reader, 24))
+ if (!gst_bit_reader_skip (&reader, 24))
goto error;
if (keyframe) {
/* check start tag: 0x9d 0x01 0x2a */
- if (!gst_bit_reader_get_bits_uint8 (reader, &tmp8, 8) || tmp8 != 0x9d)
+ if (!gst_bit_reader_get_bits_uint8 (&reader, &tmp8, 8) || tmp8 != 0x9d)
goto error;
- if (!gst_bit_reader_get_bits_uint8 (reader, &tmp8, 8) || tmp8 != 0x01)
+ if (!gst_bit_reader_get_bits_uint8 (&reader, &tmp8, 8) || tmp8 != 0x01)
goto error;
- if (!gst_bit_reader_get_bits_uint8 (reader, &tmp8, 8) || tmp8 != 0x2a)
+ if (!gst_bit_reader_get_bits_uint8 (&reader, &tmp8, 8) || tmp8 != 0x2a)
goto error;
/* Skip horizontal size code (16 bits) vertical size code (16 bits) */
- if (!gst_bit_reader_skip (reader, 32))
+ if (!gst_bit_reader_skip (&reader, 32))
goto error;
}
@@ -332,14 +334,12 @@ gst_rtp_vp8_pay_parse_frame (GstRtpVP8Pay * self, GstBuffer * buffer)
self->partition_offset[i + 1] = size;
- gst_bit_reader_free (reader);
gst_buffer_unmap (buffer, &map);
return TRUE;
error:
GST_DEBUG ("Failed to parse frame");
- if (reader) {
- gst_bit_reader_free (reader);
+ if (map.memory != NULL) {
gst_buffer_unmap (buffer, &map);
}
return FALSE;
@@ -373,16 +373,7 @@ gst_rtp_vp8_calc_header_len (GstRtpVP8Pay * self)
}
}
-static gsize
-gst_rtp_vp8_calc_payload_len (GstRtpVP8Pay * self)
-{
- GstRTPBasePayload *payload = GST_RTP_BASE_PAYLOAD (self);
-
- return gst_rtp_buffer_calc_payload_len (GST_RTP_BASE_PAYLOAD_MTU (payload) -
- gst_rtp_vp8_calc_header_len (self), 0, 0);
-}
-
-/* When growing the vp8 header keep gst_rtp_vp8_calc_payload_len in sync */
+/* When growing the vp8 header keep max payload len calculation in sync */
static GstBuffer *
gst_rtp_vp8_create_header_buffer (GstRtpVP8Pay * self, guint8 partid,
gboolean start, gboolean mark, GstBuffer * in)
@@ -423,8 +414,8 @@ gst_rtp_vp8_create_header_buffer (GstRtpVP8Pay * self, guint8 partid,
static guint
-gst_rtp_vp8_payload_next (GstRtpVP8Pay * self,
- GstBufferList * list, guint offset, GstBuffer * buffer)
+gst_rtp_vp8_payload_next (GstRtpVP8Pay * self, GstBufferList * list,
+ guint offset, GstBuffer * buffer, gsize buffer_size, gsize max_payload_len)
{
guint partition;
GstBuffer *header;
@@ -434,8 +425,8 @@ gst_rtp_vp8_payload_next (GstRtpVP8Pay * self,
gsize remaining;
gsize available;
- remaining = gst_buffer_get_size (buffer) - offset;
- available = gst_rtp_vp8_calc_payload_len (self);
+ remaining = buffer_size - offset;
+ available = max_payload_len;
if (available > remaining)
available = remaining;
@@ -462,17 +453,28 @@ gst_rtp_vp8_pay_handle_buffer (GstRTPBasePayload * payload, GstBuffer * buffer)
GstRtpVP8Pay *self = GST_RTP_VP8_PAY (payload);
GstFlowReturn ret;
GstBufferList *list;
- guint offset;
+ gsize size, max_paylen;
+ guint offset, mtu, vp8_hdr_len;
+
+ size = gst_buffer_get_size (buffer);
- if (G_UNLIKELY (!gst_rtp_vp8_pay_parse_frame (self, buffer))) {
- g_message ("Failed to parse frame");
+ if (G_UNLIKELY (!gst_rtp_vp8_pay_parse_frame (self, buffer, size))) {
+ GST_ELEMENT_ERROR (self, STREAM, ENCODE, (NULL),
+ ("Failed to parse VP8 frame"));
return GST_FLOW_ERROR;
}
- list = gst_buffer_list_new ();
+ mtu = GST_RTP_BASE_PAYLOAD_MTU (payload);
+ vp8_hdr_len = gst_rtp_vp8_calc_header_len (self);
+ max_paylen = gst_rtp_buffer_calc_payload_len (mtu - vp8_hdr_len, 0, 0);
- for (offset = 0; offset < gst_buffer_get_size (buffer);)
- offset += gst_rtp_vp8_payload_next (self, list, offset, buffer);
+ list = gst_buffer_list_new_sized ((size / max_paylen) + 1);
+
+ offset = 0;
+ while (offset < size) {
+ offset +=
+ gst_rtp_vp8_payload_next (self, list, offset, buffer, size, max_paylen);
+ }
ret = gst_rtp_base_payload_push_list (payload, list);
diff --git a/gst/rtp/gstrtpvrawpay.c b/gst/rtp/gstrtpvrawpay.c
index cade1786..c03c8d2f 100644
--- a/gst/rtp/gstrtpvrawpay.c
+++ b/gst/rtp/gstrtpvrawpay.c
@@ -27,6 +27,13 @@
#include "gstrtpvrawpay.h"
+enum
+{
+ PROP_CHUNKS_PER_FRAME = 1
+};
+
+#define DEFAULT_CHUNKS_PER_FRAME 10
+
GST_DEBUG_CATEGORY_STATIC (rtpvrawpay_debug);
#define GST_CAT_DEFAULT (rtpvrawpay_debug)
@@ -70,6 +77,10 @@ static gboolean gst_rtp_vraw_pay_setcaps (GstRTPBasePayload * payload,
GstCaps * caps);
static GstFlowReturn gst_rtp_vraw_pay_handle_buffer (GstRTPBasePayload *
payload, GstBuffer * buffer);
+static void gst_rtp_vraw_pay_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec);
+static void gst_rtp_vraw_pay_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec);
G_DEFINE_TYPE (GstRtpVRawPay, gst_rtp_vraw_pay, GST_TYPE_RTP_BASE_PAYLOAD)
@@ -77,10 +88,23 @@ G_DEFINE_TYPE (GstRtpVRawPay, gst_rtp_vraw_pay, GST_TYPE_RTP_BASE_PAYLOAD)
{
GstRTPBasePayloadClass *gstrtpbasepayload_class;
GstElementClass *gstelement_class;
+ GObjectClass *gobject_class;
+ gobject_class = (GObjectClass *) klass;
gstelement_class = (GstElementClass *) klass;
gstrtpbasepayload_class = (GstRTPBasePayloadClass *) klass;
+ gobject_class->set_property = gst_rtp_vraw_pay_set_property;
+ gobject_class->get_property = gst_rtp_vraw_pay_get_property;
+
+ g_object_class_install_property (gobject_class,
+ PROP_CHUNKS_PER_FRAME,
+ g_param_spec_int ("chunks-per-frame", "Chunks per Frame",
+ "Split and send out each frame in multiple chunks to reduce overhead",
+ 1, G_MAXINT, DEFAULT_CHUNKS_PER_FRAME,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)
+ );
+
gstrtpbasepayload_class->set_caps = gst_rtp_vraw_pay_setcaps;
gstrtpbasepayload_class->handle_buffer = gst_rtp_vraw_pay_handle_buffer;
@@ -101,6 +125,7 @@ G_DEFINE_TYPE (GstRtpVRawPay, gst_rtp_vraw_pay, GST_TYPE_RTP_BASE_PAYLOAD)
static void
gst_rtp_vraw_pay_init (GstRtpVRawPay * rtpvrawpay)
{
+ rtpvrawpay->chunks_per_frame = DEFAULT_CHUNKS_PER_FRAME;
}
static gboolean
@@ -111,7 +136,6 @@ gst_rtp_vraw_pay_setcaps (GstRTPBasePayload * payload, GstCaps * caps)
gint pgroup, xinc, yinc;
const gchar *depthstr, *samplingstr, *colorimetrystr;
gchar *wstr, *hstr;
- gint depth;
GstVideoInfo info;
rtpvrawpay = GST_RTP_VRAW_PAY (payload);
@@ -138,7 +162,6 @@ gst_rtp_vraw_pay_setcaps (GstRTPBasePayload * payload, GstCaps * caps)
/* these values are the only thing we can do */
depthstr = "8";
- depth = 8;
switch (GST_VIDEO_INFO_FORMAT (&info)) {
case GST_VIDEO_FORMAT_RGBA:
@@ -180,7 +203,6 @@ gst_rtp_vraw_pay_setcaps (GstRTPBasePayload * payload, GstCaps * caps)
samplingstr = "YCbCr-4:2:2";
pgroup = 5;
xinc = 2;
- depth = 10;
depthstr = "10";
break;
default:
@@ -195,7 +217,6 @@ gst_rtp_vraw_pay_setcaps (GstRTPBasePayload * payload, GstCaps * caps)
rtpvrawpay->pgroup = pgroup;
rtpvrawpay->xinc = xinc;
rtpvrawpay->yinc = yinc;
- rtpvrawpay->depth = depth;
GST_DEBUG_OBJECT (payload, "width %d, height %d, sampling %s",
GST_VIDEO_INFO_WIDTH (&info), GST_VIDEO_INFO_HEIGHT (&info), samplingstr);
@@ -239,15 +260,24 @@ gst_rtp_vraw_pay_handle_buffer (GstRTPBasePayload * payload, GstBuffer * buffer)
{
GstRtpVRawPay *rtpvrawpay;
GstFlowReturn ret = GST_FLOW_OK;
+ gfloat packets_per_packline;
+ guint pgroups_per_packet;
+ guint packlines_per_list, buffers_per_list;
+ guint lines_delay; /* after how many packed lines we push out a buffer list */
+ guint last_line; /* last pack line number we pushed out a buffer list */
guint line, offset;
guint8 *p0, *yp, *up, *vp;
guint ystride, uvstride;
+ guint xinc, yinc;
guint pgroup;
guint mtu;
guint width, height;
- gint field;
+ gint field, fields;
+ GstVideoFormat format;
GstVideoFrame frame;
gint interlaced;
+ gboolean use_buffer_lists;
+ GstBufferList *list = NULL;
GstRTPBuffer rtp = { NULL, };
rtpvrawpay = GST_RTP_VRAW_PAY (payload);
@@ -275,17 +305,40 @@ gst_rtp_vraw_pay_handle_buffer (GstRTPBasePayload * payload, GstBuffer * buffer)
interlaced = GST_VIDEO_INFO_IS_INTERLACED (&rtpvrawpay->vinfo);
+ format = GST_VIDEO_INFO_FORMAT (&rtpvrawpay->vinfo);
+
+ yinc = rtpvrawpay->yinc;
+ xinc = rtpvrawpay->xinc;
+
+ /* after how many packed lines we push out a buffer list */
+ lines_delay = GST_ROUND_UP_4 (height / rtpvrawpay->chunks_per_frame);
+
+ /* calculate how many buffers we expect to store in a single buffer list */
+ pgroups_per_packet = (mtu - (12 + 14)) / pgroup;
+ packets_per_packline = width / (xinc * pgroups_per_packet * 1.0);
+ packlines_per_list = height / (yinc * rtpvrawpay->chunks_per_frame);
+ buffers_per_list = packlines_per_list * packets_per_packline;
+ buffers_per_list = GST_ROUND_UP_8 (buffers_per_list);
+
+ use_buffer_lists = (rtpvrawpay->chunks_per_frame < (height / yinc));
+
+ fields = 1 + interlaced;
+
/* start with line 0, offset 0 */
- for (field = 0; field < 1 + interlaced; field++) {
+ for (field = 0; field < fields; field++) {
line = field;
offset = 0;
+ last_line = 0;
+
+ if (use_buffer_lists)
+ list = gst_buffer_list_new_sized (buffers_per_list);
/* write all lines */
while (line < height) {
- guint left;
+ guint left, pack_line;
GstBuffer *out;
guint8 *outdata, *headers;
- gboolean next_line;
+ gboolean next_line, complete = FALSE;
guint length, cont, pixels;
/* get the max allowed payload length size, we try to fill the complete MTU */
@@ -345,7 +398,7 @@ gst_rtp_vraw_pay_handle_buffer (GstRTPBasePayload * payload, GstBuffer * buffer)
/* get how may bytes we need for the remaining pixels */
pixels = width - offset;
- length = (pixels * pgroup) / rtpvrawpay->xinc;
+ length = (pixels * pgroup) / xinc;
if (left >= length) {
/* pixels and header fit completely, we will write them and skip to the
@@ -353,8 +406,8 @@ gst_rtp_vraw_pay_handle_buffer (GstRTPBasePayload * payload, GstBuffer * buffer)
next_line = TRUE;
} else {
/* line does not fit completely, see how many pixels fit */
- pixels = (left / pgroup) * rtpvrawpay->xinc;
- length = (pixels * pgroup) / rtpvrawpay->xinc;
+ pixels = (left / pgroup) * xinc;
+ length = (pixels * pgroup) / xinc;
next_line = FALSE;
}
GST_LOG_OBJECT (rtpvrawpay, "filling %u bytes in %u pixels", length,
@@ -371,7 +424,7 @@ gst_rtp_vraw_pay_handle_buffer (GstRTPBasePayload * payload, GstBuffer * buffer)
if (next_line) {
/* go to next line we do this here to make the check below easier */
- line += rtpvrawpay->yinc;
+ line += yinc;
}
/* calculate continuation marker */
@@ -412,14 +465,14 @@ gst_rtp_vraw_pay_handle_buffer (GstRTPBasePayload * payload, GstBuffer * buffer)
"writing length %u, line %u, offset %u, cont %d", length, lin, offs,
cont);
- switch (GST_VIDEO_INFO_FORMAT (&rtpvrawpay->vinfo)) {
+ switch (format) {
case GST_VIDEO_FORMAT_RGB:
case GST_VIDEO_FORMAT_RGBA:
case GST_VIDEO_FORMAT_BGR:
case GST_VIDEO_FORMAT_BGRA:
case GST_VIDEO_FORMAT_UYVY:
case GST_VIDEO_FORMAT_UYVP:
- offs /= rtpvrawpay->xinc;
+ offs /= xinc;
memcpy (outdata, p0 + (lin * ystride) + (offs * pgroup), length);
outdata += length;
break;
@@ -446,8 +499,7 @@ gst_rtp_vraw_pay_handle_buffer (GstRTPBasePayload * payload, GstBuffer * buffer)
yd1p = yp + (lin * ystride) + (offs);
yd2p = yd1p + ystride;
- uvoff =
- (lin / rtpvrawpay->yinc * uvstride) + (offs / rtpvrawpay->xinc);
+ uvoff = (lin / yinc * uvstride) + (offs / xinc);
udp = up + uvoff;
vdp = vp + uvoff;
@@ -468,8 +520,7 @@ gst_rtp_vraw_pay_handle_buffer (GstRTPBasePayload * payload, GstBuffer * buffer)
guint8 *ydp, *udp, *vdp;
ydp = yp + (lin * ystride) + offs;
- uvoff =
- (lin / rtpvrawpay->yinc * uvstride) + (offs / rtpvrawpay->xinc);
+ uvoff = (lin / yinc * uvstride) + (offs / xinc);
udp = up + uvoff;
vdp = vp + uvoff;
@@ -496,6 +547,7 @@ gst_rtp_vraw_pay_handle_buffer (GstRTPBasePayload * payload, GstBuffer * buffer)
if (line >= height) {
GST_LOG_OBJECT (rtpvrawpay, "field/frame complete, set marker");
gst_rtp_buffer_set_marker (&rtp, TRUE);
+ complete = TRUE;
}
gst_rtp_buffer_unmap (&rtp);
if (left > 0) {
@@ -503,8 +555,26 @@ gst_rtp_vraw_pay_handle_buffer (GstRTPBasePayload * payload, GstBuffer * buffer)
gst_buffer_resize (out, 0, gst_buffer_get_size (out) - left);
}
- /* push buffer */
- ret = gst_rtp_base_payload_push (payload, out);
+ /* Now either push out the buffer directly */
+ if (!use_buffer_lists) {
+ ret = gst_rtp_base_payload_push (payload, out);
+ continue;
+ }
+
+ /* or add the buffer to buffer list ... */
+ gst_buffer_list_add (list, out);
+
+ /* .. and check if we need to push out the list */
+ pack_line = (line - field) / fields;
+ if (complete || (pack_line > last_line && pack_line % lines_delay == 0)) {
+ GST_LOG_OBJECT (rtpvrawpay, "pushing list of %u buffers up to pack "
+ "line %u", gst_buffer_list_length (list), pack_line);
+ ret = gst_rtp_base_payload_push_list (payload, list);
+ list = NULL;
+ if (!complete)
+ list = gst_buffer_list_new_sized (buffers_per_list);
+ last_line = pack_line;
+ }
}
}
@@ -533,6 +603,42 @@ too_small:
}
}
+static void
+gst_rtp_vraw_pay_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec)
+{
+ GstRtpVRawPay *rtpvrawpay;
+
+ rtpvrawpay = GST_RTP_VRAW_PAY (object);
+
+ switch (prop_id) {
+ case PROP_CHUNKS_PER_FRAME:
+ rtpvrawpay->chunks_per_frame = g_value_get_int (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gst_rtp_vraw_pay_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec)
+{
+ GstRtpVRawPay *rtpvrawpay;
+
+ rtpvrawpay = GST_RTP_VRAW_PAY (object);
+
+ switch (prop_id) {
+ case PROP_CHUNKS_PER_FRAME:
+ g_value_set_int (value, rtpvrawpay->chunks_per_frame);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
gboolean
gst_rtp_vraw_pay_plugin_init (GstPlugin * plugin)
{
diff --git a/gst/rtp/gstrtpvrawpay.h b/gst/rtp/gstrtpvrawpay.h
index 7cd86b8b..3fd2442d 100644
--- a/gst/rtp/gstrtpvrawpay.h
+++ b/gst/rtp/gstrtpvrawpay.h
@@ -48,11 +48,9 @@ struct _GstRtpVRawPay
gint pgroup;
gint xinc, yinc;
-// guint yp, up, vp;
-// gint ystride;
-// gint uvstride;
-// gboolean interlaced;
- gint depth;
+
+ /* properties */
+ guint chunks_per_frame;
};
struct _GstRtpVRawPayClass
diff --git a/gst/rtsp/gstrtspsrc.c b/gst/rtsp/gstrtspsrc.c
index ffb0dee1..caeed748 100644
--- a/gst/rtsp/gstrtspsrc.c
+++ b/gst/rtsp/gstrtspsrc.c
@@ -123,6 +123,7 @@ enum
SIGNAL_ON_SDP,
SIGNAL_SELECT_STREAM,
SIGNAL_NEW_MANAGER,
+ SIGNAL_REQUEST_RTCP_KEY,
LAST_SIGNAL
};
@@ -163,6 +164,12 @@ gst_rtsp_src_buffer_mode_get_type (void)
return buffer_mode_type;
}
+#define AES_128_KEY_LEN 16
+#define AES_256_KEY_LEN 32
+
+#define HMAC_32_KEY_LEN 4
+#define HMAC_80_KEY_LEN 10
+
#define DEFAULT_LOCATION NULL
#define DEFAULT_PROTOCOLS GST_RTSP_LOWER_TRANS_UDP | GST_RTSP_LOWER_TRANS_UDP_MCAST | GST_RTSP_LOWER_TRANS_TCP
#define DEFAULT_DEBUG FALSE
@@ -683,6 +690,21 @@ gst_rtspsrc_class_init (GstRTSPSrcClass * klass)
G_SIGNAL_RUN_FIRST | G_SIGNAL_RUN_CLEANUP, 0, NULL, NULL,
g_cclosure_marshal_generic, G_TYPE_NONE, 1, GST_TYPE_ELEMENT);
+ /**
+ * GstRTSPSrc::request-rtcp-key:
+ * @rtspsrc: a #GstRTSPSrc
+ * @num: the stream number
+ *
+ * Signal emited to get the crypto parameters relevant to the RTCP
+ * stream. User should provide the key and the RTCP encryption ciphers
+ * and authentication, and return them wrapped in a GstCaps.
+ *
+ * Since: 1.4
+ */
+ gst_rtspsrc_signals[SIGNAL_REQUEST_RTCP_KEY] =
+ g_signal_new ("request-rtcp-key", G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, GST_TYPE_CAPS, 1, G_TYPE_UINT);
+
gstelement_class->send_event = gst_rtspsrc_send_event;
gstelement_class->provide_clock = gst_rtspsrc_provide_clock;
gstelement_class->change_state = gst_rtspsrc_change_state;
@@ -1537,8 +1559,8 @@ gst_rtspsrc_stream_free (GstRTSPSrc * src, GstRTSPStream * stream)
gst_object_unref (stream->srtpenc);
if (stream->srtpdec)
gst_object_unref (stream->srtpdec);
- if (stream->key)
- gst_buffer_unref (stream->key);
+ if (stream->srtcpparams)
+ gst_caps_unref (stream->srtcpparams);
if (stream->rtcppad)
gst_object_unref (stream->rtcppad);
if (stream->session)
@@ -1738,6 +1760,18 @@ parse_keymgmt (const gchar * keymgmt, GstCaps * caps)
break;
}
break;
+ case GST_MIKEY_SP_SRTP_ENC_KEY_LEN:
+ switch (param->val[0]) {
+ case AES_128_KEY_LEN:
+ srtp_cipher = "aes-128-icm";
+ break;
+ case AES_256_KEY_LEN:
+ srtp_cipher = "aes-256-icm";
+ break;
+ default:
+ break;
+ }
+ break;
case GST_MIKEY_SP_SRTP_AUTH_ALG:
switch (param->val[0]) {
case 0:
@@ -1751,6 +1785,18 @@ parse_keymgmt (const gchar * keymgmt, GstCaps * caps)
break;
}
break;
+ case GST_MIKEY_SP_SRTP_AUTH_KEY_LEN:
+ switch (param->val[0]) {
+ case HMAC_32_KEY_LEN:
+ srtp_auth = "hmac-sha1-32";
+ break;
+ case HMAC_80_KEY_LEN:
+ srtp_auth = "hmac-sha1-80";
+ break;
+ default:
+ break;
+ }
+ break;
case GST_MIKEY_SP_SRTP_SRTP_ENC:
break;
case GST_MIKEY_SP_SRTP_SRTCP_ENC:
@@ -3006,12 +3052,40 @@ request_rtcp_encoder (GstElement * rtpbin, guint session,
return NULL;
if (stream->srtpenc == NULL) {
+ GstStructure *s;
+
name = g_strdup_printf ("srtpenc_%u", session);
stream->srtpenc = gst_element_factory_make ("srtpenc", name);
g_free (name);
- /* key has been made before */
- g_object_set (stream->srtpenc, "key", stream->key, NULL);
+ /* get RTCP crypto parameters from caps */
+ s = gst_caps_get_structure (stream->srtcpparams, 0);
+ if (s) {
+ GstBuffer *buf;
+ const gchar *str;
+ GType ciphertype, authtype;
+ GValue rtcp_cipher = G_VALUE_INIT, rtcp_auth = G_VALUE_INIT;
+
+ ciphertype = g_type_from_name ("GstSrtpCipherType");
+ authtype = g_type_from_name ("GstSrtpAuthType");
+ g_value_init (&rtcp_cipher, ciphertype);
+ g_value_init (&rtcp_auth, authtype);
+
+ str = gst_structure_get_string (s, "srtcp-cipher");
+ gst_value_deserialize (&rtcp_cipher, str);
+ str = gst_structure_get_string (s, "srtcp-auth");
+ gst_value_deserialize (&rtcp_auth, str);
+ gst_structure_get (s, "srtp-key", GST_TYPE_BUFFER, &buf, NULL);
+
+ g_object_set_property (G_OBJECT (stream->srtpenc), "rtcp-cipher",
+ &rtcp_cipher);
+ g_object_set_property (G_OBJECT (stream->srtpenc), "rtcp-auth",
+ &rtcp_auth);
+ g_object_set (stream->srtpenc, "key", buf, NULL);
+
+ g_value_unset (&rtcp_cipher);
+ g_value_unset (&rtcp_auth);
+ }
}
name = g_strdup_printf ("rtcp_sink_%d", session);
pad = gst_element_get_request_pad (stream->srtpenc, name);
@@ -5812,27 +5886,102 @@ failed:
}
}
+static guint8
+enc_key_length_from_cipher_name (const gchar * cipher)
+{
+ if (g_strcmp0 (cipher, "aes-128-icm") == 0)
+ return AES_128_KEY_LEN;
+ else if (g_strcmp0 (cipher, "aes-256-icm") == 0)
+ return AES_256_KEY_LEN;
+ else {
+ GST_ERROR ("encryption algorithm '%s' not supported", cipher);
+ return 0;
+ }
+}
+
+static guint8
+auth_key_length_from_auth_name (const gchar * auth)
+{
+ if (g_strcmp0 (auth, "hmac-sha1-32") == 0)
+ return HMAC_32_KEY_LEN;
+ else if (g_strcmp0 (auth, "hmac-sha1-80") == 0)
+ return HMAC_80_KEY_LEN;
+ else {
+ GST_ERROR ("authentication algorithm '%s' not supported", auth);
+ return 0;
+ }
+}
+
+static GstCaps *
+signal_get_srtcp_params (GstRTSPSrc * src, GstRTSPStream * stream)
+{
+ GstCaps *caps = NULL;
+
+ g_signal_emit (src, gst_rtspsrc_signals[SIGNAL_REQUEST_RTCP_KEY], 0,
+ stream->id, &caps);
+
+ if (caps != NULL)
+ GST_DEBUG_OBJECT (src, "SRTP parameters received");
+
+ return caps;
+}
+
+static GstCaps *
+default_srtcp_params (void)
+{
+ guint i;
+ GstCaps *caps;
+ GstBuffer *buf;
+ guint8 *key_data;
+#define KEY_SIZE 30
+
+ /* create a random key */
+ key_data = g_malloc (KEY_SIZE);
+ for (i = 0; i < KEY_SIZE; i += 4)
+ GST_WRITE_UINT32_BE (key_data + i, g_random_int ());
+
+ buf = gst_buffer_new_wrapped (key_data, KEY_SIZE);
+
+ caps = gst_caps_new_simple ("application/x-srtp",
+ "srtp-key", GST_TYPE_BUFFER, buf,
+ "srtcp-cipher", G_TYPE_STRING, "aes-128-icm",
+ "srtcp-auth", G_TYPE_STRING, "hmac-sha1-80", NULL);
+
+ return caps;
+}
+
static gchar *
gst_rtspsrc_stream_make_keymgmt (GstRTSPSrc * src, GstRTSPStream * stream)
{
GBytes *bytes;
gchar *result, *base64;
- guint8 *key_data;
const guint8 *data;
gsize size;
- guint i;
GstMIKEYMessage *msg;
GstMIKEYPayload *payload, *pkd;
guint8 byte;
-#define KEY_SIZE 30
+ GstStructure *s;
+ GstMapInfo info;
+ GstBuffer *srtpkey;
+ const GValue *val;
+ const gchar *srtcpcipher, *srtcpauth;
- key_data = g_malloc (KEY_SIZE);
- for (i = 0; i < KEY_SIZE; i += 4)
- GST_WRITE_UINT32_BE (key_data + i, g_random_int ());
+ stream->srtcpparams = signal_get_srtcp_params (src, stream);
+ if (stream->srtcpparams == NULL)
+ stream->srtcpparams = default_srtcp_params ();
+
+ s = gst_caps_get_structure (stream->srtcpparams, 0);
+
+ srtcpcipher = gst_structure_get_string (s, "srtcp-cipher");
+ srtcpauth = gst_structure_get_string (s, "srtcp-auth");
+ val = gst_structure_get_value (s, "srtp-key");
- if (stream->key)
- gst_buffer_unref (stream->key);
- stream->key = gst_buffer_new_wrapped (key_data, KEY_SIZE);
+ if (srtcpcipher == NULL || srtcpauth == NULL || val == NULL) {
+ GST_ERROR_OBJECT (src, "could not find the right SRTP parameters in caps");
+ return NULL;
+ }
+
+ srtpkey = gst_value_get_buffer (val);
msg = gst_mikey_message_new ();
/* unencrypted MIKEY message, we send this over TLS so this is allowed */
@@ -5852,9 +6001,17 @@ gst_rtspsrc_stream_make_keymgmt (GstRTSPSrc * src, GstRTSPStream * stream)
/* only AES-CM is supported */
byte = 1;
gst_mikey_payload_sp_add_param (payload, GST_MIKEY_SP_SRTP_ENC_ALG, 1, &byte);
+ /* encryption key length */
+ byte = enc_key_length_from_cipher_name (srtcpcipher);
+ gst_mikey_payload_sp_add_param (payload, GST_MIKEY_SP_SRTP_ENC_KEY_LEN, 1,
+ &byte);
/* only HMAC-SHA1 */
gst_mikey_payload_sp_add_param (payload, GST_MIKEY_SP_SRTP_AUTH_ALG, 1,
&byte);
+ /* authentication key length */
+ byte = auth_key_length_from_auth_name (srtcpauth);
+ gst_mikey_payload_sp_add_param (payload, GST_MIKEY_SP_SRTP_AUTH_KEY_LEN, 1,
+ &byte);
/* we enable encryption on RTP and RTCP */
gst_mikey_payload_sp_add_param (payload, GST_MIKEY_SP_SRTP_SRTP_ENC, 1,
&byte);
@@ -5870,8 +6027,10 @@ gst_rtspsrc_stream_make_keymgmt (GstRTSPSrc * src, GstRTSPStream * stream)
gst_mikey_payload_kemac_set (payload, GST_MIKEY_ENC_NULL, GST_MIKEY_MAC_NULL);
/* add the key in KEMAC */
pkd = gst_mikey_payload_new (GST_MIKEY_PT_KEY_DATA);
- gst_mikey_payload_key_data_set_key (pkd, GST_MIKEY_KD_TEK, KEY_SIZE,
- key_data);
+ gst_buffer_map (srtpkey, &info, GST_MAP_READ);
+ gst_mikey_payload_key_data_set_key (pkd, GST_MIKEY_KD_TEK, info.size,
+ info.data);
+ gst_buffer_unmap (srtpkey, &info);
gst_mikey_payload_kemac_add_sub (payload, pkd);
gst_mikey_message_add_payload (msg, payload);
diff --git a/gst/rtsp/gstrtspsrc.h b/gst/rtsp/gstrtspsrc.h
index f38f6fce..e90d0599 100644
--- a/gst/rtsp/gstrtspsrc.h
+++ b/gst/rtsp/gstrtspsrc.h
@@ -137,7 +137,7 @@ struct _GstRTSPStream {
guint32 seqbase;
guint64 timebase;
GstElement *srtpdec;
- GstBuffer *key;
+ GstCaps *srtcpparams;
GstElement *srtpenc;
guint32 send_ssrc;
diff --git a/gst/udp/gstdynudpsink.c b/gst/udp/gstdynudpsink.c
index 328e9020..9c2b6bbd 100644
--- a/gst/udp/gstdynudpsink.c
+++ b/gst/udp/gstdynudpsink.c
@@ -21,10 +21,6 @@
* Boston, MA 02110-1301, USA.
*/
-/* FIXME 0.11: suppress warnings for deprecated API such as GValueArray
- * with newer GLib versions (>= 2.31.0) */
-#define GLIB_DISABLE_DEPRECATION_WARNINGS
-
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
@@ -139,7 +135,8 @@ gst_dynudpsink_class_init (GstDynUDPSinkClass * klass)
gst_element_class_set_static_metadata (gstelement_class, "UDP packet sender",
"Sink/Network",
- "Send data over the network via UDP",
+ "Send data over the network via UDP with packet destinations picked up "
+ "dynamically from meta on the buffers passed",
"Philippe Khalaf <burger@speedy.org>");
gstbasesink_class->render = gst_dynudpsink_render;
@@ -267,9 +264,18 @@ gst_dynudpsink_render (GstBaseSink * bsink, GstBuffer * buffer)
send_error:
{
- GST_DEBUG ("got send error %s", err->message);
+ GstFlowReturn flow_ret;
+
+ if (g_error_matches (err, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+ GST_DEBUG_OBJECT (sink, "send cancelled");
+ flow_ret = GST_FLOW_FLUSHING;
+ } else {
+ GST_ELEMENT_ERROR (sink, RESOURCE, WRITE, (NULL),
+ ("send error: %s", err->message));
+ flow_ret = GST_FLOW_ERROR;
+ }
g_clear_error (&err);
- return GST_FLOW_ERROR;
+ return flow_ret;
}
invalid_family:
{
diff --git a/gst/udp/gstmultiudpsink.c b/gst/udp/gstmultiudpsink.c
index 988de2de..d3af62e7 100644
--- a/gst/udp/gstmultiudpsink.c
+++ b/gst/udp/gstmultiudpsink.c
@@ -29,10 +29,6 @@
* It can be combined with rtp payload encoders to implement RTP streaming.
*/
-/* FIXME 0.11: suppress warnings for deprecated API such as GValueArray
- * with newer GLib versions (>= 2.31.0) */
-#define GLIB_DISABLE_DEPRECATION_WARNINGS
-
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
@@ -356,7 +352,8 @@ gst_multiudpsink_class_init (GstMultiUDPSinkClass * klass)
gst_element_class_set_static_metadata (gstelement_class, "UDP packet sender",
"Sink/Network",
- "Send data over the network via UDP",
+ "Send data over the network via UDP to one or multiple recipients "
+ "which can be added or removed at runtime using action signals",
"Wim Taymans <wim.taymans@gmail.com>");
gstbasesink_class->render = gst_multiudpsink_render;
@@ -529,7 +526,7 @@ gst_multiudpsink_render (GstBaseSink * bsink, GstBuffer * buffer)
gint num, no_clients;
GError *err = NULL;
- sink = GST_MULTIUDPSINK (bsink);
+ sink = GST_MULTIUDPSINK_CAST (bsink);
n_mem = gst_buffer_n_memory (buffer);
if (n_mem == 0)
@@ -542,7 +539,7 @@ gst_multiudpsink_render (GstBaseSink * bsink, GstBuffer * buffer)
size = 0;
for (i = 0; i < n_mem; i++) {
- mem = gst_buffer_get_memory (buffer, i);
+ mem = gst_buffer_peek_memory (buffer, i);
gst_memory_map (mem, &map[i], GST_MAP_READ);
vec[i].buffer = map[i].data;
@@ -616,10 +613,8 @@ gst_multiudpsink_render (GstBaseSink * bsink, GstBuffer * buffer)
g_mutex_unlock (&sink->client_lock);
/* unmap all memory again */
- for (i = 0; i < n_mem; i++) {
+ for (i = 0; i < n_mem; i++)
gst_memory_unmap (map[i].memory, &map[i]);
- gst_memory_unref (map[i].memory);
- }
GST_LOG_OBJECT (sink, "sent %" G_GSIZE_FORMAT " bytes to %d (of %d) clients",
size, num, no_clients);
@@ -637,10 +632,8 @@ flushing:
g_clear_error (&err);
/* unmap all memory */
- for (i = 0; i < n_mem; i++) {
+ for (i = 0; i < n_mem; i++)
gst_memory_unmap (map[i].memory, &map[i]);
- gst_memory_unref (map[i].memory);
- }
return GST_FLOW_FLUSHING;
}
@@ -1330,9 +1323,8 @@ gst_multiudpsink_remove (GstMultiUDPSink * sink, const gchar * host, gint port)
client->refcount--;
if (client->refcount == 0) {
GInetSocketAddress *saddr = G_INET_SOCKET_ADDRESS (client->addr);
+ GSocketFamily family = g_socket_address_get_family (client->addr);
GInetAddress *addr = g_inet_socket_address_get_address (saddr);
- GSocketFamily family =
- g_socket_address_get_family (G_SOCKET_ADDRESS (saddr));
GSocket *socket;
/* Select socket to send from for this address */
diff --git a/gst/udp/gstmultiudpsink.h b/gst/udp/gstmultiudpsink.h
index a1be566b..9b126bb6 100644
--- a/gst/udp/gstmultiudpsink.h
+++ b/gst/udp/gstmultiudpsink.h
@@ -33,6 +33,7 @@ G_BEGIN_DECLS
#define GST_MULTIUDPSINK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_MULTIUDPSINK,GstMultiUDPSinkClass))
#define GST_IS_MULTIUDPSINK(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_MULTIUDPSINK))
#define GST_IS_MULTIUDPSINK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_MULTIUDPSINK))
+#define GST_MULTIUDPSINK_CAST(obj) ((GstMultiUDPSink*)(obj))
typedef struct _GstMultiUDPSink GstMultiUDPSink;
typedef struct _GstMultiUDPSinkClass GstMultiUDPSinkClass;
diff --git a/gst/videobox/gstvideobox.c b/gst/videobox/gstvideobox.c
index 5df25883..861bcaea 100644
--- a/gst/videobox/gstvideobox.c
+++ b/gst/videobox/gstvideobox.c
@@ -2862,22 +2862,27 @@ gst_video_box_transform_caps (GstBaseTransform * trans,
for (j = 0; j < gst_value_list_get_size (fval); j++) {
lval = gst_value_list_get_value (fval, j);
if ((str = g_value_get_string (lval))) {
- if (strstr (str, "RGB") || strstr (str, "BGR") ||
- strcmp (str, "AYUV") == 0)
+ if (strcmp (str, "AYUV") == 0) {
+ seen_yuv = TRUE;
+ seen_rgb = TRUE;
+ break;
+ } else if (strstr (str, "RGB") || strstr (str, "BGR")) {
seen_rgb = TRUE;
- else if (strcmp (str, "I420") == 0 || strcmp (str, "YV12") == 0 ||
- strcmp (str, "AYUV") == 0)
+ } else if (strcmp (str, "I420") == 0 || strcmp (str, "YV12") == 0) {
seen_yuv = TRUE;
+ }
}
}
} else if (fval && G_VALUE_HOLDS_STRING (fval)) {
if ((str = g_value_get_string (fval))) {
- if (strstr (str, "RGB") || strstr (str, "BGR") ||
- strcmp (str, "AYUV") == 0)
+ if (strcmp (str, "AYUV") == 0) {
+ seen_yuv = TRUE;
seen_rgb = TRUE;
- else if (strcmp (str, "I420") == 0 || strcmp (str, "YV12") == 0 ||
- strcmp (str, "AYUV") == 0)
+ } else if (strstr (str, "RGB") || strstr (str, "BGR")) {
+ seen_rgb = TRUE;
+ } else if (strcmp (str, "I420") == 0 || strcmp (str, "YV12") == 0) {
seen_yuv = TRUE;
+ }
}
}
diff --git a/gst/wavparse/gstwavparse.c b/gst/wavparse/gstwavparse.c
index e50a82d9..7e5f043b 100644
--- a/gst/wavparse/gstwavparse.c
+++ b/gst/wavparse/gstwavparse.c
@@ -1037,6 +1037,7 @@ gst_wavparse_stream_headers (GstWavParse * wav)
gchar *codec_name = NULL;
GstEvent **event_p;
gint64 upstream_size = 0;
+ GstStructure *s;
/* search for "_fmt" chunk, which should be first */
while (!wav->got_fmt) {
@@ -1107,6 +1108,15 @@ gst_wavparse_stream_headers (GstWavParse * wav)
if (!caps)
goto unknown_format;
+ /* If we got raw audio from upstream, we remove the codec_data field,
+ * which may have been added if the wav header included an extended
+ * chunk. We want to keep it for non raw audio.
+ */
+ s = gst_caps_get_structure (caps, 0);
+ if (s && gst_structure_has_name (s, "audio/x-raw")) {
+ gst_structure_remove_field (s, "codec_data");
+ }
+
/* do more sanity checks of header fields
* (these can be sanitized by gst_riff_create_audio_caps()
*/
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 689ae8f1..95cfae15 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -21,5 +21,8 @@ sys/sunaudio/gstsunaudiomixertrack.c
sys/v4l2/gstv4l2bufferpool.c
sys/v4l2/gstv4l2object.c
sys/v4l2/gstv4l2radio.c
+sys/v4l2/gstv4l2sink.c
+sys/v4l2/gstv4l2transform.c
+sys/v4l2/gstv4l2videodec.c
sys/v4l2/v4l2_calls.c
sys/ximage/gstximagesrc.c
diff --git a/po/af.gmo b/po/af.gmo
index 74c7195a..26669c6e 100644
--- a/po/af.gmo
+++ b/po/af.gmo
Binary files differ
diff --git a/po/af.po b/po/af.po
index 7dde409a..0b5b7974 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: 2014-05-21 12:10+0200\n"
+"POT-Creation-Date: 2014-06-22 17:33+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"
@@ -289,6 +289,34 @@ msgstr "Kon nie oudio-toestel \"%s\" toemaak nie."
msgid "Failed to change mute state for device '%s'."
msgstr "Kon nie buffers vanaf toestel \"%s\" verkry nie."
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr ""
+
+#, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr ""
+
+#, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr ""
+
+#, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr ""
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+msgid "Failed to start decoding thread."
+msgstr ""
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
diff --git a/po/az.gmo b/po/az.gmo
index 7233630a..f0eb9df6 100644
--- a/po/az.gmo
+++ b/po/az.gmo
Binary files differ
diff --git a/po/az.po b/po/az.po
index edf7b4fe..aebc3318 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: 2014-05-21 12:10+0200\n"
+"POT-Creation-Date: 2014-06-22 17:33+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"
@@ -290,6 +290,34 @@ msgstr "\"%s\" audio avadanlığı bağlana bilmədi."
msgid "Failed to change mute state for device '%s'."
msgstr "\"%s\" avadanlığından bufferlər alına bilmədi."
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr ""
+
+#, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr ""
+
+#, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr ""
+
+#, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr ""
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+msgid "Failed to start decoding thread."
+msgstr ""
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
diff --git a/po/bg.gmo b/po/bg.gmo
index 2c7b1187..86a6d7da 100644
--- a/po/bg.gmo
+++ b/po/bg.gmo
Binary files differ
diff --git a/po/bg.po b/po/bg.po
index cb34d69b..90b7e8c2 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: 2014-05-21 12:10+0200\n"
+"POT-Creation-Date: 2014-06-22 17:33+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"
@@ -303,6 +303,38 @@ msgstr "Неуспешно задаване на вход %d на устройс
msgid "Failed to change mute state for device '%s'."
msgstr "Неуспешно получаване на силата на сигнала на устройство „%s“."
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr "Драйверът за устройството „%s“ не поддържа познати методи за запис."
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr ""
+"Устройството за видео вход не приема новите настройки за честотата на кадри."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr ""
+"Устройството за видео вход не приема новите настройки за честотата на кадри."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr ""
+"Устройството за видео вход не приема новите настройки за честотата на кадри."
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+#, fuzzy
+msgid "Failed to start decoding thread."
+msgstr "Неуспешно декодиране на изображение, формат JPEG."
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
diff --git a/po/ca.gmo b/po/ca.gmo
index 42f33e60..d0637a1c 100644
--- a/po/ca.gmo
+++ b/po/ca.gmo
Binary files differ
diff --git a/po/ca.po b/po/ca.po
index bd5467dc..2424aaf7 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: 2014-05-21 12:10+0200\n"
+"POT-Creation-Date: 2014-06-22 17:33+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"
@@ -320,6 +320,43 @@ msgstr "No s'ha pogut establir l'entrada %d en el dispositiu %s."
msgid "Failed to change mute state for device '%s'."
msgstr "No s'ha pogut obtenir la intensitat del senyal per al dispositiu «%s»."
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr ""
+"El controlador del dispositiu «%s» no és compatible amb cap mètode de "
+"captura conegut."
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr ""
+"El dispositiu d'entrada de vídeo no ha acceptat el paràmetre nou de "
+"fotogrames per segon."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr ""
+"El dispositiu d'entrada de vídeo no ha acceptat el paràmetre nou de "
+"fotogrames per segon."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr ""
+"El dispositiu d'entrada de vídeo no ha acceptat el paràmetre nou de "
+"fotogrames per segon."
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+#, fuzzy
+msgid "Failed to start decoding thread."
+msgstr "Ha fallat en descodificar la imatge JPEG"
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
diff --git a/po/cs.gmo b/po/cs.gmo
index 3c80eb4f..451f42a2 100644
--- a/po/cs.gmo
+++ b/po/cs.gmo
Binary files differ
diff --git a/po/cs.po b/po/cs.po
index ec92e447..78c39224 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: 2014-05-21 12:10+0200\n"
+"POT-Creation-Date: 2014-06-22 17:33+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"
@@ -305,6 +305,35 @@ msgstr "Nezdařilo se nastavení vstupu %d u zařízení „%s“."
msgid "Failed to change mute state for device '%s'."
msgstr "Selhala změna stavu zapnutí/vypnutí zvuku u zařízení „%s“."
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr "Ovladač zařízení „%s“ nepodporuje V/V metodu %d"
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr "Videozařízení nepřijalo nové nastavení snímkové rychlosti."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr "Videozařízení nepřijalo nové nastavení snímkové rychlosti."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr "Videozařízení nepřijalo nové nastavení snímkové rychlosti."
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+#, fuzzy
+msgid "Failed to start decoding thread."
+msgstr "Selhalo dekódování obrázku JPEG"
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
diff --git a/po/da.gmo b/po/da.gmo
index 60f05e1c..faca88d8 100644
--- a/po/da.gmo
+++ b/po/da.gmo
Binary files differ
diff --git a/po/da.po b/po/da.po
index 96fcdc34..60da5aaf 100644
--- a/po/da.po
+++ b/po/da.po
@@ -1,19 +1,19 @@
# Danish translation of gst-plugins-good.
-# Copyright (C) 2013 gst.
+# Copyright (C) 2014 gst.
# This file is distributed under the same license as the gst-plugins-good package.
#
# Mogens Jaeger <mogens@jaeger.tf>, 2007.
-# Joe Hansen <joedalton2@yahoo.dk>, 2008, 2009, 2010, 2011, 2012, 2013.
+# Joe Hansen <joedalton2@yahoo.dk>, 2008, 2009, 2010, 2011, 2012, 2013, 2014.
#
# gain -> forhøjelse
# boost -> øgning?
#
msgid ""
msgstr ""
-"Project-Id-Version: gst-plugins-good-1.2.1\n"
+"Project-Id-Version: gst-plugins-good-1.3.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-21 12:10+0200\n"
-"PO-Revision-Date: 2013-12-08 23:54+0200\n"
+"POT-Creation-Date: 2014-06-22 17:33+0200\n"
+"PO-Revision-Date: 2014-05-24 23:54+0200\n"
"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
"Language: da\n"
@@ -248,9 +248,9 @@ msgstr "Enheden »%s« kan ikke optage med %dx%d"
msgid "Device '%s' cannot capture in the specified format"
msgstr "Enheden »%s« kan ikke optage i det angivne format"
-#, fuzzy, c-format
+#, c-format
msgid "Device '%s' does support non-contiguous planes"
-msgstr "Enheden »%s« understøtter ikke videooptagelse"
+msgstr "Enheden »%s« understøtter ikke planer, der ikke hænger sammen"
#, c-format
msgid "Could not get parameters on device '%s'"
@@ -259,30 +259,27 @@ msgstr "Kunne ikke hente parametre fra enhed »%s«"
msgid "Video device did not accept new frame rate setting."
msgstr "Videoenheden accepterede ikke ny indstilling for billedrate."
-#, fuzzy
msgid "Video device did not provide output format."
-msgstr "Videoenheden accepterede ikke ny indstilling for billedrate."
+msgstr "Videoenheden angav ikke uddataformat."
msgid "Video device returned invalid dimensions."
-msgstr ""
+msgstr "Videoenhed returnerede ugyldige dimensioner."
-#, fuzzy
+# http://en.wikipedia.org/wiki/Interlaced_video
msgid "Video devices uses an unsupported interlacing method."
-msgstr "Driveren til enhed »%s« understøtter ikke IO-metoden %d"
+msgstr "Videoenheder bruger en interlace-metode, der ikke er understøttet."
msgid "Video devices uses an unsupported pixel format."
-msgstr ""
+msgstr "Videoenheder bruger et billedpunktsformat, der ikke er understøttet."
-#, fuzzy
msgid "Failed to configure internal buffer pool."
-msgstr "Videoenhed kunne ikke oprette mellemlagerkø."
+msgstr "Kunne ikke konfigurere intern mellemlagerkø."
-#, fuzzy
msgid "Video device did not suggest any buffer size."
-msgstr "Videoenhed kunne ikke oprette mellemlagerkø."
+msgstr "Videoenhed foreslog ikke en mellemlagerstørrelse."
msgid "No downstream pool to import from."
-msgstr ""
+msgstr "Ingen nedstrømskø at importere fra."
#, c-format
msgid "Failed to get settings of tuner %d on device '%s'."
@@ -308,6 +305,35 @@ msgstr "Kunne ikke sætte inddata %d for enhed %s."
msgid "Failed to change mute state for device '%s'."
msgstr "Kunne ikke ændre tilstand for tænk/slut for enhed »%s«."
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr "Videoenheder bruger et billedpunktsformat, der ikke er understøttet."
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr "Videoenheder bruger et billedpunktsformat, der ikke er understøttet."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr "Videoenheder bruger et billedpunktsformat, der ikke er understøttet."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr "Videoenheder bruger et billedpunktsformat, der ikke er understøttet."
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+#, fuzzy
+msgid "Failed to start decoding thread."
+msgstr "Mislykkedes i at afkode JPEG-billede"
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
@@ -352,13 +378,13 @@ msgstr "Enhed »%s« er ikke en optageenhed."
msgid "Device '%s' is not a output device."
msgstr "Enhed »%s« er ikke en uddataenhed."
-#, fuzzy, c-format
+#, c-format
msgid "Device '%s' is not a M2M device."
-msgstr "Enhed »%s« er ikke en uddataenhed."
+msgstr "Enhed »%s« er ikke en M2M-enhed."
-#, fuzzy, c-format
+#, c-format
msgid "Could not dup device '%s' for reading and writing."
-msgstr "Kunne ikke tilgå enhed »%s«."
+msgstr "Kunne ikke dup enhed »%s« for læsning og skrivning."
#, c-format
msgid "Failed to set norm for device '%s'."
diff --git a/po/de.gmo b/po/de.gmo
index 5a8f4ebc..071af5b8 100644
--- a/po/de.gmo
+++ b/po/de.gmo
Binary files differ
diff --git a/po/de.po b/po/de.po
index 5bc42349..6427ed78 100644
--- a/po/de.po
+++ b/po/de.po
@@ -1,4 +1,4 @@
-# German translations for gst-plugins-good 1.1.4
+# German translations for gst-plugins-good 1.3.2
# Copyright (C) 2007 Free Software Foundation, Inc.
# This file is distributed under the same license as the gst-plugins-good package.
#
@@ -12,10 +12,10 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: gst-plugins-good 1.1.4\n"
+"Project-Id-Version: gst-plugins-good 1.3.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-21 12:10+0200\n"
-"PO-Revision-Date: 2013-09-21 12:39+0100\n"
+"POT-Creation-Date: 2014-06-22 17:33+0200\n"
+"PO-Revision-Date: 2014-05-22 17:31+0100\n"
"Last-Translator: Christian Kirbach <christian.kirbach@gmail.com>\n"
"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
"Language: de\n"
@@ -257,9 +257,9 @@ msgstr "Das Gerät »%s« kann nicht bei %dx%d aufnehmen"
msgid "Device '%s' cannot capture in the specified format"
msgstr "Das angegebene Format kann nicht vom Gerät »%s« ausgelesen werden"
-#, fuzzy, c-format
+#, c-format
msgid "Device '%s' does support non-contiguous planes"
-msgstr "Gerät »%s« unterstützt keine Videoaufnahme"
+msgstr "Gerät »%s« unterstützt getrennte Ebenen"
#, c-format
msgid "Could not get parameters on device '%s'"
@@ -270,32 +270,28 @@ msgstr ""
"Das Video-Eingabegerät akzeptierte nicht die neue Einstellung zur "
"Bildwiederholungsrate."
-#, fuzzy
msgid "Video device did not provide output format."
-msgstr ""
-"Das Video-Eingabegerät akzeptierte nicht die neue Einstellung zur "
-"Bildwiederholungsrate."
+msgstr "Das Video-Gerät gab kein Ausgabeformat an."
msgid "Video device returned invalid dimensions."
-msgstr ""
+msgstr "Das Video-Gerät gab ungültige Abmessungen zurück."
-#, fuzzy
msgid "Video devices uses an unsupported interlacing method."
-msgstr "Der Treiber von Gerät »%s« unterstützt nicht die EA-Methode %d"
+msgstr ""
+"Video-Geräte verwendet eine nicht unterstützt Methode der "
+"Zeilenverschachtelung."
msgid "Video devices uses an unsupported pixel format."
-msgstr ""
+msgstr "Das Video-Gerät verwendet ein nicht unterstütztes Pixelformat."
-#, fuzzy
msgid "Failed to configure internal buffer pool."
-msgstr "Das Videogerät konnte keinen Puffer-Pool erstellen"
+msgstr "Einrichten des internen Puffer-Pools ist fehlgeschlagen."
-#, fuzzy
msgid "Video device did not suggest any buffer size."
-msgstr "Das Videogerät konnte keinen Puffer-Pool erstellen"
+msgstr "Das Videogerät gab keine Puffer-Größe an."
msgid "No downstream pool to import from."
-msgstr ""
+msgstr "Es gibt keinen Downstream-Pool, aus dem importiert werden kann."
#, c-format
msgid "Failed to get settings of tuner %d on device '%s'."
@@ -322,6 +318,35 @@ msgstr "Festlegen der Eingabe »%d« des Geräts »%s« schlug fehl."
msgid "Failed to change mute state for device '%s'."
msgstr "Ändern des Stummzustands von Gerät »%s« schlug fehl."
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr "Das Video-Gerät verwendet ein nicht unterstütztes Pixelformat."
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr "Das Video-Gerät verwendet ein nicht unterstütztes Pixelformat."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr "Das Video-Gerät verwendet ein nicht unterstütztes Pixelformat."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr "Das Video-Gerät verwendet ein nicht unterstütztes Pixelformat."
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+#, fuzzy
+msgid "Failed to start decoding thread."
+msgstr "Dekodieren des JPEG-Bildes schlug fehl"
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
@@ -367,11 +392,11 @@ msgstr "»%s« ist kein Aufnahmegerät."
msgid "Device '%s' is not a output device."
msgstr "»%s« ist kein Wiedergabegerät."
-#, fuzzy, c-format
+#, c-format
msgid "Device '%s' is not a M2M device."
-msgstr "»%s« ist kein Wiedergabegerät."
+msgstr "Gerät »%s« ist kein M2M-Gerät."
-#, fuzzy, c-format
+#, c-format
msgid "Could not dup device '%s' for reading and writing."
msgstr "Gerät »%s« konnte nicht zum Lesen oder Schreiben geöffnet werden."
diff --git a/po/el.gmo b/po/el.gmo
index 6da46442..fee4b314 100644
--- a/po/el.gmo
+++ b/po/el.gmo
Binary files differ
diff --git a/po/el.po b/po/el.po
index 577daba1..bb7bf400 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: 2014-05-21 12:10+0200\n"
+"POT-Creation-Date: 2014-06-22 17:33+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"
@@ -303,6 +303,35 @@ msgstr "Αποτυχία ρύθμισης εισαγωγής %d στην συσ
msgid "Failed to change mute state for device '%s'."
msgstr "Αποτυχία ανάγνωσης ισχύς σήματος για την συσκευή '%s'."
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr "Ο οδηγός της συσκευής '%s' δεν υποστηρίζει κάποια γνωστή μέθοδο λήψης."
+
+#, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr ""
+
+#, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr ""
+
+#, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr ""
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+#, fuzzy
+msgid "Failed to start decoding thread."
+msgstr "Αποτυχία αποκωδικοποίησης της εικόνας JPEG"
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
diff --git a/po/en_GB.gmo b/po/en_GB.gmo
index 138dcdfe..7a6518e9 100644
--- a/po/en_GB.gmo
+++ b/po/en_GB.gmo
Binary files differ
diff --git a/po/en_GB.po b/po/en_GB.po
index f71db27a..274c54f8 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: 2014-05-21 12:10+0200\n"
+"POT-Creation-Date: 2014-06-22 17:33+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"
@@ -289,6 +289,34 @@ msgstr "Could not close audio device \"%s\"."
msgid "Failed to change mute state for device '%s'."
msgstr "Could not get buffers from device \"%s\"."
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr ""
+
+#, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr ""
+
+#, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr ""
+
+#, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr ""
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+msgid "Failed to start decoding thread."
+msgstr ""
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
diff --git a/po/eo.gmo b/po/eo.gmo
index ad7a95d9..a37dfe15 100644
--- a/po/eo.gmo
+++ b/po/eo.gmo
Binary files differ
diff --git a/po/eo.po b/po/eo.po
index 29f96c7e..1fe9d6ab 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: 2014-05-21 12:10+0200\n"
+"POT-Creation-Date: 2014-06-22 17:33+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"
@@ -285,6 +285,34 @@ msgstr ""
msgid "Failed to change mute state for device '%s'."
msgstr ""
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr ""
+
+#, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr ""
+
+#, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr ""
+
+#, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr ""
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+msgid "Failed to start decoding thread."
+msgstr ""
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
diff --git a/po/es.gmo b/po/es.gmo
index bea6c0c8..1a0ad565 100644
--- a/po/es.gmo
+++ b/po/es.gmo
Binary files differ
diff --git a/po/es.po b/po/es.po
index b3a7305f..d1e1fbf6 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: 2014-05-21 12:10+0200\n"
+"POT-Creation-Date: 2014-06-22 17:33+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"
@@ -321,6 +321,43 @@ msgstr "Falló al establecer la entrada %d en el dispositivo %s."
msgid "Failed to change mute state for device '%s'."
msgstr "Falló al obtener la potencia de la señal para el dispositivo «%s»."
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr ""
+"El controlador del dispositivo «%s» no soporta ningún método de captura "
+"conocido."
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr ""
+"El dispositivo de entrada de vídeo no aceptó el ajuste de la nueva tasa de "
+"fotogramas."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr ""
+"El dispositivo de entrada de vídeo no aceptó el ajuste de la nueva tasa de "
+"fotogramas."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr ""
+"El dispositivo de entrada de vídeo no aceptó el ajuste de la nueva tasa de "
+"fotogramas."
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+#, fuzzy
+msgid "Failed to start decoding thread."
+msgstr "Falló al decodificar la imagen JPEG"
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
diff --git a/po/eu.gmo b/po/eu.gmo
index 2529dfec..b89b2b90 100644
--- a/po/eu.gmo
+++ b/po/eu.gmo
Binary files differ
diff --git a/po/eu.po b/po/eu.po
index 2abc3e54..52303df3 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: 2014-05-21 12:10+0200\n"
+"POT-Creation-Date: 2014-06-22 17:33+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"
@@ -318,6 +318,42 @@ msgstr "Huts egin du '%2$s' gailuko %1$d. sarrera ezartzean."
msgid "Failed to change mute state for device '%s'."
msgstr "Huts egin du '%s' gailuaren seinalearen indarra eskuratzean."
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr ""
+"'%s' gailuaren kontrolatzaileak ez du onartzen kaptura-metodo ezagunik."
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr ""
+"Bideoaren sarrerako gailuak ez du fotograma-tamainaren ezarpen berria "
+"onartzen."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr ""
+"Bideoaren sarrerako gailuak ez du fotograma-tamainaren ezarpen berria "
+"onartzen."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr ""
+"Bideoaren sarrerako gailuak ez du fotograma-tamainaren ezarpen berria "
+"onartzen."
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+#, fuzzy
+msgid "Failed to start decoding thread."
+msgstr "Huts egin du JPEG irudia deskodetzean"
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
diff --git a/po/fi.gmo b/po/fi.gmo
index 4956ea7e..dae34175 100644
--- a/po/fi.gmo
+++ b/po/fi.gmo
Binary files differ
diff --git a/po/fi.po b/po/fi.po
index bed2a609..c6e4cc4e 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: 2014-05-21 12:10+0200\n"
+"POT-Creation-Date: 2014-06-22 17:33+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"
@@ -307,6 +307,35 @@ msgstr "Sisääntuloa %d ei voitu asettaa laitteelle %s."
msgid "Failed to change mute state for device '%s'."
msgstr "Laitteelta ”%s” ei saatu signaalinvoimakkuutta."
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr "Laitteen ”%s” ajuri ei tue mitään tunnettua kaappaustapaa."
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr "Videosyötelaite ei hyväksy uutta kehysnopeusasetusta."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr "Videosyötelaite ei hyväksy uutta kehysnopeusasetusta."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr "Videosyötelaite ei hyväksy uutta kehysnopeusasetusta."
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+#, fuzzy
+msgid "Failed to start decoding thread."
+msgstr "JPEG-kuvan purku epäonnistui"
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
diff --git a/po/fr.gmo b/po/fr.gmo
index a8c353b9..ab7cdff4 100644
--- a/po/fr.gmo
+++ b/po/fr.gmo
Binary files differ
diff --git a/po/fr.po b/po/fr.po
index 3c1f10c4..65fbdd95 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: 2014-05-21 12:10+0200\n"
+"POT-Creation-Date: 2014-06-22 17:33+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"
@@ -319,6 +319,43 @@ msgstr "Impossible de définir l'entrée %d du périphérique %s."
msgid "Failed to change mute state for device '%s'."
msgstr "Impossible d'obtenir la force du signal du périphérique « %s »."
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr ""
+"Le pilote du périphérique « %s » ne prend en charge aucune méthode "
+"d'enregistrement connue."
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr ""
+"Le périphérique d'entrée vidéo n'a pas accepté le nouveau paramètre de "
+"fréquence d'image."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr ""
+"Le périphérique d'entrée vidéo n'a pas accepté le nouveau paramètre de "
+"fréquence d'image."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr ""
+"Le périphérique d'entrée vidéo n'a pas accepté le nouveau paramètre de "
+"fréquence d'image."
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+#, fuzzy
+msgid "Failed to start decoding thread."
+msgstr "Échec de décodage de l'image JPEG"
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
diff --git a/po/gl.gmo b/po/gl.gmo
index 56d00658..f461e6c5 100644
--- a/po/gl.gmo
+++ b/po/gl.gmo
Binary files differ
diff --git a/po/gl.po b/po/gl.po
index 1c560746..5d0b9a99 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: 2014-05-21 12:10+0200\n"
+"POT-Creation-Date: 2014-06-22 17:33+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"
@@ -314,6 +314,38 @@ msgid "Failed to change mute state for device '%s'."
msgstr ""
"Produciuse un erro ao cambiar o estado de enmudecido para o dispositivo «%s»."
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr "O controlador do dispositivo «%s» non admite o método IO %d"
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr ""
+"O dispositivo de vídeo non acepta a nova configuración de taxa de marcos."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr ""
+"O dispositivo de vídeo non acepta a nova configuración de taxa de marcos."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr ""
+"O dispositivo de vídeo non acepta a nova configuración de taxa de marcos."
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+#, fuzzy
+msgid "Failed to start decoding thread."
+msgstr "Produciuse un erro ao descodificar a imaxe JPEG"
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
diff --git a/po/gst-plugins-good-1.0.pot b/po/gst-plugins-good-1.0.pot
index 0d863d06..4984aba1 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.3.2\n"
+"Project-Id-Version: gst-plugins-good 1.3.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-21 12:10+0200\n"
+"POT-Creation-Date: 2014-06-22 17:33+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"
@@ -41,32 +41,32 @@ msgstr ""
msgid "No URL set."
msgstr ""
-#: ext/soup/gstsouphttpsrc.c:1146
+#: ext/soup/gstsouphttpsrc.c:1205
msgid "Server does not support seeking."
msgstr ""
-#: ext/soup/gstsouphttpsrc.c:1420
+#: ext/soup/gstsouphttpsrc.c:1479
msgid "Could not resolve server name."
msgstr ""
-#: ext/soup/gstsouphttpsrc.c:1426
+#: ext/soup/gstsouphttpsrc.c:1485
msgid "Could not establish connection to server."
msgstr ""
-#: ext/soup/gstsouphttpsrc.c:1431
+#: ext/soup/gstsouphttpsrc.c:1490
msgid "Secure connection setup failed."
msgstr ""
-#: ext/soup/gstsouphttpsrc.c:1441
+#: ext/soup/gstsouphttpsrc.c:1500
msgid ""
"A network error occured, or the server closed the connection unexpectedly."
msgstr ""
-#: ext/soup/gstsouphttpsrc.c:1448
+#: ext/soup/gstsouphttpsrc.c:1507
msgid "Server sent bad data."
msgstr ""
-#: gst/avi/gstavidemux.c:5704
+#: gst/avi/gstavidemux.c:5678
msgid "Internal data stream error."
msgstr ""
@@ -78,54 +78,54 @@ msgstr ""
msgid "This file contains no playable streams."
msgstr ""
-#: gst/isomp4/qtdemux.c:621 gst/isomp4/qtdemux.c:4705
-#: gst/isomp4/qtdemux.c:4772 gst/isomp4/qtdemux.c:5008
+#: gst/isomp4/qtdemux.c:621 gst/isomp4/qtdemux.c:4666
+#: gst/isomp4/qtdemux.c:4733 gst/isomp4/qtdemux.c:4969
msgid "This file is invalid and cannot be played."
msgstr ""
-#: gst/isomp4/qtdemux.c:2301
+#: gst/isomp4/qtdemux.c:2294
msgid "Cannot play stream because it is encrypted with PlayReady DRM."
msgstr ""
-#: gst/isomp4/qtdemux.c:2864 gst/isomp4/qtdemux.c:2940
-#: gst/isomp4/qtdemux.c:2983 gst/isomp4/qtdemux.c:5710
-#: gst/isomp4/qtdemux.c:5717 gst/isomp4/qtdemux.c:6359
-#: gst/isomp4/qtdemux.c:6788 gst/isomp4/qtdemux.c:6795
-#: gst/isomp4/qtdemux.c:8627
+#: gst/isomp4/qtdemux.c:2857 gst/isomp4/qtdemux.c:2933
+#: gst/isomp4/qtdemux.c:2976 gst/isomp4/qtdemux.c:5671
+#: gst/isomp4/qtdemux.c:5678 gst/isomp4/qtdemux.c:6321
+#: gst/isomp4/qtdemux.c:6750 gst/isomp4/qtdemux.c:6757
+#: gst/isomp4/qtdemux.c:8692
msgid "This file is corrupt and cannot be played."
msgstr ""
-#: gst/isomp4/qtdemux.c:3074
+#: gst/isomp4/qtdemux.c:3067
msgid "Invalid atom size."
msgstr ""
-#: gst/isomp4/qtdemux.c:3142
+#: gst/isomp4/qtdemux.c:3135
msgid "This file is incomplete and cannot be played."
msgstr ""
-#: gst/isomp4/qtdemux.c:7448
+#: gst/isomp4/qtdemux.c:7511
msgid "The video in this file might not play correctly."
msgstr ""
-#: gst/isomp4/qtdemux.c:8668
+#: gst/isomp4/qtdemux.c:8733
#, c-format
msgid "This file contains too many streams. Only playing first %d"
msgstr ""
-#: gst/rtsp/gstrtspsrc.c:6306
+#: gst/rtsp/gstrtspsrc.c:6465
msgid ""
"No supported stream was found. You might need to install a GStreamer RTSP "
"extension plugin for Real media streams."
msgstr ""
-#: gst/rtsp/gstrtspsrc.c:6311
+#: gst/rtsp/gstrtspsrc.c:6470
msgid ""
"No supported stream was found. You might need to allow more transport "
"protocols or may otherwise be missing the right GStreamer RTSP extension "
"plugin."
msgstr ""
-#: gst/wavparse/gstwavparse.c:2167
+#: gst/wavparse/gstwavparse.c:2177
msgid "Internal data flow error."
msgstr ""
@@ -252,90 +252,90 @@ msgstr ""
msgid "AUX 2 Out"
msgstr ""
-#: sys/v4l2/gstv4l2bufferpool.c:1476
+#: sys/v4l2/gstv4l2bufferpool.c:1496
#, c-format
msgid "Error reading %d bytes from device '%s'."
msgstr ""
-#: sys/v4l2/gstv4l2object.c:1062
+#: sys/v4l2/gstv4l2object.c:1058
#, c-format
msgid "Failed to enumerate possible video formats device '%s' can work with"
msgstr ""
-#: sys/v4l2/gstv4l2object.c:2297
+#: sys/v4l2/gstv4l2object.c:2293
#, c-format
msgid "Could not map buffers from device '%s'"
msgstr ""
-#: sys/v4l2/gstv4l2object.c:2305
+#: sys/v4l2/gstv4l2object.c:2301
#, c-format
msgid "The driver of device '%s' does not support the IO method %d"
msgstr ""
-#: sys/v4l2/gstv4l2object.c:2312
+#: sys/v4l2/gstv4l2object.c:2308
#, c-format
msgid "The driver of device '%s' does not support any known IO method."
msgstr ""
-#: sys/v4l2/gstv4l2object.c:2805
+#: sys/v4l2/gstv4l2object.c:2801
#, c-format
msgid "Device '%s' does not support video capture"
msgstr ""
-#: sys/v4l2/gstv4l2object.c:2814
+#: sys/v4l2/gstv4l2object.c:2810
#, c-format
msgid "Device '%s' is busy"
msgstr ""
-#: sys/v4l2/gstv4l2object.c:2820 sys/v4l2/gstv4l2object.c:2831
+#: sys/v4l2/gstv4l2object.c:2816 sys/v4l2/gstv4l2object.c:2827
#, c-format
msgid "Device '%s' cannot capture at %dx%d"
msgstr ""
-#: sys/v4l2/gstv4l2object.c:2840
+#: sys/v4l2/gstv4l2object.c:2836
#, c-format
msgid "Device '%s' cannot capture in the specified format"
msgstr ""
-#: sys/v4l2/gstv4l2object.c:2851
+#: sys/v4l2/gstv4l2object.c:2847
#, c-format
msgid "Device '%s' does support non-contiguous planes"
msgstr ""
-#: sys/v4l2/gstv4l2object.c:2861
+#: sys/v4l2/gstv4l2object.c:2857
#, c-format
msgid "Could not get parameters on device '%s'"
msgstr ""
-#: sys/v4l2/gstv4l2object.c:2869
+#: sys/v4l2/gstv4l2object.c:2865
msgid "Video device did not accept new frame rate setting."
msgstr ""
-#: sys/v4l2/gstv4l2object.c:2962
+#: sys/v4l2/gstv4l2object.c:2958
msgid "Video device did not provide output format."
msgstr ""
-#: sys/v4l2/gstv4l2object.c:2968
+#: sys/v4l2/gstv4l2object.c:2964
msgid "Video device returned invalid dimensions."
msgstr ""
-#: sys/v4l2/gstv4l2object.c:2976
+#: sys/v4l2/gstv4l2object.c:2972
msgid "Video devices uses an unsupported interlacing method."
msgstr ""
-#: sys/v4l2/gstv4l2object.c:2983
+#: sys/v4l2/gstv4l2object.c:2979
msgid "Video devices uses an unsupported pixel format."
msgstr ""
-#: sys/v4l2/gstv4l2object.c:3364
+#: sys/v4l2/gstv4l2object.c:3392
msgid "Failed to configure internal buffer pool."
msgstr ""
-#: sys/v4l2/gstv4l2object.c:3370
+#: sys/v4l2/gstv4l2object.c:3398
msgid "Video device did not suggest any buffer size."
msgstr ""
-#: sys/v4l2/gstv4l2object.c:3382
+#: sys/v4l2/gstv4l2object.c:3413
msgid "No downstream pool to import from."
msgstr ""
@@ -359,7 +359,7 @@ msgstr ""
msgid "Failed to get radio input on device '%s'. "
msgstr ""
-#: sys/v4l2/gstv4l2radio.c:202 sys/v4l2/v4l2_calls.c:1092
+#: sys/v4l2/gstv4l2radio.c:202 sys/v4l2/v4l2_calls.c:1067
#, c-format
msgid "Failed to set input %d on device %s."
msgstr ""
@@ -369,6 +369,42 @@ msgstr ""
msgid "Failed to change mute state for device '%s'."
msgstr ""
+#: sys/v4l2/gstv4l2sink.c:605
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#: sys/v4l2/gstv4l2transform.c:143
+#, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr ""
+
+#: sys/v4l2/gstv4l2transform.c:150
+#, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr ""
+
+#: sys/v4l2/gstv4l2videodec.c:141
+#, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr ""
+
+#: sys/v4l2/gstv4l2videodec.c:148
+#, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr ""
+
+#: sys/v4l2/gstv4l2videodec.c:572
+msgid "Failed to allocate required memory."
+msgstr ""
+
+#: sys/v4l2/gstv4l2videodec.c:586
+msgid "Failed to start decoding thread."
+msgstr ""
+
+#: sys/v4l2/gstv4l2videodec.c:594
+msgid "Failed to process frame."
+msgstr ""
+
#: sys/v4l2/v4l2_calls.c:89
#, c-format
msgid ""
@@ -396,91 +432,91 @@ msgstr ""
msgid "Failed getting controls attributes on device '%s'."
msgstr ""
-#: sys/v4l2/v4l2_calls.c:616
+#: sys/v4l2/v4l2_calls.c:605
#, c-format
msgid "Cannot identify device '%s'."
msgstr ""
-#: sys/v4l2/v4l2_calls.c:623
+#: sys/v4l2/v4l2_calls.c:612
#, c-format
msgid "This isn't a device '%s'."
msgstr ""
-#: sys/v4l2/v4l2_calls.c:630
+#: sys/v4l2/v4l2_calls.c:619
#, c-format
msgid "Could not open device '%s' for reading and writing."
msgstr ""
-#: sys/v4l2/v4l2_calls.c:637
+#: sys/v4l2/v4l2_calls.c:626
#, c-format
msgid "Device '%s' is not a capture device."
msgstr ""
-#: sys/v4l2/v4l2_calls.c:645
+#: sys/v4l2/v4l2_calls.c:634
#, c-format
msgid "Device '%s' is not a output device."
msgstr ""
-#: sys/v4l2/v4l2_calls.c:653
+#: sys/v4l2/v4l2_calls.c:642
#, c-format
msgid "Device '%s' is not a M2M device."
msgstr ""
-#: sys/v4l2/v4l2_calls.c:715
+#: sys/v4l2/v4l2_calls.c:693
#, c-format
msgid "Could not dup device '%s' for reading and writing."
msgstr ""
-#: sys/v4l2/v4l2_calls.c:802
+#: sys/v4l2/v4l2_calls.c:777
#, c-format
msgid "Failed to set norm for device '%s'."
msgstr ""
-#: sys/v4l2/v4l2_calls.c:840
+#: sys/v4l2/v4l2_calls.c:815
#, c-format
msgid "Failed to get current tuner frequency for device '%s'."
msgstr ""
-#: sys/v4l2/v4l2_calls.c:882
+#: sys/v4l2/v4l2_calls.c:857
#, c-format
msgid "Failed to set current tuner frequency for device '%s' to %lu Hz."
msgstr ""
-#: sys/v4l2/v4l2_calls.c:916
+#: sys/v4l2/v4l2_calls.c:891
#, c-format
msgid "Failed to get signal strength for device '%s'."
msgstr ""
-#: sys/v4l2/v4l2_calls.c:952
+#: sys/v4l2/v4l2_calls.c:927
#, c-format
msgid "Failed to get value for control %d on device '%s'."
msgstr ""
-#: sys/v4l2/v4l2_calls.c:987
+#: sys/v4l2/v4l2_calls.c:962
#, c-format
msgid "Failed to set value %d for control %d on device '%s'."
msgstr ""
-#: sys/v4l2/v4l2_calls.c:1067
+#: sys/v4l2/v4l2_calls.c:1042
#, c-format
msgid "Failed to get current input on device '%s'. May be it is a radio device"
msgstr ""
-#: sys/v4l2/v4l2_calls.c:1124
+#: sys/v4l2/v4l2_calls.c:1099
#, c-format
msgid ""
"Failed to get current output on device '%s'. May be it is a radio device"
msgstr ""
-#: sys/v4l2/v4l2_calls.c:1149
+#: sys/v4l2/v4l2_calls.c:1124
#, c-format
msgid "Failed to set output %d on device %s."
msgstr ""
-#: sys/ximage/gstximagesrc.c:788
+#: sys/ximage/gstximagesrc.c:790
msgid "Changing resolution at runtime is not yet supported."
msgstr ""
-#: sys/ximage/gstximagesrc.c:802
+#: sys/ximage/gstximagesrc.c:804
msgid "Cannot operate without a clock"
msgstr ""
diff --git a/po/hr.gmo b/po/hr.gmo
index 680af9fa..5868e40b 100644
--- a/po/hr.gmo
+++ b/po/hr.gmo
Binary files differ
diff --git a/po/hr.po b/po/hr.po
index bc441e86..a25164b3 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: 2014-05-21 12:10+0200\n"
+"POT-Creation-Date: 2014-06-22 17:33+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"
@@ -301,6 +301,35 @@ msgstr "Nisam uspio postaviti ulaz %d na uređaj %s."
msgid "Failed to change mute state for device '%s'."
msgstr "Nisam uspio dobiti snagu signala za uređaj „%s”."
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr "Upravljački program uređaja „%s” ne podržava poznate metode snimanja."
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr "Ulazni video uređaj nije prihvatio nove postavke broja okvira."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr "Ulazni video uređaj nije prihvatio nove postavke broja okvira."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr "Ulazni video uređaj nije prihvatio nove postavke broja okvira."
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+#, fuzzy
+msgid "Failed to start decoding thread."
+msgstr "Nisam uspio dekodirati JPEG sliku"
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
diff --git a/po/hu.gmo b/po/hu.gmo
index 7d546e9a..a20d0c0a 100644
--- a/po/hu.gmo
+++ b/po/hu.gmo
Binary files differ
diff --git a/po/hu.po b/po/hu.po
index 7cbc1694..e00592cd 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -7,10 +7,10 @@
# Balázs Úr <urbalazs@gmail.com>, 2014.
msgid ""
msgstr ""
-"Project-Id-Version: gst-plugins-good 1.2.1\n"
+"Project-Id-Version: gst-plugins-good 1.3.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-21 12:10+0200\n"
-"PO-Revision-Date: 2014-03-20 18:55+0100\n"
+"POT-Creation-Date: 2014-06-22 17:33+0200\n"
+"PO-Revision-Date: 2014-05-23 21:00+0200\n"
"Last-Translator: Balázs Úr <urbalazs@gmail.com>\n"
"Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
"Language: hu\n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Rosetta-Export-Date: 2007-07-27 19:18:15+0000\n"
-"X-Generator: Lokalize 1.2\n"
+"X-Generator: Lokalize 1.5\n"
"X-Rosetta-Export-Date: 2007-07-27 19:18:15+0000\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
@@ -249,9 +249,9 @@ msgstr "A(z) „%s” eszköz nem képes felvenni %dx%d felbontásban"
msgid "Device '%s' cannot capture in the specified format"
msgstr "A(z) „%s” eszköz nem képes felvenni a megadott formátumban"
-#, fuzzy, c-format
+#, c-format
msgid "Device '%s' does support non-contiguous planes"
-msgstr "A(z) „%s” eszköz nem támogatja a videofelvételt"
+msgstr "A(z) „%s” eszköz nem támogatja a nem szomszédos síkokat"
#, c-format
msgid "Could not get parameters on device '%s'"
@@ -260,27 +260,23 @@ msgstr "Nem kérhetők le a(z) „%s” eszköz paraméterei"
msgid "Video device did not accept new frame rate setting."
msgstr "A videoeszköz nem fogadta el az új képkockasebesség-beállítást."
-#, fuzzy
msgid "Video device did not provide output format."
-msgstr "A videoeszköz nem fogadta el az új képkockasebesség-beállítást."
+msgstr "A videoeszköz nem szolgáltatott kimeneti formátumot."
msgid "Video device returned invalid dimensions."
-msgstr ""
+msgstr "A videoeszköz érvénytelen dimenziókkal tért vissza."
-#, fuzzy
msgid "Video devices uses an unsupported interlacing method."
-msgstr "A(z) „%s” eszköz illesztőprogramja nem támogatja a(z) %d. IO módot"
+msgstr "A videoeszközök nem támogatott váltottsoros módot használnak."
msgid "Video devices uses an unsupported pixel format."
-msgstr ""
+msgstr "A videoeszközök nem támogatott képpontformátumot használnak."
-#, fuzzy
msgid "Failed to configure internal buffer pool."
-msgstr "A videoeszköz nem tudott létrehozni puffertárolót."
+msgstr "Nem sikerült beállítani a belső puffertárolót."
-#, fuzzy
msgid "Video device did not suggest any buffer size."
-msgstr "A videoeszköz nem tudott létrehozni puffertárolót."
+msgstr "A videoeszköz nem javasolt semmilyen pufferméretet."
msgid "No downstream pool to import from."
msgstr ""
@@ -309,6 +305,35 @@ msgstr "A(z) %d. bemenet beállítása meghiúsult a(z) „%s” eszközön."
msgid "Failed to change mute state for device '%s'."
msgstr "A némítási állapot módosítása meghiúsult a(z) „%s” eszközön."
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr "A videoeszközök nem támogatott képpontformátumot használnak."
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr "A videoeszközök nem támogatott képpontformátumot használnak."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr "A videoeszközök nem támogatott képpontformátumot használnak."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr "A videoeszközök nem támogatott képpontformátumot használnak."
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+#, fuzzy
+msgid "Failed to start decoding thread."
+msgstr "A JPEG kép visszafejtése meghiúsult"
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
@@ -353,9 +378,9 @@ msgstr "A(z) „%s” eszköz nem rögzítőeszköz."
msgid "Device '%s' is not a output device."
msgstr "A(z) „%s” eszköz nem kimeneti eszköz."
-#, fuzzy, c-format
+#, c-format
msgid "Device '%s' is not a M2M device."
-msgstr "A(z) „%s” eszköz nem kimeneti eszköz."
+msgstr "A(z) „%s” eszköz nem M2M eszköz."
#, fuzzy, c-format
msgid "Could not dup device '%s' for reading and writing."
diff --git a/po/id.gmo b/po/id.gmo
index d7b9bcc7..f45fb835 100644
--- a/po/id.gmo
+++ b/po/id.gmo
Binary files differ
diff --git a/po/id.po b/po/id.po
index 381bd160..0053e627 100644
--- a/po/id.po
+++ b/po/id.po
@@ -1,16 +1,16 @@
# Indonesian translations for gst-plugins-good package.
# This file is put in the public domain.
#
-# Andhika Padmawan <andhika.padmawan@gmail.com>, 2011.
+# Andhika Padmawan <andhika.padmawan@gmail.com>, 2011-2014.
# Andika Triwidada <andika@gmail.com>, 2013.
#
msgid ""
msgstr ""
-"Project-Id-Version: gst-plugins-good 1.1.4\n"
+"Project-Id-Version: gst-plugins-good 1.3.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-21 12:10+0200\n"
-"PO-Revision-Date: 2013-10-15 16:26+0700\n"
-"Last-Translator: Andika Triwidada <andika@gmail.com>\n"
+"POT-Creation-Date: 2014-06-22 17:33+0200\n"
+"PO-Revision-Date: 2014-06-01 09:52+0700\n"
+"Last-Translator: Andhika Padmawan <andhika.padmawan@gmail.com>\n"
"Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
"Language: id\n"
"MIME-Version: 1.0\n"
@@ -244,9 +244,9 @@ msgstr "Divais '%s' tak dapat menangkap di %dx%d"
msgid "Device '%s' cannot capture in the specified format"
msgstr "Divais '%s' tak dapat menangkap dalam format yang ditentukan"
-#, fuzzy, c-format
+#, c-format
msgid "Device '%s' does support non-contiguous planes"
-msgstr "Divais '%s' tak mendukung penangkapan video"
+msgstr "Divais '%s' tak mendukung pesawat tak bersinggungan"
#, c-format
msgid "Could not get parameters on device '%s'"
@@ -255,30 +255,26 @@ msgstr "Tak bisa mendapatkan parameter di divais '%s'"
msgid "Video device did not accept new frame rate setting."
msgstr "Divais video tak menerima pengaturan laju bingkai baru."
-#, fuzzy
msgid "Video device did not provide output format."
-msgstr "Divais video tak menerima pengaturan laju bingkai baru."
+msgstr "Divais video tak menyediakan format keluaran."
msgid "Video device returned invalid dimensions."
-msgstr ""
+msgstr "Divais video mengembalikan dimensi tidak sah."
-#, fuzzy
msgid "Video devices uses an unsupported interlacing method."
-msgstr "Driver dari divais '%s' tak mendukung metode IO %d"
+msgstr "Divais video menggunakan metode penyilangan yang tidak didukung."
msgid "Video devices uses an unsupported pixel format."
-msgstr ""
+msgstr "Divais video menggunakan format pixel yang tidak didukung."
-#, fuzzy
msgid "Failed to configure internal buffer pool."
-msgstr "Divais video tak bisa membuat pul singgahan."
+msgstr "Gagal mengatur pul singgahan internal."
-#, fuzzy
msgid "Video device did not suggest any buffer size."
-msgstr "Divais video tak bisa membuat pul singgahan."
+msgstr "Divais video tak menyarankan ukuran singgahan apapun."
msgid "No downstream pool to import from."
-msgstr ""
+msgstr "Tak ada pul downstream untuk diimpor."
#, c-format
msgid "Failed to get settings of tuner %d on device '%s'."
@@ -304,6 +300,35 @@ msgstr "Gagal mengatur masukan %d di divais %s."
msgid "Failed to change mute state for device '%s'."
msgstr "Gagal mengubah keadaan bisu untuk divais '%s'."
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr "Divais video menggunakan format pixel yang tidak didukung."
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr "Divais video menggunakan format pixel yang tidak didukung."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr "Divais video menggunakan format pixel yang tidak didukung."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr "Divais video menggunakan format pixel yang tidak didukung."
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+#, fuzzy
+msgid "Failed to start decoding thread."
+msgstr "Gagal untuk mengawasandi citra JPEG"
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
@@ -348,11 +373,11 @@ msgstr "Divais '%s' bukan divais penangkap."
msgid "Device '%s' is not a output device."
msgstr "Divais '%s' bukan divais keluaran."
-#, fuzzy, c-format
+#, c-format
msgid "Device '%s' is not a M2M device."
-msgstr "Divais '%s' bukan divais keluaran."
+msgstr "Divais '%s' bukan divais M2M."
-#, fuzzy, c-format
+#, c-format
msgid "Could not dup device '%s' for reading and writing."
msgstr "Tak dapat membuka divais '%s' untuk dibaca dan ditulis."
diff --git a/po/it.gmo b/po/it.gmo
index 6236c121..8b48581b 100644
--- a/po/it.gmo
+++ b/po/it.gmo
Binary files differ
diff --git a/po/it.po b/po/it.po
index 48e93f60..775b0156 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: 2014-05-21 12:10+0200\n"
+"POT-Creation-Date: 2014-06-22 17:33+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"
@@ -309,6 +309,38 @@ msgstr "Impostazione dell'ingresso %d sul device «%s» non riuscita."
msgid "Failed to change mute state for device '%s'."
msgstr "Recupero dell'intensità del segnale per il device «%s» non riuscito."
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr "Il driver del device «%s» non supporta alcun metodo di cattura noto."
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr ""
+"Il device di ingresso video non accetta la nuova impostazione sul frame rate."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr ""
+"Il device di ingresso video non accetta la nuova impostazione sul frame rate."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr ""
+"Il device di ingresso video non accetta la nuova impostazione sul frame rate."
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+#, fuzzy
+msgid "Failed to start decoding thread."
+msgstr "Decodifica dell'immagine JPEG non riuscita"
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
diff --git a/po/ja.gmo b/po/ja.gmo
index dcf41d69..c47584d0 100644
--- a/po/ja.gmo
+++ b/po/ja.gmo
Binary files differ
diff --git a/po/ja.po b/po/ja.po
index 5271debc..b10fdec7 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: 2014-05-21 12:10+0200\n"
+"POT-Creation-Date: 2014-06-22 17:33+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"
@@ -315,6 +315,35 @@ msgstr "デバイス '%2$s' 上の入力%1$d の設定に失敗しました。"
msgid "Failed to change mute state for device '%s'."
msgstr "デバイス '%s' のミュート状態の変更に失敗しました"
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr "デバイス '%s' のドライバはIOメソッド%dをサポートしていません"
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr "ビデオデバイスが新しいフレームレート設定を受け付けません。"
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr "ビデオデバイスが新しいフレームレート設定を受け付けません。"
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr "ビデオデバイスが新しいフレームレート設定を受け付けません。"
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+#, fuzzy
+msgid "Failed to start decoding thread."
+msgstr "JPEG画像のデコードに失敗しました"
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
diff --git a/po/lt.gmo b/po/lt.gmo
index 3b1b17f7..a70f2600 100644
--- a/po/lt.gmo
+++ b/po/lt.gmo
Binary files differ
diff --git a/po/lt.po b/po/lt.po
index 00307524..c5362f1f 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: 2014-05-21 12:10+0200\n"
+"POT-Creation-Date: 2014-06-22 17:33+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"
@@ -303,6 +303,35 @@ msgstr "Nepavyko nustatyti įvesties %d įrenginyje %s."
msgid "Failed to change mute state for device '%s'."
msgstr "Nepavyko gauti įrenginio „%s“ signalo stiprumo."
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr "Įrenginio „%s“ tvarkyklė nepalaiko jokių žinomų įrašymo būdų."
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr "Vaizdo įvesties įrenginys nepriėmė naujų kadrų dažnio nustatymų."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr "Vaizdo įvesties įrenginys nepriėmė naujų kadrų dažnio nustatymų."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr "Vaizdo įvesties įrenginys nepriėmė naujų kadrų dažnio nustatymų."
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+#, fuzzy
+msgid "Failed to start decoding thread."
+msgstr "Nepavyko dekoduoti JPEG paveikslėlio"
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
diff --git a/po/lv.gmo b/po/lv.gmo
index da0df571..fa1896e0 100644
--- a/po/lv.gmo
+++ b/po/lv.gmo
Binary files differ
diff --git a/po/lv.po b/po/lv.po
index 54bcea0c..debceca0 100644
--- a/po/lv.po
+++ b/po/lv.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-good 1.2.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-21 12:10+0200\n"
+"POT-Creation-Date: 2014-06-22 17:33+0200\n"
"PO-Revision-Date: 2014-04-20 16:38+0300\n"
"Last-Translator: Rihards Prieditis <rprieditis@gmail.com>\n"
"Language-Team: Latvian <translation-team-lv@lists.sourceforge.net>\n"
@@ -302,6 +302,35 @@ msgstr "Neizdevās iestatīt ievadi %d uz ierīces %s."
msgid "Failed to change mute state for device '%s'."
msgstr "Neizdevās mainīt apklusināšanas stāvokli ierīcei “%s”."
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr "Ierīces \"%s\" draiveris neatbalsta IO metodi %d"
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr "Video ierīce nepieņēma jaunos kadru ātruma iestatījumus."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr "Video ierīce nepieņēma jaunos kadru ātruma iestatījumus."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr "Video ierīce nepieņēma jaunos kadru ātruma iestatījumus."
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+#, fuzzy
+msgid "Failed to start decoding thread."
+msgstr "Neizdevās atkodēt JPEG attēlu"
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
diff --git a/po/mt.gmo b/po/mt.gmo
index a9caed31..f4c50be0 100644
--- a/po/mt.gmo
+++ b/po/mt.gmo
Binary files differ
diff --git a/po/mt.po b/po/mt.po
index bd52aa5e..9d431249 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: 2014-05-21 12:10+0200\n"
+"POT-Creation-Date: 2014-06-22 17:33+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"
@@ -302,6 +302,39 @@ msgstr "Problema biex nissettja input %d fuq apparat %s."
msgid "Failed to change mute state for device '%s'."
msgstr "Problema biex inġib signal strength fuq l-apparat '%s'."
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr ""
+"Id-driver tal-apparat '%s' ma jissapportja l-ebda capture method mifhum."
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr ""
+"Apparat li jaqra video input ma aċċettax is-settings ġodda tal-frame rate."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr ""
+"Apparat li jaqra video input ma aċċettax is-settings ġodda tal-frame rate."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr ""
+"Apparat li jaqra video input ma aċċettax is-settings ġodda tal-frame rate."
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+#, fuzzy
+msgid "Failed to start decoding thread."
+msgstr "Problem fid-decoding tal-istampa JPEG"
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
diff --git a/po/nb.gmo b/po/nb.gmo
index f01008f8..fed90276 100644
--- a/po/nb.gmo
+++ b/po/nb.gmo
Binary files differ
diff --git a/po/nb.po b/po/nb.po
index 41fc4cc3..dd0fde69 100644
--- a/po/nb.po
+++ b/po/nb.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-good 1.2.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-21 12:10+0200\n"
+"POT-Creation-Date: 2014-06-22 17:33+0200\n"
"PO-Revision-Date: 2014-01-22 17:49+0100\n"
"Last-Translator: Johnny A. Solbu <johnny@solbu.net>\n"
"Language-Team: Norwegian Bokmaal <i18n-nb@lister.ping.uio.no>\n"
@@ -300,6 +300,35 @@ msgstr "Klarte ikke å sette inngang %d på enhet %s."
msgid "Failed to change mute state for device '%s'."
msgstr "Klarte ikke å endre dempe-modus for enheten «%s»."
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr "Driveren av enheten «%s» støtter ikke IO metoden %d"
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr "Videoenheten aksepterte ikke ny bildefrekvensinnstilling."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr "Videoenheten aksepterte ikke ny bildefrekvensinnstilling."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr "Videoenheten aksepterte ikke ny bildefrekvensinnstilling."
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+#, fuzzy
+msgid "Failed to start decoding thread."
+msgstr "Klarte ikke å dekode JPEG-bilde"
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
diff --git a/po/nl.gmo b/po/nl.gmo
index 741a49b4..b1cccca4 100644
--- a/po/nl.gmo
+++ b/po/nl.gmo
Binary files differ
diff --git a/po/nl.po b/po/nl.po
index c8024d8d..3425c007 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -1,13 +1,13 @@
-# translation of gst-plugins-good-1.1.4.nl.po to Dutch
+# translation of gst-plugins-good-1.3.2.nl.po to Dutch
# This file is put in the public domain.
#
-# Freek de Kruijf <f.de.kruijf@gmail.com>, 2007, 2008, 2009, 2010, 2011, 2012, 2013.
+# Freek de Kruijf <f.de.kruijf@gmail.com>, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014.
msgid ""
msgstr ""
-"Project-Id-Version: gst-plugins-good 1.1.4\n"
+"Project-Id-Version: gst-plugins-good 1.3.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-21 12:10+0200\n"
-"PO-Revision-Date: 2013-09-15 13:31+0200\n"
+"POT-Creation-Date: 2014-06-22 17:33+0200\n"
+"PO-Revision-Date: 2014-05-22 00:41+0200\n"
"Last-Translator: Freek de Kruijf <f.de.kruijf@gmail.com>\n"
"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
"Language: nl\n"
@@ -243,9 +243,9 @@ msgstr "Apparaat '%s' kan geen opname maken met %dx%d"
msgid "Device '%s' cannot capture in the specified format"
msgstr "Apparaat '%s' kan geen opname maken in het gespecificeerde formaat"
-#, fuzzy, c-format
+#, c-format
msgid "Device '%s' does support non-contiguous planes"
-msgstr "Apparaat '%s' ondersteunt het opnemen van video niet"
+msgstr "Apparaat '%s' ondersteunt niet-continue vlakken"
#, c-format
msgid "Could not get parameters on device '%s'"
@@ -254,30 +254,27 @@ msgstr "Kan de parameters op apparaat '%s' niet verkrijgen"
msgid "Video device did not accept new frame rate setting."
msgstr "Videoapparaat heeft de nieuwe frame-snelheid niet geaccepteerd."
-#, fuzzy
msgid "Video device did not provide output format."
-msgstr "Videoapparaat heeft de nieuwe frame-snelheid niet geaccepteerd."
+msgstr "Videoapparaat leverde geen uitvoerformaat."
msgid "Video device returned invalid dimensions."
-msgstr ""
+msgstr "Video-apparaat gaf ongeldige afmetingen terug."
-#, fuzzy
msgid "Video devices uses an unsupported interlacing method."
-msgstr "Het stuurprogramma van apparaat '%s' ondersteunt de IO-methode %d niet"
+msgstr ""
+"Video-apparaat gebruikt een niet ondersteunde methode voor interlacing."
msgid "Video devices uses an unsupported pixel format."
-msgstr ""
+msgstr "Video-apparaat gebruikt een niet ondersteund pixelformaat."
-#, fuzzy
msgid "Failed to configure internal buffer pool."
-msgstr "Videoapparaat kon geen bufferpool aanmaken."
+msgstr "Instellen van interne bufferpool is mislukt."
-#, fuzzy
msgid "Video device did not suggest any buffer size."
-msgstr "Videoapparaat kon geen bufferpool aanmaken."
+msgstr "Videoapparaat gaf geen suggestie voor een buffergrootte."
msgid "No downstream pool to import from."
-msgstr ""
+msgstr "Geen downstream pool om van te importeren."
#, c-format
msgid "Failed to get settings of tuner %d on device '%s'."
@@ -303,6 +300,35 @@ msgstr "Kan invoer %d op apparaat '%s' niet instellen."
msgid "Failed to change mute state for device '%s'."
msgstr "De gedempte status van apparaat '%s' wijzigen is mislukt."
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr "Video-apparaat gebruikt een niet ondersteund pixelformaat."
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr "Video-apparaat gebruikt een niet ondersteund pixelformaat."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr "Video-apparaat gebruikt een niet ondersteund pixelformaat."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr "Video-apparaat gebruikt een niet ondersteund pixelformaat."
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+#, fuzzy
+msgid "Failed to start decoding thread."
+msgstr "Kan de JPEG-afbeelding niet decoderen"
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
@@ -347,13 +373,13 @@ msgstr "Apparaat '%s' is geen opnameapparaat."
msgid "Device '%s' is not a output device."
msgstr "Apparaat '%s' is geen uitvoerapparaat."
-#, fuzzy, c-format
+#, c-format
msgid "Device '%s' is not a M2M device."
-msgstr "Apparaat '%s' is geen uitvoerapparaat."
+msgstr "Apparaat '%s' is geen M2M-apparaat."
-#, fuzzy, c-format
+#, c-format
msgid "Could not dup device '%s' for reading and writing."
-msgstr "Kan apparaat '%s' niet openen voor lezen en schrijven."
+msgstr "Kan geen dup doen op apparaat '%s' voor lezen en schrijven."
#, c-format
msgid "Failed to set norm for device '%s'."
diff --git a/po/or.gmo b/po/or.gmo
index 436d886b..720af411 100644
--- a/po/or.gmo
+++ b/po/or.gmo
Binary files differ
diff --git a/po/or.po b/po/or.po
index c5b0ea1e..5cc2276d 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: 2014-05-21 12:10+0200\n"
+"POT-Creation-Date: 2014-06-22 17:33+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"
@@ -293,6 +293,34 @@ msgstr "\"%s\" ଧ୍ବନି ଯନ୍ତ୍ର ବନ୍ଦ କରିହେ
msgid "Failed to change mute state for device '%s'."
msgstr "\"%s\" ଯନ୍ତ୍ରରୁ ଅସ୍ଥାୟୀ ସଞ୍ଚୟ ସ୍ଥାନ ଆଣିହେଲା ନାହିଁ."
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr ""
+
+#, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr ""
+
+#, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr ""
+
+#, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr ""
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+msgid "Failed to start decoding thread."
+msgstr ""
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
diff --git a/po/pl.gmo b/po/pl.gmo
index 28711628..60d02bf2 100644
--- a/po/pl.gmo
+++ b/po/pl.gmo
Binary files differ
diff --git a/po/pl.po b/po/pl.po
index 831975ef..ee30221c 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -1,13 +1,13 @@
# Polish translation for gst-plugins-good.
# This file is distributed under the same license as the gst-plugins-good package.
-# Jakub Bogusz <qboosh@pld-linux.org>, 2007-2013.
+# Jakub Bogusz <qboosh@pld-linux.org>, 2007-2014.
#
msgid ""
msgstr ""
-"Project-Id-Version: gst-plugins-good 1.1.4\n"
+"Project-Id-Version: gst-plugins-good 1.3.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-21 12:10+0200\n"
-"PO-Revision-Date: 2013-09-15 11:26+0200\n"
+"POT-Creation-Date: 2014-06-22 17:33+0200\n"
+"PO-Revision-Date: 2014-05-22 18:29+0200\n"
"Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
"Language: pl\n"
@@ -240,9 +240,9 @@ msgstr "Urządzenie '%s' nie potrafi przechwytywać obrazu %dx%d"
msgid "Device '%s' cannot capture in the specified format"
msgstr "Urządzenie '%s' nie potrafi przechwytywać obrazu w podanym formacie"
-#, fuzzy, c-format
+#, c-format
msgid "Device '%s' does support non-contiguous planes"
-msgstr "Urządzenie '%s' nie obsługuje przechwytywania obrazu"
+msgstr "Urządzenie '%s' obsługuje nieciągłe powierzchnie"
#, c-format
msgid "Could not get parameters on device '%s'"
@@ -252,31 +252,26 @@ msgid "Video device did not accept new frame rate setting."
msgstr ""
"Urządzenie obrazu nie przyjęło nowego ustawienia częstotliwości klatek."
-#, fuzzy
msgid "Video device did not provide output format."
-msgstr ""
-"Urządzenie obrazu nie przyjęło nowego ustawienia częstotliwości klatek."
+msgstr "Urządzenie obrazu nie przekazało formatu wyjściowego."
msgid "Video device returned invalid dimensions."
-msgstr ""
+msgstr "Urządzenie obrazu zwróciło błędne wymiary."
-#, fuzzy
msgid "Video devices uses an unsupported interlacing method."
-msgstr "Sterownik urządzenia '%s' nie obsługuje metody we/wy %d"
+msgstr "Urzędzenie obrazu wykorzystuje nie obsługiwany sposób przeplotu."
msgid "Video devices uses an unsupported pixel format."
-msgstr ""
+msgstr "Urządzenie obrazu wykorzystuje nie obsługiwany format piksela."
-#, fuzzy
msgid "Failed to configure internal buffer pool."
-msgstr "Urzędzenie obrazu nie mogło utworzyć puli buforów."
+msgstr "Nie udało się skonfigurować wewnętrznej puli buforów."
-#, fuzzy
msgid "Video device did not suggest any buffer size."
-msgstr "Urzędzenie obrazu nie mogło utworzyć puli buforów."
+msgstr "Urzędzenie obrazu nie zasugerowało żadnego rozmiaru bufora."
msgid "No downstream pool to import from."
-msgstr ""
+msgstr "Brak oddolnej puli do zaimportowania."
#, c-format
msgid "Failed to get settings of tuner %d on device '%s'."
@@ -302,6 +297,35 @@ msgstr "Nie udało się ustawić wejścia %d urządzenia %s."
msgid "Failed to change mute state for device '%s'."
msgstr "Nie udało się zmienić stanu wyciszenia dla urządzenia '%s'."
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr "Urządzenie obrazu wykorzystuje nie obsługiwany format piksela."
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr "Urządzenie obrazu wykorzystuje nie obsługiwany format piksela."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr "Urządzenie obrazu wykorzystuje nie obsługiwany format piksela."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr "Urządzenie obrazu wykorzystuje nie obsługiwany format piksela."
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+#, fuzzy
+msgid "Failed to start decoding thread."
+msgstr "Nie udało się zdekodować obrazu JPEG"
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
@@ -346,13 +370,13 @@ msgstr "Urządzenie '%s' nie jest urządzeniem przechwytującym."
msgid "Device '%s' is not a output device."
msgstr "Urządzenie '%s' nie jest urządzeniem wyjściowym."
-#, fuzzy, c-format
+#, c-format
msgid "Device '%s' is not a M2M device."
-msgstr "Urządzenie '%s' nie jest urządzeniem wyjściowym."
+msgstr "Urządzenie '%s' nie jest urządzeniem M2M."
-#, fuzzy, c-format
+#, c-format
msgid "Could not dup device '%s' for reading and writing."
-msgstr "Nie udało się otworzyć urządzenia '%s' do odczytu i zapisu."
+msgstr "Nie udało się wykonać dup urządzenia '%s' do odczytu i zapisu."
#, c-format
msgid "Failed to set norm for device '%s'."
diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo
index d2b1905b..3bdf9ee6 100644
--- a/po/pt_BR.gmo
+++ b/po/pt_BR.gmo
Binary files differ
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 6f168530..c9c1cbc5 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-good-1.2.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-21 12:10+0200\n"
+"POT-Creation-Date: 2014-06-22 17:33+0200\n"
"PO-Revision-Date: 2013-12-29 17:48-0200\n"
"Last-Translator: Fabrício Godoy <skarllot@gmail.com>\n"
"Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge."
@@ -311,6 +311,35 @@ msgstr "Falha ao definir a entrada %d no dispositivo %s."
msgid "Failed to change mute state for device '%s'."
msgstr "Falha ao alternar entre com e sem áudio para o dispositivo \"%s\"."
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr "O driver do dispositivo \"%s\" não tem suporte ao método %d de E/S"
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr "O dispositivo de vídeo não aceita definir uma nova taxa de quadros."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr "O dispositivo de vídeo não aceita definir uma nova taxa de quadros."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr "O dispositivo de vídeo não aceita definir uma nova taxa de quadros."
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+#, fuzzy
+msgid "Failed to start decoding thread."
+msgstr "Falha ao decodificar a imagem JPEG"
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
diff --git a/po/ro.gmo b/po/ro.gmo
index 62b216a4..2cbc8b60 100644
--- a/po/ro.gmo
+++ b/po/ro.gmo
Binary files differ
diff --git a/po/ro.po b/po/ro.po
index 9821052d..22f86a33 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: 2014-05-21 12:10+0200\n"
+"POT-Creation-Date: 2014-06-22 17:33+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"
@@ -315,6 +315,40 @@ msgstr "Definirea valorii %d pentru dispozitivul „%s” a eșuat."
msgid "Failed to change mute state for device '%s'."
msgstr "Obținerea nivelului semnalului pentru dispozitivul „%s” a eșuat."
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr ""
+"Driverul pentru dispozitivul „%s” nu suport nici o metodă de captură "
+"cunoscută."
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr ""
+"Dispozitivul de intrare video nu a acceptat noua configurare de rate cadre."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr ""
+"Dispozitivul de intrare video nu a acceptat noua configurare de rate cadre."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr ""
+"Dispozitivul de intrare video nu a acceptat noua configurare de rate cadre."
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+#, fuzzy
+msgid "Failed to start decoding thread."
+msgstr "Nu s-a putut decoda imaginea JPEG"
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
diff --git a/po/ru.gmo b/po/ru.gmo
index def8c09f..9c45cae2 100644
--- a/po/ru.gmo
+++ b/po/ru.gmo
Binary files differ
diff --git a/po/ru.po b/po/ru.po
index 6176f554..56e254f8 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -3,21 +3,21 @@
#
# Артём Попов <artfwo@gmail.com>, 2009.
# Pavel Maryanov <acid_jack@ukr.net>, 2009.
-# Yuri Kozlov <yuray@komyakino.ru>, 2011, 2012, 2013.
+# Yuri Kozlov <yuray@komyakino.ru>, 2011, 2012, 2013, 2014.
# Pavel Maryanov <acid@jack.kiev.ua>, 2013.
msgid ""
msgstr ""
-"Project-Id-Version: gst-plugins-good 1.2.1\n"
+"Project-Id-Version: gst-plugins-good 1.3.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-21 12:10+0200\n"
-"PO-Revision-Date: 2013-12-08 12:55+0400\n"
+"POT-Creation-Date: 2014-06-22 17:33+0200\n"
+"PO-Revision-Date: 2014-05-22 19:53+0400\n"
"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
"Language-Team: Russian <gnu@mx.ru>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 1.4\n"
+"X-Generator: Lokalize 1.5\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
@@ -251,9 +251,10 @@ msgstr "Устройство «%s» не может осуществлять з
msgid "Device '%s' cannot capture in the specified format"
msgstr "Устройство «%s» не может осуществлять захват в указанном формате"
-#, fuzzy, c-format
+#, c-format
msgid "Device '%s' does support non-contiguous planes"
-msgstr "Устройство «%s» не поддерживает захват видео"
+msgstr ""
+"Устройство «%s» поддерживает прерывистые матрицы (non-contiguous planes)"
#, c-format
msgid "Could not get parameters on device '%s'"
@@ -262,30 +263,26 @@ msgstr "Не удалось получить параметры устройст
msgid "Video device did not accept new frame rate setting."
msgstr "Видео-устройство не приняло новое значение настройки кадровой частоты."
-#, fuzzy
msgid "Video device did not provide output format."
-msgstr "Видео-устройство не приняло новое значение настройки кадровой частоты."
+msgstr "Видео-устройство не предоставило выходной формат."
msgid "Video device returned invalid dimensions."
-msgstr ""
+msgstr "Видео-устройство вернуло некорректные размеры."
-#, fuzzy
msgid "Video devices uses an unsupported interlacing method."
-msgstr "Драйвер устройства «%s» не поддерживает метод ввода-вывода %d"
+msgstr "Видео-устройства используют неподдерживаемый метод черезстрочности."
msgid "Video devices uses an unsupported pixel format."
-msgstr ""
+msgstr "Видео-устройства используют неподдерживаемый формат пикселей."
-#, fuzzy
msgid "Failed to configure internal buffer pool."
-msgstr "Видео-устройство не может создать буферный пул."
+msgstr "Ошибка при настройке внутреннего буферного пула."
-#, fuzzy
msgid "Video device did not suggest any buffer size."
-msgstr "Видео-устройство не может создать буферный пул."
+msgstr "Видео-устройство не предложило какой-либо размер буфера."
msgid "No downstream pool to import from."
-msgstr ""
+msgstr "Неоткуда импортировать пул нисходящего потока."
#, c-format
msgid "Failed to get settings of tuner %d on device '%s'."
@@ -311,6 +308,35 @@ msgstr "Не удалось выбрать вход %d для устройств
msgid "Failed to change mute state for device '%s'."
msgstr "Не удалось изменить состояние приглушения для устройства «%s»."
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr "Видео-устройства используют неподдерживаемый формат пикселей."
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr "Видео-устройства используют неподдерживаемый формат пикселей."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr "Видео-устройства используют неподдерживаемый формат пикселей."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr "Видео-устройства используют неподдерживаемый формат пикселей."
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+#, fuzzy
+msgid "Failed to start decoding thread."
+msgstr "Не удалось декодировать JPEG-изображение"
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
@@ -355,13 +381,13 @@ msgstr "Устройство «%s» не является устройством
msgid "Device '%s' is not a output device."
msgstr "Устройство «%s» не является устройством вывода."
-#, fuzzy, c-format
+#, c-format
msgid "Device '%s' is not a M2M device."
-msgstr "Устройство «%s» не является устройством вывода."
+msgstr "Устройство «%s» не является устройством M2M."
-#, fuzzy, c-format
+#, c-format
msgid "Could not dup device '%s' for reading and writing."
-msgstr "Не удалось открыть устройство «%s» для чтения и записи."
+msgstr "Не удалось сделать дубликат устройства «%s» для чтения и записи."
#, c-format
msgid "Failed to set norm for device '%s'."
diff --git a/po/sk.gmo b/po/sk.gmo
index 2f9cedf8..9c7fc801 100644
--- a/po/sk.gmo
+++ b/po/sk.gmo
Binary files differ
diff --git a/po/sk.po b/po/sk.po
index 3f37ae0c..c85bc58c 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-good 1.2.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-21 12:10+0200\n"
+"POT-Creation-Date: 2014-06-22 17:33+0200\n"
"PO-Revision-Date: 2014-01-30 11:08+0100\n"
"Last-Translator: Peter Tuharsky <tuharsky@misbb.sk>\n"
"Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
@@ -303,6 +303,35 @@ msgstr "Nepodarilo sa nastaviť vstup %d na zariadení %s."
msgid "Failed to change mute state for device '%s'."
msgstr "Nepodarilo sa zmeniť stav stlmenia pre zariadenie '%s'."
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr "Tento ovládač zariadenia '%s' nepodporuje IO metódu %d"
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr "Video zariadenie odmietlo nové nastavenie frekvencie snímok."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr "Video zariadenie odmietlo nové nastavenie frekvencie snímok."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr "Video zariadenie odmietlo nové nastavenie frekvencie snímok."
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+#, fuzzy
+msgid "Failed to start decoding thread."
+msgstr "Nepodarilo sa dekódovať obrázok JPEG"
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
diff --git a/po/sl.gmo b/po/sl.gmo
index a3ae907f..dd91019b 100644
--- a/po/sl.gmo
+++ b/po/sl.gmo
Binary files differ
diff --git a/po/sl.po b/po/sl.po
index a581fed7..402a1c3b 100644
--- a/po/sl.po
+++ b/po/sl.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-good-1.2.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-21 12:10+0200\n"
+"POT-Creation-Date: 2014-06-22 17:33+0200\n"
"PO-Revision-Date: 2014-04-09 22:52+0100\n"
"Last-Translator: Klemen Košir <klemen913@gmail.com>\n"
"Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n"
@@ -308,6 +308,35 @@ msgid "Failed to change mute state for device '%s'."
msgstr ""
"Med nastavljanjem stanja glasnosti na napravi \"%s\" je prišlo do napake."
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr "Gonilnik naprave \"%s\" ne podpira nobenega načina I/O %d."
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr "Napravi ni mogoče določiti novih nastavitev hitrosti sličic."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr "Napravi ni mogoče določiti novih nastavitev hitrosti sličic."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr "Napravi ni mogoče določiti novih nastavitev hitrosti sličic."
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+#, fuzzy
+msgid "Failed to start decoding thread."
+msgstr "Napaka med dekodiranjem JPEG slike"
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
diff --git a/po/sq.gmo b/po/sq.gmo
index 6e62dd08..f04bbc3d 100644
--- a/po/sq.gmo
+++ b/po/sq.gmo
Binary files differ
diff --git a/po/sq.po b/po/sq.po
index 2061e2be..44c4972f 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: 2014-05-21 12:10+0200\n"
+"POT-Creation-Date: 2014-06-22 17:33+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"
@@ -289,6 +289,34 @@ msgstr "E pamundur mbyllja e dispozitivit audio \"%s\"."
msgid "Failed to change mute state for device '%s'."
msgstr "E pamundur marrja e buffers nga dispozitivi \"%s\"."
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr ""
+
+#, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr ""
+
+#, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr ""
+
+#, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr ""
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+msgid "Failed to start decoding thread."
+msgstr ""
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
diff --git a/po/sr.gmo b/po/sr.gmo
index 7c05ceb7..82a13af2 100644
--- a/po/sr.gmo
+++ b/po/sr.gmo
Binary files differ
diff --git a/po/sr.po b/po/sr.po
index 0658a7cd..441ecf23 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -1,14 +1,14 @@
# Serbian translation of gst-plugins
-# Copyright (C) 2004 Free Software Foundation, Inc.
+# Copyright (C) 2014 Free Software Foundation, Inc.
# This file is distributed under the same license as the gst-plugins-good package.
# Danilo Segan <dsegan@gmx.net>, 2004.
-# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2011, 2013.
+# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2011-2014.
msgid ""
msgstr ""
-"Project-Id-Version: gst-plugins-good-1.1.4\n"
+"Project-Id-Version: gst-plugins-good-1.3.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-21 12:10+0200\n"
-"PO-Revision-Date: 2013-10-04 12:15+0200\n"
+"POT-Creation-Date: 2014-06-22 17:33+0200\n"
+"PO-Revision-Date: 2014-06-18 19:56+0200\n"
"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
"Language-Team: Serbian <(nothing)>\n"
"Language: sr\n"
@@ -17,7 +17,6 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Project-Style: gnome\n"
msgid "Jack server not found"
msgstr "Нисам пронашао сервер утичнице"
@@ -244,9 +243,9 @@ msgstr "Уређај „%s“ не може да снима на %dx%d"
msgid "Device '%s' cannot capture in the specified format"
msgstr "Уређај „%s“ не може да снима у наведеном запису"
-#, fuzzy, c-format
+#, c-format
msgid "Device '%s' does support non-contiguous planes"
-msgstr "Уређај „%s“ не подржава видео снимање"
+msgstr "Уређај „%s“ не подржава не-непрекидне равни"
#, c-format
msgid "Could not get parameters on device '%s'"
@@ -255,30 +254,26 @@ msgstr "Не могу да добавим параметре на уређају
msgid "Video device did not accept new frame rate setting."
msgstr "Видео уређај не прихвата нове поставке протока кадрова."
-#, fuzzy
msgid "Video device did not provide output format."
-msgstr "Видео уређај не прихвата нове поставке протока кадрова."
+msgstr "Видео уређај не обезбеђује излазни запис."
msgid "Video device returned invalid dimensions."
-msgstr ""
+msgstr "Видео уређај је вратио неисправне димензије."
-#, fuzzy
msgid "Video devices uses an unsupported interlacing method."
-msgstr "Управљачки програм уређаја „%s“ не подржава УИ начин %d"
+msgstr "Видео уређаји користе неподржани метод преплитања."
msgid "Video devices uses an unsupported pixel format."
-msgstr ""
+msgstr "Видео уређаји користе неподржани запис сличице."
-#, fuzzy
msgid "Failed to configure internal buffer pool."
-msgstr "Видео уређај не може да направи смештај међумеморије."
+msgstr "Нисам успео да подесим унутрашњи смештај међумеморије."
-#, fuzzy
msgid "Video device did not suggest any buffer size."
-msgstr "Видео уређај не може да направи смештај међумеморије."
+msgstr "Видео уређај не предлаже величину међумеморије."
msgid "No downstream pool to import from."
-msgstr ""
+msgstr "Нема смештаја доњег тока из кога увести."
#, c-format
msgid "Failed to get settings of tuner %d on device '%s'."
@@ -304,6 +299,35 @@ msgstr "Нисам успео да подесим улаз %d на уређај
msgid "Failed to change mute state for device '%s'."
msgstr "Нисам успео да изменим стање утишаности за уређај „%s“."
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr "Видео уређаји користе неподржани запис сличице."
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr "Видео уређаји користе неподржани запис сличице."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr "Видео уређаји користе неподржани запис сличице."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr "Видео уређаји користе неподржани запис сличице."
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+#, fuzzy
+msgid "Failed to start decoding thread."
+msgstr "Нисам успео да декодирам ЈПЕГ слику"
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
@@ -348,13 +372,13 @@ msgstr "Уређај „%s“ није уређај за снимање."
msgid "Device '%s' is not a output device."
msgstr "Уређај „%s“ није излазни уређај."
-#, fuzzy, c-format
+#, c-format
msgid "Device '%s' is not a M2M device."
-msgstr "Уређај „%s“ није излазни уређај."
+msgstr "Уређај „%s“ није М2М уређај."
-#, fuzzy, c-format
+#, c-format
msgid "Could not dup device '%s' for reading and writing."
-msgstr "Не могу да покренем уређај „%s“ ради читања и уписа."
+msgstr "Не могу да удвостручим уређај „%s“ ради читања и уписа."
#, c-format
msgid "Failed to set norm for device '%s'."
diff --git a/po/sv.gmo b/po/sv.gmo
index 4d4fcb67..954a1b38 100644
--- a/po/sv.gmo
+++ b/po/sv.gmo
Binary files differ
diff --git a/po/sv.po b/po/sv.po
index 4a36f3ee..2e2e963e 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: 2014-05-21 12:10+0200\n"
+"POT-Creation-Date: 2014-06-22 17:33+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"
@@ -306,6 +306,35 @@ msgstr "Kunde inte ställa in ingång %d på enheten %s."
msgid "Failed to change mute state for device '%s'."
msgstr "Misslyckades med att få tag på signalstyrka för enheten \"%s\"."
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr "Drivrutinen för enheten \"%s\" saknar stöd för någon känd fångstmetod."
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr "Videoingångsenheten accepterade inte ny inställning för bildfrekvens."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr "Videoingångsenheten accepterade inte ny inställning för bildfrekvens."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr "Videoingångsenheten accepterade inte ny inställning för bildfrekvens."
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+#, fuzzy
+msgid "Failed to start decoding thread."
+msgstr "Misslyckades med att avkoda JPEG-bild"
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
diff --git a/po/tr.gmo b/po/tr.gmo
index bb266c55..b9749c1a 100644
--- a/po/tr.gmo
+++ b/po/tr.gmo
Binary files differ
diff --git a/po/tr.po b/po/tr.po
index 13d74624..cad211b7 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: 2014-05-21 12:10+0200\n"
+"POT-Creation-Date: 2014-06-22 17:33+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"
@@ -299,6 +299,35 @@ msgstr "Giriş değeri olarak bu %d şu aygıtta %s ayarlanamadı."
msgid "Failed to change mute state for device '%s'."
msgstr "Aygıt '%s' susturulmaya ayarlanamadı."
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr "Bu aygıtın sürücüsü '%s' IO yöntemini desteklemiyor %d"
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr "Bu aygıtın sürücüsü '%s' IO yöntemini desteklemiyor %d"
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr "Bu aygıtın sürücüsü '%s' IO yöntemini desteklemiyor %d"
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr "Bu aygıtın sürücüsü '%s' IO yöntemini desteklemiyor %d"
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+#, fuzzy
+msgid "Failed to start decoding thread."
+msgstr "JPEG görüntüsünü çözümlenemedi"
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
diff --git a/po/uk.gmo b/po/uk.gmo
index 8d0b0289..b38ff025 100644
--- a/po/uk.gmo
+++ b/po/uk.gmo
Binary files differ
diff --git a/po/uk.po b/po/uk.po
index 5f808119..664b6f3e 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -3,13 +3,13 @@
# This file is distributed under the same license as the gst-plugins-good package.
#
# Maxim V. Dziumanenko <dziumanenko@gmail.com>, 2004-2007.
-# Yuri Chornoivan <yurchor@ukr.net>, 2011, 2012, 2013.
+# Yuri Chornoivan <yurchor@ukr.net>, 2011, 2012, 2013, 2014.
msgid ""
msgstr ""
-"Project-Id-Version: gst-plugins-good 1.1.4\n"
+"Project-Id-Version: gst-plugins-good 1.3.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-21 12:10+0200\n"
-"PO-Revision-Date: 2013-09-14 22:23+0300\n"
+"POT-Creation-Date: 2014-06-22 17:33+0200\n"
+"PO-Revision-Date: 2014-05-22 07:28+0300\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
"Language: uk\n"
@@ -251,9 +251,10 @@ msgstr "Пристрій \"%s\" не здатний захоплювати ві
msgid "Device '%s' cannot capture in the specified format"
msgstr "Пристрій \"%s\" не здатний захоплювати відео у вказаному форматі"
-#, fuzzy, c-format
+#, c-format
msgid "Device '%s' does support non-contiguous planes"
-msgstr "Пристрій «%s» не може захоплювати відеодані"
+msgstr ""
+"У пристрої «%s» не передбачено можливості використання розривних площин"
#, c-format
msgid "Could not get parameters on device '%s'"
@@ -263,31 +264,26 @@ msgid "Video device did not accept new frame rate setting."
msgstr ""
"Відеопристроєм не підтримується нове значення параметра частоти кадрів."
-#, fuzzy
msgid "Video device did not provide output format."
-msgstr ""
-"Відеопристроєм не підтримується нове значення параметра частоти кадрів."
+msgstr "Відеопристроєм не надано даних щодо формату виведення."
msgid "Video device returned invalid dimensions."
-msgstr ""
+msgstr "Відеопристроєм повернуто некоректні розмірності."
-#, fuzzy
msgid "Video devices uses an unsupported interlacing method."
-msgstr "Драйвер пристрою «%s» не підтримує метод введення-виведення даних %d"
+msgstr "Драйвер пристрою «%s» не підтримує метод черезрядкового виведення."
msgid "Video devices uses an unsupported pixel format."
-msgstr ""
+msgstr "Відеопристрій використовує непідтримуваний формат пікселів."
-#, fuzzy
msgid "Failed to configure internal buffer pool."
-msgstr "Відеопристрою не вдалося створити сховище буферизованих даних."
+msgstr "Не вдалося налаштувати вбудований буфер."
-#, fuzzy
msgid "Video device did not suggest any buffer size."
-msgstr "Відеопристрою не вдалося створити сховище буферизованих даних."
+msgstr "Відеопристроєм не запропоновано жодного розміру буфера."
msgid "No downstream pool to import from."
-msgstr ""
+msgstr "Немає підлеглого буфера для імпортування даних."
#, c-format
msgid "Failed to get settings of tuner %d on device '%s'."
@@ -313,6 +309,35 @@ msgstr "Не вдалося встановити ввід %d пристрою «
msgid "Failed to change mute state for device '%s'."
msgstr "Не вдалося змінити стан вимикання звуку на пристрої «%s»."
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr "Відеопристрій використовує непідтримуваний формат пікселів."
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr "Відеопристрій використовує непідтримуваний формат пікселів."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr "Відеопристрій використовує непідтримуваний формат пікселів."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr "Відеопристрій використовує непідтримуваний формат пікселів."
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+#, fuzzy
+msgid "Failed to start decoding thread."
+msgstr "Помилка при декодуванні зображення JPEG"
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
@@ -357,13 +382,13 @@ msgstr "Пристрій «%s» не є пристроєм захоплення.
msgid "Device '%s' is not a output device."
msgstr "Пристрій «%s» не є пристроєм виведення даних."
-#, fuzzy, c-format
+#, c-format
msgid "Device '%s' is not a M2M device."
-msgstr "Пристрій «%s» не є пристроєм виведення даних."
+msgstr "Пристрій «%s» не є пристроєм M2M."
-#, fuzzy, c-format
+#, c-format
msgid "Could not dup device '%s' for reading and writing."
-msgstr "Не вдалося відкрити пристрій «%s» для читання та запису."
+msgstr "Не вдалося здублювати пристрій «%s» для читання та запису."
#, c-format
msgid "Failed to set norm for device '%s'."
diff --git a/po/vi.gmo b/po/vi.gmo
index fc8ae940..40bb2aed 100644
--- a/po/vi.gmo
+++ b/po/vi.gmo
Binary files differ
diff --git a/po/vi.po b/po/vi.po
index 2172b42a..43fb4cc6 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: 2014-05-21 12:10+0200\n"
+"POT-Creation-Date: 2014-06-22 17:33+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"
@@ -309,6 +309,35 @@ msgstr "Gặp lỗi khi đặt dữ liệu nhập %d vào thiết bị “%s”.
msgid "Failed to change mute state for device '%s'."
msgstr "Gặp lỗi khi thay đổi trạng thái ngắt tiếng cho thiết bị “%s”."
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr "Trình điều khiển của thiết bị “%s” không hỗ trợ phương pháp VR %d"
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr "Thiết bị video không chấp nhận cài đặt về tốc độ khung hình mới."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr "Thiết bị video không chấp nhận cài đặt về tốc độ khung hình mới."
+
+#, fuzzy, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr "Thiết bị video không chấp nhận cài đặt về tốc độ khung hình mới."
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+#, fuzzy
+msgid "Failed to start decoding thread."
+msgstr "Gặp lỗi khi giải mã ảnh JPEG"
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo
index c6816cf9..bd7d7ef3 100644
--- a/po/zh_CN.gmo
+++ b/po/zh_CN.gmo
Binary files differ
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 11275154..7e2e1d64 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: 2014-05-21 12:10+0200\n"
+"POT-Creation-Date: 2014-06-22 17:33+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"
@@ -298,6 +298,35 @@ msgstr "设置设备 %2$s 上的输入 %1$d 时出错。"
msgid "Failed to change mute state for device '%s'."
msgstr "获取设备‘%s’的信号长度时出错。"
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, fuzzy, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr "设备‘%s’的驱动不支持任何已知的捕获方式。"
+
+#, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr ""
+
+#, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr ""
+
+#, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr ""
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+#, fuzzy
+msgid "Failed to start decoding thread."
+msgstr "解码 JPEG 图像出错"
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
diff --git a/po/zh_HK.gmo b/po/zh_HK.gmo
index c7c60a99..f7087e0e 100644
--- a/po/zh_HK.gmo
+++ b/po/zh_HK.gmo
Binary files differ
diff --git a/po/zh_HK.po b/po/zh_HK.po
index bd7bf836..052535bc 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: 2014-05-21 12:10+0200\n"
+"POT-Creation-Date: 2014-06-22 17:33+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"
@@ -284,6 +284,34 @@ msgstr ""
msgid "Failed to change mute state for device '%s'."
msgstr ""
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr ""
+
+#, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr ""
+
+#, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr ""
+
+#, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr ""
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+msgid "Failed to start decoding thread."
+msgstr ""
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
diff --git a/po/zh_TW.gmo b/po/zh_TW.gmo
index b1af7483..61a44027 100644
--- a/po/zh_TW.gmo
+++ b/po/zh_TW.gmo
Binary files differ
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 1e82da2c..8fdf23ab 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: 2014-05-21 12:10+0200\n"
+"POT-Creation-Date: 2014-06-22 17:33+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"
@@ -284,6 +284,34 @@ msgstr ""
msgid "Failed to change mute state for device '%s'."
msgstr ""
+msgid "Failed to allocated required memory."
+msgstr ""
+
+#, c-format
+msgid "Converter on device %s has no supported input format"
+msgstr ""
+
+#, c-format
+msgid "Converter on device %s has no supported output format"
+msgstr ""
+
+#, c-format
+msgid "Encoder on device %s has no supported input format"
+msgstr ""
+
+#, c-format
+msgid "Encoder on device %s has no supported output format"
+msgstr ""
+
+msgid "Failed to allocate required memory."
+msgstr ""
+
+msgid "Failed to start decoding thread."
+msgstr ""
+
+msgid "Failed to process frame."
+msgstr ""
+
#, c-format
msgid ""
"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
diff --git a/sys/oss/gstosshelper.c b/sys/oss/gstosshelper.c
index 9fc27013..e649e008 100644
--- a/sys/oss/gstosshelper.c
+++ b/sys/oss/gstosshelper.c
@@ -81,80 +81,76 @@ static int gst_oss_helper_rate_int_compare (gconstpointer a, gconstpointer b);
GstCaps *
gst_oss_helper_probe_caps (gint fd)
{
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+ const guint probe_formats[] = { AFMT_S16_LE, AFMT_U16_LE, AFMT_U8, AFMT_S8 };
+#else
+ const guint probe_formats[] = { AFMT_S16_BE, AFMT_U16_BE, AFMT_U8, AFMT_S8 };
+#endif
GstOssProbe *probe;
- int i;
+ int i, f;
gboolean ret;
GstStructure *structure;
- unsigned int format_bit;
- unsigned int format_mask;
GstCaps *caps;
/* FIXME test make sure we're not currently playing */
/* FIXME test both mono and stereo */
- format_mask = AFMT_U8 | AFMT_S8;
-
- if (G_BYTE_ORDER == G_LITTLE_ENDIAN)
- format_mask |= AFMT_S16_LE | AFMT_U16_LE;
- else
- format_mask |= AFMT_S16_BE | AFMT_U16_BE;
-
caps = gst_caps_new_empty ();
/* assume that the most significant bit of format_mask is 0 */
- for (format_bit = 1 << 31; format_bit > 0; format_bit >>= 1) {
- if (format_bit & format_mask) {
- GValue rate_value = { 0 };
-
- probe = g_new0 (GstOssProbe, 1);
- probe->fd = fd;
- probe->format = format_bit;
- /* FIXME: this is not working for all cards, see bug #518474 */
- probe->n_channels = 2;
-
- ret = gst_oss_helper_rate_probe_check (probe);
- if (probe->min == -1 || probe->max == -1) {
- g_array_free (probe->rates, TRUE);
- g_free (probe);
- continue;
- }
+ for (f = 0; f < G_N_ELEMENTS (probe_formats); ++f) {
+ GValue rate_value = { 0 };
- if (ret) {
- GValue value = { 0 };
+ probe = g_new0 (GstOssProbe, 1);
+ probe->fd = fd;
+ probe->format = probe_formats[f];
+ /* FIXME: this is not working for all cards, see bug #518474 */
+ probe->n_channels = 2;
- g_array_sort (probe->rates, gst_oss_helper_rate_int_compare);
+ ret = gst_oss_helper_rate_probe_check (probe);
+ if (probe->min == -1 || probe->max == -1) {
+ g_array_free (probe->rates, TRUE);
+ g_free (probe);
+ continue;
+ }
- g_value_init (&rate_value, GST_TYPE_LIST);
- g_value_init (&value, G_TYPE_INT);
+ if (ret) {
+ GValue value = { 0 };
- for (i = 0; i < probe->rates->len; i++) {
- g_value_set_int (&value, g_array_index (probe->rates, int, i));
+ g_array_sort (probe->rates, gst_oss_helper_rate_int_compare);
- gst_value_list_append_value (&rate_value, &value);
- }
+ g_value_init (&rate_value, GST_TYPE_LIST);
+ g_value_init (&value, G_TYPE_INT);
- g_value_unset (&value);
- } else {
- /* one big range */
- g_value_init (&rate_value, GST_TYPE_INT_RANGE);
- gst_value_set_int_range (&rate_value, probe->min, probe->max);
+ for (i = 0; i < probe->rates->len; i++) {
+ g_value_set_int (&value, g_array_index (probe->rates, int, i));
+
+ gst_value_list_append_value (&rate_value, &value);
}
- g_array_free (probe->rates, TRUE);
- g_free (probe);
+ g_value_unset (&value);
+ } else {
+ /* one big range */
+ g_value_init (&rate_value, GST_TYPE_INT_RANGE);
+ gst_value_set_int_range (&rate_value, probe->min, probe->max);
+ }
- structure = gst_oss_helper_get_format_structure (format_bit);
- gst_structure_set (structure, "channels", GST_TYPE_INT_RANGE, 1, 2, NULL);
- gst_structure_set_value (structure, "rate", &rate_value);
- g_value_unset (&rate_value);
+ g_array_free (probe->rates, TRUE);
+ g_free (probe);
- gst_caps_append_structure (caps, structure);
- }
+ structure = gst_oss_helper_get_format_structure (probe_formats[f]);
+ gst_structure_set (structure, "channels", GST_TYPE_INT_RANGE, 1, 2, NULL);
+ gst_structure_set_value (structure, "rate", &rate_value);
+ g_value_unset (&rate_value);
+
+ gst_caps_append_structure (caps, structure);
}
if (gst_caps_is_empty (caps)) {
/* fixme: make user-visible */
GST_WARNING ("Your OSS device could not be probed correctly");
+ } else {
+ caps = gst_caps_simplify (caps);
}
GST_DEBUG ("probed caps: %" GST_PTR_FORMAT, caps);
diff --git a/sys/v4l2/gstv4l2allocator.c b/sys/v4l2/gstv4l2allocator.c
index dc93b2be..416770b5 100644
--- a/sys/v4l2/gstv4l2allocator.c
+++ b/sys/v4l2/gstv4l2allocator.c
@@ -765,6 +765,8 @@ gst_v4l2_allocator_stop (GstV4l2Allocator * allocator)
if (v4l2_ioctl (allocator->video_fd, VIDIOC_REQBUFS, &breq) < 0)
goto reqbufs_failed;
+ allocator->count = 0;
+
g_atomic_int_set (&allocator->active, FALSE);
done:
@@ -1219,6 +1221,8 @@ gst_v4l2_allocator_qbuf (GstV4l2Allocator * allocator,
gboolean ret = TRUE;
gint i;
+ g_return_val_if_fail (g_atomic_int_get (&allocator->active), FALSE);
+
/* update sizes */
if (V4L2_TYPE_IS_MULTIPLANAR (allocator->type)) {
for (i = 0; i < group->n_mem; i++)
@@ -1266,6 +1270,8 @@ gst_v4l2_allocator_dqbuf (GstV4l2Allocator * allocator)
GstV4l2MemoryGroup *group = NULL;
+ g_return_val_if_fail (g_atomic_int_get (&allocator->active), FALSE);
+
buffer.type = allocator->type;
buffer.memory = allocator->memory;
diff --git a/sys/v4l2/gstv4l2bufferpool.c b/sys/v4l2/gstv4l2bufferpool.c
index f213769d..f5c74c8f 100644
--- a/sys/v4l2/gstv4l2bufferpool.c
+++ b/sys/v4l2/gstv4l2bufferpool.c
@@ -194,7 +194,7 @@ gst_v4l2_buffer_pool_import_userptr (GstV4l2BufferPool * pool,
if (!gst_v4l2_is_buffer_valid (dest, &group))
goto not_our_buffer;
- if (!V4L2_TYPE_IS_OUTPUT (pool->obj->type))
+ if (V4L2_TYPE_IS_OUTPUT (pool->obj->type))
flags = GST_MAP_READ;
else
flags = GST_MAP_WRITE;
@@ -406,7 +406,7 @@ gst_v4l2_buffer_pool_alloc_buffer (GstBufferPool * bpool, GstBuffer ** buffer,
allocation_failed:
{
GST_ERROR_OBJECT (pool, "failed to allocate buffer");
- return FALSE;
+ return GST_FLOW_ERROR;
}
}
@@ -520,80 +520,69 @@ wrong_config:
}
static gboolean
-start_streaming (GstV4l2BufferPool * pool)
+gst_v4l2_buffer_pool_streamon (GstV4l2BufferPool * pool)
{
GstV4l2Object *obj = pool->obj;
- GST_DEBUG_OBJECT (pool, "start streaming");
-
- if (pool->streaming)
- return TRUE;
-
switch (obj->mode) {
- case GST_V4L2_IO_RW:
- break;
case GST_V4L2_IO_MMAP:
case GST_V4L2_IO_USERPTR:
case GST_V4L2_IO_DMABUF:
case GST_V4L2_IO_DMABUF_IMPORT:
- {
- /* For capture device, we need to re-enqueue buffers before be can let
- * the driver stream again */
- if (!V4L2_TYPE_IS_OUTPUT (obj->type) && pool->vallocator) {
- GstBufferPool *bpool = GST_BUFFER_POOL (pool);
- GstBufferPoolAcquireParams params = { 0 };
- gsize num_allocated, num_to_queue;
- GstFlowReturn ret;
-
- num_allocated = gst_v4l2_allocator_num_allocated (pool->vallocator);
- num_to_queue = num_allocated - pool->num_queued;
+ if (!pool->streaming) {
+ if (v4l2_ioctl (pool->video_fd, VIDIOC_STREAMON, &obj->type) < 0)
+ goto streamon_failed;
- while (num_to_queue > 0) {
- GstBuffer *buf;
+ pool->streaming = TRUE;
- params.flags = GST_BUFFER_POOL_ACQUIRE_FLAG_DONTWAIT;
- ret = GST_BUFFER_POOL_CLASS (parent_class)->acquire_buffer (bpool,
- &buf, &params);
+ GST_DEBUG_OBJECT (pool, "Started streaming");
+ }
+ break;
+ default:
+ break;
+ }
- if (ret != GST_FLOW_OK)
- goto requeue_failed;
+ return TRUE;
- gst_v4l2_buffer_pool_release_buffer (bpool, buf);
- num_to_queue--;
- }
+streamon_failed:
+ {
+ GST_ERROR_OBJECT (pool, "error with STREAMON %d (%s)", errno,
+ g_strerror (errno));
+ return FALSE;
+ }
+}
- if (num_allocated != pool->num_queued)
- goto requeue_failed;
- }
+static gboolean
+gst_v4l2_buffer_pool_streamoff (GstV4l2BufferPool * pool)
+{
+ GstV4l2Object *obj = pool->obj;
- if (v4l2_ioctl (pool->video_fd, VIDIOC_STREAMON, &obj->type) < 0)
- goto start_failed;
+ switch (obj->mode) {
+ case GST_V4L2_IO_MMAP:
+ case GST_V4L2_IO_USERPTR:
+ case GST_V4L2_IO_DMABUF:
+ case GST_V4L2_IO_DMABUF_IMPORT:
+ if (pool->streaming) {
+ if (v4l2_ioctl (pool->video_fd, VIDIOC_STREAMOFF, &obj->type) < 0)
+ goto streamoff_failed;
- GST_DEBUG_OBJECT (pool, "STREAMON");
+ pool->streaming = FALSE;
+ GST_DEBUG_OBJECT (pool, "Stopped streaming");
+ }
break;
- }
default:
- g_assert_not_reached ();
break;
}
- pool->streaming = TRUE;
-
return TRUE;
- /* ERRORS */
-start_failed:
+streamoff_failed:
{
- GST_ERROR_OBJECT (pool, "error with STREAMON %d (%s)", errno,
+ GST_ERROR_OBJECT (pool, "error with STREAMOFF %d (%s)", errno,
g_strerror (errno));
return FALSE;
}
-requeue_failed:
- {
- GST_ERROR_OBJECT (pool, "failed to re-enqueue buffers");
- return FALSE;
- }
}
static void
@@ -618,42 +607,43 @@ static gboolean
gst_v4l2_buffer_pool_start (GstBufferPool * bpool)
{
GstV4l2BufferPool *pool = GST_V4L2_BUFFER_POOL (bpool);
+ GstBufferPoolClass *pclass = GST_BUFFER_POOL_CLASS (parent_class);
GstV4l2Object *obj = pool->obj;
GstStructure *config;
GstCaps *caps;
guint size, min_buffers, max_buffers;
- guint num_buffers = 0, copy_threshold = 0;
+ guint max_latency, min_latency, copy_threshold = 0;
+ gboolean can_allocate = FALSE;
+
+ GST_DEBUG_OBJECT (pool, "activating pool");
config = gst_buffer_pool_get_config (bpool);
if (!gst_buffer_pool_config_get_params (config, &caps, &size, &min_buffers,
&max_buffers))
goto wrong_config;
+ /* TODO Also consider min_buffers_for_output when implemented */
+ min_latency = MAX (GST_V4L2_MIN_BUFFERS, obj->min_buffers_for_capture);
+
switch (obj->mode) {
case GST_V4L2_IO_RW:
- /* this value also instructs the latency calculation to have min_buffers
- * frame latency max */
- num_buffers = min_buffers;
+ can_allocate = TRUE;
break;
case GST_V4L2_IO_DMABUF:
case GST_V4L2_IO_MMAP:
{
guint count;
- if (GST_V4L2_ALLOCATOR_CAN_ALLOCATE (pool->vallocator, MMAP)) {
- num_buffers = min_buffers;
- } else {
- num_buffers = max_buffers;
- }
+ can_allocate = GST_V4L2_ALLOCATOR_CAN_ALLOCATE (pool->vallocator, MMAP);
/* first, lets request buffers, and see how many we can get: */
- GST_DEBUG_OBJECT (pool, "requesting %d MMAP buffers", num_buffers);
+ GST_DEBUG_OBJECT (pool, "requesting %d MMAP buffers", min_buffers);
- count = gst_v4l2_allocator_start (pool->vallocator, num_buffers,
+ count = gst_v4l2_allocator_start (pool->vallocator, min_buffers,
V4L2_MEMORY_MMAP);
if (count < GST_V4L2_MIN_BUFFERS) {
- num_buffers = count;
+ min_buffers = count;
goto no_buffers;
}
@@ -662,12 +652,11 @@ gst_v4l2_buffer_pool_start (GstBufferPool * bpool)
* falling back to copy if the pipeline needed more buffers. This also
* prevent having to do REQBUFS(N)/REQBUFS(0) everytime configure is
* called. */
- if (count != num_buffers) {
+ if (count != min_buffers) {
GST_WARNING_OBJECT (pool, "using %u buffers instead of %u",
- count, num_buffers);
- num_buffers = count;
- copy_threshold =
- MAX (GST_V4L2_MIN_BUFFERS, obj->min_buffers_for_capture);
+ count, min_buffers);
+ min_buffers = count;
+ copy_threshold = min_latency;
/* The initial minimum could be provide either by GstBufferPool or
* driver needs. */
@@ -680,60 +669,59 @@ gst_v4l2_buffer_pool_start (GstBufferPool * bpool)
{
guint count;
- if (GST_V4L2_ALLOCATOR_CAN_ALLOCATE (pool->vallocator, USERPTR)) {
- num_buffers = min_buffers;
- } else {
- num_buffers = max_buffers;
- }
+ can_allocate =
+ GST_V4L2_ALLOCATOR_CAN_ALLOCATE (pool->vallocator, USERPTR);
- GST_DEBUG_OBJECT (pool, "requesting %d USERPTR buffers", num_buffers);
+ GST_DEBUG_OBJECT (pool, "requesting %d USERPTR buffers", min_buffers);
- count = gst_v4l2_allocator_start (pool->vallocator, num_buffers,
+ count = gst_v4l2_allocator_start (pool->vallocator, min_buffers,
V4L2_MEMORY_USERPTR);
/* There is no rational to not get what we asked */
- if (count < num_buffers) {
- num_buffers = count;
+ if (count < min_buffers) {
+ min_buffers = count;
goto no_buffers;
}
- min_buffers = num_buffers = count;
+ min_buffers = count;
break;
}
case GST_V4L2_IO_DMABUF_IMPORT:
{
guint count;
- if (GST_V4L2_ALLOCATOR_CAN_ALLOCATE (pool->vallocator, DMABUF)) {
- num_buffers = min_buffers;
- } else {
- num_buffers = max_buffers;
- }
+ can_allocate = GST_V4L2_ALLOCATOR_CAN_ALLOCATE (pool->vallocator, DMABUF);
- GST_DEBUG_OBJECT (pool, "requesting %d DMABUF buffers", num_buffers);
+ GST_DEBUG_OBJECT (pool, "requesting %d DMABUF buffers", min_buffers);
- count = gst_v4l2_allocator_start (pool->vallocator, num_buffers,
+ count = gst_v4l2_allocator_start (pool->vallocator, min_buffers,
V4L2_MEMORY_DMABUF);
/* There is no rational to not get what we asked */
- if (count < num_buffers) {
- num_buffers = count;
+ if (count < min_buffers) {
+ min_buffers = count;
goto no_buffers;
}
- min_buffers = num_buffers = count;
+ min_buffers = count;
break;
}
default:
- num_buffers = 0;
+ min_buffers = 0;
copy_threshold = 0;
g_assert_not_reached ();
break;
}
+ if (can_allocate)
+ max_latency = max_buffers;
+ else
+ max_latency = min_buffers;
+
pool->size = size;
pool->copy_threshold = copy_threshold;
- pool->num_buffers = num_buffers;
+ pool->max_latency = max_latency;
+ pool->min_latency = min_latency;
pool->num_queued = 0;
if (max_buffers < min_buffers)
@@ -741,7 +729,7 @@ gst_v4l2_buffer_pool_start (GstBufferPool * bpool)
gst_buffer_pool_config_set_params (config, caps, size, min_buffers,
max_buffers);
- GST_BUFFER_POOL_CLASS (parent_class)->set_config (bpool, config);
+ pclass->set_config (bpool, config);
gst_structure_free (config);
if (pool->other_pool)
@@ -749,22 +737,14 @@ gst_v4l2_buffer_pool_start (GstBufferPool * bpool)
goto other_pool_failed;
/* now, allocate the buffers: */
- if (!GST_BUFFER_POOL_CLASS (parent_class)->start (bpool))
+ if (!pclass->start (bpool))
goto start_failed;
- /* we can start capturing now, we wait for the playback case until we queued
- * the first buffer */
- if (!V4L2_TYPE_IS_OUTPUT (obj->type))
- if (!start_streaming (pool))
- goto start_failed;
-
if (!V4L2_TYPE_IS_OUTPUT (obj->type))
pool->group_released_handler =
g_signal_connect_swapped (pool->vallocator, "group-released",
G_CALLBACK (gst_v4l2_buffer_pool_group_released), pool);
- gst_poll_set_flushing (obj->poll, FALSE);
-
return TRUE;
/* ERRORS */
@@ -778,7 +758,7 @@ no_buffers:
{
GST_ERROR_OBJECT (pool,
"we received %d buffer from device '%s', we want at least %d",
- num_buffers, obj->videodev, GST_V4L2_MIN_BUFFERS);
+ min_buffers, obj->videodev, GST_V4L2_MIN_BUFFERS);
gst_structure_free (config);
return FALSE;
}
@@ -795,26 +775,103 @@ other_pool_failed:
}
}
-
static gboolean
-stop_streaming (GstV4l2BufferPool * pool)
+gst_v4l2_buffer_pool_stop (GstBufferPool * bpool)
{
- GstV4l2Object *obj = pool->obj;
+ GstV4l2BufferPool *pool = GST_V4L2_BUFFER_POOL (bpool);
+ GstBufferPoolClass *pclass = GST_BUFFER_POOL_CLASS (parent_class);
+ gboolean ret;
gint i;
- GST_DEBUG_OBJECT (pool, "stopping stream");
+ GST_DEBUG_OBJECT (pool, "stopping pool");
+
+ if (pool->group_released_handler > 0) {
+ g_signal_handler_disconnect (pool->vallocator,
+ pool->group_released_handler);
+ pool->group_released_handler = 0;
+ }
+
+ if (pool->other_pool) {
+ gst_object_unref (pool->other_pool);
+ pool->other_pool = NULL;
+ }
+
+ if (!gst_v4l2_buffer_pool_streamoff (pool))
+ goto streamoff_failed;
+
+ gst_v4l2_allocator_flush (pool->vallocator);
+
+ for (i = 0; i < VIDEO_MAX_FRAME; i++) {
+ if (pool->buffers[i]) {
+ GstBuffer *buffer = pool->buffers[i];
+
+ pool->buffers[i] = NULL;
- gst_poll_set_flushing (obj->poll, TRUE);
+ if (V4L2_TYPE_IS_OUTPUT (pool->obj->type))
+ gst_buffer_unref (buffer);
+ else
+ pclass->release_buffer (bpool, buffer);
- if (!pool->streaming) {
- /* it avoid error: STREAMOFF 22 (Invalid argument) when
- * attempting to stop a stream not previously started */
- GST_DEBUG_OBJECT (pool, "no need to stop, was not previously started");
- return TRUE;
+ g_atomic_int_add (&pool->num_queued, -1);
+ }
}
- pool->flushing = TRUE;
+ ret = GST_BUFFER_POOL_CLASS (parent_class)->stop (bpool);
+ if (ret) {
+ GstV4l2Return vret;
+
+ vret = gst_v4l2_allocator_stop (pool->vallocator);
+
+ if (vret == GST_V4L2_BUSY)
+ GST_WARNING_OBJECT (pool, "some buffers are still outstanding");
+
+ ret = (vret == GST_V4L2_OK);
+ }
+
+ return ret;
+
+ /* ERRORS */
+streamoff_failed:
+ GST_ERROR_OBJECT (pool, "device refused to stop streaming");
+ return FALSE;
+}
+
+static void
+gst_v4l2_buffer_pool_flush_start (GstBufferPool * bpool)
+{
+ GstV4l2BufferPool *pool = GST_V4L2_BUFFER_POOL (bpool);
+
+ GST_DEBUG_OBJECT (pool, "start flushing");
+
+ gst_poll_set_flushing (pool->poll, TRUE);
+
+ if (pool->other_pool)
+ gst_buffer_pool_set_flushing (pool->other_pool, TRUE);
+}
+
+static void
+gst_v4l2_buffer_pool_flush_stop (GstBufferPool * bpool)
+{
+ GstV4l2BufferPool *pool = GST_V4L2_BUFFER_POOL (bpool);
+ GstV4l2Object *obj = pool->obj;
+ gint i;
+
+ GST_DEBUG_OBJECT (pool, "stop flushing");
+
+ /* If we haven't started streaming yet, simply call streamon */
+ if (!pool->streaming)
+ goto streamon;
+
+ if (pool->other_pool)
+ gst_buffer_pool_set_flushing (pool->other_pool, FALSE);
+
+ if (!gst_v4l2_buffer_pool_streamoff (pool))
+ goto stop_failed;
+
+ gst_v4l2_allocator_flush (pool->vallocator);
+
+ /* Reset our state */
switch (obj->mode) {
case GST_V4L2_IO_RW:
break;
@@ -825,135 +882,95 @@ stop_streaming (GstV4l2BufferPool * pool)
{
gsize num_allocated;
- if (v4l2_ioctl (pool->video_fd, VIDIOC_STREAMOFF, &obj->type) < 0)
- goto stop_failed;
-
- GST_DEBUG_OBJECT (pool, "STREAMOFF");
-
- gst_v4l2_allocator_flush (pool->vallocator);
-
num_allocated = gst_v4l2_allocator_num_allocated (pool->vallocator);
for (i = 0; i < num_allocated; i++) {
+ /* Re-enqueue buffers */
if (pool->buffers[i]) {
GstBufferPool *bpool = (GstBufferPool *) pool;
GstBuffer *buffer = pool->buffers[i];
pool->buffers[i] = NULL;
- pool->num_queued--;
- /* Remove qdata, this will unmap any map data in userptr */
+ /* Remove qdata, this will unmap any map data in
+ * userptr/dmabuf-import */
gst_mini_object_set_qdata (GST_MINI_OBJECT (buffer),
GST_V4L2_IMPORT_QUARK, NULL, NULL);
if (V4L2_TYPE_IS_OUTPUT (obj->type))
gst_buffer_unref (buffer);
else
- /* Give back the outstanding buffer to the pool */
- GST_BUFFER_POOL_CLASS (parent_class)->release_buffer (bpool,
- buffer);
+ gst_v4l2_buffer_pool_release_buffer (bpool, buffer);
+
+ g_atomic_int_add (&pool->num_queued, -1);
}
}
- g_return_val_if_fail (pool->num_queued == 0, FALSE);
break;
}
default:
- g_return_val_if_reached (FALSE);
+ g_assert_not_reached ();
break;
}
- pool->flushing = FALSE;
- pool->streaming = FALSE;
-
- return TRUE;
-
- /* ERRORS */
-stop_failed:
- {
- GST_ERROR_OBJECT (pool, "error with STREAMOFF %d (%s)", errno,
- g_strerror (errno));
- return FALSE;
- }
-}
-
-static gboolean
-gst_v4l2_buffer_pool_stop (GstBufferPool * bpool)
-{
- gboolean ret;
- GstV4l2BufferPool *pool = GST_V4L2_BUFFER_POOL (bpool);
- GstV4l2Object *obj = pool->obj;
-
- GST_DEBUG_OBJECT (pool, "stopping pool");
-
- if (pool->group_released_handler > 0) {
- g_signal_handler_disconnect (pool->vallocator,
- pool->group_released_handler);
- pool->group_released_handler = 0;
- }
-
- gst_poll_set_flushing (obj->poll, TRUE);
- if (!stop_streaming (pool))
- goto stop_failed;
-
- ret = GST_BUFFER_POOL_CLASS (parent_class)->stop (bpool);
-
- if (ret) {
- GstV4l2Return vret;
-
- vret = gst_v4l2_allocator_stop (pool->vallocator);
+streamon:
+ /* Start streaming on capture device only */
+ if (!V4L2_TYPE_IS_OUTPUT (obj->type))
+ gst_v4l2_buffer_pool_streamon (pool);
- if (vret == GST_V4L2_BUSY) {
- GST_WARNING_OBJECT (pool, "allocated buffer need to be reclaimed");
- /* FIXME deal with reclaiming */
- } else if (vret == GST_V4L2_ERROR) {
- ret = FALSE;
- }
- }
+ gst_poll_set_flushing (pool->poll, FALSE);
- return ret;
+ return;
/* ERRORS */
stop_failed:
{
- GST_ERROR_OBJECT (pool, "error with STREAMOFF %d (%s)", errno,
- g_strerror (errno));
- return FALSE;
+ GST_ERROR_OBJECT (pool, "device refused to flush");
}
}
static GstFlowReturn
-gst_v4l2_object_poll (GstV4l2Object * v4l2object)
+gst_v4l2_buffer_pool_poll (GstV4l2BufferPool * pool)
{
gint ret;
- if (v4l2object->can_poll_device) {
- GST_LOG_OBJECT (v4l2object->element, "polling device");
- ret = gst_poll_wait (v4l2object->poll, GST_CLOCK_TIME_NONE);
- if (G_UNLIKELY (ret < 0)) {
- if (errno == EBUSY)
+ if (!pool->can_poll_device)
+ goto done;
+
+ GST_LOG_OBJECT (pool, "polling device");
+
+again:
+ ret = gst_poll_wait (pool->poll, GST_CLOCK_TIME_NONE);
+ if (G_UNLIKELY (ret < 0)) {
+ switch (errno) {
+ case EBUSY:
goto stopped;
- if (errno == ENXIO) {
- GST_WARNING_OBJECT (v4l2object->element,
- "v4l2 device doesn't support polling. Disabling");
- v4l2object->can_poll_device = FALSE;
- } else {
- if (errno != EAGAIN && errno != EINTR)
- goto select_error;
- }
+ case EAGAIN:
+ case EINTR:
+ goto again;
+ case ENXIO:
+ GST_WARNING_OBJECT (pool,
+ "v4l2 device doesn't support polling. Disabling"
+ " using libv4l2 in this case may cause deadlocks");
+ pool->can_poll_device = FALSE;
+ goto done;
+ default:
+ goto select_error;
}
}
+
+done:
return GST_FLOW_OK;
/* ERRORS */
stopped:
{
- GST_DEBUG ("stop called");
+ GST_DEBUG_OBJECT (pool, "stop called");
return GST_FLOW_FLUSHING;
}
select_error:
{
- GST_ELEMENT_ERROR (v4l2object->element, RESOURCE, READ, (NULL),
+ GST_ELEMENT_ERROR (pool->obj->element, RESOURCE, READ, (NULL),
("poll error %d: %s (%d)", ret, g_strerror (errno), errno));
return GST_FLOW_ERROR;
}
@@ -978,12 +995,12 @@ gst_v4l2_buffer_pool_qbuf (GstV4l2BufferPool * pool, GstBuffer * buf)
GST_LOG_OBJECT (pool, "queuing buffer %i", index);
+ g_atomic_int_inc (&pool->num_queued);
+ pool->buffers[index] = buf;
+
if (!gst_v4l2_allocator_qbuf (pool->vallocator, group))
goto queue_failed;
- pool->buffers[index] = buf;
- pool->num_queued++;
-
return GST_FLOW_OK;
already_queued:
@@ -996,6 +1013,8 @@ queue_failed:
GST_ERROR_OBJECT (pool, "could not queue a buffer %i", index);
/* Mark broken buffer to the allocator */
GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_TAG_MEMORY);
+ g_atomic_int_add (&pool->num_queued, -1);
+ pool->buffers[index] = NULL;
return GST_FLOW_ERROR;
}
}
@@ -1010,7 +1029,7 @@ gst_v4l2_buffer_pool_dqbuf (GstV4l2BufferPool * pool, GstBuffer ** buffer)
GstV4l2MemoryGroup *group;
gint i;
- if ((res = gst_v4l2_object_poll (obj)) != GST_FLOW_OK)
+ if ((res = gst_v4l2_buffer_pool_poll (pool)) != GST_FLOW_OK)
goto poll_failed;
GST_LOG_OBJECT (pool, "dequeueing a buffer");
@@ -1028,7 +1047,7 @@ gst_v4l2_buffer_pool_dqbuf (GstV4l2BufferPool * pool, GstBuffer ** buffer)
/* mark the buffer outstanding */
pool->buffers[group->buffer.index] = NULL;
- pool->num_queued--;
+ g_atomic_int_add (&pool->num_queued, -1);
timestamp = GST_TIMEVAL_TO_TIME (group->buffer.timestamp);
@@ -1092,17 +1111,14 @@ gst_v4l2_buffer_pool_acquire_buffer (GstBufferPool * bpool, GstBuffer ** buffer,
{
GstFlowReturn ret;
GstV4l2BufferPool *pool = GST_V4L2_BUFFER_POOL (bpool);
+ GstBufferPoolClass *pclass = GST_BUFFER_POOL_CLASS (parent_class);
GstV4l2Object *obj = pool->obj;
GST_DEBUG_OBJECT (pool, "acquire");
- if (GST_BUFFER_POOL_IS_FLUSHING (bpool))
- goto flushing;
-
/* If this is being called to resurect a lost buffer */
if (params && params->flags & GST_V4L2_POOL_ACQUIRE_FLAG_RESURECT) {
- ret = GST_BUFFER_POOL_CLASS (parent_class)->acquire_buffer (bpool, buffer,
- params);
+ ret = pclass->acquire_buffer (bpool, buffer, params);
goto done;
}
@@ -1114,8 +1130,7 @@ gst_v4l2_buffer_pool_acquire_buffer (GstBufferPool * bpool, GstBuffer ** buffer,
case GST_V4L2_IO_RW:
{
/* take empty buffer from the pool */
- ret = GST_BUFFER_POOL_CLASS (parent_class)->acquire_buffer (bpool,
- buffer, params);
+ ret = pclass->acquire_buffer (bpool, buffer, params);
break;
}
case GST_V4L2_IO_DMABUF:
@@ -1129,12 +1144,11 @@ gst_v4l2_buffer_pool_acquire_buffer (GstBufferPool * bpool, GstBuffer ** buffer,
goto done;
/* start copying buffers when we are running low on buffers */
- if (pool->num_queued < pool->copy_threshold) {
+ if (g_atomic_int_get (&pool->num_queued) < pool->copy_threshold) {
GstBuffer *copy;
if (GST_V4L2_ALLOCATOR_CAN_ALLOCATE (pool->vallocator, MMAP)) {
- if (GST_BUFFER_POOL_CLASS (parent_class)->acquire_buffer (bpool,
- &copy, params) == GST_FLOW_OK) {
+ if (pclass->acquire_buffer (bpool, &copy, params) == GST_FLOW_OK) {
gst_v4l2_buffer_pool_release_buffer (bpool, copy);
break;
}
@@ -1172,8 +1186,7 @@ gst_v4l2_buffer_pool_acquire_buffer (GstBufferPool * bpool, GstBuffer ** buffer,
switch (obj->mode) {
case GST_V4L2_IO_RW:
/* get an empty buffer */
- ret = GST_BUFFER_POOL_CLASS (parent_class)->acquire_buffer (bpool,
- buffer, params);
+ ret = pclass->acquire_buffer (bpool, buffer, params);
break;
case GST_V4L2_IO_MMAP:
@@ -1181,8 +1194,7 @@ gst_v4l2_buffer_pool_acquire_buffer (GstBufferPool * bpool, GstBuffer ** buffer,
case GST_V4L2_IO_USERPTR:
case GST_V4L2_IO_DMABUF_IMPORT:
/* get a free unqueued buffer */
- ret = GST_BUFFER_POOL_CLASS (parent_class)->acquire_buffer (bpool,
- buffer, params);
+ ret = pclass->acquire_buffer (bpool, buffer, params);
break;
default:
@@ -1199,19 +1211,13 @@ gst_v4l2_buffer_pool_acquire_buffer (GstBufferPool * bpool, GstBuffer ** buffer,
}
done:
return ret;
-
- /* ERRORS */
-flushing:
- {
- GST_DEBUG_OBJECT (pool, "We are flushing");
- return GST_FLOW_FLUSHING;
- }
}
static void
gst_v4l2_buffer_pool_release_buffer (GstBufferPool * bpool, GstBuffer * buffer)
{
GstV4l2BufferPool *pool = GST_V4L2_BUFFER_POOL (bpool);
+ GstBufferPoolClass *pclass = GST_BUFFER_POOL_CLASS (parent_class);
GstV4l2Object *obj = pool->obj;
GST_DEBUG_OBJECT (pool, "release buffer %p", buffer);
@@ -1224,7 +1230,7 @@ gst_v4l2_buffer_pool_release_buffer (GstBufferPool * bpool, GstBuffer * buffer)
switch (obj->mode) {
case GST_V4L2_IO_RW:
/* release back in the pool */
- GST_BUFFER_POOL_CLASS (parent_class)->release_buffer (bpool, buffer);
+ pclass->release_buffer (bpool, buffer);
break;
case GST_V4L2_IO_DMABUF:
@@ -1232,23 +1238,17 @@ gst_v4l2_buffer_pool_release_buffer (GstBufferPool * bpool, GstBuffer * buffer)
case GST_V4L2_IO_USERPTR:
case GST_V4L2_IO_DMABUF_IMPORT:
{
- if (pool->flushing) {
- /* put back on outstanding list */
- GST_BUFFER_POOL_CLASS (parent_class)->release_buffer (bpool,
- buffer);
- } else if (gst_v4l2_is_buffer_valid (buffer, NULL)) {
+ if (gst_v4l2_is_buffer_valid (buffer, NULL)) {
/* queue back in the device */
if (pool->other_pool)
gst_v4l2_buffer_pool_prepare_buffer (pool, buffer, NULL);
if (gst_v4l2_buffer_pool_qbuf (pool, buffer) != GST_FLOW_OK)
- GST_BUFFER_POOL_CLASS (parent_class)->release_buffer (bpool,
- buffer);
+ pclass->release_buffer (bpool, buffer);
} else {
/* Simply release invalide/modified buffer, the allocator will
* give it back later */
GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_TAG_MEMORY);
- GST_BUFFER_POOL_CLASS (parent_class)->release_buffer (bpool,
- buffer);
+ pclass->release_buffer (bpool, buffer);
}
break;
}
@@ -1263,7 +1263,7 @@ gst_v4l2_buffer_pool_release_buffer (GstBufferPool * bpool, GstBuffer * buffer)
switch (obj->mode) {
case GST_V4L2_IO_RW:
/* release back in the pool */
- GST_BUFFER_POOL_CLASS (parent_class)->release_buffer (bpool, buffer);
+ pclass->release_buffer (bpool, buffer);
break;
case GST_V4L2_IO_MMAP:
@@ -1278,8 +1278,7 @@ gst_v4l2_buffer_pool_release_buffer (GstBufferPool * bpool, GstBuffer * buffer)
/* Simply release invalide/modified buffer, the allocator will
* give it back later */
GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_TAG_MEMORY);
- GST_BUFFER_POOL_CLASS (parent_class)->release_buffer (bpool,
- buffer);
+ pclass->release_buffer (bpool, buffer);
break;
}
@@ -1297,8 +1296,7 @@ gst_v4l2_buffer_pool_release_buffer (GstBufferPool * bpool, GstBuffer * buffer)
gst_v4l2_allocator_reset_group (pool->vallocator, group);
/* playback, put the buffer back in the queue to refill later. */
- GST_BUFFER_POOL_CLASS (parent_class)->release_buffer (bpool,
- buffer);
+ pclass->release_buffer (bpool, buffer);
} else {
/* We keep a ref on queued buffer, so this should never happen */
g_assert_not_reached ();
@@ -1332,6 +1330,8 @@ gst_v4l2_buffer_pool_finalize (GObject * object)
if (pool->video_fd >= 0)
v4l2_close (pool->video_fd);
+ gst_poll_free (pool->poll);
+
if (pool->vallocator)
gst_object_unref (pool->vallocator);
@@ -1352,6 +1352,8 @@ gst_v4l2_buffer_pool_finalize (GObject * object)
static void
gst_v4l2_buffer_pool_init (GstV4l2BufferPool * pool)
{
+ pool->poll = gst_poll_new (TRUE);
+ pool->can_poll_device = TRUE;
}
static void
@@ -1368,6 +1370,8 @@ gst_v4l2_buffer_pool_class_init (GstV4l2BufferPoolClass * klass)
bufferpool_class->alloc_buffer = gst_v4l2_buffer_pool_alloc_buffer;
bufferpool_class->acquire_buffer = gst_v4l2_buffer_pool_acquire_buffer;
bufferpool_class->release_buffer = gst_v4l2_buffer_pool_release_buffer;
+ bufferpool_class->flush_start = gst_v4l2_buffer_pool_flush_start;
+ bufferpool_class->flush_stop = gst_v4l2_buffer_pool_flush_stop;
}
/**
@@ -1385,6 +1389,7 @@ gst_v4l2_buffer_pool_new (GstV4l2Object * obj, GstCaps * caps)
GstStructure *config;
gchar *name, *parent_name;
gint fd;
+ GstPollFD pollfd = GST_POLL_FD_INIT;
fd = v4l2_dup (obj->video_fd);
if (fd < 0)
@@ -1400,11 +1405,21 @@ gst_v4l2_buffer_pool_new (GstV4l2Object * obj, GstCaps * caps)
"name", name, NULL);
g_free (name);
+ pollfd.fd = fd;
+ gst_poll_add_fd (pool->poll, &pollfd);
+ if (V4L2_TYPE_IS_OUTPUT (obj->type))
+ gst_poll_fd_ctl_write (pool->poll, &pollfd, TRUE);
+ else
+ gst_poll_fd_ctl_read (pool->poll, &pollfd, TRUE);
+
pool->video_fd = fd;
pool->obj = obj;
+ pool->can_poll_device = TRUE;
pool->vallocator =
gst_v4l2_allocator_new (GST_OBJECT (pool), obj->video_fd, &obj->format);
+ if (pool->vallocator == NULL)
+ goto allocator_failed;
gst_object_ref (obj->element);
@@ -1422,6 +1437,11 @@ dup_failed:
GST_ERROR ("failed to dup fd %d (%s)", errno, g_strerror (errno));
return NULL;
}
+allocator_failed:
+ {
+ GST_ERROR_OBJECT (pool, "Failed to create V4L2 allocator");
+ return NULL;
+ }
}
static GstFlowReturn
@@ -1440,7 +1460,7 @@ gst_v4l2_do_read (GstV4l2BufferPool * pool, GstBuffer * buf)
gst_buffer_map (buf, &map, GST_MAP_WRITE);
do {
- if ((res = gst_v4l2_object_poll (obj)) != GST_FLOW_OK)
+ if ((res = gst_v4l2_buffer_pool_poll (pool)) != GST_FLOW_OK)
goto poll_error;
amount = v4l2_read (obj->video_fd, map.data, toread);
@@ -1508,6 +1528,9 @@ gst_v4l2_buffer_pool_process (GstV4l2BufferPool * pool, GstBuffer ** buf)
g_return_val_if_fail (gst_buffer_pool_is_active (bpool), GST_FLOW_ERROR);
+ if (GST_BUFFER_POOL_IS_FLUSHING (pool))
+ return GST_FLOW_FLUSHING;
+
switch (obj->type) {
case V4L2_BUF_TYPE_VIDEO_CAPTURE:
case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE:
@@ -1595,13 +1618,31 @@ gst_v4l2_buffer_pool_process (GstV4l2BufferPool * pool, GstBuffer ** buf)
case GST_V4L2_IO_DMABUF:
case GST_V4L2_IO_MMAP:
{
- GstBuffer *to_queue;
+ GstBuffer *to_queue = NULL;
+ GstV4l2MemoryGroup *group;
+ gint index;
- if ((*buf)->pool == bpool) {
- /* nothing, we can queue directly */
- to_queue = gst_buffer_ref (*buf);
- GST_LOG_OBJECT (pool, "processing buffer from our pool");
- } else {
+ if ((*buf)->pool != bpool)
+ goto copying;
+
+ if (!gst_v4l2_is_buffer_valid (*buf, &group))
+ goto copying;
+
+ index = group->buffer.index;
+
+ GST_LOG_OBJECT (pool, "processing buffer %i from our pool", index);
+
+ index = group->buffer.index;
+ if (pool->buffers[index] != NULL) {
+ GST_LOG_OBJECT (pool, "buffer %i already queued, copying", index);
+ goto copying;
+ }
+
+ /* we can queue directly */
+ to_queue = gst_buffer_ref (*buf);
+
+ copying:
+ if (to_queue == NULL) {
GstBufferPoolAcquireParams params = { 0 };
GST_LOG_OBJECT (pool, "alloc buffer from our pool");
@@ -1626,15 +1667,12 @@ gst_v4l2_buffer_pool_process (GstV4l2BufferPool * pool, GstBuffer ** buf)
/* if we are not streaming yet (this is the first buffer, start
* streaming now */
- if (!pool->streaming) {
- if (!start_streaming (pool)) {
- gst_buffer_unref (to_queue);
- goto start_failed;
- }
+ if (!gst_v4l2_buffer_pool_streamon (pool)) {
+ gst_buffer_unref (to_queue);
+ goto start_failed;
}
- if (pool->num_queued ==
- gst_v4l2_allocator_num_allocated (pool->vallocator)) {
+ if (g_atomic_int_get (&pool->num_queued) >= pool->min_latency) {
GstBuffer *out;
/* all buffers are queued, try to dequeue one and release it back
* into the pool so that _acquire can get to it again. */
@@ -1661,81 +1699,37 @@ done:
/* ERRORS */
copy_failed:
{
- GST_ERROR_OBJECT (obj->element, "failed to copy buffer");
+ GST_ERROR_OBJECT (pool, "failed to copy buffer");
return ret;
}
eos:
{
- GST_DEBUG_OBJECT (obj->element, "end of stream reached");
+ GST_DEBUG_OBJECT (pool, "end of stream reached");
return GST_FLOW_EOS;
}
acquire_failed:
{
- GST_WARNING_OBJECT (obj->element, "failed to acquire a buffer: %s",
- gst_flow_get_name (ret));
+ if (ret == GST_FLOW_FLUSHING)
+ GST_DEBUG_OBJECT (pool, "flushing");
+ else
+ GST_WARNING_OBJECT (pool, "failed to acquire a buffer: %s",
+ gst_flow_get_name (ret));
return ret;
}
prepare_failed:
{
- GST_ERROR_OBJECT (obj->element, "failed to prepare data");
+ GST_ERROR_OBJECT (pool, "failed to prepare data");
return ret;
}
queue_failed:
{
- GST_ERROR_OBJECT (obj->element, "failed to queue buffer");
+ GST_ERROR_OBJECT (pool, "failed to queue buffer");
return ret;
}
start_failed:
{
- GST_ERROR_OBJECT (obj->element, "failed to start streaming");
- return GST_FLOW_ERROR;
- }
-}
-
-
-/**
- * gst_v4l2_buffer_pool_stop_streaming:
- * @bpool: a #GstBufferPool
- *
- * First, set obj->poll to be flushing
- * Call STREAMOFF to clear QUEUED flag on every driver buffers.
- * Then release all buffers that are in pool->buffers array.
- *
- * Returns: TRUE on success.
- */
-gboolean
-gst_v4l2_buffer_pool_stop_streaming (GstV4l2BufferPool * pool)
-{
- GST_DEBUG_OBJECT (pool, "stop streaming");
-
- if (!stop_streaming (pool))
- goto stop_failed;
-
- return TRUE;
-
- /* ERRORS */
-stop_failed:
- {
- GST_ERROR_OBJECT (pool, "failed to stop streaming");
- return FALSE;
- }
-}
-
-gboolean
-gst_v4l2_buffer_pool_start_streaming (GstV4l2BufferPool * pool)
-{
- GST_DEBUG_OBJECT (pool, "start straming");
-
- if (!start_streaming (pool))
- goto start_failed;
-
- return TRUE;
-
- /* ERRORS */
-start_failed:
- {
GST_ERROR_OBJECT (pool, "failed to start streaming");
- return FALSE;
+ return GST_FLOW_ERROR;
}
}
diff --git a/sys/v4l2/gstv4l2bufferpool.h b/sys/v4l2/gstv4l2bufferpool.h
index 3459637d..65486bff 100644
--- a/sys/v4l2/gstv4l2bufferpool.h
+++ b/sys/v4l2/gstv4l2bufferpool.h
@@ -50,6 +50,8 @@ struct _GstV4l2BufferPool
GstV4l2Object *obj; /* the v4l2 object */
gint video_fd; /* a dup(2) of the v4l2object's video_fd */
+ GstPoll *poll; /* a poll for video_fd */
+ gboolean can_poll_device;
GstV4l2Allocator *vallocator;
GstAllocator *allocator;
@@ -60,7 +62,8 @@ struct _GstV4l2BufferPool
gboolean add_videometa; /* set if video meta should be added */
- guint num_buffers; /* number of buffers we use */
+ guint min_latency; /* number of buffers we will hold */
+ guint max_latency; /* number of buffers we can hold */
guint num_queued; /* number of buffers queued in the driver */
guint copy_threshold; /* when our pool runs lower, start handing out copies */
@@ -84,9 +87,6 @@ GstBufferPool * gst_v4l2_buffer_pool_new (GstV4l2Object *obj, GstCaps *c
GstFlowReturn gst_v4l2_buffer_pool_process (GstV4l2BufferPool * bpool, GstBuffer ** buf);
-gboolean gst_v4l2_buffer_pool_stop_streaming (GstV4l2BufferPool * pool);
-gboolean gst_v4l2_buffer_pool_start_streaming (GstV4l2BufferPool * pool);
-
void gst_v4l2_buffer_pool_set_other_pool (GstV4l2BufferPool * pool,
GstBufferPool * other_pool);
diff --git a/sys/v4l2/gstv4l2devicemonitor.c b/sys/v4l2/gstv4l2devicemonitor.c
index ef967bc4..f3f1c0bb 100644
--- a/sys/v4l2/gstv4l2devicemonitor.c
+++ b/sys/v4l2/gstv4l2devicemonitor.c
@@ -458,7 +458,7 @@ gst_v4l2_device_new (const gchar * device_path, const gchar * device_name,
}
gstdev = g_object_new (GST_TYPE_V4L2_DEVICE, "device-path", device_path,
- "display-name", device_name, "caps", caps, "klass", klass, NULL);
+ "display-name", device_name, "caps", caps, "device-class", klass, NULL);
gstdev->element = element;
diff --git a/sys/v4l2/gstv4l2object.c b/sys/v4l2/gstv4l2object.c
index f868d56b..69990ff0 100644
--- a/sys/v4l2/gstv4l2object.c
+++ b/sys/v4l2/gstv4l2object.c
@@ -431,7 +431,6 @@ gst_v4l2_object_new (GstElement * element,
v4l2object->update_fps_func = update_fps_func;
v4l2object->video_fd = -1;
- v4l2object->poll = gst_poll_new (TRUE);
v4l2object->active = FALSE;
v4l2object->videodev = g_strdup (default_device);
@@ -461,9 +460,6 @@ gst_v4l2_object_destroy (GstV4l2Object * v4l2object)
if (v4l2object->videodev)
g_free (v4l2object->videodev);
- if (v4l2object->poll)
- gst_poll_free (v4l2object->poll);
-
if (v4l2object->channel)
g_free (v4l2object->channel);
@@ -3043,19 +3039,27 @@ gst_v4l2_object_caps_equal (GstV4l2Object * v4l2object, GstCaps * caps)
gboolean
gst_v4l2_object_unlock (GstV4l2Object * v4l2object)
{
- GST_LOG_OBJECT (v4l2object->element, "flush poll");
- gst_poll_set_flushing (v4l2object->poll, TRUE);
+ gboolean ret = TRUE;
- return TRUE;
+ GST_LOG_OBJECT (v4l2object->element, "start flushing");
+
+ if (v4l2object->pool && gst_buffer_pool_is_active (v4l2object->pool))
+ gst_buffer_pool_set_flushing (v4l2object->pool, TRUE);
+
+ return ret;
}
gboolean
gst_v4l2_object_unlock_stop (GstV4l2Object * v4l2object)
{
- GST_LOG_OBJECT (v4l2object->element, "flush stop poll");
- gst_poll_set_flushing (v4l2object->poll, FALSE);
+ gboolean ret = TRUE;
- return TRUE;
+ GST_LOG_OBJECT (v4l2object->element, "stop flushing");
+
+ if (v4l2object->pool && gst_buffer_pool_is_active (v4l2object->pool))
+ gst_buffer_pool_set_flushing (v4l2object->pool, FALSE);
+
+ return ret;
}
gboolean
@@ -3143,6 +3147,8 @@ gst_v4l2_object_decide_allocation (GstV4l2Object * obj, GstQuery * query)
gboolean has_video_meta;
gboolean can_share_own_pool, pushing_from_our_pool = FALSE;
struct v4l2_control ctl = { 0, };
+ GstAllocator *allocator = NULL;
+ GstAllocationParams params = { 0 };
GST_DEBUG_OBJECT (obj->element, "decide allocation");
@@ -3156,6 +3162,9 @@ gst_v4l2_object_decide_allocation (GstV4l2Object * obj, GstQuery * query)
goto pool_failed;
}
+ if (gst_query_get_n_allocation_params (query) > 0)
+ gst_query_parse_nth_allocation_param (query, 0, &allocator, &params);
+
if (gst_query_get_n_allocation_pools (query) > 0) {
gst_query_parse_nth_allocation_pool (query, 0, &pool, &size, &min, &max);
update = TRUE;
@@ -3259,19 +3268,20 @@ gst_v4l2_object_decide_allocation (GstV4l2Object * obj, GstQuery * query)
* driver and 1 more, so we don't endup up with everything downstream or
* held by the decoder. */
own_min = min + obj->min_buffers_for_capture + 1;
-
- /* Update min/max so the base class does not reset our settings */
- min = own_min;
- max = 0;
} else {
/* In this case we'll have to configure two buffer pool. For our buffer
* pool, we'll need what the driver one, and one more, so we can dequeu */
own_min = obj->min_buffers_for_capture + 1;
+ own_min = MAX (own_min, GST_V4L2_MIN_BUFFERS);
/* for the downstream pool, we keep what downstream wants, though ensure
* at least a minimum if downstream didn't suggest anything (we are
* expecting the base class to create a default one for the context) */
min = MAX (min, GST_V4L2_MIN_BUFFERS);
+
+ /* To import we need the other pool to hold at least own_min */
+ if (obj->pool == pool)
+ min += own_min;
}
/* Request a bigger max, if one was suggested but it's too small */
@@ -3285,16 +3295,17 @@ gst_v4l2_object_decide_allocation (GstV4l2Object * obj, GstQuery * query)
/* If already configured/active, skip it */
/* FIXME not entirely correct, See bug 728268 */
if (gst_buffer_pool_is_active (obj->pool)) {
- gst_buffer_pool_config_get_params (config, NULL, &size, &min, &max);
+ gst_structure_free (config);
goto setup_other_pool;
}
- if (obj->need_video_meta) {
+ if (obj->need_video_meta || has_video_meta) {
GST_DEBUG_OBJECT (obj->element, "activate Video Meta");
gst_buffer_pool_config_add_option (config,
GST_BUFFER_POOL_OPTION_VIDEO_META);
}
+ gst_buffer_pool_config_set_allocator (config, allocator, &params);
gst_buffer_pool_config_set_params (config, caps, size, own_min, 0);
GST_DEBUG_OBJECT (obj->element, "setting own pool config to %"
@@ -3308,9 +3319,6 @@ gst_v4l2_object_decide_allocation (GstV4l2Object * obj, GstQuery * query)
GST_PTR_FORMAT, config);
/* our pool will adjust the maximum buffer, which we are fine with */
- if (obj->pool == pool)
- gst_buffer_pool_config_get_params (config, NULL, &size, &min, &max);
-
if (!gst_buffer_pool_set_config (obj->pool, config))
goto config_failed;
}
@@ -3322,10 +3330,11 @@ setup_other_pool:
other_pool = pool;
if (other_pool) {
- if (gst_buffer_pool_is_active (obj->pool))
+ if (gst_buffer_pool_is_active (other_pool))
goto done;
- config = gst_buffer_pool_get_config (pool);
+ config = gst_buffer_pool_get_config (other_pool);
+ gst_buffer_pool_config_set_allocator (config, allocator, &params);
gst_buffer_pool_config_set_params (config, caps, size, min, max);
GST_DEBUG_OBJECT (obj->element, "setting other pool config to %"
@@ -3338,16 +3347,35 @@ setup_other_pool:
GST_BUFFER_POOL_OPTION_VIDEO_META);
}
- /* TODO check return value, validate changes and confirm */
- gst_buffer_pool_set_config (pool, config);
+ if (!gst_buffer_pool_set_config (other_pool, config)) {
+ config = gst_buffer_pool_get_config (other_pool);
+
+ if (!gst_buffer_pool_config_validate_params (config, caps, size, min,
+ max)) {
+ gst_structure_free (config);
+ goto config_failed;
+ }
+
+ if (!gst_buffer_pool_set_config (other_pool, config))
+ goto config_failed;
+ }
}
+ /* For simplicity, simply read back the active configuration, so our base
+ * class get the right information */
+ config = gst_buffer_pool_get_config (pool);
+ gst_buffer_pool_config_get_params (config, NULL, &size, &min, &max);
+ gst_structure_free (config);
+
done:
if (update)
gst_query_set_nth_allocation_pool (query, 0, pool, size, min, max);
else
gst_query_add_allocation_pool (query, pool, size, min, max);
+ if (allocator)
+ gst_object_unref (allocator);
+
if (pool)
gst_object_unref (pool);
@@ -3372,6 +3400,9 @@ no_size:
}
cleanup:
{
+ if (allocator)
+ gst_object_unref (allocator);
+
if (pool)
gst_object_unref (pool);
return FALSE;
diff --git a/sys/v4l2/gstv4l2object.h b/sys/v4l2/gstv4l2object.h
index dbab5274..c13cd645 100644
--- a/sys/v4l2/gstv4l2object.h
+++ b/sys/v4l2/gstv4l2object.h
@@ -88,8 +88,6 @@ struct _GstV4l2Object {
/* the video-device's file descriptor */
gint video_fd;
GstV4l2IOMode mode;
- GstPoll * poll;
- gboolean can_poll_device;
gboolean active;
gboolean streaming;
diff --git a/sys/v4l2/gstv4l2sink.c b/sys/v4l2/gstv4l2sink.c
index 93f20bb8..e9b6efbd 100644
--- a/sys/v4l2/gstv4l2sink.c
+++ b/sys/v4l2/gstv4l2sink.c
@@ -114,11 +114,7 @@ static gboolean gst_v4l2sink_propose_allocation (GstBaseSink * bsink,
GstQuery * query);
static GstCaps *gst_v4l2sink_get_caps (GstBaseSink * bsink, GstCaps * filter);
static gboolean gst_v4l2sink_set_caps (GstBaseSink * bsink, GstCaps * caps);
-#if 0
-static GstFlowReturn gst_v4l2sink_buffer_alloc (GstBaseSink * bsink,
- guint64 offset, guint size, GstCaps * caps, GstBuffer ** buf);
-#endif
-static GstFlowReturn gst_v4l2sink_show_frame (GstBaseSink * bsink,
+static GstFlowReturn gst_v4l2sink_show_frame (GstVideoSink * bsink,
GstBuffer * buf);
static void
@@ -127,10 +123,12 @@ gst_v4l2sink_class_init (GstV4l2SinkClass * klass)
GObjectClass *gobject_class;
GstElementClass *element_class;
GstBaseSinkClass *basesink_class;
+ GstVideoSinkClass *videosink_class;
gobject_class = G_OBJECT_CLASS (klass);
element_class = GST_ELEMENT_CLASS (klass);
basesink_class = GST_BASE_SINK_CLASS (klass);
+ videosink_class = GST_VIDEO_SINK_CLASS (klass);
gobject_class->finalize = (GObjectFinalizeFunc) gst_v4l2sink_finalize;
gobject_class->set_property = gst_v4l2sink_set_property;
@@ -187,7 +185,8 @@ gst_v4l2sink_class_init (GstV4l2SinkClass * klass)
basesink_class->set_caps = GST_DEBUG_FUNCPTR (gst_v4l2sink_set_caps);
basesink_class->propose_allocation =
GST_DEBUG_FUNCPTR (gst_v4l2sink_propose_allocation);
- basesink_class->render = GST_DEBUG_FUNCPTR (gst_v4l2sink_show_frame);
+
+ videosink_class->show_frame = GST_DEBUG_FUNCPTR (gst_v4l2sink_show_frame);
klass->v4l2_class_devices = NULL;
@@ -536,15 +535,36 @@ static gboolean
gst_v4l2sink_propose_allocation (GstBaseSink * bsink, GstQuery * query)
{
GstV4l2Sink *v4l2sink = GST_V4L2SINK (bsink);
- return gst_v4l2_object_propose_allocation (v4l2sink->v4l2object, query);
+ gboolean last_sample_enabled;
+
+ if (!gst_v4l2_object_propose_allocation (v4l2sink->v4l2object, query))
+ return FALSE;
+
+ g_object_get (bsink, "enable-last-sample", &last_sample_enabled, NULL);
+
+ if (last_sample_enabled) {
+ GstBufferPool *pool;
+ guint size, min, max;
+
+ gst_query_parse_nth_allocation_pool (query, 0, &pool, &size, &min, &max);
+
+ /* we need 1 more, otherwise we'll run out of buffers at preroll */
+ min++;
+ if (max < min)
+ max = min;
+
+ gst_query_set_nth_allocation_pool (query, 0, pool, size, min, max);
+ }
+
+ return TRUE;
}
/* called after A/V sync to render frame */
static GstFlowReturn
-gst_v4l2sink_show_frame (GstBaseSink * bsink, GstBuffer * buf)
+gst_v4l2sink_show_frame (GstVideoSink * vsink, GstBuffer * buf)
{
GstFlowReturn ret;
- GstV4l2Sink *v4l2sink = GST_V4L2SINK (bsink);
+ GstV4l2Sink *v4l2sink = GST_V4L2SINK (vsink);
GstV4l2Object *obj = v4l2sink->v4l2object;
GstBufferPool *bpool = GST_BUFFER_POOL (obj->pool);
@@ -557,7 +577,7 @@ gst_v4l2sink_show_frame (GstBaseSink * bsink, GstBuffer * buf)
GstStructure *config;
/* this pool was not activated, configure and activate */
- GST_DEBUG_OBJECT (bsink, "activating pool");
+ GST_DEBUG_OBJECT (v4l2sink, "activating pool");
config = gst_buffer_pool_get_config (bpool);
gst_buffer_pool_config_add_option (config,
@@ -576,12 +596,12 @@ gst_v4l2sink_show_frame (GstBaseSink * bsink, GstBuffer * buf)
/* ERRORS */
not_negotiated:
{
- GST_ERROR_OBJECT (bsink, "not negotiated");
+ GST_ERROR_OBJECT (v4l2sink, "not negotiated");
return GST_FLOW_NOT_NEGOTIATED;
}
activate_failed:
{
- GST_ELEMENT_ERROR (bsink, RESOURCE, SETTINGS,
+ GST_ELEMENT_ERROR (v4l2sink, RESOURCE, SETTINGS,
(_("Failed to allocated required memory.")),
("Buffer pool activation failed"));
return GST_FLOW_ERROR;
diff --git a/sys/v4l2/gstv4l2src.c b/sys/v4l2/gstv4l2src.c
index 12a30df2..1386333e 100644
--- a/sys/v4l2/gstv4l2src.c
+++ b/sys/v4l2/gstv4l2src.c
@@ -505,7 +505,7 @@ gst_v4l2src_query (GstBaseSrc * bsrc, GstQuery * query)
/* max latency is total duration of the frame buffer */
if (obj->pool != NULL)
- num_buffers = GST_V4L2_BUFFER_POOL_CAST (obj->pool)->num_buffers;
+ num_buffers = GST_V4L2_BUFFER_POOL_CAST (obj->pool)->max_latency;
if (num_buffers == 0)
max_latency = -1;
diff --git a/sys/v4l2/gstv4l2transform.c b/sys/v4l2/gstv4l2transform.c
index a314bd0e..4ccddbba 100644
--- a/sys/v4l2/gstv4l2transform.c
+++ b/sys/v4l2/gstv4l2transform.c
@@ -533,19 +533,6 @@ gst_v4l2_transform_sink_event (GstBaseTransform * trans, GstEvent * event)
gst_v4l2_object_unlock (self->v4l2output);
gst_v4l2_object_unlock (self->v4l2capture);
break;
- case GST_EVENT_FLUSH_STOP:
- GST_DEBUG_OBJECT (self, "flush stop");
-
- if (self->v4l2output->pool) {
- gst_v4l2_buffer_pool_stop_streaming (GST_V4L2_BUFFER_POOL
- (self->v4l2output->pool));
- gst_v4l2_buffer_pool_start_streaming (GST_V4L2_BUFFER_POOL
- (self->v4l2capture->pool));
- gst_v4l2_object_unlock_stop (self->v4l2output);
- }
- if (self->v4l2capture->pool)
- gst_v4l2_buffer_pool_stop_streaming (GST_V4L2_BUFFER_POOL
- (self->v4l2capture->pool));
default:
break;
}
@@ -555,12 +542,9 @@ gst_v4l2_transform_sink_event (GstBaseTransform * trans, GstEvent * event)
switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_FLUSH_STOP:
/* Buffer should be back now */
- if (self->v4l2capture->pool) {
- gst_v4l2_buffer_pool_start_streaming (GST_V4L2_BUFFER_POOL
- (self->v4l2capture->pool));
- gst_v4l2_object_unlock_stop (self->v4l2capture);
- }
- GST_DEBUG_OBJECT (self, "flush stop done");
+ GST_DEBUG_OBJECT (self, "flush stop");
+ gst_v4l2_object_unlock_stop (self->v4l2capture);
+ gst_v4l2_object_unlock_stop (self->v4l2output);
break;
default:
break;
diff --git a/sys/v4l2/gstv4l2videodec.c b/sys/v4l2/gstv4l2videodec.c
index 1b4a051c..f3e03c78 100644
--- a/sys/v4l2/gstv4l2videodec.c
+++ b/sys/v4l2/gstv4l2videodec.c
@@ -259,23 +259,23 @@ gst_v4l2_video_dec_flush (GstVideoDecoder * decoder)
{
GstV4l2VideoDec *self = GST_V4L2_VIDEO_DEC (decoder);
- GST_DEBUG_OBJECT (self, "Flushing");
+ GST_DEBUG_OBJECT (self, "Flushed");
- /* Wait for capture thread to stop */
- GST_VIDEO_DECODER_STREAM_UNLOCK (decoder);
- gst_v4l2_object_unlock (self->v4l2capture);
- gst_pad_stop_task (decoder->srcpad);
- GST_VIDEO_DECODER_STREAM_LOCK (decoder);
+ /* Ensure the processing thread has stopped for the reverse playback
+ * discount case */
+ if (g_atomic_int_get (&self->processing)) {
+ GST_VIDEO_DECODER_STREAM_UNLOCK (decoder);
- self->output_flow = GST_FLOW_OK;
+ gst_v4l2_object_unlock (self->v4l2output);
+ gst_v4l2_object_unlock (self->v4l2capture);
+ gst_pad_stop_task (decoder->srcpad);
+ GST_VIDEO_DECODER_STREAM_UNLOCK (decoder);
+ }
- if (self->v4l2output->pool)
- gst_v4l2_buffer_pool_stop_streaming (GST_V4L2_BUFFER_POOL
- (self->v4l2output->pool));
+ self->output_flow = GST_FLOW_OK;
- if (self->v4l2capture->pool)
- gst_v4l2_buffer_pool_stop_streaming (GST_V4L2_BUFFER_POOL
- (self->v4l2capture->pool));
+ gst_v4l2_object_unlock_stop (self->v4l2output);
+ gst_v4l2_object_unlock_stop (self->v4l2capture);
return TRUE;
}
@@ -293,7 +293,7 @@ gst_v4l2_video_dec_finish (GstVideoDecoder * decoder)
GstFlowReturn ret = GST_FLOW_OK;
GstBuffer *buffer;
- if (!self->processing)
+ if (!g_atomic_int_get (&self->processing))
goto done;
GST_DEBUG_OBJECT (self, "Finishing decoding");
@@ -308,14 +308,12 @@ gst_v4l2_video_dec_finish (GstVideoDecoder * decoder)
v4l2output->pool), &buffer);
gst_buffer_unref (buffer);
}
- GST_VIDEO_DECODER_STREAM_LOCK (decoder);
- /* Ensure the processing thread has stopped */
- if (g_atomic_int_get (&self->processing)) {
- gst_v4l2_object_unlock (self->v4l2capture);
- gst_pad_stop_task (decoder->srcpad);
- g_assert (g_atomic_int_get (&self->processing) == FALSE);
- }
+ /* and ensure the processing thread has stopped in case another error
+ * occured. */
+ gst_v4l2_object_unlock (self->v4l2capture);
+ gst_pad_stop_task (decoder->srcpad);
+ GST_VIDEO_DECODER_STREAM_LOCK (decoder);
if (ret == GST_FLOW_FLUSHING)
ret = self->output_flow;
@@ -420,6 +418,20 @@ beach:
gst_pad_pause_task (decoder->srcpad);
}
+static void
+gst_v4l2_video_dec_loop_stopped (GstV4l2VideoDec * self)
+{
+ /* When flushing, decoding thread may never run */
+ if (g_atomic_int_get (&self->processing)) {
+ GST_DEBUG_OBJECT (self, "Early stop of decoding thread");
+ self->output_flow = GST_FLOW_FLUSHING;
+ g_atomic_int_set (&self->processing, FALSE);
+ }
+
+ GST_DEBUG_OBJECT (self, "Decoding task destroyed: %s",
+ gst_flow_get_name (self->output_flow));
+}
+
static GstFlowReturn
gst_v4l2_video_dec_handle_frame (GstVideoDecoder * decoder,
GstVideoCodecFrame * frame)
@@ -475,11 +487,9 @@ gst_v4l2_video_dec_handle_frame (GstVideoDecoder * decoder,
}
GST_VIDEO_DECODER_STREAM_UNLOCK (decoder);
- gst_v4l2_object_unlock_stop (self->v4l2output);
ret =
gst_v4l2_buffer_pool_process (GST_V4L2_BUFFER_POOL (self->
v4l2output->pool), &codec_data);
- gst_v4l2_object_unlock (self->v4l2output);
GST_VIDEO_DECODER_STREAM_LOCK (decoder);
gst_buffer_unref (codec_data);
@@ -508,8 +518,9 @@ gst_v4l2_video_dec_handle_frame (GstVideoDecoder * decoder,
}
if (g_atomic_int_get (&self->processing) == FALSE) {
- /* It possible that the processing thread stopped due to an error */
- if (self->output_flow != GST_FLOW_OK) {
+ /* It's possible that the processing thread stopped due to an error */
+ if (self->output_flow != GST_FLOW_OK &&
+ self->output_flow != GST_FLOW_FLUSHING) {
GST_DEBUG_OBJECT (self, "Processing loop stopped with error, leaving");
ret = self->output_flow;
goto drop;
@@ -517,19 +528,13 @@ gst_v4l2_video_dec_handle_frame (GstVideoDecoder * decoder,
GST_DEBUG_OBJECT (self, "Starting decoding thread");
- /* Enable processing input */
- if (!gst_v4l2_buffer_pool_start_streaming (GST_V4L2_BUFFER_POOL
- (self->v4l2capture->pool)))
- goto start_streaming_failed;
-
- gst_v4l2_object_unlock_stop (self->v4l2output);
- gst_v4l2_object_unlock_stop (self->v4l2capture);
-
/* Start the processing task, when it quits, the task will disable input
* processing to unlock input if draining, or prevent potential block */
g_atomic_int_set (&self->processing, TRUE);
- gst_pad_start_task (decoder->srcpad,
- (GstTaskFunction) gst_v4l2_video_dec_loop, self, NULL);
+ if (!gst_pad_start_task (decoder->srcpad,
+ (GstTaskFunction) gst_v4l2_video_dec_loop, self,
+ (GDestroyNotify) gst_v4l2_video_dec_loop_stopped))
+ goto start_task_failed;
}
if (frame->input_buffer) {
@@ -542,6 +547,9 @@ gst_v4l2_video_dec_handle_frame (GstVideoDecoder * decoder,
if (ret == GST_FLOW_FLUSHING) {
if (g_atomic_int_get (&self->processing) == FALSE)
ret = self->output_flow;
+ goto drop;
+ } else if (ret != GST_FLOW_OK) {
+ goto process_failed;
}
/* No need to keep input arround */
@@ -558,25 +566,36 @@ not_negotiated:
ret = GST_FLOW_NOT_NEGOTIATED;
goto drop;
}
-start_streaming_failed:
- {
- GST_ELEMENT_ERROR (self, RESOURCE, SETTINGS,
- (_("Failed to re-enabled decoder.")),
- ("Could not re-enqueue and start streaming on decide."));
- return GST_FLOW_ERROR;
- }
activate_failed:
{
GST_ELEMENT_ERROR (self, RESOURCE, SETTINGS,
(_("Failed to allocate required memory.")),
("Buffer pool activation failed"));
- return GST_FLOW_ERROR;
+ ret = GST_FLOW_ERROR;
+ goto drop;
}
flushing:
{
ret = GST_FLOW_FLUSHING;
goto drop;
}
+
+start_task_failed:
+ {
+ GST_ELEMENT_ERROR (self, RESOURCE, FAILED,
+ (_("Failed to start decoding thread.")), (NULL));
+ g_atomic_int_set (&self->processing, FALSE);
+ ret = GST_FLOW_ERROR;
+ goto drop;
+ }
+process_failed:
+ {
+ GST_ELEMENT_ERROR (self, RESOURCE, FAILED,
+ (_("Failed to process frame.")),
+ ("Maybe be due to not enough memory or failing driver"));
+ ret = GST_FLOW_ERROR;
+ goto drop;
+ }
drop:
{
gst_video_decoder_drop_frame (decoder, frame);
@@ -686,16 +705,31 @@ static gboolean
gst_v4l2_video_dec_sink_event (GstVideoDecoder * decoder, GstEvent * event)
{
GstV4l2VideoDec *self = GST_V4L2_VIDEO_DEC (decoder);
+ gboolean ret;
switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_FLUSH_START:
+ GST_DEBUG_OBJECT (self, "flush start");
gst_v4l2_object_unlock (self->v4l2output);
gst_v4l2_object_unlock (self->v4l2capture);
+ break;
default:
break;
}
- return GST_VIDEO_DECODER_CLASS (parent_class)->sink_event (decoder, event);
+ ret = GST_VIDEO_DECODER_CLASS (parent_class)->sink_event (decoder, event);
+
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_FLUSH_START:
+ /* The processing thread should stop now, wait for it */
+ gst_pad_stop_task (decoder->srcpad);
+ GST_DEBUG_OBJECT (self, "flush start done");
+ break;
+ default:
+ break;
+ }
+
+ return ret;
}
static GstStateChangeReturn
@@ -703,11 +737,13 @@ gst_v4l2_video_dec_change_state (GstElement * element,
GstStateChange transition)
{
GstV4l2VideoDec *self = GST_V4L2_VIDEO_DEC (element);
+ GstVideoDecoder *decoder = GST_VIDEO_DECODER (element);
if (transition == GST_STATE_CHANGE_PAUSED_TO_READY) {
g_atomic_int_set (&self->active, FALSE);
gst_v4l2_object_unlock (self->v4l2output);
gst_v4l2_object_unlock (self->v4l2capture);
+ gst_pad_stop_task (decoder->srcpad);
}
return GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
diff --git a/sys/v4l2/v4l2_calls.c b/sys/v4l2/v4l2_calls.c
index 79368538..d1cc2842 100644
--- a/sys/v4l2/v4l2_calls.c
+++ b/sys/v4l2/v4l2_calls.c
@@ -514,7 +514,6 @@ gst_v4l2_open (GstV4l2Object * v4l2object)
{
struct stat st;
int libv4l2_fd;
- GstPollFD pollfd = GST_POLL_FD_INIT;
GST_DEBUG_OBJECT (v4l2object->element, "Trying to open device %s",
v4l2object->videodev);
@@ -551,8 +550,6 @@ gst_v4l2_open (GstV4l2Object * v4l2object)
if (libv4l2_fd != -1)
v4l2object->video_fd = libv4l2_fd;
- v4l2object->can_poll_device = TRUE;
-
/* get capabilities, error will be posted */
if (!gst_v4l2_get_capabilities (v4l2object))
goto error;
@@ -589,14 +586,6 @@ gst_v4l2_open (GstV4l2Object * v4l2object)
"Opened device '%s' (%s) successfully",
v4l2object->vcap.card, v4l2object->videodev);
- pollfd.fd = v4l2object->video_fd;
- gst_poll_add_fd (v4l2object->poll, &pollfd);
- if (v4l2object->type == V4L2_BUF_TYPE_VIDEO_CAPTURE
- || v4l2object->type == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE)
- gst_poll_fd_ctl_read (v4l2object->poll, &pollfd, TRUE);
- else
- gst_poll_fd_ctl_write (v4l2object->poll, &pollfd, TRUE);
-
if (v4l2object->extra_controls)
gst_v4l2_set_controls (v4l2object, v4l2object->extra_controls);
@@ -672,8 +661,6 @@ error:
gboolean
gst_v4l2_dup (GstV4l2Object * v4l2object, GstV4l2Object * other)
{
- GstPollFD pollfd = GST_POLL_FD_INIT;
-
GST_DEBUG_OBJECT (v4l2object->element, "Trying to dup device %s",
other->videodev);
@@ -696,16 +683,7 @@ gst_v4l2_dup (GstV4l2Object * v4l2object, GstV4l2Object * other)
"Cloned device '%s' (%s) successfully",
v4l2object->vcap.card, v4l2object->videodev);
- pollfd.fd = v4l2object->video_fd;
- gst_poll_add_fd (v4l2object->poll, &pollfd);
- if (v4l2object->type == V4L2_BUF_TYPE_VIDEO_CAPTURE
- || v4l2object->type == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE)
- gst_poll_fd_ctl_read (v4l2object->poll, &pollfd, TRUE);
- else
- gst_poll_fd_ctl_write (v4l2object->poll, &pollfd, TRUE);
-
v4l2object->never_interlaced = other->never_interlaced;
- v4l2object->can_poll_device = TRUE;
return TRUE;
@@ -728,7 +706,6 @@ not_open:
gboolean
gst_v4l2_close (GstV4l2Object * v4l2object)
{
- GstPollFD pollfd = GST_POLL_FD_INIT;
GST_DEBUG_OBJECT (v4l2object->element, "Trying to close %s",
v4l2object->videodev);
@@ -737,8 +714,6 @@ gst_v4l2_close (GstV4l2Object * v4l2object)
/* close device */
v4l2_close (v4l2object->video_fd);
- pollfd.fd = v4l2object->video_fd;
- gst_poll_remove_fd (v4l2object->poll, &pollfd);
v4l2object->video_fd = -1;
/* empty lists */
diff --git a/sys/ximage/gstximagesrc.c b/sys/ximage/gstximagesrc.c
index cdb4a1d9..17f4a4e9 100644
--- a/sys/ximage/gstximagesrc.c
+++ b/sys/ximage/gstximagesrc.c
@@ -460,13 +460,15 @@ gst_ximage_src_ximage_get (GstXImageSrc * ximagesrc)
meta = GST_META_XIMAGE_GET (ximage);
- if ((meta->width != ximagesrc->width) ||
- (meta->height != ximagesrc->height)) {
- gst_ximage_buffer_free (ximage);
- }
-
ximagesrc->buffer_pool = g_slist_delete_link (ximagesrc->buffer_pool,
ximagesrc->buffer_pool);
+
+ if ((meta->width == ximagesrc->width) ||
+ (meta->height == ximagesrc->height))
+ break;
+
+ gst_ximage_buffer_free (ximage);
+ ximage = NULL;
}
g_mutex_unlock (&ximagesrc->pool_lock);
diff --git a/tests/check/elements/rtp-payloading.c b/tests/check/elements/rtp-payloading.c
index 32d785fd..2ce7a5cd 100644
--- a/tests/check/elements/rtp-payloading.c
+++ b/tests/check/elements/rtp-payloading.c
@@ -79,6 +79,16 @@ rtp_pipeline_chain_list (GstPad * pad, GstObject * parent, GstBufferList * list)
return GST_FLOW_OK;
}
+static GstFlowReturn
+rtp_pipeline_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
+{
+ GstBufferList *list;
+
+ list = gst_buffer_list_new_sized (1);
+ gst_buffer_list_add (list, buf);
+ return rtp_pipeline_chain_list (pad, parent, list);
+}
+
/*
* RTP bus callback.
*/
@@ -303,6 +313,8 @@ rtp_pipeline_enable_lists (rtp_pipeline * p, guint mtu_size)
pad = gst_element_get_static_pad (p->rtpdepay, "sink");
gst_pad_set_chain_list_function (pad,
GST_DEBUG_FUNCPTR (rtp_pipeline_chain_list));
+ /* .. to satisfy this silly test code in case someone dares push a buffer */
+ gst_pad_set_chain_function (pad, GST_DEBUG_FUNCPTR (rtp_pipeline_chain));
gst_object_unref (pad);
}
diff --git a/tests/check/elements/rtprtx.c b/tests/check/elements/rtprtx.c
index 9c6206a1..706f2910 100644
--- a/tests/check/elements/rtprtx.c
+++ b/tests/check/elements/rtprtx.c
@@ -416,6 +416,8 @@ start_test_drop_and_check_results (GstElement * bin, GstElement * rtppayloader,
receive_rtxdata->seqnum_offset = 0;
receive_rtxdata->seqnum_prev = 0;
+ *eos = FALSE;
+
/* retrieve offset before going to paused */
g_object_get (G_OBJECT (rtppayloader), "seqnum-offset",
&receive_rtxdata->seqnum_offset, NULL);
diff --git a/win32/common/config.h b/win32/common/config.h
index e69e143e..4fd135c6 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 "2014-05-21"
+#define GST_PACKAGE_RELEASE_DATETIME "2014-06-22"
/* Define if static plugins should be built */
#undef GST_PLUGIN_BUILD_STATIC
@@ -372,7 +372,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.3.2"
+#define PACKAGE_STRING "GStreamer Good Plug-ins 1.3.3"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "gst-plugins-good"
@@ -381,7 +381,7 @@
#undef PACKAGE_URL
/* Define to the version of this package. */
-#define PACKAGE_VERSION "1.3.2"
+#define PACKAGE_VERSION "1.3.3"
/* directory where plugins are located */
#ifdef _DEBUG
@@ -415,7 +415,7 @@
#undef TARGET_CPU
/* Version number of package */
-#define VERSION "1.3.2"
+#define VERSION "1.3.3"
/* old wavpack API */
#undef WAVPACK_OLD_API