aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2014-05-21 12:50:00 +0200
committerSebastian Dröge <sebastian@centricular.com>2014-05-21 12:50:00 +0200
commit543e3a3e468572edb15814e903a804d8912ae18c (patch)
treed6a501323d88747c2a204123c4cb288d5927d0ea
parent12682a683987cf320d225bc5b6697cc15c6b44ac (diff)
Imported Upstream version 1.3.2upstream/1.3.2
-rw-r--r--ChangeLog1072
-rw-r--r--NEWS18
-rw-r--r--RELEASE257
-rwxr-xr-xconfigure118
-rw-r--r--configure.ac68
-rw-r--r--docs/libs/gst-plugins-bad-libs-sections.txt10
-rw-r--r--docs/libs/html/GstGLBufferPool.html12
-rw-r--r--docs/libs/html/GstGLColorConvert.html106
-rw-r--r--docs/libs/html/GstGLContext.html50
-rw-r--r--docs/libs/html/GstGLDisplay.html123
-rw-r--r--docs/libs/html/GstGLDownload.html69
-rw-r--r--docs/libs/html/GstGLUpload.html69
-rw-r--r--docs/libs/html/GstGLWindow.html8
-rw-r--r--docs/libs/html/api-index-full.html26
-rw-r--r--docs/libs/html/gst-plugins-bad-libs-1.0.devhelp211
-rw-r--r--docs/libs/html/gst-plugins-bad-libs-GstGLContextEGL.html4
-rw-r--r--docs/libs/html/gst-plugins-bad-libs-Utilities.html2
-rw-r--r--docs/libs/html/gst-plugins-bad-libs-gstglmemory.html16
-rw-r--r--docs/libs/html/gst-plugins-bad-libs-gstglshader.html4
-rw-r--r--docs/libs/html/gstreamer-libs-hierarchy.html42
-rw-r--r--docs/libs/html/index.html2
-rw-r--r--docs/libs/html/index.sgml11
-rw-r--r--docs/plugins/gst-plugins-bad-plugins.args4
-rw-r--r--docs/plugins/gst-plugins-bad-plugins.hierarchy8
-rw-r--r--docs/plugins/gst-plugins-bad-plugins.interfaces2
-rw-r--r--docs/plugins/gst-plugins-bad-plugins.signals8
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-assrender.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-audiovisualizers.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-autoconvert.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-bayer.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-bz2.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-camerabin.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-coloreffects.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-curl.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-dataurisrc.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-debugutilsbad.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-dtsdec.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-dvb.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-dvdspu.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-faac.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-faad.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-festival.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-gaudieffects.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-geometrictransform.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-gsm.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-jpegformat.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-liveadder.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-mimic.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-mms.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-modplug.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-mpeg2enc.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegtsmux.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-mplex.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-neon.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-ofa.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-openal.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-opencv.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-pcapparse.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-rawparse.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-rfbsrc.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-sdp.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-shm.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-soundtouch.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-speed.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-voaacenc.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-voamrwbenc.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-zbar.html4
-rw-r--r--docs/plugins/html/index.html2
-rw-r--r--docs/plugins/inspect/plugin-accurip.xml2
-rw-r--r--docs/plugins/inspect/plugin-adpcmdec.xml2
-rw-r--r--docs/plugins/inspect/plugin-adpcmenc.xml2
-rw-r--r--docs/plugins/inspect/plugin-aiff.xml2
-rw-r--r--docs/plugins/inspect/plugin-asfmux.xml2
-rw-r--r--docs/plugins/inspect/plugin-assrender.xml2
-rw-r--r--docs/plugins/inspect/plugin-audiofxbad.xml2
-rw-r--r--docs/plugins/inspect/plugin-audiomixer.xml2
-rw-r--r--docs/plugins/inspect/plugin-audiovisualizers.xml2
-rw-r--r--docs/plugins/inspect/plugin-autoconvert.xml2
-rw-r--r--docs/plugins/inspect/plugin-bayer.xml2
-rw-r--r--docs/plugins/inspect/plugin-bz2.xml2
-rw-r--r--docs/plugins/inspect/plugin-camerabin.xml2
-rw-r--r--docs/plugins/inspect/plugin-chromaprint.xml2
-rw-r--r--docs/plugins/inspect/plugin-coloreffects.xml2
-rw-r--r--docs/plugins/inspect/plugin-curl.xml17
-rw-r--r--docs/plugins/inspect/plugin-dashdemux.xml2
-rw-r--r--docs/plugins/inspect/plugin-dataurisrc.xml2
-rw-r--r--docs/plugins/inspect/plugin-debugutilsbad.xml2
-rw-r--r--docs/plugins/inspect/plugin-decklink.xml2
-rw-r--r--docs/plugins/inspect/plugin-dfbvideosink.xml2
-rw-r--r--docs/plugins/inspect/plugin-dtsdec.xml2
-rw-r--r--docs/plugins/inspect/plugin-dvb.xml2
-rw-r--r--docs/plugins/inspect/plugin-dvbsuboverlay.xml2
-rw-r--r--docs/plugins/inspect/plugin-dvdspu.xml2
-rw-r--r--docs/plugins/inspect/plugin-faac.xml2
-rw-r--r--docs/plugins/inspect/plugin-faad.xml2
-rw-r--r--docs/plugins/inspect/plugin-fbdevsink.xml2
-rw-r--r--docs/plugins/inspect/plugin-festival.xml2
-rw-r--r--docs/plugins/inspect/plugin-fieldanalysis.xml2
-rw-r--r--docs/plugins/inspect/plugin-flite.xml2
-rw-r--r--docs/plugins/inspect/plugin-fluidsynthmidi.xml2
-rw-r--r--docs/plugins/inspect/plugin-fragmented.xml2
-rw-r--r--docs/plugins/inspect/plugin-freeverb.xml2
-rw-r--r--docs/plugins/inspect/plugin-frei0r.xml2
-rw-r--r--docs/plugins/inspect/plugin-gaudieffects.xml2
-rw-r--r--docs/plugins/inspect/plugin-gdp.xml2
-rw-r--r--docs/plugins/inspect/plugin-geometrictransform.xml2
-rw-r--r--docs/plugins/inspect/plugin-gmedec.xml4
-rw-r--r--docs/plugins/inspect/plugin-gsm.xml2
-rw-r--r--docs/plugins/inspect/plugin-gstsiren.xml2
-rw-r--r--docs/plugins/inspect/plugin-id3tag.xml2
-rw-r--r--docs/plugins/inspect/plugin-inter.xml2
-rw-r--r--docs/plugins/inspect/plugin-interlace.xml2
-rw-r--r--docs/plugins/inspect/plugin-ivfparse.xml2
-rw-r--r--docs/plugins/inspect/plugin-ivtc.xml2
-rw-r--r--docs/plugins/inspect/plugin-jp2kdecimator.xml2
-rw-r--r--docs/plugins/inspect/plugin-jpegformat.xml2
-rw-r--r--docs/plugins/inspect/plugin-kate.xml2
-rw-r--r--docs/plugins/inspect/plugin-ladspa.xml2
-rw-r--r--docs/plugins/inspect/plugin-liveadder.xml2
-rw-r--r--docs/plugins/inspect/plugin-midi.xml2
-rw-r--r--docs/plugins/inspect/plugin-mimic.xml2
-rw-r--r--docs/plugins/inspect/plugin-mms.xml2
-rw-r--r--docs/plugins/inspect/plugin-modplug.xml2
-rw-r--r--docs/plugins/inspect/plugin-mpeg2enc.xml4
-rw-r--r--docs/plugins/inspect/plugin-mpegpsdemux.xml2
-rw-r--r--docs/plugins/inspect/plugin-mpegpsmux.xml2
-rw-r--r--docs/plugins/inspect/plugin-mpegtsdemux.xml2
-rw-r--r--docs/plugins/inspect/plugin-mpegtsmux.xml2
-rw-r--r--docs/plugins/inspect/plugin-mpg123.xml2
-rw-r--r--docs/plugins/inspect/plugin-mplex.xml2
-rw-r--r--docs/plugins/inspect/plugin-mxf.xml2
-rw-r--r--docs/plugins/inspect/plugin-neon.xml2
-rw-r--r--docs/plugins/inspect/plugin-ofa.xml2
-rw-r--r--docs/plugins/inspect/plugin-openal.xml2
-rw-r--r--docs/plugins/inspect/plugin-opencv.xml2
-rw-r--r--docs/plugins/inspect/plugin-openexr.xml2
-rw-r--r--docs/plugins/inspect/plugin-opengl.xml70
-rw-r--r--docs/plugins/inspect/plugin-openjpeg.xml4
-rw-r--r--docs/plugins/inspect/plugin-opus.xml4
-rw-r--r--docs/plugins/inspect/plugin-pcapparse.xml2
-rw-r--r--docs/plugins/inspect/plugin-pnm.xml2
-rw-r--r--docs/plugins/inspect/plugin-rawparse.xml2
-rw-r--r--docs/plugins/inspect/plugin-removesilence.xml2
-rw-r--r--docs/plugins/inspect/plugin-resindvd.xml2
-rw-r--r--docs/plugins/inspect/plugin-rfbsrc.xml2
-rw-r--r--docs/plugins/inspect/plugin-rsvg.xml4
-rw-r--r--docs/plugins/inspect/plugin-sbc.xml4
-rw-r--r--docs/plugins/inspect/plugin-schro.xml4
-rw-r--r--docs/plugins/inspect/plugin-sdp.xml2
-rw-r--r--docs/plugins/inspect/plugin-segmentclip.xml2
-rw-r--r--docs/plugins/inspect/plugin-shm.xml2
-rw-r--r--docs/plugins/inspect/plugin-smooth.xml2
-rw-r--r--docs/plugins/inspect/plugin-smoothstreaming.xml4
-rw-r--r--docs/plugins/inspect/plugin-sndfile.xml4
-rw-r--r--docs/plugins/inspect/plugin-soundtouch.xml4
-rw-r--r--docs/plugins/inspect/plugin-spandsp.xml4
-rw-r--r--docs/plugins/inspect/plugin-speed.xml2
-rw-r--r--docs/plugins/inspect/plugin-srtp.xml10
-rw-r--r--docs/plugins/inspect/plugin-stereo.xml2
-rw-r--r--docs/plugins/inspect/plugin-subenc.xml2
-rw-r--r--docs/plugins/inspect/plugin-uvch264.xml2
-rw-r--r--docs/plugins/inspect/plugin-vdpau.xml2
-rw-r--r--docs/plugins/inspect/plugin-videofiltersbad.xml2
-rw-r--r--docs/plugins/inspect/plugin-videoparsersbad.xml2
-rw-r--r--docs/plugins/inspect/plugin-videosignal.xml2
-rw-r--r--docs/plugins/inspect/plugin-vmnc.xml2
-rw-r--r--docs/plugins/inspect/plugin-voaacenc.xml2
-rw-r--r--docs/plugins/inspect/plugin-voamrwbenc.xml2
-rw-r--r--docs/plugins/inspect/plugin-waylandsink.xml2
-rw-r--r--docs/plugins/inspect/plugin-webp.xml4
-rw-r--r--docs/plugins/inspect/plugin-wildmidi.xml4
-rw-r--r--docs/plugins/inspect/plugin-y4mdec.xml2
-rw-r--r--docs/plugins/inspect/plugin-yadif.xml2
-rw-r--r--docs/plugins/inspect/plugin-zbar.xml4
-rw-r--r--ext/assrender/gstassrender.c4
-rw-r--r--ext/curl/gstcurlsshsink.c82
-rw-r--r--ext/curl/gstcurlsshsink.h2
-rw-r--r--ext/dash/Makefile.am4
-rw-r--r--ext/dash/Makefile.in15
-rw-r--r--ext/dash/gstdashdemux.c668
-rw-r--r--ext/dash/gstdashdemux.h20
-rw-r--r--ext/dash/gstdownloadrate.c113
-rw-r--r--ext/dash/gstdownloadrate.h55
-rw-r--r--ext/dash/gstmpdparser.c28
-rw-r--r--ext/gl/gstgleffects.c24
-rw-r--r--ext/gl/gstglimagesink.c26
-rw-r--r--ext/gl/gstgltestsrc.c35
-rw-r--r--ext/hls/gsthlsdemux.c38
-rw-r--r--ext/hls/gsthlssink.c2
-rw-r--r--ext/hls/m3u8.c14
-rw-r--r--ext/hls/m3u8.h2
-rw-r--r--ext/opencv/gstmotioncells.c390
-rw-r--r--ext/rsvg/gstrsvgdec.c12
-rw-r--r--ext/rtmp/gstrtmpsrc.c10
-rw-r--r--ext/schroedinger/gstschrodec.c2
-rw-r--r--ext/smoothstreaming/Makefile.am6
-rw-r--r--ext/smoothstreaming/Makefile.in17
-rw-r--r--ext/smoothstreaming/gstdownloadrate.c113
-rw-r--r--ext/smoothstreaming/gstdownloadrate.h55
-rw-r--r--ext/smoothstreaming/gstmssdemux.c575
-rw-r--r--ext/smoothstreaming/gstmssdemux.h23
-rw-r--r--ext/srtp/gstsrtpdec.c71
-rw-r--r--ext/srtp/gstsrtpdec.h1
-rw-r--r--ext/srtp/gstsrtpenc.c24
-rw-r--r--gst-libs/gst/gl/cocoa/Makefile.am3
-rw-r--r--gst-libs/gst/gl/cocoa/Makefile.in3
-rw-r--r--gst-libs/gst/gl/egl/gsteglimagememory.c36
-rw-r--r--gst-libs/gst/gl/egl/gstglcontext_egl.c34
-rw-r--r--gst-libs/gst/gl/egl/gstglcontext_egl.h4
-rw-r--r--gst-libs/gst/gl/gstglbufferpool.c9
-rw-r--r--gst-libs/gst/gl/gstglcolorconvert.c358
-rw-r--r--gst-libs/gst/gl/gstglcolorconvert.h13
-rw-r--r--gst-libs/gst/gl/gstglcontext.c58
-rw-r--r--gst-libs/gst/gl/gstglcontext.h6
-rw-r--r--gst-libs/gst/gl/gstgldisplay.c50
-rw-r--r--gst-libs/gst/gl/gstgldisplay.h8
-rw-r--r--gst-libs/gst/gl/gstgldownload.c201
-rw-r--r--gst-libs/gst/gl/gstgldownload.h13
-rw-r--r--gst-libs/gst/gl/gstglfilter.c141
-rw-r--r--gst-libs/gst/gl/gstglmemory.c23
-rw-r--r--gst-libs/gst/gl/gstglmemory.h2
-rw-r--r--gst-libs/gst/gl/gstglmixer.c34
-rw-r--r--gst-libs/gst/gl/gstglshader.c3
-rw-r--r--gst-libs/gst/gl/gstglshader.h4
-rw-r--r--gst-libs/gst/gl/gstglshadervariables.c4
-rw-r--r--gst-libs/gst/gl/gstglupload.c291
-rw-r--r--gst-libs/gst/gl/gstglupload.h7
-rw-r--r--gst-libs/gst/gl/gstglutils.c6
-rw-r--r--gst-libs/gst/gl/gstglwindow.c4
-rw-r--r--gst-libs/gst/gl/gstglwindow.h4
-rw-r--r--gst-libs/gst/mpegts/gst-atsc-section.c6
-rw-r--r--gst-libs/gst/mpegts/gst-dvb-descriptor.c1
-rw-r--r--gst-libs/gst/mpegts/gst-dvb-section.c37
-rw-r--r--gst-libs/gst/mpegts/gstmpegtsdescriptor.c4
-rw-r--r--gst-libs/gst/mpegts/gstmpegtssection.c9
-rw-r--r--gst-libs/gst/uridownloader/gsturidownloader.c21
-rw-r--r--gst-libs/gst/uridownloader/gsturidownloader.h4
-rw-r--r--gst-plugins-bad.doap10
-rw-r--r--gst-plugins-bad.spec2
-rw-r--r--gst/asfmux/gstasfobjects.c2
-rw-r--r--gst/autoconvert/gstautoconvert.c216
-rw-r--r--gst/autoconvert/gstautoconvert.h7
-rw-r--r--gst/bayer/gstbayerorc-dist.c147
-rw-r--r--gst/bayer/gstbayerorc.orc6
-rw-r--r--gst/dvbsuboverlay/gstdvbsuboverlay.c4
-rw-r--r--gst/freeverb/gstfreeverb.c20
-rw-r--r--gst/jp2kdecimator/jp2kcodestream.c9
-rw-r--r--gst/mpegpsmux/psmuxstream.c1
-rw-r--r--gst/mpegtsdemux/mpegtsbase.c12
-rw-r--r--gst/mpegtsdemux/tsdemux.c1
-rw-r--r--gst/mpegtsmux/tsmux/tsmux.h4
-rw-r--r--gst/mxf/mxfdemux.c19
-rw-r--r--gst/pnm/gstpnmenc.c9
-rw-r--r--gst/sdp/gstsdpdemux.c2
-rw-r--r--gst/vmnc/vmncdec.c4
-rw-r--r--po/af.gmobin783 -> 783 bytes
-rw-r--r--po/af.po2
-rw-r--r--po/az.gmobin845 -> 845 bytes
-rw-r--r--po/az.po2
-rw-r--r--po/bg.gmobin2556 -> 2556 bytes
-rw-r--r--po/bg.po2
-rw-r--r--po/ca.gmobin2091 -> 2091 bytes
-rw-r--r--po/ca.po2
-rw-r--r--po/cs.gmobin4186 -> 4186 bytes
-rw-r--r--po/cs.po2
-rw-r--r--po/da.gmobin3824 -> 3824 bytes
-rw-r--r--po/da.po2
-rw-r--r--po/de.gmobin4240 -> 4240 bytes
-rw-r--r--po/de.po2
-rw-r--r--po/el.gmobin2530 -> 2530 bytes
-rw-r--r--po/el.po2
-rw-r--r--po/en_GB.gmobin777 -> 777 bytes
-rw-r--r--po/en_GB.po2
-rw-r--r--po/eo.gmobin1705 -> 1705 bytes
-rw-r--r--po/eo.po2
-rw-r--r--po/es.gmobin2040 -> 2040 bytes
-rw-r--r--po/es.po2
-rw-r--r--po/eu.gmobin1704 -> 1704 bytes
-rw-r--r--po/eu.po2
-rw-r--r--po/fi.gmobin1647 -> 1647 bytes
-rw-r--r--po/fi.po2
-rw-r--r--po/fr.gmobin2055 -> 2055 bytes
-rw-r--r--po/fr.po2
-rw-r--r--po/gl.gmobin2151 -> 2151 bytes
-rw-r--r--po/gl.po2
-rw-r--r--po/gst-plugins-bad-1.0.pot16
-rw-r--r--po/hr.gmobin2042 -> 2042 bytes
-rw-r--r--po/hr.po2
-rw-r--r--po/hu.gmobin4110 -> 4110 bytes
-rw-r--r--po/hu.po2
-rw-r--r--po/id.gmobin3820 -> 3820 bytes
-rw-r--r--po/id.po2
-rw-r--r--po/it.gmobin1657 -> 1657 bytes
-rw-r--r--po/it.po2
-rw-r--r--po/ja.gmobin2381 -> 2381 bytes
-rw-r--r--po/ja.po2
-rw-r--r--po/ky.gmobin970 -> 970 bytes
-rw-r--r--po/ky.po2
-rw-r--r--po/lt.gmobin1383 -> 1383 bytes
-rw-r--r--po/lt.po2
-rw-r--r--po/lv.gmobin4136 -> 4136 bytes
-rw-r--r--po/lv.po2
-rw-r--r--po/mt.gmobin1624 -> 1624 bytes
-rw-r--r--po/mt.po2
-rw-r--r--po/nb.gmobin3856 -> 3856 bytes
-rw-r--r--po/nb.po2
-rw-r--r--po/nl.gmobin4084 -> 4084 bytes
-rw-r--r--po/nl.po2
-rw-r--r--po/or.gmobin955 -> 955 bytes
-rw-r--r--po/or.po2
-rw-r--r--po/pl.gmobin4113 -> 4113 bytes
-rw-r--r--po/pl.po2
-rw-r--r--po/pt_BR.gmobin4228 -> 4228 bytes
-rw-r--r--po/pt_BR.po2
-rw-r--r--po/ro.gmobin1853 -> 1853 bytes
-rw-r--r--po/ro.po2
-rw-r--r--po/ru.gmobin5058 -> 5058 bytes
-rw-r--r--po/ru.po2
-rw-r--r--po/sk.gmobin4111 -> 4111 bytes
-rw-r--r--po/sk.po2
-rw-r--r--po/sl.gmobin2100 -> 2100 bytes
-rw-r--r--po/sl.po2
-rw-r--r--po/sq.gmobin1259 -> 1259 bytes
-rw-r--r--po/sq.po2
-rw-r--r--po/sr.gmobin5269 -> 5269 bytes
-rw-r--r--po/sr.po2
-rw-r--r--po/sv.gmobin1588 -> 1588 bytes
-rw-r--r--po/sv.po2
-rw-r--r--po/tr.gmobin1833 -> 1833 bytes
-rw-r--r--po/tr.po2
-rw-r--r--po/uk.gmobin5446 -> 5446 bytes
-rw-r--r--po/uk.po2
-rw-r--r--po/vi.gmobin4504 -> 4504 bytes
-rw-r--r--po/vi.po2
-rw-r--r--po/zh_CN.gmobin1539 -> 1539 bytes
-rw-r--r--po/zh_CN.po2
-rw-r--r--sys/bluez/gstavdtputil.c8
-rw-r--r--sys/dvb/gstdvbsrc.c29
-rw-r--r--sys/opensles/openslesringbuffer.c32
-rw-r--r--sys/shm/gstshmsrc.c9
-rw-r--r--tests/check/elements/curlsftpsink.c13
-rw-r--r--tests/check/libs/gstglupload.c35
-rw-r--r--tests/check/orc/bayer.c76
-rw-r--r--tests/examples/gl/clutter/clutteractor.c2
-rw-r--r--tests/examples/gl/clutter/clutteractortee.c2
-rw-r--r--tests/examples/gl/clutter/cluttershare.c4
-rw-r--r--tests/examples/gl/generic/cube/main.cpp2
-rw-r--r--tests/examples/gl/generic/cubeyuv/main.cpp57
-rw-r--r--tests/examples/gl/generic/doublecube/main.cpp75
-rw-r--r--tests/examples/gl/generic/recordgraphic/main.cpp43
-rw-r--r--win32/common/config.h8
351 files changed, 4394 insertions, 2949 deletions
diff --git a/ChangeLog b/ChangeLog
index c90844f6..9824c9e4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,9 +1,1075 @@
-=== release 1.3.1 ===
+=== release 1.3.2 ===
-2014-05-03 Sebastian Dröge <slomo@coaxion.net>
+2014-05-21 Sebastian Dröge <slomo@coaxion.net>
* configure.ac:
- releasing 1.3.1
+ releasing 1.3.2
+
+2014-05-21 19:47:22 +1000 Matthew Waters <ystreet00@gmail.com>
+
+ * gst-libs/gst/gl/gstglfilter.c:
+ gl/filter: fixup passthrough bufferpool
+ In a pipeline like so:
+ videotestsrc ! gleffects ! videoconvert ! sink
+ gleffects was simply passing the videoconvert bufferpool to videotestsrc
+ and not creating a glbufferpool. videobufferpool would then fail
+ to allocate from the glallocator.
+
+2014-05-21 10:51:26 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * common:
+ Automatic update of common submodule
+ From 211fa5f to 1f5d3c3
+
+2014-05-21 08:53:03 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst-libs/gst/mpegts/gst-dvb-section.c:
+ dvb-section: Don't compare unsigned integers for >= 0
+ gst-dvb-section.c:93:12: error: comparison of unsigned expression >= 0 is always true
+ [-Werror,-Wtautological-compare]
+ if (hour >= 0 && hour < 24 && minute >= 0 && minute < 60 && second >= 0
+ ~~~~ ^ ~
+ gst-dvb-section.c:93:40: error: comparison of unsigned expression >= 0 is always true
+ [-Werror,-Wtautological-compare]
+ if (hour >= 0 && hour < 24 && minute >= 0 && minute < 60 && second >= 0
+ ~~~~~~ ^ ~
+ gst-dvb-section.c:93:70: error: comparison of unsigned expression >= 0 is always true
+ [-Werror,-Wtautological-compare]
+ if (hour >= 0 && hour < 24 && minute >= 0 && minute < 60 && second >= 0
+ ~~~~~~ ^ ~
+
+2014-05-20 17:09:43 +0200 L. Sorin <sorin@axis.com>
+
+ * ext/curl/gstcurlsshsink.c:
+ curlsshsink: post error on bus in element, not transfer thread
+ Looks like this file was missed in Bug 728960:
+ https://bugzilla.gnome.org/show_bug.cgi?id=728960
+ https://bugzilla.gnome.org/show_bug.cgi?id=730459
+
+2014-05-21 10:26:21 +1000 Matthew Waters <ystreet00@gmail.com>
+
+ * gst-libs/gst/gl/gstglcolorconvert.c:
+ * gst-libs/gst/gl/gstglmemory.c:
+ * gst-libs/gst/gl/gstglupload.c:
+ gl/upload: switch the 'master' texture for YUY2, UYVY
+ From d4bcef3204709159713ff1630978ecac0bd91dc9 on, using a RGBA
+ texture to hold the data causes the glmemory to have half width
+ and a scaling of [2, 1]. Using a LA texture solves this problem
+ however cannot be attached to the framebuffer for copying into
+ a RGBA texture. Which will be solved by moving to EXT_texture_rg.
+ https://bugzilla.gnome.org/show_bug.cgi?id=728890
+
+2014-05-14 17:59:52 +1000 Matthew Waters <ystreet00@gmail.com>
+
+ * ext/gl/gstglimagesink.c:
+ * gst-libs/gst/gl/egl/gsteglimagememory.c:
+ * gst-libs/gst/gl/egl/gstglcontext_egl.c:
+ * gst-libs/gst/gl/egl/gstglcontext_egl.h:
+ * gst-libs/gst/gl/gstglfilter.c:
+ gl/eglimage: add eglimage context feature
+ Allows us to selectively use EGLImages only when available
+ https://bugzilla.gnome.org/show_bug.cgi?id=728234
+
+2014-05-14 17:33:21 +1000 Matthew Waters <ystreet00@gmail.com>
+
+ * docs/libs/gst-plugins-bad-libs-sections.txt:
+ * gst-libs/gst/gl/gstglcontext.c:
+ * gst-libs/gst/gl/gstglcontext.h:
+ gl/context: add generic feature checking
+ At the moment it simply delegates to the subclass.
+
+2014-05-20 11:42:35 +0200 Wim Taymans <wtaymans@redhat.com>
+
+ * gst/bayer/gstbayerorc.orc:
+ bayer: fix unused variable
+
+2014-01-28 14:04:11 +0100 L. Sorin <sorin@axis.com>
+
+ * ext/curl/gstcurlsshsink.c:
+ * ext/curl/gstcurlsshsink.h:
+ * tests/check/elements/curlsftpsink.c:
+ curlsftpsink: authenticate remote host via public key fingerprint
+ Expose one more libcurl option: CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.
+ This allows authenticating the server by the MD5 fingerprint of
+ the server's public key.
+ https://bugzilla.gnome.org/show_bug.cgi?id=723167
+
+2014-05-19 13:43:59 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * gst-libs/gst/mpegts/gst-dvb-section.c:
+ mpegts: Check hour:minute:second values before creating datetime
+ Avoids assertions when the packets are malformed and also add the case
+ where the time isn't specified, only the date.
+
+2014-05-19 12:25:51 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/gl/gstglimagesink.c:
+ glimagesink: Check if context creation failed before trying to use it
+ Otherwise we will cause assertions everywhere by passing NULL to functions
+ and eventually crash when dereferencing a NULL pointer.
+ https://bugzilla.gnome.org/show_bug.cgi?id=730069
+
+2014-05-19 12:21:13 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst-libs/gst/gl/gstglcontext.c:
+ glcontext: Add more assertions to make sure that everything sets the GError during context creation if something fails
+
+2014-05-19 11:34:42 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst/freeverb/gstfreeverb.c:
+ freeverb: Don't pass floats to abs() but instead cast them to ints first
+ gstfreeverb.c:781:29: error: using integer absolute value function 'abs' when
+ argument is of floating point type [-Werror,-Wabsolute-value]
+ if (abs (out_l2) > 0 || abs (out_r2) > 0)
+
+2014-05-19 09:12:14 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/rsvg/gstrsvgdec.c:
+ rsvgdec: Unref handle and output state on error paths
+ CID 1214604
+
+2014-05-16 09:10:48 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * sys/opensles/openslesringbuffer.c:
+ opensles: Work around race condition in Android < 4.2 that leads to deadlocks on shutdown
+ We need to sleep a bit before destroying the player object
+ because of a bug in Android in versions < 4.2.
+ OpenSLES is using AudioTrack for rendering the sound. AudioTrack
+ has a thread that pulls raw audio from the buffer queue and then
+ passes it forward to AudioFlinger (AudioTrack::processAudioBuffer()).
+ This thread is calling various callbacks on events, e.g. when
+ an underrun happens or to request data. OpenSLES sets this callback
+ on AudioTrack (audioTrack_callBack_pullFromBuffQueue() from
+ android_AudioPlayer.cpp). Among other things this is taking a lock
+ on the player interface.
+ Now if we destroy the player interface object, it will first of all
+ take the player interface lock (IObject_Destroy()). Then it destroys
+ the audio player instance (android_audioPlayer_destroy()) which then
+ calls stop() on the AudioTrack and deletes it. Now the destructor of
+ AudioTrack will wait until the rendering thread (AudioTrack::processAudioBuffer())
+ has finished.
+ If all this happens with bad timing it can happen that the rendering
+ thread is currently e.g. handling underrun but did not lock the player
+ interface object yet. Then destroying happens and takes the lock and waits
+ for the thread to finish. Then the thread tries to take the lock and waits
+ forever.
+ We wait a bit before destroying the player object to make sure that
+ the rendering thread finished whatever it was doing, and then stops
+ (note: we called gst_opensles_ringbuffer_stop() before this already).
+
+2014-05-15 20:34:48 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * gst-libs/gst/mpegts/gstmpegtsdescriptor.c:
+ mpegts: mpegtsdescriptor: fix gobject-introspection warnings
+ Adds missing : to gobject-introspection markers
+
+2014-05-15 19:16:30 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * gst-libs/gst/mpegts/gst-atsc-section.c:
+ * gst-libs/gst/mpegts/gst-dvb-section.c:
+ * gst-libs/gst/mpegts/gstmpegtssection.c:
+ mpegts: sections: prevent assertion when packet parsing fails
+ the descriptors entry can be left as NULL and freeing the structure
+ will fail (assertion happens)
+
+2014-05-14 21:32:10 +0200 Nicola Murino <nicola.murino@gmail.com>
+
+ * ext/opencv/gstmotioncells.c:
+ motioncells: fix memleak
+ Check gst_buffer_map return and remember to unmap and free memory before
+ returning
+ https://bugzilla.gnome.org/show_bug.cgi?id=730133
+
+2014-05-14 11:47:03 +0200 Wim Taymans <wtaymans@redhat.com>
+
+ * sys/bluez/gstavdtputil.c:
+ bluez: fix property names
+ These were forgotten when they got renamed.
+ Fixes https://bugzilla.gnome.org/show_bug.cgi?id=729731
+
+2014-05-13 14:13:57 +1000 Matthew Waters <ystreet00@gmail.com>
+
+ * docs/libs/gst-plugins-bad-libs-sections.txt:
+ * ext/gl/gstgltestsrc.c:
+ * gst-libs/gst/gl/gstgldownload.c:
+ * gst-libs/gst/gl/gstgldownload.h:
+ * gst-libs/gst/gl/gstglfilter.c:
+ * gst-libs/gst/gl/gstglmixer.c:
+ gl/download: update to be similar to the glupload semantics
+
+2014-05-13 14:07:39 +1000 Matthew Waters <ystreet00@gmail.com>
+
+ * gst-libs/gst/gl/gstglcolorconvert.c:
+ gl/colorconvert: fix up alpha clobbering
+ Previously it would only work if the alpha value was in the last
+ component (RGBx, BGRx). Now it works wherever the alpha value may
+ be (xRGB, xBGR, etc).
+
+2014-05-14 00:23:35 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/mxf/mxfdemux.c:
+ mxfdemux: post error message when erroring out on unsupported essence wrapping
+
+2014-04-10 16:10:06 +0200 Aurélien Zanelli <aurelien.zanelli@parrot.com>
+
+ * Android.mk:
+ Add missing backslash in Android.mk
+ https://bugzilla.gnome.org/show_bug.cgi?id=727968
+
+2014-05-13 16:29:46 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * ext/hls/gsthlssink.c:
+ hlssink: do not leak playlist object
+ In finalize, also release the playlist
+
+2014-05-13 13:16:34 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * gst-libs/gst/gl/gstglfilter.c:
+ glfilter: Fix building without EGL support
+ This fixes the OSX build and any builds with --disable-egl. That issue
+ was introduced in "glfilter: rewrite transform_caps to preserve caps fields".
+ https://bugzilla.gnome.org/show_bug.cgi?id=729861
+
+2014-05-13 13:30:47 +0100 Julien Isorce <julien.isorce@collabora.co.uk>
+
+ * gst-libs/gst/gl/gstglfilter.c:
+ glfilter: rewrite transform_caps to preserve caps fields
+ https://bugzilla.gnome.org/show_bug.cgi?id=729861
+
+2014-05-13 10:53:19 +1000 Matthew Waters <ystreet00@gmail.com>
+
+ * docs/libs/gst-plugins-bad-libs-sections.txt:
+ * gst-libs/gst/gl/gstglcolorconvert.c:
+ * gst-libs/gst/gl/gstglcolorconvert.h:
+ gl/colorconvert: use the texture scaling from the gl memory
+ The colorconvert values were not being used at all.
+ https://bugzilla.gnome.org/show_bug.cgi?id=729896
+
+2014-05-12 19:29:45 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * gst-libs/gst/gl/gstglmemory.c:
+ glmemory: Fix handling of stride with alignement larger then 8
+ Setting a scaled factor for X coordinate is not enough as the indexer
+ will still think stride is shorter and will not fully skip it. Instead,
+ update width, so the lines are as expected. Combined with the scale, it
+ will hide the cropped portion.
+ https://bugzilla.gnome.org/show_bug.cgi?id=729896
+
+2014-05-13 11:22:58 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * ext/dash/gstmpdparser.c:
+ dashdemux: mpdparser: properly unref gstdatetime
+ Avoid leaking the GstDateTime instances when summing dates
+ CID #1212143
+
+2014-05-13 10:24:51 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * ext/dash/gstmpdparser.c:
+ dashdemux: mpdparser: avoid double free of segment timeline node
+ The parsing function already frees the old value (if any), avoid a double
+ free by not freeing it before calling the function without setting the
+ pointer to NULL
+ Coverity ID: 1212178
+
+2014-05-13 10:13:37 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * ext/dash/gstmpdparser.c:
+ dashdemux: mpdparser: avoid double free
+ The _parse_url function already frees the previous pointer, avoid
+ freeing it before without setting to null or we have a double free.
+ Coverity ID: 1212181
+ Coverity ID: 1212180
+ Coverity ID: 1212179
+
+2014-05-13 14:21:15 +0200 Edward Hervey <edward@collabora.com>
+
+ * ext/schroedinger/gstschrodec.c:
+ schrodec: Use pool configuration
+ It was leaking the config, but also not using it...
+ CID #1212155
+
+2014-05-13 14:15:24 +0200 Edward Hervey <edward@collabora.com>
+
+ * ext/rsvg/gstrsvgdec.c:
+ rsvg: Don't leak GstVideoCodecState
+ And avoid useless call to _get_output_state (set_output_state() already
+ returns it).
+ CID #1212160
+ CID #1212161
+
+2014-05-13 13:54:23 +0200 Edward Hervey <edward@collabora.com>
+
+ * gst/mpegtsdemux/mpegtsbase.c:
+ mpegtbase: Small rewrite
+ Setting done was useless anyway
+
+2014-05-13 13:52:48 +0200 Edward Hervey <edward@collabora.com>
+
+ * ext/dash/gstmpdparser.c:
+ dash: Don't leak GstActiveStream
+ CID #1212142
+
+2014-05-13 11:41:42 +0200 Edward Hervey <edward@collabora.com>
+
+ * sys/shm/gstshmsrc.c:
+ shm: Don't leak GstShmPipe
+ By reordering the leaking code path to before the allocation
+ CID #1212153
+
+2014-05-13 11:38:44 +0200 Edward Hervey <edward@collabora.com>
+
+ * gst/vmnc/vmncdec.c:
+ vmndec: Don't leak output state
+ _set_output_state returns a reference to the codec state.
+ CID #1212170
+
+2014-05-13 11:35:46 +0200 Edward Hervey <edward@collabora.com>
+
+ * gst/sdp/gstsdpdemux.c:
+ sdpdemux: Don't leak adapter data
+ CID #1212158
+
+2014-05-13 11:30:35 +0200 Edward Hervey <edward@collabora.com>
+
+ * gst/mpegpsmux/psmuxstream.c:
+ mpegpsmux; Fix stream leak
+ CID #1212164
+
+2014-05-13 11:23:42 +0200 Edward Hervey <edward@collabora.com>
+
+ * gst/jp2kdecimator/jp2kcodestream.c:
+ jp2kdecimator: Don't leak various slices and arrays
+ CID #1212139
+ CID #1212140
+ CID #1212141
+
+2014-05-13 11:19:24 +0200 Edward Hervey <edward@collabora.com>
+
+ * gst/asfmux/gstasfobjects.c:
+ asfmux: Don't leak bytereader
+ By making it go through the error path that takes care of cleanups
+ CID #1212168
+
+2014-05-12 13:50:47 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * gst-libs/gst/gl/gstglupload.c:
+ glupload: Ensure we still have a texture after upload_set_format()
+ gst_gl_upload_set_format() resets the upload, hence the texture.
+ So we need to ensure we have a texture after this call when
+ uploading.
+
+2014-05-12 12:59:59 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * gst-libs/gst/gl/gstglupload.c:
+ glupload: Correctly update the video info from video meta
+ Using gst_video_info_set_format() isn't complete when updating
+ a video info from video meta.
+
+2014-05-12 12:57:18 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * gst-libs/gst/gl/gstglupload.c:
+ glupload: Correctly update video info in upload fallback
+ When the upload accelerated method fails, we fallback to an upload,
+ but the video info was not correctly updated.
+
+2014-05-12 18:28:45 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * ext/smoothstreaming/gstmssdemux.c:
+ mssdemux: avoid deadlocking when erroring
+ It might get stuck when posting the message while
+ a reconfigure event is being pushed upstream
+
+2014-05-12 17:37:16 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * ext/smoothstreaming/gstmssdemux.c:
+ mssdemux: fix caps leak
+
+2014-05-12 15:43:05 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * ext/smoothstreaming/gstmssdemux.c:
+ mssdemux: handle error messages from internal source
+ set up a bin message handler to get notified of error messages from
+ the internal source element
+
+2014-05-12 14:58:45 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * ext/smoothstreaming/gstmssdemux.c:
+ mssdemux: Always accept the latency configure event
+ Upstream or internal elements are irrelevant and we should
+ always succeed.
+
+2014-05-12 14:51:00 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * ext/smoothstreaming/gstmssdemux.c:
+ * ext/smoothstreaming/gstmssdemux.h:
+ mssdemux: reenable segment tracking for streams
+ Store the latest pushed timestamp so that mssdemux streams know
+ where they are in time
+
+2014-05-12 14:23:15 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * ext/smoothstreaming/gstmssdemux.c:
+ mssdemux: deprecate unused max-queue-size-buffers
+ There is no internal storage of buffers anymore
+
+2014-05-12 14:18:13 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * ext/smoothstreaming/Makefile.am:
+ * ext/smoothstreaming/gstdownloadrate.c:
+ * ext/smoothstreaming/gstdownloadrate.h:
+ * ext/smoothstreaming/gstmssdemux.c:
+ * ext/smoothstreaming/gstmssdemux.h:
+ mssdemux: measure bitrate similarly to hlsdemux
+ new bitrate = (old bitrate + (last fragment bitrate * 3)) / 4
+
+2014-05-12 13:40:19 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * ext/smoothstreaming/gstmssdemux.c:
+ * ext/smoothstreaming/gstmssdemux.h:
+ mssdemux: remove uridownloader in favor of internal source
+ Refactor mssdemux to remove uridownloader to use an internal
+ source element which reduces startup latency and provides smaller
+ buffers for better buffering management downstream
+
+2014-05-12 13:28:35 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * ext/dash/gstdashdemux.c:
+ dashdemux: initialize the mutex and cond for fragment download
+
+2014-05-12 13:32:31 +0100 Julien Isorce <julien.isorce@collabora.co.uk>
+
+ * gst-libs/gst/gl/gstglupload.c:
+ gl/upload: set out_tex after reset, not before
+ Fix a regression introduced recently with the lazy init.
+ It was happening when calling gst_video_gl_texture_upload_meta_upload
+ from an aplication. So not using gst_gl_upload_perform_with_buffer.
+
+2014-05-11 12:48:52 +1000 Matthew Waters <ystreet00@gmail.com>
+
+ * gst-libs/gst/gl/gstglupload.c:
+ gl/upload: update the video info on mapping a video frame
+ The buffer should contain the most specific data on how the data is
+ formatted. We should use this information.
+ https://bugzilla.gnome.org/show_bug.cgi?id=729896
+
+2014-05-12 21:56:06 +1000 Matthew Waters <ystreet00@gmail.com>
+
+ * gst-libs/gst/gl/gstglcolorconvert.c:
+ gl/convert: clobber alpha channel when needed
+ Needed in the conversion from padded RGB formats to formats with an
+ alpha channel. e.g. BGRx -> ABGR, etc
+ https://bugzilla.gnome.org/show_bug.cgi?id=729742
+
+2014-05-12 21:51:38 +1000 Matthew Waters <ystreet00@gmail.com>
+
+ * gst-libs/gst/gl/gstglupload.c:
+ gl/upload: avoid performing color conversion when there is no need
+ One such example is when the buffer contains GstGLMemory in the
+ RGBA format
+ https://bugzilla.gnome.org/show_bug.cgi?id=729278
+
+2014-05-12 10:01:43 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * sys/dvb/gstdvbsrc.c:
+ dvbsrc: Don't free string we're still using
+ CID 1213780
+
+2014-05-11 15:26:45 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * ext/dash/gstdashdemux.c:
+ * ext/dash/gstdashdemux.h:
+ dashdemux: remove unused stream uridownloader
+ The uridownloader for the stream fragments isn't used anymore.
+
+2014-05-11 07:56:17 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/assrender/gstassrender.c:
+ assrender: Do not try to add a feature to a caps features ANY
+ It does not makes sense and asserts
+ Based on 7f9aac386fd5d5921c80100889a5f212c0148a88 from gst-plugins-base.
+
+2014-05-11 07:55:59 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst/dvbsuboverlay/gstdvbsuboverlay.c:
+ dvbsuboverlay: Do not try to add a feature to a caps features ANY
+ It does not makes sense and asserts.
+ Based on 7f9aac386fd5d5921c80100889a5f212c0148a88 from gst-plugins-base.
+
+2014-05-11 14:02:34 +1000 Matthew Waters <ystreet00@gmail.com>
+
+ * gst-libs/gst/gl/gstglcolorconvert.c:
+ gl/colorconvert: choose the right alpha component for AYUV -> RGBA
+
+2014-05-11 10:27:02 +1000 Matthew Waters <ystreet00@gmail.com>
+
+ * gst-libs/gst/gl/gstglupload.c:
+ gl/upload: update the respective state when we cache textures/data
+
+2014-05-01 02:10:20 -0400 Reynaldo H. Verdejo Pinochet <reynaldo@sisa.samsung.com>
+
+ * sys/dvb/gstdvbsrc.c:
+ dvbsrc: drop C++ style comments
+ This patch builds on previous work done by
+ Fabrizio (Misto) Milo <mistobaan@gmail.com>
+ https://bugzilla.gnome.org/show_bug.cgi?id=641204
+
+2014-05-01 01:58:03 -0400 Reynaldo H. Verdejo Pinochet <reynaldo@sisa.samsung.com>
+
+ * sys/dvb/gstdvbsrc.c:
+ dvbsrc: fix up error reporting
+ This patch builds on previous work done by
+ Fabrizio (Misto) Milo <mistobaan@gmail.com>
+ https://bugzilla.gnome.org/show_bug.cgi?id=641204
+
+2014-05-10 23:33:24 +1000 Matthew Waters <ystreet00@gmail.com>
+
+ * gst-libs/gst/gl/gstglupload.c:
+ gl/upload: cache the textures that we are using
+
+2014-05-10 22:48:05 +1000 Matthew Waters <ystreet00@gmail.com>
+
+ * gst-libs/gst/gl/gstglupload.c:
+ gl/upload: avoid recreating the GLMemory struct for output textures
+
+2014-04-11 19:38:32 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * ext/rtmp/gstrtmpsrc.c:
+ rtmpsrc: error out if we get EOS immediately without any data
+ It's not really right to just go EOS as if nothing was wrong.
+
+2014-05-10 12:54:58 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/mpegtsdemux/tsdemux.c:
+ tsdemux: remove confusing debug log line
+
+2014-05-07 20:08:08 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * gst/autoconvert/gstautoconvert.c:
+ * gst/autoconvert/gstautoconvert.h:
+ autoconvert: factories don't need the lock
+ An atomic is enough, they can only be set once.
+
+2014-05-09 20:06:12 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * gst/autoconvert/gstautoconvert.c:
+ Revert "autoconvert: Handle caps query on internal srcpad"
+ This is not needed anymore if the gst_pad_link checks nothing.
+ This reverts commit a303375a3f5c12e97ca8bf50b5a93ce8652faf23.
+
+2014-05-09 20:12:27 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * gst/autoconvert/gstautoconvert.c:
+ autoconvert: No need to check anything when linking internal pads
+
+2014-05-09 20:05:07 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * gst/autoconvert/gstautoconvert.c:
+ autoconvert: Don't ignore elements accepted ANY, it is valid
+
+2014-05-09 18:49:14 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * gst/autoconvert/gstautoconvert.c:
+ autoconvert: Remove broken usage of the iterator
+ We're a subclass, so we can just take the object lock and iterate the list
+ directly.
+
+2014-05-08 19:35:07 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * gst/autoconvert/gstautoconvert.c:
+ autoconvert: Process upstream getcaps
+ Process it like downstream getcaps
+
+2014-05-07 20:00:08 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * gst/autoconvert/gstautoconvert.c:
+ autoconvert: Return the GList of factories, to a pointer to it.
+
+2014-05-07 19:54:46 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * gst/autoconvert/gstautoconvert.c:
+ * gst/autoconvert/gstautoconvert.h:
+ autoconvert: subelement can only be change with stream lock held
+ It was already the case, now be more explicit about that, and remove useless
+ lock/ref/unlock/unref dances.
+
+2014-05-07 19:48:49 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * gst/autoconvert/gstautoconvert.c:
+ autoconvert: Keep a ref to the pads too
+ Simplifies the code
+
+2014-05-07 19:47:04 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * gst/autoconvert/gstautoconvert.c:
+ autoconvert: Remove uneeded if()
+ NULL is valid GList
+
+2014-05-07 19:44:11 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * gst/autoconvert/gstautoconvert.c:
+ autoconvert: Always push reconfigure upstream too
+ A reconfigure could trigger a change of contents instead of just reconfiguring the internal element
+
+2014-05-07 19:43:13 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * gst/autoconvert/gstautoconvert.c:
+ autoconvert: Remove unused internal parameter
+
+2014-05-09 18:59:46 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * gst-libs/gst/gl/gstglcolorconvert.c:
+ * gst-libs/gst/gl/gstglupload.c:
+ gl: Fix some of the error handling
+
+2014-05-09 17:59:43 -0400 Nicolas Dufresne <nicolas.dufresne@collabora.com>
+
+ * gst-libs/gst/gl/gstglupload.c:
+ glupload: Update GstVideoInfo after the buffer is mapped
+ gst_video_frame_map() will store an updated video info base
+ on the video meta. In order to have the right stride and offset
+ we should update that video info accordingly.
+
+2014-05-09 15:42:08 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst-libs/gst/gl/gstglshadervariables.c:
+ gl: Fix memory leak
+ CID #1212171
+
+2014-05-09 15:26:31 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/hls/m3u8.c:
+ hls: Remove invalid free
+ data does not have to be freed at all here, it's a pointer to
+ an arbitrary position inside the current line. Also don't reuse
+ the data variable for anything else, that will cause crashes
+ in playlists that have the I-frame playlist URI followed by
+ other attributes.
+ CID 1212127
+
+2014-05-09 14:31:57 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * gst-libs/gst/mpegts/gst-dvb-descriptor.c:
+ mpegts: Fix leak
+ The cell extension was never added to the parent cell
+ CID #1212162
+
+2014-05-09 22:22:43 +1000 Matthew Waters <ystreet00@gmail.com>
+
+ * gst-libs/gst/gl/gstglcolorconvert.c:
+ gl/colorconvert: preserve alpha in AYUV <-> RGBA conversions
+ https://bugzilla.gnome.org/show_bug.cgi?id=729743
+
+2014-05-09 18:07:03 +1000 Matthew Waters <ystreet00@gmail.com>
+
+ * gst-libs/gst/gl/gstglcolorconvert.c:
+ * gst-libs/gst/gl/gstglcolorconvert.h:
+ * gst-libs/gst/gl/gstgldownload.c:
+ * gst-libs/gst/gl/gstglupload.c:
+ gl/colorconvert: implement lazy init
+
+2014-05-08 15:38:24 +0100 Julien Isorce <julien.isorce@collabora.co.uk>
+
+ * gst-libs/gst/gl/gstglupload.c:
+ gl/upload: set initted to TRUE when _init_upload succeeded
+
+2014-05-08 22:49:33 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst-libs/gst/gl/gstgldisplay.c:
+ gldisplay: Use GST_STR_NULL() for printing possibly NULL strings and print all variables we use
+ Fixes compiler warning about set but not used platform_choice variable
+ among other things.
+
+2014-05-08 16:08:08 +0100 Julien Isorce <julien.isorce@collabora.co.uk>
+
+ * ext/gl/gstgleffects.c:
+ gleffects: use gl_vtable
+
+2014-05-08 17:28:11 +1000 Matthew Waters <ystreet00@gmail.com>
+
+ * gst-libs/gst/gl/gstglupload.c:
+ gl/upload: fix compilation on OS X
+
+2014-05-08 15:40:33 +1000 Matthew Waters <ystreet00@gmail.com>
+
+ * gst-libs/gst/gl/gstglupload.c:
+ gl/upload: fail propoerly if init fails
+
+2014-05-08 15:30:49 +1000 Matthew Waters <ystreet00@gmail.com>
+
+ * gst-libs/gst/gl/gstglcolorconvert.c:
+ * gst-libs/gst/gl/gstglcolorconvert.h:
+ * gst-libs/gst/gl/gstglcontext.c:
+ * gst-libs/gst/gl/gstglcontext.h:
+ * gst-libs/gst/gl/gstgldisplay.c:
+ * gst-libs/gst/gl/gstgldownload.c:
+ * gst-libs/gst/gl/gstgldownload.h:
+ * gst-libs/gst/gl/gstglshader.c:
+ * gst-libs/gst/gl/gstglshader.h:
+ * gst-libs/gst/gl/gstglupload.c:
+ * gst-libs/gst/gl/gstglupload.h:
+ * gst-libs/gst/gl/gstglwindow.c:
+ * gst-libs/gst/gl/gstglwindow.h:
+ gl: make all GObjects inherit from GstObject
+ Aids memory leak debugging with GST_TRACE=mem-live
+
+2014-05-08 13:46:29 +1000 Matthew Waters <ystreet00@gmail.com>
+
+ * docs/libs/gst-plugins-bad-libs-sections.txt:
+ * ext/gl/gstglimagesink.c:
+ * gst-libs/gst/gl/gstglbufferpool.c:
+ * gst-libs/gst/gl/gstglfilter.c:
+ * gst-libs/gst/gl/gstglmemory.c:
+ * gst-libs/gst/gl/gstglmixer.c:
+ * gst-libs/gst/gl/gstglupload.c:
+ * gst-libs/gst/gl/gstglupload.h:
+ * tests/check/libs/gstglupload.c:
+ gl/upload: implement lazy init
+ Rename init_format to set_format
+
+2014-05-08 00:59:42 +1000 Matthew Waters <ystreet00@gmail.com>
+
+ * docs/libs/gst-plugins-bad-libs-sections.txt:
+ * gst-libs/gst/gl/gstglupload.c:
+ * gst-libs/gst/gl/gstglupload.h:
+ gl/upload: add get_format method
+ Simply retreives the format set by init_format
+
+2014-05-08 00:48:07 +1000 Matthew Waters <ystreet00@gmail.com>
+
+ * gst-libs/gst/gl/gstglfilter.c:
+ gl/filter: attempt to passthrough the pool if the caps are the same
+ Reduces the number of glbufferpool instances required for >=2
+ consecutive GL elements in a pipeline.
+
+2014-05-08 00:43:14 +1000 Matthew Waters <ystreet00@gmail.com>
+
+ * gst-libs/gst/gl/gstglfilter.c:
+ gl/filter: always initialize the upload object
+
+2014-05-07 21:45:53 +1000 Matthew Waters <ystreet00@gmail.com>
+
+ * ext/gl/gstglimagesink.c:
+ * ext/gl/gstgltestsrc.c:
+ * gst-libs/gst/gl/gstglfilter.c:
+ * gst-libs/gst/gl/gstglmemory.h:
+ * gst-libs/gst/gl/gstglmixer.c:
+ gl: advertise GstGLMemory usage in the caps as capsfeatures
+ https://bugzilla.gnome.org/show_bug.cgi?id=729658
+
+2014-05-07 20:12:23 +1000 Matthew Waters <ystreet00@gmail.com>
+
+ * tests/examples/gl/clutter/clutteractor.c:
+ * tests/examples/gl/clutter/clutteractortee.c:
+ gl/examples: fix compilation for clutter examples
+ ClutterX11TexturePixmap is deprecated in Clutter 1.6 and we ask for
+ at least 1.8
+
+2014-05-07 19:05:55 +1000 Matthew Waters <ystreet00@gmail.com>
+
+ * gst-libs/gst/gl/gstgldisplay.c:
+ gl/display: avoid endless recursion for cocoa
+
+2014-05-06 08:52:27 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * ext/dash/gstdashdemux.c:
+ dashdemux: deprecate max-buffering-time property
+ It is not used as dashdemux doesn't have a internal buffer
+ for fragments anymore
+
+2014-05-06 01:56:28 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * ext/dash/gstdashdemux.c:
+ dashdemux: removing old unused code
+ The 'catch up mode' isn't needed anymore since dashdemux
+ is downloading and pushing from the same thread
+
+2014-05-05 10:13:15 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * ext/dash/gstdashdemux.c:
+ dashdemux: remember to set starting fragment to new fragments
+
+2014-05-02 18:34:04 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * ext/dash/gstdashdemux.c:
+ dashdemux: handle a few more error cases
+ related to missing plugins, bad URI and a lockup on dealing with
+ errors from the source.
+
+2014-05-02 18:32:56 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * ext/dash/gstdashdemux.c:
+ dashdemux: Only set timestamp to the first buffer of fragments
+ Setting it to the other parts of the fragment is slightly wrong
+ and misleading as it isn't accurate enough.
+
+2014-05-02 18:30:05 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * ext/dash/gstdashdemux.c:
+ * ext/dash/gstdashdemux.h:
+ dashdemux: handle error messages from the sources
+ Set up a message handling function to be able to catch errors
+ from the source element and signal the cond to allow the download
+ loop to retry the download.
+
+2014-05-01 21:04:54 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * ext/dash/gstdashdemux.c:
+ dashdemux: check for errors between downloads
+ To abort earlier in case of failures
+
+2014-05-01 21:00:32 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * ext/dash/gstdashdemux.c:
+ dashdemux: Always accept the latency configure event
+ Upstream or internal elements are irrelevant and we should
+ always succeed.
+
+2014-05-01 12:04:51 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * ext/dash/Makefile.am:
+ * ext/dash/gstdashdemux.c:
+ * ext/dash/gstdashdemux.h:
+ * ext/dash/gstdownloadrate.c:
+ * ext/dash/gstdownloadrate.h:
+ dashdemux: measure download rate just like hlsdemux
+ new bitrate = (old bitrate + (last fragment bitrate * 3)) / 4
+
+2014-04-25 08:50:18 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * ext/dash/gstdashdemux.c:
+ * ext/dash/gstdashdemux.h:
+ dashdemux: remove uridownloader from fragments download
+ Instead, use a source element linked to a ghostpad to provide
+ smaller buffers and more granular control for downstream
+ buffering elements while also reducing startup latency
+
+2014-05-07 09:11:25 +1000 Matthew Waters <ystreet00@gmail.com>
+
+ * ext/gl/gstglimagesink.c:
+ gl/sink: make sure we always initialize the upload object
+ https://bugzilla.gnome.org/show_bug.cgi?id=729542
+
+2014-05-06 19:24:55 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * ext/hls/gsthlsdemux.c:
+ hlsdemux: fix internal source event leaks
+
+2014-05-06 11:59:24 +0100 Julien Isorce <julien.isorce@collabora.co.uk>
+
+ * gst-libs/gst/gl/gstglupload.c:
+ gl: do not allocate the target texture of an EGLImage
+ The target texture of an EGLImage is the texture bind just
+ before calling glEGLImageTargetTexture2D.
+ As we currently only support a gl texture as the source of an EGLImage
+ the gl texture is actually already allocated when creating the eglimage.
+ I also see some cases where it fails to upload an eglimage when
+ glTexImage2D is called on the target.
+
+2014-05-06 11:51:31 +0100 Julien Isorce <julien.isorce@collabora.co.uk>
+
+ * gst-libs/gst/gl/gstglutils.c:
+ gl: allow to avoid calling glTexImage2D(w, h, NULL) when generating a texture
+ Just pass 0 as width or height to gst_gl_context_gen_texture.
+
+2014-05-06 11:27:47 +0100 Julien Isorce <julien.isorce@collabora.co.uk>
+
+ * gst-libs/gst/gl/gstglbufferpool.c:
+ gl: no need to initialize a frame buffer object to upload an eglimage
+ Fix https://bugzilla.gnome.org/show_bug.cgi?id=729588
+
+2014-05-06 11:21:56 +0100 Julien Isorce <julien.isorce@collabora.co.uk>
+
+ * gst-libs/gst/gl/egl/gsteglimagememory.c:
+ gl: use GST_CAT_ERROR instead of GST_ERROR_OBJECT
+ It fixes segault when GST_DEBUG is at least level 1 and eglCreateImage fails
+
+2014-05-06 10:14:26 +0100 Julien Isorce <julien.isorce@collabora.co.uk>
+
+ * gst-libs/gst/gl/gstglupload.c:
+ gl: delete texture used with GstVideoGLTextureUploadMeta
+
+2014-05-06 14:23:34 +0100 Julien Isorce <julien.isorce@collabora.co.uk>
+
+ * gst-libs/gst/gl/gstglcolorconvert.c:
+ gl: use gst_gl_context_gen_shader helper instead of duplicating code
+
+2014-05-06 09:55:05 -0400 Luis de Bethencourt <luis@debethencourt.com>
+
+ * gst/pnm/gstpnmenc.c:
+ pnmenc: remove empty line
+ Remove trailing empty line from commit bfdc54395238c04fc6e5b51880c2d706f33e9011
+ https://bugzilla.gnome.org/show_bug.cgi?id=729614
+
+2013-11-20 12:16:17 +0100 Jesper Larsen <jesper.larsen@ixonos.com>
+
+ * gst/mpegtsmux/tsmux/tsmux.h:
+ mpegtsmux: Remove unused data in TsMuxSection
+ https://bugzilla.gnome.org/show_bug.cgi?id=721685
+
+2014-05-06 21:17:59 +1000 Matthew Waters <ystreet00@gmail.com>
+
+ * tests/check/Makefile.am:
+ tests: reenable camerabin element test
+
+2014-05-06 16:39:06 +1000 Matthew Waters <ystreet00@gmail.com>
+
+ * gst-libs/gst/gl/gstglcontext.c:
+ * gst-libs/gst/gl/gstgldisplay.c:
+ * gst-libs/gst/gl/gstgldisplay.h:
+ * tests/check/Makefile.am:
+ gl/display: clean up pre gstglcontext api and struct fields
+ https://bugzilla.gnome.org/show_bug.cgi?id=729551
+
+2014-05-06 17:27:15 +1000 Matthew Waters <ystreet00@gmail.com>
+
+ * docs/libs/gst-plugins-bad-libs-sections.txt:
+ * gst-libs/gst/gl/gstgldisplay.c:
+ * gst-libs/gst/gl/gstgldisplay.h:
+ gl/display: add get_handle_type
+ https://bugzilla.gnome.org/show_bug.cgi?id=729551
+
+2014-05-06 17:08:18 +1000 Matthew Waters <ystreet00@gmail.com>
+
+ * gst-libs/gst/gl/gstgldisplay.c:
+ gl/display: avoid opening the X11 display on systems with Cocoa (OS X)
+ https://bugzilla.gnome.org/show_bug.cgi?id=729551
+
+2014-05-06 16:39:55 +1000 Matthew Waters <ystreet00@gmail.com>
+
+ * gst-libs/gst/gl/gstglwindow.c:
+ gl/window: fix string length check for eagl
+
+2014-05-06 16:31:28 +1000 Matthew Waters <ystreet00@gmail.com>
+
+ * gst-libs/gst/gl/gstgldisplay.c:
+ gl/display: check the correct env variable for choosing an egl display
+ GST_GL_WINDOW is used for window system specific choices.
+ An EGLDisplay can be created from window systems with egl support by using
+ eglGetDisplay().
+ https://bugzilla.gnome.org/show_bug.cgi?id=729551
+
+2014-05-06 12:56:25 +0200 Edward Hervey <bilboed@bilboed.com>
+
+ * gst-libs/gst/gl/cocoa/Makefile.am:
+ gl/cocoa: Use OBJCFLAGS where needed
+ Should fix usage of c-compiler-only flags with an objective-c compiler
+
+2014-05-06 09:48:58 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * gst/pnm/gstpnmenc.c:
+ pnmenc: fix flow return and buffer leak in not-negotiated case
+ https://bugzilla.gnome.org/show_bug.cgi?id=729614
+
+2014-05-06 09:40:01 +0100 Tim-Philipp Müller <tim@centricular.com>
+
+ * tests/icles/.gitignore:
+ tests: add new vp8parser-test binary to .gitignore
+
+2014-05-05 17:20:45 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * ext/srtp/gstsrtpdec.c:
+ srtpdec: Don't reset stream if the key hasn't changed
+
+2014-05-05 17:00:02 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * ext/srtp/gstsrtpdec.c:
+ * ext/srtp/gstsrtpdec.h:
+ srtpdec: Add "remove-key" action signal to remove a single key
+ Removing all the keys can be a problem as it also resets the various
+ counters, so instead add an option to remove a single key.
+
+2014-05-05 22:25:08 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * ext/srtp/gstsrtpenc.c:
+ srtpenc: Use %u in templates to match rtpbin
+
+2014-05-06 00:11:26 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * ext/srtp/gstsrtpdec.c:
+ srtpdec: Remove unused field
+
+2014-05-06 09:23:13 +0530 Sanjay NM <sanjay.nm@samsung.com>
+
+ * gst/pnm/gstpnmenc.c:
+ Fix for not checking zero width and height
+ Signed-off-by: Sanjay NM <sanjay.nm@samsung.com>
+ https://bugzilla.gnome.org/show_bug.cgi?id=729614
+
+2014-05-05 11:13:09 -0300 Thiago Santos <ts.santos@sisa.samsung.com>
+
+ * ext/hls/gsthlsdemux.c:
+ hlsdemux: Only set the segment position if there is a timestamp
+ Only the first buffer of a fragment has its timestamp set, so only
+ update the segment.position when pushing those buffers to avoid
+ having GST_CLOCK_TIME_NONE set to the position
+ https://bugzilla.gnome.org/show_bug.cgi?id=729364
+
+2014-05-05 12:30:32 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * configure.ac:
+ configure: Use the same includes for GL that we would use later in the code for checking if GLES2 and OpenGL headers can both be included
+
+2014-05-05 20:06:29 +1000 Matthew Waters <ystreet00@gmail.com>
+
+ * configure.ac:
+ gl: check if we can include both GL and GLES2 headers at the same time
+ If we cannot, then default to GL over GLES2 unless GLES2 is required.
+
+2014-05-05 09:46:06 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/hls/gsthlsdemux.c:
+ hlsdemux: Set Cache-Control header according to the caching requirements of the playlist
+
+2014-05-05 09:38:14 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/smoothstreaming/gstmssdemux.c:
+ mssdemux: Update for uri downloader API changes
+
+2014-05-05 09:37:44 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/dash/gstdashdemux.c:
+ dashdemux: Update for uri downloader API changes
+
+2014-05-05 09:36:56 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * gst-libs/gst/uridownloader/gsturidownloader.c:
+ * gst-libs/gst/uridownloader/gsturidownloader.h:
+ uridownloader: Add parameter to disallow caching as required by HLS
+
+2014-05-05 09:34:56 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * ext/hls/m3u8.c:
+ * ext/hls/m3u8.h:
+ hls: Store allowcache playlist field in a boolean
+
+2014-05-04 22:22:14 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * configure.ac:
+ configure: Use the same #includes for checking GL types as later in the code
+
+2014-05-03 21:38:42 -0400 Luis de Bethencourt <luis@debethencourt.com>
+
+ * tests/examples/gl/clutter/cluttershare.c:
+ gl/clutter: safer check for cogl version
+ Use COGL_VERSION_ENCODE to check for the minimum required and maximum allowed
+ cogl version. In certain situations just using the COGL_VERSION_* macro name can
+ give you the following error:
+ error "COGL_VERSION_MAX_ALLOWED must be >= COGL_VERSION_MIN_REQUIRED"
+
+2014-05-03 21:05:19 -0400 Luis de Bethencourt <luis@debethencourt.com>
+
+ * tests/examples/gl/generic/cube/main.cpp:
+ * tests/examples/gl/generic/cubeyuv/main.cpp:
+ * tests/examples/gl/generic/doublecube/main.cpp:
+ * tests/examples/gl/generic/recordgraphic/main.cpp:
+ gl/examples/generic: remove trailing whitespaces
+
+2014-05-03 20:48:33 +0200 Sebastian Dröge <sebastian@centricular.com>
+
+ * configure.ac:
+ Back to development
+
+=== release 1.3.1 ===
2014-05-03 18:16:21 +0200 Sebastian Dröge <sebastian@centricular.com>
diff --git a/NEWS b/NEWS
index c8715a58..692e58da 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,4 @@
-This is GStreamer Bad Plugins 1.3.1
+This is GStreamer Bad Plugins 1.3.2
Changes since 1.2:
@@ -45,6 +45,8 @@ New API:
events and merge custom tags into them consistently.
• playbin/playsink has support for application provided audio and video
filters.
+ • GstDiscoverer has new and simplified API to get details about missing
+ plugins and information to pass to the plugin installer.
• The GL library was merged from gst-plugins-gl to gst-plugins-bad,
providing a generic infrastructure for handling GL inside GStreamer
pipelines and a plugin with some elements using these, especially
@@ -62,6 +64,14 @@ Major changes:
of the existing V4L2 elements and the corresponding
infrastructure.
The v4l2videodec element replaces the mfcdec element.
+ ∘ New downloadbuffer element that replaces the download
+ buffering feature of queue2. Compared to queue2's code
+ it is much simpler and only for this single use case.
+ A noteworthy new feature is that it's downloading gaps
+ in the already downloaded stream parts when nothing else
+ is to be downloaded.
+ This is now used by playbin when download buffering is
+ enabled.
∘ rtpstreampay and rtpstreamdepay elements for transmitting
RTP packets over a stream API (e.g. TCP) according to
RFC 4571.
@@ -78,7 +88,7 @@ Major changes:
are available on OS X and iOS now.
• Other changes:
- ∘ gst-libav now uses libav 10, and gained support for H265/HEVC.
+ ∘ gst-libav now uses libav 10.1, and gained support for H265/HEVC.
∘ Support for hardware codecs and special memory types has been
improved with bugfixes and feature additions in various plugins
and base classes.
@@ -95,6 +105,9 @@ Major changes:
reliable now and supports more HLS features like trick modes.
Also fragments are pushed downstream while they're downloaded
now instead of waiting for each fragment to finish.
+ ∘ dashdemux and mssdemux are now also pushing fragments downstream
+ while they're downloaded instead of waiting for each fragment to
+ finish.
∘ videoflip can automatically flip based on the orientation tag.
∘ openjpeg supports the OpenJPEG2 API.
∘ gst-rtsp-server supports SRTP and MIKEY now.
@@ -107,4 +120,3 @@ 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.
-
diff --git a/RELEASE b/RELEASE
index 3b179d80..650777d3 100644
--- a/RELEASE
+++ b/RELEASE
@@ -1,8 +1,8 @@
-Release notes for GStreamer Bad Plugins 1.3.1
+Release notes for GStreamer Bad Plugins 1.3.2
-The GStreamer team is pleased to announce the first release of the unstable
+The GStreamer team is pleased to announce the second 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
@@ -75,138 +75,22 @@ contains a set of codecs plugins based on libav (formerly gst-ffmpeg)
Bugs fixed in this release
- * 709414 : dvbsrc: Uses deprecated field frontend type and add DVB S2/T2 support
- * 723670 : Move VideoToolBox elements from applemedia to a different plugin
- * 728514 : glimagesink fails with gst-sdk android tutorial-5 / tutorial-4
- * 728356 : jpegparse: Does not passthrough timestamps depending on downstream elements
- * 519220 : Add W64/R64 support
- * 574408 : audiomixer: Need an element to do synchronized audio mixing
- * 628055 : tsdemux: Handle PCR/PTS/DTS discont/gaps
- * 644395 : mpegtsdemux / mpegtsmux: data flow error
- * 664443 : h264parse: Parsing shifts timestamps between frames
- * 671136 : mpegtsmux: add support for SDT and NIT tables for DVB-S/DVB-T
- * 675869 : hlsdemux: potential dead-lock using GstTask
- * 695846 : hlsdemux: No longer switches pads on playlist changes
- * 698748 : mpegtsmux: improper timestamping of output packets
- * 699924 : smoothstreaming: no audio with BBC bigbuckbunny stream
- * 701404 : dashdemux: should not buffer the entire Period
- * 703342 : gl: implement support for DispManX (Raspberry Pi)
- * 703343 : Add EGLImage support (consume and provide buffer pool)
- * 706054 : move GstEGLImageBufferPool and allocator from eglglessink to gstegl lib
- * 708345 : liveadder: round when calculation length from duration
- * 708438 : codecparsers: HEVC bitstream parser
- * 708629 : codecparsers: Fix the quantization matrix scan order for h264
- * 708688 : Message EISS and SCTE signaling sections on bus similar to PSI
- * 708914 : Add openni2 plugin and openni2src element
- * 709174 : Add avfvideosrc to the OS X build in applemedia
- * 709180 : mpegts: Return GstMpegTsDescriptor in mpegts_get_descriptor_from_*
- * 709454 : dvdspu: make palette change event sticky
- * 709795 : curlsftpsink - new libcurl-based sink element for SFTP
- * 710391 : geometrictransform: rotate: fix angle property help text
- * 710759 : mpegts: fix uninitialized variable warnings
- * 710810 : geometrictransform: Add a plugin for a 2D perspective transform
- * 710855 : ivfparse: Port to 1.0
- * 711009 : h264parse: Remove explicit PAR calculation and use the values provided by h264 codecparser
- * 711086 : hlssink: doesn't have the sink flag set
- * 711140 : vtenc: use proper release callback type in CVPixelBufferCreateWithPlanarBytes
- * 711159 : eglglessink: remove unused functions in the eagl backend
- * 711223 : Port cdaudio element to 1.
- * 711606 : applemedia: coremediabuffer: use correct retain/release functions on CMSampleBufferRef buffer
- * 711614 : avfvideosrc: set rank to GST_PRIMARY
- * 711620 : curlftpsink: Create a temporary file during FTP transfer/upload
- * 711844 : avfvideosrc: build failure
- * 711849 : smoothstreaming: Better handling of multi audio tracks
- * 714998 : d3dvideosink: force-aspect-ratio=false causes errors due to usage of uninitialised destination rectangle
- * 719519 : mpegtsmux: Does not prevent plugging unparsed stream
- * 720382 : dvbsuboverlay: fix reading of display window in display definition segment
- * 720434 : srtp: add 256-bit keys support
- * 721027 : mfcdec: doesn't work in odroid with kernel 3.8: dequeueing failed in input_dqbuf
- * 721073 : shm: test_shm_sysmem_alloc unit test fails with timeout after some time
- * 721293 : POTFILES.in is out of date
- * 721682 : examples: tsparser: Add DVB teletext/subtitling parsing
- * 721950 : assrender: handle video/x-raw(ANY) if downstream supports the GstVideoOverlayCompositionMeta API
- * 722078 : schroenc: oggmux drops buffers from schroenc because of unset buffer offsets
- * 722081 : h265parse: Fix segfault when parsing VPS
- * 722101 : h265parser: fix a trivial overrun in a loop
- * 722145 : tsdemux: fix memleak of PCROffsetCurrent
- * 722240 : h265parse: update caps when receive VPS/SPS
- * 722462 : tsdemux: Fix leak of PCROffsetGroup
- * 722590 : applemedia: Fails to build on iOS: 'VideoToolbox/VideoToolbox.h' file not found
- * 722669 : h265parser: Crashes on broken streams because of freeing uninitialized pointer
- * 722699 : mpegtsmux: don't leak pad name when treating events
- * 722934 : mxfdemux: don't use pull mode when the sequential scheduler flag is set
- * 723243 : h264parse: Default framerate to 25/1 when no informations found
- * 723268 : hlsdemux: Does not take into account stop time of seek events
- * 723508 : applemedia: Fails to build on Mac OS X 10.7: 'VideoToolbox/VideoToolbox.h' file not found
- * 723892 : mpegts: Some bugfixes regarding packetizing
- * 723953 : mpegts: Unit test for library RFC
- * 723995 : winks: configure test is broken - missing braces
- * 724003 : winks: headers are not mentioned in Makefile.am
- * 724034 : mpegts: parse extended event, component and content descriptors
- * 724069 : mpegts: add terrestrial delivery system descriptor
- * 724077 : shm: use shutdown() instead of close()
- * 724100 : error: unknown type name 'gst_ks_clock'
- * 724125 : curlsmtpsink: Timezone information is missed out in the sending out smtp email header
- * 724255 : mpegts: Provide original binary data in the public API
- * 724464 : mpegts: does not check data sizes when parsing descriptors
- * 724699 : katedec: Katedec overwrites tags from oggdemux
- * 724716 : tsparse: setting pipeline to PLAYING - > READY - > PLAYING is broken
- * 724790 : dashdemux: live MPDs are immediately reloaded
- * 724875 : dashdemux: attempts to fetch fragments before they're available.
- * 724981 : mpegts: Add support for creation of SDT and service descriptor
- * 725090 : debugutilsbad: fails gst-indent check
- * 725134 : hlsdemux: null pointer deref if media playlist contains no media
- * 725278 : add missed dvbsrc, mpegts docs
- * 725412 : srtpenc: unref caps in sink query
- * 725463 : change bandwidth to DVBv5-API
- * 725481 : gst-plugins-bad: Ignore gcov intermediate files
- * 725563 : tsdemux: Support DTS/DTS-HD bluray streams
- * 725659 : wininetsrc: " iradio-mode " to default to TRUE
- * 725893 : dvdspu: set proxy allocation flag on video sink pad
- * 726028 : mpegvideoparse: Differentiate the mpeg-2 stream from mpeg-1 based on pic_ext also
- * 726069 : frei0rfilter: memory corruption when the size of the incoming buffers change
- * 726098 : sbcenc: Allow user to set channel-mode
- * 726156 : watchdog: Add handling of paused state
- * 726463 : dvbsuboverlay: handle video/x-raw(ANY) if downstream supports the GstVideoOverlayCompositionMeta API
- * 726572 : fatal error: bcm_host.h: No such file or directory
- * 726591 : W32: GL plugins can't be built in -bad
- * 726752 : h264parser: should also expose a framerate in the case of interlaced samples
- * 726802 : rfbsrc: doesn't send stream start event
- * 726979 : mpegts: bugfix delivery system descriptor parsing
- * 727104 : configure.ac: fix OSX host check
- * 727125 : fatal error: GL/wglext.h: No such file or directory
- * 727159 : mpegts: use g_slice_new0 and g_slice_free
- * 727187 : mpegts: add data broadcast descriptor, stream indentifier descriptor
- * 727306 : Decklinksrc won't initialize some models of capture cards (Patch included!)
- * 727356 : mpegts: add dvb-t2 delivery system descriptor and typo fix
- * 727385 : dashdemux: use correct print format for gint64
- * 727403 : mpegts: add linkage, data_broadcast_id, private_data_specifier and parental_rating descriptors
- * 727460 : mpegts: add atsc terrestrial virtual channel table
- * 727512 : srtpdec: assertion when checking rtcp ssrc
- * 727560 : mpegts: add frequency list, scrambling and dvb ca indentifier descriptor
- * 727812 : directsoundsrc: CRITICAL, debug category not defined
- * 727843 : glimagesink: shows only a black screen
- * 727855 : camerabin: does not send an error if linking vfsrc pad to viewfinder queue fails
- * 727857 : camerabin: allow " ANY " feature in viewfinderbin static pad templates
- * 727885 : coremediabuffer: handle stride alignment
- * 727889 : mxf: avoid dereferencing NULL pointer and leak fixes
- * 727894 : liveadder: fix minor memory leak in caps query handler
- * 727906 : smoothstreaming: using manifest before we have it in seeking query
- * 727953 : avfvideosrc: check if downstream supports the video meta API
- * 727977 : dvb: Protect against symbols added in DVB_API v5 minor version > 5
- * 728107 : gl: No surface resizing logic on Android/iOS
- * 728127 : glimagesink: fails to create window from gst-launch process if OS X terminal is fullscreen
- * 728128 : glimagesink: swapped UV on OS X with avdec_h264
- * 728249 : iosavassetsrc: port to 1.0
- * 728439 : glimagesink: does not takes in account strides
- * 728451 : glimagesink: expects a NSWindow instead of a NSView as the window handle
- * 728761 : glimagesink: Deadlock on errors
- * 728815 : GstGLMemory mix stride and width
- * 728872 : GstGLBufferPool should avoid to allocate upload resources that are not going to be used for sure
- * 728947 : glcolorscale: only black frames on GLESv2
- * 726255 : y4mdec: Should check for VIDEO_META_API not CROP_META_API
- * 711232 : Remove cdaudio
- * 702041 : winks: Port to 1.0
+ * 721685 : mpegtsmux: Remove unused data in TsMuxSection
+ * 723167 : curlsftpsink: allow remote host authentication by public key fingerprint
+ * 726666 : gl: error: redundant redeclaration of numerous GL functions
+ * 728234 : gl: Don't unconditonally use EGL extensions
+ * 729542 : glimagesink: pool may never be activated, which leads to crash
+ * 729588 : glimagesink: cannot play 1080p on RPI
+ * 729614 : PNM Encoder is Encoding 0 x 0 images
+ * 729658 : gl: wrong negotiated caps when using eglimage
+ * 729742 : glcolorconvert: Should set alpha to 1 if source is opaque
+ * 729743 : glcolorconvert: Should preserve alpha channel when doing AYUV - > ARGB
+ * 729861 : glfilter: lose some caps informations like the framerate
+ * 729896 : glupload: Ignores stride when uploading raw data
+ * 730069 : gl: Crash when setting invalid GST_GL_PLATFORM
+ * 730133 : motioncells:fix memleak
+ * 730459 : curlsshsink: post error on bus in element, not transfer thread
+ * 729551 : GstGLDisplay: mix platform and window
==== Download ====
@@ -243,123 +127,20 @@ subscribe to the gstreamer-devel list.
Contributors to this release
- * Adrien SCH
- * Aleix Conchillo Flaqué
- * Alessandro Decina
- * Alex Ashley
- * Alexey Chernov
- * Amaury Medeiros
- * Andoni Morales Alastruey
- * Andres Gomez
- * Andrey Utkin
- * Andy Wingo
- * Anthony Violo
- * Antoni Silvestre
- * Antonio Ospite
- * Arnaud Vrac
* Aurélien Zanelli
- * Benjamin Gaignard
- * Blake Tregre
- * Brendan Long
- * Carlos Rafael Giani
- * Chen Jie
- * Chris Bass
- * Chris Paulson-Ellis
- * Christian Fredrik Kalager Schaller
- * Christian Schaller
- * Colin Macdonald
- * Cong Zhong
- * Dan Kegel
- * David Hoyt
- * David Schleef
- * Davide Bertola
- * Dominik Röttsches
- * Duncan Palmer
* Edward Hervey
- * Eric Anholt
- * Filippo Argiolas
- * Gil Pedersen
- * Gilles Dartiguelongue
- * Greg Rutz
- * Guillaume Desmottes
- * Gwenole Beauchesne
- * Haakon Sporsheim (ieei)
- * Halley Zhao
- * Haridass Selvaraj
- * Jan Schmidt
- * Javier Jardón
* Jesper Larsen
- * Johan Dahlin
- * Jonathan Matthew
- * Jorge Zapata
- * Josep Torra
- * Julien
* Julien Isorce
- * Julien Moutte
- * Justin Joy
- * Kipp Cannon
* L. Sorin
- * LRN
- * Li Xiaowei
- * Lihua Liu
- * Lubosz Sarnecki
- * Luc Deschenaux
* Luis de Bethencourt
- * Mariusz Buras
- * Mark Nauwelaerts
- * Matej Knopp
- * Mathieu Duponchelle
- * Matthew
* Matthew Waters
- * Matthieu Bouron
- * Michael Olbrich
- * Miguel Casas-Sanchez
- * Miguel París Díaz
- * Miquel Àngel Farré
- * Mohammed Sameer
- * Nicholas Panayis
* Nicola Murino
* Nicolas Dufresne
* Olivier Crête
- * Per x Johansson
- * Philippe Normand
- * Pierre Pouzol
- * Piotr Drąg
- * Pratheesh Gangadhar
- * Raimo Järvi
* Reynaldo H. Verdejo Pinochet
- * Rico Tzschichholz
- * Roland Peffer
- * Ronald S. Bultje
- * Santiago Carot-Nemesio
+ * Sanjay NM
* Sebastian Dröge
- * Sebastian Rasmussen
- * Sjoerd Simons
- * Sreerenj Balachandran
- * Stefan Kost
- * Stefan Ringel
- * Stefan Sauer
- * Steve Maynard
* Thiago Santos
- * Thibault Saunier
- * Thijs Vermeir
- * Thomas Vander Stichele
* Tim-Philipp Müller
- * Todd Agulnick
- * Tonu Jaansoo
- * Vincent Penquerc'h
- * Vinson Lee
- * Víctor Manuel Jáquez Leal
- * Wang Xin-yu (王昕宇)
- * Wei Feng
* Wim Taymans
- * Xavi Artigas
- * Zallesov
- * Zhao, Halley
- * duhui.lee
- * julien
- * julien User
- * madmac
- * unknown
- * Руслан Ижбулатов
  \ No newline at end of file
diff --git a/configure b/configure
index ebc912d8..b2ad0b49 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 Bad Plug-ins 1.3.1.
+# Generated by GNU Autoconf 2.69 for GStreamer Bad Plug-ins 1.3.2.
#
# Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer>.
#
@@ -591,8 +591,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='GStreamer Bad Plug-ins'
PACKAGE_TARNAME='gst-plugins-bad'
-PACKAGE_VERSION='1.3.1'
-PACKAGE_STRING='GStreamer Bad Plug-ins 1.3.1'
+PACKAGE_VERSION='1.3.2'
+PACKAGE_STRING='GStreamer Bad Plug-ins 1.3.2'
PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer'
PACKAGE_URL=''
@@ -2515,7 +2515,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 Bad Plug-ins 1.3.1 to adapt to many kinds of systems.
+\`configure' configures GStreamer Bad Plug-ins 1.3.2 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -2590,7 +2590,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of GStreamer Bad Plug-ins 1.3.1:";;
+ short | recursive ) echo "Configuration of GStreamer Bad Plug-ins 1.3.2:";;
esac
cat <<\_ACEOF
@@ -3199,7 +3199,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-GStreamer Bad Plug-ins configure 1.3.1
+GStreamer Bad Plug-ins configure 1.3.2
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -4172,7 +4172,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 Bad Plug-ins $as_me 1.3.1, which was
+It was created by GStreamer Bad Plug-ins $as_me 1.3.2, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -5154,7 +5154,7 @@ fi
# Define the identity of the package.
PACKAGE='gst-plugins-bad'
- VERSION='1.3.1'
+ VERSION='1.3.2'
cat >>confdefs.h <<_ACEOF
@@ -5365,9 +5365,9 @@ fi
- PACKAGE_VERSION_MAJOR=$(echo 1.3.1 | cut -d'.' -f1)
- PACKAGE_VERSION_MINOR=$(echo 1.3.1 | cut -d'.' -f2)
- PACKAGE_VERSION_MICRO=$(echo 1.3.1 | cut -d'.' -f3)
+ 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)
@@ -5378,7 +5378,7 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking nano version" >&5
$as_echo_n "checking nano version... " >&6; }
- NANO=$(echo 1.3.1 | cut -d'.' -f4)
+ NANO=$(echo 1.3.2 | cut -d'.' -f4)
if test x"$NANO" = x || test "x$NANO" = "x0" ; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: 0 (release)" >&5
@@ -10035,10 +10035,10 @@ fi
done
- GST_CURRENT=301
+ GST_CURRENT=302
GST_REVISION=0
- GST_AGE=301
- GST_LIBVERSION=301:0:301
+ GST_AGE=302
+ GST_LIBVERSION=302:0:302
@@ -14363,8 +14363,8 @@ CC="$lt_save_CC"
-GST_REQ=1.3.1
-GSTPB_REQ=1.3.1
+GST_REQ=1.3.2
+GSTPB_REQ=1.3.2
@@ -33710,6 +33710,71 @@ $as_echo "$as_me: WARNING: GLU is required with OpenGL support" >&2;}
fi
fi
+if test "x$HAVE_GL" = "xyes" -a "x$HAVE_GLES2" = "xyes"; then
+ GL_INCLUDES="
+#ifndef GL_GLEXT_PROTOTYPES
+#define GL_GLEXT_PROTOTYPES 1
+#endif
+# ifdef __APPLE__
+# include <OpenGLES/ES2/gl.h>
+# include <OpenGLES/ES2/glext.h>
+# else
+# include <GLES2/gl2.h>
+# include <GLES2/gl2ext.h>
+# endif
+# if __APPLE__
+# include <OpenGL/OpenGL.h>
+# include <OpenGL/gl.h>
+# include <OpenGL/glu.h>
+# else
+# include <GL/gl.h>
+# include <GL/glu.h>
+# if __WIN32__ || _WIN32
+# include <GL/glext.h>
+# endif
+# endif
+"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is possible to include both GL and GLES2 headers" >&5
+$as_echo_n "checking whether it is possible to include both GL and GLES2 headers... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$GL_INCLUDES
+int
+main ()
+{
+
+ #if !defined(GL_FALSE)
+ #error Failed to include GL headers
+ #endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ if test "x$NEED_GLES2" = "xyes"; then
+ if test "x$NEED_OPENGL" = "xyes"; then
+ as_fn_error $? "Cannot seem to include both GL and GLES2 headers. Try disabling one API" "$LINENO" 5
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Disabling Desktop GL support" >&5
+$as_echo "$as_me: WARNING: Disabling Desktop GL support" >&2;}
+ HAVE_OPENGL=no
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Disabling GL|ES 2.0 support" >&5
+$as_echo "$as_me: WARNING: Disabling GL|ES 2.0 support" >&2;}
+ HAVE_GLES2=no
+ fi
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
#dnl Check for OpenGL, GLU
echo host is $host
case $host in
@@ -34236,8 +34301,16 @@ fi
GL_INCLUDES=""
if test "x$USE_GLES2" = "xyes"; then
GL_INCLUDES="$GL_INCLUDES
-# include <GLES2/gl2.h>
-# include <GLES2/gl2ext.h>
+#ifndef GL_GLEXT_PROTOTYPES
+#define GL_GLEXT_PROTOTYPES 1
+#endif
+# ifdef __APPLE__
+# include <OpenGLES/ES2/gl.h>
+# include <OpenGLES/ES2/glext.h>
+# else
+# include <GLES2/gl2.h>
+# include <GLES2/gl2ext.h>
+# endif
"
fi
@@ -34246,9 +34319,10 @@ if test "x$USE_OPENGL" = "xyes"; then
# if __APPLE__
# include <OpenGL/OpenGL.h>
# include <OpenGL/gl.h>
+# include <OpenGL/glu.h>
# else
-# include <GL/glu.h>
# include <GL/gl.h>
+# include <GL/glu.h>
# if __WIN32__ || _WIN32
# include <GL/glext.h>
# endif
@@ -56007,7 +56081,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 Bad Plug-ins $as_me 1.3.1, which was
+This file was extended by GStreamer Bad Plug-ins $as_me 1.3.2, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -56073,7 +56147,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 Bad Plug-ins config.status 1.3.1
+GStreamer Bad Plug-ins config.status 1.3.2
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/configure.ac b/configure.ac
index 6258f4a2..f39ed8c2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3,7 +3,7 @@ AC_PREREQ([2.68])
dnl initialize autoconf
dnl when going to/from release please set the nano (fourth number) right !
dnl releases only do Wall, cvs and prerelease does Werror too
-AC_INIT([GStreamer Bad Plug-ins],[1.3.1],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gst-plugins-bad])
+AC_INIT([GStreamer Bad Plug-ins],[1.3.2],[http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer],[gst-plugins-bad])
AG_GST_INIT
@@ -48,11 +48,11 @@ dnl - interfaces added/removed/changed -> increment CURRENT, REVISION = 0
dnl - interfaces added -> increment AGE
dnl - interfaces removed -> AGE = 0
dnl sets GST_LT_LDFLAGS
-AS_LIBTOOL(GST, 301, 0, 301)
+AS_LIBTOOL(GST, 302, 0, 302)
dnl *** required versions of GStreamer stuff ***
-GST_REQ=1.3.1
-GSTPB_REQ=1.3.1
+GST_REQ=1.3.2
+GSTPB_REQ=1.3.2
dnl *** autotools stuff ****
@@ -812,6 +812,51 @@ else
fi
fi
+dnl check if we can include both GL and GLES2 at the same time
+if test "x$HAVE_GL" = "xyes" -a "x$HAVE_GLES2" = "xyes"; then
+ GL_INCLUDES="
+#ifndef GL_GLEXT_PROTOTYPES
+#define GL_GLEXT_PROTOTYPES 1
+#endif
+# ifdef __APPLE__
+# include <OpenGLES/ES2/gl.h>
+# include <OpenGLES/ES2/glext.h>
+# else
+# include <GLES2/gl2.h>
+# include <GLES2/gl2ext.h>
+# endif
+# if __APPLE__
+# include <OpenGL/OpenGL.h>
+# include <OpenGL/gl.h>
+# include <OpenGL/glu.h>
+# else
+# include <GL/gl.h>
+# include <GL/glu.h>
+# if __WIN32__ || _WIN32
+# include <GL/glext.h>
+# endif
+# endif
+"
+ AC_MSG_CHECKING([whether it is possible to include both GL and GLES2 headers])
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[$GL_INCLUDES]], [[
+ #if !defined(GL_FALSE)
+ #error Failed to include GL headers
+ #endif
+ ]])],[ AC_MSG_RESULT(yes)
+ ],[AC_MSG_RESULT(no)
+ if test "x$NEED_GLES2" = "xyes"; then
+ if test "x$NEED_OPENGL" = "xyes"; then
+ AC_MSG_ERROR([Cannot seem to include both GL and GLES2 headers. Try disabling one API])
+ fi
+ AC_MSG_WARN([Disabling Desktop GL support])
+ HAVE_OPENGL=no
+ else
+ AC_MSG_WARN([Disabling GL|ES 2.0 support])
+ HAVE_GLES2=no
+ fi
+ ])
+fi
+
#dnl Check for OpenGL, GLU
echo host is $host
case $host in
@@ -1225,8 +1270,16 @@ dnl Check for some types that are not always present
GL_INCLUDES=""
if test "x$USE_GLES2" = "xyes"; then
GL_INCLUDES="$GL_INCLUDES
-# include <GLES2/gl2.h>
-# include <GLES2/gl2ext.h>
+#ifndef GL_GLEXT_PROTOTYPES
+#define GL_GLEXT_PROTOTYPES 1
+#endif
+# ifdef __APPLE__
+# include <OpenGLES/ES2/gl.h>
+# include <OpenGLES/ES2/glext.h>
+# else
+# include <GLES2/gl2.h>
+# include <GLES2/gl2ext.h>
+# endif
"
fi
@@ -1235,9 +1288,10 @@ if test "x$USE_OPENGL" = "xyes"; then
# if __APPLE__
# include <OpenGL/OpenGL.h>
# include <OpenGL/gl.h>
+# include <OpenGL/glu.h>
# else
-# include <GL/glu.h>
# include <GL/gl.h>
+# include <GL/glu.h>
# if __WIN32__ || _WIN32
# include <GL/glext.h>
# endif
diff --git a/docs/libs/gst-plugins-bad-libs-sections.txt b/docs/libs/gst-plugins-bad-libs-sections.txt
index a06d2f7c..50dba86e 100644
--- a/docs/libs/gst-plugins-bad-libs-sections.txt
+++ b/docs/libs/gst-plugins-bad-libs-sections.txt
@@ -711,7 +711,6 @@ GstGLColorConvert
GstGLColorConvertClass
gst_gl_color_convert_new
gst_gl_color_convert_init_format
-gst_gl_color_convert_set_texture_scaling
gst_gl_color_convert_perform
<SUBSECTION Standard>
GstGLColorConvertPrivate
@@ -743,6 +742,7 @@ gst_gl_context_get_display
gst_gl_context_get_gl_api
gst_gl_context_get_gl_context
gst_gl_context_get_platform
+gst_gl_context_check_feature
<SUBSECTION Standard>
GST_GL_CONTEXT
GST_GL_IS_CONTEXT
@@ -826,8 +826,10 @@ gst_gl_context_wgl_get_type
<SECTION>
<FILE>gstgldisplay</FILE>
<TITLE>GstGLDisplay</TITLE>
+GstGLDisplayType
GstGLDisplay
gst_gl_display_new
+gst_gl_display_get_handle_type
gst_context_get_gl_display
gst_context_set_gl_display
<SUBSECTION Standard>
@@ -846,9 +848,8 @@ gst_gl_display_get_type
<TITLE>GstGLDownload</TITLE>
GstGLDownload
gst_gl_download_new
-gst_gl_download_init_format
+gst_gl_download_set_format
gst_gl_download_perform_with_data
-gst_gl_download_perform_with_memory
<SUBSECTION Standard>
GST_GL_DOWNLOAD
GST_GL_DOWNLOAD_CAST
@@ -1008,7 +1009,8 @@ GST_GL_SHADER_GET_CLASS
<TITLE>GstGLUpload</TITLE>
GstGLUpload
gst_gl_upload_new
-gst_gl_upload_init_format
+gst_gl_upload_set_format
+gst_gl_upload_get_format
gst_gl_upload_add_video_gl_texture_upload_meta
gst_gl_upload_perform_with_data
gst_gl_upload_perform_with_memory
diff --git a/docs/libs/html/GstGLBufferPool.html b/docs/libs/html/GstGLBufferPool.html
index 2cabbee1..96a34326 100644
--- a/docs/libs/html/GstGLBufferPool.html
+++ b/docs/libs/html/GstGLBufferPool.html
@@ -41,7 +41,7 @@
</colgroup>
<tbody><tr>
<td class="function_type">
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBufferPool.html#GstBufferPool"><span class="returnvalue">GstBufferPool</span></a> *
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBufferPool.html"><span class="returnvalue">GstBufferPool</span></a> *
</td>
<td class="function_name">
<a class="link" href="GstGLBufferPool.html#gst-gl-buffer-pool-new" title="gst_gl_buffer_pool_new ()">gst_gl_buffer_pool_new</a> <span class="c_punctuation">()</span>
@@ -73,7 +73,7 @@
<pre class="screen"> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
<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/gstreamer-GstBufferPool.html#GstBufferPool">GstBufferPool</a>
+ <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBufferPool.html">GstBufferPool</a>
<span class="lineart">╰──</span> GstGLBufferPool
</pre>
</div>
@@ -82,13 +82,13 @@
<p>a <a class="link" href="GstGLBufferPool.html" title="GstGLBufferPool"><span class="type">GstGLBufferPool</span></a> is an object that allocates buffers with <a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p>
<p>A <a class="link" href="GstGLBufferPool.html" title="GstGLBufferPool"><span class="type">GstGLBufferPool</span></a> is created with <a class="link" href="GstGLBufferPool.html#gst-gl-buffer-pool-new" title="gst_gl_buffer_pool_new ()"><code class="function">gst_gl_buffer_pool_new()</code></a></p>
<p><a class="link" href="GstGLBufferPool.html" title="GstGLBufferPool"><span class="type">GstGLBufferPool</span></a> implements the VideoMeta buffer pool option
-<span class="type">GST_BUFFER_POOL_OPTION_VIDEO_META</span></p>
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-GstVideoPool.html#GST-BUFFER-POOL-OPTION-VIDEO-META:CAPS"><span class="type">GST_BUFFER_POOL_OPTION_VIDEO_META</span></a></p>
</div>
<div class="refsect1">
<a name="GstGLBufferPool.functions_details"></a><h2>Functions</h2>
<div class="refsect2">
<a name="gst-gl-buffer-pool-new"></a><h3>gst_gl_buffer_pool_new ()</h3>
-<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBufferPool.html#GstBufferPool"><span class="returnvalue">GstBufferPool</span></a> *
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBufferPool.html"><span class="returnvalue">GstBufferPool</span></a> *
gst_gl_buffer_pool_new (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>);</pre>
<div class="refsect3">
<a name="id-1.2.7.3.7.2.4"></a><h4>Parameters</h4>
@@ -107,7 +107,7 @@ gst_gl_buffer_pool_new (<em class="parameter"><code><a class="link" href="GstGLC
</div>
<div class="refsect3">
<a name="id-1.2.7.3.7.2.5"></a><h4>Returns</h4>
-<p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBufferPool.html#GstBufferPool"><span class="type">GstBufferPool</span></a> that allocates buffers with <a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p>
+<p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBufferPool.html"><span class="type">GstBufferPool</span></a> that allocates buffers with <a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p>
<p></p>
</div>
</div>
@@ -131,7 +131,7 @@ gst_gl_buffer_pool_new (<em class="parameter"><code><a class="link" href="GstGLC
</div>
<div class="refsect1">
<a name="GstGLBufferPool.see-also"></a><h2>See Also</h2>
-<p><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBufferPool.html#GstBufferPool"><span class="type">GstBufferPool</span></a>, <a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p>
+<p><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBufferPool.html"><span class="type">GstBufferPool</span></a>, <a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p>
</div>
</div>
<div class="footer">
diff --git a/docs/libs/html/GstGLColorConvert.html b/docs/libs/html/GstGLColorConvert.html
index d5e91324..c5f8571b 100644
--- a/docs/libs/html/GstGLColorConvert.html
+++ b/docs/libs/html/GstGLColorConvert.html
@@ -53,22 +53,6 @@
<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
</td>
<td class="function_name">
-<a class="link" href="GstGLColorConvert.html#gst-gl-color-convert-init-format" title="gst_gl_color_convert_init_format ()">gst_gl_color_convert_init_format</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<span class="returnvalue">void</span>
-</td>
-<td class="function_name">
-<a class="link" href="GstGLColorConvert.html#gst-gl-color-convert-set-texture-scaling" title="gst_gl_color_convert_set_texture_scaling ()">gst_gl_color_convert_set_texture_scaling</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
<a class="link" href="GstGLColorConvert.html#gst-gl-color-convert-perform" title="gst_gl_color_convert_perform ()">gst_gl_color_convert_perform</a> <span class="c_punctuation">()</span>
</td>
</tr>
@@ -105,7 +89,9 @@
<div class="refsect1">
<a name="GstGLColorConvert.object-hierarchy"></a><h2>Object Hierarchy</h2>
<pre class="screen"> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> GstGLColorConvert
+ <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> GstGLColorConvert
</pre>
</div>
<div class="refsect1">
@@ -114,7 +100,7 @@
formats using OpenGL Shaders.</p>
<p>A <a class="link" href="GstGLColorConvert.html" title="GstGLColorConvert"><span class="type">GstGLColorConvert</span></a> can be created with <a class="link" href="GstGLColorConvert.html#gst-gl-color-convert-new" title="gst_gl_color_convert_new ()"><code class="function">gst_gl_color_convert_new()</code></a>.</p>
<p>For handling stride scaling in the shader, see
-<a class="link" href="GstGLColorConvert.html#gst-gl-color-convert-set-texture-scaling" title="gst_gl_color_convert_set_texture_scaling ()"><code class="function">gst_gl_color_convert_set_texture_scaling()</code></a>.</p>
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-libs/html/GstGLColorConvert.html#gst-gl-color-convert-set-texture-scaling"><code class="function">gst_gl_color_convert_set_texture_scaling()</code></a>.</p>
</div>
<div class="refsect1">
<a name="GstGLColorConvert.functions_details"></a><h2>Functions</h2>
@@ -125,82 +111,6 @@ gst_gl_color_convert_new (<em class="parameter"><code><a class="link" href="GstG
</div>
<hr>
<div class="refsect2">
-<a name="gst-gl-color-convert-init-format"></a><h3>gst_gl_color_convert_init_format ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_gl_color_convert_init_format (<em class="parameter"><code><a class="link" href="GstGLColorConvert.html" title="GstGLColorConvert"><span class="type">GstGLColorConvert</span></a> *convert</code></em>,
- <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> *in_info</code></em>,
- <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> *out_info</code></em>);</pre>
-<p>Initializes <em class="parameter"><code>convert</code></em>
- with the information required for conversion.</p>
-<div class="refsect3">
-<a name="id-1.2.7.4.7.3.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>convert</p></td>
-<td class="parameter_description"><p>a <a class="link" href="GstGLColorConvert.html" title="GstGLColorConvert"><span class="type">GstGLColorConvert</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>in_info</p></td>
-<td class="parameter_description"><p>input <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>out_info</p></td>
-<td class="parameter_description"><p>output <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.7.4.7.3.6"></a><h4>Returns</h4>
-<p> whether the initialization was successful</p>
-<p></p>
-</div>
-</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-color-convert-set-texture-scaling"></a><h3>gst_gl_color_convert_set_texture_scaling ()</h3>
-<pre class="programlisting"><span class="returnvalue">void</span>
-gst_gl_color_convert_set_texture_scaling
- (<em class="parameter"><code><a class="link" href="GstGLColorConvert.html" title="GstGLColorConvert"><span class="type">GstGLColorConvert</span></a> *convert</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gfloat"><span class="type">gfloat</span></a> scaling[GST_VIDEO_MAX_PLANES][2]</code></em>);</pre>
-<p>Scales the input textures by the given amount. Useful for performing stride
-scaling in a shader on OpenGL platforms that do not support
-GL_PIXEL_[UN]PACK_LENGTH such as GL|ES 2.0.</p>
-<div class="refsect3">
-<a name="id-1.2.7.4.7.4.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>convert</p></td>
-<td class="parameter_description"><p>a <a class="link" href="GstGLColorConvert.html" title="GstGLColorConvert"><span class="type">GstGLColorConvert</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>scaling</p></td>
-<td class="parameter_description"><p>array of texture scaling coefficients stored in width, height
-order per texture being converted.</p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-</div>
-<hr>
-<div class="refsect2">
<a name="gst-gl-color-convert-perform"></a><h3>gst_gl_color_convert_perform ()</h3>
<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_gl_color_convert_perform (<em class="parameter"><code><a class="link" href="GstGLColorConvert.html" title="GstGLColorConvert"><span class="type">GstGLColorConvert</span></a> *convert</code></em>,
@@ -208,9 +118,9 @@ gst_gl_color_convert_perform (<em class="parameter"><code><a class="link" href="
<em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> *out_tex[GST_VIDEO_MAX_PLANES]</code></em>);</pre>
<p>Converts the data contained in in_tex into out_tex using the formats
specified by the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a>s passed to
-<a class="link" href="GstGLColorConvert.html#gst-gl-color-convert-init-format" title="gst_gl_color_convert_init_format ()"><code class="function">gst_gl_color_convert_init_format()</code></a></p>
+<code class="function">gst_gl_color_convert_set_format()</code></p>
<div class="refsect3">
-<a name="id-1.2.7.4.7.5.5"></a><h4>Parameters</h4>
+<a name="id-1.2.7.4.7.3.5"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -237,7 +147,7 @@ specified by the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/he
</table></div>
</div>
<div class="refsect3">
-<a name="id-1.2.7.4.7.5.6"></a><h4>Returns</h4>
+<a name="id-1.2.7.4.7.3.6"></a><h4>Returns</h4>
<p> whether the conversion was successful</p>
<p></p>
</div>
@@ -267,7 +177,7 @@ specified by the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/he
<div class="refsect2">
<a name="GstGLColorConvertClass"></a><h3>GstGLColorConvertClass</h3>
<pre class="programlisting">typedef struct {
- GObjectClass object_class;
+ GstObjectClass object_class;
} GstGLColorConvertClass;
</pre>
<p>The <a class="link" href="GstGLColorConvert.html#GstGLColorConvertClass" title="GstGLColorConvertClass"><span class="type">GstGLColorConvertClass</span></a> struct only contains private data</p>
diff --git a/docs/libs/html/GstGLContext.html b/docs/libs/html/GstGLContext.html
index 18b299ee..88c438c0 100644
--- a/docs/libs/html/GstGLContext.html
+++ b/docs/libs/html/GstGLContext.html
@@ -148,6 +148,14 @@
<a class="link" href="GstGLContext.html#gst-gl-context-get-gl-context" title="gst_gl_context_get_gl_context ()">gst_gl_context_get_gl_context</a> <span class="c_punctuation">()</span>
</td>
</tr>
+<tr>
+<td class="function_type">
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLContext.html#gst-gl-context-check-feature" title="gst_gl_context_check_feature ()">gst_gl_context_check_feature</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
</tbody>
</table></div>
</div>
@@ -173,7 +181,9 @@
<div class="refsect1">
<a name="GstGLContext.object-hierarchy"></a><h2>Object Hierarchy</h2>
<pre class="screen"> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> GstGLContext
+ <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> GstGLContext
</pre>
</div>
<div class="refsect1">
@@ -579,6 +589,44 @@ gst_gl_context_get_gl_context (<em class="parameter"><code><a class="link" href=
<p></p>
</div>
</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-context-check-feature"></a><h3>gst_gl_context_check_feature ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+gst_gl_context_check_feature (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
+ <em class="parameter"><code>const <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a> *feature</code></em>);</pre>
+<p>Some features require that the context be created before it is possible to
+determine their existence and so will fail if that is not the case.</p>
+<div class="refsect3">
+<a name="id-1.2.7.5.7.16.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>context</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+<tr>
+<td class="parameter_name"><p>feature</p></td>
+<td class="parameter_description"><p>a platform specific feature</p></td>
+<td class="parameter_annotations"> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.7.5.7.16.6"></a><h4>Returns</h4>
+<p> Whether <em class="parameter"><code>feature</code></em>
+is supported by <em class="parameter"><code>context</code></em>
+</p>
+<p></p>
+</div>
+</div>
</div>
<div class="refsect1">
<a name="GstGLContext.other_details"></a><h2>Types and Values</h2>
diff --git a/docs/libs/html/GstGLDisplay.html b/docs/libs/html/GstGLDisplay.html
index 812fdb71..54d16c38 100644
--- a/docs/libs/html/GstGLDisplay.html
+++ b/docs/libs/html/GstGLDisplay.html
@@ -50,6 +50,14 @@
</tr>
<tr>
<td class="function_type">
+<a class="link" href="GstGLDisplay.html#GstGLDisplayType" title="enum GstGLDisplayType"><span class="returnvalue">GstGLDisplayType</span></a>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLDisplay.html#gst-gl-display-get-handle-type" title="gst_gl_display_get_handle_type ()">gst_gl_display_get_handle_type</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
</td>
<td class="function_name">
@@ -74,22 +82,30 @@
<col width="150px" class="name">
<col class="description">
</colgroup>
-<tbody><tr>
+<tbody>
+<tr>
+<td class="datatype_keyword">enum</td>
+<td class="function_name"><a class="link" href="GstGLDisplay.html#GstGLDisplayType" title="enum GstGLDisplayType">GstGLDisplayType</a></td>
+</tr>
+<tr>
<td class="datatype_keyword"> </td>
<td class="function_name"><a class="link" href="GstGLDisplay.html#GstGLDisplay-struct" title="GstGLDisplay">GstGLDisplay</a></td>
-</tr></tbody>
+</tr>
+</tbody>
</table></div>
</div>
<div class="refsect1">
<a name="GstGLDisplay.object-hierarchy"></a><h2>Object Hierarchy</h2>
<pre class="screen"> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> GstGLDisplay
+ <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> GstGLDisplay
</pre>
</div>
<div class="refsect1">
<a name="GstGLDisplay.description"></a><h2>Description</h2>
<p><a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a> represents a connection to the underlying windowing system.
-Elements are required to make use of <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstContext.html#GstContext"><span class="type">GstContext</span></a> to share and propogate
+Elements are required to make use of <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstContext.html"><span class="type">GstContext</span></a> to share and propogate
a <a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a>.</p>
</div>
<div class="refsect1">
@@ -106,12 +122,39 @@ gst_gl_display_new (<em class="parameter"><code><span class="type">void</span></
</div>
<hr>
<div class="refsect2">
+<a name="gst-gl-display-get-handle-type"></a><h3>gst_gl_display_get_handle_type ()</h3>
+<pre class="programlisting"><a class="link" href="GstGLDisplay.html#GstGLDisplayType" title="enum GstGLDisplayType"><span class="returnvalue">GstGLDisplayType</span></a>
+gst_gl_display_get_handle_type (<em class="parameter"><code><a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a> *display</code></em>);</pre>
+<div class="refsect3">
+<a name="id-1.2.7.10.7.3.4"></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>display</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.7.10.7.3.5"></a><h4>Returns</h4>
+<p> the <a class="link" href="GstGLDisplay.html#GstGLDisplayType" title="enum GstGLDisplayType"><span class="type">GstGLDisplayType</span></a> of <em class="parameter"><code>display</code></em>
+</p>
+<p></p>
+</div>
+</div>
+<hr>
+<div class="refsect2">
<a name="gst-context-get-gl-display"></a><h3>gst_context_get_gl_display ()</h3>
<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_context_get_gl_display (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstContext.html#GstContext"><span class="type">GstContext</span></a> *context</code></em>,
+gst_context_get_gl_display (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstContext.html"><span class="type">GstContext</span></a> *context</code></em>,
<em class="parameter"><code><a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a> **display</code></em>);</pre>
<div class="refsect3">
-<a name="id-1.2.7.10.7.3.4"></a><h4>Parameters</h4>
+<a name="id-1.2.7.10.7.4.4"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -121,7 +164,7 @@ gst_context_get_gl_display (<em class="parameter"><code><a href="http://gstreame
<tbody>
<tr>
<td class="parameter_name"><p>context</p></td>
-<td class="parameter_description"><p>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstContext.html#GstContext"><span class="type">GstContext</span></a></p></td>
+<td class="parameter_description"><p>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstContext.html"><span class="type">GstContext</span></a></p></td>
<td class="parameter_annotations"> </td>
</tr>
<tr>
@@ -133,7 +176,7 @@ gst_context_get_gl_display (<em class="parameter"><code><a href="http://gstreame
</table></div>
</div>
<div class="refsect3">
-<a name="id-1.2.7.10.7.3.5"></a><h4>Returns</h4>
+<a name="id-1.2.7.10.7.4.5"></a><h4>Returns</h4>
<p> Whether <em class="parameter"><code>display</code></em>
was in <em class="parameter"><code>context</code></em>
</p>
@@ -144,13 +187,13 @@ was in <em class="parameter"><code>context</code></em>
<div class="refsect2">
<a name="gst-context-set-gl-display"></a><h3>gst_context_set_gl_display ()</h3>
<pre class="programlisting"><span class="returnvalue">void</span>
-gst_context_set_gl_display (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstContext.html#GstContext"><span class="type">GstContext</span></a> *context</code></em>,
+gst_context_set_gl_display (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstContext.html"><span class="type">GstContext</span></a> *context</code></em>,
<em class="parameter"><code><a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a> *display</code></em>);</pre>
<p>Sets <em class="parameter"><code>display</code></em>
on <em class="parameter"><code>context</code></em>
</p>
<div class="refsect3">
-<a name="id-1.2.7.10.7.4.5"></a><h4>Parameters</h4>
+<a name="id-1.2.7.10.7.5.5"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -160,7 +203,7 @@ gst_context_set_gl_display (<em class="parameter"><code><a href="http://gstreame
<tbody>
<tr>
<td class="parameter_name"><p>context</p></td>
-<td class="parameter_description"><p>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstContext.html#GstContext"><span class="type">GstContext</span></a></p></td>
+<td class="parameter_description"><p>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstContext.html"><span class="type">GstContext</span></a></p></td>
<td class="parameter_annotations"> </td>
</tr>
<tr>
@@ -176,6 +219,62 @@ gst_context_set_gl_display (<em class="parameter"><code><a href="http://gstreame
<div class="refsect1">
<a name="GstGLDisplay.other_details"></a><h2>Types and Values</h2>
<div class="refsect2">
+<a name="GstGLDisplayType"></a><h3>enum GstGLDisplayType</h3>
+<div class="refsect3">
+<a name="id-1.2.7.10.8.2.3"></a><h4>Members</h4>
+<div class="informaltable"><table width="100%" border="0">
+<colgroup>
+<col width="300px" class="enum_members_name">
+<col class="enum_members_description">
+<col width="200px" class="enum_members_annotations">
+</colgroup>
+<tbody>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GL-DISPLAY-TYPE-NONE:CAPS"></a>GST_GL_DISPLAY_TYPE_NONE</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GL-DISPLAY-TYPE-X11:CAPS"></a>GST_GL_DISPLAY_TYPE_X11</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GL-DISPLAY-TYPE-WAYLAND:CAPS"></a>GST_GL_DISPLAY_TYPE_WAYLAND</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GL-DISPLAY-TYPE-COCOA:CAPS"></a>GST_GL_DISPLAY_TYPE_COCOA</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GL-DISPLAY-TYPE-WIN32:CAPS"></a>GST_GL_DISPLAY_TYPE_WIN32</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GL-DISPLAY-TYPE-DISPMANX:CAPS"></a>GST_GL_DISPLAY_TYPE_DISPMANX</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GL-DISPLAY-TYPE-EGL:CAPS"></a>GST_GL_DISPLAY_TYPE_EGL</p></td>
+<td> </td>
+<td> </td>
+</tr>
+<tr>
+<td class="enum_member_name"><p><a name="GST-GL-DISPLAY-TYPE-ANY:CAPS"></a>GST_GL_DISPLAY_TYPE_ANY</p></td>
+<td> </td>
+<td> </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<hr>
+<div class="refsect2">
<a name="GstGLDisplay-struct"></a><h3>GstGLDisplay</h3>
<pre class="programlisting">typedef struct _GstGLDisplay GstGLDisplay;</pre>
<p>The contents of a <a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a> are private and should only be accessed
@@ -184,7 +283,7 @@ through the provided API</p>
</div>
<div class="refsect1">
<a name="GstGLDisplay.see-also"></a><h2>See Also</h2>
-<p><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstContext.html#GstContext"><span class="type">GstContext</span></a>, <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a>, <a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a></p>
+<p><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstContext.html"><span class="type">GstContext</span></a>, <a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a>, <a class="link" href="GstGLWindow.html" title="GstGLWindow"><span class="type">GstGLWindow</span></a></p>
</div>
</div>
<div class="footer">
diff --git a/docs/libs/html/GstGLDownload.html b/docs/libs/html/GstGLDownload.html
index b9034d6c..14c2d99d 100644
--- a/docs/libs/html/GstGLDownload.html
+++ b/docs/libs/html/GstGLDownload.html
@@ -50,10 +50,10 @@
</tr>
<tr>
<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+<span class="returnvalue">void</span>
</td>
<td class="function_name">
-<a class="link" href="GstGLDownload.html#gst-gl-download-init-format" title="gst_gl_download_init_format ()">gst_gl_download_init_format</a> <span class="c_punctuation">()</span>
+<a class="link" href="GstGLDownload.html#gst-gl-download-set-format" title="gst_gl_download_set_format ()">gst_gl_download_set_format</a> <span class="c_punctuation">()</span>
</td>
</tr>
<tr>
@@ -64,14 +64,6 @@
<a class="link" href="GstGLDownload.html#gst-gl-download-perform-with-data" title="gst_gl_download_perform_with_data ()">gst_gl_download_perform_with_data</a> <span class="c_punctuation">()</span>
</td>
</tr>
-<tr>
-<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-</td>
-<td class="function_name">
-<a class="link" href="GstGLDownload.html#gst-gl-download-perform-with-memory" title="gst_gl_download_perform_with_memory ()">gst_gl_download_perform_with_memory</a> <span class="c_punctuation">()</span>
-</td>
-</tr>
</tbody>
</table></div>
</div>
@@ -91,7 +83,9 @@
<div class="refsect1">
<a name="GstGLDownload.object-hierarchy"></a><h2>Object Hierarchy</h2>
<pre class="screen"> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> GstGLDownload
+ <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> GstGLDownload
</pre>
</div>
<div class="refsect1">
@@ -128,12 +122,10 @@ gst_gl_download_new (<em class="parameter"><code><a class="link" href="GstGLCont
</div>
<hr>
<div class="refsect2">
-<a name="gst-gl-download-init-format"></a><h3>gst_gl_download_init_format ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_gl_download_init_format (<em class="parameter"><code><a class="link" href="GstGLDownload.html" title="GstGLDownload"><span class="type">GstGLDownload</span></a> *download</code></em>,
- <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoFormat"><span class="type">GstVideoFormat</span></a> v_format</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> out_width</code></em>,
- <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> out_height</code></em>);</pre>
+<a name="gst-gl-download-set-format"></a><h3>gst_gl_download_set_format ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_download_set_format (<em class="parameter"><code><a class="link" href="GstGLDownload.html" title="GstGLDownload"><span class="type">GstGLDownload</span></a> *download</code></em>,
+ <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> *out_info</code></em>);</pre>
<p>Initializes <em class="parameter"><code>download</code></em>
with the information required for download.</p>
<div class="refsect3">
@@ -168,11 +160,6 @@ gst_gl_download_init_format (<em class="parameter"><code><a class="link" href="G
</tbody>
</table></div>
</div>
-<div class="refsect3">
-<a name="id-1.2.7.11.7.3.6"></a><h4>Returns</h4>
-<p> whether the initialization was successful</p>
-<p></p>
-</div>
</div>
<hr>
<div class="refsect2">
@@ -185,7 +172,7 @@ gst_gl_download_perform_with_data (<em class="parameter"><code><a class="link" h
into <em class="parameter"><code>data</code></em>
. <em class="parameter"><code>data</code></em>
size and format is specified by
-the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoFormat"><span class="type">GstVideoFormat</span></a> passed to <a class="link" href="GstGLDownload.html#gst-gl-download-init-format" title="gst_gl_download_init_format ()"><code class="function">gst_gl_download_init_format()</code></a></p>
+the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoFormat"><span class="type">GstVideoFormat</span></a> passed to <a class="link" href="GstGLDownload.html#gst-gl-download-set-format" title="gst_gl_download_set_format ()"><code class="function">gst_gl_download_set_format()</code></a></p>
<div class="refsect3">
<a name="id-1.2.7.11.7.4.5"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
@@ -219,42 +206,6 @@ the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugin
<p></p>
</div>
</div>
-<hr>
-<div class="refsect2">
-<a name="gst-gl-download-perform-with-memory"></a><h3>gst_gl_download_perform_with_memory ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_gl_download_perform_with_memory (<em class="parameter"><code><a class="link" href="GstGLDownload.html" title="GstGLDownload"><span class="type">GstGLDownload</span></a> *download</code></em>,
- <em class="parameter"><code><a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> *gl_mem</code></em>);</pre>
-<p>Downloads the texture in <em class="parameter"><code>gl_mem</code></em>
-</p>
-<div class="refsect3">
-<a name="id-1.2.7.11.7.5.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>download</p></td>
-<td class="parameter_description"><p>a <a class="link" href="GstGLDownload.html" title="GstGLDownload"><span class="type">GstGLDownload</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-<tr>
-<td class="parameter_name"><p>gl_mem</p></td>
-<td class="parameter_description"><p>a <a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a></p></td>
-<td class="parameter_annotations"> </td>
-</tr>
-</tbody>
-</table></div>
-</div>
-<div class="refsect3">
-<a name="id-1.2.7.11.7.5.6"></a><h4>Returns</h4>
-<p> whether the download was successful</p>
-<p></p>
-</div>
-</div>
</div>
<div class="refsect1">
<a name="GstGLDownload.other_details"></a><h2>Types and Values</h2>
diff --git a/docs/libs/html/GstGLUpload.html b/docs/libs/html/GstGLUpload.html
index 6975e4da..d23ec054 100644
--- a/docs/libs/html/GstGLUpload.html
+++ b/docs/libs/html/GstGLUpload.html
@@ -50,10 +50,18 @@
</tr>
<tr>
<td class="function_type">
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
+<span class="returnvalue">void</span>
+</td>
+<td class="function_name">
+<a class="link" href="GstGLUpload.html#gst-gl-upload-set-format" title="gst_gl_upload_set_format ()">gst_gl_upload_set_format</a> <span class="c_punctuation">()</span>
+</td>
+</tr>
+<tr>
+<td class="function_type">
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="returnvalue">GstVideoInfo</span></a> *
</td>
<td class="function_name">
-<a class="link" href="GstGLUpload.html#gst-gl-upload-init-format" title="gst_gl_upload_init_format ()">gst_gl_upload_init_format</a> <span class="c_punctuation">()</span>
+<a class="link" href="GstGLUpload.html#gst-gl-upload-get-format" title="gst_gl_upload_get_format ()">gst_gl_upload_get_format</a> <span class="c_punctuation">()</span>
</td>
</tr>
<tr>
@@ -115,7 +123,9 @@
<div class="refsect1">
<a name="GstGLUpload.object-hierarchy"></a><h2>Object Hierarchy</h2>
<pre class="screen"> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> GstGLUpload
+ <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> GstGLUpload
</pre>
</div>
<div class="refsect1">
@@ -152,10 +162,10 @@ gst_gl_upload_new (<em class="parameter"><code><a class="link" href="GstGLContex
</div>
<hr>
<div class="refsect2">
-<a name="gst-gl-upload-init-format"></a><h3>gst_gl_upload_init_format ()</h3>
-<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_gl_upload_init_format (<em class="parameter"><code><a class="link" href="GstGLUpload.html" title="GstGLUpload"><span class="type">GstGLUpload</span></a> *upload</code></em>,
- <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> *in_info</code></em>);</pre>
+<a name="gst-gl-upload-set-format"></a><h3>gst_gl_upload_set_format ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span>
+gst_gl_upload_set_format (<em class="parameter"><code><a class="link" href="GstGLUpload.html" title="GstGLUpload"><span class="type">GstGLUpload</span></a> *upload</code></em>,
+ <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> *in_info</code></em>);</pre>
<p>Initializes <em class="parameter"><code>upload</code></em>
with the information required for upload.</p>
<div class="refsect3">
@@ -180,10 +190,31 @@ gst_gl_upload_init_format (<em class="parameter"><code><a class="link" href="Gst
</tbody>
</table></div>
</div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="gst-gl-upload-get-format"></a><h3>gst_gl_upload_get_format ()</h3>
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="returnvalue">GstVideoInfo</span></a> *
+gst_gl_upload_get_format (<em class="parameter"><code><a class="link" href="GstGLUpload.html" title="GstGLUpload"><span class="type">GstGLUpload</span></a> *upload</code></em>);</pre>
<div class="refsect3">
-<a name="id-1.2.7.16.7.3.6"></a><h4>Returns</h4>
-<p> whether the initialization was successful</p>
-<p></p>
+<a name="id-1.2.7.16.7.4.4"></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>upload</p></td>
+<td class="parameter_description"><p>a <a class="link" href="GstGLUpload.html" title="GstGLUpload"><span class="type">GstGLUpload</span></a></p></td>
+<td class="parameter_annotations"> </td>
+</tr></tbody>
+</table></div>
+</div>
+<div class="refsect3">
+<a name="id-1.2.7.16.7.4.5"></a><h4>Returns</h4>
+<p> The <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a> set by <a class="link" href="GstGLUpload.html#gst-gl-upload-set-format" title="gst_gl_upload_set_format ()"><code class="function">gst_gl_upload_set_format()</code></a>. </p>
+<p><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></p>
</div>
</div>
<hr>
@@ -197,7 +228,7 @@ gst_gl_upload_add_video_gl_texture_upload_meta
using <em class="parameter"><code>upload</code></em>
</p>
<div class="refsect3">
-<a name="id-1.2.7.16.7.4.5"></a><h4>Parameters</h4>
+<a name="id-1.2.7.16.7.5.5"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -219,7 +250,7 @@ gst_gl_upload_add_video_gl_texture_upload_meta
</table></div>
</div>
<div class="refsect3">
-<a name="id-1.2.7.16.7.4.6"></a><h4>Returns</h4>
+<a name="id-1.2.7.16.7.5.6"></a><h4>Returns</h4>
<p> whether it was successful</p>
<p></p>
</div>
@@ -234,9 +265,9 @@ gst_gl_upload_perform_with_data (<em class="parameter"><code><a class="link" hre
<p>Uploads <em class="parameter"><code>data</code></em>
into <em class="parameter"><code>texture_id</code></em>
. data size and format is specified by
-the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a>s passed to <a class="link" href="GstGLUpload.html#gst-gl-upload-init-format" title="gst_gl_upload_init_format ()"><code class="function">gst_gl_upload_init_format()</code></a></p>
+the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstvideo.html#GstVideoInfo"><span class="type">GstVideoInfo</span></a>s passed to <a class="link" href="GstGLUpload.html#gst-gl-upload-set-format" title="gst_gl_upload_set_format ()"><code class="function">gst_gl_upload_set_format()</code></a></p>
<div class="refsect3">
-<a name="id-1.2.7.16.7.5.5"></a><h4>Parameters</h4>
+<a name="id-1.2.7.16.7.6.5"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -263,7 +294,7 @@ the <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugin
</table></div>
</div>
<div class="refsect3">
-<a name="id-1.2.7.16.7.5.6"></a><h4>Returns</h4>
+<a name="id-1.2.7.16.7.6.6"></a><h4>Returns</h4>
<p> whether the upload was successful</p>
<p></p>
</div>
@@ -280,7 +311,7 @@ gst_gl_upload_perform_with_gl_texture_upload_meta
into <em class="parameter"><code>texture_id</code></em>
.</p>
<div class="refsect3">
-<a name="id-1.2.7.16.7.6.5"></a><h4>Parameters</h4>
+<a name="id-1.2.7.16.7.7.5"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -307,7 +338,7 @@ gst_gl_upload_perform_with_gl_texture_upload_meta
</table></div>
</div>
<div class="refsect3">
-<a name="id-1.2.7.16.7.6.6"></a><h4>Returns</h4>
+<a name="id-1.2.7.16.7.7.6"></a><h4>Returns</h4>
<p> whether the upload was successful</p>
<p></p>
</div>
@@ -325,7 +356,7 @@ gst_gl_upload_perform_with_buffer (<em class="parameter"><code><a class="link" h
is valid
until <a class="link" href="GstGLUpload.html#gst-gl-upload-release-buffer" title="gst_gl_upload_release_buffer ()"><code class="function">gst_gl_upload_release_buffer()</code></a> is called.</p>
<div class="refsect3">
-<a name="id-1.2.7.16.7.7.5"></a><h4>Parameters</h4>
+<a name="id-1.2.7.16.7.8.5"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
<colgroup>
<col width="150px" class="parameters_name">
@@ -352,7 +383,7 @@ until <a class="link" href="GstGLUpload.html#gst-gl-upload-release-buffer" title
</table></div>
</div>
<div class="refsect3">
-<a name="id-1.2.7.16.7.7.6"></a><h4>Returns</h4>
+<a name="id-1.2.7.16.7.8.6"></a><h4>Returns</h4>
<p> whether the upload was successful</p>
<p></p>
</div>
diff --git a/docs/libs/html/GstGLWindow.html b/docs/libs/html/GstGLWindow.html
index 582def94..b3485e6b 100644
--- a/docs/libs/html/GstGLWindow.html
+++ b/docs/libs/html/GstGLWindow.html
@@ -229,7 +229,9 @@
<div class="refsect1">
<a name="GstGLWindow.object-hierarchy"></a><h2>Object Hierarchy</h2>
<pre class="screen"> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> GstGLWindow
+ <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> GstGLWindow
</pre>
</div>
<div class="refsect1">
@@ -816,7 +818,7 @@ provided api.</p>
<div class="refsect2">
<a name="GstGLWindowClass"></a><h3>GstGLWindowClass</h3>
<pre class="programlisting">typedef struct {
- GObjectClass parent_class;
+ GstObjectClass parent_class;
guintptr (*get_display) (GstGLWindow *window);
void (*set_window_handle) (GstGLWindow *window, guintptr id);
@@ -842,7 +844,7 @@ provided api.</p>
</colgroup>
<tbody>
<tr>
-<td class="struct_member_name"><p><a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObjectClass"><span class="type">GObjectClass</span></a> <em class="structfield"><code><a name="GstGLWindowClass.parent-class"></a>parent_class</code></em>;</p></td>
+<td class="struct_member_name"><p><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html#GstObjectClass"><span class="type">GstObjectClass</span></a> <em class="structfield"><code><a name="GstGLWindowClass.parent-class"></a>parent_class</code></em>;</p></td>
<td class="struct_member_description"><p>Parent class</p></td>
<td class="struct_member_annotations"> </td>
</tr>
diff --git a/docs/libs/html/api-index-full.html b/docs/libs/html/api-index-full.html
index 524c4dda..0975a4ad 100644
--- a/docs/libs/html/api-index-full.html
+++ b/docs/libs/html/api-index-full.html
@@ -304,6 +304,10 @@ get_zoom, user_function in gstphotography
</dt>
<dd></dd>
<dt>
+<a class="link" href="GstGLDisplay.html#GstGLDisplayType" title="enum GstGLDisplayType">GstGLDisplayType</a>, enum in <a class="link" href="GstGLDisplay.html" title="GstGLDisplay">GstGLDisplay</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="GstGLDownload.html#GstGLDownload-struct" title="GstGLDownload">GstGLDownload</a>, struct in <a class="link" href="GstGLDownload.html" title="GstGLDownload">GstGLDownload</a>
</dt>
<dd></dd>
@@ -484,10 +488,6 @@ get_zoom, user_function in gstphotography
</dt>
<dd></dd>
<dt>
-<a class="link" href="GstGLColorConvert.html#gst-gl-color-convert-init-format" title="gst_gl_color_convert_init_format ()">gst_gl_color_convert_init_format</a>, function in <a class="link" href="GstGLColorConvert.html" title="GstGLColorConvert">GstGLColorConvert</a>
-</dt>
-<dd></dd>
-<dt>
<a class="link" href="GstGLColorConvert.html#gst-gl-color-convert-new" title="gst_gl_color_convert_new ()">gst_gl_color_convert_new</a>, function in <a class="link" href="GstGLColorConvert.html" title="GstGLColorConvert">GstGLColorConvert</a>
</dt>
<dd></dd>
@@ -496,15 +496,15 @@ get_zoom, user_function in gstphotography
</dt>
<dd></dd>
<dt>
-<a class="link" href="GstGLColorConvert.html#gst-gl-color-convert-set-texture-scaling" title="gst_gl_color_convert_set_texture_scaling ()">gst_gl_color_convert_set_texture_scaling</a>, function in <a class="link" href="GstGLColorConvert.html" title="GstGLColorConvert">GstGLColorConvert</a>
+<a class="link" href="GstGLColorConvert.html#GST-GL-COLOR-CONVERT-VIDEO-CAPS" title="GST_GL_COLOR_CONVERT_VIDEO_CAPS">GST_GL_COLOR_CONVERT_VIDEO_CAPS</a>, macro in <a class="link" href="GstGLColorConvert.html" title="GstGLColorConvert">GstGLColorConvert</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="GstGLColorConvert.html#GST-GL-COLOR-CONVERT-VIDEO-CAPS" title="GST_GL_COLOR_CONVERT_VIDEO_CAPS">GST_GL_COLOR_CONVERT_VIDEO_CAPS</a>, macro in <a class="link" href="GstGLColorConvert.html" title="GstGLColorConvert">GstGLColorConvert</a>
+<a class="link" href="GstGLContext.html#gst-gl-context-activate" title="gst_gl_context_activate ()">gst_gl_context_activate</a>, function in <a class="link" href="GstGLContext.html" title="GstGLContext">GstGLContext</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="GstGLContext.html#gst-gl-context-activate" title="gst_gl_context_activate ()">gst_gl_context_activate</a>, function in <a class="link" href="GstGLContext.html" title="GstGLContext">GstGLContext</a>
+<a class="link" href="GstGLContext.html#gst-gl-context-check-feature" title="gst_gl_context_check_feature ()">gst_gl_context_check_feature</a>, function in <a class="link" href="GstGLContext.html" title="GstGLContext">GstGLContext</a>
</dt>
<dd></dd>
<dt>
@@ -620,11 +620,11 @@ get_zoom, user_function in gstphotography
</dt>
<dd></dd>
<dt>
-<a class="link" href="GstGLDisplay.html#gst-gl-display-new" title="gst_gl_display_new ()">gst_gl_display_new</a>, function in <a class="link" href="GstGLDisplay.html" title="GstGLDisplay">GstGLDisplay</a>
+<a class="link" href="GstGLDisplay.html#gst-gl-display-get-handle-type" title="gst_gl_display_get_handle_type ()">gst_gl_display_get_handle_type</a>, function in <a class="link" href="GstGLDisplay.html" title="GstGLDisplay">GstGLDisplay</a>
</dt>
<dd></dd>
<dt>
-<a class="link" href="GstGLDownload.html#gst-gl-download-init-format" title="gst_gl_download_init_format ()">gst_gl_download_init_format</a>, function in <a class="link" href="GstGLDownload.html" title="GstGLDownload">GstGLDownload</a>
+<a class="link" href="GstGLDisplay.html#gst-gl-display-new" title="gst_gl_display_new ()">gst_gl_display_new</a>, function in <a class="link" href="GstGLDisplay.html" title="GstGLDisplay">GstGLDisplay</a>
</dt>
<dd></dd>
<dt>
@@ -636,7 +636,7 @@ get_zoom, user_function in gstphotography
</dt>
<dd></dd>
<dt>
-<a class="link" href="GstGLDownload.html#gst-gl-download-perform-with-memory" title="gst_gl_download_perform_with_memory ()">gst_gl_download_perform_with_memory</a>, function in <a class="link" href="GstGLDownload.html" title="GstGLDownload">GstGLDownload</a>
+<a class="link" href="GstGLDownload.html#gst-gl-download-set-format" title="gst_gl_download_set_format ()">gst_gl_download_set_format</a>, function in <a class="link" href="GstGLDownload.html" title="GstGLDownload">GstGLDownload</a>
</dt>
<dd></dd>
<dt>
@@ -896,7 +896,7 @@ get_zoom, user_function in gstphotography
</dt>
<dd></dd>
<dt>
-<a class="link" href="GstGLUpload.html#gst-gl-upload-init-format" title="gst_gl_upload_init_format ()">gst_gl_upload_init_format</a>, function in <a class="link" href="GstGLUpload.html" title="GstGLUpload">GstGLUpload</a>
+<a class="link" href="GstGLUpload.html#gst-gl-upload-get-format" title="gst_gl_upload_get_format ()">gst_gl_upload_get_format</a>, function in <a class="link" href="GstGLUpload.html" title="GstGLUpload">GstGLUpload</a>
</dt>
<dd></dd>
<dt>
@@ -920,6 +920,10 @@ get_zoom, user_function in gstphotography
</dt>
<dd></dd>
<dt>
+<a class="link" href="GstGLUpload.html#gst-gl-upload-set-format" title="gst_gl_upload_set_format ()">gst_gl_upload_set_format</a>, function in <a class="link" href="GstGLUpload.html" title="GstGLUpload">GstGLUpload</a>
+</dt>
+<dd></dd>
+<dt>
<a class="link" href="gst-plugins-bad-libs-GstGLWindowAndroid.html#gst-gl-window-android-egl-new" title="gst_gl_window_android_egl_new ()">gst_gl_window_android_egl_new</a>, function in <a class="link" href="gst-plugins-bad-libs-GstGLWindowAndroid.html" title="GstGLWindowAndroid">GstGLWindowAndroid</a>
</dt>
<dd></dd>
diff --git a/docs/libs/html/gst-plugins-bad-libs-1.0.devhelp2 b/docs/libs/html/gst-plugins-bad-libs-1.0.devhelp2
index 2082a038..c303a770 100644
--- a/docs/libs/html/gst-plugins-bad-libs-1.0.devhelp2
+++ b/docs/libs/html/gst-plugins-bad-libs-1.0.devhelp2
@@ -335,8 +335,6 @@
<keyword type="struct" name="struct GstGLBufferPool" link="GstGLBufferPool.html#GstGLBufferPool-struct"/>
<keyword type="struct" name="struct GstGLBufferPoolClass" link="GstGLBufferPool.html#GstGLBufferPoolClass"/>
<keyword type="function" name="gst_gl_color_convert_new ()" link="GstGLColorConvert.html#gst-gl-color-convert-new"/>
- <keyword type="function" name="gst_gl_color_convert_init_format ()" link="GstGLColorConvert.html#gst-gl-color-convert-init-format"/>
- <keyword type="function" name="gst_gl_color_convert_set_texture_scaling ()" link="GstGLColorConvert.html#gst-gl-color-convert-set-texture-scaling"/>
<keyword type="function" name="gst_gl_color_convert_perform ()" link="GstGLColorConvert.html#gst-gl-color-convert-perform"/>
<keyword type="macro" name="GST_GL_COLOR_CONVERT_FORMATS" link="GstGLColorConvert.html#GST-GL-COLOR-CONVERT-FORMATS:CAPS"/>
<keyword type="macro" name="GST_GL_COLOR_CONVERT_VIDEO_CAPS" link="GstGLColorConvert.html#GST-GL-COLOR-CONVERT-VIDEO-CAPS"/>
@@ -356,6 +354,7 @@
<keyword type="function" name="gst_gl_context_get_display ()" link="GstGLContext.html#gst-gl-context-get-display"/>
<keyword type="function" name="gst_gl_context_get_gl_api ()" link="GstGLContext.html#gst-gl-context-get-gl-api"/>
<keyword type="function" name="gst_gl_context_get_gl_context ()" link="GstGLContext.html#gst-gl-context-get-gl-context"/>
+ <keyword type="function" name="gst_gl_context_check_feature ()" link="GstGLContext.html#gst-gl-context-check-feature"/>
<keyword type="enum" name="enum GstGLContextError" link="GstGLContext.html#GstGLContextError"/>
<keyword type="struct" name="GstGLContext" link="GstGLContext.html#GstGLContext-struct"/>
<keyword type="function" name="gst_gl_context_cocoa_new ()" link="gst-plugins-bad-libs-GstGLContextCocoa.html#gst-gl-context-cocoa-new"/>
@@ -367,13 +366,14 @@
<keyword type="function" name="gst_gl_context_wgl_new ()" link="gst-plugins-bad-libs-GstGLContextWGL.html#gst-gl-context-wgl-new"/>
<keyword type="struct" name="struct GstGLContextWGL" link="gst-plugins-bad-libs-GstGLContextWGL.html#GstGLContextWGL"/>
<keyword type="function" name="gst_gl_display_new ()" link="GstGLDisplay.html#gst-gl-display-new"/>
+ <keyword type="function" name="gst_gl_display_get_handle_type ()" link="GstGLDisplay.html#gst-gl-display-get-handle-type"/>
<keyword type="function" name="gst_context_get_gl_display ()" link="GstGLDisplay.html#gst-context-get-gl-display"/>
<keyword type="function" name="gst_context_set_gl_display ()" link="GstGLDisplay.html#gst-context-set-gl-display"/>
+ <keyword type="enum" name="enum GstGLDisplayType" link="GstGLDisplay.html#GstGLDisplayType"/>
<keyword type="struct" name="GstGLDisplay" link="GstGLDisplay.html#GstGLDisplay-struct"/>
<keyword type="function" name="gst_gl_download_new ()" link="GstGLDownload.html#gst-gl-download-new"/>
- <keyword type="function" name="gst_gl_download_init_format ()" link="GstGLDownload.html#gst-gl-download-init-format"/>
+ <keyword type="function" name="gst_gl_download_set_format ()" link="GstGLDownload.html#gst-gl-download-set-format"/>
<keyword type="function" name="gst_gl_download_perform_with_data ()" link="GstGLDownload.html#gst-gl-download-perform-with-data"/>
- <keyword type="function" name="gst_gl_download_perform_with_memory ()" link="GstGLDownload.html#gst-gl-download-perform-with-memory"/>
<keyword type="struct" name="GstGLDownload" link="GstGLDownload.html#GstGLDownload-struct"/>
<keyword type="function" name="gst_gl_filter_draw_texture ()" link="GstGLFilter.html#gst-gl-filter-draw-texture"/>
<keyword type="function" name="gst_gl_filter_render_to_target ()" link="GstGLFilter.html#gst-gl-filter-render-to-target"/>
@@ -462,7 +462,8 @@
<keyword type="property" name="The “fragment-src” property" link="gst-plugins-bad-libs-gstglshader.html#GstGLShader--fragment-src"/>
<keyword type="property" name="The “vertex-src” property" link="gst-plugins-bad-libs-gstglshader.html#GstGLShader--vertex-src"/>
<keyword type="function" name="gst_gl_upload_new ()" link="GstGLUpload.html#gst-gl-upload-new"/>
- <keyword type="function" name="gst_gl_upload_init_format ()" link="GstGLUpload.html#gst-gl-upload-init-format"/>
+ <keyword type="function" name="gst_gl_upload_set_format ()" link="GstGLUpload.html#gst-gl-upload-set-format"/>
+ <keyword type="function" name="gst_gl_upload_get_format ()" link="GstGLUpload.html#gst-gl-upload-get-format"/>
<keyword type="function" name="gst_gl_upload_add_video_gl_texture_upload_meta ()" link="GstGLUpload.html#gst-gl-upload-add-video-gl-texture-upload-meta"/>
<keyword type="function" name="gst_gl_upload_perform_with_data ()" link="GstGLUpload.html#gst-gl-upload-perform-with-data"/>
<keyword type="function" name="gst_gl_upload_perform_with_gl_texture_upload_meta ()" link="GstGLUpload.html#gst-gl-upload-perform-with-gl-texture-upload-meta"/>
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstGLContextEGL.html b/docs/libs/html/gst-plugins-bad-libs-GstGLContextEGL.html
index 5ac85c1b..74188705 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstGLContextEGL.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstGLContextEGL.html
@@ -91,6 +91,10 @@ gst_gl_context_egl_new (<em class="parameter"><code><span class="type">void</spa
EGLConfig egl_config;
GstGLAPI gl_api;
+
+ EGLImageKHR (*eglCreateImage) (EGLDisplay dpy, EGLContext ctx, EGLenum target,
+ EGLClientBuffer buffer, const EGLint *attrib_list);
+ EGLBoolean (*eglDestroyImage) (EGLDisplay dpy, EGLImageKHR image);
};
</pre>
</div>
diff --git a/docs/libs/html/gst-plugins-bad-libs-Utilities.html b/docs/libs/html/gst-plugins-bad-libs-Utilities.html
index 667f4c5a..292255ad 100644
--- a/docs/libs/html/gst-plugins-bad-libs-Utilities.html
+++ b/docs/libs/html/gst-plugins-bad-libs-Utilities.html
@@ -371,7 +371,7 @@ gst_gl_ensure_display (<em class="parameter"><code><a href="http://library.gnome
<a name="gst-gl-handle-set-context"></a><h3>gst_gl_handle_set_context ()</h3>
<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
gst_gl_handle_set_context (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html"><span class="type">GstElement</span></a> *element</code></em>,
- <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstContext.html#GstContext"><span class="type">GstContext</span></a> *context</code></em>,
+ <em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstContext.html"><span class="type">GstContext</span></a> *context</code></em>,
<em class="parameter"><code><a class="link" href="GstGLDisplay.html" title="GstGLDisplay"><span class="type">GstGLDisplay</span></a> **display</code></em>);</pre>
</div>
<hr>
diff --git a/docs/libs/html/gst-plugins-bad-libs-gstglmemory.html b/docs/libs/html/gst-plugins-bad-libs-gstglmemory.html
index bc54d9e6..e535ef67 100644
--- a/docs/libs/html/gst-plugins-bad-libs-gstglmemory.html
+++ b/docs/libs/html/gst-plugins-bad-libs-gstglmemory.html
@@ -74,7 +74,7 @@
</tr>
<tr>
<td class="function_type">
-<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMemory.html#GstMemory"><span class="returnvalue">GstMemory</span></a> *
+<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html"><span class="returnvalue">GstMemory</span></a> *
</td>
<td class="function_name">
<a class="link" href="gst-plugins-bad-libs-gstglmemory.html#gst-gl-memory-alloc" title="gst_gl_memory_alloc ()">gst_gl_memory_alloc</a> <span class="c_punctuation">()</span>
@@ -177,7 +177,7 @@
</div>
<div class="refsect1">
<a name="gst-plugins-bad-libs-gstglmemory.description"></a><h2>Description</h2>
-<p>GstGLMemory is a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMemory.html#GstMemory"><span class="type">GstMemory</span></a> subclass providing support for the mapping of
+<p>GstGLMemory is a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html"><span class="type">GstMemory</span></a> subclass providing support for the mapping of
GL textures. </p>
<p><a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLMemory" title="GstGLMemory"><span class="type">GstGLMemory</span></a> is created through <a class="link" href="gst-plugins-bad-libs-gstglmemory.html#gst-gl-memory-alloc" title="gst_gl_memory_alloc ()"><code class="function">gst_gl_memory_alloc()</code></a> or system memory can
be wrapped through <a class="link" href="gst-plugins-bad-libs-gstglmemory.html#gst-gl-memory-wrapped" title="gst_gl_memory_wrapped ()"><code class="function">gst_gl_memory_wrapped()</code></a>.</p>
@@ -311,7 +311,7 @@ multiple times. This must be called before any other GstGLMemory operation.</p>
<hr>
<div class="refsect2">
<a name="gst-gl-memory-alloc"></a><h3>gst_gl_memory_alloc ()</h3>
-<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMemory.html#GstMemory"><span class="returnvalue">GstMemory</span></a> *
+<pre class="programlisting"><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html"><span class="returnvalue">GstMemory</span></a> *
gst_gl_memory_alloc (<em class="parameter"><code><a class="link" href="GstGLContext.html" title="GstGLContext"><span class="type">GstGLContext</span></a> *context</code></em>,
<em class="parameter"><code><span class="type">GstVideoGLTextureType</span> tex_type</code></em>,
<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a> width</code></em>,
@@ -341,7 +341,7 @@ gst_gl_memory_alloc (<em class="parameter"><code><a class="link" href="GstGLCont
</div>
<div class="refsect3">
<a name="id-1.2.7.13.8.7.5"></a><h4>Returns</h4>
-<p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMemory.html#GstMemory"><span class="type">GstMemory</span></a> object with a GL texture specified by <em class="parameter"><code>v_info</code></em>
+<p> a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html"><span class="type">GstMemory</span></a> object with a GL texture specified by <em class="parameter"><code>v_info</code></em>
from <em class="parameter"><code>context</code></em>
</p>
<p></p>
@@ -604,7 +604,7 @@ gst_gl_memory_setup_wrapped (<em class="parameter"><code><a class="link" href="G
<div class="refsect2">
<a name="gst-is-gl-memory"></a><h3>gst_is_gl_memory ()</h3>
<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>
-gst_is_gl_memory (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMemory.html#GstMemory"><span class="type">GstMemory</span></a> *mem</code></em>);</pre>
+gst_is_gl_memory (<em class="parameter"><code><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html"><span class="type">GstMemory</span></a> *mem</code></em>);</pre>
<div class="refsect3">
<a name="id-1.2.7.13.8.13.4"></a><h4>Parameters</h4>
<div class="informaltable"><table width="100%" border="0">
@@ -615,7 +615,7 @@ gst_is_gl_memory (<em class="parameter"><code><a href="http://gstreamer.freedesk
</colgroup>
<tbody><tr>
<td class="parameter_name"><p>mem</p></td>
-<td class="parameter_description"><p>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMemory.html#GstMemory"><span class="type">GstMemory</span></a></p></td>
+<td class="parameter_description"><p>a <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html"><span class="type">GstMemory</span></a></p></td>
<td class="parameter_annotations"> </td>
</tr></tbody>
</table></div>
@@ -724,7 +724,7 @@ you are writing to OpenGL. Conversely, combining <a class="link" href="gst-plugi
</colgroup>
<tbody>
<tr>
-<td class="struct_member_name"><p><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMemory.html#GstMemory"><span class="type">GstMemory</span></a> <em class="structfield"><code><a name="GstGLMemory.mem"></a>mem</code></em>;</p></td>
+<td class="struct_member_name"><p><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html"><span class="type">GstMemory</span></a> <em class="structfield"><code><a name="GstGLMemory.mem"></a>mem</code></em>;</p></td>
<td class="struct_member_description"><p>the parent object</p></td>
<td class="struct_member_annotations"> </td>
</tr>
@@ -770,7 +770,7 @@ you are writing to OpenGL. Conversely, combining <a class="link" href="gst-plugi
</div>
<div class="refsect1">
<a name="gst-plugins-bad-libs-gstglmemory.see-also"></a><h2>See Also</h2>
-<p><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstMemory.html#GstMemory"><span class="type">GstMemory</span></a>, <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html"><span class="type">GstAllocator</span></a>, <a class="link" href="GstGLBufferPool.html" title="GstGLBufferPool"><span class="type">GstGLBufferPool</span></a></p>
+<p><a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstMemory.html"><span class="type">GstMemory</span></a>, <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html"><span class="type">GstAllocator</span></a>, <a class="link" href="GstGLBufferPool.html" title="GstGLBufferPool"><span class="type">GstGLBufferPool</span></a></p>
</div>
</div>
<div class="footer">
diff --git a/docs/libs/html/gst-plugins-bad-libs-gstglshader.html b/docs/libs/html/gst-plugins-bad-libs-gstglshader.html
index 4841a3a4..63134dc5 100644
--- a/docs/libs/html/gst-plugins-bad-libs-gstglshader.html
+++ b/docs/libs/html/gst-plugins-bad-libs-gstglshader.html
@@ -439,7 +439,9 @@
<div class="refsect1">
<a name="gst-plugins-bad-libs-gstglshader.object-hierarchy"></a><h2>Object Hierarchy</h2>
<pre class="screen"> <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <span class="lineart">╰──</span> GstGLShader
+ <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> GstGLShader
</pre>
</div>
<div class="refsect1">
diff --git a/docs/libs/html/gstreamer-libs-hierarchy.html b/docs/libs/html/gstreamer-libs-hierarchy.html
index ad5af2ae..cedbcdea 100644
--- a/docs/libs/html/gstreamer-libs-hierarchy.html
+++ b/docs/libs/html/gstreamer-libs-hierarchy.html
@@ -24,27 +24,27 @@
<a name="gstreamer-libs-hierarchy"></a>Part II. Object Hierarchy</h1></div></div></div>
<pre class="screen">
<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
- <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> <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
- <span class="lineart">│</span> <span class="lineart">├──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstAllocator.html">GstAllocator</a>
- <span class="lineart">│</span> <span class="lineart">│</span> <span class="lineart">╰──</span> <a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLAllocator">GstGLAllocator</a>
- <span class="lineart">│</span> <span class="lineart">├──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html">GstPad</a>
- <span class="lineart">│</span> <span class="lineart">│</span> <span class="lineart">╰──</span> <a class="link" href="gst-plugins-bad-libs-gstglmixer.html#GstGLMixerPad">GstGLMixerPad</a>
- <span class="lineart">│</span> <span class="lineart">├──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
- <span class="lineart">│</span> <span class="lineart">│</span> <span class="lineart">├──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBin.html">GstBin</a>
- <span class="lineart">│</span> <span class="lineart">│</span> <span class="lineart">│</span> <span class="lineart">╰──</span> <a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBin">GstInsertBin</a>
- <span class="lineart">│</span> <span class="lineart">│</span> <span class="lineart">├──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseTransform.html">GstBaseTransform</a>
- <span class="lineart">│</span> <span class="lineart">│</span> <span class="lineart">│</span> <span class="lineart">╰──</span> <a class="link" href="GstGLFilter.html" title="GstGLFilter">GstGLFilter</a>
- <span class="lineart">│</span> <span class="lineart">│</span> <span class="lineart">╰──</span> <a class="link" href="gst-plugins-bad-libs-gstglmixer.html#GstGLMixer">GstGLMixer</a>
- <span class="lineart">│</span> <span class="lineart">╰──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstBufferPool.html#GstBufferPool">GstBufferPool</a>
- <span class="lineart">│</span> <span class="lineart">╰──</span> <a class="link" href="GstGLBufferPool.html" title="GstGLBufferPool">GstGLBufferPool</a>
- <span class="lineart">├──</span> <a class="link" href="GstGLUpload.html" title="GstGLUpload">GstGLUpload</a>
- <span class="lineart">├──</span> <a class="link" href="GstGLDownload.html" title="GstGLDownload">GstGLDownload</a>
- <span class="lineart">├──</span> <a class="link" href="GstGLColorConvert.html" title="GstGLColorConvert">GstGLColorConvert</a>
- <span class="lineart">├──</span> <a class="link" href="GstGLDisplay.html" title="GstGLDisplay">GstGLDisplay</a>
- <span class="lineart">├──</span> <a class="link" href="GstGLContext.html" title="GstGLContext">GstGLContext</a>
- <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader">GstGLShader</a>
- <span class="lineart">╰──</span> <a class="link" href="GstGLWindow.html" title="GstGLWindow">GstGLWindow</a>
+ <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/GstAllocator.html">GstAllocator</a>
+ <span class="lineart">│</span> <span class="lineart">╰──</span> <a class="link" href="gst-plugins-bad-libs-gstglmemory.html#GstGLAllocator">GstGLAllocator</a>
+ <span class="lineart">├──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html">GstPad</a>
+ <span class="lineart">│</span> <span class="lineart">╰──</span> <a class="link" href="gst-plugins-bad-libs-gstglmixer.html#GstGLMixerPad">GstGLMixerPad</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> <span class="lineart">├──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBin.html">GstBin</a>
+ <span class="lineart">│</span> <span class="lineart">│</span> <span class="lineart">╰──</span> <a class="link" href="gst-plugins-bad-libs-GstInsertbin.html#GstInsertBin">GstInsertBin</a>
+ <span class="lineart">│</span> <span class="lineart">├──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html/GstBaseTransform.html">GstBaseTransform</a>
+ <span class="lineart">│</span> <span class="lineart">│</span> <span class="lineart">╰──</span> <a class="link" href="GstGLFilter.html" title="GstGLFilter">GstGLFilter</a>
+ <span class="lineart">│</span> <span class="lineart">╰──</span> <a class="link" href="gst-plugins-bad-libs-gstglmixer.html#GstGLMixer">GstGLMixer</a>
+ <span class="lineart">├──</span> <a class="link" href="GstGLUpload.html" title="GstGLUpload">GstGLUpload</a>
+ <span class="lineart">├──</span> <a class="link" href="GstGLDownload.html" title="GstGLDownload">GstGLDownload</a>
+ <span class="lineart">├──</span> <a class="link" href="GstGLColorConvert.html" title="GstGLColorConvert">GstGLColorConvert</a>
+ <span class="lineart">├──</span> <a class="link" href="GstGLDisplay.html" title="GstGLDisplay">GstGLDisplay</a>
+ <span class="lineart">├──</span> <a class="link" href="GstGLContext.html" title="GstGLContext">GstGLContext</a>
+ <span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-gstglshader.html#GstGLShader">GstGLShader</a>
+ <span class="lineart">├──</span> <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBufferPool.html">GstBufferPool</a>
+ <span class="lineart">│</span> <span class="lineart">╰──</span> <a class="link" href="GstGLBufferPool.html" title="GstGLBufferPool">GstGLBufferPool</a>
+ <span class="lineart">╰──</span> <a class="link" href="GstGLWindow.html" title="GstGLWindow">GstGLWindow</a>
GBoxed
<span class="lineart">├──</span> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-sections.html#GstMpegTsSection">GstMpegTsSection</a>
<span class="lineart">╰──</span> <a class="link" href="gst-plugins-bad-libs-Base-MPEG-TS-descriptors.html#GstMpegTsDescriptor">GstMpegTsDescriptor</a>
diff --git a/docs/libs/html/index.html b/docs/libs/html/index.html
index 8bb0eae6..84282798 100644
--- a/docs/libs/html/index.html
+++ b/docs/libs/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 Bad Plugins 1.0 Library Reference Manual</p></th></tr></table></div>
<div><p class="releaseinfo">
- for GStreamer Bad Library 1.0 (1.3.0.1)
+ for GStreamer Bad Library 1.0 (1.3.2)
<a class="ulink" href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-libs/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-libs/html/</a>.
</p></div>
</div>
diff --git a/docs/libs/html/index.sgml b/docs/libs/html/index.sgml
index 7654f648..61fefe79 100644
--- a/docs/libs/html/index.sgml
+++ b/docs/libs/html/index.sgml
@@ -413,8 +413,6 @@
<ANCHOR id="GstGLColorConvert.description" href="gst-plugins-bad-libs-1.0/GstGLColorConvert.html#GstGLColorConvert.description">
<ANCHOR id="GstGLColorConvert.functions_details" href="gst-plugins-bad-libs-1.0/GstGLColorConvert.html#GstGLColorConvert.functions_details">
<ANCHOR id="gst-gl-color-convert-new" href="gst-plugins-bad-libs-1.0/GstGLColorConvert.html#gst-gl-color-convert-new">
-<ANCHOR id="gst-gl-color-convert-init-format" href="gst-plugins-bad-libs-1.0/GstGLColorConvert.html#gst-gl-color-convert-init-format">
-<ANCHOR id="gst-gl-color-convert-set-texture-scaling" href="gst-plugins-bad-libs-1.0/GstGLColorConvert.html#gst-gl-color-convert-set-texture-scaling">
<ANCHOR id="gst-gl-color-convert-perform" href="gst-plugins-bad-libs-1.0/GstGLColorConvert.html#gst-gl-color-convert-perform">
<ANCHOR id="GstGLColorConvert.other_details" href="gst-plugins-bad-libs-1.0/GstGLColorConvert.html#GstGLColorConvert.other_details">
<ANCHOR id="GST-GL-COLOR-CONVERT-FORMATS:CAPS" href="gst-plugins-bad-libs-1.0/GstGLColorConvert.html#GST-GL-COLOR-CONVERT-FORMATS:CAPS">
@@ -442,6 +440,7 @@
<ANCHOR id="gst-gl-context-get-display" href="gst-plugins-bad-libs-1.0/GstGLContext.html#gst-gl-context-get-display">
<ANCHOR id="gst-gl-context-get-gl-api" href="gst-plugins-bad-libs-1.0/GstGLContext.html#gst-gl-context-get-gl-api">
<ANCHOR id="gst-gl-context-get-gl-context" href="gst-plugins-bad-libs-1.0/GstGLContext.html#gst-gl-context-get-gl-context">
+<ANCHOR id="gst-gl-context-check-feature" href="gst-plugins-bad-libs-1.0/GstGLContext.html#gst-gl-context-check-feature">
<ANCHOR id="GstGLContext.other_details" href="gst-plugins-bad-libs-1.0/GstGLContext.html#GstGLContext.other_details">
<ANCHOR id="GstGLContextError" href="gst-plugins-bad-libs-1.0/GstGLContext.html#GstGLContextError">
<ANCHOR id="GstGLContext-struct" href="gst-plugins-bad-libs-1.0/GstGLContext.html#GstGLContext-struct">
@@ -489,9 +488,11 @@
<ANCHOR id="GstGLDisplay.description" href="gst-plugins-bad-libs-1.0/GstGLDisplay.html#GstGLDisplay.description">
<ANCHOR id="GstGLDisplay.functions_details" href="gst-plugins-bad-libs-1.0/GstGLDisplay.html#GstGLDisplay.functions_details">
<ANCHOR id="gst-gl-display-new" href="gst-plugins-bad-libs-1.0/GstGLDisplay.html#gst-gl-display-new">
+<ANCHOR id="gst-gl-display-get-handle-type" href="gst-plugins-bad-libs-1.0/GstGLDisplay.html#gst-gl-display-get-handle-type">
<ANCHOR id="gst-context-get-gl-display" href="gst-plugins-bad-libs-1.0/GstGLDisplay.html#gst-context-get-gl-display">
<ANCHOR id="gst-context-set-gl-display" href="gst-plugins-bad-libs-1.0/GstGLDisplay.html#gst-context-set-gl-display">
<ANCHOR id="GstGLDisplay.other_details" href="gst-plugins-bad-libs-1.0/GstGLDisplay.html#GstGLDisplay.other_details">
+<ANCHOR id="GstGLDisplayType" href="gst-plugins-bad-libs-1.0/GstGLDisplay.html#GstGLDisplayType">
<ANCHOR id="GstGLDisplay-struct" href="gst-plugins-bad-libs-1.0/GstGLDisplay.html#GstGLDisplay-struct">
<ANCHOR id="GstGLDisplay.see-also" href="gst-plugins-bad-libs-1.0/GstGLDisplay.html#GstGLDisplay.see-also">
<ANCHOR id="GstGLDownload" href="gst-plugins-bad-libs-1.0/GstGLDownload.html">
@@ -501,9 +502,8 @@
<ANCHOR id="GstGLDownload.description" href="gst-plugins-bad-libs-1.0/GstGLDownload.html#GstGLDownload.description">
<ANCHOR id="GstGLDownload.functions_details" href="gst-plugins-bad-libs-1.0/GstGLDownload.html#GstGLDownload.functions_details">
<ANCHOR id="gst-gl-download-new" href="gst-plugins-bad-libs-1.0/GstGLDownload.html#gst-gl-download-new">
-<ANCHOR id="gst-gl-download-init-format" href="gst-plugins-bad-libs-1.0/GstGLDownload.html#gst-gl-download-init-format">
+<ANCHOR id="gst-gl-download-set-format" href="gst-plugins-bad-libs-1.0/GstGLDownload.html#gst-gl-download-set-format">
<ANCHOR id="gst-gl-download-perform-with-data" href="gst-plugins-bad-libs-1.0/GstGLDownload.html#gst-gl-download-perform-with-data">
-<ANCHOR id="gst-gl-download-perform-with-memory" href="gst-plugins-bad-libs-1.0/GstGLDownload.html#gst-gl-download-perform-with-memory">
<ANCHOR id="GstGLDownload.other_details" href="gst-plugins-bad-libs-1.0/GstGLDownload.html#GstGLDownload.other_details">
<ANCHOR id="GstGLDownload-struct" href="gst-plugins-bad-libs-1.0/GstGLDownload.html#GstGLDownload-struct">
<ANCHOR id="GstGLDownload.see-also" href="gst-plugins-bad-libs-1.0/GstGLDownload.html#GstGLDownload.see-also">
@@ -638,7 +638,8 @@
<ANCHOR id="GstGLUpload.description" href="gst-plugins-bad-libs-1.0/GstGLUpload.html#GstGLUpload.description">
<ANCHOR id="GstGLUpload.functions_details" href="gst-plugins-bad-libs-1.0/GstGLUpload.html#GstGLUpload.functions_details">
<ANCHOR id="gst-gl-upload-new" href="gst-plugins-bad-libs-1.0/GstGLUpload.html#gst-gl-upload-new">
-<ANCHOR id="gst-gl-upload-init-format" href="gst-plugins-bad-libs-1.0/GstGLUpload.html#gst-gl-upload-init-format">
+<ANCHOR id="gst-gl-upload-set-format" href="gst-plugins-bad-libs-1.0/GstGLUpload.html#gst-gl-upload-set-format">
+<ANCHOR id="gst-gl-upload-get-format" href="gst-plugins-bad-libs-1.0/GstGLUpload.html#gst-gl-upload-get-format">
<ANCHOR id="gst-gl-upload-add-video-gl-texture-upload-meta" href="gst-plugins-bad-libs-1.0/GstGLUpload.html#gst-gl-upload-add-video-gl-texture-upload-meta">
<ANCHOR id="gst-gl-upload-perform-with-data" href="gst-plugins-bad-libs-1.0/GstGLUpload.html#gst-gl-upload-perform-with-data">
<ANCHOR id="gst-gl-upload-perform-with-gl-texture-upload-meta" href="gst-plugins-bad-libs-1.0/GstGLUpload.html#gst-gl-upload-perform-with-gl-texture-upload-meta">
diff --git a/docs/plugins/gst-plugins-bad-plugins.args b/docs/plugins/gst-plugins-bad-plugins.args
index 7ea7bfbe..a8303c5f 100644
--- a/docs/plugins/gst-plugins-bad-plugins.args
+++ b/docs/plugins/gst-plugins-bad-plugins.args
@@ -60359,7 +60359,7 @@
<RANGE>>= 2</RANGE>
<FLAGS>rw</FLAGS>
<NICK>Maximum buffering time</NICK>
-<BLURB>Maximum number of seconds of buffer accumulated during playback.</BLURB>
+<BLURB>Maximum number of seconds of buffer accumulated during playback(deprecated).</BLURB>
<DEFAULT>30</DEFAULT>
</ARG>
@@ -60613,7 +60613,7 @@ Gestures in the defined region of interest will emit messages.</BLURB>
<RANGE></RANGE>
<FLAGS>rw</FLAGS>
<NICK>Max queue size in buffers</NICK>
-<BLURB>Maximum buffers that can be stored in each internal stream queue (0 = infinite).</BLURB>
+<BLURB>Maximum buffers that can be stored in each internal stream queue (0 = infinite) (deprecated).</BLURB>
<DEFAULT>0</DEFAULT>
</ARG>
diff --git a/docs/plugins/gst-plugins-bad-plugins.hierarchy b/docs/plugins/gst-plugins-bad-plugins.hierarchy
index e7cd556b..9af11197 100644
--- a/docs/plugins/gst-plugins-bad-plugins.hierarchy
+++ b/docs/plugins/gst-plugins-bad-plugins.hierarchy
@@ -64,8 +64,6 @@ GObject
GstChecksumSink
GstCurlBaseSink
GstCurlFileSink
- GstCurlSshSink
- GstCurlSftpSink
GstCurlTlsSink
GstCurlFtpSink
GstCurlHttpSink
@@ -202,9 +200,11 @@ GObject
GstBaseCameraSrc
GstUvcH264Src
GstWrapperCameraBinSrc
+ GstDashDemux
GstFPSDisplaySink
GstHLSDemux
GstHlsSink
+ GstMssDemux
GstPipeline
GstCameraBin
GstSDPDemux
@@ -216,7 +216,6 @@ GObject
GstCompare
GstDVBSubOverlay
GstDVDSpu
- GstDashDemux
GstDecklinkSink
GstDecklinkSrc
GstDisparity
@@ -249,7 +248,6 @@ GObject
GstMpeg2enc
GstMpegPSDemux
GstMplex
- GstMssDemux
GstOpencvTextOverlay
GstPcapParse
GstPitch
@@ -298,6 +296,7 @@ GObject
GstTSDemux
MpegTSParse2
MpegTsMux
+ GstGLContext
GstPad
GstGLMixerPad
GstPadTemplate
@@ -311,7 +310,6 @@ GObject
GstTaskPool
GstColorBalanceChannel
GstEncodingProfile
- GstGLContext
GstVdpDevice
MXFMetadataBase
MXFDescriptiveMetadata
diff --git a/docs/plugins/gst-plugins-bad-plugins.interfaces b/docs/plugins/gst-plugins-bad-plugins.interfaces
index 1c33aeaf..e0c55285 100644
--- a/docs/plugins/gst-plugins-bad-plugins.interfaces
+++ b/docs/plugins/gst-plugins-bad-plugins.interfaces
@@ -16,6 +16,7 @@ GstCameraBin GstChildProxy GstTagSetter
GstCameraBin2 GstChildProxy GstTagSetter
GstCeltEnc GstPreset GstTagSetter
GstDaalaEnc GstPreset
+GstDashDemux GstChildProxy
GstDataURISrc GstURIHandler
GstDfbVideoSink GstImplementsInterface GstNavigation GstColorBalance
GstDfbVideoSink GstNavigation GstColorBalance
@@ -46,6 +47,7 @@ GstKateEnc GstTagSetter
GstKateTag GstTagSetter
GstMMS GstURIHandler
GstMpeg2enc GstPreset
+GstMssDemux GstChildProxy
GstMythtvSrc GstURIHandler
GstNeonhttpSrc GstURIHandler
GstOpenJPEGEnc GstPreset
diff --git a/docs/plugins/gst-plugins-bad-plugins.signals b/docs/plugins/gst-plugins-bad-plugins.signals
index a4977848..8affeb73 100644
--- a/docs/plugins/gst-plugins-bad-plugins.signals
+++ b/docs/plugins/gst-plugins-bad-plugins.signals
@@ -581,3 +581,11 @@ GstSrtpDec *gstsrtpdec
guint arg1
</SIGNAL>
+<SIGNAL>
+<NAME>GstSrtpDec::remove-key</NAME>
+<RETURNS>void</RETURNS>
+<FLAGS>la</FLAGS>
+GstSrtpDec *gstsrtpdec
+guint arg1
+</SIGNAL>
+
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-assrender.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-assrender.html
index d483afe2..8fee8644 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-assrender.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-assrender.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-audiovisualizers.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-audiovisualizers.html
index 8fd732ee..b5fd63f1 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-audiovisualizers.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-audiovisualizers.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-autoconvert.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-autoconvert.html
index 59f019f9..bbdfce88 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-autoconvert.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-autoconvert.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-bayer.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-bayer.html
index 881addb8..a944b63e 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-bayer.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-bayer.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-bz2.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-bz2.html
index 1e64e8db..b190f758 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-bz2.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-bz2.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-camerabin.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-camerabin.html
index f23dc1d2..7acd96ef 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-camerabin.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-camerabin.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-coloreffects.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-coloreffects.html
index 05d5c75e..e4a68f59 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-coloreffects.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-coloreffects.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-curl.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-curl.html
index 7f968aec..7ede8e41 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-curl.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-curl.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -80,10 +80,6 @@
<td>Upload data over HTTP/HTTPS protocol using libcurl</td>
</tr>
<tr>
-<td><p><span class="term">curlsftpsink</span></p></td>
-<td>Upload data over the SFTP protocol using libcurl</td>
-</tr>
-<tr>
<td><p><span class="term">curlsmtpsink</span></p></td>
<td>Upload data over SMTP protocol using libcurl</td>
</tr>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dataurisrc.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dataurisrc.html
index 9c92f471..0e2cf8a3 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dataurisrc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dataurisrc.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-debugutilsbad.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-debugutilsbad.html
index e67aa2b0..2320e65a 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-debugutilsbad.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-debugutilsbad.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dtsdec.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dtsdec.html
index befb1540..e077597d 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dtsdec.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dtsdec.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dvb.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dvb.html
index 87ef2155..29d40a6e 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dvb.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dvb.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dvdspu.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dvdspu.html
index 16771aa6..7fcd1bc0 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dvdspu.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dvdspu.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-faac.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-faac.html
index 67e238c4..516ca70c 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-faac.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-faac.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-faad.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-faad.html
index ef060656..ab147820 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-faad.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-faad.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-festival.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-festival.html
index c9510a37..c1feb658 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-festival.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-festival.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-gaudieffects.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-gaudieffects.html
index cce3ac8b..a157bd58 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-gaudieffects.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-gaudieffects.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-geometrictransform.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-geometrictransform.html
index 7090164a..30121d71 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-geometrictransform.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-geometrictransform.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-gsm.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-gsm.html
index fbce6295..75175e90 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-gsm.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-gsm.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-jpegformat.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-jpegformat.html
index 76867c67..b781a2ab 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-jpegformat.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-jpegformat.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-liveadder.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-liveadder.html
index 136a77d2..4f0fb44d 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-liveadder.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-liveadder.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mimic.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mimic.html
index a1b89948..f95fca63 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mimic.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mimic.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mms.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mms.html
index 0637ea9f..4c13d1e3 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mms.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mms.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-modplug.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-modplug.html
index 578be73b..c89980b2 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-modplug.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-modplug.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpeg2enc.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpeg2enc.html
index 3b4a8c6e..3cb25bfd 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpeg2enc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpeg2enc.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.0.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -50,7 +50,7 @@
</tr>
<tr>
<td><p><span class="term">package</span></p></td>
-<td>GStreamer Bad Plug-ins git</td>
+<td>GStreamer Bad Plug-ins source release</td>
</tr>
<tr>
<td><p><span class="term">origin</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegtsmux.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegtsmux.html
index fb5dc243..641e1b9b 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegtsmux.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegtsmux.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mplex.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mplex.html
index 96699c44..842ad625 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mplex.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mplex.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-neon.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-neon.html
index e7e8fb8c..69b36409 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-neon.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-neon.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-ofa.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-ofa.html
index d9416caa..d3f9bf0f 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-ofa.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-ofa.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-openal.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-openal.html
index c8973a09..3f6154c7 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-openal.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-openal.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-opencv.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-opencv.html
index 3252092e..13267b70 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-opencv.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-opencv.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-pcapparse.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-pcapparse.html
index e05180e9..341e165d 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-pcapparse.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-pcapparse.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-rawparse.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rawparse.html
index d7382889..63446e40 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-rawparse.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rawparse.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-rfbsrc.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rfbsrc.html
index 23d5c630..165c9d24 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-rfbsrc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rfbsrc.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-sdp.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-sdp.html
index d4c11c2f..82917a30 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-sdp.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-sdp.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-shm.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-shm.html
index f9312716..475a9918 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-shm.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-shm.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-soundtouch.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-soundtouch.html
index ed4dd22c..c0fa690b 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-soundtouch.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-soundtouch.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.0.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -50,7 +50,7 @@
</tr>
<tr>
<td><p><span class="term">package</span></p></td>
-<td>GStreamer Bad Plug-ins git</td>
+<td>GStreamer Bad Plug-ins source release</td>
</tr>
<tr>
<td><p><span class="term">origin</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-speed.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-speed.html
index 0b4d880a..461cd685 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-speed.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-speed.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-voaacenc.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-voaacenc.html
index b9edd2cb..f0e31be1 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-voaacenc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-voaacenc.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-voamrwbenc.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-voamrwbenc.html
index 2cb10753..74df8d05 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-voamrwbenc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-voamrwbenc.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-zbar.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-zbar.html
index 5f09d2f8..ffa2d03c 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-zbar.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-zbar.html
@@ -42,7 +42,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.3.0.1</td>
+<td>1.3.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -50,7 +50,7 @@
</tr>
<tr>
<td><p><span class="term">package</span></p></td>
-<td>GStreamer Bad Plug-ins git</td>
+<td>GStreamer Bad Plug-ins source release</td>
</tr>
<tr>
<td><p><span class="term">origin</span></p></td>
diff --git a/docs/plugins/html/index.html b/docs/plugins/html/index.html
index 568f2ff8..30f4077f 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 Bad Plugins 1.0 Plugins Reference Manual</p></th></tr></table></div>
<div><p class="releaseinfo">
- for GStreamer Bad Plugins 1.0 (1.3.1)
+ for GStreamer Bad Plugins 1.0 (1.3.2)
The latest version of this documentation can be found on-line at
<a class="ulink" href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/</a>.
</p></div>
diff --git a/docs/plugins/inspect/plugin-accurip.xml b/docs/plugins/inspect/plugin-accurip.xml
index 2984a1d6..86883d74 100644
--- a/docs/plugins/inspect/plugin-accurip.xml
+++ b/docs/plugins/inspect/plugin-accurip.xml
@@ -3,7 +3,7 @@
<description>Computes an AccurateRip CRC</description>
<filename>../../gst/accurip/.libs/libgstaccurip.so</filename>
<basename>libgstaccurip.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-adpcmdec.xml b/docs/plugins/inspect/plugin-adpcmdec.xml
index 7be77093..c8261c9b 100644
--- a/docs/plugins/inspect/plugin-adpcmdec.xml
+++ b/docs/plugins/inspect/plugin-adpcmdec.xml
@@ -3,7 +3,7 @@
<description>ADPCM decoder</description>
<filename>../../gst/adpcmdec/.libs/libgstadpcmdec.so</filename>
<basename>libgstadpcmdec.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-adpcmenc.xml b/docs/plugins/inspect/plugin-adpcmenc.xml
index 49afbf3b..790723ae 100644
--- a/docs/plugins/inspect/plugin-adpcmenc.xml
+++ b/docs/plugins/inspect/plugin-adpcmenc.xml
@@ -3,7 +3,7 @@
<description>ADPCM encoder</description>
<filename>../../gst/adpcmenc/.libs/libgstadpcmenc.so</filename>
<basename>libgstadpcmenc.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-aiff.xml b/docs/plugins/inspect/plugin-aiff.xml
index f6f4f153..283f0f35 100644
--- a/docs/plugins/inspect/plugin-aiff.xml
+++ b/docs/plugins/inspect/plugin-aiff.xml
@@ -3,7 +3,7 @@
<description>Create and parse Audio Interchange File Format (AIFF) files</description>
<filename>../../gst/aiff/.libs/libgstaiff.so</filename>
<basename>libgstaiff.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-asfmux.xml b/docs/plugins/inspect/plugin-asfmux.xml
index dada47ca..2f947870 100644
--- a/docs/plugins/inspect/plugin-asfmux.xml
+++ b/docs/plugins/inspect/plugin-asfmux.xml
@@ -3,7 +3,7 @@
<description>ASF Muxer Plugin</description>
<filename>../../gst/asfmux/.libs/libgstasfmux.so</filename>
<basename>libgstasfmux.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-assrender.xml b/docs/plugins/inspect/plugin-assrender.xml
index bf1b1aa6..16bb3dfd 100644
--- a/docs/plugins/inspect/plugin-assrender.xml
+++ b/docs/plugins/inspect/plugin-assrender.xml
@@ -3,7 +3,7 @@
<description>ASS/SSA subtitle renderer</description>
<filename>../../ext/assrender/.libs/libgstassrender.so</filename>
<basename>libgstassrender.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-audiofxbad.xml b/docs/plugins/inspect/plugin-audiofxbad.xml
index df6d8a72..4b1a0fb3 100644
--- a/docs/plugins/inspect/plugin-audiofxbad.xml
+++ b/docs/plugins/inspect/plugin-audiofxbad.xml
@@ -3,7 +3,7 @@
<description>Audio filters from gst-plugins-bad</description>
<filename>../../gst/audiofxbad/.libs/libgstaudiofxbad.so</filename>
<basename>libgstaudiofxbad.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins</package>
diff --git a/docs/plugins/inspect/plugin-audiomixer.xml b/docs/plugins/inspect/plugin-audiomixer.xml
index 7ce8b86a..602c683a 100644
--- a/docs/plugins/inspect/plugin-audiomixer.xml
+++ b/docs/plugins/inspect/plugin-audiomixer.xml
@@ -3,7 +3,7 @@
<description>Mixes multiple audio streams</description>
<filename>../../gst/audiomixer/.libs/libgstaudiomixer.so</filename>
<basename>libgstaudiomixer.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-audiovisualizers.xml b/docs/plugins/inspect/plugin-audiovisualizers.xml
index 2bfb2c4a..0c2c3ba1 100644
--- a/docs/plugins/inspect/plugin-audiovisualizers.xml
+++ b/docs/plugins/inspect/plugin-audiovisualizers.xml
@@ -3,7 +3,7 @@
<description>Creates video visualizations of audio input</description>
<filename>../../gst/audiovisualizers/.libs/libgstaudiovisualizers.so</filename>
<basename>libgstaudiovisualizers.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>GPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-autoconvert.xml b/docs/plugins/inspect/plugin-autoconvert.xml
index 614e9e41..e8ad756d 100644
--- a/docs/plugins/inspect/plugin-autoconvert.xml
+++ b/docs/plugins/inspect/plugin-autoconvert.xml
@@ -3,7 +3,7 @@
<description>Selects convertor element based on caps</description>
<filename>../../gst/autoconvert/.libs/libgstautoconvert.so</filename>
<basename>libgstautoconvert.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-bayer.xml b/docs/plugins/inspect/plugin-bayer.xml
index 56f4389a..a35eff67 100644
--- a/docs/plugins/inspect/plugin-bayer.xml
+++ b/docs/plugins/inspect/plugin-bayer.xml
@@ -3,7 +3,7 @@
<description>Elements to convert Bayer images</description>
<filename>../../gst/bayer/.libs/libgstbayer.so</filename>
<basename>libgstbayer.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-bz2.xml b/docs/plugins/inspect/plugin-bz2.xml
index 3de2a2af..d4a52167 100644
--- a/docs/plugins/inspect/plugin-bz2.xml
+++ b/docs/plugins/inspect/plugin-bz2.xml
@@ -3,7 +3,7 @@
<description>Compress or decompress streams</description>
<filename>../../ext/bz2/.libs/libgstbz2.so</filename>
<basename>libgstbz2.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-camerabin.xml b/docs/plugins/inspect/plugin-camerabin.xml
index 948fc5ad..32d1d899 100644
--- a/docs/plugins/inspect/plugin-camerabin.xml
+++ b/docs/plugins/inspect/plugin-camerabin.xml
@@ -3,7 +3,7 @@
<description>Take image snapshots and record movies from camera</description>
<filename>../../gst/camerabin2/.libs/libgstcamerabin2.so</filename>
<basename>libgstcamerabin2.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-chromaprint.xml b/docs/plugins/inspect/plugin-chromaprint.xml
index 6de9276f..4e2f41e8 100644
--- a/docs/plugins/inspect/plugin-chromaprint.xml
+++ b/docs/plugins/inspect/plugin-chromaprint.xml
@@ -3,7 +3,7 @@
<description>Calculate Chromaprint fingerprint from audio files</description>
<filename>../../ext/chromaprint/.libs/libgstchromaprint.so</filename>
<basename>libgstchromaprint.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-coloreffects.xml b/docs/plugins/inspect/plugin-coloreffects.xml
index 9d0837b6..fff03339 100644
--- a/docs/plugins/inspect/plugin-coloreffects.xml
+++ b/docs/plugins/inspect/plugin-coloreffects.xml
@@ -3,7 +3,7 @@
<description>Color Look-up Table filters</description>
<filename>../../gst/coloreffects/.libs/libgstcoloreffects.so</filename>
<basename>libgstcoloreffects.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-curl.xml b/docs/plugins/inspect/plugin-curl.xml
index 55c266ff..2477e45d 100644
--- a/docs/plugins/inspect/plugin-curl.xml
+++ b/docs/plugins/inspect/plugin-curl.xml
@@ -3,7 +3,7 @@
<description>libcurl-based elements</description>
<filename>../../ext/curl/.libs/libgstcurl.so</filename>
<basename>libgstcurl.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
@@ -55,21 +55,6 @@
</pads>
</element>
<element>
- <name>curlsftpsink</name>
- <longname>Curl sftp sink</longname>
- <class>Sink/Network</class>
- <description>Upload data over the SFTP protocol using libcurl</description>
- <author>Sorin L. &lt;sorin@axis.com&gt;</author>
- <pads>
- <caps>
- <name>sink</name>
- <direction>sink</direction>
- <presence>always</presence>
- <details>ANY</details>
- </caps>
- </pads>
- </element>
- <element>
<name>curlsmtpsink</name>
<longname>Curl smtp sink</longname>
<class>Sink/Network</class>
diff --git a/docs/plugins/inspect/plugin-dashdemux.xml b/docs/plugins/inspect/plugin-dashdemux.xml
index 4524fa98..03bfb033 100644
--- a/docs/plugins/inspect/plugin-dashdemux.xml
+++ b/docs/plugins/inspect/plugin-dashdemux.xml
@@ -3,7 +3,7 @@
<description>DASH demuxer plugin</description>
<filename>../../ext/dash/.libs/libgstdashdemux.so</filename>
<basename>libgstdashdemux.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins</package>
diff --git a/docs/plugins/inspect/plugin-dataurisrc.xml b/docs/plugins/inspect/plugin-dataurisrc.xml
index b9052de9..94ec4840 100644
--- a/docs/plugins/inspect/plugin-dataurisrc.xml
+++ b/docs/plugins/inspect/plugin-dataurisrc.xml
@@ -3,7 +3,7 @@
<description>data: URI source</description>
<filename>../../gst/dataurisrc/.libs/libgstdataurisrc.so</filename>
<basename>libgstdataurisrc.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-debugutilsbad.xml b/docs/plugins/inspect/plugin-debugutilsbad.xml
index 724767d0..ba31620b 100644
--- a/docs/plugins/inspect/plugin-debugutilsbad.xml
+++ b/docs/plugins/inspect/plugin-debugutilsbad.xml
@@ -3,7 +3,7 @@
<description>Collection of elements that may or may not be useful for debugging</description>
<filename>../../gst/debugutils/.libs/libgstdebugutilsbad.so</filename>
<basename>libgstdebugutilsbad.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-decklink.xml b/docs/plugins/inspect/plugin-decklink.xml
index 40fa7c77..fa3191d6 100644
--- a/docs/plugins/inspect/plugin-decklink.xml
+++ b/docs/plugins/inspect/plugin-decklink.xml
@@ -3,7 +3,7 @@
<description>Blackmagic Decklink plugin</description>
<filename>../../sys/decklink/.libs/libgstdecklink.so</filename>
<basename>libgstdecklink.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins</package>
diff --git a/docs/plugins/inspect/plugin-dfbvideosink.xml b/docs/plugins/inspect/plugin-dfbvideosink.xml
index 630d5281..902bcf50 100644
--- a/docs/plugins/inspect/plugin-dfbvideosink.xml
+++ b/docs/plugins/inspect/plugin-dfbvideosink.xml
@@ -3,7 +3,7 @@
<description>DirectFB video output plugin</description>
<filename>../../ext/directfb/.libs/libgstdfbvideosink.so</filename>
<basename>libgstdfbvideosink.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-dtsdec.xml b/docs/plugins/inspect/plugin-dtsdec.xml
index 27d19905..46a6ac7f 100644
--- a/docs/plugins/inspect/plugin-dtsdec.xml
+++ b/docs/plugins/inspect/plugin-dtsdec.xml
@@ -3,7 +3,7 @@
<description>Decodes DTS audio streams</description>
<filename>../../ext/dts/.libs/libgstdtsdec.so</filename>
<basename>libgstdtsdec.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>GPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-dvb.xml b/docs/plugins/inspect/plugin-dvb.xml
index 2f2ed2e9..5dd3b401 100644
--- a/docs/plugins/inspect/plugin-dvb.xml
+++ b/docs/plugins/inspect/plugin-dvb.xml
@@ -3,7 +3,7 @@
<description>DVB elements</description>
<filename>../../sys/dvb/.libs/libgstdvb.so</filename>
<basename>libgstdvb.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-dvbsuboverlay.xml b/docs/plugins/inspect/plugin-dvbsuboverlay.xml
index 067cf1f2..6a44de9d 100644
--- a/docs/plugins/inspect/plugin-dvbsuboverlay.xml
+++ b/docs/plugins/inspect/plugin-dvbsuboverlay.xml
@@ -3,7 +3,7 @@
<description>DVB subtitle renderer</description>
<filename>../../gst/dvbsuboverlay/.libs/libgstdvbsuboverlay.so</filename>
<basename>libgstdvbsuboverlay.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-dvdspu.xml b/docs/plugins/inspect/plugin-dvdspu.xml
index 96182daa..3896b35a 100644
--- a/docs/plugins/inspect/plugin-dvdspu.xml
+++ b/docs/plugins/inspect/plugin-dvdspu.xml
@@ -3,7 +3,7 @@
<description>DVD Sub-picture Overlay element</description>
<filename>../../gst/dvdspu/.libs/libgstdvdspu.so</filename>
<basename>libgstdvdspu.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-faac.xml b/docs/plugins/inspect/plugin-faac.xml
index 8d1a5bda..75a31da5 100644
--- a/docs/plugins/inspect/plugin-faac.xml
+++ b/docs/plugins/inspect/plugin-faac.xml
@@ -3,7 +3,7 @@
<description>Free AAC Encoder (FAAC)</description>
<filename>../../ext/faac/.libs/libgstfaac.so</filename>
<basename>libgstfaac.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-faad.xml b/docs/plugins/inspect/plugin-faad.xml
index 2d7f0c59..0c8df3d2 100644
--- a/docs/plugins/inspect/plugin-faad.xml
+++ b/docs/plugins/inspect/plugin-faad.xml
@@ -3,7 +3,7 @@
<description>Free AAC Decoder (FAAD)</description>
<filename>../../ext/faad/.libs/libgstfaad.so</filename>
<basename>libgstfaad.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>GPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-fbdevsink.xml b/docs/plugins/inspect/plugin-fbdevsink.xml
index b317ef76..8509297c 100644
--- a/docs/plugins/inspect/plugin-fbdevsink.xml
+++ b/docs/plugins/inspect/plugin-fbdevsink.xml
@@ -3,7 +3,7 @@
<description>Linux framebuffer video sink</description>
<filename>../../sys/fbdev/.libs/libgstfbdevsink.so</filename>
<basename>libgstfbdevsink.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-festival.xml b/docs/plugins/inspect/plugin-festival.xml
index 33f6e4c2..a210a8c2 100644
--- a/docs/plugins/inspect/plugin-festival.xml
+++ b/docs/plugins/inspect/plugin-festival.xml
@@ -3,7 +3,7 @@
<description>Synthesizes plain text into audio</description>
<filename>../../gst/festival/.libs/libgstfestival.so</filename>
<basename>libgstfestival.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-fieldanalysis.xml b/docs/plugins/inspect/plugin-fieldanalysis.xml
index f1313f92..f8d1fb11 100644
--- a/docs/plugins/inspect/plugin-fieldanalysis.xml
+++ b/docs/plugins/inspect/plugin-fieldanalysis.xml
@@ -3,7 +3,7 @@
<description>Video field analysis</description>
<filename>../../gst/fieldanalysis/.libs/libgstfieldanalysis.so</filename>
<basename>libgstfieldanalysis.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer</package>
diff --git a/docs/plugins/inspect/plugin-flite.xml b/docs/plugins/inspect/plugin-flite.xml
index 97c1b1fe..85cfe2d5 100644
--- a/docs/plugins/inspect/plugin-flite.xml
+++ b/docs/plugins/inspect/plugin-flite.xml
@@ -3,7 +3,7 @@
<description>Flite speech synthesizer plugin</description>
<filename>../../ext/flite/.libs/libgstflite.so</filename>
<basename>libgstflite.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-fluidsynthmidi.xml b/docs/plugins/inspect/plugin-fluidsynthmidi.xml
index 50b068a3..f3d232db 100644
--- a/docs/plugins/inspect/plugin-fluidsynthmidi.xml
+++ b/docs/plugins/inspect/plugin-fluidsynthmidi.xml
@@ -3,7 +3,7 @@
<description>Fluidsynth MIDI Plugin</description>
<filename>../../ext/fluidsynth/.libs/libgstfluidsynthmidi.so</filename>
<basename>libgstfluidsynthmidi.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-fragmented.xml b/docs/plugins/inspect/plugin-fragmented.xml
index 71f7b44b..55c6a739 100644
--- a/docs/plugins/inspect/plugin-fragmented.xml
+++ b/docs/plugins/inspect/plugin-fragmented.xml
@@ -3,7 +3,7 @@
<description>Fragmented streaming plugins</description>
<filename>../../ext/hls/.libs/libgstfragmented.so</filename>
<basename>libgstfragmented.so</basename>
- <version>1.3.0.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins</package>
diff --git a/docs/plugins/inspect/plugin-freeverb.xml b/docs/plugins/inspect/plugin-freeverb.xml
index 15b0da43..076e5498 100644
--- a/docs/plugins/inspect/plugin-freeverb.xml
+++ b/docs/plugins/inspect/plugin-freeverb.xml
@@ -3,7 +3,7 @@
<description>Reverberation/room effect</description>
<filename>../../gst/freeverb/.libs/libgstfreeverb.so</filename>
<basename>libgstfreeverb.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-frei0r.xml b/docs/plugins/inspect/plugin-frei0r.xml
index 0e509e91..f64e287c 100644
--- a/docs/plugins/inspect/plugin-frei0r.xml
+++ b/docs/plugins/inspect/plugin-frei0r.xml
@@ -3,7 +3,7 @@
<description>frei0r plugin library</description>
<filename>../../gst/frei0r/.libs/libgstfrei0r.so</filename>
<basename>libgstfrei0r.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-gaudieffects.xml b/docs/plugins/inspect/plugin-gaudieffects.xml
index 1f29fabd..e735ceae 100644
--- a/docs/plugins/inspect/plugin-gaudieffects.xml
+++ b/docs/plugins/inspect/plugin-gaudieffects.xml
@@ -3,7 +3,7 @@
<description>Gaudi video effects.</description>
<filename>../../gst/gaudieffects/.libs/libgstgaudieffects.so</filename>
<basename>libgstgaudieffects.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer</package>
diff --git a/docs/plugins/inspect/plugin-gdp.xml b/docs/plugins/inspect/plugin-gdp.xml
index 0d593c16..f84d5a9f 100644
--- a/docs/plugins/inspect/plugin-gdp.xml
+++ b/docs/plugins/inspect/plugin-gdp.xml
@@ -3,7 +3,7 @@
<description>Payload/depayload GDP packets</description>
<filename>../../gst/gdp/.libs/libgstgdp.so</filename>
<basename>libgstgdp.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-geometrictransform.xml b/docs/plugins/inspect/plugin-geometrictransform.xml
index 6ce0d4bb..230629ac 100644
--- a/docs/plugins/inspect/plugin-geometrictransform.xml
+++ b/docs/plugins/inspect/plugin-geometrictransform.xml
@@ -3,7 +3,7 @@
<description>Various geometric image transform elements</description>
<filename>../../gst/geometrictransform/.libs/libgstgeometrictransform.so</filename>
<basename>libgstgeometrictransform.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-gmedec.xml b/docs/plugins/inspect/plugin-gmedec.xml
index 383abe86..d647c90a 100644
--- a/docs/plugins/inspect/plugin-gmedec.xml
+++ b/docs/plugins/inspect/plugin-gmedec.xml
@@ -3,10 +3,10 @@
<description>GME Audio Decoder</description>
<filename>../../ext/gme/.libs/libgstgme.so</filename>
<basename>libgstgme.so</basename>
- <version>1.3.0.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
- <package>GStreamer Bad Plug-ins git</package>
+ <package>GStreamer Bad Plug-ins source release</package>
<origin>Unknown package origin</origin>
<elements>
<element>
diff --git a/docs/plugins/inspect/plugin-gsm.xml b/docs/plugins/inspect/plugin-gsm.xml
index adc7efd4..23c72cf4 100644
--- a/docs/plugins/inspect/plugin-gsm.xml
+++ b/docs/plugins/inspect/plugin-gsm.xml
@@ -3,7 +3,7 @@
<description>GSM encoder/decoder</description>
<filename>../../ext/gsm/.libs/libgstgsm.so</filename>
<basename>libgstgsm.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-gstsiren.xml b/docs/plugins/inspect/plugin-gstsiren.xml
index 1a356c0a..be9df02c 100644
--- a/docs/plugins/inspect/plugin-gstsiren.xml
+++ b/docs/plugins/inspect/plugin-gstsiren.xml
@@ -3,7 +3,7 @@
<description>Siren encoder/decoder/payloader/depayloader plugins</description>
<filename>../../gst/siren/.libs/libgstsiren.so</filename>
<basename>libgstsiren.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-id3tag.xml b/docs/plugins/inspect/plugin-id3tag.xml
index 9980d315..0e054eb0 100644
--- a/docs/plugins/inspect/plugin-id3tag.xml
+++ b/docs/plugins/inspect/plugin-id3tag.xml
@@ -3,7 +3,7 @@
<description>ID3 v1 and v2 muxing plugin</description>
<filename>../../gst/id3tag/.libs/libgstid3tag.so</filename>
<basename>libgstid3tag.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-inter.xml b/docs/plugins/inspect/plugin-inter.xml
index b0e37ec2..8ec68720 100644
--- a/docs/plugins/inspect/plugin-inter.xml
+++ b/docs/plugins/inspect/plugin-inter.xml
@@ -3,7 +3,7 @@
<description>plugin for inter-pipeline communication</description>
<filename>../../gst/inter/.libs/libgstinter.so</filename>
<basename>libgstinter.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins</package>
diff --git a/docs/plugins/inspect/plugin-interlace.xml b/docs/plugins/inspect/plugin-interlace.xml
index 6074c87b..a709b178 100644
--- a/docs/plugins/inspect/plugin-interlace.xml
+++ b/docs/plugins/inspect/plugin-interlace.xml
@@ -3,7 +3,7 @@
<description>Create an interlaced video stream</description>
<filename>../../gst/interlace/.libs/libgstinterlace.so</filename>
<basename>libgstinterlace.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-ivfparse.xml b/docs/plugins/inspect/plugin-ivfparse.xml
index acbc0732..ae2002e6 100644
--- a/docs/plugins/inspect/plugin-ivfparse.xml
+++ b/docs/plugins/inspect/plugin-ivfparse.xml
@@ -3,7 +3,7 @@
<description>IVF parser</description>
<filename>../../gst/ivfparse/.libs/libgstivfparse.so</filename>
<basename>libgstivfparse.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-ivtc.xml b/docs/plugins/inspect/plugin-ivtc.xml
index 153f7e49..1f9c162d 100644
--- a/docs/plugins/inspect/plugin-ivtc.xml
+++ b/docs/plugins/inspect/plugin-ivtc.xml
@@ -3,7 +3,7 @@
<description>Inverse Telecine</description>
<filename>../../gst/ivtc/.libs/libgstivtc.so</filename>
<basename>libgstivtc.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins</package>
diff --git a/docs/plugins/inspect/plugin-jp2kdecimator.xml b/docs/plugins/inspect/plugin-jp2kdecimator.xml
index be1428f6..97a8619e 100644
--- a/docs/plugins/inspect/plugin-jp2kdecimator.xml
+++ b/docs/plugins/inspect/plugin-jp2kdecimator.xml
@@ -3,7 +3,7 @@
<description>JPEG2000 decimator</description>
<filename>../../gst/jp2kdecimator/.libs/libgstjp2kdecimator.so</filename>
<basename>libgstjp2kdecimator.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-jpegformat.xml b/docs/plugins/inspect/plugin-jpegformat.xml
index 1c54d1d4..b247e5c0 100644
--- a/docs/plugins/inspect/plugin-jpegformat.xml
+++ b/docs/plugins/inspect/plugin-jpegformat.xml
@@ -3,7 +3,7 @@
<description>JPEG interchange format plugin</description>
<filename>../../gst/jpegformat/.libs/libgstjpegformat.so</filename>
<basename>libgstjpegformat.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-kate.xml b/docs/plugins/inspect/plugin-kate.xml
index 6277b01d..35989002 100644
--- a/docs/plugins/inspect/plugin-kate.xml
+++ b/docs/plugins/inspect/plugin-kate.xml
@@ -3,7 +3,7 @@
<description>Kate plugin</description>
<filename>../../ext/kate/.libs/libgstkate.so</filename>
<basename>libgstkate.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-ladspa.xml b/docs/plugins/inspect/plugin-ladspa.xml
index 20dcb6e3..36e163ba 100644
--- a/docs/plugins/inspect/plugin-ladspa.xml
+++ b/docs/plugins/inspect/plugin-ladspa.xml
@@ -3,7 +3,7 @@
<description>LADSPA plugin</description>
<filename>../../ext/ladspa/.libs/libgstladspa.so</filename>
<basename>libgstladspa.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-liveadder.xml b/docs/plugins/inspect/plugin-liveadder.xml
index ac89e258..bba2a300 100644
--- a/docs/plugins/inspect/plugin-liveadder.xml
+++ b/docs/plugins/inspect/plugin-liveadder.xml
@@ -3,7 +3,7 @@
<description>Adds multiple live discontinuous streams</description>
<filename>../../gst/liveadder/.libs/libgstliveadder.so</filename>
<basename>libgstliveadder.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-midi.xml b/docs/plugins/inspect/plugin-midi.xml
index 49cd30ff..06c35495 100644
--- a/docs/plugins/inspect/plugin-midi.xml
+++ b/docs/plugins/inspect/plugin-midi.xml
@@ -3,7 +3,7 @@
<description>Parse MIDI files</description>
<filename>../../gst/midi/.libs/libgstmidi.so</filename>
<basename>libgstmidi.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-mimic.xml b/docs/plugins/inspect/plugin-mimic.xml
index 88a9be2a..c9401c0b 100644
--- a/docs/plugins/inspect/plugin-mimic.xml
+++ b/docs/plugins/inspect/plugin-mimic.xml
@@ -3,7 +3,7 @@
<description>Mimic codec</description>
<filename>../../ext/mimic/.libs/libgstmimic.so</filename>
<basename>libgstmimic.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-mms.xml b/docs/plugins/inspect/plugin-mms.xml
index 6c13e53e..3ec36c49 100644
--- a/docs/plugins/inspect/plugin-mms.xml
+++ b/docs/plugins/inspect/plugin-mms.xml
@@ -3,7 +3,7 @@
<description>Microsoft Multi Media Server streaming protocol support</description>
<filename>../../ext/libmms/.libs/libgstmms.so</filename>
<basename>libgstmms.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-modplug.xml b/docs/plugins/inspect/plugin-modplug.xml
index 90e75b88..4b1ace34 100644
--- a/docs/plugins/inspect/plugin-modplug.xml
+++ b/docs/plugins/inspect/plugin-modplug.xml
@@ -3,7 +3,7 @@
<description>.MOD audio decoding</description>
<filename>../../ext/modplug/.libs/libgstmodplug.so</filename>
<basename>libgstmodplug.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-mpeg2enc.xml b/docs/plugins/inspect/plugin-mpeg2enc.xml
index 8605b576..a6f2c957 100644
--- a/docs/plugins/inspect/plugin-mpeg2enc.xml
+++ b/docs/plugins/inspect/plugin-mpeg2enc.xml
@@ -3,10 +3,10 @@
<description>High-quality MPEG-1/2 video encoder</description>
<filename>../../ext/mpeg2enc/.libs/libgstmpeg2enc.so</filename>
<basename>libgstmpeg2enc.so</basename>
- <version>1.3.0.1</version>
+ <version>1.3.2</version>
<license>GPL</license>
<source>gst-plugins-bad</source>
- <package>GStreamer Bad Plug-ins git</package>
+ <package>GStreamer Bad Plug-ins source release</package>
<origin>Unknown package origin</origin>
<elements>
<element>
diff --git a/docs/plugins/inspect/plugin-mpegpsdemux.xml b/docs/plugins/inspect/plugin-mpegpsdemux.xml
index a402f225..76a9ab7d 100644
--- a/docs/plugins/inspect/plugin-mpegpsdemux.xml
+++ b/docs/plugins/inspect/plugin-mpegpsdemux.xml
@@ -3,7 +3,7 @@
<description>MPEG-PS demuxer</description>
<filename>../../gst/mpegdemux/.libs/libgstmpegpsdemux.so</filename>
<basename>libgstmpegpsdemux.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>unknown</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-mpegpsmux.xml b/docs/plugins/inspect/plugin-mpegpsmux.xml
index bf8dfe52..4ddf3592 100644
--- a/docs/plugins/inspect/plugin-mpegpsmux.xml
+++ b/docs/plugins/inspect/plugin-mpegpsmux.xml
@@ -3,7 +3,7 @@
<description>MPEG-PS muxer</description>
<filename>../../gst/mpegpsmux/.libs/libgstmpegpsmux.so</filename>
<basename>libgstmpegpsmux.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-mpegtsdemux.xml b/docs/plugins/inspect/plugin-mpegtsdemux.xml
index 647f3638..0dda6188 100644
--- a/docs/plugins/inspect/plugin-mpegtsdemux.xml
+++ b/docs/plugins/inspect/plugin-mpegtsdemux.xml
@@ -3,7 +3,7 @@
<description>MPEG TS demuxer</description>
<filename>../../gst/mpegtsdemux/.libs/libgstmpegtsdemux.so</filename>
<basename>libgstmpegtsdemux.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-mpegtsmux.xml b/docs/plugins/inspect/plugin-mpegtsmux.xml
index ffbfceed..0f1543ca 100644
--- a/docs/plugins/inspect/plugin-mpegtsmux.xml
+++ b/docs/plugins/inspect/plugin-mpegtsmux.xml
@@ -3,7 +3,7 @@
<description>MPEG-TS muxer</description>
<filename>../../gst/mpegtsmux/.libs/libgstmpegtsmux.so</filename>
<basename>libgstmpegtsmux.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-mpg123.xml b/docs/plugins/inspect/plugin-mpg123.xml
index 30dbd569..d48f3d47 100644
--- a/docs/plugins/inspect/plugin-mpg123.xml
+++ b/docs/plugins/inspect/plugin-mpg123.xml
@@ -3,7 +3,7 @@
<description>mp3 decoding based on the mpg123 library</description>
<filename>../../ext/mpg123/.libs/libgstmpg123.so</filename>
<basename>libgstmpg123.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-mplex.xml b/docs/plugins/inspect/plugin-mplex.xml
index cb6abee9..8bfc786a 100644
--- a/docs/plugins/inspect/plugin-mplex.xml
+++ b/docs/plugins/inspect/plugin-mplex.xml
@@ -3,7 +3,7 @@
<description>High-quality MPEG/DVD/SVCD/VCD video/audio multiplexer</description>
<filename>../../ext/mplex/.libs/libgstmplex.so</filename>
<basename>libgstmplex.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>GPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-mxf.xml b/docs/plugins/inspect/plugin-mxf.xml
index 0cd069ca..579a21aa 100644
--- a/docs/plugins/inspect/plugin-mxf.xml
+++ b/docs/plugins/inspect/plugin-mxf.xml
@@ -3,7 +3,7 @@
<description>MXF plugin library</description>
<filename>../../gst/mxf/.libs/libgstmxf.so</filename>
<basename>libgstmxf.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-neon.xml b/docs/plugins/inspect/plugin-neon.xml
index 235afec6..7afcd576 100644
--- a/docs/plugins/inspect/plugin-neon.xml
+++ b/docs/plugins/inspect/plugin-neon.xml
@@ -3,7 +3,7 @@
<description>lib neon http client src</description>
<filename>../../ext/neon/.libs/libgstneonhttpsrc.so</filename>
<basename>libgstneonhttpsrc.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-ofa.xml b/docs/plugins/inspect/plugin-ofa.xml
index 23223ea5..1f47b2cd 100644
--- a/docs/plugins/inspect/plugin-ofa.xml
+++ b/docs/plugins/inspect/plugin-ofa.xml
@@ -3,7 +3,7 @@
<description>Calculate MusicIP fingerprint from audio files</description>
<filename>../../ext/ofa/.libs/libgstofa.so</filename>
<basename>libgstofa.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>GPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-openal.xml b/docs/plugins/inspect/plugin-openal.xml
index 0efbc806..9e9ca20c 100644
--- a/docs/plugins/inspect/plugin-openal.xml
+++ b/docs/plugins/inspect/plugin-openal.xml
@@ -3,7 +3,7 @@
<description>OpenAL plugin library</description>
<filename>../../ext/openal/.libs/libgstopenal.so</filename>
<basename>libgstopenal.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-opencv.xml b/docs/plugins/inspect/plugin-opencv.xml
index 3cfd4819..1f6e8823 100644
--- a/docs/plugins/inspect/plugin-opencv.xml
+++ b/docs/plugins/inspect/plugin-opencv.xml
@@ -3,7 +3,7 @@
<description>GStreamer OpenCV Plugins</description>
<filename>../../ext/opencv/.libs/libgstopencv.so</filename>
<basename>libgstopencv.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-openexr.xml b/docs/plugins/inspect/plugin-openexr.xml
index a3595c2a..8b682929 100644
--- a/docs/plugins/inspect/plugin-openexr.xml
+++ b/docs/plugins/inspect/plugin-openexr.xml
@@ -3,7 +3,7 @@
<description>OpenEXR image plugin</description>
<filename>../../ext/openexr/.libs/libgstopenexr.so</filename>
<basename>libgstopenexr.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-opengl.xml b/docs/plugins/inspect/plugin-opengl.xml
index 3ec003a6..a70a2a4b 100644
--- a/docs/plugins/inspect/plugin-opengl.xml
+++ b/docs/plugins/inspect/plugin-opengl.xml
@@ -3,7 +3,7 @@
<description>OpenGL plugin</description>
<filename>../../ext/gl/.libs/libgstopengl.so</filename>
<basename>libgstopengl.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
@@ -20,13 +20,13 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
- <details>video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
</pads>
</element>
@@ -41,13 +41,13 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
- <details>video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
</pads>
</element>
@@ -62,13 +62,13 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
- <details>video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
</pads>
</element>
@@ -83,13 +83,13 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
- <details>video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
</pads>
</element>
@@ -104,13 +104,13 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
- <details>video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
</pads>
</element>
@@ -125,13 +125,13 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
- <details>video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
</pads>
</element>
@@ -146,13 +146,13 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
- <details>video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
</pads>
</element>
@@ -167,13 +167,13 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
- <details>video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
</pads>
</element>
@@ -188,13 +188,13 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
- <details>video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
</pads>
</element>
@@ -209,13 +209,13 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
- <details>video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
</pads>
</element>
@@ -230,13 +230,13 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
- <details>video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
</pads>
</element>
@@ -251,13 +251,13 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
- <details>video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
</pads>
</element>
@@ -272,7 +272,7 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
</pads>
</element>
@@ -287,13 +287,13 @@
<name>sink_%d</name>
<direction>sink</direction>
<presence>request</presence>
- <details>video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
- <details>video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
</pads>
</element>
@@ -308,13 +308,13 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
- <details>video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
</pads>
</element>
@@ -329,13 +329,13 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
- <details>video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
</pads>
</element>
@@ -350,7 +350,7 @@
<name>src</name>
<direction>source</direction>
<presence>always</presence>
- <details>video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(memory:EGLImage), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
</pads>
</element>
@@ -365,13 +365,13 @@
<name>sink_%d</name>
<direction>sink</direction>
<presence>request</presence>
- <details>video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
- <details>video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw(meta:GstVideoGLTextureUploadMeta), format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string){ RGB, RGBx, RGBA, BGR, BGRx, BGRA, xRGB, xBGR, ARGB, ABGR, Y444, I420, YV12, Y42B, Y41B, NV12, NV21, YUY2, UYVY, AYUV, GRAY8, GRAY16_LE, GRAY16_BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
</pads>
</element>
diff --git a/docs/plugins/inspect/plugin-openjpeg.xml b/docs/plugins/inspect/plugin-openjpeg.xml
index 061ec87f..cdcfd5b5 100644
--- a/docs/plugins/inspect/plugin-openjpeg.xml
+++ b/docs/plugins/inspect/plugin-openjpeg.xml
@@ -3,10 +3,10 @@
<description>OpenJPEG-based JPEG2000 image decoder/encoder</description>
<filename>../../ext/openjpeg/.libs/libgstopenjpeg.so</filename>
<basename>libgstopenjpeg.so</basename>
- <version>1.3.0.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
- <package>GStreamer Bad Plug-ins git</package>
+ <package>GStreamer Bad Plug-ins source release</package>
<origin>Unknown package origin</origin>
<elements>
<element>
diff --git a/docs/plugins/inspect/plugin-opus.xml b/docs/plugins/inspect/plugin-opus.xml
index c8e05bec..cffb9203 100644
--- a/docs/plugins/inspect/plugin-opus.xml
+++ b/docs/plugins/inspect/plugin-opus.xml
@@ -3,10 +3,10 @@
<description>OPUS plugin library</description>
<filename>../../ext/opus/.libs/libgstopus.so</filename>
<basename>libgstopus.so</basename>
- <version>1.3.0.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
- <package>GStreamer Bad Plug-ins git</package>
+ <package>GStreamer Bad Plug-ins source release</package>
<origin>Unknown package origin</origin>
<elements>
<element>
diff --git a/docs/plugins/inspect/plugin-pcapparse.xml b/docs/plugins/inspect/plugin-pcapparse.xml
index c3fdb0b9..fb83797b 100644
--- a/docs/plugins/inspect/plugin-pcapparse.xml
+++ b/docs/plugins/inspect/plugin-pcapparse.xml
@@ -3,7 +3,7 @@
<description>Element parsing raw pcap streams</description>
<filename>../../gst/pcapparse/.libs/libgstpcapparse.so</filename>
<basename>libgstpcapparse.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer</package>
diff --git a/docs/plugins/inspect/plugin-pnm.xml b/docs/plugins/inspect/plugin-pnm.xml
index 124e59a0..13790bb3 100644
--- a/docs/plugins/inspect/plugin-pnm.xml
+++ b/docs/plugins/inspect/plugin-pnm.xml
@@ -3,7 +3,7 @@
<description>PNM plugin</description>
<filename>../../gst/pnm/.libs/libgstpnm.so</filename>
<basename>libgstpnm.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-rawparse.xml b/docs/plugins/inspect/plugin-rawparse.xml
index daa3a6c1..181a5ce4 100644
--- a/docs/plugins/inspect/plugin-rawparse.xml
+++ b/docs/plugins/inspect/plugin-rawparse.xml
@@ -3,7 +3,7 @@
<description>Parses byte streams into raw frames</description>
<filename>../../gst/rawparse/.libs/libgstrawparse.so</filename>
<basename>libgstrawparse.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-removesilence.xml b/docs/plugins/inspect/plugin-removesilence.xml
index fc279cb5..8d9d800d 100644
--- a/docs/plugins/inspect/plugin-removesilence.xml
+++ b/docs/plugins/inspect/plugin-removesilence.xml
@@ -3,7 +3,7 @@
<description>Removes silence from an audio stream</description>
<filename>../../gst/removesilence/.libs/libgstremovesilence.so</filename>
<basename>libgstremovesilence.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-resindvd.xml b/docs/plugins/inspect/plugin-resindvd.xml
index a12da185..840fddaa 100644
--- a/docs/plugins/inspect/plugin-resindvd.xml
+++ b/docs/plugins/inspect/plugin-resindvd.xml
@@ -3,7 +3,7 @@
<description>Resin DVD playback elements</description>
<filename>../../ext/resindvd/.libs/libgstresindvd.so</filename>
<basename>libgstresindvd.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>GPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer</package>
diff --git a/docs/plugins/inspect/plugin-rfbsrc.xml b/docs/plugins/inspect/plugin-rfbsrc.xml
index a448d105..da41ec56 100644
--- a/docs/plugins/inspect/plugin-rfbsrc.xml
+++ b/docs/plugins/inspect/plugin-rfbsrc.xml
@@ -3,7 +3,7 @@
<description>Connects to a VNC server and decodes RFB stream</description>
<filename>../../gst/librfb/.libs/libgstrfbsrc.so</filename>
<basename>libgstrfbsrc.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-rsvg.xml b/docs/plugins/inspect/plugin-rsvg.xml
index fcc4d721..25d2e04a 100644
--- a/docs/plugins/inspect/plugin-rsvg.xml
+++ b/docs/plugins/inspect/plugin-rsvg.xml
@@ -3,10 +3,10 @@
<description>RSVG plugin library</description>
<filename>../../ext/rsvg/.libs/libgstrsvg.so</filename>
<basename>libgstrsvg.so</basename>
- <version>1.3.0.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
- <package>GStreamer Bad Plug-ins git</package>
+ <package>GStreamer Bad Plug-ins source release</package>
<origin>Unknown package origin</origin>
<elements>
<element>
diff --git a/docs/plugins/inspect/plugin-sbc.xml b/docs/plugins/inspect/plugin-sbc.xml
index 33a2a773..732ed7d3 100644
--- a/docs/plugins/inspect/plugin-sbc.xml
+++ b/docs/plugins/inspect/plugin-sbc.xml
@@ -3,10 +3,10 @@
<description>SBC bluetooth audio support</description>
<filename>../../ext/sbc/.libs/libgstsbc.so</filename>
<basename>libgstsbc.so</basename>
- <version>1.3.0.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
- <package>GStreamer Bad Plug-ins git</package>
+ <package>GStreamer Bad Plug-ins source release</package>
<origin>Unknown package origin</origin>
<elements>
<element>
diff --git a/docs/plugins/inspect/plugin-schro.xml b/docs/plugins/inspect/plugin-schro.xml
index 765cd184..278d7212 100644
--- a/docs/plugins/inspect/plugin-schro.xml
+++ b/docs/plugins/inspect/plugin-schro.xml
@@ -3,10 +3,10 @@
<description>Schroedinger plugin</description>
<filename>../../ext/schroedinger/.libs/libgstschro.so</filename>
<basename>libgstschro.so</basename>
- <version>1.3.0.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
- <package>GStreamer Bad Plug-ins git</package>
+ <package>GStreamer Bad Plug-ins source release</package>
<origin>Unknown package origin</origin>
<elements>
<element>
diff --git a/docs/plugins/inspect/plugin-sdp.xml b/docs/plugins/inspect/plugin-sdp.xml
index 54151a5a..45aba364 100644
--- a/docs/plugins/inspect/plugin-sdp.xml
+++ b/docs/plugins/inspect/plugin-sdp.xml
@@ -3,7 +3,7 @@
<description>configure streaming sessions using SDP</description>
<filename>../../gst/sdp/.libs/libgstsdpelem.so</filename>
<basename>libgstsdpelem.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-segmentclip.xml b/docs/plugins/inspect/plugin-segmentclip.xml
index 7e117ca1..decfa34c 100644
--- a/docs/plugins/inspect/plugin-segmentclip.xml
+++ b/docs/plugins/inspect/plugin-segmentclip.xml
@@ -3,7 +3,7 @@
<description>Segment clip elements</description>
<filename>../../gst/segmentclip/.libs/libgstsegmentclip.so</filename>
<basename>libgstsegmentclip.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-shm.xml b/docs/plugins/inspect/plugin-shm.xml
index a35bcc99..9089e872 100644
--- a/docs/plugins/inspect/plugin-shm.xml
+++ b/docs/plugins/inspect/plugin-shm.xml
@@ -3,7 +3,7 @@
<description>shared memory sink source</description>
<filename>../../sys/shm/.libs/libgstshm.so</filename>
<basename>libgstshm.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-smooth.xml b/docs/plugins/inspect/plugin-smooth.xml
index 7ab94781..17ed22a2 100644
--- a/docs/plugins/inspect/plugin-smooth.xml
+++ b/docs/plugins/inspect/plugin-smooth.xml
@@ -3,7 +3,7 @@
<description>Apply a smooth filter to an image</description>
<filename>../../gst/smooth/.libs/libgstsmooth.so</filename>
<basename>libgstsmooth.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-smoothstreaming.xml b/docs/plugins/inspect/plugin-smoothstreaming.xml
index 5a48d89a..f8d63361 100644
--- a/docs/plugins/inspect/plugin-smoothstreaming.xml
+++ b/docs/plugins/inspect/plugin-smoothstreaming.xml
@@ -3,10 +3,10 @@
<description>Microsoft&apos;s Smooth Streaming format support </description>
<filename>../../ext/smoothstreaming/.libs/libgstsmoothstreaming.so</filename>
<basename>libgstsmoothstreaming.so</basename>
- <version>1.3.0.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
- <package>GStreamer Bad Plug-ins git</package>
+ <package>GStreamer Bad Plug-ins source release</package>
<origin>Unknown package origin</origin>
<elements>
<element>
diff --git a/docs/plugins/inspect/plugin-sndfile.xml b/docs/plugins/inspect/plugin-sndfile.xml
index fac17dc7..b5a149a9 100644
--- a/docs/plugins/inspect/plugin-sndfile.xml
+++ b/docs/plugins/inspect/plugin-sndfile.xml
@@ -3,10 +3,10 @@
<description>use libsndfile to read and write various audio formats</description>
<filename>../../ext/sndfile/.libs/libgstsndfile.so</filename>
<basename>libgstsndfile.so</basename>
- <version>1.3.0.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
- <package>GStreamer Bad Plug-ins git</package>
+ <package>GStreamer Bad Plug-ins source release</package>
<origin>Unknown package origin</origin>
<elements>
<element>
diff --git a/docs/plugins/inspect/plugin-soundtouch.xml b/docs/plugins/inspect/plugin-soundtouch.xml
index bf48fe2e..fd41c616 100644
--- a/docs/plugins/inspect/plugin-soundtouch.xml
+++ b/docs/plugins/inspect/plugin-soundtouch.xml
@@ -3,10 +3,10 @@
<description>Audio Pitch Controller &amp; BPM Detection</description>
<filename>../../ext/soundtouch/.libs/libgstsoundtouch.so</filename>
<basename>libgstsoundtouch.so</basename>
- <version>1.3.0.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
- <package>GStreamer Bad Plug-ins git</package>
+ <package>GStreamer Bad Plug-ins source release</package>
<origin>Unknown package origin</origin>
<elements>
<element>
diff --git a/docs/plugins/inspect/plugin-spandsp.xml b/docs/plugins/inspect/plugin-spandsp.xml
index a6838006..3261c62b 100644
--- a/docs/plugins/inspect/plugin-spandsp.xml
+++ b/docs/plugins/inspect/plugin-spandsp.xml
@@ -3,10 +3,10 @@
<description>libspandsp plugin</description>
<filename>../../ext/spandsp/.libs/libgstspandsp.so</filename>
<basename>libgstspandsp.so</basename>
- <version>1.3.0.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
- <package>GStreamer Bad Plug-ins git</package>
+ <package>GStreamer Bad Plug-ins source release</package>
<origin>Unknown package origin</origin>
<elements>
<element>
diff --git a/docs/plugins/inspect/plugin-speed.xml b/docs/plugins/inspect/plugin-speed.xml
index 0a277b6d..d0bb0290 100644
--- a/docs/plugins/inspect/plugin-speed.xml
+++ b/docs/plugins/inspect/plugin-speed.xml
@@ -3,7 +3,7 @@
<description>Set speed/pitch on audio/raw streams (resampler)</description>
<filename>../../gst/speed/.libs/libgstspeed.so</filename>
<basename>libgstspeed.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-srtp.xml b/docs/plugins/inspect/plugin-srtp.xml
index 18e312d3..7c6c14df 100644
--- a/docs/plugins/inspect/plugin-srtp.xml
+++ b/docs/plugins/inspect/plugin-srtp.xml
@@ -3,7 +3,7 @@
<description>GStreamer SRTP</description>
<filename>../../ext/srtp/.libs/libgstsrtp.so</filename>
<basename>libgstsrtp.so</basename>
- <version>1.3.0.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer</package>
@@ -50,25 +50,25 @@
<author>Gabriel Millaire &lt;millaire.gabriel@collabora.com&gt;</author>
<pads>
<caps>
- <name>rtcp_sink_%d</name>
+ <name>rtcp_sink_%u</name>
<direction>sink</direction>
<presence>request</presence>
<details>application/x-rtcp</details>
</caps>
<caps>
- <name>rtp_sink_%d</name>
+ <name>rtp_sink_%u</name>
<direction>sink</direction>
<presence>request</presence>
<details>application/x-rtp</details>
</caps>
<caps>
- <name>rtcp_src_%d</name>
+ <name>rtcp_src_%u</name>
<direction>source</direction>
<presence>sometimes</presence>
<details>application/x-srtcp</details>
</caps>
<caps>
- <name>rtp_src_%d</name>
+ <name>rtp_src_%u</name>
<direction>source</direction>
<presence>sometimes</presence>
<details>application/x-srtp</details>
diff --git a/docs/plugins/inspect/plugin-stereo.xml b/docs/plugins/inspect/plugin-stereo.xml
index 45cc532d..2c9b8441 100644
--- a/docs/plugins/inspect/plugin-stereo.xml
+++ b/docs/plugins/inspect/plugin-stereo.xml
@@ -3,7 +3,7 @@
<description>Muck with the stereo signal, enhance it&apos;s &apos;stereo-ness&apos;</description>
<filename>../../gst/stereo/.libs/libgststereo.so</filename>
<basename>libgststereo.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-subenc.xml b/docs/plugins/inspect/plugin-subenc.xml
index 67d784ae..33049368 100644
--- a/docs/plugins/inspect/plugin-subenc.xml
+++ b/docs/plugins/inspect/plugin-subenc.xml
@@ -3,7 +3,7 @@
<description>subtitle encoders</description>
<filename>../../gst/subenc/.libs/libgstsubenc.so</filename>
<basename>libgstsubenc.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-uvch264.xml b/docs/plugins/inspect/plugin-uvch264.xml
index bfd3fc3c..47ec193a 100644
--- a/docs/plugins/inspect/plugin-uvch264.xml
+++ b/docs/plugins/inspect/plugin-uvch264.xml
@@ -3,7 +3,7 @@
<description>UVC compliant H264 encoding cameras plugin</description>
<filename>../../sys/uvch264/.libs/libgstuvch264.so</filename>
<basename>libgstuvch264.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-vdpau.xml b/docs/plugins/inspect/plugin-vdpau.xml
index 5929c86c..d70cfe1f 100644
--- a/docs/plugins/inspect/plugin-vdpau.xml
+++ b/docs/plugins/inspect/plugin-vdpau.xml
@@ -3,7 +3,7 @@
<description>Various elements utilizing VDPAU</description>
<filename>../../sys/vdpau/.libs/libgstvdpau.so</filename>
<basename>libgstvdpau.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer</package>
diff --git a/docs/plugins/inspect/plugin-videofiltersbad.xml b/docs/plugins/inspect/plugin-videofiltersbad.xml
index fe26d3c7..81c4b779 100644
--- a/docs/plugins/inspect/plugin-videofiltersbad.xml
+++ b/docs/plugins/inspect/plugin-videofiltersbad.xml
@@ -3,7 +3,7 @@
<description>Video filters in gst-plugins-bad</description>
<filename>../../gst/videofilters/.libs/libgstvideofiltersbad.so</filename>
<basename>libgstvideofiltersbad.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins</package>
diff --git a/docs/plugins/inspect/plugin-videoparsersbad.xml b/docs/plugins/inspect/plugin-videoparsersbad.xml
index c7c19f61..2ed6fa4d 100644
--- a/docs/plugins/inspect/plugin-videoparsersbad.xml
+++ b/docs/plugins/inspect/plugin-videoparsersbad.xml
@@ -3,7 +3,7 @@
<description>videoparsers</description>
<filename>../../gst/videoparsers/.libs/libgstvideoparsersbad.so</filename>
<basename>libgstvideoparsersbad.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-videosignal.xml b/docs/plugins/inspect/plugin-videosignal.xml
index 887cb861..0822e751 100644
--- a/docs/plugins/inspect/plugin-videosignal.xml
+++ b/docs/plugins/inspect/plugin-videosignal.xml
@@ -3,7 +3,7 @@
<description>Various video signal analysers</description>
<filename>../../gst/videosignal/.libs/libgstvideosignal.so</filename>
<basename>libgstvideosignal.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-vmnc.xml b/docs/plugins/inspect/plugin-vmnc.xml
index 3dcb8f09..0e9bc6ed 100644
--- a/docs/plugins/inspect/plugin-vmnc.xml
+++ b/docs/plugins/inspect/plugin-vmnc.xml
@@ -3,7 +3,7 @@
<description>VmWare Video Codec plugins</description>
<filename>../../gst/vmnc/.libs/libgstvmnc.so</filename>
<basename>libgstvmnc.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-voaacenc.xml b/docs/plugins/inspect/plugin-voaacenc.xml
index c778182f..38d72e31 100644
--- a/docs/plugins/inspect/plugin-voaacenc.xml
+++ b/docs/plugins/inspect/plugin-voaacenc.xml
@@ -3,7 +3,7 @@
<description>AAC audio encoder</description>
<filename>../../ext/voaacenc/.libs/libgstvoaacenc.so</filename>
<basename>libgstvoaacenc.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-voamrwbenc.xml b/docs/plugins/inspect/plugin-voamrwbenc.xml
index 617dc29e..20c5bf01 100644
--- a/docs/plugins/inspect/plugin-voamrwbenc.xml
+++ b/docs/plugins/inspect/plugin-voamrwbenc.xml
@@ -3,7 +3,7 @@
<description>Adaptive Multi-Rate Wide-Band Encoder</description>
<filename>../../ext/voamrwbenc/.libs/libgstvoamrwbenc.so</filename>
<basename>libgstvoamrwbenc.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>unknown</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-waylandsink.xml b/docs/plugins/inspect/plugin-waylandsink.xml
index de3c2ca0..750d11f6 100644
--- a/docs/plugins/inspect/plugin-waylandsink.xml
+++ b/docs/plugins/inspect/plugin-waylandsink.xml
@@ -3,7 +3,7 @@
<description>Wayland Video Sink</description>
<filename>../../ext/wayland/.libs/libgstwaylandsink.so</filename>
<basename>libgstwaylandsink.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-webp.xml b/docs/plugins/inspect/plugin-webp.xml
index 295cb96c..a3577a7b 100644
--- a/docs/plugins/inspect/plugin-webp.xml
+++ b/docs/plugins/inspect/plugin-webp.xml
@@ -3,10 +3,10 @@
<description>WebP plugin</description>
<filename>../../ext/webp/.libs/libgstwebp.so</filename>
<basename>libgstwebp.so</basename>
- <version>1.3.0.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
- <package>GStreamer Bad Plug-ins git</package>
+ <package>GStreamer Bad Plug-ins source release</package>
<origin>Unknown package origin</origin>
<elements>
<element>
diff --git a/docs/plugins/inspect/plugin-wildmidi.xml b/docs/plugins/inspect/plugin-wildmidi.xml
index 0d166be4..5f79cfa8 100644
--- a/docs/plugins/inspect/plugin-wildmidi.xml
+++ b/docs/plugins/inspect/plugin-wildmidi.xml
@@ -3,10 +3,10 @@
<description>Wildmidi Plugin</description>
<filename>../../ext/timidity/.libs/libgstwildmidi.so</filename>
<basename>libgstwildmidi.so</basename>
- <version>1.3.0.1</version>
+ <version>1.3.2</version>
<license>GPL</license>
<source>gst-plugins-bad</source>
- <package>GStreamer Bad Plug-ins git</package>
+ <package>GStreamer Bad Plug-ins source release</package>
<origin>Unknown package origin</origin>
<elements>
<element>
diff --git a/docs/plugins/inspect/plugin-y4mdec.xml b/docs/plugins/inspect/plugin-y4mdec.xml
index d2ef5615..7cee1f8d 100644
--- a/docs/plugins/inspect/plugin-y4mdec.xml
+++ b/docs/plugins/inspect/plugin-y4mdec.xml
@@ -3,7 +3,7 @@
<description>Demuxes/decodes YUV4MPEG streams</description>
<filename>../../gst/y4m/.libs/libgsty4mdec.so</filename>
<basename>libgsty4mdec.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins</package>
diff --git a/docs/plugins/inspect/plugin-yadif.xml b/docs/plugins/inspect/plugin-yadif.xml
index 7f413b57..b90f482f 100644
--- a/docs/plugins/inspect/plugin-yadif.xml
+++ b/docs/plugins/inspect/plugin-yadif.xml
@@ -3,7 +3,7 @@
<description>YADIF deinterlacing filter</description>
<filename>../../gst/yadif/.libs/libgstyadif.so</filename>
<basename>libgstyadif.so</basename>
- <version>1.3.1</version>
+ <version>1.3.2</version>
<license>GPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins</package>
diff --git a/docs/plugins/inspect/plugin-zbar.xml b/docs/plugins/inspect/plugin-zbar.xml
index 307e33bf..022e833e 100644
--- a/docs/plugins/inspect/plugin-zbar.xml
+++ b/docs/plugins/inspect/plugin-zbar.xml
@@ -3,10 +3,10 @@
<description>zbar barcode scanner</description>
<filename>../../ext/zbar/.libs/libgstzbar.so</filename>
<basename>libgstzbar.so</basename>
- <version>1.3.0.1</version>
+ <version>1.3.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
- <package>GStreamer Bad Plug-ins git</package>
+ <package>GStreamer Bad Plug-ins source release</package>
<origin>Unknown package origin</origin>
<elements>
<element>
diff --git a/ext/assrender/gstassrender.c b/ext/assrender/gstassrender.c
index a04d94e5..68462ca1 100644
--- a/ext/assrender/gstassrender.c
+++ b/ext/assrender/gstassrender.c
@@ -521,7 +521,9 @@ gst_ass_render_add_feature_and_intersect (GstCaps * caps,
caps_size = gst_caps_get_size (new_caps);
for (i = 0; i < caps_size; i++) {
GstCapsFeatures *features = gst_caps_get_features (new_caps, i);
- gst_caps_features_add (features, feature);
+ if (!gst_caps_features_is_any (features)) {
+ gst_caps_features_add (features, feature);
+ }
}
gst_caps_append (new_caps, gst_caps_intersect_full (caps,
diff --git a/ext/curl/gstcurlsshsink.c b/ext/curl/gstcurlsshsink.c
index 91f05f98..b4c6b779 100644
--- a/ext/curl/gstcurlsshsink.c
+++ b/ext/curl/gstcurlsshsink.c
@@ -48,8 +48,6 @@
/* Default values */
#define GST_CAT_DEFAULT gst_curl_ssh_sink_debug
-#define DEFAULT_INSECURE TRUE
-
/* Plugin specific settings */
@@ -63,6 +61,7 @@ enum
PROP_SSH_PRIV_KEYFILE,
PROP_SSH_KEY_PASSPHRASE,
PROP_SSH_KNOWNHOSTS,
+ PROP_SSH_HOST_PUBLIC_KEY_MD5,
PROP_SSH_ACCEPT_UNKNOWNHOST
};
@@ -159,6 +158,13 @@ gst_curl_ssh_sink_class_init (GstCurlSshSinkClass * klass)
"The complete path & filename of the SSH 'known_hosts' file",
NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (gobject_class, PROP_SSH_HOST_PUBLIC_KEY_MD5,
+ g_param_spec_string ("ssh-host-pubkey-md5",
+ "MD5 checksum of the remote host's public key",
+ "MD5 checksum (32 hexadecimal digits, case-insensitive) of the "
+ "remote host's public key",
+ NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
g_object_class_install_property (gobject_class, PROP_SSH_ACCEPT_UNKNOWNHOST,
g_param_spec_boolean ("ssh-accept-unknownhost",
"SSH accept unknown host",
@@ -174,6 +180,7 @@ gst_curl_ssh_sink_init (GstCurlSshSink * sink)
sink->ssh_priv_keyfile = NULL;
sink->ssh_key_passphrase = NULL;
sink->ssh_knownhosts = NULL;
+ sink->ssh_host_public_key_md5 = NULL;
sink->ssh_accept_unknownhost = FALSE;
}
@@ -188,6 +195,7 @@ gst_curl_ssh_sink_finalize (GObject * gobject)
g_free (this->ssh_priv_keyfile);
g_free (this->ssh_key_passphrase);
g_free (this->ssh_knownhosts);
+ g_free (this->ssh_host_public_key_md5);
G_OBJECT_CLASS (parent_class)->finalize (gobject);
}
@@ -242,6 +250,13 @@ gst_curl_ssh_sink_set_property (GObject * object, guint prop_id,
GST_DEBUG_OBJECT (sink, "ssh_knownhosts set to %s", sink->ssh_knownhosts);
break;
+ case PROP_SSH_HOST_PUBLIC_KEY_MD5:
+ g_free (sink->ssh_host_public_key_md5);
+ sink->ssh_host_public_key_md5 = g_value_dup_string (value);
+ GST_DEBUG_OBJECT (sink, "ssh_host_public_key_md5 set to %s",
+ sink->ssh_host_public_key_md5);
+ break;
+
case PROP_SSH_ACCEPT_UNKNOWNHOST:
sink->ssh_accept_unknownhost = g_value_get_boolean (value);
GST_DEBUG_OBJECT (sink, "ssh_accept_unknownhost set to %d",
@@ -285,6 +300,10 @@ gst_curl_ssh_sink_get_property (GObject * object, guint prop_id,
g_value_set_string (value, sink->ssh_knownhosts);
break;
+ case PROP_SSH_HOST_PUBLIC_KEY_MD5:
+ g_value_set_string (value, sink->ssh_host_public_key_md5);
+ break;
+
case PROP_SSH_ACCEPT_UNKNOWNHOST:
g_value_set_boolean (value, sink->ssh_accept_unknownhost);
break;
@@ -299,14 +318,14 @@ static gboolean
gst_curl_ssh_sink_set_options_unlocked (GstCurlBaseSink * bcsink)
{
GstCurlSshSink *sink = GST_CURL_SSH_SINK (bcsink);
- gint curl_err = CURLE_OK;
+ CURLcode curl_err = CURLE_OK;
/* set SSH specific options here */
if (sink->ssh_pub_keyfile) {
if ((curl_err = curl_easy_setopt (bcsink->curl, CURLOPT_SSH_PUBLIC_KEYFILE,
sink->ssh_pub_keyfile)) != CURLE_OK) {
- GST_ERROR_OBJECT (sink, "curl error: %d setting public key file: %s.",
- curl_err, sink->ssh_pub_keyfile);
+ bcsink->error = g_strdup_printf ("failed to set public key file: %s",
+ curl_easy_strerror (curl_err));
return FALSE;
}
}
@@ -314,8 +333,8 @@ gst_curl_ssh_sink_set_options_unlocked (GstCurlBaseSink * bcsink)
if (sink->ssh_priv_keyfile) {
if ((curl_err = curl_easy_setopt (bcsink->curl, CURLOPT_SSH_PRIVATE_KEYFILE,
sink->ssh_priv_keyfile)) != CURLE_OK) {
- GST_ERROR_OBJECT (sink, "curl error: %d setting private key file: %s.",
- curl_err, sink->ssh_priv_keyfile);
+ bcsink->error = g_strdup_printf ("failed to set private key file: %s",
+ curl_easy_strerror (curl_err));
return FALSE;
}
}
@@ -323,8 +342,27 @@ gst_curl_ssh_sink_set_options_unlocked (GstCurlBaseSink * bcsink)
if (sink->ssh_knownhosts) {
if ((curl_err = curl_easy_setopt (bcsink->curl, CURLOPT_SSH_KNOWNHOSTS,
sink->ssh_knownhosts)) != CURLE_OK) {
- GST_ERROR_OBJECT (sink, "curl error: %d setting known_hosts file: %s.",
- curl_err, sink->ssh_knownhosts);
+ bcsink->error = g_strdup_printf ("failed to set known_hosts file: %s",
+ curl_easy_strerror (curl_err));
+ return FALSE;
+ }
+ }
+
+ if (sink->ssh_host_public_key_md5) {
+ /* libcurl is freaking tricky. If the input string is not exactly 32
+ * hexdigits long it silently ignores CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 and
+ * performs the transfer without authenticating the server! */
+ if (strlen (sink->ssh_host_public_key_md5) != 32) {
+ bcsink->error = g_strdup ("MD5-hash string has invalid length, "
+ "must be exactly 32 hexdigits!");
+ return FALSE;
+ }
+
+ if ((curl_err =
+ curl_easy_setopt (bcsink->curl, CURLOPT_SSH_HOST_PUBLIC_KEY_MD5,
+ sink->ssh_host_public_key_md5)) != CURLE_OK) {
+ bcsink->error = g_strdup_printf ("failed to set remote host's public "
+ "key MD5: %s", curl_easy_strerror (curl_err));
return FALSE;
}
}
@@ -337,8 +375,8 @@ gst_curl_ssh_sink_set_options_unlocked (GstCurlBaseSink * bcsink)
/* set the SSH_AUTH_TYPE */
if ((curl_err = curl_easy_setopt (bcsink->curl, CURLOPT_SSH_AUTH_TYPES,
sink->ssh_auth_type)) != CURLE_OK) {
- GST_ERROR_OBJECT (sink, "curl error: %d setting auth type: %d.", curl_err,
- sink->ssh_auth_type);
+ bcsink->error = g_strdup_printf ("failed to set authentication type: %s",
+ curl_easy_strerror (curl_err));
return FALSE;
}
@@ -347,9 +385,8 @@ gst_curl_ssh_sink_set_options_unlocked (GstCurlBaseSink * bcsink)
if (sink->ssh_key_passphrase) {
if ((curl_err = curl_easy_setopt (bcsink->curl, CURLOPT_KEYPASSWD,
sink->ssh_key_passphrase)) != CURLE_OK) {
- GST_ERROR_OBJECT (sink,
- "curl error: %d setting private key passphrase: %s.", curl_err,
- sink->ssh_key_passphrase);
+ bcsink->error = g_strdup_printf ("failed to set private key "
+ "passphrase: %s", curl_easy_strerror (curl_err));
return FALSE;
}
} else {
@@ -362,8 +399,8 @@ gst_curl_ssh_sink_set_options_unlocked (GstCurlBaseSink * bcsink)
}
} else {
- GST_ERROR_OBJECT (sink, "Error: unsupported authentication type: %d.",
- sink->ssh_auth_type);
+ bcsink->error = g_strdup_printf ("Error: unsupported authentication type: "
+ "%d.", sink->ssh_auth_type);
return FALSE;
}
@@ -372,8 +409,8 @@ gst_curl_ssh_sink_set_options_unlocked (GstCurlBaseSink * bcsink)
* is also set! */
if ((curl_err = curl_easy_setopt (bcsink->curl, CURLOPT_SSH_KEYFUNCTION,
curl_ssh_sink_sshkey_cb)) != CURLE_OK) {
- GST_ERROR_OBJECT (sink, "curl error: %d setting CURLOPT_SSH_KEYFUNCTION.",
- curl_err);
+ bcsink->error = g_strdup_printf ("failed to set SSH_KEYFUNCTION callback: "
+ "%s", curl_easy_strerror (curl_err));
return FALSE;
} else {
/* SSH_KEYFUNCTION callback successfully installed so go on and
@@ -381,8 +418,9 @@ gst_curl_ssh_sink_set_options_unlocked (GstCurlBaseSink * bcsink)
if ((curl_err =
curl_easy_setopt (bcsink->curl, CURLOPT_SSH_KEYDATA,
sink)) != CURLE_OK) {
- GST_ERROR_OBJECT (sink, "curl error: %d setting CURLOPT_SSH_KEYDATA.",
- curl_err);
+ bcsink->error = g_strdup_printf ("failed to set CURLOPT_SSH_KEYDATA: %s",
+ curl_easy_strerror (curl_err));
+ return FALSE;
}
}
@@ -445,8 +483,8 @@ curl_ssh_sink_sshkey_cb (CURL * easy_handle, /* easy handle */
default:
/* something went wrong, we got some bogus key match result */
- GST_ERROR_OBJECT (sink,
- "libcurl internal error encountered during known_host matching");
+ GST_CURL_BASE_SINK (sink)->error =
+ g_strdup ("libcurl internal error during known_host matching");
break;
}
diff --git a/ext/curl/gstcurlsshsink.h b/ext/curl/gstcurlsshsink.h
index 4e502a3d..1b56c4d5 100644
--- a/ext/curl/gstcurlsshsink.h
+++ b/ext/curl/gstcurlsshsink.h
@@ -70,6 +70,8 @@ struct _GstCurlSshSink
CURLOPT_SSH_KNOWN_HOSTS */
gboolean ssh_accept_unknownhost; /* accept or reject unknown public key
from remote host */
+ gchar *ssh_host_public_key_md5; /* MD5-hash of the remote host's public key:
+ CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 */
};
struct _GstCurlSshSinkClass
diff --git a/ext/dash/Makefile.am b/ext/dash/Makefile.am
index b6e54467..97d8623e 100644
--- a/ext/dash/Makefile.am
+++ b/ext/dash/Makefile.am
@@ -4,14 +4,12 @@ plugin_LTLIBRARIES = libgstdashdemux.la
libgstdashdemux_la_SOURCES = \
gstmpdparser.c \
gstdashdemux.c \
- gstplugin.c \
- gstdownloadrate.c
+ gstplugin.c
# headers we need but don't want installed
noinst_HEADERS = \
gstmpdparser.h \
gstdashdemux.h \
- gstdownloadrate.h \
gstdash_debug.h
# compiler and linker flags used to compile this plugin, set in configure.ac
diff --git a/ext/dash/Makefile.in b/ext/dash/Makefile.in
index 23e4f2a3..d891907f 100644
--- a/ext/dash/Makefile.in
+++ b/ext/dash/Makefile.in
@@ -159,8 +159,7 @@ libgstdashdemux_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/uridownloader/lib
$(am__DEPENDENCIES_1)
am_libgstdashdemux_la_OBJECTS = libgstdashdemux_la-gstmpdparser.lo \
libgstdashdemux_la-gstdashdemux.lo \
- libgstdashdemux_la-gstplugin.lo \
- libgstdashdemux_la-gstdownloadrate.lo
+ libgstdashdemux_la-gstplugin.lo
libgstdashdemux_la_OBJECTS = $(am_libgstdashdemux_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -729,15 +728,13 @@ plugin_LTLIBRARIES = libgstdashdemux.la
libgstdashdemux_la_SOURCES = \
gstmpdparser.c \
gstdashdemux.c \
- gstplugin.c \
- gstdownloadrate.c
+ gstplugin.c
# headers we need but don't want installed
noinst_HEADERS = \
gstmpdparser.h \
gstdashdemux.h \
- gstdownloadrate.h \
gstdash_debug.h
@@ -829,7 +826,6 @@ distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstdashdemux_la-gstdashdemux.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstdashdemux_la-gstdownloadrate.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstdashdemux_la-gstmpdparser.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstdashdemux_la-gstplugin.Plo@am__quote@
@@ -878,13 +874,6 @@ libgstdashdemux_la-gstplugin.lo: gstplugin.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdashdemux_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdashdemux_la_CFLAGS) $(CFLAGS) -c -o libgstdashdemux_la-gstplugin.lo `test -f 'gstplugin.c' || echo '$(srcdir)/'`gstplugin.c
-libgstdashdemux_la-gstdownloadrate.lo: gstdownloadrate.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdashdemux_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdashdemux_la_CFLAGS) $(CFLAGS) -MT libgstdashdemux_la-gstdownloadrate.lo -MD -MP -MF $(DEPDIR)/libgstdashdemux_la-gstdownloadrate.Tpo -c -o libgstdashdemux_la-gstdownloadrate.lo `test -f 'gstdownloadrate.c' || echo '$(srcdir)/'`gstdownloadrate.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstdashdemux_la-gstdownloadrate.Tpo $(DEPDIR)/libgstdashdemux_la-gstdownloadrate.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstdownloadrate.c' object='libgstdashdemux_la-gstdownloadrate.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstdashdemux_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstdashdemux_la_CFLAGS) $(CFLAGS) -c -o libgstdashdemux_la-gstdownloadrate.lo `test -f 'gstdownloadrate.c' || echo '$(srcdir)/'`gstdownloadrate.c
-
mostlyclean-libtool:
-rm -f *.lo
diff --git a/ext/dash/gstdashdemux.c b/ext/dash/gstdashdemux.c
index 372fe439..02c4b625 100644
--- a/ext/dash/gstdashdemux.c
+++ b/ext/dash/gstdashdemux.c
@@ -180,7 +180,6 @@ enum
#define DEFAULT_MAX_BITRATE 24000000 /* in bit/s */
#define DEFAULT_FAILED_COUNT 3
-#define DOWNLOAD_RATE_HISTORY_MAX 3
#define GST_DASH_DEMUX_CLIENT_LOCK(d) g_mutex_lock (&d->client_lock)
#define GST_DASH_DEMUX_CLIENT_UNLOCK(d) g_mutex_unlock (&d->client_lock)
@@ -196,6 +195,9 @@ static void gst_dash_demux_dispose (GObject * obj);
static GstStateChangeReturn
gst_dash_demux_change_state (GstElement * element, GstStateChange transition);
+/* GstBin */
+static void gst_dash_demux_handle_message (GstBin * bin, GstMessage * msg);
+
/* GstDashDemux */
static GstFlowReturn gst_dash_demux_pad (GstPad * pad, GstObject * parent,
GstBuffer * buf);
@@ -218,6 +220,8 @@ static GstFlowReturn gst_dash_demux_stream_get_next_fragment (GstDashDemuxStream
static gboolean gst_dash_demux_advance_period (GstDashDemux * demux);
static void gst_dash_demux_download_wait (GstDashDemuxStream * stream,
GstClockTime time_diff);
+static void gst_dash_demux_stream_download_uri (GstDashDemux * demux,
+ GstDashDemuxStream * stream, const gchar * uri, gint64 start, gint64 end);
static void gst_dash_demux_expose_streams (GstDashDemux * demux);
static void gst_dash_demux_remove_streams (GstDashDemux * demux,
@@ -226,10 +230,11 @@ static void gst_dash_demux_stream_free (GstDashDemuxStream * stream);
static void gst_dash_demux_reset (GstDashDemux * demux, gboolean dispose);
static GstCaps *gst_dash_demux_get_input_caps (GstDashDemux * demux,
GstActiveStream * stream);
-static GstPad *gst_dash_demux_create_pad (GstDashDemux * demux);
+static GstPad *gst_dash_demux_create_pad (GstDashDemux * demux,
+ GstDashDemuxStream * stream);
#define gst_dash_demux_parent_class parent_class
-G_DEFINE_TYPE_WITH_CODE (GstDashDemux, gst_dash_demux, GST_TYPE_ELEMENT,
+G_DEFINE_TYPE_WITH_CODE (GstDashDemux, gst_dash_demux, GST_TYPE_BIN,
GST_DEBUG_CATEGORY_INIT (gst_dash_demux_debug, "dashdemux", 0,
"dashdemux element");
);
@@ -256,9 +261,11 @@ gst_dash_demux_class_init (GstDashDemuxClass * klass)
{
GObjectClass *gobject_class;
GstElementClass *gstelement_class;
+ GstBinClass *gstbin_class;
gobject_class = (GObjectClass *) klass;
gstelement_class = (GstElementClass *) klass;
+ gstbin_class = (GstBinClass *) klass;
gobject_class->set_property = gst_dash_demux_set_property;
gobject_class->get_property = gst_dash_demux_get_property;
@@ -266,7 +273,8 @@ gst_dash_demux_class_init (GstDashDemuxClass * klass)
g_object_class_install_property (gobject_class, PROP_MAX_BUFFERING_TIME,
g_param_spec_uint ("max-buffering-time", "Maximum buffering time",
- "Maximum number of seconds of buffer accumulated during playback",
+ "Maximum number of seconds of buffer accumulated during playback"
+ "(deprecated)",
2, G_MAXUINT, DEFAULT_MAX_BUFFERING_TIME,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
@@ -299,6 +307,8 @@ gst_dash_demux_class_init (GstDashDemuxClass * klass)
"David Corvoysier <david.corvoysier@orange.com>\n\
Hamid Zakari <hamid.zakari@gmail.com>\n\
Gianluca Gennari <gennarone@gmail.com>");
+
+ gstbin_class->handle_message = gst_dash_demux_handle_message;
}
static void
@@ -397,6 +407,48 @@ gst_dash_demux_change_state (GstElement * element, GstStateChange transition)
return ret;
}
+static void
+gst_dash_demux_handle_message (GstBin * bin, GstMessage * msg)
+{
+ GstDashDemux *demux = GST_DASH_DEMUX_CAST (bin);
+
+ switch (GST_MESSAGE_TYPE (msg)) {
+ case GST_MESSAGE_ERROR:{
+ GSList *iter;
+ GstDashDemuxStream *stream;
+ GError *err = NULL;
+ gchar *debug = NULL;
+
+ for (iter = demux->streams; iter; iter = g_slist_next (iter)) {
+ stream = iter->data;
+ if (GST_OBJECT_CAST (stream->src) == GST_MESSAGE_SRC (msg)) {
+ gst_message_parse_error (msg, &err, &debug);
+
+ GST_WARNING_OBJECT (stream->pad, "Source posted error: %d:%d %s (%s)",
+ err->domain, err->code, err->message, debug);
+
+ /* error, but ask to retry */
+ stream->last_ret = GST_FLOW_CUSTOM_ERROR;
+ g_cond_signal (&stream->fragment_download_cond);
+
+ g_error_free (err);
+ g_free (debug);
+ break;
+ }
+ }
+
+ gst_message_unref (msg);
+ msg = NULL;
+ }
+ break;
+ default:
+ break;
+ }
+
+ if (msg)
+ GST_BIN_CLASS (parent_class)->handle_message (bin, msg);
+}
+
static gboolean
gst_dash_demux_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
@@ -528,7 +580,6 @@ gst_dash_demux_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
for (iter = demux->streams; iter; iter = g_slist_next (iter)) {
GstDashDemuxStream *stream = iter->data;
stream->last_ret = GST_FLOW_OK;
- gst_uri_downloader_reset (stream->downloader);
}
demux->timestamp_offset = 0;
gst_uri_downloader_reset (demux->downloader);
@@ -562,6 +613,13 @@ gst_dash_demux_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
GST_DASH_DEMUX_CLIENT_UNLOCK (demux);
}
break;
+ case GST_EVENT_LATENCY:{
+ /* Upstream and our internal source are irrelevant
+ * for latency, and we should not fail here to
+ * configure the latency */
+ gst_event_unref (event);
+ return TRUE;
+ }
default:
break;
}
@@ -652,18 +710,18 @@ gst_dash_demux_setup_all_streams (GstDashDemux * demux)
gst_task_set_lock (stream->download_task, &stream->download_task_lock);
g_cond_init (&stream->download_cond);
g_mutex_init (&stream->download_mutex);
- stream->downloader = gst_uri_downloader_new ();
+ stream->download_total_time = 0;
+ stream->download_total_bytes = 0;
stream->index = i;
stream->input_caps = caps;
stream->need_header = TRUE;
- gst_download_rate_init (&stream->dnl_rate);
- gst_download_rate_set_max_length (&stream->dnl_rate,
- DOWNLOAD_RATE_HISTORY_MAX);
+ g_cond_init (&stream->fragment_download_cond);
+ g_mutex_init (&stream->fragment_download_lock);
GST_LOG_OBJECT (demux, "Creating stream %d %" GST_PTR_FORMAT, i, caps);
streams = g_slist_prepend (streams, stream);
- stream->pad = gst_dash_demux_create_pad (demux);
+ stream->pad = gst_dash_demux_create_pad (demux, stream);
stream_id =
gst_pad_create_stream_id_printf (stream->pad,
@@ -958,6 +1016,7 @@ gst_dash_demux_wait_stop (GstDashDemux * demux)
GstDashDemuxStream *stream = iter->data;
gst_task_join (stream->download_task);
+ gst_element_set_state (stream->src, GST_STATE_NULL);
}
}
@@ -979,22 +1038,29 @@ gst_dash_demux_stop (GstDashDemux * demux)
stream->need_header = TRUE;
gst_task_stop (stream->download_task);
GST_TASK_SIGNAL (stream->download_task);
- gst_uri_downloader_cancel (stream->downloader);
+ gst_element_set_state (stream->src, GST_STATE_READY);
+ g_cond_signal (&stream->fragment_download_cond);
}
}
static GstPad *
-gst_dash_demux_create_pad (GstDashDemux * demux)
+gst_dash_demux_create_pad (GstDashDemux * demux, GstDashDemuxStream * stream)
{
GstPad *pad;
+ GstPadTemplate *tmpl;
+
+ tmpl = gst_static_pad_template_get (&srctemplate);
/* Create and activate new pads */
- pad = gst_pad_new_from_static_template (&srctemplate, NULL);
+ pad = gst_ghost_pad_new_no_target_from_template (NULL, tmpl);
+ gst_object_unref (tmpl);
+
gst_pad_set_event_function (pad,
GST_DEBUG_FUNCPTR (gst_dash_demux_src_event));
gst_pad_set_query_function (pad,
GST_DEBUG_FUNCPTR (gst_dash_demux_src_query));
- gst_pad_set_element_private (pad, demux);
+ gst_pad_set_element_private (pad, stream);
+
gst_pad_set_active (pad, TRUE);
GST_INFO_OBJECT (demux, "Creating srcpad %s:%s", GST_DEBUG_PAD_NAME (pad));
return pad;
@@ -1081,54 +1147,9 @@ gst_dash_demux_advance_period (GstDashDemux * demux)
return TRUE;
}
-static GstFlowReturn
-gst_dash_demux_push (GstDashDemuxStream * stream, GstBuffer * buffer)
-{
- GstDashDemux *demux = stream->demux;
- GstClockTime timestamp, duration;
- GstFlowReturn ret = GST_FLOW_OK;
-
- timestamp = GST_BUFFER_TIMESTAMP (buffer);
-
- if (stream->pending_segment) {
- if (demux->timestamp_offset == -1)
- demux->timestamp_offset = timestamp;
- else
- demux->timestamp_offset = MIN (timestamp, demux->timestamp_offset);
-
- /* And send a newsegment */
- gst_pad_push_event (stream->pad, stream->pending_segment);
- stream->pending_segment = NULL;
- }
-
- /* make timestamp start from 0 by subtracting the offset */
- timestamp -= demux->timestamp_offset;
- duration = GST_BUFFER_DURATION (buffer);
-
- GST_BUFFER_TIMESTAMP (buffer) = timestamp;
-
- GST_DEBUG_OBJECT (stream->pad,
- "Pushing fragment %p #%" G_GUINT64_FORMAT " (stream %d) ts:%"
- GST_TIME_FORMAT " dur:%" GST_TIME_FORMAT, buffer,
- GST_BUFFER_OFFSET (buffer), stream->index,
- GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)),
- GST_TIME_ARGS (GST_BUFFER_DURATION (buffer)));
- ret = gst_pad_push (stream->pad, gst_buffer_ref (buffer));
- GST_DEBUG_OBJECT (stream->pad, "Push result: %d %s", ret,
- gst_flow_get_name (ret));
-
- demux->segment.position = timestamp;
- stream->position = timestamp;
- if (GST_CLOCK_TIME_IS_VALID (duration))
- stream->position += duration;
-
- return ret;
-}
-
static void
gst_dash_demux_stream_free (GstDashDemuxStream * stream)
{
- gst_download_rate_deinit (&stream->dnl_rate);
if (stream->input_caps) {
gst_caps_unref (stream->input_caps);
stream->input_caps = NULL;
@@ -1148,10 +1169,20 @@ gst_dash_demux_stream_free (GstDashDemuxStream * stream)
g_cond_clear (&stream->download_cond);
g_mutex_clear (&stream->download_mutex);
- if (stream->downloader != NULL) {
- g_object_unref (stream->downloader);
+ if (stream->src_srcpad) {
+ gst_object_unref (stream->src_srcpad);
+ stream->src_srcpad = NULL;
+ }
+
+ if (stream->src) {
+ gst_element_set_state (stream->src, GST_STATE_NULL);
+ gst_bin_remove (GST_BIN_CAST (stream->demux), stream->src);
+ stream->src = NULL;
}
+ g_cond_clear (&stream->fragment_download_cond);
+ g_mutex_clear (&stream->fragment_download_lock);
+
g_free (stream);
}
@@ -1240,7 +1271,7 @@ gst_dash_demux_refresh_mpd (GstDashDemux * demux)
GST_DEBUG_OBJECT (demux, "Updating manifest file from URL %s",
demux->client->mpd_uri);
download = gst_uri_downloader_fetch_uri (demux->downloader,
- demux->client->mpd_uri, NULL, TRUE, TRUE, NULL);
+ demux->client->mpd_uri, NULL, TRUE, TRUE, TRUE, NULL);
if (download) {
GstMpdClient *new_client = NULL;
@@ -1611,7 +1642,7 @@ gst_dash_demux_stream_select_representation_unlocked (GstDashDemuxStream *
GList *rep_list = NULL;
gint new_index;
GstDashDemux *demux = stream->demux;
- guint64 bitrate;
+ guint64 bitrate = 0;
active_stream = stream->active_stream;
if (active_stream == NULL)
@@ -1623,11 +1654,29 @@ gst_dash_demux_stream_select_representation_unlocked (GstDashDemuxStream *
if (!rep_list)
return FALSE;
- bitrate =
- gst_download_rate_get_current_rate (&stream->dnl_rate) *
- demux->bandwidth_usage;
- GST_DEBUG_OBJECT (demux, "Trying to change to bitrate: %" G_GUINT64_FORMAT,
- bitrate);
+ /* compare the time when the fragment was downloaded with the time when it was
+ * scheduled */
+ if (stream->download_total_time)
+ bitrate =
+ (stream->download_total_bytes * 8) /
+ ((double) stream->download_total_time / G_GUINT64_CONSTANT (1000000));
+
+ GST_DEBUG_OBJECT (stream->pad,
+ "Downloaded %u bytes in %" GST_TIME_FORMAT ". Bitrate is : %d",
+ (guint) stream->download_total_bytes,
+ GST_TIME_ARGS (stream->download_total_time * GST_USECOND),
+ (gint) bitrate);
+
+ /* Take old rate into account too */
+ if (stream->current_download_rate != -1)
+ bitrate = (stream->current_download_rate + bitrate * 3) / 4;
+ if (bitrate > G_MAXINT)
+ bitrate = G_MAXINT;
+ stream->current_download_rate = bitrate;
+ bitrate *= demux->bandwidth_usage;
+
+ GST_DEBUG_OBJECT (stream->pad,
+ "Trying to change to bitrate: %" G_GUINT64_FORMAT, bitrate);
/* get representation index with current max_bandwidth */
new_index = gst_mpdparser_get_rep_idx_with_max_bandwidth (rep_list, bitrate);
@@ -1655,14 +1704,12 @@ gst_dash_demux_stream_select_representation_unlocked (GstDashDemuxStream *
return NULL;
}
-static GstBuffer *
+static void
gst_dash_demux_download_header_fragment (GstDashDemux * demux,
GstDashDemuxStream * stream, gchar * path, gint64 range_start,
gint64 range_end)
{
- GstBuffer *buffer = NULL;
gchar *next_header_uri;
- GstFragment *fragment;
if (strncmp (path, "http://", 7) != 0) {
next_header_uri =
@@ -1673,56 +1720,37 @@ gst_dash_demux_download_header_fragment (GstDashDemux * demux,
next_header_uri = path;
}
- fragment = gst_uri_downloader_fetch_uri_with_range (stream->downloader,
- next_header_uri, demux->client->mpd_uri, FALSE, FALSE, range_start,
- range_end, NULL);
+ gst_dash_demux_stream_download_uri (demux, stream, next_header_uri,
+ range_start, range_end);
g_free (next_header_uri);
- if (fragment) {
- buffer = gst_fragment_get_buffer (fragment);
- g_object_unref (fragment);
- }
- return buffer;
}
-static GstBuffer *
+static void
gst_dash_demux_get_next_header (GstDashDemux * demux,
GstDashDemuxStream * stream)
{
gchar *initializationURL;
- GstBuffer *header_buffer, *index_buffer = NULL;
gint64 range_start, range_end;
if (!gst_mpd_client_get_next_header (demux->client, &initializationURL,
stream->index, &range_start, &range_end))
- return NULL;
+ return;
GST_INFO_OBJECT (demux, "Fetching header %s %" G_GINT64_FORMAT "-%"
G_GINT64_FORMAT, initializationURL, range_start, range_end);
- header_buffer = gst_dash_demux_download_header_fragment (demux, stream,
+ gst_dash_demux_download_header_fragment (demux, stream,
initializationURL, range_start, range_end);
/* check if we have an index */
- if (header_buffer
+ if (!demux->cancelled && stream->last_ret == GST_FLOW_OK /* TODO check for other valid types */
&& gst_mpd_client_get_next_header_index (demux->client,
&initializationURL, stream->index, &range_start, &range_end)) {
GST_INFO_OBJECT (demux,
"Fetching index %s %" G_GINT64_FORMAT "-%" G_GINT64_FORMAT,
initializationURL, range_start, range_end);
- index_buffer =
- gst_dash_demux_download_header_fragment (demux, stream,
+ gst_dash_demux_download_header_fragment (demux, stream,
initializationURL, range_start, range_end);
}
-
- if (header_buffer == NULL) {
- GST_WARNING_OBJECT (demux, "Unable to fetch header");
- return NULL;
- }
-
- if (index_buffer) {
- header_buffer = gst_buffer_append (header_buffer, index_buffer);
- }
-
- return header_buffer;
}
static GstCaps *
@@ -1847,19 +1875,289 @@ gst_dash_demux_wait_for_fragment_to_be_available (GstDashDemux * demux,
}
}
-static GstBuffer *
+static GstFlowReturn
+_src_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
+{
+ GstPad *srcpad = (GstPad *) parent;
+ GstDashDemux *demux = (GstDashDemux *) GST_PAD_PARENT (srcpad);
+ GstDashDemuxStream *stream = gst_pad_get_element_private (srcpad);
+ GstFlowReturn ret;
+ gboolean discont = FALSE;
+
+ if (stream->starting_fragment) {
+ if (demux->segment.rate < 0)
+ /* Set DISCONT flag for every first buffer in reverse playback mode
+ * as each fragment for its own has to be reversed */
+ discont = TRUE;
+ stream->starting_fragment = FALSE;
+
+ GST_LOG_OBJECT (stream->pad, "set fragment pts=%" GST_TIME_FORMAT,
+ GST_TIME_ARGS (stream->current_fragment.timestamp));
+
+ GST_BUFFER_PTS (buffer) = stream->current_fragment.timestamp;
+
+ if (stream->pending_segment) {
+ if (demux->timestamp_offset == -1)
+ demux->timestamp_offset = GST_BUFFER_PTS (buffer);
+ else
+ demux->timestamp_offset =
+ MIN (GST_BUFFER_PTS (buffer), demux->timestamp_offset);
+
+ /* And send a newsegment */
+ gst_pad_push_event (stream->pad, stream->pending_segment);
+ stream->pending_segment = NULL;
+ }
+
+ /* make timestamp start from 0 by subtracting the offset */
+ GST_BUFFER_PTS (buffer) -= demux->timestamp_offset;
+
+ stream->position = demux->segment.position = GST_BUFFER_PTS (buffer);
+
+ } else {
+ GST_BUFFER_PTS (buffer) = GST_CLOCK_TIME_NONE;
+ }
+
+ if (discont) {
+ GST_DEBUG_OBJECT (stream->pad, "Marking fragment as discontinuous");
+ GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
+ } else {
+ GST_BUFFER_FLAG_UNSET (buffer, GST_BUFFER_FLAG_DISCONT);
+ }
+
+ GST_BUFFER_DURATION (buffer) = GST_CLOCK_TIME_NONE;
+ GST_BUFFER_DTS (buffer) = GST_CLOCK_TIME_NONE;
+ GST_BUFFER_OFFSET (buffer) =
+ gst_mpd_client_get_segment_index (stream->active_stream) - 1;
+
+ /* accumulate time and size to get this chunk */
+ stream->download_total_time +=
+ g_get_monotonic_time () - stream->download_start_time;
+ stream->download_total_bytes += gst_buffer_get_size (buffer);
+
+ ret = gst_proxy_pad_chain_default (pad, parent, buffer);
+ stream->download_start_time = g_get_monotonic_time ();
+ GST_LOG_OBJECT (pad, "Chain res: %d %s", ret, gst_flow_get_name (ret));
+
+ if (ret != GST_FLOW_OK) {
+ if (ret < GST_FLOW_EOS) {
+ GST_ELEMENT_ERROR (demux, STREAM, FAILED, (NULL),
+ ("stream stopped, reason %s", gst_flow_get_name (ret)));
+
+ /* TODO push this on all pads */
+ gst_pad_push_event (stream->pad, gst_event_new_eos ());
+ } else {
+ GST_DEBUG_OBJECT (stream->pad, "stream stopped, reason %s",
+ gst_flow_get_name (ret));
+ }
+
+ /* TODO properly stop tasks */
+ /* gst_hls_demux_pause_tasks (demux); */
+ }
+
+ /* avoid having the source handle the same error again */
+ stream->last_ret = ret;
+ ret = GST_FLOW_OK;
+
+ return ret;
+}
+
+static gboolean
+_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+ GstPad *srcpad = GST_PAD_CAST (parent);
+ GstDashDemuxStream *stream = gst_pad_get_element_private (srcpad);
+
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_EOS:
+ g_cond_signal (&stream->fragment_download_cond);
+ break;
+ default:
+ break;
+ }
+
+ gst_event_unref (event);
+
+ return TRUE;
+}
+
+static gboolean
+_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
+{
+ switch (GST_QUERY_TYPE (query)) {
+ case GST_QUERY_ALLOCATION:
+ return FALSE;
+ break;
+ default:
+ break;
+ }
+
+ return gst_pad_query_default (pad, parent, query);
+}
+
+static gboolean
+gst_dash_demux_stream_update_source (GstDashDemuxStream * stream,
+ const gchar * uri, const gchar * referer, gboolean refresh,
+ gboolean allow_cache)
+{
+ GstDashDemux *demux = stream->demux;
+
+ if (!gst_uri_is_valid (uri)) {
+ GST_WARNING_OBJECT (stream->pad, "Invalid URI: %s", uri);
+ stream->last_ret = GST_FLOW_ERROR;
+ return FALSE;
+ }
+
+ if (stream->src != NULL) {
+ gchar *old_protocol, *new_protocol;
+ gchar *old_uri;
+
+ old_uri = gst_uri_handler_get_uri (GST_URI_HANDLER (stream->src));
+ old_protocol = gst_uri_get_protocol (old_uri);
+ new_protocol = gst_uri_get_protocol (uri);
+
+ if (!g_str_equal (old_protocol, new_protocol)) {
+ gst_object_unref (stream->src_srcpad);
+ gst_element_set_state (stream->src, GST_STATE_NULL);
+ gst_bin_remove (GST_BIN_CAST (demux), stream->src);
+ stream->src = NULL;
+ stream->src_srcpad = NULL;
+ GST_DEBUG_OBJECT (demux, "Can't re-use old source element");
+ } else {
+ GError *err = NULL;
+
+ GST_DEBUG_OBJECT (demux, "Re-using old source element");
+ if (!gst_uri_handler_set_uri (GST_URI_HANDLER (stream->src), uri, &err)) {
+ GST_DEBUG_OBJECT (demux, "Failed to re-use old source element: %s",
+ err->message);
+ g_clear_error (&err);
+ gst_element_set_state (stream->src, GST_STATE_NULL);
+ gst_bin_remove (GST_BIN_CAST (demux), stream->src);
+ stream->src = NULL;
+ }
+ }
+ g_free (old_uri);
+ g_free (old_protocol);
+ g_free (new_protocol);
+ }
+
+ if (stream->src == NULL) {
+ GObjectClass *gobject_class;
+ GstPad *internal_pad;
+
+ stream->src = gst_element_make_from_uri (GST_URI_SRC, uri, NULL, NULL);
+ if (stream->src == NULL) {
+ GST_ELEMENT_ERROR (demux, CORE, MISSING_PLUGIN,
+ ("Missing plugin to handle URI: '%s'", uri), (NULL));
+ return FALSE;
+ }
+
+ gobject_class = G_OBJECT_GET_CLASS (stream->src);
+
+ if (g_object_class_find_property (gobject_class, "compress"))
+ g_object_set (stream->src, "compress", FALSE, NULL);
+ if (g_object_class_find_property (gobject_class, "keep-alive"))
+ g_object_set (stream->src, "keep-alive", TRUE, NULL);
+ if (g_object_class_find_property (gobject_class, "extra-headers")) {
+ if (referer || refresh || !allow_cache) {
+ GstStructure *extra_headers = gst_structure_new_empty ("headers");
+
+ if (referer)
+ gst_structure_set (extra_headers, "Referer", G_TYPE_STRING, referer,
+ NULL);
+
+ if (!allow_cache)
+ gst_structure_set (extra_headers, "Cache-Control", G_TYPE_STRING,
+ "no-cache", NULL);
+ else if (refresh)
+ gst_structure_set (extra_headers, "Cache-Control", G_TYPE_STRING,
+ "max-age=0", NULL);
+
+ g_object_set (stream->src, "extra-headers", extra_headers, NULL);
+
+ gst_structure_free (extra_headers);
+ } else {
+ g_object_set (stream->src, "extra-headers", NULL, NULL);
+ }
+ }
+
+ gst_element_set_locked_state (stream->src, TRUE);
+ gst_bin_add (GST_BIN_CAST (demux), stream->src);
+ stream->src_srcpad = gst_element_get_static_pad (stream->src, "src");
+
+ gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (stream->pad),
+ stream->src_srcpad);
+
+ /* set up our internal pad to drop all events from
+ * the http src we don't care about. On the chain function
+ * we just push the buffer forward, but this way dash can get
+ * the flow return from downstream */
+ internal_pad =
+ GST_PAD_CAST (gst_proxy_pad_get_internal (GST_PROXY_PAD (stream->pad)));
+ gst_pad_set_chain_function (GST_PAD_CAST (internal_pad), _src_chain);
+ gst_pad_set_event_function (GST_PAD_CAST (internal_pad), _src_event);
+ /* need to set query otherwise deadlocks happen with allocation queries */
+ gst_pad_set_query_function (GST_PAD_CAST (internal_pad), _src_query);
+ gst_object_unref (internal_pad);
+ }
+ return TRUE;
+}
+
+/* must be called with the stream's fragment_download_lock */
+static void
+gst_dash_demux_stream_download_uri (GstDashDemux * demux,
+ GstDashDemuxStream * stream, const gchar * uri, gint64 start, gint64 end)
+{
+ GST_DEBUG_OBJECT (stream->pad, "Downloading uri: %s, range:%" G_GINT64_FORMAT
+ " - %" G_GINT64_FORMAT, uri, start, end);
+
+ if (!gst_dash_demux_stream_update_source (stream, uri, NULL, FALSE, TRUE)) {
+ return;
+ }
+
+ if (gst_element_set_state (stream->src,
+ GST_STATE_READY) != GST_STATE_CHANGE_FAILURE) {
+ if (start != 0 || end != -1) {
+ if (!gst_element_send_event (stream->src, gst_event_new_seek (1.0,
+ GST_FORMAT_BYTES, (GstSeekFlags) GST_SEEK_FLAG_FLUSH,
+ GST_SEEK_TYPE_SET, start, GST_SEEK_TYPE_SET, end))) {
+
+ /* looks like the source can't handle seeks in READY */
+/*
+ *err = g_error_new (GST_CORE_ERROR, GST_CORE_ERROR_NOT_IMPLEMENTED,
+ "Source element can't handle range requests");
+*/
+ stream->last_ret = GST_FLOW_ERROR;
+ }
+ }
+
+ if (G_LIKELY (stream->last_ret == GST_FLOW_OK)) {
+ /* flush the proxypads so that the EOS state is reset */
+ gst_pad_push_event (stream->src_srcpad, gst_event_new_flush_start ());
+ gst_pad_push_event (stream->src_srcpad, gst_event_new_flush_stop (TRUE));
+
+ stream->download_start_time = g_get_monotonic_time ();
+ gst_element_sync_state_with_parent (stream->src);
+
+ /* wait for the fragment to be completely downloaded */
+ GST_DEBUG_OBJECT (stream->pad,
+ "Waiting for fragment download to finish: %s", uri);
+ g_cond_wait (&stream->fragment_download_cond,
+ &stream->fragment_download_lock);
+ }
+ } else {
+ stream->last_ret = GST_FLOW_CUSTOM_ERROR;
+ }
+
+ gst_element_set_state (stream->src, GST_STATE_READY);
+}
+
+static void
gst_dash_demux_stream_download_fragment (GstDashDemux * demux,
- GstDashDemuxStream * stream, guint64 * size_buffer,
- GstClockTime * download_time)
+ GstDashDemuxStream * stream)
{
GstActiveStream *active_stream;
- GstFragment *download;
- GTimeVal now;
- GTimeVal start;
guint stream_idx = stream->index;
- GstBuffer *buffer = NULL;
- GstBuffer *header_buffer;
- GstMediaFragmentInfo fragment;
+ GstMediaFragmentInfo *fragment = &stream->current_fragment;
if (G_UNLIKELY (stream->restart_download)) {
GstClockTime cur, ts;
@@ -1882,8 +2180,7 @@ gst_dash_demux_stream_download_fragment (GstDashDemux * demux,
}
GST_DEBUG_OBJECT (stream->pad, "Restarting stream at "
- "position %" GST_TIME_FORMAT ", current catch up %" GST_TIME_FORMAT,
- GST_TIME_ARGS (ts), GST_TIME_ARGS (demux->segment.position));
+ "position %" GST_TIME_FORMAT, GST_TIME_ARGS (ts));
if (GST_CLOCK_TIME_IS_VALID (ts)) {
gst_mpd_client_stream_seek (demux->client, stream->active_stream, ts);
@@ -1894,104 +2191,94 @@ gst_dash_demux_stream_download_fragment (GstDashDemux * demux,
}
}
- /* This stream might be entering into catching up mode,
- * meaning that it will push buffers from this same download thread
- * until it reaches 'catch_up_timestamp'.
- *
- * The reason for this is that in case of stream switching, the other
- * stream that was previously active might be blocking the stream_loop
- * in case it is ahead enough that all queues are filled.
- * In this case, it is possible that a downstream input-selector is
- * blocking waiting for the currently active stream to reach the
- * same position of the old linked stream because of the 'sync-streams'
- * behavior.
- *
- * We can push from this thread up to 'catch_up_timestamp' as all other
- * streams should be around the same timestamp.
- */
- stream->last_ret = GST_FLOW_CUSTOM_SUCCESS;
-
stream->restart_download = FALSE;
}
- if (gst_mpd_client_get_next_fragment (demux->client, stream_idx, &fragment)) {
- g_get_current_time (&start);
+ g_mutex_lock (&stream->fragment_download_lock);
+ if (gst_mpd_client_get_next_fragment (demux->client, stream_idx, fragment)) {
GST_INFO_OBJECT (stream->pad,
"Fetching next fragment %s ts:%" GST_TIME_FORMAT " dur:%"
GST_TIME_FORMAT " Range:%" G_GINT64_FORMAT "-%" G_GINT64_FORMAT,
- fragment.uri, GST_TIME_ARGS (fragment.timestamp),
- GST_TIME_ARGS (fragment.duration),
- fragment.range_start, fragment.range_end);
+ fragment->uri, GST_TIME_ARGS (fragment->timestamp),
+ GST_TIME_ARGS (fragment->duration),
+ fragment->range_start, fragment->range_end);
- download = gst_uri_downloader_fetch_uri_with_range (stream->downloader,
- fragment.uri, demux->client->mpd_uri, FALSE, FALSE,
- fragment.range_start, fragment.range_end, NULL);
+ /* Reset last flow return */
+ stream->last_ret = GST_FLOW_OK;
+ stream->starting_fragment = TRUE;
- if (download == NULL) {
- gst_media_fragment_info_clear (&fragment);
- return NULL;
+ if (stream->need_header) {
+ /* We need to fetch a new header */
+ gst_dash_demux_get_next_header (demux, stream);
+ stream->need_header = FALSE;
}
- active_stream = stream->active_stream;
- if (active_stream == NULL) {
- gst_media_fragment_info_clear (&fragment);
- g_object_unref (download);
- return NULL;
+ if (stream->last_ret != GST_FLOW_OK) {
+ GST_WARNING_OBJECT (stream->pad, "Failed to download headers");
+ goto exit;
}
- buffer = gst_fragment_get_buffer (download);
- g_object_unref (download);
+ if (demux->cancelled)
+ goto exit;
/* it is possible to have an index per fragment, so check and download */
- if (fragment.index_uri || fragment.index_range_start
- || fragment.index_range_end != -1) {
- const gchar *uri = fragment.index_uri;
- GstBuffer *index_buffer;
+ if (fragment->index_uri || fragment->index_range_start
+ || fragment->index_range_end != -1) {
+ const gchar *uri = fragment->index_uri;
if (!uri) /* fallback to default media uri */
- uri = fragment.uri;
+ uri = fragment->uri;
GST_DEBUG_OBJECT (stream->pad,
"Fragment index download: %s %" G_GINT64_FORMAT "-%"
- G_GINT64_FORMAT, uri, fragment.index_range_start,
- fragment.index_range_end);
- download =
- gst_uri_downloader_fetch_uri_with_range (stream->downloader, uri,
- demux->client->mpd_uri, FALSE, FALSE, fragment.index_range_start,
- fragment.index_range_end, NULL);
- if (download) {
- index_buffer = gst_fragment_get_buffer (download);
- if (index_buffer)
- buffer = gst_buffer_append (index_buffer, buffer);
- g_object_unref (download);
- }
+ G_GINT64_FORMAT, uri, fragment->index_range_start,
+ fragment->index_range_end);
+ gst_dash_demux_stream_download_uri (demux, stream, uri,
+ fragment->index_range_start, fragment->index_range_end);
}
- if (stream->need_header) {
- /* We need to fetch a new header */
- if ((header_buffer =
- gst_dash_demux_get_next_header (demux, stream)) != NULL) {
- buffer = gst_buffer_append (header_buffer, buffer);
- }
- stream->need_header = FALSE;
+ if (stream->last_ret != GST_FLOW_OK) {
+ GST_WARNING_OBJECT (stream->pad, "Failed to download fragment headers");
+ goto exit;
}
- g_get_current_time (&now);
- *download_time = (GST_TIMEVAL_TO_TIME (now) - GST_TIMEVAL_TO_TIME (start));
- buffer = gst_buffer_make_writable (buffer);
+ if (demux->cancelled)
+ goto exit;
+
+ /* now get the real fragment */
+ gst_dash_demux_stream_download_uri (demux, stream, fragment->uri,
+ fragment->range_start, fragment->range_end);
- GST_BUFFER_TIMESTAMP (buffer) = fragment.timestamp;
- GST_BUFFER_DURATION (buffer) = fragment.duration;
- GST_BUFFER_OFFSET (buffer) =
- gst_mpd_client_get_segment_index (active_stream) - 1;
+ if (stream->last_ret < GST_FLOW_EOS) {
+ gst_media_fragment_info_clear (fragment);
+ goto exit;
+ }
+
+ active_stream = stream->active_stream;
+ if (active_stream == NULL) {
+ gst_media_fragment_info_clear (fragment);
+ stream->last_ret = GST_FLOW_ERROR;
+ goto exit;
+ }
+
+ if (stream->last_ret == GST_FLOW_OK) {
+ stream->position += fragment->duration;
+ }
- gst_media_fragment_info_clear (&fragment);
- *size_buffer += gst_buffer_get_size (buffer);
+ gst_media_fragment_info_clear (fragment);
} else {
GST_WARNING_OBJECT (demux, "Failed to download fragment for stream %p %d",
stream, stream->index);
}
- return buffer;
+
+
+exit:
+ g_mutex_unlock (&stream->fragment_download_lock);
+
+ if (stream->last_ret == GST_FLOW_OK)
+ gst_element_set_state (stream->src, GST_STATE_READY);
+ else
+ gst_element_set_state (stream->src, GST_STATE_NULL);
}
/* gst_dash_demux_stream_get_next_fragment:
@@ -2008,9 +2295,6 @@ static GstFlowReturn
gst_dash_demux_stream_get_next_fragment (GstDashDemuxStream * stream,
GstClockTime * ts)
{
- guint64 buffer_size = 0;
- GstClockTime diff;
- GstBuffer *buffer = NULL;
GstFlowReturn ret = GST_FLOW_OK;
GstDashDemux *demux = stream->demux;
@@ -2048,34 +2332,14 @@ gst_dash_demux_stream_get_next_fragment (GstDashDemuxStream * stream,
}
/* Get the fragment corresponding to each stream index */
- buffer =
- gst_dash_demux_stream_download_fragment (demux, stream,
- &buffer_size, &diff);
+ gst_dash_demux_stream_download_fragment (demux, stream);
demux->end_of_period = FALSE;
- if (buffer) {
- ret = gst_dash_demux_push (stream, buffer);
- } else {
+ if (stream->last_ret < GST_FLOW_EOS) {
GST_WARNING_OBJECT (stream->pad, "Failed to download fragment");
return GST_FLOW_ERROR;
}
-
- if (buffer_size > 0 && diff > 0) {
-#ifndef GST_DISABLE_GST_DEBUG
- guint64 brate;
-#endif
-
- gst_download_rate_add_rate (&stream->dnl_rate, buffer_size, diff);
-
-#ifndef GST_DISABLE_GST_DEBUG
- brate = (buffer_size * 8) / ((double) diff / GST_SECOND);
-#endif
- GST_INFO_OBJECT (demux,
- "Stream: %d Download rate = %" G_GUINT64_FORMAT " Kbits/s (%"
- G_GUINT64_FORMAT " Ko in %.2f s)", stream->index, brate / 1000,
- buffer_size / 1024, ((double) diff / GST_SECOND));
- }
return ret;
}
diff --git a/ext/dash/gstdashdemux.h b/ext/dash/gstdashdemux.h
index 935e7e9b..4e3a3ed8 100644
--- a/ext/dash/gstdashdemux.h
+++ b/ext/dash/gstdashdemux.h
@@ -34,7 +34,6 @@
#include <gst/base/gstadapter.h>
#include <gst/base/gstdataqueue.h>
#include "gstmpdparser.h"
-#include "gstdownloadrate.h"
#include <gst/uridownloader/gsturidownloader.h>
G_BEGIN_DECLS
@@ -48,6 +47,8 @@ G_BEGIN_DECLS
(G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_DASH_DEMUX))
#define GST_IS_DASH_DEMUX_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DASH_DEMUX))
+#define GST_DASH_DEMUX_CAST(obj) \
+ ((GstDashDemux *)obj)
typedef struct _GstDashDemuxStream GstDashDemuxStream;
typedef struct _GstDashDemux GstDashDemux;
@@ -78,9 +79,18 @@ struct _GstDashDemuxStream
GCond download_cond;
GstTask *download_task;
GRecMutex download_task_lock;
- GstUriDownloader *downloader;
- GstDownloadRate dnl_rate;
+ /* download tooling */
+ GstElement *src;
+ GstPad *src_srcpad;
+ GMutex fragment_download_lock;
+ GCond fragment_download_cond;
+ GstMediaFragmentInfo current_fragment;
+ gboolean starting_fragment;
+ gint64 download_start_time;
+ gint64 download_total_time;
+ gint64 download_total_bytes;
+ gint current_download_rate;
};
/**
@@ -90,7 +100,7 @@ struct _GstDashDemuxStream
*/
struct _GstDashDemux
{
- GstElement parent;
+ GstBin parent;
GstPad *sinkpad;
gboolean have_group_id;
@@ -123,7 +133,7 @@ struct _GstDashDemux
struct _GstDashDemuxClass
{
- GstElementClass parent_class;
+ GstBinClass parent_class;
};
GType gst_dash_demux_get_type (void);
diff --git a/ext/dash/gstdownloadrate.c b/ext/dash/gstdownloadrate.c
deleted file mode 100644
index ce25b18b..00000000
--- a/ext/dash/gstdownloadrate.c
+++ /dev/null
@@ -1,113 +0,0 @@
-/* GStreamer
- * Copyright (C) 2011 Andoni Morales Alastruey <ylatuya@gmail.com>
- * Copyright (C) 2012 Smart TV Alliance
- * Author: Louis-Francis Ratté-Boulianne <lfrb@collabora.com>, Collabora Ltd.
- *
- * gstfragment.c:
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include <glib.h>
-#include "gstdownloadrate.h"
-
-static void
-_gst_download_rate_check_remove_rates (GstDownloadRate * rate)
-{
- if (rate->max_length == 0)
- return;
-
- while (g_queue_get_length (&rate->queue) > rate->max_length) {
- guint bitrate = GPOINTER_TO_UINT (g_queue_pop_head (&rate->queue));
-
- rate->total -= bitrate;
- }
-}
-
-void
-gst_download_rate_init (GstDownloadRate * rate)
-{
- g_queue_init (&rate->queue);
- g_mutex_init (&rate->mutex);
- rate->total = 0;
- rate->max_length = 0;
-}
-
-void
-gst_download_rate_deinit (GstDownloadRate * rate)
-{
- gst_download_rate_clear (rate);
- g_mutex_clear (&rate->mutex);
-}
-
-void
-gst_download_rate_set_max_length (GstDownloadRate * rate, gint max_length)
-{
- g_mutex_lock (&rate->mutex);
- rate->max_length = max_length;
- _gst_download_rate_check_remove_rates (rate);
- g_mutex_unlock (&rate->mutex);
-}
-
-gint
-gst_download_rate_get_max_length (GstDownloadRate * rate)
-{
- guint ret;
- g_mutex_lock (&rate->mutex);
- ret = rate->max_length;
- g_mutex_unlock (&rate->mutex);
-
- return ret;
-}
-
-void
-gst_download_rate_clear (GstDownloadRate * rate)
-{
- g_mutex_lock (&rate->mutex);
- g_queue_clear (&rate->queue);
- rate->total = 0;
- g_mutex_unlock (&rate->mutex);
-}
-
-void
-gst_download_rate_add_rate (GstDownloadRate * rate, guint bytes, guint64 time)
-{
- guint64 bitrate;
- g_mutex_lock (&rate->mutex);
-
- /* convert from bytes / nanoseconds to bits per second */
- bitrate = G_GUINT64_CONSTANT (8000000000) * bytes / time;
-
- g_queue_push_tail (&rate->queue, GUINT_TO_POINTER ((guint) bitrate));
- rate->total += bitrate;
-
- _gst_download_rate_check_remove_rates (rate);
- g_mutex_unlock (&rate->mutex);
-}
-
-guint
-gst_download_rate_get_current_rate (GstDownloadRate * rate)
-{
- guint ret;
- g_mutex_lock (&rate->mutex);
- if (g_queue_get_length (&rate->queue))
- ret = rate->total / g_queue_get_length (&rate->queue);
- else
- ret = G_MAXUINT;
- g_mutex_unlock (&rate->mutex);
-
- return ret;
-}
diff --git a/ext/dash/gstdownloadrate.h b/ext/dash/gstdownloadrate.h
deleted file mode 100644
index 2ea704b2..00000000
--- a/ext/dash/gstdownloadrate.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* GStreamer
- * Copyright (C) 2012 Smart TV Alliance
- * Author: Thiago Sousa Santos <thiago.sousa.santos@collabora.com>, Collabora Ltd.
- *
- * gstdownloadrate.h:
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __GST_DOWNLOAD_RATE_H__
-#define __GST_DOWNLOAD_RATE_H__
-
-#include <glib-object.h>
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-typedef struct _GstDownloadRate GstDownloadRate;
-
-struct _GstDownloadRate
-{
- GQueue queue;
- GMutex mutex;
-
- gint max_length;
-
- guint64 total;
-};
-
-void gst_download_rate_init (GstDownloadRate * rate);
-void gst_download_rate_deinit (GstDownloadRate * rate);
-
-void gst_download_rate_set_max_length (GstDownloadRate * rate, gint max_length);
-gint gst_download_rate_get_max_length (GstDownloadRate * rate);
-
-void gst_download_rate_clear (GstDownloadRate * rate);
-void gst_download_rate_add_rate (GstDownloadRate * rate, guint bytes, guint64 time);
-
-guint gst_download_rate_get_current_rate (GstDownloadRate * rate);
-
-G_END_DECLS
-#endif /* __GST_DOWNLOAD_RATE_H__ */
diff --git a/ext/dash/gstmpdparser.c b/ext/dash/gstmpdparser.c
index ab60adf6..b1e30fd7 100644
--- a/ext/dash/gstmpdparser.c
+++ b/ext/dash/gstmpdparser.c
@@ -1213,16 +1213,12 @@ gst_mpdparser_parse_seg_base_type_ext (GstSegmentBaseType ** pointer,
if (cur_node->type == XML_ELEMENT_NODE) {
if (xmlStrcmp (cur_node->name, (xmlChar *) "Initialization") == 0 ||
xmlStrcmp (cur_node->name, (xmlChar *) "Initialisation") == 0) {
- if (seg_base_type->Initialization) {
- gst_mpdparser_free_url_type_node (seg_base_type->Initialization);
- }
+ /* parse will free the previous pointer to create a new one */
gst_mpdparser_parse_url_type_node (&seg_base_type->Initialization,
cur_node);
} else if (xmlStrcmp (cur_node->name,
(xmlChar *) "RepresentationIndex") == 0) {
- if (seg_base_type->RepresentationIndex) {
- gst_mpdparser_free_url_type_node (seg_base_type->RepresentationIndex);
- }
+ /* parse will free the previous pointer to create a new one */
gst_mpdparser_parse_url_type_node (&seg_base_type->RepresentationIndex,
cur_node);
}
@@ -1361,18 +1357,12 @@ gst_mpdparser_parse_mult_seg_base_type_ext (GstMultSegmentBaseType ** pointer,
for (cur_node = a_node->children; cur_node; cur_node = cur_node->next) {
if (cur_node->type == XML_ELEMENT_NODE) {
if (xmlStrcmp (cur_node->name, (xmlChar *) "SegmentTimeline") == 0) {
- if (mult_seg_base_type->SegmentTimeline) {
- gst_mpdparser_free_segment_timeline_node
- (mult_seg_base_type->SegmentTimeline);
- }
+ /* parse frees the segmenttimeline if any */
gst_mpdparser_parse_segment_timeline_node
(&mult_seg_base_type->SegmentTimeline, cur_node);
} else if (xmlStrcmp (cur_node->name,
(xmlChar *) "BitstreamSwitching") == 0) {
- if (mult_seg_base_type->BitstreamSwitching) {
- gst_mpdparser_free_url_type_node
- (mult_seg_base_type->BitstreamSwitching);
- }
+ /* parse frees the old url before setting the new one */
gst_mpdparser_parse_url_type_node
(&mult_seg_base_type->BitstreamSwitching, cur_node);
}
@@ -3370,6 +3360,7 @@ gst_mpd_client_setup_streaming (GstMpdClient * client,
if (!representation) {
GST_WARNING ("No valid representation in the MPD file, aborting...");
+ g_slice_free (GstActiveStream, stream);
return FALSE;
}
stream->mimeType =
@@ -3486,11 +3477,16 @@ gst_mpd_client_get_segment_index_at_time (GstMpdClient * client,
return -1;
if (stream_period && stream_period->period) {
- /* intentionally not unreffing avail_start */
- avail_start = gst_mpd_client_add_time_difference (avail_start,
+ GstDateTime *t;
+
+ t = gst_mpd_client_add_time_difference (avail_start,
stream_period->period->start * 1000);
+ gst_date_time_unref (avail_start);
+ avail_start = t;
}
diff = gst_mpd_client_calculate_time_difference (avail_start, time);
+ gst_date_time_unref (avail_start);
+
if (diff < 0)
return -2;
if (diff > gst_mpd_client_get_media_presentation_duration (client))
diff --git a/ext/gl/gstgleffects.c b/ext/gl/gstgleffects.c
index 4f7338ab..4027e9cb 100644
--- a/ext/gl/gstgleffects.c
+++ b/ext/gl/gstgleffects.c
@@ -193,19 +193,20 @@ static void
gst_gl_effects_init_gl_resources (GstGLFilter * filter)
{
GstGLEffects *effects = GST_GL_EFFECTS (filter);
- gint i;
+ GstGLFuncs *gl = filter->context->gl_vtable;
+ gint i = 0;
for (i = 0; i < NEEDED_TEXTURES; i++) {
- glGenTextures (1, &effects->midtexture[i]);
- glBindTexture (GL_TEXTURE_2D, effects->midtexture[i]);
- glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA8,
+ gl->GenTextures (1, &effects->midtexture[i]);
+ gl->BindTexture (GL_TEXTURE_2D, effects->midtexture[i]);
+ gl->TexImage2D (GL_TEXTURE_2D, 0, GL_RGBA8,
GST_VIDEO_INFO_WIDTH (&filter->out_info),
GST_VIDEO_INFO_HEIGHT (&filter->out_info),
0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
- glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
}
}
@@ -214,14 +215,15 @@ static void
gst_gl_effects_reset_gl_resources (GstGLFilter * filter)
{
GstGLEffects *effects = GST_GL_EFFECTS (filter);
- gint i;
+ GstGLFuncs *gl = filter->context->gl_vtable;
+ gint i = 0;
for (i = 0; i < NEEDED_TEXTURES; i++) {
- glDeleteTextures (1, &effects->midtexture[i]);
+ gl->DeleteTextures (1, &effects->midtexture[i]);
effects->midtexture[i] = 0;
}
for (i = 0; i < GST_GL_EFFECTS_N_CURVES; i++) {
- glDeleteTextures (1, &effects->curve[i]);
+ gl->DeleteTextures (1, &effects->curve[i]);
effects->curve[i] = 0;
}
}
diff --git a/ext/gl/gstglimagesink.c b/ext/gl/gstglimagesink.c
index 7b3d1714..1311319c 100644
--- a/ext/gl/gstglimagesink.c
+++ b/ext/gl/gstglimagesink.c
@@ -151,7 +151,9 @@ static GstStaticPadTemplate gst_glimage_sink_template =
GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS (
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE_WITH_FEATURES
+ (GST_CAPS_FEATURE_MEMORY_GL_MEMORY,
+ "RGBA") "; "
#if GST_GL_HAVE_PLATFORM_EGL
GST_VIDEO_CAPS_MAKE_WITH_FEATURES
(GST_CAPS_FEATURE_MEMORY_EGL_IMAGE, "RGBA") "; "
@@ -386,6 +388,8 @@ _ensure_gl_setup (GstGLImageSink * gl_sink)
GstGLWindow *window;
gl_sink->context = gst_gl_context_new (gl_sink->display);
+ if (!gl_sink->context)
+ goto context_creation_error;
window = gst_gl_context_get_window (gl_sink->context);
@@ -419,6 +423,13 @@ _ensure_gl_setup (GstGLImageSink * gl_sink)
return TRUE;
+context_creation_error:
+ {
+ GST_ELEMENT_ERROR (gl_sink, RESOURCE, NOT_FOUND,
+ ("Failed to create GL context"), (NULL));
+ return FALSE;
+ }
+
context_error:
{
GST_ELEMENT_ERROR (gl_sink, RESOURCE, NOT_FOUND, ("%s", error->message),
@@ -687,8 +698,12 @@ gst_glimage_sink_set_caps (GstBaseSink * bsink, GstCaps * caps)
gst_object_unref (oldpool);
}
+ if (glimage_sink->upload)
+ gst_object_unref (glimage_sink->upload);
glimage_sink->upload = gst_object_ref (GST_GL_BUFFER_POOL (newpool)->upload);
+ gst_gl_upload_set_format (glimage_sink->upload, &vinfo);
+
return TRUE;
}
@@ -918,9 +933,12 @@ gst_glimage_sink_propose_allocation (GstBaseSink * bsink, GstQuery * query)
gst_object_unref (allocator);
#if GST_GL_HAVE_PLATFORM_EGL
- allocator = gst_allocator_find (GST_EGL_IMAGE_MEMORY_TYPE);
- gst_query_add_allocation_param (query, allocator, &params);
- gst_object_unref (allocator);
+ if (gst_gl_context_check_feature (glimage_sink->context,
+ "EGL_KHR_image_base")) {
+ allocator = gst_allocator_find (GST_EGL_IMAGE_MEMORY_TYPE);
+ gst_query_add_allocation_param (query, allocator, &params);
+ gst_object_unref (allocator);
+ }
#endif
return TRUE;
diff --git a/ext/gl/gstgltestsrc.c b/ext/gl/gstgltestsrc.c
index b7b2792a..52e0e5ee 100644
--- a/ext/gl/gstgltestsrc.c
+++ b/ext/gl/gstgltestsrc.c
@@ -47,6 +47,10 @@
#include "gltestsrc.h"
#include <gst/gst-i18n-plugin.h>
+#if GST_GL_HAVE_PLATFORM_EGL
+#include <gst/gl/egl/gsteglimagememory.h>
+#endif
+
#define USE_PEER_BUFFERALLOC
GST_DEBUG_CATEGORY_STATIC (gl_test_src_debug);
@@ -61,6 +65,21 @@ enum
/* FILL ME */
};
+static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE_WITH_FEATURES
+ (GST_CAPS_FEATURE_MEMORY_GL_MEMORY,
+ "RGBA") "; "
+#if GST_GL_HAVE_PLATFORM_EGL
+ GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_MEMORY_EGL_IMAGE,
+ "RGBA") "; "
+#endif
+ GST_VIDEO_CAPS_MAKE_WITH_FEATURES
+ (GST_CAPS_FEATURE_META_GST_VIDEO_GL_TEXTURE_UPLOAD_META,
+ "RGBA") "; " GST_VIDEO_CAPS_MAKE (GST_GL_COLOR_CONVERT_FORMATS))
+ );
+
#define gst_gl_test_src_parent_class parent_class
G_DEFINE_TYPE (GstGLTestSrc, gst_gl_test_src, GST_TYPE_PUSH_SRC);
@@ -159,8 +178,7 @@ gst_gl_test_src_class_init (GstGLTestSrcClass * klass)
"David A. Schleef <ds@schleef.org>");
gst_element_class_add_pad_template (element_class,
- gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
- gst_caps_from_string (GST_GL_COLOR_CONVERT_VIDEO_CAPS)));
+ gst_static_pad_template_get (&src_factory));
element_class->set_context = gst_gl_test_src_set_context;
@@ -476,19 +494,10 @@ gst_gl_test_src_fill (GstPushSrc * psrc, GstBuffer * buffer)
}
out_tex = src->out_tex_id;
- if (!src->download) {
+ if (!src->download)
src->download = gst_gl_download_new (src->context);
- if (!gst_gl_download_init_format (src->download,
- GST_VIDEO_FRAME_FORMAT (&out_frame),
- GST_VIDEO_FRAME_WIDTH (&out_frame),
- GST_VIDEO_FRAME_HEIGHT (&out_frame))) {
- GST_ELEMENT_ERROR (src, RESOURCE, NOT_FOUND,
- ("%s", "Failed to init download format"), (NULL));
- return FALSE;
- }
- }
-
+ gst_gl_download_set_format (src->download, &out_frame.info);
out_gl_wrapped = TRUE;
}
diff --git a/ext/hls/gsthlsdemux.c b/ext/hls/gsthlsdemux.c
index 41e2548e..3e21f593 100644
--- a/ext/hls/gsthlsdemux.c
+++ b/ext/hls/gsthlsdemux.c
@@ -810,7 +810,9 @@ _src_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
key_fragment =
gst_uri_downloader_fetch_uri (demux->downloader,
demux->current_key, demux->client->main ?
- demux->client->main->uri : NULL, FALSE, FALSE, &err);
+ demux->client->main->uri : NULL, FALSE, FALSE,
+ demux->client->current ? demux->client->current->allowcache : TRUE,
+ &err);
if (key_fragment == NULL)
goto key_failed;
demux->key_url = g_strdup (demux->current_key);
@@ -866,6 +868,7 @@ _src_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
* as each fragment for its own has to be reversed */
demux->discont = TRUE;
demux->starting_fragment = FALSE;
+ demux->segment.position = GST_BUFFER_PTS (buffer);
} else {
GST_BUFFER_PTS (buffer) = GST_CLOCK_TIME_NONE;
}
@@ -904,8 +907,6 @@ _src_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
demux->starting_fragment = FALSE;
- demux->segment.position = GST_BUFFER_TIMESTAMP (buffer);
-
if (demux->need_segment) {
/* And send a newsegment */
GST_DEBUG_OBJECT (demux, "Sending segment event: %"
@@ -1001,6 +1002,8 @@ _src_event (GstPad * pad, GstObject * parent, GstEvent * event)
break;
}
+ gst_event_unref (event);
+
return TRUE;
}
@@ -1491,7 +1494,8 @@ gst_hls_demux_update_playlist (GstHLSDemux * demux, gboolean update,
download =
gst_uri_downloader_fetch_uri (demux->downloader, uri,
- demux->client->main ? demux->client->main->uri : NULL, TRUE, TRUE, err);
+ demux->client->main ? demux->client->main->uri : NULL, TRUE, TRUE, TRUE,
+ err);
if (download == NULL)
return FALSE;
@@ -1797,7 +1801,7 @@ decrypt_error:
static gboolean
gst_hls_demux_update_source (GstHLSDemux * demux, const gchar * uri,
- const gchar * referer)
+ const gchar * referer, gboolean refresh, gboolean allow_cache)
{
if (!gst_uri_is_valid (uri))
return FALSE;
@@ -1851,10 +1855,19 @@ gst_hls_demux_update_source (GstHLSDemux * demux, const gchar * uri,
if (g_object_class_find_property (gobject_class, "keep-alive"))
g_object_set (demux->src, "keep-alive", TRUE, NULL);
if (g_object_class_find_property (gobject_class, "extra-headers")) {
- if (referer) {
- GstStructure *extra_headers =
- gst_structure_new ("headers", "Referer", G_TYPE_STRING, referer,
- NULL);
+ if (referer || refresh || !allow_cache) {
+ GstStructure *extra_headers = gst_structure_new_empty ("headers");
+
+ if (referer)
+ gst_structure_set (extra_headers, "Referer", G_TYPE_STRING, referer,
+ NULL);
+
+ if (!allow_cache)
+ gst_structure_set (extra_headers, "Cache-Control", G_TYPE_STRING,
+ "no-cache", NULL);
+ else if (refresh)
+ gst_structure_set (extra_headers, "Cache-Control", G_TYPE_STRING,
+ "max-age=0", NULL);
g_object_set (demux->src, "extra-headers", extra_headers, NULL);
@@ -1909,8 +1922,11 @@ gst_hls_demux_get_next_fragment (GstHLSDemux * demux,
demux->last_ret = GST_FLOW_OK;
if (!gst_hls_demux_update_source (demux, next_fragment_uri,
- demux->client->main ? demux->client->main->uri : NULL)) {
- *err = g_error_new (GST_CORE_ERROR, GST_CORE_ERROR_MISSING_PLUGIN,
+ demux->client->main ? demux->client->main->uri : NULL,
+ FALSE,
+ demux->client->current ? demux->client->current->allowcache : TRUE)) {
+ *err =
+ g_error_new (GST_CORE_ERROR, GST_CORE_ERROR_MISSING_PLUGIN,
"Missing plugin to handle URI: '%s'", next_fragment_uri);
g_mutex_unlock (&demux->fragment_download_lock);
return FALSE;
diff --git a/ext/hls/gsthlssink.c b/ext/hls/gsthlssink.c
index 8a3c305c..44093a66 100644
--- a/ext/hls/gsthlssink.c
+++ b/ext/hls/gsthlssink.c
@@ -100,6 +100,8 @@ gst_hls_sink_finalize (GObject * object)
g_free (sink->location);
g_free (sink->playlist_location);
g_free (sink->playlist_root);
+ if (sink->playlist)
+ gst_m3u8_playlist_free (sink->playlist);
G_OBJECT_CLASS (parent_class)->finalize ((GObject *) sink);
}
diff --git a/ext/hls/m3u8.c b/ext/hls/m3u8.c
index e21590de..5c7fd174 100644
--- a/ext/hls/m3u8.c
+++ b/ext/hls/m3u8.c
@@ -65,7 +65,6 @@ gst_m3u8_free (GstM3U8 * self)
g_return_if_fail (self != NULL);
g_free (self->uri);
- g_free (self->allowcache);
g_free (self->codecs);
g_free (self->key);
@@ -299,6 +298,9 @@ gst_m3u8_update (GstM3U8 * self, gchar * data, gboolean * updated)
self->files = NULL;
}
+ /* By default, allow caching */
+ self->allowcache = TRUE;
+
list = NULL;
duration = 0;
title = NULL;
@@ -425,12 +427,12 @@ gst_m3u8_update (GstM3U8 * self, gchar * data, gboolean * updated)
if (uri[0] == '"')
uri += 1;
- data = uri_join (self->uri, uri);
+ uri = uri_join (self->uri, uri);
g_free (urip);
- if (data == NULL)
+ if (uri == NULL)
continue;
- gst_m3u8_set_uri (new_list, data);
+ gst_m3u8_set_uri (new_list, uri);
}
}
@@ -439,7 +441,6 @@ gst_m3u8_update (GstM3U8 * self, gchar * data, gboolean * updated)
(GCompareFunc) _m3u8_compare_uri)) {
GST_DEBUG ("Already have a list with this URI");
gst_m3u8_free (new_list);
- g_free (data);
} else {
self->iframe_lists = g_list_append (self->iframe_lists, new_list);
}
@@ -461,8 +462,7 @@ gst_m3u8_update (GstM3U8 * self, gchar * data, gboolean * updated)
/* <YYYY-MM-DDThh:mm:ssZ> */
GST_DEBUG ("FIXME parse date");
} else if (g_str_has_prefix (data, "#EXT-X-ALLOW-CACHE:")) {
- g_free (self->allowcache);
- self->allowcache = g_strdup (data + 19);
+ self->allowcache = g_ascii_strcasecmp (data + 19, "YES") == 0;
} else if (g_str_has_prefix (data, "#EXT-X-KEY:")) {
gchar *v, *a;
diff --git a/ext/hls/m3u8.h b/ext/hls/m3u8.h
index 599ab446..096287a6 100644
--- a/ext/hls/m3u8.h
+++ b/ext/hls/m3u8.h
@@ -42,7 +42,7 @@ struct _GstM3U8
gboolean endlist; /* if ENDLIST has been reached */
gint version; /* last EXT-X-VERSION */
GstClockTime targetduration; /* last EXT-X-TARGETDURATION */
- gchar *allowcache; /* last EXT-X-ALLOWCACHE */
+ gboolean allowcache; /* last EXT-X-ALLOWCACHE */
gchar *key;
gint bandwidth;
diff --git a/ext/opencv/gstmotioncells.c b/ext/opencv/gstmotioncells.c
index 598a13ff..d5e037eb 100644
--- a/ext/opencv/gstmotioncells.c
+++ b/ext/opencv/gstmotioncells.c
@@ -879,215 +879,223 @@ gst_motion_cells_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
motioncellidx *motioncellsidx;
buf = gst_buffer_make_writable (buf);
- gst_buffer_map (buf, &info, GST_MAP_WRITE);
- filter->cvImage->imageData = (char *) info.data;
- if (filter->firstframe) {
- setPrevFrame (filter->cvImage, filter->id);
- filter->firstframe = FALSE;
- }
- minimum_motion_frames = filter->minimum_motion_frames;
- postnomotion = filter->postnomotion;
- sensitivity = filter->sensitivity;
- framerate = filter->framerate;
- gridx = filter->gridx;
- gridy = filter->gridy;
- display = filter->display;
- motionmaskcoord_count = filter->motionmaskcoord_count;
- motionmaskcoords =
- g_new0 (motionmaskcoordrect, filter->motionmaskcoord_count);
- for (i = 0; i < filter->motionmaskcoord_count; i++) { //we need divide 2 because we use gauss pyramid in C++ side
- motionmaskcoords[i].upper_left_x =
- filter->motionmaskcoords[i].upper_left_x / 2;
- motionmaskcoords[i].upper_left_y =
- filter->motionmaskcoords[i].upper_left_y / 2;
- motionmaskcoords[i].lower_right_x =
- filter->motionmaskcoords[i].lower_right_x / 2;
- motionmaskcoords[i].lower_right_y =
- filter->motionmaskcoords[i].lower_right_y / 2;
- }
-
- motioncellscolor.R_channel_value =
- filter->motioncellscolor->R_channel_value;
- motioncellscolor.G_channel_value =
- filter->motioncellscolor->G_channel_value;
- motioncellscolor.B_channel_value =
- filter->motioncellscolor->B_channel_value;
-
- if ((filter->changed_gridx || filter->changed_gridy
- || filter->changed_startime)) {
- if ((g_strcmp0 (filter->cur_datafile, NULL) != 0)) {
- GFREE (filter->cur_datafile);
- filter->datafileidx++;
- filter->cur_datafile =
- g_strdup_printf ("%s-%d.%s", filter->basename_datafile,
- filter->datafileidx, filter->datafile_extension);
- filter->changed_datafile = TRUE;
- motion_cells_free_resources (filter->id);
+ if (gst_buffer_map (buf, &info, GST_MAP_WRITE)) {
+ filter->cvImage->imageData = (char *) info.data;
+ if (filter->firstframe) {
+ setPrevFrame (filter->cvImage, filter->id);
+ filter->firstframe = FALSE;
}
- if (filter->motioncells_count > 0)
- gst_motioncells_update_motion_cells (filter);
- if (filter->motionmaskcells_count > 0)
- gst_motioncells_update_motion_masks (filter);
- filter->changed_gridx = FALSE;
- filter->changed_gridy = FALSE;
- filter->changed_startime = FALSE;
- }
- datafile = g_strdup (filter->cur_datafile);
- filter->cur_buff_timestamp = (GST_BUFFER_TIMESTAMP (buf) / GST_MSECOND);
- filter->starttime +=
- (filter->cur_buff_timestamp - filter->prev_buff_timestamp);
- starttime = filter->starttime;
- if (filter->changed_datafile || filter->diff_timestamp < 0)
- filter->diff_timestamp =
- (gint64) (GST_BUFFER_TIMESTAMP (buf) / GST_MSECOND);
- changed_datafile = filter->changed_datafile;
- motionmaskcells_count = filter->motionmaskcells_count;
- motionmaskcellsidx = g_new0 (motioncellidx, filter->motionmaskcells_count);
- for (i = 0; i < filter->motionmaskcells_count; i++) {
- motionmaskcellsidx[i].lineidx = filter->motionmaskcellsidx[i].lineidx;
- motionmaskcellsidx[i].columnidx = filter->motionmaskcellsidx[i].columnidx;
- }
- motioncells_count = filter->motioncells_count;
- motioncellsidx = g_new0 (motioncellidx, filter->motioncells_count);
- for (i = 0; i < filter->motioncells_count; i++) {
- motioncellsidx[i].lineidx = filter->motioncellsidx[i].lineidx;
- motioncellsidx[i].columnidx = filter->motioncellsidx[i].columnidx;
- }
- useAlpha = filter->usealpha;
- thickness = filter->thickness;
- success =
- perform_detection_motion_cells (filter->cvImage, sensitivity, framerate,
- gridx, gridy,
- (gint64) (GST_BUFFER_TIMESTAMP (buf) / GST_MSECOND) -
- filter->diff_timestamp, display, useAlpha, motionmaskcoord_count,
- motionmaskcoords, motionmaskcells_count, motionmaskcellsidx,
- motioncellscolor, motioncells_count, motioncellsidx, starttime,
- datafile, changed_datafile, thickness, filter->id);
-
- if ((success == 1) && (filter->sent_init_error_msg == false)) {
- char *initfailedreason;
- int initerrorcode;
- GstStructure *s;
- GstMessage *m;
- initfailedreason = getInitDataFileFailed (filter->id);
- initerrorcode = getInitErrorCode (filter->id);
- s = gst_structure_new ("motion", "init_error_code", G_TYPE_INT,
- initerrorcode, "details", G_TYPE_STRING, initfailedreason, NULL);
- m = gst_message_new_element (GST_OBJECT (filter), s);
- gst_element_post_message (GST_ELEMENT (filter), m);
- filter->sent_init_error_msg = TRUE;
- }
- if ((success == -1) && (filter->sent_save_error_msg == false)) {
- char *savefailedreason;
- int saveerrorcode;
- GstStructure *s;
- GstMessage *m;
- savefailedreason = getSaveDataFileFailed (filter->id);
- saveerrorcode = getSaveErrorCode (filter->id);
- s = gst_structure_new ("motion", "save_error_code", G_TYPE_INT,
- saveerrorcode, "details", G_TYPE_STRING, savefailedreason, NULL);
- m = gst_message_new_element (GST_OBJECT (filter), s);
- gst_element_post_message (GST_ELEMENT (filter), m);
- filter->sent_save_error_msg = TRUE;
- }
- if (success == -2) { //frame dropped
- filter->prev_buff_timestamp = filter->cur_buff_timestamp;
- //free
- GFREE (datafile);
- GFREE (motionmaskcoords);
- GFREE (motionmaskcellsidx);
- GFREE (motioncellsidx);
- GST_OBJECT_UNLOCK (filter);
- return gst_pad_push (filter->srcpad, buf);
- }
- filter->changed_datafile = getChangedDataFile (filter->id);
- motioncellsidxcnt = getMotionCellsIdxCnt (filter->id);
- numberOfCells = filter->gridx * filter->gridy;
- motioncellsnumber = motioncellsidxcnt / MSGLEN;
- cellsOfInterestNumber = (filter->motioncells_count > 0) ? //how many cells interest for us
- (filter->motioncells_count) : (numberOfCells);
- mincellsOfInterestNumber =
- floor ((double) cellsOfInterestNumber * filter->threshold);
- GST_OBJECT_UNLOCK (filter);
- motiondetect = (motioncellsnumber >= mincellsOfInterestNumber) ? 1 : 0;
- if ((motioncellsidxcnt > 0) && (motiondetect == 1)) {
- char *detectedmotioncells;
- filter->last_motion_timestamp = GST_BUFFER_TIMESTAMP (buf);
- detectedmotioncells = getMotionCellsIdx (filter->id);
- if (detectedmotioncells) {
- filter->consecutive_motion++;
- if ((filter->previous_motion == false)
- && (filter->consecutive_motion >= minimum_motion_frames)) {
- GstStructure *s;
- GstMessage *m;
- filter->previous_motion = true;
- filter->motion_begin_timestamp = GST_BUFFER_TIMESTAMP (buf);
- s = gst_structure_new ("motion", "motion_cells_indices",
- G_TYPE_STRING, detectedmotioncells, "motion_begin", G_TYPE_UINT64,
- filter->motion_begin_timestamp, NULL);
- m = gst_message_new_element (GST_OBJECT (filter), s);
- gst_element_post_message (GST_ELEMENT (filter), m);
- } else if (filter->postallmotion) {
- GstStructure *s;
- GstMessage *m;
- filter->motion_timestamp = GST_BUFFER_TIMESTAMP (buf);
- s = gst_structure_new ("motion", "motion_cells_indices",
- G_TYPE_STRING, detectedmotioncells, "motion", G_TYPE_UINT64,
- filter->motion_timestamp, NULL);
- m = gst_message_new_element (GST_OBJECT (filter), s);
- gst_element_post_message (GST_ELEMENT (filter), m);
+ minimum_motion_frames = filter->minimum_motion_frames;
+ postnomotion = filter->postnomotion;
+ sensitivity = filter->sensitivity;
+ framerate = filter->framerate;
+ gridx = filter->gridx;
+ gridy = filter->gridy;
+ display = filter->display;
+ motionmaskcoord_count = filter->motionmaskcoord_count;
+ motionmaskcoords =
+ g_new0 (motionmaskcoordrect, filter->motionmaskcoord_count);
+ for (i = 0; i < filter->motionmaskcoord_count; i++) { //we need divide 2 because we use gauss pyramid in C++ side
+ motionmaskcoords[i].upper_left_x =
+ filter->motionmaskcoords[i].upper_left_x / 2;
+ motionmaskcoords[i].upper_left_y =
+ filter->motionmaskcoords[i].upper_left_y / 2;
+ motionmaskcoords[i].lower_right_x =
+ filter->motionmaskcoords[i].lower_right_x / 2;
+ motionmaskcoords[i].lower_right_y =
+ filter->motionmaskcoords[i].lower_right_y / 2;
+ }
+
+ motioncellscolor.R_channel_value =
+ filter->motioncellscolor->R_channel_value;
+ motioncellscolor.G_channel_value =
+ filter->motioncellscolor->G_channel_value;
+ motioncellscolor.B_channel_value =
+ filter->motioncellscolor->B_channel_value;
+
+ if ((filter->changed_gridx || filter->changed_gridy
+ || filter->changed_startime)) {
+ if ((g_strcmp0 (filter->cur_datafile, NULL) != 0)) {
+ GFREE (filter->cur_datafile);
+ filter->datafileidx++;
+ filter->cur_datafile =
+ g_strdup_printf ("%s-%d.%s", filter->basename_datafile,
+ filter->datafileidx, filter->datafile_extension);
+ filter->changed_datafile = TRUE;
+ motion_cells_free_resources (filter->id);
}
- } else {
+ if (filter->motioncells_count > 0)
+ gst_motioncells_update_motion_cells (filter);
+ if (filter->motionmaskcells_count > 0)
+ gst_motioncells_update_motion_masks (filter);
+ filter->changed_gridx = FALSE;
+ filter->changed_gridy = FALSE;
+ filter->changed_startime = FALSE;
+ }
+ datafile = g_strdup (filter->cur_datafile);
+ filter->cur_buff_timestamp = (GST_BUFFER_TIMESTAMP (buf) / GST_MSECOND);
+ filter->starttime +=
+ (filter->cur_buff_timestamp - filter->prev_buff_timestamp);
+ starttime = filter->starttime;
+ if (filter->changed_datafile || filter->diff_timestamp < 0)
+ filter->diff_timestamp =
+ (gint64) (GST_BUFFER_TIMESTAMP (buf) / GST_MSECOND);
+ changed_datafile = filter->changed_datafile;
+ motionmaskcells_count = filter->motionmaskcells_count;
+ motionmaskcellsidx =
+ g_new0 (motioncellidx, filter->motionmaskcells_count);
+ for (i = 0; i < filter->motionmaskcells_count; i++) {
+ motionmaskcellsidx[i].lineidx = filter->motionmaskcellsidx[i].lineidx;
+ motionmaskcellsidx[i].columnidx =
+ filter->motionmaskcellsidx[i].columnidx;
+ }
+ motioncells_count = filter->motioncells_count;
+ motioncellsidx = g_new0 (motioncellidx, filter->motioncells_count);
+ for (i = 0; i < filter->motioncells_count; i++) {
+ motioncellsidx[i].lineidx = filter->motioncellsidx[i].lineidx;
+ motioncellsidx[i].columnidx = filter->motioncellsidx[i].columnidx;
+ }
+ useAlpha = filter->usealpha;
+ thickness = filter->thickness;
+ success =
+ perform_detection_motion_cells (filter->cvImage, sensitivity,
+ framerate, gridx, gridy,
+ (gint64) (GST_BUFFER_TIMESTAMP (buf) / GST_MSECOND) -
+ filter->diff_timestamp, display, useAlpha, motionmaskcoord_count,
+ motionmaskcoords, motionmaskcells_count, motionmaskcellsidx,
+ motioncellscolor, motioncells_count, motioncellsidx, starttime,
+ datafile, changed_datafile, thickness, filter->id);
+
+ if ((success == 1) && (filter->sent_init_error_msg == false)) {
+ char *initfailedreason;
+ int initerrorcode;
GstStructure *s;
GstMessage *m;
- s = gst_structure_new ("motion", "motion_cells_indices", G_TYPE_STRING,
- "error", NULL);
+ initfailedreason = getInitDataFileFailed (filter->id);
+ initerrorcode = getInitErrorCode (filter->id);
+ s = gst_structure_new ("motion", "init_error_code", G_TYPE_INT,
+ initerrorcode, "details", G_TYPE_STRING, initfailedreason, NULL);
m = gst_message_new_element (GST_OBJECT (filter), s);
gst_element_post_message (GST_ELEMENT (filter), m);
+ filter->sent_init_error_msg = TRUE;
}
- } else {
- filter->consecutive_motion = 0;
- if ((((GST_BUFFER_TIMESTAMP (buf) -
- filter->last_motion_timestamp) / 1000000000l) >=
- filter->gap)
- && (filter->last_motion_timestamp > 0)) {
- GST_DEBUG ("POST MOTION FINISHED MSG\n");
- if (filter->previous_motion) {
+ if ((success == -1) && (filter->sent_save_error_msg == false)) {
+ char *savefailedreason;
+ int saveerrorcode;
+ GstStructure *s;
+ GstMessage *m;
+ savefailedreason = getSaveDataFileFailed (filter->id);
+ saveerrorcode = getSaveErrorCode (filter->id);
+ s = gst_structure_new ("motion", "save_error_code", G_TYPE_INT,
+ saveerrorcode, "details", G_TYPE_STRING, savefailedreason, NULL);
+ m = gst_message_new_element (GST_OBJECT (filter), s);
+ gst_element_post_message (GST_ELEMENT (filter), m);
+ filter->sent_save_error_msg = TRUE;
+ }
+ if (success == -2) { //frame dropped
+ gst_buffer_unmap (buf, &info);
+ filter->prev_buff_timestamp = filter->cur_buff_timestamp;
+ //free
+ GFREE (datafile);
+ GFREE (motionmaskcoords);
+ GFREE (motionmaskcellsidx);
+ GFREE (motioncellsidx);
+ GST_OBJECT_UNLOCK (filter);
+ return gst_pad_push (filter->srcpad, buf);
+ }
+ filter->changed_datafile = getChangedDataFile (filter->id);
+ motioncellsidxcnt = getMotionCellsIdxCnt (filter->id);
+ numberOfCells = filter->gridx * filter->gridy;
+ motioncellsnumber = motioncellsidxcnt / MSGLEN;
+ cellsOfInterestNumber = (filter->motioncells_count > 0) ? //how many cells interest for us
+ (filter->motioncells_count) : (numberOfCells);
+ mincellsOfInterestNumber =
+ floor ((double) cellsOfInterestNumber * filter->threshold);
+ GST_OBJECT_UNLOCK (filter);
+ motiondetect = (motioncellsnumber >= mincellsOfInterestNumber) ? 1 : 0;
+ if ((motioncellsidxcnt > 0) && (motiondetect == 1)) {
+ char *detectedmotioncells;
+ filter->last_motion_timestamp = GST_BUFFER_TIMESTAMP (buf);
+ detectedmotioncells = getMotionCellsIdx (filter->id);
+ if (detectedmotioncells) {
+ filter->consecutive_motion++;
+ if ((filter->previous_motion == false)
+ && (filter->consecutive_motion >= minimum_motion_frames)) {
+ GstStructure *s;
+ GstMessage *m;
+ filter->previous_motion = true;
+ filter->motion_begin_timestamp = GST_BUFFER_TIMESTAMP (buf);
+ s = gst_structure_new ("motion", "motion_cells_indices",
+ G_TYPE_STRING, detectedmotioncells, "motion_begin",
+ G_TYPE_UINT64, filter->motion_begin_timestamp, NULL);
+ m = gst_message_new_element (GST_OBJECT (filter), s);
+ gst_element_post_message (GST_ELEMENT (filter), m);
+ } else if (filter->postallmotion) {
+ GstStructure *s;
+ GstMessage *m;
+ filter->motion_timestamp = GST_BUFFER_TIMESTAMP (buf);
+ s = gst_structure_new ("motion", "motion_cells_indices",
+ G_TYPE_STRING, detectedmotioncells, "motion", G_TYPE_UINT64,
+ filter->motion_timestamp, NULL);
+ m = gst_message_new_element (GST_OBJECT (filter), s);
+ gst_element_post_message (GST_ELEMENT (filter), m);
+ }
+ } else {
GstStructure *s;
GstMessage *m;
- filter->previous_motion = false;
- s = gst_structure_new ("motion", "motion_finished", G_TYPE_UINT64,
- filter->last_motion_timestamp, NULL);
+ s = gst_structure_new ("motion", "motion_cells_indices",
+ G_TYPE_STRING, "error", NULL);
m = gst_message_new_element (GST_OBJECT (filter), s);
gst_element_post_message (GST_ELEMENT (filter), m);
}
+ } else {
+ filter->consecutive_motion = 0;
+ if ((((GST_BUFFER_TIMESTAMP (buf) -
+ filter->last_motion_timestamp) / 1000000000l) >=
+ filter->gap)
+ && (filter->last_motion_timestamp > 0)) {
+ GST_DEBUG ("POST MOTION FINISHED MSG\n");
+ if (filter->previous_motion) {
+ GstStructure *s;
+ GstMessage *m;
+ filter->previous_motion = false;
+ s = gst_structure_new ("motion", "motion_finished", G_TYPE_UINT64,
+ filter->last_motion_timestamp, NULL);
+ m = gst_message_new_element (GST_OBJECT (filter), s);
+ gst_element_post_message (GST_ELEMENT (filter), m);
+ }
+ }
}
- }
- if (postnomotion > 0) {
- guint64 last_buf_timestamp = GST_BUFFER_TIMESTAMP (buf) / 1000000000l;
- if ((last_buf_timestamp -
- (filter->last_motion_timestamp / 1000000000l)) >=
- filter->postnomotion) {
- GST_DEBUG ("POST NO MOTION MSG\n");
+ if (postnomotion > 0) {
+ guint64 last_buf_timestamp = GST_BUFFER_TIMESTAMP (buf) / 1000000000l;
if ((last_buf_timestamp -
- (filter->last_nomotion_notified / 1000000000l)) >=
+ (filter->last_motion_timestamp / 1000000000l)) >=
filter->postnomotion) {
- GstStructure *s;
- GstMessage *m;
- filter->last_nomotion_notified = GST_BUFFER_TIMESTAMP (buf);
- s = gst_structure_new ("motion", "no_motion", G_TYPE_UINT64,
- filter->last_motion_timestamp, NULL);
- m = gst_message_new_element (GST_OBJECT (filter), s);
- gst_element_post_message (GST_ELEMENT (filter), m);
+ GST_DEBUG ("POST NO MOTION MSG\n");
+ if ((last_buf_timestamp -
+ (filter->last_nomotion_notified / 1000000000l)) >=
+ filter->postnomotion) {
+ GstStructure *s;
+ GstMessage *m;
+ filter->last_nomotion_notified = GST_BUFFER_TIMESTAMP (buf);
+ s = gst_structure_new ("motion", "no_motion", G_TYPE_UINT64,
+ filter->last_motion_timestamp, NULL);
+ m = gst_message_new_element (GST_OBJECT (filter), s);
+ gst_element_post_message (GST_ELEMENT (filter), m);
+ }
}
}
+ gst_buffer_unmap (buf, &info);
+ filter->prev_buff_timestamp = filter->cur_buff_timestamp;
+ //free
+ GFREE (datafile);
+ GFREE (motionmaskcoords);
+ GFREE (motionmaskcellsidx);
+ GFREE (motioncellsidx);
+ } else {
+ GST_WARNING_OBJECT (filter, "error mapping input buffer");
+ GST_OBJECT_UNLOCK (filter);
}
- filter->prev_buff_timestamp = filter->cur_buff_timestamp;
- //free
- GFREE (datafile);
- GFREE (motionmaskcoords);
- GFREE (motionmaskcellsidx);
- GFREE (motioncellsidx);
} else {
GST_OBJECT_UNLOCK (filter);
}
diff --git a/ext/rsvg/gstrsvgdec.c b/ext/rsvg/gstrsvgdec.c
index a7d42e89..a17c9359 100644
--- a/ext/rsvg/gstrsvgdec.c
+++ b/ext/rsvg/gstrsvgdec.c
@@ -180,17 +180,18 @@ gst_rsvg_decode_image (GstRsvgDec * rsvg, GstBuffer * buffer,
|| GST_VIDEO_INFO_HEIGHT (&output_state->info) != dimension.height) {
/* Create the output state */
- gst_video_decoder_set_output_state (decoder, GST_RSVG_VIDEO_FORMAT,
- dimension.width, dimension.height, rsvg->input_state);
if (output_state)
gst_video_codec_state_unref (output_state);
- output_state = gst_video_decoder_get_output_state (decoder);
+ output_state =
+ gst_video_decoder_set_output_state (decoder, GST_RSVG_VIDEO_FORMAT,
+ dimension.width, dimension.height, rsvg->input_state);
}
ret = gst_video_decoder_allocate_output_frame (decoder, frame);
if (ret != GST_FLOW_OK) {
g_object_unref (handle);
+ gst_video_codec_state_unref (output_state);
GST_ERROR_OBJECT (rsvg, "Buffer allocation failed %s",
gst_flow_get_name (ret));
return ret;
@@ -205,6 +206,8 @@ gst_rsvg_decode_image (GstRsvgDec * rsvg, GstBuffer * buffer,
&gst_video_decoder_get_output_state (decoder)->info,
frame->output_buffer, GST_MAP_READWRITE)) {
GST_ERROR_OBJECT (rsvg, "Failed to get SVG image");
+ g_object_unref (handle);
+ gst_video_codec_state_unref (output_state);
return GST_FLOW_ERROR;
}
surface =
@@ -261,9 +264,10 @@ gst_rsvg_dec_set_format (GstVideoDecoder * decoder, GstVideoCodecState * state)
rsvg->input_state = gst_video_codec_state_ref (state);
/* Create the output state */
- gst_video_decoder_set_output_state (decoder, GST_RSVG_VIDEO_FORMAT,
+ state = gst_video_decoder_set_output_state (decoder, GST_RSVG_VIDEO_FORMAT,
GST_VIDEO_INFO_WIDTH (info), GST_VIDEO_INFO_HEIGHT (info),
rsvg->input_state);
+ gst_video_codec_state_unref (state);
return TRUE;
}
diff --git a/ext/rtmp/gstrtmpsrc.c b/ext/rtmp/gstrtmpsrc.c
index a38b8b89..b6c40482 100644
--- a/ext/rtmp/gstrtmpsrc.c
+++ b/ext/rtmp/gstrtmpsrc.c
@@ -389,8 +389,14 @@ read_failed:
eos:
{
gst_buffer_unref (buf);
- GST_DEBUG_OBJECT (src, "Reading data gave EOS");
- return GST_FLOW_EOS;
+ if (src->cur_offset == 0) {
+ GST_ELEMENT_ERROR (src, RESOURCE, READ, (NULL),
+ ("Failed to read any data from stream, check your URL"));
+ return GST_FLOW_ERROR;
+ } else {
+ GST_DEBUG_OBJECT (src, "Reading data gave EOS");
+ return GST_FLOW_EOS;
+ }
}
}
diff --git a/ext/schroedinger/gstschrodec.c b/ext/schroedinger/gstschrodec.c
index 00f442eb..0a273fae 100644
--- a/ext/schroedinger/gstschrodec.c
+++ b/ext/schroedinger/gstschrodec.c
@@ -573,7 +573,7 @@ gst_schro_dec_decide_allocation (GstVideoDecoder * decoder, GstQuery * query)
gst_buffer_pool_config_add_option (config,
GST_BUFFER_POOL_OPTION_VIDEO_META);
}
-
+ gst_buffer_pool_set_config (pool, config);
gst_object_unref (pool);
return TRUE;
diff --git a/ext/smoothstreaming/Makefile.am b/ext/smoothstreaming/Makefile.am
index ad3314ac..a683f754 100644
--- a/ext/smoothstreaming/Makefile.am
+++ b/ext/smoothstreaming/Makefile.am
@@ -13,13 +13,11 @@ libgstsmoothstreaming_la_LIBADD = \
libgstsmoothstreaming_la_LDFLAGS = ${GST_PLUGIN_LDFLAGS}
libgstsmoothstreaming_la_SOURCES = gstsmoothstreaming-plugin.c \
gstmssdemux.c \
- gstmssmanifest.c \
- gstdownloadrate.c
+ gstmssmanifest.c
libgstsmoothstreaming_la_LIBTOOLFLAGS = --tag=disable-static
noinst_HEADERS = gstmssdemux.h \
- gstmssmanifest.h \
- gstdownloadrate.h
+ gstmssmanifest.h
Android.mk: Makefile.am $(BUILT_SOURCES)
androgenizer \
diff --git a/ext/smoothstreaming/Makefile.in b/ext/smoothstreaming/Makefile.in
index ca5a8672..4875022a 100644
--- a/ext/smoothstreaming/Makefile.in
+++ b/ext/smoothstreaming/Makefile.in
@@ -161,8 +161,7 @@ libgstsmoothstreaming_la_DEPENDENCIES = $(top_builddir)/gst-libs/gst/codecparser
am_libgstsmoothstreaming_la_OBJECTS = \
libgstsmoothstreaming_la-gstsmoothstreaming-plugin.lo \
libgstsmoothstreaming_la-gstmssdemux.lo \
- libgstsmoothstreaming_la-gstmssmanifest.lo \
- libgstsmoothstreaming_la-gstdownloadrate.lo
+ libgstsmoothstreaming_la-gstmssmanifest.lo
libgstsmoothstreaming_la_OBJECTS = \
$(am_libgstsmoothstreaming_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
@@ -743,13 +742,11 @@ libgstsmoothstreaming_la_LIBADD = \
libgstsmoothstreaming_la_LDFLAGS = ${GST_PLUGIN_LDFLAGS}
libgstsmoothstreaming_la_SOURCES = gstsmoothstreaming-plugin.c \
gstmssdemux.c \
- gstmssmanifest.c \
- gstdownloadrate.c
+ gstmssmanifest.c
libgstsmoothstreaming_la_LIBTOOLFLAGS = --tag=disable-static
noinst_HEADERS = gstmssdemux.h \
- gstmssmanifest.h \
- gstdownloadrate.h
+ gstmssmanifest.h
all: all-am
@@ -830,7 +827,6 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstsmoothstreaming_la-gstdownloadrate.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstsmoothstreaming_la-gstmssdemux.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstsmoothstreaming_la-gstmssmanifest.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstsmoothstreaming_la-gstsmoothstreaming-plugin.Plo@am__quote@
@@ -880,13 +876,6 @@ libgstsmoothstreaming_la-gstmssmanifest.lo: gstmssmanifest.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstsmoothstreaming_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsmoothstreaming_la_CFLAGS) $(CFLAGS) -c -o libgstsmoothstreaming_la-gstmssmanifest.lo `test -f 'gstmssmanifest.c' || echo '$(srcdir)/'`gstmssmanifest.c
-libgstsmoothstreaming_la-gstdownloadrate.lo: gstdownloadrate.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstsmoothstreaming_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsmoothstreaming_la_CFLAGS) $(CFLAGS) -MT libgstsmoothstreaming_la-gstdownloadrate.lo -MD -MP -MF $(DEPDIR)/libgstsmoothstreaming_la-gstdownloadrate.Tpo -c -o libgstsmoothstreaming_la-gstdownloadrate.lo `test -f 'gstdownloadrate.c' || echo '$(srcdir)/'`gstdownloadrate.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstsmoothstreaming_la-gstdownloadrate.Tpo $(DEPDIR)/libgstsmoothstreaming_la-gstdownloadrate.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstdownloadrate.c' object='libgstsmoothstreaming_la-gstdownloadrate.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstsmoothstreaming_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstsmoothstreaming_la_CFLAGS) $(CFLAGS) -c -o libgstsmoothstreaming_la-gstdownloadrate.lo `test -f 'gstdownloadrate.c' || echo '$(srcdir)/'`gstdownloadrate.c
-
mostlyclean-libtool:
-rm -f *.lo
diff --git a/ext/smoothstreaming/gstdownloadrate.c b/ext/smoothstreaming/gstdownloadrate.c
deleted file mode 100644
index ce25b18b..00000000
--- a/ext/smoothstreaming/gstdownloadrate.c
+++ /dev/null
@@ -1,113 +0,0 @@
-/* GStreamer
- * Copyright (C) 2011 Andoni Morales Alastruey <ylatuya@gmail.com>
- * Copyright (C) 2012 Smart TV Alliance
- * Author: Louis-Francis Ratté-Boulianne <lfrb@collabora.com>, Collabora Ltd.
- *
- * gstfragment.c:
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include <glib.h>
-#include "gstdownloadrate.h"
-
-static void
-_gst_download_rate_check_remove_rates (GstDownloadRate * rate)
-{
- if (rate->max_length == 0)
- return;
-
- while (g_queue_get_length (&rate->queue) > rate->max_length) {
- guint bitrate = GPOINTER_TO_UINT (g_queue_pop_head (&rate->queue));
-
- rate->total -= bitrate;
- }
-}
-
-void
-gst_download_rate_init (GstDownloadRate * rate)
-{
- g_queue_init (&rate->queue);
- g_mutex_init (&rate->mutex);
- rate->total = 0;
- rate->max_length = 0;
-}
-
-void
-gst_download_rate_deinit (GstDownloadRate * rate)
-{
- gst_download_rate_clear (rate);
- g_mutex_clear (&rate->mutex);
-}
-
-void
-gst_download_rate_set_max_length (GstDownloadRate * rate, gint max_length)
-{
- g_mutex_lock (&rate->mutex);
- rate->max_length = max_length;
- _gst_download_rate_check_remove_rates (rate);
- g_mutex_unlock (&rate->mutex);
-}
-
-gint
-gst_download_rate_get_max_length (GstDownloadRate * rate)
-{
- guint ret;
- g_mutex_lock (&rate->mutex);
- ret = rate->max_length;
- g_mutex_unlock (&rate->mutex);
-
- return ret;
-}
-
-void
-gst_download_rate_clear (GstDownloadRate * rate)
-{
- g_mutex_lock (&rate->mutex);
- g_queue_clear (&rate->queue);
- rate->total = 0;
- g_mutex_unlock (&rate->mutex);
-}
-
-void
-gst_download_rate_add_rate (GstDownloadRate * rate, guint bytes, guint64 time)
-{
- guint64 bitrate;
- g_mutex_lock (&rate->mutex);
-
- /* convert from bytes / nanoseconds to bits per second */
- bitrate = G_GUINT64_CONSTANT (8000000000) * bytes / time;
-
- g_queue_push_tail (&rate->queue, GUINT_TO_POINTER ((guint) bitrate));
- rate->total += bitrate;
-
- _gst_download_rate_check_remove_rates (rate);
- g_mutex_unlock (&rate->mutex);
-}
-
-guint
-gst_download_rate_get_current_rate (GstDownloadRate * rate)
-{
- guint ret;
- g_mutex_lock (&rate->mutex);
- if (g_queue_get_length (&rate->queue))
- ret = rate->total / g_queue_get_length (&rate->queue);
- else
- ret = G_MAXUINT;
- g_mutex_unlock (&rate->mutex);
-
- return ret;
-}
diff --git a/ext/smoothstreaming/gstdownloadrate.h b/ext/smoothstreaming/gstdownloadrate.h
deleted file mode 100644
index 2ea704b2..00000000
--- a/ext/smoothstreaming/gstdownloadrate.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* GStreamer
- * Copyright (C) 2012 Smart TV Alliance
- * Author: Thiago Sousa Santos <thiago.sousa.santos@collabora.com>, Collabora Ltd.
- *
- * gstdownloadrate.h:
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __GST_DOWNLOAD_RATE_H__
-#define __GST_DOWNLOAD_RATE_H__
-
-#include <glib-object.h>
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-typedef struct _GstDownloadRate GstDownloadRate;
-
-struct _GstDownloadRate
-{
- GQueue queue;
- GMutex mutex;
-
- gint max_length;
-
- guint64 total;
-};
-
-void gst_download_rate_init (GstDownloadRate * rate);
-void gst_download_rate_deinit (GstDownloadRate * rate);
-
-void gst_download_rate_set_max_length (GstDownloadRate * rate, gint max_length);
-gint gst_download_rate_get_max_length (GstDownloadRate * rate);
-
-void gst_download_rate_clear (GstDownloadRate * rate);
-void gst_download_rate_add_rate (GstDownloadRate * rate, guint bytes, guint64 time);
-
-guint gst_download_rate_get_current_rate (GstDownloadRate * rate);
-
-G_END_DECLS
-#endif /* __GST_DOWNLOAD_RATE_H__ */
diff --git a/ext/smoothstreaming/gstmssdemux.c b/ext/smoothstreaming/gstmssdemux.c
index 15326b7e..14954f08 100644
--- a/ext/smoothstreaming/gstmssdemux.c
+++ b/ext/smoothstreaming/gstmssdemux.c
@@ -81,7 +81,6 @@ GST_DEBUG_CATEGORY (mssdemux_debug);
#define DEFAULT_MAX_QUEUE_SIZE_BUFFERS 0
#define DEFAULT_BITRATE_LIMIT 0.8
-#define DOWNLOAD_RATE_MAX_HISTORY_LENGTH 5
#define MAX_DOWNLOAD_ERROR_COUNT 3
enum
@@ -114,7 +113,7 @@ GST_STATIC_PAD_TEMPLATE ("audio_%02u",
GST_STATIC_CAPS_ANY);
#define gst_mss_demux_parent_class parent_class
-G_DEFINE_TYPE (GstMssDemux, gst_mss_demux, GST_TYPE_ELEMENT);
+G_DEFINE_TYPE (GstMssDemux, gst_mss_demux, GST_TYPE_BIN);
static void gst_mss_demux_dispose (GObject * object);
static void gst_mss_demux_set_property (GObject * object, guint prop_id,
@@ -123,6 +122,7 @@ static void gst_mss_demux_get_property (GObject * object, guint prop_id,
GValue * value, GParamSpec * pspec);
static GstStateChangeReturn gst_mss_demux_change_state (GstElement * element,
GstStateChange transition);
+static void gst_mss_demux_handle_message (GstBin * bin, GstMessage * msg);
static GstFlowReturn gst_mss_demux_chain (GstPad * pad, GstObject * parent,
GstBuffer * buffer);
static GstFlowReturn gst_mss_demux_event (GstPad * pad, GstObject * parent,
@@ -131,8 +131,6 @@ static gboolean gst_mss_demux_src_query (GstPad * pad, GstObject * parent,
GstQuery * query);
static void gst_mss_demux_download_loop (GstMssDemuxStream * stream);
-static GstFlowReturn gst_mss_demux_stream_push (GstMssDemuxStream * stream,
- GstBuffer * buffer);
static GstFlowReturn gst_mss_demux_stream_push_event (GstMssDemuxStream *
stream, GstEvent * event);
static GstFlowReturn gst_mss_demux_combine_flows (GstMssDemux * mssdemux);
@@ -146,9 +144,11 @@ gst_mss_demux_class_init (GstMssDemuxClass * klass)
{
GObjectClass *gobject_class;
GstElementClass *gstelement_class;
+ GstBinClass *gstbin_class;
gobject_class = (GObjectClass *) klass;
gstelement_class = (GstElementClass *) klass;
+ gstbin_class = (GstBinClass *) klass;
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&gst_mss_demux_sink_template));
@@ -174,7 +174,8 @@ gst_mss_demux_class_init (GstMssDemuxClass * klass)
g_object_class_install_property (gobject_class, PROP_MAX_QUEUE_SIZE_BUFFERS,
g_param_spec_uint ("max-queue-size-buffers", "Max queue size in buffers",
"Maximum buffers that can be stored in each internal stream queue "
- "(0 = infinite)", 0, G_MAXUINT, DEFAULT_MAX_QUEUE_SIZE_BUFFERS,
+ "(0 = infinite) (deprecated)", 0, G_MAXUINT,
+ DEFAULT_MAX_QUEUE_SIZE_BUFFERS,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property (gobject_class, PROP_BITRATE_LIMIT,
@@ -187,6 +188,8 @@ gst_mss_demux_class_init (GstMssDemuxClass * klass)
gstelement_class->change_state =
GST_DEBUG_FUNCPTR (gst_mss_demux_change_state);
+ gstbin_class->handle_message = gst_mss_demux_handle_message;
+
GST_DEBUG_CATEGORY_INIT (mssdemux_debug, "mssdemux", 0, "mssdemux plugin");
}
@@ -215,7 +218,6 @@ gst_mss_demux_stream_new (GstMssDemux * mssdemux,
GstMssDemuxStream *stream;
stream = g_new0 (GstMssDemuxStream, 1);
- stream->downloader = gst_uri_downloader_new ();
/* Downloading task */
g_rec_mutex_init (&stream->download_lock);
@@ -227,11 +229,10 @@ gst_mss_demux_stream_new (GstMssDemux * mssdemux,
stream->pad = srcpad;
stream->manifest_stream = manifeststream;
stream->parent = mssdemux;
- gst_download_rate_init (&stream->download_rate);
- gst_download_rate_set_max_length (&stream->download_rate,
- DOWNLOAD_RATE_MAX_HISTORY_LENGTH);
gst_segment_init (&stream->segment, GST_FORMAT_TIME);
+ g_cond_init (&stream->fragment_download_cond);
+ g_mutex_init (&stream->fragment_download_lock);
return stream;
}
@@ -243,7 +244,7 @@ gst_mss_demux_stream_free (GstMssDemuxStream * stream)
if (GST_TASK_STATE (stream->download_task) != GST_TASK_STOPPED) {
GST_DEBUG_OBJECT (stream->parent, "Leaving streaming task %s:%s",
GST_DEBUG_PAD_NAME (stream->pad));
- gst_uri_downloader_cancel (stream->downloader);
+ g_cond_signal (&stream->fragment_download_cond);
gst_task_stop (stream->download_task);
GST_LOG_OBJECT (stream->parent, "Waiting for task to finish");
gst_task_join (stream->download_task);
@@ -254,16 +255,25 @@ gst_mss_demux_stream_free (GstMssDemuxStream * stream)
stream->download_task = NULL;
}
- gst_download_rate_deinit (&stream->download_rate);
- if (stream->pending_newsegment) {
- gst_event_unref (stream->pending_newsegment);
- stream->pending_newsegment = NULL;
+ if (stream->pending_segment) {
+ gst_event_unref (stream->pending_segment);
+ stream->pending_segment = NULL;
+ }
+
+ if (stream->src_srcpad) {
+ gst_object_unref (stream->src_srcpad);
+ stream->src_srcpad = NULL;
}
- if (stream->downloader != NULL) {
- g_object_unref (stream->downloader);
- stream->downloader = NULL;
+ if (stream->src) {
+ gst_element_set_state (stream->src, GST_STATE_NULL);
+ gst_bin_remove (GST_BIN_CAST (stream->parent), stream->src);
+ stream->src = NULL;
}
+
+ g_cond_clear (&stream->fragment_download_cond);
+ g_mutex_clear (&stream->fragment_download_lock);
+
if (stream->pad) {
gst_object_unref (stream->pad);
stream->pad = NULL;
@@ -389,6 +399,49 @@ gst_mss_demux_change_state (GstElement * element, GstStateChange transition)
return result;
}
+static void
+gst_mss_demux_handle_message (GstBin * bin, GstMessage * msg)
+{
+ GstMssDemux *demux = GST_MSS_DEMUX_CAST (bin);
+
+ switch (GST_MESSAGE_TYPE (msg)) {
+ case GST_MESSAGE_ERROR:{
+ GSList *iter;
+ GstMssDemuxStream *stream;
+ GError *err = NULL;
+ gchar *debug = NULL;
+
+ for (iter = demux->streams; iter; iter = g_slist_next (iter)) {
+ stream = iter->data;
+ if (GST_OBJECT_CAST (stream->src) == GST_MESSAGE_SRC (msg)) {
+ gst_message_parse_error (msg, &err, &debug);
+
+ GST_WARNING_OBJECT (stream->pad, "Source posted error: %d:%d %s (%s)",
+ err->domain, err->code, err->message, debug);
+
+ /* error, but ask to retry */
+ stream->last_ret = GST_FLOW_CUSTOM_ERROR;
+ g_cond_signal (&stream->fragment_download_cond);
+
+ g_error_free (err);
+ g_free (debug);
+ break;
+ }
+ }
+
+ gst_message_unref (msg);
+ msg = NULL;
+ }
+ break;
+ default:
+ break;
+ }
+
+ if (msg)
+ GST_BIN_CLASS (parent_class)->handle_message (bin, msg);
+}
+
+
static GstFlowReturn
gst_mss_demux_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
{
@@ -479,7 +532,7 @@ gst_mss_demux_stop_tasks (GstMssDemux * mssdemux, gboolean immediate)
gst_task_stop (stream->download_task);
stream->cancelled = TRUE;
if (immediate)
- gst_uri_downloader_cancel (stream->downloader);
+ g_cond_signal (&stream->fragment_download_cond);
}
GST_OBJECT_UNLOCK (mssdemux);
@@ -497,7 +550,6 @@ gst_mss_demux_restart_tasks (GstMssDemux * mssdemux)
GSList *iter;
for (iter = mssdemux->streams; iter; iter = g_slist_next (iter)) {
GstMssDemuxStream *stream = iter->data;
- gst_uri_downloader_reset (stream->downloader);
stream->cancelled = FALSE;
gst_task_start (stream->download_task);
}
@@ -562,9 +614,9 @@ gst_mss_demux_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
newsegment = gst_event_new_segment (&stream->segment);
gst_event_set_seqnum (newsegment, gst_event_get_seqnum (event));
- if (stream->pending_newsegment)
- gst_event_unref (stream->pending_newsegment);
- stream->pending_newsegment = newsegment;
+ if (stream->pending_segment)
+ gst_event_unref (stream->pending_segment);
+ stream->pending_segment = newsegment;
}
if (flags & GST_SEEK_FLAG_FLUSH) {
@@ -601,6 +653,13 @@ gst_mss_demux_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
}
}
break;
+ case GST_EVENT_LATENCY:{
+ /* Upstream and our internal source are irrelevant
+ * for latency, and we should not fail here to
+ * configure the latency */
+ gst_event_unref (event);
+ return TRUE;
+ }
default:
break;
}
@@ -698,9 +757,10 @@ _set_src_pad_functions (GstPad * pad)
static GstPad *
_create_pad (GstMssDemux * mssdemux, GstMssStream * manifeststream)
{
- gchar *name;
+ gchar *name = NULL;
GstPad *srcpad = NULL;
GstMssStreamType streamtype;
+ GstPadTemplate *tmpl = NULL;
streamtype = gst_mss_stream_get_type (manifeststream);
GST_DEBUG_OBJECT (mssdemux, "Found stream of type: %s",
@@ -709,18 +769,18 @@ _create_pad (GstMssDemux * mssdemux, GstMssStream * manifeststream)
/* TODO use stream's name/bitrate/index as the pad name? */
if (streamtype == MSS_STREAM_TYPE_VIDEO) {
name = g_strdup_printf ("video_%02u", mssdemux->n_videos++);
- srcpad =
- gst_pad_new_from_static_template (&gst_mss_demux_videosrc_template,
- name);
- g_free (name);
+ tmpl = gst_static_pad_template_get (&gst_mss_demux_videosrc_template);
} else if (streamtype == MSS_STREAM_TYPE_AUDIO) {
name = g_strdup_printf ("audio_%02u", mssdemux->n_audios++);
+ tmpl = gst_static_pad_template_get (&gst_mss_demux_audiosrc_template);
+ }
+
+ if (tmpl != NULL) {
srcpad =
- gst_pad_new_from_static_template (&gst_mss_demux_audiosrc_template,
- name);
+ GST_PAD_CAST (gst_ghost_pad_new_no_target_from_template (name, tmpl));
g_free (name);
+ gst_object_unref (tmpl);
}
-
if (!srcpad) {
GST_WARNING_OBJECT (mssdemux, "Ignoring unknown type stream");
return NULL;
@@ -756,6 +816,7 @@ gst_mss_demux_create_streams (GstMssDemux * mssdemux)
}
stream = gst_mss_demux_stream_new (mssdemux, manifeststream, srcpad);
+ gst_pad_set_element_private (srcpad, stream);
gst_mss_stream_set_active (manifeststream, TRUE);
mssdemux->streams = g_slist_append (mssdemux->streams, stream);
}
@@ -822,6 +883,8 @@ gst_mss_demux_expose_stream (GstMssDemux * mssdemux, GstMssDemuxStream * stream)
g_free (name);
gst_pad_set_caps (pad, caps);
+ if (stream->caps)
+ gst_caps_unref (stream->caps);
stream->caps = caps;
lang = gst_mss_stream_get_lang (stream->manifest_stream);
@@ -940,7 +1003,7 @@ gst_mss_demux_reload_manifest (GstMssDemux * mssdemux)
manifest_data =
gst_uri_downloader_fetch_uri (downloader, mssdemux->manifest_uri, NULL,
- TRUE, TRUE, NULL);
+ TRUE, TRUE, TRUE, NULL);
manifest_buffer = gst_fragment_get_buffer (manifest_data);
g_object_unref (manifest_data);
@@ -956,19 +1019,28 @@ gst_mss_demux_reconfigure_stream (GstMssDemuxStream * stream)
{
GstEvent *capsevent = NULL;
GstMssDemux *mssdemux = stream->parent;
- guint64 new_bitrate;
+ guint64 bitrate = 0;
+
+ if (stream->download_total_time)
+ bitrate =
+ (stream->download_total_bytes * 8) /
+ ((double) stream->download_total_time / G_GUINT64_CONSTANT (1000000));
+
+ if (stream->current_download_rate != -1)
+ bitrate = (stream->current_download_rate + bitrate * 3) / 4;
+ if (bitrate > G_MAXINT)
+ bitrate = G_MAXINT;
+ stream->current_download_rate = bitrate;
+ bitrate *= mssdemux->bitrate_limit;
- new_bitrate =
- mssdemux->bitrate_limit *
- gst_download_rate_get_current_rate (&stream->download_rate);
if (mssdemux->connection_speed) {
- new_bitrate = MIN (mssdemux->connection_speed, new_bitrate);
+ bitrate = MIN (mssdemux->connection_speed, bitrate);
}
GST_DEBUG_OBJECT (stream->pad,
- "Current stream download bitrate %" G_GUINT64_FORMAT, new_bitrate);
+ "Current stream download bitrate %" G_GUINT64_FORMAT, bitrate);
- if (gst_mss_stream_select_bitrate (stream->manifest_stream, new_bitrate)) {
+ if (gst_mss_stream_select_bitrate (stream->manifest_stream, bitrate)) {
GstCaps *caps;
caps = gst_mss_stream_get_caps (stream->manifest_stream);
@@ -977,13 +1049,14 @@ gst_mss_demux_reconfigure_stream (GstMssDemuxStream * stream)
if (stream->caps)
gst_caps_unref (stream->caps);
stream->caps = create_mss_caps (stream, caps);
- gst_caps_unref (caps);
GST_DEBUG_OBJECT (stream->pad,
"Stream changed bitrate to %" G_GUINT64_FORMAT " caps: %"
GST_PTR_FORMAT,
gst_mss_stream_get_current_bitrate (stream->manifest_stream), caps);
+ gst_caps_unref (caps);
+
capsevent = gst_event_new_caps (stream->caps);
GST_DEBUG_OBJECT (stream->pad, "Finished streams reconfiguration");
}
@@ -991,16 +1064,281 @@ gst_mss_demux_reconfigure_stream (GstMssDemuxStream * stream)
}
static GstFlowReturn
-gst_mss_demux_stream_download_fragment (GstMssDemuxStream * stream,
- GstBuffer ** _buffer)
+_src_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
+{
+ GstPad *srcpad = (GstPad *) parent;
+ GstMssDemux *demux = (GstMssDemux *) GST_PAD_PARENT (srcpad);
+ GstMssDemuxStream *stream = gst_pad_get_element_private (srcpad);
+ GstFlowReturn ret;
+ gboolean discont = FALSE;
+
+ if (stream->starting_fragment) {
+#if 0
+ if (demux->segment.rate < 0)
+ /* Set DISCONT flag for every first buffer in reverse playback mode
+ * as each fragment for its own has to be reversed */
+ discont = TRUE;
+#endif
+ stream->starting_fragment = FALSE;
+
+ GST_BUFFER_PTS (buffer) =
+ gst_mss_stream_get_fragment_gst_timestamp (stream->manifest_stream);
+
+ GST_LOG_OBJECT (stream->pad, "set fragment pts=%" GST_TIME_FORMAT,
+ GST_TIME_ARGS (GST_BUFFER_PTS (buffer)));
+
+ if (stream->pending_segment) {
+ /* And send a newsegment */
+ gst_pad_push_event (stream->pad, stream->pending_segment);
+ stream->pending_segment = NULL;
+ }
+ stream->segment.position = GST_BUFFER_PTS (buffer);
+
+ } else {
+ GST_BUFFER_PTS (buffer) = GST_CLOCK_TIME_NONE;
+ }
+
+ if (discont) {
+ GST_DEBUG_OBJECT (stream->pad, "Marking fragment as discontinuous");
+ GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
+ } else {
+ GST_BUFFER_FLAG_UNSET (buffer, GST_BUFFER_FLAG_DISCONT);
+ }
+
+ GST_BUFFER_DURATION (buffer) = GST_CLOCK_TIME_NONE;
+ GST_BUFFER_DTS (buffer) = GST_CLOCK_TIME_NONE;
+
+ /* accumulate time and size to get this chunk */
+ stream->download_total_time +=
+ g_get_monotonic_time () - stream->download_start_time;
+ stream->download_total_bytes += gst_buffer_get_size (buffer);
+
+ stream->have_data = TRUE;
+
+ ret = gst_proxy_pad_chain_default (pad, parent, buffer);
+ stream->download_start_time = g_get_monotonic_time ();
+ GST_LOG_OBJECT (pad, "Chain res: %d %s", ret, gst_flow_get_name (ret));
+
+ if (ret != GST_FLOW_OK) {
+ if (ret < GST_FLOW_EOS) {
+ GST_ELEMENT_ERROR (demux, STREAM, FAILED, (NULL),
+ ("stream stopped, reason %s", gst_flow_get_name (ret)));
+
+ /* TODO push this on all pads */
+ gst_pad_push_event (stream->pad, gst_event_new_eos ());
+ } else {
+ GST_DEBUG_OBJECT (stream->pad, "stream stopped, reason %s",
+ gst_flow_get_name (ret));
+ }
+
+ /* TODO properly stop tasks */
+ /* gst_hls_demux_pause_tasks (demux); */
+ }
+
+ /* avoid having the source handle the same error again */
+ stream->last_ret = ret;
+ ret = GST_FLOW_OK;
+
+ return ret;
+}
+
+static gboolean
+_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+ GstPad *srcpad = GST_PAD_CAST (parent);
+ GstMssDemuxStream *stream = gst_pad_get_element_private (srcpad);
+
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_EOS:
+ g_cond_signal (&stream->fragment_download_cond);
+ break;
+ default:
+ break;
+ }
+
+ gst_event_unref (event);
+
+ return TRUE;
+}
+
+static gboolean
+_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
+{
+ switch (GST_QUERY_TYPE (query)) {
+ case GST_QUERY_ALLOCATION:
+ return FALSE;
+ break;
+ default:
+ break;
+ }
+
+ return gst_pad_query_default (pad, parent, query);
+}
+
+static gboolean
+gst_mss_demux_stream_update_source (GstMssDemuxStream * stream,
+ const gchar * uri, const gchar * referer, gboolean refresh,
+ gboolean allow_cache)
+{
+ GstMssDemux *demux = stream->parent;
+
+ if (!gst_uri_is_valid (uri)) {
+ GST_WARNING_OBJECT (stream->pad, "Invalid URI: %s", uri);
+ stream->last_ret = GST_FLOW_ERROR;
+ return FALSE;
+ }
+
+ if (stream->src != NULL) {
+ gchar *old_protocol, *new_protocol;
+ gchar *old_uri;
+
+ old_uri = gst_uri_handler_get_uri (GST_URI_HANDLER (stream->src));
+ old_protocol = gst_uri_get_protocol (old_uri);
+ new_protocol = gst_uri_get_protocol (uri);
+
+ if (!g_str_equal (old_protocol, new_protocol)) {
+ gst_object_unref (stream->src_srcpad);
+ gst_element_set_state (stream->src, GST_STATE_NULL);
+ gst_bin_remove (GST_BIN_CAST (demux), stream->src);
+ stream->src = NULL;
+ stream->src_srcpad = NULL;
+ GST_DEBUG_OBJECT (demux, "Can't re-use old source element");
+ } else {
+ GError *err = NULL;
+
+ GST_DEBUG_OBJECT (demux, "Re-using old source element");
+ if (!gst_uri_handler_set_uri (GST_URI_HANDLER (stream->src), uri, &err)) {
+ GST_DEBUG_OBJECT (demux, "Failed to re-use old source element: %s",
+ err->message);
+ g_clear_error (&err);
+ gst_element_set_state (stream->src, GST_STATE_NULL);
+ gst_bin_remove (GST_BIN_CAST (demux), stream->src);
+ stream->src = NULL;
+ }
+ }
+ g_free (old_uri);
+ g_free (old_protocol);
+ g_free (new_protocol);
+ }
+
+ if (stream->src == NULL) {
+ GObjectClass *gobject_class;
+ GstPad *internal_pad;
+
+ stream->src = gst_element_make_from_uri (GST_URI_SRC, uri, NULL, NULL);
+ if (stream->src == NULL) {
+ GST_ELEMENT_ERROR (demux, CORE, MISSING_PLUGIN,
+ ("Missing plugin to handle URI: '%s'", uri), (NULL));
+ return FALSE;
+ }
+
+ gobject_class = G_OBJECT_GET_CLASS (stream->src);
+
+ if (g_object_class_find_property (gobject_class, "compress"))
+ g_object_set (stream->src, "compress", FALSE, NULL);
+ if (g_object_class_find_property (gobject_class, "keep-alive"))
+ g_object_set (stream->src, "keep-alive", TRUE, NULL);
+ if (g_object_class_find_property (gobject_class, "extra-headers")) {
+ if (referer || refresh || !allow_cache) {
+ GstStructure *extra_headers = gst_structure_new_empty ("headers");
+
+ if (referer)
+ gst_structure_set (extra_headers, "Referer", G_TYPE_STRING, referer,
+ NULL);
+
+ if (!allow_cache)
+ gst_structure_set (extra_headers, "Cache-Control", G_TYPE_STRING,
+ "no-cache", NULL);
+ else if (refresh)
+ gst_structure_set (extra_headers, "Cache-Control", G_TYPE_STRING,
+ "max-age=0", NULL);
+
+ g_object_set (stream->src, "extra-headers", extra_headers, NULL);
+
+ gst_structure_free (extra_headers);
+ } else {
+ g_object_set (stream->src, "extra-headers", NULL, NULL);
+ }
+ }
+
+ gst_element_set_locked_state (stream->src, TRUE);
+ gst_bin_add (GST_BIN_CAST (demux), stream->src);
+ stream->src_srcpad = gst_element_get_static_pad (stream->src, "src");
+
+ gst_ghost_pad_set_target (GST_GHOST_PAD_CAST (stream->pad),
+ stream->src_srcpad);
+
+ /* set up our internal pad to drop all events from
+ * the http src we don't care about. On the chain function
+ * we just push the buffer forward, but this way dash can get
+ * the flow return from downstream */
+ internal_pad =
+ GST_PAD_CAST (gst_proxy_pad_get_internal (GST_PROXY_PAD (stream->pad)));
+ gst_pad_set_chain_function (GST_PAD_CAST (internal_pad), _src_chain);
+ gst_pad_set_event_function (GST_PAD_CAST (internal_pad), _src_event);
+ /* need to set query otherwise deadlocks happen with allocation queries */
+ gst_pad_set_query_function (GST_PAD_CAST (internal_pad), _src_query);
+ gst_object_unref (internal_pad);
+ }
+ return TRUE;
+}
+
+/* must be called with the stream's fragment_download_lock */
+static void
+gst_mss_demux_stream_download_uri (GstMssDemux * demux,
+ GstMssDemuxStream * stream, const gchar * uri, gint64 start, gint64 end)
+{
+ GST_DEBUG_OBJECT (stream->pad, "Downloading uri: %s, range:%" G_GINT64_FORMAT
+ " - %" G_GINT64_FORMAT, uri, start, end);
+
+ if (!gst_mss_demux_stream_update_source (stream, uri, NULL, FALSE, TRUE)) {
+ return;
+ }
+
+ if (gst_element_set_state (stream->src,
+ GST_STATE_READY) != GST_STATE_CHANGE_FAILURE) {
+ if (start != 0 || end != -1) {
+ if (!gst_element_send_event (stream->src, gst_event_new_seek (1.0,
+ GST_FORMAT_BYTES, (GstSeekFlags) GST_SEEK_FLAG_FLUSH,
+ GST_SEEK_TYPE_SET, start, GST_SEEK_TYPE_SET, end))) {
+
+ /* looks like the source can't handle seeks in READY */
+/*
+ *err = g_error_new (GST_CORE_ERROR, GST_CORE_ERROR_NOT_IMPLEMENTED,
+ "Source element can't handle range requests");
+*/
+ stream->last_ret = GST_FLOW_ERROR;
+ }
+ }
+
+ if (G_LIKELY (stream->last_ret == GST_FLOW_OK)) {
+ /* flush the proxypads so that the EOS state is reset */
+ gst_pad_push_event (stream->src_srcpad, gst_event_new_flush_start ());
+ gst_pad_push_event (stream->src_srcpad, gst_event_new_flush_stop (TRUE));
+
+ stream->download_start_time = g_get_monotonic_time ();
+ gst_element_sync_state_with_parent (stream->src);
+
+ /* wait for the fragment to be completely downloaded */
+ GST_DEBUG_OBJECT (stream->pad,
+ "Waiting for fragment download to finish: %s", uri);
+ g_cond_wait (&stream->fragment_download_cond,
+ &stream->fragment_download_lock);
+ }
+ } else {
+ stream->last_ret = GST_FLOW_CUSTOM_ERROR;
+ }
+
+ gst_element_set_state (stream->src, GST_STATE_READY);
+}
+
+static GstFlowReturn
+gst_mss_demux_stream_download_fragment (GstMssDemuxStream * stream)
{
GstMssDemux *mssdemux = stream->parent;
- gchar *path;
- gchar *url;
- GstFragment *fragment;
- GstBuffer *buffer;
+ gchar *path = NULL;
+ gchar *url = NULL;
GstFlowReturn ret = GST_FLOW_OK;
- guint64 before_download, after_download;
/* special case for not-linked streams */
if (stream->last_ret == GST_FLOW_NOT_LINKED) {
@@ -1009,20 +1347,24 @@ gst_mss_demux_stream_download_fragment (GstMssDemuxStream * stream,
return GST_FLOW_NOT_LINKED;
}
- before_download = g_get_real_time ();
-
+ g_mutex_lock (&stream->fragment_download_lock);
GST_DEBUG_OBJECT (stream->pad, "Getting url for stream");
ret = gst_mss_stream_get_fragment_url (stream->manifest_stream, &path);
switch (ret) {
case GST_FLOW_OK:
break; /* all is good, let's go */
case GST_FLOW_EOS:
+ g_free (path);
if (gst_mss_manifest_is_live (mssdemux->manifest)) {
gst_mss_demux_reload_manifest (mssdemux);
+ g_mutex_unlock (&stream->fragment_download_lock);
return GST_FLOW_OK;
}
+ g_mutex_unlock (&stream->fragment_download_lock);
return GST_FLOW_EOS;
case GST_FLOW_ERROR:
+ g_mutex_unlock (&stream->fragment_download_lock);
+ g_free (path);
goto error;
default:
break;
@@ -1036,48 +1378,26 @@ gst_mss_demux_stream_download_fragment (GstMssDemuxStream * stream,
GST_DEBUG_OBJECT (mssdemux, "Got url '%s' for stream %p", url, stream);
- fragment =
- gst_uri_downloader_fetch_uri (stream->downloader, url,
- mssdemux->manifest_uri, FALSE, FALSE, NULL);
+ stream->starting_fragment = TRUE;
+
+ gst_mss_demux_stream_download_uri (mssdemux, stream, url, 0, -1);
+
g_free (path);
g_free (url);
+ g_mutex_unlock (&stream->fragment_download_lock);
- if (!fragment) {
+ if (stream->last_ret != GST_FLOW_OK) {
GST_INFO_OBJECT (mssdemux, "No fragment downloaded");
/* TODO check if we are truly stoping */
- if (gst_mss_manifest_is_live (mssdemux->manifest)) {
+ if (stream->last_ret != GST_FLOW_ERROR
+ && gst_mss_manifest_is_live (mssdemux->manifest)) {
/* looks like there is no way of knowing when a live stream has ended
* Have to assume we are falling behind and cause a manifest reload */
return GST_FLOW_OK;
}
- return GST_FLOW_ERROR;
- }
-
- buffer = gst_fragment_get_buffer (fragment);
- *_buffer = buffer = gst_buffer_make_writable (buffer);
- GST_BUFFER_TIMESTAMP (buffer) =
- gst_mss_stream_get_fragment_gst_timestamp (stream->manifest_stream);
- GST_BUFFER_DURATION (buffer) =
- gst_mss_stream_get_fragment_gst_duration (stream->manifest_stream);
-
- g_object_unref (fragment);
-
- after_download = g_get_real_time ();
- {
-#ifndef GST_DISABLE_GST_DEBUG
- guint64 bitrate = (8 * gst_buffer_get_size (buffer) * 1000000LLU) /
- (after_download - before_download);
-#endif
-
- GST_DEBUG_OBJECT (mssdemux,
- "Measured download bitrate: %s %" G_GUINT64_FORMAT " bps",
- GST_PAD_NAME (stream->pad), bitrate);
- gst_download_rate_add_rate (&stream->download_rate,
- gst_buffer_get_size (buffer),
- 1000 * (after_download - before_download));
}
- return ret;
+ return stream->last_ret;
no_url_error:
{
@@ -1100,8 +1420,6 @@ gst_mss_demux_download_loop (GstMssDemuxStream * stream)
{
GstMssDemux *mssdemux = stream->parent;
GstFlowReturn ret;
- GstBuffer *buffer = NULL;
- gboolean buffer_downloaded = FALSE;
GstEvent *gap = NULL;
GstEvent *capsevent = NULL;
@@ -1115,8 +1433,7 @@ gst_mss_demux_download_loop (GstMssDemuxStream * stream)
GST_DEBUG_OBJECT (stream->pad,
"Activating stream due to reconfigure event");
- cur = GST_CLOCK_TIME_IS_VALID (stream->next_timestamp) ?
- stream->next_timestamp : 0;
+ cur = stream->segment.position;
if (gst_pad_peer_query_position (stream->pad, GST_FORMAT_TIME, &pos)) {
ts = (GstClockTime) pos;
@@ -1129,7 +1446,7 @@ gst_mss_demux_download_loop (GstMssDemuxStream * stream)
}
/* we might have already pushed this data */
- ts = MAX (ts, stream->next_timestamp);
+ ts = MAX (ts, cur);
GST_DEBUG_OBJECT (stream->pad, "Restarting stream at "
"position %" GST_TIME_FORMAT, GST_TIME_ARGS (ts));
@@ -1153,32 +1470,21 @@ gst_mss_demux_download_loop (GstMssDemuxStream * stream)
if (G_UNLIKELY (capsevent != NULL))
gst_pad_push_event (stream->pad, capsevent);
- ret = gst_mss_demux_stream_download_fragment (stream, &buffer);
- buffer_downloaded = buffer != NULL;
-
- GST_OBJECT_LOCK (mssdemux);
- if (stream->cancelled) {
- if (buffer)
- gst_buffer_unref (buffer);
- GST_OBJECT_UNLOCK (mssdemux);
- goto cancelled;
- }
- GST_OBJECT_UNLOCK (mssdemux);
-
- if (buffer) {
- ret = gst_mss_demux_stream_push (stream, buffer);
- }
+ ret = gst_mss_demux_stream_download_fragment (stream);
GST_OBJECT_LOCK (mssdemux);
- stream->last_ret = ret;
-
if (stream->cancelled) {
GST_OBJECT_UNLOCK (mssdemux);
+ stream->last_ret = GST_FLOW_FLUSHING;
goto cancelled;
}
switch (ret) {
case GST_FLOW_OK:
+ stream->download_error_count = 0;
+ stream->segment.position +=
+ gst_mss_stream_get_fragment_gst_duration (stream->manifest_stream);
+ gst_mss_stream_advance_fragment (stream->manifest_stream);
break; /* all is good, let's go */
case GST_FLOW_EOS:
@@ -1211,16 +1517,9 @@ gst_mss_demux_download_loop (GstMssDemuxStream * stream)
default:
if (ret <= GST_FLOW_ERROR) {
- if (buffer_downloaded) {
- GST_ERROR_OBJECT (mssdemux, "Error while pushing fragment");
- } else {
- GST_WARNING_OBJECT (mssdemux, "Error while downloading fragment");
- if (++stream->download_error_count >=
- DOWNLOAD_RATE_MAX_HISTORY_LENGTH) {
- GST_ELEMENT_ERROR (mssdemux, RESOURCE, NOT_FOUND,
- (_("Couldn't download fragments")),
- ("fragment downloading has failed too much consecutive times"));
- }
+ GST_WARNING_OBJECT (mssdemux, "Error while downloading fragment");
+ if (++stream->download_error_count >= MAX_DOWNLOAD_ERROR_COUNT) {
+ goto download_error;
}
}
break;
@@ -1231,18 +1530,22 @@ gst_mss_demux_download_loop (GstMssDemuxStream * stream)
gst_mss_demux_stream_push_event (stream, gst_event_new_eos ());
}
- if (buffer_downloaded) {
- stream->download_error_count = 0;
- gst_mss_stream_advance_fragment (stream->manifest_stream);
- }
-
+end:
GST_LOG_OBJECT (stream->pad, "download loop end");
return;
cancelled:
{
GST_DEBUG_OBJECT (stream->pad, "Stream has been cancelled");
- return;
+ goto end;
+ }
+download_error:
+ {
+ GST_OBJECT_UNLOCK (mssdemux);
+ GST_ELEMENT_ERROR (mssdemux, RESOURCE, NOT_FOUND,
+ (_("Couldn't download fragments")),
+ ("fragment downloading has failed too much consecutive times"));
+ goto end;
}
}
@@ -1268,44 +1571,6 @@ gst_mss_demux_combine_flows (GstMssDemux * mssdemux)
}
static gboolean
-gst_mss_demux_stream_push (GstMssDemuxStream * stream, GstBuffer * buf)
-{
- GstFlowReturn ret;
-
- if (G_UNLIKELY (stream->pending_newsegment)) {
- gst_pad_push_event (stream->pad, stream->pending_newsegment);
- stream->pending_newsegment = NULL;
- }
-
- if (GST_BUFFER_TIMESTAMP (buf) != stream->next_timestamp) {
- GST_DEBUG_OBJECT (stream->pad, "Marking buffer %p as discont buffer:%"
- GST_TIME_FORMAT " != expected:%" GST_TIME_FORMAT, buf,
- GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
- GST_TIME_ARGS (stream->next_timestamp));
- GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT);
- }
-
- GST_DEBUG_OBJECT (stream->pad,
- "Pushing buffer %p %" GST_TIME_FORMAT ", duration %" GST_TIME_FORMAT
- " discont:%d", buf,
- GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
- GST_TIME_ARGS (GST_BUFFER_DURATION (buf)),
- GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_DISCONT));
-
- stream->next_timestamp =
- GST_BUFFER_TIMESTAMP (buf) + GST_BUFFER_DURATION (buf);
-
- stream->have_data = TRUE;
- stream->segment.position = GST_BUFFER_TIMESTAMP (buf);
-
- ret = gst_pad_push (stream->pad, GST_BUFFER_CAST (buf));
- GST_DEBUG_OBJECT (stream->pad, "Pushed. result: %d (%s)",
- ret, gst_flow_get_name (ret));
-
- return ret;
-}
-
-static gboolean
gst_mss_demux_stream_push_event (GstMssDemuxStream * stream, GstEvent * event)
{
gboolean ret;
diff --git a/ext/smoothstreaming/gstmssdemux.h b/ext/smoothstreaming/gstmssdemux.h
index 72cb1d1f..284c59d2 100644
--- a/ext/smoothstreaming/gstmssdemux.h
+++ b/ext/smoothstreaming/gstmssdemux.h
@@ -28,7 +28,6 @@
#include <gst/base/gstdataqueue.h>
#include "gstmssmanifest.h"
#include <gst/uridownloader/gsturidownloader.h>
-#include "gstdownloadrate.h"
G_BEGIN_DECLS
@@ -61,11 +60,12 @@ struct _GstMssDemuxStream {
GstMssStream *manifest_stream;
+#if 0
GstUriDownloader *downloader;
+#endif
- GstEvent *pending_newsegment;
+ GstEvent *pending_segment;
- GstClockTime next_timestamp;
GstSegment segment;
/* Downloading task */
@@ -78,13 +78,22 @@ struct _GstMssDemuxStream {
gboolean cancelled;
gboolean restart_download;
- GstDownloadRate download_rate;
-
guint download_error_count;
+
+ /* download tooling */
+ GstElement *src;
+ GstPad *src_srcpad;
+ GMutex fragment_download_lock;
+ GCond fragment_download_cond;
+ gboolean starting_fragment;
+ gint64 download_start_time;
+ gint64 download_total_time;
+ gint64 download_total_bytes;
+ gint current_download_rate;
};
struct _GstMssDemux {
- GstElement element;
+ GstBin bin;
/* pads */
GstPad *sinkpad;
@@ -111,7 +120,7 @@ struct _GstMssDemux {
};
struct _GstMssDemuxClass {
- GstElementClass parent_class;
+ GstBinClass parent_class;
};
GType gst_mss_demux_get_type (void);
diff --git a/ext/srtp/gstsrtpdec.c b/ext/srtp/gstsrtpdec.c
index 876879c2..b82a0a6c 100644
--- a/ext/srtp/gstsrtpdec.c
+++ b/ext/srtp/gstsrtpdec.c
@@ -124,6 +124,7 @@ enum
SIGNAL_CLEAR_KEYS,
SIGNAL_SOFT_LIMIT,
SIGNAL_HARD_LIMIT,
+ SIGNAL_REMOVE_KEY,
LAST_SIGNAL
};
@@ -169,6 +170,7 @@ static guint gst_srtp_dec_signals[LAST_SIGNAL] = { 0 };
G_DEFINE_TYPE (GstSrtpDec, gst_srtp_dec, GST_TYPE_ELEMENT);
static void gst_srtp_dec_clear_streams (GstSrtpDec * filter);
+static void gst_srtp_dec_remove_stream (GstSrtpDec * filter, guint ssrc);
static gboolean gst_srtp_dec_sink_event_rtp (GstPad * pad, GstObject * parent,
GstEvent * event);
@@ -201,7 +203,6 @@ struct _GstSrtpDecSsrcStream
{
guint32 ssrc;
- GstCaps *caps;
GstBuffer *key;
GstSrtpCipherType rtp_cipher;
GstSrtpAuthType rtp_auth;
@@ -240,6 +241,7 @@ gst_srtp_dec_class_init (GstSrtpDecClass * klass)
gstelement_class->change_state =
GST_DEBUG_FUNCPTR (gst_srtp_dec_change_state);
klass->clear_streams = GST_DEBUG_FUNCPTR (gst_srtp_dec_clear_streams);
+ klass->remove_stream = GST_DEBUG_FUNCPTR (gst_srtp_dec_remove_stream);
/**
* GstSrtpDec::request-key:
@@ -297,6 +299,20 @@ gst_srtp_dec_class_init (GstSrtpDecClass * klass)
gst_srtp_dec_signals[SIGNAL_HARD_LIMIT] =
g_signal_new ("hard-limit", G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, GST_TYPE_CAPS, 1, G_TYPE_UINT);
+
+ /**
+ * GstSrtpDec::remove-key:
+ * @gstsrtpdec: the element on which the signal is emitted
+ * @ssrc: The SSRC for which to remove the key.
+ *
+ * Removes keys for a specific SSRC
+ */
+ gst_srtp_dec_signals[SIGNAL_REMOVE_KEY] =
+ g_signal_new ("remove-key", G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (GstSrtpDecClass, remove_stream), NULL, NULL, NULL,
+ G_TYPE_NONE, 1, G_TYPE_UINT);
+
}
/* initialize the new element
@@ -356,10 +372,13 @@ gst_srtp_dec_init (GstSrtpDec * filter)
}
static void
-remove_stream_by_ssrc (GstSrtpDec * filter, guint32 ssrc)
+gst_srtp_dec_remove_stream (GstSrtpDec * filter, guint ssrc)
{
GstSrtpDecSsrcStream *stream = NULL;
+ if (filter->streams == NULL)
+ return;
+
stream = g_hash_table_lookup (filter->streams, GUINT_TO_POINTER (ssrc));
if (stream) {
@@ -547,6 +566,14 @@ have_ssrc:
return request_key_with_signal (filter, *ssrc, SIGNAL_REQUEST_KEY);
}
+static void
+free_stream (GstSrtpDecSsrcStream * stream)
+{
+ if (stream->key)
+ gst_buffer_unref (stream->key);
+ g_slice_free (GstSrtpDecSsrcStream, stream);
+}
+
/* Create new stream from params in caps
*/
static GstSrtpDecSsrcStream *
@@ -554,15 +581,41 @@ update_session_stream_from_caps (GstSrtpDec * filter, guint32 ssrc,
GstCaps * caps)
{
GstSrtpDecSsrcStream *stream = NULL;
+ GstSrtpDecSsrcStream *old_stream = NULL;
err_status_t err;
g_return_val_if_fail (GST_IS_SRTP_DEC (filter), NULL);
g_return_val_if_fail (GST_IS_CAPS (caps), NULL);
- /* Remove existing stream, if any */
- remove_stream_by_ssrc (filter, ssrc);
stream = get_stream_from_caps (filter, caps, ssrc);
+ old_stream = find_stream_by_ssrc (filter, ssrc);
+ if (stream && old_stream &&
+ stream->rtp_cipher == old_stream->rtp_cipher &&
+ stream->rtcp_cipher == old_stream->rtcp_cipher &&
+ stream->rtp_auth == old_stream->rtp_auth &&
+ stream->rtcp_auth == old_stream->rtcp_auth &&
+ stream->key && old_stream->key &&
+ gst_buffer_get_size (stream->key) ==
+ gst_buffer_get_size (old_stream->key)) {
+ GstMapInfo info;
+
+ if (gst_buffer_map (old_stream->key, &info, GST_MAP_READ)) {
+ gboolean equal;
+
+ equal = (gst_buffer_memcmp (stream->key, 0, info.data, info.size) == 0);
+ gst_buffer_unmap (old_stream->key, &info);
+
+ if (equal) {
+ free_stream (stream);
+ return old_stream;
+ }
+ }
+ }
+
+ /* Remove existing stream, if any */
+ gst_srtp_dec_remove_stream (filter, ssrc);
+
if (stream) {
/* Create new session stream */
err = init_session_stream (filter, ssrc, stream);
@@ -578,14 +631,6 @@ update_session_stream_from_caps (GstSrtpDec * filter, guint32 ssrc,
return stream;
}
-static void
-clear_stream (GstSrtpDecSsrcStream * stream)
-{
- if (stream->key)
- gst_buffer_unref (stream->key);
- g_slice_free (GstSrtpDecSsrcStream, stream);
-}
-
static gboolean
remove_yes (gpointer key, gpointer value, gpointer user_data)
{
@@ -1071,7 +1116,7 @@ gst_srtp_dec_change_state (GstElement * element, GstStateChange transition)
switch (transition) {
case GST_STATE_CHANGE_READY_TO_PAUSED:
filter->streams = g_hash_table_new_full (g_direct_hash, g_direct_equal,
- NULL, (GDestroyNotify) clear_stream);
+ NULL, (GDestroyNotify) free_stream);
filter->rtp_has_segment = FALSE;
filter->rtcp_has_segment = FALSE;
break;
diff --git a/ext/srtp/gstsrtpdec.h b/ext/srtp/gstsrtpdec.h
index 9d210faa..8129dc08 100644
--- a/ext/srtp/gstsrtpdec.h
+++ b/ext/srtp/gstsrtpdec.h
@@ -88,6 +88,7 @@ struct _GstSrtpDecClass
GstElementClass parent_class;
void (*clear_streams) (GstSrtpDec * filter);
+ void (*remove_stream) (GstSrtpDec * filter, guint ssrc);
};
GType gst_srtp_dec_get_type (void);
diff --git a/ext/srtp/gstsrtpenc.c b/ext/srtp/gstsrtpenc.c
index 5afaaf7a..adee3684 100644
--- a/ext/srtp/gstsrtpenc.c
+++ b/ext/srtp/gstsrtpenc.c
@@ -155,28 +155,28 @@ enum
* describe the real formats here.
*/
static GstStaticPadTemplate rtp_sink_template =
-GST_STATIC_PAD_TEMPLATE ("rtp_sink_%d",
+GST_STATIC_PAD_TEMPLATE ("rtp_sink_%u",
GST_PAD_SINK,
GST_PAD_REQUEST,
GST_STATIC_CAPS ("application/x-rtp")
);
static GstStaticPadTemplate rtp_src_template =
-GST_STATIC_PAD_TEMPLATE ("rtp_src_%d",
+GST_STATIC_PAD_TEMPLATE ("rtp_src_%u",
GST_PAD_SRC,
GST_PAD_SOMETIMES,
GST_STATIC_CAPS ("application/x-srtp")
);
static GstStaticPadTemplate rtcp_sink_template =
-GST_STATIC_PAD_TEMPLATE ("rtcp_sink_%d",
+GST_STATIC_PAD_TEMPLATE ("rtcp_sink_%u",
GST_PAD_SINK,
GST_PAD_REQUEST,
GST_STATIC_CAPS ("application/x-rtcp")
);
static GstStaticPadTemplate rtcp_src_template =
-GST_STATIC_PAD_TEMPLATE ("rtcp_src_%d",
+GST_STATIC_PAD_TEMPLATE ("rtcp_src_%u",
GST_PAD_SRC,
GST_PAD_SOMETIMES,
GST_STATIC_CAPS ("application/x-srtcp")
@@ -427,14 +427,14 @@ create_rtp_sink (GstSrtpEnc * filter, const gchar * name)
{
GstPad *sinkpad, *srcpad;
gchar *sinkpadname, *srcpadname;
- gint nb = 0;
+ guint nb = 0;
GST_DEBUG_OBJECT (filter, "creating RTP sink pad");
sinkpad = gst_pad_new_from_static_template (&rtp_sink_template, name);
sinkpadname = gst_pad_get_name (sinkpad);
- sscanf (sinkpadname, "rtp_sink_%d", &nb);
- srcpadname = g_strdup_printf ("rtp_src_%d", nb);
+ sscanf (sinkpadname, "rtp_sink_%u", &nb);
+ srcpadname = g_strdup_printf ("rtp_src_%u", nb);
GST_DEBUG_OBJECT (filter, "creating RTP source pad");
srcpad = gst_pad_new_from_static_template (&rtp_src_template, srcpadname);
@@ -471,14 +471,14 @@ create_rtcp_sink (GstSrtpEnc * filter, const gchar * name)
{
GstPad *srcpad, *sinkpad;
gchar *sinkpadname, *srcpadname;
- gint nb = 0;
+ guint nb = 0;
GST_DEBUG_OBJECT (filter, "creating RTCP sink pad");
sinkpad = gst_pad_new_from_static_template (&rtcp_sink_template, name);
sinkpadname = gst_pad_get_name (sinkpad);
- sscanf (sinkpadname, "rtcp_sink_%d", &nb);
- srcpadname = g_strdup_printf ("rtcp_src_%d", nb);
+ sscanf (sinkpadname, "rtcp_sink_%u", &nb);
+ srcpadname = g_strdup_printf ("rtcp_src_%u", nb);
GST_DEBUG_OBJECT (filter, "creating RTCP source pad");
srcpad = gst_pad_new_from_static_template (&rtcp_src_template, srcpadname);
@@ -521,10 +521,10 @@ gst_srtp_enc_request_new_pad (GstElement * element,
GST_INFO_OBJECT (element, "New pad requested");
- if (templ == gst_element_class_get_pad_template (klass, "rtp_sink_%d"))
+ if (templ == gst_element_class_get_pad_template (klass, "rtp_sink_%u"))
return create_rtp_sink (filter, name);
- if (templ == gst_element_class_get_pad_template (klass, "rtcp_sink_%d"))
+ if (templ == gst_element_class_get_pad_template (klass, "rtcp_sink_%u"))
return create_rtcp_sink (filter, name);
GST_ERROR_OBJECT (element, "Could not find specified template");
diff --git a/gst-libs/gst/gl/cocoa/Makefile.am b/gst-libs/gst/gl/cocoa/Makefile.am
index 9e6422ad..b3740795 100644
--- a/gst-libs/gst/gl/cocoa/Makefile.am
+++ b/gst-libs/gst/gl/cocoa/Makefile.am
@@ -22,11 +22,10 @@ libgstgl_cocoa_la_CFLAGS = \
libgstgl_cocoa_la_OBJCFLAGS = \
-I$(top_srcdir)/gst-libs \
-I$(top_builddir)/gst-libs \
- $(GL_CFLAGS) \
$(GL_OBJCFLAGS) \
$(GST_PLUGINS_BASE_CFLAGS) \
$(GST_BASE_CFLAGS) \
- $(GST_CFLAGS)
+ $(GST_OBJCFLAGS)
libgstgl_cocoa_la_LDFLAGS = \
$(GST_LIB_LDFLAGS) \
diff --git a/gst-libs/gst/gl/cocoa/Makefile.in b/gst-libs/gst/gl/cocoa/Makefile.in
index b2b60b45..8f7a1bb7 100644
--- a/gst-libs/gst/gl/cocoa/Makefile.in
+++ b/gst-libs/gst/gl/cocoa/Makefile.in
@@ -713,11 +713,10 @@ libgstgl_cocoa_la_CFLAGS = \
libgstgl_cocoa_la_OBJCFLAGS = \
-I$(top_srcdir)/gst-libs \
-I$(top_builddir)/gst-libs \
- $(GL_CFLAGS) \
$(GL_OBJCFLAGS) \
$(GST_PLUGINS_BASE_CFLAGS) \
$(GST_BASE_CFLAGS) \
- $(GST_CFLAGS)
+ $(GST_OBJCFLAGS)
libgstgl_cocoa_la_LDFLAGS = \
$(GST_LIB_LDFLAGS) \
diff --git a/gst-libs/gst/gl/egl/gsteglimagememory.c b/gst-libs/gst/gl/egl/gsteglimagememory.c
index e4a58d38..5a023a52 100644
--- a/gst-libs/gst/gl/egl/gsteglimagememory.c
+++ b/gst-libs/gst/gl/egl/gsteglimagememory.c
@@ -122,7 +122,7 @@ gst_egl_image_allocator_free_vfunc (GstAllocator * allocator, GstMemory * mem)
/* Shared memory should not destroy all the data */
if (!mem->parent) {
- eglDestroyImageKHR (emem->context->egl_display, emem->image);
+ emem->context->eglDestroyImage (emem->context->egl_display, emem->image);
if (emem->user_data_destroy)
emem->user_data_destroy (emem->context, emem->user_data);
@@ -163,8 +163,18 @@ gst_egl_image_mem_is_span (GstMemory * mem1, GstMemory * mem2, gsize * offset)
return FALSE;
}
-typedef GstAllocator GstEGLImageAllocator;
-typedef GstAllocatorClass GstEGLImageAllocatorClass;
+typedef struct _GstEGLImageAllocator GstEGLImageAllocator;
+typedef struct _GstEGLImageAllocatorClass GstEGLImageAllocatorClass;
+
+struct _GstEGLImageAllocator
+{
+ GstAllocator parent;
+};
+
+struct _GstEGLImageAllocatorClass
+{
+ GstAllocatorClass parent_class;
+};
GType gst_egl_image_allocator_get_type (void);
G_DEFINE_TYPE (GstEGLImageAllocator, gst_egl_image_allocator,
@@ -212,7 +222,7 @@ gst_egl_image_allocator_init_instance (gpointer data)
return allocator;
}
-static GstAllocator *
+static GstEGLImageAllocator *
gst_egl_image_allocator_obtain (void)
{
static GOnce once = G_ONCE_INIT;
@@ -221,7 +231,7 @@ gst_egl_image_allocator_obtain (void)
g_return_val_if_fail (once.retval != NULL, NULL);
- return GST_ALLOCATOR (g_object_ref (once.retval));
+ return (GstEGLImageAllocator *) (g_object_ref (once.retval));
}
void
@@ -239,7 +249,7 @@ gst_egl_image_memory_del_gl_texture (GstGLContext * context, gpointer tex)
}
static GstMemory *
-gst_egl_image_allocator_wrap (GstAllocator * allocator,
+gst_egl_image_allocator_wrap (GstEGLImageAllocator * allocator,
GstGLContextEGL * context, EGLImageKHR image, GstVideoGLTextureType type,
GstMemoryFlags flags, gsize size, gpointer user_data,
GstEGLImageDestroyNotify user_data_destroy)
@@ -255,7 +265,7 @@ gst_egl_image_allocator_wrap (GstAllocator * allocator,
mem = g_slice_new (GstEGLImageMemory);
gst_memory_init (GST_MEMORY_CAST (mem), flags,
- allocator, NULL, size, 0, 0, size);
+ GST_ALLOCATOR (allocator), NULL, size, 0, 0, size);
gst_object_unref (allocator);
@@ -339,12 +349,14 @@ gst_egl_image_memory_setup_buffer (GstGLContext * ctx, GstVideoInfo * info,
EGLImageKHR image = EGL_NO_IMAGE_KHR;
EGLClientBuffer client_buffer_tex[3] = { 0, 0, 0 };
GstVideoGLTextureType texture_types[] = { 0, 0, 0, 0 };
- GstAllocator *allocator = gst_egl_image_allocator_obtain ();
+ GstEGLImageAllocator *allocator = gst_egl_image_allocator_obtain ();
GstGLContextEGL *context = GST_GL_CONTEXT_EGL (ctx);
g_return_val_if_fail (ctx, FALSE);
g_return_val_if_fail (info, FALSE);
g_return_val_if_fail (buffer, FALSE);
+ g_return_val_if_fail (gst_gl_context_check_feature (ctx,
+ "EGL_KHR_image_base"), FALSE);
memset (stride, 0, sizeof (stride));
memset (offset, 0, sizeof (offset));
@@ -408,7 +420,7 @@ gst_egl_image_memory_setup_buffer (GstGLContext * ctx, GstVideoInfo * info,
gst_gl_generate_texture_full (GST_GL_CONTEXT (context), info, 0, stride,
offset, &size, (GLuint *) & client_buffer_tex[0]);
- image = eglCreateImageKHR (context->egl_display,
+ image = context->eglCreateImage (context->egl_display,
context->egl_context, EGL_GL_TEXTURE_2D_KHR, client_buffer_tex[0],
NULL);
if (eglGetError () != EGL_SUCCESS)
@@ -461,7 +473,7 @@ gst_egl_image_memory_setup_buffer (GstGLContext * ctx, GstVideoInfo * info,
gst_gl_generate_texture_full (GST_GL_CONTEXT (context), info, 0,
stride, offset, size, (GLuint *) & client_buffer_tex[i]);
- image = eglCreateImageKHR (context->egl_display,
+ image = context->eglCreateImage (context->egl_display,
context->egl_context, EGL_GL_TEXTURE_2D_KHR, client_buffer_tex[i],
NULL);
if (eglGetError () != EGL_SUCCESS)
@@ -527,7 +539,7 @@ gst_egl_image_memory_setup_buffer (GstGLContext * ctx, GstVideoInfo * info,
gst_gl_generate_texture_full (GST_GL_CONTEXT (context), info, i,
stride, offset, size, (GLuint *) & client_buffer_tex[i]);
- image = eglCreateImageKHR (context->egl_display,
+ image = context->eglCreateImage (context->egl_display,
context->egl_context, EGL_GL_TEXTURE_2D_KHR, client_buffer_tex[i],
NULL);
if (eglGetError () != EGL_SUCCESS)
@@ -563,7 +575,7 @@ gst_egl_image_memory_setup_buffer (GstGLContext * ctx, GstVideoInfo * info,
mem_error:
{
- GST_ERROR_OBJECT (GST_CAT_DEFAULT, "Failed to create EGLImage");
+ GST_CAT_ERROR (GST_CAT_DEFAULT, "Failed to create EGLImage");
for (i = 0; i < 3; i++) {
if (client_buffer_tex[i])
diff --git a/gst-libs/gst/gl/egl/gstglcontext_egl.c b/gst-libs/gst/gl/egl/gstglcontext_egl.c
index 06e7a9b6..d3c8d96d 100644
--- a/gst-libs/gst/gl/egl/gstglcontext_egl.c
+++ b/gst-libs/gst/gl/egl/gstglcontext_egl.c
@@ -53,6 +53,8 @@ static GstGLPlatform gst_gl_context_egl_get_gl_platform (GstGLContext *
context);
static gpointer gst_gl_context_egl_get_proc_address (GstGLContext * context,
const gchar * name);
+static gboolean gst_gl_context_egl_check_feature (GstGLContext * context,
+ const gchar * feature);
G_DEFINE_TYPE (GstGLContextEGL, gst_gl_context_egl, GST_GL_TYPE_CONTEXT);
@@ -78,6 +80,8 @@ gst_gl_context_egl_class_init (GstGLContextEGLClass * klass)
GST_DEBUG_FUNCPTR (gst_gl_context_egl_get_gl_platform);
context_class->get_proc_address =
GST_DEBUG_FUNCPTR (gst_gl_context_egl_get_proc_address);
+ context_class->check_feature =
+ GST_DEBUG_FUNCPTR (gst_gl_context_egl_check_feature);
}
static void
@@ -404,6 +408,23 @@ gst_gl_context_egl_create_context (GstGLContext * context,
}
}
+ /* EGLImage functions */
+ if (GST_GL_CHECK_GL_VERSION (majorVersion, minorVersion, 1, 5)) {
+ egl->eglCreateImage = gst_gl_context_get_proc_address (context,
+ "eglCreateImage");
+ egl->eglDestroyImage = gst_gl_context_get_proc_address (context,
+ "eglDestroyImage");
+ } else if (gst_gl_check_extension ("EGL_KHR_image_base", egl_exts)) {
+ egl->eglCreateImage = gst_gl_context_get_proc_address (context,
+ "eglCreateImageKHR");
+ egl->eglDestroyImage = gst_gl_context_get_proc_address (context,
+ "eglDestroyImageKHR");
+ }
+ if (egl->eglCreateImage == NULL || egl->eglDestroyImage == NULL) {
+ egl->eglCreateImage = NULL;
+ egl->eglDestroyImage = NULL;
+ }
+
if (window)
gst_object_unref (window);
@@ -525,3 +546,16 @@ gst_gl_context_egl_get_proc_address (GstGLContext * context, const gchar * name)
return result;
}
+
+static gboolean
+gst_gl_context_egl_check_feature (GstGLContext * context, const gchar * feature)
+{
+ GstGLContextEGL *context_egl = GST_GL_CONTEXT_EGL (context);
+
+ if (g_strcmp0 (feature, "EGL_KHR_image_base") == 0) {
+ return context_egl->eglCreateImage != NULL &&
+ context_egl->eglDestroyImage != NULL;
+ }
+
+ return FALSE;
+}
diff --git a/gst-libs/gst/gl/egl/gstglcontext_egl.h b/gst-libs/gst/gl/egl/gstglcontext_egl.h
index 5e84d3e0..96018655 100644
--- a/gst-libs/gst/gl/egl/gstglcontext_egl.h
+++ b/gst-libs/gst/gl/egl/gstglcontext_egl.h
@@ -45,6 +45,10 @@ struct _GstGLContextEGL {
EGLConfig egl_config;
GstGLAPI gl_api;
+
+ EGLImageKHR (*eglCreateImage) (EGLDisplay dpy, EGLContext ctx, EGLenum target,
+ EGLClientBuffer buffer, const EGLint *attrib_list);
+ EGLBoolean (*eglDestroyImage) (EGLDisplay dpy, EGLImageKHR image);
};
struct _GstGLContextEGLClass {
diff --git a/gst-libs/gst/gl/gstglbufferpool.c b/gst-libs/gst/gl/gstglbufferpool.c
index b3df2a05..517d05ea 100644
--- a/gst-libs/gst/gl/gstglbufferpool.c
+++ b/gst-libs/gst/gl/gstglbufferpool.c
@@ -175,16 +175,9 @@ gst_gl_buffer_pool_start (GstBufferPool * pool)
GstGLBufferPool *glpool = GST_GL_BUFFER_POOL_CAST (pool);
GstGLBufferPoolPrivate *priv = glpool->priv;
- if (!gst_gl_upload_init_format (glpool->upload, &priv->info))
- goto upload_error;
+ gst_gl_upload_set_format (glpool->upload, &priv->info);
return GST_BUFFER_POOL_CLASS (parent_class)->start (pool);
-
-upload_error:
- {
- GST_WARNING_OBJECT (glpool, "Failed to initialize upload");
- return FALSE;
- }
}
/* This function handles GstBuffer creation */
diff --git a/gst-libs/gst/gl/gstglcolorconvert.c b/gst-libs/gst/gl/gstglcolorconvert.c
index eb8143fb..58820570 100644
--- a/gst-libs/gst/gl/gstglcolorconvert.c
+++ b/gst-libs/gst/gl/gstglcolorconvert.c
@@ -48,9 +48,8 @@
#define USING_GLES3(context) (gst_gl_context_get_gl_api (context) & GST_GL_API_GLES3)
static void _do_convert (GstGLContext * context, GstGLColorConvert * convert);
-static void _init_convert (GstGLContext * context, GstGLColorConvert * convert);
-static gboolean _init_convert_fbo (GstGLContext * context,
- GstGLColorConvert * convert);
+static gboolean _init_convert (GstGLColorConvert * convert);
+static gboolean _init_convert_fbo (GstGLColorConvert * convert);
static gboolean _gst_gl_color_convert_perform_unlocked (GstGLColorConvert *
convert, GstGLMemory * in_tex[GST_VIDEO_MAX_PLANES],
GstGLMemory * out_tex[GST_VIDEO_MAX_PLANES]);
@@ -134,6 +133,7 @@ static const gchar frag_REORDER[] =
"void main(void)\n"
"{\n"
" vec4 t = texture2D(tex, v_texcoord * tex_scale0);\n"
+ " %s\n" /* clobber alpha channel? */
" gl_FragColor = vec4(t.%c, t.%c, t.%c, t.%c);\n"
"}";
@@ -176,13 +176,13 @@ static const char frag_AYUV_to_RGB[] =
YUV_TO_RGB_COEFFICIENTS
"void main(void) {\n"
" float r,g,b,a;\n"
- " vec3 yuv;\n"
- " yuv = texture2D(tex,v_texcoord * tex_scale0).gba;\n"
- " yuv += offset;\n"
- " r = dot(yuv, coeff1);\n"
- " g = dot(yuv, coeff2);\n"
- " b = dot(yuv, coeff3);\n"
- " a = 1.0;\n"
+ " vec4 texel;\n"
+ " texel = texture2D(tex, v_texcoord * tex_scale0);\n"
+ " texel.gba += offset;\n"
+ " r = dot(texel.gba, coeff1);\n"
+ " g = dot(texel.gba, coeff2);\n"
+ " b = dot(texel.gba, coeff3);\n"
+ " a = texel.r;\n"
" gl_FragColor=vec4(%c,%c,%c,%c);\n"
"}";
@@ -195,7 +195,7 @@ static const gchar frag_RGB_to_AYUV[] =
RGB_TO_YUV_COEFFICIENTS
"void main(void) {\n"
" vec4 texel;\n"
- " float y, u, v;\n"
+ " float y, u, v, a;\n"
" texel = texture2D(tex, v_texcoord).%c%c%c%c;\n"
" y = dot(texel.rgb, coeff1);\n"
" u = dot(texel.rgb, coeff2);\n"
@@ -203,7 +203,8 @@ static const gchar frag_RGB_to_AYUV[] =
" y += offset.x;\n"
" u += offset.y;\n"
" v += offset.z;\n"
- " gl_FragColor = vec4(1.0,y,u,v);\n"
+ " a = %s;\n"
+ " gl_FragColor = vec4(a,y,u,v);\n"
"}\n";
/** YUV to RGB conversion */
@@ -348,7 +349,6 @@ struct ConvertInfo
gint out_n_textures;
gchar *frag_prog;
const gchar *shader_tex_names[GST_VIDEO_MAX_PLANES];
- gfloat shader_scaling[GST_VIDEO_MAX_PLANES][2];
gfloat *cms_offset;
gfloat *cms_coeff1; /* r,y */
gfloat *cms_coeff2; /* g,u */
@@ -374,9 +374,10 @@ GST_DEBUG_CATEGORY_STATIC (gst_gl_color_convert_debug);
#define DEBUG_INIT \
GST_DEBUG_CATEGORY_INIT (gst_gl_color_convert_debug, "glconvert", 0, "convert");
-G_DEFINE_TYPE_WITH_CODE (GstGLColorConvert, gst_gl_color_convert, G_TYPE_OBJECT,
- DEBUG_INIT);
+G_DEFINE_TYPE_WITH_CODE (GstGLColorConvert, gst_gl_color_convert,
+ GST_TYPE_OBJECT, DEBUG_INIT);
static void gst_gl_color_convert_finalize (GObject * object);
+static void gst_gl_color_convert_reset (GstGLColorConvert * convert);
#define GST_GL_COLOR_CONVERT_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
GST_TYPE_GL_COLOR_CONVERT, GstGLColorConvertPrivate))
@@ -415,6 +416,9 @@ gst_gl_color_convert_new (GstGLContext * context)
priv = convert->priv;
priv->draw = _do_convert_draw;
+ gst_video_info_set_format (&convert->in_info, GST_VIDEO_FORMAT_ENCODED, 0, 0);
+ gst_video_info_set_format (&convert->out_info, GST_VIDEO_FORMAT_ENCODED, 0,
+ 0);
return convert;
}
@@ -423,10 +427,26 @@ static void
gst_gl_color_convert_finalize (GObject * object)
{
GstGLColorConvert *convert;
- guint i;
convert = GST_GL_COLOR_CONVERT (object);
+ gst_gl_color_convert_reset (convert);
+
+ if (convert->context) {
+ gst_object_unref (convert->context);
+ convert->context = NULL;
+ }
+
+ g_mutex_clear (&convert->lock);
+
+ G_OBJECT_CLASS (gst_gl_color_convert_parent_class)->finalize (object);
+}
+
+static void
+gst_gl_color_convert_reset (GstGLColorConvert * convert)
+{
+ guint i;
+
if (convert->fbo || convert->depth_buffer) {
gst_gl_context_del_fbo (convert->context, convert->fbo,
convert->depth_buffer);
@@ -449,69 +469,49 @@ gst_gl_color_convert_finalize (GObject * object)
gst_memory_unref ((GstMemory *) convert->priv->scratch);
convert->priv->scratch = NULL;
}
-
- if (convert->context) {
- gst_object_unref (convert->context);
- convert->context = NULL;
- }
-
- g_mutex_clear (&convert->lock);
-
- G_OBJECT_CLASS (gst_gl_color_convert_parent_class)->finalize (object);
}
-static gboolean
-_gst_gl_color_convert_init_format_unlocked (GstGLColorConvert * convert,
+static void
+_gst_gl_color_convert_set_format_unlocked (GstGLColorConvert * convert,
GstVideoInfo * in_info, GstVideoInfo * out_info)
{
- g_return_val_if_fail (convert != NULL, FALSE);
- g_return_val_if_fail (in_info, FALSE);
- g_return_val_if_fail (out_info, FALSE);
- g_return_val_if_fail (GST_VIDEO_INFO_FORMAT (in_info) !=
- GST_VIDEO_FORMAT_UNKNOWN, FALSE);
- g_return_val_if_fail (GST_VIDEO_INFO_FORMAT (in_info) !=
- GST_VIDEO_FORMAT_ENCODED, FALSE);
- g_return_val_if_fail (GST_VIDEO_INFO_FORMAT (out_info) !=
- GST_VIDEO_FORMAT_UNKNOWN, FALSE);
- g_return_val_if_fail (GST_VIDEO_INFO_FORMAT (out_info) !=
- GST_VIDEO_FORMAT_ENCODED, FALSE);
-
- if (convert->initted) {
- return TRUE;
- } else {
- convert->initted = TRUE;
- }
+ g_return_if_fail (convert != NULL);
+ g_return_if_fail (in_info);
+ g_return_if_fail (out_info);
+ g_return_if_fail (GST_VIDEO_INFO_FORMAT (in_info) !=
+ GST_VIDEO_FORMAT_UNKNOWN);
+ g_return_if_fail (GST_VIDEO_INFO_FORMAT (in_info) !=
+ GST_VIDEO_FORMAT_ENCODED);
+ g_return_if_fail (GST_VIDEO_INFO_FORMAT (out_info) !=
+ GST_VIDEO_FORMAT_UNKNOWN);
+ g_return_if_fail (GST_VIDEO_INFO_FORMAT (out_info) !=
+ GST_VIDEO_FORMAT_ENCODED);
+
+ if (gst_video_info_is_equal (&convert->in_info, in_info) &&
+ gst_video_info_is_equal (&convert->out_info, out_info))
+ return;
+ gst_gl_color_convert_reset (convert);
convert->in_info = *in_info;
convert->out_info = *out_info;
-
- gst_gl_context_thread_add (convert->context,
- (GstGLContextThreadFunc) _init_convert, convert);
-
- return convert->priv->result;
+ convert->initted = FALSE;
}
/**
- * gst_gl_color_convert_init_format:
+ * gst_gl_color_convert_set_format:
* @convert: a #GstGLColorConvert
* @in_info: input #GstVideoInfo
* @out_info: output #GstVideoInfo
*
* Initializes @convert with the information required for conversion.
- *
- * Returns: whether the initialization was successful
*/
-gboolean
-gst_gl_color_convert_init_format (GstGLColorConvert * convert,
+void
+gst_gl_color_convert_set_format (GstGLColorConvert * convert,
GstVideoInfo * in_info, GstVideoInfo * out_info)
{
- gboolean ret;
-
g_mutex_lock (&convert->lock);
- ret = _gst_gl_color_convert_init_format_unlocked (convert, in_info, out_info);
+ _gst_gl_color_convert_set_format_unlocked (convert, in_info, out_info);
g_mutex_unlock (&convert->lock);
-
- return ret;
}
/**
@@ -522,7 +522,7 @@ gst_gl_color_convert_init_format (GstGLColorConvert * convert,
*
* Converts the data contained in in_tex into out_tex using the formats
* specified by the #GstVideoInfo<!-- -->s passed to
- * gst_gl_color_convert_init_format()
+ * gst_gl_color_convert_set_format()
*
* Returns: whether the conversion was successful
*/
@@ -542,30 +542,6 @@ gst_gl_color_convert_perform (GstGLColorConvert * convert,
return ret;
}
-/**
- * gst_gl_color_convert_set_texture_scaling:
- * @convert: a #GstGLColorConvert
- * @scaling: array of texture scaling coefficients stored in width, height
- * order per texture being converted.
- *
- * Scales the input textures by the given amount. Useful for performing stride
- * scaling in a shader on OpenGL platforms that do not support
- * GL_PIXEL_[UN]PACK_LENGTH such as GL|ES 2.0.
- */
-void
-gst_gl_color_convert_set_texture_scaling (GstGLColorConvert * convert,
- gfloat scaling[GST_VIDEO_MAX_PLANES][2])
-{
- guint i;
-
- g_return_if_fail (convert != NULL);
-
- for (i = 0; i < GST_VIDEO_MAX_PLANES; i++) {
- convert->priv->convert_info.shader_scaling[i][0] = scaling[i][0];
- convert->priv->convert_info.shader_scaling[i][1] = scaling[i][1];
- }
-}
-
static gboolean
_gst_gl_color_convert_perform_unlocked (GstGLColorConvert * convert,
GstGLMemory * in_tex[GST_VIDEO_MAX_PLANES],
@@ -593,35 +569,21 @@ _gst_gl_color_convert_perform_unlocked (GstGLColorConvert * convert,
gst_gl_context_thread_add (convert->context,
(GstGLContextThreadFunc) _do_convert, convert);
- return TRUE;
+ return convert->priv->result;
}
-static gboolean
-_create_shader (GstGLContext * context, const gchar * vertex_src,
- const gchar * fragment_src, GstGLShader ** out_shader)
+static inline gboolean
+_is_RGBx (GstVideoFormat v_format)
{
- GstGLShader *shader;
- GError *error = NULL;
-
- g_return_val_if_fail (vertex_src != NULL || fragment_src != NULL, FALSE);
-
- shader = gst_gl_shader_new (context);
-
- if (vertex_src)
- gst_gl_shader_set_vertex_source (shader, vertex_src);
- if (fragment_src)
- gst_gl_shader_set_fragment_source (shader, fragment_src);
-
- if (!gst_gl_shader_compile (shader, &error)) {
- gst_gl_context_set_error (context, "%s", error->message);
- g_error_free (error);
- gst_gl_context_clear_shader (context);
- gst_object_unref (shader);
- return FALSE;
+ switch (v_format) {
+ case GST_VIDEO_FORMAT_RGBx:
+ case GST_VIDEO_FORMAT_xRGB:
+ case GST_VIDEO_FORMAT_BGRx:
+ case GST_VIDEO_FORMAT_xBGR:
+ return TRUE;
+ default:
+ return FALSE;
}
-
- *out_shader = shader;
- return TRUE;
}
static inline gchar
@@ -704,7 +666,7 @@ fail:
}
static void
-_RGB_to_RGB (GstGLContext * context, GstGLColorConvert * convert)
+_RGB_to_RGB (GstGLColorConvert * convert)
{
struct ConvertInfo *info = &convert->priv->convert_info;
GstVideoFormat in_format = GST_VIDEO_INFO_FORMAT (&convert->in_info);
@@ -712,18 +674,21 @@ _RGB_to_RGB (GstGLContext * context, GstGLColorConvert * convert)
GstVideoFormat out_format = GST_VIDEO_INFO_FORMAT (&convert->out_info);
const gchar *out_format_str = gst_video_format_to_string (out_format);
gchar *pixel_order = _RGB_pixel_order (in_format_str, out_format_str);
+ gchar *alpha = NULL;
info->in_n_textures = 1;
info->out_n_textures = 1;
- info->frag_prog = g_strdup_printf (frag_REORDER, pixel_order[0],
- pixel_order[1], pixel_order[2], pixel_order[3]);
+ if (_is_RGBx (in_format))
+ alpha = g_strdup_printf ("t.%c = 1.0;", pixel_order[3]);
+ info->frag_prog = g_strdup_printf (frag_REORDER, alpha ? alpha : "",
+ pixel_order[0], pixel_order[1], pixel_order[2], pixel_order[3]);
info->shader_tex_names[0] = "tex";
- info->shader_scaling[0][0] = 1.0f;
- info->shader_scaling[0][1] = 1.0f;
+
+ g_free (alpha);
}
static void
-_YUV_to_RGB (GstGLContext * context, GstGLColorConvert * convert)
+_YUV_to_RGB (GstGLColorConvert * convert)
{
struct ConvertInfo *info = &convert->priv->convert_info;
GstVideoFormat out_format = GST_VIDEO_INFO_FORMAT (&convert->out_info);
@@ -732,13 +697,6 @@ _YUV_to_RGB (GstGLContext * context, GstGLColorConvert * convert)
info->out_n_textures = 1;
- info->shader_scaling[0][0] = 1.0f;
- info->shader_scaling[0][1] = 1.0f;
- info->shader_scaling[1][0] = 1.0f;
- info->shader_scaling[1][1] = 1.0f;
- info->shader_scaling[2][0] = 1.0f;
- info->shader_scaling[2][1] = 1.0f;
-
switch (GST_VIDEO_INFO_FORMAT (&convert->in_info)) {
case GST_VIDEO_FORMAT_AYUV:
info->frag_prog = g_strdup_printf (frag_AYUV_to_RGB, pixel_order[0],
@@ -769,11 +727,12 @@ _YUV_to_RGB (GstGLContext * context, GstGLColorConvert * convert)
info->frag_prog = g_strdup_printf (frag_YUY2_UYVY_to_RGB, 'r', 'g', 'a',
pixel_order[0], pixel_order[1], pixel_order[2], pixel_order[3]);
info->in_n_textures = 1;
- info->shader_tex_names[1] = "Ytex";
- info->shader_tex_names[0] = "UVtex";
- convert->priv->scratch = (GstGLMemory *) gst_gl_memory_alloc (context,
- GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE_ALPHA,
- GST_VIDEO_INFO_WIDTH (&convert->in_info),
+ info->shader_tex_names[0] = "Ytex";
+ info->shader_tex_names[1] = "UVtex";
+ convert->priv->scratch =
+ (GstGLMemory *) gst_gl_memory_alloc (convert->context,
+ GST_VIDEO_GL_TEXTURE_TYPE_RGBA,
+ GST_VIDEO_INFO_COMP_WIDTH (&convert->in_info, 1),
GST_VIDEO_INFO_HEIGHT (&convert->in_info),
GST_VIDEO_INFO_PLANE_STRIDE (&convert->in_info, 0));
break;
@@ -795,11 +754,12 @@ _YUV_to_RGB (GstGLContext * context, GstGLColorConvert * convert)
info->frag_prog = g_strdup_printf (frag_YUY2_UYVY_to_RGB, 'a', 'r', 'b',
pixel_order[0], pixel_order[1], pixel_order[2], pixel_order[3]);
info->in_n_textures = 1;
- info->shader_tex_names[1] = "Ytex";
- info->shader_tex_names[0] = "UVtex";
- convert->priv->scratch = (GstGLMemory *) gst_gl_memory_alloc (context,
- GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE_ALPHA,
- GST_VIDEO_INFO_WIDTH (&convert->in_info),
+ info->shader_tex_names[0] = "Ytex";
+ info->shader_tex_names[1] = "UVtex";
+ convert->priv->scratch =
+ (GstGLMemory *) gst_gl_memory_alloc (convert->context,
+ GST_VIDEO_GL_TEXTURE_TYPE_RGBA,
+ GST_VIDEO_INFO_COMP_WIDTH (&convert->in_info, 1),
GST_VIDEO_INFO_HEIGHT (&convert->in_info),
GST_VIDEO_INFO_PLANE_STRIDE (&convert->in_info, 0));
break;
@@ -825,29 +785,24 @@ _YUV_to_RGB (GstGLContext * context, GstGLColorConvert * convert)
}
static void
-_RGB_to_YUV (GstGLContext * context, GstGLColorConvert * convert)
+_RGB_to_YUV (GstGLColorConvert * convert)
{
struct ConvertInfo *info = &convert->priv->convert_info;
GstVideoFormat in_format = GST_VIDEO_INFO_FORMAT (&convert->in_info);
const gchar *in_format_str = gst_video_format_to_string (in_format);
gchar *pixel_order = _RGB_pixel_order (in_format_str, "rgba");
+ const gchar *alpha;
info->frag_prog = NULL;
info->in_n_textures = 1;
info->shader_tex_names[0] = "tex";
- info->shader_scaling[0][0] = 1.0f;
- info->shader_scaling[0][1] = 1.0f;
- info->shader_scaling[1][0] = 1.0f;
- info->shader_scaling[1][1] = 1.0f;
- info->shader_scaling[2][0] = 1.0f;
- info->shader_scaling[2][1] = 1.0f;
-
switch (GST_VIDEO_INFO_FORMAT (&convert->out_info)) {
case GST_VIDEO_FORMAT_AYUV:
+ alpha = _is_RGBx (in_format) ? "1.0" : "texel.a";
info->frag_prog = g_strdup_printf (frag_RGB_to_AYUV, pixel_order[0],
- pixel_order[1], pixel_order[2], pixel_order[3]);
+ pixel_order[1], pixel_order[2], pixel_order[3], alpha);
info->out_n_textures = 1;
break;
case GST_VIDEO_FORMAT_I420:
@@ -896,35 +851,35 @@ _RGB_to_YUV (GstGLContext * context, GstGLColorConvert * convert)
}
static void
-_RGB_to_GRAY (GstGLContext * context, GstGLColorConvert * convert)
+_RGB_to_GRAY (GstGLColorConvert * convert)
{
struct ConvertInfo *info = &convert->priv->convert_info;
GstVideoFormat in_format = GST_VIDEO_INFO_FORMAT (&convert->in_info);
const gchar *in_format_str = gst_video_format_to_string (in_format);
gchar *pixel_order = _RGB_pixel_order (in_format_str, "rgba");
+ gchar *alpha = NULL;
info->in_n_textures = 1;
info->out_n_textures = 1;
info->shader_tex_names[0] = "tex";
- info->shader_scaling[0][0] = 1.0f;
- info->shader_scaling[0][1] = 1.0f;
- info->shader_scaling[1][0] = 1.0f;
- info->shader_scaling[1][1] = 1.0f;
- info->shader_scaling[2][0] = 1.0f;
- info->shader_scaling[2][1] = 1.0f;
+
+ if (_is_RGBx (in_format))
+ alpha = g_strdup_printf ("t.%c = 1.0;", pixel_order[3]);
switch (GST_VIDEO_INFO_FORMAT (&convert->out_info)) {
case GST_VIDEO_FORMAT_GRAY8:
- info->frag_prog = g_strdup_printf (frag_REORDER, pixel_order[0],
- pixel_order[0], pixel_order[0], pixel_order[3]);
+ info->frag_prog = g_strdup_printf (frag_REORDER, alpha ? alpha : "",
+ pixel_order[0], pixel_order[0], pixel_order[0], pixel_order[3]);
break;
default:
break;
}
+
+ g_free (alpha);
}
static void
-_GRAY_to_RGB (GstGLContext * context, GstGLColorConvert * convert)
+_GRAY_to_RGB (GstGLColorConvert * convert)
{
struct ConvertInfo *info = &convert->priv->convert_info;
GstVideoFormat out_format = GST_VIDEO_INFO_FORMAT (&convert->out_info);
@@ -934,16 +889,10 @@ _GRAY_to_RGB (GstGLContext * context, GstGLColorConvert * convert)
info->in_n_textures = 1;
info->out_n_textures = 1;
info->shader_tex_names[0] = "tex";
- info->shader_scaling[0][0] = 1.0f;
- info->shader_scaling[0][1] = 1.0f;
- info->shader_scaling[1][0] = 1.0f;
- info->shader_scaling[1][1] = 1.0f;
- info->shader_scaling[2][0] = 1.0f;
- info->shader_scaling[2][1] = 1.0f;
switch (GST_VIDEO_INFO_FORMAT (&convert->in_info)) {
case GST_VIDEO_FORMAT_GRAY8:
- info->frag_prog = g_strdup_printf (frag_REORDER, pixel_order[0],
+ info->frag_prog = g_strdup_printf (frag_REORDER, "", pixel_order[0],
pixel_order[1], pixel_order[2], pixel_order[3]);
break;
case GST_VIDEO_FORMAT_GRAY16_LE:
@@ -960,53 +909,56 @@ _GRAY_to_RGB (GstGLContext * context, GstGLColorConvert * convert)
}
/* Called in the gl thread */
-void
-_init_convert (GstGLContext * context, GstGLColorConvert * convert)
+static gboolean
+_init_convert (GstGLColorConvert * convert)
{
GstGLFuncs *gl;
gboolean res;
struct ConvertInfo *info = &convert->priv->convert_info;
gint i;
- gl = context->gl_vtable;
+ gl = convert->context->gl_vtable;
+
+ if (convert->initted)
+ return TRUE;
GST_INFO ("Initializing color conversion from %s to %s",
gst_video_format_to_string (GST_VIDEO_INFO_FORMAT (&convert->in_info)),
gst_video_format_to_string (GST_VIDEO_INFO_FORMAT (&convert->out_info)));
if (!gl->CreateProgramObject && !gl->CreateProgram) {
- gst_gl_context_set_error (context,
+ gst_gl_context_set_error (convert->context,
"Cannot perform color conversion without OpenGL shaders");
goto error;
}
if (GST_VIDEO_INFO_IS_RGB (&convert->in_info)) {
if (GST_VIDEO_INFO_IS_RGB (&convert->out_info)) {
- _RGB_to_RGB (context, convert);
+ _RGB_to_RGB (convert);
}
}
if (GST_VIDEO_INFO_IS_YUV (&convert->in_info)) {
if (GST_VIDEO_INFO_IS_RGB (&convert->out_info)) {
- _YUV_to_RGB (context, convert);
+ _YUV_to_RGB (convert);
}
}
if (GST_VIDEO_INFO_IS_RGB (&convert->in_info)) {
if (GST_VIDEO_INFO_IS_YUV (&convert->out_info)) {
- _RGB_to_YUV (context, convert);
+ _RGB_to_YUV (convert);
}
}
if (GST_VIDEO_INFO_IS_RGB (&convert->in_info)) {
if (GST_VIDEO_INFO_IS_GRAY (&convert->out_info)) {
- _RGB_to_GRAY (context, convert);
+ _RGB_to_GRAY (convert);
}
}
if (GST_VIDEO_INFO_IS_GRAY (&convert->in_info)) {
if (GST_VIDEO_INFO_IS_RGB (&convert->out_info)) {
- _GRAY_to_RGB (context, convert);
+ _GRAY_to_RGB (convert);
}
}
@@ -1014,15 +966,16 @@ _init_convert (GstGLContext * context, GstGLColorConvert * convert)
goto unhandled_format;
/* multiple draw targets not supported on GLES2...yet */
- if (info->out_n_textures > 1 && (!gl->DrawBuffers || USING_GLES2 (context))) {
+ if (info->out_n_textures > 1 && (!gl->DrawBuffers ||
+ USING_GLES2 (convert->context))) {
g_free (info->frag_prog);
GST_ERROR ("Conversion requires output to multiple draw buffers");
goto incompatible_api;
}
res =
- _create_shader (context, text_vertex_shader, info->frag_prog,
- &convert->shader);
+ gst_gl_context_gen_shader (convert->context, text_vertex_shader,
+ info->frag_prog, &convert->shader);
g_free (info->frag_prog);
if (!res)
goto error;
@@ -1047,69 +1000,64 @@ _init_convert (GstGLContext * context, GstGLColorConvert * convert)
}
for (i = info->in_n_textures; i >= 0; i--) {
- gchar *scale_name = g_strdup_printf ("tex_scale%u", i);
-
if (info->shader_tex_names[i])
gst_gl_shader_set_uniform_1i (convert->shader, info->shader_tex_names[i],
i);
- gst_gl_shader_set_uniform_2fv (convert->shader, scale_name, 1,
- info->shader_scaling[i]);
-
- g_free (scale_name);
}
gst_gl_shader_set_uniform_1f (convert->shader, "width",
GST_VIDEO_INFO_WIDTH (&convert->in_info));
- gst_gl_context_clear_shader (context);
+ gst_gl_context_clear_shader (convert->context);
- if (!_init_convert_fbo (context, convert)) {
+ if (!_init_convert_fbo (convert)) {
goto error;
}
gl->BindTexture (GL_TEXTURE_2D, 0);
- convert->priv->result = TRUE;
- return;
+ convert->initted = TRUE;
+
+ return TRUE;
unhandled_format:
- gst_gl_context_set_error (context, "Don't know how to convert from %s to %s",
+ gst_gl_context_set_error (convert->context,
+ "Don't know how to convert from %s to %s",
gst_video_format_to_string (GST_VIDEO_INFO_FORMAT (&convert->in_info)),
gst_video_format_to_string (GST_VIDEO_INFO_FORMAT (&convert->out_info)));
error:
- convert->priv->result = FALSE;
- return;
+ return FALSE;
incompatible_api:
{
- gst_gl_context_set_error (context, "Converting from %s to %s requires "
+ gst_gl_context_set_error (convert->context,
+ "Converting from %s to %s requires "
"functionality that the current OpenGL setup does not support",
gst_video_format_to_string (GST_VIDEO_INFO_FORMAT (&convert->in_info)),
gst_video_format_to_string (GST_VIDEO_INFO_FORMAT
(&convert->out_info)));
- convert->priv->result = FALSE;
- return;
+ return FALSE;
}
}
/* called by _init_convert (in the gl thread) */
-gboolean
-_init_convert_fbo (GstGLContext * context, GstGLColorConvert * convert)
+static gboolean
+_init_convert_fbo (GstGLColorConvert * convert)
{
GstGLFuncs *gl;
guint out_width, out_height;
GLuint fake_texture = 0; /* a FBO must hava texture to init */
- gl = context->gl_vtable;
+ gl = convert->context->gl_vtable;
out_width = GST_VIDEO_INFO_WIDTH (&convert->out_info);
out_height = GST_VIDEO_INFO_HEIGHT (&convert->out_info);
if (!gl->GenFramebuffers) {
/* turn off the pipeline because Frame buffer object is a not present */
- gst_gl_context_set_error (context,
+ gst_gl_context_set_error (convert->context,
"Context, EXT_framebuffer_object supported: no");
return FALSE;
}
@@ -1123,13 +1071,13 @@ _init_convert_fbo (GstGLContext * context, GstGLColorConvert * convert)
/* setup the render buffer for depth */
gl->GenRenderbuffers (1, &convert->depth_buffer);
gl->BindRenderbuffer (GL_RENDERBUFFER, convert->depth_buffer);
- if (USING_OPENGL (context)) {
+ if (USING_OPENGL (convert->context)) {
gl->RenderbufferStorage (GL_RENDERBUFFER, GL_DEPTH_COMPONENT,
out_width, out_height);
gl->RenderbufferStorage (GL_RENDERBUFFER, GL_DEPTH24_STENCIL8,
out_width, out_height);
}
- if (USING_GLES2 (context)) {
+ if (USING_GLES2 (convert->context)) {
gl->RenderbufferStorage (GL_RENDERBUFFER, GL_DEPTH_COMPONENT16,
out_width, out_height);
}
@@ -1152,13 +1100,14 @@ _init_convert_fbo (GstGLContext * context, GstGLColorConvert * convert)
gl->FramebufferRenderbuffer (GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
GL_RENDERBUFFER, convert->depth_buffer);
- if (USING_OPENGL (context)) {
+ if (USING_OPENGL (convert->context)) {
gl->FramebufferRenderbuffer (GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT,
GL_RENDERBUFFER, convert->depth_buffer);
}
- if (!gst_gl_context_check_framebuffer_status (context)) {
- gst_gl_context_set_error (context, "GL framebuffer status incomplete");
+ if (!gst_gl_context_check_framebuffer_status (convert->context)) {
+ gst_gl_context_set_error (convert->context,
+ "GL framebuffer status incomplete");
return FALSE;
}
@@ -1185,6 +1134,11 @@ _do_convert (GstGLContext * context, GstGLColorConvert * convert)
in_width = GST_VIDEO_INFO_WIDTH (&convert->in_info);
in_height = GST_VIDEO_INFO_HEIGHT (&convert->in_info);
+ if (!_init_convert (convert)) {
+ convert->priv->result = FALSE;
+ return;
+ }
+
GST_TRACE ("converting to textures:%p,%p,%p,%p dimensions:%ux%u, "
"from textures:%p,%p,%p,%p dimensions:%ux%u", convert->out_tex[0],
convert->out_tex[1], convert->out_tex[2], convert->out_tex[3],
@@ -1325,11 +1279,20 @@ _do_convert_draw (GstGLContext * context, GstGLColorConvert * convert)
gl->EnableVertexAttribArray (convert->shader_attr_texture_loc);
if (convert->priv->scratch) {
+ gchar *scale_name = g_strdup_printf ("tex_scale%u", c_info->in_n_textures);
+
gl->ActiveTexture (GL_TEXTURE0 + c_info->in_n_textures);
gl->BindTexture (GL_TEXTURE_2D, convert->priv->scratch->tex_id);
+
+ gst_gl_shader_set_uniform_2fv (convert->shader, scale_name, 1,
+ convert->priv->scratch->tex_scaling);
+
+ g_free (scale_name);
}
for (i = c_info->in_n_textures - 1; i >= 0; i--) {
+ gchar *scale_name = g_strdup_printf ("tex_scale%u", i);
+
gl->ActiveTexture (GL_TEXTURE0 + i);
gl->BindTexture (GL_TEXTURE_2D, convert->in_tex[i]->tex_id);
@@ -1337,6 +1300,11 @@ _do_convert_draw (GstGLContext * context, GstGLColorConvert * convert)
gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+
+ gst_gl_shader_set_uniform_2fv (convert->shader, scale_name, 1,
+ convert->in_tex[i]->tex_scaling);
+
+ g_free (scale_name);
}
gl->DrawElements (GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, indices);
diff --git a/gst-libs/gst/gl/gstglcolorconvert.h b/gst-libs/gst/gl/gstglcolorconvert.h
index 9b416a5c..976653d4 100644
--- a/gst-libs/gst/gl/gstglcolorconvert.h
+++ b/gst-libs/gst/gl/gstglcolorconvert.h
@@ -44,7 +44,7 @@ GType gst_gl_color_convert_get_type (void);
struct _GstGLColorConvert
{
/* <private> */
- GObject parent;
+ GstObject parent;
GMutex lock;
@@ -79,7 +79,7 @@ struct _GstGLColorConvert
*/
struct _GstGLColorConvertClass
{
- GObjectClass object_class;
+ GstObjectClass object_class;
};
/**
@@ -101,12 +101,9 @@ struct _GstGLColorConvertClass
GstGLColorConvert * gst_gl_color_convert_new (GstGLContext * context);
-gboolean gst_gl_color_convert_init_format (GstGLColorConvert * convert,
- GstVideoInfo * in_info,
- GstVideoInfo * out_info);
-
-void gst_gl_color_convert_set_texture_scaling (GstGLColorConvert * convert,
- gfloat scaling[GST_VIDEO_MAX_PLANES][2]);
+void gst_gl_color_convert_set_format (GstGLColorConvert * convert,
+ GstVideoInfo * in_info,
+ GstVideoInfo * out_info);
gboolean gst_gl_color_convert_perform (GstGLColorConvert * convert,
GstGLMemory * in_tex[GST_VIDEO_MAX_PLANES],
diff --git a/gst-libs/gst/gl/gstglcontext.c b/gst-libs/gst/gl/gstglcontext.c
index 8b5ab293..a2f19095 100644
--- a/gst-libs/gst/gl/gstglcontext.c
+++ b/gst-libs/gst/gl/gstglcontext.c
@@ -65,12 +65,6 @@
#include "eagl/gstglcontext_eagl.h"
#endif
-#define USING_OPENGL(display) (display->gl_api & GST_GL_API_OPENGL)
-#define USING_OPENGL3(display) (display->gl_api & GST_GL_API_OPENGL3)
-#define USING_GLES(display) (display->gl_api & GST_GL_API_GLES)
-#define USING_GLES2(display) (display->gl_api & GST_GL_API_GLES2)
-#define USING_GLES3(display) (display->gl_api & GST_GL_API_GLES3)
-
static GModule *module_self;
#if GST_GL_HAVE_OPENGL
@@ -128,7 +122,7 @@ load_gles2_module (gpointer user_data)
GST_DEBUG_CATEGORY (GST_CAT_DEFAULT);
#define gst_gl_context_parent_class parent_class
-G_DEFINE_ABSTRACT_TYPE (GstGLContext, gst_gl_context, G_TYPE_OBJECT);
+G_DEFINE_ABSTRACT_TYPE (GstGLContext, gst_gl_context, GST_TYPE_OBJECT);
#define GST_GL_CONTEXT_GET_PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE((o), GST_GL_TYPE_CONTEXT, GstGLContextPrivate))
@@ -726,10 +720,9 @@ gst_gl_context_create_thread (GstGLContext * context)
{
GstGLContextClass *context_class;
GstGLWindowClass *window_class;
- GstGLDisplay *display;
GstGLFuncs *gl;
gboolean ret = FALSE;
- GstGLAPI compiled_api, user_api;
+ GstGLAPI compiled_api, user_api, gl_api;
gchar *api_string;
gchar *compiled_api_s;
gchar *user_api_string;
@@ -748,11 +741,12 @@ gst_gl_context_create_thread (GstGLContext * context)
window_class = GST_GL_WINDOW_GET_CLASS (context->window);
if (window_class->open) {
- if (!window_class->open (context->window, error))
+ if (!window_class->open (context->window, error)) {
+ g_assert (error == NULL || *error != NULL);
goto failure;
+ }
}
- display = context->priv->display;
gl = context->gl_vtable;
compiled_api = _compiled_api ();
@@ -801,14 +795,13 @@ gst_gl_context_create_thread (GstGLContext * context)
goto failure;
}
- display->gl_api = gst_gl_context_get_gl_api (context);
- g_assert (display->gl_api != GST_GL_API_NONE
- && display->gl_api != GST_GL_API_ANY);
+ gl_api = gst_gl_context_get_gl_api (context);
+ g_assert (gl_api != GST_GL_API_NONE && gl_api != GST_GL_API_ANY);
- api_string = gst_gl_api_to_string (display->gl_api);
+ api_string = gst_gl_api_to_string (gl_api);
GST_INFO ("available GL APIs: %s", api_string);
- if (((compiled_api & display->gl_api) & user_api) == GST_GL_API_NONE) {
+ if (((compiled_api & gl_api) & user_api) == GST_GL_API_NONE) {
g_set_error (error, GST_GL_CONTEXT_ERROR, GST_GL_CONTEXT_ERROR_WRONG_API,
"failed to create context, context "
"could not provide correct api. user (%s), compiled (%s), context (%s)",
@@ -835,16 +828,18 @@ gst_gl_context_create_thread (GstGLContext * context)
}
/* gl api specific code */
- if (!ret && USING_OPENGL (display))
+ if (!ret && gl_api & GST_GL_API_OPENGL)
ret = _create_context_opengl (context, &context->priv->gl_major,
&context->priv->gl_minor, error);
- if (!ret && USING_GLES2 (display))
+ if (!ret && gl_api & GST_GL_API_GLES2)
ret =
_create_context_gles2 (context, &context->priv->gl_major,
&context->priv->gl_minor, error);
- if (!ret)
+ if (!ret) {
+ g_assert (error == NULL || *error != NULL);
goto failure;
+ }
/* GL core contexts and GLES3 */
if (gl->GetIntegerv && gl->GetStringi && context->priv->gl_major >= 3)
@@ -1037,6 +1032,31 @@ gst_gl_context_get_gl_version (GstGLContext * context, gint * maj, gint * min)
*min = context->priv->gl_minor;
}
+/**
+ * gst_gl_context_check_feature:
+ * @context: a #GstGLContext
+ * @feature: a platform specific feature
+ *
+ * Some features require that the context be created before it is possible to
+ * determine their existence and so will fail if that is not the case.
+ *
+ * Returns: Whether @feature is supported by @context
+ */
+gboolean
+gst_gl_context_check_feature (GstGLContext * context, const gchar * feature)
+{
+ GstGLContextClass *context_class;
+
+ g_return_val_if_fail (GST_GL_IS_CONTEXT (context), FALSE);
+ g_return_val_if_fail (feature != NULL, FALSE);
+
+ context_class = GST_GL_CONTEXT_GET_CLASS (context);
+ if (!context_class->check_feature)
+ return FALSE;
+
+ return context_class->check_feature (context, feature);
+}
+
static GstGLAPI
gst_gl_wrapped_context_get_gl_api (GstGLContext * context)
{
diff --git a/gst-libs/gst/gl/gstglcontext.h b/gst-libs/gst/gl/gstglcontext.h
index 97e4326a..269a51de 100644
--- a/gst-libs/gst/gl/gstglcontext.h
+++ b/gst-libs/gst/gl/gstglcontext.h
@@ -68,7 +68,7 @@ typedef enum
*/
struct _GstGLContext {
/*< private >*/
- GObject parent;
+ GstObject parent;
GstGLWindow *window;
@@ -91,7 +91,7 @@ struct _GstGLContext {
* @swap_buffers: swap the default framebuffer's front/back buffers
*/
struct _GstGLContextClass {
- GObjectClass parent_class;
+ GstObjectClass parent_class;
guintptr (*get_gl_context) (GstGLContext *context);
GstGLAPI (*get_gl_api) (GstGLContext *context);
@@ -103,6 +103,7 @@ struct _GstGLContextClass {
GstGLContext *other_context, GError ** error);
void (*destroy_context) (GstGLContext *context);
void (*swap_buffers) (GstGLContext *context);
+ gboolean (*check_feature) (GstGLContext *context, const gchar *feature);
/*< private >*/
gpointer _reserved[GST_PADDING];
@@ -132,6 +133,7 @@ gboolean gst_gl_context_set_window (GstGLContext *context, GstGLWindow *win
GstGLWindow * gst_gl_context_get_window (GstGLContext *context);
void gst_gl_context_get_gl_version (GstGLContext *context, gint *maj, gint *min);
+gboolean gst_gl_context_check_feature (GstGLContext *context, const gchar *feature);
/* FIXME: remove */
void gst_gl_context_thread_add (GstGLContext * context,
diff --git a/gst-libs/gst/gl/gstgldisplay.c b/gst-libs/gst/gl/gstgldisplay.c
index 20cb51e3..ad1e79fc 100644
--- a/gst-libs/gst/gl/gstgldisplay.c
+++ b/gst-libs/gst/gl/gstgldisplay.c
@@ -55,7 +55,7 @@ GST_DEBUG_CATEGORY_STATIC (gst_gl_display_debug);
GST_DEBUG_CATEGORY_INIT (gst_gl_display_debug, "gldisplay", 0, "opengl display"); \
GST_DEBUG_CATEGORY_GET (gst_context, "GST_CONTEXT");
-G_DEFINE_TYPE_WITH_CODE (GstGLDisplay, gst_gl_display, G_TYPE_OBJECT,
+G_DEFINE_TYPE_WITH_CODE (GstGLDisplay, gst_gl_display, GST_TYPE_OBJECT,
DEBUG_INIT);
#define GST_GL_DISPLAY_GET_PRIVATE(o) \
@@ -84,7 +84,6 @@ gst_gl_display_init (GstGLDisplay * display)
{
display->priv = GST_GL_DISPLAY_GET_PRIVATE (display);
- display->gl_api = GST_GL_API_ANY;
display->type = GST_GL_DISPLAY_TYPE_ANY;
GST_TRACE ("init %p", display);
@@ -99,13 +98,6 @@ gst_gl_display_init (GstGLDisplay * display)
static void
gst_gl_display_finalize (GObject * object)
{
- GstGLDisplay *display = GST_GL_DISPLAY (object);
-
- if (display->context) {
- gst_object_unref (display->context);
- display->context = NULL;
- }
-
GST_TRACE ("finalize %p", object);
G_OBJECT_CLASS (gst_gl_display_parent_class)->finalize (object);
@@ -120,7 +112,7 @@ GstGLDisplay *
gst_gl_display_new (void)
{
GstGLDisplay *display = NULL;
- const gchar *user_choice;
+ const gchar *user_choice, *platform_choice;
static volatile gsize _init = 0;
if (g_once_init_enter (&_init)) {
@@ -130,20 +122,28 @@ gst_gl_display_new (void)
}
user_choice = g_getenv ("GST_GL_WINDOW");
- GST_INFO ("creating a window, user choice:%s", user_choice);
+ platform_choice = g_getenv ("GST_GL_PLATFORM");
+ GST_INFO ("creating a display, user choice:%s (platform: %s)",
+ GST_STR_NULL (user_choice), GST_STR_NULL (platform_choice));
+#if GST_GL_HAVE_WINDOW_COCOA
+ if (!display && (!user_choice || g_strstr_len (user_choice, 5, "cocoa")))
+ display = g_object_new (GST_TYPE_GL_DISPLAY, NULL);
+#endif
#if GST_GL_HAVE_WINDOW_X11
if (!display && (!user_choice || g_strstr_len (user_choice, 3, "x11")))
display = GST_GL_DISPLAY (gst_gl_display_x11_new (NULL));
#endif
#if GST_GL_HAVE_PLATFORM_EGL
- if (!display && (!user_choice || g_strstr_len (user_choice, 3, "egl")))
+ if (!display && (!platform_choice
+ || g_strstr_len (platform_choice, 3, "egl")))
display = GST_GL_DISPLAY (gst_gl_display_egl_new ());
#endif
if (!display) {
/* subclass returned a NULL window */
- GST_WARNING ("Could not create display. user specified %s, creating dummy",
- user_choice ? user_choice : "(null)");
+ GST_WARNING ("Could not create display. user specified %s "
+ "(platform: %s), creating dummy",
+ GST_STR_NULL (user_choice), GST_STR_NULL (platform_choice));
return g_object_new (GST_TYPE_GL_DISPLAY, NULL);
}
@@ -151,14 +151,6 @@ gst_gl_display_new (void)
return display;
}
-GstGLAPI
-gst_gl_display_get_gl_api (GstGLDisplay * display)
-{
- g_return_val_if_fail (GST_IS_GL_DISPLAY (display), GST_GL_API_NONE);
-
- return display->gl_api;
-}
-
guintptr
gst_gl_display_get_handle (GstGLDisplay * display)
{
@@ -178,6 +170,20 @@ gst_gl_display_default_get_handle (GstGLDisplay * display)
}
/**
+ * gst_gl_display_get_handle_type:
+ * @display: a #GstGLDisplay
+ *
+ * Returns: the #GstGLDisplayType of @display
+ */
+GstGLDisplayType
+gst_gl_display_get_handle_type (GstGLDisplay * display)
+{
+ g_return_val_if_fail (GST_IS_GL_DISPLAY (display), GST_GL_DISPLAY_TYPE_NONE);
+
+ return display->type;
+}
+
+/**
* gst_context_set_gl_display:
* @context: a #GstContext
* @display: resulting #GstGLDisplay
diff --git a/gst-libs/gst/gl/gstgldisplay.h b/gst-libs/gst/gl/gstgldisplay.h
index 0d451f93..09489a63 100644
--- a/gst-libs/gst/gl/gstgldisplay.h
+++ b/gst-libs/gst/gl/gstgldisplay.h
@@ -66,9 +66,6 @@ struct _GstGLDisplay
GstGLDisplayType type;
- GstGLContext *context;
- GstGLAPI gl_api;
-
GstGLDisplayPrivate *priv;
};
@@ -84,9 +81,8 @@ GstGLDisplay *gst_gl_display_new (void);
#define gst_gl_display_lock(display) GST_OBJECT_LOCK (display)
#define gst_gl_display_unlock(display) GST_OBJECT_UNLOCK (display)
-GstGLAPI gst_gl_display_get_gl_api (GstGLDisplay * display);
-gpointer gst_gl_display_get_gl_vtable (GstGLDisplay * display);
-guintptr gst_gl_display_get_handle (GstGLDisplay * display);
+guintptr gst_gl_display_get_handle (GstGLDisplay * display);
+GstGLDisplayType gst_gl_display_get_handle_type (GstGLDisplay * display);
#define GST_GL_DISPLAY_CONTEXT_TYPE "gst.gl.GLDisplay"
void gst_context_set_gl_display (GstContext * context, GstGLDisplay * display);
diff --git a/gst-libs/gst/gl/gstgldownload.c b/gst-libs/gst/gl/gstgldownload.c
index fd8216e1..bef1e9ef 100644
--- a/gst-libs/gst/gl/gstgldownload.c
+++ b/gst-libs/gst/gl/gstgldownload.c
@@ -44,9 +44,10 @@
#define USING_GLES3(context) (gst_gl_context_get_gl_api (context) & GST_GL_API_GLES3)
static void _do_download (GstGLContext * context, GstGLDownload * download);
-static void _init_download (GstGLContext * context, GstGLDownload * download);
+static gboolean _init_download (GstGLDownload * download);
static gboolean _gst_gl_download_perform_with_data_unlocked (GstGLDownload *
download, GLuint texture_id, gpointer data[GST_VIDEO_MAX_PLANES]);
+static void gst_gl_download_reset (GstGLDownload * download);
/* *INDENT-ON* */
@@ -67,7 +68,7 @@ GST_DEBUG_CATEGORY_STATIC (gst_gl_download_debug);
#define DEBUG_INIT \
GST_DEBUG_CATEGORY_INIT (gst_gl_download_debug, "gldownload", 0, "download");
-G_DEFINE_TYPE_WITH_CODE (GstGLDownload, gst_gl_download, G_TYPE_OBJECT,
+G_DEFINE_TYPE_WITH_CODE (GstGLDownload, gst_gl_download, GST_TYPE_OBJECT,
DEBUG_INIT);
static void gst_gl_download_finalize (GObject * object);
@@ -116,21 +117,11 @@ static void
gst_gl_download_finalize (GObject * object)
{
GstGLDownload *download;
- guint i;
download = GST_GL_DOWNLOAD (object);
- for (i = 0; i < GST_VIDEO_MAX_PLANES; i++) {
- if (download->out_texture[i]) {
- gst_memory_unref ((GstMemory *) download->out_texture[i]);
- download->out_texture[i] = NULL;
- }
- }
+ gst_gl_download_reset (download);
- if (download->in_texture) {
- gst_gl_context_del_texture (download->context, &download->in_texture);
- download->in_texture = 0;
- }
if (download->convert) {
gst_object_unref (download->convert);
download->convert = NULL;
@@ -146,91 +137,56 @@ gst_gl_download_finalize (GObject * object)
G_OBJECT_CLASS (gst_gl_download_parent_class)->finalize (object);
}
-/**
- * gst_gl_download_init_format:
- * @download: a #GstGLDownload
- * @v_format: a #GstVideoFormat
- * @out_width: the width to download to
- * @out_height: the height to download to
- *
- * Initializes @download with the information required for download.
- *
- * Returns: whether the initialization was successful
- */
-gboolean
-gst_gl_download_init_format (GstGLDownload * download, GstVideoFormat v_format,
- guint out_width, guint out_height)
+static void
+gst_gl_download_reset (GstGLDownload * download)
{
- GstVideoInfo info;
- gboolean ret;
-
- g_return_val_if_fail (download != NULL, FALSE);
- g_return_val_if_fail (v_format != GST_VIDEO_FORMAT_UNKNOWN, FALSE);
- g_return_val_if_fail (v_format != GST_VIDEO_FORMAT_ENCODED, FALSE);
- g_return_val_if_fail (out_width > 0 && out_height > 0, FALSE);
-
- g_mutex_lock (&download->lock);
+ guint i;
- if (download->initted) {
- g_mutex_unlock (&download->lock);
- return FALSE;
+ for (i = 0; i < GST_VIDEO_MAX_PLANES; i++) {
+ if (download->out_tex[i]) {
+ gst_memory_unref ((GstMemory *) download->out_tex[i]);
+ download->out_tex[i] = NULL;
+ }
}
- gst_video_info_set_format (&info, v_format, out_width, out_height);
-
- download->info = info;
-
- gst_gl_context_thread_add (download->context,
- (GstGLContextThreadFunc) _init_download, download);
-
- ret = download->initted = download->priv->result;
-
- g_mutex_unlock (&download->lock);
-
- return ret;
+ for (i = 0; i < GST_VIDEO_MAX_PLANES; i++) {
+ if (download->in_tex[i]) {
+ gst_memory_unref ((GstMemory *) download->in_tex[i]);
+ download->in_tex[i] = NULL;
+ }
+ }
}
/**
- * gst_gl_download_perform_with_memory:
+ * gst_gl_download_set_format:
* @download: a #GstGLDownload
- * @gl_mem: a #GstGLMemory
- *
- * Downloads the texture in @gl_mem
+ * @v_format: a #GstVideoFormat
+ * @out_width: the width to download to
+ * @out_height: the height to download to
*
- * Returns: whether the download was successful
+ * Initializes @download with the information required for download.
*/
-gboolean
-gst_gl_download_perform_with_memory (GstGLDownload * download,
- GstGLMemory * gl_mem)
+void
+gst_gl_download_set_format (GstGLDownload * download, GstVideoInfo * out_info)
{
- gpointer data[GST_VIDEO_MAX_PLANES];
- guint i;
- gboolean ret;
-
- if (!GST_GL_MEMORY_FLAG_IS_SET (gl_mem, GST_GL_MEMORY_FLAG_DOWNLOAD_INITTED))
- return FALSE;
-
- if (!GST_GL_MEMORY_FLAG_IS_SET (gl_mem, GST_GL_MEMORY_FLAG_NEED_DOWNLOAD)) {
- return FALSE;
- }
+ g_return_if_fail (download != NULL);
+ g_return_if_fail (GST_VIDEO_INFO_FORMAT (out_info) !=
+ GST_VIDEO_FORMAT_UNKNOWN);
+ g_return_if_fail (GST_VIDEO_INFO_FORMAT (out_info) !=
+ GST_VIDEO_FORMAT_ENCODED);
g_mutex_lock (&download->lock);
- for (i = 0; i < GST_VIDEO_INFO_N_PLANES (&download->info); i++) {
- data[i] = (guint8 *) gl_mem->data +
- GST_VIDEO_INFO_PLANE_OFFSET (&download->info, i);
+ if (gst_video_info_is_equal (&download->info, out_info)) {
+ g_mutex_unlock (&download->lock);
+ return;
}
- ret =
- _gst_gl_download_perform_with_data_unlocked (download, gl_mem->tex_id,
- data);
-
- if (ret)
- GST_GL_MEMORY_FLAG_UNSET (gl_mem, GST_GL_MEMORY_FLAG_NEED_DOWNLOAD);
+ gst_gl_download_reset (download);
+ download->initted = FALSE;
+ download->info = *out_info;
g_mutex_unlock (&download->lock);
-
- return ret;
}
/**
@@ -240,7 +196,7 @@ gst_gl_download_perform_with_memory (GstGLDownload * download,
* @data: (out): where the downloaded data should go
*
* Downloads @texture_id into @data. @data size and format is specified by
- * the #GstVideoFormat passed to gst_gl_download_init_format()
+ * the #GstVideoFormat passed to gst_gl_download_set_format()
*
* Returns: whether the download was successful
*/
@@ -266,7 +222,6 @@ static gboolean
_gst_gl_download_perform_with_data_unlocked (GstGLDownload * download,
GLuint texture_id, gpointer data[GST_VIDEO_MAX_PLANES])
{
- gboolean realloc = FALSE;
gpointer temp_data;
guint i;
@@ -281,28 +236,28 @@ _gst_gl_download_perform_with_data_unlocked (GstGLDownload * download,
g_return_val_if_fail (data[i] != NULL, FALSE);
}
- download->in_texture = texture_id;
- for (i = 0; i < GST_VIDEO_INFO_N_PLANES (&download->info); i++) {
- if (download->data[i] != data[i])
- realloc = TRUE;
- }
+ if (!download->in_tex[0])
+ download->in_tex[0] = gst_gl_memory_wrapped_texture (download->context,
+ texture_id, GST_VIDEO_GL_TEXTURE_TYPE_RGBA,
+ GST_VIDEO_INFO_WIDTH (&download->info),
+ GST_VIDEO_INFO_HEIGHT (&download->info), NULL, NULL);
- if (realloc) {
- for (i = 0; i < GST_VIDEO_INFO_N_PLANES (&download->info); i++) {
- if (download->out_texture[i])
- gst_memory_unref ((GstMemory *) download->out_texture[i]);
- download->data[i] = data[i];
- }
-
- if (GST_VIDEO_INFO_FORMAT (&download->info) == GST_VIDEO_FORMAT_YV12) {
- /* YV12 same as I420 except planes 1+2 swapped */
- temp_data = download->data[1];
- download->data[1] = download->data[2];
- download->data[2] = temp_data;
- }
+ download->in_tex[0]->tex_id = texture_id;
+ if (!download->out_tex[0]) {
gst_gl_memory_setup_wrapped (download->context, &download->info,
- download->data, download->out_texture);
+ data, download->out_tex);
+ }
+
+ for (i = 0; i < GST_VIDEO_INFO_N_PLANES (&download->info); i++) {
+ download->out_tex[i]->data = data[i];
+ }
+
+ if (GST_VIDEO_INFO_FORMAT (&download->info) == GST_VIDEO_FORMAT_YV12) {
+ /* YV12 same as I420 except planes 1+2 swapped */
+ temp_data = download->out_tex[1]->data;
+ download->out_tex[1]->data = download->out_tex[2]->data;
+ download->out_tex[2]->data = temp_data;
}
gst_gl_context_thread_add (download->context,
@@ -311,8 +266,8 @@ _gst_gl_download_perform_with_data_unlocked (GstGLDownload * download,
return download->priv->result;
}
-static void
-_init_download (GstGLContext * context, GstGLDownload * download)
+static gboolean
+_init_download (GstGLDownload * download)
{
GstVideoFormat v_format;
guint out_width, out_height;
@@ -322,29 +277,28 @@ _init_download (GstGLContext * context, GstGLDownload * download)
out_width = GST_VIDEO_INFO_WIDTH (&download->info);
out_height = GST_VIDEO_INFO_HEIGHT (&download->info);
+ if (download->initted)
+ return TRUE;
+
GST_TRACE ("initializing texture download for format %s",
gst_video_format_to_string (v_format));
- if (USING_GLES2 (context) && !USING_GLES3 (context)) {
+ if (USING_GLES2 (download->context) && !USING_GLES3 (download->context)) {
/* GL_RGBA is the only officially supported texture format in GLES2 */
if (v_format == GST_VIDEO_FORMAT_RGB || v_format == GST_VIDEO_FORMAT_BGR) {
- gst_gl_context_set_error (context, "Cannot download RGB textures in "
- "GLES2");
- download->priv->result = FALSE;
- return;
+ gst_gl_context_set_error (download->context, "Cannot download RGB "
+ "textures in GLES2");
+ return FALSE;
}
}
gst_video_info_set_format (&in_info, GST_VIDEO_FORMAT_RGBA, out_width,
out_height);
- download->priv->result =
- gst_gl_color_convert_init_format (download->convert, &in_info,
+ gst_gl_color_convert_set_format (download->convert, &in_info,
&download->info);
- if (!download->priv->result)
- return;
- download->priv->result = TRUE;
+ return TRUE;
}
static void
@@ -352,29 +306,28 @@ _do_download (GstGLContext * context, GstGLDownload * download)
{
guint out_width, out_height;
GstMapInfo map_info;
- GstGLMemory *in_tex[GST_VIDEO_MAX_PLANES] = { 0, };
gint i;
out_width = GST_VIDEO_INFO_WIDTH (&download->info);
out_height = GST_VIDEO_INFO_HEIGHT (&download->info);
- GST_TRACE ("doing YUV download of texture:%u (%ux%u)",
- download->in_texture, out_width, out_height);
+ if (!download->initted) {
+ if (!(download->priv->result = _init_download (download)))
+ return;
+ }
- in_tex[0] = gst_gl_memory_wrapped_texture (context, download->in_texture,
- GST_VIDEO_GL_TEXTURE_TYPE_RGBA, out_width, out_height, NULL, NULL);
+ GST_TRACE ("doing download of texture:%u (%ux%u)",
+ download->in_tex[0]->tex_id, out_width, out_height);
download->priv->result =
- gst_gl_color_convert_perform (download->convert, in_tex,
- download->out_texture);
+ gst_gl_color_convert_perform (download->convert, download->in_tex,
+ download->out_tex);
if (!download->priv->result)
return;
for (i = 0; i < GST_VIDEO_INFO_N_PLANES (&download->info); i++) {
- gst_memory_map ((GstMemory *) download->out_texture[i], &map_info,
+ gst_memory_map ((GstMemory *) download->out_tex[i], &map_info,
GST_MAP_READ);
- gst_memory_unmap ((GstMemory *) download->out_texture[i], &map_info);
+ gst_memory_unmap ((GstMemory *) download->out_tex[i], &map_info);
}
-
- gst_memory_unref ((GstMemory *) in_tex[0]);
}
diff --git a/gst-libs/gst/gl/gstgldownload.h b/gst-libs/gst/gl/gstgldownload.h
index 831b2cf6..972c0aa8 100644
--- a/gst-libs/gst/gl/gstgldownload.h
+++ b/gst-libs/gst/gl/gstgldownload.h
@@ -44,7 +44,7 @@ GType gst_gl_download_get_type (void);
struct _GstGLDownload
{
/* <private> */
- GObject parent;
+ GstObject parent;
GMutex lock;
@@ -54,12 +54,11 @@ struct _GstGLDownload
/* output data */
GstVideoInfo info;
- gpointer data[GST_VIDEO_MAX_PLANES];
gboolean initted;
/* used for the conversion */
- GLuint in_texture;
- GstGLMemory * out_texture[GST_VIDEO_MAX_PLANES];
+ GstGLMemory * in_tex[GST_VIDEO_MAX_PLANES];
+ GstGLMemory * out_tex[GST_VIDEO_MAX_PLANES];
GstGLDownloadPrivate *priv;
@@ -74,15 +73,13 @@ struct _GstGLDownload
struct _GstGLDownloadClass
{
/* <private> */
- GObjectClass object_class;
+ GstObjectClass object_class;
};
GstGLDownload * gst_gl_download_new (GstGLContext * context);
-gboolean gst_gl_download_init_format (GstGLDownload * download, GstVideoFormat v_format,
- guint out_width, guint out_height);
+void gst_gl_download_set_format (GstGLDownload * download, GstVideoInfo * out_info);
-gboolean gst_gl_download_perform_with_memory (GstGLDownload * download, GstGLMemory * gl_mem);
gboolean gst_gl_download_perform_with_data (GstGLDownload * download, GLuint texture_id,
gpointer data[GST_VIDEO_MAX_PLANES]);
diff --git a/gst-libs/gst/gl/gstglfilter.c b/gst-libs/gst/gl/gstglfilter.c
index 48748515..4007ac21 100644
--- a/gst-libs/gst/gl/gstglfilter.c
+++ b/gst-libs/gst/gl/gstglfilter.c
@@ -38,7 +38,9 @@ static GstStaticPadTemplate gst_gl_filter_src_pad_template =
GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS (
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE_WITH_FEATURES
+ (GST_CAPS_FEATURE_MEMORY_GL_MEMORY,
+ "RGBA") "; "
#if GST_GL_HAVE_PLATFORM_EGL
GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_MEMORY_EGL_IMAGE,
"RGBA") "; "
@@ -52,7 +54,9 @@ static GstStaticPadTemplate gst_gl_filter_sink_pad_template =
GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS (
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE_WITH_FEATURES
+ (GST_CAPS_FEATURE_MEMORY_GL_MEMORY,
+ "RGBA") "; "
#if GST_GL_HAVE_PLATFORM_EGL
GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_MEMORY_EGL_IMAGE,
"RGBA") "; "
@@ -656,31 +660,72 @@ done:
return othercaps;
}
+
+static GstCaps *
+gst_gl_filter_set_caps_features (const GstCaps * caps,
+ const gchar * feature_name)
+{
+ GstCaps *tmp = gst_caps_copy (caps);
+ guint n = gst_caps_get_size (tmp);
+ guint i = 0;
+
+ for (i = 0; i < n; i++) {
+ GstCapsFeatures *features = gst_caps_get_features (tmp, i);
+ if (features) {
+ guint n_f = gst_caps_features_get_size (features);
+ guint j = 0;
+ for (j = 0; j < n_f; j++) {
+ gst_caps_features_remove_id (features,
+ gst_caps_features_get_nth_id (features, j));
+ }
+ }
+
+ gst_caps_features_add (features, feature_name);
+ gst_caps_set_simple (tmp, "format", G_TYPE_STRING, "RGBA", NULL);
+ }
+
+ return tmp;
+}
+
static GstCaps *
gst_gl_filter_transform_caps (GstBaseTransform * bt,
GstPadDirection direction, GstCaps * caps, GstCaps * filter)
{
- GstCaps *newcaps, *result;
-
- if (direction == GST_PAD_SINK)
- newcaps =
- gst_static_pad_template_get_caps (&gst_gl_filter_src_pad_template);
- else if (direction == GST_PAD_SRC)
- newcaps =
- gst_static_pad_template_get_caps (&gst_gl_filter_sink_pad_template);
- else
- newcaps = gst_caps_new_any ();
+ GstCaps *tmp = NULL;
+ GstCaps *result = NULL;
+
+ if (direction == GST_PAD_SINK) {
+ GstCaps *glcaps = gst_gl_filter_set_caps_features (caps,
+ GST_CAPS_FEATURE_MEMORY_GL_MEMORY);
+#if GST_GL_HAVE_PLATFORM_EGL
+ GstCaps *eglcaps = gst_gl_filter_set_caps_features (caps,
+ GST_CAPS_FEATURE_MEMORY_EGL_IMAGE);
+#endif
+ GstCaps *uploadcaps = gst_gl_filter_set_caps_features (caps,
+ GST_CAPS_FEATURE_META_GST_VIDEO_GL_TEXTURE_UPLOAD_META);
+
+ tmp = gst_caps_new_empty ();
+
+ tmp = gst_caps_merge (tmp, glcaps);
+#if GST_GL_HAVE_PLATFORM_EGL
+ tmp = gst_caps_merge (tmp, eglcaps);
+#endif
+ tmp = gst_caps_merge (tmp, uploadcaps);
+ tmp = gst_caps_merge (tmp, gst_caps_copy (caps));
+ } else {
+ tmp = gst_caps_copy (caps);
+ }
if (filter) {
- result =
- gst_caps_intersect_full (filter, newcaps, GST_CAPS_INTERSECT_FIRST);
- gst_caps_unref (newcaps);
- newcaps = result;
+ result = gst_caps_intersect_full (filter, tmp, GST_CAPS_INTERSECT_FIRST);
+ gst_caps_unref (tmp);
+ } else {
+ result = tmp;
}
- GST_DEBUG_OBJECT (bt, "returning caps: %" GST_PTR_FORMAT, newcaps);
+ GST_DEBUG_OBJECT (bt, "returning caps: %" GST_PTR_FORMAT, result);
- return newcaps;
+ return result;
}
@@ -742,7 +787,7 @@ gst_gl_filter_propose_allocation (GstBaseTransform * trans,
GstGLFilter *filter = GST_GL_FILTER (trans);
GstBufferPool *pool;
GstStructure *config;
- GstCaps *caps;
+ GstCaps *caps, *decide_caps;
guint size;
gboolean need_pool;
GError *error = NULL;
@@ -788,20 +833,29 @@ gst_gl_filter_propose_allocation (GstBaseTransform * trans,
if (pool == NULL && need_pool) {
GstVideoInfo info;
+ GstBufferPool *decide_pool;
if (!gst_video_info_from_caps (&info, caps))
goto invalid_caps;
- GST_DEBUG_OBJECT (filter, "create new pool");
- pool = gst_gl_buffer_pool_new (filter->context);
+ gst_query_parse_allocation (decide_query, &decide_caps, NULL);
+ decide_pool = gst_base_transform_get_buffer_pool (trans);
+ if (GST_IS_GL_BUFFER_POOL (decide_pool)
+ && gst_caps_is_equal_fixed (decide_caps, caps)) {
+ pool = decide_pool;
+ } else {
+ GST_DEBUG_OBJECT (filter, "create new pool");
+ gst_object_unref (decide_pool);
+ pool = gst_gl_buffer_pool_new (filter->context);
- /* the normal size of a frame */
- size = info.size;
+ /* the normal size of a frame */
+ size = info.size;
- config = gst_buffer_pool_get_config (pool);
- gst_buffer_pool_config_set_params (config, caps, size, 0, 0);
- if (!gst_buffer_pool_set_config (pool, config))
- goto config_failed;
+ config = gst_buffer_pool_get_config (pool);
+ gst_buffer_pool_config_set_params (config, caps, size, 0, 0);
+ if (!gst_buffer_pool_set_config (pool, config))
+ goto config_failed;
+ }
}
/* we need at least 2 buffer because we hold on to the last one */
if (pool) {
@@ -837,9 +891,11 @@ gst_gl_filter_propose_allocation (GstBaseTransform * trans,
gst_object_unref (allocator);
#if GST_GL_HAVE_PLATFORM_EGL
- allocator = gst_allocator_find (GST_EGL_IMAGE_MEMORY_TYPE);
- gst_query_add_allocation_param (query, allocator, &params);
- gst_object_unref (allocator);
+ if (gst_gl_context_check_feature (filter->context, "EGL_KHR_image_base")) {
+ allocator = gst_allocator_find (GST_EGL_IMAGE_MEMORY_TYPE);
+ gst_query_add_allocation_param (query, allocator, &params);
+ gst_object_unref (allocator);
+ }
#endif
return TRUE;
@@ -1058,19 +1114,10 @@ gst_gl_filter_filter_texture (GstGLFilter * filter, GstBuffer * inbuf,
GST_LOG ("Output Buffer does not contain correct memory, "
"attempting to wrap for download");
- if (!filter->download) {
+ if (!filter->download)
filter->download = gst_gl_download_new (filter->context);
- if (!gst_gl_download_init_format (filter->download,
- GST_VIDEO_FRAME_FORMAT (&out_frame),
- GST_VIDEO_FRAME_WIDTH (&out_frame),
- GST_VIDEO_FRAME_HEIGHT (&out_frame))) {
- GST_ELEMENT_ERROR (filter, RESOURCE, NOT_FOUND,
- ("%s", "Failed to init download format"), (NULL));
- ret = FALSE;
- goto error;
- }
- }
+ gst_gl_download_set_format (filter->download, &out_frame.info);
out_tex = filter->out_tex_id;
}
@@ -1123,9 +1170,8 @@ gst_gl_filter_transform (GstBaseTransform * bt, GstBuffer * inbuf,
filter->upload = gst_object_ref (GST_GL_BUFFER_POOL (pool)->upload);
} else {
filter->upload = gst_gl_upload_new (filter->context);
- if (!gst_gl_upload_init_format (filter->upload, &filter->in_info))
- goto upload_error;
}
+ gst_gl_upload_set_format (filter->upload, &filter->in_info);
gst_caps_unref (in_caps);
gst_caps_unref (out_caps);
@@ -1140,15 +1186,6 @@ gst_gl_filter_transform (GstBaseTransform * bt, GstBuffer * inbuf,
gst_gl_filter_filter_texture (filter, inbuf, outbuf);
return GST_FLOW_OK;
-
-upload_error:
- {
- GST_ELEMENT_ERROR (filter, RESOURCE, NOT_FOUND, ("Failed to init upload"),
- (NULL));
- gst_object_unref (filter->upload);
- filter->upload = NULL;
- return GST_FLOW_ERROR;
- }
}
/* convenience functions to simplify filter development */
diff --git a/gst-libs/gst/gl/gstglmemory.c b/gst-libs/gst/gl/gstglmemory.c
index 8d3d65d0..45d4c1cf 100644
--- a/gst-libs/gst/gl/gstglmemory.c
+++ b/gst-libs/gst/gl/gstglmemory.c
@@ -208,7 +208,7 @@ gst_gl_texture_type_from_format (GstVideoFormat v_format, guint plane)
break;
case GST_VIDEO_FORMAT_YUY2:
case GST_VIDEO_FORMAT_UYVY:
- return GST_VIDEO_GL_TEXTURE_TYPE_RGBA;
+ return GST_VIDEO_GL_TEXTURE_TYPE_LUMINANCE_ALPHA;
break;
case GST_VIDEO_FORMAT_NV12:
case GST_VIDEO_FORMAT_NV21:
@@ -233,11 +233,6 @@ gst_gl_texture_type_from_format (GstVideoFormat v_format, guint plane)
static inline guint
_get_plane_width (GstVideoInfo * info, guint plane)
{
- if (GST_VIDEO_INFO_FORMAT (info) == GST_VIDEO_FORMAT_YUY2
- || GST_VIDEO_INFO_FORMAT (info) == GST_VIDEO_FORMAT_UYVY) {
- return GST_VIDEO_INFO_COMP_WIDTH (info, 1);
- }
-
if (GST_VIDEO_INFO_IS_YUV (info))
/* For now component width and plane width are the same and the
* plane-component mapping matches
@@ -400,6 +395,7 @@ _calculate_unpack_length (GstGLMemory * gl_mem)
gl_mem->unpack_length = j;
gl_mem->tex_scaling[0] =
(gfloat) (gl_mem->width * n_gl_bytes) / (gfloat) gl_mem->stride;
+ gl_mem->width = gl_mem->stride / n_gl_bytes;
break;
}
j >>= 1;
@@ -511,9 +507,12 @@ _gl_mem_new (GstAllocator * allocator, GstMemory * parent,
{
GstGLMemory *mem;
GenTexture data = { 0, };
+ mem = g_slice_new0 (GstGLMemory);
+ _gl_mem_init (mem, allocator, parent, context, tex_type, width, height,
+ stride, user_data, notify);
- data.width = width;
- data.height = height;
+ data.width = mem->width;
+ data.height = mem->height;
data.gl_format = _gst_gl_format_from_gl_texture_type (tex_type);
data.gl_type = GL_UNSIGNED_BYTE;
if (tex_type == GST_VIDEO_GL_TEXTURE_TYPE_RGB16)
@@ -528,10 +527,6 @@ _gl_mem_new (GstAllocator * allocator, GstMemory * parent,
GST_CAT_TRACE (GST_CAT_GL_MEMORY, "created texture %u", data.result);
- mem = g_slice_new0 (GstGLMemory);
- _gl_mem_init (mem, allocator, parent, context, tex_type, width, height,
- stride, user_data, notify);
-
mem->tex_id = data.result;
return mem;
@@ -673,8 +668,8 @@ _gl_mem_copy_thread (GstGLContext * context, gpointer data)
gl->FramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_TEXTURE_2D, src->tex_id, 0);
- if (!gst_gl_context_check_framebuffer_status (src->context))
- goto fbo_error;
+// if (!gst_gl_context_check_framebuffer_status (src->context))
+// goto fbo_error;
gl->BindTexture (GL_TEXTURE_2D, tex_id);
if (copy_params->respecify) {
diff --git a/gst-libs/gst/gl/gstglmemory.h b/gst-libs/gst/gl/gstglmemory.h
index 559e62d8..535bea79 100644
--- a/gst-libs/gst/gl/gstglmemory.h
+++ b/gst-libs/gst/gl/gstglmemory.h
@@ -104,6 +104,8 @@ struct _GstGLMemory
gpointer _gst_reserved[GST_PADDING];
};
+#define GST_CAPS_FEATURE_MEMORY_GL_MEMORY "memory:GLMemory"
+
/**
* GST_GL_MEMORY_ALLOCATOR:
*
diff --git a/gst-libs/gst/gl/gstglmixer.c b/gst-libs/gst/gl/gstglmixer.c
index 238f4e10..89b68db8 100644
--- a/gst-libs/gst/gl/gstglmixer.c
+++ b/gst-libs/gst/gl/gstglmixer.c
@@ -533,19 +533,25 @@ enum
static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE (GST_GL_COLOR_CONVERT_FORMATS) "; "
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE_WITH_FEATURES
+ (GST_CAPS_FEATURE_MEMORY_GL_MEMORY,
+ "RGBA") "; "
GST_VIDEO_CAPS_MAKE_WITH_FEATURES
(GST_CAPS_FEATURE_META_GST_VIDEO_GL_TEXTURE_UPLOAD_META,
- "RGBA"))
+ "RGBA")
+ "; " GST_VIDEO_CAPS_MAKE (GST_GL_COLOR_CONVERT_FORMATS))
);
static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink_%d",
GST_PAD_SINK,
GST_PAD_REQUEST,
- GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE (GST_GL_COLOR_CONVERT_FORMATS) "; "
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE_WITH_FEATURES
+ (GST_CAPS_FEATURE_MEMORY_GL_MEMORY,
+ "RGBA") "; "
GST_VIDEO_CAPS_MAKE_WITH_FEATURES
(GST_CAPS_FEATURE_META_GST_VIDEO_GL_TEXTURE_UPLOAD_META,
- "RGBA"))
+ "RGBA")
+ "; " GST_VIDEO_CAPS_MAKE (GST_GL_COLOR_CONVERT_FORMATS))
);
static gboolean gst_gl_mixer_src_query (GstPad * pad, GstObject * object,
@@ -1632,19 +1638,10 @@ gst_gl_mixer_process_textures (GstGLMixer * mix, GstBuffer * outbuf)
out_tex = mix->out_tex_id;;
- if (!mix->download) {
+ if (!mix->download)
mix->download = gst_gl_download_new (mix->context);
- if (!gst_gl_download_init_format (mix->download,
- GST_VIDEO_FRAME_FORMAT (&out_frame),
- GST_VIDEO_FRAME_WIDTH (&out_frame),
- GST_VIDEO_FRAME_HEIGHT (&out_frame))) {
- GST_ELEMENT_ERROR (mix, RESOURCE, NOT_FOUND,
- ("%s", "Failed to init upload format"), (NULL));
- res = FALSE;
- goto out;
- }
- }
+ gst_gl_download_set_format (mix->download, &out_frame.info);
out_gl_wrapped = TRUE;
}
@@ -1679,12 +1676,7 @@ gst_gl_mixer_process_textures (GstGLMixer * mix, GstBuffer * outbuf)
if (!pad->upload) {
pad->upload = gst_gl_upload_new (mix->context);
- if (!gst_gl_upload_init_format (pad->upload, &pad->in_info)) {
- GST_ELEMENT_ERROR (mix, RESOURCE, NOT_FOUND, ("%s",
- "Failed to init upload format"), (NULL));
- res = FALSE;
- goto out;
- }
+ gst_gl_upload_set_format (pad->upload, &pad->in_info);
}
if (!gst_gl_upload_perform_with_buffer (pad->upload, mixcol->buffer,
diff --git a/gst-libs/gst/gl/gstglshader.c b/gst-libs/gst/gl/gstglshader.c
index 3482a044..f274b773 100644
--- a/gst-libs/gst/gl/gstglshader.c
+++ b/gst-libs/gst/gl/gstglshader.c
@@ -115,7 +115,8 @@ GST_DEBUG_CATEGORY_STATIC (gst_gl_shader_debug);
#define DEBUG_INIT \
GST_DEBUG_CATEGORY_INIT (gst_gl_shader_debug, "glshader", 0, "shader");
-G_DEFINE_TYPE_WITH_CODE (GstGLShader, gst_gl_shader, G_TYPE_OBJECT, DEBUG_INIT);
+G_DEFINE_TYPE_WITH_CODE (GstGLShader, gst_gl_shader, GST_TYPE_OBJECT,
+ DEBUG_INIT);
static void
_cleanup_shader (GstGLContext * context, GstGLShader * shader)
diff --git a/gst-libs/gst/gl/gstglshader.h b/gst-libs/gst/gl/gstglshader.h
index 73cc8ebf..a56b642f 100644
--- a/gst-libs/gst/gl/gstglshader.h
+++ b/gst-libs/gst/gl/gstglshader.h
@@ -48,7 +48,7 @@ typedef enum {
struct _GstGLShader {
/*< private >*/
- GObject parent;
+ GstObject parent;
GstGLContext *context;
@@ -57,7 +57,7 @@ struct _GstGLShader {
struct _GstGLShaderClass {
/*< private >*/
- GObjectClass parent_class;
+ GstObjectClass parent_class;
};
/* methods */
diff --git a/gst-libs/gst/gl/gstglshadervariables.c b/gst-libs/gst/gl/gstglshadervariables.c
index 156d68b2..325a71f2 100644
--- a/gst-libs/gst/gl/gstglshadervariables.c
+++ b/gst-libs/gst/gl/gstglshadervariables.c
@@ -256,8 +256,10 @@ gst_gl_shadervariables_parse (GstGLShader * shader, char *variables,
if (arraysize) {
char *s = g_malloc (strlen (vartype) + 32);
sprintf (s, "%s[%d]", vartype, arraysize);
- if (strcmp (t, s))
+ if (strcmp (t, s)) {
+ g_free (s);
goto parse_error;
+ }
} else {
if (strcmp (t, vartype))
goto parse_error;
diff --git a/gst-libs/gst/gl/gstglupload.c b/gst-libs/gst/gl/gstglupload.c
index aa7dbdcf..fb87153f 100644
--- a/gst-libs/gst/gl/gstglupload.c
+++ b/gst-libs/gst/gl/gstglupload.c
@@ -27,6 +27,10 @@
#include "gl.h"
#include "gstglupload.h"
+#if GST_GL_HAVE_PLATFORM_EGL
+#include "egl/gsteglimagememory.h"
+#endif
+
/**
* SECTION:gstglupload
* @short_description: an object that uploads to GL textures
@@ -46,11 +50,12 @@
static gboolean _upload_memory (GstGLUpload * upload);
//static gboolean _do_upload_fill (GstGLContext * context, GstGLUpload * upload);
//static gboolean _do_upload_make (GstGLContext * context, GstGLUpload * upload);
-static void _init_upload (GstGLContext * context, GstGLUpload * upload);
+static gboolean _init_upload (GstGLUpload * upload);
//static gboolean _init_upload_fbo (GstGLContext * context, GstGLUpload * upload);
static gboolean _gst_gl_upload_perform_with_data_unlocked (GstGLUpload * upload,
GLuint texture_id, gpointer data[GST_VIDEO_MAX_PLANES]);
static void _do_upload_with_meta (GstGLContext * context, GstGLUpload * upload);
+static void gst_gl_upload_reset (GstGLUpload * upload);
/* *INDENT-OFF* */
@@ -87,9 +92,10 @@ GST_DEBUG_CATEGORY_STATIC (gst_gl_upload_debug);
#define DEBUG_INIT \
GST_DEBUG_CATEGORY_INIT (gst_gl_upload_debug, "glupload", 0, "upload");
-G_DEFINE_TYPE_WITH_CODE (GstGLUpload, gst_gl_upload, G_TYPE_OBJECT, DEBUG_INIT);
+G_DEFINE_TYPE_WITH_CODE (GstGLUpload, gst_gl_upload, GST_TYPE_OBJECT, DEBUG_INIT);
static void gst_gl_upload_finalize (GObject * object);
+
#define GST_GL_UPLOAD_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
GST_TYPE_GL_UPLOAD, GstGLUploadPrivate))
@@ -107,6 +113,9 @@ gst_gl_upload_init (GstGLUpload * upload)
upload->priv = GST_GL_UPLOAD_GET_PRIVATE (upload);
upload->context = NULL;
+ upload->priv->tex_id = 0;
+
+ gst_video_info_set_format (&upload->in_info, GST_VIDEO_FORMAT_ENCODED, 0, 0);
g_mutex_init (&upload->lock);
}
@@ -137,14 +146,7 @@ gst_gl_upload_finalize (GObject * object)
upload = GST_GL_UPLOAD (object);
- if (upload->convert) {
- gst_object_unref (upload->convert);
- }
-
- if (upload->out_tex) {
- gst_memory_unref ((GstMemory *) upload->out_tex);
- upload->out_tex = NULL;
- }
+ gst_gl_upload_reset (upload);
if (upload->context) {
gst_object_unref (upload->context);
@@ -156,48 +158,85 @@ gst_gl_upload_finalize (GObject * object)
G_OBJECT_CLASS (gst_gl_upload_parent_class)->finalize (object);
}
-static gboolean
-_gst_gl_upload_init_format_unlocked (GstGLUpload * upload,
- GstVideoInfo *in_info)
+static void
+gst_gl_upload_reset (GstGLUpload * upload)
{
- g_return_val_if_fail (upload != NULL, FALSE);
- g_return_val_if_fail (GST_VIDEO_INFO_FORMAT (in_info) !=
- GST_VIDEO_FORMAT_UNKNOWN, FALSE);
- g_return_val_if_fail (GST_VIDEO_INFO_FORMAT (in_info) !=
- GST_VIDEO_FORMAT_ENCODED, FALSE);
+ guint i;
- if (upload->initted) {
- return TRUE;
+ if (upload->priv->tex_id) {
+ gst_gl_context_del_texture (upload->context, &upload->priv->tex_id);
+ upload->priv->tex_id = 0;
}
- upload->in_info = *in_info;
+ if (upload->convert) {
+ gst_object_unref (upload->convert);
+ upload->convert = NULL;
+ }
- gst_gl_context_thread_add (upload->context,
- (GstGLContextThreadFunc) _init_upload, upload);
+ if (upload->out_tex) {
+ gst_memory_unref ((GstMemory *) upload->out_tex);
+ upload->out_tex = NULL;
+ }
- upload->initted = upload->priv->result;
+ for (i = 0; i < GST_VIDEO_MAX_PLANES; i++) {
+ if (upload->in_tex[i]) {
+ gst_memory_unref ((GstMemory *) upload->in_tex[i]);
+ upload->in_tex[i] = NULL;
+ }
+ }
+}
- return upload->initted;
+static void
+_gst_gl_upload_set_format_unlocked (GstGLUpload * upload,
+ GstVideoInfo *in_info)
+{
+ g_return_if_fail (upload != NULL);
+ g_return_if_fail (GST_VIDEO_INFO_FORMAT (in_info) !=
+ GST_VIDEO_FORMAT_UNKNOWN);
+ g_return_if_fail (GST_VIDEO_INFO_FORMAT (in_info) !=
+ GST_VIDEO_FORMAT_ENCODED);
+
+ if (gst_video_info_is_equal (&upload->in_info, in_info))
+ return;
+
+ gst_gl_upload_reset (upload);
+ upload->convert = gst_gl_color_convert_new (upload->context);
+ upload->in_info = *in_info;
+ upload->initted = FALSE;
}
/**
- * gst_gl_upload_init_format:
+ * gst_gl_upload_set_format:
* @upload: a #GstGLUpload
* @in_info: input #GstVideoInfo
*
* Initializes @upload with the information required for upload.
+ */
+void
+gst_gl_upload_set_format (GstGLUpload * upload, GstVideoInfo * in_info)
+{
+ g_mutex_lock (&upload->lock);
+
+ _gst_gl_upload_set_format_unlocked (upload, in_info);
+
+ g_mutex_unlock (&upload->lock);
+}
+
+/**
+ * gst_gl_upload_get_format:
+ * @upload: a #GstGLUpload
*
- * Returns: whether the initialization was successful
+ * Returns: (transfer none): The #GstVideoInfo set by gst_gl_upload_set_format()
*/
-gboolean
-gst_gl_upload_init_format (GstGLUpload * upload, GstVideoInfo * in_info)
+GstVideoInfo *
+gst_gl_upload_get_format (GstGLUpload * upload)
{
- gboolean ret;
+ GstVideoInfo *ret;
g_mutex_lock (&upload->lock);
- ret = _gst_gl_upload_init_format_unlocked (upload, in_info);
+ ret = &upload->in_info;
g_mutex_unlock (&upload->lock);
@@ -223,6 +262,7 @@ gst_gl_upload_perform_with_buffer (GstGLUpload * upload, GstBuffer * buffer,
GstVideoGLTextureUploadMeta *gl_tex_upload_meta;
guint texture_ids[] = { 0, 0, 0, 0 };
gint i;
+ gboolean ret;
g_return_val_if_fail (upload != NULL, FALSE);
g_return_val_if_fail (buffer != NULL, FALSE);
@@ -233,23 +273,42 @@ gst_gl_upload_perform_with_buffer (GstGLUpload * upload, GstBuffer * buffer,
mem = gst_buffer_peek_memory (buffer, 0);
if (gst_is_gl_memory (mem)) {
+ if (GST_VIDEO_INFO_FORMAT (&upload->in_info) == GST_VIDEO_FORMAT_RGBA) {
+ GstMapInfo map_info;
+
+ gst_memory_map (mem, &map_info, GST_MAP_READ | GST_MAP_GL);
+ gst_memory_unmap (mem, &map_info);
+
+ *tex_id = ((GstGLMemory *) mem)->tex_id;
+ return TRUE;
+ }
+
if (!upload->out_tex)
upload->out_tex = (GstGLMemory *) gst_gl_memory_alloc (upload->context,
GST_VIDEO_GL_TEXTURE_TYPE_RGBA, GST_VIDEO_INFO_WIDTH (&upload->in_info),
GST_VIDEO_INFO_HEIGHT (&upload->in_info),
- GST_VIDEO_INFO_PLANE_STRIDE (&upload->in_info, 0));
+ 4 * GST_VIDEO_INFO_WIDTH (&upload->in_info));
GST_LOG_OBJECT (upload, "Attempting upload with GstGLMemory");
for (i = 0; i < GST_VIDEO_INFO_N_PLANES (&upload->in_info); i++) {
upload->in_tex[i] = (GstGLMemory *) gst_buffer_peek_memory (buffer, i);
}
- _upload_memory (upload);
+ ret = _upload_memory (upload);
*tex_id = upload->out_tex->tex_id;
- return TRUE;
+ for (i = 0; i < GST_VIDEO_INFO_N_PLANES (&upload->in_info); i++) {
+ upload->in_tex[i] = NULL;
+ }
+ return ret;
}
+#if GST_GL_HAVE_PLATFORM_EGL
+ if (!upload->priv->tex_id && gst_is_egl_image_memory (mem))
+ gst_gl_context_gen_texture (upload->context, &upload->priv->tex_id,
+ GST_VIDEO_FORMAT_RGBA, 0, 0);
+#endif
+
if (!upload->priv->tex_id)
gst_gl_context_gen_texture (upload->context, &upload->priv->tex_id,
GST_VIDEO_FORMAT_RGBA, GST_VIDEO_INFO_WIDTH (&upload->in_info),
@@ -281,6 +340,14 @@ gst_gl_upload_perform_with_buffer (GstGLUpload * upload, GstBuffer * buffer,
return FALSE;
}
+ /* update the video info from the one updated by frame_map using video meta */
+ gst_gl_upload_set_format (upload, &upload->priv->frame.info);
+
+ if (!upload->priv->tex_id)
+ gst_gl_context_gen_texture (upload->context, &upload->priv->tex_id,
+ GST_VIDEO_FORMAT_RGBA, GST_VIDEO_INFO_WIDTH (&upload->in_info),
+ GST_VIDEO_INFO_HEIGHT (&upload->in_info));
+
if (!gst_gl_upload_perform_with_data (upload, upload->priv->tex_id,
upload->priv->frame.data)) {
return FALSE;
@@ -307,7 +374,6 @@ gst_gl_upload_release_buffer (GstGLUpload * upload)
static gboolean
_do_upload_for_meta (GstGLUpload * upload, GstVideoGLTextureUploadMeta * meta)
{
- GstVideoMeta *v_meta;
GstVideoInfo in_info;
GstVideoFrame frame;
GstMemory *mem;
@@ -316,25 +382,6 @@ _do_upload_for_meta (GstGLUpload * upload, GstVideoGLTextureUploadMeta * meta)
g_return_val_if_fail (upload != NULL, FALSE);
g_return_val_if_fail (meta != NULL, FALSE);
- v_meta = gst_buffer_get_video_meta (upload->priv->buffer);
-
- if (!upload->initted) {
- GstVideoFormat v_format;
- guint width, height;
-
- if (v_meta == NULL)
- return FALSE;
-
- v_format = v_meta->format;
- width = v_meta->width;
- height = v_meta->height;
-
- gst_video_info_set_format (&in_info, v_format, width, height);
-
- if (!_gst_gl_upload_init_format_unlocked (upload, &in_info))
- return FALSE;
- }
-
/* GstGLMemory */
mem = gst_buffer_peek_memory (upload->priv->buffer, 0);
@@ -342,25 +389,27 @@ _do_upload_for_meta (GstGLUpload * upload, GstVideoGLTextureUploadMeta * meta)
GstGLMemory *gl_mem = (GstGLMemory *) mem;
upload->in_tex[0] = gl_mem;
- _upload_memory (upload);
+ ret = _upload_memory (upload);
upload->in_tex[0] = NULL;
- if (upload->priv->result)
+ if (ret)
return TRUE;
}
- if (v_meta == NULL)
- return FALSE;
-
- gst_video_info_set_format (&in_info, v_meta->format, v_meta->width,
- v_meta->height);
-
if (!gst_video_frame_map (&frame, &in_info, upload->priv->buffer,
GST_MAP_READ)) {
GST_ERROR ("failed to map video frame");
return FALSE;
}
+ /* update the video info from the one updated by frame_map using video meta */
+ gst_gl_upload_set_format (upload, &upload->priv->frame.info);
+
+ if (!upload->priv->tex_id)
+ gst_gl_context_gen_texture (upload->context, &upload->priv->tex_id,
+ GST_VIDEO_FORMAT_RGBA, GST_VIDEO_INFO_WIDTH (&upload->in_info),
+ GST_VIDEO_INFO_HEIGHT (&upload->in_info));
+
ret = _gst_gl_upload_perform_with_data_unlocked (upload,
upload->out_tex->tex_id, frame.data);
@@ -452,19 +501,43 @@ _gst_gl_upload_perform_for_gl_texture_upload_meta (GstVideoGLTextureUploadMeta *
g_mutex_lock (&upload->lock);
- upload->out_tex = gst_gl_memory_wrapped_texture (upload->context,
- texture_id[0], GST_VIDEO_GL_TEXTURE_TYPE_RGBA,
- GST_VIDEO_INFO_WIDTH (&upload->in_info),
- GST_VIDEO_INFO_HEIGHT (&upload->in_info), NULL, NULL);;
+ if (!upload->initted) {
+ GstVideoInfo in_info;
+ GstVideoMeta *v_meta = gst_buffer_get_video_meta (upload->priv->buffer);
+ gint i;
+
+ if (v_meta == NULL)
+ return FALSE;
+
+ gst_video_info_init (&in_info);
+ in_info.finfo = gst_video_format_get_info (v_meta->format);
+ in_info.width = v_meta->width;
+ in_info.height = v_meta->height;
+
+ for (i = 0; i < in_info.finfo->n_planes; i++) {
+ in_info.offset[i] = v_meta->offset[i];
+ in_info.stride[i] = v_meta->stride[i];
+ }
+
+ _gst_gl_upload_set_format_unlocked (upload, &in_info);
+
+ upload->out_tex = gst_gl_memory_wrapped_texture (upload->context,
+ texture_id[0], GST_VIDEO_GL_TEXTURE_TYPE_RGBA,
+ GST_VIDEO_INFO_WIDTH (&upload->in_info),
+ GST_VIDEO_INFO_HEIGHT (&upload->in_info), NULL, NULL);
+ }
+
+ /* FIXME: kinda breaks the abstraction */
+ if (upload->out_tex->tex_id != texture_id[0]) {
+ upload->out_tex->tex_id = texture_id[0];
+ GST_GL_MEMORY_FLAG_SET (upload->out_tex, GST_GL_MEMORY_FLAG_NEED_DOWNLOAD);
+ }
GST_LOG ("Uploading for meta with textures %i,%i,%i,%i", texture_id[0],
texture_id[1], texture_id[2], texture_id[3]);
ret = _do_upload_for_meta (upload, meta);
- gst_memory_unref ((GstMemory *) upload->out_tex);
- upload->out_tex = NULL;
-
g_mutex_unlock (&upload->lock);
return ret;
@@ -513,7 +586,7 @@ gst_gl_upload_add_video_gl_texture_upload_meta (GstGLUpload * upload,
* @data: where the downloaded data should go
*
* Uploads @data into @texture_id. data size and format is specified by
- * the #GstVideoInfo<!-- -->s passed to gst_gl_upload_init_format()
+ * the #GstVideoInfo<!-- -->s passed to gst_gl_upload_set_format()
*
* Returns: whether the upload was successful
*/
@@ -527,14 +600,18 @@ gst_gl_upload_perform_with_data (GstGLUpload * upload, GLuint texture_id,
g_mutex_lock (&upload->lock);
- upload->out_tex = gst_gl_memory_wrapped_texture (upload->context, texture_id,
- GST_VIDEO_GL_TEXTURE_TYPE_RGBA, GST_VIDEO_INFO_WIDTH (&upload->in_info),
- GST_VIDEO_INFO_HEIGHT (&upload->in_info), NULL, NULL);
+ if (!upload->out_tex)
+ upload->out_tex = gst_gl_memory_wrapped_texture (upload->context, texture_id,
+ GST_VIDEO_GL_TEXTURE_TYPE_RGBA, GST_VIDEO_INFO_WIDTH (&upload->in_info),
+ GST_VIDEO_INFO_HEIGHT (&upload->in_info), NULL, NULL);
- ret = _gst_gl_upload_perform_with_data_unlocked (upload, texture_id, data);
+ /* FIXME: kinda breaks the abstraction */
+ if (upload->out_tex->tex_id != texture_id) {
+ upload->out_tex->tex_id = texture_id;
+ GST_GL_MEMORY_FLAG_SET (upload->out_tex, GST_GL_MEMORY_FLAG_NEED_DOWNLOAD);
+ }
- gst_memory_unref ((GstMemory *) upload->out_tex);
- upload->out_tex = NULL;
+ ret = _gst_gl_upload_perform_with_data_unlocked (upload, texture_id, data);
g_mutex_unlock (&upload->lock);
@@ -550,30 +627,31 @@ _gst_gl_upload_perform_with_data_unlocked (GstGLUpload * upload,
g_return_val_if_fail (upload != NULL, FALSE);
g_return_val_if_fail (texture_id > 0, FALSE);
- gst_gl_memory_setup_wrapped (upload->context, &upload->in_info, data,
- upload->in_tex);
+ if (!upload->in_tex[0])
+ gst_gl_memory_setup_wrapped (upload->context, &upload->in_info, data,
+ upload->in_tex);
- GST_LOG ("Uploading data into texture %u", texture_id);
-
- _upload_memory (upload);
-
- for (i = 0; i < GST_VIDEO_INFO_N_PLANES (&upload->in_info); i++) {
- gst_memory_unref ((GstMemory *) upload->in_tex[i]);
- upload->in_tex[i] = NULL;
+ for (i = 0; i < GST_VIDEO_MAX_PLANES; i++) {
+ if (upload->in_tex[i] && upload->in_tex[i]->data != data[i]) {
+ upload->in_tex[i]->data = data[i];
+ GST_GL_MEMORY_FLAG_SET (upload->in_tex[i], GST_GL_MEMORY_FLAG_NEED_UPLOAD);
+ }
}
- return upload->priv->result;
+ GST_LOG ("Uploading data into texture %u", texture_id);
+
+ return _upload_memory (upload);
}
/* Called in the gl thread */
-static void
-_init_upload (GstGLContext * context, GstGLUpload * upload)
+static gboolean
+_init_upload (GstGLUpload * upload)
{
GstGLFuncs *gl;
GstVideoFormat v_format;
GstVideoInfo out_info;
- gl = context->gl_vtable;
+ gl = upload->context->gl_vtable;
v_format = GST_VIDEO_INFO_FORMAT (&upload->in_info);
@@ -581,7 +659,7 @@ _init_upload (GstGLContext * context, GstGLUpload * upload)
gst_video_format_to_string (v_format));
if (!gl->CreateProgramObject && !gl->CreateProgram) {
- gst_gl_context_set_error (context,
+ gst_gl_context_set_error (upload->context,
"Cannot upload YUV formats without OpenGL shaders");
goto error;
}
@@ -590,15 +668,14 @@ _init_upload (GstGLContext * context, GstGLUpload * upload)
GST_VIDEO_INFO_WIDTH (&upload->in_info),
GST_VIDEO_INFO_HEIGHT (&upload->in_info));
- if (!gst_gl_color_convert_init_format (upload->convert, &upload->in_info,
- &out_info))
- goto error;
+ gst_gl_color_convert_set_format (upload->convert, &upload->in_info, &out_info);
- upload->priv->result = TRUE;
- return;
+ upload->initted = TRUE;
+
+ return TRUE;
error:
- upload->priv->result = FALSE;
+ return FALSE;
}
static gboolean
@@ -607,21 +684,18 @@ _upload_memory (GstGLUpload * upload)
guint in_width, in_height;
guint in_texture[GST_VIDEO_MAX_PLANES];
GstGLMemory *out_texture[GST_VIDEO_MAX_PLANES] = {upload->out_tex, 0, 0, 0};
- GstMapInfo map_infos[GST_VIDEO_MAX_PLANES];
- gboolean res = TRUE;
gint i;
in_width = GST_VIDEO_INFO_WIDTH (&upload->in_info);
in_height = GST_VIDEO_INFO_HEIGHT (&upload->in_info);
- for (i = 0; i < GST_VIDEO_INFO_N_PLANES (&upload->in_info); i++) {
- if (!gst_memory_map ((GstMemory *) upload->in_tex[i], &map_infos[i],
- GST_MAP_READ | GST_MAP_GL)) {
- gst_gl_context_set_error (upload->context, "Failed to map GL memory %u", i);
- res = FALSE;
- goto out;
+ if (!upload->initted) {
+ if (!_init_upload (upload)) {
+ return FALSE;
}
+ }
+ for (i = 0; i < GST_VIDEO_INFO_N_PLANES (&upload->in_info); i++) {
in_texture[i] = upload->in_tex[i]->tex_id;
}
@@ -629,12 +703,5 @@ _upload_memory (GstGLUpload * upload)
out_texture[0]->tex_id, in_texture[0], in_texture[1], in_texture[2],
in_width, in_height);
- gst_gl_color_convert_perform (upload->convert, upload->in_tex, out_texture);
-
-out:
- for (i--; i >= 0; i--) {
- gst_memory_unmap ((GstMemory *) upload->in_tex[i], &map_infos[i]);
- }
-
- return res;
+ return gst_gl_color_convert_perform (upload->convert, upload->in_tex, out_texture);
}
diff --git a/gst-libs/gst/gl/gstglupload.h b/gst-libs/gst/gl/gstglupload.h
index 5cb63335..51ee1315 100644
--- a/gst-libs/gst/gl/gstglupload.h
+++ b/gst-libs/gst/gl/gstglupload.h
@@ -44,7 +44,7 @@ GType gst_gl_upload_get_type (void);
struct _GstGLUpload
{
/* <private> */
- GObject parent;
+ GstObject parent;
GMutex lock;
@@ -72,12 +72,13 @@ struct _GstGLUpload
*/
struct _GstGLUploadClass
{
- GObjectClass object_class;
+ GstObjectClass object_class;
};
GstGLUpload * gst_gl_upload_new (GstGLContext * context);
-gboolean gst_gl_upload_init_format (GstGLUpload * upload, GstVideoInfo * in_info);
+void gst_gl_upload_set_format (GstGLUpload * upload, GstVideoInfo * in_info);
+GstVideoInfo * gst_gl_upload_get_format (GstGLUpload * upload);
gboolean gst_gl_upload_add_video_gl_texture_upload_meta (GstGLUpload * upload, GstBuffer * buffer);
diff --git a/gst-libs/gst/gl/gstglutils.c b/gst-libs/gst/gl/gstglutils.c
index 49769924..d5df84bf 100644
--- a/gst-libs/gst/gl/gstglutils.c
+++ b/gst-libs/gst/gl/gstglutils.c
@@ -111,8 +111,10 @@ _gen_texture (GstGLContext * context, GenTexture * data)
gl->GenTextures (1, &data->result);
gl->BindTexture (GL_TEXTURE_2D, data->result);
- gl->TexImage2D (GL_TEXTURE_2D, 0, GL_RGBA8, data->width,
- data->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
+
+ if (data->width > 0 && data->height > 0)
+ gl->TexImage2D (GL_TEXTURE_2D, 0, GL_RGBA8, data->width,
+ data->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
diff --git a/gst-libs/gst/gl/gstglwindow.c b/gst-libs/gst/gl/gstglwindow.c
index 49ab3cac..329327ba 100644
--- a/gst-libs/gst/gl/gstglwindow.c
+++ b/gst-libs/gst/gl/gstglwindow.c
@@ -72,7 +72,7 @@
GST_DEBUG_CATEGORY (GST_CAT_DEFAULT);
#define gst_gl_window_parent_class parent_class
-G_DEFINE_ABSTRACT_TYPE (GstGLWindow, gst_gl_window, G_TYPE_OBJECT);
+G_DEFINE_ABSTRACT_TYPE (GstGLWindow, gst_gl_window, GST_TYPE_OBJECT);
#define GST_GL_WINDOW_GET_PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE((o), GST_GL_TYPE_WINDOW, GstGLWindowPrivate))
@@ -182,7 +182,7 @@ gst_gl_window_new (GstGLDisplay * display)
window = GST_GL_WINDOW (gst_gl_window_android_egl_new ());
#endif
#if GST_GL_HAVE_WINDOW_EAGL
- if (!window && (!user_choice || g_strstr_len (user_choice, 7, "eagl")))
+ if (!window && (!user_choice || g_strstr_len (user_choice, 4, "eagl")))
window = GST_GL_WINDOW (gst_gl_window_eagl_new ());
#endif
if (!window) {
diff --git a/gst-libs/gst/gl/gstglwindow.h b/gst-libs/gst/gl/gstglwindow.h
index 217f03cb..518661ff 100644
--- a/gst-libs/gst/gl/gstglwindow.h
+++ b/gst-libs/gst/gl/gstglwindow.h
@@ -64,7 +64,7 @@ typedef void (*GstGLWindowResizeCB) (gpointer data, guint width, guint height);
*/
struct _GstGLWindow {
/*< private >*/
- GObject parent;
+ GstObject parent;
GMutex lock;
@@ -109,7 +109,7 @@ struct _GstGLWindow {
* @close: close the connection to the display
*/
struct _GstGLWindowClass {
- GObjectClass parent_class;
+ GstObjectClass parent_class;
guintptr (*get_display) (GstGLWindow *window);
void (*set_window_handle) (GstGLWindow *window, guintptr id);
diff --git a/gst-libs/gst/mpegts/gst-atsc-section.c b/gst-libs/gst/mpegts/gst-atsc-section.c
index 8452cdf6..a56be15d 100644
--- a/gst-libs/gst/mpegts/gst-atsc-section.c
+++ b/gst-libs/gst/mpegts/gst-atsc-section.c
@@ -49,7 +49,8 @@ _gst_mpegts_atsc_tvct_source_copy (GstMpegTsAtscTVCTSource * source)
static void
_gst_mpegts_atsc_tvct_source_free (GstMpegTsAtscTVCTSource * source)
{
- g_ptr_array_unref (source->descriptors);
+ if (source->descriptors)
+ g_ptr_array_unref (source->descriptors);
g_slice_free (GstMpegTsAtscTVCTSource, source);
}
@@ -73,7 +74,8 @@ static void
_gst_mpegts_atsc_tvct_free (GstMpegTsAtscTVCT * tvct)
{
g_ptr_array_unref (tvct->sources);
- g_ptr_array_unref (tvct->descriptors);
+ if (tvct->descriptors)
+ g_ptr_array_unref (tvct->descriptors);
g_slice_free (GstMpegTsAtscTVCT, tvct);
}
diff --git a/gst-libs/gst/mpegts/gst-dvb-descriptor.c b/gst-libs/gst/mpegts/gst-dvb-descriptor.c
index f0cd62a3..279a9a96 100644
--- a/gst-libs/gst/mpegts/gst-dvb-descriptor.c
+++ b/gst-libs/gst/mpegts/gst-dvb-descriptor.c
@@ -1661,6 +1661,7 @@ gst_mpegts_descriptor_parse_dvb_t2_delivery_system (const GstMpegTsDescriptor
GstMpegTsT2DeliverySystemCellExtension *cell_ext;
cell_ext = g_slice_new0 (GstMpegTsT2DeliverySystemCellExtension);
+ g_ptr_array_add (cell->sub_cells, cell_ext);
cell_ext->cell_id_extension = *data;
data += 1;
diff --git a/gst-libs/gst/mpegts/gst-dvb-section.c b/gst-libs/gst/mpegts/gst-dvb-section.c
index ad2b3fb3..dc667733 100644
--- a/gst-libs/gst/mpegts/gst-dvb-section.c
+++ b/gst-libs/gst/mpegts/gst-dvb-section.c
@@ -82,7 +82,7 @@ _parse_utc_time (guint8 * data)
utc_ptr = data + 2;
- /* First digit of hours cannot exceeed 2 (max: 23 hours) */
+ /* First digit of hours cannot exceed 1 (max: 23 hours) */
hour = ((utc_ptr[0] & 0x30) >> 4) * 10 + (utc_ptr[0] & 0x0F);
/* First digit of minutes cannot exced 5 (max: 59 mins) */
minute = ((utc_ptr[1] & 0x70) >> 4) * 10 + (utc_ptr[1] & 0x0F);
@@ -90,8 +90,14 @@ _parse_utc_time (guint8 * data)
second = ((utc_ptr[2] & 0x70) >> 4) * 10 + (utc_ptr[2] & 0x0F);
/* Time is UTC */
- return gst_date_time_new (0.0, year, month, day, hour, minute,
- (gdouble) second);
+ if (hour < 24 && minute < 60 && second < 60) {
+ return gst_date_time_new (0.0, year, month, day, hour, minute,
+ (gdouble) second);
+ } else if (utc_ptr[0] == 0xFF && utc_ptr[1] == 0xFF && utc_ptr[2] == 0xFF) {
+ return gst_date_time_new (0.0, year, month, day, -1, -1, -1);
+ }
+
+ return NULL;
}
/* Event Information Table */
@@ -112,7 +118,8 @@ _gst_mpegts_eit_event_free (GstMpegTsEITEvent * eit)
{
if (eit->start_time)
gst_date_time_unref (eit->start_time);
- g_ptr_array_unref (eit->descriptors);
+ if (eit->descriptors)
+ g_ptr_array_unref (eit->descriptors);
g_slice_free (GstMpegTsEITEvent, eit);
}
@@ -141,7 +148,6 @@ _gst_mpegts_eit_free (GstMpegTsEIT * eit)
G_DEFINE_BOXED_TYPE (GstMpegTsEIT, gst_mpegts_eit,
(GBoxedCopyFunc) _gst_mpegts_eit_copy, (GFreeFunc) _gst_mpegts_eit_free);
-
static gpointer
_parse_eit (GstMpegTsSection * section)
{
@@ -267,7 +273,8 @@ _gst_mpegts_bat_stream_copy (GstMpegTsBATStream * bat)
static void
_gst_mpegts_bat_stream_free (GstMpegTsBATStream * bat)
{
- g_ptr_array_unref (bat->descriptors);
+ if (bat->descriptors)
+ g_ptr_array_unref (bat->descriptors);
g_slice_free (GstMpegTsBATStream, bat);
}
@@ -290,8 +297,10 @@ _gst_mpegts_bat_copy (GstMpegTsBAT * bat)
static void
_gst_mpegts_bat_free (GstMpegTsBAT * bat)
{
- g_ptr_array_unref (bat->descriptors);
- g_ptr_array_unref (bat->streams);
+ if (bat->descriptors)
+ g_ptr_array_unref (bat->descriptors);
+ if (bat->streams)
+ g_ptr_array_unref (bat->streams);
g_slice_free (GstMpegTsBAT, bat);
}
@@ -443,7 +452,8 @@ _gst_mpegts_nit_stream_copy (GstMpegTsNITStream * nit)
static void
_gst_mpegts_nit_stream_free (GstMpegTsNITStream * nit)
{
- g_ptr_array_unref (nit->descriptors);
+ if (nit->descriptors)
+ g_ptr_array_unref (nit->descriptors);
g_slice_free (GstMpegTsNITStream, nit);
}
@@ -465,7 +475,8 @@ _gst_mpegts_nit_copy (GstMpegTsNIT * nit)
static void
_gst_mpegts_nit_free (GstMpegTsNIT * nit)
{
- g_ptr_array_unref (nit->descriptors);
+ if (nit->descriptors)
+ g_ptr_array_unref (nit->descriptors);
g_ptr_array_unref (nit->streams);
g_slice_free (GstMpegTsNIT, nit);
}
@@ -786,7 +797,8 @@ _gst_mpegts_sdt_service_copy (GstMpegTsSDTService * sdt)
static void
_gst_mpegts_sdt_service_free (GstMpegTsSDTService * sdt)
{
- g_ptr_array_unref (sdt->descriptors);
+ if (sdt->descriptors)
+ g_ptr_array_unref (sdt->descriptors);
g_slice_free (GstMpegTsSDTService, sdt);
}
@@ -1142,7 +1154,8 @@ _gst_mpegts_tot_free (GstMpegTsTOT * tot)
{
if (tot->utc_time)
gst_date_time_unref (tot->utc_time);
- g_ptr_array_unref (tot->descriptors);
+ if (tot->descriptors)
+ g_ptr_array_unref (tot->descriptors);
g_slice_free (GstMpegTsTOT, tot);
}
diff --git a/gst-libs/gst/mpegts/gstmpegtsdescriptor.c b/gst-libs/gst/mpegts/gstmpegtsdescriptor.c
index eceaf9fc..395b9aee 100644
--- a/gst-libs/gst/mpegts/gstmpegtsdescriptor.c
+++ b/gst-libs/gst/mpegts/gstmpegtsdescriptor.c
@@ -279,7 +279,7 @@ _encode_control_codes (gchar * text, gsize length, gboolean is_multibyte)
/**
* dvb_text_from_utf8:
* @text: The text to convert. This should be in UTF-8 format
- * @out_size: (out) the byte length of the new text
+ * @out_size: (out): the byte length of the new text
*
* Converts UTF-8 strings to text characters compliant with EN 300 468.
* The converted text can be used directly in DVB #GstMpegTsDescriptor
@@ -292,7 +292,7 @@ _encode_control_codes (gchar * text, gsize length, gboolean is_multibyte)
* If no character map that contains all characters could be found, the
* string is converted to ISO 6937 with unknown characters set to `?`.
*
- * Returns: (transfer full) byte array of size @out_size
+ * Returns: (transfer full): byte array of size @out_size
*/
guint8 *
dvb_text_from_utf8 (const gchar * text, gsize * out_size)
diff --git a/gst-libs/gst/mpegts/gstmpegtssection.c b/gst-libs/gst/mpegts/gstmpegtssection.c
index 37691188..97a7e4af 100644
--- a/gst-libs/gst/mpegts/gstmpegtssection.c
+++ b/gst-libs/gst/mpegts/gstmpegtssection.c
@@ -606,7 +606,8 @@ _gst_mpegts_pmt_stream_copy (GstMpegTsPMTStream * pmt)
static void
_gst_mpegts_pmt_stream_free (GstMpegTsPMTStream * pmt)
{
- g_ptr_array_unref (pmt->descriptors);
+ if (pmt->descriptors)
+ g_ptr_array_unref (pmt->descriptors);
g_slice_free (GstMpegTsPMTStream, pmt);
}
@@ -620,7 +621,8 @@ _gst_mpegts_pmt_copy (GstMpegTsPMT * pmt)
GstMpegTsPMT *copy;
copy = g_slice_dup (GstMpegTsPMT, pmt);
- copy->descriptors = g_ptr_array_ref (pmt->descriptors);
+ if (pmt->descriptors)
+ copy->descriptors = g_ptr_array_ref (pmt->descriptors);
copy->streams = g_ptr_array_ref (pmt->streams);
return copy;
@@ -629,7 +631,8 @@ _gst_mpegts_pmt_copy (GstMpegTsPMT * pmt)
static void
_gst_mpegts_pmt_free (GstMpegTsPMT * pmt)
{
- g_ptr_array_unref (pmt->descriptors);
+ if (pmt->descriptors)
+ g_ptr_array_unref (pmt->descriptors);
g_ptr_array_unref (pmt->streams);
g_slice_free (GstMpegTsPMT, pmt);
}
diff --git a/gst-libs/gst/uridownloader/gsturidownloader.c b/gst-libs/gst/uridownloader/gsturidownloader.c
index f0deee6c..99d88e88 100644
--- a/gst-libs/gst/uridownloader/gsturidownloader.c
+++ b/gst-libs/gst/uridownloader/gsturidownloader.c
@@ -323,7 +323,8 @@ gst_uri_downloader_set_range (GstUriDownloader * downloader,
static gboolean
gst_uri_downloader_set_uri (GstUriDownloader * downloader, const gchar * uri,
- const gchar * referer, gboolean compress, gboolean refresh)
+ const gchar * referer, gboolean compress, gboolean refresh,
+ gboolean allow_cache)
{
GstPad *pad;
GObjectClass *gobject_class;
@@ -379,13 +380,17 @@ gst_uri_downloader_set_uri (GstUriDownloader * downloader, const gchar * uri,
if (g_object_class_find_property (gobject_class, "keep-alive"))
g_object_set (downloader->priv->urisrc, "keep-alive", TRUE, NULL);
if (g_object_class_find_property (gobject_class, "extra-headers")) {
- if (referer || refresh) {
+ if (referer || refresh || !allow_cache) {
GstStructure *extra_headers = gst_structure_new_empty ("headers");
if (referer)
gst_structure_set (extra_headers, "Referer", G_TYPE_STRING, referer,
NULL);
- if (refresh)
+
+ if (!allow_cache)
+ gst_structure_set (extra_headers, "Cache-Control", G_TYPE_STRING,
+ "no-cache", NULL);
+ else if (refresh)
gst_structure_set (extra_headers, "Cache-Control", G_TYPE_STRING,
"max-age=0", NULL);
@@ -415,10 +420,10 @@ gst_uri_downloader_set_uri (GstUriDownloader * downloader, const gchar * uri,
GstFragment *
gst_uri_downloader_fetch_uri (GstUriDownloader * downloader,
const gchar * uri, const gchar * referer, gboolean compress,
- gboolean refresh, GError ** err)
+ gboolean refresh, gboolean allow_cache, GError ** err)
{
return gst_uri_downloader_fetch_uri_with_range (downloader, uri,
- referer, compress, refresh, 0, -1, err);
+ referer, compress, refresh, allow_cache, 0, -1, err);
}
/**
@@ -433,7 +438,8 @@ gst_uri_downloader_fetch_uri (GstUriDownloader * downloader,
GstFragment *
gst_uri_downloader_fetch_uri_with_range (GstUriDownloader *
downloader, const gchar * uri, const gchar * referer, gboolean compress,
- gboolean refresh, gint64 range_start, gint64 range_end, GError ** err)
+ gboolean refresh, gboolean allow_cache,
+ gint64 range_start, gint64 range_end, GError ** err)
{
GstStateChangeReturn ret;
GstFragment *download = NULL;
@@ -450,7 +456,8 @@ gst_uri_downloader_fetch_uri_with_range (GstUriDownloader *
goto quit;
}
- if (!gst_uri_downloader_set_uri (downloader, uri, referer, compress, refresh)) {
+ if (!gst_uri_downloader_set_uri (downloader, uri, referer, compress, refresh,
+ allow_cache)) {
GST_WARNING_OBJECT (downloader, "Failed to set URI");
goto quit;
}
diff --git a/gst-libs/gst/uridownloader/gsturidownloader.h b/gst-libs/gst/uridownloader/gsturidownloader.h
index a087fd1b..c40a4603 100644
--- a/gst-libs/gst/uridownloader/gsturidownloader.h
+++ b/gst-libs/gst/uridownloader/gsturidownloader.h
@@ -56,8 +56,8 @@ struct _GstUriDownloaderClass
GType gst_uri_downloader_get_type (void);
GstUriDownloader * gst_uri_downloader_new (void);
-GstFragment * gst_uri_downloader_fetch_uri (GstUriDownloader * downloader, const gchar * uri, const gchar * referer, gboolean compress, gboolean refresh, GError ** err);
-GstFragment * gst_uri_downloader_fetch_uri_with_range (GstUriDownloader * downloader, const gchar * uri, const gchar * referer, gboolean compress, gboolean refresh, gint64 range_start, gint64 range_end, GError ** err);
+GstFragment * gst_uri_downloader_fetch_uri (GstUriDownloader * downloader, const gchar * uri, const gchar * referer, gboolean compress, gboolean refresh, gboolean allow_cache, GError ** err);
+GstFragment * gst_uri_downloader_fetch_uri_with_range (GstUriDownloader * downloader, const gchar * uri, const gchar * referer, gboolean compress, gboolean refresh, gboolean allow_cache, gint64 range_start, gint64 range_end, GError ** err);
void gst_uri_downloader_reset (GstUriDownloader *downloader);
void gst_uri_downloader_cancel (GstUriDownloader *downloader);
void gst_uri_downloader_free (GstUriDownloader *downloader);
diff --git a/gst-plugins-bad.doap b/gst-plugins-bad.doap
index 86b4dac5..3a5b5a38 100644
--- a/gst-plugins-bad.doap
+++ b/gst-plugins-bad.doap
@@ -35,6 +35,16 @@ real live maintainer, or some actual wide use.
<release>
<Version>
+ <revision>1.3.2</revision>
+ <branch>1.3</branch>
+ <name></name>
+ <created>2014-05-21</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-1.3.2.tar.xz" />
+ </Version>
+ </release>
+
+<release>
+ <Version>
<revision>1.3.1</revision>
<branch>1.3</branch>
<name></name>
diff --git a/gst-plugins-bad.spec b/gst-plugins-bad.spec
index 155ee5be..51d3e412 100644
--- a/gst-plugins-bad.spec
+++ b/gst-plugins-bad.spec
@@ -6,7 +6,7 @@
Summary: GStreamer streaming media framework "bad" plug-ins
Name: %{gstreamer}-plugins-bad
-Version: 1.3.1
+Version: 1.3.2
Release: 1.gst
# The freeze and nfs plugins are LGPLv2 (only)
License: LGPLv2+ and LGPLv2
diff --git a/gst/asfmux/gstasfobjects.c b/gst/asfmux/gstasfobjects.c
index 798ec642..0719f5cd 100644
--- a/gst/asfmux/gstasfobjects.c
+++ b/gst/asfmux/gstasfobjects.c
@@ -597,7 +597,7 @@ gst_asf_parse_packet_from_data (guint8 * data, gsize size, GstBuffer * buffer,
if (first & 0x60) {
GST_ERROR ("Error correction data length should be "
"set to 0 and is reserved for future use.");
- return FALSE;
+ goto error;
}
err_cor_len = (first & 0x0F);
err_length += err_cor_len;
diff --git a/gst/autoconvert/gstautoconvert.c b/gst/autoconvert/gstautoconvert.c
index 6ff2f341..230a15c0 100644
--- a/gst/autoconvert/gstautoconvert.c
+++ b/gst/autoconvert/gstautoconvert.c
@@ -91,7 +91,7 @@ static void gst_auto_convert_get_property (GObject * object,
static void gst_auto_convert_dispose (GObject * object);
static GstElement *gst_auto_convert_get_subelement (GstAutoConvert *
- autoconvert, gboolean query_only);
+ autoconvert);
static GstPad *gst_auto_convert_get_internal_sinkpad (GstAutoConvert *
autoconvert);
static GstPad *gst_auto_convert_get_internal_srcpad (GstAutoConvert *
@@ -211,19 +211,19 @@ gst_auto_convert_dispose (GObject * object)
{
GstAutoConvert *autoconvert = GST_AUTO_CONVERT (object);
- GST_AUTOCONVERT_LOCK (autoconvert);
- if (autoconvert->current_subelement) {
- gst_object_unref (autoconvert->current_subelement);
- autoconvert->current_subelement = NULL;
- autoconvert->current_internal_sinkpad = NULL;
- autoconvert->current_internal_srcpad = NULL;
- }
+ g_clear_object (&autoconvert->current_subelement);
+ g_clear_object (&autoconvert->current_internal_sinkpad);
+ g_clear_object (&autoconvert->current_internal_srcpad);
+
+ for (;;) {
+ GList *factories = g_atomic_pointer_get (&autoconvert->factories);
- if (autoconvert->factories) {
- gst_plugin_feature_list_free (autoconvert->factories);
- autoconvert->factories = NULL;
+ if (g_atomic_pointer_compare_and_exchange (&autoconvert->factories,
+ factories, NULL)) {
+ gst_plugin_feature_list_free (factories);
+ break;
+ }
}
- GST_AUTOCONVERT_UNLOCK (autoconvert);
G_OBJECT_CLASS (gst_auto_convert_parent_class)->dispose (object);
}
@@ -239,15 +239,18 @@ gst_auto_convert_set_property (GObject * object,
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
case PROP_FACTORIES:
- GST_AUTOCONVERT_LOCK (autoconvert);
- if (autoconvert->factories == NULL) {
+ if (g_atomic_pointer_get (&autoconvert->factories) == NULL) {
GList *factories = g_value_get_pointer (value);
- autoconvert->factories = g_list_copy (factories);
- g_list_foreach (autoconvert->factories, (GFunc) g_object_ref, NULL);
- } else
+ factories = g_list_copy (factories);
+ if (g_atomic_pointer_compare_and_exchange (&autoconvert->factories,
+ NULL, factories))
+ g_list_foreach (factories, (GFunc) g_object_ref, NULL);
+ else
+ g_list_free (factories);
+ } else {
GST_WARNING_OBJECT (object, "Can not reset factories after they"
" have been set or auto-discovered");
- GST_AUTOCONVERT_UNLOCK (autoconvert);
+ }
break;
}
}
@@ -263,9 +266,8 @@ gst_auto_convert_get_property (GObject * object,
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
case PROP_FACTORIES:
- GST_AUTOCONVERT_LOCK (autoconvert);
- g_value_set_pointer (value, &autoconvert->factories);
- GST_AUTOCONVERT_UNLOCK (autoconvert);
+ g_value_set_pointer (value,
+ g_atomic_pointer_get (&autoconvert->factories));
break;
}
}
@@ -274,48 +276,24 @@ gst_auto_convert_get_property (GObject * object,
static GstElement *
gst_auto_convert_get_element_by_type (GstAutoConvert * autoconvert, GType type)
{
- GstIterator *iter = NULL;
- gboolean done;
- GValue item = { 0, };
+ GList *item;
+ GstBin *bin = GST_BIN (autoconvert);
+ GstElement *element = NULL;
g_return_val_if_fail (type != 0, NULL);
- iter = gst_bin_iterate_elements (GST_BIN (autoconvert));
+ GST_OBJECT_LOCK (autoconvert);
- if (!iter)
- return NULL;
-
- done = FALSE;
- while (!done) {
- switch (gst_iterator_next (iter, &item)) {
- case GST_ITERATOR_OK:
- if (G_TYPE_CHECK_VALUE_TYPE (&item, type))
- done = TRUE;
- else
- g_value_unset (&item);
- break;
- case GST_ITERATOR_RESYNC:
- gst_iterator_resync (iter);
- g_value_unset (&item);
- break;
- case GST_ITERATOR_ERROR:
- GST_ERROR ("Error iterating elements in bin");
- g_value_unset (&item);
- done = TRUE;
- break;
- case GST_ITERATOR_DONE:
- g_value_unset (&item);
- done = TRUE;
- break;
+ for (item = bin->children; item; item = item->next) {
+ if (G_TYPE_CHECK_INSTANCE_TYPE (item->data, type)) {
+ element = gst_object_ref (item->data);
+ break;
}
}
- gst_iterator_free (iter);
- /* Don't need to dup, the value on the stack has a ref, we steal it */
- if (G_VALUE_HOLDS_OBJECT (&item))
- return g_value_get_object (&item);
- else
- return NULL;
+ GST_OBJECT_UNLOCK (autoconvert);
+
+ return element;
}
/**
@@ -390,8 +368,7 @@ get_pad_by_direction (GstElement * element, GstPadDirection direction)
}
static GstElement *
-gst_auto_convert_get_subelement (GstAutoConvert * autoconvert,
- gboolean query_only)
+gst_auto_convert_get_subelement (GstAutoConvert * autoconvert)
{
GstElement *element = NULL;
@@ -512,7 +489,8 @@ gst_auto_convert_add_element (GstAutoConvert * autoconvert,
gst_pad_set_query_function (internal_srcpad,
GST_DEBUG_FUNCPTR (gst_auto_convert_internal_src_query));
- padlinkret = gst_pad_link (internal_srcpad, sinkpad);
+ padlinkret = gst_pad_link_full (internal_srcpad, sinkpad,
+ GST_PAD_LINK_CHECK_NOTHING);
if (GST_PAD_LINK_FAILED (padlinkret)) {
GST_WARNING_OBJECT (autoconvert, "Could not links pad %s:%s to %s:%s"
" for reason %d",
@@ -521,7 +499,8 @@ gst_auto_convert_add_element (GstAutoConvert * autoconvert,
goto error;
}
- padlinkret = gst_pad_link (srcpad, internal_sinkpad);
+ padlinkret = gst_pad_link_full (srcpad, internal_sinkpad,
+ GST_PAD_LINK_CHECK_NOTHING);
if (GST_PAD_LINK_FAILED (padlinkret)) {
GST_WARNING_OBJECT (autoconvert, "Could not links pad %s:%s to %s:%s"
" for reason %d",
@@ -667,9 +646,12 @@ gst_auto_convert_activate_element (GstAutoConvert * autoconvert,
}
GST_AUTOCONVERT_LOCK (autoconvert);
- autoconvert->current_subelement = element;
- autoconvert->current_internal_srcpad = internal_srcpad;
- autoconvert->current_internal_sinkpad = internal_sinkpad;
+ gst_object_replace ((GstObject **) & autoconvert->current_subelement,
+ GST_OBJECT (element));
+ gst_object_replace ((GstObject **) & autoconvert->current_internal_srcpad,
+ GST_OBJECT (internal_srcpad));
+ gst_object_replace ((GstObject **) & autoconvert->current_internal_sinkpad,
+ GST_OBJECT (internal_sinkpad));
GST_AUTOCONVERT_UNLOCK (autoconvert);
gst_pad_sticky_events_foreach (autoconvert->sinkpad, sticky_event_push,
@@ -677,9 +659,10 @@ gst_auto_convert_activate_element (GstAutoConvert * autoconvert,
gst_pad_push_event (autoconvert->sinkpad, gst_event_new_reconfigure ());
- GST_INFO_OBJECT (autoconvert,
- "Selected element %s",
- GST_OBJECT_NAME (GST_OBJECT (autoconvert->current_subelement)));
+ GST_INFO_OBJECT (autoconvert, "Selected element %s",
+ GST_OBJECT_NAME (GST_OBJECT (element)));
+
+ gst_object_unref (element);
return TRUE;
}
@@ -721,7 +704,6 @@ static gboolean
gst_auto_convert_sink_setcaps (GstAutoConvert * autoconvert, GstCaps * caps)
{
GList *elem;
- GstElement *subelement;
GstCaps *other_caps = NULL;
GList *factories;
GstCaps *current_caps;
@@ -737,9 +719,7 @@ gst_auto_convert_sink_setcaps (GstAutoConvert * autoconvert, GstCaps * caps)
gst_caps_unref (current_caps);
}
- subelement = gst_auto_convert_get_subelement (autoconvert, TRUE);
-
- if (subelement) {
+ if (autoconvert->current_subelement) {
if (gst_pad_peer_query_accept_caps (autoconvert->current_internal_srcpad,
caps)) {
/* If we can set the new caps on the current element,
@@ -747,29 +727,22 @@ gst_auto_convert_sink_setcaps (GstAutoConvert * autoconvert, GstCaps * caps)
*/
GST_DEBUG_OBJECT (autoconvert, "Could set %s:%s to %" GST_PTR_FORMAT,
GST_DEBUG_PAD_NAME (autoconvert->current_internal_srcpad), caps);
- gst_object_unref (subelement);
goto get_out;
} else {
/* If the current element doesn't work,
* then we remove the current element before finding a new one.
*/
GST_AUTOCONVERT_LOCK (autoconvert);
- if (autoconvert->current_subelement == subelement) {
- gst_object_unref (autoconvert->current_subelement);
- autoconvert->current_subelement = NULL;
- autoconvert->current_internal_srcpad = NULL;
- autoconvert->current_internal_sinkpad = NULL;
- }
+ g_clear_object (&autoconvert->current_subelement);
+ g_clear_object (&autoconvert->current_internal_sinkpad);
+ g_clear_object (&autoconvert->current_internal_srcpad);
GST_AUTOCONVERT_UNLOCK (autoconvert);
- gst_object_unref (subelement);
}
}
other_caps = gst_pad_peer_query_caps (autoconvert->srcpad, NULL);
- GST_AUTOCONVERT_LOCK (autoconvert);
- factories = autoconvert->factories;
- GST_AUTOCONVERT_UNLOCK (autoconvert);
+ factories = g_atomic_pointer_get (&autoconvert->factories);
if (!factories)
factories = gst_auto_convert_load_factories (autoconvert);
@@ -906,7 +879,6 @@ static GList *
gst_auto_convert_load_factories (GstAutoConvert * autoconvert)
{
GList *all_factories;
- GList *out_factories;
all_factories =
gst_registry_feature_filter (gst_registry_get (),
@@ -916,20 +888,12 @@ gst_auto_convert_load_factories (GstAutoConvert * autoconvert)
g_assert (all_factories);
- GST_AUTOCONVERT_LOCK (autoconvert);
- if (autoconvert->factories == NULL) {
- autoconvert->factories = all_factories;
- all_factories = NULL;
- }
- out_factories = autoconvert->factories;
- GST_AUTOCONVERT_UNLOCK (autoconvert);
-
- if (all_factories) {
- /* In this case, someone set the property while we were looking! */
+ if (g_atomic_pointer_compare_and_exchange (&autoconvert->factories, NULL,
+ all_factories)) {
gst_plugin_feature_list_free (all_factories);
}
- return out_factories;
+ return g_atomic_pointer_get (&autoconvert->factories);
}
/* In this case, we should almost always have an internal element, because
@@ -942,20 +906,13 @@ gst_auto_convert_sink_chain (GstPad * pad, GstObject * parent,
{
GstFlowReturn ret = GST_FLOW_NOT_NEGOTIATED;
GstAutoConvert *autoconvert = GST_AUTO_CONVERT (parent);
- GstPad *internal_srcpad;
- internal_srcpad = gst_auto_convert_get_internal_srcpad (autoconvert);
- if (internal_srcpad) {
- ret = gst_pad_push (internal_srcpad, buffer);
- gst_object_unref (internal_srcpad);
- if (ret != GST_FLOW_OK) {
- GstElement *child = gst_auto_convert_get_subelement (autoconvert, TRUE);
+ if (autoconvert->current_internal_srcpad) {
+ ret = gst_pad_push (autoconvert->current_internal_srcpad, buffer);
+ if (ret != GST_FLOW_OK)
GST_DEBUG_OBJECT (autoconvert,
- "Child element %" GST_PTR_FORMAT "returned flow %s", child,
- gst_flow_get_name (ret));
- if (child)
- gst_object_unref (child);
- }
+ "Child element %" GST_PTR_FORMAT "returned flow %s",
+ autoconvert->current_subelement, gst_flow_get_name (ret));
} else {
GST_ERROR_OBJECT (autoconvert, "Got buffer without an negotiated element,"
" returning not-negotiated");
@@ -1021,7 +978,7 @@ gst_auto_convert_sink_query (GstPad * pad, GstObject * parent, GstQuery * query)
return TRUE;
}
- subelement = gst_auto_convert_get_subelement (autoconvert, TRUE);
+ subelement = gst_auto_convert_get_subelement (autoconvert);
if (subelement) {
GstPad *sub_sinkpad = get_pad_by_direction (subelement, GST_PAD_SINK);
@@ -1096,9 +1053,7 @@ gst_auto_convert_getcaps (GstAutoConvert * autoconvert, GstCaps * filter,
goto out;
}
- GST_AUTOCONVERT_LOCK (autoconvert);
- factories = autoconvert->factories;
- GST_AUTOCONVERT_UNLOCK (autoconvert);
+ factories = g_atomic_pointer_get (&autoconvert->factories);
if (!factories)
factories = gst_auto_convert_load_factories (autoconvert);
@@ -1143,16 +1098,14 @@ gst_auto_convert_getcaps (GstAutoConvert * autoconvert, GstCaps * filter,
element_caps = gst_pad_peer_query_caps (internal_pad, filter);
- if (element_caps) {
- if (!gst_caps_is_any (element_caps) &&
- !gst_caps_is_empty (element_caps)) {
- caps = gst_caps_merge (caps, element_caps);
- } else {
- gst_caps_unref (element_caps);
- }
- }
+ if (element_caps)
+ caps = gst_caps_merge (caps, element_caps);
gst_object_unref (element);
+
+ /* Early out, any is absorbing */
+ if (gst_caps_is_any (caps))
+ goto out;
} else {
const GList *tmp;
@@ -1163,10 +1116,13 @@ gst_auto_convert_getcaps (GstAutoConvert * autoconvert, GstCaps * filter,
if (GST_PAD_TEMPLATE_DIRECTION (template) == dir) {
GstCaps *static_caps = gst_static_pad_template_get_caps (template);
- if (static_caps && !gst_caps_is_any (static_caps) &&
- !gst_caps_is_empty (static_caps)) {
+ if (static_caps) {
caps = gst_caps_merge (caps, static_caps);
}
+
+ /* Early out, any is absorbing */
+ if (gst_caps_is_any (caps))
+ goto out;
}
}
}
@@ -1192,11 +1148,14 @@ gst_auto_convert_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
GstAutoConvert *autoconvert = GST_AUTO_CONVERT (parent);
GstPad *internal_sinkpad;
+ if (GST_EVENT_TYPE (event) == GST_EVENT_RECONFIGURE)
+ gst_pad_push_event (autoconvert->sinkpad, gst_event_ref (event));
+
internal_sinkpad = gst_auto_convert_get_internal_sinkpad (autoconvert);
if (internal_sinkpad) {
ret = gst_pad_push_event (internal_sinkpad, event);
gst_object_unref (internal_sinkpad);
- } else {
+ } else if (GST_EVENT_TYPE (event) != GST_EVENT_RECONFIGURE) {
GST_WARNING_OBJECT (autoconvert,
"Got upstream event while no element was selected," "forwarding.");
ret = gst_pad_push_event (autoconvert->sinkpad, event);
@@ -1214,16 +1173,17 @@ gst_auto_convert_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
GstElement *subelement;
if (GST_QUERY_TYPE (query) == GST_QUERY_CAPS) {
- GstCaps *caps;
+ GstCaps *filter, *caps;
- caps = gst_caps_new_any ();
+ gst_query_parse_caps (query, &filter);
+ caps = gst_auto_convert_getcaps (autoconvert, filter, GST_PAD_SRC);
gst_query_set_caps_result (query, caps);
gst_caps_unref (caps);
return TRUE;
}
- subelement = gst_auto_convert_get_subelement (autoconvert, TRUE);
+ subelement = gst_auto_convert_get_subelement (autoconvert);
if (subelement) {
GstPad *sub_srcpad = get_pad_by_direction (subelement, GST_PAD_SRC);
@@ -1318,15 +1278,5 @@ gst_auto_convert_internal_src_query (GstPad * pad, GstObject * parent,
GST_AUTO_CONVERT (g_object_get_qdata (G_OBJECT (pad),
parent_quark));
- if (GST_QUERY_TYPE (query) == GST_QUERY_CAPS) {
- GstCaps *caps;
-
- caps = gst_caps_new_any ();
- gst_query_set_caps_result (query, caps);
- gst_caps_unref (caps);
-
- return TRUE;
- }
-
return gst_pad_peer_query (autoconvert->sinkpad, query);
}
diff --git a/gst/autoconvert/gstautoconvert.h b/gst/autoconvert/gstautoconvert.h
index 49e6b2a8..ae40e63e 100644
--- a/gst/autoconvert/gstautoconvert.h
+++ b/gst/autoconvert/gstautoconvert.h
@@ -41,14 +41,15 @@ struct _GstAutoConvert
/*< private >*/
GstBin bin; /* we extend GstBin */
- /* Protected by the object lock too */
- GList *factories;
+ volatile GList *factories;
GstPad *sinkpad;
GstPad *srcpad;
/* Have to be set all at once
- * Protected by the object lock */
+ * Protected by the object lock and the stream lock
+ * Both must be held to modify these
+ */
GstElement *current_subelement;
GstPad *current_internal_srcpad;
GstPad *current_internal_sinkpad;
diff --git a/gst/bayer/gstbayerorc-dist.c b/gst/bayer/gstbayerorc-dist.c
index 661fd571..1dc708de 100644
--- a/gst/bayer/gstbayerorc-dist.c
+++ b/gst/bayer/gstbayerorc-dist.c
@@ -407,19 +407,17 @@ bayer_orc_horiz_upsample (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
orc_union16 *ORC_RESTRICT ptr0;
orc_union16 *ORC_RESTRICT ptr1;
const orc_union16 *ORC_RESTRICT ptr4;
+ orc_union16 var37;
+ orc_union16 var38;
orc_union16 var39;
orc_union16 var40;
- orc_union16 var41;
- orc_union16 var42;
+ orc_int8 var41;
+ orc_int8 var42;
orc_int8 var43;
- orc_int8 var44;
+ orc_union16 var44;
orc_int8 var45;
orc_int8 var46;
- orc_union16 var47;
- orc_int8 var48;
- orc_int8 var49;
- orc_int8 var50;
- orc_int8 var51;
+ orc_int8 var47;
ptr0 = (orc_union16 *) d1;
ptr1 = (orc_union16 *) d2;
@@ -428,54 +426,52 @@ bayer_orc_horiz_upsample (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
for (i = 0; i < n; i++) {
/* 0: loadoffw */
- var42 = ptr4[i + -1];
- /* 1: splitwb */
+ var40 = ptr4[i + -1];
+ /* 1: select1wb */
{
orc_union16 _src;
- _src.i = var42.i;
- var43 = _src.x2[1];
- var44 = _src.x2[0];
+ _src.i = var40.i;
+ var41 = _src.x2[1];
}
/* 2: loadw */
- var39 = ptr4[i];
+ var37 = ptr4[i];
/* 3: splitwb */
{
orc_union16 _src;
- _src.i = var39.i;
- var45 = _src.x2[1];
- var46 = _src.x2[0];
+ _src.i = var37.i;
+ var42 = _src.x2[1];
+ var43 = _src.x2[0];
}
/* 4: loadoffw */
- var47 = ptr4[i + 1];
- /* 5: splitwb */
+ var44 = ptr4[i + 1];
+ /* 5: select0wb */
{
orc_union16 _src;
- _src.i = var47.i;
- var48 = _src.x2[1];
- var49 = _src.x2[0];
+ _src.i = var44.i;
+ var45 = _src.x2[0];
}
/* 6: avgub */
- var50 = ((orc_uint8) var46 + (orc_uint8) var49 + 1) >> 1;
+ var46 = ((orc_uint8) var43 + (orc_uint8) var45 + 1) >> 1;
/* 7: mergebw */
{
orc_union16 _dest;
- _dest.x2[0] = var46;
- _dest.x2[1] = var50;
- var40.i = _dest.i;
+ _dest.x2[0] = var43;
+ _dest.x2[1] = var46;
+ var38.i = _dest.i;
}
/* 8: storew */
- ptr0[i] = var40;
+ ptr0[i] = var38;
/* 9: avgub */
- var51 = ((orc_uint8) var43 + (orc_uint8) var45 + 1) >> 1;
+ var47 = ((orc_uint8) var41 + (orc_uint8) var42 + 1) >> 1;
/* 10: mergebw */
{
orc_union16 _dest;
- _dest.x2[0] = var51;
- _dest.x2[1] = var45;
- var41.i = _dest.i;
+ _dest.x2[0] = var47;
+ _dest.x2[1] = var42;
+ var39.i = _dest.i;
}
/* 11: storew */
- ptr1[i] = var41;
+ ptr1[i] = var39;
}
}
@@ -489,19 +485,17 @@ _backup_bayer_orc_horiz_upsample (OrcExecutor * ORC_RESTRICT ex)
orc_union16 *ORC_RESTRICT ptr0;
orc_union16 *ORC_RESTRICT ptr1;
const orc_union16 *ORC_RESTRICT ptr4;
+ orc_union16 var37;
+ orc_union16 var38;
orc_union16 var39;
orc_union16 var40;
- orc_union16 var41;
- orc_union16 var42;
+ orc_int8 var41;
+ orc_int8 var42;
orc_int8 var43;
- orc_int8 var44;
+ orc_union16 var44;
orc_int8 var45;
orc_int8 var46;
- orc_union16 var47;
- orc_int8 var48;
- orc_int8 var49;
- orc_int8 var50;
- orc_int8 var51;
+ orc_int8 var47;
ptr0 = (orc_union16 *) ex->arrays[0];
ptr1 = (orc_union16 *) ex->arrays[1];
@@ -510,54 +504,52 @@ _backup_bayer_orc_horiz_upsample (OrcExecutor * ORC_RESTRICT ex)
for (i = 0; i < n; i++) {
/* 0: loadoffw */
- var42 = ptr4[i + -1];
- /* 1: splitwb */
+ var40 = ptr4[i + -1];
+ /* 1: select1wb */
{
orc_union16 _src;
- _src.i = var42.i;
- var43 = _src.x2[1];
- var44 = _src.x2[0];
+ _src.i = var40.i;
+ var41 = _src.x2[1];
}
/* 2: loadw */
- var39 = ptr4[i];
+ var37 = ptr4[i];
/* 3: splitwb */
{
orc_union16 _src;
- _src.i = var39.i;
- var45 = _src.x2[1];
- var46 = _src.x2[0];
+ _src.i = var37.i;
+ var42 = _src.x2[1];
+ var43 = _src.x2[0];
}
/* 4: loadoffw */
- var47 = ptr4[i + 1];
- /* 5: splitwb */
+ var44 = ptr4[i + 1];
+ /* 5: select0wb */
{
orc_union16 _src;
- _src.i = var47.i;
- var48 = _src.x2[1];
- var49 = _src.x2[0];
+ _src.i = var44.i;
+ var45 = _src.x2[0];
}
/* 6: avgub */
- var50 = ((orc_uint8) var46 + (orc_uint8) var49 + 1) >> 1;
+ var46 = ((orc_uint8) var43 + (orc_uint8) var45 + 1) >> 1;
/* 7: mergebw */
{
orc_union16 _dest;
- _dest.x2[0] = var46;
- _dest.x2[1] = var50;
- var40.i = _dest.i;
+ _dest.x2[0] = var43;
+ _dest.x2[1] = var46;
+ var38.i = _dest.i;
}
/* 8: storew */
- ptr0[i] = var40;
+ ptr0[i] = var38;
/* 9: avgub */
- var51 = ((orc_uint8) var43 + (orc_uint8) var45 + 1) >> 1;
+ var47 = ((orc_uint8) var41 + (orc_uint8) var42 + 1) >> 1;
/* 10: mergebw */
{
orc_union16 _dest;
- _dest.x2[0] = var51;
- _dest.x2[1] = var45;
- var41.i = _dest.i;
+ _dest.x2[0] = var47;
+ _dest.x2[1] = var42;
+ var39.i = _dest.i;
}
/* 11: storew */
- ptr1[i] = var41;
+ ptr1[i] = var39;
}
}
@@ -581,10 +573,9 @@ bayer_orc_horiz_upsample (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
1, 9, 24, 98, 97, 121, 101, 114, 95, 111, 114, 99, 95, 104, 111, 114,
105, 122, 95, 117, 112, 115, 97, 109, 112, 108, 101, 11, 2, 2, 11, 2,
2, 12, 2, 2, 14, 4, 255, 255, 255, 255, 14, 4, 1, 0, 0, 0,
- 20, 2, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 83, 32,
- 4, 16, 199, 34, 33, 32, 199, 36, 35, 4, 83, 32, 4, 17, 199, 38,
- 37, 32, 39, 37, 35, 37, 196, 0, 35, 37, 39, 34, 34, 36, 196, 1,
- 34, 36, 2, 0,
+ 20, 2, 20, 1, 20, 1, 20, 1, 20, 1, 83, 32, 4, 16, 189, 33,
+ 32, 199, 35, 34, 4, 83, 32, 4, 17, 188, 36, 32, 39, 36, 34, 36,
+ 196, 0, 34, 36, 39, 33, 33, 35, 196, 1, 33, 35, 2, 0,
};
p = orc_program_new_from_static_bytecode (bc);
orc_program_set_backup_function (p, _backup_bayer_orc_horiz_upsample);
@@ -602,26 +593,24 @@ bayer_orc_horiz_upsample (guint8 * ORC_RESTRICT d1, guint8 * ORC_RESTRICT d2,
orc_program_add_temporary (p, 1, "t3");
orc_program_add_temporary (p, 1, "t4");
orc_program_add_temporary (p, 1, "t5");
- orc_program_add_temporary (p, 1, "t6");
- orc_program_add_temporary (p, 1, "t7");
orc_program_append_2 (p, "loadoffw", 0, ORC_VAR_T1, ORC_VAR_S1,
ORC_VAR_C1, ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T5, ORC_VAR_T4, ORC_VAR_S1,
+ orc_program_append_2 (p, "select1wb", 0, ORC_VAR_T2, ORC_VAR_T1,
+ ORC_VAR_D1, ORC_VAR_D1);
+ orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_S1,
ORC_VAR_D1);
orc_program_append_2 (p, "loadoffw", 0, ORC_VAR_T1, ORC_VAR_S1,
ORC_VAR_C2, ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T7, ORC_VAR_T6, ORC_VAR_T1,
- ORC_VAR_D1);
- orc_program_append_2 (p, "avgub", 0, ORC_VAR_T6, ORC_VAR_T4, ORC_VAR_T6,
+ orc_program_append_2 (p, "select0wb", 0, ORC_VAR_T5, ORC_VAR_T1,
+ ORC_VAR_D1, ORC_VAR_D1);
+ orc_program_append_2 (p, "avgub", 0, ORC_VAR_T5, ORC_VAR_T3, ORC_VAR_T5,
ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_D1, ORC_VAR_T4, ORC_VAR_T6,
+ orc_program_append_2 (p, "mergebw", 0, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_T5,
ORC_VAR_D1);
- orc_program_append_2 (p, "avgub", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T5,
+ orc_program_append_2 (p, "avgub", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T4,
ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_D2, ORC_VAR_T3, ORC_VAR_T5,
+ orc_program_append_2 (p, "mergebw", 0, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_T4,
ORC_VAR_D1);
#endif
diff --git a/gst/bayer/gstbayerorc.orc b/gst/bayer/gstbayerorc.orc
index 30e8426e..d86a819e 100644
--- a/gst/bayer/gstbayerorc.orc
+++ b/gst/bayer/gstbayerorc.orc
@@ -24,18 +24,16 @@ mergebw d1, b, d
.dest 2 d1 guint8
.source 2 s guint8
.temp 2 t
-.temp 1 a
.temp 1 b
.temp 1 c
.temp 1 d
.temp 1 e
-.temp 1 f
loadoffw t, s, -1
-splitwb b, a, t
+select1wb b, t
splitwb d, c, s
loadoffw t, s, 1
-splitwb f, e, t
+select0wb e, t
avgub e, c, e
mergebw d0, c, e
avgub b, b, d
diff --git a/gst/dvbsuboverlay/gstdvbsuboverlay.c b/gst/dvbsuboverlay/gstdvbsuboverlay.c
index 25d86b82..eaf1ca19 100644
--- a/gst/dvbsuboverlay/gstdvbsuboverlay.c
+++ b/gst/dvbsuboverlay/gstdvbsuboverlay.c
@@ -458,7 +458,9 @@ gst_dvbsub_overlay_add_feature_and_intersect (GstCaps * caps,
caps_size = gst_caps_get_size (new_caps);
for (i = 0; i < caps_size; i++) {
GstCapsFeatures *features = gst_caps_get_features (new_caps, i);
- gst_caps_features_add (features, feature);
+ if (!gst_caps_features_is_any (features)) {
+ gst_caps_features_add (features, feature);
+ }
}
gst_caps_append (new_caps, gst_caps_intersect_full (caps,
diff --git a/gst/freeverb/gstfreeverb.c b/gst/freeverb/gstfreeverb.c
index 30bcb1cf..819d08cf 100644
--- a/gst/freeverb/gstfreeverb.c
+++ b/gst/freeverb/gstfreeverb.c
@@ -701,7 +701,6 @@ gst_freeverb_transform_m2s_int (GstFreeverb * filter,
gboolean drained = TRUE;
for (k = 0; k < num_samples; k++) {
-
out_l1 = out_r1 = 0.0;
/* The original Freeverb code expects a stereo signal and 'input_1'
@@ -729,10 +728,12 @@ gst_freeverb_transform_m2s_int (GstFreeverb * filter,
/* Calculate output */
out_l2 = out_l1 * priv->wet1 + out_r1 * priv->wet2 + input_2 * priv->dry;
out_r2 = out_r1 * priv->wet1 + out_l1 * priv->wet2 + input_2 * priv->dry;
- *odata++ = (gint16) CLAMP (out_l2, G_MININT16, G_MAXINT16);
- *odata++ = (gint16) CLAMP (out_r2, G_MININT16, G_MAXINT16);
+ out_l2 = CLAMP (out_l2, G_MININT16, G_MAXINT16);
+ out_r2 = CLAMP (out_r2, G_MININT16, G_MAXINT16);
+ *odata++ = (gint16) out_l2;
+ *odata++ = (gint16) out_r2;
- if (abs (out_l2) > 0 || abs (out_r2) > 0)
+ if (abs ((gint16) out_l2) > 0 || abs ((gint16) out_r2) > 0)
drained = FALSE;
}
return drained;
@@ -749,7 +750,6 @@ gst_freeverb_transform_s2s_int (GstFreeverb * filter,
gboolean drained = TRUE;
for (k = 0; k < num_samples; k++) {
-
out_l1 = out_r1 = 0.0;
input_2l = (gfloat) * idata++;
@@ -775,10 +775,12 @@ gst_freeverb_transform_s2s_int (GstFreeverb * filter,
/* Calculate output */
out_l2 = out_l1 * priv->wet1 + out_r1 * priv->wet2 + input_2l * priv->dry;
out_r2 = out_r1 * priv->wet1 + out_l1 * priv->wet2 + input_2r * priv->dry;
- *odata++ = (gint16) CLAMP (out_l2, G_MININT16, G_MAXINT16);
- *odata++ = (gint16) CLAMP (out_r2, G_MININT16, G_MAXINT16);
+ out_l2 = CLAMP (out_l2, G_MININT16, G_MAXINT16);
+ out_r2 = CLAMP (out_r2, G_MININT16, G_MAXINT16);
+ *odata++ = (gint16) out_l2;
+ *odata++ = (gint16) out_r2;
- if (abs (out_l2) > 0 || abs (out_r2) > 0)
+ if (abs ((gint16) out_l2) > 0 || abs ((gint16) out_r2) > 0)
drained = FALSE;
}
return drained;
@@ -795,7 +797,6 @@ gst_freeverb_transform_m2s_float (GstFreeverb * filter,
gboolean drained = TRUE;
for (k = 0; k < num_samples; k++) {
-
out_l1 = out_r1 = 0.0;
/* The original Freeverb code expects a stereo signal and 'input_1'
@@ -843,7 +844,6 @@ gst_freeverb_transform_s2s_float (GstFreeverb * filter,
gboolean drained = TRUE;
for (k = 0; k < num_samples; k++) {
-
out_l1 = out_r1 = 0.0;
input_2l = *idata++;
diff --git a/gst/jp2kdecimator/jp2kcodestream.c b/gst/jp2kdecimator/jp2kcodestream.c
index d4f5451c..943d8373 100644
--- a/gst/jp2kdecimator/jp2kcodestream.c
+++ b/gst/jp2kdecimator/jp2kcodestream.c
@@ -887,6 +887,7 @@ parse_packet (GstJP2kDecimator * self, GstByteReader * reader,
if (!gst_byte_reader_peek_uint16_be (reader, &marker)) {
GST_ERROR_OBJECT (self, "Truncated file");
ret = GST_FLOW_ERROR;
+ g_slice_free (Packet, p);
goto done;
}
@@ -898,12 +899,14 @@ parse_packet (GstJP2kDecimator * self, GstByteReader * reader,
if (!gst_byte_reader_get_uint16_be (reader, &dummy)) {
GST_ERROR_OBJECT (self, "Truncated file");
ret = GST_FLOW_ERROR;
+ g_slice_free (Packet, p);
goto done;
}
if (!gst_byte_reader_get_uint16_be (reader, &seqno)) {
GST_ERROR_OBJECT (self, "Truncated file");
ret = GST_FLOW_ERROR;
+ g_slice_free (Packet, p);
goto done;
}
p->data = gst_byte_reader_peek_data_unchecked (reader);
@@ -1169,8 +1172,10 @@ parse_tile (GstJP2kDecimator * self, GstByteReader * reader,
PacketLengthTilePart *plt = g_slice_new (PacketLengthTilePart);
ret = parse_plt (self, reader, plt, length);
- if (ret != GST_FLOW_OK)
+ if (ret != GST_FLOW_OK) {
+ g_slice_free (PacketLengthTilePart, plt);
goto done;
+ }
tile->plt = g_list_append (tile->plt, plt);
break;
@@ -1787,6 +1792,8 @@ decimate_main_header (GstJP2kDecimator * self, MainHeader * header)
if (l == NULL) {
GST_ERROR_OBJECT (self, "Not enough packets");
ret = GST_FLOW_ERROR;
+ g_array_free (plt->packet_lengths, TRUE);
+ g_slice_free (PacketLengthTilePart, plt);
goto done;
}
diff --git a/gst/mpegpsmux/psmuxstream.c b/gst/mpegpsmux/psmuxstream.c
index 9c29ec42..43f70703 100644
--- a/gst/mpegpsmux/psmuxstream.c
+++ b/gst/mpegpsmux/psmuxstream.c
@@ -147,6 +147,7 @@ psmux_stream_new (PsMux * mux, PsMuxStreamType stream_type)
if (stream->stream_id == 0) {
g_critical ("Number of elementary streams of type %04x exceeds maximum",
stream->stream_type);
+ g_slice_free (PsMuxStream, stream);
return NULL;
}
diff --git a/gst/mpegtsdemux/mpegtsbase.c b/gst/mpegtsdemux/mpegtsbase.c
index bd105c88..0fef7c72 100644
--- a/gst/mpegtsdemux/mpegtsbase.c
+++ b/gst/mpegtsdemux/mpegtsbase.c
@@ -1194,12 +1194,10 @@ mpegts_base_scan (MpegTSBase * base)
GST_DEBUG ("Grabbing %d => %d", i * 65536, 65536);
ret = gst_pad_pull_range (base->sinkpad, i * 65536, 65536, &buf);
- if (G_UNLIKELY (ret == GST_FLOW_EOS)) {
- done = TRUE;
+ if (G_UNLIKELY (ret == GST_FLOW_EOS))
break;
- } else if (G_UNLIKELY (ret != GST_FLOW_OK)) {
+ if (G_UNLIKELY (ret != GST_FLOW_OK))
goto beach;
- }
/* Push to packetizer */
mpegts_packetizer_push (base->packetizer, buf);
@@ -1247,12 +1245,10 @@ mpegts_base_scan (MpegTSBase * base)
GST_DEBUG ("Grabbing %" G_GUINT64_FORMAT " => %d", seek_pos, 65536);
ret = gst_pad_pull_range (base->sinkpad, seek_pos, 65536, &buf);
- if (G_UNLIKELY (ret == GST_FLOW_EOS)) {
- done = TRUE;
+ if (G_UNLIKELY (ret == GST_FLOW_EOS))
break;
- } else if (G_UNLIKELY (ret != GST_FLOW_OK)) {
+ if (G_UNLIKELY (ret != GST_FLOW_OK))
goto beach;
- }
/* Push to packetizer */
mpegts_packetizer_push (base->packetizer, buf);
diff --git a/gst/mpegtsdemux/tsdemux.c b/gst/mpegtsdemux/tsdemux.c
index 54273883..957e532e 100644
--- a/gst/mpegtsdemux/tsdemux.c
+++ b/gst/mpegtsdemux/tsdemux.c
@@ -937,7 +937,6 @@ create_pad_for_stream (MpegTSBase * base, MpegTSBaseStream * bstream,
case DRF_ID_DTS2:
case DRF_ID_DTS3:
/* SMPTE registered DTS */
- GST_LOG ("subtitling");
template = gst_static_pad_template_get (&private_template);
name = g_strdup_printf ("private_%04x", bstream->pid);
caps = gst_caps_new_empty_simple ("audio/x-dts");
diff --git a/gst/mpegtsmux/tsmux/tsmux.h b/gst/mpegtsmux/tsmux/tsmux.h
index 93eba33a..23683789 100644
--- a/gst/mpegtsmux/tsmux/tsmux.h
+++ b/gst/mpegtsmux/tsmux/tsmux.h
@@ -90,7 +90,6 @@
G_BEGIN_DECLS
#define TSMUX_MAX_ES_INFO_LENGTH ((1 << 12) - 1)
-#define TSMUX_MAX_SECTION_LENGTH (4096)
#define TSMUX_PID_AUTO ((guint16)-1)
@@ -107,9 +106,6 @@ typedef void (*TsMuxAllocFunc) (GstBuffer ** buf, void *user_data);
struct TsMuxSection {
TsMuxPacketInfo pi;
GstMpegTsSection *section;
-
- /* Private sections can be up to 4096 bytes */
- guint8 data[TSMUX_MAX_SECTION_LENGTH];
};
/* Information for the streams associated with one program */
diff --git a/gst/mxf/mxfdemux.c b/gst/mxf/mxfdemux.c
index c2ee7414..eb7fd4ac 100644
--- a/gst/mxf/mxfdemux.c
+++ b/gst/mxf/mxfdemux.c
@@ -861,12 +861,19 @@ gst_mxf_demux_update_essence_tracks (GstMXFDemux * demux)
caps = NULL;
}
-
- if (etrack->handler
- && etrack->handler->get_track_wrapping (track) !=
- MXF_ESSENCE_WRAPPING_FRAME_WRAPPING) {
- GST_ERROR_OBJECT (demux, "Only frame wrapping currently supported");
- return GST_FLOW_ERROR;
+ if (etrack->handler != NULL) {
+ MXFEssenceWrapping track_wrapping;
+
+ track_wrapping = etrack->handler->get_track_wrapping (track);
+ if (track_wrapping == MXF_ESSENCE_WRAPPING_CLIP_WRAPPING) {
+ GST_ELEMENT_ERROR (demux, STREAM, NOT_IMPLEMENTED, (NULL),
+ ("Clip essence wrapping is not implemented yet."));
+ return GST_FLOW_ERROR;
+ } else if (track_wrapping == MXF_ESSENCE_WRAPPING_CUSTOM_WRAPPING) {
+ GST_ELEMENT_ERROR (demux, STREAM, NOT_IMPLEMENTED, (NULL),
+ ("Custom essence wrappings are not supported."));
+ return GST_FLOW_ERROR;
+ }
}
etrack->source_package = package;
diff --git a/gst/pnm/gstpnmenc.c b/gst/pnm/gstpnmenc.c
index cfca151b..dc09c6fc 100644
--- a/gst/pnm/gstpnmenc.c
+++ b/gst/pnm/gstpnmenc.c
@@ -111,6 +111,9 @@ gst_pnmenc_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
gchar *header;
GstBuffer *out;
+ if (s->info.width == 0 || s->info.height == 0 || s->info.fields == 0)
+ goto not_negotiated;
+
/* Assumption: One buffer, one image. That is, always first write header. */
header = g_strdup_printf ("P%i\n%i %i\n%i\n",
s->info.type + 3 * (1 - s->info.encoding), s->info.width, s->info.height,
@@ -177,6 +180,12 @@ gst_pnmenc_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
out:
return r;
+
+not_negotiated:
+ {
+ gst_buffer_unref (buf);
+ return GST_FLOW_NOT_NEGOTIATED;
+ }
}
static gboolean
diff --git a/gst/sdp/gstsdpdemux.c b/gst/sdp/gstsdpdemux.c
index 41fd99f8..17e2e05e 100644
--- a/gst/sdp/gstsdpdemux.c
+++ b/gst/sdp/gstsdpdemux.c
@@ -1397,6 +1397,7 @@ gst_sdp_demux_start (GstSDPDemux * demux)
}
GST_SDP_STREAM_UNLOCK (demux);
gst_sdp_message_uninit (&sdp);
+ g_free (data);
return TRUE;
@@ -1405,6 +1406,7 @@ done:
{
GST_SDP_STREAM_UNLOCK (demux);
gst_sdp_message_uninit (&sdp);
+ g_free (data);
return FALSE;
}
transport_failed:
diff --git a/gst/vmnc/vmncdec.c b/gst/vmnc/vmncdec.c
index 8e0830ec..6d33bdd1 100644
--- a/gst/vmnc/vmncdec.c
+++ b/gst/vmnc/vmncdec.c
@@ -156,6 +156,7 @@ vmnc_handle_wmvi_rectangle (GstVMncDec * dec, struct RfbRectangle *rect,
gint bpp, tc;
guint32 redmask, greenmask, bluemask;
guint32 endianness, dataendianness;
+ GstVideoCodecState *state;
/* A WMVi rectangle has a 16byte payload */
if (len < 16) {
@@ -249,8 +250,9 @@ vmnc_handle_wmvi_rectangle (GstVMncDec * dec, struct RfbRectangle *rect,
}
- gst_video_decoder_set_output_state (GST_VIDEO_DECODER (dec), format,
+ state = gst_video_decoder_set_output_state (GST_VIDEO_DECODER (dec), format,
rect->width, rect->height, dec->input_state);
+ gst_video_codec_state_unref (state);
g_free (dec->imagedata);
dec->imagedata = g_malloc (dec->format.width * dec->format.height *
diff --git a/po/af.gmo b/po/af.gmo
index 785886f1..2749d1df 100644
--- a/po/af.gmo
+++ b/po/af.gmo
Binary files differ
diff --git a/po/af.po b/po/af.po
index 86b1b5a2..03b13094 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-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2004-03-18 14:16+0200\n"
"Last-Translator: Petri Jooste <rkwjpj@puk.ac.za>\n"
"Language-Team: Afrikaans <i18n@af.org.za>\n"
diff --git a/po/az.gmo b/po/az.gmo
index 4552fa52..77a33cc9 100644
--- a/po/az.gmo
+++ b/po/az.gmo
Binary files differ
diff --git a/po/az.po b/po/az.po
index c950f2a5..43b1b8ef 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-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2004-03-19 18:29+0200\n"
"Last-Translator: Metin Amiroff <metin@karegen.com>\n"
"Language-Team: Azerbaijani <translation-team-az@lists.sourceforge.net>\n"
diff --git a/po/bg.gmo b/po/bg.gmo
index d871a4e5..bfacf90e 100644
--- a/po/bg.gmo
+++ b/po/bg.gmo
Binary files differ
diff --git a/po/bg.po b/po/bg.po
index c48a81e5..919ce8cc 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-bad 0.10.21.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2011-04-26 22:30+0300\n"
"Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
diff --git a/po/ca.gmo b/po/ca.gmo
index 5bd7b43a..c891fa64 100644
--- a/po/ca.gmo
+++ b/po/ca.gmo
Binary files differ
diff --git a/po/ca.po b/po/ca.po
index 728c24a0..4c69aae1 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-bad 0.10.21.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2012-01-01 14:19+0100\n"
"Last-Translator: Gil Forcada <gforcada@gnome.org>\n"
"Language-Team: Catalan <ca@dodds.net>\n"
diff --git a/po/cs.gmo b/po/cs.gmo
index fa0ebf7c..43d59177 100644
--- a/po/cs.gmo
+++ b/po/cs.gmo
Binary files differ
diff --git a/po/cs.po b/po/cs.po
index 82b043e1..568ac7e1 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-bad 1.1.4\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2013-09-18 10:05+0200\n"
"Last-Translator: Marek Černocký <marek@manet.cz>\n"
"Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
diff --git a/po/da.gmo b/po/da.gmo
index 7370b28e..b8b44a66 100644
--- a/po/da.gmo
+++ b/po/da.gmo
Binary files differ
diff --git a/po/da.po b/po/da.po
index a4edf043..88d42095 100644
--- a/po/da.po
+++ b/po/da.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-bad-1.2.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2013-12-08 11:28+0200\n"
"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
diff --git a/po/de.gmo b/po/de.gmo
index bc68a41a..b8050e34 100644
--- a/po/de.gmo
+++ b/po/de.gmo
Binary files differ
diff --git a/po/de.po b/po/de.po
index 1a51239c..099356d5 100644
--- a/po/de.po
+++ b/po/de.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-bad 1.1.4\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2013-09-21 13:34+0100\n"
"Last-Translator: Christian Kirbach <christian.kirbach@gmail.com>\n"
"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
diff --git a/po/el.gmo b/po/el.gmo
index b3f47292..1df489c7 100644
--- a/po/el.gmo
+++ b/po/el.gmo
Binary files differ
diff --git a/po/el.po b/po/el.po
index 952769d9..6bb88cad 100644
--- a/po/el.po
+++ b/po/el.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-bad 0.10.21.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2012-05-05 19:17+0100\n"
"Last-Translator: Savvas Radevic <vicedar@gmail.com>\n"
"Language-Team: Greek <team@lists.gnome.gr>\n"
diff --git a/po/en_GB.gmo b/po/en_GB.gmo
index a617cc6d..6fcce58c 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 c744d919..30694d6a 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-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2004-04-26 10:41-0400\n"
"Last-Translator: Gareth Owen <gowen72@yahoo.com>\n"
"Language-Team: English (British) <en_gb@li.org>\n"
diff --git a/po/eo.gmo b/po/eo.gmo
index 0ed5013c..2decad79 100644
--- a/po/eo.gmo
+++ b/po/eo.gmo
Binary files differ
diff --git a/po/eo.po b/po/eo.po
index 3638b4fe..a661d72f 100644
--- a/po/eo.po
+++ b/po/eo.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-bad 0.10.21.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2011-06-04 22:18+0200\n"
"Last-Translator: Kristjan SCHMIDT <kristjan.schmidt@googlemail.com>\n"
"Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
diff --git a/po/es.gmo b/po/es.gmo
index aff9869e..90cd2ef3 100644
--- a/po/es.gmo
+++ b/po/es.gmo
Binary files differ
diff --git a/po/es.po b/po/es.po
index 7b5d7854..72527133 100644
--- a/po/es.po
+++ b/po/es.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-bad 0.10.21.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2011-10-02 15:47+0200\n"
"Last-Translator: Jorge González González <aloriel@gmail.com>\n"
"Language-Team: Spanish <es@li.org>\n"
diff --git a/po/eu.gmo b/po/eu.gmo
index e0fac7df..98ed0f01 100644
--- a/po/eu.gmo
+++ b/po/eu.gmo
Binary files differ
diff --git a/po/eu.po b/po/eu.po
index 66b2b31a..c6fb647c 100644
--- a/po/eu.po
+++ b/po/eu.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-bad-0.10.17.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2010-03-25 12:30+0100\n"
"Last-Translator: Mikel Olasagasti Uranga <hey_neken@mundurat.net>\n"
"Language-Team: Basque <translation-team-eu@lists.sourceforge.net>\n"
diff --git a/po/fi.gmo b/po/fi.gmo
index 445964dc..9c5ed4d5 100644
--- a/po/fi.gmo
+++ b/po/fi.gmo
Binary files differ
diff --git a/po/fi.po b/po/fi.po
index f5921c5e..ad799a8e 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-bad 0.10.13.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2009-08-12 22:13+0300\n"
"Last-Translator: Tommi Vainikainen <Tommi.Vainikainen@iki.fi>\n"
"Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
diff --git a/po/fr.gmo b/po/fr.gmo
index 2f573352..9552fe72 100644
--- a/po/fr.gmo
+++ b/po/fr.gmo
Binary files differ
diff --git a/po/fr.po b/po/fr.po
index 3da82bfc..5430e9f3 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-bad 0.10.21.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2011-04-28 09:13+0200\n"
"Last-Translator: Claude Paroz <claude@2xlibre.net>\n"
"Language-Team: French <traduc@traduc.org>\n"
diff --git a/po/gl.gmo b/po/gl.gmo
index 6d45f045..997ed164 100644
--- a/po/gl.gmo
+++ b/po/gl.gmo
Binary files differ
diff --git a/po/gl.po b/po/gl.po
index 7a199075..df8130d0 100644
--- a/po/gl.po
+++ b/po/gl.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-bad 0.10.21.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2011-09-05 12:50+0200\n"
"Last-Translator: Fran Dieguez <frandieguez@ubuntu.com>\n"
"Language-Team: Galician <proxecto@trasno.net>\n"
diff --git a/po/gst-plugins-bad-1.0.pot b/po/gst-plugins-bad-1.0.pot
index cebdd094..d54f147f 100644
--- a/po/gst-plugins-bad-1.0.pot
+++ b/po/gst-plugins-bad-1.0.pot
@@ -5,9 +5,9 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: gst-plugins-bad 1.3.1\n"
+"Project-Id-Version: gst-plugins-bad 1.3.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+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"
@@ -39,25 +39,25 @@ msgstr ""
msgid "Could not read DVD."
msgstr ""
-#: ext/smoothstreaming/gstmssdemux.c:742 ext/smoothstreaming/gstmssdemux.c:923
+#: ext/smoothstreaming/gstmssdemux.c:802 ext/smoothstreaming/gstmssdemux.c:986
msgid "This file contains no playable streams."
msgstr ""
-#: ext/smoothstreaming/gstmssdemux.c:889
+#: ext/smoothstreaming/gstmssdemux.c:952
msgid "Couldn't get the Manifest's URI"
msgstr ""
-#: ext/smoothstreaming/gstmssdemux.c:1085
+#: ext/smoothstreaming/gstmssdemux.c:1405
msgid "Failed to get fragment URL."
msgstr ""
-#: ext/smoothstreaming/gstmssdemux.c:1194 ext/sndfile/gstsfsink.c:439
-#: gst/mpegtsdemux/mpegtsbase.c:1338 gst/mpegtsdemux/mpegtsbase.c:1342
+#: ext/smoothstreaming/gstmssdemux.c:1500 ext/sndfile/gstsfsink.c:439
+#: gst/mpegtsdemux/mpegtsbase.c:1334 gst/mpegtsdemux/mpegtsbase.c:1338
#: gst/nuvdemux/gstnuvdemux.c:737
msgid "Internal data stream error."
msgstr ""
-#: ext/smoothstreaming/gstmssdemux.c:1221
+#: ext/smoothstreaming/gstmssdemux.c:1546
msgid "Couldn't download fragments"
msgstr ""
diff --git a/po/hr.gmo b/po/hr.gmo
index fdd2ae94..ecb35174 100644
--- a/po/hr.gmo
+++ b/po/hr.gmo
Binary files differ
diff --git a/po/hr.po b/po/hr.po
index 2d176c7e..2a89cb11 100644
--- a/po/hr.po
+++ b/po/hr.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-bad 0.10.21.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2012-04-16 02:06+0200\n"
"Last-Translator: Tomislav Krznar <tomislav.krznar@gmail.com>\n"
"Language-Team: Croatian <lokalizacija@linux.hr>\n"
diff --git a/po/hu.gmo b/po/hu.gmo
index 7ae8394d..6a2e6774 100644
--- a/po/hu.gmo
+++ b/po/hu.gmo
Binary files differ
diff --git a/po/hu.po b/po/hu.po
index a9a30959..13f41220 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-bad 1.2.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2014-03-16 12:02+0100\n"
"Last-Translator: Balázs Úr <urbalazs@gmail.com>\n"
"Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
diff --git a/po/id.gmo b/po/id.gmo
index 16ce1c28..a3e30fca 100644
--- a/po/id.gmo
+++ b/po/id.gmo
Binary files differ
diff --git a/po/id.po b/po/id.po
index 4f362d76..dccc8fb2 100644
--- a/po/id.po
+++ b/po/id.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-bad 1.1.4\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2013-10-15 15:39+0700\n"
"Last-Translator: Andika Triwidada <andika@gmail.com>\n"
"Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
diff --git a/po/it.gmo b/po/it.gmo
index cc7b3db2..c88afcee 100644
--- a/po/it.gmo
+++ b/po/it.gmo
Binary files differ
diff --git a/po/it.po b/po/it.po
index a82d3e5e..0f36d078 100644
--- a/po/it.po
+++ b/po/it.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-bad 0.10.13.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2009-08-14 00:12+0200\n"
"Last-Translator: Luca Ferretti <elle.uca@infinito.it>\n"
"Language-Team: Italian <tp@lists.linux.it>\n"
diff --git a/po/ja.gmo b/po/ja.gmo
index ac520ebc..9c4e4c81 100644
--- a/po/ja.gmo
+++ b/po/ja.gmo
Binary files differ
diff --git a/po/ja.po b/po/ja.po
index 1a7c2166..e9b08950 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-bad 0.10.21.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2011-04-26 19:38+0900\n"
"Last-Translator: Makoto Kato <makoto.kt@gmail.com>\n"
"Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
diff --git a/po/ky.gmo b/po/ky.gmo
index 7209d863..239f6842 100644
--- a/po/ky.gmo
+++ b/po/ky.gmo
Binary files differ
diff --git a/po/ky.po b/po/ky.po
index b38a18aa..32674de8 100644
--- a/po/ky.po
+++ b/po/ky.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-bad 0.10.5\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2007-11-13 17:16+0600\n"
"Last-Translator: Ilyas Bakirov <just_ilyas@yahoo.com>\n"
"Language-Team: Kirghiz <i18n-team-ky-kyrgyz@lists.sourceforge.net>\n"
diff --git a/po/lt.gmo b/po/lt.gmo
index 922a8640..3302a1b4 100644
--- a/po/lt.gmo
+++ b/po/lt.gmo
Binary files differ
diff --git a/po/lt.po b/po/lt.po
index 84007a81..233d5a74 100644
--- a/po/lt.po
+++ b/po/lt.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-bad-0.10.6.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2008-05-14 02:13+0300\n"
"Last-Translator: Gintautas Miliauskas <gintas@akl.lt>\n"
"Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n"
diff --git a/po/lv.gmo b/po/lv.gmo
index 29b5928c..56deb8b0 100644
--- a/po/lv.gmo
+++ b/po/lv.gmo
Binary files differ
diff --git a/po/lv.po b/po/lv.po
index 80595dee..1c646e11 100644
--- a/po/lv.po
+++ b/po/lv.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-bad 1.2.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2014-04-20 15:52+0300\n"
"Last-Translator: Rihards Prieditis <rprieditis@gmail.com>\n"
"Language-Team: Latvian <translation-team-lv@lists.sourceforge.net>\n"
diff --git a/po/mt.gmo b/po/mt.gmo
index c082c853..29d31438 100644
--- a/po/mt.gmo
+++ b/po/mt.gmo
Binary files differ
diff --git a/po/mt.po b/po/mt.po
index b4fc23b3..1304486a 100644
--- a/po/mt.po
+++ b/po/mt.po
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-bad-0.10.8.3\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2008-10-26 20:27+0100\n"
"Last-Translator: Michel Bugeja <michelbugeja@rabatmalta.com>\n"
"Language-Team: Maltese <translation-team-mt@lists.sourceforge.net>\n"
diff --git a/po/nb.gmo b/po/nb.gmo
index 88396f20..f22f6715 100644
--- a/po/nb.gmo
+++ b/po/nb.gmo
Binary files differ
diff --git a/po/nb.po b/po/nb.po
index 171016d9..9f4ed30b 100644
--- a/po/nb.po
+++ b/po/nb.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-bad 1.2.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2014-01-22 17:56+0100\n"
"Last-Translator: Johnny A. Solbu <johnny@solbu.net>\n"
"Language-Team: Norwegian Bokmaal <i18n-nb@lister.ping.uio.no>\n"
diff --git a/po/nl.gmo b/po/nl.gmo
index ea9c47a4..62f39923 100644
--- a/po/nl.gmo
+++ b/po/nl.gmo
Binary files differ
diff --git a/po/nl.po b/po/nl.po
index e7fa1a9a..cde7b74c 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-bad 1.1.4\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2013-09-15 13:26+0200\n"
"Last-Translator: Freek de Kruijf <f.de.kruijf@gmail.com>\n"
"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
diff --git a/po/or.gmo b/po/or.gmo
index ea0c2bb0..d5e38145 100644
--- a/po/or.gmo
+++ b/po/or.gmo
Binary files differ
diff --git a/po/or.po b/po/or.po
index 1b56345b..cf7efe4f 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-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2004-09-27 13:32+0530\n"
"Last-Translator: Gora Mohanty <gora_mohanty@yahoo.co.in>\n"
"Language-Team: Oriya <gora_mohanty@yahoo.co.in>\n"
diff --git a/po/pl.gmo b/po/pl.gmo
index c1b0ddb8..c36b37f0 100644
--- a/po/pl.gmo
+++ b/po/pl.gmo
Binary files differ
diff --git a/po/pl.po b/po/pl.po
index 9515fe4b..4bd5a96c 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-bad 1.1.4\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2013-09-15 11:29+0200\n"
"Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo
index 2460f72b..0649922c 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 fef563df..750fd5ab 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-bad-1.2.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2013-12-17 01:09-0200\n"
"Last-Translator: Fabrício Godoy <skarllot@gmail.com>\n"
"Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge."
diff --git a/po/ro.gmo b/po/ro.gmo
index 1ce3af17..03d63ada 100644
--- a/po/ro.gmo
+++ b/po/ro.gmo
Binary files differ
diff --git a/po/ro.po b/po/ro.po
index 6f060a7a..84c44077 100644
--- a/po/ro.po
+++ b/po/ro.po
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-bad 0.10.18.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2010-08-16 03:11+0300\n"
"Last-Translator: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>\n"
"Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
diff --git a/po/ru.gmo b/po/ru.gmo
index 9c7303bf..68b9f983 100644
--- a/po/ru.gmo
+++ b/po/ru.gmo
Binary files differ
diff --git a/po/ru.po b/po/ru.po
index 1789b785..b2b07e1a 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-bad 1.1.4\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2013-09-15 08:26+0400\n"
"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
"Language-Team: Russian <gnu@mx.ru>\n"
diff --git a/po/sk.gmo b/po/sk.gmo
index ad760b52..7ccdf3be 100644
--- a/po/sk.gmo
+++ b/po/sk.gmo
Binary files differ
diff --git a/po/sk.po b/po/sk.po
index 9271fe0c..7c3db414 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-bad 1.2.1\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2014-01-30 10:44+0100\n"
"Last-Translator: Peter Tuharsky <tuharsky@misbb.sk>\n"
"Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
diff --git a/po/sl.gmo b/po/sl.gmo
index 5c28d3ab..6f90f123 100644
--- a/po/sl.gmo
+++ b/po/sl.gmo
Binary files differ
diff --git a/po/sl.po b/po/sl.po
index b460f9d1..faba9d45 100644
--- a/po/sl.po
+++ b/po/sl.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-bad 0.10.21.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2011-04-26 15:21+0100\n"
"Last-Translator: Klemen Košir <klemen.kosir@gmx.com>\n"
"Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n"
diff --git a/po/sq.gmo b/po/sq.gmo
index 1b422a3f..63670b32 100644
--- a/po/sq.gmo
+++ b/po/sq.gmo
Binary files differ
diff --git a/po/sq.po b/po/sq.po
index 249570db..5dfbed53 100644
--- a/po/sq.po
+++ b/po/sq.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-bad 0.10.7.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2008-08-15 16:07+0200\n"
"Last-Translator: Laurent Dhima <laurenti@alblinux.net>\n"
"Language-Team: Albanian <translation-team-sq@lists.sourceforge.net>\n"
diff --git a/po/sr.gmo b/po/sr.gmo
index 1de5d9c2..094ab1ee 100644
--- a/po/sr.gmo
+++ b/po/sr.gmo
Binary files differ
diff --git a/po/sr.po b/po/sr.po
index 4aba6725..efe1f540 100644
--- a/po/sr.po
+++ b/po/sr.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-bad-1.1.4\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2013-10-04 11:47+0200\n"
"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
"Language-Team: Serbian <(nothing)>\n"
diff --git a/po/sv.gmo b/po/sv.gmo
index 39bc903a..dd0631cd 100644
--- a/po/sv.gmo
+++ b/po/sv.gmo
Binary files differ
diff --git a/po/sv.po b/po/sv.po
index 3d42c3fa..31bcc685 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-bad 0.10.13.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2009-08-12 20:29+0100\n"
"Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
diff --git a/po/tr.gmo b/po/tr.gmo
index 892a6187..5d193fec 100644
--- a/po/tr.gmo
+++ b/po/tr.gmo
Binary files differ
diff --git a/po/tr.po b/po/tr.po
index 40880630..647c65c3 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-bad-0.10.21.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2011-04-26 19:21+0200\n"
"Last-Translator: Server Acim <serveracim@gmail.com>\n"
"Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
diff --git a/po/uk.gmo b/po/uk.gmo
index 571254f7..d0f6d4d8 100644
--- a/po/uk.gmo
+++ b/po/uk.gmo
Binary files differ
diff --git a/po/uk.po b/po/uk.po
index 281d7555..20a51aa7 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-bad 1.1.4\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2013-09-14 22:32+0300\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
diff --git a/po/vi.gmo b/po/vi.gmo
index 5a2c1566..ed16783f 100644
--- a/po/vi.gmo
+++ b/po/vi.gmo
Binary files differ
diff --git a/po/vi.po b/po/vi.po
index 79b21ec3..ddd91c8f 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-bad-1.1.4\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2013-09-16 14:18+0700\n"
"Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
"Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo
index a8c2f1bf..2a47d043 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 440d27dc..9a0a5872 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: gst-plugins-bad 0.10.16.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2014-05-03 18:12+0200\n"
+"POT-Creation-Date: 2014-05-21 12:31+0200\n"
"PO-Revision-Date: 2009-11-20 18:12中国标准时间\n"
"Last-Translator: Ji ZhengYu <zhengyuji@gmail.com>\n"
"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
diff --git a/sys/bluez/gstavdtputil.c b/sys/bluez/gstavdtputil.c
index ed5c2765..caf7275a 100644
--- a/sys/bluez/gstavdtputil.c
+++ b/sys/bluez/gstavdtputil.c
@@ -344,9 +344,9 @@ gst_avdtp_util_parse_sbc_raw (void *config)
gst_value_list_prepend_value (list, value);
}
if (gst_value_list_get_size (list) == 1)
- gst_structure_set_value (structure, "mode", value);
+ gst_structure_set_value (structure, "channel-mode", value);
else
- gst_structure_take_value (structure, "mode", list);
+ gst_structure_take_value (structure, "channel-mode", list);
g_value_unset (value);
g_value_reset (list);
@@ -406,9 +406,9 @@ gst_avdtp_util_parse_sbc_raw (void *config)
gst_value_list_prepend_value (list, value);
}
if (gst_value_list_get_size (list) == 1)
- gst_structure_set_value (structure, "allocation", value);
+ gst_structure_set_value (structure, "allocation-method", value);
else
- gst_structure_take_value (structure, "allocation", list);
+ gst_structure_take_value (structure, "allocation-method", list);
g_value_unset (value);
g_value_reset (list);
diff --git a/sys/dvb/gstdvbsrc.c b/sys/dvb/gstdvbsrc.c
index 9e240236..027281b2 100644
--- a/sys/dvb/gstdvbsrc.c
+++ b/sys/dvb/gstdvbsrc.c
@@ -1308,7 +1308,6 @@ gst_dvbsrc_create (GstPushSrc * element, GstBuffer ** buf)
object = GST_DVBSRC (element);
GST_LOG ("fd_dvr: %d", object->fd_dvr);
- //g_object_get(G_OBJECT(object), "blocksize", &buffer_size, NULL);
buffer_size = DEFAULT_BUFFER_SIZE;
/* device can not be tuned during read */
@@ -1625,7 +1624,8 @@ gst_dvbsrc_tune (GstDvbSrc * object)
props.props = dvb_prop;
if (ioctl (object->fd_frontend, FE_GET_PROPERTY, &props) < 0) {
- g_warning ("Error enumarating delsys: %s", strerror (errno));
+ GST_WARNING_OBJECT (object, "Error enumerating delsys: %s",
+ g_strerror (errno));
return FALSE;
}
@@ -1640,7 +1640,8 @@ gst_dvbsrc_tune (GstDvbSrc * object)
props.num = 1;
props.props = dvb_prop;
if (ioctl (object->fd_frontend, FE_SET_PROPERTY, &props) < 0) {
- g_warning ("Error resetting tuner: %s", strerror (errno));
+ GST_WARNING_OBJECT (object, "Error resetting tuner: %s",
+ g_strerror (errno));
}
/* First three entries are reserved */
n = 3;
@@ -1650,7 +1651,7 @@ gst_dvbsrc_tune (GstDvbSrc * object)
case SYS_TURBO:
object->tone = SEC_TONE_OFF;
if (freq > 2200000) {
- // this must be an absolute frequency
+ /* this must be an absolute frequency */
if (freq < SLOF) {
freq -= LOF1;
} else {
@@ -1676,15 +1677,15 @@ gst_dvbsrc_tune (GstDvbSrc * object)
if (object->diseqc_src == -1 || object->send_diseqc == FALSE) {
set_prop (dvb_prop, &n, DTV_VOLTAGE, voltage);
- // DTV_TONE not yet implemented
- // set_prop (fe_props_array, &n, DTV_TONE, object->tone)
+ /* DTV_TONE not yet implemented
+ * set_prop (fe_props_array, &n, DTV_TONE, object->tone) */
} else {
GST_DEBUG_OBJECT (object, "Sending DISEqC");
diseqc (object->fd_frontend, object->diseqc_src, voltage,
object->tone);
/* Once diseqc source is set, do not set it again until
- * app decides to change it */
- //object->send_diseqc = FALSE;
+ * app decides to change it
+ * object->send_diseqc = FALSE; */
}
if ((object->delsys == SYS_DVBS2) || (object->delsys == SYS_TURBO))
@@ -1730,7 +1731,7 @@ gst_dvbsrc_tune (GstDvbSrc * object)
set_prop (dvb_prop, &n, DTV_MODULATION, object->modulation);
break;
default:
- g_error ("Unknown frontend type: %d", object->delsys);
+ GST_ERROR_OBJECT (object, "Unknown frontend type %u", object->delsys);
return FALSE;
}
g_usleep (100000);
@@ -1746,7 +1747,8 @@ gst_dvbsrc_tune (GstDvbSrc * object)
GST_DEBUG_OBJECT (object, "Setting %d properties", props.num);
if (ioctl (object->fd_frontend, FE_SET_PROPERTY, &props) < 0) {
- g_warning ("Error tuning channel: %s", strerror (errno));
+ GST_WARNING_OBJECT (object, "Error tuning channel: %s",
+ g_strerror (errno));
}
for (i = 0; i < 50; i++) {
g_usleep (100000);
@@ -1805,8 +1807,9 @@ gst_dvbsrc_set_pes_filters (GstDvbSrc * object)
close (*fd);
if ((*fd = open (demux_dev, O_RDWR)) < 0) {
- g_error ("Error opening demuxer: %s (%s)", strerror (errno), demux_dev);
- g_free (demux_dev);
+ GST_ERROR_OBJECT (object, "Error opening demuxer: %s (%s)",
+ g_strerror (errno), demux_dev);
+ continue;
}
g_return_if_fail (*fd != -1);
@@ -1821,7 +1824,7 @@ gst_dvbsrc_set_pes_filters (GstDvbSrc * object)
if (ioctl (*fd, DMX_SET_PES_FILTER, &pes_filter) < 0)
GST_WARNING_OBJECT (object, "Error setting PES filter on %s: %s",
- demux_dev, strerror (errno));
+ demux_dev, g_strerror (errno));
}
g_free (demux_dev);
diff --git a/sys/opensles/openslesringbuffer.c b/sys/opensles/openslesringbuffer.c
index 6e7f50ac..59db1bb3 100644
--- a/sys/opensles/openslesringbuffer.c
+++ b/sys/opensles/openslesringbuffer.c
@@ -801,8 +801,39 @@ gst_opensles_ringbuffer_release (GstAudioRingBuffer * rb)
thiz = GST_OPENSLES_RING_BUFFER (rb);
+ /* XXX: We need to sleep a bit before destroying the player object
+ * because of a bug in Android in versions < 4.2.
+ *
+ * OpenSLES is using AudioTrack for rendering the sound. AudioTrack
+ * has a thread that pulls raw audio from the buffer queue and then
+ * passes it forward to AudioFlinger (AudioTrack::processAudioBuffer()).
+ * This thread is calling various callbacks on events, e.g. when
+ * an underrun happens or to request data. OpenSLES sets this callback
+ * on AudioTrack (audioTrack_callBack_pullFromBuffQueue() from
+ * android_AudioPlayer.cpp). Among other things this is taking a lock
+ * on the player interface.
+ *
+ * Now if we destroy the player interface object, it will first of all
+ * take the player interface lock (IObject_Destroy()). Then it destroys
+ * the audio player instance (android_audioPlayer_destroy()) which then
+ * calls stop() on the AudioTrack and deletes it. Now the destructor of
+ * AudioTrack will wait until the rendering thread (AudioTrack::processAudioBuffer())
+ * has finished.
+ *
+ * If all this happens with bad timing it can happen that the rendering
+ * thread is currently e.g. handling underrun but did not lock the player
+ * interface object yet. Then destroying happens and takes the lock and waits
+ * for the thread to finish. Then the thread tries to take the lock and waits
+ * forever.
+ *
+ * We wait a bit before destroying the player object to make sure that
+ * the rendering thread finished whatever it was doing, and then stops
+ * (note: we called gst_opensles_ringbuffer_stop() before this already).
+ */
+
/* Destroy audio player object, and invalidate all associated interfaces */
if (thiz->playerObject) {
+ g_usleep (50000);
(*thiz->playerObject)->Destroy (thiz->playerObject);
thiz->playerObject = NULL;
thiz->playerPlay = NULL;
@@ -811,6 +842,7 @@ gst_opensles_ringbuffer_release (GstAudioRingBuffer * rb)
/* Destroy audio recorder object, and invalidate all associated interfaces */
if (thiz->recorderObject) {
+ g_usleep (50000);
(*thiz->recorderObject)->Destroy (thiz->recorderObject);
thiz->recorderObject = NULL;
thiz->recorderRecord = NULL;
diff --git a/sys/shm/gstshmsrc.c b/sys/shm/gstshmsrc.c
index d8ee560b..8af1f34d 100644
--- a/sys/shm/gstshmsrc.c
+++ b/sys/shm/gstshmsrc.c
@@ -214,10 +214,7 @@ gst_shm_src_get_property (GObject * object, guint prop_id,
static gboolean
gst_shm_src_start_reading (GstShmSrc * self)
{
- GstShmPipe *gstpipe = g_slice_new0 (GstShmPipe);
-
- gstpipe->use_count = 1;
- gstpipe->src = gst_object_ref (self);
+ GstShmPipe *gstpipe;
if (!self->socket_path) {
GST_ELEMENT_ERROR (self, RESOURCE, NOT_FOUND,
@@ -225,6 +222,10 @@ gst_shm_src_start_reading (GstShmSrc * self)
return FALSE;
}
+ gstpipe = g_slice_new0 (GstShmPipe);
+ gstpipe->use_count = 1;
+ gstpipe->src = gst_object_ref (self);
+
GST_DEBUG_OBJECT (self, "Opening socket %s", self->socket_path);
GST_OBJECT_LOCK (self);
diff --git a/tests/check/elements/curlsftpsink.c b/tests/check/elements/curlsftpsink.c
index 04774b43..3dd265bd 100644
--- a/tests/check/elements/curlsftpsink.c
+++ b/tests/check/elements/curlsftpsink.c
@@ -51,6 +51,7 @@ GST_START_TEST (test_properties)
gchar *res_privkey_file = NULL;
gchar *res_passphrase = NULL;
gchar *res_kh_file = NULL;
+ gchar *res_host_pubkey_md5 = NULL;
guint res_auth_type = 0;
gboolean res_accept_unkh = FALSE;
@@ -73,6 +74,8 @@ GST_START_TEST (test_properties)
g_object_set (G_OBJECT (sink), "ssh-pub-keyfile", "public_key_file", NULL);
g_object_set (G_OBJECT (sink), "ssh-priv-keyfile", "private_key_file", NULL);
g_object_set (G_OBJECT (sink), "ssh-knownhosts", "known_hosts", NULL);
+ g_object_set (G_OBJECT (sink), "ssh-host-pubkey-md5",
+ "00112233445566778899aabbccddeeff", NULL);
g_object_set (G_OBJECT (sink), "ssh-accept-unknownhost", TRUE, NULL);
g_object_set (G_OBJECT (sink), "ssh-key-passphrase", "SoMePaSsPhRaSe", NULL);
@@ -86,6 +89,7 @@ GST_START_TEST (test_properties)
"timeout", &res_timeout, "qos-dscp", &res_qos_dscp,
"ssh-auth-type", &res_auth_type, "ssh-pub-keyfile", &res_pubkey_file,
"ssh-priv-keyfile", &res_privkey_file, "ssh-knownhosts", &res_kh_file,
+ "ssh-host-pubkey-md5", &res_host_pubkey_md5,
"ssh-accept-unknownhost", &res_accept_unkh,
"create-dirs", &res_create_dirs, "ssh-key-passphrase", &res_passphrase,
NULL);
@@ -107,6 +111,8 @@ GST_START_TEST (test_properties)
strlen ("private_key_file")) == 0);
fail_unless (strncmp (res_kh_file, "known_hosts", strlen ("known_hosts"))
== 0);
+ fail_unless (strncmp (res_host_pubkey_md5, "00112233445566778899aabbccddeeff",
+ strlen ("00112233445566778899aabbccddeeff")) == 0);
fail_unless (strncmp (res_passphrase, "SoMePaSsPhRaSe",
strlen ("SoMePaSsPhRaSe")) == 0);
fail_unless (res_accept_unkh == TRUE);
@@ -120,6 +126,7 @@ GST_START_TEST (test_properties)
g_free (res_privkey_file);
g_free (res_passphrase);
g_free (res_kh_file);
+ g_free (res_host_pubkey_md5);
/* ------- change properties ------------- */
@@ -136,6 +143,8 @@ GST_START_TEST (test_properties)
g_object_set (G_OBJECT (sink), "ssh-pub-keyfile", "/xxx/pub_key", NULL);
g_object_set (G_OBJECT (sink), "ssh-priv-keyfile", "/yyy/pvt_key", NULL);
g_object_set (G_OBJECT (sink), "ssh-knownhosts", "/zzz/known_hosts", NULL);
+ g_object_set (G_OBJECT (sink), "ssh-host-pubkey-md5",
+ "ffeeddccbbaa99887766554433221100", NULL);
g_object_set (G_OBJECT (sink), "ssh-accept-unknownhost", FALSE, NULL);
g_object_set (G_OBJECT (sink), "ssh-key-passphrase", "OtherPASSphrase", NULL);
@@ -150,6 +159,7 @@ GST_START_TEST (test_properties)
"ssh-auth-type", &res_auth_type, "ssh-pub-keyfile", &res_pubkey_file,
"ssh-priv-keyfile", &res_privkey_file, "ssh-knownhosts", &res_kh_file,
"ssh-accept-unknownhost", &res_accept_unkh,
+ "ssh-host-pubkey-md5", &res_host_pubkey_md5,
"ssh-key-passphrase", &res_passphrase, "create-dirs", &res_create_dirs,
NULL);
@@ -170,6 +180,8 @@ GST_START_TEST (test_properties)
strlen ("/yyy/pvt_key")) == 0);
fail_unless (strncmp (res_kh_file, "/zzz/known_hosts",
strlen ("/zzz/known_host")) == 0);
+ fail_unless (strncmp (res_host_pubkey_md5, "ffeeddccbbaa99887766554433221100",
+ strlen ("ffeeddccbbaa99887766554433221100")) == 0);
fail_unless (strncmp (res_passphrase, "OtherPASSphrase",
strlen ("OtherPASSphrase")) == 0);
fail_unless (res_accept_unkh == FALSE);
@@ -183,6 +195,7 @@ GST_START_TEST (test_properties)
g_free (res_privkey_file);
g_free (res_passphrase);
g_free (res_kh_file);
+ g_free (res_host_pubkey_md5);
cleanup_curlsftpsink (sink);
}
diff --git a/tests/check/libs/gstglupload.c b/tests/check/libs/gstglupload.c
index b6b5e521..66f0339a 100644
--- a/tests/check/libs/gstglupload.c
+++ b/tests/check/libs/gstglupload.c
@@ -224,34 +224,6 @@ draw_render (gpointer data)
context_class->swap_buffers (context);
}
-GST_START_TEST (test_shader_compile)
-{
- const gchar *formats[] = { "RGB", "RGBx", "RGBA", "BGR", "BGRx", "BGRA",
- "xRGB", "xBGR", "ARGB", "ABGR", "Y444", "I420", "YV12", "Y42B", "Y41B",
- "NV12", "NV21", "YUY2", "UYVY", "AYUV", "GRAY8", "GRAY16_LE", "GRAY16_BE"
- };
- guint i;
- gboolean res;
-
- for (i = 0; i < G_N_ELEMENTS (formats); i++) {
- GstVideoInfo info;
- GstVideoFormat v_format;
-
- v_format = gst_video_format_from_string (formats[i]);
-
- gst_video_info_set_format (&info, v_format, 320, 240);
-
- res = gst_gl_upload_init_format (upload, &info);
- fail_if (res == FALSE, "Failed to init upload for video format %s\n",
- formats[i]);
-
- gst_object_unref (upload);
- upload = gst_gl_upload_new (context);
- }
-}
-
-GST_END_TEST;
-
GST_START_TEST (test_upload_data)
{
gpointer data[GST_VIDEO_MAX_PLANES] = { rgba_data, NULL, NULL, NULL };
@@ -264,7 +236,7 @@ GST_START_TEST (test_upload_data)
gst_gl_context_gen_texture (context, &tex_id, GST_VIDEO_FORMAT_RGBA, WIDTH,
HEIGHT);
- gst_gl_upload_init_format (upload, &in_info);
+ gst_gl_upload_set_format (upload, &in_info);
res = gst_gl_upload_perform_with_data (upload, tex_id, data);
fail_if (res == FALSE, "Failed to upload buffer: %s\n",
@@ -301,7 +273,7 @@ GST_START_TEST (test_upload_buffer)
rgba_data, NULL, NULL);
gst_buffer_append_memory (buffer, (GstMemory *) gl_mem);
- gst_gl_upload_init_format (upload, &in_info);
+ gst_gl_upload_set_format (upload, &in_info);
res = gst_gl_upload_perform_with_buffer (upload, buffer, &tex_id);
fail_if (res == FALSE, "Failed to upload buffer: %s\n",
@@ -343,7 +315,7 @@ GST_START_TEST (test_upload_meta_producer)
gst_gl_context_gen_texture (context, &tex_ids[0], GST_VIDEO_FORMAT_RGBA,
WIDTH, HEIGHT);
- gst_gl_upload_init_format (upload, &in_info);
+ gst_gl_upload_set_format (upload, &in_info);
gst_buffer_add_video_meta_full (buffer, 0, GST_VIDEO_FORMAT_RGBA, WIDTH,
HEIGHT, 1, in_info.offset, in_info.stride);
gst_gl_upload_add_video_gl_texture_upload_meta (upload, buffer);
@@ -379,7 +351,6 @@ gst_gl_upload_suite (void)
suite_add_tcase (s, tc_chain);
tcase_add_checked_fixture (tc_chain, setup, teardown);
- tcase_add_test (tc_chain, test_shader_compile);
tcase_add_test (tc_chain, test_upload_data);
tcase_add_test (tc_chain, test_upload_buffer);
tcase_add_test (tc_chain, test_upload_meta_producer);
diff --git a/tests/check/orc/bayer.c b/tests/check/orc/bayer.c
index 74733776..a158be84 100644
--- a/tests/check/orc/bayer.c
+++ b/tests/check/orc/bayer.c
@@ -199,19 +199,17 @@ _backup_bayer_orc_horiz_upsample (OrcExecutor * ORC_RESTRICT ex)
orc_union16 * ORC_RESTRICT ptr0;
orc_union16 * ORC_RESTRICT ptr1;
const orc_union16 * ORC_RESTRICT ptr4;
+ orc_union16 var37;
+ orc_union16 var38;
orc_union16 var39;
orc_union16 var40;
- orc_union16 var41;
- orc_union16 var42;
+ orc_int8 var41;
+ orc_int8 var42;
orc_int8 var43;
- orc_int8 var44;
+ orc_union16 var44;
orc_int8 var45;
orc_int8 var46;
- orc_union16 var47;
- orc_int8 var48;
- orc_int8 var49;
- orc_int8 var50;
- orc_int8 var51;
+ orc_int8 var47;
ptr0 = (orc_union16 *)ex->arrays[0];
ptr1 = (orc_union16 *)ex->arrays[1];
@@ -220,54 +218,52 @@ _backup_bayer_orc_horiz_upsample (OrcExecutor * ORC_RESTRICT ex)
for (i = 0; i < n; i++) {
/* 0: loadoffw */
- var42 = ptr4[i + -1];
- /* 1: splitwb */
+ var40 = ptr4[i + -1];
+ /* 1: select1wb */
{
orc_union16 _src;
- _src.i = var42.i;
- var43 = _src.x2[1];
- var44 = _src.x2[0];
+ _src.i = var40.i;
+ var41 = _src.x2[1];
}
/* 2: loadw */
- var39 = ptr4[i];
+ var37 = ptr4[i];
/* 3: splitwb */
{
orc_union16 _src;
- _src.i = var39.i;
- var45 = _src.x2[1];
- var46 = _src.x2[0];
+ _src.i = var37.i;
+ var42 = _src.x2[1];
+ var43 = _src.x2[0];
}
/* 4: loadoffw */
- var47 = ptr4[i + 1];
- /* 5: splitwb */
+ var44 = ptr4[i + 1];
+ /* 5: select0wb */
{
orc_union16 _src;
- _src.i = var47.i;
- var48 = _src.x2[1];
- var49 = _src.x2[0];
+ _src.i = var44.i;
+ var45 = _src.x2[0];
}
/* 6: avgub */
- var50 = ((orc_uint8)var46 + (orc_uint8)var49 + 1)>>1;
+ var46 = ((orc_uint8)var43 + (orc_uint8)var45 + 1)>>1;
/* 7: mergebw */
{
orc_union16 _dest;
- _dest.x2[0] = var46;
- _dest.x2[1] = var50;
- var40.i = _dest.i;
+ _dest.x2[0] = var43;
+ _dest.x2[1] = var46;
+ var38.i = _dest.i;
}
/* 8: storew */
- ptr0[i] = var40;
+ ptr0[i] = var38;
/* 9: avgub */
- var51 = ((orc_uint8)var43 + (orc_uint8)var45 + 1)>>1;
+ var47 = ((orc_uint8)var41 + (orc_uint8)var42 + 1)>>1;
/* 10: mergebw */
{
orc_union16 _dest;
- _dest.x2[0] = var51;
- _dest.x2[1] = var45;
- var41.i = _dest.i;
+ _dest.x2[0] = var47;
+ _dest.x2[1] = var42;
+ var39.i = _dest.i;
}
/* 11: storew */
- ptr1[i] = var41;
+ ptr1[i] = var39;
}
}
@@ -1480,18 +1476,16 @@ main (int argc, char *argv[])
orc_program_add_temporary (p, 1, "t3");
orc_program_add_temporary (p, 1, "t4");
orc_program_add_temporary (p, 1, "t5");
- orc_program_add_temporary (p, 1, "t6");
- orc_program_add_temporary (p, 1, "t7");
orc_program_append_2 (p, "loadoffw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_C1, ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T3, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T5, ORC_VAR_T4, ORC_VAR_S1, ORC_VAR_D1);
+ orc_program_append_2 (p, "select1wb", 0, ORC_VAR_T2, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_D1);
+ orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T4, ORC_VAR_T3, ORC_VAR_S1, ORC_VAR_D1);
orc_program_append_2 (p, "loadoffw", 0, ORC_VAR_T1, ORC_VAR_S1, ORC_VAR_C2, ORC_VAR_D1);
- orc_program_append_2 (p, "splitwb", 0, ORC_VAR_T7, ORC_VAR_T6, ORC_VAR_T1, ORC_VAR_D1);
- orc_program_append_2 (p, "avgub", 0, ORC_VAR_T6, ORC_VAR_T4, ORC_VAR_T6, ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_D1, ORC_VAR_T4, ORC_VAR_T6, ORC_VAR_D1);
- orc_program_append_2 (p, "avgub", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_T5, ORC_VAR_D1);
- orc_program_append_2 (p, "mergebw", 0, ORC_VAR_D2, ORC_VAR_T3, ORC_VAR_T5, ORC_VAR_D1);
+ orc_program_append_2 (p, "select0wb", 0, ORC_VAR_T5, ORC_VAR_T1, ORC_VAR_D1, ORC_VAR_D1);
+ orc_program_append_2 (p, "avgub", 0, ORC_VAR_T5, ORC_VAR_T3, ORC_VAR_T5, ORC_VAR_D1);
+ orc_program_append_2 (p, "mergebw", 0, ORC_VAR_D1, ORC_VAR_T3, ORC_VAR_T5, ORC_VAR_D1);
+ orc_program_append_2 (p, "avgub", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_T4, ORC_VAR_D1);
+ orc_program_append_2 (p, "mergebw", 0, ORC_VAR_D2, ORC_VAR_T2, ORC_VAR_T4, ORC_VAR_D1);
if (benchmark) {
printf (" cycles (emulate) : %g\n",
diff --git a/tests/examples/gl/clutter/clutteractor.c b/tests/examples/gl/clutter/clutteractor.c
index 44c97ba7..1fcae0e0 100644
--- a/tests/examples/gl/clutter/clutteractor.c
+++ b/tests/examples/gl/clutter/clutteractor.c
@@ -51,7 +51,7 @@ create_actor (GstGLClutterActor * actor)
//ClutterTimeline *timeline;
ClutterAnimation *animation = NULL;
- actor->texture = g_object_new (CLUTTER_GLX_TYPE_TEXTURE_PIXMAP,
+ actor->texture = g_object_new (CLUTTER_X11_TYPE_TEXTURE_PIXMAP,
"window", actor->win, "automatic-updates", TRUE, NULL);
clutter_container_add_actor (CLUTTER_CONTAINER (actor->stage),
actor->texture);
diff --git a/tests/examples/gl/clutter/clutteractortee.c b/tests/examples/gl/clutter/clutteractortee.c
index a46f3238..73f7a60a 100644
--- a/tests/examples/gl/clutter/clutteractortee.c
+++ b/tests/examples/gl/clutter/clutteractortee.c
@@ -53,7 +53,7 @@ create_actor (GstGLClutterActor * actor)
{
static gint xpos = 0;
static gint ypos = 0;
- actor->texture = g_object_new (CLUTTER_GLX_TYPE_TEXTURE_PIXMAP,
+ actor->texture = g_object_new (CLUTTER_X11_TYPE_TEXTURE_PIXMAP,
"window", actor->win, "automatic-updates", TRUE, NULL);
clutter_container_add_actor (CLUTTER_CONTAINER (actor->stage),
actor->texture);
diff --git a/tests/examples/gl/clutter/cluttershare.c b/tests/examples/gl/clutter/cluttershare.c
index d3f1b1e1..de7cd66d 100644
--- a/tests/examples/gl/clutter/cluttershare.c
+++ b/tests/examples/gl/clutter/cluttershare.c
@@ -25,8 +25,8 @@
#define CLUTTER_VERSION_MIN_REQUIRED CLUTTER_VERSION_1_8
#define CLUTTER_VERSION_MAX_ALLOWED CLUTTER_VERSION_1_10
-#define COGL_VERSION_MIN_REQUIRED COGL_VERSION_1_16
-#define COGL_VERSION_MAX_ALLOWED COGL_VERSION_1_18
+#define COGL_VERSION_MIN_REQUIRED COGL_VERSION_ENCODE (1, 16, 0)
+#define COGL_VERSION_MAX_ALLOWED COGL_VERSION_ENCODE (1, 18, 0)
#include <clutter/clutter.h>
#ifndef WIN32
#include <clutter/x11/clutter-x11.h>
diff --git a/tests/examples/gl/generic/cube/main.cpp b/tests/examples/gl/generic/cube/main.cpp
index b3b167cf..e7ebaaeb 100644
--- a/tests/examples/gl/generic/cube/main.cpp
+++ b/tests/examples/gl/generic/cube/main.cpp
@@ -75,7 +75,6 @@ static void reshapeCallback (GLuint width, GLuint height, gpointer data)
}
//client draw callback
-
static gboolean drawCallback (GLuint texture, GLuint width, GLuint height, gpointer data)
{
static GLfloat xrot = 0;
@@ -244,5 +243,4 @@ gint main (gint argc, gchar *argv[])
gst_object_unref (pipeline);
return 0;
-
}
diff --git a/tests/examples/gl/generic/cubeyuv/main.cpp b/tests/examples/gl/generic/cubeyuv/main.cpp
index 6e17b6ad..17964479 100644
--- a/tests/examples/gl/generic/cubeyuv/main.cpp
+++ b/tests/examples/gl/generic/cubeyuv/main.cpp
@@ -33,13 +33,13 @@ static gboolean bus_call (GstBus *bus, GstMessage *msg, gpointer data)
{
GMainLoop *loop = (GMainLoop*)data;
- switch (GST_MESSAGE_TYPE (msg))
+ switch (GST_MESSAGE_TYPE (msg))
{
case GST_MESSAGE_EOS:
g_print ("End-of-stream\n");
g_main_loop_quit (loop);
break;
- case GST_MESSAGE_ERROR:
+ case GST_MESSAGE_ERROR:
{
gchar *debug = NULL;
GError *err = NULL;
@@ -49,7 +49,7 @@ static gboolean bus_call (GstBus *bus, GstMessage *msg, gpointer data)
g_print ("Error: %s\n", err->message);
g_error_free (err);
- if (debug)
+ if (debug)
{
g_print ("Debug deails: %s\n", debug);
g_free (debug);
@@ -57,7 +57,7 @@ static gboolean bus_call (GstBus *bus, GstMessage *msg, gpointer data)
g_main_loop_quit (loop);
break;
- }
+ }
default:
break;
}
@@ -72,7 +72,7 @@ static void identityCallback (GstElement *src, GstBuffer *buffer, GstElement* t
static GstClockTime last_timestamp = 0;
static gint nbFrames = 0 ;
- //display estimated video FPS
+ //display estimated video FPS
nbFrames++ ;
if (GST_BUFFER_TIMESTAMP(buffer) - last_timestamp >= 1000000000)
{
@@ -81,7 +81,7 @@ static void identityCallback (GstElement *src, GstBuffer *buffer, GstElement* t
std::string s(oss.str()) ;
g_object_set(G_OBJECT(textoverlay), "text", s.c_str(), NULL);
last_timestamp = GST_BUFFER_TIMESTAMP(buffer) ;
- nbFrames = 0 ;
+ nbFrames = 0 ;
}
}
@@ -92,32 +92,31 @@ static void reshapeCallback (GLuint width, GLuint height)
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
- gluPerspective(45, (gfloat)width/(gfloat)height, 0.1, 100);
- glMatrixMode(GL_MODELVIEW);
+ gluPerspective(45, (gfloat)width/(gfloat)height, 0.1, 100);
+ glMatrixMode(GL_MODELVIEW);
}
//client draw callback
static gboolean drawCallback (GLuint texture, GLuint width, GLuint height)
{
-
static GLfloat xrot = 0;
- static GLfloat yrot = 0;
+ static GLfloat yrot = 0;
static GLfloat zrot = 0;
static GTimeVal current_time;
static glong last_sec = current_time.tv_sec;
- static gint nbFrames = 0;
+ static gint nbFrames = 0;
g_get_current_time (&current_time);
nbFrames++ ;
-
+
if ((current_time.tv_sec - last_sec) >= 1)
{
std::cout << "GRPHIC FPS = " << nbFrames << std::endl;
nbFrames = 0;
last_sec = current_time.tv_sec;
}
-
+
glEnable(GL_DEPTH_TEST);
glEnable (GL_TEXTURE_2D);
@@ -131,7 +130,7 @@ static gboolean drawCallback (GLuint texture, GLuint width, GLuint height)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
-
+
glTranslatef(0.0f,0.0f,-5.0f);
glRotatef(xrot,1.0f,0.0f,0.0f);
@@ -169,7 +168,7 @@ static gboolean drawCallback (GLuint texture, GLuint width, GLuint height)
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
glTexCoord2f(0.0f, (gfloat)height); glVertex3f(-1.0f, 1.0f, 1.0f);
glTexCoord2f((gfloat)width, (gfloat)height); glVertex3f(-1.0f, 1.0f, -1.0f);
- glEnd();
+ glEnd();
xrot+=0.03f;
yrot+=0.02f;
@@ -192,9 +191,9 @@ static gboolean drawCallback (GLuint texture, GLuint width, GLuint height)
static void cb_new_pad (GstElement* decodebin, GstPad* pad, GstElement* identity)
{
GstPad* identity_pad = gst_element_get_static_pad (identity, "sink");
-
- //only link once
- if (GST_PAD_IS_LINKED (identity_pad))
+
+ //only link once
+ if (GST_PAD_IS_LINKED (identity_pad))
{
gst_object_unref (identity_pad);
return;
@@ -202,7 +201,7 @@ static void cb_new_pad (GstElement* decodebin, GstPad* pad, GstElement* identity
GstCaps* caps = gst_pad_get_current_caps (pad);
GstStructure* str = gst_caps_get_structure (caps, 0);
- if (!g_strrstr (gst_structure_get_name (str), "video"))
+ if (!g_strrstr (gst_structure_get_name (str), "video"))
{
gst_caps_unref (caps);
gst_object_unref (identity_pad);
@@ -211,8 +210,8 @@ static void cb_new_pad (GstElement* decodebin, GstPad* pad, GstElement* identity
gst_caps_unref (caps);
GstPadLinkReturn ret = gst_pad_link (pad, identity_pad);
- if (ret != GST_PAD_LINK_OK)
- g_warning ("Failed to link with decodebin!\n");
+ if (ret != GST_PAD_LINK_OK)
+ g_warning ("Failed to link with decodebin!\n");
}
@@ -223,9 +222,9 @@ gint main (gint argc, gchar *argv[])
g_warning ("usage: cubeyuv.exe videolocation\n");
return -1;
}
-
+
std::string video_location(argv[1]);
-
+
/* initialization */
gst_init (&argc, &argv);
GMainLoop* loop = g_main_loop_new (NULL, FALSE);
@@ -267,7 +266,7 @@ gint main (gint argc, gchar *argv[])
g_object_set(G_OBJECT(textoverlay), "font_desc", "Ahafoni CLM Bold 30", NULL);
g_object_set(G_OBJECT(glimagesink), "client-reshape-callback", reshapeCallback, NULL);
g_object_set(G_OBJECT(glimagesink), "client-draw-callback", drawCallback, NULL);
-
+
/* add elements */
gst_bin_add_many (GST_BIN (pipeline), videosrc, decodebin, identity,
textoverlay, glcolorscale, glimagesink, NULL);
@@ -277,7 +276,7 @@ gint main (gint argc, gchar *argv[])
g_signal_connect (decodebin, "pad-added", G_CALLBACK (cb_new_pad), identity);
- if (!gst_element_link_pads(identity, "src", textoverlay, "video_sink"))
+ if (!gst_element_link_pads(identity, "src", textoverlay, "video_sink"))
{
g_print ("Failed to link identity to textoverlay!\n");
return -1;
@@ -292,16 +291,16 @@ gint main (gint argc, gchar *argv[])
g_warning("Failed to link textoverlay to glimagesink!\n") ;
return -1 ;
}
-
+
/* run */
GstStateChangeReturn ret = gst_element_set_state (pipeline, GST_STATE_PLAYING);
- if (ret == GST_STATE_CHANGE_FAILURE)
+ if (ret == GST_STATE_CHANGE_FAILURE)
{
g_print ("Failed to start up pipeline!\n");
/* check if there is an error message with details on the bus */
GstMessage* msg = gst_bus_poll (bus, GST_MESSAGE_ERROR, 0);
- if (msg)
+ if (msg)
{
GError *err = NULL;
@@ -320,6 +319,4 @@ gint main (gint argc, gchar *argv[])
gst_object_unref (pipeline);
return 0;
-
}
-
diff --git a/tests/examples/gl/generic/doublecube/main.cpp b/tests/examples/gl/generic/doublecube/main.cpp
index 4f283362..4ff63389 100644
--- a/tests/examples/gl/generic/doublecube/main.cpp
+++ b/tests/examples/gl/generic/doublecube/main.cpp
@@ -33,13 +33,13 @@ static gboolean bus_call (GstBus *bus, GstMessage *msg, gpointer data)
{
GMainLoop *loop = (GMainLoop*)data;
- switch (GST_MESSAGE_TYPE (msg))
+ switch (GST_MESSAGE_TYPE (msg))
{
case GST_MESSAGE_EOS:
g_print ("End-of-stream\n");
g_main_loop_quit (loop);
break;
- case GST_MESSAGE_ERROR:
+ case GST_MESSAGE_ERROR:
{
gchar *debug = NULL;
GError *err = NULL;
@@ -49,7 +49,7 @@ static gboolean bus_call (GstBus *bus, GstMessage *msg, gpointer data)
g_print ("Error: %s\n", err->message);
g_error_free (err);
- if (debug)
+ if (debug)
{
g_print ("Debug details: %s\n", debug);
g_free (debug);
@@ -57,7 +57,7 @@ static gboolean bus_call (GstBus *bus, GstMessage *msg, gpointer data)
g_main_loop_quit (loop);
break;
- }
+ }
default:
break;
}
@@ -72,16 +72,16 @@ static GstPadProbeReturn textoverlay_sink_pad_probe_cb (GstPad *pad, GstPadProbe
static GstClockTime last_timestamp = 0;
static gint nbFrames = 0 ;
- //display estimated video FPS
+ //display estimated video FPS
nbFrames++ ;
if (GST_BUFFER_TIMESTAMP(info->data) - last_timestamp >= 1000000000)
{
- std::ostringstream oss ;
+ std::ostringstream oss;
oss << "video framerate = " << nbFrames ;
- std::string s(oss.str()) ;
+ std::string s(oss.str());
g_object_set(G_OBJECT(textoverlay), "text", s.c_str(), NULL);
last_timestamp = GST_BUFFER_TIMESTAMP(info->data) ;
- nbFrames = 0 ;
+ nbFrames = 0;
}
return GST_PAD_PROBE_OK;
@@ -94,8 +94,8 @@ static void reshapeCallback (GLuint width, GLuint height)
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
- gluPerspective(45, (gfloat)width/(gfloat)height, 0.1, 100);
- glMatrixMode(GL_MODELVIEW);
+ gluPerspective(45, (gfloat)width/(gfloat)height, 0.1, 100);
+ glMatrixMode(GL_MODELVIEW);
}
@@ -103,15 +103,15 @@ static void reshapeCallback (GLuint width, GLuint height)
static gboolean drawCallback (GLuint texture, GLuint width, GLuint height)
{
static GLfloat xrot = 0;
- static GLfloat yrot = 0;
+ static GLfloat yrot = 0;
static GLfloat zrot = 0;
static GTimeVal current_time;
static glong last_sec = current_time.tv_sec;
- static gint nbFrames = 0;
+ static gint nbFrames = 0;
g_get_current_time (&current_time);
nbFrames++ ;
-
+
if ((current_time.tv_sec - last_sec) >= 1)
{
std::cout << "GRAPHIC FPS of the scene which contains the custom cube) = " << nbFrames << std::endl;
@@ -132,7 +132,7 @@ static gboolean drawCallback (GLuint texture, GLuint width, GLuint height)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
-
+
glTranslatef(0.0f,0.0f,-5.0f);
glRotatef(xrot,1.0f,0.0f,0.0f);
@@ -193,9 +193,9 @@ static gboolean drawCallback (GLuint texture, GLuint width, GLuint height)
static void cb_new_pad (GstElement* decodebin, GstPad* pad, GstElement* element)
{
GstPad* element_pad = gst_element_get_static_pad (element, "sink");
-
- //only link once
- if (!element_pad || GST_PAD_IS_LINKED (element_pad))
+
+ //only link once
+ if (!element_pad || GST_PAD_IS_LINKED (element_pad))
{
gst_object_unref (element_pad);
return;
@@ -203,11 +203,11 @@ static void cb_new_pad (GstElement* decodebin, GstPad* pad, GstElement* element)
GstCaps* caps = gst_pad_get_current_caps (pad);
GstStructure* str = gst_caps_get_structure (caps, 0);
-
+
GstCaps* caps2 = gst_pad_query_caps (element_pad, NULL);
gst_caps_unref (caps2);
-
- if (!g_strrstr (gst_structure_get_name (str), "video"))
+
+ if (!g_strrstr (gst_structure_get_name (str), "video"))
{
gst_caps_unref (caps);
gst_object_unref (element_pad);
@@ -216,7 +216,7 @@ static void cb_new_pad (GstElement* decodebin, GstPad* pad, GstElement* element)
gst_caps_unref (caps);
GstPadLinkReturn ret = gst_pad_link (pad, element_pad);
- if (ret != GST_PAD_LINK_OK)
+ if (ret != GST_PAD_LINK_OK)
g_warning ("Failed to link with decodebin %d!\n", ret);
gst_object_unref (element_pad);
}
@@ -224,13 +224,12 @@ static void cb_new_pad (GstElement* decodebin, GstPad* pad, GstElement* element)
gint main (gint argc, gchar *argv[])
{
-
if (argc != 2)
{
g_warning ("usage: doublecube.exe videolocation\n");
return -1;
}
-
+
std::string video_location(argv[1]);
/* initialization */
@@ -267,7 +266,7 @@ gint main (gint argc, gchar *argv[])
if (!videosrc || !decodebin || !videoconvert || !textoverlay || !tee ||
!queue0 || !glimagesink0 ||
!queue1 || !glfiltercube || !glimagesink1 ||
- !queue2 || !glimagesink2)
+ !queue2 || !glimagesink2)
{
g_warning ("one element could not be found \n");
return -1;
@@ -284,33 +283,33 @@ gint main (gint argc, gchar *argv[])
g_object_set(G_OBJECT(textoverlay), "font_desc", "Ahafoni CLM Bold 30", NULL);
g_object_set(G_OBJECT(glimagesink0), "client-reshape-callback", reshapeCallback, NULL);
g_object_set(G_OBJECT(glimagesink0), "client-draw-callback", drawCallback, NULL);
-
+
/* add elements */
gst_bin_add_many (GST_BIN (pipeline), videosrc, decodebin, videoconvert, textoverlay, tee,
queue0, glimagesink0,
- queue1, glfiltercube, glimagesink1,
+ queue1, glfiltercube, glimagesink1,
queue2, glimagesink2, NULL);
-
+
GstPad* textoverlay_sink_pad = gst_element_get_static_pad (textoverlay, "video_sink");
- gst_pad_add_probe (textoverlay_sink_pad, GST_PAD_PROBE_TYPE_BUFFER,
+ gst_pad_add_probe (textoverlay_sink_pad, GST_PAD_PROBE_TYPE_BUFFER,
(GstPadProbeCallback) textoverlay_sink_pad_probe_cb, (gpointer)textoverlay, NULL);
gst_object_unref (textoverlay_sink_pad);
- if (!gst_element_link_many(videoconvert, textoverlay, tee, NULL))
+ if (!gst_element_link_many(videoconvert, textoverlay, tee, NULL))
{
g_print ("Failed to link videoconvert to tee!\n");
return -1;
}
- if (!gst_element_link(videosrc, decodebin))
+ if (!gst_element_link(videosrc, decodebin))
{
g_print ("Failed to link videosrc to decodebin!\n");
return -1;
}
g_signal_connect (decodebin, "pad-added", G_CALLBACK (cb_new_pad), videoconvert);
-
- if (!gst_element_link_many(tee, queue0, NULL))
+
+ if (!gst_element_link_many(tee, queue0, NULL))
{
g_warning ("Failed to link one or more elements bettween tee and queue0!\n");
return -1;
@@ -324,27 +323,27 @@ gint main (gint argc, gchar *argv[])
return -1 ;
}
- if (!gst_element_link_many(tee, queue1, glfiltercube, glimagesink1, NULL))
+ if (!gst_element_link_many(tee, queue1, glfiltercube, glimagesink1, NULL))
{
g_warning ("Failed to link one or more elements bettween tee and glimagesink1!\n");
return -1;
}
- if (!gst_element_link_many(tee, queue2, glimagesink2, NULL))
+ if (!gst_element_link_many(tee, queue2, glimagesink2, NULL))
{
g_warning ("Failed to link one or more elements bettween tee and glimagesink2!\n");
return -1;
}
-
+
/* run */
GstStateChangeReturn ret = gst_element_set_state (pipeline, GST_STATE_PLAYING);
- if (ret == GST_STATE_CHANGE_FAILURE)
+ if (ret == GST_STATE_CHANGE_FAILURE)
{
g_print ("Failed to start up pipeline!\n");
/* check if there is an error message with details on the bus */
GstMessage* msg = gst_bus_poll (bus, GST_MESSAGE_ERROR, 0);
- if (msg)
+ if (msg)
{
GError *err = NULL;
@@ -363,6 +362,4 @@ gint main (gint argc, gchar *argv[])
gst_object_unref (pipeline);
return 0;
-
}
-
diff --git a/tests/examples/gl/generic/recordgraphic/main.cpp b/tests/examples/gl/generic/recordgraphic/main.cpp
index fd0ceb0c..7771ac2b 100644
--- a/tests/examples/gl/generic/recordgraphic/main.cpp
+++ b/tests/examples/gl/generic/recordgraphic/main.cpp
@@ -33,13 +33,13 @@ static gboolean bus_call (GstBus *bus, GstMessage *msg, gpointer data)
{
GMainLoop *loop = (GMainLoop*)data;
- switch (GST_MESSAGE_TYPE (msg))
+ switch (GST_MESSAGE_TYPE (msg))
{
case GST_MESSAGE_EOS:
g_print ("End-of-stream\n");
g_main_loop_quit (loop);
break;
- case GST_MESSAGE_ERROR:
+ case GST_MESSAGE_ERROR:
{
gchar *debug = NULL;
GError *err = NULL;
@@ -49,7 +49,7 @@ static gboolean bus_call (GstBus *bus, GstMessage *msg, gpointer data)
g_print ("Error: %s\n", err->message);
g_error_free (err);
- if (debug)
+ if (debug)
{
g_print ("Debug details: %s\n", debug);
g_free (debug);
@@ -57,7 +57,7 @@ static gboolean bus_call (GstBus *bus, GstMessage *msg, gpointer data)
g_main_loop_quit (loop);
break;
- }
+ }
default:
break;
}
@@ -71,8 +71,8 @@ static void reshapeCallback (GLuint width, GLuint height)
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
- gluPerspective(45, (gfloat)width/(gfloat)height, 0.1, 100);
- glMatrixMode(GL_MODELVIEW);
+ gluPerspective(45, (gfloat)width/(gfloat)height, 0.1, 100);
+ glMatrixMode(GL_MODELVIEW);
}
@@ -80,22 +80,22 @@ static void reshapeCallback (GLuint width, GLuint height)
static gboolean drawCallback (GLuint width, GLuint height, GLuint texture, gpointer data)
{
static GLfloat xrot = 0;
- static GLfloat yrot = 0;
+ static GLfloat yrot = 0;
static GLfloat zrot = 0;
static GTimeVal current_time;
static glong last_sec = current_time.tv_sec;
- static gint nbFrames = 0;
+ static gint nbFrames = 0;
g_get_current_time (&current_time);
nbFrames++ ;
-
+
if ((current_time.tv_sec - last_sec) >= 1)
{
std::cout << "GRPHIC FPS = " << nbFrames << std::endl;
nbFrames = 0;
last_sec = current_time.tv_sec;
}
-
+
glEnable(GL_DEPTH_TEST);
glEnable (GL_TEXTURE_2D);
@@ -109,7 +109,7 @@ static gboolean drawCallback (GLuint width, GLuint height, GLuint texture, gpoin
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
-
+
glTranslatef(0.0f,0.0f,-5.0f);
glRotatef(xrot,1.0f,0.0f,0.0f);
@@ -159,8 +159,8 @@ static gboolean drawCallback (GLuint width, GLuint height, GLuint texture, gpoin
}
-//equivalent command line:
-//gst-launch-1.0 videotestsrc num_buffers=400 ! gleffects effect=0 !
+//equivalent command line:
+//gst-launch-1.0 videotestsrc num_buffers=400 ! gleffects effect=0 !
//avenc_mpeg4 ! avimux ! filesink location="record.avi"
// or
//gst-launch-1.0 videotestsrc num_buffers=400 ! gleffects effect=0 ! "video/x-raw, width=320, height=240" ! glfiltercube ! "video/x-raw, width=720, height=576" !
@@ -193,7 +193,7 @@ gint main (gint argc, gchar *argv[])
filesink = gst_element_factory_make ("filesink", "filesink0");
- if (!videosrc || !glfilterapp || !avenc_mpeg4 || !avimux || !filesink)
+ if (!videosrc || !glfilterapp || !avenc_mpeg4 || !avimux || !filesink)
{
g_print ("one element could not be found \n");
return -1;
@@ -219,11 +219,11 @@ gint main (gint argc, gchar *argv[])
g_object_set(G_OBJECT(glfilterapp), "client-draw-callback", drawCallback, NULL);
g_object_set(G_OBJECT(glfilterapp), "client-data", NULL, NULL);
g_object_set(G_OBJECT(filesink), "location", "record.avi", NULL);
-
+
/* add elements */
- gst_bin_add_many (GST_BIN (pipeline), videosrc, glfilterapp,
+ gst_bin_add_many (GST_BIN (pipeline), videosrc, glfilterapp,
avenc_mpeg4, avimux, filesink, NULL);
-
+
/* link elements */
gboolean link_ok = gst_element_link_filtered(videosrc, glfilterapp, caps) ;
gst_caps_unref(caps) ;
@@ -240,22 +240,22 @@ gint main (gint argc, gchar *argv[])
g_warning("Failed to link glfilterapp to avenc_mpeg4!\n") ;
return -1 ;
}
- if (!gst_element_link_many(avenc_mpeg4, avimux, filesink, NULL))
+ if (!gst_element_link_many(avenc_mpeg4, avimux, filesink, NULL))
{
g_print ("Failed to link one or more elements!\n");
return -1;
}
-
+
/* run */
ret = gst_element_set_state (pipeline, GST_STATE_PLAYING);
- if (ret == GST_STATE_CHANGE_FAILURE)
+ if (ret == GST_STATE_CHANGE_FAILURE)
{
g_print ("Failed to start up pipeline!\n");
/* check if there is an error message with details on the bus */
GstMessage* msg = gst_bus_poll (bus, GST_MESSAGE_ERROR, 0);
- if (msg)
+ if (msg)
{
GError *err = NULL;
@@ -274,5 +274,4 @@ gint main (gint argc, gchar *argv[])
gst_object_unref (pipeline);
return 0;
-
}
diff --git a/win32/common/config.h b/win32/common/config.h
index 6a9ab673..dd4fefbc 100644
--- a/win32/common/config.h
+++ b/win32/common/config.h
@@ -86,7 +86,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-03"
+#define GST_PACKAGE_RELEASE_DATETIME "2014-05-21"
/* Define if static plugins should be built */
#undef GST_PLUGIN_BUILD_STATIC
@@ -631,7 +631,7 @@
#define PACKAGE_NAME "GStreamer Bad Plug-ins"
/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "GStreamer Bad Plug-ins 1.3.1"
+#define PACKAGE_STRING "GStreamer Bad Plug-ins 1.3.2"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "gst-plugins-bad"
@@ -640,7 +640,7 @@
#undef PACKAGE_URL
/* Define to the version of this package. */
-#define PACKAGE_VERSION "1.3.1"
+#define PACKAGE_VERSION "1.3.2"
/* directory where plugins are located */
#ifdef _DEBUG
@@ -680,7 +680,7 @@
#undef USE_EGL_RPI
/* Version number of package */
-#define VERSION "1.3.1"
+#define VERSION "1.3.2"
/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
significant byte first (like Motorola and SPARC, unlike Intel). */