aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian.droege@collabora.co.uk>2012-10-25 14:10:09 +0200
committerSebastian Dröge <sebastian.droege@collabora.co.uk>2012-10-25 14:10:09 +0200
commit6a5ec01275b38c0a0193bd344a5cd0954e49a448 (patch)
treedb7e1c5361b0f09434bcc31c85333b80e8518de4
parent2bc953e5221beebc755e4ec14d51d215652f2cf1 (diff)
Imported Upstream version 1.0.2upstream/1.0.2
-rw-r--r--ChangeLog2599
-rw-r--r--Makefile.in2
-rw-r--r--NEWS39
-rw-r--r--RELEASE65
-rw-r--r--common/Makefile.in2
-rw-r--r--common/m4/Makefile.in2
-rw-r--r--config.h.in9
-rwxr-xr-xconfigure670
-rw-r--r--configure.ac70
-rw-r--r--docs/Makefile.am3
-rw-r--r--docs/Makefile.in5
-rw-r--r--docs/libs/Makefile.in2
-rw-r--r--docs/libs/html/compiling.html2
-rw-r--r--docs/libs/html/gst-plugins-bad-libs-GstSurfaceConverter.html2
-rw-r--r--docs/libs/html/gst-plugins-bad-libs-GstVideoContextInterface.html6
-rw-r--r--docs/libs/html/gst-plugins-bad-libs-mpegvideoparser.html2
-rw-r--r--docs/libs/html/gst-plugins-bad-libs.devhelp210
-rw-r--r--docs/libs/html/index.html2
-rw-r--r--docs/plugins/Makefile.am1
-rw-r--r--docs/plugins/Makefile.in3
-rw-r--r--docs/plugins/gst-plugins-bad-plugins-docs.sgml3
-rw-r--r--docs/plugins/gst-plugins-bad-plugins-sections.txt28
-rw-r--r--docs/plugins/gst-plugins-bad-plugins.args56
-rw-r--r--docs/plugins/gst-plugins-bad-plugins.hierarchy3
-rw-r--r--docs/plugins/html/ch01.html8
-rw-r--r--docs/plugins/html/ch02.html3
-rw-r--r--docs/plugins/html/ch03.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-assrender.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-autoconvert.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-bulge.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-burn.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-camerabin.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-celtdec.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-celtenc.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-chromium.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-circle.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-coloreffects.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-cvdilate.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-cvequalizehist.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-cverode.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-cvlaplace.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-cvsmooth.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-cvsobel.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-dataurisrc.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-diffuse.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-dilate.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-dodge.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-dtmfdetect.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-dtmfsrc.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-dtsdec.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-dvbsrc.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-dvdspu.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-edgedetect.html8
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-eglglessink.html95
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-exclusion.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-faac.html8
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-faad.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-faceblur.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-facedetect.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-festival.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-fisheye.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-fpsdisplaysink.html8
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-gaussianblur.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-jpegparse.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-kaleidoscope.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-liveadder.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-marble.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-mimdec.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-mimenc.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-mirror.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-modplug.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-mpeg2enc.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-mpg123audiodec.html146
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-mplex.html8
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-opencvtextoverlay.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-pcapparse.html10
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-pinch.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-assrender.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-audiovisualizers.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-autoconvert.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-bayer.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-bz2.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-camerabin.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-celt.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-coloreffects.html6
-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.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-debugutilsbad.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-dirac.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-dtmf.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-dtsdec.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-dvb.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-dvdspu.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-faac.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-faad.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-festival.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-gaudieffects.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-geometrictransform.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-gsm.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-jpegformat.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-liveadder.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-mimic.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-mms.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-modplug.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-mpeg2enc.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegtsmux.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-mplex.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-opencv.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-pcapparse.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-rawparse.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-rtmp.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-rtpmux.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-scaletempo.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-sdp.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-shm.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-soundtouch.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-speed.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-voaacenc.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-voamrwbenc.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-zbar.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-pyramidsegment.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-rtmpsink.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-rtmpsrc.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-rtpdtmfmux.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-rtpdtmfsrc.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-rtpmux.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-scaletempo.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-sdpdemux.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-shmsink.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-shmsrc.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-solarize.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-spacescope.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-spectrascope.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-speed.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-sphere.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-square.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-stretch.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-synaescope.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-templatematch.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-tunnel.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-twirl.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-videoparse.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-voaacenc.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-voamrwbenc.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-waterripple.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-wavescope.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-zbar.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins.devhelp2356
-rw-r--r--docs/plugins/html/index.html8
-rw-r--r--docs/plugins/html/index.sgml12
-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-asfmux.xml2
-rw-r--r--docs/plugins/inspect/plugin-assrender.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-celt.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.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-dtmf.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-festival.xml2
-rw-r--r--docs/plugins/inspect/plugin-fieldanalysis.xml34
-rw-r--r--docs/plugins/inspect/plugin-flite.xml2
-rw-r--r--docs/plugins/inspect/plugin-fragmented.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.xml2
-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-jpegformat.xml2
-rw-r--r--docs/plugins/inspect/plugin-liveadder.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.xml2
-rw-r--r--docs/plugins/inspect/plugin-mpegpsdemux.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-opencv.xml2
-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-rtmp.xml2
-rw-r--r--docs/plugins/inspect/plugin-rtpmux.xml2
-rw-r--r--docs/plugins/inspect/plugin-rtpvp8.xml2
-rw-r--r--docs/plugins/inspect/plugin-scaletempo.xml2
-rw-r--r--docs/plugins/inspect/plugin-schro.xml2
-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-soundtouch.xml2
-rw-r--r--docs/plugins/inspect/plugin-spandsp.xml2
-rw-r--r--docs/plugins/inspect/plugin-speed.xml2
-rw-r--r--docs/plugins/inspect/plugin-subenc.xml55
-rw-r--r--docs/plugins/inspect/plugin-videoparsersbad.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-y4mdec.xml2
-rw-r--r--docs/plugins/inspect/plugin-zbar.xml2
-rw-r--r--ext/Makefile.am8
-rw-r--r--ext/Makefile.in6
-rw-r--r--ext/apexsink/Makefile.in2
-rw-r--r--ext/apexsink/gstapexsink.c4
-rw-r--r--ext/assrender/Makefile.in2
-rw-r--r--ext/assrender/gstassrender.c2
-rw-r--r--ext/bz2/Makefile.in2
-rw-r--r--ext/bz2/gstbz2dec.c2
-rw-r--r--ext/bz2/gstbz2enc.c2
-rw-r--r--ext/cdaudio/Makefile.in2
-rw-r--r--ext/cdaudio/gstcdaudio.c2
-rw-r--r--ext/celt/Makefile.in2
-rw-r--r--ext/celt/gstceltdec.c2
-rw-r--r--ext/celt/gstceltenc.c2
-rw-r--r--ext/chromaprint/Makefile.in2
-rw-r--r--ext/chromaprint/gstchromaprint.c2
-rw-r--r--ext/cog/Makefile.in2
-rw-r--r--ext/cog/gstcogdownsample.c2
-rw-r--r--ext/cog/gstcogmse.c2
-rw-r--r--ext/cog/gstcogscale.c2
-rw-r--r--ext/curl/Makefile.in2
-rw-r--r--ext/curl/gstcurlbasesink.c2
-rw-r--r--ext/curl/gstcurlfilesink.c2
-rw-r--r--ext/curl/gstcurlftpsink.c2
-rw-r--r--ext/curl/gstcurlhttpsink.c2
-rw-r--r--ext/curl/gstcurlsmtpsink.c8
-rw-r--r--ext/curl/gstcurltlssink.c2
-rw-r--r--ext/dc1394/Makefile.in2
-rw-r--r--ext/dc1394/gstdc1394.c4
-rw-r--r--ext/dirac/Makefile.in2
-rw-r--r--ext/dirac/gstdiracenc.cc2
-rw-r--r--ext/directfb/Makefile.in2
-rw-r--r--ext/directfb/dfbvideosink.c2
-rw-r--r--ext/dts/Makefile.in2
-rw-r--r--ext/dts/gstdtsdec.c5
-rw-r--r--ext/eglgles/Makefile.am19
-rw-r--r--ext/eglgles/Makefile.in960
-rw-r--r--ext/eglgles/TODO11
-rw-r--r--ext/eglgles/gsteglglessink.c2418
-rw-r--r--ext/eglgles/gsteglglessink.h226
-rw-r--r--ext/eglgles/video_platform_wrapper.c142
-rw-r--r--ext/eglgles/video_platform_wrapper.h64
-rw-r--r--ext/faac/Makefile.in2
-rw-r--r--ext/faac/gstfaac.c2
-rw-r--r--ext/faad/Makefile.in2
-rw-r--r--ext/faad/gstfaad.c2
-rw-r--r--ext/flite/Makefile.in2
-rw-r--r--ext/flite/gstflitetestsrc.c2
-rw-r--r--ext/gme/Makefile.in2
-rw-r--r--ext/gme/gstgme.c2
-rw-r--r--ext/gsettings/Makefile.in2
-rw-r--r--ext/gsettings/gstgsettingsaudiosink.c2
-rw-r--r--ext/gsettings/gstgsettingsaudiosrc.c2
-rw-r--r--ext/gsettings/gstgsettingsvideosink.c2
-rw-r--r--ext/gsettings/gstgsettingsvideosrc.c2
-rw-r--r--ext/gsm/Makefile.in2
-rw-r--r--ext/gsm/gstgsmdec.c2
-rw-r--r--ext/gsm/gstgsmenc.c2
-rw-r--r--ext/jasper/Makefile.in2
-rw-r--r--ext/jasper/gstjasperdec.c2
-rw-r--r--ext/jasper/gstjasperenc.c2
-rw-r--r--ext/kate/Makefile.in2
-rw-r--r--ext/kate/gstkatedec.c2
-rw-r--r--ext/kate/gstkateenc.c4
-rw-r--r--ext/kate/gstkateparse.c2
-rw-r--r--ext/kate/gstkatetag.c2
-rw-r--r--ext/kate/gstkatetiger.c2
-rw-r--r--ext/ladspa/Makefile.in2
-rw-r--r--ext/libmms/Makefile.in2
-rw-r--r--ext/libmms/gstmms.c2
-rw-r--r--ext/lv2/Makefile.in2
-rw-r--r--ext/mimic/Makefile.in2
-rw-r--r--ext/mimic/gstmimdec.c2
-rw-r--r--ext/mimic/gstmimenc.c2
-rw-r--r--ext/modplug/Makefile.in2
-rw-r--r--ext/modplug/gstmodplug.cc2
-rw-r--r--ext/mpeg2enc/Makefile.in2
-rw-r--r--ext/mpeg2enc/gstmpeg2enc.cc2
-rw-r--r--ext/mpg123/Makefile.in2
-rw-r--r--ext/mpg123/gstmpg123audiodec.c332
-rw-r--r--ext/mplex/Makefile.in2
-rw-r--r--ext/mplex/gstmplex.cc2
-rw-r--r--ext/musepack/Makefile.in2
-rw-r--r--ext/musepack/gstmusepackdec.c2
-rw-r--r--ext/musicbrainz/Makefile.in2
-rw-r--r--ext/musicbrainz/gsttrm.c2
-rw-r--r--ext/mythtv/Makefile.in2
-rw-r--r--ext/mythtv/gstmythtvsrc.c2
-rw-r--r--ext/nas/Makefile.in2
-rw-r--r--ext/nas/nassink.c2
-rw-r--r--ext/neon/Makefile.in2
-rw-r--r--ext/neon/gstneonhttpsrc.c2
-rw-r--r--ext/ofa/Makefile.in2
-rw-r--r--ext/ofa/gstofa.c2
-rw-r--r--ext/openal/Makefile.in2
-rw-r--r--ext/openal/gstopenalsink.c2
-rw-r--r--ext/openal/gstopenalsrc.c2
-rw-r--r--ext/opencv/Makefile.in2
-rw-r--r--ext/opencv/gstcvdilate.c2
-rw-r--r--ext/opencv/gstcvequalizehist.c2
-rw-r--r--ext/opencv/gstcverode.c2
-rw-r--r--ext/opencv/gstcvlaplace.c2
-rw-r--r--ext/opencv/gstcvsmooth.c2
-rw-r--r--ext/opencv/gstcvsobel.c2
-rw-r--r--ext/opencv/gstedgedetect.c2
-rw-r--r--ext/opencv/gstfaceblur.c2
-rw-r--r--ext/opencv/gstfacedetect.c2
-rw-r--r--ext/opencv/gstmotioncells.c2
-rw-r--r--ext/opencv/gstpyramidsegment.c2
-rw-r--r--ext/opencv/gsttemplatematch.c2
-rw-r--r--ext/opencv/gsttextoverlay.c5
-rw-r--r--ext/opus/Makefile.in2
-rw-r--r--ext/opus/gstopusdec.c4
-rw-r--r--ext/opus/gstopusenc.c2
-rw-r--r--ext/opus/gstopusparse.c2
-rw-r--r--ext/opus/gstrtpopusdepay.c2
-rw-r--r--ext/opus/gstrtpopuspay.c10
-rw-r--r--ext/resindvd/Makefile.in2
-rw-r--r--ext/resindvd/gstmpegdemux.c2
-rw-r--r--ext/resindvd/resindvdbin.c2
-rw-r--r--ext/resindvd/resindvdsrc.c2
-rw-r--r--ext/resindvd/rsndec.c4
-rw-r--r--ext/resindvd/rsnparsetter.c2
-rw-r--r--ext/rsvg/Makefile.in2
-rw-r--r--ext/rsvg/gstrsvgdec.c2
-rw-r--r--ext/rsvg/gstrsvgoverlay.c2
-rw-r--r--ext/rtmp/Makefile.in2
-rw-r--r--ext/rtmp/gstrtmpsink.c20
-rw-r--r--ext/rtmp/gstrtmpsrc.c2
-rw-r--r--ext/schroedinger/Makefile.in2
-rw-r--r--ext/schroedinger/gstschrodec.c2
-rw-r--r--ext/schroedinger/gstschroenc.c2
-rw-r--r--ext/sdl/Makefile.in2
-rw-r--r--ext/sdl/sdlaudiosink.c2
-rw-r--r--ext/sdl/sdlvideosink.c2
-rw-r--r--ext/sndfile/Makefile.in2
-rw-r--r--ext/sndfile/gstsfsink.c2
-rw-r--r--ext/sndfile/gstsfsrc.c2
-rw-r--r--ext/sndio/Makefile.in2
-rw-r--r--ext/sndio/sndiosink.c19
-rw-r--r--ext/sndio/sndiosrc.c20
-rw-r--r--ext/soundtouch/Makefile.in2
-rw-r--r--ext/soundtouch/gstbpmdetect.cc2
-rw-r--r--ext/soundtouch/gstpitch.cc6
-rw-r--r--ext/spandsp/Makefile.in2
-rw-r--r--ext/spandsp/gstspanplc.c2
-rw-r--r--ext/spc/Makefile.in2
-rw-r--r--ext/spc/gstspc.c2
-rw-r--r--ext/swfdec/Makefile.in2
-rw-r--r--ext/swfdec/gstswfdec.c2
-rw-r--r--ext/teletextdec/Makefile.in2
-rw-r--r--ext/teletextdec/gstteletextdec.c2
-rw-r--r--ext/timidity/Makefile.in2
-rw-r--r--ext/timidity/gsttimidity.c2
-rw-r--r--ext/timidity/gstwildmidi.c2
-rw-r--r--ext/voaacenc/Makefile.in2
-rw-r--r--ext/voaacenc/gstvoaacenc.c5
-rw-r--r--ext/voamrwbenc/Makefile.in2
-rw-r--r--ext/voamrwbenc/gstvoamrwbenc.c2
-rw-r--r--ext/wayland/Makefile.in2
-rw-r--r--ext/wayland/gstwaylandsink.c60
-rw-r--r--ext/wayland/gstwaylandsink.h2
-rw-r--r--ext/xvid/Makefile.in2
-rw-r--r--ext/xvid/gstxviddec.c2
-rw-r--r--ext/xvid/gstxvidenc.c2
-rw-r--r--ext/zbar/Makefile.in2
-rw-r--r--ext/zbar/gstzbar.c2
-rw-r--r--gst-libs/Makefile.in2
-rw-r--r--gst-libs/gst/Makefile.in2
-rw-r--r--gst-libs/gst/basecamerabinsrc/Makefile.in2
-rw-r--r--gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.c2
-rw-r--r--gst-libs/gst/codecparsers/Makefile.in2
-rw-r--r--gst-libs/gst/interfaces/Makefile.in2
-rw-r--r--gst-libs/gst/signalprocessor/Makefile.in2
-rw-r--r--gst-libs/gst/video/Makefile.in2
-rw-r--r--gst-plugins-bad.doap10
-rw-r--r--gst-plugins-bad.spec2
-rw-r--r--gst/Makefile.in2
-rw-r--r--gst/adpcmdec/Makefile.in2
-rw-r--r--gst/adpcmdec/adpcmdec.c2
-rw-r--r--gst/adpcmenc/Makefile.in2
-rw-r--r--gst/adpcmenc/adpcmenc.c2
-rw-r--r--gst/aiff/Makefile.in2
-rw-r--r--gst/aiff/aiffmux.c2
-rw-r--r--gst/aiff/aiffparse.c2
-rw-r--r--gst/asfmux/Makefile.in2
-rw-r--r--gst/asfmux/gstasfmux.c2
-rw-r--r--gst/asfmux/gstasfparse.c2
-rw-r--r--gst/asfmux/gstrtpasfpay.c2
-rw-r--r--gst/audiovisualizers/Makefile.in2
-rw-r--r--gst/audiovisualizers/gstspacescope.c2
-rw-r--r--gst/audiovisualizers/gstspectrascope.c2
-rw-r--r--gst/audiovisualizers/gstsynaescope.c2
-rw-r--r--gst/audiovisualizers/gstwavescope.c2
-rw-r--r--gst/autoconvert/Makefile.in2
-rw-r--r--gst/autoconvert/gstautoconvert.c2
-rw-r--r--gst/autoconvert/gstautovideoconvert.c2
-rw-r--r--gst/bayer/Makefile.in2
-rw-r--r--gst/bayer/gstbayer2rgb.c2
-rw-r--r--gst/bayer/gstrgb2bayer.c2
-rw-r--r--gst/camerabin2/Makefile.in2
-rw-r--r--gst/camerabin2/gstcamerabin2.c2
-rw-r--r--gst/camerabin2/gstviewfinderbin.c2
-rw-r--r--gst/camerabin2/gstwrappercamerabinsrc.c2
-rw-r--r--gst/cdxaparse/Makefile.in2
-rw-r--r--gst/cdxaparse/gstcdxaparse.c2
-rw-r--r--gst/cdxaparse/gstvcdparse.c2
-rw-r--r--gst/coloreffects/Makefile.in2
-rw-r--r--gst/coloreffects/gstchromahold.c2
-rw-r--r--gst/coloreffects/gstcoloreffects.c2
-rw-r--r--gst/dataurisrc/Makefile.in2
-rw-r--r--gst/dataurisrc/gstdataurisrc.c2
-rw-r--r--gst/dccp/Makefile.in2
-rw-r--r--gst/dccp/gstdccpclientsink.c2
-rw-r--r--gst/dccp/gstdccpclientsrc.c2
-rw-r--r--gst/dccp/gstdccpserversink.c2
-rw-r--r--gst/dccp/gstdccpserversrc.c2
-rw-r--r--gst/debugutils/Makefile.in2
-rw-r--r--gst/debugutils/fpsdisplaysink.c4
-rw-r--r--gst/debugutils/gstchecksumsink.c2
-rw-r--r--gst/debugutils/gstchopmydata.c2
-rw-r--r--gst/debugutils/gstcompare.c2
-rw-r--r--gst/debugutils/gstdebugspy.c2
-rw-r--r--gst/dtmf/Makefile.in2
-rw-r--r--gst/dtmf/gstdtmfdetect.c4
-rw-r--r--gst/dtmf/gstdtmfsrc.c5
-rw-r--r--gst/dtmf/gstrtpdtmfdepay.c2
-rw-r--r--gst/dtmf/gstrtpdtmfsrc.c2
-rw-r--r--gst/dvbsuboverlay/Makefile.in2
-rw-r--r--gst/dvbsuboverlay/gstdvbsuboverlay.c2
-rw-r--r--gst/dvdspu/Makefile.in2
-rw-r--r--gst/dvdspu/gstdvdspu.c4
-rw-r--r--gst/faceoverlay/Makefile.in2
-rw-r--r--gst/faceoverlay/gstfaceoverlay.c2
-rw-r--r--gst/festival/Makefile.in2
-rw-r--r--gst/festival/gstfestival.c2
-rw-r--r--gst/fieldanalysis/Makefile.in2
-rw-r--r--gst/fieldanalysis/gstfieldanalysis.c5
-rw-r--r--gst/freeverb/Makefile.in2
-rw-r--r--gst/freeverb/gstfreeverb.c2
-rw-r--r--gst/frei0r/Makefile.in2
-rw-r--r--gst/gaudieffects/Makefile.in2
-rw-r--r--gst/gaudieffects/gstburn.c2
-rw-r--r--gst/gaudieffects/gstchromium.c2
-rw-r--r--gst/gaudieffects/gstdilate.c2
-rw-r--r--gst/gaudieffects/gstdodge.c2
-rw-r--r--gst/gaudieffects/gstexclusion.c2
-rw-r--r--gst/gaudieffects/gstgaussblur.c2
-rw-r--r--gst/gaudieffects/gstsolarize.c2
-rw-r--r--gst/gdp/Makefile.in2
-rw-r--r--gst/geometrictransform/Makefile.in2
-rw-r--r--gst/geometrictransform/gstbulge.c2
-rw-r--r--gst/geometrictransform/gstcircle.c2
-rw-r--r--gst/geometrictransform/gstdiffuse.c2
-rw-r--r--gst/geometrictransform/gstfisheye.c2
-rw-r--r--gst/geometrictransform/gstkaleidoscope.c2
-rw-r--r--gst/geometrictransform/gstmarble.c2
-rw-r--r--gst/geometrictransform/gstmirror.c2
-rw-r--r--gst/geometrictransform/gstpinch.c2
-rw-r--r--gst/geometrictransform/gstrotate.c2
-rw-r--r--gst/geometrictransform/gstsphere.c2
-rw-r--r--gst/geometrictransform/gstsquare.c2
-rw-r--r--gst/geometrictransform/gststretch.c2
-rw-r--r--gst/geometrictransform/gsttunnel.c2
-rw-r--r--gst/geometrictransform/gsttwirl.c2
-rw-r--r--gst/geometrictransform/gstwaterripple.c2
-rw-r--r--gst/hdvparse/Makefile.in2
-rw-r--r--gst/hdvparse/gsthdvparse.c2
-rw-r--r--gst/hls/Makefile.am2
-rw-r--r--gst/hls/Makefile.in7
-rw-r--r--gst/hls/gsthlsdemux.c109
-rw-r--r--gst/hls/gsturidownloader.c4
-rw-r--r--gst/id3tag/Makefile.in2
-rw-r--r--gst/id3tag/gstid3mux.c2
-rw-r--r--gst/inter/Makefile.in2
-rw-r--r--gst/inter/gstinteraudiosink.c2
-rw-r--r--gst/inter/gstinteraudiosrc.c2
-rw-r--r--gst/inter/gstintersubsink.c2
-rw-r--r--gst/inter/gstintersubsrc.c2
-rw-r--r--gst/inter/gstintertest.c2
-rw-r--r--gst/inter/gstintervideosink.c2
-rw-r--r--gst/inter/gstintervideosrc.c2
-rw-r--r--gst/interlace/Makefile.in2
-rw-r--r--gst/interlace/gstinterlace.c2
-rw-r--r--gst/ivfparse/Makefile.in2
-rw-r--r--gst/ivfparse/gstivfparse.c2
-rw-r--r--gst/jp2kdecimator/Makefile.in2
-rw-r--r--gst/jp2kdecimator/gstjp2kdecimator.c2
-rw-r--r--gst/jpegformat/Makefile.in2
-rw-r--r--gst/jpegformat/gstjifmux.c2
-rw-r--r--gst/jpegformat/gstjpegparse.c2
-rw-r--r--gst/librfb/Makefile.in2
-rw-r--r--gst/librfb/gstrfbsrc.c2
-rw-r--r--gst/liveadder/Makefile.in2
-rw-r--r--gst/liveadder/liveadder.c2
-rw-r--r--gst/mpegdemux/Makefile.in2
-rw-r--r--gst/mpegdemux/gstmpegdemux.c473
-rw-r--r--gst/mpegdemux/gstmpegdemux.h9
-rw-r--r--gst/mpegpsmux/Makefile.in2
-rw-r--r--gst/mpegpsmux/mpegpsmux.c2
-rw-r--r--gst/mpegtsdemux/Makefile.in2
-rw-r--r--gst/mpegtsdemux/mpegtsbase.c2
-rw-r--r--gst/mpegtsdemux/pesparse.c10
-rw-r--r--gst/mpegtsdemux/tsdemux.c20
-rw-r--r--gst/mpegtsmux/Makefile.in2
-rw-r--r--gst/mpegtsmux/mpegtsmux.c21
-rw-r--r--gst/mpegtsmux/mpegtsmux.h2
-rw-r--r--gst/mpegtsmux/tsmux/Makefile.in2
-rw-r--r--gst/mve/Makefile.in2
-rw-r--r--gst/mve/gstmvedemux.c2
-rw-r--r--gst/mve/gstmvemux.c2
-rw-r--r--gst/mxf/Makefile.in2
-rw-r--r--gst/mxf/mxfdemux.c2
-rw-r--r--gst/mxf/mxfmux.c2
-rw-r--r--gst/nsf/Makefile.in2
-rw-r--r--gst/nsf/gstnsf.c2
-rw-r--r--gst/nuvdemux/Makefile.in2
-rw-r--r--gst/nuvdemux/gstnuvdemux.c2
-rw-r--r--gst/patchdetect/Makefile.in2
-rw-r--r--gst/patchdetect/gstpatchdetect.c2
-rw-r--r--gst/pcapparse/Makefile.in2
-rw-r--r--gst/pcapparse/gstirtspparse.c2
-rw-r--r--gst/pcapparse/gstpcapparse.c2
-rw-r--r--gst/pnm/Makefile.in2
-rw-r--r--gst/pnm/gstpnmdec.c2
-rw-r--r--gst/pnm/gstpnmenc.c2
-rw-r--r--gst/rawparse/Makefile.in2
-rw-r--r--gst/rawparse/gstaudioparse.c33
-rw-r--r--gst/rawparse/gstaudioparse.h1
-rw-r--r--gst/rawparse/gstvideoparse.c2
-rw-r--r--gst/real/Makefile.in2
-rw-r--r--gst/real/gstrealaudiodec.c2
-rw-r--r--gst/real/gstrealvideodec.c2
-rw-r--r--gst/removesilence/Makefile.in2
-rw-r--r--gst/removesilence/gstremovesilence.c2
-rw-r--r--gst/rtpmux/Makefile.in2
-rw-r--r--gst/rtpmux/gstrtpdtmfmux.c2
-rw-r--r--gst/rtpmux/gstrtpmux.c2
-rw-r--r--gst/rtpvp8/Makefile.in2
-rw-r--r--gst/rtpvp8/gstrtpvp8depay.c2
-rw-r--r--gst/rtpvp8/gstrtpvp8pay.c2
-rw-r--r--gst/scaletempo/Makefile.in2
-rw-r--r--gst/scaletempo/gstscaletempo.c122
-rw-r--r--gst/scaletempo/gstscaletempo.h3
-rw-r--r--gst/sdi/Makefile.in2
-rw-r--r--gst/sdi/gstsdidemux.c2
-rw-r--r--gst/sdi/gstsdimux.c2
-rw-r--r--gst/sdp/Makefile.in2
-rw-r--r--gst/sdp/gstsdpdemux.c2
-rw-r--r--gst/segmentclip/Makefile.in2
-rw-r--r--gst/segmentclip/gstaudiosegmentclip.c2
-rw-r--r--gst/segmentclip/gstvideosegmentclip.c2
-rw-r--r--gst/siren/Makefile.in2
-rw-r--r--gst/siren/gstsirendec.c2
-rw-r--r--gst/siren/gstsirenenc.c2
-rw-r--r--gst/smooth/Makefile.in2
-rw-r--r--gst/smooth/gstsmooth.c2
-rw-r--r--gst/speed/Makefile.in2
-rw-r--r--gst/speed/gstspeed.c2
-rw-r--r--gst/stereo/Makefile.in2
-rw-r--r--gst/stereo/gststereo.c2
-rw-r--r--gst/subenc/Makefile.in2
-rw-r--r--gst/subenc/gstsrtenc.c148
-rw-r--r--gst/subenc/gstwebvttenc.c157
-rw-r--r--gst/tta/Makefile.in2
-rw-r--r--gst/tta/gstttadec.c2
-rw-r--r--gst/tta/gstttaparse.c2
-rw-r--r--gst/videofilters/Makefile.in2
-rw-r--r--gst/videofilters/gstscenechange.c2
-rw-r--r--gst/videofilters/gstzebrastripe.c2
-rw-r--r--gst/videomeasure/Makefile.in2
-rw-r--r--gst/videomeasure/gstvideomeasure_collector.c2
-rw-r--r--gst/videomeasure/gstvideomeasure_ssim.c2
-rw-r--r--gst/videoparsers/Makefile.in2
-rw-r--r--gst/videoparsers/gstdiracparse.c2
-rw-r--r--gst/videoparsers/gsth263parse.c2
-rw-r--r--gst/videoparsers/gsth264parse.c2
-rw-r--r--gst/videoparsers/gstmpeg4videoparse.c8
-rw-r--r--gst/videoparsers/gstmpeg4videoparse.h1
-rw-r--r--gst/videoparsers/gstmpegvideoparse.c8
-rw-r--r--gst/videosignal/Makefile.in2
-rw-r--r--gst/videosignal/gstvideoanalyse.c2
-rw-r--r--gst/videosignal/gstvideodetect.c2
-rw-r--r--gst/videosignal/gstvideomark.c2
-rw-r--r--gst/vmnc/Makefile.in2
-rw-r--r--gst/vmnc/vmncdec.c2
-rw-r--r--gst/y4m/Makefile.in2
-rw-r--r--gst/y4m/gsty4mdec.c2
-rw-r--r--m4/Makefile.in2
-rw-r--r--pkgconfig/Makefile.in2
-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.gmobin1729 -> 1729 bytes
-rw-r--r--po/cs.po2
-rw-r--r--po/da.gmobin1886 -> 1886 bytes
-rw-r--r--po/da.po2
-rw-r--r--po/de.gmobin2118 -> 2118 bytes
-rw-r--r--po/de.po2
-rw-r--r--po/el.gmobin2022 -> 2022 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.pot4
-rw-r--r--po/hu.gmobin1710 -> 1710 bytes
-rw-r--r--po/hu.po2
-rw-r--r--po/id.gmobin1914 -> 1914 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.gmobin2109 -> 2109 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.gmobin1201 -> 1201 bytes
-rw-r--r--po/nb.po2
-rw-r--r--po/nl.gmobin2032 -> 2032 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.gmobin2045 -> 2045 bytes
-rw-r--r--po/pl.po2
-rw-r--r--po/pt_BR.gmobin1749 -> 1749 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.gmobin2509 -> 2509 bytes
-rw-r--r--po/ru.po2
-rw-r--r--po/sk.gmobin1775 -> 1775 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.gmobin2619 -> 2619 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.gmobin2626 -> 2626 bytes
-rw-r--r--po/uk.po2
-rw-r--r--po/vi.gmobin1787 -> 1787 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/Makefile.am18
-rw-r--r--sys/Makefile.in12
-rw-r--r--sys/acmenc/Makefile.in2
-rw-r--r--sys/acmenc/acmenc.c2
-rw-r--r--sys/acmmp3dec/Makefile.in2
-rw-r--r--sys/acmmp3dec/acmmp3dec.c2
-rw-r--r--sys/androidmedia/Makefile.am43
-rw-r--r--sys/androidmedia/Makefile.in996
-rw-r--r--sys/androidmedia/gstamc-constants.h227
-rw-r--r--sys/androidmedia/gstamc.c2830
-rw-r--r--sys/androidmedia/gstamc.h145
-rw-r--r--sys/androidmedia/gstamcaudiodec.c1230
-rw-r--r--sys/androidmedia/gstamcaudiodec.h99
-rw-r--r--sys/androidmedia/gstamcvideodec.c1656
-rw-r--r--sys/androidmedia/gstamcvideodec.h98
-rw-r--r--sys/applemedia/Makefile.in2
-rw-r--r--sys/avc/Makefile.in2
-rw-r--r--sys/avc/gstavcsrc.cpp2
-rw-r--r--sys/d3dvideosink/Makefile.in2
-rw-r--r--sys/decklink/Makefile.in2
-rw-r--r--sys/decklink/gstdecklinksink.cpp2
-rw-r--r--sys/decklink/gstdecklinksrc.cpp2
-rw-r--r--sys/directdraw/Makefile.in2
-rw-r--r--sys/directdraw/gstdirectdrawsink.c10
-rw-r--r--sys/directsound/Makefile.in2
-rw-r--r--sys/directsound/gstdirectsoundsrc.c210
-rw-r--r--sys/dshowdecwrapper/Makefile.in2
-rw-r--r--sys/dshowsrcwrapper/Makefile.in2
-rw-r--r--sys/dshowsrcwrapper/gstdshowaudiosrc.cpp2
-rw-r--r--sys/dshowsrcwrapper/gstdshowvideosrc.cpp2
-rw-r--r--sys/dshowvideosink/Makefile.in2
-rw-r--r--sys/dshowvideosink/dshowvideosink.cpp2
-rw-r--r--sys/dvb/Makefile.in2
-rw-r--r--sys/dvb/dvbbasebin.c2
-rw-r--r--sys/dvb/gstdvbsrc.c2
-rw-r--r--sys/fbdev/Makefile.in2
-rw-r--r--sys/fbdev/gstfbdevsink.c2
-rw-r--r--sys/linsys/Makefile.in2
-rw-r--r--sys/linsys/gstlinsyssdisink.c2
-rw-r--r--sys/linsys/gstlinsyssdisrc.c2
-rw-r--r--sys/opensles/Makefile.am23
-rw-r--r--sys/opensles/Makefile.in982
-rw-r--r--sys/opensles/opensles.c46
-rw-r--r--sys/opensles/openslesringbuffer.c997
-rw-r--r--sys/opensles/openslesringbuffer.h117
-rw-r--r--sys/opensles/openslessink.c289
-rw-r--r--sys/opensles/openslessink.h55
-rw-r--r--sys/opensles/openslessrc.c111
-rw-r--r--sys/opensles/openslessrc.h52
-rw-r--r--sys/osxvideo/Makefile.in2
-rw-r--r--sys/osxvideo/osxvideosrc.c2
-rw-r--r--sys/pvr2d/Makefile.in2
-rw-r--r--sys/pvr2d/gstpvrvideosink.c2
-rw-r--r--sys/qtwrapper/Makefile.in2
-rw-r--r--sys/shm/Makefile.in2
-rw-r--r--sys/shm/gstshmsink.c2
-rw-r--r--sys/shm/gstshmsrc.c2
-rw-r--r--sys/uvch264/Makefile.in2
-rw-r--r--sys/uvch264/gstuvch264_mjpgdemux.c2
-rw-r--r--sys/uvch264/gstuvch264_src.c2
-rw-r--r--sys/vcd/Makefile.in2
-rw-r--r--sys/vcd/vcdsrc.c2
-rw-r--r--sys/vdpau/Makefile.in2
-rw-r--r--sys/vdpau/basevideodecoder/Makefile.in2
-rw-r--r--sys/vdpau/gstvdp/Makefile.in2
-rw-r--r--sys/vdpau/gstvdpsink.c2
-rw-r--r--sys/vdpau/gstvdpvideopostprocess.c2
-rw-r--r--sys/vdpau/h264/gstvdph264dec.c2
-rw-r--r--sys/vdpau/mpeg/gstvdpmpegdec.c2
-rw-r--r--sys/vdpau/mpeg4/gstvdpmpeg4dec.c2
-rw-r--r--sys/wasapi/Makefile.in2
-rw-r--r--sys/wasapi/gstwasapisink.c2
-rw-r--r--sys/wasapi/gstwasapisrc.c2
-rw-r--r--sys/wininet/Makefile.in2
-rw-r--r--sys/wininet/gstwininetsrc.c2
-rw-r--r--sys/winks/Makefile.in2
-rw-r--r--sys/winks/gstksvideosrc.c2
-rw-r--r--sys/winscreencap/Makefile.in2
-rw-r--r--sys/winscreencap/gstdx9screencapsrc.c2
-rw-r--r--sys/winscreencap/gstgdiscreencapsrc.c2
-rw-r--r--tests/Makefile.in2
-rw-r--r--tests/check/Makefile.am12
-rw-r--r--tests/check/Makefile.in104
-rw-r--r--tests/check/elements/baseaudiovisualizer.c2
-rw-r--r--tests/check/elements/camerabin.c2
-rw-r--r--tests/check/elements/dataurisrc.c4
-rw-r--r--tests/check/elements/mpg123audiodec.c542
-rw-r--r--tests/examples/Makefile.in2
-rw-r--r--tests/examples/camerabin2/Makefile.in2
-rw-r--r--tests/examples/directfb/Makefile.in2
-rw-r--r--tests/examples/mxf/Makefile.in2
-rw-r--r--tests/examples/opencv/Makefile.in2
-rw-r--r--tests/examples/scaletempo/Makefile.in2
-rw-r--r--tests/examples/uvch264/Makefile.in2
-rw-r--r--tests/files/Makefile.am5
-rw-r--r--tests/files/Makefile.in7
-rw-r--r--tests/files/cbr_stream.mp3bin0 -> 3135 bytes
-rw-r--r--tests/files/stream.mp2bin0 -> 2925 bytes
-rw-r--r--tests/files/vbr_stream.mp3bin0 -> 3798 bytes
-rw-r--r--tests/icles/Makefile.in2
-rw-r--r--tools/Makefile.in2
-rwxr-xr-xtools/gst-app-maker2
-rwxr-xr-xtools/gst-element-maker2
-rw-r--r--win32/common/config.h2
795 files changed, 20640 insertions, 1785 deletions
diff --git a/ChangeLog b/ChangeLog
index 565bf7de..d29e2759 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,9 +1,2604 @@
+=== release 1.0.2 ===
+
+2012-10-25 Tim-Philipp Müller <tim@centricular.net>
+
+ * configure.ac:
+ releasing 1.0.2
+
+2012-10-24 23:40:20 +0200 Carlos Rafael Giani <dv@pseudoterminal.org>
+
+ * ext/opus/gstopusdec.c:
+ opusdec: fixed buffer unmapping bug
+ When the decoder received a NULL buffer, it tried to
+ unmap a not mapped buffer.
+ https://bugzilla.gnome.org/show_bug.cgi?id=686829
+
+2012-10-24 14:23:26 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ configure: require wayland >= 1.0.0
+ We have an API stable release now, require that.
+
+2012-10-24 13:41:00 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * tests/check/Makefile.am:
+ * tests/check/elements/.gitignore:
+ * tests/check/elements/mpg123audiodec.c:
+ * tests/files/Makefile.am:
+ tests: fix up mpg123 test a little
+ - dist input files
+ - fix sample leak
+ - simplify check for elements
+ - only run mpg123 test if mpg123 is available and selected
+ - fix build in uninstalled setup
+ https://bugzilla.gnome.org/show_bug.cgi?id=686595
+
+2012-10-24 12:30:10 +0200 Carlos Rafael Giani <dv@pseudoterminal.org>
+
+ * tests/check/Makefile.am:
+ * tests/check/elements/mpg123audiodec.c:
+ * tests/files/cbr_stream.mp3:
+ * tests/files/stream.mp2:
+ * tests/files/vbr_stream.mp3:
+ tets: add unit test for mpg123audiodec
+ https://bugzilla.gnome.org/show_bug.cgi?id=686595
+
+2012-10-24 00:36:42 +0200 Carlos Rafael Giani <dv@pseudoterminal.org>
+
+ * docs/plugins/gst-plugins-bad-plugins-docs.sgml:
+ * docs/plugins/gst-plugins-bad-plugins-sections.txt:
+ * ext/mpg123/gstmpg123audiodec.c:
+ mpg123: added gtkdoc section
+ https://bugzilla.gnome.org/show_bug.cgi?id=686595
+
+2012-10-24 00:22:05 +0200 Carlos Rafael Giani <dv@pseudoterminal.org>
+
+ * ext/mpg123/gstmpg123audiodec.c:
+ mpg123: fixed bug with last frame, disabled internal resampler & chatter
+ * The last MP3 frame wasn't being pushed when base class was draining
+ * Made sure mpg123 cannot ever use its (crude) internal resampler
+ * Disabled mpg123 stderr output
+ https://bugzilla.gnome.org/show_bug.cgi?id=686595
+
+2012-10-24 00:21:45 +0200 Carlos Rafael Giani <dv@pseudoterminal.org>
+
+ * ext/mpg123/gstmpg123audiodec.c:
+ mpg123: cleaned up comments, formatting, and logging lines
+ also replaced mpg123decoder->handle != NULL checks with asserts
+ https://bugzilla.gnome.org/show_bug.cgi?id=686595
+
+2012-10-24 11:34:32 +0200 Sebastian Rasmussen <sebrn@axis.com>
+
+ * ext/curl/gstcurlsmtpsink.c:
+ curlsmtpsink: add comment describing function
+ Fixes https://bugzilla.gnome.org/show_bug.cgi?id=686774
+
+2010-07-02 15:28:41 +0200 Thijs Vermeir <thijsvermeir@gmail.com>
+
+ * gst/mpegdemux/gstmpegdemux.c:
+ mpegdemux: check base_time before calculating new_start
+ https://bugzilla.gnome.org/show_bug.cgi?id=623387
+
+2012-10-23 14:33:21 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * gst/scaletempo/gstscaletempo.c:
+ scaletempo: Fix event leak
+
+2012-10-23 14:32:24 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * gst/scaletempo/gstscaletempo.c:
+ scaletempo: Fix timestamp tracking
+
+2012-10-23 14:06:37 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * gst/scaletempo/gstscaletempo.c:
+ scaletempo: Implement LATENCY query
+
+2012-10-23 13:39:17 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * gst/scaletempo/gstscaletempo.c:
+ * gst/scaletempo/gstscaletempo.h:
+ scaletempo: Store instance private data in the instance struct
+ Getting it over and over again via G_TYPE_INSTANCE_GET_PRIVATE()
+ is really slow.
+
+2012-10-23 10:07:01 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * gst/hls/Makefile.am:
+ hls: Link to $(LIBM) for isfinite()
+
+2012-10-22 21:41:20 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * ext/soundtouch/gstpitch.cc:
+ pitch: fix for start times > 0
+ Fixes buffering and playback of streams that start with
+ a non-0 timestamp in totem (which has a 'pitch' element
+ before pulsesink).
+ Example URI: http://lobostv.lobocast.org.es:8004/lobostv.ogg
+ Still breaks with chained oggs, on second chain.
+ https://bugzilla.gnome.org/show_bug.cgi?id=686391
+
+2012-10-22 12:08:41 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/opus/gstrtpopuspay.c:
+ opuspay: remove pointless caps serialization
+ Remove the caps serialization in the rtp caps. the spec nor the receiver
+ does anything with it.
+ Fixes https://bugzilla.gnome.org/show_bug.cgi?id=686547
+
+2012-10-22 10:45:17 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * configure.ac:
+ * gst/subenc/gstsrtenc.c:
+ * gst/subenc/gstwebvttenc.c:
+ subenc: port to 1.0
+
+2012-10-22 01:39:13 +1100 Jan Schmidt <thaytan@noraisin.net>
+
+ * gst/mpegtsmux/mpegtsmux.c:
+ * gst/mpegtsmux/mpegtsmux.h:
+ mpegtsmux: Don't make the same buffer writable twice.
+ Fixes Bug 686327 - mpegtsmux: fix refcount issue with input buffers
+
+2012-10-20 14:55:41 +0300 Sreerenj Balachandran <sreerenj.balachandran@intel.com>
+
+ * configure.ac:
+ * ext/wayland/gstwaylandsink.c:
+ * ext/wayland/gstwaylandsink.h:
+ wayland: update to wayland-protocol 0.99
+ https://bugzilla.gnome.org/show_bug.cgi?id=686520
+
+2012-10-18 22:23:07 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegdemux/gstmpegdemux.c:
+ mpegdemux: forward non-processed dvd events
+ ... such as notably dvd-spu-clut-change.
+
+2012-10-18 22:22:12 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegdemux/gstmpegdemux.c:
+ mpegdemux: segment event should be sent before gap event
+
+2012-10-19 09:59:10 +0000 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Don't try to render expose() if no caps are known yet
+
+2012-10-18 15:12:21 +0000 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Fix expose
+
+2012-10-19 01:03:51 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * gst/mpegtsdemux/pesparse.c:
+ tsdemux: fix program packet sequence counter parsing in PES header
+
+2012-10-19 00:47:45 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * gst/mpegtsdemux/pesparse.c:
+ tsdemux: fix some inconsequential PES header parsing issues
+ additional_copy_info: need to get rid of the highest
+ bit, not the lowest one
+ program_packet_sequence_counter: also need to get rid
+ of the highest bit instead of multiplying with a random
+ value
+ original_stuff_length: want to AND 0x3f to extract the
+ lowest 6 bits, not multiply by it.
+ None of these fields are actually used though, so these
+ should not have caused any issues.
+
+2012-10-17 15:54:32 +0300 Raimo Järvi <raimo.jarvi@gmail.com>
+
+ * gst/mpegtsdemux/pesparse.c:
+ tsdemux: Fix parsing P-STD_buffer in PES header
+ https://bugzilla.gnome.org/show_bug.cgi?id=686294
+
+2012-10-18 18:56:33 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * configure.ac:
+ wayland: don't try to build against 0.99 or later
+ The plugin needs updating for some API changes since 0.95.
+
+2012-10-18 01:47:57 +0200 Andoni Morales Alastruey <ylatuya@gmail.com>
+
+ * gst/mpegtsdemux/tsdemux.c:
+ tsdemux: fix potential crash dereferencing NULL program pointer
+ https://bugzilla.gnome.org/show_bug.cgi?id=686358
+
+2012-10-18 15:06:37 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ opensles: Only check for the main opensles header
+
+2012-10-18 14:38:01 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ eglglessink: Put into the not-ported plugins list
+
+2012-10-18 14:25:05 +0200 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * docs/plugins/Makefile.am:
+ * docs/plugins/gst-plugins-bad-plugins-docs.sgml:
+ * docs/plugins/gst-plugins-bad-plugins-sections.txt:
+ eglglessink: Documentation: Hook eglglessink documentation in
+
+2012-10-18 14:09:25 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Make compilable on desktop Linux with MESA too
+
+2012-10-18 14:07:07 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ * ext/Makefile.am:
+ * ext/eglgles/Makefile.am:
+ eglglessink: Integrate into the build system
+ Conflicts:
+ ext/Makefile.am
+
+2012-10-18 10:49:44 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Fix debug output
+
+2012-10-18 10:32:47 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Also clear the surface once when the buffer content is preserved
+
+2012-10-18 10:20:26 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ * ext/eglgles/gsteglglessink.h:
+ eglglessink: Only draw black borders if the default swap behaviour of the surface is to destroy the buffer
+
+2012-10-18 09:37:56 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Remove unused label
+
+2012-10-18 02:26:17 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Factor display region reset to its own func
+
+2012-10-18 01:45:51 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Always Reset display_region.* at EGL/GLES ctx wipe
+
+2012-10-18 01:36:49 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Factor ELG/GLES context cleanup into its own func
+
+2012-10-18 00:33:26 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ * ext/eglgles/gsteglglessink.h:
+ eglglessink: Drop drafted fast rendering path logic
+
+2012-10-17 15:50:08 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.h:
+ eglglessink: Also update header file
+
+2012-10-17 15:37:53 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Provide the texture positions to the shader on every frame too
+
+2012-10-17 15:04:11 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Draw black borders and also use a single GL buffer for all vertices
+ Fixes weird artifacts outside the video frame on
+ Qualcomm Snapdragon chipsets and should be faster
+ than glClear() on the complete area all the time.
+
+2012-10-17 12:49:44 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Fix memory leak
+
+2012-10-17 10:47:14 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Remove useless debug output added for debugging earlier
+
+2012-10-17 10:08:10 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Make window setting/handling a bit more threadsafe
+
+2012-10-17 09:59:05 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Print window handle after setting it
+
+2012-10-16 17:50:03 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Move DAR query & store to surface init
+ The DAR (display's pixel aspect ratio) should remain a
+ constant at runtime so there's no point on repeatedly
+ query and store this value. Doing it at surface setup
+ should be enough. As an added bonus this change should
+ make rendering a bit faster.
+
+2012-10-16 17:35:18 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Don't signal the GCond too often
+
+2012-10-16 17:05:02 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ * ext/eglgles/gsteglglessink.h:
+ eglglessink: Add myself as author
+
+2012-10-16 16:25:05 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Make sure to always reset the display region in start()
+
+2012-10-16 16:23:02 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.h:
+ eglglessink: Also commit missing changes to the header file
+
+2012-10-16 16:18:01 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/Makefile.am:
+ eglglessink: Also include $(GST_BASE_CFLAGS)
+
+2012-10-16 16:12:48 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Fix race condition
+
+2012-10-16 15:40:11 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Refactor rendering and all context specific GL things into a separate thread
+ Also fixes some threading related problems.
+
+2012-10-16 14:39:43 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Re-add accidentially reverted commit
+
+2012-10-16 14:15:58 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Remove unneeded flow_lock
+ Use the object lock in the few places necessary, everything
+ else is protected by other things already.
+ Also store the context directly inside the instance struct
+ instead of allocating some memory for it.
+
+2012-10-16 11:53:08 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Fix debug output and constant names
+
+2012-10-16 11:51:13 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: start()/stop() is called in READY<->NULL in basesink
+ But this should be called in PAUSED<->READY.
+
+2012-10-15 13:44:29 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Fix for outbound DAR reported by EGL
+ Some EGL implementations don't honor the spec
+ requirement of returning DAR values as w/h *
+ EGL_DISPLAY_SCALING.
+ This changeset:
+ - Fixes rendering on the Samsung Galaxy III
+ - Fixes wrong check on required 1.2 EGL version
+ - Reorders the code a bit.
+
+2012-10-15 13:38:15 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Fix crashes if there are no EGL or GLES extensions
+
+2012-10-10 12:42:47 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.h:
+ eglglessink: Fix crash at element instantiation
+
+2012-10-10 12:26:04 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: GLSL: Save one extra texture lookup
+
+2012-10-10 12:22:24 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: GLSL: Minor named index access tweak xyz -> rgb
+
+2012-10-10 12:18:27 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: GLSL: Assorted fixes to optimized code
+ - Don't copy over opos as it's already a vec2
+ - Fix index order access at frag_YUY2_YVYU_UYVY_prog
+
+2012-10-10 11:50:28 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: GLSL: Planar YUV converters optimization
+ - Use consts for the transform's offset and cofficients values
+ - Use dot product instead of mult and add
+ - Avoid unneeded texture lookups
+
+2012-10-10 11:05:04 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ Geglglessink: LSL: Optimize frag_YUY2_YVYU_UYVY_prog
+ - Avoid repeatedly performing the texture lookup
+ - Use consts for the transform's offset and cofficients values
+ - Use the dot product instead of the explicit mult and add
+
+2012-10-10 03:02:21 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: GLSL: Drop unneded nxy vec2
+
+2012-10-10 02:16:35 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Fix missing double quotation mark in GLSL code
+
+2012-10-10 02:04:18 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: GLSL: Optimize frag_AYUV_prog
+ - Avoid repeatedly performing the texture lookup
+ - Use consts for the transform's offset and cofficients values
+ - Use the dot product instead of the explicit mult and add
+
+2012-10-09 23:35:22 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.h:
+ eglglessink: Documentation: GstEglGlesSink struct
+
+2012-10-09 23:04:05 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.h:
+ eglglessink: Documentation: GstEglGlesBuffer struct (DRAFT)
+
+2012-10-09 22:54:48 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.h:
+ eglglessink: Documentation: GstEglGlesImageFmt struct
+
+2012-10-09 22:40:19 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.h:
+ eglglessink: Documentation: GstEglGlesRenderContext struct
+
+2012-10-09 17:00:52 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ * ext/eglgles/gsteglglessink.h:
+ eglglessink: Assorted doc and reordering fixes
+
+2012-10-09 16:25:46 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Documentation: Element properties
+ Brief explanatory comments plus some reordering
+ to group default setting of properties and runtime
+ flags values.
+
+2012-10-09 17:20:12 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Add support for YVYU
+
+2012-10-09 11:48:09 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Documentation: GLSL Shaders
+ Brief explanatory comments plus some rerdering
+ to group packed/planar converters.
+
+2012-10-09 11:00:24 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Documentation: Element overview
+
+2012-10-08 12:10:25 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Refactor REORDER shader.
+ Avoid unneededly calling texture2D() 3 consecutive times.
+
+2012-10-04 15:47:54 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Fix handling of caps changes by only releasing what needs to be released
+ And not terminating the display connection
+
+2012-10-04 02:15:24 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Move display_region reset to locked section
+
+2012-10-04 01:56:10 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Reset display_region dims at caps renego
+
+2012-10-04 01:33:31 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Cosmetics
+
+2012-10-04 01:29:40 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Don't access local value from struct
+
+2012-10-03 23:41:52 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Terminate display connection at caps renego
+
+2012-10-02 17:56:14 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Cosmetics
+
+2012-10-03 12:32:38 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Only attach the context once to the streaming thread
+
+2012-10-03 10:53:25 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Make the context current for the thread and unbind it again around every use
+ This fixes some crashes and leaking of our context into other
+ OpenGL code on the same thread.
+
+2012-10-02 17:29:26 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Improve cleanup
+
+2012-10-02 15:46:03 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Remove unused label
+
+2012-10-02 15:42:02 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Allow setting a NULL handle
+
+2012-10-02 09:48:15 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Revert "Do not update_surface_dims() once per frame"
+ This reverts commit 82103376ede2bc7c63dd699f5982168660f67852.
+ We have to update the surface dimensions on every frame to
+ make sure that we get notified about updates. This happens
+ for example if the Android window gets re-layouted because
+ a widget takes more space than before.
+
+2012-10-02 01:43:35 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Do not update_surface_dims() once per frame
+ And.. Upgrade debug message to warging on weird DAR.
+ Correct fix to avoid spaming with this message
+ once per each frame is avoid calling update_surface_dims()
+ at render_and_display(). This is handled at egl surface
+ init.
+
+2012-10-01 16:36:14 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: And downgrade another warning too
+
+2012-10-01 16:14:39 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Downgrade GST_WARNING to GST_DEBUG
+
+2012-10-01 09:44:23 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Add some {} to if statements make them work as expected
+
+2012-09-30 23:07:48 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Drop stale defines for max frame size
+
+2012-09-30 23:06:19 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Small commentary fixes here an there
+
+2012-09-28 11:48:23 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Avoid setting height or width twice
+
+2012-09-27 01:18:37 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ * ext/eglgles/gsteglglessink.h:
+ eglglessink: Use PAR/DAR to set viewport
+
+2012-09-27 14:28:05 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Correctly resize if the surface dimensions change
+
+2012-09-27 14:08:22 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Update surface dimensions on every buffer
+
+2012-09-27 14:02:17 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ * ext/eglgles/gsteglglessink.h:
+ eglglessink: More consistent naming of shader related variables
+
+2012-09-27 13:57:14 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ * ext/eglgles/gsteglglessink.h:
+ eglglessink: Some variable name cleanup
+
+2012-09-27 13:53:59 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ * ext/eglgles/gsteglglessink.h:
+ eglglessink: Remove default-width/height properties
+ These are completely unneeded
+
+2012-09-25 13:32:40 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Fix double free()
+
+2012-09-25 09:06:04 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Don't leak EGL/ES render context
+
+2012-09-25 01:39:21 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ * ext/eglgles/gsteglglessink.h:
+ eglglessink: Put EGL/GLES context vars on their own struct
+
+2012-09-24 11:19:32 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/TODO:
+ eglglessink: Small TODO reformatting
+
+2012-09-24 10:23:28 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/TODO:
+ eglglessink: Add TODO file
+
+2012-09-24 14:43:50 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Correctly implement ::expose()
+ We don't need the past buffer for this, the old one is still available
+ as texture and we just need to draw our rectangle again.
+
+2012-09-24 13:48:19 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ * ext/eglgles/gsteglglessink.h:
+ eglglessink: Allow setting another window for the next time we reconfigure everything
+
+2012-09-24 12:36:12 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ * ext/eglgles/gsteglglessink.h:
+ eglglessink: Also unref current caps after usage
+
+2012-09-24 12:32:16 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Implement support for caps changes
+
+2012-09-24 12:27:28 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ * ext/eglgles/gsteglglessink.h:
+ eglglessink: More cleanup and making the element reusable
+
+2012-09-24 12:05:22 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Properly init/release resources when going from NULL->READY and the other way around
+
+2012-09-24 11:48:59 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ * ext/eglgles/gsteglglessink.h:
+ eglglessink: Generate the sink caps exactly once
+
+2012-09-24 11:17:25 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Fix code style a bit to stop confusing indent
+
+2012-09-24 11:15:02 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Fix support for YUY2 and UYVY
+
+2012-09-24 11:01:17 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Some property cleanup
+
+2012-09-24 10:45:07 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Add support for the remaining RGB formats
+
+2012-09-24 10:23:07 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Add support for Y444, Y42B and Y41B, just because it's so easy
+
+2012-09-24 10:02:28 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Add some simple TODOs
+
+2012-09-24 01:08:22 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Lock while altering display region coords
+
+2012-09-24 00:27:23 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Fix _get_compat_format_from_caps() logic
+ It's a getter so it shouldn't messing with the sink context.
+ Adding insult to injury it was setting selected_fmt without
+ locking.
+ The associated changes to the buffer functions are merely
+ make-it build fixes. Those functions are barely drafted
+ and in WIP state.
+
+2012-09-23 23:07:29 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Drop unneded initial set to NULL
+
+2012-09-23 22:33:58 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ * ext/eglgles/gsteglglessink.h:
+ eglglessink: Minor formatting and comment fixes
+
+2012-09-21 12:12:24 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ * ext/eglgles/gsteglglessink.h:
+ eglglessink: Clean-up gl/egl allocations at _stop()
+ Also, conditionaly destroy window if the sink created its own.
+
+2012-09-21 17:08:44 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Add support for NV12 and NV21
+ Also YUY2 and UYVY but this is disabled for now as it
+ doesn't work completely yet. Something is wrong with
+ the chroma.
+
+2012-09-21 15:44:07 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ * ext/eglgles/gsteglglessink.h:
+ eglglessink: Add support for I420 and YV12 color formats
+
+2012-09-21 14:05:43 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Preparations for supporting multiple textures for more YUV formats
+
+2012-09-21 13:42:41 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ * ext/eglgles/gsteglglessink.h:
+ eglglessink: Use the attrib locations as really used inside the shader
+
+2012-09-21 12:53:00 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Really decouple vertex and texture positions in the shader
+
+2012-09-21 12:45:29 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ * ext/eglgles/gsteglglessink.h:
+ eglglessink: Decouple texture and vertex positions
+
+2012-09-21 12:14:20 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Reorder vertex value order to make a bit more sense
+
+2012-09-21 01:09:11 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ * ext/eglgles/gsteglglessink.h:
+ eglglessink: Handle frame scaling to fill surface
+
+2012-09-21 00:09:06 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ * ext/eglgles/gsteglglessink.h:
+ eglglessink: Draft set_render_rectangle() from the xOverlay interface
+
+2012-09-20 22:50:31 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Remove stale comment
+
+2012-09-20 22:41:10 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Move VBO setup to setcaps
+
+2012-09-20 22:11:08 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Don't do context ops at render
+ We don't need to repeatedly call
+ eglMakeCurrent() while using the
+ same context anyway.
+
+2012-09-20 22:01:20 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Don't clear surface color at render
+
+2012-09-20 17:22:13 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Rename shader variables to make more sense
+
+2012-09-20 17:14:21 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Add support for AYUV
+
+2012-09-20 17:02:03 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Reorder caps a bit to make more sense
+
+2012-09-20 16:50:40 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Set rank to PRIMARY
+
+2012-09-20 16:25:33 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Add support for RGBA
+
+2012-09-20 16:21:55 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Correctly generated caps for the supported formats
+
+2012-09-20 16:08:28 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Add ::get_caps() vfunc that returns the actually supported caps
+
+2012-09-20 15:56:56 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Also require a configuration with EGL_SURFACE_TYPE containing EGL_WINDOW_BIT
+
+2012-09-20 14:50:23 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Fix compiler warnings
+
+2012-09-19 19:26:54 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Clear surface to black by default
+
+2012-09-19 19:23:50 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Make sure we get a config we can use with GLES2
+
+2012-09-19 19:12:30 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: set_window_handle() has been tested to work now
+
+2012-09-19 12:29:13 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Avoid autoscaling by default
+
+2012-09-18 14:58:43 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Avoid repeatedly setting 2D resizing params
+ Moved to initial texture setup so it hapens
+ just once while on the same context.
+
+2012-09-18 12:04:20 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Avoid initializing EGL at _set_window_handle()
+ _start() should take care of that.
+ This change asumes _setcaps() will
+ happen always after _start() is
+ done.
+
+2012-09-18 10:43:38 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Don't ask for a window if we already have one
+
+2012-09-18 10:31:26 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ * ext/eglgles/gsteglglessink.h:
+ eglglessink: Fix EGL attribs var naming
+
+2012-09-18 02:32:25 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Fix slow path rendering on Android
+ Specify missing and mandatory params for npot
+ Before calling glTexImage2D.
+ In particular, _WRAP_T and _WRAP_S need to be
+ set to GL_CLAMP_TO_EDGE to avoid all-black
+ rendering with npot sized frames.
+
+2012-09-18 00:51:36 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Add test on usable eglconfigs returned
+
+2012-09-17 23:05:29 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Drop stale error_locked label
+
+2012-09-17 23:04:05 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Cleanup stale code comments
+
+2012-09-17 18:00:16 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ * ext/eglgles/gsteglglessink.h:
+ eglglessink: GlViewPort() should use actual surface size
+
+2012-09-17 17:21:26 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Avoid reiniting EGL after the first time
+
+2012-09-17 13:44:09 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Use correct template caps
+
+2012-09-17 12:54:05 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Fix missing texture setup bits
+
+2012-09-17 11:57:24 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Add error checking on eglSwapBuffers
+
+2012-09-17 11:40:49 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Fix stale&wrong 0.5 alpha blend
+
+2012-09-17 10:56:14 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Add float precision specifier to fragment shader
+ This is required by GLES and fixes compilation of fragment
+ shader prog.
+
+2012-09-17 10:47:39 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Add log reporting at shader compilation failure
+
+2012-09-16 22:43:38 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Add some missing checks on shader ops
+ - Check whether there is shader compiler support
+ and bail out otherwise.
+ - Add checks on compile and linking ops
+
+2012-09-14 20:49:48 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ * ext/eglgles/gsteglglessink.h:
+ eglglessink: Fix setup chain logic
+ Mostly a procedural reordering. Idea is to avoid
+ trying to setup a surface without a display.This
+ change relies on the asumption that:
+ 1.- set_window_handle() can happen at any time
+ 2.- setcaps will never get called before _start()
+ is done.
+ If both conditions are meet the new procedure
+ should work as expected.
+
+2012-09-14 15:59:05 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: WIP: Reorder locking
+
+2012-09-13 23:23:08 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Fix xOverlay logic
+ Several fixes dealing with correct window
+ creation and set_handle() ops. Tested on
+ X11/mesa with internal window creation.
+
+2012-09-13 00:55:33 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Actually test EGL configs before claiming support
+
+2012-09-13 00:11:49 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Caps nego EGL fixes
+ - Fix alloc lol on format list: Asked for 2 slices and used 3.
+ - Reordered display & context init logic to prepare for actual
+ config checking before claiming support for a given format.
+ Change deals basically with setting up EGL display at start()
+ and choose an EGL config only at setcaps time.
+
+2012-09-12 22:11:39 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ * ext/eglgles/gsteglglessink.h:
+ eglglessink: Caps nego. Start extending RGB support to a set.
+
+2012-09-12 16:19:33 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/eglgles/Makefile.am:
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Fix build of static plugin
+
+2012-09-12 09:28:22 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Drop wrong format test on _setcaps (draft leftover)
+
+2012-09-11 13:54:09 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ * ext/eglgles/gsteglglessink.h:
+ eglglessink: Support RGB24 by default
+
+2012-09-11 13:51:25 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Instrument EGL error reporting
+
+2012-09-11 12:04:30 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Correctly return GstFlowReturn from render_and_display()
+
+2012-09-11 11:51:28 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Move VBO setup to it's own function
+
+2012-09-11 10:20:16 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Fix render_and_display logic
+ Switch procedure according to enabled rendering path
+
+2012-09-10 22:59:57 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ eglglessink: Fix sample launch line with disabled window creation
+
+2012-09-10 22:41:52 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/gsteglglessink.c:
+ * ext/eglgles/gsteglglessink.h:
+ eglglessink: Rename stale android leftover
+
+2012-09-10 20:22:22 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/Makefile.am:
+ * ext/eglgles/gsteglglessink.c:
+ * ext/eglgles/gsteglglessink.h:
+ * ext/eglgles/gstvidroidsink.c:
+ * ext/eglgles/gstvidroidsink.h:
+ eglglessink: Move eglgles Sink to ext/ #2
+
+2012-09-10 20:00:57 -0300 Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+
+ * ext/eglgles/Android.mk:
+ * ext/eglgles/Makefile.am:
+ * ext/eglgles/gstvidroidsink.c:
+ * ext/eglgles/gstvidroidsink.h:
+ * ext/eglgles/video_platform_wrapper.c:
+ * ext/eglgles/video_platform_wrapper.h:
+ eglglessink: Move eglgles Sink to ext/
+
+2012-10-18 14:03:33 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ opensles: Add the opensles plugin to the list of not ported plugins
+
+2012-10-18 13:56:55 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ * sys/Makefile.am:
+ * sys/opensles/Makefile.am:
+ opensles: Integrate into build system
+
+2012-10-12 10:08:59 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * sys/opensles/openslesringbuffer.c:
+ openslessink: Return 0 delay if the player object is in PAUSED state
+
+2012-10-01 12:54:15 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * sys/opensles/openslesringbuffer.c:
+ * sys/opensles/openslesringbuffer.h:
+ opensles: fixes noise on seekeing
+
+2012-10-01 11:46:50 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * sys/opensles/openslesringbuffer.c:
+ opensles: chain up on _clear_all
+
+2012-10-01 11:14:24 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * sys/opensles/openslesringbuffer.c:
+ * sys/opensles/openslesringbuffer.h:
+ opensles: implement the ringbuffer clear_all vmethod too
+
+2012-10-01 10:59:08 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * sys/opensles/openslesringbuffer.c:
+ * sys/opensles/openslessrc.c:
+ opensles: initial attempt to reduce the src latency
+
+2012-09-29 19:00:13 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * sys/opensles/openslesringbuffer.c:
+ * sys/opensles/openslesringbuffer.h:
+ * sys/opensles/openslessink.c:
+ * sys/opensles/openslessrc.c:
+ opensles: sprinkle comments and cosmetic fixes
+
+2012-09-28 15:10:19 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * sys/opensles/openslesringbuffer.c:
+ opensles: check for device outputs in the mixer
+
+2012-09-28 14:39:01 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * sys/opensles/openslessink.c:
+ opensles: drop 48kHz sample rate
+ OpenSL ES implementation in Android is just a 'facade' API on top of
+ AudioFlinger which will downsample 48kHz into 44.1kHz before
+ delivering the audio to the underlaying hardware.
+ We found that it suffer some sort of underrun when the downsample
+ enters in action so relay on our good resampler to take care of that
+ and fix the clicks issue. And get an extra bonus of a lower latency.
+
+2012-09-27 19:24:50 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * sys/opensles/openslessink.c:
+ opensles: change the defaults to use 20 ms ringbuffer segments
+ In my nexus7 seems that the internal min buffer size is 20 ms so make
+ our segments match.
+
+2012-09-27 18:33:09 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * sys/opensles/openslesringbuffer.c:
+ * sys/opensles/openslesringbuffer.h:
+ opensles: ensure that we register the callback only in STOPPED
+ Fixes the error registering the callback on the PLAYING -> PAUSE ->
+ PLAYING state change sequence.
+
+2012-09-27 17:46:27 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * sys/opensles/openslesringbuffer.c:
+ opensles: cap queue size
+ Just in case we want to tweak the sink behaviour with buffer-time and
+ latency-time properties cap the queue size to something reasonable.
+
+2012-09-27 17:32:14 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * sys/opensles/openslessink.c:
+ opensles: sink to provide the audioclock by default
+
+2012-09-27 17:27:24 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * sys/opensles/openslesringbuffer.c:
+ opensles: only drain half ringbuffer on start
+ At start drain half ringbuffer into the OpenSL so the writting/reading
+ pointers will start at half ringbuffer distance.
+
+2012-09-27 14:52:59 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * sys/opensles/openslesringbuffer.c:
+ opensles: monitor some player events
+
+2012-09-27 07:22:47 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * sys/opensles/openslesringbuffer.c:
+ * sys/opensles/openslesringbuffer.h:
+ opensles: rework around the _delay function
+
+2012-09-27 05:40:46 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * sys/opensles/openslesringbuffer.c:
+ * sys/opensles/openslesringbuffer.h:
+ opensles: implement _delay function
+
+2012-09-27 04:00:28 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * sys/opensles/openslesringbuffer.c:
+ * sys/opensles/openslesringbuffer.h:
+ opensles: refactor to behave more like other sinks
+ Reflect the queue in our own data buffer.
+ Drop the _commit hook that wasn't usefull.
+ Don't mess with the segsize/segtotal.
+
+2012-09-26 14:01:17 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * sys/opensles/openslesringbuffer.c:
+ opensles: read player position and show it in the log
+
+2012-09-26 12:50:42 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * sys/opensles/openslessink.c:
+ opensles: do not provide a clock in the sink element.
+
+2012-09-26 12:32:44 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * sys/opensles/openslesringbuffer.c:
+ opensles: rework on start/stop operations and callback function handling
+
+2012-09-26 12:09:04 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * sys/opensles/openslessink.c:
+ opensles: fixes 8 bit format which is unsigned on android.
+
+2012-09-25 19:25:01 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * sys/opensles/openslesringbuffer.c:
+ opensles: attempt to reduce playback latency
+
+2012-09-25 18:04:27 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * sys/opensles/openslesringbuffer.c:
+ * sys/opensles/openslesringbuffer.h:
+ opensles: drop _buffer_clear calls and refactor to a shared _enqueue_cb
+
+2012-09-21 17:04:14 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * sys/opensles/openslesringbuffer.c:
+ opensles: use 0.25s segments in the sink to lower latency
+
+2012-09-21 16:11:42 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * sys/opensles/openslesringbuffer.c:
+ * sys/opensles/openslessrc.c:
+ opensles: finish remaining bits for source element.
+
+2012-09-21 14:15:12 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * sys/opensles/openslessink.c:
+ opensles: attempt to query device for capabilities
+
+2012-09-20 18:41:50 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * sys/opensles/openslesringbuffer.c:
+ * sys/opensles/openslesringbuffer.h:
+ * sys/opensles/openslessink.c:
+ * sys/opensles/openslessink.h:
+ * sys/opensles/openslessrc.c:
+ opensles: add the mute property and handle volume/mute changes on the fly
+
+2012-09-20 18:04:29 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * sys/opensles/openslesringbuffer.c:
+ * sys/opensles/openslesringbuffer.h:
+ * sys/opensles/openslessink.c:
+ * sys/opensles/openslessink.h:
+ opensles: make the volume property actually work
+
+2012-09-20 14:16:25 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * sys/opensles/openslesringbuffer.c:
+ * sys/opensles/openslesringbuffer.h:
+ opensles: rework on the ringbufffer to properly clear segments
+ Make the segments bigger (1 second) as it seems to be the minimum size
+ we need to not introduce noise.
+ Sink works in my nexus 7 with rates from 8000 to 44100 and some noise
+ can be noticed on higger sample rates.
+
+2012-09-20 11:50:50 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * sys/opensles/opensles.c:
+ * sys/opensles/openslesringbuffer.c:
+ * sys/opensles/openslesringbuffer.h:
+ * sys/opensles/openslessink.c:
+ * sys/opensles/openslessink.h:
+ * sys/opensles/openslessrc.c:
+ * sys/opensles/openslessrc.h:
+ opensles: fixes the license headers
+
+2012-09-20 10:41:50 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * sys/opensles/openslesringbuffer.c:
+ opensles: produces expected output until ringbuffer wraps
+ Add some log messages.
+ Fixed a bit the _player_cb function and properly advance reding in the
+ ringbuffer.
+ Still produces noise when the ringbuffer wraps.
+
+2012-09-19 18:11:54 +0200 Josep Torra <n770galaxy@gmail.com>
+
+ * sys/opensles/Makefile.am:
+ * sys/opensles/opensles.c:
+ * sys/opensles/openslesringbuffer.c:
+ * sys/opensles/openslesringbuffer.h:
+ * sys/opensles/openslessink.c:
+ * sys/opensles/openslessink.h:
+ * sys/opensles/openslessrc.c:
+ * sys/opensles/openslessrc.h:
+ opensles: Add initial draft implementation of OpenSL ES plugin.
+ Initial draft implementation for a OpenSL ES based plugin for Android
+ that provides audio src and sink.
+
+2012-10-18 09:24:29 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/Makefile.am:
+ androidmedia: Use correct variable name in Makefile.am
+
+2012-10-17 22:54:28 +0300 Raimo Järvi <raimo.jarvi@gmail.com>
+
+ * sys/directsound/gstdirectsoundsrc.c:
+ directsoundsrc: Fix compiler warning
+ https://bugzilla.gnome.org/show_bug.cgi?id=673414
+
+2012-10-17 17:34:26 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/apexsink/gstapexsink.c:
+ * ext/assrender/gstassrender.c:
+ * ext/audiofile/gstafparse.c:
+ * ext/audiofile/gstafsink.c:
+ * ext/audiofile/gstafsrc.c:
+ * ext/bz2/gstbz2dec.c:
+ * ext/bz2/gstbz2enc.c:
+ * ext/cdaudio/gstcdaudio.c:
+ * ext/celt/gstceltdec.c:
+ * ext/celt/gstceltenc.c:
+ * ext/chromaprint/gstchromaprint.c:
+ * ext/cog/gstcogdownsample.c:
+ * ext/cog/gstcogmse.c:
+ * ext/cog/gstcogscale.c:
+ * ext/curl/gstcurlbasesink.c:
+ * ext/curl/gstcurlfilesink.c:
+ * ext/curl/gstcurlftpsink.c:
+ * ext/curl/gstcurlhttpsink.c:
+ * ext/curl/gstcurlsmtpsink.c:
+ * ext/curl/gstcurltlssink.c:
+ * ext/dc1394/gstdc1394.c:
+ * ext/dirac/gstdiracdec.cc:
+ * ext/dirac/gstdiracenc.cc:
+ * ext/directfb/dfbvideosink.c:
+ * ext/dts/gstdtsdec.c:
+ * ext/faac/gstfaac.c:
+ * ext/faad/gstfaad.c:
+ * ext/flite/gstflitetestsrc.c:
+ * ext/gme/gstgme.c:
+ * ext/gsettings/gstgsettingsaudiosink.c:
+ * ext/gsettings/gstgsettingsaudiosrc.c:
+ * ext/gsettings/gstgsettingsvideosink.c:
+ * ext/gsettings/gstgsettingsvideosrc.c:
+ * ext/gsm/gstgsmdec.c:
+ * ext/gsm/gstgsmenc.c:
+ * ext/jasper/gstjasperdec.c:
+ * ext/jasper/gstjasperenc.c:
+ * ext/kate/gstkatedec.c:
+ * ext/kate/gstkateenc.c:
+ * ext/kate/gstkateparse.c:
+ * ext/kate/gstkatetag.c:
+ * ext/kate/gstkatetiger.c:
+ * ext/libfame/gstlibfame.c:
+ * ext/libmms/gstmms.c:
+ * ext/mimic/gstmimdec.c:
+ * ext/mimic/gstmimenc.c:
+ * ext/modplug/gstmodplug.cc:
+ * ext/mpeg2enc/gstmpeg2enc.cc:
+ * ext/mplex/gstmplex.cc:
+ * ext/musepack/gstmusepackdec.c:
+ * ext/musicbrainz/gsttrm.c:
+ * ext/mythtv/gstmythtvsrc.c:
+ * ext/nas/nassink.c:
+ * ext/neon/gstneonhttpsrc.c:
+ * ext/ofa/gstofa.c:
+ * ext/openal/gstopenalsink.c:
+ * ext/openal/gstopenalsrc.c:
+ * ext/opencv/gstcvdilate.c:
+ * ext/opencv/gstcvequalizehist.c:
+ * ext/opencv/gstcverode.c:
+ * ext/opencv/gstcvlaplace.c:
+ * ext/opencv/gstcvsmooth.c:
+ * ext/opencv/gstcvsobel.c:
+ * ext/opencv/gstedgedetect.c:
+ * ext/opencv/gstfaceblur.c:
+ * ext/opencv/gstfacedetect.c:
+ * ext/opencv/gstmotioncells.c:
+ * ext/opencv/gstpyramidsegment.c:
+ * ext/opencv/gsttemplatematch.c:
+ * ext/opencv/gsttextoverlay.c:
+ * ext/opus/gstopusdec.c:
+ * ext/opus/gstopusenc.c:
+ * ext/opus/gstopusparse.c:
+ * ext/opus/gstrtpopusdepay.c:
+ * ext/opus/gstrtpopuspay.c:
+ * ext/resindvd/gstmpegdemux.c:
+ * ext/resindvd/resindvdbin.c:
+ * ext/resindvd/resindvdsrc.c:
+ * ext/resindvd/rsndec.c:
+ * ext/resindvd/rsnparsetter.c:
+ * ext/rsvg/gstrsvgdec.c:
+ * ext/rsvg/gstrsvgoverlay.c:
+ * ext/rtmp/gstrtmpsink.c:
+ * ext/rtmp/gstrtmpsrc.c:
+ * ext/schroedinger/gstschrodec.c:
+ * ext/schroedinger/gstschroenc.c:
+ * ext/sdl/sdlaudiosink.c:
+ * ext/sdl/sdlvideosink.c:
+ * ext/snapshot/gstsnapshot.c:
+ * ext/sndfile/gstsfsink.c:
+ * ext/sndfile/gstsfsrc.c:
+ * ext/sndio/sndiosink.c:
+ * ext/sndio/sndiosrc.c:
+ * ext/soundtouch/gstbpmdetect.cc:
+ * ext/soundtouch/gstpitch.cc:
+ * ext/spandsp/gstspanplc.c:
+ * ext/spc/gstspc.c:
+ * ext/swfdec/gstswfdec.c:
+ * ext/teletextdec/gstteletextdec.c:
+ * ext/timidity/gsttimidity.c:
+ * ext/timidity/gstwildmidi.c:
+ * ext/voaacenc/gstvoaacenc.c:
+ * ext/voamrwbenc/gstvoamrwbenc.c:
+ * ext/wayland/gstwaylandsink.c:
+ * ext/xvid/gstxviddec.c:
+ * ext/xvid/gstxvidenc.c:
+ * ext/zbar/gstzbar.c:
+ * gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.c:
+ * gst/adpcmdec/adpcmdec.c:
+ * gst/adpcmenc/adpcmenc.c:
+ * gst/aiff/aiffmux.c:
+ * gst/aiff/aiffparse.c:
+ * gst/asfmux/gstasfmux.c:
+ * gst/asfmux/gstasfparse.c:
+ * gst/asfmux/gstrtpasfpay.c:
+ * gst/audiobuffer/gstaudioringbuffer.c:
+ * gst/audiovisualizers/gstspacescope.c:
+ * gst/audiovisualizers/gstspectrascope.c:
+ * gst/audiovisualizers/gstsynaescope.c:
+ * gst/audiovisualizers/gstwavescope.c:
+ * gst/autoconvert/gstautoconvert.c:
+ * gst/autoconvert/gstautovideoconvert.c:
+ * gst/bayer/gstbayer2rgb.c:
+ * gst/bayer/gstrgb2bayer.c:
+ * gst/camerabin2/gstcamerabin2.c:
+ * gst/camerabin2/gstviewfinderbin.c:
+ * gst/camerabin2/gstwrappercamerabinsrc.c:
+ * gst/cdxaparse/gstcdxaparse.c:
+ * gst/cdxaparse/gstvcdparse.c:
+ * gst/coloreffects/gstchromahold.c:
+ * gst/coloreffects/gstcoloreffects.c:
+ * gst/dataurisrc/gstdataurisrc.c:
+ * gst/dccp/gstdccpclientsink.c:
+ * gst/dccp/gstdccpclientsrc.c:
+ * gst/dccp/gstdccpserversink.c:
+ * gst/dccp/gstdccpserversrc.c:
+ * gst/debugutils/fpsdisplaysink.c:
+ * gst/debugutils/gstchecksumsink.c:
+ * gst/debugutils/gstchopmydata.c:
+ * gst/debugutils/gstcompare.c:
+ * gst/debugutils/gstdebugspy.c:
+ * gst/dtmf/gstdtmfdetect.c:
+ * gst/dtmf/gstdtmfsrc.c:
+ * gst/dtmf/gstrtpdtmfdepay.c:
+ * gst/dtmf/gstrtpdtmfsrc.c:
+ * gst/dvbsuboverlay/gstdvbsuboverlay.c:
+ * gst/dvdspu/gstdvdspu.c:
+ * gst/faceoverlay/gstfaceoverlay.c:
+ * gst/festival/gstfestival.c:
+ * gst/fieldanalysis/gstfieldanalysis.c:
+ * gst/freeverb/gstfreeverb.c:
+ * gst/games/gstpuzzle.c:
+ * gst/gaudieffects/gstburn.c:
+ * gst/gaudieffects/gstchromium.c:
+ * gst/gaudieffects/gstdilate.c:
+ * gst/gaudieffects/gstdodge.c:
+ * gst/gaudieffects/gstexclusion.c:
+ * gst/gaudieffects/gstgaussblur.c:
+ * gst/gaudieffects/gstsolarize.c:
+ * gst/geometrictransform/gstbulge.c:
+ * gst/geometrictransform/gstcircle.c:
+ * gst/geometrictransform/gstdiffuse.c:
+ * gst/geometrictransform/gstfisheye.c:
+ * gst/geometrictransform/gstkaleidoscope.c:
+ * gst/geometrictransform/gstmarble.c:
+ * gst/geometrictransform/gstmirror.c:
+ * gst/geometrictransform/gstpinch.c:
+ * gst/geometrictransform/gstrotate.c:
+ * gst/geometrictransform/gstsphere.c:
+ * gst/geometrictransform/gstsquare.c:
+ * gst/geometrictransform/gststretch.c:
+ * gst/geometrictransform/gsttunnel.c:
+ * gst/geometrictransform/gsttwirl.c:
+ * gst/geometrictransform/gstwaterripple.c:
+ * gst/hdvparse/gsthdvparse.c:
+ * gst/hls/gsthlsdemux.c:
+ * gst/hls/gsthlssink.c:
+ * gst/id3tag/gstid3mux.c:
+ * gst/inter/gstinteraudiosink.c:
+ * gst/inter/gstinteraudiosrc.c:
+ * gst/inter/gstintersubsink.c:
+ * gst/inter/gstintersubsrc.c:
+ * gst/inter/gstintervideosink.c:
+ * gst/inter/gstintervideosrc.c:
+ * gst/interlace/gstinterlace.c:
+ * gst/ivfparse/gstivfparse.c:
+ * gst/jp2kdecimator/gstjp2kdecimator.c:
+ * gst/jpegformat/gstjifmux.c:
+ * gst/jpegformat/gstjpegparse.c:
+ * gst/librfb/gstrfbsrc.c:
+ * gst/liveadder/liveadder.c:
+ * gst/mixmatrix/mixmatrix.c:
+ * gst/mpeg1sys/gstmpeg1systemencode.c:
+ * gst/mpegdemux/gstmpegdemux.c:
+ * gst/mpegpsmux/mpegpsmux.c:
+ * gst/mpegtsdemux/tsdemux.c:
+ * gst/mpegtsmux/mpegtsmux.c:
+ * gst/mve/gstmvedemux.c:
+ * gst/mve/gstmvemux.c:
+ * gst/mxf/mxfdemux.c:
+ * gst/mxf/mxfmux.c:
+ * gst/nsf/gstnsf.c:
+ * gst/nuvdemux/gstnuvdemux.c:
+ * gst/overlay/gstoverlay.c:
+ * gst/patchdetect/gstpatchdetect.c:
+ * gst/pcapparse/gstirtspparse.c:
+ * gst/pcapparse/gstpcapparse.c:
+ * gst/pnm/gstpnmdec.c:
+ * gst/pnm/gstpnmenc.c:
+ * gst/rawparse/gstaudioparse.c:
+ * gst/rawparse/gstvideoparse.c:
+ * gst/real/gstrealaudiodec.c:
+ * gst/real/gstrealvideodec.c:
+ * gst/removesilence/gstremovesilence.c:
+ * gst/rtjpeg/gstrtjpegdec.c:
+ * gst/rtjpeg/gstrtjpegenc.c:
+ * gst/rtpmux/gstrtpdtmfmux.c:
+ * gst/rtpmux/gstrtpmux.c:
+ * gst/rtpvp8/gstrtpvp8depay.c:
+ * gst/rtpvp8/gstrtpvp8pay.c:
+ * gst/scaletempo/gstscaletempo.c:
+ * gst/sdi/gstsdidemux.c:
+ * gst/sdi/gstsdimux.c:
+ * gst/sdp/gstsdpdemux.c:
+ * gst/segmentclip/gstaudiosegmentclip.c:
+ * gst/segmentclip/gstvideosegmentclip.c:
+ * gst/siren/gstsirendec.c:
+ * gst/siren/gstsirenenc.c:
+ * gst/smooth/gstsmooth.c:
+ * gst/speed/gstspeed.c:
+ * gst/stereo/gststereo.c:
+ * gst/subenc/gstsrtenc.c:
+ * gst/subenc/gstwebvttenc.c:
+ * gst/tta/gstttadec.c:
+ * gst/tta/gstttaparse.c:
+ * gst/vbidec/gstvbidec.c:
+ * gst/videofilters/gstscenechange.c:
+ * gst/videofilters/gstzebrastripe.c:
+ * gst/videomeasure/gstvideomeasure_collector.c:
+ * gst/videomeasure/gstvideomeasure_ssim.c:
+ * gst/videoparsers/gstdiracparse.c:
+ * gst/videoparsers/gsth263parse.c:
+ * gst/videoparsers/gsth264parse.c:
+ * gst/videoparsers/gstmpeg4videoparse.c:
+ * gst/videoparsers/gstmpegvideoparse.c:
+ * gst/videosignal/gstvideoanalyse.c:
+ * gst/videosignal/gstvideodetect.c:
+ * gst/videosignal/gstvideomark.c:
+ * gst/vmnc/vmncdec.c:
+ * gst/y4m/gsty4mdec.c:
+ * sys/acmenc/acmenc.c:
+ * sys/acmmp3dec/acmmp3dec.c:
+ * sys/avc/gstavcsrc.cpp:
+ * sys/cdrom/gstcdplayer.c:
+ * sys/decklink/gstdecklinksink.cpp:
+ * sys/decklink/gstdecklinksrc.cpp:
+ * sys/directdraw/gstdirectdrawsink.c:
+ * sys/dshowsrcwrapper/gstdshowaudiosrc.cpp:
+ * sys/dshowsrcwrapper/gstdshowvideosrc.cpp:
+ * sys/dshowvideosink/dshowvideosink.cpp:
+ * sys/dvb/dvbbasebin.c:
+ * sys/dvb/gstdvbsrc.c:
+ * sys/dxr3/dxr3audiosink.c:
+ * sys/dxr3/dxr3spusink.c:
+ * sys/dxr3/dxr3videosink.c:
+ * sys/fbdev/gstfbdevsink.c:
+ * sys/linsys/gstlinsyssdisink.c:
+ * sys/linsys/gstlinsyssdisrc.c:
+ * sys/osxvideo/osxvideosrc.c:
+ * sys/pvr2d/gstpvrvideosink.c:
+ * sys/qcam/gstqcamsrc.c:
+ * sys/shm/gstshmsink.c:
+ * sys/shm/gstshmsrc.c:
+ * sys/uvch264/gstuvch264_mjpgdemux.c:
+ * sys/uvch264/gstuvch264_src.c:
+ * sys/vcd/vcdsrc.c:
+ * sys/vdpau/gstvdpsink.c:
+ * sys/vdpau/gstvdpvideopostprocess.c:
+ * sys/vdpau/h264/gstvdph264dec.c:
+ * sys/vdpau/mpeg/gstvdpmpegdec.c:
+ * sys/vdpau/mpeg4/gstvdpmpeg4dec.c:
+ * sys/wasapi/gstwasapisink.c:
+ * sys/wasapi/gstwasapisrc.c:
+ * sys/wininet/gstwininetsrc.c:
+ * sys/winks/gstksvideosrc.c:
+ * sys/winscreencap/gstdx9screencapsrc.c:
+ * sys/winscreencap/gstgdiscreencapsrc.c:
+ * tests/check/elements/baseaudiovisualizer.c:
+ * tests/check/elements/camerabin.c:
+ * tools/gst-element-maker:
+ Use gst_element_class_set_static_metadata()
+ where possible. Avoids some string copies. Also re-indent
+ some stuff. Also some indent fixes here and there.
+
+2012-04-03 12:09:19 +0300 Raimo Järvi <raimo.jarvi@gmail.com>
+
+ * configure.ac:
+ * sys/directsound/gstdirectsoundsrc.c:
+ directsoundsrc: port to 1.0
+ https://bugzilla.gnome.org/show_bug.cgi?id=673414
+
+2012-10-16 11:38:08 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * gst/mpegdemux/gstmpegdemux.c:
+ mpegdemux: Fix unitialized variable compiler warning
+
+2012-10-16 11:34:04 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ Revert "configure: fix build"
+ This reverts commit 5c1c35290d7f72a4bc016e8aef276d8c1bdcf37b.
+
+2012-10-16 11:31:41 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/Makefile.am:
+ androidmedia: Add missing file
+
+2012-10-16 11:32:00 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * configure.ac:
+ configure: fix build
+
+2012-10-15 16:35:57 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamc.c:
+ androidmedia: Rename plugin
+
+2012-10-15 16:29:00 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ androidmedia: Add to the not yet ported plugins
+
+2012-10-15 16:05:39 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ * sys/androidmedia/gstamcvideodec.h:
+ androidmedia: Make everything buildable
+
+2012-10-15 14:36:55 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamc.c:
+ Don't try to use the NVidia DRM codecs
+
+2012-10-09 10:56:30 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcaudiodec.c:
+ * sys/androidmedia/gstamcvideodec.c:
+ Try to handle format changes more gracefully
+ And make stop() faster and more robust
+
+2012-10-09 10:27:36 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcaudiodec.c:
+ * sys/androidmedia/gstamcaudiodec.h:
+ Add workaround for Google MP3 decoder outputting garbage in first output buffer
+ And assume one decoded input frame per output buffer to fix timestamp
+ handling by the base class.
+
+2012-10-09 10:14:50 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcaudiodec.c:
+ Also add some more output format checks to the audio decoder
+
+2012-10-09 10:13:32 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcvideodec.c:
+ Check output format metadata some more
+ And implement workaround for NVidia Tegra 3 not setting the slice_height.
+ Thanks to Josep Torra for debugging this issue.
+
+2012-10-05 15:09:17 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamc.c:
+ Add some more default channel layouts, these should be good for AAC at least
+
+2012-10-05 14:56:22 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcaudiodec.c:
+ Don't set timestamps, the baseclass handles this for us anyway
+
+2012-10-03 10:06:02 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcvideodec.c:
+ List profiles in reverse to minimize caps
+
+2012-10-03 09:56:50 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcvideodec.c:
+ Iterate levels in reverse order to minimize caps
+
+2012-10-03 09:51:04 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcaudiodec.c:
+ * sys/androidmedia/gstamcvideodec.c:
+ Merge structures into caps instead of appending them
+
+2012-09-25 10:32:26 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcaudiodec.c:
+ * sys/androidmedia/gstamcvideodec.c:
+ Use orc_memcpy() instead of memcpy() as it should be faster for larger memory areas
+
+2012-09-24 15:32:44 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcaudiodec.c:
+ Add support for audio/mpeg-L2 for the Nexus 7
+
+2012-09-24 15:14:09 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcvideodec.c:
+ Add support for MPEG1/2 video
+
+2012-09-19 14:52:27 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamc.c:
+ Ignore the *law and Vorbis decoders
+ They are broken unfortunately.
+
+2012-09-19 11:20:20 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcvideodec.c:
+ Add FIXME comment for not handling odd widths/height with the TI hardware decoders
+ Must likely an issue with the codec itself though.
+
+2012-09-19 09:47:47 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcvideodec.c:
+ Fix handling of I420 buffers with odd width
+
+2012-09-18 15:38:25 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcaudiodec.c:
+ Only mpegversion=4 is supported for AAC
+
+2012-09-18 15:28:31 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamc.c:
+ * sys/androidmedia/gstamcaudiodec.c:
+ * sys/androidmedia/gstamcvideodec.c:
+ Remove some obsolete FIXMEs
+
+2012-09-17 13:46:15 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcaudiodec.c:
+ * sys/androidmedia/gstamcvideodec.c:
+ Fix flushing logic to unbreak handling of flushing seeks
+
+2012-09-17 12:24:30 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcvideodec.c:
+ Fix chroma stride for I420 stride/crop conversion
+
+2012-09-17 11:28:58 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcaudiodec.c:
+ Fix Vorbis decoding
+
+2012-09-14 16:17:51 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcaudiodec.c:
+ * sys/androidmedia/gstamcvideodec.c:
+ Wait at most 100ms for dequeueing a buffer, and retry after that
+ Some codecs don't fail the dequeueing if the codec is flushed,
+ causing deadlocks when shutting down the element.
+
+2012-09-14 16:11:33 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcaudiodec.c:
+ * sys/androidmedia/gstamcvideodec.c:
+ Release output buffers a bit earlier
+
+2012-09-14 16:11:04 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcaudiodec.c:
+ Keep another reference of the input buffer in handle_frame()
+ It might be unreffed in the meantime by the other thread due
+ to finish_frame().
+
+2012-09-14 16:10:29 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcaudiodec.c:
+ Pass -1 as number of frames to the base class
+ This will automatically do the right thing if timestamps are good enough
+
+2012-09-14 16:09:48 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcaudiodec.c:
+ Use correct buffer variable
+
+2012-09-14 14:43:31 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcaudiodec.c:
+ * sys/androidmedia/gstamcvideodec.c:
+ Always pass 1 as number of frames to finish_frame()
+
+2012-09-14 14:42:55 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcaudiodec.c:
+ Correctly remember number of channels and samplerate
+
+2012-09-14 14:42:36 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcaudiodec.c:
+ Don't unref input buffer from handle_frame(), it's owned by the baseclass
+
+2012-09-14 13:31:21 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcaudiodec.c:
+ Remove invalid GST_ERROR() call
+
+2012-09-14 13:27:33 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcaudiodec.c:
+ Only try to get the channel-mask if it is set
+
+2012-09-14 13:25:36 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcaudiodec.c:
+ Add support for FLAC
+
+2012-09-14 13:24:14 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcaudiodec.c:
+ Fix src template caps
+
+2012-09-14 13:16:41 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcaudiodec.c:
+ Fix plugin initialization
+
+2012-09-14 13:05:15 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamc-constants.h:
+ * sys/androidmedia/gstamc.c:
+ * sys/androidmedia/gstamc.h:
+ * sys/androidmedia/gstamcaudiodec.c:
+ * sys/androidmedia/gstamcaudiodec.h:
+ Add support for audio decoders, completely untested so far
+
+2012-09-14 12:07:18 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcvideodec.c:
+ Only set the SYNC_FRAME flag on the first buffer if we need to split the input
+
+2012-09-12 14:30:40 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamc-constants.h:
+ * sys/androidmedia/gstamc.c:
+ Ignore codecs with unknown color formats for stability purposes
+ They can be registered nonetheless if an environment variable
+ or compile-time #define is set.
+
+2012-09-12 13:48:01 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcvideodec.c:
+ Implement cropping and correctly handle the different color formats
+
+2012-09-11 16:30:00 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcvideodec.c:
+ Really implement stride conversion for NV12 too
+
+2012-09-11 16:24:49 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcvideodec.c:
+ Implement stride-conversion for I420 and NV12
+
+2012-09-11 15:56:00 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamc.c:
+ Fix typo in previous commit
+
+2012-09-11 15:49:13 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamc.c:
+ Don't allow using non-Google codecs if we started the Java VM ourselves
+ Hardware codecs, e.g. the TI ones, only work in processes that had their
+ Java VM started via the non-public AndroidRuntime class.
+
+2012-09-11 14:30:15 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamc.c:
+ Rename to amc from androidmediacodec everywhere
+
+2012-09-11 13:08:48 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcvideodec.c:
+ Improve debug output
+
+2012-09-11 12:39:11 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamc.c:
+ * sys/androidmedia/gstamc.h:
+ * sys/androidmedia/gstamcvideodec.c:
+ Print the MediaFormats we get in the debug logs
+
+2012-09-10 15:31:04 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcvideodec.c:
+ Improve debug output
+
+2012-09-10 15:30:55 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamc.c:
+ * sys/androidmedia/gstamc.h:
+ * sys/androidmedia/gstamcvideodec.c:
+ Improve level/profile handling
+
+2012-09-10 13:39:17 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamc.c:
+ Allow registering as static plugin with the GStreamer SDK API
+
+2012-09-10 13:30:01 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcvideodec.c:
+ If the buffer sizes are the same, just memcpy() to the output buffers
+
+2012-09-10 12:56:04 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcvideodec.c:
+ Correctly convert timestamps between us and ns
+
+2012-09-07 16:11:26 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcvideodec.c:
+ Set SYNC_FRAME flag on buffers if required
+
+2012-09-07 14:22:54 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcvideodec.c:
+ Improve flushing
+
+2012-09-07 13:44:19 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcvideodec.c:
+ Wait at most 0.5 seconds for getting an input buffer for EOS
+
+2012-09-07 13:42:45 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcvideodec.c:
+ Correctly check for flushing
+
+2012-09-06 17:24:04 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcvideodec.c:
+ Retry for negative return values when dequeueing buffers
+
+2012-09-06 17:07:49 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcvideodec.c:
+ Fix refcount bug
+
+2012-09-06 17:07:12 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcvideodec.c:
+ The MediaCodec API is apparently not threadsafe between stop() and release()
+ So we don't call release() and just hope for the GC to release the
+ codec in time.
+
+2012-09-06 15:44:06 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamc.c:
+ Fix plugin cache creation
+
+2012-08-24 04:35:44 -0700 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamc.c:
+ Cache the codec informations inside the registry
+ Otherwise we would always load all codecs during plugin initialization
+ which can take quite some time (because of hardware) and also loads
+ lots of shared libraries (which number is limited by 64 in Android).
+
+2012-08-24 09:20:26 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamc.c:
+ Properly attach and detach the current threads to the Java VM
+ Attaching a thread after it was detached will cause segfaults,
+ as such we use a pthread_key_t to keep track of the JNIEnv* of
+ the attached threads and in the destructor (i.e. when the
+ thread exits) we detach the thread.
+
+2012-08-23 17:31:40 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcvideodec.c:
+ Don't get the output format from the codec before it is ready
+ Apparently things are crashing otherwise.
+
+2012-08-23 17:31:14 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcvideodec.c:
+ Get the input buffers from the codec
+
+2012-08-23 17:30:45 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamc.c:
+ Fix JNI method call signatures
+
+2012-08-23 17:30:12 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamc.c:
+ Initialize the VM will full debugging for now
+
+2012-08-23 13:53:37 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamc.c:
+ Use NewStringUTF() instead of our own method for that
+
+2012-08-23 12:30:23 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamc.c:
+ Add the TI format to the mapping table too
+
+2012-08-23 12:29:40 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamc-constants.h:
+ * sys/androidmedia/gstamc.c:
+ Add another TI specific OpenMAX color format
+
+2012-08-22 19:30:59 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamc.c:
+ * sys/androidmedia/gstamcvideodec.c:
+ Fixes to element/elementfactory creation
+
+2012-08-22 19:12:23 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamc.c:
+ Some bugfixes to the codec scanning code
+ Also it's not possible to attach a thread after it was
+ detached once. As such we simply never detach any thread
+ at all now.
+
+2012-08-22 18:35:36 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamc.c:
+ Fix some compilation errors
+
+2012-08-20 14:13:30 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamcvideodec.c:
+ Add important FIXME
+
+2012-08-20 13:45:53 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamc.c:
+ * sys/androidmedia/gstamcvideodec.c:
+ * sys/androidmedia/gstamcvideodec.h:
+ Add video decoder element
+
+2012-08-20 13:45:20 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamc.c:
+ * sys/androidmedia/gstamc.h:
+ Add some more JNI wrapping
+
+2012-08-20 13:42:24 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamc-constants.h:
+ Add some missing color format constants
+
+2012-08-16 15:18:19 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamc-constants.h:
+ * sys/androidmedia/gstamc.c:
+ * sys/androidmedia/gstamc.h:
+ Implement basic wrapper around MediaCodec API
+ Ideally nothing else will be needed from the elements later.
+
+2012-08-15 18:23:34 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamc.c:
+ * sys/androidmedia/gstamc.h:
+ Some more WIP
+ Scanning all codecs now and have data structures for holding codec
+ information and codec contexts. Also function declarations for
+ working with them.
+
+2012-08-14 13:20:14 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/androidmedia/gstamc.c:
+ * sys/androidmedia/gstamc.h:
+ Initial commit
+
+2012-10-15 15:53:12 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ * sys/Makefile.am:
+ androidmedia: Add androidmedia plugin
+
+2012-10-15 11:45:04 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * gst/hls/gsthlsdemux.c:
+ hlsdemux: And fix another deadlock caused by the update thread not correctly shutting down
+ Conflicts:
+ gst/hls/gsthlsdemux.c
+
+2012-10-15 11:02:02 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * gst/hls/gsturidownloader.c:
+ hlsdemux: Also hold the mutex before signalling the condition variable
+ Conflicts:
+ gst/hls/gsturidownloader.c
+
+2012-10-15 10:53:58 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * gst/hls/gsthlsdemux.c:
+ hlsdemux: Also cancel the downloader before stopping the playlist update task
+
+2012-10-15 10:38:16 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * gst/hls/gsthlsdemux.c:
+ hlsdemux: Only lock the mutex when it's not locked already
+ Conflicts:
+ gst/hls/gsthlsdemux.c
+
+2012-10-15 10:32:47 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * gst/hls/gsthlsdemux.c:
+ hlsdemux: Fix another race condition by holding the mutex that the condition variable uses
+ Conflicts:
+ gst/hls/gsthlsdemux.c
+
+2012-10-15 09:47:35 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * gst/hls/gsthlsdemux.c:
+ hlsdemux: Port some things from the last commits
+
+2012-10-15 09:35:16 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * gst/hls/gsthlsdemux.c:
+ hlsdemux: Never ever stop a task from the task function
+ This will deadlock. Also make sure to always post an error message
+ if required before pausing tasks from the task function.
+ Should fix another bunch of deadlocks.
+ Conflicts:
+ gst/hls/gsthlsdemux.c
+
+2012-10-15 09:24:01 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * gst/hls/gsthlsdemux.c:
+ hlsdemux: Fix lots of deadlocks caused by race conditions in the task state handling
+
+2012-10-12 10:57:44 +0400 Sergey N. Gorshkov <sng@setevisor.tv>
+
+ * ext/rtmp/gstrtmpsink.c:
+ rtmpsink: handle RTMP_Write() return value correctly
+ Error might also be negative (-1). Unclear if 0 should
+ be fatal as well though.
+ https://bugzilla.gnome.org/show_bug.cgi?id=681111
+ https://bugzilla.gnome.org/show_bug.cgi?id=686009
+
+2012-10-12 23:09:06 +0100 David Régade <dregade@viewsurf.com>
+
+ * ext/rtmp/gstrtmpsink.c:
+ rtmpsink: fix memory leak from URI verification via RTMP_ParseURL()
+ In gst_rtmp_sink_uri_set_uri(), a test is performed in order
+ to be sure uri is correct for librtmp. This test calls
+ RTMP_ParseURL with 3 AVal pointers as parameters: host,
+ playpath and app.
+ AVal is a struct with a char* + int. After RTMP_ParseURL call,
+ host.av_val and app.av_val both refer a substring of "uri". But
+ playpath.av_val may be the result of a malloc so it needs to
+ be freed.
+ https://bugzilla.gnome.org/show_bug.cgi?id=681459
+
+2012-10-12 22:33:45 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegdemux/gstmpegdemux.c:
+ mpegdemux: advance stream time when sending GAP event
+
+2012-10-12 22:33:27 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegdemux/gstmpegdemux.c:
+ * gst/mpegdemux/gstmpegdemux.h:
+ mpegdemux: send language info downstream if available
+ ... as extracted from dvd event.
+
+2012-10-12 22:31:53 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegdemux/gstmpegdemux.c:
+ * gst/mpegdemux/gstmpegdemux.h:
+ mpegdemux: remove obsolete struct field
+
+2012-10-12 12:28:44 -0700 Michael Smith <msmith@rdio.com>
+
+ * gst/rawparse/gstaudioparse.c:
+ audioparse: Set framesize and properties correctly when taking format from caps.
+
+2012-10-12 17:51:51 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegdemux/gstmpegdemux.c:
+ mpegdemux: tweak flow return aggregation
+
+2012-10-12 15:44:03 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegdemux/gstmpegdemux.c:
+ mpegdemux: handle upstream TIME segments
+
+2012-10-12 15:07:21 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegdemux/gstmpegdemux.c:
+ * gst/mpegdemux/gstmpegdemux.h:
+ mpegdemux: handle and combine downstream flow return
+
+2012-10-12 14:50:34 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegdemux/gstmpegdemux.c:
+ mpegdemux: handle new style dvd event
+
+2012-10-11 15:29:36 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegdemux/gstmpegdemux.c:
+ mpegdemux: do not add pad after no-more-pads
+
+2012-10-11 15:27:12 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegdemux/gstmpegdemux.c:
+ * gst/mpegdemux/gstmpegdemux.h:
+ mpegdemux: clean up segment sending
+ ... to use the src_segment as a basis for the sent segment,
+ thereby properly conveying accumulated base_time etc.
+ Also ensure src_segment is only adjusted once, so that
+ all downstream segments are identical to avoid stream
+ misalignment.
+
+2012-10-11 12:07:46 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegdemux/gstmpegdemux.c:
+ * gst/mpegdemux/gstmpegdemux.h:
+ mpegdemux: send GAP event rather than segment updates
+
+2012-10-11 11:51:50 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegdemux/gstmpegdemux.c:
+ mpegdemux: refactor segment sending
+
+2012-10-11 11:30:44 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegdemux/gstmpegdemux.c:
+ mpegdemux: refactor init and reset
+
+2012-10-11 11:04:33 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegdemux/gstmpegdemux.c:
+ mpegdemux: no more segment closing in 1.0
+
+2012-10-11 11:03:21 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegdemux/gstmpegdemux.c:
+ mpegdemux: clean up some debug statements
+
+2012-10-11 15:31:04 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/dts/gstdtsdec.c:
+ dtsdec: fix buffer parsing
+ ... to avoid feeding empty buffers to decoder.
+
+2012-10-12 15:26:20 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * gst/mpegtsdemux/mpegtsbase.c:
+ * gst/mpegtsdemux/tsdemux.c:
+ mpegtsdemux: First push EOS, then destroy all programs
+ And also properly remove the program from the subclass
+
+2012-10-12 15:09:07 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * gst/hls/gsthlsdemux.c:
+ hlsdemux: Fix invalid read
+
+2012-10-10 18:18:03 +0300 Sreerenj Balachandran <sreerenj.balachandran@intel.com>
+
+ * gst/videoparsers/gstmpegvideoparse.c:
+ mpegvideoparse: signal interlacing properly in video caps
+ The field is called "interlace-mode" mode now and is a string.
+ https://bugzilla.gnome.org/show_bug.cgi?id=685895
+
+2012-10-10 14:11:43 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/apexsink/gstapexsink.c:
+ * gst/debugutils/fpsdisplaysink.c:
+ * gst/inter/gstintertest.c:
+ * tests/check/elements/dataurisrc.c:
+ * tools/gst-app-maker:
+ replace some playbin2 -> playbin
+
+2012-10-10 09:58:39 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/videoparsers/gstmpeg4videoparse.c:
+ mpeg4videoparse: reset frame parser after parsing caps codec data
+ ... so as to arrange for a proper fresh state upon first frame.
+
+2012-10-10 09:48:58 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * common:
+ common: Update to the right commit again
+ Was accidentially reverted to an older version in the last commit.
+
+2012-10-09 23:00:14 -0700 Michael Smith <msmith@rdio.com>
+
+ * gst/rawparse/gstaudioparse.c:
+ * gst/rawparse/gstaudioparse.h:
+ audioparse: add a mode where the caps are taken from the sink pad, and thus audioparse is only performing timestamping.
+
+2012-10-09 21:19:15 -0700 Michael Smith <msmith@rdio.com>
+
+ * common:
+ * gst/videoparsers/gstmpegvideoparse.c:
+ mpegvideoparse: reset frame parser after parsing codec_data buffer in caps, to avoid not correctly parsing the full first frame.
+
+2012-10-09 13:53:19 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/videoparsers/gstmpeg4videoparse.c:
+ * gst/videoparsers/gstmpeg4videoparse.h:
+ mpeg4videoparse: properly mark config data presence
+ ... which we allow to start at VisualObjectSequence or
+ at VideoObject.
+ Fixes https://bugzilla.gnome.org/show_bug.cgi?id=685709
+
+2012-10-08 12:38:20 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * gst/fieldanalysis/gstfieldanalysis.c:
+ fieldanalysis: Fix unitiailized variable compiler warning
+ And also use the pad's default event function instead
+ of just pushing to the peerpad. This makes sure any
+ default handling of events is called.
+
+2012-10-08 12:23:20 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ fieldanalysis: Remove from the NONPORTED plugins list
+ It's supposed to be ported in 1.0.1 already.
+
+2012-10-07 17:06:39 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * docs/Makefile.am:
+ docs: add 'make upload' target for docs/ for new-release script
+
+2012-10-07 17:03:45 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * configure.ac:
+ * docs/plugins/gst-plugins-bad-plugins.args:
+ * docs/plugins/inspect/plugin-adpcmdec.xml:
+ * docs/plugins/inspect/plugin-adpcmenc.xml:
+ * docs/plugins/inspect/plugin-asfmux.xml:
+ * docs/plugins/inspect/plugin-assrender.xml:
+ * docs/plugins/inspect/plugin-audiovisualizers.xml:
+ * docs/plugins/inspect/plugin-autoconvert.xml:
+ * docs/plugins/inspect/plugin-bayer.xml:
+ * docs/plugins/inspect/plugin-bz2.xml:
+ * docs/plugins/inspect/plugin-camerabin.xml:
+ * docs/plugins/inspect/plugin-celt.xml:
+ * docs/plugins/inspect/plugin-chromaprint.xml:
+ * docs/plugins/inspect/plugin-coloreffects.xml:
+ * docs/plugins/inspect/plugin-curl.xml:
+ * docs/plugins/inspect/plugin-dataurisrc.xml:
+ * docs/plugins/inspect/plugin-debugutilsbad.xml:
+ * docs/plugins/inspect/plugin-dtmf.xml:
+ * docs/plugins/inspect/plugin-dtsdec.xml:
+ * docs/plugins/inspect/plugin-dvb.xml:
+ * docs/plugins/inspect/plugin-dvbsuboverlay.xml:
+ * docs/plugins/inspect/plugin-dvdspu.xml:
+ * docs/plugins/inspect/plugin-faac.xml:
+ * docs/plugins/inspect/plugin-faad.xml:
+ * docs/plugins/inspect/plugin-festival.xml:
+ * docs/plugins/inspect/plugin-flite.xml:
+ * docs/plugins/inspect/plugin-fragmented.xml:
+ * docs/plugins/inspect/plugin-gaudieffects.xml:
+ * docs/plugins/inspect/plugin-gdp.xml:
+ * docs/plugins/inspect/plugin-geometrictransform.xml:
+ * docs/plugins/inspect/plugin-gmedec.xml:
+ * docs/plugins/inspect/plugin-gsm.xml:
+ * docs/plugins/inspect/plugin-gstsiren.xml:
+ * docs/plugins/inspect/plugin-id3tag.xml:
+ * docs/plugins/inspect/plugin-inter.xml:
+ * docs/plugins/inspect/plugin-interlace.xml:
+ * docs/plugins/inspect/plugin-jpegformat.xml:
+ * docs/plugins/inspect/plugin-liveadder.xml:
+ * docs/plugins/inspect/plugin-mimic.xml:
+ * docs/plugins/inspect/plugin-mms.xml:
+ * docs/plugins/inspect/plugin-modplug.xml:
+ * docs/plugins/inspect/plugin-mpeg2enc.xml:
+ * docs/plugins/inspect/plugin-mpegpsdemux.xml:
+ * docs/plugins/inspect/plugin-mpegtsdemux.xml:
+ * docs/plugins/inspect/plugin-mpegtsmux.xml:
+ * docs/plugins/inspect/plugin-mpg123.xml:
+ * docs/plugins/inspect/plugin-mplex.xml:
+ * docs/plugins/inspect/plugin-opencv.xml:
+ * docs/plugins/inspect/plugin-pcapparse.xml:
+ * docs/plugins/inspect/plugin-pnm.xml:
+ * docs/plugins/inspect/plugin-rawparse.xml:
+ * docs/plugins/inspect/plugin-removesilence.xml:
+ * docs/plugins/inspect/plugin-resindvd.xml:
+ * docs/plugins/inspect/plugin-rtmp.xml:
+ * docs/plugins/inspect/plugin-rtpmux.xml:
+ * docs/plugins/inspect/plugin-rtpvp8.xml:
+ * docs/plugins/inspect/plugin-scaletempo.xml:
+ * docs/plugins/inspect/plugin-schro.xml:
+ * docs/plugins/inspect/plugin-sdp.xml:
+ * docs/plugins/inspect/plugin-segmentclip.xml:
+ * docs/plugins/inspect/plugin-shm.xml:
+ * docs/plugins/inspect/plugin-smooth.xml:
+ * docs/plugins/inspect/plugin-soundtouch.xml:
+ * docs/plugins/inspect/plugin-spandsp.xml:
+ * docs/plugins/inspect/plugin-speed.xml:
+ * docs/plugins/inspect/plugin-videoparsersbad.xml:
+ * docs/plugins/inspect/plugin-voaacenc.xml:
+ * docs/plugins/inspect/plugin-voamrwbenc.xml:
+ * docs/plugins/inspect/plugin-waylandsink.xml:
+ * docs/plugins/inspect/plugin-y4mdec.xml:
+ * docs/plugins/inspect/plugin-zbar.xml:
+ * win32/common/config.h:
+ Back to development (bug fixing)
+
=== release 1.0.1 ===
-2012-10-07 Tim-Philipp Müller <tim@centricular.net>
+2012-10-07 15:57:03 +0100 Tim-Philipp Müller <tim@centricular.net>
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
* configure.ac:
- releasing 1.0.1
+ * docs/plugins/gst-plugins-bad-plugins.args:
+ * docs/plugins/gst-plugins-bad-plugins.hierarchy:
+ * docs/plugins/inspect/plugin-adpcmdec.xml:
+ * docs/plugins/inspect/plugin-adpcmenc.xml:
+ * docs/plugins/inspect/plugin-asfmux.xml:
+ * docs/plugins/inspect/plugin-assrender.xml:
+ * docs/plugins/inspect/plugin-audiovisualizers.xml:
+ * docs/plugins/inspect/plugin-autoconvert.xml:
+ * docs/plugins/inspect/plugin-bayer.xml:
+ * docs/plugins/inspect/plugin-bz2.xml:
+ * docs/plugins/inspect/plugin-camerabin.xml:
+ * docs/plugins/inspect/plugin-celt.xml:
+ * docs/plugins/inspect/plugin-chromaprint.xml:
+ * docs/plugins/inspect/plugin-coloreffects.xml:
+ * docs/plugins/inspect/plugin-curl.xml:
+ * docs/plugins/inspect/plugin-dataurisrc.xml:
+ * docs/plugins/inspect/plugin-debugutilsbad.xml:
+ * docs/plugins/inspect/plugin-dtmf.xml:
+ * docs/plugins/inspect/plugin-dtsdec.xml:
+ * docs/plugins/inspect/plugin-dvb.xml:
+ * docs/plugins/inspect/plugin-dvbsuboverlay.xml:
+ * docs/plugins/inspect/plugin-dvdspu.xml:
+ * docs/plugins/inspect/plugin-faac.xml:
+ * docs/plugins/inspect/plugin-faad.xml:
+ * docs/plugins/inspect/plugin-festival.xml:
+ * docs/plugins/inspect/plugin-flite.xml:
+ * docs/plugins/inspect/plugin-fragmented.xml:
+ * docs/plugins/inspect/plugin-gaudieffects.xml:
+ * docs/plugins/inspect/plugin-gdp.xml:
+ * docs/plugins/inspect/plugin-geometrictransform.xml:
+ * docs/plugins/inspect/plugin-gmedec.xml:
+ * docs/plugins/inspect/plugin-gsm.xml:
+ * docs/plugins/inspect/plugin-gstsiren.xml:
+ * docs/plugins/inspect/plugin-id3tag.xml:
+ * docs/plugins/inspect/plugin-inter.xml:
+ * docs/plugins/inspect/plugin-interlace.xml:
+ * docs/plugins/inspect/plugin-jpegformat.xml:
+ * docs/plugins/inspect/plugin-liveadder.xml:
+ * docs/plugins/inspect/plugin-mimic.xml:
+ * docs/plugins/inspect/plugin-mms.xml:
+ * docs/plugins/inspect/plugin-modplug.xml:
+ * docs/plugins/inspect/plugin-mpeg2enc.xml:
+ * docs/plugins/inspect/plugin-mpegpsdemux.xml:
+ * docs/plugins/inspect/plugin-mpegtsdemux.xml:
+ * docs/plugins/inspect/plugin-mpegtsmux.xml:
+ * docs/plugins/inspect/plugin-mpg123.xml:
+ * docs/plugins/inspect/plugin-mplex.xml:
+ * docs/plugins/inspect/plugin-opencv.xml:
+ * docs/plugins/inspect/plugin-pcapparse.xml:
+ * docs/plugins/inspect/plugin-pnm.xml:
+ * docs/plugins/inspect/plugin-rawparse.xml:
+ * docs/plugins/inspect/plugin-removesilence.xml:
+ * docs/plugins/inspect/plugin-resindvd.xml:
+ * docs/plugins/inspect/plugin-rtmp.xml:
+ * docs/plugins/inspect/plugin-rtpmux.xml:
+ * docs/plugins/inspect/plugin-rtpvp8.xml:
+ * docs/plugins/inspect/plugin-scaletempo.xml:
+ * docs/plugins/inspect/plugin-schro.xml:
+ * docs/plugins/inspect/plugin-sdp.xml:
+ * docs/plugins/inspect/plugin-segmentclip.xml:
+ * docs/plugins/inspect/plugin-shm.xml:
+ * docs/plugins/inspect/plugin-smooth.xml:
+ * docs/plugins/inspect/plugin-soundtouch.xml:
+ * docs/plugins/inspect/plugin-spandsp.xml:
+ * docs/plugins/inspect/plugin-speed.xml:
+ * docs/plugins/inspect/plugin-videoparsersbad.xml:
+ * docs/plugins/inspect/plugin-voaacenc.xml:
+ * docs/plugins/inspect/plugin-voamrwbenc.xml:
+ * docs/plugins/inspect/plugin-waylandsink.xml:
+ * docs/plugins/inspect/plugin-y4mdec.xml:
+ * docs/plugins/inspect/plugin-zbar.xml:
+ * gst-plugins-bad.doap:
+ * win32/common/config.h:
+ Release 1.0.1
2012-10-06 14:57:54 +0100 Tim-Philipp Müller <tim@centricular.net>
diff --git a/Makefile.in b/Makefile.in
index 2c9fad89..2c40f82a 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -259,6 +259,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/NEWS b/NEWS
index 4bd09966..dcfcdab1 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,41 @@
-This is GStreamer Bad Plugins 1.0.1
+This is GStreamer Bad Plugins 1.0.2
+
+Changes since 1.0.1:
+
+ * Parallel installability with 0.10.x series
+ * audioparse: add mode where caps are taken from upstream and only timestamping is performed
+ * directsoundsrc: port to 1.0
+ * dtsdec: fix buffer parsing
+ * fieldanalysis: actually build (remove from the NONPORTED plugins list)
+ * hlsdemux: numerous thread-safety fixes, and an invalid memory access fix
+ * mpegdemux: handle and combine downstream flow returns better
+ * mpegdemux: make work properly with dvdreadsrc
+ * mpegtsdemux: PES header parsing fixes; fix potential crash
+ * mpegtsdemux: First push EOS, then destroy all programs
+ * mpegtsmux: fix buffer refcounting issue
+ * mpeg4videoparse: correctly parse the full first frame; properly mark config data presence
+ * mpegvideoparse: correctly parse the full first frame; signal interlacing properly in caps
+ * pitch: fix for start times > 0 (e.g. ogg streaming)
+ * rtmpsink: handle RTMP_Write() return value correctly, fix memory leak
+ * scaletempo: fix timestamp and latency query handling, and event leak
+ * subenc: port to 1.0
+
+Bugs fixed since 1.0.1:
+
+ * 623387 : mpegdemux: check base_time before calculating new_start
+ * 673414 : directsoundsrc: Port to 1.0
+ * 681459 : rtmpsink: memory leak
+ * 685709 : mpeg4videoparse: AVI file with XVID video doesn't want to preroll: p_length.avi
+ * 685895 : mpegvideoparse: signal interlacing correctly in caps using new " interlace-mode " field
+ * 686009 : rtmpsink: handle RTMP_Write() return value correctly
+ * 686294 : tsdemux: Fix checking P-STD_buffer marker in PES header
+ * 686327 : mpegtsmux: fix refcount issue with input buffers
+ * 686358 : tsdemux: fix potential crash dereferencing NULL program pointer
+ * 686520 : wayland: update to wayland-protocol 0.99
+ * 686547 : rtpopuspay outputs unparseable caps
+ * 686595 : [mpg123] misc improvements and fixes
+ * 686774 : gst-plugins-bad/curl: add a comment describing function...
+ * 686829 : opusdec: invalid gst_buffer_unmap() call for NULL buffer
Changes since 1.0.0:
diff --git a/RELEASE b/RELEASE
index bbdec976..e640527c 100644
--- a/RELEASE
+++ b/RELEASE
@@ -1,5 +1,5 @@
-Release notes for GStreamer Bad Plugins 1.0.1
+Release notes for GStreamer Bad Plugins 1.0.2
The GStreamer team is proud to announce a new release
@@ -63,22 +63,38 @@ contains a set of codecs plugins based on libav (formerly gst-ffmpeg)
Features of this release
* Parallel installability with 0.10.x series
- * fieldanalysis and frei0r plugins ported to 1.0
- * DVD playback fixes
- * pitch: transform timestamps properly after a seek
- * camerabin fixes
- * bug fixes
+ * audioparse: add mode where caps are taken from upstream and only timestamping is performed
+ * directsoundsrc: port to 1.0
+ * dtsdec: fix buffer parsing
+ * fieldanalysis: actually build (remove from the NONPORTED plugins list)
+ * hlsdemux: numerous thread-safety fixes, and an invalid memory access fix
+ * mpegdemux: handle and combine downstream flow returns better
+ * mpegdemux: make work properly with dvdreadsrc
+ * mpegtsdemux: PES header parsing fixes; fix potential crash
+ * mpegtsdemux: First push EOS, then destroy all programs
+ * mpegtsmux: fix buffer refcounting issue
+ * mpeg4videoparse: correctly parse the full first frame; properly mark config data presence
+ * mpegvideoparse: correctly parse the full first frame; signal interlacing properly in caps
+ * pitch: fix for start times > 0 (e.g. ogg streaming)
+ * rtmpsink: handle RTMP_Write() return value correctly, fix memory leak
+ * scaletempo: fix timestamp and latency query handling, and event leak
+ * subenc: port to 1.0
Bugs fixed in this release
- * 667220 : dvdspu: add NV12 support
- * 681562 : Issue setting " video-source " property on wrappercamerabinsrc
- * 681564 : Issue setting " video-source-filter " property on wrappercamerabinsrc
- * 681678 : frei0r: port to 1.0
- * 684740 : chromaprint: resolve undefined symbols
- * 684847 : curl: fix build on win32
- * 685065 : Missing cast in curlbasesink
- * 685159 : chromaprint: Missing unmap buffer in transform_ip
+ * 623387 : mpegdemux: check base_time before calculating new_start
+ * 673414 : directsoundsrc: Port to 1.0
+ * 681459 : rtmpsink: memory leak
+ * 685709 : mpeg4videoparse: AVI file with XVID video doesn't want to preroll: p_length.avi
+ * 685895 : mpegvideoparse: signal interlacing correctly in caps using new " interlace-mode " field
+ * 686009 : rtmpsink: handle RTMP_Write() return value correctly
+ * 686294 : tsdemux: Fix checking P-STD_buffer marker in PES header
+ * 686327 : mpegtsmux: fix refcount issue with input buffers
+ * 686358 : tsdemux: fix potential crash dereferencing NULL program pointer
+ * 686520 : wayland: update to wayland-protocol 0.99
+ * 686547 : rtpopuspay outputs unparseable caps
+ * 686595 : [mpg123] misc improvements and fixes
+ * 686774 : gst-plugins-bad/curl: add a comment describing function...
==== Download ====
@@ -113,21 +129,22 @@ Interested developers of the core library, plugins, and applications should
subscribe to the gstreamer-devel list.
-Applications
-
Contributors to this release
* Andoni Morales Alastruey
- * Christian Fredrik Kalager Schaller
- * Christophe Fergeau
+ * Carlos Rafael Giani
+ * David Régade
* Jan Schmidt
+ * Josep Torra
+ * Mark Nauwelaerts
* Michael Smith
- * Nicolas Dufresne
- * Rob Clark
- * Robert Swain
+ * Raimo Järvi
+ * Reynaldo H. Verdejo Pinochet
* Sebastian Dröge
- * Thiago Santos
+ * Sebastian Rasmussen
+ * Sergey N. Gorshkov
+ * Sreerenj Balachandran
+ * Thijs Vermeir
* Tim-Philipp Müller
- * Yaakov Selkowitz
- * Руслан Ижбулатов
+ * Wim Taymans
  \ No newline at end of file
diff --git a/common/Makefile.in b/common/Makefile.in
index 00ce3bde..ae87e4d3 100644
--- a/common/Makefile.in
+++ b/common/Makefile.in
@@ -223,6 +223,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/common/m4/Makefile.in b/common/m4/Makefile.in
index aef516ee..b82838bb 100644
--- a/common/m4/Makefile.in
+++ b/common/m4/Makefile.in
@@ -183,6 +183,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/config.h.in b/config.h.in
index d95c0e21..c9652c0c 100644
--- a/config.h.in
+++ b/config.h.in
@@ -79,6 +79,9 @@
/* Define to enable Windows ACM library (used by acm). */
#undef HAVE_ACM
+/* Define to enable Android Media (used by androidmedia). */
+#undef HAVE_ANDROID_MEDIA
+
/* Define to enable AirPort Express Wireless sink (used by apexsink). */
#undef HAVE_APEXSINK
@@ -211,6 +214,9 @@
/* Define to enable DVB Source (used by dvb). */
#undef HAVE_DVB
+/* Define to enable eglgles sink (used by eglgles). */
+#undef HAVE_EGLGLES
+
/* Define to enable building of experimental plug-ins. */
#undef HAVE_EXPERIMENTAL
@@ -364,6 +370,9 @@
/* Define to 1 if you have the <opencv2/highgui/highgui_c.h> header file. */
#undef HAVE_OPENCV2_HIGHGUI_HIGHGUI_C_H
+/* Define to enable OpenSL ES (used by opensl). */
+#undef HAVE_OPENSLES
+
/* Define to enable opus (used by opus). */
#undef HAVE_OPUS
diff --git a/configure b/configure
index 87422270..daa1b8aa 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.0.1.
+# Generated by GNU Autoconf 2.69 for GStreamer Bad Plug-ins 1.0.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.0.1'
-PACKAGE_STRING='GStreamer Bad Plug-ins 1.0.1'
+PACKAGE_VERSION='1.0.2'
+PACKAGE_STRING='GStreamer Bad Plug-ins 1.0.2'
PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer'
PACKAGE_URL=''
@@ -730,6 +730,10 @@ USE_TIMIDITY_FALSE
USE_TIMIDITY_TRUE
TIMIDITY_LIBS
TIMIDITY_CFLAGS
+USE_EGLGLES_FALSE
+USE_EGLGLES_TRUE
+EGLGLES_LIBS
+EGLGLES_CFLAGS
USE_RSVG_FALSE
USE_RSVG_TRUE
RSVG_2_35_0_LIBS
@@ -938,6 +942,8 @@ G_UDEV_LIBS
G_UDEV_CFLAGS
GST_VIDEO_LIBS
GST_VIDEO_CFLAGS
+USE_OPENSLES_FALSE
+USE_OPENSLES_TRUE
USE_VCD_FALSE
USE_VCD_TRUE
USE_SHM_FALSE
@@ -952,6 +958,8 @@ HAVE_IOS_FALSE
HAVE_IOS_TRUE
USE_APPLE_MEDIA_FALSE
USE_APPLE_MEDIA_TRUE
+USE_ANDROID_MEDIA_FALSE
+USE_ANDROID_MEDIA_TRUE
USE_DIRECTSHOW_FALSE
USE_DIRECTSHOW_TRUE
HAVE_DIRECTSHOW
@@ -1552,12 +1560,14 @@ enable_direct3d
enable_directdraw
enable_direct3d9
enable_directshow
+enable_android_media
enable_apple_media
enable_osx_video
enable_avc
enable_quicktime
enable_shm
enable_vcd
+enable_opensles
enable_uvch264
enable_assrender
enable_voamrwbenc
@@ -1605,6 +1615,7 @@ enable_opus
enable_pvr
with_pvr_external_headers
enable_rsvg
+enable_eglgles
enable_timidity
enable_teletextdec
enable_wildmidi
@@ -1763,6 +1774,8 @@ RSVG_CFLAGS
RSVG_LIBS
RSVG_2_35_0_CFLAGS
RSVG_2_35_0_LIBS
+EGLGLES_CFLAGS
+EGLGLES_LIBS
TIMIDITY_CFLAGS
TIMIDITY_LIBS
TELETEXTDEC_CFLAGS
@@ -2325,7 +2338,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.0.1 to adapt to many kinds of systems.
+\`configure' configures GStreamer Bad Plug-ins 1.0.2 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -2400,7 +2413,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of GStreamer Bad Plug-ins 1.0.1:";;
+ short | recursive ) echo "Configuration of GStreamer Bad Plug-ins 1.0.2:";;
esac
cat <<\_ACEOF
@@ -2512,12 +2525,14 @@ Optional Features:
--disable-directdraw disable DirectDraw plug-in: directdrawsink
--disable-direct3d9 disable Direct3D9: winscreencap
--disable-directshow disable DirectShow plug-in: winks
+ --disable-android_media disable Android Media: androidmedia
--disable-apple_media disable Apple video: applemedia
--disable-osx_video disable OSX video: osxvideosrc
--disable-avc disable AVC Video Services: avcsrc
--disable-quicktime disable QuickTime wrapper: qtwrapper
--disable-shm disable POSIX shared memory source and sink: shm
--disable-vcd disable Video CD: vcdsrc
+ --disable-opensles disable OpenSL ES: opensl
--disable-uvch264 disable UVC H264: uvch264
--disable-assrender disable ASS/SSA renderer: assrender
--disable-voamrwbenc disable vo-amrwbenc library: vo-amrwbenc
@@ -2563,6 +2578,7 @@ Optional Features:
--disable-opus disable opus: opus
--disable-pvr disable pvrvideosink: pvr
--disable-rsvg disable rsvg decoder: rsvg
+ --disable-eglgles disable eglgles sink: eglgles
--disable-timidity disable timidity midi soft synth plugin: timidity
--disable-teletextdec disable Teletext decoder: teletextdec
--disable-wildmidi disable wildmidi midi soft synth plugin: wildmidi
@@ -2829,6 +2845,10 @@ Some influential environment variables:
C compiler flags for RSVG_2_35_0, overriding pkg-config
RSVG_2_35_0_LIBS
linker flags for RSVG_2_35_0, overriding pkg-config
+ EGLGLES_CFLAGS
+ C compiler flags for EGLGLES, overriding pkg-config
+ EGLGLES_LIBS
+ linker flags for EGLGLES, overriding pkg-config
TIMIDITY_CFLAGS
C compiler flags for TIMIDITY, overriding pkg-config
TIMIDITY_LIBS
@@ -2933,7 +2953,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-GStreamer Bad Plug-ins configure 1.0.1
+GStreamer Bad Plug-ins configure 1.0.2
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -3906,7 +3926,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.0.1, which was
+It was created by GStreamer Bad Plug-ins $as_me 1.0.2, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -4840,7 +4860,7 @@ fi
# Define the identity of the package.
PACKAGE='gst-plugins-bad'
- VERSION='1.0.1'
+ VERSION='1.0.2'
cat >>confdefs.h <<_ACEOF
@@ -4963,9 +4983,9 @@ $as_echo "$am_cv_prog_tar_ustar" >&6; }
- PACKAGE_VERSION_MAJOR=$(echo 1.0.1 | cut -d'.' -f1)
- PACKAGE_VERSION_MINOR=$(echo 1.0.1 | cut -d'.' -f2)
- PACKAGE_VERSION_MICRO=$(echo 1.0.1 | cut -d'.' -f3)
+ PACKAGE_VERSION_MAJOR=$(echo 1.0.2 | cut -d'.' -f1)
+ PACKAGE_VERSION_MINOR=$(echo 1.0.2 | cut -d'.' -f2)
+ PACKAGE_VERSION_MICRO=$(echo 1.0.2 | cut -d'.' -f3)
@@ -4976,7 +4996,7 @@ $as_echo "$am_cv_prog_tar_ustar" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking nano version" >&5
$as_echo_n "checking nano version... " >&6; }
- NANO=$(echo 1.0.1 | cut -d'.' -f4)
+ NANO=$(echo 1.0.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
@@ -9560,10 +9580,10 @@ fi
done
- GST_CURRENT=1
+ GST_CURRENT=2
GST_REVISION=0
- GST_AGE=1
- GST_LIBVERSION=1:0:1
+ GST_AGE=2
+ GST_LIBVERSION=2:0:2
@@ -27686,21 +27706,21 @@ _ACEOF
-GST_PLUGINS_NONPORTED=" aiff \
+GST_PLUGINS_NONPORTED=" androidmedia aiff \
cdxaparse \
- dccp faceoverlay \
- fieldanalysis freeverb \
+ dccp eglgles faceoverlay \
+ freeverb \
hdvparse ivfparse jp2kdecimator \
kate librfb \
mpegpsmux mve mxf mythtv nsf nuvdemux \
patchdetect real \
- sdi subenc stereo tta videofilters \
+ sdi stereo tta videofilters \
videomeasure videosignal vmnc \
decklink fbdev linsys vcd \
apexsink cdaudio cog dc1394 dirac directfb \
gsettings jasper ladspa \
- musepack musicbrainz nas neon ofa openal rsvg sdl sndfile timidity \
- directsound directdraw direct3d9 acm wininet \
+ musepack musicbrainz nas neon ofa openal opensles rsvg sdl sndfile timidity \
+ directdraw direct3d9 acm wininet \
wildmidi xvid lv2 teletextdec sndio uvch264"
@@ -31287,6 +31307,110 @@ fi
+HAVE_ANDROID_MEDIA="no"
+echo
+{ $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: Android Media ***" >&5
+$as_echo "$as_me: *** checking feature: Android Media ***" >&6;}
+if test "xandroidmedia" != "x"
+then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: *** for plug-ins: androidmedia ***" >&5
+$as_echo "$as_me: *** for plug-ins: androidmedia ***" >&6;}
+fi
+NOUSE=
+if test "x$USE_ANDROID_MEDIA" = "xno"; then
+ NOUSE="yes"
+fi
+# Check whether --enable-android_media was given.
+if test "${enable_android_media+set}" = set; then :
+ enableval=$enable_android_media; case "${enableval}" in
+ yes) USE_ANDROID_MEDIA=yes;;
+ no) USE_ANDROID_MEDIA=no;;
+ *) as_fn_error $? "bad value ${enableval} for --enable-android_media" "$LINENO" 5 ;;
+ esac
+else
+ USE_ANDROID_MEDIA=yes
+fi
+
+if test "x$NOUSE" = "xyes"; then
+ USE_ANDROID_MEDIA="no"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** androidmedia pre-configured not to be built" >&5
+$as_echo "$as_me: WARNING: *** androidmedia pre-configured not to be built" >&2;}
+fi
+NOUSE=
+
+if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " ANDROID_MEDIA " > /dev/null; then
+ USE_ANDROID_MEDIA="no"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** androidmedia not ported" >&5
+$as_echo "$as_me: WARNING: *** androidmedia not ported" >&2;}
+fi
+
+
+if test x$USE_ANDROID_MEDIA = xyes; then
+
+ gst_check_save_LIBS=$LIBS
+ gst_check_save_LDFLAGS=$LDFLAGS
+ gst_check_save_CFLAGS=$CFLAGS
+ gst_check_save_CPPFLAGS=$CPPFLAGS
+ gst_check_save_CXXFLAGS=$CXXFLAGS
+
+ HAVE_ANDROID_MEDIA=no
+
+ case "$host" in
+ *android*)
+ ac_fn_c_check_header_mongrel "$LINENO" "jni.h" "ac_cv_header_jni_h" "$ac_includes_default"
+if test "x$ac_cv_header_jni_h" = xyes; then :
+ HAVE_ANDROID_MEDIA="yes"
+else
+ HAVE_ANDROID_MEDIA="no"
+fi
+
+
+ ;;
+ *)
+ HAVE_ANDROID_MEDIA="no"
+ ;;
+ esac
+
+
+ LIBS=$gst_check_save_LIBS
+ LDFLAGS=$gst_check_save_LDFLAGS
+ CFLAGS=$gst_check_save_CFLAGS
+ CPPFLAGS=$gst_check_save_CPPFLAGS
+ CXXFLAGS=$gst_check_save_CXXFLAGS
+
+ if test x$HAVE_ANDROID_MEDIA = xno; then
+ USE_ANDROID_MEDIA=no
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will be built: androidmedia" >&5
+$as_echo "$as_me: *** These plugins will be built: androidmedia" >&6;}
+ fi
+fi
+if test x$USE_ANDROID_MEDIA = xyes; then
+ :
+ if test "xandroidmedia" != "x"; then
+ GST_PLUGINS_YES="\tandroidmedia\n$GST_PLUGINS_YES"
+ fi
+
+$as_echo "#define HAVE_ANDROID_MEDIA /**/" >>confdefs.h
+
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will not be built: androidmedia" >&5
+$as_echo "$as_me: *** These plugins will not be built: androidmedia" >&6;}
+ if test "xandroidmedia" != "x"; then
+ GST_PLUGINS_NO="\tandroidmedia\n$GST_PLUGINS_NO"
+ fi
+ :
+fi
+ if test x$USE_ANDROID_MEDIA = xyes; then
+ USE_ANDROID_MEDIA_TRUE=
+ USE_ANDROID_MEDIA_FALSE='#'
+else
+ USE_ANDROID_MEDIA_TRUE='#'
+ USE_ANDROID_MEDIA_FALSE=
+fi
+
+
+
HAVE_APPLE_MEDIA="no"
echo
{ $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: Apple video ***" >&5
@@ -31987,6 +32111,101 @@ fi
+echo
+{ $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: OpenSL ES ***" >&5
+$as_echo "$as_me: *** checking feature: OpenSL ES ***" >&6;}
+if test "xopensl" != "x"
+then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: *** for plug-ins: opensl ***" >&5
+$as_echo "$as_me: *** for plug-ins: opensl ***" >&6;}
+fi
+NOUSE=
+if test "x$USE_OPENSLES" = "xno"; then
+ NOUSE="yes"
+fi
+# Check whether --enable-opensles was given.
+if test "${enable_opensles+set}" = set; then :
+ enableval=$enable_opensles; case "${enableval}" in
+ yes) USE_OPENSLES=yes;;
+ no) USE_OPENSLES=no;;
+ *) as_fn_error $? "bad value ${enableval} for --enable-opensles" "$LINENO" 5 ;;
+ esac
+else
+ USE_OPENSLES=yes
+fi
+
+if test "x$NOUSE" = "xyes"; then
+ USE_OPENSLES="no"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** opensl pre-configured not to be built" >&5
+$as_echo "$as_me: WARNING: *** opensl pre-configured not to be built" >&2;}
+fi
+NOUSE=
+
+if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " OPENSLES " > /dev/null; then
+ USE_OPENSLES="no"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** opensl not ported" >&5
+$as_echo "$as_me: WARNING: *** opensl not ported" >&2;}
+fi
+
+
+if test x$USE_OPENSLES = xyes; then
+
+ gst_check_save_LIBS=$LIBS
+ gst_check_save_LDFLAGS=$LDFLAGS
+ gst_check_save_CFLAGS=$CFLAGS
+ gst_check_save_CPPFLAGS=$CPPFLAGS
+ gst_check_save_CXXFLAGS=$CXXFLAGS
+
+ HAVE_OPENSLES=no
+
+ ac_fn_c_check_header_mongrel "$LINENO" "SLES/OpenSLES.h" "ac_cv_header_SLES_OpenSLES_h" "$ac_includes_default"
+if test "x$ac_cv_header_SLES_OpenSLES_h" = xyes; then :
+ HAVE_OPENSLES="yes"
+else
+ HAVE_OPENSLES="no"
+fi
+
+
+
+
+ LIBS=$gst_check_save_LIBS
+ LDFLAGS=$gst_check_save_LDFLAGS
+ CFLAGS=$gst_check_save_CFLAGS
+ CPPFLAGS=$gst_check_save_CPPFLAGS
+ CXXFLAGS=$gst_check_save_CXXFLAGS
+
+ if test x$HAVE_OPENSLES = xno; then
+ USE_OPENSLES=no
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will be built: opensl" >&5
+$as_echo "$as_me: *** These plugins will be built: opensl" >&6;}
+ fi
+fi
+if test x$USE_OPENSLES = xyes; then
+ :
+ if test "xopensl" != "x"; then
+ GST_PLUGINS_YES="\topensl\n$GST_PLUGINS_YES"
+ fi
+
+$as_echo "#define HAVE_OPENSLES /**/" >>confdefs.h
+
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will not be built: opensl" >&5
+$as_echo "$as_me: *** These plugins will not be built: opensl" >&6;}
+ if test "xopensl" != "x"; then
+ GST_PLUGINS_NO="\topensl\n$GST_PLUGINS_NO"
+ fi
+ :
+fi
+ if test x$USE_OPENSLES = xyes; then
+ USE_OPENSLES_TRUE=
+ USE_OPENSLES_FALSE='#'
+else
+ USE_OPENSLES_TRUE='#'
+ USE_OPENSLES_FALSE=
+fi
+
+
echo
{ $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: UVC H264 ***" >&5
@@ -35031,12 +35250,12 @@ if test -n "$PKG_CONFIG"; then
pkg_cv_WAYLAND_CFLAGS="$WAYLAND_CFLAGS"
else
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"wayland-client >= 0.95.0\""; } >&5
- ($PKG_CONFIG --exists --print-errors "wayland-client >= 0.95.0") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"wayland-client >= 1.0.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "wayland-client >= 1.0.0") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_WAYLAND_CFLAGS=`$PKG_CONFIG --cflags "wayland-client >= 0.95.0" 2>/dev/null`
+ pkg_cv_WAYLAND_CFLAGS=`$PKG_CONFIG --cflags "wayland-client >= 1.0.0" 2>/dev/null`
else
pkg_failed=yes
fi
@@ -35049,12 +35268,12 @@ if test -n "$PKG_CONFIG"; then
pkg_cv_WAYLAND_LIBS="$WAYLAND_LIBS"
else
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"wayland-client >= 0.95.0\""; } >&5
- ($PKG_CONFIG --exists --print-errors "wayland-client >= 0.95.0") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"wayland-client >= 1.0.0\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "wayland-client >= 1.0.0") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_WAYLAND_LIBS=`$PKG_CONFIG --libs "wayland-client >= 0.95.0" 2>/dev/null`
+ pkg_cv_WAYLAND_LIBS=`$PKG_CONFIG --libs "wayland-client >= 1.0.0" 2>/dev/null`
else
pkg_failed=yes
fi
@@ -35073,9 +35292,9 @@ else
_pkg_short_errors_supported=no
fi
if test $_pkg_short_errors_supported = yes; then
- WAYLAND_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "wayland-client >= 0.95.0"`
+ WAYLAND_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "wayland-client >= 1.0.0"`
else
- WAYLAND_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "wayland-client >= 0.95.0"`
+ WAYLAND_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "wayland-client >= 1.0.0"`
fi
# Put the nasty error message in config.log where it belongs
echo "$WAYLAND_PKG_ERRORS" >&5
@@ -41764,6 +41983,378 @@ fi
echo
+{ $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: eglgles sink ***" >&5
+$as_echo "$as_me: *** checking feature: eglgles sink ***" >&6;}
+if test "xeglgles" != "x"
+then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: *** for plug-ins: eglgles ***" >&5
+$as_echo "$as_me: *** for plug-ins: eglgles ***" >&6;}
+fi
+NOUSE=
+if test "x$USE_EGLGLES" = "xno"; then
+ NOUSE="yes"
+fi
+# Check whether --enable-eglgles was given.
+if test "${enable_eglgles+set}" = set; then :
+ enableval=$enable_eglgles; case "${enableval}" in
+ yes) USE_EGLGLES=yes;;
+ no) USE_EGLGLES=no;;
+ *) as_fn_error $? "bad value ${enableval} for --enable-eglgles" "$LINENO" 5 ;;
+ esac
+else
+ USE_EGLGLES=yes
+fi
+
+if test "x$NOUSE" = "xyes"; then
+ USE_EGLGLES="no"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** eglgles pre-configured not to be built" >&5
+$as_echo "$as_me: WARNING: *** eglgles pre-configured not to be built" >&2;}
+fi
+NOUSE=
+
+if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " EGLGLES " > /dev/null; then
+ USE_EGLGLES="no"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** eglgles not ported" >&5
+$as_echo "$as_me: WARNING: *** eglgles not ported" >&2;}
+fi
+
+
+if test x$USE_EGLGLES = xyes; then
+
+ gst_check_save_LIBS=$LIBS
+ gst_check_save_LDFLAGS=$LDFLAGS
+ gst_check_save_CFLAGS=$CFLAGS
+ gst_check_save_CPPFLAGS=$CPPFLAGS
+ gst_check_save_CXXFLAGS=$CXXFLAGS
+
+ HAVE_EGLGLES=no
+
+ HAVE_EGLGLES="no"
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for EGLGLES" >&5
+$as_echo_n "checking for EGLGLES... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+ if test -n "$EGLGLES_CFLAGS"; then
+ pkg_cv_EGLGLES_CFLAGS="$EGLGLES_CFLAGS"
+ else
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"egl glesv2\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "egl glesv2") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_EGLGLES_CFLAGS=`$PKG_CONFIG --cflags "egl glesv2" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ fi
+else
+ pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+ if test -n "$EGLGLES_LIBS"; then
+ pkg_cv_EGLGLES_LIBS="$EGLGLES_LIBS"
+ else
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"egl glesv2\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "egl glesv2") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_EGLGLES_LIBS=`$PKG_CONFIG --libs "egl glesv2" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ fi
+else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ EGLGLES_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "egl glesv2"`
+ else
+ EGLGLES_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "egl glesv2"`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$EGLGLES_PKG_ERRORS" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+ HAVE_EGLGLES="no"
+ old_LIBS=$LIBS
+ old_CFLAGS=$CFLAGS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for glEnable in -lGLESv2" >&5
+$as_echo_n "checking for glEnable in -lGLESv2... " >&6; }
+if ${ac_cv_lib_GLESv2_glEnable+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lGLESv2 $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char glEnable ();
+int
+main ()
+{
+return glEnable ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_GLESv2_glEnable=yes
+else
+ ac_cv_lib_GLESv2_glEnable=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_GLESv2_glEnable" >&5
+$as_echo "$ac_cv_lib_GLESv2_glEnable" >&6; }
+if test "x$ac_cv_lib_GLESv2_glEnable" = xyes; then :
+
+ ac_fn_c_check_header_mongrel "$LINENO" "GLES2/gl2.h" "ac_cv_header_GLES2_gl2_h" "$ac_includes_default"
+if test "x$ac_cv_header_GLES2_gl2_h" = xyes; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for eglGetProcAddress in -lEGL" >&5
+$as_echo_n "checking for eglGetProcAddress in -lEGL... " >&6; }
+if ${ac_cv_lib_EGL_eglGetProcAddress+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lEGL $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char eglGetProcAddress ();
+int
+main ()
+{
+return eglGetProcAddress ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_EGL_eglGetProcAddress=yes
+else
+ ac_cv_lib_EGL_eglGetProcAddress=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_EGL_eglGetProcAddress" >&5
+$as_echo "$ac_cv_lib_EGL_eglGetProcAddress" >&6; }
+if test "x$ac_cv_lib_EGL_eglGetProcAddress" = xyes; then :
+
+ ac_fn_c_check_header_mongrel "$LINENO" "EGL/egl.h" "ac_cv_header_EGL_egl_h" "$ac_includes_default"
+if test "x$ac_cv_header_EGL_egl_h" = xyes; then :
+
+ HAVE_EGLGLES="yes"
+ EGLGLES_LIBS="-lGLESv2 -lEGL"
+ EGLGLES_CFLAGS=""
+
+fi
+
+
+
+fi
+
+
+fi
+
+
+
+fi
+
+ LIBS=$old_LIBS
+ CFLAGS=$old_CFLAGS
+
+elif test $pkg_failed = untried; then
+
+ HAVE_EGLGLES="no"
+ old_LIBS=$LIBS
+ old_CFLAGS=$CFLAGS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for glEnable in -lGLESv2" >&5
+$as_echo_n "checking for glEnable in -lGLESv2... " >&6; }
+if ${ac_cv_lib_GLESv2_glEnable+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lGLESv2 $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char glEnable ();
+int
+main ()
+{
+return glEnable ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_GLESv2_glEnable=yes
+else
+ ac_cv_lib_GLESv2_glEnable=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_GLESv2_glEnable" >&5
+$as_echo "$ac_cv_lib_GLESv2_glEnable" >&6; }
+if test "x$ac_cv_lib_GLESv2_glEnable" = xyes; then :
+
+ ac_fn_c_check_header_mongrel "$LINENO" "GLES2/gl2.h" "ac_cv_header_GLES2_gl2_h" "$ac_includes_default"
+if test "x$ac_cv_header_GLES2_gl2_h" = xyes; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for eglGetProcAddress in -lEGL" >&5
+$as_echo_n "checking for eglGetProcAddress in -lEGL... " >&6; }
+if ${ac_cv_lib_EGL_eglGetProcAddress+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lEGL $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char eglGetProcAddress ();
+int
+main ()
+{
+return eglGetProcAddress ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_lib_EGL_eglGetProcAddress=yes
+else
+ ac_cv_lib_EGL_eglGetProcAddress=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_EGL_eglGetProcAddress" >&5
+$as_echo "$ac_cv_lib_EGL_eglGetProcAddress" >&6; }
+if test "x$ac_cv_lib_EGL_eglGetProcAddress" = xyes; then :
+
+ ac_fn_c_check_header_mongrel "$LINENO" "EGL/egl.h" "ac_cv_header_EGL_egl_h" "$ac_includes_default"
+if test "x$ac_cv_header_EGL_egl_h" = xyes; then :
+
+ HAVE_EGLGLES="yes"
+ EGLGLES_LIBS="-lGLESv2 -lEGL"
+ EGLGLES_CFLAGS=""
+
+fi
+
+
+
+fi
+
+
+fi
+
+
+
+fi
+
+ LIBS=$old_LIBS
+ CFLAGS=$old_CFLAGS
+
+else
+ EGLGLES_CFLAGS=$pkg_cv_EGLGLES_CFLAGS
+ EGLGLES_LIBS=$pkg_cv_EGLGLES_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ HAVE_EGLGLES="yes"
+fi
+
+
+
+
+ LIBS=$gst_check_save_LIBS
+ LDFLAGS=$gst_check_save_LDFLAGS
+ CFLAGS=$gst_check_save_CFLAGS
+ CPPFLAGS=$gst_check_save_CPPFLAGS
+ CXXFLAGS=$gst_check_save_CXXFLAGS
+
+ if test x$HAVE_EGLGLES = xno; then
+ USE_EGLGLES=no
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will be built: eglgles" >&5
+$as_echo "$as_me: *** These plugins will be built: eglgles" >&6;}
+ fi
+fi
+if test x$USE_EGLGLES = xyes; then
+ :
+ if test "xeglgles" != "x"; then
+ GST_PLUGINS_YES="\teglgles\n$GST_PLUGINS_YES"
+ fi
+
+$as_echo "#define HAVE_EGLGLES /**/" >>confdefs.h
+
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will not be built: eglgles" >&5
+$as_echo "$as_me: *** These plugins will not be built: eglgles" >&6;}
+ if test "xeglgles" != "x"; then
+ GST_PLUGINS_NO="\teglgles\n$GST_PLUGINS_NO"
+ fi
+ :
+fi
+ if test x$USE_EGLGLES = xyes; then
+ USE_EGLGLES_TRUE=
+ USE_EGLGLES_FALSE='#'
+else
+ USE_EGLGLES_TRUE='#'
+ USE_EGLGLES_FALSE=
+fi
+
+
+
+echo
{ $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: timidity midi soft synth plugin ***" >&5
$as_echo "$as_me: *** checking feature: timidity midi soft synth plugin ***" >&6;}
if test "xtimidity" != "x"
@@ -48429,7 +49020,7 @@ GST_PLUGIN_LDFLAGS="-module -avoid-version -export-symbols-regex '^_*gst_plugin_
-ac_config_files="$ac_config_files Makefile common/Makefile common/m4/Makefile gst-plugins-bad.spec gst/Makefile gst/adpcmdec/Makefile gst/adpcmenc/Makefile gst/aiff/Makefile gst/asfmux/Makefile gst/audiovisualizers/Makefile gst/autoconvert/Makefile gst/bayer/Makefile gst/camerabin2/Makefile gst/cdxaparse/Makefile gst/coloreffects/Makefile gst/dataurisrc/Makefile gst/dccp/Makefile gst/debugutils/Makefile gst/dtmf/Makefile gst/dvbsuboverlay/Makefile gst/dvdspu/Makefile gst/faceoverlay/Makefile gst/festival/Makefile gst/fieldanalysis/Makefile gst/freeverb/Makefile gst/frei0r/Makefile gst/gaudieffects/Makefile gst/geometrictransform/Makefile gst/gdp/Makefile gst/hdvparse/Makefile gst/hls/Makefile gst/id3tag/Makefile gst/inter/Makefile gst/interlace/Makefile gst/ivfparse/Makefile gst/jp2kdecimator/Makefile gst/jpegformat/Makefile gst/librfb/Makefile gst/liveadder/Makefile gst/mpegdemux/Makefile gst/mpegtsdemux/Makefile gst/mpegtsmux/Makefile gst/mpegtsmux/tsmux/Makefile gst/mpegpsmux/Makefile gst/mve/Makefile gst/mxf/Makefile gst/nsf/Makefile gst/nuvdemux/Makefile gst/patchdetect/Makefile gst/pcapparse/Makefile gst/pnm/Makefile gst/rawparse/Makefile gst/real/Makefile gst/removesilence/Makefile gst/rtpmux/Makefile gst/rtpvp8/Makefile gst/scaletempo/Makefile gst/sdi/Makefile gst/sdp/Makefile gst/segmentclip/Makefile gst/siren/Makefile gst/smooth/Makefile gst/speed/Makefile gst/subenc/Makefile gst/stereo/Makefile gst/tta/Makefile gst/videofilters/Makefile gst/videomeasure/Makefile gst/videoparsers/Makefile gst/videosignal/Makefile gst/vmnc/Makefile gst/y4m/Makefile gst-libs/Makefile gst-libs/gst/Makefile gst-libs/gst/basecamerabinsrc/Makefile gst-libs/gst/interfaces/Makefile gst-libs/gst/signalprocessor/Makefile gst-libs/gst/codecparsers/Makefile gst-libs/gst/video/Makefile sys/Makefile sys/dshowdecwrapper/Makefile sys/acmenc/Makefile sys/acmmp3dec/Makefile sys/applemedia/Makefile sys/avc/Makefile sys/d3dvideosink/Makefile sys/decklink/Makefile sys/directdraw/Makefile sys/directsound/Makefile sys/dshowsrcwrapper/Makefile sys/dshowvideosink/Makefile sys/dvb/Makefile sys/fbdev/Makefile sys/linsys/Makefile sys/osxvideo/Makefile sys/qtwrapper/Makefile sys/shm/Makefile sys/uvch264/Makefile sys/vcd/Makefile sys/vdpau/Makefile sys/vdpau/gstvdp/Makefile sys/vdpau/basevideodecoder/Makefile sys/pvr2d/Makefile sys/wasapi/Makefile sys/wininet/Makefile sys/winks/Makefile sys/winscreencap/Makefile tests/Makefile tests/check/Makefile tests/files/Makefile tests/examples/Makefile tests/examples/camerabin2/Makefile tests/examples/directfb/Makefile tests/examples/mxf/Makefile tests/examples/scaletempo/Makefile tests/examples/opencv/Makefile tests/examples/uvch264/Makefile tests/icles/Makefile ext/voamrwbenc/Makefile ext/voaacenc/Makefile ext/assrender/Makefile ext/apexsink/Makefile ext/bz2/Makefile ext/cdaudio/Makefile ext/celt/Makefile ext/chromaprint/Makefile ext/cog/Makefile ext/curl/Makefile ext/dc1394/Makefile ext/dirac/Makefile ext/directfb/Makefile ext/wayland/Makefile ext/dts/Makefile ext/faac/Makefile ext/faad/Makefile ext/flite/Makefile ext/gsm/Makefile ext/jasper/Makefile ext/kate/Makefile ext/ladspa/Makefile ext/lv2/Makefile ext/libmms/Makefile ext/Makefile ext/modplug/Makefile ext/mpeg2enc/Makefile ext/mpg123/Makefile ext/mimic/Makefile ext/mplex/Makefile ext/musepack/Makefile ext/musicbrainz/Makefile ext/mythtv/Makefile ext/nas/Makefile ext/neon/Makefile ext/ofa/Makefile ext/openal/Makefile ext/opencv/Makefile ext/opus/Makefile ext/rsvg/Makefile ext/resindvd/Makefile ext/rtmp/Makefile ext/schroedinger/Makefile ext/sdl/Makefile ext/sndfile/Makefile ext/soundtouch/Makefile ext/spandsp/Makefile ext/sndio/Makefile ext/teletextdec/Makefile ext/gme/Makefile ext/gsettings/Makefile ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml ext/spc/Makefile ext/swfdec/Makefile ext/timidity/Makefile ext/xvid/Makefile ext/zbar/Makefile po/Makefile.in docs/Makefile docs/plugins/Makefile docs/libs/Makefile docs/version.entities pkgconfig/Makefile pkgconfig/gstreamer-plugins-bad.pc pkgconfig/gstreamer-plugins-bad-uninstalled.pc pkgconfig/gstreamer-codecparsers.pc pkgconfig/gstreamer-codecparsers-uninstalled.pc pkgconfig/gstreamer-basevideo.pc pkgconfig/gstreamer-basevideo-uninstalled.pc tools/Makefile m4/Makefile win32/common/config.h"
+ac_config_files="$ac_config_files Makefile common/Makefile common/m4/Makefile gst-plugins-bad.spec gst/Makefile gst/adpcmdec/Makefile gst/adpcmenc/Makefile gst/aiff/Makefile gst/asfmux/Makefile gst/audiovisualizers/Makefile gst/autoconvert/Makefile gst/bayer/Makefile gst/camerabin2/Makefile gst/cdxaparse/Makefile gst/coloreffects/Makefile gst/dataurisrc/Makefile gst/dccp/Makefile gst/debugutils/Makefile gst/dtmf/Makefile gst/dvbsuboverlay/Makefile gst/dvdspu/Makefile gst/faceoverlay/Makefile gst/festival/Makefile gst/fieldanalysis/Makefile gst/freeverb/Makefile gst/frei0r/Makefile gst/gaudieffects/Makefile gst/geometrictransform/Makefile gst/gdp/Makefile gst/hdvparse/Makefile gst/hls/Makefile gst/id3tag/Makefile gst/inter/Makefile gst/interlace/Makefile gst/ivfparse/Makefile gst/jp2kdecimator/Makefile gst/jpegformat/Makefile gst/librfb/Makefile gst/liveadder/Makefile gst/mpegdemux/Makefile gst/mpegtsdemux/Makefile gst/mpegtsmux/Makefile gst/mpegtsmux/tsmux/Makefile gst/mpegpsmux/Makefile gst/mve/Makefile gst/mxf/Makefile gst/nsf/Makefile gst/nuvdemux/Makefile gst/patchdetect/Makefile gst/pcapparse/Makefile gst/pnm/Makefile gst/rawparse/Makefile gst/real/Makefile gst/removesilence/Makefile gst/rtpmux/Makefile gst/rtpvp8/Makefile gst/scaletempo/Makefile gst/sdi/Makefile gst/sdp/Makefile gst/segmentclip/Makefile gst/siren/Makefile gst/smooth/Makefile gst/speed/Makefile gst/subenc/Makefile gst/stereo/Makefile gst/tta/Makefile gst/videofilters/Makefile gst/videomeasure/Makefile gst/videoparsers/Makefile gst/videosignal/Makefile gst/vmnc/Makefile gst/y4m/Makefile gst-libs/Makefile gst-libs/gst/Makefile gst-libs/gst/basecamerabinsrc/Makefile gst-libs/gst/interfaces/Makefile gst-libs/gst/signalprocessor/Makefile gst-libs/gst/codecparsers/Makefile gst-libs/gst/video/Makefile sys/Makefile sys/dshowdecwrapper/Makefile sys/acmenc/Makefile sys/acmmp3dec/Makefile sys/androidmedia/Makefile sys/applemedia/Makefile sys/avc/Makefile sys/d3dvideosink/Makefile sys/decklink/Makefile sys/directdraw/Makefile sys/directsound/Makefile sys/dshowsrcwrapper/Makefile sys/dshowvideosink/Makefile sys/dvb/Makefile sys/fbdev/Makefile sys/linsys/Makefile sys/opensles/Makefile sys/osxvideo/Makefile sys/qtwrapper/Makefile sys/shm/Makefile sys/uvch264/Makefile sys/vcd/Makefile sys/vdpau/Makefile sys/vdpau/gstvdp/Makefile sys/vdpau/basevideodecoder/Makefile sys/pvr2d/Makefile sys/wasapi/Makefile sys/wininet/Makefile sys/winks/Makefile sys/winscreencap/Makefile tests/Makefile tests/check/Makefile tests/files/Makefile tests/examples/Makefile tests/examples/camerabin2/Makefile tests/examples/directfb/Makefile tests/examples/mxf/Makefile tests/examples/scaletempo/Makefile tests/examples/opencv/Makefile tests/examples/uvch264/Makefile tests/icles/Makefile ext/voamrwbenc/Makefile ext/voaacenc/Makefile ext/assrender/Makefile ext/apexsink/Makefile ext/bz2/Makefile ext/cdaudio/Makefile ext/celt/Makefile ext/chromaprint/Makefile ext/cog/Makefile ext/curl/Makefile ext/dc1394/Makefile ext/dirac/Makefile ext/directfb/Makefile ext/wayland/Makefile ext/dts/Makefile ext/eglgles/Makefile ext/faac/Makefile ext/faad/Makefile ext/flite/Makefile ext/gsm/Makefile ext/jasper/Makefile ext/kate/Makefile ext/ladspa/Makefile ext/lv2/Makefile ext/libmms/Makefile ext/Makefile ext/modplug/Makefile ext/mpeg2enc/Makefile ext/mpg123/Makefile ext/mimic/Makefile ext/mplex/Makefile ext/musepack/Makefile ext/musicbrainz/Makefile ext/mythtv/Makefile ext/nas/Makefile ext/neon/Makefile ext/ofa/Makefile ext/openal/Makefile ext/opencv/Makefile ext/opus/Makefile ext/rsvg/Makefile ext/resindvd/Makefile ext/rtmp/Makefile ext/schroedinger/Makefile ext/sdl/Makefile ext/sndfile/Makefile ext/soundtouch/Makefile ext/spandsp/Makefile ext/sndio/Makefile ext/teletextdec/Makefile ext/gme/Makefile ext/gsettings/Makefile ext/gsettings/org.freedesktop.gstreamer.default-elements.gschema.xml ext/spc/Makefile ext/swfdec/Makefile ext/timidity/Makefile ext/xvid/Makefile ext/zbar/Makefile po/Makefile.in docs/Makefile docs/plugins/Makefile docs/libs/Makefile docs/version.entities pkgconfig/Makefile pkgconfig/gstreamer-plugins-bad.pc pkgconfig/gstreamer-plugins-bad-uninstalled.pc pkgconfig/gstreamer-codecparsers.pc pkgconfig/gstreamer-codecparsers-uninstalled.pc pkgconfig/gstreamer-basevideo.pc pkgconfig/gstreamer-basevideo-uninstalled.pc tools/Makefile m4/Makefile win32/common/config.h"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
@@ -49006,6 +49597,10 @@ if test -z "${USE_DIRECTSHOW_TRUE}" && test -z "${USE_DIRECTSHOW_FALSE}"; then
as_fn_error $? "conditional \"USE_DIRECTSHOW\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${USE_ANDROID_MEDIA_TRUE}" && test -z "${USE_ANDROID_MEDIA_FALSE}"; then
+ as_fn_error $? "conditional \"USE_ANDROID_MEDIA\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${USE_APPLE_MEDIA_TRUE}" && test -z "${USE_APPLE_MEDIA_FALSE}"; then
as_fn_error $? "conditional \"USE_APPLE_MEDIA\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -49034,6 +49629,10 @@ if test -z "${USE_VCD_TRUE}" && test -z "${USE_VCD_FALSE}"; then
as_fn_error $? "conditional \"USE_VCD\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${USE_OPENSLES_TRUE}" && test -z "${USE_OPENSLES_FALSE}"; then
+ as_fn_error $? "conditional \"USE_OPENSLES\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${USE_UVCH264_TRUE}" && test -z "${USE_UVCH264_FALSE}"; then
as_fn_error $? "conditional \"USE_UVCH264\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -49230,6 +49829,10 @@ if test -z "${USE_RSVG_TRUE}" && test -z "${USE_RSVG_FALSE}"; then
as_fn_error $? "conditional \"USE_RSVG\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${USE_EGLGLES_TRUE}" && test -z "${USE_EGLGLES_FALSE}"; then
+ as_fn_error $? "conditional \"USE_EGLGLES\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${USE_TIMIDITY_TRUE}" && test -z "${USE_TIMIDITY_FALSE}"; then
as_fn_error $? "conditional \"USE_TIMIDITY\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -49979,7 +50582,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.0.1, which was
+This file was extended by GStreamer Bad Plug-ins $as_me 1.0.2, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -50045,7 +50648,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.0.1
+GStreamer Bad Plug-ins config.status 1.0.2
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
@@ -50664,6 +51267,7 @@ do
"sys/dshowdecwrapper/Makefile") CONFIG_FILES="$CONFIG_FILES sys/dshowdecwrapper/Makefile" ;;
"sys/acmenc/Makefile") CONFIG_FILES="$CONFIG_FILES sys/acmenc/Makefile" ;;
"sys/acmmp3dec/Makefile") CONFIG_FILES="$CONFIG_FILES sys/acmmp3dec/Makefile" ;;
+ "sys/androidmedia/Makefile") CONFIG_FILES="$CONFIG_FILES sys/androidmedia/Makefile" ;;
"sys/applemedia/Makefile") CONFIG_FILES="$CONFIG_FILES sys/applemedia/Makefile" ;;
"sys/avc/Makefile") CONFIG_FILES="$CONFIG_FILES sys/avc/Makefile" ;;
"sys/d3dvideosink/Makefile") CONFIG_FILES="$CONFIG_FILES sys/d3dvideosink/Makefile" ;;
@@ -50675,6 +51279,7 @@ do
"sys/dvb/Makefile") CONFIG_FILES="$CONFIG_FILES sys/dvb/Makefile" ;;
"sys/fbdev/Makefile") CONFIG_FILES="$CONFIG_FILES sys/fbdev/Makefile" ;;
"sys/linsys/Makefile") CONFIG_FILES="$CONFIG_FILES sys/linsys/Makefile" ;;
+ "sys/opensles/Makefile") CONFIG_FILES="$CONFIG_FILES sys/opensles/Makefile" ;;
"sys/osxvideo/Makefile") CONFIG_FILES="$CONFIG_FILES sys/osxvideo/Makefile" ;;
"sys/qtwrapper/Makefile") CONFIG_FILES="$CONFIG_FILES sys/qtwrapper/Makefile" ;;
"sys/shm/Makefile") CONFIG_FILES="$CONFIG_FILES sys/shm/Makefile" ;;
@@ -50714,6 +51319,7 @@ do
"ext/directfb/Makefile") CONFIG_FILES="$CONFIG_FILES ext/directfb/Makefile" ;;
"ext/wayland/Makefile") CONFIG_FILES="$CONFIG_FILES ext/wayland/Makefile" ;;
"ext/dts/Makefile") CONFIG_FILES="$CONFIG_FILES ext/dts/Makefile" ;;
+ "ext/eglgles/Makefile") CONFIG_FILES="$CONFIG_FILES ext/eglgles/Makefile" ;;
"ext/faac/Makefile") CONFIG_FILES="$CONFIG_FILES ext/faac/Makefile" ;;
"ext/faad/Makefile") CONFIG_FILES="$CONFIG_FILES ext/faad/Makefile" ;;
"ext/flite/Makefile") CONFIG_FILES="$CONFIG_FILES ext/flite/Makefile" ;;
diff --git a/configure.ac b/configure.ac
index d18fc7a4..843d80cf 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3,7 +3,7 @@ AC_PREREQ(2.62)
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.0.1,
+AC_INIT(GStreamer Bad Plug-ins, 1.0.2,
http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer,
gst-plugins-bad)
@@ -50,7 +50,7 @@ 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, 1, 0, 1)
+AS_LIBTOOL(GST, 2, 0, 2)
dnl *** required versions of GStreamer stuff ***
GST_REQ=1.0.0
@@ -310,21 +310,21 @@ AG_GST_DEFAULT_ELEMENTS
dnl *** plug-ins to include ***
dnl Non ported plugins (non-dependant, then dependant)
dnl Make sure you have a space before and after all plugins
-GST_PLUGINS_NONPORTED=" aiff \
+GST_PLUGINS_NONPORTED=" androidmedia aiff \
cdxaparse \
- dccp faceoverlay \
- fieldanalysis freeverb \
+ dccp eglgles faceoverlay \
+ freeverb \
hdvparse ivfparse jp2kdecimator \
kate librfb \
mpegpsmux mve mxf mythtv nsf nuvdemux \
patchdetect real \
- sdi subenc stereo tta videofilters \
+ sdi stereo tta videofilters \
videomeasure videosignal vmnc \
decklink fbdev linsys vcd \
apexsink cdaudio cog dc1394 dirac directfb \
gsettings jasper ladspa \
- musepack musicbrainz nas neon ofa openal rsvg sdl sndfile timidity \
- directsound directdraw direct3d9 acm wininet \
+ musepack musicbrainz nas neon ofa openal opensles rsvg sdl sndfile timidity \
+ directdraw direct3d9 acm wininet \
wildmidi xvid lv2 teletextdec sndio uvch264"
AC_SUBST(GST_PLUGINS_NONPORTED)
@@ -598,6 +598,20 @@ int main () {
AC_SUBST(HAVE_DIRECTSHOW)
])
+dnl *** Android Media ***
+translit(dnm, m, l) AM_CONDITIONAL(USE_ANDROID_MEDIA, true)
+HAVE_ANDROID_MEDIA="no"
+AG_GST_CHECK_FEATURE(ANDROID_MEDIA, [Android Media], androidmedia, [
+ case "$host" in
+ *android*)
+ AC_CHECK_HEADER(jni.h, HAVE_ANDROID_MEDIA="yes", HAVE_ANDROID_MEDIA="no")
+ ;;
+ *)
+ HAVE_ANDROID_MEDIA="no"
+ ;;
+ esac
+])
+
dnl *** AppleMedia (OS X and iOS) ***
translit(dnm, m, l) AM_CONDITIONAL(USE_APPLE_MEDIA, true)
HAVE_APPLE_MEDIA="no"
@@ -689,6 +703,11 @@ AG_GST_CHECK_FEATURE(VCD, [Video CD], vcdsrc, [
AC_CHECK_HEADER(linux/cdrom.h, HAVE_VCD="yes", HAVE_VCD="no")
])
+dnl check for OpenSL ES
+translit(dnm, m, l) AM_CONDITIONAL(USE_OPENSLES, true)
+AG_GST_CHECK_FEATURE(OPENSLES, [OpenSL ES], opensl, [
+ AC_CHECK_HEADER(SLES/OpenSLES.h, HAVE_OPENSLES="yes", HAVE_OPENSLES="no")
+])
dnl *** UVC H264 ***
translit(dnm, m, l) AM_CONDITIONAL(USE_UVCH264, true)
@@ -927,7 +946,7 @@ AG_GST_CHECK_FEATURE(DIRECTFB, [directfb], dfbvideosink , [
dnl **** Wayland ****
translit(dnm, m, l) AM_CONDITIONAL(USE_WAYLAND, true)
AG_GST_CHECK_FEATURE(WAYLAND, [wayland sink], wayland , [
- PKG_CHECK_MODULES(WAYLAND, wayland-client >= 0.95.0, [
+ PKG_CHECK_MODULES(WAYLAND, wayland-client >= 1.0.0, [
HAVE_WAYLAND="yes" ], [ HAVE_WAYLAND="no"
])
])
@@ -1500,6 +1519,36 @@ AG_GST_CHECK_FEATURE(RSVG, [rsvg decoder], rsvg, [
AC_SUBST(RSVG_LIBS)
])
+dnl *** eglgles ***
+translit(dnm, m, l) AM_CONDITIONAL(USE_EGLGLES, true)
+AG_GST_CHECK_FEATURE(EGLGLES, [eglgles sink], eglgles, [
+ HAVE_EGLGLES="no"
+ PKG_CHECK_MODULES(EGLGLES, egl glesv2, HAVE_EGLGLES="yes", [
+ HAVE_EGLGLES="no"
+ old_LIBS=$LIBS
+ old_CFLAGS=$CFLAGS
+ AC_CHECK_LIB([GLESv2], [glEnable],
+ [
+ AC_CHECK_HEADER([GLES2/gl2.h],
+ [
+ AC_CHECK_LIB([EGL], [eglGetProcAddress],
+ [
+ AC_CHECK_HEADER([EGL/egl.h],
+ [
+ HAVE_EGLGLES="yes"
+ EGLGLES_LIBS="-lGLESv2 -lEGL"
+ EGLGLES_CFLAGS=""
+ ])
+ ])
+ ])
+ ])
+ LIBS=$old_LIBS
+ CFLAGS=$old_CFLAGS
+ ])
+ AC_SUBST(EGLGLES_CFLAGS)
+ AC_SUBST(EGLGLES_LIBS)
+])
+
dnl *** timidity ***
translit(dnm, m, l) AM_CONDITIONAL(USE_TIMIDITY, true)
AG_GST_CHECK_FEATURE(TIMIDITY, [timidity midi soft synth plugin], timidity, [
@@ -2042,6 +2091,7 @@ sys/Makefile
sys/dshowdecwrapper/Makefile
sys/acmenc/Makefile
sys/acmmp3dec/Makefile
+sys/androidmedia/Makefile
sys/applemedia/Makefile
sys/avc/Makefile
sys/d3dvideosink/Makefile
@@ -2053,6 +2103,7 @@ sys/dshowvideosink/Makefile
sys/dvb/Makefile
sys/fbdev/Makefile
sys/linsys/Makefile
+sys/opensles/Makefile
sys/osxvideo/Makefile
sys/qtwrapper/Makefile
sys/shm/Makefile
@@ -2092,6 +2143,7 @@ ext/dirac/Makefile
ext/directfb/Makefile
ext/wayland/Makefile
ext/dts/Makefile
+ext/eglgles/Makefile
ext/faac/Makefile
ext/faad/Makefile
ext/flite/Makefile
diff --git a/docs/Makefile.am b/docs/Makefile.am
index a99c90f3..860b9898 100644
--- a/docs/Makefile.am
+++ b/docs/Makefile.am
@@ -16,3 +16,6 @@ DIST_SUBDIRS = libs plugins
EXTRA_DIST = \
random/ChangeLog-0.8 \
version.entities.in
+
+upload:
+ @if test "x$(SUBDIRS)" != x; then for a in $(SUBDIRS); do cd $$a; make upload; cd ..; done; fi
diff --git a/docs/Makefile.in b/docs/Makefile.in
index ea08f36c..630f887f 100644
--- a/docs/Makefile.in
+++ b/docs/Makefile.in
@@ -223,6 +223,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -942,6 +944,9 @@ uninstall-am:
uninstall uninstall-am
+upload:
+ @if test "x$(SUBDIRS)" != x; then for a in $(SUBDIRS); do cd $$a; make upload; cd ..; done; fi
+
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/docs/libs/Makefile.in b/docs/libs/Makefile.in
index 4a750b3b..63c8f7ba 100644
--- a/docs/libs/Makefile.in
+++ b/docs/libs/Makefile.in
@@ -204,6 +204,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/docs/libs/html/compiling.html b/docs/libs/html/compiling.html
index 4f313fb1..b39903f2 100644
--- a/docs/libs/html/compiling.html
+++ b/docs/libs/html/compiling.html
@@ -31,7 +31,7 @@ How to compile against the bad plugins libraries
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp8278000"></a><h2>Compiling against the bad plugins libraries</h2>
+<a name="idp8815536"></a><h2>Compiling against the bad plugins libraries</h2>
<p>
To compile against these libraries, you need to tell the compiler where to
find the header files and libraries. This is done with the
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstSurfaceConverter.html b/docs/libs/html/gst-plugins-bad-libs-GstSurfaceConverter.html
index e13d31c9..012e50eb 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstSurfaceConverter.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstSurfaceConverter.html
@@ -62,7 +62,7 @@ uploads. The context must be discarded when the pipeline goes to
<p>
</p>
<div class="refsect2">
-<a name="idp6900032"></a><h3>Example uploading to GL texture</h3>
+<a name="idp9751472"></a><h3>Example uploading to GL texture</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
diff --git a/docs/libs/html/gst-plugins-bad-libs-GstVideoContextInterface.html b/docs/libs/html/gst-plugins-bad-libs-GstVideoContextInterface.html
index cf941bb2..ea6181ef 100644
--- a/docs/libs/html/gst-plugins-bad-libs-GstVideoContextInterface.html
+++ b/docs/libs/html/gst-plugins-bad-libs-GstVideoContextInterface.html
@@ -101,7 +101,7 @@ application.
<p>
</p>
<div class="refsect2">
-<a name="idp12115984"></a><h3>For Element</h3>
+<a name="idp8200304"></a><h3>For Element</h3>
<p>
This interface shall be implement by group of elements that need to share
a specific video context (like VDPAU, LibVA, OpenGL elements) or by video
@@ -153,7 +153,7 @@ application.
<p>
</p>
<div class="refsect2">
-<a name="idp12128240"></a><h3>For Application</h3>
+<a name="idp7714176"></a><h3>For Application</h3>
<p>
In the case there is no neighboor element with video context to share,
the element will first turn toward the application, by sending a
@@ -177,7 +177,7 @@ application.
<p>
</p>
<div class="refsect2">
-<a name="idp12132736"></a><h3>Example using ClutterVideoGstVideoSink</h3>
+<a name="idp7718672"></a><h3>Example using ClutterVideoGstVideoSink</h3>
<p>
This example is for user of ClutterGstVideoSink element, the
ClutterGstPlayer object transparently handle this.
diff --git a/docs/libs/html/gst-plugins-bad-libs-mpegvideoparser.html b/docs/libs/html/gst-plugins-bad-libs-mpegvideoparser.html
index cc85011b..7a3eaf9a 100644
--- a/docs/libs/html/gst-plugins-bad-libs-mpegvideoparser.html
+++ b/docs/libs/html/gst-plugins-bad-libs-mpegvideoparser.html
@@ -92,7 +92,7 @@ struct <a class="link" href="gst-plugins-bad-libs-mpegvideoparser.h
<p>
</p>
<div class="refsect2">
-<a name="idp10544640"></a><p>
+<a name="idp11128432"></a><p>
Provides useful functions for mpeg videos bitstream parsing.
</p>
</div>
diff --git a/docs/libs/html/gst-plugins-bad-libs.devhelp2 b/docs/libs/html/gst-plugins-bad-libs.devhelp2
index e3dd08c6..5cc6e06d 100644
--- a/docs/libs/html/gst-plugins-bad-libs.devhelp2
+++ b/docs/libs/html/gst-plugins-bad-libs.devhelp2
@@ -63,7 +63,7 @@
<keyword type="function" name="gst_h264_nal_parser_free ()" link="gst-plugins-bad-libs-h264parser.html#gst-h264-nal-parser-free"/>
<keyword type="function" name="gst_h264_parse_sps ()" link="gst-plugins-bad-libs-h264parser.html#gst-h264-parse-sps"/>
<keyword type="function" name="gst_h264_parse_pps ()" link="gst-plugins-bad-libs-h264parser.html#gst-h264-parse-pps"/>
- <keyword type="" name="" link="gst-plugins-bad-libs-mpegvideoparser.html#idp10544640"/>
+ <keyword type="" name="" link="gst-plugins-bad-libs-mpegvideoparser.html#idp11128432"/>
<keyword type="enum" name="enum GstMpegVideoPacketTypeCode" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPacketTypeCode"/>
<keyword type="enum" name="enum GstMpegVideoPacketExtensionCode" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoPacketExtensionCode"/>
<keyword type="enum" name="enum GstMpegVideoLevel" link="gst-plugins-bad-libs-mpegvideoparser.html#GstMpegVideoLevel"/>
@@ -147,9 +147,9 @@
<keyword type="function" name="gst_vc1_bitplanes_free ()" link="gst-plugins-bad-libs-vc1parser.html#gst-vc1-bitplanes-free"/>
<keyword type="function" name="gst_vc1_bitplanes_free_1 ()" link="gst-plugins-bad-libs-vc1parser.html#gst-vc1-bitplanes-free-1"/>
<keyword type="function" name="gst_vc1_bitplanes_ensure_size ()" link="gst-plugins-bad-libs-vc1parser.html#gst-vc1-bitplanes-ensure-size"/>
- <keyword type="" name="For Element" link="gst-plugins-bad-libs-GstVideoContextInterface.html#idp12115984"/>
- <keyword type="" name="For Application" link="gst-plugins-bad-libs-GstVideoContextInterface.html#idp12128240"/>
- <keyword type="" name="Example using ClutterVideoGstVideoSink" link="gst-plugins-bad-libs-GstVideoContextInterface.html#idp12132736"/>
+ <keyword type="" name="For Element" link="gst-plugins-bad-libs-GstVideoContextInterface.html#idp8200304"/>
+ <keyword type="" name="For Application" link="gst-plugins-bad-libs-GstVideoContextInterface.html#idp7714176"/>
+ <keyword type="" name="Example using ClutterVideoGstVideoSink" link="gst-plugins-bad-libs-GstVideoContextInterface.html#idp7718672"/>
<keyword type="macro" name="GST_IS_VIDEO_CONTEXT()" link="gst-plugins-bad-libs-GstVideoContextInterface.html#GST-IS-VIDEO-CONTEXT:CAPS"/>
<keyword type="struct" name="GstVideoContext" link="gst-plugins-bad-libs-GstVideoContextInterface.html#GstVideoContext"/>
<keyword type="struct" name="struct GstVideoContextInterface" link="gst-plugins-bad-libs-GstVideoContextInterface.html#GstVideoContextInterface"/>
@@ -168,7 +168,7 @@
<keyword type="function" name="gst_video_context_query_set_string ()" link="gst-plugins-bad-libs-GstVideoContextInterface.html#gst-video-context-query-set-string"/>
<keyword type="function" name="gst_video_context_query_set_pointer ()" link="gst-plugins-bad-libs-GstVideoContextInterface.html#gst-video-context-query-set-pointer"/>
<keyword type="function" name="gst_video_context_query_set_object ()" link="gst-plugins-bad-libs-GstVideoContextInterface.html#gst-video-context-query-set-object"/>
- <keyword type="" name="Example uploading to GL texture" link="gst-plugins-bad-libs-GstSurfaceConverter.html#idp6900032"/>
+ <keyword type="" name="Example uploading to GL texture" link="gst-plugins-bad-libs-GstSurfaceConverter.html#idp9751472"/>
<keyword type="struct" name="GstSurfaceConverter" link="gst-plugins-bad-libs-GstSurfaceConverter.html#GstSurfaceConverter"/>
<keyword type="struct" name="struct GstSurfaceConverterInterface" link="gst-plugins-bad-libs-GstSurfaceConverter.html#GstSurfaceConverterInterface"/>
<keyword type="function" name="gst_surface_converter_get_type ()" link="gst-plugins-bad-libs-GstSurfaceConverter.html#gst-surface-converter-get-type"/>
diff --git a/docs/libs/html/index.html b/docs/libs/html/index.html
index e4ee49a3..b951cee2 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.0.1)
+ for GStreamer Bad Library 1.0 (1.0.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/plugins/Makefile.am b/docs/plugins/Makefile.am
index b7e0d3fb..5a9e7402 100644
--- a/docs/plugins/Makefile.am
+++ b/docs/plugins/Makefile.am
@@ -74,6 +74,7 @@ EXTRA_HFILES = \
$(top_srcdir)/ext/dc1394/gstdc1394.h \
$(top_srcdir)/ext/directfb/dfbvideosink.h \
$(top_srcdir)/ext/dts/gstdtsdec.h \
+ $(top_srcdir)/ext/eglgles/gsteglglessink.h \
$(top_srcdir)/ext/faac/gstfaac.h \
$(top_srcdir)/ext/faad/gstfaad.h \
$(top_srcdir)/ext/kate/gstkateenc.h \
diff --git a/docs/plugins/Makefile.in b/docs/plugins/Makefile.in
index ad08fced..70c05cd1 100644
--- a/docs/plugins/Makefile.in
+++ b/docs/plugins/Makefile.in
@@ -242,6 +242,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -680,6 +682,7 @@ EXTRA_HFILES = \
$(top_srcdir)/ext/dc1394/gstdc1394.h \
$(top_srcdir)/ext/directfb/dfbvideosink.h \
$(top_srcdir)/ext/dts/gstdtsdec.h \
+ $(top_srcdir)/ext/eglgles/gsteglglessink.h \
$(top_srcdir)/ext/faac/gstfaac.h \
$(top_srcdir)/ext/faad/gstfaad.h \
$(top_srcdir)/ext/kate/gstkateenc.h \
diff --git a/docs/plugins/gst-plugins-bad-plugins-docs.sgml b/docs/plugins/gst-plugins-bad-plugins-docs.sgml
index 6926c807..a640f15f 100644
--- a/docs/plugins/gst-plugins-bad-plugins-docs.sgml
+++ b/docs/plugins/gst-plugins-bad-plugins-docs.sgml
@@ -45,6 +45,7 @@
<xi:include href="xml/element-dvdspu.xml" />
<xi:include href="xml/element-exclusion.xml" />
<xi:include href="xml/element-edgedetect.xml" />
+ <xi:include href="xml/element-eglglessink.xml" />
<xi:include href="xml/element-faac.xml" />
<xi:include href="xml/element-faad.xml" />
<xi:include href="xml/element-faceblur.xml" />
@@ -63,6 +64,7 @@
<xi:include href="xml/element-modplug.xml" />
<xi:include href="xml/element-mpeg2enc.xml" />
<xi:include href="xml/element-mplex.xml" />
+ <xi:include href="xml/element-mpg123audiodec.xml" />
<xi:include href="xml/element-pcapparse.xml" />
<xi:include href="xml/element-pinch.xml" />
<xi:include href="xml/element-pyramidsegment.xml" />
@@ -114,6 +116,7 @@
<xi:include href="xml/plugin-dtsdec.xml" />
<xi:include href="xml/plugin-dvb.xml" />
<xi:include href="xml/plugin-dvdspu.xml" />
+ <xi:include href="xml/plugin-eglglessink.xml" />
<xi:include href="xml/plugin-faac.xml" />
<xi:include href="xml/plugin-faad.xml" />
<xi:include href="xml/plugin-festival.xml" />
diff --git a/docs/plugins/gst-plugins-bad-plugins-sections.txt b/docs/plugins/gst-plugins-bad-plugins-sections.txt
index 0e1f0d15..219a603a 100644
--- a/docs/plugins/gst-plugins-bad-plugins-sections.txt
+++ b/docs/plugins/gst-plugins-bad-plugins-sections.txt
@@ -575,6 +575,20 @@ gst_edgedetect_plugin_init
</SECTION>
<SECTION>
+<FILE>element-eglglessink</FILE>
+<TITLE>eglglessink</TITLE>
+GstEglGlesSink
+<SUBSECTION Standard>
+GstEglGlesSinkClass
+GST_TYPE_EGLGLESSINK
+GST_EGLGLESSINK
+GST_IS_EGLGLESSINK
+GST_EGLGLESSINK_CLASS
+GST_IS_EGLGLESSINK_CLASS
+gst_eglglessink_get_type
+</SECTION>
+
+<SECTION>
<FILE>element-exclusion</FILE>
<TITLE>exclusion</TITLE>
GstExclusion
@@ -959,6 +973,20 @@ gst_mplex_get_type
</SECTION>
<SECTION>
+<FILE>element-mpg123audiodec</FILE>
+<TITLE>mpg123audiodec</TITLE>
+GstMpg123AudioDec
+<SUBSECTION Standard>
+GstMpg123AudioDecClass
+GST_MPG123_AUDIO_DEC
+GST_MPG123_AUDIO_DEC_CLASS
+GST_IS_MPG123_AUDIO_DEC
+GST_IS_MPG123_AUDIO_DEC_CLASS
+GST_TYPE_MPG123_AUDIO_DEC
+gst_mpg123_audio_dec_get_type
+</SECTION>
+
+<SECTION>
<FILE>element-mythtvsrc</FILE>
<TITLE>mythtvsrc</TITLE>
GstMythtvSrc
diff --git a/docs/plugins/gst-plugins-bad-plugins.args b/docs/plugins/gst-plugins-bad-plugins.args
index d3645f76..65a2c20d 100644
--- a/docs/plugins/gst-plugins-bad-plugins.args
+++ b/docs/plugins/gst-plugins-bad-plugins.args
@@ -18159,6 +18159,16 @@
</ARG>
<ARG>
+<NAME>GstAudioParse::use-sink-caps</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Use sink caps</NICK>
+<BLURB>Use the sink caps for the format, only performing timestamping.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
<NAME>GstVideoParse::alpha-mask</NAME>
<TYPE>gint</TYPE>
<RANGE></RANGE>
@@ -26890,7 +26900,7 @@
<FLAGS>rw</FLAGS>
<NICK>physics</NICK>
<BLURB>water density: from 1 to 4.</BLURB>
-<DEFAULT>3.18612e-241</DEFAULT>
+<DEFAULT>6.99743e-317</DEFAULT>
</ARG>
<ARG>
@@ -26930,7 +26940,7 @@
<FLAGS>rw</FLAGS>
<NICK>splash</NICK>
<BLURB>make a big splash in the center.</BLURB>
-<DEFAULT>3.24099e-05</DEFAULT>
+<DEFAULT>0</DEFAULT>
</ARG>
<ARG>
@@ -26940,7 +26950,7 @@
<FLAGS>rw</FLAGS>
<NICK>splash</NICK>
<BLURB>make a big splash in the center.</BLURB>
-<DEFAULT>5.732e-317</DEFAULT>
+<DEFAULT>6.90917e-317</DEFAULT>
</ARG>
<ARG>
@@ -26970,7 +26980,7 @@
<FLAGS>rw</FLAGS>
<NICK>ratiox</NICK>
<BLURB>x-ratio.</BLURB>
-<DEFAULT>1.37974e-309</DEFAULT>
+<DEFAULT>5.37189e-317</DEFAULT>
</ARG>
<ARG>
@@ -26980,7 +26990,7 @@
<FLAGS>rw</FLAGS>
<NICK>ratioy</NICK>
<BLURB>y-ratio.</BLURB>
-<DEFAULT>1.3852e-309</DEFAULT>
+<DEFAULT>6.95847e-317</DEFAULT>
</ARG>
<ARG>
@@ -26990,7 +27000,7 @@
<FLAGS>rw</FLAGS>
<NICK>DelayTime</NICK>
<BLURB>the delay time.</BLURB>
-<DEFAULT>1.58101e-322</DEFAULT>
+<DEFAULT>0</DEFAULT>
</ARG>
<ARG>
@@ -27020,7 +27030,7 @@
<FLAGS>rw</FLAGS>
<NICK>Color</NICK>
<BLURB>the color of the image.</BLURB>
-<DEFAULT>0</DEFAULT>
+<DEFAULT>1.9736e-38</DEFAULT>
</ARG>
<ARG>
@@ -27040,7 +27050,7 @@
<FLAGS>rw</FLAGS>
<NICK>Color-R</NICK>
<BLURB>the color of the image.</BLURB>
-<DEFAULT>1.58995e-30</DEFAULT>
+<DEFAULT>1.52361e-38</DEFAULT>
</ARG>
<ARG>
@@ -27370,7 +27380,7 @@
<FLAGS>rw</FLAGS>
<NICK>lredscale</NICK>
<BLURB>multiplier for downscaling non-edge brightness.</BLURB>
-<DEFAULT>5.96156e-317</DEFAULT>
+<DEFAULT>7.15583e-317</DEFAULT>
</ARG>
<ARG>
@@ -27380,7 +27390,7 @@
<FLAGS>rw</FLAGS>
<NICK>lthresh</NICK>
<BLURB>threshold for edge lightening.</BLURB>
-<DEFAULT>2.47033e-323</DEFAULT>
+<DEFAULT>0</DEFAULT>
</ARG>
<ARG>
@@ -27560,7 +27570,7 @@
<FLAGS>rw</FLAGS>
<NICK>blend</NICK>
<BLURB>blend factor.</BLURB>
-<DEFAULT>1.37974e-309</DEFAULT>
+<DEFAULT>1.37429e-309</DEFAULT>
</ARG>
<ARG>
@@ -27570,7 +27580,7 @@
<FLAGS>rw</FLAGS>
<NICK>fader</NICK>
<BLURB>the fader position.</BLURB>
-<DEFAULT>4.74303e-322</DEFAULT>
+<DEFAULT>1.37429e-309</DEFAULT>
</ARG>
<ARG>
@@ -27750,7 +27760,7 @@
<FLAGS>rw</FLAGS>
<NICK>HSync</NICK>
<BLURB>the hsync offset.</BLURB>
-<DEFAULT>5.76783e-317</DEFAULT>
+<DEFAULT>2.34498e-310</DEFAULT>
</ARG>
<ARG>
@@ -59403,3 +59413,23 @@
<DEFAULT>NULL</DEFAULT>
</ARG>
+<ARG>
+<NAME>GstWebvttEnc::duration</NAME>
+<TYPE>gint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Offset for the duration</NICK>
+<BLURB>Offset for the duration of the subtitles.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstWebvttEnc::timestamp</NAME>
+<TYPE>gint64</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Offset for the starttime</NICK>
+<BLURB>Offset for the starttime for the subtitles.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
diff --git a/docs/plugins/gst-plugins-bad-plugins.hierarchy b/docs/plugins/gst-plugins-bad-plugins.hierarchy
index 0bd6e531..23c2bb35 100644
--- a/docs/plugins/gst-plugins-bad-plugins.hierarchy
+++ b/docs/plugins/gst-plugins-bad-plugins.hierarchy
@@ -193,6 +193,7 @@ GObject
GstEdgeDetect
GstFaceBlur
GstFestival
+ GstFieldAnalysis
GstGDPDepay
GstGDPPay
GstGmeDec
@@ -230,6 +231,7 @@ GObject
GstVideoSegmentClip
GstSpanPlc
GstSpeed
+ GstSrtEnc
GstTagMux
GstId3Mux
GstTemplateMatch
@@ -237,6 +239,7 @@ GObject
GstSchroDec
GstVideoEncoder
GstSchroEnc
+ GstWebvttEnc
GstY4mDec
MpegTSBase
GstTSDemux
diff --git a/docs/plugins/html/ch01.html b/docs/plugins/html/ch01.html
index 550085f3..9a1e6c42 100644
--- a/docs/plugins/html/ch01.html
+++ b/docs/plugins/html/ch01.html
@@ -21,7 +21,7 @@
</tr></table>
<div class="chapter">
<div class="titlepage"><div><div><h2 class="title">
-<a name="idp3325424"></a>gst-plugins-bad Elements</h2></div></div></div>
+<a name="idp561648"></a>gst-plugins-bad Elements</h2></div></div></div>
<div class="toc"><dl>
<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-plugins-assrender.html">assrender</a></span><span class="refpurpose"> — Renders ASS/SSA subtitles with libass</span>
@@ -105,6 +105,9 @@
<span class="refentrytitle"><a href="gst-plugins-bad-plugins-edgedetect.html">edgedetect</a></span><span class="refpurpose"> — Performs canny edge detection on videos and images.</span>
</dt>
<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-eglglessink.html">eglglessink</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-plugins-faac.html">faac</a></span><span class="refpurpose"> — Free MPEG-2/4 AAC encoder</span>
</dt>
<dt>
@@ -159,6 +162,9 @@
<span class="refentrytitle"><a href="gst-plugins-bad-plugins-mplex.html">mplex</a></span><span class="refpurpose"> — High-quality MPEG/DVD/SVCD/VCD video/audio multiplexer</span>
</dt>
<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-mpg123audiodec.html">mpg123audiodec</a></span><span class="refpurpose"> — Decodes mp3 streams using the mpg123 library</span>
+</dt>
+<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-plugins-pcapparse.html">pcapparse</a></span><span class="refpurpose"> — Parses a raw pcap stream</span>
</dt>
<dt>
diff --git a/docs/plugins/html/ch02.html b/docs/plugins/html/ch02.html
index 3d7808b3..c8f180be 100644
--- a/docs/plugins/html/ch02.html
+++ b/docs/plugins/html/ch02.html
@@ -21,7 +21,7 @@
</tr></table>
<div class="chapter">
<div class="titlepage"><div><div><h2 class="title">
-<a name="idp46336"></a>gst-plugins-bad Plugins</h2></div></div></div>
+<a name="idp79056"></a>gst-plugins-bad Plugins</h2></div></div></div>
<div class="toc"><dl>
<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-plugins-plugin-audiovisualizers.html">audiovisualizers</a></span><span class="refpurpose"> — <a name="plugin-audiovisualizers"></a>Creates video visualizations of audio input</span>
@@ -153,6 +153,7 @@
<span class="refentrytitle"><a href="gst-plugins-bad-plugins-plugin-zbar.html">zbar</a></span><span class="refpurpose"> — <a name="plugin-zbar"></a>zbar barcode scanner</span>
</dt>
</dl></div>
+<span style="color: red">&lt;xi:include&gt;&lt;/xi:include&gt;</span>
</div>
<div class="footer">
<hr>
diff --git a/docs/plugins/html/ch03.html b/docs/plugins/html/ch03.html
index 0b813444..b2472f1f 100644
--- a/docs/plugins/html/ch03.html
+++ b/docs/plugins/html/ch03.html
@@ -21,7 +21,7 @@
</tr></table>
<div class="chapter">
<div class="titlepage"><div><div><h2 class="title">
-<a name="idp95536"></a>gst-plugins-bad Interfaces</h2></div></div></div>
+<a name="idp5240304"></a>gst-plugins-bad Interfaces</h2></div></div></div>
<div class="toc"><dl><dt>
<span class="refentrytitle"><a href="GstPhotography.html">GstPhotography</a></span><span class="refpurpose"></span>
</dt></dl></div>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-assrender.html b/docs/plugins/html/gst-plugins-bad-plugins-assrender.html
index 307b791a..c4e4e6a7 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-assrender.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-assrender.html
@@ -66,7 +66,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp8404880"></a><h3>Element Information</h3>
+<a name="idp3202368"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -89,7 +89,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp8583600"></a><h3>Element Pads</h3>
+<a name="idp8062528"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-autoconvert.html b/docs/plugins/html/gst-plugins-bad-plugins-autoconvert.html
index 8e5432ea..29b98795 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-autoconvert.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-autoconvert.html
@@ -87,7 +87,7 @@ elements.
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp7508096"></a><h3>Element Information</h3>
+<a name="idp8564480"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -110,7 +110,7 @@ elements.
</div>
<hr>
<div class="refsect2">
-<a name="idp9526720"></a><h3>Element Pads</h3>
+<a name="idp6639552"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-bulge.html b/docs/plugins/html/gst-plugins-bad-plugins-bulge.html
index e09c4059..a01e93e8 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-bulge.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-bulge.html
@@ -69,7 +69,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp8280208"></a><h3>Element Information</h3>
+<a name="idp9701168"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -92,7 +92,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp8707568"></a><h3>Element Pads</h3>
+<a name="idp5349312"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-burn.html b/docs/plugins/html/gst-plugins-bad-plugins-burn.html
index 82192854..750a6b0f 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-burn.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-burn.html
@@ -71,7 +71,7 @@ Burn adjusts the colors of a video stream in realtime.
<p>
</p>
<div class="refsect2">
-<a name="idp7639184"></a><h3>Example launch line</h3>
+<a name="idp8562096"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -89,7 +89,7 @@ Burn adjusts the colors of a video stream in realtime.
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp8481168"></a><h3>Element Information</h3>
+<a name="idp9697312"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -112,7 +112,7 @@ Burn adjusts the colors of a video stream in realtime.
</div>
<hr>
<div class="refsect2">
-<a name="idp7574640"></a><h3>Element Pads</h3>
+<a name="idp7815232"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-camerabin.html b/docs/plugins/html/gst-plugins-bad-plugins-camerabin.html
index c7b03a5d..0864dea4 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-camerabin.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-camerabin.html
@@ -44,7 +44,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp7733584"></a><h3>Element Information</h3>
+<a name="idp6032976"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -67,7 +67,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp8376288"></a><h3>Element Pads</h3>
+<a name="idp7860832"></a><h3>Element Pads</h3>
</div>
</div>
<p>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-celtdec.html b/docs/plugins/html/gst-plugins-bad-plugins-celtdec.html
index f89c2565..aa7986c6 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-celtdec.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-celtdec.html
@@ -58,7 +58,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp9359808"></a><h3>Element Information</h3>
+<a name="idp3338224"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -81,7 +81,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp5822592"></a><h3>Element Pads</h3>
+<a name="idp7677792"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-celtenc.html b/docs/plugins/html/gst-plugins-bad-plugins-celtenc.html
index 309de995..8ad2c9ed 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-celtenc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-celtenc.html
@@ -80,7 +80,7 @@ GstCeltEnc implements
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp7684592"></a><h3>Element Information</h3>
+<a name="idp9278592"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -103,7 +103,7 @@ GstCeltEnc implements
</div>
<hr>
<div class="refsect2">
-<a name="idp10455584"></a><h3>Element Pads</h3>
+<a name="idp9806544"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-chromium.html b/docs/plugins/html/gst-plugins-bad-plugins-chromium.html
index a282c44e..39a04cdb 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-chromium.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-chromium.html
@@ -72,7 +72,7 @@ Chromium breaks the colors of a video stream in realtime.
<p>
</p>
<div class="refsect2">
-<a name="idp7061136"></a><h3>Example launch line</h3>
+<a name="idp5255472"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -90,7 +90,7 @@ Chromium breaks the colors of a video stream in realtime.
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp5900448"></a><h3>Element Information</h3>
+<a name="idp6080816"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -113,7 +113,7 @@ Chromium breaks the colors of a video stream in realtime.
</div>
<hr>
<div class="refsect2">
-<a name="idp8000192"></a><h3>Element Pads</h3>
+<a name="idp7044720"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-circle.html b/docs/plugins/html/gst-plugins-bad-plugins-circle.html
index 04c90872..8e921c05 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-circle.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-circle.html
@@ -71,7 +71,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp8233456"></a><h3>Element Information</h3>
+<a name="idp8391216"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -94,7 +94,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp10151808"></a><h3>Element Pads</h3>
+<a name="idp5537376"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-coloreffects.html b/docs/plugins/html/gst-plugins-bad-plugins-coloreffects.html
index 1dda0f7d..d956847b 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-coloreffects.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-coloreffects.html
@@ -70,7 +70,7 @@ Map colors of the video input to a lookup table
<p>
</p>
<div class="refsect2">
-<a name="idp6409984"></a><h3>Example launch line</h3>
+<a name="idp9432736"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -90,7 +90,7 @@ Map colors of the video input to a lookup table
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp8290272"></a><h3>Element Information</h3>
+<a name="idp9712496"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -113,7 +113,7 @@ Map colors of the video input to a lookup table
</div>
<hr>
<div class="refsect2">
-<a name="idp5747696"></a><h3>Element Pads</h3>
+<a name="idp8417024"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-cvdilate.html b/docs/plugins/html/gst-plugins-bad-plugins-cvdilate.html
index 428dabd5..6b3974f2 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-cvdilate.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-cvdilate.html
@@ -61,7 +61,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp10241232"></a><h3>Element Information</h3>
+<a name="idp10163840"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -84,7 +84,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp9809216"></a><h3>Element Pads</h3>
+<a name="idp8413504"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-cvequalizehist.html b/docs/plugins/html/gst-plugins-bad-plugins-cvequalizehist.html
index 15571381..95cb4e39 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-cvequalizehist.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-cvequalizehist.html
@@ -60,7 +60,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp2871152"></a><h3>Element Information</h3>
+<a name="idp7545312"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -83,7 +83,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp9446880"></a><h3>Element Pads</h3>
+<a name="idp5958128"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-cverode.html b/docs/plugins/html/gst-plugins-bad-plugins-cverode.html
index dc6e53a6..b55c4f28 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-cverode.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-cverode.html
@@ -61,7 +61,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp10341872"></a><h3>Element Information</h3>
+<a name="idp10234752"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -84,7 +84,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp7360800"></a><h3>Element Pads</h3>
+<a name="idp7068864"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-cvlaplace.html b/docs/plugins/html/gst-plugins-bad-plugins-cvlaplace.html
index f3f091e1..ca75ddbf 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-cvlaplace.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-cvlaplace.html
@@ -68,7 +68,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp7331248"></a><h3>Element Information</h3>
+<a name="idp9341952"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -91,7 +91,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp10419952"></a><h3>Element Pads</h3>
+<a name="idp7716928"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-cvsmooth.html b/docs/plugins/html/gst-plugins-bad-plugins-cvsmooth.html
index d92314c1..0fa46e2f 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-cvsmooth.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-cvsmooth.html
@@ -72,7 +72,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp7531312"></a><h3>Element Information</h3>
+<a name="idp3266864"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -95,7 +95,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp8630480"></a><h3>Element Pads</h3>
+<a name="idp7708688"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-cvsobel.html b/docs/plugins/html/gst-plugins-bad-plugins-cvsobel.html
index 4c15317c..a81a1ebc 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-cvsobel.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-cvsobel.html
@@ -70,7 +70,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp10710976"></a><h3>Element Information</h3>
+<a name="idp7989584"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -93,7 +93,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp10586656"></a><h3>Element Pads</h3>
+<a name="idp10260016"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-dataurisrc.html b/docs/plugins/html/gst-plugins-bad-plugins-dataurisrc.html
index 6a779b4e..12d54e3b 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-dataurisrc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-dataurisrc.html
@@ -77,7 +77,7 @@ dataurisrc handles data: URIs, see <a class="ulink" href="http://tools.ietf.org/
<p>
</p>
<div class="refsect2">
-<a name="idp9290960"></a><h3>Example launch line</h3>
+<a name="idp9408688"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -95,7 +95,7 @@ dataurisrc handles data: URIs, see <a class="ulink" href="http://tools.ietf.org/
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp6753888"></a><h3>Element Information</h3>
+<a name="idp9062032"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -118,7 +118,7 @@ dataurisrc handles data: URIs, see <a class="ulink" href="http://tools.ietf.org/
</div>
<hr>
<div class="refsect2">
-<a name="idp9932688"></a><h3>Element Pads</h3>
+<a name="idp9069552"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-diffuse.html b/docs/plugins/html/gst-plugins-bad-plugins-diffuse.html
index e1b85b19..f7aae21e 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-diffuse.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-diffuse.html
@@ -68,7 +68,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp9385424"></a><h3>Element Information</h3>
+<a name="idp7601696"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -91,7 +91,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp10611744"></a><h3>Element Pads</h3>
+<a name="idp9907888"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-dilate.html b/docs/plugins/html/gst-plugins-bad-plugins-dilate.html
index 08ad7510..e8102d47 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-dilate.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-dilate.html
@@ -71,7 +71,7 @@ Dilate adjusts the colors of a video stream in realtime.
<p>
</p>
<div class="refsect2">
-<a name="idp2886704"></a><h3>Example launch line</h3>
+<a name="idp7021856"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -89,7 +89,7 @@ Dilate adjusts the colors of a video stream in realtime.
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp8369648"></a><h3>Element Information</h3>
+<a name="idp8110720"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -112,7 +112,7 @@ Dilate adjusts the colors of a video stream in realtime.
</div>
<hr>
<div class="refsect2">
-<a name="idp11063088"></a><h3>Element Pads</h3>
+<a name="idp10818864"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-dodge.html b/docs/plugins/html/gst-plugins-bad-plugins-dodge.html
index e175f016..816354e7 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-dodge.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-dodge.html
@@ -70,7 +70,7 @@ Dodge saturates the colors of a video stream in realtime.
<p>
</p>
<div class="refsect2">
-<a name="idp7062528"></a><h3>Example launch line</h3>
+<a name="idm3184"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -88,7 +88,7 @@ Dodge saturates the colors of a video stream in realtime.
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp9413376"></a><h3>Element Information</h3>
+<a name="idp9626784"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -111,7 +111,7 @@ Dodge saturates the colors of a video stream in realtime.
</div>
<hr>
<div class="refsect2">
-<a name="idp7649632"></a><h3>Element Pads</h3>
+<a name="idp10758384"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-dtmfdetect.html b/docs/plugins/html/gst-plugins-bad-plugins-dtmfdetect.html
index a803e3a8..ccc06a74 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-dtmfdetect.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-dtmfdetect.html
@@ -85,7 +85,7 @@ the following fields:
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp8078608"></a><h3>Element Information</h3>
+<a name="idp6982336"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -108,7 +108,7 @@ the following fields:
</div>
<hr>
<div class="refsect2">
-<a name="idp8973056"></a><h3>Element Pads</h3>
+<a name="idp8487424"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-dtmfsrc.html b/docs/plugins/html/gst-plugins-bad-plugins-dtmfsrc.html
index 42251b5c..76978236 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-dtmfsrc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-dtmfsrc.html
@@ -161,7 +161,7 @@ READY state, then a "dtmf-event-dropped" message is posted on the
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp11698560"></a><h3>Element Information</h3>
+<a name="idp10854560"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -184,7 +184,7 @@ READY state, then a "dtmf-event-dropped" message is posted on the
</div>
<hr>
<div class="refsect2">
-<a name="idp11705968"></a><h3>Element Pads</h3>
+<a name="idp10861968"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-dtsdec.html b/docs/plugins/html/gst-plugins-bad-plugins-dtsdec.html
index 653cc462..ff7705b5 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-dtsdec.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-dtsdec.html
@@ -66,7 +66,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp7745808"></a><h3>Element Information</h3>
+<a name="idp7689968"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -89,7 +89,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp6749888"></a><h3>Element Pads</h3>
+<a name="idp6647200"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-dvbsrc.html b/docs/plugins/html/gst-plugins-bad-plugins-dvbsrc.html
index bcd81a51..0b64e98f 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-dvbsrc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-dvbsrc.html
@@ -90,7 +90,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp9127440"></a><h3>Element Information</h3>
+<a name="idp11226768"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -113,7 +113,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp11736000"></a><h3>Element Pads</h3>
+<a name="idp11234288"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-dvdspu.html b/docs/plugins/html/gst-plugins-bad-plugins-dvdspu.html
index c6f65f2e..71656e23 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-dvdspu.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-dvdspu.html
@@ -60,7 +60,7 @@ DVD sub picture overlay element.
<p>
</p>
<div class="refsect2">
-<a name="idp6850368"></a><h3>Example launch line</h3>
+<a name="idp6497824"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -78,7 +78,7 @@ DVD sub picture overlay element.
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp6848192"></a><h3>Element Information</h3>
+<a name="idp11023664"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -101,7 +101,7 @@ DVD sub picture overlay element.
</div>
<hr>
<div class="refsect2">
-<a name="idp5891680"></a><h3>Element Pads</h3>
+<a name="idp9721712"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-edgedetect.html b/docs/plugins/html/gst-plugins-bad-plugins-edgedetect.html
index 006df270..b90529e0 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-edgedetect.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-edgedetect.html
@@ -7,7 +7,7 @@
<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
<link rel="prev" href="gst-plugins-bad-plugins-exclusion.html" title="exclusion">
-<link rel="next" href="gst-plugins-bad-plugins-faac.html" title="faac">
+<link rel="next" href="gst-plugins-bad-plugins-eglglessink.html" title="eglglessink">
<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
@@ -18,7 +18,7 @@
<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
<th width="100%" align="center">GStreamer Bad Plugins 1.0 Plugins Reference Manual</th>
-<td><a accesskey="n" href="gst-plugins-bad-plugins-faac.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-eglglessink.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
</tr>
<tr><td colspan="5" class="shortcuts">
<a href="#gst-plugins-bad-plugins-edgedetect.synopsis" class="shortcut">Top</a>
@@ -44,7 +44,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp11459232"></a><h3>Element Information</h3>
+<a name="idp9025376"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -67,7 +67,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp6898368"></a><h3>Element Pads</h3>
+<a name="idp5379504"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-eglglessink.html b/docs/plugins/html/gst-plugins-bad-plugins-eglglessink.html
new file mode 100644
index 00000000..acb988a3
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-eglglessink.html
@@ -0,0 +1,95 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>eglglessink</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-edgedetect.html" title="edgedetect">
+<link rel="next" href="gst-plugins-bad-plugins-faac.html" title="faac">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-bad-plugins-edgedetect.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Bad Plugins 1.0 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-faac.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-bad-plugins-eglglessink.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#gst-plugins-bad-plugins-eglglessink.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-eglglessink"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-eglglessink.top_of_page"></a>eglglessink</span></h2>
+<p>eglglessink</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-bad-plugins-eglglessink.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">struct <a class="link" href="gst-plugins-bad-plugins-eglglessink.html#GstEglGlesSink" title="struct GstEglGlesSink">GstEglGlesSink</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-eglglessink.description"></a><h2>Description</h2>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-eglglessink.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstEglGlesSink"></a><h3>struct GstEglGlesSink</h3>
+<pre class="programlisting">struct GstEglGlesSink {
+ GstVideoSink videosink; /* Element hook */
+ int par_n, par_d; /* Aspect ratio from caps */
+
+ GstVideoFormat format;
+ GstVideoRectangle display_region;
+ GstCaps *sinkcaps;
+ GstCaps *current_caps, *configured_caps;
+
+ GstEglGlesImageFmt *selected_fmt;
+ GstEglGlesRenderContext eglglesctx;
+
+ GList *supported_fmts;
+
+ /* Runtime flags */
+ gboolean have_window;
+ gboolean using_own_window;
+ gboolean have_surface;;
+ gboolean have_vbo;
+ gboolean have_texture;
+ gboolean egl_started;
+
+ GThread *thread;
+ gboolean thread_running;
+ GstDataQueue *queue;
+ GCond *render_cond;
+ GMutex *render_lock;
+ GstFlowReturn last_flow;
+
+ /* Properties */
+ gboolean create_window;
+ gboolean force_aspect_ratio;
+};
+</pre>
+<p>
+</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.18</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-exclusion.html b/docs/plugins/html/gst-plugins-bad-plugins-exclusion.html
index 76bdf0b9..e7b81cec 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-exclusion.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-exclusion.html
@@ -71,7 +71,7 @@ Exclusion saturates the colors of a video stream in realtime.
<p>
</p>
<div class="refsect2">
-<a name="idp10990960"></a><h3>Example launch line</h3>
+<a name="idp3313440"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -89,7 +89,7 @@ Exclusion saturates the colors of a video stream in realtime.
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp8269536"></a><h3>Element Information</h3>
+<a name="idp5480032"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -112,7 +112,7 @@ Exclusion saturates the colors of a video stream in realtime.
</div>
<hr>
<div class="refsect2">
-<a name="idp11396752"></a><h3>Element Pads</h3>
+<a name="idp11186928"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-faac.html b/docs/plugins/html/gst-plugins-bad-plugins-faac.html
index 2984bc3d..991a62f5 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-faac.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-faac.html
@@ -6,7 +6,7 @@
<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
-<link rel="prev" href="gst-plugins-bad-plugins-edgedetect.html" title="edgedetect">
+<link rel="prev" href="gst-plugins-bad-plugins-eglglessink.html" title="eglglessink">
<link rel="next" href="gst-plugins-bad-plugins-faad.html" title="faad">
<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
@@ -14,7 +14,7 @@
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
<tr valign="middle">
-<td><a accesskey="p" href="gst-plugins-bad-plugins-edgedetect.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-eglglessink.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
<th width="100%" align="center">GStreamer Bad Plugins 1.0 Plugins Reference Manual</th>
@@ -81,7 +81,7 @@ GstFaac implements
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp11452144"></a><h3>Element Information</h3>
+<a name="idp10536192"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -104,7 +104,7 @@ GstFaac implements
</div>
<hr>
<div class="refsect2">
-<a name="idp11864736"></a><h3>Element Pads</h3>
+<a name="idp11645984"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-faad.html b/docs/plugins/html/gst-plugins-bad-plugins-faad.html
index ecc4bba0..08fcde48 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-faad.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-faad.html
@@ -58,7 +58,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp6962688"></a><h3>Element Information</h3>
+<a name="idp6434304"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -81,7 +81,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp9223968"></a><h3>Element Pads</h3>
+<a name="idp5377872"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-faceblur.html b/docs/plugins/html/gst-plugins-bad-plugins-faceblur.html
index d3fac7f6..df3919c5 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-faceblur.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-faceblur.html
@@ -44,7 +44,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp11381968"></a><h3>Element Information</h3>
+<a name="idp11006592"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -67,7 +67,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp7852848"></a><h3>Element Pads</h3>
+<a name="idp6718704"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-facedetect.html b/docs/plugins/html/gst-plugins-bad-plugins-facedetect.html
index b0d404bc..70de098f 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-facedetect.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-facedetect.html
@@ -44,7 +44,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp11222352"></a><h3>Element Information</h3>
+<a name="idp11109152"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -67,7 +67,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp10267392"></a><h3>Element Pads</h3>
+<a name="idp6326800"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-festival.html b/docs/plugins/html/gst-plugins-bad-plugins-festival.html
index 9076a9e3..95483cf0 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-festival.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-festival.html
@@ -65,7 +65,7 @@ in server mode, started as </p>
<p>
</p>
<div class="refsect2">
-<a name="idp6977680"></a><h3>Example pipeline</h3>
+<a name="idp7055104"></a><h3>Example pipeline</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -83,7 +83,7 @@ in server mode, started as </p>
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp9449264"></a><h3>Element Information</h3>
+<a name="idp5954592"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -106,7 +106,7 @@ in server mode, started as </p>
</div>
<hr>
<div class="refsect2">
-<a name="idp11560928"></a><h3>Element Pads</h3>
+<a name="idp11151616"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-fisheye.html b/docs/plugins/html/gst-plugins-bad-plugins-fisheye.html
index cb90f667..b211fc14 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-fisheye.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-fisheye.html
@@ -60,7 +60,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp9945568"></a><h3>Element Information</h3>
+<a name="idp5300832"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -83,7 +83,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp10627008"></a><h3>Element Pads</h3>
+<a name="idm37984"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-fpsdisplaysink.html b/docs/plugins/html/gst-plugins-bad-plugins-fpsdisplaysink.html
index 63150c1d..0123a159 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-fpsdisplaysink.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-fpsdisplaysink.html
@@ -95,7 +95,7 @@ Can display the current and average framerate as a testoverlay or on stdout.
<p>
</p>
<div class="refsect2">
-<a name="idp12471232"></a><h3>Example launch lines</h3>
+<a name="idp11978528"></a><h3>Example launch lines</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -107,7 +107,7 @@ Can display the current and average framerate as a testoverlay or on stdout.
<td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch videotestsrc <span class="gtkdoc opt">!</span> fpsdisplaysink
gst<span class="gtkdoc opt">-</span>launch videotestsrc <span class="gtkdoc opt">!</span> fpsdisplaysink text<span class="gtkdoc opt">-</span>overlay<span class="gtkdoc opt">=</span><span class="keyword">false</span>
gst<span class="gtkdoc opt">-</span>launch filesrc location<span class="gtkdoc opt">=</span>video<span class="gtkdoc opt">.</span>avi <span class="gtkdoc opt">!</span> decodebin2 name<span class="gtkdoc opt">=</span>d <span class="gtkdoc opt">!</span> queue <span class="gtkdoc opt">!</span> fpsdisplaysink d<span class="gtkdoc opt">. !</span> queue <span class="gtkdoc opt">!</span> fakesink sync<span class="gtkdoc opt">=</span><span class="keyword">true</span>
-gst<span class="gtkdoc opt">-</span>launch playbin2 uri<span class="gtkdoc opt">=</span>file<span class="gtkdoc opt">:</span><span class="gtkdoc slc">///path/to/video.avi video-sink=&quot;fpsdisplaysink&quot; audio-sink=fakesink</span></pre></td>
+gst<span class="gtkdoc opt">-</span>launch playbin uri<span class="gtkdoc opt">=</span>file<span class="gtkdoc opt">:</span><span class="gtkdoc slc">///path/to/video.avi video-sink=&quot;fpsdisplaysink&quot; audio-sink=fakesink</span></pre></td>
</tr>
</tbody>
</table>
@@ -119,7 +119,7 @@ gst<span class="gtkdoc opt">-</span>launch playbin2 uri<span class="gtkdoc opt">
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp12474208"></a><h3>Element Information</h3>
+<a name="idp11981504"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -142,7 +142,7 @@ gst<span class="gtkdoc opt">-</span>launch playbin2 uri<span class="gtkdoc opt">
</div>
<hr>
<div class="refsect2">
-<a name="idp12481616"></a><h3>Element Pads</h3>
+<a name="idp11717552"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-gaussianblur.html b/docs/plugins/html/gst-plugins-bad-plugins-gaussianblur.html
index 3b7ebff0..41743be9 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-gaussianblur.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-gaussianblur.html
@@ -47,7 +47,7 @@ Gaussianblur blurs the video stream in realtime.
<p>
</p>
<div class="refsect2">
-<a name="idp11938864"></a><h3>Example launch line</h3>
+<a name="idp11609712"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -65,7 +65,7 @@ Gaussianblur blurs the video stream in realtime.
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp11936528"></a><h3>Element Information</h3>
+<a name="idp11607376"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -88,7 +88,7 @@ Gaussianblur blurs the video stream in realtime.
</div>
<hr>
<div class="refsect2">
-<a name="idp8358144"></a><h3>Element Pads</h3>
+<a name="idp11168416"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-jpegparse.html b/docs/plugins/html/gst-plugins-bad-plugins-jpegparse.html
index 5fc7c48c..b15d79e8 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-jpegparse.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-jpegparse.html
@@ -71,7 +71,7 @@ among others. Jpegparse can also extract metadata (e.g. xmp).
<p>
</p>
<div class="refsect2">
-<a name="idp7188976"></a><h3>Example launch line</h3>
+<a name="idp12151888"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -91,7 +91,7 @@ HTTP and stores it in a matroska file.
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp6175104"></a><h3>Element Information</h3>
+<a name="idp10995520"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -114,7 +114,7 @@ HTTP and stores it in a matroska file.
</div>
<hr>
<div class="refsect2">
-<a name="idp11952080"></a><h3>Element Pads</h3>
+<a name="idp6253152"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-kaleidoscope.html b/docs/plugins/html/gst-plugins-bad-plugins-kaleidoscope.html
index 7800f159..d538cf7e 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-kaleidoscope.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-kaleidoscope.html
@@ -71,7 +71,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp11259824"></a><h3>Element Information</h3>
+<a name="idp6889120"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -94,7 +94,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp12103456"></a><h3>Element Pads</h3>
+<a name="idp11549392"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-liveadder.html b/docs/plugins/html/gst-plugins-bad-plugins-liveadder.html
index dd6c40fa..d054e6bb 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-liveadder.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-liveadder.html
@@ -76,7 +76,7 @@ Last reviewed on 2008-02-10 (0.10.11)
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp9606896"></a><h3>Element Information</h3>
+<a name="idp6484256"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -99,7 +99,7 @@ Last reviewed on 2008-02-10 (0.10.11)
</div>
<hr>
<div class="refsect2">
-<a name="idp12237904"></a><h3>Element Pads</h3>
+<a name="idp11534320"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-marble.html b/docs/plugins/html/gst-plugins-bad-plugins-marble.html
index 5361690c..0a978453 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-marble.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-marble.html
@@ -71,7 +71,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp7007536"></a><h3>Element Information</h3>
+<a name="idp7476688"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -94,7 +94,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp12360224"></a><h3>Element Pads</h3>
+<a name="idp12162560"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-mimdec.html b/docs/plugins/html/gst-plugins-bad-plugins-mimdec.html
index 11198feb..e27409ed 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-mimdec.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-mimdec.html
@@ -57,7 +57,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp6388880"></a><h3>Element Information</h3>
+<a name="idp11936640"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -80,7 +80,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp10946384"></a><h3>Element Pads</h3>
+<a name="idp7828880"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-mimenc.html b/docs/plugins/html/gst-plugins-bad-plugins-mimenc.html
index 07ea3d22..c3b65c99 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-mimenc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-mimenc.html
@@ -65,7 +65,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp7739760"></a><h3>Element Information</h3>
+<a name="idp8767520"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -88,7 +88,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp9957840"></a><h3>Element Pads</h3>
+<a name="idp5687216"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-mirror.html b/docs/plugins/html/gst-plugins-bad-plugins-mirror.html
index d27824e0..ae1e42c9 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-mirror.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-mirror.html
@@ -68,7 +68,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp7850544"></a><h3>Element Information</h3>
+<a name="idp8545584"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -91,7 +91,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp7024800"></a><h3>Element Pads</h3>
+<a name="idp8496368"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-modplug.html b/docs/plugins/html/gst-plugins-bad-plugins-modplug.html
index 4e13ca62..89424d4b 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-modplug.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-modplug.html
@@ -76,7 +76,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp12308432"></a><h3>Element Information</h3>
+<a name="idp10394880"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -99,7 +99,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp13019216"></a><h3>Element Pads</h3>
+<a name="idp12478608"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-mpeg2enc.html b/docs/plugins/html/gst-plugins-bad-plugins-mpeg2enc.html
index d811812d..f3e04e30 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-mpeg2enc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-mpeg2enc.html
@@ -106,7 +106,7 @@ GstMpeg2enc implements
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp13782656"></a><h3>Element Information</h3>
+<a name="idp13298064"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -130,7 +130,7 @@ Ronald Bultje &lt;rbultje@ronald.bitfreak.net&gt;</td>
</div>
<hr>
<div class="refsect2">
-<a name="idp13790064"></a><h3>Element Pads</h3>
+<a name="idp12672880"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-mpg123audiodec.html b/docs/plugins/html/gst-plugins-bad-plugins-mpg123audiodec.html
new file mode 100644
index 00000000..bb6797d6
--- /dev/null
+++ b/docs/plugins/html/gst-plugins-bad-plugins-mpg123audiodec.html
@@ -0,0 +1,146 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>mpg123audiodec</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
+<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
+<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
+<link rel="prev" href="gst-plugins-bad-plugins-mplex.html" title="mplex">
+<link rel="next" href="gst-plugins-bad-plugins-pcapparse.html" title="pcapparse">
+<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="gst-plugins-bad-plugins-mplex.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">GStreamer Bad Plugins 1.0 Plugins Reference Manual</th>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-pcapparse.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#gst-plugins-bad-plugins-mpg123audiodec.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#gst-plugins-bad-plugins-mpg123audiodec.description" class="shortcut">Description</a>
+  | 
+ <a href="#gst-plugins-bad-plugins-mpg123audiodec.object-hierarchy" class="shortcut">Object Hierarchy</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="gst-plugins-bad-plugins-mpg123audiodec"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="gst-plugins-bad-plugins-mpg123audiodec.top_of_page"></a>mpg123audiodec</span></h2>
+<p>mpg123audiodec — Decodes mp3 streams using the mpg123 library</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="gst-plugins-bad-plugins-mpg123audiodec.synopsis"></a><h2>Synopsis</h2>
+<a name="GstMpg123AudioDec"></a><pre class="synopsis">struct <a class="link" href="gst-plugins-bad-plugins-mpg123audiodec.html#GstMpg123AudioDec-struct" title="struct GstMpg123AudioDec">GstMpg123AudioDec</a>;
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-mpg123audiodec.object-hierarchy"></a><h2>Object Hierarchy</h2>
+<pre class="synopsis">
+ <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
+ +----<a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GInitiallyUnowned">GInitiallyUnowned</a>
+ +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html">GstObject</a>
+ +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstElement.html">GstElement</a>
+ +----<a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudiodecoder.html#GstAudioDecoder">GstAudioDecoder</a>
+ +----GstMpg123AudioDec
+</pre>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-mpg123audiodec.description"></a><h2>Description</h2>
+<div class="refsynopsisdiv">
+<h2>Synopsis</h2>
+<div class="refsect2">
+<a name="idp5431792"></a><h3>Element Information</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">plugin</span></p></td>
+<td>
+ mpg123
+ </td>
+</tr>
+<tr>
+<td><p><span class="term">author</span></p></td>
+<td>Carlos Rafael Giani &lt;dv@pseudoterminal.org&gt;</td>
+</tr>
+<tr>
+<td><p><span class="term">class</span></p></td>
+<td>Codec/Decoder/Audio</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="idp6793888"></a><h3>Element Pads</h3>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>sink</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>audio/mpeg, mpegversion=(int){ 1 }, layer=(int)[ 1, 3 ], rate=(int){ 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000 }, channels=(int)[ 1, 2 ], parsed=(boolean)true</td>
+</tr>
+</tbody>
+</table></div>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term">name</span></p></td>
+<td>src</td>
+</tr>
+<tr>
+<td><p><span class="term">direction</span></p></td>
+<td>source</td>
+</tr>
+<tr>
+<td><p><span class="term">presence</span></p></td>
+<td>always</td>
+</tr>
+<tr>
+<td><p><span class="term">details</span></p></td>
+<td>audio/x-raw, format=(string){ S16LE, U16LE, S32LE, U32LE, S24LE, U24LE, F32LE }, rate=(int){ 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000 }, channels=(int)[ 1, 2 ], layout=(string)interleaved</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<p>
+</p>
+</div>
+<div class="refsect1">
+<a name="gst-plugins-bad-plugins-mpg123audiodec.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="GstMpg123AudioDec-struct"></a><h3>struct GstMpg123AudioDec</h3>
+<pre class="programlisting">struct GstMpg123AudioDec;</pre>
+<p>
+</p>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.18</div>
+</body>
+</html> \ No newline at end of file
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-mplex.html b/docs/plugins/html/gst-plugins-bad-plugins-mplex.html
index f571581f..3e09415d 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-mplex.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-mplex.html
@@ -7,7 +7,7 @@
<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
<link rel="prev" href="gst-plugins-bad-plugins-mpeg2enc.html" title="mpeg2enc">
-<link rel="next" href="gst-plugins-bad-plugins-pcapparse.html" title="pcapparse">
+<link rel="next" href="gst-plugins-bad-plugins-mpg123audiodec.html" title="mpg123audiodec">
<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
@@ -18,7 +18,7 @@
<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
<th width="100%" align="center">GStreamer Bad Plugins 1.0 Plugins Reference Manual</th>
-<td><a accesskey="n" href="gst-plugins-bad-plugins-pcapparse.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+<td><a accesskey="n" href="gst-plugins-bad-plugins-mpg123audiodec.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
</tr>
<tr><td colspan="5" class="shortcuts">
<a href="#gst-plugins-bad-plugins-mplex.synopsis" class="shortcut">Top</a>
@@ -71,7 +71,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp6494448"></a><h3>Element Information</h3>
+<a name="idp6574128"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -96,7 +96,7 @@ Mark Nauwelaerts &lt;mnauw@users.sourceforge.net&gt;</td>
</div>
<hr>
<div class="refsect2">
-<a name="idp7233392"></a><h3>Element Pads</h3>
+<a name="idp3286704"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-opencvtextoverlay.html b/docs/plugins/html/gst-plugins-bad-plugins-opencvtextoverlay.html
index b7af572d..87b99cca 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-opencvtextoverlay.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-opencvtextoverlay.html
@@ -62,7 +62,7 @@ struct <a class="link" href="gst-plugins-bad-plugins-opencvtextover
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp18451504"></a><h3>Element Information</h3>
+<a name="idp15855968"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -85,7 +85,7 @@ struct <a class="link" href="gst-plugins-bad-plugins-opencvtextover
</div>
<hr>
<div class="refsect2">
-<a name="idp20159808"></a><h3>Element Pads</h3>
+<a name="idp19195696"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-pcapparse.html b/docs/plugins/html/gst-plugins-bad-plugins-pcapparse.html
index 4d048c27..4c711ad8 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-pcapparse.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-pcapparse.html
@@ -6,7 +6,7 @@
<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
<link rel="home" href="index.html" title="GStreamer Bad Plugins 1.0 Plugins Reference Manual">
<link rel="up" href="ch01.html" title="gst-plugins-bad Elements">
-<link rel="prev" href="gst-plugins-bad-plugins-mplex.html" title="mplex">
+<link rel="prev" href="gst-plugins-bad-plugins-mpg123audiodec.html" title="mpg123audiodec">
<link rel="next" href="gst-plugins-bad-plugins-pinch.html" title="pinch">
<meta name="generator" content="GTK-Doc V1.18 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
@@ -14,7 +14,7 @@
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
<tr valign="middle">
-<td><a accesskey="p" href="gst-plugins-bad-plugins-mplex.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="gst-plugins-bad-plugins-mpg123audiodec.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
<th width="100%" align="center">GStreamer Bad Plugins 1.0 Plugins Reference Manual</th>
@@ -76,7 +76,7 @@ should be included.
<p>
</p>
<div class="refsect2">
-<a name="idp12991376"></a><h3>Example pipelines</h3>
+<a name="idp12954160"></a><h3>Example pipelines</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -97,7 +97,7 @@ depayload and decode them.
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp12994208"></a><h3>Element Information</h3>
+<a name="idp12956992"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -120,7 +120,7 @@ depayload and decode them.
</div>
<hr>
<div class="refsect2">
-<a name="idp13001616"></a><h3>Element Pads</h3>
+<a name="idp12964400"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-pinch.html b/docs/plugins/html/gst-plugins-bad-plugins-pinch.html
index 4c35cb9a..7dc9bd4c 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-pinch.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-pinch.html
@@ -69,7 +69,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp6992816"></a><h3>Element Information</h3>
+<a name="idp9461136"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -92,7 +92,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp13602240"></a><h3>Element Pads</h3>
+<a name="idp13070992"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
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 ba510797..7432f8bb 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-assrender.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-assrender.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp18341264"></a><h2>Plugin Information</h2>
+<a name="idp17823488"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp19029552"></a><h2>Elements</h2>
+<a name="idp17902656"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
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 180da8f3..79505c87 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-audiovisualizers.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-audiovisualizers.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp18602912"></a><h2>Plugin Information</h2>
+<a name="idp16462768"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp17927264"></a><h2>Elements</h2>
+<a name="idp18903840"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
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 c93e7754..a4147119 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-autoconvert.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-autoconvert.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp18245856"></a><h2>Plugin Information</h2>
+<a name="idp14737248"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp17446480"></a><h2>Elements</h2>
+<a name="idp16513856"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
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 0a3894c7..1d0e9610 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-bayer.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-bayer.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp18833536"></a><h2>Plugin Information</h2>
+<a name="idp17257008"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp17399632"></a><h2>Elements</h2>
+<a name="idp17951136"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
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 aff6be29..e9747647 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-bz2.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-bz2.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp19467264"></a><h2>Plugin Information</h2>
+<a name="idp18556896"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp15506736"></a><h2>Elements</h2>
+<a name="idp19380224"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
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 2bd7b44f..8c3a8741 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-camerabin.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-camerabin.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp18993616"></a><h2>Plugin Information</h2>
+<a name="idp13908736"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp18092128"></a><h2>Elements</h2>
+<a name="idp19219712"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-celt.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-celt.html
index 4ff38d7f..25b0a269 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-celt.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-celt.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp14745344"></a><h2>Plugin Information</h2>
+<a name="idp19110816"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp18213680"></a><h2>Elements</h2>
+<a name="idp17927728"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
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 5b01a223..efbb8501 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-coloreffects.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-coloreffects.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp16261952"></a><h2>Plugin Information</h2>
+<a name="idp17326816"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp18281296"></a><h2>Elements</h2>
+<a name="idp15258576"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
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 b9440a74..c8e6eda4 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-curl.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-curl.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp17731712"></a><h2>Plugin Information</h2>
+<a name="idp16123040"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp14368864"></a><h2>Elements</h2>
+<a name="idp17373744"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
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 2193eb49..d3cfe76a 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dataurisrc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dataurisrc.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp16272096"></a><h2>Plugin Information</h2>
+<a name="idp14476528"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp17060720"></a><h2>Elements</h2>
+<a name="idp20252240"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
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 e6eabe7d..d4ead1e9 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-debugutilsbad.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-debugutilsbad.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp15038144"></a><h2>Plugin Information</h2>
+<a name="idp14975792"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp14135648"></a><h2>Elements</h2>
+<a name="idp15474128"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dirac.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dirac.html
index 5a1aa8a7..afd47816 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dirac.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dirac.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp15178032"></a><h2>Plugin Information</h2>
+<a name="idp16769984"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp15645840"></a><h2>Elements</h2>
+<a name="idp18758176"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dtmf.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dtmf.html
index 1652e7a1..663415a9 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dtmf.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dtmf.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp16227312"></a><h2>Plugin Information</h2>
+<a name="idp15663584"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp14540592"></a><h2>Elements</h2>
+<a name="idp17076944"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
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 401fb3e5..0124b608 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dtsdec.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dtsdec.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp15198080"></a><h2>Plugin Information</h2>
+<a name="idp19754352"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp20803840"></a><h2>Elements</h2>
+<a name="idp15591376"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
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 f6f16538..65ae2a67 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dvb.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dvb.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp21347824"></a><h2>Plugin Information</h2>
+<a name="idp18060864"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp18941456"></a><h2>Elements</h2>
+<a name="idp15192768"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
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 2749aac1..77d43fb2 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dvdspu.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dvdspu.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp15033584"></a><h2>Plugin Information</h2>
+<a name="idp20475568"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp17976752"></a><h2>Elements</h2>
+<a name="idp14596448"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
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 c2c29862..ef7eeefb 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-faac.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-faac.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp16956720"></a><h2>Plugin Information</h2>
+<a name="idp16471888"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp18509232"></a><h2>Elements</h2>
+<a name="idp17721872"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
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 d5d0a7f2..c3544800 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-faad.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-faad.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp15484768"></a><h2>Plugin Information</h2>
+<a name="idp18029696"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp18740304"></a><h2>Elements</h2>
+<a name="idp20330176"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
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 ee2a6668..82832cb0 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-festival.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-festival.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp17990208"></a><h2>Plugin Information</h2>
+<a name="idp18861280"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp17483168"></a><h2>Elements</h2>
+<a name="idp15751120"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
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 9100a7ce..62120412 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-gaudieffects.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-gaudieffects.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp16911424"></a><h2>Plugin Information</h2>
+<a name="idp19689648"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp19525264"></a><h2>Elements</h2>
+<a name="idp17200416"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
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 8b9f7ba9..d8c40c7a 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-geometrictransform.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-geometrictransform.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp15203792"></a><h2>Plugin Information</h2>
+<a name="idp15822000"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp17530032"></a><h2>Elements</h2>
+<a name="idp17293040"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
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 b0f84334..5a836a20 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-gsm.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-gsm.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp16466848"></a><h2>Plugin Information</h2>
+<a name="idp14951168"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp14930064"></a><h2>Elements</h2>
+<a name="idp18460864"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
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 9ac70b03..765efd9f 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-jpegformat.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-jpegformat.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp18950080"></a><h2>Plugin Information</h2>
+<a name="idp15003600"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp18571824"></a><h2>Elements</h2>
+<a name="idp15878672"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
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 963ae7a3..74f8e408 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-liveadder.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-liveadder.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp14971776"></a><h2>Plugin Information</h2>
+<a name="idp15776128"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp18938512"></a><h2>Elements</h2>
+<a name="idp13997472"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
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 e3dbbef9..54a479b1 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mimic.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mimic.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp21020208"></a><h2>Plugin Information</h2>
+<a name="idp18492992"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp19716976"></a><h2>Elements</h2>
+<a name="idp17706208"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
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 0edd1679..499815e5 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mms.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mms.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp17581664"></a><h2>Plugin Information</h2>
+<a name="idp14584016"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp14239824"></a><h2>Elements</h2>
+<a name="idp15511808"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
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 71e24b05..2ef12157 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-modplug.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-modplug.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp14949664"></a><h2>Plugin Information</h2>
+<a name="idp21218816"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp15155808"></a><h2>Elements</h2>
+<a name="idp17632208"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
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 23cf40aa..52b51cd1 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpeg2enc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpeg2enc.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp15374752"></a><h2>Plugin Information</h2>
+<a name="idp17922912"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp16957008"></a><h2>Elements</h2>
+<a name="idp14419184"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
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 29dbfa0a..fe645233 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegtsmux.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegtsmux.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp18415424"></a><h2>Plugin Information</h2>
+<a name="idp14601872"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp14835776"></a><h2>Elements</h2>
+<a name="idp15914464"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
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 f2ac9a6c..64eb1cbe 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mplex.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mplex.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp14455552"></a><h2>Plugin Information</h2>
+<a name="idp18577040"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp20042048"></a><h2>Elements</h2>
+<a name="idp15855680"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
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 d965c025..bc381342 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-opencv.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-opencv.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp16092896"></a><h2>Plugin Information</h2>
+<a name="idp15307200"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp19465728"></a><h2>Elements</h2>
+<a name="idp14496592"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
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 57c0ed1a..eea4d0fd 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-pcapparse.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-pcapparse.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp14806000"></a><h2>Plugin Information</h2>
+<a name="idp20943504"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp18588752"></a><h2>Elements</h2>
+<a name="idp15058320"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
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 29b9e086..e134e53a 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-rawparse.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rawparse.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp15030800"></a><h2>Plugin Information</h2>
+<a name="idp15687120"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp16392576"></a><h2>Elements</h2>
+<a name="idp18480896"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-rtmp.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rtmp.html
index 026feca9..26502ce3 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-rtmp.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rtmp.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp16553728"></a><h2>Plugin Information</h2>
+<a name="idp20659984"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp14620768"></a><h2>Elements</h2>
+<a name="idp16419824"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-rtpmux.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rtpmux.html
index 273be4da..e4783797 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-rtpmux.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rtpmux.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp20236480"></a><h2>Plugin Information</h2>
+<a name="idp20560368"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp14729376"></a><h2>Elements</h2>
+<a name="idp17425984"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-plugin-scaletempo.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-scaletempo.html
index 4b9dfbf7..dd93cd8b 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-scaletempo.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-scaletempo.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp15163280"></a><h2>Plugin Information</h2>
+<a name="idp14430464"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp18569248"></a><h2>Elements</h2>
+<a name="idp14058224"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
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 8c7e49d4..14369e86 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-sdp.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-sdp.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp16948688"></a><h2>Plugin Information</h2>
+<a name="idp21499248"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp18040496"></a><h2>Elements</h2>
+<a name="idp16287536"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
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 afad5296..10fa7e17 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-shm.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-shm.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp18531216"></a><h2>Plugin Information</h2>
+<a name="idp15166320"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp16842560"></a><h2>Elements</h2>
+<a name="idp16570656"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
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 05cb8dab..0dcbbc12 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-soundtouch.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-soundtouch.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp15725968"></a><h2>Plugin Information</h2>
+<a name="idp21473520"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp18453488"></a><h2>Elements</h2>
+<a name="idp14756528"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
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 e43ff2b2..d21ca76f 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-speed.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-speed.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp15285328"></a><h2>Plugin Information</h2>
+<a name="idp21172480"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp17602064"></a><h2>Elements</h2>
+<a name="idp20332352"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
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 34e91c33..dff6741c 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-voaacenc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-voaacenc.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp19862528"></a><h2>Plugin Information</h2>
+<a name="idp15888384"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp20740096"></a><h2>Elements</h2>
+<a name="idp18707104"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
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 1e9c5db1..5a426d99 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-voamrwbenc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-voamrwbenc.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp16952144"></a><h2>Plugin Information</h2>
+<a name="idp17580288"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp14202992"></a><h2>Elements</h2>
+<a name="idp14186432"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
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 3d004e4b..c120859d 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-zbar.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-zbar.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp17172160"></a><h2>Plugin Information</h2>
+<a name="idp16364528"></a><h2>Plugin Information</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -39,7 +39,7 @@
</tr>
<tr>
<td><p><span class="term">version</span></p></td>
-<td>1.0.1</td>
+<td>1.0.2</td>
</tr>
<tr>
<td><p><span class="term">run-time license</span></p></td>
@@ -57,7 +57,7 @@
</table></div>
</div>
<div class="refsect1">
-<a name="idp17969616"></a><h2>Elements</h2>
+<a name="idp14155856"></a><h2>Elements</h2>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody><tr>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-pyramidsegment.html b/docs/plugins/html/gst-plugins-bad-plugins-pyramidsegment.html
index 0d09e8eb..8c53d267 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-pyramidsegment.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-pyramidsegment.html
@@ -45,7 +45,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp12810000"></a><h3>Element Information</h3>
+<a name="idp12588176"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -68,7 +68,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp10032752"></a><h3>Element Pads</h3>
+<a name="idp10750352"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-rtmpsink.html b/docs/plugins/html/gst-plugins-bad-plugins-rtmpsink.html
index 997f11ea..2469beca 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-rtmpsink.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-rtmpsink.html
@@ -74,7 +74,7 @@ GstRTMPSink implements
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp7845072"></a><h3>Element Information</h3>
+<a name="idp10313856"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -97,7 +97,7 @@ GstRTMPSink implements
</div>
<hr>
<div class="refsect2">
-<a name="idp10991280"></a><h3>Element Pads</h3>
+<a name="idp12618240"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-rtmpsrc.html b/docs/plugins/html/gst-plugins-bad-plugins-rtmpsrc.html
index d2655731..18c02a08 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-rtmpsrc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-rtmpsrc.html
@@ -75,7 +75,7 @@ GstRTMPSrc implements
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp13737776"></a><h3>Element Information</h3>
+<a name="idp12660144"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -98,7 +98,7 @@ GstRTMPSrc implements
</div>
<hr>
<div class="refsect2">
-<a name="idp12933840"></a><h3>Element Pads</h3>
+<a name="idp13223792"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-rtpdtmfmux.html b/docs/plugins/html/gst-plugins-bad-plugins-rtpdtmfmux.html
index a0ac9b1f..67dbab9e 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-rtpdtmfmux.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-rtpdtmfmux.html
@@ -78,7 +78,7 @@ DTMF signal can replace the recorded audio while the tone is being sent.
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp17697280"></a><h3>Element Information</h3>
+<a name="idp17239280"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -101,7 +101,7 @@ DTMF signal can replace the recorded audio while the tone is being sent.
</div>
<hr>
<div class="refsect2">
-<a name="idp16314192"></a><h3>Element Pads</h3>
+<a name="idp18487696"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-rtpdtmfsrc.html b/docs/plugins/html/gst-plugins-bad-plugins-rtpdtmfsrc.html
index a4cbc817..fa4ecf64 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-rtpdtmfsrc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-rtpdtmfsrc.html
@@ -169,7 +169,7 @@ READY state, then a "dtmf-event-dropped" message is posted on the
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp16612992"></a><h3>Element Information</h3>
+<a name="idp15967776"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -192,7 +192,7 @@ READY state, then a "dtmf-event-dropped" message is posted on the
</div>
<hr>
<div class="refsect2">
-<a name="idp16620448"></a><h3>Element Pads</h3>
+<a name="idp15975232"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-rtpmux.html b/docs/plugins/html/gst-plugins-bad-plugins-rtpmux.html
index a637f5a4..1372d242 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-rtpmux.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-rtpmux.html
@@ -73,7 +73,7 @@ muxes into a single stream with a single SSRC.
<p>
</p>
<div class="refsect2">
-<a name="idp16384384"></a><h3>Example pipelines</h3>
+<a name="idp15425376"></a><h3>Example pipelines</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -107,7 +107,7 @@ Last reviewed on 2010-09-30 (0.10.21)
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp18101040"></a><h3>Element Information</h3>
+<a name="idp17279632"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -130,7 +130,7 @@ Last reviewed on 2010-09-30 (0.10.21)
</div>
<hr>
<div class="refsect2">
-<a name="idp17243504"></a><h3>Element Pads</h3>
+<a name="idp18599952"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-scaletempo.html b/docs/plugins/html/gst-plugins-bad-plugins-scaletempo.html
index 47f33b4f..098e77ea 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-scaletempo.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-scaletempo.html
@@ -77,7 +77,7 @@ Use Sceletempo to apply playback rates without the chipmunk effect.
<p>
</p>
<div class="refsect2">
-<a name="idp14968480"></a><h3>Example pipelines</h3>
+<a name="idp15122912"></a><h3>Example pipelines</h3>
<p>
</p>
<div class="informalexample">
@@ -135,7 +135,7 @@ the algoritm looks.
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp18200048"></a><h3>Element Information</h3>
+<a name="idp17113056"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -158,7 +158,7 @@ the algoritm looks.
</div>
<hr>
<div class="refsect2">
-<a name="idp19138432"></a><h3>Element Pads</h3>
+<a name="idp17120464"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-sdpdemux.html b/docs/plugins/html/gst-plugins-bad-plugins-sdpdemux.html
index 00f4b0b5..15f8dff5 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-sdpdemux.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-sdpdemux.html
@@ -93,7 +93,7 @@ PLAYING state.
<p>
</p>
<div class="refsect2">
-<a name="idp14331600"></a><h3>Example launch line</h3>
+<a name="idp14238944"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -115,7 +115,7 @@ Last reviewed on 2007-10-01 (0.10.6)
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp14334848"></a><h3>Element Information</h3>
+<a name="idp14242192"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -138,7 +138,7 @@ Last reviewed on 2007-10-01 (0.10.6)
</div>
<hr>
<div class="refsect2">
-<a name="idp17318256"></a><h3>Element Pads</h3>
+<a name="idp14249664"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-shmsink.html b/docs/plugins/html/gst-plugins-bad-plugins-shmsink.html
index 93dfc0d6..2594bfe1 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-shmsink.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-shmsink.html
@@ -79,7 +79,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp18484064"></a><h3>Element Information</h3>
+<a name="idp17762016"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -102,7 +102,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp14653616"></a><h3>Element Pads</h3>
+<a name="idp18225808"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-shmsrc.html b/docs/plugins/html/gst-plugins-bad-plugins-shmsrc.html
index d528d9d7..ab711b44 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-shmsrc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-shmsrc.html
@@ -68,7 +68,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp18810464"></a><h3>Element Information</h3>
+<a name="idp18584864"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -91,7 +91,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp14891264"></a><h3>Element Pads</h3>
+<a name="idp15764656"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-solarize.html b/docs/plugins/html/gst-plugins-bad-plugins-solarize.html
index 13627d41..f5a5ce09 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-solarize.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-solarize.html
@@ -73,7 +73,7 @@ Solarize does a smart inverse in a video stream in realtime.
<p>
</p>
<div class="refsect2">
-<a name="idp15543696"></a><h3>Example launch line</h3>
+<a name="idp15260592"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -91,7 +91,7 @@ Solarize does a smart inverse in a video stream in realtime.
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp18113056"></a><h3>Element Information</h3>
+<a name="idp16156960"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -114,7 +114,7 @@ Solarize does a smart inverse in a video stream in realtime.
</div>
<hr>
<div class="refsect2">
-<a name="idp18120464"></a><h3>Element Pads</h3>
+<a name="idp14195904"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-spacescope.html b/docs/plugins/html/gst-plugins-bad-plugins-spacescope.html
index 140e4ae9..6ea5ff90 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-spacescope.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-spacescope.html
@@ -70,7 +70,7 @@ right channel to x and y coordinates.
<p>
</p>
<div class="refsect2">
-<a name="idp16360544"></a><h3>Example launch line</h3>
+<a name="idp14971952"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -88,7 +88,7 @@ right channel to x and y coordinates.
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp16956096"></a><h3>Element Information</h3>
+<a name="idp16387936"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -111,7 +111,7 @@ right channel to x and y coordinates.
</div>
<hr>
<div class="refsect2">
-<a name="idp16760656"></a><h3>Element Pads</h3>
+<a name="idp18828288"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-spectrascope.html b/docs/plugins/html/gst-plugins-bad-plugins-spectrascope.html
index e588cb52..64b005bf 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-spectrascope.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-spectrascope.html
@@ -62,7 +62,7 @@ frequency spectrum as a series of bars.
<p>
</p>
<div class="refsect2">
-<a name="idp15115872"></a><h3>Example launch line</h3>
+<a name="idp14481504"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -80,7 +80,7 @@ frequency spectrum as a series of bars.
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp14855504"></a><h3>Element Information</h3>
+<a name="idp18531952"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -103,7 +103,7 @@ frequency spectrum as a series of bars.
</div>
<hr>
<div class="refsect2">
-<a name="idp16520896"></a><h3>Element Pads</h3>
+<a name="idp14665792"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-speed.html b/docs/plugins/html/gst-plugins-bad-plugins-speed.html
index 54e87ca1..92890b36 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-speed.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-speed.html
@@ -74,7 +74,7 @@ requires a fairly up-to-date gst-plugins-base, as of February 2007).
<p>
</p>
<div class="refsect2">
-<a name="idp16722208"></a><h3>Example launch line</h3>
+<a name="idp15250384"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -95,7 +95,7 @@ Last reviewed on 2007-02-26 (0.10.4.1)
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp17126768"></a><h3>Element Information</h3>
+<a name="idp18464976"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -118,7 +118,7 @@ Last reviewed on 2007-02-26 (0.10.4.1)
</div>
<hr>
<div class="refsect2">
-<a name="idp15287296"></a><h3>Element Pads</h3>
+<a name="idp14266736"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-sphere.html b/docs/plugins/html/gst-plugins-bad-plugins-sphere.html
index 7542ad1c..5db1d9dd 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-sphere.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-sphere.html
@@ -69,7 +69,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp16535872"></a><h3>Element Information</h3>
+<a name="idp16170480"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -92,7 +92,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp14639632"></a><h3>Element Pads</h3>
+<a name="idp13810624"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-square.html b/docs/plugins/html/gst-plugins-bad-plugins-square.html
index c10e0d94..a2eed595 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-square.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-square.html
@@ -70,7 +70,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp18523312"></a><h3>Element Information</h3>
+<a name="idp17866240"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -93,7 +93,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp19456000"></a><h3>Element Pads</h3>
+<a name="idp19585248"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-stretch.html b/docs/plugins/html/gst-plugins-bad-plugins-stretch.html
index 88e75842..6369b394 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-stretch.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-stretch.html
@@ -69,7 +69,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp15129216"></a><h3>Element Information</h3>
+<a name="idp18812224"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -92,7 +92,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp14564208"></a><h3>Element Pads</h3>
+<a name="idp17819264"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-synaescope.html b/docs/plugins/html/gst-plugins-bad-plugins-synaescope.html
index 5e834f15..2f38861b 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-synaescope.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-synaescope.html
@@ -62,7 +62,7 @@ out-of phase properties of audio and draws this as clouds of stars.
<p>
</p>
<div class="refsect2">
-<a name="idp15309472"></a><h3>Example launch line</h3>
+<a name="idp13836752"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -80,7 +80,7 @@ out-of phase properties of audio and draws this as clouds of stars.
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp18216848"></a><h3>Element Information</h3>
+<a name="idp18808256"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -103,7 +103,7 @@ out-of phase properties of audio and draws this as clouds of stars.
</div>
<hr>
<div class="refsect2">
-<a name="idp17948704"></a><h3>Element Pads</h3>
+<a name="idp15943312"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-templatematch.html b/docs/plugins/html/gst-plugins-bad-plugins-templatematch.html
index 878718da..4c7f1e91 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-templatematch.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-templatematch.html
@@ -56,7 +56,7 @@ struct <a class="link" href="gst-plugins-bad-plugins-templatematch.
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp17634112"></a><h3>Element Information</h3>
+<a name="idp15142416"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -79,7 +79,7 @@ struct <a class="link" href="gst-plugins-bad-plugins-templatematch.
</div>
<hr>
<div class="refsect2">
-<a name="idp18432016"></a><h3>Element Pads</h3>
+<a name="idp15230384"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-tunnel.html b/docs/plugins/html/gst-plugins-bad-plugins-tunnel.html
index df609cf6..d32cfe7f 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-tunnel.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-tunnel.html
@@ -61,7 +61,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp16518912"></a><h3>Element Information</h3>
+<a name="idp16817216"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -84,7 +84,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp18855872"></a><h3>Element Pads</h3>
+<a name="idp13924240"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-twirl.html b/docs/plugins/html/gst-plugins-bad-plugins-twirl.html
index 61794514..17db8560 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-twirl.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-twirl.html
@@ -69,7 +69,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp18439824"></a><h3>Element Information</h3>
+<a name="idp17989616"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -92,7 +92,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp19534592"></a><h3>Element Pads</h3>
+<a name="idp18379216"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-videoparse.html b/docs/plugins/html/gst-plugins-bad-plugins-videoparse.html
index 8b761d0a..4082f5db 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-videoparse.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-videoparse.html
@@ -82,7 +82,7 @@ Converts a byte stream into video frames.
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp20509056"></a><h3>Element Information</h3>
+<a name="idp20109808"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -105,7 +105,7 @@ Converts a byte stream into video frames.
</div>
<hr>
<div class="refsect2">
-<a name="idp20516464"></a><h3>Element Pads</h3>
+<a name="idp20117216"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-voaacenc.html b/docs/plugins/html/gst-plugins-bad-plugins-voaacenc.html
index 9887879c..6227b4a1 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-voaacenc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-voaacenc.html
@@ -74,7 +74,7 @@ GstVoAacEnc implements
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp17691104"></a><h3>Element Information</h3>
+<a name="idp16983632"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -97,7 +97,7 @@ GstVoAacEnc implements
</div>
<hr>
<div class="refsect2">
-<a name="idp20219376"></a><h3>Element Pads</h3>
+<a name="idp20224992"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-voamrwbenc.html b/docs/plugins/html/gst-plugins-bad-plugins-voamrwbenc.html
index f422b7e9..c52a5740 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-voamrwbenc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-voamrwbenc.html
@@ -44,7 +44,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp15808240"></a><h3>Element Information</h3>
+<a name="idp19108592"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -67,7 +67,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp16859936"></a><h3>Element Pads</h3>
+<a name="idp17748704"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-waterripple.html b/docs/plugins/html/gst-plugins-bad-plugins-waterripple.html
index 6c425ecf..32ab2aa0 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-waterripple.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-waterripple.html
@@ -71,7 +71,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp17183056"></a><h3>Element Information</h3>
+<a name="idp17955840"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -94,7 +94,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp20193648"></a><h3>Element Pads</h3>
+<a name="idp19807152"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-wavescope.html b/docs/plugins/html/gst-plugins-bad-plugins-wavescope.html
index 141ac44d..ae16ba13 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-wavescope.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-wavescope.html
@@ -70,7 +70,7 @@ like on an oscilloscope.
<p>
</p>
<div class="refsect2">
-<a name="idp16080544"></a><h3>Example launch line</h3>
+<a name="idp18974176"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -88,7 +88,7 @@ like on an oscilloscope.
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp17420672"></a><h3>Element Information</h3>
+<a name="idp18693616"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -111,7 +111,7 @@ like on an oscilloscope.
</div>
<hr>
<div class="refsect2">
-<a name="idp19747824"></a><h3>Element Pads</h3>
+<a name="idp20330848"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-zbar.html b/docs/plugins/html/gst-plugins-bad-plugins-zbar.html
index 1ef97d5b..9cfdc40e 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-zbar.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-zbar.html
@@ -68,7 +68,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp15865936"></a><h3>Element Information</h3>
+<a name="idp18209328"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -91,7 +91,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp19253920"></a><h3>Element Pads</h3>
+<a name="idp19816688"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins.devhelp2 b/docs/plugins/html/gst-plugins-bad-plugins.devhelp2
index 4a649755..a5b71be3 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins.devhelp2
+++ b/docs/plugins/html/gst-plugins-bad-plugins.devhelp2
@@ -30,6 +30,7 @@
<sub name="dvdspu" link="gst-plugins-bad-plugins-dvdspu.html"/>
<sub name="exclusion" link="gst-plugins-bad-plugins-exclusion.html"/>
<sub name="edgedetect" link="gst-plugins-bad-plugins-edgedetect.html"/>
+ <sub name="eglglessink" link="gst-plugins-bad-plugins-eglglessink.html"/>
<sub name="faac" link="gst-plugins-bad-plugins-faac.html"/>
<sub name="faad" link="gst-plugins-bad-plugins-faad.html"/>
<sub name="faceblur" link="gst-plugins-bad-plugins-faceblur.html"/>
@@ -48,6 +49,7 @@
<sub name="modplug" link="gst-plugins-bad-plugins-modplug.html"/>
<sub name="mpeg2enc" link="gst-plugins-bad-plugins-mpeg2enc.html"/>
<sub name="mplex" link="gst-plugins-bad-plugins-mplex.html"/>
+ <sub name="mpg123audiodec" link="gst-plugins-bad-plugins-mpg123audiodec.html"/>
<sub name="pcapparse" link="gst-plugins-bad-plugins-pcapparse.html"/>
<sub name="pinch" link="gst-plugins-bad-plugins-pinch.html"/>
<sub name="pyramidsegment" link="gst-plugins-bad-plugins-pyramidsegment.html"/>
@@ -130,33 +132,33 @@
</sub>
</chapters>
<functions>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-assrender.html#idp8404880"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-assrender.html#idp8583600"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-assrender.html#idp3202368"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-assrender.html#idp8062528"/>
<keyword type="struct" name="struct GstAssRender" link="gst-plugins-bad-plugins-assrender.html#GstAssRender-struct"/>
<keyword type="property" name="The &quot;embeddedfonts&quot; property" link="gst-plugins-bad-plugins-assrender.html#GstAssRender--embeddedfonts"/>
<keyword type="property" name="The &quot;enable&quot; property" link="gst-plugins-bad-plugins-assrender.html#GstAssRender--enable"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-autoconvert.html#idp7508096"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-autoconvert.html#idp9526720"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-autoconvert.html#idp8564480"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-autoconvert.html#idp6639552"/>
<keyword type="struct" name="struct GstAutoConvert" link="gst-plugins-bad-plugins-autoconvert.html#GstAutoConvert-struct"/>
<keyword type="property" name="The &quot;factories&quot; property" link="gst-plugins-bad-plugins-autoconvert.html#GstAutoConvert--factories"/>
<keyword type="property" name="The &quot;initial-identity&quot; property" link="gst-plugins-bad-plugins-autoconvert.html#GstAutoConvert--initial-identity"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-bulge.html#idp8280208"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-bulge.html#idp8707568"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-bulge.html#idp9701168"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-bulge.html#idp5349312"/>
<keyword type="struct" name="struct GstBulge" link="gst-plugins-bad-plugins-bulge.html#GstBulge-struct"/>
<keyword type="property" name="The &quot;zoom&quot; property" link="gst-plugins-bad-plugins-bulge.html#GstBulge--zoom"/>
- <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-burn.html#idp7639184"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-burn.html#idp8481168"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-burn.html#idp7574640"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-burn.html#idp8562096"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-burn.html#idp9697312"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-burn.html#idp7815232"/>
<keyword type="struct" name="struct GstBurn" link="gst-plugins-bad-plugins-burn.html#GstBurn-struct"/>
<keyword type="property" name="The &quot;silent&quot; property" link="gst-plugins-bad-plugins-burn.html#GstBurn--silent"/>
<keyword type="property" name="The &quot;adjustment&quot; property" link="gst-plugins-bad-plugins-burn.html#GstBurn--adjustment"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-camerabin.html#idp7733584"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-camerabin.html#idp8376288"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-celtdec.html#idp9359808"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-celtdec.html#idp5822592"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-camerabin.html#idp6032976"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-camerabin.html#idp7860832"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-celtdec.html#idp3338224"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-celtdec.html#idp7677792"/>
<keyword type="struct" name="struct GstCeltDec" link="gst-plugins-bad-plugins-celtdec.html#GstCeltDec-struct"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-celtenc.html#idp7684592"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-celtenc.html#idp10455584"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-celtenc.html#idp9278592"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-celtenc.html#idp9806544"/>
<keyword type="struct" name="struct GstCeltEnc" link="gst-plugins-bad-plugins-celtenc.html#GstCeltEnc-struct"/>
<keyword type="property" name="The &quot;bitrate&quot; property" link="gst-plugins-bad-plugins-celtenc.html#GstCeltEnc--bitrate"/>
<keyword type="property" name="The &quot;framesize&quot; property" link="gst-plugins-bad-plugins-celtenc.html#GstCeltEnc--framesize"/>
@@ -165,84 +167,84 @@
<keyword type="property" name="The &quot;max-bitrate&quot; property" link="gst-plugins-bad-plugins-celtenc.html#GstCeltEnc--max-bitrate"/>
<keyword type="property" name="The &quot;prediction&quot; property" link="gst-plugins-bad-plugins-celtenc.html#GstCeltEnc--prediction"/>
<keyword type="property" name="The &quot;start-band&quot; property" link="gst-plugins-bad-plugins-celtenc.html#GstCeltEnc--start-band"/>
- <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-chromium.html#idp7061136"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-chromium.html#idp5900448"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-chromium.html#idp8000192"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-chromium.html#idp5255472"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-chromium.html#idp6080816"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-chromium.html#idp7044720"/>
<keyword type="typedef" name="GstChromium" link="gst-plugins-bad-plugins-chromium.html#GstChromium"/>
<keyword type="property" name="The &quot;silent&quot; property" link="gst-plugins-bad-plugins-chromium.html#GstChromium--silent"/>
<keyword type="property" name="The &quot;edge-a&quot; property" link="gst-plugins-bad-plugins-chromium.html#GstChromium--edge-a"/>
<keyword type="property" name="The &quot;edge-b&quot; property" link="gst-plugins-bad-plugins-chromium.html#GstChromium--edge-b"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-circle.html#idp8233456"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-circle.html#idp10151808"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-circle.html#idp8391216"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-circle.html#idp5537376"/>
<keyword type="struct" name="struct GstCircle" link="gst-plugins-bad-plugins-circle.html#GstCircle-struct"/>
<keyword type="property" name="The &quot;angle&quot; property" link="gst-plugins-bad-plugins-circle.html#GstCircle--angle"/>
<keyword type="property" name="The &quot;height&quot; property" link="gst-plugins-bad-plugins-circle.html#GstCircle--height"/>
<keyword type="property" name="The &quot;spread-angle&quot; property" link="gst-plugins-bad-plugins-circle.html#GstCircle--spread-angle"/>
- <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-coloreffects.html#idp6409984"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-coloreffects.html#idp8290272"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-coloreffects.html#idp5747696"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-coloreffects.html#idp9432736"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-coloreffects.html#idp9712496"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-coloreffects.html#idp8417024"/>
<keyword type="struct" name="struct GstColorEffects" link="gst-plugins-bad-plugins-coloreffects.html#GstColorEffects-struct"/>
<keyword type="property" name="The &quot;preset&quot; property" link="gst-plugins-bad-plugins-coloreffects.html#GstColorEffects--preset"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cvdilate.html#idp10241232"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvdilate.html#idp9809216"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cvdilate.html#idp10163840"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvdilate.html#idp8413504"/>
<keyword type="struct" name="struct GstCvDilate" link="gst-plugins-bad-plugins-cvdilate.html#GstCvDilate-struct"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cverode.html#idp10341872"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cverode.html#idp7360800"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cverode.html#idp10234752"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cverode.html#idp7068864"/>
<keyword type="struct" name="struct GstCvErode" link="gst-plugins-bad-plugins-cverode.html#GstCvErode-struct"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cvequalizehist.html#idp2871152"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvequalizehist.html#idp9446880"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cvequalizehist.html#idp7545312"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvequalizehist.html#idp5958128"/>
<keyword type="struct" name="struct GstCvEqualizeHist" link="gst-plugins-bad-plugins-cvequalizehist.html#GstCvEqualizeHist-struct"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cvlaplace.html#idp7331248"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvlaplace.html#idp10419952"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cvlaplace.html#idp9341952"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvlaplace.html#idp7716928"/>
<keyword type="struct" name="struct GstCvLaplace" link="gst-plugins-bad-plugins-cvlaplace.html#GstCvLaplace-struct"/>
<keyword type="property" name="The &quot;aperture-size&quot; property" link="gst-plugins-bad-plugins-cvlaplace.html#GstCvLaplace--aperture-size"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cvsmooth.html#idp7531312"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvsmooth.html#idp8630480"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cvsmooth.html#idp3266864"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvsmooth.html#idp7708688"/>
<keyword type="struct" name="struct GstCvSmooth" link="gst-plugins-bad-plugins-cvsmooth.html#GstCvSmooth-struct"/>
<keyword type="property" name="The &quot;param1&quot; property" link="gst-plugins-bad-plugins-cvsmooth.html#GstCvSmooth--param1"/>
<keyword type="property" name="The &quot;param2&quot; property" link="gst-plugins-bad-plugins-cvsmooth.html#GstCvSmooth--param2"/>
<keyword type="property" name="The &quot;param3&quot; property" link="gst-plugins-bad-plugins-cvsmooth.html#GstCvSmooth--param3"/>
<keyword type="property" name="The &quot;param4&quot; property" link="gst-plugins-bad-plugins-cvsmooth.html#GstCvSmooth--param4"/>
<keyword type="property" name="The &quot;type&quot; property" link="gst-plugins-bad-plugins-cvsmooth.html#GstCvSmooth--type"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cvsobel.html#idp10710976"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvsobel.html#idp10586656"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cvsobel.html#idp7989584"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvsobel.html#idp10260016"/>
<keyword type="struct" name="struct GstCvSobel" link="gst-plugins-bad-plugins-cvsobel.html#GstCvSobel-struct"/>
<keyword type="property" name="The &quot;aperture-size&quot; property" link="gst-plugins-bad-plugins-cvsobel.html#GstCvSobel--aperture-size"/>
<keyword type="property" name="The &quot;x-order&quot; property" link="gst-plugins-bad-plugins-cvsobel.html#GstCvSobel--x-order"/>
<keyword type="property" name="The &quot;y-order&quot; property" link="gst-plugins-bad-plugins-cvsobel.html#GstCvSobel--y-order"/>
- <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-dataurisrc.html#idp9290960"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dataurisrc.html#idp6753888"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dataurisrc.html#idp9932688"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-dataurisrc.html#idp9408688"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dataurisrc.html#idp9062032"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dataurisrc.html#idp9069552"/>
<keyword type="struct" name="struct GstDataURISrc" link="gst-plugins-bad-plugins-dataurisrc.html#GstDataURISrc-struct"/>
<keyword type="property" name="The &quot;uri&quot; property" link="gst-plugins-bad-plugins-dataurisrc.html#GstDataURISrc--uri"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-diffuse.html#idp9385424"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-diffuse.html#idp10611744"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-diffuse.html#idp7601696"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-diffuse.html#idp9907888"/>
<keyword type="struct" name="struct GstDiffuse" link="gst-plugins-bad-plugins-diffuse.html#GstDiffuse-struct"/>
<keyword type="property" name="The &quot;scale&quot; property" link="gst-plugins-bad-plugins-diffuse.html#GstDiffuse--scale"/>
- <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-dilate.html#idp2886704"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dilate.html#idp8369648"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dilate.html#idp11063088"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-dilate.html#idp7021856"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dilate.html#idp8110720"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dilate.html#idp10818864"/>
<keyword type="struct" name="struct GstDilate" link="gst-plugins-bad-plugins-dilate.html#GstDilate-struct"/>
<keyword type="property" name="The &quot;silent&quot; property" link="gst-plugins-bad-plugins-dilate.html#GstDilate--silent"/>
<keyword type="property" name="The &quot;erode&quot; property" link="gst-plugins-bad-plugins-dilate.html#GstDilate--erode"/>
- <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-dodge.html#idp7062528"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dodge.html#idp9413376"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dodge.html#idp7649632"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-dodge.html#idm3184"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dodge.html#idp9626784"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dodge.html#idp10758384"/>
<keyword type="struct" name="struct GstDodge" link="gst-plugins-bad-plugins-dodge.html#GstDodge-struct"/>
<keyword type="property" name="The &quot;silent&quot; property" link="gst-plugins-bad-plugins-dodge.html#GstDodge--silent"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dtmfdetect.html#idp8078608"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dtmfdetect.html#idp8973056"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dtmfdetect.html#idp6982336"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dtmfdetect.html#idp8487424"/>
<keyword type="struct" name="struct GstDtmfDetect" link="gst-plugins-bad-plugins-dtmfdetect.html#GstDtmfDetect-struct"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dtmfsrc.html#idp11698560"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dtmfsrc.html#idp11705968"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dtmfsrc.html#idp10854560"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dtmfsrc.html#idp10861968"/>
<keyword type="struct" name="struct GstDTMFSrc" link="gst-plugins-bad-plugins-dtmfsrc.html#GstDTMFSrc-struct"/>
<keyword type="property" name="The &quot;interval&quot; property" link="gst-plugins-bad-plugins-dtmfsrc.html#GstDTMFSrc--interval"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dtsdec.html#idp7745808"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dtsdec.html#idp6749888"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dtsdec.html#idp7689968"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dtsdec.html#idp6647200"/>
<keyword type="struct" name="struct GstDtsDec" link="gst-plugins-bad-plugins-dtsdec.html#GstDtsDec-struct"/>
<keyword type="property" name="The &quot;drc&quot; property" link="gst-plugins-bad-plugins-dtsdec.html#GstDtsDec--drc"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dvbsrc.html#idp9127440"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dvbsrc.html#idp11736000"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dvbsrc.html#idp11226768"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dvbsrc.html#idp11234288"/>
<keyword type="struct" name="struct GstDvbSrc" link="gst-plugins-bad-plugins-dvbsrc.html#GstDvbSrc-struct"/>
<keyword type="property" name="The &quot;bandwidth&quot; property" link="gst-plugins-bad-plugins-dvbsrc.html#GstDvbSrc--bandwidth"/>
<keyword type="property" name="The &quot;code-rate-hp&quot; property" link="gst-plugins-bad-plugins-dvbsrc.html#GstDvbSrc--code-rate-hp"/>
@@ -268,20 +270,21 @@
<keyword type="property" name="The &quot;stats-reporting-interval&quot; property" link="gst-plugins-bad-plugins-dvbsrc.html#GstDvbSrc--stats-reporting-interval"/>
<keyword type="property" name="The &quot;timeout&quot; property" link="gst-plugins-bad-plugins-dvbsrc.html#GstDvbSrc--timeout"/>
<keyword type="property" name="The &quot;dvb-buffer-size&quot; property" link="gst-plugins-bad-plugins-dvbsrc.html#GstDvbSrc--dvb-buffer-size"/>
- <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-dvdspu.html#idp6850368"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dvdspu.html#idp6848192"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dvdspu.html#idp5891680"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-dvdspu.html#idp6497824"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dvdspu.html#idp11023664"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dvdspu.html#idp9721712"/>
<keyword type="struct" name="GstDVDSpu" link="gst-plugins-bad-plugins-dvdspu.html#GstDVDSpu-struct"/>
- <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-exclusion.html#idp10990960"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-exclusion.html#idp8269536"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-exclusion.html#idp11396752"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-exclusion.html#idp3313440"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-exclusion.html#idp5480032"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-exclusion.html#idp11186928"/>
<keyword type="struct" name="struct GstExclusion" link="gst-plugins-bad-plugins-exclusion.html#GstExclusion-struct"/>
<keyword type="property" name="The &quot;silent&quot; property" link="gst-plugins-bad-plugins-exclusion.html#GstExclusion--silent"/>
<keyword type="property" name="The &quot;factor&quot; property" link="gst-plugins-bad-plugins-exclusion.html#GstExclusion--factor"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-edgedetect.html#idp11459232"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-edgedetect.html#idp6898368"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-faac.html#idp11452144"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-faac.html#idp11864736"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-edgedetect.html#idp9025376"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-edgedetect.html#idp5379504"/>
+ <keyword type="struct" name="struct GstEglGlesSink" link="gst-plugins-bad-plugins-eglglessink.html#GstEglGlesSink"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-faac.html#idp10536192"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-faac.html#idp11645984"/>
<keyword type="struct" name="struct GstFaac" link="gst-plugins-bad-plugins-faac.html#GstFaac-struct"/>
<keyword type="property" name="The &quot;bitrate&quot; property" link="gst-plugins-bad-plugins-faac.html#GstFaac--bitrate"/>
<keyword type="property" name="The &quot;midside&quot; property" link="gst-plugins-bad-plugins-faac.html#GstFaac--midside"/>
@@ -291,23 +294,23 @@
<keyword type="property" name="The &quot;tns&quot; property" link="gst-plugins-bad-plugins-faac.html#GstFaac--tns"/>
<keyword type="property" name="The &quot;quality&quot; property" link="gst-plugins-bad-plugins-faac.html#GstFaac--quality"/>
<keyword type="property" name="The &quot;rate-control&quot; property" link="gst-plugins-bad-plugins-faac.html#GstFaac--rate-control"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-faad.html#idp6962688"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-faad.html#idp9223968"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-faad.html#idp6434304"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-faad.html#idp5377872"/>
<keyword type="struct" name="GstFaad" link="gst-plugins-bad-plugins-faad.html#GstFaad-struct"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-faceblur.html#idp11381968"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-faceblur.html#idp7852848"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-facedetect.html#idp11222352"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-facedetect.html#idp10267392"/>
- <keyword type="" name="Example pipeline" link="gst-plugins-bad-plugins-festival.html#idp6977680"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-festival.html#idp9449264"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-festival.html#idp11560928"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-faceblur.html#idp11006592"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-faceblur.html#idp6718704"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-facedetect.html#idp11109152"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-facedetect.html#idp6326800"/>
+ <keyword type="" name="Example pipeline" link="gst-plugins-bad-plugins-festival.html#idp7055104"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-festival.html#idp5954592"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-festival.html#idp11151616"/>
<keyword type="struct" name="struct GstFestival" link="gst-plugins-bad-plugins-festival.html#GstFestival-struct"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-fisheye.html#idp9945568"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-fisheye.html#idp10627008"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-fisheye.html#idp5300832"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-fisheye.html#idm37984"/>
<keyword type="struct" name="struct GstFisheye" link="gst-plugins-bad-plugins-fisheye.html#GstFisheye-struct"/>
- <keyword type="" name="Example launch lines" link="gst-plugins-bad-plugins-fpsdisplaysink.html#idp12471232"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-fpsdisplaysink.html#idp12474208"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-fpsdisplaysink.html#idp12481616"/>
+ <keyword type="" name="Example launch lines" link="gst-plugins-bad-plugins-fpsdisplaysink.html#idp11978528"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-fpsdisplaysink.html#idp11981504"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-fpsdisplaysink.html#idp11717552"/>
<keyword type="struct" name="struct GstFPSDisplaySink" link="gst-plugins-bad-plugins-fpsdisplaysink.html#GstFPSDisplaySink-struct"/>
<keyword type="property" name="The &quot;sync&quot; property" link="gst-plugins-bad-plugins-fpsdisplaysink.html#GstFPSDisplaySink--sync"/>
<keyword type="property" name="The &quot;text-overlay&quot; property" link="gst-plugins-bad-plugins-fpsdisplaysink.html#GstFPSDisplaySink--text-overlay"/>
@@ -321,12 +324,12 @@
<keyword type="property" name="The &quot;last-message&quot; property" link="gst-plugins-bad-plugins-fpsdisplaysink.html#GstFPSDisplaySink--last-message"/>
<keyword type="property" name="The &quot;silent&quot; property" link="gst-plugins-bad-plugins-fpsdisplaysink.html#GstFPSDisplaySink--silent"/>
<keyword type="signal" name="The &quot;fps-measurements&quot; signal" link="gst-plugins-bad-plugins-fpsdisplaysink.html#GstFPSDisplaySink-fps-measurements"/>
- <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-gaussianblur.html#idp11938864"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-gaussianblur.html#idp11936528"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-gaussianblur.html#idp8358144"/>
- <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-jpegparse.html#idp7188976"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-jpegparse.html#idp6175104"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-jpegparse.html#idp11952080"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-gaussianblur.html#idp11609712"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-gaussianblur.html#idp11607376"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-gaussianblur.html#idp11168416"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-jpegparse.html#idp12151888"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-jpegparse.html#idp10995520"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-jpegparse.html#idp6253152"/>
<keyword type="struct" name="struct GstJpegParse" link="gst-plugins-bad-plugins-jpegparse.html#GstJpegParse-struct"/>
<keyword type="struct" name="struct GstJpegParseClass" link="gst-plugins-bad-plugins-jpegparse.html#GstJpegParseClass"/>
<keyword type="macro" name="GST_JPEG_PARSE()" link="gst-plugins-bad-plugins-jpegparse.html#GST-JPEG-PARSE:CAPS"/>
@@ -335,36 +338,36 @@
<keyword type="macro" name="GST_IS_JPEG_PARSE_CLASS()" link="gst-plugins-bad-plugins-jpegparse.html#GST-IS-JPEG-PARSE-CLASS:CAPS"/>
<keyword type="macro" name="GST_TYPE_JPEG_PARSE" link="gst-plugins-bad-plugins-jpegparse.html#GST-TYPE-JPEG-PARSE:CAPS"/>
<keyword type="function" name="gst_jpeg_parse_get_type ()" link="gst-plugins-bad-plugins-jpegparse.html#gst-jpeg-parse-get-type"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-kaleidoscope.html#idp11259824"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-kaleidoscope.html#idp12103456"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-kaleidoscope.html#idp6889120"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-kaleidoscope.html#idp11549392"/>
<keyword type="struct" name="struct GstKaleidoscope" link="gst-plugins-bad-plugins-kaleidoscope.html#GstKaleidoscope-struct"/>
<keyword type="property" name="The &quot;angle&quot; property" link="gst-plugins-bad-plugins-kaleidoscope.html#GstKaleidoscope--angle"/>
<keyword type="property" name="The &quot;angle2&quot; property" link="gst-plugins-bad-plugins-kaleidoscope.html#GstKaleidoscope--angle2"/>
<keyword type="property" name="The &quot;sides&quot; property" link="gst-plugins-bad-plugins-kaleidoscope.html#GstKaleidoscope--sides"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-liveadder.html#idp9606896"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-liveadder.html#idp12237904"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-liveadder.html#idp6484256"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-liveadder.html#idp11534320"/>
<keyword type="struct" name="struct GstLiveAdder" link="gst-plugins-bad-plugins-liveadder.html#GstLiveAdder-struct"/>
<keyword type="property" name="The &quot;latency&quot; property" link="gst-plugins-bad-plugins-liveadder.html#GstLiveAdder--latency"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-marble.html#idp7007536"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-marble.html#idp12360224"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-marble.html#idp7476688"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-marble.html#idp12162560"/>
<keyword type="struct" name="struct GstMarble" link="gst-plugins-bad-plugins-marble.html#GstMarble-struct"/>
<keyword type="property" name="The &quot;amount&quot; property" link="gst-plugins-bad-plugins-marble.html#GstMarble--amount"/>
<keyword type="property" name="The &quot;turbulence&quot; property" link="gst-plugins-bad-plugins-marble.html#GstMarble--turbulence"/>
<keyword type="property" name="The &quot;x-scale&quot; property" link="gst-plugins-bad-plugins-marble.html#GstMarble--x-scale"/>
<keyword type="property" name="The &quot;y-scale&quot; property" link="gst-plugins-bad-plugins-marble.html#GstMarble--y-scale"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mimenc.html#idp7739760"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mimenc.html#idp9957840"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mimenc.html#idp8767520"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mimenc.html#idp5687216"/>
<keyword type="struct" name="struct GstMimEnc" link="gst-plugins-bad-plugins-mimenc.html#GstMimEnc-struct"/>
<keyword type="property" name="The &quot;paused-mode&quot; property" link="gst-plugins-bad-plugins-mimenc.html#GstMimEnc--paused-mode"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mimdec.html#idp6388880"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mimdec.html#idp10946384"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mimdec.html#idp11936640"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mimdec.html#idp7828880"/>
<keyword type="struct" name="struct GstMimDec" link="gst-plugins-bad-plugins-mimdec.html#GstMimDec-struct"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mirror.html#idp7850544"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mirror.html#idp7024800"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mirror.html#idp8545584"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mirror.html#idp8496368"/>
<keyword type="struct" name="struct GstMirror" link="gst-plugins-bad-plugins-mirror.html#GstMirror-struct"/>
<keyword type="property" name="The &quot;mode&quot; property" link="gst-plugins-bad-plugins-mirror.html#GstMirror--mode"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-modplug.html#idp12308432"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-modplug.html#idp13019216"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-modplug.html#idp10394880"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-modplug.html#idp12478608"/>
<keyword type="struct" name="GstModPlug" link="gst-plugins-bad-plugins-modplug.html#GstModPlug-struct"/>
<keyword type="property" name="The &quot;megabass&quot; property" link="gst-plugins-bad-plugins-modplug.html#GstModPlug--megabass"/>
<keyword type="property" name="The &quot;megabass-amount&quot; property" link="gst-plugins-bad-plugins-modplug.html#GstModPlug--megabass-amount"/>
@@ -378,8 +381,8 @@
<keyword type="property" name="The &quot;surround&quot; property" link="gst-plugins-bad-plugins-modplug.html#GstModPlug--surround"/>
<keyword type="property" name="The &quot;surround-delay&quot; property" link="gst-plugins-bad-plugins-modplug.html#GstModPlug--surround-delay"/>
<keyword type="property" name="The &quot;surround-depth&quot; property" link="gst-plugins-bad-plugins-modplug.html#GstModPlug--surround-depth"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mpeg2enc.html#idp13782656"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mpeg2enc.html#idp13790064"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mpeg2enc.html#idp13298064"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mpeg2enc.html#idp12672880"/>
<keyword type="struct" name="GstMpeg2enc" link="gst-plugins-bad-plugins-mpeg2enc.html#GstMpeg2enc-struct"/>
<keyword type="property" name="The &quot;altscan-mpeg2&quot; property" link="gst-plugins-bad-plugins-mpeg2enc.html#GstMpeg2enc--altscan-mpeg2"/>
<keyword type="property" name="The &quot;aspect&quot; property" link="gst-plugins-bad-plugins-mpeg2enc.html#GstMpeg2enc--aspect"/>
@@ -415,8 +418,8 @@
<keyword type="property" name="The &quot;sequence-length&quot; property" link="gst-plugins-bad-plugins-mpeg2enc.html#GstMpeg2enc--sequence-length"/>
<keyword type="property" name="The &quot;unit-coeff-elim&quot; property" link="gst-plugins-bad-plugins-mpeg2enc.html#GstMpeg2enc--unit-coeff-elim"/>
<keyword type="property" name="The &quot;vcd-still-size&quot; property" link="gst-plugins-bad-plugins-mpeg2enc.html#GstMpeg2enc--vcd-still-size"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mplex.html#idp6494448"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mplex.html#idp7233392"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mplex.html#idp6574128"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mplex.html#idp3286704"/>
<keyword type="struct" name="GstMplex" link="gst-plugins-bad-plugins-mplex.html#GstMplex-struct"/>
<keyword type="property" name="The &quot;bufsize&quot; property" link="gst-plugins-bad-plugins-mplex.html#GstMplex--bufsize"/>
<keyword type="property" name="The &quot;format&quot; property" link="gst-plugins-bad-plugins-mplex.html#GstMplex--format"/>
@@ -425,9 +428,12 @@
<keyword type="property" name="The &quot;sector-size&quot; property" link="gst-plugins-bad-plugins-mplex.html#GstMplex--sector-size"/>
<keyword type="property" name="The &quot;system-headers&quot; property" link="gst-plugins-bad-plugins-mplex.html#GstMplex--system-headers"/>
<keyword type="property" name="The &quot;vbr&quot; property" link="gst-plugins-bad-plugins-mplex.html#GstMplex--vbr"/>
- <keyword type="" name="Example pipelines" link="gst-plugins-bad-plugins-pcapparse.html#idp12991376"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-pcapparse.html#idp12994208"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-pcapparse.html#idp13001616"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mpg123audiodec.html#idp5431792"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mpg123audiodec.html#idp6793888"/>
+ <keyword type="struct" name="struct GstMpg123AudioDec" link="gst-plugins-bad-plugins-mpg123audiodec.html#GstMpg123AudioDec-struct"/>
+ <keyword type="" name="Example pipelines" link="gst-plugins-bad-plugins-pcapparse.html#idp12954160"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-pcapparse.html#idp12956992"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-pcapparse.html#idp12964400"/>
<keyword type="struct" name="struct GstPcapParse" link="gst-plugins-bad-plugins-pcapparse.html#GstPcapParse-struct"/>
<keyword type="property" name="The &quot;dst-ip&quot; property" link="gst-plugins-bad-plugins-pcapparse.html#GstPcapParse--dst-ip"/>
<keyword type="property" name="The &quot;dst-port&quot; property" link="gst-plugins-bad-plugins-pcapparse.html#GstPcapParse--dst-port"/>
@@ -435,31 +441,31 @@
<keyword type="property" name="The &quot;src-port&quot; property" link="gst-plugins-bad-plugins-pcapparse.html#GstPcapParse--src-port"/>
<keyword type="property" name="The &quot;caps&quot; property" link="gst-plugins-bad-plugins-pcapparse.html#GstPcapParse--caps"/>
<keyword type="property" name="The &quot;ts-offset&quot; property" link="gst-plugins-bad-plugins-pcapparse.html#GstPcapParse--ts-offset"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-pinch.html#idp6992816"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-pinch.html#idp13602240"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-pinch.html#idp9461136"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-pinch.html#idp13070992"/>
<keyword type="struct" name="struct GstPinch" link="gst-plugins-bad-plugins-pinch.html#GstPinch-struct"/>
<keyword type="property" name="The &quot;intensity&quot; property" link="gst-plugins-bad-plugins-pinch.html#GstPinch--intensity"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-pyramidsegment.html#idp12810000"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-pyramidsegment.html#idp10032752"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-pyramidsegment.html#idp12588176"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-pyramidsegment.html#idp10750352"/>
<keyword type="struct" name="struct GstPinch" link="gst-plugins-bad-plugins-pyramidsegment.html#GstPinch-struct"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtmpsink.html#idp7845072"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtmpsink.html#idp10991280"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtmpsink.html#idp10313856"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtmpsink.html#idp12618240"/>
<keyword type="struct" name="struct GstRTMPSink" link="gst-plugins-bad-plugins-rtmpsink.html#GstRTMPSink-struct"/>
<keyword type="property" name="The &quot;location&quot; property" link="gst-plugins-bad-plugins-rtmpsink.html#GstRTMPSink--location"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtmpsrc.html#idp13737776"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtmpsrc.html#idp12933840"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtmpsrc.html#idp12660144"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtmpsrc.html#idp13223792"/>
<keyword type="struct" name="struct GstRTMPSrc" link="gst-plugins-bad-plugins-rtmpsrc.html#GstRTMPSrc-struct"/>
<keyword type="property" name="The &quot;location&quot; property" link="gst-plugins-bad-plugins-rtmpsrc.html#GstRTMPSrc--location"/>
- <keyword type="" name="Example pipelines" link="gst-plugins-bad-plugins-rtpmux.html#idp9672896"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtpmux.html#idp13408192"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtpmux.html#idp13479344"/>
+ <keyword type="" name="Example pipelines" link="gst-plugins-bad-plugins-rtpmux.html#idp13027632"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtpmux.html#idp13200544"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtpmux.html#idp13208000"/>
<keyword type="struct" name="struct GstRTPMux" link="gst-plugins-bad-plugins-rtpmux.html#GstRTPMux-struct"/>
<keyword type="property" name="The &quot;seqnum&quot; property" link="gst-plugins-bad-plugins-rtpmux.html#GstRTPMux--seqnum"/>
<keyword type="property" name="The &quot;seqnum-offset&quot; property" link="gst-plugins-bad-plugins-rtpmux.html#GstRTPMux--seqnum-offset"/>
<keyword type="property" name="The &quot;ssrc&quot; property" link="gst-plugins-bad-plugins-rtpmux.html#GstRTPMux--ssrc"/>
<keyword type="property" name="The &quot;timestamp-offset&quot; property" link="gst-plugins-bad-plugins-rtpmux.html#GstRTPMux--timestamp-offset"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtpdtmfsrc.html#idp16612992"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtpdtmfsrc.html#idp16620448"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtpdtmfsrc.html#idp15967776"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtpdtmfsrc.html#idp15975232"/>
<keyword type="struct" name="struct GstRTPDTMFSrc" link="gst-plugins-bad-plugins-rtpdtmfsrc.html#GstRTPDTMFSrc-struct"/>
<keyword type="property" name="The &quot;clock-rate&quot; property" link="gst-plugins-bad-plugins-rtpdtmfsrc.html#GstRTPDTMFSrc--clock-rate"/>
<keyword type="property" name="The &quot;interval&quot; property" link="gst-plugins-bad-plugins-rtpdtmfsrc.html#GstRTPDTMFSrc--interval"/>
@@ -470,29 +476,29 @@
<keyword type="property" name="The &quot;ssrc&quot; property" link="gst-plugins-bad-plugins-rtpdtmfsrc.html#GstRTPDTMFSrc--ssrc"/>
<keyword type="property" name="The &quot;timestamp&quot; property" link="gst-plugins-bad-plugins-rtpdtmfsrc.html#GstRTPDTMFSrc--timestamp"/>
<keyword type="property" name="The &quot;timestamp-offset&quot; property" link="gst-plugins-bad-plugins-rtpdtmfsrc.html#GstRTPDTMFSrc--timestamp-offset"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtpdtmfmux.html#idp17697280"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtpdtmfmux.html#idp16314192"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtpdtmfmux.html#idp17239280"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtpdtmfmux.html#idp18487696"/>
<keyword type="struct" name="struct GstRTPDTMFMux" link="gst-plugins-bad-plugins-rtpdtmfmux.html#GstRTPDTMFMux-struct"/>
<keyword type="signal" name="The &quot;locking&quot; signal" link="gst-plugins-bad-plugins-rtpdtmfmux.html#GstRTPDTMFMux-locking"/>
<keyword type="signal" name="The &quot;unlocked&quot; signal" link="gst-plugins-bad-plugins-rtpdtmfmux.html#GstRTPDTMFMux-unlocked"/>
- <keyword type="" name="Example pipelines" link="gst-plugins-bad-plugins-rtpmux.html#idp16384384"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtpmux.html#idp18101040"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtpmux.html#idp17243504"/>
+ <keyword type="" name="Example pipelines" link="gst-plugins-bad-plugins-rtpmux.html#idp15425376"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtpmux.html#idp17279632"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtpmux.html#idp18599952"/>
<keyword type="struct" name="struct GstRTPMux" link="gst-plugins-bad-plugins-rtpmux.html#GstRTPMux-struct"/>
<keyword type="property" name="The &quot;seqnum&quot; property" link="gst-plugins-bad-plugins-rtpmux.html#GstRTPMux--seqnum"/>
<keyword type="property" name="The &quot;seqnum-offset&quot; property" link="gst-plugins-bad-plugins-rtpmux.html#GstRTPMux--seqnum-offset"/>
<keyword type="property" name="The &quot;ssrc&quot; property" link="gst-plugins-bad-plugins-rtpmux.html#GstRTPMux--ssrc"/>
<keyword type="property" name="The &quot;timestamp-offset&quot; property" link="gst-plugins-bad-plugins-rtpmux.html#GstRTPMux--timestamp-offset"/>
- <keyword type="" name="Example pipelines" link="gst-plugins-bad-plugins-scaletempo.html#idp14968480"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-scaletempo.html#idp18200048"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-scaletempo.html#idp19138432"/>
+ <keyword type="" name="Example pipelines" link="gst-plugins-bad-plugins-scaletempo.html#idp15122912"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-scaletempo.html#idp17113056"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-scaletempo.html#idp17120464"/>
<keyword type="struct" name="struct GstScaletempo" link="gst-plugins-bad-plugins-scaletempo.html#GstScaletempo-struct"/>
<keyword type="property" name="The &quot;overlap&quot; property" link="gst-plugins-bad-plugins-scaletempo.html#GstScaletempo--overlap"/>
<keyword type="property" name="The &quot;rate&quot; property" link="gst-plugins-bad-plugins-scaletempo.html#GstScaletempo--rate"/>
<keyword type="property" name="The &quot;search&quot; property" link="gst-plugins-bad-plugins-scaletempo.html#GstScaletempo--search"/>
<keyword type="property" name="The &quot;stride&quot; property" link="gst-plugins-bad-plugins-scaletempo.html#GstScaletempo--stride"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-shmsink.html#idp18484064"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-shmsink.html#idp14653616"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-shmsink.html#idp17762016"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-shmsink.html#idp18225808"/>
<keyword type="struct" name="struct GstShmSink" link="gst-plugins-bad-plugins-shmsink.html#GstShmSink-struct"/>
<keyword type="property" name="The &quot;perms&quot; property" link="gst-plugins-bad-plugins-shmsink.html#GstShmSink--perms"/>
<keyword type="property" name="The &quot;shm-size&quot; property" link="gst-plugins-bad-plugins-shmsink.html#GstShmSink--shm-size"/>
@@ -501,68 +507,68 @@
<keyword type="property" name="The &quot;buffer-time&quot; property" link="gst-plugins-bad-plugins-shmsink.html#GstShmSink--buffer-time"/>
<keyword type="signal" name="The &quot;client-connected&quot; signal" link="gst-plugins-bad-plugins-shmsink.html#GstShmSink-client-connected"/>
<keyword type="signal" name="The &quot;client-disconnected&quot; signal" link="gst-plugins-bad-plugins-shmsink.html#GstShmSink-client-disconnected"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-shmsrc.html#idp18810464"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-shmsrc.html#idp14891264"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-shmsrc.html#idp18584864"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-shmsrc.html#idp15764656"/>
<keyword type="struct" name="struct GstShmSrc" link="gst-plugins-bad-plugins-shmsrc.html#GstShmSrc-struct"/>
<keyword type="property" name="The &quot;is-live&quot; property" link="gst-plugins-bad-plugins-shmsrc.html#GstShmSrc--is-live"/>
<keyword type="property" name="The &quot;socket-path&quot; property" link="gst-plugins-bad-plugins-shmsrc.html#GstShmSrc--socket-path"/>
- <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-sdpdemux.html#idp14331600"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-sdpdemux.html#idp14334848"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-sdpdemux.html#idp17318256"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-sdpdemux.html#idp14238944"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-sdpdemux.html#idp14242192"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-sdpdemux.html#idp14249664"/>
<keyword type="struct" name="struct GstSDPDemux" link="gst-plugins-bad-plugins-sdpdemux.html#GstSDPDemux-struct"/>
<keyword type="property" name="The &quot;debug&quot; property" link="gst-plugins-bad-plugins-sdpdemux.html#GstSDPDemux--debug"/>
<keyword type="property" name="The &quot;latency&quot; property" link="gst-plugins-bad-plugins-sdpdemux.html#GstSDPDemux--latency"/>
<keyword type="property" name="The &quot;timeout&quot; property" link="gst-plugins-bad-plugins-sdpdemux.html#GstSDPDemux--timeout"/>
<keyword type="property" name="The &quot;redirect&quot; property" link="gst-plugins-bad-plugins-sdpdemux.html#GstSDPDemux--redirect"/>
- <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-solarize.html#idp15543696"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-solarize.html#idp18113056"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-solarize.html#idp18120464"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-solarize.html#idp15260592"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-solarize.html#idp16156960"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-solarize.html#idp14195904"/>
<keyword type="struct" name="struct GstSolarize" link="gst-plugins-bad-plugins-solarize.html#GstSolarize-struct"/>
<keyword type="property" name="The &quot;silent&quot; property" link="gst-plugins-bad-plugins-solarize.html#GstSolarize--silent"/>
<keyword type="property" name="The &quot;end&quot; property" link="gst-plugins-bad-plugins-solarize.html#GstSolarize--end"/>
<keyword type="property" name="The &quot;start&quot; property" link="gst-plugins-bad-plugins-solarize.html#GstSolarize--start"/>
<keyword type="property" name="The &quot;threshold&quot; property" link="gst-plugins-bad-plugins-solarize.html#GstSolarize--threshold"/>
- <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-spacescope.html#idp16360544"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-spacescope.html#idp16956096"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-spacescope.html#idp16760656"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-spacescope.html#idp14971952"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-spacescope.html#idp16387936"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-spacescope.html#idp18828288"/>
<keyword type="struct" name="struct GstSpaceScope" link="gst-plugins-bad-plugins-spacescope.html#GstSpaceScope-struct"/>
<keyword type="property" name="The &quot;style&quot; property" link="gst-plugins-bad-plugins-spacescope.html#GstSpaceScope--style"/>
- <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-spectrascope.html#idp15115872"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-spectrascope.html#idp14855504"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-spectrascope.html#idp16520896"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-spectrascope.html#idp14481504"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-spectrascope.html#idp18531952"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-spectrascope.html#idp14665792"/>
<keyword type="struct" name="struct GstSpectraScope" link="gst-plugins-bad-plugins-spectrascope.html#GstSpectraScope-struct"/>
- <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-synaescope.html#idp15309472"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-synaescope.html#idp18216848"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-synaescope.html#idp17948704"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-synaescope.html#idp13836752"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-synaescope.html#idp18808256"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-synaescope.html#idp15943312"/>
<keyword type="struct" name="struct GstSynaeScope" link="gst-plugins-bad-plugins-synaescope.html#GstSynaeScope-struct"/>
- <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-speed.html#idp16722208"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-speed.html#idp17126768"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-speed.html#idp15287296"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-speed.html#idp15250384"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-speed.html#idp18464976"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-speed.html#idp14266736"/>
<keyword type="struct" name="struct GstSpeed" link="gst-plugins-bad-plugins-speed.html#GstSpeed-struct"/>
<keyword type="property" name="The &quot;speed&quot; property" link="gst-plugins-bad-plugins-speed.html#GstSpeed--speed"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-sphere.html#idp16535872"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-sphere.html#idp14639632"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-sphere.html#idp16170480"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-sphere.html#idp13810624"/>
<keyword type="struct" name="struct GstSphere" link="gst-plugins-bad-plugins-sphere.html#GstSphere-struct"/>
<keyword type="property" name="The &quot;refraction&quot; property" link="gst-plugins-bad-plugins-sphere.html#GstSphere--refraction"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-square.html#idp18523312"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-square.html#idp19456000"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-square.html#idp17866240"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-square.html#idp19585248"/>
<keyword type="struct" name="struct GstSquare" link="gst-plugins-bad-plugins-square.html#GstSquare-struct"/>
<keyword type="property" name="The &quot;height&quot; property" link="gst-plugins-bad-plugins-square.html#GstSquare--height"/>
<keyword type="property" name="The &quot;width&quot; property" link="gst-plugins-bad-plugins-square.html#GstSquare--width"/>
<keyword type="property" name="The &quot;zoom&quot; property" link="gst-plugins-bad-plugins-square.html#GstSquare--zoom"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-stretch.html#idp15129216"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-stretch.html#idp14564208"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-stretch.html#idp18812224"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-stretch.html#idp17819264"/>
<keyword type="struct" name="struct GstStretch" link="gst-plugins-bad-plugins-stretch.html#GstStretch-struct"/>
<keyword type="property" name="The &quot;intensity&quot; property" link="gst-plugins-bad-plugins-stretch.html#GstStretch--intensity"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-templatematch.html#idp17634112"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-templatematch.html#idp18432016"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-templatematch.html#idp15142416"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-templatematch.html#idp15230384"/>
<keyword type="struct" name="struct GstSynaeScope" link="gst-plugins-bad-plugins-templatematch.html#GstSynaeScope-struct"/>
<keyword type="struct" name="struct GstTemplateMatch" link="gst-plugins-bad-plugins-templatematch.html#GstTemplateMatch"/>
<keyword type="property" name="The &quot;display&quot; property" link="gst-plugins-bad-plugins-templatematch.html#GstTemplateMatch--display"/>
<keyword type="property" name="The &quot;method&quot; property" link="gst-plugins-bad-plugins-templatematch.html#GstTemplateMatch--method"/>
<keyword type="property" name="The &quot;template&quot; property" link="gst-plugins-bad-plugins-templatematch.html#GstTemplateMatch--template"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-opencvtextoverlay.html#idp18451504"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-opencvtextoverlay.html#idp20159808"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-opencvtextoverlay.html#idp15855968"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-opencvtextoverlay.html#idp19195696"/>
<keyword type="struct" name="GstNuvDemux" link="gst-plugins-bad-plugins-opencvtextoverlay.html#GstNuvDemux"/>
<keyword type="struct" name="struct GstOpencvTextOverlay" link="gst-plugins-bad-plugins-opencvtextoverlay.html#GstOpencvTextOverlay"/>
<keyword type="property" name="The &quot;colorB&quot; property" link="gst-plugins-bad-plugins-opencvtextoverlay.html#GstOpencvTextOverlay--colorB"/>
@@ -574,15 +580,15 @@
<keyword type="property" name="The &quot;width&quot; property" link="gst-plugins-bad-plugins-opencvtextoverlay.html#GstOpencvTextOverlay--width"/>
<keyword type="property" name="The &quot;xpos&quot; property" link="gst-plugins-bad-plugins-opencvtextoverlay.html#GstOpencvTextOverlay--xpos"/>
<keyword type="property" name="The &quot;ypos&quot; property" link="gst-plugins-bad-plugins-opencvtextoverlay.html#GstOpencvTextOverlay--ypos"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-tunnel.html#idp16518912"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-tunnel.html#idp18855872"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-tunnel.html#idp16817216"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-tunnel.html#idp13924240"/>
<keyword type="struct" name="struct GstTunnel" link="gst-plugins-bad-plugins-tunnel.html#GstTunnel-struct"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-twirl.html#idp18439824"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-twirl.html#idp19534592"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-twirl.html#idp17989616"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-twirl.html#idp18379216"/>
<keyword type="struct" name="struct GstTwirl" link="gst-plugins-bad-plugins-twirl.html#GstTwirl-struct"/>
<keyword type="property" name="The &quot;angle&quot; property" link="gst-plugins-bad-plugins-twirl.html#GstTwirl--angle"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-videoparse.html#idp20509056"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-videoparse.html#idp20516464"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-videoparse.html#idp20109808"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-videoparse.html#idp20117216"/>
<keyword type="struct" name="struct GstVideoParse" link="gst-plugins-bad-plugins-videoparse.html#GstVideoParse-struct"/>
<keyword type="property" name="The &quot;alpha-mask&quot; property" link="gst-plugins-bad-plugins-videoparse.html#GstVideoParse--alpha-mask"/>
<keyword type="property" name="The &quot;blue-mask&quot; property" link="gst-plugins-bad-plugins-videoparse.html#GstVideoParse--blue-mask"/>
@@ -598,26 +604,26 @@
<keyword type="property" name="The &quot;width&quot; property" link="gst-plugins-bad-plugins-videoparse.html#GstVideoParse--width"/>
<keyword type="property" name="The &quot;interlaced&quot; property" link="gst-plugins-bad-plugins-videoparse.html#GstVideoParse--interlaced"/>
<keyword type="property" name="The &quot;top-field-first&quot; property" link="gst-plugins-bad-plugins-videoparse.html#GstVideoParse--top-field-first"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-waterripple.html#idp17183056"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-waterripple.html#idp20193648"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-waterripple.html#idp17955840"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-waterripple.html#idp19807152"/>
<keyword type="struct" name="struct GstWaterRipple" link="gst-plugins-bad-plugins-waterripple.html#GstWaterRipple-struct"/>
<keyword type="property" name="The &quot;amplitude&quot; property" link="gst-plugins-bad-plugins-waterripple.html#GstWaterRipple--amplitude"/>
<keyword type="property" name="The &quot;phase&quot; property" link="gst-plugins-bad-plugins-waterripple.html#GstWaterRipple--phase"/>
<keyword type="property" name="The &quot;wavelength&quot; property" link="gst-plugins-bad-plugins-waterripple.html#GstWaterRipple--wavelength"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-zbar.html#idp15865936"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-zbar.html#idp19253920"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-zbar.html#idp18209328"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-zbar.html#idp19816688"/>
<keyword type="struct" name="struct GstZBar" link="gst-plugins-bad-plugins-zbar.html#GstZBar-struct"/>
<keyword type="property" name="The &quot;message&quot; property" link="gst-plugins-bad-plugins-zbar.html#GstZBar--message"/>
<keyword type="property" name="The &quot;cache&quot; property" link="gst-plugins-bad-plugins-zbar.html#GstZBar--cache"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-voaacenc.html#idp17691104"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-voaacenc.html#idp20219376"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-voaacenc.html#idp16983632"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-voaacenc.html#idp20224992"/>
<keyword type="struct" name="struct GstVoAacEnc" link="gst-plugins-bad-plugins-voaacenc.html#GstVoAacEnc-struct"/>
<keyword type="property" name="The &quot;bitrate&quot; property" link="gst-plugins-bad-plugins-voaacenc.html#GstVoAacEnc--bitrate"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-voamrwbenc.html#idp15808240"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-voamrwbenc.html#idp16859936"/>
- <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-wavescope.html#idp16080544"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-wavescope.html#idp17420672"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-wavescope.html#idp19747824"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-voamrwbenc.html#idp19108592"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-voamrwbenc.html#idp17748704"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-wavescope.html#idp18974176"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-wavescope.html#idp18693616"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-wavescope.html#idp20330848"/>
<keyword type="struct" name="struct GstWaveScope" link="gst-plugins-bad-plugins-wavescope.html#GstWaveScope-struct"/>
<keyword type="property" name="The &quot;style&quot; property" link="gst-plugins-bad-plugins-wavescope.html#GstWaveScope--style"/>
<keyword type="struct" name="GstPhotography" link="GstPhotography.html#GstPhotography-struct"/>
diff --git a/docs/plugins/html/index.html b/docs/plugins/html/index.html
index 6abf740a..78331c1c 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.0.1)
+ for GStreamer Bad Plugins 1.0 (1.0.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>
@@ -107,6 +107,9 @@
<span class="refentrytitle"><a href="gst-plugins-bad-plugins-edgedetect.html">edgedetect</a></span><span class="refpurpose"> — Performs canny edge detection on videos and images.</span>
</dt>
<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-eglglessink.html">eglglessink</a></span><span class="refpurpose"></span>
+</dt>
+<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-plugins-faac.html">faac</a></span><span class="refpurpose"> — Free MPEG-2/4 AAC encoder</span>
</dt>
<dt>
@@ -161,6 +164,9 @@
<span class="refentrytitle"><a href="gst-plugins-bad-plugins-mplex.html">mplex</a></span><span class="refpurpose"> — High-quality MPEG/DVD/SVCD/VCD video/audio multiplexer</span>
</dt>
<dt>
+<span class="refentrytitle"><a href="gst-plugins-bad-plugins-mpg123audiodec.html">mpg123audiodec</a></span><span class="refpurpose"> — Decodes mp3 streams using the mpg123 library</span>
+</dt>
+<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-plugins-pcapparse.html">pcapparse</a></span><span class="refpurpose"> — Parses a raw pcap stream</span>
</dt>
<dt>
diff --git a/docs/plugins/html/index.sgml b/docs/plugins/html/index.sgml
index 1e9d8f9a..aec89474 100644
--- a/docs/plugins/html/index.sgml
+++ b/docs/plugins/html/index.sgml
@@ -287,6 +287,11 @@
<ANCHOR id="gst-plugins-bad-plugins-edgedetect.synopsis" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-edgedetect.html#gst-plugins-bad-plugins-edgedetect.synopsis">
<ANCHOR id="gst-plugins-bad-plugins-edgedetect.description" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-edgedetect.html#gst-plugins-bad-plugins-edgedetect.description">
<ANCHOR id="gst-plugins-bad-plugins-edgedetect.details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-edgedetect.html#gst-plugins-bad-plugins-edgedetect.details">
+<ANCHOR id="gst-plugins-bad-plugins-eglglessink" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-eglglessink.html">
+<ANCHOR id="gst-plugins-bad-plugins-eglglessink.synopsis" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-eglglessink.html#gst-plugins-bad-plugins-eglglessink.synopsis">
+<ANCHOR id="gst-plugins-bad-plugins-eglglessink.description" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-eglglessink.html#gst-plugins-bad-plugins-eglglessink.description">
+<ANCHOR id="gst-plugins-bad-plugins-eglglessink.details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-eglglessink.html#gst-plugins-bad-plugins-eglglessink.details">
+<ANCHOR id="GstEglGlesSink" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-eglglessink.html#GstEglGlesSink">
<ANCHOR id="gst-plugins-bad-plugins-faac" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-faac.html">
<ANCHOR id="gst-plugins-bad-plugins-faac.synopsis" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-faac.html#gst-plugins-bad-plugins-faac.synopsis">
<ANCHOR id="GstFaac" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-faac.html#GstFaac">
@@ -520,6 +525,13 @@
<ANCHOR id="GstMplex--sector-size" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mplex.html#GstMplex--sector-size">
<ANCHOR id="GstMplex--system-headers" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mplex.html#GstMplex--system-headers">
<ANCHOR id="GstMplex--vbr" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mplex.html#GstMplex--vbr">
+<ANCHOR id="gst-plugins-bad-plugins-mpg123audiodec" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mpg123audiodec.html">
+<ANCHOR id="gst-plugins-bad-plugins-mpg123audiodec.synopsis" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mpg123audiodec.html#gst-plugins-bad-plugins-mpg123audiodec.synopsis">
+<ANCHOR id="GstMpg123AudioDec" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mpg123audiodec.html#GstMpg123AudioDec">
+<ANCHOR id="gst-plugins-bad-plugins-mpg123audiodec.object-hierarchy" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mpg123audiodec.html#gst-plugins-bad-plugins-mpg123audiodec.object-hierarchy">
+<ANCHOR id="gst-plugins-bad-plugins-mpg123audiodec.description" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mpg123audiodec.html#gst-plugins-bad-plugins-mpg123audiodec.description">
+<ANCHOR id="gst-plugins-bad-plugins-mpg123audiodec.details" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mpg123audiodec.html#gst-plugins-bad-plugins-mpg123audiodec.details">
+<ANCHOR id="GstMpg123AudioDec-struct" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-mpg123audiodec.html#GstMpg123AudioDec-struct">
<ANCHOR id="gst-plugins-bad-plugins-pcapparse" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-pcapparse.html">
<ANCHOR id="gst-plugins-bad-plugins-pcapparse.synopsis" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-pcapparse.html#gst-plugins-bad-plugins-pcapparse.synopsis">
<ANCHOR id="GstPcapParse" href="gst-plugins-bad-plugins-1.0/gst-plugins-bad-plugins-pcapparse.html#GstPcapParse">
diff --git a/docs/plugins/inspect/plugin-adpcmdec.xml b/docs/plugins/inspect/plugin-adpcmdec.xml
index dd86415f..ad4fc8df 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.0.1</version>
+ <version>1.0.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 95a61d2a..6513c2e2 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.0.1</version>
+ <version>1.0.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 22516a1f..cc50e654 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.0.1</version>
+ <version>1.0.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 e17eddd3..583e9a2f 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.0.1</version>
+ <version>1.0.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 2bd96052..8095cb41 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.0.1</version>
+ <version>1.0.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 12f9d047..d897313a 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.0.1</version>
+ <version>1.0.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 c7861c65..429ca45c 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.0.1</version>
+ <version>1.0.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 89332c6e..b3e8c208 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.0.1</version>
+ <version>1.0.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 c73ce6e5..a21462f0 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.0.1</version>
+ <version>1.0.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-celt.xml b/docs/plugins/inspect/plugin-celt.xml
index 0d341f7f..ed5ff1fb 100644
--- a/docs/plugins/inspect/plugin-celt.xml
+++ b/docs/plugins/inspect/plugin-celt.xml
@@ -3,7 +3,7 @@
<description>CELT plugin library</description>
<filename>../../ext/celt/.libs/libgstcelt.so</filename>
<basename>libgstcelt.so</basename>
- <version>1.0.1</version>
+ <version>1.0.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 ce299027..c73b62f8 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.0.1</version>
+ <version>1.0.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 667f5ab4..61610afa 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.0.1</version>
+ <version>1.0.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 62690a11..1f3efc47 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.0.1</version>
+ <version>1.0.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-dataurisrc.xml b/docs/plugins/inspect/plugin-dataurisrc.xml
index 53215ac3..7695fe6c 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.0.1</version>
+ <version>1.0.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 abcca3c0..5056bb85 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.0.1</version>
+ <version>1.0.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-dtmf.xml b/docs/plugins/inspect/plugin-dtmf.xml
index dfe2fffa..b41450a6 100644
--- a/docs/plugins/inspect/plugin-dtmf.xml
+++ b/docs/plugins/inspect/plugin-dtmf.xml
@@ -3,7 +3,7 @@
<description>DTMF plugins</description>
<filename>../../gst/dtmf/.libs/libgstdtmf.so</filename>
<basename>libgstdtmf.so</basename>
- <version>1.0.1</version>
+ <version>1.0.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 c07ad072..18d895dd 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.0.1</version>
+ <version>1.0.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 bfb50f4f..e6b617bf 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.0.1</version>
+ <version>1.0.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 f1ffcc6e..b2d9477b 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.0.1</version>
+ <version>1.0.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 6707b4db..2326d21f 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.0.1</version>
+ <version>1.0.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 ea3ae9ea..5beadf90 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.0.1</version>
+ <version>1.0.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 793a7b85..8001fbc7 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.0.1</version>
+ <version>1.0.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-festival.xml b/docs/plugins/inspect/plugin-festival.xml
index 9065c9bb..e351be5a 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.0.1</version>
+ <version>1.0.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
new file mode 100644
index 00000000..3b018c5a
--- /dev/null
+++ b/docs/plugins/inspect/plugin-fieldanalysis.xml
@@ -0,0 +1,34 @@
+<plugin>
+ <name>fieldanalysis</name>
+ <description>Video field analysis</description>
+ <filename>../../gst/fieldanalysis/.libs/libgstfieldanalysis.so</filename>
+ <basename>libgstfieldanalysis.so</basename>
+ <version>1.0.2</version>
+ <license>LGPL</license>
+ <source>gst-plugins-bad</source>
+ <package>GStreamer</package>
+ <origin>http://gstreamer.net/</origin>
+ <elements>
+ <element>
+ <name>fieldanalysis</name>
+ <longname>Video field analysis</longname>
+ <class>Filter/Analysis/Video</class>
+ <description>Analyse fields from video frames to identify if they are progressive/telecined/interlaced</description>
+ <author>Robert Swain &lt;robert.swain@collabora.co.uk&gt;</author>
+ <pads>
+ <caps>
+ <name>sink</name>
+ <direction>sink</direction>
+ <presence>always</presence>
+ <details>video/x-raw, format=(string){ YUY2, UYVY, I420, YV12 }, 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){ YUY2, UYVY, I420, YV12 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ </caps>
+ </pads>
+ </element>
+ </elements>
+</plugin> \ No newline at end of file
diff --git a/docs/plugins/inspect/plugin-flite.xml b/docs/plugins/inspect/plugin-flite.xml
index 7c59e298..ffd84163 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.0.1</version>
+ <version>1.0.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 18a6ac5f..ca1bd971 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>../../gst/hls/.libs/libgstfragmented.so</filename>
<basename>libgstfragmented.so</basename>
- <version>1.0.1</version>
+ <version>1.0.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins</package>
diff --git a/docs/plugins/inspect/plugin-frei0r.xml b/docs/plugins/inspect/plugin-frei0r.xml
index 5256f9c3..df7fdf44 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.0.1</version>
+ <version>1.0.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 33ad8561..b7f36c8d 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.0.1</version>
+ <version>1.0.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 e37b7171..a1d70b64 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.0.1</version>
+ <version>1.0.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 5ff61d80..ca99e350 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.0.1</version>
+ <version>1.0.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 886905cf..63fb9fbb 100644
--- a/docs/plugins/inspect/plugin-gmedec.xml
+++ b/docs/plugins/inspect/plugin-gmedec.xml
@@ -3,7 +3,7 @@
<description>GME Audio Decoder</description>
<filename>../../ext/gme/.libs/libgstgme.so</filename>
<basename>libgstgme.so</basename>
- <version>1.0.1</version>
+ <version>1.0.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-gsm.xml b/docs/plugins/inspect/plugin-gsm.xml
index b7481696..dde70020 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.0.1</version>
+ <version>1.0.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 0924e3a7..8ec1162b 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.0.1</version>
+ <version>1.0.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 2621e86d..94af3a2b 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.0.1</version>
+ <version>1.0.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 9635aa5a..a69b2254 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.0.1</version>
+ <version>1.0.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 3007d091..a2da25c9 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.0.1</version>
+ <version>1.0.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 d15d3a39..9193934d 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.0.1</version>
+ <version>1.0.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 a1bf1e16..98e3905d 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.0.1</version>
+ <version>1.0.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 2bf78f04..6a4de529 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.0.1</version>
+ <version>1.0.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 104d8099..26ee667d 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.0.1</version>
+ <version>1.0.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 9241516b..c2637237 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.0.1</version>
+ <version>1.0.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 00f83a06..3d89389a 100644
--- a/docs/plugins/inspect/plugin-mpeg2enc.xml
+++ b/docs/plugins/inspect/plugin-mpeg2enc.xml
@@ -3,7 +3,7 @@
<description>High-quality MPEG-1/2 video encoder</description>
<filename>../../ext/mpeg2enc/.libs/libgstmpeg2enc.so</filename>
<basename>libgstmpeg2enc.so</basename>
- <version>1.0.1</version>
+ <version>1.0.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-mpegpsdemux.xml b/docs/plugins/inspect/plugin-mpegpsdemux.xml
index a3614ed4..00ae8493 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.0.1</version>
+ <version>1.0.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-mpegtsdemux.xml b/docs/plugins/inspect/plugin-mpegtsdemux.xml
index e8662fea..95038341 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.0.1</version>
+ <version>1.0.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-mpegtsmux.xml b/docs/plugins/inspect/plugin-mpegtsmux.xml
index e33d9942..ebd6eac3 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.0.1</version>
+ <version>1.0.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 65fab60f..c24ca719 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.0.1</version>
+ <version>1.0.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 d14eb1f2..4a6122b6 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.0.1</version>
+ <version>1.0.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-opencv.xml b/docs/plugins/inspect/plugin-opencv.xml
index 353954e4..fe4198a0 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.0.1</version>
+ <version>1.0.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-pcapparse.xml b/docs/plugins/inspect/plugin-pcapparse.xml
index b51b4fcd..87c676ee 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.0.1</version>
+ <version>1.0.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 35588951..2116c959 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.0.1</version>
+ <version>1.0.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 b9ffabe9..9edca2bc 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.0.1</version>
+ <version>1.0.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 f4c835fc..f21e32e1 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.0.1</version>
+ <version>1.0.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 b0a6f84f..389d9083 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.0.1</version>
+ <version>1.0.2</version>
<license>GPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer</package>
diff --git a/docs/plugins/inspect/plugin-rtmp.xml b/docs/plugins/inspect/plugin-rtmp.xml
index fee206c0..d1572cda 100644
--- a/docs/plugins/inspect/plugin-rtmp.xml
+++ b/docs/plugins/inspect/plugin-rtmp.xml
@@ -3,7 +3,7 @@
<description>RTMP source and sink</description>
<filename>../../ext/rtmp/.libs/libgstrtmp.so</filename>
<basename>libgstrtmp.so</basename>
- <version>1.0.1</version>
+ <version>1.0.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-rtpmux.xml b/docs/plugins/inspect/plugin-rtpmux.xml
index 85e7623b..6aa5b599 100644
--- a/docs/plugins/inspect/plugin-rtpmux.xml
+++ b/docs/plugins/inspect/plugin-rtpmux.xml
@@ -3,7 +3,7 @@
<description>RTP Muxer plugins</description>
<filename>../../gst/rtpmux/.libs/libgstrtpmux.so</filename>
<basename>libgstrtpmux.so</basename>
- <version>1.0.1</version>
+ <version>1.0.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-rtpvp8.xml b/docs/plugins/inspect/plugin-rtpvp8.xml
index ce8960aa..529a6e82 100644
--- a/docs/plugins/inspect/plugin-rtpvp8.xml
+++ b/docs/plugins/inspect/plugin-rtpvp8.xml
@@ -3,7 +3,7 @@
<description>rtpvp8</description>
<filename>../../gst/rtpvp8/.libs/libgstrtpvp8.so</filename>
<basename>libgstrtpvp8.so</basename>
- <version>1.0.1</version>
+ <version>1.0.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-scaletempo.xml b/docs/plugins/inspect/plugin-scaletempo.xml
index 77a9fd1d..237697ca 100644
--- a/docs/plugins/inspect/plugin-scaletempo.xml
+++ b/docs/plugins/inspect/plugin-scaletempo.xml
@@ -3,7 +3,7 @@
<description>Scale audio tempo in sync with playback rate</description>
<filename>../../gst/scaletempo/.libs/libgstscaletempoplugin.so</filename>
<basename>libgstscaletempoplugin.so</basename>
- <version>1.0.1</version>
+ <version>1.0.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer</package>
diff --git a/docs/plugins/inspect/plugin-schro.xml b/docs/plugins/inspect/plugin-schro.xml
index 62ffaad8..670152f5 100644
--- a/docs/plugins/inspect/plugin-schro.xml
+++ b/docs/plugins/inspect/plugin-schro.xml
@@ -3,7 +3,7 @@
<description>Schroedinger plugin</description>
<filename>../../ext/schroedinger/.libs/libgstschro.so</filename>
<basename>libgstschro.so</basename>
- <version>1.0.1</version>
+ <version>1.0.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-sdp.xml b/docs/plugins/inspect/plugin-sdp.xml
index e8cd1aa2..964c5333 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.0.1</version>
+ <version>1.0.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 f5dd8737..f4745665 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.0.1</version>
+ <version>1.0.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 7d9184d6..24957fba 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.0.1</version>
+ <version>1.0.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 2b82bf3b..03415b41 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.0.1</version>
+ <version>1.0.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-soundtouch.xml b/docs/plugins/inspect/plugin-soundtouch.xml
index e3884318..b1cd34df 100644
--- a/docs/plugins/inspect/plugin-soundtouch.xml
+++ b/docs/plugins/inspect/plugin-soundtouch.xml
@@ -3,7 +3,7 @@
<description>Audio Pitch Controller &amp; BPM Detection</description>
<filename>../../ext/soundtouch/.libs/libgstsoundtouch.so</filename>
<basename>libgstsoundtouch.so</basename>
- <version>1.0.1</version>
+ <version>1.0.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-spandsp.xml b/docs/plugins/inspect/plugin-spandsp.xml
index a8118683..b101e173 100644
--- a/docs/plugins/inspect/plugin-spandsp.xml
+++ b/docs/plugins/inspect/plugin-spandsp.xml
@@ -3,7 +3,7 @@
<description>libspandsp plugin</description>
<filename>../../ext/spandsp/.libs/libgstspandsp.so</filename>
<basename>libgstspandsp.so</basename>
- <version>1.0.1</version>
+ <version>1.0.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-speed.xml b/docs/plugins/inspect/plugin-speed.xml
index f6fcbb54..d4275456 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.0.1</version>
+ <version>1.0.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
new file mode 100644
index 00000000..2e46ece5
--- /dev/null
+++ b/docs/plugins/inspect/plugin-subenc.xml
@@ -0,0 +1,55 @@
+<plugin>
+ <name>subenc</name>
+ <description>subtitle encoders</description>
+ <filename>../../gst/subenc/.libs/libgstsubenc.so</filename>
+ <basename>libgstsubenc.so</basename>
+ <version>1.0.2</version>
+ <license>LGPL</license>
+ <source>gst-plugins-bad</source>
+ <package>GStreamer Bad Plug-ins source release</package>
+ <origin>Unknown package origin</origin>
+ <elements>
+ <element>
+ <name>srtenc</name>
+ <longname>Srt encoder</longname>
+ <class>Codec/Encoder/Subtitle</class>
+ <description>Srt subtitle encoder</description>
+ <author>Thijs Vermeir &lt;thijsvermeir@gmail.com&gt;</author>
+ <pads>
+ <caps>
+ <name>sink</name>
+ <direction>sink</direction>
+ <presence>always</presence>
+ <details>text/x-raw, format=(string){ pango-markup, utf8 }</details>
+ </caps>
+ <caps>
+ <name>src</name>
+ <direction>source</direction>
+ <presence>always</presence>
+ <details>application/x-subtitle</details>
+ </caps>
+ </pads>
+ </element>
+ <element>
+ <name>webvttenc</name>
+ <longname>WebVTT encoder</longname>
+ <class>Codec/Encoder/Subtitle</class>
+ <description>WebVTT subtitle encoder</description>
+ <author>David Schleef &lt;ds@schleef.org&gt;</author>
+ <pads>
+ <caps>
+ <name>sink</name>
+ <direction>sink</direction>
+ <presence>always</presence>
+ <details>text/x-raw, format=(string){ pango-markup, utf8 }</details>
+ </caps>
+ <caps>
+ <name>src</name>
+ <direction>source</direction>
+ <presence>always</presence>
+ <details>text/vtt</details>
+ </caps>
+ </pads>
+ </element>
+ </elements>
+</plugin> \ No newline at end of file
diff --git a/docs/plugins/inspect/plugin-videoparsersbad.xml b/docs/plugins/inspect/plugin-videoparsersbad.xml
index 4d8f515a..58b7dff0 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.0.1</version>
+ <version>1.0.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 35f41964..4a05e23a 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.0.1</version>
+ <version>1.0.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 12e5ebd6..4f816615 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.0.1</version>
+ <version>1.0.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 85670ed2..a9dd4487 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.0.1</version>
+ <version>1.0.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-y4mdec.xml b/docs/plugins/inspect/plugin-y4mdec.xml
index 1fb877f8..57b519a8 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.0.1</version>
+ <version>1.0.2</version>
<license>LGPL</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 67f096fb..9ab7ad72 100644
--- a/docs/plugins/inspect/plugin-zbar.xml
+++ b/docs/plugins/inspect/plugin-zbar.xml
@@ -3,7 +3,7 @@
<description>zbar barcode scanner</description>
<filename>../../ext/zbar/.libs/libgstzbar.so</filename>
<basename>libgstzbar.so</basename>
- <version>1.0.1</version>
+ <version>1.0.2</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/ext/Makefile.am b/ext/Makefile.am
index 74b7b0ec..68c347ec 100644
--- a/ext/Makefile.am
+++ b/ext/Makefile.am
@@ -88,6 +88,12 @@ else
DTS_DIR=
endif
+if USE_EGLGLES
+EGLGLES_DIR=eglgles
+else
+EGLGLES_DIR=
+endif
+
if USE_RESINDVD
RESINDVD_DIR = resindvd
else
@@ -379,6 +385,7 @@ SUBDIRS=\
$(WAYLAND_DIR) \
$(DTS_DIR) \
$(RESINDVD_DIR) \
+ $(EGLGLES_DIR) \
$(FAAC_DIR) \
$(FAAD_DIR) \
$(FLITE_DIR) \
@@ -446,6 +453,7 @@ DIST_SUBDIRS = \
libmms \
lv2 \
dts \
+ eglgles \
modplug \
mimic \
mpeg2enc \
diff --git a/ext/Makefile.in b/ext/Makefile.in
index e8904dee..ca93e0f9 100644
--- a/ext/Makefile.in
+++ b/ext/Makefile.in
@@ -228,6 +228,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -620,6 +622,8 @@ AUDIOFILE_DIR =
@USE_WAYLAND_TRUE@WAYLAND_DIR = wayland
@USE_DTS_FALSE@DTS_DIR =
@USE_DTS_TRUE@DTS_DIR = dts
+@USE_EGLGLES_FALSE@EGLGLES_DIR =
+@USE_EGLGLES_TRUE@EGLGLES_DIR = eglgles
@USE_RESINDVD_FALSE@RESINDVD_DIR =
@USE_RESINDVD_TRUE@RESINDVD_DIR = resindvd
@USE_FAAC_FALSE@FAAC_DIR =
@@ -740,6 +744,7 @@ SUBDIRS = \
$(WAYLAND_DIR) \
$(DTS_DIR) \
$(RESINDVD_DIR) \
+ $(EGLGLES_DIR) \
$(FAAC_DIR) \
$(FAAD_DIR) \
$(FLITE_DIR) \
@@ -807,6 +812,7 @@ DIST_SUBDIRS = \
libmms \
lv2 \
dts \
+ eglgles \
modplug \
mimic \
mpeg2enc \
diff --git a/ext/apexsink/Makefile.in b/ext/apexsink/Makefile.in
index 41487072..a3742f84 100644
--- a/ext/apexsink/Makefile.in
+++ b/ext/apexsink/Makefile.in
@@ -253,6 +253,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/apexsink/gstapexsink.c b/ext/apexsink/gstapexsink.c
index 25dfb08b..fe3b9929 100644
--- a/ext/apexsink/gstapexsink.c
+++ b/ext/apexsink/gstapexsink.c
@@ -261,7 +261,7 @@ gst_apexsink_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"Apple AirPort Express Audio Sink", "Sink/Audio/Wireless",
"Output stream to an AirPort Express",
"Jérémie Bernard [GRemi] <gremimail@gmail.com>");
@@ -305,7 +305,7 @@ gst_apexsink_class_init (GstApExSinkClass * klass)
g_param_spec_uint ("port", "Port", "AirPort Express target port", 0,
32000, DEFAULT_APEX_PORT,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- /* we need to expose the volume as a double for playbin2. Internally we keep
+ /* we need to expose the volume as a double for playbin. Internally we keep
* it as an int between 0 and 100, where 75 corresponds to 1.0.
* FIXME we should store the volume as a double. */
g_object_class_install_property ((GObjectClass *) klass, APEX_PROP_VOLUME,
diff --git a/ext/assrender/Makefile.in b/ext/assrender/Makefile.in
index 98e53d39..ac618f58 100644
--- a/ext/assrender/Makefile.in
+++ b/ext/assrender/Makefile.in
@@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/assrender/gstassrender.c b/ext/assrender/gstassrender.c
index 9da97822..233733b0 100644
--- a/ext/assrender/gstassrender.c
+++ b/ext/assrender/gstassrender.c
@@ -155,7 +155,7 @@ gst_ass_render_class_init (GstAssRenderClass * klass)
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&text_sink_factory));
- gst_element_class_set_metadata (gstelement_class, "ASS/SSA Render",
+ gst_element_class_set_static_metadata (gstelement_class, "ASS/SSA Render",
"Mixer/Video/Overlay/Subtitle",
"Renders ASS/SSA subtitles with libass",
"Benjamin Schmitz <vortex@wolpzone.de>, "
diff --git a/ext/bz2/Makefile.in b/ext/bz2/Makefile.in
index 5a3eb74c..456618c8 100644
--- a/ext/bz2/Makefile.in
+++ b/ext/bz2/Makefile.in
@@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/bz2/gstbz2dec.c b/ext/bz2/gstbz2dec.c
index 513832e7..0cd9fa70 100644
--- a/ext/bz2/gstbz2dec.c
+++ b/ext/bz2/gstbz2dec.c
@@ -300,7 +300,7 @@ gst_bz2dec_class_init (GstBz2decClass * klass)
gst_static_pad_template_get (&sink_template));
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&src_template));
- gst_element_class_set_metadata (gstelement_class, "BZ2 decoder",
+ gst_element_class_set_static_metadata (gstelement_class, "BZ2 decoder",
"Codec/Decoder", "Decodes compressed streams",
"Lutz Mueller <lutz@users.sourceforge.net>");
diff --git a/ext/bz2/gstbz2enc.c b/ext/bz2/gstbz2enc.c
index 16132069..4be2d4b2 100644
--- a/ext/bz2/gstbz2enc.c
+++ b/ext/bz2/gstbz2enc.c
@@ -324,7 +324,7 @@ gst_bz2enc_class_init (GstBz2encClass * klass)
gst_static_pad_template_get (&sink_template));
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&src_template));
- gst_element_class_set_metadata (gstelement_class, "BZ2 encoder",
+ gst_element_class_set_static_metadata (gstelement_class, "BZ2 encoder",
"Codec/Encoder", "Compresses streams",
"Lutz Mueller <lutz@users.sourceforge.net>");
diff --git a/ext/cdaudio/Makefile.in b/ext/cdaudio/Makefile.in
index 50c49c1b..8fde7175 100644
--- a/ext/cdaudio/Makefile.in
+++ b/ext/cdaudio/Makefile.in
@@ -246,6 +246,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/cdaudio/gstcdaudio.c b/ext/cdaudio/gstcdaudio.c
index ffd81c23..ff37407a 100644
--- a/ext/cdaudio/gstcdaudio.c
+++ b/ext/cdaudio/gstcdaudio.c
@@ -135,7 +135,7 @@ gst_cdaudio_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_set_metadata (element_class, "CD player",
+ gst_element_class_set_static_metadata (element_class, "CD player",
"Generic/Bin",
"Play CD audio through the CD Drive", "Wim Taymans <wim@fluendo.com>");
diff --git a/ext/celt/Makefile.in b/ext/celt/Makefile.in
index 30c8312a..0841ca34 100644
--- a/ext/celt/Makefile.in
+++ b/ext/celt/Makefile.in
@@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/celt/gstceltdec.c b/ext/celt/gstceltdec.c
index 14f9d0d4..26e7000c 100644
--- a/ext/celt/gstceltdec.c
+++ b/ext/celt/gstceltdec.c
@@ -97,7 +97,7 @@ gst_celt_dec_class_init (GstCeltDecClass * klass)
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&celt_dec_sink_factory));
- gst_element_class_set_metadata (gstelement_class, "Celt audio decoder",
+ gst_element_class_set_static_metadata (gstelement_class, "Celt audio decoder",
"Codec/Decoder/Audio",
"decode celt streams to audio",
"Sebastian Dröge <sebastian.droege@collabora.co.uk>");
diff --git a/ext/celt/gstceltenc.c b/ext/celt/gstceltenc.c
index a4dd1ea5..57633fb7 100644
--- a/ext/celt/gstceltenc.c
+++ b/ext/celt/gstceltenc.c
@@ -189,7 +189,7 @@ gst_celt_enc_class_init (GstCeltEncClass * klass)
gst_static_pad_template_get (&src_factory));
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&sink_factory));
- gst_element_class_set_metadata (gstelement_class, "Celt audio encoder",
+ gst_element_class_set_static_metadata (gstelement_class, "Celt audio encoder",
"Codec/Encoder/Audio",
"Encodes audio in Celt format",
"Sebastian Dröge <sebastian.droege@collabora.co.uk>");
diff --git a/ext/chromaprint/Makefile.in b/ext/chromaprint/Makefile.in
index bf9b47d5..6e0a0b23 100644
--- a/ext/chromaprint/Makefile.in
+++ b/ext/chromaprint/Makefile.in
@@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/chromaprint/gstchromaprint.c b/ext/chromaprint/gstchromaprint.c
index ad9d1fdf..379383d1 100644
--- a/ext/chromaprint/gstchromaprint.c
+++ b/ext/chromaprint/gstchromaprint.c
@@ -106,7 +106,7 @@ gst_chromaprint_class_init (GstChromaprintClass * klass)
GST_DEBUG_FUNCPTR (gst_chromaprint_sink_event);
gstbasetrans_class->passthrough_on_same_caps = TRUE;
- gst_element_class_set_metadata (GST_ELEMENT_CLASS (klass),
+ gst_element_class_set_static_metadata (GST_ELEMENT_CLASS (klass),
"Chromaprint fingerprinting element",
"Filter/Analyzer/Audio",
"Find an audio fingerprint using the Chromaprint library",
diff --git a/ext/cog/Makefile.in b/ext/cog/Makefile.in
index 60191374..ea437ee5 100644
--- a/ext/cog/Makefile.in
+++ b/ext/cog/Makefile.in
@@ -292,6 +292,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/cog/gstcogdownsample.c b/ext/cog/gstcogdownsample.c
index fab62143..7d1a9101 100644
--- a/ext/cog/gstcogdownsample.c
+++ b/ext/cog/gstcogdownsample.c
@@ -137,7 +137,7 @@ gst_cogdownsample_base_init (gpointer g_class)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_cogdownsample_sink_template));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"Scale down video by factor of 2", "Filter/Effect/Video",
"Scales down video by a factor of 2", "David Schleef <ds@schleef.org>");
}
diff --git a/ext/cog/gstcogmse.c b/ext/cog/gstcogmse.c
index 08908dc4..52c361e5 100644
--- a/ext/cog/gstcogmse.c
+++ b/ext/cog/gstcogmse.c
@@ -143,7 +143,7 @@ gst_mse_base_init (gpointer klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_framestore_sink_test_template));
- gst_element_class_set_metadata (element_class, "Calculate MSE",
+ gst_element_class_set_static_metadata (element_class, "Calculate MSE",
"Filter/Effect",
"Calculates mean squared error between two video streams",
"David Schleef <ds@schleef.org>");
diff --git a/ext/cog/gstcogscale.c b/ext/cog/gstcogscale.c
index 87352670..e2844e64 100644
--- a/ext/cog/gstcogscale.c
+++ b/ext/cog/gstcogscale.c
@@ -203,7 +203,7 @@ gst_cog_scale_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_set_metadata (element_class, "Video scaler",
+ gst_element_class_set_static_metadata (element_class, "Video scaler",
"Filter/Effect/Video",
"Resizes video", "Wim Taymans <wim.taymans@chello.be>");
diff --git a/ext/curl/Makefile.in b/ext/curl/Makefile.in
index bafcdd3e..fdc6c3a9 100644
--- a/ext/curl/Makefile.in
+++ b/ext/curl/Makefile.in
@@ -257,6 +257,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/curl/gstcurlbasesink.c b/ext/curl/gstcurlbasesink.c
index ebbbb99a..3573041a 100644
--- a/ext/curl/gstcurlbasesink.c
+++ b/ext/curl/gstcurlbasesink.c
@@ -158,7 +158,7 @@ gst_curl_base_sink_class_init (GstCurlBaseSinkClass * klass)
"curl base sink element");
GST_DEBUG_OBJECT (klass, "class_init");
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"Curl base sink",
"Sink/Network",
"Upload data over the network to a server using libcurl",
diff --git a/ext/curl/gstcurlfilesink.c b/ext/curl/gstcurlfilesink.c
index c8b7e2b5..823e863d 100644
--- a/ext/curl/gstcurlfilesink.c
+++ b/ext/curl/gstcurlfilesink.c
@@ -107,7 +107,7 @@ gst_curl_file_sink_class_init (GstCurlFileSinkClass * klass)
"curl file sink element");
GST_DEBUG_OBJECT (klass, "class_init");
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"Curl file sink",
"Sink/Network",
"Upload data over FILE protocol using libcurl",
diff --git a/ext/curl/gstcurlftpsink.c b/ext/curl/gstcurlftpsink.c
index 58a057ff..4fcf4647 100644
--- a/ext/curl/gstcurlftpsink.c
+++ b/ext/curl/gstcurlftpsink.c
@@ -108,7 +108,7 @@ gst_curl_ftp_sink_class_init (GstCurlFtpSinkClass * klass)
"curl ftp sink element");
GST_DEBUG_OBJECT (klass, "class_init");
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"Curl ftp sink",
"Sink/Network",
"Upload data over FTP protocol using libcurl",
diff --git a/ext/curl/gstcurlhttpsink.c b/ext/curl/gstcurlhttpsink.c
index da35a101..3976fb86 100644
--- a/ext/curl/gstcurlhttpsink.c
+++ b/ext/curl/gstcurlhttpsink.c
@@ -126,7 +126,7 @@ gst_curl_http_sink_class_init (GstCurlHttpSinkClass * klass)
"curl http sink element");
GST_DEBUG_OBJECT (klass, "class_init");
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"Curl http sink",
"Sink/Network",
"Upload data over HTTP/HTTPS protocol using libcurl",
diff --git a/ext/curl/gstcurlsmtpsink.c b/ext/curl/gstcurlsmtpsink.c
index 4948ddbb..6575bcdc 100644
--- a/ext/curl/gstcurlsmtpsink.c
+++ b/ext/curl/gstcurlsmtpsink.c
@@ -229,7 +229,7 @@ gst_curl_smtp_sink_class_init (GstCurlSmtpSinkClass * klass)
"curl smtp sink element");
GST_DEBUG_OBJECT (klass, "class_init");
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"Curl smtp sink",
"Sink/Network",
"Upload data over SMTP protocol using libcurl",
@@ -580,6 +580,12 @@ generate_encoded_word (gchar * str)
return encoded_word;
}
+/* Setup header fields (From:/To:/Date: etc) and message body for the e-mail.
+ * This data is supposed to be sent to libcurl just before any media data.
+ * This function is called once for each e-mail:
+ * 1. we are about the send the first attachment
+ * 2. we have sent all the attachments and continue sending new ones within
+ * a new e-mail (transfer options have been reset). */
static gboolean
gst_curl_smtp_sink_set_transfer_options_unlocked (GstCurlBaseSink * bcsink)
{
diff --git a/ext/curl/gstcurltlssink.c b/ext/curl/gstcurltlssink.c
index d96c33e1..f18ead94 100644
--- a/ext/curl/gstcurltlssink.c
+++ b/ext/curl/gstcurltlssink.c
@@ -98,7 +98,7 @@ gst_curl_tls_sink_class_init (GstCurlTlsSinkClass * klass)
"curl tls sink element");
GST_DEBUG_OBJECT (klass, "class_init");
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"Curl tls sink",
"Sink/Network",
"Upload data over TLS protocol using libcurl",
diff --git a/ext/dc1394/Makefile.in b/ext/dc1394/Makefile.in
index 8b5db533..5975b1a5 100644
--- a/ext/dc1394/Makefile.in
+++ b/ext/dc1394/Makefile.in
@@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/dc1394/gstdc1394.c b/ext/dc1394/gstdc1394.c
index 299b52ac..241828cc 100644
--- a/ext/dc1394/gstdc1394.c
+++ b/ext/dc1394/gstdc1394.c
@@ -105,8 +105,8 @@ gst_dc1394_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_set_metadata (element_class, "1394 IIDC Video Source",
- "Source/Video",
+ gst_element_class_set_static_metadata (element_class,
+ "1394 IIDC Video Source", "Source/Video",
"libdc1394 based source, supports 1394 IIDC cameras",
"Antoine Tremblay <hexa00@gmail.com>");
diff --git a/ext/dirac/Makefile.in b/ext/dirac/Makefile.in
index 9a6eefda..69746b22 100644
--- a/ext/dirac/Makefile.in
+++ b/ext/dirac/Makefile.in
@@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/dirac/gstdiracenc.cc b/ext/dirac/gstdiracenc.cc
index 647b5c13..7c48a8ad 100644
--- a/ext/dirac/gstdiracenc.cc
+++ b/ext/dirac/gstdiracenc.cc
@@ -205,7 +205,7 @@ gst_dirac_enc_base_init (gpointer g_class)
gst_element_class_add_static_pad_template (element_class,
&gst_dirac_enc_sink_template);
- gst_element_class_set_metadata (element_class, "Dirac Encoder",
+ gst_element_class_set_static_metadata (element_class, "Dirac Encoder",
"Codec/Encoder/Video",
"Encode raw YUV video into Dirac stream",
"David Schleef <ds@schleef.org>");
diff --git a/ext/directfb/Makefile.in b/ext/directfb/Makefile.in
index 4f59eb65..ce3e2d36 100644
--- a/ext/directfb/Makefile.in
+++ b/ext/directfb/Makefile.in
@@ -260,6 +260,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/directfb/dfbvideosink.c b/ext/directfb/dfbvideosink.c
index be64cfdd..9dbc7a26 100644
--- a/ext/directfb/dfbvideosink.c
+++ b/ext/directfb/dfbvideosink.c
@@ -2262,7 +2262,7 @@ gst_dfbvideosink_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_set_metadata (element_class, "DirectFB video sink",
+ gst_element_class_set_static_metadata (element_class, "DirectFB video sink",
"Sink/Video",
"A DirectFB based videosink", "Julien Moutte <julien@moutte.net>");
diff --git a/ext/dts/Makefile.in b/ext/dts/Makefile.in
index 8f5b217e..f8d31be7 100644
--- a/ext/dts/Makefile.in
+++ b/ext/dts/Makefile.in
@@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/dts/gstdtsdec.c b/ext/dts/gstdtsdec.c
index 999758ef..2f9e5c36 100644
--- a/ext/dts/gstdtsdec.c
+++ b/ext/dts/gstdtsdec.c
@@ -160,7 +160,7 @@ gst_dtsdec_class_init (GstDtsDecClass * klass)
gst_static_pad_template_get (&sink_factory));
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&src_factory));
- gst_element_class_set_metadata (gstelement_class, "DTS audio decoder",
+ gst_element_class_set_static_metadata (gstelement_class, "DTS audio decoder",
"Codec/Decoder/Audio",
"Decodes DTS audio streams",
"Jan Schmidt <thaytan@noraisin.net>, "
@@ -665,10 +665,11 @@ gst_dtsdec_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
gint offset, len;
GstBuffer *subbuf;
- size = gst_buffer_extract (buf, 0, data, 2);
+ size = gst_buffer_get_size (buf);
if (size < 2)
goto not_enough_data;
+ gst_buffer_extract (buf, 0, data, 2);
first_access = (data[0] << 8) | data[1];
/* Skip the first_access header */
diff --git a/ext/eglgles/Makefile.am b/ext/eglgles/Makefile.am
new file mode 100644
index 00000000..2573247a
--- /dev/null
+++ b/ext/eglgles/Makefile.am
@@ -0,0 +1,19 @@
+plugin_LTLIBRARIES = libgsteglglessink.la
+
+libgsteglglessink_la_SOURCES = gsteglglessink.c video_platform_wrapper.c
+
+libgsteglglessink_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) \
+ $(GST_BASE_CFLAGS) \
+ $(GST_CFLAGS) \
+ $(EGLGLES_CFLAGS) \
+ $(X11_CFLAGS)
+
+libgsteglglessink_la_LIBADD = $(GST_LIBS) $(GST_BASE_LIBS) \
+ $(GST_PLUGINS_BASE_LIBS) $(EGLGLES_LIBS) $(X11_LIBS) \
+ -lgstvideo-$(GST_MAJORMINOR) \
+ -lgstinterfaces-$(GST_MAJORMINOR)
+
+libgsteglglessink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgsteglglessink_la_LIBTOOLFLAGS = --tag=disable-static
+
+noinst_HEADERS = gsteglglessink.h video_platform_wrapper.h
diff --git a/ext/eglgles/Makefile.in b/ext/eglgles/Makefile.in
new file mode 100644
index 00000000..cf4626fe
--- /dev/null
+++ b/ext/eglgles/Makefile.in
@@ -0,0 +1,960 @@
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = ext/eglgles
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in TODO
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+ $(top_srcdir)/common/m4/as-auto-alt.m4 \
+ $(top_srcdir)/common/m4/as-compiler-flag.m4 \
+ $(top_srcdir)/common/m4/as-libtool.m4 \
+ $(top_srcdir)/common/m4/as-python.m4 \
+ $(top_srcdir)/common/m4/as-scrub-include.m4 \
+ $(top_srcdir)/common/m4/as-version.m4 \
+ $(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/gst-arch.m4 \
+ $(top_srcdir)/common/m4/gst-args.m4 \
+ $(top_srcdir)/common/m4/gst-check.m4 \
+ $(top_srcdir)/common/m4/gst-default.m4 \
+ $(top_srcdir)/common/m4/gst-dowhile.m4 \
+ $(top_srcdir)/common/m4/gst-error.m4 \
+ $(top_srcdir)/common/m4/gst-feature.m4 \
+ $(top_srcdir)/common/m4/gst-gettext.m4 \
+ $(top_srcdir)/common/m4/gst-glib2.m4 \
+ $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+ $(top_srcdir)/common/m4/gst-platform.m4 \
+ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+ $(top_srcdir)/common/m4/gst-plugindir.m4 \
+ $(top_srcdir)/common/m4/gst-x11.m4 \
+ $(top_srcdir)/common/m4/gst.m4 \
+ $(top_srcdir)/common/m4/gtk-doc.m4 \
+ $(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(plugindir)"
+LTLIBRARIES = $(plugin_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgsteglglessink_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+am_libgsteglglessink_la_OBJECTS = \
+ libgsteglglessink_la-gsteglglessink.lo \
+ libgsteglglessink_la-video_platform_wrapper.lo
+libgsteglglessink_la_OBJECTS = $(am_libgsteglglessink_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+libgsteglglessink_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(libgsteglglessink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(libgsteglglessink_la_CFLAGS) $(CFLAGS) \
+ $(libgsteglglessink_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+SOURCES = $(libgsteglglessink_la_SOURCES)
+DIST_SOURCES = $(libgsteglglessink_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ACMENC_CFLAGS = @ACMENC_CFLAGS@
+ACMMP3DEC_CFLAGS = @ACMMP3DEC_CFLAGS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APEXSINK_CFLAGS = @APEXSINK_CFLAGS@
+APEXSINK_LIBS = @APEXSINK_LIBS@
+AR = @AR@
+AS = @AS@
+ASSRENDER_CFLAGS = @ASSRENDER_CFLAGS@
+ASSRENDER_LIBS = @ASSRENDER_LIBS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BZ2_LIBS = @BZ2_LIBS@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDAUDIO_CFLAGS = @CDAUDIO_CFLAGS@
+CDAUDIO_LIBS = @CDAUDIO_LIBS@
+CELT_0_11_CFLAGS = @CELT_0_11_CFLAGS@
+CELT_0_11_LIBS = @CELT_0_11_LIBS@
+CELT_0_7_CFLAGS = @CELT_0_7_CFLAGS@
+CELT_0_7_LIBS = @CELT_0_7_LIBS@
+CELT_0_8_CFLAGS = @CELT_0_8_CFLAGS@
+CELT_0_8_LIBS = @CELT_0_8_LIBS@
+CELT_CFLAGS = @CELT_CFLAGS@
+CELT_LIBS = @CELT_LIBS@
+CFLAGS = @CFLAGS@
+CHROMAPRINT_CFLAGS = @CHROMAPRINT_CFLAGS@
+CHROMAPRINT_LIBS = @CHROMAPRINT_LIBS@
+COG_CFLAGS = @COG_CFLAGS@
+COG_LIBS = @COG_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CURL_CFLAGS = @CURL_CFLAGS@
+CURL_LIBS = @CURL_LIBS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DCCP_LIBS = @DCCP_LIBS@
+DECKLINK_CXXFLAGS = @DECKLINK_CXXFLAGS@
+DECKLINK_LIBS = @DECKLINK_LIBS@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DIRAC_CFLAGS = @DIRAC_CFLAGS@
+DIRAC_LIBS = @DIRAC_LIBS@
+DIRECT3D9_LIBS = @DIRECT3D9_LIBS@
+DIRECT3D_LIBS = @DIRECT3D_LIBS@
+DIRECTDRAW_LIBS = @DIRECTDRAW_LIBS@
+DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@
+DIRECTFB_LIBS = @DIRECTFB_LIBS@
+DIRECTSHOW_LIBS = @DIRECTSHOW_LIBS@
+DIRECTSOUND_LIBS = @DIRECTSOUND_LIBS@
+DIRECTX_CFLAGS = @DIRECTX_CFLAGS@
+DIRECTX_LDFLAGS = @DIRECTX_LDFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DTS_LIBS = @DTS_LIBS@
+DUMPBIN = @DUMPBIN@
+DVDNAV_CFLAGS = @DVDNAV_CFLAGS@
+DVDNAV_LIBS = @DVDNAV_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+ERROR_OBJCFLAGS = @ERROR_OBJCFLAGS@
+EXEEXT = @EXEEXT@
+EXIF_CFLAGS = @EXIF_CFLAGS@
+EXIF_LIBS = @EXIF_LIBS@
+FAAC_LIBS = @FAAC_LIBS@
+FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
+FAAD_LIBS = @FAAD_LIBS@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FLITE_CFLAGS = @FLITE_CFLAGS@
+FLITE_LIBS = @FLITE_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GME_LIBS = @GME_LIBS@
+GMODULE_EXPORT_CFLAGS = @GMODULE_EXPORT_CFLAGS@
+GMODULE_EXPORT_LIBS = @GMODULE_EXPORT_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GMYTH_CFLAGS = @GMYTH_CFLAGS@
+GMYTH_LIBS = @GMYTH_LIBS@
+GREP = @GREP@
+GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
+GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
+GSETTINGS_LIBS = @GSETTINGS_LIBS@
+GSM_LIBS = @GSM_LIBS@
+GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
+GSTPB_PREFIX = @GSTPB_PREFIX@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_API_VERSION = @GST_API_VERSION@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_OBJCFLAGS = @GST_OBJCFLAGS@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
+GST_PLUGINS_BAD_CXXFLAGS = @GST_PLUGINS_BAD_CXXFLAGS@
+GST_PLUGINS_BAD_OBJCFLAGS = @GST_PLUGINS_BAD_OBJCFLAGS@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
+GST_PLUGINS_BASE_LIBS = @GST_PLUGINS_BASE_LIBS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_FFMPEG_CFLAGS = @GST_PLUGINS_FFMPEG_CFLAGS@
+GST_PLUGINS_FFMPEG_DIR = @GST_PLUGINS_FFMPEG_DIR@
+GST_PLUGINS_FFMPEG_LIBS = @GST_PLUGINS_FFMPEG_LIBS@
+GST_PLUGINS_GOOD_CFLAGS = @GST_PLUGINS_GOOD_CFLAGS@
+GST_PLUGINS_GOOD_DIR = @GST_PLUGINS_GOOD_DIR@
+GST_PLUGINS_GOOD_LIBS = @GST_PLUGINS_GOOD_LIBS@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGINS_UGLY_CFLAGS = @GST_PLUGINS_UGLY_CFLAGS@
+GST_PLUGINS_UGLY_DIR = @GST_PLUGINS_UGLY_DIR@
+GST_PLUGINS_UGLY_LIBS = @GST_PLUGINS_UGLY_LIBS@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
+GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+G_UDEV_CFLAGS = @G_UDEV_CFLAGS@
+G_UDEV_LIBS = @G_UDEV_LIBS@
+HAVE_BZ2 = @HAVE_BZ2@
+HAVE_CXX = @HAVE_CXX@
+HAVE_DIRECT3D = @HAVE_DIRECT3D@
+HAVE_DIRECT3D9 = @HAVE_DIRECT3D9@
+HAVE_DIRECTDRAW = @HAVE_DIRECTDRAW@
+HAVE_DIRECTSHOW = @HAVE_DIRECTSHOW@
+HAVE_DIRECTSOUND = @HAVE_DIRECTSOUND@
+HAVE_DTS = @HAVE_DTS@
+HAVE_FAAC = @HAVE_FAAC@
+HAVE_FAAD = @HAVE_FAAD@
+HAVE_FLITE = @HAVE_FLITE@
+HAVE_GSM = @HAVE_GSM@
+HAVE_JASPER = @HAVE_JASPER@
+HAVE_NAS = @HAVE_NAS@
+HAVE_WILDMIDI = @HAVE_WILDMIDI@
+HAVE_X = @HAVE_X@
+HAVE_X11 = @HAVE_X11@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+JASPER_LIBS = @JASPER_LIBS@
+KATE_CFLAGS = @KATE_CFLAGS@
+KATE_LIBS = @KATE_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBDC1394_CFLAGS = @LIBDC1394_CFLAGS@
+LIBDC1394_LIBS = @LIBDC1394_LIBS@
+LIBDIR = @LIBDIR@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBMMS_CFLAGS = @LIBMMS_CFLAGS@
+LIBMMS_LIBS = @LIBMMS_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBUDEV_CFLAGS = @LIBUDEV_CFLAGS@
+LIBUDEV_LIBS = @LIBUDEV_LIBS@
+LIBUSB_CFLAGS = @LIBUSB_CFLAGS@
+LIBUSB_LIBS = @LIBUSB_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LRDF_CFLAGS = @LRDF_CFLAGS@
+LRDF_LIBS = @LRDF_LIBS@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MIMIC_CFLAGS = @MIMIC_CFLAGS@
+MIMIC_LIBS = @MIMIC_LIBS@
+MJPEG_CFLAGS = @MJPEG_CFLAGS@
+MJPEG_LIBS = @MJPEG_LIBS@
+MKDIR_P = @MKDIR_P@
+MODPLUG_CFLAGS = @MODPLUG_CFLAGS@
+MODPLUG_LIBS = @MODPLUG_LIBS@
+MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
+MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
+MPG123_CFLAGS = @MPG123_CFLAGS@
+MPG123_LIBS = @MPG123_LIBS@
+MPLEX_CFLAGS = @MPLEX_CFLAGS@
+MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
+MPLEX_LIBS = @MPLEX_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+MUSEPACK_LIBS = @MUSEPACK_LIBS@
+MUSICBRAINZ_CFLAGS = @MUSICBRAINZ_CFLAGS@
+MUSICBRAINZ_LIBS = @MUSICBRAINZ_LIBS@
+NAS_CFLAGS = @NAS_CFLAGS@
+NAS_LIBS = @NAS_LIBS@
+NEON_CFLAGS = @NEON_CFLAGS@
+NEON_LIBS = @NEON_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJC = @OBJC@
+OBJCDEPMODE = @OBJCDEPMODE@
+OBJCFLAGS = @OBJCFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OFA_CFLAGS = @OFA_CFLAGS@
+OFA_LIBS = @OFA_LIBS@
+OPENAL_CFLAGS = @OPENAL_CFLAGS@
+OPENAL_LIBS = @OPENAL_LIBS@
+OPENCV_CFLAGS = @OPENCV_CFLAGS@
+OPENCV_LIBS = @OPENCV_LIBS@
+OPENCV_PREFIX = @OPENCV_PREFIX@
+OPUS_CFLAGS = @OPUS_CFLAGS@
+OPUS_LIBS = @OPUS_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PVR_CFLAGS = @PVR_CFLAGS@
+PVR_LIBS = @PVR_LIBS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+RSVG_2_35_0_CFLAGS = @RSVG_2_35_0_CFLAGS@
+RSVG_2_35_0_LIBS = @RSVG_2_35_0_LIBS@
+RSVG_CFLAGS = @RSVG_CFLAGS@
+RSVG_LIBS = @RSVG_LIBS@
+RTMP_CFLAGS = @RTMP_CFLAGS@
+RTMP_LIBS = @RTMP_LIBS@
+SCHRO_CFLAGS = @SCHRO_CFLAGS@
+SCHRO_LIBS = @SCHRO_LIBS@
+SDL_CFLAGS = @SDL_CFLAGS@
+SDL_CONFIG = @SDL_CONFIG@
+SDL_LIBS = @SDL_LIBS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLV2_CFLAGS = @SLV2_CFLAGS@
+SLV2_LIBS = @SLV2_LIBS@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+SNDIO_LIBS = @SNDIO_LIBS@
+SOUNDTOUCH_CFLAGS = @SOUNDTOUCH_CFLAGS@
+SOUNDTOUCH_LIBS = @SOUNDTOUCH_LIBS@
+SPANDSP_CFLAGS = @SPANDSP_CFLAGS@
+SPANDSP_LIBS = @SPANDSP_LIBS@
+SPC_LIBS = @SPC_LIBS@
+STRIP = @STRIP@
+SWFDEC_CFLAGS = @SWFDEC_CFLAGS@
+SWFDEC_LIBS = @SWFDEC_LIBS@
+TELETEXTDEC_CFLAGS = @TELETEXTDEC_CFLAGS@
+TELETEXTDEC_LIBS = @TELETEXTDEC_LIBS@
+TIGER_CFLAGS = @TIGER_CFLAGS@
+TIGER_LIBS = @TIGER_LIBS@
+TIMIDITY_CFLAGS = @TIMIDITY_CFLAGS@
+TIMIDITY_LIBS = @TIMIDITY_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VDPAU_CFLAGS = @VDPAU_CFLAGS@
+VDPAU_LIBS = @VDPAU_LIBS@
+VERSION = @VERSION@
+VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
+VOAACENC_LIBS = @VOAACENC_LIBS@
+VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
+VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
+WAYLAND_CFLAGS = @WAYLAND_CFLAGS@
+WAYLAND_LIBS = @WAYLAND_LIBS@
+WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
+WILDMIDI_LIBS = @WILDMIDI_LIBS@
+WINSOCK2_LIBS = @WINSOCK2_LIBS@
+X11_CFLAGS = @X11_CFLAGS@
+X11_LIBS = @X11_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XVID_LIBS = @XVID_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZBAR_CFLAGS = @ZBAR_CFLAGS@
+ZBAR_LIBS = @ZBAR_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_OBJC = @ac_ct_OBJC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+gsettingsschemadir = @gsettingsschemadir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+plugin_LTLIBRARIES = libgsteglglessink.la
+libgsteglglessink_la_SOURCES = gsteglglessink.c video_platform_wrapper.c
+libgsteglglessink_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) \
+ $(GST_BASE_CFLAGS) \
+ $(GST_CFLAGS) \
+ $(EGLGLES_CFLAGS) \
+ $(X11_CFLAGS)
+
+libgsteglglessink_la_LIBADD = $(GST_LIBS) $(GST_BASE_LIBS) \
+ $(GST_PLUGINS_BASE_LIBS) $(EGLGLES_LIBS) $(X11_LIBS) \
+ -lgstvideo-$(GST_MAJORMINOR) \
+ -lgstinterfaces-$(GST_MAJORMINOR)
+
+libgsteglglessink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgsteglglessink_la_LIBTOOLFLAGS = --tag=disable-static
+noinst_HEADERS = gsteglglessink.h video_platform_wrapper.h
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ext/eglgles/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu ext/eglgles/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ @list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+ list2=; for p in $$list; do \
+ if test -f $$p; then \
+ list2="$$list2 $$p"; \
+ else :; fi; \
+ done; \
+ test -z "$$list2" || { \
+ echo " $(MKDIR_P) '$(DESTDIR)$(plugindir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(plugindir)" || exit 1; \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \
+ }
+
+uninstall-pluginLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \
+ done
+
+clean-pluginLTLIBRARIES:
+ -test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES)
+ @list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libgsteglglessink.la: $(libgsteglglessink_la_OBJECTS) $(libgsteglglessink_la_DEPENDENCIES) $(EXTRA_libgsteglglessink_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libgsteglglessink_la_LINK) -rpath $(plugindir) $(libgsteglglessink_la_OBJECTS) $(libgsteglglessink_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsteglglessink_la-gsteglglessink.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsteglglessink_la-video_platform_wrapper.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+libgsteglglessink_la-gsteglglessink.lo: gsteglglessink.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteglglessink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteglglessink_la_CFLAGS) $(CFLAGS) -MT libgsteglglessink_la-gsteglglessink.lo -MD -MP -MF $(DEPDIR)/libgsteglglessink_la-gsteglglessink.Tpo -c -o libgsteglglessink_la-gsteglglessink.lo `test -f 'gsteglglessink.c' || echo '$(srcdir)/'`gsteglglessink.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgsteglglessink_la-gsteglglessink.Tpo $(DEPDIR)/libgsteglglessink_la-gsteglglessink.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gsteglglessink.c' object='libgsteglglessink_la-gsteglglessink.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 $(libgsteglglessink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteglglessink_la_CFLAGS) $(CFLAGS) -c -o libgsteglglessink_la-gsteglglessink.lo `test -f 'gsteglglessink.c' || echo '$(srcdir)/'`gsteglglessink.c
+
+libgsteglglessink_la-video_platform_wrapper.lo: video_platform_wrapper.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgsteglglessink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteglglessink_la_CFLAGS) $(CFLAGS) -MT libgsteglglessink_la-video_platform_wrapper.lo -MD -MP -MF $(DEPDIR)/libgsteglglessink_la-video_platform_wrapper.Tpo -c -o libgsteglglessink_la-video_platform_wrapper.lo `test -f 'video_platform_wrapper.c' || echo '$(srcdir)/'`video_platform_wrapper.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgsteglglessink_la-video_platform_wrapper.Tpo $(DEPDIR)/libgsteglglessink_la-video_platform_wrapper.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='video_platform_wrapper.c' object='libgsteglglessink_la-video_platform_wrapper.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 $(libgsteglglessink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsteglglessink_la_CFLAGS) $(CFLAGS) -c -o libgsteglglessink_la-video_platform_wrapper.lo `test -f 'video_platform_wrapper.c' || echo '$(srcdir)/'`video_platform_wrapper.c
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+ for dir in "$(DESTDIR)$(plugindir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pluginLTLIBRARIES
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pluginLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-pluginLTLIBRARIES ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-pluginLTLIBRARIES \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am uninstall-pluginLTLIBRARIES
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/ext/eglgles/TODO b/ext/eglgles/TODO
new file mode 100644
index 00000000..4c194733
--- /dev/null
+++ b/ext/eglgles/TODO
@@ -0,0 +1,11 @@
+- Correctly handle upstream surface region size changes. Test and debug
+ set_render_rect
+- Make sure we are considering DAR on all scaling/rendering cases
+- Test and debug caps renegotiation
+- Drop android specifics like the default window h/w
+- Move EGL/GLES context to it's own struct. Proly move GLSL stuff to it's
+ own header too
+- Optimize shading routines if possible.
+- Either finish implementing or drop fast rendering path logic
+- Implement buffer pool
+- Finish code documentation
diff --git a/ext/eglgles/gsteglglessink.c b/ext/eglgles/gsteglglessink.c
new file mode 100644
index 00000000..aa87d738
--- /dev/null
+++ b/ext/eglgles/gsteglglessink.c
@@ -0,0 +1,2418 @@
+/*
+ * GStreamer EGL/GLES Sink
+ * Copyright (C) 2012 Collabora Ltd.
+ * @author: Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+ * @author: Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Alternatively, the contents of this file may be used under the
+ * GNU Lesser General Public License Version 2.1 (the "LGPL"), in
+ * which case the following provisions apply instead of the ones
+ * mentioned above:
+ *
+ * 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.
+ */
+
+/**
+ * SECTION:element-eglglessink
+ *
+ * EglGlesSink renders video frames on a EGL surface it sets up
+ * from a window it either creates (on X11) or gets a handle to
+ * through it's xOverlay interface. All the display/surface logic
+ * in this sink uses EGL to interact with the native window system.
+ * The rendering logic, in turn, uses OpenGL ES v2.
+ *
+ * This sink has been tested to work on X11/Mesa and on Android
+ * (From Gingerbread on to Jelly Bean) and while it's currently
+ * using an slow copy-over rendering path it has proven to be fast
+ * enough on the devices we have tried it on.
+ *
+ * <refsect2>
+ * <title>Supported EGL/OpenGL ES versions</title>
+ * <para>
+ * This Sink uses EGLv1 and GLESv2
+ * </para>
+ * </refsect2>
+ *
+ * <refsect2>
+ * <title>Example launch line</title>
+ * |[
+ * gst-launch -v -m videotestsrc ! eglglessink
+ * ]|
+ * </refsect2>
+ *
+ * <refsect2>
+ * <title>Example launch line with internal window creation disabled</title>
+ * <para>
+ * By setting the can_create_window property to FALSE you can force the
+ * sink to wait for a window handle through it's xOverlay interface even
+ * if internal window creation is supported by the platform. Window creation
+ * is only supported in X11 right now but it should be trivial to add support
+ * for different platforms.
+ * </para>
+ * |[
+ * gst-launch -v -m videotestsrc ! eglglessink can_create_window=FALSE
+ * ]|
+ * </refsect2>
+ *
+ * <refsect2>
+ * <title>Scaling</title>
+ * <para>
+ * The sink will try it's best to consider the incoming frame's and display's
+ * pixel aspect ratio and fill the corresponding surface without altering the
+ * decoded frame's geometry when scaling. You can disable this logic by setting
+ * the force_aspect_ratio property to FALSE, in which case the sink will just
+ * fill the entire surface it has access to regardles of the PAR/DAR relationship.
+ * </para>
+ * <para>
+ * Querying the display aspect ratio is only supported with EGL versions >= 1.2.
+ * The sink will just assume the DAR to be 1/1 if it can't get access to this
+ * information.
+ * </para>
+ * <para>
+ * Here is an example launch line with the PAR/DAR aware scaling disabled:
+ * </para>
+ * |[
+ * gst-launch -v -m videotestsrc ! eglglessink force_aspect_ratio=FALSE
+ * ]|
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <string.h>
+#include <gst/gst.h>
+#include <gst/video/video.h>
+#include <gst/video/gstvideosink.h>
+#include <gst/interfaces/xoverlay.h>
+
+#include <EGL/egl.h>
+#include <EGL/eglext.h>
+#include <GLES2/gl2.h>
+#include <GLES2/gl2ext.h>
+
+#include "video_platform_wrapper.h"
+
+#include "gsteglglessink.h"
+
+/* Some EGL implementations are reporting wrong
+ * values for the display's EGL_PIXEL_ASPECT_RATIO.
+ * They are required by the khronos specs to report
+ * this value as w/h * EGL_DISPLAY_SCALING (Which is
+ * a constant with value 10000) but at least the
+ * Galaxy SIII (Android) is reporting just 1 when
+ * w = h. We use these two to bound returned values to
+ * sanity.
+ */
+#define EGL_SANE_DAR_MIN ((EGL_DISPLAY_SCALING)/10)
+#define EGL_SANE_DAR_MAX ((EGL_DISPLAY_SCALING)*10)
+
+GST_DEBUG_CATEGORY_STATIC (gst_eglglessink_debug);
+#define GST_CAT_DEFAULT gst_eglglessink_debug
+
+/* GLESv2 GLSL Shaders
+ *
+ * OpenGL ES Standard does not mandate YUV support. This is
+ * why most of these shaders deal with Packed/Planar YUV->RGB
+ * conversion.
+ */
+
+/* *INDENT-OFF* */
+/* Direct vertex copy */
+static const char *vert_COPY_prog = {
+ "attribute vec3 position;"
+ "attribute vec2 texpos;"
+ "varying vec2 opos;"
+ "void main(void)"
+ "{"
+ " opos = texpos;"
+ " gl_Position = vec4(position, 1.0);"
+ "}"
+};
+
+static const char *vert_COPY_prog_no_tex = {
+ "attribute vec3 position;"
+ "void main(void)"
+ "{"
+ " gl_Position = vec4(position, 1.0);"
+ "}"
+};
+
+/* Paint all black */
+static const char *frag_BLACK_prog = {
+ "precision mediump float;"
+ "void main(void)"
+ "{"
+ " gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);"
+ "}"
+};
+
+/* Direct fragments copy */
+static const char *frag_COPY_prog = {
+ "precision mediump float;"
+ "varying vec2 opos;"
+ "uniform sampler2D tex;"
+ "void main(void)"
+ "{"
+ " vec4 t = texture2D(tex, opos);"
+ " gl_FragColor = vec4(t.rgb, 1.0);"
+ "}"
+};
+
+/* Channel reordering for XYZ <-> ZYX conversion */
+static const char *frag_REORDER_prog = {
+ "precision mediump float;"
+ "varying vec2 opos;"
+ "uniform sampler2D tex;"
+ "void main(void)"
+ "{"
+ " vec4 t = texture2D(tex, opos);"
+ " gl_FragColor = vec4(t.%c, t.%c, t.%c, 1.0);"
+ "}"
+};
+
+/* Packed YUV converters */
+
+/** AYUV to RGB conversion */
+static const char *frag_AYUV_prog = {
+ "precision mediump float;"
+ "varying vec2 opos;"
+ "uniform sampler2D tex;"
+ "const vec3 offset = vec3(-0.0625, -0.5, -0.5);"
+ "const vec3 rcoeff = vec3(1.164, 0.000, 1.596);"
+ "const vec3 gcoeff = vec3(1.164,-0.391,-0.813);"
+ "const vec3 bcoeff = vec3(1.164, 2.018, 0.000);"
+ "void main(void) {"
+ " float r,g,b;"
+ " vec3 yuv;"
+ " yuv = texture2D(tex,opos).gba;"
+ " yuv += offset;"
+ " r = dot(yuv, rcoeff);"
+ " g = dot(yuv, gcoeff);"
+ " b = dot(yuv, bcoeff);"
+ " gl_FragColor=vec4(r,g,b,1.0);"
+ "}"
+};
+
+/** YUY2/YVYU/UYVY to RGB conversion */
+static const char *frag_YUY2_YVYU_UYVY_prog = {
+ "precision mediump float;"
+ "varying vec2 opos;"
+ "uniform sampler2D Ytex, UVtex;"
+ "const vec3 offset = vec3(-0.0625, -0.5, -0.5);"
+ "const vec3 rcoeff = vec3(1.164, 0.000, 1.596);"
+ "const vec3 gcoeff = vec3(1.164,-0.391,-0.813);"
+ "const vec3 bcoeff = vec3(1.164, 2.018, 0.000);"
+ "void main(void) {"
+ " float r, g, b;"
+ " vec3 yuv;"
+ " yuv.x = texture2D(Ytex,opos).%c;"
+ " yuv.yz = texture2D(UVtex,opos).%c%c;"
+ " yuv += offset;"
+ " r = dot(yuv, rcoeff);"
+ " g = dot(yuv, gcoeff);"
+ " b = dot(yuv, bcoeff);"
+ " gl_FragColor=vec4(r,g,b,1.0);"
+ "}"
+};
+
+/* Planar YUV converters */
+
+/** YUV to RGB conversion */
+static const char *frag_PLANAR_YUV_prog = {
+ "precision mediump float;"
+ "varying vec2 opos;"
+ "uniform sampler2D Ytex,Utex,Vtex;"
+ "const vec3 offset = vec3(-0.0625, -0.5, -0.5);"
+ "const vec3 rcoeff = vec3(1.164, 0.000, 1.596);"
+ "const vec3 gcoeff = vec3(1.164,-0.391,-0.813);"
+ "const vec3 bcoeff = vec3(1.164, 2.018, 0.000);"
+ "void main(void) {"
+ " float r,g,b;"
+ " vec3 yuv;"
+ " yuv.x=texture2D(Ytex,opos).r;"
+ " yuv.y=texture2D(Utex,opos).r;"
+ " yuv.z=texture2D(Vtex,opos).r;"
+ " yuv += offset;"
+ " r = dot(yuv, rcoeff);"
+ " g = dot(yuv, gcoeff);"
+ " b = dot(yuv, bcoeff);"
+ " gl_FragColor=vec4(r,g,b,1.0);"
+ "}"
+};
+
+/** NV12/NV21 to RGB conversion */
+static const char *frag_NV12_NV21_prog = {
+ "precision mediump float;"
+ "varying vec2 opos;"
+ "uniform sampler2D Ytex,UVtex;"
+ "const vec3 offset = vec3(-0.0625, -0.5, -0.5);"
+ "const vec3 rcoeff = vec3(1.164, 0.000, 1.596);"
+ "const vec3 gcoeff = vec3(1.164,-0.391,-0.813);"
+ "const vec3 bcoeff = vec3(1.164, 2.018, 0.000);"
+ "void main(void) {"
+ " float r,g,b;"
+ " vec3 yuv;"
+ " yuv.x=texture2D(Ytex,opos).r;"
+ " yuv.yz=texture2D(UVtex,opos).%c%c;"
+ " yuv += offset;"
+ " r = dot(yuv, rcoeff);"
+ " g = dot(yuv, gcoeff);"
+ " b = dot(yuv, bcoeff);"
+ " gl_FragColor=vec4(r,g,b,1.0);"
+ "}"
+};
+/* *INDENT-ON* */
+
+/* Input capabilities. */
+static GstStaticPadTemplate gst_eglglessink_sink_template_factory =
+ GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_RGBA ";" GST_VIDEO_CAPS_BGRA ";"
+ GST_VIDEO_CAPS_ARGB ";" GST_VIDEO_CAPS_ABGR ";"
+ GST_VIDEO_CAPS_RGBx ";" GST_VIDEO_CAPS_BGRx ";"
+ GST_VIDEO_CAPS_xRGB ";" GST_VIDEO_CAPS_xBGR ";"
+ GST_VIDEO_CAPS_YUV
+ ("{ AYUV, Y444, I420, YV12, NV12, NV21, YUY2, YVYU, UYVY, Y42B, Y41B }")
+ ";" GST_VIDEO_CAPS_RGB ";" GST_VIDEO_CAPS_BGR ";"
+ GST_VIDEO_CAPS_RGB_16));
+
+/* Filter signals and args */
+enum
+{
+ /* FILL ME */
+ LAST_SIGNAL
+};
+
+enum
+{
+ PROP_0,
+ PROP_CREATE_WINDOW,
+ PROP_FORCE_ASPECT_RATIO,
+};
+
+/* will probably move elsewhere */
+static const EGLint eglglessink_RGBA8888_attribs[] = {
+ EGL_RED_SIZE, 8,
+ EGL_GREEN_SIZE, 8,
+ EGL_BLUE_SIZE, 8,
+ EGL_ALPHA_SIZE, 8,
+ EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
+ EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
+ EGL_NONE
+};
+
+static const EGLint eglglessink_RGB888_attribs[] = {
+ EGL_RED_SIZE, 8,
+ EGL_GREEN_SIZE, 8,
+ EGL_BLUE_SIZE, 8,
+ EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
+ EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
+ EGL_NONE
+};
+
+static const EGLint eglglessink_RGB565_attribs[] = {
+ EGL_RED_SIZE, 5,
+ EGL_GREEN_SIZE, 6,
+ EGL_BLUE_SIZE, 5,
+ EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
+ EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
+ EGL_NONE
+};
+
+static void gst_eglglessink_finalize (GObject * object);
+static void gst_eglglessink_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec);
+static void gst_eglglessink_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec);
+static GstStateChangeReturn gst_eglglessink_change_state (GstElement * element,
+ GstStateChange transition);
+static GstFlowReturn gst_eglglessink_show_frame (GstVideoSink * vsink,
+ GstBuffer * buf);
+static gboolean gst_eglglessink_setcaps (GstBaseSink * bsink, GstCaps * caps);
+static GstCaps *gst_eglglessink_getcaps (GstBaseSink * bsink);
+
+/* XOverlay interface cruft */
+static gboolean gst_eglglessink_interface_supported
+ (GstImplementsInterface * iface, GType type);
+static void gst_eglglessink_implements_init
+ (GstImplementsInterfaceClass * klass);
+static void gst_eglglessink_xoverlay_init (GstXOverlayClass * iface);
+static void gst_eglglessink_init_interfaces (GType type);
+
+/* Actual XOverlay interface funcs */
+static void gst_eglglessink_expose (GstXOverlay * overlay);
+static void gst_eglglessink_set_window_handle (GstXOverlay * overlay,
+ guintptr id);
+static void gst_eglglessink_set_render_rectangle (GstXOverlay * overlay, gint x,
+ gint y, gint width, gint height);
+
+/* Utility */
+static GstEglGlesImageFmt *gst_eglglessink_get_compat_format_from_caps
+ (GstEglGlesSink * eglglessink, GstCaps * caps);
+static EGLNativeWindowType gst_eglglessink_create_window (GstEglGlesSink *
+ eglglessink, gint width, gint height);
+static inline gint
+gst_eglglessink_fill_supported_fbuffer_configs (GstEglGlesSink * eglglessink);
+static gboolean gst_eglglessink_init_egl_display (GstEglGlesSink * eglglessink);
+static gboolean gst_eglglessink_choose_config (GstEglGlesSink * eglglessink);
+static gboolean gst_eglglessink_init_egl_surface (GstEglGlesSink * eglglessink);
+static void gst_eglglessink_init_egl_exts (GstEglGlesSink * eglglessink);
+static gboolean gst_eglglessink_setup_vbo (GstEglGlesSink * eglglessink,
+ gboolean reset);
+static gboolean
+gst_eglglessink_configure_caps (GstEglGlesSink * eglglessink, GstCaps * caps);
+static GstFlowReturn gst_eglglessink_render_and_display (GstEglGlesSink * sink,
+ GstBuffer * buf);
+static GstFlowReturn gst_eglglessink_queue_buffer (GstEglGlesSink * sink,
+ GstBuffer * buf);
+static inline gboolean got_gl_error (const char *wtf);
+static inline void show_egl_error (const char *wtf);
+static void gst_eglglessink_wipe_fmt (gpointer data);
+static inline gboolean egl_init (GstEglGlesSink * eglglessink);
+static gboolean gst_eglglessink_context_make_current (GstEglGlesSink *
+ eglglessink, gboolean bind);
+static void gst_eglglessink_wipe_eglglesctx (GstEglGlesSink * eglglessink);
+static inline void gst_eglglessink_reset_display_region (GstEglGlesSink *
+ eglglessink);
+
+GST_BOILERPLATE_FULL (GstEglGlesSink, gst_eglglessink, GstVideoSink,
+ GST_TYPE_VIDEO_SINK, gst_eglglessink_init_interfaces);
+
+
+static GstEglGlesImageFmt *
+gst_eglglessink_get_compat_format_from_caps (GstEglGlesSink * eglglessink,
+ GstCaps * caps)
+{
+
+ GList *list;
+ GstEglGlesImageFmt *format;
+
+ g_return_val_if_fail (GST_IS_EGLGLESSINK (eglglessink), 0);
+
+ list = eglglessink->supported_fmts;
+
+ /* Traverse the list trying to find a compatible format */
+ while (list) {
+ format = list->data;
+ GST_DEBUG_OBJECT (eglglessink, "Checking compatibility between listed %"
+ GST_PTR_FORMAT " and %" GST_PTR_FORMAT, format->caps, caps);
+ if (format) {
+ if (gst_caps_can_intersect (caps, format->caps)) {
+ GST_INFO_OBJECT (eglglessink, "Found compatible format %d",
+ format->fmt);
+ GST_DEBUG_OBJECT (eglglessink,
+ "Got caps %" GST_PTR_FORMAT " and this format can do %"
+ GST_PTR_FORMAT, caps, format->caps);
+ return format;
+ }
+ }
+ list = g_list_next (list);
+ }
+
+ return NULL;
+}
+
+static inline gint
+gst_eglglessink_fill_supported_fbuffer_configs (GstEglGlesSink * eglglessink)
+{
+ gint ret = 0;
+ EGLint cfg_number;
+ GstEglGlesImageFmt *format;
+ GstCaps *caps;
+
+ GST_DEBUG_OBJECT (eglglessink,
+ "Building initial list of wanted eglattribs per format");
+
+ /* Init supported format/caps list */
+ caps = gst_caps_new_empty ();
+
+ if (eglChooseConfig (eglglessink->eglglesctx.display,
+ eglglessink_RGBA8888_attribs, NULL, 1, &cfg_number) != EGL_FALSE) {
+ format = g_new0 (GstEglGlesImageFmt, 1);
+ format->fmt = GST_EGLGLESSINK_IMAGE_RGBA8888;
+ format->attribs = eglglessink_RGBA8888_attribs;
+ format->caps = gst_video_format_new_template_caps (GST_VIDEO_FORMAT_RGBA);
+ gst_caps_append (format->caps,
+ gst_video_format_new_template_caps (GST_VIDEO_FORMAT_BGRA));
+ gst_caps_append (format->caps,
+ gst_video_format_new_template_caps (GST_VIDEO_FORMAT_ARGB));
+ gst_caps_append (format->caps,
+ gst_video_format_new_template_caps (GST_VIDEO_FORMAT_ABGR));
+ gst_caps_append (format->caps,
+ gst_video_format_new_template_caps (GST_VIDEO_FORMAT_RGBx));
+ gst_caps_append (format->caps,
+ gst_video_format_new_template_caps (GST_VIDEO_FORMAT_BGRx));
+ gst_caps_append (format->caps,
+ gst_video_format_new_template_caps (GST_VIDEO_FORMAT_xRGB));
+ gst_caps_append (format->caps,
+ gst_video_format_new_template_caps (GST_VIDEO_FORMAT_xBGR));
+ gst_caps_append (format->caps,
+ gst_video_format_new_template_caps (GST_VIDEO_FORMAT_AYUV));
+ gst_caps_append (format->caps,
+ gst_video_format_new_template_caps (GST_VIDEO_FORMAT_Y444));
+ gst_caps_append (format->caps,
+ gst_video_format_new_template_caps (GST_VIDEO_FORMAT_I420));
+ gst_caps_append (format->caps,
+ gst_video_format_new_template_caps (GST_VIDEO_FORMAT_YV12));
+ gst_caps_append (format->caps,
+ gst_video_format_new_template_caps (GST_VIDEO_FORMAT_NV12));
+ gst_caps_append (format->caps,
+ gst_video_format_new_template_caps (GST_VIDEO_FORMAT_NV21));
+ gst_caps_append (format->caps,
+ gst_video_format_new_template_caps (GST_VIDEO_FORMAT_YUY2));
+ gst_caps_append (format->caps,
+ gst_video_format_new_template_caps (GST_VIDEO_FORMAT_YVYU));
+ gst_caps_append (format->caps,
+ gst_video_format_new_template_caps (GST_VIDEO_FORMAT_UYVY));
+ gst_caps_append (format->caps,
+ gst_video_format_new_template_caps (GST_VIDEO_FORMAT_Y42B));
+ gst_caps_append (format->caps,
+ gst_video_format_new_template_caps (GST_VIDEO_FORMAT_Y41B));
+ eglglessink->supported_fmts =
+ g_list_append (eglglessink->supported_fmts, format);
+ ret++;
+ gst_caps_append (caps, gst_caps_ref (format->caps));
+ } else {
+ GST_INFO_OBJECT (eglglessink,
+ "EGL display doesn't support RGBA8888 config");
+ }
+
+ if (eglChooseConfig (eglglessink->eglglesctx.display,
+ eglglessink_RGB888_attribs, NULL, 1, &cfg_number) != EGL_FALSE) {
+ format = g_new0 (GstEglGlesImageFmt, 1);
+ format->fmt = GST_EGLGLESSINK_IMAGE_RGB888;
+ format->attribs = eglglessink_RGB888_attribs;
+ format->caps = gst_video_format_new_template_caps (GST_VIDEO_FORMAT_RGB);
+ gst_caps_append (format->caps,
+ gst_video_format_new_template_caps (GST_VIDEO_FORMAT_BGR));
+ eglglessink->supported_fmts =
+ g_list_append (eglglessink->supported_fmts, format);
+ ret++;
+ gst_caps_append (caps, gst_caps_ref (format->caps));
+ } else {
+ GST_INFO_OBJECT (eglglessink, "EGL display doesn't support RGB888 config");
+ }
+
+ if (eglChooseConfig (eglglessink->eglglesctx.display,
+ eglglessink_RGB565_attribs, NULL, 1, &cfg_number) != EGL_FALSE) {
+ format = g_new0 (GstEglGlesImageFmt, 1);
+ format->fmt = GST_EGLGLESSINK_IMAGE_RGB565;
+ format->attribs = eglglessink_RGB565_attribs;
+ format->caps = gst_video_format_new_template_caps (GST_VIDEO_FORMAT_RGB16);
+ eglglessink->supported_fmts =
+ g_list_append (eglglessink->supported_fmts, format);
+ ret++;
+ gst_caps_append (caps, gst_caps_ref (format->caps));
+ } else {
+ GST_INFO_OBJECT (eglglessink, "EGL display doesn't support RGB565 config");
+ }
+
+ GST_OBJECT_LOCK (eglglessink);
+ gst_caps_replace (&eglglessink->sinkcaps, caps);
+ GST_OBJECT_UNLOCK (eglglessink);
+ gst_caps_unref (caps);
+
+ return ret;
+}
+
+static inline gboolean
+egl_init (GstEglGlesSink * eglglessink)
+{
+ if (!platform_wrapper_init ()) {
+ GST_ERROR_OBJECT (eglglessink, "Couldn't init EGL platform wrapper");
+ goto HANDLE_ERROR;
+ }
+
+ if (!gst_eglglessink_init_egl_display (eglglessink)) {
+ GST_ERROR_OBJECT (eglglessink, "Couldn't init EGL display");
+ goto HANDLE_ERROR;
+ }
+
+ gst_eglglessink_init_egl_exts (eglglessink);
+
+ if (!gst_eglglessink_fill_supported_fbuffer_configs (eglglessink)) {
+ GST_ERROR_OBJECT (eglglessink, "Display support NONE of our configs");
+ goto HANDLE_ERROR;
+ }
+
+ eglglessink->egl_started = TRUE;
+
+ return TRUE;
+
+HANDLE_ERROR:
+ GST_ERROR_OBJECT (eglglessink, "Failed to perform EGL init");
+ return FALSE;
+}
+
+static gpointer
+render_thread_func (GstEglGlesSink * eglglessink)
+{
+ GstDataQueueItem *item = NULL;
+
+ while (gst_data_queue_pop (eglglessink->queue, &item)) {
+ GstBuffer *buf = NULL;
+
+ GST_DEBUG_OBJECT (eglglessink, "Handling object %" GST_PTR_FORMAT,
+ item->object);
+
+ if (item->object) {
+ GstCaps *caps;
+
+ buf = GST_BUFFER (item->object);
+ caps = GST_BUFFER_CAPS (buf);
+ if (caps != eglglessink->configured_caps) {
+ if (!gst_eglglessink_configure_caps (eglglessink, caps)) {
+ eglglessink->last_flow = GST_FLOW_NOT_NEGOTIATED;
+ g_mutex_lock (eglglessink->render_lock);
+ g_cond_broadcast (eglglessink->render_cond);
+ g_mutex_unlock (eglglessink->render_lock);
+ item->destroy (item);
+ break;
+ }
+ }
+ }
+
+ if (eglglessink->configured_caps) {
+ eglglessink->last_flow =
+ gst_eglglessink_render_and_display (eglglessink, buf);
+ } else {
+ GST_DEBUG_OBJECT (eglglessink, "No caps configured yet, not drawing anything");
+ }
+
+ if (buf) {
+ g_mutex_lock (eglglessink->render_lock);
+ g_cond_broadcast (eglglessink->render_cond);
+ g_mutex_unlock (eglglessink->render_lock);
+ }
+ item->destroy (item);
+ if (eglglessink->last_flow != GST_FLOW_OK)
+ break;
+ GST_DEBUG_OBJECT (eglglessink, "Successfully handled object");
+ }
+
+ if (eglglessink->last_flow == GST_FLOW_OK)
+ eglglessink->last_flow = GST_FLOW_WRONG_STATE;
+
+ GST_DEBUG_OBJECT (eglglessink, "Shutting down thread");
+
+ /* EGL/GLES cleanup */
+ gst_eglglessink_wipe_eglglesctx (eglglessink);
+
+ if (eglglessink->configured_caps) {
+ gst_caps_unref (eglglessink->configured_caps);
+ eglglessink->configured_caps = NULL;
+ }
+
+ return NULL;
+}
+
+static void
+gst_eglglessink_wipe_eglglesctx (GstEglGlesSink * eglglessink)
+{
+ glUseProgram (0);
+
+ if (eglglessink->have_vbo) {
+ glDeleteBuffers (1, &eglglessink->eglglesctx.position_buffer);
+ glDeleteBuffers (1, &eglglessink->eglglesctx.index_buffer);
+ eglglessink->have_vbo = FALSE;
+ }
+
+ if (eglglessink->have_texture) {
+ glDeleteTextures (eglglessink->eglglesctx.n_textures,
+ eglglessink->eglglesctx.texture);
+ eglglessink->have_texture = FALSE;
+ eglglessink->eglglesctx.n_textures = 0;
+ }
+
+ if (eglglessink->eglglesctx.glslprogram[0]) {
+ glDetachShader (eglglessink->eglglesctx.glslprogram[0],
+ eglglessink->eglglesctx.fragshader[0]);
+ glDetachShader (eglglessink->eglglesctx.glslprogram[0],
+ eglglessink->eglglesctx.vertshader[0]);
+ glDeleteProgram (eglglessink->eglglesctx.glslprogram[0]);
+ glDeleteShader (eglglessink->eglglesctx.fragshader[0]);
+ glDeleteShader (eglglessink->eglglesctx.vertshader[0]);
+ eglglessink->eglglesctx.glslprogram[0] = 0;
+ }
+
+ if (eglglessink->eglglesctx.glslprogram[1]) {
+ glDetachShader (eglglessink->eglglesctx.glslprogram[1],
+ eglglessink->eglglesctx.fragshader[1]);
+ glDetachShader (eglglessink->eglglesctx.glslprogram[1],
+ eglglessink->eglglesctx.vertshader[1]);
+ glDeleteProgram (eglglessink->eglglesctx.glslprogram[1]);
+ glDeleteShader (eglglessink->eglglesctx.fragshader[1]);
+ glDeleteShader (eglglessink->eglglesctx.vertshader[1]);
+ eglglessink->eglglesctx.glslprogram[1] = 0;
+ }
+
+ gst_eglglessink_context_make_current (eglglessink, FALSE);
+
+ if (eglglessink->eglglesctx.surface) {
+ eglDestroySurface (eglglessink->eglglesctx.display,
+ eglglessink->eglglesctx.surface);
+ eglglessink->eglglesctx.surface = NULL;
+ eglglessink->have_surface = FALSE;
+ }
+
+ if (eglglessink->eglglesctx.eglcontext) {
+ eglDestroyContext (eglglessink->eglglesctx.display,
+ eglglessink->eglglesctx.eglcontext);
+ eglglessink->eglglesctx.eglcontext = NULL;
+ }
+
+ gst_eglglessink_reset_display_region (eglglessink);
+}
+
+/* Reset display region
+ * XXX: Should probably keep old ones if set_render_rect()
+ * has been called.
+ */
+static inline void
+gst_eglglessink_reset_display_region (GstEglGlesSink * eglglessink)
+{
+ GST_OBJECT_LOCK (eglglessink);
+ eglglessink->display_region.w = 0;
+ eglglessink->display_region.h = 0;
+ GST_OBJECT_UNLOCK (eglglessink);
+}
+
+static gboolean
+gst_eglglessink_start (GstEglGlesSink * eglglessink)
+{
+ GError *error = NULL;
+
+ GST_DEBUG_OBJECT (eglglessink, "Starting");
+
+ if (!eglglessink->egl_started) {
+ GST_ERROR_OBJECT (eglglessink, "EGL uninitialized. Bailing out");
+ goto HANDLE_ERROR;
+ }
+
+ /* Ask for a window to render to */
+ if (!eglglessink->have_window)
+ gst_x_overlay_prepare_xwindow_id (GST_X_OVERLAY (eglglessink));
+
+ if (!eglglessink->have_window && !eglglessink->create_window) {
+ GST_ERROR_OBJECT (eglglessink, "Window handle unavailable and we "
+ "were instructed not to create an internal one. Bailing out.");
+ goto HANDLE_ERROR;
+ }
+
+ gst_eglglessink_reset_display_region (eglglessink);
+ eglglessink->last_flow = GST_FLOW_OK;
+ gst_data_queue_set_flushing (eglglessink->queue, FALSE);
+
+#if !GLIB_CHECK_VERSION (2, 31, 0)
+ eglglessink->thread =
+ g_thread_create ((GThreadFunc) render_thread_func, eglglessink, TRUE,
+ &error);
+#else
+ eglglessink->thread = g_thread_try_new ("eglglessink-render",
+ (GThreadFunc) render_thread_func, eglglessink, &error);
+#endif
+
+ if (!eglglessink->thread || error != NULL)
+ goto HANDLE_ERROR;
+
+ GST_DEBUG_OBJECT (eglglessink, "Started");
+
+ return TRUE;
+
+HANDLE_ERROR:
+ GST_ERROR_OBJECT (eglglessink, "Couldn't start");
+ g_clear_error (&error);
+ return FALSE;
+}
+
+static gboolean
+gst_eglglessink_stop (GstEglGlesSink * eglglessink)
+{
+ GST_DEBUG_OBJECT (eglglessink, "Stopping");
+
+ gst_data_queue_set_flushing (eglglessink->queue, TRUE);
+ g_mutex_lock (eglglessink->render_lock);
+ g_cond_broadcast (eglglessink->render_cond);
+ g_mutex_unlock (eglglessink->render_lock);
+
+ if (eglglessink->thread) {
+ g_thread_join (eglglessink->thread);
+ eglglessink->thread = NULL;
+ }
+ eglglessink->last_flow = GST_FLOW_WRONG_STATE;
+
+ if (eglglessink->using_own_window) {
+ platform_destroy_native_window (eglglessink->eglglesctx.display,
+ eglglessink->eglglesctx.used_window);
+ eglglessink->eglglesctx.used_window = 0;
+ eglglessink->have_window = FALSE;
+ }
+ eglglessink->eglglesctx.used_window = 0;
+ if (eglglessink->current_caps) {
+ gst_caps_unref (eglglessink->current_caps);
+ eglglessink->current_caps = NULL;
+ }
+
+ GST_DEBUG_OBJECT (eglglessink, "Stopped");
+
+ return TRUE;
+}
+
+static void
+gst_eglglessink_xoverlay_init (GstXOverlayClass * iface)
+{
+ iface->set_window_handle = gst_eglglessink_set_window_handle;
+ iface->expose = gst_eglglessink_expose;
+ iface->set_render_rectangle = gst_eglglessink_set_render_rectangle;
+}
+
+static gboolean
+gst_eglglessink_interface_supported (GstImplementsInterface * iface, GType type)
+{
+ return (type == GST_TYPE_X_OVERLAY);
+}
+
+static void
+gst_eglglessink_implements_init (GstImplementsInterfaceClass * klass)
+{
+ klass->supported = gst_eglglessink_interface_supported;
+}
+
+static inline gboolean
+got_gl_error (const char *wtf)
+{
+ GLuint error = GL_NO_ERROR;
+
+ if ((error = glGetError ()) != GL_NO_ERROR) {
+ GST_CAT_ERROR (GST_CAT_DEFAULT, "GL ERROR: %s returned %x", wtf, error);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static inline void
+show_egl_error (const char *wtf)
+{
+ EGLint error;
+
+ if ((error = eglGetError ()) != EGL_SUCCESS)
+ GST_CAT_DEBUG (GST_CAT_DEFAULT, "EGL ERROR: %s returned %x", wtf, error);
+}
+
+static EGLNativeWindowType
+gst_eglglessink_create_window (GstEglGlesSink * eglglessink, gint width,
+ gint height)
+{
+ EGLNativeWindowType window = 0;
+
+ if (!eglglessink->create_window) {
+ GST_ERROR_OBJECT (eglglessink, "This sink can't create a window by itself");
+ return window;
+ } else
+ GST_INFO_OBJECT (eglglessink, "Attempting internal window creation");
+
+ window = platform_create_native_window (width, height);
+ if (!window) {
+ GST_ERROR_OBJECT (eglglessink, "Could not create window");
+ return window;
+ }
+ return window;
+}
+
+static void
+gst_eglglessink_expose (GstXOverlay * overlay)
+{
+ GstEglGlesSink *eglglessink;
+ GstFlowReturn ret;
+
+ eglglessink = GST_EGLGLESSINK (overlay);
+ GST_DEBUG_OBJECT (eglglessink, "Expose catched, redisplay");
+
+ /* Render from last seen buffer */
+ ret = gst_eglglessink_queue_buffer (eglglessink, NULL);
+ if (ret == GST_FLOW_ERROR)
+ GST_ERROR_OBJECT (eglglessink, "Redisplay failed");
+}
+
+/* Prints available EGL/GLES extensions
+ * If another rendering path is implemented this is the place
+ * where you want to check for the availability of its supporting
+ * EGL/GLES extensions.
+ */
+static void
+gst_eglglessink_init_egl_exts (GstEglGlesSink * eglglessink)
+{
+ const char *eglexts;
+ unsigned const char *glexts;
+
+ eglexts = eglQueryString (eglglessink->eglglesctx.display, EGL_EXTENSIONS);
+ glexts = glGetString (GL_EXTENSIONS);
+
+ GST_DEBUG_OBJECT (eglglessink, "Available EGL extensions: %s\n",
+ GST_STR_NULL (eglexts));
+ GST_DEBUG_OBJECT (eglglessink, "Available GLES extensions: %s\n",
+ GST_STR_NULL ((const char *) glexts));
+
+ return;
+}
+
+static gboolean
+gst_eglglessink_setup_vbo (GstEglGlesSink * eglglessink, gboolean reset)
+{
+ gdouble surface_width, surface_height;
+ gdouble x1, x2, y1, y2;
+
+ GST_INFO_OBJECT (eglglessink, "VBO setup. have_vbo:%d, should reset %d",
+ eglglessink->have_vbo, reset);
+
+ if (eglglessink->have_vbo && reset) {
+ glDeleteBuffers (1, &eglglessink->eglglesctx.position_buffer);
+ glDeleteBuffers (1, &eglglessink->eglglesctx.index_buffer);
+ eglglessink->have_vbo = FALSE;
+ }
+
+ surface_width = eglglessink->eglglesctx.surface_width;
+ surface_height = eglglessink->eglglesctx.surface_height;
+
+ GST_DEBUG_OBJECT (eglglessink, "Performing VBO setup");
+
+ x1 = (eglglessink->display_region.x / surface_width) * 2.0 - 1;
+ y1 = (eglglessink->display_region.y / surface_height) * 2.0 - 1;
+ x2 = ((eglglessink->display_region.x +
+ eglglessink->display_region.w) / surface_width) * 2.0 - 1;
+ y2 = ((eglglessink->display_region.y +
+ eglglessink->display_region.h) / surface_height) * 2.0 - 1;
+
+ eglglessink->eglglesctx.position_array[0].x = x2;
+ eglglessink->eglglesctx.position_array[0].y = y2;
+ eglglessink->eglglesctx.position_array[0].z = 0;
+ eglglessink->eglglesctx.position_array[0].a = 1;
+ eglglessink->eglglesctx.position_array[0].b = 0;
+
+ eglglessink->eglglesctx.position_array[1].x = x2;
+ eglglessink->eglglesctx.position_array[1].y = y1;
+ eglglessink->eglglesctx.position_array[1].z = 0;
+ eglglessink->eglglesctx.position_array[1].a = 1;
+ eglglessink->eglglesctx.position_array[1].b = 1;
+
+ eglglessink->eglglesctx.position_array[2].x = x1;
+ eglglessink->eglglesctx.position_array[2].y = y2;
+ eglglessink->eglglesctx.position_array[2].z = 0;
+ eglglessink->eglglesctx.position_array[2].a = 0;
+ eglglessink->eglglesctx.position_array[2].b = 0;
+
+ eglglessink->eglglesctx.position_array[3].x = x1;
+ eglglessink->eglglesctx.position_array[3].y = y1;
+ eglglessink->eglglesctx.position_array[3].z = 0;
+ eglglessink->eglglesctx.position_array[3].a = 0;
+ eglglessink->eglglesctx.position_array[3].b = 1;
+
+ if (eglglessink->display_region.x == 0) {
+ /* Borders top/bottom */
+
+ eglglessink->eglglesctx.position_array[4 + 0].x = 1;
+ eglglessink->eglglesctx.position_array[4 + 0].y = 1;
+ eglglessink->eglglesctx.position_array[4 + 0].z = 0;
+
+ eglglessink->eglglesctx.position_array[4 + 1].x = x2;
+ eglglessink->eglglesctx.position_array[4 + 1].y = y2;
+ eglglessink->eglglesctx.position_array[4 + 1].z = 0;
+
+ eglglessink->eglglesctx.position_array[4 + 2].x = -1;
+ eglglessink->eglglesctx.position_array[4 + 2].y = 1;
+ eglglessink->eglglesctx.position_array[4 + 2].z = 0;
+
+ eglglessink->eglglesctx.position_array[4 + 3].x = x1;
+ eglglessink->eglglesctx.position_array[4 + 3].y = y2;
+ eglglessink->eglglesctx.position_array[4 + 3].z = 0;
+
+ eglglessink->eglglesctx.position_array[8 + 0].x = 1;
+ eglglessink->eglglesctx.position_array[8 + 0].y = y1;
+ eglglessink->eglglesctx.position_array[8 + 0].z = 0;
+
+ eglglessink->eglglesctx.position_array[8 + 1].x = 1;
+ eglglessink->eglglesctx.position_array[8 + 1].y = -1;
+ eglglessink->eglglesctx.position_array[8 + 1].z = 0;
+
+ eglglessink->eglglesctx.position_array[8 + 2].x = x1;
+ eglglessink->eglglesctx.position_array[8 + 2].y = y1;
+ eglglessink->eglglesctx.position_array[8 + 2].z = 0;
+
+ eglglessink->eglglesctx.position_array[8 + 3].x = -1;
+ eglglessink->eglglesctx.position_array[8 + 3].y = -1;
+ eglglessink->eglglesctx.position_array[8 + 3].z = 0;
+ } else {
+ /* Borders left/right */
+
+ eglglessink->eglglesctx.position_array[4 + 0].x = x1;
+ eglglessink->eglglesctx.position_array[4 + 0].y = 1;
+ eglglessink->eglglesctx.position_array[4 + 0].z = 0;
+
+ eglglessink->eglglesctx.position_array[4 + 1].x = x1;
+ eglglessink->eglglesctx.position_array[4 + 1].y = -1;
+ eglglessink->eglglesctx.position_array[4 + 1].z = 0;
+
+ eglglessink->eglglesctx.position_array[4 + 2].x = -1;
+ eglglessink->eglglesctx.position_array[4 + 2].y = 1;
+ eglglessink->eglglesctx.position_array[4 + 2].z = 0;
+
+ eglglessink->eglglesctx.position_array[4 + 3].x = -1;
+ eglglessink->eglglesctx.position_array[4 + 3].y = -1;
+ eglglessink->eglglesctx.position_array[4 + 3].z = 0;
+
+ eglglessink->eglglesctx.position_array[8 + 0].x = 1;
+ eglglessink->eglglesctx.position_array[8 + 0].y = 1;
+ eglglessink->eglglesctx.position_array[8 + 0].z = 0;
+
+ eglglessink->eglglesctx.position_array[8 + 1].x = 1;
+ eglglessink->eglglesctx.position_array[8 + 1].y = -1;
+ eglglessink->eglglesctx.position_array[8 + 1].z = 0;
+
+ eglglessink->eglglesctx.position_array[8 + 2].x = x2;
+ eglglessink->eglglesctx.position_array[8 + 2].y = y2;
+ eglglessink->eglglesctx.position_array[8 + 2].z = 0;
+
+ eglglessink->eglglesctx.position_array[8 + 3].x = x2;
+ eglglessink->eglglesctx.position_array[8 + 3].y = -1;
+ eglglessink->eglglesctx.position_array[8 + 3].z = 0;
+ }
+
+ eglglessink->eglglesctx.index_array[0] = 0;
+ eglglessink->eglglesctx.index_array[1] = 1;
+ eglglessink->eglglesctx.index_array[2] = 2;
+ eglglessink->eglglesctx.index_array[3] = 3;
+
+ glGenBuffers (1, &eglglessink->eglglesctx.position_buffer);
+ glGenBuffers (1, &eglglessink->eglglesctx.index_buffer);
+ if (got_gl_error ("glGenBuffers"))
+ goto HANDLE_ERROR_LOCKED;
+
+ glBindBuffer (GL_ARRAY_BUFFER, eglglessink->eglglesctx.position_buffer);
+ if (got_gl_error ("glBindBuffer position_buffer"))
+ goto HANDLE_ERROR_LOCKED;
+
+ glBufferData (GL_ARRAY_BUFFER,
+ sizeof (eglglessink->eglglesctx.position_array),
+ eglglessink->eglglesctx.position_array, GL_STATIC_DRAW);
+ if (got_gl_error ("glBufferData position_buffer"))
+ goto HANDLE_ERROR_LOCKED;
+
+ glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, eglglessink->eglglesctx.index_buffer);
+ if (got_gl_error ("glBindBuffer index_buffer"))
+ goto HANDLE_ERROR_LOCKED;
+
+ glBufferData (GL_ELEMENT_ARRAY_BUFFER,
+ sizeof (eglglessink->eglglesctx.index_array),
+ eglglessink->eglglesctx.index_array, GL_STATIC_DRAW);
+ if (got_gl_error ("glBufferData index_buffer"))
+ goto HANDLE_ERROR_LOCKED;
+
+ eglglessink->have_vbo = TRUE;
+ GST_DEBUG_OBJECT (eglglessink, "VBO setup done");
+
+ return TRUE;
+
+HANDLE_ERROR_LOCKED:
+ GST_ERROR_OBJECT (eglglessink, "Unable to perform VBO setup");
+ return FALSE;
+}
+
+/* XXX: Lock eglgles context? */
+static gboolean
+gst_eglglessink_update_surface_dimensions (GstEglGlesSink * eglglessink)
+{
+ gint width, height;
+
+ /* Save surface dims */
+ eglQuerySurface (eglglessink->eglglesctx.display,
+ eglglessink->eglglesctx.surface, EGL_WIDTH, &width);
+ eglQuerySurface (eglglessink->eglglesctx.display,
+ eglglessink->eglglesctx.surface, EGL_HEIGHT, &height);
+
+ if (width != eglglessink->eglglesctx.surface_width ||
+ height != eglglessink->eglglesctx.surface_height) {
+ eglglessink->eglglesctx.surface_width = width;
+ eglglessink->eglglesctx.surface_height = height;
+ GST_INFO_OBJECT (eglglessink, "Got surface of %dx%d pixels", width, height);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static gboolean
+gst_eglglessink_context_make_current (GstEglGlesSink * eglglessink,
+ gboolean bind)
+{
+ g_assert (eglglessink->eglglesctx.display != NULL);
+
+ if (bind && eglglessink->eglglesctx.surface &&
+ eglglessink->eglglesctx.eglcontext) {
+ EGLContext *ctx = eglGetCurrentContext ();
+
+ if (ctx == eglglessink->eglglesctx.eglcontext) {
+ GST_DEBUG_OBJECT (eglglessink,
+ "Already attached the context to thread %p", g_thread_self ());
+ return TRUE;
+ }
+
+ GST_DEBUG_OBJECT (eglglessink, "Attaching context to thread %p",
+ g_thread_self ());
+ if (!eglMakeCurrent (eglglessink->eglglesctx.display,
+ eglglessink->eglglesctx.surface, eglglessink->eglglesctx.surface,
+ eglglessink->eglglesctx.eglcontext)) {
+ show_egl_error ("eglMakeCurrent");
+ GST_ERROR_OBJECT (eglglessink, "Couldn't bind context");
+ return FALSE;
+ }
+ } else {
+ GST_DEBUG_OBJECT (eglglessink, "Detaching context from thread %p",
+ g_thread_self ());
+ if (!eglMakeCurrent (eglglessink->eglglesctx.display, EGL_NO_SURFACE,
+ EGL_NO_SURFACE, EGL_NO_CONTEXT)) {
+ show_egl_error ("eglMakeCurrent");
+ GST_ERROR_OBJECT (eglglessink, "Couldn't unbind context");
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+static gboolean
+gst_eglglessink_init_egl_surface (GstEglGlesSink * eglglessink)
+{
+ GLint test;
+ GLboolean ret;
+ GLchar *info_log;
+ EGLint display_par;
+ const gchar *texnames[3] = { NULL, };
+ gchar *tmp_prog = NULL;
+ EGLint swap_behavior;
+
+ GST_DEBUG_OBJECT (eglglessink, "Enter EGL surface setup");
+
+ eglglessink->eglglesctx.surface =
+ eglCreateWindowSurface (eglglessink->eglglesctx.display,
+ eglglessink->eglglesctx.config, eglglessink->eglglesctx.used_window,
+ NULL);
+
+ if (eglglessink->eglglesctx.surface == EGL_NO_SURFACE) {
+ show_egl_error ("eglCreateWindowSurface");
+ GST_ERROR_OBJECT (eglglessink, "Can't create surface");
+ goto HANDLE_EGL_ERROR_LOCKED;
+ }
+
+ eglglessink->eglglesctx.buffer_preserved = FALSE;
+ if (eglQuerySurface (eglglessink->eglglesctx.display,
+ eglglessink->eglglesctx.surface, EGL_SWAP_BEHAVIOR, &swap_behavior)) {
+ GST_DEBUG_OBJECT (eglglessink, "Buffer swap behavior %x", swap_behavior);
+ eglglessink->eglglesctx.buffer_preserved =
+ swap_behavior == EGL_BUFFER_PRESERVED;
+ } else {
+ GST_DEBUG_OBJECT (eglglessink, "Can't query buffer swap behavior");
+ }
+
+ if (!gst_eglglessink_context_make_current (eglglessink, TRUE))
+ goto HANDLE_EGL_ERROR_LOCKED;
+
+ /* Save display's pixel aspect ratio
+ *
+ * DAR is reported as w/h * EGL_DISPLAY_SCALING wich is
+ * a constant with value 10000. This attribute is only
+ * supported if the EGL version is >= 1.2
+ * XXX: Setup this as a property.
+ * or some other one time check. Right now it's being called once
+ * per frame.
+ */
+ if (eglglessink->eglglesctx.egl_major == 1 &&
+ eglglessink->eglglesctx.egl_minor < 2) {
+ GST_DEBUG_OBJECT (eglglessink, "Can't query PAR. Using default: %dx%d",
+ EGL_DISPLAY_SCALING, EGL_DISPLAY_SCALING);
+ eglglessink->eglglesctx.pixel_aspect_ratio = EGL_DISPLAY_SCALING;
+ } else {
+ eglQuerySurface (eglglessink->eglglesctx.display,
+ eglglessink->eglglesctx.surface, EGL_PIXEL_ASPECT_RATIO, &display_par);
+ /* Fix for outbound DAR reporting on some implementations not
+ * honoring the 'should return w/h * EGL_DISPLAY_SCALING' spec
+ * requirement
+ */
+ if (display_par == EGL_UNKNOWN || display_par < EGL_SANE_DAR_MIN ||
+ display_par > EGL_SANE_DAR_MAX) {
+ GST_DEBUG_OBJECT (eglglessink, "Nonsensical PAR value returned: %d. "
+ "Bad EGL implementation? "
+ "Will use default: %d/%d", eglglessink->eglglesctx.pixel_aspect_ratio,
+ EGL_DISPLAY_SCALING, EGL_DISPLAY_SCALING);
+ eglglessink->eglglesctx.pixel_aspect_ratio = EGL_DISPLAY_SCALING;
+ } else {
+ eglglessink->eglglesctx.pixel_aspect_ratio = display_par;
+ }
+ }
+
+ /* Save surface dims */
+ gst_eglglessink_update_surface_dimensions (eglglessink);
+
+ /* We have a surface! */
+ eglglessink->have_surface = TRUE;
+
+ /* Init vertex and fragment GLSL shaders.
+ * Note: Shader compiler support is optional but we currently rely on it.
+ */
+
+ glGetBooleanv (GL_SHADER_COMPILER, &ret);
+ if (ret == GL_FALSE) {
+ GST_ERROR_OBJECT (eglglessink, "Shader compiler support is unavailable!");
+ goto HANDLE_ERROR;
+ }
+
+ /* Build shader program for video texture rendering */
+ eglglessink->eglglesctx.vertshader[0] = glCreateShader (GL_VERTEX_SHADER);
+ GST_DEBUG_OBJECT (eglglessink, "Sending %s to handle %d", vert_COPY_prog,
+ eglglessink->eglglesctx.vertshader[0]);
+ glShaderSource (eglglessink->eglglesctx.vertshader[0], 1, &vert_COPY_prog,
+ NULL);
+ if (got_gl_error ("glShaderSource vertex"))
+ goto HANDLE_ERROR;
+
+ glCompileShader (eglglessink->eglglesctx.vertshader[0]);
+ if (got_gl_error ("glCompileShader vertex"))
+ goto HANDLE_ERROR;
+
+ glGetShaderiv (eglglessink->eglglesctx.vertshader[0], GL_COMPILE_STATUS,
+ &test);
+ if (test != GL_FALSE)
+ GST_DEBUG_OBJECT (eglglessink, "Successfully compiled vertex shader");
+ else {
+ GST_ERROR_OBJECT (eglglessink, "Couldn't compile vertex shader");
+ glGetShaderiv (eglglessink->eglglesctx.vertshader[0], GL_INFO_LOG_LENGTH,
+ &test);
+ info_log = g_new0 (GLchar, test);
+ glGetShaderInfoLog (eglglessink->eglglesctx.vertshader[0], test, NULL,
+ info_log);
+ GST_INFO_OBJECT (eglglessink, "Compilation info log:\n%s", info_log);
+ g_free (info_log);
+ goto HANDLE_ERROR;
+ }
+
+ eglglessink->eglglesctx.fragshader[0] = glCreateShader (GL_FRAGMENT_SHADER);
+ switch (eglglessink->format) {
+ case GST_VIDEO_FORMAT_AYUV:
+ glShaderSource (eglglessink->eglglesctx.fragshader[0], 1, &frag_AYUV_prog,
+ NULL);
+ eglglessink->eglglesctx.n_textures = 1;
+ texnames[0] = "tex";
+ break;
+ case GST_VIDEO_FORMAT_Y444:
+ case GST_VIDEO_FORMAT_I420:
+ case GST_VIDEO_FORMAT_YV12:
+ case GST_VIDEO_FORMAT_Y42B:
+ case GST_VIDEO_FORMAT_Y41B:
+ glShaderSource (eglglessink->eglglesctx.fragshader[0], 1,
+ &frag_PLANAR_YUV_prog, NULL);
+ eglglessink->eglglesctx.n_textures = 3;
+ texnames[0] = "Ytex";
+ texnames[1] = "Utex";
+ texnames[2] = "Vtex";
+ break;
+ case GST_VIDEO_FORMAT_YUY2:
+ tmp_prog = g_strdup_printf (frag_YUY2_YVYU_UYVY_prog, 'r', 'g', 'a');
+ glShaderSource (eglglessink->eglglesctx.fragshader[0], 1,
+ (const GLchar **) &tmp_prog, NULL);
+ eglglessink->eglglesctx.n_textures = 2;
+ texnames[0] = "Ytex";
+ texnames[1] = "UVtex";
+ break;
+ case GST_VIDEO_FORMAT_YVYU:
+ tmp_prog = g_strdup_printf (frag_YUY2_YVYU_UYVY_prog, 'r', 'a', 'g');
+ glShaderSource (eglglessink->eglglesctx.fragshader[0], 1,
+ (const GLchar **) &tmp_prog, NULL);
+ eglglessink->eglglesctx.n_textures = 2;
+ texnames[0] = "Ytex";
+ texnames[1] = "UVtex";
+ break;
+ case GST_VIDEO_FORMAT_UYVY:
+ tmp_prog = g_strdup_printf (frag_YUY2_YVYU_UYVY_prog, 'a', 'r', 'b');
+ glShaderSource (eglglessink->eglglesctx.fragshader[0], 1,
+ (const GLchar **) &tmp_prog, NULL);
+ eglglessink->eglglesctx.n_textures = 2;
+ texnames[0] = "Ytex";
+ texnames[1] = "UVtex";
+ break;
+ case GST_VIDEO_FORMAT_NV12:
+ tmp_prog = g_strdup_printf (frag_NV12_NV21_prog, 'r', 'a');
+ glShaderSource (eglglessink->eglglesctx.fragshader[0], 1,
+ (const GLchar **) &tmp_prog, NULL);
+ eglglessink->eglglesctx.n_textures = 2;
+ texnames[0] = "Ytex";
+ texnames[1] = "UVtex";
+ break;
+ case GST_VIDEO_FORMAT_NV21:
+ tmp_prog = g_strdup_printf (frag_NV12_NV21_prog, 'a', 'r');
+ glShaderSource (eglglessink->eglglesctx.fragshader[0], 1,
+ (const GLchar **) &tmp_prog, NULL);
+ eglglessink->eglglesctx.n_textures = 2;
+ texnames[0] = "Ytex";
+ texnames[1] = "UVtex";
+ break;
+ case GST_VIDEO_FORMAT_BGR:
+ case GST_VIDEO_FORMAT_BGRx:
+ case GST_VIDEO_FORMAT_BGRA:
+ tmp_prog = g_strdup_printf (frag_REORDER_prog, 'b', 'g', 'r');
+ glShaderSource (eglglessink->eglglesctx.fragshader[0], 1,
+ (const GLchar **) &tmp_prog, NULL);
+ eglglessink->eglglesctx.n_textures = 1;
+ texnames[0] = "tex";
+ break;
+ case GST_VIDEO_FORMAT_xRGB:
+ case GST_VIDEO_FORMAT_ARGB:
+ tmp_prog = g_strdup_printf (frag_REORDER_prog, 'g', 'b', 'a');
+ glShaderSource (eglglessink->eglglesctx.fragshader[0], 1,
+ (const GLchar **) &tmp_prog, NULL);
+ eglglessink->eglglesctx.n_textures = 1;
+ texnames[0] = "tex";
+ break;
+ case GST_VIDEO_FORMAT_xBGR:
+ case GST_VIDEO_FORMAT_ABGR:
+ tmp_prog = g_strdup_printf (frag_REORDER_prog, 'a', 'b', 'g');
+ glShaderSource (eglglessink->eglglesctx.fragshader[0], 1,
+ (const GLchar **) &tmp_prog, NULL);
+ eglglessink->eglglesctx.n_textures = 1;
+ texnames[0] = "tex";
+ break;
+ case GST_VIDEO_FORMAT_RGB:
+ case GST_VIDEO_FORMAT_RGBx:
+ case GST_VIDEO_FORMAT_RGBA:
+ case GST_VIDEO_FORMAT_RGB16:
+ glShaderSource (eglglessink->eglglesctx.fragshader[0], 1, &frag_COPY_prog,
+ NULL);
+ eglglessink->eglglesctx.n_textures = 1;
+ texnames[0] = "tex";
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+
+ if (got_gl_error ("glShaderSource fragment"))
+ goto HANDLE_ERROR;
+
+ glCompileShader (eglglessink->eglglesctx.fragshader[0]);
+ if (got_gl_error ("glCompileShader fragment"))
+ goto HANDLE_ERROR;
+
+ glGetShaderiv (eglglessink->eglglesctx.fragshader[0], GL_COMPILE_STATUS,
+ &test);
+ if (test != GL_FALSE)
+ GST_DEBUG_OBJECT (eglglessink, "Successfully compiled fragment shader");
+ else {
+ GST_ERROR_OBJECT (eglglessink, "Couldn't compile fragment shader");
+ glGetShaderiv (eglglessink->eglglesctx.fragshader[0], GL_INFO_LOG_LENGTH,
+ &test);
+ info_log = g_new0 (GLchar, test);
+ glGetShaderInfoLog (eglglessink->eglglesctx.fragshader[0], test, NULL,
+ info_log);
+ GST_INFO_OBJECT (eglglessink, "Compilation info log:\n%s", info_log);
+ g_free (info_log);
+ goto HANDLE_ERROR;
+ }
+
+ eglglessink->eglglesctx.glslprogram[0] = glCreateProgram ();
+ if (got_gl_error ("glCreateProgram"))
+ goto HANDLE_ERROR;
+ glAttachShader (eglglessink->eglglesctx.glslprogram[0],
+ eglglessink->eglglesctx.vertshader[0]);
+ if (got_gl_error ("glAttachShader vertices"))
+ goto HANDLE_ERROR;
+ glAttachShader (eglglessink->eglglesctx.glslprogram[0],
+ eglglessink->eglglesctx.fragshader[0]);
+ if (got_gl_error ("glAttachShader fragments"))
+ goto HANDLE_ERROR;
+ glLinkProgram (eglglessink->eglglesctx.glslprogram[0]);
+ glGetProgramiv (eglglessink->eglglesctx.glslprogram[0], GL_LINK_STATUS,
+ &test);
+ if (test != GL_FALSE)
+ GST_DEBUG_OBJECT (eglglessink, "GLES: Successfully linked program");
+ else {
+ GST_ERROR_OBJECT (eglglessink, "Couldn't link program");
+ goto HANDLE_ERROR;
+ }
+
+ eglglessink->eglglesctx.position_loc[0] =
+ glGetAttribLocation (eglglessink->eglglesctx.glslprogram[0], "position");
+ eglglessink->eglglesctx.texpos_loc =
+ glGetAttribLocation (eglglessink->eglglesctx.glslprogram[0], "texpos");
+
+ glEnableVertexAttribArray (eglglessink->eglglesctx.position_loc[0]);
+ if (got_gl_error ("glEnableVertexAttribArray"))
+ goto HANDLE_ERROR;
+
+ glEnableVertexAttribArray (eglglessink->eglglesctx.texpos_loc);
+ if (got_gl_error ("glEnableVertexAttribArray"))
+ goto HANDLE_ERROR;
+
+ if (!eglglessink->eglglesctx.buffer_preserved) {
+ /* Build shader program for black borders */
+ eglglessink->eglglesctx.vertshader[1] = glCreateShader (GL_VERTEX_SHADER);
+ GST_DEBUG_OBJECT (eglglessink, "Sending %s to handle %d",
+ vert_COPY_prog_no_tex, eglglessink->eglglesctx.vertshader[1]);
+ glShaderSource (eglglessink->eglglesctx.vertshader[1], 1,
+ &vert_COPY_prog_no_tex, NULL);
+ if (got_gl_error ("glShaderSource vertex"))
+ goto HANDLE_ERROR;
+
+ glCompileShader (eglglessink->eglglesctx.vertshader[1]);
+ if (got_gl_error ("glCompileShader vertex"))
+ goto HANDLE_ERROR;
+
+ glGetShaderiv (eglglessink->eglglesctx.vertshader[1], GL_COMPILE_STATUS,
+ &test);
+ if (test != GL_FALSE)
+ GST_DEBUG_OBJECT (eglglessink, "Successfully compiled vertex shader");
+ else {
+ GST_ERROR_OBJECT (eglglessink, "Couldn't compile vertex shader");
+ glGetShaderiv (eglglessink->eglglesctx.vertshader[1], GL_INFO_LOG_LENGTH,
+ &test);
+ info_log = g_new0 (GLchar, test);
+ glGetShaderInfoLog (eglglessink->eglglesctx.vertshader[1], test, NULL,
+ info_log);
+ GST_INFO_OBJECT (eglglessink, "Compilation info log:\n%s", info_log);
+ g_free (info_log);
+ goto HANDLE_ERROR;
+ }
+
+ eglglessink->eglglesctx.fragshader[1] = glCreateShader (GL_FRAGMENT_SHADER);
+ glShaderSource (eglglessink->eglglesctx.fragshader[1], 1, &frag_BLACK_prog,
+ NULL);
+
+ if (got_gl_error ("glShaderSource fragment"))
+ goto HANDLE_ERROR;
+
+ glCompileShader (eglglessink->eglglesctx.fragshader[1]);
+ if (got_gl_error ("glCompileShader fragment"))
+ goto HANDLE_ERROR;
+
+ glGetShaderiv (eglglessink->eglglesctx.fragshader[1], GL_COMPILE_STATUS,
+ &test);
+ if (test != GL_FALSE)
+ GST_DEBUG_OBJECT (eglglessink, "Successfully compiled fragment shader");
+ else {
+ GST_ERROR_OBJECT (eglglessink, "Couldn't compile fragment shader");
+ glGetShaderiv (eglglessink->eglglesctx.fragshader[1], GL_INFO_LOG_LENGTH,
+ &test);
+ info_log = g_new0 (GLchar, test);
+ glGetShaderInfoLog (eglglessink->eglglesctx.fragshader[1], test, NULL,
+ info_log);
+ GST_INFO_OBJECT (eglglessink, "Compilation info log:\n%s", info_log);
+ g_free (info_log);
+ goto HANDLE_ERROR;
+ }
+
+ eglglessink->eglglesctx.glslprogram[1] = glCreateProgram ();
+ if (got_gl_error ("glCreateProgram"))
+ goto HANDLE_ERROR;
+ glAttachShader (eglglessink->eglglesctx.glslprogram[1],
+ eglglessink->eglglesctx.vertshader[1]);
+ if (got_gl_error ("glAttachShader vertices"))
+ goto HANDLE_ERROR;
+ glAttachShader (eglglessink->eglglesctx.glslprogram[1],
+ eglglessink->eglglesctx.fragshader[1]);
+ if (got_gl_error ("glAttachShader fragments"))
+ goto HANDLE_ERROR;
+ glLinkProgram (eglglessink->eglglesctx.glslprogram[1]);
+ glGetProgramiv (eglglessink->eglglesctx.glslprogram[1], GL_LINK_STATUS,
+ &test);
+ if (test != GL_FALSE)
+ GST_DEBUG_OBJECT (eglglessink, "GLES: Successfully linked program");
+ else {
+ GST_ERROR_OBJECT (eglglessink, "Couldn't link program");
+ goto HANDLE_ERROR;
+ }
+
+ eglglessink->eglglesctx.position_loc[1] =
+ glGetAttribLocation (eglglessink->eglglesctx.glslprogram[1],
+ "position");
+
+ glEnableVertexAttribArray (eglglessink->eglglesctx.position_loc[1]);
+ if (got_gl_error ("glEnableVertexAttribArray"))
+ goto HANDLE_ERROR;
+ }
+
+ glUseProgram (eglglessink->eglglesctx.glslprogram[0]);
+
+ /* Generate and bind texture */
+ if (!eglglessink->have_texture) {
+ gint i;
+
+ GST_INFO_OBJECT (eglglessink, "Performing initial texture setup");
+
+ for (i = 0; i < eglglessink->eglglesctx.n_textures; i++) {
+ if (i == 0)
+ glActiveTexture (GL_TEXTURE0);
+ else if (i == 1)
+ glActiveTexture (GL_TEXTURE1);
+ else if (i == 2)
+ glActiveTexture (GL_TEXTURE2);
+
+ glGenTextures (1, &eglglessink->eglglesctx.texture[i]);
+ if (got_gl_error ("glGenTextures"))
+ goto HANDLE_ERROR_LOCKED;
+
+ glBindTexture (GL_TEXTURE_2D, eglglessink->eglglesctx.texture[i]);
+ if (got_gl_error ("glBindTexture"))
+ goto HANDLE_ERROR_LOCKED;
+
+ eglglessink->eglglesctx.tex_loc[i] =
+ glGetUniformLocation (eglglessink->eglglesctx.glslprogram[0],
+ texnames[i]);
+ glUniform1i (eglglessink->eglglesctx.tex_loc[i], i);
+
+ /* Set 2D resizing params */
+ glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ /* If these are not set the texture image unit will return
+ * (R, G, B, A) = black on glTexImage2D for non-POT width/height
+ * frames. For a deeper explanation take a look at the OpenGL ES
+ * documentation for glTexParameter */
+ glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ if (got_gl_error ("glTexParameteri"))
+ goto HANDLE_ERROR_LOCKED;
+ }
+
+ eglglessink->have_texture = TRUE;
+ }
+ glUseProgram (0);
+
+ g_free (tmp_prog);
+
+ return TRUE;
+
+ /* Errors */
+HANDLE_EGL_ERROR_LOCKED:
+ GST_ERROR_OBJECT (eglglessink, "EGL call returned error %x", eglGetError ());
+HANDLE_ERROR_LOCKED:
+HANDLE_ERROR:
+ GST_ERROR_OBJECT (eglglessink, "Couldn't setup EGL surface");
+ g_free (tmp_prog);
+ return FALSE;
+}
+
+static gboolean
+gst_eglglessink_init_egl_display (GstEglGlesSink * eglglessink)
+{
+ GST_DEBUG_OBJECT (eglglessink, "Enter EGL initial configuration");
+
+ eglglessink->eglglesctx.display = eglGetDisplay (EGL_DEFAULT_DISPLAY);
+ if (eglglessink->eglglesctx.display == EGL_NO_DISPLAY) {
+ GST_ERROR_OBJECT (eglglessink, "Could not get EGL display connection");
+ goto HANDLE_ERROR; /* No EGL error is set by eglGetDisplay() */
+ }
+
+ if (!eglInitialize (eglglessink->eglglesctx.display,
+ &eglglessink->eglglesctx.egl_major,
+ &eglglessink->eglglesctx.egl_minor)) {
+ show_egl_error ("eglInitialize");
+ GST_ERROR_OBJECT (eglglessink, "Could not init EGL display connection");
+ goto HANDLE_EGL_ERROR;
+ }
+
+ /* Check against required EGL version
+ * XXX: Need to review the version requirement in terms of the needed API
+ */
+ if (eglglessink->eglglesctx.egl_major < GST_EGLGLESSINK_EGL_MIN_VERSION) {
+ GST_ERROR_OBJECT (eglglessink, "EGL v%d needed, but you only have v%d.%d",
+ GST_EGLGLESSINK_EGL_MIN_VERSION, eglglessink->eglglesctx.egl_major,
+ eglglessink->eglglesctx.egl_minor);
+ goto HANDLE_ERROR;
+ }
+
+ GST_INFO_OBJECT (eglglessink, "System reports supported EGL version v%d.%d",
+ eglglessink->eglglesctx.egl_major, eglglessink->eglglesctx.egl_minor);
+
+ eglBindAPI (EGL_OPENGL_ES_API);
+
+ return TRUE;
+
+ /* Errors */
+HANDLE_EGL_ERROR:
+ GST_ERROR_OBJECT (eglglessink, "EGL call returned error %x", eglGetError ());
+HANDLE_ERROR:
+ GST_ERROR_OBJECT (eglglessink, "Couldn't setup window/surface from handle");
+ return FALSE;
+}
+
+static gboolean
+gst_eglglessink_choose_config (GstEglGlesSink * eglglessink)
+{
+ EGLint con_attribs[] = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE };
+ GLint egl_configs;
+
+ if ((eglChooseConfig (eglglessink->eglglesctx.display,
+ eglglessink->selected_fmt->attribs,
+ &eglglessink->eglglesctx.config, 1, &egl_configs)) == EGL_FALSE) {
+ show_egl_error ("eglChooseConfig");
+ GST_ERROR_OBJECT (eglglessink, "eglChooseConfig failed");
+ goto HANDLE_EGL_ERROR;
+ }
+
+ if (egl_configs < 1) {
+ GST_ERROR_OBJECT (eglglessink,
+ "Could not find matching framebuffer config");
+ goto HANDLE_ERROR;
+ }
+
+ eglglessink->eglglesctx.eglcontext =
+ eglCreateContext (eglglessink->eglglesctx.display,
+ eglglessink->eglglesctx.config, EGL_NO_CONTEXT, con_attribs);
+
+ if (eglglessink->eglglesctx.eglcontext == EGL_NO_CONTEXT) {
+ GST_ERROR_OBJECT (eglglessink, "Error getting context, eglCreateContext");
+ goto HANDLE_EGL_ERROR;
+ }
+
+ GST_DEBUG_OBJECT (eglglessink, "EGL Context: %p",
+ eglglessink->eglglesctx.eglcontext);
+
+ return TRUE;
+
+ /* Errors */
+HANDLE_EGL_ERROR:
+ GST_ERROR_OBJECT (eglglessink, "EGL call returned error %x", eglGetError ());
+HANDLE_ERROR:
+ GST_ERROR_OBJECT (eglglessink, "Couldn't choose an usable config");
+ return FALSE;
+}
+
+static void
+gst_eglglessink_set_window_handle (GstXOverlay * overlay, guintptr id)
+{
+ GstEglGlesSink *eglglessink = GST_EGLGLESSINK (overlay);
+
+ g_return_if_fail (GST_IS_EGLGLESSINK (eglglessink));
+ GST_DEBUG_OBJECT (eglglessink, "We got a window handle: %p", (gpointer) id);
+
+ /* OK, we have a new window */
+ GST_OBJECT_LOCK (eglglessink);
+ eglglessink->eglglesctx.window = (EGLNativeWindowType) id;
+ eglglessink->have_window = ((gpointer) id != NULL);
+ GST_OBJECT_UNLOCK (eglglessink);
+
+ return;
+}
+
+static void
+gst_eglglessink_set_render_rectangle (GstXOverlay * overlay, gint x, gint y,
+ gint width, gint height)
+{
+ GstEglGlesSink *eglglessink = GST_EGLGLESSINK (overlay);
+
+ g_return_if_fail (GST_IS_EGLGLESSINK (eglglessink));
+
+ GST_OBJECT_LOCK (eglglessink);
+ if (width == -1 && height == -1) {
+ /* This is the set-defaults condition according to
+ * the xOverlay interface docs
+ */
+ gst_eglglessink_reset_display_region (eglglessink);
+ } else {
+ GST_OBJECT_LOCK (eglglessink);
+ eglglessink->display_region.x = x;
+ eglglessink->display_region.y = y;
+ eglglessink->display_region.w = width;
+ eglglessink->display_region.h = height;
+ GST_OBJECT_UNLOCK (eglglessink);
+ }
+
+ return;
+}
+
+static void
+queue_item_destroy (GstDataQueueItem * item)
+{
+ gst_mini_object_replace (&item->object, NULL);
+ g_slice_free (GstDataQueueItem, item);
+}
+
+static GstFlowReturn
+gst_eglglessink_queue_buffer (GstEglGlesSink * eglglessink, GstBuffer * buf)
+{
+ GstDataQueueItem *item = g_slice_new0 (GstDataQueueItem);
+
+ item->object = GST_MINI_OBJECT_CAST (buf);
+ item->size = (buf ? GST_BUFFER_SIZE (buf) : 0);
+ item->duration = (buf ? GST_BUFFER_DURATION (buf) : GST_CLOCK_TIME_NONE);
+ item->visible = (buf ? TRUE : FALSE);
+ item->destroy = (GDestroyNotify) queue_item_destroy;
+
+ GST_DEBUG_OBJECT (eglglessink, "Queueing buffer %" GST_PTR_FORMAT, buf);
+
+ if (buf)
+ g_mutex_lock (eglglessink->render_lock);
+ if (!gst_data_queue_push (eglglessink->queue, item)) {
+ g_mutex_unlock (eglglessink->render_lock);
+ GST_DEBUG_OBJECT (eglglessink, "Flushing");
+ return GST_FLOW_WRONG_STATE;
+ }
+
+ if (buf) {
+ GST_DEBUG_OBJECT (eglglessink, "Waiting for buffer to be rendered");
+ g_cond_wait (eglglessink->render_cond, eglglessink->render_lock);
+ GST_DEBUG_OBJECT (eglglessink, "Buffer rendered: %s",
+ gst_flow_get_name (eglglessink->last_flow));
+ g_mutex_unlock (eglglessink->render_lock);
+ }
+
+ return (buf ? eglglessink->last_flow : GST_FLOW_OK);
+}
+
+/* Rendering and display */
+static GstFlowReturn
+gst_eglglessink_render_and_display (GstEglGlesSink * eglglessink,
+ GstBuffer * buf)
+{
+ GstVideoRectangle frame, surface;
+ gint w, h;
+ guint dar_n, dar_d;
+
+ w = GST_VIDEO_SINK_WIDTH (eglglessink);
+ h = GST_VIDEO_SINK_HEIGHT (eglglessink);
+
+ GST_DEBUG_OBJECT (eglglessink,
+ "Got good buffer %p. Sink geometry is %dx%d size %d", buf, w, h,
+ buf ? GST_BUFFER_SIZE (buf) : -1);
+
+ if (buf) {
+ switch (eglglessink->selected_fmt->fmt) {
+ case GST_EGLGLESSINK_IMAGE_RGB888:
+ glActiveTexture (GL_TEXTURE0);
+ glBindTexture (GL_TEXTURE_2D, eglglessink->eglglesctx.texture[0]);
+ glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_RGB,
+ GL_UNSIGNED_BYTE, GST_BUFFER_DATA (buf));
+ break;
+ case GST_EGLGLESSINK_IMAGE_RGB565:
+ glActiveTexture (GL_TEXTURE0);
+ glBindTexture (GL_TEXTURE_2D, eglglessink->eglglesctx.texture[0]);
+ glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_RGB,
+ GL_UNSIGNED_SHORT_5_6_5, GST_BUFFER_DATA (buf));
+ break;
+ case GST_EGLGLESSINK_IMAGE_RGBA8888:
+
+ switch (eglglessink->format) {
+ case GST_VIDEO_FORMAT_RGBA:
+ case GST_VIDEO_FORMAT_BGRA:
+ case GST_VIDEO_FORMAT_ARGB:
+ case GST_VIDEO_FORMAT_ABGR:
+ case GST_VIDEO_FORMAT_RGBx:
+ case GST_VIDEO_FORMAT_BGRx:
+ case GST_VIDEO_FORMAT_xRGB:
+ case GST_VIDEO_FORMAT_xBGR:
+ glActiveTexture (GL_TEXTURE0);
+ glBindTexture (GL_TEXTURE_2D, eglglessink->eglglesctx.texture[0]);
+ glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA,
+ GL_UNSIGNED_BYTE, GST_BUFFER_DATA (buf));
+ break;
+ case GST_VIDEO_FORMAT_AYUV:
+ glActiveTexture (GL_TEXTURE0);
+ glBindTexture (GL_TEXTURE_2D, eglglessink->eglglesctx.texture[0]);
+ glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA,
+ GL_UNSIGNED_BYTE, GST_BUFFER_DATA (buf));
+ break;
+ case GST_VIDEO_FORMAT_Y444:
+ case GST_VIDEO_FORMAT_I420:
+ case GST_VIDEO_FORMAT_YV12:
+ case GST_VIDEO_FORMAT_Y42B:
+ case GST_VIDEO_FORMAT_Y41B:{
+ gint coffset, cw, ch;
+
+ coffset =
+ gst_video_format_get_component_offset (eglglessink->format,
+ 0, w, h);
+ cw = gst_video_format_get_component_width (eglglessink->format,
+ 0, w);
+ ch = gst_video_format_get_component_height (eglglessink->format,
+ 0, h);
+ glActiveTexture (GL_TEXTURE0);
+ glBindTexture (GL_TEXTURE_2D, eglglessink->eglglesctx.texture[0]);
+ glTexImage2D (GL_TEXTURE_2D, 0, GL_LUMINANCE, cw, ch, 0,
+ GL_LUMINANCE, GL_UNSIGNED_BYTE,
+ GST_BUFFER_DATA (buf) + coffset);
+ coffset =
+ gst_video_format_get_component_offset (eglglessink->format,
+ 1, w, h);
+ cw = gst_video_format_get_component_width (eglglessink->format,
+ 1, w);
+ ch = gst_video_format_get_component_height (eglglessink->format,
+ 1, h);
+ glActiveTexture (GL_TEXTURE1);
+ glBindTexture (GL_TEXTURE_2D, eglglessink->eglglesctx.texture[1]);
+ glTexImage2D (GL_TEXTURE_2D, 0, GL_LUMINANCE, cw, ch, 0,
+ GL_LUMINANCE, GL_UNSIGNED_BYTE,
+ GST_BUFFER_DATA (buf) + coffset);
+ coffset =
+ gst_video_format_get_component_offset (eglglessink->format,
+ 2, w, h);
+ cw = gst_video_format_get_component_width (eglglessink->format,
+ 2, w);
+ ch = gst_video_format_get_component_height (eglglessink->format,
+ 2, h);
+ glActiveTexture (GL_TEXTURE2);
+ glBindTexture (GL_TEXTURE_2D, eglglessink->eglglesctx.texture[2]);
+ glTexImage2D (GL_TEXTURE_2D, 0, GL_LUMINANCE, cw, ch, 0,
+ GL_LUMINANCE, GL_UNSIGNED_BYTE,
+ GST_BUFFER_DATA (buf) + coffset);
+ break;
+ }
+ case GST_VIDEO_FORMAT_YUY2:
+ case GST_VIDEO_FORMAT_YVYU:
+ case GST_VIDEO_FORMAT_UYVY:
+ glActiveTexture (GL_TEXTURE0);
+ glBindTexture (GL_TEXTURE_2D, eglglessink->eglglesctx.texture[0]);
+ glTexImage2D (GL_TEXTURE_2D, 0, GL_LUMINANCE_ALPHA, w, h, 0,
+ GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, GST_BUFFER_DATA (buf));
+ glActiveTexture (GL_TEXTURE1);
+ glBindTexture (GL_TEXTURE_2D, eglglessink->eglglesctx.texture[1]);
+ glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, GST_ROUND_UP_2 (w) / 2,
+ h, 0, GL_RGBA, GL_UNSIGNED_BYTE, GST_BUFFER_DATA (buf));
+ break;
+ case GST_VIDEO_FORMAT_NV12:
+ case GST_VIDEO_FORMAT_NV21:{
+ gint coffset, cw, ch;
+
+ coffset =
+ gst_video_format_get_component_offset (eglglessink->format,
+ 0, w, h);
+ cw = gst_video_format_get_component_width (eglglessink->format,
+ 0, w);
+ ch = gst_video_format_get_component_height (eglglessink->format,
+ 0, h);
+ glActiveTexture (GL_TEXTURE0);
+ glBindTexture (GL_TEXTURE_2D, eglglessink->eglglesctx.texture[0]);
+ glTexImage2D (GL_TEXTURE_2D, 0, GL_LUMINANCE, cw, ch, 0,
+ GL_LUMINANCE, GL_UNSIGNED_BYTE,
+ GST_BUFFER_DATA (buf) + coffset);
+
+ coffset =
+ gst_video_format_get_component_offset (eglglessink->format,
+ (eglglessink->format == GST_VIDEO_FORMAT_NV12 ? 1 : 2), w, h);
+ cw = gst_video_format_get_component_width (eglglessink->format, 1,
+ w);
+ ch = gst_video_format_get_component_height (eglglessink->format, 1,
+ h);
+ glActiveTexture (GL_TEXTURE1);
+ glBindTexture (GL_TEXTURE_2D, eglglessink->eglglesctx.texture[1]);
+ glTexImage2D (GL_TEXTURE_2D, 0, GL_LUMINANCE_ALPHA, cw, ch, 0,
+ GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE,
+ GST_BUFFER_DATA (buf) + coffset);
+ break;
+ }
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+ }
+
+ if (got_gl_error ("glTexImage2D"))
+ goto HANDLE_ERROR;
+ }
+
+ /* If no one has set a display rectangle on us initialize
+ * a sane default. According to the docs on the xOverlay
+ * interface we are supposed to fill the overlay 100%. We
+ * do this trying to take PAR/DAR into account unless the
+ * calling party explicitly ask us not to by setting
+ * force_aspect_ratio to FALSE.
+ */
+ if (gst_eglglessink_update_surface_dimensions (eglglessink) ||
+ !eglglessink->display_region.w || !eglglessink->display_region.h) {
+ GST_OBJECT_LOCK (eglglessink);
+ if (!eglglessink->force_aspect_ratio) {
+ eglglessink->display_region.x = 0;
+ eglglessink->display_region.y = 0;
+ eglglessink->display_region.w = eglglessink->eglglesctx.surface_width;
+ eglglessink->display_region.h = eglglessink->eglglesctx.surface_height;
+ } else {
+ if (!gst_video_calculate_display_ratio (&dar_n, &dar_d, w, h,
+ eglglessink->par_n, eglglessink->par_d,
+ eglglessink->eglglesctx.pixel_aspect_ratio,
+ EGL_DISPLAY_SCALING)) {
+ GST_WARNING_OBJECT (eglglessink, "Could not compute resulting DAR");
+ frame.w = w;
+ frame.h = h;
+ } else {
+ /* Find suitable matching new size acording to dar & par
+ * rationale for prefering leaving the height untouched
+ * comes from interlacing considerations.
+ * XXX: Move this to gstutils?
+ */
+ if (h % dar_d == 0) {
+ frame.w = gst_util_uint64_scale_int (h, dar_n, dar_d);
+ frame.h = h;
+ } else if (w % dar_n == 0) {
+ frame.h = gst_util_uint64_scale_int (w, dar_d, dar_n);
+ frame.w = w;
+ } else {
+ /* Neither width nor height can be precisely scaled.
+ * Prefer to leave height untouched. See comment above.
+ */
+ frame.w = gst_util_uint64_scale_int (h, dar_n, dar_d);
+ frame.h = h;
+ }
+ }
+
+ surface.w = eglglessink->eglglesctx.surface_width;
+ surface.h = eglglessink->eglglesctx.surface_height;
+ gst_video_sink_center_rect (frame, surface,
+ &eglglessink->display_region, TRUE);
+ }
+ GST_OBJECT_UNLOCK (eglglessink);
+
+ glViewport (0, 0,
+ eglglessink->eglglesctx.surface_width,
+ eglglessink->eglglesctx.surface_height);
+
+ /* Clear the surface once if its content is preserved */
+ if (eglglessink->eglglesctx.buffer_preserved) {
+ glClearColor (0.0, 0.0, 0.0, 1.0);
+ glClear (GL_COLOR_BUFFER_BIT);
+ }
+
+ if (!gst_eglglessink_setup_vbo (eglglessink, FALSE)) {
+ GST_ERROR_OBJECT (eglglessink, "VBO setup failed");
+ goto HANDLE_ERROR;
+ }
+ }
+
+ if (!eglglessink->eglglesctx.buffer_preserved) {
+ /* Draw black borders */
+ GST_DEBUG_OBJECT (eglglessink, "Drawing black border 1");
+ glUseProgram (eglglessink->eglglesctx.glslprogram[1]);
+
+ glVertexAttribPointer (eglglessink->eglglesctx.position_loc[1], 3,
+ GL_FLOAT, GL_FALSE, sizeof (coord5), (gpointer) (4 * sizeof (coord5)));
+ if (got_gl_error ("glVertexAttribPointer"))
+ goto HANDLE_ERROR;
+
+ glDrawElements (GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_SHORT, 0);
+ if (got_gl_error ("glDrawElements"))
+ goto HANDLE_ERROR;
+
+ GST_DEBUG_OBJECT (eglglessink, "Drawing black border 2");
+
+ glVertexAttribPointer (eglglessink->eglglesctx.position_loc[1], 3,
+ GL_FLOAT, GL_FALSE, sizeof (coord5), (gpointer) (8 * sizeof (coord5)));
+ if (got_gl_error ("glVertexAttribPointer"))
+ goto HANDLE_ERROR;
+
+ glDrawElements (GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_SHORT, 0);
+ if (got_gl_error ("glDrawElements"))
+ goto HANDLE_ERROR;
+ }
+
+ /* Draw video frame */
+ GST_DEBUG_OBJECT (eglglessink, "Drawing video frame");
+ glUseProgram (eglglessink->eglglesctx.glslprogram[0]);
+
+ glVertexAttribPointer (eglglessink->eglglesctx.position_loc[0], 3,
+ GL_FLOAT, GL_FALSE, sizeof (coord5), (gpointer) (0 * sizeof (coord5)));
+ if (got_gl_error ("glVertexAttribPointer"))
+ goto HANDLE_ERROR;
+
+ glVertexAttribPointer (eglglessink->eglglesctx.texpos_loc, 2, GL_FLOAT,
+ GL_FALSE, sizeof (coord5), (gpointer) (3 * sizeof (gfloat)));
+ if (got_gl_error ("glVertexAttribPointer"))
+ goto HANDLE_ERROR;
+
+ glDrawElements (GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_SHORT, 0);
+ if (got_gl_error ("glDrawElements"))
+ goto HANDLE_ERROR;
+
+ if ((eglSwapBuffers (eglglessink->eglglesctx.display,
+ eglglessink->eglglesctx.surface))
+ == EGL_FALSE) {
+ show_egl_error ("eglSwapBuffers");
+ goto HANDLE_ERROR;
+ }
+
+ GST_DEBUG_OBJECT (eglglessink, "Succesfully rendered 1 frame");
+ return GST_FLOW_OK;
+
+HANDLE_ERROR:
+ GST_ERROR_OBJECT (eglglessink, "Rendering disabled for this frame");
+
+ return GST_FLOW_ERROR;
+}
+
+static GstFlowReturn
+gst_eglglessink_show_frame (GstVideoSink * vsink, GstBuffer * buf)
+{
+ GstEglGlesSink *eglglessink;
+
+ g_return_val_if_fail (buf != NULL, GST_FLOW_ERROR);
+
+ eglglessink = GST_EGLGLESSINK (vsink);
+ GST_DEBUG_OBJECT (eglglessink, "Got buffer: %p", buf);
+
+ buf = gst_buffer_make_metadata_writable (gst_buffer_ref (buf));
+ gst_buffer_set_caps (buf, eglglessink->current_caps);
+ return gst_eglglessink_queue_buffer (eglglessink, buf);
+}
+
+static GstCaps *
+gst_eglglessink_getcaps (GstBaseSink * bsink)
+{
+ GstEglGlesSink *eglglessink;
+ GstCaps *ret = NULL;
+
+ eglglessink = GST_EGLGLESSINK (bsink);
+
+ GST_OBJECT_LOCK (eglglessink);
+ if (eglglessink->sinkcaps) {
+ ret = gst_caps_ref (eglglessink->sinkcaps);
+ } else {
+ ret =
+ gst_caps_copy (gst_pad_get_pad_template_caps (GST_BASE_SINK_PAD
+ (bsink)));
+ }
+ GST_OBJECT_UNLOCK (eglglessink);
+
+ return ret;
+}
+
+static gboolean
+gst_eglglessink_configure_caps (GstEglGlesSink * eglglessink, GstCaps * caps)
+{
+ gboolean ret = TRUE;
+ gint width, height;
+ int par_n, par_d;
+ GstEglGlesImageFmt *format;
+
+ if (!(ret = gst_video_format_parse_caps (caps, &eglglessink->format, &width,
+ &height))) {
+ GST_ERROR_OBJECT (eglglessink, "Got weird and/or incomplete caps");
+ goto HANDLE_ERROR;
+ }
+
+ if (!(ret = gst_video_parse_caps_pixel_aspect_ratio (caps, &par_n, &par_d))) {
+ par_n = 1;
+ par_d = 1;
+ GST_WARNING_OBJECT (eglglessink,
+ "Can't parse PAR from caps. Using default: 1");
+ }
+
+ format = gst_eglglessink_get_compat_format_from_caps (eglglessink, caps);
+ if (!format) {
+ GST_ERROR_OBJECT (eglglessink,
+ "No supported and compatible EGL/GLES format found for given caps");
+ goto HANDLE_ERROR;
+ } else
+ GST_INFO_OBJECT (eglglessink, "Selected compatible EGL/GLES format %d",
+ format->fmt);
+
+ eglglessink->selected_fmt = format;
+ eglglessink->par_n = par_n;
+ eglglessink->par_d = par_d;
+ GST_VIDEO_SINK_WIDTH (eglglessink) = width;
+ GST_VIDEO_SINK_HEIGHT (eglglessink) = height;
+
+ if (eglglessink->configured_caps) {
+ GST_ERROR_OBJECT (eglglessink, "Caps were already set");
+ if (gst_caps_can_intersect (caps, eglglessink->configured_caps)) {
+ GST_INFO_OBJECT (eglglessink, "Caps are compatible anyway");
+ goto SUCCEED;
+ }
+
+ GST_DEBUG_OBJECT (eglglessink, "Caps are not compatible, reconfiguring");
+
+ /* EGL/GLES cleanup */
+ gst_eglglessink_wipe_eglglesctx (eglglessink);
+
+ gst_caps_unref (eglglessink->configured_caps);
+ eglglessink->configured_caps = NULL;
+ }
+
+ if (!gst_eglglessink_choose_config (eglglessink)) {
+ GST_ERROR_OBJECT (eglglessink, "Couldn't choose EGL config");
+ goto HANDLE_ERROR;
+ }
+
+ gst_caps_replace (&eglglessink->configured_caps, caps);
+
+ /* By now the application should have set a window
+ * if it meant to do so
+ */
+ GST_OBJECT_LOCK (eglglessink);
+ if (!eglglessink->have_window) {
+ EGLNativeWindowType window;
+
+ GST_INFO_OBJECT (eglglessink,
+ "No window. Will attempt internal window creation");
+ if (!(window = gst_eglglessink_create_window (eglglessink, width, height))) {
+ GST_ERROR_OBJECT (eglglessink, "Internal window creation failed!");
+ GST_OBJECT_UNLOCK (eglglessink);
+ goto HANDLE_ERROR;
+ }
+ eglglessink->using_own_window = TRUE;
+ eglglessink->eglglesctx.window = window;
+ eglglessink->have_window = TRUE;
+ }
+ GST_DEBUG_OBJECT (eglglessink, "Using window handle %p",
+ eglglessink->eglglesctx.window);
+ eglglessink->eglglesctx.used_window = eglglessink->eglglesctx.window;
+ GST_OBJECT_UNLOCK (eglglessink);
+ gst_x_overlay_got_window_handle (GST_X_OVERLAY (eglglessink),
+ (guintptr) eglglessink->eglglesctx.used_window);
+
+ if (!eglglessink->have_surface) {
+ if (!gst_eglglessink_init_egl_surface (eglglessink)) {
+ GST_ERROR_OBJECT (eglglessink, "Couldn't init EGL surface from window");
+ goto HANDLE_ERROR;
+ }
+ }
+
+SUCCEED:
+ GST_INFO_OBJECT (eglglessink, "Configured caps successfully");
+ return TRUE;
+
+HANDLE_ERROR:
+ GST_ERROR_OBJECT (eglglessink, "Configuring caps failed");
+ return FALSE;
+}
+
+static gboolean
+gst_eglglessink_setcaps (GstBaseSink * bsink, GstCaps * caps)
+{
+ GstEglGlesSink *eglglessink;
+
+ eglglessink = GST_EGLGLESSINK (bsink);
+
+ GST_DEBUG_OBJECT (eglglessink,
+ "Current caps %" GST_PTR_FORMAT ", setting caps %"
+ GST_PTR_FORMAT, eglglessink->current_caps, caps);
+
+ gst_caps_replace (&eglglessink->current_caps, caps);
+
+ return TRUE;
+}
+
+static void
+gst_eglglessink_wipe_fmt (gpointer data)
+{
+ GstEglGlesImageFmt *format = data;
+ gst_caps_unref (format->caps);
+ g_free (format);
+}
+
+static gboolean
+gst_eglglessink_open (GstEglGlesSink * eglglessink)
+{
+ if (!egl_init (eglglessink)) {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static gboolean
+gst_eglglessink_close (GstEglGlesSink * eglglessink)
+{
+ if (eglglessink->eglglesctx.display) {
+ eglTerminate (eglglessink->eglglesctx.display);
+ eglglessink->eglglesctx.display = NULL;
+ }
+
+ eglglessink->selected_fmt = NULL;
+ g_list_free_full (eglglessink->supported_fmts, gst_eglglessink_wipe_fmt);
+ eglglessink->supported_fmts = NULL;
+ gst_caps_unref (eglglessink->sinkcaps);
+ eglglessink->sinkcaps = NULL;
+ eglglessink->egl_started = FALSE;
+
+ return TRUE;
+}
+
+static GstStateChangeReturn
+gst_eglglessink_change_state (GstElement * element, GstStateChange transition)
+{
+ GstEglGlesSink *eglglessink;
+ GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
+
+ eglglessink = GST_EGLGLESSINK (element);
+
+ switch (transition) {
+ case GST_STATE_CHANGE_NULL_TO_READY:
+ if (!gst_eglglessink_open (eglglessink)) {
+ ret = GST_STATE_CHANGE_FAILURE;
+ goto done;
+ }
+ break;
+ case GST_STATE_CHANGE_READY_TO_PAUSED:
+ if (!gst_eglglessink_start (eglglessink)) {
+ ret = GST_STATE_CHANGE_FAILURE;
+ goto done;
+ }
+ break;
+ default:
+ break;
+ }
+
+ ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+ if (ret == GST_STATE_CHANGE_FAILURE)
+ return ret;
+
+ switch (transition) {
+ case GST_STATE_CHANGE_READY_TO_NULL:
+ if (!gst_eglglessink_close (eglglessink)) {
+ ret = GST_STATE_CHANGE_FAILURE;
+ goto done;
+ }
+ break;
+ case GST_STATE_CHANGE_PAUSED_TO_READY:
+ if (!gst_eglglessink_stop (eglglessink)) {
+ ret = GST_STATE_CHANGE_FAILURE;
+ goto done;
+ }
+ break;
+ default:
+ break;
+ }
+
+done:
+ return ret;
+}
+
+static void
+gst_eglglessink_finalize (GObject * object)
+{
+ GstEglGlesSink *eglglessink;
+
+ g_return_if_fail (GST_IS_EGLGLESSINK (object));
+
+ eglglessink = GST_EGLGLESSINK (object);
+
+ if (eglglessink->queue)
+ g_object_unref (eglglessink->queue);
+ eglglessink->queue = NULL;
+
+ if (eglglessink->render_cond)
+ g_cond_free (eglglessink->render_cond);
+ eglglessink->render_cond = NULL;
+ if (eglglessink->render_lock);
+ g_mutex_free (eglglessink->render_lock);
+ eglglessink->render_lock = NULL;
+
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+gst_eglglessink_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec)
+{
+ GstEglGlesSink *eglglessink;
+
+ g_return_if_fail (GST_IS_EGLGLESSINK (object));
+
+ eglglessink = GST_EGLGLESSINK (object);
+
+ switch (prop_id) {
+ case PROP_CREATE_WINDOW:
+ eglglessink->create_window = g_value_get_boolean (value);
+ break;
+ case PROP_FORCE_ASPECT_RATIO:
+ eglglessink->force_aspect_ratio = g_value_get_boolean (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gst_eglglessink_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec)
+{
+ GstEglGlesSink *eglglessink;
+
+ g_return_if_fail (GST_IS_EGLGLESSINK (object));
+
+ eglglessink = GST_EGLGLESSINK (object);
+
+ switch (prop_id) {
+ case PROP_CREATE_WINDOW:
+ g_value_set_boolean (value, eglglessink->create_window);
+ break;
+ case PROP_FORCE_ASPECT_RATIO:
+ g_value_set_boolean (value, eglglessink->force_aspect_ratio);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gst_eglglessink_base_init (gpointer gclass)
+{
+ GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
+
+ gst_element_class_set_details_simple (element_class,
+ "EGL/GLES vout Sink",
+ "Sink/Video",
+ "An EGL/GLES Video Output Sink Implementing the XOverlay interface",
+ "Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>, "
+ "Sebastian Dröge <sebastian.droege@collabora.co.uk>");
+
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_eglglessink_sink_template_factory));
+}
+
+/* initialize the eglglessink's class */
+static void
+gst_eglglessink_class_init (GstEglGlesSinkClass * klass)
+{
+ GObjectClass *gobject_class;
+ GstElementClass *gstelement_class;
+ GstBaseSinkClass *gstbasesink_class;
+ GstVideoSinkClass *gstvideosink_class;
+
+ gobject_class = (GObjectClass *) klass;
+ gstelement_class = (GstElementClass *) klass;
+ gstbasesink_class = (GstBaseSinkClass *) klass;
+ gstvideosink_class = (GstVideoSinkClass *) klass;
+
+ gobject_class->set_property = gst_eglglessink_set_property;
+ gobject_class->get_property = gst_eglglessink_get_property;
+ gobject_class->finalize = gst_eglglessink_finalize;
+
+ gstelement_class->change_state = gst_eglglessink_change_state;
+
+ gstbasesink_class->set_caps = GST_DEBUG_FUNCPTR (gst_eglglessink_setcaps);
+ gstbasesink_class->get_caps = GST_DEBUG_FUNCPTR (gst_eglglessink_getcaps);
+
+ gstvideosink_class->show_frame =
+ GST_DEBUG_FUNCPTR (gst_eglglessink_show_frame);
+
+ g_object_class_install_property (gobject_class, PROP_CREATE_WINDOW,
+ g_param_spec_boolean ("create-window", "Create Window",
+ "If set to true, the sink will attempt to create it's own window to "
+ "render to if none is provided. This is currently only supported "
+ "when the sink is used under X11",
+ TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (gobject_class, PROP_FORCE_ASPECT_RATIO,
+ g_param_spec_boolean ("force-aspect-ratio",
+ "Respect aspect ratio when scaling",
+ "If set to true, the sink will attempt to preserve the incoming "
+ "frame's geometry while scaling, taking both the storage's and "
+ "display's pixel aspect ratio into account",
+ TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+}
+
+static gboolean
+queue_check_full_func (GstDataQueue * queue, guint visible, guint bytes,
+ guint64 time, gpointer checkdata)
+{
+ return visible != 0;
+}
+
+static void
+gst_eglglessink_init (GstEglGlesSink * eglglessink,
+ GstEglGlesSinkClass * gclass)
+{
+ /* Init defaults */
+
+ /** Flags */
+ eglglessink->have_window = FALSE;
+ eglglessink->have_surface = FALSE;
+ eglglessink->have_vbo = FALSE;
+ eglglessink->have_texture = FALSE;
+ eglglessink->egl_started = FALSE;
+ eglglessink->using_own_window = FALSE;
+
+ /** Props */
+ eglglessink->create_window = TRUE;
+ eglglessink->force_aspect_ratio = TRUE;
+
+ eglglessink->par_n = 1;
+ eglglessink->par_d = 1;
+
+ eglglessink->render_lock = g_mutex_new ();
+ eglglessink->render_cond = g_cond_new ();
+ eglglessink->queue = gst_data_queue_new (queue_check_full_func, NULL);
+ eglglessink->last_flow = GST_FLOW_WRONG_STATE;
+}
+
+/* Interface initializations. Used here for initializing the XOverlay
+ * Interface.
+ */
+static void
+gst_eglglessink_init_interfaces (GType type)
+{
+ static const GInterfaceInfo implements_info = {
+ (GInterfaceInitFunc) gst_eglglessink_implements_init, NULL, NULL
+ };
+
+ static const GInterfaceInfo xoverlay_info = {
+ (GInterfaceInitFunc) gst_eglglessink_xoverlay_init, NULL, NULL
+ };
+
+ g_type_add_interface_static (type, GST_TYPE_IMPLEMENTS_INTERFACE,
+ &implements_info);
+ g_type_add_interface_static (type, GST_TYPE_X_OVERLAY, &xoverlay_info);
+
+}
+
+/* entry point to initialize the plug-in
+ * initialize the plug-in itself
+ * register the element factories and other features
+ */
+static gboolean
+eglglessink_plugin_init (GstPlugin * plugin)
+{
+ /* debug category for fltering log messages */
+ GST_DEBUG_CATEGORY_INIT (gst_eglglessink_debug, "eglglessink",
+ 0, "Simple EGL/GLES Sink");
+
+ return gst_element_register (plugin, "eglglessink", GST_RANK_PRIMARY,
+ GST_TYPE_EGLGLESSINK);
+}
+
+/* gstreamer looks for this structure to register eglglessinks */
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+ GST_VERSION_MINOR,
+ "eglglessink",
+ "EGL/GLES sink",
+ eglglessink_plugin_init,
+ VERSION, "LGPL", "GStreamer", "http://gstreamer.net/")
diff --git a/ext/eglgles/gsteglglessink.h b/ext/eglgles/gsteglglessink.h
new file mode 100644
index 00000000..d57a8e11
--- /dev/null
+++ b/ext/eglgles/gsteglglessink.h
@@ -0,0 +1,226 @@
+/*
+ * GStreamer EGL/GLES Sink
+ * Copyright (C) 2012 Collabora Ltd.
+ * @author: Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+ * @author: Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Alternatively, the contents of this file may be used under the
+ * GNU Lesser General Public License Version 2.1 (the "LGPL"), in
+ * which case the following provisions apply instead of the ones
+ * mentioned above:
+ *
+ * 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_EGLGLESSINK_H__
+#define __GST_EGLGLESSINK_H__
+
+#include <gst/gst.h>
+#include <gst/video/gstvideosink.h>
+#include <gst/base/gstdataqueue.h>
+
+#include <EGL/egl.h>
+#include <EGL/eglext.h>
+#include <GLES2/gl2.h>
+#include <GLES2/gl2ext.h>
+
+G_BEGIN_DECLS
+#define GST_TYPE_EGLGLESSINK \
+ (gst_eglglessink_get_type())
+#define GST_EGLGLESSINK(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_EGLGLESSINK,GstEglGlesSink))
+#define GST_EGLGLESSINK_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_EGLGLESSINK,GstEglGlesSinkClass))
+#define GST_IS_EGLGLESSINK(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_EGLGLESSINK))
+#define GST_IS_EGLGLESSINK_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_EGLGLESSINK))
+#define GST_EGLGLESSINK_IMAGE_NOFMT 0
+#define GST_EGLGLESSINK_IMAGE_RGB888 1
+#define GST_EGLGLESSINK_IMAGE_RGB565 2
+#define GST_EGLGLESSINK_IMAGE_RGBA8888 3
+#define GST_EGLGLESSINK_EGL_MIN_VERSION 1
+typedef struct _GstEglGlesSink GstEglGlesSink;
+typedef struct _GstEglGlesSinkClass GstEglGlesSinkClass;
+typedef struct _GstEglGlesRenderContext GstEglGlesRenderContext;
+
+typedef struct _GstEglGlesImageFmt GstEglGlesImageFmt;
+
+typedef struct _coord5
+{
+ float x;
+ float y;
+ float z;
+ float a; /* texpos x */
+ float b; /* texpos y */
+} coord5;
+
+/*
+ * GstEglGlesRenderContext:
+ * @config: Current EGL config
+ * @eglcontext: Current EGL context
+ * @display: Current EGL display connection
+ * @window: Current EGL window asociated with the display connection
+ * @used_window: Last seen EGL window asociated with the display connection
+ * @surface: EGL surface the sink is rendering into
+ * @fragshader: Fragment shader
+ * @vertshader: Vertex shader
+ * @glslprogram: Compiled and linked GLSL program in use for rendering
+ * @texture Texture units in use
+ * @surface_width: Pixel width of the surface the sink is rendering into
+ * @surface_height: Pixel height of the surface the sink is rendering into
+ * @pixel_aspect_ratio: EGL display aspect ratio
+ * @egl_minor: EGL version (minor)
+ * @egl_major: EGL version (major)
+ * @n_textures: Texture units count
+ * @position_loc: Index of the position vertex attribute array
+ * @texpos_loc: Index of the textpos vertex attribute array
+ * @position_array: VBO position array
+ * @texpos_array: VBO texpos array
+ * @index_array: VBO index array
+ * @position_buffer: Position buffer object name
+ * @texpos_buffer: Texpos buffer object name
+ * @index_buffer: Index buffer object name
+ *
+ * This struct holds the sink's EGL/GLES rendering context.
+ */
+struct _GstEglGlesRenderContext
+{
+ EGLConfig config;
+ EGLContext eglcontext;
+ EGLDisplay display;
+ EGLNativeWindowType window, used_window;
+ EGLSurface surface;
+ gboolean buffer_preserved;
+ GLuint fragshader[2], vertshader[2], glslprogram[2];
+ GLuint texture[3];
+ EGLint surface_width;
+ EGLint surface_height;
+ EGLint pixel_aspect_ratio;
+ EGLint egl_minor, egl_major;
+ gint n_textures;
+
+ /* shader vars */
+ GLuint position_loc[2], texpos_loc;
+ GLuint tex_loc[3];
+ coord5 position_array[12]; /* 3 x Frame, 3 x Border1, 3 x Border2 */
+ unsigned short index_array[4];
+ unsigned int position_buffer, index_buffer;
+};
+
+/*
+ * GstEglGlesImageFmt:
+ * @fmt: Internal identifier for the EGL attribs / GST caps pairing
+ * @attribs: Pointer to the set of EGL attributes asociated with this format
+ * @caps: Pointer to the GST caps asociated with this format
+ *
+ * This struct holds a pairing between GST caps and the matching EGL attributes
+ * associated with a given pixel format
+ */
+struct _GstEglGlesImageFmt
+{
+ gint fmt; /* Private identifier */
+ const EGLint *attribs; /* EGL Attributes */
+ GstCaps *caps; /* Matching caps for the attribs */
+};
+
+/*
+ * GstEglGlesSink:
+ * @par_n: Incoming frame's aspect ratio numerator
+ * @par_d: Incoming frame's aspect ratio denominator
+ * @format: Caps' video format field
+ * @display_region: Surface region to use as rendering canvas
+ * @sinkcaps: Full set of suported caps
+ * @current_caps: Current caps
+ * @selected_fmt: Pointer to the GST caps/EGL attribs pairing in use
+ * @rendering_path: Rendering path (Slow/Fast)
+ * @eglglesctx: Pointer to the associated EGL/GLESv2 rendering context
+ * @flow_lock: Simple concurrent access ward to the sink's runtime state
+ * @supported_fmts: Pointer to the runtime supported format list
+ * @have_window: Set if the sink has access to a window to hold it's canvas
+ * @using_own_window: Set if the sink created its own window
+ * @have_surface: Set if the EGL surface setup has been performed
+ * @have_vbo: Set if the GLES VBO setup has been performed
+ * @have_texture: Set if the GLES texture setup has been performed
+ * @egl_started: Set if the whole EGL setup has been performed
+ * @create_window: Property value holder to allow/forbid internal window creation
+ * @force_rendering_slow: Property value holder to force slow rendering path
+ * @force_aspect_ratio: Property value holder to consider PAR/DAR when scaling
+ *
+ * The #GstEglGlesSink data structure.
+ */
+struct _GstEglGlesSink
+{
+ GstVideoSink videosink; /* Element hook */
+ int par_n, par_d; /* Aspect ratio from caps */
+
+ GstVideoFormat format;
+ GstVideoRectangle display_region;
+ GstCaps *sinkcaps;
+ GstCaps *current_caps, *configured_caps;
+
+ GstEglGlesImageFmt *selected_fmt;
+ GstEglGlesRenderContext eglglesctx;
+
+ GList *supported_fmts;
+
+ /* Runtime flags */
+ gboolean have_window;
+ gboolean using_own_window;
+ gboolean have_surface;;
+ gboolean have_vbo;
+ gboolean have_texture;
+ gboolean egl_started;
+
+ GThread *thread;
+ gboolean thread_running;
+ GstDataQueue *queue;
+ GCond *render_cond;
+ GMutex *render_lock;
+ GstFlowReturn last_flow;
+
+ /* Properties */
+ gboolean create_window;
+ gboolean force_aspect_ratio;
+};
+
+struct _GstEglGlesSinkClass
+{
+ GstVideoSinkClass parent_class;
+};
+
+GType gst_eglglessink_get_type (void);
+
+G_END_DECLS
+#endif /* __GST_EGLGLESSINK_H__ */
diff --git a/ext/eglgles/video_platform_wrapper.c b/ext/eglgles/video_platform_wrapper.c
new file mode 100644
index 00000000..9ec582c3
--- /dev/null
+++ b/ext/eglgles/video_platform_wrapper.c
@@ -0,0 +1,142 @@
+/*
+ * GStreamer Android Video Platform Wrapper
+ * Copyright (C) 2012 Collabora Ltd.
+ * @author: Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Alternatively, the contents of this file may be used under the
+ * GNU Lesser General Public License Version 2.1 (the "LGPL"), in
+ * which case the following provisions apply instead of the ones
+ * mentioned above:
+ *
+ * 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#define EGL_EGLEXT_PROTOTYPES
+
+#include <EGL/egl.h>
+#include <EGL/eglext.h>
+#include <GLES2/gl2.h>
+
+#include <gst/gst.h>
+#include "video_platform_wrapper.h"
+
+#ifndef __BIONIC__
+#include <X11/Xlib.h>
+#endif
+
+GST_DEBUG_CATEGORY_STATIC (eglgles_platform_wrapper);
+#define GST_CAT_DEFAULT eglgles_platform_wrapper
+
+/* XXX: Likely to be removed */
+gboolean
+platform_wrapper_init (void)
+{
+ GST_DEBUG_CATEGORY_INIT (eglgles_platform_wrapper,
+ "EglGles Platform Wrapper", 0,
+ "Platform dependent native-window utility routines for EglGles");
+ return TRUE;
+}
+
+#ifndef __BIONIC__
+EGLNativeWindowType
+platform_create_native_window (gint width, gint height)
+{
+ Display *d;
+ Window w;
+ //XEvent e;
+ int s;
+
+ d = XOpenDisplay (NULL);
+ if (d == NULL) {
+ GST_CAT_ERROR (GST_CAT_DEFAULT, "Can't open X11 display");
+ return (EGLNativeWindowType) 0;
+ }
+
+ s = DefaultScreen (d);
+ w = XCreateSimpleWindow (d, RootWindow (d, s), 10, 10, width, height, 1,
+ BlackPixel (d, s), WhitePixel (d, s));
+ XStoreName (d, w, "eglglessink");
+ XMapWindow (d, w);
+ XFlush (d);
+ return (EGLNativeWindowType) w;
+}
+
+gboolean
+platform_destroy_native_window (EGLNativeDisplayType display,
+ EGLNativeWindowType window)
+{
+ /* XXX: Should proly catch BadWindow */
+ XDestroyWindow (display, window);
+ return TRUE;
+}
+
+/* XXX: Missing implementation */
+EGLint *
+platform_crate_native_image_buffer (EGLNativeWindowType win, EGLConfig config,
+ EGLNativeDisplayType display, const EGLint * egl_attribs)
+{
+ return NULL;
+}
+
+#else
+/* Android does not support the creation of an egl window surface
+ * from native code. Hence, we just return NULL here for the time
+ * being. Function is left for reference as implementing it should
+ * help us suport other EGL platforms.
+ */
+EGLNativeWindowType
+platform_create_native_window (gint width, gint height)
+{
+ /* XXX: There was one example on AOSP that was using something
+ * along the lines of window = android_createDisplaySurface();
+ * but wasn't working properly.
+ */
+
+ GST_CAT_ERROR (GST_CAT_DEFAULT, "Android: Can't create native window");
+ return (EGLNativeWindowType) 0;
+}
+
+gboolean
+platform_destroy_native_window (EGLNativeDisplayType display,
+ EGLNativeWindowType window)
+{
+ GST_CAT_ERROR (GST_CAT_DEFAULT, "Android: Can't destroy native window");
+ return TRUE;
+}
+
+#endif
diff --git a/ext/eglgles/video_platform_wrapper.h b/ext/eglgles/video_platform_wrapper.h
new file mode 100644
index 00000000..db27c572
--- /dev/null
+++ b/ext/eglgles/video_platform_wrapper.h
@@ -0,0 +1,64 @@
+/*
+ * GStreamer Android Video Platform Wrapper
+ * Copyright (C) 2012 Collabora Ltd.
+ * @author: Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Alternatively, the contents of this file may be used under the
+ * GNU Lesser General Public License Version 2.1 (the "LGPL"), in
+ * which case the following provisions apply instead of the ones
+ * mentioned above:
+ *
+ * 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.
+ */
+
+/**
+ * General idea is to have all platform dependent code here for easy
+ * tweaking and isolation from the main routines
+ */
+
+#ifndef __GST_ANDROID_VIDEO_PLATFORM_WRAPPER__
+#define __GST_ANDROID_VIDEO_PLATFORM_WRAPPER__
+
+#include <gst/gst.h>
+#include <EGL/egl.h>
+
+gboolean platform_wrapper_init (void);
+EGLNativeWindowType platform_create_native_window (gint width, gint height);
+gboolean platform_destroy_native_window (EGLNativeDisplayType display,
+ EGLNativeWindowType w);
+EGLint *platform_crate_native_image_buffer (EGLNativeWindowType win,
+ EGLConfig config, EGLNativeDisplayType display, const EGLint * egl_attribs);
+
+
+#endif
diff --git a/ext/faac/Makefile.in b/ext/faac/Makefile.in
index 9123baf6..5acecfd0 100644
--- a/ext/faac/Makefile.in
+++ b/ext/faac/Makefile.in
@@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/faac/gstfaac.c b/ext/faac/gstfaac.c
index 450567f2..7a813618 100644
--- a/ext/faac/gstfaac.c
+++ b/ext/faac/gstfaac.c
@@ -202,7 +202,7 @@ gst_faac_class_init (GstFaacClass * klass)
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&sink_template));
- gst_element_class_set_metadata (gstelement_class, "AAC audio encoder",
+ gst_element_class_set_static_metadata (gstelement_class, "AAC audio encoder",
"Codec/Encoder/Audio",
"Free MPEG-2/4 AAC encoder",
"Ronald Bultje <rbultje@ronald.bitfreak.net>");
diff --git a/ext/faad/Makefile.in b/ext/faad/Makefile.in
index c85298f7..ff6bcb01 100644
--- a/ext/faad/Makefile.in
+++ b/ext/faad/Makefile.in
@@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/faad/gstfaad.c b/ext/faad/gstfaad.c
index c5da323d..79269e9b 100644
--- a/ext/faad/gstfaad.c
+++ b/ext/faad/gstfaad.c
@@ -157,7 +157,7 @@ gst_faad_class_init (GstFaadClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&sink_template));
- gst_element_class_set_metadata (element_class, "AAC audio decoder",
+ gst_element_class_set_static_metadata (element_class, "AAC audio decoder",
"Codec/Decoder/Audio",
"Free MPEG-2/4 AAC decoder",
"Ronald Bultje <rbultje@ronald.bitfreak.net>");
diff --git a/ext/flite/Makefile.in b/ext/flite/Makefile.in
index 65de2bca..ba8c743e 100644
--- a/ext/flite/Makefile.in
+++ b/ext/flite/Makefile.in
@@ -249,6 +249,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/flite/gstflitetestsrc.c b/ext/flite/gstflitetestsrc.c
index 1fcf5acb..9ab11dd7 100644
--- a/ext/flite/gstflitetestsrc.c
+++ b/ext/flite/gstflitetestsrc.c
@@ -129,7 +129,7 @@ gst_flite_test_src_class_init (GstFliteTestSrcClass * klass)
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&gst_flite_test_src_src_template));
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"Flite speech test source", "Source/Audio",
"Creates audio test signals identifying channels",
"David Schleef <ds@schleef.org>");
diff --git a/ext/gme/Makefile.in b/ext/gme/Makefile.in
index 2d59f3cb..e7c1eac1 100644
--- a/ext/gme/Makefile.in
+++ b/ext/gme/Makefile.in
@@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/gme/gstgme.c b/ext/gme/gstgme.c
index 6e7f15a0..0afe568e 100644
--- a/ext/gme/gstgme.c
+++ b/ext/gme/gstgme.c
@@ -86,7 +86,7 @@ gst_gme_dec_class_init (GstGmeDecClass * klass)
gobject_class->dispose = gst_gme_dec_dispose;
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"Gaming console music file decoder", "Codec/Audio/Decoder",
"Uses libgme to emulate a gaming console sound processors",
"Chris Lee <clee@kde.org>, Brian Koropoff <bkoropoff@gmail.com>, "
diff --git a/ext/gsettings/Makefile.in b/ext/gsettings/Makefile.in
index 7a6c7e6b..09ae2869 100644
--- a/ext/gsettings/Makefile.in
+++ b/ext/gsettings/Makefile.in
@@ -261,6 +261,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/gsettings/gstgsettingsaudiosink.c b/ext/gsettings/gstgsettingsaudiosink.c
index d2974f6d..70c3b8f3 100644
--- a/ext/gsettings/gstgsettingsaudiosink.c
+++ b/ext/gsettings/gstgsettingsaudiosink.c
@@ -329,7 +329,7 @@ gst_gsettings_audio_sink_base_init (gpointer klass)
{
GstElementClass *eklass = GST_ELEMENT_CLASS (klass);
- gst_element_class_set_metadata (eklass, "GSettings audio sink",
+ gst_element_class_set_static_metadata (eklass, "GSettings audio sink",
"Sink/Audio",
"Audio sink embedding the GSettings preferences for audio output",
"Sebastian Dröge <sebastian.droege@collabora.co.uk>");
diff --git a/ext/gsettings/gstgsettingsaudiosrc.c b/ext/gsettings/gstgsettingsaudiosrc.c
index 9e500311..75d32c57 100644
--- a/ext/gsettings/gstgsettingsaudiosrc.c
+++ b/ext/gsettings/gstgsettingsaudiosrc.c
@@ -228,7 +228,7 @@ gst_gsettings_audio_src_base_init (gpointer klass)
{
GstElementClass *eklass = GST_ELEMENT_CLASS (klass);
- gst_element_class_set_metadata (eklass, "GSettings audio src",
+ gst_element_class_set_static_metadata (eklass, "GSettings audio src",
"Src/Audio",
"Audio src embedding the GSettings preferences for audio input",
"Sebastian Dröge <sebastian.droege@collabora.co.uk>");
diff --git a/ext/gsettings/gstgsettingsvideosink.c b/ext/gsettings/gstgsettingsvideosink.c
index 6c9c7fbd..51deb895 100644
--- a/ext/gsettings/gstgsettingsvideosink.c
+++ b/ext/gsettings/gstgsettingsvideosink.c
@@ -228,7 +228,7 @@ gst_gsettings_video_sink_base_init (gpointer klass)
{
GstElementClass *eklass = GST_ELEMENT_CLASS (klass);
- gst_element_class_set_metadata (eklass, "GSettings video sink",
+ gst_element_class_set_static_metadata (eklass, "GSettings video sink",
"Sink/Video",
"Video sink embedding the GSettings preferences for video input",
"Sebastian Dröge <sebastian.droege@collabora.co.uk>");
diff --git a/ext/gsettings/gstgsettingsvideosrc.c b/ext/gsettings/gstgsettingsvideosrc.c
index 54aafe53..4913126b 100644
--- a/ext/gsettings/gstgsettingsvideosrc.c
+++ b/ext/gsettings/gstgsettingsvideosrc.c
@@ -228,7 +228,7 @@ gst_gsettings_video_src_base_init (gpointer klass)
{
GstElementClass *eklass = GST_ELEMENT_CLASS (klass);
- gst_element_class_set_metadata (eklass, "GSettings video src",
+ gst_element_class_set_static_metadata (eklass, "GSettings video src",
"Src/Video",
"Video src embedding the GSettings preferences for video input",
"Sebastian Dröge <sebastian.droege@collabora.co.uk>");
diff --git a/ext/gsm/Makefile.in b/ext/gsm/Makefile.in
index c2e7ba81..656703f9 100644
--- a/ext/gsm/Makefile.in
+++ b/ext/gsm/Makefile.in
@@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/gsm/gstgsmdec.c b/ext/gsm/gstgsmdec.c
index d6d91664..4f9682f2 100644
--- a/ext/gsm/gstgsmdec.c
+++ b/ext/gsm/gstgsmdec.c
@@ -88,7 +88,7 @@ gst_gsmdec_class_init (GstGSMDecClass * klass)
gst_static_pad_template_get (&gsmdec_sink_template));
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gsmdec_src_template));
- gst_element_class_set_metadata (element_class, "GSM audio decoder",
+ gst_element_class_set_static_metadata (element_class, "GSM audio decoder",
"Codec/Decoder/Audio",
"Decodes GSM encoded audio", "Philippe Khalaf <burger@speedy.org>");
diff --git a/ext/gsm/gstgsmenc.c b/ext/gsm/gstgsmenc.c
index 539d076c..addec53a 100644
--- a/ext/gsm/gstgsmenc.c
+++ b/ext/gsm/gstgsmenc.c
@@ -82,7 +82,7 @@ gst_gsmenc_class_init (GstGSMEncClass * klass)
gst_static_pad_template_get (&gsmenc_sink_template));
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gsmenc_src_template));
- gst_element_class_set_metadata (element_class, "GSM audio encoder",
+ gst_element_class_set_static_metadata (element_class, "GSM audio encoder",
"Codec/Encoder/Audio",
"Encodes GSM audio", "Philippe Khalaf <burger@speedy.org>");
diff --git a/ext/jasper/Makefile.in b/ext/jasper/Makefile.in
index 05cfdfba..b5f5f141 100644
--- a/ext/jasper/Makefile.in
+++ b/ext/jasper/Makefile.in
@@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/jasper/gstjasperdec.c b/ext/jasper/gstjasperdec.c
index 2052cc50..cb81f502 100644
--- a/ext/jasper/gstjasperdec.c
+++ b/ext/jasper/gstjasperdec.c
@@ -96,7 +96,7 @@ gst_jasper_dec_base_init (gpointer g_class)
gst_static_pad_template_get (&gst_jasper_dec_src_template));
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_jasper_dec_sink_template));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"Jasper JPEG2000 image decoder", "Codec/Decoder/Image",
"Decodes JPEG2000 encoded images using jasper",
"Mark Nauwelaerts <mnauw@users.sf.net>");
diff --git a/ext/jasper/gstjasperenc.c b/ext/jasper/gstjasperenc.c
index 3da86d6b..c812ddb6 100644
--- a/ext/jasper/gstjasperenc.c
+++ b/ext/jasper/gstjasperenc.c
@@ -100,7 +100,7 @@ gst_jasper_enc_base_init (gpointer g_class)
gst_static_pad_template_get (&gst_jasper_enc_src_template));
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_jasper_enc_sink_template));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"Jasper JPEG2000 image encoder", "Codec/Encoder/Image",
"Encodes video to JPEG2000 using jasper",
"Mark Nauwelaerts <mnauw@users.sf.net>");
diff --git a/ext/kate/Makefile.in b/ext/kate/Makefile.in
index a90b7a22..712eb02f 100644
--- a/ext/kate/Makefile.in
+++ b/ext/kate/Makefile.in
@@ -262,6 +262,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/kate/gstkatedec.c b/ext/kate/gstkatedec.c
index b45103fb..c94166c7 100644
--- a/ext/kate/gstkatedec.c
+++ b/ext/kate/gstkatedec.c
@@ -161,7 +161,7 @@ gst_kate_dec_class_init (GstKateDecClass * klass)
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&sink_factory));
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"Kate stream text decoder", "Codec/Decoder/Subtitle",
"Decodes Kate text streams",
"Vincent Penquerc'h <ogg.k.ogg.k@googlemail.com>");
diff --git a/ext/kate/gstkateenc.c b/ext/kate/gstkateenc.c
index 7dbd0303..806325ed 100644
--- a/ext/kate/gstkateenc.c
+++ b/ext/kate/gstkateenc.c
@@ -216,8 +216,8 @@ gst_kate_enc_class_init (GstKateEncClass * klass)
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&sink_factory));
- gst_element_class_set_metadata (gstelement_class, "Kate stream encoder",
- "Codec/Encoder/Subtitle",
+ gst_element_class_set_static_metadata (gstelement_class,
+ "Kate stream encoder", "Codec/Encoder/Subtitle",
"Encodes Kate streams from text or subpictures",
"Vincent Penquerc'h <ogg.k.ogg.k@googlemail.com>");
}
diff --git a/ext/kate/gstkateparse.c b/ext/kate/gstkateparse.c
index e7eab4fd..80cfc560 100644
--- a/ext/kate/gstkateparse.c
+++ b/ext/kate/gstkateparse.c
@@ -111,7 +111,7 @@ gst_kate_parse_class_init (GstKateParseClass * klass)
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&gst_kate_parse_sink_factory));
- gst_element_class_set_metadata (gstelement_class, "Kate stream parser",
+ gst_element_class_set_static_metadata (gstelement_class, "Kate stream parser",
"Codec/Parser/Subtitle",
"parse raw kate streams",
"Vincent Penquerc'h <ogg.k.ogg.k at googlemail dot com>");
diff --git a/ext/kate/gstkatetag.c b/ext/kate/gstkatetag.c
index 00aafa0a..b2303d83 100644
--- a/ext/kate/gstkatetag.c
+++ b/ext/kate/gstkatetag.c
@@ -136,7 +136,7 @@ gst_kate_tag_class_init (GstKateTagClass * klass)
"Set the height of the canvas this stream was authored for (0 is unspecified)",
0, G_MAXINT, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- gst_element_class_set_metadata (gstelement_class, "Kate stream tagger",
+ gst_element_class_set_static_metadata (gstelement_class, "Kate stream tagger",
"Formatter/Metadata",
"Retags kate streams", "Vincent Penquerc'h <ogg.k.ogg.k@googlemail.com>");
diff --git a/ext/kate/gstkatetiger.c b/ext/kate/gstkatetiger.c
index d6859509..1333b753 100644
--- a/ext/kate/gstkatetiger.c
+++ b/ext/kate/gstkatetiger.c
@@ -225,7 +225,7 @@ gst_kate_tiger_base_init (gpointer gclass)
gst_static_pad_template_get (&kate_sink_factory));
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&video_sink_factory));
- gst_element_class_set_metadata (element_class, "Kate stream renderer",
+ gst_element_class_set_static_metadata (element_class, "Kate stream renderer",
"Mixer/Video/Overlay/Subtitle",
"Decodes and renders Kate streams on top of a video",
"Vincent Penquerc'h <ogg.k.ogg.k@googlemail.com>");
diff --git a/ext/ladspa/Makefile.in b/ext/ladspa/Makefile.in
index 351240a1..1e687adc 100644
--- a/ext/ladspa/Makefile.in
+++ b/ext/ladspa/Makefile.in
@@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/libmms/Makefile.in b/ext/libmms/Makefile.in
index 6e7ce817..558ea4b5 100644
--- a/ext/libmms/Makefile.in
+++ b/ext/libmms/Makefile.in
@@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/libmms/gstmms.c b/ext/libmms/gstmms.c
index c59a17f5..093b0eda 100644
--- a/ext/libmms/gstmms.c
+++ b/ext/libmms/gstmms.c
@@ -103,7 +103,7 @@ gst_mms_class_init (GstMMSClass * klass)
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&src_factory));
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"MMS streaming source", "Source/Network",
"Receive data streamed via MSFT Multi Media Server protocol",
"Maciej Katafiasz <mathrick@users.sourceforge.net>");
diff --git a/ext/lv2/Makefile.in b/ext/lv2/Makefile.in
index d6f4f4a7..2e3f9a0d 100644
--- a/ext/lv2/Makefile.in
+++ b/ext/lv2/Makefile.in
@@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/mimic/Makefile.in b/ext/mimic/Makefile.in
index 8873940c..6a152359 100644
--- a/ext/mimic/Makefile.in
+++ b/ext/mimic/Makefile.in
@@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/mimic/gstmimdec.c b/ext/mimic/gstmimdec.c
index 0640b686..dc536b00 100644
--- a/ext/mimic/gstmimdec.c
+++ b/ext/mimic/gstmimdec.c
@@ -85,7 +85,7 @@ gst_mim_dec_class_init (GstMimDecClass * klass)
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&sink_factory));
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"Mimic Decoder",
"Codec/Decoder/Video",
"MSN Messenger compatible Mimic video decoder element",
diff --git a/ext/mimic/gstmimenc.c b/ext/mimic/gstmimenc.c
index f1b26c8f..61c329aa 100644
--- a/ext/mimic/gstmimenc.c
+++ b/ext/mimic/gstmimenc.c
@@ -126,7 +126,7 @@ gst_mim_enc_class_init (GstMimEncClass * klass)
gst_static_pad_template_get (&src_factory));
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&sink_factory));
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"Mimic Encoder",
"Codec/Encoder/Video",
"MSN Messenger compatible Mimic video encoder element",
diff --git a/ext/modplug/Makefile.in b/ext/modplug/Makefile.in
index c682ce81..3ef1fe32 100644
--- a/ext/modplug/Makefile.in
+++ b/ext/modplug/Makefile.in
@@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/modplug/gstmodplug.cc b/ext/modplug/gstmodplug.cc
index 46f12515..c7b2bd1e 100644
--- a/ext/modplug/gstmodplug.cc
+++ b/ext/modplug/gstmodplug.cc
@@ -214,7 +214,7 @@ gst_modplug_class_init (GstModPlugClass * klass)
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&modplug_src_template_factory));
- gst_element_class_set_metadata (gstelement_class, "ModPlug",
+ gst_element_class_set_static_metadata (gstelement_class, "ModPlug",
"Codec/Decoder/Audio", "Module decoder based on modplug engine",
"Jeremy SIMON <jsimon13@yahoo.fr>");
diff --git a/ext/mpeg2enc/Makefile.in b/ext/mpeg2enc/Makefile.in
index e0652756..9e5f265c 100644
--- a/ext/mpeg2enc/Makefile.in
+++ b/ext/mpeg2enc/Makefile.in
@@ -254,6 +254,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/mpeg2enc/gstmpeg2enc.cc b/ext/mpeg2enc/gstmpeg2enc.cc
index 72adbdcf..68fcab63 100644
--- a/ext/mpeg2enc/gstmpeg2enc.cc
+++ b/ext/mpeg2enc/gstmpeg2enc.cc
@@ -132,7 +132,7 @@ gst_mpeg2enc_class_init (GstMpeg2encClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&sink_template));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"mpeg2enc video encoder", "Codec/Encoder/Video",
"High-quality MPEG-1/2 video encoder",
"Andrew Stevens <andrew.stevens@nexgo.de>\n"
diff --git a/ext/mpg123/Makefile.in b/ext/mpg123/Makefile.in
index c3f11ee2..eb8bec00 100644
--- a/ext/mpg123/Makefile.in
+++ b/ext/mpg123/Makefile.in
@@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/mpg123/gstmpg123audiodec.c b/ext/mpg123/gstmpg123audiodec.c
index adaa54f0..16bcfce0 100644
--- a/ext/mpg123/gstmpg123audiodec.c
+++ b/ext/mpg123/gstmpg123audiodec.c
@@ -16,6 +16,20 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
+/**
+ * SECTION: element-mpg123audiodec
+ * @see_also: lamemp3enc, mad
+ *
+ * Audio decoder for MPEG-1 layer 1/2/3 audio data.
+ *
+ * <refsect2>
+ * <title>Example pipelines</title>
+ * |[
+ * gst-launch filesrc location=music.mp3 ! mpegaudioparse ! mpg123audiodec ! audioconvert ! audioresample ! autoaudiosink
+ * ]| Decode and play the mp3 file
+ * </refsect2>
+ */
+
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
@@ -28,8 +42,7 @@
GST_DEBUG_CATEGORY_STATIC (mpg123_debug);
#define GST_CAT_DEFAULT mpg123_debug
-/*
- * Omitted sample formats that mpg123 supports (or at least can support):
+/* Omitted sample formats that mpg123 supports (or at least can support):
* - 8bit integer signed
* - 8bit integer unsigned
* - a-law
@@ -46,10 +59,10 @@ GST_DEBUG_CATEGORY_STATIC (mpg123_debug);
* no way how to find out which one of them is actually used.
*
* However, in all known installations, "real" equals 32bit float, so that's
- * what is used.
- */
+ * what is used. */
-static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
+static GstStaticPadTemplate static_sink_template =
+GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
GST_STATIC_CAPS ("audio/mpeg, "
@@ -66,9 +79,9 @@ static GstFlowReturn gst_mpg123_audio_dec_push_decoded_bytes (GstMpg123AudioDec
* mpg123_decoder, unsigned char const *decoded_bytes,
size_t const num_decoded_bytes);
static GstFlowReturn gst_mpg123_audio_dec_handle_frame (GstAudioDecoder * dec,
- GstBuffer * buffer);
+ GstBuffer * input_buffer);
static gboolean gst_mpg123_audio_dec_set_format (GstAudioDecoder * dec,
- GstCaps * incoming_caps);
+ GstCaps * input_caps);
static void gst_mpg123_audio_dec_flush (GstAudioDecoder * dec, gboolean hard);
G_DEFINE_TYPE (GstMpg123AudioDec, gst_mpg123_audio_dec, GST_TYPE_AUDIO_DECODER);
@@ -79,7 +92,7 @@ gst_mpg123_audio_dec_class_init (GstMpg123AudioDecClass * klass)
GObjectClass *object_class;
GstAudioDecoderClass *base_class;
GstElementClass *element_class;
- GstPadTemplate *src_template;
+ GstPadTemplate *src_template, *sink_template;
int error;
GST_DEBUG_CATEGORY_INIT (mpg123_debug, "mpg123", 0, "mpg123 mp3 decoder");
@@ -96,15 +109,14 @@ gst_mpg123_audio_dec_class_init (GstMpg123AudioDecClass * klass)
"Decodes mp3 streams using the mpg123 library",
"Carlos Rafael Giani <dv@pseudoterminal.org>");
- /*
- Not using static pad template for srccaps, since the comma-separated list of formats needs to be
- created depending on whatever mpg123 supports
- */
+ /* Not using static pad template for srccaps, since the comma-separated list
+ * of formats needs to be created depending on whatever mpg123 supports */
{
const int *format_list;
const long *rates_list;
size_t num, i;
GString *s;
+ GstCaps *src_template_caps;
s = g_string_new ("audio/x-raw, ");
@@ -157,14 +169,16 @@ gst_mpg123_audio_dec_class_init (GstMpg123AudioDecClass * klass)
g_string_append (s, "channels = (int) [ 1, 2 ], ");
g_string_append (s, "layout = (string) interleaved");
+ src_template_caps = gst_caps_from_string (s->str);
src_template = gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
- gst_caps_from_string (s->str));
+ src_template_caps);
g_string_free (s, TRUE);
}
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&sink_template));
+ sink_template = gst_static_pad_template_get (&static_sink_template);
+
+ gst_element_class_add_pad_template (element_class, sink_template);
gst_element_class_add_pad_template (element_class, src_template);
base_class->start = GST_DEBUG_FUNCPTR (gst_mpg123_audio_dec_start);
@@ -179,7 +193,7 @@ gst_mpg123_audio_dec_class_init (GstMpg123AudioDecClass * klass)
GST_ERROR ("Could not initialize mpg123 library: %s",
mpg123_plain_strerror (error));
else
- GST_TRACE ("mpg123 library initialized");
+ GST_INFO ("mpg123 library initialized");
}
@@ -214,30 +228,39 @@ gst_mpg123_audio_dec_start (GstAudioDecoder * dec)
mpg123_decoder->has_next_audioinfo = FALSE;
mpg123_decoder->frame_offset = 0;
- /*
- Initially, the mpg123 handle comes with a set of default formats supported. This clears this set.
- This is necessary, since only one format shall be supported (see set_format for more).
- */
+ /* Initially, the mpg123 handle comes with a set of default formats
+ * supported. This clears this set. This is necessary, since only one
+ * format shall be supported (see set_format for more). */
mpg123_format_none (mpg123_decoder->handle);
- mpg123_param (mpg123_decoder->handle, MPG123_REMOVE_FLAGS, MPG123_GAPLESS, 0); /* Built-in mpg123 support for gapless decoding is disabled for now, since it does not work well with seeking */
- mpg123_param (mpg123_decoder->handle, MPG123_ADD_FLAGS, MPG123_SEEKBUFFER, 0); /* Tells mpg123 to use a small read-ahead buffer for better MPEG sync; essential for MP3 radio streams */
- mpg123_param (mpg123_decoder->handle, MPG123_RESYNC_LIMIT, -1, 0); /* Sets the resync limit to the end of the stream (e.g. don't give up prematurely) */
+ /* Built-in mpg123 support for gapless decoding is disabled for now,
+ * since it does not work well with seeking */
+ mpg123_param (mpg123_decoder->handle, MPG123_REMOVE_FLAGS, MPG123_GAPLESS, 0);
+ /* Tells mpg123 to use a small read-ahead buffer for better MPEG sync;
+ * essential for MP3 radio streams */
+ mpg123_param (mpg123_decoder->handle, MPG123_ADD_FLAGS, MPG123_SEEKBUFFER, 0);
+ /* Sets the resync limit to the end of the stream (otherwise mpg123 may give
+ * up on decoding prematurely, especially with mp3 web radios) */
+ mpg123_param (mpg123_decoder->handle, MPG123_RESYNC_LIMIT, -1, 0);
+ /* Don't let mpg123 resample output */
+ mpg123_param (mpg123_decoder->handle, MPG123_REMOVE_FLAGS,
+ MPG123_AUTO_RESAMPLE, 0);
+ /* Don't let mpg123 print messages to stdout/stderr */
+ mpg123_param (mpg123_decoder->handle, MPG123_ADD_FLAGS, MPG123_QUIET, 0);
/* Open in feed mode (= encoded data is fed manually into the handle). */
error = mpg123_open_feed (mpg123_decoder->handle);
if (G_UNLIKELY (error != MPG123_OK)) {
- GstElement *element = GST_ELEMENT (dec);
- GST_ELEMENT_ERROR (element, STREAM, DECODE, (NULL),
- ("Error opening mpg123 feed: %s", mpg123_plain_strerror (error)));
+ GST_ELEMENT_ERROR (dec, LIBRARY, INIT, (NULL),
+ ("%s", mpg123_strerror (mpg123_decoder->handle)));
mpg123_close (mpg123_decoder->handle);
mpg123_delete (mpg123_decoder->handle);
mpg123_decoder->handle = NULL;
return FALSE;
}
- GST_DEBUG_OBJECT (dec, "mpg123 decoder started");
+ GST_INFO_OBJECT (dec, "mpg123 decoder started");
return TRUE;
}
@@ -254,7 +277,7 @@ gst_mpg123_audio_dec_stop (GstAudioDecoder * dec)
mpg123_decoder->handle = NULL;
}
- GST_DEBUG_OBJECT (dec, "mpg123 decoder stopped");
+ GST_INFO_OBJECT (dec, "mpg123 decoder stopped");
return TRUE;
}
@@ -265,39 +288,36 @@ gst_mpg123_audio_dec_push_decoded_bytes (GstMpg123AudioDec * mpg123_decoder,
unsigned char const *decoded_bytes, size_t const num_decoded_bytes)
{
GstBuffer *output_buffer;
- GstFlowReturn alloc_error;
GstAudioDecoder *dec;
output_buffer = NULL;
dec = GST_AUDIO_DECODER (mpg123_decoder);
if ((num_decoded_bytes == 0) || (decoded_bytes == NULL)) {
- /* This occurs in the first few frames, which do not carry data; once MPG123_AUDIO_DEC_NEW_FORMAT is received, the empty frames stop occurring */
- GST_TRACE_OBJECT (mpg123_decoder,
- "Nothing was decoded -> no output buffer to push");
+ /* This occurs in the first few frames, which do not carry data; once
+ * MPG123_AUDIO_DEC_NEW_FORMAT is received, the empty frames stop occurring */
+ GST_DEBUG_OBJECT (mpg123_decoder,
+ "cannot decode yet, need more data -> no output buffer to push");
return GST_FLOW_OK;
}
output_buffer = gst_buffer_new_allocate (NULL, num_decoded_bytes, NULL);
- alloc_error = (output_buffer == NULL) ? GST_FLOW_ERROR : GST_FLOW_OK;
- if (alloc_error != GST_FLOW_OK) {
- /* This is necessary to advance playback in time, even when nothing was decoded. */
+ if (output_buffer == NULL) {
+ /* This is necessary to advance playback in time,
+ * even when nothing was decoded. */
return gst_audio_decoder_finish_frame (dec, NULL, 1);
} else {
GstMapInfo info;
if (gst_buffer_map (output_buffer, &info, GST_MAP_WRITE)) {
- if (info.size != num_decoded_bytes)
- GST_ERROR_OBJECT (mpg123_decoder,
- "Mapped memory region has size %u instead of expected size %u",
- info.size, num_decoded_bytes);
- else
- memcpy (info.data, decoded_bytes, num_decoded_bytes);
-
+ memcpy (info.data, decoded_bytes, num_decoded_bytes);
gst_buffer_unmap (output_buffer, &info);
- } else
- GST_ERROR_OBJECT (mpg123_decoder, "Could not map buffer");
+ } else {
+ GST_ERROR_OBJECT (mpg123_decoder, "gst_buffer_map() returned NULL");
+ gst_buffer_unref (output_buffer);
+ output_buffer = NULL;
+ }
return gst_audio_decoder_finish_frame (dec, output_buffer, 1);
}
@@ -305,78 +325,65 @@ gst_mpg123_audio_dec_push_decoded_bytes (GstMpg123AudioDec * mpg123_decoder,
static GstFlowReturn
-gst_mpg123_audio_dec_handle_frame (GstAudioDecoder * dec, GstBuffer * buffer)
+gst_mpg123_audio_dec_handle_frame (GstAudioDecoder * dec,
+ GstBuffer * input_buffer)
{
GstMpg123AudioDec *mpg123_decoder;
int decode_error;
unsigned char *decoded_bytes;
size_t num_decoded_bytes;
-
- if (G_UNLIKELY (!buffer))
- return GST_FLOW_OK;
+ GstFlowReturn retval;
mpg123_decoder = GST_MPG123_AUDIO_DEC (dec);
- if (G_UNLIKELY (mpg123_decoder->handle == NULL)) {
- GstElement *element = GST_ELEMENT (dec);
- GST_ELEMENT_ERROR (element, STREAM, DECODE, (NULL),
- ("mpg123 handle is NULL"));
- return GST_FLOW_ERROR;
- }
+ g_assert (mpg123_decoder->handle != NULL);
/* The actual decoding */
{
- unsigned char const *inmemory;
- size_t inmemsize;
- GstMemory *memory;
- GstMapInfo info;
-
- memory = gst_buffer_get_all_memory (buffer);
- if (memory == NULL)
- return GST_FLOW_ERROR;
-
- if (!gst_memory_map (memory, &info, GST_MAP_READ)) {
- gst_memory_unref (memory);
- return GST_FLOW_ERROR;
+ /* feed input data (if there is any) */
+ if (G_LIKELY (input_buffer != NULL)) {
+ GstMapInfo info;
+
+ if (gst_buffer_map (input_buffer, &info, GST_MAP_READ)) {
+ mpg123_feed (mpg123_decoder->handle, info.data, info.size);
+ gst_buffer_unmap (input_buffer, &info);
+ } else {
+ GST_ERROR_OBJECT (mpg123_decoder, "gst_memory_map() failed");
+ return GST_FLOW_ERROR;
+ }
}
- inmemory = info.data;
- inmemsize = info.size;
-
- mpg123_feed (mpg123_decoder->handle, inmemory, inmemsize);
+ /* Try to decode a frame */
decoded_bytes = NULL;
num_decoded_bytes = 0;
decode_error = mpg123_decode_frame (mpg123_decoder->handle,
&mpg123_decoder->frame_offset, &decoded_bytes, &num_decoded_bytes);
-
- gst_memory_unmap (memory, &info);
- gst_memory_unref (memory);
}
+ retval = GST_FLOW_OK;
+
switch (decode_error) {
case MPG123_NEW_FORMAT:
- /*
- As mentioned in gst_mpg123_audio_dec_set_format(), the next audioinfo is not set immediately;
- instead, the code waits for mpg123 to take note of the new format, and then sets the audioinfo
- This fixes glitches with mp3s containing several format headers (for example, first half using 44.1kHz, second half 32 kHz)
- */
+ /* As mentioned in gst_mpg123_audio_dec_set_format(), the next audioinfo
+ * is not set immediately; instead, the code waits for mpg123 to take
+ * note of the new format, and then sets the audioinfo. This fixes glitches
+ * with mp3s containing several format headers (for example, first half
+ * using 44.1kHz, second half 32 kHz) */
- GST_DEBUG_OBJECT (dec,
+ GST_LOG_OBJECT (dec,
"mpg123 reported a new format -> setting next srccaps");
gst_mpg123_audio_dec_push_decoded_bytes (mpg123_decoder, decoded_bytes,
num_decoded_bytes);
- /*
- If there is a next audioinfo, use it, then set has_next_audioinfo to FALSE, to make sure
- gst_audio_decoder_set_output_format() isn't called again until set_format is called by the base class
- */
+ /* If there is a next audioinfo, use it, then set has_next_audioinfo to
+ * FALSE, to make sure gst_audio_decoder_set_output_format() isn't called
+ * again until set_format is called by the base class */
if (mpg123_decoder->has_next_audioinfo) {
if (!gst_audio_decoder_set_output_format (dec,
&(mpg123_decoder->next_audioinfo))) {
- GstElement *element = GST_ELEMENT (dec);
- GST_ELEMENT_ERROR (element, STREAM, DECODE, (NULL),
- ("Unable to set output format"));
+ GST_WARNING_OBJECT (dec, "Unable to set output format");
+ retval = GST_FLOW_NOT_NEGOTIATED;
}
mpg123_decoder->has_next_audioinfo = FALSE;
}
@@ -385,61 +392,91 @@ gst_mpg123_audio_dec_handle_frame (GstAudioDecoder * dec, GstBuffer * buffer)
case MPG123_NEED_MORE:
case MPG123_OK:
- return gst_mpg123_audio_dec_push_decoded_bytes (mpg123_decoder,
+ retval = gst_mpg123_audio_dec_push_decoded_bytes (mpg123_decoder,
decoded_bytes, num_decoded_bytes);
+ break;
- /* If this happens, then the upstream parser somehow missed the ending of the bitstream */
case MPG123_DONE:
- GST_DEBUG_OBJECT (dec, "mpg123 is done decoding");
+ /* If this happens, then the upstream parser somehow missed the ending
+ * of the bitstream */
+ GST_LOG_OBJECT (dec, "mpg123 is done decoding");
gst_mpg123_audio_dec_push_decoded_bytes (mpg123_decoder, decoded_bytes,
num_decoded_bytes);
- return GST_FLOW_EOS;
+ retval = GST_FLOW_EOS;
+ break;
- /* Anything else is considered an error */
default:
{
- GstElement *element = GST_ELEMENT (dec);
- GST_ELEMENT_ERROR (element, STREAM, DECODE, (NULL), ("Decoding error: %s",
- mpg123_plain_strerror (decode_error)));
+ /* Anything else is considered an error */
+ int errcode;
+ switch (decode_error) {
+ case MPG123_ERR:
+ errcode = mpg123_errcode (mpg123_decoder->handle);
+ break;
+ default:
+ errcode = decode_error;
+ }
+ switch (errcode) {
+ case MPG123_BAD_OUTFORMAT:{
+ GstCaps *input_caps =
+ gst_pad_get_current_caps (GST_AUDIO_DECODER_SINK_PAD (dec));
+ GST_ELEMENT_ERROR (dec, STREAM, FORMAT, (NULL),
+ ("Output sample format could not be used when trying to decode frame. "
+ "This is typically caused when the input caps (often the sample "
+ "rate) do not match the actual format of the audio data. "
+ "Input caps: %" GST_PTR_FORMAT, input_caps)
+ );
+ gst_caps_unref (input_caps);
+ break;
+ }
+ default:{
+ char const *errmsg = mpg123_plain_strerror (errcode);
+ GST_ERROR_OBJECT (dec, "Reported error: %s", errmsg);
+ }
+ }
- return GST_FLOW_ERROR;
+ retval = GST_FLOW_ERROR;
}
}
- return GST_FLOW_OK;
+ return retval;
}
static gboolean
-gst_mpg123_audio_dec_set_format (GstAudioDecoder * dec, GstCaps * incoming_caps)
+gst_mpg123_audio_dec_set_format (GstAudioDecoder * dec, GstCaps * input_caps)
{
-/*
- Using the parsed information upstream, and the list of allowed caps downstream, this code
- tries to find a suitable audio info. It is important to keep in mind that the rate and number of channels
- should never deviate from the one the bitstream has, otherwise mpg123 has to mix channels and/or
- resample (and as its docs say, its internal resampler is very crude). The sample format, however,
- can be chosen freely, because the MPEG specs do not mandate any special format.
- Therefore, rate and number of channels are taken from upstream (which parsed the MPEG frames, so
- the incoming_caps contain exactly the rate and number of channels the bitstream actually has), while
- the sample format is chosen by trying out all caps that are allowed by downstream. This way, the output
- is adjusted to what the downstream prefers.
-
- Also, the new output audio info is not set immediately. Instead, it is considered the "next audioinfo".
- The code waits for mpg123 to notice the new format (= when mpg123_decode_frame() returns MPG123_AUDIO_DEC_NEW_FORMAT),
- and then sets the next audioinfo. Otherwise, the next audioinfo is set too soon, which may cause problems with
- mp3s containing several format headers. One example would be an mp3 with the first 30 seconds using 44.1 kHz,
- then the next 30 seconds using 32 kHz. Rare, but possible.
-
- STEPS:
-
- 1. get rate and channels from incoming_caps
- 2. get allowed caps from src pad
- 3. for each structure in allowed caps:
- 3.1. take format
- 3.2. if the combination of format with rate and channels is unsupported by mpg123, go to (3),
- or exit with error if there are no more structures to try
- 3.3. create next audioinfo out of rate,channels,format, and exit
-*/
+/* Using the parsed information upstream, and the list of allowed caps
+ * downstream, this code tries to find a suitable audio info. It is important
+ * to keep in mind that the rate and number of channels should never deviate
+ * from the one the bitstream has, otherwise mpg123 has to mix channels and/or
+ * resample (and as its docs say, its internal resampler is very crude). The
+ * sample format, however, can be chosen freely, because the MPEG specs do not
+ * mandate any special format. Therefore, rate and number of channels are taken
+ * from upstream (which parsed the MPEG frames, so the input_caps contain
+ * exactly the rate and number of channels the bitstream actually has), while
+ * the sample format is chosen by trying out all caps that are allowed by
+ * downstream. This way, the output is adjusted to what the downstream prefers.
+ *
+ * Also, the new output audio info is not set immediately. Instead, it is
+ * considered the "next audioinfo". The code waits for mpg123 to notice the new
+ * format (= when mpg123_decode_frame() returns MPG123_AUDIO_DEC_NEW_FORMAT),
+ * and then sets the next audioinfo. Otherwise, the next audioinfo is set too
+ * soon, which may cause problems with mp3s containing several format headers.
+ * One example would be an mp3 with the first 30 seconds using 44.1 kHz, then
+ * the next 30 seconds using 32 kHz. Rare, but possible.
+ *
+ * STEPS:
+ *
+ * 1. get rate and channels from input_caps
+ * 2. get allowed caps from src pad
+ * 3. for each structure in allowed caps:
+ * 3.1. take format
+ * 3.2. if the combination of format with rate and channels is unsupported by
+ * mpg123, go to (3), or exit with error if there are no more structures
+ * to try
+ * 3.3. create next audioinfo out of rate,channels,format, and exit
+ */
int rate, channels;
@@ -450,30 +487,26 @@ gst_mpg123_audio_dec_set_format (GstAudioDecoder * dec, GstCaps * incoming_caps)
mpg123_decoder = GST_MPG123_AUDIO_DEC (dec);
- if (G_UNLIKELY (mpg123_decoder->handle == NULL)) {
- GstElement *element = GST_ELEMENT (dec);
- GST_ELEMENT_ERROR (element, STREAM, DECODE, (NULL),
- ("mpg123 handle is NULL"));
- return FALSE;
- }
+ g_assert (mpg123_decoder->handle != NULL);
mpg123_decoder->has_next_audioinfo = FALSE;
- /* Get rate and channels from incoming_caps */
+ /* Get rate and channels from input_caps */
{
GstStructure *structure;
gboolean err = FALSE;
- /* Only the first structure is used (multiple incoming structures don't make sense */
- structure = gst_caps_get_structure (incoming_caps, 0);
+ /* Only the first structure is used (multiple
+ * input caps structures don't make sense */
+ structure = gst_caps_get_structure (input_caps, 0);
if (!gst_structure_get_int (structure, "rate", &rate)) {
err = TRUE;
- GST_ERROR_OBJECT (dec, "Incoming caps do not have a rate value");
+ GST_ERROR_OBJECT (dec, "Input caps do not have a rate value");
}
if (!gst_structure_get_int (structure, "channels", &channels)) {
err = TRUE;
- GST_ERROR_OBJECT (dec, "Incoming caps do not have a channel value");
+ GST_ERROR_OBJECT (dec, "Input caps do not have a channel value");
}
if (err)
@@ -485,8 +518,6 @@ gst_mpg123_audio_dec_set_format (GstAudioDecoder * dec, GstCaps * incoming_caps)
GstCaps *allowed_srccaps_unnorm =
gst_pad_get_allowed_caps (GST_AUDIO_DECODER_SRC_PAD (dec));
allowed_srccaps = gst_caps_normalize (allowed_srccaps_unnorm);
- /* TODO: this causes errors with 1.0 - perhaps a bug? */
- /*gst_caps_unref(allowed_srccaps_unnorm); */
}
/* Go through all allowed caps, pick the first one that matches */
@@ -549,7 +580,7 @@ gst_mpg123_audio_dec_set_format (GstAudioDecoder * dec, GstCaps * incoming_caps)
GST_DEBUG_OBJECT (dec,
"mpg123 cannot use caps %" GST_PTR_FORMAT
" because mpg123_format() failed: %s", structure,
- mpg123_plain_strerror (err));
+ mpg123_strerror (mpg123_decoder->handle));
continue;
}
}
@@ -557,7 +588,7 @@ gst_mpg123_audio_dec_set_format (GstAudioDecoder * dec, GstCaps * incoming_caps)
gst_audio_info_init (&(mpg123_decoder->next_audioinfo));
gst_audio_info_set_format (&(mpg123_decoder->next_audioinfo), format, rate,
channels, NULL);
- GST_DEBUG_OBJECT (dec, "The next audio format is: %s, %u Hz, %u channels",
+ GST_LOG_OBJECT (dec, "The next audio format is: %s, %u Hz, %u channels",
format_str, rate, channels);
mpg123_decoder->has_next_audioinfo = TRUE;
@@ -580,25 +611,20 @@ gst_mpg123_audio_dec_flush (GstAudioDecoder * dec, gboolean hard)
hard = hard;
- GST_DEBUG_OBJECT (dec, "Flushing decoder");
+ GST_LOG_OBJECT (dec, "Flushing decoder");
mpg123_decoder = GST_MPG123_AUDIO_DEC (dec);
- if (G_UNLIKELY (mpg123_decoder->handle == NULL)) {
- GstElement *element = GST_ELEMENT (dec);
- GST_ELEMENT_ERROR (element, STREAM, DECODE, (NULL),
- ("mpg123 handle is NULL"));
- return;
- }
+ g_assert (mpg123_decoder->handle != NULL);
/* Flush by reopening the feed */
mpg123_close (mpg123_decoder->handle);
error = mpg123_open_feed (mpg123_decoder->handle);
if (G_UNLIKELY (error != MPG123_OK)) {
- GstElement *element = GST_ELEMENT (dec);
- GST_ELEMENT_ERROR (element, STREAM, DECODE, (NULL),
- ("Error reopening mpg123 feed: %s", mpg123_plain_strerror (error)));
+ GST_ELEMENT_ERROR (dec, LIBRARY, INIT, (NULL),
+ ("Error while reopening mpg123 feed: %s",
+ mpg123_plain_strerror (error)));
mpg123_close (mpg123_decoder->handle);
mpg123_delete (mpg123_decoder->handle);
mpg123_decoder->handle = NULL;
@@ -606,10 +632,10 @@ gst_mpg123_audio_dec_flush (GstAudioDecoder * dec, gboolean hard)
mpg123_decoder->has_next_audioinfo = FALSE;
- /*
- opening/closing feeds do not affect the format defined by the mpg123_format() call that was made in gst_mpg123_audio_dec_set_format(),
- and since the up/downstream caps are not expected to change here, no mpg123_format() calls are done
- */
+ /* opening/closing feeds do not affect the format defined by the
+ * mpg123_format() call that was made in gst_mpg123_audio_dec_set_format(),
+ * and since the up/downstream caps are not expected to change here, no
+ * mpg123_format() calls are done */
}
static gboolean
diff --git a/ext/mplex/Makefile.in b/ext/mplex/Makefile.in
index b10205a4..183baad2 100644
--- a/ext/mplex/Makefile.in
+++ b/ext/mplex/Makefile.in
@@ -254,6 +254,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/mplex/gstmplex.cc b/ext/mplex/gstmplex.cc
index 9d0bbebd..58c05be7 100644
--- a/ext/mplex/gstmplex.cc
+++ b/ext/mplex/gstmplex.cc
@@ -142,7 +142,7 @@ gst_mplex_class_init (GstMplexClass * klass)
GST_DEBUG_FUNCPTR (gst_mplex_request_new_pad);
element_class->release_pad = GST_DEBUG_FUNCPTR (gst_mplex_release_pad);
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"mplex video multiplexer", "Codec/Muxer",
"High-quality MPEG/DVD/SVCD/VCD video/audio multiplexer",
"Andrew Stevens <andrew.stevens@nexgo.de>\n"
diff --git a/ext/musepack/Makefile.in b/ext/musepack/Makefile.in
index d67d1d00..8f79383c 100644
--- a/ext/musepack/Makefile.in
+++ b/ext/musepack/Makefile.in
@@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/musepack/gstmusepackdec.c b/ext/musepack/gstmusepackdec.c
index 555474ed..6ea72479 100644
--- a/ext/musepack/gstmusepackdec.c
+++ b/ext/musepack/gstmusepackdec.c
@@ -88,7 +88,7 @@ gst_musepackdec_base_init (gpointer klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&sink_template));
- gst_element_class_set_metadata (element_class, "Musepack decoder",
+ gst_element_class_set_static_metadata (element_class, "Musepack decoder",
"Codec/Decoder/Audio",
"Musepack decoder", "Ronald Bultje <rbultje@ronald.bitfreak.net>");
}
diff --git a/ext/musicbrainz/Makefile.in b/ext/musicbrainz/Makefile.in
index 0bb094c2..ae4dae2a 100644
--- a/ext/musicbrainz/Makefile.in
+++ b/ext/musicbrainz/Makefile.in
@@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/musicbrainz/gsttrm.c b/ext/musicbrainz/gsttrm.c
index d2e3896d..aee67ab9 100644
--- a/ext/musicbrainz/gsttrm.c
+++ b/ext/musicbrainz/gsttrm.c
@@ -117,7 +117,7 @@ gst_trm_base_init (gpointer klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&sink_template));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"MusicBrainz TRM generator", "Filter/Analyzer/Audio",
"Compute MusicBrainz TRM Id using libmusicbrainz",
"Jeremy Simon <jsimon13@yahoo.fr>");
diff --git a/ext/mythtv/Makefile.in b/ext/mythtv/Makefile.in
index f9691c11..68522a26 100644
--- a/ext/mythtv/Makefile.in
+++ b/ext/mythtv/Makefile.in
@@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/mythtv/gstmythtvsrc.c b/ext/mythtv/gstmythtvsrc.c
index c0a209ba..a87d4834 100644
--- a/ext/mythtv/gstmythtvsrc.c
+++ b/ext/mythtv/gstmythtvsrc.c
@@ -159,7 +159,7 @@ GST_BOILERPLATE_FULL (GstMythtvSrc, gst_mythtv_src, GstPushSrc,
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&srctemplate));
- gst_element_class_set_metadata (element_class, "MythTV client source",
+ gst_element_class_set_static_metadata (element_class, "MythTV client source",
"Source/Network",
"Control and receive data as a client over the network "
"via raw socket connections using the MythTV protocol",
diff --git a/ext/nas/Makefile.in b/ext/nas/Makefile.in
index 5408ba8c..dafb7ab7 100644
--- a/ext/nas/Makefile.in
+++ b/ext/nas/Makefile.in
@@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/nas/nassink.c b/ext/nas/nassink.c
index 739814bc..4fe32570 100644
--- a/ext/nas/nassink.c
+++ b/ext/nas/nassink.c
@@ -96,7 +96,7 @@ gst_nas_sink_base_init (gpointer g_class)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&sink_factory));
- gst_element_class_set_metadata (element_class, "NAS audio sink",
+ gst_element_class_set_static_metadata (element_class, "NAS audio sink",
"Sink/Audio",
"Plays audio to a Network Audio Server",
"Laurent Vivier <Laurent.Vivier@bull.net>, "
diff --git a/ext/neon/Makefile.in b/ext/neon/Makefile.in
index ddd4b5c4..f9eb2ae3 100644
--- a/ext/neon/Makefile.in
+++ b/ext/neon/Makefile.in
@@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/neon/gstneonhttpsrc.c b/ext/neon/gstneonhttpsrc.c
index 83c2714b..bf8617be 100644
--- a/ext/neon/gstneonhttpsrc.c
+++ b/ext/neon/gstneonhttpsrc.c
@@ -130,7 +130,7 @@ gst_neonhttp_src_base_init (gpointer g_class)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&srctemplate));
- gst_element_class_set_metadata (element_class, "HTTP client source",
+ gst_element_class_set_static_metadata (element_class, "HTTP client source",
"Source/Network",
"Receive data as a client over the network via HTTP using NEON",
"Edgard Lima <edgard.lima@indt.org.br>, "
diff --git a/ext/ofa/Makefile.in b/ext/ofa/Makefile.in
index 6a2a908b..8ae47a45 100644
--- a/ext/ofa/Makefile.in
+++ b/ext/ofa/Makefile.in
@@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/ofa/gstofa.c b/ext/ofa/gstofa.c
index eecc1352..3a78a892 100644
--- a/ext/ofa/gstofa.c
+++ b/ext/ofa/gstofa.c
@@ -65,7 +65,7 @@ gst_ofa_base_init (gpointer g_class)
GstAudioFilterClass *audio_filter_class = (GstAudioFilterClass *) g_class;
GstCaps *caps;
- gst_element_class_set_metadata (gstelement_class, "OFA",
+ gst_element_class_set_static_metadata (gstelement_class, "OFA",
"MusicIP Fingerprinting element",
"Find a music fingerprint using MusicIP's libofa",
"Milosz Derezynski <internalerror@gmail.com>, Eric Buehl <eric.buehl@gmail.com>");
diff --git a/ext/openal/Makefile.in b/ext/openal/Makefile.in
index fc14610e..bc5d327c 100644
--- a/ext/openal/Makefile.in
+++ b/ext/openal/Makefile.in
@@ -255,6 +255,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/openal/gstopenalsink.c b/ext/openal/gstopenalsink.c
index 6d7ffd25..aaad00a6 100644
--- a/ext/openal/gstopenalsink.c
+++ b/ext/openal/gstopenalsink.c
@@ -168,7 +168,7 @@ gst_openal_sink_base_init (gpointer gclass)
GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
GstPadTemplate *pad_template;
- gst_element_class_set_metadata (element_class, "Audio sink (OpenAL)",
+ gst_element_class_set_static_metadata (element_class, "Audio sink (OpenAL)",
"Sink/Audio",
"Output to a sound device via OpenAL",
"Chris Robinson <chris.kcat@gmail.com>");
diff --git a/ext/openal/gstopenalsrc.c b/ext/openal/gstopenalsrc.c
index 4313022a..f82d594c 100644
--- a/ext/openal/gstopenalsrc.c
+++ b/ext/openal/gstopenalsrc.c
@@ -137,7 +137,7 @@ gst_openal_src_base_init (gpointer gclass)
GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
- gst_element_class_set_metadata (element_class, "OpenAL src",
+ gst_element_class_set_static_metadata (element_class, "OpenAL src",
"Source/Audio",
"OpenAL source capture audio from device",
"Victor Lin <bornstub@gmail.com>");
diff --git a/ext/opencv/Makefile.in b/ext/opencv/Makefile.in
index d0a90c86..85772cc3 100644
--- a/ext/opencv/Makefile.in
+++ b/ext/opencv/Makefile.in
@@ -282,6 +282,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/opencv/gstcvdilate.c b/ext/opencv/gstcvdilate.c
index fae3ec2f..09b3de4a 100644
--- a/ext/opencv/gstcvdilate.c
+++ b/ext/opencv/gstcvdilate.c
@@ -70,7 +70,7 @@ gst_cv_dilate_class_init (GstCvDilateClass * klass)
gstopencvbasefilter_class->cv_trans_ip_func = gst_cv_dilate_transform_ip;
gstopencvbasefilter_class->cv_trans_func = gst_cv_dilate_transform;
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"cvdilate",
"Transform/Effect/Video",
"Applies cvDilate OpenCV function to the image",
diff --git a/ext/opencv/gstcvequalizehist.c b/ext/opencv/gstcvequalizehist.c
index 76a49a24..c6e4e849 100644
--- a/ext/opencv/gstcvequalizehist.c
+++ b/ext/opencv/gstcvequalizehist.c
@@ -85,7 +85,7 @@ gst_cv_equalize_hist_class_init (GstCvEqualizeHistClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&sink_factory));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"cvequalizehist",
"Transform/Effect/Video",
"Applies cvEqualizeHist OpenCV function to the image",
diff --git a/ext/opencv/gstcverode.c b/ext/opencv/gstcverode.c
index b376d1d8..69794eda 100644
--- a/ext/opencv/gstcverode.c
+++ b/ext/opencv/gstcverode.c
@@ -70,7 +70,7 @@ gst_cv_erode_class_init (GstCvErodeClass * klass)
gstopencvbasefilter_class->cv_trans_ip_func = gst_cv_erode_transform_ip;
gstopencvbasefilter_class->cv_trans_func = gst_cv_erode_transform;
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"cverode",
"Transform/Effect/Video",
"Applies cvErode OpenCV function to the image",
diff --git a/ext/opencv/gstcvlaplace.c b/ext/opencv/gstcvlaplace.c
index 9a854903..7ecd5243 100644
--- a/ext/opencv/gstcvlaplace.c
+++ b/ext/opencv/gstcvlaplace.c
@@ -148,7 +148,7 @@ gst_cv_laplace_class_init (GstCvLaplaceClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&sink_factory));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"cvlaplace",
"Transform/Effect/Video",
"Applies cvLaplace OpenCV function to the image",
diff --git a/ext/opencv/gstcvsmooth.c b/ext/opencv/gstcvsmooth.c
index 439de9ee..b1b405ad 100644
--- a/ext/opencv/gstcvsmooth.c
+++ b/ext/opencv/gstcvsmooth.c
@@ -175,7 +175,7 @@ gst_cv_smooth_class_init (GstCvSmoothClass * klass)
0, G_MAXDOUBLE, DEFAULT_PARAM4,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"cvsmooth",
"Transform/Effect/Video",
"Applies cvSmooth OpenCV function to the image",
diff --git a/ext/opencv/gstcvsobel.c b/ext/opencv/gstcvsobel.c
index 414ed569..a31c9bfe 100644
--- a/ext/opencv/gstcvsobel.c
+++ b/ext/opencv/gstcvsobel.c
@@ -143,7 +143,7 @@ gst_cv_sobel_class_init (GstCvSobelClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&sink_factory));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"cvsobel",
"Transform/Effect/Video",
"Applies cvSobel OpenCV function to the image",
diff --git a/ext/opencv/gstedgedetect.c b/ext/opencv/gstedgedetect.c
index a4b806fc..91b63bf7 100644
--- a/ext/opencv/gstedgedetect.c
+++ b/ext/opencv/gstedgedetect.c
@@ -158,7 +158,7 @@ gst_edge_detect_class_init (GstEdgeDetectClass * klass)
"Aperture size for Sobel operator (Must be either 3, 5 or 7", 3, 7, 3,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"edgedetect",
"Filter/Effect/Video",
"Performs canny edge detection on videos and images.",
diff --git a/ext/opencv/gstfaceblur.c b/ext/opencv/gstfaceblur.c
index c0a6c596..51c7fe01 100644
--- a/ext/opencv/gstfaceblur.c
+++ b/ext/opencv/gstfaceblur.c
@@ -147,7 +147,7 @@ gst_face_blur_class_init (GstFaceBlurClass * klass)
"Location of Haar cascade file to use for face blurion",
DEFAULT_PROFILE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"faceblur",
"Filter/Effect/Video",
"Blurs faces in images and videos",
diff --git a/ext/opencv/gstfacedetect.c b/ext/opencv/gstfacedetect.c
index 66c5a922..0665c17a 100644
--- a/ext/opencv/gstfacedetect.c
+++ b/ext/opencv/gstfacedetect.c
@@ -270,7 +270,7 @@ gst_face_detect_class_init (GstFaceDetectClass * klass)
"Minimum area height to be recognized as a face", 0, G_MAXINT,
DEFAULT_MIN_SIZE_HEIGHT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"facedetect",
"Filter/Effect/Video",
"Performs face detection on videos and images, providing detected positions via bus messages",
diff --git a/ext/opencv/gstmotioncells.c b/ext/opencv/gstmotioncells.c
index efd53a3f..1d709771 100644
--- a/ext/opencv/gstmotioncells.c
+++ b/ext/opencv/gstmotioncells.c
@@ -304,7 +304,7 @@ gst_motion_cells_class_init (GstMotioncellsClass * klass)
THICKNESS_MIN, THICKNESS_MAX, THICKNESS_DEF,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"motioncells",
"Filter/Effect/Video",
"Performs motion detection on videos and images, providing detected motion cells index via bus messages",
diff --git a/ext/opencv/gstpyramidsegment.c b/ext/opencv/gstpyramidsegment.c
index 2eb4dd3c..ed249a54 100644
--- a/ext/opencv/gstpyramidsegment.c
+++ b/ext/opencv/gstpyramidsegment.c
@@ -162,7 +162,7 @@ gst_pyramid_segment_class_init (GstPyramidSegmentClass * klass)
"Maximum level of the pyramid segmentation", 0, 4, 4,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"pyramidsegment",
"Filter/Effect/Video",
"Applies pyramid segmentation to a video or image.",
diff --git a/ext/opencv/gsttemplatematch.c b/ext/opencv/gsttemplatematch.c
index 92d85002..405c7868 100644
--- a/ext/opencv/gsttemplatematch.c
+++ b/ext/opencv/gsttemplatematch.c
@@ -144,7 +144,7 @@ gst_template_match_class_init (GstTemplateMatchClass * klass)
"Sets whether the detected template should be highlighted in the output",
TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"templatematch",
"Filter/Effect/Video",
"Performs template matching on videos and images, providing detected positions via bus messages.",
diff --git a/ext/opencv/gsttextoverlay.c b/ext/opencv/gsttextoverlay.c
index 5e3aeea6..5ec9a6c9 100644
--- a/ext/opencv/gsttextoverlay.c
+++ b/ext/opencv/gsttextoverlay.c
@@ -200,7 +200,7 @@ gst_opencv_text_overlay_class_init (GstOpencvTextOverlayClass * klass)
"Sets the width of fonts", 1.0, 5.0,
DEFAULT_WIDTH, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"opencvtextoverlay",
"Filter/Effect/Video",
"Write text on the top of video", "sreerenj<bsreerenj@gmail.com>");
@@ -351,7 +351,8 @@ gst_opencv_text_overlay_handle_sink_event (GstPad * pad, GstObject * parent,
gst_structure_get_int (structure, "height", &height);
if (!filter->cvImage) {
- filter->cvImage = cvCreateImage (cvSize (width, height), IPL_DEPTH_8U, 3);
+ filter->cvImage =
+ cvCreateImage (cvSize (width, height), IPL_DEPTH_8U, 3);
filter->cvStorage = cvCreateMemStorage (0);
}
break;
diff --git a/ext/opus/Makefile.in b/ext/opus/Makefile.in
index 1655e27e..73452787 100644
--- a/ext/opus/Makefile.in
+++ b/ext/opus/Makefile.in
@@ -255,6 +255,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/opus/gstopusdec.c b/ext/opus/gstopusdec.c
index c4335265..12e1652f 100644
--- a/ext/opus/gstopusdec.c
+++ b/ext/opus/gstopusdec.c
@@ -121,7 +121,7 @@ gst_opus_dec_class_init (GstOpusDecClass * klass)
gst_static_pad_template_get (&opus_dec_src_factory));
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&opus_dec_sink_factory));
- gst_element_class_set_metadata (element_class, "Opus audio decoder",
+ gst_element_class_set_static_metadata (element_class, "Opus audio decoder",
"Codec/Decoder/Audio",
"decode opus streams to audio",
"Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>");
@@ -453,7 +453,7 @@ opus_dec_chain_parse_data (GstOpusDec * dec, GstBuffer * buffer)
n = opus_multistream_decode (dec->state, data, size, out_data, samples, 0);
}
gst_buffer_unmap (outbuf, &omap);
- if (buf)
+ if (data != NULL)
gst_buffer_unmap (buf, &map);
if (n < 0) {
diff --git a/ext/opus/gstopusenc.c b/ext/opus/gstopusenc.c
index a33f0e45..f6f83788 100644
--- a/ext/opus/gstopusenc.c
+++ b/ext/opus/gstopusenc.c
@@ -205,7 +205,7 @@ gst_opus_enc_class_init (GstOpusEncClass * klass)
gst_static_pad_template_get (&src_factory));
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&sink_factory));
- gst_element_class_set_metadata (gstelement_class, "Opus audio encoder",
+ gst_element_class_set_static_metadata (gstelement_class, "Opus audio encoder",
"Codec/Encoder/Audio",
"Encodes audio in Opus format",
"Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>");
diff --git a/ext/opus/gstopusparse.c b/ext/opus/gstopusparse.c
index 740dbb1f..69ddb179 100644
--- a/ext/opus/gstopusparse.c
+++ b/ext/opus/gstopusparse.c
@@ -88,7 +88,7 @@ gst_opus_parse_class_init (GstOpusParseClass * klass)
gst_static_pad_template_get (&opus_parse_src_factory));
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&opus_parse_sink_factory));
- gst_element_class_set_metadata (element_class, "Opus audio parser",
+ gst_element_class_set_static_metadata (element_class, "Opus audio parser",
"Codec/Parser/Audio",
"parses opus audio streams",
"Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>");
diff --git a/ext/opus/gstrtpopusdepay.c b/ext/opus/gstrtpopusdepay.c
index dba1c145..8d89e282 100644
--- a/ext/opus/gstrtpopusdepay.c
+++ b/ext/opus/gstrtpopusdepay.c
@@ -70,7 +70,7 @@ gst_rtp_opus_depay_class_init (GstRTPOpusDepayClass * klass)
gst_static_pad_template_get (&gst_rtp_opus_depay_src_template));
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_rtp_opus_depay_sink_template));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"RTP Opus packet depayloader", "Codec/Depayloader/Network/RTP",
"Extracts Opus audio from RTP packets",
"Danilo Cesar Lemes de Paula <danilo.cesar@collabora.co.uk>");
diff --git a/ext/opus/gstrtpopuspay.c b/ext/opus/gstrtpopuspay.c
index e1781e1b..5ba3217c 100644
--- a/ext/opus/gstrtpopuspay.c
+++ b/ext/opus/gstrtpopuspay.c
@@ -75,7 +75,7 @@ gst_rtp_opus_pay_class_init (GstRtpOPUSPayClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_rtp_opus_pay_sink_template));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"RTP Opus payloader",
"Codec/Payloader/Network/RTP",
"Puts Opus audio in RTP packets",
@@ -94,16 +94,10 @@ static gboolean
gst_rtp_opus_pay_setcaps (GstRTPBasePayload * payload, GstCaps * caps)
{
gboolean res;
- gchar *capsstr;
-
- capsstr = gst_caps_to_string (caps);
gst_rtp_base_payload_set_options (payload, "audio", FALSE,
"X-GST-OPUS-DRAFT-SPITTKA-00", 48000);
- res =
- gst_rtp_base_payload_set_outcaps (payload, "caps", G_TYPE_STRING, capsstr,
- NULL);
- g_free (capsstr);
+ res = gst_rtp_base_payload_set_outcaps (payload, NULL);
return res;
}
diff --git a/ext/resindvd/Makefile.in b/ext/resindvd/Makefile.in
index 02c84807..eb5a2c60 100644
--- a/ext/resindvd/Makefile.in
+++ b/ext/resindvd/Makefile.in
@@ -260,6 +260,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/resindvd/gstmpegdemux.c b/ext/resindvd/gstmpegdemux.c
index bd1d870f..a03eab3a 100644
--- a/ext/resindvd/gstmpegdemux.c
+++ b/ext/resindvd/gstmpegdemux.c
@@ -185,7 +185,7 @@ gst_flups_demux_base_init (GstFluPSDemuxClass * klass)
gst_element_class_add_pad_template (element_class, klass->private_template);
gst_element_class_add_pad_template (element_class, klass->sink_template);
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"MPEG Program Demuxer", "Codec/Demuxer",
"Demultiplexes MPEG Program Streams",
"Jan Schmidt <thaytan@noraisin.net>");
diff --git a/ext/resindvd/resindvdbin.c b/ext/resindvd/resindvdbin.c
index 8cff8fb3..ec6d6193 100644
--- a/ext/resindvd/resindvdbin.c
+++ b/ext/resindvd/resindvdbin.c
@@ -127,7 +127,7 @@ rsn_dvdbin_class_init (RsnDvdBinClass * klass)
element_class->change_state = GST_DEBUG_FUNCPTR (rsn_dvdbin_change_state);
- gst_element_class_set_metadata (element_class, "rsndvdbin",
+ gst_element_class_set_static_metadata (element_class, "rsndvdbin",
"Generic/Bin/Player",
"DVD playback element", "Jan Schmidt <thaytan@noraisin.net>");
}
diff --git a/ext/resindvd/resindvdsrc.c b/ext/resindvd/resindvdsrc.c
index 1bfb7841..44eb4793 100644
--- a/ext/resindvd/resindvdsrc.c
+++ b/ext/resindvd/resindvdsrc.c
@@ -231,7 +231,7 @@ rsn_dvdsrc_class_init (resinDvdSrcClass * klass)
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&src_factory));
- gst_element_class_set_metadata (gstelement_class, "Resin DVD Src",
+ gst_element_class_set_static_metadata (gstelement_class, "Resin DVD Src",
"Source/DVD", "DVD source element", "Jan Schmidt <thaytan@noraisin.net>");
}
diff --git a/ext/resindvd/rsndec.c b/ext/resindvd/rsndec.c
index 81e15d6d..3f72426c 100644
--- a/ext/resindvd/rsndec.c
+++ b/ext/resindvd/rsndec.c
@@ -410,7 +410,7 @@ rsn_audiodec_class_init (RsnAudioDecClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&audio_sink_template));
- gst_element_class_set_metadata (element_class, "RsnAudioDec",
+ gst_element_class_set_static_metadata (element_class, "RsnAudioDec",
"Audio/Decoder",
"Resin DVD audio stream decoder", "Jan Schmidt <thaytan@noraisin.net>");
@@ -460,7 +460,7 @@ rsn_videodec_class_init (RsnAudioDecClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&video_sink_template));
- gst_element_class_set_metadata (element_class, "RsnVideoDec",
+ gst_element_class_set_static_metadata (element_class, "RsnVideoDec",
"Video/Decoder",
"Resin DVD video stream decoder", "Jan Schmidt <thaytan@noraisin.net>");
diff --git a/ext/resindvd/rsnparsetter.c b/ext/resindvd/rsnparsetter.c
index 0f2361ac..a7146584 100644
--- a/ext/resindvd/rsnparsetter.c
+++ b/ext/resindvd/rsnparsetter.c
@@ -60,7 +60,7 @@ rsn_parsetter_class_init (RsnParSetterClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&sink_factory));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"Resin Aspect Ratio Setter", "Filter/Video",
"Overrides caps on video buffers to force a particular display ratio",
"Jan Schmidt <thaytan@noraisin.net>");
diff --git a/ext/rsvg/Makefile.in b/ext/rsvg/Makefile.in
index 65013816..8624fc0e 100644
--- a/ext/rsvg/Makefile.in
+++ b/ext/rsvg/Makefile.in
@@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/rsvg/gstrsvgdec.c b/ext/rsvg/gstrsvgdec.c
index 4ad95721..f032124d 100644
--- a/ext/rsvg/gstrsvgdec.c
+++ b/ext/rsvg/gstrsvgdec.c
@@ -77,7 +77,7 @@ gst_rsvg_dec_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"SVG image decoder", "Codec/Decoder/Image",
"Uses librsvg to decode SVG images",
"Sebastian Dröge <sebastian.droege@collabora.co.uk>");
diff --git a/ext/rsvg/gstrsvgoverlay.c b/ext/rsvg/gstrsvgoverlay.c
index 31e7f6f0..64d2e1e0 100644
--- a/ext/rsvg/gstrsvgoverlay.c
+++ b/ext/rsvg/gstrsvgoverlay.c
@@ -458,7 +458,7 @@ gst_rsvg_overlay_base_init (gpointer klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&data_sink_template));
- gst_element_class_set_metadata (element_class, "RSVG overlay",
+ gst_element_class_set_static_metadata (element_class, "RSVG overlay",
"Filter/Editor/Video",
"Overlays SVG graphics over a video stream",
"Olivier Aubert <olivier.aubert@liris.cnrs.fr>");
diff --git a/ext/rtmp/Makefile.in b/ext/rtmp/Makefile.in
index 3f2758b8..d80fa7e0 100644
--- a/ext/rtmp/Makefile.in
+++ b/ext/rtmp/Makefile.in
@@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/rtmp/gstrtmpsink.c b/ext/rtmp/gstrtmpsink.c
index b22b9d91..bef7d066 100644
--- a/ext/rtmp/gstrtmpsink.c
+++ b/ext/rtmp/gstrtmpsink.c
@@ -47,6 +47,8 @@
#include <winsock2.h>
#endif
+#include <stdlib.h>
+
GST_DEBUG_CATEGORY_STATIC (gst_rtmp_sink_debug);
#define GST_CAT_DEFAULT gst_rtmp_sink_debug
@@ -100,7 +102,7 @@ gst_rtmp_sink_class_init (GstRTMPSinkClass * klass)
g_param_spec_string ("location", "RTMP Location", "RTMP url",
DEFAULT_LOCATION, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"RTMP output sink",
"Sink/Network", "Sends FLV content to a server via RTMP",
"Jan Schmidt <thaytan@noraisin.net>");
@@ -241,7 +243,7 @@ gst_rtmp_sink_render (GstBaseSink * bsink, GstBuffer * buf)
gst_buffer_map (buf, &map, GST_MAP_READ);
- if (!RTMP_Write (sink->rtmp, (char *) map.data, map.size))
+ if (RTMP_Write (sink->rtmp, (char *) map.data, map.size) <= 0)
goto write_failed;
gst_buffer_unmap (buf, &map);
@@ -293,6 +295,7 @@ gst_rtmp_sink_uri_set_uri (GstURIHandler * handler, const gchar * uri,
GError ** error)
{
GstRTMPSink *sink = GST_RTMP_SINK (handler);
+ gboolean ret = TRUE;
if (GST_STATE (sink) >= GST_STATE_PAUSED) {
g_set_error (error, GST_URI_ERROR, GST_URI_ERROR_BAD_STATE,
@@ -315,14 +318,19 @@ gst_rtmp_sink_uri_set_uri (GstURIHandler * handler, const gchar * uri,
("Failed to parse URI %s", uri), (NULL));
g_set_error (error, GST_URI_ERROR, GST_URI_ERROR_BAD_URI,
"Could not parse RTMP URI");
- return FALSE;
+ ret = FALSE;
+ } else {
+ sink->uri = g_strdup (uri);
}
- sink->uri = g_strdup (uri);
+
+ if (playpath.av_val)
+ free (playpath.av_val);
}
- GST_DEBUG_OBJECT (sink, "Changed URI to %s", GST_STR_NULL (uri));
+ if (ret)
+ GST_DEBUG_OBJECT (sink, "Changed URI to %s", GST_STR_NULL (uri));
- return TRUE;
+ return ret;
}
static void
diff --git a/ext/rtmp/gstrtmpsrc.c b/ext/rtmp/gstrtmpsrc.c
index b22ba958..c1a5845a 100644
--- a/ext/rtmp/gstrtmpsrc.c
+++ b/ext/rtmp/gstrtmpsrc.c
@@ -127,7 +127,7 @@ gst_rtmp_src_class_init (GstRTMPSrcClass * klass)
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&srctemplate));
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"RTMP Source",
"Source/File",
"Read RTMP streams",
diff --git a/ext/schroedinger/Makefile.in b/ext/schroedinger/Makefile.in
index 51b3ebff..9be1cc04 100644
--- a/ext/schroedinger/Makefile.in
+++ b/ext/schroedinger/Makefile.in
@@ -253,6 +253,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/schroedinger/gstschrodec.c b/ext/schroedinger/gstschrodec.c
index cd12d8bc..508c7742 100644
--- a/ext/schroedinger/gstschrodec.c
+++ b/ext/schroedinger/gstschrodec.c
@@ -129,7 +129,7 @@ gst_schro_dec_class_init (GstSchroDecClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_schro_dec_sink_template));
- gst_element_class_set_metadata (element_class, "Dirac Decoder",
+ gst_element_class_set_static_metadata (element_class, "Dirac Decoder",
"Codec/Decoder/Video",
"Decode Dirac streams", "David Schleef <ds@schleef.org>");
diff --git a/ext/schroedinger/gstschroenc.c b/ext/schroedinger/gstschroenc.c
index 04fabf41..7173a25b 100644
--- a/ext/schroedinger/gstschroenc.c
+++ b/ext/schroedinger/gstschroenc.c
@@ -219,7 +219,7 @@ gst_schro_enc_class_init (GstSchroEncClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_schro_enc_sink_template));
- gst_element_class_set_metadata (element_class, "Dirac Encoder",
+ gst_element_class_set_static_metadata (element_class, "Dirac Encoder",
"Codec/Encoder/Video",
"Encode raw video into Dirac stream", "David Schleef <ds@schleef.org>");
diff --git a/ext/sdl/Makefile.in b/ext/sdl/Makefile.in
index 9d5a1f5e..f843ae5a 100644
--- a/ext/sdl/Makefile.in
+++ b/ext/sdl/Makefile.in
@@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/sdl/sdlaudiosink.c b/ext/sdl/sdlaudiosink.c
index e5279e51..87dd7309 100644
--- a/ext/sdl/sdlaudiosink.c
+++ b/ext/sdl/sdlaudiosink.c
@@ -146,7 +146,7 @@ gst_sdlaudio_sink_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_set_metadata (element_class, "SDL audio sink",
+ gst_element_class_set_static_metadata (element_class, "SDL audio sink",
"Sink/Audio",
"Output to a sound card via SDLAUDIO",
"Edgard Lima <edgard.lima@indt.org.br>");
diff --git a/ext/sdl/sdlvideosink.c b/ext/sdl/sdlvideosink.c
index e976466a..ffc70c36 100644
--- a/ext/sdl/sdlvideosink.c
+++ b/ext/sdl/sdlvideosink.c
@@ -152,7 +152,7 @@ gst_sdlvideosink_base_init (gpointer g_class)
GST_PAD_SINK, GST_PAD_ALWAYS, capslist);
gst_element_class_add_pad_template (element_class, sink_template);
- gst_element_class_set_metadata (element_class, "SDL video sink",
+ gst_element_class_set_static_metadata (element_class, "SDL video sink",
"Sink/Video", "An SDL-based videosink",
"Ronald Bultje <rbultje@ronald.bitfreak.net>, "
"Edgard Lima <edgard.lima@indt.org.br>, "
diff --git a/ext/sndfile/Makefile.in b/ext/sndfile/Makefile.in
index 3b8bbcf4..0fc8a2e3 100644
--- a/ext/sndfile/Makefile.in
+++ b/ext/sndfile/Makefile.in
@@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/sndfile/gstsfsink.c b/ext/sndfile/gstsfsink.c
index acb54368..fafd81ef 100644
--- a/ext/sndfile/gstsfsink.c
+++ b/ext/sndfile/gstsfsink.c
@@ -86,7 +86,7 @@ gst_sf_sink_base_init (gpointer g_class)
GST_DEBUG_CATEGORY_INIT (gst_sf_debug, "sfsink", 0, "sfsink element");
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&sf_sink_factory));
- gst_element_class_set_metadata (element_class, "Sndfile sink",
+ gst_element_class_set_static_metadata (element_class, "Sndfile sink",
"Sink/Audio",
"Write audio streams to disk using libsndfile",
"Andy Wingo <wingo at pobox dot com>");
diff --git a/ext/sndfile/gstsfsrc.c b/ext/sndfile/gstsfsrc.c
index ae45f9f8..a2dac492 100644
--- a/ext/sndfile/gstsfsrc.c
+++ b/ext/sndfile/gstsfsrc.c
@@ -86,7 +86,7 @@ gst_sf_src_base_init (gpointer g_class)
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&sf_src_factory));
- gst_element_class_set_metadata (gstelement_class, "Sndfile source",
+ gst_element_class_set_static_metadata (gstelement_class, "Sndfile source",
"Source/Audio",
"Read audio streams from disk using libsndfile",
"Andy Wingo <wingo at pobox dot com>");
diff --git a/ext/sndio/Makefile.in b/ext/sndio/Makefile.in
index 73b6346a..10512a60 100644
--- a/ext/sndio/Makefile.in
+++ b/ext/sndio/Makefile.in
@@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/sndio/sndiosink.c b/ext/sndio/sndiosink.c
index 7b814fab..d2680a54 100644
--- a/ext/sndio/sndiosink.c
+++ b/ext/sndio/sndiosink.c
@@ -51,7 +51,7 @@ enum
};
static GstStaticPadTemplate sndio_sink_factory =
- GST_STATIC_PAD_TEMPLATE ("sink",
+GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
GST_STATIC_CAPS ("audio/x-raw-int, "
@@ -59,8 +59,7 @@ static GstStaticPadTemplate sndio_sink_factory =
"signed = (boolean) { TRUE, FALSE }, "
"width = (int) { 8, 16, 24, 32 }, "
"depth = (int) { 8, 16, 24, 32 }, "
- "rate = (int) [ 8000, 192000 ], "
- "channels = (int) [ 1, 16 ] ")
+ "rate = (int) [ 8000, 192000 ], " "channels = (int) [ 1, 16 ] ")
);
static void gst_sndiosink_finalize (GObject * object);
@@ -91,11 +90,10 @@ gst_sndiosink_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"Sndio audio sink",
"Sink/Audio",
- "Plays audio through sndio",
- "Jacob Meuser <jakemsr@sdf.lonestar.org>");
+ "Plays audio through sndio", "Jacob Meuser <jakemsr@sdf.lonestar.org>");
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&sndio_sink_factory));
@@ -123,8 +121,7 @@ gst_sndiosink_class_init (GstSndioSinkClass * klass)
gstaudiosink_class->open = GST_DEBUG_FUNCPTR (gst_sndiosink_open);
gstaudiosink_class->close = GST_DEBUG_FUNCPTR (gst_sndiosink_close);
gstaudiosink_class->prepare = GST_DEBUG_FUNCPTR (gst_sndiosink_prepare);
- gstaudiosink_class->unprepare =
- GST_DEBUG_FUNCPTR (gst_sndiosink_unprepare);
+ gstaudiosink_class->unprepare = GST_DEBUG_FUNCPTR (gst_sndiosink_unprepare);
gstaudiosink_class->write = GST_DEBUG_FUNCPTR (gst_sndiosink_write);
gstaudiosink_class->delay = GST_DEBUG_FUNCPTR (gst_sndiosink_delay);
gstaudiosink_class->reset = GST_DEBUG_FUNCPTR (gst_sndiosink_reset);
@@ -139,8 +136,7 @@ gst_sndiosink_class_init (GstSndioSinkClass * klass)
}
static void
-gst_sndiosink_init (GstSndioSink * sndiosink,
- GstSndioSinkClass * klass)
+gst_sndiosink_init (GstSndioSink * sndiosink, GstSndioSinkClass * klass)
{
sndiosink->hdl = NULL;
sndiosink->host = g_strdup (g_getenv ("AUDIODEVICE"));
@@ -170,8 +166,7 @@ gst_sndiosink_getcaps (GstBaseSink * bsink)
return NULL;
}
- GST_LOG_OBJECT (sndiosink, "returning %" GST_PTR_FORMAT,
- sndiosink->cur_caps);
+ GST_LOG_OBJECT (sndiosink, "returning %" GST_PTR_FORMAT, sndiosink->cur_caps);
return gst_caps_ref (sndiosink->cur_caps);
}
diff --git a/ext/sndio/sndiosrc.c b/ext/sndio/sndiosrc.c
index cd209a09..19776c2d 100644
--- a/ext/sndio/sndiosrc.c
+++ b/ext/sndio/sndiosrc.c
@@ -50,8 +50,7 @@ enum
PROP_HOST
};
-static GstStaticPadTemplate sndio_src_factory =
- GST_STATIC_PAD_TEMPLATE ("src",
+static GstStaticPadTemplate sndio_src_factory = GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
GST_STATIC_CAPS ("audio/x-raw-int, "
@@ -59,8 +58,7 @@ static GstStaticPadTemplate sndio_src_factory =
"signed = (boolean) { TRUE, FALSE }, "
"width = (int) { 8, 16, 24, 32 }, "
"depth = (int) { 8, 16, 24, 32 }, "
- "rate = (int) [ 8000, 192000 ], "
- "channels = (int) [ 1, 16 ] ")
+ "rate = (int) [ 8000, 192000 ], " "channels = (int) [ 1, 16 ] ")
);
static void gst_sndiosrc_finalize (GObject * object);
@@ -83,19 +81,17 @@ static void gst_sndiosrc_get_property (GObject * object, guint prop_id,
GValue * value, GParamSpec * pspec);
static void gst_sndiosrc_cb (void *addr, int delta);
-GST_BOILERPLATE (GstSndioSrc, gst_sndiosrc, GstAudioSrc,
- GST_TYPE_AUDIO_SRC);
+GST_BOILERPLATE (GstSndioSrc, gst_sndiosrc, GstAudioSrc, GST_TYPE_AUDIO_SRC);
static void
gst_sndiosrc_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"Sndio audio source",
"Source/Audio",
- "Records audio through sndio",
- "Jacob Meuser <jakemsr@sdf.lonestar.org>");
+ "Records audio through sndio", "Jacob Meuser <jakemsr@sdf.lonestar.org>");
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&sndio_src_factory));
@@ -168,8 +164,7 @@ gst_sndiosrc_getcaps (GstBaseSrc * bsrc)
return NULL;
}
- GST_LOG_OBJECT (sndiosrc, "returning %" GST_PTR_FORMAT,
- sndiosrc->cur_caps);
+ GST_LOG_OBJECT (sndiosrc, "returning %" GST_PTR_FORMAT, sndiosrc->cur_caps);
return gst_caps_ref (sndiosrc->cur_caps);
}
@@ -301,8 +296,7 @@ gst_sndiosrc_open (GstAudioSrc * asrc)
g_array_free (chans, TRUE);
pad_template = gst_static_pad_template_get (&sndio_src_factory);
- sndiosrc->cur_caps =
- gst_caps_copy (gst_pad_template_get_caps (pad_template));
+ sndiosrc->cur_caps = gst_caps_copy (gst_pad_template_get_caps (pad_template));
gst_object_unref (pad_template);
for (i = 0; i < sndiosrc->cur_caps->structs->len; i++) {
diff --git a/ext/soundtouch/Makefile.in b/ext/soundtouch/Makefile.in
index 3ad1c0ff..8a48d0d1 100644
--- a/ext/soundtouch/Makefile.in
+++ b/ext/soundtouch/Makefile.in
@@ -269,6 +269,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/soundtouch/gstbpmdetect.cc b/ext/soundtouch/gstbpmdetect.cc
index fec45c96..e9d6f11a 100644
--- a/ext/soundtouch/gstbpmdetect.cc
+++ b/ext/soundtouch/gstbpmdetect.cc
@@ -87,7 +87,7 @@ gst_bpm_detect_class_init (GstBPMDetectClass * klass)
gobject_class->finalize = gst_bpm_detect_finalize;
- gst_element_class_set_metadata (element_class, "BPM Detector",
+ gst_element_class_set_static_metadata (element_class, "BPM Detector",
"Filter/Analyzer/Audio", "Detect the BPM of an audio stream",
"Sebastian Dröge <slomo@circular-chaos.org>");
diff --git a/ext/soundtouch/gstpitch.cc b/ext/soundtouch/gstpitch.cc
index 1f8ca9e6..fd36d210 100644
--- a/ext/soundtouch/gstpitch.cc
+++ b/ext/soundtouch/gstpitch.cc
@@ -152,7 +152,7 @@ gst_pitch_class_init (GstPitchClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_pitch_sink_template));
- gst_element_class_set_metadata (element_class, "Pitch controller",
+ gst_element_class_set_static_metadata (element_class, "Pitch controller",
"Filter/Effect/Audio", "Control the pitch of an audio stream",
"Wouter Paesen <wouter@blue-gate.be>");
}
@@ -667,7 +667,7 @@ gst_pitch_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
/* this function returns FALSE if not enough data is known to transform the
* segment into proper downstream values. If the function does return false
- * the sgement should be stalled until enough information is available.
+ * the segment should be stalled until enough information is available.
* If the funtion returns TRUE, event will be replaced by the new downstream
* compatible event.
*/
@@ -901,7 +901,7 @@ gst_pitch_change_state (GstElement * element, GstStateChange transition)
case GST_STATE_CHANGE_NULL_TO_READY:
break;
case GST_STATE_CHANGE_READY_TO_PAUSED:
- pitch->next_buffer_time = 0;
+ pitch->next_buffer_time = GST_CLOCK_TIME_NONE;
pitch->next_buffer_offset = 0;
pitch->priv->st->clear ();
pitch->min_latency = pitch->max_latency = 0;
diff --git a/ext/spandsp/Makefile.in b/ext/spandsp/Makefile.in
index c6fa9a66..8b4eab45 100644
--- a/ext/spandsp/Makefile.in
+++ b/ext/spandsp/Makefile.in
@@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/spandsp/gstspanplc.c b/ext/spandsp/gstspanplc.c
index 4924117a..f30f58c8 100644
--- a/ext/spandsp/gstspanplc.c
+++ b/ext/spandsp/gstspanplc.c
@@ -78,7 +78,7 @@ gst_span_plc_class_init (GstSpanPlcClass * klass)
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&sink_factory));
- gst_element_class_set_metadata (gstelement_class, "SpanDSP PLC",
+ gst_element_class_set_static_metadata (gstelement_class, "SpanDSP PLC",
"Filter/Effect/Audio",
"Adds packet loss concealment to audio",
"Youness Alaoui <youness.alaoui@collabora.co.uk>");
diff --git a/ext/spc/Makefile.in b/ext/spc/Makefile.in
index 4c0e1fd9..6ef74990 100644
--- a/ext/spc/Makefile.in
+++ b/ext/spc/Makefile.in
@@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/spc/gstspc.c b/ext/spc/gstspc.c
index 48c14b92..bd4ea93e 100644
--- a/ext/spc/gstspc.c
+++ b/ext/spc/gstspc.c
@@ -76,7 +76,7 @@ gst_spc_dec_class_init (GstSpcDecClass * klass)
GstElementClass *element_class = (GstElementClass *) klass;
GObjectClass *gobject_class = (GObjectClass *) klass;
- gst_element_class_set_metadata (element_class, "OpenSPC SPC decoder",
+ gst_element_class_set_static_metadata (element_class, "OpenSPC SPC decoder",
"Codec/Audio/Decoder",
"Uses OpenSPC to emulate an SPC processor",
"Chris Lee <clee@kde.org>, Brian Koropoff <bkoropoff@gmail.com>");
diff --git a/ext/swfdec/Makefile.in b/ext/swfdec/Makefile.in
index 8725eb26..8cef883b 100644
--- a/ext/swfdec/Makefile.in
+++ b/ext/swfdec/Makefile.in
@@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/swfdec/gstswfdec.c b/ext/swfdec/gstswfdec.c
index 17c9dbfd..a5483e35 100644
--- a/ext/swfdec/gstswfdec.c
+++ b/ext/swfdec/gstswfdec.c
@@ -208,7 +208,7 @@ gst_swfdec_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_set_metadata (element_class, "SWF video decoder",
+ gst_element_class_set_static_metadata (element_class, "SWF video decoder",
"Codec/Decoder/Video",
"Uses libswfdec to decode Flash video streams",
"David Schleef <ds@schleef.org>");
diff --git a/ext/teletextdec/Makefile.in b/ext/teletextdec/Makefile.in
index 6acc51e4..31d9d481 100644
--- a/ext/teletextdec/Makefile.in
+++ b/ext/teletextdec/Makefile.in
@@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/teletextdec/gstteletextdec.c b/ext/teletextdec/gstteletextdec.c
index 79fad6c0..622b972d 100644
--- a/ext/teletextdec/gstteletextdec.c
+++ b/ext/teletextdec/gstteletextdec.c
@@ -189,7 +189,7 @@ gst_teletextdec_base_init (gpointer klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"Teletext decoder",
"Decoder",
"Decode PES or raw VBI stream containing teletext information to RGBA, HTML and text",
diff --git a/ext/timidity/Makefile.in b/ext/timidity/Makefile.in
index fec9dcd1..25309c94 100644
--- a/ext/timidity/Makefile.in
+++ b/ext/timidity/Makefile.in
@@ -269,6 +269,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/timidity/gsttimidity.c b/ext/timidity/gsttimidity.c
index a82b348c..dbeb1b6a 100644
--- a/ext/timidity/gsttimidity.c
+++ b/ext/timidity/gsttimidity.c
@@ -99,7 +99,7 @@ gst_timidity_base_init (gpointer gclass)
gst_static_pad_template_get (&src_factory));
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&sink_factory));
- gst_element_class_set_metadata (element_class, "Timidity",
+ gst_element_class_set_static_metadata (element_class, "Timidity",
"Codec/Decoder/Audio",
"Midi Synthesizer Element", "Wouter Paesen <wouter@blue-gate.be>");
}
diff --git a/ext/timidity/gstwildmidi.c b/ext/timidity/gstwildmidi.c
index 707e0360..fd4b78ad 100644
--- a/ext/timidity/gstwildmidi.c
+++ b/ext/timidity/gstwildmidi.c
@@ -128,7 +128,7 @@ gst_wildmidi_base_init (gpointer gclass)
gst_static_pad_template_get (&src_factory));
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&sink_factory));
- gst_element_class_set_metadata (element_class, "WildMidi",
+ gst_element_class_set_static_metadata (element_class, "WildMidi",
"Codec/Decoder/Audio",
"Midi Synthesizer Element", "Wouter Paesen <wouter@blue-gate.be>");
}
diff --git a/ext/voaacenc/Makefile.in b/ext/voaacenc/Makefile.in
index 73a29c26..cb0b862f 100644
--- a/ext/voaacenc/Makefile.in
+++ b/ext/voaacenc/Makefile.in
@@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/voaacenc/gstvoaacenc.c b/ext/voaacenc/gstvoaacenc.c
index 2c50f414..84efa096 100644
--- a/ext/voaacenc/gstvoaacenc.c
+++ b/ext/voaacenc/gstvoaacenc.c
@@ -164,7 +164,7 @@ gst_voaacenc_class_init (GstVoAacEncClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&src_template));
- gst_element_class_set_metadata (element_class, "AAC audio encoder",
+ gst_element_class_set_static_metadata (element_class, "AAC audio encoder",
"Codec/Encoder/Audio", "AAC audio encoder", "Kan Hu <kan.hu@linaro.org>");
GST_DEBUG_CATEGORY_INIT (gst_voaacenc_debug, "voaacenc", 0, "voaac encoder");
@@ -491,8 +491,7 @@ gst_voaacenc_handle_frame (GstAudioEncoder * benc, GstBuffer * buf)
goto encode_failed;
}
- GST_LOG_OBJECT (voaacenc, "encoded to %lu bytes",
- output.Length);
+ GST_LOG_OBJECT (voaacenc, "encoded to %lu bytes", output.Length);
gst_buffer_unmap (buf, &map);
gst_buffer_unmap (out, &omap);
gst_buffer_resize (out, 0, output.Length);
diff --git a/ext/voamrwbenc/Makefile.in b/ext/voamrwbenc/Makefile.in
index 1be3ff74..718561a3 100644
--- a/ext/voamrwbenc/Makefile.in
+++ b/ext/voamrwbenc/Makefile.in
@@ -253,6 +253,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/voamrwbenc/gstvoamrwbenc.c b/ext/voamrwbenc/gstvoamrwbenc.c
index 696ab292..c1cd924d 100644
--- a/ext/voamrwbenc/gstvoamrwbenc.c
+++ b/ext/voamrwbenc/gstvoamrwbenc.c
@@ -167,7 +167,7 @@ gst_voamrwbenc_class_init (GstVoAmrWbEncClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&src_template));
- gst_element_class_set_metadata (element_class, "AMR-WB audio encoder",
+ gst_element_class_set_static_metadata (element_class, "AMR-WB audio encoder",
"Codec/Encoder/Audio",
"Adaptive Multi-Rate Wideband audio encoder",
"Renato Araujo <renato.filho@indt.org.br>");
diff --git a/ext/wayland/Makefile.in b/ext/wayland/Makefile.in
index 080bd3be..2717438b 100644
--- a/ext/wayland/Makefile.in
+++ b/ext/wayland/Makefile.in
@@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/wayland/gstwaylandsink.c b/ext/wayland/gstwaylandsink.c
index 3a6cb85d..0788f05e 100644
--- a/ext/wayland/gstwaylandsink.c
+++ b/ext/wayland/gstwaylandsink.c
@@ -88,12 +88,11 @@ gst_wayland_sink_propose_allocation (GstBaseSink * bsink, GstQuery * query);
static gboolean gst_wayland_sink_render (GstBaseSink * bsink,
GstBuffer * buffer);
-static int event_mask_update (uint32_t mask, void *data);
static struct display *create_display (void);
-static void display_handle_global (struct wl_display *display, uint32_t id,
- const char *interface, uint32_t version, void *data);
-static void frame_redraw_callback (void *data, struct wl_callback *callback,
- uint32_t time);
+static void registry_handle_global (void *data, struct wl_registry *registry,
+ uint32_t id, const char *interface, uint32_t version);
+static void frame_redraw_callback (void *data,
+ struct wl_callback *callback, uint32_t time);
static void create_window (GstWaylandSink * sink, struct display *display,
int width, int height);
static void shm_pool_destroy (struct shm_pool *pool);
@@ -116,7 +115,7 @@ gst_wayland_sink_class_init (GstWaylandSinkClass * klass)
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&sink_template));
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"wayland video sink", "Sink/Video",
"Output to wayland surface",
"Sreerenj Balachandran <sreerenj.balachandran@intel.com>");
@@ -261,16 +260,6 @@ gst_wayland_sink_get_caps (GstBaseSink * bsink, GstCaps * filter)
return caps;
}
-static int
-event_mask_update (uint32_t mask, void *data)
-{
- struct display *d = data;
-
- d->mask = mask;
-
- return 0;
-}
-
static void
shm_format (void *data, struct wl_shm *wl_shm, uint32_t format)
{
@@ -284,22 +273,26 @@ struct wl_shm_listener shm_listenter = {
};
static void
-display_handle_global (struct wl_display *display, uint32_t id,
- const char *interface, uint32_t version, void *data)
+registry_handle_global (void *data, struct wl_registry *registry,
+ uint32_t id, const char *interface, uint32_t version)
{
struct display *d = data;
if (strcmp (interface, "wl_compositor") == 0) {
- d->compositor = wl_display_bind (display, id, &wl_compositor_interface);
+ d->compositor =
+ wl_registry_bind (registry, id, &wl_compositor_interface, 1);
} else if (strcmp (interface, "wl_shell") == 0) {
- d->shell = wl_display_bind (display, id, &wl_shell_interface);
+ d->shell = wl_registry_bind (registry, id, &wl_shell_interface, 1);
} else if (strcmp (interface, "wl_shm") == 0) {
- d->shm = wl_display_bind (display, id, &wl_shm_interface);
+ d->shm = wl_registry_bind (registry, id, &wl_shm_interface, 1);
wl_shm_add_listener (d->shm, &shm_listenter, d);
}
-
}
+static const struct wl_registry_listener registry_listener = {
+ registry_handle_global
+};
+
static struct display *
create_display (void)
{
@@ -313,10 +306,15 @@ create_display (void)
return NULL;
}
- wl_display_add_global_listener (display->display,
- display_handle_global, display);
+ display->registry = wl_display_get_registry (display->display);
+ wl_registry_add_listener (display->registry, &registry_listener, display);
+
+ wl_display_roundtrip (display->display);
+ if (display->shm == NULL) {
+ GST_ERROR ("No wl_shm global..");
+ return NULL;
+ }
- wl_display_iterate (display->display, WL_DISPLAY_READABLE);
wl_display_roundtrip (display->display);
if (!(display->formats & (1 << WL_SHM_FORMAT_XRGB8888))) {
@@ -324,7 +322,7 @@ create_display (void)
return NULL;
}
- wl_display_get_fd (display->display, event_mask_update, display);
+ wl_display_get_fd (display->display);
return display;
}
@@ -590,13 +588,12 @@ gst_wayland_sink_render (GstBaseSink * bsink, GstBuffer * buffer)
window = sink->window;
display = sink->display;
- /* Wait for the previous frame to complete redraw */
+ meta = gst_buffer_get_wl_meta (buffer);
+
if (window->redraw_pending) {
- wl_display_iterate (display->display, WL_DISPLAY_READABLE);
+ wl_display_dispatch (display->display);
}
- meta = gst_buffer_get_wl_meta (buffer);
-
if (meta && meta->sink == sink) {
GST_LOG_OBJECT (sink, "buffer %p from our pool, writing directly", buffer);
to_render = buffer;
@@ -630,10 +627,11 @@ gst_wayland_sink_render (GstBaseSink * bsink, GstBuffer * buffer)
wl_surface_attach (sink->window->surface, meta->wbuffer, 0, 0);
wl_surface_damage (sink->window->surface, 0, 0, res.w, res.h);
- wl_display_iterate (display->display, WL_DISPLAY_WRITABLE);
window->redraw_pending = TRUE;
window->callback = wl_surface_frame (window->surface);
wl_callback_add_listener (window->callback, &frame_callback_listener, window);
+ wl_surface_commit (window->surface);
+ wl_display_dispatch (display->display);
if (buffer != to_render)
gst_buffer_unref (to_render);
diff --git a/ext/wayland/gstwaylandsink.h b/ext/wayland/gstwaylandsink.h
index 1a278e91..6607bd18 100644
--- a/ext/wayland/gstwaylandsink.h
+++ b/ext/wayland/gstwaylandsink.h
@@ -58,11 +58,11 @@
struct display
{
struct wl_display *display;
+ struct wl_registry *registry;
struct wl_compositor *compositor;
struct wl_shell *shell;
struct wl_shm *shm;
uint32_t formats;
- uint32_t mask;
};
struct window
diff --git a/ext/xvid/Makefile.in b/ext/xvid/Makefile.in
index a8263d86..79313933 100644
--- a/ext/xvid/Makefile.in
+++ b/ext/xvid/Makefile.in
@@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/xvid/gstxviddec.c b/ext/xvid/gstxviddec.c
index 53ab0234..01dc1b67 100644
--- a/ext/xvid/gstxviddec.c
+++ b/ext/xvid/gstxviddec.c
@@ -105,7 +105,7 @@ gst_xviddec_base_init (GstXvidDecClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&src_template));
- gst_element_class_set_metadata (element_class, "XviD video decoder",
+ gst_element_class_set_static_metadata (element_class, "XviD video decoder",
"Codec/Decoder/Video",
"XviD decoder based on xvidcore",
"Ronald Bultje <rbultje@ronald.bitfreak.net>");
diff --git a/ext/xvid/gstxvidenc.c b/ext/xvid/gstxvidenc.c
index 44d6609a..46906771 100644
--- a/ext/xvid/gstxvidenc.c
+++ b/ext/xvid/gstxvidenc.c
@@ -248,7 +248,7 @@ gst_xvidenc_base_init (GstXvidEncClass * klass)
gst_static_pad_template_get (&sink_template));
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&src_template));
- gst_element_class_set_metadata (element_class, "XviD video encoder",
+ gst_element_class_set_static_metadata (element_class, "XviD video encoder",
"Codec/Encoder/Video",
"XviD encoder based on xvidcore",
"Ronald Bultje <rbultje@ronald.bitfreak.net>");
diff --git a/ext/zbar/Makefile.in b/ext/zbar/Makefile.in
index e387f3fd..672b0c35 100644
--- a/ext/zbar/Makefile.in
+++ b/ext/zbar/Makefile.in
@@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/ext/zbar/gstzbar.c b/ext/zbar/gstzbar.c
index c4da7907..0f363e16 100644
--- a/ext/zbar/gstzbar.c
+++ b/ext/zbar/gstzbar.c
@@ -163,7 +163,7 @@ gst_zbar_class_init (GstZBarClass * g_class)
G_PARAM_READWRITE | GST_PARAM_MUTABLE_READY |
G_PARAM_STATIC_STRINGS));
- gst_element_class_set_metadata (gstelement_class, "Barcode detector",
+ gst_element_class_set_static_metadata (gstelement_class, "Barcode detector",
"Filter/Analyzer/Video",
"Detect bar codes in the video streams",
"Stefan Kost <ensonic@users.sf.net>");
diff --git a/gst-libs/Makefile.in b/gst-libs/Makefile.in
index a07f070c..a23be49a 100644
--- a/gst-libs/Makefile.in
+++ b/gst-libs/Makefile.in
@@ -223,6 +223,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst-libs/gst/Makefile.in b/gst-libs/gst/Makefile.in
index 0374310d..d4c5f592 100644
--- a/gst-libs/gst/Makefile.in
+++ b/gst-libs/gst/Makefile.in
@@ -225,6 +225,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst-libs/gst/basecamerabinsrc/Makefile.in b/gst-libs/gst/basecamerabinsrc/Makefile.in
index 7ab57a0a..125c649f 100644
--- a/gst-libs/gst/basecamerabinsrc/Makefile.in
+++ b/gst-libs/gst/basecamerabinsrc/Makefile.in
@@ -259,6 +259,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.c b/gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.c
index 79008e1e..a0a9f1dc 100644
--- a/gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.c
+++ b/gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.c
@@ -531,7 +531,7 @@ gst_base_camera_src_class_init (GstBaseCameraSrcClass * klass)
gstelement_class->change_state = gst_base_camera_src_change_state;
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"Base class for camerabin src bin", "Source/Video",
"Abstracts capture device for camerabin2", "Rob Clark <rob@ti.com>");
}
diff --git a/gst-libs/gst/codecparsers/Makefile.in b/gst-libs/gst/codecparsers/Makefile.in
index 08b658bd..a1eced7c 100644
--- a/gst-libs/gst/codecparsers/Makefile.in
+++ b/gst-libs/gst/codecparsers/Makefile.in
@@ -259,6 +259,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst-libs/gst/interfaces/Makefile.in b/gst-libs/gst/interfaces/Makefile.in
index bd8fb115..111d339a 100644
--- a/gst-libs/gst/interfaces/Makefile.in
+++ b/gst-libs/gst/interfaces/Makefile.in
@@ -270,6 +270,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst-libs/gst/signalprocessor/Makefile.in b/gst-libs/gst/signalprocessor/Makefile.in
index fd0dd6ed..4ab130e7 100644
--- a/gst-libs/gst/signalprocessor/Makefile.in
+++ b/gst-libs/gst/signalprocessor/Makefile.in
@@ -255,6 +255,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst-libs/gst/video/Makefile.in b/gst-libs/gst/video/Makefile.in
index ba3018b8..d62e38f5 100644
--- a/gst-libs/gst/video/Makefile.in
+++ b/gst-libs/gst/video/Makefile.in
@@ -257,6 +257,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst-plugins-bad.doap b/gst-plugins-bad.doap
index bfb9ddcb..96dc61ba 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.0.2</revision>
+ <branch>1.0</branch>
+ <name></name>
+ <created>2012-10-24</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-1.0.2.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
<revision>1.0.1</revision>
<branch>1.0</branch>
<name></name>
diff --git a/gst-plugins-bad.spec b/gst-plugins-bad.spec
index 1005b293..53f5eca3 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.0.1
+Version: 1.0.2
Release: 1.gst
# The freeze and nfs plugins are LGPLv2 (only)
License: LGPLv2+ and LGPLv2
diff --git a/gst/Makefile.in b/gst/Makefile.in
index 638b847e..44eb2c51 100644
--- a/gst/Makefile.in
+++ b/gst/Makefile.in
@@ -228,6 +228,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/adpcmdec/Makefile.in b/gst/adpcmdec/Makefile.in
index 193de3ae..6635b432 100644
--- a/gst/adpcmdec/Makefile.in
+++ b/gst/adpcmdec/Makefile.in
@@ -247,6 +247,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/adpcmdec/adpcmdec.c b/gst/adpcmdec/adpcmdec.c
index 0404e09f..9788bdce 100644
--- a/gst/adpcmdec/adpcmdec.c
+++ b/gst/adpcmdec/adpcmdec.c
@@ -467,7 +467,7 @@ adpcmdec_class_init (ADPCMDecClass * klass)
gst_static_pad_template_get (&adpcmdec_sink_template));
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&adpcmdec_src_template));
- gst_element_class_set_metadata (element_class, "ADPCM decoder",
+ gst_element_class_set_static_metadata (element_class, "ADPCM decoder",
"Codec/Decoder/Audio",
"Decode MS and IMA ADPCM audio",
"Pioneers of the Inevitable <songbird@songbirdnest.com>");
diff --git a/gst/adpcmenc/Makefile.in b/gst/adpcmenc/Makefile.in
index 10bb4574..75c2633f 100644
--- a/gst/adpcmenc/Makefile.in
+++ b/gst/adpcmenc/Makefile.in
@@ -247,6 +247,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/adpcmenc/adpcmenc.c b/gst/adpcmenc/adpcmenc.c
index ce6b9e65..4f0b73f0 100644
--- a/gst/adpcmenc/adpcmenc.c
+++ b/gst/adpcmenc/adpcmenc.c
@@ -439,7 +439,7 @@ adpcmenc_class_init (ADPCMEncClass * klass)
gst_static_pad_template_get (&adpcmenc_sink_template));
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&adpcmenc_src_template));
- gst_element_class_set_metadata (element_class, "ADPCM encoder",
+ gst_element_class_set_static_metadata (element_class, "ADPCM encoder",
"Codec/Encoder/Audio",
"Encode ADPCM audio",
"Pioneers of the Inevitable <songbird@songbirdnest.com>");
diff --git a/gst/aiff/Makefile.in b/gst/aiff/Makefile.in
index 337b426c..9f58ba40 100644
--- a/gst/aiff/Makefile.in
+++ b/gst/aiff/Makefile.in
@@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/aiff/aiffmux.c b/gst/aiff/aiffmux.c
index eca41630..4a5c1ce3 100644
--- a/gst/aiff/aiffmux.c
+++ b/gst/aiff/aiffmux.c
@@ -106,7 +106,7 @@ gst_aiff_mux_base_init (gpointer gclass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"AIFF audio muxer", "Muxer/Audio", "Multiplex raw audio into AIFF",
"Robert Swain <robert.swain@gmail.com>");
diff --git a/gst/aiff/aiffparse.c b/gst/aiff/aiffparse.c
index 71d24d5d..1182f3c2 100644
--- a/gst/aiff/aiffparse.c
+++ b/gst/aiff/aiffparse.c
@@ -115,7 +115,7 @@ gst_aiff_parse_base_init (gpointer g_class)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&src_template_factory));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"AIFF audio demuxer", "Codec/Demuxer/Audio",
"Parse a .aiff file into raw audio",
"Pioneers of the Inevitable <songbird@songbirdnest.com>");
diff --git a/gst/asfmux/Makefile.in b/gst/asfmux/Makefile.in
index 3cdb8eab..ae005da3 100644
--- a/gst/asfmux/Makefile.in
+++ b/gst/asfmux/Makefile.in
@@ -255,6 +255,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/asfmux/gstasfmux.c b/gst/asfmux/gstasfmux.c
index f58e6c91..3b340259 100644
--- a/gst/asfmux/gstasfmux.c
+++ b/gst/asfmux/gstasfmux.c
@@ -277,7 +277,7 @@ gst_asf_mux_class_init (GstAsfMuxClass * klass)
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&video_sink_factory));
- gst_element_class_set_metadata (gstelement_class, "ASF muxer",
+ gst_element_class_set_static_metadata (gstelement_class, "ASF muxer",
"Codec/Muxer",
"Muxes audio and video into an ASF stream",
"Thiago Santos <thiagoss@embedded.ufcg.edu.br>");
diff --git a/gst/asfmux/gstasfparse.c b/gst/asfmux/gstasfparse.c
index 0b393bfd..529c7a85 100644
--- a/gst/asfmux/gstasfparse.c
+++ b/gst/asfmux/gstasfparse.c
@@ -545,7 +545,7 @@ gst_asf_parse_class_init (GstAsfParseClass * klass)
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&sink_factory));
- gst_element_class_set_metadata (gstelement_class, "ASF parser",
+ gst_element_class_set_static_metadata (gstelement_class, "ASF parser",
"Parser", "Parses ASF", "Thiago Santos <thiagoss@embedded.ufcg.edu.br>");
GST_DEBUG_CATEGORY_INIT (asfparse_debug, "asfparse", 0,
diff --git a/gst/asfmux/gstrtpasfpay.c b/gst/asfmux/gstrtpasfpay.c
index 797071fa..5cc3f0a7 100644
--- a/gst/asfmux/gstrtpasfpay.c
+++ b/gst/asfmux/gstrtpasfpay.c
@@ -100,7 +100,7 @@ gst_rtp_asf_pay_class_init (GstRtpAsfPayClass * klass)
gst_static_pad_template_get (&gst_rtp_asf_pay_sink_template));
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&gst_rtp_asf_pay_src_template));
- gst_element_class_set_metadata (gstelement_class, "RTP ASF payloader",
+ gst_element_class_set_static_metadata (gstelement_class, "RTP ASF payloader",
"Codec/Payloader/Network",
"Payload-encodes ASF into RTP packets (MS_RTSP)",
"Thiago Santos <thiagoss@embedded.ufcg.edu.br>");
diff --git a/gst/audiovisualizers/Makefile.in b/gst/audiovisualizers/Makefile.in
index 5817aafd..4f225f2f 100644
--- a/gst/audiovisualizers/Makefile.in
+++ b/gst/audiovisualizers/Makefile.in
@@ -259,6 +259,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/audiovisualizers/gstspacescope.c b/gst/audiovisualizers/gstspacescope.c
index 355d75d9..68e990e1 100644
--- a/gst/audiovisualizers/gstspacescope.c
+++ b/gst/audiovisualizers/gstspacescope.c
@@ -126,7 +126,7 @@ gst_space_scope_class_init (GstSpaceScopeClass * g_class)
GstElementClass *element_class = (GstElementClass *) g_class;
GstAudioVisualizerClass *scope_class = (GstAudioVisualizerClass *) g_class;
- gst_element_class_set_metadata (element_class, "Stereo visualizer",
+ gst_element_class_set_static_metadata (element_class, "Stereo visualizer",
"Visualization",
"Simple stereo visualizer", "Stefan Kost <ensonic@users.sf.net>");
diff --git a/gst/audiovisualizers/gstspectrascope.c b/gst/audiovisualizers/gstspectrascope.c
index 10328e39..d4082981 100644
--- a/gst/audiovisualizers/gstspectrascope.c
+++ b/gst/audiovisualizers/gstspectrascope.c
@@ -82,7 +82,7 @@ gst_spectra_scope_class_init (GstSpectraScopeClass * g_class)
gobject_class->finalize = gst_spectra_scope_finalize;
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"Frequency spectrum scope", "Visualization",
"Simple frequency spectrum scope", "Stefan Kost <ensonic@users.sf.net>");
diff --git a/gst/audiovisualizers/gstsynaescope.c b/gst/audiovisualizers/gstsynaescope.c
index ba0592f6..abd5f85e 100644
--- a/gst/audiovisualizers/gstsynaescope.c
+++ b/gst/audiovisualizers/gstsynaescope.c
@@ -81,7 +81,7 @@ gst_synae_scope_class_init (GstSynaeScopeClass * g_class)
gobject_class->finalize = gst_synae_scope_finalize;
- gst_element_class_set_metadata (element_class, "Synaescope",
+ gst_element_class_set_static_metadata (element_class, "Synaescope",
"Visualization",
"Creates video visualizations of audio input, using stereo and pitch information",
"Stefan Kost <ensonic@users.sf.net>");
diff --git a/gst/audiovisualizers/gstwavescope.c b/gst/audiovisualizers/gstwavescope.c
index dfa17d9d..d71e8738 100644
--- a/gst/audiovisualizers/gstwavescope.c
+++ b/gst/audiovisualizers/gstwavescope.c
@@ -141,7 +141,7 @@ gst_wave_scope_class_init (GstWaveScopeClass * g_class)
GST_TYPE_WAVE_SCOPE_STYLE, STYLE_DOTS,
G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"Waveform oscilloscope", "Visualization", "Simple waveform oscilloscope",
"Stefan Kost <ensonic@users.sf.net>");
diff --git a/gst/autoconvert/Makefile.in b/gst/autoconvert/Makefile.in
index 5524241c..0197ffd8 100644
--- a/gst/autoconvert/Makefile.in
+++ b/gst/autoconvert/Makefile.in
@@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/autoconvert/gstautoconvert.c b/gst/autoconvert/gstautoconvert.c
index 5b11042a..ae0170d5 100644
--- a/gst/autoconvert/gstautoconvert.c
+++ b/gst/autoconvert/gstautoconvert.c
@@ -160,7 +160,7 @@ gst_auto_convert_class_init (GstAutoConvertClass * klass)
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&sinktemplate));
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"Select convertor based on caps", "Generic/Bin",
"Selects the right transform element based on the caps",
"Olivier Crete <olivier.crete@collabora.com>");
diff --git a/gst/autoconvert/gstautovideoconvert.c b/gst/autoconvert/gstautovideoconvert.c
index 84177ee9..00dc15b3 100644
--- a/gst/autoconvert/gstautovideoconvert.c
+++ b/gst/autoconvert/gstautovideoconvert.c
@@ -145,7 +145,7 @@ gst_auto_video_convert_class_init (GstAutoVideoConvertClass * klass)
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&sinktemplate));
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"Select color space convertor based on caps", "Generic/Bin",
"Selects the right color space convertor based on the caps",
"Benjamin Gaignard <benjamin.gaignard@stericsson.com>");
diff --git a/gst/bayer/Makefile.in b/gst/bayer/Makefile.in
index 2a026805..987c0fce 100644
--- a/gst/bayer/Makefile.in
+++ b/gst/bayer/Makefile.in
@@ -274,6 +274,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
# orc-generated code creates warnings
diff --git a/gst/bayer/gstbayer2rgb.c b/gst/bayer/gstbayer2rgb.c
index 35a3e726..53417733 100644
--- a/gst/bayer/gstbayer2rgb.c
+++ b/gst/bayer/gstbayer2rgb.c
@@ -169,7 +169,7 @@ gst_bayer2rgb_class_init (GstBayer2RGBClass * klass)
gobject_class->set_property = gst_bayer2rgb_set_property;
gobject_class->get_property = gst_bayer2rgb_get_property;
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"Bayer to RGB decoder for cameras", "Filter/Converter/Video",
"Converts video/x-bayer to video/x-raw",
"William Brack <wbrack@mmm.com.hk>");
diff --git a/gst/bayer/gstrgb2bayer.c b/gst/bayer/gstrgb2bayer.c
index 6810069a..4cb33031 100644
--- a/gst/bayer/gstrgb2bayer.c
+++ b/gst/bayer/gstrgb2bayer.c
@@ -92,7 +92,7 @@ gst_rgb2bayer_class_init (GstRGB2BayerClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_rgb2bayer_sink_template));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"RGB to Bayer converter",
"Filter/Converter/Video",
"Converts video/x-raw to video/x-bayer",
diff --git a/gst/camerabin2/Makefile.in b/gst/camerabin2/Makefile.in
index 9ba4f9df..42361b2c 100644
--- a/gst/camerabin2/Makefile.in
+++ b/gst/camerabin2/Makefile.in
@@ -257,6 +257,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/camerabin2/gstcamerabin2.c b/gst/camerabin2/gstcamerabin2.c
index 53a4e1c0..2550def4 100644
--- a/gst/camerabin2/gstcamerabin2.c
+++ b/gst/camerabin2/gstcamerabin2.c
@@ -617,7 +617,7 @@ gst_camera_bin_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_set_metadata (element_class, "Camera Bin",
+ gst_element_class_set_static_metadata (element_class, "Camera Bin",
"Generic/Bin/Camera",
"Take image snapshots and record movies from camera",
"Thiago Santos <thiago.sousa.santos@collabora.co.uk>");
diff --git a/gst/camerabin2/gstviewfinderbin.c b/gst/camerabin2/gstviewfinderbin.c
index a5fb7607..c2580f62 100644
--- a/gst/camerabin2/gstviewfinderbin.c
+++ b/gst/camerabin2/gstviewfinderbin.c
@@ -125,7 +125,7 @@ gst_viewfinder_bin_class_init (GstViewfinderBinClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&sink_template));
- gst_element_class_set_metadata (element_class, "Viewfinder Bin",
+ gst_element_class_set_static_metadata (element_class, "Viewfinder Bin",
"Sink/Video", "Viewfinder Bin used in camerabin2",
"Thiago Santos <thiago.sousa.santos@collabora.com>");
}
diff --git a/gst/camerabin2/gstwrappercamerabinsrc.c b/gst/camerabin2/gstwrappercamerabinsrc.c
index 3c70bfbe..002b7e59 100644
--- a/gst/camerabin2/gstwrappercamerabinsrc.c
+++ b/gst/camerabin2/gstwrappercamerabinsrc.c
@@ -1231,7 +1231,7 @@ gst_wrapper_camera_bin_src_class_init (GstWrapperCameraBinSrcClass * klass)
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&vidsrc_template));
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"Wrapper camera src element for camerabin2", "Source/Video",
"Wrapper camera src element for camerabin2",
"Thiago Santos <thiago.sousa.santos@collabora.com>");
diff --git a/gst/cdxaparse/Makefile.in b/gst/cdxaparse/Makefile.in
index 82a56896..4df212df 100644
--- a/gst/cdxaparse/Makefile.in
+++ b/gst/cdxaparse/Makefile.in
@@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/cdxaparse/gstcdxaparse.c b/gst/cdxaparse/gstcdxaparse.c
index ffecf975..106c9e93 100644
--- a/gst/cdxaparse/gstcdxaparse.c
+++ b/gst/cdxaparse/gstcdxaparse.c
@@ -70,7 +70,7 @@ gst_cdxa_parse_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_set_metadata (element_class, "(S)VCD parser",
+ gst_element_class_set_static_metadata (element_class, "(S)VCD parser",
"Codec/Parser",
"Parse a .dat file from (S)VCD into raw MPEG-1",
"Wim Taymans <wim.taymans@tvd.be>");
diff --git a/gst/cdxaparse/gstvcdparse.c b/gst/cdxaparse/gstvcdparse.c
index 497eae22..8b19eac5 100644
--- a/gst/cdxaparse/gstvcdparse.c
+++ b/gst/cdxaparse/gstvcdparse.c
@@ -60,7 +60,7 @@ gst_vcd_parse_base_init (gpointer klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&src_factory));
- gst_element_class_set_metadata (element_class, "(S)VCD stream parser",
+ gst_element_class_set_static_metadata (element_class, "(S)VCD stream parser",
"Codec/Parser", "Strip (S)VCD stream from its sync headers",
"Tim-Philipp Müller <tim centricular net>, "
"Ronald Bultje <rbultje@ronald.bitfreak.net>");
diff --git a/gst/coloreffects/Makefile.in b/gst/coloreffects/Makefile.in
index c4fff468..a5f12aa5 100644
--- a/gst/coloreffects/Makefile.in
+++ b/gst/coloreffects/Makefile.in
@@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/coloreffects/gstchromahold.c b/gst/coloreffects/gstchromahold.c
index baf24be0..ffe1e173 100644
--- a/gst/coloreffects/gstchromahold.c
+++ b/gst/coloreffects/gstchromahold.c
@@ -154,7 +154,7 @@ gst_chroma_hold_class_init (GstChromaHoldClass * klass)
GST_DEBUG_FUNCPTR (gst_chroma_hold_transform_frame_ip);
vfilter_class->set_info = GST_DEBUG_FUNCPTR (gst_chroma_hold_set_info);
- gst_element_class_set_metadata (gstelement_class, "Chroma hold filter",
+ gst_element_class_set_static_metadata (gstelement_class, "Chroma hold filter",
"Filter/Effect/Video",
"Removes all color information except for one color",
"Sebastian Dröge <sebastian.droege@collabora.co.uk>");
diff --git a/gst/coloreffects/gstcoloreffects.c b/gst/coloreffects/gstcoloreffects.c
index a4c0e8d0..011eef81 100644
--- a/gst/coloreffects/gstcoloreffects.c
+++ b/gst/coloreffects/gstcoloreffects.c
@@ -585,7 +585,7 @@ gst_color_effects_class_init (GstColorEffectsClass * klass)
vfilter_class->transform_frame_ip =
GST_DEBUG_FUNCPTR (gst_color_effects_transform_frame_ip);
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"Color Look-up Table filter", "Filter/Effect/Video",
"Color Look-up Table filter",
"Filippo Argiolas <filippo.argiolas@gmail.com>");
diff --git a/gst/dataurisrc/Makefile.in b/gst/dataurisrc/Makefile.in
index 782ace85..273690e6 100644
--- a/gst/dataurisrc/Makefile.in
+++ b/gst/dataurisrc/Makefile.in
@@ -247,6 +247,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/dataurisrc/gstdataurisrc.c b/gst/dataurisrc/gstdataurisrc.c
index 2c80a6c4..4b145582 100644
--- a/gst/dataurisrc/gstdataurisrc.c
+++ b/gst/dataurisrc/gstdataurisrc.c
@@ -101,7 +101,7 @@ gst_data_uri_src_class_init (GstDataURISrcClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&src_template));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"data: URI source element", "Source", "Handles data: uris",
"Philippe Normand <pnormand@igalia.com>, "
"Sebastian Dröge <sebastian.droege@collabora.co.uk>");
diff --git a/gst/dccp/Makefile.in b/gst/dccp/Makefile.in
index 619c6a12..8b349258 100644
--- a/gst/dccp/Makefile.in
+++ b/gst/dccp/Makefile.in
@@ -257,6 +257,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/dccp/gstdccpclientsink.c b/gst/dccp/gstdccpclientsink.c
index f680e12d..2553a317 100644
--- a/gst/dccp/gstdccpclientsink.c
+++ b/gst/dccp/gstdccpclientsink.c
@@ -242,7 +242,7 @@ gst_dccp_client_sink_base_init (gpointer g_class)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&sinktemplate));
- gst_element_class_set_metadata (element_class, "DCCP client sink",
+ gst_element_class_set_static_metadata (element_class, "DCCP client sink",
"Sink/Network",
"Send data as a client over the network via DCCP",
"E-Phone Team at Federal University of Campina Grande <leandroal@gmail.com>");
diff --git a/gst/dccp/gstdccpclientsrc.c b/gst/dccp/gstdccpclientsrc.c
index 24c49b8c..8f1da06c 100644
--- a/gst/dccp/gstdccpclientsrc.c
+++ b/gst/dccp/gstdccpclientsrc.c
@@ -275,7 +275,7 @@ gst_dccp_client_src_base_init (gpointer g_class)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&srctemplate));
- gst_element_class_set_metadata (element_class, "DCCP client source",
+ gst_element_class_set_static_metadata (element_class, "DCCP client source",
"Source/Network",
"Receive data as a client over the network via DCCP",
"E-Phone Team at Federal University of Campina Grande <leandroal@gmail.com>");
diff --git a/gst/dccp/gstdccpserversink.c b/gst/dccp/gstdccpserversink.c
index ac39bb85..37157ecf 100644
--- a/gst/dccp/gstdccpserversink.c
+++ b/gst/dccp/gstdccpserversink.c
@@ -339,7 +339,7 @@ gst_dccp_server_sink_base_init (gpointer g_class)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&sinktemplate));
- gst_element_class_set_metadata (element_class, "DCCP server sink",
+ gst_element_class_set_static_metadata (element_class, "DCCP server sink",
"Sink/Network",
"Send data as a server over the network via DCCP",
"E-Phone Team at Federal University of Campina Grande <leandroal@gmail.com>");
diff --git a/gst/dccp/gstdccpserversrc.c b/gst/dccp/gstdccpserversrc.c
index 512d8883..1cbaecbb 100644
--- a/gst/dccp/gstdccpserversrc.c
+++ b/gst/dccp/gstdccpserversrc.c
@@ -265,7 +265,7 @@ gst_dccp_server_src_base_init (gpointer g_class)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&srctemplate));
- gst_element_class_set_metadata (element_class, "DCCP server source",
+ gst_element_class_set_static_metadata (element_class, "DCCP server source",
"Source/Network",
"Receive data as a server over the network via DCCP",
"E-Phone Team at Federal University of Campina Grande <leandroal@gmail.com>");
diff --git a/gst/debugutils/Makefile.in b/gst/debugutils/Makefile.in
index df9e44ba..6655d916 100644
--- a/gst/debugutils/Makefile.in
+++ b/gst/debugutils/Makefile.in
@@ -270,6 +270,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/debugutils/fpsdisplaysink.c b/gst/debugutils/fpsdisplaysink.c
index 79c6f80e..4a435154 100644
--- a/gst/debugutils/fpsdisplaysink.c
+++ b/gst/debugutils/fpsdisplaysink.c
@@ -28,7 +28,7 @@
* gst-launch videotestsrc ! fpsdisplaysink
* gst-launch videotestsrc ! fpsdisplaysink text-overlay=false
* gst-launch filesrc location=video.avi ! decodebin2 name=d ! queue ! fpsdisplaysink d. ! queue ! fakesink sync=true
- * gst-launch playbin2 uri=file:///path/to/video.avi video-sink="fpsdisplaysink" audio-sink=fakesink
+ * gst-launch playbin uri=file:///path/to/video.avi video-sink="fpsdisplaysink" audio-sink=fakesink
* ]|
* </refsect2>
*/
@@ -207,7 +207,7 @@ fps_display_sink_class_init (GstFPSDisplaySinkClass * klass)
gst_element_class_add_pad_template (gstelement_klass,
gst_static_pad_template_get (&fps_display_sink_template));
- gst_element_class_set_metadata (gstelement_klass,
+ gst_element_class_set_static_metadata (gstelement_klass,
"Measure and show framerate on videosink", "Sink/Video",
"Shows the current frame-rate and drop-rate of the videosink as overlay or text on stdout",
"Zeeshan Ali <zeeshan.ali@nokia.com>, Stefan Kost <stefan.kost@nokia.com>");
diff --git a/gst/debugutils/gstchecksumsink.c b/gst/debugutils/gstchecksumsink.c
index bce8d4b4..90528bf3 100644
--- a/gst/debugutils/gstchecksumsink.c
+++ b/gst/debugutils/gstchecksumsink.c
@@ -68,7 +68,7 @@ gst_checksum_sink_class_init (GstChecksumSinkClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_checksum_sink_sink_template));
- gst_element_class_set_metadata (element_class, "Checksum sink",
+ gst_element_class_set_static_metadata (element_class, "Checksum sink",
"Debug/Sink", "Calculates a checksum for buffers",
"David Schleef <ds@schleef.org>");
}
diff --git a/gst/debugutils/gstchopmydata.c b/gst/debugutils/gstchopmydata.c
index d91c4082..739ea72a 100644
--- a/gst/debugutils/gstchopmydata.c
+++ b/gst/debugutils/gstchopmydata.c
@@ -126,7 +126,7 @@ gst_chop_my_data_class_init (GstChopMyDataClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_chop_my_data_sink_template));
- gst_element_class_set_metadata (element_class, "FIXME",
+ gst_element_class_set_static_metadata (element_class, "FIXME",
"Generic", "FIXME", "David Schleef <ds@schleef.org>");
}
diff --git a/gst/debugutils/gstcompare.c b/gst/debugutils/gstcompare.c
index 2581a3ca..a6f51a7a 100644
--- a/gst/debugutils/gstcompare.c
+++ b/gst/debugutils/gstcompare.c
@@ -176,7 +176,7 @@ gst_compare_class_init (GstCompareClass * klass)
gst_static_pad_template_get (&sink_factory));
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&check_sink_factory));
- gst_element_class_set_metadata (gstelement_class, "Compare buffers",
+ gst_element_class_set_static_metadata (gstelement_class, "Compare buffers",
"Filter/Debug", "Compares incoming buffers",
"Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>");
}
diff --git a/gst/debugutils/gstdebugspy.c b/gst/debugutils/gstdebugspy.c
index 413853c2..21c1609e 100644
--- a/gst/debugutils/gstdebugspy.c
+++ b/gst/debugutils/gstdebugspy.c
@@ -133,7 +133,7 @@ gst_debug_spy_class_init (GstDebugSpyClass * klass)
"Checksum algorithm to use", GST_DEBUG_SPY_CHECKSUM_TYPE,
G_CHECKSUM_SHA1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"DebugSpy",
"Filter/Analyzer/Debug",
"DebugSpy provides information on buffers with bus messages",
diff --git a/gst/dtmf/Makefile.in b/gst/dtmf/Makefile.in
index 0f3a682a..84a5aa06 100644
--- a/gst/dtmf/Makefile.in
+++ b/gst/dtmf/Makefile.in
@@ -254,6 +254,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/dtmf/gstdtmfdetect.c b/gst/dtmf/gstdtmfdetect.c
index 073959ec..827e68d3 100644
--- a/gst/dtmf/gstdtmfdetect.c
+++ b/gst/dtmf/gstdtmfdetect.c
@@ -123,8 +123,8 @@ gst_dtmf_detect_class_init (GstDtmfDetectClass * klass)
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&sinktemplate));
- gst_element_class_set_metadata (gstelement_class, "DTMF detector element",
- "Filter/Analyzer/Audio",
+ gst_element_class_set_static_metadata (gstelement_class,
+ "DTMF detector element", "Filter/Analyzer/Audio",
"This element detects DTMF tones",
"Olivier Crete <olivier.crete@collabora.com>");
diff --git a/gst/dtmf/gstdtmfsrc.c b/gst/dtmf/gstdtmfsrc.c
index 18c7ebb6..df45223c 100644
--- a/gst/dtmf/gstdtmfsrc.c
+++ b/gst/dtmf/gstdtmfsrc.c
@@ -253,9 +253,8 @@ gst_dtmf_src_class_init (GstDTMFSrcClass * klass)
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&gst_dtmf_src_template));
- gst_element_class_set_metadata (gstelement_class, "DTMF tone generator",
- "Source/Audio",
- "Generates DTMF tones",
+ gst_element_class_set_static_metadata (gstelement_class,
+ "DTMF tone generator", "Source/Audio", "Generates DTMF tones",
"Youness Alaoui <youness.alaoui@collabora.co.uk>");
diff --git a/gst/dtmf/gstrtpdtmfdepay.c b/gst/dtmf/gstrtpdtmfdepay.c
index 12422ecb..74df649f 100644
--- a/gst/dtmf/gstrtpdtmfdepay.c
+++ b/gst/dtmf/gstrtpdtmfdepay.c
@@ -228,7 +228,7 @@ gst_rtp_dtmf_depay_class_init (GstRtpDTMFDepayClass * klass)
GST_DEBUG_CATEGORY_INIT (gst_rtp_dtmf_depay_debug,
"rtpdtmfdepay", 0, "rtpdtmfdepay element");
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"RTP DTMF packet depayloader", "Codec/Depayloader/Network",
"Generates DTMF Sound from telephone-event RTP packets",
"Youness Alaoui <youness.alaoui@collabora.co.uk>");
diff --git a/gst/dtmf/gstrtpdtmfsrc.c b/gst/dtmf/gstrtpdtmfsrc.c
index a078a111..be71ebd4 100644
--- a/gst/dtmf/gstrtpdtmfsrc.c
+++ b/gst/dtmf/gstrtpdtmfsrc.c
@@ -216,7 +216,7 @@ gst_rtp_dtmf_src_class_init (GstRTPDTMFSrcClass * klass)
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&gst_rtp_dtmf_src_template));
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"RTP DTMF packet generator", "Source/Network",
"Generates RTP DTMF packets", "Zeeshan Ali <zeeshan.ali@nokia.com>");
diff --git a/gst/dvbsuboverlay/Makefile.in b/gst/dvbsuboverlay/Makefile.in
index 33d6eedd..83847b28 100644
--- a/gst/dvbsuboverlay/Makefile.in
+++ b/gst/dvbsuboverlay/Makefile.in
@@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/dvbsuboverlay/gstdvbsuboverlay.c b/gst/dvbsuboverlay/gstdvbsuboverlay.c
index e6241f0d..3f4aaff1 100644
--- a/gst/dvbsuboverlay/gstdvbsuboverlay.c
+++ b/gst/dvbsuboverlay/gstdvbsuboverlay.c
@@ -158,7 +158,7 @@ gst_dvbsub_overlay_class_init (GstDVBSubOverlayClass * klass)
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&text_sink_factory));
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"DVB Subtitles Overlay",
"Mixer/Video/Overlay/Subtitle",
"Renders DVB subtitles", "Mart Raudsepp <mart.raudsepp@collabora.co.uk>");
diff --git a/gst/dvdspu/Makefile.in b/gst/dvdspu/Makefile.in
index a5c9d681..8b7e1e0e 100644
--- a/gst/dvdspu/Makefile.in
+++ b/gst/dvdspu/Makefile.in
@@ -254,6 +254,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/dvdspu/gstdvdspu.c b/gst/dvdspu/gstdvdspu.c
index b64cbd3a..7af06089 100644
--- a/gst/dvdspu/gstdvdspu.c
+++ b/gst/dvdspu/gstdvdspu.c
@@ -147,8 +147,8 @@ gst_dvd_spu_class_init (GstDVDSpuClass * klass)
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&subpic_sink_factory));
- gst_element_class_set_metadata (gstelement_class, "Sub-picture Overlay",
- "Mixer/Video/Overlay/SubPicture/DVD/Bluray",
+ gst_element_class_set_static_metadata (gstelement_class,
+ "Sub-picture Overlay", "Mixer/Video/Overlay/SubPicture/DVD/Bluray",
"Parses Sub-Picture command streams and renders the SPU overlay "
"onto the video as it passes through",
"Jan Schmidt <thaytan@noraisin.net>");
diff --git a/gst/faceoverlay/Makefile.in b/gst/faceoverlay/Makefile.in
index f14fde27..4254bcb2 100644
--- a/gst/faceoverlay/Makefile.in
+++ b/gst/faceoverlay/Makefile.in
@@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/faceoverlay/gstfaceoverlay.c b/gst/faceoverlay/gstfaceoverlay.c
index 967787a9..0c0de837 100644
--- a/gst/faceoverlay/gstfaceoverlay.c
+++ b/gst/faceoverlay/gstfaceoverlay.c
@@ -280,7 +280,7 @@ gst_face_overlay_base_init (gpointer gclass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"faceoverlay",
"Filter/Editor/Video",
"Overlays SVG graphics over a detected face in a video stream",
diff --git a/gst/festival/Makefile.in b/gst/festival/Makefile.in
index e32f0308..bbe65011 100644
--- a/gst/festival/Makefile.in
+++ b/gst/festival/Makefile.in
@@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/festival/gstfestival.c b/gst/festival/gstfestival.c
index 0699fc4d..d379c830 100644
--- a/gst/festival/gstfestival.c
+++ b/gst/festival/gstfestival.c
@@ -168,7 +168,7 @@ G_DEFINE_TYPE (GstFestival, gst_festival, GST_TYPE_ELEMENT)
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&src_template_factory));
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"Festival Text-to-Speech synthesizer", "Filter/Effect/Audio",
"Synthesizes plain text into audio",
"Wim Taymans <wim.taymans@gmail.com>");
diff --git a/gst/fieldanalysis/Makefile.in b/gst/fieldanalysis/Makefile.in
index 66cf52f4..ecdd8359 100644
--- a/gst/fieldanalysis/Makefile.in
+++ b/gst/fieldanalysis/Makefile.in
@@ -278,6 +278,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/fieldanalysis/gstfieldanalysis.c b/gst/fieldanalysis/gstfieldanalysis.c
index 09782599..0514747b 100644
--- a/gst/fieldanalysis/gstfieldanalysis.c
+++ b/gst/fieldanalysis/gstfieldanalysis.c
@@ -278,7 +278,7 @@ gst_field_analysis_class_init (GstFieldAnalysisClass * klass)
gstelement_class->change_state =
GST_DEBUG_FUNCPTR (gst_field_analysis_change_state);
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"Video field analysis",
"Filter/Analysis/Video",
"Analyse fields from video frames to identify if they are progressive/telecined/interlaced",
@@ -792,11 +792,12 @@ gst_field_analysis_sink_event (GstPad * pad, GstObject * parent,
break;
}
default:
+ forward = TRUE;
break;
}
if (forward) {
- ret = gst_pad_push_event (filter->srcpad, event);
+ ret = gst_pad_event_default (pad, parent, event);
}
return ret;
diff --git a/gst/freeverb/Makefile.in b/gst/freeverb/Makefile.in
index cce7175c..7d67d3a8 100644
--- a/gst/freeverb/Makefile.in
+++ b/gst/freeverb/Makefile.in
@@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/freeverb/gstfreeverb.c b/gst/freeverb/gstfreeverb.c
index 561306fa..b94d9ee4 100644
--- a/gst/freeverb/gstfreeverb.c
+++ b/gst/freeverb/gstfreeverb.c
@@ -408,7 +408,7 @@ gst_freeverb_base_init (gpointer klass)
gst_static_pad_template_get (&src_template));
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&sink_template));
- gst_element_class_set_metadata (element_class, "Stereo positioning",
+ gst_element_class_set_static_metadata (element_class, "Stereo positioning",
"Filter/Effect/Audio",
"Reverberation/room effect", "Stefan Sauer <ensonic@users.sf.net>");
}
diff --git a/gst/frei0r/Makefile.in b/gst/frei0r/Makefile.in
index d92a2219..39f849a6 100644
--- a/gst/frei0r/Makefile.in
+++ b/gst/frei0r/Makefile.in
@@ -253,6 +253,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/gaudieffects/Makefile.in b/gst/gaudieffects/Makefile.in
index 3263c10b..377ebb3d 100644
--- a/gst/gaudieffects/Makefile.in
+++ b/gst/gaudieffects/Makefile.in
@@ -284,6 +284,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/gaudieffects/gstburn.c b/gst/gaudieffects/gstburn.c
index 4fa8e1ad..d8cb35ae 100644
--- a/gst/gaudieffects/gstburn.c
+++ b/gst/gaudieffects/gstburn.c
@@ -134,7 +134,7 @@ gst_burn_class_init (GstBurnClass * klass)
GstElementClass *gstelement_class = (GstElementClass *) klass;
GstVideoFilterClass *vfilter_class = (GstVideoFilterClass *) klass;
- gst_element_class_set_metadata (gstelement_class, "Burn",
+ gst_element_class_set_static_metadata (gstelement_class, "Burn",
"Filter/Effect/Video",
"Burn adjusts the colors in the video signal.",
"Luis de Bethencourt <luis@debethencourt.com>");
diff --git a/gst/gaudieffects/gstchromium.c b/gst/gaudieffects/gstchromium.c
index b4f21776..0aba0eae 100644
--- a/gst/gaudieffects/gstchromium.c
+++ b/gst/gaudieffects/gstchromium.c
@@ -148,7 +148,7 @@ gst_chromium_class_init (GstChromiumClass * klass)
GstElementClass *gstelement_class = (GstElementClass *) klass;
GstVideoFilterClass *vfilter_class = (GstVideoFilterClass *) klass;
- gst_element_class_set_metadata (gstelement_class, "Chromium",
+ gst_element_class_set_static_metadata (gstelement_class, "Chromium",
"Filter/Effect/Video",
"Chromium breaks the colors of the video signal.",
"Luis de Bethencourt <luis@debethencourt.com>");
diff --git a/gst/gaudieffects/gstdilate.c b/gst/gaudieffects/gstdilate.c
index 090df175..ab827b47 100644
--- a/gst/gaudieffects/gstdilate.c
+++ b/gst/gaudieffects/gstdilate.c
@@ -135,7 +135,7 @@ gst_dilate_class_init (GstDilateClass * klass)
GstElementClass *gstelement_class = (GstElementClass *) klass;
GstVideoFilterClass *vfilter_class = (GstVideoFilterClass *) klass;
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"Dilate",
"Filter/Effect/Video",
"Dilate copies the brightest pixel around.",
diff --git a/gst/gaudieffects/gstdodge.c b/gst/gaudieffects/gstdodge.c
index 3a5b9f0e..6847c333 100644
--- a/gst/gaudieffects/gstdodge.c
+++ b/gst/gaudieffects/gstdodge.c
@@ -130,7 +130,7 @@ gst_dodge_class_init (GstDodgeClass * klass)
GstElementClass *gstelement_class = (GstElementClass *) klass;
GstVideoFilterClass *vfilter_class = (GstVideoFilterClass *) klass;
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"Dodge",
"Filter/Effect/Video",
"Dodge saturates the colors in the video signal.",
diff --git a/gst/gaudieffects/gstexclusion.c b/gst/gaudieffects/gstexclusion.c
index f3c670ef..d2b8330c 100644
--- a/gst/gaudieffects/gstexclusion.c
+++ b/gst/gaudieffects/gstexclusion.c
@@ -136,7 +136,7 @@ gst_exclusion_class_init (GstExclusionClass * klass)
GstElementClass *gstelement_class = (GstElementClass *) klass;
GstVideoFilterClass *vfilter_class = (GstVideoFilterClass *) klass;
- gst_element_class_set_metadata (gstelement_class, "Exclusion",
+ gst_element_class_set_static_metadata (gstelement_class, "Exclusion",
"Filter/Effect/Video",
"Exclusion exclodes the colors in the video signal.",
"Luis de Bethencourt <luis@debethencourt.com>");
diff --git a/gst/gaudieffects/gstgaussblur.c b/gst/gaudieffects/gstgaussblur.c
index a0f8b5bd..34b8dbe2 100644
--- a/gst/gaudieffects/gstgaussblur.c
+++ b/gst/gaudieffects/gstgaussblur.c
@@ -132,7 +132,7 @@ gst_gaussianblur_class_init (GstGaussianBlurClass * klass)
GstElementClass *gstelement_class = (GstElementClass *) klass;
GstVideoFilterClass *vfilter_class = (GstVideoFilterClass *) klass;
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"GstGaussianBlur",
"Filter/Effect/Video",
"Perform Gaussian blur/sharpen on a video",
diff --git a/gst/gaudieffects/gstsolarize.c b/gst/gaudieffects/gstsolarize.c
index 561fc4c3..26e53ae3 100644
--- a/gst/gaudieffects/gstsolarize.c
+++ b/gst/gaudieffects/gstsolarize.c
@@ -138,7 +138,7 @@ gst_solarize_class_init (GstSolarizeClass * klass)
GstElementClass *gstelement_class = (GstElementClass *) klass;
GstVideoFilterClass *vfilter_class = (GstVideoFilterClass *) klass;
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"Solarize",
"Filter/Effect/Video",
"Solarize tunable inverse in the video signal.",
diff --git a/gst/gdp/Makefile.in b/gst/gdp/Makefile.in
index f8bf112d..2c253b5e 100644
--- a/gst/gdp/Makefile.in
+++ b/gst/gdp/Makefile.in
@@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/geometrictransform/Makefile.in b/gst/geometrictransform/Makefile.in
index f99dae4e..4ef56798 100644
--- a/gst/geometrictransform/Makefile.in
+++ b/gst/geometrictransform/Makefile.in
@@ -272,6 +272,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/geometrictransform/gstbulge.c b/gst/geometrictransform/gstbulge.c
index b26b6ade..cd96a5e5 100644
--- a/gst/geometrictransform/gstbulge.c
+++ b/gst/geometrictransform/gstbulge.c
@@ -176,7 +176,7 @@ gst_bulge_class_init (GstBulgeClass * klass)
parent_class = g_type_class_peek_parent (klass);
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"bulge",
"Transform/Effect/Video",
"Adds a protuberance in the center point",
diff --git a/gst/geometrictransform/gstcircle.c b/gst/geometrictransform/gstcircle.c
index b5b32837..e31923f8 100644
--- a/gst/geometrictransform/gstcircle.c
+++ b/gst/geometrictransform/gstcircle.c
@@ -191,7 +191,7 @@ gst_circle_class_init (GstCircleClass * klass)
parent_class = g_type_class_peek_parent (klass);
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"circle",
"Transform/Effect/Video",
"Warps the picture into an arc shaped form",
diff --git a/gst/geometrictransform/gstdiffuse.c b/gst/geometrictransform/gstdiffuse.c
index 547f655c..dcbea7b7 100644
--- a/gst/geometrictransform/gstdiffuse.c
+++ b/gst/geometrictransform/gstdiffuse.c
@@ -184,7 +184,7 @@ gst_diffuse_class_init (GstDiffuseClass * klass)
parent_class = g_type_class_peek_parent (klass);
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"diffuse",
"Transform/Effect/Video",
"Diffuses the image by moving its pixels in random directions",
diff --git a/gst/geometrictransform/gstfisheye.c b/gst/geometrictransform/gstfisheye.c
index 910cdb27..bda896db 100644
--- a/gst/geometrictransform/gstfisheye.c
+++ b/gst/geometrictransform/gstfisheye.c
@@ -116,7 +116,7 @@ gst_fisheye_class_init (GstFisheyeClass * klass)
gstgt_class = (GstGeometricTransformClass *) klass;
parent_class = g_type_class_peek_parent (klass);
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"fisheye",
"Transform/Effect/Video",
"Split the image into two halves and reflect one over each other",
diff --git a/gst/geometrictransform/gstkaleidoscope.c b/gst/geometrictransform/gstkaleidoscope.c
index 482ca26a..2a50379a 100644
--- a/gst/geometrictransform/gstkaleidoscope.c
+++ b/gst/geometrictransform/gstkaleidoscope.c
@@ -196,7 +196,7 @@ gst_kaleidoscope_class_init (GstKaleidoscopeClass * klass)
parent_class = g_type_class_peek_parent (klass);
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"kaleidoscope",
"Transform/Effect/Video",
"Applies 'kaleidoscope' geometric transform to the image",
diff --git a/gst/geometrictransform/gstmarble.c b/gst/geometrictransform/gstmarble.c
index 3f861a2c..299fdb0f 100644
--- a/gst/geometrictransform/gstmarble.c
+++ b/gst/geometrictransform/gstmarble.c
@@ -223,7 +223,7 @@ gst_marble_class_init (GstMarbleClass * klass)
parent_class = g_type_class_peek_parent (klass);
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"marble",
"Transform/Effect/Video",
"Applies a marbling effect to the image",
diff --git a/gst/geometrictransform/gstmirror.c b/gst/geometrictransform/gstmirror.c
index c7bdcea2..3b40a43a 100644
--- a/gst/geometrictransform/gstmirror.c
+++ b/gst/geometrictransform/gstmirror.c
@@ -182,7 +182,7 @@ gst_mirror_class_init (GstMirrorClass * klass)
gstelement_class = (GstElementClass *) klass;
gstgt_class = (GstGeometricTransformClass *) klass;
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"mirror",
"Transform/Effect/Video",
"Split the image into two halves and reflect one over each other",
diff --git a/gst/geometrictransform/gstpinch.c b/gst/geometrictransform/gstpinch.c
index a42d18a9..2bf90e01 100644
--- a/gst/geometrictransform/gstpinch.c
+++ b/gst/geometrictransform/gstpinch.c
@@ -177,7 +177,7 @@ gst_pinch_class_init (GstPinchClass * klass)
parent_class = g_type_class_peek_parent (klass);
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"pinch",
"Transform/Effect/Video",
"Applies 'pinch' geometric transform to the image",
diff --git a/gst/geometrictransform/gstrotate.c b/gst/geometrictransform/gstrotate.c
index d4fbbc02..5780c0e7 100644
--- a/gst/geometrictransform/gstrotate.c
+++ b/gst/geometrictransform/gstrotate.c
@@ -185,7 +185,7 @@ gst_rotate_class_init (GstRotateClass * klass)
parent_class = g_type_class_peek_parent (klass);
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"rotate",
"Transform/Effect/Video",
"Rotates the picture by an arbitrary angle",
diff --git a/gst/geometrictransform/gstsphere.c b/gst/geometrictransform/gstsphere.c
index 340a20e0..b78f972b 100644
--- a/gst/geometrictransform/gstsphere.c
+++ b/gst/geometrictransform/gstsphere.c
@@ -189,7 +189,7 @@ gst_sphere_class_init (GstSphereClass * klass)
parent_class = g_type_class_peek_parent (klass);
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"sphere",
"Transform/Effect/Video",
"Applies 'sphere' geometric transform to the image",
diff --git a/gst/geometrictransform/gstsquare.c b/gst/geometrictransform/gstsquare.c
index f6ee9a5d..1915b2a7 100644
--- a/gst/geometrictransform/gstsquare.c
+++ b/gst/geometrictransform/gstsquare.c
@@ -187,7 +187,7 @@ gst_square_class_init (GstSquareClass * klass)
parent_class = g_type_class_peek_parent (klass);
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"square",
"Transform/Effect/Video",
"Distort center part of the image into a square",
diff --git a/gst/geometrictransform/gststretch.c b/gst/geometrictransform/gststretch.c
index 093b50e5..770aae58 100644
--- a/gst/geometrictransform/gststretch.c
+++ b/gst/geometrictransform/gststretch.c
@@ -178,7 +178,7 @@ gst_stretch_class_init (GstStretchClass * klass)
parent_class = g_type_class_peek_parent (klass);
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"stretch",
"Transform/Effect/Video",
"Stretch the image in a circle around the center point",
diff --git a/gst/geometrictransform/gsttunnel.c b/gst/geometrictransform/gsttunnel.c
index 28f68fdf..9685fd5c 100644
--- a/gst/geometrictransform/gsttunnel.c
+++ b/gst/geometrictransform/gsttunnel.c
@@ -116,7 +116,7 @@ gst_tunnel_class_init (GstTunnelClass * klass)
parent_class = g_type_class_peek_parent (klass);
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"tunnel",
"Transform/Effect/Video",
"Light tunnel effect", "Filippo Argiolas <filippo.argiolas@gmail.com>");
diff --git a/gst/geometrictransform/gsttwirl.c b/gst/geometrictransform/gsttwirl.c
index f4a4eee8..a5ea99e1 100644
--- a/gst/geometrictransform/gsttwirl.c
+++ b/gst/geometrictransform/gsttwirl.c
@@ -167,7 +167,7 @@ gst_twirl_class_init (GstTwirlClass * klass)
parent_class = g_type_class_peek_parent (klass);
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"twirl",
"Transform/Effect/Video",
"Twists the image from the center out",
diff --git a/gst/geometrictransform/gstwaterripple.c b/gst/geometrictransform/gstwaterripple.c
index cebe4209..ac902266 100644
--- a/gst/geometrictransform/gstwaterripple.c
+++ b/gst/geometrictransform/gstwaterripple.c
@@ -197,7 +197,7 @@ gst_water_ripple_class_init (GstWaterRippleClass * klass)
parent_class = g_type_class_peek_parent (klass);
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"waterripple",
"Transform/Effect/Video",
"Creates a water ripple effect on the image",
diff --git a/gst/hdvparse/Makefile.in b/gst/hdvparse/Makefile.in
index 4bf9826d..b221eea6 100644
--- a/gst/hdvparse/Makefile.in
+++ b/gst/hdvparse/Makefile.in
@@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/hdvparse/gsthdvparse.c b/gst/hdvparse/gsthdvparse.c
index 018722fc..8f0d4fcb 100644
--- a/gst/hdvparse/gsthdvparse.c
+++ b/gst/hdvparse/gsthdvparse.c
@@ -120,7 +120,7 @@ gst_hdvparse_base_init (gpointer klass)
gst_static_pad_template_get (&src_template));
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&sink_template));
- gst_element_class_set_metadata (element_class, "HDVParser",
+ gst_element_class_set_static_metadata (element_class, "HDVParser",
"Data/Parser",
"HDV private stream Parser", "Edward Hervey <bilboed@bilboed.com>");
}
diff --git a/gst/hls/Makefile.am b/gst/hls/Makefile.am
index e5161174..4f2b9070 100644
--- a/gst/hls/Makefile.am
+++ b/gst/hls/Makefile.am
@@ -13,7 +13,7 @@ libgstfragmented_la_SOURCES = \
libgstfragmented_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(SOUP_CFLAGS) $(GIO_CFLAGS)
# $(GST_PLUGINS_BAD_CFLAGS) -lgstpbutils-$(GST_MAJORMINOR) -lgstvideo-$(GST_MAJORMINOR)
-libgstfragmented_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(SOUP_LIBS) $(GIO_LIBS)
+libgstfragmented_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(SOUP_LIBS) $(GIO_LIBS) $(LIBM)
libgstfragmented_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -no-undefined
libgstfragmented_la_LIBTOOLFLAGS = --tag=disable-static
diff --git a/gst/hls/Makefile.in b/gst/hls/Makefile.in
index 70af7457..9f2a0d81 100644
--- a/gst/hls/Makefile.in
+++ b/gst/hls/Makefile.in
@@ -128,7 +128,8 @@ am__installdirs = "$(DESTDIR)$(plugindir)"
LTLIBRARIES = $(plugin_LTLIBRARIES)
am__DEPENDENCIES_1 =
libgstfragmented_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
am_libgstfragmented_la_OBJECTS = libgstfragmented_la-m3u8.lo \
libgstfragmented_la-gsthlsdemux.lo \
libgstfragmented_la-gstfragment.lo \
@@ -254,6 +255,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -626,7 +629,7 @@ libgstfragmented_la_SOURCES = \
libgstfragmented_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(SOUP_CFLAGS) $(GIO_CFLAGS)
# $(GST_PLUGINS_BAD_CFLAGS) -lgstpbutils-$(GST_MAJORMINOR) -lgstvideo-$(GST_MAJORMINOR)
-libgstfragmented_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(SOUP_LIBS) $(GIO_LIBS)
+libgstfragmented_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(SOUP_LIBS) $(GIO_LIBS) $(LIBM)
libgstfragmented_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -no-undefined
libgstfragmented_la_LIBTOOLFLAGS = --tag=disable-static
diff --git a/gst/hls/gsthlsdemux.c b/gst/hls/gsthlsdemux.c
index 5c9ec6be..52816526 100644
--- a/gst/hls/gsthlsdemux.c
+++ b/gst/hls/gsthlsdemux.c
@@ -102,6 +102,7 @@ static gboolean gst_hls_demux_src_query (GstPad * pad, GstObject * parent,
static void gst_hls_demux_stream_loop (GstHLSDemux * demux);
static void gst_hls_demux_updates_loop (GstHLSDemux * demux);
static void gst_hls_demux_stop (GstHLSDemux * demux);
+static void gst_hls_demux_pause_tasks (GstHLSDemux * demux, gboolean caching);
static gboolean gst_hls_demux_cache_fragments (GstHLSDemux * demux);
static gboolean gst_hls_demux_schedule (GstHLSDemux * demux);
static gboolean gst_hls_demux_switch_playlist (GstHLSDemux * demux);
@@ -126,6 +127,8 @@ gst_hls_demux_dispose (GObject * obj)
if (GST_TASK_STATE (demux->stream_task) != GST_TASK_STOPPED) {
GST_DEBUG_OBJECT (demux, "Leaving streaming task");
gst_task_stop (demux->stream_task);
+ g_rec_mutex_lock (&demux->stream_lock);
+ g_rec_mutex_unlock (&demux->stream_lock);
gst_task_join (demux->stream_task);
}
gst_object_unref (demux->stream_task);
@@ -136,7 +139,14 @@ gst_hls_demux_dispose (GObject * obj)
if (demux->updates_task) {
if (GST_TASK_STATE (demux->updates_task) != GST_TASK_STOPPED) {
GST_DEBUG_OBJECT (demux, "Leaving updates task");
+ demux->cancelled = TRUE;
+ gst_uri_downloader_cancel (demux->downloader);
gst_task_stop (demux->updates_task);
+ g_mutex_lock (&demux->updates_timed_lock);
+ GST_TASK_SIGNAL (demux->updates_task);
+ g_rec_mutex_lock (&demux->updates_lock);
+ g_rec_mutex_unlock (&demux->updates_lock);
+ g_mutex_unlock (&demux->updates_timed_lock);
gst_task_join (demux->updates_task);
}
gst_object_unref (demux->updates_task);
@@ -197,7 +207,7 @@ gst_hls_demux_class_init (GstHLSDemuxClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&sinktemplate));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"HLS Demuxer",
"Demuxer/URIList",
"HTTP Live Streaming demuxer",
@@ -315,7 +325,15 @@ gst_hls_demux_change_state (GstElement * element, GstStateChange transition)
switch (transition) {
case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+ demux->cancelled = TRUE;
+ gst_uri_downloader_cancel (demux->downloader);
gst_task_stop (demux->updates_task);
+ g_mutex_lock (&demux->updates_timed_lock);
+ GST_TASK_SIGNAL (demux->updates_task);
+ g_mutex_unlock (&demux->updates_timed_lock);
+ g_rec_mutex_lock (&demux->updates_lock);
+ g_rec_mutex_unlock (&demux->updates_lock);
+ demux->cancelled = FALSE;
break;
case GST_STATE_CHANGE_PAUSED_TO_READY:
demux->cancelled = TRUE;
@@ -397,6 +415,11 @@ gst_hls_demux_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
gst_task_pause (demux->stream_task);
gst_uri_downloader_cancel (demux->downloader);
gst_task_stop (demux->updates_task);
+ g_mutex_lock (&demux->updates_timed_lock);
+ GST_TASK_SIGNAL (demux->updates_task);
+ g_mutex_unlock (&demux->updates_timed_lock);
+ g_rec_mutex_lock (&demux->updates_lock);
+ g_rec_mutex_unlock (&demux->updates_lock);
gst_task_pause (demux->stream_task);
/* wait for streaming to finish */
@@ -584,18 +607,47 @@ gst_hls_demux_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
}
static void
+gst_hls_demux_pause_tasks (GstHLSDemux * demux, gboolean caching)
+{
+ if (GST_TASK_STATE (demux->updates_task) != GST_TASK_STOPPED) {
+ demux->cancelled = TRUE;
+ gst_uri_downloader_cancel (demux->downloader);
+ gst_task_pause (demux->updates_task);
+ if (!caching)
+ g_mutex_lock (&demux->updates_timed_lock);
+ GST_TASK_SIGNAL (demux->updates_task);
+ if (!caching)
+ g_mutex_unlock (&demux->updates_timed_lock);
+ }
+
+ if (GST_TASK_STATE (demux->stream_task) != GST_TASK_STOPPED) {
+ demux->stop_stream_task = TRUE;
+ gst_task_pause (demux->stream_task);
+ }
+}
+
+static void
gst_hls_demux_stop (GstHLSDemux * demux)
{
gst_uri_downloader_cancel (demux->downloader);
if (GST_TASK_STATE (demux->updates_task) != GST_TASK_STOPPED) {
- demux->stop_stream_task = TRUE;
+ demux->cancelled = TRUE;
+ gst_uri_downloader_cancel (demux->downloader);
gst_task_stop (demux->updates_task);
+ g_mutex_lock (&demux->updates_timed_lock);
GST_TASK_SIGNAL (demux->updates_task);
+ g_mutex_unlock (&demux->updates_timed_lock);
+ g_rec_mutex_lock (&demux->updates_lock);
+ g_rec_mutex_unlock (&demux->updates_lock);
}
- if (GST_TASK_STATE (demux->stream_task) != GST_TASK_STOPPED)
+ if (GST_TASK_STATE (demux->stream_task) != GST_TASK_STOPPED) {
+ demux->stop_stream_task = TRUE;
gst_task_stop (demux->stream_task);
+ g_rec_mutex_lock (&demux->stream_lock);
+ g_rec_mutex_unlock (&demux->stream_lock);
+ }
}
static void
@@ -709,7 +761,7 @@ end_of_playlist:
{
GST_DEBUG_OBJECT (demux, "Reached end of playlist, sending EOS");
gst_pad_push_event (demux->srcpad, gst_event_new_eos ());
- gst_hls_demux_stop (demux);
+ gst_hls_demux_pause_tasks (demux, FALSE);
return;
}
@@ -719,17 +771,22 @@ cache_error:
if (!demux->cancelled) {
GST_ELEMENT_ERROR (demux, RESOURCE, NOT_FOUND,
("Could not cache the first fragments"), (NULL));
- gst_hls_demux_stop (demux);
+ gst_hls_demux_pause_tasks (demux, FALSE);
}
return;
}
error_pushing:
{
- /* FIXME: handle error */
- GST_DEBUG_OBJECT (demux, "Error pushing buffer: %s... stopping task",
- gst_flow_get_name (ret));
- gst_hls_demux_stop (demux);
+ if (ret == GST_FLOW_NOT_LINKED || ret < GST_FLOW_EOS) {
+ GST_ELEMENT_ERROR (demux, STREAM, FAILED, (NULL),
+ ("stream stopped, reason %s", gst_flow_get_name (ret)));
+ gst_pad_push_event (demux->srcpad, gst_event_new_eos ());
+ } else {
+ GST_DEBUG_OBJECT (demux, "stream stopped, reason %s",
+ gst_flow_get_name (ret));
+ }
+ gst_hls_demux_pause_tasks (demux, FALSE);
return;
}
@@ -800,6 +857,9 @@ gst_hls_demux_updates_loop (GstHLSDemux * demux)
g_mutex_lock (&demux->updates_timed_lock);
GST_DEBUG_OBJECT (demux, "Started updates task");
while (TRUE) {
+ if (demux->cancelled)
+ goto quit;
+
/* schedule the next update */
gst_hls_demux_schedule (demux);
@@ -808,9 +868,15 @@ gst_hls_demux_updates_loop (GstHLSDemux * demux)
&demux->updates_timed_lock, &demux->next_update)) {
goto quit;
}
+
+ if (demux->cancelled)
+ goto quit;
+
/* update the playlist for live sources */
if (gst_m3u8_client_is_live (demux->client)) {
if (!gst_hls_demux_update_playlist (demux, TRUE)) {
+ if (demux->cancelled)
+ goto quit;
demux->client->update_failed_count++;
if (demux->client->update_failed_count < DEFAULT_FAILED_COUNT) {
GST_WARNING_OBJECT (demux, "Could not update the playlist");
@@ -818,7 +884,7 @@ gst_hls_demux_updates_loop (GstHLSDemux * demux)
} else {
GST_ELEMENT_ERROR (demux, RESOURCE, NOT_FOUND,
("Could not update the playlist"), (NULL));
- goto quit;
+ goto error;
}
}
}
@@ -834,10 +900,15 @@ gst_hls_demux_updates_loop (GstHLSDemux * demux)
continue;
}
+ if (demux->cancelled)
+ goto quit;
+
/* fetch the next fragment */
if (g_queue_is_empty (demux->queue)) {
if (!gst_hls_demux_get_next_fragment (demux, FALSE)) {
- if (!demux->end_of_playlist && !demux->cancelled) {
+ if (demux->cancelled) {
+ goto quit;
+ } else if (!demux->end_of_playlist && !demux->cancelled) {
demux->client->update_failed_count++;
if (demux->client->update_failed_count < DEFAULT_FAILED_COUNT) {
GST_WARNING_OBJECT (demux, "Could not fetch the next fragment");
@@ -845,12 +916,15 @@ gst_hls_demux_updates_loop (GstHLSDemux * demux)
} else {
GST_ELEMENT_ERROR (demux, RESOURCE, NOT_FOUND,
("Could not fetch the next fragment"), (NULL));
- goto quit;
+ goto error;
}
}
} else {
demux->client->update_failed_count = 0;
+ if (demux->cancelled)
+ goto quit;
+
/* try to switch to another bitrate if needed */
gst_hls_demux_switch_playlist (demux);
}
@@ -860,7 +934,14 @@ gst_hls_demux_updates_loop (GstHLSDemux * demux)
quit:
{
GST_DEBUG_OBJECT (demux, "Stopped updates task");
- gst_hls_demux_stop (demux);
+ g_mutex_unlock (&demux->updates_timed_lock);
+ return;
+ }
+
+error:
+ {
+ GST_DEBUG_OBJECT (demux, "Stopped updates task because of error");
+ gst_hls_demux_pause_tasks (demux, TRUE);
g_mutex_unlock (&demux->updates_timed_lock);
}
}
@@ -947,7 +1028,7 @@ gst_hls_src_buf_to_utf8_playlist (GstBuffer * buf)
/* alloc size + 1 to end with a null character */
playlist = g_malloc0 (info.size + 1);
- memcpy (playlist, info.data, info.size + 1);
+ memcpy (playlist, info.data, info.size);
gst_buffer_unmap (buf, &info);
gst_buffer_unref (buf);
diff --git a/gst/hls/gsturidownloader.c b/gst/hls/gsturidownloader.c
index 1ef7ddb1..7e95ec02 100644
--- a/gst/hls/gsturidownloader.c
+++ b/gst/hls/gsturidownloader.c
@@ -167,7 +167,9 @@ gst_uri_downloader_sink_event (GstPad * pad, GstObject * parent,
gst_util_get_timestamp ();
GST_OBJECT_UNLOCK (downloader);
GST_DEBUG_OBJECT (downloader, "Signaling chain funtion");
+ g_mutex_lock (&downloader->priv->lock);
g_cond_signal (&downloader->priv->cond);
+ g_mutex_unlock (&downloader->priv->lock);
} else {
GST_OBJECT_UNLOCK (downloader);
}
@@ -271,7 +273,9 @@ gst_uri_downloader_cancel (GstUriDownloader * downloader)
downloader->priv->download = NULL;
GST_OBJECT_UNLOCK (downloader);
GST_DEBUG_OBJECT (downloader, "Signaling chain funtion");
+ g_mutex_lock (&downloader->priv->lock);
g_cond_signal (&downloader->priv->cond);
+ g_mutex_unlock (&downloader->priv->lock);
} else {
GST_OBJECT_UNLOCK (downloader);
GST_DEBUG_OBJECT (downloader,
diff --git a/gst/id3tag/Makefile.in b/gst/id3tag/Makefile.in
index 34c51ab7..6f840c06 100644
--- a/gst/id3tag/Makefile.in
+++ b/gst/id3tag/Makefile.in
@@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/id3tag/gstid3mux.c b/gst/id3tag/gstid3mux.c
index 68d50e51..f741f731 100644
--- a/gst/id3tag/gstid3mux.c
+++ b/gst/id3tag/gstid3mux.c
@@ -123,7 +123,7 @@ gst_id3_mux_class_init (GstId3MuxClass * klass)
GST_TAG_MUX_CLASS (klass)->render_end_tag =
GST_DEBUG_FUNCPTR (gst_id3_mux_render_v1_tag);
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"ID3 v1 and v2 Muxer", "Formatter/Metadata",
"Adds an ID3v2 header and ID3v1 footer to a file",
"Michael Smith <msmith@songbirdnest.com>, "
diff --git a/gst/inter/Makefile.in b/gst/inter/Makefile.in
index e1e1542d..f0a789cf 100644
--- a/gst/inter/Makefile.in
+++ b/gst/inter/Makefile.in
@@ -267,6 +267,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/inter/gstinteraudiosink.c b/gst/inter/gstinteraudiosink.c
index 44394159..9cd82d67 100644
--- a/gst/inter/gstinteraudiosink.c
+++ b/gst/inter/gstinteraudiosink.c
@@ -100,7 +100,7 @@ gst_inter_audio_sink_class_init (GstInterAudioSinkClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_inter_audio_sink_sink_template));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"Internal audio sink",
"Sink/Audio",
"Virtual audio sink for internal process communication",
diff --git a/gst/inter/gstinteraudiosrc.c b/gst/inter/gstinteraudiosrc.c
index d30c27d1..3e55be26 100644
--- a/gst/inter/gstinteraudiosrc.c
+++ b/gst/inter/gstinteraudiosrc.c
@@ -105,7 +105,7 @@ gst_inter_audio_src_class_init (GstInterAudioSrcClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_inter_audio_src_src_template));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"Internal audio source",
"Source/Audio",
"Virtual audio source for internal process communication",
diff --git a/gst/inter/gstintersubsink.c b/gst/inter/gstintersubsink.c
index 7ead62cb..a5d669bd 100644
--- a/gst/inter/gstintersubsink.c
+++ b/gst/inter/gstintersubsink.c
@@ -94,7 +94,7 @@ gst_inter_sub_sink_class_init (GstInterSubSinkClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_inter_sub_sink_sink_template));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"Internal subtitle sink",
"Sink/Subtitle",
"Virtual subtitle sink for internal process communication",
diff --git a/gst/inter/gstintersubsrc.c b/gst/inter/gstintersubsrc.c
index 39cb6224..cb6a6caf 100644
--- a/gst/inter/gstintersubsrc.c
+++ b/gst/inter/gstintersubsrc.c
@@ -97,7 +97,7 @@ gst_inter_sub_src_class_init (GstInterSubSrcClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_inter_sub_src_src_template));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"Internal subtitle source",
"Source/Subtitle",
"Virtual subtitle source for internal process communication",
diff --git a/gst/inter/gstintertest.c b/gst/inter/gstintertest.c
index 077024ea..8b22477f 100644
--- a/gst/inter/gstintertest.c
+++ b/gst/inter/gstintertest.c
@@ -157,7 +157,7 @@ gst_inter_test_create_pipeline_playbin (GstInterTest * intertest,
pipeline = gst_pipeline_new (NULL);
gst_bin_add (GST_BIN (pipeline),
- gst_element_factory_make ("playbin2", "source"));
+ gst_element_factory_make ("playbin", "source"));
if (error) {
g_print ("pipeline parsing error: %s\n", error->message);
diff --git a/gst/inter/gstintervideosink.c b/gst/inter/gstintervideosink.c
index 04b5a400..e892ca03 100644
--- a/gst/inter/gstintervideosink.c
+++ b/gst/inter/gstintervideosink.c
@@ -97,7 +97,7 @@ gst_inter_video_sink_class_init (GstInterVideoSinkClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_inter_video_sink_sink_template));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"Internal video sink",
"Sink/Video",
"Virtual video sink for internal process communication",
diff --git a/gst/inter/gstintervideosrc.c b/gst/inter/gstintervideosrc.c
index 515ee4ee..bc6f7175 100644
--- a/gst/inter/gstintervideosrc.c
+++ b/gst/inter/gstintervideosrc.c
@@ -100,7 +100,7 @@ gst_inter_video_src_class_init (GstInterVideoSrcClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_inter_video_src_src_template));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"Internal video source",
"Source/Video",
"Virtual video source for internal process communication",
diff --git a/gst/interlace/Makefile.in b/gst/interlace/Makefile.in
index 39244dc6..151b16a8 100644
--- a/gst/interlace/Makefile.in
+++ b/gst/interlace/Makefile.in
@@ -247,6 +247,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/interlace/gstinterlace.c b/gst/interlace/gstinterlace.c
index 63182f6a..6e0fcdb5 100644
--- a/gst/interlace/gstinterlace.c
+++ b/gst/interlace/gstinterlace.c
@@ -226,7 +226,7 @@ gst_interlace_class_init (GstInterlaceClass * klass)
"Allow generation of buffers with RFF flag set, i.e., duration of 3 fields",
FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"Interlace filter", "Filter/Video",
"Creates an interlaced video from progressive frames",
"David Schleef <ds@schleef.org>");
diff --git a/gst/ivfparse/Makefile.in b/gst/ivfparse/Makefile.in
index af607196..7eed1810 100644
--- a/gst/ivfparse/Makefile.in
+++ b/gst/ivfparse/Makefile.in
@@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/ivfparse/gstivfparse.c b/gst/ivfparse/gstivfparse.c
index 6c04a661..21b79e68 100644
--- a/gst/ivfparse/gstivfparse.c
+++ b/gst/ivfparse/gstivfparse.c
@@ -79,7 +79,7 @@ gst_ivf_parse_base_init (gpointer gclass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"IVF parser",
"Codec/Demuxer",
"Demuxes a IVF stream", "Philip Jägenstedt <philipj@opera.com>");
diff --git a/gst/jp2kdecimator/Makefile.in b/gst/jp2kdecimator/Makefile.in
index a2f3c262..ccf0e7a1 100644
--- a/gst/jp2kdecimator/Makefile.in
+++ b/gst/jp2kdecimator/Makefile.in
@@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/jp2kdecimator/gstjp2kdecimator.c b/gst/jp2kdecimator/gstjp2kdecimator.c
index 10644676..c7f82ae1 100644
--- a/gst/jp2kdecimator/gstjp2kdecimator.c
+++ b/gst/jp2kdecimator/gstjp2kdecimator.c
@@ -94,7 +94,7 @@ gst_jp2k_decimator_base_init (gpointer g_class)
{
GstElementClass *gstelement_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"JPEG2000 decimator",
"Filter/Image",
"Removes information from JPEG2000 streams without recompression",
diff --git a/gst/jpegformat/Makefile.in b/gst/jpegformat/Makefile.in
index 3707eca9..1c549a43 100644
--- a/gst/jpegformat/Makefile.in
+++ b/gst/jpegformat/Makefile.in
@@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/jpegformat/gstjifmux.c b/gst/jpegformat/gstjifmux.c
index d7a2de04..50bd30c9 100644
--- a/gst/jpegformat/gstjifmux.c
+++ b/gst/jpegformat/gstjifmux.c
@@ -141,7 +141,7 @@ gst_jif_mux_class_init (GstJifMuxClass * klass)
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&gst_jif_mux_sink_pad_template));
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"JPEG stream muxer",
"Video/Formatter",
"Remuxes JPEG images with markers and tags",
diff --git a/gst/jpegformat/gstjpegparse.c b/gst/jpegformat/gstjpegparse.c
index 0aae82d0..fff0c5b9 100644
--- a/gst/jpegformat/gstjpegparse.c
+++ b/gst/jpegformat/gstjpegparse.c
@@ -153,7 +153,7 @@ gst_jpeg_parse_class_init (GstJpegParseClass * klass)
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&gst_jpeg_parse_sink_pad_template));
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"JPEG stream parser",
"Video/Parser",
"Parse JPEG images into single-frame buffers",
diff --git a/gst/librfb/Makefile.in b/gst/librfb/Makefile.in
index ac972f60..af4c7ec1 100644
--- a/gst/librfb/Makefile.in
+++ b/gst/librfb/Makefile.in
@@ -259,6 +259,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/librfb/gstrfbsrc.c b/gst/librfb/gstrfbsrc.c
index 8acf4c8d..670e1bdb 100644
--- a/gst/librfb/gstrfbsrc.c
+++ b/gst/librfb/gstrfbsrc.c
@@ -96,7 +96,7 @@ gst_rfb_src_base_init (gpointer g_class)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_rfb_src_template));
- gst_element_class_set_metadata (element_class, "Rfb source",
+ gst_element_class_set_static_metadata (element_class, "Rfb source",
"Source/Video",
"Creates a rfb video stream",
"David A. Schleef <ds@schleef.org>, "
diff --git a/gst/liveadder/Makefile.in b/gst/liveadder/Makefile.in
index 2f506b53..e142dfd5 100644
--- a/gst/liveadder/Makefile.in
+++ b/gst/liveadder/Makefile.in
@@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/liveadder/liveadder.c b/gst/liveadder/liveadder.c
index 220d2cce..080d471a 100644
--- a/gst/liveadder/liveadder.c
+++ b/gst/liveadder/liveadder.c
@@ -172,7 +172,7 @@ gst_live_adder_class_init (GstLiveAdderClass * klass)
gst_static_pad_template_get (&gst_live_adder_src_template));
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&gst_live_adder_sink_template));
- gst_element_class_set_metadata (gstelement_class, "Live Adder element",
+ gst_element_class_set_static_metadata (gstelement_class, "Live Adder element",
"Generic/Audio",
"Mixes live/discontinuous audio streams",
"Olivier Crete <olivier.crete@collabora.co.uk>");
diff --git a/gst/mpegdemux/Makefile.in b/gst/mpegdemux/Makefile.in
index bbf9b5da..2e9f263c 100644
--- a/gst/mpegdemux/Makefile.in
+++ b/gst/mpegdemux/Makefile.in
@@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/mpegdemux/gstmpegdemux.c b/gst/mpegdemux/gstmpegdemux.c
index 46376ba8..bbe03e3d 100644
--- a/gst/mpegdemux/gstmpegdemux.c
+++ b/gst/mpegdemux/gstmpegdemux.c
@@ -166,10 +166,13 @@ static inline gboolean gst_flups_demux_scan_forward_ts (GstFluPSDemux * demux,
static inline gboolean gst_flups_demux_scan_backward_ts (GstFluPSDemux * demux,
guint64 * pos, SCAN_MODE mode, guint64 * rts, gint limit);
-static inline void gst_flups_demux_send_segment_updates (GstFluPSDemux * demux,
+static inline void gst_flups_demux_send_gap_updates (GstFluPSDemux * demux,
GstClockTime new_time);
static inline void gst_flups_demux_clear_times (GstFluPSDemux * demux);
+static void gst_flups_demux_reset_psm (GstFluPSDemux * demux);
+static void gst_flups_demux_flush (GstFluPSDemux * demux);
+
static GstElementClass *parent_class = NULL;
static void gst_segment_set_position (GstSegment * segment, GstFormat format,
@@ -228,7 +231,7 @@ gst_flups_demux_base_init (GstFluPSDemuxClass * klass)
gst_element_class_add_pad_template (element_class, klass->private_template);
gst_element_class_add_pad_template (element_class, klass->sink_template);
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"The Fluendo MPEG Program Stream Demuxer", "Codec/Demuxer",
"Demultiplexes MPEG Program Streams", "Wim Taymans <wim@fluendo.com>");
}
@@ -272,6 +275,10 @@ gst_flups_demux_init (GstFluPSDemux * demux)
g_malloc0 (sizeof (GstFluPSStream *) * (GST_FLUPS_DEMUX_MAX_STREAMS));
demux->found_count = 0;
+ demux->adapter = gst_adapter_new ();
+ demux->rev_adapter = gst_adapter_new ();
+
+ gst_flups_demux_reset (demux);
}
static void
@@ -281,6 +288,9 @@ gst_flups_demux_finalize (GstFluPSDemux * demux)
g_free (demux->streams);
g_free (demux->streams_found);
+ g_object_unref (demux->adapter);
+ g_object_unref (demux->rev_adapter);
+
G_OBJECT_CLASS (parent_class)->finalize (G_OBJECT (demux));
}
@@ -289,15 +299,16 @@ gst_flups_demux_reset (GstFluPSDemux * demux)
{
/* Clean up the streams and pads we allocated */
gint i;
- GstEvent **p_ev;
for (i = 0; i < GST_FLUPS_DEMUX_MAX_STREAMS; i++) {
GstFluPSStream *stream = demux->streams[i];
if (stream != NULL) {
- if (stream->pad)
+ if (stream->pad && GST_PAD_PARENT (stream->pad))
gst_element_remove_pad (GST_ELEMENT_CAST (demux), stream->pad);
+ if (stream->pending_tags)
+ gst_tag_list_unref (stream->pending_tags);
g_free (stream);
demux->streams[i] = NULL;
}
@@ -305,9 +316,28 @@ gst_flups_demux_reset (GstFluPSDemux * demux)
memset (demux->streams_found, 0,
sizeof (GstFluPSStream *) * (GST_FLUPS_DEMUX_MAX_STREAMS));
demux->found_count = 0;
- p_ev = &demux->lang_codes;
- gst_event_replace (p_ev, NULL);
+ gst_adapter_clear (demux->adapter);
+ gst_adapter_clear (demux->rev_adapter);
+
+ demux->adapter_offset = G_MAXUINT64;
+ demux->first_scr = G_MAXUINT64;
+ demux->last_scr = G_MAXUINT64;
+ demux->current_scr = G_MAXUINT64;
+ demux->base_time = G_MAXUINT64;
+ demux->scr_rate_n = G_MAXUINT64;
+ demux->scr_rate_d = G_MAXUINT64;
+ demux->first_pts = G_MAXUINT64;
+ demux->last_pts = G_MAXUINT64;
+ demux->mux_rate = G_MAXUINT64;
+ demux->next_pts = G_MAXUINT64;
+ demux->next_dts = G_MAXUINT64;
+ demux->need_no_more_pads = TRUE;
+ demux->adjust_segment = TRUE;
+ gst_flups_demux_reset_psm (demux);
+ gst_segment_init (&demux->sink_segment, GST_FORMAT_UNDEFINED);
+ gst_segment_init (&demux->src_segment, GST_FORMAT_TIME);
+ gst_flups_demux_flush (demux);
}
static GstFluPSStream *
@@ -423,7 +453,9 @@ gst_flups_demux_create_stream (GstFluPSDemux * demux, gint id, gint stream_type)
stream->discont = TRUE;
stream->need_segment = TRUE;
stream->notlinked = FALSE;
+ stream->last_flow = GST_FLOW_OK;
stream->type = stream_type;
+ stream->pending_tags = NULL;
stream->pad = gst_pad_new_from_template (template, name);
stream->segment_thresh = threshold;
gst_pad_set_event_function (stream->pad,
@@ -455,7 +487,15 @@ gst_flups_demux_get_stream (GstFluPSDemux * demux, gint id, gint type)
GST_DEBUG_OBJECT (demux, "adding pad for stream id 0x%02x type 0x%02x", id,
type);
- gst_element_add_pad (GST_ELEMENT (demux), stream->pad);
+ if (demux->need_no_more_pads) {
+ gst_element_add_pad (GST_ELEMENT (demux), stream->pad);
+ } else {
+ /* only likely to confuse decodebin etc, so discard */
+ /* FIXME should perform full switch protocol:
+ * add a whole new set of pads, drop old and no-more-pads again */
+ GST_DEBUG_OBJECT (demux,
+ "but already signalled no-more-pads; not adding");
+ }
demux->streams[id] = stream;
demux->streams_found[demux->found_count++] = stream;
@@ -470,28 +510,13 @@ unknown_stream:
}
}
-static GstFlowReturn
-gst_flups_demux_send_data (GstFluPSDemux * demux, GstFluPSStream * stream,
- GstBuffer * buf)
+static inline void
+gst_flups_demux_send_segment (GstFluPSDemux * demux, GstFluPSStream * stream,
+ GstClockTime pts)
{
- GstFlowReturn result;
- GstClockTime pts = GST_CLOCK_TIME_NONE, dts = GST_CLOCK_TIME_NONE;
- guint size;
-
- if (stream == NULL)
- goto no_stream;
-
- /* timestamps */
- if (G_UNLIKELY (demux->next_pts != G_MAXUINT64))
- pts = MPEGTIME_TO_GSTTIME (demux->next_pts);
- if (G_UNLIKELY (demux->next_dts != G_MAXUINT64))
- dts = MPEGTIME_TO_GSTTIME (demux->next_dts);
-
/* discont */
if (G_UNLIKELY (stream->need_segment)) {
- guint64 time, start, stop;
GstSegment segment;
- GstEvent *newsegment;
GST_DEBUG ("PTS timestamp:%" GST_TIME_FORMAT " base_time %" GST_TIME_FORMAT
" src_segment.start:%" GST_TIME_FORMAT " .stop:%" GST_TIME_FORMAT,
@@ -499,52 +524,67 @@ gst_flups_demux_send_data (GstFluPSDemux * demux, GstFluPSStream * stream,
GST_TIME_ARGS (demux->src_segment.start),
GST_TIME_ARGS (demux->src_segment.stop));
- if (GST_CLOCK_TIME_IS_VALID (demux->base_time) &&
- GST_CLOCK_TIME_IS_VALID (demux->src_segment.start))
- start = demux->base_time + demux->src_segment.start;
- else
- start = 0;
-
- if (GST_CLOCK_TIME_IS_VALID (demux->src_segment.stop) &&
- GST_CLOCK_TIME_IS_VALID (demux->base_time))
- stop = demux->base_time + demux->src_segment.stop;
- else
- stop = -1;
-
- if (pts != GST_CLOCK_TIME_NONE) {
+ /* adjust segment start if estimating a seek was off quite a bit,
+ * make sure to do for all streams though to preserve a/v sync */
+ /* FIXME such adjustment tends to be frowned upon */
+ if (pts != GST_CLOCK_TIME_NONE && demux->adjust_segment) {
if (demux->src_segment.rate > 0) {
- if (GST_CLOCK_DIFF (start, pts) > GST_SECOND)
- start = pts;
+ if (GST_CLOCK_DIFF (demux->src_segment.start, pts) > GST_SECOND)
+ demux->src_segment.start = pts - demux->base_time;
} else {
- if (GST_CLOCK_DIFF (stop, pts) > GST_SECOND)
- stop = pts;
+ if (GST_CLOCK_DIFF (demux->src_segment.stop, pts) > GST_SECOND)
+ demux->src_segment.stop = pts - demux->base_time;
}
}
- if (GST_CLOCK_TIME_IS_VALID (demux->base_time) && start > demux->base_time)
- time = start - demux->base_time;
- else
- time = 0;
-
- GST_INFO_OBJECT (demux, "sending new segment: rate %g applied_rate %g "
- "start: %" GST_TIME_FORMAT ", stop: %" GST_TIME_FORMAT
- ", time: %" GST_TIME_FORMAT " to pad %" GST_PTR_FORMAT,
- demux->sink_segment.rate, demux->sink_segment.applied_rate,
- GST_TIME_ARGS (start), GST_TIME_ARGS (stop),
- GST_TIME_ARGS (time), stream->pad);
+ demux->adjust_segment = FALSE;
+
+ /* we should be in sync with downstream, so start from our segment notion,
+ * which also includes proper base_time etc, tweak it a bit and send */
+ gst_segment_copy_into (&demux->src_segment, &segment);
+ if (GST_CLOCK_TIME_IS_VALID (demux->base_time)) {
+ if (GST_CLOCK_TIME_IS_VALID (segment.start))
+ segment.start += demux->base_time;
+ if (GST_CLOCK_TIME_IS_VALID (segment.stop))
+ segment.stop += demux->base_time;
+ segment.time = segment.start - demux->base_time;
+ }
- gst_segment_init (&segment, GST_FORMAT_TIME);
- segment.rate = demux->sink_segment.rate;
- segment.applied_rate = demux->sink_segment.applied_rate;
- segment.start = start;
- segment.stop = stop;
- segment.time = time;
- newsegment = gst_event_new_segment (&segment);
+ GST_INFO_OBJECT (demux, "sending segment event %" GST_SEGMENT_FORMAT
+ " to pad %" GST_PTR_FORMAT, &segment, stream->pad);
- gst_pad_push_event (stream->pad, newsegment);
+ gst_pad_push_event (stream->pad, gst_event_new_segment (&segment));
stream->need_segment = FALSE;
}
+ if (G_UNLIKELY (stream->pending_tags)) {
+ GST_DEBUG_OBJECT (demux, "Sending pending_tags %p for pad %s:%s : %"
+ GST_PTR_FORMAT, stream->pending_tags,
+ GST_DEBUG_PAD_NAME (stream->pad), stream->pending_tags);
+ gst_pad_push_event (stream->pad, gst_event_new_tag (stream->pending_tags));
+ stream->pending_tags = NULL;
+ }
+}
+
+static GstFlowReturn
+gst_flups_demux_send_data (GstFluPSDemux * demux, GstFluPSStream * stream,
+ GstBuffer * buf)
+{
+ GstFlowReturn result;
+ GstClockTime pts = GST_CLOCK_TIME_NONE, dts = GST_CLOCK_TIME_NONE;
+ guint size;
+
+ if (stream == NULL)
+ goto no_stream;
+
+ /* timestamps */
+ if (G_UNLIKELY (demux->next_pts != G_MAXUINT64))
+ pts = MPEGTIME_TO_GSTTIME (demux->next_pts);
+ if (G_UNLIKELY (demux->next_dts != G_MAXUINT64))
+ dts = MPEGTIME_TO_GSTTIME (demux->next_dts);
+
+ gst_flups_demux_send_segment (demux, stream, pts);
+
/* OK, sent new segment now prepare the buffer for sending */
GST_BUFFER_PTS (buf) = pts;
GST_BUFFER_DTS (buf) = dts;
@@ -558,18 +598,18 @@ gst_flups_demux_send_data (GstFluPSDemux * demux, GstFluPSStream * stream,
GST_TIME_ARGS (demux->src_segment.position),
GST_TIME_ARGS (MPEGTIME_TO_GSTTIME (demux->current_scr)));
- if (demux->src_segment.position != GST_CLOCK_TIME_NONE) {
+ if (demux->src_segment.position != GST_CLOCK_TIME_NONE &&
+ demux->base_time != GST_CLOCK_TIME_NONE) {
GstClockTime new_time = demux->base_time + demux->src_segment.position;
if (stream->last_ts == GST_CLOCK_TIME_NONE || stream->last_ts < new_time) {
-#if 0
- g_print ("last_ts update on pad %s to time %" GST_TIME_FORMAT "\n",
- GST_PAD_NAME (stream->pad), GST_TIME_ARGS (cur_scr_time));
-#endif
+ GST_LOG_OBJECT (demux,
+ "last_ts update on pad %s to time %" GST_TIME_FORMAT,
+ GST_PAD_NAME (stream->pad), GST_TIME_ARGS (new_time));
stream->last_ts = new_time;
}
- gst_flups_demux_send_segment_updates (demux, new_time);
+ gst_flups_demux_send_gap_updates (demux, new_time);
}
/* Set the buffer discont flag, and clear discont state on the stream */
@@ -585,7 +625,7 @@ gst_flups_demux_send_data (GstFluPSDemux * demux, GstFluPSStream * stream,
demux->next_pts = G_MAXUINT64;
demux->next_dts = G_MAXUINT64;
- result = gst_pad_push (stream->pad, buf);
+ stream->last_flow = result = gst_pad_push (stream->pad, buf);
GST_DEBUG_OBJECT (demux, "pushed stream id 0x%02x type 0x%02x, pts time: %"
GST_TIME_FORMAT ", size %d. result: %s",
stream->id, stream->type, GST_TIME_ARGS (pts),
@@ -615,13 +655,14 @@ gst_flups_demux_mark_discont (GstFluPSDemux * demux, gboolean discont,
if (G_LIKELY (stream)) {
stream->discont |= discont;
stream->need_segment |= need_segment;
+ demux->adjust_segment |= need_segment;
GST_DEBUG_OBJECT (demux, "marked stream as discont %d, need_segment %d",
stream->discont, stream->need_segment);
}
}
}
-static inline gboolean
+static gboolean
gst_flups_demux_send_event (GstFluPSDemux * demux, GstEvent * event)
{
gint i, count = demux->found_count;
@@ -656,16 +697,10 @@ gst_flups_demux_handle_dvd_event (GstFluPSDemux * demux, GstEvent * event)
const char *type = gst_structure_get_string (structure, "event");
gint i;
gchar cur_stream_name[32];
- GstFluPSStream *temp G_GNUC_UNUSED;
+ GstFluPSStream *temp = NULL;
+ const gchar *lang_code;
if (strcmp (type, "dvd-lang-codes") == 0) {
- GstEvent **p_ev;
- /* Store the language codes event on the element, then iterate over the
- * streams it specifies and retrieve them. The stream creation code then
- * creates the pad appropriately and sends tag events as needed */
- p_ev = &demux->lang_codes;
- gst_event_replace (p_ev, event);
-
GST_DEBUG_OBJECT (demux, "Handling language codes event");
/* Create a video pad to ensure have it before emit no more pads */
@@ -681,28 +716,34 @@ gst_flups_demux_handle_dvd_event (GstFluPSDemux * demux, GstEvent * event)
if (!gst_structure_get_int (structure, cur_stream_name, &stream_format))
continue;
+ g_snprintf (cur_stream_name, 32, "audio-%d-stream", i);
+ if (!gst_structure_get_int (structure, cur_stream_name, &stream_id))
+ continue;
+ if (stream_id < 0 || stream_id >= MAX_DVD_AUDIO_STREAMS)
+ continue;
+
switch (stream_format) {
case 0x0:
/* AC3 */
- stream_id = 0x80 + i;
+ stream_id += 0x80;
temp = gst_flups_demux_get_stream (demux, stream_id, ST_PS_AUDIO_AC3);
break;
case 0x2:
case 0x3:
/* MPEG audio without and with extension stream are
* treated the same */
- stream_id = 0xC0 + i;
+ stream_id += 0xC0;
temp = gst_flups_demux_get_stream (demux, stream_id, ST_AUDIO_MPEG1);
break;
case 0x4:
/* LPCM */
- stream_id = 0xA0 + i;
+ stream_id += 0xA0;
temp =
gst_flups_demux_get_stream (demux, stream_id, ST_PS_AUDIO_LPCM);
break;
case 0x6:
/* DTS */
- stream_id = 0x88 + i;
+ stream_id += 0x88;
temp = gst_flups_demux_get_stream (demux, stream_id, ST_PS_AUDIO_DTS);
break;
case 0x7:
@@ -712,19 +753,52 @@ gst_flups_demux_handle_dvd_event (GstFluPSDemux * demux, GstEvent * event)
GST_WARNING_OBJECT (demux,
"Unknown audio stream format in language code event: %d",
stream_format);
+ temp = NULL;
+ continue;
break;
}
+
+ g_snprintf (cur_stream_name, 32, "audio-%d-language", i);
+ lang_code = gst_structure_get_string (structure, cur_stream_name);
+ if (lang_code) {
+ GstTagList *list = gst_tag_list_new_empty ();
+
+ gst_tag_list_add (list, GST_TAG_MERGE_REPLACE,
+ GST_TAG_LANGUAGE_CODE, lang_code, NULL);
+ temp->pending_tags = list;
+ }
}
/* And subtitle streams */
for (i = 0; i < MAX_DVD_SUBPICTURE_STREAMS; i++) {
+ gint stream_id;
+
g_snprintf (cur_stream_name, 32, "subpicture-%d-format", i);
+ if (!gst_structure_get_int (structure, cur_stream_name, &stream_id))
+ continue;
- if (gst_structure_get_string (structure, cur_stream_name) == NULL)
- break;
+ g_snprintf (cur_stream_name, 32, "subpicture-%d-stream", i);
+ if (!gst_structure_get_int (structure, cur_stream_name, &stream_id))
+ continue;
+ if (stream_id < 0 || stream_id >= MAX_DVD_SUBPICTURE_STREAMS)
+ continue;
+
+ GST_DEBUG_OBJECT (demux, "Subpicture stream %d ID 0x%02x", i,
+ 0x20 + stream_id);
/* Retrieve the subpicture stream to force pad creation */
- temp = gst_flups_demux_get_stream (demux, 0x20 + i, ST_PS_DVD_SUBPICTURE);
+ temp = gst_flups_demux_get_stream (demux, 0x20 + stream_id,
+ ST_PS_DVD_SUBPICTURE);
+
+ g_snprintf (cur_stream_name, 32, "subpicture-%d-language", i);
+ lang_code = gst_structure_get_string (structure, cur_stream_name);
+ if (lang_code) {
+ GstTagList *list = gst_tag_list_new_empty ();
+
+ gst_tag_list_add (list, GST_TAG_MERGE_REPLACE,
+ GST_TAG_LANGUAGE_CODE, lang_code, NULL);
+ temp->pending_tags = list;
+ }
}
GST_DEBUG_OBJECT (demux, "Created all pads from Language Codes event, "
@@ -732,6 +806,10 @@ gst_flups_demux_handle_dvd_event (GstFluPSDemux * demux, GstEvent * event)
gst_element_no_more_pads (GST_ELEMENT (demux));
demux->need_no_more_pads = FALSE;
+ } else {
+ /* forward to all pads, e.g. dvd clut event */
+ gst_event_ref (event);
+ gst_flups_demux_send_event (demux, event);
}
gst_event_unref (event);
@@ -761,20 +839,20 @@ gst_flups_demux_clear_times (GstFluPSDemux * demux)
GstFluPSStream *stream = demux->streams_found[i];
if (G_LIKELY (stream)) {
- stream->last_seg_start = stream->last_ts = GST_CLOCK_TIME_NONE;
+ stream->last_ts = GST_CLOCK_TIME_NONE;
+ stream->last_flow = GST_FLOW_OK;
}
}
}
static inline void
-gst_flups_demux_send_segment_updates (GstFluPSDemux * demux,
- GstClockTime new_start)
+gst_flups_demux_send_gap_updates (GstFluPSDemux * demux, GstClockTime new_start)
{
- GstClockTime base_time, stop, time;
+ GstClockTime base_time, stop;
gint i, count = demux->found_count;
GstEvent *event = NULL;
- /* Advance all lagging streams by sending a segment update */
+ /* Advance all lagging streams by sending a gap event */
if ((base_time = demux->base_time) == GST_CLOCK_TIME_NONE)
base_time = 0;
@@ -785,9 +863,6 @@ gst_flups_demux_send_segment_updates (GstFluPSDemux * demux,
if (new_start > stop)
return;
- time = demux->src_segment.time;
- time += new_start - (demux->src_segment.start + base_time);
-
/* FIXME: Handle reverse playback */
for (i = 0; i < count; i++) {
GstFluPSStream *stream = demux->streams_found[i];
@@ -798,95 +873,18 @@ gst_flups_demux_send_segment_updates (GstFluPSDemux * demux,
stream->last_ts = demux->src_segment.start + base_time;
if (stream->last_ts + stream->segment_thresh < new_start) {
-#if 0
- g_print ("Segment update to pad %s time %" GST_TIME_FORMAT " stop now %"
- GST_TIME_FORMAT "\n", GST_PAD_NAME (stream->pad),
- GST_TIME_ARGS (new_start), GST_TIME_ARGS (demux->src_segment.stop));
-#endif
+ /* should send segment info before gap event */
+ gst_flups_demux_send_segment (demux, stream, GST_CLOCK_TIME_NONE);
+
GST_DEBUG_OBJECT (demux,
- "Segment update to pad %s time %" GST_TIME_FORMAT,
+ "Sending gap update to pad %s time %" GST_TIME_FORMAT,
GST_PAD_NAME (stream->pad), GST_TIME_ARGS (new_start));
- if (event == NULL) {
- GstSegment segment;
- gst_segment_init (&segment, GST_FORMAT_TIME);
- segment.rate = demux->src_segment.rate;
- segment.applied_rate = demux->src_segment.applied_rate;
- segment.start = new_start;
- segment.stop = stop;
- segment.time = time;
- event = gst_event_new_segment (&segment);
- }
- gst_event_ref (event);
+ event =
+ gst_event_new_gap (stream->last_ts, new_start - stream->last_ts);
gst_pad_push_event (stream->pad, event);
- stream->last_seg_start = stream->last_ts = new_start;
- stream->need_segment = FALSE;
- }
- }
- }
-
- if (event)
- gst_event_unref (event);
-}
-
-static inline void
-gst_flups_demux_close_segment (GstFluPSDemux * demux)
-{
- gint i, count = demux->found_count;
- GstEvent *event = NULL;
- guint64 base_time;
- GstSegment segment;
-
- GST_INFO_OBJECT (demux, "closing running segment %" GST_SEGMENT_FORMAT,
- &demux->src_segment);
-
- /* FIXME: Need to send a different segment-close to each pad where the
- * last_seg_start != clock_time_none, as that indicates a sparse-stream
- * event was sent there */
-
- if ((base_time = demux->base_time) == (guint64) - 1)
- base_time = 0;
-
- gst_segment_init (&segment, demux->src_segment.format);
- segment.rate = demux->src_segment.rate;
- /* Close the current segment for a linear playback */
- if (demux->src_segment.rate >= 0) {
- /* for forward playback, we played from start to last_stop */
- segment.start = demux->src_segment.start + base_time;
- segment.stop = demux->src_segment.position + base_time;
- segment.position = demux->src_segment.time;
- event = gst_event_new_segment (&segment);
- } else {
- gint64 stop;
-
- if ((stop = demux->src_segment.stop) == -1)
- stop = demux->src_segment.duration;
-
- segment.start = demux->src_segment.position + base_time;
- segment.stop = stop + base_time;
- segment.position = demux->src_segment.position;
- /* for reverse playback, we played from stop to last_stop. */
- event = gst_event_new_segment (&segment);
- }
-
- if (event) {
- for (i = 0; i < count; i++) {
- GstFluPSStream *stream = demux->streams_found[i];
-
- if (stream && !stream->notlinked && !stream->need_segment) {
- (void) gst_event_ref (event);
-
- if (!gst_pad_push_event (stream->pad, event)) {
- GST_DEBUG_OBJECT (stream, "event %s was not handled correctly",
- GST_EVENT_TYPE_NAME (event));
- } else {
- /* If at least one push returns TRUE, then we return TRUE. */
- GST_DEBUG_OBJECT (stream, "event %s was handled correctly",
- GST_EVENT_TYPE_NAME (event));
- }
+ stream->last_ts = new_start;
}
}
-
- gst_event_unref (event);
}
}
@@ -915,13 +913,14 @@ gst_flups_demux_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
const GstSegment *segment;
- /* Close current segment */
- gst_flups_demux_close_segment (demux);
-
gst_event_parse_segment (event, &segment);
-
gst_segment_copy_into (segment, &demux->sink_segment);
+ GST_INFO_OBJECT (demux, "received segment %" GST_SEGMENT_FORMAT, segment);
+
+ /* we need to emit a new segment */
+ gst_flups_demux_mark_discont (demux, TRUE, TRUE);
+
if (segment->format == GST_FORMAT_BYTES
&& demux->scr_rate_n != G_MAXUINT64
&& demux->scr_rate_d != G_MAXUINT64) {
@@ -931,15 +930,14 @@ gst_flups_demux_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
demux->src_segment.start = BYTES_TO_GSTTIME (segment->start);
demux->src_segment.stop = BYTES_TO_GSTTIME (segment->stop);
demux->src_segment.time = BYTES_TO_GSTTIME (segment->time);
+ } else if (segment->format == GST_FORMAT_TIME) {
+ /* we expect our timeline (SCR, PTS) to match the one from upstream,
+ * if not, will adjust with offset later on */
+ gst_segment_copy_into (segment, &demux->src_segment);
+ /* accept upstream segment without adjusting */
+ demux->adjust_segment = FALSE;
}
- GST_INFO_OBJECT (demux, "received new segment: rate %g "
- "format %d, start: %" G_GINT64_FORMAT ", stop: %" G_GINT64_FORMAT
- ", time: %" G_GINT64_FORMAT, segment->rate, segment->format,
- segment->start, segment->stop, segment->time);
-
- /* we need to emit a new segment */
- gst_flups_demux_mark_discont (demux, TRUE, TRUE);
gst_event_unref (event);
break;
@@ -1221,8 +1219,6 @@ gst_flups_demux_handle_seek_pull (GstFluPSDemux * demux, GstEvent * event)
if (flush) {
/* Stop flushing, the sinks are at time 0 now */
gst_flups_demux_send_event (demux, gst_event_new_flush_stop (TRUE));
- } else {
- gst_flups_demux_close_segment (demux);
}
if (flush || seeksegment.position != demux->src_segment.position) {
@@ -1629,12 +1625,29 @@ gst_flups_demux_parse_pack_start (GstFluPSDemux * demux)
/* keep the first src in order to calculate delta time */
if (G_UNLIKELY (demux->first_scr == G_MAXUINT64)) {
+ gint64 diff;
+
demux->first_scr = scr;
demux->first_scr_offset = demux->cur_scr_offset;
demux->base_time = MPEGTIME_TO_GSTTIME (demux->first_scr);
+ GST_DEBUG_OBJECT (demux, "determined base_time %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (demux->base_time));
/* at begin consider the new_rate as the scr rate, bytes/clock ticks */
scr_rate_n = new_rate;
scr_rate_d = CLOCK_FREQ;
+ /* our SCR timeline might have offset wrt upstream timeline */
+ if (demux->sink_segment.format == GST_FORMAT_TIME) {
+ if (demux->sink_segment.start > demux->base_time)
+ diff = -(demux->sink_segment.start - demux->base_time);
+ else
+ diff = demux->base_time - demux->sink_segment.start;
+ if (diff > GST_SECOND) {
+ GST_DEBUG_OBJECT (demux, "diff of %" GST_TIME_FORMAT
+ " wrt upstream start %" GST_TIME_FORMAT "; adjusting base",
+ GST_TIME_ARGS (diff), GST_TIME_ARGS (demux->sink_segment.start));
+ demux->base_time += diff;
+ }
+ }
} else if (G_LIKELY (demux->first_scr_offset != demux->cur_scr_offset)) {
/* estimate byte rate related to the SCR */
scr_rate_n = demux->cur_scr_offset - demux->first_scr_offset;
@@ -2921,6 +2934,54 @@ gst_flups_demux_sink_activate_mode (GstPad * pad, GstObject * parent,
return FALSE;
}
+/* EOS and NOT_LINKED need to be combined. This means that we return:
+*
+* GST_FLOW_NOT_LINKED: when all pads NOT_LINKED.
+* GST_FLOW_EOS: when all pads EOS or NOT_LINKED.
+*/
+static GstFlowReturn
+gst_flups_demux_combine_flows (GstFluPSDemux * demux, GstFlowReturn ret)
+{
+ gint i, count = demux->found_count, streams = 0;
+ gboolean unexpected = FALSE, not_linked = TRUE;
+
+ GST_LOG_OBJECT (demux, "flow return: %s", gst_flow_get_name (ret));
+
+ /* only return NOT_LINKED if all other pads returned NOT_LINKED */
+ for (i = 0; i < count; i++) {
+ GstFluPSStream *stream = demux->streams_found[i];
+
+ if (G_UNLIKELY (!stream))
+ continue;
+
+ ret = stream->last_flow;
+ streams++;
+
+ /* some streams may still have to appear,
+ * and only those ones may end up linked */
+ if (G_UNLIKELY (demux->need_no_more_pads && ret == GST_FLOW_NOT_LINKED))
+ ret = GST_FLOW_OK;
+
+ /* no unexpected or unlinked, return */
+ if (G_LIKELY (ret != GST_FLOW_EOS && ret != GST_FLOW_NOT_LINKED))
+ goto done;
+
+ /* we check to see if we have at least 1 unexpected or all unlinked */
+ unexpected |= (ret == GST_FLOW_EOS);
+ not_linked &= (ret == GST_FLOW_NOT_LINKED);
+ }
+
+ /* when we get here, we all have unlinked or unexpected */
+ if (not_linked && streams)
+ ret = GST_FLOW_NOT_LINKED;
+ else if (unexpected)
+ ret = GST_FLOW_EOS;
+
+done:
+ GST_LOG_OBJECT (demux, "combined flow return: %s", gst_flow_get_name (ret));
+ return ret;
+}
+
static GstFlowReturn
gst_flups_demux_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
{
@@ -3052,6 +3113,9 @@ gst_flups_demux_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
ret = GST_FLOW_OK;
break;
default:
+ ret = gst_flups_demux_combine_flows (demux, ret);
+ if (ret != GST_FLOW_OK)
+ goto done;
break;
}
}
@@ -3067,41 +3131,14 @@ gst_flups_demux_change_state (GstElement * element, GstStateChange transition)
switch (transition) {
case GST_STATE_CHANGE_NULL_TO_READY:
- demux->adapter = gst_adapter_new ();
- demux->rev_adapter = gst_adapter_new ();
- demux->adapter_offset = G_MAXUINT64;
gst_pes_filter_init (&demux->filter, demux->adapter,
&demux->adapter_offset);
gst_pes_filter_set_callbacks (&demux->filter,
(GstPESFilterData) gst_flups_demux_data_cb,
(GstPESFilterResync) gst_flups_demux_resync_cb, demux);
demux->filter.gather_pes = TRUE;
- demux->first_scr = G_MAXUINT64;
- demux->last_scr = G_MAXUINT64;
- demux->current_scr = G_MAXUINT64;
- demux->base_time = G_MAXUINT64;
- demux->scr_rate_n = G_MAXUINT64;
- demux->scr_rate_d = G_MAXUINT64;
- demux->first_pts = G_MAXUINT64;
- demux->last_pts = G_MAXUINT64;
break;
case GST_STATE_CHANGE_READY_TO_PAUSED:
- demux->current_scr = G_MAXUINT64;
- demux->mux_rate = G_MAXUINT64;
- demux->next_pts = G_MAXUINT64;
- demux->next_dts = G_MAXUINT64;
- demux->first_scr = G_MAXUINT64;
- demux->last_scr = G_MAXUINT64;
- demux->base_time = G_MAXUINT64;
- demux->scr_rate_n = G_MAXUINT64;
- demux->scr_rate_d = G_MAXUINT64;
- demux->need_no_more_pads = TRUE;
- demux->first_pts = G_MAXUINT64;
- demux->last_pts = G_MAXUINT64;
- gst_flups_demux_reset_psm (demux);
- gst_segment_init (&demux->sink_segment, GST_FORMAT_UNDEFINED);
- gst_segment_init (&demux->src_segment, GST_FORMAT_TIME);
- gst_flups_demux_flush (demux);
break;
default:
break;
@@ -3115,10 +3152,6 @@ gst_flups_demux_change_state (GstElement * element, GstStateChange transition)
break;
case GST_STATE_CHANGE_READY_TO_NULL:
gst_pes_filter_uninit (&demux->filter);
- g_object_unref (demux->adapter);
- demux->adapter = NULL;
- g_object_unref (demux->rev_adapter);
- demux->rev_adapter = NULL;
break;
default:
break;
diff --git a/gst/mpegdemux/gstmpegdemux.h b/gst/mpegdemux/gstmpegdemux.h
index 10f11800..7cd4004c 100644
--- a/gst/mpegdemux/gstmpegdemux.h
+++ b/gst/mpegdemux/gstmpegdemux.h
@@ -89,12 +89,14 @@ struct _GstFluPSStream
gint type;
GstClockTime segment_thresh;
- GstClockTime last_seg_start;
GstClockTime last_ts;
+ GstFlowReturn last_flow;
gboolean discont;
gboolean notlinked;
gboolean need_segment;
+
+ GstTagList *pending_tags;
};
struct _GstFluPSDemux
@@ -133,6 +135,7 @@ struct _GstFluPSDemux
GstSegment sink_segment;
GstSegment src_segment;
+ gboolean adjust_segment;
/* stream output */
GstFluPSStream *current_stream;
@@ -145,10 +148,6 @@ struct _GstFluPSDemux
/* Indicates an MPEG-2 stream */
gboolean is_mpeg2_pack;
-
- /* Language codes event is stored when a dvd-lang-codes
- * custom event arrives from upstream */
- GstEvent *lang_codes;
};
struct _GstFluPSDemuxClass
diff --git a/gst/mpegpsmux/Makefile.in b/gst/mpegpsmux/Makefile.in
index e5510b65..391f5b79 100644
--- a/gst/mpegpsmux/Makefile.in
+++ b/gst/mpegpsmux/Makefile.in
@@ -253,6 +253,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/mpegpsmux/mpegpsmux.c b/gst/mpegpsmux/mpegpsmux.c
index e9bfd0a6..52ffb458 100644
--- a/gst/mpegpsmux/mpegpsmux.c
+++ b/gst/mpegpsmux/mpegpsmux.c
@@ -119,7 +119,7 @@ mpegpsmux_base_init (gpointer g_class)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&mpegpsmux_src_factory));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"MPEG Program Stream Muxer", "Codec/Muxer",
"Multiplexes media streams into an MPEG Program Stream",
"Lin YANG <oxcsnicho@gmail.com>");
diff --git a/gst/mpegtsdemux/Makefile.in b/gst/mpegtsdemux/Makefile.in
index d541e7ec..31b2e17f 100644
--- a/gst/mpegtsdemux/Makefile.in
+++ b/gst/mpegtsdemux/Makefile.in
@@ -256,6 +256,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/mpegtsdemux/mpegtsbase.c b/gst/mpegtsdemux/mpegtsbase.c
index 07db3989..bd73884b 100644
--- a/gst/mpegtsdemux/mpegtsbase.c
+++ b/gst/mpegtsdemux/mpegtsbase.c
@@ -1346,8 +1346,8 @@ mpegts_base_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
gst_event_unref (event);
break;
case GST_EVENT_EOS:
- res = gst_mpegts_base_handle_eos (base);
res = GST_MPEGTS_BASE_GET_CLASS (base)->push_event (base, event);
+ res = gst_mpegts_base_handle_eos (base);
break;
case GST_EVENT_CAPS:
/* FIXME, do something */
diff --git a/gst/mpegtsdemux/pesparse.c b/gst/mpegtsdemux/pesparse.c
index ce3ff41a..26288260 100644
--- a/gst/mpegtsdemux/pesparse.c
+++ b/gst/mpegtsdemux/pesparse.c
@@ -226,7 +226,7 @@ mpegts_parse_pes_header (const guint8 * data, gsize length, PESHeader * res,
if (G_UNLIKELY (!(val8 & 0x80)))
goto bad_original_copy_info_marker;
- res->additional_copy_info = val8 >> 1;
+ res->additional_copy_info = val8 & 0x7f;
GST_LOG ("additional_copy_info : 0x%x", res->additional_copy_info);
}
@@ -290,16 +290,16 @@ mpegts_parse_pes_header (const guint8 * data, gsize length, PESHeader * res,
/* GRMBL, this is most often wrong */
if (G_UNLIKELY ((val8 & 0x80) != 0x80))
goto bad_sequence_marker1;
- res->program_packet_sequence_counter = val8 * 0x70;
+ res->program_packet_sequence_counter = val8 & 0x7f;
GST_LOG ("program_packet_sequence_counter %d",
res->program_packet_sequence_counter);
val8 = *data++;
/* GRMBL, this is most often wrong */
- if (G_UNLIKELY ((val8 * 0x80) != 0x80))
+ if (G_UNLIKELY ((val8 & 0x80) != 0x80))
goto bad_sequence_marker2;
res->MPEG1_MPEG2_identifier = (val8 >> 6) & 0x1;
- res->original_stuff_length = val8 * 0x3f;
+ res->original_stuff_length = val8 & 0x3f;
GST_LOG ("MPEG1_MPEG2_identifier : %d , original_stuff_length : %d",
res->MPEG1_MPEG2_identifier, res->original_stuff_length);
length -= 2;
@@ -310,7 +310,7 @@ mpegts_parse_pes_header (const guint8 * data, gsize length, PESHeader * res,
if (G_UNLIKELY (length < 2))
goto need_more_data;
val8 = *data;
- if (G_UNLIKELY ((val8 * 0xc0) != 0x40))
+ if (G_UNLIKELY ((val8 & 0xc0) != 0x40))
goto bad_P_STD_marker;
res->P_STD_buffer_size =
(GST_READ_UINT16_BE (data) & 0x1fff) << (val8 & 0x20) ? 10 : 7;
diff --git a/gst/mpegtsdemux/tsdemux.c b/gst/mpegtsdemux/tsdemux.c
index e431dad1..aed805b9 100644
--- a/gst/mpegtsdemux/tsdemux.c
+++ b/gst/mpegtsdemux/tsdemux.c
@@ -226,6 +226,8 @@ enum
/* mpegtsbase methods */
static void
gst_ts_demux_program_started (MpegTSBase * base, MpegTSBaseProgram * program);
+static void
+gst_ts_demux_program_stopped (MpegTSBase * base, MpegTSBaseProgram * program);
static void gst_ts_demux_reset (MpegTSBase * base);
static GstFlowReturn
gst_ts_demux_push (MpegTSBase * base, MpegTSPacketizerPacket * packet,
@@ -295,7 +297,7 @@ gst_ts_demux_class_init (GstTSDemuxClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&private_template));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"MPEG transport stream demuxer",
"Codec/Demuxer",
"Demuxes MPEG2 transport streams",
@@ -307,6 +309,7 @@ gst_ts_demux_class_init (GstTSDemuxClass * klass)
ts_class->push = GST_DEBUG_FUNCPTR (gst_ts_demux_push);
ts_class->push_event = GST_DEBUG_FUNCPTR (push_event);
ts_class->program_started = GST_DEBUG_FUNCPTR (gst_ts_demux_program_started);
+ ts_class->program_stopped = GST_DEBUG_FUNCPTR (gst_ts_demux_program_stopped);
ts_class->stream_added = gst_ts_demux_stream_added;
ts_class->stream_removed = gst_ts_demux_stream_removed;
ts_class->seek = GST_DEBUG_FUNCPTR (gst_ts_demux_do_seek);
@@ -1130,7 +1133,16 @@ gst_ts_demux_program_started (MpegTSBase * base, MpegTSBaseProgram * program)
}
}
+static void
+gst_ts_demux_program_stopped (MpegTSBase * base, MpegTSBaseProgram * program)
+{
+ GstTSDemux *demux = GST_TS_DEMUX (base);
+ if (demux->program == program) {
+ demux->program = NULL;
+ demux->program_number = -1;
+ }
+}
static inline void
@@ -1487,6 +1499,12 @@ gst_ts_demux_push_pending_data (GstTSDemux * demux, TSDemuxStream * stream)
goto beach;
}
+ if (G_UNLIKELY (demux->program == NULL)) {
+ GST_LOG_OBJECT (demux, "No program");
+ g_free (stream->data);
+ goto beach;
+ }
+
if (G_UNLIKELY (stream->need_newsegment))
calculate_and_push_newsegment (demux, stream);
diff --git a/gst/mpegtsmux/Makefile.in b/gst/mpegtsmux/Makefile.in
index 05861c7b..223254d9 100644
--- a/gst/mpegtsmux/Makefile.in
+++ b/gst/mpegtsmux/Makefile.in
@@ -292,6 +292,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/mpegtsmux/mpegtsmux.c b/gst/mpegtsmux/mpegtsmux.c
index 7eb3ac7f..57b647c1 100644
--- a/gst/mpegtsmux/mpegtsmux.c
+++ b/gst/mpegtsmux/mpegtsmux.c
@@ -166,7 +166,7 @@ static void mpegtsdemux_prepare_srcpad (MpegTsMux * mux);
GstFlowReturn mpegtsmux_clip_inc_running_time (GstCollectPads * pads,
GstCollectData * cdata, GstBuffer * buf, GstBuffer ** outbuf,
gpointer user_data);
-static GstFlowReturn mpegtsmux_collected (GstCollectPads * pads,
+static GstFlowReturn mpegtsmux_collected_buffer (GstCollectPads * pads,
GstCollectData * data, GstBuffer * buf, MpegTsMux * mux);
static gboolean mpegtsmux_sink_event (GstCollectPads * pads,
@@ -196,11 +196,13 @@ typedef struct
G_DEFINE_TYPE (MpegTsMux, mpegtsmux, GST_TYPE_ELEMENT)
+/* Takes over the ref on the buffer */
static StreamData *stream_data_new (GstBuffer * buffer)
{
StreamData *res = g_new (StreamData, 1);
res->buffer = buffer;
gst_buffer_map (buffer, &(res->map_info), GST_MAP_READ);
+
return res;
}
@@ -227,7 +229,7 @@ mpegtsmux_class_init (MpegTsMuxClass * klass)
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&mpegtsmux_src_factory));
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"MPEG Transport Stream Muxer", "Codec/Muxer",
"Multiplexes media streams into an MPEG Transport Stream",
"Fluendo <contact@fluendo.com>");
@@ -288,8 +290,8 @@ mpegtsmux_init (MpegTsMux * mux)
mux->collect = gst_collect_pads_new ();
gst_collect_pads_set_buffer_function (mux->collect,
- (GstCollectPadsBufferFunction) GST_DEBUG_FUNCPTR (mpegtsmux_collected),
- mux);
+ (GstCollectPadsBufferFunction)
+ GST_DEBUG_FUNCPTR (mpegtsmux_collected_buffer), mux);
gst_collect_pads_set_event_function (mux->collect,
(GstCollectPadsEventFunction) GST_DEBUG_FUNCPTR (mpegtsmux_sink_event),
@@ -987,7 +989,7 @@ mpegtsmux_clip_inc_running_time (GstCollectPads * pads,
} else {
pad_data->last_pts = time;
}
- *outbuf = gst_buffer_make_writable (buf);
+ buf = *outbuf = gst_buffer_make_writable (buf);
GST_BUFFER_TIMESTAMP (*outbuf) = time;
}
}
@@ -1014,7 +1016,7 @@ mpegtsmux_clip_inc_running_time (GstCollectPads * pads,
} else {
pad_data->last_dts = time;
}
- *outbuf = gst_buffer_make_writable (buf);
+ buf = *outbuf = gst_buffer_make_writable (buf);
GST_BUFFER_TIMESTAMP (*outbuf) = time;
}
}
@@ -1032,7 +1034,7 @@ mpegtsmux_clip_inc_running_time (GstCollectPads * pads,
}
static GstFlowReturn
-mpegtsmux_collected (GstCollectPads * pads, GstCollectData * data,
+mpegtsmux_collected_buffer (GstCollectPads * pads, GstCollectData * data,
GstBuffer * buf, MpegTsMux * mux)
{
GstFlowReturn ret = GST_FLOW_OK;
@@ -1153,12 +1155,11 @@ mpegtsmux_collected (GstCollectPads * pads, GstCollectData * data,
if (prog->pcr_stream == best->stream) {
/* prefer DTS if present for PCR as it should be monotone */
mux->last_ts =
- GST_CLOCK_TIME_IS_VALID (best->last_dts) ? best->last_dts : best->
- last_pts;
+ GST_CLOCK_TIME_IS_VALID (best->last_dts) ? best->
+ last_dts : best->last_pts;
}
mux->is_delta = delta;
- mux->last_size = stream_data->map_info.size;
while (tsmux_stream_bytes_in_buffer (best->stream) > 0) {
if (!tsmux_write_stream_packet (mux->tsmux, best->stream)) {
/* Failed writing data for some reason. Set appropriate error */
diff --git a/gst/mpegtsmux/mpegtsmux.h b/gst/mpegtsmux/mpegtsmux.h
index 0ae37978..dfb526e6 100644
--- a/gst/mpegtsmux/mpegtsmux.h
+++ b/gst/mpegtsmux/mpegtsmux.h
@@ -163,8 +163,6 @@ struct MpegTsMux {
/* output buffer aggregation */
GstAdapter *out_adapter;
GstBuffer *out_buffer;
- gint out_offset;
- gint last_size;
#if 0
/* SPN/PTS index handling */
diff --git a/gst/mpegtsmux/tsmux/Makefile.in b/gst/mpegtsmux/tsmux/Makefile.in
index 43089cf7..4fe12293 100644
--- a/gst/mpegtsmux/tsmux/Makefile.in
+++ b/gst/mpegtsmux/tsmux/Makefile.in
@@ -221,6 +221,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/mve/Makefile.in b/gst/mve/Makefile.in
index 3322a8ee..cbd3b1fe 100644
--- a/gst/mve/Makefile.in
+++ b/gst/mve/Makefile.in
@@ -254,6 +254,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/mve/gstmvedemux.c b/gst/mve/gstmvedemux.c
index e99fd043..13171bfb 100644
--- a/gst/mve/gstmvedemux.c
+++ b/gst/mve/gstmvedemux.c
@@ -1094,7 +1094,7 @@ gst_mve_demux_base_init (GstMveDemuxClass * klass)
gst_element_class_add_static_pad_template (element_class, &vidsrc_template);
gst_element_class_add_static_pad_template (element_class, &audsrc_template);
- gst_element_class_set_metadata (element_class, "MVE Demuxer",
+ gst_element_class_set_static_metadata (element_class, "MVE Demuxer",
"Codec/Demuxer",
"Demultiplex an Interplay movie (MVE) stream into audio and video",
"Jens Granseuer <jensgr@gmx.net>");
diff --git a/gst/mve/gstmvemux.c b/gst/mve/gstmvemux.c
index a4e71f9d..9615f27b 100644
--- a/gst/mve/gstmvemux.c
+++ b/gst/mve/gstmvemux.c
@@ -1357,7 +1357,7 @@ gst_mve_mux_base_init (GstMveMuxClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&video_sink_factory));
- gst_element_class_set_metadata (element_class, "MVE Multiplexer",
+ gst_element_class_set_static_metadata (element_class, "MVE Multiplexer",
"Codec/Muxer",
"Muxes audio and video into an MVE stream",
"Jens Granseuer <jensgr@gmx.net>");
diff --git a/gst/mxf/Makefile.in b/gst/mxf/Makefile.in
index dc31b6ca..59cf0a2f 100644
--- a/gst/mxf/Makefile.in
+++ b/gst/mxf/Makefile.in
@@ -258,6 +258,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/mxf/mxfdemux.c b/gst/mxf/mxfdemux.c
index 08cbff0e..4758b8d6 100644
--- a/gst/mxf/mxfdemux.c
+++ b/gst/mxf/mxfdemux.c
@@ -3976,7 +3976,7 @@ gst_mxf_demux_base_init (gpointer g_class)
gst_static_pad_template_get (&mxf_sink_template));
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&mxf_src_template));
- gst_element_class_set_metadata (element_class, "MXF Demuxer",
+ gst_element_class_set_static_metadata (element_class, "MXF Demuxer",
"Codec/Demuxer",
"Demux MXF files", "Sebastian Dröge <sebastian.droege@collabora.co.uk>");
}
diff --git a/gst/mxf/mxfmux.c b/gst/mxf/mxfmux.c
index be92c1fa..b1cc5dc4 100644
--- a/gst/mxf/mxfmux.c
+++ b/gst/mxf/mxfmux.c
@@ -107,7 +107,7 @@ gst_mxf_mux_base_init (gpointer g_class)
p++;
}
- gst_element_class_set_metadata (element_class, "MXF muxer",
+ gst_element_class_set_static_metadata (element_class, "MXF muxer",
"Codec/Muxer",
"Muxes video/audio streams into a MXF stream",
"Sebastian Dröge <sebastian.droege@collabora.co.uk>");
diff --git a/gst/nsf/Makefile.in b/gst/nsf/Makefile.in
index 0b9f0a48..cf2629bc 100644
--- a/gst/nsf/Makefile.in
+++ b/gst/nsf/Makefile.in
@@ -255,6 +255,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/nsf/gstnsf.c b/gst/nsf/gstnsf.c
index 2d506a78..e7598ea7 100644
--- a/gst/nsf/gstnsf.c
+++ b/gst/nsf/gstnsf.c
@@ -136,7 +136,7 @@ gst_nsfdec_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_set_metadata (element_class, "Nsf decoder",
+ gst_element_class_set_static_metadata (element_class, "Nsf decoder",
"Codec/Decoder/Audio",
"Using nosefart to decode NSF audio tunes",
"Johan Dahlin <johan@gnome.org>");
diff --git a/gst/nuvdemux/Makefile.in b/gst/nuvdemux/Makefile.in
index fa3a87fb..1bc768b0 100644
--- a/gst/nuvdemux/Makefile.in
+++ b/gst/nuvdemux/Makefile.in
@@ -249,6 +249,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/nuvdemux/gstnuvdemux.c b/gst/nuvdemux/gstnuvdemux.c
index f11cc04b..d3107d87 100644
--- a/gst/nuvdemux/gstnuvdemux.c
+++ b/gst/nuvdemux/gstnuvdemux.c
@@ -132,7 +132,7 @@ gst_nuv_demux_base_init (gpointer klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&sink_template));
- gst_element_class_set_metadata (element_class, "Nuv demuxer",
+ gst_element_class_set_static_metadata (element_class, "Nuv demuxer",
"Codec/Demuxer",
"Demultiplex a MythTV NuppleVideo .nuv file into audio and video",
"Renato Araujo Oliveira Filho <renato.filho@indt.org.br>,"
diff --git a/gst/patchdetect/Makefile.in b/gst/patchdetect/Makefile.in
index d526928e..fdd95be7 100644
--- a/gst/patchdetect/Makefile.in
+++ b/gst/patchdetect/Makefile.in
@@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/patchdetect/gstpatchdetect.c b/gst/patchdetect/gstpatchdetect.c
index 4a3f1deb..783ae0bd 100644
--- a/gst/patchdetect/gstpatchdetect.c
+++ b/gst/patchdetect/gstpatchdetect.c
@@ -114,7 +114,7 @@ gst_patchdetect_base_init (gpointer g_class)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_patchdetect_src_template));
- gst_element_class_set_metadata (element_class, "Color Patch Detector",
+ gst_element_class_set_static_metadata (element_class, "Color Patch Detector",
"Video/Analysis", "Detects color patches from a color calibration chart",
"David Schleef <ds@entropywave.com>");
}
diff --git a/gst/pcapparse/Makefile.in b/gst/pcapparse/Makefile.in
index 5d875414..95cb3e5c 100644
--- a/gst/pcapparse/Makefile.in
+++ b/gst/pcapparse/Makefile.in
@@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/pcapparse/gstirtspparse.c b/gst/pcapparse/gstirtspparse.c
index 0f8f78ce..f9fff038 100644
--- a/gst/pcapparse/gstirtspparse.c
+++ b/gst/pcapparse/gstirtspparse.c
@@ -110,7 +110,7 @@ gst_irtsp_parse_class_init (GstIRTSPParseClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&src_template));
- gst_element_class_set_metadata (element_class, "IRTSPParse",
+ gst_element_class_set_static_metadata (element_class, "IRTSPParse",
"Raw/Parser",
"Parses a raw interleaved RTSP stream",
"Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>");
diff --git a/gst/pcapparse/gstpcapparse.c b/gst/pcapparse/gstpcapparse.c
index 791a9cf1..85bb178e 100644
--- a/gst/pcapparse/gstpcapparse.c
+++ b/gst/pcapparse/gstpcapparse.c
@@ -142,7 +142,7 @@ gst_pcap_parse_class_init (GstPcapParseClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&src_template));
- gst_element_class_set_metadata (element_class, "PCapParse",
+ gst_element_class_set_static_metadata (element_class, "PCapParse",
"Raw/Parser",
"Parses a raw pcap stream",
"Ole André Vadla Ravnås <ole.andre.ravnas@tandberg.com>");
diff --git a/gst/pnm/Makefile.in b/gst/pnm/Makefile.in
index 19c50c99..dd04587a 100644
--- a/gst/pnm/Makefile.in
+++ b/gst/pnm/Makefile.in
@@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/pnm/gstpnmdec.c b/gst/pnm/gstpnmdec.c
index 4802727b..f562a19b 100644
--- a/gst/pnm/gstpnmdec.c
+++ b/gst/pnm/gstpnmdec.c
@@ -335,7 +335,7 @@ gst_pnmdec_class_init (GstPnmdecClass * klass)
gst_static_pad_template_get (&gst_pnmdec_sink_pad_template));
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_pnmdec_src_pad_template));
- gst_element_class_set_metadata (element_class, "PNM image decoder",
+ gst_element_class_set_static_metadata (element_class, "PNM image decoder",
"Codec/Decoder/Image",
"Decodes images in portable pixmap/graymap/bitmap/anymamp (PNM) format",
"Lutz Mueller <lutz@users.sourceforge.net>");
diff --git a/gst/pnm/gstpnmenc.c b/gst/pnm/gstpnmenc.c
index d3d2474f..7a809653 100644
--- a/gst/pnm/gstpnmenc.c
+++ b/gst/pnm/gstpnmenc.c
@@ -261,7 +261,7 @@ gst_pnmenc_class_init (GstPnmencClass * klass)
gst_static_pad_template_get (&sink_pad_template));
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&src_pad_template));
- gst_element_class_set_metadata (element_class, "PNM image encoder",
+ gst_element_class_set_static_metadata (element_class, "PNM image encoder",
"Codec/Encoder/Image",
"Encodes images into portable pixmap or graymap (PNM) format",
"Lutz Mueller <lutz@users.sourceforge.net>");
diff --git a/gst/rawparse/Makefile.in b/gst/rawparse/Makefile.in
index 4ccee18f..135502e3 100644
--- a/gst/rawparse/Makefile.in
+++ b/gst/rawparse/Makefile.in
@@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/rawparse/gstaudioparse.c b/gst/rawparse/gstaudioparse.c
index 58bfe75e..3ad2fb1d 100644
--- a/gst/rawparse/gstaudioparse.c
+++ b/gst/rawparse/gstaudioparse.c
@@ -70,7 +70,8 @@ enum
PROP_RATE,
PROP_CHANNELS,
PROP_INTERLEAVED,
- PROP_CHANNEL_POSITIONS
+ PROP_CHANNEL_POSITIONS,
+ PROP_USE_SINK_CAPS
};
#define GST_AUDIO_PARSE_FORMAT (gst_audio_parse_format_get_type ())
@@ -146,7 +147,12 @@ gst_audio_parse_class_init (GstAudioParseClass * klass)
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS),
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- gst_element_class_set_metadata (gstelement_class, "Audio Parse",
+ g_object_class_install_property (gobject_class, PROP_USE_SINK_CAPS,
+ g_param_spec_boolean ("use-sink-caps", "Use sink caps",
+ "Use the sink caps for the format, only performing timestamping",
+ FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ gst_element_class_set_static_metadata (gstelement_class, "Audio Parse",
"Filter/Audio",
"Converts stream into audio frames",
"Sebastian Dröge <sebastian.droege@collabora.co.uk>");
@@ -206,6 +212,9 @@ gst_audio_parse_set_property (GObject * object, guint prop_id,
ap->channel_positions = g_value_dup_boxed (value);
break;
+ case PROP_USE_SINK_CAPS:
+ ap->use_sink_caps = g_value_get_boolean (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -243,6 +252,9 @@ gst_audio_parse_get_property (GObject * object, guint prop_id, GValue * value,
case PROP_CHANNEL_POSITIONS:
g_value_set_boxed (value, ap->channel_positions);
break;
+ case PROP_USE_SINK_CAPS:
+ g_value_set_boolean (value, ap->use_sink_caps);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -356,6 +368,23 @@ gst_audio_parse_get_caps (GstRawParse * rp)
gint fps_n, fps_d;
const GValue *val;
+ if (ap->use_sink_caps) {
+ gint rate;
+ GstCaps *caps = gst_pad_get_current_caps (rp->sinkpad);
+ gst_audio_info_from_caps (&info, caps);
+
+ ap->format = GST_AUDIO_PARSE_FORMAT_RAW;
+ ap->raw_format = GST_AUDIO_INFO_FORMAT (&info);
+ ap->channels = GST_AUDIO_INFO_CHANNELS (&info);
+ ap->interleaved = info.layout == GST_AUDIO_LAYOUT_INTERLEAVED;
+
+ rate = GST_AUDIO_INFO_RATE (&info);
+ gst_raw_parse_set_fps (GST_RAW_PARSE (ap), rate, 1);
+ gst_audio_parse_update_frame_size (ap);
+
+ return caps;
+ }
+
gst_raw_parse_get_fps (rp, &fps_n, &fps_d);
gst_audio_parse_setup_channel_positions (ap);
diff --git a/gst/rawparse/gstaudioparse.h b/gst/rawparse/gstaudioparse.h
index d8dff783..8252fe3c 100644
--- a/gst/rawparse/gstaudioparse.h
+++ b/gst/rawparse/gstaudioparse.h
@@ -48,6 +48,7 @@ struct _GstAudioParse
GstRawParse parent;
/* properties */
+ gboolean use_sink_caps;
gint format;
GstAudioFormat raw_format;
gint channels;
diff --git a/gst/rawparse/gstvideoparse.c b/gst/rawparse/gstvideoparse.c
index 73ccdbd0..152bda15 100644
--- a/gst/rawparse/gstvideoparse.c
+++ b/gst/rawparse/gstvideoparse.c
@@ -101,7 +101,7 @@ gst_video_parse_class_init (GstVideoParseClass * klass)
"True if top field is earlier than bottom field", TRUE,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- gst_element_class_set_metadata (gstelement_class, "Video Parse",
+ gst_element_class_set_static_metadata (gstelement_class, "Video Parse",
"Filter/Video",
"Converts stream into video frames",
"David Schleef <ds@schleef.org>, "
diff --git a/gst/real/Makefile.in b/gst/real/Makefile.in
index 7b635b57..6b894170 100644
--- a/gst/real/Makefile.in
+++ b/gst/real/Makefile.in
@@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/real/gstrealaudiodec.c b/gst/real/gstrealaudiodec.c
index 2e92aa9e..73c38290 100644
--- a/gst/real/gstrealaudiodec.c
+++ b/gst/real/gstrealaudiodec.c
@@ -562,7 +562,7 @@ gst_real_audio_dec_base_init (gpointer g_class)
gst_element_class_add_pad_template (ec, gst_static_pad_template_get (&snk_t));
gst_element_class_add_pad_template (ec, gst_static_pad_template_get (&src_t));
- gst_element_class_set_metadata (ec, "RealAudio decoder",
+ gst_element_class_set_static_metadata (ec, "RealAudio decoder",
"Codec/Decoder/Audio", "Decoder for RealAudio streams",
"Lutz Mueller <lutz@topfrose.de>");
}
diff --git a/gst/real/gstrealvideodec.c b/gst/real/gstrealvideodec.c
index 9c455776..16d7f733 100644
--- a/gst/real/gstrealvideodec.c
+++ b/gst/real/gstrealvideodec.c
@@ -629,7 +629,7 @@ gst_real_video_dec_base_init (gpointer g_class)
gst_element_class_add_pad_template (ec, gst_static_pad_template_get (&snk_t));
gst_element_class_add_pad_template (ec, gst_static_pad_template_get (&src_t));
- gst_element_class_set_metadata (ec, "RealVideo decoder",
+ gst_element_class_set_static_metadata (ec, "RealVideo decoder",
"Codec/Decoder/Video", "Decoder for RealVideo streams",
"Lutz Mueller <lutz@topfrose.de>");
}
diff --git a/gst/removesilence/Makefile.in b/gst/removesilence/Makefile.in
index cbc827bc..92aef7d8 100644
--- a/gst/removesilence/Makefile.in
+++ b/gst/removesilence/Makefile.in
@@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/removesilence/gstremovesilence.c b/gst/removesilence/gstremovesilence.c
index 462ddd02..0001bf4f 100644
--- a/gst/removesilence/gstremovesilence.c
+++ b/gst/removesilence/gstremovesilence.c
@@ -122,7 +122,7 @@ gst_remove_silence_class_init (GstRemoveSilenceClass * klass)
"Set the hysteresis (on samples) used on the internal VAD",
1, G_MAXUINT64, DEFAULT_VAD_HYSTERESIS, G_PARAM_READWRITE));
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"RemoveSilence",
"Filter/Effect/Audio",
"Removes all the silence periods from the audio stream.",
diff --git a/gst/rtpmux/Makefile.in b/gst/rtpmux/Makefile.in
index 6e70f223..4e414f7e 100644
--- a/gst/rtpmux/Makefile.in
+++ b/gst/rtpmux/Makefile.in
@@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/rtpmux/gstrtpdtmfmux.c b/gst/rtpmux/gstrtpdtmfmux.c
index b320dd96..70af809b 100644
--- a/gst/rtpmux/gstrtpdtmfmux.c
+++ b/gst/rtpmux/gstrtpdtmfmux.c
@@ -87,7 +87,7 @@ gst_rtp_dtmf_mux_class_init (GstRTPDTMFMuxClass * klass)
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&priority_sink_factory));
- gst_element_class_set_metadata (gstelement_class, "RTP muxer",
+ gst_element_class_set_static_metadata (gstelement_class, "RTP muxer",
"Codec/Muxer",
"mixes RTP DTMF streams into other RTP streams",
"Zeeshan Ali <first.last@nokia.com>");
diff --git a/gst/rtpmux/gstrtpmux.c b/gst/rtpmux/gstrtpmux.c
index c68fe522..286ddc6e 100644
--- a/gst/rtpmux/gstrtpmux.c
+++ b/gst/rtpmux/gstrtpmux.c
@@ -132,7 +132,7 @@ gst_rtp_mux_class_init (GstRTPMuxClass * klass)
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&sink_factory));
- gst_element_class_set_metadata (gstelement_class, "RTP muxer",
+ gst_element_class_set_static_metadata (gstelement_class, "RTP muxer",
"Codec/Muxer",
"multiplex N rtp streams into one", "Zeeshan Ali <first.last@nokia.com>");
diff --git a/gst/rtpvp8/Makefile.in b/gst/rtpvp8/Makefile.in
index ca59adb0..ef121fbf 100644
--- a/gst/rtpvp8/Makefile.in
+++ b/gst/rtpvp8/Makefile.in
@@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/rtpvp8/gstrtpvp8depay.c b/gst/rtpvp8/gstrtpvp8depay.c
index 48a17ab5..9d7e5e6d 100644
--- a/gst/rtpvp8/gstrtpvp8depay.c
+++ b/gst/rtpvp8/gstrtpvp8depay.c
@@ -74,7 +74,7 @@ gst_rtp_vp8_depay_class_init (GstRtpVP8DepayClass * gst_rtp_vp8_depay_class)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_rtp_vp8_depay_src_template));
- gst_element_class_set_metadata (element_class, "RTP VP8 depayloader",
+ gst_element_class_set_static_metadata (element_class, "RTP VP8 depayloader",
"Codec/Depayloader/Network/RTP",
"Extracts VP8 video from RTP packets)",
"Sjoerd Simons <sjoerd@luon.net>");
diff --git a/gst/rtpvp8/gstrtpvp8pay.c b/gst/rtpvp8/gstrtpvp8pay.c
index c2e4c9f1..29d41c28 100644
--- a/gst/rtpvp8/gstrtpvp8pay.c
+++ b/gst/rtpvp8/gstrtpvp8pay.c
@@ -82,7 +82,7 @@ gst_rtp_vp8_pay_class_init (GstRtpVP8PayClass * gst_rtp_vp8_pay_class)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_rtp_vp8_pay_src_template));
- gst_element_class_set_metadata (element_class, "RTP VP8 payloader",
+ gst_element_class_set_static_metadata (element_class, "RTP VP8 payloader",
"Codec/Payloader/Network/RTP",
"Puts VP8 video in RTP packets)", "Sjoerd Simons <sjoerd@luon.net>");
diff --git a/gst/scaletempo/Makefile.in b/gst/scaletempo/Makefile.in
index 8d46e4ab..bef5e318 100644
--- a/gst/scaletempo/Makefile.in
+++ b/gst/scaletempo/Makefile.in
@@ -254,6 +254,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/scaletempo/gstscaletempo.c b/gst/scaletempo/gstscaletempo.c
index 3ee6bc58..474ba86a 100644
--- a/gst/scaletempo/gstscaletempo.c
+++ b/gst/scaletempo/gstscaletempo.c
@@ -113,7 +113,7 @@ static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
G_DEFINE_TYPE_WITH_CODE (GstScaletempo, gst_scaletempo,
GST_TYPE_BASE_TRANSFORM, DEBUG_INIT (0));
-typedef struct _GstScaletempoPrivate
+struct _GstScaletempoPrivate
{
gdouble scale;
/* parameters */
@@ -151,16 +151,17 @@ typedef struct _GstScaletempoPrivate
guint (*best_overlap_offset) (GstScaletempo * scaletempo);
/* gstreamer */
gint64 segment_start;
+ GstClockTime latency;
/* threads */
gboolean reinit_buffers;
-} GstScaletempoPrivate;
+};
#define GST_SCALETEMPO_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GST_TYPE_SCALETEMPO, GstScaletempoPrivate))
static guint
best_overlap_offset_float (GstScaletempo * scaletempo)
{
- GstScaletempoPrivate *p = GST_SCALETEMPO_GET_PRIVATE (scaletempo);
+ GstScaletempoPrivate *p = scaletempo->priv;
gfloat *pw, *po, *ppc, *search_start;
gfloat best_corr = G_MININT;
guint best_off = 0;
@@ -197,7 +198,7 @@ best_overlap_offset_float (GstScaletempo * scaletempo)
static guint
best_overlap_offset_s16 (GstScaletempo * scaletempo)
{
- GstScaletempoPrivate *p = GST_SCALETEMPO_GET_PRIVATE (scaletempo);
+ GstScaletempoPrivate *p = scaletempo->priv;
gint32 *pw, *ppc;
gint16 *po, *search_start;
gint64 best_corr = G_MININT64;
@@ -242,7 +243,7 @@ static void
output_overlap_float (GstScaletempo * scaletempo,
gpointer buf_out, guint bytes_off)
{
- GstScaletempoPrivate *p = GST_SCALETEMPO_GET_PRIVATE (scaletempo);
+ GstScaletempoPrivate *p = scaletempo->priv;
gfloat *pout = buf_out;
gfloat *pb = p->table_blend;
gfloat *po = p->buf_overlap;
@@ -258,7 +259,7 @@ static void
output_overlap_s16 (GstScaletempo * scaletempo,
gpointer buf_out, guint bytes_off)
{
- GstScaletempoPrivate *p = GST_SCALETEMPO_GET_PRIVATE (scaletempo);
+ GstScaletempoPrivate *p = scaletempo->priv;
gint16 *pout = buf_out;
gint32 *pb = p->table_blend;
gint16 *po = p->buf_overlap;
@@ -273,7 +274,7 @@ output_overlap_s16 (GstScaletempo * scaletempo,
static guint
fill_queue (GstScaletempo * scaletempo, GstBuffer * buf_in, guint offset)
{
- GstScaletempoPrivate *p = GST_SCALETEMPO_GET_PRIVATE (scaletempo);
+ GstScaletempoPrivate *p = scaletempo->priv;
guint bytes_in = gst_buffer_get_size (buf_in) - offset;
guint offset_unchanged = offset;
GstMapInfo map;
@@ -310,10 +311,11 @@ fill_queue (GstScaletempo * scaletempo, GstBuffer * buf_in, guint offset)
static void
reinit_buffers (GstScaletempo * scaletempo)
{
- GstScaletempoPrivate *p = GST_SCALETEMPO_GET_PRIVATE (scaletempo);
+ GstScaletempoPrivate *p = scaletempo->priv;
gint i, j;
guint frames_overlap;
guint new_size;
+ GstClockTime latency;
guint frames_stride = p->ms_stride * p->sample_rate / 1000.0;
p->bytes_stride = frames_stride * p->bytes_per_frame;
@@ -411,9 +413,19 @@ reinit_buffers (GstScaletempo * scaletempo)
p->bytes_queued = new_queued;
}
}
+
p->bytes_queue_max = new_size;
p->buf_queue = g_realloc (p->buf_queue, p->bytes_queue_max);
+ latency =
+ gst_util_uint64_scale (p->bytes_queue_max, GST_SECOND,
+ p->bytes_per_frame * p->sample_rate);
+ if (p->latency != latency) {
+ p->latency = latency;
+ gst_element_post_message (GST_ELEMENT (scaletempo),
+ gst_message_new_latency (GST_OBJECT (scaletempo)));
+ }
+
p->bytes_stride_scaled = p->bytes_stride * p->scale;
p->frames_stride_scaled = p->bytes_stride_scaled / p->bytes_per_frame;
@@ -436,10 +448,11 @@ gst_scaletempo_transform (GstBaseTransform * trans,
GstBuffer * inbuf, GstBuffer * outbuf)
{
GstScaletempo *scaletempo = GST_SCALETEMPO (trans);
- GstScaletempoPrivate *p = GST_SCALETEMPO_GET_PRIVATE (scaletempo);
+ GstScaletempoPrivate *p = scaletempo->priv;
gint8 *pout;
guint offset_in, bytes_out;
GstMapInfo omap;
+ GstClockTime timestamp;
gst_buffer_map (outbuf, &omap, GST_MAP_WRITE);
pout = (gint8 *) omap.data;
@@ -450,7 +463,7 @@ gst_scaletempo_transform (GstBaseTransform * trans,
gdouble frames_to_slide;
guint frames_to_stride_whole;
- // output stride
+ /* output stride */
if (p->output_overlap) {
if (p->best_overlap_offset) {
bytes_off = p->best_overlap_offset (scaletempo);
@@ -462,7 +475,7 @@ gst_scaletempo_transform (GstBaseTransform * trans,
pout += p->bytes_stride;
bytes_out += p->bytes_stride;
- // input stride
+ /* input stride */
memcpy (p->buf_overlap,
p->buf_queue + bytes_off + p->bytes_stride, p->bytes_overlap);
frames_to_slide = p->frames_stride_scaled + p->frames_stride_error;
@@ -475,11 +488,17 @@ gst_scaletempo_transform (GstBaseTransform * trans,
gst_buffer_unmap (outbuf, &omap);
+ timestamp = GST_BUFFER_TIMESTAMP (inbuf) - p->segment_start;
+ if (timestamp < p->latency)
+ timestamp = 0;
+ else
+ timestamp -= p->latency;
+ GST_BUFFER_TIMESTAMP (outbuf) = timestamp / p->scale + p->segment_start;
+ GST_BUFFER_DURATION (outbuf) =
+ gst_util_uint64_scale (bytes_out, GST_SECOND,
+ p->bytes_per_frame * p->sample_rate);
gst_buffer_set_size (outbuf, bytes_out);
- GST_BUFFER_TIMESTAMP (outbuf) =
- (GST_BUFFER_TIMESTAMP (outbuf) - p->segment_start) / p->scale +
- p->segment_start;
- //GST_BUFFER_DURATION (outbuf) = bytes_out * GST_SECOND / (p->bytes_per_frame * p->sample_rate);
+
return GST_FLOW_OK;
}
@@ -490,7 +509,7 @@ gst_scaletempo_transform_size (GstBaseTransform * trans,
{
if (direction == GST_PAD_SINK) {
GstScaletempo *scaletempo = GST_SCALETEMPO (trans);
- GstScaletempoPrivate *priv = GST_SCALETEMPO_GET_PRIVATE (scaletempo);
+ GstScaletempoPrivate *priv = scaletempo->priv;
gint bytes_to_out;
if (priv->reinit_buffers)
@@ -517,7 +536,7 @@ gst_scaletempo_sink_event (GstBaseTransform * trans, GstEvent * event)
{
if (GST_EVENT_TYPE (event) == GST_EVENT_SEGMENT) {
GstScaletempo *scaletempo = GST_SCALETEMPO (trans);
- GstScaletempoPrivate *priv = GST_SCALETEMPO_GET_PRIVATE (scaletempo);
+ GstScaletempoPrivate *priv = scaletempo->priv;
GstSegment segment;
gst_event_copy_segment (event, &segment);
@@ -546,7 +565,7 @@ gst_scaletempo_sink_event (GstBaseTransform * trans, GstEvent * event)
priv->segment_start = segment.start;
segment.applied_rate = priv->scale;
segment.rate = 1.0;
- //gst_event_unref (event);
+ gst_event_unref (event);
if (segment.stop != -1) {
segment.stop = (segment.stop - segment.start) / segment.applied_rate +
@@ -566,7 +585,7 @@ gst_scaletempo_set_caps (GstBaseTransform * trans,
GstCaps * incaps, GstCaps * outcaps)
{
GstScaletempo *scaletempo = GST_SCALETEMPO (trans);
- GstScaletempoPrivate *priv = GST_SCALETEMPO_GET_PRIVATE (scaletempo);
+ GstScaletempoPrivate *priv = scaletempo->priv;
gint width, bps, nch, rate;
gboolean use_int;
@@ -598,6 +617,59 @@ gst_scaletempo_set_caps (GstBaseTransform * trans,
return TRUE;
}
+static gboolean
+gst_scaletempo_query (GstBaseTransform * trans, GstPadDirection direction,
+ GstQuery * query)
+{
+ GstScaletempo *scaletempo = GST_SCALETEMPO (trans);
+ GstScaletempoPrivate *p = scaletempo->priv;
+
+ if (direction == GST_PAD_SRC) {
+ switch (GST_QUERY_TYPE (query)) {
+ case GST_QUERY_LATENCY:{
+ GstPad *peer;
+ gboolean res;
+
+ if ((peer = gst_pad_get_peer (GST_BASE_TRANSFORM_SINK_PAD (trans)))) {
+ if ((res = gst_pad_query (peer, query))) {
+ GstClockTime min, max;
+ gboolean live;
+
+ gst_query_parse_latency (query, &live, &min, &max);
+
+ GST_DEBUG_OBJECT (scaletempo, "Peer latency: min %"
+ GST_TIME_FORMAT " max %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (min), GST_TIME_ARGS (max));
+
+ /* add our own latency */
+ GST_DEBUG_OBJECT (scaletempo, "Our latency: %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (p->latency));
+ min += p->latency;
+ if (max != GST_CLOCK_TIME_NONE)
+ max += p->latency;
+
+ GST_DEBUG_OBJECT (scaletempo, "Calculated total latency : min %"
+ GST_TIME_FORMAT " max %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (min), GST_TIME_ARGS (max));
+ gst_query_set_latency (query, live, min, max);
+ }
+ gst_object_unref (peer);
+ }
+
+ return TRUE;
+ break;
+ }
+ default:{
+ return GST_BASE_TRANSFORM_CLASS (parent_class)->query (trans, direction,
+ query);
+ break;
+ }
+ }
+ } else {
+ return GST_BASE_TRANSFORM_CLASS (parent_class)->query (trans, direction,
+ query);
+ }
+}
/* GObject vmethod implementations */
static void
@@ -605,7 +677,7 @@ gst_scaletempo_get_property (GObject * object,
guint prop_id, GValue * value, GParamSpec * pspec)
{
GstScaletempo *scaletempo = GST_SCALETEMPO (object);
- GstScaletempoPrivate *priv = GST_SCALETEMPO_GET_PRIVATE (scaletempo);
+ GstScaletempoPrivate *priv = scaletempo->priv;
switch (prop_id) {
case PROP_RATE:
@@ -631,7 +703,7 @@ gst_scaletempo_set_property (GObject * object,
guint prop_id, const GValue * value, GParamSpec * pspec)
{
GstScaletempo *scaletempo = GST_SCALETEMPO (object);
- GstScaletempoPrivate *priv = GST_SCALETEMPO_GET_PRIVATE (scaletempo);
+ GstScaletempoPrivate *priv = scaletempo->priv;
switch (prop_id) {
case PROP_STRIDE:{
@@ -699,7 +771,7 @@ gst_scaletempo_class_init (GstScaletempoClass * klass)
gst_static_pad_template_get (&src_template));
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&sink_template));
- gst_element_class_set_metadata (gstelement_class, "Scaletempo",
+ gst_element_class_set_static_metadata (gstelement_class, "Scaletempo",
"Filter/Effect/Rate",
"Sync audio tempo with playback rate",
"Rov Juvano <rovjuvano@users.sourceforge.net>");
@@ -710,12 +782,16 @@ gst_scaletempo_class_init (GstScaletempoClass * klass)
basetransform_class->transform_size =
GST_DEBUG_FUNCPTR (gst_scaletempo_transform_size);
basetransform_class->transform = GST_DEBUG_FUNCPTR (gst_scaletempo_transform);
+ basetransform_class->query = GST_DEBUG_FUNCPTR (gst_scaletempo_query);
}
static void
gst_scaletempo_init (GstScaletempo * scaletempo)
{
- GstScaletempoPrivate *priv = GST_SCALETEMPO_GET_PRIVATE (scaletempo);
+ GstScaletempoPrivate *priv;
+
+ scaletempo->priv = priv = GST_SCALETEMPO_GET_PRIVATE (scaletempo);
+
/* defaults */
priv->ms_stride = 30;
priv->percent_overlap = .2;
diff --git a/gst/scaletempo/gstscaletempo.h b/gst/scaletempo/gstscaletempo.h
index af2e8bbf..7a04be73 100644
--- a/gst/scaletempo/gstscaletempo.h
+++ b/gst/scaletempo/gstscaletempo.h
@@ -32,10 +32,13 @@ G_BEGIN_DECLS
#define GST_IS_SCALETEMPO_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_SCALETEMPO))
typedef struct _GstScaletempo GstScaletempo;
typedef struct _GstScaletempoClass GstScaletempoClass;
+typedef struct _GstScaletempoPrivate GstScaletempoPrivate;
struct _GstScaletempo
{
GstBaseTransform element;
+
+ GstScaletempoPrivate *priv;
};
struct _GstScaletempoClass
diff --git a/gst/sdi/Makefile.in b/gst/sdi/Makefile.in
index 670c0550..d6118ac3 100644
--- a/gst/sdi/Makefile.in
+++ b/gst/sdi/Makefile.in
@@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/sdi/gstsdidemux.c b/gst/sdi/gstsdidemux.c
index 0b12db73..fe90cfb5 100644
--- a/gst/sdi/gstsdidemux.c
+++ b/gst/sdi/gstsdidemux.c
@@ -110,7 +110,7 @@ gst_sdi_demux_base_init (gpointer g_class)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_sdi_demux_sink_template));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"SDI Demuxer",
"Demuxer",
"Demultiplex SDI streams into raw audio and video",
diff --git a/gst/sdi/gstsdimux.c b/gst/sdi/gstsdimux.c
index 8682502f..a7717257 100644
--- a/gst/sdi/gstsdimux.c
+++ b/gst/sdi/gstsdimux.c
@@ -113,7 +113,7 @@ gst_sdi_mux_base_init (gpointer g_class)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_sdi_mux_sink_template));
- gst_element_class_set_metadata (element_class, "SDI Muxer",
+ gst_element_class_set_static_metadata (element_class, "SDI Muxer",
"Muxer",
"Multiplex raw audio and video into SDI",
"David Schleef <ds@schleef.org>");
diff --git a/gst/sdp/Makefile.in b/gst/sdp/Makefile.in
index b51a9410..1b31b444 100644
--- a/gst/sdp/Makefile.in
+++ b/gst/sdp/Makefile.in
@@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/sdp/gstsdpdemux.c b/gst/sdp/gstsdpdemux.c
index e34e7d65..7a638c4b 100644
--- a/gst/sdp/gstsdpdemux.c
+++ b/gst/sdp/gstsdpdemux.c
@@ -165,7 +165,7 @@ gst_sdp_demux_class_init (GstSDPDemuxClass * klass)
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&rtptemplate));
- gst_element_class_set_metadata (gstelement_class, "SDP session setup",
+ gst_element_class_set_static_metadata (gstelement_class, "SDP session setup",
"Codec/Demuxer/Network/RTP",
"Receive data over the network via SDP",
"Wim Taymans <wim.taymans@gmail.com>");
diff --git a/gst/segmentclip/Makefile.in b/gst/segmentclip/Makefile.in
index 9fc1d1f4..7ac496c0 100644
--- a/gst/segmentclip/Makefile.in
+++ b/gst/segmentclip/Makefile.in
@@ -254,6 +254,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/segmentclip/gstaudiosegmentclip.c b/gst/segmentclip/gstaudiosegmentclip.c
index b48b0581..7ace07a7 100644
--- a/gst/segmentclip/gstaudiosegmentclip.c
+++ b/gst/segmentclip/gstaudiosegmentclip.c
@@ -61,7 +61,7 @@ gst_audio_segment_clip_class_init (GstAudioSegmentClipClass * klass)
segment_clip_klass->clip_buffer =
GST_DEBUG_FUNCPTR (gst_audio_segment_clip_clip_buffer);
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"Audio buffer segment clipper",
"Filter/Audio",
"Clips audio buffers to the configured segment",
diff --git a/gst/segmentclip/gstvideosegmentclip.c b/gst/segmentclip/gstvideosegmentclip.c
index 174da76f..4cb84640 100644
--- a/gst/segmentclip/gstvideosegmentclip.c
+++ b/gst/segmentclip/gstvideosegmentclip.c
@@ -55,7 +55,7 @@ gst_video_segment_clip_class_init (GstVideoSegmentClipClass * klass)
GST_DEBUG_CATEGORY_INIT (gst_video_segment_clip_debug, "videosegmentclip", 0,
"videosegmentclip element");
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"Video buffer segment clipper",
"Filter/Video",
"Clips video buffers to the configured segment",
diff --git a/gst/siren/Makefile.in b/gst/siren/Makefile.in
index bd7f16db..cf8cf338 100644
--- a/gst/siren/Makefile.in
+++ b/gst/siren/Makefile.in
@@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/siren/gstsirendec.c b/gst/siren/gstsirendec.c
index 9afc1419..fbdfcd04 100644
--- a/gst/siren/gstsirendec.c
+++ b/gst/siren/gstsirendec.c
@@ -78,7 +78,7 @@ gst_siren_dec_class_init (GstSirenDecClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&sinktemplate));
- gst_element_class_set_metadata (element_class, "Siren Decoder element",
+ gst_element_class_set_static_metadata (element_class, "Siren Decoder element",
"Codec/Decoder/Audio ",
"Decode streams encoded with the Siren7 codec into 16bit PCM",
"Youness Alaoui <kakaroto@kakaroto.homelinux.net>");
diff --git a/gst/siren/gstsirenenc.c b/gst/siren/gstsirenenc.c
index e3c63a40..caf039e4 100644
--- a/gst/siren/gstsirenenc.c
+++ b/gst/siren/gstsirenenc.c
@@ -76,7 +76,7 @@ gst_siren_enc_class_init (GstSirenEncClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&sinktemplate));
- gst_element_class_set_metadata (element_class, "Siren Encoder element",
+ gst_element_class_set_static_metadata (element_class, "Siren Encoder element",
"Codec/Encoder/Audio ",
"Encode 16bit PCM streams into the Siren7 codec",
"Youness Alaoui <kakaroto@kakaroto.homelinux.net>");
diff --git a/gst/smooth/Makefile.in b/gst/smooth/Makefile.in
index 43cfd70c..b7c25f7f 100644
--- a/gst/smooth/Makefile.in
+++ b/gst/smooth/Makefile.in
@@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/smooth/gstsmooth.c b/gst/smooth/gstsmooth.c
index 8a72942f..76be7316 100644
--- a/gst/smooth/gstsmooth.c
+++ b/gst/smooth/gstsmooth.c
@@ -93,7 +93,7 @@ gst_smooth_class_init (GstSmoothClass * klass)
gst_static_pad_template_get (&gst_smooth_sink_template));
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&gst_smooth_src_template));
- gst_element_class_set_metadata (gstelement_class, "Smooth effect",
+ gst_element_class_set_static_metadata (gstelement_class, "Smooth effect",
"Filter/Effect/Video",
"Apply a smooth filter to an image",
"Wim Taymans <wim.taymans@chello.be>");
diff --git a/gst/speed/Makefile.in b/gst/speed/Makefile.in
index 63045c39..6ff2e409 100644
--- a/gst/speed/Makefile.in
+++ b/gst/speed/Makefile.in
@@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/speed/gstspeed.c b/gst/speed/gstspeed.c
index bfaf958f..a29baa2b 100644
--- a/gst/speed/gstspeed.c
+++ b/gst/speed/gstspeed.c
@@ -387,7 +387,7 @@ gst_speed_class_init (GstSpeedClass * klass)
0.1, 40.0, 1.0,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
- gst_element_class_set_metadata (gstelement_class, "Speed",
+ gst_element_class_set_static_metadata (gstelement_class, "Speed",
"Filter/Effect/Audio",
"Set speed/pitch on audio/raw streams (resampler)",
"Andy Wingo <apwingo@eos.ncsu.edu>, "
diff --git a/gst/stereo/Makefile.in b/gst/stereo/Makefile.in
index 4a6a0bd4..3f8d4fbc 100644
--- a/gst/stereo/Makefile.in
+++ b/gst/stereo/Makefile.in
@@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/stereo/gststereo.c b/gst/stereo/gststereo.c
index 767ee42a..25d99659 100644
--- a/gst/stereo/gststereo.c
+++ b/gst/stereo/gststereo.c
@@ -86,7 +86,7 @@ gst_stereo_base_init (gpointer g_class)
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
GstCaps *caps;
- gst_element_class_set_metadata (element_class, "Stereo effect",
+ gst_element_class_set_static_metadata (element_class, "Stereo effect",
"Filter/Effect/Audio",
"Muck with the stereo signal to enhance its 'stereo-ness'",
"Erik Walthinsen <omega@cse.ogi.edu>");
diff --git a/gst/subenc/Makefile.in b/gst/subenc/Makefile.in
index 898ddd6e..2e0e8885 100644
--- a/gst/subenc/Makefile.in
+++ b/gst/subenc/Makefile.in
@@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/subenc/gstsrtenc.c b/gst/subenc/gstsrtenc.c
index 496e6439..46cb910c 100644
--- a/gst/subenc/gstsrtenc.c
+++ b/gst/subenc/gstsrtenc.c
@@ -20,10 +20,10 @@
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
-#include "string.h"
+
+#include <string.h>
#include "gstsrtenc.h"
-#include <gst/controller/gstcontroller.h>
GST_DEBUG_CATEGORY_STATIC (srtenc_debug);
#define GST_CAT_DEFAULT srtenc_debug
@@ -43,21 +43,23 @@ static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("text/plain; text/x-pango-markup"));
+ GST_STATIC_CAPS ("text/x-raw, format = { pango-markup, utf8 }"));
-static GstFlowReturn gst_srt_enc_chain (GstPad * pad, GstBuffer * buf);
-static gchar *gst_srt_enc_timeconvertion (GstSrtEnc * srtenc, GstBuffer * buf);
-static gchar *gst_srt_enc_timestamp_to_string (GstClockTime timestamp);
+static GstFlowReturn gst_srt_enc_chain (GstPad * pad, GstObject * parent,
+ GstBuffer * buf);
+static gboolean gst_srt_enc_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
static void gst_srt_enc_get_property (GObject * object, guint prop_id,
GValue * value, GParamSpec * pspec);
static void gst_srt_enc_reset (GstSrtEnc * srtenc);
static void gst_srt_enc_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec);
-GST_BOILERPLATE (GstSrtEnc, gst_srt_enc, GstElement, GST_TYPE_ELEMENT);
+#define parent_class gst_srt_enc_parent_class
+G_DEFINE_TYPE (GstSrtEnc, gst_srt_enc, GST_TYPE_ELEMENT);
-static gchar *
-gst_srt_enc_timestamp_to_string (GstClockTime timestamp)
+static void
+gst_srt_enc_append_timestamp_to_string (GstClockTime timestamp, GString * str)
{
guint h, m, s, ms;
@@ -72,65 +74,84 @@ gst_srt_enc_timestamp_to_string (GstClockTime timestamp)
timestamp -= s * GST_SECOND;
ms = timestamp / GST_MSECOND;
- return g_strdup_printf ("%.2d:%.2d:%.2d,%.3d", h, m, s, ms);
-}
-
-static gchar *
-gst_srt_enc_timeconvertion (GstSrtEnc * srtenc, GstBuffer * buf)
-{
- gchar *start_time =
- gst_srt_enc_timestamp_to_string (GST_BUFFER_TIMESTAMP (buf) +
- srtenc->timestamp);
- gchar *stop_time =
- gst_srt_enc_timestamp_to_string (GST_BUFFER_TIMESTAMP (buf) +
- srtenc->timestamp + GST_BUFFER_DURATION (buf) + srtenc->duration);
- gchar *string = g_strdup_printf ("%s --> %s\n", start_time, stop_time);
-
- g_free (start_time);
- g_free (stop_time);
- return string;
+ g_string_append_printf (str, "%.2d:%.2d:%.2d,%.3d", h, m, s, ms);
}
static GstFlowReturn
-gst_srt_enc_chain (GstPad * pad, GstBuffer * buf)
+gst_srt_enc_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
{
- GstSrtEnc *srtenc;
+ GstSrtEnc *srtenc = GST_SRT_ENC (parent);
+ GstClockTime ts, dur = GST_SECOND;
GstBuffer *new_buffer;
- gchar *timing;
- gchar *string;
-
- srtenc = GST_SRT_ENC (gst_pad_get_parent_element (pad));
- gst_object_sync_values (GST_OBJECT (srtenc), GST_BUFFER_TIMESTAMP (buf));
- timing = gst_srt_enc_timeconvertion (srtenc, buf);
- string = g_strdup_printf ("%d\n%s", srtenc->counter++, timing);
- g_free (timing);
- new_buffer =
- gst_buffer_new_and_alloc (strlen (string) + GST_BUFFER_SIZE (buf) + 2);
- memcpy (GST_BUFFER_DATA (new_buffer), string, strlen (string));
- memcpy (GST_BUFFER_DATA (new_buffer) + strlen (string), GST_BUFFER_DATA (buf),
- GST_BUFFER_SIZE (buf));
- memcpy (GST_BUFFER_DATA (new_buffer) + GST_BUFFER_SIZE (new_buffer) - 2,
- "\n\n", 2);
- g_free (string);
+ GstMapInfo map_info;
+ GString *s;
+ gsize buf_size;
+
+ gst_object_sync_values (GST_OBJECT (srtenc), GST_BUFFER_PTS (buf));
+
+ ts = GST_BUFFER_PTS (buf) + srtenc->timestamp;
+ if (GST_BUFFER_DURATION_IS_VALID (buf))
+ dur = GST_BUFFER_DURATION (buf) + srtenc->duration;
+ else if (srtenc->duration > 0)
+ dur = srtenc->duration;
+ else
+ dur = GST_SECOND;
+
+ buf_size = gst_buffer_get_size (buf);
+ s = g_string_sized_new (10 + 50 + buf_size + 2 + 1);
+
+ /* stanza count */
+ g_string_append_printf (s, "%d\n", srtenc->counter++);
+
+ /* start_time --> end_time */
+ gst_srt_enc_append_timestamp_to_string (ts, s);
+ g_string_append_printf (s, " --> ");
+ gst_srt_enc_append_timestamp_to_string (ts + dur, s);
+ g_string_append_c (s, '\n');
+
+ /* text */
+ if (gst_buffer_map (buf, &map_info, GST_MAP_READ)) {
+ g_string_append_len (s, (const gchar *) map_info.data, map_info.size);
+ gst_buffer_unmap (buf, &map_info);
+ }
+
+ g_string_append (s, "\n\n");
+
+ buf_size = s->len;
+ new_buffer = gst_buffer_new_wrapped (g_string_free (s, FALSE), buf_size);
+
+ GST_BUFFER_TIMESTAMP (new_buffer) = GST_BUFFER_TIMESTAMP (buf);
+ GST_BUFFER_DURATION (new_buffer) = GST_BUFFER_DURATION (buf);
gst_buffer_unref (buf);
return gst_pad_push (srtenc->srcpad, new_buffer);
}
-static void
-gst_srt_enc_base_init (gpointer klass)
+static gboolean
+gst_srt_enc_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
- GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&src_template));
+ GstSrtEnc *srtenc = GST_SRT_ENC (parent);
+ gboolean ret;
+
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_CAPS:
+ {
+ GstCaps *caps;
+
+ caps = gst_static_pad_template_get_caps (&src_template);
+ gst_pad_set_caps (srtenc->srcpad, caps);
+ gst_caps_unref (caps);
+ gst_event_unref (event);
+ ret = TRUE;
+ break;
+ }
+ default:
+ ret = gst_pad_event_default (pad, parent, event);
+ break;
+ }
- gst_element_class_set_metadata (element_class,
- "Srt encoder", "Codec/Encoder/Subtitle",
- "Srt subtitle encoder", "Thijs Vermeir <thijsvermeir@gmail.com>");
+ return ret;
}
static void
@@ -225,18 +246,31 @@ gst_srt_enc_class_init (GstSrtEncClass * klass)
0,
G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
+
+ gst_element_class_set_static_metadata (element_class,
+ "Srt encoder", "Codec/Encoder/Subtitle",
+ "Srt subtitle encoder", "Thijs Vermeir <thijsvermeir@gmail.com>");
+
GST_DEBUG_CATEGORY_INIT (srtenc_debug, "srtenc", 0,
"SubRip subtitle encoder");
}
static void
-gst_srt_enc_init (GstSrtEnc * srtenc, GstSrtEncClass * klass)
+gst_srt_enc_init (GstSrtEnc * srtenc)
{
gst_srt_enc_reset (srtenc);
srtenc->srcpad = gst_pad_new_from_static_template (&src_template, "src");
gst_element_add_pad (GST_ELEMENT (srtenc), srtenc->srcpad);
+
srtenc->sinkpad = gst_pad_new_from_static_template (&sink_template, "sink");
+ gst_pad_set_chain_function (srtenc->sinkpad,
+ GST_DEBUG_FUNCPTR (gst_srt_enc_chain));
+ gst_pad_set_event_function (srtenc->sinkpad,
+ GST_DEBUG_FUNCPTR (gst_srt_enc_event));
gst_element_add_pad (GST_ELEMENT (srtenc), srtenc->sinkpad);
- gst_pad_set_chain_function (srtenc->sinkpad, gst_srt_enc_chain);
}
diff --git a/gst/subenc/gstwebvttenc.c b/gst/subenc/gstwebvttenc.c
index 72737212..f1d08fd8 100644
--- a/gst/subenc/gstwebvttenc.c
+++ b/gst/subenc/gstwebvttenc.c
@@ -21,10 +21,10 @@
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
-#include "string.h"
+
+#include <string.h>
#include "gstwebvttenc.h"
-#include <gst/controller/gstcontroller.h>
GST_DEBUG_CATEGORY_STATIC (webvttenc_debug);
#define GST_CAT_DEFAULT webvttenc_debug
@@ -39,27 +39,29 @@ enum
static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("text/webvtt"));
+ GST_STATIC_CAPS ("text/vtt"));
static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("text/plain; text/x-pango-markup"));
+ GST_STATIC_CAPS ("text/x-raw, format = { pango-markup, utf8 }"));
-static GstFlowReturn gst_webvtt_enc_chain (GstPad * pad, GstBuffer * buf);
-static gchar *gst_webvtt_enc_timeconvertion (GstWebvttEnc * webvttenc,
+static GstFlowReturn gst_webvtt_enc_chain (GstPad * pad, GstObject * parent,
GstBuffer * buf);
-static gchar *gst_webvtt_enc_timestamp_to_string (GstClockTime timestamp);
+static void gst_webvtt_enc_append_timestamp_to_string (GstClockTime timestamp,
+ GString * str);
static void gst_webvtt_enc_get_property (GObject * object, guint prop_id,
GValue * value, GParamSpec * pspec);
static void gst_webvtt_enc_reset (GstWebvttEnc * webvttenc);
static void gst_webvtt_enc_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec);
-GST_BOILERPLATE (GstWebvttEnc, gst_webvtt_enc, GstElement, GST_TYPE_ELEMENT);
+#define parent_class gst_webvtt_enc_parent_class
+G_DEFINE_TYPE (GstWebvttEnc, gst_webvtt_enc, GST_TYPE_ELEMENT);
-static gchar *
-gst_webvtt_enc_timestamp_to_string (GstClockTime timestamp)
+static void
+gst_webvtt_enc_append_timestamp_to_string (GstClockTime timestamp,
+ GString * str)
{
guint h, m, s, ms;
@@ -74,97 +76,102 @@ gst_webvtt_enc_timestamp_to_string (GstClockTime timestamp)
timestamp -= s * GST_SECOND;
ms = timestamp / GST_MSECOND;
- return g_strdup_printf ("%02d:%02d:%02d.%03d", h, m, s, ms);
-}
-
-static gchar *
-gst_webvtt_enc_timeconvertion (GstWebvttEnc * webvttenc, GstBuffer * buf)
-{
- gchar *start_time;
- gchar *stop_time;
- gchar *string;
-
- start_time = gst_webvtt_enc_timestamp_to_string (GST_BUFFER_TIMESTAMP (buf) +
- webvttenc->timestamp);
- if (GST_CLOCK_TIME_IS_VALID (GST_BUFFER_DURATION (buf))) {
- stop_time = gst_webvtt_enc_timestamp_to_string (GST_BUFFER_TIMESTAMP (buf) +
- webvttenc->timestamp + GST_BUFFER_DURATION (buf) + webvttenc->duration);
- } else {
- stop_time = gst_webvtt_enc_timestamp_to_string (GST_BUFFER_TIMESTAMP (buf) +
- webvttenc->timestamp + webvttenc->duration);
- }
- string = g_strdup_printf ("%s --> %s\n", start_time, stop_time);
-
- g_free (start_time);
- g_free (stop_time);
- return string;
+ g_string_append_printf (str, "%02d:%02d:%02d.%03d", h, m, s, ms);
}
static GstFlowReturn
-gst_webvtt_enc_chain (GstPad * pad, GstBuffer * buf)
+gst_webvtt_enc_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
{
- GstWebvttEnc *webvttenc;
+ GstWebvttEnc *webvttenc = GST_WEBVTT_ENC (parent);
+ GstClockTime ts, dur = GST_SECOND;
GstBuffer *new_buffer;
- gchar *timing;
+ GstMapInfo map_info;
GstFlowReturn ret;
-
- webvttenc = GST_WEBVTT_ENC (gst_pad_get_parent_element (pad));
+ GString *s;
+ gsize buf_size;
if (!webvttenc->pushed_header) {
const char *header = "WEBVTT\n\n";
- new_buffer = gst_buffer_new_and_alloc (strlen (header));
- memcpy (GST_BUFFER_DATA (new_buffer), header, strlen (header));
+ new_buffer = gst_buffer_new_wrapped (g_strdup (header), strlen (header));
- GST_BUFFER_TIMESTAMP (new_buffer) = GST_CLOCK_TIME_NONE;
+ GST_BUFFER_PTS (new_buffer) = GST_CLOCK_TIME_NONE;
GST_BUFFER_DURATION (new_buffer) = GST_CLOCK_TIME_NONE;
ret = gst_pad_push (webvttenc->srcpad, new_buffer);
- if (ret != GST_FLOW_OK) {
+
+ if (ret != GST_FLOW_OK)
goto out;
- }
webvttenc->pushed_header = TRUE;
}
- gst_object_sync_values (GST_OBJECT (webvttenc), GST_BUFFER_TIMESTAMP (buf));
+ gst_object_sync_values (GST_OBJECT (webvttenc), GST_BUFFER_PTS (buf));
+
+ ts = GST_BUFFER_PTS (buf) + webvttenc->timestamp;
+ if (GST_BUFFER_DURATION_IS_VALID (buf))
+ dur = GST_BUFFER_DURATION (buf) + webvttenc->duration;
+ else if (webvttenc->duration > 0)
+ dur = webvttenc->duration;
+ else
+ dur = GST_SECOND;
+
+ buf_size = gst_buffer_get_size (buf);
+ s = g_string_sized_new (50 + buf_size + 1 + 1);
+
+ /* start_time --> end_time */
+ gst_webvtt_enc_append_timestamp_to_string (ts, s);
+ g_string_append_printf (s, " --> ");
+ gst_webvtt_enc_append_timestamp_to_string (ts + dur, s);
+ g_string_append_c (s, '\n');
+
+ /* text */
+ if (gst_buffer_map (buf, &map_info, GST_MAP_READ)) {
+ g_string_append_len (s, (const gchar *) map_info.data, map_info.size);
+ gst_buffer_unmap (buf, &map_info);
+ }
+
+ g_string_append_c (s, '\n');
- timing = gst_webvtt_enc_timeconvertion (webvttenc, buf);
- new_buffer =
- gst_buffer_new_and_alloc (strlen (timing) + GST_BUFFER_SIZE (buf) + 1);
- memcpy (GST_BUFFER_DATA (new_buffer), timing, strlen (timing));
- memcpy (GST_BUFFER_DATA (new_buffer) + strlen (timing), GST_BUFFER_DATA (buf),
- GST_BUFFER_SIZE (buf));
- memcpy (GST_BUFFER_DATA (new_buffer) + GST_BUFFER_SIZE (new_buffer) - 1,
- "\n", 1);
- g_free (timing);
+ buf_size = s->len;
+ new_buffer = gst_buffer_new_wrapped (g_string_free (s, FALSE), buf_size);
GST_BUFFER_TIMESTAMP (new_buffer) = GST_BUFFER_TIMESTAMP (buf);
GST_BUFFER_DURATION (new_buffer) = GST_BUFFER_DURATION (buf);
-
ret = gst_pad_push (webvttenc->srcpad, new_buffer);
out:
+
gst_buffer_unref (buf);
- gst_object_unref (webvttenc);
return ret;
}
-static void
-gst_webvtt_enc_base_init (gpointer klass)
+static gboolean
+gst_webvtt_enc_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
- GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&sink_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&src_template));
+ GstWebvttEnc *webvttenc = GST_WEBVTT_ENC (parent);
+ gboolean ret;
+
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_CAPS:
+ {
+ GstCaps *caps;
+
+ caps = gst_static_pad_template_get_caps (&src_template);
+ gst_pad_set_caps (webvttenc->srcpad, caps);
+ gst_caps_unref (caps);
+ gst_event_unref (event);
+ ret = TRUE;
+ break;
+ }
+ default:
+ ret = gst_pad_event_default (pad, parent, event);
+ break;
+ }
- gst_element_class_set_metadata (element_class,
- "WebVTT encoder", "Codec/Encoder/Subtitle",
- "WebVTT subtitle encoder", "David Schleef <ds@schleef.org>");
+ return ret;
}
static void
@@ -259,12 +266,21 @@ gst_webvtt_enc_class_init (GstWebvttEncClass * klass)
0,
G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&sink_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&src_template));
+
+ gst_element_class_set_static_metadata (element_class,
+ "WebVTT encoder", "Codec/Encoder/Subtitle",
+ "WebVTT subtitle encoder", "David Schleef <ds@schleef.org>");
+
GST_DEBUG_CATEGORY_INIT (webvttenc_debug, "webvttenc", 0,
"SubRip subtitle encoder");
}
static void
-gst_webvtt_enc_init (GstWebvttEnc * webvttenc, GstWebvttEncClass * klass)
+gst_webvtt_enc_init (GstWebvttEnc * webvttenc)
{
gst_webvtt_enc_reset (webvttenc);
@@ -272,6 +288,9 @@ gst_webvtt_enc_init (GstWebvttEnc * webvttenc, GstWebvttEncClass * klass)
gst_element_add_pad (GST_ELEMENT (webvttenc), webvttenc->srcpad);
webvttenc->sinkpad =
gst_pad_new_from_static_template (&sink_template, "sink");
+ gst_pad_set_chain_function (webvttenc->sinkpad,
+ GST_DEBUG_FUNCPTR (gst_webvtt_enc_chain));
+ gst_pad_set_event_function (webvttenc->sinkpad,
+ GST_DEBUG_FUNCPTR (gst_webvtt_enc_event));
gst_element_add_pad (GST_ELEMENT (webvttenc), webvttenc->sinkpad);
- gst_pad_set_chain_function (webvttenc->sinkpad, gst_webvtt_enc_chain);
}
diff --git a/gst/tta/Makefile.in b/gst/tta/Makefile.in
index c0909652..78af10b7 100644
--- a/gst/tta/Makefile.in
+++ b/gst/tta/Makefile.in
@@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/tta/gstttadec.c b/gst/tta/gstttadec.c
index aa7f4d0a..38da3d40 100644
--- a/gst/tta/gstttadec.c
+++ b/gst/tta/gstttadec.c
@@ -175,7 +175,7 @@ gst_tta_dec_base_init (GstTtaDecClass * klass)
gst_static_pad_template_get (&src_factory));
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&sink_factory));
- gst_element_class_set_metadata (element_class, "TTA audio decoder",
+ gst_element_class_set_static_metadata (element_class, "TTA audio decoder",
"Codec/Decoder/Audio",
"Decode TTA audio data", "Arwed v. Merkatz <v.merkatz@gmx.net>");
}
diff --git a/gst/tta/gstttaparse.c b/gst/tta/gstttaparse.c
index 9f164d72..25410545 100644
--- a/gst/tta/gstttaparse.c
+++ b/gst/tta/gstttaparse.c
@@ -96,7 +96,7 @@ gst_tta_parse_base_init (GstTtaParseClass * klass)
gst_static_pad_template_get (&src_factory));
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&sink_factory));
- gst_element_class_set_metadata (element_class, "TTA file parser",
+ gst_element_class_set_static_metadata (element_class, "TTA file parser",
"Codec/Demuxer/Audio",
"Parses TTA files", "Arwed v. Merkatz <v.merkatz@gmx.net>");
}
diff --git a/gst/videofilters/Makefile.in b/gst/videofilters/Makefile.in
index c13b290f..d607bcc2 100644
--- a/gst/videofilters/Makefile.in
+++ b/gst/videofilters/Makefile.in
@@ -256,6 +256,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/videofilters/gstscenechange.c b/gst/videofilters/gstscenechange.c
index b15439d4..864cad34 100644
--- a/gst/videofilters/gstscenechange.c
+++ b/gst/videofilters/gstscenechange.c
@@ -132,7 +132,7 @@ gst_scene_change_base_init (gpointer g_class)
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_set_metadata (element_class, "Scene change detector",
+ gst_element_class_set_static_metadata (element_class, "Scene change detector",
"Video/Filter", "Detects scene changes in video",
"David Schleef <ds@entropywave.com>");
}
diff --git a/gst/videofilters/gstzebrastripe.c b/gst/videofilters/gstzebrastripe.c
index bcf0318c..62306887 100644
--- a/gst/videofilters/gstzebrastripe.c
+++ b/gst/videofilters/gstzebrastripe.c
@@ -94,7 +94,7 @@ gst_zebra_stripe_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_set_metadata (element_class, "Zebra stripe overlay",
+ gst_element_class_set_static_metadata (element_class, "Zebra stripe overlay",
"Filter/Analysis",
"Overlays zebra striping on overexposed areas of video",
"David Schleef <ds@entropywave.com>");
diff --git a/gst/videomeasure/Makefile.in b/gst/videomeasure/Makefile.in
index ca4b04db..a8819c55 100644
--- a/gst/videomeasure/Makefile.in
+++ b/gst/videomeasure/Makefile.in
@@ -254,6 +254,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/videomeasure/gstvideomeasure_collector.c b/gst/videomeasure/gstvideomeasure_collector.c
index 081ce199..c51e4bbf 100644
--- a/gst/videomeasure/gstvideomeasure_collector.c
+++ b/gst/videomeasure/gstvideomeasure_collector.c
@@ -318,7 +318,7 @@ gst_measure_collector_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"Video measure collector", "Filter/Effect/Video",
"Collect measurements from a measuring element",
"Руслан Ижбулатов <lrn _at_ gmail _dot_ com>");
diff --git a/gst/videomeasure/gstvideomeasure_ssim.c b/gst/videomeasure/gstvideomeasure_ssim.c
index 5e56875d..c0edd608 100644
--- a/gst/videomeasure/gstvideomeasure_ssim.c
+++ b/gst/videomeasure/gstvideomeasure_ssim.c
@@ -1101,7 +1101,7 @@ gst_ssim_class_init (GstSSimClass * klass)
gst_static_pad_template_get (&gst_ssim_sink_original_template));
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&gst_ssim_sink_modified_template));
- gst_element_class_set_metadata (gstelement_class, "SSim",
+ gst_element_class_set_static_metadata (gstelement_class, "SSim",
"Filter/Analyzer/Video",
"Calculate Y-SSIM for n+2 YUV video streams",
"Руслан Ижбулатов <lrn1986 _at_ gmail _dot_ com>");
diff --git a/gst/videoparsers/Makefile.in b/gst/videoparsers/Makefile.in
index fa7a5eb7..a0a9a2df 100644
--- a/gst/videoparsers/Makefile.in
+++ b/gst/videoparsers/Makefile.in
@@ -260,6 +260,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/videoparsers/gstdiracparse.c b/gst/videoparsers/gstdiracparse.c
index 0f0bdb9a..25af43d8 100644
--- a/gst/videoparsers/gstdiracparse.c
+++ b/gst/videoparsers/gstdiracparse.c
@@ -113,7 +113,7 @@ gst_dirac_parse_class_init (GstDiracParseClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_dirac_parse_sink_template));
- gst_element_class_set_metadata (element_class, "Dirac parser",
+ gst_element_class_set_static_metadata (element_class, "Dirac parser",
"Codec/Parser/Video", "Parses Dirac streams",
"David Schleef <ds@schleef.org>");
diff --git a/gst/videoparsers/gsth263parse.c b/gst/videoparsers/gsth263parse.c
index 75187813..fbbdf05f 100644
--- a/gst/videoparsers/gsth263parse.c
+++ b/gst/videoparsers/gsth263parse.c
@@ -74,7 +74,7 @@ gst_h263_parse_class_init (GstH263ParseClass * klass)
gst_static_pad_template_get (&srctemplate));
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&sinktemplate));
- gst_element_class_set_metadata (gstelement_class, "H.263 parser",
+ gst_element_class_set_static_metadata (gstelement_class, "H.263 parser",
"Codec/Parser/Video",
"Parses H.263 streams",
"Arun Raghavan <arun.raghavan@collabora.co.uk>,"
diff --git a/gst/videoparsers/gsth264parse.c b/gst/videoparsers/gsth264parse.c
index 2b0db51f..bb9ada9d 100644
--- a/gst/videoparsers/gsth264parse.c
+++ b/gst/videoparsers/gsth264parse.c
@@ -135,7 +135,7 @@ gst_h264_parse_class_init (GstH264ParseClass * klass)
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&sinktemplate));
- gst_element_class_set_metadata (gstelement_class, "H.264 parser",
+ gst_element_class_set_static_metadata (gstelement_class, "H.264 parser",
"Codec/Parser/Converter/Video",
"Parses H.264 streams",
"Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>");
diff --git a/gst/videoparsers/gstmpeg4videoparse.c b/gst/videoparsers/gstmpeg4videoparse.c
index f08af17a..94a6feb2 100644
--- a/gst/videoparsers/gstmpeg4videoparse.c
+++ b/gst/videoparsers/gstmpeg4videoparse.c
@@ -155,7 +155,7 @@ gst_mpeg4vparse_class_init (GstMpeg4VParseClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&sink_template));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"MPEG 4 video elementary stream parser", "Codec/Parser/Video",
"Parses MPEG-4 Part 2 elementary video streams",
"Julien Moutte <julien@fluendo.com>");
@@ -191,6 +191,7 @@ gst_mpeg4vparse_reset_frame (GstMpeg4VParse * mp4vparse)
mp4vparse->last_sc = -1;
mp4vparse->vop_offset = -1;
mp4vparse->vo_found = FALSE;
+ mp4vparse->config_found = FALSE;
mp4vparse->vol_offset = -1;
mp4vparse->vo_offset = -1;
}
@@ -372,7 +373,7 @@ gst_mpeg4vparse_process_sc (GstMpeg4VParse * mp4vparse, GstMpeg4Packet * packet,
}
/* parse config data ending here if proper startcodes found earlier;
* we should have received a visual object before. */
- if (mp4vparse->vo_found) {
+ if (mp4vparse->config_found) {
/*Do not take care startcode into account */
gst_mpeg4vparse_process_config (mp4vparse,
packet->data, packet->offset, packet->offset - 3);
@@ -382,6 +383,7 @@ gst_mpeg4vparse_process_sc (GstMpeg4VParse * mp4vparse, GstMpeg4Packet * packet,
}
case GST_MPEG4_VISUAL_OBJ_SEQ_START:
GST_LOG_OBJECT (mp4vparse, "Visual Sequence Start");
+ mp4vparse->config_found = TRUE;
mp4vparse->profile = gst_codec_utils_mpeg4video_get_profile (packet->data
+ packet->offset + 1, packet->offset);
mp4vparse->level = gst_codec_utils_mpeg4video_get_level (packet->data
@@ -404,6 +406,7 @@ gst_mpeg4vparse_process_sc (GstMpeg4VParse * mp4vparse, GstMpeg4Packet * packet,
/* VO (video object) cases */
} else if (packet->type <= GST_MPEG4_VIDEO_OBJ_LAST) {
GST_LOG_OBJECT (mp4vparse, "Video object");
+ mp4vparse->config_found = TRUE;
}
break;
}
@@ -825,6 +828,7 @@ gst_mpeg4vparse_set_caps (GstBaseParse * parse, GstCaps * caps)
/* And take it as config */
gst_mpeg4vparse_process_config (mp4vparse, data, 3, size);
gst_buffer_unmap (buf, &map);
+ gst_mpeg4vparse_reset_frame (mp4vparse);
}
/* let's not interfere and accept regardless of config parsing success */
diff --git a/gst/videoparsers/gstmpeg4videoparse.h b/gst/videoparsers/gstmpeg4videoparse.h
index 339af6a0..1c8835b3 100644
--- a/gst/videoparsers/gstmpeg4videoparse.h
+++ b/gst/videoparsers/gstmpeg4videoparse.h
@@ -51,6 +51,7 @@ struct _GstMpeg4VParse {
gint last_sc;
gint vop_offset;
gboolean vo_found;
+ gboolean config_found;
gboolean intra_frame;
gboolean vop_coded;
gboolean update_caps;
diff --git a/gst/videoparsers/gstmpegvideoparse.c b/gst/videoparsers/gstmpegvideoparse.c
index f455f8f8..bb111b0d 100644
--- a/gst/videoparsers/gstmpegvideoparse.c
+++ b/gst/videoparsers/gstmpegvideoparse.c
@@ -148,7 +148,7 @@ gst_mpegv_parse_class_init (GstMpegvParseClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&sink_template));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"MPEG video elementary stream parser",
"Codec/Parser/Video",
"Parses and frames MPEG-1 and MPEG-2 elementary video streams",
@@ -741,8 +741,9 @@ gst_mpegv_parse_update_src_caps (GstMpegvParse * mpvparse)
else
GST_DEBUG_OBJECT (mpvparse, "Invalid level - %u", level_c);
- gst_caps_set_simple (caps, "interlaced",
- G_TYPE_BOOLEAN, !mpvparse->sequenceext.progressive, NULL);
+ gst_caps_set_simple (caps, "interlace-mode",
+ G_TYPE_STRING,
+ (mpvparse->sequenceext.progressive ? "progressive" : "mixed"), NULL);
}
gst_pad_set_caps (GST_BASE_PARSE_SRC_PAD (mpvparse), caps);
@@ -834,6 +835,7 @@ gst_mpegv_parse_set_caps (GstBaseParse * parse, GstCaps * caps)
* src caps are based on sink caps so it will end up in there
* whether sucessful or not */
gst_mpegv_parse_process_config (mpvparse, buf, gst_buffer_get_size (buf));
+ gst_mpegv_parse_reset_frame (mpvparse);
}
/* let's not interfere and accept regardless of config parsing success */
diff --git a/gst/videosignal/Makefile.in b/gst/videosignal/Makefile.in
index 9681ecb3..b1c4a367 100644
--- a/gst/videosignal/Makefile.in
+++ b/gst/videosignal/Makefile.in
@@ -254,6 +254,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/videosignal/gstvideoanalyse.c b/gst/videosignal/gstvideoanalyse.c
index d18ac77c..a900ae45 100644
--- a/gst/videosignal/gstvideoanalyse.c
+++ b/gst/videosignal/gstvideoanalyse.c
@@ -275,7 +275,7 @@ gst_video_analyse_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_set_metadata (element_class, "Video analyser",
+ gst_element_class_set_static_metadata (element_class, "Video analyser",
"Filter/Analyzer/Video",
"Analyse video signal", "Wim Taymans <wim@fluendo.com>");
diff --git a/gst/videosignal/gstvideodetect.c b/gst/videosignal/gstvideodetect.c
index c98b6739..1ffbce55 100644
--- a/gst/videosignal/gstvideodetect.c
+++ b/gst/videosignal/gstvideodetect.c
@@ -434,7 +434,7 @@ gst_video_detect_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_set_metadata (element_class, "Video detecter",
+ gst_element_class_set_static_metadata (element_class, "Video detecter",
"Filter/Effect/Video",
"Detect patterns in a video signal", "Wim Taymans <wim@fluendo.com>");
diff --git a/gst/videosignal/gstvideomark.c b/gst/videosignal/gstvideomark.c
index 117f2bda..a5ad0444 100644
--- a/gst/videosignal/gstvideomark.c
+++ b/gst/videosignal/gstvideomark.c
@@ -321,7 +321,7 @@ gst_video_mark_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_set_metadata (element_class, "Video marker",
+ gst_element_class_set_static_metadata (element_class, "Video marker",
"Filter/Effect/Video",
"Marks a video signal with a pattern", "Wim Taymans <wim@fluendo.com>");
diff --git a/gst/vmnc/Makefile.in b/gst/vmnc/Makefile.in
index 594348ef..dba868a4 100644
--- a/gst/vmnc/Makefile.in
+++ b/gst/vmnc/Makefile.in
@@ -247,6 +247,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/vmnc/vmncdec.c b/gst/vmnc/vmncdec.c
index 879e4dc8..bee4706a 100644
--- a/gst/vmnc/vmncdec.c
+++ b/gst/vmnc/vmncdec.c
@@ -172,7 +172,7 @@ gst_vmnc_dec_base_init (gpointer g_class)
gst_static_pad_template_get (&vmnc_dec_src_factory));
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&vmnc_dec_sink_factory));
- gst_element_class_set_metadata (element_class, "VMnc video decoder",
+ gst_element_class_set_static_metadata (element_class, "VMnc video decoder",
"Codec/Decoder/Video",
"Decode VmWare video to raw (RGB) video",
"Michael Smith <msmith@xiph.org>");
diff --git a/gst/y4m/Makefile.in b/gst/y4m/Makefile.in
index a8d49a0a..9f9accaa 100644
--- a/gst/y4m/Makefile.in
+++ b/gst/y4m/Makefile.in
@@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/gst/y4m/gsty4mdec.c b/gst/y4m/gsty4mdec.c
index bb328e63..95d215dd 100644
--- a/gst/y4m/gsty4mdec.c
+++ b/gst/y4m/gsty4mdec.c
@@ -111,7 +111,7 @@ gst_y4m_dec_class_init (GstY4mDecClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_y4m_dec_sink_template));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"YUV4MPEG demuxer/decoder", "Codec/Demuxer",
"Demuxes/decodes YUV4MPEG streams", "David Schleef <ds@schleef.org>");
}
diff --git a/m4/Makefile.in b/m4/Makefile.in
index 29294288..bb7417d3 100644
--- a/m4/Makefile.in
+++ b/m4/Makefile.in
@@ -183,6 +183,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/pkgconfig/Makefile.in b/pkgconfig/Makefile.in
index d665695b..807915cc 100644
--- a/pkgconfig/Makefile.in
+++ b/pkgconfig/Makefile.in
@@ -222,6 +222,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/po/af.gmo b/po/af.gmo
index ecd6c8ca..6c7c34fe 100644
--- a/po/af.gmo
+++ b/po/af.gmo
Binary files differ
diff --git a/po/af.po b/po/af.po
index 5b4c6a95..042efdad 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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\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 a80c3bd3..7c128297 100644
--- a/po/az.gmo
+++ b/po/az.gmo
Binary files differ
diff --git a/po/az.po b/po/az.po
index f1e8e5f6..3de95f11 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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\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 2df3e26c..f12d4da3 100644
--- a/po/bg.gmo
+++ b/po/bg.gmo
Binary files differ
diff --git a/po/bg.po b/po/bg.po
index 6900b7e6..86940c40 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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\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 4b451319..ed819e5a 100644
--- a/po/ca.gmo
+++ b/po/ca.gmo
Binary files differ
diff --git a/po/ca.po b/po/ca.po
index e17d721d..b69ce895 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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\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 79850c5f..048b4304 100644
--- a/po/cs.gmo
+++ b/po/cs.gmo
Binary files differ
diff --git a/po/cs.po b/po/cs.po
index c13afe4b..96856d71 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -8,7 +8,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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\n"
"PO-Revision-Date: 2009-08-29 01:48+0200\n"
"Last-Translator: Petr Kovar <pknbe@volny.cz>\n"
"Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
diff --git a/po/da.gmo b/po/da.gmo
index f92adfa6..742fbddb 100644
--- a/po/da.gmo
+++ b/po/da.gmo
Binary files differ
diff --git a/po/da.po b/po/da.po
index 3e7d5dbf..e1468de9 100644
--- a/po/da.po
+++ b/po/da.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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\n"
"PO-Revision-Date: 2011-04-28 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 4be200f1..e9aaa248 100644
--- a/po/de.gmo
+++ b/po/de.gmo
Binary files differ
diff --git a/po/de.po b/po/de.po
index 2654183b..39714df8 100644
--- a/po/de.po
+++ b/po/de.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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\n"
"PO-Revision-Date: 2011-04-28 00:04+0200\n"
"Last-Translator: Christian Kirbach <christian.kirbach@googlemail.com>\n"
"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
diff --git a/po/el.gmo b/po/el.gmo
index d69954a0..34f4799c 100644
--- a/po/el.gmo
+++ b/po/el.gmo
Binary files differ
diff --git a/po/el.po b/po/el.po
index 56d47ff8..53c0e151 100644
--- a/po/el.po
+++ b/po/el.po
@@ -8,7 +8,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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\n"
"PO-Revision-Date: 2010-09-02 12:32+0300\n"
"Last-Translator: Simos Xenitellis <simos.lists@googlemail.com>\n"
"Language-Team: Greek <team@lists.gnome.gr>\n"
diff --git a/po/en_GB.gmo b/po/en_GB.gmo
index 19b41121..cca29058 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 bbcb0e4a..66ddba82 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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\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 0ae493c2..c03682ce 100644
--- a/po/eo.gmo
+++ b/po/eo.gmo
Binary files differ
diff --git a/po/eo.po b/po/eo.po
index 927bc660..c7bfe105 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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\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 7e6b15f9..c81aa758 100644
--- a/po/es.gmo
+++ b/po/es.gmo
Binary files differ
diff --git a/po/es.po b/po/es.po
index 3c13a31b..3d1c54fe 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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\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 81e9fa2b..556aeebe 100644
--- a/po/eu.gmo
+++ b/po/eu.gmo
Binary files differ
diff --git a/po/eu.po b/po/eu.po
index 985e6307..57ec2f2b 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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\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 ff443fa0..3280ebc2 100644
--- a/po/fi.gmo
+++ b/po/fi.gmo
Binary files differ
diff --git a/po/fi.po b/po/fi.po
index 4f553bd6..b03d6bbe 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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\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 4d6a5faf..95a813d2 100644
--- a/po/fr.gmo
+++ b/po/fr.gmo
Binary files differ
diff --git a/po/fr.po b/po/fr.po
index 2fefaf8e..2fad9ec3 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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\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 ec7ba157..6e9fab3c 100644
--- a/po/gl.gmo
+++ b/po/gl.gmo
Binary files differ
diff --git a/po/gl.po b/po/gl.po
index 31186c6c..3f974f88 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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\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 ce1633a0..6f9e7eaa 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.0.1\n"
+"Project-Id-Version: gst-plugins-bad 1.0.2\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\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"
diff --git a/po/hu.gmo b/po/hu.gmo
index d6ce0027..711be6c6 100644
--- a/po/hu.gmo
+++ b/po/hu.gmo
Binary files differ
diff --git a/po/hu.po b/po/hu.po
index 0af15a87..33977af2 100644
--- a/po/hu.po
+++ b/po/hu.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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\n"
"PO-Revision-Date: 2009-08-12 23:33+0200\n"
"Last-Translator: Gabor Kelemen <kelemeng@gnome.hu>\n"
"Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
diff --git a/po/id.gmo b/po/id.gmo
index 3704c982..39da89aa 100644
--- a/po/id.gmo
+++ b/po/id.gmo
Binary files differ
diff --git a/po/id.po b/po/id.po
index 5d345679..cba9c315 100644
--- a/po/id.po
+++ b/po/id.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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\n"
"PO-Revision-Date: 2012-01-28 10:27+0700\n"
"Last-Translator: Andhika Padmawan <andhika.padmawan@gmail.com>\n"
"Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
diff --git a/po/it.gmo b/po/it.gmo
index 1f45d3e9..445b7508 100644
--- a/po/it.gmo
+++ b/po/it.gmo
Binary files differ
diff --git a/po/it.po b/po/it.po
index 6f0a4ee7..06fa9e4c 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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\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 642a37e7..d98cdfd7 100644
--- a/po/ja.gmo
+++ b/po/ja.gmo
Binary files differ
diff --git a/po/ja.po b/po/ja.po
index 38681cc9..3a6b2aef 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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\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 2b0a00a4..06dfc9e3 100644
--- a/po/ky.gmo
+++ b/po/ky.gmo
Binary files differ
diff --git a/po/ky.po b/po/ky.po
index 8a47925f..fa5d4d3b 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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\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 194c684f..30d4286a 100644
--- a/po/lt.gmo
+++ b/po/lt.gmo
Binary files differ
diff --git a/po/lt.po b/po/lt.po
index 5b487942..a8edaeee 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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\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 020cdedc..2ad05604 100644
--- a/po/lv.gmo
+++ b/po/lv.gmo
Binary files differ
diff --git a/po/lv.po b/po/lv.po
index 7f030790..998c87ab 100644
--- a/po/lv.po
+++ b/po/lv.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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\n"
"PO-Revision-Date: 2011-09-02 12:04-0000\n"
"Last-Translator: Rihards Priedītis <rprieditis@gmail.com>\n"
"Language-Team: Latvian <translation-team-lv@lists.sourceforge.net>\n"
diff --git a/po/mt.gmo b/po/mt.gmo
index 058decbb..f32a899b 100644
--- a/po/mt.gmo
+++ b/po/mt.gmo
Binary files differ
diff --git a/po/mt.po b/po/mt.po
index be2f1b95..23a59406 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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\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 c8e43574..da367d39 100644
--- a/po/nb.gmo
+++ b/po/nb.gmo
Binary files differ
diff --git a/po/nb.po b/po/nb.po
index 2ff84723..d3160543 100644
--- a/po/nb.po
+++ b/po/nb.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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\n"
"PO-Revision-Date: 2007-11-03 14:46+0100\n"
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
"Language-Team: Norwegian Bokmaal <i18n-nb@lister.ping.uio.no>\n"
diff --git a/po/nl.gmo b/po/nl.gmo
index 9a2e426b..df425a1a 100644
--- a/po/nl.gmo
+++ b/po/nl.gmo
Binary files differ
diff --git a/po/nl.po b/po/nl.po
index f4389c62..657d7b02 100644
--- a/po/nl.po
+++ b/po/nl.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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\n"
"PO-Revision-Date: 2011-04-27 00:16+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 a1e14324..ab28a2c2 100644
--- a/po/or.gmo
+++ b/po/or.gmo
Binary files differ
diff --git a/po/or.po b/po/or.po
index 82cc36fb..b0ccf291 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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\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 67495569..c9f44120 100644
--- a/po/pl.gmo
+++ b/po/pl.gmo
Binary files differ
diff --git a/po/pl.po b/po/pl.po
index d54bc43c..07646ed2 100644
--- a/po/pl.po
+++ b/po/pl.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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\n"
"PO-Revision-Date: 2011-04-26 17:57+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 6fbc091d..50f20a79 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 70ebd8bb..271a8f55 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -8,7 +8,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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\n"
"PO-Revision-Date: 2010-05-26 00:00-0300\n"
"Last-Translator: Fabrício Godoy <skarllot@gmail.com>\n"
"Language-Team: Brazilian Portuguese <ldp-br@bazar.conectiva.com.br>\n"
diff --git a/po/ro.gmo b/po/ro.gmo
index 94e4e555..773dd8f7 100644
--- a/po/ro.gmo
+++ b/po/ro.gmo
Binary files differ
diff --git a/po/ro.po b/po/ro.po
index 4944523d..f9a742e7 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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\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 3754a443..d2ef6414 100644
--- a/po/ru.gmo
+++ b/po/ru.gmo
Binary files differ
diff --git a/po/ru.po b/po/ru.po
index 365c07a7..b04515f4 100644
--- a/po/ru.po
+++ b/po/ru.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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\n"
"PO-Revision-Date: 2011-04-26 20:31+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 e1bcd279..e2320872 100644
--- a/po/sk.gmo
+++ b/po/sk.gmo
Binary files differ
diff --git a/po/sk.po b/po/sk.po
index e0671e18..35ed91fc 100644
--- a/po/sk.po
+++ b/po/sk.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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\n"
"PO-Revision-Date: 2010-03-08 09:20+0100\n"
"Last-Translator: Peter Tuhársky <tuharsky@misbb.sk>\n"
"Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
diff --git a/po/sl.gmo b/po/sl.gmo
index a768c456..892171cb 100644
--- a/po/sl.gmo
+++ b/po/sl.gmo
Binary files differ
diff --git a/po/sl.po b/po/sl.po
index 20779b57..bc9da6fe 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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\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 81c5c46c..e9626adb 100644
--- a/po/sq.gmo
+++ b/po/sq.gmo
Binary files differ
diff --git a/po/sq.po b/po/sq.po
index cf2cffd2..4dbc063e 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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\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 9704bc02..d148cbc0 100644
--- a/po/sr.gmo
+++ b/po/sr.gmo
Binary files differ
diff --git a/po/sr.po b/po/sr.po
index 15657e37..108842cb 100644
--- a/po/sr.po
+++ b/po/sr.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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\n"
"PO-Revision-Date: 2011-12-04 09:59+0200\n"
"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
"Language-Team: Serbian <gnu@prevod.org>\n"
diff --git a/po/sv.gmo b/po/sv.gmo
index 9c03a808..564933af 100644
--- a/po/sv.gmo
+++ b/po/sv.gmo
Binary files differ
diff --git a/po/sv.po b/po/sv.po
index 5af1f713..48ddefc3 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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\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 f832bbf4..0f717cad 100644
--- a/po/tr.gmo
+++ b/po/tr.gmo
Binary files differ
diff --git a/po/tr.po b/po/tr.po
index be4c6f57..36ef7871 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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\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 bd2d3494..27331d06 100644
--- a/po/uk.gmo
+++ b/po/uk.gmo
Binary files differ
diff --git a/po/uk.po b/po/uk.po
index 96eadb33..be744793 100644
--- a/po/uk.po
+++ b/po/uk.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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\n"
"PO-Revision-Date: 2011-04-30 14:00+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 9187d4b3..acf044df 100644
--- a/po/vi.gmo
+++ b/po/vi.gmo
Binary files differ
diff --git a/po/vi.po b/po/vi.po
index 422b4c0d..18025632 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -7,7 +7,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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\n"
"PO-Revision-Date: 2010-03-06 22:09+1030\n"
"Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
"Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
diff --git a/po/zh_CN.gmo b/po/zh_CN.gmo
index 3ebc586d..733b8632 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 c749c850..75ddff9e 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: 2012-10-07 15:46+0100\n"
+"POT-Creation-Date: 2012-10-25 01:37+0100\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/Makefile.am b/sys/Makefile.am
index d79d2232..c638c9de 100644
--- a/sys/Makefile.am
+++ b/sys/Makefile.am
@@ -4,6 +4,12 @@ else
ACM_DIR=
endif
+if USE_ANDROID_MEDIA
+ANDROID_MEDIA_DIR=androidmedia
+else
+ANDROID_MEDIA_DIR=
+endif
+
if USE_APPLE_MEDIA
APPLE_MEDIA_DIR=applemedia
else
@@ -94,6 +100,12 @@ else
SHM_DIR=
endif
+if USE_OPENSLES
+OPENSLES_DIR=opensles
+else
+OPENSLES_DIR=
+endif
+
# if USE_QCAM
# QCAM_DIR=qcam
# else
@@ -136,9 +148,9 @@ else
UVCH264_DIR=
endif
-SUBDIRS = $(ACM_DIR) $(APPLE_MEDIA_DIR) $(AVC_DIR) $(D3DVIDEOSINK_DIR) $(DECKLINK_DIR) $(DIRECTDRAW_DIR) $(DIRECTSOUND_DIR) $(DIRECTSHOW_DIR) $(DVB_DIR) $(FBDEV_DIR) $(LINSYS_DIR) $(OSX_VIDEO_DIR) $(PVR_DIR) $(QT_DIR) $(SHM_DIR) $(UVCH264_DIR) $(VCD_DIR) $(VDPAU_DIR) $(WININET_DIR) $(WINSCREENCAP_DIR)
+SUBDIRS = $(ACM_DIR) $(ANDROID_MEDIA_DIR) $(APPLE_MEDIA_DIR) $(AVC_DIR) $(D3DVIDEOSINK_DIR) $(DECKLINK_DIR) $(DIRECTDRAW_DIR) $(DIRECTSOUND_DIR) $(DIRECTSHOW_DIR) $(DVB_DIR) $(FBDEV_DIR) $(LINSYS_DIR) $(OPENSLES_DIR) $(OSX_VIDEO_DIR) $(PVR_DIR) $(QT_DIR) $(SHM_DIR) $(UVCH264_DIR) $(VCD_DIR) $(VDPAU_DIR) $(WININET_DIR) $(WINSCREENCAP_DIR)
-DIST_SUBDIRS = acmenc acmmp3dec applemedia avc d3dvideosink decklink directdraw directsound dvb linsys fbdev dshowdecwrapper dshowsrcwrapper dshowvideosink \
- osxvideo pvr2d qtwrapper shm uvch264 vcd vdpau wasapi wininet winks winscreencap
+DIST_SUBDIRS = acmenc acmmp3dec androidmedia applemedia avc d3dvideosink decklink directdraw directsound dvb linsys fbdev dshowdecwrapper dshowsrcwrapper dshowvideosink \
+ opensles osxvideo pvr2d qtwrapper shm uvch264 vcd vdpau wasapi wininet winks winscreencap
include $(top_srcdir)/common/parallel-subdirs.mak
diff --git a/sys/Makefile.in b/sys/Makefile.in
index 8490b419..34ae2b9c 100644
--- a/sys/Makefile.in
+++ b/sys/Makefile.in
@@ -228,6 +228,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -588,6 +590,8 @@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
@USE_ACM_FALSE@ACM_DIR =
@USE_ACM_TRUE@ACM_DIR = acmenc acmmp3dec
+@USE_ANDROID_MEDIA_FALSE@ANDROID_MEDIA_DIR =
+@USE_ANDROID_MEDIA_TRUE@ANDROID_MEDIA_DIR = androidmedia
@USE_APPLE_MEDIA_FALSE@APPLE_MEDIA_DIR =
@USE_APPLE_MEDIA_TRUE@APPLE_MEDIA_DIR = applemedia
@USE_AVC_FALSE@AVC_DIR =
@@ -626,6 +630,8 @@ top_srcdir = @top_srcdir@
@USE_PVR_TRUE@PVR_DIR = pvr2d
@USE_SHM_FALSE@SHM_DIR =
@USE_SHM_TRUE@SHM_DIR = shm
+@USE_OPENSLES_FALSE@OPENSLES_DIR =
+@USE_OPENSLES_TRUE@OPENSLES_DIR = opensles
@USE_QUICKTIME_FALSE@QT_DIR =
# if USE_QCAM
@@ -648,9 +654,9 @@ top_srcdir = @top_srcdir@
@USE_DIRECT3D9_TRUE@WINSCREENCAP_DIR = winscreencap
@USE_UVCH264_FALSE@UVCH264_DIR =
@USE_UVCH264_TRUE@UVCH264_DIR = uvch264
-SUBDIRS = $(ACM_DIR) $(APPLE_MEDIA_DIR) $(AVC_DIR) $(D3DVIDEOSINK_DIR) $(DECKLINK_DIR) $(DIRECTDRAW_DIR) $(DIRECTSOUND_DIR) $(DIRECTSHOW_DIR) $(DVB_DIR) $(FBDEV_DIR) $(LINSYS_DIR) $(OSX_VIDEO_DIR) $(PVR_DIR) $(QT_DIR) $(SHM_DIR) $(UVCH264_DIR) $(VCD_DIR) $(VDPAU_DIR) $(WININET_DIR) $(WINSCREENCAP_DIR)
-DIST_SUBDIRS = acmenc acmmp3dec applemedia avc d3dvideosink decklink directdraw directsound dvb linsys fbdev dshowdecwrapper dshowsrcwrapper dshowvideosink \
- osxvideo pvr2d qtwrapper shm uvch264 vcd vdpau wasapi wininet winks winscreencap
+SUBDIRS = $(ACM_DIR) $(ANDROID_MEDIA_DIR) $(APPLE_MEDIA_DIR) $(AVC_DIR) $(D3DVIDEOSINK_DIR) $(DECKLINK_DIR) $(DIRECTDRAW_DIR) $(DIRECTSOUND_DIR) $(DIRECTSHOW_DIR) $(DVB_DIR) $(FBDEV_DIR) $(LINSYS_DIR) $(OPENSLES_DIR) $(OSX_VIDEO_DIR) $(PVR_DIR) $(QT_DIR) $(SHM_DIR) $(UVCH264_DIR) $(VCD_DIR) $(VDPAU_DIR) $(WININET_DIR) $(WINSCREENCAP_DIR)
+DIST_SUBDIRS = acmenc acmmp3dec androidmedia applemedia avc d3dvideosink decklink directdraw directsound dvb linsys fbdev dshowdecwrapper dshowsrcwrapper dshowvideosink \
+ opensles osxvideo pvr2d qtwrapper shm uvch264 vcd vdpau wasapi wininet winks winscreencap
all: all-recursive
diff --git a/sys/acmenc/Makefile.in b/sys/acmenc/Makefile.in
index 5673ff1d..9f48054d 100644
--- a/sys/acmenc/Makefile.in
+++ b/sys/acmenc/Makefile.in
@@ -247,6 +247,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/sys/acmenc/acmenc.c b/sys/acmenc/acmenc.c
index 6e2eabda..86843f54 100644
--- a/sys/acmenc/acmenc.c
+++ b/sys/acmenc/acmenc.c
@@ -494,7 +494,7 @@ acmenc_base_init (ACMEncClass * klass)
&& *shortname) ? shortname : params->name);
description = g_strdup_printf ("ACM Encoder: %s", (longname
&& *longname) ? longname : params->name);
- gst_element_class_set_metadata (element_class, detail,
+ gst_element_class_set_static_metadata (element_class, detail,
"Codec/Encoder/Audio", description,
"Pioneers of the Inevitable <songbird@songbirdnest.com>");
g_free (shortname);
diff --git a/sys/acmmp3dec/Makefile.in b/sys/acmmp3dec/Makefile.in
index 932a3ea0..ea7eb1d8 100644
--- a/sys/acmmp3dec/Makefile.in
+++ b/sys/acmmp3dec/Makefile.in
@@ -247,6 +247,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/sys/acmmp3dec/acmmp3dec.c b/sys/acmmp3dec/acmmp3dec.c
index 3c1b3bcf..83945246 100644
--- a/sys/acmmp3dec/acmmp3dec.c
+++ b/sys/acmmp3dec/acmmp3dec.c
@@ -409,7 +409,7 @@ acmmp3dec_base_init (gpointer klass)
gst_static_pad_template_get (&acmmp3dec_sink_template));
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&acmmp3dec_src_template));
- gst_element_class_set_metadata (element_class, "ACM MP3 decoder",
+ gst_element_class_set_static_metadata (element_class, "ACM MP3 decoder",
"Codec/Decoder/Audio",
"Decode MP3 using ACM decoder",
"Pioneers of the Inevitable <songbird@songbirdnest.com");
diff --git a/sys/androidmedia/Makefile.am b/sys/androidmedia/Makefile.am
new file mode 100644
index 00000000..283488f9
--- /dev/null
+++ b/sys/androidmedia/Makefile.am
@@ -0,0 +1,43 @@
+plugin_LTLIBRARIES = libgstandroidmedia.la
+
+libgstandroidmedia_la_SOURCES = \
+ gstamc.c \
+ gstamcaudiodec.c \
+ gstamcvideodec.c
+
+noinst_HEADERS = \
+ gstamc.h \
+ gstamc-constants.h \
+ gstamcaudiodec.h \
+ gstamcvideodec.h
+
+libgstandroidmedia_la_CFLAGS = \
+ $(GST_PLUGINS_BASE_CFLAGS) \
+ $(GST_BASE_CFLAGS) \
+ $(GST_CFLAGS) \
+ $(ORC_CFLAGS)
+libgstandroidmedia_la_LIBADD = \
+ $(GST_PLUGINS_BASE_LIBS) \
+ -lgstaudio-@GST_API_VERSION@ \
+ -lgstpbutils-@GST_API_VERSION@ \
+ -lgstvideo-@GST_API_VERSION@ \
+ $(GST_BASE_LIBS) \
+ $(GST_LIBS) \
+ $(ORC_LIBS)
+libgstandroidmedia_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstandroidmedia_la_LIBTOOLFLAGS = --tag=disable-static
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+ androgenizer \
+ -:PROJECT libgstandroidmedia -:SHARED libgstandroidmedia \
+ -:TAGS eng debug \
+ -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+ -:SOURCES $(libgstandroidmedia_la_SOURCES) \
+ $(nodist_libgstandroidmedia_la_SOURCES) \
+ -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstandroidmedia_la_CFLAGS) \
+ -:LDFLAGS $(libgstandroidmedia_la_LDFLAGS) \
+ $(libgstandroidmedia_la_LIBADD) \
+ -ldl \
+ -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+ LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-@GST_API_VERSION@' \
+ > $@
diff --git a/sys/androidmedia/Makefile.in b/sys/androidmedia/Makefile.in
new file mode 100644
index 00000000..981f7ea0
--- /dev/null
+++ b/sys/androidmedia/Makefile.in
@@ -0,0 +1,996 @@
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = sys/androidmedia
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+ $(top_srcdir)/common/m4/as-auto-alt.m4 \
+ $(top_srcdir)/common/m4/as-compiler-flag.m4 \
+ $(top_srcdir)/common/m4/as-libtool.m4 \
+ $(top_srcdir)/common/m4/as-python.m4 \
+ $(top_srcdir)/common/m4/as-scrub-include.m4 \
+ $(top_srcdir)/common/m4/as-version.m4 \
+ $(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/gst-arch.m4 \
+ $(top_srcdir)/common/m4/gst-args.m4 \
+ $(top_srcdir)/common/m4/gst-check.m4 \
+ $(top_srcdir)/common/m4/gst-default.m4 \
+ $(top_srcdir)/common/m4/gst-dowhile.m4 \
+ $(top_srcdir)/common/m4/gst-error.m4 \
+ $(top_srcdir)/common/m4/gst-feature.m4 \
+ $(top_srcdir)/common/m4/gst-gettext.m4 \
+ $(top_srcdir)/common/m4/gst-glib2.m4 \
+ $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+ $(top_srcdir)/common/m4/gst-platform.m4 \
+ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+ $(top_srcdir)/common/m4/gst-plugindir.m4 \
+ $(top_srcdir)/common/m4/gst-x11.m4 \
+ $(top_srcdir)/common/m4/gst.m4 \
+ $(top_srcdir)/common/m4/gtk-doc.m4 \
+ $(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(plugindir)"
+LTLIBRARIES = $(plugin_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgstandroidmedia_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+am_libgstandroidmedia_la_OBJECTS = libgstandroidmedia_la-gstamc.lo \
+ libgstandroidmedia_la-gstamcaudiodec.lo \
+ libgstandroidmedia_la-gstamcvideodec.lo
+libgstandroidmedia_la_OBJECTS = $(am_libgstandroidmedia_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+libgstandroidmedia_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) \
+ $(libgstandroidmedia_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+SOURCES = $(libgstandroidmedia_la_SOURCES)
+DIST_SOURCES = $(libgstandroidmedia_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ACMENC_CFLAGS = @ACMENC_CFLAGS@
+ACMMP3DEC_CFLAGS = @ACMMP3DEC_CFLAGS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APEXSINK_CFLAGS = @APEXSINK_CFLAGS@
+APEXSINK_LIBS = @APEXSINK_LIBS@
+AR = @AR@
+AS = @AS@
+ASSRENDER_CFLAGS = @ASSRENDER_CFLAGS@
+ASSRENDER_LIBS = @ASSRENDER_LIBS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BZ2_LIBS = @BZ2_LIBS@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDAUDIO_CFLAGS = @CDAUDIO_CFLAGS@
+CDAUDIO_LIBS = @CDAUDIO_LIBS@
+CELT_0_11_CFLAGS = @CELT_0_11_CFLAGS@
+CELT_0_11_LIBS = @CELT_0_11_LIBS@
+CELT_0_7_CFLAGS = @CELT_0_7_CFLAGS@
+CELT_0_7_LIBS = @CELT_0_7_LIBS@
+CELT_0_8_CFLAGS = @CELT_0_8_CFLAGS@
+CELT_0_8_LIBS = @CELT_0_8_LIBS@
+CELT_CFLAGS = @CELT_CFLAGS@
+CELT_LIBS = @CELT_LIBS@
+CFLAGS = @CFLAGS@
+CHROMAPRINT_CFLAGS = @CHROMAPRINT_CFLAGS@
+CHROMAPRINT_LIBS = @CHROMAPRINT_LIBS@
+COG_CFLAGS = @COG_CFLAGS@
+COG_LIBS = @COG_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CURL_CFLAGS = @CURL_CFLAGS@
+CURL_LIBS = @CURL_LIBS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DCCP_LIBS = @DCCP_LIBS@
+DECKLINK_CXXFLAGS = @DECKLINK_CXXFLAGS@
+DECKLINK_LIBS = @DECKLINK_LIBS@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DIRAC_CFLAGS = @DIRAC_CFLAGS@
+DIRAC_LIBS = @DIRAC_LIBS@
+DIRECT3D9_LIBS = @DIRECT3D9_LIBS@
+DIRECT3D_LIBS = @DIRECT3D_LIBS@
+DIRECTDRAW_LIBS = @DIRECTDRAW_LIBS@
+DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@
+DIRECTFB_LIBS = @DIRECTFB_LIBS@
+DIRECTSHOW_LIBS = @DIRECTSHOW_LIBS@
+DIRECTSOUND_LIBS = @DIRECTSOUND_LIBS@
+DIRECTX_CFLAGS = @DIRECTX_CFLAGS@
+DIRECTX_LDFLAGS = @DIRECTX_LDFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DTS_LIBS = @DTS_LIBS@
+DUMPBIN = @DUMPBIN@
+DVDNAV_CFLAGS = @DVDNAV_CFLAGS@
+DVDNAV_LIBS = @DVDNAV_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+ERROR_OBJCFLAGS = @ERROR_OBJCFLAGS@
+EXEEXT = @EXEEXT@
+EXIF_CFLAGS = @EXIF_CFLAGS@
+EXIF_LIBS = @EXIF_LIBS@
+FAAC_LIBS = @FAAC_LIBS@
+FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
+FAAD_LIBS = @FAAD_LIBS@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FLITE_CFLAGS = @FLITE_CFLAGS@
+FLITE_LIBS = @FLITE_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GME_LIBS = @GME_LIBS@
+GMODULE_EXPORT_CFLAGS = @GMODULE_EXPORT_CFLAGS@
+GMODULE_EXPORT_LIBS = @GMODULE_EXPORT_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GMYTH_CFLAGS = @GMYTH_CFLAGS@
+GMYTH_LIBS = @GMYTH_LIBS@
+GREP = @GREP@
+GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
+GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
+GSETTINGS_LIBS = @GSETTINGS_LIBS@
+GSM_LIBS = @GSM_LIBS@
+GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
+GSTPB_PREFIX = @GSTPB_PREFIX@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_API_VERSION = @GST_API_VERSION@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_OBJCFLAGS = @GST_OBJCFLAGS@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
+GST_PLUGINS_BAD_CXXFLAGS = @GST_PLUGINS_BAD_CXXFLAGS@
+GST_PLUGINS_BAD_OBJCFLAGS = @GST_PLUGINS_BAD_OBJCFLAGS@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
+GST_PLUGINS_BASE_LIBS = @GST_PLUGINS_BASE_LIBS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_FFMPEG_CFLAGS = @GST_PLUGINS_FFMPEG_CFLAGS@
+GST_PLUGINS_FFMPEG_DIR = @GST_PLUGINS_FFMPEG_DIR@
+GST_PLUGINS_FFMPEG_LIBS = @GST_PLUGINS_FFMPEG_LIBS@
+GST_PLUGINS_GOOD_CFLAGS = @GST_PLUGINS_GOOD_CFLAGS@
+GST_PLUGINS_GOOD_DIR = @GST_PLUGINS_GOOD_DIR@
+GST_PLUGINS_GOOD_LIBS = @GST_PLUGINS_GOOD_LIBS@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGINS_UGLY_CFLAGS = @GST_PLUGINS_UGLY_CFLAGS@
+GST_PLUGINS_UGLY_DIR = @GST_PLUGINS_UGLY_DIR@
+GST_PLUGINS_UGLY_LIBS = @GST_PLUGINS_UGLY_LIBS@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
+GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+G_UDEV_CFLAGS = @G_UDEV_CFLAGS@
+G_UDEV_LIBS = @G_UDEV_LIBS@
+HAVE_BZ2 = @HAVE_BZ2@
+HAVE_CXX = @HAVE_CXX@
+HAVE_DIRECT3D = @HAVE_DIRECT3D@
+HAVE_DIRECT3D9 = @HAVE_DIRECT3D9@
+HAVE_DIRECTDRAW = @HAVE_DIRECTDRAW@
+HAVE_DIRECTSHOW = @HAVE_DIRECTSHOW@
+HAVE_DIRECTSOUND = @HAVE_DIRECTSOUND@
+HAVE_DTS = @HAVE_DTS@
+HAVE_FAAC = @HAVE_FAAC@
+HAVE_FAAD = @HAVE_FAAD@
+HAVE_FLITE = @HAVE_FLITE@
+HAVE_GSM = @HAVE_GSM@
+HAVE_JASPER = @HAVE_JASPER@
+HAVE_NAS = @HAVE_NAS@
+HAVE_WILDMIDI = @HAVE_WILDMIDI@
+HAVE_X = @HAVE_X@
+HAVE_X11 = @HAVE_X11@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+JASPER_LIBS = @JASPER_LIBS@
+KATE_CFLAGS = @KATE_CFLAGS@
+KATE_LIBS = @KATE_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBDC1394_CFLAGS = @LIBDC1394_CFLAGS@
+LIBDC1394_LIBS = @LIBDC1394_LIBS@
+LIBDIR = @LIBDIR@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBMMS_CFLAGS = @LIBMMS_CFLAGS@
+LIBMMS_LIBS = @LIBMMS_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBUDEV_CFLAGS = @LIBUDEV_CFLAGS@
+LIBUDEV_LIBS = @LIBUDEV_LIBS@
+LIBUSB_CFLAGS = @LIBUSB_CFLAGS@
+LIBUSB_LIBS = @LIBUSB_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LRDF_CFLAGS = @LRDF_CFLAGS@
+LRDF_LIBS = @LRDF_LIBS@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MIMIC_CFLAGS = @MIMIC_CFLAGS@
+MIMIC_LIBS = @MIMIC_LIBS@
+MJPEG_CFLAGS = @MJPEG_CFLAGS@
+MJPEG_LIBS = @MJPEG_LIBS@
+MKDIR_P = @MKDIR_P@
+MODPLUG_CFLAGS = @MODPLUG_CFLAGS@
+MODPLUG_LIBS = @MODPLUG_LIBS@
+MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
+MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
+MPG123_CFLAGS = @MPG123_CFLAGS@
+MPG123_LIBS = @MPG123_LIBS@
+MPLEX_CFLAGS = @MPLEX_CFLAGS@
+MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
+MPLEX_LIBS = @MPLEX_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+MUSEPACK_LIBS = @MUSEPACK_LIBS@
+MUSICBRAINZ_CFLAGS = @MUSICBRAINZ_CFLAGS@
+MUSICBRAINZ_LIBS = @MUSICBRAINZ_LIBS@
+NAS_CFLAGS = @NAS_CFLAGS@
+NAS_LIBS = @NAS_LIBS@
+NEON_CFLAGS = @NEON_CFLAGS@
+NEON_LIBS = @NEON_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJC = @OBJC@
+OBJCDEPMODE = @OBJCDEPMODE@
+OBJCFLAGS = @OBJCFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OFA_CFLAGS = @OFA_CFLAGS@
+OFA_LIBS = @OFA_LIBS@
+OPENAL_CFLAGS = @OPENAL_CFLAGS@
+OPENAL_LIBS = @OPENAL_LIBS@
+OPENCV_CFLAGS = @OPENCV_CFLAGS@
+OPENCV_LIBS = @OPENCV_LIBS@
+OPENCV_PREFIX = @OPENCV_PREFIX@
+OPUS_CFLAGS = @OPUS_CFLAGS@
+OPUS_LIBS = @OPUS_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PVR_CFLAGS = @PVR_CFLAGS@
+PVR_LIBS = @PVR_LIBS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+RSVG_2_35_0_CFLAGS = @RSVG_2_35_0_CFLAGS@
+RSVG_2_35_0_LIBS = @RSVG_2_35_0_LIBS@
+RSVG_CFLAGS = @RSVG_CFLAGS@
+RSVG_LIBS = @RSVG_LIBS@
+RTMP_CFLAGS = @RTMP_CFLAGS@
+RTMP_LIBS = @RTMP_LIBS@
+SCHRO_CFLAGS = @SCHRO_CFLAGS@
+SCHRO_LIBS = @SCHRO_LIBS@
+SDL_CFLAGS = @SDL_CFLAGS@
+SDL_CONFIG = @SDL_CONFIG@
+SDL_LIBS = @SDL_LIBS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLV2_CFLAGS = @SLV2_CFLAGS@
+SLV2_LIBS = @SLV2_LIBS@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+SNDIO_LIBS = @SNDIO_LIBS@
+SOUNDTOUCH_CFLAGS = @SOUNDTOUCH_CFLAGS@
+SOUNDTOUCH_LIBS = @SOUNDTOUCH_LIBS@
+SPANDSP_CFLAGS = @SPANDSP_CFLAGS@
+SPANDSP_LIBS = @SPANDSP_LIBS@
+SPC_LIBS = @SPC_LIBS@
+STRIP = @STRIP@
+SWFDEC_CFLAGS = @SWFDEC_CFLAGS@
+SWFDEC_LIBS = @SWFDEC_LIBS@
+TELETEXTDEC_CFLAGS = @TELETEXTDEC_CFLAGS@
+TELETEXTDEC_LIBS = @TELETEXTDEC_LIBS@
+TIGER_CFLAGS = @TIGER_CFLAGS@
+TIGER_LIBS = @TIGER_LIBS@
+TIMIDITY_CFLAGS = @TIMIDITY_CFLAGS@
+TIMIDITY_LIBS = @TIMIDITY_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VDPAU_CFLAGS = @VDPAU_CFLAGS@
+VDPAU_LIBS = @VDPAU_LIBS@
+VERSION = @VERSION@
+VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
+VOAACENC_LIBS = @VOAACENC_LIBS@
+VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
+VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
+WAYLAND_CFLAGS = @WAYLAND_CFLAGS@
+WAYLAND_LIBS = @WAYLAND_LIBS@
+WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
+WILDMIDI_LIBS = @WILDMIDI_LIBS@
+WINSOCK2_LIBS = @WINSOCK2_LIBS@
+X11_CFLAGS = @X11_CFLAGS@
+X11_LIBS = @X11_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XVID_LIBS = @XVID_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZBAR_CFLAGS = @ZBAR_CFLAGS@
+ZBAR_LIBS = @ZBAR_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_OBJC = @ac_ct_OBJC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+gsettingsschemadir = @gsettingsschemadir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+plugin_LTLIBRARIES = libgstandroidmedia.la
+libgstandroidmedia_la_SOURCES = \
+ gstamc.c \
+ gstamcaudiodec.c \
+ gstamcvideodec.c
+
+noinst_HEADERS = \
+ gstamc.h \
+ gstamc-constants.h \
+ gstamcaudiodec.h \
+ gstamcvideodec.h
+
+libgstandroidmedia_la_CFLAGS = \
+ $(GST_PLUGINS_BASE_CFLAGS) \
+ $(GST_BASE_CFLAGS) \
+ $(GST_CFLAGS) \
+ $(ORC_CFLAGS)
+
+libgstandroidmedia_la_LIBADD = \
+ $(GST_PLUGINS_BASE_LIBS) \
+ -lgstaudio-@GST_API_VERSION@ \
+ -lgstpbutils-@GST_API_VERSION@ \
+ -lgstvideo-@GST_API_VERSION@ \
+ $(GST_BASE_LIBS) \
+ $(GST_LIBS) \
+ $(ORC_LIBS)
+
+libgstandroidmedia_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstandroidmedia_la_LIBTOOLFLAGS = --tag=disable-static
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu sys/androidmedia/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu sys/androidmedia/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ @list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+ list2=; for p in $$list; do \
+ if test -f $$p; then \
+ list2="$$list2 $$p"; \
+ else :; fi; \
+ done; \
+ test -z "$$list2" || { \
+ echo " $(MKDIR_P) '$(DESTDIR)$(plugindir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(plugindir)" || exit 1; \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \
+ }
+
+uninstall-pluginLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \
+ done
+
+clean-pluginLTLIBRARIES:
+ -test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES)
+ @list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libgstandroidmedia.la: $(libgstandroidmedia_la_OBJECTS) $(libgstandroidmedia_la_DEPENDENCIES) $(EXTRA_libgstandroidmedia_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libgstandroidmedia_la_LINK) -rpath $(plugindir) $(libgstandroidmedia_la_OBJECTS) $(libgstandroidmedia_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstandroidmedia_la-gstamc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstandroidmedia_la-gstamcaudiodec.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstandroidmedia_la-gstamcvideodec.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+libgstandroidmedia_la-gstamc.lo: gstamc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -MT libgstandroidmedia_la-gstamc.lo -MD -MP -MF $(DEPDIR)/libgstandroidmedia_la-gstamc.Tpo -c -o libgstandroidmedia_la-gstamc.lo `test -f 'gstamc.c' || echo '$(srcdir)/'`gstamc.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstandroidmedia_la-gstamc.Tpo $(DEPDIR)/libgstandroidmedia_la-gstamc.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstamc.c' object='libgstandroidmedia_la-gstamc.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 $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -c -o libgstandroidmedia_la-gstamc.lo `test -f 'gstamc.c' || echo '$(srcdir)/'`gstamc.c
+
+libgstandroidmedia_la-gstamcaudiodec.lo: gstamcaudiodec.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -MT libgstandroidmedia_la-gstamcaudiodec.lo -MD -MP -MF $(DEPDIR)/libgstandroidmedia_la-gstamcaudiodec.Tpo -c -o libgstandroidmedia_la-gstamcaudiodec.lo `test -f 'gstamcaudiodec.c' || echo '$(srcdir)/'`gstamcaudiodec.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstandroidmedia_la-gstamcaudiodec.Tpo $(DEPDIR)/libgstandroidmedia_la-gstamcaudiodec.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstamcaudiodec.c' object='libgstandroidmedia_la-gstamcaudiodec.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 $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -c -o libgstandroidmedia_la-gstamcaudiodec.lo `test -f 'gstamcaudiodec.c' || echo '$(srcdir)/'`gstamcaudiodec.c
+
+libgstandroidmedia_la-gstamcvideodec.lo: gstamcvideodec.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -MT libgstandroidmedia_la-gstamcvideodec.lo -MD -MP -MF $(DEPDIR)/libgstandroidmedia_la-gstamcvideodec.Tpo -c -o libgstandroidmedia_la-gstamcvideodec.lo `test -f 'gstamcvideodec.c' || echo '$(srcdir)/'`gstamcvideodec.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstandroidmedia_la-gstamcvideodec.Tpo $(DEPDIR)/libgstandroidmedia_la-gstamcvideodec.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstamcvideodec.c' object='libgstandroidmedia_la-gstamcvideodec.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 $(libgstandroidmedia_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstandroidmedia_la_CFLAGS) $(CFLAGS) -c -o libgstandroidmedia_la-gstamcvideodec.lo `test -f 'gstamcvideodec.c' || echo '$(srcdir)/'`gstamcvideodec.c
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+ for dir in "$(DESTDIR)$(plugindir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pluginLTLIBRARIES
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pluginLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-pluginLTLIBRARIES ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-pluginLTLIBRARIES \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am uninstall-pluginLTLIBRARIES
+
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+ androgenizer \
+ -:PROJECT libgstandroidmedia -:SHARED libgstandroidmedia \
+ -:TAGS eng debug \
+ -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+ -:SOURCES $(libgstandroidmedia_la_SOURCES) \
+ $(nodist_libgstandroidmedia_la_SOURCES) \
+ -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstandroidmedia_la_CFLAGS) \
+ -:LDFLAGS $(libgstandroidmedia_la_LDFLAGS) \
+ $(libgstandroidmedia_la_LIBADD) \
+ -ldl \
+ -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+ LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-@GST_API_VERSION@' \
+ > $@
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/sys/androidmedia/gstamc-constants.h b/sys/androidmedia/gstamc-constants.h
new file mode 100644
index 00000000..ea6288c5
--- /dev/null
+++ b/sys/androidmedia/gstamc-constants.h
@@ -0,0 +1,227 @@
+/*
+ * Copyright (C) 2012, Collabora Ltd.
+ * Author: Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation
+ * version 2.1 of the License.
+ *
+ * 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+
+#ifndef __GST_AMC_CONSTANTS_H__
+#define __GST_AMC_CONSTANTS_H__
+
+/* FIXME: We might need to get these values from Java if there's
+ * ever a device or Android version that changes these values
+ */
+
+/* Copies from MediaCodec.java */
+
+enum
+{
+ BUFFER_FLAG_SYNC_FRAME = 1,
+ BUFFER_FLAG_CODEC_CONFIG = 2,
+ BUFFER_FLAG_END_OF_STREAM = 4
+};
+
+enum
+{
+ CONFIGURE_FLAG_ENCODE = 1
+};
+
+enum
+{
+ INFO_TRY_AGAIN_LATER = -1,
+ INFO_OUTPUT_FORMAT_CHANGED = -2,
+ INFO_OUTPUT_BUFFERS_CHANGED = -3
+};
+
+/* Copies from MediaCodecInfo.java */
+enum
+{
+ COLOR_FormatMonochrome = 1,
+ COLOR_Format8bitRGB332 = 2,
+ COLOR_Format12bitRGB444 = 3,
+ COLOR_Format16bitARGB4444 = 4,
+ COLOR_Format16bitARGB1555 = 5,
+ COLOR_Format16bitRGB565 = 6,
+ COLOR_Format16bitBGR565 = 7,
+ COLOR_Format18bitRGB666 = 8,
+ COLOR_Format18bitARGB1665 = 9,
+ COLOR_Format19bitARGB1666 = 10,
+ COLOR_Format24bitRGB888 = 11,
+ COLOR_Format24bitBGR888 = 12,
+ COLOR_Format24bitARGB1887 = 13,
+ COLOR_Format25bitARGB1888 = 14,
+ COLOR_Format32bitBGRA8888 = 15,
+ COLOR_Format32bitARGB8888 = 16,
+ COLOR_FormatYUV411Planar = 17,
+ COLOR_FormatYUV411PackedPlanar = 18,
+ COLOR_FormatYUV420Planar = 19,
+ COLOR_FormatYUV420PackedPlanar = 20,
+ COLOR_FormatYUV420SemiPlanar = 21,
+ COLOR_FormatYUV422Planar = 22,
+ COLOR_FormatYUV422PackedPlanar = 23,
+ COLOR_FormatYUV422SemiPlanar = 24,
+ COLOR_FormatYCbYCr = 25,
+ COLOR_FormatYCrYCb = 26,
+ COLOR_FormatCbYCrY = 27,
+ COLOR_FormatCrYCbY = 28,
+ COLOR_FormatYUV444Interleaved = 29,
+ COLOR_FormatRawBayer8bit = 30,
+ COLOR_FormatRawBayer10bit = 31,
+ COLOR_FormatRawBayer8bitcompressed = 32,
+ COLOR_FormatL2 = 33,
+ COLOR_FormatL4 = 34,
+ COLOR_FormatL8 = 35,
+ COLOR_FormatL16 = 36,
+ COLOR_FormatL24 = 37,
+ COLOR_FormatL32 = 38,
+ COLOR_FormatYUV420PackedSemiPlanar = 39,
+ COLOR_FormatYUV422PackedSemiPlanar = 40,
+ COLOR_Format18BitBGR666 = 41,
+ COLOR_Format24BitARGB6666 = 42,
+ COLOR_Format24BitABGR6666 = 43,
+ COLOR_FormatAndroidOpaque = 0x7F000789,
+ COLOR_TI_FormatYUV420PackedSemiPlanar = 0x7f000100,
+ COLOR_QCOM_FormatYUV420SemiPlanar = 0x7fa30c00,
+ /* From hardware/ti/omap4xxx/domx/omx_core/inc/OMX_TI_IVCommon.h */
+ COLOR_TI_FormatYUV420PackedSemiPlanarInterlaced = 0x7f000001
+};
+
+enum
+{
+ AVCProfileBaseline = 0x01,
+ AVCProfileMain = 0x02,
+ AVCProfileExtended = 0x04,
+ AVCProfileHigh = 0x08,
+ AVCProfileHigh10 = 0x10,
+ AVCProfileHigh422 = 0x20,
+ AVCProfileHigh444 = 0x40
+};
+
+enum
+{
+ AVCLevel1 = 0x01,
+ AVCLevel1b = 0x02,
+ AVCLevel11 = 0x04,
+ AVCLevel12 = 0x08,
+ AVCLevel13 = 0x10,
+ AVCLevel2 = 0x20,
+ AVCLevel21 = 0x40,
+ AVCLevel22 = 0x80,
+ AVCLevel3 = 0x100,
+ AVCLevel31 = 0x200,
+ AVCLevel32 = 0x400,
+ AVCLevel4 = 0x800,
+ AVCLevel41 = 0x1000,
+ AVCLevel42 = 0x2000,
+ AVCLevel5 = 0x4000,
+ AVCLevel51 = 0x8000
+};
+
+enum
+{
+ H263ProfileBaseline = 0x01,
+ H263ProfileH320Coding = 0x02,
+ H263ProfileBackwardCompatible = 0x04,
+ H263ProfileISWV2 = 0x08,
+ H263ProfileISWV3 = 0x10,
+ H263ProfileHighCompression = 0x20,
+ H263ProfileInternet = 0x40,
+ H263ProfileInterlace = 0x80,
+ H263ProfileHighLatency = 0x100
+};
+
+enum
+{
+ H263Level10 = 0x01,
+ H263Level20 = 0x02,
+ H263Level30 = 0x04,
+ H263Level40 = 0x08,
+ H263Level45 = 0x10,
+ H263Level50 = 0x20,
+ H263Level60 = 0x40,
+ H263Level70 = 0x80
+};
+
+enum
+{
+ MPEG4ProfileSimple = 0x01,
+ MPEG4ProfileSimpleScalable = 0x02,
+ MPEG4ProfileCore = 0x04,
+ MPEG4ProfileMain = 0x08,
+ MPEG4ProfileNbit = 0x10,
+ MPEG4ProfileScalableTexture = 0x20,
+ MPEG4ProfileSimpleFace = 0x40,
+ MPEG4ProfileSimpleFBA = 0x80,
+ MPEG4ProfileBasicAnimated = 0x100,
+ MPEG4ProfileHybrid = 0x200,
+ MPEG4ProfileAdvancedRealTime = 0x400,
+ MPEG4ProfileCoreScalable = 0x800,
+ MPEG4ProfileAdvancedCoding = 0x1000,
+ MPEG4ProfileAdvancedCore = 0x2000,
+ MPEG4ProfileAdvancedScalable = 0x4000,
+ MPEG4ProfileAdvancedSimple = 0x8000
+};
+
+enum
+{
+ MPEG4Level0 = 0x01,
+ MPEG4Level0b = 0x02,
+ MPEG4Level1 = 0x04,
+ MPEG4Level2 = 0x08,
+ MPEG4Level3 = 0x10,
+ MPEG4Level4 = 0x20,
+ MPEG4Level4a = 0x40,
+ MPEG4Level5 = 0x80
+};
+
+enum
+{
+ AACObjectMain = 1,
+ AACObjectLC = 2,
+ AACObjectSSR = 3,
+ AACObjectLTP = 4,
+ AACObjectHE = 5,
+ AACObjectScalable = 6,
+ AACObjectERLC = 17,
+ AACObjectLD = 23,
+ AACObjectHE_PS = 29,
+ AACObjectELD = 39
+};
+
+/* Copies from AudioFormat.java */
+enum
+{
+ CHANNEL_OUT_FRONT_LEFT = 0x4,
+ CHANNEL_OUT_FRONT_RIGHT = 0x8,
+ CHANNEL_OUT_FRONT_CENTER = 0x10,
+ CHANNEL_OUT_LOW_FREQUENCY = 0x20,
+ CHANNEL_OUT_BACK_LEFT = 0x40,
+ CHANNEL_OUT_BACK_RIGHT = 0x80,
+ CHANNEL_OUT_FRONT_LEFT_OF_CENTER = 0x100,
+ CHANNEL_OUT_FRONT_RIGHT_OF_CENTER = 0x200,
+ CHANNEL_OUT_BACK_CENTER = 0x400,
+ CHANNEL_OUT_SIDE_LEFT = 0x800,
+ CHANNEL_OUT_SIDE_RIGHT = 0x1000,
+ CHANNEL_OUT_TOP_CENTER = 0x2000,
+ CHANNEL_OUT_TOP_FRONT_LEFT = 0x4000,
+ CHANNEL_OUT_TOP_FRONT_CENTER = 0x8000,
+ CHANNEL_OUT_TOP_FRONT_RIGHT = 0x10000,
+ CHANNEL_OUT_TOP_BACK_LEFT = 0x20000,
+ CHANNEL_OUT_TOP_BACK_CENTER = 0x40000,
+ CHANNEL_OUT_TOP_BACK_RIGHT = 0x80000
+};
+
+#endif
diff --git a/sys/androidmedia/gstamc.c b/sys/androidmedia/gstamc.c
new file mode 100644
index 00000000..205b8502
--- /dev/null
+++ b/sys/androidmedia/gstamc.c
@@ -0,0 +1,2830 @@
+/*
+ * Copyright (C) 2012, Collabora Ltd.
+ * Author: Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation
+ * version 2.1 of the License.
+ *
+ * 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstamc.h"
+#include "gstamc-constants.h"
+
+#include "gstamcvideodec.h"
+#include "gstamcaudiodec.h"
+
+#include <gst/gst.h>
+#include <gst/video/video.h>
+#include <gst/audio/audio.h>
+#include <string.h>
+#include <jni.h>
+
+#include <pthread.h>
+
+GST_DEBUG_CATEGORY (gst_amc_debug);
+#define GST_CAT_DEFAULT gst_amc_debug
+
+GQuark gst_amc_codec_info_quark = 0;
+
+static GList *codec_infos = NULL;
+#ifdef GST_AMC_IGNORE_UNKNOWN_COLOR_FORMATS
+static gboolean ignore_unknown_color_formats = TRUE;
+#else
+static gboolean ignore_unknown_color_formats = FALSE;
+#endif
+
+static GModule *java_module;
+static jint (*get_created_java_vms) (JavaVM ** vmBuf, jsize bufLen,
+ jsize * nVMs);
+static jint (*create_java_vm) (JavaVM ** p_vm, JNIEnv ** p_env, void *vm_args);
+static JavaVM *java_vm;
+static gboolean started_java_vm = FALSE;
+
+static gboolean accepted_color_formats (GstAmcCodecType * type,
+ gboolean is_encoder);
+
+/* Global cached references */
+static struct
+{
+ jclass klass;
+ jmethodID constructor;
+} java_string;
+static struct
+{
+ jclass klass;
+ jmethodID configure;
+ jmethodID create_by_codec_name;
+ jmethodID dequeue_input_buffer;
+ jmethodID dequeue_output_buffer;
+ jmethodID flush;
+ jmethodID get_input_buffers;
+ jmethodID get_output_buffers;
+ jmethodID get_output_format;
+ jmethodID queue_input_buffer;
+ jmethodID release;
+ jmethodID release_output_buffer;
+ jmethodID start;
+ jmethodID stop;
+} media_codec;
+static struct
+{
+ jclass klass;
+ jmethodID constructor;
+ jfieldID flags;
+ jfieldID offset;
+ jfieldID presentation_time_us;
+ jfieldID size;
+} media_codec_buffer_info;
+static struct
+{
+ jclass klass;
+ jmethodID create_audio_format;
+ jmethodID create_video_format;
+ jmethodID to_string;
+ jmethodID contains_key;
+ jmethodID get_float;
+ jmethodID set_float;
+ jmethodID get_integer;
+ jmethodID set_integer;
+ jmethodID get_string;
+ jmethodID set_string;
+ jmethodID get_byte_buffer;
+ jmethodID set_byte_buffer;
+} media_format;
+
+static pthread_key_t current_jni_env;
+
+static JNIEnv *
+gst_amc_attach_current_thread (void)
+{
+ JNIEnv *env;
+ JavaVMAttachArgs args;
+
+ GST_DEBUG ("Attaching thread %p", g_thread_self ());
+ args.version = JNI_VERSION_1_6;
+ args.name = NULL;
+ args.group = NULL;
+
+ if ((*java_vm)->AttachCurrentThread (java_vm, &env, &args) < 0) {
+ GST_ERROR ("Failed to attach current thread");
+ return NULL;
+ }
+
+ return env;
+}
+
+static void
+gst_amc_detach_current_thread (void *env)
+{
+ GST_DEBUG ("Detaching thread %p", g_thread_self ());
+ (*java_vm)->DetachCurrentThread (java_vm);
+}
+
+static JNIEnv *
+gst_amc_get_jni_env (void)
+{
+ JNIEnv *env;
+
+ if ((env = pthread_getspecific (current_jni_env)) == NULL) {
+ env = gst_amc_attach_current_thread ();
+ pthread_setspecific (current_jni_env, env);
+ }
+
+ return env;
+}
+
+static gboolean
+initialize_java_vm (void)
+{
+ jsize n_vms;
+
+ java_module = g_module_open ("libdvm", G_MODULE_BIND_LOCAL);
+ if (!java_module)
+ goto load_failed;
+
+ if (!g_module_symbol (java_module, "JNI_CreateJavaVM",
+ (gpointer *) & create_java_vm))
+ goto symbol_error;
+
+ if (!g_module_symbol (java_module, "JNI_GetCreatedJavaVMs",
+ (gpointer *) & get_created_java_vms))
+ goto symbol_error;
+
+ n_vms = 0;
+ if (get_created_java_vms (&java_vm, 1, &n_vms) < 0)
+ goto get_created_failed;
+
+ if (n_vms > 0) {
+ GST_DEBUG ("Successfully got existing Java VM %p", java_vm);
+ } else {
+ JNIEnv *env;
+ JavaVMInitArgs vm_args;
+ JavaVMOption options[4];
+
+ options[0].optionString = "-verbose:jni";
+ options[1].optionString = "-verbose:gc";
+ options[2].optionString = "-Xcheck:jni";
+ options[3].optionString = "-Xdebug";
+
+ vm_args.version = JNI_VERSION_1_4;
+ vm_args.options = options;
+ vm_args.nOptions = 4;
+ vm_args.ignoreUnrecognized = JNI_TRUE;
+ if (create_java_vm (&java_vm, &env, &vm_args) < 0)
+ goto create_failed;
+ GST_DEBUG ("Successfully created Java VM %p", java_vm);
+
+ started_java_vm = TRUE;
+ }
+
+ return java_vm != NULL;
+
+load_failed:
+ {
+ GST_ERROR ("Failed to load libdvm: %s", g_module_error ());
+ return FALSE;
+ }
+symbol_error:
+ {
+ GST_ERROR ("Failed to locate required JNI symbols in libdvm: %s",
+ g_module_error ());
+ g_module_close (java_module);
+ java_module = NULL;
+ return FALSE;
+ }
+get_created_failed:
+ {
+ GST_ERROR ("Failed to get already created VMs");
+ g_module_close (java_module);
+ java_module = NULL;
+ return FALSE;
+ }
+create_failed:
+ {
+ GST_ERROR ("Failed to create a Java VM");
+ g_module_close (java_module);
+ java_module = NULL;
+ return FALSE;
+ }
+}
+
+GstAmcCodec *
+gst_amc_codec_new (const gchar * name)
+{
+ JNIEnv *env;
+ GstAmcCodec *codec = NULL;
+ jstring name_str;
+ jobject object = NULL;
+
+ g_return_val_if_fail (name != NULL, NULL);
+
+ env = gst_amc_get_jni_env ();
+
+ name_str = (*env)->NewStringUTF (env, name);
+ if (name_str == NULL)
+ goto error;
+
+ codec = g_slice_new0 (GstAmcCodec);
+
+ object =
+ (*env)->CallStaticObjectMethod (env, media_codec.klass,
+ media_codec.create_by_codec_name, name_str);
+ if ((*env)->ExceptionCheck (env) || !object) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to create codec '%s'", name);
+ goto error;
+ }
+
+ codec->object = (*env)->NewGlobalRef (env, object);
+ if (!codec->object) {
+ GST_ERROR ("Failed to create global reference");
+ (*env)->ExceptionClear (env);
+ goto error;
+ }
+
+done:
+ if (object)
+ (*env)->DeleteLocalRef (env, object);
+ if (name_str)
+ (*env)->DeleteLocalRef (env, name_str);
+ name_str = NULL;
+
+ return codec;
+
+error:
+ if (codec)
+ g_slice_free (GstAmcCodec, codec);
+ codec = NULL;
+ goto done;
+}
+
+void
+gst_amc_codec_free (GstAmcCodec * codec)
+{
+ JNIEnv *env;
+
+ g_return_if_fail (codec != NULL);
+
+ env = gst_amc_get_jni_env ();
+ (*env)->DeleteGlobalRef (env, codec->object);
+ g_slice_free (GstAmcCodec, codec);
+}
+
+gboolean
+gst_amc_codec_configure (GstAmcCodec * codec, GstAmcFormat * format, gint flags)
+{
+ JNIEnv *env;
+ gboolean ret = TRUE;
+
+ g_return_val_if_fail (codec != NULL, FALSE);
+ g_return_val_if_fail (format != NULL, FALSE);
+
+ env = gst_amc_get_jni_env ();
+
+ (*env)->CallVoidMethod (env, codec->object, media_codec.configure,
+ format->object, NULL, NULL, flags);
+ if ((*env)->ExceptionCheck (env)) {
+ GST_ERROR ("Failed to call Java method");
+ (*env)->ExceptionClear (env);
+ ret = FALSE;
+ goto done;
+ }
+
+done:
+
+ return ret;
+}
+
+GstAmcFormat *
+gst_amc_codec_get_output_format (GstAmcCodec * codec)
+{
+ JNIEnv *env;
+ GstAmcFormat *ret = NULL;
+ jobject object = NULL;
+
+ g_return_val_if_fail (codec != NULL, NULL);
+
+ env = gst_amc_get_jni_env ();
+
+ object =
+ (*env)->CallObjectMethod (env, codec->object,
+ media_codec.get_output_format);
+ if ((*env)->ExceptionCheck (env)) {
+ GST_ERROR ("Failed to call Java method");
+ (*env)->ExceptionClear (env);
+ goto done;
+ }
+
+ ret = g_slice_new0 (GstAmcFormat);
+
+ ret->object = (*env)->NewGlobalRef (env, object);
+ if (!ret->object) {
+ GST_ERROR ("Failed to create global reference");
+ (*env)->ExceptionClear (env);
+ g_slice_free (GstAmcFormat, ret);
+ ret = NULL;
+ }
+
+ (*env)->DeleteLocalRef (env, object);
+
+done:
+
+ return ret;
+}
+
+gboolean
+gst_amc_codec_start (GstAmcCodec * codec)
+{
+ JNIEnv *env;
+ gboolean ret = TRUE;
+
+ g_return_val_if_fail (codec != NULL, FALSE);
+
+ env = gst_amc_get_jni_env ();
+
+ (*env)->CallVoidMethod (env, codec->object, media_codec.start);
+ if ((*env)->ExceptionCheck (env)) {
+ GST_ERROR ("Failed to call Java method");
+ (*env)->ExceptionClear (env);
+ ret = FALSE;
+ goto done;
+ }
+
+done:
+
+ return ret;
+}
+
+gboolean
+gst_amc_codec_stop (GstAmcCodec * codec)
+{
+ JNIEnv *env;
+ gboolean ret = TRUE;
+
+ g_return_val_if_fail (codec != NULL, FALSE);
+
+ env = gst_amc_get_jni_env ();
+
+ (*env)->CallVoidMethod (env, codec->object, media_codec.stop);
+ if ((*env)->ExceptionCheck (env)) {
+ GST_ERROR ("Failed to call Java method");
+ (*env)->ExceptionClear (env);
+ ret = FALSE;
+ goto done;
+ }
+
+done:
+
+ return ret;
+}
+
+gboolean
+gst_amc_codec_flush (GstAmcCodec * codec)
+{
+ JNIEnv *env;
+ gboolean ret = TRUE;
+
+ g_return_val_if_fail (codec != NULL, FALSE);
+
+ env = gst_amc_get_jni_env ();
+
+ (*env)->CallVoidMethod (env, codec->object, media_codec.flush);
+ if ((*env)->ExceptionCheck (env)) {
+ GST_ERROR ("Failed to call Java method");
+ (*env)->ExceptionClear (env);
+ ret = FALSE;
+ goto done;
+ }
+
+done:
+
+ return ret;
+}
+
+gboolean
+gst_amc_codec_release (GstAmcCodec * codec)
+{
+ JNIEnv *env;
+ gboolean ret = TRUE;
+
+ g_return_val_if_fail (codec != NULL, FALSE);
+
+ env = gst_amc_get_jni_env ();
+
+ (*env)->CallVoidMethod (env, codec->object, media_codec.release);
+ if ((*env)->ExceptionCheck (env)) {
+ GST_ERROR ("Failed to call Java method");
+ (*env)->ExceptionClear (env);
+ ret = FALSE;
+ goto done;
+ }
+
+done:
+
+ return ret;
+}
+
+void
+gst_amc_codec_free_buffers (GstAmcBuffer * buffers, gsize n_buffers)
+{
+ JNIEnv *env;
+ jsize i;
+
+ g_return_if_fail (buffers != NULL);
+
+ env = gst_amc_get_jni_env ();
+
+ for (i = 0; i < n_buffers; i++) {
+ if (buffers[i].object)
+ (*env)->DeleteGlobalRef (env, buffers[i].object);
+ }
+ g_free (buffers);
+}
+
+GstAmcBuffer *
+gst_amc_codec_get_output_buffers (GstAmcCodec * codec, gsize * n_buffers)
+{
+ JNIEnv *env;
+ jobject output_buffers = NULL;
+ jsize n_output_buffers;
+ GstAmcBuffer *ret = NULL;
+ jsize i;
+
+ g_return_val_if_fail (codec != NULL, NULL);
+ g_return_val_if_fail (n_buffers != NULL, NULL);
+
+ *n_buffers = 0;
+ env = gst_amc_get_jni_env ();
+
+ output_buffers =
+ (*env)->CallObjectMethod (env, codec->object,
+ media_codec.get_output_buffers);
+ if ((*env)->ExceptionCheck (env) || !output_buffers) {
+ GST_ERROR ("Failed to call Java method");
+ (*env)->ExceptionClear (env);
+ goto done;
+ }
+
+ n_output_buffers = (*env)->GetArrayLength (env, output_buffers);
+ if ((*env)->ExceptionCheck (env)) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get output buffers array length");
+ goto done;
+ }
+
+ *n_buffers = n_output_buffers;
+ ret = g_new0 (GstAmcBuffer, n_output_buffers);
+
+ for (i = 0; i < n_output_buffers; i++) {
+ jobject buffer = NULL;
+
+ buffer = (*env)->GetObjectArrayElement (env, output_buffers, i);
+ if ((*env)->ExceptionCheck (env) || !buffer) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get output buffer %d", i);
+ goto error;
+ }
+
+ ret[i].object = (*env)->NewGlobalRef (env, buffer);
+ (*env)->DeleteLocalRef (env, buffer);
+ if (!ret[i].object) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to create global reference %d", i);
+ goto error;
+ }
+
+ ret[i].data = (*env)->GetDirectBufferAddress (env, ret[i].object);
+ if (!ret[i].data) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get buffer address %d", i);
+ goto error;
+ }
+ ret[i].size = (*env)->GetDirectBufferCapacity (env, ret[i].object);
+ }
+
+done:
+ if (output_buffers)
+ (*env)->DeleteLocalRef (env, output_buffers);
+ output_buffers = NULL;
+
+ return ret;
+error:
+ if (ret)
+ gst_amc_codec_free_buffers (ret, n_output_buffers);
+ ret = NULL;
+ *n_buffers = 0;
+ goto done;
+}
+
+GstAmcBuffer *
+gst_amc_codec_get_input_buffers (GstAmcCodec * codec, gsize * n_buffers)
+{
+ JNIEnv *env;
+ jobject input_buffers = NULL;
+ jsize n_input_buffers;
+ GstAmcBuffer *ret = NULL;
+ jsize i;
+
+ g_return_val_if_fail (codec != NULL, NULL);
+ g_return_val_if_fail (n_buffers != NULL, NULL);
+
+ *n_buffers = 0;
+ env = gst_amc_get_jni_env ();
+
+ input_buffers =
+ (*env)->CallObjectMethod (env, codec->object,
+ media_codec.get_input_buffers);
+ if ((*env)->ExceptionCheck (env) || !input_buffers) {
+ GST_ERROR ("Failed to call Java method");
+ (*env)->ExceptionClear (env);
+ goto done;
+ }
+
+ n_input_buffers = (*env)->GetArrayLength (env, input_buffers);
+ if ((*env)->ExceptionCheck (env)) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get input buffers array length");
+ goto done;
+ }
+
+ *n_buffers = n_input_buffers;
+ ret = g_new0 (GstAmcBuffer, n_input_buffers);
+
+ for (i = 0; i < n_input_buffers; i++) {
+ jobject buffer = NULL;
+
+ buffer = (*env)->GetObjectArrayElement (env, input_buffers, i);
+ if ((*env)->ExceptionCheck (env) || !buffer) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get input buffer %d", i);
+ goto error;
+ }
+
+ ret[i].object = (*env)->NewGlobalRef (env, buffer);
+ (*env)->DeleteLocalRef (env, buffer);
+ if (!ret[i].object) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to create global reference %d", i);
+ goto error;
+ }
+
+ ret[i].data = (*env)->GetDirectBufferAddress (env, ret[i].object);
+ if (!ret[i].data) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get buffer address %d", i);
+ goto error;
+ }
+ ret[i].size = (*env)->GetDirectBufferCapacity (env, ret[i].object);
+ }
+
+done:
+ if (input_buffers)
+ (*env)->DeleteLocalRef (env, input_buffers);
+ input_buffers = NULL;
+
+ return ret;
+error:
+ if (ret)
+ gst_amc_codec_free_buffers (ret, n_input_buffers);
+ ret = NULL;
+ *n_buffers = 0;
+ goto done;
+}
+
+gint
+gst_amc_codec_dequeue_input_buffer (GstAmcCodec * codec, gint64 timeoutUs)
+{
+ JNIEnv *env;
+ gint ret = G_MININT;
+
+ g_return_val_if_fail (codec != NULL, G_MININT);
+
+ env = gst_amc_get_jni_env ();
+
+ ret =
+ (*env)->CallIntMethod (env, codec->object,
+ media_codec.dequeue_input_buffer, timeoutUs);
+ if ((*env)->ExceptionCheck (env)) {
+ GST_ERROR ("Failed to call Java method");
+ (*env)->ExceptionClear (env);
+ ret = G_MININT;
+ goto done;
+ }
+
+done:
+
+ return ret;
+}
+
+static gboolean
+gst_amc_codec_fill_buffer_info (JNIEnv * env, jobject buffer_info,
+ GstAmcBufferInfo * info)
+{
+ g_return_val_if_fail (buffer_info != NULL, FALSE);
+
+ info->flags =
+ (*env)->GetIntField (env, buffer_info, media_codec_buffer_info.flags);
+ if ((*env)->ExceptionCheck (env)) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get buffer info field");
+ return FALSE;
+ }
+
+ info->offset =
+ (*env)->GetIntField (env, buffer_info, media_codec_buffer_info.offset);
+ if ((*env)->ExceptionCheck (env)) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get buffer info field");
+ return FALSE;
+ }
+
+ info->presentation_time_us =
+ (*env)->GetLongField (env, buffer_info,
+ media_codec_buffer_info.presentation_time_us);
+ if ((*env)->ExceptionCheck (env)) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get buffer info field");
+ return FALSE;
+ }
+
+ info->size =
+ (*env)->GetIntField (env, buffer_info, media_codec_buffer_info.size);
+ if ((*env)->ExceptionCheck (env)) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get buffer info field");
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+gint
+gst_amc_codec_dequeue_output_buffer (GstAmcCodec * codec,
+ GstAmcBufferInfo * info, gint64 timeoutUs)
+{
+ JNIEnv *env;
+ gint ret = G_MININT;
+ jobject info_o = NULL;
+
+ g_return_val_if_fail (codec != NULL, G_MININT);
+
+ env = gst_amc_get_jni_env ();
+
+ info_o =
+ (*env)->NewObject (env, media_codec_buffer_info.klass,
+ media_codec_buffer_info.constructor);
+ if (!info_o) {
+ GST_ERROR ("Failed to call Java method");
+ (*env)->ExceptionClear (env);
+ goto done;
+ }
+
+ ret =
+ (*env)->CallIntMethod (env, codec->object,
+ media_codec.dequeue_output_buffer, info_o, timeoutUs);
+ if ((*env)->ExceptionCheck (env)) {
+ GST_ERROR ("Failed to call Java method");
+ (*env)->ExceptionClear (env);
+ ret = G_MININT;
+ goto done;
+ }
+
+ if (!gst_amc_codec_fill_buffer_info (env, info_o, info)) {
+ ret = G_MININT;
+ goto done;
+ }
+
+done:
+ if (info_o)
+ (*env)->DeleteLocalRef (env, info_o);
+ info_o = NULL;
+
+ return ret;
+}
+
+gboolean
+gst_amc_codec_queue_input_buffer (GstAmcCodec * codec, gint index,
+ const GstAmcBufferInfo * info)
+{
+ JNIEnv *env;
+ gboolean ret = TRUE;
+
+ g_return_val_if_fail (codec != NULL, FALSE);
+ g_return_val_if_fail (info != NULL, FALSE);
+
+ env = gst_amc_get_jni_env ();
+
+ (*env)->CallVoidMethod (env, codec->object, media_codec.queue_input_buffer,
+ index, info->offset, info->size, info->presentation_time_us, info->flags);
+ if ((*env)->ExceptionCheck (env)) {
+ GST_ERROR ("Failed to call Java method");
+ (*env)->ExceptionClear (env);
+ ret = FALSE;
+ goto done;
+ }
+
+done:
+
+ return ret;
+}
+
+gboolean
+gst_amc_codec_release_output_buffer (GstAmcCodec * codec, gint index)
+{
+ JNIEnv *env;
+ gboolean ret = TRUE;
+
+ g_return_val_if_fail (codec != NULL, FALSE);
+
+ env = gst_amc_get_jni_env ();
+
+ (*env)->CallVoidMethod (env, codec->object, media_codec.release_output_buffer,
+ index, JNI_FALSE);
+ if ((*env)->ExceptionCheck (env)) {
+ GST_ERROR ("Failed to call Java method");
+ (*env)->ExceptionClear (env);
+ ret = FALSE;
+ goto done;
+ }
+
+done:
+
+ return ret;
+}
+
+GstAmcFormat *
+gst_amc_format_new_audio (const gchar * mime, gint sample_rate, gint channels)
+{
+ JNIEnv *env;
+ GstAmcFormat *format = NULL;
+ jstring mime_str;
+ jobject object = NULL;
+
+ g_return_val_if_fail (mime != NULL, NULL);
+
+ env = gst_amc_get_jni_env ();
+
+ mime_str = (*env)->NewStringUTF (env, mime);
+ if (mime_str == NULL)
+ goto error;
+
+ format = g_slice_new0 (GstAmcFormat);
+
+ object =
+ (*env)->CallStaticObjectMethod (env, media_format.klass,
+ media_format.create_audio_format, mime_str, sample_rate, channels);
+ if ((*env)->ExceptionCheck (env) || !object) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to create format '%s'", mime);
+ goto error;
+ }
+
+ format->object = (*env)->NewGlobalRef (env, object);
+ if (!format->object) {
+ GST_ERROR ("Failed to create global reference");
+ (*env)->ExceptionClear (env);
+ goto error;
+ }
+
+done:
+ if (object)
+ (*env)->DeleteLocalRef (env, object);
+ if (mime_str)
+ (*env)->DeleteLocalRef (env, mime_str);
+ mime_str = NULL;
+
+ return format;
+
+error:
+ if (format)
+ g_slice_free (GstAmcFormat, format);
+ format = NULL;
+ goto done;
+}
+
+GstAmcFormat *
+gst_amc_format_new_video (const gchar * mime, gint width, gint height)
+{
+ JNIEnv *env;
+ GstAmcFormat *format = NULL;
+ jstring mime_str;
+ jobject object = NULL;
+
+ g_return_val_if_fail (mime != NULL, NULL);
+
+ env = gst_amc_get_jni_env ();
+
+ mime_str = (*env)->NewStringUTF (env, mime);
+ if (mime_str == NULL)
+ goto error;
+
+ format = g_slice_new0 (GstAmcFormat);
+
+ object =
+ (*env)->CallStaticObjectMethod (env, media_format.klass,
+ media_format.create_video_format, mime_str, width, height);
+ if ((*env)->ExceptionCheck (env) || !object) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to create format '%s'", mime);
+ goto error;
+ }
+
+ format->object = (*env)->NewGlobalRef (env, object);
+ if (!format->object) {
+ GST_ERROR ("Failed to create global reference");
+ (*env)->ExceptionClear (env);
+ goto error;
+ }
+
+done:
+ if (object)
+ (*env)->DeleteLocalRef (env, object);
+ if (mime_str)
+ (*env)->DeleteLocalRef (env, mime_str);
+ mime_str = NULL;
+
+ return format;
+
+error:
+ if (format)
+ g_slice_free (GstAmcFormat, format);
+ format = NULL;
+ goto done;
+}
+
+void
+gst_amc_format_free (GstAmcFormat * format)
+{
+ JNIEnv *env;
+
+ g_return_if_fail (format != NULL);
+
+ env = gst_amc_get_jni_env ();
+ (*env)->DeleteGlobalRef (env, format->object);
+ g_slice_free (GstAmcFormat, format);
+}
+
+gchar *
+gst_amc_format_to_string (GstAmcFormat * format)
+{
+ JNIEnv *env;
+ jstring v_str = NULL;
+ const gchar *v = NULL;
+ gchar *ret = NULL;
+
+ g_return_val_if_fail (format != NULL, FALSE);
+
+ env = gst_amc_get_jni_env ();
+
+ v_str =
+ (*env)->CallObjectMethod (env, format->object, media_format.to_string);
+ if ((*env)->ExceptionCheck (env)) {
+ GST_ERROR ("Failed to call Java method");
+ (*env)->ExceptionClear (env);
+ goto done;
+ }
+
+ v = (*env)->GetStringUTFChars (env, v_str, NULL);
+ if (!v) {
+ GST_ERROR ("Failed to convert string to UTF8");
+ (*env)->ExceptionClear (env);
+ goto done;
+ }
+
+ ret = g_strdup (v);
+
+done:
+ if (v)
+ (*env)->ReleaseStringUTFChars (env, v_str, v);
+ if (v_str)
+ (*env)->DeleteLocalRef (env, v_str);
+
+ return ret;
+}
+
+gboolean
+gst_amc_format_contains_key (GstAmcFormat * format, const gchar * key)
+{
+ JNIEnv *env;
+ gboolean ret = FALSE;
+ jstring key_str = NULL;
+
+ g_return_val_if_fail (format != NULL, FALSE);
+ g_return_val_if_fail (key != NULL, FALSE);
+
+ env = gst_amc_get_jni_env ();
+
+ key_str = (*env)->NewStringUTF (env, key);
+ if (!key_str)
+ goto done;
+
+ ret =
+ (*env)->CallBooleanMethod (env, format->object, media_format.contains_key,
+ key_str);
+ if ((*env)->ExceptionCheck (env)) {
+ GST_ERROR ("Failed to call Java method");
+ (*env)->ExceptionClear (env);
+ goto done;
+ }
+
+done:
+ if (key_str)
+ (*env)->DeleteLocalRef (env, key_str);
+
+ return ret;
+}
+
+gboolean
+gst_amc_format_get_float (GstAmcFormat * format, const gchar * key,
+ gfloat * value)
+{
+ JNIEnv *env;
+ gboolean ret = FALSE;
+ jstring key_str = NULL;
+
+ g_return_val_if_fail (format != NULL, FALSE);
+ g_return_val_if_fail (key != NULL, FALSE);
+ g_return_val_if_fail (value != NULL, FALSE);
+
+ *value = 0;
+ env = gst_amc_get_jni_env ();
+
+ key_str = (*env)->NewStringUTF (env, key);
+ if (!key_str)
+ goto done;
+
+ *value =
+ (*env)->CallFloatMethod (env, format->object, media_format.get_float,
+ key_str);
+ if ((*env)->ExceptionCheck (env)) {
+ GST_ERROR ("Failed to call Java method");
+ (*env)->ExceptionClear (env);
+ goto done;
+ }
+ ret = TRUE;
+
+done:
+ if (key_str)
+ (*env)->DeleteLocalRef (env, key_str);
+
+ return ret;
+}
+
+void
+gst_amc_format_set_float (GstAmcFormat * format, const gchar * key,
+ gfloat value)
+{
+ JNIEnv *env;
+ jstring key_str = NULL;
+
+ g_return_if_fail (format != NULL);
+ g_return_if_fail (key != NULL);
+
+ env = gst_amc_get_jni_env ();
+
+ key_str = (*env)->NewStringUTF (env, key);
+ if (!key_str)
+ goto done;
+
+ (*env)->CallVoidMethod (env, format->object, media_format.set_float, key_str,
+ value);
+ if ((*env)->ExceptionCheck (env)) {
+ GST_ERROR ("Failed to call Java method");
+ (*env)->ExceptionClear (env);
+ goto done;
+ }
+
+done:
+ if (key_str)
+ (*env)->DeleteLocalRef (env, key_str);
+}
+
+gboolean
+gst_amc_format_get_int (GstAmcFormat * format, const gchar * key, gint * value)
+{
+ JNIEnv *env;
+ gboolean ret = FALSE;
+ jstring key_str = NULL;
+
+ g_return_val_if_fail (format != NULL, FALSE);
+ g_return_val_if_fail (key != NULL, FALSE);
+ g_return_val_if_fail (value != NULL, FALSE);
+
+ *value = 0;
+ env = gst_amc_get_jni_env ();
+
+ key_str = (*env)->NewStringUTF (env, key);
+ if (!key_str)
+ goto done;
+
+ *value =
+ (*env)->CallIntMethod (env, format->object, media_format.get_integer,
+ key_str);
+ if ((*env)->ExceptionCheck (env)) {
+ GST_ERROR ("Failed to call Java method");
+ (*env)->ExceptionClear (env);
+ goto done;
+ }
+ ret = TRUE;
+
+done:
+ if (key_str)
+ (*env)->DeleteLocalRef (env, key_str);
+
+ return ret;
+
+}
+
+void
+gst_amc_format_set_int (GstAmcFormat * format, const gchar * key, gint value)
+{
+ JNIEnv *env;
+ jstring key_str = NULL;
+
+ g_return_if_fail (format != NULL);
+ g_return_if_fail (key != NULL);
+
+ env = gst_amc_get_jni_env ();
+
+ key_str = (*env)->NewStringUTF (env, key);
+ if (!key_str)
+ goto done;
+
+ (*env)->CallVoidMethod (env, format->object, media_format.set_integer,
+ key_str, value);
+ if ((*env)->ExceptionCheck (env)) {
+ GST_ERROR ("Failed to call Java method");
+ (*env)->ExceptionClear (env);
+ goto done;
+ }
+
+done:
+ if (key_str)
+ (*env)->DeleteLocalRef (env, key_str);
+}
+
+gboolean
+gst_amc_format_get_string (GstAmcFormat * format, const gchar * key,
+ gchar ** value)
+{
+ JNIEnv *env;
+ gboolean ret = FALSE;
+ jstring key_str = NULL;
+ jstring v_str = NULL;
+ const gchar *v = NULL;
+
+ g_return_val_if_fail (format != NULL, FALSE);
+ g_return_val_if_fail (key != NULL, FALSE);
+ g_return_val_if_fail (value != NULL, FALSE);
+
+ *value = 0;
+ env = gst_amc_get_jni_env ();
+
+ key_str = (*env)->NewStringUTF (env, key);
+ if (!key_str)
+ goto done;
+
+ v_str =
+ (*env)->CallObjectMethod (env, format->object, media_format.get_string,
+ key_str);
+ if ((*env)->ExceptionCheck (env)) {
+ GST_ERROR ("Failed to call Java method");
+ (*env)->ExceptionClear (env);
+ goto done;
+ }
+
+ v = (*env)->GetStringUTFChars (env, v_str, NULL);
+ if (!v) {
+ GST_ERROR ("Failed to convert string to UTF8");
+ (*env)->ExceptionClear (env);
+ goto done;
+ }
+
+ *value = g_strdup (v);
+
+ ret = TRUE;
+
+done:
+ if (key_str)
+ (*env)->DeleteLocalRef (env, key_str);
+ if (v)
+ (*env)->ReleaseStringUTFChars (env, v_str, v);
+ if (v_str)
+ (*env)->DeleteLocalRef (env, v_str);
+
+ return ret;
+}
+
+void
+gst_amc_format_set_string (GstAmcFormat * format, const gchar * key,
+ const gchar * value)
+{
+ JNIEnv *env;
+ jstring key_str = NULL;
+ jstring v_str = NULL;
+
+ g_return_if_fail (format != NULL);
+ g_return_if_fail (key != NULL);
+ g_return_if_fail (value != NULL);
+
+ env = gst_amc_get_jni_env ();
+
+ key_str = (*env)->NewStringUTF (env, key);
+ if (!key_str)
+ goto done;
+
+ v_str = (*env)->NewStringUTF (env, value);
+ if (!v_str)
+ goto done;
+
+ (*env)->CallVoidMethod (env, format->object, media_format.set_string, key_str,
+ v_str);
+ if ((*env)->ExceptionCheck (env)) {
+ GST_ERROR ("Failed to call Java method");
+ (*env)->ExceptionClear (env);
+ goto done;
+ }
+
+done:
+ if (key_str)
+ (*env)->DeleteLocalRef (env, key_str);
+ if (v_str)
+ (*env)->DeleteLocalRef (env, v_str);
+}
+
+gboolean
+gst_amc_format_get_buffer (GstAmcFormat * format, const gchar * key,
+ GstBuffer ** value)
+{
+ JNIEnv *env;
+ gboolean ret = FALSE;
+ jstring key_str = NULL;
+ jobject v = NULL;
+ guint8 *data;
+ gsize size;
+
+ g_return_val_if_fail (format != NULL, FALSE);
+ g_return_val_if_fail (key != NULL, FALSE);
+ g_return_val_if_fail (value != NULL, FALSE);
+
+ *value = 0;
+ env = gst_amc_get_jni_env ();
+
+ key_str = (*env)->NewStringUTF (env, key);
+ if (!key_str)
+ goto done;
+
+ v = (*env)->CallObjectMethod (env, format->object,
+ media_format.get_byte_buffer, key_str);
+ if ((*env)->ExceptionCheck (env)) {
+ GST_ERROR ("Failed to call Java method");
+ (*env)->ExceptionClear (env);
+ goto done;
+ }
+
+ data = (*env)->GetDirectBufferAddress (env, v);
+ if (!data) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get buffer address");
+ goto done;
+ }
+ size = (*env)->GetDirectBufferCapacity (env, v);
+ *value = gst_buffer_new_and_alloc (size);
+ memcpy (GST_BUFFER_DATA (*value), data, size);
+
+ ret = TRUE;
+
+done:
+ if (key_str)
+ (*env)->DeleteLocalRef (env, key_str);
+ if (v)
+ (*env)->DeleteLocalRef (env, v);
+
+ return ret;
+}
+
+void
+gst_amc_format_set_buffer (GstAmcFormat * format, const gchar * key,
+ GstBuffer * value)
+{
+ JNIEnv *env;
+ jstring key_str = NULL;
+ jobject v = NULL;
+
+ g_return_if_fail (format != NULL);
+ g_return_if_fail (key != NULL);
+ g_return_if_fail (value != NULL);
+
+ env = gst_amc_get_jni_env ();
+
+ key_str = (*env)->NewStringUTF (env, key);
+ if (!key_str)
+ goto done;
+
+ /* FIXME: The buffer must remain valid until the codec is stopped */
+ v = (*env)->NewDirectByteBuffer (env, GST_BUFFER_DATA (value),
+ GST_BUFFER_SIZE (value));
+ if (!v)
+ goto done;
+
+ (*env)->CallVoidMethod (env, format->object, media_format.set_byte_buffer,
+ key_str, v);
+ if ((*env)->ExceptionCheck (env)) {
+ GST_ERROR ("Failed to call Java method");
+ (*env)->ExceptionClear (env);
+ goto done;
+ }
+
+done:
+ if (key_str)
+ (*env)->DeleteLocalRef (env, key_str);
+ if (v)
+ (*env)->DeleteLocalRef (env, v);
+}
+
+static gboolean
+get_java_classes (void)
+{
+ gboolean ret = TRUE;
+ JNIEnv *env;
+ jclass tmp;
+
+ GST_DEBUG ("Retrieving Java classes");
+
+ env = gst_amc_get_jni_env ();
+
+ tmp = (*env)->FindClass (env, "java/lang/String");
+ if (!tmp) {
+ ret = FALSE;
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get string class");
+ goto done;
+ }
+ java_string.klass = (*env)->NewGlobalRef (env, tmp);
+ if (!java_string.klass) {
+ ret = FALSE;
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get string class global reference");
+ goto done;
+ }
+ (*env)->DeleteLocalRef (env, tmp);
+ tmp = NULL;
+
+ java_string.constructor =
+ (*env)->GetMethodID (env, java_string.klass, "<init>", "([C)V");
+ if (!java_string.constructor) {
+ ret = FALSE;
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get string methods");
+ goto done;
+ }
+
+ tmp = (*env)->FindClass (env, "android/media/MediaCodec");
+ if (!tmp) {
+ ret = FALSE;
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get codec class");
+ goto done;
+ }
+ media_codec.klass = (*env)->NewGlobalRef (env, tmp);
+ if (!media_codec.klass) {
+ ret = FALSE;
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get codec class global reference");
+ goto done;
+ }
+ (*env)->DeleteLocalRef (env, tmp);
+ tmp = NULL;
+
+ media_codec.create_by_codec_name =
+ (*env)->GetStaticMethodID (env, media_codec.klass, "createByCodecName",
+ "(Ljava/lang/String;)Landroid/media/MediaCodec;");
+ media_codec.configure =
+ (*env)->GetMethodID (env, media_codec.klass, "configure",
+ "(Landroid/media/MediaFormat;Landroid/view/Surface;Landroid/media/MediaCrypto;I)V");
+ media_codec.dequeue_input_buffer =
+ (*env)->GetMethodID (env, media_codec.klass, "dequeueInputBuffer",
+ "(J)I");
+ media_codec.dequeue_output_buffer =
+ (*env)->GetMethodID (env, media_codec.klass, "dequeueOutputBuffer",
+ "(Landroid/media/MediaCodec$BufferInfo;J)I");
+ media_codec.flush =
+ (*env)->GetMethodID (env, media_codec.klass, "flush", "()V");
+ media_codec.get_input_buffers =
+ (*env)->GetMethodID (env, media_codec.klass, "getInputBuffers",
+ "()[Ljava/nio/ByteBuffer;");
+ media_codec.get_output_buffers =
+ (*env)->GetMethodID (env, media_codec.klass, "getOutputBuffers",
+ "()[Ljava/nio/ByteBuffer;");
+ media_codec.get_output_format =
+ (*env)->GetMethodID (env, media_codec.klass, "getOutputFormat",
+ "()Landroid/media/MediaFormat;");
+ media_codec.queue_input_buffer =
+ (*env)->GetMethodID (env, media_codec.klass, "queueInputBuffer",
+ "(IIIJI)V");
+ media_codec.release =
+ (*env)->GetMethodID (env, media_codec.klass, "release", "()V");
+ media_codec.release_output_buffer =
+ (*env)->GetMethodID (env, media_codec.klass, "releaseOutputBuffer",
+ "(IZ)V");
+ media_codec.start =
+ (*env)->GetMethodID (env, media_codec.klass, "start", "()V");
+ media_codec.stop =
+ (*env)->GetMethodID (env, media_codec.klass, "stop", "()V");
+
+ if (!media_codec.configure ||
+ !media_codec.create_by_codec_name ||
+ !media_codec.dequeue_input_buffer ||
+ !media_codec.dequeue_output_buffer ||
+ !media_codec.flush ||
+ !media_codec.get_input_buffers ||
+ !media_codec.get_output_buffers ||
+ !media_codec.get_output_format ||
+ !media_codec.queue_input_buffer ||
+ !media_codec.release ||
+ !media_codec.release_output_buffer ||
+ !media_codec.start || !media_codec.stop) {
+ ret = FALSE;
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get codec methods");
+ goto done;
+ }
+
+ tmp = (*env)->FindClass (env, "android/media/MediaCodec$BufferInfo");
+ if (!tmp) {
+ ret = FALSE;
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get codec buffer info class");
+ goto done;
+ }
+ media_codec_buffer_info.klass = (*env)->NewGlobalRef (env, tmp);
+ if (!media_codec_buffer_info.klass) {
+ ret = FALSE;
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get codec buffer info class global reference");
+ goto done;
+ }
+ (*env)->DeleteLocalRef (env, tmp);
+ tmp = NULL;
+
+ media_codec_buffer_info.constructor =
+ (*env)->GetMethodID (env, media_codec_buffer_info.klass, "<init>", "()V");
+ media_codec_buffer_info.flags =
+ (*env)->GetFieldID (env, media_codec_buffer_info.klass, "flags", "I");
+ media_codec_buffer_info.offset =
+ (*env)->GetFieldID (env, media_codec_buffer_info.klass, "offset", "I");
+ media_codec_buffer_info.presentation_time_us =
+ (*env)->GetFieldID (env, media_codec_buffer_info.klass,
+ "presentationTimeUs", "J");
+ media_codec_buffer_info.size =
+ (*env)->GetFieldID (env, media_codec_buffer_info.klass, "size", "I");
+ if (!media_codec_buffer_info.constructor || !media_codec_buffer_info.flags
+ || !media_codec_buffer_info.offset
+ || !media_codec_buffer_info.presentation_time_us
+ || !media_codec_buffer_info.size) {
+ ret = FALSE;
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get buffer info methods and fields");
+ goto done;
+ }
+
+ tmp = (*env)->FindClass (env, "android/media/MediaFormat");
+ if (!tmp) {
+ ret = FALSE;
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get format class");
+ goto done;
+ }
+ media_format.klass = (*env)->NewGlobalRef (env, tmp);
+ if (!media_format.klass) {
+ ret = FALSE;
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get format class global reference");
+ goto done;
+ }
+ (*env)->DeleteLocalRef (env, tmp);
+ tmp = NULL;
+
+ media_format.create_audio_format =
+ (*env)->GetStaticMethodID (env, media_format.klass, "createAudioFormat",
+ "(Ljava/lang/String;II)Landroid/media/MediaFormat;");
+ media_format.create_video_format =
+ (*env)->GetStaticMethodID (env, media_format.klass, "createVideoFormat",
+ "(Ljava/lang/String;II)Landroid/media/MediaFormat;");
+ media_format.to_string =
+ (*env)->GetMethodID (env, media_format.klass, "toString",
+ "()Ljava/lang/String;");
+ media_format.contains_key =
+ (*env)->GetMethodID (env, media_format.klass, "containsKey",
+ "(Ljava/lang/String;)Z");
+ media_format.get_float =
+ (*env)->GetMethodID (env, media_format.klass, "getFloat",
+ "(Ljava/lang/String;)F");
+ media_format.set_float =
+ (*env)->GetMethodID (env, media_format.klass, "setFloat",
+ "(Ljava/lang/String;F)V");
+ media_format.get_integer =
+ (*env)->GetMethodID (env, media_format.klass, "getInteger",
+ "(Ljava/lang/String;)I");
+ media_format.set_integer =
+ (*env)->GetMethodID (env, media_format.klass, "setInteger",
+ "(Ljava/lang/String;I)V");
+ media_format.get_string =
+ (*env)->GetMethodID (env, media_format.klass, "getString",
+ "(Ljava/lang/String;)Ljava/lang/String;");
+ media_format.set_string =
+ (*env)->GetMethodID (env, media_format.klass, "setString",
+ "(Ljava/lang/String;Ljava/lang/String;)V");
+ media_format.get_byte_buffer =
+ (*env)->GetMethodID (env, media_format.klass, "getByteBuffer",
+ "(Ljava/lang/String;)Ljava/nio/ByteBuffer;");
+ media_format.set_byte_buffer =
+ (*env)->GetMethodID (env, media_format.klass, "setByteBuffer",
+ "(Ljava/lang/String;Ljava/nio/ByteBuffer;)V");
+ if (!media_format.create_audio_format || !media_format.create_video_format
+ || !media_format.contains_key || !media_format.get_float
+ || !media_format.set_float || !media_format.get_integer
+ || !media_format.set_integer || !media_format.get_string
+ || !media_format.set_string || !media_format.get_byte_buffer
+ || !media_format.set_byte_buffer) {
+ ret = FALSE;
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get format methods");
+ goto done;
+ }
+
+done:
+ if (tmp)
+ (*env)->DeleteLocalRef (env, tmp);
+ tmp = NULL;
+
+ return ret;
+}
+
+static gboolean
+scan_codecs (GstPlugin * plugin)
+{
+ gboolean ret = TRUE;
+ JNIEnv *env;
+ jclass codec_list_class = NULL;
+ jmethodID get_codec_count_id, get_codec_info_at_id;
+ jint codec_count, i;
+ const GstStructure *cache_data;
+
+ GST_DEBUG ("Scanning codecs");
+
+ if ((cache_data = gst_plugin_get_cache_data (plugin))) {
+ const GValue *arr = gst_structure_get_value (cache_data, "codecs");
+ guint i, n;
+
+ GST_DEBUG ("Getting codecs from cache");
+ n = gst_value_array_get_size (arr);
+ for (i = 0; i < n; i++) {
+ const GValue *cv = gst_value_array_get_value (arr, i);
+ const GstStructure *cs = gst_value_get_structure (cv);
+ const gchar *name;
+ gboolean is_encoder;
+ const GValue *starr;
+ guint j, n2;
+ GstAmcCodecInfo *gst_codec_info;
+
+ gst_codec_info = g_new0 (GstAmcCodecInfo, 1);
+
+ name = gst_structure_get_string (cs, "name");
+ gst_structure_get_boolean (cs, "is-encoder", &is_encoder);
+ gst_codec_info->name = g_strdup (name);
+ gst_codec_info->is_encoder = is_encoder;
+
+ starr = gst_structure_get_value (cs, "supported-types");
+ n2 = gst_value_array_get_size (starr);
+
+ gst_codec_info->n_supported_types = n2;
+ gst_codec_info->supported_types = g_new0 (GstAmcCodecType, n2);
+
+ for (j = 0; j < n2; j++) {
+ const GValue *stv = gst_value_array_get_value (starr, j);
+ const GstStructure *sts = gst_value_get_structure (stv);
+ const gchar *mime;
+ const GValue *cfarr;
+ const GValue *plarr;
+ guint k, n3;
+ GstAmcCodecType *gst_codec_type = &gst_codec_info->supported_types[j];
+
+ mime = gst_structure_get_string (sts, "mime");
+ gst_codec_type->mime = g_strdup (mime);
+
+ cfarr = gst_structure_get_value (sts, "color-formats");
+ n3 = gst_value_array_get_size (cfarr);
+
+ gst_codec_type->n_color_formats = n3;
+ gst_codec_type->color_formats = g_new0 (gint, n3);
+
+ for (k = 0; k < n3; k++) {
+ const GValue *cfv = gst_value_array_get_value (cfarr, k);
+ gint cf = g_value_get_int (cfv);
+
+ gst_codec_type->color_formats[k] = cf;
+ }
+
+ plarr = gst_structure_get_value (sts, "profile-levels");
+ n3 = gst_value_array_get_size (plarr);
+
+ gst_codec_type->n_profile_levels = n3;
+ gst_codec_type->profile_levels =
+ g_malloc0 (sizeof (gst_codec_type->profile_levels[0]) * n3);
+
+ for (k = 0; k < n3; k++) {
+ const GValue *plv = gst_value_array_get_value (plarr, k);
+ const GValue *p, *l;
+
+ p = gst_value_array_get_value (plv, 0);
+ l = gst_value_array_get_value (plv, 1);
+ gst_codec_type->profile_levels[k].profile = g_value_get_int (p);
+ gst_codec_type->profile_levels[k].level = g_value_get_int (l);
+ }
+ }
+
+ codec_infos = g_list_append (codec_infos, gst_codec_info);
+ }
+
+ return TRUE;
+ }
+
+ env = gst_amc_get_jni_env ();
+
+ codec_list_class = (*env)->FindClass (env, "android/media/MediaCodecList");
+ if (!codec_list_class) {
+ ret = FALSE;
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get codec list class");
+ goto done;
+ }
+
+ get_codec_count_id =
+ (*env)->GetStaticMethodID (env, codec_list_class, "getCodecCount", "()I");
+ get_codec_info_at_id =
+ (*env)->GetStaticMethodID (env, codec_list_class, "getCodecInfoAt",
+ "(I)Landroid/media/MediaCodecInfo;");
+ if (!get_codec_count_id || !get_codec_info_at_id) {
+ ret = FALSE;
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get codec list method IDs");
+ goto done;
+ }
+
+ codec_count =
+ (*env)->CallStaticIntMethod (env, codec_list_class, get_codec_count_id);
+ if ((*env)->ExceptionCheck (env)) {
+ ret = FALSE;
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get number of available codecs");
+ goto done;
+ }
+
+ GST_LOG ("Found %d available codecs", codec_count);
+
+ for (i = 0; i < codec_count; i++) {
+ GstAmcCodecInfo *gst_codec_info;
+ jobject codec_info = NULL;
+ jclass codec_info_class = NULL;
+ jmethodID get_capabilities_for_type_id, get_name_id;
+ jmethodID get_supported_types_id, is_encoder_id;
+ jobject name = NULL;
+ const gchar *name_str = NULL;
+ jboolean is_encoder;
+ jarray supported_types = NULL;
+ jsize n_supported_types;
+ jsize j;
+ gboolean valid_codec = TRUE;
+
+ gst_codec_info = g_new0 (GstAmcCodecInfo, 1);
+
+ codec_info =
+ (*env)->CallStaticObjectMethod (env, codec_list_class,
+ get_codec_info_at_id, i);
+ if ((*env)->ExceptionCheck (env) || !codec_info) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get codec info %d", i);
+ valid_codec = FALSE;
+ goto next_codec;
+ }
+
+ codec_info_class = (*env)->GetObjectClass (env, codec_info);
+ if (!codec_list_class) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get codec info class");
+ valid_codec = FALSE;
+ goto next_codec;
+ }
+
+ get_capabilities_for_type_id =
+ (*env)->GetMethodID (env, codec_info_class, "getCapabilitiesForType",
+ "(Ljava/lang/String;)Landroid/media/MediaCodecInfo$CodecCapabilities;");
+ get_name_id =
+ (*env)->GetMethodID (env, codec_info_class, "getName",
+ "()Ljava/lang/String;");
+ get_supported_types_id =
+ (*env)->GetMethodID (env, codec_info_class, "getSupportedTypes",
+ "()[Ljava/lang/String;");
+ is_encoder_id =
+ (*env)->GetMethodID (env, codec_info_class, "isEncoder", "()Z");
+ if (!get_capabilities_for_type_id || !get_name_id
+ || !get_supported_types_id || !is_encoder_id) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get codec info method IDs");
+ valid_codec = FALSE;
+ goto next_codec;
+ }
+
+ name = (*env)->CallObjectMethod (env, codec_info, get_name_id);
+ if ((*env)->ExceptionCheck (env)) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get codec name");
+ valid_codec = FALSE;
+ goto next_codec;
+ }
+ name_str = (*env)->GetStringUTFChars (env, name, NULL);
+ if ((*env)->ExceptionCheck (env)) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to convert codec name to UTF8");
+ valid_codec = FALSE;
+ goto next_codec;
+ }
+
+ GST_INFO ("Checking codec '%s'", name_str);
+
+ /* Compatibility codec names */
+ if (strcmp (name_str, "AACEncoder") == 0 ||
+ strcmp (name_str, "OMX.google.raw.decoder") == 0) {
+ GST_INFO ("Skipping compatibility codec '%s'", name_str);
+ valid_codec = FALSE;
+ goto next_codec;
+ }
+
+ if (g_str_has_suffix (name_str, ".secure")) {
+ GST_INFO ("Skipping DRM codec '%s'", name_str);
+ valid_codec = FALSE;
+ goto next_codec;
+ }
+
+ /* FIXME: Non-Google codecs usually just don't work and hang forever
+ * or crash when not used from a process that started the Java
+ * VM via the non-public AndroidRuntime class. Can we somehow
+ * initialize all this?
+ */
+ if (started_java_vm && !g_str_has_prefix (name_str, "OMX.google.")) {
+ GST_INFO ("Skipping non-Google codec '%s' in standalone mode", name_str);
+ valid_codec = FALSE;
+ goto next_codec;
+ }
+
+ /* FIXME:
+ * - Vorbis: Generates clicks for multi-channel streams
+ * - *Law: Generates output with too low frequencies
+ */
+ if (strcmp (name_str, "OMX.google.vorbis.decoder") == 0 ||
+ strcmp (name_str, "OMX.google.g711.alaw.decoder") == 0 ||
+ strcmp (name_str, "OMX.google.g711.mlaw.decoder") == 0) {
+ GST_INFO ("Skipping known broken codec '%s'", name_str);
+ valid_codec = FALSE;
+ goto next_codec;
+ }
+ gst_codec_info->name = g_strdup (name_str);
+
+ is_encoder = (*env)->CallBooleanMethod (env, codec_info, is_encoder_id);
+ if ((*env)->ExceptionCheck (env)) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to detect if codec is an encoder");
+ valid_codec = FALSE;
+ goto next_codec;
+ }
+ gst_codec_info->is_encoder = is_encoder;
+
+ supported_types =
+ (*env)->CallObjectMethod (env, codec_info, get_supported_types_id);
+ if ((*env)->ExceptionCheck (env)) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get supported types");
+ valid_codec = FALSE;
+ goto next_codec;
+ }
+
+ n_supported_types = (*env)->GetArrayLength (env, supported_types);
+ if ((*env)->ExceptionCheck (env)) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get supported types array length");
+ valid_codec = FALSE;
+ goto next_codec;
+ }
+
+ GST_INFO ("Codec '%s' has %d supported types", name_str, n_supported_types);
+
+ gst_codec_info->supported_types =
+ g_new0 (GstAmcCodecType, n_supported_types);
+ gst_codec_info->n_supported_types = n_supported_types;
+
+ if (n_supported_types == 0) {
+ valid_codec = FALSE;
+ GST_ERROR ("Codec has no supported types");
+ goto next_codec;
+ }
+
+ for (j = 0; j < n_supported_types; j++) {
+ GstAmcCodecType *gst_codec_type;
+ jobject supported_type = NULL;
+ const gchar *supported_type_str = NULL;
+ jobject capabilities = NULL;
+ jclass capabilities_class = NULL;
+ jfieldID color_formats_id, profile_levels_id;
+ jobject color_formats = NULL;
+ jobject profile_levels = NULL;
+ jint *color_formats_elems = NULL;
+ jsize n_elems, k;
+
+ gst_codec_type = &gst_codec_info->supported_types[j];
+
+ supported_type = (*env)->GetObjectArrayElement (env, supported_types, j);
+ if ((*env)->ExceptionCheck (env)) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get %d-th supported type", j);
+ valid_codec = FALSE;
+ goto next_supported_type;
+ }
+
+ supported_type_str =
+ (*env)->GetStringUTFChars (env, supported_type, NULL);
+ if ((*env)->ExceptionCheck (env) || !supported_type_str) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to convert supported type to UTF8");
+ valid_codec = FALSE;
+ goto next_supported_type;
+ }
+
+ GST_INFO ("Supported type '%s'", supported_type_str);
+ gst_codec_type->mime = g_strdup (supported_type_str);
+
+ capabilities =
+ (*env)->CallObjectMethod (env, codec_info,
+ get_capabilities_for_type_id, supported_type);
+ if ((*env)->ExceptionCheck (env)) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get capabilities for supported type");
+ valid_codec = FALSE;
+ goto next_supported_type;
+ }
+
+ capabilities_class = (*env)->GetObjectClass (env, capabilities);
+ if (!capabilities_class) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get capabilities class");
+ valid_codec = FALSE;
+ goto next_supported_type;
+ }
+
+ color_formats_id =
+ (*env)->GetFieldID (env, capabilities_class, "colorFormats", "[I");
+ profile_levels_id =
+ (*env)->GetFieldID (env, capabilities_class, "profileLevels",
+ "[Landroid/media/MediaCodecInfo$CodecProfileLevel;");
+ if (!color_formats_id || !profile_levels_id) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get capabilities field IDs");
+ valid_codec = FALSE;
+ goto next_supported_type;
+ }
+
+ color_formats =
+ (*env)->GetObjectField (env, capabilities, color_formats_id);
+ if ((*env)->ExceptionCheck (env)) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get color formats");
+ valid_codec = FALSE;
+ goto next_supported_type;
+ }
+
+ n_elems = (*env)->GetArrayLength (env, color_formats);
+ if ((*env)->ExceptionCheck (env)) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get color formats array length");
+ valid_codec = FALSE;
+ goto next_supported_type;
+ }
+ gst_codec_type->n_color_formats = n_elems;
+ gst_codec_type->color_formats = g_new0 (gint, n_elems);
+ color_formats_elems =
+ (*env)->GetIntArrayElements (env, color_formats, NULL);
+ if ((*env)->ExceptionCheck (env)) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get color format elements");
+ valid_codec = FALSE;
+ goto next_supported_type;
+ }
+
+ for (k = 0; k < n_elems; k++) {
+ GST_INFO ("Color format %d: %d", k, color_formats_elems[k]);
+ gst_codec_type->color_formats[k] = color_formats_elems[k];
+ }
+
+ if (g_str_has_prefix (gst_codec_type->mime, "video/")) {
+ if (!n_elems) {
+ GST_ERROR ("No supported color formats for video codec");
+ valid_codec = FALSE;
+ goto next_supported_type;
+ }
+
+ if (!ignore_unknown_color_formats
+ && !accepted_color_formats (gst_codec_type, is_encoder)) {
+ GST_ERROR ("Codec has unknown color formats, ignoring");
+ valid_codec = FALSE;
+ g_assert_not_reached ();
+ goto next_supported_type;
+ }
+ }
+
+ profile_levels =
+ (*env)->GetObjectField (env, capabilities, profile_levels_id);
+ if ((*env)->ExceptionCheck (env)) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get profile/levels");
+ valid_codec = FALSE;
+ goto next_supported_type;
+ }
+
+ n_elems = (*env)->GetArrayLength (env, profile_levels);
+ if ((*env)->ExceptionCheck (env)) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get profile/levels array length");
+ valid_codec = FALSE;
+ goto next_supported_type;
+ }
+ gst_codec_type->n_profile_levels = n_elems;
+ gst_codec_type->profile_levels =
+ g_malloc0 (sizeof (gst_codec_type->profile_levels[0]) * n_elems);
+ for (k = 0; k < n_elems; k++) {
+ jobject profile_level = NULL;
+ jclass profile_level_class = NULL;
+ jfieldID level_id, profile_id;
+ jint level, profile;
+
+ profile_level = (*env)->GetObjectArrayElement (env, profile_levels, k);
+ if ((*env)->ExceptionCheck (env)) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get %d-th profile/level", k);
+ valid_codec = FALSE;
+ goto next_profile_level;
+ }
+
+ profile_level_class = (*env)->GetObjectClass (env, profile_level);
+ if (!profile_level_class) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get profile/level class");
+ valid_codec = FALSE;
+ goto next_profile_level;
+ }
+
+ level_id = (*env)->GetFieldID (env, profile_level_class, "level", "I");
+ profile_id =
+ (*env)->GetFieldID (env, profile_level_class, "profile", "I");
+ if (!level_id || !profile_id) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get profile/level field IDs");
+ valid_codec = FALSE;
+ goto next_profile_level;
+ }
+
+ level = (*env)->GetIntField (env, profile_level, level_id);
+ if ((*env)->ExceptionCheck (env)) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get level");
+ valid_codec = FALSE;
+ goto next_profile_level;
+ }
+ GST_INFO ("Level %d: 0x%08x", k, level);
+ gst_codec_type->profile_levels[k].level = level;
+
+ profile = (*env)->GetIntField (env, profile_level, profile_id);
+ if ((*env)->ExceptionCheck (env)) {
+ (*env)->ExceptionClear (env);
+ GST_ERROR ("Failed to get profile");
+ valid_codec = FALSE;
+ goto next_profile_level;
+ }
+ GST_INFO ("Profile %d: 0x%08x", k, profile);
+ gst_codec_type->profile_levels[k].profile = profile;
+
+ next_profile_level:
+ if (profile_level)
+ (*env)->DeleteLocalRef (env, profile_level);
+ profile_level = NULL;
+ if (profile_level_class)
+ (*env)->DeleteLocalRef (env, profile_level_class);
+ profile_level_class = NULL;
+ if (!valid_codec)
+ break;
+ }
+
+ next_supported_type:
+ if (color_formats_elems)
+ (*env)->ReleaseIntArrayElements (env, color_formats,
+ color_formats_elems, JNI_ABORT);
+ color_formats_elems = NULL;
+ if (color_formats)
+ (*env)->DeleteLocalRef (env, color_formats);
+ color_formats = NULL;
+ if (profile_levels)
+ (*env)->DeleteLocalRef (env, profile_levels);
+ color_formats = NULL;
+ if (capabilities)
+ (*env)->DeleteLocalRef (env, capabilities);
+ capabilities = NULL;
+ if (capabilities_class)
+ (*env)->DeleteLocalRef (env, capabilities_class);
+ capabilities_class = NULL;
+ if (supported_type_str)
+ (*env)->ReleaseStringUTFChars (env, supported_type, supported_type_str);
+ supported_type_str = NULL;
+ if (supported_type)
+ (*env)->DeleteLocalRef (env, supported_type);
+ supported_type = NULL;
+ if (!valid_codec)
+ break;
+ }
+
+ /* We need at least a valid supported type */
+ if (valid_codec) {
+ GST_LOG ("Successfully scanned codec '%s'", name_str);
+ codec_infos = g_list_append (codec_infos, gst_codec_info);
+ gst_codec_info = NULL;
+ }
+
+ /* Clean up of all local references we got */
+ next_codec:
+ if (name_str)
+ (*env)->ReleaseStringUTFChars (env, name, name_str);
+ name_str = NULL;
+ if (name)
+ (*env)->DeleteLocalRef (env, name);
+ name = NULL;
+ if (supported_types)
+ (*env)->DeleteLocalRef (env, supported_types);
+ supported_types = NULL;
+ if (codec_info)
+ (*env)->DeleteLocalRef (env, codec_info);
+ codec_info = NULL;
+ if (codec_info_class)
+ (*env)->DeleteLocalRef (env, codec_info_class);
+ codec_info_class = NULL;
+ if (gst_codec_info) {
+ gint j;
+
+ for (j = 0; j < gst_codec_info->n_supported_types; j++) {
+ GstAmcCodecType *gst_codec_type = &gst_codec_info->supported_types[j];
+
+ g_free (gst_codec_type->mime);
+ g_free (gst_codec_type->color_formats);
+ g_free (gst_codec_type->profile_levels);
+ }
+ g_free (gst_codec_info->supported_types);
+ g_free (gst_codec_info->name);
+ g_free (gst_codec_info);
+ }
+ gst_codec_info = NULL;
+ valid_codec = TRUE;
+ }
+
+ ret = codec_infos != NULL;
+
+ /* If successful we store a cache of the codec information in
+ * the registry. Otherwise we would always load all codecs during
+ * plugin initialization which can take quite some time (because
+ * of hardware) and also loads lots of shared libraries (which
+ * number is limited by 64 in Android).
+ */
+ if (ret) {
+ GstStructure *new_cache_data = gst_structure_empty_new ("gst-amc-cache");
+ GList *l;
+ GValue arr = { 0, };
+
+ g_value_init (&arr, GST_TYPE_ARRAY);
+
+ for (l = codec_infos; l; l = l->next) {
+ GstAmcCodecInfo *gst_codec_info = l->data;
+ GValue cv = { 0, };
+ GstStructure *cs = gst_structure_empty_new ("gst-amc-codec");
+ GValue starr = { 0, };
+ gint i;
+
+ gst_structure_set (cs, "name", G_TYPE_STRING, gst_codec_info->name,
+ "is-encoder", G_TYPE_BOOLEAN, gst_codec_info->is_encoder, NULL);
+
+ g_value_init (&starr, GST_TYPE_ARRAY);
+
+ for (i = 0; i < gst_codec_info->n_supported_types; i++) {
+ GstAmcCodecType *gst_codec_type = &gst_codec_info->supported_types[i];
+ GstStructure *sts = gst_structure_empty_new ("gst-amc-supported-type");
+ GValue stv = { 0, };
+ GValue tmparr = { 0, };
+ gint j;
+
+ gst_structure_set (sts, "mime", G_TYPE_STRING, gst_codec_type->mime,
+ NULL);
+
+ g_value_init (&tmparr, GST_TYPE_ARRAY);
+ for (j = 0; j < gst_codec_type->n_color_formats; j++) {
+ GValue tmp = { 0, };
+
+ g_value_init (&tmp, G_TYPE_INT);
+ g_value_set_int (&tmp, gst_codec_type->color_formats[j]);
+ gst_value_array_append_value (&tmparr, &tmp);
+ g_value_unset (&tmp);
+ }
+ gst_structure_set_value (sts, "color-formats", &tmparr);
+ g_value_unset (&tmparr);
+
+ g_value_init (&tmparr, GST_TYPE_ARRAY);
+ for (j = 0; j < gst_codec_type->n_profile_levels; j++) {
+ GValue tmparr2 = { 0, };
+ GValue tmp = { 0, };
+
+ g_value_init (&tmparr2, GST_TYPE_ARRAY);
+ g_value_init (&tmp, G_TYPE_INT);
+ g_value_set_int (&tmp, gst_codec_type->profile_levels[j].profile);
+ gst_value_array_append_value (&tmparr2, &tmp);
+ g_value_set_int (&tmp, gst_codec_type->profile_levels[j].level);
+ gst_value_array_append_value (&tmparr2, &tmp);
+ gst_value_array_append_value (&tmparr, &tmparr2);
+ g_value_unset (&tmp);
+ g_value_unset (&tmparr2);
+ }
+ gst_structure_set_value (sts, "profile-levels", &tmparr);
+
+ g_value_init (&stv, GST_TYPE_STRUCTURE);
+ gst_value_set_structure (&stv, sts);
+ gst_value_array_append_value (&starr, &stv);
+ g_value_unset (&tmparr);
+ gst_structure_free (sts);
+ }
+
+ gst_structure_set_value (cs, "supported-types", &starr);
+ g_value_unset (&starr);
+
+ g_value_init (&cv, GST_TYPE_STRUCTURE);
+ gst_value_set_structure (&cv, cs);
+ gst_value_array_append_value (&arr, &cv);
+ g_value_unset (&cv);
+ gst_structure_free (cs);
+ }
+
+ gst_structure_set_value (new_cache_data, "codecs", &arr);
+ g_value_unset (&arr);
+
+ gst_plugin_set_cache_data (plugin, new_cache_data);
+ }
+
+done:
+ if (codec_list_class)
+ (*env)->DeleteLocalRef (env, codec_list_class);
+
+ return ret;
+}
+
+static const struct
+{
+ gint color_format;
+ GstVideoFormat video_format;
+} color_format_mapping_table[] = {
+ {
+ COLOR_FormatYUV420Planar, GST_VIDEO_FORMAT_I420}, {
+ COLOR_FormatYUV420SemiPlanar, GST_VIDEO_FORMAT_NV12}, {
+ COLOR_TI_FormatYUV420PackedSemiPlanar, GST_VIDEO_FORMAT_NV12}, {
+ COLOR_TI_FormatYUV420PackedSemiPlanarInterlaced, GST_VIDEO_FORMAT_NV12}, {
+ COLOR_QCOM_FormatYUV420SemiPlanar, GST_VIDEO_FORMAT_NV12}
+};
+
+static gboolean
+accepted_color_formats (GstAmcCodecType * type, gboolean is_encoder)
+{
+ gint i, j;
+ gint accepted = 0, all = type->n_color_formats;
+
+ for (i = 0; i < type->n_color_formats; i++) {
+ gboolean found = FALSE;
+ /* We ignore this one */
+ if (type->color_formats[i] == COLOR_FormatAndroidOpaque)
+ all--;
+
+ for (j = 0; j < G_N_ELEMENTS (color_format_mapping_table); j++) {
+ if (color_format_mapping_table[j].color_format == type->color_formats[i]) {
+ found = TRUE;
+ break;
+ }
+ }
+
+ if (found)
+ accepted++;
+ }
+
+ if (is_encoder)
+ return accepted > 0;
+ else
+ return accepted == all && all > 0;
+}
+
+GstVideoFormat
+gst_amc_color_format_to_video_format (gint color_format)
+{
+ gint i;
+
+ for (i = 0; i < G_N_ELEMENTS (color_format_mapping_table); i++) {
+ if (color_format_mapping_table[i].color_format == color_format)
+ return color_format_mapping_table[i].video_format;
+ }
+
+ return GST_VIDEO_FORMAT_UNKNOWN;
+}
+
+gint
+gst_amc_video_format_to_color_format (GstVideoFormat video_format)
+{
+ gint i;
+
+ for (i = 0; i < G_N_ELEMENTS (color_format_mapping_table); i++) {
+ if (color_format_mapping_table[i].video_format == video_format)
+ return color_format_mapping_table[i].color_format;
+ }
+
+ return -1;
+}
+
+static const struct
+{
+ gint id;
+ const gchar *str;
+ const gchar *alt_str;
+} avc_profile_mapping_table[] = {
+ {
+ AVCProfileBaseline, "baseline", "constrained-baseline"}, {
+ AVCProfileMain, "main", NULL}, {
+ AVCProfileExtended, "extended", NULL}, {
+ AVCProfileHigh, "high"}, {
+ AVCProfileHigh10, "high-10", "high-10-intra"}, {
+ AVCProfileHigh422, "high-4:2:2", "high-4:2:2-intra"}, {
+ AVCProfileHigh444, "high-4:4:4", "high-4:4:4-intra"}
+};
+
+const gchar *
+gst_amc_avc_profile_to_string (gint profile, const gchar ** alternative)
+{
+ gint i;
+
+ for (i = 0; i < G_N_ELEMENTS (avc_profile_mapping_table); i++) {
+ if (avc_profile_mapping_table[i].id == profile) {
+ *alternative = avc_profile_mapping_table[i].alt_str;
+ return avc_profile_mapping_table[i].str;
+ }
+ }
+
+ return NULL;
+}
+
+gint
+gst_amc_avc_profile_from_string (const gchar * profile)
+{
+ gint i;
+
+ g_return_val_if_fail (profile != NULL, -1);
+
+ for (i = 0; i < G_N_ELEMENTS (avc_profile_mapping_table); i++) {
+ if (strcmp (avc_profile_mapping_table[i].str, profile) == 0)
+ return avc_profile_mapping_table[i].id;
+ }
+
+ return -1;
+}
+
+static const struct
+{
+ gint id;
+ const gchar *str;
+} avc_level_mapping_table[] = {
+ {
+ AVCLevel1, "1"}, {
+ AVCLevel1b, "1b"}, {
+ AVCLevel11, "1.1"}, {
+ AVCLevel12, "1.2"}, {
+ AVCLevel13, "1.3"}, {
+ AVCLevel2, "2"}, {
+ AVCLevel21, "2.1"}, {
+ AVCLevel22, "2.2"}, {
+ AVCLevel3, "3"}, {
+ AVCLevel31, "3.1"}, {
+ AVCLevel32, "3.2"}, {
+ AVCLevel4, "4"}, {
+ AVCLevel41, "4.1"}, {
+ AVCLevel42, "4.2"}, {
+ AVCLevel5, "5"}, {
+ AVCLevel51, "5.1"}
+};
+
+const gchar *
+gst_amc_avc_level_to_string (gint level)
+{
+ gint i;
+
+ for (i = 0; i < G_N_ELEMENTS (avc_level_mapping_table); i++) {
+ if (avc_level_mapping_table[i].id == level)
+ return avc_level_mapping_table[i].str;
+ }
+
+ return NULL;
+}
+
+gint
+gst_amc_avc_level_from_string (const gchar * level)
+{
+ gint i;
+
+ g_return_val_if_fail (level != NULL, -1);
+
+ for (i = 0; i < G_N_ELEMENTS (avc_level_mapping_table); i++) {
+ if (strcmp (avc_level_mapping_table[i].str, level) == 0)
+ return avc_level_mapping_table[i].id;
+ }
+
+ return -1;
+}
+
+static const struct
+{
+ gint id;
+ gint gst_id;
+} h263_profile_mapping_table[] = {
+ {
+ H263ProfileBaseline, 0}, {
+ H263ProfileH320Coding, 1}, {
+ H263ProfileBackwardCompatible, 2}, {
+ H263ProfileISWV2, 3}, {
+ H263ProfileISWV3, 4}, {
+ H263ProfileHighCompression, 5}, {
+ H263ProfileInternet, 6}, {
+ H263ProfileInterlace, 7}, {
+ H263ProfileHighLatency, 8}
+};
+
+gint
+gst_amc_h263_profile_to_gst_id (gint profile)
+{
+ gint i;
+
+ for (i = 0; i < G_N_ELEMENTS (h263_profile_mapping_table); i++) {
+ if (h263_profile_mapping_table[i].id == profile)
+ return h263_profile_mapping_table[i].gst_id;
+ }
+
+ return -1;
+}
+
+gint
+gst_amc_h263_profile_from_gst_id (gint profile)
+{
+ gint i;
+
+ for (i = 0; i < G_N_ELEMENTS (h263_profile_mapping_table); i++) {
+ if (h263_profile_mapping_table[i].gst_id == profile)
+ return h263_profile_mapping_table[i].id;
+ }
+
+ return -1;
+}
+
+static const struct
+{
+ gint id;
+ gint gst_id;
+} h263_level_mapping_table[] = {
+ {
+ H263Level10, 10}, {
+ H263Level20, 20}, {
+ H263Level30, 30}, {
+ H263Level40, 40}, {
+ H263Level50, 50}, {
+ H263Level60, 60}, {
+ H263Level70, 70}
+};
+
+gint
+gst_amc_h263_level_to_gst_id (gint level)
+{
+ gint i;
+
+ for (i = 0; i < G_N_ELEMENTS (h263_level_mapping_table); i++) {
+ if (h263_level_mapping_table[i].id == level)
+ return h263_level_mapping_table[i].gst_id;
+ }
+
+ return -1;
+}
+
+gint
+gst_amc_h263_level_from_gst_id (gint level)
+{
+ gint i;
+
+ for (i = 0; i < G_N_ELEMENTS (h263_level_mapping_table); i++) {
+ if (h263_level_mapping_table[i].gst_id == level)
+ return h263_level_mapping_table[i].id;
+ }
+
+ return -1;
+}
+
+static const struct
+{
+ gint id;
+ const gchar *str;
+} mpeg4_profile_mapping_table[] = {
+ {
+ MPEG4ProfileSimple, "simple"}, {
+ MPEG4ProfileSimpleScalable, "simple-scalable"}, {
+ MPEG4ProfileCore, "core"}, {
+ MPEG4ProfileMain, "main"}, {
+ MPEG4ProfileNbit, "n-bit"}, {
+ MPEG4ProfileScalableTexture, "scalable"}, {
+ MPEG4ProfileSimpleFace, "simple-face"}, {
+ MPEG4ProfileSimpleFBA, "simple-fba"}, {
+ MPEG4ProfileBasicAnimated, "basic-animated-texture"}, {
+ MPEG4ProfileHybrid, "hybrid"}, {
+ MPEG4ProfileAdvancedRealTime, "advanced-real-time"}, {
+ MPEG4ProfileCoreScalable, "core-scalable"}, {
+ MPEG4ProfileAdvancedCoding, "advanced-coding-efficiency"}, {
+ MPEG4ProfileAdvancedCore, "advanced-core"}, {
+ MPEG4ProfileAdvancedScalable, "advanced-scalable-texture"}, {
+ MPEG4ProfileAdvancedSimple, "advanced-simple"}
+};
+
+const gchar *
+gst_amc_mpeg4_profile_to_string (gint profile)
+{
+ gint i;
+
+ for (i = 0; i < G_N_ELEMENTS (mpeg4_profile_mapping_table); i++) {
+ if (mpeg4_profile_mapping_table[i].id == profile)
+ return mpeg4_profile_mapping_table[i].str;
+ }
+
+ return NULL;
+}
+
+gint
+gst_amc_avc_mpeg4_profile_from_string (const gchar * profile)
+{
+ gint i;
+
+ g_return_val_if_fail (profile != NULL, -1);
+
+ for (i = 0; i < G_N_ELEMENTS (mpeg4_profile_mapping_table); i++) {
+ if (strcmp (mpeg4_profile_mapping_table[i].str, profile) == 0)
+ return mpeg4_profile_mapping_table[i].id;
+ }
+
+ return -1;
+}
+
+static const struct
+{
+ gint id;
+ const gchar *str;
+} mpeg4_level_mapping_table[] = {
+ {
+ MPEG4Level0, "0"}, {
+ MPEG4Level0b, "0b"}, {
+ MPEG4Level1, "1"}, {
+ MPEG4Level2, "2"}, {
+ MPEG4Level3, "3"}, {
+ MPEG4Level4, "4"}, {
+ MPEG4Level4a, "4a"}, {
+MPEG4Level5, "5"},};
+
+const gchar *
+gst_amc_mpeg4_level_to_string (gint level)
+{
+ gint i;
+
+ for (i = 0; i < G_N_ELEMENTS (mpeg4_level_mapping_table); i++) {
+ if (mpeg4_level_mapping_table[i].id == level)
+ return mpeg4_level_mapping_table[i].str;
+ }
+
+ return NULL;
+}
+
+gint
+gst_amc_mpeg4_level_from_string (const gchar * level)
+{
+ gint i;
+
+ g_return_val_if_fail (level != NULL, -1);
+
+ for (i = 0; i < G_N_ELEMENTS (mpeg4_level_mapping_table); i++) {
+ if (strcmp (mpeg4_level_mapping_table[i].str, level) == 0)
+ return mpeg4_level_mapping_table[i].id;
+ }
+
+ return -1;
+}
+
+static const struct
+{
+ gint id;
+ const gchar *str;
+} aac_profile_mapping_table[] = {
+ {
+ AACObjectMain, "main"}, {
+ AACObjectLC, "lc"}, {
+ AACObjectSSR, "ssr"}, {
+ AACObjectLTP, "ltp"}
+};
+
+const gchar *
+gst_amc_aac_profile_to_string (gint profile)
+{
+ gint i;
+
+ for (i = 0; i < G_N_ELEMENTS (aac_profile_mapping_table); i++) {
+ if (aac_profile_mapping_table[i].id == profile)
+ return aac_profile_mapping_table[i].str;
+ }
+
+ return NULL;
+}
+
+gint
+gst_amc_aac_profile_from_string (const gchar * profile)
+{
+ gint i;
+
+ g_return_val_if_fail (profile != NULL, -1);
+
+ for (i = 0; i < G_N_ELEMENTS (aac_profile_mapping_table); i++) {
+ if (strcmp (aac_profile_mapping_table[i].str, profile) == 0)
+ return aac_profile_mapping_table[i].id;
+ }
+
+ return -1;
+}
+
+static const struct
+{
+ guint32 mask;
+ GstAudioChannelPosition pos;
+} channel_mapping_table[] = {
+ {
+ CHANNEL_OUT_FRONT_LEFT, GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT}, {
+ CHANNEL_OUT_FRONT_RIGHT, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT}, {
+ CHANNEL_OUT_FRONT_CENTER, GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER}, {
+ CHANNEL_OUT_LOW_FREQUENCY, GST_AUDIO_CHANNEL_POSITION_LFE}, {
+ CHANNEL_OUT_BACK_LEFT, GST_AUDIO_CHANNEL_POSITION_REAR_LEFT}, {
+ CHANNEL_OUT_BACK_RIGHT, GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT}, {
+ CHANNEL_OUT_FRONT_LEFT_OF_CENTER,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER}, {
+ CHANNEL_OUT_FRONT_RIGHT_OF_CENTER,
+ GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER}, {
+ CHANNEL_OUT_BACK_CENTER, GST_AUDIO_CHANNEL_POSITION_REAR_CENTER}, {
+ CHANNEL_OUT_SIDE_LEFT, GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT}, {
+ CHANNEL_OUT_SIDE_RIGHT, GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT}, {
+ CHANNEL_OUT_TOP_CENTER, GST_AUDIO_CHANNEL_POSITION_INVALID}, {
+ CHANNEL_OUT_TOP_FRONT_LEFT, GST_AUDIO_CHANNEL_POSITION_INVALID}, {
+ CHANNEL_OUT_TOP_FRONT_CENTER, GST_AUDIO_CHANNEL_POSITION_INVALID}, {
+ CHANNEL_OUT_TOP_FRONT_RIGHT, GST_AUDIO_CHANNEL_POSITION_INVALID}, {
+ CHANNEL_OUT_TOP_BACK_LEFT, GST_AUDIO_CHANNEL_POSITION_INVALID}, {
+ CHANNEL_OUT_TOP_BACK_CENTER, GST_AUDIO_CHANNEL_POSITION_INVALID}, {
+ CHANNEL_OUT_TOP_BACK_RIGHT, GST_AUDIO_CHANNEL_POSITION_INVALID}
+};
+
+GstAudioChannelPosition *
+gst_amc_audio_channel_mask_to_positions (guint32 channel_mask, gint channels)
+{
+ GstAudioChannelPosition *pos = g_new0 (GstAudioChannelPosition, channels);
+ gint i, j;
+
+ if (channel_mask == 0) {
+ if (channels == 1) {
+ pos[0] = GST_AUDIO_CHANNEL_POSITION_FRONT_MONO;
+ return pos;
+ }
+ if (channels == 2) {
+ pos[0] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
+ pos[1] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
+ return pos;
+ }
+
+ /* Now let the guesswork begin, these are the
+ * AAC default channel assignments for these numbers
+ * of channels */
+ if (channels == 3) {
+ channel_mask =
+ CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT |
+ CHANNEL_OUT_FRONT_CENTER;
+ } else if (channels == 4) {
+ channel_mask =
+ CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT |
+ CHANNEL_OUT_FRONT_CENTER | CHANNEL_OUT_BACK_CENTER;
+ } else if (channels == 5) {
+ channel_mask =
+ CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT |
+ CHANNEL_OUT_FRONT_CENTER | CHANNEL_OUT_BACK_LEFT |
+ CHANNEL_OUT_BACK_RIGHT;
+ } else if (channels == 6) {
+ channel_mask =
+ CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT |
+ CHANNEL_OUT_FRONT_CENTER | CHANNEL_OUT_BACK_LEFT |
+ CHANNEL_OUT_BACK_RIGHT | CHANNEL_OUT_LOW_FREQUENCY;
+ } else if (channels == 8) {
+ channel_mask =
+ CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT |
+ CHANNEL_OUT_FRONT_CENTER | CHANNEL_OUT_BACK_LEFT |
+ CHANNEL_OUT_BACK_RIGHT | CHANNEL_OUT_LOW_FREQUENCY |
+ CHANNEL_OUT_FRONT_LEFT_OF_CENTER | CHANNEL_OUT_FRONT_RIGHT_OF_CENTER;
+ }
+ }
+
+ for (i = 0, j = 0; i < G_N_ELEMENTS (channel_mapping_table); i++) {
+ if ((channel_mask & channel_mapping_table[i].mask)) {
+ pos[j++] = channel_mapping_table[i].pos;
+ if (channel_mapping_table[i].pos == GST_AUDIO_CHANNEL_POSITION_INVALID) {
+ g_free (pos);
+ GST_ERROR ("Unable to map channel mask 0x%08x",
+ channel_mapping_table[i].mask);
+ return NULL;
+ }
+ if (j == channels)
+ break;
+ }
+ }
+
+ if (j != channels) {
+ g_free (pos);
+ GST_ERROR ("Unable to map all channel positions in mask 0x%08x",
+ channel_mask);
+ return NULL;
+ }
+
+ return pos;
+}
+
+guint32
+gst_amc_audio_channel_mask_from_positions (GstAudioChannelPosition * positions,
+ gint channels)
+{
+ gint i, j;
+ guint32 channel_mask = 0;
+
+ if (channels == 1 && !positions)
+ return CHANNEL_OUT_FRONT_CENTER;
+ if (channels == 2 && !positions)
+ return CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT;
+
+ for (i = 0; i < channels; i++) {
+ if (positions[i] == GST_AUDIO_CHANNEL_POSITION_INVALID)
+ return 0;
+
+ for (j = 0; j < G_N_ELEMENTS (channel_mapping_table); j++) {
+ if (channel_mapping_table[j].pos == positions[i]) {
+ channel_mask |= channel_mapping_table[j].mask;
+ break;
+ }
+ }
+
+ if (j == G_N_ELEMENTS (channel_mapping_table)) {
+ GST_ERROR ("Unable to map channel position %d", positions[i]);
+ return 0;
+ }
+ }
+
+ return channel_mask;
+}
+
+static gchar *
+create_type_name (const gchar * parent_name, const gchar * codec_name)
+{
+ gchar *typified_name;
+ gint i, k;
+ gint parent_name_len = strlen (parent_name);
+ gint codec_name_len = strlen (codec_name);
+ gboolean upper = TRUE;
+
+ typified_name = g_new0 (gchar, parent_name_len + 1 + strlen (codec_name) + 1);
+ memcpy (typified_name, parent_name, parent_name_len);
+ typified_name[parent_name_len] = '-';
+
+ for (i = 0, k = 0; i < codec_name_len; i++) {
+ if (g_ascii_isalnum (codec_name[i])) {
+ if (upper)
+ typified_name[parent_name_len + 1 + k++] =
+ g_ascii_toupper (codec_name[i]);
+ else
+ typified_name[parent_name_len + 1 + k++] =
+ g_ascii_tolower (codec_name[i]);
+
+ upper = FALSE;
+ } else {
+ /* Skip all non-alnum chars and start a new upper case word */
+ upper = TRUE;
+ }
+ }
+
+ return typified_name;
+}
+
+static gchar *
+create_element_name (gboolean video, gboolean encoder, const gchar * codec_name)
+{
+#define PREFIX_LEN 10
+ static const gchar *prefixes[] = {
+ "amcviddec-",
+ "amcauddec-",
+ "amcvidenc-",
+ "amcaudenc-"
+ };
+ gchar *element_name;
+ gint i, k;
+ gint codec_name_len = strlen (codec_name);
+ const gchar *prefix;
+
+ if (video && !encoder)
+ prefix = prefixes[0];
+ else if (!video && !encoder)
+ prefix = prefixes[1];
+ else if (video && encoder)
+ prefix = prefixes[2];
+ else
+ prefix = prefixes[3];
+
+ element_name = g_new0 (gchar, PREFIX_LEN + strlen (codec_name) + 1);
+ memcpy (element_name, prefix, PREFIX_LEN);
+
+ for (i = 0, k = 0; i < codec_name_len; i++) {
+ if (g_ascii_isalnum (codec_name[i])) {
+ element_name[PREFIX_LEN + k++] = g_ascii_tolower (codec_name[i]);
+ }
+ /* Skip all non-alnum chars */
+ }
+
+ return element_name;
+}
+
+#undef PREFIX_LEN
+
+static gboolean
+register_codecs (GstPlugin * plugin)
+{
+ gboolean ret = TRUE;
+ GList *l;
+
+ GST_DEBUG ("Registering plugins");
+
+ for (l = codec_infos; l; l = l->next) {
+ GstAmcCodecInfo *codec_info = l->data;
+ gboolean is_audio = FALSE;
+ gboolean is_video = FALSE;
+ gint i;
+ gint n_types;
+
+ GST_DEBUG ("Registering codec '%s'", codec_info->name);
+ for (i = 0; i < codec_info->n_supported_types; i++) {
+ GstAmcCodecType *codec_type = &codec_info->supported_types[i];
+
+ if (g_str_has_prefix (codec_type->mime, "audio/"))
+ is_audio = TRUE;
+ else if (g_str_has_prefix (codec_type->mime, "video/"))
+ is_video = TRUE;
+ }
+
+ n_types = 0;
+ if (is_audio)
+ n_types++;
+ if (is_video)
+ n_types++;
+
+ for (i = 0; i < n_types; i++) {
+ GTypeQuery type_query;
+ GTypeInfo type_info = { 0, };
+ GType type, subtype;
+ gchar *type_name, *element_name;
+ guint rank;
+
+ if (is_video && !codec_info->is_encoder) {
+ type = gst_amc_video_dec_get_type ();
+ } else if (is_audio && !codec_info->is_encoder) {
+ type = gst_amc_audio_dec_get_type ();
+ } else {
+ GST_DEBUG ("Skipping unsupported codec type");
+ continue;
+ }
+
+ g_type_query (type, &type_query);
+ memset (&type_info, 0, sizeof (type_info));
+ type_info.class_size = type_query.class_size;
+ type_info.instance_size = type_query.instance_size;
+ type_name = create_type_name (type_query.type_name, codec_info->name);
+
+ if (g_type_from_name (type_name) != G_TYPE_INVALID) {
+ GST_ERROR ("Type '%s' already exists for codec '%s'", type_name,
+ codec_info->name);
+ g_free (type_name);
+ continue;
+ }
+
+ subtype = g_type_register_static (type, type_name, &type_info, 0);
+ g_free (type_name);
+
+ g_type_set_qdata (subtype, gst_amc_codec_info_quark, codec_info);
+
+ element_name =
+ create_element_name (is_video, codec_info->is_encoder,
+ codec_info->name);
+
+ /* Give the Google software codec a secondary rank,
+ * everything else is likely a hardware codec */
+ if (g_str_has_prefix (codec_info->name, "OMX.google"))
+ rank = GST_RANK_SECONDARY;
+ else
+ rank = GST_RANK_PRIMARY;
+
+ ret |= gst_element_register (plugin, element_name, rank, subtype);
+ g_free (element_name);
+
+ is_video = FALSE;
+ }
+ }
+
+ return ret;
+}
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+ const gchar *ignore;
+
+ GST_DEBUG_CATEGORY_INIT (gst_amc_debug, "amc", 0, "android-media-codec");
+
+ pthread_key_create (&current_jni_env, gst_amc_detach_current_thread);
+
+ if (!initialize_java_vm ())
+ return FALSE;
+
+ gst_plugin_add_dependency_simple (plugin, NULL, "/etc", "media_codecs.xml",
+ GST_PLUGIN_DEPENDENCY_FLAG_NONE);
+
+ if (!get_java_classes ())
+ return FALSE;
+
+ /* Set this to TRUE to allow registering decoders that have
+ * any unknown color formats, or encoders that only have
+ * unknown color formats
+ */
+ ignore = g_getenv ("GST_AMC_IGNORE_UNKNOWN_COLOR_FORMATS");
+ if (ignore && strcmp (ignore, "yes") == 0)
+ ignore_unknown_color_formats = TRUE;
+
+ if (!scan_codecs (plugin))
+ return FALSE;
+
+ gst_amc_codec_info_quark = g_quark_from_static_string ("gst-amc-codec-info");
+
+ if (!register_codecs (plugin))
+ return FALSE;
+
+ return TRUE;
+}
+
+#ifdef GST_PLUGIN_DEFINE2
+GST_PLUGIN_DEFINE2 (GST_VERSION_MAJOR,
+ GST_VERSION_MINOR,
+ androidmedia,
+ "Android Media plugin",
+ plugin_init,
+ PACKAGE_VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
+#else
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+ GST_VERSION_MINOR,
+ "androidmedia",
+ "Android Media plugin",
+ plugin_init,
+ PACKAGE_VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
+#endif
diff --git a/sys/androidmedia/gstamc.h b/sys/androidmedia/gstamc.h
new file mode 100644
index 00000000..9568b493
--- /dev/null
+++ b/sys/androidmedia/gstamc.h
@@ -0,0 +1,145 @@
+/*
+ * Copyright (C) 2012, Collabora Ltd.
+ * Author: Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation
+ * version 2.1 of the License.
+ *
+ * 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+
+#ifndef __GST_AMC_H__
+#define __GST_AMC_H__
+
+#include <gst/gst.h>
+#include <gst/video/video.h>
+#include <gst/audio/multichannel.h>
+#include <jni.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GstAmcCodecInfo GstAmcCodecInfo;
+typedef struct _GstAmcCodecType GstAmcCodecType;
+typedef struct _GstAmcCodec GstAmcCodec;
+typedef struct _GstAmcBufferInfo GstAmcBufferInfo;
+typedef struct _GstAmcFormat GstAmcFormat;
+typedef struct _GstAmcBuffer GstAmcBuffer;
+
+struct _GstAmcCodecType {
+ gchar *mime;
+
+ gint *color_formats;
+ gint n_color_formats;
+
+ struct {
+ gint profile;
+ gint level;
+ } *profile_levels;
+ gint n_profile_levels;
+};
+
+struct _GstAmcCodecInfo {
+ gchar *name;
+ gboolean is_encoder;
+ GstAmcCodecType *supported_types;
+ gint n_supported_types;
+};
+
+struct _GstAmcBuffer {
+ jobject object; /* global reference */
+ guint8 *data;
+ gsize size;
+};
+
+struct _GstAmcFormat {
+ /* < private > */
+ jobject object; /* global reference */
+};
+
+struct _GstAmcCodec {
+ /* < private > */
+ jobject object; /* global reference */
+};
+
+struct _GstAmcBufferInfo {
+ gint flags;
+ gint offset;
+ gint64 presentation_time_us;
+ gint size;
+};
+
+extern GQuark gst_amc_codec_info_quark;
+
+GstAmcCodec * gst_amc_codec_new (const gchar *name);
+void gst_amc_codec_free (GstAmcCodec * codec);
+
+gboolean gst_amc_codec_configure (GstAmcCodec * codec, GstAmcFormat * format, gint flags);
+GstAmcFormat * gst_amc_codec_get_output_format (GstAmcCodec * codec);
+
+gboolean gst_amc_codec_start (GstAmcCodec * codec);
+gboolean gst_amc_codec_stop (GstAmcCodec * codec);
+gboolean gst_amc_codec_flush (GstAmcCodec * codec);
+gboolean gst_amc_codec_release (GstAmcCodec * codec);
+
+GstAmcBuffer * gst_amc_codec_get_output_buffers (GstAmcCodec * codec, gsize * n_buffers);
+GstAmcBuffer * gst_amc_codec_get_input_buffers (GstAmcCodec * codec, gsize * n_buffers);
+void gst_amc_codec_free_buffers (GstAmcBuffer * buffers, gsize n_buffers);
+
+gint gst_amc_codec_dequeue_input_buffer (GstAmcCodec * codec, gint64 timeoutUs);
+gint gst_amc_codec_dequeue_output_buffer (GstAmcCodec * codec, GstAmcBufferInfo *info, gint64 timeoutUs);
+
+gboolean gst_amc_codec_queue_input_buffer (GstAmcCodec * codec, gint index, const GstAmcBufferInfo *info);
+gboolean gst_amc_codec_release_output_buffer (GstAmcCodec * codec, gint index);
+
+
+GstAmcFormat * gst_amc_format_new_audio (const gchar *mime, gint sample_rate, gint channels);
+GstAmcFormat * gst_amc_format_new_video (const gchar *mime, gint width, gint height);
+void gst_amc_format_free (GstAmcFormat * format);
+
+gchar * gst_amc_format_to_string (GstAmcFormat * format);
+
+gboolean gst_amc_format_contains_key (GstAmcFormat *format, const gchar *key);
+
+gboolean gst_amc_format_get_float (GstAmcFormat *format, const gchar *key, gfloat *value);
+void gst_amc_format_set_float (GstAmcFormat *format, const gchar *key, gfloat value);
+gboolean gst_amc_format_get_int (GstAmcFormat *format, const gchar *key, gint *value);
+void gst_amc_format_set_int (GstAmcFormat *format, const gchar *key, gint value);
+gboolean gst_amc_format_get_string (GstAmcFormat *format, const gchar *key, gchar **value);
+void gst_amc_format_set_string (GstAmcFormat *format, const gchar *key, const gchar *value);
+gboolean gst_amc_format_get_buffer (GstAmcFormat *format, const gchar *key, GstBuffer **value);
+void gst_amc_format_set_buffer (GstAmcFormat *format, const gchar *key, GstBuffer *value);
+
+GstVideoFormat gst_amc_color_format_to_video_format (gint color_format);
+gint gst_amc_video_format_to_color_format (GstVideoFormat video_format);
+
+const gchar * gst_amc_avc_profile_to_string (gint profile, const gchar **alternative);
+gint gst_amc_avc_profile_from_string (const gchar *profile);
+const gchar * gst_amc_avc_level_to_string (gint level);
+gint gst_amc_avc_level_from_string (const gchar *level);
+gint gst_amc_h263_profile_to_gst_id (gint profile);
+gint gst_amc_h263_profile_from_gst_id (gint profile);
+gint gst_amc_h263_level_to_gst_id (gint level);
+gint gst_amc_h263_level_from_gst_id (gint level);
+const gchar * gst_amc_mpeg4_profile_to_string (gint profile);
+gint gst_amc_avc_mpeg4_profile_from_string (const gchar *profile);
+const gchar * gst_amc_mpeg4_level_to_string (gint level);
+gint gst_amc_mpeg4_level_from_string (const gchar *level);
+const gchar * gst_amc_aac_profile_to_string (gint profile);
+gint gst_amc_aac_profile_from_string (const gchar *profile);
+
+GstAudioChannelPosition* gst_amc_audio_channel_mask_to_positions (guint32 channel_mask, gint channels);
+guint32 gst_amc_audio_channel_mask_from_positions (GstAudioChannelPosition *positions, gint channels);
+
+G_END_DECLS
+
+#endif /* __GST_AMC_H__ */
diff --git a/sys/androidmedia/gstamcaudiodec.c b/sys/androidmedia/gstamcaudiodec.c
new file mode 100644
index 00000000..31a8bf5f
--- /dev/null
+++ b/sys/androidmedia/gstamcaudiodec.c
@@ -0,0 +1,1230 @@
+/*
+ * Initially based on gst-omx/omx/gstomxvideodec.c
+ *
+ * Copyright (C) 2011, Hewlett-Packard Development Company, L.P.
+ * Author: Sebastian Dröge <sebastian.droege@collabora.co.uk>, Collabora Ltd.
+ *
+ * Copyright (C) 2012, Collabora Ltd.
+ * Author: Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation
+ * version 2.1 of the License.
+ *
+ * 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst.h>
+#include <gst/audio/multichannel.h>
+#include <string.h>
+
+#ifdef HAVE_ORC
+#include <orc/orc.h>
+#else
+#define orc_memcpy memcpy
+#endif
+
+#include "gstamcaudiodec.h"
+#include "gstamc-constants.h"
+
+GST_DEBUG_CATEGORY_STATIC (gst_amc_audio_dec_debug_category);
+#define GST_CAT_DEFAULT gst_amc_audio_dec_debug_category
+
+/* prototypes */
+static void gst_amc_audio_dec_finalize (GObject * object);
+
+static GstStateChangeReturn
+gst_amc_audio_dec_change_state (GstElement * element,
+ GstStateChange transition);
+
+static gboolean gst_amc_audio_dec_open (GstAudioDecoder * decoder);
+static gboolean gst_amc_audio_dec_close (GstAudioDecoder * decoder);
+static gboolean gst_amc_audio_dec_start (GstAudioDecoder * decoder);
+static gboolean gst_amc_audio_dec_stop (GstAudioDecoder * decoder);
+static gboolean gst_amc_audio_dec_set_format (GstAudioDecoder * decoder,
+ GstCaps * caps);
+static void gst_amc_audio_dec_flush (GstAudioDecoder * decoder, gboolean hard);
+static GstFlowReturn gst_amc_audio_dec_handle_frame (GstAudioDecoder * decoder,
+ GstBuffer * buffer);
+
+static GstFlowReturn gst_amc_audio_dec_drain (GstAmcAudioDec * self);
+
+enum
+{
+ PROP_0
+};
+
+/* class initialization */
+
+#define DEBUG_INIT(bla) \
+ GST_DEBUG_CATEGORY_INIT (gst_amc_audio_dec_debug_category, "amcaudiodec", 0, \
+ "Android MediaCodec audio decoder");
+
+GST_BOILERPLATE_FULL (GstAmcAudioDec, gst_amc_audio_dec, GstAudioDecoder,
+ GST_TYPE_AUDIO_DECODER, DEBUG_INIT);
+
+static GstCaps *
+create_sink_caps (const GstAmcCodecInfo * codec_info)
+{
+ GstCaps *ret;
+ gint i;
+
+ ret = gst_caps_new_empty ();
+
+ for (i = 0; i < codec_info->n_supported_types; i++) {
+ const GstAmcCodecType *type = &codec_info->supported_types[i];
+
+ if (strcmp (type->mime, "audio/mpeg") == 0) {
+ GstStructure *tmp;
+
+ tmp = gst_structure_new ("audio/mpeg",
+ "mpegversion", G_TYPE_INT, 1,
+ "rate", GST_TYPE_INT_RANGE, 1, G_MAXINT,
+ "channels", GST_TYPE_INT_RANGE, 1, G_MAXINT,
+ "parsed", G_TYPE_BOOLEAN, TRUE, NULL);
+ gst_caps_merge_structure (ret, tmp);
+ } else if (strcmp (type->mime, "audio/3gpp") == 0) {
+ GstStructure *tmp;
+
+ tmp = gst_structure_new ("audio/AMR",
+ "rate", GST_TYPE_INT_RANGE, 1, G_MAXINT,
+ "channels", GST_TYPE_INT_RANGE, 1, G_MAXINT, NULL);
+ gst_caps_merge_structure (ret, tmp);
+ } else if (strcmp (type->mime, "audio/amr-wb") == 0) {
+ GstStructure *tmp;
+
+ tmp = gst_structure_new ("audio/AMR-WB",
+ "rate", GST_TYPE_INT_RANGE, 1, G_MAXINT,
+ "channels", GST_TYPE_INT_RANGE, 1, G_MAXINT, NULL);
+ gst_caps_merge_structure (ret, tmp);
+ } else if (strcmp (type->mime, "audio/mp4a-latm") == 0) {
+ gint j;
+ GstStructure *tmp, *tmp2;
+ gboolean have_profile = FALSE;
+ GValue va = { 0, };
+ GValue v = { 0, };
+
+ g_value_init (&va, GST_TYPE_LIST);
+ g_value_init (&v, G_TYPE_STRING);
+ g_value_set_string (&v, "raw");
+ gst_value_list_append_value (&va, &v);
+ g_value_set_string (&v, "adts");
+ gst_value_list_append_value (&va, &v);
+ g_value_unset (&v);
+
+ tmp = gst_structure_new ("audio/mpeg",
+ "mpegversion", G_TYPE_INT, 4,
+ "rate", GST_TYPE_INT_RANGE, 1, G_MAXINT,
+ "channels", GST_TYPE_INT_RANGE, 1, G_MAXINT,
+ "framed", G_TYPE_BOOLEAN, TRUE, NULL);
+ gst_structure_set_value (tmp, "stream-format", &va);
+ g_value_unset (&va);
+
+ for (j = 0; j < type->n_profile_levels; j++) {
+ const gchar *profile;
+
+ profile =
+ gst_amc_aac_profile_to_string (type->profile_levels[j].profile);
+
+ if (!profile) {
+ GST_ERROR ("Unable to map AAC profile 0x%08x",
+ type->profile_levels[j].profile);
+ continue;
+ }
+
+ tmp2 = gst_structure_copy (tmp);
+ gst_structure_set (tmp2, "profile", G_TYPE_STRING, profile, NULL);
+ gst_caps_merge_structure (ret, tmp2);
+
+ have_profile = TRUE;
+ }
+
+ if (!have_profile) {
+ gst_caps_merge_structure (ret, tmp);
+ } else {
+ gst_structure_free (tmp);
+ }
+ } else if (strcmp (type->mime, "audio/g711-alaw") == 0) {
+ GstStructure *tmp;
+
+ tmp = gst_structure_new ("audio/x-alaw",
+ "rate", GST_TYPE_INT_RANGE, 1, G_MAXINT,
+ "channels", GST_TYPE_INT_RANGE, 1, G_MAXINT, NULL);
+ gst_caps_merge_structure (ret, tmp);
+ } else if (strcmp (type->mime, "audio/g711-mlaw") == 0) {
+ GstStructure *tmp;
+
+ tmp = gst_structure_new ("audio/x-mulaw",
+ "rate", GST_TYPE_INT_RANGE, 1, G_MAXINT,
+ "channels", GST_TYPE_INT_RANGE, 1, G_MAXINT, NULL);
+ gst_caps_merge_structure (ret, tmp);
+ } else if (strcmp (type->mime, "audio/vorbis") == 0) {
+ GstStructure *tmp;
+
+ tmp = gst_structure_new ("audio/x-vorbis",
+ "rate", GST_TYPE_INT_RANGE, 1, G_MAXINT,
+ "channels", GST_TYPE_INT_RANGE, 1, G_MAXINT, NULL);
+ gst_caps_merge_structure (ret, tmp);
+ } else if (strcmp (type->mime, "audio/flac") == 0) {
+ GstStructure *tmp;
+
+ tmp = gst_structure_new ("audio/x-flac",
+ "rate", GST_TYPE_INT_RANGE, 1, G_MAXINT,
+ "channels", GST_TYPE_INT_RANGE, 1, G_MAXINT,
+ "framed", G_TYPE_BOOLEAN, TRUE, NULL);
+ gst_caps_merge_structure (ret, tmp);
+ } else if (strcmp (type->mime, "audio/mpeg-L2") == 0) {
+ GstStructure *tmp;
+
+ tmp = gst_structure_new ("audio/mpeg",
+ "mpegversion", G_TYPE_INT, 1,
+ "layer", G_TYPE_INT, 2,
+ "rate", GST_TYPE_INT_RANGE, 1, G_MAXINT,
+ "channels", GST_TYPE_INT_RANGE, 1, G_MAXINT,
+ "parsed", G_TYPE_BOOLEAN, TRUE, NULL);
+ gst_caps_merge_structure (ret, tmp);
+ } else {
+ GST_WARNING ("Unsupported mimetype '%s'", type->mime);
+ }
+ }
+
+ return ret;
+}
+
+static const gchar *
+caps_to_mime (GstCaps * caps)
+{
+ GstStructure *s;
+ const gchar *name;
+
+ s = gst_caps_get_structure (caps, 0);
+ if (!s)
+ return NULL;
+
+ name = gst_structure_get_name (s);
+
+ if (strcmp (name, "audio/mpeg") == 0) {
+ gint mpegversion;
+
+ if (!gst_structure_get_int (s, "mpegversion", &mpegversion))
+ return NULL;
+
+ if (mpegversion == 1) {
+ gint layer;
+
+ if (!gst_structure_get_int (s, "layer", &layer) || layer == 3)
+ return "audio/mpeg";
+ else if (layer == 2)
+ return "audio/mpeg-L2";
+ } else if (mpegversion == 2 || mpegversion == 4) {
+ return "audio/mp4a-latm";
+ }
+ } else if (strcmp (name, "audio/AMR") == 0) {
+ return "audio/3gpp";
+ } else if (strcmp (name, "audio/AMR-WB") == 0) {
+ return "audio/amr-wb";
+ } else if (strcmp (name, "audio/x-alaw") == 0) {
+ return "audio/g711-alaw";
+ } else if (strcmp (name, "audio/x-mulaw") == 0) {
+ return "audio/g711-mlaw";
+ } else if (strcmp (name, "audio/x-vorbis") == 0) {
+ return "audio/vorbis";
+ }
+
+ return NULL;
+}
+
+static GstCaps *
+create_src_caps (const GstAmcCodecInfo * codec_info)
+{
+ GstCaps *ret;
+
+ ret = gst_caps_new_simple ("audio/x-raw-int",
+ "rate", GST_TYPE_INT_RANGE, 1, G_MAXINT,
+ "channels", GST_TYPE_INT_RANGE, 1, G_MAXINT,
+ "width", G_TYPE_INT, 16,
+ "depth", G_TYPE_INT, 16,
+ "signed", G_TYPE_BOOLEAN, TRUE,
+ "endianness", G_TYPE_INT, G_BYTE_ORDER, NULL);
+
+ return ret;
+}
+
+static void
+gst_amc_audio_dec_base_init (gpointer g_class)
+{
+ GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
+ GstAmcAudioDecClass *audiodec_class = GST_AMC_AUDIO_DEC_CLASS (g_class);
+ const GstAmcCodecInfo *codec_info;
+ GstPadTemplate *templ;
+ GstCaps *caps;
+ gchar *longname;
+
+ codec_info =
+ g_type_get_qdata (G_TYPE_FROM_CLASS (g_class), gst_amc_codec_info_quark);
+ /* This happens for the base class and abstract subclasses */
+ if (!codec_info)
+ return;
+
+ audiodec_class->codec_info = codec_info;
+
+ /* Add pad templates */
+ caps = create_sink_caps (codec_info);
+ templ = gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, caps);
+ gst_element_class_add_pad_template (element_class, templ);
+ gst_object_unref (templ);
+
+ caps = create_src_caps (codec_info);
+ templ = gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS, caps);
+ gst_element_class_add_pad_template (element_class, templ);
+ gst_object_unref (templ);
+
+ longname = g_strdup_printf ("Android MediaCodec %s", codec_info->name);
+ gst_element_class_set_details_simple (element_class,
+ codec_info->name,
+ "Codec/Decoder/Audio",
+ longname, "Sebastian Dröge <sebastian.droege@collabora.co.uk>");
+ g_free (longname);
+}
+
+static void
+gst_amc_audio_dec_class_init (GstAmcAudioDecClass * klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+ GstAudioDecoderClass *audiodec_class = GST_AUDIO_DECODER_CLASS (klass);
+
+ gobject_class->finalize = gst_amc_audio_dec_finalize;
+
+ element_class->change_state =
+ GST_DEBUG_FUNCPTR (gst_amc_audio_dec_change_state);
+
+ audiodec_class->start = GST_DEBUG_FUNCPTR (gst_amc_audio_dec_start);
+ audiodec_class->stop = GST_DEBUG_FUNCPTR (gst_amc_audio_dec_stop);
+#if 0
+ audiodec_class->open = GST_DEBUG_FUNCPTR (gst_amc_audio_dec_open);
+ audiodec_class->close = GST_DEBUG_FUNCPTR (gst_amc_audio_dec_close);
+#endif
+ audiodec_class->flush = GST_DEBUG_FUNCPTR (gst_amc_audio_dec_flush);
+ audiodec_class->set_format = GST_DEBUG_FUNCPTR (gst_amc_audio_dec_set_format);
+ audiodec_class->handle_frame =
+ GST_DEBUG_FUNCPTR (gst_amc_audio_dec_handle_frame);
+}
+
+static void
+gst_amc_audio_dec_init (GstAmcAudioDec * self, GstAmcAudioDecClass * klass)
+{
+ gst_audio_decoder_set_needs_format (GST_AUDIO_DECODER (self), TRUE);
+ gst_audio_decoder_set_drainable (GST_AUDIO_DECODER (self), TRUE);
+
+ self->drain_lock = g_mutex_new ();
+ self->drain_cond = g_cond_new ();
+}
+
+static gboolean
+gst_amc_audio_dec_open (GstAudioDecoder * decoder)
+{
+ GstAmcAudioDec *self = GST_AMC_AUDIO_DEC (decoder);
+ GstAmcAudioDecClass *klass = GST_AMC_AUDIO_DEC_GET_CLASS (self);
+
+ GST_DEBUG_OBJECT (self, "Opening decoder");
+
+ self->codec = gst_amc_codec_new (klass->codec_info->name);
+ if (!self->codec)
+ return FALSE;
+ self->started = FALSE;
+ self->flushing = TRUE;
+
+ GST_DEBUG_OBJECT (self, "Opened decoder");
+
+ return TRUE;
+}
+
+static gboolean
+gst_amc_audio_dec_close (GstAudioDecoder * decoder)
+{
+ GstAmcAudioDec *self = GST_AMC_AUDIO_DEC (decoder);
+
+ GST_DEBUG_OBJECT (self, "Closing decoder");
+
+ if (self->codec)
+ gst_amc_codec_free (self->codec);
+ self->codec = NULL;
+
+ self->started = FALSE;
+ self->flushing = TRUE;
+
+ GST_DEBUG_OBJECT (self, "Closed decoder");
+
+ return TRUE;
+}
+
+static void
+gst_amc_audio_dec_finalize (GObject * object)
+{
+ GstAmcAudioDec *self = GST_AMC_AUDIO_DEC (object);
+
+ g_mutex_free (self->drain_lock);
+ g_cond_free (self->drain_cond);
+
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static GstStateChangeReturn
+gst_amc_audio_dec_change_state (GstElement * element, GstStateChange transition)
+{
+ GstAmcAudioDec *self;
+ GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
+
+ g_return_val_if_fail (GST_IS_AMC_AUDIO_DEC (element),
+ GST_STATE_CHANGE_FAILURE);
+ self = GST_AMC_AUDIO_DEC (element);
+
+ switch (transition) {
+ case GST_STATE_CHANGE_NULL_TO_READY:
+ break;
+ case GST_STATE_CHANGE_READY_TO_PAUSED:
+ self->downstream_flow_ret = GST_FLOW_OK;
+ self->draining = FALSE;
+ self->started = FALSE;
+ if (!gst_amc_audio_dec_open (GST_AUDIO_DECODER (self)))
+ return GST_STATE_CHANGE_FAILURE;
+ break;
+ case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+ break;
+ case GST_STATE_CHANGE_PAUSED_TO_READY:
+ self->flushing = TRUE;
+ gst_amc_codec_flush (self->codec);
+ g_mutex_lock (self->drain_lock);
+ self->draining = FALSE;
+ g_cond_broadcast (self->drain_cond);
+ g_mutex_unlock (self->drain_lock);
+ break;
+ default:
+ break;
+ }
+
+ if (ret == GST_STATE_CHANGE_FAILURE)
+ return ret;
+
+ ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+ if (ret == GST_STATE_CHANGE_FAILURE)
+ return ret;
+
+ switch (transition) {
+ case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+ break;
+ case GST_STATE_CHANGE_PAUSED_TO_READY:
+ if (!gst_amc_audio_dec_close (GST_AUDIO_DECODER (self)))
+ return GST_STATE_CHANGE_FAILURE;
+ self->downstream_flow_ret = GST_FLOW_WRONG_STATE;
+ self->started = FALSE;
+ break;
+ case GST_STATE_CHANGE_READY_TO_NULL:
+ break;
+ default:
+ break;
+ }
+
+ return ret;
+}
+
+static gboolean
+gst_amc_audio_dec_set_src_caps (GstAmcAudioDec * self, GstAmcFormat * format)
+{
+ GstCaps *caps;
+ gint rate, channels;
+ guint32 channel_mask = 0;
+
+ if (!gst_amc_format_get_int (format, "sample-rate", &rate) ||
+ !gst_amc_format_get_int (format, "channel-count", &channels)) {
+ GST_ERROR_OBJECT (self, "Failed to get output format metadata");
+ return FALSE;
+ }
+
+ if (rate == 0 || channels == 0) {
+ GST_ERROR_OBJECT (self, "Rate or channels not set");
+ return FALSE;
+ }
+
+ /* Not always present */
+ if (gst_amc_format_contains_key (format, "channel-mask"))
+ gst_amc_format_get_int (format, "channel-mask", (gint *) & channel_mask);
+
+ if (self->positions)
+ g_free (self->positions);
+ self->positions =
+ gst_amc_audio_channel_mask_to_positions (channel_mask, channels);
+
+
+ caps = gst_caps_new_simple ("audio/x-raw-int",
+ "rate", G_TYPE_INT, rate,
+ "channels", G_TYPE_INT, channels,
+ "width", G_TYPE_INT, 16,
+ "depth", G_TYPE_INT, 16,
+ "signed", G_TYPE_BOOLEAN, TRUE,
+ "endianness", G_TYPE_INT, G_BYTE_ORDER, NULL);
+
+ if (self->positions)
+ gst_audio_set_channel_positions (gst_caps_get_structure (caps, 0),
+ self->positions);
+
+ self->channels = channels;
+ self->rate = rate;
+ gst_pad_set_caps (GST_AUDIO_DECODER_SRC_PAD (self), caps);
+ gst_caps_unref (caps);
+
+ self->input_caps_changed = FALSE;
+
+ return TRUE;
+}
+
+static void
+gst_amc_audio_dec_loop (GstAmcAudioDec * self)
+{
+ GstFlowReturn flow_ret = GST_FLOW_OK;
+ gboolean is_eos;
+ GstAmcBufferInfo buffer_info;
+ gint idx;
+
+ GST_AUDIO_DECODER_STREAM_LOCK (self);
+
+retry:
+ /*if (self->input_caps_changed) {
+ idx = INFO_OUTPUT_FORMAT_CHANGED;
+ } else { */
+ GST_DEBUG_OBJECT (self, "Waiting for available output buffer");
+ GST_AUDIO_DECODER_STREAM_UNLOCK (self);
+ /* Wait at most 100ms here, some codecs don't fail dequeueing if
+ * the codec is flushing, causing deadlocks during shutdown */
+ idx = gst_amc_codec_dequeue_output_buffer (self->codec, &buffer_info, 100000);
+ GST_AUDIO_DECODER_STREAM_LOCK (self);
+ /*} */
+
+ if (idx < 0) {
+ if (self->flushing)
+ goto flushing;
+
+ switch (idx) {
+ case INFO_OUTPUT_BUFFERS_CHANGED:{
+ GST_DEBUG_OBJECT (self, "Output buffers have changed");
+ if (self->output_buffers)
+ gst_amc_codec_free_buffers (self->output_buffers,
+ self->n_output_buffers);
+ self->output_buffers =
+ gst_amc_codec_get_output_buffers (self->codec,
+ &self->n_output_buffers);
+ if (!self->output_buffers)
+ goto get_output_buffers_error;
+ break;
+ }
+ case INFO_OUTPUT_FORMAT_CHANGED:{
+ GstAmcFormat *format;
+ gchar *format_string;
+
+ GST_DEBUG_OBJECT (self, "Output format has changed");
+
+ format = gst_amc_codec_get_output_format (self->codec);
+ if (!format)
+ goto format_error;
+
+ format_string = gst_amc_format_to_string (format);
+ GST_DEBUG_OBJECT (self, "Got new output format: %s", format_string);
+ g_free (format_string);
+
+ if (!gst_amc_audio_dec_set_src_caps (self, format)) {
+ gst_amc_format_free (format);
+ goto format_error;
+ }
+ gst_amc_format_free (format);
+
+ if (self->output_buffers)
+ gst_amc_codec_free_buffers (self->output_buffers,
+ self->n_output_buffers);
+ self->output_buffers =
+ gst_amc_codec_get_output_buffers (self->codec,
+ &self->n_output_buffers);
+ if (!self->output_buffers)
+ goto get_output_buffers_error;
+
+ goto retry;
+ break;
+ }
+ case INFO_TRY_AGAIN_LATER:
+ GST_DEBUG_OBJECT (self, "Dequeueing output buffer timed out");
+ goto retry;
+ break;
+ case G_MININT:
+ GST_ERROR_OBJECT (self, "Failure dequeueing output buffer");
+ goto dequeue_error;
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+
+ goto retry;
+ }
+
+ GST_DEBUG_OBJECT (self,
+ "Got output buffer at index %d: size %d time %" G_GINT64_FORMAT
+ " flags 0x%08x", idx, buffer_info.size, buffer_info.presentation_time_us,
+ buffer_info.flags);
+
+ is_eos = ! !(buffer_info.flags & BUFFER_FLAG_END_OF_STREAM);
+ self->n_buffers++;
+
+ if (buffer_info.size > 0) {
+ GstAmcAudioDecClass *klass = GST_AMC_AUDIO_DEC_GET_CLASS (self);
+ GstBuffer *outbuf;
+ GstAmcBuffer *buf;
+
+ /* This sometimes happens at EOS or if the input is not properly framed,
+ * let's handle it gracefully by allocating a new buffer for the current
+ * caps and filling it
+ */
+ if (idx >= self->n_output_buffers)
+ goto invalid_buffer_index;
+
+ if (strcmp (klass->codec_info->name, "OMX.google.mp3.decoder") == 0) {
+ /* Google's MP3 decoder outputs garbage in the first output buffer
+ * so we just drop it here */
+ if (self->n_buffers == 1) {
+ GST_DEBUG_OBJECT (self,
+ "Skipping first buffer of Google MP3 decoder output");
+ goto done;
+ }
+ }
+
+ outbuf = gst_buffer_try_new_and_alloc (buffer_info.size);
+ if (!outbuf)
+ goto failed_allocate;
+
+ buf = &self->output_buffers[idx];
+ orc_memcpy (GST_BUFFER_DATA (outbuf), buf->data + buffer_info.offset,
+ buffer_info.size);
+
+ /* FIXME: We should get one decoded input frame here for
+ * every buffer. If this is not the case somewhere, we will
+ * error out at some point and will need to add workarounds
+ */
+ flow_ret =
+ gst_audio_decoder_finish_frame (GST_AUDIO_DECODER (self), outbuf, 1);
+ }
+
+done:
+ if (!gst_amc_codec_release_output_buffer (self->codec, idx))
+ goto failed_release;
+
+ if (is_eos || flow_ret == GST_FLOW_UNEXPECTED) {
+ GST_AUDIO_DECODER_STREAM_UNLOCK (self);
+ g_mutex_lock (self->drain_lock);
+ if (self->draining) {
+ GST_DEBUG_OBJECT (self, "Drained");
+ self->draining = FALSE;
+ g_cond_broadcast (self->drain_cond);
+ } else if (flow_ret == GST_FLOW_OK) {
+ GST_DEBUG_OBJECT (self, "Component signalled EOS");
+ flow_ret = GST_FLOW_UNEXPECTED;
+ }
+ g_mutex_unlock (self->drain_lock);
+ GST_AUDIO_DECODER_STREAM_LOCK (self);
+ } else {
+ GST_DEBUG_OBJECT (self, "Finished frame: %s", gst_flow_get_name (flow_ret));
+ }
+
+ self->downstream_flow_ret = flow_ret;
+
+ if (flow_ret != GST_FLOW_OK)
+ goto flow_error;
+
+ GST_AUDIO_DECODER_STREAM_UNLOCK (self);
+
+ return;
+
+dequeue_error:
+ {
+ GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL),
+ ("Failed to dequeue output buffer"));
+ gst_pad_push_event (GST_AUDIO_DECODER_SRC_PAD (self), gst_event_new_eos ());
+ gst_pad_pause_task (GST_AUDIO_DECODER_SRC_PAD (self));
+ self->downstream_flow_ret = GST_FLOW_ERROR;
+ GST_AUDIO_DECODER_STREAM_UNLOCK (self);
+ return;
+ }
+
+get_output_buffers_error:
+ {
+ GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL),
+ ("Failed to get output buffers"));
+ gst_pad_push_event (GST_AUDIO_DECODER_SRC_PAD (self), gst_event_new_eos ());
+ gst_pad_pause_task (GST_AUDIO_DECODER_SRC_PAD (self));
+ self->downstream_flow_ret = GST_FLOW_ERROR;
+ GST_AUDIO_DECODER_STREAM_UNLOCK (self);
+ return;
+ }
+
+format_error:
+ {
+ GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL),
+ ("Failed to handle format"));
+ gst_pad_push_event (GST_AUDIO_DECODER_SRC_PAD (self), gst_event_new_eos ());
+ gst_pad_pause_task (GST_AUDIO_DECODER_SRC_PAD (self));
+ self->downstream_flow_ret = GST_FLOW_ERROR;
+ GST_AUDIO_DECODER_STREAM_UNLOCK (self);
+ return;
+ }
+failed_release:
+ {
+ GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL),
+ ("Failed to release output buffer index %d", idx));
+ gst_pad_push_event (GST_AUDIO_DECODER_SRC_PAD (self), gst_event_new_eos ());
+ gst_pad_pause_task (GST_AUDIO_DECODER_SRC_PAD (self));
+ self->downstream_flow_ret = GST_FLOW_ERROR;
+ GST_AUDIO_DECODER_STREAM_UNLOCK (self);
+ return;
+ }
+flushing:
+ {
+ GST_DEBUG_OBJECT (self, "Flushing -- stopping task");
+ gst_pad_pause_task (GST_AUDIO_DECODER_SRC_PAD (self));
+ self->downstream_flow_ret = GST_FLOW_WRONG_STATE;
+ GST_AUDIO_DECODER_STREAM_UNLOCK (self);
+ return;
+ }
+
+flow_error:
+ {
+ if (flow_ret == GST_FLOW_UNEXPECTED) {
+ GST_DEBUG_OBJECT (self, "EOS");
+ gst_pad_push_event (GST_AUDIO_DECODER_SRC_PAD (self),
+ gst_event_new_eos ());
+ gst_pad_pause_task (GST_AUDIO_DECODER_SRC_PAD (self));
+ } else
+ if (flow_ret == GST_FLOW_NOT_LINKED || flow_ret < GST_FLOW_UNEXPECTED) {
+ GST_ELEMENT_ERROR (self, STREAM, FAILED,
+ ("Internal data stream error."), ("stream stopped, reason %s",
+ gst_flow_get_name (flow_ret)));
+ gst_pad_push_event (GST_AUDIO_DECODER_SRC_PAD (self),
+ gst_event_new_eos ());
+ gst_pad_pause_task (GST_AUDIO_DECODER_SRC_PAD (self));
+ }
+ GST_AUDIO_DECODER_STREAM_UNLOCK (self);
+ return;
+ }
+
+invalid_buffer_index:
+ {
+ GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL),
+ ("Invalid input buffer index %d of %d", idx, self->n_input_buffers));
+ gst_pad_push_event (GST_AUDIO_DECODER_SRC_PAD (self), gst_event_new_eos ());
+ gst_pad_pause_task (GST_AUDIO_DECODER_SRC_PAD (self));
+ self->downstream_flow_ret = GST_FLOW_ERROR;
+ GST_AUDIO_DECODER_STREAM_UNLOCK (self);
+ return;
+ }
+
+failed_allocate:
+ {
+ GST_ELEMENT_ERROR (self, LIBRARY, SETTINGS, (NULL),
+ ("Failed to allocate output buffer"));
+ gst_pad_push_event (GST_AUDIO_DECODER_SRC_PAD (self), gst_event_new_eos ());
+ gst_pad_pause_task (GST_AUDIO_DECODER_SRC_PAD (self));
+ self->downstream_flow_ret = GST_FLOW_ERROR;
+ GST_AUDIO_DECODER_STREAM_UNLOCK (self);
+ return;
+ }
+}
+
+static gboolean
+gst_amc_audio_dec_start (GstAudioDecoder * decoder)
+{
+ GstAmcAudioDec *self;
+
+ self = GST_AMC_AUDIO_DEC (decoder);
+ self->last_upstream_ts = 0;
+ self->eos = FALSE;
+ self->downstream_flow_ret = GST_FLOW_OK;
+ self->started = FALSE;
+ self->flushing = TRUE;
+
+ return TRUE;
+}
+
+static gboolean
+gst_amc_audio_dec_stop (GstAudioDecoder * decoder)
+{
+ GstAmcAudioDec *self;
+
+ self = GST_AMC_AUDIO_DEC (decoder);
+ GST_DEBUG_OBJECT (self, "Stopping decoder");
+ self->flushing = TRUE;
+ if (self->started) {
+ gst_amc_codec_flush (self->codec);
+ gst_amc_codec_stop (self->codec);
+ self->started = FALSE;
+ if (self->input_buffers)
+ gst_amc_codec_free_buffers (self->input_buffers, self->n_input_buffers);
+ self->input_buffers = NULL;
+ if (self->output_buffers)
+ gst_amc_codec_free_buffers (self->output_buffers, self->n_output_buffers);
+ self->output_buffers = NULL;
+ }
+ gst_pad_stop_task (GST_AUDIO_DECODER_SRC_PAD (decoder));
+
+ g_free (self->positions);
+ self->positions = NULL;
+
+ g_list_foreach (self->codec_datas, (GFunc) gst_buffer_unref, NULL);
+ g_list_free (self->codec_datas);
+ self->codec_datas = NULL;
+
+ self->downstream_flow_ret = GST_FLOW_WRONG_STATE;
+ self->eos = FALSE;
+ g_mutex_lock (self->drain_lock);
+ self->draining = FALSE;
+ g_cond_broadcast (self->drain_cond);
+ g_mutex_unlock (self->drain_lock);
+ gst_buffer_replace (&self->codec_data, NULL);
+ GST_DEBUG_OBJECT (self, "Stopped decoder");
+ return TRUE;
+}
+
+static gboolean
+gst_amc_audio_dec_set_format (GstAudioDecoder * decoder, GstCaps * caps)
+{
+ GstAmcAudioDec *self;
+ GstStructure *s;
+ GstAmcFormat *format;
+ const gchar *mime;
+ gboolean is_format_change = FALSE;
+ gboolean needs_disable = FALSE;
+ gchar *format_string;
+ gint rate, channels;
+
+ self = GST_AMC_AUDIO_DEC (decoder);
+
+ GST_DEBUG_OBJECT (self, "Setting new caps %" GST_PTR_FORMAT, caps);
+
+ /* Check if the caps change is a real format change or if only irrelevant
+ * parts of the caps have changed or nothing at all.
+ */
+ is_format_change |= (!self->input_caps
+ || !gst_caps_is_equal (self->input_caps, caps));
+
+ needs_disable = self->started;
+
+ /* If the component is not started and a real format change happens
+ * we have to restart the component. If no real format change
+ * happened we can just exit here.
+ */
+ if (needs_disable && !is_format_change) {
+ /* Framerate or something minor changed */
+ self->input_caps_changed = TRUE;
+ GST_DEBUG_OBJECT (self,
+ "Already running and caps did not change the format");
+ return TRUE;
+ }
+
+ if (needs_disable && is_format_change) {
+ gst_amc_audio_dec_drain (self);
+ GST_AUDIO_DECODER_STREAM_UNLOCK (self);
+ gst_amc_audio_dec_stop (GST_AUDIO_DECODER (self));
+ GST_AUDIO_DECODER_STREAM_LOCK (self);
+ gst_amc_audio_dec_close (GST_AUDIO_DECODER (self));
+ if (!gst_amc_audio_dec_open (GST_AUDIO_DECODER (self))) {
+ GST_ERROR_OBJECT (self, "Failed to open codec again");
+ return FALSE;
+ }
+
+ if (!gst_amc_audio_dec_start (GST_AUDIO_DECODER (self))) {
+ GST_ERROR_OBJECT (self, "Failed to start codec again");
+ }
+ }
+ /* srcpad task is not running at this point */
+
+ mime = caps_to_mime (caps);
+ if (!mime) {
+ GST_ERROR_OBJECT (self, "Failed to convert caps to mime");
+ return FALSE;
+ }
+
+ s = gst_caps_get_structure (caps, 0);
+ if (!gst_structure_get_int (s, "rate", &rate) ||
+ !gst_structure_get_int (s, "channels", &channels)) {
+ GST_ERROR_OBJECT (self, "Failed to get rate/channels");
+ return FALSE;
+ }
+
+ format = gst_amc_format_new_audio (mime, rate, channels);
+ if (!format) {
+ GST_ERROR_OBJECT (self, "Failed to create audio format");
+ return FALSE;
+ }
+
+ /* FIXME: These buffers needs to be valid until the codec is stopped again */
+ g_list_foreach (self->codec_datas, (GFunc) gst_buffer_unref, NULL);
+ g_list_free (self->codec_datas);
+ self->codec_datas = NULL;
+ if (gst_structure_has_field (s, "codec_data")) {
+ const GValue *h = gst_structure_get_value (s, "codec_data");
+ GstBuffer *codec_data = gst_value_get_buffer (h);
+
+ self->codec_datas =
+ g_list_prepend (self->codec_datas, gst_buffer_ref (codec_data));
+ gst_amc_format_set_buffer (format, "csd-0", codec_data);
+ } else if (gst_structure_has_field (s, "streamheader")) {
+ const GValue *sh = gst_structure_get_value (s, "streamheader");
+ gint nsheaders = gst_value_array_get_size (sh);
+ GstBuffer *buf;
+ const GValue *h;
+ gint i, j;
+ gchar *fname;
+
+ for (i = 0, j = 0; i < nsheaders; i++) {
+ h = gst_value_array_get_value (sh, i);
+ buf = gst_value_get_buffer (h);
+
+ if (strcmp (mime, "audio/vorbis") == 0) {
+ guint8 header_type = GST_BUFFER_DATA (buf)[0];
+
+ /* Only use the identification and setup packets */
+ if (header_type != 0x01 && header_type != 0x05)
+ continue;
+ }
+
+ fname = g_strdup_printf ("csd-%d", j);
+ self->codec_datas =
+ g_list_prepend (self->codec_datas, gst_buffer_ref (buf));
+ gst_amc_format_set_buffer (format, fname, buf);
+ g_free (fname);
+ j++;
+ }
+ }
+
+ format_string = gst_amc_format_to_string (format);
+ GST_DEBUG_OBJECT (self, "Configuring codec with format: %s", format_string);
+ g_free (format_string);
+
+ self->n_buffers = 0;
+ if (!gst_amc_codec_configure (self->codec, format, 0)) {
+ GST_ERROR_OBJECT (self, "Failed to configure codec");
+ return FALSE;
+ }
+
+ gst_amc_format_free (format);
+
+ if (!gst_amc_codec_start (self->codec)) {
+ GST_ERROR_OBJECT (self, "Failed to start codec");
+ return FALSE;
+ }
+
+ if (self->input_buffers)
+ gst_amc_codec_free_buffers (self->input_buffers, self->n_input_buffers);
+ self->input_buffers =
+ gst_amc_codec_get_input_buffers (self->codec, &self->n_input_buffers);
+ if (!self->input_buffers) {
+ GST_ERROR_OBJECT (self, "Failed to get input buffers");
+ return FALSE;
+ }
+
+ self->started = TRUE;
+ self->input_caps_changed = TRUE;
+
+ /* Start the srcpad loop again */
+ self->flushing = FALSE;
+ self->downstream_flow_ret = GST_FLOW_OK;
+ gst_pad_start_task (GST_AUDIO_DECODER_SRC_PAD (self),
+ (GstTaskFunction) gst_amc_audio_dec_loop, decoder);
+
+ return TRUE;
+}
+
+static void
+gst_amc_audio_dec_flush (GstAudioDecoder * decoder, gboolean hard)
+{
+ GstAmcAudioDec *self;
+
+ self = GST_AMC_AUDIO_DEC (decoder);
+
+ GST_DEBUG_OBJECT (self, "Resetting decoder");
+
+ if (!self->started) {
+ GST_DEBUG_OBJECT (self, "Codec not started yet");
+ return;
+ }
+
+ self->flushing = TRUE;
+ gst_amc_codec_flush (self->codec);
+
+ /* Wait until the srcpad loop is finished,
+ * unlock GST_AUDIO_DECODER_STREAM_LOCK to prevent deadlocks
+ * caused by using this lock from inside the loop function */
+ GST_AUDIO_DECODER_STREAM_UNLOCK (self);
+ GST_PAD_STREAM_LOCK (GST_AUDIO_DECODER_SRC_PAD (self));
+ GST_PAD_STREAM_UNLOCK (GST_AUDIO_DECODER_SRC_PAD (self));
+ GST_AUDIO_DECODER_STREAM_LOCK (self);
+ self->flushing = FALSE;
+
+ /* Start the srcpad loop again */
+ self->last_upstream_ts = 0;
+ self->eos = FALSE;
+ self->downstream_flow_ret = GST_FLOW_OK;
+ gst_pad_start_task (GST_AUDIO_DECODER_SRC_PAD (self),
+ (GstTaskFunction) gst_amc_audio_dec_loop, decoder);
+
+ GST_DEBUG_OBJECT (self, "Reset decoder");
+}
+
+static GstFlowReturn
+gst_amc_audio_dec_handle_frame (GstAudioDecoder * decoder, GstBuffer * inbuf)
+{
+ GstAmcAudioDec *self;
+ gint idx;
+ GstAmcBuffer *buf;
+ GstAmcBufferInfo buffer_info;
+ guint offset = 0;
+ GstClockTime timestamp, duration, timestamp_offset = 0;
+
+ self = GST_AMC_AUDIO_DEC (decoder);
+
+ GST_DEBUG_OBJECT (self, "Handling frame");
+
+ /* Make sure to keep a reference to the input here,
+ * it can be unreffed from the other thread if
+ * finish_frame() is called */
+ if (inbuf)
+ inbuf = gst_buffer_ref (inbuf);
+
+ if (!self->started) {
+ GST_ERROR_OBJECT (self, "Codec not started yet");
+ if (inbuf)
+ gst_buffer_unref (inbuf);
+ return GST_FLOW_NOT_NEGOTIATED;
+ }
+
+ if (self->eos) {
+ GST_WARNING_OBJECT (self, "Got frame after EOS");
+ if (inbuf)
+ gst_buffer_unref (inbuf);
+ return GST_FLOW_UNEXPECTED;
+ }
+
+ if (self->flushing)
+ goto flushing;
+
+ if (self->downstream_flow_ret != GST_FLOW_OK)
+ goto downstream_error;
+
+ if (!inbuf)
+ return gst_amc_audio_dec_drain (self);
+
+ timestamp = GST_BUFFER_TIMESTAMP (inbuf);
+ duration = GST_BUFFER_DURATION (inbuf);
+
+ while (offset < GST_BUFFER_SIZE (inbuf)) {
+ /* Make sure to release the base class stream lock, otherwise
+ * _loop() can't call _finish_frame() and we might block forever
+ * because no input buffers are released */
+ GST_AUDIO_DECODER_STREAM_UNLOCK (self);
+ /* Wait at most 100ms here, some codecs don't fail dequeueing if
+ * the codec is flushing, causing deadlocks during shutdown */
+ idx = gst_amc_codec_dequeue_input_buffer (self->codec, 100000);
+ GST_AUDIO_DECODER_STREAM_LOCK (self);
+
+ if (idx < 0) {
+ if (self->flushing)
+ goto flushing;
+ switch (idx) {
+ case INFO_TRY_AGAIN_LATER:
+ GST_DEBUG_OBJECT (self, "Dequeueing input buffer timed out");
+ continue; /* next try */
+ break;
+ case G_MININT:
+ GST_ERROR_OBJECT (self, "Failed to dequeue input buffer");
+ goto dequeue_error;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+
+ continue;
+ }
+
+ if (idx >= self->n_input_buffers)
+ goto invalid_buffer_index;
+
+ if (self->flushing)
+ goto flushing;
+
+ if (self->downstream_flow_ret != GST_FLOW_OK) {
+ memset (&buffer_info, 0, sizeof (buffer_info));
+ gst_amc_codec_queue_input_buffer (self->codec, idx, &buffer_info);
+ goto downstream_error;
+ }
+
+ /* Now handle the frame */
+
+ /* Copy the buffer content in chunks of size as requested
+ * by the port */
+ buf = &self->input_buffers[idx];
+
+ memset (&buffer_info, 0, sizeof (buffer_info));
+ buffer_info.offset = 0;
+ buffer_info.size = MIN (GST_BUFFER_SIZE (inbuf) - offset, buf->size);
+
+ orc_memcpy (buf->data, GST_BUFFER_DATA (inbuf) + offset, buffer_info.size);
+
+ /* Interpolate timestamps if we're passing the buffer
+ * in multiple chunks */
+ if (offset != 0 && duration != GST_CLOCK_TIME_NONE) {
+ timestamp_offset =
+ gst_util_uint64_scale (offset, duration, GST_BUFFER_SIZE (inbuf));
+ }
+
+ if (timestamp != GST_CLOCK_TIME_NONE) {
+ buffer_info.presentation_time_us =
+ gst_util_uint64_scale (timestamp + timestamp_offset, 1, GST_USECOND);
+ self->last_upstream_ts = timestamp + timestamp_offset;
+ }
+ if (duration != GST_CLOCK_TIME_NONE)
+ self->last_upstream_ts += duration;
+
+ if (offset == 0) {
+ if (!GST_BUFFER_FLAG_IS_SET (inbuf, GST_BUFFER_FLAG_DELTA_UNIT))
+ buffer_info.flags |= BUFFER_FLAG_SYNC_FRAME;
+ }
+
+ offset += buffer_info.size;
+ GST_DEBUG_OBJECT (self,
+ "Queueing buffer %d: size %d time %" G_GINT64_FORMAT " flags 0x%08x",
+ idx, buffer_info.size, buffer_info.presentation_time_us,
+ buffer_info.flags);
+ if (!gst_amc_codec_queue_input_buffer (self->codec, idx, &buffer_info))
+ goto queue_error;
+ }
+
+ gst_buffer_unref (inbuf);
+
+ return self->downstream_flow_ret;
+
+downstream_error:
+ {
+ GST_ERROR_OBJECT (self, "Downstream returned %s",
+ gst_flow_get_name (self->downstream_flow_ret));
+ if (inbuf)
+ gst_buffer_unref (inbuf);
+ return self->downstream_flow_ret;
+ }
+invalid_buffer_index:
+ {
+ GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL),
+ ("Invalid input buffer index %d of %d", idx, self->n_input_buffers));
+ if (inbuf)
+ gst_buffer_unref (inbuf);
+ return GST_FLOW_ERROR;
+ }
+dequeue_error:
+ {
+ GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL),
+ ("Failed to dequeue input buffer"));
+ if (inbuf)
+ gst_buffer_unref (inbuf);
+ return GST_FLOW_ERROR;
+ }
+queue_error:
+ {
+ GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL),
+ ("Failed to queue input buffer"));
+ if (inbuf)
+ gst_buffer_unref (inbuf);
+ return GST_FLOW_ERROR;
+ }
+flushing:
+ {
+ GST_DEBUG_OBJECT (self, "Flushing -- returning WRONG_STATE");
+ if (inbuf)
+ gst_buffer_unref (inbuf);
+ return GST_FLOW_WRONG_STATE;
+ }
+}
+
+static GstFlowReturn
+gst_amc_audio_dec_drain (GstAmcAudioDec * self)
+{
+ GstFlowReturn ret;
+ gint idx;
+
+ GST_DEBUG_OBJECT (self, "Draining codec");
+ if (!self->started) {
+ GST_DEBUG_OBJECT (self, "Codec not started yet");
+ return GST_FLOW_OK;
+ }
+
+ /* Don't send EOS buffer twice, this doesn't work */
+ if (self->eos) {
+ GST_DEBUG_OBJECT (self, "Codec is EOS already");
+ return GST_FLOW_OK;
+ }
+
+ /* Make sure to release the base class stream lock, otherwise
+ * _loop() can't call _finish_frame() and we might block forever
+ * because no input buffers are released */
+ GST_AUDIO_DECODER_STREAM_UNLOCK (self);
+ /* Send an EOS buffer to the component and let the base
+ * class drop the EOS event. We will send it later when
+ * the EOS buffer arrives on the output port.
+ * Wait at most 0.5s here. */
+ idx = gst_amc_codec_dequeue_input_buffer (self->codec, 500000);
+ GST_AUDIO_DECODER_STREAM_LOCK (self);
+
+ if (idx >= 0 && idx < self->n_input_buffers) {
+ GstAmcBufferInfo buffer_info;
+
+ GST_AUDIO_DECODER_STREAM_UNLOCK (self);
+ g_mutex_lock (self->drain_lock);
+ self->draining = TRUE;
+
+ memset (&buffer_info, 0, sizeof (buffer_info));
+ buffer_info.size = 0;
+ buffer_info.presentation_time_us =
+ gst_util_uint64_scale (self->last_upstream_ts, 1, GST_USECOND);
+ buffer_info.flags |= BUFFER_FLAG_END_OF_STREAM;
+
+ if (gst_amc_codec_queue_input_buffer (self->codec, idx, &buffer_info)) {
+ GST_DEBUG_OBJECT (self, "Waiting until codec is drained");
+ g_cond_wait (self->drain_cond, self->drain_lock);
+ GST_DEBUG_OBJECT (self, "Drained codec");
+ ret = GST_FLOW_OK;
+ } else {
+ GST_ERROR_OBJECT (self, "Failed to queue input buffer");
+ ret = GST_FLOW_ERROR;
+ }
+
+ g_mutex_unlock (self->drain_lock);
+ GST_AUDIO_DECODER_STREAM_LOCK (self);
+ } else if (idx >= self->n_input_buffers) {
+ GST_ERROR_OBJECT (self, "Invalid input buffer index %d of %d",
+ idx, self->n_input_buffers);
+ ret = GST_FLOW_ERROR;
+ } else {
+ GST_ERROR_OBJECT (self, "Failed to acquire buffer for EOS: %d", idx);
+ ret = GST_FLOW_ERROR;
+ }
+
+ return ret;
+}
diff --git a/sys/androidmedia/gstamcaudiodec.h b/sys/androidmedia/gstamcaudiodec.h
new file mode 100644
index 00000000..5941a011
--- /dev/null
+++ b/sys/androidmedia/gstamcaudiodec.h
@@ -0,0 +1,99 @@
+/*
+ * Copyright (C) 2012, Collabora Ltd.
+ * Author: Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation
+ * version 2.1 of the License.
+ *
+ * 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+
+#ifndef __GST_AMC_AUDIO_DEC_H__
+#define __GST_AMC_AUDIO_DEC_H__
+
+#include <gst/gst.h>
+#include <gst/audio/multichannel.h>
+#include <gst/audio/gstaudiodecoder.h>
+
+#include "gstamc.h"
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_AMC_AUDIO_DEC \
+ (gst_amc_audio_dec_get_type())
+#define GST_AMC_AUDIO_DEC(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AMC_AUDIO_DEC,GstAmcAudioDec))
+#define GST_AMC_AUDIO_DEC_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AMC_AUDIO_DEC,GstAmcAudioDecClass))
+#define GST_AMC_AUDIO_DEC_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_AMC_AUDIO_DEC,GstAmcAudioDecClass))
+#define GST_IS_AMC_AUDIO_DEC(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AMC_AUDIO_DEC))
+#define GST_IS_AMC_AUDIO_DEC_CLASS(obj) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AMC_AUDIO_DEC))
+
+typedef struct _GstAmcAudioDec GstAmcAudioDec;
+typedef struct _GstAmcAudioDecClass GstAmcAudioDecClass;
+
+struct _GstAmcAudioDec
+{
+ GstAudioDecoder parent;
+
+ /* < private > */
+ GstAmcCodec *codec;
+ GstAmcBuffer *input_buffers, *output_buffers;
+ gsize n_input_buffers, n_output_buffers;
+
+ GstCaps *input_caps;
+ GList *codec_datas;
+ gboolean input_caps_changed;
+
+ /* Output format of the codec */
+ gint channels, rate;
+ GstAudioChannelPosition *positions;
+
+ GstBuffer *codec_data;
+ /* TRUE if the component is configured and saw
+ * the first buffer */
+ gboolean started;
+ gboolean flushing;
+
+ GstClockTime last_upstream_ts;
+
+ /* Draining state */
+ GMutex *drain_lock;
+ GCond *drain_cond;
+ /* TRUE if EOS buffers shouldn't be forwarded */
+ gboolean draining;
+
+ /* TRUE if upstream is EOS */
+ gboolean eos;
+
+ GstFlowReturn downstream_flow_ret;
+
+ /* Output buffers counter */
+ gint n_buffers;
+};
+
+struct _GstAmcAudioDecClass
+{
+ GstAudioDecoderClass parent_class;
+
+ const GstAmcCodecInfo *codec_info;
+};
+
+GType gst_amc_audio_dec_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_AMC_AUDIO_DEC_H__ */
diff --git a/sys/androidmedia/gstamcvideodec.c b/sys/androidmedia/gstamcvideodec.c
new file mode 100644
index 00000000..dc3d7b2d
--- /dev/null
+++ b/sys/androidmedia/gstamcvideodec.c
@@ -0,0 +1,1656 @@
+/*
+ * Initially based on gst-omx/omx/gstomxvideodec.c
+ *
+ * Copyright (C) 2011, Hewlett-Packard Development Company, L.P.
+ * Author: Sebastian Dröge <sebastian.droege@collabora.co.uk>, Collabora Ltd.
+ *
+ * Copyright (C) 2012, Collabora Ltd.
+ * Author: Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation
+ * version 2.1 of the License.
+ *
+ * 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst.h>
+#include <string.h>
+
+#ifdef HAVE_ORC
+#include <orc/orc.h>
+#else
+#define orc_memcpy memcpy
+#endif
+
+#include "gstamcvideodec.h"
+#include "gstamc-constants.h"
+
+GST_DEBUG_CATEGORY_STATIC (gst_amc_video_dec_debug_category);
+#define GST_CAT_DEFAULT gst_amc_video_dec_debug_category
+
+typedef struct _BufferIdentification BufferIdentification;
+struct _BufferIdentification
+{
+ guint64 timestamp;
+};
+
+static BufferIdentification *
+buffer_identification_new (GstClockTime timestamp)
+{
+ BufferIdentification *id = g_slice_new (BufferIdentification);
+
+ id->timestamp = timestamp;
+
+ return id;
+}
+
+static void
+buffer_identification_free (BufferIdentification * id)
+{
+ g_slice_free (BufferIdentification, id);
+}
+
+/* prototypes */
+static void gst_amc_video_dec_finalize (GObject * object);
+
+static GstStateChangeReturn
+gst_amc_video_dec_change_state (GstElement * element,
+ GstStateChange transition);
+
+static gboolean gst_amc_video_dec_open (GstVideoDecoder * decoder);
+static gboolean gst_amc_video_dec_close (GstVideoDecoder * decoder);
+static gboolean gst_amc_video_dec_start (GstVideoDecoder * decoder);
+static gboolean gst_amc_video_dec_stop (GstVideoDecoder * decoder);
+static gboolean gst_amc_video_dec_set_format (GstVideoDecoder * decoder,
+ GstVideoCodecState * state);
+static gboolean gst_amc_video_dec_reset (GstVideoDecoder * decoder,
+ gboolean hard);
+static GstFlowReturn gst_amc_video_dec_handle_frame (GstVideoDecoder * decoder,
+ GstVideoCodecFrame * frame);
+static GstFlowReturn gst_amc_video_dec_finish (GstVideoDecoder * decoder);
+
+static GstFlowReturn gst_amc_video_dec_drain (GstAmcVideoDec * self);
+
+enum
+{
+ PROP_0
+};
+
+/* class initialization */
+
+#define DEBUG_INIT(bla) \
+ GST_DEBUG_CATEGORY_INIT (gst_amc_video_dec_debug_category, "amcvideodec", 0, \
+ "Android MediaCodec video decoder");
+
+GST_BOILERPLATE_FULL (GstAmcVideoDec, gst_amc_video_dec, GstVideoDecoder,
+ GST_TYPE_VIDEO_DECODER, DEBUG_INIT);
+
+static GstCaps *
+create_sink_caps (const GstAmcCodecInfo * codec_info)
+{
+ GstCaps *ret;
+ gint i;
+
+ ret = gst_caps_new_empty ();
+
+ for (i = 0; i < codec_info->n_supported_types; i++) {
+ const GstAmcCodecType *type = &codec_info->supported_types[i];
+
+ if (strcmp (type->mime, "video/mp4v-es") == 0) {
+ gint j;
+ GstStructure *tmp, *tmp2;
+ gboolean have_profile_level = FALSE;
+
+ tmp = gst_structure_new ("video/mpeg",
+ "width", GST_TYPE_INT_RANGE, 16, 4096,
+ "height", GST_TYPE_INT_RANGE, 16, 4096,
+ "framerate", GST_TYPE_FRACTION_RANGE,
+ 0, 1, G_MAXINT, 1,
+ "mpegversion", G_TYPE_INT, 4,
+ "systemstream", G_TYPE_BOOLEAN, FALSE,
+ "parsed", G_TYPE_BOOLEAN, TRUE, NULL);
+
+ if (type->n_profile_levels) {
+ for (j = type->n_profile_levels - 1; j >= 0; j--) {
+ const gchar *profile, *level;
+ gint k;
+ GValue va = { 0, };
+ GValue v = { 0, };
+
+ g_value_init (&va, GST_TYPE_LIST);
+ g_value_init (&v, G_TYPE_STRING);
+
+ profile =
+ gst_amc_mpeg4_profile_to_string (type->profile_levels[j].profile);
+ if (!profile) {
+ GST_ERROR ("Unable to map MPEG4 profile 0x%08x",
+ type->profile_levels[j].profile);
+ continue;
+ }
+
+ for (k = 1; k <= type->profile_levels[j].level && k != 0; k <<= 1) {
+ level = gst_amc_mpeg4_level_to_string (k);
+ if (!level)
+ continue;
+
+ g_value_set_string (&v, level);
+ gst_value_list_append_value (&va, &v);
+ g_value_reset (&v);
+ }
+
+ tmp2 = gst_structure_copy (tmp);
+ gst_structure_set (tmp2, "profile", G_TYPE_STRING, profile, NULL);
+ gst_structure_set_value (tmp2, "level", &va);
+ g_value_unset (&va);
+ g_value_unset (&v);
+ gst_caps_merge_structure (ret, tmp2);
+ have_profile_level = TRUE;
+ }
+ }
+
+ if (!have_profile_level) {
+ gst_caps_merge_structure (ret, tmp);
+ } else {
+ gst_structure_free (tmp);
+ }
+ } else if (strcmp (type->mime, "video/3gpp") == 0) {
+ gint j;
+ GstStructure *tmp, *tmp2;
+ gboolean have_profile_level = FALSE;
+
+ tmp = gst_structure_new ("video/x-h263",
+ "width", GST_TYPE_INT_RANGE, 16, 4096,
+ "height", GST_TYPE_INT_RANGE, 16, 4096,
+ "framerate", GST_TYPE_FRACTION_RANGE,
+ 0, 1, G_MAXINT, 1,
+ "parsed", G_TYPE_BOOLEAN, TRUE,
+ "variant", G_TYPE_STRING, "itu", NULL);
+
+ if (type->n_profile_levels) {
+ for (j = type->n_profile_levels - 1; j >= 0; j--) {
+ gint profile, level;
+ gint k;
+ GValue va = { 0, };
+ GValue v = { 0, };
+
+ g_value_init (&va, GST_TYPE_LIST);
+ g_value_init (&v, G_TYPE_UINT);
+
+ profile =
+ gst_amc_h263_profile_to_gst_id (type->profile_levels[j].profile);
+
+ if (profile == -1) {
+ GST_ERROR ("Unable to map h263 profile 0x%08x",
+ type->profile_levels[j].profile);
+ continue;
+ }
+
+ for (k = 1; k <= type->profile_levels[j].level && k != 0; k <<= 1) {
+ level = gst_amc_h263_level_to_gst_id (k);
+ if (level == -1)
+ continue;
+
+ g_value_set_uint (&v, level);
+ gst_value_list_append_value (&va, &v);
+ g_value_reset (&v);
+ }
+ tmp2 = gst_structure_copy (tmp);
+ gst_structure_set (tmp2, "profile", G_TYPE_UINT, profile, NULL);
+ gst_structure_set_value (tmp2, "level", &va);
+ g_value_unset (&va);
+ g_value_unset (&v);
+ gst_caps_merge_structure (ret, tmp2);
+ have_profile_level = TRUE;
+ }
+ }
+
+ if (!have_profile_level) {
+ gst_caps_merge_structure (ret, tmp);
+ } else {
+ gst_structure_free (tmp);
+ }
+ } else if (strcmp (type->mime, "video/avc") == 0) {
+ gint j;
+ GstStructure *tmp, *tmp2;
+ gboolean have_profile_level = FALSE;
+
+ tmp = gst_structure_new ("video/x-h264",
+ "width", GST_TYPE_INT_RANGE, 16, 4096,
+ "height", GST_TYPE_INT_RANGE, 16, 4096,
+ "framerate", GST_TYPE_FRACTION_RANGE,
+ 0, 1, G_MAXINT, 1,
+ "parsed", G_TYPE_BOOLEAN, TRUE,
+ "stream-format", G_TYPE_STRING, "byte-stream",
+ "alignment", G_TYPE_STRING, "au", NULL);
+
+ if (type->n_profile_levels) {
+ for (j = type->n_profile_levels - 1; j >= 0; j--) {
+ const gchar *profile, *alternative = NULL, *level;
+ gint k;
+ GValue va = { 0, };
+ GValue v = { 0, };
+
+ g_value_init (&va, GST_TYPE_LIST);
+ g_value_init (&v, G_TYPE_STRING);
+
+ profile =
+ gst_amc_avc_profile_to_string (type->profile_levels[j].profile,
+ &alternative);
+
+ if (!profile) {
+ GST_ERROR ("Unable to map H264 profile 0x%08x",
+ type->profile_levels[j].profile);
+ continue;
+ }
+
+ for (k = 1; k <= type->profile_levels[j].level && k != 0; k <<= 1) {
+ level = gst_amc_avc_level_to_string (k);
+ if (!level)
+ continue;
+
+ g_value_set_string (&v, level);
+ gst_value_list_append_value (&va, &v);
+ g_value_reset (&v);
+ }
+ tmp2 = gst_structure_copy (tmp);
+ gst_structure_set (tmp2, "profile", G_TYPE_STRING, profile, NULL);
+ gst_structure_set_value (tmp2, "level", &va);
+ if (!alternative)
+ g_value_unset (&va);
+ g_value_unset (&v);
+ gst_caps_merge_structure (ret, tmp2);
+
+ if (alternative) {
+ tmp2 = gst_structure_copy (tmp);
+ gst_structure_set (tmp2, "profile", G_TYPE_STRING, alternative,
+ NULL);
+ gst_structure_set_value (tmp2, "level", &va);
+ g_value_unset (&va);
+ gst_caps_merge_structure (ret, tmp2);
+ }
+ have_profile_level = TRUE;
+ }
+ }
+
+ if (!have_profile_level) {
+ gst_caps_merge_structure (ret, tmp);
+ } else {
+ gst_structure_free (tmp);
+ }
+ } else if (strcmp (type->mime, "video/x-vnd.on2.vp8") == 0) {
+ GstStructure *tmp;
+
+ tmp = gst_structure_new ("video/x-vp8",
+ "width", GST_TYPE_INT_RANGE, 16, 4096,
+ "height", GST_TYPE_INT_RANGE, 16, 4096,
+ "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1, NULL);
+
+ gst_caps_merge_structure (ret, tmp);
+ } else if (strcmp (type->mime, "video/mpeg2") == 0) {
+ GstStructure *tmp;
+
+ tmp = gst_structure_new ("video/mpeg",
+ "width", GST_TYPE_INT_RANGE, 16, 4096,
+ "height", GST_TYPE_INT_RANGE, 16, 4096,
+ "framerate", GST_TYPE_FRACTION_RANGE,
+ 0, 1, G_MAXINT, 1,
+ "mpegversion", GST_TYPE_INT_RANGE, 1, 2,
+ "systemstream", G_TYPE_BOOLEAN, FALSE,
+ "parsed", G_TYPE_BOOLEAN, TRUE, NULL);
+
+ gst_caps_merge_structure (ret, tmp);
+ } else {
+ GST_WARNING ("Unsupported mimetype '%s'", type->mime);
+ }
+ }
+
+ return ret;
+}
+
+static const gchar *
+caps_to_mime (GstCaps * caps)
+{
+ GstStructure *s;
+ const gchar *name;
+
+ s = gst_caps_get_structure (caps, 0);
+ if (!s)
+ return NULL;
+
+ name = gst_structure_get_name (s);
+
+ if (strcmp (name, "video/mpeg") == 0) {
+ gint mpegversion;
+
+ if (!gst_structure_get_int (s, "mpegversion", &mpegversion))
+ return NULL;
+
+ if (mpegversion == 4)
+ return "video/mp4v-es";
+ else if (mpegversion == 1 || mpegversion == 2)
+ return "video/mpeg2";
+ } else if (strcmp (name, "video/x-h263") == 0) {
+ return "video/3gpp";
+ } else if (strcmp (name, "video/x-h264") == 0) {
+ return "video/avc";
+ } else if (strcmp (name, "video/x-vp8") == 0) {
+ return "video/x-vnd.on2.vp8";
+ }
+
+ return NULL;
+}
+
+static GstCaps *
+create_src_caps (const GstAmcCodecInfo * codec_info)
+{
+ GstCaps *ret;
+ gint i;
+
+ ret = gst_caps_new_empty ();
+
+ for (i = 0; i < codec_info->n_supported_types; i++) {
+ const GstAmcCodecType *type = &codec_info->supported_types[i];
+ gint j;
+
+ for (j = 0; j < type->n_color_formats; j++) {
+ GstVideoFormat format;
+ GstCaps *tmp;
+
+ format = gst_amc_color_format_to_video_format (type->color_formats[j]);
+ if (format == GST_VIDEO_FORMAT_UNKNOWN) {
+ GST_WARNING ("Unknown color format 0x%08x", type->color_formats[j]);
+ continue;
+ }
+ tmp = gst_video_format_new_template_caps (format);
+ gst_caps_merge (ret, tmp);
+ }
+ }
+
+ return ret;
+}
+
+static void
+gst_amc_video_dec_base_init (gpointer g_class)
+{
+ GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
+ GstAmcVideoDecClass *videodec_class = GST_AMC_VIDEO_DEC_CLASS (g_class);
+ const GstAmcCodecInfo *codec_info;
+ GstPadTemplate *templ;
+ GstCaps *caps;
+ gchar *longname;
+
+ codec_info =
+ g_type_get_qdata (G_TYPE_FROM_CLASS (g_class), gst_amc_codec_info_quark);
+ /* This happens for the base class and abstract subclasses */
+ if (!codec_info)
+ return;
+
+ videodec_class->codec_info = codec_info;
+
+ /* Add pad templates */
+ caps = create_sink_caps (codec_info);
+ templ = gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, caps);
+ gst_element_class_add_pad_template (element_class, templ);
+ gst_object_unref (templ);
+
+ caps = create_src_caps (codec_info);
+ templ = gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS, caps);
+ gst_element_class_add_pad_template (element_class, templ);
+ gst_object_unref (templ);
+
+ longname = g_strdup_printf ("Android MediaCodec %s", codec_info->name);
+ gst_element_class_set_details_simple (element_class,
+ codec_info->name,
+ "Codec/Decoder/Video",
+ longname, "Sebastian Dröge <sebastian.droege@collabora.co.uk>");
+ g_free (longname);
+}
+
+static void
+gst_amc_video_dec_class_init (GstAmcVideoDecClass * klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+ GstVideoDecoderClass *videodec_class = GST_VIDEO_DECODER_CLASS (klass);
+
+ gobject_class->finalize = gst_amc_video_dec_finalize;
+
+ element_class->change_state =
+ GST_DEBUG_FUNCPTR (gst_amc_video_dec_change_state);
+
+ videodec_class->start = GST_DEBUG_FUNCPTR (gst_amc_video_dec_start);
+ videodec_class->stop = GST_DEBUG_FUNCPTR (gst_amc_video_dec_stop);
+ videodec_class->open = GST_DEBUG_FUNCPTR (gst_amc_video_dec_open);
+ videodec_class->close = GST_DEBUG_FUNCPTR (gst_amc_video_dec_close);
+ videodec_class->reset = GST_DEBUG_FUNCPTR (gst_amc_video_dec_reset);
+ videodec_class->set_format = GST_DEBUG_FUNCPTR (gst_amc_video_dec_set_format);
+ videodec_class->handle_frame =
+ GST_DEBUG_FUNCPTR (gst_amc_video_dec_handle_frame);
+ videodec_class->finish = GST_DEBUG_FUNCPTR (gst_amc_video_dec_finish);
+}
+
+static void
+gst_amc_video_dec_init (GstAmcVideoDec * self, GstAmcVideoDecClass * klass)
+{
+ gst_video_decoder_set_packetized (GST_VIDEO_DECODER (self), TRUE);
+
+ self->drain_lock = g_mutex_new ();
+ self->drain_cond = g_cond_new ();
+}
+
+static gboolean
+gst_amc_video_dec_open (GstVideoDecoder * decoder)
+{
+ GstAmcVideoDec *self = GST_AMC_VIDEO_DEC (decoder);
+ GstAmcVideoDecClass *klass = GST_AMC_VIDEO_DEC_GET_CLASS (self);
+
+ GST_DEBUG_OBJECT (self, "Opening decoder");
+
+ self->codec = gst_amc_codec_new (klass->codec_info->name);
+ if (!self->codec)
+ return FALSE;
+ self->started = FALSE;
+ self->flushing = TRUE;
+
+ GST_DEBUG_OBJECT (self, "Opened decoder");
+
+ return TRUE;
+}
+
+static gboolean
+gst_amc_video_dec_close (GstVideoDecoder * decoder)
+{
+ GstAmcVideoDec *self = GST_AMC_VIDEO_DEC (decoder);
+
+ GST_DEBUG_OBJECT (self, "Closing decoder");
+
+ if (self->codec)
+ gst_amc_codec_free (self->codec);
+ self->codec = NULL;
+
+ self->started = FALSE;
+ self->flushing = TRUE;
+
+ GST_DEBUG_OBJECT (self, "Closed decoder");
+
+ return TRUE;
+}
+
+static void
+gst_amc_video_dec_finalize (GObject * object)
+{
+ GstAmcVideoDec *self = GST_AMC_VIDEO_DEC (object);
+
+ g_mutex_free (self->drain_lock);
+ g_cond_free (self->drain_cond);
+
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static GstStateChangeReturn
+gst_amc_video_dec_change_state (GstElement * element, GstStateChange transition)
+{
+ GstAmcVideoDec *self;
+ GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
+
+ g_return_val_if_fail (GST_IS_AMC_VIDEO_DEC (element),
+ GST_STATE_CHANGE_FAILURE);
+ self = GST_AMC_VIDEO_DEC (element);
+
+ switch (transition) {
+ case GST_STATE_CHANGE_NULL_TO_READY:
+ break;
+ case GST_STATE_CHANGE_READY_TO_PAUSED:
+ self->downstream_flow_ret = GST_FLOW_OK;
+ self->draining = FALSE;
+ self->started = FALSE;
+ break;
+ case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+ break;
+ case GST_STATE_CHANGE_PAUSED_TO_READY:
+ self->flushing = TRUE;
+ gst_amc_codec_flush (self->codec);
+ g_mutex_lock (self->drain_lock);
+ self->draining = FALSE;
+ g_cond_broadcast (self->drain_cond);
+ g_mutex_unlock (self->drain_lock);
+ break;
+ default:
+ break;
+ }
+
+ if (ret == GST_STATE_CHANGE_FAILURE)
+ return ret;
+
+ ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+ if (ret == GST_STATE_CHANGE_FAILURE)
+ return ret;
+
+ switch (transition) {
+ case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
+ break;
+ case GST_STATE_CHANGE_PAUSED_TO_READY:
+ self->downstream_flow_ret = GST_FLOW_WRONG_STATE;
+ self->started = FALSE;
+ break;
+ case GST_STATE_CHANGE_READY_TO_NULL:
+ break;
+ default:
+ break;
+ }
+
+ return ret;
+}
+
+#define MAX_FRAME_DIST_TIME (5 * GST_SECOND)
+#define MAX_FRAME_DIST_FRAMES (100)
+
+static GstVideoCodecFrame *
+_find_nearest_frame (GstAmcVideoDec * self, GstClockTime reference_timestamp)
+{
+ GList *l, *best_l = NULL;
+ GList *finish_frames = NULL;
+ GstVideoCodecFrame *best = NULL;
+ guint64 best_timestamp = 0;
+ guint64 best_diff = G_MAXUINT64;
+ BufferIdentification *best_id = NULL;
+ GList *frames;
+
+ frames = gst_video_decoder_get_frames (GST_VIDEO_DECODER (self));
+
+ for (l = frames; l; l = l->next) {
+ GstVideoCodecFrame *tmp = l->data;
+ BufferIdentification *id = gst_video_codec_frame_get_user_data (tmp);
+ guint64 timestamp, diff;
+
+ /* This happens for frames that were just added but
+ * which were not passed to the component yet. Ignore
+ * them here!
+ */
+ if (!id)
+ continue;
+
+ timestamp = id->timestamp;
+
+ if (timestamp > reference_timestamp)
+ diff = timestamp - reference_timestamp;
+ else
+ diff = reference_timestamp - timestamp;
+
+ if (best == NULL || diff < best_diff) {
+ best = tmp;
+ best_timestamp = timestamp;
+ best_diff = diff;
+ best_l = l;
+ best_id = id;
+
+ /* For frames without timestamp we simply take the first frame */
+ if ((reference_timestamp == 0 && timestamp == 0) || diff == 0)
+ break;
+ }
+ }
+
+ if (best_id) {
+ for (l = frames; l && l != best_l; l = l->next) {
+ GstVideoCodecFrame *tmp = l->data;
+ BufferIdentification *id = gst_video_codec_frame_get_user_data (tmp);
+ guint64 diff_time, diff_frames;
+
+ if (id->timestamp > best_timestamp)
+ break;
+
+ if (id->timestamp == 0 || best_timestamp == 0)
+ diff_time = 0;
+ else
+ diff_time = best_timestamp - id->timestamp;
+ diff_frames = best->system_frame_number - tmp->system_frame_number;
+
+ if (diff_time > MAX_FRAME_DIST_TIME
+ || diff_frames > MAX_FRAME_DIST_FRAMES) {
+ finish_frames = g_list_prepend (finish_frames, tmp);
+ }
+ }
+ }
+
+ if (finish_frames) {
+ g_warning ("%s: Too old frames, bug in decoder -- please file a bug",
+ GST_ELEMENT_NAME (self));
+ for (l = finish_frames; l; l = l->next) {
+ gst_video_decoder_drop_frame (GST_VIDEO_DECODER (self), l->data);
+ }
+ }
+
+ if (best)
+ gst_video_codec_frame_ref (best);
+
+ g_list_foreach (frames, (GFunc) gst_video_codec_frame_unref, NULL);
+ g_list_free (frames);
+
+ return best;
+}
+
+static gboolean
+gst_amc_video_dec_set_src_caps (GstAmcVideoDec * self, GstAmcFormat * format)
+{
+ GstVideoCodecState *output_state;
+ gint color_format, width, height;
+ gint stride, slice_height;
+ gint crop_left, crop_right;
+ gint crop_top, crop_bottom;
+ GstVideoFormat gst_format;
+
+ if (!gst_amc_format_get_int (format, "color-format", &color_format) ||
+ !gst_amc_format_get_int (format, "width", &width) ||
+ !gst_amc_format_get_int (format, "height", &height)) {
+ GST_ERROR_OBJECT (self, "Failed to get output format metadata");
+ return FALSE;
+ }
+
+ if (!gst_amc_format_get_int (format, "stride", &stride) ||
+ !gst_amc_format_get_int (format, "slice-height", &slice_height)) {
+ GST_ERROR_OBJECT (self, "Failed to get stride and slice-height");
+ return FALSE;
+ }
+
+ if (!gst_amc_format_get_int (format, "crop-left", &crop_left) ||
+ !gst_amc_format_get_int (format, "crop-right", &crop_right) ||
+ !gst_amc_format_get_int (format, "crop-top", &crop_top) ||
+ !gst_amc_format_get_int (format, "crop-bottom", &crop_bottom)) {
+ GST_ERROR_OBJECT (self, "Failed to get crop rectangle");
+ return FALSE;
+ }
+
+ if (width == 0 || height == 0) {
+ GST_ERROR_OBJECT (self, "Height or width not set");
+ return FALSE;
+ }
+
+ if (crop_bottom)
+ height = height - (height - crop_bottom - 1);
+ if (crop_top)
+ height = height - crop_top;
+
+ if (crop_right)
+ width = width - (width - crop_right - 1);
+ if (crop_left)
+ width = width - crop_left;
+
+ gst_format = gst_amc_color_format_to_video_format (color_format);
+ if (gst_format == GST_VIDEO_FORMAT_UNKNOWN) {
+ GST_ERROR_OBJECT (self, "Unknown color format 0x%08x", color_format);
+ return FALSE;
+ }
+
+ output_state = gst_video_decoder_set_output_state (GST_VIDEO_DECODER (self),
+ gst_format, width, height, self->input_state);
+
+ self->format = gst_format;
+ self->color_format = color_format;
+ self->height = height;
+ self->width = width;
+ self->stride = stride;
+ self->slice_height = slice_height;
+ self->crop_left = crop_left;
+ self->crop_right = crop_right;
+ self->crop_top = crop_top;
+ self->crop_bottom = crop_bottom;
+
+ gst_video_codec_state_unref (output_state);
+ self->input_state_changed = FALSE;
+
+ return TRUE;
+}
+
+/* The weird handling of cropping, alignment and everything is taken from
+ * platform/frameworks/media/libstagefright/colorconversion/ColorConversion.cpp
+ */
+static gboolean
+gst_amc_video_dec_fill_buffer (GstAmcVideoDec * self, gint idx,
+ const GstAmcBufferInfo * buffer_info, GstBuffer * outbuf)
+{
+ GstAmcVideoDecClass *klass = GST_AMC_VIDEO_DEC_GET_CLASS (self);
+ GstAmcBuffer *buf = &self->output_buffers[idx];
+ GstVideoCodecState *state =
+ gst_video_decoder_get_output_state (GST_VIDEO_DECODER (self));
+ GstVideoInfo *info = &state->info;
+ gboolean ret = FALSE;
+
+ if (idx >= self->n_output_buffers) {
+ GST_ERROR_OBJECT (self, "Invalid output buffer index %d of %d",
+ idx, self->n_output_buffers);
+ goto done;
+ }
+
+ /* Same video format */
+ if (buffer_info->size == GST_BUFFER_SIZE (outbuf)) {
+ GST_DEBUG_OBJECT (self, "Buffer sizes equal, doing fast copy");
+ orc_memcpy (GST_BUFFER_DATA (outbuf), buf->data + buffer_info->offset,
+ buffer_info->size);
+ ret = TRUE;
+ goto done;
+ }
+
+ GST_DEBUG_OBJECT (self,
+ "Sizes not equal (%d vs %d), doing slow line-by-line copying",
+ buffer_info->size, GST_BUFFER_SIZE (outbuf));
+
+ /* Different video format, try to convert */
+ switch (self->color_format) {
+ case COLOR_FormatYUV420Planar:{
+ gint i, j, height;
+ guint8 *src, *dest;
+ gint stride, slice_height;
+ gint src_stride, dest_stride;
+ gint row_length;
+
+ stride = self->stride;
+ if (stride == 0) {
+ GST_ERROR_OBJECT (self, "Stride not set");
+ goto done;
+ }
+
+ slice_height = self->slice_height;
+ if (slice_height == 0) {
+ /* NVidia Tegra 3 on Nexus 7 does not set this */
+ if (g_str_has_prefix (klass->codec_info->name, "OMX.Nvidia.")) {
+ slice_height = GST_ROUND_UP_32 (self->height);
+ } else {
+ GST_ERROR_OBJECT (self, "Slice height not set");
+ goto done;
+ }
+ }
+
+ for (i = 0; i < 3; i++) {
+ if (i == 0) {
+ src_stride = stride;
+ dest_stride = GST_VIDEO_INFO_COMP_STRIDE (info, i);
+ } else {
+ src_stride = (stride + 1) / 2;
+ dest_stride = GST_VIDEO_INFO_COMP_STRIDE (info, i);
+ }
+
+ src = buf->data + buffer_info->offset;
+
+ if (i == 0) {
+ src += self->crop_top * stride;
+ src += self->crop_left;
+ row_length = self->width;
+ } else if (i > 0) {
+ src += slice_height * stride;
+ src += self->crop_top * src_stride;
+ src += self->crop_left / 2;
+ row_length = (self->width + 1) / 2;
+ }
+ if (i == 2)
+ src += ((slice_height + 1) / 2) * ((stride + 1) / 2);
+
+ dest = GST_BUFFER_DATA (outbuf) + GST_VIDEO_INFO_COMP_OFFSET (info, i);
+ height = GST_VIDEO_INFO_COMP_HEIGHT (info, i);
+
+ for (j = 0; j < height; j++) {
+ orc_memcpy (dest, src, row_length);
+ src += src_stride;
+ dest += dest_stride;
+ }
+ }
+ ret = TRUE;
+ break;
+ }
+ case COLOR_TI_FormatYUV420PackedSemiPlanar:
+ case COLOR_TI_FormatYUV420PackedSemiPlanarInterlaced:{
+ gint i, j, height;
+ guint8 *src, *dest;
+ gint src_stride, dest_stride;
+ gint row_length;
+
+ /* This should always be set */
+ if (self->stride == 0 || self->slice_height == 0) {
+ GST_ERROR_OBJECT (self, "Stride or slice height not set");
+ goto done;
+ }
+
+ /* FIXME: This does not work for odd widths or heights
+ * but might as well be a bug in the codec */
+ for (i = 0; i < 2; i++) {
+ if (i == 0) {
+ src_stride = self->stride;
+ dest_stride = GST_VIDEO_INFO_COMP_STRIDE (info, i);
+ } else {
+ src_stride = GST_ROUND_UP_2 (self->stride);
+ dest_stride = GST_VIDEO_INFO_COMP_STRIDE (info, i);
+ }
+
+ src = buf->data + buffer_info->offset;
+ if (i == 0) {
+ row_length = self->width;
+ } else if (i == 1) {
+ src += (self->slice_height - self->crop_top / 2) * self->stride;
+ row_length = GST_ROUND_UP_2 (self->width);
+ }
+
+ dest = GST_BUFFER_DATA (outbuf) + GST_VIDEO_INFO_COMP_OFFSET (info, i);
+ height = GST_VIDEO_INFO_COMP_HEIGHT (info, i);
+
+ for (j = 0; j < height; j++) {
+ orc_memcpy (dest, src, row_length);
+ src += src_stride;
+ dest += dest_stride;
+ }
+ }
+ ret = TRUE;
+ break;
+ }
+ case COLOR_QCOM_FormatYUV420SemiPlanar:
+ case COLOR_FormatYUV420SemiPlanar:{
+ gint i, j, height;
+ guint8 *src, *dest;
+ gint src_stride, dest_stride;
+ gint row_length;
+
+ /* This should always be set */
+ if (self->stride == 0 || self->slice_height == 0) {
+ GST_ERROR_OBJECT (self, "Stride or slice height not set");
+ goto done;
+ }
+
+ /* FIXME: This is untested! */
+
+ for (i = 0; i < 2; i++) {
+ if (i == 0) {
+ src_stride = self->stride;
+ dest_stride = GST_VIDEO_INFO_COMP_STRIDE (info, i);
+ } else {
+ src_stride = self->stride;
+ dest_stride = GST_VIDEO_INFO_COMP_STRIDE (info, i);
+ }
+
+ src = buf->data + buffer_info->offset;
+ if (i == 0) {
+ src += self->crop_top * self->stride;
+ src += self->crop_left;
+ row_length = self->width;
+ } else if (i == 1) {
+ src += self->slice_height * self->stride;
+ src += self->crop_top * self->stride;
+ src += self->crop_left;
+ row_length = self->width;
+ }
+
+ dest = GST_BUFFER_DATA (outbuf) + GST_VIDEO_INFO_COMP_OFFSET (info, i);
+ height = GST_VIDEO_INFO_COMP_HEIGHT (info, i);
+
+ for (j = 0; j < height; j++) {
+ orc_memcpy (dest, src, row_length);
+ src += src_stride;
+ dest += dest_stride;
+ }
+ }
+ ret = TRUE;
+ break;
+ }
+ default:
+ GST_ERROR_OBJECT (self, "Unsupported color format %d",
+ self->color_format);
+ goto done;
+ break;
+ }
+
+done:
+ gst_video_codec_state_unref (state);
+ return ret;
+}
+
+static void
+gst_amc_video_dec_loop (GstAmcVideoDec * self)
+{
+ GstVideoCodecFrame *frame;
+ GstFlowReturn flow_ret = GST_FLOW_OK;
+ GstClockTimeDiff deadline;
+ gboolean is_eos;
+ GstAmcBufferInfo buffer_info;
+ gint idx;
+
+ GST_VIDEO_DECODER_STREAM_LOCK (self);
+
+retry:
+ /*if (self->input_state_changed) {
+ idx = INFO_OUTPUT_FORMAT_CHANGED;
+ } else { */
+ GST_DEBUG_OBJECT (self, "Waiting for available output buffer");
+ GST_VIDEO_DECODER_STREAM_UNLOCK (self);
+ /* Wait at most 100ms here, some codecs don't fail dequeueing if
+ * the codec is flushing, causing deadlocks during shutdown */
+ idx = gst_amc_codec_dequeue_output_buffer (self->codec, &buffer_info, 100000);
+ GST_VIDEO_DECODER_STREAM_LOCK (self);
+ /*} */
+
+ if (idx < 0) {
+ if (self->flushing || self->downstream_flow_ret == GST_FLOW_WRONG_STATE)
+ goto flushing;
+
+ switch (idx) {
+ case INFO_OUTPUT_BUFFERS_CHANGED:{
+ GST_DEBUG_OBJECT (self, "Output buffers have changed");
+ if (self->output_buffers)
+ gst_amc_codec_free_buffers (self->output_buffers,
+ self->n_output_buffers);
+ self->output_buffers =
+ gst_amc_codec_get_output_buffers (self->codec,
+ &self->n_output_buffers);
+ if (!self->output_buffers)
+ goto get_output_buffers_error;
+ break;
+ }
+ case INFO_OUTPUT_FORMAT_CHANGED:{
+ GstAmcFormat *format;
+ gchar *format_string;
+
+ GST_DEBUG_OBJECT (self, "Output format has changed");
+
+ format = gst_amc_codec_get_output_format (self->codec);
+ if (!format)
+ goto format_error;
+
+ format_string = gst_amc_format_to_string (format);
+ GST_DEBUG_OBJECT (self, "Got new output format: %s", format_string);
+ g_free (format_string);
+
+ if (!gst_amc_video_dec_set_src_caps (self, format)) {
+ gst_amc_format_free (format);
+ goto format_error;
+ }
+ gst_amc_format_free (format);
+
+ if (self->output_buffers)
+ gst_amc_codec_free_buffers (self->output_buffers,
+ self->n_output_buffers);
+ self->output_buffers =
+ gst_amc_codec_get_output_buffers (self->codec,
+ &self->n_output_buffers);
+ if (!self->output_buffers)
+ goto get_output_buffers_error;
+
+ goto retry;
+ break;
+ }
+ case INFO_TRY_AGAIN_LATER:
+ GST_DEBUG_OBJECT (self, "Dequeueing output buffer timed out");
+ goto retry;
+ break;
+ case G_MININT:
+ GST_ERROR_OBJECT (self, "Failure dequeueing input buffer");
+ goto dequeue_error;
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+
+ goto retry;
+ }
+
+ GST_DEBUG_OBJECT (self,
+ "Got output buffer at index %d: size %d time %" G_GINT64_FORMAT
+ " flags 0x%08x", idx, buffer_info.size, buffer_info.presentation_time_us,
+ buffer_info.flags);
+
+ frame =
+ _find_nearest_frame (self,
+ gst_util_uint64_scale (buffer_info.presentation_time_us, GST_USECOND, 1));
+
+ is_eos = ! !(buffer_info.flags & BUFFER_FLAG_END_OF_STREAM);
+
+ if (frame
+ && (deadline =
+ gst_video_decoder_get_max_decode_time (GST_VIDEO_DECODER (self),
+ frame)) < 0) {
+ GST_WARNING_OBJECT (self,
+ "Frame is too late, dropping (deadline %" GST_TIME_FORMAT ")",
+ GST_TIME_ARGS (-deadline));
+ flow_ret = gst_video_decoder_drop_frame (GST_VIDEO_DECODER (self), frame);
+ } else if (!frame && buffer_info.size > 0) {
+ GstBuffer *outbuf;
+
+ /* This sometimes happens at EOS or if the input is not properly framed,
+ * let's handle it gracefully by allocating a new buffer for the current
+ * caps and filling it
+ */
+ GST_ERROR_OBJECT (self, "No corresponding frame found");
+
+ outbuf = gst_video_decoder_alloc_output_buffer (GST_VIDEO_DECODER (self));
+
+ if (!gst_amc_video_dec_fill_buffer (self, idx, &buffer_info, outbuf)) {
+ gst_buffer_unref (outbuf);
+ if (!gst_amc_codec_release_output_buffer (self->codec, idx))
+ GST_ERROR_OBJECT (self, "Failed to release output buffer index %d",
+ idx);
+ goto invalid_buffer;
+ }
+
+ GST_BUFFER_TIMESTAMP (outbuf) =
+ gst_util_uint64_scale (buffer_info.presentation_time_us, GST_USECOND,
+ 1);
+ flow_ret = gst_pad_push (GST_VIDEO_DECODER_SRC_PAD (self), outbuf);
+ } else if (buffer_info.size > 0) {
+ if ((flow_ret = gst_video_decoder_alloc_output_frame (GST_VIDEO_DECODER
+ (self), frame)) != GST_FLOW_OK) {
+ GST_ERROR_OBJECT (self, "Failed to allocate buffer");
+ goto flow_error;
+ }
+
+ if (!gst_amc_video_dec_fill_buffer (self, idx, &buffer_info,
+ frame->output_buffer)) {
+ gst_buffer_replace (&frame->output_buffer, NULL);
+ gst_video_decoder_drop_frame (GST_VIDEO_DECODER (self), frame);
+ if (!gst_amc_codec_release_output_buffer (self->codec, idx))
+ GST_ERROR_OBJECT (self, "Failed to release output buffer index %d",
+ idx);
+ goto invalid_buffer;
+ }
+
+ flow_ret = gst_video_decoder_finish_frame (GST_VIDEO_DECODER (self), frame);
+ } else if (frame != NULL) {
+ flow_ret = gst_video_decoder_drop_frame (GST_VIDEO_DECODER (self), frame);
+ }
+
+ if (!gst_amc_codec_release_output_buffer (self->codec, idx))
+ goto failed_release;
+
+ if (is_eos || flow_ret == GST_FLOW_UNEXPECTED) {
+ GST_VIDEO_DECODER_STREAM_UNLOCK (self);
+ g_mutex_lock (self->drain_lock);
+ if (self->draining) {
+ GST_DEBUG_OBJECT (self, "Drained");
+ self->draining = FALSE;
+ g_cond_broadcast (self->drain_cond);
+ } else if (flow_ret == GST_FLOW_OK) {
+ GST_DEBUG_OBJECT (self, "Component signalled EOS");
+ flow_ret = GST_FLOW_UNEXPECTED;
+ }
+ g_mutex_unlock (self->drain_lock);
+ GST_VIDEO_DECODER_STREAM_LOCK (self);
+ } else {
+ GST_DEBUG_OBJECT (self, "Finished frame: %s", gst_flow_get_name (flow_ret));
+ }
+
+ self->downstream_flow_ret = flow_ret;
+
+ if (flow_ret != GST_FLOW_OK)
+ goto flow_error;
+
+ GST_VIDEO_DECODER_STREAM_UNLOCK (self);
+
+ return;
+
+dequeue_error:
+ {
+ GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL),
+ ("Failed to dequeue output buffer"));
+ gst_pad_push_event (GST_VIDEO_DECODER_SRC_PAD (self), gst_event_new_eos ());
+ gst_pad_pause_task (GST_VIDEO_DECODER_SRC_PAD (self));
+ self->downstream_flow_ret = GST_FLOW_ERROR;
+ GST_VIDEO_DECODER_STREAM_UNLOCK (self);
+ return;
+ }
+
+get_output_buffers_error:
+ {
+ GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL),
+ ("Failed to get output buffers"));
+ gst_pad_push_event (GST_VIDEO_DECODER_SRC_PAD (self), gst_event_new_eos ());
+ gst_pad_pause_task (GST_VIDEO_DECODER_SRC_PAD (self));
+ self->downstream_flow_ret = GST_FLOW_ERROR;
+ GST_VIDEO_DECODER_STREAM_UNLOCK (self);
+ return;
+ }
+
+format_error:
+ {
+ GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL),
+ ("Failed to handle format"));
+ gst_pad_push_event (GST_VIDEO_DECODER_SRC_PAD (self), gst_event_new_eos ());
+ gst_pad_pause_task (GST_VIDEO_DECODER_SRC_PAD (self));
+ self->downstream_flow_ret = GST_FLOW_ERROR;
+ GST_VIDEO_DECODER_STREAM_UNLOCK (self);
+ return;
+ }
+failed_release:
+ {
+ GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL),
+ ("Failed to release output buffer index %d", idx));
+ gst_pad_push_event (GST_VIDEO_DECODER_SRC_PAD (self), gst_event_new_eos ());
+ gst_pad_pause_task (GST_VIDEO_DECODER_SRC_PAD (self));
+ self->downstream_flow_ret = GST_FLOW_ERROR;
+ GST_VIDEO_DECODER_STREAM_UNLOCK (self);
+ return;
+ }
+flushing:
+ {
+ GST_DEBUG_OBJECT (self, "Flushing -- stopping task");
+ gst_pad_pause_task (GST_VIDEO_DECODER_SRC_PAD (self));
+ self->downstream_flow_ret = GST_FLOW_WRONG_STATE;
+ GST_VIDEO_DECODER_STREAM_UNLOCK (self);
+ return;
+ }
+
+flow_error:
+ {
+ if (flow_ret == GST_FLOW_UNEXPECTED) {
+ GST_DEBUG_OBJECT (self, "EOS");
+ gst_pad_push_event (GST_VIDEO_DECODER_SRC_PAD (self),
+ gst_event_new_eos ());
+ gst_pad_pause_task (GST_VIDEO_DECODER_SRC_PAD (self));
+ } else
+ if (flow_ret == GST_FLOW_NOT_LINKED || flow_ret < GST_FLOW_UNEXPECTED) {
+ GST_ELEMENT_ERROR (self, STREAM, FAILED,
+ ("Internal data stream error."), ("stream stopped, reason %s",
+ gst_flow_get_name (flow_ret)));
+ gst_pad_push_event (GST_VIDEO_DECODER_SRC_PAD (self),
+ gst_event_new_eos ());
+ gst_pad_pause_task (GST_VIDEO_DECODER_SRC_PAD (self));
+ }
+ GST_VIDEO_DECODER_STREAM_UNLOCK (self);
+ return;
+ }
+
+invalid_buffer:
+ {
+ GST_ELEMENT_ERROR (self, LIBRARY, SETTINGS, (NULL),
+ ("Invalid sized input buffer"));
+ gst_pad_push_event (GST_VIDEO_DECODER_SRC_PAD (self), gst_event_new_eos ());
+ gst_pad_pause_task (GST_VIDEO_DECODER_SRC_PAD (self));
+ self->downstream_flow_ret = GST_FLOW_NOT_NEGOTIATED;
+ GST_VIDEO_DECODER_STREAM_UNLOCK (self);
+ return;
+ }
+}
+
+static gboolean
+gst_amc_video_dec_start (GstVideoDecoder * decoder)
+{
+ GstAmcVideoDec *self;
+
+ self = GST_AMC_VIDEO_DEC (decoder);
+ self->last_upstream_ts = 0;
+ self->eos = FALSE;
+ self->downstream_flow_ret = GST_FLOW_OK;
+ self->started = FALSE;
+ self->flushing = TRUE;
+
+ return TRUE;
+}
+
+static gboolean
+gst_amc_video_dec_stop (GstVideoDecoder * decoder)
+{
+ GstAmcVideoDec *self;
+
+ self = GST_AMC_VIDEO_DEC (decoder);
+ GST_DEBUG_OBJECT (self, "Stopping decoder");
+ self->flushing = TRUE;
+ if (self->started) {
+ gst_amc_codec_flush (self->codec);
+ gst_amc_codec_stop (self->codec);
+ self->started = FALSE;
+ if (self->input_buffers)
+ gst_amc_codec_free_buffers (self->input_buffers, self->n_input_buffers);
+ self->input_buffers = NULL;
+ if (self->output_buffers)
+ gst_amc_codec_free_buffers (self->output_buffers, self->n_output_buffers);
+ self->output_buffers = NULL;
+ }
+ gst_pad_stop_task (GST_VIDEO_DECODER_SRC_PAD (decoder));
+
+ self->downstream_flow_ret = GST_FLOW_WRONG_STATE;
+ self->eos = FALSE;
+ g_mutex_lock (self->drain_lock);
+ self->draining = FALSE;
+ g_cond_broadcast (self->drain_cond);
+ g_mutex_unlock (self->drain_lock);
+ gst_buffer_replace (&self->codec_data, NULL);
+ GST_DEBUG_OBJECT (self, "Stopped decoder");
+ return TRUE;
+}
+
+static gboolean
+gst_amc_video_dec_set_format (GstVideoDecoder * decoder,
+ GstVideoCodecState * state)
+{
+ GstAmcVideoDec *self;
+ GstAmcFormat *format;
+ const gchar *mime;
+ gboolean is_format_change = FALSE;
+ gboolean needs_disable = FALSE;
+ gchar *format_string;
+
+ self = GST_AMC_VIDEO_DEC (decoder);
+
+ GST_DEBUG_OBJECT (self, "Setting new caps %" GST_PTR_FORMAT, state->caps);
+
+ /* Check if the caps change is a real format change or if only irrelevant
+ * parts of the caps have changed or nothing at all.
+ */
+ is_format_change |= self->width != state->info.width;
+ is_format_change |= self->height != state->info.height;
+ is_format_change |= (self->codec_data != state->codec_data);
+
+ needs_disable = self->started;
+
+ /* If the component is not started and a real format change happens
+ * we have to restart the component. If no real format change
+ * happened we can just exit here.
+ */
+ if (needs_disable && !is_format_change) {
+ /* Framerate or something minor changed */
+ self->input_state_changed = TRUE;
+ GST_DEBUG_OBJECT (self,
+ "Already running and caps did not change the format");
+ return TRUE;
+ }
+
+ if (needs_disable && is_format_change) {
+ gst_amc_video_dec_drain (self);
+ GST_VIDEO_DECODER_STREAM_UNLOCK (self);
+ gst_amc_video_dec_stop (GST_VIDEO_DECODER (self));
+ GST_VIDEO_DECODER_STREAM_LOCK (self);
+ gst_amc_video_dec_close (GST_VIDEO_DECODER (self));
+ if (!gst_amc_video_dec_open (GST_VIDEO_DECODER (self))) {
+ GST_ERROR_OBJECT (self, "Failed to open codec again");
+ return FALSE;
+ }
+
+ if (!gst_amc_video_dec_start (GST_VIDEO_DECODER (self))) {
+ GST_ERROR_OBJECT (self, "Failed to start codec again");
+ }
+ }
+ /* srcpad task is not running at this point */
+
+ gst_buffer_replace (&self->codec_data, state->codec_data);
+
+ mime = caps_to_mime (state->caps);
+ if (!mime) {
+ GST_ERROR_OBJECT (self, "Failed to convert caps to mime");
+ return FALSE;
+ }
+
+ format =
+ gst_amc_format_new_video (mime, state->info.width, state->info.height);
+ if (!format) {
+ GST_ERROR_OBJECT (self, "Failed to create video format");
+ return FALSE;
+ }
+
+ /* FIXME: This buffer needs to be valid until the codec is stopped again */
+ if (self->codec_data)
+ gst_amc_format_set_buffer (format, "csd-0", self->codec_data);
+
+ format_string = gst_amc_format_to_string (format);
+ GST_DEBUG_OBJECT (self, "Configuring codec with format: %s", format_string);
+ g_free (format_string);
+
+ if (!gst_amc_codec_configure (self->codec, format, 0)) {
+ GST_ERROR_OBJECT (self, "Failed to configure codec");
+ return FALSE;
+ }
+
+ gst_amc_format_free (format);
+
+ if (!gst_amc_codec_start (self->codec)) {
+ GST_ERROR_OBJECT (self, "Failed to start codec");
+ return FALSE;
+ }
+
+ if (self->input_buffers)
+ gst_amc_codec_free_buffers (self->input_buffers, self->n_input_buffers);
+ self->input_buffers =
+ gst_amc_codec_get_input_buffers (self->codec, &self->n_input_buffers);
+ if (!self->input_buffers) {
+ GST_ERROR_OBJECT (self, "Failed to get input buffers");
+ return FALSE;
+ }
+
+ self->started = TRUE;
+ self->input_state_changed = TRUE;
+
+ /* Start the srcpad loop again */
+ self->flushing = FALSE;
+ self->downstream_flow_ret = GST_FLOW_OK;
+ gst_pad_start_task (GST_VIDEO_DECODER_SRC_PAD (self),
+ (GstTaskFunction) gst_amc_video_dec_loop, decoder);
+
+ return TRUE;
+}
+
+static gboolean
+gst_amc_video_dec_reset (GstVideoDecoder * decoder, gboolean hard)
+{
+ GstAmcVideoDec *self;
+
+ self = GST_AMC_VIDEO_DEC (decoder);
+
+ GST_DEBUG_OBJECT (self, "Resetting decoder");
+
+ if (!self->started) {
+ GST_DEBUG_OBJECT (self, "Codec not started yet");
+ return TRUE;
+ }
+
+ self->flushing = TRUE;
+ gst_amc_codec_flush (self->codec);
+
+ /* Wait until the srcpad loop is finished,
+ * unlock GST_VIDEO_DECODER_STREAM_LOCK to prevent deadlocks
+ * caused by using this lock from inside the loop function */
+ GST_VIDEO_DECODER_STREAM_UNLOCK (self);
+ GST_PAD_STREAM_LOCK (GST_VIDEO_DECODER_SRC_PAD (self));
+ GST_PAD_STREAM_UNLOCK (GST_VIDEO_DECODER_SRC_PAD (self));
+ GST_VIDEO_DECODER_STREAM_LOCK (self);
+ self->flushing = FALSE;
+
+ /* Start the srcpad loop again */
+ self->last_upstream_ts = 0;
+ self->eos = FALSE;
+ self->downstream_flow_ret = GST_FLOW_OK;
+ gst_pad_start_task (GST_VIDEO_DECODER_SRC_PAD (self),
+ (GstTaskFunction) gst_amc_video_dec_loop, decoder);
+
+ GST_DEBUG_OBJECT (self, "Reset decoder");
+
+ return TRUE;
+}
+
+static GstFlowReturn
+gst_amc_video_dec_handle_frame (GstVideoDecoder * decoder,
+ GstVideoCodecFrame * frame)
+{
+ GstAmcVideoDec *self;
+ gint idx;
+ GstAmcBuffer *buf;
+ GstAmcBufferInfo buffer_info;
+ guint offset = 0;
+ GstClockTime timestamp, duration, timestamp_offset = 0;
+
+ self = GST_AMC_VIDEO_DEC (decoder);
+
+ GST_DEBUG_OBJECT (self, "Handling frame");
+
+ if (!self->started) {
+ GST_ERROR_OBJECT (self, "Codec not started yet");
+ gst_video_codec_frame_unref (frame);
+ return GST_FLOW_NOT_NEGOTIATED;
+ }
+
+ if (self->eos) {
+ GST_WARNING_OBJECT (self, "Got frame after EOS");
+ gst_video_codec_frame_unref (frame);
+ return GST_FLOW_UNEXPECTED;
+ }
+
+ if (self->flushing)
+ goto flushing;
+
+ if (self->downstream_flow_ret != GST_FLOW_OK)
+ goto downstream_error;
+
+ timestamp = frame->pts;
+ duration = frame->duration;
+
+ while (offset < GST_BUFFER_SIZE (frame->input_buffer)) {
+ /* Make sure to release the base class stream lock, otherwise
+ * _loop() can't call _finish_frame() and we might block forever
+ * because no input buffers are released */
+ GST_VIDEO_DECODER_STREAM_UNLOCK (self);
+ /* Wait at most 100ms here, some codecs don't fail dequeueing if
+ * the codec is flushing, causing deadlocks during shutdown */
+ idx = gst_amc_codec_dequeue_input_buffer (self->codec, 100000);
+ GST_VIDEO_DECODER_STREAM_LOCK (self);
+
+ if (idx < 0) {
+ if (self->flushing)
+ goto flushing;
+ switch (idx) {
+ case INFO_TRY_AGAIN_LATER:
+ GST_DEBUG_OBJECT (self, "Dequeueing input buffer timed out");
+ continue; /* next try */
+ break;
+ case G_MININT:
+ GST_ERROR_OBJECT (self, "Failed to dequeue input buffer");
+ goto dequeue_error;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+
+ continue;
+ }
+
+ if (idx >= self->n_input_buffers)
+ goto invalid_buffer_index;
+
+ if (self->flushing)
+ goto flushing;
+
+ if (self->downstream_flow_ret != GST_FLOW_OK) {
+ memset (&buffer_info, 0, sizeof (buffer_info));
+ gst_amc_codec_queue_input_buffer (self->codec, idx, &buffer_info);
+ goto downstream_error;
+ }
+
+ /* Now handle the frame */
+
+ /* Copy the buffer content in chunks of size as requested
+ * by the port */
+ buf = &self->input_buffers[idx];
+
+ memset (&buffer_info, 0, sizeof (buffer_info));
+ buffer_info.offset = 0;
+ buffer_info.size =
+ MIN (GST_BUFFER_SIZE (frame->input_buffer) - offset, buf->size);
+
+ orc_memcpy (buf->data, GST_BUFFER_DATA (frame->input_buffer) + offset,
+ buffer_info.size);
+
+ /* Interpolate timestamps if we're passing the buffer
+ * in multiple chunks */
+ if (offset != 0 && duration != GST_CLOCK_TIME_NONE) {
+ timestamp_offset =
+ gst_util_uint64_scale (offset, duration,
+ GST_BUFFER_SIZE (frame->input_buffer));
+ }
+
+ if (timestamp != GST_CLOCK_TIME_NONE) {
+ buffer_info.presentation_time_us =
+ gst_util_uint64_scale (timestamp + timestamp_offset, 1, GST_USECOND);
+ self->last_upstream_ts = timestamp + timestamp_offset;
+ }
+ if (duration != GST_CLOCK_TIME_NONE)
+ self->last_upstream_ts += duration;
+
+ if (offset == 0) {
+ BufferIdentification *id =
+ buffer_identification_new (timestamp + timestamp_offset);
+ if (GST_VIDEO_CODEC_FRAME_IS_SYNC_POINT (frame))
+ buffer_info.flags |= BUFFER_FLAG_SYNC_FRAME;
+ gst_video_codec_frame_set_user_data (frame, id,
+ (GDestroyNotify) buffer_identification_free);
+ }
+
+ offset += buffer_info.size;
+ GST_DEBUG_OBJECT (self,
+ "Queueing buffer %d: size %d time %" G_GINT64_FORMAT " flags 0x%08x",
+ idx, buffer_info.size, buffer_info.presentation_time_us,
+ buffer_info.flags);
+ if (!gst_amc_codec_queue_input_buffer (self->codec, idx, &buffer_info))
+ goto queue_error;
+ }
+
+ gst_video_codec_frame_unref (frame);
+
+ return self->downstream_flow_ret;
+
+downstream_error:
+ {
+ GST_ERROR_OBJECT (self, "Downstream returned %s",
+ gst_flow_get_name (self->downstream_flow_ret));
+ gst_video_codec_frame_unref (frame);
+ return self->downstream_flow_ret;
+ }
+invalid_buffer_index:
+ {
+ GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL),
+ ("Invalid input buffer index %d of %d", idx, self->n_input_buffers));
+ gst_video_codec_frame_unref (frame);
+ return GST_FLOW_ERROR;
+ }
+dequeue_error:
+ {
+ GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL),
+ ("Failed to dequeue input buffer"));
+ gst_video_codec_frame_unref (frame);
+ return GST_FLOW_ERROR;
+ }
+queue_error:
+ {
+ GST_ELEMENT_ERROR (self, LIBRARY, FAILED, (NULL),
+ ("Failed to queue input buffer"));
+ gst_video_codec_frame_unref (frame);
+ return GST_FLOW_ERROR;
+ }
+flushing:
+ {
+ GST_DEBUG_OBJECT (self, "Flushing -- returning WRONG_STATE");
+ gst_video_codec_frame_unref (frame);
+ return GST_FLOW_WRONG_STATE;
+ }
+}
+
+static GstFlowReturn
+gst_amc_video_dec_finish (GstVideoDecoder * decoder)
+{
+ GstAmcVideoDec *self;
+ gint idx;
+
+ self = GST_AMC_VIDEO_DEC (decoder);
+ GST_DEBUG_OBJECT (self, "Sending EOS to the component");
+
+ /* Don't send EOS buffer twice, this doesn't work */
+ if (self->eos) {
+ GST_DEBUG_OBJECT (self, "Component is already EOS");
+ return GST_VIDEO_DECODER_FLOW_DROPPED;
+ }
+ self->eos = TRUE;
+
+ /* Make sure to release the base class stream lock, otherwise
+ * _loop() can't call _finish_frame() and we might block forever
+ * because no input buffers are released */
+ GST_VIDEO_DECODER_STREAM_UNLOCK (self);
+ /* Send an EOS buffer to the component and let the base
+ * class drop the EOS event. We will send it later when
+ * the EOS buffer arrives on the output port.
+ * Wait at most 0.5s here. */
+ idx = gst_amc_codec_dequeue_input_buffer (self->codec, 500000);
+ GST_VIDEO_DECODER_STREAM_LOCK (self);
+
+ if (idx >= 0 && idx < self->n_input_buffers) {
+ GstAmcBufferInfo buffer_info;
+
+ memset (&buffer_info, 0, sizeof (buffer_info));
+ buffer_info.size = 0;
+ buffer_info.presentation_time_us =
+ gst_util_uint64_scale (self->last_upstream_ts, 1, GST_USECOND);
+ buffer_info.flags |= BUFFER_FLAG_END_OF_STREAM;
+
+ if (gst_amc_codec_queue_input_buffer (self->codec, idx, &buffer_info))
+ GST_DEBUG_OBJECT (self, "Sent EOS to the codec");
+ else
+ GST_ERROR_OBJECT (self, "Failed to send EOS to the codec");
+ } else if (idx >= self->n_input_buffers) {
+ GST_ERROR_OBJECT (self, "Invalid input buffer index %d of %d",
+ idx, self->n_input_buffers);
+ } else {
+ GST_ERROR_OBJECT (self, "Failed to dequeue input buffer for EOS: %d", idx);
+ }
+
+ return GST_VIDEO_DECODER_FLOW_DROPPED;
+}
+
+static GstFlowReturn
+gst_amc_video_dec_drain (GstAmcVideoDec * self)
+{
+ GstFlowReturn ret;
+ gint idx;
+
+ GST_DEBUG_OBJECT (self, "Draining codec");
+ if (!self->started) {
+ GST_DEBUG_OBJECT (self, "Codec not started yet");
+ return GST_FLOW_OK;
+ }
+
+ /* Don't send EOS buffer twice, this doesn't work */
+ if (self->eos) {
+ GST_DEBUG_OBJECT (self, "Codec is EOS already");
+ return GST_FLOW_OK;
+ }
+
+ /* Make sure to release the base class stream lock, otherwise
+ * _loop() can't call _finish_frame() and we might block forever
+ * because no input buffers are released */
+ GST_VIDEO_DECODER_STREAM_UNLOCK (self);
+ /* Send an EOS buffer to the component and let the base
+ * class drop the EOS event. We will send it later when
+ * the EOS buffer arrives on the output port.
+ * Wait at most 0.5s here. */
+ idx = gst_amc_codec_dequeue_input_buffer (self->codec, 500000);
+ GST_VIDEO_DECODER_STREAM_LOCK (self);
+
+ if (idx >= 0 && idx < self->n_input_buffers) {
+ GstAmcBufferInfo buffer_info;
+
+ GST_VIDEO_DECODER_STREAM_UNLOCK (self);
+ g_mutex_lock (self->drain_lock);
+ self->draining = TRUE;
+
+ memset (&buffer_info, 0, sizeof (buffer_info));
+ buffer_info.size = 0;
+ buffer_info.presentation_time_us =
+ gst_util_uint64_scale (self->last_upstream_ts, 1, GST_USECOND);
+ buffer_info.flags |= BUFFER_FLAG_END_OF_STREAM;
+
+ if (gst_amc_codec_queue_input_buffer (self->codec, idx, &buffer_info)) {
+ GST_DEBUG_OBJECT (self, "Waiting until codec is drained");
+ g_cond_wait (self->drain_cond, self->drain_lock);
+ GST_DEBUG_OBJECT (self, "Drained codec");
+ ret = GST_FLOW_OK;
+ } else {
+ GST_ERROR_OBJECT (self, "Failed to queue input buffer");
+ ret = GST_FLOW_ERROR;
+ }
+
+ g_mutex_unlock (self->drain_lock);
+ GST_VIDEO_DECODER_STREAM_LOCK (self);
+ } else if (idx >= self->n_input_buffers) {
+ GST_ERROR_OBJECT (self, "Invalid input buffer index %d of %d",
+ idx, self->n_input_buffers);
+ ret = GST_FLOW_ERROR;
+ } else {
+ GST_ERROR_OBJECT (self, "Failed to acquire buffer for EOS: %d", idx);
+ ret = GST_FLOW_ERROR;
+ }
+
+ return ret;
+}
diff --git a/sys/androidmedia/gstamcvideodec.h b/sys/androidmedia/gstamcvideodec.h
new file mode 100644
index 00000000..4a33e483
--- /dev/null
+++ b/sys/androidmedia/gstamcvideodec.h
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2012, Collabora Ltd.
+ * Author: Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation
+ * version 2.1 of the License.
+ *
+ * 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+
+#ifndef __GST_AMC_VIDEO_DEC_H__
+#define __GST_AMC_VIDEO_DEC_H__
+
+#include <gst/gst.h>
+
+#include <gst/video/gstvideodecoder.h>
+
+#include "gstamc.h"
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_AMC_VIDEO_DEC \
+ (gst_amc_video_dec_get_type())
+#define GST_AMC_VIDEO_DEC(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_AMC_VIDEO_DEC,GstAmcVideoDec))
+#define GST_AMC_VIDEO_DEC_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_AMC_VIDEO_DEC,GstAmcVideoDecClass))
+#define GST_AMC_VIDEO_DEC_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_AMC_VIDEO_DEC,GstAmcVideoDecClass))
+#define GST_IS_AMC_VIDEO_DEC(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_AMC_VIDEO_DEC))
+#define GST_IS_AMC_VIDEO_DEC_CLASS(obj) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AMC_VIDEO_DEC))
+
+typedef struct _GstAmcVideoDec GstAmcVideoDec;
+typedef struct _GstAmcVideoDecClass GstAmcVideoDecClass;
+
+struct _GstAmcVideoDec
+{
+ GstVideoDecoder parent;
+
+ /* < private > */
+ GstAmcCodec *codec;
+ GstAmcBuffer *input_buffers, *output_buffers;
+ gsize n_input_buffers, n_output_buffers;
+
+ GstVideoCodecState *input_state;
+ gboolean input_state_changed;
+
+ /* Output format of the codec */
+ GstVideoFormat format;
+ gint color_format;
+ gint width, height, stride, slice_height;
+ gint crop_left, crop_right;
+ gint crop_top, crop_bottom;
+
+ GstBuffer *codec_data;
+ /* TRUE if the component is configured and saw
+ * the first buffer */
+ gboolean started;
+ gboolean flushing;
+
+ GstClockTime last_upstream_ts;
+
+ /* Draining state */
+ GMutex *drain_lock;
+ GCond *drain_cond;
+ /* TRUE if EOS buffers shouldn't be forwarded */
+ gboolean draining;
+
+ /* TRUE if upstream is EOS */
+ gboolean eos;
+
+ GstFlowReturn downstream_flow_ret;
+};
+
+struct _GstAmcVideoDecClass
+{
+ GstVideoDecoderClass parent_class;
+
+ const GstAmcCodecInfo *codec_info;
+};
+
+GType gst_amc_video_dec_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_AMC_VIDEO_DEC_H__ */
diff --git a/sys/applemedia/Makefile.in b/sys/applemedia/Makefile.in
index 4538f987..53f3dd64 100644
--- a/sys/applemedia/Makefile.in
+++ b/sys/applemedia/Makefile.in
@@ -306,6 +306,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/sys/avc/Makefile.in b/sys/avc/Makefile.in
index fbd8b028..7f365680 100644
--- a/sys/avc/Makefile.in
+++ b/sys/avc/Makefile.in
@@ -251,6 +251,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/sys/avc/gstavcsrc.cpp b/sys/avc/gstavcsrc.cpp
index 21dcb509..6d926dc2 100644
--- a/sys/avc/gstavcsrc.cpp
+++ b/sys/avc/gstavcsrc.cpp
@@ -102,7 +102,7 @@ gst_avc_src_base_init (gpointer g_class)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_avc_src_src_template));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"AVC Video Services Source", "Video/Source",
"Captures DV or HDV video from Firewire port",
"David Schleef <ds@entropywave.com>");
diff --git a/sys/d3dvideosink/Makefile.in b/sys/d3dvideosink/Makefile.in
index 8bf1dc0f..db034305 100644
--- a/sys/d3dvideosink/Makefile.in
+++ b/sys/d3dvideosink/Makefile.in
@@ -257,6 +257,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/sys/decklink/Makefile.in b/sys/decklink/Makefile.in
index 90face25..b65f0b05 100644
--- a/sys/decklink/Makefile.in
+++ b/sys/decklink/Makefile.in
@@ -269,6 +269,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/sys/decklink/gstdecklinksink.cpp b/sys/decklink/gstdecklinksink.cpp
index eeb1c95c..7ee661e4 100644
--- a/sys/decklink/gstdecklinksink.cpp
+++ b/sys/decklink/gstdecklinksink.cpp
@@ -186,7 +186,7 @@ gst_decklink_sink_base_init (gpointer g_class)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_decklink_sink_audiosink_template));
- gst_element_class_set_metadata (element_class, "Decklink Sink",
+ gst_element_class_set_static_metadata (element_class, "Decklink Sink",
"Video/Sink", "Decklink Sink", "David Schleef <ds@entropywave.com>");
}
diff --git a/sys/decklink/gstdecklinksrc.cpp b/sys/decklink/gstdecklinksrc.cpp
index ee1c4645..331ca721 100644
--- a/sys/decklink/gstdecklinksrc.cpp
+++ b/sys/decklink/gstdecklinksrc.cpp
@@ -190,7 +190,7 @@ gst_decklink_src_base_init (gpointer g_class)
gst_pad_template_new ("videosrc", GST_PAD_SRC, GST_PAD_ALWAYS,
gst_decklink_mode_get_template_caps ()));
- gst_element_class_set_metadata (element_class, "Decklink source",
+ gst_element_class_set_static_metadata (element_class, "Decklink source",
"Source/Video", "DeckLink Source", "David Schleef <ds@entropywave.com>");
}
diff --git a/sys/directdraw/Makefile.in b/sys/directdraw/Makefile.in
index bb5abf02..9ec2fdc7 100644
--- a/sys/directdraw/Makefile.in
+++ b/sys/directdraw/Makefile.in
@@ -253,6 +253,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/sys/directdraw/gstdirectdrawsink.c b/sys/directdraw/gstdirectdrawsink.c
index 4ab14d4e..534d61d8 100644
--- a/sys/directdraw/gstdirectdrawsink.c
+++ b/sys/directdraw/gstdirectdrawsink.c
@@ -382,8 +382,8 @@ gst_directdraw_sink_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_set_metadata (element_class, "Direct Draw Video Sink",
- "Sink/Video",
+ gst_element_class_set_static_metadata (element_class,
+ "Direct Draw Video Sink", "Sink/Video",
"Output to a video card via Direct Draw",
"Sebastien Moutte <sebastien@moutte.net>");
gst_element_class_add_pad_template (element_class,
@@ -1753,9 +1753,9 @@ gst_directdraw_sink_get_depth (LPDDPIXELFORMAT lpddpfPixelFormat)
gint order = 0, binary;
binary =
- lpddpfPixelFormat->dwRBitMask | lpddpfPixelFormat->
- dwGBitMask | lpddpfPixelFormat->dwBBitMask | lpddpfPixelFormat->
- dwRGBAlphaBitMask;
+ lpddpfPixelFormat->
+ dwRBitMask | lpddpfPixelFormat->dwGBitMask | lpddpfPixelFormat->
+ dwBBitMask | lpddpfPixelFormat->dwRGBAlphaBitMask;
while (binary != 0) {
if ((binary % 2) == 1)
order++;
diff --git a/sys/directsound/Makefile.in b/sys/directsound/Makefile.in
index aadbb658..09c19d04 100644
--- a/sys/directsound/Makefile.in
+++ b/sys/directsound/Makefile.in
@@ -253,6 +253,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/sys/directsound/gstdirectsoundsrc.c b/sys/directsound/gstdirectsoundsrc.c
index 169073b8..d7023fef 100644
--- a/sys/directsound/gstdirectsoundsrc.c
+++ b/sys/directsound/gstdirectsoundsrc.c
@@ -48,12 +48,25 @@
TODO: add device selection and check rate etc.
*/
+/**
+ * SECTION:element-directsoundsrc
+ *
+ * Reads audio data using the DirectSound API.
+ *
+ * <refsect2>
+ * <title>Example pipelines</title>
+ * |[
+ * gst-launch -v directsoundsrc ! audioconvert ! vorbisenc ! oggmux ! filesink location=dsound.ogg
+ * ]| Record from DirectSound and encode to Ogg/Vorbis.
+ * </refsect2>
+ */
+
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <gst/gst.h>
-#include <gst/audio/gstbaseaudiosrc.h>
+#include <gst/audio/gstaudiobasesrc.h>
#include "gstdirectsoundsrc.h"
@@ -73,7 +86,6 @@ enum
PROP_DEVICE
};
-
static HRESULT (WINAPI * pDSoundCaptureCreate) (LPGUID,
LPDIRECTSOUNDCAPTURE *, LPUNKNOWN);
@@ -88,47 +100,30 @@ static void gst_directsound_src_get_property (GObject * object,
static gboolean gst_directsound_src_open (GstAudioSrc * asrc);
static gboolean gst_directsound_src_close (GstAudioSrc * asrc);
static gboolean gst_directsound_src_prepare (GstAudioSrc * asrc,
- GstRingBufferSpec * spec);
+ GstAudioRingBufferSpec * spec);
static gboolean gst_directsound_src_unprepare (GstAudioSrc * asrc);
static void gst_directsound_src_reset (GstAudioSrc * asrc);
-static GstCaps *gst_directsound_src_getcaps (GstBaseSrc * bsrc);
+static GstCaps *gst_directsound_src_getcaps (GstBaseSrc * bsrc,
+ GstCaps * filter);
static guint gst_directsound_src_read (GstAudioSrc * asrc,
- gpointer data, guint length);
+ gpointer data, guint length, GstClockTime * timestamp);
static void gst_directsound_src_dispose (GObject * object);
-static void gst_directsound_src_do_init (GType type);
-
static guint gst_directsound_src_delay (GstAudioSrc * asrc);
static GstStaticPadTemplate directsound_src_src_factory =
- GST_STATIC_PAD_TEMPLATE ("src",
+GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/x-raw-int, "
- "endianness = (int) { LITTLE_ENDIAN, BIG_ENDIAN }, "
- "signed = (boolean) { TRUE, FALSE }, "
- "width = (int) 16, "
- "depth = (int) 16, "
- "rate = (int) [ 1, MAX ], " "channels = (int) [ 1, 2 ]; "
- "audio/x-raw-int, "
- "signed = (boolean) { TRUE, FALSE }, "
- "width = (int) 8, "
- "depth = (int) 8, "
+ GST_STATIC_CAPS ("audio/x-raw, "
+ "format = (string) { S16LE, S8 }, "
+ "layout = (string) interleaved, "
"rate = (int) [ 1, MAX ], " "channels = (int) [ 1, 2 ]"));
-static void
-gst_directsound_src_do_init (GType type)
-{
- GST_DEBUG_CATEGORY_INIT (directsoundsrc_debug, "directsoundsrc", 0,
- "DirectSound Src");
-
-
-}
-
-GST_BOILERPLATE_FULL (GstDirectSoundSrc, gst_directsound_src, GstAudioSrc,
- GST_TYPE_AUDIO_SRC, gst_directsound_src_do_init);
+#define gst_directsound_src_parent_class parent_class
+G_DEFINE_TYPE (GstDirectSoundSrc, gst_directsound_src, GST_TYPE_AUDIO_SRC);
static void
gst_directsound_src_dispose (GObject * object)
@@ -147,39 +142,19 @@ gst_directsound_src_finalize (GObject * object)
}
static void
-gst_directsound_src_base_init (gpointer g_class)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
- GST_DEBUG ("initializing directsoundsrc base\n");
-
- gst_element_class_set_metadata (element_class, "Direct Sound Audio Src",
- "Source/Audio",
- "Capture from a soundcard via DIRECTSOUND",
- "Joni Valtanen <joni.valtanen@movial.fi>");
-
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&directsound_src_src_factory));
-}
-
-
-/* initialize the plugin's class */
-static void
gst_directsound_src_class_init (GstDirectSoundSrcClass * klass)
{
GObjectClass *gobject_class;
GstElementClass *gstelement_class;
GstBaseSrcClass *gstbasesrc_class;
- GstBaseAudioSrcClass *gstbaseaudiosrc_class;
GstAudioSrcClass *gstaudiosrc_class;
gobject_class = (GObjectClass *) klass;
gstelement_class = (GstElementClass *) klass;
gstbasesrc_class = (GstBaseSrcClass *) klass;
- gstbaseaudiosrc_class = (GstBaseAudioSrcClass *) klass;
gstaudiosrc_class = (GstAudioSrcClass *) klass;
- GST_DEBUG ("initializing directsoundsrc class\n");
+ GST_DEBUG ("initializing directsoundsrc class");
gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_directsound_src_finalize);
gobject_class->dispose = GST_DEBUG_FUNCPTR (gst_directsound_src_dispose);
@@ -199,23 +174,30 @@ gst_directsound_src_class_init (GstDirectSoundSrcClass * klass)
gstaudiosrc_class->delay = GST_DEBUG_FUNCPTR (gst_directsound_src_delay);
gstaudiosrc_class->reset = GST_DEBUG_FUNCPTR (gst_directsound_src_reset);
+ GST_DEBUG_CATEGORY_INIT (directsoundsrc_debug, "directsoundsrc", 0,
+ "DirectSound Src");
+ gst_element_class_set_static_metadata (gstelement_class,
+ "DirectSound audio source", "Source/Audio",
+ "Capture from a soundcard via DirectSound",
+ "Joni Valtanen <joni.valtanen@movial.fi>");
+
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&directsound_src_src_factory));
}
static GstCaps *
-gst_directsound_src_getcaps (GstBaseSrc * bsrc)
+gst_directsound_src_getcaps (GstBaseSrc * bsrc, GstCaps * filter)
{
GstDirectSoundSrc *dsoundsrc;
GstCaps *caps = NULL;
- GST_DEBUG ("get caps\n");
+ GST_DEBUG_OBJECT (bsrc, "get caps");
dsoundsrc = GST_DIRECTSOUND_SRC (bsrc);
-
caps = gst_caps_copy (gst_pad_get_pad_template_caps (GST_BASE_SRC_PAD
(bsrc)));
return caps;
-
}
static void
@@ -223,7 +205,7 @@ gst_directsound_src_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec)
{
// GstDirectSoundSrc *src = GST_DIRECTSOUND_SRC (object);
- GST_DEBUG ("set property\n");
+ GST_DEBUG ("set property");
switch (prop_id) {
#if 0
@@ -246,7 +228,7 @@ gst_directsound_src_get_property (GObject * object, guint prop_id,
GstDirectSoundSrc *src = GST_DIRECTSOUND_SRC (object);
#endif
- GST_DEBUG ("get property\n");
+ GST_DEBUG ("get property");
switch (prop_id) {
#if 0
@@ -268,22 +250,19 @@ gst_directsound_src_get_property (GObject * object, guint prop_id,
* initialize structure
*/
static void
-gst_directsound_src_init (GstDirectSoundSrc * src,
- GstDirectSoundSrcClass * gclass)
+gst_directsound_src_init (GstDirectSoundSrc * src)
{
- GST_DEBUG ("initializing directsoundsrc\n");
+ GST_DEBUG_OBJECT (src, "initializing directsoundsrc");
src->dsound_lock = g_mutex_new ();
}
-
-
static gboolean
gst_directsound_src_open (GstAudioSrc * asrc)
{
GstDirectSoundSrc *dsoundsrc;
HRESULT hRes; /* Result for windows functions */
- GST_DEBUG ("initializing directsoundsrc\n");
+ GST_DEBUG_OBJECT (asrc, "opening directsoundsrc");
dsoundsrc = GST_DIRECTSOUND_SRC (asrc);
@@ -342,7 +321,7 @@ gst_directsound_src_close (GstAudioSrc * asrc)
GstDirectSoundSrc *dsoundsrc;
HRESULT hRes; /* Result for windows functions */
- GST_DEBUG ("initializing directsoundsrc\n");
+ GST_DEBUG_OBJECT (asrc, "closing directsoundsrc");
dsoundsrc = GST_DIRECTSOUND_SRC (asrc);
@@ -356,49 +335,37 @@ gst_directsound_src_close (GstAudioSrc * asrc)
}
static gboolean
-gst_directsound_src_prepare (GstAudioSrc * asrc, GstRingBufferSpec * spec)
+gst_directsound_src_prepare (GstAudioSrc * asrc, GstAudioRingBufferSpec * spec)
{
-
GstDirectSoundSrc *dsoundsrc;
WAVEFORMATEX wfx; /* Wave format structure */
HRESULT hRes; /* Result for windows functions */
- DSCBUFFERDESC descSecondary; /* Capturebuffer decsiption */
+ DSCBUFFERDESC descSecondary; /* Capturebuffer description */
dsoundsrc = GST_DIRECTSOUND_SRC (asrc);
- GST_DEBUG ("initializing directsoundsrc\n");
+ GST_DEBUG_OBJECT (asrc, "preparing directsoundsrc");
/* Define buffer */
memset (&wfx, 0, sizeof (WAVEFORMATEX));
- wfx.wFormatTag = WAVE_FORMAT_PCM; /* should be WAVE_FORMAT_PCM */
- wfx.nChannels = spec->channels;
- wfx.nSamplesPerSec = spec->rate; /* 8000|11025|22050|44100 */
- wfx.wBitsPerSample = spec->width; // 8|16;
-
- wfx.nBlockAlign = wfx.nChannels * (wfx.wBitsPerSample / 8);
+ wfx.wFormatTag = WAVE_FORMAT_PCM;
+ wfx.nChannels = GST_AUDIO_INFO_CHANNELS (&spec->info);
+ wfx.nSamplesPerSec = GST_AUDIO_INFO_RATE (&spec->info);
+ wfx.wBitsPerSample = GST_AUDIO_INFO_BPF (&spec->info) * 8 / wfx.nChannels;
+ wfx.nBlockAlign = GST_AUDIO_INFO_BPF (&spec->info);
wfx.nAvgBytesPerSec = wfx.nSamplesPerSec * wfx.nBlockAlign;
- wfx.cbSize = 0; /* This size is allways for PCM-format */
+ /* Ignored for WAVE_FORMAT_PCM. */
+ wfx.cbSize = 0;
- /* 1 or 2 Channels etc...
- FIXME: Never really tested. Is this ok?
- */
- if (spec->width == 16 && spec->channels == 1) {
- spec->format = GST_S16_LE;
- } else if (spec->width == 16 && spec->channels == 2) {
- spec->format = GST_U16_LE;
- } else if (spec->width == 8 && spec->channels == 1) {
- spec->format = GST_S8;
- } else if (spec->width == 8 && spec->channels == 2) {
- spec->format = GST_U8;
- }
+ if (wfx.wBitsPerSample != 16 && wfx.wBitsPerSample != 8)
+ goto dodgy_width;
/* Set the buffer size to two seconds.
This should never reached.
*/
dsoundsrc->buffer_size = wfx.nAvgBytesPerSec * 2;
- //notifysize * 16; //spec->width; /*original 16*/
- GST_DEBUG ("Buffer size: %d", dsoundsrc->buffer_size);
+ GST_DEBUG_OBJECT (asrc, "Buffer size: %d", dsoundsrc->buffer_size);
/* Init secondary buffer desciption */
memset (&descSecondary, 0, sizeof (DSCBUFFERDESC));
@@ -413,19 +380,15 @@ gst_directsound_src_prepare (GstAudioSrc * asrc, GstRingBufferSpec * spec)
/* Create buffer */
hRes = IDirectSoundCapture_CreateCaptureBuffer (dsoundsrc->pDSC,
&descSecondary, &dsoundsrc->pDSBSecondary, NULL);
- if (hRes != DS_OK) {
+ if (hRes != DS_OK)
goto capture_buffer;
- }
- spec->channels = wfx.nChannels;
- spec->rate = wfx.nSamplesPerSec;
- spec->bytes_per_sample = (spec->width / 8) * spec->channels;
- dsoundsrc->bytes_per_sample = spec->bytes_per_sample;
+ dsoundsrc->bytes_per_sample = GST_AUDIO_INFO_BPF (&spec->info);
GST_DEBUG ("latency time: %" G_GUINT64_FORMAT " - buffer time: %"
G_GUINT64_FORMAT, spec->latency_time, spec->buffer_time);
- /* Buffer-time should be allways more than 2*latency */
+ /* Buffer-time should be always more than 2*latency */
if (spec->buffer_time < spec->latency_time * 2) {
spec->buffer_time = spec->latency_time * 2;
GST_WARNING ("buffer-time was less than latency");
@@ -438,7 +401,6 @@ gst_directsound_src_prepare (GstAudioSrc * asrc, GstRingBufferSpec * spec)
dsoundsrc->latency_size = (gint) wfx.nAvgBytesPerSec *
dsoundsrc->latency_time / 1000000.0;
-
spec->segsize = (guint) (((double) spec->buffer_time / 1000000.0) *
wfx.nAvgBytesPerSec);
@@ -446,27 +408,23 @@ gst_directsound_src_prepare (GstAudioSrc * asrc, GstRingBufferSpec * spec)
if (spec->segsize < 1)
spec->segsize = 1;
- spec->segtotal = spec->width * (wfx.nAvgBytesPerSec / spec->segsize);
-
- GST_DEBUG ("bytes/sec: %lu, buffer size: %d, segsize: %d, segtotal: %d",
- wfx.nAvgBytesPerSec,
- dsoundsrc->buffer_size, spec->segsize, spec->segtotal);
-
- spec->silence_sample[0] = 0;
- spec->silence_sample[1] = 0;
- spec->silence_sample[2] = 0;
- spec->silence_sample[3] = 0;
+ spec->segtotal = GST_AUDIO_INFO_BPF (&spec->info) * 8 *
+ (wfx.nAvgBytesPerSec / spec->segsize);
- if (spec->width != 16 && spec->width != 8)
- goto dodgy_width;
+ GST_DEBUG_OBJECT (asrc,
+ "bytes/sec: %lu, buffer size: %d, segsize: %d, segtotal: %d",
+ wfx.nAvgBytesPerSec, dsoundsrc->buffer_size, spec->segsize,
+ spec->segtotal);
- /* Not readed anything yet */
+ /* Not read anything yet */
dsoundsrc->current_circular_offset = 0;
- GST_DEBUG ("GstRingBufferSpec->channels: %d, GstRingBufferSpec->rate: %d, \
-GstRingBufferSpec->bytes_per_sample: %d\n\
-WAVEFORMATEX.nSamplesPerSec: %ld, WAVEFORMATEX.wBitsPerSample: %d, \
-WAVEFORMATEX.nBlockAlign: %d, WAVEFORMATEX.nAvgBytesPerSec: %ld\n", spec->channels, spec->rate, spec->bytes_per_sample, wfx.nSamplesPerSec, wfx.wBitsPerSample, wfx.nBlockAlign, wfx.nAvgBytesPerSec);
+ GST_DEBUG_OBJECT (asrc, "channels: %d, rate: %d, bytes_per_sample: %d"
+ " WAVEFORMATEX.nSamplesPerSec: %ld, WAVEFORMATEX.wBitsPerSample: %d,"
+ " WAVEFORMATEX.nBlockAlign: %d, WAVEFORMATEX.nAvgBytesPerSec: %ld",
+ GST_AUDIO_INFO_CHANNELS (&spec->info), GST_AUDIO_INFO_RATE (&spec->info),
+ GST_AUDIO_INFO_BPF (&spec->info), wfx.nSamplesPerSec, wfx.wBitsPerSample,
+ wfx.nBlockAlign, wfx.nAvgBytesPerSec);
return TRUE;
@@ -479,21 +437,18 @@ capture_buffer:
dodgy_width:
{
GST_ELEMENT_ERROR (dsoundsrc, RESOURCE, OPEN_READ,
- ("Unexpected width %d", spec->width), (NULL));
+ ("Unexpected width %d", wfx.wBitsPerSample), (NULL));
return FALSE;
}
-
}
static gboolean
gst_directsound_src_unprepare (GstAudioSrc * asrc)
{
GstDirectSoundSrc *dsoundsrc;
+ HRESULT hRes;
- HRESULT hRes; /* Result for windows functions */
-
- /* Resets */
- GST_DEBUG ("unpreparing directsoundsrc");
+ GST_DEBUG_OBJECT (asrc, "unpreparing directsoundsrc");
dsoundsrc = GST_DIRECTSOUND_SRC (asrc);
@@ -504,13 +459,13 @@ gst_directsound_src_unprepare (GstAudioSrc * asrc)
hRes = IDirectSoundCaptureBuffer_Release (dsoundsrc->pDSBSecondary);
return TRUE;
-
}
/*
return number of readed bytes */
static guint
-gst_directsound_src_read (GstAudioSrc * asrc, gpointer data, guint length)
+gst_directsound_src_read (GstAudioSrc * asrc, gpointer data, guint length,
+ GstClockTime * timestamp)
{
GstDirectSoundSrc *dsoundsrc;
@@ -525,7 +480,7 @@ gst_directsound_src_read (GstAudioSrc * asrc, gpointer data, guint length)
DWORD dwStatus = 0;
- GST_DEBUG ("reading directsoundsrc\n");
+ GST_DEBUG_OBJECT (asrc, "reading directsoundsrc");
dsoundsrc = GST_DIRECTSOUND_SRC (asrc);
@@ -535,12 +490,12 @@ gst_directsound_src_read (GstAudioSrc * asrc, gpointer data, guint length)
hRes = IDirectSoundCaptureBuffer_GetStatus (dsoundsrc->pDSBSecondary,
&dwStatus);
- /* Starting capturing if not allready */
+ /* Starting capturing if not already */
if (!(dwStatus & DSCBSTATUS_CAPTURING)) {
hRes = IDirectSoundCaptureBuffer_Start (dsoundsrc->pDSBSecondary,
DSCBSTART_LOOPING);
// Sleep (dsoundsrc->latency_time/1000);
- GST_DEBUG ("capture started");
+ GST_DEBUG_OBJECT (asrc, "capture started");
}
// calculate_buffersize:
while (length > dwBufferSize) {
@@ -558,8 +513,6 @@ gst_directsound_src_read (GstAudioSrc * asrc, gpointer data, guint length)
dwBufferSize =
dwCurrentCaptureCursor - dsoundsrc->current_circular_offset;
}
-
-
} // while (...
/* Lock the buffer */
@@ -588,7 +541,6 @@ gst_directsound_src_read (GstAudioSrc * asrc, gpointer data, guint length)
/* return length (readed data size in bytes) */
return length;
-
}
static guint
@@ -600,7 +552,7 @@ gst_directsound_src_delay (GstAudioSrc * asrc)
DWORD dwBytesInQueue = 0;
gint nNbSamplesInQueue = 0;
- GST_DEBUG ("Delay\n");
+ GST_DEBUG_OBJECT (asrc, "Delay");
dsoundsrc = GST_DIRECTSOUND_SRC (asrc);
@@ -632,7 +584,7 @@ gst_directsound_src_reset (GstAudioSrc * asrc)
LPVOID pLockedBuffer = NULL;
DWORD dwSizeBuffer = 0;
- GST_DEBUG ("reset directsoundsrc\n");
+ GST_DEBUG_OBJECT (asrc, "reset directsoundsrc");
dsoundsrc = GST_DIRECTSOUND_SRC (asrc);
diff --git a/sys/dshowdecwrapper/Makefile.in b/sys/dshowdecwrapper/Makefile.in
index 4601f7aa..6b47cfba 100644
--- a/sys/dshowdecwrapper/Makefile.in
+++ b/sys/dshowdecwrapper/Makefile.in
@@ -256,6 +256,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/sys/dshowsrcwrapper/Makefile.in b/sys/dshowsrcwrapper/Makefile.in
index 686d725e..89c60252 100644
--- a/sys/dshowsrcwrapper/Makefile.in
+++ b/sys/dshowsrcwrapper/Makefile.in
@@ -186,6 +186,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/sys/dshowsrcwrapper/gstdshowaudiosrc.cpp b/sys/dshowsrcwrapper/gstdshowaudiosrc.cpp
index 6d4f15c7..2ba9c3b1 100644
--- a/sys/dshowsrcwrapper/gstdshowaudiosrc.cpp
+++ b/sys/dshowsrcwrapper/gstdshowaudiosrc.cpp
@@ -121,7 +121,7 @@ gst_dshowaudiosrc_base_init (gpointer klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&src_template));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"Directshow audio capture source", "Source/Audio",
"Receive data from a directshow audio capture graph",
"Sebastien Moutte <sebastien@moutte.net>");
diff --git a/sys/dshowsrcwrapper/gstdshowvideosrc.cpp b/sys/dshowsrcwrapper/gstdshowvideosrc.cpp
index 87293239..4fe0695a 100644
--- a/sys/dshowsrcwrapper/gstdshowvideosrc.cpp
+++ b/sys/dshowsrcwrapper/gstdshowvideosrc.cpp
@@ -129,7 +129,7 @@ gst_dshowvideosrc_base_init (gpointer klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&src_template));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"DirectShow video capture source", "Source/Video",
"Receive data from a directshow video capture graph",
"Sebastien Moutte <sebastien@moutte.net>");
diff --git a/sys/dshowvideosink/Makefile.in b/sys/dshowvideosink/Makefile.in
index 6e518e20..7ec55a5b 100644
--- a/sys/dshowvideosink/Makefile.in
+++ b/sys/dshowvideosink/Makefile.in
@@ -186,6 +186,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/sys/dshowvideosink/dshowvideosink.cpp b/sys/dshowvideosink/dshowvideosink.cpp
index 0bd2eb0a..062317fb 100644
--- a/sys/dshowvideosink/dshowvideosink.cpp
+++ b/sys/dshowvideosink/dshowvideosink.cpp
@@ -224,7 +224,7 @@ gst_dshowvideosink_base_init (gpointer klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&sink_template));
- gst_element_class_set_metadata (element_class, "DirectShow video sink",
+ gst_element_class_set_static_metadata (element_class, "DirectShow video sink",
"Sink/Video", "Display data using a DirectShow video renderer",
"Pioneers of the Inevitable <songbird@songbirdnest.com>, " \
"FLUENDO S.A. <support@fluendo.com>");
diff --git a/sys/dvb/Makefile.in b/sys/dvb/Makefile.in
index fc628720..91233e7f 100644
--- a/sys/dvb/Makefile.in
+++ b/sys/dvb/Makefile.in
@@ -259,6 +259,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/sys/dvb/dvbbasebin.c b/sys/dvb/dvbbasebin.c
index 4e91491a..45a7aad5 100644
--- a/sys/dvb/dvbbasebin.c
+++ b/sys/dvb/dvbbasebin.c
@@ -228,7 +228,7 @@ dvb_base_bin_class_init (DvbBaseBinClass * klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&src_template));
- gst_element_class_set_metadata (element_class, "DVB bin",
+ gst_element_class_set_static_metadata (element_class, "DVB bin",
"Source/Bin/Video",
"Access descramble and split DVB streams",
"Alessandro Decina <alessandro@nnva.org>");
diff --git a/sys/dvb/gstdvbsrc.c b/sys/dvb/gstdvbsrc.c
index b7dcb783..84aca09f 100644
--- a/sys/dvb/gstdvbsrc.c
+++ b/sys/dvb/gstdvbsrc.c
@@ -334,7 +334,7 @@ gst_dvbsrc_class_init (GstDvbSrcClass * klass)
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&ts_src_factory));
- gst_element_class_set_metadata (gstelement_class, "DVB Source",
+ gst_element_class_set_static_metadata (gstelement_class, "DVB Source",
"Source/Video",
"Digital Video Broadcast Source",
"P2P-VCR, C-Lab, University of Paderborn,"
diff --git a/sys/fbdev/Makefile.in b/sys/fbdev/Makefile.in
index 56eb825f..de5ff9e7 100644
--- a/sys/fbdev/Makefile.in
+++ b/sys/fbdev/Makefile.in
@@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/sys/fbdev/gstfbdevsink.c b/sys/fbdev/gstfbdevsink.c
index 70fad8ed..639641d9 100644
--- a/sys/fbdev/gstfbdevsink.c
+++ b/sys/fbdev/gstfbdevsink.c
@@ -90,7 +90,7 @@ gst_fbdevsink_base_init (gpointer g_class)
GST_STATIC_CAPS (GST_FBDEV_TEMPLATE_CAPS)
);
- gst_element_class_set_metadata (element_class, "fbdev video sink",
+ gst_element_class_set_static_metadata (element_class, "fbdev video sink",
"Sink/Video",
"A linux framebuffer videosink", "Sean D'Epagnier <sean@depagnier.com>");
gst_element_class_add_pad_template (element_class,
diff --git a/sys/linsys/Makefile.in b/sys/linsys/Makefile.in
index cc821160..3305bfb3 100644
--- a/sys/linsys/Makefile.in
+++ b/sys/linsys/Makefile.in
@@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/sys/linsys/gstlinsyssdisink.c b/sys/linsys/gstlinsyssdisink.c
index 4250e079..bcb1c8ca 100644
--- a/sys/linsys/gstlinsyssdisink.c
+++ b/sys/linsys/gstlinsyssdisink.c
@@ -102,7 +102,7 @@ gst_linsys_sdi_sink_base_init (gpointer g_class)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_linsys_sdi_sink_sink_template));
- gst_element_class_set_metadata (element_class, "SDI video sink",
+ gst_element_class_set_static_metadata (element_class, "SDI video sink",
"Sink/Video", "Writes video from SDI transmit device",
"David Schleef <ds@entropywave.com>");
}
diff --git a/sys/linsys/gstlinsyssdisrc.c b/sys/linsys/gstlinsyssdisrc.c
index 9b5a3270..6bdbe5ed 100644
--- a/sys/linsys/gstlinsyssdisrc.c
+++ b/sys/linsys/gstlinsyssdisrc.c
@@ -106,7 +106,7 @@ gst_linsys_sdi_src_base_init (gpointer g_class)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_linsys_sdi_src_src_template));
- gst_element_class_set_metadata (element_class, "SDI video source",
+ gst_element_class_set_static_metadata (element_class, "SDI video source",
"Source/Video", "Reads video from SDI capture device",
"David Schleef <ds@entropywave.com>");
}
diff --git a/sys/opensles/Makefile.am b/sys/opensles/Makefile.am
new file mode 100644
index 00000000..dda50327
--- /dev/null
+++ b/sys/opensles/Makefile.am
@@ -0,0 +1,23 @@
+
+plugin_LTLIBRARIES = libgstopensles.la
+
+libgstopensles_la_SOURCES = openslesringbuffer.c \
+ openslessink.c \
+ openslessrc.c \
+ opensles.c
+
+libgstopensles_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) \
+ -Wno-deprecated-declarations
+libgstopensles_la_LIBADD = \
+ -lgstinterfaces-@GST_MAJORMINOR@ \
+ -lgstaudio-@GST_MAJORMINOR@ \
+ $(GST_PLUGINS_BASE_LIBS) \
+ $(GST_BASE_LIBS) \
+ $(GST_LIBS)
+libgstopensles_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -lOpenSLES
+libgstopensles_la_LIBTOOLFLAGS = --tag=disable-static --tag=CC
+
+noinst_HEADERS = openslesringbuffer.h \
+ openslessink.h \
+ openslessrc.h
+
diff --git a/sys/opensles/Makefile.in b/sys/opensles/Makefile.in
new file mode 100644
index 00000000..99c5c5a7
--- /dev/null
+++ b/sys/opensles/Makefile.in
@@ -0,0 +1,982 @@
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+VPATH = @srcdir@
+am__make_dryrun = \
+ { \
+ am__dry=no; \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
+ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+ *) \
+ for am__flg in $$MAKEFLAGS; do \
+ case $$am__flg in \
+ *=*|--*) ;; \
+ *n*) am__dry=yes; break;; \
+ esac; \
+ done;; \
+ esac; \
+ test $$am__dry = yes; \
+ }
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = sys/opensles
+DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
+ $(top_srcdir)/common/m4/as-auto-alt.m4 \
+ $(top_srcdir)/common/m4/as-compiler-flag.m4 \
+ $(top_srcdir)/common/m4/as-libtool.m4 \
+ $(top_srcdir)/common/m4/as-python.m4 \
+ $(top_srcdir)/common/m4/as-scrub-include.m4 \
+ $(top_srcdir)/common/m4/as-version.m4 \
+ $(top_srcdir)/common/m4/ax_create_stdint_h.m4 \
+ $(top_srcdir)/common/m4/gst-arch.m4 \
+ $(top_srcdir)/common/m4/gst-args.m4 \
+ $(top_srcdir)/common/m4/gst-check.m4 \
+ $(top_srcdir)/common/m4/gst-default.m4 \
+ $(top_srcdir)/common/m4/gst-dowhile.m4 \
+ $(top_srcdir)/common/m4/gst-error.m4 \
+ $(top_srcdir)/common/m4/gst-feature.m4 \
+ $(top_srcdir)/common/m4/gst-gettext.m4 \
+ $(top_srcdir)/common/m4/gst-glib2.m4 \
+ $(top_srcdir)/common/m4/gst-package-release-datetime.m4 \
+ $(top_srcdir)/common/m4/gst-platform.m4 \
+ $(top_srcdir)/common/m4/gst-plugin-docs.m4 \
+ $(top_srcdir)/common/m4/gst-plugindir.m4 \
+ $(top_srcdir)/common/m4/gst-x11.m4 \
+ $(top_srcdir)/common/m4/gst.m4 \
+ $(top_srcdir)/common/m4/gtk-doc.m4 \
+ $(top_srcdir)/common/m4/orc.m4 $(top_srcdir)/common/m4/pkg.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gsettings.m4 \
+ $(top_srcdir)/m4/gst-fionread.m4 $(top_srcdir)/m4/gst-sdl.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__installdirs = "$(DESTDIR)$(plugindir)"
+LTLIBRARIES = $(plugin_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgstopensles_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+am_libgstopensles_la_OBJECTS = \
+ libgstopensles_la-openslesringbuffer.lo \
+ libgstopensles_la-openslessink.lo \
+ libgstopensles_la-openslessrc.lo libgstopensles_la-opensles.lo
+libgstopensles_la_OBJECTS = $(am_libgstopensles_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+libgstopensles_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(libgstopensles_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
+ $(CCLD) $(libgstopensles_la_CFLAGS) $(CFLAGS) \
+ $(libgstopensles_la_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+SOURCES = $(libgstopensles_la_SOURCES)
+DIST_SOURCES = $(libgstopensles_la_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+HEADERS = $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
+ACMENC_CFLAGS = @ACMENC_CFLAGS@
+ACMMP3DEC_CFLAGS = @ACMMP3DEC_CFLAGS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APEXSINK_CFLAGS = @APEXSINK_CFLAGS@
+APEXSINK_LIBS = @APEXSINK_LIBS@
+AR = @AR@
+AS = @AS@
+ASSRENDER_CFLAGS = @ASSRENDER_CFLAGS@
+ASSRENDER_LIBS = @ASSRENDER_LIBS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BZ2_LIBS = @BZ2_LIBS@
+CC = @CC@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CDAUDIO_CFLAGS = @CDAUDIO_CFLAGS@
+CDAUDIO_LIBS = @CDAUDIO_LIBS@
+CELT_0_11_CFLAGS = @CELT_0_11_CFLAGS@
+CELT_0_11_LIBS = @CELT_0_11_LIBS@
+CELT_0_7_CFLAGS = @CELT_0_7_CFLAGS@
+CELT_0_7_LIBS = @CELT_0_7_LIBS@
+CELT_0_8_CFLAGS = @CELT_0_8_CFLAGS@
+CELT_0_8_LIBS = @CELT_0_8_LIBS@
+CELT_CFLAGS = @CELT_CFLAGS@
+CELT_LIBS = @CELT_LIBS@
+CFLAGS = @CFLAGS@
+CHROMAPRINT_CFLAGS = @CHROMAPRINT_CFLAGS@
+CHROMAPRINT_LIBS = @CHROMAPRINT_LIBS@
+COG_CFLAGS = @COG_CFLAGS@
+COG_LIBS = @COG_LIBS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CURL_CFLAGS = @CURL_CFLAGS@
+CURL_LIBS = @CURL_LIBS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DCCP_LIBS = @DCCP_LIBS@
+DECKLINK_CXXFLAGS = @DECKLINK_CXXFLAGS@
+DECKLINK_LIBS = @DECKLINK_LIBS@
+DEFAULT_AUDIOSINK = @DEFAULT_AUDIOSINK@
+DEFAULT_AUDIOSRC = @DEFAULT_AUDIOSRC@
+DEFAULT_VIDEOSINK = @DEFAULT_VIDEOSINK@
+DEFAULT_VIDEOSRC = @DEFAULT_VIDEOSRC@
+DEFAULT_VISUALIZER = @DEFAULT_VISUALIZER@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DEPRECATED_CFLAGS = @DEPRECATED_CFLAGS@
+DIRAC_CFLAGS = @DIRAC_CFLAGS@
+DIRAC_LIBS = @DIRAC_LIBS@
+DIRECT3D9_LIBS = @DIRECT3D9_LIBS@
+DIRECT3D_LIBS = @DIRECT3D_LIBS@
+DIRECTDRAW_LIBS = @DIRECTDRAW_LIBS@
+DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@
+DIRECTFB_LIBS = @DIRECTFB_LIBS@
+DIRECTSHOW_LIBS = @DIRECTSHOW_LIBS@
+DIRECTSOUND_LIBS = @DIRECTSOUND_LIBS@
+DIRECTX_CFLAGS = @DIRECTX_CFLAGS@
+DIRECTX_LDFLAGS = @DIRECTX_LDFLAGS@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DTS_LIBS = @DTS_LIBS@
+DUMPBIN = @DUMPBIN@
+DVDNAV_CFLAGS = @DVDNAV_CFLAGS@
+DVDNAV_LIBS = @DVDNAV_LIBS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
+EGREP = @EGREP@
+ERROR_CFLAGS = @ERROR_CFLAGS@
+ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
+ERROR_OBJCFLAGS = @ERROR_OBJCFLAGS@
+EXEEXT = @EXEEXT@
+EXIF_CFLAGS = @EXIF_CFLAGS@
+EXIF_LIBS = @EXIF_LIBS@
+FAAC_LIBS = @FAAC_LIBS@
+FAAD_IS_NEAAC = @FAAD_IS_NEAAC@
+FAAD_LIBS = @FAAD_LIBS@
+FFLAGS = @FFLAGS@
+FGREP = @FGREP@
+FLITE_CFLAGS = @FLITE_CFLAGS@
+FLITE_LIBS = @FLITE_LIBS@
+GCOV = @GCOV@
+GCOV_CFLAGS = @GCOV_CFLAGS@
+GCOV_LIBS = @GCOV_LIBS@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
+GIO_CFLAGS = @GIO_CFLAGS@
+GIO_LDFLAGS = @GIO_LDFLAGS@
+GIO_LIBS = @GIO_LIBS@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@
+GLIB_EXTRA_CFLAGS = @GLIB_EXTRA_CFLAGS@
+GLIB_GENMARSHAL = @GLIB_GENMARSHAL@
+GLIB_LIBS = @GLIB_LIBS@
+GLIB_MKENUMS = @GLIB_MKENUMS@
+GLIB_PREFIX = @GLIB_PREFIX@
+GLIB_REQ = @GLIB_REQ@
+GME_LIBS = @GME_LIBS@
+GMODULE_EXPORT_CFLAGS = @GMODULE_EXPORT_CFLAGS@
+GMODULE_EXPORT_LIBS = @GMODULE_EXPORT_LIBS@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GMYTH_CFLAGS = @GMYTH_CFLAGS@
+GMYTH_LIBS = @GMYTH_LIBS@
+GREP = @GREP@
+GSETTINGS_CFLAGS = @GSETTINGS_CFLAGS@
+GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@
+GSETTINGS_LIBS = @GSETTINGS_LIBS@
+GSM_LIBS = @GSM_LIBS@
+GSTPB_PLUGINS_DIR = @GSTPB_PLUGINS_DIR@
+GSTPB_PREFIX = @GSTPB_PREFIX@
+GST_AGE = @GST_AGE@
+GST_ALL_LDFLAGS = @GST_ALL_LDFLAGS@
+GST_API_VERSION = @GST_API_VERSION@
+GST_BASE_CFLAGS = @GST_BASE_CFLAGS@
+GST_BASE_LIBS = @GST_BASE_LIBS@
+GST_CFLAGS = @GST_CFLAGS@
+GST_CHECK_CFLAGS = @GST_CHECK_CFLAGS@
+GST_CHECK_LIBS = @GST_CHECK_LIBS@
+GST_CONTROLLER_CFLAGS = @GST_CONTROLLER_CFLAGS@
+GST_CONTROLLER_LIBS = @GST_CONTROLLER_LIBS@
+GST_CURRENT = @GST_CURRENT@
+GST_CXXFLAGS = @GST_CXXFLAGS@
+GST_LEVEL_DEFAULT = @GST_LEVEL_DEFAULT@
+GST_LIBS = @GST_LIBS@
+GST_LIBVERSION = @GST_LIBVERSION@
+GST_LIB_LDFLAGS = @GST_LIB_LDFLAGS@
+GST_LICENSE = @GST_LICENSE@
+GST_LT_LDFLAGS = @GST_LT_LDFLAGS@
+GST_OBJCFLAGS = @GST_OBJCFLAGS@
+GST_OPTION_CFLAGS = @GST_OPTION_CFLAGS@
+GST_OPTION_CXXFLAGS = @GST_OPTION_CXXFLAGS@
+GST_OPTION_OBJCFLAGS = @GST_OPTION_OBJCFLAGS@
+GST_PACKAGE_NAME = @GST_PACKAGE_NAME@
+GST_PACKAGE_ORIGIN = @GST_PACKAGE_ORIGIN@
+GST_PLUGINS_ALL = @GST_PLUGINS_ALL@
+GST_PLUGINS_BAD_CFLAGS = @GST_PLUGINS_BAD_CFLAGS@
+GST_PLUGINS_BAD_CXXFLAGS = @GST_PLUGINS_BAD_CXXFLAGS@
+GST_PLUGINS_BAD_OBJCFLAGS = @GST_PLUGINS_BAD_OBJCFLAGS@
+GST_PLUGINS_BASE_CFLAGS = @GST_PLUGINS_BASE_CFLAGS@
+GST_PLUGINS_BASE_DIR = @GST_PLUGINS_BASE_DIR@
+GST_PLUGINS_BASE_LIBS = @GST_PLUGINS_BASE_LIBS@
+GST_PLUGINS_DIR = @GST_PLUGINS_DIR@
+GST_PLUGINS_FFMPEG_CFLAGS = @GST_PLUGINS_FFMPEG_CFLAGS@
+GST_PLUGINS_FFMPEG_DIR = @GST_PLUGINS_FFMPEG_DIR@
+GST_PLUGINS_FFMPEG_LIBS = @GST_PLUGINS_FFMPEG_LIBS@
+GST_PLUGINS_GOOD_CFLAGS = @GST_PLUGINS_GOOD_CFLAGS@
+GST_PLUGINS_GOOD_DIR = @GST_PLUGINS_GOOD_DIR@
+GST_PLUGINS_GOOD_LIBS = @GST_PLUGINS_GOOD_LIBS@
+GST_PLUGINS_NONPORTED = @GST_PLUGINS_NONPORTED@
+GST_PLUGINS_SELECTED = @GST_PLUGINS_SELECTED@
+GST_PLUGINS_UGLY_CFLAGS = @GST_PLUGINS_UGLY_CFLAGS@
+GST_PLUGINS_UGLY_DIR = @GST_PLUGINS_UGLY_DIR@
+GST_PLUGINS_UGLY_LIBS = @GST_PLUGINS_UGLY_LIBS@
+GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
+GST_PREFIX = @GST_PREFIX@
+GST_REVISION = @GST_REVISION@
+GST_TOOLS_DIR = @GST_TOOLS_DIR@
+GST_VIDEO_CFLAGS = @GST_VIDEO_CFLAGS@
+GST_VIDEO_LIBS = @GST_VIDEO_LIBS@
+GTKDOC_CHECK = @GTKDOC_CHECK@
+GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
+GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
+GTKDOC_MKPDF = @GTKDOC_MKPDF@
+GTKDOC_REBASE = @GTKDOC_REBASE@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+G_UDEV_CFLAGS = @G_UDEV_CFLAGS@
+G_UDEV_LIBS = @G_UDEV_LIBS@
+HAVE_BZ2 = @HAVE_BZ2@
+HAVE_CXX = @HAVE_CXX@
+HAVE_DIRECT3D = @HAVE_DIRECT3D@
+HAVE_DIRECT3D9 = @HAVE_DIRECT3D9@
+HAVE_DIRECTDRAW = @HAVE_DIRECTDRAW@
+HAVE_DIRECTSHOW = @HAVE_DIRECTSHOW@
+HAVE_DIRECTSOUND = @HAVE_DIRECTSOUND@
+HAVE_DTS = @HAVE_DTS@
+HAVE_FAAC = @HAVE_FAAC@
+HAVE_FAAD = @HAVE_FAAD@
+HAVE_FLITE = @HAVE_FLITE@
+HAVE_GSM = @HAVE_GSM@
+HAVE_JASPER = @HAVE_JASPER@
+HAVE_NAS = @HAVE_NAS@
+HAVE_WILDMIDI = @HAVE_WILDMIDI@
+HAVE_X = @HAVE_X@
+HAVE_X11 = @HAVE_X11@
+HTML_DIR = @HTML_DIR@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+JASPER_LIBS = @JASPER_LIBS@
+KATE_CFLAGS = @KATE_CFLAGS@
+KATE_LIBS = @KATE_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBDC1394_CFLAGS = @LIBDC1394_CFLAGS@
+LIBDC1394_LIBS = @LIBDC1394_LIBS@
+LIBDIR = @LIBDIR@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBM = @LIBM@
+LIBMMS_CFLAGS = @LIBMMS_CFLAGS@
+LIBMMS_LIBS = @LIBMMS_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBUDEV_CFLAGS = @LIBUDEV_CFLAGS@
+LIBUDEV_LIBS = @LIBUDEV_LIBS@
+LIBUSB_CFLAGS = @LIBUSB_CFLAGS@
+LIBUSB_LIBS = @LIBUSB_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LOCALEDIR = @LOCALEDIR@
+LRDF_CFLAGS = @LRDF_CFLAGS@
+LRDF_LIBS = @LRDF_LIBS@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MIMIC_CFLAGS = @MIMIC_CFLAGS@
+MIMIC_LIBS = @MIMIC_LIBS@
+MJPEG_CFLAGS = @MJPEG_CFLAGS@
+MJPEG_LIBS = @MJPEG_LIBS@
+MKDIR_P = @MKDIR_P@
+MODPLUG_CFLAGS = @MODPLUG_CFLAGS@
+MODPLUG_LIBS = @MODPLUG_LIBS@
+MPEG2ENC_CFLAGS = @MPEG2ENC_CFLAGS@
+MPEG2ENC_LIBS = @MPEG2ENC_LIBS@
+MPG123_CFLAGS = @MPG123_CFLAGS@
+MPG123_LIBS = @MPG123_LIBS@
+MPLEX_CFLAGS = @MPLEX_CFLAGS@
+MPLEX_LDFLAGS = @MPLEX_LDFLAGS@
+MPLEX_LIBS = @MPLEX_LIBS@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+MUSEPACK_LIBS = @MUSEPACK_LIBS@
+MUSICBRAINZ_CFLAGS = @MUSICBRAINZ_CFLAGS@
+MUSICBRAINZ_LIBS = @MUSICBRAINZ_LIBS@
+NAS_CFLAGS = @NAS_CFLAGS@
+NAS_LIBS = @NAS_LIBS@
+NEON_CFLAGS = @NEON_CFLAGS@
+NEON_LIBS = @NEON_LIBS@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJC = @OBJC@
+OBJCDEPMODE = @OBJCDEPMODE@
+OBJCFLAGS = @OBJCFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OFA_CFLAGS = @OFA_CFLAGS@
+OFA_LIBS = @OFA_LIBS@
+OPENAL_CFLAGS = @OPENAL_CFLAGS@
+OPENAL_LIBS = @OPENAL_LIBS@
+OPENCV_CFLAGS = @OPENCV_CFLAGS@
+OPENCV_LIBS = @OPENCV_LIBS@
+OPENCV_PREFIX = @OPENCV_PREFIX@
+OPUS_CFLAGS = @OPUS_CFLAGS@
+OPUS_LIBS = @OPUS_LIBS@
+ORCC = @ORCC@
+ORCC_FLAGS = @ORCC_FLAGS@
+ORC_CFLAGS = @ORC_CFLAGS@
+ORC_LIBS = @ORC_LIBS@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
+PACKAGE_VERSION_MICRO = @PACKAGE_VERSION_MICRO@
+PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
+PACKAGE_VERSION_NANO = @PACKAGE_VERSION_NANO@
+PACKAGE_VERSION_RELEASE = @PACKAGE_VERSION_RELEASE@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PLUGINDIR = @PLUGINDIR@
+POSUB = @POSUB@
+PROFILE_CFLAGS = @PROFILE_CFLAGS@
+PVR_CFLAGS = @PVR_CFLAGS@
+PVR_LIBS = @PVR_LIBS@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+RSVG_2_35_0_CFLAGS = @RSVG_2_35_0_CFLAGS@
+RSVG_2_35_0_LIBS = @RSVG_2_35_0_LIBS@
+RSVG_CFLAGS = @RSVG_CFLAGS@
+RSVG_LIBS = @RSVG_LIBS@
+RTMP_CFLAGS = @RTMP_CFLAGS@
+RTMP_LIBS = @RTMP_LIBS@
+SCHRO_CFLAGS = @SCHRO_CFLAGS@
+SCHRO_LIBS = @SCHRO_LIBS@
+SDL_CFLAGS = @SDL_CFLAGS@
+SDL_CONFIG = @SDL_CONFIG@
+SDL_LIBS = @SDL_LIBS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SLV2_CFLAGS = @SLV2_CFLAGS@
+SLV2_LIBS = @SLV2_LIBS@
+SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
+SNDFILE_LIBS = @SNDFILE_LIBS@
+SNDIO_LIBS = @SNDIO_LIBS@
+SOUNDTOUCH_CFLAGS = @SOUNDTOUCH_CFLAGS@
+SOUNDTOUCH_LIBS = @SOUNDTOUCH_LIBS@
+SPANDSP_CFLAGS = @SPANDSP_CFLAGS@
+SPANDSP_LIBS = @SPANDSP_LIBS@
+SPC_LIBS = @SPC_LIBS@
+STRIP = @STRIP@
+SWFDEC_CFLAGS = @SWFDEC_CFLAGS@
+SWFDEC_LIBS = @SWFDEC_LIBS@
+TELETEXTDEC_CFLAGS = @TELETEXTDEC_CFLAGS@
+TELETEXTDEC_LIBS = @TELETEXTDEC_LIBS@
+TIGER_CFLAGS = @TIGER_CFLAGS@
+TIGER_LIBS = @TIGER_LIBS@
+TIMIDITY_CFLAGS = @TIMIDITY_CFLAGS@
+TIMIDITY_LIBS = @TIMIDITY_LIBS@
+USE_NLS = @USE_NLS@
+VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
+VALGRIND_LIBS = @VALGRIND_LIBS@
+VALGRIND_PATH = @VALGRIND_PATH@
+VDPAU_CFLAGS = @VDPAU_CFLAGS@
+VDPAU_LIBS = @VDPAU_LIBS@
+VERSION = @VERSION@
+VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
+VOAACENC_LIBS = @VOAACENC_LIBS@
+VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
+VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+WARNING_CFLAGS = @WARNING_CFLAGS@
+WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
+WARNING_OBJCFLAGS = @WARNING_OBJCFLAGS@
+WAYLAND_CFLAGS = @WAYLAND_CFLAGS@
+WAYLAND_LIBS = @WAYLAND_LIBS@
+WILDMIDI_CFLAGS = @WILDMIDI_CFLAGS@
+WILDMIDI_LIBS = @WILDMIDI_LIBS@
+WINSOCK2_LIBS = @WINSOCK2_LIBS@
+X11_CFLAGS = @X11_CFLAGS@
+X11_LIBS = @X11_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+XVID_LIBS = @XVID_LIBS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ZBAR_CFLAGS = @ZBAR_CFLAGS@
+ZBAR_LIBS = @ZBAR_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_OBJC = @ac_ct_OBJC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+gsettingsschemadir = @gsettingsschemadir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+plugindir = @plugindir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+plugin_LTLIBRARIES = libgstopensles.la
+libgstopensles_la_SOURCES = openslesringbuffer.c \
+ openslessink.c \
+ openslessrc.c \
+ opensles.c
+
+libgstopensles_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) \
+ -Wno-deprecated-declarations
+
+libgstopensles_la_LIBADD = \
+ -lgstinterfaces-@GST_MAJORMINOR@ \
+ -lgstaudio-@GST_MAJORMINOR@ \
+ $(GST_PLUGINS_BASE_LIBS) \
+ $(GST_BASE_LIBS) \
+ $(GST_LIBS)
+
+libgstopensles_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -lOpenSLES
+libgstopensles_la_LIBTOOLFLAGS = --tag=disable-static --tag=CC
+noinst_HEADERS = openslesringbuffer.h \
+ openslessink.h \
+ openslessrc.h
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu sys/opensles/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu sys/opensles/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ @list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+ list2=; for p in $$list; do \
+ if test -f $$p; then \
+ list2="$$list2 $$p"; \
+ else :; fi; \
+ done; \
+ test -z "$$list2" || { \
+ echo " $(MKDIR_P) '$(DESTDIR)$(plugindir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(plugindir)" || exit 1; \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \
+ }
+
+uninstall-pluginLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \
+ done
+
+clean-pluginLTLIBRARIES:
+ -test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES)
+ @list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libgstopensles.la: $(libgstopensles_la_OBJECTS) $(libgstopensles_la_DEPENDENCIES) $(EXTRA_libgstopensles_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libgstopensles_la_LINK) -rpath $(plugindir) $(libgstopensles_la_OBJECTS) $(libgstopensles_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstopensles_la-opensles.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstopensles_la-openslesringbuffer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstopensles_la-openslessink.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstopensles_la-openslessrc.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+libgstopensles_la-openslesringbuffer.lo: openslesringbuffer.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopensles_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopensles_la_CFLAGS) $(CFLAGS) -MT libgstopensles_la-openslesringbuffer.lo -MD -MP -MF $(DEPDIR)/libgstopensles_la-openslesringbuffer.Tpo -c -o libgstopensles_la-openslesringbuffer.lo `test -f 'openslesringbuffer.c' || echo '$(srcdir)/'`openslesringbuffer.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstopensles_la-openslesringbuffer.Tpo $(DEPDIR)/libgstopensles_la-openslesringbuffer.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='openslesringbuffer.c' object='libgstopensles_la-openslesringbuffer.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 $(libgstopensles_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopensles_la_CFLAGS) $(CFLAGS) -c -o libgstopensles_la-openslesringbuffer.lo `test -f 'openslesringbuffer.c' || echo '$(srcdir)/'`openslesringbuffer.c
+
+libgstopensles_la-openslessink.lo: openslessink.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopensles_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopensles_la_CFLAGS) $(CFLAGS) -MT libgstopensles_la-openslessink.lo -MD -MP -MF $(DEPDIR)/libgstopensles_la-openslessink.Tpo -c -o libgstopensles_la-openslessink.lo `test -f 'openslessink.c' || echo '$(srcdir)/'`openslessink.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstopensles_la-openslessink.Tpo $(DEPDIR)/libgstopensles_la-openslessink.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='openslessink.c' object='libgstopensles_la-openslessink.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 $(libgstopensles_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopensles_la_CFLAGS) $(CFLAGS) -c -o libgstopensles_la-openslessink.lo `test -f 'openslessink.c' || echo '$(srcdir)/'`openslessink.c
+
+libgstopensles_la-openslessrc.lo: openslessrc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopensles_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopensles_la_CFLAGS) $(CFLAGS) -MT libgstopensles_la-openslessrc.lo -MD -MP -MF $(DEPDIR)/libgstopensles_la-openslessrc.Tpo -c -o libgstopensles_la-openslessrc.lo `test -f 'openslessrc.c' || echo '$(srcdir)/'`openslessrc.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstopensles_la-openslessrc.Tpo $(DEPDIR)/libgstopensles_la-openslessrc.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='openslessrc.c' object='libgstopensles_la-openslessrc.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 $(libgstopensles_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopensles_la_CFLAGS) $(CFLAGS) -c -o libgstopensles_la-openslessrc.lo `test -f 'openslessrc.c' || echo '$(srcdir)/'`openslessrc.c
+
+libgstopensles_la-opensles.lo: opensles.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstopensles_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopensles_la_CFLAGS) $(CFLAGS) -MT libgstopensles_la-opensles.lo -MD -MP -MF $(DEPDIR)/libgstopensles_la-opensles.Tpo -c -o libgstopensles_la-opensles.lo `test -f 'opensles.c' || echo '$(srcdir)/'`opensles.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstopensles_la-opensles.Tpo $(DEPDIR)/libgstopensles_la-opensles.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='opensles.c' object='libgstopensles_la-opensles.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 $(libgstopensles_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstopensles_la_CFLAGS) $(CFLAGS) -c -o libgstopensles_la-opensles.lo `test -f 'opensles.c' || echo '$(srcdir)/'`opensles.c
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+ for dir in "$(DESTDIR)$(plugindir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pluginLTLIBRARIES
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-pluginLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-pluginLTLIBRARIES ctags distclean \
+ distclean-compile distclean-generic distclean-libtool \
+ distclean-tags distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-pluginLTLIBRARIES \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am uninstall-pluginLTLIBRARIES
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/sys/opensles/opensles.c b/sys/opensles/opensles.c
new file mode 100644
index 00000000..03af1d3a
--- /dev/null
+++ b/sys/opensles/opensles.c
@@ -0,0 +1,46 @@
+/* GStreamer
+ * Copyright (C) 2012 Fluendo S.A. <support@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "openslessink.h"
+#include "openslessrc.h"
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+ if (!gst_element_register (plugin, "openslessink", GST_RANK_PRIMARY,
+ GST_TYPE_OPENSLES_SINK)) {
+ return FALSE;
+ }
+ if (!gst_element_register (plugin, "openslessrc", GST_RANK_PRIMARY,
+ GST_TYPE_OPENSLES_SRC)) {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+GST_PLUGIN_DEFINE2 (GST_VERSION_MAJOR,
+ GST_VERSION_MINOR,
+ opensles,
+ "OpenSL ES support for GStreamer",
+ plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/sys/opensles/openslesringbuffer.c b/sys/opensles/openslesringbuffer.c
new file mode 100644
index 00000000..8038821a
--- /dev/null
+++ b/sys/opensles/openslesringbuffer.c
@@ -0,0 +1,997 @@
+/* GStreamer
+ * Copyright (C) 2012 Fluendo S.A. <support@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "openslesringbuffer.h"
+
+GST_DEBUG_CATEGORY_STATIC (opensles_ringbuffer_debug);
+#define GST_CAT_DEFAULT opensles_ringbuffer_debug
+
+static GstRingBufferClass *ring_parent_class = NULL;
+
+static void
+_do_init (GType type)
+{
+ GST_DEBUG_CATEGORY_INIT (opensles_ringbuffer_debug,
+ "opensles_ringbuffer", 0, "OpenSL ES ringbuffer");
+}
+
+GST_BOILERPLATE_FULL (GstOpenSLESRingBuffer, gst_opensles_ringbuffer,
+ GstRingBuffer, GST_TYPE_RING_BUFFER, _do_init);
+
+/*
+ * Some generic helper functions
+ */
+
+static inline SLuint32
+_opensles_sample_rate (guint rate)
+{
+ switch (rate) {
+ case 8000:
+ return SL_SAMPLINGRATE_8;
+ case 11025:
+ return SL_SAMPLINGRATE_11_025;
+ case 12000:
+ return SL_SAMPLINGRATE_12;
+ case 16000:
+ return SL_SAMPLINGRATE_16;
+ case 22050:
+ return SL_SAMPLINGRATE_22_05;
+ case 24000:
+ return SL_SAMPLINGRATE_24;
+ case 32000:
+ return SL_SAMPLINGRATE_32;
+ case 44100:
+ return SL_SAMPLINGRATE_44_1;
+ case 48000:
+ return SL_SAMPLINGRATE_48;
+ case 64000:
+ return SL_SAMPLINGRATE_64;
+ case 88200:
+ return SL_SAMPLINGRATE_88_2;
+ case 96000:
+ return SL_SAMPLINGRATE_96;
+ case 192000:
+ return SL_SAMPLINGRATE_192;
+ default:
+ return 0;
+ }
+}
+
+static inline SLuint32
+_opensles_channel_mask (GstRingBufferSpec * spec)
+{
+ switch (spec->channels) {
+ case 1:
+ return (SL_SPEAKER_FRONT_CENTER);
+ case 2:
+ return (SL_SPEAKER_FRONT_LEFT | SL_SPEAKER_FRONT_RIGHT);
+ default:
+ return 0;
+ }
+}
+
+static inline void
+_opensles_format (GstRingBufferSpec * spec, SLDataFormat_PCM * format)
+{
+ format->formatType = SL_DATAFORMAT_PCM;
+ format->numChannels = spec->channels;
+ format->samplesPerSec = _opensles_sample_rate (spec->rate);
+ format->bitsPerSample = spec->depth;
+ format->containerSize = spec->width;
+ format->channelMask = _opensles_channel_mask (spec);
+ format->endianness =
+ (spec->bigend ? SL_BYTEORDER_BIGENDIAN : SL_BYTEORDER_LITTLEENDIAN);
+}
+
+/*
+ * Recorder related functions
+ */
+
+static gboolean
+_opensles_recorder_acquire (GstRingBuffer * rb, GstRingBufferSpec * spec)
+{
+ GstOpenSLESRingBuffer *thiz = GST_OPENSLES_RING_BUFFER_CAST (rb);
+ SLresult result;
+ SLDataFormat_PCM format;
+
+ /* Configure audio source */
+ SLDataLocator_IODevice loc_dev = {
+ SL_DATALOCATOR_IODEVICE, SL_IODEVICE_AUDIOINPUT,
+ SL_DEFAULTDEVICEID_AUDIOINPUT, NULL
+ };
+ SLDataSource audioSrc = { &loc_dev, NULL };
+
+ /* Configure audio sink */
+ SLDataLocator_AndroidSimpleBufferQueue loc_bq = {
+ SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, 2
+ };
+ SLDataSink audioSink = { &loc_bq, &format };
+
+ /* Required optional interfaces */
+ const SLInterfaceID id[1] = { SL_IID_ANDROIDSIMPLEBUFFERQUEUE };
+ const SLboolean req[1] = { SL_BOOLEAN_TRUE };
+
+ /* Define the audio format in OpenSL ES terminology */
+ _opensles_format (spec, &format);
+
+ /* Create the audio recorder object (requires the RECORD_AUDIO permission) */
+ result = (*thiz->engineEngine)->CreateAudioRecorder (thiz->engineEngine,
+ &thiz->recorderObject, &audioSrc, &audioSink, 1, id, req);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_ERROR_OBJECT (thiz, "engine.CreateAudioRecorder failed(0x%08x)",
+ (guint32) result);
+ goto failed;
+ }
+
+ /* Realize the audio recorder object */
+ result =
+ (*thiz->recorderObject)->Realize (thiz->recorderObject, SL_BOOLEAN_FALSE);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_ERROR_OBJECT (thiz, "recorder.Realize failed(0x%08x)",
+ (guint32) result);
+ goto failed;
+ }
+
+ /* Get the record interface */
+ result = (*thiz->recorderObject)->GetInterface (thiz->recorderObject,
+ SL_IID_RECORD, &thiz->recorderRecord);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_ERROR_OBJECT (thiz, "recorder.GetInterface(Record) failed(0x%08x)",
+ (guint32) result);
+ goto failed;
+ }
+
+ /* Get the buffer queue interface */
+ result =
+ (*thiz->recorderObject)->GetInterface (thiz->recorderObject,
+ SL_IID_ANDROIDSIMPLEBUFFERQUEUE, &thiz->bufferQueue);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_ERROR_OBJECT (thiz, "recorder.GetInterface(BufferQueue) failed(0x%08x)",
+ (guint32) result);
+ goto failed;
+ }
+
+ return TRUE;
+
+failed:
+ return FALSE;
+}
+
+/* This callback function is executed when the ringbuffer is started to preroll
+ * the output buffer queue with empty buffers, from app thread, and each time
+ * there's a filled buffer, from audio device processing thread,
+ * the callback behaviour.
+ */
+static void
+_opensles_recorder_cb (SLAndroidSimpleBufferQueueItf bufferQueue, void *context)
+{
+ GstRingBuffer *rb = GST_RING_BUFFER_CAST (context);
+ GstOpenSLESRingBuffer *thiz = GST_OPENSLES_RING_BUFFER_CAST (rb);
+ SLresult result;
+ guint8 *ptr;
+ gint seg;
+ gint len;
+
+ /* Advance only when we are called by the callback function */
+ if (bufferQueue) {
+ gst_ring_buffer_advance (rb, 1);
+ }
+
+ /* Get a segment form the GStreamer ringbuffer to write in */
+ if (!gst_ring_buffer_prepare_read (rb, &seg, &ptr, &len)) {
+ GST_WARNING_OBJECT (rb, "No segment available");
+ return;
+ }
+
+ GST_LOG_OBJECT (thiz, "enqueue: %p size %d segment: %d", ptr, len, seg);
+
+ /* Enqueue the sefment as buffer to be written */
+ result = (*thiz->bufferQueue)->Enqueue (thiz->bufferQueue, ptr, len);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_ERROR_OBJECT (thiz, "bufferQueue.Enqueue failed(0x%08x)",
+ (guint32) result);
+ return;
+ }
+}
+
+static gboolean
+_opensles_recorder_start (GstRingBuffer * rb)
+{
+ GstOpenSLESRingBuffer *thiz = GST_OPENSLES_RING_BUFFER_CAST (rb);
+ SLresult result;
+
+ /* Register callback on the buffer queue */
+ if (!thiz->is_queue_callback_registered) {
+ result = (*thiz->bufferQueue)->RegisterCallback (thiz->bufferQueue,
+ _opensles_recorder_cb, rb);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_ERROR_OBJECT (thiz, "bufferQueue.RegisterCallback failed(0x%08x)",
+ (guint32) result);
+ return FALSE;
+ }
+ thiz->is_queue_callback_registered = TRUE;
+ }
+
+ /* Preroll one buffer */
+ _opensles_recorder_cb (NULL, rb);
+
+ /* Start recording */
+ result =
+ (*thiz->recorderRecord)->SetRecordState (thiz->recorderRecord,
+ SL_RECORDSTATE_RECORDING);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_ERROR_OBJECT (thiz, "recorder.SetRecordState failed(0x%08x)",
+ (guint32) result);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static gboolean
+_opensles_recorder_stop (GstRingBuffer * rb)
+{
+ GstOpenSLESRingBuffer *thiz = GST_OPENSLES_RING_BUFFER_CAST (rb);
+ SLresult result;
+
+ /* Stop recording */
+ result =
+ (*thiz->recorderRecord)->SetRecordState (thiz->recorderRecord,
+ SL_RECORDSTATE_STOPPED);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_ERROR_OBJECT (thiz, "recorder.SetRecordState failed(0x%08x)",
+ (guint32) result);
+ return FALSE;
+ }
+
+ /* Unregister callback on the buffer queue */
+ result = (*thiz->bufferQueue)->RegisterCallback (thiz->bufferQueue,
+ NULL, NULL);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_ERROR_OBJECT (thiz, "bufferQueue.RegisterCallback failed(0x%08x)",
+ (guint32) result);
+ return FALSE;
+ }
+ thiz->is_queue_callback_registered = FALSE;
+
+ /* Reset the queue */
+ result = (*thiz->bufferQueue)->Clear (thiz->bufferQueue);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_ERROR_OBJECT (thiz, "bufferQueue.Clear failed(0x%08x)",
+ (guint32) result);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/*
+ * Player related functions
+ */
+
+static gboolean
+_opensles_player_change_volume (GstRingBuffer * rb)
+{
+ GstOpenSLESRingBuffer *thiz;
+ SLresult result;
+
+ thiz = GST_OPENSLES_RING_BUFFER_CAST (rb);
+
+ if (thiz->playerVolume) {
+ gint millibel = (1.0 - thiz->volume) * -5000.0;
+ result =
+ (*thiz->playerVolume)->SetVolumeLevel (thiz->playerVolume, millibel);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_ERROR_OBJECT (thiz, "player.SetVolumeLevel failed(0x%08x)",
+ (guint32) result);
+ return FALSE;
+ }
+ GST_DEBUG_OBJECT (thiz, "changed volume to %d", millibel);
+ }
+
+ return TRUE;
+}
+
+static gboolean
+_opensles_player_change_mute (GstRingBuffer * rb)
+{
+ GstOpenSLESRingBuffer *thiz;
+ SLresult result;
+
+ thiz = GST_OPENSLES_RING_BUFFER_CAST (rb);
+
+ if (thiz->playerVolume) {
+ result = (*thiz->playerVolume)->SetMute (thiz->playerVolume, thiz->mute);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_ERROR_OBJECT (thiz, "player.SetMute failed(0x%08x)",
+ (guint32) result);
+ return FALSE;
+ }
+ GST_DEBUG_OBJECT (thiz, "changed mute to %d", thiz->mute);
+ }
+
+ return TRUE;
+}
+
+/* This is a callback function invoked by the playback device thread and
+ * it's used to monitor position changes */
+static void
+_opensles_player_event_cb (SLPlayItf caller, void *context, SLuint32 event)
+{
+ GstOpenSLESRingBuffer *thiz;
+
+ thiz = GST_OPENSLES_RING_BUFFER_CAST (context);
+
+ if (event & SL_PLAYEVENT_HEADATNEWPOS) {
+ SLmillisecond position;
+
+ (*caller)->GetPosition (caller, &position);
+ GST_LOG_OBJECT (thiz, "at position=%u ms", (guint) position);
+ }
+}
+
+static gboolean
+_opensles_player_acquire (GstRingBuffer * rb, GstRingBufferSpec * spec)
+{
+ GstOpenSLESRingBuffer *thiz = GST_OPENSLES_RING_BUFFER_CAST (rb);
+ SLresult result;
+ SLDataFormat_PCM format;
+
+ /* Configure audio source */
+ SLDataLocator_AndroidSimpleBufferQueue loc_bufq = {
+ SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE,
+ MIN (32, (spec->segtotal >> 1))
+ };
+ SLDataSource audioSrc = { &loc_bufq, &format };
+
+ /* Configure audio sink */
+ SLDataLocator_OutputMix loc_outmix = {
+ SL_DATALOCATOR_OUTPUTMIX, thiz->outputMixObject
+ };
+ SLDataSink audioSink = { &loc_outmix, NULL };
+
+ /* Define the required interfaces */
+ const SLInterfaceID ids[2] = { SL_IID_BUFFERQUEUE, SL_IID_VOLUME };
+ const SLboolean req[2] = { SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE };
+
+ /* Define the format in OpenSL ES terminology */
+ _opensles_format (spec, &format);
+
+ /* Create the player object */
+ result = (*thiz->engineEngine)->CreateAudioPlayer (thiz->engineEngine,
+ &thiz->playerObject, &audioSrc, &audioSink, 2, ids, req);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_ERROR_OBJECT (thiz, "engine.CreateAudioPlayer failed(0x%08x)",
+ (guint32) result);
+ goto failed;
+ }
+
+ /* Realize the player object */
+ result =
+ (*thiz->playerObject)->Realize (thiz->playerObject, SL_BOOLEAN_FALSE);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_ERROR_OBJECT (thiz, "player.Realize failed(0x%08x)", (guint32) result);
+ goto failed;
+ }
+
+ /* Get the play interface */
+ result = (*thiz->playerObject)->GetInterface (thiz->playerObject,
+ SL_IID_PLAY, &thiz->playerPlay);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_ERROR_OBJECT (thiz, "player.GetInterface(Play) failed(0x%08x)",
+ (guint32) result);
+ goto failed;
+ }
+
+ /* Get the buffer queue interface */
+ result = (*thiz->playerObject)->GetInterface (thiz->playerObject,
+ SL_IID_BUFFERQUEUE, &thiz->bufferQueue);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_ERROR_OBJECT (thiz, "player.GetInterface(BufferQueue) failed(0x%08x)",
+ (guint32) result);
+ goto failed;
+ }
+
+ /* Get the volume interface */
+ result = (*thiz->playerObject)->GetInterface (thiz->playerObject,
+ SL_IID_VOLUME, &thiz->playerVolume);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_ERROR_OBJECT (thiz, "player.GetInterface(Volume) failed(0x%08x)",
+ (guint32) result);
+ goto failed;
+ }
+
+ /* Request position update events at each 20 ms */
+ result = (*thiz->playerPlay)->SetPositionUpdatePeriod (thiz->playerPlay, 20);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_ERROR_OBJECT (thiz, "player.SetPositionUpdatePeriod failed(0x%08x)",
+ (guint32) result);
+ goto failed;
+ }
+
+ /* Define the event mask to be monitorized */
+ result = (*thiz->playerPlay)->SetCallbackEventsMask (thiz->playerPlay,
+ SL_PLAYEVENT_HEADATNEWPOS);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_ERROR_OBJECT (thiz, "player.SetCallbackEventsMask failed(0x%08x)",
+ (guint32) result);
+ goto failed;
+ }
+
+ /* Register a callback to process the events */
+ result = (*thiz->playerPlay)->RegisterCallback (thiz->playerPlay,
+ _opensles_player_event_cb, thiz);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_ERROR_OBJECT (thiz, "player.RegisterCallback(event_cb) failed(0x%08x)",
+ (guint32) result);
+ goto failed;
+ }
+
+ /* Configure the volume and mute state */
+ _opensles_player_change_volume (rb);
+ _opensles_player_change_mute (rb);
+
+ /* Allocate the queue associated ringbuffer memory */
+ thiz->data_segtotal = loc_bufq.numBuffers;
+ thiz->data_size = spec->segsize * thiz->data_segtotal;
+ thiz->data = g_malloc0 (thiz->data_size);
+ g_atomic_int_set (&thiz->segqueued, 0);
+ g_atomic_int_set (&thiz->is_prerolled, 0);
+ thiz->cursor = 0;
+
+ return TRUE;
+
+failed:
+ return FALSE;
+}
+
+/* This callback function is executed when the ringbuffer is started to preroll
+ * the input buffer queue with few buffers, from app thread, and each time
+ * that rendering of one buffer finishes, from audio device processing thread,
+ * the callback behaviour.
+ *
+ * We wrap the queue behaviour with an appropriate chunk of memory (queue len *
+ * ringbuffer segment size) which is used to hold the audio data while it's
+ * being processed in the queue. The memory region is used whit a ringbuffer
+ * behaviour.
+ */
+static void
+_opensles_player_cb (SLAndroidSimpleBufferQueueItf bufferQueue, void *context)
+{
+ GstRingBuffer *rb = GST_RING_BUFFER_CAST (context);
+ GstOpenSLESRingBuffer *thiz = GST_OPENSLES_RING_BUFFER_CAST (rb);
+ SLresult result;
+ guint8 *ptr, *cur;
+ gint seg;
+ gint len;
+
+ /* Get a segment form the GStreamer ringbuffer to read some samples */
+ if (!gst_ring_buffer_prepare_read (rb, &seg, &ptr, &len)) {
+ GST_WARNING_OBJECT (rb, "No segment available");
+ return;
+ }
+
+ /* copy the segment data to our queue associated ringbuffer memory */
+ cur = thiz->data + (thiz->cursor * rb->spec.segsize);
+ memcpy (cur, ptr, len);
+ g_atomic_int_inc (&thiz->segqueued);
+
+ GST_LOG_OBJECT (thiz, "enqueue: %p size %d segment: %d in queue[%d]",
+ cur, len, seg, thiz->cursor);
+ /* advance the cursor in our queue associated ringbuffer */
+ thiz->cursor = (thiz->cursor + 1) % thiz->data_segtotal;
+
+ /* Enqueue the buffer to be rendered */
+ result = (*thiz->bufferQueue)->Enqueue (thiz->bufferQueue, cur, len);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_ERROR_OBJECT (thiz, "bufferQueue.Enqueue failed(0x%08x)",
+ (guint32) result);
+ return;
+ }
+
+ /* Fill with silence samples the segment of the GStreamer ringbuffer */
+ gst_ring_buffer_clear (rb, seg);
+ /* Make the segment reusable */
+ gst_ring_buffer_advance (rb, 1);
+}
+
+static gboolean
+_opensles_player_start (GstRingBuffer * rb)
+{
+ GstOpenSLESRingBuffer *thiz = GST_OPENSLES_RING_BUFFER_CAST (rb);
+ SLresult result;
+ gint i;
+
+ /* Register callback on the buffer queue */
+ if (!thiz->is_queue_callback_registered) {
+ result = (*thiz->bufferQueue)->RegisterCallback (thiz->bufferQueue,
+ _opensles_player_cb, rb);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_ERROR_OBJECT (thiz, "bufferQueue.RegisterCallback failed(0x%08x)",
+ (guint32) result);
+ return FALSE;
+ }
+ thiz->is_queue_callback_registered = TRUE;
+ }
+
+ /* Fill the queue by enqueing buffers */
+ if (!g_atomic_int_get (&thiz->is_prerolled)) {
+ for (i = 0; i < thiz->data_segtotal; i++) {
+ _opensles_player_cb (NULL, rb);
+ }
+ g_atomic_int_set (&thiz->is_prerolled, 1);
+ }
+
+ /* Change player state into PLAYING */
+ result =
+ (*thiz->playerPlay)->SetPlayState (thiz->playerPlay,
+ SL_PLAYSTATE_PLAYING);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_ERROR_OBJECT (thiz, "player.SetPlayState failed(0x%08x)",
+ (guint32) result);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static gboolean
+_opensles_player_pause (GstRingBuffer * rb)
+{
+ GstOpenSLESRingBuffer *thiz = GST_OPENSLES_RING_BUFFER_CAST (rb);
+ SLresult result;
+
+ result =
+ (*thiz->playerPlay)->SetPlayState (thiz->playerPlay, SL_PLAYSTATE_PAUSED);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_ERROR_OBJECT (thiz, "player.SetPlayState failed(0x%08x)",
+ (guint32) result);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static gboolean
+_opensles_player_stop (GstRingBuffer * rb)
+{
+ GstOpenSLESRingBuffer *thiz = GST_OPENSLES_RING_BUFFER_CAST (rb);
+ SLresult result;
+
+ /* Change player state into STOPPED */
+ result =
+ (*thiz->playerPlay)->SetPlayState (thiz->playerPlay,
+ SL_PLAYSTATE_STOPPED);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_ERROR_OBJECT (thiz, "player.SetPlayState failed(0x%08x)",
+ (guint32) result);
+ return FALSE;
+ }
+
+ /* Unregister callback on the buffer queue */
+ result = (*thiz->bufferQueue)->RegisterCallback (thiz->bufferQueue,
+ NULL, NULL);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_ERROR_OBJECT (thiz, "bufferQueue.RegisterCallback failed(0x%08x)",
+ (guint32) result);
+ return FALSE;
+ }
+ thiz->is_queue_callback_registered = FALSE;
+
+ /* Reset the queue */
+ result = (*thiz->bufferQueue)->Clear (thiz->bufferQueue);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_ERROR_OBJECT (thiz, "bufferQueue.Clear failed(0x%08x)",
+ (guint32) result);
+ return FALSE;
+ }
+
+ /* Reset our state */
+ g_atomic_int_set (&thiz->segqueued, 0);
+ thiz->cursor = 0;
+
+ return TRUE;
+}
+
+/*
+ * OpenSL ES ringbuffer wrapper
+ */
+
+GstRingBuffer *
+gst_opensles_ringbuffer_new (RingBufferMode mode)
+{
+ GstOpenSLESRingBuffer *thiz;
+
+ g_return_val_if_fail (mode > RB_MODE_NONE && mode < RB_MODE_LAST, NULL);
+
+ thiz = g_object_new (GST_TYPE_OPENSLES_RING_BUFFER, NULL);
+
+ if (thiz) {
+ thiz->mode = mode;
+ if (mode == RB_MODE_SRC) {
+ thiz->acquire = _opensles_recorder_acquire;
+ thiz->start = _opensles_recorder_start;
+ thiz->pause = _opensles_recorder_stop;
+ thiz->stop = _opensles_recorder_stop;
+ thiz->change_volume = NULL;
+ } else if (mode == RB_MODE_SINK_PCM) {
+ thiz->acquire = _opensles_player_acquire;
+ thiz->start = _opensles_player_start;
+ thiz->pause = _opensles_player_pause;
+ thiz->stop = _opensles_player_stop;
+ thiz->change_volume = _opensles_player_change_volume;
+ }
+ }
+
+ GST_DEBUG_OBJECT (thiz, "ringbuffer created");
+
+ return GST_RING_BUFFER (thiz);
+}
+
+void
+gst_opensles_ringbuffer_set_volume (GstRingBuffer * rb, gfloat volume)
+{
+ GstOpenSLESRingBuffer *thiz;
+
+ thiz = GST_OPENSLES_RING_BUFFER_CAST (rb);
+
+ thiz->volume = volume;
+
+ if (thiz->change_volume) {
+ thiz->change_volume (rb);
+ }
+}
+
+void
+gst_opensles_ringbuffer_set_mute (GstRingBuffer * rb, gboolean mute)
+{
+ GstOpenSLESRingBuffer *thiz;
+
+ thiz = GST_OPENSLES_RING_BUFFER_CAST (rb);
+
+ thiz->mute = mute;
+
+ if (thiz->change_mute) {
+ thiz->change_mute (rb);
+ }
+}
+
+static gboolean
+gst_opensles_ringbuffer_open_device (GstRingBuffer * rb)
+{
+ GstOpenSLESRingBuffer *thiz;
+ SLresult result;
+
+ thiz = GST_OPENSLES_RING_BUFFER_CAST (rb);
+
+ /* Create the engine object */
+ result = slCreateEngine (&thiz->engineObject, 0, NULL, 0, NULL, NULL);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_ERROR_OBJECT (thiz, "slCreateEngine failed(0x%08x)", (guint32) result);
+ goto failed;
+ }
+
+ /* Realize the engine object */
+ result = (*thiz->engineObject)->Realize (thiz->engineObject,
+ SL_BOOLEAN_FALSE);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_ERROR_OBJECT (thiz, "engine.Realize failed(0x%08x)", (guint32) result);
+ goto failed;
+ }
+
+ /* Get the engine interface, which is needed in order to create other objects */
+ result = (*thiz->engineObject)->GetInterface (thiz->engineObject,
+ SL_IID_ENGINE, &thiz->engineEngine);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_ERROR_OBJECT (thiz, "engine.GetInterface(Engine) failed(0x%08x)",
+ (guint32) result);
+ goto failed;
+ }
+
+ if (thiz->mode == RB_MODE_SINK_PCM) {
+ SLOutputMixItf outputMix;
+
+ /* Create an output mixer object */
+ result = (*thiz->engineEngine)->CreateOutputMix (thiz->engineEngine,
+ &thiz->outputMixObject, 0, NULL, NULL);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_ERROR_OBJECT (thiz, "engine.CreateOutputMix failed(0x%08x)",
+ (guint32) result);
+ goto failed;
+ }
+
+ /* Realize the output mixer object */
+ result = (*thiz->outputMixObject)->Realize (thiz->outputMixObject,
+ SL_BOOLEAN_FALSE);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_ERROR_OBJECT (thiz, "outputMix.Realize failed(0x%08x)",
+ (guint32) result);
+ goto failed;
+ }
+
+ /* Get the mixer interface */
+ result = (*thiz->outputMixObject)->GetInterface (thiz->outputMixObject,
+ SL_IID_OUTPUTMIX, &outputMix);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_WARNING_OBJECT (thiz, "outputMix.GetInterface failed(0x%08x)",
+ (guint32) result);
+ } else {
+ SLint32 numDevices = 0;
+ SLuint32 deviceIDs[MAX_NUMBER_OUTPUT_DEVICES];
+ gint i;
+
+ /* Query the list of output devices */
+ (*outputMix)->GetDestinationOutputDeviceIDs (outputMix, &numDevices,
+ deviceIDs);
+ GST_DEBUG_OBJECT (thiz, "Found %d output devices", (gint) numDevices);
+ for (i = 0; i < numDevices; i++) {
+ GST_DEBUG_OBJECT (thiz, " DeviceID: %08x", (guint) deviceIDs[i]);
+ }
+ }
+ }
+
+ GST_DEBUG_OBJECT (thiz, "device opened");
+ return TRUE;
+
+failed:
+ return FALSE;
+}
+
+static gboolean
+gst_opensles_ringbuffer_close_device (GstRingBuffer * rb)
+{
+ GstOpenSLESRingBuffer *thiz;
+
+ thiz = GST_OPENSLES_RING_BUFFER_CAST (rb);
+
+ /* Destroy the output mix object */
+ if (thiz->outputMixObject) {
+ (*thiz->outputMixObject)->Destroy (thiz->outputMixObject);
+ thiz->outputMixObject = NULL;
+ }
+
+ /* Destroy the engine object and invalidate all associated interfaces */
+ if (thiz->engineObject) {
+ (*thiz->engineObject)->Destroy (thiz->engineObject);
+ thiz->engineObject = NULL;
+ thiz->engineEngine = NULL;
+ }
+
+ thiz->bufferQueue = NULL;
+
+ GST_DEBUG_OBJECT (thiz, "device closed");
+ return TRUE;
+}
+
+static gboolean
+gst_opensles_ringbuffer_acquire (GstRingBuffer * rb, GstRingBufferSpec * spec)
+{
+ GstOpenSLESRingBuffer *thiz;
+
+ thiz = GST_OPENSLES_RING_BUFFER_CAST (rb);
+
+ /* Instantiate and configure the OpenSL ES interfaces */
+ if (!thiz->acquire (rb, spec)) {
+ return FALSE;
+ }
+
+ /* Initialize our ringbuffer memory region */
+ rb->data = gst_buffer_new_and_alloc (spec->segtotal * spec->segsize);
+ memset (GST_BUFFER_DATA (rb->data), 0, GST_BUFFER_SIZE (rb->data));
+
+ GST_DEBUG_OBJECT (thiz, "ringbuffer acquired");
+ return TRUE;
+}
+
+static gboolean
+gst_opensles_ringbuffer_release (GstRingBuffer * rb)
+{
+ GstOpenSLESRingBuffer *thiz;
+
+ thiz = GST_OPENSLES_RING_BUFFER (rb);
+
+ /* Destroy audio player object, and invalidate all associated interfaces */
+ if (thiz->playerObject) {
+ (*thiz->playerObject)->Destroy (thiz->playerObject);
+ thiz->playerObject = NULL;
+ thiz->playerPlay = NULL;
+ thiz->playerVolume = NULL;
+ }
+
+ /* Destroy audio recorder object, and invalidate all associated interfaces */
+ if (thiz->recorderObject) {
+ (*thiz->recorderObject)->Destroy (thiz->recorderObject);
+ thiz->recorderObject = NULL;
+ thiz->recorderRecord = NULL;
+ }
+
+ if (thiz->data) {
+ g_free (thiz->data);
+ thiz->data = NULL;
+ }
+
+ if (rb->data) {
+ gst_buffer_unref (rb->data);
+ rb->data = NULL;
+ }
+
+ GST_DEBUG_OBJECT (thiz, "ringbuffer released");
+ return TRUE;
+}
+
+static gboolean
+gst_opensles_ringbuffer_start (GstRingBuffer * rb)
+{
+ GstOpenSLESRingBuffer *thiz;
+ gboolean res;
+
+ thiz = GST_OPENSLES_RING_BUFFER_CAST (rb);
+ res = thiz->start (rb);
+
+ GST_DEBUG_OBJECT (thiz, "ringbuffer %s started", (res ? "" : "not"));
+ return res;
+}
+
+static gboolean
+gst_opensles_ringbuffer_pause (GstRingBuffer * rb)
+{
+ GstOpenSLESRingBuffer *thiz;
+ gboolean res;
+
+ thiz = GST_OPENSLES_RING_BUFFER_CAST (rb);
+ res = thiz->pause (rb);
+
+ GST_DEBUG_OBJECT (thiz, "ringbuffer %s paused", (res ? "" : "not"));
+ return res;
+}
+
+static gboolean
+gst_opensles_ringbuffer_stop (GstRingBuffer * rb)
+{
+ GstOpenSLESRingBuffer *thiz;
+ gboolean res;
+
+ thiz = GST_OPENSLES_RING_BUFFER_CAST (rb);
+ res = thiz->stop (rb);
+
+ GST_DEBUG_OBJECT (thiz, "ringbuffer %s stopped", (res ? " " : "not"));
+ return res;
+}
+
+static guint
+gst_opensles_ringbuffer_delay (GstRingBuffer * rb)
+{
+ GstOpenSLESRingBuffer *thiz;
+ guint res = 0;
+
+ thiz = GST_OPENSLES_RING_BUFFER_CAST (rb);
+
+ if (thiz->playerPlay) {
+ SLuint32 state;
+ SLmillisecond position;
+ guint64 playedpos = 0, queuedpos = 0;
+ (*thiz->playerPlay)->GetPlayState (thiz->playerPlay, &state);
+ if (state == SL_PLAYSTATE_PLAYING) {
+ (*thiz->playerPlay)->GetPosition (thiz->playerPlay, &position);
+ playedpos = gst_util_uint64_scale_round (position, rb->spec.rate, 1000);
+ queuedpos = g_atomic_int_get (&thiz->segqueued) * rb->samples_per_seg;
+ res = queuedpos - playedpos;
+ }
+
+ GST_LOG_OBJECT (thiz, "queued samples %" G_GUINT64_FORMAT " position %u ms "
+ "(%" G_GUINT64_FORMAT " samples) delay %u samples",
+ queuedpos, (guint) position, playedpos, res);
+ }
+
+ return res;
+}
+
+static void
+gst_opensles_ringbuffer_clear_all (GstRingBuffer * rb)
+{
+ GstOpenSLESRingBuffer *thiz;
+
+ thiz = GST_OPENSLES_RING_BUFFER_CAST (rb);
+
+ if (thiz->data) {
+ SLresult result;
+
+ memset (thiz->data, 0, thiz->data_size);
+ g_atomic_int_set (&thiz->segqueued, 0);
+ thiz->cursor = 0;
+ /* Reset the queue */
+ result = (*thiz->bufferQueue)->Clear (thiz->bufferQueue);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_WARNING_OBJECT (thiz, "bufferQueue.Clear failed(0x%08x)",
+ (guint32) result);
+ }
+ g_atomic_int_set (&thiz->is_prerolled, 0);
+ }
+
+ GST_CALL_PARENT (GST_RING_BUFFER_CLASS, clear_all, (rb));
+}
+
+static void
+gst_opensles_ringbuffer_dispose (GObject * object)
+{
+ G_OBJECT_CLASS (ring_parent_class)->dispose (object);
+}
+
+static void
+gst_opensles_ringbuffer_finalize (GObject * object)
+{
+ G_OBJECT_CLASS (ring_parent_class)->finalize (object);
+}
+
+static void
+gst_opensles_ringbuffer_base_init (gpointer g_class)
+{
+ /* Nothing to do right now */
+}
+
+static void
+gst_opensles_ringbuffer_class_init (GstOpenSLESRingBufferClass * klass)
+{
+ GObjectClass *gobject_class;
+ GstRingBufferClass *gstringbuffer_class;
+
+ gobject_class = (GObjectClass *) klass;
+ gstringbuffer_class = (GstRingBufferClass *) klass;
+
+ ring_parent_class = g_type_class_peek_parent (klass);
+
+ gobject_class->dispose = gst_opensles_ringbuffer_dispose;
+ gobject_class->finalize = gst_opensles_ringbuffer_finalize;
+
+ gstringbuffer_class->open_device =
+ GST_DEBUG_FUNCPTR (gst_opensles_ringbuffer_open_device);
+ gstringbuffer_class->close_device =
+ GST_DEBUG_FUNCPTR (gst_opensles_ringbuffer_close_device);
+ gstringbuffer_class->acquire =
+ GST_DEBUG_FUNCPTR (gst_opensles_ringbuffer_acquire);
+ gstringbuffer_class->release =
+ GST_DEBUG_FUNCPTR (gst_opensles_ringbuffer_release);
+ gstringbuffer_class->start =
+ GST_DEBUG_FUNCPTR (gst_opensles_ringbuffer_start);
+ gstringbuffer_class->pause =
+ GST_DEBUG_FUNCPTR (gst_opensles_ringbuffer_pause);
+ gstringbuffer_class->resume =
+ GST_DEBUG_FUNCPTR (gst_opensles_ringbuffer_start);
+ gstringbuffer_class->stop = GST_DEBUG_FUNCPTR (gst_opensles_ringbuffer_stop);
+ gstringbuffer_class->delay =
+ GST_DEBUG_FUNCPTR (gst_opensles_ringbuffer_delay);
+ gstringbuffer_class->clear_all =
+ GST_DEBUG_FUNCPTR (gst_opensles_ringbuffer_clear_all);
+}
+
+static void
+gst_opensles_ringbuffer_init (GstOpenSLESRingBuffer * thiz,
+ GstOpenSLESRingBufferClass * g_class)
+{
+ thiz->mode = RB_MODE_NONE;
+ thiz->engineObject = NULL;
+ thiz->outputMixObject = NULL;
+ thiz->playerObject = NULL;
+ thiz->recorderObject = NULL;
+ thiz->is_queue_callback_registered = FALSE;
+}
diff --git a/sys/opensles/openslesringbuffer.h b/sys/opensles/openslesringbuffer.h
new file mode 100644
index 00000000..7da6563d
--- /dev/null
+++ b/sys/opensles/openslesringbuffer.h
@@ -0,0 +1,117 @@
+/* GStreamer
+ * Copyright (C) 2012 Fluendo S.A. <support@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __OPENSLESRINGBUFFER_H__
+#define __OPENSLESRINGBUFFER_H__
+
+#include <gst/gst.h>
+#include <gst/audio/gstringbuffer.h>
+
+#include <SLES/OpenSLES.h>
+#include <SLES/OpenSLES_Android.h>
+
+G_BEGIN_DECLS
+
+#define MAX_NUMBER_OUTPUT_DEVICES 16
+
+#define GST_TYPE_OPENSLES_RING_BUFFER \
+ (gst_opensles_ringbuffer_get_type())
+#define GST_OPENSLES_RING_BUFFER(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_OPENSLES_RING_BUFFER,GstOpenSLESRingBuffer))
+#define GST_OPENSLES_RING_BUFFER_CAST(obj) \
+ ((GstOpenSLESRingBuffer*) obj)
+#define GST_OPENSLES_RING_BUFFER_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_OPENSLES_RING_BUFFER,GstOpenSLESRingBufferClass))
+#define GST_OPENSLES_RING_BUFFER_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS((obj),GST_TYPE_OPENSLES_RING_BUFFER,GstOpenSLESRingBufferClass))
+#define GST_IS_OPENSLES_RING_BUFFER(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_OPENSLES_RING_BUFFER))
+#define GST_IS_OPENSLES_RING_BUFFER_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_OPENSLES_RING_BUFFER))
+
+typedef enum
+{
+ RB_MODE_NONE = 0,
+ RB_MODE_SRC,
+ RB_MODE_SINK_PCM,
+ RB_MODE_SINK_COMPRESSED,
+ RB_MODE_LAST
+} RingBufferMode;
+
+typedef gboolean (*AcquireFunc) (GstRingBuffer * rb, GstRingBufferSpec * spec);
+typedef gboolean (*StateFunc) (GstRingBuffer * rb);
+
+typedef struct _GstOpenSLESRingBuffer GstOpenSLESRingBuffer;
+typedef struct _GstOpenSLESRingBufferClass GstOpenSLESRingBufferClass;
+
+struct _GstOpenSLESRingBuffer
+{
+ GstRingBuffer object;
+
+ RingBufferMode mode;
+
+ /* engine interfaces */
+ SLObjectItf engineObject;
+ SLEngineItf engineEngine;
+
+ /* outputMixObject */
+ SLObjectItf outputMixObject;
+
+ /* player interfaces */
+ SLObjectItf playerObject;
+ SLPlayItf playerPlay;
+ SLVolumeItf playerVolume;
+ gfloat volume;
+ gboolean mute;
+ gint is_prerolled; /* ATOMIC */
+
+ /* recorder interfaces */
+ SLObjectItf recorderObject;
+ SLRecordItf recorderRecord;
+
+ /* buffer queue */
+ SLAndroidSimpleBufferQueueItf bufferQueue;
+ guint data_segtotal;
+ guint8 * data;
+ guint data_size;
+ guint cursor;
+ gint segqueued; /* ATOMIC */
+ gboolean is_queue_callback_registered;
+
+ /* vmethods */
+ AcquireFunc acquire;
+ StateFunc start;
+ StateFunc pause;
+ StateFunc stop;
+ StateFunc change_volume;
+ StateFunc change_mute;
+};
+
+struct _GstOpenSLESRingBufferClass
+{
+ GstRingBufferClass parent_class;
+};
+
+GType gst_opensles_ringbuffer_get_type (void);
+GstRingBuffer *gst_opensles_ringbuffer_new (RingBufferMode mode);
+void gst_opensles_ringbuffer_set_volume (GstRingBuffer * rb, gfloat volume);
+void gst_opensles_ringbuffer_set_mute (GstRingBuffer * rb, gboolean mute);
+
+G_END_DECLS
+#endif /* __OPENSLESRINGBUFFER_H__ */
diff --git a/sys/opensles/openslessink.c b/sys/opensles/openslessink.c
new file mode 100644
index 00000000..625fc091
--- /dev/null
+++ b/sys/opensles/openslessink.c
@@ -0,0 +1,289 @@
+/* GStreamer
+ * Copyright (C) 2012 Fluendo S.A. <support@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-openslessink
+ * @see_also: openslessrc
+ *
+ * This element renders raw audio samples using the OpenSL ES API in Android OS.
+ *
+ * <refsect2>
+ * <title>Example pipelines</title>
+ * |[
+ * gst-launch -v filesrc location=music.ogg ! oggdemux ! vorbisdec ! audioconvert ! audioresample ! opeslessink
+ * ]| Play an Ogg/Vorbis file.
+ * </refsect2>
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "openslessink.h"
+
+GST_DEBUG_CATEGORY_STATIC (opensles_sink_debug);
+#define GST_CAT_DEFAULT opensles_sink_debug
+
+enum
+{
+ PROP_0,
+ PROP_VOLUME,
+ PROP_MUTE,
+ PROP_LAST
+};
+
+#define DEFAULT_VOLUME 1.0
+#define DEFAULT_MUTE FALSE
+
+
+/* According to Android's NDK doc the following are the supported rates */
+#define RATES "8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100"
+/* 48000 Hz is also claimed to be supported but the AudioFlinger downsampling
+ * doesn't seems to work properly so we relay GStreamer audioresample element
+ * to cope with this samplerate. */
+
+static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("audio/x-raw-int, "
+ "endianness = (int) {" G_STRINGIFY (G_BYTE_ORDER) " }, "
+ "signed = (boolean) { TRUE }, "
+ "width = (int) 16, "
+ "depth = (int) 16, "
+ "rate = (int) { " RATES "}, "
+ "channels = (int) [1, 2];"
+ "audio/x-raw-int, "
+ "endianness = (int) {" G_STRINGIFY (G_BYTE_ORDER) " }, "
+ "signed = (boolean) { FALSE }, "
+ "width = (int) 8, "
+ "depth = (int) 8, "
+ "rate = (int) { " RATES "}, " "channels = (int) [1, 2]")
+ );
+
+static void
+_do_init (GType type)
+{
+ GST_DEBUG_CATEGORY_INIT (opensles_sink_debug, "opensles_sink", 0,
+ "OpenSL ES Sink");
+}
+
+GST_BOILERPLATE_FULL (GstOpenSLESSink, gst_opensles_sink, GstBaseAudioSink,
+ GST_TYPE_BASE_AUDIO_SINK, _do_init);
+
+static void
+gst_opensles_sink_base_init (gpointer g_class)
+{
+ GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
+
+ gst_element_class_add_static_pad_template (element_class, &sink_factory);
+
+ gst_element_class_set_details_simple (element_class, "OpenSL ES Sink",
+ "Sink/Audio",
+ "Output sound using the OpenSL ES APIs",
+ "Josep Torra <support@fluendo.com>");
+}
+
+static GstRingBuffer *
+gst_opensles_sink_create_ringbuffer (GstBaseAudioSink * base)
+{
+ GstOpenSLESSink *sink = GST_OPENSLES_SINK (base);
+ GstRingBuffer *rb;
+
+ rb = gst_opensles_ringbuffer_new (RB_MODE_SINK_PCM);
+ gst_opensles_ringbuffer_set_volume (rb, sink->volume);
+ gst_opensles_ringbuffer_set_mute (rb, sink->mute);
+ return rb;
+}
+
+#define AUDIO_OUTPUT_DESC_FORMAT \
+ "deviceName: %s deviceConnection: %d deviceScope: %d deviceLocation: %d " \
+ "isForTelephony: %d minSampleRate: %d maxSampleRate: %d " \
+ "isFreqRangeContinuous: %d maxChannels: %d"
+
+#define AUDIO_OUTPUT_DESC_ARGS(aod) \
+ (gchar*) (aod)->pDeviceName, (gint) (aod)->deviceConnection, \
+ (gint) (aod)->deviceScope, (gint) (aod)->deviceLocation, \
+ (gint) (aod)->isForTelephony, (gint) (aod)->minSampleRate, \
+ (gint) (aod)->maxSampleRate, (gint) (aod)->isFreqRangeContinuous, \
+ (gint) (aod)->maxChannels
+
+static gboolean
+_opensles_query_capabilities (GstOpenSLESSink * sink)
+{
+ gboolean res = FALSE;
+ SLresult result;
+ SLObjectItf engineObject = NULL;
+ SLAudioIODeviceCapabilitiesItf audioIODeviceCapabilities;
+ SLint32 i, j, numOutputs = MAX_NUMBER_OUTPUT_DEVICES;
+ SLuint32 outputDeviceIDs[MAX_NUMBER_OUTPUT_DEVICES];
+ SLAudioOutputDescriptor audioOutputDescriptor;
+
+ /* Create engine */
+ result = slCreateEngine (&engineObject, 0, NULL, 0, NULL, NULL);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_ERROR_OBJECT (sink, "slCreateEngine failed(0x%08x)", (guint32) result);
+ goto beach;
+ }
+
+ /* Realize the engine */
+ result = (*engineObject)->Realize (engineObject, SL_BOOLEAN_FALSE);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_ERROR_OBJECT (sink, "engine.Realize failed(0x%08x)", (guint32) result);
+ goto beach;
+ }
+
+ /* Get the engine interface, which is needed in order to create other objects */
+ result = (*engineObject)->GetInterface (engineObject,
+ SL_IID_AUDIOIODEVICECAPABILITIES, &audioIODeviceCapabilities);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_ERROR_OBJECT (sink,
+ "engine.GetInterface(IODeviceCapabilities) failed(0x%08x)",
+ (guint32) result);
+ goto beach;
+ }
+
+ /* Query the list of available audio outputs */
+ result = (*audioIODeviceCapabilities)->GetAvailableAudioOutputs
+ (audioIODeviceCapabilities, &numOutputs, outputDeviceIDs);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_ERROR_OBJECT (sink,
+ "IODeviceCapabilities.GetAvailableAudioOutputs failed(0x%08x)",
+ (guint32) result);
+ goto beach;
+ }
+
+ GST_DEBUG_OBJECT (sink, "Found %d output devices", (gint32) numOutputs);
+
+ for (i = 0; i < numOutputs; i++) {
+ result = (*audioIODeviceCapabilities)->QueryAudioOutputCapabilities
+ (audioIODeviceCapabilities, outputDeviceIDs[i], &audioOutputDescriptor);
+ if (result != SL_RESULT_SUCCESS) {
+ GST_ERROR_OBJECT (sink,
+ "IODeviceCapabilities.QueryAudioOutputCapabilities failed(0x%08x)",
+ (guint32) result);
+ continue;
+ }
+
+ GST_DEBUG_OBJECT (sink, " ID: %08x " AUDIO_OUTPUT_DESC_FORMAT,
+ (guint) outputDeviceIDs[i],
+ AUDIO_OUTPUT_DESC_ARGS (&audioOutputDescriptor));
+ GST_DEBUG_OBJECT (sink, " Found %d supported sample rated",
+ audioOutputDescriptor.numOfSamplingRatesSupported);
+
+ for (j = 0; j < audioOutputDescriptor.numOfSamplingRatesSupported; j++) {
+ GST_DEBUG_OBJECT (sink, " %d Hz",
+ (gint) audioOutputDescriptor.samplingRatesSupported[j]);
+ }
+ }
+
+ res = TRUE;
+beach:
+ /* Destroy the engine object */
+ if (engineObject) {
+ (*engineObject)->Destroy (engineObject);
+ }
+
+ return res;
+}
+
+static void
+gst_opensles_sink_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec)
+{
+ GstOpenSLESSink *sink = GST_OPENSLES_SINK (object);
+ GstRingBuffer *rb = GST_BASE_AUDIO_SINK (sink)->ringbuffer;
+
+ switch (prop_id) {
+ case PROP_VOLUME:
+ sink->volume = g_value_get_double (value);
+ if (rb && GST_IS_OPENSLES_RING_BUFFER (rb)) {
+ gst_opensles_ringbuffer_set_volume (rb, sink->volume);
+ }
+ break;
+ case PROP_MUTE:
+ sink->mute = g_value_get_boolean (value);
+ if (rb && GST_IS_OPENSLES_RING_BUFFER (rb)) {
+ gst_opensles_ringbuffer_set_mute (rb, sink->mute);
+ }
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gst_opensles_sink_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec)
+{
+ GstOpenSLESSink *sink = GST_OPENSLES_SINK (object);
+ switch (prop_id) {
+ case PROP_VOLUME:
+ g_value_set_double (value, sink->volume);
+ break;
+ case PROP_MUTE:
+ g_value_set_boolean (value, sink->mute);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gst_opensles_sink_class_init (GstOpenSLESSinkClass * klass)
+{
+ GObjectClass *gobject_class;
+ GstBaseAudioSinkClass *gstbaseaudiosink_class;
+
+ gobject_class = (GObjectClass *) klass;
+ gstbaseaudiosink_class = (GstBaseAudioSinkClass *) klass;
+
+ parent_class = g_type_class_peek_parent (klass);
+
+ gobject_class->set_property = gst_opensles_sink_set_property;
+ gobject_class->get_property = gst_opensles_sink_get_property;
+
+ g_object_class_install_property (gobject_class, PROP_VOLUME,
+ g_param_spec_double ("volume", "Volume", "Volume of this stream",
+ 0, 1.0, 1.0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (gobject_class, PROP_MUTE,
+ g_param_spec_boolean ("mute", "Mute", "Mute state of this stream",
+ DEFAULT_MUTE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ gstbaseaudiosink_class->create_ringbuffer =
+ GST_DEBUG_FUNCPTR (gst_opensles_sink_create_ringbuffer);
+}
+
+static void
+gst_opensles_sink_init (GstOpenSLESSink * sink, GstOpenSLESSinkClass * gclass)
+{
+ sink->volume = DEFAULT_VOLUME;
+ sink->mute = DEFAULT_MUTE;
+
+ _opensles_query_capabilities (sink);
+
+ gst_base_audio_sink_set_provide_clock (GST_BASE_AUDIO_SINK (sink), TRUE);
+ /* Override some default values to fit on the AudioFlinger behaviour of
+ * processing 20ms buffers as minimum buffer size. */
+ GST_BASE_AUDIO_SINK (sink)->buffer_time = 400000;
+ GST_BASE_AUDIO_SINK (sink)->latency_time = 20000;
+}
diff --git a/sys/opensles/openslessink.h b/sys/opensles/openslessink.h
new file mode 100644
index 00000000..da9e6064
--- /dev/null
+++ b/sys/opensles/openslessink.h
@@ -0,0 +1,55 @@
+/* GStreamer
+ * Copyright (C) 2012 Fluendo S.A. <support@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __OPENSLESSINK_H__
+#define __OPENSLESSINK_H__
+
+#include <gst/gst.h>
+#include <gst/audio/gstbaseaudiosink.h>
+#include "openslesringbuffer.h"
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_OPENSLES_SINK \
+ (gst_opensles_sink_get_type())
+#define GST_OPENSLES_SINK(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_OPENSLES_SINK,GstOpenSLESSink))
+#define GST_OPENSLES_SINK_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_OPENSLES_SINK,GstOpenSLESSinkClass))
+
+typedef struct _GstOpenSLESSink GstOpenSLESSink;
+typedef struct _GstOpenSLESSinkClass GstOpenSLESSinkClass;
+
+struct _GstOpenSLESSink
+{
+ GstBaseAudioSink sink;
+
+ gfloat volume;
+ gboolean mute;
+};
+
+struct _GstOpenSLESSinkClass
+{
+ GstBaseAudioSinkClass parent_class;
+};
+
+GType gst_opensles_sink_get_type (void);
+
+G_END_DECLS
+#endif /* __OPENSLESSINK_H__ */
diff --git a/sys/opensles/openslessrc.c b/sys/opensles/openslessrc.c
new file mode 100644
index 00000000..df697aba
--- /dev/null
+++ b/sys/opensles/openslessrc.c
@@ -0,0 +1,111 @@
+/* GStreamer
+ * Copyright (C) 2012 Fluendo S.A. <support@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-openslessrc
+ * @see_also: openslessink
+ *
+ * This element reads data from default audio input using the OpenSL ES API in Android OS.
+ *
+ * <refsect2>
+ * <title>Example pipelines</title>
+ * |[
+ * gst-launch -v openslessrc ! audioconvert ! vorbisenc ! oggmux ! filesink location=recorded.ogg
+ * ]| Record from default audio input and encode to Ogg/Vorbis.
+ * </refsect2>
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "openslessrc.h"
+
+GST_DEBUG_CATEGORY_STATIC (opensles_src_debug);
+#define GST_CAT_DEFAULT opensles_src_debug
+
+/* *INDENT-OFF* */
+static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("audio/x-raw-int, "
+ "endianness = (int) {" G_STRINGIFY (G_BYTE_ORDER) " }, "
+ "signed = (boolean) { TRUE }, "
+ "width = (int) 16, "
+ "depth = (int) 16, "
+ "rate = (int) 16000, "
+ "channels = (int) 1")
+ );
+/* *INDENT-ON* */
+
+static void
+_do_init (GType type)
+{
+ GST_DEBUG_CATEGORY_INIT (opensles_src_debug, "opensles_src", 0,
+ "OpenSL ES Src");
+}
+
+GST_BOILERPLATE_FULL (GstOpenSLESSrc, gst_opensles_src, GstBaseAudioSrc,
+ GST_TYPE_BASE_AUDIO_SRC, _do_init);
+
+static void
+gst_opensles_src_base_init (gpointer g_class)
+{
+ GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
+
+ gst_element_class_add_static_pad_template (element_class, &src_factory);
+
+ gst_element_class_set_details_simple (element_class, "OpenSL ES Src",
+ "Src/Audio",
+ "Input sound using the OpenSL ES APIs",
+ "Josep Torra <support@fluendo.com>");
+}
+
+static GstRingBuffer *
+gst_opensles_src_create_ringbuffer (GstBaseAudioSrc * base)
+{
+ GstRingBuffer *rb;
+
+ rb = gst_opensles_ringbuffer_new (RB_MODE_SRC);
+
+ return rb;
+}
+
+static void
+gst_opensles_src_class_init (GstOpenSLESSrcClass * klass)
+{
+ GstBaseAudioSrcClass *gstbaseaudiosrc_class;
+
+ gstbaseaudiosrc_class = (GstBaseAudioSrcClass *) klass;
+
+ parent_class = g_type_class_peek_parent (klass);
+
+ gstbaseaudiosrc_class->create_ringbuffer =
+ GST_DEBUG_FUNCPTR (gst_opensles_src_create_ringbuffer);
+}
+
+static void
+gst_opensles_src_init (GstOpenSLESSrc * src, GstOpenSLESSrcClass * gclass)
+{
+ /* Override some default values to fit on the AudioFlinger behaviour of
+ * processing 20ms buffers as minimum buffer size. */
+ GST_BASE_AUDIO_SRC (src)->buffer_time = 400000;
+ GST_BASE_AUDIO_SRC (src)->latency_time = 20000;
+}
diff --git a/sys/opensles/openslessrc.h b/sys/opensles/openslessrc.h
new file mode 100644
index 00000000..9f57c933
--- /dev/null
+++ b/sys/opensles/openslessrc.h
@@ -0,0 +1,52 @@
+/* GStreamer
+ * Copyright (C) 2012 Fluendo S.A. <support@fluendo.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __OPENSLESSRC_H__
+#define __OPENSLESSRC_H__
+
+#include <gst/gst.h>
+#include <gst/audio/gstbaseaudiosrc.h>
+#include "openslesringbuffer.h"
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_OPENSLES_SRC \
+ (gst_opensles_src_get_type())
+#define GST_OPENSLES_SRC(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_OPENSLES_SRC,GstOpenSLESSrc))
+#define GST_OPENSLES_SRC_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_OPENSLES_SRC,GstOpenSLESSrcClass))
+
+typedef struct _GstOpenSLESSrc GstOpenSLESSrc;
+typedef struct _GstOpenSLESSrcClass GstOpenSLESSrcClass;
+
+struct _GstOpenSLESSrc
+{
+ GstBaseAudioSrc src;
+};
+
+struct _GstOpenSLESSrcClass
+{
+ GstBaseAudioSrcClass parent_class;
+};
+
+GType gst_opensles_src_get_type (void);
+
+G_END_DECLS
+#endif /* __OPENSLESSRC_H__ */
diff --git a/sys/osxvideo/Makefile.in b/sys/osxvideo/Makefile.in
index 0372fdf9..b436d353 100644
--- a/sys/osxvideo/Makefile.in
+++ b/sys/osxvideo/Makefile.in
@@ -252,6 +252,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/sys/osxvideo/osxvideosrc.c b/sys/osxvideo/osxvideosrc.c
index 14b70997..79faaf60 100644
--- a/sys/osxvideo/osxvideosrc.c
+++ b/sys/osxvideo/osxvideosrc.c
@@ -642,7 +642,7 @@ gst_osx_video_src_base_init (gpointer gclass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&src_template));
- gst_element_class_set_metadata (element_class, "Video Source (OSX)",
+ gst_element_class_set_static_metadata (element_class, "Video Source (OSX)",
"Source/Video",
"Reads raw frames from a capture device on OS X",
"Ole Andre Vadla Ravnaas <ole.andre.ravnas@tandberg.com>, "
diff --git a/sys/pvr2d/Makefile.in b/sys/pvr2d/Makefile.in
index 21077e0b..809f9de8 100644
--- a/sys/pvr2d/Makefile.in
+++ b/sys/pvr2d/Makefile.in
@@ -254,6 +254,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/sys/pvr2d/gstpvrvideosink.c b/sys/pvr2d/gstpvrvideosink.c
index 0a93687d..aaacff4d 100644
--- a/sys/pvr2d/gstpvrvideosink.c
+++ b/sys/pvr2d/gstpvrvideosink.c
@@ -1460,7 +1460,7 @@ gst_pvrvideosink_class_init (GstPVRVideoSinkClass * klass)
"original aspect ratio", TRUE,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"PVR Video sink", "Sink/Video",
"A PVR videosink",
"Luciana Fujii Pontello <luciana.fujii@collabora.co.uk");
diff --git a/sys/qtwrapper/Makefile.in b/sys/qtwrapper/Makefile.in
index fb522231..48083b51 100644
--- a/sys/qtwrapper/Makefile.in
+++ b/sys/qtwrapper/Makefile.in
@@ -255,6 +255,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/sys/shm/Makefile.in b/sys/shm/Makefile.in
index 9e700e9a..7db20863 100644
--- a/sys/shm/Makefile.in
+++ b/sys/shm/Makefile.in
@@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/sys/shm/gstshmsink.c b/sys/shm/gstshmsink.c
index 1711e8ea..d760bc56 100644
--- a/sys/shm/gstshmsink.c
+++ b/sys/shm/gstshmsink.c
@@ -176,7 +176,7 @@ gst_shm_sink_class_init (GstShmSinkClass * klass)
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&sinktemplate));
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"Shared Memory Sink",
"Sink",
"Send data over shared memory to the matching source",
diff --git a/sys/shm/gstshmsrc.c b/sys/shm/gstshmsrc.c
index 1c904918..ec6838d8 100644
--- a/sys/shm/gstshmsrc.c
+++ b/sys/shm/gstshmsrc.c
@@ -134,7 +134,7 @@ gst_shm_src_class_init (GstShmSrcClass * klass)
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&srctemplate));
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"Shared Memory Source",
"Source",
"Receive data from the shared memory sink",
diff --git a/sys/uvch264/Makefile.in b/sys/uvch264/Makefile.in
index bb72566f..fe22e7ed 100644
--- a/sys/uvch264/Makefile.in
+++ b/sys/uvch264/Makefile.in
@@ -256,6 +256,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/sys/uvch264/gstuvch264_mjpgdemux.c b/sys/uvch264/gstuvch264_mjpgdemux.c
index 880b4491..e194cdab 100644
--- a/sys/uvch264/gstuvch264_mjpgdemux.c
+++ b/sys/uvch264/gstuvch264_mjpgdemux.c
@@ -200,7 +200,7 @@ gst_uvc_h264_mjpg_demux_base_init (gpointer g_class)
gst_element_class_add_pad_template (element_class, pt);
gst_object_unref (pt);
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"UVC H264 MJPG Demuxer",
"Video/Demuxer",
"Demux UVC H264 auxiliary streams from MJPG images",
diff --git a/sys/uvch264/gstuvch264_src.c b/sys/uvch264/gstuvch264_src.c
index ac99768d..1b766917 100644
--- a/sys/uvch264/gstuvch264_src.c
+++ b/sys/uvch264/gstuvch264_src.c
@@ -273,7 +273,7 @@ gst_uvc_h264_src_base_init (gpointer g_class)
GST_DEBUG_CATEGORY_INIT (uvc_h264_src_debug, "uvch264_src",
0, "UVC H264 Compliant camera bin source");
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"UVC H264 Source",
"Source/Video",
"UVC H264 Encoding camera source",
diff --git a/sys/vcd/Makefile.in b/sys/vcd/Makefile.in
index 77fd285e..c5465651 100644
--- a/sys/vcd/Makefile.in
+++ b/sys/vcd/Makefile.in
@@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/sys/vcd/vcdsrc.c b/sys/vcd/vcdsrc.c
index 294bd2ad..8c6e6725 100644
--- a/sys/vcd/vcdsrc.c
+++ b/sys/vcd/vcdsrc.c
@@ -95,7 +95,7 @@ gst_vcdsrc_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_set_metadata (element_class, "VCD Source",
+ gst_element_class_set_static_metadata (element_class, "VCD Source",
"Source/File",
"Asynchronous read from VCD disk", "Erik Walthinsen <omega@cse.ogi.edu>");
diff --git a/sys/vdpau/Makefile.in b/sys/vdpau/Makefile.in
index 44124259..099715a2 100644
--- a/sys/vdpau/Makefile.in
+++ b/sys/vdpau/Makefile.in
@@ -298,6 +298,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/sys/vdpau/basevideodecoder/Makefile.in b/sys/vdpau/basevideodecoder/Makefile.in
index 79d7ab35..2c8178b6 100644
--- a/sys/vdpau/basevideodecoder/Makefile.in
+++ b/sys/vdpau/basevideodecoder/Makefile.in
@@ -225,6 +225,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/sys/vdpau/gstvdp/Makefile.in b/sys/vdpau/gstvdp/Makefile.in
index 358c46c5..9ca97a92 100644
--- a/sys/vdpau/gstvdp/Makefile.in
+++ b/sys/vdpau/gstvdp/Makefile.in
@@ -266,6 +266,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/sys/vdpau/gstvdpsink.c b/sys/vdpau/gstvdpsink.c
index ff4f7453..a171b022 100644
--- a/sys/vdpau/gstvdpsink.c
+++ b/sys/vdpau/gstvdpsink.c
@@ -1385,7 +1385,7 @@ gst_vdp_sink_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"VDPAU Sink",
"Sink/Video",
"VDPAU Sink", "Carl-Anton Ingmarsson <ca.ingmarsson@gmail.com>");
diff --git a/sys/vdpau/gstvdpvideopostprocess.c b/sys/vdpau/gstvdpvideopostprocess.c
index 4d76eceb..29466ae8 100644
--- a/sys/vdpau/gstvdpvideopostprocess.c
+++ b/sys/vdpau/gstvdpvideopostprocess.c
@@ -1179,7 +1179,7 @@ gst_vdp_vpp_base_init (gpointer gclass)
GstCaps *src_caps, *sink_caps;
GstPadTemplate *src_template, *sink_template;
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"VdpauVideoPostProcess",
"Filter/Converter/Decoder/Video",
"Post process GstVdpVideoBuffers and output GstVdpOutputBuffers",
diff --git a/sys/vdpau/h264/gstvdph264dec.c b/sys/vdpau/h264/gstvdph264dec.c
index ba44c6dc..92e33fcd 100644
--- a/sys/vdpau/h264/gstvdph264dec.c
+++ b/sys/vdpau/h264/gstvdph264dec.c
@@ -866,7 +866,7 @@ gst_vdp_h264_dec_base_init (gpointer g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"VDPAU H264 Decoder",
"Decoder",
"Decode h264 stream with vdpau",
diff --git a/sys/vdpau/mpeg/gstvdpmpegdec.c b/sys/vdpau/mpeg/gstvdpmpegdec.c
index ef1210e4..304cb9a3 100644
--- a/sys/vdpau/mpeg/gstvdpmpegdec.c
+++ b/sys/vdpau/mpeg/gstvdpmpegdec.c
@@ -620,7 +620,7 @@ gst_vdp_mpeg_dec_base_init (gpointer gclass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"VDPAU Mpeg Decoder",
"Decoder",
"Decode mpeg stream with vdpau",
diff --git a/sys/vdpau/mpeg4/gstvdpmpeg4dec.c b/sys/vdpau/mpeg4/gstvdpmpeg4dec.c
index 8ebd8932..fb0a2fd8 100644
--- a/sys/vdpau/mpeg4/gstvdpmpeg4dec.c
+++ b/sys/vdpau/mpeg4/gstvdpmpeg4dec.c
@@ -439,7 +439,7 @@ gst_vdp_mpeg4_dec_base_init (gpointer gclass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"VDPAU Mpeg4 Decoder",
"Decoder",
"Decode mpeg4 stream with vdpau",
diff --git a/sys/wasapi/Makefile.in b/sys/wasapi/Makefile.in
index a54b3904..49b04112 100644
--- a/sys/wasapi/Makefile.in
+++ b/sys/wasapi/Makefile.in
@@ -183,6 +183,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/sys/wasapi/gstwasapisink.c b/sys/wasapi/gstwasapisink.c
index f8f7103a..307bbe91 100644
--- a/sys/wasapi/gstwasapisink.c
+++ b/sys/wasapi/gstwasapisink.c
@@ -67,7 +67,7 @@ gst_wasapi_sink_base_init (gpointer gclass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&sink_template));
- gst_element_class_set_metadata (element_class, "WasapiSrc",
+ gst_element_class_set_static_metadata (element_class, "WasapiSrc",
"Sink/Audio",
"Stream audio to an audio capture device through WASAPI",
"Ole André Vadla Ravnås <ole.andre.ravnas@tandberg.com>");
diff --git a/sys/wasapi/gstwasapisrc.c b/sys/wasapi/gstwasapisrc.c
index 7163f520..38a829d3 100644
--- a/sys/wasapi/gstwasapisrc.c
+++ b/sys/wasapi/gstwasapisrc.c
@@ -71,7 +71,7 @@ gst_wasapi_src_base_init (gpointer gclass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&src_template));
- gst_element_class_set_metadata (element_class, "WasapiSrc",
+ gst_element_class_set_static_metadata (element_class, "WasapiSrc",
"Source/Audio",
"Stream audio from an audio capture device through WASAPI",
"Ole André Vadla Ravnås <ole.andre.ravnas@tandberg.com>");
diff --git a/sys/wininet/Makefile.in b/sys/wininet/Makefile.in
index 25f130e2..9957eec4 100644
--- a/sys/wininet/Makefile.in
+++ b/sys/wininet/Makefile.in
@@ -250,6 +250,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/sys/wininet/gstwininetsrc.c b/sys/wininet/gstwininetsrc.c
index ed719b1c..2adf93ff 100644
--- a/sys/wininet/gstwininetsrc.c
+++ b/sys/wininet/gstwininetsrc.c
@@ -86,7 +86,7 @@ gst_win_inet_src_base_init (gpointer gclass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&src_template));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"Windows Network Source", "Source/Network",
"Receive data as a client over the network via HTTP or FTP",
"Ole André Vadla Ravnås <ole.andre.ravnas@tandberg.com>");
diff --git a/sys/winks/Makefile.in b/sys/winks/Makefile.in
index 18d9e52a..d10ccd8f 100644
--- a/sys/winks/Makefile.in
+++ b/sys/winks/Makefile.in
@@ -253,6 +253,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/sys/winks/gstksvideosrc.c b/sys/winks/gstksvideosrc.c
index 1f4d7075..06e82490 100644
--- a/sys/winks/gstksvideosrc.c
+++ b/sys/winks/gstksvideosrc.c
@@ -168,7 +168,7 @@ gst_ks_video_src_base_init (gpointer gclass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
- gst_element_class_set_metadata (element_class, "KsVideoSrc",
+ gst_element_class_set_static_metadata (element_class, "KsVideoSrc",
"Source/Video",
"Stream data from a video capture device through Windows kernel streaming",
"Ole André Vadla Ravnås <ole.andre.ravnas@tandberg.com>\n"
diff --git a/sys/winscreencap/Makefile.in b/sys/winscreencap/Makefile.in
index 10f84a43..82bf6301 100644
--- a/sys/winscreencap/Makefile.in
+++ b/sys/winscreencap/Makefile.in
@@ -253,6 +253,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/sys/winscreencap/gstdx9screencapsrc.c b/sys/winscreencap/gstdx9screencapsrc.c
index 82a0d4d6..32a8b29a 100644
--- a/sys/winscreencap/gstdx9screencapsrc.c
+++ b/sys/winscreencap/gstdx9screencapsrc.c
@@ -104,7 +104,7 @@ gst_dx9screencapsrc_base_init (gpointer klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&src_template));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"DirectX 9 screen capture source", "Source/Video", "Captures screen",
"Haakon Sporsheim <hakon.sporsheim@tandberg.com>");
}
diff --git a/sys/winscreencap/gstgdiscreencapsrc.c b/sys/winscreencap/gstgdiscreencapsrc.c
index fccd97a8..a8da30ba 100644
--- a/sys/winscreencap/gstgdiscreencapsrc.c
+++ b/sys/winscreencap/gstgdiscreencapsrc.c
@@ -99,7 +99,7 @@ gst_gdiscreencapsrc_base_init (gpointer klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&src_template));
- gst_element_class_set_metadata (element_class,
+ gst_element_class_set_static_metadata (element_class,
"GDI screen capture source", "Source/Video", "Captures screen",
"Haakon Sporsheim <hakon.sporsheim@tandberg.com>");
}
diff --git a/tests/Makefile.in b/tests/Makefile.in
index 49c421ea..0794bfe5 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -222,6 +222,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am
index c1a87298..d10f2a26 100644
--- a/tests/check/Makefile.am
+++ b/tests/check/Makefile.am
@@ -81,6 +81,12 @@ else
check_mpeg2enc =
endif
+if USE_MPG123
+check_mpg123 = elements/mpg123audiodec
+else
+check_mpg123 =
+endif
+
if USE_MPLEX
check_mplex = elements/mplex
else
@@ -212,6 +218,7 @@ check_PROGRAMS = \
elements/mpegtsmux \
elements/mpegvideoparse \
elements/mpeg4videoparse \
+ $(check_mpg123) \
elements/mxfdemux \
elements/mxfmux \
elements/id3mux \
@@ -351,6 +358,11 @@ elements_assrender_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION
elements_mpegtsmux_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
elements_mpegtsmux_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) $(GST_BASE_LIBS) $(LDADD)
+elements_mpg123audiodec_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
+elements_mpg123audiodec_LDADD = \
+ $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) \
+ -lgstaudio-@GST_API_VERSION@ -lgstfft-@GST_API_VERSION@ -lgstapp-@GST_API_VERSION@
+
elements_uvch264demux_CFLAGS = -DUVCH264DEMUX_DATADIR="$(srcdir)/elements/uvch264demux_data" \
$(AM_CFLAGS)
diff --git a/tests/check/Makefile.in b/tests/check/Makefile.in
index efbdd47b..4f061715 100644
--- a/tests/check/Makefile.in
+++ b/tests/check/Makefile.in
@@ -57,7 +57,7 @@ target_triplet = @target@
DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in $(top_srcdir)/common/check.mak
noinst_PROGRAMS = pipelines/colorspace$(EXEEXT) \
- pipelines/streamheader$(EXEEXT) $(am__EXEEXT_20)
+ pipelines/streamheader$(EXEEXT) $(am__EXEEXT_21)
check_PROGRAMS = generic/states$(EXEEXT) $(am__EXEEXT_1) \
$(am__EXEEXT_2) $(am__EXEEXT_3) $(am__EXEEXT_4) \
$(am__EXEEXT_5) $(am__EXEEXT_6) $(am__EXEEXT_7) \
@@ -71,14 +71,14 @@ check_PROGRAMS = generic/states$(EXEEXT) $(am__EXEEXT_1) \
$(am__EXEEXT_13) elements/jpegparse$(EXEEXT) $(am__EXEEXT_14) \
elements/h263parse$(EXEEXT) elements/h264parse$(EXEEXT) \
elements/mpegtsmux$(EXEEXT) elements/mpegvideoparse$(EXEEXT) \
- elements/mpeg4videoparse$(EXEEXT) elements/mxfdemux$(EXEEXT) \
- elements/mxfmux$(EXEEXT) elements/id3mux$(EXEEXT) \
- pipelines/mxf$(EXEEXT) $(am__EXEEXT_15) \
- elements/rtpmux$(EXEEXT) libs/mpegvideoparser$(EXEEXT) \
- libs/h264parser$(EXEEXT) $(am__EXEEXT_16) \
- libs/vc1parser$(EXEEXT) $(am__EXEEXT_17) \
- elements/viewfinderbin$(EXEEXT) $(am__EXEEXT_18) \
- $(am__EXEEXT_19)
+ elements/mpeg4videoparse$(EXEEXT) $(am__EXEEXT_15) \
+ elements/mxfdemux$(EXEEXT) elements/mxfmux$(EXEEXT) \
+ elements/id3mux$(EXEEXT) pipelines/mxf$(EXEEXT) \
+ $(am__EXEEXT_16) elements/rtpmux$(EXEEXT) \
+ libs/mpegvideoparser$(EXEEXT) libs/h264parser$(EXEEXT) \
+ $(am__EXEEXT_17) libs/vc1parser$(EXEEXT) $(am__EXEEXT_18) \
+ elements/viewfinderbin$(EXEEXT) $(am__EXEEXT_19) \
+ $(am__EXEEXT_20)
subdir = tests/check
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/common/m4/as-ac-expand.m4 \
@@ -148,12 +148,13 @@ libparser_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
@USE_CURL_TRUE@ elements/curlsmtpsink$(EXEEXT)
@USE_EXIF_TRUE@am__EXEEXT_13 = elements/jifmux$(EXEEXT)
@USE_COG_TRUE@am__EXEEXT_14 = elements/logoinsert$(EXEEXT)
-@USE_MIMIC_TRUE@am__EXEEXT_15 = pipelines/mimic$(EXEEXT)
-@USE_UVCH264_TRUE@am__EXEEXT_16 = elements/uvch264demux$(EXEEXT)
-@USE_SCHRO_TRUE@am__EXEEXT_17 = elements/schroenc$(EXEEXT)
-@USE_ZBAR_TRUE@am__EXEEXT_18 = elements/zbar$(EXEEXT)
-@HAVE_ORC_TRUE@am__EXEEXT_19 = orc/cog$(EXEEXT) orc/bayer$(EXEEXT)
-@USE_NEON_TRUE@am__EXEEXT_20 = elements/neonhttpsrc$(EXEEXT)
+@USE_MPG123_TRUE@am__EXEEXT_15 = elements/mpg123audiodec$(EXEEXT)
+@USE_MIMIC_TRUE@am__EXEEXT_16 = pipelines/mimic$(EXEEXT)
+@USE_UVCH264_TRUE@am__EXEEXT_17 = elements/uvch264demux$(EXEEXT)
+@USE_SCHRO_TRUE@am__EXEEXT_18 = elements/schroenc$(EXEEXT)
+@USE_ZBAR_TRUE@am__EXEEXT_19 = elements/zbar$(EXEEXT)
+@HAVE_ORC_TRUE@am__EXEEXT_20 = orc/cog$(EXEEXT) orc/bayer$(EXEEXT)
+@USE_NEON_TRUE@am__EXEEXT_21 = elements/neonhttpsrc$(EXEEXT)
PROGRAMS = $(noinst_PROGRAMS)
elements_asfmux_SOURCES = elements/asfmux.c
elements_asfmux_OBJECTS = asfmux.$(OBJEXT)
@@ -307,6 +308,16 @@ elements_mpegvideoparse_SOURCES = elements/mpegvideoparse.c
elements_mpegvideoparse_OBJECTS = mpegvideoparse.$(OBJEXT)
elements_mpegvideoparse_DEPENDENCIES = libparser.la \
$(am__DEPENDENCIES_2)
+elements_mpg123audiodec_SOURCES = elements/mpg123audiodec.c
+elements_mpg123audiodec_OBJECTS = \
+ elements_mpg123audiodec-mpg123audiodec.$(OBJEXT)
+elements_mpg123audiodec_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_2)
+elements_mpg123audiodec_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(elements_mpg123audiodec_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
elements_mplex_SOURCES = elements/mplex.c
elements_mplex_OBJECTS = mplex.$(OBJEXT)
elements_mplex_LDADD = $(LDADD)
@@ -484,15 +495,15 @@ SOURCES = $(libparser_la_SOURCES) elements/asfmux.c \
$(elements_jifmux_SOURCES) elements/jpegparse.c \
elements/kate.c elements/logoinsert.c elements/mpeg2enc.c \
elements/mpeg4videoparse.c elements/mpegtsmux.c \
- elements/mpegvideoparse.c elements/mplex.c elements/mxfdemux.c \
- elements/mxfmux.c elements/neonhttpsrc.c elements/ofa.c \
- elements/opus.c elements/rtpmux.c elements/schroenc.c \
- elements/timidity.c elements/uvch264demux.c \
- elements/viewfinderbin.c elements/voaacenc.c \
- elements/voamrwbenc.c elements/zbar.c generic/states.c \
- libs/h264parser.c libs/mpegvideoparser.c libs/vc1parser.c \
- orc/bayer.c orc/cog.c pipelines/colorspace.c pipelines/mimic.c \
- pipelines/mxf.c pipelines/streamheader.c
+ elements/mpegvideoparse.c elements/mpg123audiodec.c \
+ elements/mplex.c elements/mxfdemux.c elements/mxfmux.c \
+ elements/neonhttpsrc.c elements/ofa.c elements/opus.c \
+ elements/rtpmux.c elements/schroenc.c elements/timidity.c \
+ elements/uvch264demux.c elements/viewfinderbin.c \
+ elements/voaacenc.c elements/voamrwbenc.c elements/zbar.c \
+ generic/states.c libs/h264parser.c libs/mpegvideoparser.c \
+ libs/vc1parser.c orc/bayer.c orc/cog.c pipelines/colorspace.c \
+ pipelines/mimic.c pipelines/mxf.c pipelines/streamheader.c
DIST_SOURCES = $(libparser_la_SOURCES) elements/asfmux.c \
elements/assrender.c elements/autoconvert.c \
elements/autovideoconvert.c \
@@ -505,15 +516,15 @@ DIST_SOURCES = $(libparser_la_SOURCES) elements/asfmux.c \
$(elements_jifmux_SOURCES) elements/jpegparse.c \
elements/kate.c elements/logoinsert.c elements/mpeg2enc.c \
elements/mpeg4videoparse.c elements/mpegtsmux.c \
- elements/mpegvideoparse.c elements/mplex.c elements/mxfdemux.c \
- elements/mxfmux.c elements/neonhttpsrc.c elements/ofa.c \
- elements/opus.c elements/rtpmux.c elements/schroenc.c \
- elements/timidity.c elements/uvch264demux.c \
- elements/viewfinderbin.c elements/voaacenc.c \
- elements/voamrwbenc.c elements/zbar.c generic/states.c \
- libs/h264parser.c libs/mpegvideoparser.c libs/vc1parser.c \
- orc/bayer.c orc/cog.c pipelines/colorspace.c pipelines/mimic.c \
- pipelines/mxf.c pipelines/streamheader.c
+ elements/mpegvideoparse.c elements/mpg123audiodec.c \
+ elements/mplex.c elements/mxfdemux.c elements/mxfmux.c \
+ elements/neonhttpsrc.c elements/ofa.c elements/opus.c \
+ elements/rtpmux.c elements/schroenc.c elements/timidity.c \
+ elements/uvch264demux.c elements/viewfinderbin.c \
+ elements/voaacenc.c elements/voamrwbenc.c elements/zbar.c \
+ generic/states.c libs/h264parser.c libs/mpegvideoparser.c \
+ libs/vc1parser.c orc/bayer.c orc/cog.c pipelines/colorspace.c \
+ pipelines/mimic.c pipelines/mxf.c pipelines/streamheader.c
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -600,6 +611,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -1001,6 +1014,8 @@ SUPPRESSIONS = $(top_srcdir)/common/gst.supp $(srcdir)/gst-plugins-bad.supp
@USE_COG_TRUE@check_logoinsert = elements/logoinsert
@USE_MPEG2ENC_FALSE@check_mpeg2enc =
@USE_MPEG2ENC_TRUE@check_mpeg2enc = elements/mpeg2enc
+@USE_MPG123_FALSE@check_mpg123 =
+@USE_MPG123_TRUE@check_mpg123 = elements/mpg123audiodec
@USE_MPLEX_FALSE@check_mplex =
@USE_MPLEX_TRUE@check_mplex = elements/mplex
@USE_NEON_FALSE@check_neon =
@@ -1165,6 +1180,11 @@ elements_assrender_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_C
elements_assrender_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) -lgstapp-$(GST_API_VERSION) $(GST_BASE_LIBS) $(LDADD)
elements_mpegtsmux_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
elements_mpegtsmux_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) $(GST_BASE_LIBS) $(LDADD)
+elements_mpg123audiodec_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS)
+elements_mpg123audiodec_LDADD = \
+ $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) \
+ -lgstaudio-@GST_API_VERSION@ -lgstfft-@GST_API_VERSION@ -lgstapp-@GST_API_VERSION@
+
elements_uvch264demux_CFLAGS = -DUVCH264DEMUX_DATADIR="$(srcdir)/elements/uvch264demux_data" \
$(AM_CFLAGS)
@@ -1320,6 +1340,9 @@ elements/mpegtsmux$(EXEEXT): $(elements_mpegtsmux_OBJECTS) $(elements_mpegtsmux_
elements/mpegvideoparse$(EXEEXT): $(elements_mpegvideoparse_OBJECTS) $(elements_mpegvideoparse_DEPENDENCIES) $(EXTRA_elements_mpegvideoparse_DEPENDENCIES) elements/$(am__dirstamp)
@rm -f elements/mpegvideoparse$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(elements_mpegvideoparse_OBJECTS) $(elements_mpegvideoparse_LDADD) $(LIBS)
+elements/mpg123audiodec$(EXEEXT): $(elements_mpg123audiodec_OBJECTS) $(elements_mpg123audiodec_DEPENDENCIES) $(EXTRA_elements_mpg123audiodec_DEPENDENCIES) elements/$(am__dirstamp)
+ @rm -f elements/mpg123audiodec$(EXEEXT)
+ $(AM_V_CCLD)$(elements_mpg123audiodec_LINK) $(elements_mpg123audiodec_OBJECTS) $(elements_mpg123audiodec_LDADD) $(LIBS)
elements/mplex$(EXEEXT): $(elements_mplex_OBJECTS) $(elements_mplex_DEPENDENCIES) $(EXTRA_elements_mplex_DEPENDENCIES) elements/$(am__dirstamp)
@rm -f elements/mplex$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(elements_mplex_OBJECTS) $(elements_mplex_LDADD) $(LIBS)
@@ -1431,6 +1454,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_jifmux-jifmux.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_kate-kate.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_mpegtsmux-mpegtsmux.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_mpg123audiodec-mpg123audiodec.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_rtpmux-rtpmux.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_timidity-timidity.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_uvch264demux-uvch264demux.Po@am__quote@
@@ -1870,6 +1894,20 @@ mpegvideoparse.obj: elements/mpegvideoparse.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mpegvideoparse.obj `if test -f 'elements/mpegvideoparse.c'; then $(CYGPATH_W) 'elements/mpegvideoparse.c'; else $(CYGPATH_W) '$(srcdir)/elements/mpegvideoparse.c'; fi`
+elements_mpg123audiodec-mpg123audiodec.o: elements/mpg123audiodec.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_mpg123audiodec_CFLAGS) $(CFLAGS) -MT elements_mpg123audiodec-mpg123audiodec.o -MD -MP -MF $(DEPDIR)/elements_mpg123audiodec-mpg123audiodec.Tpo -c -o elements_mpg123audiodec-mpg123audiodec.o `test -f 'elements/mpg123audiodec.c' || echo '$(srcdir)/'`elements/mpg123audiodec.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/elements_mpg123audiodec-mpg123audiodec.Tpo $(DEPDIR)/elements_mpg123audiodec-mpg123audiodec.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='elements/mpg123audiodec.c' object='elements_mpg123audiodec-mpg123audiodec.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_mpg123audiodec_CFLAGS) $(CFLAGS) -c -o elements_mpg123audiodec-mpg123audiodec.o `test -f 'elements/mpg123audiodec.c' || echo '$(srcdir)/'`elements/mpg123audiodec.c
+
+elements_mpg123audiodec-mpg123audiodec.obj: elements/mpg123audiodec.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_mpg123audiodec_CFLAGS) $(CFLAGS) -MT elements_mpg123audiodec-mpg123audiodec.obj -MD -MP -MF $(DEPDIR)/elements_mpg123audiodec-mpg123audiodec.Tpo -c -o elements_mpg123audiodec-mpg123audiodec.obj `if test -f 'elements/mpg123audiodec.c'; then $(CYGPATH_W) 'elements/mpg123audiodec.c'; else $(CYGPATH_W) '$(srcdir)/elements/mpg123audiodec.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/elements_mpg123audiodec-mpg123audiodec.Tpo $(DEPDIR)/elements_mpg123audiodec-mpg123audiodec.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='elements/mpg123audiodec.c' object='elements_mpg123audiodec-mpg123audiodec.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_mpg123audiodec_CFLAGS) $(CFLAGS) -c -o elements_mpg123audiodec-mpg123audiodec.obj `if test -f 'elements/mpg123audiodec.c'; then $(CYGPATH_W) 'elements/mpg123audiodec.c'; else $(CYGPATH_W) '$(srcdir)/elements/mpg123audiodec.c'; fi`
+
mplex.o: elements/mplex.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mplex.o -MD -MP -MF $(DEPDIR)/mplex.Tpo -c -o mplex.o `test -f 'elements/mplex.c' || echo '$(srcdir)/'`elements/mplex.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mplex.Tpo $(DEPDIR)/mplex.Po
diff --git a/tests/check/elements/baseaudiovisualizer.c b/tests/check/elements/baseaudiovisualizer.c
index 5025d610..b0a0c1b5 100644
--- a/tests/check/elements/baseaudiovisualizer.c
+++ b/tests/check/elements/baseaudiovisualizer.c
@@ -71,7 +71,7 @@ gst_test_scope_class_init (GstTestScopeClass * g_class)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
- gst_element_class_set_metadata (element_class, "test scope",
+ gst_element_class_set_static_metadata (element_class, "test scope",
"Visualization",
"Dummy test scope", "Stefan Kost <ensonic@users.sf.net>");
diff --git a/tests/check/elements/camerabin.c b/tests/check/elements/camerabin.c
index 3cb8d806..2f968ab7 100644
--- a/tests/check/elements/camerabin.c
+++ b/tests/check/elements/camerabin.c
@@ -153,7 +153,7 @@ gst_test_camera_src_class_init (GstTestCameraSrcClass * klass)
gstbasecamera_class = GST_BASE_CAMERA_SRC_CLASS (klass);
gstbasecamera_class->set_mode = gst_test_camera_src_set_mode;
- gst_element_class_set_metadata (gstelement_class,
+ gst_element_class_set_static_metadata (gstelement_class,
"Test Camera Src",
"Camera/Src",
"Some test camera src",
diff --git a/tests/check/elements/dataurisrc.c b/tests/check/elements/dataurisrc.c
index 49c9bdbb..da805996 100644
--- a/tests/check/elements/dataurisrc.c
+++ b/tests/check/elements/dataurisrc.c
@@ -169,7 +169,7 @@ const gchar data_uri[] = "data:audio/ogg;base64,"
"AWZeiL1v7LSgX1wHDrB3NhI3k3sSnaKJAAAAAAAAQOJJS94nzV+3/3r/2Ho5ub5tHN70XSuPfdZZ"
"C/9eZOtqZc5Zfl8wP5ZenOT3hbWPpZeE6jzjkdY3f+GXCblaF41qKouT/N7UyQA=";
-GST_START_TEST (test_playbin2)
+GST_START_TEST (test_playbin)
{
GstElement *playbin, *sink;
int loops = 2;
@@ -225,7 +225,7 @@ dataurisrc_suite (void)
suite_add_tcase (s, tc_chain);
- tcase_add_test (tc_chain, test_playbin2);
+ tcase_add_test (tc_chain, test_playbin);
return s;
}
diff --git a/tests/check/elements/mpg123audiodec.c b/tests/check/elements/mpg123audiodec.c
new file mode 100644
index 00000000..57567e53
--- /dev/null
+++ b/tests/check/elements/mpg123audiodec.c
@@ -0,0 +1,542 @@
+/* GStreamer
+ *
+ * unit test for mpg123audiodec
+ *
+ * Copyright (c) 2012 Carlos Rafael Giani <dv@pseudoterminal.org>
+ *
+ * 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 <unistd.h>
+
+#include <gst/check/gstcheck.h>
+#include <gst/audio/audio.h>
+
+#include <gst/fft/gstfft.h>
+#include <gst/fft/gstffts16.h>
+#include <gst/fft/gstffts32.h>
+#include <gst/fft/gstfftf32.h>
+#include <gst/fft/gstfftf64.h>
+
+#include <gst/app/gstappsink.h>
+
+/* For ease of programming we use globals to keep refs for our floating
+ * src and sink pads we create; otherwise we always have to do get_pad,
+ * get_peer, and then remove references in every test function */
+static GstPad *mysrcpad, *mysinkpad;
+
+
+#define MP2_STREAM_FILENAME "stream.mp2"
+#define MP3_CBR_STREAM_FILENAME "cbr_stream.mp3"
+#define MP3_VBR_STREAM_FILENAME "vbr_stream.mp3"
+
+
+/* mpeg 1 layer 2 stream created with:
+ * gst-launch-1.0 -v audiotestsrc wave=sine freq=440 volume=1 num-buffers=32 ! \
+ * "audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int)44100, channels=(int)1" ! \
+ * avenc_mp2 bitrate=32000 ! tee name=t \
+ * t. ! queue ! fakesink silent=false \
+ * t. ! queue ! filesink location=test.mp2
+ *
+ * mpeg 1 layer 3 CBR stream created with:
+ * gst-launch-1.0 -v audiotestsrc wave=sine freq=440 volume=1 num-buffers=32 ! \
+ * "audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int)44100, channels=(int)1" ! \
+ * lamemp3enc encoding-engine-quality=high cbr=true target=bitrate bitrate=32 ! \
+ * "audio/mpeg, rate=(int)44100, channels=(int)1" ! tee name=t \
+ * t. ! queue ! fakesink silent=false \
+ * t. ! queue ! filesink location=test.mp3
+ *
+ * mpeg 1 layer 3 VBR stream created with:
+ * gst-launch-1.0 -v audiotestsrc wave=sine freq=440 volume=1 num-buffers=32 ! \
+ * "audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int)44100, channels=(int)1" ! \
+ * lamemp3enc encoding-engine-quality=high cbr=false target=quality quality=7 ! \
+ * "audio/mpeg, rate=(int)44100, channels=(int)1" ! tee name=t \
+ * t. ! queue ! fakesink silent=false \
+ * t. ! queue ! filesink location=test.mp3
+ */
+
+
+/* FFT test helpers taken from gst-plugins-base tests/check/audioresample.c */
+
+#define FFT_HELPERS(type,ffttag,ffttag2,scale) \
+static gdouble magnitude##ffttag (const GstFFT##ffttag##Complex *c) \
+{ \
+ gdouble mag = (gdouble) c->r * (gdouble) c->r; \
+ mag += (gdouble) c->i * (gdouble) c->i; \
+ mag /= scale * scale; \
+ mag = 10.0 * log10 (mag); \
+ return mag; \
+} \
+static gdouble find_main_frequency_spot_##ffttag ( \
+ const GstFFT##ffttag##Complex *v, int elements) \
+{ \
+ int i; \
+ gdouble maxmag = -9999; \
+ int maxidx = 0; \
+ for (i=0; i<elements; ++i) { \
+ gdouble mag = magnitude##ffttag (v+i); \
+ if (mag > maxmag) { \
+ maxmag = mag; \
+ maxidx = i; \
+ } \
+ } \
+ return maxidx / (gdouble) elements; \
+} \
+static gboolean is_zero_except_##ffttag (const GstFFT##ffttag##Complex *v, \
+ int elements, gdouble spot) \
+{ \
+ int i; \
+ for (i=0; i<elements; ++i) { \
+ gdouble pos = i / (gdouble) elements; \
+ gdouble mag = magnitude##ffttag (v+i); \
+ if (fabs (pos - spot) > 0.01) { \
+ if (mag > -35.0) { \
+ GST_LOG("Found magnitude at %f : %f (peak at %f)\n", pos, mag, spot); \
+ return FALSE; \
+ } \
+ } \
+ } \
+ return TRUE; \
+} \
+static void check_main_frequency_spot_##ffttag (GstBuffer *buffer, gdouble \
+ expected_spot) \
+{ \
+ GstMapInfo map; \
+ int num_samples; \
+ gdouble actual_spot; \
+ GstFFT##ffttag *ctx; \
+ GstFFT##ffttag##Complex *fftdata; \
+ \
+ gst_buffer_map (buffer, &map, GST_MAP_READ); \
+ \
+ num_samples = map.size / sizeof(type) & ~1; \
+ ctx = gst_fft_##ffttag2##_new (num_samples, FALSE); \
+ fftdata = g_new (GstFFT##ffttag##Complex, num_samples / 2 + 1); \
+ \
+ gst_fft_##ffttag2##_window (ctx, (type*)map.data, \
+ GST_FFT_WINDOW_HAMMING); \
+ gst_fft_##ffttag2##_fft (ctx, (type*)map.data, fftdata); \
+ \
+ actual_spot = find_main_frequency_spot_##ffttag (fftdata, \
+ num_samples / 2 + 1); \
+ GST_LOG ("Expected spot: %.3f actual: %.3f %f", expected_spot, actual_spot, \
+ fabs (expected_spot - actual_spot)); \
+ fail_unless (fabs (expected_spot - actual_spot) < 0.05, \
+ "Actual main frequency spot is too far away from expected one"); \
+ fail_unless (is_zero_except_##ffttag (fftdata, num_samples / 2 + 1, \
+ actual_spot), "One secondary peak in spectrum exceeds threshold"); \
+ \
+ gst_buffer_unmap (buffer, &map); \
+ \
+ gst_fft_##ffttag2##_free (ctx); \
+ g_free (fftdata); \
+}
+FFT_HELPERS (gint32, S32, s32, 2147483647.0);
+
+
+static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("audio/x-raw, format = (string) S32LE ")
+ );
+static GstStaticPadTemplate layer2_srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS_ANY);
+static GstStaticPadTemplate layer3_srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS_ANY);
+
+
+static void
+setup_input_pipeline (gchar const *stream_filename, GstElement ** pipeline,
+ GstElement ** appsink)
+{
+ GstElement *source, *parser;
+
+ *pipeline = gst_pipeline_new (NULL);
+ source = gst_element_factory_make ("filesrc", NULL);
+ parser = gst_element_factory_make ("mpegaudioparse", NULL);
+ *appsink = gst_element_factory_make ("appsink", NULL);
+
+ gst_bin_add_many (GST_BIN (*pipeline), source, parser, *appsink, NULL);
+ gst_element_link_many (source, parser, *appsink, NULL);
+
+ {
+ char *full_filename =
+ g_build_filename (GST_TEST_FILES_PATH, stream_filename, NULL);
+ g_object_set (G_OBJECT (source), "location", full_filename, NULL);
+ g_free (full_filename);
+ }
+
+ gst_element_set_state (*pipeline, GST_STATE_PLAYING);
+}
+
+static void
+cleanup_input_pipeline (GstElement * pipeline)
+{
+ gst_element_set_state (pipeline, GST_STATE_NULL);
+ gst_object_unref (pipeline);
+}
+
+static GstElement *
+setup_mpeg1layer2dec (void)
+{
+ GstElement *mpg123audiodec;
+ GstSegment seg;
+ GstCaps *caps;
+
+ GST_DEBUG ("setup_mpeg1layer2dec");
+ mpg123audiodec = gst_check_setup_element ("mpg123audiodec");
+ mysrcpad = gst_check_setup_src_pad (mpg123audiodec, &layer2_srctemplate);
+ mysinkpad = gst_check_setup_sink_pad (mpg123audiodec, &sinktemplate);
+ gst_pad_set_active (mysrcpad, TRUE);
+ gst_pad_set_active (mysinkpad, TRUE);
+
+ gst_segment_init (&seg, GST_FORMAT_TIME);
+ gst_pad_push_event (mysrcpad, gst_event_new_segment (&seg));
+
+ /* This is necessary to trigger a set_format call in the decoder;
+ * fixed caps don't trigger it */
+ caps = gst_caps_new_simple ("audio/mpeg",
+ "mpegversion", G_TYPE_INT, 1,
+ "layer", G_TYPE_INT, 2,
+ "rate", G_TYPE_INT, 44100,
+ "channels", G_TYPE_INT, 1, "parsed", G_TYPE_BOOLEAN, TRUE, NULL);
+ gst_pad_set_caps (mysrcpad, caps);
+ gst_caps_unref (caps);
+
+ return mpg123audiodec;
+}
+
+static GstElement *
+setup_mpeg1layer3dec (void)
+{
+ GstElement *mpg123audiodec;
+ GstSegment seg;
+ GstCaps *caps;
+
+ GST_DEBUG ("setup_mpeg1layer3dec");
+ mpg123audiodec = gst_check_setup_element ("mpg123audiodec");
+ mysrcpad = gst_check_setup_src_pad (mpg123audiodec, &layer3_srctemplate);
+ mysinkpad = gst_check_setup_sink_pad (mpg123audiodec, &sinktemplate);
+ gst_pad_set_active (mysrcpad, TRUE);
+ gst_pad_set_active (mysinkpad, TRUE);
+
+ gst_segment_init (&seg, GST_FORMAT_TIME);
+ gst_pad_push_event (mysrcpad, gst_event_new_segment (&seg));
+
+ /* This is necessary to trigger a set_format call in the decoder;
+ * fixed caps don't trigger it */
+ caps = gst_caps_new_simple ("audio/mpeg",
+ "mpegversion", G_TYPE_INT, 1,
+ "layer", G_TYPE_INT, 3,
+ "rate", G_TYPE_INT, 44100,
+ "channels", G_TYPE_INT, 1, "parsed", G_TYPE_BOOLEAN, TRUE, NULL);
+ gst_pad_set_caps (mysrcpad, caps);
+ gst_caps_unref (caps);
+
+ return mpg123audiodec;
+}
+
+static void
+cleanup_mpg123audiodec (GstElement * mpg123audiodec)
+{
+ GST_DEBUG ("cleanup_mpeg1layer2dec");
+ gst_element_set_state (mpg123audiodec, GST_STATE_NULL);
+
+ gst_pad_set_active (mysrcpad, FALSE);
+ gst_pad_set_active (mysinkpad, FALSE);
+ gst_check_teardown_src_pad (mpg123audiodec);
+ gst_check_teardown_sink_pad (mpg123audiodec);
+ gst_check_teardown_element (mpg123audiodec);
+}
+
+static void
+run_decoding_test (GstElement * mpg123audiodec, gchar const *filename)
+{
+ GstBus *bus;
+ unsigned int num_input_buffers, num_decoded_buffers;
+ gint expected_size;
+ GstCaps *out_caps, *caps;
+ GstAudioInfo audioinfo;
+ GstElement *input_pipeline, *input_appsink;
+ int i;
+ GstBuffer *outbuffer;
+
+ /* 440 Hz = frequency of sine wave in audio data
+ * 44100 Hz = sample rate
+ * (44100 / 2) Hz = Nyquist frequency */
+ static double const expected_frequency_spot = 440.0 / (44100.0 / 2.0);
+
+ fail_unless (gst_element_set_state (mpg123audiodec,
+ GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
+ "could not set to playing");
+ bus = gst_bus_new ();
+
+ gst_element_set_bus (mpg123audiodec, bus);
+
+ setup_input_pipeline (filename, &input_pipeline, &input_appsink);
+
+ num_input_buffers = 0;
+ while (TRUE) {
+ GstSample *sample;
+ GstBuffer *input_buffer;
+
+ sample = gst_app_sink_pull_sample (GST_APP_SINK (input_appsink));
+ if (sample == NULL)
+ break;
+
+ fail_unless (GST_IS_SAMPLE (sample));
+
+ input_buffer = gst_sample_get_buffer (sample);
+ fail_if (input_buffer == NULL);
+
+ /* This is done to be on the safe side - docs say lifetime of the input buffer
+ * depends *solely* on the sample */
+ input_buffer = gst_buffer_copy (input_buffer);
+
+ fail_unless_equals_int (gst_pad_push (mysrcpad, input_buffer), GST_FLOW_OK);
+
+ ++num_input_buffers;
+
+ gst_sample_unref (sample);
+ }
+
+ num_decoded_buffers = g_list_length (buffers);
+
+ /* check number of decoded buffers */
+ fail_unless_equals_int (num_decoded_buffers, num_input_buffers - 2);
+
+ caps = gst_pad_get_current_caps (mysinkpad);
+ GST_LOG ("output caps %" GST_PTR_FORMAT, caps);
+ fail_unless (gst_audio_info_from_caps (&audioinfo, caps),
+ "Getting audio info from caps failed");
+
+ /* check caps */
+ out_caps = gst_caps_new_simple ("audio/x-raw",
+ "format", G_TYPE_STRING, "S32LE",
+ "layout", G_TYPE_STRING, "interleaved",
+ "rate", G_TYPE_INT, 44100, "channels", G_TYPE_INT, 1, NULL);
+
+ fail_unless (gst_caps_is_equal_fixed (caps, out_caps), "Incorrect out caps");
+
+ gst_caps_unref (out_caps);
+ gst_caps_unref (caps);
+
+ /* here, test if decoded data is a sine tone, and if the sine frequency is at the
+ * right spot in the spectrum */
+ for (i = 0; i < num_decoded_buffers; ++i) {
+ outbuffer = GST_BUFFER (buffers->data);
+ fail_if (outbuffer == NULL, "Invalid buffer retrieved");
+
+ /* MPEG 1 layer 2 uses 1152 samples per frame */
+ expected_size = 1152 * GST_AUDIO_INFO_BPF (&audioinfo);
+ fail_unless_equals_int (gst_buffer_get_size (outbuffer), expected_size);
+
+ check_main_frequency_spot_S32 (outbuffer, expected_frequency_spot);
+
+ buffers = g_list_remove (buffers, outbuffer);
+ gst_buffer_unref (outbuffer);
+ outbuffer = NULL;
+ }
+
+ g_list_free (buffers);
+ buffers = NULL;
+
+ cleanup_input_pipeline (input_pipeline);
+ gst_bus_set_flushing (bus, TRUE);
+ gst_element_set_bus (mpg123audiodec, NULL);
+ gst_object_unref (GST_OBJECT (bus));
+}
+
+
+GST_START_TEST (test_decode_mpeg1layer2)
+{
+ GstElement *mpg123audiodec;
+ mpg123audiodec = setup_mpeg1layer2dec ();
+ run_decoding_test (mpg123audiodec, MP2_STREAM_FILENAME);
+ cleanup_mpg123audiodec (mpg123audiodec);
+ mpg123audiodec = NULL;
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (test_decode_mpeg1layer3_cbr)
+{
+ GstElement *mpg123audiodec;
+ mpg123audiodec = setup_mpeg1layer3dec ();
+ run_decoding_test (mpg123audiodec, MP3_CBR_STREAM_FILENAME);
+ cleanup_mpg123audiodec (mpg123audiodec);
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (test_decode_mpeg1layer3_vbr)
+{
+ GstElement *mpg123audiodec;
+ mpg123audiodec = setup_mpeg1layer3dec ();
+ run_decoding_test (mpg123audiodec, MP3_VBR_STREAM_FILENAME);
+ cleanup_mpg123audiodec (mpg123audiodec);
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (test_decode_garbage_mpeg1layer2)
+{
+ GstElement *mpg123audiodec;
+ GstBuffer *inbuffer;
+ GstBus *bus;
+ int i, num_buffers;
+ guint32 *tmpbuf;
+
+ mpg123audiodec = setup_mpeg1layer2dec ();
+
+ fail_unless (gst_element_set_state (mpg123audiodec,
+ GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
+ "could not set to playing");
+ bus = gst_bus_new ();
+
+ /* initialize the buffer with something that is no mpeg2 */
+ tmpbuf = g_new (guint32, 4096);
+ for (i = 0; i < 4096; i++) {
+ tmpbuf[i] = i;
+ }
+ inbuffer = gst_buffer_new_wrapped (tmpbuf, 4096 * sizeof (guint32));
+
+ ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
+
+ gst_element_set_bus (mpg123audiodec, bus);
+
+ /* should be possible to push without problems but nothing gets decoded */
+ fail_unless_equals_int (gst_pad_push (mysrcpad, inbuffer), GST_FLOW_OK);
+
+ num_buffers = g_list_length (buffers);
+
+ /* should be 0 buffers as decoding should've been impossible */
+ fail_unless_equals_int (num_buffers, 0);
+
+ g_list_free (buffers);
+ buffers = NULL;
+
+ gst_bus_set_flushing (bus, TRUE);
+ gst_element_set_bus (mpg123audiodec, NULL);
+ gst_object_unref (GST_OBJECT (bus));
+ cleanup_mpg123audiodec (mpg123audiodec);
+ mpg123audiodec = NULL;
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (test_decode_garbage_mpeg1layer3)
+{
+ GstElement *mpg123audiodec;
+ GstBuffer *inbuffer;
+ GstBus *bus;
+ int i, num_buffers;
+ guint32 *tmpbuf;
+
+ mpg123audiodec = setup_mpeg1layer3dec ();
+
+ fail_unless (gst_element_set_state (mpg123audiodec,
+ GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
+ "could not set to playing");
+ bus = gst_bus_new ();
+
+ /* initialize the buffer with something that is no mpeg2 */
+ tmpbuf = g_new (guint32, 4096);
+ for (i = 0; i < 4096; i++) {
+ tmpbuf[i] = i;
+ }
+ inbuffer = gst_buffer_new_wrapped (tmpbuf, 4096 * sizeof (guint32));
+
+ ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
+
+ gst_element_set_bus (mpg123audiodec, bus);
+
+ /* should be possible to push without problems but nothing gets decoded */
+ fail_unless_equals_int (gst_pad_push (mysrcpad, inbuffer), GST_FLOW_OK);
+
+ num_buffers = g_list_length (buffers);
+
+ /* should be 0 buffers as decoding should've been impossible */
+ fail_unless_equals_int (num_buffers, 0);
+
+ g_list_free (buffers);
+ buffers = NULL;
+
+ gst_bus_set_flushing (bus, TRUE);
+ gst_element_set_bus (mpg123audiodec, NULL);
+ gst_object_unref (GST_OBJECT (bus));
+ cleanup_mpg123audiodec (mpg123audiodec);
+ mpg123audiodec = NULL;
+}
+
+GST_END_TEST;
+
+
+static gboolean
+is_test_file_available (gchar const *filename)
+{
+ gboolean ret;
+ gchar *full_filename;
+ gchar *cwd;
+
+ cwd = g_get_current_dir ();
+ full_filename = g_build_filename (cwd, GST_TEST_FILES_PATH, filename, NULL);
+ ret =
+ g_file_test (full_filename, G_FILE_TEST_IS_REGULAR | G_FILE_TEST_EXISTS);
+ g_free (full_filename);
+ g_free (cwd);
+ return ret;
+}
+
+static Suite *
+mpg123audiodec_suite (void)
+{
+ GstRegistry *registry;
+ Suite *s = suite_create ("mpg123audiodec");
+ TCase *tc_chain = tcase_create ("general");
+
+ registry = gst_registry_get ();
+
+ suite_add_tcase (s, tc_chain);
+ if (gst_registry_check_feature_version (registry, "filesrc",
+ GST_VERSION_MAJOR, GST_VERSION_MINOR, 0) &&
+ gst_registry_check_feature_version (registry, "mpegaudioparse",
+ GST_VERSION_MAJOR, GST_VERSION_MINOR, 0) &&
+ gst_registry_check_feature_version (registry, "appsrc",
+ GST_VERSION_MAJOR, GST_VERSION_MINOR, 0)) {
+ if (is_test_file_available (MP2_STREAM_FILENAME))
+ tcase_add_test (tc_chain, test_decode_mpeg1layer2);
+ if (is_test_file_available (MP3_CBR_STREAM_FILENAME))
+ tcase_add_test (tc_chain, test_decode_mpeg1layer3_cbr);
+ if (is_test_file_available (MP3_VBR_STREAM_FILENAME))
+ tcase_add_test (tc_chain, test_decode_mpeg1layer3_vbr);
+ }
+ tcase_add_test (tc_chain, test_decode_garbage_mpeg1layer2);
+ tcase_add_test (tc_chain, test_decode_garbage_mpeg1layer3);
+
+ return s;
+}
+
+
+GST_CHECK_MAIN (mpg123audiodec)
diff --git a/tests/examples/Makefile.in b/tests/examples/Makefile.in
index f1f56df3..fc4fc69b 100644
--- a/tests/examples/Makefile.in
+++ b/tests/examples/Makefile.in
@@ -228,6 +228,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/tests/examples/camerabin2/Makefile.in b/tests/examples/camerabin2/Makefile.in
index 65b6cc03..92f1fc78 100644
--- a/tests/examples/camerabin2/Makefile.in
+++ b/tests/examples/camerabin2/Makefile.in
@@ -237,6 +237,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/tests/examples/directfb/Makefile.in b/tests/examples/directfb/Makefile.in
index 8fb506a3..c4d1f402 100644
--- a/tests/examples/directfb/Makefile.in
+++ b/tests/examples/directfb/Makefile.in
@@ -217,6 +217,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/tests/examples/mxf/Makefile.in b/tests/examples/mxf/Makefile.in
index 2402245b..5f9dedfe 100644
--- a/tests/examples/mxf/Makefile.in
+++ b/tests/examples/mxf/Makefile.in
@@ -222,6 +222,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/tests/examples/opencv/Makefile.in b/tests/examples/opencv/Makefile.in
index 31355149..55efecfc 100644
--- a/tests/examples/opencv/Makefile.in
+++ b/tests/examples/opencv/Makefile.in
@@ -223,6 +223,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/tests/examples/scaletempo/Makefile.in b/tests/examples/scaletempo/Makefile.in
index d6b4df28..ab71215d 100644
--- a/tests/examples/scaletempo/Makefile.in
+++ b/tests/examples/scaletempo/Makefile.in
@@ -223,6 +223,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
# FIXME 0.11: ignore GValueArray warnings for now until this is sorted
diff --git a/tests/examples/uvch264/Makefile.in b/tests/examples/uvch264/Makefile.in
index 7a465c73..209149bb 100644
--- a/tests/examples/uvch264/Makefile.in
+++ b/tests/examples/uvch264/Makefile.in
@@ -225,6 +225,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/tests/files/Makefile.am b/tests/files/Makefile.am
index 2cf37983..d46c18e9 100644
--- a/tests/files/Makefile.am
+++ b/tests/files/Makefile.am
@@ -1,2 +1,5 @@
EXTRA_DIST = \
- barcode.png
+ barcode.png \
+ cbr_stream.mp3 \
+ stream.mp2 \
+ vbr_stream.mp3
diff --git a/tests/files/Makefile.in b/tests/files/Makefile.in
index 074543b4..302719a2 100644
--- a/tests/files/Makefile.in
+++ b/tests/files/Makefile.in
@@ -183,6 +183,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
@@ -542,7 +544,10 @@ top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
EXTRA_DIST = \
- barcode.png
+ barcode.png \
+ cbr_stream.mp3 \
+ stream.mp2 \
+ vbr_stream.mp3
all: all-am
diff --git a/tests/files/cbr_stream.mp3 b/tests/files/cbr_stream.mp3
new file mode 100644
index 00000000..b1a5c439
--- /dev/null
+++ b/tests/files/cbr_stream.mp3
Binary files differ
diff --git a/tests/files/stream.mp2 b/tests/files/stream.mp2
new file mode 100644
index 00000000..ab6e900d
--- /dev/null
+++ b/tests/files/stream.mp2
Binary files differ
diff --git a/tests/files/vbr_stream.mp3 b/tests/files/vbr_stream.mp3
new file mode 100644
index 00000000..81fc38b5
--- /dev/null
+++ b/tests/files/vbr_stream.mp3
Binary files differ
diff --git a/tests/icles/Makefile.in b/tests/icles/Makefile.in
index b8988b97..2d2b1613 100644
--- a/tests/icles/Makefile.in
+++ b/tests/icles/Makefile.in
@@ -222,6 +222,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/tools/Makefile.in b/tools/Makefile.in
index df557463..c8eef123 100644
--- a/tools/Makefile.in
+++ b/tools/Makefile.in
@@ -183,6 +183,8 @@ DVDNAV_LIBS = @DVDNAV_LIBS@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
+EGLGLES_CFLAGS = @EGLGLES_CFLAGS@
+EGLGLES_LIBS = @EGLGLES_LIBS@
EGREP = @EGREP@
ERROR_CFLAGS = @ERROR_CFLAGS@
ERROR_CXXFLAGS = @ERROR_CXXFLAGS@
diff --git a/tools/gst-app-maker b/tools/gst-app-maker
index f9094421..d8f2f43b 100755
--- a/tools/gst-app-maker
+++ b/tools/gst-app-maker
@@ -220,7 +220,7 @@ gst_replace_create_pipeline_playbin (GstReplace *replace, const char *uri)
pipeline = gst_pipeline_new (NULL);
gst_bin_add (GST_BIN(pipeline),
- gst_element_factory_make ("playbin2", "source"));
+ gst_element_factory_make ("playbin", "source"));
if (error) {
g_print("pipeline parsing error: %s\n", error->message);
diff --git a/tools/gst-element-maker b/tools/gst-element-maker
index dc85c5f8..a28c4da7 100755
--- a/tools/gst-element-maker
+++ b/tools/gst-element-maker
@@ -189,7 +189,7 @@ done
cat <<EOF
- gst_element_class_set_metadata (element_class, "FIXME Long name",
+ gst_element_class_set_static_metadata (element_class, "FIXME Long name",
"Generic", "FIXME Description", "$REAL_NAME <$EMAIL_ADDRESS>");
}
diff --git a/win32/common/config.h b/win32/common/config.h
index af9e3509..3ce2ffbf 100644
--- a/win32/common/config.h
+++ b/win32/common/config.h
@@ -199,7 +199,7 @@
#undef USE_POISONING
/* Version number of package */
-#define VERSION "1.0.1"
+#define VERSION "1.0.2"
/* Define to 1 if your processor stores words with the most significant byte
first (like Motorola and SPARC, unlike Intel and VAX). */