aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian.droege@collabora.co.uk>2012-09-14 10:49:31 +0200
committerSebastian Dröge <sebastian.droege@collabora.co.uk>2012-09-14 10:49:31 +0200
commit5a155a05d15180794bd02b15b1f5f99766da3a51 (patch)
treef392fe6bce3bd747fc15fc4975a6f0adac3f89b7
parent63e92019fec98e462d68331ce3c8d9f9cb61f164 (diff)
Imported Upstream version 0.11.94upstream/0.11.94
-rw-r--r--COPYING4
-rw-r--r--COPYING.LIB4
-rw-r--r--ChangeLog4672
-rw-r--r--Makefile.in10
-rw-r--r--common/Makefile.in10
-rw-r--r--common/gtk-doc-plugins.mak3
-rw-r--r--common/gtk-doc.mak3
-rw-r--r--common/m4/Makefile.in10
-rw-r--r--common/m4/gtk-doc.m41
-rw-r--r--config.h.in12
-rwxr-xr-xconfigure744
-rw-r--r--configure.ac109
-rw-r--r--docs/Makefile.in10
-rw-r--r--docs/libs/Makefile.in13
-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-h264parser.html14
-rw-r--r--docs/libs/html/gst-plugins-bad-libs-mpegvideoparser.html10
-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.in13
-rw-r--r--docs/plugins/gst-plugins-bad-plugins.args618
-rw-r--r--docs/plugins/gst-plugins-bad-plugins.hierarchy62
-rw-r--r--docs/plugins/gst-plugins-bad-plugins.interfaces2
-rw-r--r--docs/plugins/html/ch01.html2
-rw-r--r--docs/plugins/html/ch02.html2
-rw-r--r--docs/plugins/html/ch03.html2
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-aiffmux.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-aiffparse.html6
-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-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-dccpclientsink.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-dccpclientsrc.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-dccpserversink.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-dccpserversrc.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-dfbvideosink.html4
-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-directdrawsink.html4
-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.html52
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-dvdspu.html8
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-edgedetect.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-exclusion.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-faac.html4
-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.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-freeze.html10
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-gaussianblur.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-ivfparse.html4
-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-katedec.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-kateenc.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-kateparse.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-katetag.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-mplex.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-mxfdemux.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-mxfmux.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-mythtvsrc.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-nuvdemux.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-opencvtextoverlay.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-pcapparse.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-pinch.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-aiff.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-assrender.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-audiovisualizers.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-autoconvert.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-bayer.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-bz2.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-cdaudio.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-cdxaparse.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-celt.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-coloreffects.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-curl.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-dataurisrc.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-dccp.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-debugutilsbad.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-dfbvideosink.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-dirac.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-directdraw.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-dtmf.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-dtsdec.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-dvb.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-dvdspu.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-faac.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-faad.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-fbdevsink.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-festival.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-filter.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-freeze.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-frei0r.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-gaudieffects.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-geometrictransform.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-gsm.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-ivfparse.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-jpegformat.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-kate.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-ladspa.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-liveadder.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-lv2.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-mimic.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-mms.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-modplug.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-mpeg2enc.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-mpeg4videoparse.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegdemux2.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegpsmux.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegtsmux.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-mplex.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-musepack.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-musicbrainz.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-mve.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-mxf.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-nas.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-neon.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-nsf.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-nuvdemux.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-opencv.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-pcapparse.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-rawparse.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-real.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-rfbsrc.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-rsvg.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-rtmp.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-rtpmux.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-scaletempo.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-sdl.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-sdp.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-shm.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-sndfile.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-soundtouch.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-spcdec.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-speed.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-stereo.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-swfdec.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-timidity.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-tta.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-vcdsrc.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-videosignal.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-vmnc.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-voaacenc.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-vp8.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-wildmidi.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-xvid.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-plugin-zbar.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-pyramidsegment.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-rsvgdec.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-rsvgoverlay.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-sdlaudiosink.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-sdlvideosink.html4
-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.html13
-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-stereo.html6
-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-tiger.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-timidity.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-trm.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-videoanalyse.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-videodetect.html6
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-videomark.html6
-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-vp8dec.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-vp8enc.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-wildmidi.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins-zbar.html4
-rw-r--r--docs/plugins/html/gst-plugins-bad-plugins.devhelp2498
-rw-r--r--docs/plugins/html/index.html2
-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.xml64
-rw-r--r--docs/plugins/inspect/plugin-celt.xml2
-rw-r--r--docs/plugins/inspect/plugin-chromaprint.xml8
-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.xml10
-rw-r--r--docs/plugins/inspect/plugin-dvbsuboverlay.xml2
-rw-r--r--docs/plugins/inspect/plugin-dvdspu.xml4
-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.xml8
-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-freeze.xml4
-rw-r--r--docs/plugins/inspect/plugin-gaudieffects.xml2
-rw-r--r--docs/plugins/inspect/plugin-gdp.xml55
-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.xml8
-rw-r--r--docs/plugins/inspect/plugin-id3tag.xml4
-rw-r--r--docs/plugins/inspect/plugin-inter.xml56
-rw-r--r--docs/plugins/inspect/plugin-interlace.xml8
-rw-r--r--docs/plugins/inspect/plugin-jpegformat.xml6
-rw-r--r--docs/plugins/inspect/plugin-kate.xml4
-rw-r--r--docs/plugins/inspect/plugin-liveadder.xml10
-rw-r--r--docs/plugins/inspect/plugin-mimic.xml8
-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-mpegdemux2.xml2
-rw-r--r--docs/plugins/inspect/plugin-mpegpsdemux.xml52
-rw-r--r--docs/plugins/inspect/plugin-mpegtsdemux.xml12
-rw-r--r--docs/plugins/inspect/plugin-mpegtsmux.xml6
-rw-r--r--docs/plugins/inspect/plugin-mpg123.xml34
-rw-r--r--docs/plugins/inspect/plugin-mplex.xml2
-rw-r--r--docs/plugins/inspect/plugin-opencv.xml75
-rw-r--r--docs/plugins/inspect/plugin-pcapparse.xml2
-rw-r--r--docs/plugins/inspect/plugin-pnm.xml8
-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.xml12
-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.xml6
-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.xml14
-rw-r--r--docs/plugins/inspect/plugin-spandsp.xml34
-rw-r--r--docs/plugins/inspect/plugin-speed.xml8
-rw-r--r--docs/plugins/inspect/plugin-videoparsersbad.xml4
-rw-r--r--docs/plugins/inspect/plugin-voaacenc.xml2
-rw-r--r--docs/plugins/inspect/plugin-voamrwbenc.xml34
-rw-r--r--docs/plugins/inspect/plugin-vp8.xml2
-rw-r--r--docs/plugins/inspect/plugin-waylandsink.xml28
-rw-r--r--docs/plugins/inspect/plugin-y4mdec.xml2
-rw-r--r--docs/plugins/inspect/plugin-zbar.xml2
-rw-r--r--ext/Makefile.in10
-rw-r--r--ext/apexsink/Makefile.in10
-rw-r--r--ext/assrender/Makefile.in10
-rw-r--r--ext/bz2/Makefile.in10
-rw-r--r--ext/cdaudio/Makefile.in10
-rw-r--r--ext/celt/Makefile.in10
-rw-r--r--ext/chromaprint/Makefile.in10
-rw-r--r--ext/cog/Makefile.in10
-rw-r--r--ext/curl/Makefile.in10
-rw-r--r--ext/dc1394/Makefile.in10
-rw-r--r--ext/dirac/Makefile.in10
-rw-r--r--ext/directfb/Makefile.in10
-rw-r--r--ext/dts/Makefile.in10
-rw-r--r--ext/faac/Makefile.in10
-rw-r--r--ext/faad/Makefile.in10
-rw-r--r--ext/flite/Makefile.in10
-rw-r--r--ext/flite/gstflitetestsrc.c3
-rw-r--r--ext/gme/Makefile.in10
-rw-r--r--ext/gsettings/Makefile.in10
-rw-r--r--ext/gsm/Makefile.in10
-rw-r--r--ext/jasper/Makefile.in10
-rw-r--r--ext/kate/Makefile.in10
-rw-r--r--ext/kate/gstkateenc.c2
-rw-r--r--ext/kate/gstkatespu.h2
-rw-r--r--ext/kate/gstkateutil.c2
-rw-r--r--ext/ladspa/Makefile.in10
-rw-r--r--ext/libmms/Makefile.in10
-rw-r--r--ext/lv2/Makefile.in10
-rw-r--r--ext/mimic/Makefile.in10
-rw-r--r--ext/modplug/Makefile.in10
-rw-r--r--ext/modplug/gstmodplug.cc3
-rw-r--r--ext/mpeg2enc/Makefile.in10
-rw-r--r--ext/mpg123/Makefile.in10
-rw-r--r--ext/mpg123/gstmpg123audiodec.c2
-rw-r--r--ext/mplex/Makefile.in10
-rw-r--r--ext/musepack/Makefile.in10
-rw-r--r--ext/musicbrainz/Makefile.in10
-rw-r--r--ext/mythtv/Makefile.in10
-rw-r--r--ext/mythtv/gstmythtvsrc.c6
-rw-r--r--ext/nas/Makefile.in10
-rw-r--r--ext/neon/Makefile.in10
-rw-r--r--ext/ofa/Makefile.in10
-rw-r--r--ext/openal/Makefile.in10
-rw-r--r--ext/opencv/Makefile.in10
-rw-r--r--ext/opencv/gstmotioncells.c4
-rw-r--r--ext/opus/Makefile.in10
-rw-r--r--ext/opus/gstopusdec.c2
-rw-r--r--ext/opus/gstopusenc.c38
-rw-r--r--ext/opus/gstopusenc.h2
-rw-r--r--ext/resindvd/Makefile.am15
-rw-r--r--ext/resindvd/Makefile.in78
-rw-r--r--ext/resindvd/gstmpegdefs.h75
-rw-r--r--ext/resindvd/gstmpegdemux.c853
-rw-r--r--ext/resindvd/gstmpegdemux.h30
-rw-r--r--ext/resindvd/gstpesfilter.c198
-rw-r--r--ext/resindvd/gstpesfilter.h28
-rw-r--r--ext/resindvd/plugin.c2
-rw-r--r--ext/resindvd/resindvdbin.c248
-rw-r--r--ext/resindvd/resindvdbin.h19
-rw-r--r--ext/resindvd/resindvdsrc.c140
-rw-r--r--ext/resindvd/rsnaudiomunge.c364
-rw-r--r--ext/resindvd/rsnaudiomunge.h61
-rw-r--r--ext/resindvd/rsndec.c36
-rw-r--r--ext/resindvd/rsninputselector.c1784
-rw-r--r--ext/resindvd/rsninputselector.h91
-rw-r--r--ext/resindvd/rsnparsetter.c402
-rw-r--r--ext/resindvd/rsnstreamselector.c769
-rw-r--r--ext/resindvd/rsnstreamselector.h63
-rw-r--r--ext/resindvd/rsnwrappedbuffer.c121
-rw-r--r--ext/rsvg/Makefile.in10
-rw-r--r--ext/rtmp/Makefile.in10
-rw-r--r--ext/schroedinger/Makefile.in10
-rw-r--r--ext/schroedinger/gstschrodec.c2
-rw-r--r--ext/schroedinger/gstschroenc.c124
-rw-r--r--ext/sdl/Makefile.in10
-rw-r--r--ext/sndfile/Makefile.in10
-rw-r--r--ext/sndio/Makefile.in10
-rw-r--r--ext/soundtouch/Makefile.in10
-rw-r--r--ext/soundtouch/gstpitch.cc45
-rw-r--r--ext/spandsp/Makefile.in10
-rw-r--r--ext/spandsp/gstspanplc.c178
-rw-r--r--ext/spandsp/gstspanplc.h1
-rw-r--r--ext/spc/Makefile.am2
-rw-r--r--ext/spc/Makefile.in12
-rw-r--r--ext/spc/gstspc.c180
-rw-r--r--ext/spc/tag.c6
-rw-r--r--ext/spc/tag.h1
-rw-r--r--ext/swfdec/Makefile.in10
-rw-r--r--ext/teletextdec/Makefile.in10
-rw-r--r--ext/timidity/Makefile.in10
-rw-r--r--ext/voaacenc/Makefile.in10
-rw-r--r--ext/voamrwbenc/Makefile.in10
-rw-r--r--ext/vp8/Makefile.am1
-rw-r--r--ext/vp8/Makefile.in11
-rw-r--r--ext/vp8/gstvp8dec.c35
-rw-r--r--ext/vp8/gstvp8dec.h1
-rw-r--r--ext/vp8/gstvp8enc.c4
-rw-r--r--ext/wayland/Makefile.am4
-rw-r--r--ext/wayland/Makefile.in25
-rw-r--r--ext/wayland/gstwaylandsink.c394
-rw-r--r--ext/wayland/gstwaylandsink.h41
-rw-r--r--ext/wayland/waylandpool.c311
-rw-r--r--ext/wayland/waylandpool.h79
-rw-r--r--ext/xvid/Makefile.in10
-rw-r--r--ext/zbar/Makefile.in10
-rw-r--r--gst-libs/Makefile.in10
-rw-r--r--gst-libs/gst/Makefile.in10
-rw-r--r--gst-libs/gst/basecamerabinsrc/Makefile.in10
-rw-r--r--gst-libs/gst/codecparsers/Makefile.in10
-rw-r--r--gst-libs/gst/codecparsers/gsth264parser.c38
-rw-r--r--gst-libs/gst/codecparsers/gsth264parser.h6
-rw-r--r--gst-libs/gst/codecparsers/gstmpegvideoparser.c294
-rw-r--r--gst-libs/gst/codecparsers/gstmpegvideoparser.h35
-rw-r--r--gst-libs/gst/codecparsers/gstvc1parser.c7
-rw-r--r--gst-libs/gst/interfaces/Makefile.in10
-rw-r--r--gst-libs/gst/signalprocessor/Makefile.in10
-rw-r--r--gst-libs/gst/video/Makefile.in10
-rw-r--r--gst-plugins-bad.doap10
-rw-r--r--gst-plugins-bad.spec2
-rw-r--r--gst/Makefile.in10
-rw-r--r--gst/adpcmdec/Makefile.in10
-rw-r--r--gst/adpcmenc/Makefile.in10
-rw-r--r--gst/aiff/Makefile.in10
-rw-r--r--gst/asfmux/Makefile.in10
-rw-r--r--gst/asfmux/gstasfmux.c2
-rw-r--r--gst/asfmux/gstasfparse.c3
-rw-r--r--gst/audiovisualizers/Makefile.in10
-rw-r--r--gst/audiovisualizers/README10
-rw-r--r--gst/audiovisualizers/gstaudiovisualizer.c424
-rw-r--r--gst/audiovisualizers/gstaudiovisualizer.h16
-rw-r--r--gst/audiovisualizers/gstspacescope.c28
-rw-r--r--gst/audiovisualizers/gstspectrascope.c20
-rw-r--r--gst/audiovisualizers/gstsynaescope.c16
-rw-r--r--gst/audiovisualizers/gstwavescope.c28
-rw-r--r--gst/autoconvert/Makefile.in10
-rw-r--r--gst/autoconvert/gstautoconvert.c54
-rw-r--r--gst/bayer/Makefile.in10
-rw-r--r--gst/camerabin2/Makefile.in10
-rw-r--r--gst/camerabin2/gstcamerabin2.c36
-rw-r--r--gst/camerabin2/gstwrappercamerabinsrc.c17
-rw-r--r--gst/cdxaparse/Makefile.in10
-rw-r--r--gst/coloreffects/Makefile.in10
-rw-r--r--gst/dataurisrc/Makefile.in10
-rw-r--r--gst/dccp/Makefile.in10
-rw-r--r--gst/debugutils/Makefile.in10
-rw-r--r--gst/debugutils/gstcompare.c4
-rw-r--r--gst/dtmf/Makefile.in10
-rw-r--r--gst/dtmf/gstdtmfsrc.c2
-rw-r--r--gst/dtmf/gstrtpdtmfdepay.c2
-rw-r--r--gst/dvbsuboverlay/Makefile.in10
-rw-r--r--gst/dvbsuboverlay/gstdvbsuboverlay.c38
-rw-r--r--gst/dvdspu/Makefile.in10
-rw-r--r--gst/dvdspu/gstdvdspu.c72
-rw-r--r--gst/faceoverlay/Makefile.in10
-rw-r--r--gst/festival/Makefile.in10
-rw-r--r--gst/festival/gstfestival.c2
-rw-r--r--gst/fieldanalysis/Makefile.in10
-rw-r--r--gst/freeverb/Makefile.in10
-rw-r--r--gst/freeze/Makefile.in10
-rw-r--r--gst/freeze/gstfreeze.c230
-rw-r--r--gst/freeze/gstfreeze.h12
-rw-r--r--gst/frei0r/Makefile.in10
-rw-r--r--gst/frei0r/gstfrei0rmixer.c6
-rw-r--r--gst/gaudieffects/Makefile.in10
-rw-r--r--gst/gdp/Makefile.am32
-rw-r--r--gst/gdp/Makefile.in990
-rw-r--r--gst/gdp/README22
-rw-r--r--gst/gdp/dataprotocol.c742
-rw-r--r--gst/gdp/dataprotocol.h174
-rw-r--r--gst/gdp/dp-private.h53
-rw-r--r--gst/gdp/gstgdp.c46
-rw-r--r--gst/gdp/gstgdpdepay.c479
-rw-r--r--gst/gdp/gstgdpdepay.h82
-rw-r--r--gst/gdp/gstgdppay.c864
-rw-r--r--gst/gdp/gstgdppay.h81
-rw-r--r--gst/geometrictransform/Makefile.in10
-rw-r--r--gst/hdvparse/Makefile.in10
-rw-r--r--gst/hls/Makefile.am17
-rw-r--r--gst/hls/Makefile.in30
-rw-r--r--gst/hls/gstfragmentedplugin.c9
-rw-r--r--gst/hls/gsthlsdemux.c3
-rw-r--r--gst/id3tag/Makefile.in10
-rw-r--r--gst/id3tag/gstid3mux.c37
-rw-r--r--gst/id3tag/id3tag.c165
-rw-r--r--gst/inter/Makefile.in10
-rw-r--r--gst/inter/gstinteraudiosink.c150
-rw-r--r--gst/inter/gstinteraudiosrc.c222
-rw-r--r--gst/inter/gstintersubsink.c148
-rw-r--r--gst/inter/gstintersubsrc.c242
-rw-r--r--gst/inter/gstintertest.c3
-rw-r--r--gst/inter/gstintervideosink.c141
-rw-r--r--gst/inter/gstintervideosrc.c267
-rw-r--r--gst/inter/gstintervideosrc.h6
-rw-r--r--gst/interlace/Makefile.in10
-rw-r--r--gst/ivfparse/Makefile.in10
-rw-r--r--gst/jp2kdecimator/Makefile.in10
-rw-r--r--gst/jpegformat/Makefile.am8
-rw-r--r--gst/jpegformat/Makefile.in18
-rw-r--r--gst/jpegformat/gstjifmux.c65
-rw-r--r--gst/jpegformat/gstjpegparse.c83
-rw-r--r--gst/librfb/Makefile.in10
-rw-r--r--gst/liveadder/Makefile.in10
-rw-r--r--gst/liveadder/liveadder.c429
-rw-r--r--gst/liveadder/liveadder.h23
-rw-r--r--gst/mpegdemux/Makefile.in10
-rw-r--r--gst/mpegdemux/gstmpegdemux.c111
-rw-r--r--gst/mpegdemux/gstmpegdemux.h3
-rw-r--r--gst/mpegpsmux/Makefile.in10
-rw-r--r--gst/mpegpsmux/mpegpsmux.c2
-rw-r--r--gst/mpegtsdemux/Makefile.in10
-rw-r--r--gst/mpegtsdemux/gstmpegdesc.h12
-rw-r--r--gst/mpegtsdemux/mpegtsbase.c25
-rw-r--r--gst/mpegtsdemux/mpegtsbase.h23
-rw-r--r--gst/mpegtsdemux/mpegtspacketizer.c1011
-rw-r--r--gst/mpegtsdemux/mpegtspacketizer.h71
-rw-r--r--gst/mpegtsdemux/mpegtsparse.c11
-rw-r--r--gst/mpegtsdemux/mpegtsparse.h4
-rw-r--r--gst/mpegtsdemux/pesparse.h5
-rw-r--r--gst/mpegtsdemux/tsdemux.c104
-rw-r--r--gst/mpegtsdemux/tsdemux.h4
-rw-r--r--gst/mpegtsmux/Makefile.in10
-rw-r--r--gst/mpegtsmux/mpegtsmux.c2
-rw-r--r--gst/mpegtsmux/tsmux/Makefile.in10
-rw-r--r--gst/mve/Makefile.in10
-rw-r--r--gst/mxf/Makefile.in10
-rw-r--r--gst/mxf/mxfmux.c44
-rw-r--r--gst/nsf/Makefile.in10
-rw-r--r--gst/nuvdemux/Makefile.in10
-rw-r--r--gst/patchdetect/Makefile.in10
-rw-r--r--gst/pcapparse/Makefile.in10
-rw-r--r--gst/pnm/Makefile.in10
-rw-r--r--gst/pnm/gstpnmdec.c123
-rw-r--r--gst/pnm/gstpnmdec.h2
-rw-r--r--gst/pnm/gstpnmenc.c118
-rw-r--r--gst/pnm/gstpnmenc.h4
-rw-r--r--gst/rawparse/Makefile.in10
-rw-r--r--gst/rawparse/gstrawparse.c3
-rw-r--r--gst/real/Makefile.in10
-rw-r--r--gst/removesilence/Makefile.in10
-rw-r--r--gst/rtpmux/Makefile.in10
-rw-r--r--gst/rtpmux/gstrtpmux.c24
-rw-r--r--gst/rtpvp8/Makefile.in10
-rw-r--r--gst/scaletempo/Makefile.in10
-rw-r--r--gst/sdi/Makefile.in10
-rw-r--r--gst/sdp/Makefile.in10
-rw-r--r--gst/segmentclip/Makefile.in10
-rw-r--r--gst/segmentclip/gstsegmentclip.c2
-rw-r--r--gst/siren/Makefile.in10
-rw-r--r--gst/siren/gstsirendec.c88
-rw-r--r--gst/siren/gstsirenenc.c65
-rw-r--r--gst/smooth/Makefile.in10
-rw-r--r--gst/speed/Makefile.am2
-rw-r--r--gst/speed/Makefile.in12
-rw-r--r--gst/speed/gstspeed.c344
-rw-r--r--gst/speed/gstspeed.h12
-rw-r--r--gst/stereo/Makefile.in10
-rw-r--r--gst/subenc/Makefile.in10
-rw-r--r--gst/tta/Makefile.in10
-rw-r--r--gst/tta/filters.h2
-rw-r--r--gst/videofilters/Makefile.in10
-rw-r--r--gst/videomeasure/Makefile.in10
-rw-r--r--gst/videomeasure/gstvideomeasure_ssim.c3
-rw-r--r--gst/videoparsers/Makefile.in10
-rw-r--r--gst/videoparsers/gstdiracparse.c49
-rw-r--r--gst/videoparsers/gsth264parse.c11
-rw-r--r--gst/videoparsers/gstmpeg4videoparse.c61
-rw-r--r--gst/videoparsers/gstmpeg4videoparse.h1
-rw-r--r--gst/videoparsers/gstmpegvideoparse.c73
-rw-r--r--gst/videoparsers/gstmpegvideoparse.h11
-rw-r--r--gst/videosignal/Makefile.in10
-rw-r--r--gst/vmnc/Makefile.in10
-rw-r--r--gst/y4m/Makefile.in10
-rw-r--r--m4/Makefile.in10
-rw-r--r--pkgconfig/Makefile.in10
-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.pot22
-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.am10
-rw-r--r--sys/Makefile.in16
-rw-r--r--sys/acmenc/Makefile.in10
-rw-r--r--sys/acmmp3dec/Makefile.in10
-rw-r--r--sys/applemedia/Makefile.in10
-rw-r--r--sys/avc/Makefile.in10
-rw-r--r--sys/d3dvideosink/Makefile.in10
-rw-r--r--sys/d3dvideosink/d3dvideosink.c14
-rw-r--r--sys/d3dvideosink/d3dvideosink.h10
-rw-r--r--sys/d3dvideosink/directx/dx.c6
-rw-r--r--sys/decklink/Makefile.in10
-rw-r--r--sys/decklink/gstdecklinksink.cpp5
-rw-r--r--sys/directdraw/Makefile.in10
-rw-r--r--sys/directsound/Makefile.in10
-rw-r--r--sys/dshowdecwrapper/Makefile.in10
-rw-r--r--sys/dshowsrcwrapper/Makefile.in10
-rw-r--r--sys/dshowvideosink/Makefile.in10
-rw-r--r--sys/dvb/Makefile.in10
-rw-r--r--sys/dvb/camconditionalaccess.c44
-rw-r--r--sys/dvb/camdevice.c29
-rw-r--r--sys/dvb/dvbbasebin.c192
-rw-r--r--sys/dvb/dvbbasebin.h7
-rw-r--r--sys/dvb/gstdvbsrc.c27
-rw-r--r--sys/dvb/gstdvbsrc.h106
-rw-r--r--sys/fbdev/Makefile.in10
-rw-r--r--sys/linsys/Makefile.in10
-rw-r--r--sys/osxvideo/Makefile.in10
-rw-r--r--sys/pvr2d/Makefile.in10
-rw-r--r--sys/qtwrapper/Makefile.in10
-rw-r--r--sys/shm/Makefile.am4
-rw-r--r--sys/shm/Makefile.in62
-rw-r--r--sys/uvch264/Makefile.am34
-rw-r--r--sys/uvch264/Makefile.in995
-rw-r--r--sys/uvch264/gstuvch264.c50
-rw-r--r--sys/uvch264/gstuvch264_mjpgdemux.c723
-rw-r--r--sys/uvch264/gstuvch264_mjpgdemux.h66
-rw-r--r--sys/uvch264/gstuvch264_src.c3141
-rw-r--r--sys/uvch264/gstuvch264_src.h162
-rw-r--r--sys/uvch264/uvc_h264.c122
-rw-r--r--sys/uvch264/uvc_h264.h335
-rw-r--r--sys/vcd/Makefile.in10
-rw-r--r--sys/vdpau/Makefile.in10
-rw-r--r--sys/vdpau/basevideodecoder/Makefile.in10
-rw-r--r--sys/vdpau/gstvdp/Makefile.in10
-rw-r--r--sys/wasapi/Makefile.in10
-rw-r--r--sys/wininet/Makefile.in10
-rw-r--r--sys/winks/Makefile.in10
-rw-r--r--sys/winscreencap/Makefile.in10
-rw-r--r--tests/Makefile.in10
-rw-r--r--tests/check/Makefile.am37
-rw-r--r--tests/check/Makefile.in203
-rw-r--r--tests/check/elements/autoconvert.c54
-rw-r--r--tests/check/elements/camerabin.c18
-rw-r--r--tests/check/elements/gdpdepay.c399
-rw-r--r--tests/check/elements/gdppay.c571
-rw-r--r--tests/check/elements/jifmux.c8
-rw-r--r--tests/check/elements/jpegparse.c2
-rw-r--r--tests/check/elements/kate.c2
-rw-r--r--tests/check/elements/mpeg2enc.c24
-rw-r--r--tests/check/elements/mpegtsmux.c2
-rw-r--r--tests/check/elements/mplex.c24
-rw-r--r--tests/check/elements/mxfdemux.c5
-rw-r--r--tests/check/elements/mxfmux.c5
-rw-r--r--tests/check/elements/opus.c5
-rw-r--r--tests/check/elements/parser.c2
-rw-r--r--tests/check/elements/rtpmux.c10
-rw-r--r--tests/check/elements/uvch264demux.c696
-rw-r--r--tests/check/elements/uvch264demux_data/valid_h264_jpg.h264bin0 -> 5297 bytes
-rw-r--r--tests/check/elements/uvch264demux_data/valid_h264_jpg.jpgbin0 -> 10690 bytes
-rw-r--r--tests/check/elements/uvch264demux_data/valid_h264_jpg.mjpgbin0 -> 16017 bytes
-rw-r--r--tests/check/elements/uvch264demux_data/valid_h264_yuy2.h264bin0 -> 5607 bytes
-rw-r--r--tests/check/elements/uvch264demux_data/valid_h264_yuy2.mjpgbin0 -> 34477 bytes
-rw-r--r--tests/check/elements/uvch264demux_data/valid_h264_yuy2.yuy21
-rw-r--r--tests/check/libs/mpegvideoparser.c4
-rw-r--r--tests/check/pipelines/mxf.c5
-rw-r--r--tests/check/pipelines/streamheader.c279
-rw-r--r--tests/examples/Makefile.am10
-rw-r--r--tests/examples/Makefile.in16
-rw-r--r--tests/examples/camerabin2/Makefile.in10
-rw-r--r--tests/examples/camerabin2/gst-camerabin2-test.c10
-rw-r--r--tests/examples/directfb/Makefile.in10
-rw-r--r--tests/examples/mxf/Makefile.in10
-rw-r--r--tests/examples/opencv/Makefile.in10
-rw-r--r--tests/examples/scaletempo/Makefile.in10
-rw-r--r--tests/examples/uvch264/Makefile.am36
-rw-r--r--tests/examples/uvch264/Makefile.in916
-rw-r--r--tests/examples/uvch264/boolean_property.glade94
-rw-r--r--tests/examples/uvch264/enum_property.glade88
-rw-r--r--tests/examples/uvch264/int_property.glade147
-rw-r--r--tests/examples/uvch264/test-uvch264.c673
-rw-r--r--tests/examples/uvch264/window.glade345
-rw-r--r--tests/files/Makefile.in10
-rw-r--r--tests/icles/Makefile.in10
-rw-r--r--tools/Makefile.in10
-rw-r--r--win32/common/config.h2
738 files changed, 29597 insertions, 7760 deletions
diff --git a/COPYING b/COPYING
index 60549be5..e2126421 100644
--- a/COPYING
+++ b/COPYING
@@ -2,7 +2,7 @@
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
@@ -305,7 +305,7 @@ the "copyright" line and a pointer to where the full notice is found.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Also add information on how to contact you by electronic and paper mail.
diff --git a/COPYING.LIB b/COPYING.LIB
index eb685a5e..14cf986d 100644
--- a/COPYING.LIB
+++ b/COPYING.LIB
@@ -2,7 +2,7 @@
Version 2, June 1991
Copyright (C) 1991 Free Software Foundation, Inc.
- 675 Mass Ave, Cambridge, MA 02139, USA
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
@@ -464,7 +464,7 @@ convey the exclusion of warranty; and each file should have at least the
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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
diff --git a/ChangeLog b/ChangeLog
index 611e5750..c405ae72 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,9 +1,4677 @@
+2012-09-14 02:06:48 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * docs/plugins/gst-plugins-bad-plugins.args:
+ * docs/plugins/gst-plugins-bad-plugins.hierarchy:
+ * docs/plugins/gst-plugins-bad-plugins.interfaces:
+ * 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-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-freeze.xml:
+ * docs/plugins/inspect/plugin-gaudieffects.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-mpegtsdemux.xml:
+ * docs/plugins/inspect/plugin-mpegtsmux.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-speed.xml:
+ * docs/plugins/inspect/plugin-videoparsersbad.xml:
+ * docs/plugins/inspect/plugin-voaacenc.xml:
+ * docs/plugins/inspect/plugin-vp8.xml:
+ * docs/plugins/inspect/plugin-y4mdec.xml:
+ * docs/plugins/inspect/plugin-zbar.xml:
+ docs: update docs
+
+2012-09-13 13:44:05 -0700 Jan Schmidt <thaytan@noraisin.net>
+
+ * tests/check/elements/parser.c:
+ check: Verify the DTS emerging from the parser, not PTS
+ PTS doesn't increment linearly in parsers with frame re-ordering, but
+ DTS does. Verify that instead.
+
+2012-09-13 13:34:16 -0700 Jan Schmidt <thaytan@noraisin.net>
+
+ * tests/check/libs/mpegvideoparser.c:
+ check: Fix mpegvideoparser PAR expectation
+ The parser (correctly) now interprets the test header using
+ MPEG-1 semantics, so fix the test expectation.
+
+2012-09-13 15:51:02 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * gst/inter/gstintervideosrc.c:
+ interaudiosrc: Make caps writable in fixate
+
+2012-09-13 15:06:52 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * configure.ac:
+ * gst/inter/gstinteraudiosink.c:
+ * gst/inter/gstinteraudiosrc.c:
+ * gst/inter/gstintersubsink.c:
+ * gst/inter/gstintersubsrc.c:
+ * gst/inter/gstintertest.c:
+ * gst/inter/gstintervideosink.c:
+ * gst/inter/gstintervideosrc.c:
+ * gst/inter/gstintervideosrc.h:
+ inter: Port to 1.0 API
+ Also remove a lot of empty, non-implemented methods
+
+2012-09-12 22:58:04 -0700 Jan Schmidt <thaytan@noraisin.net>
+
+ * gst/videoparsers/gstdiracparse.c:
+ * gst/videoparsers/gsth264parse.c:
+ * gst/videoparsers/gstmpeg4videoparse.c:
+ * gst/videoparsers/gstmpegvideoparse.c:
+ videoparsers: Disable PTS interpolation in the base parse class
+ All these formats have re-ordered PTS which the base class gets
+ wrong. It's better to leave them blank and let the decoder sort it
+ out. Better yet would be to track and interpolate the timestamps
+ in the subclasses (FIXME)
+
+2012-09-09 16:40:00 -0700 Jan Schmidt <thaytan@noraisin.net>
+
+ * gst/dvdspu/gstdvdspu.c:
+ dvdspu: Advance video stream with gap events.
+ Handle Gap events the way we used to handle segment updates
+ and advance/fill in the video stream accordingly. Fixes
+ 'still' menus which aren't DVD still frames, but are just a
+ single frame with accompanying audio.
+
+2012-09-09 16:29:52 -0700 Jan Schmidt <thaytan@noraisin.net>
+
+ * ext/resindvd/resindvdbin.c:
+ * ext/resindvd/resindvdbin.h:
+ resindvd: Start with a larger subpicture queue for preroll.
+ Shrink the queue once we're prerolled. Fixes the Fringe S1
+ DVD. Also, ensure we only fire no_more_pads once.
+
+2012-09-08 19:21:47 -0700 Jan Schmidt <thaytan@noraisin.net>
+
+ * ext/resindvd/resindvdbin.c:
+ resindvd: Disable input-selector syncing
+ Until segments are better worked out. Also, use
+ internal input-selector for audio as well
+
+2012-09-03 09:47:30 -0700 Jan Schmidt <thaytan@noraisin.net>
+
+ * gst-libs/gst/codecparsers/gstmpegvideoparser.c:
+ * gst-libs/gst/codecparsers/gstmpegvideoparser.h:
+ * gst/videoparsers/gstmpegvideoparse.c:
+ * gst/videoparsers/gstmpegvideoparse.h:
+ mpegvideoparse: Handle Sequence Display Extension
+ Change the way the pixel-aspect-ratio is computed by
+ interpreting the sequence header aspect ratio info
+ as MPEG-1 values until a sequence extension or
+ sequence display extension is seen, and then updating
+ the sequence header struct accordingly.
+ Fixes incorrect anamorphic display on some MPEG-2 (DVD)
+ sequences.
+
+2012-09-13 01:40:42 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * tests/check/pipelines/mxf.c:
+ tests: disable yet another mxf tests until the elements are ported
+
+2012-09-13 01:34:45 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * ext/flite/gstflitetestsrc.c:
+ flitetestsrc: fix caps fixation
+ Make caps writable before changing them.
+
+2012-09-13 01:26:28 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * gst/segmentclip/gstsegmentclip.c:
+ segmentclip: fix wrong pad template unref
+ Blows up when trying to instantiate a second clip element
+ of the same type, like in the generic/states unit test.
+
+2012-09-13 01:07:46 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * ext/wayland/gstwaylandsink.c:
+ waylandsink: fail gracefully with an error message if we can't connect to wayland
+ g_return_val_if_fail() is not for error handling, it's for
+ catching programming errors in public API.
+ Fixes problem with generic/states unit test.
+
+2012-09-13 00:59:33 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * gst/siren/gstsirendec.c:
+ * gst/siren/gstsirenenc.c:
+ siren: init debug category before logging anything
+
+2012-09-13 00:55:28 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * tests/check/elements/mxfdemux.c:
+ * tests/check/elements/mxfmux.c:
+ tests: skip mxf tests while elements haven't been ported yet
+
+2012-09-13 00:50:04 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * ext/schroedinger/gstschroenc.c:
+ schroenc: remove GST_ERROR statement that was committed by accident
+
+2012-09-13 00:40:44 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * tests/check/elements/jifmux.c:
+ tests: fix jifmux test
+ Need to pass a GstSample now for GST_TAG_APPLICATION_DATA
+ instead of a GstBuffer.
+
+2012-09-12 18:34:03 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * configure.ac:
+ * gst/pnm/gstpnmdec.c:
+ * gst/pnm/gstpnmdec.h:
+ * gst/pnm/gstpnmenc.c:
+ * gst/pnm/gstpnmenc.h:
+ pnm: Port to 1.0 API
+
+2012-09-12 17:34:03 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * gst/freeze/gstfreeze.c:
+ * gst/freeze/gstfreeze.h:
+ freeze: Use a GPtrArray instead of a GQueue
+ This way, the most common function (changing buffers) becomes O(1) instead
+ of O(n)
+
+2012-09-12 17:24:26 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * configure.ac:
+ * gst/freeze/gstfreeze.c:
+ * gst/freeze/gstfreeze.h:
+ freeze: Port to 1.0 API
+
+2012-09-12 16:23:47 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * gst/speed/gstspeed.c:
+ * gst/speed/gstspeed.h:
+ speed: Various 1.0 style additions
+ Use GstAudioInfo everywhere, etc
+
+2012-09-10 17:16:07 +0300 Sreerenj Balachandran <sreerenj.balachandran@intel.com>
+
+ * configure.ac:
+ * gst/speed/Makefile.am:
+ * gst/speed/gstspeed.c:
+ speed: port to 0.11
+ https://bugzilla.gnome.org/show_bug.cgi?id=683727
+
+2012-09-12 16:03:06 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * configure.ac:
+ * gst/liveadder/liveadder.c:
+ * gst/liveadder/liveadder.h:
+ liveadder: port to 1.0 API
+
+2012-09-12 21:13:35 +0200 Stefan Sauer <ensonic@users.sf.net>
+
+ * gst/asfmux/gstasfmux.c:
+ * gst/debugutils/gstcompare.c:
+ * gst/frei0r/gstfrei0rmixer.c:
+ * gst/mpegpsmux/mpegpsmux.c:
+ * gst/mpegtsmux/mpegtsmux.c:
+ * gst/mxf/mxfmux.c:
+ * gst/videomeasure/gstvideomeasure_ssim.c:
+ collectpads: remove gst_collect_pads_add_pad_full
+ Rename gst_collect_pads_add_pad_full() to gst_collect_pads_add_pad() and fix all
+ invocations.
+
+2012-09-12 12:14:53 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * configure.ac:
+ * gst/siren/gstsirendec.c:
+ * gst/siren/gstsirenenc.c:
+ siren: Port to 1.0 API
+
+2012-09-12 15:08:01 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * gst/dvbsuboverlay/gstdvbsuboverlay.c:
+ dvbsuboverlay: Use default query handlers where needed
+ And fixup getcaps handler while I'm at it
+
+2012-09-12 09:42:09 -0300 Thiago Santos <thiago.sousa.santos@collabora.com>
+
+ * gst/camerabin2/gstcamerabin2.c:
+ camerabin: port tagsetter mode setting code
+ Check directly with GST_IS_TAG_SETTER instead of using the
+ deprecated GstImplementsInterface
+ Fixes the image tag setting unit test
+
+2012-09-12 13:03:28 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * tests/check/pipelines/streamheader.c:
+ tests: fix win32 build even more
+
+2012-09-12 13:17:03 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * tests/check/elements/mpegtsmux.c:
+ tests: mpegtsmux: port to the new GLib thread API
+
+2012-09-12 11:08:25 +0200 Gwenole Beauchesne <gwenole.beauchesne@intel.com>
+
+ * gst-libs/gst/codecparsers/gstvc1parser.c:
+ codecparsers: vc1: fix aspect ratio calculation.
+ ASPECT_HORIZ_SIZE and ASPECT_VERT_SIZE are syntax elements that hold
+ binary encodings of sizes ranging from 1 to 256. Thus, the calculated
+ pixel-aspect-ratio was off by one.
+ Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
+ https://bugzilla.gnome.org/show_bug.cgi?id=683858
+
+2012-09-12 11:01:34 +0200 Gwenole Beauchesne <gwenole.beauchesne@intel.com>
+
+ * gst-libs/gst/codecparsers/gsth264parser.c:
+ * gst-libs/gst/codecparsers/gsth264parser.h:
+ * gst/videoparsers/gsth264parse.c:
+ codecparsers: h264parse: don't use anonymous unions.
+ Anonymous union is an ISO C (2011) feature that is not exposed in
+ compilers strictly conforming to the previous standard.
+ Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
+
+2012-09-12 11:21:41 +0200 Gwenole Beauchesne <gwenole.beauchesne@intel.com>
+
+ * gst-libs/gst/codecparsers/gsth264parser.c:
+ * gst-libs/gst/codecparsers/gsth264parser.h:
+ codecparsers: h264: compute pixel aspect ratio.
+ Signed-off-by: Simon Farnsworth <simon.farnsworth@onelan.co.uk>
+ Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
+
+2012-09-12 09:48:47 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * tests/check/pipelines/streamheader.c:
+ tests: attempt to get disabled streamheader test to compile on win32
+ Though it probably won't work, but then it's disabled.
+
+2012-09-12 09:10:35 +0200 Peter Korsgaard <jacmet@sunsite.dk>
+
+ * ext/opus/gstopusdec.c:
+ * ext/opus/gstopusenc.c:
+ * gst/jpegformat/gstjpegparse.c:
+ opus + jpegformat: unbreak non-debug build
+ opus + jpegformat plugin builds fail when gstreamer is configured with
+ --disable-gst-debug as they are checking the GST_DISABLE_DEBUG symbol
+ instead of GST_DISABLE_GST_DEBUG.
+ Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
+ https://bugzilla.gnome.org/show_bug.cgi?id=683850
+
+2012-09-12 01:35:42 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * gst/jpegformat/Makefile.am:
+ jpegformat: don't link to libgstinterfaces which doesn't exist any longer
+
+2012-09-11 20:30:55 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * ext/spandsp/gstspanplc.c:
+ spanplc: Don't unref too much, don't forward gap event
+
+2012-09-11 20:19:48 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * configure.ac:
+ * ext/spandsp/gstspanplc.c:
+ * ext/spandsp/gstspanplc.h:
+ spanplc: Port to 1.0 API
+
+2012-09-11 19:41:31 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * gst/audiovisualizers/gstaudiovisualizer.c:
+ audiovisualizer: Don't try to sync controller values to invalid timestamp
+
+2012-09-11 19:36:24 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * configure.ac:
+ * gst/jpegformat/gstjifmux.c:
+ * gst/jpegformat/gstjpegparse.c:
+ * tests/check/elements/jpegparse.c:
+ jpegparse: Finish port to 1.0 API
+
+2012-09-11 18:55:11 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * tests/check/elements/autoconvert.c:
+ test: Simplify autoconvert test
+
+2012-09-11 18:53:43 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * gst/autoconvert/gstautoconvert.c:
+ autoconvert: Look at all possibilities for accept-caps even if there is a selected subelement
+ If the accept-caps succeeds with a different subelement, then the subsequent
+ caps event will change the current subelement.
+
+2012-09-11 18:02:28 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * tests/check/elements/opus.c:
+ test: Flush opus encoder between tests
+
+2012-09-11 18:01:58 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * tests/check/elements/opus.c:
+ test: Flush opus encoder between tests
+
+2012-09-10 18:20:48 -0400 Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+ * configure.ac:
+ * sys/uvch264/gstuvch264_src.c:
+ * sys/uvch264/gstuvch264_src.h:
+ uvch264: Make gudev/libusb a hard dependency and remove XU_FIND_UNIT ioctl support
+ Conflicts:
+ sys/uvch264/gstuvch264_src.c
+
+2012-09-11 17:47:16 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/modplug/gstmodplug.cc:
+ * ext/resindvd/gstmpegdemux.c:
+ * gst/asfmux/gstasfparse.c:
+ * gst/mpegdemux/gstmpegdemux.c:
+ * gst/mpegtsdemux/mpegtsbase.c:
+ * gst/rawparse/gstrawparse.c:
+ ext, gst: only activate in pull mode if upstream is seekable
+
+2012-09-11 15:07:02 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/festival/gstfestival.c:
+ festival: timed text is text/x-raw now
+
+2012-09-11 15:02:00 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * sys/d3dvideosink/d3dvideosink.c:
+ * sys/d3dvideosink/d3dvideosink.h:
+ * sys/d3dvideosink/directx/dx.c:
+ d3dvideosink: port to the new GLib thread API
+
+2012-09-11 14:32:04 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * tests/check/elements/mpeg2enc.c:
+ * tests/check/elements/mplex.c:
+ tests: mpeg2enc, mplex: port to the new GLib thread API
+
+2012-09-11 14:31:49 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/opus/gstopusenc.c:
+ * ext/opus/gstopusenc.h:
+ opusenc: port to the new GLib thread API
+
+2012-09-11 01:52:46 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * configure.ac:
+ * tests/check/Makefile.am:
+ * tests/check/pipelines/.gitignore:
+ gdp: move gdp plugin here from -base
+ Needs some reworking.
+
+2012-09-09 18:05:55 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * gst/gdp/dataprotocol.c:
+ gdp: dump bytes into debug log using GST_MEMDUMP
+ Instead of home-grown solution.
+
+2012-07-27 15:21:51 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/gdp/dataprotocol.c:
+ update for new variable names
+
+2012-07-02 12:52:17 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * tests/check/pipelines/streamheader.c:
+ tests: use multifdsink for streamheader test
+ Use multifdsink for pipes instead of multisocketsink,
+ to avoid "creating GSocket from fd 9: Socket operation
+ on non-socket "criticals from Gio. Test still fails,
+ but it fails in a different way now.
+
+2012-04-25 18:07:21 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/gdp/gstgdppay.c:
+ gdppay: plug buffer leak
+
+2012-04-19 14:41:40 +0200 Stefan Sauer <ensonic@users.sf.net>
+
+ * tests/check/pipelines/streamheader.c:
+ tests: initialize variables
+
+2012-04-10 00:45:16 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/gdp/gstgdpdepay.c:
+ * gst/gdp/gstgdppay.c:
+ Use new gst_element_class_set_static_metadata()
+
+2012-04-05 15:11:05 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * gst/gdp/gstgdp.c:
+ gst: Update for GST_PLUGIN_DEFINE() API change
+
+2012-04-01 18:11:23 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/gdp/gstgdppay.c:
+ Improve buffer allocation of wrapped memory
+
+2012-03-30 18:12:39 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/gdp/gstgdppay.c:
+ update for buffer api change
+
+2012-03-28 12:48:55 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/gdp/gstgdppay.c:
+ update for buffer changes
+
+2012-03-15 13:32:08 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/gdp/dataprotocol.c:
+ update for memory api changes
+
+2012-02-22 02:05:24 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/gdp/gstgdppay.c:
+ update for new memory api
+
+2012-02-03 11:38:55 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * tests/check/elements/gdpdepay.c:
+ * tests/check/elements/gdppay.c:
+ gdp: fixup unit tests
+
+2012-02-03 11:38:15 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/gdp/gstgdppay.c:
+ gdppay: fixup for changed caps
+ Try to send the streamheader after the first buffer.
+
+2012-02-03 11:37:21 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/gdp/dataprotocol.c:
+ dataprotocol: don't define default Category
+ Since we now include this into the unit tests directly, don't define the default
+ category macro because it conflicts with check.
+
+2012-01-30 17:16:17 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/gdp/dataprotocol.c:
+ * gst/gdp/gstgdppay.c:
+ * tests/check/elements/gdpdepay.c:
+ * tests/check/elements/gdppay.c:
+ * tests/check/pipelines/streamheader.c:
+ update for HEADER flag changes
+
+2012-01-20 16:11:54 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/gdp/dataprotocol.c:
+ * gst/gdp/gstgdpdepay.c:
+ * tests/check/elements/gdpdepay.c:
+ * tests/check/elements/gdppay.c:
+ * tests/check/pipelines/streamheader.c:
+ port to new map API
+
+2012-01-19 15:32:52 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * tests/check/pipelines/streamheader.c:
+ tests: fix some tests
+
+2012-01-04 16:41:53 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * tests/check/elements/gdpdepay.c:
+ * tests/check/elements/gdppay.c:
+ * tests/check/pipelines/streamheader.c:
+ tests: port and enable more unit tests
+
+2011-12-25 23:19:57 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/gdp/Makefile.am:
+ * gst/gdp/dataprotocol.c:
+ * gst/gdp/dp-private.h:
+ * gst/gdp/gstgdp.c:
+ * gst/gdp/gstgdpdepay.c:
+ * gst/gdp/gstgdppay.c:
+ * tests/check/elements/gdpdepay.c:
+ * tests/check/elements/gdppay.c:
+ gdp: move dataprotocol library into gdp plugin and make private
+ We have removed things like protocol=gdp in the tcp elements
+ in favour of explicit gdppay/depay elements, so there's no need
+ to keep a public API and library for now. We can still add it
+ back later. Someone needs to think hard about 0.11 and gdp
+ anyway one of these days.
+
+2011-11-11 17:17:43 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/gdp/dataprotocol.h:
+ gdp: fix header files
+ Ensure correct indentation and retab
+ Make sure all structure have padding
+
+2011-08-16 17:32:20 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/gdp/dataprotocol.c:
+ gdp: rename buffer PREROLL -> LIVE flag
+ Rename the GST_BUFFER_FLAG_PREROLL to GST_BUFFER_FLAG_LIVE and give the new flag
+ a meaning. The old PREROLL flag never had a clear meaning.
+
+2011-06-10 13:40:57 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/gdp/dataprotocol.c:
+ gdp: make new _buffer_allocate method
+ Make a new method to allocate a buffer + memory that takes the allocator and the
+ alignment as parameters. Provide a macro for the old method but prefer to use
+ the new method to encourage plugins to negotiate the allocator properly.
+
+2011-05-13 18:07:24 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/gdp/dataprotocol.c:
+ gdp: Rework GstSegment handling
+ Improve GstSegment, rename some fields. The idea is to have the GstSegment
+ structure represent the timing structure of the buffers as they are generated by
+ the source or demuxer element.
+ gst_segment_set_seek() -> gst_segment_do_seek()
+ Rename the NEWSEGMENT event to SEGMENT.
+ Make parsing of the SEGMENT event into a GstSegment structure.
+ Pass a GstSegment structure when making a new SEGMENT event. This allows us to
+ pass the timing info directly to the next element. No accumulation is needed in
+ the receiving element, all the info is inside the element.
+ Remove gst_segment_set_newsegment(): This function as used to accumulate
+ segments received from upstream, which is now not needed anymore because the
+ segment event contains the complete timing information.
+
+2011-05-10 11:50:16 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/gdp/dataprotocol.c:
+ gdp: Hide the GstStructure in GstEvent
+ Hide the GstStructure of the event in the implementation specific part so that
+ we can change it.
+ Add methods to check and make the event writable.
+ Add a new method to get a writable GstStructure of the element.
+ Avoid directly accising the event structure.
+
+2011-05-02 16:00:52 +0300 Stefan Kost <ensonic@users.sf.net>
+
+ * gst/gdp/dataprotocol.h:
+ gdp: add docs for GstDPPacketizer
+
+2011-03-21 18:13:55 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/gdp/dataprotocol.c:
+ gdp: port code to new buffer data API
+
+2010-12-06 19:40:03 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/gdp/dataprotocol.c:
+ * gst/gdp/dataprotocol.h:
+ gdp: remove deprecated code
+
+2010-10-08 09:34:47 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/gdp/dataprotocol.c:
+ gdp: make public enum _get_type() functions thread-safe
+ Not that it is likely to matter in practice, but since these are public
+ API they should probably be thread-safe.
+
+2010-10-08 00:38:39 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/gdp/dataprotocol.c:
+ gdp: dataprotocol, lfocontrolsource: fix enum value name in enums that are public API
+ So run-time bindings can introspect the names correctly (we abuse this
+ field as description field only in elements, not for public API
+ (where the description belongs into the gtk-doc chunk).
+ https://bugzilla.gnome.org/show_bug.cgi?id=629946
+
+2010-03-02 22:58:06 +0100 Benjamin Otte <otte@redhat.com>
+
+ * gst/gdp/dataprotocol.c:
+ gdp: Fixes for -Wmissing-declarations -Wmissing-prototypes
+ Also adds those flags to the configure warning flags
+ https://bugzilla.gnome.org/show_bug.cgi?id=611692
+
+2010-03-02 23:51:18 +0100 Benjamin Otte <otte@redhat.com>
+
+ * gst/gdp/dp-private.h:
+ gdp: Make code safe for -Wredundant-decls
+ Adds that warning to configure.ac
+ Includes a tiny change of the GST_BOILERPLATE_FULL() macro:
+ The get_type() function is no longer declared before being defined.
+ https://bugzilla.gnome.org/show_bug.cgi?id=611692
+
+2009-11-27 16:39:37 +0200 Stefan Kost <ensonic@users.sf.net>
+
+ * gst/gdp/dataprotocol.c:
+ gdp: fix broken xrefs in docs
+
+2008-06-30 09:38:45 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ gdp: Don't write to the same region of memory as a uint64 and uint16 as this breaks ...
+ Original commit message from CVS:
+ * libs/gst/dataprotocol/dataprotocol.c:
+ Don't write to the same region of memory as a uint64 and uint16
+ as this breaks strict aliasing rules and apparantly breaks on PPC
+ and s390. Thanks to Sjoerd Simons for analysing. Fixes bug #348114.
+
+2008-03-27 15:23:55 +0000 Michael Smith <msmith@xiph.org>
+
+ gdp: When calculating GDP body CRC, use the correct pointer.
+ Original commit message from CVS:
+ * libs/gst/dataprotocol/dataprotocol.c:
+ (gst_dp_packet_from_event_1_0):
+ When calculating GDP body CRC, use the correct pointer.
+ Fixes part of #522401.
+
+2008-02-29 12:41:33 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ gdp: Correct all relevant warnings found by the sparse semantic code analyzer. This include marking several symbols static...
+ Original commit message from CVS:
+ * gst/gstconfig.h.in:
+ * libs/gst/base/gstcollectpads.c: (gst_collect_pads_read_buffer):
+ * libs/gst/check/gstcheck.c: (gst_check_log_message_func),
+ (gst_check_log_critical_func), (gst_check_drop_buffers),
+ (gst_check_element_push_buffer_list):
+ * libs/gst/controller/gstcontroller.c: (gst_controller_get),
+ (gst_controller_get_type):
+ * libs/gst/controller/gsthelper.c: (gst_object_control_properties),
+ (gst_object_get_controller), (gst_object_get_control_source):
+ * libs/gst/controller/gstinterpolationcontrolsource.c:
+ (gst_interpolation_control_source_new):
+ * libs/gst/controller/gstlfocontrolsource.c:
+ (gst_lfo_control_source_new):
+ * libs/gst/dataprotocol/dataprotocol.c:
+ (gst_dp_event_from_packet_0_2):
+ * plugins/elements/gstfdsrc.c:
+ * plugins/elements/gstmultiqueue.c:
+ * plugins/elements/gsttee.c:
+ * plugins/elements/gsttypefindelement.c:
+ * plugins/indexers/gstfileindex.c: (_file_index_id_save_xml),
+ (gst_file_index_add_association):
+ * plugins/indexers/gstmemindex.c:
+ * tests/benchmarks/gstpollstress.c: (mess_some_more):
+ * tests/check/elements/queue.c: (setup_queue):
+ * tests/check/gst/gstpipeline.c:
+ * tests/check/libs/collectpads.c: (setup), (teardown),
+ (gst_collect_pads_suite):
+ * tests/examples/adapter/adapter_test.c:
+ * tests/examples/metadata/read-metadata.c: (make_pipeline):
+ * tests/examples/xml/createxml.c:
+ * tests/examples/xml/runxml.c:
+ * tools/gst-inspect.c:
+ * tools/gst-run.c:
+ Correct all relevant warnings found by the sparse semantic code
+ analyzer. This include marking several symbols static, using
+ NULL instead of 0 for pointers, not using variable sized arrays
+ on the stack, moving variable declarations to the beginning of
+ a block and using "foo (void)" instead of "foo ()" for declarations.
+
+2008-01-08 02:07:38 +0000 Damien Lespiau <damien.lespiau@gmail.com>
+
+ gdp: Fix empty prototypes. Fixes bug #507957.
+ Original commit message from CVS:
+ Patch by: Damien Lespiau <damien.lespiau@gmail.com>
+ * libs/gst/controller/gstcontroller.h:
+ * libs/gst/controller/gstcontrolsource.h:
+ * libs/gst/controller/gstinterpolationcontrolsource.h:
+ * libs/gst/controller/gstlfocontrolsource.h:
+ * libs/gst/dataprotocol/dataprotocol.h:
+ Fix empty prototypes. Fixes bug #507957.
+
+2007-11-01 21:50:05 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gdp: g_type_class_ref() other types as well, see #349410 and #64764.
+ Original commit message from CVS:
+ * gst/gst.c: (init_post):
+ * gst/gstevent.c: (_gst_event_initialize):
+ * gst/gstquery.c: (_gst_query_initialize):
+ * libs/gst/dataprotocol/dataprotocol.c (gst_dp_init):
+ g_type_class_ref() other types as well, see #349410 and #64764.
+ * gst/gstbuffer.c: (_gst_buffer_initialize):
+ * gst/gstmessage.c: (_gst_message_initialize):
+ Simplify existing g_type_class_ref().
+
+2006-10-05 14:26:08 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ gdp: Printf fixes.
+ Original commit message from CVS:
+ * gst/gstpad.c: (pre_activate):
+ * gst/gstregistry.c: (gst_registry_scan_path_level):
+ * gst/gstregistryxml.c: (load_plugin):
+ * libs/gst/controller/gstcontroller.c:
+ (gst_controlled_property_set_interpolation_mode):
+ * libs/gst/dataprotocol/dataprotocol.c:
+ (gst_dp_packet_from_event_1_0):
+ * libs/gst/net/gstnetclientclock.c:
+ (gst_net_client_clock_observe_times):
+ * plugins/elements/gstfdsrc.c: (gst_fd_src_create):
+ Printf fixes.
+
+2006-08-11 15:26:33 +0000 Andy Wingo <wingo@pobox.com>
+
+ gdp: GST_DISABLE_DEPRECATED is only for users of API that don't want to see deprecated functions in the headers; people th...
+ Original commit message from CVS:
+ 2006-08-11 Andy Wingo <wingo@pobox.com>
+ * configure.ac:
+ * libs/gst/dataprotocol/dataprotocol.c: (gst_dp_packetizer_new):
+ * tests/check/libs/gdp.c: (gst_dp_suite): GST_DISABLE_DEPRECATED
+ is only for users of API that don't want to see deprecated
+ functions in the headers; people that want to compile out
+ deprecated code should pass -DGST_REMOVE_DEPRECATED into the
+ CFLAGS. Fixes the build of multifdsink, or will soon..
+
+2006-08-10 19:46:14 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ gdp: add gst_object_{s,g}et_control_rate(), add private data section, fix docs
+ Original commit message from CVS:
+ * docs/libs/gstreamer-libs-sections.txt:
+ * libs/gst/controller/gstcontroller.c:
+ (_gst_controller_get_property), (_gst_controller_set_property),
+ (_gst_controller_init), (_gst_controller_class_init):
+ * libs/gst/controller/gstcontroller.h:
+ * libs/gst/controller/gsthelper.c: (gst_object_get_control_rate),
+ (gst_object_set_control_rate):
+ API: add gst_object_{s,g}et_control_rate(), add private data section,
+ fix docs
+ * libs/gst/dataprotocol/dataprotocol.c: (gst_dp_packetizer_new):
+ * libs/gst/dataprotocol/dataprotocol.h:
+ add deprecation guards to make gtk-doc happy and allow disabling cruft
+
+2006-08-02 15:19:30 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gdp: Make debug category static
+ Original commit message from CVS:
+ * libs/gst/dataprotocol/dataprotocol.c:
+ (gst_dp_header_from_buffer_any), (gst_dp_packet_from_caps_any),
+ (gst_dp_crc), (gst_dp_header_payload_length),
+ (gst_dp_header_payload_type), (gst_dp_packet_from_event),
+ (gst_dp_packet_from_event_1_0), (gst_dp_buffer_from_header),
+ (gst_dp_caps_from_packet), (gst_dp_event_from_packet_0_2),
+ (gst_dp_event_from_packet), (gst_dp_validate_header),
+ (gst_dp_validate_payload):
+ Make debug category static
+ Constify the crc table.
+ Do some more arg checking in public functions.
+ Fix some docs and do some small cleanups.
+ * tests/check/libs/gdp.c: (GST_START_TEST), (gst_dp_suite):
+ Add some more checks to see if GDP deals with bogus input.
+
+2006-07-13 14:02:16 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ gdp: fix failure to deserialize event packets with empty payload (only ev...
+ Original commit message from CVS:
+ * libs/gst/dataprotocol/dataprotocol.c:
+ (gst_dp_event_from_packet_1_0):
+ Fixes #347337: failure to deserialize event packets with
+ empty payload (only event type)
+
+2006-06-13 19:24:34 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ gdp: add a gdp image to the docs
+ Original commit message from CVS:
+ * docs/README:
+ * docs/images/gdp-header.svg:
+ add a gdp image
+ * docs/libs/Makefile.am:
+ * docs/libs/gdp-header.png:
+ * libs/gst/dataprotocol/dataprotocol.c:
+ add it to the API docs
+ * docs/manual/intro-motivation.xml:
+ fix typo
+
+2006-06-06 14:29:54 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * gst/gdp/dataprotocol.c:
+ gdp: add note to docs about GDP versioning; remove tmpl file
+ Original commit message from CVS:
+ add note to docs about GDP versioning; remove tmpl file
+
+2006-06-06 14:24:00 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ gdp: add a GstDPPacketizer object, and create/free functions
+ Original commit message from CVS:
+ * libs/gst/dataprotocol/dataprotocol.c:
+ (gst_dp_header_from_buffer_any), (gst_dp_packet_from_caps_any),
+ (gst_dp_version_get_type), (gst_dp_init),
+ (gst_dp_header_from_buffer), (gst_dp_header_from_buffer_1_0),
+ (gst_dp_packet_from_caps), (gst_dp_packet_from_caps_1_0),
+ (gst_dp_packet_from_event), (gst_dp_packet_from_event_1_0),
+ (gst_dp_event_from_packet_0_2), (gst_dp_event_from_packet_1_0),
+ (gst_dp_event_from_packet), (gst_dp_packetizer_new),
+ (gst_dp_packetizer_free):
+ * libs/gst/dataprotocol/dataprotocol.h:
+ API: add a GstDPPacketizer object, and create/free functions
+ API: add GstDPVersion enum
+ Add 1.0 event function that uses the string serialization
+ Serialize more useful buffer flags
+ Fixes #343988
+
+2006-06-02 16:46:19 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ gdp: factor out CRC code
+ Original commit message from CVS:
+ * libs/gst/dataprotocol/dataprotocol.c:
+ (gst_dp_header_from_buffer), (gst_dp_packet_from_caps),
+ (gst_dp_packet_from_event):
+ factor out CRC code
+
+2006-06-02 10:58:47 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ gdp: factor out some common header init code
+ Original commit message from CVS:
+ * libs/gst/dataprotocol/dataprotocol.c:
+ (gst_dp_header_from_buffer), (gst_dp_packet_from_caps),
+ (gst_dp_packet_from_event):
+ factor out some common header init code
+
+2006-06-02 10:08:31 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ gdp: make gst_dp_crc() public
+ Original commit message from CVS:
+ * docs/libs/gstreamer-libs-sections.txt:
+ * docs/libs/tmpl/gstdataprotocol.sgml:
+ * libs/gst/dataprotocol/dataprotocol.c: (gst_dp_crc):
+ * libs/gst/dataprotocol/dataprotocol.h:
+ API: make gst_dp_crc() public
+
+2006-06-01 11:13:44 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ gdp: make sure we zero the whole ABI-compatible area
+ Original commit message from CVS:
+ * libs/gst/dataprotocol/dataprotocol.c:
+ (gst_dp_header_from_buffer):
+ make sure we zero the whole ABI-compatible area
+
+2006-05-08 15:53:12 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * gst/gdp/dataprotocol.c:
+ gdp: whitespace, comment, doc fixup
+ Original commit message from CVS:
+ whitespace, comment, doc fixup
+
+2006-04-28 13:40:15 +0000 Michael Smith <msmith@xiph.org>
+
+ gdp: Fixes in reading/writing events over GDP (not currently used?) - dereferencing ...
+ Original commit message from CVS:
+ * libs/gst/dataprotocol/dataprotocol.c: (gst_dp_packet_from_event),
+ (gst_dp_event_from_packet):
+ Fixes in reading/writing events over GDP (not currently used?) -
+ dereferencing NULL events for unknown/invalid event types, memory
+ leak, and change g_warning to GST_WARNING.
+
+2006-03-10 15:30:27 +0000 Michael Smith <msmith@xiph.org>
+
+ gdp: Fix docs for dataprocotol to not get the return types completely wrong for a fe...
+ Original commit message from CVS:
+ * libs/gst/dataprotocol/dataprotocol.c:
+ Fix docs for dataprocotol to not get the return types completely
+ wrong for a few functions.
+
+2005-12-18 16:04:41 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gdp: Documentation updates.
+ Original commit message from CVS:
+ * libs/gst/base/gstadapter.c:
+ * libs/gst/base/gstadapter.h:
+ * libs/gst/base/gstbasesink.c: (gst_base_sink_class_init),
+ (gst_base_sink_get_position):
+ * libs/gst/base/gstbasesink.h:
+ * libs/gst/base/gstbasesrc.c: (gst_base_src_class_init),
+ (gst_base_src_default_query), (gst_base_src_default_do_seek),
+ (gst_base_src_do_seek), (gst_base_src_perform_seek),
+ (gst_base_src_send_event), (gst_base_src_update_length),
+ (gst_base_src_get_range), (gst_base_src_loop),
+ (gst_base_src_start):
+ * libs/gst/base/gstbasesrc.h:
+ * libs/gst/base/gstbasetransform.h:
+ * libs/gst/base/gstcollectpads.h:
+ * libs/gst/base/gstpushsrc.c:
+ * libs/gst/base/gstpushsrc.h:
+ * libs/gst/dataprotocol/dataprotocol.c:
+ * libs/gst/dataprotocol/dataprotocol.h:
+ * libs/gst/net/gstnetclientclock.h:
+ * libs/gst/net/gstnettimeprovider.h:
+ Documentation updates.
+
+2005-10-13 16:26:12 +0000 Andy Wingo <wingo@pobox.com>
+
+ gdp: Fix Timmeke Waymans bug.
+ Original commit message from CVS:
+ 2005-10-13 Andy Wingo <wingo@pobox.com>
+ * libs/gst/dataprotocol/dataprotocol.c (gst_dp_packet_from_caps):
+ Fix Timmeke Waymans bug.
+ (gst_dp_caps_from_packet): Make sure we pass a NUL-terminated
+ string of the proper length to gst_caps_from_string. There's a
+ potential for, before this fix, that this could cause someone
+ connecting over the network to cause a segfault if the payload is
+ not NUL-terminated.
+
+2005-10-10 23:55:39 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * gst/gdp/dataprotocol.c:
+ gdp: fix more valgrind warnings before turning up the heat
+ Original commit message from CVS:
+ fix more valgrind warnings before turning up the heat
+
+2005-10-08 17:17:25 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gdp: It's about time we bump the version number.
+ Original commit message from CVS:
+ * libs/gst/dataprotocol/dataprotocol.c:
+ (gst_dp_header_from_buffer), (gst_dp_packet_from_caps),
+ (gst_dp_packet_from_event):
+ * libs/gst/dataprotocol/dataprotocol.h:
+ * libs/gst/dataprotocol/dp-private.h:
+ It's about time we bump the version number.
+ Since event types don't fit in the guint8 anymore describing
+ the payload type, make payload type 16 bits wide.
+
+2005-09-27 16:30:26 +0000 Andy Wingo <wingo@pobox.com>
+
+ gdp: Fix error-checking return values.
+ Original commit message from CVS:
+ 2005-09-27 Andy Wingo <wingo@pobox.com>
+ * libs/gst/dataprotocol/dataprotocol.c: Fix error-checking return
+ values.
+
+2005-07-27 19:00:36 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gdp: Fix serialization of seek events.
+ Original commit message from CVS:
+ * libs/gst/dataprotocol/dataprotocol.c: (gst_dp_packet_from_event),
+ (gst_dp_event_from_packet):
+ Fix serialization of seek events.
+
+2005-07-27 18:33:03 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gdp: Some docs updates
+ Original commit message from CVS:
+ * CHANGES-0.9:
+ * docs/design/part-TODO.txt:
+ * docs/design/part-events.txt:
+ Some docs updates
+ * gst/base/gstbasesink.c: (gst_base_sink_handle_object),
+ (gst_base_sink_event), (gst_base_sink_do_sync),
+ (gst_base_sink_activate_push), (gst_base_sink_activate_pull):
+ * gst/base/gstbasesrc.c: (gst_base_src_send_discont),
+ (gst_base_src_do_seek), (gst_base_src_event_handler),
+ (gst_base_src_loop):
+ * gst/base/gstbasetransform.c: (gst_base_transform_transform_caps),
+ (gst_base_transform_configure_caps), (gst_base_transform_setcaps),
+ (gst_base_transform_get_size), (gst_base_transform_buffer_alloc),
+ (gst_base_transform_event), (gst_base_transform_handle_buffer),
+ (gst_base_transform_set_passthrough),
+ (gst_base_transform_is_passthrough):
+ * gst/elements/gstfakesink.c: (gst_fake_sink_event):
+ * gst/elements/gstfilesink.c: (gst_file_sink_event):
+ Event updates.
+ * gst/gstbuffer.h:
+ Use faster casts.
+ * gst/gstelement.c: (gst_element_seek):
+ * gst/gstelement.h:
+ Update gst_element_seek.
+ * gst/gstevent.c: (gst_event_finalize), (_gst_event_copy),
+ (gst_event_new), (gst_event_new_custom), (gst_event_get_structure),
+ (gst_event_new_flush_start), (gst_event_new_flush_stop),
+ (gst_event_new_eos), (gst_event_new_newsegment),
+ (gst_event_parse_newsegment), (gst_event_new_tag),
+ (gst_event_parse_tag), (gst_event_new_filler), (gst_event_new_qos),
+ (gst_event_parse_qos), (gst_event_new_seek),
+ (gst_event_parse_seek), (gst_event_new_navigation):
+ * gst/gstevent.h:
+ Make GstEvent use GstStructure. Add parsing code, make sure the
+ API is sufficiently generic.
+ Mark possible directions of events and serialization.
+ * gst/gstmessage.c: (gst_message_init), (gst_message_finalize),
+ (_gst_message_copy), (gst_message_new_segment_start),
+ (gst_message_new_segment_done), (gst_message_new_custom),
+ (gst_message_parse_segment_start),
+ (gst_message_parse_segment_done):
+ Small cleanups.
+ * gst/gstpad.c: (gst_pad_get_caps_unlocked), (gst_pad_accept_caps),
+ (gst_pad_set_caps), (gst_pad_send_event):
+ Update for new events.
+ Catch events sent in wrong directions.
+ * gst/gstqueue.c: (gst_queue_link_src),
+ (gst_queue_handle_sink_event), (gst_queue_chain), (gst_queue_loop),
+ (gst_queue_handle_src_query):
+ Event updates.
+ * gst/gsttag.c:
+ * gst/gsttag.h:
+ Remove event code from this file.
+ * libs/gst/dataprotocol/dataprotocol.c: (gst_dp_packet_from_event),
+ (gst_dp_event_from_packet):
+ Event updates.
+
+2005-07-05 10:20:14 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gdp: Ported dataprotol to 0.9.
+ Original commit message from CVS:
+ * configure.ac:
+ * libs/gst/dataprotocol/Makefile.am:
+ * libs/gst/dataprotocol/dataprotocol.c: (gst_dp_validate_packet):
+ * libs/gst/dataprotocol/dataprotocol.h:
+ * pkgconfig/Makefile.am:
+ * pkgconfig/gstreamer-dataprotocol-uninstalled.pc.in:
+ * pkgconfig/gstreamer-dataprotocol.pc.in:
+ Ported dataprotol to 0.9.
+ Added pkgconfig files.
+
+2005-05-16 20:21:55 +0000 David Schleef <ds@schleef.org>
+
+ gdp: remove GstData checks
+ Original commit message from CVS:
+ * check/Makefile.am: remove GstData checks
+ * check/gst-libs/gdp.c: (START_TEST): fix for API changes
+ * gst/Makefile.am: add miniobject, remove data
+ * gst/gst.h: add miniobject, remove data
+ * gst/gstdata.c: remove
+ * gst/gstdata.h: remove
+ * gst/gstdata_private.h: remove
+ * gst/gsttypes.h: remove GstEvent and GstMessage
+ * gst/gstelement.c: (gst_element_post_message): fix for API changes
+ * gst/gstmarshal.list: change BOXED -> OBJECT
+ Implement GstMiniObject.
+ * gst/gstminiobject.c:
+ * gst/gstminiobject.h:
+ Modify to be subclasses of GstMiniObject.
+ * gst/gstbuffer.c: (_gst_buffer_initialize), (gst_buffer_get_type),
+ (gst_buffer_class_init), (gst_buffer_finalize), (_gst_buffer_copy),
+ (gst_buffer_init), (gst_buffer_new), (gst_buffer_new_and_alloc),
+ (gst_subbuffer_get_type), (gst_subbuffer_init),
+ (gst_buffer_create_sub), (gst_buffer_is_span_fast),
+ (gst_buffer_span):
+ * gst/gstbuffer.h:
+ * gst/gstevent.c: (_gst_event_initialize), (gst_event_get_type),
+ (gst_event_class_init), (gst_event_init), (gst_event_finalize),
+ (_gst_event_copy), (gst_event_new):
+ * gst/gstevent.h:
+ * gst/gstmessage.c: (_gst_message_initialize),
+ (gst_message_get_type), (gst_message_class_init),
+ (gst_message_init), (gst_message_finalize), (_gst_message_copy),
+ (gst_message_new), (gst_message_new_error),
+ (gst_message_new_warning), (gst_message_new_tag),
+ (gst_message_new_state_changed), (gst_message_new_application):
+ * gst/gstmessage.h:
+ * gst/gstprobe.c: (gst_probe_perform),
+ (gst_probe_dispatcher_dispatch):
+ * gst/gstprobe.h:
+ * gst/gstquery.c: (_gst_query_initialize), (gst_query_get_type),
+ (gst_query_class_init), (gst_query_finalize), (gst_query_init),
+ (_gst_query_copy), (gst_query_new):
+ Update elements for GstData -> GstMiniObject changes
+ * gst/gstquery.h:
+ * gst/gstqueue.c: (gst_queue_finalize), (gst_queue_locked_flush),
+ (gst_queue_chain), (gst_queue_loop):
+ * gst/elements/gstbufferstore.c:
+ (gst_buffer_store_add_buffer_func),
+ (gst_buffer_store_cleared_func), (gst_buffer_store_get_buffer):
+ * gst/elements/gstfakesink.c: (gst_fakesink_class_init),
+ (gst_fakesink_render):
+ * gst/elements/gstfakesrc.c: (gst_fakesrc_class_init):
+ * gst/elements/gstfilesrc.c: (gst_mmap_buffer_get_type),
+ (gst_mmap_buffer_class_init), (gst_mmap_buffer_init),
+ (gst_mmap_buffer_finalize), (gst_filesrc_map_region),
+ (gst_filesrc_create_read):
+ * gst/elements/gstidentity.c: (gst_identity_class_init):
+ * gst/elements/gsttypefindelement.c:
+ (gst_type_find_element_src_event), (free_entry_buffers),
+ (gst_type_find_element_handle_event):
+ * libs/gst/dataprotocol/dataprotocol.c:
+ (gst_dp_header_from_buffer):
+ * libs/gst/dataprotocol/dataprotocol.h:
+ * libs/gst/dataprotocol/dp-private.h:
+
+2005-05-04 21:29:44 +0000 Andy Wingo <wingo@pobox.com>
+
+ gdp: GCC 4 fixen.
+ Original commit message from CVS:
+ 2005-05-04 Andy Wingo <wingo@pobox.com>
+ * check/Makefile.am:
+ * docs/gst/tmpl/gstatomic.sgml:
+ * docs/gst/tmpl/gstplugin.sgml:
+ * gst/base/gstbasesink.c: (gst_basesink_activate):
+ * gst/base/gstbasesrc.c: (gst_basesrc_class_init),
+ (gst_basesrc_init), (gst_basesrc_set_dataflow_funcs),
+ (gst_basesrc_query), (gst_basesrc_set_property),
+ (gst_basesrc_get_property), (gst_basesrc_check_get_range),
+ (gst_basesrc_activate):
+ * gst/base/gstbasesrc.h:
+ * gst/base/gstbasetransform.c: (gst_base_transform_sink_activate),
+ (gst_base_transform_src_activate):
+ * gst/elements/gstelements.c:
+ * gst/elements/gstfakesrc.c: (gst_fakesrc_class_init),
+ (gst_fakesrc_set_property), (gst_fakesrc_get_property):
+ * gst/elements/gsttee.c: (gst_tee_sink_activate):
+ * gst/elements/gsttypefindelement.c: (find_element_get_length),
+ (gst_type_find_element_checkgetrange),
+ (gst_type_find_element_activate):
+ * gst/gstbin.c: (gst_bin_save_thyself), (gst_bin_restore_thyself):
+ * gst/gstcaps.c: (gst_caps_do_simplify), (gst_caps_save_thyself),
+ (gst_caps_load_thyself):
+ * gst/gstelement.c: (gst_element_pads_activate),
+ (gst_element_save_thyself), (gst_element_restore_thyself):
+ * gst/gstpad.c: (gst_pad_load_and_link), (gst_pad_save_thyself),
+ (gst_ghost_pad_save_thyself), (gst_pad_check_pull_range):
+ * gst/gstpad.h:
+ * gst/gstxml.c: (gst_xml_write), (gst_xml_parse_doc),
+ (gst_xml_parse_file), (gst_xml_parse_memory),
+ (gst_xml_get_element), (gst_xml_make_element):
+ * gst/indexers/gstfileindex.c: (gst_file_index_load),
+ (_file_index_id_save_xml), (gst_file_index_commit):
+ * gst/registries/gstlibxmlregistry.c: (read_string), (read_uint),
+ (read_enum), (load_pad_template), (load_feature), (load_plugin),
+ (load_paths):
+ * libs/gst/dataprotocol/dataprotocol.c: (gst_dp_packet_from_caps),
+ (gst_dp_packet_from_event), (gst_dp_caps_from_packet):
+ * tools/gst-complete.c: (main):
+ * tools/gst-compprep.c: (main):
+ * tools/gst-inspect.c: (print_element_properties_info):
+ * tools/gst-launch.c: (xmllaunch_parse_cmdline):
+ * tools/gst-xmlinspect.c: (print_element_properties):
+ GCC 4 fixen.
+
+2005-03-21 17:34:02 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ * gst/gdp/dataprotocol.c:
+ gdp: Next big merge.
+ Original commit message from CVS:
+ Next big merge.
+ Added GstBus for mainloop integration.
+ Added GstMessage for sending notifications on the bus.
+ Added GstTask as an abstraction for pipeline entry points.
+ Removed GstThread.
+ Removed Schedulers.
+ Simplified GstQueue for multithreaded core.
+ Made _link threadsafe, removed old capsnego.
+ Added STREAM_LOCK and PREROLL_LOCK in GstPad.
+ Added pad blocking functions.
+ Reworked scheduling functions in GstPad to prepare for
+ scheduling updates soon.
+ Moved events out of data stream.
+ Simplified GstEvent types.
+ Added return values to push/pull.
+ Removed clocking from GstElement.
+ Added prototypes for state change function for next merge.
+ Removed iterate from bins and state change management.
+ Fixed some elements, disabled others for now.
+ Fixed -inspect and -launch.
+ Added check for GstBus.
+
+2005-03-07 18:27:42 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ * gst/gdp/dataprotocol.c:
+ gdp: First THREADED backport attempt, focusing on adding locks and making sure the API is threadsafe. Needs more work. Mor...
+ Original commit message from CVS:
+ First THREADED backport attempt, focusing on adding locks and
+ making sure the API is threadsafe. Needs more work. More docs
+ follow this week.
+
+2005-02-18 13:58:36 +0000 Zaheer Abbas Merali <zaheerabbas@merali.org>
+
+ gdp: Allocate the 1 byte more memory that was forgotten!!!!!
+ Original commit message from CVS:
+ 2005-02-18 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+ * libs/gst/dataprotocol/dataprotocol.c: (gst_dp_dump_byte_array):
+ Allocate the 1 byte more memory that was forgotten!!!!!
+
+2004-10-01 16:49:01 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gdp: Fix threadsafety of the crc checking function.
+ Original commit message from CVS:
+ * libs/gst/dataprotocol/dataprotocol.c: (gst_dp_crc):
+ Fix threadsafety of the crc checking function.
+
+2004-08-16 10:35:36 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * gst/gdp/dataprotocol.c:
+ gdp: fix for #150242
+ Original commit message from CVS:
+ fix for #150242
+
+2004-07-28 10:22:07 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * gst/gdp/dataprotocol.c:
+ gdp: doc style fixes
+ Original commit message from CVS:
+ doc style fixes
+
+2004-06-09 16:24:19 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * gst/gdp/dataprotocol.c:
+ * gst/gdp/dataprotocol.h:
+ * gst/gdp/dp-private.h:
+ gdp: bump GDP to 0.1, add buffer flags
+ Original commit message from CVS:
+ bump GDP to 0.1, add buffer flags
+
+2004-05-24 16:38:15 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * gst/gdp/dataprotocol.h:
+ gdp: wrap header in _NEW
+ Original commit message from CVS:
+ wrap header in _NEW
+
+2004-05-19 17:22:53 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * gst/gdp/dataprotocol.c:
+ * gst/gdp/dp-private.h:
+ Original commit message from CVS: use GST macros; add asserts
+
+2004-05-19 16:59:39 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * gst/gdp/dp-private.h:
+ gdp: private prototype
+ Original commit message from CVS:
+ private prototype
+
+2004-05-19 16:37:53 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * gst/gdp/dataprotocol.c:
+ * gst/gdp/dataprotocol.h:
+ * gst/gdp/dp-private.h:
+ gdp: add dataprotocol
+ Original commit message from CVS:
+ clean up libs docs; add dataprotocol
+
+2011-11-17 12:48:25 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/gdp/gstgdpdepay.c:
+ * gst/gdp/gstgdppay.c:
+ add parent to pad functions
+
+2011-11-10 18:32:39 +0100 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/gdp/gstgdpdepay.c:
+ update for adapter api changes
+
+2011-09-29 13:46:36 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * tests/check/elements/gdpdepay.c:
+ * tests/check/elements/gdppay.c:
+ tests: update for new audio caps
+
+2011-07-08 20:02:25 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/gdp/gstgdppay.c:
+ gdppay: parse caps event and payload caps
+ Which makes it actually output stuff.
+
+2011-06-13 16:32:56 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/gdp/gstgdppay.c:
+ -base: update for buffer API change
+
+2011-05-16 13:48:11 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/gdp/gstgdpdepay.c:
+ * gst/gdp/gstgdppay.c:
+ -base: port to new SEGMENT API
+
+2011-05-09 18:16:46 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/gdp/gstgdppay.c:
+ segment: fix for new core API
+ Fix for gst_*_segment_full rename.
+
+2011-05-09 13:05:12 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/gdp/gstgdpdepay.c:
+ * gst/gdp/gstgdppay.c:
+ -base: don't use buffer caps
+ Port to newest 0.11 core API, remove GST_PAD_CAPS and GST_BUFFER_CAPS.
+
+2011-04-19 11:35:53 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * gst/gdp/gstgdpdepay.c:
+ * gst/gdp/gstgdppay.c:
+ gst: Use G_DEFINE_TYPE instead of GST_BOILERPLATE
+
+2011-01-27 17:28:51 +0100 Alessandro Decina <alessandro.d@gmail.com>
+
+ * gst/gdp/Makefile.am:
+ android: make it ready for androgenizer
+ Remove the android/ top dir
+ Fixe the Makefile.am to be androgenized
+ To build gstreamer for android we are now using androgenizer which generates the
+ needed Android.mk files.
+ Androgenizer can be found here:
+ http://git.collabora.co.uk/?p=user/derek/androgenizer.git
+
+2011-03-31 17:47:43 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/gdp/gstgdppay.c:
+ bufferlist: fixes for new API
+
+2011-03-28 17:46:52 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * tests/check/elements/gdppay.c:
+ tests: fix more unit tests
+
+2011-03-28 15:51:46 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * tests/check/pipelines/streamheader.c:
+ tests: fix remaining unit tests
+
+2011-03-28 14:12:24 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * tests/check/elements/gdpdepay.c:
+ * tests/check/elements/gdppay.c:
+ tests: work on porting the unit tests
+
+2011-03-27 16:35:28 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/gdp/gstgdpdepay.c:
+ * gst/gdp/gstgdppay.c:
+ plugins: port some plugins to the new memory API
+
+2011-02-09 12:45:23 +0100 Andoni Morales Alastruey <amorales@flumotion.com>
+
+ * gst/gdp/gstgdppay.c:
+ gdppay: ensure buffer's metadata is writable before setting caps
+
+2011-01-16 14:55:46 -0800 David Schleef <ds@schleef.org>
+
+ * gst/gdp/gstgdppay.c:
+ gdppay: make newsegment buffer metadata writable
+
+2010-06-18 16:37:14 +0300 Stefan Kost <ensonic@users.sf.net>
+
+ * tests/check/elements/gdpdepay.c:
+ * tests/check/elements/gdppay.c:
+ tests: use our own macros for the tests main function
+
+2010-03-15 22:49:53 +0100 Benjamin Otte <otte@redhat.com>
+
+ * tests/check/elements/gdpdepay.c:
+ Add -Wwrite-strings to configure
+ Fixes for the code included
+
+2010-03-16 15:45:23 +0100 Benjamin Otte <otte@redhat.com>
+
+ * gst/gdp/gstgdpdepay.c:
+ * gst/gdp/gstgdppay.c:
+ gst_element_class_set_details => gst_element_class_set_details_simple
+ Also change my email from the old university one to the current one.
+
+2010-03-11 13:32:14 +0100 Benjamin Otte <otte@redhat.com>
+
+ * gst/gdp/gstgdpdepay.h:
+ * gst/gdp/gstgdppay.h:
+ Add -Wmissing-declarations -Wmissing-prototypes to warning flags
+ Includes all the fixes necessary to make stuff compile again.
+
+2009-11-05 15:42:09 +0100 Olivier Crête <olivier.crete@collabora.co.uk>
+
+ * gst/gdp/gstgdpdepay.c:
+ gdpdepay: Clear adapter on flush and state change
+ Fixes #600469
+
+2009-10-28 00:59:35 +0000 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/gdp/gstgdpdepay.c:
+ * gst/gdp/gstgdppay.c:
+ Remove GST_DEBUG_FUNCPTR where they're pointless
+ There's not much point in using GST_DEBUG_FUNCPTR with GObject
+ virtual functions such as get_property, set_propery, finalize and
+ dispose, since they'll never be used by anyone anyway. Saves a
+ few bytes and possibly a sixteenth of a polar bear.
+
+2009-09-22 11:58:26 +0100 Jan Schmidt <thaytan@noraisin.net>
+
+ * gst/gdp/gstgdppay.c:
+ gdppay: Don't repeat tags buffers for every new segment
+ Only send a tag buffer when one is received, not after every new segment
+ event/update.
+
+2009-08-27 18:59:49 +0200 Marc-André Lureau <mlureau@flumotion.com>
+
+ * gst/gdp/gstgdppay.c:
+ Bug 593035 - set IN_CAPS for streamheader buffer
+
+2009-08-10 15:40:33 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * tests/check/pipelines/streamheader.c:
+ streamheader: Fix caps leak in the vorbisenc unit test
+
+2009-08-10 14:14:30 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * tests/check/pipelines/streamheader.c:
+ checks: fix stream header unit test hanging in gst_task_cleanup_all()
+ Set pipelines to NULL state and unref when done.
+
+2009-05-27 12:10:05 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/gdp/gstgdppay.c:
+ gdppay: set caps on outgoing buffers
+ Set caps on outgoing buffers because NULL caps confuse basetransform.
+ Fixes #583867
+
+2008-10-16 15:07:00 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ Don't install static libs for plugins. Fixes #550851 for base.
+ Original commit message from CVS:
+ * ext/alsa/Makefile.am:
+ * ext/cdparanoia/Makefile.am:
+ * ext/gio/Makefile.am:
+ * ext/gnomevfs/Makefile.am:
+ * ext/libvisual/Makefile.am:
+ * ext/ogg/Makefile.am:
+ * ext/pango/Makefile.am:
+ * ext/theora/Makefile.am:
+ * ext/vorbis/Makefile.am:
+ * gst/adder/Makefile.am:
+ * gst/audioconvert/Makefile.am:
+ * gst/audiorate/Makefile.am:
+ * gst/audioresample/Makefile.am:
+ * gst/audiotestsrc/Makefile.am:
+ * gst/ffmpegcolorspace/Makefile.am:
+ * gst/gdp/Makefile.am:
+ * gst/playback/Makefile.am:
+ * gst/subparse/Makefile.am:
+ * gst/tcp/Makefile.am:
+ * gst/typefind/Makefile.am:
+ * gst/videorate/Makefile.am:
+ * gst/videoscale/Makefile.am:
+ * gst/videotestsrc/Makefile.am:
+ * gst/volume/Makefile.am:
+ * sys/v4l/Makefile.am:
+ * sys/ximage/Makefile.am:
+ * sys/xvimage/Makefile.am:
+ Don't install static libs for plugins. Fixes #550851 for base.
+
+2008-07-10 21:06:06 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ Cleanup Plugin docs. Link to signals and properties. Fix sub-section titles. Drop mentining that all our example pipe...
+ Original commit message from CVS:
+ * docs/plugins/gst-plugins-base-plugins-docs.sgml:
+ * docs/plugins/gst-plugins-base-plugins-overrides.txt:
+ * docs/plugins/gst-plugins-base-plugins-sections.txt:
+ * docs/plugins/gst-plugins-base-plugins.args:
+ * docs/plugins/gst-plugins-base-plugins.hierarchy:
+ * docs/plugins/gst-plugins-base-plugins.interfaces:
+ * docs/plugins/gst-plugins-base-plugins.prerequisites:
+ * docs/plugins/gst-plugins-base-plugins.signals:
+ * docs/plugins/inspect/plugin-adder.xml:
+ * docs/plugins/inspect/plugin-alsa.xml:
+ * docs/plugins/inspect/plugin-audioconvert.xml:
+ * docs/plugins/inspect/plugin-audiorate.xml:
+ * docs/plugins/inspect/plugin-audioresample.xml:
+ * docs/plugins/inspect/plugin-audiotestsrc.xml:
+ * docs/plugins/inspect/plugin-cdparanoia.xml:
+ * docs/plugins/inspect/plugin-decodebin.xml:
+ * docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+ * docs/plugins/inspect/plugin-gdp.xml:
+ * docs/plugins/inspect/plugin-gnomevfs.xml:
+ * docs/plugins/inspect/plugin-libvisual.xml:
+ * docs/plugins/inspect/plugin-ogg.xml:
+ * docs/plugins/inspect/plugin-pango.xml:
+ * docs/plugins/inspect/plugin-playback.xml:
+ * docs/plugins/inspect/plugin-queue2.xml:
+ * docs/plugins/inspect/plugin-subparse.xml:
+ * docs/plugins/inspect/plugin-tcp.xml:
+ * docs/plugins/inspect/plugin-theora.xml:
+ * docs/plugins/inspect/plugin-typefindfunctions.xml:
+ * docs/plugins/inspect/plugin-uridecodebin.xml:
+ * docs/plugins/inspect/plugin-video4linux.xml:
+ * docs/plugins/inspect/plugin-videorate.xml:
+ * docs/plugins/inspect/plugin-videoscale.xml:
+ * docs/plugins/inspect/plugin-videotestsrc.xml:
+ * docs/plugins/inspect/plugin-volume.xml:
+ * docs/plugins/inspect/plugin-vorbis.xml:
+ * docs/plugins/inspect/plugin-ximagesink.xml:
+ * docs/plugins/inspect/plugin-xvimagesink.xml:
+ * ext/alsa/gstalsamixer.c:
+ * ext/alsa/gstalsasink.c:
+ * ext/alsa/gstalsasrc.c:
+ * ext/gio/gstgiosink.c:
+ * ext/gio/gstgiosrc.c:
+ * ext/gio/gstgiostreamsink.c:
+ * ext/gio/gstgiostreamsrc.c:
+ * ext/gnomevfs/gstgnomevfssink.c:
+ * ext/gnomevfs/gstgnomevfssrc.c:
+ * ext/ogg/gstoggdemux.c:
+ * ext/ogg/gstoggmux.c:
+ * ext/pango/gstclockoverlay.c:
+ * ext/pango/gsttextoverlay.c:
+ * ext/pango/gsttextrender.c:
+ * ext/pango/gsttimeoverlay.c:
+ * ext/theora/theoradec.c:
+ * ext/theora/theoraenc.c:
+ * ext/theora/theoraparse.c:
+ * ext/vorbis/vorbisdec.c:
+ * ext/vorbis/vorbisenc.c:
+ * ext/vorbis/vorbisparse.c:
+ * ext/vorbis/vorbistag.c:
+ * gst/adder/gstadder.c:
+ * gst/audioconvert/gstaudioconvert.c:
+ * gst/audioresample/gstaudioresample.c:
+ * gst/audiotestsrc/gstaudiotestsrc.c:
+ * gst/ffmpegcolorspace/gstffmpegcolorspace.c:
+ * gst/gdp/gstgdpdepay.c:
+ * gst/gdp/gstgdppay.c:
+ * gst/playback/gstdecodebin2.c:
+ * gst/playback/gstplaybin.c:
+ * gst/playback/gstplaybin2.c:
+ * gst/playback/gstqueue2.c:
+ * gst/playback/gsturidecodebin.c:
+ * gst/tcp/gstmultifdsink.c:
+ * gst/tcp/gsttcpserversink.c:
+ * gst/videorate/gstvideorate.c:
+ * gst/videoscale/gstvideoscale.c:
+ * gst/videotestsrc/gstvideotestsrc.c:
+ * gst/volume/gstvolume.c:
+ * sys/ximage/ximagesink.c:
+ * sys/xvimage/xvimagesink.c:
+ Cleanup Plugin docs. Link to signals and properties. Fix sub-section
+ titles. Drop mentining that all our example pipelines are "simple"
+ pipelines.
+
+2008-06-30 09:46:15 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ tests/check/: Enable unit tests on PPC again as the bugs are now fixed.
+ Original commit message from CVS:
+ * tests/check/elements/gdpdepay.c: (gdpdepay_suite):
+ * tests/check/pipelines/streamheader.c: (streamheader_suite):
+ Enable unit tests on PPC again as the bugs are now fixed.
+
+2008-06-20 08:45:13 +0000 Antoine Tremblay <hexa00@gmail.com>
+
+ gst/gdp/gstgdppay.c: Fix a buffer memleak and remove a confusing and wrong debug output.
+ Original commit message from CVS:
+ Patch by: Antoine Tremblay <hexa00 at gmail dot com>
+ * gst/gdp/gstgdppay.c: (gst_gdp_pay_reset):
+ Fix a buffer memleak and remove a confusing and wrong debug output.
+ Fixes bug #538663.
+
+2008-06-04 16:00:26 +0000 Peter Kjellerstedt <pkj@axis.com>
+
+ tests/check/pipelines/streamheader.c: Do not try to run a test which requires vorbisenc unless we have actually built...
+ Original commit message from CVS:
+ * tests/check/pipelines/streamheader.c: (buffer_probe_cb),
+ (test_multifdsink_gdp_vorbisenc), (streamheader_suite):
+ Do not try to run a test which requires vorbisenc unless we have
+ actually built it.
+
+2008-06-04 05:58:38 +0000 Antoine Tremblay <hexa00@gmail.com>
+
+ gst/gdp/gstgdppay.c: Don't set caps on the buffers that contain a copy of the buffer including the caps of them resul...
+ Original commit message from CVS:
+ Patch by: Antoine Tremblay <hexa00 at gmail dot com>
+ * gst/gdp/gstgdppay.c: (gst_gdp_pay_reset_streamheader):
+ Don't set caps on the buffers that contain a copy of the buffer
+ including the caps of them resulting in an always increasing refcount
+ of the caps and insanely large caps. Instead include a buffer without
+ caps in the new caps. Fixes bug #536475.
+
+2008-05-22 22:09:16 +0000 Jan Schmidt <thaytan@mad.scientist.com>
+
+ Add some documentation comments, and some new headers to be scanned.
+ Original commit message from CVS:
+ * docs/plugins/Makefile.am:
+ * docs/plugins/gst-plugins-base-plugins-overrides.txt:
+ * docs/plugins/gst-plugins-base-plugins-sections.txt:
+ * docs/plugins/gst-plugins-base-plugins.args:
+ * docs/plugins/gst-plugins-base-plugins.hierarchy:
+ * docs/plugins/gst-plugins-base-plugins.interfaces:
+ * docs/plugins/gst-plugins-base-plugins.prerequisites:
+ * docs/plugins/inspect/plugin-adder.xml:
+ * docs/plugins/inspect/plugin-alsa.xml:
+ * docs/plugins/inspect/plugin-audioconvert.xml:
+ * docs/plugins/inspect/plugin-audiorate.xml:
+ * docs/plugins/inspect/plugin-audioresample.xml:
+ * docs/plugins/inspect/plugin-audiotestsrc.xml:
+ * docs/plugins/inspect/plugin-cdparanoia.xml:
+ * docs/plugins/inspect/plugin-decodebin.xml:
+ * docs/plugins/inspect/plugin-ffmpegcolorspace.xml:
+ * docs/plugins/inspect/plugin-gdp.xml:
+ * docs/plugins/inspect/plugin-gio.xml:
+ * docs/plugins/inspect/plugin-gnomevfs.xml:
+ * docs/plugins/inspect/plugin-libvisual.xml:
+ * docs/plugins/inspect/plugin-ogg.xml:
+ * docs/plugins/inspect/plugin-pango.xml:
+ * docs/plugins/inspect/plugin-playback.xml:
+ * docs/plugins/inspect/plugin-queue2.xml:
+ * docs/plugins/inspect/plugin-subparse.xml:
+ * docs/plugins/inspect/plugin-tcp.xml:
+ * docs/plugins/inspect/plugin-theora.xml:
+ * docs/plugins/inspect/plugin-typefindfunctions.xml:
+ * docs/plugins/inspect/plugin-uridecodebin.xml:
+ * docs/plugins/inspect/plugin-video4linux.xml:
+ * docs/plugins/inspect/plugin-videorate.xml:
+ * docs/plugins/inspect/plugin-videoscale.xml:
+ * docs/plugins/inspect/plugin-videotestsrc.xml:
+ * docs/plugins/inspect/plugin-volume.xml:
+ * docs/plugins/inspect/plugin-vorbis.xml:
+ * docs/plugins/inspect/plugin-ximagesink.xml:
+ * docs/plugins/inspect/plugin-xvimagesink.xml:
+ * ext/cdparanoia/gstcdparanoiasrc.c:
+ * ext/ogg/gstoggdemux.c:
+ * ext/ogg/gstoggdemux.h:
+ * ext/ogg/gstoggmux.c:
+ * ext/ogg/gstoggmux.h:
+ * gst/audioconvert/audioconvert.c:
+ * gst/audioconvert/audioconvert.h:
+ * gst/audioconvert/gstaudioconvert.h:
+ * gst/gdp/gstgdpdepay.h:
+ * gst/gdp/gstgdppay.h:
+ * gst/playback/gstdecodebin.c:
+ * gst/playback/gstdecodebin2.c:
+ * gst/playback/gstplaybin.c:
+ * gst/playback/gstplaybin2.c:
+ * gst/playback/gsturidecodebin.c:
+ * gst/tcp/gstmultifdsink.c:
+ * gst/tcp/gstmultifdsink.h:
+ * gst/tcp/gsttcp.h:
+ Add some documentation comments, and some new headers to be scanned.
+ Rename some internal enum declarations (audioconvert's DitherType and
+ NoiseShapingType, GstUnitType from the TCP elements) to match the
+ documented GObject type names so that the docs pick them up.
+ Name the playbin2 docs markups properly so they get picked up. They'll
+ need renaming back when/if playbin2 becomes playbin.
+ 100% symbol coverage for the plugin docs, booya.
+
+2008-05-21 16:36:50 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ Don't use bad gst_element_get_pad().
+ Original commit message from CVS:
+ * ext/ogg/gstoggdemux.c: (gst_ogg_pad_typefind):
+ * gst/playback/decodetest.c: (new_decoded_pad_cb):
+ * gst/playback/gstdecodebin.c: (gst_decode_bin_init),
+ (try_to_link_1), (elem_is_dynamic), (close_link), (type_found),
+ (cleanup_decodebin):
+ * gst/playback/gstdecodebin2.c: (gst_decode_bin_init),
+ (connect_element), (gst_decode_group_control_demuxer_pad):
+ * gst/playback/gstplaybasebin.c: (queue_remove_probe),
+ (queue_out_of_data), (gen_preroll_element), (preroll_unlinked),
+ (mute_group_type):
+ * gst/playback/gstplaybin.c: (gst_play_bin_vis_blocked),
+ (gst_play_bin_set_property), (handoff), (gen_video_element),
+ (gen_text_element), (gen_audio_element), (gen_vis_element),
+ (remove_sinks), (add_sink), (setup_sinks):
+ * gst/playback/gstplaybin2.c: (pad_added_cb), (no_more_pads_cb):
+ * gst/playback/gstplaysink.c: (gst_play_sink_get_video_sink),
+ (gst_play_sink_get_audio_sink), (gst_play_sink_vis_unblocked),
+ (gst_play_sink_vis_blocked), (gst_play_sink_set_vis_plugin),
+ (gst_play_sink_get_vis_plugin), (gst_play_sink_set_mute),
+ (gen_video_chain), (gen_text_chain), (gen_audio_chain),
+ (gen_vis_chain), (gst_play_sink_reconfigure),
+ (gst_play_sink_set_font_desc), (gst_play_sink_get_font_desc),
+ (gst_play_sink_request_pad):
+ * gst/playback/gsturidecodebin.c: (type_found), (setup_source):
+ * gst/playback/test.c: (gen_video_element), (gen_audio_element),
+ (cb_newpad):
+ * gst/playback/test6.c: (new_decoded_pad_cb):
+ * tests/check/elements/audioconvert.c: (GST_START_TEST):
+ * tests/check/elements/audiorate.c: (test_injector_chain),
+ (do_perfect_stream_test):
+ * tests/check/elements/ffmpegcolorspace.c: (GST_START_TEST):
+ * tests/check/elements/gdpdepay.c: (GST_START_TEST):
+ * tests/check/elements/gnomevfssink.c:
+ * tests/check/elements/textoverlay.c:
+ (notgst_check_setup_src_pad2), (notgst_check_teardown_src_pad2):
+ * tests/check/elements/videotestsrc.c: (GST_START_TEST):
+ * tests/check/libs/cddabasesrc.c: (GST_START_TEST):
+ * tests/check/pipelines/oggmux.c: (test_pipeline):
+ * tests/check/pipelines/streamheader.c: (GST_START_TEST):
+ * tests/check/pipelines/theoraenc.c: (GST_START_TEST):
+ * tests/check/pipelines/vorbisenc.c: (GST_START_TEST):
+ * tests/examples/seek/scrubby.c: (make_wav_pipeline):
+ * tests/examples/seek/seek.c: (make_mod_pipeline),
+ (make_dv_pipeline), (make_wav_pipeline), (make_flac_pipeline),
+ (make_sid_pipeline), (make_parse_pipeline), (make_vorbis_pipeline),
+ (make_theora_pipeline), (make_vorbis_theora_pipeline),
+ (make_avi_msmpeg4v3_mp3_pipeline), (make_mp3_pipeline),
+ (make_avi_pipeline), (make_mpeg_pipeline), (make_mpegnt_pipeline),
+ (update_fill), (msg_buffering):
+ Don't use bad gst_element_get_pad().
+
+2008-05-21 06:45:22 +0000 Antoine Tremblay <hexa00@gmail.com>
+
+ gst/gdp/gstgdppay.c: Close a buffer memory leak. Fixes bug #534071.
+ Original commit message from CVS:
+ Patch by: Antoine Tremblay <hexa00 at gmail dot com>
+ * gst/gdp/gstgdppay.c: (gst_gdp_pay_chain):
+ Close a buffer memory leak. Fixes bug #534071.
+
+2008-04-18 14:54:01 +0000 Edward Hervey <bilboed@bilboed.com>
+
+ gst/gdp/gstgdpdepay.c: Don't validate the payload if there isn't any.
+ Original commit message from CVS:
+ * gst/gdp/gstgdpdepay.c: (gst_gdp_depay_chain):
+ Don't validate the payload if there isn't any.
+ Fixes #525915
+
+2008-03-27 15:26:38 +0000 Michael Smith <msmith@xiph.org>
+
+ gst/gdp/gstgdpdepay.c: Check the body CRC (if set) when depayloading.
+ Original commit message from CVS:
+ * gst/gdp/gstgdpdepay.c: (gst_gdp_depay_chain):
+ Check the body CRC (if set) when depayloading.
+ Fixes #522401.
+
+2008-03-23 13:12:41 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ tests/check/elements/gdpdepay.c: Make test compile without unused function/variable warnings on PPC.
+ Original commit message from CVS:
+ * tests/check/elements/gdpdepay.c:
+ Make test compile without unused function/variable warnings on PPC.
+
+2008-03-22 15:00:53 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ Use G_PARAM_STATIC_STRINGS everywhere for GParamSpecs that use static strings (i.e. all). This gives us less memory u...
+ Original commit message from CVS:
+ * configure.ac:
+ * ext/alsa/gstalsamixerelement.c:
+ (gst_alsa_mixer_element_class_init):
+ * ext/alsa/gstalsasink.c: (gst_alsasink_class_init):
+ * ext/alsa/gstalsasrc.c: (gst_alsasrc_class_init):
+ * ext/cdparanoia/gstcdparanoiasrc.c:
+ (gst_cd_paranoia_src_class_init):
+ * ext/gio/gstgiosink.c: (gst_gio_sink_class_init):
+ * ext/gio/gstgiosrc.c: (gst_gio_src_class_init):
+ * ext/gio/gstgiostreamsink.c: (gst_gio_stream_sink_class_init):
+ * ext/gio/gstgiostreamsrc.c: (gst_gio_stream_src_class_init):
+ * ext/gnomevfs/gstgnomevfssink.c: (gst_gnome_vfs_sink_class_init):
+ * ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_class_init):
+ * ext/ogg/gstoggmux.c: (gst_ogg_mux_class_init):
+ * ext/pango/gsttextoverlay.c: (gst_text_overlay_class_init):
+ * ext/pango/gsttextrender.c: (gst_text_render_class_init):
+ * ext/theora/theoradec.c: (gst_theora_dec_class_init):
+ * ext/theora/theoraenc.c: (gst_theora_enc_class_init):
+ * ext/theora/theoraparse.c: (gst_theora_parse_class_init):
+ * ext/vorbis/vorbisenc.c: (gst_vorbis_enc_class_init):
+ * gst-libs/gst/audio/gstaudiofiltertemplate.c:
+ (gst_audio_filter_template_class_init):
+ * gst-libs/gst/audio/gstbaseaudiosink.c:
+ (gst_base_audio_sink_class_init):
+ * gst-libs/gst/audio/gstbaseaudiosrc.c:
+ (gst_base_audio_src_class_init):
+ * gst-libs/gst/cdda/gstcddabasesrc.c:
+ (gst_cdda_base_src_class_init):
+ * gst-libs/gst/interfaces/mixertrack.c:
+ (gst_mixer_track_class_init):
+ * gst-libs/gst/rtp/gstbasertpdepayload.c:
+ (gst_base_rtp_depayload_class_init):
+ * gst-libs/gst/rtp/gstbasertppayload.c:
+ (gst_basertppayload_class_init):
+ * gst/audioconvert/gstaudioconvert.c:
+ (gst_audio_convert_class_init):
+ * gst/audiorate/gstaudiorate.c: (gst_audio_rate_class_init):
+ * gst/audioresample/gstaudioresample.c:
+ (gst_audioresample_class_init):
+ * gst/audiotestsrc/gstaudiotestsrc.c:
+ (gst_audio_test_src_class_init):
+ * gst/gdp/gstgdppay.c: (gst_gdp_pay_class_init):
+ * gst/playback/gstdecodebin2.c: (gst_decode_bin_class_init):
+ * gst/playback/gstplaybasebin.c: (gst_play_base_bin_class_init),
+ (preroll_unlinked):
+ * gst/playback/gstplaybin.c: (gst_play_bin_class_init):
+ * gst/playback/gstplaybin2.c: (gst_play_bin_class_init):
+ * gst/playback/gstplaysink.c: (gst_play_sink_class_init):
+ * gst/playback/gstqueue2.c: (gst_queue_class_init):
+ * gst/playback/gststreaminfo.c: (gst_stream_info_class_init):
+ * gst/playback/gststreamselector.c: (gst_selector_pad_class_init),
+ (gst_stream_selector_class_init):
+ * gst/playback/gsturidecodebin.c: (gst_uri_decode_bin_class_init):
+ * gst/subparse/gstsubparse.c: (gst_sub_parse_class_init):
+ * gst/tcp/gstmultifdsink.c: (gst_multi_fd_sink_class_init):
+ * gst/tcp/gsttcpclientsink.c: (gst_tcp_client_sink_class_init):
+ * gst/tcp/gsttcpclientsrc.c: (gst_tcp_client_src_class_init):
+ * gst/tcp/gsttcpserversink.c: (gst_tcp_server_sink_class_init):
+ * gst/tcp/gsttcpserversrc.c: (gst_tcp_server_src_class_init):
+ * gst/videorate/gstvideorate.c: (gst_video_rate_class_init):
+ * gst/videoscale/gstvideoscale.c: (gst_video_scale_class_init):
+ * gst/videotestsrc/gstvideotestsrc.c:
+ (gst_video_test_src_class_init):
+ * gst/volume/gstvolume.c: (gst_volume_class_init):
+ * sys/v4l/gstv4lelement.c: (gst_v4lelement_class_init):
+ * sys/v4l/gstv4lmjpegsink.c: (gst_v4lmjpegsink_class_init):
+ * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_class_init):
+ * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_class_init):
+ * sys/ximage/ximagesink.c: (gst_ximagesink_class_init):
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_class_init):
+ Use G_PARAM_STATIC_STRINGS everywhere for GParamSpecs that use
+ static strings (i.e. all). This gives us less memory usage,
+ fewer allocations and thus less memory defragmentation. Depend
+ on core CVS for this. Fixes bug #523806.
+
+2008-03-03 06:04:31 +0000 Sebastian Dröge <slomo@circular-chaos.org>
+
+ Correct all relevant warnings found by the sparse semantic code analyzer. This include marking several symbols static...
+ Original commit message from CVS:
+ * ext/alsa/gstalsamixertrack.c: (gst_alsa_mixer_track_get_type):
+ * ext/alsa/gstalsasink.c: (set_hwparams):
+ * ext/alsa/gstalsasrc.c: (set_hwparams):
+ * ext/gio/gstgio.c: (gst_gio_uri_handler_get_uri):
+ * ext/ogg/gstoggmux.h:
+ * ext/ogg/gstogmparse.c:
+ * gst-libs/gst/audio/audio.c:
+ * gst-libs/gst/fft/kiss_fft_f64.c: (kiss_fft_f64_alloc):
+ * gst-libs/gst/pbutils/missing-plugins.c:
+ (gst_missing_uri_sink_message_new),
+ (gst_missing_element_message_new),
+ (gst_missing_decoder_message_new),
+ (gst_missing_encoder_message_new):
+ * gst-libs/gst/rtp/gstbasertppayload.c:
+ * gst-libs/gst/rtp/gstrtcpbuffer.c:
+ (gst_rtcp_packet_bye_get_reason):
+ * gst/audioconvert/gstaudioconvert.c:
+ * gst/audioresample/gstaudioresample.c:
+ * gst/ffmpegcolorspace/imgconvert.c:
+ * gst/playback/test.c: (gen_video_element), (gen_audio_element):
+ * gst/typefind/gsttypefindfunctions.c:
+ * gst/videoscale/vs_4tap.c:
+ * gst/videoscale/vs_4tap.h:
+ * sys/v4l/gstv4lelement.c:
+ * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_get_any_caps):
+ * sys/v4l/v4l_calls.c:
+ * sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_capture_init),
+ (gst_v4lsrc_try_capture):
+ * sys/ximage/ximagesink.c: (gst_ximagesink_check_xshm_calls),
+ (gst_ximagesink_ximage_new):
+ * sys/xvimage/xvimagesink.c: (gst_xvimagesink_check_xshm_calls),
+ (gst_xvimagesink_xvimage_new):
+ * tests/check/elements/audioconvert.c:
+ * tests/check/elements/audioresample.c:
+ (fail_unless_perfect_stream):
+ * tests/check/elements/audiotestsrc.c: (setup_audiotestsrc):
+ * tests/check/elements/decodebin.c:
+ * tests/check/elements/gdpdepay.c: (setup_gdpdepay),
+ (setup_gdpdepay_streamheader):
+ * tests/check/elements/gdppay.c: (setup_gdppay), (GST_START_TEST),
+ (setup_gdppay_streamheader):
+ * tests/check/elements/gnomevfssink.c: (setup_gnomevfssink):
+ * tests/check/elements/multifdsink.c: (setup_multifdsink):
+ * tests/check/elements/textoverlay.c:
+ * tests/check/elements/videorate.c: (setup_videorate):
+ * tests/check/elements/videotestsrc.c: (setup_videotestsrc):
+ * tests/check/elements/volume.c: (setup_volume):
+ * tests/check/elements/vorbisdec.c: (setup_vorbisdec):
+ * tests/check/elements/vorbistag.c:
+ * tests/check/generic/clock-selection.c:
+ * tests/check/generic/states.c: (setup), (teardown):
+ * tests/check/libs/cddabasesrc.c:
+ * tests/check/libs/video.c:
+ * tests/check/pipelines/gio.c:
+ * tests/check/pipelines/oggmux.c:
+ * tests/check/pipelines/simple-launch-lines.c:
+ (simple_launch_lines_suite):
+ * tests/check/pipelines/streamheader.c:
+ * tests/check/pipelines/theoraenc.c:
+ * tests/check/pipelines/vorbisdec.c:
+ * tests/check/pipelines/vorbisenc.c:
+ * tests/examples/seek/scrubby.c:
+ * tests/examples/seek/seek.c: (query_positions_elems),
+ (query_positions_pads):
+ * tests/icles/stress-xoverlay.c: (myclock):
+ Correct all relevant warnings found by the sparse semantic code
+ analyzer. This include marking several symbols static, using
+ NULL instead of 0 for pointers and using "foo (void)" instead
+ of "foo ()" for declarations.
+ * win32/common/libgstrtp.def:
+ Add gst_rtp_buffer_set_extension_data to the symbol definition file.
+
+2007-06-14 19:53:27 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ tests/check/pipelines/streamheader.c: Disable test_multifdsink_gdp_vorbisenc() on ppc64 since it fails on the p5-ppc6...
+ Original commit message from CVS:
+ * tests/check/pipelines/streamheader.c: (streamheader_suite):
+ Disable test_multifdsink_gdp_vorbisenc() on ppc64 since it
+ fails on the p5-ppc64 build bot and the failure looks like it is due
+ to the same issue as #348114, ie. a compiler bug.
+
+2007-04-14 12:34:55 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ gst/gdp/gstgdppay.c (gst_gdp_pay_chain): tests/check/pipelines/streamheader.c (tag_event_probe_cb,
+ Original commit message from CVS:
+ * gst/gdp/gstgdppay.c (gst_gdp_pay_chain):
+ * tests/check/pipelines/streamheader.c (tag_event_probe_cb,
+ GST_START_TEST, buffer_probe_cb, GST_START_TEST):
+ Fix a bug where serialized IN_CAPS buffers needed to be set IN_CAPS.
+
+2007-04-13 21:55:31 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * tests/check/pipelines/streamheader.c:
+ tests/check/pipelines/streamheader.c (tag_event_probe_cb,
+ Original commit message from CVS:
+ * tests/check/pipelines/streamheader.c (tag_event_probe_cb,
+ GST_START_TEST, n_in_caps, buffer_probe_cb, GST_START_TEST,
+ streamheader_suite):
+ Add another test set up for failure
+
+2007-04-13 21:09:04 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * gst/gdp/gstgdpdepay.c:
+ debug changes
+ Original commit message from CVS:
+ debug changes
+
+2007-04-13 21:08:11 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ tests/check/Makefile.am: tests/check/pipelines/streamheader.c (n_tags, tag_event_probe_cb,
+ Original commit message from CVS:
+ * tests/check/Makefile.am:
+ * tests/check/pipelines/streamheader.c (n_tags, tag_event_probe_cb,
+ GST_START_TEST, streamheader_suite, main):
+ Add a test for the streamheader bug Wim fixed.
+
+2007-04-12 10:03:22 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/gdp/gstgdppay.c: Make sure we set the IN_CAPS flag correctly.
+ Original commit message from CVS:
+ * gst/gdp/gstgdppay.c: (gst_gdp_pay_chain),
+ (gst_gdp_pay_sink_event):
+ Make sure we set the IN_CAPS flag correctly.
+ * gst/tcp/gstmultifdsink.c: (gst_multi_fd_sink_render):
+ Get the IN_CAPS flag before we call functions that mess with the flags.
+
+2007-04-10 20:37:05 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * gst/gdp/gstgdppay.c:
+ gst/gdp/gstgdppay.c (gst_gdp_pay_reset_streamheader, gst_gdp_pay_chain, gst_gdp_pay_sink_event):
+ Original commit message from CVS:
+ * gst/gdp/gstgdppay.c (gst_gdp_pay_reset_streamheader,
+ gst_gdp_pay_chain, gst_gdp_pay_sink_event):
+ Only stamp buffers with offset/offset_end right before they get
+ pushed. This ensures offset continuity, which was not the case
+ before as shown by
+ gst-launch -v -m audiotestsrc num-buffers=10 ! audioconvert ! vorbisenc ! gdppay ! identity check-imperfect-offset=TRUE ! fakesink silent=TRUE
+
+2007-04-10 20:25:06 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * gst/gdp/gstgdpdepay.c:
+ * gst/gdp/gstgdppay.c:
+ adding debugging
+ Original commit message from CVS:
+ adding debugging
+
+2007-03-14 15:05:32 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * gst/gdp/gstgdpdepay.c:
+ add buffer logging
+ Original commit message from CVS:
+ add buffer logging
+
+2006-12-22 12:10:18 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ tests/check/elements/: Fix the dp tests, but activating the pads for the streamheader tests too and cleaning up condi...
+ Original commit message from CVS:
+ * tests/check/elements/gdpdepay.c: (cleanup_gdpdepay),
+ (setup_gdpdepay_streamheader):
+ * tests/check/elements/gdppay.c: (cleanup_gdppay),
+ (setup_gdppay_streamheader):
+ Fix the dp tests, but activating the pads for the streamheader tests
+ too and cleaning up conditionaly
+
+2006-12-21 08:12:26 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ tests/check/elements/: consistent pad (de)activation
+ Original commit message from CVS:
+ * tests/check/elements/audioresample.c: (cleanup_audioresample):
+ * tests/check/elements/audiotestsrc.c: (cleanup_audiotestsrc):
+ * tests/check/elements/gdpdepay.c: (setup_gdpdepay),
+ (cleanup_gdpdepay):
+ * tests/check/elements/gdppay.c: (setup_gdppay), (cleanup_gdppay):
+ * tests/check/elements/subparse.c: (teardown_subparse):
+ * tests/check/elements/textoverlay.c: (cleanup_textoverlay):
+ * tests/check/elements/videorate.c: (cleanup_videorate):
+ * tests/check/elements/videotestsrc.c: (cleanup_videotestsrc):
+ * tests/check/elements/volume.c: (cleanup_volume):
+ * tests/check/elements/vorbisdec.c: (setup_vorbisdec),
+ (cleanup_vorbisdec):
+ * tests/check/elements/vorbistag.c: (setup_vorbistag),
+ (cleanup_vorbistag):
+ consistent pad (de)activation
+
+2006-09-21 05:31:00 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ tests/check/: Some more compilation fixes.
+ Original commit message from CVS:
+ * tests/check/elements/gdpdepay.c: (GST_START_TEST):
+ * tests/check/libs/audio.c:
+ Some more compilation fixes.
+
+2006-09-20 17:04:57 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ tests/check/: Fix some warnings.
+ Original commit message from CVS:
+ * tests/check/elements/gdpdepay.c: (GST_START_TEST):
+ * tests/check/elements/multifdsink.c: (GST_START_TEST):
+ * tests/check/elements/videorate.c: (GST_START_TEST):
+ * tests/check/libs/cddabasesrc.c: (GST_START_TEST):
+ * tests/check/pipelines/oggmux.c: (eos_buffer_probe):
+ Fix some warnings.
+
+2006-08-25 16:19:55 +0000 Michael Smith <msmith@xiph.org>
+
+ gst/gdp/gstgdppay.c: Fix memory leaks and misleading debug messages, add a couple of comments.
+ Original commit message from CVS:
+ * gst/gdp/gstgdppay.c: (gst_gdp_pay_reset),
+ (gst_gdp_pay_reset_streamheader), (gst_gdp_pay_chain):
+ Fix memory leaks and misleading debug messages, add a couple of
+ comments.
+ * gst/tcp/gstmultifdsink.c: (gst_multi_fd_sink_get_stats),
+ (gst_multi_fd_sink_render):
+ Do not use gst_buffer_make_writable() in a basesink render method,
+ as it may incorrectly unref the buffer. Instead, use convoluted
+ dance to avoid copying the buffer except when we need to.
+
+2006-08-21 19:04:14 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * gst/gdp/README:
+ adding a README
+ Original commit message from CVS:
+ adding a README
+
+2006-08-21 19:01:41 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ Move GDP plugin to -base from -bad. Closes #347783.
+ Original commit message from CVS:
+ * configure.ac:
+ * docs/plugins/Makefile.am:
+ * docs/plugins/gst-plugins-base-plugins-docs.sgml:
+ * docs/plugins/gst-plugins-base-plugins-sections.txt:
+ * docs/plugins/inspect/plugin-gdp.xml:
+ * gst/gdp/Makefile.am:
+ * tests/check/Makefile.am:
+ Move GDP plugin to -base from -bad. Closes #347783.
+
+2006-08-08 13:57:29 +0000 Edward Hervey <bilboed@bilboed.com>
+
+ tests/check/elements/gdpdepay.c: I forgot to include the file containing the #define :)
+ Original commit message from CVS:
+ * tests/check/elements/gdpdepay.c: (gdpdepay_suite):
+ I forgot to include the file containing the #define :)
+ Now includes "config.h"
+
+2006-08-08 13:45:44 +0000 Edward Hervey <bilboed@bilboed.com>
+
+ tests/check/elements/gdpdepay.c: Ignore test known to fail on PPC64. See #348114.
+ Original commit message from CVS:
+ * tests/check/elements/gdpdepay.c: (gdpdepay_suite):
+ Ignore test known to fail on PPC64. See #348114.
+
+2006-08-04 13:20:23 +0000 Zaheer Abbas Merali <zaheerabbas@merali.org>
+
+ gst/gdp/gstgdpdepay.c: Fix event parsing by gdpdepay. Fixes #349916.
+ Original commit message from CVS:
+ 2006-08-04 Zaheer Abbas Merali <zaheerabbas at merali dot org>
+ * gst/gdp/gstgdpdepay.c: (gst_gdp_depay_chain):
+ Fix event parsing by gdpdepay. Fixes #349916.
+
+2006-08-02 16:56:19 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/gdp/gstgdpdepay.c: Disable seeking.
+ Original commit message from CVS:
+ * gst/gdp/gstgdpdepay.c: (gst_gdp_depay_init),
+ (gst_gdp_depay_finalize), (gst_gdp_depay_sink_event),
+ (gst_gdp_depay_src_event), (gst_gdp_depay_chain),
+ (gst_gdp_depay_change_state):
+ Disable seeking.
+ Small cleanups.
+ Clear adapter on disconts.
+ Clear caps when going to READY instead of NULL
+ * gst/gdp/gstgdppay.c: (gst_gdp_pay_class_init),
+ (gst_gdp_pay_init), (gst_gdp_pay_finalize), (gst_gdp_pay_reset),
+ (gst_gdp_buffer_from_caps), (gst_gdp_pay_buffer_from_buffer),
+ (gst_gdp_buffer_from_event), (gst_gdp_pay_reset_streamheader),
+ (gst_gdp_queue_buffer), (gst_gdp_pay_chain),
+ (gst_gdp_pay_sink_event), (gst_gdp_pay_src_event),
+ (gst_gdp_pay_change_state):
+ * gst/gdp/gstgdppay.h:
+ Reset payloader when going to READY.
+ Fix leaked buffers in ->queue on push errors.
+ Disable seeking.
+ Code cleanups.
+ Create packetizer in _init, free in _finalize.
+
+2006-07-31 08:48:36 +0000 Wim Taymans <wim.taymans@gmail.com>
+
+ gst/gdp/gstgdpdepay.c: Consume all events except EOS because we generate events from the gdp payload instead. Fixes #...
+ Original commit message from CVS:
+ * gst/gdp/gstgdpdepay.c: (gst_gdp_depay_init),
+ (gst_gdp_depay_sink_event), (gst_gdp_depay_chain):
+ Consume all events except EOS because we generate events from
+ the gdp payload instead. Fixes #349204
+
+2006-07-26 10:52:05 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ gst/gdp/gstgdpdepay.c: proxying get/set caps is the wrong thing to do, since we really do change caps quite fundament...
+ Original commit message from CVS:
+ * gst/gdp/gstgdpdepay.c: (gst_gdp_depay_init):
+ proxying get/set caps is the wrong thing to do, since we really
+ do change caps quite fundamentally
+ * tests/check/elements/gdpdepay.c:
+ * tests/check/elements/gdppay.c:
+ remove declaration of buffers, it's already done in gstcheck.h
+
+2006-07-17 14:17:45 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ gst/gdp/: remove parent_class setting, BOILERPLATE does this fix typo in comment
+ Original commit message from CVS:
+ 2006-07-17 Thomas Vander Stichele <thomas at apestaart dot org>
+ * gst/gdp/gstgdpdepay.c: (gst_gdp_depay_class_init):
+ * gst/gdp/gstgdppay.c: (gst_gdp_pay_class_init),
+ remove parent_class setting, BOILERPLATE does this
+ (gst_gdp_pay_reset_streamheader):
+ fix typo in comment
+
+2006-07-14 10:34:36 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * gst/gdp/Makefile.am:
+ build as a plugin, not a lib
+ Original commit message from CVS:
+ build as a plugin, not a lib
+
+2006-07-13 15:25:58 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ docs/plugins/: add more plugins and elements to docs
+ Original commit message from CVS:
+ * docs/plugins/Makefile.am:
+ * docs/plugins/gst-plugins-bad-plugins-docs.sgml:
+ * docs/plugins/gst-plugins-bad-plugins-sections.txt:
+ add more plugins and elements to docs
+ * gst/gdp/gstgdpdepay.c: (gst_gdp_depay_chain):
+ fix segfaults due to wrong g_free
+ add example
+ * gst/gdp/gstgdppay.c:
+ add example
+
+2006-06-23 09:09:44 +0000 Tim-Philipp Müller <tim@centricular.net>
+
+ Use GST_DEBUG_CATEGORY_STATIC where possible (#342503) and fix one GObject boilerplate macro.
+ Original commit message from CVS:
+ * ext/directfb/dfbvideosink.c:
+ * ext/gsm/gstgsmdec.c:
+ * ext/gsm/gstgsmenc.c:
+ * ext/libmms/gstmms.c:
+ * ext/neon/gstneonhttpsrc.c:
+ * ext/theora/theoradec.c:
+ * gst/freeze/gstfreeze.c:
+ * gst/gdp/gstgdpdepay.c:
+ * gst/gdp/gstgdppay.c:
+ * sys/glsink/glimagesink.c:
+ Use GST_DEBUG_CATEGORY_STATIC where possible (#342503)
+ and fix one GObject boilerplate macro.
+
+2006-06-06 16:26:59 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * gst/gdp/gstgdppay.c:
+ adapt to new api
+ Original commit message from CVS:
+ adapt to new api
+
+2006-06-06 14:39:15 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ configure.ac: enable building of GDP elements
+ Original commit message from CVS:
+ * configure.ac:
+ enable building of GDP elements
+ * gst/gdp/gstgdpdepay.c: (gst_gdp_depay_chain):
+ * gst/gdp/gstgdppay.c: (gst_gdp_pay_class_init),
+ (gst_gdp_pay_init), (gst_gdp_buffer_from_caps),
+ (gst_gdp_pay_buffer_from_buffer), (gst_gdp_buffer_from_event),
+ (gst_gdp_pay_reset_streamheader), (gst_gdp_pay_sink_event),
+ (gst_gdp_pay_set_property), (gst_gdp_pay_get_property),
+ (gst_gdp_pay_change_state):
+ * gst/gdp/gstgdppay.h:
+ add version 1.0
+
+2006-06-02 16:45:59 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ * gst/gdp/gstgdpdepay.c:
+ * gst/gdp/gstgdppay.h:
+ small fixes
+ Original commit message from CVS:
+ small fixes
+
+2006-06-02 10:28:32 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ gst/gdp/gstgdppay.c: add crc-header and crc-payload properties don't error out on some things that are recoverable
+ Original commit message from CVS:
+ * gst/gdp/gstgdppay.c: (gst_gdp_pay_class_init),
+ (gst_gdp_pay_init), (gst_gdp_buffer_from_caps),
+ (gst_gdp_pay_buffer_from_buffer), (gst_gdp_buffer_from_event),
+ (gst_gdp_pay_reset_streamheader), (gst_gdp_pay_chain),
+ (gst_gdp_pay_sink_event), (gst_gdp_pay_set_property),
+ (gst_gdp_pay_get_property):
+ add crc-header and crc-payload properties
+ don't error out on some things that are recoverable
+ * tests/check/elements/gdppay.c: (GST_START_TEST), (gdppay_suite):
+ add test for crc
+
+2006-06-01 22:00:23 +0000 Stefan Kost <ensonic@users.sourceforge.net>
+
+ Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass
+ Original commit message from CVS:
+ * ext/alsaspdif/alsaspdifsink.h:
+ * ext/amrwb/gstamrwbdec.h:
+ * ext/amrwb/gstamrwbenc.h:
+ * ext/amrwb/gstamrwbparse.h:
+ * ext/arts/gst_arts.h:
+ * ext/artsd/gstartsdsink.h:
+ * ext/audiofile/gstafparse.h:
+ * ext/audiofile/gstafsink.h:
+ * ext/audiofile/gstafsrc.h:
+ * ext/audioresample/gstaudioresample.h:
+ * ext/bz2/gstbz2dec.h:
+ * ext/bz2/gstbz2enc.h:
+ * ext/dirac/gstdiracdec.h:
+ * ext/directfb/dfbvideosink.h:
+ * ext/divx/gstdivxdec.h:
+ * ext/divx/gstdivxenc.h:
+ * ext/dts/gstdtsdec.h:
+ * ext/faac/gstfaac.h:
+ * ext/gsm/gstgsmdec.h:
+ * ext/gsm/gstgsmenc.h:
+ * ext/ivorbis/vorbisenc.h:
+ * ext/libfame/gstlibfame.h:
+ * ext/nas/nassink.h:
+ * ext/neon/gstneonhttpsrc.h:
+ * ext/polyp/polypsink.h:
+ * ext/sdl/sdlaudiosink.h:
+ * ext/sdl/sdlvideosink.h:
+ * ext/shout/gstshout.h:
+ * ext/snapshot/gstsnapshot.h:
+ * ext/sndfile/gstsf.h:
+ * ext/swfdec/gstswfdec.h:
+ * ext/tarkin/gsttarkindec.h:
+ * ext/tarkin/gsttarkinenc.h:
+ * ext/theora/theoradec.h:
+ * ext/wavpack/gstwavpackdec.h:
+ * ext/wavpack/gstwavpackparse.h:
+ * ext/xine/gstxine.h:
+ * ext/xvid/gstxviddec.h:
+ * ext/xvid/gstxvidenc.h:
+ * gst/cdxaparse/gstcdxaparse.h:
+ * gst/cdxaparse/gstcdxastrip.h:
+ * gst/colorspace/gstcolorspace.h:
+ * gst/festival/gstfestival.h:
+ * gst/freeze/gstfreeze.h:
+ * gst/gdp/gstgdpdepay.h:
+ * gst/gdp/gstgdppay.h:
+ * gst/modplug/gstmodplug.h:
+ * gst/mpeg1sys/gstmpeg1systemencode.h:
+ * gst/mpeg1videoparse/gstmp1videoparse.h:
+ * gst/mpeg2sub/gstmpeg2subt.h:
+ * gst/mpegaudioparse/gstmpegaudioparse.h:
+ * gst/multifilesink/gstmultifilesink.h:
+ * gst/overlay/gstoverlay.h:
+ * gst/playondemand/gstplayondemand.h:
+ * gst/qtdemux/qtdemux.h:
+ * gst/rtjpeg/gstrtjpegdec.h:
+ * gst/rtjpeg/gstrtjpegenc.h:
+ * gst/smooth/gstsmooth.h:
+ * gst/smoothwave/gstsmoothwave.h:
+ * gst/spectrum/gstspectrum.h:
+ * gst/speed/gstspeed.h:
+ * gst/stereo/gststereo.h:
+ * gst/switch/gstswitch.h:
+ * gst/tta/gstttadec.h:
+ * gst/tta/gstttaparse.h:
+ * gst/videodrop/gstvideodrop.h:
+ * gst/xingheader/gstxingmux.h:
+ * sys/directdraw/gstdirectdrawsink.h:
+ * sys/directsound/gstdirectsoundsink.h:
+ * sys/dxr3/dxr3audiosink.h:
+ * sys/dxr3/dxr3spusink.h:
+ * sys/dxr3/dxr3videosink.h:
+ * sys/qcam/gstqcamsrc.h:
+ * sys/vcd/vcdsrc.h:
+ Fix more gobject macros: obj<->klass, GstXXX<->GstXXXClass
+
+2006-05-22 15:53:07 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ gst/gdp/: Handle error cases when calling functions do downwards state change after parent's change_state
+ Original commit message from CVS:
+ * gst/gdp/gstgdpdepay.c: (gst_gdp_depay_chain),
+ (gst_gdp_depay_change_state):
+ * gst/gdp/gstgdpdepay.h:
+ * gst/gdp/gstgdppay.c: (gst_gdp_pay_reset_streamheader),
+ (gst_gdp_pay_chain), (gst_gdp_pay_sink_event),
+ (gst_gdp_pay_change_state):
+ * gst/gdp/gstgdppay.h:
+ Handle error cases when calling functions
+ do downwards state change after parent's change_state
+ * tests/check/elements/gdpdepay.c: (GST_START_TEST):
+ * tests/check/elements/gdppay.c: (GST_START_TEST):
+ clean up more
+
+2006-05-22 13:25:52 +0000 Thomas Vander Stichele <thomas@apestaart.org>
+
+ adding GDP payloader and depayloader. Build integration will follow later when the GDP issues for core are sorted out.
+ Original commit message from CVS:
+ * gst/gdp/Makefile.am:
+ * gst/gdp/gstgdp.c: (plugin_init):
+ * gst/gdp/gstgdpdepay.c: (gst_gdp_depay_base_init),
+ (gst_gdp_depay_class_init), (gst_gdp_depay_init),
+ (gst_gdp_depay_finalize), (gst_gdp_depay_chain),
+ (gst_gdp_depay_change_state), (gst_gdp_depay_plugin_init):
+ * gst/gdp/gstgdpdepay.h:
+ * gst/gdp/gstgdppay.c: (gst_gdp_pay_base_init),
+ (gst_gdp_pay_class_init), (gst_gdp_pay_init),
+ (gst_gdp_pay_dispose), (gst_gdp_stamp_buffer),
+ (gst_gdp_buffer_from_caps), (gst_gdp_pay_buffer_from_buffer),
+ (gst_gdp_buffer_from_event), (gst_gdp_pay_reset_streamheader),
+ (gst_gdp_queue_buffer), (gst_gdp_pay_chain),
+ (gst_gdp_pay_sink_event), (gst_gdp_pay_change_state),
+ (gst_gdp_pay_plugin_init):
+ * gst/gdp/gstgdppay.h:
+ * tests/check/Makefile.am:
+ * tests/check/elements/gdpdepay.c: (setup_gdpdepay),
+ (cleanup_gdpdepay), (gdpdepay_push_per_byte), (GST_START_TEST),
+ (setup_gdpdepay_streamheader), (gdpdepay_suite), (main):
+ * tests/check/elements/gdppay.c: (setup_gdppay), (cleanup_gdppay),
+ (GST_START_TEST), (setup_gdppay_streamheader), (gdppay_suite),
+ (main):
+ adding GDP payloader and depayloader. Build integration will
+ follow later when the GDP issues for core are sorted out.
+
+2012-09-10 20:38:14 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * gst/rtpmux/gstrtpmux.c:
+ * tests/check/elements/rtpmux.c:
+ rtpmux: Misc fix for 0.11
+ Convert the incoming caps before proxying them
+ Clear the last_pad when going to ready
+ tests: Implement accept_caps, don't leak event
+
+2012-09-10 16:12:39 -0400 Olivier Crête <olivier.crete@collabora.com>
+
+ * sys/uvch264/Makefile.am:
+ * sys/uvch264/gstuvch264-marshal.list:
+ * sys/uvch264/gstuvch264_src.c:
+ uvch264src: Use generic marshaller
+
+2012-09-10 16:09:26 -0400 Youness Alaoui <youness.alaoui@collabora.co.uk>
+
+ * configure.ac:
+ * sys/Makefile.am:
+ * sys/uvch264/Makefile.am:
+ * sys/uvch264/gstuvch264-marshal.list:
+ * sys/uvch264/gstuvch264.c:
+ * sys/uvch264/gstuvch264_mjpgdemux.c:
+ * sys/uvch264/gstuvch264_mjpgdemux.h:
+ * sys/uvch264/gstuvch264_src.c:
+ * sys/uvch264/gstuvch264_src.h:
+ * sys/uvch264/uvc_h264.c:
+ * sys/uvch264/uvc_h264.h:
+ * tests/check/Makefile.am:
+ * tests/check/elements/.gitignore:
+ * tests/check/elements/uvch264demux.c:
+ * tests/check/elements/uvch264demux_data/valid_h264_jpg.h264:
+ * tests/check/elements/uvch264demux_data/valid_h264_jpg.jpg:
+ * tests/check/elements/uvch264demux_data/valid_h264_jpg.mjpg:
+ * tests/check/elements/uvch264demux_data/valid_h264_yuy2.h264:
+ * tests/check/elements/uvch264demux_data/valid_h264_yuy2.mjpg:
+ * tests/check/elements/uvch264demux_data/valid_h264_yuy2.yuy2:
+ * tests/examples/Makefile.am:
+ * tests/examples/uvch264/Makefile.am:
+ * tests/examples/uvch264/boolean_property.glade:
+ * tests/examples/uvch264/enum_property.glade:
+ * tests/examples/uvch264/enum_property_gtk2.glade:
+ * tests/examples/uvch264/int_property.glade:
+ * tests/examples/uvch264/test-uvch264.c:
+ * tests/examples/uvch264/window.glade:
+ UVC H264 plugin
+
+2012-09-09 23:52:41 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * ext/opencv/gstmotioncells.c:
+ opencv: disable motioncells "date" property for now
+ Shouldn't be of type long. Not sure it's useful at all, so
+ just disable it for now to see if someone misses it.
+
+2012-09-09 14:35:51 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * configure.ac:
+ configure: remove non-existant hlssink plugin from NONPORTED list
+
+2012-09-08 16:08:21 -0700 David Schleef <ds@schleef.org>
+
+ * sys/decklink/gstdecklinksink.cpp:
+ decklinksink: Fix memory leak
+
+2012-09-08 15:57:57 -0700 David Schleef <ds@schleef.org>
+
+ * gst/inter/gstinteraudiosink.c:
+ * gst/inter/gstinteraudiosrc.c:
+ inter: fix leaks in audiosrc/sink
+
+2012-09-08 17:03:33 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * gst/videoparsers/gstmpeg4videoparse.c:
+ mpeg4videoparse: Don't override upstream framerate and PAR
+ If upstream provided some, there's a good chance they are the ones to use
+
+2012-09-08 14:43:37 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * gst/hls/Makefile.am:
+ * gst/hls/gstfragmentedplugin.c:
+ hls: disable hlssink but do build hlsdemux
+
+2012-09-08 14:31:57 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ Revert "configure.ac: Properly disable HLS plugin"
+ This reverts commit 3ad3445a25f31bc0d0167a4f413791bea8006783.
+ This disabled hlsdemux as well
+
+2012-09-08 14:05:08 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * configure.ac:
+ configure.ac: Properly disable HLS plugin
+
+2012-09-07 16:08:57 +0200 Robert Swain <robert.swain@collabora.co.uk>
+
+ * gst/hls/Makefile.am:
+ hls: Add missing GST_PLUGINS_BASE_CFLAGS
+
+2012-09-07 16:07:40 +0200 Robert Swain <robert.swain@collabora.co.uk>
+
+ * gst/hls/gsthlssink.c:
+ * gst/hls/gsthlssink.h:
+ hlssink: Add segment target-duration property
+ This property causes hlssink to push a force key unit event upstream
+ every target-duration seconds. This is for simple automatic segmenting.
+ To disable it, set the property to 0 and push the force key unit event
+ manually.
+
+2011-08-21 11:00:51 +0200 Alessandro Decina <alessandro.d@gmail.com>
+
+ * configure.ac:
+ * gst/hls/Makefile.am:
+ * gst/hls/gstfragmentedplugin.c:
+ * gst/hls/gsthlssink.c:
+ * gst/hls/gsthlssink.h:
+ * gst/hls/gstm3u8playlist.c:
+ * gst/hls/gstm3u8playlist.h:
+ hls: add hlssink element
+
+2012-09-06 01:53:07 -0300 Thiago Santos <thiago.sousa.santos@collabora.com>
+
+ * gst/camerabin2/gstcamerabin2.c:
+ camerabin2: use correct variable when handling pad probe buffers
+ Pad probe data is in the GstPadProbeInfo, not in the user data
+ parameter.
+
+2012-09-03 19:25:52 +0100 Rico Tzschichholz <ricotz@t-online.de>
+
+ * ext/mythtv/gstmythtvsrc.c:
+ mythtv: update for duration message API change
+
+2012-09-03 14:21:19 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * ext/schroedinger/gstschroenc.c:
+ schroenc: set interlace_coding based on input caps
+ and remove property.
+
+2012-09-03 14:04:40 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * ext/schroedinger/gstschroenc.c:
+ schroenc: configure profile/level from allowed downstream caps instead of properties
+ This is how it's done elsewhere and works better with encodebin.
+ Removes "force-profile" property, read-only "profile" property and
+ "level" property.
+ https://bugzilla.gnome.org/show_bug.cgi?id=670608
+
+2012-09-03 13:58:16 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * gst/videoparsers/gstdiracparse.c:
+ diracparse: fix main profile mapping
+
+2012-09-03 13:04:01 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * ext/schroedinger/gstschroenc.c:
+ schroenc: prettify enum property nicks
+ Use '-' instead of '_' as word separator.
+
+2012-09-03 12:41:33 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * gst/videoparsers/gstdiracparse.c:
+ diracparse: change "interlaced" boolean in caps to "interlace-mode"
+ Not strictly needed, but let's make it consistent with the raw
+ video way of doing things.
+
+2012-09-03 12:33:51 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * gst/videoparsers/gstdiracparse.c:
+ diracparse: use strings for profile and level in caps
+ For consistency with most other formats.
+ https://bugzilla.gnome.org/show_bug.cgi?id=658436
+
+2012-09-02 12:36:37 +0300 Sreerenj Balachandran <sreerenj.balachandran@intel.com>
+
+ * ext/spc/gstspc.c:
+ spc: No need to define GLIB_DISABLE_DEPRECATION_WARNINGS
+ https://bugzilla.gnome.org/show_bug.cgi?id=683175
+
+2012-09-02 03:55:35 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * gst/id3tag/id3tag.c:
+ id3tag: extract year to write into ID3v1 tag from GST_TAG_DATE_TIME not GST_TAG_DATE
+
+2012-09-01 21:46:19 +0200 Matej Knopp <matej.knopp@gmail.com>
+
+ * gst/videoparsers/gstmpeg4videoparse.c:
+ * gst/videoparsers/gstmpeg4videoparse.h:
+ mpeg4videoparse: set 0 duration when vop_coded is 0
+ https://bugzilla.gnome.org/show_bug.cgi?id=683169
+
+2012-09-02 01:42:30 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * ext/resindvd/resindvdsrc.c:
+ * ext/soundtouch/gstpitch.cc:
+ * gst/hls/gsthlsdemux.c:
+ gst_message_new_duration -> gst_message_new_duration_changed
+
+2012-09-01 09:12:51 -0700 Jan Schmidt <thaytan@noraisin.net>
+
+ * gst/autoconvert/gstautoconvert.c:
+ autoconvert: Handle caps query on internal srcpad
+ Reply with ANY caps to ensure linking the internal src pad. This
+ might need more attention later, to reply with the real upstream caps
+ for the currently active element.
+
+2012-08-31 15:28:29 -0700 Jan Schmidt <thaytan@noraisin.net>
+
+ * ext/resindvd/gstmpegdemux.c:
+ * gst/mpegdemux/gstmpegdemux.c:
+ resindvd/mpegdemux: Send both PTS and DTS downstream
+ Now that we can.
+
+2012-09-02 00:04:18 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * ext/spc/gstspc.c:
+ spc: don't leak buffer in case of an init error
+
+2012-09-02 00:34:38 +0300 Sreerenj Balachandran <sreerenj.balachandran@intel.com>
+
+ * configure.ac:
+ * ext/spc/Makefile.am:
+ * ext/spc/gstspc.c:
+ * ext/spc/tag.c:
+ * ext/spc/tag.h:
+ spc: port to 0.11
+ https://bugzilla.gnome.org/show_bug.cgi?id=683175
+
+2012-08-31 14:13:58 -0700 Jan Schmidt <thaytan@noraisin.net>
+
+ * ext/resindvd/resindvdbin.c:
+ * ext/resindvd/resindvdbin.h:
+ resindvd: Plug a video parser in front of decoder
+ Seems to make playback both better and worse. The parser needs some
+ fixing, it seems :-/
+
+2012-08-31 12:31:48 -0700 Jan Schmidt <thaytan@noraisin.net>
+
+ * gst/dvdspu/gstdvdspu.c:
+ dvdspu: Make GAP event aware
+
+2012-08-31 08:46:45 -0700 Jan Schmidt <thaytan@noraisin.net>
+
+ * ext/resindvd/Makefile.am:
+ * ext/resindvd/gstmpegdemux.c:
+ * ext/resindvd/gstmpegdemux.h:
+ * ext/resindvd/resindvdbin.c:
+ * ext/resindvd/resindvdbin.h:
+ * ext/resindvd/resindvdsrc.c:
+ * ext/resindvd/rsnaudiomunge.c:
+ * ext/resindvd/rsnaudiomunge.h:
+ resindvd: Add some GAP event stuff to make still-frames start to work
+ And remove the dead audiomunge element. It isn't needed now, we just
+ send GAP events
+
+2012-06-09 22:36:06 +1000 Jan Schmidt <thaytan@noraisin.net>
+
+ * configure.ac:
+ * ext/resindvd/Makefile.am:
+ * ext/resindvd/gstmpegdefs.h:
+ * ext/resindvd/gstmpegdemux.c:
+ * ext/resindvd/gstmpegdemux.h:
+ * ext/resindvd/gstpesfilter.c:
+ * ext/resindvd/gstpesfilter.h:
+ * ext/resindvd/plugin.c:
+ * ext/resindvd/resindvdbin.c:
+ * ext/resindvd/resindvdsrc.c:
+ * ext/resindvd/rsnaudiomunge.c:
+ * ext/resindvd/rsndec.c:
+ * ext/resindvd/rsninputselector.c:
+ * ext/resindvd/rsninputselector.h:
+ * ext/resindvd/rsnstreamselector.c:
+ * ext/resindvd/rsnstreamselector.h:
+ resindvd: Initial partial port to 0.11
+
+2012-08-30 18:39:50 -0700 Jan Schmidt <thaytan@noraisin.net>
+
+ * gst/autoconvert/gstautoconvert.c:
+ autoconvert: Don't drop upstream events due to silly typo
+
+2012-08-30 17:51:50 -0700 Jan Schmidt <thaytan@noraisin.net>
+
+ * gst/mpegdemux/gstmpegdemux.c:
+ * gst/mpegdemux/gstmpegdemux.h:
+ mpegdemux: Merge some DVD pieces and fixes
+ Bring the resindvd copy of mpegpsdemux and the normal version
+ slightly closer together.
+ Don't forward incoming sink caps event to downstream elements.
+
+2012-06-11 08:33:36 +1000 Jan Schmidt <thaytan@noraisin.net>
+
+ * gst/mpegdemux/gstmpegdemux.c:
+ mpegdemux: avoid extra refs/unrefs of the demuxer
+ Change all the gst_pad_get_parent() calls to a cast to the
+ passed parent variable where appropriate, and don't unref,
+ including the extra unref in the
+ gst_flups_demux_sink_activate_push() function.
+
+2012-08-30 12:11:20 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/dvbsuboverlay/gstdvbsuboverlay.c:
+ dvbsuboverlay: adjust to modified video overlay composition API
+ ... and supply overlay rectangle data in AYUV as provided by input
+ data rather than converting to RGB.
+
+2012-08-29 22:05:56 -0300 Thiago Santos <thiago.sousa.santos@collabora.com>
+
+ * gst/camerabin2/gstcamerabin2.c:
+ camerabin: no need to set clock/basetime again
+ The base and clock aren't lost anymore on state changes
+ in 1.0
+
+2012-08-29 22:05:04 -0300 Thiago Santos <thiago.sousa.santos@collabora.com>
+
+ * gst/camerabin2/gstwrappercamerabinsrc.c:
+ camerabin: no need to send extra reconfigure
+ Setting capsfilters already sends reconfigure events when a new
+ caps is set, no need to resend them.
+
+2012-08-28 21:01:55 -0300 Thiago Santos <thiago.sousa.santos@collabora.com>
+
+ * gst/camerabin2/gstcamerabin2.c:
+ camerabin: request _%u templates instead of _%d
+ In 1.0, templates have been renamed to _%u as default
+
+2012-08-26 16:43:37 -0300 Thiago Santos <thiago.sousa.santos@collabora.com>
+
+ * tests/check/elements/camerabin.c:
+ tests: camerabin: fix image location switching test
+ The test should wait until the last image-done is posted so it
+ can correctly check that all images have been saved.
+
+2012-08-26 16:42:04 -0300 Thiago Santos <thiago.sousa.santos@collabora.com>
+
+ * gst/camerabin2/gstwrappercamerabinsrc.c:
+ wrappercamerabinsrc: rework video recording eos push
+ Push EOS outside of wrappercamerabinsrc so that none of the
+ internal elements gets its pads into eos state, preventing any
+ further data from passing
+
+2012-08-28 11:07:41 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/videoparsers/gsth264parse.c:
+ h264parse: ensure sufficiently sized buffer when wrapping NAL
+ Noted by <zhangyanping210@yahoo.com.cn>
+ Fixes https://bugzilla.gnome.org/show_bug.cgi?id=682589
+
+2012-08-24 09:01:41 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * sys/shm/Makefile.am:
+ shm: remove unneeded glib-gen-mak include in Makefile
+ No enums or marshallers to be generated here. Should also
+ be gst-glib-gen.mak then.
+
+2012-08-22 15:08:53 +0200 Stefan Sauer <ensonic@users.sf.net>
+
+ * gst/audiovisualizers/gstaudiovisualizer.c:
+ audiovisualizer: revert renaming of the type
+ The special type name was lost when merging from base.
+
+2012-08-22 13:30:40 +0200 Stefan Sauer <ensonic@users.sf.net>
+
+ * common:
+ Automatic update of common submodule
+ From 668acee to 4f962f7
+
+2012-08-22 13:19:53 +0200 Stefan Sauer <ensonic@users.sf.net>
+
+ * configure.ac:
+ configure: bump gtk-doc req to 1.12 (mar-2009)
+ This allows us to e.g. unconditionally use gtkdoc-rebase.
+
+2012-08-21 13:29:16 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/audiovisualizers/gstaudiovisualizer.c:
+ audiovisualizer: avoid registering enum type of same name as libvisual plugin in -base
+
+2012-08-17 11:12:22 +0300 Sreerenj Balachandran <sreerenj.balachandran@intel.com>
+
+ * ext/wayland/gstwaylandsink.c:
+ wayland: use scale fullscreen method.
+ This makes the compositor scale the surface to fit and preserves
+ aspect ratio.
+ https://bugzilla.gnome.org/show_bug.cgi?id=681453
+
+2012-08-17 11:10:39 +0300 Sreerenj Balachandran <sreerenj.balachandran@intel.com>
+
+ * ext/wayland/gstwaylandsink.c:
+ wayland: respond to ping/pong protocol so we're not deemed unresponsive.
+ https://bugzilla.gnome.org/show_bug.cgi?id=681453
+
+2012-08-21 10:37:10 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * configure.ac:
+ configure: fix check for wayland
+ We only seem to need wayland-client. Also make work with
+ wayland being installed in a non-default prefix by not
+ overwriting/clearing WAYLAND_{CFLAGS,LIBS} for no reason
+ at all.
+
+2012-08-21 10:29:55 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * gst/id3tag/id3tag.c:
+ id3tag: fix build
+ Some code slipped into the last commit that was meant to be
+ pushed separately. Use gst_date_time_unref() instead of _free().
+
+2012-08-08 17:10:28 +0300 Sreerenj Balachandran <sreerenj.balachandran@intel.com>
+
+ * configure.ac:
+ * ext/wayland/Makefile.am:
+ * ext/wayland/gstwaylandsink.c:
+ * ext/wayland/gstwaylandsink.h:
+ * ext/wayland/waylandpool.c:
+ * ext/wayland/waylandpool.h:
+ wayland: More fixes based on wayland-0.95.0 and gstreamer-1.0 apis
+ - bump wayland version to 0.95.0 which will lead to stable 1.0 release
+ - avoid memcopy and use propose_allocation for GstBufferPool allocation
+ - using WaylandBufferPool
+ - shm: Allocate shm buffers through new wl_shm_pool interface
+ (the shm buffer allocation is a two step process now: first
+ allocate a wl_shm_pool, then allocate a buffer from the pool)
+ https://bugzilla.gnome.org/show_bug.cgi?id=681453
+
+2012-08-21 10:22:49 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * configure.ac:
+ * gst/id3tag/gstid3mux.c:
+ * gst/id3tag/id3tag.c:
+ id3tag: port to 0.11
+
+2012-08-21 00:10:10 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * tests/examples/camerabin2/gst-camerabin2-test.c:
+ examples: GST_TAG_DATE -> GST_TAG_DATE_TIME
+ In camerabin2 example.
+
+2012-08-20 23:37:00 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * docs/plugins/inspect/plugin-dvdspu.xml:
+ * docs/plugins/inspect/plugin-kate.xml:
+ * docs/plugins/inspect/plugin-mpegdemux2.xml:
+ * docs/plugins/inspect/plugin-mpegtsdemux.xml:
+ * docs/plugins/inspect/plugin-resindvd.xml:
+ * ext/kate/gstkateenc.c:
+ * ext/kate/gstkatespu.h:
+ * ext/kate/gstkateutil.c:
+ * ext/resindvd/gstmpegdemux.c:
+ * ext/resindvd/resindvdbin.c:
+ * gst/dvdspu/gstdvdspu.c:
+ * gst/mpegdemux/gstmpegdemux.c:
+ * gst/mpegtsdemux/tsdemux.c:
+ * tests/check/elements/kate.c:
+ video/x-dvd-subpicture -> subpicture/x-dvd
+
+2012-08-18 20:31:17 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * ext/wayland/gstwaylandsink.c:
+ * ext/wayland/gstwaylandsink.h:
+ * gst/mpeg1sys/main.h:
+ * gst/rtjpeg/RTjpeg.c:
+ * gst/rtjpeg/RTjpeg.h:
+ * gst/tta/filters.h:
+ * gst/vbidec/vbidata.c:
+ * gst/vbidec/vbidata.h:
+ * gst/vbidec/vbiscreen.c:
+ * gst/vbidec/vbiscreen.h:
+ Fix up FSF address in some source files as well
+
+2012-08-18 11:09:39 -0400 Brian Pepple <bpepple@fedoraproject.org>
+
+ * COPYING:
+ * COPYING.LIB:
+ Correct incorrect FSF address in license files
+ https://bugzilla.gnome.org/show_bug.cgi?id=682158
+
+2012-08-17 22:57:10 +0200 Stefan Sauer <ensonic@users.sf.net>
+
+ * gst/audiovisualizers/gstaudiovisualizer.c:
+ * gst/audiovisualizers/gstaudiovisualizer.h:
+ * gst/audiovisualizers/gstspacescope.c:
+ * gst/audiovisualizers/gstspectrascope.c:
+ * gst/audiovisualizers/gstsynaescope.c:
+ * gst/audiovisualizers/gstwavescope.c:
+ audiovisualizer: sync to change in base and port
+ Add support for GstVideoMeta and GstVideoFrame. Remove some redundant fields
+ that are also in GstVideoInfo. Don't disable the shader code, it does not
+ look broken.
+
+2012-08-17 15:15:34 +0200 Stefan Sauer <ensonic@users.sf.net>
+
+ * gst/audiovisualizers/README:
+ audiovisualizer: status update
+
+2012-08-15 18:28:09 -0400 Brian Pepple <bpepple@fedoraproject.org>
+
+ * configure.ac:
+ configure: add missing AC_LANG_PROGRAM call to DirectShow tests
+ https://bugzilla.gnome.org/show_bug.cgi?id=681952
+
+2012-08-15 11:26:59 +0200 Stefan Sauer <ensonic@users.sf.net>
+
+ * gst/audiovisualizers/gstaudiovisualizer.c:
+ visualizer: small cleanup
+ Apply cleanup from copy in base.
+
+2012-07-24 20:39:41 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * gst/mpegtsdemux/mpegtspacketizer.c:
+ mpegtspacketizer: Fix flushing/sync handling
+ There was a stray adapter_flush() now that we used a temporary buffer
+
+2012-07-19 13:35:51 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * gst/mpegtsdemux/mpegtspacketizer.c:
+ mpegtspacketizer: Better detect PCR resets
+ Assume that any differences in PCR greater than 15s means there is
+ a reset in the stream.
+
+2012-07-19 09:05:28 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * ext/vp8/gstvp8dec.c:
+ vp8dec: Call gst_video_decoder_negotiate()
+
+2012-07-19 09:05:13 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * ext/schroedinger/gstschrodec.c:
+ schrodec: Call gst_video_decoder_negotiate()
+
+2012-07-14 13:59:41 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * gst/mpegtsdemux/mpegtspacketizer.c:
+ mpegtspacketizer: Remove/demote some debugging
+
+2012-07-13 16:56:11 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * gst/mpegtsdemux/tsdemux.c:
+ tsdemux: Always use current PTS/DTS
+ This avoids setting old PTS and/or DTS
+
+2012-07-13 16:22:27 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * gst/mpegtsdemux/mpegtspacketizer.c:
+ mpegtspacketizer: Remove unneeded memset(0)
+
+2012-07-13 16:22:11 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * gst/mpegtsdemux/gstmpegdesc.h:
+ * gst/mpegtsdemux/mpegtsbase.h:
+ * gst/mpegtsdemux/mpegtspacketizer.h:
+ * gst/mpegtsdemux/mpegtsparse.h:
+ * gst/mpegtsdemux/pesparse.h:
+ * gst/mpegtsdemux/tsdemux.h:
+ mpegts: Use G_GNUC_INTERNAL
+
+2012-07-11 08:10:30 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * configure.ac:
+ configure.ac: dvb plugin is ported
+
+2012-07-11 08:10:18 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * sys/dvb/dvbbasebin.c:
+ * sys/dvb/gstdvbsrc.c:
+ dvb: More fixups to 1.0
+ Not tested yet !
+ Conflicts:
+ sys/dvb/gstdvbsrc.c
+
+2012-06-29 18:04:04 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * sys/dvb/camdevice.c:
+ cam: Allow time for CA to initialize
+ Some devices take some time to initialize, and until they are they
+ will error out when trying to get information about the CA device.
+
+2012-06-29 18:01:15 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * sys/dvb/camconditionalaccess.c:
+ cam: PMT_REPLY parsing
+ Not used yet
+
+2012-06-29 18:00:41 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * sys/dvb/dvbbasebin.c:
+ * sys/dvb/dvbbasebin.h:
+ dvbbasebin: Switch to use tsparse
+
+2012-06-29 17:53:30 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * gst/mpegtsdemux/mpegtspacketizer.c:
+ mpegtspacketizer: Use gst_structure_*_take_value where applicable
+ Saves copying/freeing data
+
+2012-06-29 16:14:02 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * gst/mpegtsdemux/mpegtspacketizer.c:
+ mpegtspacketizer: Cache the GIConv
+ Avoids having to constantly open/free them (which will end up being
+ very often with EIT/NIT).
+
+2012-06-29 16:09:31 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * gst/mpegtsdemux/mpegtsbase.c:
+ mpegtbase: reset element in READY=>PAUSED
+ Ensures all subclass reset vmethods are called
+
+2012-06-28 12:18:28 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * gst/mpegtsdemux/mpegtspacketizer.c:
+ mpegtspacketizer: Use more Quarks
+
+2012-06-26 19:01:07 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * gst/mpegtsdemux/tsdemux.c:
+ tsdemux: Remove useless code
+ PCR/OPCR is meant to be handled by the packetizer
+
+2012-06-26 18:59:32 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * gst/mpegtsdemux/mpegtspacketizer.c:
+ * gst/mpegtsdemux/mpegtspacketizer.h:
+ * gst/mpegtsdemux/tsdemux.c:
+ tsdemux: Calculate pcr/time/offset separately per program
+ Avoids quite a few issues with multi-program streams
+
+2012-06-26 18:54:55 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * gst/mpegtsdemux/mpegtsparse.c:
+ tsparse: Push out buffer on main source pad
+
+2012-06-26 18:51:21 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * gst/mpegtsdemux/mpegtsbase.c:
+ * gst/mpegtsdemux/mpegtsbase.h:
+ mpegtbase: vmethod to notify when we're done processing input
+ This can be used to notify subclasses no more data is expected this
+ round.
+ tsparse will use it to push whole buffers (without copy) on the main
+ source pad.
+ It could also be used later to decide whether to push pending data
+ in order to reduce latency.
+
+2011-02-01 11:39:16 -0800 Fabrizio (Misto) Milo <mistobaan@gmail.com>
+
+ * sys/dvb/gstdvbsrc.c:
+ * sys/dvb/gstdvbsrc.h:
+ dvbsrc + dvb api buffer property to overcome buffer under reads
+
+2012-08-08 15:06:09 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * ext/soundtouch/gstpitch.cc:
+ soundtouch: Don't assume output buffer timestamps
+ There's no guarantee whatsoever that the first buffer to output will
+ start at the segment.start.
+ Instead, wait for the first buffer after a segment, and use that timestamp
+
+2012-08-14 11:17:25 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/vp8/gstvp8dec.c:
+ * ext/vp8/gstvp8dec.h:
+ vp8dec: Add support for multiple decoding threads
+
+2012-08-14 11:09:46 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ * ext/vp8/gstvp8dec.c:
+ vp8dec: Add support for the MFQE postprocessing flag
+ Which is enabled by default if postprocessing is enabled.
+
+2012-08-13 10:57:57 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/videoparsers/gstmpegvideoparse.c:
+ mpegvideoparse: only apply repeat count when set
+ When there is no extension header, the repeat_count variable is left to 0 and
+ then the duration on the output buffers is calculated wrongly. Because the
+ duration is used to interpolate output timestamps, the output timestamps are
+ also wrong, causing bad framerates.
+ See https://bugzilla.gnome.org/show_bug.cgi?id=681535
+
+2012-08-09 13:37:22 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ * ext/vp8/Makefile.am:
+ vp8: Use pkg-config file for getting the LIBS and CFLAGS
+
+2012-08-09 11:48:39 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/mpg123/gstmpg123audiodec.c:
+ mpg123: Give MARGINAL rank to the mpg123 decoder element
+
+2012-08-08 17:40:34 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * gst/dtmf/gstdtmfsrc.c:
+ * gst/dtmf/gstrtpdtmfdepay.c:
+ gst: Set alignment at the correct place of GstAllocationParams
+
+2012-08-08 17:06:20 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/vp8/gstvp8enc.c:
+ vp8enc: Update the per-component strides for every frame too
+ This is necessary because of GstVideoAlignment
+
+2012-08-08 16:35:12 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * win32/common/config.h:
+ Back to development
+
+=== release 0.11.93 ===
+
+2012-08-08 15:32:19 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * gst-plugins-bad.doap:
+ Release 0.11.93
+
+2012-08-08 12:58:50 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * ext/mpg123/Makefile.am:
+ mpg123: dist header file
+
+2012-08-08 12:13:13 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * win32/common/config.h:
+ * win32/common/libgstphotography.def:
+ win32: update for photography API changes
+
+2012-08-08 11:53:05 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * tests/check/elements/.gitignore:
+ tests: .gitignore new curlsmtpsink test binary
+
+2012-08-03 16:21:09 +0100 Olivier Crête <olivier.crete@collabora.com>
+
+ * configure.ac:
+ * ext/mimic/gstmimdec.c:
+ * ext/mimic/gstmimdec.h:
+ * ext/mimic/gstmimenc.c:
+ * ext/mimic/gstmimenc.h:
+ mimic: Port to 0.11
+
+2012-08-07 18:23:37 +0200 Andoni Morales Alastruey <ylatuya@gmail.com>
+
+ * sys/winks/gstksvideosrc.c:
+ winks: add missing default switch case
+
+2012-08-07 18:23:05 +0200 Andoni Morales Alastruey <ylatuya@gmail.com>
+
+ * sys/winks/gstksvideodevice.c:
+ winks: fix types
+
+2012-08-07 18:22:36 +0200 Andoni Morales Alastruey <ylatuya@gmail.com>
+
+ * sys/winks/gstksvideodevice.c:
+ winks: fix format warnings
+
+2012-08-07 18:21:49 +0200 Andoni Morales Alastruey <ylatuya@gmail.com>
+
+ * sys/winks/gstksclock.c:
+ * sys/winks/gstksvideosrc.c:
+ winks: fix unused variables warnings
+
+2012-08-07 18:20:53 +0200 Andoni Morales Alastruey <ylatuya@gmail.com>
+
+ * sys/winks/ksvideohelpers.c:
+ winks: don't reinitialize MEDIASUBTYPE_I420
+
+2012-08-07 18:19:29 +0200 Andoni Morales Alastruey <ylatuya@gmail.com>
+
+ * sys/dshowsrcwrapper/gstdshow.cpp:
+ * sys/winks/kshelpers.c:
+ winks: define STATIC_KSPROPSETID_Wave_Queued if not defined
+
+2012-08-07 16:53:02 +0200 Andoni Morales Alastruey <ylatuya@gmail.com>
+
+ * configure.ac:
+ * sys/Makefile.am:
+ * sys/winks/Makefile.am:
+ winks: integrate build with autotools
+
+2012-08-02 14:26:32 +0200 Andoni Morales Alastruey <ylatuya@gmail.com>
+
+ * sys/d3dvideosink/d3dvideosink.c:
+ d3dvideosink: avoid duplicated symbols in static links
+ Rename the DLL entry point the avoid duplicated symbols in static
+ links.
+
+2012-08-02 14:26:32 +0200 Andoni Morales Alastruey <ylatuya@gmail.com>
+
+ * sys/d3dvideosink/Makefile.am:
+ d3dvideosink: avoid duplicated symbols in static links
+ Rename the DLL entry point the avoid duplicated symbols in static
+ links.
+
+2012-08-06 13:59:27 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * gst/hls/gsthlsdemux.c:
+ * gst/mpegtsdemux/mpegtsparse.c:
+ * gst/mpegtsdemux/tsdemux.c:
+ gst: Add stream-id to stream-start events
+
+2012-07-26 19:31:14 +0200 Oleksij Rempel <bug-track@fisher-privat.net>
+
+ * ext/vp8/gstvp8enc.c:
+ vp8enc: initiate encoder to fix a crash.
+ Without this patch vp8enc send header before and after first
+ key frame. On second keyframe vp8dec will crash without getting
+ decoded frame. With this pipe it is easy to reproduce this issue:
+ gst-launch-1.0 videotestsrc ! vp8enc ! vp8dec ! fakesink
+ https://bugzilla.gnome.org/show_bug.cgi?id=680667
+
+2012-08-05 16:40:28 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * common:
+ Automatic update of common submodule
+ From 94ccf4c to 668acee
+
+2012-08-04 16:31:30 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * ext/celt/gstceltenc.c:
+ * ext/kate/gstkateenc.c:
+ * ext/kate/gstkatetag.c:
+ * ext/kate/gstkateutil.c:
+ * ext/opus/gstopusenc.c:
+ * ext/opus/gstopusheader.c:
+ * ext/resindvd/rsnstreamselector.c:
+ * gst/aiff/aiffparse.c:
+ * gst/asfmux/gstasfmux.c:
+ * gst/camerabin2/gstcamerabin2.c:
+ * gst/jpegformat/gstjifmux.c:
+ * gst/jpegformat/gstjpegparse.c:
+ * gst/mpegtsdemux/mpegtsbase.c:
+ * gst/mxf/mxfdemux.c:
+ * gst/nsf/gstnsf.c:
+ * tests/check/elements/camerabin.c:
+ * tests/check/elements/id3mux.c:
+ * tests/check/elements/jifmux.c:
+ * tests/check/elements/kate.c:
+ * tests/check/elements/ofa.c:
+ * tests/examples/mxf/mxfdemux-structure.c:
+ * tests/icles/metadata_editor.c:
+ gst_tag_list_free -> gst_tag_list_unref
+
+2012-08-03 11:31:00 +0200 Patricia Muscalu <patricia@axis.com>
+
+ * ext/curl/gstcurlbasesink.c:
+ * ext/curl/gstcurlsmtpsink.c:
+ * tests/check/elements/curlfilesink.c:
+ curl: fixed some memory leaks in the plugin and the unit tests
+ https://bugzilla.gnome.org/show_bug.cgi?id=681117
+ https://bugzilla.gnome.org/show_bug.cgi?id=681115
+
+2012-08-03 14:12:05 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ configure: require libmpg123 >= 1.13 for 24-bit formats
+
+2012-08-03 13:43:31 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/mpg123/gstmpg123audiodec.c:
+ mpg123: map input buffer in READ mode, not WRITE mode
+ Makes things actually work.
+
+2012-08-03 11:50:10 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/mpg123/gstmpg123audiodec.c:
+ mpg123: query supported output formats at run-time
+ Fixes stuff. We use a string here since we can't be bothered
+ with GValue.
+
+2012-08-03 11:48:02 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * configure.ac:
+ * ext/Makefile.am:
+ * ext/mpg123/Makefile.am:
+ mpg123: hook up to build system
+
+2012-08-03 11:13:48 +0100 Carlos Rafael Giani <dv@pseudoterminal.org>
+
+ * ext/mpg123/gstmpg123audiodec.c:
+ * ext/mpg123/gstmpg123audiodec.h:
+ mpg123: add new libmpg123-based mp3 decoder plugin
+ Needs a bit of cleaning up.
+ https://bugzilla.gnome.org/show_bug.cgi?id=681003
+
+2012-08-03 00:10:01 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * ext/schroedinger/gstschro.c:
+ * gst/mpegtsmux/mpegtsmux.c:
+ schroedinger, mpegtsmux: fix plugin names
+
+2012-07-31 09:36:35 +0200 Robert Swain <robert.swain@collabora.co.uk>
+
+ * gst/camerabin2/gstwrappercamerabinsrc.c:
+ * gst/camerabin2/gstwrappercamerabinsrc.h:
+ wrappercamerabinsrc: Save image/video reconfiguration until capturing
+ Add a src pad event handler function that filters reconfigure events to
+ trigger the renegotiation code paths in the mode-specific start-capture
+ phase.
+ This is to work towards fixing unit tests but more work is needed.
+
+2012-08-02 14:40:55 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/faad/gstfaad.c:
+ faad: do not access frame buffer following _finish_frame call
+ Fixes https://bugzilla.gnome.org/show_bug.cgi?id=680494
+
+2012-08-01 11:34:08 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * ext/mplex/gstmplexjob.cc:
+ mplex: default to DVD MPEG-2 format instead of Generic MPEG-1
+
+2012-08-01 11:31:04 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * ext/mplex/gstmplexjob.cc:
+ mplexjob: add nicks for format enums, add some more formats
+
+2012-07-30 17:21:10 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * tests/check/elements/jifmux.c:
+ tests: fix jifmux test for fixed fail()
+ https://bugzilla.gnome.org/show_bug.cgi?id=680755
+
+2012-07-29 01:11:29 -0300 Thiago Santos <thiago.sousa.santos@collabora.com>
+
+ * tests/check/elements/camerabin.c:
+ tests: camerabin: fix preview message handling
+ Preview messages now contain GstSamples instead of GstBuffers
+
+2012-07-29 00:53:29 -0300 Thiago Santos <thiago.sousa.santos@collabora.com>
+
+ * gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.c:
+ * gst-libs/gst/basecamerabinsrc/gstbasecamerasrc.h:
+ * gst-libs/gst/basecamerabinsrc/gstcamerabinpreview.c:
+ * gst-libs/gst/basecamerabinsrc/gstcamerabinpreview.h:
+ * gst/camerabin2/gstwrappercamerabinsrc.c:
+ camerabin: update preview buffer pushing
+ need to pass a GstSample to the utilitary preview buffer post functions
+ as a GstBuffer doesn't have caps anymore. The GstSample has the GstCaps
+ and it is used to inform the preview's pipeline about the format of the
+ input, before it gets converted to the user's requested output format.
+
+2012-07-29 00:04:35 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * gst/camerabin2/gstcamerabin2.c:
+ Revert "camerabin: update to new tag event creation API"
+ This reverts commit 5d890b3c92714e1f37163290c32911bcd7818a57.
+ The new API is the old API.
+
+2012-07-28 18:04:57 -0300 Thiago Santos <thiago.sousa.santos@collabora.com>
+
+ * gst/camerabin2/gstcamerabin2.c:
+ camerabin: Fix references to avoid element leaking
+ Some pad probes are never going to be removed from the pads, so
+ we shouldn't keep a camerabin reference with them or camerabin will
+ never get released
+
+2012-07-28 15:17:17 -0300 Thiago Santos <thiago.sousa.santos@collabora.com>
+
+ * gst/camerabin2/gstcamerabin2.c:
+ camerabin: update to new tag event creation API
+
+2012-07-28 12:09:42 -0300 Thiago Santos <thiago.sousa.santos@collabora.com>
+
+ * tests/examples/camerabin2/gst-camerabin2-test.c:
+ examples: camerabin: remove assertion on null property
+ Check if the flags are not null before trying to set them to
+ camerabin to avoid an assertion
+
+2012-07-28 00:32:58 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/chromaprint/gstchromaprint.c:
+ * ext/gme/gstgme.c:
+ * ext/modplug/gstmodplug.cc:
+ * ext/schroedinger/gstschrodec.c:
+ * ext/soundtouch/gstbpmdetect.cc:
+ * ext/vp8/gstvp8dec.c:
+ * gst/camerabin2/gstcamerabin2.c:
+ * gst/mpegtsdemux/tsdemux.c:
+ * gst/videoparsers/gstmpegvideoparse.c:
+ tag: Update for taglist/tag event API changes
+
+2012-07-27 13:22:52 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/assrender/gstassrender.c:
+ assrender: process ATTACHMENT tag as sample
+
+2012-07-25 16:05:12 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/faac/gstfaac.c:
+ * ext/voaacenc/gstvoaacenc.c:
+ faac, voaacenc: adjust to modified audioencoder getcaps helper API
+
+2012-07-24 12:28:18 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/audiovisualizers/gstaudiovisualizer.c:
+ audiovisualizer: fixate caps
+
+2012-07-24 10:46:39 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/gaudieffects/gstburn.c:
+ * gst/gaudieffects/gstgaudieffectsorc-dist.c:
+ * gst/gaudieffects/gstgaudieffectsorc-dist.h:
+ * gst/gaudieffects/gstgaudieffectsorc.orc:
+ guadi: prefix orc functions with gaudi_orc_
+
+2012-07-24 10:44:51 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/fieldanalysis/gstfieldanalysis.c:
+ * gst/fieldanalysis/gstfieldanalysisorc-dist.c:
+ * gst/fieldanalysis/gstfieldanalysisorc-dist.h:
+ * gst/fieldanalysis/gstfieldanalysisorc.orc:
+ fieldanalysis: prefix orc functions
+
+2012-07-24 10:32:51 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/bayer/gstbayer2rgb.c:
+ * gst/bayer/gstbayerorc-dist.c:
+ * gst/bayer/gstbayerorc-dist.h:
+ * gst/bayer/gstbayerorc.orc:
+ * tests/check/Makefile.am:
+ bayer: prefix orc functions with bayer_orc
+ Add bayer orc to the unit test
+
+2012-07-24 10:32:20 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * tests/check/Makefile.am:
+ * tests/check/elements/baseaudiovisualizer.c:
+ tests: fix visualizer compilation
+
+2012-07-23 11:36:01 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/schroedinger/gstschrodec.c:
+ * ext/schroedinger/gstschroenc.c:
+ * ext/schroedinger/gstschroutils.c:
+ * ext/schroedinger/gstschroutils.h:
+ schro: Add support for video metadata and arbitrary strides
+
+2012-07-23 10:54:17 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/schroedinger/gstschrodec.c:
+ * ext/schroedinger/gstschroenc.c:
+ * ext/schroedinger/gstschroutils.c:
+ * ext/schroedinger/gstschroutils.h:
+ schro: Map raw video buffers with the correct read/write flags
+
+2012-07-23 10:35:03 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/schroedinger/gstschrodec.c:
+ * ext/vp8/gstvp8dec.c:
+ ext: Update for video base classes API changes
+
+2012-07-23 08:45:41 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 98e386f to 94ccf4c
+
+2012-07-21 19:59:21 +0200 Oleksij Rempel <bug-track@fisher-privat.net>
+
+ * ext/vp8/gstvp8enc.c:
+ vp8enc: fix memory leak
+ unref frame. i hope it is correct place to do it.
+ Signed-off-by: Oleksij Rempel <bug-track@fisher-privat.net>
+
+2012-07-20 23:28:49 +0200 Robert Swain <robert.swain@collabora.co.uk>
+
+ * gst/interlace/gstinterlace.c:
+ interlace: Use buffer flags and caps correctly
+ This requires a recent commit to -base that adds an INTERLACED buffer
+ flag.
+
+2012-07-20 16:43:19 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * ext/faad/gstfaad.c:
+ faad: only discard frame once upon decoding error
+ Fixes https://bugzilla.gnome.org/show_bug.cgi?id=679886
+
+2012-07-19 16:10:40 +0200 Stefan Sauer <ensonic@users.sf.net>
+
+ * gst/audiovisualizers/gstspectrascope.c:
+ spectrascope: fabs->sqrt to calculate the magnitude
+
+2012-07-18 09:19:30 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * gst/mpegdemux/gstmpegdemux.c:
+ mpegpsdemux: also activate in push mode if the scheduling query failed
+ In case pads are unlinked somewhere.
+
+2012-07-18 08:41:43 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * gst/mpegdemux/gstmpegdemux.c:
+ mpegdemux: fix push mode activation
+ Extra unref on push mode activation caused havoc.
+
+2012-07-16 00:05:26 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * ext/spc/gstspc.c:
+ spc: extract year as GstDateTime instead of GDate
+
+2012-07-17 18:05:23 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/dvbsuboverlay/gstdvbsuboverlay.c:
+ dvbsuboverlay: no need to make buffer writable twice
+
+2012-07-17 18:05:00 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/dvbsuboverlay/gstdvbsuboverlay.c:
+ dvbsuboverlay: plug some ref leaks
+
+2012-07-17 14:02:14 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/dvbsuboverlay/gstdvbsuboverlay.c:
+ dvbsuboverlay: adjust to modified video overlay composition API
+
+2012-07-17 16:39:02 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/dtmf/gstrtpdtmfdepay.c:
+ * gst/rtpmux/gstrtpmux.c:
+ update for RTP buffer api changes
+
+2012-07-16 22:02:44 +0200 Stefan Sauer <ensonic@users.sf.net>
+
+ * docs/plugins/Makefile.am:
+ * gst/audiovisualizers/Makefile.am:
+ * gst/audiovisualizers/gstaudiovisualizer.c:
+ * gst/audiovisualizers/gstaudiovisualizer.h:
+ * gst/audiovisualizers/gstbaseaudiovisualizer.c:
+ * gst/audiovisualizers/gstbaseaudiovisualizer.h:
+ * gst/audiovisualizers/gstspacescope.c:
+ * gst/audiovisualizers/gstspacescope.h:
+ * gst/audiovisualizers/gstspectrascope.c:
+ * gst/audiovisualizers/gstspectrascope.h:
+ * gst/audiovisualizers/gstsynaescope.c:
+ * gst/audiovisualizers/gstsynaescope.h:
+ * gst/audiovisualizers/gstwavescope.c:
+ * gst/audiovisualizers/gstwavescope.h:
+ audiovisualizer: shorten base class name
+ As suggested on IRC rename to AudioVisualizer. We use custom suffix on the type
+ to avoid clashing with other copies for the time being.
+
+2012-07-15 12:27:12 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * ext/celt/gstceltenc.c:
+ * ext/opencv/gsttemplatematch.c:
+ * ext/wayland/gstwaylandsink.c:
+ * gst/dvbsuboverlay/dvb-sub.c:
+ * gst/festival/gstfestival.c:
+ * gst/hls/gsthlsdemux.c:
+ celt, opencv, wayland, dvbsub, festival, hls: printf format fixes
+
+2012-07-14 15:51:08 +0200 Alban Browaeys <prahal@yahoo.com>
+
+ * ext/wayland/Makefile.am:
+ wayland: don't link to gstinterfaces, which doesn't exist any more
+ https://bugzilla.gnome.org/show_bug.cgi?id=679929
+
+2012-06-30 00:22:40 +0300 Sreerenj Balachandran <sreerenj.balachandran@intel.com>
+
+ * configure.ac:
+ * ext/opencv/gstcvdilate.c:
+ * ext/opencv/gstcvdilateerode.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/gstopencvutils.c:
+ * ext/opencv/gstopencvvideofilter.c:
+ * ext/opencv/gstpyramidsegment.c:
+ * ext/opencv/gsttemplatematch.c:
+ * ext/opencv/gsttextoverlay.c:
+ * ext/opencv/gsttextoverlay.h:
+ opencv: port to 0.11
+ Basic port to 0.11 API.
+ https://bugzilla.gnome.org/show_bug.cgi?id=679164
+
+2012-07-13 12:32:51 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/dvbsuboverlay/gstdvbsuboverlay.c:
+ * gst/dvbsuboverlay/gstdvbsuboverlay.h:
+ dvbsuboverlay: adaptively blend or attach video overlay composition
+ Conflicts:
+ gst/dvbsuboverlay/gstdvbsuboverlay.c
+
+2012-07-13 12:27:57 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/dvbsuboverlay/gstdvbsuboverlay.c:
+ * gst/dvbsuboverlay/gstdvbsuboverlay.h:
+ dvbsuboverlay: use video overlay composition helper
+ ... rather than custom home-made blending.
+ Conflicts:
+ gst/dvbsuboverlay/gstdvbsuboverlay.c
+
+2012-07-12 10:13:50 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegtsdemux/tsdemux.c:
+ tsdemux: more correctly determine expected PES packet payload size
+ ... particularly considering that packet_length == 0 is possible.
+
+2012-07-11 23:17:19 +0200 Stefan Sauer <ensonic@users.sf.net>
+
+ * ext/soundtouch/gstpitch.cc:
+ pitch: register as effect
+
+2012-07-11 20:34:05 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegtsdemux/tsdemux.c:
+ tsdemux: correctly determine expected PES packet payload size
+ Avoids consistently failing to detect that a packet is complete, which
+ would then only be pushed upon the start of a next packet, which leads
+ to quite a delay in case of a sparse (subtitle) stream.
+ Fixes https://bugzilla.gnome.org/show_bug.cgi?id=666674
+
+2012-07-10 17:58:22 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/dvbsuboverlay/gstdvbsuboverlay.c:
+ dvbsuboverlay: ensure minimum page time out of 1 second
+ ... to compensate for some bogus subtitle with a 0 timeout, which would
+ result in only being shown for a very unreadable amount of time.
+ See https://bugzilla.gnome.org/show_bug.cgi?id=666674
+
+2012-07-11 14:27:46 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * tests/icles/pitch-test.c:
+ tests: fix build of pitch-test
+ Does not sound like the same test in 0.10 though..
+
+2012-07-11 13:59:18 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/dvbsuboverlay/gstdvbsuboverlay.c:
+ dvbsuboverlay: fix compiler warnings
+ gstdvbsuboverlay.c:772:15: error: pointer targets in passing argument 5 of 'gst_segment_clip' differ in signedness
+ /home/tpm/gst/0.11/gstreamer/gst/gstsegment.h:192:14: note: expected 'guint64 *' but argument is of type 'gint64 *'
+ gstdvbsuboverlay.c:772:15: error: pointer targets in passing argument 6 of 'gst_segment_clip' differ in signedness
+
+2012-07-11 13:49:14 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/dvbsuboverlay/gstdvbsuboverlay.c:
+ dvbsuboverlay: fixup end-of-display-set forcing
+ Conflicts:
+ gst/dvbsuboverlay/gstdvbsuboverlay.c
+
+2012-07-11 13:48:32 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/dvbsuboverlay/gstdvbsuboverlay.c:
+ dvbsuboverlay: ensure valid subtitle running time by proper clipping
+ In particular, pass buffer timestamp (pts) to dvb_sub, and then clip
+ and convert to running time when the duration (timeout) is known after
+ decoding it.
+ Fixes https://bugzilla.gnome.org/show_bug.cgi?id=660233
+ Conflicts:
+ gst/dvbsuboverlay/gstdvbsuboverlay.c
+
+2012-07-11 13:45:14 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/dvbsuboverlay/dvb-sub.c:
+ * gst/dvbsuboverlay/gstdvbsuboverlay.c:
+ * gst/dvbsuboverlay/gstdvbsuboverlay.h:
+ dvbsuboverlay: properly force end-of-display-set
+ ... which is upon receiving new data with different PTS spec-wise,
+ or optionally upon each packet of subtitle data if desired by property.
+ Fixes https://bugzilla.gnome.org/show_bug.cgi?id=669310
+ Conflicts:
+ gst/dvbsuboverlay/gstdvbsuboverlay.c
+
+2011-12-21 13:00:27 +0200 Mart Raudsepp <mart.raudsepp@collabora.com>
+
+ * gst/dvbsuboverlay/dvb-sub.c:
+ dvbsuboverlay: Handle non_modifying_colour_flag correctly in the RLE handlers
+ The check for when to not memset was checking on an undeterministic 'bits' variable value,
+ which is only meant to be used inside the loop earlier when it is supposed to check if
+ clut_index is 1 together with non_mod set, as per spec:
+ "non_modifying_colour_flag: If set to '1' this indicates that the CLUT entry value '1'
+ is a non modifying colour. When the non modifying colour is assigned to an object pixel,
+ then the pixel of the underlying region background or object shall not be modified. This
+ can be used to create "transparent holes" in objects."
+ https://bugzilla.gnome.org/show_bug.cgi?id=666352
+
+2010-10-13 10:55:17 +0300 Lasse Laukkanen <ext-lasse.2.laukkanen@nokia.com>
+
+ * gst-libs/gst/interfaces/photography.c:
+ * gst-libs/gst/interfaces/photography.h:
+ photography: update documentation
+ https://bugzilla.gnome.org/show_bug.cgi?id=622482
+
+2010-10-14 10:49:55 +0300 Lasse Laukkanen <ext-lasse.2.laukkanen@nokia.com>
+
+ * gst-libs/gst/interfaces/photography.c:
+ * gst-libs/gst/interfaces/photography.h:
+ photography: Add manual control of exposure, focus and white balance
+ Add new interface properties and mode for better manual control of
+ exposure, focus and white balance.
+ https://bugzilla.gnome.org/show_bug.cgi?id=622482
+
+2010-10-08 11:33:31 +0300 Lasse Laukkanen <ext-lasse.2.laukkanen@nokia.com>
+
+ * docs/plugins/gst-plugins-bad-plugins-sections.txt:
+ * gst-libs/gst/interfaces/photography.c:
+ * gst-libs/gst/interfaces/photography.h:
+ * gst/camerabin2/gstwrappercamerabinsrc.c:
+ photography: Add GstPhotography prefix and fix spelling colour->color
+ https://bugzilla.gnome.org/show_bug.cgi?id=622482
+
+2012-07-10 23:27:23 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * gst-libs/gst/codecparsers/gstmpegvideoparser.h:
+ codecparsers: minor header indentation clean-up for mpegvideoparser
+
+2012-07-10 17:47:20 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * configure.ac:
+ * ext/soundtouch/gstbpmdetect.cc:
+ * ext/soundtouch/gstpitch.cc:
+ soundtouch: port to 0.11
+
+2012-07-10 12:10:28 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/festival/gstfestival.c:
+ festival: unmap input buffer
+
+2012-07-04 10:14:35 +0300 Sreerenj Balachandran <sreerenj.balachandran@intel.com>
+
+ * configure.ac:
+ * gst/festival/Makefile.am:
+ * gst/festival/gstfestival.c:
+ port festival to 0.11
+ Fixes https://bugzilla.gnome.org/show_bug.cgi?id=679373
+
+2012-07-10 11:14:59 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * tests/check/elements/camerabin.c:
+ tests: fix some pad template-related criticals in camerabin test
+
+2012-07-10 00:59:40 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * gst/dataurisrc/gstdataurisrc.c:
+ dataurisrc: copy into provided buffer if a buffer is provided
+
+2012-07-09 22:08:50 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * tests/check/elements/zbar.c:
+ tests: fix zbar test
+
+2012-07-09 12:22:45 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/asfmux/gstasfmux.c:
+ asfmux: update for riff field rename
+
+2012-07-08 19:23:30 +0200 Stefan Sauer <ensonic@users.sf.net>
+
+ * gst/audiovisualizers/gstbaseaudiovisualizer.c:
+ * gst/audiovisualizers/gstbaseaudiovisualizer.h:
+ audiovisualizers: update baseclass from libvisual porting
+
+2012-07-08 00:08:55 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * gst/dtmf/gstdtmfsrc.c:
+ dtmfsrc: pass unhandled non-custom events to the base class
+ https://bugzilla.gnome.org/show_bug.cgi?id=666626
+
+2012-07-06 14:53:57 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/asfmux/gstasfmux.c:
+ asfmux: remove deprecated "is-live" property
+ Use the "streamable" property instead.
+
+2012-07-06 11:50:53 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/vp8/gstvp8enc.c:
+ * sys/pvr2d/gstpvrvideosink.c:
+ update for query api changes
+
+2012-07-06 11:26:55 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/vp8/gstvp8dec.c:
+ update for query api changes
+
+2012-07-06 11:03:04 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/vp8/gstvp8enc.c:
+ update for allocation query changes
+
+2012-07-04 11:38:51 +0200 Aleix Conchillo Flaque <aleix@oblong.com>
+
+ * sys/shm/shmpipe.c:
+ shmsrc: memory corruption when a client disconnects (fixes #679385)
+
+2012-07-05 13:18:47 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * ext/musepack/gstmusepackdec.c:
+ * gst/aiff/aiffparse.c:
+ * gst/mpegdemux/gstmpegdemux.c:
+ * gst/mxf/mxfdemux.c:
+ * gst/rawparse/gstrawparse.c:
+ gst: Implement segment-done event
+
+2012-07-03 12:57:58 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * sys/directsound/gstdirectsoundsrc.c:
+ directsoundsrc: Chain up to the parent class' finalize implementation
+
+2012-07-02 17:55:37 -0700 David Schleef <ds@schleef.org>
+
+ * sys/decklink/gstdecklinksink.cpp:
+ * sys/decklink/gstdecklinksink.h:
+ decklinksink: Better handling of audio output
+ Conflicts:
+ sys/decklink/gstdecklinksink.cpp
+
+2012-07-02 17:52:15 -0700 David Schleef <ds@schleef.org>
+
+ * sys/decklink/gstdecklinksrc.cpp:
+ * sys/decklink/gstdecklinksrc.h:
+ decklinksrc: Send newsegment events
+
+2012-07-02 17:51:18 -0700 David Schleef <ds@schleef.org>
+
+ * sys/decklink/gstdecklinksink.cpp:
+ decklinksink: Mark element as sink element
+
+2012-07-02 17:49:54 -0700 David Schleef <ds@schleef.org>
+
+ * sys/decklink/gstdecklink.cpp:
+ decklink: use GOnce in type registration
+
+2012-07-02 17:32:14 -0700 David Schleef <ds@schleef.org>
+
+ * gst/inter/gstinteraudiosink.c:
+ * gst/inter/gstinteraudiosrc.c:
+ inter: Increase the inter audio surface buffering
+
+2012-07-02 12:04:19 -0700 David Schleef <ds@schleef.org>
+
+ * gst/inter/gstinteraudiosink.c:
+ interaudiosink: reenable channel property
+
+2012-07-02 12:03:44 -0700 David Schleef <ds@schleef.org>
+
+ * gst/inter/gstinteraudiosrc.c:
+ interaudiosrc: Set format to time
+
+2012-06-29 12:03:51 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * sys/d3dvideosink/d3dvideosink.c:
+ * sys/directdraw/gstdirectdrawsink.c:
+ * sys/dshowvideosink/dshowvideosink.cpp:
+ * sys/pvr2d/gstpvrvideosink.c:
+ * sys/vdpau/gstvdpvideopostprocess.c:
+ sys: make video sinks default to force-aspect-ratio=true
+
+2012-06-28 18:04:10 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * gst/mpegtsdemux/mpegtsbase.c:
+ * gst/mpegtsdemux/mpegtsparse.c:
+ mpegtsbase: Move known PSI PIDs to where they belong
+ This avoids tsdemux parsing data is doesn't really care about
+ Conflicts:
+ gst/mpegtsdemux/mpegtsparse.c
+
+2012-06-02 08:05:44 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * gst/mpegtsdemux/mpegtsbase.c:
+ mpegtbase: Add more known default SI PIDs
+
+2012-06-28 17:40:16 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * gst/mpegtsdemux/tsdemux.c:
+ tsdemux: Fix AAC LATM caps
+
+2012-06-22 16:47:58 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * tests/check/elements/mpegtsmux.c:
+ tests: mpegtsmux: add basic output unit test verification
+
+2012-06-22 17:51:37 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegtsmux/tsmux/tsmux.c:
+ mpegtsmux: apply some more CLOCK_BASE to ensure slack for PCR offset
+ Conflicts:
+ gst/mpegtsmux/tsmux/tsmux.c
+
+2012-06-27 11:23:19 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst/asfmux/gstasfmux.c:
+ * sys/dshowdecwrapper/gstdshowvideodec.cpp:
+ fix x-wmv format string
+
+2012-06-26 16:33:54 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * configure.ac:
+ * gst/interlace/gstinterlace.c:
+ interlace: port to 0.11
+
+2012-06-25 16:18:41 +0200 Andoni Morales Alastruey <ylatuya@gmail.com>
+
+ * sys/d3dvideosink/d3dvideosink.c:
+ d3dvideosink: release the offscreen surface before the d3d device
+ The offscreen surface keeps a reference on the d3d device, so if the
+ device is released first we don't see the reference count debug message
+ going to 0 as it should be.
+
+2012-06-19 20:16:40 +0200 Andoni Morales Alastruey <ylatuya@gmail.com>
+
+ * sys/d3dvideosink/d3dvideosink.c:
+ d3dvideosink: clean up element
+ Remove old commented code and uneeded extra indentation
+
+2012-06-19 20:03:02 +0200 Andoni Morales Alastruey <ylatuya@gmail.com>
+
+ * sys/d3dvideosink/d3dvideosink.c:
+ * sys/d3dvideosink/d3dvideosink.h:
+ d3dvideosink: rework locking for devices lost
+
+2012-06-19 20:19:27 +0200 Andoni Morales Alastruey <ylatuya@gmail.com>
+
+ * sys/d3dvideosink/d3dvideosink.c:
+ d3dvideosink: release and recreate the device in prepare_window
+
+2012-06-24 21:11:39 +0200 Stefan Sauer <ensonic@users.sf.net>
+
+ * gst/audiovisualizers/gstspectrascope.c:
+ spectrascope: avoid dark pixels in fade-and-move-up mode
+
+2012-06-24 20:54:24 +0200 Stefan Sauer <ensonic@users.sf.net>
+
+ * gst/audiovisualizers/README:
+ * gst/audiovisualizers/gstbaseaudiovisualizer.c:
+ audiovisualizers: fix input buffer handling
+ Use _replace instead of _append to fix growing buffers.
+
+2012-06-23 15:02:13 +0100 Tim-Philipp Müller <tim@centricular.net>
+
+ * gst/hls/gsturidownloader.c:
+ * gst/sdp/gstsdpdemux.c:
+ hls, sdp: update for gst_element_make_from_uri() changes
+
+2012-06-21 12:17:09 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * sys/v4l2/README:
+ sys: remove left-over v4l2 dir which has moved to good
+ let's not keep a README around to announce it's moved to -good,
+ that's just clutter.
+
+2012-06-21 11:43:23 +0100 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ configure: Really always define DECKLINK_OSX conditional
+
+2011-07-13 19:25:08 +0100 Tony Houghton <h@realh.co.uk>
+
+ * gst/mpegtsdemux/gstmpegdesc.h:
+ * gst/mpegtsdemux/mpegtspacketizer.c:
+ * sys/dvb/gstdvbsrc.c:
+ Correct satellite delivery descriptor parsing.
+ Original code to parse satellite delivery descriptors to generate
+ "satellite" structures appeared to be copy & pasted from cable's code
+ without amending for satellite.
+ Also added 8PSK to dvbsrc's enum for modulation.
+ https://bugzilla.gnome.org/show_bug.cgi?id=654485
+ Conflicts:
+ gst/mpegdemux/gstmpegdesc.h
+ gst/mpegdemux/mpegtspacketizer.c
+
+2012-06-20 18:14:11 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * gst/mpegtsdemux/mpegtsparse.c:
+ * gst/mpegtsdemux/mpegtsparse.h:
+ tsparse: Rework handling and cleanups
+ tspad always has a static source pad which output everything received
+ (not functional yet).
+ Program pads are now request pads.
+ Remove all cruft that should have been removed from the switch over
+ to mpegtsbase.
+ Conflicts:
+ gst/mpegtsdemux/mpegtsparse.c
+
+2012-06-20 18:10:37 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * gst/mpegtsdemux/mpegtsbase.c:
+ mpegtbase: Always send EOS
+ subclass will take care of handling it more if needed
+
+2012-06-20 17:52:13 -0500 Mike Ruprecht <mike.ruprecht@collabora.co.uk>
+
+ * ext/rtmp/gstrtmpsrc.c:
+ rtmpsrc: Fix element losing data at the end of buffers
+ rtmpsrc outputs truncated buffers because, when enough data is
+ read to fill the buffer, the amount read that time (todo) is set
+ to zero before it's added to the cumulative buffer size (bsize).
+ The buffer is then truncated to bsize resulting in lost data.
+ This patch adds todo to bsize before setting todo to zero.
+ Fixes #678509
+
+2012-06-20 11:02:03 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * ext/timidity/gsttimidity.c:
+ timidity: Fix flag checking
+
+2012-06-20 10:59:08 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * ext/teletextdec/gstteletextdec.c:
+ teletext: #if0 code that never happens
+ The only place this method is called is with lofp being a guint8 (from
+ a data block).
+
+2012-06-20 10:58:32 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * ext/teletextdec/gstteletextdec.c:
+ teletextdec: Use proper variable type
+
+2012-06-20 12:31:19 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * gst-libs/gst/video/videocontext.c:
+ * gst/hls/gsturidownloader.c:
+ * tests/examples/camerabin2/gst-camera2.c:
+ * tests/examples/camerabin2/gst-camerabin2-test.c:
+ update for bus api changes
+
+2012-06-20 12:19:55 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * tests/check/elements/mpegtsmux.c:
+ tests: mpegtsmux: port test to 0.11
+
+2012-06-20 12:17:37 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegtsmux/mpegtsmux.c:
+ mpegtsmux: fix value handling in pad iteration
+
+2012-06-20 10:34:48 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/gme/gstgme.c:
+ * ext/mimic/gstmimenc.c:
+ * ext/modplug/gstmodplug.cc:
+ * ext/mpeg2enc/gstmpeg2enc.cc:
+ * ext/mplex/gstmplex.cc:
+ * ext/musepack/gstmusepackdec.c:
+ * ext/sndfile/gstsfsink.c:
+ * ext/spc/gstspc.c:
+ * ext/timidity/gsttimidity.c:
+ * ext/timidity/gstwildmidi.c:
+ * gst/aiff/aiffparse.c:
+ * gst/asfmux/gstasfparse.c:
+ * gst/cdxaparse/gstcdxaparse.c:
+ * gst/freeze/gstfreeze.c:
+ * gst/hls/gsthlsdemux.c:
+ * gst/liveadder/liveadder.c:
+ * gst/mpegdemux/gstmpegdemux.c:
+ * gst/mpegtsdemux/mpegtsbase.c:
+ * gst/mxf/mxfdemux.c:
+ * gst/nsf/gstnsf.c:
+ * gst/nuvdemux/gstnuvdemux.c:
+ * gst/rawparse/gstrawparse.c:
+ * gst/tta/gstttaparse.c:
+ update for task api change
+
+2012-06-19 22:45:27 -0400 Matej Knopp <Matej@new-host-5.home>
+
+ * gst/mpegtsmux/mpegtsmux.c:
+ mpegtsmux: fix memory leak
+ https://bugzilla.gnome.org/show_bug.cgi?id=678130
+
+2012-06-19 10:35:48 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * sys/dvb/parsechannels.c:
+ dvb: Detect more issues with configuration file
+ Report useful errors when:
+ * file is present but empty
+ * requested channel is not present
+
+2012-06-19 10:22:50 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * sys/dvb/dvbbasebin.c:
+ * sys/dvb/parsechannels.c:
+ * sys/dvb/parsechannels.h:
+ dvbbasebin: Emit an error when we fail reading the channels file
+ Conflicts:
+ sys/dvb/dvbbasebin.c
+
+2011-02-01 10:23:04 -0800 Fabrizio (Misto) Milo <mistobaan@gmail.com>
+
+ * sys/dvb/gstdvbsrc.c:
+ dvbsrc: spell-check
+
+2011-01-14 19:30:08 -0800 Fabrizio (Misto) Milo <mistobaan@gmail.com>
+
+ * sys/dvb/gstdvbsrc.c:
+ dvb: better dvsrc polarity info
+
+2012-06-18 11:36:15 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * ext/teletextdec/gstteletextdec.c:
+ teletext: Fix initialization
+ We always ended up erroring on the first page otherwise
+ Conflicts:
+ ext/teletextdec/gstteletextdec.c
+
+2012-06-10 11:36:32 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * gst/mpegtsdemux/mpegtspacketizer.c:
+ mpegtspacketizer: Don't use GByteArray
+ Using a simple array comes to the same result for a fraction of the cost
+
+2012-06-10 11:21:41 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * gst/mpegtsdemux/mpegtsbase.c:
+ mpegtbase: Avoid copying GstStructure
+
+2012-06-08 15:12:30 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * gst/mpegtsdemux/gstmpegdesc.c:
+ * gst/mpegtsdemux/gstmpegdesc.h:
+ * gst/mpegtsdemux/mpegtspacketizer.c:
+ mpegdesc: Don't allocate/free GstMPEGDescriptor
+ Just use static variables
+
+2012-06-16 16:49:10 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/mpegdemux/Makefile.am:
+ * gst/mpegdemux/flumpegdemux.c:
+ * gst/mpegdemux/gstmpegdemux.c:
+ * gst/mpegdemux/gstmpegdemux.h:
+ * gst/mpegdemux/gstpesfilter.c:
+ * gst/mpegdemux/plugin.c:
+ mpegdemux: rename plugin to mpegpsdemux
+
+2012-06-16 16:30:17 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/mpegdemux/Makefile.am:
+ * gst/mpegdemux/flumpegdemux.c:
+ * gst/mpegdemux/flutspatinfo.c:
+ * gst/mpegdemux/flutspatinfo.h:
+ * gst/mpegdemux/flutspmtinfo.c:
+ * gst/mpegdemux/flutspmtinfo.h:
+ * gst/mpegdemux/flutspmtstreaminfo.c:
+ * gst/mpegdemux/flutspmtstreaminfo.h:
+ * gst/mpegdemux/gstmpegdesc.c:
+ * gst/mpegdemux/gstmpegdesc.h:
+ * gst/mpegdemux/gstmpegtsdemux.c:
+ * gst/mpegdemux/gstmpegtsdemux.h:
+ * gst/mpegdemux/gstsectionfilter.c:
+ * gst/mpegdemux/gstsectionfilter.h:
+ * gst/mpegdemux/mpegtspacketizer.c:
+ * gst/mpegdemux/mpegtspacketizer.h:
+ * gst/mpegdemux/mpegtsparse.c:
+ * gst/mpegdemux/mpegtsparse.h:
+ mpegdemux: remove unused TS demuxer bits that have moved to tsdemux
+
+2012-06-16 19:20:29 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegtsmux/mpegtsmux.c:
+ * gst/mpegtsmux/mpegtsmux.h:
+ mpegtsmux: remove obsolete struct field
+
+2012-06-16 16:50:43 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegtsmux/Makefile.am:
+ * gst/mpegtsmux/mpegtsmux.c:
+ * gst/mpegtsmux/mpegtsmux_ttxt.c:
+ * gst/mpegtsmux/mpegtsmux_ttxt.h:
+ * gst/mpegtsmux/tsmux/tsmuxstream.c:
+ * gst/mpegtsmux/tsmux/tsmuxstream.h:
+ mpegtsmux: add support for DVB subtitle and teletext streams
+ See bug #673582.
+ Conflicts:
+ gst/mpegtsmux/Makefile.am
+
+2012-06-16 16:50:39 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegtsmux/tsmux/tsmuxcommon.h:
+ * gst/mpegtsmux/tsmux/tsmuxstream.c:
+ mpegtsmux: optionally use fixed-size PES header
+
+2012-06-16 16:50:36 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegtsmux/tsmux/tsmuxstream.c:
+ mpegtsmux: only write PTS and DTS if different
+
+2012-06-16 16:50:32 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegtsmux/tsmux/tsmuxcommon.h:
+ * gst/mpegtsmux/tsmux/tsmuxstream.c:
+ mpegtsmux: optionally set data_alignment flag in PES header
+
+2012-06-16 16:50:27 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegtsmux/tsmux/tsmuxstream.c:
+ mpegtsmux: re-enable inadvertent disabled code
+
+2012-06-16 16:44:32 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * tests/check/elements/mpegtsmux.c:
+ tests: mpegtsmux: adjust again to modified buffer collect behaviour
+ ... by effectively reverting previous adjustment.
+
+2012-06-16 16:49:34 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegtsmux/mpegtsmux.c:
+ * gst/mpegtsmux/mpegtsmux.h:
+ mpegtsmux: use default CollectPads collect heuristic
+ ... with an appropriately custom buffer clip function to arrange for
+ buffer processing.
+ Conflicts:
+ gst/mpegtsmux/mpegtsmux.c
+ gst/mpegtsmux/mpegtsmux.h
+
+2012-06-16 15:54:49 +0300 Raimo Järvi <raimo.jarvi@gmail.com>
+
+ * gst/mpegtsmux/tsmux/tsmuxcommon.h:
+ mpegtsmux: Fix compiler warnings
+ https://bugzilla.gnome.org/show_bug.cgi?id=678211
+
+2012-06-16 19:17:49 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegtsmux/mpegtsmux.c:
+ mpegtsmux: fix ported segment init
+
+2012-06-14 14:49:55 -0700 Matej Knopp <matej.knopp@gmail.com>
+
+ * configure.ac:
+ * gst/mpegtsmux/Makefile.am:
+ * gst/mpegtsmux/mpegtsmux.c:
+ * gst/mpegtsmux/mpegtsmux.h:
+ * gst/mpegtsmux/mpegtsmux_aac.c:
+ * gst/mpegtsmux/mpegtsmux_h264.c:
+ * gst/mpegtsmux/mpegtsmux_h264.h:
+ * gst/mpegtsmux/tsmux/crc.h:
+ * gst/mpegtsmux/tsmux/tsmux.c:
+ mpegtsmux: port to 0.11
+ https://bugzilla.gnome.org/show_bug.cgi?id=678130
+
+2012-06-15 13:00:37 +0200 Andoni Morales Alastruey <ylatuya@gmail.com>
+
+ * sys/d3dvideosink/d3dvideosink.c:
+ d3dvideosink: don't recreate the d3d device if it already exists
+
+2012-06-15 11:41:26 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ * ext/Makefile.am:
+ * ext/jasper/Makefile.am:
+ * ext/jasper/gstjasper.c:
+ * ext/jasper/gstjasperdec.c:
+ * ext/jasper/gstjasperdec.h:
+ * ext/jasper/gstjasperenc.c:
+ * ext/jasper/gstjasperenc.h:
+ * ext/jp2k/Makefile.am:
+ * ext/jp2k/gstjasperdec.c:
+ * ext/jp2k/gstjasperdec.h:
+ * ext/jp2k/gstjasperenc.c:
+ * ext/jp2k/gstjasperenc.h:
+ * ext/jp2k/gstjp2k.c:
+ jasper: Rename from jp2k to jasper
+ Jasper is not the only JPEG2000 library out there and we
+ might want to add encoders/decoders based on OpenJPEG for example.
+
+2012-06-15 10:32:39 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * ext/opus/gstopusenc.c:
+ opusenc: add missing mutex unlock on error path
+
+2012-06-15 10:24:24 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * ext/opus/gstopusdec.c:
+ * ext/opus/gstopusdec.h:
+ * ext/opus/gstopusenc.c:
+ * ext/opus/gstopusenc.h:
+ * ext/opus/gstopusheader.h:
+ * ext/opus/gstopusparse.c:
+ * ext/opus/gstopusparse.h:
+ opus: set author to myself, and update copyright notices
+ because as slomo noted, in fact pretty much all the code in there is mine.
+
+2012-06-15 00:58:43 +0200 Andoni Morales Alastruey <ylatuya@gmail.com>
+
+ * sys/d3dvideosink/d3dvideosink.c:
+ d3dvideosink: don't create new internal windows if we already have one
+
+2012-06-08 23:01:26 +0300 Raimo Järvi <raimo.jarvi@gmail.com>
+
+ * gst/librfb/gstrfbsrc.c:
+ rfbsrc: Fix compiling in Windows
+ https://bugzilla.gnome.org/show_bug.cgi?id=677724
+
+2012-06-11 13:10:43 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * ext/resindvd/Makefile.am:
+ resindvd: rename the lib from libresindvd to libgstresindvd
+ For consistency.
+
+2012-06-07 15:06:34 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * ext/resindvd/resindvdsrc.c:
+ resindvd: guard against not finding some data on a DVD
+ May possibly help with a particular DVD.
+ https://bugzilla.gnome.org/show_bug.cgi?id=673118
+
+2012-06-14 02:47:10 +0200 Sebastian Rasmussen <sebrn@axis.com>
+
+ * tests/check/elements/curlfilesink.c:
+ curlfilesink: Remove stray debug prints
+ Fixes https://bugzilla.gnome.org/show_bug.cgi?id=678060
+
+2012-06-12 21:35:10 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * LICENSE_readme:
+ * ext/Makefile.am:
+ * ext/lcs/Makefile.am:
+ * ext/lcs/gstcolorspace.c:
+ lcs: remove old LCS colorspace conversion plugin
+ Wasn't even ported to 0.10, and even back in the day
+ no one knew where the corresponding lib was from.
+
+2012-06-12 21:29:18 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/chart/.gitignore:
+ * gst/chart/Makefile.am:
+ * gst/chart/chart.vcproj:
+ * gst/chart/gstchart.c:
+ chart: remove old plugin that has never been ported to 0.10
+
+2012-06-12 21:20:38 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/videodrop/Makefile.am:
+ * gst/videodrop/gstvideodrop.c:
+ * gst/videodrop/gstvideodrop.h:
+ * gst/videodrop/videodrop.vcproj:
+ videodrop: drop videodrop
+ It was never even ported to 0.10, and videorate does its job now.
+
+2012-06-12 21:16:52 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * LICENSE_readme:
+ * REQUIREMENTS:
+ * ext/Makefile.am:
+ * ext/arts/.gitignore:
+ * ext/arts/Makefile.am:
+ * ext/arts/gst_arts.c:
+ * ext/arts/gst_arts.h:
+ * ext/arts/gst_artsio.idl:
+ * ext/arts/gst_artsio_impl.cc:
+ * ext/arts/gst_artsio_impl.h:
+ * ext/artsd/Makefile.am:
+ * ext/artsd/REQUIREMENTS:
+ * ext/artsd/gstartsdsink.c:
+ * ext/artsd/gstartsdsink.h:
+ * m4/Makefile.am:
+ * m4/as-arts.m4:
+ * m4/gst-artsc.m4:
+ arts: remove aRts-related plugins
+ aRts development stopped in 2004, it's unlikely ever is
+ still using it. Besides, these elements were never even
+ ported to 0.10.
+
+2012-06-12 21:02:23 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * LICENSE_readme:
+ * ext/Makefile.am:
+ * ext/shout/Makefile.am:
+ * ext/shout/gstshout.c:
+ * ext/shout/gstshout.h:
+ shout: remove old shout plugin that has never been ported to 0.10
+ There's shout2 in -good now.
+
+2012-06-12 20:35:50 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * LICENSE_readme:
+ * ext/Makefile.am:
+ * ext/hermes/Makefile.am:
+ * ext/hermes/gsthermescolorspace.c:
+ hermes: remove hermes colorspace converter that was never ported to 0.10
+
+2012-06-12 19:06:51 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * Android.mk:
+ * configure.ac:
+ * docs/plugins/Makefile.am:
+ * docs/plugins/gst-plugins-bad-plugins-docs.sgml:
+ * docs/plugins/gst-plugins-bad-plugins-sections.txt:
+ * docs/plugins/inspect/plugin-legacyresample.xml:
+ * gst-plugins-bad.spec.in:
+ * gst/legacyresample/Makefile.am:
+ * gst/legacyresample/buffer.c:
+ * gst/legacyresample/buffer.h:
+ * gst/legacyresample/debug.c:
+ * gst/legacyresample/debug.h:
+ * gst/legacyresample/functable.c:
+ * gst/legacyresample/functable.h:
+ * gst/legacyresample/gstlegacyresample.c:
+ * gst/legacyresample/gstlegacyresample.h:
+ * gst/legacyresample/resample.c:
+ * gst/legacyresample/resample.h:
+ * gst/legacyresample/resample_functable.c:
+ * gst/legacyresample/resample_ref.c:
+ * tests/check/Makefile.am:
+ * tests/check/elements/legacyresample.c:
+ legacyresample: remove legacy plugin
+
+2012-06-12 19:02:57 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/Makefile.am:
+ * ext/audioresample/Makefile.am:
+ * ext/audioresample/gstaudioresample.c:
+ * ext/audioresample/gstaudioresample.h:
+ audioresample: remove old audioresample plugin that was never even ported to 0.10
+
+2012-06-12 18:53:13 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * ext/chromaprint/gstchromaprint.c:
+ chromaprint: update for new tag event API
+
+2012-06-12 18:47:21 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * LICENSE_readme:
+ * REQUIREMENTS:
+ * configure.ac:
+ * docs/plugins/gst-plugins-bad-plugins.signals:
+ * docs/plugins/inspect/plugin-divxdec.xml:
+ * docs/plugins/inspect/plugin-divxenc.xml:
+ * ext/Makefile.am:
+ * ext/divx/Makefile.am:
+ * ext/divx/gstdivxdec.c:
+ * ext/divx/gstdivxdec.h:
+ * ext/divx/gstdivxenc.c:
+ * ext/divx/gstdivxenc.h:
+ divx: remove plugin that the world doesn't need any more
+ 2002 called.
+
+2012-06-12 10:59:39 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * gst/dvdspu/gstdvdspu.c:
+ dvdspu: Fix array type
+ We wanted an array of guint8 (and not an array of pointers) to store
+ the data from gst_buffer_extract() and read it.
+
+2012-06-12 09:10:54 +0200 Wim Taymans <wim.taymans@collabora.co.uk>
+
+ * ext/faad/gstfaad.c:
+ faad: don't access buffer after _finish_frame
+ Unmap the buffer before calling _finish_frame because we are not allowed to
+ access it after.
+
+2012-06-11 16:45:53 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegtsmux/mpegtsmux.c:
+ mpegtsmux: sprinkle some more debug catering
+
+2012-06-11 16:44:02 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegtsmux/mpegtsmux.c:
+ * gst/mpegtsmux/mpegtsmux.h:
+ mpegtsmux: add SPN/PTS indexing capabilities
+ Based on patch by Andreas Frisch <fraxinas@opendreambox.org>
+ Fixes https://bugzilla.gnome.org/show_bug.cgi?id=644890
+
+2012-06-11 14:03:26 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegtsmux/mpegtsmux.c:
+ * gst/mpegtsmux/tsmux/tsmux.c:
+ * gst/mpegtsmux/tsmux/tsmux.h:
+ mpegtsmux: avoid memcpy due to temporary packet buffer
+ ... by writing directly into the output buffer instead.
+
+2012-06-11 10:49:15 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
+
+ * gst-libs/gst/codecparsers/gsth264parser.c:
+ h264parser: do not assert on data input, just return
+ https://bugzilla.gnome.org/show_bug.cgi?id=674069
+
+2012-06-10 14:29:58 +0100 Tim-Philipp Müller <tim.muller@collabora.co.uk>
+
+ * gst/dvdspu/gstdvdspu.c:
+ * gst/dvdspu/gstdvdspu.h:
+ * gst/dvdspu/gstspu-vobsub-render.c:
+ dvdspu: allow debugging of render and highlight rectangles via environment variable
+ Enable debugging of rectangles via GST_DVD_SPU_DEBUG.
+ https://bugzilla.gnome.org/show_bug.cgi?id=667223
+ Conflicts:
+ gst/dvdspu/gstspu-vobsub-render.c
+
+2011-12-31 18:35:40 -0600 Rob Clark <rob@ti.com>
+
+ * gst/dvdspu/gstspu-vobsub-render.c:
+ dvdspu: cleanup debug code
+ Clean up debug code for drawing highlight rects which wasn't even
+ compiling previously.
+ TODO: might be nice if this could be controlled by properties or
+ env variables to make it possible to enable the debug code at
+ runtime.
+ https://bugzilla.gnome.org/show_bug.cgi?id=667223
+ Conflicts:
+ gst/dvdspu/gstspu-vobsub-render.c
+
+2012-06-08 17:14:09 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegtsmux/tsmux/tsmuxstream.c:
+ mpegtsmux: plug leaks when freeing stream
+
+2012-06-08 17:13:39 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * tests/check/elements/mpegtsmux.c:
+ tests: mpegtsmux: plug some leaks
+
+2012-06-08 15:58:13 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * gst/audiovisualizers/gstbaseaudiovisualizer.c:
+ * gst/hls/gsthlsdemux.c:
+ * tests/check/elements/curlfilesink.c:
+ * win32/common/config.h:
+ elements: Use gst_pad_set_caps() instead of manual event fiddling
+
+2012-06-08 15:05:12 +0200 Edward Hervey <edward.hervey@collabora.co.uk>
+
+ * common:
+ Automatic update of common submodule
+ From 03a0e57 to 98e386f
+
+2012-06-08 11:55:35 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * tests/check/elements/mpegtsmux.c:
+ tests: mpegtsmux: adjust to modified buffer collect behaviour
+
+2012-06-08 11:12:06 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * tests/check/libs/mpegvideoparser.c:
+ tests: mpegvideoparser: adjust to modified API
+
+2012-06-07 17:43:06 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegtsmux/mpegtsmux.c:
+ * gst/mpegtsmux/mpegtsmux.h:
+ mpegtsmux: drain cached data upon EOS
+
+2012-06-07 17:38:51 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegtsmux/mpegtsmux.c:
+ * gst/mpegtsmux/mpegtsmux.h:
+ mpegtsmux: allow for aligned output
+ ... and refactor packet handling some more in the process.
+ Fixes #651805.
+
+2012-06-07 14:38:10 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegtsmux/mpegtsmux.c:
+ * gst/mpegtsmux/mpegtsmux.h:
+ * gst/mpegtsmux/tsmux/tsmux.c:
+ * gst/mpegtsmux/tsmux/tsmux.h:
+ mpegtsmux: improve m2ts timestamp interpolation
+ * a known PCR should really belong to a packet holding that PCR
+ * interpolation can be extended backward for initial packets (PAT, PMT)
+
+2012-06-07 12:17:24 +0200 Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
+
+ * gst/mpegtsmux/mpegtsmux.c:
+ mpegtsmux: tweak output buffer timestamping
+
+2012-06-07 16:23:25 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * configure.ac:
+ Back to development
+
=== release 0.11.92 ===
-2012-06-07 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+2012-06-07 16:23:09 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
* configure.ac:
- releasing 0.11.92, "Shine On You Crazy Diamond"
+ * docs/plugins/gst-plugins-bad-plugins.args:
+ * docs/plugins/gst-plugins-bad-plugins.hierarchy:
+ * docs/plugins/gst-plugins-bad-plugins.interfaces:
+ * docs/plugins/gst-plugins-bad-plugins.signals:
+ * 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-celt.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-dvbsuboverlay.xml:
+ * docs/plugins/inspect/plugin-dvdspu.xml:
+ * docs/plugins/inspect/plugin-faac.xml:
+ * docs/plugins/inspect/plugin-faad.xml:
+ * docs/plugins/inspect/plugin-flite.xml:
+ * docs/plugins/inspect/plugin-fragmented.xml:
+ * docs/plugins/inspect/plugin-gaudieffects.xml:
+ * docs/plugins/inspect/plugin-geometrictransform.xml:
+ * docs/plugins/inspect/plugin-gmedec.xml:
+ * docs/plugins/inspect/plugin-gsm.xml:
+ * docs/plugins/inspect/plugin-mms.xml:
+ * docs/plugins/inspect/plugin-modplug.xml:
+ * docs/plugins/inspect/plugin-mpegdemux2.xml:
+ * docs/plugins/inspect/plugin-mpegtsdemux.xml:
+ * docs/plugins/inspect/plugin-pcapparse.xml:
+ * docs/plugins/inspect/plugin-rawparse.xml:
+ * docs/plugins/inspect/plugin-removesilence.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-sdp.xml:
+ * docs/plugins/inspect/plugin-segmentclip.xml:
+ * docs/plugins/inspect/plugin-shm.xml:
+ * docs/plugins/inspect/plugin-smooth.xml:
+ * docs/plugins/inspect/plugin-videoparsersbad.xml:
+ * docs/plugins/inspect/plugin-voaacenc.xml:
+ * docs/plugins/inspect/plugin-vp8.xml:
+ * docs/plugins/inspect/plugin-y4mdec.xml:
+ * docs/plugins/inspect/plugin-zbar.xml:
+ * ext/cog/gstcogorc-dist.c:
+ * gst-plugins-bad.doap:
+ * gst/bayer/gstbayerorc-dist.c:
+ * gst/fieldanalysis/gstfieldanalysisorc-dist.c:
+ * gst/gaudieffects/Makefile.am:
+ * win32/common/config.h:
+ Release 0.11.92
+
+2012-06-07 16:22:49 +0200 Sebastian Dröge <sebastian.droege@collabora.co.uk>
+
+ * po/af.po:
+ * po/az.po:
+ * po/bg.po:
+ * po/ca.po:
+ * po/cs.po:
+ * po/da.po:
+ * po/de.po:
+ * po/el.po:
+ * po/en_GB.po:
+ * po/eo.po:
+ * po/es.po:
+ * po/eu.po:
+ * po/fi.po:
+ * po/fr.po:
+ * po/gl.po:
+ * po/hu.po:
+ * po/id.po:
+ * po/it.po:
+ * po/ja.po:
+ * po/ky.po:
+ * po/lt.po:
+ * po/lv.po:
+ * po/mt.po:
+ * po/nb.po:
+ * po/nl.po:
+ * po/or.po:
+ * po/pl.po:
+ * po/pt_BR.po:
+ * po/ro.po:
+ * po/ru.po:
+ * po/sk.po:
+ * po/sl.po:
+ * po/sq.po:
+ * po/sr.po:
+ * po/sv.po:
+ * po/tr.po:
+ * po/uk.po:
+ * po/vi.po:
+ * po/zh_CN.po:
+ Update .po files
2012-06-07 12:33:31 +0100 Vincent Penquerc'h <vincent.penquerch@collabora.co.uk>
diff --git a/Makefile.in b/Makefile.in
index ede5ad32..a62f1816 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -350,6 +350,8 @@ 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@
@@ -357,6 +359,8 @@ 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@
@@ -371,7 +375,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -399,6 +402,10 @@ 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@
@@ -525,6 +532,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/common/Makefile.in b/common/Makefile.in
index 2b783f48..74ca2573 100644
--- a/common/Makefile.in
+++ b/common/Makefile.in
@@ -314,6 +314,8 @@ 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@
@@ -321,6 +323,8 @@ 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@
@@ -335,7 +339,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -363,6 +366,10 @@ 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@
@@ -489,6 +496,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/common/gtk-doc-plugins.mak b/common/gtk-doc-plugins.mak
index f7c05ed6..2468cb08 100644
--- a/common/gtk-doc-plugins.mak
+++ b/common/gtk-doc-plugins.mak
@@ -294,8 +294,7 @@ install-data-local:
$(INSTALL_DATA) $(builddir)/html/$(DOC_MODULE).devhelp2 \
$(DESTDIR)$(TARGET_DIR)/$(DOC_MODULE)-@GST_API_VERSION@.devhelp2; \
fi; \
- (which gtkdoc-rebase >/dev/null && \
- gtkdoc-rebase --relative --dest-dir=$(DESTDIR) --html-dir=$(DESTDIR)$(TARGET_DIR)) || true ; \
+ $(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) --html-dir=$(DESTDIR)$(TARGET_DIR) || true ; \
fi)
uninstall-local:
if test -d $(DESTDIR)$(TARGET_DIR); then \
diff --git a/common/gtk-doc.mak b/common/gtk-doc.mak
index 31b56f9f..a1e07dc8 100644
--- a/common/gtk-doc.mak
+++ b/common/gtk-doc.mak
@@ -194,8 +194,7 @@ install-data-local:
$(INSTALL_DATA) $(builddir)/html/$(DOC_MODULE).devhelp2 \
$(DESTDIR)$(TARGET_DIR)/$(DOC_MODULE)-@GST_API_VERSION@.devhelp2; \
fi; \
- (which gtkdoc-rebase >/dev/null && \
- gtkdoc-rebase --relative --dest-dir=$(DESTDIR) --html-dir=$(DESTDIR)$(TARGET_DIR)) || true ; \
+ $(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) --html-dir=$(DESTDIR)$(TARGET_DIR) || true ; \
fi)
uninstall-local:
if test -d $(DESTDIR)$(TARGET_DIR); then \
diff --git a/common/m4/Makefile.in b/common/m4/Makefile.in
index 3abec0eb..3978da29 100644
--- a/common/m4/Makefile.in
+++ b/common/m4/Makefile.in
@@ -274,6 +274,8 @@ 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@
@@ -281,6 +283,8 @@ 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@
@@ -295,7 +299,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -323,6 +326,10 @@ 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@
@@ -449,6 +456,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/common/m4/gtk-doc.m4 b/common/m4/gtk-doc.m4
index 0c1a3053..b243f1cf 100644
--- a/common/m4/gtk-doc.m4
+++ b/common/m4/gtk-doc.m4
@@ -67,5 +67,4 @@ AC_DEFUN([GTK_DOC_CHECK],
AM_CONDITIONAL([GTK_DOC_BUILD_HTML], [test x$enable_gtk_doc_html = xyes])
AM_CONDITIONAL([GTK_DOC_BUILD_PDF], [test x$enable_gtk_doc_pdf = xyes])
AM_CONDITIONAL([GTK_DOC_USE_LIBTOOL], [test -n "$LIBTOOL"])
- AM_CONDITIONAL([GTK_DOC_USE_REBASE], [test -n "$GTKDOC_REBASE"])
])
diff --git a/config.h.in b/config.h.in
index ee5fd81e..14f1cb3a 100644
--- a/config.h.in
+++ b/config.h.in
@@ -256,6 +256,9 @@
/* Define to enable GSM library (used by gsmenc gsmdec). */
#undef HAVE_GSM
+/* Define if gudev is installed */
+#undef HAVE_GUDEV
+
/* Define to 1 if you have the <highgui.h> header file. */
#undef HAVE_HIGHGUI_H
@@ -289,6 +292,9 @@
/* Define to 1 if you have the `socket' library (-lsocket). */
#undef HAVE_LIBSOCKET
+/* Define if libusb 1.x is installed */
+#undef HAVE_LIBUSB
+
/* Define to enable Linear Systems SDI plugin (used by linsys). */
#undef HAVE_LINSYS
@@ -466,6 +472,9 @@
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
+/* Define to enable UVC H264 (used by uvch264). */
+#undef HAVE_UVCH264
+
/* Define if valgrind should be used */
#undef HAVE_VALGRIND
@@ -493,6 +502,9 @@
/* Defined if the VP8 encoder is available */
#undef HAVE_VP8_ENCODER
+/* Defined if the VP8 decoder has MFQE support */
+#undef HAVE_VP8_MFQE
+
/* Define to enable wayland sink (used by wayland ). */
#undef HAVE_WAYLAND
diff --git a/configure b/configure
index a84b0f90..3736d328 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 0.11.93.
+# Generated by GNU Autoconf 2.69 for GStreamer Bad Plug-ins 0.11.94.
#
# 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='0.11.93'
-PACKAGE_STRING='GStreamer Bad Plug-ins 0.11.93'
+PACKAGE_VERSION='0.11.94'
+PACKAGE_STRING='GStreamer Bad Plug-ins 0.11.94'
PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer'
PACKAGE_URL=''
@@ -674,7 +674,7 @@ RTMP_CFLAGS
USE_VP8_FALSE
USE_VP8_TRUE
VPX_LIBS
-HAVE_VPX
+VPX_CFLAGS
USE_ZBAR_FALSE
USE_ZBAR_TRUE
ZBAR_LIBS
@@ -932,6 +932,16 @@ USE_ASSRENDER_FALSE
USE_ASSRENDER_TRUE
ASSRENDER_LIBS
ASSRENDER_CFLAGS
+LIBUDEV_LIBS
+LIBUDEV_CFLAGS
+USE_UVCH264_FALSE
+USE_UVCH264_TRUE
+LIBUSB_LIBS
+LIBUSB_CFLAGS
+G_UDEV_LIBS
+G_UDEV_CFLAGS
+GST_VIDEO_LIBS
+GST_VIDEO_CFLAGS
USE_VCD_FALSE
USE_VCD_TRUE
USE_SHM_FALSE
@@ -1054,6 +1064,8 @@ USE_PLUGIN_HLS_FALSE
USE_PLUGIN_HLS_TRUE
USE_PLUGIN_HDVPARSE_FALSE
USE_PLUGIN_HDVPARSE_TRUE
+USE_PLUGIN_GDP_FALSE
+USE_PLUGIN_GDP_TRUE
USE_PLUGIN_GEOMETRICTRANSFORM_FALSE
USE_PLUGIN_GEOMETRICTRANSFORM_TRUE
USE_PLUGIN_GAUDIEFFECTS_FALSE
@@ -1194,8 +1206,6 @@ PYTHON_EXEC_PREFIX
PYTHON_PREFIX
PYTHON_VERSION
PYTHON
-GTK_DOC_USE_REBASE_FALSE
-GTK_DOC_USE_REBASE_TRUE
GTK_DOC_USE_LIBTOOL_FALSE
GTK_DOC_USE_LIBTOOL_TRUE
GTK_DOC_BUILD_PDF_FALSE
@@ -1501,6 +1511,7 @@ enable_freeverb
enable_frei0r
enable_gaudieffects
enable_geometrictransform
+enable_gdp
enable_hdvparse
enable_hls
enable_id3tag
@@ -1554,6 +1565,7 @@ enable_avc
enable_quicktime
enable_shm
enable_vcd
+enable_uvch264
enable_assrender
enable_voamrwbenc
enable_voaacenc
@@ -1676,6 +1688,12 @@ EXIF_CFLAGS
EXIF_LIBS
ORC_CFLAGS
ORC_LIBS
+GST_VIDEO_CFLAGS
+GST_VIDEO_LIBS
+G_UDEV_CFLAGS
+G_UDEV_LIBS
+LIBUSB_CFLAGS
+LIBUSB_LIBS
ASSRENDER_CFLAGS
ASSRENDER_LIBS
VOAMRWBENC_CFLAGS
@@ -1769,6 +1787,8 @@ SCHRO_CFLAGS
SCHRO_LIBS
ZBAR_CFLAGS
ZBAR_LIBS
+VPX_CFLAGS
+VPX_LIBS
RTMP_CFLAGS
RTMP_LIBS
SPANDSP_CFLAGS
@@ -2315,7 +2335,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 0.11.93 to adapt to many kinds of systems.
+\`configure' configures GStreamer Bad Plug-ins 0.11.94 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -2390,7 +2410,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of GStreamer Bad Plug-ins 0.11.93:";;
+ short | recursive ) echo "Configuration of GStreamer Bad Plug-ins 0.11.94:";;
esac
cat <<\_ACEOF
@@ -2455,6 +2475,7 @@ Optional Features:
--disable-gaudieffects disable dependency-less gaudieffects plugin
--disable-geometrictransform
disable dependency-less geometrictransform plugin
+ --disable-gdp disable dependency-less gdp plugin
--disable-hdvparse disable dependency-less hdvparse plugin
--disable-hls disable dependency-less hls plugin
--disable-id3tag disable dependency-less id3tag plugin
@@ -2508,6 +2529,7 @@ Optional Features:
--disable-quicktime disable QuickTime wrapper: qtwrapper
--disable-shm disable POSIX shared memory source and sink: shm
--disable-vcd disable Video CD: vcdsrc
+ --disable-uvch264 disable UVC H264: uvch264
--disable-assrender disable ASS/SSA renderer: assrender
--disable-voamrwbenc disable vo-amrwbenc library: vo-amrwbenc
--disable-voaacenc disable vo-aacenc library: vo-aacenc
@@ -2689,6 +2711,16 @@ Some influential environment variables:
EXIF_LIBS linker flags for EXIF, overriding pkg-config
ORC_CFLAGS C compiler flags for ORC, overriding pkg-config
ORC_LIBS linker flags for ORC, overriding pkg-config
+ GST_VIDEO_CFLAGS
+ C compiler flags for GST_VIDEO, overriding pkg-config
+ GST_VIDEO_LIBS
+ linker flags for GST_VIDEO, overriding pkg-config
+ G_UDEV_CFLAGS
+ C compiler flags for G_UDEV, overriding pkg-config
+ G_UDEV_LIBS linker flags for G_UDEV, overriding pkg-config
+ LIBUSB_CFLAGS
+ C compiler flags for LIBUSB, overriding pkg-config
+ LIBUSB_LIBS linker flags for LIBUSB, overriding pkg-config
ASSRENDER_CFLAGS
C compiler flags for ASSRENDER, overriding pkg-config
ASSRENDER_LIBS
@@ -2836,6 +2868,8 @@ Some influential environment variables:
SCHRO_LIBS linker flags for SCHRO, overriding pkg-config
ZBAR_CFLAGS C compiler flags for ZBAR, overriding pkg-config
ZBAR_LIBS linker flags for ZBAR, overriding pkg-config
+ VPX_CFLAGS C compiler flags for VPX, overriding pkg-config
+ VPX_LIBS linker flags for VPX, overriding pkg-config
RTMP_CFLAGS C compiler flags for RTMP, overriding pkg-config
RTMP_LIBS linker flags for RTMP, overriding pkg-config
SPANDSP_CFLAGS
@@ -2913,7 +2947,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-GStreamer Bad Plug-ins configure 0.11.93
+GStreamer Bad Plug-ins configure 0.11.94
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -3886,7 +3920,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 0.11.93, which was
+It was created by GStreamer Bad Plug-ins $as_me 0.11.94, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -4820,7 +4854,7 @@ fi
# Define the identity of the package.
PACKAGE='gst-plugins-bad'
- VERSION='0.11.93'
+ VERSION='0.11.94'
cat >>confdefs.h <<_ACEOF
@@ -4943,9 +4977,9 @@ $as_echo "$am_cv_prog_tar_ustar" >&6; }
- PACKAGE_VERSION_MAJOR=$(echo 0.11.93 | cut -d'.' -f1)
- PACKAGE_VERSION_MINOR=$(echo 0.11.93 | cut -d'.' -f2)
- PACKAGE_VERSION_MICRO=$(echo 0.11.93 | cut -d'.' -f3)
+ PACKAGE_VERSION_MAJOR=$(echo 0.11.94 | cut -d'.' -f1)
+ PACKAGE_VERSION_MINOR=$(echo 0.11.94 | cut -d'.' -f2)
+ PACKAGE_VERSION_MICRO=$(echo 0.11.94 | cut -d'.' -f3)
@@ -4956,7 +4990,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 0.11.93 | cut -d'.' -f4)
+ NANO=$(echo 0.11.94 | cut -d'.' -f4)
if test x"$NANO" = x || test "x$NANO" = "x0" ; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: 0 (release)" >&5
@@ -13868,8 +13902,8 @@ CC="$lt_save_CC"
-GST_REQ=0.11.93
-GSTPB_REQ=0.11.93
+GST_REQ=0.11.94
+GSTPB_REQ=0.11.94
@@ -22711,14 +22745,14 @@ fi
if test x$enable_gtk_doc = xyes; then
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-doc >= 1.3\""; } >&5
- ($PKG_CONFIG --exists --print-errors "gtk-doc >= 1.3") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-doc >= 1.12\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gtk-doc >= 1.12") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
:
else
- as_fn_error $? "You need to have gtk-doc >= 1.3 installed to build $PACKAGE_NAME" "$LINENO" 5
+ as_fn_error $? "You need to have gtk-doc >= 1.12 installed to build $PACKAGE_NAME" "$LINENO" 5
fi
if test "x$PACKAGE_NAME" != "xglib"; then
@@ -22942,14 +22976,6 @@ else
GTK_DOC_USE_LIBTOOL_FALSE=
fi
- if test -n "$GTKDOC_REBASE"; then
- GTK_DOC_USE_REBASE_TRUE=
- GTK_DOC_USE_REBASE_FALSE='#'
-else
- GTK_DOC_USE_REBASE_TRUE='#'
- GTK_DOC_USE_REBASE_FALSE=
-fi
-
@@ -27677,19 +27703,19 @@ _ACEOF
GST_PLUGINS_NONPORTED=" aiff \
cdxaparse \
dccp faceoverlay \
- fieldanalysis freeverb freeze frei0r \
- hdvparse id3tag inter ivfparse jpegformat jp2kdecimator \
- kate liveadder librfb \
+ fieldanalysis freeverb frei0r \
+ hdvparse ivfparse jp2kdecimator \
+ kate librfb \
mpegpsmux mve mxf mythtv nsf nuvdemux \
- patchdetect pnm real \
- sdi siren speed subenc stereo tta videofilters \
+ patchdetect real \
+ sdi subenc stereo tta videofilters \
videomeasure videosignal vmnc \
decklink fbdev linsys vcd \
- apexsink cdaudio cog dc1394 dirac directfb resindvd \
+ apexsink cdaudio cog dc1394 dirac directfb \
gsettings jasper ladspa \
- musepack musicbrainz nas neon ofa openal rsvg sdl sndfile spandsp spc timidity \
+ musepack musicbrainz nas neon ofa openal rsvg sdl sndfile timidity \
directsound directdraw direct3d9 acm wininet \
- wildmidi xvid lv2 teletextdec dvb sndio"
+ wildmidi xvid lv2 teletextdec sndio uvch264"
@@ -28725,6 +28751,49 @@ fi
+ GST_PLUGINS_ALL="$GST_PLUGINS_ALL gdp"
+
+
+
+ # Check whether --enable-gdp was given.
+if test "${enable_gdp+set}" = set; then :
+ enableval=$enable_gdp;
+ case "${enableval}" in
+ yes) gst_use_gdp=yes ;;
+ no) gst_use_gdp=no ;;
+ *) as_fn_error $? "bad value ${enableval} for --enable-gdp" "$LINENO" 5 ;;
+ esac
+
+else
+ gst_use_gdp=yes
+fi
+
+ if test x$gst_use_gdp = xno; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: disabling dependency-less plugin gdp" >&5
+$as_echo "$as_me: disabling dependency-less plugin gdp" >&6;}
+ WITHOUT_PLUGINS="$WITHOUT_PLUGINS gdp"
+ fi
+
+
+ if [ -z "$WITH_PLUGINS" ] || echo " $WITH_PLUGINS " | tr , ' ' | grep -i " gdp " > /dev/null; then
+ GST_PLUGINS_SELECTED="$GST_PLUGINS_SELECTED gdp"
+ fi
+ if echo " $WITHOUT_PLUGINS " | tr , ' ' | grep -i " gdp " > /dev/null; then
+ GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ gdp / /'`
+ fi
+ if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " gdp " > /dev/null; then
+ GST_PLUGINS_SELECTED=`echo " $GST_PLUGINS_SELECTED " | $SED -e 's/ gdp / /'`
+ fi
+ if echo " $GST_PLUGINS_SELECTED " | grep -i " gdp " > /dev/null; then
+ USE_PLUGIN_GDP_TRUE=
+ USE_PLUGIN_GDP_FALSE='#'
+else
+ USE_PLUGIN_GDP_TRUE='#'
+ USE_PLUGIN_GDP_FALSE=
+fi
+
+
+
GST_PLUGINS_ALL="$GST_PLUGINS_ALL hdvparse"
@@ -31206,6 +31275,13 @@ int main () {
return 0;
}
+int
+main ()
+{
+
+ ;
+ return 0;
+}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
HAVE_DIRECTSHOW="yes"
@@ -31969,6 +32045,360 @@ fi
+echo
+{ $as_echo "$as_me:${as_lineno-$LINENO}: *** checking feature: UVC H264 ***" >&5
+$as_echo "$as_me: *** checking feature: UVC H264 ***" >&6;}
+if test "xuvch264" != "x"
+then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: *** for plug-ins: uvch264 ***" >&5
+$as_echo "$as_me: *** for plug-ins: uvch264 ***" >&6;}
+fi
+NOUSE=
+if test "x$USE_UVCH264" = "xno"; then
+ NOUSE="yes"
+fi
+# Check whether --enable-uvch264 was given.
+if test "${enable_uvch264+set}" = set; then :
+ enableval=$enable_uvch264; case "${enableval}" in
+ yes) USE_UVCH264=yes;;
+ no) USE_UVCH264=no;;
+ *) as_fn_error $? "bad value ${enableval} for --enable-uvch264" "$LINENO" 5 ;;
+ esac
+else
+ USE_UVCH264=yes
+fi
+
+if test "x$NOUSE" = "xyes"; then
+ USE_UVCH264="no"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** uvch264 pre-configured not to be built" >&5
+$as_echo "$as_me: WARNING: *** uvch264 pre-configured not to be built" >&2;}
+fi
+NOUSE=
+
+if echo " $GST_PLUGINS_NONPORTED " | tr , ' ' | grep -i " UVCH264 " > /dev/null; then
+ USE_UVCH264="no"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** uvch264 not ported" >&5
+$as_echo "$as_me: WARNING: *** uvch264 not ported" >&2;}
+fi
+
+
+if test x$USE_UVCH264 = 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_UVCH264=no
+
+ ac_fn_c_check_header_mongrel "$LINENO" "linux/uvcvideo.h" "ac_cv_header_linux_uvcvideo_h" "$ac_includes_default"
+if test "x$ac_cv_header_linux_uvcvideo_h" = xyes; then :
+ HAVE_UVCVIDEO_H=yes
+else
+ HAVE_UVCVIDEO_H=no
+fi
+
+
+
+ which="gstreamer-video-0.10 >= 0.10.36"
+ required="no"
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GST_VIDEO" >&5
+$as_echo_n "checking for GST_VIDEO... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+ if test -n "$GST_VIDEO_CFLAGS"; then
+ pkg_cv_GST_VIDEO_CFLAGS="$GST_VIDEO_CFLAGS"
+ else
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "$which") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GST_VIDEO_CFLAGS=`$PKG_CONFIG --cflags "$which" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ fi
+else
+ pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+ if test -n "$GST_VIDEO_LIBS"; then
+ pkg_cv_GST_VIDEO_LIBS="$GST_VIDEO_LIBS"
+ else
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$which\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "$which") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_GST_VIDEO_LIBS=`$PKG_CONFIG --libs "$which" 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
+ GST_VIDEO_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$which"`
+ else
+ GST_VIDEO_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$which"`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$GST_VIDEO_PKG_ERRORS" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+ HAVE_GST_VIDEO="no"
+ if test "x$required" = "xyes"; then
+ as_fn_error $? "$GST_VIDEO_PKG_ERRORS" "$LINENO" 5
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: $GST_VIDEO_PKG_ERRORS" >&5
+$as_echo "$as_me: $GST_VIDEO_PKG_ERRORS" >&6;}
+ fi
+
+elif test $pkg_failed = untried; then
+
+ HAVE_GST_VIDEO="no"
+ if test "x$required" = "xyes"; then
+ as_fn_error $? "$GST_VIDEO_PKG_ERRORS" "$LINENO" 5
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: $GST_VIDEO_PKG_ERRORS" >&5
+$as_echo "$as_me: $GST_VIDEO_PKG_ERRORS" >&6;}
+ fi
+
+else
+ GST_VIDEO_CFLAGS=$pkg_cv_GST_VIDEO_CFLAGS
+ GST_VIDEO_LIBS=$pkg_cv_GST_VIDEO_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+ HAVE_GST_VIDEO="yes"
+
+fi
+
+
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for G_UDEV" >&5
+$as_echo_n "checking for G_UDEV... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+ if test -n "$G_UDEV_CFLAGS"; then
+ pkg_cv_G_UDEV_CFLAGS="$G_UDEV_CFLAGS"
+ else
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gudev-1.0 \""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gudev-1.0 ") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_G_UDEV_CFLAGS=`$PKG_CONFIG --cflags "gudev-1.0 " 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ fi
+else
+ pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+ if test -n "$G_UDEV_LIBS"; then
+ pkg_cv_G_UDEV_LIBS="$G_UDEV_LIBS"
+ else
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gudev-1.0 \""; } >&5
+ ($PKG_CONFIG --exists --print-errors "gudev-1.0 ") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_G_UDEV_LIBS=`$PKG_CONFIG --libs "gudev-1.0 " 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
+ G_UDEV_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gudev-1.0 "`
+ else
+ G_UDEV_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gudev-1.0 "`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$G_UDEV_PKG_ERRORS" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ HAVE_GUDEV="no"
+elif test $pkg_failed = untried; then
+ HAVE_GUDEV="no"
+else
+ G_UDEV_CFLAGS=$pkg_cv_G_UDEV_CFLAGS
+ G_UDEV_LIBS=$pkg_cv_G_UDEV_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+
+$as_echo "#define HAVE_GUDEV 1" >>confdefs.h
+
+ HAVE_GUDEV="yes"
+fi
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBUSB" >&5
+$as_echo_n "checking for LIBUSB... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+ if test -n "$LIBUSB_CFLAGS"; then
+ pkg_cv_LIBUSB_CFLAGS="$LIBUSB_CFLAGS"
+ else
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libusb-1.0 \""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libusb-1.0 ") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_LIBUSB_CFLAGS=`$PKG_CONFIG --cflags "libusb-1.0 " 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ fi
+else
+ pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+ if test -n "$LIBUSB_LIBS"; then
+ pkg_cv_LIBUSB_LIBS="$LIBUSB_LIBS"
+ else
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libusb-1.0 \""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libusb-1.0 ") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_LIBUSB_LIBS=`$PKG_CONFIG --libs "libusb-1.0 " 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
+ LIBUSB_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libusb-1.0 "`
+ else
+ LIBUSB_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libusb-1.0 "`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$LIBUSB_PKG_ERRORS" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ HAVE_LIBUSB="no"
+elif test $pkg_failed = untried; then
+ HAVE_LIBUSB="no"
+else
+ LIBUSB_CFLAGS=$pkg_cv_LIBUSB_CFLAGS
+ LIBUSB_LIBS=$pkg_cv_LIBUSB_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+
+$as_echo "#define HAVE_LIBUSB 1" >>confdefs.h
+
+ HAVE_LIBUSB="yes"
+fi
+ if test "x$HAVE_UVCVIDEO_H" == "xyes" && \
+ test "x$HAVE_GUDEV" == "xyes" && \
+ test "x$HAVE_LIBUSB" == "xyes"; then
+ HAVE_UVCH264=yes
+ else
+ HAVE_UVCH264=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_UVCH264 = xno; then
+ USE_UVCH264=no
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will be built: uvch264" >&5
+$as_echo "$as_me: *** These plugins will be built: uvch264" >&6;}
+ fi
+fi
+if test x$USE_UVCH264 = xyes; then
+ :
+ if test "xuvch264" != "x"; then
+ GST_PLUGINS_YES="\tuvch264\n$GST_PLUGINS_YES"
+ fi
+
+$as_echo "#define HAVE_UVCH264 /**/" >>confdefs.h
+
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: *** These plugins will not be built: uvch264" >&5
+$as_echo "$as_me: *** These plugins will not be built: uvch264" >&6;}
+ if test "xuvch264" != "x"; then
+ GST_PLUGINS_NO="\tuvch264\n$GST_PLUGINS_NO"
+ fi
+ :
+fi
+ if test x$USE_UVCH264 = xyes; then
+ USE_UVCH264_TRUE=
+ USE_UVCH264_FALSE='#'
+else
+ USE_UVCH264_TRUE='#'
+ USE_UVCH264_FALSE=
+fi
+
+
+
+
+
+
+
+
+
if test "x$BUILD_EXTERNAL" = "xyes"; then
echo
@@ -34642,12 +35072,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-server <= 0.85.0 wayland-client <= 0.85.0\""; } >&5
- ($PKG_CONFIG --exists --print-errors "wayland-server <= 0.85.0 wayland-client <= 0.85.0") 2>&5
+ { { $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
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-server <= 0.85.0 wayland-client <= 0.85.0" 2>/dev/null`
+ pkg_cv_WAYLAND_CFLAGS=`$PKG_CONFIG --cflags "wayland-client >= 0.95.0" 2>/dev/null`
else
pkg_failed=yes
fi
@@ -34660,12 +35090,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-server <= 0.85.0 wayland-client <= 0.85.0\""; } >&5
- ($PKG_CONFIG --exists --print-errors "wayland-server <= 0.85.0 wayland-client <= 0.85.0") 2>&5
+ { { $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
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-server <= 0.85.0 wayland-client <= 0.85.0" 2>/dev/null`
+ pkg_cv_WAYLAND_LIBS=`$PKG_CONFIG --libs "wayland-client >= 0.95.0" 2>/dev/null`
else
pkg_failed=yes
fi
@@ -34684,25 +35114,19 @@ 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-server <= 0.85.0 wayland-client <= 0.85.0"`
+ WAYLAND_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "wayland-client >= 0.95.0"`
else
- WAYLAND_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "wayland-server <= 0.85.0 wayland-client <= 0.85.0"`
+ WAYLAND_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "wayland-client >= 0.95.0"`
fi
# Put the nasty error message in config.log where it belongs
echo "$WAYLAND_PKG_ERRORS" >&5
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no wayland." >&5
-$as_echo "no wayland." >&6; }
- HAVE_WAYLAND="no"
+ HAVE_WAYLAND="no"
elif test $pkg_failed = untried; then
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no wayland." >&5
-$as_echo "no wayland." >&6; }
- HAVE_WAYLAND="no"
+ HAVE_WAYLAND="no"
else
WAYLAND_CFLAGS=$pkg_cv_WAYLAND_CFLAGS
@@ -34710,41 +35134,10 @@ else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
- ac_fn_c_check_header_mongrel "$LINENO" "wayland-client.h" "ac_cv_header_wayland_client_h" "$ac_includes_default"
-if test "x$ac_cv_header_wayland_client_h" = xyes; then :
- HAVE_WAYLAND_CLIENT="yes"
-else
- HAVE_WAYLAND_CLIENT="no"
-fi
-
-
- ac_fn_c_check_header_mongrel "$LINENO" "wayland-client-protocol.h" "ac_cv_header_wayland_client_protocol_h" "$ac_includes_default"
-if test "x$ac_cv_header_wayland_client_protocol_h" = xyes; then :
- HAVE_WAYLAND_CLIENT_PROTOCOL="yes"
-else
- HAVE_WAYLAND_CLIENT_PROTOCOL="no"
+ HAVE_WAYLAND="yes"
fi
- if test "x$HAVE_WAYLAND_CLIENT" = "xno"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: wayland-client.h could not be found." >&5
-$as_echo "wayland-client.h could not be found." >&6; }
- HAVE_WAYLAND="no"
- elif test "x$HAVE_WAYLAND_CLIENT_PROTOCOL" = "xno"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: wayland-client-protocol.h could not be found." >&5
-$as_echo "wayland-client-protocol.h could not be found." >&6; }
- HAVE_WAYLAND="no"
- else
- HAVE_WAYLAND="yes"
- WAYLAND_LIBS="-lwayland-client"
- fi
-
-fi
-WAYLAND_CFLAGS=""
-
-
-
-
LIBS=$gst_check_save_LIBS
LDFLAGS=$gst_check_save_LDFLAGS
CFLAGS=$gst_check_save_CFLAGS
@@ -46622,66 +47015,84 @@ if test x$USE_VP8 = xyes; then
HAVE_VP8=no
- VPX_LIBS=""
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for vpx_codec_version in -lvpx" >&5
-$as_echo_n "checking for vpx_codec_version in -lvpx... " >&6; }
-if ${ac_cv_lib_vpx_vpx_codec_version+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lvpx $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for VPX" >&5
+$as_echo_n "checking for VPX... " >&6; }
-/* 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 vpx_codec_version ();
-int
-main ()
-{
-return vpx_codec_version ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_vpx_vpx_codec_version=yes
+if test -n "$PKG_CONFIG"; then
+ if test -n "$VPX_CFLAGS"; then
+ pkg_cv_VPX_CFLAGS="$VPX_CFLAGS"
+ else
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"vpx\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "vpx") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_VPX_CFLAGS=`$PKG_CONFIG --cflags "vpx" 2>/dev/null`
else
- ac_cv_lib_vpx_vpx_codec_version=no
+ pkg_failed=yes
fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+ fi
+else
+ pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+ if test -n "$VPX_LIBS"; then
+ pkg_cv_VPX_LIBS="$VPX_LIBS"
+ else
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"vpx\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "vpx") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_VPX_LIBS=`$PKG_CONFIG --libs "vpx" 2>/dev/null`
+else
+ pkg_failed=yes
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vpx_vpx_codec_version" >&5
-$as_echo "$ac_cv_lib_vpx_vpx_codec_version" >&6; }
-if test "x$ac_cv_lib_vpx_vpx_codec_version" = xyes; then :
- HAVE_VPX=yes
+ fi
else
- HAVE_VPX=no
+ pkg_failed=untried
fi
- if test "x$HAVE_VPX" = "xyes"; then
- ac_fn_c_check_header_mongrel "$LINENO" "vpx/vpx_codec.h" "ac_cv_header_vpx_vpx_codec_h" "$ac_includes_default"
-if test "x$ac_cv_header_vpx_vpx_codec_h" = xyes; then :
- :
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
else
- HAVE_VPX=no
+ _pkg_short_errors_supported=no
fi
+ if test $_pkg_short_errors_supported = yes; then
+ VPX_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "vpx"`
+ else
+ VPX_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "vpx"`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$VPX_PKG_ERRORS" >&5
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ HAVE_VPX="no"
+elif test $pkg_failed = untried; then
+ HAVE_VPX="no"
+else
+ VPX_CFLAGS=$pkg_cv_VPX_CFLAGS
+ VPX_LIBS=$pkg_cv_VPX_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ HAVE_VPX="yes"
+fi
- if test "x$HAVE_VPX" = "xyes"; then
-
+ if test $HAVE_VPX = "yes"; then
HAVE_VP8_ENCODER=no
HAVE_VP8_DECODER=no
OLD_LIBS="$LIBS"
- LIBS="$LIBS $LIBM -lpthread"
+ LIBS="$LIBS $VPX_LIBS"
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for vpx_codec_vp8_cx_algo in -lvpx" >&5
$as_echo_n "checking for vpx_codec_vp8_cx_algo in -lvpx... " >&6; }
if ${ac_cv_lib_vpx_vpx_codec_vp8_cx_algo+:} false; then :
@@ -46724,7 +47135,6 @@ if test "x$ac_cv_lib_vpx_vpx_codec_vp8_cx_algo" = xyes; then :
$as_echo "#define HAVE_VP8_ENCODER 1" >>confdefs.h
- VPX_LIBS="-lvpx"
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for VP8E_SET_TUNING presence" >&5
$as_echo_n "checking for VP8E_SET_TUNING presence... " >&6; }
@@ -46805,20 +47215,45 @@ if test "x$ac_cv_lib_vpx_vpx_codec_vp8_dx_algo" = xyes; then :
$as_echo "#define HAVE_VP8_DECODER 1" >>confdefs.h
- VPX_LIBS="-lvpx"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for VP8_MFQE presence" >&5
+$as_echo_n "checking for VP8_MFQE presence... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
-fi
+#include <vpx/vpx_decoder.h>
+#include <vpx/vp8dx.h>
+int foo=VP8_MFQE;
- LIBS="$OLD_LIBS"
+int
+main ()
+{
- else
- :
- fi
- else
- :
- fi
+return 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+
+$as_echo "#define HAVE_VP8_MFQE 1" >>confdefs.h
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+
+ LIBS="$OLD_LIBS"
+ fi
@@ -48315,6 +48750,14 @@ else
USE_SNDIO_FALSE=
fi
+ if false; then
+ USE_UVCH264_TRUE=
+ USE_UVCH264_FALSE='#'
+else
+ USE_UVCH264_TRUE='#'
+ USE_UVCH264_FALSE=
+fi
+
fi
@@ -48364,7 +48807,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/freeze/Makefile gst/freeverb/Makefile gst/frei0r/Makefile gst/gaudieffects/Makefile gst/geometrictransform/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/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/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/vp8/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/freeze/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/vp8/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
@@ -48609,10 +49052,6 @@ if test -z "${GTK_DOC_USE_LIBTOOL_TRUE}" && test -z "${GTK_DOC_USE_LIBTOOL_FALSE
as_fn_error $? "conditional \"GTK_DOC_USE_LIBTOOL\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
-if test -z "${GTK_DOC_USE_REBASE_TRUE}" && test -z "${GTK_DOC_USE_REBASE_FALSE}"; then
- as_fn_error $? "conditional \"GTK_DOC_USE_REBASE\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
if test -z "${ENABLE_PLUGIN_DOCS_TRUE}" && test -z "${ENABLE_PLUGIN_DOCS_FALSE}"; then
as_fn_error $? "conditional \"ENABLE_PLUGIN_DOCS\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -48745,6 +49184,10 @@ if test -z "${USE_PLUGIN_GEOMETRICTRANSFORM_TRUE}" && test -z "${USE_PLUGIN_GEOM
as_fn_error $? "conditional \"USE_PLUGIN_GEOMETRICTRANSFORM\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${USE_PLUGIN_GDP_TRUE}" && test -z "${USE_PLUGIN_GDP_FALSE}"; then
+ as_fn_error $? "conditional \"USE_PLUGIN_GDP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${USE_PLUGIN_HDVPARSE_TRUE}" && test -z "${USE_PLUGIN_HDVPARSE_FALSE}"; then
as_fn_error $? "conditional \"USE_PLUGIN_HDVPARSE\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -48973,6 +49416,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_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
+fi
if test -z "${USE_ASSRENDER_TRUE}" && test -z "${USE_ASSRENDER_FALSE}"; then
as_fn_error $? "conditional \"USE_ASSRENDER\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -49521,6 +49968,10 @@ if test -z "${USE_SNDIO_TRUE}" && test -z "${USE_SNDIO_FALSE}"; then
as_fn_error $? "conditional \"USE_SNDIO\" 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
+fi
: "${CONFIG_STATUS=./config.status}"
ac_write_fail=0
@@ -49918,7 +50369,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 0.11.93, which was
+This file was extended by GStreamer Bad Plug-ins $as_me 0.11.94, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -49984,7 +50435,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 0.11.93
+GStreamer Bad Plug-ins config.status 0.11.94
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
@@ -50549,6 +51000,7 @@ do
"gst/frei0r/Makefile") CONFIG_FILES="$CONFIG_FILES gst/frei0r/Makefile" ;;
"gst/gaudieffects/Makefile") CONFIG_FILES="$CONFIG_FILES gst/gaudieffects/Makefile" ;;
"gst/geometrictransform/Makefile") CONFIG_FILES="$CONFIG_FILES gst/geometrictransform/Makefile" ;;
+ "gst/gdp/Makefile") CONFIG_FILES="$CONFIG_FILES gst/gdp/Makefile" ;;
"gst/hdvparse/Makefile") CONFIG_FILES="$CONFIG_FILES gst/hdvparse/Makefile" ;;
"gst/hls/Makefile") CONFIG_FILES="$CONFIG_FILES gst/hls/Makefile" ;;
"gst/id3tag/Makefile") CONFIG_FILES="$CONFIG_FILES gst/id3tag/Makefile" ;;
@@ -50617,6 +51069,7 @@ do
"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" ;;
+ "sys/uvch264/Makefile") CONFIG_FILES="$CONFIG_FILES sys/uvch264/Makefile" ;;
"sys/vcd/Makefile") CONFIG_FILES="$CONFIG_FILES sys/vcd/Makefile" ;;
"sys/vdpau/Makefile") CONFIG_FILES="$CONFIG_FILES sys/vdpau/Makefile" ;;
"sys/vdpau/gstvdp/Makefile") CONFIG_FILES="$CONFIG_FILES sys/vdpau/gstvdp/Makefile" ;;
@@ -50635,6 +51088,7 @@ do
"tests/examples/mxf/Makefile") CONFIG_FILES="$CONFIG_FILES tests/examples/mxf/Makefile" ;;
"tests/examples/scaletempo/Makefile") CONFIG_FILES="$CONFIG_FILES tests/examples/scaletempo/Makefile" ;;
"tests/examples/opencv/Makefile") CONFIG_FILES="$CONFIG_FILES tests/examples/opencv/Makefile" ;;
+ "tests/examples/uvch264/Makefile") CONFIG_FILES="$CONFIG_FILES tests/examples/uvch264/Makefile" ;;
"tests/icles/Makefile") CONFIG_FILES="$CONFIG_FILES tests/icles/Makefile" ;;
"ext/voamrwbenc/Makefile") CONFIG_FILES="$CONFIG_FILES ext/voamrwbenc/Makefile" ;;
"ext/voaacenc/Makefile") CONFIG_FILES="$CONFIG_FILES ext/voaacenc/Makefile" ;;
diff --git a/configure.ac b/configure.ac
index 47cc30e4..9dca8f79 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, 0.11.93,
+AC_INIT(GStreamer Bad Plug-ins, 0.11.94,
http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer,
gst-plugins-bad)
@@ -53,8 +53,8 @@ dnl sets GST_LT_LDFLAGS
AS_LIBTOOL(GST, 0, 0, 0)
dnl *** required versions of GStreamer stuff ***
-GST_REQ=0.11.93
-GSTPB_REQ=0.11.93
+GST_REQ=0.11.94
+GSTPB_REQ=0.11.94
dnl *** autotools stuff ****
@@ -126,7 +126,7 @@ AC_PATH_PROG(VALGRIND_PATH, valgrind, no)
AM_CONDITIONAL(HAVE_VALGRIND, test ! "x$VALGRIND_PATH" = "xno")
dnl check for documentation tools
-GTK_DOC_CHECK([1.3])
+GTK_DOC_CHECK([1.12])
AS_PATH_PYTHON([2.1])
AG_GST_PLUGIN_DOCS([1.3],[2.1])
@@ -313,19 +313,19 @@ dnl Make sure you have a space before and after all plugins
GST_PLUGINS_NONPORTED=" aiff \
cdxaparse \
dccp faceoverlay \
- fieldanalysis freeverb freeze frei0r \
- hdvparse id3tag inter ivfparse jpegformat jp2kdecimator \
- kate liveadder librfb \
+ fieldanalysis freeverb frei0r \
+ hdvparse ivfparse jp2kdecimator \
+ kate librfb \
mpegpsmux mve mxf mythtv nsf nuvdemux \
- patchdetect pnm real \
- sdi siren speed subenc stereo tta videofilters \
+ patchdetect real \
+ sdi subenc stereo tta videofilters \
videomeasure videosignal vmnc \
decklink fbdev linsys vcd \
- apexsink cdaudio cog dc1394 dirac directfb resindvd \
+ apexsink cdaudio cog dc1394 dirac directfb \
gsettings jasper ladspa \
- musepack musicbrainz nas neon ofa openal rsvg sdl sndfile spandsp spc timidity \
+ musepack musicbrainz nas neon ofa openal rsvg sdl sndfile timidity \
directsound directdraw direct3d9 acm wininet \
- wildmidi xvid lv2 teletextdec dvb sndio"
+ wildmidi xvid lv2 teletextdec sndio uvch264"
AC_SUBST(GST_PLUGINS_NONPORTED)
dnl these are all the gst plug-ins, compilable without additional libs
@@ -353,6 +353,7 @@ AG_GST_CHECK_PLUGIN(freeverb)
AG_GST_CHECK_PLUGIN(frei0r)
AG_GST_CHECK_PLUGIN(gaudieffects)
AG_GST_CHECK_PLUGIN(geometrictransform)
+AG_GST_CHECK_PLUGIN(gdp)
AG_GST_CHECK_PLUGIN(hdvparse)
AG_GST_CHECK_PLUGIN(hls)
AG_GST_CHECK_PLUGIN(id3tag)
@@ -567,7 +568,7 @@ AG_GST_CHECK_FEATURE(DIRECTSHOW, [DirectShow plug-in], winks, [
LDFLAGS="$LDFLAGS $DIRECTX_LDFLAGS"
LIBS="$LIBS -lole32 -luuid -lstrmiids"
AC_MSG_CHECKING(for DirectShow LDFLAGS)
- AC_LINK_IFELSE([
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#include <windows.h>
#include <strmif.h>
#include <uuids.h>
@@ -580,7 +581,7 @@ int main () {
return 0;
}
-],
+]])],
[HAVE_DIRECTSHOW="yes"],
[HAVE_DIRECTSHOW="no"])
AC_MSG_RESULT($HAVE_DIRECTSHOW)
@@ -689,6 +690,34 @@ AG_GST_CHECK_FEATURE(VCD, [Video CD], vcdsrc, [
AC_CHECK_HEADER(linux/cdrom.h, HAVE_VCD="yes", HAVE_VCD="no")
])
+
+dnl *** UVC H264 ***
+translit(dnm, m, l) AM_CONDITIONAL(USE_UVCH264, true)
+AG_GST_CHECK_FEATURE(UVCH264, [UVC H264], uvch264, [
+ AC_CHECK_HEADER(linux/uvcvideo.h, HAVE_UVCVIDEO_H=yes, HAVE_UVCVIDEO_H=no)
+ AG_GST_PKG_CHECK_MODULES(GST_VIDEO, gstreamer-video-0.10 >= 0.10.36)
+ PKG_CHECK_MODULES(G_UDEV, gudev-1.0 , [
+ AC_DEFINE([HAVE_GUDEV], 1, [Define if gudev is installed])
+ HAVE_GUDEV="yes" ],
+ [HAVE_GUDEV="no"])
+ PKG_CHECK_MODULES(LIBUSB, libusb-1.0 , [
+ AC_DEFINE([HAVE_LIBUSB], 1, [Define if libusb 1.x is installed])
+ HAVE_LIBUSB="yes" ],
+ [HAVE_LIBUSB="no"])
+ if test "x$HAVE_UVCVIDEO_H" == "xyes" && \
+ test "x$HAVE_GUDEV" == "xyes" && \
+ test "x$HAVE_LIBUSB" == "xyes"; then
+ HAVE_UVCH264=yes
+ else
+ HAVE_UVCH264=no
+ fi
+])
+AC_SUBST(LIBUDEV_CFLAGS)
+AC_SUBST(LIBUDEV_LIBS)
+AC_SUBST(LIBUSB_CFLAGS)
+AC_SUBST(LIBUSB_LIBS)
+
+
dnl *** ext plug-ins ***
dnl keep this list sorted alphabetically !
@@ -898,26 +927,9 @@ 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-server <= 0.85.0 wayland-client <= 0.85.0, [
- AC_CHECK_HEADER(wayland-client.h, HAVE_WAYLAND_CLIENT="yes", HAVE_WAYLAND_CLIENT="no")
- AC_CHECK_HEADER(wayland-client-protocol.h, HAVE_WAYLAND_CLIENT_PROTOCOL="yes", HAVE_WAYLAND_CLIENT_PROTOCOL="no")
- if test "x$HAVE_WAYLAND_CLIENT" = "xno"; then
- AC_MSG_RESULT(wayland-client.h could not be found.)
- HAVE_WAYLAND="no"
- elif test "x$HAVE_WAYLAND_CLIENT_PROTOCOL" = "xno"; then
- AC_MSG_RESULT(wayland-client-protocol.h could not be found.)
- HAVE_WAYLAND="no"
- else
- HAVE_WAYLAND="yes"
- WAYLAND_LIBS="-lwayland-client"
- fi
- ], [
- AC_MSG_RESULT(no wayland.)
- HAVE_WAYLAND="no"
+ PKG_CHECK_MODULES(WAYLAND, wayland-client >= 0.95.0, [
+ HAVE_WAYLAND="yes" ], [ HAVE_WAYLAND="no"
])
-WAYLAND_CFLAGS=""
-AC_SUBST(WAYLAND_CFLAGS)
-AC_SUBST(WAYLAND_LIBS)
])
dnl **** Dirac ****
@@ -1761,19 +1773,17 @@ AG_GST_CHECK_FEATURE(ZBAR, [ZBar barcode detector], zbar, [
dnl *** vp8 ***
translit(dnm, m, l) AM_CONDITIONAL(USE_VP8, vp8)
AG_GST_CHECK_FEATURE(VP8, [VP8 decoder], vp8, [
- VPX_LIBS=""
- AG_GST_CHECK_LIBHEADER(VPX, vpx,
- vpx_codec_version, ,
- vpx/vpx_codec.h, [
+ PKG_CHECK_MODULES(VPX, vpx, [HAVE_VPX="yes"], [HAVE_VPX="no"])
+
+ if test $HAVE_VPX = "yes"; then
HAVE_VP8_ENCODER=no
HAVE_VP8_DECODER=no
OLD_LIBS="$LIBS"
- LIBS="$LIBS $LIBM -lpthread"
+ LIBS="$LIBS $VPX_LIBS"
AC_CHECK_LIB(vpx, vpx_codec_vp8_cx_algo, [
HAVE_VP8=yes
AC_DEFINE(HAVE_VP8_ENCODER, 1, [Defined if the VP8 encoder is available])
- VPX_LIBS="-lvpx"
AC_MSG_CHECKING([for VP8E_SET_TUNING presence])
AC_TRY_COMPILE([
@@ -1792,11 +1802,24 @@ return 0;
AC_CHECK_LIB(vpx, vpx_codec_vp8_dx_algo, [
HAVE_VP8=yes
AC_DEFINE(HAVE_VP8_DECODER, 1, [Defined if the VP8 decoder is available])
- VPX_LIBS="-lvpx"
+ AC_MSG_CHECKING([for VP8_MFQE presence])
+ AC_TRY_COMPILE([
+#include <vpx/vpx_decoder.h>
+#include <vpx/vp8dx.h>
+int foo=VP8_MFQE;
+ ], [
+return 0;
+ ], [
+ AC_DEFINE(HAVE_VP8_MFQE, 1, [Defined if the VP8 decoder has MFQE support])
+ AC_MSG_RESULT(yes)
+ ], [
+ AC_MSG_RESULT(no)
+ ])
])
LIBS="$OLD_LIBS"
- ])
+ fi
AC_SUBST(VPX_LIBS)
+ AC_SUBST(VPX_CFLAGS)
])
dnl *** rtmp ***
@@ -1911,6 +1934,7 @@ AM_CONDITIONAL(USE_VP8, false)
AM_CONDITIONAL(USE_RTMP, false)
AM_CONDITIONAL(USE_TELETEXTDEC, false)
AM_CONDITIONAL(USE_SNDIO, false)
+AM_CONDITIONAL(USE_UVCH264, false)
fi dnl of EXT plugins
@@ -2017,6 +2041,7 @@ gst/freeverb/Makefile
gst/frei0r/Makefile
gst/gaudieffects/Makefile
gst/geometrictransform/Makefile
+gst/gdp/Makefile
gst/hdvparse/Makefile
gst/hls/Makefile
gst/id3tag/Makefile
@@ -2085,6 +2110,7 @@ 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
@@ -2103,6 +2129,7 @@ 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
diff --git a/docs/Makefile.in b/docs/Makefile.in
index c85a2b19..5763367e 100644
--- a/docs/Makefile.in
+++ b/docs/Makefile.in
@@ -314,6 +314,8 @@ 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@
@@ -321,6 +323,8 @@ 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@
@@ -335,7 +339,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -363,6 +366,10 @@ 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@
@@ -489,6 +496,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/docs/libs/Makefile.in b/docs/libs/Makefile.in
index 95f0fe6b..0943f508 100644
--- a/docs/libs/Makefile.in
+++ b/docs/libs/Makefile.in
@@ -295,6 +295,8 @@ 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@
@@ -302,6 +304,8 @@ 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@
@@ -316,7 +320,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -344,6 +347,10 @@ 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@
@@ -470,6 +477,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
@@ -1058,8 +1066,7 @@ install-data-local:
$(INSTALL_DATA) $(builddir)/html/$(DOC_MODULE).devhelp2 \
$(DESTDIR)$(TARGET_DIR)/$(DOC_MODULE)-@GST_API_VERSION@.devhelp2; \
fi; \
- (which gtkdoc-rebase >/dev/null && \
- gtkdoc-rebase --relative --dest-dir=$(DESTDIR) --html-dir=$(DESTDIR)$(TARGET_DIR)) || true ; \
+ $(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) --html-dir=$(DESTDIR)$(TARGET_DIR) || true ; \
fi)
uninstall-local:
if test -d $(DESTDIR)$(TARGET_DIR); then \
diff --git a/docs/libs/html/compiling.html b/docs/libs/html/compiling.html
index 2972b813..d350c216 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="idp6800176"></a><h2>Compiling against the bad plugins libraries</h2>
+<a name="idp8056976"></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 60e129c3..2ec24cda 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="idp8041232"></a><h3>Example uploading to GL texture</h3>
+<a name="idp12477888"></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 d6e6e874..70a76be1 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="idp12143472"></a><h3>For Element</h3>
+<a name="idp12748560"></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="idp12155728"></a><h3>For Application</h3>
+<a name="idp12760816"></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="idp12160224"></a><h3>Example using ClutterVideoGstVideoSink</h3>
+<a name="idp12765312"></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-h264parser.html b/docs/libs/html/gst-plugins-bad-libs-h264parser.html
index 64b0e64f..5372cfdb 100644
--- a/docs/libs/html/gst-plugins-bad-libs-h264parser.html
+++ b/docs/libs/html/gst-plugins-bad-libs-h264parser.html
@@ -977,6 +977,10 @@ dpb_output_delay syntax element</td>
guint32 log2_max_mv_length_vertical;
guint32 num_reorder_frames;
guint32 max_dec_frame_buffering;
+
+ /* calculated values */
+ guint par_n;
+ guint par_d;
};
</pre>
<p>
@@ -1156,6 +1160,14 @@ or non-paired fields that precede any frame,</td>
<td>specifies the required size of the HRD decoded picture buffer in
units of frame buffers.</td>
</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstH264VUIParams.par-n"></a>par_n</code></em>;</span></p></td>
+<td></td>
+</tr>
+<tr>
+<td><p><span class="term"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> <em class="structfield"><code><a name="GstH264VUIParams.par-d"></a>par_d</code></em>;</span></p></td>
+<td></td>
+</tr>
</tbody>
</table></div>
</div>
@@ -1342,7 +1354,7 @@ units of frame buffers.</td>
GstH264BufferingPeriod buffering_period;
GstH264PicTiming pic_timing;
/* ... could implement more */
- };
+ } payload;
};
</pre>
</div>
diff --git a/docs/libs/html/gst-plugins-bad-libs-mpegvideoparser.html b/docs/libs/html/gst-plugins-bad-libs-mpegvideoparser.html
index 0bee0fe7..4a013edc 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="idp9618704"></a><p>
+<a name="idp9348160"></a><p>
Provides useful functions for mpeg videos bitstream parsing.
</p>
</div>
@@ -487,7 +487,7 @@ The Mpeg2 Video Sequence Extension structure.
<tbody>
<tr>
<td><p><span class="term"><span class="type">guint8</span> <em class="structfield"><code><a name="GstMpegVideoSequenceExt.profile"></a>profile</code></em>;</span></p></td>
-<td>mpeg2 decoder profil</td>
+<td>mpeg2 decoder profile</td>
</tr>
<tr>
<td><p><span class="term"><span class="type">guint8</span> <em class="structfield"><code><a name="GstMpegVideoSequenceExt.level"></a>level</code></em>;</span></p></td>
@@ -496,7 +496,7 @@ The Mpeg2 Video Sequence Extension structure.
<tr>
<td><p><span class="term"><span class="type">guint8</span> <em class="structfield"><code><a name="GstMpegVideoSequenceExt.progressive"></a>progressive</code></em>;</span></p></td>
<td>
-<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the frames are progressive <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwize</td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the frames are progressive <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise</td>
</tr>
<tr>
<td><p><span class="term"><span class="type">guint8</span> <em class="structfield"><code><a name="GstMpegVideoSequenceExt.chroma-format"></a>chroma_format</code></em>;</span></p></td>
@@ -516,13 +516,13 @@ The Mpeg2 Video Sequence Extension structure.
</tr>
<tr>
<td><p><span class="term"><span class="type">guint8</span> <em class="structfield"><code><a name="GstMpegVideoSequenceExt.vbv-buffer-size-extension"></a>vbv_buffer_size_extension</code></em>;</span></p></td>
-<td>Vbv vuffer size</td>
+<td>VBV vuffer size</td>
</tr>
<tr>
<td><p><span class="term"><span class="type">guint8</span> <em class="structfield"><code><a name="GstMpegVideoSequenceExt.low-delay"></a>low_delay</code></em>;</span></p></td>
<td>
<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if the sequence doesn't contain any B-pictures, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a>
-otherwize</td>
+otherwise</td>
</tr>
<tr>
<td><p><span class="term"><span class="type">guint8</span> <em class="structfield"><code><a name="GstMpegVideoSequenceExt.fps-n-ext"></a>fps_n_ext</code></em>;</span></p></td>
diff --git a/docs/libs/html/gst-plugins-bad-libs.devhelp2 b/docs/libs/html/gst-plugins-bad-libs.devhelp2
index 707269b6..891a2693 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#idp9618704"/>
+ <keyword type="" name="" link="gst-plugins-bad-libs-mpegvideoparser.html#idp9348160"/>
<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#idp12143472"/>
- <keyword type="" name="For Application" link="gst-plugins-bad-libs-GstVideoContextInterface.html#idp12155728"/>
- <keyword type="" name="Example using ClutterVideoGstVideoSink" link="gst-plugins-bad-libs-GstVideoContextInterface.html#idp12160224"/>
+ <keyword type="" name="For Element" link="gst-plugins-bad-libs-GstVideoContextInterface.html#idp12748560"/>
+ <keyword type="" name="For Application" link="gst-plugins-bad-libs-GstVideoContextInterface.html#idp12760816"/>
+ <keyword type="" name="Example using ClutterVideoGstVideoSink" link="gst-plugins-bad-libs-GstVideoContextInterface.html#idp12765312"/>
<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#idp8041232"/>
+ <keyword type="" name="Example uploading to GL texture" link="gst-plugins-bad-libs-GstSurfaceConverter.html#idp12477888"/>
<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 06dbc5a7..db9324ce 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 (0.11.93)
+ for GStreamer Bad Library 1.0 (0.11.94)
<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.in b/docs/plugins/Makefile.in
index c582e719..9ebb5379 100644
--- a/docs/plugins/Makefile.in
+++ b/docs/plugins/Makefile.in
@@ -333,6 +333,8 @@ 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@
@@ -340,6 +342,8 @@ 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@
@@ -354,7 +358,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -382,6 +385,10 @@ 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@
@@ -508,6 +515,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
@@ -1500,8 +1508,7 @@ install-data-local:
$(INSTALL_DATA) $(builddir)/html/$(DOC_MODULE).devhelp2 \
$(DESTDIR)$(TARGET_DIR)/$(DOC_MODULE)-@GST_API_VERSION@.devhelp2; \
fi; \
- (which gtkdoc-rebase >/dev/null && \
- gtkdoc-rebase --relative --dest-dir=$(DESTDIR) --html-dir=$(DESTDIR)$(TARGET_DIR)) || true ; \
+ $(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) --html-dir=$(DESTDIR)$(TARGET_DIR) || true ; \
fi)
uninstall-local:
if test -d $(DESTDIR)$(TARGET_DIR); then \
diff --git a/docs/plugins/gst-plugins-bad-plugins.args b/docs/plugins/gst-plugins-bad-plugins.args
index 7455423c..55d0257e 100644
--- a/docs/plugins/gst-plugins-bad-plugins.args
+++ b/docs/plugins/gst-plugins-bad-plugins.args
@@ -39,6 +39,16 @@
</ARG>
<ARG>
+<NAME>GstPitch::output-rate</NAME>
+<TYPE>gfloat</TYPE>
+<RANGE>[0.1,10]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Output Rate</NICK>
+<BLURB>Output rate on downstream segment events.</BLURB>
+<DEFAULT>1</DEFAULT>
+</ARG>
+
+<ARG>
<NAME>GstXvidEnc::averaging-period</NAME>
<TYPE>gint</TYPE>
<RANGE>[-1,100]</RANGE>
@@ -1335,7 +1345,7 @@
<FLAGS>rw</FLAGS>
<NICK>Version</NICK>
<BLURB>Version of the GStreamer Data Protocol.</BLURB>
-<DEFAULT>GDP Version 1.0</DEFAULT>
+<DEFAULT>GST_DP_VERSION_1_0</DEFAULT>
</ARG>
<ARG>
@@ -1789,6 +1799,16 @@
</ARG>
<ARG>
+<NAME>GstDvbSrc::dvb-buffer-size</NAME>
+<TYPE>guint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>dvb-buffer-size</NICK>
+<BLURB>The kernel buffer size used by the DVB api.</BLURB>
+<DEFAULT>1925120</DEFAULT>
+</ARG>
+
+<ARG>
<NAME>GstRfbSrc::host</NAME>
<TYPE>gchar*</TYPE>
<RANGE></RANGE>
@@ -19120,7 +19140,7 @@
<FLAGS>rw</FLAGS>
<NICK>Format</NICK>
<BLURB>Encoding profile format.</BLURB>
-<DEFAULT>Generic MPEG-1</DEFAULT>
+<DEFAULT>DVD MPEG-2</DEFAULT>
</ARG>
<ARG>
@@ -22434,6 +22454,16 @@
</ARG>
<ARG>
+<NAME>MpegTsMux::alignment</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= G_MAXULONG</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>packet alignment</NICK>
+<BLURB>Number of packets per buffer (padded with dummy packets on EOS) (-1 = auto, 0 = all available packets).</BLURB>
+<DEFAULT>-1</DEFAULT>
+</ARG>
+
+<ARG>
<NAME>GstApExSink::host</NAME>
<TYPE>gchar*</TYPE>
<RANGE></RANGE>
@@ -28360,7 +28390,7 @@
<FLAGS>rw</FLAGS>
<NICK>inter_wavelet</NICK>
<BLURB>inter_wavelet.</BLURB>
-<DEFAULT>desl_dubuc_9_7</DEFAULT>
+<DEFAULT>desl-dubuc-9-7</DEFAULT>
</ARG>
<ARG>
@@ -28380,7 +28410,7 @@
<FLAGS>rw</FLAGS>
<NICK>intra_wavelet</NICK>
<BLURB>intra_wavelet.</BLURB>
-<DEFAULT>desl_dubuc_9_7</DEFAULT>
+<DEFAULT>desl-dubuc-9-7</DEFAULT>
</ARG>
<ARG>
@@ -28700,7 +28730,7 @@
<FLAGS>rw</FLAGS>
<NICK>rate_control</NICK>
<BLURB>rate_control.</BLURB>
-<DEFAULT>constant_quality</DEFAULT>
+<DEFAULT>constant-quality</DEFAULT>
</ARG>
<ARG>
@@ -45850,7 +45880,17 @@
<FLAGS>rw</FLAGS>
<NICK>Post Processing Flags</NICK>
<BLURB>Flags to control post processing.</BLURB>
-<DEFAULT>Deblock|Demacroblock</DEFAULT>
+<DEFAULT>Deblock|Demacroblock|Multi-frame quality enhancement</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstVP8Dec::threads</NAME>
+<TYPE>guint</TYPE>
+<RANGE>[1,16]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Max Threads</NICK>
+<BLURB>Maximum number of decoding threads.</BLURB>
+<DEFAULT>1</DEFAULT>
</ARG>
<ARG>
@@ -46135,7 +46175,7 @@
<ARG>
<NAME>GstPhotography::flash-mode</NAME>
-<TYPE>GstFlashMode</TYPE>
+<TYPE>GstPhotographyFlashMode</TYPE>
<RANGE></RANGE>
<FLAGS>rw</FLAGS>
<NICK>Flash mode property</NICK>
@@ -46145,7 +46185,7 @@
<ARG>
<NAME>GstPhotography::flicker-mode</NAME>
-<TYPE>GstFlickerReductionMode</TYPE>
+<TYPE>GstPhotographyFlickerReductionMode</TYPE>
<RANGE></RANGE>
<FLAGS>rw</FLAGS>
<NICK>Flicker reduction mode property</NICK>
@@ -46155,7 +46195,7 @@
<ARG>
<NAME>GstPhotography::focus-mode</NAME>
-<TYPE>GstFocusMode</TYPE>
+<TYPE>GstPhotographyFocusMode</TYPE>
<RANGE></RANGE>
<FLAGS>rw</FLAGS>
<NICK>Focus mode property</NICK>
@@ -46185,7 +46225,7 @@
<ARG>
<NAME>GstPhotography::scene-mode</NAME>
-<TYPE>GstSceneMode</TYPE>
+<TYPE>GstPhotographySceneMode</TYPE>
<RANGE></RANGE>
<FLAGS>rw</FLAGS>
<NICK>Scene mode property</NICK>
@@ -46195,7 +46235,7 @@
<ARG>
<NAME>GstPhotography::white-balance-mode</NAME>
-<TYPE>GstWhiteBalanceMode</TYPE>
+<TYPE>GstPhotographyWhiteBalanceMode</TYPE>
<RANGE></RANGE>
<FLAGS>rw</FLAGS>
<NICK>White balance mode property</NICK>
@@ -46234,6 +46274,86 @@
</ARG>
<ARG>
+<NAME>GstPhotography::analog-gain</NAME>
+<TYPE>gfloat</TYPE>
+<RANGE>>= 1</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Analog gain applied to the sensor</NICK>
+<BLURB>Analog gain applied to the sensor.</BLURB>
+<DEFAULT>1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPhotography::color-temperature</NAME>
+<TYPE>guint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Color temperature in Kelvin units</NICK>
+<BLURB>Color temperature in Kelvin units for manual white balance.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPhotography::color-tone-mode</NAME>
+<TYPE>GstPhotographyColorToneMode</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Color tone mode property</NICK>
+<BLURB>Color tone setting changes color shading in the photo.</BLURB>
+<DEFAULT>GST_PHOTOGRAPHY_COLOR_TONE_MODE_NORMAL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPhotography::exposure-time</NAME>
+<TYPE>guint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Exposure time in milliseconds</NICK>
+<BLURB>Exposure time defines how long the shutter will stay open (0 = auto).</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPhotography::lens-focus</NAME>
+<TYPE>gfloat</TYPE>
+<RANGE>>= 0</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Manual lens focus</NICK>
+<BLURB>Focus point in diopter units.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPhotography::max-exposure-time</NAME>
+<TYPE>guint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Maximum exposure time</NICK>
+<BLURB>Maximum exposure time for automatic exposure mode.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPhotography::min-exposure-time</NAME>
+<TYPE>guint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Minimum exposure time</NICK>
+<BLURB>Minimum exposure time for automatic exposure mode.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPhotography::white-point</NAME>
+<TYPE>GValueArray*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>White point</NICK>
+<BLURB>Describe color white as raw values.</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
<NAME>GstWaterRipple::amplitude</NAME>
<TYPE>gdouble</TYPE>
<RANGE></RANGE>
@@ -47196,7 +47316,7 @@
<ARG>
<NAME>GstCvSobel::x-order</NAME>
<TYPE>gint</TYPE>
-<RANGE>>= -1</RANGE>
+<RANGE>>= G_MAXULONG</RANGE>
<FLAGS>rw</FLAGS>
<NICK>x order</NICK>
<BLURB>Order of the derivative x.</BLURB>
@@ -47206,7 +47326,7 @@
<ARG>
<NAME>GstCvSobel::y-order</NAME>
<TYPE>gint</TYPE>
-<RANGE>>= -1</RANGE>
+<RANGE>>= G_MAXULONG</RANGE>
<FLAGS>rw</FLAGS>
<NICK>y order</NICK>
<BLURB>Order of the derivative y.</BLURB>
@@ -47494,6 +47614,16 @@
</ARG>
<ARG>
+<NAME>GstDVBSubOverlay::force-end</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Force End</NICK>
+<BLURB>Assume PES-aligned subtitles and force end-of-display.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
<NAME>GstRsvgOverlay::data</NAME>
<TYPE>gchar*</TYPE>
<RANGE></RANGE>
@@ -48410,7 +48540,7 @@
<FLAGS>rw</FLAGS>
<NICK>text</NICK>
<BLURB>Text to be display.</BLURB>
-<DEFAULT>""</DEFAULT>
+<DEFAULT>"Opencv Text Overlay"</DEFAULT>
</ARG>
<ARG>
@@ -58493,3 +58623,463 @@
<DEFAULT>FALSE</DEFAULT>
</ARG>
+<ARG>
+<NAME>GstInterVideoSrc::channel</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Channel</NICK>
+<BLURB>Channel name to match inter src and sink elements.</BLURB>
+<DEFAULT>"default"</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstInterVideoSink::channel</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Channel</NICK>
+<BLURB>Channel name to match inter src and sink elements.</BLURB>
+<DEFAULT>"default"</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstInterSubSrc::channel</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Channel</NICK>
+<BLURB>Channel name to match inter src and sink elements.</BLURB>
+<DEFAULT>"default"</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstInterSubSink::channel</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Channel</NICK>
+<BLURB>Channel name to match inter src and sink elements.</BLURB>
+<DEFAULT>"default"</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstInterAudioSrc::channel</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Channel</NICK>
+<BLURB>Channel name to match inter src and sink elements.</BLURB>
+<DEFAULT>"default"</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstInterAudioSink::channel</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Channel</NICK>
+<BLURB>Channel name to match inter src and sink elements.</BLURB>
+<DEFAULT>"default"</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstWaylandSink::wayland-display</NAME>
+<TYPE>gpointer</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Wayland Display</NICK>
+<BLURB>Wayland Display handle created by the application .</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPyramidSegment::level</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[0,4]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Level</NICK>
+<BLURB>Maximum level of the pyramid segmentation.</BLURB>
+<DEFAULT>4</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPyramidSegment::silent</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Silent</NICK>
+<BLURB>Produce verbose output ?.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPyramidSegment::threshold1</NAME>
+<TYPE>gdouble</TYPE>
+<RANGE>[0,1000]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Threshold1</NICK>
+<BLURB>Error threshold for establishing links.</BLURB>
+<DEFAULT>50</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstPyramidSegment::threshold2</NAME>
+<TYPE>gdouble</TYPE>
+<RANGE>[0,1000]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Threshold2</NICK>
+<BLURB>Error threshold for segment clustering.</BLURB>
+<DEFAULT>60</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMotioncells::calculatemotion</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Calculate Motion</NICK>
+<BLURB>If needs calculate motion on frame you need this property setting true otherwise false.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMotioncells::cellscolor</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Color of Motion Cells</NICK>
+<BLURB>The color of motion cells separated with ",".</BLURB>
+<DEFAULT>"255,255,0"</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMotioncells::datafile</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>DataFile</NICK>
+<BLURB>Location of motioncells data file (empty string means no saving).</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMotioncells::datafileextension</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>DataFile Extension</NICK>
+<BLURB>Extension of datafile.</BLURB>
+<DEFAULT>"vamc"</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMotioncells::display</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Display</NICK>
+<BLURB>Motion Cells visible or not on Current Frame.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMotioncells::gap</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[1,60]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Gap is time in second, elapsed time from last motion timestamp. </NICK>
+<BLURB>If elapsed time minus form last motion timestamp is greater or equal than gap then we post motion finished bus message. .</BLURB>
+<DEFAULT>5</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMotioncells::gridx</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[8,32]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Number of Horizontal Grids</NICK>
+<BLURB>You can give number of horizontal grid cells.</BLURB>
+<DEFAULT>10</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMotioncells::gridy</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[8,32]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Number of Vertical Grids</NICK>
+<BLURB>You can give number of vertical grid cells.</BLURB>
+<DEFAULT>10</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMotioncells::minimummotionframes</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[1,60]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>MINIMUN MOTION FRAMES</NICK>
+<BLURB>Define the minimum number of motion frames that trigger a motion event.</BLURB>
+<DEFAULT>1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMotioncells::motioncellsidx</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Motion Cells Of Interest(MOCI)</NICK>
+<BLURB>The line and column idx separated with ":", describe a cell. Cells separated with ",".</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMotioncells::motioncellthickness</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[G_MAXULONG,5]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Motion Cell Thickness</NICK>
+<BLURB>Motion Cell Border Thickness, if it's -1 then motion cell will be fill.</BLURB>
+<DEFAULT>1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMotioncells::motionmaskcellspos</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Motion Mask with Cells Position</NICK>
+<BLURB>The line and column idx separated with ":" what cells want we mask-out, describe a cell. Cells separated with ",".</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMotioncells::motionmaskcoords</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Motion Mask with Coordinates</NICK>
+<BLURB>The upper left x, y and lower right x, y coordinates separated with ":", describe a region. Regions separated with ",".</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMotioncells::postallmotion</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Post All Motion</NICK>
+<BLURB>Element post bus msg for every motion frame or just motion start and motion stop.</BLURB>
+<DEFAULT>FALSE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMotioncells::postnomotion</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[0,180]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>POSTNOMOTION</NICK>
+<BLURB>If non 0 post a no_motion event is posted on the bus if no motion is detected for N seconds.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMotioncells::sensitivity</NAME>
+<TYPE>gdouble</TYPE>
+<RANGE>[0,1]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Motion Sensitivity</NICK>
+<BLURB>You can tunning the element motion sensitivity.</BLURB>
+<DEFAULT>0.5</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMotioncells::threshold</NAME>
+<TYPE>gdouble</TYPE>
+<RANGE>[0,1]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Lower bound of motion cells number</NICK>
+<BLURB>Threshold value for motion, when motion cells number greater sum cells * threshold, we show motion.</BLURB>
+<DEFAULT>0.01</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstMotioncells::usealpha</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Use alpha</NICK>
+<BLURB>Use or not alpha blending on frames with motion cells.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstFaceDetect::display</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Display</NICK>
+<BLURB>Sets whether the detected faces should be highlighted in the output.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstFaceDetect::eyes-profile</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Eyes profile</NICK>
+<BLURB>Location of Haar cascade file to use for eye-pair detection.</BLURB>
+<DEFAULT>"/usr/share/opencv/haarcascades/haarcascade_mcs_eyepair_small.xml"</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstFaceDetect::flags</NAME>
+<TYPE>GstOpencvFaceDetectFlags</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Flags</NICK>
+<BLURB>Flags to cvHaarDetectObjects.</BLURB>
+<DEFAULT></DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstFaceDetect::min-neighbors</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= 0</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Mininum neighbors</NICK>
+<BLURB>Minimum number (minus 1) of neighbor rectangles that makes up an object.</BLURB>
+<DEFAULT>3</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstFaceDetect::min-size-height</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= 0</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Minimum face height</NICK>
+<BLURB>Minimum area height to be recognized as a face.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstFaceDetect::min-size-width</NAME>
+<TYPE>gint</TYPE>
+<RANGE>>= 0</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Minimum face width</NICK>
+<BLURB>Minimum area width to be recognized as a face.</BLURB>
+<DEFAULT>0</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstFaceDetect::mouth-profile</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Mouth profile</NICK>
+<BLURB>Location of Haar cascade file to use for mouth detection.</BLURB>
+<DEFAULT>"/usr/share/opencv/haarcascades/haarcascade_mcs_mouth.xml"</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstFaceDetect::nose-profile</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Nose profile</NICK>
+<BLURB>Location of Haar cascade file to use for nose detection.</BLURB>
+<DEFAULT>"/usr/share/opencv/haarcascades/haarcascade_mcs_nose.xml"</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstFaceDetect::profile</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Face profile</NICK>
+<BLURB>Location of Haar cascade file to use for face detection.</BLURB>
+<DEFAULT>"/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml"</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstFaceDetect::scale-factor</NAME>
+<TYPE>gdouble</TYPE>
+<RANGE>[1.1,10]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Scale factor</NICK>
+<BLURB>Factor by which the frame is scaled after each object scan.</BLURB>
+<DEFAULT>1.1</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstFaceBlur::profile</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Profile</NICK>
+<BLURB>Location of Haar cascade file to use for face blurion.</BLURB>
+<DEFAULT>"/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml"</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstEdgeDetect::aperture</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[3,7]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Aperture</NICK>
+<BLURB>Aperture size for Sobel operator (Must be either 3, 5 or 7.</BLURB>
+<DEFAULT>3</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstEdgeDetect::mask</NAME>
+<TYPE>gboolean</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Mask</NICK>
+<BLURB>Sets whether the detected edges should be used as a mask on the original input or not.</BLURB>
+<DEFAULT>TRUE</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstEdgeDetect::threshold1</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[0,1000]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Threshold1</NICK>
+<BLURB>Threshold value for canny edge detection.</BLURB>
+<DEFAULT>50</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstEdgeDetect::threshold2</NAME>
+<TYPE>gint</TYPE>
+<RANGE>[0,1000]</RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Threshold2</NICK>
+<BLURB>Second threshold value for canny edge detection.</BLURB>
+<DEFAULT>150</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstChromaprint::duration</NAME>
+<TYPE>guint</TYPE>
+<RANGE></RANGE>
+<FLAGS>rw</FLAGS>
+<NICK>Duration limit</NICK>
+<BLURB>Number of seconds of audio to use for fingerprinting.</BLURB>
+<DEFAULT>120</DEFAULT>
+</ARG>
+
+<ARG>
+<NAME>GstChromaprint::fingerprint</NAME>
+<TYPE>gchar*</TYPE>
+<RANGE></RANGE>
+<FLAGS>r</FLAGS>
+<NICK>Resulting fingerprint</NICK>
+<BLURB>Resulting fingerprint.</BLURB>
+<DEFAULT>NULL</DEFAULT>
+</ARG>
+
diff --git a/docs/plugins/gst-plugins-bad-plugins.hierarchy b/docs/plugins/gst-plugins-bad-plugins.hierarchy
index af5eacff..8428d41c 100644
--- a/docs/plugins/gst-plugins-bad-plugins.hierarchy
+++ b/docs/plugins/gst-plugins-bad-plugins.hierarchy
@@ -1,6 +1,8 @@
GObject
GInitiallyUnowned
GstObject
+ GstAllocator
+ GstDefaultAllocator
GstBus
GstClock
GstControlBinding
@@ -15,16 +17,17 @@ GObject
GstDtsDec
GstFaad
GstGSMDec
- GstOpusDec
+ GstMpg123AudioDec
+ GstSirenDec
GstAudioEncoder
ADPCMEnc
GstCeltEnc
GstFaac
GstGSMEnc
- GstOpusEnc
+ GstSirenEnc
GstVoAacEnc
GstVoAmrWbEnc
- GstBaseAudioVisualizer
+ GstAudioVisualizer-BadGstAudioVisualizers
GstSpaceScope
GstSpectraScope
GstSynaeScope
@@ -36,7 +39,6 @@ GObject
GstIRTSPParse
GstMpeg4VParse
GstMpegvParse
- GstOpusParse
GstBaseSink
GstChecksumSink
GstCurlBaseSink
@@ -45,18 +47,30 @@ GObject
GstCurlFtpSink
GstCurlHttpSink
GstCurlSmtpSink
+ GstInterAudioSink
+ GstInterSubSink
+ GstInterVideoSink
GstRTMPSink
GstShmSink
+ GstVideoSink
+ GstWaylandSink
GstBaseSrc
GstDTMFSrc
GstDataURISrc
GstFliteTestSrc
+ GstInterAudioSrc
+ GstInterSubSrc
+ GstInterVideoSrc
GstPushSrc
+ GstDvbSrc
GstMMS
GstRTMPSrc
GstShmSrc
GstRTPDTMFSrc
GstBaseTransform
+ GstAudioFilter
+ GstBPMDetect
+ GstChromaprint
GstBayer2RGB
GstDebugSpy
GstDtmfDetect
@@ -89,10 +103,20 @@ GObject
GstMirror
GstRotate
GstSquare
+ GstOpencvVideoFilter
+ GstCvDilateErode
+ GstCvDilate
+ GstCvErode
+ GstCvEqualizeHist
+ GstCvLaplace
+ GstCvSmooth
+ GstCvSobel
+ GstFaceDetect
GstSmooth
GstSolarize
GstZBar
GstBin
+ DvbBaseBin
GstAutoConvert
GstAutoVideoConvert
GstBaseCameraSrc
@@ -102,24 +126,43 @@ GObject
GstCameraBin
GstSDPDemux
GstViewfinderBin
+ RsnDvdBin
GstBz2dec
GstBz2enc
GstChopMyData
GstCompare
GstDVBSubOverlay
GstDVDSpu
+ GstEdgeDetect
+ GstFaceBlur
+ GstFestival
+ GstFreeze
+ GstGDPDepay
+ GstGDPPay
GstGmeDec
GstHLSDemux
+ GstInterlace
+ GstJifMux
+ GstJpegParse
+ GstLiveAdder
+ GstMimDec
+ GstMimEnc
GstModPlug
+ GstMotioncells
+ GstMpeg2enc
GstMpegPSDemux
+ GstMplex
+ GstOpencvTextOverlay
GstPcapParse
+ GstPitch
+ GstPnmdec
+ GstPnmenc
+ GstPyramidSegment
GstRTPBaseDepayload
- GstRTPOpusDepay
GstRtpDTMFDepay
GstRtpVP8Depay
GstRTPBasePayload
GstRtpAsfPay
- GstRtpOPUSPay
GstRtpVP8Pay
GstRTPMux
GstRTPDTMFMux
@@ -129,6 +172,11 @@ GObject
GstSegmentClip
GstAudioSegmentClip
GstVideoSegmentClip
+ GstSpanPlc
+ GstSpeed
+ GstTagMux
+ GstId3Mux
+ GstTemplateMatch
GstVideoDecoder
GstSchroDec
GstVP8Dec
@@ -139,6 +187,7 @@ GObject
MpegTSBase
GstTSDemux
MpegTSParse2
+ MpegTsMux
GstPad
GstPadTemplate
GstPlugin
@@ -155,4 +204,5 @@ GInterface
GstPhotography
GstPreset
GstTagSetter
+ GstTagXmpWriter
GstURIHandler
diff --git a/docs/plugins/gst-plugins-bad-plugins.interfaces b/docs/plugins/gst-plugins-bad-plugins.interfaces
index 71435a8a..84248c66 100644
--- a/docs/plugins/gst-plugins-bad-plugins.interfaces
+++ b/docs/plugins/gst-plugins-bad-plugins.interfaces
@@ -44,6 +44,8 @@ GstRTMPSrc GstURIHandler
GstSDLVideoSink GstImplementsInterface GstXOverlay GstNavigation
GstSDPDemux GstChildProxy
GstSchroEnc GstPreset
+GstSirenEnc GstPreset
+GstTagMux GstTagSetter
GstVCDSrc GstURIHandler
GstVP8Enc GstPreset GstTagSetter
GstVP8Enc GstTagSetter GstPreset
diff --git a/docs/plugins/html/ch01.html b/docs/plugins/html/ch01.html
index aee69575..da9a18e5 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="idp180320"></a>gst-plugins-bad Elements</h2></div></div></div>
+<a name="idp4163440"></a>gst-plugins-bad Elements</h2></div></div></div>
<div class="toc"><dl>
<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-plugins-aiffparse.html">aiffparse</a></span><span class="refpurpose"> — Parse a .aiff file into raw audio</span>
diff --git a/docs/plugins/html/ch02.html b/docs/plugins/html/ch02.html
index 2ca048da..17fae669 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="idp95744"></a>gst-plugins-bad Plugins</h2></div></div></div>
+<a name="idp95632"></a>gst-plugins-bad Plugins</h2></div></div></div>
<div class="toc"><dl>
<dt>
<span class="refentrytitle"><a href="gst-plugins-bad-plugins-plugin-aiff.html">aiff</a></span><span class="refpurpose"> — <a name="plugin-aiff"></a>Create and parse Audio Interchange File Format (AIFF) files</span>
diff --git a/docs/plugins/html/ch03.html b/docs/plugins/html/ch03.html
index 6a2c020c..abf43587 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="idp5222192"></a>gst-plugins-bad Interfaces</h2></div></div></div>
+<a name="idp5223952"></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-aiffmux.html b/docs/plugins/html/gst-plugins-bad-plugins-aiffmux.html
index e694ce5e..a2f95d7d 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-aiffmux.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-aiffmux.html
@@ -48,7 +48,7 @@ Format an audio stream into the Audio Interchange File Format
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idm5328"></a><h3>Element Information</h3>
+<a name="idp9042592"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -71,7 +71,7 @@ Format an audio stream into the Audio Interchange File Format
</div>
<hr>
<div class="refsect2">
-<a name="idp2882240"></a><h3>Element Pads</h3>
+<a name="idp6205328"></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-aiffparse.html b/docs/plugins/html/gst-plugins-bad-plugins-aiffparse.html
index 2f828aa9..6cf45434 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-aiffparse.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-aiffparse.html
@@ -45,7 +45,7 @@
<p>
</p>
<div class="refsect2">
-<a name="idp2839760"></a><h3>Example launch line</h3>
+<a name="idp2432752"></a><h3>Example launch line</h3>
<p>
Parse a .aiff file into raw or compressed audio.
</p>
@@ -76,7 +76,7 @@ Stream data from a network url.
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp2837072"></a><h3>Element Information</h3>
+<a name="idm32416"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -99,7 +99,7 @@ Stream data from a network url.
</div>
<hr>
<div class="refsect2">
-<a name="idp8518944"></a><h3>Element Pads</h3>
+<a name="idp8021392"></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-assrender.html b/docs/plugins/html/gst-plugins-bad-plugins-assrender.html
index 421fc279..30c93766 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="idp2829696"></a><h3>Element Information</h3>
+<a name="idp8424192"></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="idp9032096"></a><h3>Element Pads</h3>
+<a name="idp6630304"></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 11cb0a09..1ec5cf5d 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="idp8989648"></a><h3>Element Information</h3>
+<a name="idp7315056"></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="idp9554912"></a><h3>Element Pads</h3>
+<a name="idp8841344"></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 dc80c48f..72245726 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="idp8525232"></a><h3>Element Information</h3>
+<a name="idp2590624"></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="idp8434096"></a><h3>Element Pads</h3>
+<a name="idp6640816"></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 36405ad0..7af30850 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="idp8106800"></a><h3>Example launch line</h3>
+<a name="idp7756416"></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="idp9238224"></a><h3>Element Information</h3>
+<a name="idp9017600"></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="idp6053072"></a><h3>Element Pads</h3>
+<a name="idp5773584"></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-celtdec.html b/docs/plugins/html/gst-plugins-bad-plugins-celtdec.html
index f70cd39b..898fff22 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="idp6823200"></a><h3>Element Information</h3>
+<a name="idp8597360"></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="idp7058896"></a><h3>Element Pads</h3>
+<a name="idp9503808"></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 fceffcbd..edf7732e 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="idp5670784"></a><h3>Element Information</h3>
+<a name="idp8244960"></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="idp5678192"></a><h3>Element Pads</h3>
+<a name="idp8252368"></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 cad36bfd..207b5bb0 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="idp6233824"></a><h3>Example launch line</h3>
+<a name="idp6787520"></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="idp7745728"></a><h3>Element Information</h3>
+<a name="idp6219936"></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="idp8349200"></a><h3>Element Pads</h3>
+<a name="idp6800928"></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 45a14e75..ec30901e 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="idp8856160"></a><h3>Element Information</h3>
+<a name="idp6333184"></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="idp9475024"></a><h3>Element Pads</h3>
+<a name="idp10266592"></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 cf1393b6..c74b587e 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="idp5402224"></a><h3>Example launch line</h3>
+<a name="idp8132528"></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="idp8594816"></a><h3>Element Information</h3>
+<a name="idp7956752"></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="idp5968336"></a><h3>Element Pads</h3>
+<a name="idp9517664"></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 3a16dff0..9795e573 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-cvdilate.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-cvdilate.html
@@ -45,7 +45,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp10187328"></a><h3>Element Information</h3>
+<a name="idp10076688"></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="idp6379600"></a><h3>Element Pads</h3>
+<a name="idp7368880"></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 87e6d450..458012e9 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-cvequalizehist.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-cvequalizehist.html
@@ -45,7 +45,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp7384896"></a><h3>Element Information</h3>
+<a name="idp8933888"></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="idp6143184"></a><h3>Element Pads</h3>
+<a name="idp6523584"></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 831af941..8d736010 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-cverode.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-cverode.html
@@ -45,7 +45,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp10307792"></a><h3>Element Information</h3>
+<a name="idp6716272"></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="idp9514848"></a><h3>Element Pads</h3>
+<a name="idp7974000"></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 ef998799..142f2817 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-cvlaplace.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-cvlaplace.html
@@ -53,7 +53,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp8492880"></a><h3>Element Information</h3>
+<a name="idp8532496"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -76,7 +76,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp7770336"></a><h3>Element Pads</h3>
+<a name="idp7759776"></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 fd79cc67..41614c61 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-cvsmooth.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-cvsmooth.html
@@ -57,7 +57,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp2985344"></a><h3>Element Information</h3>
+<a name="idp7339296"></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="idp9014304"></a><h3>Element Pads</h3>
+<a name="idp9515440"></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 2d4a9786..155e2a6f 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-cvsobel.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-cvsobel.html
@@ -55,7 +55,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp10101808"></a><h3>Element Information</h3>
+<a name="idp6124432"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -78,7 +78,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp2988560"></a><h3>Element Pads</h3>
+<a name="idp9485824"></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 5bd8c3d0..bc97d5ed 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="idp7313360"></a><h3>Example launch line</h3>
+<a name="idp7265264"></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="idp10104336"></a><h3>Element Information</h3>
+<a name="idp5536608"></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="idp9922496"></a><h3>Element Pads</h3>
+<a name="idp5544128"></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-dccpclientsink.html b/docs/plugins/html/gst-plugins-bad-plugins-dccpclientsink.html
index 813e4117..57862bec 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-dccpclientsink.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-dccpclientsink.html
@@ -71,7 +71,7 @@ TCP and UDP.
<p>
</p>
<div class="refsect2">
-<a name="idp10818016"></a><h3>Example pipeline</h3>
+<a name="idp10625616"></a><h3>Example pipeline</h3>
<p>
</p>
<div class="informalexample">
@@ -111,7 +111,7 @@ Run the server pipeline first than the client pipeline.
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp10822640"></a><h3>Element Information</h3>
+<a name="idp10630192"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -134,7 +134,7 @@ Run the server pipeline first than the client pipeline.
</div>
<hr>
<div class="refsect2">
-<a name="idp10830048"></a><h3>Element Pads</h3>
+<a name="idp10637600"></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-dccpclientsrc.html b/docs/plugins/html/gst-plugins-bad-plugins-dccpclientsrc.html
index c2852871..97e8b73c 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-dccpclientsrc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-dccpclientsrc.html
@@ -72,7 +72,7 @@ TCP and UDP.
<p>
</p>
<div class="refsect2">
-<a name="idp9953888"></a><h3>Example pipeline</h3>
+<a name="idp10967904"></a><h3>Example pipeline</h3>
<p>
</p>
<div class="informalexample">
@@ -113,7 +113,7 @@ to connect to the same server (see wait-connections property at dccpserversink).
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp9958528"></a><h3>Element Information</h3>
+<a name="idp10972496"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -136,7 +136,7 @@ to connect to the same server (see wait-connections property at dccpserversink).
</div>
<hr>
<div class="refsect2">
-<a name="idp11044688"></a><h3>Element Pads</h3>
+<a name="idp10856160"></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-dccpserversink.html b/docs/plugins/html/gst-plugins-bad-plugins-dccpserversink.html
index 269be4ae..5c0f320a 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-dccpserversink.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-dccpserversink.html
@@ -71,7 +71,7 @@ TCP and UDP.
<p>
</p>
<div class="refsect2">
-<a name="idp10852864"></a><h3>Example pipeline</h3>
+<a name="idp5933632"></a><h3>Example pipeline</h3>
<p>
</p>
<div class="informalexample">
@@ -112,7 +112,7 @@ to connect to the same server (see wait-connections property at dccpserversink).
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp10857504"></a><h3>Element Information</h3>
+<a name="idp5938272"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -135,7 +135,7 @@ to connect to the same server (see wait-connections property at dccpserversink).
</div>
<hr>
<div class="refsect2">
-<a name="idp10864912"></a><h3>Element Pads</h3>
+<a name="idp5945680"></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-dccpserversrc.html b/docs/plugins/html/gst-plugins-bad-plugins-dccpserversrc.html
index e523d331..35b31c43 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-dccpserversrc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-dccpserversrc.html
@@ -72,7 +72,7 @@ TCP and UDP.
<p>
</p>
<div class="refsect2">
-<a name="idp10323360"></a><h3>Example pipeline</h3>
+<a name="idp6902352"></a><h3>Example pipeline</h3>
<p>
</p>
<div class="informalexample">
@@ -112,7 +112,7 @@ Run the server pipeline first than the client pipeline.
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp10327984"></a><h3>Element Information</h3>
+<a name="idp6906976"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -135,7 +135,7 @@ Run the server pipeline first than the client pipeline.
</div>
<hr>
<div class="refsect2">
-<a name="idp9084256"></a><h3>Element Pads</h3>
+<a name="idp10760768"></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-dfbvideosink.html b/docs/plugins/html/gst-plugins-bad-plugins-dfbvideosink.html
index 0a9b15b8..aeefa09b 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-dfbvideosink.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-dfbvideosink.html
@@ -67,7 +67,7 @@ GstDfbVideoSink implements
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp8833824"></a><h3>Element Information</h3>
+<a name="idp10779952"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -90,7 +90,7 @@ GstDfbVideoSink implements
</div>
<hr>
<div class="refsect2">
-<a name="idp8841280"></a><h3>Element Pads</h3>
+<a name="idp10787408"></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 0a84f15c..543f8573 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="idp6315568"></a><h3>Element Information</h3>
+<a name="idp8327520"></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="idp5484464"></a><h3>Element Pads</h3>
+<a name="idp10993056"></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 fdb19cd1..c3404e5a 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="idp2860624"></a><h3>Example launch line</h3>
+<a name="idp2520512"></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="idp9241504"></a><h3>Element Information</h3>
+<a name="idp6737488"></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="idp11010224"></a><h3>Element Pads</h3>
+<a name="idp7798544"></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-directdrawsink.html b/docs/plugins/html/gst-plugins-bad-plugins-directdrawsink.html
index f4a67b5e..6796c2f9 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-directdrawsink.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-directdrawsink.html
@@ -45,7 +45,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp5578000"></a><h3>Element Information</h3>
+<a name="idp6837808"></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="idp7595952"></a><h3>Element Pads</h3>
+<a name="idp8198960"></a><h3>Element Pads</h3>
</div>
</div>
<p>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-dodge.html b/docs/plugins/html/gst-plugins-bad-plugins-dodge.html
index 33356921..bfcde688 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="idp5282976"></a><h3>Example launch line</h3>
+<a name="idp7058192"></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="idp7389040"></a><h3>Element Information</h3>
+<a name="idp6875920"></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="idp7545072"></a><h3>Element Pads</h3>
+<a name="idp11183408"></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 2e7edc11..3e7bf792 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="idp7706656"></a><h3>Element Information</h3>
+<a name="idp7226832"></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="idp11601232"></a><h3>Element Pads</h3>
+<a name="idp11636272"></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 1a835be4..7ee7305c 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="idp11224640"></a><h3>Element Information</h3>
+<a name="idp11460400"></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="idp11232048"></a><h3>Element Pads</h3>
+<a name="idp11467808"></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 6b412f93..bc36cb60 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="idp5376000"></a><h3>Element Information</h3>
+<a name="idp6510528"></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="idp11099120"></a><h3>Element Pads</h3>
+<a name="idp7058944"></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 a946bf71..a40bcfd5 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-dvbsrc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-dvbsrc.html
@@ -39,7 +39,7 @@
</tr></table></div>
<div class="refsynopsisdiv">
<a name="gst-plugins-bad-plugins-dvbsrc.synopsis"></a><h2>Synopsis</h2>
-<pre class="synopsis"> <a class="link" href="gst-plugins-bad-plugins-dvbsrc.html#GstDvbSrc" title="GstDvbSrc">GstDvbSrc</a>;
+<pre class="synopsis">struct <a class="link" href="gst-plugins-bad-plugins-dvbsrc.html#GstDvbSrc" title="struct GstDvbSrc">GstDvbSrc</a>;
</pre>
</div>
<div class="refsect1">
@@ -75,7 +75,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp11415376"></a><h3>Element Information</h3>
+<a name="idp12196064"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -98,7 +98,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp11422896"></a><h3>Element Pads</h3>
+<a name="idp12203584"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -128,8 +128,50 @@
<div class="refsect1">
<a name="gst-plugins-bad-plugins-dvbsrc.details"></a><h2>Details</h2>
<div class="refsect2">
-<a name="GstDvbSrc"></a><h3>GstDvbSrc</h3>
-<pre class="programlisting">typedef struct _GstDvbSrc GstDvbSrc;</pre>
+<a name="GstDvbSrc"></a><h3>struct GstDvbSrc</h3>
+<pre class="programlisting">struct GstDvbSrc {
+ GstPushSrc element;
+ GstPad *srcpad;
+
+ GMutex tune_mutex;
+ gboolean need_tune;
+
+ int adapter_type;
+
+ int adapter_number; /* the device directory with the sub-devices */
+ int frontend_number;
+
+ int fd_frontend;
+ int fd_dvr;
+ int fd_filters[MAX_FILTERS];
+ GstPoll *poll;
+ GstPollFD poll_fd_dvr;
+
+ guint16 pids[MAX_FILTERS];
+ unsigned int freq;
+ unsigned int sym_rate;
+ int tone;
+ int diseqc_src;
+ gboolean send_diseqc;
+
+ int bandwidth;
+ int code_rate_hp;
+ int code_rate_lp;
+ int modulation;
+ int guard_interval;
+ int transmission_mode;
+ int hierarchy_information;
+ int inversion;
+ guint64 timeout;
+
+ GstDvbSrcPol pol;
+ guint stats_interval;
+ guint stats_counter;
+ gboolean need_unlock;
+
+ guint dvb_buffer_size;
+};
+</pre>
<p>
</p>
</div>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-dvdspu.html b/docs/plugins/html/gst-plugins-bad-plugins-dvdspu.html
index 0d6f4c13..d8fab1aa 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="idp11809936"></a><h3>Example launch line</h3>
+<a name="idp12001248"></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="idp11807760"></a><h3>Element Information</h3>
+<a name="idp11999072"></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="idp10147840"></a><h3>Element Pads</h3>
+<a name="idp8128208"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -119,7 +119,7 @@ DVD sub picture overlay element.
</tr>
<tr>
<td><p><span class="term">details</span></p></td>
-<td>video/x-dvd-subpicture</td>
+<td>subpicture/x-dvd</td>
</tr>
<tr>
<td><p><span class="term"></span></p></td>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-edgedetect.html b/docs/plugins/html/gst-plugins-bad-plugins-edgedetect.html
index 0f19ee21..d0a32f9d 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-edgedetect.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-edgedetect.html
@@ -44,7 +44,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp10940736"></a><h3>Element Information</h3>
+<a name="idp11550640"></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="idp6591344"></a><h3>Element Pads</h3>
+<a name="idp6416064"></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-exclusion.html b/docs/plugins/html/gst-plugins-bad-plugins-exclusion.html
index 71038ac7..852ccd28 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="idp9396624"></a><h3>Example launch line</h3>
+<a name="idp8309072"></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="idp8932464"></a><h3>Element Information</h3>
+<a name="idp5371744"></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="idp11280224"></a><h3>Element Pads</h3>
+<a name="idp11347856"></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 34fb4b0c..949e8bfa 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-faac.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-faac.html
@@ -81,7 +81,7 @@ GstFaac implements
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp11501600"></a><h3>Element Information</h3>
+<a name="idp11324736"></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="idp11509008"></a><h3>Element Pads</h3>
+<a name="idp11920336"></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 bcebd902..7749ef48 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="idp9439936"></a><h3>Element Information</h3>
+<a name="idp8788672"></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="idp8424256"></a><h3>Element Pads</h3>
+<a name="idp5451968"></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 9d6f34f5..c995fd22 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="idp12116352"></a><h3>Element Information</h3>
+<a name="idp10377776"></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="idp5590592"></a><h3>Element Pads</h3>
+<a name="idp8951616"></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 d721c20c..16c3f47c 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="idp11520160"></a><h3>Element Information</h3>
+<a name="idp11439888"></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="idp5610512"></a><h3>Element Pads</h3>
+<a name="idp10798496"></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 e7b8cf30..640f71d2 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-festival.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-festival.html
@@ -53,7 +53,7 @@ in server mode, started as </p>
<p>
</p>
<div class="refsect2">
-<a name="idp7376432"></a><h3>Example pipeline</h3>
+<a name="idp11762160"></a><h3>Example pipeline</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -71,7 +71,7 @@ in server mode, started as </p>
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp6240512"></a><h3>Element Information</h3>
+<a name="idp5971472"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -94,7 +94,7 @@ in server mode, started as </p>
</div>
<hr>
<div class="refsect2">
-<a name="idp8800384"></a><h3>Element Pads</h3>
+<a name="idp6743744"></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 cb4b2abf..6b21d445 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="idp8362800"></a><h3>Element Information</h3>
+<a name="idp6122960"></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="idm17504"></a><h3>Element Pads</h3>
+<a name="idp9559136"></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 46007fe1..90617b29 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="idp12498544"></a><h3>Example launch lines</h3>
+<a name="idp11756224"></a><h3>Example launch lines</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -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="idp12501520"></a><h3>Element Information</h3>
+<a name="idp11883216"></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="idp12508928"></a><h3>Element Pads</h3>
+<a name="idp11890624"></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-freeze.html b/docs/plugins/html/gst-plugins-bad-plugins-freeze.html
index 667d2b9a..f0c1a59f 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-freeze.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-freeze.html
@@ -56,7 +56,7 @@ Makes a stream from buffers of data.
<p>
</p>
<div class="refsect2">
-<a name="idp5907696"></a><h3>Example launch line</h3>
+<a name="idp12368304"></a><h3>Example launch line</h3>
<p>
</p>
<div class="informalexample">
@@ -78,7 +78,7 @@ Makes a stream from buffers of data.
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp6909424"></a><h3>Element Information</h3>
+<a name="idp6890656"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -101,7 +101,7 @@ Makes a stream from buffers of data.
</div>
<hr>
<div class="refsect2">
-<a name="idp9991056"></a><h3>Element Pads</h3>
+<a name="idp7718512"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -158,8 +158,8 @@ Makes a stream from buffers of data.
GstPad *sinkpad, *srcpad;
- GQueue *buffers;
- GstBuffer *current;
+ GPtrArray *buffers;
+ guint current;
guint max_buffers;
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-gaussianblur.html b/docs/plugins/html/gst-plugins-bad-plugins-gaussianblur.html
index 16b992b2..c1040c51 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="idp12024128"></a><h3>Example launch line</h3>
+<a name="idp12360176"></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="idp9259088"></a><h3>Element Information</h3>
+<a name="idp11874592"></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="idp6607072"></a><h3>Element Pads</h3>
+<a name="idp6926800"></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-ivfparse.html b/docs/plugins/html/gst-plugins-bad-plugins-ivfparse.html
index eb3e46fc..4da35751 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-ivfparse.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-ivfparse.html
@@ -45,7 +45,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp11952912"></a><h3>Element Information</h3>
+<a name="idp12110704"></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="idp9189616"></a><h3>Element Pads</h3>
+<a name="idp6673296"></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 72f218b9..178fff32 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-jpegparse.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-jpegparse.html
@@ -59,7 +59,7 @@ among others. Jpegparse can also extract metadata (e.g. xmp).
<p>
</p>
<div class="refsect2">
-<a name="idp3034448"></a><h3>Example launch line</h3>
+<a name="idp7839088"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -79,7 +79,7 @@ HTTP and stores it in a matroska file.
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp10792880"></a><h3>Element Information</h3>
+<a name="idp5664464"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -102,7 +102,7 @@ HTTP and stores it in a matroska file.
</div>
<hr>
<div class="refsect2">
-<a name="idp10706864"></a><h3>Element Pads</h3>
+<a name="idp11569792"></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 1e949504..d3b660b3 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="idp5801264"></a><h3>Element Information</h3>
+<a name="idp6192944"></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="idp12348688"></a><h3>Element Pads</h3>
+<a name="idp12611152"></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-katedec.html b/docs/plugins/html/gst-plugins-bad-plugins-katedec.html
index 76993dba..0c4897b5 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-katedec.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-katedec.html
@@ -57,7 +57,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp5802928"></a><h3>Element Information</h3>
+<a name="idp7525552"></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="idp8247488"></a><h3>Element Pads</h3>
+<a name="idp8065040"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -127,7 +127,7 @@
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> video/x-dvd-subpicture</td>
+<td> subpicture/x-dvd</td>
</tr>
</tbody>
</table></div>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-kateenc.html b/docs/plugins/html/gst-plugins-bad-plugins-kateenc.html
index 1200c5bb..7c1738f0 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-kateenc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-kateenc.html
@@ -69,7 +69,7 @@ GstKateEnc implements
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp10902416"></a><h3>Element Information</h3>
+<a name="idp7453376"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -92,7 +92,7 @@ GstKateEnc implements
</div>
<hr>
<div class="refsect2">
-<a name="idp12073872"></a><h3>Element Pads</h3>
+<a name="idp12536720"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -118,7 +118,7 @@ GstKateEnc implements
</tr>
<tr>
<td><p><span class="term"></span></p></td>
-<td> video/x-dvd-subpicture</td>
+<td> subpicture/x-dvd</td>
</tr>
</tbody>
</table></div>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-kateparse.html b/docs/plugins/html/gst-plugins-bad-plugins-kateparse.html
index 994a7dfd..c4905ff7 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-kateparse.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-kateparse.html
@@ -45,7 +45,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp13189408"></a><h3>Element Information</h3>
+<a name="idp13210048"></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="idp11775552"></a><h3>Element Pads</h3>
+<a name="idp7734608"></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-katetag.html b/docs/plugins/html/gst-plugins-bad-plugins-katetag.html
index 42faf4c7..cd96635f 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-katetag.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-katetag.html
@@ -64,7 +64,7 @@ GstKateTag implements
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp7110000"></a><h3>Element Information</h3>
+<a name="idp10661680"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -87,7 +87,7 @@ GstKateTag implements
</div>
<hr>
<div class="refsect2">
-<a name="idp9817712"></a><h3>Element Pads</h3>
+<a name="idp11385696"></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 c47dcd39..f4c0d701 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-liveadder.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-liveadder.html
@@ -64,7 +64,7 @@ Last reviewed on 2008-02-10 (0.10.11)
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp12826656"></a><h3>Element Information</h3>
+<a name="idp11071952"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -87,7 +87,7 @@ Last reviewed on 2008-02-10 (0.10.11)
</div>
<hr>
<div class="refsect2">
-<a name="idp9026016"></a><h3>Element Pads</h3>
+<a name="idp8160752"></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 a50b0902..a45a5495 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="idp7617392"></a><h3>Element Information</h3>
+<a name="idp5270400"></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="idp12058384"></a><h3>Element Pads</h3>
+<a name="idp9286000"></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 6d47b426..6e1234f4 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-mimdec.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-mimdec.html
@@ -45,7 +45,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp13106560"></a><h3>Element Information</h3>
+<a name="idp13148992"></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="idp9528928"></a><h3>Element Pads</h3>
+<a name="idp6263552"></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 8f7ded86..fb5a7d94 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-mimenc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-mimenc.html
@@ -53,7 +53,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp13195040"></a><h3>Element Information</h3>
+<a name="idp13176608"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -76,7 +76,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp8042176"></a><h3>Element Pads</h3>
+<a name="idp11618608"></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 4b7b1f5b..266e34aa 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="idp8393712"></a><h3>Element Information</h3>
+<a name="idp9326800"></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="idp13036976"></a><h3>Element Pads</h3>
+<a name="idp13320112"></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 de21140e..d8d5effc 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="idp13248064"></a><h3>Element Information</h3>
+<a name="idp13071536"></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="idp13636368"></a><h3>Element Pads</h3>
+<a name="idp13078992"></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 fa3130f3..f8d82a70 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-mpeg2enc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-mpeg2enc.html
@@ -94,7 +94,7 @@ GstMpeg2enc implements
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp13547984"></a><h3>Element Information</h3>
+<a name="idp14314960"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -118,7 +118,7 @@ Ronald Bultje &lt;rbultje@ronald.bitfreak.net&gt;</td>
</div>
<hr>
<div class="refsect2">
-<a name="idp13555392"></a><h3>Element Pads</h3>
+<a name="idp14322368"></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-mplex.html b/docs/plugins/html/gst-plugins-bad-plugins-mplex.html
index 23451afb..8dd41fc5 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-mplex.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-mplex.html
@@ -59,7 +59,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp12900480"></a><h3>Element Information</h3>
+<a name="idp13167136"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -84,7 +84,7 @@ Mark Nauwelaerts &lt;mnauw@users.sourceforge.net&gt;</td>
</div>
<hr>
<div class="refsect2">
-<a name="idp6275440"></a><h3>Element Pads</h3>
+<a name="idp6517568"></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-mxfdemux.html b/docs/plugins/html/gst-plugins-bad-plugins-mxfdemux.html
index e830c896..c93cf6fd 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-mxfdemux.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-mxfdemux.html
@@ -58,7 +58,7 @@ mxfdemux demuxes an MXF file into the different contained streams.
<p>
</p>
<div class="refsect2">
-<a name="idp8561696"></a><h3>Example launch line</h3>
+<a name="idp10383872"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -76,7 +76,7 @@ mxfdemux demuxes an MXF file into the different contained streams.
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp9156400"></a><h3>Element Information</h3>
+<a name="idp5962464"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -99,7 +99,7 @@ mxfdemux demuxes an MXF file into the different contained streams.
</div>
<hr>
<div class="refsect2">
-<a name="idp13501376"></a><h3>Element Pads</h3>
+<a name="idp13024752"></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-mxfmux.html b/docs/plugins/html/gst-plugins-bad-plugins-mxfmux.html
index 63282757..942a83f4 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-mxfmux.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-mxfmux.html
@@ -48,7 +48,7 @@ mxfmux muxes different streams into an MXF file.
<p>
</p>
<div class="refsect2">
-<a name="idp14255584"></a><h3>Example launch line</h3>
+<a name="idp13934992"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -66,7 +66,7 @@ mxfmux muxes different streams into an MXF file.
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp14253088"></a><h3>Element Information</h3>
+<a name="idp13932496"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -89,7 +89,7 @@ mxfmux muxes different streams into an MXF file.
</div>
<hr>
<div class="refsect2">
-<a name="idp14247008"></a><h3>Element Pads</h3>
+<a name="idp13926416"></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-mythtvsrc.html b/docs/plugins/html/gst-plugins-bad-plugins-mythtvsrc.html
index 9d6eba6b..61b1edcd 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-mythtvsrc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-mythtvsrc.html
@@ -67,7 +67,7 @@ GstMythtvSrc implements
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp13365808"></a><h3>Element Information</h3>
+<a name="idp13391504"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -90,7 +90,7 @@ GstMythtvSrc implements
</div>
<hr>
<div class="refsect2">
-<a name="idp13373216"></a><h3>Element Pads</h3>
+<a name="idp13398912"></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-nuvdemux.html b/docs/plugins/html/gst-plugins-bad-plugins-nuvdemux.html
index d5da6294..ae4a6f8a 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-nuvdemux.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-nuvdemux.html
@@ -52,7 +52,7 @@ This element currently only supports pull-based scheduling.
<p>
</p>
<div class="refsect2">
-<a name="idp13944096"></a><h3>Example launch line</h3>
+<a name="idp13505664"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -73,7 +73,7 @@ right decoder elements/plugins installed.
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp13431056"></a><h3>Element Information</h3>
+<a name="idp13504256"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -96,7 +96,7 @@ right decoder elements/plugins installed.
</div>
<hr>
<div class="refsect2">
-<a name="idp13925568"></a><h3>Element Pads</h3>
+<a name="idp13368928"></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 8262ec0f..d8670c55 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="idp15722560"></a><h3>Element Information</h3>
+<a name="idp18968192"></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="idp21229872"></a><h3>Element Pads</h3>
+<a name="idp21384832"></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 dcc9a0c8..d63b7895 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-pcapparse.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-pcapparse.html
@@ -76,7 +76,7 @@ should be included.
<p>
</p>
<div class="refsect2">
-<a name="idp13930912"></a><h3>Example pipelines</h3>
+<a name="idp13480208"></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="idp13933744"></a><h3>Element Information</h3>
+<a name="idp13483040"></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="idp13941152"></a><h3>Element Pads</h3>
+<a name="idp13490448"></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 38131ae6..eb95ef02 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="idp6354624"></a><h3>Element Information</h3>
+<a name="idp10290272"></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="idp13398464"></a><h3>Element Pads</h3>
+<a name="idp13377856"></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-aiff.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-aiff.html
index e1de198b..37b45394 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-aiff.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-aiff.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp19668208"></a><h2>Plugin Information</h2>
+<a name="idp15921200"></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="idp15166784"></a><h2>Elements</h2>
+<a name="idp18767712"></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-assrender.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-assrender.html
index 02f92cb9..42a3fe68 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="idp20019408"></a><h2>Plugin Information</h2>
+<a name="idp20190480"></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="idp18344912"></a><h2>Elements</h2>
+<a name="idp20621328"></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 b7b5875d..c0e65377 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="idp19078960"></a><h2>Plugin Information</h2>
+<a name="idp17314240"></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="idp18017232"></a><h2>Elements</h2>
+<a name="idp16196416"></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 c0b07114..7ab69a63 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="idp19021200"></a><h2>Plugin Information</h2>
+<a name="idp20128560"></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="idp16067856"></a><h2>Elements</h2>
+<a name="idp21639920"></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 32bab432..31299a7b 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="idp22325728"></a><h2>Plugin Information</h2>
+<a name="idp16219040"></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="idp18021488"></a><h2>Elements</h2>
+<a name="idp19998736"></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 ddaa0b20..94cfc12d 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="idp20007680"></a><h2>Plugin Information</h2>
+<a name="idp20669056"></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="idp18973584"></a><h2>Elements</h2>
+<a name="idp16226944"></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-cdaudio.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-cdaudio.html
index 57f190f7..efe33af3 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-cdaudio.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-cdaudio.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp17371872"></a><h2>Plugin Information</h2>
+<a name="idp20398480"></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="idp22140880"></a><h2>Elements</h2>
+<a name="idp19289904"></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-cdxaparse.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-cdxaparse.html
index a6d03b20..a7814239 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-cdxaparse.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-cdxaparse.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp16364144"></a><h2>Plugin Information</h2>
+<a name="idp23779264"></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="idp18627920"></a><h2>Elements</h2>
+<a name="idp15175248"></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 3b8e869e..a0e0e87e 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="idp16892768"></a><h2>Plugin Information</h2>
+<a name="idp19351344"></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="idp16884144"></a><h2>Elements</h2>
+<a name="idp18872656"></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 4455884c..a965656f 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="idp18541856"></a><h2>Plugin Information</h2>
+<a name="idp23338608"></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="idp16250272"></a><h2>Elements</h2>
+<a name="idp17969136"></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 384999a0..b0dd8503 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="idp16276784"></a><h2>Plugin Information</h2>
+<a name="idp23667264"></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="idp19483808"></a><h2>Elements</h2>
+<a name="idp15756960"></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 32726505..8c7e0836 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="idp17164096"></a><h2>Plugin Information</h2>
+<a name="idp16044736"></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="idp15662576"></a><h2>Elements</h2>
+<a name="idp19235632"></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-dccp.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dccp.html
index da2b9c1c..9e921a1a 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dccp.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dccp.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp16655872"></a><h2>Plugin Information</h2>
+<a name="idp20017200"></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="idp19566352"></a><h2>Elements</h2>
+<a name="idp19811248"></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-debugutilsbad.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-debugutilsbad.html
index 9da2817d..7c69e060 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="idp19190848"></a><h2>Plugin Information</h2>
+<a name="idp22709328"></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="idp19319136"></a><h2>Elements</h2>
+<a name="idp19896208"></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-dfbvideosink.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dfbvideosink.html
index 530a49af..9e42ced0 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-dfbvideosink.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dfbvideosink.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp20079296"></a><h2>Plugin Information</h2>
+<a name="idp20308144"></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="idp19866592"></a><h2>Elements</h2>
+<a name="idp21243728"></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-dirac.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-dirac.html
index 81213fca..01317bb9 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="idp22387648"></a><h2>Plugin Information</h2>
+<a name="idp19685984"></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="idp18737264"></a><h2>Elements</h2>
+<a name="idp21819504"></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-directdraw.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-directdraw.html
index 09ce8986..cedbfe34 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-directdraw.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-directdraw.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp17951344"></a><h2>Plugin Information</h2>
+<a name="idp19243696"></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="idp18455616"></a><h2>Elements</h2>
+<a name="idp18313824"></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 33b06938..3219dde3 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="idp15703744"></a><h2>Plugin Information</h2>
+<a name="idp20208336"></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="idp19478800"></a><h2>Elements</h2>
+<a name="idp17588848"></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 3919f9a1..abfe26f4 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="idp23142192"></a><h2>Plugin Information</h2>
+<a name="idp15071024"></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="idp19163440"></a><h2>Elements</h2>
+<a name="idp19609344"></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 6b43ccfb..17bbc970 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="idp16710096"></a><h2>Plugin Information</h2>
+<a name="idp19440896"></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="idp15679696"></a><h2>Elements</h2>
+<a name="idp19319232"></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 325a8dde..008dd173 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="idp16516992"></a><h2>Plugin Information</h2>
+<a name="idp18330896"></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="idp16770272"></a><h2>Elements</h2>
+<a name="idp19341776"></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 22f56eac..9e6ab2fd 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="idp16943728"></a><h2>Plugin Information</h2>
+<a name="idp16380896"></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="idp16516656"></a><h2>Elements</h2>
+<a name="idp15787712"></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 2c9f8f3e..4b16ef44 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="idp20462688"></a><h2>Plugin Information</h2>
+<a name="idp23496688"></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="idp19873824"></a><h2>Elements</h2>
+<a name="idp18932208"></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-fbdevsink.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-fbdevsink.html
index d546f7b2..f6a2ec59 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-fbdevsink.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-fbdevsink.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp16116768"></a><h2>Plugin Information</h2>
+<a name="idp17331600"></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="idp17005616"></a><h2>Elements</h2>
+<a name="idp17991360"></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 71b035cb..0b09778d 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="idp19019888"></a><h2>Plugin Information</h2>
+<a name="idp18283584"></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="idp20199872"></a><h2>Elements</h2>
+<a name="idp15336768"></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-filter.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-filter.html
index 65b8ca67..942650f4 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-filter.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-filter.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp23846416"></a><h2>Plugin Information</h2>
+<a name="idp19604960"></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="idp15283168"></a><h2>Elements</h2>
+<a name="idp23466208"></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-freeze.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-freeze.html
index dd998377..0affdfa7 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-freeze.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-freeze.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp23867648"></a><h2>Plugin Information</h2>
+<a name="idp21124256"></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="idp19093728"></a><h2>Elements</h2>
+<a name="idp18297072"></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-frei0r.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-frei0r.html
index 1ec9ea30..973693ed 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-frei0r.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-frei0r.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp19525968"></a><h2>Plugin Information</h2>
+<a name="idp20354064"></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="idp19371552"></a><h2>Elements</h2>
+<a name="idp19692784"></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-gaudieffects.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-gaudieffects.html
index 5cff67aa..fa805f72 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="idp23250352"></a><h2>Plugin Information</h2>
+<a name="idp23276832"></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="idp20591408"></a><h2>Elements</h2>
+<a name="idp20098640"></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 81fe71fd..f5057045 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="idp23273456"></a><h2>Plugin Information</h2>
+<a name="idp24011776"></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="idp19624512"></a><h2>Elements</h2>
+<a name="idp20740464"></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 4750797d..bcf4d829 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="idp16111536"></a><h2>Plugin Information</h2>
+<a name="idp21805024"></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="idp17494256"></a><h2>Elements</h2>
+<a name="idp18326976"></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-ivfparse.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-ivfparse.html
index c4fe00c7..8e0c4407 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-ivfparse.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-ivfparse.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp19916464"></a><h2>Plugin Information</h2>
+<a name="idp19689056"></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="idp20199136"></a><h2>Elements</h2>
+<a name="idp21012000"></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-jpegformat.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-jpegformat.html
index a8fc10d5..b70a4654 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="idp23245760"></a><h2>Plugin Information</h2>
+<a name="idp20336784"></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="idp17009136"></a><h2>Elements</h2>
+<a name="idp18319760"></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-kate.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-kate.html
index 9cfae8ad..81c236cc 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-kate.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-kate.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp23307168"></a><h2>Plugin Information</h2>
+<a name="idp24822064"></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="idp16749296"></a><h2>Elements</h2>
+<a name="idp18376000"></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-ladspa.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-ladspa.html
index 42879510..d2cec867 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-ladspa.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-ladspa.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp16913984"></a><h2>Plugin Information</h2>
+<a name="idp22556448"></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="idp16279552"></a><h2>Elements</h2>
+<a name="idp23476320"></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 ad98b80c..ceff8172 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="idp19563504"></a><h2>Plugin Information</h2>
+<a name="idp18500064"></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="idp17188736"></a><h2>Elements</h2>
+<a name="idp17476912"></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-lv2.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-lv2.html
index bcfcd66c..3bb6fa81 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-lv2.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-lv2.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp22781056"></a><h2>Plugin Information</h2>
+<a name="idp23302448"></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="idp20551936"></a><h2>Elements</h2>
+<a name="idp20543408"></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-mimic.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mimic.html
index 5ad93e8e..0147ce33 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="idp23528784"></a><h2>Plugin Information</h2>
+<a name="idp19283216"></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="idp15227488"></a><h2>Elements</h2>
+<a name="idp24704144"></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 a6cf795e..793724b0 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="idp22872112"></a><h2>Plugin Information</h2>
+<a name="idp21509120"></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="idp17671040"></a><h2>Elements</h2>
+<a name="idp18791216"></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 0b59604d..27f102c3 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="idp23842800"></a><h2>Plugin Information</h2>
+<a name="idp20736464"></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="idp20310752"></a><h2>Elements</h2>
+<a name="idp17343056"></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 ab0a0dce..23991947 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="idp20025792"></a><h2>Plugin Information</h2>
+<a name="idp17270384"></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="idp22653344"></a><h2>Elements</h2>
+<a name="idp23961344"></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-mpeg4videoparse.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpeg4videoparse.html
index dad026ae..61614a0c 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpeg4videoparse.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpeg4videoparse.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp17501296"></a><h2>Plugin Information</h2>
+<a name="idp16121184"></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="idp16429744"></a><h2>Elements</h2>
+<a name="idp24118048"></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-mpegdemux2.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegdemux2.html
index 6573abab..e3e5ce54 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegdemux2.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegdemux2.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp16721872"></a><h2>Plugin Information</h2>
+<a name="idp22747008"></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="idp16848768"></a><h2>Elements</h2>
+<a name="idp23241472"></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-mpegpsmux.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegpsmux.html
index 5bfeefb5..b16f53fc 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegpsmux.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mpegpsmux.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp23102432"></a><h2>Plugin Information</h2>
+<a name="idp16018720"></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="idp17409424"></a><h2>Elements</h2>
+<a name="idp21147168"></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 76aa0905..f34c6797 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="idp16614464"></a><h2>Plugin Information</h2>
+<a name="idp19131376"></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="idp22694704"></a><h2>Elements</h2>
+<a name="idp15910784"></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 c41edded..9a600740 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="idp18386272"></a><h2>Plugin Information</h2>
+<a name="idp19758000"></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="idp24238032"></a><h2>Elements</h2>
+<a name="idp19647952"></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-musepack.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-musepack.html
index 6e7cda07..cf71a922 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-musepack.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-musepack.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp16696832"></a><h2>Plugin Information</h2>
+<a name="idp18754368"></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="idp23816224"></a><h2>Elements</h2>
+<a name="idp16173312"></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-musicbrainz.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-musicbrainz.html
index c59a626b..136b0484 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-musicbrainz.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-musicbrainz.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp23400608"></a><h2>Plugin Information</h2>
+<a name="idp21926256"></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="idp16594320"></a><h2>Elements</h2>
+<a name="idp16139264"></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-mve.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mve.html
index e1c43679..ea1fccb9 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mve.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mve.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp23350976"></a><h2>Plugin Information</h2>
+<a name="idp24510224"></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="idp23884448"></a><h2>Elements</h2>
+<a name="idp23912384"></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-mxf.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mxf.html
index 65bd63a5..1d01618a 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-mxf.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-mxf.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp18689488"></a><h2>Plugin Information</h2>
+<a name="idp24036224"></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="idp24343712"></a><h2>Elements</h2>
+<a name="idp23733888"></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-nas.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-nas.html
index b1699af1..1909599b 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-nas.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-nas.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp17499248"></a><h2>Plugin Information</h2>
+<a name="idp23238192"></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="idp18591856"></a><h2>Elements</h2>
+<a name="idp17759456"></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-neon.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-neon.html
index 99197f02..d6db7ae9 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-neon.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-neon.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp15775552"></a><h2>Plugin Information</h2>
+<a name="idp15954992"></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="idp19014224"></a><h2>Elements</h2>
+<a name="idp16166240"></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-nsf.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-nsf.html
index 3f17f55e..84e33e37 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-nsf.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-nsf.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp18236560"></a><h2>Plugin Information</h2>
+<a name="idp19317776"></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="idp15937840"></a><h2>Elements</h2>
+<a name="idp20532768"></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-nuvdemux.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-nuvdemux.html
index 06831c00..b2ea8615 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-nuvdemux.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-nuvdemux.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp22496192"></a><h2>Plugin Information</h2>
+<a name="idp24562064"></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="idp23318064"></a><h2>Elements</h2>
+<a name="idp19303504"></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 0b66a558..171d8d43 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="idp23509792"></a><h2>Plugin Information</h2>
+<a name="idp18971728"></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="idp22316272"></a><h2>Elements</h2>
+<a name="idp21745104"></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 e7cfaca1..534e71ee 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="idp16427792"></a><h2>Plugin Information</h2>
+<a name="idp22710768"></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="idp22426912"></a><h2>Elements</h2>
+<a name="idp18362640"></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 d4d2e06c..ac73043e 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="idp21282896"></a><h2>Plugin Information</h2>
+<a name="idp18926256"></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="idp20091488"></a><h2>Elements</h2>
+<a name="idp16204272"></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-real.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-real.html
index 2e9ead9a..20fbe9e5 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-real.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-real.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp17087424"></a><h2>Plugin Information</h2>
+<a name="idp24132096"></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="idp22656304"></a><h2>Elements</h2>
+<a name="idp16008240"></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-rfbsrc.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rfbsrc.html
index fed11526..ef28de64 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-rfbsrc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rfbsrc.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp15874192"></a><h2>Plugin Information</h2>
+<a name="idp18970624"></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="idp16890928"></a><h2>Elements</h2>
+<a name="idp17500064"></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-rsvg.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rsvg.html
index 4b61b5a9..9898710c 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-rsvg.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-rsvg.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp24214448"></a><h2>Plugin Information</h2>
+<a name="idp20656144"></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="idp15278048"></a><h2>Elements</h2>
+<a name="idp17337664"></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 438a6cee..d30a6435 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="idp21036416"></a><h2>Plugin Information</h2>
+<a name="idp19813504"></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="idp23088224"></a><h2>Elements</h2>
+<a name="idp16182272"></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 273b4db8..cb166e19 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="idp15271952"></a><h2>Plugin Information</h2>
+<a name="idp15241808"></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="idp22705248"></a><h2>Elements</h2>
+<a name="idp15955728"></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 b12ab8d5..d68ab471 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="idp18052432"></a><h2>Plugin Information</h2>
+<a name="idp20962336"></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="idp23474192"></a><h2>Elements</h2>
+<a name="idp15315376"></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-sdl.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-sdl.html
index 806887d2..16fb8f1e 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-sdl.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-sdl.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp23537968"></a><h2>Plugin Information</h2>
+<a name="idp17850032"></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="idp24834512"></a><h2>Elements</h2>
+<a name="idp20477744"></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-sdp.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-sdp.html
index 58b8802c..d6159f71 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="idp18968592"></a><h2>Plugin Information</h2>
+<a name="idp20354512"></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="idp18741552"></a><h2>Elements</h2>
+<a name="idp24880000"></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 54ded6f7..303d75d9 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="idp20059952"></a><h2>Plugin Information</h2>
+<a name="idp18754624"></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="idp16133504"></a><h2>Elements</h2>
+<a name="idp19757216"></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-sndfile.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-sndfile.html
index 2e77d9e6..00f903ce 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-sndfile.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-sndfile.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp20756192"></a><h2>Plugin Information</h2>
+<a name="idp24129904"></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="idp18353152"></a><h2>Elements</h2>
+<a name="idp19548800"></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 20dc65c9..85dab661 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="idp20304512"></a><h2>Plugin Information</h2>
+<a name="idp21515200"></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="idp17399008"></a><h2>Elements</h2>
+<a name="idp19315424"></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-spcdec.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-spcdec.html
index ce2fc05e..b7941c6f 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-spcdec.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-spcdec.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp20141440"></a><h2>Plugin Information</h2>
+<a name="idp19090272"></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="idp20074336"></a><h2>Elements</h2>
+<a name="idp24205408"></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-speed.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-speed.html
index 8de4103e..0637ded0 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="idp15937152"></a><h2>Plugin Information</h2>
+<a name="idp20610624"></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="idp21308464"></a><h2>Elements</h2>
+<a name="idp16273776"></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-stereo.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-stereo.html
index 9a29e739..d047c66a 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-stereo.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-stereo.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp16026848"></a><h2>Plugin Information</h2>
+<a name="idp24523200"></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="idp16104624"></a><h2>Elements</h2>
+<a name="idp18098384"></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-swfdec.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-swfdec.html
index a907adc8..0d167faa 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-swfdec.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-swfdec.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp16258128"></a><h2>Plugin Information</h2>
+<a name="idp18226480"></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="idp22103120"></a><h2>Elements</h2>
+<a name="idp17624848"></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-timidity.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-timidity.html
index cd488907..4656d821 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-timidity.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-timidity.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp16245712"></a><h2>Plugin Information</h2>
+<a name="idp15918736"></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="idp16039504"></a><h2>Elements</h2>
+<a name="idp18999712"></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-tta.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-tta.html
index ee0567c6..99f87d63 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-tta.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-tta.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp16843808"></a><h2>Plugin Information</h2>
+<a name="idp20456336"></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="idp24280816"></a><h2>Elements</h2>
+<a name="idp19845776"></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-vcdsrc.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-vcdsrc.html
index 0a1ef79c..4537ebef 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-vcdsrc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-vcdsrc.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp17496064"></a><h2>Plugin Information</h2>
+<a name="idp15219136"></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="idp19015968"></a><h2>Elements</h2>
+<a name="idp25575872"></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-videosignal.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-videosignal.html
index a35fdb17..cae1b41f 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-videosignal.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-videosignal.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp20085216"></a><h2>Plugin Information</h2>
+<a name="idp18789920"></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="idp18135184"></a><h2>Elements</h2>
+<a name="idp22558592"></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-vmnc.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-vmnc.html
index 5d82363b..698faeca 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-vmnc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-vmnc.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp22402208"></a><h2>Plugin Information</h2>
+<a name="idp18152624"></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="idp16461104"></a><h2>Elements</h2>
+<a name="idp20122176"></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 353f994f..61a60c09 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="idp20562432"></a><h2>Plugin Information</h2>
+<a name="idp17816448"></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="idp18836640"></a><h2>Elements</h2>
+<a name="idp22681136"></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-vp8.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-vp8.html
index de7bf59a..2f38a4dd 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-vp8.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-vp8.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp17763520"></a><h2>Plugin Information</h2>
+<a name="idp20775920"></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="idp23067392"></a><h2>Elements</h2>
+<a name="idp22724064"></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-wildmidi.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-wildmidi.html
index 36b96de2..9f7dbcfe 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-wildmidi.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-wildmidi.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp23182768"></a><h2>Plugin Information</h2>
+<a name="idp21525408"></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="idp19675376"></a><h2>Elements</h2>
+<a name="idp21803232"></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-xvid.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-xvid.html
index edf1cea6..d2bc1f28 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-plugin-xvid.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-plugin-xvid.html
@@ -29,7 +29,7 @@
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsect1">
-<a name="idp20289872"></a><h2>Plugin Information</h2>
+<a name="idp14915488"></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="idp16962352"></a><h2>Elements</h2>
+<a name="idp17438480"></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-zbar.html b/docs/plugins/html/gst-plugins-bad-plugins-plugin-zbar.html
index c55c1117..70c79d38 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="idp18015520"></a><h2>Plugin Information</h2>
+<a name="idp18043984"></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="idp16418096"></a><h2>Elements</h2>
+<a name="idp20566368"></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 4b654733..1ca8d6fc 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="idp14000208"></a><h3>Element Information</h3>
+<a name="idp14497280"></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="idp3027664"></a><h3>Element Pads</h3>
+<a name="idp11587360"></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-rsvgdec.html b/docs/plugins/html/gst-plugins-bad-plugins-rsvgdec.html
index ee44fb79..99cc6e3d 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-rsvgdec.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-rsvgdec.html
@@ -45,7 +45,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp14111776"></a><h3>Element Information</h3>
+<a name="idp14165152"></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="idp6327280"></a><h3>Element Pads</h3>
+<a name="idp9167136"></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-rsvgoverlay.html b/docs/plugins/html/gst-plugins-bad-plugins-rsvgoverlay.html
index 8051cfe5..a2838ba6 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-rsvgoverlay.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-rsvgoverlay.html
@@ -63,7 +63,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp8873504"></a><h3>Element Information</h3>
+<a name="idp11018832"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -86,7 +86,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp6531632"></a><h3>Element Pads</h3>
+<a name="idp6380368"></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 08902467..333e9d7a 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="idp14357424"></a><h3>Element Information</h3>
+<a name="idp14453392"></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="idp14850736"></a><h3>Element Pads</h3>
+<a name="idp14460848"></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 17035816..fb9edc03 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="idp14543488"></a><h3>Element Information</h3>
+<a name="idp14546816"></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="idp14550896"></a><h3>Element Pads</h3>
+<a name="idp14430464"></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 b0017e83..510d1117 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="idp16782432"></a><h3>Element Information</h3>
+<a name="idp19986432"></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="idp17006352"></a><h3>Element Pads</h3>
+<a name="idp20333312"></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 9792ee00..3db0a577 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="idp17022976"></a><h3>Element Information</h3>
+<a name="idp18567184"></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="idp17030432"></a><h3>Element Pads</h3>
+<a name="idp18574640"></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 7cbd186a..2481940b 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="idp17746640"></a><h3>Example pipelines</h3>
+<a name="idp15136368"></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="idp17643120"></a><h3>Element Information</h3>
+<a name="idp19059856"></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="idp19813008"></a><h3>Element Pads</h3>
+<a name="idp19213504"></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 4739341b..5616b479 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="idp16573952"></a><h3>Example pipelines</h3>
+<a name="idp17244576"></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="idp15832672"></a><h3>Element Information</h3>
+<a name="idp19163024"></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="idp15840080"></a><h3>Element Pads</h3>
+<a name="idp16286400"></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-sdlaudiosink.html b/docs/plugins/html/gst-plugins-bad-plugins-sdlaudiosink.html
index 76f37032..b24dfaf5 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-sdlaudiosink.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-sdlaudiosink.html
@@ -45,7 +45,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp18902496"></a><h3>Element Information</h3>
+<a name="idp20014976"></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="idp15272912"></a><h3>Element Pads</h3>
+<a name="idp18412368"></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-sdlvideosink.html b/docs/plugins/html/gst-plugins-bad-plugins-sdlvideosink.html
index 4b86d7ca..15f2a2f9 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-sdlvideosink.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-sdlvideosink.html
@@ -61,7 +61,7 @@ GstSDLVideoSink implements
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp17401024"></a><h3>Element Information</h3>
+<a name="idp17693504"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -84,7 +84,7 @@ GstSDLVideoSink implements
</div>
<hr>
<div class="refsect2">
-<a name="idp16920944"></a><h3>Element Pads</h3>
+<a name="idp20086528"></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 417ce819..bfa3eb07 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="idp17196560"></a><h3>Example launch line</h3>
+<a name="idp18513248"></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="idp17199760"></a><h3>Element Information</h3>
+<a name="idp18516496"></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="idp17207232"></a><h3>Element Pads</h3>
+<a name="idp18523968"></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 3a640bce..674896e9 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="idp16542432"></a><h3>Element Information</h3>
+<a name="idp19782064"></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="idp20338208"></a><h3>Element Pads</h3>
+<a name="idp20860160"></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 054624a8..fe644ac4 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="idp20282800"></a><h3>Element Information</h3>
+<a name="idp14969568"></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="idp19500304"></a><h3>Element Pads</h3>
+<a name="idp19375552"></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 0fc0e2fd..57467efc 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="idp20323408"></a><h3>Example launch line</h3>
+<a name="idp20119248"></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="idp19459616"></a><h3>Element Information</h3>
+<a name="idp20029840"></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="idp19467024"></a><h3>Element Pads</h3>
+<a name="idp20037248"></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 06ca2e82..b8bff659 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="idp18613216"></a><h3>Example launch line</h3>
+<a name="idp20579712"></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="idp19068512"></a><h3>Element Information</h3>
+<a name="idp19484896"></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="idp19699456"></a><h3>Element Pads</h3>
+<a name="idp17904576"></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 760d71db..6b8a28e0 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="idp15225088"></a><h3>Example launch line</h3>
+<a name="idp20202256"></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="idp18868880"></a><h3>Element Information</h3>
+<a name="idp18414112"></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="idp17506816"></a><h3>Element Pads</h3>
+<a name="idp16050688"></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 64309ee2..7d42534e 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-speed.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-speed.html
@@ -62,7 +62,7 @@ requires a fairly up-to-date gst-plugins-base, as of February 2007).
<p>
</p>
<div class="refsect2">
-<a name="idp19002560"></a><h3>Example launch line</h3>
+<a name="idp17674992"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -83,7 +83,7 @@ Last reviewed on 2007-02-26 (0.10.4.1)
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp19000640"></a><h3>Element Information</h3>
+<a name="idp14709536"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -106,7 +106,7 @@ Last reviewed on 2007-02-26 (0.10.4.1)
</div>
<hr>
<div class="refsect2">
-<a name="idp15359088"></a><h3>Element Pads</h3>
+<a name="idp18356464"></a><h3>Element Pads</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -177,12 +177,7 @@ Last reviewed on 2007-02-26 (0.10.4.1)
gint64 offset;
gint64 timestamp;
- guint rate;
- guint channels;
- guint width;
-
- guint sample_size;
- GstSpeedFormat format;
+ GstAudioInfo info;
};
</pre>
<p>
diff --git a/docs/plugins/html/gst-plugins-bad-plugins-sphere.html b/docs/plugins/html/gst-plugins-bad-plugins-sphere.html
index 66ef7385..ecc68773 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="idp19928336"></a><h3>Element Information</h3>
+<a name="idp17483584"></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="idp20761296"></a><h3>Element Pads</h3>
+<a name="idp21675968"></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 094a2556..d2cdb02b 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="idp19553440"></a><h3>Element Information</h3>
+<a name="idp20583616"></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="idp20820448"></a><h3>Element Pads</h3>
+<a name="idp16246720"></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-stereo.html b/docs/plugins/html/gst-plugins-bad-plugins-stereo.html
index 81d12544..1e351efe 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-stereo.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-stereo.html
@@ -57,7 +57,7 @@ Create a wide stereo effect.
<p>
</p>
<div class="refsect2">
-<a name="idp19235648"></a><h3>Example pipelines</h3>
+<a name="idp17825968"></a><h3>Example pipelines</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -75,7 +75,7 @@ Create a wide stereo effect.
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp19150016"></a><h3>Element Information</h3>
+<a name="idp20328512"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -98,7 +98,7 @@ Create a wide stereo effect.
</div>
<hr>
<div class="refsect2">
-<a name="idp17320912"></a><h3>Element Pads</h3>
+<a name="idp18363104"></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 acf57307..911f46b9 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="idp18019696"></a><h3>Element Information</h3>
+<a name="idp16205664"></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="idp18043264"></a><h3>Element Pads</h3>
+<a name="idp18135264"></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 547710f2..37698a49 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="idp18850720"></a><h3>Example launch line</h3>
+<a name="idp17350272"></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="idp17287248"></a><h3>Element Information</h3>
+<a name="idp16443200"></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="idp20813440"></a><h3>Element Pads</h3>
+<a name="idp19044320"></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 8bfe4fe4..5514982c 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="idp20961872"></a><h3>Element Information</h3>
+<a name="idp17433488"></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="idp19181872"></a><h3>Element Pads</h3>
+<a name="idp18146544"></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-tiger.html b/docs/plugins/html/gst-plugins-bad-plugins-tiger.html
index 7bda0250..25268f19 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-tiger.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-tiger.html
@@ -68,7 +68,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp19151600"></a><h3>Element Information</h3>
+<a name="idp21291760"></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="idp15228016"></a><h3>Element Pads</h3>
+<a name="idp20096864"></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-timidity.html b/docs/plugins/html/gst-plugins-bad-plugins-timidity.html
index 81981f58..749b8c7f 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-timidity.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-timidity.html
@@ -45,7 +45,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp21215776"></a><h3>Element Information</h3>
+<a name="idp18287296"></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="idp18857904"></a><h3>Element Pads</h3>
+<a name="idp18236592"></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-trm.html b/docs/plugins/html/gst-plugins-bad-plugins-trm.html
index 28dbfaf7..adf115d6 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-trm.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-trm.html
@@ -54,7 +54,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp18425328"></a><h3>Element Information</h3>
+<a name="idp19347856"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -77,7 +77,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp16439904"></a><h3>Element Pads</h3>
+<a name="idp18385808"></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 e77d8195..10bda597 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="idp21208752"></a><h3>Element Information</h3>
+<a name="idp19316176"></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="idp18154848"></a><h3>Element Pads</h3>
+<a name="idp20573392"></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 33ef4e99..88c966cf 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="idp16665216"></a><h3>Element Information</h3>
+<a name="idp15063328"></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="idp21429408"></a><h3>Element Pads</h3>
+<a name="idp15161392"></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-videoanalyse.html b/docs/plugins/html/gst-plugins-bad-plugins-videoanalyse.html
index 215661c3..2c71dca3 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-videoanalyse.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-videoanalyse.html
@@ -95,7 +95,7 @@ The message's structure contains these fields:
<p>
</p>
<div class="refsect2">
-<a name="idp18809280"></a><h3>Example launch line</h3>
+<a name="idp21210992"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -116,7 +116,7 @@ Last reviewed on 2007-05-30 (0.10.5)
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp20570432"></a><h3>Element Information</h3>
+<a name="idp21214064"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -139,7 +139,7 @@ Last reviewed on 2007-05-30 (0.10.5)
</div>
<hr>
<div class="refsect2">
-<a name="idp16152368"></a><h3>Element Pads</h3>
+<a name="idp21221520"></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-videodetect.html b/docs/plugins/html/gst-plugins-bad-plugins-videodetect.html
index cd442ddd..6ed2357e 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-videodetect.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-videodetect.html
@@ -124,7 +124,7 @@ The message's structure contains these fields:
<p>
</p>
<div class="refsect2">
-<a name="idp22180608"></a><h3>Example launch line</h3>
+<a name="idp22388416"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -145,7 +145,7 @@ Last reviewed on 2007-05-30 (0.10.5)
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp22011472"></a><h3>Element Information</h3>
+<a name="idp22391520"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -168,7 +168,7 @@ Last reviewed on 2007-05-30 (0.10.5)
</div>
<hr>
<div class="refsect2">
-<a name="idp22018880"></a><h3>Element Pads</h3>
+<a name="idp22398976"></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-videomark.html b/docs/plugins/html/gst-plugins-bad-plugins-videomark.html
index 2b34d371..f5fe4886 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-videomark.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-videomark.html
@@ -77,7 +77,7 @@ mostly used together with the <a class="link" href="gst-plugins-bad-plugins-vide
<p>
</p>
<div class="refsect2">
-<a name="idp21390816"></a><h3>Example launch line</h3>
+<a name="idp21917808"></a><h3>Example launch line</h3>
<div class="informalexample">
<table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
<tbody>
@@ -98,7 +98,7 @@ Last reviewed on 2007-06-01 (0.10.6)
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp21393888"></a><h3>Element Information</h3>
+<a name="idp21920880"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -121,7 +121,7 @@ Last reviewed on 2007-06-01 (0.10.6)
</div>
<hr>
<div class="refsect2">
-<a name="idp22538704"></a><h3>Element Pads</h3>
+<a name="idp22800128"></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 f7ba2390..1fe1fae4 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="idp21751600"></a><h3>Element Information</h3>
+<a name="idp22680176"></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="idp20475712"></a><h3>Element Pads</h3>
+<a name="idp22899200"></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 6ffbdcf8..5b55feee 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="idp17914144"></a><h3>Element Information</h3>
+<a name="idp17495776"></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="idp21720256"></a><h3>Element Pads</h3>
+<a name="idp22615488"></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-vp8dec.html b/docs/plugins/html/gst-plugins-bad-plugins-vp8dec.html
index 31473f70..d7252492 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-vp8dec.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-vp8dec.html
@@ -69,7 +69,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp20899744"></a><h3>Element Information</h3>
+<a name="idp20734128"></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="idp20410064"></a><h3>Element Pads</h3>
+<a name="idp23615264"></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-vp8enc.html b/docs/plugins/html/gst-plugins-bad-plugins-vp8enc.html
index 29c49e1e..43e4dd08 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-vp8enc.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-vp8enc.html
@@ -96,7 +96,7 @@ GstVP8Enc implements
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp22900400"></a><h3>Element Information</h3>
+<a name="idp23045648"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -119,7 +119,7 @@ GstVP8Enc implements
</div>
<hr>
<div class="refsect2">
-<a name="idp22907856"></a><h3>Element Pads</h3>
+<a name="idp23053104"></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 ae6c0347..117103b3 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="idp18632496"></a><h3>Element Information</h3>
+<a name="idp19194976"></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="idp21704208"></a><h3>Element Pads</h3>
+<a name="idp22598208"></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 7553c2ab..a632555b 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="idp19259136"></a><h3>Example launch line</h3>
+<a name="idp20264176"></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="idp16783184"></a><h3>Element Information</h3>
+<a name="idp20539776"></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="idp22670816"></a><h3>Element Pads</h3>
+<a name="idp23689744"></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-wildmidi.html b/docs/plugins/html/gst-plugins-bad-plugins-wildmidi.html
index 36decd5d..df96b64c 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins-wildmidi.html
+++ b/docs/plugins/html/gst-plugins-bad-plugins-wildmidi.html
@@ -54,7 +54,7 @@
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<div class="refsect2">
-<a name="idp18431824"></a><h3>Element Information</h3>
+<a name="idp19466576"></a><h3>Element Information</h3>
<div class="variablelist"><table border="0">
<col align="left" valign="top">
<tbody>
@@ -77,7 +77,7 @@
</div>
<hr>
<div class="refsect2">
-<a name="idp16127040"></a><h3>Element Pads</h3>
+<a name="idp21415856"></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 12d0962f..548abc6c 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="idp19371104"></a><h3>Element Information</h3>
+<a name="idp17859120"></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="idp20177872"></a><h3>Element Pads</h3>
+<a name="idp22646960"></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 5d44db3e..59faae07 100644
--- a/docs/plugins/html/gst-plugins-bad-plugins.devhelp2
+++ b/docs/plugins/html/gst-plugins-bad-plugins.devhelp2
@@ -203,38 +203,38 @@
</sub>
</chapters>
<functions>
- <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-aiffparse.html#idp2839760"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-aiffparse.html#idp2837072"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-aiffparse.html#idp8518944"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-aiffparse.html#idp2432752"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-aiffparse.html#idm32416"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-aiffparse.html#idp8021392"/>
<keyword type="struct" name="struct GstAiffParse" link="gst-plugins-bad-plugins-aiffparse.html#GstAiffParse"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-aiffmux.html#idm5328"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-aiffmux.html#idp2882240"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-aiffmux.html#idp9042592"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-aiffmux.html#idp6205328"/>
<keyword type="struct" name="struct GstAiffMux" link="gst-plugins-bad-plugins-aiffmux.html#GstAiffMux"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-assrender.html#idp2829696"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-assrender.html#idp9032096"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-assrender.html#idp8424192"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-assrender.html#idp6630304"/>
<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#idp8989648"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-autoconvert.html#idp9554912"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-autoconvert.html#idp7315056"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-autoconvert.html#idp8841344"/>
<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#idp8525232"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-bulge.html#idp8434096"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-bulge.html#idp2590624"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-bulge.html#idp6640816"/>
<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#idp8106800"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-burn.html#idp9238224"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-burn.html#idp6053072"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-burn.html#idp7756416"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-burn.html#idp9017600"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-burn.html#idp5773584"/>
<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-celtdec.html#idp6823200"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-celtdec.html#idp7058896"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-celtdec.html#idp8597360"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-celtdec.html#idp9503808"/>
<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#idp5670784"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-celtenc.html#idp5678192"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-celtenc.html#idp8244960"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-celtenc.html#idp8252368"/>
<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"/>
@@ -243,59 +243,59 @@
<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#idp6233824"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-chromium.html#idp7745728"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-chromium.html#idp8349200"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-chromium.html#idp6787520"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-chromium.html#idp6219936"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-chromium.html#idp6800928"/>
<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#idp8856160"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-circle.html#idp9475024"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-circle.html#idp6333184"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-circle.html#idp10266592"/>
<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#idp5402224"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-coloreffects.html#idp8594816"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-coloreffects.html#idp5968336"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-coloreffects.html#idp8132528"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-coloreffects.html#idp7956752"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-coloreffects.html#idp9517664"/>
<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#idp10187328"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvdilate.html#idp6379600"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cvdilate.html#idp10076688"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvdilate.html#idp7368880"/>
<keyword type="struct" name="struct GstCvDilate" link="gst-plugins-bad-plugins-cvdilate.html#GstCvDilate"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cverode.html#idp10307792"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cverode.html#idp9514848"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cverode.html#idp6716272"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cverode.html#idp7974000"/>
<keyword type="struct" name="struct GstCvErode" link="gst-plugins-bad-plugins-cverode.html#GstCvErode"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cvequalizehist.html#idp7384896"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvequalizehist.html#idp6143184"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cvequalizehist.html#idp8933888"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvequalizehist.html#idp6523584"/>
<keyword type="struct" name="struct GstCvEqualizeHist" link="gst-plugins-bad-plugins-cvequalizehist.html#GstCvEqualizeHist"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cvlaplace.html#idp8492880"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvlaplace.html#idp7770336"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cvlaplace.html#idp8532496"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvlaplace.html#idp7759776"/>
<keyword type="struct" name="struct GstCvLaplace" link="gst-plugins-bad-plugins-cvlaplace.html#GstCvLaplace"/>
<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#idp2985344"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvsmooth.html#idp9014304"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cvsmooth.html#idp7339296"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvsmooth.html#idp9515440"/>
<keyword type="struct" name="struct GstCvSmooth" link="gst-plugins-bad-plugins-cvsmooth.html#GstCvSmooth"/>
<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#idp10101808"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvsobel.html#idp2988560"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-cvsobel.html#idp6124432"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-cvsobel.html#idp9485824"/>
<keyword type="struct" name="struct GstCvSobel" link="gst-plugins-bad-plugins-cvsobel.html#GstCvSobel"/>
<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#idp7313360"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dataurisrc.html#idp10104336"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dataurisrc.html#idp9922496"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-dataurisrc.html#idp7265264"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dataurisrc.html#idp5536608"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dataurisrc.html#idp5544128"/>
<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="Example pipeline" link="gst-plugins-bad-plugins-dccpclientsink.html#idp10818016"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dccpclientsink.html#idp10822640"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dccpclientsink.html#idp10830048"/>
+ <keyword type="" name="Example pipeline" link="gst-plugins-bad-plugins-dccpclientsink.html#idp10625616"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dccpclientsink.html#idp10630192"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dccpclientsink.html#idp10637600"/>
<keyword type="struct" name="struct GstDCCPClientSink" link="gst-plugins-bad-plugins-dccpclientsink.html#GstDCCPClientSink"/>
<keyword type="property" name="The &quot;ccid&quot; property" link="gst-plugins-bad-plugins-dccpclientsink.html#GstDCCPClientSink--ccid"/>
<keyword type="property" name="The &quot;close-socket&quot; property" link="gst-plugins-bad-plugins-dccpclientsink.html#GstDCCPClientSink--close-socket"/>
@@ -303,9 +303,9 @@
<keyword type="property" name="The &quot;port&quot; property" link="gst-plugins-bad-plugins-dccpclientsink.html#GstDCCPClientSink--port"/>
<keyword type="property" name="The &quot;sockfd&quot; property" link="gst-plugins-bad-plugins-dccpclientsink.html#GstDCCPClientSink--sockfd"/>
<keyword type="signal" name="The &quot;connected&quot; signal" link="gst-plugins-bad-plugins-dccpclientsink.html#GstDCCPClientSink-connected"/>
- <keyword type="" name="Example pipeline" link="gst-plugins-bad-plugins-dccpclientsrc.html#idp9953888"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dccpclientsrc.html#idp9958528"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dccpclientsrc.html#idp11044688"/>
+ <keyword type="" name="Example pipeline" link="gst-plugins-bad-plugins-dccpclientsrc.html#idp10967904"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dccpclientsrc.html#idp10972496"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dccpclientsrc.html#idp10856160"/>
<keyword type="struct" name="struct GstDCCPClientSrc" link="gst-plugins-bad-plugins-dccpclientsrc.html#GstDCCPClientSrc"/>
<keyword type="property" name="The &quot;caps&quot; property" link="gst-plugins-bad-plugins-dccpclientsrc.html#GstDCCPClientSrc--caps"/>
<keyword type="property" name="The &quot;ccid&quot; property" link="gst-plugins-bad-plugins-dccpclientsrc.html#GstDCCPClientSrc--ccid"/>
@@ -314,9 +314,9 @@
<keyword type="property" name="The &quot;port&quot; property" link="gst-plugins-bad-plugins-dccpclientsrc.html#GstDCCPClientSrc--port"/>
<keyword type="property" name="The &quot;sockfd&quot; property" link="gst-plugins-bad-plugins-dccpclientsrc.html#GstDCCPClientSrc--sockfd"/>
<keyword type="signal" name="The &quot;connected&quot; signal" link="gst-plugins-bad-plugins-dccpclientsrc.html#GstDCCPClientSrc-connected"/>
- <keyword type="" name="Example pipeline" link="gst-plugins-bad-plugins-dccpserversink.html#idp10852864"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dccpserversink.html#idp10857504"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dccpserversink.html#idp10864912"/>
+ <keyword type="" name="Example pipeline" link="gst-plugins-bad-plugins-dccpserversink.html#idp5933632"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dccpserversink.html#idp5938272"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dccpserversink.html#idp5945680"/>
<keyword type="struct" name="struct GstDCCPServerSink" link="gst-plugins-bad-plugins-dccpserversink.html#GstDCCPServerSink"/>
<keyword type="property" name="The &quot;ccid&quot; property" link="gst-plugins-bad-plugins-dccpserversink.html#GstDCCPServerSink--ccid"/>
<keyword type="property" name="The &quot;close-socket&quot; property" link="gst-plugins-bad-plugins-dccpserversink.html#GstDCCPServerSink--close-socket"/>
@@ -324,9 +324,9 @@
<keyword type="property" name="The &quot;sockfd&quot; property" link="gst-plugins-bad-plugins-dccpserversink.html#GstDCCPServerSink--sockfd"/>
<keyword type="property" name="The &quot;wait-connections&quot; property" link="gst-plugins-bad-plugins-dccpserversink.html#GstDCCPServerSink--wait-connections"/>
<keyword type="signal" name="The &quot;connected&quot; signal" link="gst-plugins-bad-plugins-dccpserversink.html#GstDCCPServerSink-connected"/>
- <keyword type="" name="Example pipeline" link="gst-plugins-bad-plugins-dccpserversrc.html#idp10323360"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dccpserversrc.html#idp10327984"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dccpserversrc.html#idp9084256"/>
+ <keyword type="" name="Example pipeline" link="gst-plugins-bad-plugins-dccpserversrc.html#idp6902352"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dccpserversrc.html#idp6906976"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dccpserversrc.html#idp10760768"/>
<keyword type="struct" name="struct GstDCCPServerSrc" link="gst-plugins-bad-plugins-dccpserversrc.html#GstDCCPServerSrc"/>
<keyword type="property" name="The &quot;caps&quot; property" link="gst-plugins-bad-plugins-dccpserversrc.html#GstDCCPServerSrc--caps"/>
<keyword type="property" name="The &quot;ccid&quot; property" link="gst-plugins-bad-plugins-dccpserversrc.html#GstDCCPServerSrc--ccid"/>
@@ -335,8 +335,8 @@
<keyword type="property" name="The &quot;port&quot; property" link="gst-plugins-bad-plugins-dccpserversrc.html#GstDCCPServerSrc--port"/>
<keyword type="property" name="The &quot;sockfd&quot; property" link="gst-plugins-bad-plugins-dccpserversrc.html#GstDCCPServerSrc--sockfd"/>
<keyword type="signal" name="The &quot;connected&quot; signal" link="gst-plugins-bad-plugins-dccpserversrc.html#GstDCCPServerSrc-connected"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dfbvideosink.html#idp8833824"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dfbvideosink.html#idp8841280"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dfbvideosink.html#idp10779952"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dfbvideosink.html#idp10787408"/>
<keyword type="struct" name="struct GstDfbVideoSink" link="gst-plugins-bad-plugins-dfbvideosink.html#GstDfbVideoSink"/>
<keyword type="property" name="The &quot;brightness&quot; property" link="gst-plugins-bad-plugins-dfbvideosink.html#GstDfbVideoSink--brightness"/>
<keyword type="property" name="The &quot;contrast&quot; property" link="gst-plugins-bad-plugins-dfbvideosink.html#GstDfbVideoSink--contrast"/>
@@ -345,38 +345,38 @@
<keyword type="property" name="The &quot;saturation&quot; property" link="gst-plugins-bad-plugins-dfbvideosink.html#GstDfbVideoSink--saturation"/>
<keyword type="property" name="The &quot;surface&quot; property" link="gst-plugins-bad-plugins-dfbvideosink.html#GstDfbVideoSink--surface"/>
<keyword type="property" name="The &quot;vsync&quot; property" link="gst-plugins-bad-plugins-dfbvideosink.html#GstDfbVideoSink--vsync"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-diffuse.html#idp6315568"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-diffuse.html#idp5484464"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-diffuse.html#idp8327520"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-diffuse.html#idp10993056"/>
<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#idp2860624"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dilate.html#idp9241504"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dilate.html#idp11010224"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-dilate.html#idp2520512"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dilate.html#idp6737488"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dilate.html#idp7798544"/>
<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="Element Information" link="gst-plugins-bad-plugins-directdrawsink.html#idp5578000"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-directdrawsink.html#idp7595952"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-directdrawsink.html#idp6837808"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-directdrawsink.html#idp8198960"/>
<keyword type="struct" name="struct GstDirectDrawSink" link="gst-plugins-bad-plugins-directdrawsink.html#GstDirectDrawSink"/>
- <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-dodge.html#idp5282976"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dodge.html#idp7389040"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dodge.html#idp7545072"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-dodge.html#idp7058192"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dodge.html#idp6875920"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dodge.html#idp11183408"/>
<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#idp7706656"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dtmfdetect.html#idp11601232"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dtmfdetect.html#idp7226832"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dtmfdetect.html#idp11636272"/>
<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#idp11224640"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dtmfsrc.html#idp11232048"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dtmfsrc.html#idp11460400"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dtmfsrc.html#idp11467808"/>
<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#idp5376000"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dtsdec.html#idp11099120"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dtsdec.html#idp6510528"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dtsdec.html#idp7058944"/>
<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#idp11415376"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dvbsrc.html#idp11422896"/>
- <keyword type="struct" name="GstDvbSrc" link="gst-plugins-bad-plugins-dvbsrc.html#GstDvbSrc"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dvbsrc.html#idp12196064"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dvbsrc.html#idp12203584"/>
+ <keyword type="struct" name="struct GstDvbSrc" link="gst-plugins-bad-plugins-dvbsrc.html#GstDvbSrc"/>
<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"/>
<keyword type="property" name="The &quot;code-rate-lp&quot; property" link="gst-plugins-bad-plugins-dvbsrc.html#GstDvbSrc--code-rate-lp"/>
@@ -400,20 +400,20 @@
<keyword type="property" name="The &quot;symbol-rate&quot; property" link="gst-plugins-bad-plugins-dvbsrc.html#GstDvbSrc--symbol-rate"/>
<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="" name="Example launch line" link="gst-plugins-bad-plugins-dvdspu.html#idp11809936"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dvdspu.html#idp11807760"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dvdspu.html#idp10147840"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-dvdspu.html#idp12001248"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-dvdspu.html#idp11999072"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-dvdspu.html#idp8128208"/>
<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#idp9396624"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-exclusion.html#idp8932464"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-exclusion.html#idp11280224"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-exclusion.html#idp8309072"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-exclusion.html#idp5371744"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-exclusion.html#idp11347856"/>
<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#idp10940736"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-edgedetect.html#idp6591344"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-faac.html#idp11501600"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-faac.html#idp11509008"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-edgedetect.html#idp11550640"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-edgedetect.html#idp6416064"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-faac.html#idp11324736"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-faac.html#idp11920336"/>
<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"/>
@@ -423,23 +423,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#idp9439936"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-faad.html#idp8424256"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-faad.html#idp8788672"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-faad.html#idp5451968"/>
<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#idp12116352"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-faceblur.html#idp5590592"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-facedetect.html#idp11520160"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-facedetect.html#idp5610512"/>
- <keyword type="" name="Example pipeline" link="gst-plugins-bad-plugins-festival.html#idp7376432"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-festival.html#idp6240512"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-festival.html#idp8800384"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-faceblur.html#idp10377776"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-faceblur.html#idp8951616"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-facedetect.html#idp11439888"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-facedetect.html#idp10798496"/>
+ <keyword type="" name="Example pipeline" link="gst-plugins-bad-plugins-festival.html#idp11762160"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-festival.html#idp5971472"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-festival.html#idp6743744"/>
<keyword type="struct" name="struct GstFestival" link="gst-plugins-bad-plugins-festival.html#GstFestival"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-fisheye.html#idp8362800"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-fisheye.html#idm17504"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-fisheye.html#idp6122960"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-fisheye.html#idp9559136"/>
<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#idp12498544"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-fpsdisplaysink.html#idp12501520"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-fpsdisplaysink.html#idp12508928"/>
+ <keyword type="" name="Example launch lines" link="gst-plugins-bad-plugins-fpsdisplaysink.html#idp11756224"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-fpsdisplaysink.html#idp11883216"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-fpsdisplaysink.html#idp11890624"/>
<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"/>
@@ -453,20 +453,20 @@
<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-freeze.html#idp5907696"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-freeze.html#idp6909424"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-freeze.html#idp9991056"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-freeze.html#idp12368304"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-freeze.html#idp6890656"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-freeze.html#idp7718512"/>
<keyword type="struct" name="struct GstFreeze" link="gst-plugins-bad-plugins-freeze.html#GstFreeze"/>
<keyword type="property" name="The &quot;max-buffers&quot; property" link="gst-plugins-bad-plugins-freeze.html#GstFreeze--max-buffers"/>
- <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-gaussianblur.html#idp12024128"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-gaussianblur.html#idp9259088"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-gaussianblur.html#idp6607072"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-ivfparse.html#idp11952912"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-ivfparse.html#idp9189616"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-gaussianblur.html#idp12360176"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-gaussianblur.html#idp11874592"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-gaussianblur.html#idp6926800"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-ivfparse.html#idp12110704"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-ivfparse.html#idp6673296"/>
<keyword type="struct" name="struct GstIvfParse" link="gst-plugins-bad-plugins-ivfparse.html#GstIvfParse"/>
- <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-jpegparse.html#idp3034448"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-jpegparse.html#idp10792880"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-jpegparse.html#idp10706864"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-jpegparse.html#idp7839088"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-jpegparse.html#idp5664464"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-jpegparse.html#idp11569792"/>
<keyword type="struct" name="struct GstJpegParse" link="gst-plugins-bad-plugins-jpegparse.html#GstJpegParse"/>
<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"/>
@@ -475,14 +475,14 @@
<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#idp5801264"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-kaleidoscope.html#idp12348688"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-kaleidoscope.html#idp6192944"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-kaleidoscope.html#idp12611152"/>
<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-kateenc.html#idp10902416"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-kateenc.html#idp12073872"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-kateenc.html#idp7453376"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-kateenc.html#idp12536720"/>
<keyword type="struct" name="struct GstKateEnc" link="gst-plugins-bad-plugins-kateenc.html#GstKateEnc"/>
<keyword type="property" name="The &quot;category&quot; property" link="gst-plugins-bad-plugins-kateenc.html#GstKateEnc--category"/>
<keyword type="property" name="The &quot;default-spu-duration&quot; property" link="gst-plugins-bad-plugins-kateenc.html#GstKateEnc--default-spu-duration"/>
@@ -493,49 +493,49 @@
<keyword type="property" name="The &quot;language&quot; property" link="gst-plugins-bad-plugins-kateenc.html#GstKateEnc--language"/>
<keyword type="property" name="The &quot;original-canvas-height&quot; property" link="gst-plugins-bad-plugins-kateenc.html#GstKateEnc--original-canvas-height"/>
<keyword type="property" name="The &quot;original-canvas-width&quot; property" link="gst-plugins-bad-plugins-kateenc.html#GstKateEnc--original-canvas-width"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-katedec.html#idp5802928"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-katedec.html#idp8247488"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-katedec.html#idp7525552"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-katedec.html#idp8065040"/>
<keyword type="struct" name="struct GstKateDec" link="gst-plugins-bad-plugins-katedec.html#GstKateDec"/>
<keyword type="property" name="The &quot;category&quot; property" link="gst-plugins-bad-plugins-katedec.html#GstKateDec--category"/>
<keyword type="property" name="The &quot;language&quot; property" link="gst-plugins-bad-plugins-katedec.html#GstKateDec--language"/>
<keyword type="property" name="The &quot;original-canvas-height&quot; property" link="gst-plugins-bad-plugins-katedec.html#GstKateDec--original-canvas-height"/>
<keyword type="property" name="The &quot;original-canvas-width&quot; property" link="gst-plugins-bad-plugins-katedec.html#GstKateDec--original-canvas-width"/>
<keyword type="property" name="The &quot;remove-markup&quot; property" link="gst-plugins-bad-plugins-katedec.html#GstKateDec--remove-markup"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-kateparse.html#idp13189408"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-kateparse.html#idp11775552"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-kateparse.html#idp13210048"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-kateparse.html#idp7734608"/>
<keyword type="struct" name="struct GstKateParse" link="gst-plugins-bad-plugins-kateparse.html#GstKateParse"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-katetag.html#idp7110000"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-katetag.html#idp9817712"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-katetag.html#idp10661680"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-katetag.html#idp11385696"/>
<keyword type="struct" name="struct GstKateTag" link="gst-plugins-bad-plugins-katetag.html#GstKateTag"/>
<keyword type="property" name="The &quot;category&quot; property" link="gst-plugins-bad-plugins-katetag.html#GstKateTag--category"/>
<keyword type="property" name="The &quot;language&quot; property" link="gst-plugins-bad-plugins-katetag.html#GstKateTag--language"/>
<keyword type="property" name="The &quot;original-canvas-height&quot; property" link="gst-plugins-bad-plugins-katetag.html#GstKateTag--original-canvas-height"/>
<keyword type="property" name="The &quot;original-canvas-width&quot; property" link="gst-plugins-bad-plugins-katetag.html#GstKateTag--original-canvas-width"/>
<keyword type="struct" name="struct GstLADSPA" link="gst-plugins-bad-plugins-ladspa.html#GstLADSPA"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-liveadder.html#idp12826656"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-liveadder.html#idp9026016"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-liveadder.html#idp11071952"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-liveadder.html#idp8160752"/>
<keyword type="struct" name="struct GstLiveAdder" link="gst-plugins-bad-plugins-liveadder.html#GstLiveAdder"/>
<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#idp7617392"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-marble.html#idp12058384"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-marble.html#idp5270400"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-marble.html#idp9286000"/>
<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#idp13195040"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mimenc.html#idp8042176"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mimenc.html#idp13176608"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mimenc.html#idp11618608"/>
<keyword type="struct" name="struct GstMimEnc" link="gst-plugins-bad-plugins-mimenc.html#GstMimEnc"/>
<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#idp13106560"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mimdec.html#idp9528928"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mimdec.html#idp13148992"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mimdec.html#idp6263552"/>
<keyword type="struct" name="struct GstMimDec" link="gst-plugins-bad-plugins-mimdec.html#GstMimDec"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mirror.html#idp8393712"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mirror.html#idp13036976"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mirror.html#idp9326800"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mirror.html#idp13320112"/>
<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#idp13248064"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-modplug.html#idp13636368"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-modplug.html#idp13071536"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-modplug.html#idp13078992"/>
<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"/>
@@ -549,8 +549,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#idp13547984"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mpeg2enc.html#idp13555392"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mpeg2enc.html#idp14314960"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mpeg2enc.html#idp14322368"/>
<keyword type="struct" name="GstMpeg2enc" link="gst-plugins-bad-plugins-mpeg2enc.html#GstMpeg2enc"/>
<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"/>
@@ -586,8 +586,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#idp12900480"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mplex.html#idp6275440"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mplex.html#idp13167136"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mplex.html#idp6517568"/>
<keyword type="struct" name="GstMplex" link="gst-plugins-bad-plugins-mplex.html#GstMplex"/>
<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"/>
@@ -596,8 +596,8 @@
<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="Element Information" link="gst-plugins-bad-plugins-mythtvsrc.html#idp13365808"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mythtvsrc.html#idp13373216"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mythtvsrc.html#idp13391504"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mythtvsrc.html#idp13398912"/>
<keyword type="struct" name="struct GstMythtvSrc" link="gst-plugins-bad-plugins-mythtvsrc.html#GstMythtvSrc"/>
<keyword type="property" name="The &quot;location&quot; property" link="gst-plugins-bad-plugins-mythtvsrc.html#GstMythtvSrc--location"/>
<keyword type="property" name="The &quot;mythtv-channel&quot; property" link="gst-plugins-bad-plugins-mythtvsrc.html#GstMythtvSrc--mythtv-channel"/>
@@ -606,24 +606,24 @@
<keyword type="property" name="The &quot;mythtv-live-chainid&quot; property" link="gst-plugins-bad-plugins-mythtvsrc.html#GstMythtvSrc--mythtv-live-chainid"/>
<keyword type="property" name="The &quot;mythtv-live-id&quot; property" link="gst-plugins-bad-plugins-mythtvsrc.html#GstMythtvSrc--mythtv-live-id"/>
<keyword type="property" name="The &quot;mythtv-version&quot; property" link="gst-plugins-bad-plugins-mythtvsrc.html#GstMythtvSrc--mythtv-version"/>
- <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-mxfdemux.html#idp8561696"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mxfdemux.html#idp9156400"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mxfdemux.html#idp13501376"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-mxfdemux.html#idp10383872"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mxfdemux.html#idp5962464"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mxfdemux.html#idp13024752"/>
<keyword type="struct" name="struct GstMXFDemux" link="gst-plugins-bad-plugins-mxfdemux.html#GstMXFDemux"/>
<keyword type="property" name="The &quot;package&quot; property" link="gst-plugins-bad-plugins-mxfdemux.html#GstMXFDemux--package"/>
<keyword type="property" name="The &quot;max-drift&quot; property" link="gst-plugins-bad-plugins-mxfdemux.html#GstMXFDemux--max-drift"/>
<keyword type="property" name="The &quot;structure&quot; property" link="gst-plugins-bad-plugins-mxfdemux.html#GstMXFDemux--structure"/>
- <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-mxfmux.html#idp14255584"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mxfmux.html#idp14253088"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mxfmux.html#idp14247008"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-mxfmux.html#idp13934992"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-mxfmux.html#idp13932496"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-mxfmux.html#idp13926416"/>
<keyword type="struct" name="GstMXFMux" link="gst-plugins-bad-plugins-mxfmux.html#GstMXFMux"/>
- <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-nuvdemux.html#idp13944096"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-nuvdemux.html#idp13431056"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-nuvdemux.html#idp13925568"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-nuvdemux.html#idp13505664"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-nuvdemux.html#idp13504256"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-nuvdemux.html#idp13368928"/>
<keyword type="struct" name="GstNuvDemux" link="gst-plugins-bad-plugins-nuvdemux.html#GstNuvDemux"/>
- <keyword type="" name="Example pipelines" link="gst-plugins-bad-plugins-pcapparse.html#idp13930912"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-pcapparse.html#idp13933744"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-pcapparse.html#idp13941152"/>
+ <keyword type="" name="Example pipelines" link="gst-plugins-bad-plugins-pcapparse.html#idp13480208"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-pcapparse.html#idp13483040"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-pcapparse.html#idp13490448"/>
<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"/>
@@ -631,18 +631,18 @@
<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#idp6354624"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-pinch.html#idp13398464"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-pinch.html#idp10290272"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-pinch.html#idp13377856"/>
<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#idp14000208"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-pyramidsegment.html#idp3027664"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-pyramidsegment.html#idp14497280"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-pyramidsegment.html#idp11587360"/>
<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-rsvgdec.html#idp14111776"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rsvgdec.html#idp6327280"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rsvgdec.html#idp14165152"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rsvgdec.html#idp9167136"/>
<keyword type="struct" name="struct GstRsvgDec" link="gst-plugins-bad-plugins-rsvgdec.html#GstRsvgDec"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rsvgoverlay.html#idp8873504"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rsvgoverlay.html#idp6531632"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rsvgoverlay.html#idp11018832"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rsvgoverlay.html#idp6380368"/>
<keyword type="struct" name="struct GstRsvgOverlay" link="gst-plugins-bad-plugins-rsvgoverlay.html#GstRsvgOverlay"/>
<keyword type="property" name="The &quot;data&quot; property" link="gst-plugins-bad-plugins-rsvgoverlay.html#GstRsvgOverlay--data"/>
<keyword type="property" name="The &quot;fit-to-frame&quot; property" link="gst-plugins-bad-plugins-rsvgoverlay.html#GstRsvgOverlay--fit-to-frame"/>
@@ -655,24 +655,24 @@
<keyword type="property" name="The &quot;width-relative&quot; property" link="gst-plugins-bad-plugins-rsvgoverlay.html#GstRsvgOverlay--width-relative"/>
<keyword type="property" name="The &quot;x-relative&quot; property" link="gst-plugins-bad-plugins-rsvgoverlay.html#GstRsvgOverlay--x-relative"/>
<keyword type="property" name="The &quot;y-relative&quot; property" link="gst-plugins-bad-plugins-rsvgoverlay.html#GstRsvgOverlay--y-relative"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtmpsink.html#idp14357424"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtmpsink.html#idp14850736"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtmpsink.html#idp14453392"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtmpsink.html#idp14460848"/>
<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#idp14543488"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtmpsrc.html#idp14550896"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtmpsrc.html#idp14546816"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtmpsrc.html#idp14430464"/>
<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#idp8663952"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtpmux.html#idp14575824"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtpmux.html#idp14583280"/>
+ <keyword type="" name="Example pipelines" link="gst-plugins-bad-plugins-rtpmux.html#idp12974912"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtpmux.html#idp14584768"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtpmux.html#idp13647824"/>
<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#idp17022976"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtpdtmfsrc.html#idp17030432"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtpdtmfsrc.html#idp18567184"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtpdtmfsrc.html#idp18574640"/>
<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"/>
@@ -683,36 +683,36 @@
<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#idp16782432"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtpdtmfmux.html#idp17006352"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtpdtmfmux.html#idp19986432"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtpdtmfmux.html#idp20333312"/>
<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#idp17746640"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtpmux.html#idp17643120"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtpmux.html#idp19813008"/>
+ <keyword type="" name="Example pipelines" link="gst-plugins-bad-plugins-rtpmux.html#idp15136368"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-rtpmux.html#idp19059856"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-rtpmux.html#idp19213504"/>
<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#idp16573952"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-scaletempo.html#idp15832672"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-scaletempo.html#idp15840080"/>
+ <keyword type="" name="Example pipelines" link="gst-plugins-bad-plugins-scaletempo.html#idp17244576"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-scaletempo.html#idp19163024"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-scaletempo.html#idp16286400"/>
<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-sdlaudiosink.html#idp18902496"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-sdlaudiosink.html#idp15272912"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-sdlaudiosink.html#idp20014976"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-sdlaudiosink.html#idp18412368"/>
<keyword type="struct" name="struct GstSDLAudioSink" link="gst-plugins-bad-plugins-sdlaudiosink.html#GstSDLAudioSink"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-sdlvideosink.html#idp17401024"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-sdlvideosink.html#idp16920944"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-sdlvideosink.html#idp17693504"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-sdlvideosink.html#idp20086528"/>
<keyword type="struct" name="struct GstSDLVideoSink" link="gst-plugins-bad-plugins-sdlvideosink.html#GstSDLVideoSink"/>
<keyword type="property" name="The &quot;fullscreen&quot; property" link="gst-plugins-bad-plugins-sdlvideosink.html#GstSDLVideoSink--fullscreen"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-shmsink.html#idp16542432"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-shmsink.html#idp20338208"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-shmsink.html#idp19782064"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-shmsink.html#idp20860160"/>
<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"/>
@@ -721,74 +721,74 @@
<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#idp20282800"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-shmsrc.html#idp19500304"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-shmsrc.html#idp14969568"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-shmsrc.html#idp19375552"/>
<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#idp17196560"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-sdpdemux.html#idp17199760"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-sdpdemux.html#idp17207232"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-sdpdemux.html#idp18513248"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-sdpdemux.html#idp18516496"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-sdpdemux.html#idp18523968"/>
<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#idp20323408"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-solarize.html#idp19459616"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-solarize.html#idp19467024"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-solarize.html#idp20119248"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-solarize.html#idp20029840"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-solarize.html#idp20037248"/>
<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#idp18613216"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-spacescope.html#idp19068512"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-spacescope.html#idp19699456"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-spacescope.html#idp20579712"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-spacescope.html#idp19484896"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-spacescope.html#idp17904576"/>
<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#idp15225088"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-spectrascope.html#idp18868880"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-spectrascope.html#idp17506816"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-spectrascope.html#idp20202256"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-spectrascope.html#idp18414112"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-spectrascope.html#idp16050688"/>
<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#idp18850720"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-synaescope.html#idp17287248"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-synaescope.html#idp20813440"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-synaescope.html#idp17350272"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-synaescope.html#idp16443200"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-synaescope.html#idp19044320"/>
<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#idp19002560"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-speed.html#idp19000640"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-speed.html#idp15359088"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-speed.html#idp17674992"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-speed.html#idp14709536"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-speed.html#idp18356464"/>
<keyword type="struct" name="struct GstSpeed" link="gst-plugins-bad-plugins-speed.html#GstSpeed"/>
<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#idp19928336"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-sphere.html#idp20761296"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-sphere.html#idp17483584"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-sphere.html#idp21675968"/>
<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#idp19553440"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-square.html#idp20820448"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-square.html#idp20583616"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-square.html#idp16246720"/>
<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="Example pipelines" link="gst-plugins-bad-plugins-stereo.html#idp19235648"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-stereo.html#idp19150016"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-stereo.html#idp17320912"/>
+ <keyword type="" name="Example pipelines" link="gst-plugins-bad-plugins-stereo.html#idp17825968"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-stereo.html#idp20328512"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-stereo.html#idp18363104"/>
<keyword type="struct" name="struct GstStereo" link="gst-plugins-bad-plugins-stereo.html#GstStereo"/>
<keyword type="property" name="The &quot;active&quot; property" link="gst-plugins-bad-plugins-stereo.html#GstStereo--active"/>
<keyword type="property" name="The &quot;stereo&quot; property" link="gst-plugins-bad-plugins-stereo.html#GstStereo--stereo"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-stretch.html#idp18019696"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-stretch.html#idp18043264"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-stretch.html#idp16205664"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-stretch.html#idp18135264"/>
<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#idp20961872"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-templatematch.html#idp19181872"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-templatematch.html#idp17433488"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-templatematch.html#idp18146544"/>
<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#idp15722560"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-opencvtextoverlay.html#idp21229872"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-opencvtextoverlay.html#idp18968192"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-opencvtextoverlay.html#idp21384832"/>
<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"/>
@@ -800,8 +800,8 @@
<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-tiger.html#idp19151600"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-tiger.html#idp15228016"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-tiger.html#idp21291760"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-tiger.html#idp20096864"/>
<keyword type="struct" name="struct GstKateTiger" link="gst-plugins-bad-plugins-tiger.html#GstKateTiger"/>
<keyword type="property" name="The &quot;category&quot; property" link="gst-plugins-bad-plugins-tiger.html#GstKateTiger--category"/>
<keyword type="property" name="The &quot;default-background-alpha&quot; property" link="gst-plugins-bad-plugins-tiger.html#GstKateTiger--default-background-alpha"/>
@@ -819,29 +819,29 @@
<keyword type="property" name="The &quot;original-canvas-height&quot; property" link="gst-plugins-bad-plugins-tiger.html#GstKateTiger--original-canvas-height"/>
<keyword type="property" name="The &quot;original-canvas-width&quot; property" link="gst-plugins-bad-plugins-tiger.html#GstKateTiger--original-canvas-width"/>
<keyword type="property" name="The &quot;quality&quot; property" link="gst-plugins-bad-plugins-tiger.html#GstKateTiger--quality"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-timidity.html#idp21215776"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-timidity.html#idp18857904"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-timidity.html#idp18287296"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-timidity.html#idp18236592"/>
<keyword type="struct" name="struct GstTimidity" link="gst-plugins-bad-plugins-timidity.html#GstTimidity"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-trm.html#idp18425328"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-trm.html#idp16439904"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-trm.html#idp19347856"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-trm.html#idp18385808"/>
<keyword type="struct" name="struct GstTRM" link="gst-plugins-bad-plugins-trm.html#GstTRM"/>
<keyword type="property" name="The &quot;proxy-address&quot; property" link="gst-plugins-bad-plugins-trm.html#GstTRM--proxy-address"/>
<keyword type="property" name="The &quot;proxy-port&quot; property" link="gst-plugins-bad-plugins-trm.html#GstTRM--proxy-port"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-tunnel.html#idp21208752"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-tunnel.html#idp18154848"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-tunnel.html#idp19316176"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-tunnel.html#idp20573392"/>
<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#idp16665216"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-twirl.html#idp21429408"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-twirl.html#idp15063328"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-twirl.html#idp15161392"/>
<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="Example launch line" link="gst-plugins-bad-plugins-videoanalyse.html#idp18809280"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-videoanalyse.html#idp20570432"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-videoanalyse.html#idp16152368"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-videoanalyse.html#idp21210992"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-videoanalyse.html#idp21214064"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-videoanalyse.html#idp21221520"/>
<keyword type="struct" name="struct GstVideoAnalyse" link="gst-plugins-bad-plugins-videoanalyse.html#GstVideoAnalyse"/>
<keyword type="property" name="The &quot;message&quot; property" link="gst-plugins-bad-plugins-videoanalyse.html#GstVideoAnalyse--message"/>
- <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-videodetect.html#idp22180608"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-videodetect.html#idp22011472"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-videodetect.html#idp22018880"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-videodetect.html#idp22388416"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-videodetect.html#idp22391520"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-videodetect.html#idp22398976"/>
<keyword type="struct" name="struct GstVideoDetect" link="gst-plugins-bad-plugins-videodetect.html#GstVideoDetect"/>
<keyword type="property" name="The &quot;message&quot; property" link="gst-plugins-bad-plugins-videodetect.html#GstVideoDetect--message"/>
<keyword type="property" name="The &quot;pattern-count&quot; property" link="gst-plugins-bad-plugins-videodetect.html#GstVideoDetect--pattern-count"/>
@@ -852,9 +852,9 @@
<keyword type="property" name="The &quot;bottom-offset&quot; property" link="gst-plugins-bad-plugins-videodetect.html#GstVideoDetect--bottom-offset"/>
<keyword type="property" name="The &quot;left-offset&quot; property" link="gst-plugins-bad-plugins-videodetect.html#GstVideoDetect--left-offset"/>
<keyword type="property" name="The &quot;pattern-center&quot; property" link="gst-plugins-bad-plugins-videodetect.html#GstVideoDetect--pattern-center"/>
- <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-videomark.html#idp21390816"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-videomark.html#idp21393888"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-videomark.html#idp22538704"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-videomark.html#idp21917808"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-videomark.html#idp21920880"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-videomark.html#idp22800128"/>
<keyword type="struct" name="struct GstVideoMark" link="gst-plugins-bad-plugins-videomark.html#GstVideoMark"/>
<keyword type="property" name="The &quot;enabled&quot; property" link="gst-plugins-bad-plugins-videomark.html#GstVideoMark--enabled"/>
<keyword type="property" name="The &quot;pattern-count&quot; property" link="gst-plugins-bad-plugins-videomark.html#GstVideoMark--pattern-count"/>
@@ -865,8 +865,8 @@
<keyword type="property" name="The &quot;bottom-offset&quot; property" link="gst-plugins-bad-plugins-videomark.html#GstVideoMark--bottom-offset"/>
<keyword type="property" name="The &quot;left-offset&quot; property" link="gst-plugins-bad-plugins-videomark.html#GstVideoMark--left-offset"/>
<keyword type="property" name="The &quot;pattern-data-uint64&quot; property" link="gst-plugins-bad-plugins-videomark.html#GstVideoMark--pattern-data-uint64"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-videoparse.html#idp21751600"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-videoparse.html#idp20475712"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-videoparse.html#idp22680176"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-videoparse.html#idp22899200"/>
<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"/>
@@ -882,35 +882,35 @@
<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#idp18632496"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-waterripple.html#idp21704208"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-waterripple.html#idp19194976"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-waterripple.html#idp22598208"/>
<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-wildmidi.html#idp18431824"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-wildmidi.html#idp16127040"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-wildmidi.html#idp19466576"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-wildmidi.html#idp21415856"/>
<keyword type="struct" name="struct GstWildmidi" link="gst-plugins-bad-plugins-wildmidi.html#GstWildmidi"/>
<keyword type="property" name="The &quot;high-quality&quot; property" link="gst-plugins-bad-plugins-wildmidi.html#GstWildmidi--high-quality"/>
<keyword type="property" name="The &quot;linear-volume&quot; property" link="gst-plugins-bad-plugins-wildmidi.html#GstWildmidi--linear-volume"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-zbar.html#idp19371104"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-zbar.html#idp20177872"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-zbar.html#idp17859120"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-zbar.html#idp22646960"/>
<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#idp17914144"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-voaacenc.html#idp21720256"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-voaacenc.html#idp17495776"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-voaacenc.html#idp22615488"/>
<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-vp8dec.html#idp20899744"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-vp8dec.html#idp20410064"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-vp8dec.html#idp20734128"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-vp8dec.html#idp23615264"/>
<keyword type="struct" name="struct GstVP8Dec" link="gst-plugins-bad-plugins-vp8dec.html#GstVP8Dec-struct"/>
<keyword type="property" name="The &quot;deblocking-level&quot; property" link="gst-plugins-bad-plugins-vp8dec.html#GstVP8Dec--deblocking-level"/>
<keyword type="property" name="The &quot;noise-level&quot; property" link="gst-plugins-bad-plugins-vp8dec.html#GstVP8Dec--noise-level"/>
<keyword type="property" name="The &quot;post-processing&quot; property" link="gst-plugins-bad-plugins-vp8dec.html#GstVP8Dec--post-processing"/>
<keyword type="property" name="The &quot;post-processing-flags&quot; property" link="gst-plugins-bad-plugins-vp8dec.html#GstVP8Dec--post-processing-flags"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-vp8enc.html#idp22900400"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-vp8enc.html#idp22907856"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-vp8enc.html#idp23045648"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-vp8enc.html#idp23053104"/>
<keyword type="struct" name="struct GstVP8Enc" link="gst-plugins-bad-plugins-vp8enc.html#GstVP8Enc-struct"/>
<keyword type="property" name="The &quot;bitrate&quot; property" link="gst-plugins-bad-plugins-vp8enc.html#GstVP8Enc--bitrate"/>
<keyword type="property" name="The &quot;error-resilient&quot; property" link="gst-plugins-bad-plugins-vp8enc.html#GstVP8Enc--error-resilient"/>
@@ -935,9 +935,9 @@
<keyword type="property" name="The &quot;static-threshold&quot; property" link="gst-plugins-bad-plugins-vp8enc.html#GstVP8Enc--static-threshold"/>
<keyword type="property" name="The &quot;token-parts&quot; property" link="gst-plugins-bad-plugins-vp8enc.html#GstVP8Enc--token-parts"/>
<keyword type="property" name="The &quot;tune&quot; property" link="gst-plugins-bad-plugins-vp8enc.html#GstVP8Enc--tune"/>
- <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-wavescope.html#idp19259136"/>
- <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-wavescope.html#idp16783184"/>
- <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-wavescope.html#idp22670816"/>
+ <keyword type="" name="Example launch line" link="gst-plugins-bad-plugins-wavescope.html#idp20264176"/>
+ <keyword type="" name="Element Information" link="gst-plugins-bad-plugins-wavescope.html#idp20539776"/>
+ <keyword type="" name="Element Pads" link="gst-plugins-bad-plugins-wavescope.html#idp23689744"/>
<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 58b8ce30..6c1177ca 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 (0.11.93)
+ for GStreamer Bad Plugins 1.0 (0.11.94)
The latest version of this documentation can be found on-line at
<a class="ulink" href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/" target="_top">http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad/html/</a>.
</p></div>
diff --git a/docs/plugins/inspect/plugin-adpcmdec.xml b/docs/plugins/inspect/plugin-adpcmdec.xml
index aa3900b6..f9c22048 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>0.11.92</version>
+ <version>0.11.94</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 531c5660..15c328d7 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>0.11.92</version>
+ <version>0.11.94</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 6299c568..fabcc2a2 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>0.11.92</version>
+ <version>0.11.94</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 a8cd6d8f..4c7e24b9 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>0.11.92</version>
+ <version>0.11.94</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 9d981085..3a5b8bd5 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>0.11.92</version>
+ <version>0.11.94</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 9c45b6f3..768f160c 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>0.11.92</version>
+ <version>0.11.94</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 fa4ba035..cee0893f 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>0.11.92</version>
+ <version>0.11.94</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 e0487470..9387aba8 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>0.11.92</version>
+ <version>0.11.94</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
new file mode 100644
index 00000000..8ea7451b
--- /dev/null
+++ b/docs/plugins/inspect/plugin-camerabin.xml
@@ -0,0 +1,64 @@
+<plugin>
+ <name>camerabin</name>
+ <description>Take image snapshots and record movies from camera</description>
+ <filename>../../gst/camerabin2/.libs/libgstcamerabin2.so</filename>
+ <basename>libgstcamerabin2.so</basename>
+ <version>0.11.94</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>camerabin</name>
+ <longname>Camera Bin</longname>
+ <class>Generic/Bin/Camera</class>
+ <description>Take image snapshots and record movies from camera</description>
+ <author>Thiago Santos &lt;thiago.sousa.santos@collabora.co.uk&gt;</author>
+ <pads>
+ </pads>
+ </element>
+ <element>
+ <name>viewfinderbin</name>
+ <longname>Viewfinder Bin</longname>
+ <class>Sink/Video</class>
+ <description>Viewfinder Bin used in camerabin2</description>
+ <author>Thiago Santos &lt;thiago.sousa.santos@collabora.com&gt;</author>
+ <pads>
+ <caps>
+ <name>sink</name>
+ <direction>sink</direction>
+ <presence>always</presence>
+ <details>video/x-raw</details>
+ </caps>
+ </pads>
+ </element>
+ <element>
+ <name>wrappercamerabinsrc</name>
+ <longname>Wrapper camera src element for camerabin2</longname>
+ <class>Source/Video</class>
+ <description>Wrapper camera src element for camerabin2</description>
+ <author>Thiago Santos &lt;thiago.sousa.santos@collabora.com&gt;</author>
+ <pads>
+ <caps>
+ <name>imgsrc</name>
+ <direction>source</direction>
+ <presence>always</presence>
+ <details>ANY</details>
+ </caps>
+ <caps>
+ <name>vfsrc</name>
+ <direction>source</direction>
+ <presence>always</presence>
+ <details>ANY</details>
+ </caps>
+ <caps>
+ <name>vidsrc</name>
+ <direction>source</direction>
+ <presence>always</presence>
+ <details>ANY</details>
+ </caps>
+ </pads>
+ </element>
+ </elements>
+</plugin> \ No newline at end of file
diff --git a/docs/plugins/inspect/plugin-celt.xml b/docs/plugins/inspect/plugin-celt.xml
index 96dec0e0..6b55a459 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>0.11.92</version>
+ <version>0.11.94</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 0e88b0a0..25f93d15 100644
--- a/docs/plugins/inspect/plugin-chromaprint.xml
+++ b/docs/plugins/inspect/plugin-chromaprint.xml
@@ -3,10 +3,10 @@
<description>Calculate Chromaprint fingerprint from audio files</description>
<filename>../../ext/chromaprint/.libs/libgstchromaprint.so</filename>
<basename>libgstchromaprint.so</basename>
- <version>0.10.23.1</version>
+ <version>0.11.94</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
- <package>GStreamer Bad Plug-ins git</package>
+ <package>GStreamer Bad Plug-ins source release</package>
<origin>Unknown package origin</origin>
<elements>
<element>
@@ -20,13 +20,13 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2 ], endianness=(int){ 1234 }, width=(int){ 16 }, depth=(int){ 16 }, signed=(boolean)true</details>
+ <details>audio/x-raw, format=(string)S16LE, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2 ]</details>
</caps>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
- <details>audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2 ], endianness=(int){ 1234 }, width=(int){ 16 }, depth=(int){ 16 }, signed=(boolean)true</details>
+ <details>audio/x-raw, format=(string)S16LE, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2 ]</details>
</caps>
</pads>
</element>
diff --git a/docs/plugins/inspect/plugin-coloreffects.xml b/docs/plugins/inspect/plugin-coloreffects.xml
index 949ec77e..d1ac3bae 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>0.11.92</version>
+ <version>0.11.94</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 e96f9732..c943ad65 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>0.11.92</version>
+ <version>0.11.94</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 f567eca5..bdc107e4 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>0.11.92</version>
+ <version>0.11.94</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 b89a09ec..5ebad757 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>0.11.92</version>
+ <version>0.11.94</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 827872b0..e2d486ab 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>0.11.92</version>
+ <version>0.11.94</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 0f16f824..dd65e7f4 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>0.11.92</version>
+ <version>0.11.94</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 42788ff0..55efe58b 100644
--- a/docs/plugins/inspect/plugin-dvb.xml
+++ b/docs/plugins/inspect/plugin-dvb.xml
@@ -3,10 +3,10 @@
<description>DVB elements</description>
<filename>../../sys/dvb/.libs/libgstdvb.so</filename>
<basename>libgstdvb.so</basename>
- <version>0.10.23.1</version>
+ <version>0.11.94</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
- <package>GStreamer Bad Plug-ins git</package>
+ <package>GStreamer Bad Plug-ins source release</package>
<origin>Unknown package origin</origin>
<elements>
<element>
@@ -17,13 +17,13 @@
<author>Alessandro Decina &lt;alessandro@nnva.org&gt;</author>
<pads>
<caps>
- <name>program_%d</name>
+ <name>src</name>
<direction>source</direction>
- <presence>sometimes</presence>
+ <presence>always</presence>
<details>video/mpegts, systemstream=(boolean)true</details>
</caps>
<caps>
- <name>src%d</name>
+ <name>program_%u</name>
<direction>source</direction>
<presence>request</presence>
<details>video/mpegts, systemstream=(boolean)true</details>
diff --git a/docs/plugins/inspect/plugin-dvbsuboverlay.xml b/docs/plugins/inspect/plugin-dvbsuboverlay.xml
index 6ffb0af7..4b4f25d0 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>0.11.92</version>
+ <version>0.11.94</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 27f47ea0..6ebfb6ac 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>0.11.92</version>
+ <version>0.11.94</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
@@ -20,7 +20,7 @@
<name>subpicture</name>
<direction>sink</direction>
<presence>always</presence>
- <details>video/x-dvd-subpicture; subpicture/x-pgs</details>
+ <details>subpicture/x-dvd; subpicture/x-pgs</details>
</caps>
<caps>
<name>video</name>
diff --git a/docs/plugins/inspect/plugin-faac.xml b/docs/plugins/inspect/plugin-faac.xml
index 771b3728..91f0d5ac 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>0.11.92</version>
+ <version>0.11.94</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 92bf97de..3b6f61f4 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>0.11.92</version>
+ <version>0.11.94</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 d3d21ffd..59b75434 100644
--- a/docs/plugins/inspect/plugin-festival.xml
+++ b/docs/plugins/inspect/plugin-festival.xml
@@ -3,10 +3,10 @@
<description>Synthesizes plain text into audio</description>
<filename>../../gst/festival/.libs/libgstfestival.so</filename>
<basename>libgstfestival.so</basename>
- <version>0.10.23.1</version>
+ <version>0.11.94</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
- <package>GStreamer Bad Plug-ins git</package>
+ <package>GStreamer Bad Plug-ins source release</package>
<origin>Unknown package origin</origin>
<elements>
<element>
@@ -14,13 +14,13 @@
<longname>Festival Text-to-Speech synthesizer</longname>
<class>Filter/Effect/Audio</class>
<description>Synthesizes plain text into audio</description>
- <author>Wim Taymans &lt;wim.taymans@chello.be&gt;</author>
+ <author>Wim Taymans &lt;wim.taymans@gmail.com&gt;</author>
<pads>
<caps>
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>text/plain</details>
+ <details>text/x-raw, format=(string)utf8</details>
</caps>
<caps>
<name>src</name>
diff --git a/docs/plugins/inspect/plugin-flite.xml b/docs/plugins/inspect/plugin-flite.xml
index 64ce577a..6b148abb 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>0.11.92</version>
+ <version>0.11.94</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 bf9b8094..d4c1c902 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>0.11.92</version>
+ <version>0.11.94</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins</package>
diff --git a/docs/plugins/inspect/plugin-freeze.xml b/docs/plugins/inspect/plugin-freeze.xml
index eaab6ab4..fae9f6ff 100644
--- a/docs/plugins/inspect/plugin-freeze.xml
+++ b/docs/plugins/inspect/plugin-freeze.xml
@@ -3,10 +3,10 @@
<description>Stream freezer</description>
<filename>../../gst/freeze/.libs/libgstfreeze.so</filename>
<basename>libgstfreeze.so</basename>
- <version>0.10.23.1</version>
+ <version>0.11.94</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
- <package>GStreamer Bad Plug-ins git</package>
+ <package>GStreamer Bad Plug-ins source release</package>
<origin>Unknown package origin</origin>
<elements>
<element>
diff --git a/docs/plugins/inspect/plugin-gaudieffects.xml b/docs/plugins/inspect/plugin-gaudieffects.xml
index fc521fdd..1a4e68fe 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>0.11.92</version>
+ <version>0.11.94</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
new file mode 100644
index 00000000..b7cd9244
--- /dev/null
+++ b/docs/plugins/inspect/plugin-gdp.xml
@@ -0,0 +1,55 @@
+<plugin>
+ <name>gdp</name>
+ <description>Payload/depayload GDP packets</description>
+ <filename>../../gst/gdp/.libs/libgstgdp.so</filename>
+ <basename>libgstgdp.so</basename>
+ <version>0.11.94</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>gdpdepay</name>
+ <longname>GDP Depayloader</longname>
+ <class>GDP/Depayloader</class>
+ <description>Depayloads GStreamer Data Protocol buffers</description>
+ <author>Thomas Vander Stichele &lt;thomas at apestaart dot org&gt;</author>
+ <pads>
+ <caps>
+ <name>sink</name>
+ <direction>sink</direction>
+ <presence>always</presence>
+ <details>application/x-gdp</details>
+ </caps>
+ <caps>
+ <name>src</name>
+ <direction>source</direction>
+ <presence>always</presence>
+ <details>ANY</details>
+ </caps>
+ </pads>
+ </element>
+ <element>
+ <name>gdppay</name>
+ <longname>GDP Payloader</longname>
+ <class>GDP/Payloader</class>
+ <description>Payloads GStreamer Data Protocol buffers</description>
+ <author>Thomas Vander Stichele &lt;thomas at apestaart dot org&gt;</author>
+ <pads>
+ <caps>
+ <name>sink</name>
+ <direction>sink</direction>
+ <presence>always</presence>
+ <details>ANY</details>
+ </caps>
+ <caps>
+ <name>src</name>
+ <direction>source</direction>
+ <presence>always</presence>
+ <details>application/x-gdp</details>
+ </caps>
+ </pads>
+ </element>
+ </elements>
+</plugin> \ No newline at end of file
diff --git a/docs/plugins/inspect/plugin-geometrictransform.xml b/docs/plugins/inspect/plugin-geometrictransform.xml
index 6026f3dc..22acdd34 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>0.11.92</version>
+ <version>0.11.94</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 15fd677f..07489720 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>0.11.92</version>
+ <version>0.11.94</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 1324ca6f..6f322ce8 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>0.11.92</version>
+ <version>0.11.94</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 2548297c..cec1dffb 100644
--- a/docs/plugins/inspect/plugin-gstsiren.xml
+++ b/docs/plugins/inspect/plugin-gstsiren.xml
@@ -3,10 +3,10 @@
<description>Siren encoder/decoder/payloader/depayloader plugins</description>
<filename>../../gst/siren/.libs/libgstsiren.so</filename>
<basename>libgstsiren.so</basename>
- <version>0.10.23.1</version>
+ <version>0.11.94</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
- <package>GStreamer Bad Plug-ins git</package>
+ <package>GStreamer Bad Plug-ins source release</package>
<origin>Unknown package origin</origin>
<elements>
<element>
@@ -26,7 +26,7 @@
<name>src</name>
<direction>source</direction>
<presence>always</presence>
- <details>audio/x-raw-int, width=(int)16, depth=(int)16, endianness=(int)1234, signed=(boolean)true, rate=(int)16000, channels=(int)1</details>
+ <details>audio/x-raw, format=(string)S16LE, rate=(int)16000, channels=(int)1</details>
</caps>
</pads>
</element>
@@ -41,7 +41,7 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>audio/x-raw-int, width=(int)16, depth=(int)16, endianness=(int)1234, signed=(boolean)true, rate=(int)16000, channels=(int)1</details>
+ <details>audio/x-raw, format=(string)S16LE, rate=(int)16000, channels=(int)1</details>
</caps>
<caps>
<name>src</name>
diff --git a/docs/plugins/inspect/plugin-id3tag.xml b/docs/plugins/inspect/plugin-id3tag.xml
index 45f5cff7..ded2ea27 100644
--- a/docs/plugins/inspect/plugin-id3tag.xml
+++ b/docs/plugins/inspect/plugin-id3tag.xml
@@ -3,10 +3,10 @@
<description>ID3 v1 and v2 muxing plugin</description>
<filename>../../gst/id3tag/.libs/libgstid3tag.so</filename>
<basename>libgstid3tag.so</basename>
- <version>0.10.23.1</version>
+ <version>0.11.94</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
- <package>GStreamer Bad Plug-ins git</package>
+ <package>GStreamer Bad Plug-ins source release</package>
<origin>Unknown package origin</origin>
<elements>
<element>
diff --git a/docs/plugins/inspect/plugin-inter.xml b/docs/plugins/inspect/plugin-inter.xml
index 4883ad63..f702f713 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>0.10.23.1</version>
+ <version>0.11.94</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins</package>
@@ -11,40 +11,40 @@
<elements>
<element>
<name>interaudiosink</name>
- <longname>FIXME Long name</longname>
- <class>Generic</class>
- <description>FIXME Description</description>
- <author>FIXME &lt;fixme@example.com&gt;</author>
+ <longname>Internal audio sink</longname>
+ <class>Sink/Audio</class>
+ <description>Virtual audio sink for internal process communication</description>
+ <author>David Schleef &lt;ds@schleef.org&gt;</author>
<pads>
<caps>
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2 ]</details>
+ <details>audio/x-raw, format=(string)S16LE, rate=(int)48000, channels=(int)2</details>
</caps>
</pads>
</element>
<element>
<name>interaudiosrc</name>
- <longname>FIXME Long name</longname>
- <class>Generic</class>
- <description>FIXME Description</description>
- <author>FIXME &lt;fixme@example.com&gt;</author>
+ <longname>Internal audio source</longname>
+ <class>Source/Audio</class>
+ <description>Virtual audio source for internal process communication</description>
+ <author>David Schleef &lt;ds@schleef.org&gt;</author>
<pads>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
- <details>audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2 ]</details>
+ <details>audio/x-raw, format=(string)S16LE, rate=(int)48000, channels=(int)2</details>
</caps>
</pads>
</element>
<element>
<name>intersubsink</name>
- <longname>FIXME Long name</longname>
- <class>Generic</class>
- <description>FIXME Description</description>
- <author>FIXME &lt;fixme@example.com&gt;</author>
+ <longname>Internal subtitle sink</longname>
+ <class>Sink/Subtitle</class>
+ <description>Virtual subtitle sink for internal process communication</description>
+ <author>David Schleef &lt;ds@schleef.org&gt;</author>
<pads>
<caps>
<name>sink</name>
@@ -56,10 +56,10 @@
</element>
<element>
<name>intersubsrc</name>
- <longname>Inter-pipeline subtitle source</longname>
+ <longname>Internal subtitle source</longname>
<class>Source/Subtitle</class>
- <description>Inter-pipeline subtitle source</description>
- <author>David Schleef &lt;ds@entropywave.com&gt;</author>
+ <description>Virtual subtitle source for internal process communication</description>
+ <author>David Schleef &lt;ds@schleef.org&gt;</author>
<pads>
<caps>
<name>src</name>
@@ -71,31 +71,31 @@
</element>
<element>
<name>intervideosink</name>
- <longname>FIXME Long name</longname>
- <class>Generic</class>
- <description>FIXME Description</description>
- <author>FIXME &lt;fixme@example.com&gt;</author>
+ <longname>Internal video sink</longname>
+ <class>Sink/Video</class>
+ <description>Virtual video sink for internal process communication</description>
+ <author>David Schleef &lt;ds@schleef.org&gt;</author>
<pads>
<caps>
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>video/x-raw-yuv, format=(fourcc)I420, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw, format=(string)I420, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
</pads>
</element>
<element>
<name>intervideosrc</name>
- <longname>FIXME Long name</longname>
- <class>Generic</class>
- <description>FIXME Description</description>
- <author>FIXME &lt;fixme@example.com&gt;</author>
+ <longname>Internal video source</longname>
+ <class>Source/Video</class>
+ <description>Virtual video source for internal process communication</description>
+ <author>David Schleef &lt;ds@schleef.org&gt;</author>
<pads>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
- <details>video/x-raw-yuv, format=(fourcc)I420, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw, format=(string)I420, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
</pads>
</element>
diff --git a/docs/plugins/inspect/plugin-interlace.xml b/docs/plugins/inspect/plugin-interlace.xml
index ae157e81..006c8de2 100644
--- a/docs/plugins/inspect/plugin-interlace.xml
+++ b/docs/plugins/inspect/plugin-interlace.xml
@@ -3,10 +3,10 @@
<description>Create an interlaced video stream</description>
<filename>../../gst/interlace/.libs/libgstinterlace.so</filename>
<basename>libgstinterlace.so</basename>
- <version>0.10.23.1</version>
+ <version>0.11.94</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
- <package>GStreamer Bad Plug-ins git</package>
+ <package>GStreamer Bad Plug-ins source release</package>
<origin>Unknown package origin</origin>
<elements>
<element>
@@ -20,13 +20,13 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>video/x-raw-yuv, format=(fourcc){ AYUV, YUY2, UYVY, I420, YV12, Y42B, Y444, NV12, NV21 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], interlaced=(boolean)false</details>
+ <details>video/x-raw, format=(string){ AYUV, YUY2, UYVY, I420, YV12, Y42B, Y444, NV12, NV21 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], interlace-mode=(string)progressive</details>
</caps>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
- <details>video/x-raw-yuv, format=(fourcc){ AYUV, YUY2, UYVY, I420, YV12, Y42B, Y444, NV12, NV21 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], interlaced=(boolean)true</details>
+ <details>video/x-raw, format=(string){ AYUV, YUY2, UYVY, I420, YV12, Y42B, Y444, NV12, NV21 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], interlace-mode=(string){ interleaved, mixed }</details>
</caps>
</pads>
</element>
diff --git a/docs/plugins/inspect/plugin-jpegformat.xml b/docs/plugins/inspect/plugin-jpegformat.xml
index b893f813..406cef0f 100644
--- a/docs/plugins/inspect/plugin-jpegformat.xml
+++ b/docs/plugins/inspect/plugin-jpegformat.xml
@@ -3,10 +3,10 @@
<description>JPEG interchange format plugin</description>
<filename>../../gst/jpegformat/.libs/libgstjpegformat.so</filename>
<basename>libgstjpegformat.so</basename>
- <version>0.10.23.1</version>
+ <version>0.11.94</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
- <package>GStreamer Bad Plug-ins git</package>
+ <package>GStreamer Bad Plug-ins source release</package>
<origin>Unknown package origin</origin>
<elements>
<element>
@@ -47,7 +47,7 @@
<name>src</name>
<direction>source</direction>
<presence>always</presence>
- <details>image/jpeg, format=(fourcc){ I420, Y41B, UYVY, YV12 }, width=(int)[ 0, 2147483647 ], height=(int)[ 0, 2147483647 ], interlaced=(boolean){ true, false }, framerate=(fraction)[ 0/1, 2147483647/1 ], parsed=(boolean)true</details>
+ <details>image/jpeg, format=(string){ I420, Y41B, UYVY, YV12 }, width=(int)[ 0, 2147483647 ], height=(int)[ 0, 2147483647 ], interlaced=(boolean){ true, false }, framerate=(fraction)[ 0/1, 2147483647/1 ], parsed=(boolean)true</details>
</caps>
</pads>
</element>
diff --git a/docs/plugins/inspect/plugin-kate.xml b/docs/plugins/inspect/plugin-kate.xml
index 288b52f5..be788602 100644
--- a/docs/plugins/inspect/plugin-kate.xml
+++ b/docs/plugins/inspect/plugin-kate.xml
@@ -26,7 +26,7 @@
<name>src</name>
<direction>source</direction>
<presence>always</presence>
- <details>text/plain; text/x-pango-markup; video/x-dvd-subpicture</details>
+ <details>text/plain; text/x-pango-markup; subpicture/x-dvd</details>
</caps>
</pads>
</element>
@@ -41,7 +41,7 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>text/plain; text/x-pango-markup; video/x-dvd-subpicture</details>
+ <details>text/plain; text/x-pango-markup; subpicture/x-dvd</details>
</caps>
<caps>
<name>src</name>
diff --git a/docs/plugins/inspect/plugin-liveadder.xml b/docs/plugins/inspect/plugin-liveadder.xml
index aa3264a8..bc0dcee4 100644
--- a/docs/plugins/inspect/plugin-liveadder.xml
+++ b/docs/plugins/inspect/plugin-liveadder.xml
@@ -3,10 +3,10 @@
<description>Adds multiple live discontinuous streams</description>
<filename>../../gst/liveadder/.libs/libgstliveadder.so</filename>
<basename>libgstliveadder.so</basename>
- <version>0.10.23.1</version>
+ <version>0.11.94</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
- <package>GStreamer Bad Plug-ins git</package>
+ <package>GStreamer Bad Plug-ins source release</package>
<origin>Unknown package origin</origin>
<elements>
<element>
@@ -17,16 +17,16 @@
<author>Olivier Crete &lt;olivier.crete@collabora.co.uk&gt;</author>
<pads>
<caps>
- <name>sink%d</name>
+ <name>sink_%u</name>
<direction>sink</direction>
<presence>request</presence>
- <details>audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int){ 8, 16, 24, 32 }, depth=(int)[ 1, 32 ], signed=(boolean){ true, false }; audio/x-raw-float, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int){ 32, 64 }</details>
+ <details>audio/x-raw, format=(string){ S8, U8, S16LE, U16LE, S32LE, U32LE, F32LE, F64LE }, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</details>
</caps>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
- <details>audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int){ 8, 16, 24, 32 }, depth=(int)[ 1, 32 ], signed=(boolean){ true, false }; audio/x-raw-float, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int){ 1234, 4321 }, width=(int){ 32, 64 }</details>
+ <details>audio/x-raw, format=(string){ S8, U8, S16LE, U16LE, S32LE, U32LE, F32LE, F64LE }, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</details>
</caps>
</pads>
</element>
diff --git a/docs/plugins/inspect/plugin-mimic.xml b/docs/plugins/inspect/plugin-mimic.xml
index b44b5adc..0bfef8b6 100644
--- a/docs/plugins/inspect/plugin-mimic.xml
+++ b/docs/plugins/inspect/plugin-mimic.xml
@@ -3,10 +3,10 @@
<description>Mimic codec</description>
<filename>../../ext/mimic/.libs/libgstmimic.so</filename>
<basename>libgstmimic.so</basename>
- <version>0.10.23.1</version>
+ <version>0.11.94</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
- <package>GStreamer Bad Plug-ins git</package>
+ <package>GStreamer Bad Plug-ins source release</package>
<origin>Unknown package origin</origin>
<elements>
<element>
@@ -26,7 +26,7 @@
<name>src</name>
<direction>source</direction>
<presence>always</presence>
- <details>video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, framerate=(fraction)0/1, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)320, height=(int)240; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, framerate=(fraction)0/1, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)160, height=(int)120</details>
+ <details>video/x-raw, format=(string)RGB, framerate=(fraction)0/1, width=(int)320, height=(int)240; video/x-raw, format=(string)RGB, framerate=(fraction)0/1, width=(int)160, height=(int)120</details>
</caps>
</pads>
</element>
@@ -41,7 +41,7 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, framerate=(fraction)[ 1/1, 30/1 ], red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)320, height=(int)240; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, framerate=(fraction)[ 1/1, 30/1 ], red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)160, height=(int)120</details>
+ <details>video/x-raw, format=(string)RGB, framerate=(fraction)[ 1/1, 30/1 ], width=(int)320, height=(int)240; video/x-raw, format=(string)RGB, framerate=(fraction)[ 1/1, 30/1 ], width=(int)160, height=(int)120</details>
</caps>
<caps>
<name>src</name>
diff --git a/docs/plugins/inspect/plugin-mms.xml b/docs/plugins/inspect/plugin-mms.xml
index 243e8523..a1eb5dd5 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>0.11.92</version>
+ <version>0.11.94</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 7da6c2e8..bc904c0a 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>0.11.92</version>
+ <version>0.11.94</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 f66e1059..50582029 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>0.11.2</version>
+ <version>0.11.94</version>
<license>GPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/docs/plugins/inspect/plugin-mpegdemux2.xml b/docs/plugins/inspect/plugin-mpegdemux2.xml
index 4e4c1eb5..1f403bfd 100644
--- a/docs/plugins/inspect/plugin-mpegdemux2.xml
+++ b/docs/plugins/inspect/plugin-mpegdemux2.xml
@@ -38,7 +38,7 @@
<name>subpicture_%02x</name>
<direction>source</direction>
<presence>sometimes</presence>
- <details>video/x-dvd-subpicture</details>
+ <details>subpicture/x-dvd</details>
</caps>
<caps>
<name>video_%02x</name>
diff --git a/docs/plugins/inspect/plugin-mpegpsdemux.xml b/docs/plugins/inspect/plugin-mpegpsdemux.xml
new file mode 100644
index 00000000..ffc5edd6
--- /dev/null
+++ b/docs/plugins/inspect/plugin-mpegpsdemux.xml
@@ -0,0 +1,52 @@
+<plugin>
+ <name>mpegpsdemux</name>
+ <description>MPEG-PS demuxer</description>
+ <filename>../../gst/mpegdemux/.libs/libgstmpegpsdemux.so</filename>
+ <basename>libgstmpegpsdemux.so</basename>
+ <version>0.11.94</version>
+ <license>unknown</license>
+ <source>gst-plugins-bad</source>
+ <package>GStreamer Bad Plug-ins source release</package>
+ <origin>Unknown package origin</origin>
+ <elements>
+ <element>
+ <name>mpegpsdemux</name>
+ <longname>The Fluendo MPEG Program Stream Demuxer</longname>
+ <class>Codec/Demuxer</class>
+ <description>Demultiplexes MPEG Program Streams</description>
+ <author>Wim Taymans &lt;wim@fluendo.com&gt;</author>
+ <pads>
+ <caps>
+ <name>sink</name>
+ <direction>sink</direction>
+ <presence>always</presence>
+ <details>video/mpeg, mpegversion=(int){ 1, 2 }, systemstream=(boolean)true; video/x-cdxa</details>
+ </caps>
+ <caps>
+ <name>audio_%02x</name>
+ <direction>source</direction>
+ <presence>sometimes</presence>
+ <details>audio/mpeg, mpegversion=(int)1; audio/mpeg, mpegversion=(int)4, stream-format=(string){ adts, loas }; audio/x-private1-lpcm; audio/x-private1-ac3; audio/x-private1-dts; audio/ac3</details>
+ </caps>
+ <caps>
+ <name>private_%d</name>
+ <direction>source</direction>
+ <presence>sometimes</presence>
+ <details>ANY</details>
+ </caps>
+ <caps>
+ <name>subpicture_%02x</name>
+ <direction>source</direction>
+ <presence>sometimes</presence>
+ <details>subpicture/x-dvd</details>
+ </caps>
+ <caps>
+ <name>video_%02x</name>
+ <direction>source</direction>
+ <presence>sometimes</presence>
+ <details>video/mpeg, mpegversion=(int){ 1, 2, 4 }, systemstream=(boolean)false; video/x-h264</details>
+ </caps>
+ </pads>
+ </element>
+ </elements>
+</plugin> \ No newline at end of file
diff --git a/docs/plugins/inspect/plugin-mpegtsdemux.xml b/docs/plugins/inspect/plugin-mpegtsdemux.xml
index 32bcab64..b74a7c54 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>0.11.92</version>
+ <version>0.11.94</version>
<license>unknown</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
@@ -27,7 +27,7 @@ Edward Hervey &lt;edward.hervey@collabora.co.uk&gt;</author>
<name>audio_%04x</name>
<direction>source</direction>
<presence>sometimes</presence>
- <details>audio/mpeg, mpegversion=(int)1; audio/mpeg, mpegversion=(int)2, stream-format=(string)adts; audio/mpeg, mpegversion=(int)4, stream-format=(string)latm; audio/x-lpcm, width=(int){ 16, 20, 24 }, rate=(int){ 48000, 96000 }, channels=(int)[ 1, 8 ], dynamic_range=(int)[ 0, 255 ], emphasis=(boolean){ false, true }, mute=(boolean){ false, true }; audio/x-ac3; audio/x-eac3; audio/x-dts; audio/x-private-ts-lpcm</details>
+ <details>audio/mpeg, mpegversion=(int)1; audio/mpeg, mpegversion=(int)2, stream-format=(string)adts; audio/mpeg, mpegversion=(int)4, stream-format=(string)loas; audio/x-lpcm, width=(int){ 16, 20, 24 }, rate=(int){ 48000, 96000 }, channels=(int)[ 1, 8 ], dynamic_range=(int)[ 0, 255 ], emphasis=(boolean){ false, true }, mute=(boolean){ false, true }; audio/x-ac3; audio/x-eac3; audio/x-dts; audio/x-private-ts-lpcm</details>
</caps>
<caps>
<name>private_%04x</name>
@@ -39,7 +39,7 @@ Edward Hervey &lt;edward.hervey@collabora.co.uk&gt;</author>
<name>subpicture_%04x</name>
<direction>source</direction>
<presence>sometimes</presence>
- <details>subpicture/x-pgs; video/x-dvd-subpicture</details>
+ <details>subpicture/x-pgs; subpicture/x-dvd</details>
</caps>
<caps>
<name>video_%04x</name>
@@ -63,13 +63,13 @@ Edward Hervey &lt;edward.hervey@collabora.co.uk&gt;</author>
<details>video/mpegts, systemstream=(boolean)true</details>
</caps>
<caps>
- <name>program_%u</name>
+ <name>src</name>
<direction>source</direction>
- <presence>sometimes</presence>
+ <presence>always</presence>
<details>video/mpegts, systemstream=(boolean)true</details>
</caps>
<caps>
- <name>src_%u</name>
+ <name>program_%u</name>
<direction>source</direction>
<presence>request</presence>
<details>video/mpegts, systemstream=(boolean)true</details>
diff --git a/docs/plugins/inspect/plugin-mpegtsmux.xml b/docs/plugins/inspect/plugin-mpegtsmux.xml
index 303bd9bd..186eef63 100644
--- a/docs/plugins/inspect/plugin-mpegtsmux.xml
+++ b/docs/plugins/inspect/plugin-mpegtsmux.xml
@@ -3,10 +3,10 @@
<description>MPEG-TS muxer</description>
<filename>../../gst/mpegtsmux/.libs/libgstmpegtsmux.so</filename>
<basename>libgstmpegtsmux.so</basename>
- <version>0.10.23.1</version>
+ <version>0.11.94</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
- <package>GStreamer Bad Plug-ins git</package>
+ <package>GStreamer Bad Plug-ins source release</package>
<origin>Unknown package origin</origin>
<elements>
<element>
@@ -20,7 +20,7 @@
<name>sink_%d</name>
<direction>sink</direction>
<presence>request</presence>
- <details>video/mpeg, mpegversion=(int){ 1, 2, 4 }, systemstream=(boolean)false; video/x-dirac; video/x-h264, stream-format=(string)byte-stream; audio/mpeg, mpegversion=(int){ 1, 2 }; audio/mpeg, mpegversion=(int)4, stream-format=(string){ raw, adts }; audio/x-lpcm, width=(int){ 16, 20, 24 }, rate=(int){ 48000, 96000 }, channels=(int)[ 1, 8 ], dynamic_range=(int)[ 0, 255 ], emphasis=(boolean){ false, true }, mute=(boolean){ false, true }; audio/x-ac3; audio/x-dts</details>
+ <details>video/mpeg, mpegversion=(int){ 1, 2, 4 }, systemstream=(boolean)false; video/x-dirac; video/x-h264, stream-format=(string)byte-stream; audio/mpeg, mpegversion=(int){ 1, 2 }; audio/mpeg, mpegversion=(int)4, stream-format=(string){ raw, adts }; audio/x-lpcm, width=(int){ 16, 20, 24 }, rate=(int){ 48000, 96000 }, channels=(int)[ 1, 8 ], dynamic_range=(int)[ 0, 255 ], emphasis=(boolean){ false, true }, mute=(boolean){ false, true }; audio/x-ac3; audio/x-dts; subpicture/x-dvb; private/teletext</details>
</caps>
<caps>
<name>src</name>
diff --git a/docs/plugins/inspect/plugin-mpg123.xml b/docs/plugins/inspect/plugin-mpg123.xml
new file mode 100644
index 00000000..9f58d36a
--- /dev/null
+++ b/docs/plugins/inspect/plugin-mpg123.xml
@@ -0,0 +1,34 @@
+<plugin>
+ <name>mpg123</name>
+ <description>mp3 decoding based on the mpg123 library</description>
+ <filename>../../ext/mpg123/.libs/libgstmpg123.so</filename>
+ <basename>libgstmpg123.so</basename>
+ <version>0.11.94</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>mpg123audiodec</name>
+ <longname>mpg123 mp3 decoder</longname>
+ <class>Codec/Decoder/Audio</class>
+ <description>Decodes mp3 streams using the mpg123 library</description>
+ <author>Carlos Rafael Giani &lt;dv@pseudoterminal.org&gt;</author>
+ <pads>
+ <caps>
+ <name>sink</name>
+ <direction>sink</direction>
+ <presence>always</presence>
+ <details>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</details>
+ </caps>
+ <caps>
+ <name>src</name>
+ <direction>source</direction>
+ <presence>always</presence>
+ <details>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</details>
+ </caps>
+ </pads>
+ </element>
+ </elements>
+</plugin> \ No newline at end of file
diff --git a/docs/plugins/inspect/plugin-mplex.xml b/docs/plugins/inspect/plugin-mplex.xml
index 16e92fcb..cc1ab4c6 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>0.11.2</version>
+ <version>0.11.94</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 f5a7b428..8e659d07 100644
--- a/docs/plugins/inspect/plugin-opencv.xml
+++ b/docs/plugins/inspect/plugin-opencv.xml
@@ -3,10 +3,10 @@
<description>GStreamer OpenCV Plugins</description>
<filename>../../ext/opencv/.libs/libgstopencv.so</filename>
<basename>libgstopencv.so</basename>
- <version>0.10.22.1</version>
+ <version>0.11.94</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
- <package>GStreamer Bad Plug-ins git</package>
+ <package>GStreamer Bad Plug-ins source release</package>
<origin>Unknown package origin</origin>
<elements>
<element>
@@ -20,13 +20,13 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>video/x-raw-gray, bpp=(int)16, depth=(int)16, endianness=(int)1234, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-gray, bpp=(int)16, depth=(int)16, endianness=(int)4321, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-gray, bpp=(int)8, depth=(int)8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw, format=(string)GRAY16_LE, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)GRAY16_BE, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)RGBx, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)xRGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)BGRx, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)xBGR, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)ARGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)BGRA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)ABGR, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)BGR, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)GRAY8, 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-gray, bpp=(int)16, depth=(int)16, endianness=(int)1234, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-gray, bpp=(int)16, depth=(int)16, endianness=(int)4321, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-gray, bpp=(int)8, depth=(int)8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw, format=(string)GRAY16_LE, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)GRAY16_BE, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)RGBx, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)xRGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)BGRx, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)xBGR, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)ARGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)BGRA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)ABGR, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)BGR, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)GRAY8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
</pads>
</element>
@@ -41,13 +41,13 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>video/x-raw-gray, bpp=(int)8, depth=(int)8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw, format=(string)GRAY8, 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-gray, bpp=(int)8, depth=(int)8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw, format=(string)GRAY8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
</pads>
</element>
@@ -62,13 +62,13 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>video/x-raw-gray, bpp=(int)16, depth=(int)16, endianness=(int)1234, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-gray, bpp=(int)16, depth=(int)16, endianness=(int)4321, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-gray, bpp=(int)8, depth=(int)8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw, format=(string)GRAY16_LE, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)GRAY16_BE, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)RGBx, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)xRGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)BGRx, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)xBGR, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)ARGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)BGRA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)ABGR, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)BGR, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)GRAY8, 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-gray, bpp=(int)16, depth=(int)16, endianness=(int)1234, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-gray, bpp=(int)16, depth=(int)16, endianness=(int)4321, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)-16777216, green_mask=(int)16711680, blue_mask=(int)65280, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)65280, green_mask=(int)16711680, blue_mask=(int)-16777216, alpha_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)32, depth=(int)32, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, alpha_mask=(int)-16777216, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-gray, bpp=(int)8, depth=(int)8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw, format=(string)GRAY16_LE, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)GRAY16_BE, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)RGBx, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)xRGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)BGRx, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)xBGR, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)RGBA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)ARGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)BGRA, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)ABGR, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)BGR, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)GRAY8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
</pads>
</element>
@@ -83,13 +83,13 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>video/x-raw-gray, bpp=(int)8, depth=(int)8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw, format=(string)GRAY8, 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-gray, bpp=(int)16, depth=(int)16, endianness=(int)1234, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw, format=(string)GRAY16_LE, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
</pads>
</element>
@@ -104,13 +104,13 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-gray, bpp=(int)8, depth=(int)8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)BGR, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)GRAY8, 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-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)255, green_mask=(int)65280, blue_mask=(int)16711680, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-gray, bpp=(int)8, depth=(int)8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)BGR, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)GRAY8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
</pads>
</element>
@@ -125,13 +125,13 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>video/x-raw-gray, bpp=(int)8, depth=(int)8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw, format=(string)GRAY8, 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-gray, bpp=(int)16, depth=(int)16, endianness=(int)1234, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw, format=(string)GRAY16_LE, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
</pads>
</element>
@@ -146,13 +146,13 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw, format=(string)RGB, 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-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
</pads>
</element>
@@ -167,13 +167,13 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw, format=(string)RGB, 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-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
</pads>
</element>
@@ -188,13 +188,34 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>video/x-raw-rgb</details>
+ <details>video/x-raw, format=(string)RGB, 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-rgb</details>
+ <details>video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ </caps>
+ </pads>
+ </element>
+ <element>
+ <name>motioncells</name>
+ <longname>motioncells</longname>
+ <class>Filter/Effect/Video</class>
+ <description>Performs motion detection on videos and images, providing detected motion cells index via bus messages</description>
+ <author>Robert Jobbagy &lt;jobbagy dot robert at gmail dot com&gt;, Nicola Murino &lt;nicola dot murino at gmail.com&gt;</author>
+ <pads>
+ <caps>
+ <name>sink</name>
+ <direction>sink</direction>
+ <presence>always</presence>
+ <details>video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ </caps>
+ <caps>
+ <name>src</name>
+ <direction>source</direction>
+ <presence>always</presence>
+ <details>video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
</pads>
</element>
@@ -209,13 +230,13 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw, format=(string)RGB, 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-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
</pads>
</element>
@@ -230,13 +251,13 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw, format=(string)RGB, 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-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
</pads>
</element>
@@ -244,20 +265,20 @@
<name>templatematch</name>
<longname>templatematch</longname>
<class>Filter/Effect/Video</class>
- <description>Performs template matching on videos and images, providing detected positions via bus messages</description>
+ <description>Performs template matching on videos and images, providing detected positions via bus messages.</description>
<author>Noam Lewis &lt;jones.noamle@gmail.com&gt;</author>
<pads>
<caps>
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw, format=(string)RGB, 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-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
</pads>
</element>
diff --git a/docs/plugins/inspect/plugin-pcapparse.xml b/docs/plugins/inspect/plugin-pcapparse.xml
index 8fdfdef1..a2a54b5e 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>0.11.92</version>
+ <version>0.11.94</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 e6301472..c572da06 100644
--- a/docs/plugins/inspect/plugin-pnm.xml
+++ b/docs/plugins/inspect/plugin-pnm.xml
@@ -3,10 +3,10 @@
<description>PNM plugin</description>
<filename>../../gst/pnm/.libs/libgstpnm.so</filename>
<basename>libgstpnm.so</basename>
- <version>0.10.23.1</version>
+ <version>0.11.94</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
- <package>GStreamer Bad Plug-ins git</package>
+ <package>GStreamer Bad Plug-ins source release</package>
<origin>Unknown package origin</origin>
<elements>
<element>
@@ -26,7 +26,7 @@
<name>src</name>
<direction>source</direction>
<presence>always</presence>
- <details>video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-gray, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], bpp=(int)8, depth=(int)8</details>
+ <details>video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)GRAY8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
</pads>
</element>
@@ -41,7 +41,7 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>video/x-raw-rgb, bpp=(int)24, depth=(int)24, endianness=(int)4321, red_mask=(int)16711680, green_mask=(int)65280, blue_mask=(int)255, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-gray, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], bpp=(int)8, depth=(int)8</details>
+ <details>video/x-raw, format=(string)RGB, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw, format=(string)GRAY8, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
<caps>
<name>src</name>
diff --git a/docs/plugins/inspect/plugin-rawparse.xml b/docs/plugins/inspect/plugin-rawparse.xml
index ecb29b7c..c08c5ea2 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>0.11.92</version>
+ <version>0.11.94</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 77063e87..71463756 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>0.11.92</version>
+ <version>0.11.94</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 61848db3..17715dc4 100644
--- a/docs/plugins/inspect/plugin-resindvd.xml
+++ b/docs/plugins/inspect/plugin-resindvd.xml
@@ -1,9 +1,9 @@
<plugin>
<name>resindvd</name>
<description>Resin DVD playback elements</description>
- <filename>../../ext/resindvd/.libs/libresindvd.so</filename>
- <basename>libresindvd.so</basename>
- <version>0.10.23.1</version>
+ <filename>../../ext/resindvd/.libs/libgstresindvd.so</filename>
+ <basename>libgstresindvd.so</basename>
+ <version>0.11.94</version>
<license>GPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer</package>
@@ -20,19 +20,19 @@
<name>audio</name>
<direction>source</direction>
<presence>sometimes</presence>
- <details>audio/x-raw-int; audio/x-raw-float</details>
+ <details>audio/x-raw, format=(string){ S8, U8, S16LE, S16BE, U16LE, U16BE, S24_32LE, S24_32BE, U24_32LE, U24_32BE, S32LE, S32BE, U32LE, U32BE, S24LE, S24BE, U24LE, U24BE, S20LE, S20BE, U20LE, U20BE, S18LE, S18BE, U18LE, U18BE, F32LE, F32BE, F64LE, F64BE }, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</details>
</caps>
<caps>
<name>subpicture</name>
<direction>source</direction>
<presence>sometimes</presence>
- <details>video/x-dvd-subpicture</details>
+ <details>subpicture/x-dvd</details>
</caps>
<caps>
<name>video</name>
<direction>source</direction>
<presence>sometimes</presence>
- <details>video/x-raw-yuv</details>
+ <details>video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210, I420_10LE, I420_10BE, I422_10LE, I422_10BE }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
</pads>
</element>
diff --git a/docs/plugins/inspect/plugin-rtmp.xml b/docs/plugins/inspect/plugin-rtmp.xml
index fb691783..2c3d636d 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>0.11.92</version>
+ <version>0.11.94</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 f6bc8dc0..67ba654b 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>0.11.92</version>
+ <version>0.11.94</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 e06e698e..34a54b94 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>0.11.92</version>
+ <version>0.11.94</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 67e9ae50..5042e0f2 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>0.11.92</version>
+ <version>0.11.94</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 31ab6959..6023490c 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>0.11.90</version>
+ <version>0.11.94</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
@@ -26,7 +26,7 @@
<name>src</name>
<direction>source</direction>
<presence>always</presence>
- <details>video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, Y42B, Y444, v216, v210, AY64, ARGB }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, Y42B, Y444, v216, v210, AY64 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
</pads>
</element>
@@ -41,7 +41,7 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, Y42B, Y444, v216, v210, AY64, ARGB }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
+ <details>video/x-raw, format=(string){ I420, YV12, YUY2, UYVY, AYUV, Y42B, Y444, v216, v210, AY64 }, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]</details>
</caps>
<caps>
<name>src</name>
diff --git a/docs/plugins/inspect/plugin-sdp.xml b/docs/plugins/inspect/plugin-sdp.xml
index a69a29e1..c95fe817 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>0.11.92</version>
+ <version>0.11.94</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 70fb1679..78f03a0f 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>0.11.92</version>
+ <version>0.11.94</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 3919b4a2..efee7536 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>0.11.92</version>
+ <version>0.11.94</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 56d19e23..b1bbedc2 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>0.11.92</version>
+ <version>0.11.94</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 626347ff..8ea2c2f6 100644
--- a/docs/plugins/inspect/plugin-soundtouch.xml
+++ b/docs/plugins/inspect/plugin-soundtouch.xml
@@ -3,10 +3,10 @@
<description>Audio Pitch Controller &amp; BPM Detection</description>
<filename>../../ext/soundtouch/.libs/libgstsoundtouch.so</filename>
<basename>libgstsoundtouch.so</basename>
- <version>0.10.23.1</version>
+ <version>0.11.94</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
- <package>GStreamer Bad Plug-ins git</package>
+ <package>GStreamer Bad Plug-ins source release</package>
<origin>Unknown package origin</origin>
<elements>
<element>
@@ -20,20 +20,20 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>audio/x-raw-float, width=(int)32, endianness=(int)1234, rate=(int)[ 8000, 2147483647 ], channels=(int)[ 1, 2 ]</details>
+ <details>audio/x-raw, format=(string)F32LE, rate=(int)[ 8000, 2147483647 ], channels=(int)[ 1, 2 ]</details>
</caps>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
- <details>audio/x-raw-float, width=(int)32, endianness=(int)1234, rate=(int)[ 8000, 2147483647 ], channels=(int)[ 1, 2 ]</details>
+ <details>audio/x-raw, format=(string)F32LE, rate=(int)[ 8000, 2147483647 ], channels=(int)[ 1, 2 ]</details>
</caps>
</pads>
</element>
<element>
<name>pitch</name>
<longname>Pitch controller</longname>
- <class>Filter/Converter/Audio</class>
+ <class>Filter/Effect/Audio</class>
<description>Control the pitch of an audio stream</description>
<author>Wouter Paesen &lt;wouter@blue-gate.be&gt;</author>
<pads>
@@ -41,13 +41,13 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>audio/x-raw-float, rate=(int)[ 8000, 2147483647 ], channels=(int)[ 1, 2 ], endianness=(int)1234, width=(int)32</details>
+ <details>audio/x-raw, format=(string)F32LE, rate=(int)[ 8000, 2147483647 ], channels=(int)[ 1, 2 ]</details>
</caps>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
- <details>audio/x-raw-float, rate=(int)[ 8000, 2147483647 ], channels=(int)[ 1, 2 ], endianness=(int)1234, width=(int)32</details>
+ <details>audio/x-raw, format=(string)F32LE, rate=(int)[ 8000, 2147483647 ], channels=(int)[ 1, 2 ]</details>
</caps>
</pads>
</element>
diff --git a/docs/plugins/inspect/plugin-spandsp.xml b/docs/plugins/inspect/plugin-spandsp.xml
new file mode 100644
index 00000000..521de7ac
--- /dev/null
+++ b/docs/plugins/inspect/plugin-spandsp.xml
@@ -0,0 +1,34 @@
+<plugin>
+ <name>spandsp</name>
+ <description>libspandsp plugin</description>
+ <filename>../../ext/spandsp/.libs/libgstspandsp.so</filename>
+ <basename>libgstspandsp.so</basename>
+ <version>0.11.94</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>spanplc</name>
+ <longname>SpanDSP PLC</longname>
+ <class>Filter/Effect/Audio</class>
+ <description>Adds packet loss concealment to audio</description>
+ <author>Youness Alaoui &lt;youness.alaoui@collabora.co.uk&gt;</author>
+ <pads>
+ <caps>
+ <name>sink</name>
+ <direction>sink</direction>
+ <presence>always</presence>
+ <details>audio/x-raw, format=(string)S16LE, rate=(int)[ 1, 2147483647 ], channels=(int)1</details>
+ </caps>
+ <caps>
+ <name>src</name>
+ <direction>source</direction>
+ <presence>always</presence>
+ <details>audio/x-raw, format=(string)S16LE, rate=(int)[ 1, 2147483647 ], channels=(int)1</details>
+ </caps>
+ </pads>
+ </element>
+ </elements>
+</plugin> \ No newline at end of file
diff --git a/docs/plugins/inspect/plugin-speed.xml b/docs/plugins/inspect/plugin-speed.xml
index 502b5e45..d1ab12d4 100644
--- a/docs/plugins/inspect/plugin-speed.xml
+++ b/docs/plugins/inspect/plugin-speed.xml
@@ -3,10 +3,10 @@
<description>Set speed/pitch on audio/raw streams (resampler)</description>
<filename>../../gst/speed/.libs/libgstspeed.so</filename>
<basename>libgstspeed.so</basename>
- <version>0.10.23.1</version>
+ <version>0.11.94</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
- <package>GStreamer Bad Plug-ins git</package>
+ <package>GStreamer Bad Plug-ins source release</package>
<origin>Unknown package origin</origin>
<elements>
<element>
@@ -20,13 +20,13 @@
<name>sink</name>
<direction>sink</direction>
<presence>always</presence>
- <details>audio/x-raw-float, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)32; audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)16, depth=(int)16, signed=(boolean)true</details>
+ <details>audio/x-raw, format=(string){ F32LE, S16LE }, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</details>
</caps>
<caps>
<name>src</name>
<direction>source</direction>
<presence>always</presence>
- <details>audio/x-raw-float, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)32; audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ], endianness=(int)1234, width=(int)16, depth=(int)16, signed=(boolean)true</details>
+ <details>audio/x-raw, format=(string){ F32LE, S16LE }, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ]</details>
</caps>
</pads>
</element>
diff --git a/docs/plugins/inspect/plugin-videoparsersbad.xml b/docs/plugins/inspect/plugin-videoparsersbad.xml
index 45ca7157..61535f5a 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>0.11.92</version>
+ <version>0.11.94</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
@@ -26,7 +26,7 @@
<name>src</name>
<direction>source</direction>
<presence>always</presence>
- <details>video/x-dirac, parsed=(boolean)true, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], pixel-aspect-ratio=(fraction)[ 0/1, 2147483647/1 ], interlaced=(boolean){ true, false }, profile=(int)[ 0, 2147483647 ], level=(int)[ 0, 2147483647 ]</details>
+ <details>video/x-dirac, parsed=(boolean)true, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], pixel-aspect-ratio=(fraction)[ 0/1, 2147483647/1 ], interlace-mode=(string){ progressive, interleaved }, profile=(string){ vc2-low-delay, vc2-simple, vc2-main, main }, level=(string){ 0, 1, 128 }</details>
</caps>
</pads>
</element>
diff --git a/docs/plugins/inspect/plugin-voaacenc.xml b/docs/plugins/inspect/plugin-voaacenc.xml
index 78ad9345..aaf86ea4 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>0.11.92</version>
+ <version>0.11.94</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
new file mode 100644
index 00000000..5a835e86
--- /dev/null
+++ b/docs/plugins/inspect/plugin-voamrwbenc.xml
@@ -0,0 +1,34 @@
+<plugin>
+ <name>voamrwbenc</name>
+ <description>Adaptive Multi-Rate Wide-Band Encoder</description>
+ <filename>../../ext/voamrwbenc/.libs/libgstvoamrwbenc.so</filename>
+ <basename>libgstvoamrwbenc.so</basename>
+ <version>0.11.94</version>
+ <license>unknown</license>
+ <source>gst-plugins-bad</source>
+ <package>GStreamer Bad Plug-ins source release</package>
+ <origin>Unknown package origin</origin>
+ <elements>
+ <element>
+ <name>voamrwbenc</name>
+ <longname>AMR-WB audio encoder</longname>
+ <class>Codec/Encoder/Audio</class>
+ <description>Adaptive Multi-Rate Wideband audio encoder</description>
+ <author>Renato Araujo &lt;renato.filho@indt.org.br&gt;</author>
+ <pads>
+ <caps>
+ <name>sink</name>
+ <direction>sink</direction>
+ <presence>always</presence>
+ <details>audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int)16000, channels=(int)1</details>
+ </caps>
+ <caps>
+ <name>src</name>
+ <direction>source</direction>
+ <presence>always</presence>
+ <details>audio/AMR-WB, rate=(int)16000, channels=(int)1</details>
+ </caps>
+ </pads>
+ </element>
+ </elements>
+</plugin> \ No newline at end of file
diff --git a/docs/plugins/inspect/plugin-vp8.xml b/docs/plugins/inspect/plugin-vp8.xml
index 073b531d..fcfa221f 100644
--- a/docs/plugins/inspect/plugin-vp8.xml
+++ b/docs/plugins/inspect/plugin-vp8.xml
@@ -3,7 +3,7 @@
<description>VP8 plugin</description>
<filename>../../ext/vp8/.libs/libgstvp8.so</filename>
<basename>libgstvp8.so</basename>
- <version>0.11.92</version>
+ <version>0.11.94</version>
<license>LGPL</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
new file mode 100644
index 00000000..758a8524
--- /dev/null
+++ b/docs/plugins/inspect/plugin-waylandsink.xml
@@ -0,0 +1,28 @@
+<plugin>
+ <name>waylandsink</name>
+ <description>Wayland Video Sink</description>
+ <filename>../../ext/wayland/.libs/libgstwaylandsink.so</filename>
+ <basename>libgstwaylandsink.so</basename>
+ <version>0.11.94</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>waylandsink</name>
+ <longname>wayland video sink</longname>
+ <class>Sink/Video</class>
+ <description>Output to wayland surface</description>
+ <author>Sreerenj Balachandran &lt;sreerenj.balachandran@intel.com&gt;</author>
+ <pads>
+ <caps>
+ <name>sink</name>
+ <direction>sink</direction>
+ <presence>always</presence>
+ <details>video/x-raw, format=(string)BGRA, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]</details>
+ </caps>
+ </pads>
+ </element>
+ </elements>
+</plugin> \ No newline at end of file
diff --git a/docs/plugins/inspect/plugin-y4mdec.xml b/docs/plugins/inspect/plugin-y4mdec.xml
index 115f945b..ba12fc4b 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>0.11.92</version>
+ <version>0.11.94</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 feed829b..2ad19fd3 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>0.11.92</version>
+ <version>0.11.94</version>
<license>LGPL</license>
<source>gst-plugins-bad</source>
<package>GStreamer Bad Plug-ins source release</package>
diff --git a/ext/Makefile.in b/ext/Makefile.in
index ecbe64aa..093e8b7f 100644
--- a/ext/Makefile.in
+++ b/ext/Makefile.in
@@ -319,6 +319,8 @@ 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@
@@ -326,6 +328,8 @@ 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@
@@ -340,7 +344,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -368,6 +371,10 @@ 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@
@@ -494,6 +501,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/apexsink/Makefile.in b/ext/apexsink/Makefile.in
index 253fa9ab..d44dc873 100644
--- a/ext/apexsink/Makefile.in
+++ b/ext/apexsink/Makefile.in
@@ -344,6 +344,8 @@ 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@
@@ -351,6 +353,8 @@ 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@
@@ -365,7 +369,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -393,6 +396,10 @@ 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@
@@ -519,6 +526,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/assrender/Makefile.in b/ext/assrender/Makefile.in
index a6bbf4f2..2b6e70a1 100644
--- a/ext/assrender/Makefile.in
+++ b/ext/assrender/Makefile.in
@@ -341,6 +341,8 @@ 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@
@@ -348,6 +350,8 @@ 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@
@@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -390,6 +393,10 @@ 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@
@@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/bz2/Makefile.in b/ext/bz2/Makefile.in
index f19442af..f41116a2 100644
--- a/ext/bz2/Makefile.in
+++ b/ext/bz2/Makefile.in
@@ -342,6 +342,8 @@ 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@
@@ -349,6 +351,8 @@ 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@
@@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -391,6 +394,10 @@ 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@
@@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/cdaudio/Makefile.in b/ext/cdaudio/Makefile.in
index 9b20900b..1df0738c 100644
--- a/ext/cdaudio/Makefile.in
+++ b/ext/cdaudio/Makefile.in
@@ -337,6 +337,8 @@ 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@
@@ -344,6 +346,8 @@ 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@
@@ -358,7 +362,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -386,6 +389,10 @@ 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@
@@ -512,6 +519,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/celt/Makefile.in b/ext/celt/Makefile.in
index bb130568..b46a7861 100644
--- a/ext/celt/Makefile.in
+++ b/ext/celt/Makefile.in
@@ -343,6 +343,8 @@ 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@
@@ -350,6 +352,8 @@ 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@
@@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -392,6 +395,10 @@ 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@
@@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/chromaprint/Makefile.in b/ext/chromaprint/Makefile.in
index 9da0bac4..25e50dfe 100644
--- a/ext/chromaprint/Makefile.in
+++ b/ext/chromaprint/Makefile.in
@@ -342,6 +342,8 @@ 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@
@@ -349,6 +351,8 @@ 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@
@@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -391,6 +394,10 @@ 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@
@@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/cog/Makefile.in b/ext/cog/Makefile.in
index 5ede7aba..f45e18fe 100644
--- a/ext/cog/Makefile.in
+++ b/ext/cog/Makefile.in
@@ -385,6 +385,8 @@ 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@
@@ -392,6 +394,8 @@ 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@
@@ -406,7 +410,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -434,6 +437,10 @@ 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@
@@ -560,6 +567,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/curl/Makefile.in b/ext/curl/Makefile.in
index 9998a995..d56c6c72 100644
--- a/ext/curl/Makefile.in
+++ b/ext/curl/Makefile.in
@@ -348,6 +348,8 @@ 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@
@@ -355,6 +357,8 @@ 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@
@@ -369,7 +373,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -397,6 +400,10 @@ 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@
@@ -523,6 +530,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/dc1394/Makefile.in b/ext/dc1394/Makefile.in
index 61d51c10..192afaa4 100644
--- a/ext/dc1394/Makefile.in
+++ b/ext/dc1394/Makefile.in
@@ -341,6 +341,8 @@ 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@
@@ -348,6 +350,8 @@ 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@
@@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -390,6 +393,10 @@ 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@
@@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/dirac/Makefile.in b/ext/dirac/Makefile.in
index 16e36fc0..e64af3d4 100644
--- a/ext/dirac/Makefile.in
+++ b/ext/dirac/Makefile.in
@@ -343,6 +343,8 @@ 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@
@@ -350,6 +352,8 @@ 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@
@@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -392,6 +395,10 @@ 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@
@@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/directfb/Makefile.in b/ext/directfb/Makefile.in
index 686676cb..fa631d05 100644
--- a/ext/directfb/Makefile.in
+++ b/ext/directfb/Makefile.in
@@ -351,6 +351,8 @@ 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@
@@ -358,6 +360,8 @@ 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@
@@ -372,7 +376,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -400,6 +403,10 @@ 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@
@@ -526,6 +533,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/dts/Makefile.in b/ext/dts/Makefile.in
index 37b79f74..a6660a33 100644
--- a/ext/dts/Makefile.in
+++ b/ext/dts/Makefile.in
@@ -342,6 +342,8 @@ 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@
@@ -349,6 +351,8 @@ 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@
@@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -391,6 +394,10 @@ 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@
@@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/faac/Makefile.in b/ext/faac/Makefile.in
index 1465bc03..8d34c4e9 100644
--- a/ext/faac/Makefile.in
+++ b/ext/faac/Makefile.in
@@ -341,6 +341,8 @@ 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@
@@ -348,6 +350,8 @@ 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@
@@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -390,6 +393,10 @@ 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@
@@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/faad/Makefile.in b/ext/faad/Makefile.in
index 49a36a1c..21e6947f 100644
--- a/ext/faad/Makefile.in
+++ b/ext/faad/Makefile.in
@@ -342,6 +342,8 @@ 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@
@@ -349,6 +351,8 @@ 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@
@@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -391,6 +394,10 @@ 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@
@@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/flite/Makefile.in b/ext/flite/Makefile.in
index 922cf5b3..4e75a25b 100644
--- a/ext/flite/Makefile.in
+++ b/ext/flite/Makefile.in
@@ -340,6 +340,8 @@ 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@
@@ -347,6 +349,8 @@ 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@
@@ -361,7 +365,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -389,6 +392,10 @@ 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@
@@ -515,6 +522,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/flite/gstflitetestsrc.c b/ext/flite/gstflitetestsrc.c
index e7efc20b..15bcaab7 100644
--- a/ext/flite/gstflitetestsrc.c
+++ b/ext/flite/gstflitetestsrc.c
@@ -177,6 +177,9 @@ gst_flite_test_src_fixate (GstBaseSrc * bsrc, GstCaps * caps)
GstStructure *structure;
gint channels;
+ caps = gst_caps_truncate (caps);
+ caps = gst_caps_make_writable (caps);
+
structure = gst_caps_get_structure (caps, 0);
gst_structure_fixate_field_nearest_int (structure, "channels", 2);
diff --git a/ext/gme/Makefile.in b/ext/gme/Makefile.in
index 705ee201..64bac624 100644
--- a/ext/gme/Makefile.in
+++ b/ext/gme/Makefile.in
@@ -341,6 +341,8 @@ 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@
@@ -348,6 +350,8 @@ 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@
@@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -390,6 +393,10 @@ 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@
@@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/gsettings/Makefile.in b/ext/gsettings/Makefile.in
index 5d46ccb8..a141da0f 100644
--- a/ext/gsettings/Makefile.in
+++ b/ext/gsettings/Makefile.in
@@ -352,6 +352,8 @@ 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@
@@ -359,6 +361,8 @@ 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@
@@ -373,7 +377,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -401,6 +404,10 @@ 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@
@@ -527,6 +534,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/gsm/Makefile.in b/ext/gsm/Makefile.in
index 49827359..d6cbd68d 100644
--- a/ext/gsm/Makefile.in
+++ b/ext/gsm/Makefile.in
@@ -342,6 +342,8 @@ 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@
@@ -349,6 +351,8 @@ 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@
@@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -391,6 +394,10 @@ 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@
@@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/jasper/Makefile.in b/ext/jasper/Makefile.in
index d87007b1..365de735 100644
--- a/ext/jasper/Makefile.in
+++ b/ext/jasper/Makefile.in
@@ -342,6 +342,8 @@ 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@
@@ -349,6 +351,8 @@ 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@
@@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -391,6 +394,10 @@ 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@
@@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/kate/Makefile.in b/ext/kate/Makefile.in
index 70a81a3c..63d30e5c 100644
--- a/ext/kate/Makefile.in
+++ b/ext/kate/Makefile.in
@@ -353,6 +353,8 @@ 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@
@@ -360,6 +362,8 @@ 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@
@@ -374,7 +378,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -402,6 +405,10 @@ 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@
@@ -528,6 +535,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/kate/gstkateenc.c b/ext/kate/gstkateenc.c
index fb84c4c1..239bbb3d 100644
--- a/ext/kate/gstkateenc.c
+++ b/ext/kate/gstkateenc.c
@@ -527,7 +527,7 @@ gst_kate_enc_setcaps (GstPad * pad, GstCaps * caps)
GST_ELEMENT_WARNING (ke, LIBRARY, SETTINGS, (NULL),
("Category set to '%s', but input is text-based.", ke->category));
}
- } else if (gst_structure_has_name (s, "video/x-dvd-subpicture")) {
+ } else if (gst_structure_has_name (s, "subpicture/x-dvd")) {
if (strcmp (ke->category, "SUB") == 0 ||
strcmp (ke->category, "subtitles") == 0) {
GST_ELEMENT_WARNING (ke, LIBRARY, SETTINGS, (NULL),
diff --git a/ext/kate/gstkatespu.h b/ext/kate/gstkatespu.h
index b89e7934..f0c98944 100644
--- a/ext/kate/gstkatespu.h
+++ b/ext/kate/gstkatespu.h
@@ -33,7 +33,7 @@
#define GST_KATE_STM_TO_GST(stm) ((GST_MSECOND * 1024 * (stm)) / 90)
#define GST_KATE_GST_TO_STM(gst) ((int)(((gst) * 90000 ) / 1024))
-#define GST_KATE_SPU_MIME_TYPE "video/x-dvd-subpicture"
+#define GST_KATE_SPU_MIME_TYPE "subpicture/x-dvd"
G_BEGIN_DECLS
diff --git a/ext/kate/gstkateutil.c b/ext/kate/gstkateutil.c
index d4ca3112..a5eb838f 100644
--- a/ext/kate/gstkateutil.c
+++ b/ext/kate/gstkateutil.c
@@ -299,7 +299,7 @@ gst_kate_util_decoder_base_chain_kate_packet (GstKateDecoderBase * decoder,
}
if (strcmp (decoder->k.ki->category, "K-SPU") == 0 ||
strcmp (decoder->k.ki->category, "spu-subtitles") == 0) {
- *src_caps = gst_caps_new_empty_simple ("video/x-dvd-subpicture");
+ *src_caps = gst_caps_new_empty_simple ("subpicture/x-dvd");
} else if (decoder->k.ki->text_markup_type == kate_markup_none) {
*src_caps = gst_caps_new_empty_simple ("text/plain");
} else {
diff --git a/ext/ladspa/Makefile.in b/ext/ladspa/Makefile.in
index da032ce0..be850654 100644
--- a/ext/ladspa/Makefile.in
+++ b/ext/ladspa/Makefile.in
@@ -342,6 +342,8 @@ 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@
@@ -349,6 +351,8 @@ 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@
@@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -391,6 +394,10 @@ 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@
@@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/libmms/Makefile.in b/ext/libmms/Makefile.in
index ffd43063..5749c151 100644
--- a/ext/libmms/Makefile.in
+++ b/ext/libmms/Makefile.in
@@ -342,6 +342,8 @@ 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@
@@ -349,6 +351,8 @@ 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@
@@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -391,6 +394,10 @@ 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@
@@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/lv2/Makefile.in b/ext/lv2/Makefile.in
index c22f5f88..bd6d4a84 100644
--- a/ext/lv2/Makefile.in
+++ b/ext/lv2/Makefile.in
@@ -342,6 +342,8 @@ 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@
@@ -349,6 +351,8 @@ 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@
@@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -391,6 +394,10 @@ 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@
@@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/mimic/Makefile.in b/ext/mimic/Makefile.in
index cc3387ae..c9340fff 100644
--- a/ext/mimic/Makefile.in
+++ b/ext/mimic/Makefile.in
@@ -342,6 +342,8 @@ 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@
@@ -349,6 +351,8 @@ 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@
@@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -391,6 +394,10 @@ 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@
@@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/modplug/Makefile.in b/ext/modplug/Makefile.in
index 7dd5832a..e0117b40 100644
--- a/ext/modplug/Makefile.in
+++ b/ext/modplug/Makefile.in
@@ -341,6 +341,8 @@ 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@
@@ -348,6 +350,8 @@ 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@
@@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -390,6 +393,10 @@ 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@
@@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/modplug/gstmodplug.cc b/ext/modplug/gstmodplug.cc
index 103812eb..e2a17864 100644
--- a/ext/modplug/gstmodplug.cc
+++ b/ext/modplug/gstmodplug.cc
@@ -565,7 +565,8 @@ gst_modplug_sinkpad_activate (GstPad * sinkpad, GstObject * parent)
goto activate_push;
}
- pull_mode = gst_query_has_scheduling_mode (query, GST_PAD_MODE_PULL);
+ pull_mode = gst_query_has_scheduling_mode_with_flags (query,
+ GST_PAD_MODE_PULL, GST_SCHEDULING_FLAG_SEEKABLE);
gst_query_unref (query);
if (!pull_mode)
diff --git a/ext/mpeg2enc/Makefile.in b/ext/mpeg2enc/Makefile.in
index 2ef44b81..801b37b5 100644
--- a/ext/mpeg2enc/Makefile.in
+++ b/ext/mpeg2enc/Makefile.in
@@ -345,6 +345,8 @@ 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@
@@ -352,6 +354,8 @@ 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@
@@ -366,7 +370,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -394,6 +397,10 @@ 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@
@@ -520,6 +527,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/mpg123/Makefile.in b/ext/mpg123/Makefile.in
index d3e7b699..10dda6d3 100644
--- a/ext/mpg123/Makefile.in
+++ b/ext/mpg123/Makefile.in
@@ -342,6 +342,8 @@ 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@
@@ -349,6 +351,8 @@ 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@
@@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -391,6 +394,10 @@ 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@
@@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/mpg123/gstmpg123audiodec.c b/ext/mpg123/gstmpg123audiodec.c
index ec6a2fc1..adaa54f0 100644
--- a/ext/mpg123/gstmpg123audiodec.c
+++ b/ext/mpg123/gstmpg123audiodec.c
@@ -616,7 +616,7 @@ static gboolean
plugin_init (GstPlugin * plugin)
{
return gst_element_register (plugin, "mpg123audiodec",
- GST_RANK_NONE, gst_mpg123_audio_dec_get_type ());
+ GST_RANK_MARGINAL, gst_mpg123_audio_dec_get_type ());
}
GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
diff --git a/ext/mplex/Makefile.in b/ext/mplex/Makefile.in
index b1d34c62..a10fe5fa 100644
--- a/ext/mplex/Makefile.in
+++ b/ext/mplex/Makefile.in
@@ -345,6 +345,8 @@ 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@
@@ -352,6 +354,8 @@ 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@
@@ -366,7 +370,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -394,6 +397,10 @@ 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@
@@ -520,6 +527,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/musepack/Makefile.in b/ext/musepack/Makefile.in
index f6f7aa11..2ffe9003 100644
--- a/ext/musepack/Makefile.in
+++ b/ext/musepack/Makefile.in
@@ -342,6 +342,8 @@ 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@
@@ -349,6 +351,8 @@ 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@
@@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -391,6 +394,10 @@ 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@
@@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/musicbrainz/Makefile.in b/ext/musicbrainz/Makefile.in
index 55588b5e..3faa9b3f 100644
--- a/ext/musicbrainz/Makefile.in
+++ b/ext/musicbrainz/Makefile.in
@@ -341,6 +341,8 @@ 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@
@@ -348,6 +350,8 @@ 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@
@@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -390,6 +393,10 @@ 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@
@@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/mythtv/Makefile.in b/ext/mythtv/Makefile.in
index 5c347b3f..9d31e39c 100644
--- a/ext/mythtv/Makefile.in
+++ b/ext/mythtv/Makefile.in
@@ -341,6 +341,8 @@ 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@
@@ -348,6 +350,8 @@ 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@
@@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -390,6 +393,10 @@ 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@
@@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/mythtv/gstmythtvsrc.c b/ext/mythtv/gstmythtvsrc.c
index dfb34876..bc71cd4e 100644
--- a/ext/mythtv/gstmythtvsrc.c
+++ b/ext/mythtv/gstmythtvsrc.c
@@ -598,8 +598,7 @@ gst_mythtv_src_start (GstBaseSrc * bsrc)
src->content_size = gmyth_file_get_filesize (src->file);
- msg = gst_message_new_duration (GST_OBJECT (src), GST_FORMAT_BYTES,
- src->content_size);
+ msg = gst_message_new_duration_changed (GST_OBJECT (src));
gst_element_post_message (GST_ELEMENT (src), msg);
src->do_start = FALSE;
@@ -608,8 +607,7 @@ gst_mythtv_src_start (GstBaseSrc * bsrc)
gst_segment_set_duration (&basesrc->segment, GST_FORMAT_BYTES,
src->content_size);
gst_element_post_message (GST_ELEMENT (src),
- gst_message_new_duration (GST_OBJECT (src), GST_FORMAT_BYTES,
- src->content_size));
+ gst_message_new_duration_changed (GST_OBJECT (src)));
#if 0
gst_pad_push_event (GST_BASE_SRC_PAD (GST_BASE_SRC (src)),
gst_event_new_new_segment (TRUE, 1.0,
diff --git a/ext/nas/Makefile.in b/ext/nas/Makefile.in
index 70065ab0..3e9a3d3e 100644
--- a/ext/nas/Makefile.in
+++ b/ext/nas/Makefile.in
@@ -341,6 +341,8 @@ 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@
@@ -348,6 +350,8 @@ 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@
@@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -390,6 +393,10 @@ 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@
@@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/neon/Makefile.in b/ext/neon/Makefile.in
index 8c28ac70..09ddb924 100644
--- a/ext/neon/Makefile.in
+++ b/ext/neon/Makefile.in
@@ -342,6 +342,8 @@ 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@
@@ -349,6 +351,8 @@ 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@
@@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -391,6 +394,10 @@ 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@
@@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/ofa/Makefile.in b/ext/ofa/Makefile.in
index b058e6dd..ff76640a 100644
--- a/ext/ofa/Makefile.in
+++ b/ext/ofa/Makefile.in
@@ -342,6 +342,8 @@ 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@
@@ -349,6 +351,8 @@ 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@
@@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -391,6 +394,10 @@ 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@
@@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/openal/Makefile.in b/ext/openal/Makefile.in
index ac45642a..b2435aad 100644
--- a/ext/openal/Makefile.in
+++ b/ext/openal/Makefile.in
@@ -346,6 +346,8 @@ 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@
@@ -353,6 +355,8 @@ 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@
@@ -367,7 +371,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -395,6 +398,10 @@ 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@
@@ -521,6 +528,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/opencv/Makefile.in b/ext/opencv/Makefile.in
index 966b71b3..2719d158 100644
--- a/ext/opencv/Makefile.in
+++ b/ext/opencv/Makefile.in
@@ -373,6 +373,8 @@ 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@
@@ -380,6 +382,8 @@ 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@
@@ -394,7 +398,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -422,6 +425,10 @@ 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@
@@ -548,6 +555,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/opencv/gstmotioncells.c b/ext/opencv/gstmotioncells.c
index ad5758c4..04d5de34 100644
--- a/ext/opencv/gstmotioncells.c
+++ b/ext/opencv/gstmotioncells.c
@@ -258,10 +258,14 @@ gst_motion_cells_class_init (GstMotioncellsClass * klass)
g_param_spec_boolean ("usealpha", "Use alpha",
"Use or not alpha blending on frames with motion cells", TRUE,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+#if 0
+ /* FIXME: should not be a long property, make it either gint or gint64
+ * (is this property actually used or useful for anything?) */
g_object_class_install_property (gobject_class, PROP_DATE,
g_param_spec_long ("date", "Motion Cell Date",
"Current Date in milliseconds", DATE_MIN, DATE_MAX, DATE_DEF,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+#endif
g_object_class_install_property (gobject_class, PROP_DATAFILE,
g_param_spec_string ("datafile", "DataFile",
"Location of motioncells data file (empty string means no saving)",
diff --git a/ext/opus/Makefile.in b/ext/opus/Makefile.in
index a17bead7..7ee66bfa 100644
--- a/ext/opus/Makefile.in
+++ b/ext/opus/Makefile.in
@@ -346,6 +346,8 @@ 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@
@@ -353,6 +355,8 @@ 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@
@@ -367,7 +371,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -395,6 +398,10 @@ 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@
@@ -521,6 +528,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/opus/gstopusdec.c b/ext/opus/gstopusdec.c
index 0e2805cc..ab7221d7 100644
--- a/ext/opus/gstopusdec.c
+++ b/ext/opus/gstopusdec.c
@@ -375,7 +375,7 @@ opus_dec_chain_parse_data (GstOpusDec * dec, GstBuffer * buffer)
GST_DEBUG_OBJECT (dec, "Creating decoder with %d channels, %d Hz",
dec->n_channels, dec->sample_rate);
-#ifndef GST_DISABLE_DEBUG
+#ifndef GST_DISABLE_GST_DEBUG
gst_opus_common_log_channel_mapping_table (GST_ELEMENT (dec), opusdec_debug,
"Mapping table", dec->n_channels, dec->channel_mapping);
#endif
diff --git a/ext/opus/gstopusenc.c b/ext/opus/gstopusenc.c
index 337be8c0..d9917951 100644
--- a/ext/opus/gstopusenc.c
+++ b/ext/opus/gstopusenc.c
@@ -287,7 +287,7 @@ gst_opus_enc_finalize (GObject * object)
enc = GST_OPUS_ENC (object);
- g_mutex_free (enc->property_lock);
+ g_mutex_clear (&enc->property_lock);
G_OBJECT_CLASS (parent_class)->finalize (object);
}
@@ -299,7 +299,7 @@ gst_opus_enc_init (GstOpusEnc * enc)
GST_DEBUG_OBJECT (enc, "init");
- enc->property_lock = g_mutex_new ();
+ g_mutex_init (&enc->property_lock);
enc->n_channels = -1;
enc->sample_rate = -1;
@@ -574,7 +574,7 @@ gst_opus_enc_setup_channel_mappings (GstOpusEnc * enc,
}
}
-#ifndef GST_DISABLE_DEBUG
+#ifndef GST_DISABLE_GST_DEBUG
GST_INFO_OBJECT (enc,
"Mapping tables built: %d channels, %d stereo streams", enc->n_channels,
enc->n_stereo_streams);
@@ -608,7 +608,7 @@ gst_opus_enc_set_format (GstAudioEncoder * benc, GstAudioInfo * info)
enc = GST_OPUS_ENC (benc);
- g_mutex_lock (enc->property_lock);
+ g_mutex_lock (&enc->property_lock);
enc->n_channels = GST_AUDIO_INFO_CHANNELS (info);
enc->sample_rate = GST_AUDIO_INFO_RATE (info);
@@ -622,7 +622,7 @@ gst_opus_enc_set_format (GstAudioEncoder * benc, GstAudioInfo * info)
enc->state = NULL;
}
if (!gst_opus_enc_setup (enc)) {
- g_mutex_unlock (enc->property_lock);
+ g_mutex_unlock (&enc->property_lock);
return FALSE;
}
@@ -631,7 +631,7 @@ gst_opus_enc_set_format (GstAudioEncoder * benc, GstAudioInfo * info)
/* feedback to base class */
gst_opus_enc_setup_base_class (enc, benc);
- g_mutex_unlock (enc->property_lock);
+ g_mutex_unlock (&enc->property_lock);
return TRUE;
}
@@ -641,7 +641,7 @@ gst_opus_enc_setup (GstOpusEnc * enc)
{
int error = OPUS_OK;
-#ifndef GST_DISABLE_DEBUG
+#ifndef GST_DISABLE_GST_DEBUG
GST_DEBUG_OBJECT (enc,
"setup: %d Hz, %d channels, %d stereo streams, family %d",
enc->sample_rate, enc->n_channels, enc->n_stereo_streams,
@@ -793,7 +793,7 @@ gst_opus_enc_encode (GstOpusEnc * enc, GstBuffer * buf)
gint outsize;
GstBuffer *outbuf;
- g_mutex_lock (enc->property_lock);
+ g_mutex_lock (&enc->property_lock);
if (G_LIKELY (buf)) {
gst_buffer_map (buf, &map, GST_MAP_READ);
@@ -859,7 +859,7 @@ done:
if (bdata)
gst_buffer_unmap (buf, &map);
- g_mutex_unlock (enc->property_lock);
+ g_mutex_unlock (&enc->property_lock);
if (mdata)
g_free (mdata);
@@ -914,7 +914,7 @@ gst_opus_enc_get_property (GObject * object, guint prop_id, GValue * value,
enc = GST_OPUS_ENC (object);
- g_mutex_lock (enc->property_lock);
+ g_mutex_lock (&enc->property_lock);
switch (prop_id) {
case PROP_AUDIO:
@@ -955,7 +955,7 @@ gst_opus_enc_get_property (GObject * object, guint prop_id, GValue * value,
break;
}
- g_mutex_unlock (enc->property_lock);
+ g_mutex_unlock (&enc->property_lock);
}
static void
@@ -967,12 +967,12 @@ gst_opus_enc_set_property (GObject * object, guint prop_id,
enc = GST_OPUS_ENC (object);
#define GST_OPUS_UPDATE_PROPERTY(prop,type,ctl) do { \
- g_mutex_lock (enc->property_lock); \
+ g_mutex_lock (&enc->property_lock); \
enc->prop = g_value_get_##type (value); \
if (enc->state) { \
opus_multistream_encoder_ctl (enc->state, OPUS_SET_##ctl (enc->prop)); \
} \
- g_mutex_unlock (enc->property_lock); \
+ g_mutex_unlock (&enc->property_lock); \
} while(0)
switch (prop_id) {
@@ -986,18 +986,18 @@ gst_opus_enc_set_property (GObject * object, guint prop_id,
GST_OPUS_UPDATE_PROPERTY (bandwidth, enum, BANDWIDTH);
break;
case PROP_FRAME_SIZE:
- g_mutex_lock (enc->property_lock);
+ g_mutex_lock (&enc->property_lock);
enc->frame_size = g_value_get_enum (value);
enc->frame_samples = gst_opus_enc_get_frame_samples (enc);
gst_opus_enc_setup_base_class (enc, GST_AUDIO_ENCODER (enc));
- g_mutex_unlock (enc->property_lock);
+ g_mutex_unlock (&enc->property_lock);
break;
case PROP_CBR:
/* this one has an opposite meaning to the opus ctl... */
- g_mutex_lock (enc->property_lock);
+ g_mutex_lock (&enc->property_lock);
enc->cbr = g_value_get_boolean (value);
opus_multistream_encoder_ctl (enc->state, OPUS_SET_VBR (!enc->cbr));
- g_mutex_unlock (enc->property_lock);
+ g_mutex_unlock (&enc->property_lock);
break;
case PROP_CONSTRAINED_VBR:
GST_OPUS_UPDATE_PROPERTY (constrained_vbr, boolean, VBR_CONSTRAINT);
@@ -1015,9 +1015,9 @@ gst_opus_enc_set_property (GObject * object, guint prop_id,
GST_OPUS_UPDATE_PROPERTY (packet_loss_percentage, int, PACKET_LOSS_PERC);
break;
case PROP_MAX_PAYLOAD_SIZE:
- g_mutex_lock (enc->property_lock);
+ g_mutex_lock (&enc->property_lock);
enc->max_payload_size = g_value_get_uint (value);
- g_mutex_unlock (enc->property_lock);
+ g_mutex_unlock (&enc->property_lock);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
diff --git a/ext/opus/gstopusenc.h b/ext/opus/gstopusenc.h
index 00f1b991..df994e30 100644
--- a/ext/opus/gstopusenc.h
+++ b/ext/opus/gstopusenc.h
@@ -54,7 +54,7 @@ struct _GstOpusEnc {
OpusMSEncoder *state;
/* Locks those properties which may be changed at play time */
- GMutex *property_lock;
+ GMutex property_lock;
/* properties */
gboolean audio_or_voip;
diff --git a/ext/resindvd/Makefile.am b/ext/resindvd/Makefile.am
index 9c3651e7..77f6a876 100644
--- a/ext/resindvd/Makefile.am
+++ b/ext/resindvd/Makefile.am
@@ -5,30 +5,27 @@ plugin_LTLIBRARIES = libgstresindvd.la
libgstresindvd_la_SOURCES = \
plugin.c \
resindvdbin.c \
- rsnaudiomunge.c \
- rsndec.c \
- rsnstreamselector.c \
resindvdsrc.c \
+ rsndec.c \
gstmpegdesc.c \
gstmpegdemux.c \
gstpesfilter.c \
- rsnparsetter.c \
- rsnwrappedbuffer.c
+ rsninputselector.c \
+ # rsnparsetter.c \
+ # rsnwrappedbuffer.c
libgstresindvd_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) \
$(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) \
$(GST_CFLAGS) $(DVDNAV_CFLAGS)
libgstresindvd_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) \
--lgstinterfaces-$(GST_API_VERSION) -lgstvideo-$(GST_API_VERSION) \
--lgstpbutils-$(GST_API_VERSION) \
+-lgstvideo-$(GST_API_VERSION) -lgstpbutils-$(GST_API_VERSION) \
$(GST_BASE_LIBS) $(GST_LIBS) $(DVDNAV_LIBS)
libgstresindvd_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
libgstresindvd_la_LIBTOOLFLAGS = --tag=disable-static
noinst_HEADERS = resindvdbin.h \
- rsnaudiomunge.h \
rsndec.h \
- rsnstreamselector.h \
+ rsninputselector.h \
resindvdsrc.h \
gstmpegdefs.h \
gstmpegdesc.h \
diff --git a/ext/resindvd/Makefile.in b/ext/resindvd/Makefile.in
index 49562f0f..8b6ff0e1 100644
--- a/ext/resindvd/Makefile.in
+++ b/ext/resindvd/Makefile.in
@@ -134,14 +134,11 @@ libgstresindvd_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1)
am_libgstresindvd_la_OBJECTS = libgstresindvd_la-plugin.lo \
libgstresindvd_la-resindvdbin.lo \
- libgstresindvd_la-rsnaudiomunge.lo libgstresindvd_la-rsndec.lo \
- libgstresindvd_la-rsnstreamselector.lo \
- libgstresindvd_la-resindvdsrc.lo \
+ libgstresindvd_la-resindvdsrc.lo libgstresindvd_la-rsndec.lo \
libgstresindvd_la-gstmpegdesc.lo \
libgstresindvd_la-gstmpegdemux.lo \
libgstresindvd_la-gstpesfilter.lo \
- libgstresindvd_la-rsnparsetter.lo \
- libgstresindvd_la-rsnwrappedbuffer.lo
+ libgstresindvd_la-rsninputselector.lo
libgstresindvd_la_OBJECTS = $(am_libgstresindvd_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -353,6 +350,8 @@ 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@
@@ -360,6 +359,8 @@ 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@
@@ -374,7 +375,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -402,6 +402,10 @@ 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@
@@ -528,6 +532,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
@@ -618,31 +623,28 @@ plugin_LTLIBRARIES = libgstresindvd.la
libgstresindvd_la_SOURCES = \
plugin.c \
resindvdbin.c \
- rsnaudiomunge.c \
- rsndec.c \
- rsnstreamselector.c \
resindvdsrc.c \
+ rsndec.c \
gstmpegdesc.c \
gstmpegdemux.c \
gstpesfilter.c \
- rsnparsetter.c \
- rsnwrappedbuffer.c
+ rsninputselector.c \
+ # rsnparsetter.c \
+ # rsnwrappedbuffer.c
libgstresindvd_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) \
$(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) \
$(GST_CFLAGS) $(DVDNAV_CFLAGS)
libgstresindvd_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) \
--lgstinterfaces-$(GST_API_VERSION) -lgstvideo-$(GST_API_VERSION) \
--lgstpbutils-$(GST_API_VERSION) \
+-lgstvideo-$(GST_API_VERSION) -lgstpbutils-$(GST_API_VERSION) \
$(GST_BASE_LIBS) $(GST_LIBS) $(DVDNAV_LIBS)
libgstresindvd_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
libgstresindvd_la_LIBTOOLFLAGS = --tag=disable-static
noinst_HEADERS = resindvdbin.h \
- rsnaudiomunge.h \
rsndec.h \
- rsnstreamselector.h \
+ rsninputselector.h \
resindvdsrc.h \
gstmpegdefs.h \
gstmpegdesc.h \
@@ -733,11 +735,8 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstresindvd_la-plugin.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstresindvd_la-resindvdbin.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstresindvd_la-resindvdsrc.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstresindvd_la-rsnaudiomunge.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstresindvd_la-rsndec.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstresindvd_la-rsnparsetter.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstresindvd_la-rsnstreamselector.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstresindvd_la-rsnwrappedbuffer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstresindvd_la-rsninputselector.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -774,12 +773,12 @@ libgstresindvd_la-resindvdbin.lo: resindvdbin.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -c -o libgstresindvd_la-resindvdbin.lo `test -f 'resindvdbin.c' || echo '$(srcdir)/'`resindvdbin.c
-libgstresindvd_la-rsnaudiomunge.lo: rsnaudiomunge.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -MT libgstresindvd_la-rsnaudiomunge.lo -MD -MP -MF $(DEPDIR)/libgstresindvd_la-rsnaudiomunge.Tpo -c -o libgstresindvd_la-rsnaudiomunge.lo `test -f 'rsnaudiomunge.c' || echo '$(srcdir)/'`rsnaudiomunge.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstresindvd_la-rsnaudiomunge.Tpo $(DEPDIR)/libgstresindvd_la-rsnaudiomunge.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rsnaudiomunge.c' object='libgstresindvd_la-rsnaudiomunge.lo' libtool=yes @AMDEPBACKSLASH@
+libgstresindvd_la-resindvdsrc.lo: resindvdsrc.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -MT libgstresindvd_la-resindvdsrc.lo -MD -MP -MF $(DEPDIR)/libgstresindvd_la-resindvdsrc.Tpo -c -o libgstresindvd_la-resindvdsrc.lo `test -f 'resindvdsrc.c' || echo '$(srcdir)/'`resindvdsrc.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstresindvd_la-resindvdsrc.Tpo $(DEPDIR)/libgstresindvd_la-resindvdsrc.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='resindvdsrc.c' object='libgstresindvd_la-resindvdsrc.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 $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -c -o libgstresindvd_la-rsnaudiomunge.lo `test -f 'rsnaudiomunge.c' || echo '$(srcdir)/'`rsnaudiomunge.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -c -o libgstresindvd_la-resindvdsrc.lo `test -f 'resindvdsrc.c' || echo '$(srcdir)/'`resindvdsrc.c
libgstresindvd_la-rsndec.lo: rsndec.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -MT libgstresindvd_la-rsndec.lo -MD -MP -MF $(DEPDIR)/libgstresindvd_la-rsndec.Tpo -c -o libgstresindvd_la-rsndec.lo `test -f 'rsndec.c' || echo '$(srcdir)/'`rsndec.c
@@ -788,20 +787,6 @@ libgstresindvd_la-rsndec.lo: rsndec.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -c -o libgstresindvd_la-rsndec.lo `test -f 'rsndec.c' || echo '$(srcdir)/'`rsndec.c
-libgstresindvd_la-rsnstreamselector.lo: rsnstreamselector.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -MT libgstresindvd_la-rsnstreamselector.lo -MD -MP -MF $(DEPDIR)/libgstresindvd_la-rsnstreamselector.Tpo -c -o libgstresindvd_la-rsnstreamselector.lo `test -f 'rsnstreamselector.c' || echo '$(srcdir)/'`rsnstreamselector.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstresindvd_la-rsnstreamselector.Tpo $(DEPDIR)/libgstresindvd_la-rsnstreamselector.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rsnstreamselector.c' object='libgstresindvd_la-rsnstreamselector.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 $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -c -o libgstresindvd_la-rsnstreamselector.lo `test -f 'rsnstreamselector.c' || echo '$(srcdir)/'`rsnstreamselector.c
-
-libgstresindvd_la-resindvdsrc.lo: resindvdsrc.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -MT libgstresindvd_la-resindvdsrc.lo -MD -MP -MF $(DEPDIR)/libgstresindvd_la-resindvdsrc.Tpo -c -o libgstresindvd_la-resindvdsrc.lo `test -f 'resindvdsrc.c' || echo '$(srcdir)/'`resindvdsrc.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstresindvd_la-resindvdsrc.Tpo $(DEPDIR)/libgstresindvd_la-resindvdsrc.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='resindvdsrc.c' object='libgstresindvd_la-resindvdsrc.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 $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -c -o libgstresindvd_la-resindvdsrc.lo `test -f 'resindvdsrc.c' || echo '$(srcdir)/'`resindvdsrc.c
-
libgstresindvd_la-gstmpegdesc.lo: gstmpegdesc.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -MT libgstresindvd_la-gstmpegdesc.lo -MD -MP -MF $(DEPDIR)/libgstresindvd_la-gstmpegdesc.Tpo -c -o libgstresindvd_la-gstmpegdesc.lo `test -f 'gstmpegdesc.c' || echo '$(srcdir)/'`gstmpegdesc.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstresindvd_la-gstmpegdesc.Tpo $(DEPDIR)/libgstresindvd_la-gstmpegdesc.Plo
@@ -823,19 +808,12 @@ libgstresindvd_la-gstpesfilter.lo: gstpesfilter.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -c -o libgstresindvd_la-gstpesfilter.lo `test -f 'gstpesfilter.c' || echo '$(srcdir)/'`gstpesfilter.c
-libgstresindvd_la-rsnparsetter.lo: rsnparsetter.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -MT libgstresindvd_la-rsnparsetter.lo -MD -MP -MF $(DEPDIR)/libgstresindvd_la-rsnparsetter.Tpo -c -o libgstresindvd_la-rsnparsetter.lo `test -f 'rsnparsetter.c' || echo '$(srcdir)/'`rsnparsetter.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstresindvd_la-rsnparsetter.Tpo $(DEPDIR)/libgstresindvd_la-rsnparsetter.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rsnparsetter.c' object='libgstresindvd_la-rsnparsetter.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 $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -c -o libgstresindvd_la-rsnparsetter.lo `test -f 'rsnparsetter.c' || echo '$(srcdir)/'`rsnparsetter.c
-
-libgstresindvd_la-rsnwrappedbuffer.lo: rsnwrappedbuffer.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -MT libgstresindvd_la-rsnwrappedbuffer.lo -MD -MP -MF $(DEPDIR)/libgstresindvd_la-rsnwrappedbuffer.Tpo -c -o libgstresindvd_la-rsnwrappedbuffer.lo `test -f 'rsnwrappedbuffer.c' || echo '$(srcdir)/'`rsnwrappedbuffer.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstresindvd_la-rsnwrappedbuffer.Tpo $(DEPDIR)/libgstresindvd_la-rsnwrappedbuffer.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rsnwrappedbuffer.c' object='libgstresindvd_la-rsnwrappedbuffer.lo' libtool=yes @AMDEPBACKSLASH@
+libgstresindvd_la-rsninputselector.lo: rsninputselector.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -MT libgstresindvd_la-rsninputselector.lo -MD -MP -MF $(DEPDIR)/libgstresindvd_la-rsninputselector.Tpo -c -o libgstresindvd_la-rsninputselector.lo `test -f 'rsninputselector.c' || echo '$(srcdir)/'`rsninputselector.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstresindvd_la-rsninputselector.Tpo $(DEPDIR)/libgstresindvd_la-rsninputselector.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rsninputselector.c' object='libgstresindvd_la-rsninputselector.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 $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -c -o libgstresindvd_la-rsnwrappedbuffer.lo `test -f 'rsnwrappedbuffer.c' || echo '$(srcdir)/'`rsnwrappedbuffer.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstresindvd_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstresindvd_la_CFLAGS) $(CFLAGS) -c -o libgstresindvd_la-rsninputselector.lo `test -f 'rsninputselector.c' || echo '$(srcdir)/'`rsninputselector.c
mostlyclean-libtool:
-rm -f *.lo
diff --git a/ext/resindvd/gstmpegdefs.h b/ext/resindvd/gstmpegdefs.h
index 608769ae..a0429e7a 100644
--- a/ext/resindvd/gstmpegdefs.h
+++ b/ext/resindvd/gstmpegdefs.h
@@ -125,30 +125,56 @@
* 0x0F-0x7F ITU-T Rec. H.222.0 | ISO/IEC 13818-1 Reserved
* 0x80-0xFF User Private
*/
-#define ST_RESERVED 0x00
-#define ST_VIDEO_MPEG1 0x01
-#define ST_VIDEO_MPEG2 0x02
-#define ST_AUDIO_MPEG1 0x03
-#define ST_AUDIO_MPEG2 0x04
-#define ST_PRIVATE_SECTIONS 0x05
-#define ST_PRIVATE_DATA 0x06
-#define ST_MHEG 0x07
-#define ST_DSMCC 0x08
-#define ST_H222_1 0x09
+#define ST_RESERVED 0x00
+#define ST_VIDEO_MPEG1 0x01
+#define ST_VIDEO_MPEG2 0x02
+#define ST_AUDIO_MPEG1 0x03
+#define ST_AUDIO_MPEG2 0x04
+#define ST_PRIVATE_SECTIONS 0x05
+#define ST_PRIVATE_DATA 0x06
+#define ST_MHEG 0x07
+#define ST_DSMCC 0x08
+#define ST_H222_1 0x09
/* later extensions */
-#define ST_AUDIO_AAC 0x0f
-#define ST_VIDEO_MPEG4 0x10
-#define ST_VIDEO_H264 0x1b
+#define ST_AUDIO_AAC_ADTS 0x0f
+/* LATM/LOAS AAC syntax */
+#define ST_AUDIO_AAC_LOAS 0x11
+#define ST_VIDEO_MPEG4 0x10
+#define ST_VIDEO_H264 0x1b
/* Un-official Dirac extension */
-#define ST_VIDEO_DIRAC 0xd1
+#define ST_VIDEO_DIRAC 0xd1
/* private stream types */
-#define ST_PS_AUDIO_AC3 0x81
-#define ST_PS_AUDIO_DTS 0x8a
-#define ST_PS_AUDIO_LPCM 0x8b
+#define ST_PS_AUDIO_AC3 0x81
+#define ST_PS_AUDIO_DTS 0x8a
+#define ST_PS_AUDIO_LPCM 0x8b
#define ST_PS_DVD_SUBPICTURE 0xff
+/* Blu-ray related */
+#define ST_BD_AUDIO_LPCM 0x80
+#define ST_BD_AUDIO_AC3 0x81
+#define ST_BD_AUDIO_DTS 0x82
+#define ST_BD_AUDIO_AC3_TRUE_HD 0x83
+#define ST_BD_AUDIO_AC3_PLUS 0x84
+#define ST_BD_AUDIO_DTS_HD 0x85
+#define ST_BD_AUDIO_DTS_HD_MASTER_AUDIO 0x86
+#define ST_BD_AUDIO_EAC3 0x87
+#define ST_BD_PGS_SUBPICTURE 0x90
+#define ST_BD_IGS 0x91
+#define ST_BD_SUBTITLE 0x92
+#define ST_BD_SECONDARY_AC3_PLUS 0xa1
+#define ST_BD_SECONDARY_DTS_HD 0xa2
+
+/* defined for VC1 extension in RP227 */
+#define ST_PRIVATE_EA 0xea
+
+/* HDV AUX stream mapping
+ * 0xA0 ISO/IEC 61834-11
+ * 0xA1 ISO/IEC 61834-11
+ */
+#define ST_HDV_AUX_A 0xa0
+#define ST_HDV_AUX_V 0xa1
/* Un-official time-code stream */
#define ST_PS_TIMECODE 0xd2
@@ -168,8 +194,19 @@
#define MPEG_MUX_RATE_MULT 50
+/* sync:4 == 00xx ! pts:3 ! 1 ! pts:15 ! 1 | pts:15 ! 1 */
+#define READ_TS(data, target, lost_sync_label) \
+ if ((*data & 0x01) != 0x01) goto lost_sync_label; \
+ target = ((guint64) (*data++ & 0x0E)) << 29; \
+ target |= ((guint64) (*data++ )) << 22; \
+ if ((*data & 0x01) != 0x01) goto lost_sync_label; \
+ target |= ((guint64) (*data++ & 0xFE)) << 14; \
+ target |= ((guint64) (*data++ )) << 7; \
+ if ((*data & 0x01) != 0x01) goto lost_sync_label; \
+ target |= ((guint64) (*data++ & 0xFE)) >> 1;
+
/* some extra GstFlowReturn values used internally */
-#define GST_FLOW_NEED_MORE_DATA GST_FLOW_CUSTOM_SUCCESS
-#define GST_FLOW_LOST_SYNC GST_FLOW_CUSTOM_SUCCESS_1
+#define GST_FLOW_NEED_MORE_DATA GST_FLOW_CUSTOM_SUCCESS
+#define GST_FLOW_LOST_SYNC GST_FLOW_CUSTOM_SUCCESS_1
#endif /* __GST_MPEG_DEFS_H__ */
diff --git a/ext/resindvd/gstmpegdemux.c b/ext/resindvd/gstmpegdemux.c
index bfa88350..a687707a 100644
--- a/ext/resindvd/gstmpegdemux.c
+++ b/ext/resindvd/gstmpegdemux.c
@@ -24,6 +24,7 @@
#endif
#include <string.h>
+#include <gst/video/video.h>
#include "gstmpegdefs.h"
#include "gstmpegdemux.h"
@@ -45,7 +46,7 @@
GST_DEBUG_CATEGORY_STATIC (gstflupsdemux_debug);
#define GST_CAT_DEFAULT (gstflupsdemux_debug)
-GST_DEBUG_CATEGORY_EXTERN (gstflupesfilter_debug);
+GST_DEBUG_CATEGORY_EXTERN (mpegpspesfilter_debug);
/* MPEG2Demux signals and args */
enum
@@ -89,7 +90,7 @@ static GstStaticPadTemplate subpicture_template =
GST_STATIC_PAD_TEMPLATE ("subpicture_%02x",
GST_PAD_SRC,
GST_PAD_SOMETIMES,
- GST_STATIC_CAPS ("video/x-dvd-subpicture")
+ GST_STATIC_CAPS ("subpicture/x-dvd")
);
static GstStaticPadTemplate private_template =
@@ -104,16 +105,35 @@ static void gst_flups_demux_init (GstFluPSDemux * demux);
static void gst_flups_demux_finalize (GstFluPSDemux * demux);
static void gst_flups_demux_reset (GstFluPSDemux * demux);
-static gboolean gst_flups_demux_sink_event (GstPad * pad, GstEvent * event);
-static gboolean gst_flups_demux_src_event (GstPad * pad, GstEvent * event);
-static gboolean gst_flups_demux_src_query (GstPad * pad, GstQuery * query);
-static GstFlowReturn gst_flups_demux_chain (GstPad * pad, GstBuffer * buffer);
+static gboolean gst_flups_demux_sink_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
+static GstFlowReturn gst_flups_demux_chain (GstPad * pad, GstObject * parent,
+ GstBuffer * buffer);
+static gboolean gst_flups_demux_sink_activate (GstPad * sinkpad,
+ GstObject * parent);
+static gboolean gst_flups_demux_sink_activate_mode (GstPad * pad,
+ GstObject * parent, GstPadMode mode, gboolean active);
+// static void gst_flups_demux_loop (GstPad * pad);
+
+static gboolean gst_flups_demux_src_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
+static gboolean gst_flups_demux_src_query (GstPad * pad, GstObject * parent,
+ GstQuery * query);
static GstStateChangeReturn gst_flups_demux_change_state (GstElement * element,
GstStateChange transition);
+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 GstElementClass *parent_class = NULL;
+static void gst_segment_set_position (GstSegment * segment, GstFormat format,
+ guint64 position);
+//static void gst_segment_set_duration (GstSegment * segment, GstFormat format,
+// guint64 duration);
+
/*static guint gst_flups_demux_signals[LAST_SIGNAL] = { 0 };*/
GType
@@ -132,6 +152,7 @@ gst_flups_demux_get_type (void)
sizeof (GstFluPSDemux),
0,
(GInstanceInitFunc) gst_flups_demux_init,
+ NULL
};
flups_demux_type =
@@ -159,14 +180,15 @@ gst_flups_demux_base_init (GstFluPSDemuxClass * klass)
gst_element_class_add_pad_template (element_class, klass->video_template);
gst_element_class_add_pad_template (element_class, klass->audio_template);
- gst_element_class_add_pad_template (element_class, klass->private_template);
gst_element_class_add_pad_template (element_class,
klass->subpicture_template);
+ 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_details_simple (element_class, "MPEG Program Demuxer",
- "Codec/Demuxer",
- "Demultiplexes MPEG Program Streams", "Wim Taymans <wim@fluendo.com>");
+ gst_element_class_set_details_simple (element_class,
+ "MPEG Program Demuxer", "Codec/Demuxer",
+ "Demultiplexes MPEG Program Streams",
+ "Jan Schmidt <thaytan@noraisin.net>");
}
static void
@@ -191,8 +213,15 @@ gst_flups_demux_init (GstFluPSDemux * demux)
GstFluPSDemuxClass *klass = GST_FLUPS_DEMUX_GET_CLASS (demux);
demux->sinkpad = gst_pad_new_from_template (klass->sink_template, "sink");
- gst_pad_set_event_function (demux->sinkpad, gst_flups_demux_sink_event);
- gst_pad_set_chain_function (demux->sinkpad, gst_flups_demux_chain);
+ gst_pad_set_event_function (demux->sinkpad,
+ GST_DEBUG_FUNCPTR (gst_flups_demux_sink_event));
+ gst_pad_set_chain_function (demux->sinkpad,
+ GST_DEBUG_FUNCPTR (gst_flups_demux_chain));
+ gst_pad_set_activate_function (demux->sinkpad,
+ GST_DEBUG_FUNCPTR (gst_flups_demux_sink_activate));
+ gst_pad_set_activatemode_function (demux->sinkpad,
+ GST_DEBUG_FUNCPTR (gst_flups_demux_sink_activate_mode));
+
gst_element_add_pad (GST_ELEMENT (demux), demux->sinkpad);
demux->streams =
@@ -230,8 +259,8 @@ gst_flups_demux_reset (GstFluPSDemux * demux)
}
p_ev = &demux->lang_codes;
- gst_event_replace (p_ev, NULL);
+ gst_event_replace (p_ev, NULL);
demux->scr_adjust = GSTTIME_TO_MPEGTIME (SCR_MUNGE);
}
@@ -259,7 +288,6 @@ gst_flups_demux_create_stream (GstFluPSDemux * demux, gint id, gint stream_type)
case ST_GST_VIDEO_MPEG1_OR_2:
{
gint mpeg_version = 1;
-
if (stream_type == ST_VIDEO_MPEG2 ||
(stream_type == ST_GST_VIDEO_MPEG1_OR_2 && demux->is_mpeg2_pack)) {
mpeg_version = 2;
@@ -287,45 +315,62 @@ gst_flups_demux_create_stream (GstFluPSDemux * demux, gint id, gint stream_type)
case ST_PRIVATE_DATA:
case ST_MHEG:
case ST_DSMCC:
- case ST_AUDIO_AAC:
+ break;
+ case ST_AUDIO_AAC_ADTS:
+ template = klass->audio_template;
+ name = g_strdup_printf ("audio_%02x", id);
+ caps = gst_caps_new_simple ("audio/mpeg",
+ "mpegversion", G_TYPE_INT, 4,
+ "stream-format", G_TYPE_STRING, "adts", NULL);
+ break;
+ case ST_AUDIO_AAC_LOAS: // LATM/LOAS AAC syntax
+ template = klass->audio_template;
+ name = g_strdup_printf ("audio_%02x", id);
+ caps = gst_caps_new_simple ("audio/mpeg",
+ "mpegversion", G_TYPE_INT, 4,
+ "stream-format", G_TYPE_STRING, "loas", NULL);
break;
case ST_VIDEO_H264:
template = klass->video_template;
name = g_strdup_printf ("video_%02x", id);
- caps = gst_caps_new_simple ("video/x-h264", NULL);
+ caps = gst_caps_new_empty_simple ("video/x-h264");
threshold = VIDEO_SEGMENT_THRESHOLD;
break;
case ST_PS_AUDIO_AC3:
template = klass->audio_template;
name = g_strdup_printf ("audio_%02x", id);
- caps = gst_caps_new_simple ("audio/x-private1-ac3", NULL);
+ caps = gst_caps_new_empty_simple ("audio/x-private1-ac3");
break;
case ST_PS_AUDIO_DTS:
template = klass->audio_template;
name = g_strdup_printf ("audio_%02x", id);
- caps = gst_caps_new_simple ("audio/x-private1-dts", NULL);
+ caps = gst_caps_new_empty_simple ("audio/x-private1-dts");
break;
case ST_PS_AUDIO_LPCM:
template = klass->audio_template;
name = g_strdup_printf ("audio_%02x", id);
- caps = gst_caps_new_simple ("audio/x-private1-lpcm", NULL);
+ caps = gst_caps_new_empty_simple ("audio/x-private1-lpcm");
break;
case ST_PS_DVD_SUBPICTURE:
template = klass->subpicture_template;
name = g_strdup_printf ("subpicture_%02x", id);
- caps = gst_caps_new_simple ("video/x-dvd-subpicture", NULL);
+ caps = gst_caps_new_empty_simple ("subpicture/x-dvd");
break;
case ST_GST_AUDIO_RAWA52:
template = klass->audio_template;
name = g_strdup_printf ("audio_%02x", id);
- caps = gst_caps_new_simple ("audio/ac3", NULL);
+ caps = gst_caps_new_empty_simple ("audio/ac3");
break;
default:
break;
}
- if (name == NULL || template == NULL || caps == NULL)
- return NULL;
+ if (name == NULL || template == NULL || caps == NULL) {
+ g_free (name);
+ if (caps)
+ gst_caps_unref (caps);
+ return FALSE;
+ }
stream = g_new0 (GstFluPSStream, 1);
stream->id = id;
@@ -334,12 +379,21 @@ gst_flups_demux_create_stream (GstFluPSDemux * demux, gint id, gint stream_type)
stream->type = stream_type;
stream->pad = gst_pad_new_from_template (template, name);
stream->segment_thresh = threshold;
- gst_pad_set_event_function (stream->pad, gst_flups_demux_src_event);
- gst_pad_set_query_function (stream->pad, gst_flups_demux_src_query);
+ gst_pad_set_event_function (stream->pad,
+ GST_DEBUG_FUNCPTR (gst_flups_demux_src_event));
+ gst_pad_set_query_function (stream->pad,
+ GST_DEBUG_FUNCPTR (gst_flups_demux_src_query));
gst_pad_use_fixed_caps (stream->pad);
+
+ /* needed for set_caps to work */
+ if (!gst_pad_set_active (stream->pad, TRUE)) {
+ GST_WARNING_OBJECT (demux, "Failed to activate pad %" GST_PTR_FORMAT,
+ stream->pad);
+ }
+
gst_pad_set_caps (stream->pad, caps);
- gst_caps_unref (caps);
GST_DEBUG_OBJECT (demux, "create pad %s, caps %" GST_PTR_FORMAT, name, caps);
+ gst_caps_unref (caps);
g_free (name);
return stream;
@@ -357,7 +411,6 @@ 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_pad_set_active (stream->pad, TRUE);
gst_element_add_pad (GST_ELEMENT (demux), stream->pad);
demux->streams[id] = stream;
@@ -377,17 +430,17 @@ gst_flups_demux_send_data (GstFluPSDemux * demux, GstFluPSStream * stream,
GstBuffer * buf)
{
GstFlowReturn result;
- guint64 timestamp;
+ GstClockTime pts = GST_CLOCK_TIME_NONE, dts = GST_CLOCK_TIME_NONE;
guint size;
if (stream == NULL)
goto no_stream;
/* timestamps */
- if (demux->next_pts != G_MAXUINT64)
- timestamp = MPEGTIME_TO_GSTTIME (demux->next_pts);
- else
- timestamp = GST_CLOCK_TIME_NONE;
+ 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);
if (demux->current_scr != G_MAXUINT64) {
GstClockTime cur_scr_time = MPEGTIME_TO_GSTTIME (demux->current_scr);
@@ -403,27 +456,27 @@ gst_flups_demux_send_data (GstFluPSDemux * demux, GstFluPSStream * stream,
}
/* OK, sent new segment now prepare the buffer for sending */
- /* caps */
- gst_buffer_set_caps (buf, GST_PAD_CAPS (stream->pad));
- GST_BUFFER_TIMESTAMP (buf) = timestamp;
+ GST_BUFFER_PTS (buf) = pts;
+ GST_BUFFER_DTS (buf) = dts;
/* Set the buffer discont flag, and clear discont state on the stream */
if (stream->discont) {
GST_DEBUG_OBJECT (demux, "discont buffer to pad %" GST_PTR_FORMAT
- " with TS %" GST_TIME_FORMAT, stream->pad, GST_TIME_ARGS (timestamp));
-
+ " with PTS %" GST_TIME_FORMAT " DTS %" GST_TIME_FORMAT,
+ stream->pad, GST_TIME_ARGS (pts), GST_TIME_ARGS (dts));
GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT);
+
stream->discont = FALSE;
}
- size = GST_BUFFER_SIZE (buf);
+ size = gst_buffer_get_size (buf);
demux->next_pts = G_MAXUINT64;
demux->next_dts = G_MAXUINT64;
result = gst_pad_push (stream->pad, buf);
- GST_DEBUG_OBJECT (demux, "pushed stream id 0x%02x type 0x%02x, time: %"
+ 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 (timestamp),
+ stream->id, stream->type, GST_TIME_ARGS (pts),
size, gst_flow_get_name (result));
return result;
@@ -437,7 +490,7 @@ no_stream:
}
}
-static void
+static inline void
gst_flups_demux_mark_discont (GstFluPSDemux * demux)
{
gint id;
@@ -453,111 +506,7 @@ gst_flups_demux_mark_discont (GstFluPSDemux * demux)
}
}
-static void
-gst_flups_demux_clear_times (GstFluPSDemux * demux)
-{
- gint id;
-
- /* Clear the last ts for all streams */
- for (id = 0; id < GST_FLUPS_DEMUX_MAX_STREAMS; id++) {
- GstFluPSStream *stream = demux->streams[id];
-
- if (stream) {
- stream->last_seg_start = stream->last_ts = GST_CLOCK_TIME_NONE;
- }
- }
-}
-
-static void
-gst_flups_demux_send_segment_updates (GstFluPSDemux * demux,
- GstClockTime new_time)
-{
- /* Advance all lagging streams by sending a segment update */
- gint id;
- GstEvent *event = NULL;
-
- if (new_time > demux->src_segment.stop)
- return;
-
- for (id = 0; id < GST_FLUPS_DEMUX_MAX_STREAMS; id++) {
- GstFluPSStream *stream = demux->streams[id];
-
- if (stream) {
- if (stream->last_ts == GST_CLOCK_TIME_NONE ||
- stream->last_ts < demux->src_segment.start)
- stream->last_ts = demux->src_segment.start;
- if (stream->last_ts + stream->segment_thresh < new_time) {
-#if 0
- g_print ("Segment update to pad %s time %" GST_TIME_FORMAT " stop now %"
- GST_TIME_FORMAT " last_stop %" GST_TIME_FORMAT "\n",
- GST_PAD_NAME (stream->pad), GST_TIME_ARGS (new_time),
- GST_TIME_ARGS (demux->src_segment.stop),
- GST_TIME_ARGS (demux->src_segment.last_stop));
-#endif
- GST_DEBUG_OBJECT (demux,
- "Segment update to pad %s time %" GST_TIME_FORMAT,
- GST_PAD_NAME (stream->pad), GST_TIME_ARGS (new_time));
- if (event == NULL) {
- event = gst_event_new_new_segment_full (TRUE,
- demux->src_segment.rate, demux->src_segment.applied_rate,
- GST_FORMAT_TIME, new_time,
- demux->src_segment.stop,
- demux->src_segment.time + (new_time - demux->src_segment.start));
- }
- gst_event_ref (event);
- gst_pad_push_event (stream->pad, event);
- stream->last_seg_start = stream->last_ts = new_time;
- }
- }
- }
-
- if (event)
- gst_event_unref (event);
-}
-
-static void
-gst_flups_demux_send_segment_close (GstFluPSDemux * demux)
-{
- gint id;
- GstEvent *event = NULL;
- GstClockTime stop = demux->src_segment.stop;
-
- if (demux->src_segment.last_stop != -1 && demux->src_segment.last_stop > stop)
- stop = demux->src_segment.last_stop;
-
- for (id = 0; id < GST_FLUPS_DEMUX_MAX_STREAMS; id++) {
- GstFluPSStream *stream = demux->streams[id];
-
- if (stream) {
- GstClockTime start = demux->src_segment.start;
-
- if (stream->last_seg_start != GST_CLOCK_TIME_NONE &&
- stream->last_seg_start > start)
- start = stream->last_seg_start;
-
-#if 0
- g_print ("Segment close to pad %s start %" GST_TIME_FORMAT
- " stop %" GST_TIME_FORMAT "\n",
- GST_PAD_NAME (stream->pad), GST_TIME_ARGS (start),
- GST_TIME_ARGS (stop));
-#endif
- if (start > stop) {
- g_print ("Problem on pad %s with start %" GST_TIME_FORMAT " > stop %"
- GST_TIME_FORMAT "\n",
- gst_object_get_name (GST_OBJECT (stream->pad)),
- GST_TIME_ARGS (start), GST_TIME_ARGS (stop));
- }
- event = gst_event_new_new_segment_full (TRUE,
- demux->src_segment.rate, demux->src_segment.applied_rate,
- GST_FORMAT_TIME, start,
- stop, demux->src_segment.time + (start - demux->src_segment.start));
- if (event)
- gst_pad_push_event (stream->pad, event);
- }
- }
-}
-
-static gboolean
+static inline gboolean
gst_flups_demux_send_event (GstFluPSDemux * demux, GstEvent * event)
{
gint id;
@@ -811,13 +760,124 @@ gst_flups_demux_handle_dvd_event (GstFluPSDemux * demux, GstEvent * event)
return ret;
}
+static void
+gst_flups_demux_flush (GstFluPSDemux * demux)
+{
+ GST_DEBUG_OBJECT (demux, "flushing demuxer");
+ gst_segment_init (&demux->src_segment, GST_FORMAT_TIME);
+ gst_adapter_clear (demux->adapter);
+ gst_adapter_clear (demux->rev_adapter);
+ gst_pes_filter_drain (&demux->filter);
+ gst_flups_demux_clear_times (demux);
+ demux->adapter_offset = G_MAXUINT64;
+ demux->current_scr = G_MAXUINT64;
+ demux->bytes_since_scr = 0;
+ demux->scr_adjust = GSTTIME_TO_MPEGTIME (SCR_MUNGE);
+ demux->in_still = FALSE;
+}
+
+static inline void
+gst_flups_demux_clear_times (GstFluPSDemux * demux)
+{
+ gint id;
+
+ /* Clear the last ts for all streams */
+ for (id = 0; id < GST_FLUPS_DEMUX_MAX_STREAMS; id++) {
+ GstFluPSStream *stream = demux->streams[id];
+
+ if (stream) {
+ stream->last_seg_start = stream->last_ts = GST_CLOCK_TIME_NONE;
+ }
+ }
+}
+
+static inline void
+gst_flups_demux_send_gap_updates (GstFluPSDemux * demux, GstClockTime new_time)
+{
+ gint id;
+ GstEvent *event = NULL;
+
+ /* Advance all lagging streams by sending a segment update */
+ if (new_time > demux->src_segment.stop)
+ return;
+
+ for (id = 0; id < GST_FLUPS_DEMUX_MAX_STREAMS; id++) {
+ GstFluPSStream *stream = demux->streams[id];
+
+ if (stream) {
+ if (stream->last_ts == GST_CLOCK_TIME_NONE ||
+ stream->last_ts < demux->src_segment.start)
+ stream->last_ts = demux->src_segment.start;
+ if (stream->last_ts + stream->segment_thresh < new_time) {
+#if 0
+ g_print ("Gap event update to pad %s from time %" GST_TIME_FORMAT
+ " to %" GST_TIME_FORMAT "\n", GST_PAD_NAME (stream->pad),
+ GST_TIME_ARGS (stream->last_ts), GST_TIME_ARGS (new_time));
+#endif
+ GST_DEBUG_OBJECT (demux,
+ "Gap event update to pad %s from time %" GST_TIME_FORMAT " to %"
+ GST_TIME_FORMAT, GST_PAD_NAME (stream->pad),
+ GST_TIME_ARGS (stream->last_ts), GST_TIME_ARGS (new_time));
+ event = gst_event_new_gap (stream->last_ts, new_time - stream->last_ts);
+ gst_pad_push_event (stream->pad, event);
+ stream->last_seg_start = stream->last_ts = new_time;
+ }
+ }
+ }
+}
+
+static inline void
+gst_flups_demux_close_segment (GstFluPSDemux * demux)
+{
+ gint id;
+ GstEvent *event = NULL;
+ GstClockTime stop = demux->src_segment.stop;
+
+ if (demux->src_segment.position != -1 && demux->src_segment.position > stop)
+ stop = demux->src_segment.position;
+
+ for (id = 0; id < GST_FLUPS_DEMUX_MAX_STREAMS; id++) {
+ GstFluPSStream *stream = demux->streams[id];
+
+ if (stream) {
+ GstClockTime start = demux->src_segment.start;
+ GstSegment segment;
+
+ if (stream->last_seg_start != GST_CLOCK_TIME_NONE &&
+ stream->last_seg_start > start)
+ start = stream->last_seg_start;
+
+#if 0
+ g_print ("Segment close to pad %s start %" GST_TIME_FORMAT
+ " stop %" GST_TIME_FORMAT "\n",
+ GST_PAD_NAME (stream->pad), GST_TIME_ARGS (start),
+ GST_TIME_ARGS (stop));
+#endif
+ if (start > stop) {
+ GST_WARNING_OBJECT (demux,
+ "Problem on pad %s with start %" GST_TIME_FORMAT " > stop %"
+ GST_TIME_FORMAT "\n",
+ gst_object_get_name (GST_OBJECT (stream->pad)),
+ GST_TIME_ARGS (start), GST_TIME_ARGS (stop));
+ }
+ gst_segment_init (&segment, GST_FORMAT_TIME);
+ segment.rate = demux->src_segment.rate;
+ segment.applied_rate = demux->src_segment.applied_rate;
+ segment.start = start;
+ segment.stop = stop;
+ segment.time =
+ demux->src_segment.time + (start - demux->src_segment.start);
+ event = gst_event_new_segment (&segment);
+ gst_pad_push_event (stream->pad, event);
+ }
+ }
+}
+
static gboolean
-gst_flups_demux_sink_event (GstPad * pad, GstEvent * event)
+gst_flups_demux_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
gboolean res = TRUE;
- GstFluPSDemux *demux;
-
- demux = GST_FLUPS_DEMUX (gst_pad_get_parent (pad));
+ GstFluPSDemux *demux = GST_FLUPS_DEMUX (parent);
switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_FLUSH_START:
@@ -825,54 +885,45 @@ gst_flups_demux_sink_event (GstPad * pad, GstEvent * event)
break;
case GST_EVENT_FLUSH_STOP:
gst_flups_demux_send_event (demux, event);
-
gst_segment_init (&demux->sink_segment, GST_FORMAT_UNDEFINED);
- gst_segment_init (&demux->src_segment, GST_FORMAT_TIME);
- gst_adapter_clear (demux->adapter);
- gst_adapter_clear (demux->rev_adapter);
- demux->adapter_offset = G_MAXUINT64;
- gst_pes_filter_drain (&demux->filter);
- demux->current_scr = G_MAXUINT64;
- demux->bytes_since_scr = 0;
- demux->scr_adjust = GSTTIME_TO_MPEGTIME (SCR_MUNGE);
- gst_flups_demux_clear_times (demux);
+ gst_flups_demux_flush (demux);
break;
- case GST_EVENT_NEWSEGMENT:
+ case GST_EVENT_SEGMENT:
{
- gboolean update;
- gdouble rate;
- GstFormat format;
+ const GstSegment *segment;
+
gint64 start, stop, time;
- gint64 accum, dur;
- gdouble arate;
+ gint64 base, dur;
GstClockTimeDiff adjust;
- gst_event_parse_new_segment_full (event, &update, &rate, &arate, &format,
- &start, &stop, &time);
+ /* Close current segment */
+ gst_flups_demux_close_segment (demux);
- if (format != GST_FORMAT_TIME)
+ gst_event_parse_segment (event, &segment);
+
+ if (segment->format != GST_FORMAT_TIME)
return FALSE;
- dur = stop - start;
+ gst_segment_copy_into (segment, &demux->sink_segment);
+
+ dur = segment->stop - segment->start;
+
+ base = demux->sink_segment.base;
+ start = demux->sink_segment.start;
+ stop = demux->sink_segment.stop;
+ time = demux->sink_segment.time;
demux->first_scr = GSTTIME_TO_MPEGTIME (start);
demux->current_scr = demux->first_scr + demux->scr_adjust;
demux->base_time = time;
demux->bytes_since_scr = 0;
- gst_segment_set_newsegment_full (&demux->sink_segment, update, rate,
- arate, format, start, stop, time);
-
GST_DEBUG_OBJECT (demux,
- "demux: got segment update %d start %" G_GINT64_FORMAT " stop %"
- G_GINT64_FORMAT " time %" G_GINT64_FORMAT, update, start, stop, time);
+ "demux: received new segment start %" G_GINT64_FORMAT " stop %"
+ G_GINT64_FORMAT " time %" G_GINT64_FORMAT, start, stop, time);
- accum = demux->sink_segment.accum;
- start = demux->sink_segment.start;
- stop = demux->sink_segment.stop;
-
- adjust = accum - start + SCR_MUNGE;
- start = accum + SCR_MUNGE;
+ adjust = base - start + SCR_MUNGE;
+ start = base + SCR_MUNGE;
if (adjust >= 0)
demux->scr_adjust = GSTTIME_TO_MPEGTIME (adjust);
@@ -881,32 +932,35 @@ gst_flups_demux_sink_event (GstPad * pad, GstEvent * event)
if (stop != -1) {
stop = start + dur;
- if (demux->src_segment.last_stop != -1
- && demux->src_segment.last_stop > stop)
- stop = demux->src_segment.last_stop;
+ if (demux->src_segment.position != -1
+ && demux->src_segment.position > stop)
+ stop = demux->src_segment.position;
}
GST_DEBUG_OBJECT (demux,
- "sending new segment: update %d rate %g format %d, start: %"
+ "sending new segment: rate %g format %d, start: %"
G_GINT64_FORMAT ", stop: %" G_GINT64_FORMAT ", time: %"
G_GINT64_FORMAT " scr_adjust: %" G_GINT64_FORMAT "(%" GST_TIME_FORMAT
- ")", update, rate, format, start, stop, time, demux->scr_adjust,
+ ")", segment->rate, segment->format, start, stop, time,
+ demux->scr_adjust,
GST_TIME_ARGS (MPEGTIME_TO_GSTTIME (demux->scr_adjust)));
- gst_segment_set_newsegment_full (&demux->src_segment, update,
- rate, arate, format, start, stop, time);
+ demux->src_segment.rate = segment->rate;
+ demux->src_segment.applied_rate = segment->applied_rate;
+ demux->src_segment.format = segment->format;
+ demux->src_segment.start = start;
+ demux->src_segment.stop = stop;
+ demux->src_segment.time = time;
- gst_event_unref (event);
- if (update) {
- /* Segment closing, send it as per-pad updates to manage the accum
- * properly */
- gst_flups_demux_send_segment_close (demux);
- } else {
- event = gst_event_new_new_segment_full (update,
- rate, arate, GST_FORMAT_TIME, start, stop, time);
- gst_flups_demux_send_event (demux, event);
+ if (demux->in_still && stop != -1) {
+ /* Generate gap buffers, due to closing segment from a still-frame */
+ gst_flups_demux_send_gap_updates (demux, stop);
}
+ gst_event_unref (event);
+ event = gst_event_new_segment (&demux->src_segment);
+ gst_flups_demux_send_event (demux, event);
+
break;
}
case GST_EVENT_EOS:
@@ -921,8 +975,15 @@ gst_flups_demux_sink_event (GstPad * pad, GstEvent * event)
case GST_EVENT_CUSTOM_DOWNSTREAM_OOB:
{
const GstStructure *structure = gst_event_get_structure (event);
+ gboolean in_still;
- if (structure != NULL
+ if (gst_video_event_parse_still_frame (event, &in_still)) {
+ /* Remember the still-frame state, so we can generate a pre-roll
+ * GAP event when a segment event arrives */
+ demux->in_still = in_still;
+ GST_INFO_OBJECT (demux, "still-state now %d", demux->in_still);
+ gst_flups_demux_send_event (demux, event);
+ } else if (structure != NULL
&& gst_structure_has_name (structure, "application/x-gst-dvd")) {
res = gst_flups_demux_handle_dvd_event (demux, event);
} else {
@@ -930,23 +991,22 @@ gst_flups_demux_sink_event (GstPad * pad, GstEvent * event)
}
break;
}
+ case GST_EVENT_CAPS:
+ gst_event_unref (event);
+ break;
default:
gst_flups_demux_send_event (demux, event);
break;
}
- gst_object_unref (demux);
-
return res;
}
static gboolean
-gst_flups_demux_src_event (GstPad * pad, GstEvent * event)
+gst_flups_demux_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
gboolean res = FALSE;
- GstFluPSDemux *demux;
-
- demux = GST_FLUPS_DEMUX (gst_pad_get_parent (pad));
+ GstFluPSDemux *demux = GST_FLUPS_DEMUX (parent);
switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_SEEK:
@@ -1011,13 +1071,10 @@ gst_flups_demux_src_event (GstPad * pad, GstEvent * event)
break;
}
- gst_object_unref (demux);
-
return res;
not_supported:
{
- gst_object_unref (demux);
gst_event_unref (event);
return FALSE;
@@ -1025,12 +1082,10 @@ not_supported:
}
static gboolean
-gst_flups_demux_src_query (GstPad * pad, GstQuery * query)
+gst_flups_demux_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
{
gboolean res = FALSE;
- GstFluPSDemux *demux;
-
- demux = GST_FLUPS_DEMUX (gst_pad_get_parent (pad));
+ GstFluPSDemux *demux = GST_FLUPS_DEMUX (parent);
GST_LOG_OBJECT (demux, "Have query of type %d on pad %" GST_PTR_FORMAT,
GST_QUERY_TYPE (query), pad);
@@ -1038,18 +1093,15 @@ gst_flups_demux_src_query (GstPad * pad, GstQuery * query)
switch (GST_QUERY_TYPE (query)) {
case GST_QUERY_POSITION:
{
- GstPad *peer;
+ GstClockTime pos;
GstFormat format;
- gint64 position;
- gst_query_parse_position (query, &format, NULL);
+ /* See if upstream can immediately answer */
+ res = gst_pad_peer_query (demux->sinkpad, query);
+ if (res)
+ break;
- if ((peer = gst_pad_get_peer (demux->sinkpad)) != NULL) {
- res = gst_pad_query (peer, query);
- gst_object_unref (peer);
- if (res)
- break;
- }
+ gst_query_parse_position (query, &format, NULL);
if (format != GST_FORMAT_TIME) {
GST_DEBUG_OBJECT (demux, "position not supported for format %d",
@@ -1057,17 +1109,17 @@ gst_flups_demux_src_query (GstPad * pad, GstQuery * query)
goto not_supported;
}
- position = demux->base_time;
+ pos = demux->base_time;
if (demux->current_scr != G_MAXUINT64 && demux->first_scr != G_MAXUINT64) {
- position +=
+ pos +=
MPEGTIME_TO_GSTTIME (demux->current_scr - demux->scr_adjust -
demux->first_scr);
}
GST_LOG_OBJECT (demux, "Position at GStreamer Time:%" GST_TIME_FORMAT,
- GST_TIME_ARGS (position));
+ GST_TIME_ARGS (pos));
- gst_query_set_position (query, format, position);
+ gst_query_set_position (query, format, pos);
res = TRUE;
break;
}
@@ -1075,76 +1127,79 @@ gst_flups_demux_src_query (GstPad * pad, GstQuery * query)
{
GstFormat format;
gint64 duration;
- GstPad *peer;
+ GstQuery *byte_query;
gst_query_parse_duration (query, &format, NULL);
- if ((peer = gst_pad_get_peer (demux->sinkpad)) == NULL) {
- GST_DEBUG_OBJECT (demux, "duration not possible, no peer");
- goto not_supported;
+ if (G_LIKELY (format == GST_FORMAT_TIME &&
+ GST_CLOCK_TIME_IS_VALID (demux->src_segment.duration))) {
+ gst_query_set_duration (query, GST_FORMAT_TIME,
+ demux->src_segment.duration);
+ res = TRUE;
+ break;
}
/* For any format other than bytes, see if upstream knows first */
if (format == GST_FORMAT_BYTES) {
GST_DEBUG_OBJECT (demux, "duration not supported for format %d",
format);
- gst_object_unref (peer);
goto not_supported;
}
- if (gst_pad_query (peer, query)) {
- gst_object_unref (peer);
+ if (gst_pad_peer_query (demux->sinkpad, query)) {
res = TRUE;
break;
}
- /* Upstream didn't know, so we can only answer TIME queries from
+ /* Upstream didn't know, so we can only answer TIME queries from
* here on */
if (format != GST_FORMAT_TIME) {
GST_DEBUG_OBJECT (demux, "duration not supported for format %d",
format);
- gst_object_unref (peer);
goto not_supported;
}
if (demux->mux_rate == -1) {
GST_DEBUG_OBJECT (demux, "duration not possible, no mux_rate");
- gst_object_unref (peer);
goto not_supported;
}
- gst_query_set_duration (query, GST_FORMAT_BYTES, -1);
+ byte_query = gst_query_new_duration (GST_FORMAT_BYTES);
- if (!gst_pad_query (peer, query)) {
+ if (!gst_pad_peer_query (demux->sinkpad, byte_query)) {
GST_LOG_OBJECT (demux, "query on peer pad failed");
- gst_object_unref (peer);
+ gst_query_unref (byte_query);
goto not_supported;
}
- gst_object_unref (peer);
- gst_query_parse_duration (query, &format, &duration);
+ gst_query_parse_duration (byte_query, &format, &duration);
+ gst_query_unref (byte_query);
+
+ GST_LOG_OBJECT (demux,
+ "query on peer pad reported bytes %" G_GUINT64_FORMAT, duration);
- duration = BYTES_TO_GSTTIME (duration);
+ duration = BYTES_TO_GSTTIME ((guint64) duration);
+
+ GST_LOG_OBJECT (demux, "converted to time %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (duration));
gst_query_set_duration (query, GST_FORMAT_TIME, duration);
res = TRUE;
break;
}
+ case GST_QUERY_SEEKING:{
+ /* Just ask upstream */
+ res = gst_pad_peer_query (demux->sinkpad, query);
+ break;
+ }
default:
- res = gst_pad_query_default (pad, query);
+ res = gst_pad_query_default (pad, parent, query);
break;
}
- gst_object_unref (demux);
-
return res;
-
not_supported:
- {
- gst_object_unref (demux);
-
- return FALSE;
- }
+ return FALSE;
}
static void
@@ -1170,6 +1225,33 @@ gst_flups_demux_reset_psm (GstFluPSDemux * demux)
#undef FILL_TYPE
}
+/* ISO/IEC 13818-1:
+ * pack_header() {
+ * pack_start_code 32 bslbf -+
+ * '01' 2 bslbf |
+ * system_clock_reference_base [32..30] 3 bslbf |
+ * marker_bit 1 bslbf |
+ * system_clock_reference_base [29..15] 15 bslbf |
+ * marker_bit 1 bslbf |
+ * system_clock_reference_base [14..0] 15 bslbf |
+ * marker_bit 1 bslbf | 112 bits
+ * system_clock_reference_extension 9 ubslbf |
+ * marker_bit 1 bslbf |
+ * program_mux_rate 22 ubslbf |
+ * marker_bit 1 bslbf |
+ * marker_bit 1 bslbf |
+ * reserved 5 bslbf |
+ * pack_stuffing_length 3 ubslbf -+
+ *
+ * for (i = 0; i < pack_stuffing_length; i++) {
+ * stuffing_byte '1111 1111' 8 bslbf
+ * }
+ *
+ * 112 bits = 14 bytes, as max value for pack_stuffing_length is 7, then
+ * in total it's needed 14 + 7 = 21 bytes.
+ */
+#define PACK_START_SIZE 21
+
static GstFlowReturn
gst_flups_demux_parse_pack_start (GstFluPSDemux * demux)
{
@@ -1177,22 +1259,27 @@ gst_flups_demux_parse_pack_start (GstFluPSDemux * demux)
guint length;
guint32 scr1, scr2;
guint64 scr, scr_adjusted, new_rate;
+ guint64 scr_rate_n;
+ guint64 scr_rate_d;
GstClockTime new_time;
+ guint avail = gst_adapter_available (demux->adapter);
GST_DEBUG ("parsing pack start");
- /* fixed length to begin with, start code and two scr values */
- length = 8 + 4;
-
- if (!(data = gst_adapter_peek (demux->adapter, length)))
+ if (G_UNLIKELY (avail < PACK_START_SIZE))
goto need_more_data;
+ data = gst_adapter_map (demux->adapter, PACK_START_SIZE);
+
/* skip start code */
data += 4;
scr1 = GST_READ_UINT32_BE (data);
scr2 = GST_READ_UINT32_BE (data + 4);
+ /* fixed length to begin with, start code and two scr values */
+ length = 8 + 4;
+
/* start parsing the stream */
if ((*data & 0xc0) == 0x40) {
guint32 scr_ext;
@@ -1204,13 +1291,11 @@ gst_flups_demux_parse_pack_start (GstFluPSDemux * demux)
/* mpeg2 has more data */
length += 2;
- if (gst_adapter_available (demux->adapter) < length)
- goto need_more_data;
/* :2=01 ! scr:3 ! marker:1==1 ! scr:15 ! marker:1==1 ! scr:15 */
/* check markers */
- if ((scr1 & 0xc4000400) != 0x44000400)
+ if (G_UNLIKELY ((scr1 & 0xc4000400) != 0x44000400))
goto lost_sync;
scr = ((guint64) scr1 & 0x38000000) << 3;
@@ -1219,14 +1304,15 @@ gst_flups_demux_parse_pack_start (GstFluPSDemux * demux)
scr |= ((guint64) scr2 & 0xf8000000) >> 27;
/* marker:1==1 ! scr_ext:9 ! marker:1==1 */
- if ((scr2 & 0x04010000) != 0x04010000)
+ if (G_UNLIKELY ((scr2 & 0x04010000) != 0x04010000))
goto lost_sync;
scr_ext = (scr2 & 0x03fe0000) >> 17;
/* We keep the offset of this scr */
- demux->last_scr_offset = demux->adapter_offset + 12;
+ demux->cur_scr_offset = demux->adapter_offset + 12;
- GST_DEBUG_OBJECT (demux, "SCR: 0x%08x SCRE: 0x%08x", (guint) scr, scr_ext);
+ GST_DEBUG_OBJECT (demux, "SCR: 0x%08" G_GINT64_MODIFIER "x SCRE: 0x%08x",
+ scr, scr_ext);
if (scr_ext) {
scr = (scr * 300 + scr_ext % 300) / 300;
@@ -1236,7 +1322,7 @@ gst_flups_demux_parse_pack_start (GstFluPSDemux * demux)
data += 6;
/* PMR:22 ! :2==11 ! reserved:5 ! stuffing_len:3 */
next32 = GST_READ_UINT32_BE (data);
- if ((next32 & 0x00000300) != 0x00000300)
+ if (G_UNLIKELY ((next32 & 0x00000300) != 0x00000300))
goto lost_sync;
new_rate = (next32 & 0xfffffc00) >> 10;
@@ -1245,6 +1331,7 @@ gst_flups_demux_parse_pack_start (GstFluPSDemux * demux)
GST_DEBUG_OBJECT (demux, "stuffing bytes: %d", stuffing_bytes);
data += 4;
+ length += stuffing_bytes;
while (stuffing_bytes--) {
if (*data++ != 0xff)
goto lost_sync;
@@ -1254,10 +1341,10 @@ gst_flups_demux_parse_pack_start (GstFluPSDemux * demux)
demux->is_mpeg2_pack = FALSE;
/* check markers */
- if ((scr1 & 0xf1000100) != 0x21000100)
+ if (G_UNLIKELY ((scr1 & 0xf1000100) != 0x21000100))
goto lost_sync;
- if ((scr2 & 0x01800001) != 0x01800001)
+ if (G_UNLIKELY ((scr2 & 0x01800001) != 0x01800001))
goto lost_sync;
/* :4=0010 ! scr:3 ! marker:1==1 ! scr:15 ! marker:1==1 ! scr:15 ! marker:1==1 */
@@ -1267,7 +1354,7 @@ gst_flups_demux_parse_pack_start (GstFluPSDemux * demux)
scr |= ((guint64) scr2 & 0xfe000000) >> 25;
/* We keep the offset of this scr */
- demux->last_scr_offset = demux->adapter_offset + 8;
+ demux->cur_scr_offset = demux->adapter_offset + 8;
/* marker:1==1 ! mux_rate:22 ! marker:1==1 */
new_rate = (scr2 & 0x007ffffe) >> 1;
@@ -1279,10 +1366,16 @@ gst_flups_demux_parse_pack_start (GstFluPSDemux * demux)
/* scr adjusted is the new scr found + the colected adjustment */
scr_adjusted = scr + demux->scr_adjust;
+ GST_LOG_OBJECT (demux,
+ "SCR: %" G_GINT64_FORMAT " (%" G_GINT64_FORMAT "), mux_rate %"
+ G_GINT64_FORMAT ", GStreamer Time:%" GST_TIME_FORMAT,
+ scr, scr_adjusted, new_rate,
+ GST_TIME_ARGS (MPEGTIME_TO_GSTTIME ((guint64) scr)));
+
/* keep the first src in order to calculate delta time */
- if (demux->first_scr == G_MAXUINT64) {
+ if (G_UNLIKELY (demux->first_scr == G_MAXUINT64)) {
demux->first_scr = scr;
- demux->first_scr_offset = demux->last_scr_offset;
+ demux->first_scr_offset = demux->cur_scr_offset;
if (demux->sink_segment.format == GST_FORMAT_TIME) {
demux->base_time = demux->sink_segment.time;
@@ -1290,12 +1383,15 @@ gst_flups_demux_parse_pack_start (GstFluPSDemux * demux)
demux->base_time = MPEGTIME_TO_GSTTIME (demux->first_scr);
}
/* at begin consider the new_rate as the scr rate, bytes/clock ticks */
- demux->scr_rate_n = new_rate;
- demux->scr_rate_d = CLOCK_FREQ;
- } else if (demux->first_scr_offset != demux->last_scr_offset) {
+ scr_rate_n = new_rate;
+ scr_rate_d = CLOCK_FREQ;
+ } else if (G_LIKELY (demux->first_scr_offset != demux->cur_scr_offset)) {
/* estimate byte rate related to the SCR */
- demux->scr_rate_n = demux->last_scr_offset - demux->first_scr_offset;
- demux->scr_rate_d = scr - demux->first_scr;
+ scr_rate_n = demux->cur_scr_offset - demux->first_scr_offset;
+ scr_rate_d = scr_adjusted - demux->first_scr;
+ } else {
+ scr_rate_n = demux->scr_rate_n;
+ scr_rate_d = demux->scr_rate_d;
}
GST_DEBUG_OBJECT (demux,
@@ -1309,15 +1405,14 @@ gst_flups_demux_parse_pack_start (GstFluPSDemux * demux)
" at %" G_GUINT64_FORMAT ", scr rate: %" G_GUINT64_FORMAT
"/%" G_GUINT64_FORMAT "(%f)",
((demux->sink_segment.rate >= 0.0) ? "forward" : "backward"),
- scr, demux->last_scr_offset,
+ scr, demux->cur_scr_offset,
demux->first_scr, demux->first_scr_offset,
- demux->scr_rate_n, demux->scr_rate_d,
- (float) demux->scr_rate_n / demux->scr_rate_d);
+ scr_rate_n, scr_rate_d, (float) scr_rate_n / scr_rate_d);
/* adjustment of the SCR */
- if (demux->current_scr != G_MAXUINT64) {
+ if (G_LIKELY (demux->current_scr != G_MAXUINT64)) {
gint64 diff;
- guint64 old_scr, old_mux_rate, bss, adjust;
+ guint64 old_scr, old_mux_rate, bss, adjust = 0;
/* keep SCR of the previous packet */
old_scr = demux->current_scr;
@@ -1326,12 +1421,13 @@ gst_flups_demux_parse_pack_start (GstFluPSDemux * demux)
/* Bytes since SCR is the amount we placed in the adapter since then
* (demux->bytes_since_scr) minus the amount remaining in the adapter,
* clamped to >= 0 */
- bss = MAX (0, (gint) (demux->bytes_since_scr -
- gst_adapter_available (demux->adapter)));
+ bss = MAX (0, (gint) (demux->bytes_since_scr - avail));
/* estimate the new SCR using the previous one according the notes
on point 2.5.2.2 of the ISO/IEC 13818-1 document */
- adjust = (bss * CLOCK_FREQ) / old_mux_rate;
+ if (old_mux_rate != 0)
+ adjust = (bss * CLOCK_FREQ) / old_mux_rate;
+
if (demux->sink_segment.rate >= 0.0)
demux->next_scr = old_scr + adjust;
else
@@ -1344,7 +1440,7 @@ gst_flups_demux_parse_pack_start (GstFluPSDemux * demux)
/* calculate the absolute deference between the last scr and
the new one */
- if (old_scr > scr_adjusted)
+ if (G_UNLIKELY (old_scr > scr_adjusted))
diff = old_scr - scr_adjusted;
else
diff = scr_adjusted - old_scr;
@@ -1369,18 +1465,21 @@ gst_flups_demux_parse_pack_start (GstFluPSDemux * demux)
/* update the current_scr and rate members */
demux->mux_rate = new_rate;
demux->current_scr = scr_adjusted;
+ demux->scr_rate_n = scr_rate_n;
+ demux->scr_rate_d = scr_rate_d;
new_time = MPEGTIME_TO_GSTTIME (scr_adjusted);
if (new_time != GST_CLOCK_TIME_NONE) {
// g_print ("SCR now %" GST_TIME_FORMAT "\n", GST_TIME_ARGS (new_time));
- gst_segment_set_last_stop (&demux->src_segment, GST_FORMAT_TIME, new_time);
- gst_flups_demux_send_segment_updates (demux, new_time);
+ gst_segment_set_position (&demux->src_segment, GST_FORMAT_TIME, new_time);
+ gst_flups_demux_send_gap_updates (demux, new_time);
}
/* Reset the bytes_since_scr value to count the data remaining in the
* adapter */
- demux->bytes_since_scr = gst_adapter_available (demux->adapter);
+ demux->bytes_since_scr = avail;
+ gst_adapter_unmap (demux->adapter);
gst_adapter_flush (demux->adapter, length);
ADAPTER_OFFSET_FLUSH (length);
return GST_FLOW_OK;
@@ -1388,6 +1487,7 @@ gst_flups_demux_parse_pack_start (GstFluPSDemux * demux)
lost_sync:
{
GST_DEBUG_OBJECT (demux, "lost sync");
+ gst_adapter_unmap (demux->adapter);
return GST_FLOW_LOST_SYNC;
}
need_more_data:
@@ -1397,6 +1497,32 @@ need_more_data:
}
}
+/* ISO/IEC 13818-1:
+ * system_header () {
+ * system_header_start_code 32 bslbf -+
+ * header_length 16 uimsbf |
+ * marker_bit 1 bslbf |
+ * rate_bound 22 uimsbf |
+ * marker_bit 1 bslbf |
+ * audio_bound 6 uimsbf |
+ * fixed_flag 1 bslbf |
+ * CSPS_flag 1 bslbf | 96 bits
+ * system_audio_lock_flag 1 bslbf |
+ * system_video_lock_flag 1 bslbf |
+ * marker_bit 1 bslbf |
+ * video_bound 5 uimsbf |
+ * packet_rate_restriction_flag 1 bslbf |
+ * reserved_bits 7 bslbf -+
+ * while (nextbits () = = '1') {
+ * stream_id 8 uimsbf -+
+ * '11' 2 bslbf | 24 bits
+ * P-STD_buffer_bound_scale 1 bslbf |
+ * P-STD_buffer_size_bound 13 uimsbf -+
+ * }
+ * }
+ * 96 bits = 12 bytes, 24 bits = 3 bytes.
+ */
+
static GstFlowReturn
gst_flups_demux_parse_sys_head (GstFluPSDemux * demux)
{
@@ -1404,10 +1530,12 @@ gst_flups_demux_parse_sys_head (GstFluPSDemux * demux)
const guint8 *data;
gboolean csps;
- /* start code + length */
- if (!(data = gst_adapter_peek (demux->adapter, 6)))
+ if (gst_adapter_available (demux->adapter) < 6)
goto need_more_data;
+ /* start code + length */
+ data = gst_adapter_map (demux->adapter, 6);
+
/* skip start code */
data += 4;
@@ -1416,9 +1544,12 @@ gst_flups_demux_parse_sys_head (GstFluPSDemux * demux)
length += 6;
- if (!(data = gst_adapter_peek (demux->adapter, length)))
+ gst_adapter_unmap (demux->adapter);
+ if (gst_adapter_available (demux->adapter) < length)
goto need_more_data;
+ data = gst_adapter_map (demux->adapter, length);
+
/* skip start code and length */
data += 6;
@@ -1533,6 +1664,7 @@ gst_flups_demux_parse_sys_head (GstFluPSDemux * demux)
}
}
+ gst_adapter_unmap (demux->adapter);
gst_adapter_flush (demux->adapter, length);
ADAPTER_OFFSET_FLUSH (length);
return GST_FLOW_OK;
@@ -1541,22 +1673,26 @@ gst_flups_demux_parse_sys_head (GstFluPSDemux * demux)
marker_expected:
{
GST_DEBUG_OBJECT (demux, "expecting marker");
+ gst_adapter_unmap (demux->adapter);
return GST_FLOW_LOST_SYNC;
}
no_placeholder_bits:
{
GST_DEBUG_OBJECT (demux, "expecting placeholder bit values"
" '11' after stream id");
+ gst_adapter_unmap (demux->adapter);
return GST_FLOW_LOST_SYNC;
}
sys_len_error:
{
GST_DEBUG_OBJECT (demux, "error in system header length");
+ gst_adapter_unmap (demux->adapter);
return GST_FLOW_LOST_SYNC;
}
need_more_data:
{
GST_DEBUG_OBJECT (demux, "need more data");
+ gst_adapter_unmap (demux->adapter);
return GST_FLOW_NEED_MORE_DATA;
}
}
@@ -1569,10 +1705,12 @@ gst_flups_demux_parse_psm (GstFluPSDemux * demux)
const guint8 *data, *es_map_base;
gboolean applicable;
- /* start code + length */
- if (!(data = gst_adapter_peek (demux->adapter, 6)))
+ if (gst_adapter_available (demux->adapter) < 6)
goto need_more_data;
+ /* start code + length */
+ data = gst_adapter_map (demux->adapter, 6);
+
/* skip start code */
data += 4;
@@ -1584,9 +1722,13 @@ gst_flups_demux_parse_psm (GstFluPSDemux * demux)
length += 6;
- if (!(data = gst_adapter_peek (demux->adapter, length)))
+ gst_adapter_unmap (demux->adapter);
+
+ if (gst_adapter_available (demux->adapter) < length)
goto need_more_data;
+ data = gst_adapter_map (demux->adapter, length);
+
/* skip start code and length */
data += 6;
@@ -1636,10 +1778,19 @@ gst_flups_demux_parse_psm (GstFluPSDemux * demux)
GST_DEBUG_OBJECT (demux, "Stream type %02X with id %02X and %u bytes info",
stream_type, stream_id, stream_info_length);
- demux->psm[stream_id] = stream_type;
+ if (G_LIKELY (stream_id != 0xbd))
+ demux->psm[stream_id] = stream_type;
+ else {
+ /* Ignore stream type for private_stream_1 and discover it looking at
+ * the stream data.
+ * Fixes demuxing some clips with lpcm that was wrongly declared as
+ * mpeg audio */
+ GST_DEBUG_OBJECT (demux, "stream type for private_stream_1 ignored");
+ }
es_map_base += stream_info_length;
}
+ gst_adapter_unmap (demux->adapter);
gst_adapter_flush (demux->adapter, length);
ADAPTER_OFFSET_FLUSH (length);
return GST_FLOW_OK;
@@ -1647,6 +1798,7 @@ gst_flups_demux_parse_psm (GstFluPSDemux * demux)
psm_len_error:
{
GST_DEBUG_OBJECT (demux, "error in PSM length");
+ gst_adapter_unmap (demux->adapter);
return GST_FLOW_LOST_SYNC;
}
need_more_data:
@@ -1670,12 +1822,12 @@ gst_flups_demux_data_cb (GstPESFilter * filter, gboolean first,
gint stream_type;
guint32 start_code;
guint8 id;
- guint8 *data;
- guint datalen;
+ GstMapInfo map;
+ gsize datalen;
guint offset = 0;
- data = GST_BUFFER_DATA (buffer);
- datalen = GST_BUFFER_SIZE (buffer);
+ gst_buffer_map (buffer, &map, GST_MAP_READ);
+ datalen = map.size;
start_code = filter->start_code;
id = filter->id;
@@ -1688,10 +1840,10 @@ gst_flups_demux_data_cb (GstPESFilter * filter, gboolean first,
if (start_code == ID_PRIVATE_STREAM_1 && datalen >= 2) {
guint8 nframes;
- /* VDR writes A52 streams without any header bytes
+ /* VDR writes A52 streams without any header bytes
* (see ftp://ftp.mplayerhq.hu/MPlayer/samples/MPEG-VOB/vdr-AC3) */
if (datalen >= 4) {
- guint hdr = GST_READ_UINT32_BE (data);
+ guint hdr = GST_READ_UINT32_BE (map.data);
if (G_UNLIKELY ((hdr & 0xffff0000) == AC3_SYNC_WORD)) {
id = 0x80;
@@ -1702,7 +1854,7 @@ gst_flups_demux_data_cb (GstPESFilter * filter, gboolean first,
if (G_LIKELY (stream_type == -1)) {
/* new id is in the first byte */
- id = data[offset++];
+ id = map.data[offset++];
datalen--;
/* and remap */
@@ -1713,7 +1865,7 @@ gst_flups_demux_data_cb (GstPESFilter * filter, gboolean first,
* streams and our backwards compat convention is to strip it off */
if (stream_type != ST_PS_DVD_SUBPICTURE) {
/* Number of audio frames in this packet */
- nframes = data[offset++];
+ nframes = map.data[offset++];
datalen--;
GST_DEBUG_OBJECT (demux, "private type 0x%02x, %d frames", id,
nframes);
@@ -1744,7 +1896,7 @@ gst_flups_demux_data_cb (GstPESFilter * filter, gboolean first,
demux->current_stream = gst_flups_demux_get_stream (demux, id, stream_type);
}
- if (demux->current_stream == NULL) {
+ if (G_UNLIKELY (demux->current_stream == NULL)) {
GST_DEBUG_OBJECT (demux, "Dropping buffer for unknown stream id 0x%02x",
id);
goto done;
@@ -1768,7 +1920,8 @@ gst_flups_demux_data_cb (GstPESFilter * filter, gboolean first,
}
if (demux->current_stream->notlinked == FALSE) {
- out_buf = gst_buffer_create_sub (buffer, offset, datalen);
+ out_buf =
+ gst_buffer_copy_region (buffer, GST_BUFFER_COPY_ALL, offset, datalen);
ret = gst_flups_demux_send_data (demux, demux->current_stream, out_buf);
if (ret == GST_FLOW_NOT_LINKED) {
@@ -1778,6 +1931,7 @@ gst_flups_demux_data_cb (GstPESFilter * filter, gboolean first,
}
done:
+ gst_buffer_unmap (buffer, &map);
gst_buffer_unref (buffer);
return ret;
@@ -1801,11 +1955,11 @@ gst_flups_demux_resync (GstFluPSDemux * demux, gboolean save)
gboolean found;
avail = gst_adapter_available (demux->adapter);
- if (avail < 4)
+ if (G_UNLIKELY (avail < 4))
goto need_data;
/* Common case, read 4 bytes an check it */
- data = gst_adapter_peek (demux->adapter, 4);
+ data = gst_adapter_map (demux->adapter, 4);
/* read currect code */
code = GST_READ_UINT32_BE (data);
@@ -1814,22 +1968,25 @@ gst_flups_demux_resync (GstFluPSDemux * demux, gboolean save)
if (G_LIKELY ((code & 0xffffff00) == 0x100L)) {
GST_LOG_OBJECT (demux, "Found resync code %08x after 0 bytes", code);
demux->last_sync_code = code;
+ gst_adapter_unmap (demux->adapter);
return TRUE;
}
- /* Otherwise, we are starting at byte 4 and we need to search
+ /* Otherwise, we are starting at byte 4 and we need to search
the sync code in all available data in the adapter */
offset = 4;
if (offset >= avail)
goto need_data; /* Not enough data to find sync */
- data = gst_adapter_peek (demux->adapter, avail);
+ data = gst_adapter_map (demux->adapter, avail);
do {
code = (code << 8) | data[offset++];
found = (code & 0xffffff00) == 0x100L;
} while (offset < avail && !found);
+ gst_adapter_unmap (demux->adapter);
+
if (!save || demux->sink_segment.rate >= 0.0) {
GST_LOG_OBJECT (demux, "flushing %d bytes", offset - 4);
/* forward playback, we can discard and flush the skipped bytes */
@@ -1875,10 +2032,79 @@ gst_flups_demux_is_pes_sync (guint32 sync)
((sync & 0xe0) == 0xc0) || ((sync & 0xf0) == 0xe0);
}
+/* If we can pull that's prefered */
+static gboolean
+gst_flups_demux_sink_activate (GstPad * sinkpad, GstObject * parent)
+{
+ gboolean res = FALSE;
+ GstQuery *query = gst_query_new_scheduling ();
+
+ if (gst_pad_peer_query (sinkpad, query)) {
+ if (gst_query_has_scheduling_mode_with_flags (query,
+ GST_PAD_MODE_PULL, GST_SCHEDULING_FLAG_SEEKABLE)) {
+ res = gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PULL, TRUE);
+ } else {
+ res = gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PUSH, TRUE);
+ }
+ } else {
+ res = gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PUSH, TRUE);
+ }
+
+ gst_query_unref (query);
+
+ return res;
+}
+
+/* This function gets called when we activate ourselves in push mode. */
+static gboolean
+gst_flups_demux_sink_activate_push (GstPad * sinkpad, GstObject * parent,
+ gboolean active)
+{
+ GstFluPSDemux *demux = GST_FLUPS_DEMUX (parent);
+
+ demux->random_access = FALSE;
+
+ return TRUE;
+}
+
+#if 0
+/* this function gets called when we activate ourselves in pull mode.
+ * We can perform random access to the resource and we start a task
+ * to start reading */
+static gboolean
+gst_flups_demux_sink_activate_pull (GstPad * sinkpad, GstObject * parent,
+ gboolean active)
+{
+ GstFluPSDemux *demux = GST_FLUPS_DEMUX (parent);
+
+ if (active) {
+ GST_DEBUG ("pull mode activated");
+ demux->random_access = TRUE;
+ return gst_pad_start_task (sinkpad, (GstTaskFunction) gst_flups_demux_loop,
+ sinkpad, NULL);
+ } else {
+ demux->random_access = FALSE;
+ return gst_pad_stop_task (sinkpad);
+ }
+}
+#endif
+
+static gboolean
+gst_flups_demux_sink_activate_mode (GstPad * pad, GstObject * parent,
+ GstPadMode mode, gboolean active)
+{
+ if (mode == GST_PAD_MODE_PUSH) {
+ return gst_flups_demux_sink_activate_push (pad, parent, active);
+ } else if (mode == GST_PAD_MODE_PULL) {
+// return gst_flups_demux_sink_activate_pull (pad, parent, active);
+ }
+ return FALSE;
+}
+
static GstFlowReturn
-gst_flups_demux_chain (GstPad * pad, GstBuffer * buffer)
+gst_flups_demux_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
{
- GstFluPSDemux *demux = GST_FLUPS_DEMUX (gst_pad_get_parent (pad));
+ GstFluPSDemux *demux = GST_FLUPS_DEMUX (parent);
GstFlowReturn ret = GST_FLOW_OK;
guint32 avail;
gboolean save, discont;
@@ -1906,7 +2132,7 @@ gst_flups_demux_chain (GstPad * pad, GstBuffer * buffer)
demux->adapter_offset = GST_BUFFER_OFFSET (buffer);
gst_adapter_push (demux->adapter, buffer);
- demux->bytes_since_scr += GST_BUFFER_SIZE (buffer);
+ demux->bytes_since_scr += gst_buffer_get_size (buffer);
avail = gst_adapter_available (demux->rev_adapter);
if (avail > 0) {
@@ -2006,8 +2232,6 @@ gst_flups_demux_chain (GstPad * pad, GstBuffer * buffer)
}
}
done:
- gst_object_unref (demux);
-
return ret;
}
@@ -2050,6 +2274,7 @@ gst_flups_demux_change_state (GstElement * element, GstStateChange transition)
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;
@@ -2075,10 +2300,20 @@ gst_flups_demux_change_state (GstElement * element, GstStateChange transition)
return result;
}
+static void
+gst_segment_set_position (GstSegment * segment, GstFormat format,
+ guint64 position)
+{
+ if (segment->format == GST_FORMAT_UNDEFINED) {
+ segment->format = format;
+ }
+ segment->position = position;
+}
+
gboolean
gst_flups_demux_plugin_init (GstPlugin * plugin)
{
- GST_DEBUG_CATEGORY_INIT (gstflupesfilter_debug, "rsnpesfilter", 0,
+ GST_DEBUG_CATEGORY_INIT (mpegpspesfilter_debug, "rsnpesfilter", 0,
"MPEG program stream PES filter debug");
GST_DEBUG_CATEGORY_INIT (gstflupsdemux_debug, "rsndvddemux", 0,
diff --git a/ext/resindvd/gstmpegdemux.h b/ext/resindvd/gstmpegdemux.h
index f6291500..186a6412 100644
--- a/ext/resindvd/gstmpegdemux.h
+++ b/ext/resindvd/gstmpegdemux.h
@@ -1,4 +1,10 @@
-/*
+/*
+ * This library is licensed under 2 different licenses and you
+ * can choose to use it under the terms of either one of them. The
+ * two licenses are the MPL 1.1 and the LGPL.
+ *
+ * MPL:
+ *
* The contents of this file are subject to the Mozilla Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
@@ -9,6 +15,23 @@
* License for the specific language governing rights and limitations
* under the License.
*
+ * LGPL:
+ *
+ * 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.
+ *
* The Original Code is Fluendo MPEG Demuxer plugin.
*
* The Initial Developer of the Original Code is Fluendo, S.L.
@@ -72,6 +95,9 @@ struct _GstFluPSDemux {
GstElement parent;
GstPad * sinkpad;
+ gboolean random_access; /* If we operate in pull mode */
+ gboolean flushing;
+ gboolean in_still;
GstAdapter * adapter;
GstAdapter * rev_adapter;
@@ -90,7 +116,7 @@ struct _GstFluPSDemux {
guint64 scr_rate_n;
guint64 scr_rate_d;
guint64 first_scr_offset;
- guint64 last_scr_offset;
+ guint64 cur_scr_offset;
gint16 psm[GST_FLUPS_DEMUX_MAX_PSM];
diff --git a/ext/resindvd/gstpesfilter.c b/ext/resindvd/gstpesfilter.c
index f2ccc784..d58c7260 100644
--- a/ext/resindvd/gstpesfilter.c
+++ b/ext/resindvd/gstpesfilter.c
@@ -1,23 +1,45 @@
-/*
- * The contents of this file are subject to the Mozilla Public License
- * Version 1.1 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/.
- *
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
- * License for the specific language governing rights and limitations
- * under the License.
- *
- * The Original Code is Fluendo MPEG Demuxer plugin.
- *
- * The Initial Developer of the Original Code is Fluendo, S.L.
- * Portions created by Fluendo, S.L. are Copyright (C) 2005
- * Fluendo, S.L. All Rights Reserved.
- *
- * Contributor(s): Wim Taymans <wim@fluendo.com>
- * Jan Schmidt <thaytan@noraisin.net>
- */
+ /*
+ * This library is licensed under 2 different licenses and you
+ * can choose to use it under the terms of either one of them. The
+ * two licenses are the MPL 1.1 and the LGPL.
+ *
+ * MPL:
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/.
+ *
+ * Software distributed under the License is distributed on an "AS IS"
+ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ *
+ * LGPL:
+ *
+ * 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.
+ *
+ * The Original Code is Fluendo MPEG Demuxer plugin.
+ *
+ * The Initial Developer of the Original Code is Fluendo, S.L.
+ * Portions created by Fluendo, S.L. are Copyright (C) 2005
+ * Fluendo, S.L. All Rights Reserved.
+ *
+ * Contributor(s): Wim Taymans <wim@fluendo.com>
+ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -26,8 +48,8 @@
#include "gstmpegdefs.h"
#include "gstpesfilter.h"
-GST_DEBUG_CATEGORY (gstflupesfilter_debug);
-#define GST_CAT_DEFAULT (gstflupesfilter_debug)
+GST_DEBUG_CATEGORY (mpegpspesfilter_debug);
+#define GST_CAT_DEFAULT (mpegpspesfilter_debug)
static GstFlowReturn gst_pes_filter_data_push (GstPESFilter * filter,
gboolean first, GstBuffer * buffer);
@@ -75,17 +97,6 @@ gst_pes_filter_set_callbacks (GstPESFilter * filter,
filter->user_data = user_data;
}
-/* sync:4 == 00xx ! pts:3 ! 1 ! pts:15 ! 1 | pts:15 ! 1 */
-#define READ_TS(data, target, lost_sync_label) \
- if ((*data & 0x01) != 0x01) goto lost_sync_label; \
- target = ((guint64) (*data++ & 0x0E)) << 29; \
- target |= ((guint64) (*data++ )) << 22; \
- if ((*data & 0x01) != 0x01) goto lost_sync_label; \
- target |= ((guint64) (*data++ & 0xFE)) << 14; \
- target |= ((guint64) (*data++ )) << 7; \
- if ((*data & 0x01) != 0x01) goto lost_sync_label; \
- target |= ((guint64) (*data++ & 0xFE)) >> 1;
-
static gboolean
gst_pes_filter_is_sync (guint32 sync)
{
@@ -101,15 +112,21 @@ gst_pes_filter_parse (GstPESFilter * filter)
GstFlowReturn ret;
guint32 start_code;
+ gboolean STD_buffer_bound_scale G_GNUC_UNUSED;
guint16 STD_buffer_size_bound;
const guint8 *data;
gint avail, datalen;
gboolean have_size = FALSE;
- /* read start code and length */
- if (!(data = gst_adapter_peek (filter->adapter, 6)))
+ avail = gst_adapter_available (filter->adapter);
+
+ if (avail < 6)
goto need_more_data;
+ data = gst_adapter_map (filter->adapter, 6);
+
+ /* read start code and length */
+
/* get start code */
start_code = GST_READ_UINT32_BE (data);
if (!gst_pes_filter_is_sync (start_code))
@@ -124,9 +141,6 @@ gst_pes_filter_parse (GstPESFilter * filter)
/* start parsing length */
filter->length = GST_READ_UINT16_BE (data);
- /* see how much is available */
- avail = gst_adapter_available (filter->adapter);
-
GST_DEBUG ("id 0x%02x length %d, avail %d start code 0x%02x", filter->id,
filter->length, avail, filter->start_code);
@@ -139,6 +153,7 @@ gst_pes_filter_parse (GstPESFilter * filter)
* to set the allow_unbounded flag if they want */
if (filter->length == 0 &&
((filter->start_code & 0xFFFFFFF0) == PACKET_VIDEO_START_CODE ||
+ filter->start_code == ID_EXTENDED_STREAM_ID ||
filter->allow_unbounded)) {
GST_DEBUG ("id 0x%02x, unbounded length", filter->id);
filter->unbounded_packet = TRUE;
@@ -155,10 +170,14 @@ gst_pes_filter_parse (GstPESFilter * filter)
avail = MIN (avail, filter->length + 6);
}
+ if (avail < 6)
+ goto need_more_data;
+
+ gst_adapter_unmap (filter->adapter);
+
/* read more data, either the whole packet if there is a length
* or whatever we have available if this in an unbounded packet. */
- if (!(data = gst_adapter_peek (filter->adapter, avail)))
- goto need_more_data;
+ data = gst_adapter_map (filter->adapter, avail);
/* This will make us flag LOST_SYNC if we run out of data from here onward */
have_size = TRUE;
@@ -177,7 +196,8 @@ gst_pes_filter_parse (GstPESFilter * filter)
case ID_PROGRAM_STREAM_DIRECTORY:
case ID_DSMCC_STREAM:
case ID_ITU_TREC_H222_TYPE_E_STREAM:
- goto skip;
+ /* Push directly out */
+ goto push_out;
case ID_PADDING_STREAM:
GST_DEBUG ("skipping padding stream");
goto skip;
@@ -185,9 +205,8 @@ gst_pes_filter_parse (GstPESFilter * filter)
break;
}
- if (datalen < 1)
+ if (datalen == 0)
goto need_more_data;
-
filter->pts = filter->dts = -1;
/* stuffing bits, first two bits are '10' for mpeg2 pes so this code is
@@ -212,7 +231,7 @@ gst_pes_filter_parse (GstPESFilter * filter)
if (datalen < 3)
goto need_more_data;
- /* STD_buffer_bound_scale = *data & 0x20; */
+ STD_buffer_bound_scale = *data & 0x20;
STD_buffer_size_bound = ((guint16) (*data++ & 0x1F)) << 8;
STD_buffer_size_bound |= *data++;
@@ -264,7 +283,7 @@ gst_pes_filter_parse (GstPESFilter * filter)
/* check PES scrambling control */
if ((flags & 0x30) != 0)
- goto encrypted;
+ GST_DEBUG ("PES scrambling control: %x", (flags >> 4) & 0x3);
/* 2: PTS_DTS_flags
* 1: ESCR_flag
@@ -376,9 +395,53 @@ gst_pes_filter_parse (GstPESFilter * filter)
}
/* PES_extension_flag */
if ((flags & 0x01)) {
- GST_DEBUG ("%x PES_extension", filter->id);
+ flags = *data++;
+ header_data_length -= 1;
+ datalen -= 1;
+ GST_DEBUG ("%x PES_extension, flags 0x%02x", filter->id, flags);
+ /* PES_private_data_flag */
+ if ((flags & 0x80)) {
+ GST_DEBUG ("%x PES_private_data_flag", filter->id);
+ data += 16;
+ header_data_length -= 16;
+ datalen -= 16;
+ }
+ /* pack_header_field_flag */
+ if ((flags & 0x40)) {
+ guint8 pack_field_length = *data;
+ GST_DEBUG ("%x pack_header_field_flag, pack_field_length %d",
+ filter->id, pack_field_length);
+ data += pack_field_length + 1;
+ header_data_length -= pack_field_length + 1;
+ datalen -= pack_field_length + 1;
+ }
+ /* program_packet_sequence_counter_flag */
+ if ((flags & 0x20)) {
+ GST_DEBUG ("%x program_packet_sequence_counter_flag", filter->id);
+ data += 2;
+ header_data_length -= 2;
+ datalen -= 2;
+ }
+ /* P-STD_buffer_flag */
+ if ((flags & 0x10)) {
+ GST_DEBUG ("%x P-STD_buffer_flag", filter->id);
+ data += 2;
+ header_data_length -= 2;
+ datalen -= 2;
+ }
+ /* PES_extension_flag_2 */
+ if ((flags & 0x01)) {
+ guint8 PES_extension_field_length = *data++;
+ GST_DEBUG ("%x PES_extension_flag_2, len %d",
+ filter->id, PES_extension_field_length & 0x7f);
+ if (PES_extension_field_length == 0x81) {
+ GST_DEBUG ("%x substream id 0x%02x", filter->id, *data);
+ }
+ data += PES_extension_field_length & 0x7f;
+ header_data_length -= (PES_extension_field_length & 0x7f) + 1;
+ datalen -= (PES_extension_field_length & 0x7f) + 1;
+ }
}
-
/* calculate the amount of real data in this PES packet */
data += header_data_length;
datalen -= header_data_length;
@@ -392,6 +455,7 @@ gst_pes_filter_parse (GstPESFilter * filter)
goto lost_sync;
}
+push_out:
{
GstBuffer *out;
guint16 consumed;
@@ -408,11 +472,8 @@ gst_pes_filter_parse (GstPESFilter * filter)
}
if (datalen > 0) {
- out = gst_buffer_new ();
- GST_BUFFER_DATA (out) = g_memdup (data, datalen);
- GST_BUFFER_SIZE (out) = datalen;
- GST_BUFFER_MALLOCDATA (out) = GST_BUFFER_DATA (out);
-
+ out = gst_buffer_new_allocate (NULL, datalen, NULL);
+ gst_buffer_fill (out, 0, data, datalen);
ret = gst_pes_filter_data_push (filter, TRUE, out);
filter->first = FALSE;
} else {
@@ -425,6 +486,7 @@ gst_pes_filter_parse (GstPESFilter * filter)
filter->state = STATE_DATA_PUSH;
}
+ gst_adapter_unmap (filter->adapter);
gst_adapter_flush (filter->adapter, avail);
ADAPTER_OFFSET_FLUSH (avail);
@@ -434,36 +496,27 @@ need_more_data:
{
if (filter->unbounded_packet == FALSE) {
if (have_size == TRUE) {
- GST_DEBUG ("bounded need more data %d, lost sync",
+ GST_DEBUG ("bounded need more data %" G_GSIZE_FORMAT " , lost sync",
gst_adapter_available (filter->adapter));
ret = GST_FLOW_LOST_SYNC;
} else {
- GST_DEBUG ("bounded need more data %d, breaking for more",
- gst_adapter_available (filter->adapter));
+ GST_DEBUG ("bounded need more data %" G_GSIZE_FORMAT
+ ", breaking for more", gst_adapter_available (filter->adapter));
ret = GST_FLOW_NEED_MORE_DATA;
}
} else {
- GST_DEBUG ("unbounded need more data %d",
+ GST_DEBUG ("unbounded need more data %" G_GSIZE_FORMAT,
gst_adapter_available (filter->adapter));
ret = GST_FLOW_NEED_MORE_DATA;
}
-
+ gst_adapter_unmap (filter->adapter);
return ret;
}
skip:
{
- GST_DEBUG ("skipping 0x%02x", filter->id);
- gst_adapter_flush (filter->adapter, avail);
- ADAPTER_OFFSET_FLUSH (avail);
+ gst_adapter_unmap (filter->adapter);
- filter->length -= avail - 6;
- if (filter->length > 0 || filter->unbounded_packet)
- filter->state = STATE_DATA_SKIP;
- return GST_FLOW_OK;
- }
-encrypted:
- {
- GST_DEBUG ("skipping encrypted 0x%02x", filter->id);
+ GST_DEBUG ("skipping 0x%02x", filter->id);
gst_adapter_flush (filter->adapter, avail);
ADAPTER_OFFSET_FLUSH (avail);
@@ -474,6 +527,7 @@ encrypted:
}
lost_sync:
{
+ gst_adapter_unmap (filter->adapter);
GST_DEBUG ("lost sync");
gst_adapter_flush (filter->adapter, 4);
ADAPTER_OFFSET_FLUSH (4);
@@ -562,14 +616,8 @@ gst_pes_filter_process (GstPESFilter * filter)
ret = GST_FLOW_OK;
} else {
GstBuffer *out;
- guint8 *data;
-
- data = gst_adapter_take (filter->adapter, avail);
- out = gst_buffer_new ();
- GST_BUFFER_DATA (out) = data;
- GST_BUFFER_SIZE (out) = avail;
- GST_BUFFER_MALLOCDATA (out) = data;
+ out = gst_adapter_take_buffer (filter->adapter, avail);
ret = gst_pes_filter_data_push (filter, filter->first, out);
filter->first = FALSE;
diff --git a/ext/resindvd/gstpesfilter.h b/ext/resindvd/gstpesfilter.h
index 27c618c2..ccc8461d 100644
--- a/ext/resindvd/gstpesfilter.h
+++ b/ext/resindvd/gstpesfilter.h
@@ -1,4 +1,10 @@
-/*
+/*
+ * This library is licensed under 2 different licenses and you
+ * can choose to use it under the terms of either one of them. The
+ * two licenses are the MPL 1.1 and the LGPL.
+ *
+ * MPL:
+ *
* The contents of this file are subject to the Mozilla Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
@@ -9,6 +15,23 @@
* License for the specific language governing rights and limitations
* under the License.
*
+ * LGPL:
+ *
+ * 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.
+ *
* The Original Code is Fluendo MPEG Demuxer plugin.
*
* The Initial Developer of the Original Code is Fluendo, S.L.
@@ -16,7 +39,6 @@
* Fluendo, S.L. All Rights Reserved.
*
* Contributor(s): Wim Taymans <wim@fluendo.com>
- * Jan Schmidt <thaytan@noraisin.net>
*/
#ifndef __GST_PES_FILTER_H__
@@ -62,8 +84,6 @@ struct _GstPESFilter {
gboolean unbounded_packet;
guint16 length;
- guint8 type;
-
gint64 pts;
gint64 dts;
};
diff --git a/ext/resindvd/plugin.c b/ext/resindvd/plugin.c
index ea939eb6..3b2ac6b4 100644
--- a/ext/resindvd/plugin.c
+++ b/ext/resindvd/plugin.c
@@ -35,7 +35,7 @@ plugin_init (GstPlugin * plugin)
{
gboolean result = TRUE;
- GST_DEBUG_CATEGORY_INIT (resindvd_debug, "resindvd elements",
+ GST_DEBUG_CATEGORY_INIT (resindvd_debug, "resindvd",
0, "DVD playback elements from resindvd");
#ifdef ENABLE_NLS
diff --git a/ext/resindvd/resindvdbin.c b/ext/resindvd/resindvdbin.c
index a83656d1..d173cac9 100644
--- a/ext/resindvd/resindvdbin.c
+++ b/ext/resindvd/resindvdbin.c
@@ -26,16 +26,20 @@
#include <gst/gst.h>
#include <gst/glib-compat-private.h>
#include <gst/pbutils/missing-plugins.h>
+#include <gst/video/video.h>
+#include <gst/audio/audio.h>
#include "resindvdbin.h"
#include "resindvdsrc.h"
-#include "rsnstreamselector.h"
-#include "rsnaudiomunge.h"
+#include "rsninputselector.h"
+// #include "rsnaudiomunge.h"
#include "rsndec.h"
-#include "rsnparsetter.h"
+// #include "rsnparsetter.h"
#include "gstmpegdemux.h"
+#define RSN_TYPE_INPUT_SELECTOR GST_TYPE_INPUT_SELECTOR
+
GST_DEBUG_CATEGORY_EXTERN (resindvd_debug);
#define GST_CAT_DEFAULT resindvd_debug
@@ -62,29 +66,29 @@ static GstStaticPadTemplate video_src_template =
GST_STATIC_PAD_TEMPLATE ("video",
GST_PAD_SRC,
GST_PAD_SOMETIMES,
- GST_STATIC_CAPS ("video/x-raw-yuv")
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE (GST_VIDEO_FORMATS_ALL))
);
static GstStaticPadTemplate audio_src_template =
- GST_STATIC_PAD_TEMPLATE ("audio",
+GST_STATIC_PAD_TEMPLATE ("audio",
GST_PAD_SRC,
GST_PAD_SOMETIMES,
- GST_STATIC_CAPS ("audio/x-raw-int; audio/x-raw-float")
+ GST_STATIC_CAPS (GST_AUDIO_CAPS_MAKE (GST_AUDIO_FORMATS_ALL))
);
static GstStaticPadTemplate subpicture_src_template =
GST_STATIC_PAD_TEMPLATE ("subpicture",
GST_PAD_SRC,
GST_PAD_SOMETIMES,
- GST_STATIC_CAPS ("video/x-dvd-subpicture")
+ GST_STATIC_CAPS ("subpicture/x-dvd")
);
-static void rsn_dvdbin_do_init (GType rsn_dvdbin_type);
static void rsn_dvdbin_finalize (GObject * object);
static void rsn_dvdbin_uri_handler_init (gpointer g_iface, gpointer iface_data);
-GST_BOILERPLATE_FULL (RsnDvdBin, rsn_dvdbin, GstBin,
- GST_TYPE_BIN, rsn_dvdbin_do_init);
+#define rsn_dvdbin_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (RsnDvdBin, rsn_dvdbin, GST_TYPE_BIN,
+ G_IMPLEMENT_INTERFACE (GST_TYPE_URI_HANDLER, rsn_dvdbin_uri_handler_init));
static void demux_pad_added (GstElement * element, GstPad * pad,
RsnDvdBin * dvdbin);
@@ -95,32 +99,16 @@ static void rsn_dvdbin_get_property (GObject * object, guint prop_id,
GValue * value, GParamSpec * pspec);
static GstStateChangeReturn rsn_dvdbin_change_state (GstElement * element,
GstStateChange transition);
-
-static void
-rsn_dvdbin_base_init (gpointer gclass)
-{
-
- GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
-
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&video_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&audio_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&subpicture_src_template));
- gst_element_class_set_details_simple (element_class, "rsndvdbin",
- "Generic/Bin/Player",
- "DVD playback element", "Jan Schmidt <thaytan@noraisin.net>");
-
- element_class->change_state = GST_DEBUG_FUNCPTR (rsn_dvdbin_change_state);
-}
+static void rsn_dvdbin_no_more_pads (RsnDvdBin * dvdbin);
static void
rsn_dvdbin_class_init (RsnDvdBinClass * klass)
{
GObjectClass *gobject_class;
+ GstElementClass *element_class;
gobject_class = (GObjectClass *) klass;
+ element_class = (GstElementClass *) klass;
gobject_class->finalize = rsn_dvdbin_finalize;
gobject_class->set_property = rsn_dvdbin_set_property;
@@ -129,23 +117,23 @@ rsn_dvdbin_class_init (RsnDvdBinClass * klass)
g_object_class_install_property (gobject_class, ARG_DEVICE,
g_param_spec_string ("device", "Device", "DVD device location",
NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-}
-static void
-rsn_dvdbin_do_init (GType rsn_dvdbin_type)
-{
- static const GInterfaceInfo urihandler_info = {
- rsn_dvdbin_uri_handler_init,
- NULL,
- NULL
- };
-
- g_type_add_interface_static (rsn_dvdbin_type, GST_TYPE_URI_HANDLER,
- &urihandler_info);
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&video_src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&audio_src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&subpicture_src_template));
+
+ element_class->change_state = GST_DEBUG_FUNCPTR (rsn_dvdbin_change_state);
+
+ gst_element_class_set_details_simple (element_class, "rsndvdbin",
+ "Generic/Bin/Player",
+ "DVD playback element", "Jan Schmidt <thaytan@noraisin.net>");
}
static void
-rsn_dvdbin_init (RsnDvdBin * dvdbin, RsnDvdBinClass * gclass)
+rsn_dvdbin_init (RsnDvdBin * dvdbin)
{
dvdbin->dvd_lock = g_mutex_new ();
dvdbin->preroll_lock = g_mutex_new ();
@@ -166,20 +154,20 @@ rsn_dvdbin_finalize (GObject * object)
/* URI interface */
static GstURIType
-rsn_dvdbin_uri_get_type (void)
+rsn_dvdbin_uri_get_type (GType type)
{
return GST_URI_SRC;
}
static const gchar *const *
-rsn_dvdbin_uri_get_protocols (void)
+rsn_dvdbin_uri_get_protocols (GType type)
{
static const gchar *protocols[] = { "dvd", NULL };
return protocols;
}
-static const gchar *
+static gchar *
rsn_dvdbin_uri_get_uri (GstURIHandler * handler)
{
RsnDvdBin *dvdbin = RESINDVDBIN (handler);
@@ -192,11 +180,12 @@ rsn_dvdbin_uri_get_uri (GstURIHandler * handler)
dvdbin->last_uri = g_strdup ("dvd://");
DVDBIN_UNLOCK (dvdbin);
- return dvdbin->last_uri;
+ return g_strdup (dvdbin->last_uri);
}
static gboolean
-rsn_dvdbin_uri_set_uri (GstURIHandler * handler, const gchar * uri)
+rsn_dvdbin_uri_set_uri (GstURIHandler * handler, const gchar * uri,
+ GError ** error)
{
RsnDvdBin *dvdbin = RESINDVDBIN (handler);
gboolean ret;
@@ -284,6 +273,21 @@ rsn_dvdbin_uri_handler_init (gpointer g_iface, gpointer iface_data)
iface->set_uri = rsn_dvdbin_uri_set_uri;
}
+static void
+rsn_dvdbin_no_more_pads (RsnDvdBin * dvdbin)
+{
+ if (dvdbin->did_no_more_pads)
+ return;
+ dvdbin->did_no_more_pads = TRUE;
+
+ GST_DEBUG_OBJECT (dvdbin, "Firing no more pads");
+ /* Shrink subpicture queue to smaller size */
+ g_object_set (dvdbin->pieces[DVD_ELEM_SPUQ],
+ "max-size-time", G_GUINT64_CONSTANT (0), "max-size-bytes", 0,
+ "max-size-buffers", 1, NULL);
+ gst_element_no_more_pads (GST_ELEMENT (dvdbin));
+}
+
static gboolean
try_create_piece (RsnDvdBin * dvdbin, gint index,
const gchar * factory, GType type, const gchar * name, const gchar * descr)
@@ -335,10 +339,12 @@ typedef struct
{
RsnDvdBin *dvdbin;
GstPad *pad;
+ gulong pad_block_id;
} RsnDvdBinPadBlockCtx;
-static void dvdbin_pad_blocked_cb (GstPad * pad, gboolean blocked,
- RsnDvdBinPadBlockCtx * ctx);
+static GstPadProbeReturn dvdbin_pad_blocked_cb (GstPad * pad,
+ GstPadProbeInfo * info, RsnDvdBinPadBlockCtx * ctx);
+
static void
_pad_block_destroy_notify (RsnDvdBinPadBlockCtx * ctx)
{
@@ -348,6 +354,29 @@ _pad_block_destroy_notify (RsnDvdBinPadBlockCtx * ctx)
}
static gboolean
+try_link_pieces (GstElement * e1, const gchar * pad1, GstElement * e2,
+ const gchar * pad2)
+{
+ GstPad *src = gst_element_get_static_pad (e1, pad1);
+ GstPad *sink = gst_element_get_static_pad (e2, pad2);
+ gboolean ret = FALSE;
+
+ if (src == NULL || sink == NULL)
+ goto done;
+
+ if (GST_PAD_LINK_FAILED (gst_pad_link (src, sink)))
+ goto done;
+
+ ret = TRUE;
+done:
+ if (src)
+ gst_object_unref (src);
+ if (sink)
+ gst_object_unref (sink);
+ return ret;
+}
+
+static gboolean
create_elements (RsnDvdBin * dvdbin)
{
GstPadTemplate *src_templ = NULL;
@@ -366,6 +395,7 @@ create_elements (RsnDvdBin * dvdbin)
"device", dvdbin->device, NULL);
}
+ /* FIXME: Import and use local copy of mpeg PS demuxer */
if (!try_create_piece (dvdbin, DVD_ELEM_DEMUX,
NULL, GST_TYPE_FLUPS_DEMUX, "dvddemux", "DVD demuxer"))
return FALSE;
@@ -381,7 +411,7 @@ create_elements (RsnDvdBin * dvdbin)
g_signal_connect (G_OBJECT (dvdbin->pieces[DVD_ELEM_DEMUX]), "no-more-pads",
G_CALLBACK (demux_no_more_pads), dvdbin);
- if (!try_create_piece (dvdbin, DVD_ELEM_MQUEUE, "multiqueue", 0, "mq",
+ if (!try_create_piece (dvdbin, DVD_ELEM_MQUEUE, "multiqueue", 0, "rsnmq",
"multiqueue"))
return FALSE;
@@ -389,15 +419,24 @@ create_elements (RsnDvdBin * dvdbin)
"max-size-time", (7 * GST_SECOND / 10), "max-size-bytes", 0,
"max-size-buffers", 0, NULL);
+ if (!try_create_piece (dvdbin, DVD_ELEM_VIDPARSE, "mpegvideoparse", 0,
+ "rsnvidparse", "video parser"))
+ return FALSE;
+
/* Decodebin will throw a missing element message to find an MPEG decoder */
if (!try_create_piece (dvdbin, DVD_ELEM_VIDDEC, NULL, RSN_TYPE_VIDEODEC,
- "viddec", "video decoder"))
+ "rsnviddec", "video decoder"))
return FALSE;
- if (!try_create_piece (dvdbin, DVD_ELEM_PARSET, NULL, RSN_TYPE_RSNPARSETTER,
+ /* FIXME: Replace identity */
+ if (!try_create_piece (dvdbin, DVD_ELEM_PARSET, "identity", 0, //RSN_TYPE_RSNPARSETTER,
"rsnparsetter", "Aspect ratio adjustment"))
return FALSE;
+ if (!try_link_pieces (dvdbin->pieces[DVD_ELEM_VIDPARSE], "src",
+ dvdbin->pieces[DVD_ELEM_VIDDEC], "sink"))
+ goto failed_vidparse_connect;
+
src = gst_element_get_static_pad (dvdbin->pieces[DVD_ELEM_VIDDEC], "src");
sink = gst_element_get_static_pad (dvdbin->pieces[DVD_ELEM_PARSET], "sink");
if (src == NULL || sink == NULL)
@@ -420,23 +459,29 @@ create_elements (RsnDvdBin * dvdbin)
bctx = g_slice_new (RsnDvdBinPadBlockCtx);
bctx->dvdbin = gst_object_ref (dvdbin);
bctx->pad = gst_object_ref (dvdbin->video_pad);
- gst_pad_set_blocked_async_full (src, TRUE,
- (GstPadBlockCallback) dvdbin_pad_blocked_cb, bctx, (GDestroyNotify)
+ bctx->pad_block_id =
+ gst_pad_add_probe (src, GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM,
+ (GstPadProbeCallback) dvdbin_pad_blocked_cb, bctx, (GDestroyNotify)
_pad_block_destroy_notify);
gst_object_unref (src);
src = NULL;
+ /* FIXME: Merge stream-selection logic to core and switch back */
if (!try_create_piece (dvdbin, DVD_ELEM_SPU_SELECT, NULL,
- RSN_TYPE_STREAM_SELECTOR, "subpselect", "Subpicture stream selector"))
+ RSN_TYPE_INPUT_SELECTOR, "subpselect", "Subpicture stream selector"))
return FALSE;
+ g_object_set (G_OBJECT (dvdbin->pieces[DVD_ELEM_SPU_SELECT]),
+ "sync-streams", FALSE, NULL);
+
/* Add a single standalone queue to hold a single buffer of SPU data */
if (!try_create_piece (dvdbin, DVD_ELEM_SPUQ, "queue", 0, "spu_q",
"subpicture decoder buffer"))
return FALSE;
+ /* Allow a lot more while pre-rolling */
g_object_set (dvdbin->pieces[DVD_ELEM_SPUQ],
"max-size-time", G_GUINT64_CONSTANT (0), "max-size-bytes", 0,
- "max-size-buffers", 1, NULL);
+ "max-size-buffers", 100, NULL);
src = gst_element_get_static_pad (dvdbin->pieces[DVD_ELEM_SPU_SELECT], "src");
sink = gst_element_get_static_pad (dvdbin->pieces[DVD_ELEM_SPUQ], "sink");
@@ -461,37 +506,25 @@ create_elements (RsnDvdBin * dvdbin)
bctx = g_slice_new (RsnDvdBinPadBlockCtx);
bctx->dvdbin = gst_object_ref (dvdbin);
bctx->pad = gst_object_ref (dvdbin->subpicture_pad);
- gst_pad_set_blocked_async_full (src, TRUE,
- (GstPadBlockCallback) dvdbin_pad_blocked_cb, bctx, (GDestroyNotify)
+ bctx->pad_block_id =
+ gst_pad_add_probe (src, GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM,
+ (GstPadProbeCallback) dvdbin_pad_blocked_cb, bctx, (GDestroyNotify)
_pad_block_destroy_notify);
gst_object_unref (src);
src = NULL;
if (!try_create_piece (dvdbin, DVD_ELEM_AUD_SELECT, NULL,
- RSN_TYPE_STREAM_SELECTOR, "audioselect", "Audio stream selector"))
- return FALSE;
-
- if (!try_create_piece (dvdbin, DVD_ELEM_AUD_MUNGE, NULL,
- RSN_TYPE_AUDIOMUNGE, "audioearlymunge", "Audio output filter"))
+ RSN_TYPE_INPUT_SELECTOR, "audioselect", "Audio stream selector"))
return FALSE;
+ g_object_set (G_OBJECT (dvdbin->pieces[DVD_ELEM_AUD_SELECT]),
+ "sync-streams", FALSE, NULL);
if (!try_create_piece (dvdbin, DVD_ELEM_AUDDEC, NULL,
RSN_TYPE_AUDIODEC, "auddec", "audio decoder"))
return FALSE;
- src = gst_element_get_static_pad (dvdbin->pieces[DVD_ELEM_AUD_MUNGE], "src");
- sink = gst_element_get_static_pad (dvdbin->pieces[DVD_ELEM_AUDDEC], "sink");
- if (src == NULL || sink == NULL)
- goto failed_aud_connect;
- if (GST_PAD_LINK_FAILED (gst_pad_link (src, sink)))
- goto failed_aud_connect;
- gst_object_unref (sink);
- gst_object_unref (src);
- src = sink = NULL;
-
src = gst_element_get_static_pad (dvdbin->pieces[DVD_ELEM_AUD_SELECT], "src");
- sink =
- gst_element_get_static_pad (dvdbin->pieces[DVD_ELEM_AUD_MUNGE], "sink");
+ sink = gst_element_get_static_pad (dvdbin->pieces[DVD_ELEM_AUDDEC], "sink");
if (src == NULL || sink == NULL)
goto failed_aud_connect;
if (GST_PAD_LINK_FAILED (gst_pad_link (src, sink)))
@@ -513,16 +546,16 @@ create_elements (RsnDvdBin * dvdbin)
bctx = g_slice_new (RsnDvdBinPadBlockCtx);
bctx->dvdbin = gst_object_ref (dvdbin);
bctx->pad = gst_object_ref (dvdbin->audio_pad);
- gst_pad_set_blocked_async_full (src, TRUE,
- (GstPadBlockCallback) dvdbin_pad_blocked_cb, bctx, (GDestroyNotify)
+ bctx->pad_block_id =
+ gst_pad_add_probe (src, GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM,
+ (GstPadProbeCallback) dvdbin_pad_blocked_cb, bctx, (GDestroyNotify)
_pad_block_destroy_notify);
gst_object_unref (src);
src = NULL;
if (dvdbin->video_added && (dvdbin->audio_added || dvdbin->audio_broken)
&& dvdbin->subpicture_added) {
- GST_DEBUG_OBJECT (dvdbin, "Firing no more pads");
- gst_element_no_more_pads (GST_ELEMENT (dvdbin));
+ rsn_dvdbin_no_more_pads (dvdbin);
}
return TRUE;
@@ -531,6 +564,10 @@ failed_connect:
GST_ELEMENT_ERROR (dvdbin, CORE, FAILED, (NULL),
("Could not connect DVD source and demuxer elements"));
goto error_out;
+failed_vidparse_connect:
+ GST_ELEMENT_ERROR (dvdbin, CORE, FAILED, (NULL),
+ ("Could not connect DVD video parser and video decoder"));
+ goto error_out;
failed_viddec_connect:
GST_ELEMENT_ERROR (dvdbin, CORE, FAILED, (NULL),
("Could not connect DVD video decoder and aspect ratio adjuster"));
@@ -613,6 +650,7 @@ remove_elements (RsnDvdBin * dvdbin)
dvdbin->video_added = dvdbin->audio_added = dvdbin->subpicture_added = FALSE;
dvdbin->audio_broken = FALSE;
dvdbin->video_pad = dvdbin->audio_pad = dvdbin->subpicture_pad = NULL;
+ dvdbin->did_no_more_pads = FALSE;
}
static GstPad *
@@ -634,7 +672,7 @@ connect_thru_mq (RsnDvdBin * dvdbin, GstPad * pad)
return FALSE;
sinkname = gst_pad_get_name (mq_sink);
- tmp = sinkname + 4;
+ tmp = sinkname + 5;
srcname = g_strdup_printf ("src_%s", tmp);
mq_src = gst_element_get_static_pad (dvdbin->pieces[DVD_ELEM_MQUEUE],
@@ -653,9 +691,9 @@ can_sink_caps (GstElement * e, GstCaps * caps)
GstPad *sink = gst_element_get_static_pad (e, "sink");
if (sink) {
- GstCaps *sink_caps = gst_pad_get_caps (sink);
+ GstCaps *sink_caps = gst_pad_query_caps (sink, caps);
if (sink_caps) {
- res = gst_caps_can_intersect (sink_caps, caps);
+ res = !gst_caps_is_empty (sink_caps);
gst_caps_unref (sink_caps);
}
gst_object_unref (sink);
@@ -675,7 +713,7 @@ demux_pad_added (GstElement * element, GstPad * pad, RsnDvdBin * dvdbin)
GST_DEBUG_OBJECT (dvdbin, "New pad: %" GST_PTR_FORMAT, pad);
- caps = gst_pad_get_caps (pad);
+ caps = gst_pad_query_caps (pad, NULL);
if (caps == NULL) {
GST_WARNING_OBJECT (dvdbin, "NULL caps from pad %" GST_PTR_FORMAT, pad);
return;
@@ -693,15 +731,18 @@ demux_pad_added (GstElement * element, GstPad * pad, RsnDvdBin * dvdbin)
s = gst_caps_get_structure (caps, 0);
g_return_if_fail (s != NULL);
- if (can_sink_caps (dvdbin->pieces[DVD_ELEM_VIDDEC], caps)) {
+ if (can_sink_caps (dvdbin->pieces[DVD_ELEM_VIDPARSE], caps)) {
+ GST_LOG_OBJECT (dvdbin, "Found video pad w/ caps %" GST_PTR_FORMAT, caps);
dest_pad =
- gst_element_get_static_pad (dvdbin->pieces[DVD_ELEM_VIDDEC], "sink");
- } else if (g_str_equal (gst_structure_get_name (s), "video/x-dvd-subpicture")) {
+ gst_element_get_static_pad (dvdbin->pieces[DVD_ELEM_VIDPARSE], "sink");
+ } else if (g_str_equal (gst_structure_get_name (s), "subpicture/x-dvd")) {
+ GST_LOG_OBJECT (dvdbin, "Found subpicture pad w/ caps %" GST_PTR_FORMAT,
+ caps);
dest_pad =
gst_element_get_request_pad (dvdbin->pieces[DVD_ELEM_SPU_SELECT],
"sink_%u");
skip_mq = TRUE;
- } else if (can_sink_caps (dvdbin->pieces[DVD_ELEM_AUD_MUNGE], caps)) {
+ } else if (can_sink_caps (dvdbin->pieces[DVD_ELEM_AUDDEC], caps)) {
GST_LOG_OBJECT (dvdbin, "Found audio pad w/ caps %" GST_PTR_FORMAT, caps);
dest_pad =
gst_element_get_request_pad (dvdbin->pieces[DVD_ELEM_AUD_SELECT],
@@ -720,7 +761,7 @@ demux_pad_added (GstElement * element, GstPad * pad, RsnDvdBin * dvdbin)
("No MPEG video decoder found"));
} else {
GST_ELEMENT_WARNING (dvdbin, STREAM, CODEC_NOT_FOUND, (NULL),
- ("No MPEG audio decoder found"));
+ ("No audio decoder found"));
}
}
@@ -763,6 +804,7 @@ demux_no_more_pads (GstElement * element, RsnDvdBin * dvdbin)
gboolean no_more_pads = FALSE;
guint n_audio_pads = 0;
+ GST_DEBUG_OBJECT (dvdbin, "Received no more pads from demuxer");
DVDBIN_PREROLL_LOCK (dvdbin);
g_object_get (dvdbin->pieces[DVD_ELEM_AUD_SELECT], "n-pads", &n_audio_pads,
@@ -777,25 +819,19 @@ demux_no_more_pads (GstElement * element, RsnDvdBin * dvdbin)
if (no_more_pads) {
GST_DEBUG_OBJECT (dvdbin,
"Firing no more pads from demuxer no-more-pads cb");
- gst_element_no_more_pads (GST_ELEMENT (dvdbin));
+ rsn_dvdbin_no_more_pads (dvdbin);
}
}
-static void
-dvdbin_pad_blocked_cb (GstPad * opad, gboolean blocked,
- RsnDvdBinPadBlockCtx * ctx)
+static GstPadProbeReturn
+dvdbin_pad_blocked_cb (GstPad * opad,
+ GstPadProbeInfo * info, RsnDvdBinPadBlockCtx * ctx)
{
RsnDvdBin *dvdbin;
GstPad *pad;
gboolean added_last_pad = FALSE;
gboolean added = FALSE;
- /* If not blocked ctx is NULL! */
- if (!blocked) {
- GST_DEBUG_OBJECT (opad, "Pad unblocked");
- return;
- }
-
dvdbin = ctx->dvdbin;
pad = ctx->pad;
@@ -812,8 +848,8 @@ dvdbin_pad_blocked_cb (GstPad * opad, gboolean blocked,
}
DVDBIN_PREROLL_UNLOCK (dvdbin);
- gst_pad_set_blocked_async (opad, FALSE,
- (GstPadBlockCallback) dvdbin_pad_blocked_cb, NULL);
+ if (ctx->pad_block_id)
+ gst_pad_remove_probe (opad, ctx->pad_block_id);
} else if (pad == dvdbin->audio_pad) {
GST_DEBUG_OBJECT (opad, "Pad block -> audio pad");
DVDBIN_PREROLL_LOCK (dvdbin);
@@ -826,8 +862,8 @@ dvdbin_pad_blocked_cb (GstPad * opad, gboolean blocked,
}
DVDBIN_PREROLL_UNLOCK (dvdbin);
- gst_pad_set_blocked_async (opad, FALSE,
- (GstPadBlockCallback) dvdbin_pad_blocked_cb, NULL);
+ if (ctx->pad_block_id)
+ gst_pad_remove_probe (opad, ctx->pad_block_id);
} else if (pad == dvdbin->video_pad) {
GST_DEBUG_OBJECT (opad, "Pad block -> video pad");
@@ -842,14 +878,16 @@ dvdbin_pad_blocked_cb (GstPad * opad, gboolean blocked,
}
DVDBIN_PREROLL_UNLOCK (dvdbin);
- gst_pad_set_blocked_async (opad, FALSE,
- (GstPadBlockCallback) dvdbin_pad_blocked_cb, NULL);
+ if (ctx->pad_block_id)
+ gst_pad_remove_probe (opad, ctx->pad_block_id);
}
if (added_last_pad) {
GST_DEBUG_OBJECT (dvdbin, "Firing no more pads from pad-blocked cb");
- gst_element_no_more_pads (GST_ELEMENT (dvdbin));
+ rsn_dvdbin_no_more_pads (dvdbin);
}
+
+ return GST_PAD_PROBE_OK;
}
static void
diff --git a/ext/resindvd/resindvdbin.h b/ext/resindvd/resindvdbin.h
index 29d51b80..f2e5d94d 100644
--- a/ext/resindvd/resindvdbin.h
+++ b/ext/resindvd/resindvdbin.h
@@ -43,14 +43,15 @@ typedef struct _RsnDvdBinClass RsnDvdBinClass;
#define DVD_ELEM_DEMUX 1
#define DVD_ELEM_MQUEUE 2
#define DVD_ELEM_SPUQ 3
-#define DVD_ELEM_VIDDEC 4
-#define DVD_ELEM_PARSET 5
-#define DVD_ELEM_AUDDEC 6
-#define DVD_ELEM_VIDQ 7
-#define DVD_ELEM_SPU_SELECT 8
-#define DVD_ELEM_AUD_SELECT 9
-#define DVD_ELEM_AUD_MUNGE 10
-#define DVD_ELEM_LAST 11
+#define DVD_ELEM_VIDPARSE 4
+#define DVD_ELEM_VIDDEC 5
+#define DVD_ELEM_PARSET 6
+#define DVD_ELEM_AUDPARSE 7
+#define DVD_ELEM_AUDDEC 8
+#define DVD_ELEM_VIDQ 9
+#define DVD_ELEM_SPU_SELECT 10
+#define DVD_ELEM_AUD_SELECT 11
+#define DVD_ELEM_LAST 12
struct _RsnDvdBin
{
@@ -73,6 +74,8 @@ struct _RsnDvdBin
gboolean audio_broken;
gboolean subpicture_added;
+ gboolean did_no_more_pads;
+
GList *mq_req_pads;
};
diff --git a/ext/resindvd/resindvdsrc.c b/ext/resindvd/resindvdsrc.c
index fff79b22..58d3c6fa 100644
--- a/ext/resindvd/resindvdsrc.c
+++ b/ext/resindvd/resindvdsrc.c
@@ -24,11 +24,12 @@
#include <stdio.h>
#include <string.h>
+#include <gmodule.h>
#include <gst/gst.h>
#include <gst/glib-compat-private.h>
#include <gst/gst-i18n-plugin.h>
-#include <gst/interfaces/navigation.h>
#include <gst/video/video.h>
+#include <gst/video/navigation.h>
#include "resindvdsrc.h"
@@ -89,6 +90,7 @@ typedef struct
static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
+ // GST_STATIC_CAPS ("video/mpeg,mpegversion=2,systemstream=true")
GST_STATIC_CAPS ("application/x-resin-dvd")
);
@@ -100,8 +102,9 @@ static GstFormat chapter_format;
static void rsn_dvdsrc_register_extra (GType rsn_dvdsrc_type);
-GST_BOILERPLATE_FULL (resinDvdSrc, rsn_dvdsrc, GstBaseSrc,
- GST_TYPE_BASE_SRC, rsn_dvdsrc_register_extra);
+#define rsn_dvdsrc_parent_class parent_class
+G_DEFINE_TYPE_EXTENDED (resinDvdSrc, rsn_dvdsrc, GST_TYPE_BASE_SRC,
+ 0, rsn_dvdsrc_register_extra (g_define_type_id));
static gboolean read_vts_info (resinDvdSrc * src);
@@ -118,11 +121,11 @@ static gboolean rsn_dvdsrc_unlock (GstBaseSrc * bsrc);
static gboolean rsn_dvdsrc_unlock_stop (GstBaseSrc * bsrc);
static gboolean rsn_dvdsrc_is_seekable (GstBaseSrc * bsrc);
-static gboolean rsn_dvdsrc_prepare_seek (GstBaseSrc * bsrc, GstEvent * event,
- GstSegment * segment);
+static gboolean rsn_dvdsrc_prepare_seek (GstBaseSrc * bsrc,
+ GstEvent * event, GstSegment * segment);
static gboolean rsn_dvdsrc_do_seek (GstBaseSrc * bsrc, GstSegment * segment);
-static GstStateChangeReturn
-rsn_dvdsrc_change_state (GstElement * element, GstStateChange transition);
+static GstStateChangeReturn rsn_dvdsrc_change_state (GstElement * element,
+ GstStateChange transition);
static void rsn_dvdsrc_prepare_spu_stream_event (resinDvdSrc * src,
guint8 logical_stream, guint8 phys_stream, gboolean forced_only);
@@ -142,7 +145,6 @@ static void rsn_dvdsrc_check_nav_blocks (resinDvdSrc * src);
static void rsn_dvdsrc_schedule_nav_cb (resinDvdSrc * src,
RsnDvdPendingNav * next_nav);
-static gboolean rsn_dvdsrc_check_get_range (GstBaseSrc * src);
static GstFlowReturn rsn_dvdsrc_create (GstBaseSrc * bsrc, guint64 offset,
guint length, GstBuffer ** buf);
static gboolean rsn_dvdsrc_src_event (GstBaseSrc * basesrc, GstEvent * event);
@@ -189,18 +191,6 @@ rsn_dvdsrc_register_extra (GType rsn_dvdsrc_type)
}
static void
-rsn_dvdsrc_base_init (gpointer gclass)
-{
-
- GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
-
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&src_factory));
- gst_element_class_set_details_simple (element_class, "Resin DVD Src",
- "Source/DVD", "DVD source element", "Jan Schmidt <thaytan@noraisin.net>");
-}
-
-static void
rsn_dvdsrc_class_init (resinDvdSrcClass * klass)
{
GObjectClass *gobject_class;
@@ -228,8 +218,6 @@ rsn_dvdsrc_class_init (resinDvdSrcClass * klass)
GST_DEBUG_FUNCPTR (rsn_dvdsrc_prepare_seek);
gstbasesrc_class->do_seek = GST_DEBUG_FUNCPTR (rsn_dvdsrc_do_seek);
- gstbasesrc_class->check_get_range =
- GST_DEBUG_FUNCPTR (rsn_dvdsrc_check_get_range);
gstbasesrc_class->create = GST_DEBUG_FUNCPTR (rsn_dvdsrc_create);
g_object_class_install_property (gobject_class, ARG_DEVICE,
@@ -240,10 +228,15 @@ rsn_dvdsrc_class_init (resinDvdSrcClass * klass)
g_param_spec_boolean ("fast-start", "Fast start",
"Skip straight to the DVD menu on start", DEFAULT_FASTSTART,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&src_factory));
+ gst_element_class_set_details_simple (gstelement_class, "Resin DVD Src",
+ "Source/DVD", "DVD source element", "Jan Schmidt <thaytan@noraisin.net>");
}
static void
-rsn_dvdsrc_init (resinDvdSrc * rsndvdsrc, resinDvdSrcClass * gclass)
+rsn_dvdsrc_init (resinDvdSrc * rsndvdsrc)
{
const gchar *envvar;
@@ -637,11 +630,9 @@ rsn_dvdsrc_do_still (resinDvdSrc * src, int duration)
* event, then sleep */
still_event = gst_video_event_new_still_frame (TRUE);
- gst_segment_set_last_stop (segment, GST_FORMAT_TIME, src->cur_end_ts);
+ segment->stop = segment->position = src->cur_end_ts;
- seg_event = gst_event_new_new_segment_full (TRUE,
- segment->rate, segment->applied_rate, segment->format,
- segment->start, segment->last_stop, segment->time);
+ seg_event = gst_event_new_segment (segment);
/* Grab any pending highlight event to send too */
hl_event = src->highlight_event;
@@ -757,9 +748,8 @@ rsn_dvdsrc_do_still (resinDvdSrc * src, int duration)
still_event = gst_video_event_new_still_frame (FALSE);
/* If the segment was too short in a timed still, it may need extending */
- if (segment->last_stop < segment->start + GST_SECOND * duration)
- gst_segment_set_last_stop (segment, GST_FORMAT_TIME,
- segment->start + (GST_SECOND * duration));
+ if (segment->position < segment->start + GST_SECOND * duration)
+ segment->position = segment->start + (GST_SECOND * duration);
g_mutex_unlock (src->dvd_lock);
gst_pad_push_event (GST_BASE_SRC_PAD (src), still_event);
@@ -875,9 +865,7 @@ update_title_info (resinDvdSrc * src, gboolean force)
}
}
if (title_str) {
- GstTagList *tags = gst_tag_list_new ();
- gst_tag_list_add (tags, GST_TAG_MERGE_REPLACE, GST_TAG_TITLE,
- title_str, NULL);
+ GstTagList *tags = gst_tag_list_new (GST_TAG_TITLE, title_str, NULL);
g_free (title_str);
return tags;
}
@@ -910,19 +898,18 @@ rsn_dvdsrc_step (resinDvdSrc * src, gboolean have_dvd_lock)
{
GstFlowReturn ret = GST_FLOW_OK;
dvdnav_status_t dvdnav_ret;
- guint8 *data;
gint event, len;
+ GstMapInfo mmap;
/* Allocate an output buffer if there isn't a pending one */
- if (src->alloc_buf == NULL) {
- src->alloc_buf = gst_buffer_new_and_alloc (DVD_VIDEO_LB_LEN);
- gst_buffer_set_caps (src->alloc_buf, GST_PAD_CAPS (GST_BASE_SRC_PAD (src)));
- }
+ if (src->alloc_buf == NULL)
+ src->alloc_buf = gst_buffer_new_allocate (NULL, DVD_VIDEO_LB_LEN, NULL);
+
+ gst_buffer_map (src->alloc_buf, &mmap, GST_MAP_WRITE);
- data = GST_BUFFER_DATA (src->alloc_buf);
len = DVD_VIDEO_LB_LEN;
- dvdnav_ret = dvdnav_get_next_block (src->dvdnav, data, &event, &len);
+ dvdnav_ret = dvdnav_get_next_block (src->dvdnav, mmap.data, &event, &len);
if (dvdnav_ret != DVDNAV_STATUS_OK)
goto read_error;
g_mutex_lock (src->branch_lock);
@@ -933,10 +920,12 @@ rsn_dvdsrc_step (resinDvdSrc * src, gboolean have_dvd_lock)
switch (event) {
case DVDNAV_BLOCK_OK:
/* Data block that needs outputting */
+ gst_buffer_unmap (src->alloc_buf, &mmap);
src->next_buf = src->alloc_buf;
+ src->alloc_buf = NULL;
+
src->next_is_nav_block = FALSE;
src->next_nav_ts = GST_CLOCK_TIME_NONE;
- src->alloc_buf = NULL;
src->in_still_state = FALSE;
break;
case DVDNAV_NAV_PACKET:
@@ -988,6 +977,7 @@ rsn_dvdsrc_step (resinDvdSrc * src, gboolean have_dvd_lock)
src->cur_vobu_base_ts = new_base_time;
/* NAV packet is also a data block that needs sending */
+ gst_buffer_unmap (src->alloc_buf, &mmap);
src->next_buf = src->alloc_buf;
src->alloc_buf = NULL;
@@ -1011,11 +1001,11 @@ rsn_dvdsrc_step (resinDvdSrc * src, gboolean have_dvd_lock)
case DVDNAV_STOP:
/* End of the disc. EOS */
dvdnav_reset (src->dvdnav);
- ret = GST_FLOW_UNEXPECTED;
+ ret = GST_FLOW_EOS;
break;
case DVDNAV_STILL_FRAME:
{
- dvdnav_still_event_t *info = (dvdnav_still_event_t *) data;
+ dvdnav_still_event_t *info = (dvdnav_still_event_t *) mmap.data;
if (!have_dvd_lock) {
/* At a still frame but can't block, handle it later */
@@ -1042,7 +1032,8 @@ rsn_dvdsrc_step (resinDvdSrc * src, gboolean have_dvd_lock)
goto internal_error;
break;
case DVDNAV_CELL_CHANGE:{
- dvdnav_cell_change_event_t *event = (dvdnav_cell_change_event_t *) data;
+ dvdnav_cell_change_event_t *event =
+ (dvdnav_cell_change_event_t *) mmap.data;
GstMessage *message;
src->pgc_duration = MPEGTIME_TO_GSTTIME (event->pgc_length);
@@ -1057,8 +1048,7 @@ rsn_dvdsrc_step (resinDvdSrc * src, gboolean have_dvd_lock)
GST_TIME_FORMAT, GST_TIME_ARGS (src->pgc_duration),
GST_TIME_ARGS (src->cur_position));
- message = gst_message_new_duration (GST_OBJECT (src), GST_FORMAT_TIME,
- src->pgc_duration);
+ message = gst_message_new_duration_changed (GST_OBJECT (src));
gst_element_post_message (GST_ELEMENT (src), message);
rsn_dvdsrc_prepare_streamsinfo_event (src);
@@ -1067,10 +1057,11 @@ rsn_dvdsrc_step (resinDvdSrc * src, gboolean have_dvd_lock)
break;
}
case DVDNAV_SPU_CLUT_CHANGE:
- rsn_dvdsrc_prepare_clut_change_event (src, (const guint32 *) data);
+ rsn_dvdsrc_prepare_clut_change_event (src, (const guint32 *) mmap.data);
break;
case DVDNAV_VTS_CHANGE:{
- dvdnav_vts_change_event_t *event = (dvdnav_vts_change_event_t *) data;
+ dvdnav_vts_change_event_t *event =
+ (dvdnav_vts_change_event_t *) mmap.data;
if (dvdnav_is_domain_vmgm (src->dvdnav)) {
src->vts_n = 0;
@@ -1089,7 +1080,7 @@ rsn_dvdsrc_step (resinDvdSrc * src, gboolean have_dvd_lock)
}
case DVDNAV_AUDIO_STREAM_CHANGE:{
dvdnav_audio_stream_change_event_t *event =
- (dvdnav_audio_stream_change_event_t *) data;
+ (dvdnav_audio_stream_change_event_t *) mmap.data;
rsn_dvdsrc_prepare_audio_stream_event (src,
event->logical, event->physical);
@@ -1100,7 +1091,7 @@ rsn_dvdsrc_step (resinDvdSrc * src, gboolean have_dvd_lock)
}
case DVDNAV_SPU_STREAM_CHANGE:{
dvdnav_spu_stream_change_event_t *event =
- (dvdnav_spu_stream_change_event_t *) data;
+ (dvdnav_spu_stream_change_event_t *) mmap.data;
gint phys_track = event->physical_wide & 0x1f;
gboolean forced_only = (event->physical_wide & 0x80) ? TRUE : FALSE;
@@ -1117,7 +1108,7 @@ rsn_dvdsrc_step (resinDvdSrc * src, gboolean have_dvd_lock)
}
case DVDNAV_HIGHLIGHT:{
GST_DEBUG_OBJECT (src, "highlight change event, button %d",
- ((dvdnav_highlight_event_t *) data)->buttonN);
+ ((dvdnav_highlight_event_t *) mmap.data)->buttonN);
rsn_dvdsrc_update_highlight (src);
break;
}
@@ -1131,6 +1122,9 @@ rsn_dvdsrc_step (resinDvdSrc * src, gboolean have_dvd_lock)
GST_WARNING_OBJECT (src, "Unknown dvdnav event %d", event);
break;
}
+ if (src->alloc_buf) {
+ gst_buffer_unmap (src->alloc_buf, &mmap);
+ }
if (src->highlight_event && have_dvd_lock && src->in_playing) {
GstEvent *hl_event = src->highlight_event;
@@ -1148,6 +1142,7 @@ rsn_dvdsrc_step (resinDvdSrc * src, gboolean have_dvd_lock)
/* ERRORS */
read_error:
{
+ gst_buffer_unmap (src->alloc_buf, &mmap);
if (!rsn_descrambler_available ()) {
GST_ELEMENT_ERROR (src, RESOURCE, READ,
(_("Could not read DVD. This may be because the DVD is encrypted "
@@ -1163,6 +1158,7 @@ read_error:
}
internal_error:
{
+ gst_buffer_unmap (src->alloc_buf, &mmap);
GST_ELEMENT_ERROR (src, RESOURCE, READ, (_("Could not read DVD.")),
("Internal error processing DVD commands. Error: %s",
dvdnav_err_to_string (src->dvdnav)));
@@ -1171,6 +1167,7 @@ internal_error:
branching:
{
g_mutex_unlock (src->branch_lock);
+ gst_buffer_unmap (src->alloc_buf, &mmap);
return GST_FLOW_FLUSHING;
}
}
@@ -1288,14 +1285,6 @@ rsn_dvdsrc_prepare_next_block (resinDvdSrc * src, gboolean have_dvd_lock)
return ret;
}
-static gboolean
-rsn_dvdsrc_check_get_range (GstBaseSrc * src)
-{
- /* ResinDVD never operates in pull mode. There might be
- * a reason to in the future though? */
- return FALSE;
-}
-
static GstFlowReturn
rsn_dvdsrc_create (GstBaseSrc * bsrc, guint64 offset,
guint length, GstBuffer ** outbuf)
@@ -1396,11 +1385,11 @@ rsn_dvdsrc_create (GstBaseSrc * bsrc, guint64 offset,
}
if (src->cur_end_ts != GST_CLOCK_TIME_NONE)
- gst_segment_set_last_stop (segment, GST_FORMAT_TIME, src->cur_end_ts);
+ segment->position = src->cur_end_ts;
if (tags) {
- gst_element_found_tags_for_pad (GST_ELEMENT_CAST (src),
- GST_BASE_SRC_PAD (src), tags);
+ GstEvent *tag_event = gst_event_new_tag (tags);
+ gst_pad_push_event (GST_BASE_SRC_PAD (src), tag_event);
tags = NULL;
}
g_mutex_lock (src->dvd_lock);
@@ -2254,7 +2243,15 @@ rsn_dvdsrc_activate_nav_block (resinDvdSrc * src, GstBuffer * nav_buf)
{
int32_t forced_button;
- navRead_PCI (&src->cur_pci, GST_BUFFER_DATA (nav_buf) + 0x2d);
+ {
+ GstMapInfo mmap;
+ gst_buffer_map (nav_buf, &mmap, GST_MAP_READ);
+
+ navRead_PCI (&src->cur_pci, mmap.data + 0x2d);
+
+ gst_buffer_unmap (nav_buf, &mmap);
+ }
+
src->have_pci = TRUE;
forced_button = src->cur_pci.hli.hl_gi.fosl_btnn & 0x3f;
@@ -2374,7 +2371,8 @@ rsn_dvdsrc_schedule_nav_cb (resinDvdSrc * src, RsnDvdPendingNav * next_nav)
GST_TIME_ARGS (next_nav->running_ts));
g_mutex_unlock (src->dvd_lock);
- gst_clock_id_wait_async (src->nav_clock_id, rsn_dvdsrc_nav_clock_cb, src);
+ gst_clock_id_wait_async (src->nav_clock_id, rsn_dvdsrc_nav_clock_cb, src,
+ NULL);
gst_object_unref (clock);
g_mutex_lock (src->dvd_lock);
}
@@ -2615,6 +2613,16 @@ rsn_dvdsrc_src_query (GstBaseSrc * basesrc, GstQuery * query)
res = GST_BASE_SRC_CLASS (parent_class)->query (basesrc, query);
break;
}
+ case GST_QUERY_SCHEDULING:
+ {
+ /* Make sure we operate in pull mode */
+ gst_query_set_scheduling (query, GST_SCHEDULING_FLAG_SEQUENTIAL, 1, -1,
+ 0);
+ gst_query_add_scheduling_mode (query, GST_PAD_MODE_PUSH);
+
+ res = TRUE;
+ break;
+ }
default:
res = GST_BASE_SRC_CLASS (parent_class)->query (basesrc, query);
break;
@@ -2653,7 +2661,7 @@ rsn_dvdsrc_prepare_seek (GstBaseSrc * bsrc, GstEvent * event,
/* Seeks in our internal formats are passed directly through to the do_seek
* method. */
gst_segment_init (segment, seek_format);
- gst_segment_set_seek (segment, rate, seek_format, flags, cur_type, cur,
+ gst_segment_do_seek (segment, rate, seek_format, flags, cur_type, cur,
stop_type, stop, &update);
return TRUE;
@@ -2898,7 +2906,7 @@ rsn_dvdsrc_do_seek (GstBaseSrc * bsrc, GstSegment * segment)
segment->format = GST_FORMAT_TIME;
/* The first TS output: */
- segment->last_stop = segment->start = src->cur_start_ts;
+ segment->position = segment->start = src->cur_start_ts;
/* time field = position is the 'logical' stream time here: */
segment->time = 0;
diff --git a/ext/resindvd/rsnaudiomunge.c b/ext/resindvd/rsnaudiomunge.c
deleted file mode 100644
index 2b78dfea..00000000
--- a/ext/resindvd/rsnaudiomunge.c
+++ /dev/null
@@ -1,364 +0,0 @@
-/* GStreamer
- * Copyright (C) 2008 Jan Schmidt <thaytan@noraisin.net>
- *
- * 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 <string.h>
-
-#include <gst/gst.h>
-#include <gst/video/video.h>
-
-#include "rsnaudiomunge.h"
-
-GST_DEBUG_CATEGORY_STATIC (rsn_audiomunge_debug);
-#define GST_CAT_DEFAULT rsn_audiomunge_debug
-
-#define AUDIO_FILL_THRESHOLD (GST_SECOND/5)
-
-/* Filter signals and args */
-enum
-{
- /* FILL ME */
- LAST_SIGNAL
-};
-
-enum
-{
- PROP_0,
- PROP_SILENT
-};
-
-/* the capabilities of the inputs and outputs.
- *
- * describe the real formats here.
- */
-static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
- GST_PAD_SINK,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("ANY")
- );
-
-static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
- GST_PAD_SRC,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("ANY")
- );
-
-G_DEFINE_TYPE (RsnAudioMunge, rsn_audiomunge, GST_TYPE_ELEMENT);
-
-static void rsn_audiomunge_set_property (GObject * object, guint prop_id,
- const GValue * value, GParamSpec * pspec);
-static void rsn_audiomunge_get_property (GObject * object, guint prop_id,
- GValue * value, GParamSpec * pspec);
-
-static gboolean rsn_audiomunge_set_caps (GstPad * pad, GstCaps * caps);
-static GstFlowReturn rsn_audiomunge_chain (GstPad * pad, GstBuffer * buf);
-static gboolean rsn_audiomunge_sink_event (GstPad * pad, GstEvent * event);
-
-static GstStateChangeReturn
-rsn_audiomunge_change_state (GstElement * element, GstStateChange transition);
-
-static void
-rsn_audiomunge_class_init (RsnAudioMungeClass * klass)
-{
- GObjectClass *gobject_class = (GObjectClass *) (klass);
- GstElementClass *element_class = (GstElementClass *) (klass);
-
- GST_DEBUG_CATEGORY_INIT (rsn_audiomunge_debug, "rsnaudiomunge",
- 0, "ResinDVD audio stream regulator");
-
- gst_element_class_add_pad_template (element_class,
- 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_details_simple (element_class, "RsnAudioMunge",
- "Audio/Filter",
- "Resin DVD audio stream regulator", "Jan Schmidt <thaytan@noraisin.net>");
-
- gobject_class->set_property = rsn_audiomunge_set_property;
- gobject_class->get_property = rsn_audiomunge_get_property;
-
- element_class->change_state = rsn_audiomunge_change_state;
-}
-
-static void
-rsn_audiomunge_init (RsnAudioMunge * munge)
-{
- munge->sinkpad = gst_pad_new_from_static_template (&sink_template, "sink");
- gst_pad_set_setcaps_function (munge->sinkpad,
- GST_DEBUG_FUNCPTR (rsn_audiomunge_set_caps));
- gst_pad_set_getcaps_function (munge->sinkpad,
- GST_DEBUG_FUNCPTR (gst_pad_proxy_getcaps));
- gst_pad_set_chain_function (munge->sinkpad,
- GST_DEBUG_FUNCPTR (rsn_audiomunge_chain));
- gst_pad_set_event_function (munge->sinkpad,
- GST_DEBUG_FUNCPTR (rsn_audiomunge_sink_event));
- gst_element_add_pad (GST_ELEMENT (munge), munge->sinkpad);
-
- munge->srcpad = gst_pad_new_from_static_template (&src_template, "src");
- gst_pad_set_getcaps_function (munge->srcpad,
- GST_DEBUG_FUNCPTR (gst_pad_proxy_getcaps));
- gst_element_add_pad (GST_ELEMENT (munge), munge->srcpad);
-}
-
-static void
-rsn_audiomunge_set_property (GObject * object, guint prop_id,
- const GValue * value, GParamSpec * pspec)
-{
- //RsnAudioMunge *munge = RSN_AUDIOMUNGE (object);
-
- switch (prop_id) {
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-rsn_audiomunge_get_property (GObject * object, guint prop_id,
- GValue * value, GParamSpec * pspec)
-{
- //RsnAudioMunge *munge = RSN_AUDIOMUNGE (object);
-
- switch (prop_id) {
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static gboolean
-rsn_audiomunge_set_caps (GstPad * pad, GstCaps * caps)
-{
- RsnAudioMunge *munge = RSN_AUDIOMUNGE (gst_pad_get_parent (pad));
- GstPad *otherpad;
- gboolean ret;
-
- g_return_val_if_fail (munge != NULL, FALSE);
-
- otherpad = (pad == munge->srcpad) ? munge->sinkpad : munge->srcpad;
-
- ret = gst_pad_set_caps (otherpad, caps);
- gst_object_unref (munge);
- return ret;
-}
-
-static void
-rsn_audiomunge_reset (RsnAudioMunge * munge)
-{
- munge->have_audio = FALSE;
- munge->in_still = FALSE;
- gst_segment_init (&munge->sink_segment, GST_FORMAT_TIME);
-}
-
-static GstFlowReturn
-rsn_audiomunge_chain (GstPad * pad, GstBuffer * buf)
-{
- RsnAudioMunge *munge = RSN_AUDIOMUNGE (GST_OBJECT_PARENT (pad));
-
- if (!munge->have_audio) {
- GST_INFO_OBJECT (munge,
- "First audio after flush has TS %" GST_TIME_FORMAT,
- GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
- }
-
- munge->have_audio = TRUE;
-
- /* just push out the incoming buffer without touching it */
- return gst_pad_push (munge->srcpad, buf);
-}
-
-/* Create and send a silence buffer downstream */
-static GstFlowReturn
-rsn_audiomunge_make_audio (RsnAudioMunge * munge,
- GstClockTime start, GstClockTime fill_time)
-{
- GstFlowReturn ret;
- GstBuffer *audio_buf;
- GstCaps *caps;
- guint buf_size;
-
- /* Just generate a 48khz stereo buffer for now */
- /* FIXME: Adapt to the allowed formats, according to the currently
- * plugged decoder, or at least add a source pad that accepts the
- * caps we're outputting if the upstream decoder does not */
-#if 0
- caps =
- gst_caps_from_string
- ("audio/x-raw-int,rate=48000,channels=2,width=16,depth=16,signed=(boolean)true,endianness=4321");
- buf_size = 4 * (48000 * fill_time / GST_SECOND);
-#else
- caps = gst_caps_from_string ("audio/x-raw-float, endianness=(int)1234,"
- "width=(int)32, channels=(int)2, rate=(int)48000");
- buf_size = 2 * 4 * (48000 * fill_time / GST_SECOND);
-#endif
-
- audio_buf = gst_buffer_new_and_alloc (buf_size);
-
- gst_buffer_set_caps (audio_buf, caps);
- gst_caps_unref (caps);
-
- GST_BUFFER_TIMESTAMP (audio_buf) = start;
- GST_BUFFER_DURATION (audio_buf) = fill_time;
- GST_BUFFER_FLAG_SET (audio_buf, GST_BUFFER_FLAG_DISCONT);
-
- memset (GST_BUFFER_DATA (audio_buf), 0, buf_size);
-
- GST_LOG_OBJECT (munge, "Sending %u bytes (%" GST_TIME_FORMAT
- ") of audio data with TS %" GST_TIME_FORMAT,
- buf_size, GST_TIME_ARGS (fill_time), GST_TIME_ARGS (start));
-
- ret = gst_pad_push (munge->srcpad, audio_buf);
-
- return ret;
-}
-
-static gboolean
-rsn_audiomunge_sink_event (GstPad * pad, GstEvent * event)
-{
- gboolean ret = FALSE;
- RsnAudioMunge *munge = RSN_AUDIOMUNGE (gst_pad_get_parent (pad));
-
- switch (GST_EVENT_TYPE (event)) {
- case GST_EVENT_FLUSH_STOP:
- rsn_audiomunge_reset (munge);
- ret = gst_pad_push_event (munge->srcpad, event);
- break;
- case GST_EVENT_NEWSEGMENT:
- {
- GstSegment *segment;
- gboolean update;
- GstFormat format;
- gdouble rate, arate;
- gint64 start, stop, time;
-
- gst_event_parse_new_segment_full (event, &update, &rate, &arate, &format,
- &start, &stop, &time);
-
- /* we need TIME format */
- if (format != GST_FORMAT_TIME)
- goto newseg_wrong_format;
-
- /* now configure the values */
- segment = &munge->sink_segment;
-
- gst_segment_set_newsegment_full (segment, update,
- rate, arate, format, start, stop, time);
-
- /*
- * FIXME:
- * If this is a segment update and accum >= threshold,
- * or we're in a still frame and there's been no audio received,
- * then we need to generate some audio data.
- *
- * If caused by a segment start update (time advancing in a gap) adjust
- * the new-segment and send the buffer.
- *
- * Otherwise, send the buffer before the newsegment, so that it appears
- * in the closing segment.
- */
- if (!update) {
- GST_DEBUG_OBJECT (munge,
- "Sending newsegment: update %d start %" GST_TIME_FORMAT " stop %"
- GST_TIME_FORMAT " accum now %" GST_TIME_FORMAT, update,
- GST_TIME_ARGS (start), GST_TIME_ARGS (stop),
- GST_TIME_ARGS (segment->accum));
-
- ret = gst_pad_push_event (munge->srcpad, event);
- }
-
- if (!munge->have_audio) {
- if ((update && segment->accum >= AUDIO_FILL_THRESHOLD)
- || munge->in_still) {
- GST_DEBUG_OBJECT (munge,
- "Sending audio fill with ts %" GST_TIME_FORMAT ": accum = %"
- GST_TIME_FORMAT " still-state=%d", GST_TIME_ARGS (segment->start),
- GST_TIME_ARGS (segment->accum), munge->in_still);
-
- /* Just generate a 200ms silence buffer for now. FIXME: Fill the gap */
- if (rsn_audiomunge_make_audio (munge, segment->start,
- GST_SECOND / 5) == GST_FLOW_OK)
- munge->have_audio = TRUE;
- } else {
- GST_LOG_OBJECT (munge, "Not sending audio fill buffer: "
- "Not segment update, or segment accum below thresh: accum = %"
- GST_TIME_FORMAT, GST_TIME_ARGS (segment->accum));
- }
- }
-
- if (update) {
- GST_DEBUG_OBJECT (munge,
- "Sending newsegment: update %d start %" GST_TIME_FORMAT " stop %"
- GST_TIME_FORMAT " accum now %" GST_TIME_FORMAT, update,
- GST_TIME_ARGS (start), GST_TIME_ARGS (stop),
- GST_TIME_ARGS (segment->accum));
-
- ret = gst_pad_push_event (munge->srcpad, event);
- }
-
- break;
- }
- case GST_EVENT_CUSTOM_DOWNSTREAM:
- {
- gboolean in_still;
-
- if (gst_video_event_parse_still_frame (event, &in_still)) {
- /* Remember the still-frame state, so we can generate a pre-roll
- * buffer when a new-segment arrives */
- munge->in_still = in_still;
- GST_INFO_OBJECT (munge, "AUDIO MUNGE: still-state now %d",
- munge->in_still);
- }
-
- ret = gst_pad_push_event (munge->srcpad, event);
- break;
- }
- default:
- ret = gst_pad_push_event (munge->srcpad, event);
- break;
- }
-
- gst_object_unref (munge);
- return ret;
-
-newseg_wrong_format:
-
- GST_DEBUG_OBJECT (munge, "received non TIME newsegment");
- gst_event_unref (event);
- gst_object_unref (munge);
- return FALSE;
-}
-
-static GstStateChangeReturn
-rsn_audiomunge_change_state (GstElement * element, GstStateChange transition)
-{
- RsnAudioMunge *munge = RSN_AUDIOMUNGE (element);
- GstStateChangeReturn ret;
-
- if (transition == GST_STATE_CHANGE_READY_TO_PAUSED)
- rsn_audiomunge_reset (munge);
-
- ret =
- GST_ELEMENT_CLASS (rsn_audiomunge_parent_class)->change_state (element,
- transition);
-
- return ret;
-}
diff --git a/ext/resindvd/rsnaudiomunge.h b/ext/resindvd/rsnaudiomunge.h
deleted file mode 100644
index f5ada285..00000000
--- a/ext/resindvd/rsnaudiomunge.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* GStreamer
- * Copyright (C) 2008 Jan Schmidt <thaytan@noraisin.net>
- *
- * 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 __RSNAUDIOMUNGE_H__
-#define __RSNAUDIOMUNGE_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-/* #defines don't like whitespacey bits */
-#define RSN_TYPE_AUDIOMUNGE (rsn_audiomunge_get_type())
-#define RSN_AUDIOMUNGE(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj),RSN_TYPE_AUDIOMUNGE,RsnAudioMunge))
-#define RSN_AUDIOMUNGE_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass),RSN_TYPE_AUDIOMUNGE,RsnAudioMungeClass))
-#define RSN_IS_AUDIOMUNGE(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj),RSN_TYPE_AUDIOMUNGE))
-#define RSN_IS_AUDIOMUNGE_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass),RSN_TYPE_AUDIOMUNGE))
-
-typedef struct _RsnAudioMunge RsnAudioMunge;
-typedef struct _RsnAudioMungeClass RsnAudioMungeClass;
-
-struct _RsnAudioMunge
-{
- GstElement element;
-
- GstPad *sinkpad, *srcpad;
-
- GstSegment sink_segment;
- gboolean have_audio;
- gboolean in_still;
-};
-
-struct _RsnAudioMungeClass
-{
- GstElementClass parent_class;
-};
-
-GType rsn_audiomunge_get_type (void);
-
-G_END_DECLS
-
-#endif /* __RSNAUDIOMUNGE_H__ */
diff --git a/ext/resindvd/rsndec.c b/ext/resindvd/rsndec.c
index 788857a3..2c999d5e 100644
--- a/ext/resindvd/rsndec.c
+++ b/ext/resindvd/rsndec.c
@@ -23,6 +23,8 @@
#endif
#include <string.h>
+#include <gst/video/video.h>
+#include <gst/audio/audio.h>
#include "rsndec.h"
@@ -53,9 +55,9 @@ rsn_dec_class_init (RsnDecClass * klass)
}
static gboolean
-rsn_dec_sink_event (GstPad * pad, GstEvent * event)
+rsn_dec_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
- RsnDec *self = RSN_DEC (gst_pad_get_parent (pad));
+ RsnDec *self = RSN_DEC (parent);
gboolean ret = TRUE;
const GstStructure *s = gst_event_get_structure (event);
const gchar *name = (s ? gst_structure_get_name (s) : NULL);
@@ -63,9 +65,7 @@ rsn_dec_sink_event (GstPad * pad, GstEvent * event)
if (name && g_str_equal (name, "application/x-gst-dvd"))
ret = gst_pad_push_event (GST_PAD_CAST (self->srcpad), event);
else
- ret = self->sink_event_func (pad, event);
-
- gst_object_unref (self);
+ ret = self->sink_event_func (pad, parent, event);
return ret;
}
@@ -246,10 +246,13 @@ _get_decoder_factories (gpointer arg)
RsnDecFactoryFilterCtx ctx = { NULL, };
GstCaps *raw;
gboolean raw_audio;
+ GstRegistry *registry = gst_registry_get ();
ctx.desired_caps = gst_pad_template_get_caps (templ);
- raw = gst_caps_from_string ("audio/x-raw-float");
+ raw =
+ gst_caps_from_string
+ ("audio/x-raw,format=(string){ F32LE, F32BE, F64LE, F64BE }");
raw_audio = gst_caps_can_intersect (raw, ctx.desired_caps);
if (raw_audio) {
GstCaps *sub = gst_caps_subtract (ctx.desired_caps, raw);
@@ -263,7 +266,7 @@ _get_decoder_factories (gpointer arg)
ctx.decoder_caps = gst_caps_new_empty ();
GST_DEBUG ("Finding factories for caps: %" GST_PTR_FORMAT, ctx.desired_caps);
- factories = gst_default_registry_feature_filter (
+ factories = gst_registry_feature_filter (registry,
(GstPluginFeatureFilter) rsndec_factory_filter, FALSE, &ctx);
/* If these are audio caps, we add audioconvert, which is not a decoder,
@@ -274,7 +277,7 @@ _get_decoder_factories (gpointer arg)
GstPluginFeature *feature;
GST_DEBUG ("These are audio caps, adding audioconvert");
feature =
- gst_default_registry_find_feature ("audioconvert",
+ gst_registry_find_feature (registry, "audioconvert",
GST_TYPE_ELEMENT_FACTORY);
if (feature) {
factories = g_list_append (factories, feature);
@@ -372,23 +375,14 @@ static GstStaticPadTemplate audio_sink_template =
GST_STATIC_CAPS ("audio/mpeg,mpegversion=(int)1;"
"audio/x-private1-lpcm;"
"audio/x-private1-ac3;" "audio/ac3;" "audio/x-ac3;"
- "audio/x-private1-dts; audio/x-raw-float")
+ "audio/x-private1-dts; audio/x-raw,format=(string)"
+ GST_AUDIO_FORMATS_ALL)
);
static GstStaticPadTemplate audio_src_template = GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/x-raw-float, "
- "rate = (int) [ 1, MAX ], "
- "channels = (int) [ 1, MAX ], "
- "endianness = (int) BYTE_ORDER, "
- "width = (int) { 32, 64 }; "
- "audio/x-raw-int, "
- "rate = (int) [ 1, MAX ], "
- "channels = (int) [ 1, MAX ], "
- "endianness = (int) { 1234, 4321 },"
- "width = (int) [ 1, 32 ], "
- "depth = (int) [ 1, 32 ], " "signed = (boolean) { false, true }")
+ GST_STATIC_CAPS (GST_AUDIO_CAPS_MAKE (GST_AUDIO_FORMATS_ALL))
);
G_DEFINE_TYPE (RsnAudioDec, rsn_audiodec, RSN_TYPE_DEC);
@@ -438,7 +432,7 @@ GST_STATIC_PAD_TEMPLATE ("sink",
static GstStaticPadTemplate video_src_template = GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("video/x-raw-yuv")
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE (GST_VIDEO_FORMATS_ALL))
);
G_DEFINE_TYPE (RsnVideoDec, rsn_videodec, RSN_TYPE_DEC);
diff --git a/ext/resindvd/rsninputselector.c b/ext/resindvd/rsninputselector.c
new file mode 100644
index 00000000..88bcc05f
--- /dev/null
+++ b/ext/resindvd/rsninputselector.c
@@ -0,0 +1,1784 @@
+/* GStreamer input selector
+ * Copyright (C) 2003 Julien Moutte <julien@moutte.net>
+ * Copyright (C) 2005 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+ * Copyright (C) 2005 Jan Schmidt <thaytan@mad.scientist.com>
+ * Copyright (C) 2007 Wim Taymans <wim.taymans@gmail.com>
+ * Copyright (C) 2007 Andy Wingo <wingo@pobox.com>
+ * Copyright (C) 2008 Nokia Corporation. (contact <stefan.kost@nokia.com>)
+ * Copyright (C) 2011 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 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-input-selector
+ * @see_also: #GstOutputSelector
+ *
+ * Direct one out of N input streams to the output pad.
+ *
+ * The input pads are from a GstPad subclass and have additional
+ * properties, which users may find useful, namely:
+ *
+ * <itemizedlist>
+ * <listitem>
+ * "running-time": Running time of stream on pad (#gint64)
+ * </listitem>
+ * <listitem>
+ * "tags": The currently active tags on the pad (#GstTagList, boxed type)
+ * </listitem>
+ * <listitem>
+ * "active": If the pad is currently active (#gboolean)
+ * </listitem>
+ * <listitem>
+ * "always-ok" : Make an inactive pads return #GST_FLOW_OK instead of
+ * #GST_FLOW_NOT_LINKED
+ * </listitem>
+ * </itemizedlist>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+
+#include "rsninputselector.h"
+
+#define DEBUG_CACHED_BUFFERS 0
+
+GST_DEBUG_CATEGORY_STATIC (input_selector_debug);
+#define GST_CAT_DEFAULT input_selector_debug
+
+#define GST_TYPE_INPUT_SELECTOR_SYNC_MODE (gst_input_selector_sync_mode_get_type())
+static GType
+gst_input_selector_sync_mode_get_type (void)
+{
+ static GType type = 0;
+ static const GEnumValue data[] = {
+ {GST_INPUT_SELECTOR_SYNC_MODE_ACTIVE_SEGMENT,
+ "Sync using the current active segment",
+ "active-segment"},
+ {GST_INPUT_SELECTOR_SYNC_MODE_CLOCK, "Sync using the clock", "clock"},
+ {0, NULL, NULL},
+ };
+
+ if (!type) {
+ type = g_enum_register_static ("RsnInputSelectorSyncMode", data);
+ }
+ return type;
+}
+
+#define GST_INPUT_SELECTOR_GET_LOCK(sel) (&((RsnInputSelector*)(sel))->lock)
+#define GST_INPUT_SELECTOR_GET_COND(sel) (&((RsnInputSelector*)(sel))->cond)
+#define GST_INPUT_SELECTOR_LOCK(sel) (g_mutex_lock (GST_INPUT_SELECTOR_GET_LOCK(sel)))
+#define GST_INPUT_SELECTOR_UNLOCK(sel) (g_mutex_unlock (GST_INPUT_SELECTOR_GET_LOCK(sel)))
+#define GST_INPUT_SELECTOR_WAIT(sel) (g_cond_wait (GST_INPUT_SELECTOR_GET_COND(sel), \
+ GST_INPUT_SELECTOR_GET_LOCK(sel)))
+#define GST_INPUT_SELECTOR_BROADCAST(sel) (g_cond_broadcast (GST_INPUT_SELECTOR_GET_COND(sel)))
+
+static GstStaticPadTemplate gst_input_selector_sink_factory =
+GST_STATIC_PAD_TEMPLATE ("sink_%u",
+ GST_PAD_SINK,
+ GST_PAD_REQUEST,
+ GST_STATIC_CAPS_ANY);
+
+static GstStaticPadTemplate gst_input_selector_src_factory =
+GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS_ANY);
+
+enum
+{
+ PROP_0,
+ PROP_N_PADS,
+ PROP_ACTIVE_PAD,
+ PROP_SYNC_STREAMS,
+ PROP_SYNC_MODE,
+ PROP_CACHE_BUFFERS
+};
+
+#define DEFAULT_SYNC_STREAMS TRUE
+#define DEFAULT_SYNC_MODE GST_INPUT_SELECTOR_SYNC_MODE_ACTIVE_SEGMENT
+#define DEFAULT_CACHE_BUFFERS FALSE
+#define DEFAULT_PAD_ALWAYS_OK TRUE
+
+enum
+{
+ PROP_PAD_0,
+ PROP_PAD_RUNNING_TIME,
+ PROP_PAD_TAGS,
+ PROP_PAD_ACTIVE,
+ PROP_PAD_ALWAYS_OK
+};
+
+enum
+{
+ /* methods */
+ SIGNAL_BLOCK,
+ SIGNAL_SWITCH,
+ LAST_SIGNAL
+};
+static guint gst_input_selector_signals[LAST_SIGNAL] = { 0 };
+
+static void gst_input_selector_active_pad_changed (RsnInputSelector * sel,
+ GParamSpec * pspec, gpointer user_data);
+static inline gboolean gst_input_selector_is_active_sinkpad (RsnInputSelector *
+ sel, GstPad * pad);
+static GstPad *gst_input_selector_activate_sinkpad (RsnInputSelector * sel,
+ GstPad * pad);
+static gboolean gst_input_selector_set_active_pad (RsnInputSelector * self,
+ GstPad * pad);
+static GstPad *gst_input_selector_get_linked_pad (RsnInputSelector * sel,
+ GstPad * pad, gboolean strict);
+static gboolean forward_sticky_events (GstPad * sinkpad, GstEvent ** event,
+ gpointer user_data);
+
+#define GST_TYPE_SELECTOR_PAD \
+ (gst_selector_pad_get_type())
+#define GST_SELECTOR_PAD(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_SELECTOR_PAD, RsnSelectorPad))
+#define GST_SELECTOR_PAD_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_SELECTOR_PAD, RsnSelectorPadClass))
+#define GST_IS_SELECTOR_PAD(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_SELECTOR_PAD))
+#define GST_IS_SELECTOR_PAD_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_SELECTOR_PAD))
+#define GST_SELECTOR_PAD_CAST(obj) \
+ ((RsnSelectorPad *)(obj))
+
+typedef struct _RsnSelectorPad RsnSelectorPad;
+typedef struct _RsnSelectorPadClass RsnSelectorPadClass;
+typedef struct _RsnSelectorPadCachedBuffer RsnSelectorPadCachedBuffer;
+
+struct _RsnSelectorPad
+{
+ GstPad parent;
+
+ gboolean active; /* when buffer have passed the pad */
+ gboolean pushed; /* when buffer was pushed downstream since activation */
+ gboolean eos; /* when EOS has been received */
+ gboolean eos_sent; /* when EOS was sent downstream */
+ gboolean discont; /* after switching we create a discont */
+ gboolean flushing; /* set after flush-start and before flush-stop */
+ gboolean always_ok;
+ GstTagList *tags; /* last tags received on the pad */
+
+ GstClockTime position; /* the current position in the segment */
+ GstSegment segment; /* the current segment on the pad */
+ guint32 segment_seqnum; /* sequence number of the current segment */
+
+ gboolean events_pending; /* TRUE if sticky events need to be updated */
+
+ gboolean sending_cached_buffers;
+ GQueue *cached_buffers;
+};
+
+struct _RsnSelectorPadCachedBuffer
+{
+ GstBuffer *buffer;
+ GstSegment segment;
+};
+
+struct _RsnSelectorPadClass
+{
+ GstPadClass parent;
+};
+
+GType gst_selector_pad_get_type (void);
+static void gst_selector_pad_finalize (GObject * object);
+static void gst_selector_pad_get_property (GObject * object,
+ guint prop_id, GValue * value, GParamSpec * pspec);
+static void gst_selector_pad_set_property (GObject * object,
+ guint prop_id, const GValue * value, GParamSpec * pspec);
+
+static gint64 gst_selector_pad_get_running_time (RsnSelectorPad * pad);
+static void gst_selector_pad_reset (RsnSelectorPad * pad);
+static gboolean gst_selector_pad_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
+static gboolean gst_selector_pad_query (GstPad * pad, GstObject * parent,
+ GstQuery * query);
+static GstIterator *gst_selector_pad_iterate_linked_pads (GstPad * pad,
+ GstObject * parent);
+static GstFlowReturn gst_selector_pad_chain (GstPad * pad, GstObject * parent,
+ GstBuffer * buf);
+static void gst_selector_pad_cache_buffer (RsnSelectorPad * selpad,
+ GstBuffer * buffer);
+static void gst_selector_pad_free_cached_buffers (RsnSelectorPad * selpad);
+
+G_DEFINE_TYPE (RsnSelectorPad, gst_selector_pad, GST_TYPE_PAD);
+
+static void
+gst_selector_pad_class_init (RsnSelectorPadClass * klass)
+{
+ GObjectClass *gobject_class;
+
+ gobject_class = (GObjectClass *) klass;
+
+ gobject_class->finalize = gst_selector_pad_finalize;
+
+ gobject_class->get_property = gst_selector_pad_get_property;
+ gobject_class->set_property = gst_selector_pad_set_property;
+
+ g_object_class_install_property (gobject_class, PROP_PAD_RUNNING_TIME,
+ g_param_spec_int64 ("running-time", "Running time",
+ "Running time of stream on pad", 0, G_MAXINT64, 0,
+ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (gobject_class, PROP_PAD_TAGS,
+ g_param_spec_boxed ("tags", "Tags",
+ "The currently active tags on the pad", GST_TYPE_TAG_LIST,
+ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (gobject_class, PROP_PAD_ACTIVE,
+ g_param_spec_boolean ("active", "Active",
+ "If the pad is currently active", FALSE,
+ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+ /* FIXME: better property name? */
+ g_object_class_install_property (gobject_class, PROP_PAD_ALWAYS_OK,
+ g_param_spec_boolean ("always-ok", "Always OK",
+ "Make an inactive pad return OK instead of NOT_LINKED",
+ DEFAULT_PAD_ALWAYS_OK, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+}
+
+static void
+gst_selector_pad_init (RsnSelectorPad * pad)
+{
+ pad->always_ok = DEFAULT_PAD_ALWAYS_OK;
+ gst_selector_pad_reset (pad);
+}
+
+static void
+gst_selector_pad_finalize (GObject * object)
+{
+ RsnSelectorPad *pad;
+
+ pad = GST_SELECTOR_PAD_CAST (object);
+
+ if (pad->tags)
+ gst_tag_list_unref (pad->tags);
+ gst_selector_pad_free_cached_buffers (pad);
+
+ G_OBJECT_CLASS (gst_selector_pad_parent_class)->finalize (object);
+}
+
+static void
+gst_selector_pad_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec)
+{
+ RsnSelectorPad *spad = GST_SELECTOR_PAD_CAST (object);
+
+ switch (prop_id) {
+ case PROP_PAD_ALWAYS_OK:
+ GST_OBJECT_LOCK (object);
+ spad->always_ok = g_value_get_boolean (value);
+ GST_OBJECT_UNLOCK (object);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gst_selector_pad_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec)
+{
+ RsnSelectorPad *spad = GST_SELECTOR_PAD_CAST (object);
+
+ switch (prop_id) {
+ case PROP_PAD_RUNNING_TIME:
+ g_value_set_int64 (value, gst_selector_pad_get_running_time (spad));
+ break;
+ case PROP_PAD_TAGS:
+ GST_OBJECT_LOCK (object);
+ g_value_set_boxed (value, spad->tags);
+ GST_OBJECT_UNLOCK (object);
+ break;
+ case PROP_PAD_ACTIVE:
+ {
+ RsnInputSelector *sel;
+
+ sel = GST_INPUT_SELECTOR (gst_pad_get_parent (spad));
+ g_value_set_boolean (value, gst_input_selector_is_active_sinkpad (sel,
+ GST_PAD_CAST (spad)));
+ gst_object_unref (sel);
+ break;
+ }
+ case PROP_PAD_ALWAYS_OK:
+ GST_OBJECT_LOCK (object);
+ g_value_set_boolean (value, spad->always_ok);
+ GST_OBJECT_UNLOCK (object);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static gint64
+gst_selector_pad_get_running_time (RsnSelectorPad * pad)
+{
+ gint64 ret = 0;
+
+ GST_OBJECT_LOCK (pad);
+ if (pad->active) {
+ guint64 position = pad->position;
+ GstFormat format = pad->segment.format;
+
+ ret = gst_segment_to_running_time (&pad->segment, format, position);
+ }
+ GST_OBJECT_UNLOCK (pad);
+
+ GST_DEBUG_OBJECT (pad, "running time: %" GST_TIME_FORMAT
+ " segment: %" GST_SEGMENT_FORMAT, GST_TIME_ARGS (ret), &pad->segment);
+
+ return ret;
+}
+
+/* must be called with the SELECTOR_LOCK */
+static void
+gst_selector_pad_reset (RsnSelectorPad * pad)
+{
+ GST_OBJECT_LOCK (pad);
+ pad->active = FALSE;
+ pad->pushed = FALSE;
+ pad->eos = FALSE;
+ pad->eos_sent = FALSE;
+ pad->events_pending = FALSE;
+ pad->discont = FALSE;
+ pad->flushing = FALSE;
+ pad->position = GST_CLOCK_TIME_NONE;
+ gst_segment_init (&pad->segment, GST_FORMAT_UNDEFINED);
+ pad->sending_cached_buffers = FALSE;
+ gst_selector_pad_free_cached_buffers (pad);
+ GST_OBJECT_UNLOCK (pad);
+}
+
+static RsnSelectorPadCachedBuffer *
+gst_selector_pad_new_cached_buffer (RsnSelectorPad * selpad, GstBuffer * buffer)
+{
+ RsnSelectorPadCachedBuffer *cached_buffer =
+ g_slice_new (RsnSelectorPadCachedBuffer);
+ cached_buffer->buffer = buffer;
+ cached_buffer->segment = selpad->segment;
+ return cached_buffer;
+}
+
+static void
+gst_selector_pad_free_cached_buffer (RsnSelectorPadCachedBuffer * cached_buffer)
+{
+ gst_buffer_unref (cached_buffer->buffer);
+ g_slice_free (RsnSelectorPadCachedBuffer, cached_buffer);
+}
+
+/* must be called with the SELECTOR_LOCK */
+static void
+gst_selector_pad_cache_buffer (RsnSelectorPad * selpad, GstBuffer * buffer)
+{
+ if (selpad->segment.format != GST_FORMAT_TIME) {
+ GST_DEBUG_OBJECT (selpad, "Buffer %p with segment not in time format, "
+ "not caching", buffer);
+ return;
+ }
+
+ GST_DEBUG_OBJECT (selpad, "Caching buffer %p", buffer);
+ if (!selpad->cached_buffers)
+ selpad->cached_buffers = g_queue_new ();
+ g_queue_push_tail (selpad->cached_buffers,
+ gst_selector_pad_new_cached_buffer (selpad, buffer));
+}
+
+/* must be called with the SELECTOR_LOCK */
+static void
+gst_selector_pad_free_cached_buffers (RsnSelectorPad * selpad)
+{
+ RsnSelectorPadCachedBuffer *cached_buffer;
+
+ if (!selpad->cached_buffers)
+ return;
+
+ GST_DEBUG_OBJECT (selpad, "Freeing cached buffers");
+ while ((cached_buffer = g_queue_pop_head (selpad->cached_buffers)))
+ gst_selector_pad_free_cached_buffer (cached_buffer);
+ g_queue_free (selpad->cached_buffers);
+ selpad->cached_buffers = NULL;
+}
+
+/* strictly get the linked pad from the sinkpad. If the pad is active we return
+ * the srcpad else we return NULL */
+static GstIterator *
+gst_selector_pad_iterate_linked_pads (GstPad * pad, GstObject * parent)
+{
+ RsnInputSelector *sel;
+ GstPad *otherpad;
+ GstIterator *it = NULL;
+ GValue val = { 0, };
+
+ sel = GST_INPUT_SELECTOR (parent);
+
+ otherpad = gst_input_selector_get_linked_pad (sel, pad, TRUE);
+ if (otherpad) {
+ g_value_init (&val, GST_TYPE_PAD);
+ g_value_set_object (&val, otherpad);
+ it = gst_iterator_new_single (GST_TYPE_PAD, &val);
+ g_value_unset (&val);
+ gst_object_unref (otherpad);
+ }
+
+ return it;
+}
+
+static gboolean
+gst_selector_pad_event (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+ gboolean res = TRUE;
+ gboolean forward;
+ gboolean new_tags = FALSE;
+ RsnInputSelector *sel;
+ RsnSelectorPad *selpad;
+ GstPad *prev_active_sinkpad;
+ GstPad *active_sinkpad;
+
+ sel = GST_INPUT_SELECTOR (parent);
+ selpad = GST_SELECTOR_PAD_CAST (pad);
+ GST_DEBUG_OBJECT (selpad, "received event %" GST_PTR_FORMAT, event);
+
+ GST_INPUT_SELECTOR_LOCK (sel);
+ prev_active_sinkpad = sel->active_sinkpad;
+ active_sinkpad = gst_input_selector_activate_sinkpad (sel, pad);
+ GST_INPUT_SELECTOR_UNLOCK (sel);
+
+ if (prev_active_sinkpad != active_sinkpad && pad == active_sinkpad) {
+ g_object_notify (G_OBJECT (sel), "active-pad");
+ }
+
+ GST_INPUT_SELECTOR_LOCK (sel);
+ active_sinkpad = gst_input_selector_activate_sinkpad (sel, pad);
+
+ /* only forward if we are dealing with the active sinkpad */
+ forward = (pad == active_sinkpad);
+
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_FLUSH_START:
+ /* Unblock the pad if it's waiting */
+ selpad->flushing = TRUE;
+ GST_INPUT_SELECTOR_BROADCAST (sel);
+ break;
+ case GST_EVENT_FLUSH_STOP:
+ gst_selector_pad_reset (selpad);
+ break;
+ case GST_EVENT_SEGMENT:
+ {
+ gst_event_copy_segment (event, &selpad->segment);
+ selpad->segment_seqnum = gst_event_get_seqnum (event);
+
+ /* Update the position */
+ if (selpad->position == GST_CLOCK_TIME_NONE
+ || selpad->segment.position > selpad->position) {
+ selpad->position = selpad->segment.position;
+ } else if (selpad->position != GST_CLOCK_TIME_NONE
+ && selpad->position > selpad->segment.position) {
+ selpad->segment.position = selpad->position;
+
+ if (forward) {
+ gst_event_unref (event);
+ event = gst_event_new_segment (&selpad->segment);
+ gst_event_set_seqnum (event, selpad->segment_seqnum);
+ }
+ }
+ GST_DEBUG_OBJECT (pad, "configured SEGMENT %" GST_SEGMENT_FORMAT,
+ &selpad->segment);
+ break;
+ }
+ case GST_EVENT_TAG:
+ {
+ GstTagList *tags, *oldtags, *newtags;
+
+ gst_event_parse_tag (event, &tags);
+
+ oldtags = selpad->tags;
+
+ newtags = gst_tag_list_merge (oldtags, tags, GST_TAG_MERGE_REPLACE);
+ selpad->tags = newtags;
+ if (oldtags)
+ gst_tag_list_unref (oldtags);
+ GST_DEBUG_OBJECT (pad, "received tags %" GST_PTR_FORMAT, newtags);
+
+ new_tags = TRUE;
+ break;
+ }
+ case GST_EVENT_EOS:
+ selpad->eos = TRUE;
+
+ if (forward) {
+ selpad->eos_sent = TRUE;
+ } else {
+ RsnSelectorPad *active_selpad;
+
+ /* If the active sinkpad is in EOS state but EOS
+ * was not sent downstream this means that the pad
+ * got EOS before it was set as active pad and that
+ * the previously active pad got EOS after it was
+ * active
+ */
+ active_selpad = GST_SELECTOR_PAD (active_sinkpad);
+ forward = (active_selpad->eos && !active_selpad->eos_sent);
+ active_selpad->eos_sent = TRUE;
+ }
+ GST_DEBUG_OBJECT (pad, "received EOS");
+ break;
+ case GST_EVENT_CUSTOM_DOWNSTREAM:
+ {
+ const GstStructure *structure = gst_event_get_structure (event);
+ if (structure != NULL &&
+ gst_structure_has_name (structure, "application/x-gst-dvd")) {
+ const char *type = gst_structure_get_string (structure, "event");
+ if (strcmp (type, "select-pad") == 0) {
+ gst_input_selector_set_active_pad (sel, pad);
+ forward = FALSE;
+ }
+ }
+ }
+ break;
+
+ default:
+ break;
+ }
+ GST_INPUT_SELECTOR_UNLOCK (sel);
+ if (new_tags)
+ g_object_notify (G_OBJECT (selpad), "tags");
+ if (forward) {
+ GST_DEBUG_OBJECT (pad, "forwarding event");
+ res = gst_pad_push_event (sel->srcpad, event);
+ } else {
+ /* If we aren't forwarding the event because the pad is not the
+ * active_sinkpad, then set the flag on the pad
+ * that says a segment needs sending if/when that pad is activated.
+ * For all other cases, we send the event immediately, which makes
+ * sparse streams and other segment updates work correctly downstream.
+ */
+ if (GST_EVENT_IS_STICKY (event))
+ selpad->events_pending = TRUE;
+ gst_event_unref (event);
+ }
+
+ return res;
+}
+
+static gboolean
+gst_selector_pad_query (GstPad * pad, GstObject * parent, GstQuery * query)
+{
+ gboolean res = FALSE;
+
+ switch (GST_QUERY_TYPE (query)) {
+ case GST_QUERY_ALLOCATION:{
+ GstPad *active_sinkpad;
+ RsnInputSelector *sel = GST_INPUT_SELECTOR (parent);
+
+ /* Only do the allocation query for the active sinkpad,
+ * after switching a reconfigure event is sent and upstream
+ * should reconfigure and do a new allocation query
+ */
+ if (GST_PAD_DIRECTION (pad) == GST_PAD_SINK) {
+ GST_INPUT_SELECTOR_LOCK (sel);
+ active_sinkpad = gst_input_selector_activate_sinkpad (sel, pad);
+ GST_INPUT_SELECTOR_UNLOCK (sel);
+
+ if (pad != active_sinkpad) {
+ res = FALSE;
+ goto done;
+ }
+ }
+ }
+ /* fall through */
+ default:
+ res = gst_pad_query_default (pad, parent, query);
+ break;
+ }
+
+done:
+ return res;
+}
+
+/* must be called with the SELECTOR_LOCK, will block while the pad is blocked
+ * or return TRUE when flushing */
+static gboolean
+gst_input_selector_wait (RsnInputSelector * self, RsnSelectorPad * pad)
+{
+ while (self->blocked && !self->flushing && !pad->flushing) {
+ /* we can be unlocked here when we are shutting down (flushing) or when we
+ * get unblocked */
+ GST_INPUT_SELECTOR_WAIT (self);
+ }
+ return self->flushing;
+}
+
+/* must be called without the SELECTOR_LOCK, will wait until the running time
+ * of the active pad is after this pad or return TRUE when flushing */
+static gboolean
+gst_input_selector_wait_running_time (RsnInputSelector * sel,
+ RsnSelectorPad * selpad, GstBuffer * buf)
+{
+ GstSegment *seg;
+
+ GST_DEBUG_OBJECT (selpad, "entering wait for buffer %p", buf);
+
+ /* If we have no valid timestamp we can't sync this buffer */
+ if (!GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
+ GST_DEBUG_OBJECT (selpad, "leaving wait for buffer with "
+ "invalid timestamp");
+ return FALSE;
+ }
+
+ seg = &selpad->segment;
+
+ /* Wait until
+ * a) this is the active pad
+ * b) the pad or the selector is flushing
+ * c) the selector is not blocked
+ * d) the buffer running time is before the current running time
+ * (either active-seg or clock, depending on sync-mode)
+ */
+
+ GST_INPUT_SELECTOR_LOCK (sel);
+ while (TRUE) {
+ GstPad *active_sinkpad;
+ RsnSelectorPad *active_selpad;
+ GstClock *clock;
+ gint64 cur_running_time;
+ GstClockTime running_time;
+
+ active_sinkpad =
+ gst_input_selector_activate_sinkpad (sel, GST_PAD_CAST (selpad));
+ active_selpad = GST_SELECTOR_PAD_CAST (active_sinkpad);
+
+ if (seg->format != GST_FORMAT_TIME) {
+ GST_DEBUG_OBJECT (selpad,
+ "Not waiting because we don't have a TIME segment");
+ GST_INPUT_SELECTOR_UNLOCK (sel);
+ return FALSE;
+ }
+
+ running_time = GST_BUFFER_TIMESTAMP (buf);
+ /* If possible try to get the running time at the end of the buffer */
+ if (GST_BUFFER_DURATION_IS_VALID (buf))
+ running_time += GST_BUFFER_DURATION (buf);
+ /* Only use the segment to convert to running time if the segment is
+ * in TIME format, otherwise do our best to try to sync */
+ if (GST_CLOCK_TIME_IS_VALID (seg->stop)) {
+ if (running_time > seg->stop) {
+ running_time = seg->stop;
+ }
+ }
+ running_time =
+ gst_segment_to_running_time (seg, GST_FORMAT_TIME, running_time);
+ /* If this is outside the segment don't sync */
+ if (running_time == -1) {
+ GST_DEBUG_OBJECT (selpad,
+ "Not waiting because buffer is outside segment");
+ GST_INPUT_SELECTOR_UNLOCK (sel);
+ return FALSE;
+ }
+
+ cur_running_time = GST_CLOCK_TIME_NONE;
+ if (sel->sync_mode == GST_INPUT_SELECTOR_SYNC_MODE_CLOCK) {
+ clock = gst_element_get_clock (GST_ELEMENT_CAST (sel));
+ if (clock) {
+ GstClockTime base_time;
+
+ cur_running_time = gst_clock_get_time (clock);
+ base_time = gst_element_get_base_time (GST_ELEMENT_CAST (sel));
+ if (base_time <= cur_running_time)
+ cur_running_time -= base_time;
+ else
+ cur_running_time = 0;
+ }
+ } else {
+ GstSegment *active_seg;
+
+ active_seg = &active_selpad->segment;
+
+ /* If the active segment is configured but not to time format
+ * we can't do any syncing at all */
+ if (active_seg->format != GST_FORMAT_TIME
+ && active_seg->format != GST_FORMAT_UNDEFINED) {
+ GST_DEBUG_OBJECT (selpad,
+ "Not waiting because active segment isn't in TIME format");
+ GST_INPUT_SELECTOR_UNLOCK (sel);
+ return FALSE;
+ }
+
+ /* Get active pad's running time, if no configured segment yet keep at -1 */
+ if (active_seg->format == GST_FORMAT_TIME)
+ cur_running_time = gst_segment_to_running_time (active_seg,
+ GST_FORMAT_TIME, active_seg->position);
+ }
+
+ if (selpad != active_selpad && !sel->flushing && !selpad->flushing &&
+ (sel->blocked || cur_running_time == -1
+ || running_time >= cur_running_time)) {
+ if (!sel->blocked) {
+ GST_DEBUG_OBJECT (selpad,
+ "Waiting for active streams to advance. %" GST_TIME_FORMAT " >= %"
+ GST_TIME_FORMAT, GST_TIME_ARGS (running_time),
+ GST_TIME_ARGS (cur_running_time));
+ } else
+ GST_DEBUG_OBJECT (selpad, "Waiting for selector to unblock");
+
+ GST_INPUT_SELECTOR_WAIT (sel);
+ } else {
+ GST_INPUT_SELECTOR_UNLOCK (sel);
+ break;
+ }
+ }
+
+ /* Return TRUE if the selector or the pad is flushing */
+ return (sel->flushing || selpad->flushing);
+}
+
+static gboolean
+forward_sticky_events (GstPad * sinkpad, GstEvent ** event, gpointer user_data)
+{
+ RsnInputSelector *sel = GST_INPUT_SELECTOR (user_data);
+
+ if (GST_EVENT_TYPE (*event) == GST_EVENT_SEGMENT) {
+ GstSegment *seg = &GST_SELECTOR_PAD (sinkpad)->segment;
+ GstEvent *e;
+
+ e = gst_event_new_segment (seg);
+ gst_event_set_seqnum (e, GST_SELECTOR_PAD_CAST (sinkpad)->segment_seqnum);
+
+ gst_pad_push_event (sel->srcpad, e);
+ } else if (GST_EVENT_TYPE (*event) != GST_EVENT_STREAM_START) {
+ GST_WARNING ("Pushing event %" GST_PTR_FORMAT, *event);
+ gst_pad_push_event (sel->srcpad, gst_event_ref (*event));
+ }
+
+ return TRUE;
+}
+
+#if DEBUG_CACHED_BUFFERS
+static void
+gst_input_selector_debug_cached_buffers (RsnInputSelector * sel)
+{
+ GList *walk;
+
+ for (walk = GST_ELEMENT_CAST (sel)->sinkpads; walk; walk = g_list_next (walk)) {
+ RsnSelectorPad *selpad;
+ GString *timestamps;
+ gchar *str;
+ int i;
+
+ selpad = GST_SELECTOR_PAD_CAST (walk->data);
+ if (!selpad->cached_buffers) {
+ GST_DEBUG_OBJECT (selpad, "Cached buffers timestamps: <none>");
+ continue;
+ }
+
+ timestamps = g_string_new ("Cached buffers timestamps:");
+ for (i = 0; i < selpad->cached_buffers->length; ++i) {
+ RsnSelectorPadCachedBuffer *cached_buffer;
+
+ cached_buffer = g_queue_peek_nth (selpad->cached_buffers, i);
+ g_string_append_printf (timestamps, " %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (cached_buffer->buffer)));
+ }
+ str = g_string_free (timestamps, FALSE);
+ GST_DEBUG_OBJECT (selpad, str);
+ g_free (str);
+ }
+}
+#endif
+
+/* must be called with the SELECTOR_LOCK */
+static void
+gst_input_selector_cleanup_old_cached_buffers (RsnInputSelector * sel,
+ GstPad * pad)
+{
+ GstClock *clock;
+ gint64 cur_running_time;
+ GList *walk;
+
+ cur_running_time = GST_CLOCK_TIME_NONE;
+ if (sel->sync_mode == GST_INPUT_SELECTOR_SYNC_MODE_CLOCK) {
+ clock = gst_element_get_clock (GST_ELEMENT_CAST (sel));
+ if (clock) {
+ GstClockTime base_time;
+
+ cur_running_time = gst_clock_get_time (clock);
+ base_time = gst_element_get_base_time (GST_ELEMENT_CAST (sel));
+ if (base_time <= cur_running_time)
+ cur_running_time -= base_time;
+ else
+ cur_running_time = 0;
+ }
+ } else {
+ GstPad *active_sinkpad;
+ RsnSelectorPad *active_selpad;
+ GstSegment *active_seg;
+
+ active_sinkpad = gst_input_selector_activate_sinkpad (sel, pad);
+ active_selpad = GST_SELECTOR_PAD_CAST (active_sinkpad);
+ active_seg = &active_selpad->segment;
+
+ /* Get active pad's running time, if no configured segment yet keep at -1 */
+ if (active_seg->format == GST_FORMAT_TIME)
+ cur_running_time = gst_segment_to_running_time (active_seg,
+ GST_FORMAT_TIME, active_seg->position);
+ }
+
+ if (!GST_CLOCK_TIME_IS_VALID (cur_running_time))
+ return;
+
+ GST_DEBUG_OBJECT (sel, "Cleaning up old cached buffers");
+ for (walk = GST_ELEMENT_CAST (sel)->sinkpads; walk; walk = g_list_next (walk)) {
+ RsnSelectorPad *selpad;
+ GstSegment *seg;
+ RsnSelectorPadCachedBuffer *cached_buffer;
+ GSList *maybe_remove;
+ guint queue_position;
+
+ selpad = GST_SELECTOR_PAD_CAST (walk->data);
+ if (!selpad->cached_buffers)
+ continue;
+
+ seg = &selpad->segment;
+
+ maybe_remove = NULL;
+ queue_position = 0;
+ while ((cached_buffer = g_queue_peek_nth (selpad->cached_buffers,
+ queue_position))) {
+ GstBuffer *buffer = cached_buffer->buffer;
+ GstClockTime running_time;
+ GSList *l;
+
+ /* If we have no valid timestamp we can't sync this buffer */
+ if (!GST_BUFFER_TIMESTAMP_IS_VALID (buffer)) {
+ maybe_remove = g_slist_append (maybe_remove, cached_buffer);
+ queue_position = g_slist_length (maybe_remove);
+ continue;
+ }
+
+ /* the buffer is still valid if its duration is valid and the
+ * timestamp + duration is >= time, or if its duration is invalid
+ * and the timestamp is >= time */
+ running_time = GST_BUFFER_TIMESTAMP (buffer);
+ /* If possible try to get the running time at the end of the buffer */
+ if (GST_BUFFER_DURATION_IS_VALID (buffer))
+ running_time += GST_BUFFER_DURATION (buffer);
+ /* Only use the segment to convert to running time if the segment is
+ * in TIME format, otherwise do our best to try to sync */
+ if (GST_CLOCK_TIME_IS_VALID (seg->stop)) {
+ if (running_time > seg->stop) {
+ running_time = seg->stop;
+ }
+ }
+ running_time =
+ gst_segment_to_running_time (seg, GST_FORMAT_TIME, running_time);
+
+ GST_DEBUG_OBJECT (selpad,
+ "checking if buffer %p running time=%" GST_TIME_FORMAT
+ " >= stream time=%" GST_TIME_FORMAT, buffer,
+ GST_TIME_ARGS (running_time), GST_TIME_ARGS (cur_running_time));
+ if (running_time >= cur_running_time) {
+ break;
+ }
+
+ GST_DEBUG_OBJECT (selpad, "Removing old cached buffer %p", buffer);
+ g_queue_pop_nth (selpad->cached_buffers, queue_position);
+ gst_selector_pad_free_cached_buffer (cached_buffer);
+
+ for (l = maybe_remove; l != NULL; l = g_slist_next (l)) {
+ /* A buffer after some invalid buffers was removed, it means the invalid buffers
+ * are old, lets also remove them */
+ cached_buffer = l->data;
+ g_queue_remove (selpad->cached_buffers, cached_buffer);
+ gst_selector_pad_free_cached_buffer (cached_buffer);
+ }
+
+ g_slist_free (maybe_remove);
+ maybe_remove = NULL;
+ queue_position = 0;
+ }
+
+ g_slist_free (maybe_remove);
+ maybe_remove = NULL;
+
+ if (g_queue_is_empty (selpad->cached_buffers)) {
+ g_queue_free (selpad->cached_buffers);
+ selpad->cached_buffers = NULL;
+ }
+ }
+
+#if DEBUG_CACHED_BUFFERS
+ gst_input_selector_debug_cached_buffers (sel);
+#endif
+}
+
+static GstFlowReturn
+gst_selector_pad_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
+{
+ RsnInputSelector *sel;
+ GstFlowReturn res;
+ GstPad *active_sinkpad;
+ GstPad *prev_active_sinkpad;
+ RsnSelectorPad *selpad;
+ GstClockTime start_time;
+
+ sel = GST_INPUT_SELECTOR (parent);
+ selpad = GST_SELECTOR_PAD_CAST (pad);
+
+ GST_DEBUG_OBJECT (selpad,
+ "entering chain for buf %p with timestamp %" GST_TIME_FORMAT, buf,
+ GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
+
+ GST_INPUT_SELECTOR_LOCK (sel);
+ /* wait or check for flushing */
+ if (gst_input_selector_wait (sel, selpad)) {
+ GST_INPUT_SELECTOR_UNLOCK (sel);
+ goto flushing;
+ }
+
+ GST_LOG_OBJECT (pad, "getting active pad");
+
+ prev_active_sinkpad = sel->active_sinkpad;
+ active_sinkpad = gst_input_selector_activate_sinkpad (sel, pad);
+
+ /* In sync mode wait until the active pad has advanced
+ * after the running time of the current buffer */
+ if (sel->sync_streams) {
+ /* call chain for each cached buffer if we are not the active pad
+ * or if we are the active pad but didn't push anything yet. */
+ if (active_sinkpad != pad || !selpad->pushed) {
+ /* no need to check for sel->cache_buffers as selpad->cached_buffers
+ * will only be valid if cache_buffers is TRUE */
+ if (selpad->cached_buffers && !selpad->sending_cached_buffers) {
+ RsnSelectorPadCachedBuffer *cached_buffer;
+ GstSegment saved_segment;
+
+ saved_segment = selpad->segment;
+
+ selpad->sending_cached_buffers = TRUE;
+ while (!sel->flushing && !selpad->flushing &&
+ (cached_buffer = g_queue_pop_head (selpad->cached_buffers))) {
+ GST_DEBUG_OBJECT (pad, "Cached buffers found, "
+ "invoking chain for cached buffer %p", cached_buffer->buffer);
+
+ selpad->segment = cached_buffer->segment;
+ selpad->events_pending = TRUE;
+ GST_INPUT_SELECTOR_UNLOCK (sel);
+ gst_selector_pad_chain (pad, parent, cached_buffer->buffer);
+ GST_INPUT_SELECTOR_LOCK (sel);
+
+ /* we may have cleaned up the queue in the meantime because of
+ * old buffers */
+ if (!selpad->cached_buffers) {
+ break;
+ }
+ }
+ selpad->sending_cached_buffers = FALSE;
+
+ /* all cached buffers sent, restore segment for current buffer */
+ selpad->segment = saved_segment;
+ selpad->events_pending = TRUE;
+
+ /* Might have changed while calling chain for cached buffers */
+ active_sinkpad = gst_input_selector_activate_sinkpad (sel, pad);
+ }
+ }
+
+ if (active_sinkpad != pad) {
+ GST_INPUT_SELECTOR_UNLOCK (sel);
+ if (gst_input_selector_wait_running_time (sel, selpad, buf))
+ goto flushing;
+ GST_INPUT_SELECTOR_LOCK (sel);
+ }
+
+ /* Might have changed while waiting */
+ active_sinkpad = gst_input_selector_activate_sinkpad (sel, pad);
+ }
+
+ /* update the segment on the srcpad */
+ start_time = GST_BUFFER_TIMESTAMP (buf);
+ if (GST_CLOCK_TIME_IS_VALID (start_time)) {
+ GST_LOG_OBJECT (pad, "received start time %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (start_time));
+ if (GST_BUFFER_DURATION_IS_VALID (buf))
+ GST_LOG_OBJECT (pad, "received end time %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (start_time + GST_BUFFER_DURATION (buf)));
+
+ GST_OBJECT_LOCK (pad);
+ selpad->position = start_time;
+ selpad->segment.position = start_time;
+ GST_OBJECT_UNLOCK (pad);
+ }
+
+ /* Ignore buffers from pads except the selected one */
+ if (pad != active_sinkpad)
+ goto ignore;
+
+ /* Tell all non-active pads that we advanced the running time */
+ if (sel->sync_streams)
+ GST_INPUT_SELECTOR_BROADCAST (sel);
+
+ GST_INPUT_SELECTOR_UNLOCK (sel);
+
+ if (prev_active_sinkpad != active_sinkpad && pad == active_sinkpad) {
+ g_object_notify (G_OBJECT (sel), "active-pad");
+ }
+
+ /* if we have a pending events, push them now */
+ if (G_UNLIKELY (prev_active_sinkpad != active_sinkpad
+ || selpad->events_pending)) {
+ gst_pad_sticky_events_foreach (GST_PAD_CAST (selpad), forward_sticky_events,
+ sel);
+ selpad->events_pending = FALSE;
+ }
+
+ if (selpad->discont) {
+ buf = gst_buffer_make_writable (buf);
+
+ GST_DEBUG_OBJECT (pad, "Marking discont buffer %p", buf);
+ GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT);
+ selpad->discont = FALSE;
+ }
+
+ /* forward */
+ GST_LOG_OBJECT (pad, "Forwarding buffer %p with timestamp %" GST_TIME_FORMAT,
+ buf, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
+
+ res = gst_pad_push (sel->srcpad, gst_buffer_ref (buf));
+ GST_LOG_OBJECT (pad, "Buffer %p forwarded result=%d", buf, res);
+
+ GST_INPUT_SELECTOR_LOCK (sel);
+
+ if (sel->sync_streams && sel->cache_buffers) {
+ /* Might have changed while pushing */
+ active_sinkpad = gst_input_selector_activate_sinkpad (sel, pad);
+ /* only set pad to pushed if we are still the active pad */
+ if (active_sinkpad == pad)
+ selpad->pushed = TRUE;
+
+ /* cache buffer as we may need it again if we change pads */
+ gst_selector_pad_cache_buffer (selpad, buf);
+ gst_input_selector_cleanup_old_cached_buffers (sel, pad);
+ } else {
+ selpad->pushed = TRUE;
+ gst_buffer_unref (buf);
+ }
+ GST_INPUT_SELECTOR_UNLOCK (sel);
+
+done:
+ return res;
+
+ /* dropped buffers */
+ignore:
+ {
+ gboolean active_pad_pushed = GST_SELECTOR_PAD_CAST (active_sinkpad)->pushed;
+
+ GST_DEBUG_OBJECT (pad, "Pad not active, discard buffer %p", buf);
+ /* when we drop a buffer, we're creating a discont on this pad */
+ selpad->discont = TRUE;
+ GST_INPUT_SELECTOR_UNLOCK (sel);
+ gst_buffer_unref (buf);
+
+ /* figure out what to return upstream */
+ GST_OBJECT_LOCK (selpad);
+ if (selpad->always_ok || !active_pad_pushed)
+ res = GST_FLOW_OK;
+ else
+ res = GST_FLOW_NOT_LINKED;
+ GST_OBJECT_UNLOCK (selpad);
+
+ goto done;
+ }
+flushing:
+ {
+ GST_DEBUG_OBJECT (pad, "We are flushing, discard buffer %p", buf);
+ gst_buffer_unref (buf);
+ res = GST_FLOW_FLUSHING;
+ goto done;
+ }
+}
+
+static void gst_input_selector_dispose (GObject * object);
+static void gst_input_selector_finalize (GObject * object);
+
+static void gst_input_selector_set_property (GObject * object,
+ guint prop_id, const GValue * value, GParamSpec * pspec);
+static void gst_input_selector_get_property (GObject * object,
+ guint prop_id, GValue * value, GParamSpec * pspec);
+
+static GstPad *gst_input_selector_request_new_pad (GstElement * element,
+ GstPadTemplate * templ, const gchar * unused, const GstCaps * caps);
+static void gst_input_selector_release_pad (GstElement * element, GstPad * pad);
+
+static GstStateChangeReturn gst_input_selector_change_state (GstElement *
+ element, GstStateChange transition);
+
+static gboolean gst_input_selector_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
+static gboolean gst_input_selector_query (GstPad * pad, GstObject * parent,
+ GstQuery * query);
+static gint64 gst_input_selector_block (RsnInputSelector * self);
+
+#define _do_init \
+ GST_DEBUG_CATEGORY_INIT (input_selector_debug, \
+ "rsninputselector", 0, "An input stream selector element");
+#define gst_input_selector_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (RsnInputSelector, gst_input_selector, GST_TYPE_ELEMENT,
+ _do_init);
+
+static void
+gst_input_selector_class_init (RsnInputSelectorClass * klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
+
+ gobject_class->dispose = gst_input_selector_dispose;
+ gobject_class->finalize = gst_input_selector_finalize;
+
+ gobject_class->set_property = gst_input_selector_set_property;
+ gobject_class->get_property = gst_input_selector_get_property;
+
+ g_object_class_install_property (gobject_class, PROP_N_PADS,
+ g_param_spec_uint ("n-pads", "Number of Pads",
+ "The number of sink pads", 0, G_MAXUINT, 0,
+ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (gobject_class, PROP_ACTIVE_PAD,
+ g_param_spec_object ("active-pad", "Active pad",
+ "The currently active sink pad", GST_TYPE_PAD,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ /**
+ * RsnInputSelector:sync-streams
+ *
+ * If set to %TRUE all inactive streams will be synced to the
+ * running time of the active stream or to the current clock.
+ *
+ * To make sure no buffers are dropped by input-selector
+ * that might be needed when switching the active pad,
+ * sync-mode should be set to "clock" and cache-buffers to TRUE.
+ */
+ g_object_class_install_property (gobject_class, PROP_SYNC_STREAMS,
+ g_param_spec_boolean ("sync-streams", "Sync Streams",
+ "Synchronize inactive streams to the running time of the active "
+ "stream or to the current clock",
+ DEFAULT_SYNC_STREAMS,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+ GST_PARAM_MUTABLE_READY));
+
+ /**
+ * RsnInputSelector:sync-mode
+ *
+ * Select how input-selector will sync buffers when in sync-streams mode.
+ *
+ * Note that when using the "active-segment" mode, the "active-segment" may
+ * be ahead of current clock time when switching the active pad, as the current
+ * active pad may have pushed more buffers than what was displayed/consumed,
+ * which may cause delays and some missing buffers.
+ */
+ g_object_class_install_property (gobject_class, PROP_SYNC_MODE,
+ g_param_spec_enum ("sync-mode", "Sync mode",
+ "Behavior in sync-streams mode", GST_TYPE_INPUT_SELECTOR_SYNC_MODE,
+ DEFAULT_SYNC_MODE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+ GST_PARAM_MUTABLE_READY));
+
+ /**
+ * RsnInputSelector:cache-buffers
+ *
+ * If set to %TRUE and RsnInputSelector:sync-streams is also set to %TRUE,
+ * the active pad will cache the buffers still considered valid (after current
+ * running time, see sync-mode) to avoid missing frames if/when the pad is
+ * reactivated.
+ *
+ * The active pad may push more buffers than what is currently displayed/consumed
+ * and when changing pads those buffers will be discarded and the only way to
+ * reactivate that pad without loosing the already consumed buffers is to enable cache.
+ */
+ g_object_class_install_property (gobject_class, PROP_CACHE_BUFFERS,
+ g_param_spec_boolean ("cache-buffers", "Cache Buffers",
+ "Cache buffers for active-pad",
+ DEFAULT_CACHE_BUFFERS,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+ GST_PARAM_MUTABLE_READY));
+
+ /**
+ * RsnInputSelector::block:
+ * @inputselector: the #RsnInputSelector
+ *
+ * Block all sink pads in preparation for a switch. Returns the stop time of
+ * the current switch segment, as a running time, or 0 if there is no current
+ * active pad or the current active pad never received data.
+ */
+ gst_input_selector_signals[SIGNAL_BLOCK] =
+ g_signal_new ("block", G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (RsnInputSelectorClass, block), NULL, NULL,
+ g_cclosure_marshal_generic, G_TYPE_INT64, 0);
+
+ gst_element_class_set_static_metadata (gstelement_class, "Input selector",
+ "Generic", "N-to-1 input stream selector",
+ "Julien Moutte <julien@moutte.net>, "
+ "Jan Schmidt <thaytan@mad.scientist.com>, "
+ "Wim Taymans <wim.taymans@gmail.com>");
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&gst_input_selector_sink_factory));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&gst_input_selector_src_factory));
+
+ gstelement_class->request_new_pad = gst_input_selector_request_new_pad;
+ gstelement_class->release_pad = gst_input_selector_release_pad;
+ gstelement_class->change_state = gst_input_selector_change_state;
+
+ klass->block = GST_DEBUG_FUNCPTR (gst_input_selector_block);
+}
+
+static void
+gst_input_selector_init (RsnInputSelector * sel)
+{
+ sel->srcpad = gst_pad_new ("src", GST_PAD_SRC);
+ gst_pad_set_iterate_internal_links_function (sel->srcpad,
+ GST_DEBUG_FUNCPTR (gst_selector_pad_iterate_linked_pads));
+ gst_pad_set_query_function (sel->srcpad,
+ GST_DEBUG_FUNCPTR (gst_input_selector_query));
+ gst_pad_set_event_function (sel->srcpad,
+ GST_DEBUG_FUNCPTR (gst_input_selector_event));
+ GST_OBJECT_FLAG_SET (sel->srcpad, GST_PAD_FLAG_PROXY_CAPS);
+ gst_element_add_pad (GST_ELEMENT (sel), sel->srcpad);
+ /* sinkpad management */
+ sel->active_sinkpad = NULL;
+ sel->padcount = 0;
+ sel->sync_streams = DEFAULT_SYNC_STREAMS;
+
+ g_mutex_init (&sel->lock);
+ g_cond_init (&sel->cond);
+ sel->blocked = FALSE;
+
+ /* lets give a change for downstream to do something on
+ * active-pad change before we start pushing new buffers */
+ g_signal_connect_data (sel, "notify::active-pad",
+ (GCallback) gst_input_selector_active_pad_changed, NULL,
+ NULL, G_CONNECT_AFTER);
+}
+
+static void
+gst_input_selector_dispose (GObject * object)
+{
+ RsnInputSelector *sel = GST_INPUT_SELECTOR (object);
+
+ if (sel->active_sinkpad) {
+ gst_object_unref (sel->active_sinkpad);
+ sel->active_sinkpad = NULL;
+ }
+ G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+static void
+gst_input_selector_finalize (GObject * object)
+{
+ RsnInputSelector *sel = GST_INPUT_SELECTOR (object);
+
+ g_mutex_clear (&sel->lock);
+ g_cond_clear (&sel->cond);
+
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+/* this function must be called with the SELECTOR_LOCK. It returns TRUE when the
+ * active pad changed. */
+static gboolean
+gst_input_selector_set_active_pad (RsnInputSelector * self, GstPad * pad)
+{
+ RsnSelectorPad *old, *new;
+ GstPad **active_pad_p;
+
+ if (pad == self->active_sinkpad)
+ return FALSE;
+
+ old = GST_SELECTOR_PAD_CAST (self->active_sinkpad);
+ new = GST_SELECTOR_PAD_CAST (pad);
+
+ GST_DEBUG_OBJECT (self, "setting active pad to %s:%s",
+ GST_DEBUG_PAD_NAME (new));
+
+ if (old)
+ old->pushed = FALSE;
+ if (new)
+ new->pushed = FALSE;
+
+ /* Send a new SEGMENT event on the new pad next */
+ if (old != new && new)
+ new->events_pending = TRUE;
+
+ active_pad_p = &self->active_sinkpad;
+ gst_object_replace ((GstObject **) active_pad_p, GST_OBJECT_CAST (pad));
+
+ if (old && old != new)
+ gst_pad_push_event (GST_PAD_CAST (old), gst_event_new_reconfigure ());
+ if (new)
+ gst_pad_push_event (GST_PAD_CAST (new), gst_event_new_reconfigure ());
+
+ GST_DEBUG_OBJECT (self, "New active pad is %" GST_PTR_FORMAT,
+ self->active_sinkpad);
+
+ return TRUE;
+}
+
+static void
+gst_input_selector_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec)
+{
+ RsnInputSelector *sel = GST_INPUT_SELECTOR (object);
+
+ switch (prop_id) {
+ case PROP_ACTIVE_PAD:
+ {
+ GstPad *pad;
+
+ pad = g_value_get_object (value);
+
+ GST_INPUT_SELECTOR_LOCK (sel);
+
+#if DEBUG_CACHED_BUFFERS
+ gst_input_selector_debug_cached_buffers (sel);
+#endif
+
+ gst_input_selector_set_active_pad (sel, pad);
+
+#if DEBUG_CACHED_BUFFERS
+ gst_input_selector_debug_cached_buffers (sel);
+#endif
+
+ GST_INPUT_SELECTOR_UNLOCK (sel);
+ break;
+ }
+ case PROP_SYNC_STREAMS:
+ GST_INPUT_SELECTOR_LOCK (sel);
+ sel->sync_streams = g_value_get_boolean (value);
+ GST_INPUT_SELECTOR_UNLOCK (sel);
+ break;
+ case PROP_SYNC_MODE:
+ GST_INPUT_SELECTOR_LOCK (sel);
+ sel->sync_mode = g_value_get_enum (value);
+ GST_INPUT_SELECTOR_UNLOCK (sel);
+ break;
+ case PROP_CACHE_BUFFERS:
+ GST_INPUT_SELECTOR_LOCK (object);
+ sel->cache_buffers = g_value_get_boolean (value);
+ GST_INPUT_SELECTOR_UNLOCK (object);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gst_input_selector_active_pad_changed (RsnInputSelector * sel,
+ GParamSpec * pspec, gpointer user_data)
+{
+ /* Wake up all non-active pads in sync mode, they might be
+ * the active pad now */
+ if (sel->sync_streams)
+ GST_INPUT_SELECTOR_BROADCAST (sel);
+}
+
+static void
+gst_input_selector_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec)
+{
+ RsnInputSelector *sel = GST_INPUT_SELECTOR (object);
+
+ switch (prop_id) {
+ case PROP_N_PADS:
+ GST_INPUT_SELECTOR_LOCK (object);
+ g_value_set_uint (value, sel->n_pads);
+ GST_INPUT_SELECTOR_UNLOCK (object);
+ break;
+ case PROP_ACTIVE_PAD:
+ GST_INPUT_SELECTOR_LOCK (object);
+ g_value_set_object (value, sel->active_sinkpad);
+ GST_INPUT_SELECTOR_UNLOCK (object);
+ break;
+ case PROP_SYNC_STREAMS:
+ GST_INPUT_SELECTOR_LOCK (object);
+ g_value_set_boolean (value, sel->sync_streams);
+ GST_INPUT_SELECTOR_UNLOCK (object);
+ break;
+ case PROP_SYNC_MODE:
+ GST_INPUT_SELECTOR_LOCK (object);
+ g_value_set_enum (value, sel->sync_mode);
+ GST_INPUT_SELECTOR_UNLOCK (object);
+ break;
+ case PROP_CACHE_BUFFERS:
+ GST_INPUT_SELECTOR_LOCK (object);
+ g_value_set_boolean (value, sel->cache_buffers);
+ GST_INPUT_SELECTOR_UNLOCK (object);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static GstPad *
+gst_input_selector_get_linked_pad (RsnInputSelector * sel, GstPad * pad,
+ gboolean strict)
+{
+ GstPad *otherpad = NULL;
+
+ GST_INPUT_SELECTOR_LOCK (sel);
+ if (pad == sel->srcpad)
+ otherpad = sel->active_sinkpad;
+ else if (pad == sel->active_sinkpad || !strict)
+ otherpad = sel->srcpad;
+ if (otherpad)
+ gst_object_ref (otherpad);
+ GST_INPUT_SELECTOR_UNLOCK (sel);
+
+ return otherpad;
+}
+
+static gboolean
+gst_input_selector_event (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+ RsnInputSelector *sel;
+ gboolean result = FALSE;
+ GstIterator *iter;
+ gboolean done = FALSE;
+ GValue item = { 0, };
+ GstPad *eventpad;
+ GList *pushed_pads = NULL;
+
+ sel = GST_INPUT_SELECTOR (parent);
+ /* Send upstream events to all sinkpads */
+ iter = gst_element_iterate_sink_pads (GST_ELEMENT_CAST (sel));
+
+ /* This is now essentially a copy of gst_pad_event_default_dispatch
+ * with a different iterator */
+ while (!done) {
+ switch (gst_iterator_next (iter, &item)) {
+ case GST_ITERATOR_OK:
+ eventpad = g_value_get_object (&item);
+
+ /* if already pushed, skip */
+ if (g_list_find (pushed_pads, eventpad)) {
+ g_value_reset (&item);
+ break;
+ }
+
+ gst_event_ref (event);
+ result |= gst_pad_push_event (eventpad, event);
+
+ g_value_reset (&item);
+ break;
+ case GST_ITERATOR_RESYNC:
+ /* We don't reset the result here because we don't push the event
+ * again on pads that got the event already and because we need
+ * to consider the result of the previous pushes */
+ gst_iterator_resync (iter);
+ break;
+ case GST_ITERATOR_ERROR:
+ GST_ERROR_OBJECT (pad, "Could not iterate over sinkpads");
+ done = TRUE;
+ break;
+ case GST_ITERATOR_DONE:
+ done = TRUE;
+ break;
+ }
+ }
+ g_value_unset (&item);
+ gst_iterator_free (iter);
+
+ g_list_free (pushed_pads);
+
+ gst_event_unref (event);
+
+ return result;
+}
+
+/* query on the srcpad. We override this function because by default it will
+ * only forward the query to one random sinkpad */
+static gboolean
+gst_input_selector_query (GstPad * pad, GstObject * parent, GstQuery * query)
+{
+ gboolean res = FALSE;
+ RsnInputSelector *sel;
+
+ sel = GST_INPUT_SELECTOR (parent);
+
+ switch (GST_QUERY_TYPE (query)) {
+ case GST_QUERY_LATENCY:
+ {
+ GList *walk;
+ GstClockTime resmin, resmax;
+ gboolean reslive;
+
+ resmin = 0;
+ resmax = -1;
+ reslive = FALSE;
+
+ /* perform the query on all sinkpads and combine the results. We take the
+ * max of min and the min of max for the result latency. */
+ GST_INPUT_SELECTOR_LOCK (sel);
+ for (walk = GST_ELEMENT_CAST (sel)->sinkpads; walk;
+ walk = g_list_next (walk)) {
+ GstPad *sinkpad = GST_PAD_CAST (walk->data);
+
+ if (gst_pad_peer_query (sinkpad, query)) {
+ GstClockTime min, max;
+ gboolean live;
+
+ /* one query succeeded, we succeed too */
+ res = TRUE;
+
+ gst_query_parse_latency (query, &live, &min, &max);
+
+ GST_DEBUG_OBJECT (sinkpad,
+ "peer latency min %" GST_TIME_FORMAT ", max %" GST_TIME_FORMAT
+ ", live %d", GST_TIME_ARGS (min), GST_TIME_ARGS (max), live);
+
+ if (live) {
+ if (min > resmin)
+ resmin = min;
+ if (resmax == -1)
+ resmax = max;
+ else if (max < resmax)
+ resmax = max;
+ if (reslive == FALSE)
+ reslive = live;
+ }
+ }
+ }
+ GST_INPUT_SELECTOR_UNLOCK (sel);
+ if (res) {
+ gst_query_set_latency (query, reslive, resmin, resmax);
+
+ GST_DEBUG_OBJECT (sel,
+ "total latency min %" GST_TIME_FORMAT ", max %" GST_TIME_FORMAT
+ ", live %d", GST_TIME_ARGS (resmin), GST_TIME_ARGS (resmax),
+ reslive);
+ }
+
+ break;
+ }
+ default:
+ res = gst_pad_query_default (pad, parent, query);
+ break;
+ }
+
+ return res;
+}
+
+/* check if the pad is the active sinkpad */
+static inline gboolean
+gst_input_selector_is_active_sinkpad (RsnInputSelector * sel, GstPad * pad)
+{
+ gboolean res;
+
+ GST_INPUT_SELECTOR_LOCK (sel);
+ res = (pad == sel->active_sinkpad);
+ GST_INPUT_SELECTOR_UNLOCK (sel);
+
+ return res;
+}
+
+/* Get or create the active sinkpad, must be called with SELECTOR_LOCK */
+static GstPad *
+gst_input_selector_activate_sinkpad (RsnInputSelector * sel, GstPad * pad)
+{
+ GstPad *active_sinkpad;
+ RsnSelectorPad *selpad;
+
+ selpad = GST_SELECTOR_PAD_CAST (pad);
+
+ selpad->active = TRUE;
+ active_sinkpad = sel->active_sinkpad;
+ if (sel->active_sinkpad == NULL) {
+ GValue item = G_VALUE_INIT;
+ GstIterator *iter = gst_element_iterate_sink_pads (GST_ELEMENT_CAST (sel));
+ GstIteratorResult ires;
+
+ while ((ires = gst_iterator_next (iter, &item)) == GST_ITERATOR_RESYNC)
+ gst_iterator_resync (iter);
+ if (ires == GST_ITERATOR_OK) {
+ /* If no pad is currently selected, we return the first usable pad to
+ * guarantee consistency */
+
+ active_sinkpad = sel->active_sinkpad = g_value_dup_object (&item);
+ g_value_reset (&item);
+ GST_DEBUG_OBJECT (sel, "Activating pad %s:%s",
+ GST_DEBUG_PAD_NAME (active_sinkpad));
+ } else
+ GST_WARNING_OBJECT (sel, "Couldn't find a default sink pad");
+ gst_iterator_free (iter);
+ }
+
+ return active_sinkpad;
+}
+
+static GstPad *
+gst_input_selector_request_new_pad (GstElement * element,
+ GstPadTemplate * templ, const gchar * unused, const GstCaps * caps)
+{
+ RsnInputSelector *sel;
+ gchar *name = NULL;
+ GstPad *sinkpad = NULL;
+
+ g_return_val_if_fail (templ->direction == GST_PAD_SINK, NULL);
+
+ sel = GST_INPUT_SELECTOR (element);
+
+ GST_INPUT_SELECTOR_LOCK (sel);
+
+ GST_LOG_OBJECT (sel, "Creating new pad %d", sel->padcount);
+ name = g_strdup_printf ("sink_%u", sel->padcount++);
+ sinkpad = g_object_new (GST_TYPE_SELECTOR_PAD,
+ "name", name, "direction", templ->direction, "template", templ, NULL);
+ g_free (name);
+
+ sel->n_pads++;
+
+ gst_pad_set_event_function (sinkpad,
+ GST_DEBUG_FUNCPTR (gst_selector_pad_event));
+ gst_pad_set_query_function (sinkpad,
+ GST_DEBUG_FUNCPTR (gst_selector_pad_query));
+ gst_pad_set_chain_function (sinkpad,
+ GST_DEBUG_FUNCPTR (gst_selector_pad_chain));
+ gst_pad_set_iterate_internal_links_function (sinkpad,
+ GST_DEBUG_FUNCPTR (gst_selector_pad_iterate_linked_pads));
+
+ GST_OBJECT_FLAG_SET (sinkpad, GST_PAD_FLAG_PROXY_CAPS);
+ GST_OBJECT_FLAG_SET (sinkpad, GST_PAD_FLAG_PROXY_ALLOCATION);
+ gst_pad_set_active (sinkpad, TRUE);
+ gst_element_add_pad (GST_ELEMENT (sel), sinkpad);
+ GST_INPUT_SELECTOR_UNLOCK (sel);
+
+ return sinkpad;
+}
+
+static void
+gst_input_selector_release_pad (GstElement * element, GstPad * pad)
+{
+ RsnInputSelector *sel;
+
+ sel = GST_INPUT_SELECTOR (element);
+ GST_LOG_OBJECT (sel, "Releasing pad %s:%s", GST_DEBUG_PAD_NAME (pad));
+
+ GST_INPUT_SELECTOR_LOCK (sel);
+ /* if the pad was the active pad, makes us select a new one */
+ if (sel->active_sinkpad == pad) {
+ GST_DEBUG_OBJECT (sel, "Deactivating pad %s:%s", GST_DEBUG_PAD_NAME (pad));
+ gst_object_unref (sel->active_sinkpad);
+ sel->active_sinkpad = NULL;
+ }
+ sel->n_pads--;
+
+ gst_pad_set_active (pad, FALSE);
+ gst_element_remove_pad (GST_ELEMENT (sel), pad);
+ GST_INPUT_SELECTOR_UNLOCK (sel);
+}
+
+static void
+gst_input_selector_reset (RsnInputSelector * sel)
+{
+ GList *walk;
+
+ GST_INPUT_SELECTOR_LOCK (sel);
+ /* clear active pad */
+ if (sel->active_sinkpad) {
+ gst_object_unref (sel->active_sinkpad);
+ sel->active_sinkpad = NULL;
+ }
+ /* reset each of our sinkpads state */
+ for (walk = GST_ELEMENT_CAST (sel)->sinkpads; walk; walk = g_list_next (walk)) {
+ RsnSelectorPad *selpad = GST_SELECTOR_PAD_CAST (walk->data);
+
+ gst_selector_pad_reset (selpad);
+
+ if (selpad->tags) {
+ gst_tag_list_unref (selpad->tags);
+ selpad->tags = NULL;
+ }
+ }
+ GST_INPUT_SELECTOR_UNLOCK (sel);
+}
+
+static GstStateChangeReturn
+gst_input_selector_change_state (GstElement * element,
+ GstStateChange transition)
+{
+ RsnInputSelector *self = GST_INPUT_SELECTOR (element);
+ GstStateChangeReturn result;
+
+ switch (transition) {
+ case GST_STATE_CHANGE_READY_TO_PAUSED:
+ GST_INPUT_SELECTOR_LOCK (self);
+ self->blocked = FALSE;
+ self->flushing = FALSE;
+ GST_INPUT_SELECTOR_UNLOCK (self);
+ break;
+ case GST_STATE_CHANGE_PAUSED_TO_READY:
+ /* first unlock before we call the parent state change function, which
+ * tries to acquire the stream lock when going to ready. */
+ GST_INPUT_SELECTOR_LOCK (self);
+ self->blocked = FALSE;
+ self->flushing = TRUE;
+ GST_INPUT_SELECTOR_BROADCAST (self);
+ GST_INPUT_SELECTOR_UNLOCK (self);
+ break;
+ default:
+ break;
+ }
+
+ result = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+ switch (transition) {
+ case GST_STATE_CHANGE_PAUSED_TO_READY:
+ gst_input_selector_reset (self);
+ break;
+ default:
+ break;
+ }
+
+ return result;
+}
+
+static gint64
+gst_input_selector_block (RsnInputSelector * self)
+{
+ gint64 ret = 0;
+ RsnSelectorPad *spad;
+
+ GST_INPUT_SELECTOR_LOCK (self);
+
+ if (self->blocked)
+ GST_WARNING_OBJECT (self, "switch already blocked");
+
+ self->blocked = TRUE;
+ spad = GST_SELECTOR_PAD_CAST (self->active_sinkpad);
+
+ if (spad)
+ ret = gst_selector_pad_get_running_time (spad);
+ else
+ GST_DEBUG_OBJECT (self, "no active pad while blocking");
+
+ GST_INPUT_SELECTOR_UNLOCK (self);
+
+ return ret;
+}
diff --git a/ext/resindvd/rsninputselector.h b/ext/resindvd/rsninputselector.h
new file mode 100644
index 00000000..d7d2a8d3
--- /dev/null
+++ b/ext/resindvd/rsninputselector.h
@@ -0,0 +1,91 @@
+/* GStreamer
+ * Copyright (C) 2003 Julien Moutte <julien@moutte.net>
+ * Copyright (C) 2005 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+ * Copyright (C) 2008 Nokia Corporation. (contact <stefan.kost@nokia.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 __RSN_INPUT_SELECTOR_H__
+#define __RSN_INPUT_SELECTOR_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_INPUT_SELECTOR \
+ (gst_input_selector_get_type())
+#define GST_INPUT_SELECTOR(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_INPUT_SELECTOR, RsnInputSelector))
+#define GST_INPUT_SELECTOR_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_INPUT_SELECTOR, RsnInputSelectorClass))
+#define GST_IS_INPUT_SELECTOR(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_INPUT_SELECTOR))
+#define GST_IS_INPUT_SELECTOR_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_INPUT_SELECTOR))
+
+typedef struct _RsnInputSelector RsnInputSelector;
+typedef struct _RsnInputSelectorClass RsnInputSelectorClass;
+
+#define GST_INPUT_SELECTOR_GET_LOCK(sel) (&((RsnInputSelector*)(sel))->lock)
+#define GST_INPUT_SELECTOR_GET_COND(sel) (&((RsnInputSelector*)(sel))->cond)
+#define GST_INPUT_SELECTOR_LOCK(sel) (g_mutex_lock (GST_INPUT_SELECTOR_GET_LOCK(sel)))
+#define GST_INPUT_SELECTOR_UNLOCK(sel) (g_mutex_unlock (GST_INPUT_SELECTOR_GET_LOCK(sel)))
+#define GST_INPUT_SELECTOR_WAIT(sel) (g_cond_wait (GST_INPUT_SELECTOR_GET_COND(sel), \
+ GST_INPUT_SELECTOR_GET_LOCK(sel)))
+#define GST_INPUT_SELECTOR_BROADCAST(sel) (g_cond_broadcast (GST_INPUT_SELECTOR_GET_COND(sel)))
+
+/**
+ * RsnInputSelectorSyncMode:
+ * @GST_INPUT_SELECTOR_SYNC_MODE_ACTIVE_SEGMENT: Sync using the current active segment.
+ * @GST_INPUT_SELECTOR_SYNC_MODE_CLOCK: Sync using the clock.
+ *
+ * The different ways that input-selector can behave when in sync-streams mode.
+ */
+typedef enum {
+ GST_INPUT_SELECTOR_SYNC_MODE_ACTIVE_SEGMENT,
+ GST_INPUT_SELECTOR_SYNC_MODE_CLOCK
+} RsnInputSelectorSyncMode;
+
+struct _RsnInputSelector {
+ GstElement element;
+
+ GstPad *srcpad;
+
+ GstPad *active_sinkpad;
+ guint n_pads;
+ guint padcount;
+ gboolean sync_streams;
+ RsnInputSelectorSyncMode sync_mode;
+ gboolean cache_buffers;
+
+ GMutex lock;
+ GCond cond;
+ gboolean blocked;
+ gboolean flushing;
+};
+
+struct _RsnInputSelectorClass {
+ GstElementClass parent_class;
+
+ gint64 (*block) (RsnInputSelector *self);
+};
+
+G_GNUC_INTERNAL GType gst_input_selector_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_INPUT_SELECTOR_H__ */
diff --git a/ext/resindvd/rsnparsetter.c b/ext/resindvd/rsnparsetter.c
deleted file mode 100644
index f2f328c2..00000000
--- a/ext/resindvd/rsnparsetter.c
+++ /dev/null
@@ -1,402 +0,0 @@
-/*
- * Copyright (C) 2008 Jan Schmidt <thaytan@noraisin.net>
- */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <gst/gst.h>
-#include <gst/glib-compat-private.h>
-#include <gst/video/video.h>
-#include <string.h>
-
-#include "rsnparsetter.h"
-#include "rsnwrappedbuffer.h"
-
-GST_DEBUG_CATEGORY_STATIC (rsn_parsetter_debug);
-#define GST_CAT_DEFAULT rsn_parsetter_debug
-
-static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
- GST_PAD_SINK,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("video/x-raw-rgb; video/x-raw-yuv")
- );
-
-static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
- GST_PAD_SRC,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("video/x-raw-rgb; video/x-raw-yuv")
- );
-
-static void rsn_parsetter_register_extra (GType rsn_parsetter_type);
-
-GST_BOILERPLATE_FULL (RsnParSetter, rsn_parsetter, GstElement,
- GST_TYPE_ELEMENT, rsn_parsetter_register_extra);
-
-static void rsn_parsetter_finalize (GObject * object);
-static GstFlowReturn rsn_parsetter_chain (GstPad * pad, GstBuffer * buf);
-static gboolean rsn_parsetter_sink_event (GstPad * pad, GstEvent * event);
-static gboolean rsn_parsetter_sink_setcaps (GstPad * pad, GstCaps * caps);
-static GstFlowReturn rsn_parsetter_sink_bufferalloc (GstPad * pad,
- guint64 offset, guint size, GstCaps * caps, GstBuffer ** buf);
-
-static GstCaps *rsn_parsetter_src_getcaps (GstPad * pad);
-static GstCaps *rsn_parsetter_convert_caps (RsnParSetter * parset,
- GstCaps * caps, gboolean widescreen);
-static gboolean rsn_parsetter_check_caps (RsnParSetter * parset,
- GstCaps * caps);
-
-static void
-rsn_parsetter_register_extra (GType rsn_parsetter_type)
-{
- GST_DEBUG_CATEGORY_INIT (rsn_parsetter_debug, "rsnparsetter", 0,
- "Resin DVD aspect ratio adjuster");
-}
-
-static void
-rsn_parsetter_base_init (gpointer gclass)
-{
-
- GstElementClass *element_class = GST_ELEMENT_CLASS (gclass);
-
- gst_element_class_add_pad_template (element_class,
- 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_details_simple (element_class,
- "Resin Aspect Ratio Setter", "Filter/Video",
- "Overrides caps on video buffers to force a particular display ratio",
- "Jan Schmidt <thaytan@noraisin.net>");
-}
-
-static void
-rsn_parsetter_class_init (RsnParSetterClass * klass)
-{
- GObjectClass *gobject_class;
-
- gobject_class = (GObjectClass *) klass;
-
- gobject_class->finalize = rsn_parsetter_finalize;
-}
-
-static void
-rsn_parsetter_init (RsnParSetter * parset, RsnParSetterClass * gclass)
-{
- parset->sinkpad = gst_pad_new_from_static_template (&sink_factory, "sink");
- gst_pad_set_getcaps_function (parset->sinkpad,
- GST_DEBUG_FUNCPTR (gst_pad_proxy_getcaps));
- gst_pad_set_chain_function (parset->sinkpad,
- GST_DEBUG_FUNCPTR (rsn_parsetter_chain));
- gst_pad_set_event_function (parset->sinkpad,
- GST_DEBUG_FUNCPTR (rsn_parsetter_sink_event));
- gst_pad_set_setcaps_function (parset->sinkpad,
- GST_DEBUG_FUNCPTR (rsn_parsetter_sink_setcaps));
- gst_pad_set_bufferalloc_function (parset->sinkpad,
- GST_DEBUG_FUNCPTR (rsn_parsetter_sink_bufferalloc));
- gst_element_add_pad (GST_ELEMENT (parset), parset->sinkpad);
-
- parset->srcpad = gst_pad_new_from_static_template (&src_factory, "src");
- gst_pad_set_getcaps_function (parset->srcpad,
- GST_DEBUG_FUNCPTR (rsn_parsetter_src_getcaps));
- gst_element_add_pad (GST_ELEMENT (parset), parset->srcpad);
-
- parset->caps_lock = g_mutex_new ();
-}
-
-static void
-rsn_parsetter_finalize (GObject * object)
-{
- RsnParSetter *parset = RSN_PARSETTER (object);
-
- gst_caps_replace (&parset->outcaps, NULL);
- gst_caps_replace (&parset->in_caps_last, NULL);
- gst_caps_replace (&parset->in_caps_converted, NULL);
-
- g_mutex_free (parset->caps_lock);
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static GstFlowReturn
-rsn_parsetter_chain (GstPad * pad, GstBuffer * buf)
-{
- RsnParSetter *parset = RSN_PARSETTER (GST_OBJECT_PARENT (pad));
- RsnMetaWrapped *meta;
-
- meta = RSN_META_WRAPPED_GET (buf);
-
- /* If this is a buffer we wrapped up earlier, unwrap it now */
- if (meta != NULL) {
- GstBuffer *wrap_buf = buf;
-
- if (meta->owner == GST_ELEMENT (parset)) {
- buf = rsn_meta_wrapped_unwrap_and_unref (wrap_buf, meta);
- GST_DEBUG_OBJECT (parset, "Unwrapping %p yields buffer %p with caps %"
- GST_PTR_FORMAT, wrap_buf, buf, GST_BUFFER_CAPS (buf));
- }
- }
-
- if (parset->outcaps != GST_BUFFER_CAPS (buf)) {
- if (parset->override_outcaps == FALSE &&
- gst_caps_is_equal (parset->outcaps, GST_BUFFER_CAPS (buf))) {
- /* Just update our output caps var */
- gst_caps_replace (&parset->outcaps, GST_BUFFER_CAPS (buf));
- goto out;
- }
-
- /* Replace the caps on the output buffer */
- buf = gst_buffer_make_metadata_writable (buf);
- gst_buffer_set_caps (buf, parset->outcaps);
-
- GST_DEBUG_OBJECT (parset,
- "Replacing caps on buffer %p with caps %" GST_PTR_FORMAT,
- buf, parset->outcaps);
- }
-
-out:
- return gst_pad_push (parset->srcpad, buf);
-}
-
-static gboolean
-rsn_parsetter_sink_event (GstPad * pad, GstEvent * event)
-{
- RsnParSetter *parset = RSN_PARSETTER (gst_pad_get_parent (pad));
- const GstStructure *structure = gst_event_get_structure (event);
-
- if (structure != NULL &&
- gst_structure_has_name (structure, "application/x-gst-dvd")) {
- const char *type = gst_structure_get_string (structure, "event");
- if (type == NULL)
- goto out;
-
- if (strcmp (type, "dvd-video-format") == 0) {
- gboolean is_widescreen;
-
- gst_structure_get_boolean (structure, "video-widescreen", &is_widescreen);
-
- GST_DEBUG_OBJECT (parset, "Video is %s",
- parset->is_widescreen ? "16:9" : "4:3");
-
- g_mutex_lock (parset->caps_lock);
- if (parset->is_widescreen != is_widescreen) {
- /* Force caps check */
- gst_caps_replace (&parset->in_caps_last, NULL);
- gst_caps_replace (&parset->in_caps_converted, NULL);
- }
- parset->is_widescreen = is_widescreen;
-
- /* FIXME: Added for testing: */
- // parset->is_widescreen = FALSE;
-
- g_mutex_unlock (parset->caps_lock);
- }
- }
-
-out:
- gst_object_unref (GST_OBJECT (parset));
- return gst_pad_event_default (pad, event);
-}
-
-static GstCaps *
-rsn_parsetter_src_getcaps (GstPad * pad)
-{
- RsnParSetter *parset = RSN_PARSETTER (gst_pad_get_parent (pad));
- GstCaps *ret;
- const GstCaps *templ_caps = gst_pad_get_pad_template_caps (pad);
-
- ret = gst_pad_peer_get_caps (parset->sinkpad);
- if (ret == NULL)
- ret = gst_caps_copy (templ_caps);
- else {
- GstCaps *temp;
- temp = gst_caps_intersect (templ_caps, ret);
- gst_caps_unref (ret);
- ret = rsn_parsetter_convert_caps (parset, temp, parset->is_widescreen);
- gst_caps_unref (temp);
- }
-
- gst_object_unref (parset);
- return ret;
-}
-
-static gboolean
-rsn_parsetter_check_caps (RsnParSetter * parset, GstCaps * caps)
-{
- GstStructure *s;
- gint width, height;
- gint par_n, par_d;
- guint dar_n, dar_d;
- gboolean ret = FALSE;
-
- g_mutex_lock (parset->caps_lock);
-
- if (caps == parset->in_caps_last ||
- gst_caps_is_equal (caps, parset->in_caps_last)) {
- ret = parset->in_caps_was_ok;
- goto out;
- }
-
- /* Calculate the DAR from the incoming caps, and return TRUE if it matches
- * the required DAR, FALSE if not */
- s = gst_caps_get_structure (caps, 0);
- if (s == NULL)
- goto out;
-
- if (!gst_structure_get_int (s, "width", &width) ||
- !gst_structure_get_int (s, "height", &height))
- goto out;
-
- if (!gst_structure_get_fraction (s, "pixel-aspect-ratio", &par_n, &par_d))
- par_n = par_d = 1;
-
- if (!gst_video_calculate_display_ratio (&dar_n, &dar_d, width, height,
- par_n, par_d, 1, 1))
- goto out;
-
- GST_DEBUG_OBJECT (parset,
- "Incoming video caps now: w %d h %d PAR %d/%d = DAR %d/%d",
- width, height, par_n, par_d, dar_n, dar_d);
-
- if (parset->is_widescreen) {
- if (dar_n == 16 && dar_d == 9)
- ret = TRUE;
- } else {
- if (dar_n == 4 && dar_d == 3)
- ret = TRUE;
- }
-
- gst_caps_replace (&parset->in_caps_last, caps);
- gst_caps_replace (&parset->in_caps_converted, NULL);
- parset->in_caps_was_ok = ret;
-
-out:
- g_mutex_unlock (parset->caps_lock);
- return ret;
-}
-
-static GstCaps *
-rsn_parsetter_convert_caps (RsnParSetter * parset, GstCaps * caps,
- gboolean widescreen)
-{
- /* Duplicate the given caps, with a PAR that provides the desired DAR */
- GstCaps *outcaps;
- GstStructure *s;
- gint width, height;
- gint par_n, par_d;
- guint dar_n, dar_d;
- GValue par = { 0, };
-
- g_mutex_lock (parset->caps_lock);
- if (caps == parset->in_caps_last && parset->in_caps_converted) {
- outcaps = gst_caps_ref (parset->in_caps_converted);
- goto out;
- }
-
- outcaps = gst_caps_copy (caps);
-
- /* Calculate the DAR from the incoming caps, and return TRUE if it matches
- * the required DAR, FALSE if not */
- s = gst_caps_get_structure (outcaps, 0);
- if (s == NULL)
- goto out;
-
- if (!gst_structure_get_int (s, "width", &width) ||
- !gst_structure_get_int (s, "height", &height))
- goto out;
-
- if (widescreen) {
- dar_n = 16;
- dar_d = 9;
- } else {
- dar_n = 4;
- dar_d = 3;
- }
-
- par_n = dar_n * height;
- par_d = dar_d * width;
-
- g_value_init (&par, GST_TYPE_FRACTION);
- gst_value_set_fraction (&par, par_n, par_d);
- gst_structure_set_value (s, "pixel-aspect-ratio", &par);
- g_value_unset (&par);
-
- gst_caps_replace (&parset->in_caps_converted, outcaps);
-out:
- g_mutex_unlock (parset->caps_lock);
- return outcaps;
-}
-
-static gboolean
-rsn_parsetter_sink_setcaps (GstPad * pad, GstCaps * caps)
-{
- /* Check the new incoming caps against our current DAR, and mark
- * whether the buffers will need adjusting */
- RsnParSetter *parset = RSN_PARSETTER (gst_pad_get_parent (pad));
-
- if (rsn_parsetter_check_caps (parset, caps)) {
- parset->override_outcaps = FALSE;
- gst_caps_replace (&parset->outcaps, caps);
- } else {
- GstCaps *override_caps = rsn_parsetter_convert_caps (parset, caps,
- parset->is_widescreen);
- if (parset->outcaps)
- gst_caps_unref (parset->outcaps);
- parset->outcaps = override_caps;
-
- parset->override_outcaps = TRUE;
- }
-
- GST_DEBUG_OBJECT (parset, "caps changed: need_override now = %d",
- parset->override_outcaps);
-
- gst_object_unref (parset);
- return TRUE;
-}
-
-static GstFlowReturn
-rsn_parsetter_sink_bufferalloc (GstPad * pad, guint64 offset, guint size,
- GstCaps * caps, GstBuffer ** buf)
-{
- RsnParSetter *parset = RSN_PARSETTER (gst_pad_get_parent (pad));
- GstFlowReturn ret;
-
- GST_LOG_OBJECT (parset, "Entering bufferalloc");
-
- if (rsn_parsetter_check_caps (parset, caps)) {
- ret = gst_pad_alloc_buffer (parset->srcpad, offset, size, caps, buf);
- GST_LOG_OBJECT (parset, "Not wrapping buf %p", *buf);
- } else {
- /* Allocate and wrap a downstream buffer */
- GstBuffer *orig_buf;
- GstBuffer *outbuf;
- GstCaps *override_caps = rsn_parsetter_convert_caps (parset, caps,
- parset->is_widescreen);
-
- ret = gst_pad_alloc_buffer (parset->srcpad, offset, size,
- override_caps, &orig_buf);
- gst_caps_unref (override_caps);
-
- if (ret != GST_FLOW_OK)
- return ret;
-
- outbuf = rsn_wrapped_buffer_new (orig_buf, GST_ELEMENT_CAST (parset));
- if (!outbuf) {
- /* FIXME: Throw error */
- return GST_FLOW_ERROR;
- }
-
- gst_buffer_set_caps (outbuf, caps);
-
- GST_LOG_OBJECT (parset,
- "Wrapped ds buf %p with caps %" GST_PTR_FORMAT
- " into new buf %p with caps %" GST_PTR_FORMAT,
- orig_buf, GST_BUFFER_CAPS (orig_buf), outbuf, GST_BUFFER_CAPS (outbuf));
-
- *buf = outbuf;
- }
-
- gst_object_unref (GST_OBJECT (parset));
-
- return ret;
-}
diff --git a/ext/resindvd/rsnstreamselector.c b/ext/resindvd/rsnstreamselector.c
deleted file mode 100644
index d6106770..00000000
--- a/ext/resindvd/rsnstreamselector.c
+++ /dev/null
@@ -1,769 +0,0 @@
-/* GStreamer
- * Copyright (C) 2003 Julien Moutte <julien@moutte.net>
- * Copyright (C) 2005 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
- * Copyright (C) 2005 Jan Schmidt <thaytan@mad.scientist.com>
- * Copyright (C) 2007 Wim Taymans <wim.taymans@gmail.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 <string.h>
-
-#include "rsnstreamselector.h"
-
-GST_DEBUG_CATEGORY_STATIC (stream_selector_debug);
-#define GST_CAT_DEFAULT stream_selector_debug
-
-static GstStaticPadTemplate rsn_stream_selector_sink_factory =
-GST_STATIC_PAD_TEMPLATE ("sink_%u",
- GST_PAD_SINK,
- GST_PAD_REQUEST,
- GST_STATIC_CAPS_ANY);
-
-static GstStaticPadTemplate rsn_stream_selector_src_factory =
-GST_STATIC_PAD_TEMPLATE ("src",
- GST_PAD_SRC,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS_ANY);
-
-enum
-{
- PROP_0,
- PROP_N_PADS,
- PROP_ACTIVE_PAD,
- PROP_LAST
-};
-
-static gboolean rsn_stream_selector_is_active_sinkpad (RsnStreamSelector * sel,
- GstPad * pad);
-static GstPad *rsn_stream_selector_get_active (RsnStreamSelector * sel,
- GstPad * pad);
-static void rsn_stream_selector_set_active (RsnStreamSelector * sel,
- GstPad * pad);
-static GstPad *rsn_stream_selector_get_linked_pad (GstPad * pad,
- gboolean strict);
-
-#define RSN_TYPE_SELECTOR_PAD \
- (gst_selector_pad_get_type())
-#define GST_SELECTOR_PAD(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST ((obj), RSN_TYPE_SELECTOR_PAD, RsnSelectorPad))
-#define GST_SELECTOR_PAD_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST ((klass), RSN_TYPE_SELECTOR_PAD, RsnSelectorPadClass))
-#define RSN_IS_SELECTOR_PAD(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RSN_TYPE_SELECTOR_PAD))
-#define RSN_IS_SELECTOR_PAD_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE ((klass), RSN_TYPE_SELECTOR_PAD))
-#define GST_SELECTOR_PAD_CAST(obj) \
- ((RsnSelectorPad *)(obj))
-
-typedef struct _RsnSelectorPad RsnSelectorPad;
-typedef struct _RsnSelectorPadClass RsnSelectorPadClass;
-
-struct _RsnSelectorPad
-{
- GstPad parent;
-
- gboolean active;
- gboolean eos;
- GstSegment segment;
- GstTagList *tags;
-};
-
-struct _RsnSelectorPadClass
-{
- GstPadClass parent;
-};
-
-static void gst_selector_pad_class_init (RsnSelectorPadClass * klass);
-static void gst_selector_pad_init (RsnSelectorPad * pad);
-static void gst_selector_pad_finalize (GObject * object);
-
-static void gst_selector_pad_get_property (GObject * object,
- guint prop_id, GValue * value, GParamSpec * pspec);
-
-static GstPadClass *selector_pad_parent_class = NULL;
-
-static void gst_selector_pad_reset (RsnSelectorPad * pad);
-static gboolean gst_selector_pad_event (GstPad * pad, GstEvent * event);
-static GstCaps *gst_selector_pad_getcaps (GstPad * pad);
-static GstFlowReturn gst_selector_pad_chain (GstPad * pad, GstBuffer * buf);
-static GstFlowReturn gst_selector_pad_bufferalloc (GstPad * pad,
- guint64 offset, guint size, GstCaps * caps, GstBuffer ** buf);
-
-enum
-{
- PROP_PAD_0,
- PROP_PAD_TAGS,
- PROP_PAD_ACTIVE,
- PROP_PAD_LAST
-};
-
-static GType
-gst_selector_pad_get_type (void)
-{
- static GType selector_pad_type = 0;
-
- if (!selector_pad_type) {
- static const GTypeInfo selector_pad_info = {
- sizeof (RsnSelectorPadClass),
- NULL,
- NULL,
- (GClassInitFunc) gst_selector_pad_class_init,
- NULL,
- NULL,
- sizeof (RsnSelectorPad),
- 0,
- (GInstanceInitFunc) gst_selector_pad_init,
- };
-
- selector_pad_type =
- g_type_register_static (GST_TYPE_PAD, "RsnSelectorPad",
- &selector_pad_info, 0);
- }
- return selector_pad_type;
-}
-
-static void
-gst_selector_pad_class_init (RsnSelectorPadClass * klass)
-{
- GObjectClass *gobject_class;
-
- gobject_class = (GObjectClass *) klass;
-
- selector_pad_parent_class = g_type_class_peek_parent (klass);
-
- gobject_class->finalize = gst_selector_pad_finalize;
- gobject_class->get_property =
- GST_DEBUG_FUNCPTR (gst_selector_pad_get_property);
-
- g_object_class_install_property (gobject_class, PROP_PAD_TAGS,
- g_param_spec_boxed ("tags", "Tags",
- "The currently active tags on the pad", GST_TYPE_TAG_LIST,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (gobject_class, PROP_PAD_ACTIVE,
- g_param_spec_boolean ("active", "Active",
- "If the pad is currently active", FALSE,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-}
-
-static void
-gst_selector_pad_init (RsnSelectorPad * pad)
-{
- gst_selector_pad_reset (pad);
-}
-
-static void
-gst_selector_pad_finalize (GObject * object)
-{
- RsnSelectorPad *pad;
-
- pad = GST_SELECTOR_PAD_CAST (object);
-
- if (pad->tags)
- gst_tag_list_unref (pad->tags);
-
- G_OBJECT_CLASS (selector_pad_parent_class)->finalize (object);
-}
-
-static void
-gst_selector_pad_get_property (GObject * object,
- guint prop_id, GValue * value, GParamSpec * pspec)
-{
- RsnSelectorPad *pad;
-
- pad = GST_SELECTOR_PAD (object);
-
- switch (prop_id) {
- case PROP_PAD_TAGS:
- GST_OBJECT_LOCK (object);
- g_value_set_boxed (value, pad->tags);
- GST_OBJECT_UNLOCK (object);
- break;
- case PROP_PAD_ACTIVE:
- {
- RsnStreamSelector *sel;
-
- sel = RSN_STREAM_SELECTOR (gst_pad_get_parent (pad));
- g_value_set_boolean (value, rsn_stream_selector_is_active_sinkpad (sel,
- GST_PAD_CAST (pad)));
- gst_object_unref (sel);
- break;
- }
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gst_selector_pad_reset (RsnSelectorPad * pad)
-{
- pad->active = FALSE;
- pad->eos = FALSE;
- gst_segment_init (&pad->segment, GST_FORMAT_UNDEFINED);
-}
-
-static gboolean
-gst_selector_pad_event (GstPad * pad, GstEvent * event)
-{
- gboolean res = TRUE;
- gboolean forward = TRUE;
- RsnStreamSelector *sel;
- RsnSelectorPad *selpad;
- GstPad *active_sinkpad;
-
- sel = RSN_STREAM_SELECTOR (gst_pad_get_parent (pad));
- selpad = GST_SELECTOR_PAD_CAST (pad);
-
- /* only forward if we are dealing with the active sinkpad */
- active_sinkpad = rsn_stream_selector_get_active (sel, pad);
- forward = (active_sinkpad == pad);
-
- switch (GST_EVENT_TYPE (event)) {
- case GST_EVENT_FLUSH_STOP:
- gst_selector_pad_reset (selpad);
- break;
- case GST_EVENT_NEWSEGMENT:
- {
- gboolean update;
- GstFormat format;
- gdouble rate, arate;
- gint64 start, stop, time;
-
- gst_event_parse_new_segment_full (event, &update, &rate, &arate, &format,
- &start, &stop, &time);
-
- GST_DEBUG_OBJECT (selpad,
- "configured NEWSEGMENT update %d, rate %lf, applied rate %lf, "
- "format %d, "
- "%" G_GINT64_FORMAT " -- %" G_GINT64_FORMAT ", time %"
- G_GINT64_FORMAT, update, rate, arate, format, start, stop, time);
-
- gst_segment_set_newsegment_full (&selpad->segment, update,
- rate, arate, format, start, stop, time);
- break;
- }
- case GST_EVENT_TAG:
- {
- GstTagList *tags;
-
- GST_OBJECT_LOCK (selpad);
- if (selpad->tags)
- gst_tag_list_unref (selpad->tags);
- gst_event_parse_tag (event, &tags);
- if (tags)
- tags = gst_tag_list_copy (tags);
- selpad->tags = tags;
- GST_DEBUG_OBJECT (sel, "received tags %" GST_PTR_FORMAT, selpad->tags);
- GST_OBJECT_UNLOCK (selpad);
- break;
- }
- case GST_EVENT_CUSTOM_DOWNSTREAM:
- {
- const GstStructure *structure = gst_event_get_structure (event);
- if (structure != NULL &&
- gst_structure_has_name (structure, "application/x-gst-dvd")) {
- const char *type = gst_structure_get_string (structure, "event");
- if (strcmp (type, "select-pad") == 0) {
- rsn_stream_selector_set_active (sel, pad);
- forward = FALSE;
- }
- }
- }
- case GST_EVENT_EOS:
- selpad->eos = TRUE;
- break;
- default:
- break;
- }
- if (forward)
- res = gst_pad_push_event (sel->srcpad, event);
- else
- gst_event_unref (event);
-
- gst_object_unref (sel);
-
- return res;
-}
-
-static GstCaps *
-gst_selector_pad_getcaps (GstPad * pad)
-{
- RsnStreamSelector *sel;
- GstCaps *caps;
-
- sel = RSN_STREAM_SELECTOR (gst_pad_get_parent (pad));
-
- GST_DEBUG_OBJECT (sel, "Getting caps of srcpad peer");
- caps = gst_pad_peer_get_caps (sel->srcpad);
- if (caps == NULL)
- caps = gst_caps_new_any ();
-
- gst_object_unref (sel);
-
- return caps;
-}
-
-static GstFlowReturn
-gst_selector_pad_bufferalloc (GstPad * pad, guint64 offset,
- guint size, GstCaps * caps, GstBuffer ** buf)
-{
- RsnStreamSelector *sel;
- GstFlowReturn result;
- GstPad *active_sinkpad;
-
- sel = RSN_STREAM_SELECTOR (gst_pad_get_parent (pad));
-
- active_sinkpad = rsn_stream_selector_get_active (sel, pad);
-
- /* Fallback allocation for buffers from pads except the selected one */
- if (pad != active_sinkpad) {
- GST_DEBUG_OBJECT (sel,
- "Pad %s:%s is not selected. Performing fallback allocation",
- GST_DEBUG_PAD_NAME (pad));
-
- *buf = NULL;
- result = GST_FLOW_OK;
- } else {
- result = gst_pad_alloc_buffer (sel->srcpad, offset, size, caps, buf);
-
- /* FIXME: HACK. If buffer alloc returns not-linked, perform a fallback
- * allocation. This should NOT be necessary, because playbin should
- * properly block the source pad from running until it's finished hooking
- * everything up, but playbin needs refactoring first. */
- if (result == GST_FLOW_NOT_LINKED) {
- GST_DEBUG_OBJECT (sel,
- "No peer pad yet - performing fallback allocation for pad %s:%s",
- GST_DEBUG_PAD_NAME (pad));
-
- *buf = NULL;
- result = GST_FLOW_OK;
- }
- }
-
- gst_object_unref (sel);
-
- return result;
-}
-
-static GstFlowReturn
-gst_selector_pad_chain (GstPad * pad, GstBuffer * buf)
-{
- RsnStreamSelector *sel;
- GstFlowReturn res;
- GstPad *active_sinkpad;
- RsnSelectorPad *selpad;
- GstClockTime timestamp;
- GstSegment *seg;
- gboolean discont;
-
- sel = RSN_STREAM_SELECTOR (gst_pad_get_parent (pad));
- selpad = GST_SELECTOR_PAD_CAST (pad);
- seg = &selpad->segment;
-
- active_sinkpad = rsn_stream_selector_get_active (sel, pad);
-
- timestamp = GST_BUFFER_TIMESTAMP (buf);
- if (GST_CLOCK_TIME_IS_VALID (timestamp)) {
- GST_DEBUG_OBJECT (sel, "received timestamp %" GST_TIME_FORMAT,
- GST_TIME_ARGS (timestamp));
- gst_segment_set_last_stop (seg, seg->format, timestamp);
- }
-
- /* Ignore buffers from pads except the selected one */
- if (pad != active_sinkpad)
- goto ignore;
-
- /* If we just switched pads, mark a discont buffer */
- GST_OBJECT_LOCK (sel);
- discont = sel->mark_discont;
- sel->mark_discont = FALSE;
- GST_OBJECT_UNLOCK (sel);
-
- if (discont) {
- GST_DEBUG_OBJECT (sel, "Marking buffer discont due to pad switch");
- buf = gst_buffer_make_metadata_writable (buf);
- GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT);
- }
-
- /* forward */
- GST_LOG_OBJECT (sel, "Forwarding buffer %p from pad %s:%s", buf,
- GST_DEBUG_PAD_NAME (pad));
- res = gst_pad_push (sel->srcpad, buf);
-done:
- gst_object_unref (sel);
- return res;
- /* dropped buffers */
-ignore:
- {
- GST_DEBUG_OBJECT (sel, "Ignoring buffer %p from pad %s:%s",
- buf, GST_DEBUG_PAD_NAME (pad));
- gst_buffer_unref (buf);
- res = GST_FLOW_NOT_LINKED;
- goto done;
- }
-}
-
-static void rsn_stream_selector_dispose (GObject * object);
-
-static void rsn_stream_selector_init (RsnStreamSelector * sel);
-static void rsn_stream_selector_base_init (RsnStreamSelectorClass * klass);
-static void rsn_stream_selector_class_init (RsnStreamSelectorClass * klass);
-
-static void rsn_stream_selector_set_property (GObject * object,
- guint prop_id, const GValue * value, GParamSpec * pspec);
-static void rsn_stream_selector_get_property (GObject * object,
- guint prop_id, GValue * value, GParamSpec * pspec);
-
-static GstPad *rsn_stream_selector_request_new_pad (GstElement * element,
- GstPadTemplate * templ, const gchar * unused);
-static void rsn_stream_selector_release_pad (GstElement * element,
- GstPad * pad);
-static GstIterator *rsn_stream_selector_iterate_linked_pads (GstPad * pad);
-static GstCaps *rsn_stream_selector_getcaps (GstPad * pad);
-
-static GstElementClass *parent_class = NULL;
-
-GType
-rsn_stream_selector_get_type (void)
-{
- static GType stream_selector_type = 0;
-
- if (!stream_selector_type) {
- static const GTypeInfo stream_selector_info = {
- sizeof (RsnStreamSelectorClass),
- (GBaseInitFunc) rsn_stream_selector_base_init,
- NULL,
- (GClassInitFunc) rsn_stream_selector_class_init,
- NULL,
- NULL,
- sizeof (RsnStreamSelector),
- 0,
- (GInstanceInitFunc) rsn_stream_selector_init,
- };
- stream_selector_type =
- g_type_register_static (GST_TYPE_ELEMENT,
- "RsnStreamSelector", &stream_selector_info, 0);
- GST_DEBUG_CATEGORY_INIT (stream_selector_debug,
- "streamselector", 0, "A stream-selector element");
- }
-
- return stream_selector_type;
-}
-
-static void
-rsn_stream_selector_base_init (RsnStreamSelectorClass * klass)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
- gst_element_class_set_details_simple (element_class, "StreamSelector",
- "Generic", "N-to-1 input stream_selectoring",
- "Julien Moutte <julien@moutte.net>, "
- "Ronald S. Bultje <rbultje@ronald.bitfreak.net>, "
- "Jan Schmidt <thaytan@mad.scientist.com>, "
- "Wim Taymans <wim.taymans@gmail.com>");
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&rsn_stream_selector_sink_factory));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&rsn_stream_selector_src_factory));
-}
-
-static void
-rsn_stream_selector_class_init (RsnStreamSelectorClass * klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
-
- parent_class = g_type_class_peek_parent (klass);
-
- gobject_class->dispose = rsn_stream_selector_dispose;
-
- gobject_class->set_property =
- GST_DEBUG_FUNCPTR (rsn_stream_selector_set_property);
- gobject_class->get_property =
- GST_DEBUG_FUNCPTR (rsn_stream_selector_get_property);
-
- g_object_class_install_property (gobject_class, PROP_N_PADS,
- g_param_spec_uint ("n-pads", "Number of Pads",
- "The number of sink pads", 0, G_MAXUINT, 0,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (gobject_class, PROP_ACTIVE_PAD,
- g_param_spec_object ("active-pad", "Active Pad",
- "The currently active sink pad", GST_TYPE_PAD,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
- gstelement_class->request_new_pad = rsn_stream_selector_request_new_pad;
- gstelement_class->release_pad = rsn_stream_selector_release_pad;
-}
-
-static void
-rsn_stream_selector_init (RsnStreamSelector * sel)
-{
- sel->srcpad = gst_pad_new ("src", GST_PAD_SRC);
- gst_pad_set_iterate_internal_links_function (sel->srcpad,
- GST_DEBUG_FUNCPTR (rsn_stream_selector_iterate_linked_pads));
- gst_pad_set_getcaps_function (sel->srcpad,
- GST_DEBUG_FUNCPTR (rsn_stream_selector_getcaps));
- gst_element_add_pad (GST_ELEMENT (sel), sel->srcpad);
- /* sinkpad management */
- sel->padcount = 0;
- sel->active_sinkpad = NULL;
- gst_segment_init (&sel->segment, GST_FORMAT_UNDEFINED);
-}
-
-static void
-rsn_stream_selector_dispose (GObject * object)
-{
- RsnStreamSelector *sel = RSN_STREAM_SELECTOR (object);
-
- if (sel->active_sinkpad) {
- gst_object_unref (sel->active_sinkpad);
- sel->active_sinkpad = NULL;
- }
-
- G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-static void
-rsn_stream_selector_set_property (GObject * object, guint prop_id,
- const GValue * value, GParamSpec * pspec)
-{
- RsnStreamSelector *sel = RSN_STREAM_SELECTOR (object);
-
- switch (prop_id) {
- case PROP_ACTIVE_PAD:
- {
- GstPad *pad = NULL;
-
- pad = g_value_get_object (value);
- rsn_stream_selector_set_active (sel, pad);
-
- break;
- }
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-rsn_stream_selector_get_property (GObject * object, guint prop_id,
- GValue * value, GParamSpec * pspec)
-{
- RsnStreamSelector *sel = RSN_STREAM_SELECTOR (object);
-
- switch (prop_id) {
- case PROP_N_PADS:
- GST_OBJECT_LOCK (object);
- g_value_set_uint (value, sel->n_pads);
- GST_OBJECT_UNLOCK (object);
- break;
- case PROP_ACTIVE_PAD:{
- GST_OBJECT_LOCK (object);
- g_value_set_object (value, sel->active_sinkpad);
- GST_OBJECT_UNLOCK (object);
- break;
- }
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static GstPad *
-rsn_stream_selector_get_linked_pad (GstPad * pad, gboolean strict)
-{
- RsnStreamSelector *sel;
- GstPad *otherpad = NULL;
-
- sel = RSN_STREAM_SELECTOR (gst_pad_get_parent (pad));
-
- GST_OBJECT_LOCK (sel);
- if (pad == sel->srcpad)
- otherpad = sel->active_sinkpad;
- else if (pad == sel->active_sinkpad || !strict)
- otherpad = sel->srcpad;
- if (otherpad)
- gst_object_ref (otherpad);
- GST_OBJECT_UNLOCK (sel);
- gst_object_unref (sel);
- return otherpad;
-}
-
-static GstCaps *
-rsn_stream_selector_getcaps (GstPad * pad)
-{
- GstPad *otherpad;
- GstObject *parent;
- GstCaps *caps;
-
- otherpad = rsn_stream_selector_get_linked_pad (pad, FALSE);
- parent = gst_object_get_parent (GST_OBJECT (pad));
- if (!otherpad) {
- GST_DEBUG_OBJECT (parent,
- "Pad %s:%s not linked, returning ANY", GST_DEBUG_PAD_NAME (pad));
- caps = gst_caps_new_any ();
- } else {
- GST_DEBUG_OBJECT (parent,
- "Pad %s:%s is linked (to %s:%s), returning peer caps",
- GST_DEBUG_PAD_NAME (pad), GST_DEBUG_PAD_NAME (otherpad));
- /* if the peer has caps, use those. If the pad is not linked, this function
- * returns NULL and we return ANY */
- if (!(caps = gst_pad_peer_get_caps (otherpad)))
- caps = gst_caps_new_any ();
- gst_object_unref (otherpad);
- }
-
- gst_object_unref (parent);
- return caps;
-}
-
-/* check if the pad is the active sinkpad */
-static gboolean
-rsn_stream_selector_is_active_sinkpad (RsnStreamSelector * sel, GstPad * pad)
-{
- gboolean res;
-
- GST_OBJECT_LOCK (sel);
- res = (pad == sel->active_sinkpad);
- GST_OBJECT_UNLOCK (sel);
-
- return res;
-}
-
-/* Get or create the active sinkpad */
-static GstPad *
-rsn_stream_selector_get_active (RsnStreamSelector * sel, GstPad * pad)
-{
- GstPad *active_sinkpad;
- RsnSelectorPad *selpad;
-
- selpad = GST_SELECTOR_PAD_CAST (pad);
-
- GST_OBJECT_LOCK (sel);
- selpad->active = TRUE;
- active_sinkpad = sel->active_sinkpad;
- if (active_sinkpad == NULL) {
- /* first pad we get an alloc on becomes the activated pad by default */
- active_sinkpad = sel->active_sinkpad = gst_object_ref (pad);
- GST_DEBUG_OBJECT (sel, "Activating pad %s:%s", GST_DEBUG_PAD_NAME (pad));
- }
- GST_OBJECT_UNLOCK (sel);
-
- return active_sinkpad;
-}
-
-static void
-rsn_stream_selector_set_active (RsnStreamSelector * sel, GstPad * pad)
-{
- GstPad **active_pad_p;
-
- GST_OBJECT_LOCK (GST_OBJECT_CAST (sel));
- if (pad != sel->active_sinkpad) {
- RsnSelectorPad *selpad;
-
- selpad = GST_SELECTOR_PAD_CAST (pad);
- /* we can only activate pads that have data received */
- if (selpad && !selpad->active) {
- GST_DEBUG_OBJECT (sel, "No data received on pad %" GST_PTR_FORMAT, pad);
- } else {
- active_pad_p = &sel->active_sinkpad;
- gst_object_replace ((GstObject **) active_pad_p, GST_OBJECT_CAST (pad));
- GST_DEBUG_OBJECT (sel, "New active pad is %" GST_PTR_FORMAT,
- sel->active_sinkpad);
- }
- /* Mark the next buffer as discontinuous */
- sel->mark_discont = TRUE;
- }
- GST_OBJECT_UNLOCK (GST_OBJECT_CAST (sel));
-}
-
-static GstIterator *
-rsn_stream_selector_iterate_linked_pads (GstPad * pad)
-{
- RsnStreamSelector *sel = RSN_STREAM_SELECTOR (gst_pad_get_parent (pad));
- GstPad *otherpad = rsn_stream_selector_get_linked_pad (pad, TRUE);
- GstIterator *it = gst_iterator_new_single (GST_TYPE_PAD, otherpad,
- (GstCopyFunction) gst_object_ref, (GFreeFunc) gst_object_unref);
-
- if (otherpad)
- gst_object_unref (otherpad);
- gst_object_unref (sel);
-
- return it;
-}
-
-static GstPad *
-rsn_stream_selector_request_new_pad (GstElement * element,
- GstPadTemplate * templ, const gchar * unused)
-{
- RsnStreamSelector *sel;
- gchar *name = NULL;
- GstPad *sinkpad = NULL;
-
- sel = RSN_STREAM_SELECTOR (element);
- g_return_val_if_fail (templ->direction == GST_PAD_SINK, NULL);
- GST_LOG_OBJECT (sel, "Creating new pad %d", sel->padcount);
- GST_OBJECT_LOCK (sel);
- name = g_strdup_printf ("sink_%u", sel->padcount++);
- sinkpad = g_object_new (RSN_TYPE_SELECTOR_PAD,
- "name", name, "direction", templ->direction, "template", templ, NULL);
- g_free (name);
- sel->n_pads++;
- GST_OBJECT_UNLOCK (sel);
-
- gst_pad_set_event_function (sinkpad,
- GST_DEBUG_FUNCPTR (gst_selector_pad_event));
- gst_pad_set_getcaps_function (sinkpad,
- GST_DEBUG_FUNCPTR (gst_selector_pad_getcaps));
- gst_pad_set_chain_function (sinkpad,
- GST_DEBUG_FUNCPTR (gst_selector_pad_chain));
- gst_pad_set_iterate_internal_links_function (sinkpad,
- GST_DEBUG_FUNCPTR (rsn_stream_selector_iterate_linked_pads));
- gst_pad_set_bufferalloc_function (sinkpad,
- GST_DEBUG_FUNCPTR (gst_selector_pad_bufferalloc));
-
- gst_pad_set_active (sinkpad, TRUE);
- gst_element_add_pad (GST_ELEMENT (sel), sinkpad);
- return sinkpad;
-}
-
-static void
-rsn_stream_selector_release_pad (GstElement * element, GstPad * pad)
-{
- RsnStreamSelector *sel;
-
- sel = RSN_STREAM_SELECTOR (element);
- GST_LOG_OBJECT (sel, "Releasing pad %s:%s", GST_DEBUG_PAD_NAME (pad));
-
- GST_OBJECT_LOCK (sel);
- /* if the pad was the active pad, makes us select a new one */
- if (sel->active_sinkpad == pad) {
- GST_DEBUG_OBJECT (sel, "Deactivating pad %s:%s", GST_DEBUG_PAD_NAME (pad));
- sel->active_sinkpad = NULL;
- }
- sel->n_pads--;
- GST_OBJECT_UNLOCK (sel);
-
- gst_pad_set_active (pad, FALSE);
- gst_element_remove_pad (GST_ELEMENT (sel), pad);
-}
diff --git a/ext/resindvd/rsnstreamselector.h b/ext/resindvd/rsnstreamselector.h
deleted file mode 100644
index a8ff1af5..00000000
--- a/ext/resindvd/rsnstreamselector.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* GStreamer
- * Copyright (C) 2003 Julien Moutte <julien@moutte.net>
- * Copyright (C) 2005 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
- *
- * 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 __RSN_STREAM_SELECTOR_H__
-#define __RSN_STREAM_SELECTOR_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-#define RSN_TYPE_STREAM_SELECTOR \
- (rsn_stream_selector_get_type())
-#define RSN_STREAM_SELECTOR(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST ((obj), RSN_TYPE_STREAM_SELECTOR, RsnStreamSelector))
-#define RSN_STREAM_SELECTOR_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST ((klass), RSN_TYPE_STREAM_SELECTOR, RsnStreamSelectorClass))
-#define RSN_IS_STREAM_SELECTOR(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), RSN_TYPE_STREAM_SELECTOR))
-#define RSN_IS_STREAM_SELECTOR_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE ((klass), RSN_TYPE_STREAM_SELECTOR))
-
-typedef struct _RsnStreamSelector RsnStreamSelector;
-typedef struct _RsnStreamSelectorClass RsnStreamSelectorClass;
-
-struct _RsnStreamSelector {
- GstElement element;
-
- GstPad *srcpad;
-
- GstPad *active_sinkpad;
- guint n_pads;
- guint padcount;
-
- GstSegment segment;
- gboolean mark_discont;
-};
-
-struct _RsnStreamSelectorClass {
- GstElementClass parent_class;
-};
-
-GType rsn_stream_selector_get_type (void);
-
-G_END_DECLS
-
-#endif /* __RSN_STREAM_SELECTOR_H__ */
diff --git a/ext/resindvd/rsnwrappedbuffer.c b/ext/resindvd/rsnwrappedbuffer.c
deleted file mode 100644
index a5f4c0fd..00000000
--- a/ext/resindvd/rsnwrappedbuffer.c
+++ /dev/null
@@ -1,121 +0,0 @@
-/* GStreamer
- * Copyright (C) 2008 Jan Schmidt <thaytan@noraisin.net>
- *
- * 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 <string.h>
-
-#include <gst/gst.h>
-
-#include "rsnwrappedbuffer.h"
-
-GstBuffer *
-rsn_wrapped_buffer_new (GstBuffer * buf_to_wrap, GstElement * owner)
-{
- GstBuffer *buf;
- RsnMetaWrapped *meta;
-
- g_return_val_if_fail (buf_to_wrap, NULL);
-
- buf = gst_buffer_new ();
- meta = RSN_META_WRAPPED_ADD (buf);
-
- meta->wrapped_buffer = buf_to_wrap;
- meta->owner = gst_object_ref (owner);
-
- GST_BUFFER_DATA (buf) = GST_BUFFER_DATA (buf_to_wrap);
- GST_BUFFER_SIZE (buf) = GST_BUFFER_SIZE (buf_to_wrap);
- gst_buffer_copy_metadata (GST_BUFFER (buf), buf_to_wrap, GST_BUFFER_COPY_ALL);
-
- /* If the wrapped buffer isn't writable, make sure this one isn't either */
- if (!gst_buffer_is_writable (buf_to_wrap))
- GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_READONLY);
-
- return buf;
-}
-
-void
-rsn_meta_wrapped_set_owner (RsnMetaWrapped * meta, GstElement * owner)
-{
- g_return_if_fail (meta != NULL);
-
- if (meta->owner)
- gst_object_unref (meta->owner);
-
- if (owner)
- gst_object_ref (owner);
-
- meta->owner = owner;
-}
-
-GstBuffer *
-rsn_meta_wrapped_unwrap_and_unref (GstBuffer * wrap_buf, RsnMetaWrapped * meta)
-{
- GstBuffer *buf;
- gboolean is_readonly;
-
- g_return_val_if_fail (wrap_buf != NULL, NULL);
- g_return_val_if_fail (meta->wrapped_buffer != NULL, NULL);
-
- buf = gst_buffer_ref (meta->wrapped_buffer);
- buf = gst_buffer_make_metadata_writable (buf);
-
- /* Copy changed metadata back to the wrapped buffer from the wrapper,
- * except the the read-only flag and the caps. */
- is_readonly = GST_BUFFER_FLAG_IS_SET (wrap_buf, GST_BUFFER_FLAG_READONLY);
- gst_buffer_copy_metadata (buf, GST_BUFFER (wrap_buf),
- GST_BUFFER_COPY_FLAGS | GST_BUFFER_COPY_TIMESTAMPS);
- if (!is_readonly)
- GST_BUFFER_FLAG_UNSET (buf, GST_BUFFER_FLAG_READONLY);
-
- gst_buffer_unref (wrap_buf);
-
- return buf;
-}
-
-static void
-rsn_meta_wrapped_init (RsnMetaWrapped * meta, GstBuffer * buffer)
-{
- meta->owner = NULL;
-}
-
-static void
-rsn_meta_wrapped_free (RsnMetaWrapped * meta, GstBuffer * buffer)
-{
- gst_buffer_unref (meta->wrapped_buffer);
- if (meta->owner)
- gst_object_unref (meta->owner);
-}
-
-const GstMetaInfo *
-rsn_meta_wrapped_get_info (void)
-{
- static const GstMetaInfo *meta_info = NULL;
-
- if (meta_info == NULL) {
- meta_info = gst_meta_register ("RsnMetaWrapped", "RsnMetaWrapped",
- sizeof (RsnMetaWrapped),
- (GstMetaInitFunction) rsn_meta_wrapped_init,
- (GstMetaFreeFunction) rsn_meta_wrapped_free,
- (GstMetaTransformFunction) NULL,
- (GstMetaSerializeFunction) NULL, (GstMetaDeserializeFunction) NULL);
- }
- return meta_info;
-}
diff --git a/ext/rsvg/Makefile.in b/ext/rsvg/Makefile.in
index 9e528f29..664368f6 100644
--- a/ext/rsvg/Makefile.in
+++ b/ext/rsvg/Makefile.in
@@ -343,6 +343,8 @@ 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@
@@ -350,6 +352,8 @@ 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@
@@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -392,6 +395,10 @@ 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@
@@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/rtmp/Makefile.in b/ext/rtmp/Makefile.in
index 2e6aab66..bd4bb8b1 100644
--- a/ext/rtmp/Makefile.in
+++ b/ext/rtmp/Makefile.in
@@ -343,6 +343,8 @@ 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@
@@ -350,6 +352,8 @@ 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@
@@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -392,6 +395,10 @@ 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@
@@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/schroedinger/Makefile.in b/ext/schroedinger/Makefile.in
index b3d0136a..1b3f460a 100644
--- a/ext/schroedinger/Makefile.in
+++ b/ext/schroedinger/Makefile.in
@@ -344,6 +344,8 @@ 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@
@@ -351,6 +353,8 @@ 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@
@@ -365,7 +369,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -393,6 +396,10 @@ 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@
@@ -519,6 +526,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/schroedinger/gstschrodec.c b/ext/schroedinger/gstschrodec.c
index 9121a5f8..c89ca256 100644
--- a/ext/schroedinger/gstschrodec.c
+++ b/ext/schroedinger/gstschrodec.c
@@ -264,6 +264,8 @@ parse_sequence_header (GstSchroDec * schro_dec, guint8 * data, int size)
GST_DEBUG ("Pixel aspect ratio is %d/%d", state->info.par_n,
state->info.par_d);
+ gst_video_decoder_negotiate (GST_VIDEO_DECODER (schro_dec));
+
beach:
if (state)
gst_video_codec_state_unref (state);
diff --git a/ext/schroedinger/gstschroenc.c b/ext/schroedinger/gstschroenc.c
index 3b9118c1..8b5c6fc6 100644
--- a/ext/schroedinger/gstschroenc.c
+++ b/ext/schroedinger/gstschroenc.c
@@ -138,9 +138,12 @@ register_enum_list (const SchroEncoderSetting * setting)
enumtypes = g_malloc0 ((n + 1) * sizeof (GEnumValue));
for (i = 0; i < n; i++) {
+ gchar *nick;
+
enumtypes[i].value = i;
- enumtypes[i].value_name = setting->enum_list[i];
- enumtypes[i].value_nick = setting->enum_list[i];
+ nick = g_strdelimit (g_strdup (setting->enum_list[i]), "_", '-');
+ enumtypes[i].value_name = g_intern_static_string (nick);
+ enumtypes[i].value_nick = enumtypes[i].value_name;
}
typename = g_strdup_printf ("SchroEncoderSettingEnum_%s", setting->name);
@@ -171,6 +174,17 @@ gst_schro_enc_class_init (GstSchroEncClass * klass)
setting = schro_encoder_get_setting_info (i);
+ /* we do this by checking downstream caps, and the profile/level selected
+ * should be read from the output caps and not from properties */
+ if (strcmp (setting->name, "force_profile") == 0
+ || strcmp (setting->name, "profile") == 0
+ || strcmp (setting->name, "level") == 0)
+ continue;
+
+ /* we configure this based on the input caps */
+ if (strcmp (setting->name, "interlaced_coding") == 0)
+ continue;
+
switch (setting->type) {
case SCHRO_ENCODER_SETTING_TYPE_BOOLEAN:
g_object_class_install_property (gobject_class, i + 1,
@@ -253,6 +267,89 @@ gst_schro_enc_finalize (GObject * object)
G_OBJECT_CLASS (parent_class)->finalize (object);
}
+static const gchar *
+get_profile_name (int profile)
+{
+ switch (profile) {
+ case 0:
+ return "vc2-low-delay";
+ case 1:
+ return "vc2-simple";
+ case 2:
+ return "vc2-main";
+ case 8:
+ return "main";
+ default:
+ break;
+ }
+ return "unknown";
+}
+
+static const gchar *
+get_level_name (int level)
+{
+ switch (level) {
+ case 0:
+ return "0";
+ case 1:
+ return "1";
+ case 128:
+ return "128";
+ default:
+ break;
+ }
+ /* need to add it to template caps, so return 0 for now */
+ GST_WARNING ("unhandled dirac level %u", level);
+ return "0";
+}
+
+static void
+gst_schro_enc_negotiate_profile (GstSchroEnc * enc)
+{
+ GstStructure *s;
+ const gchar *profile;
+ const gchar *level;
+ GstCaps *allowed_caps;
+
+ allowed_caps = gst_pad_get_allowed_caps (GST_VIDEO_ENCODER_SRC_PAD (enc));
+
+ GST_DEBUG_OBJECT (enc, "allowed caps: %" GST_PTR_FORMAT, allowed_caps);
+
+ if (allowed_caps == NULL)
+ return;
+
+ if (gst_caps_is_empty (allowed_caps) || gst_caps_is_any (allowed_caps))
+ goto out;
+
+ allowed_caps = gst_caps_make_writable (allowed_caps);
+ allowed_caps = gst_caps_fixate (allowed_caps);
+ s = gst_caps_get_structure (allowed_caps, 0);
+
+ profile = gst_structure_get_string (s, "profile");
+ if (profile) {
+ if (!strcmp (profile, "vc2-low-delay")) {
+ schro_encoder_setting_set_double (enc->encoder, "force_profile", 1);
+ } else if (!strcmp (profile, "vc2-simple")) {
+ schro_encoder_setting_set_double (enc->encoder, "force_profile", 2);
+ } else if (!strcmp (profile, "vc2-main")) {
+ schro_encoder_setting_set_double (enc->encoder, "force_profile", 3);
+ } else if (!strcmp (profile, "main")) {
+ schro_encoder_setting_set_double (enc->encoder, "force_profile", 4);
+ } else {
+ GST_WARNING_OBJECT (enc, "ignoring unknown profile '%s'", profile);
+ }
+ }
+
+ level = gst_structure_get_string (s, "level");
+ if (level != NULL && strcmp (level, "0") != 0) {
+ GST_FIXME_OBJECT (enc, "level setting not implemented");
+ }
+
+out:
+
+ gst_caps_unref (allowed_caps);
+}
+
static gboolean
gst_schro_enc_set_format (GstVideoEncoder * base_video_encoder,
GstVideoCodecState * state)
@@ -262,6 +359,8 @@ gst_schro_enc_set_format (GstVideoEncoder * base_video_encoder,
GstVideoInfo *info = &state->info;
GstVideoCodecState *output_state;
GstClockTime latency;
+ GstCaps *out_caps;
+ int level, profile;
GST_DEBUG ("set_output_caps");
@@ -340,6 +439,13 @@ gst_schro_enc_set_format (GstVideoEncoder * base_video_encoder,
#endif
}
+ if (GST_VIDEO_INFO_IS_INTERLACED (&state->info)) {
+ schro_enc->video_format->interlaced_coding = 1;
+ }
+
+ /* See if downstream caps specify profile/level */
+ gst_schro_enc_negotiate_profile (schro_enc);
+
/* Finally set latency */
latency = gst_util_uint64_scale (GST_SECOND,
GST_VIDEO_INFO_FPS_D (info) *
@@ -359,9 +465,15 @@ gst_schro_enc_set_format (GstVideoEncoder * base_video_encoder,
schro_enc->granule_offset = ~0;
+ profile = schro_encoder_setting_get_double (schro_enc->encoder, "profile");
+ level = schro_encoder_setting_get_double (schro_enc->encoder, "level");
+
+ out_caps = gst_caps_new_simple ("video/x-dirac",
+ "profile", G_TYPE_STRING, get_profile_name (profile),
+ "level", G_TYPE_STRING, get_level_name (level), NULL);
+
output_state =
- gst_video_encoder_set_output_state (base_video_encoder,
- gst_caps_new_empty_simple ("video/x-dirac"), state);
+ gst_video_encoder_set_output_state (base_video_encoder, out_caps, state);
GST_BUFFER_FLAG_SET (seq_header_buffer, GST_BUFFER_FLAG_HEADER);
{
@@ -424,10 +536,9 @@ gst_schro_enc_set_property (GObject * object, guint prop_id,
{
GstSchroEnc *src;
- g_return_if_fail (GST_IS_SCHRO_ENC (object));
src = GST_SCHRO_ENC (object);
- GST_DEBUG ("gst_schro_enc_set_property");
+ GST_DEBUG ("%s", pspec->name);
if (prop_id >= 1) {
const SchroEncoderSetting *setting;
@@ -459,7 +570,6 @@ gst_schro_enc_get_property (GObject * object, guint prop_id, GValue * value,
{
GstSchroEnc *src;
- g_return_if_fail (GST_IS_SCHRO_ENC (object));
src = GST_SCHRO_ENC (object);
if (prop_id >= 1) {
diff --git a/ext/sdl/Makefile.in b/ext/sdl/Makefile.in
index bedfcb5e..db146803 100644
--- a/ext/sdl/Makefile.in
+++ b/ext/sdl/Makefile.in
@@ -342,6 +342,8 @@ 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@
@@ -349,6 +351,8 @@ 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@
@@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -391,6 +394,10 @@ 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@
@@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/sndfile/Makefile.in b/ext/sndfile/Makefile.in
index 6cb61a2a..5656784e 100644
--- a/ext/sndfile/Makefile.in
+++ b/ext/sndfile/Makefile.in
@@ -342,6 +342,8 @@ 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@
@@ -349,6 +351,8 @@ 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@
@@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -391,6 +394,10 @@ 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@
@@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/sndio/Makefile.in b/ext/sndio/Makefile.in
index 4bdcd359..71525a4c 100644
--- a/ext/sndio/Makefile.in
+++ b/ext/sndio/Makefile.in
@@ -342,6 +342,8 @@ 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@
@@ -349,6 +351,8 @@ 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@
@@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -391,6 +394,10 @@ 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@
@@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/soundtouch/Makefile.in b/ext/soundtouch/Makefile.in
index 567bb97c..ed70938f 100644
--- a/ext/soundtouch/Makefile.in
+++ b/ext/soundtouch/Makefile.in
@@ -360,6 +360,8 @@ 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@
@@ -367,6 +369,8 @@ 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@
@@ -381,7 +385,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -409,6 +412,10 @@ 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@
@@ -535,6 +542,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/soundtouch/gstpitch.cc b/ext/soundtouch/gstpitch.cc
index 0cba53a4..ed76cd27 100644
--- a/ext/soundtouch/gstpitch.cc
+++ b/ext/soundtouch/gstpitch.cc
@@ -180,7 +180,7 @@ gst_pitch_init (GstPitch * pitch)
pitch->out_seg_rate = 1.0;
pitch->seg_arate = 1.0;
pitch->pitch = 1.0;
- pitch->next_buffer_time = 0;
+ pitch->next_buffer_time = GST_CLOCK_TIME_NONE;
pitch->next_buffer_offset = 0;
pitch->priv->st->setRate (pitch->rate);
@@ -211,7 +211,7 @@ gst_pitch_update_duration (GstPitch * pitch)
{
GstMessage *m;
- m = gst_message_new_duration (GST_OBJECT (pitch), GST_FORMAT_TIME, -1);
+ m = gst_message_new_duration_changed (GST_OBJECT (pitch));
gst_element_post_message (GST_ELEMENT (pitch), m);
}
@@ -665,8 +665,6 @@ gst_pitch_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
static gboolean
gst_pitch_process_segment (GstPitch * pitch, GstEvent ** event)
{
- GstFormat conv_format;
- gint64 next_offset = 0, next_time = 0;
gdouble out_seg_rate, our_arate;
gfloat stream_time_ratio;
GstSegment seg;
@@ -715,28 +713,10 @@ gst_pitch_process_segment (GstPitch * pitch, GstEvent ** event)
GST_OBJECT_UNLOCK (pitch);
seg.start = (gint64) (seg.start / stream_time_ratio);
- if (seg.stop != (guint64) -1)
+ if (seg.stop != (guint64) - 1)
seg.stop = (gint64) (seg.stop / stream_time_ratio);
seg.time = (gint64) (seg.time / stream_time_ratio);
- conv_format = GST_FORMAT_TIME;
- if (!gst_pitch_convert (pitch, seg.format, seg.start, &conv_format, &next_time)) {
- GST_LOG_OBJECT (pitch->sinkpad,
- "could not convert segment start value to time");
- return FALSE;
- }
-
- conv_format = GST_FORMAT_DEFAULT;
- if (!gst_pitch_convert (pitch, seg.format, seg.start, &conv_format,
- &next_offset)) {
- GST_LOG_OBJECT (pitch->sinkpad,
- "could not convert segment start value to offset");
- return FALSE;
- }
-
- pitch->next_buffer_time = next_time;
- pitch->next_buffer_offset = next_offset;
-
gst_event_unref (*event);
*event = gst_event_new_segment (&seg);
@@ -758,7 +738,7 @@ gst_pitch_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
gst_pitch_flush_buffer (pitch, FALSE);
pitch->priv->st->clear ();
pitch->next_buffer_offset = 0;
- pitch->next_buffer_time = 0;
+ pitch->next_buffer_time = GST_CLOCK_TIME_NONE;
pitch->min_latency = pitch->max_latency = 0;
break;
case GST_EVENT_EOS:
@@ -837,13 +817,22 @@ gst_pitch_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
pitch = GST_PITCH (parent);
priv = GST_PITCH_GET_PRIVATE (pitch);
- gst_object_sync_values (GST_OBJECT (pitch), pitch->next_buffer_time);
-
timestamp = GST_BUFFER_TIMESTAMP (buffer);
+ // Remember the first time and corresponding offset
+ if (!GST_CLOCK_TIME_IS_VALID (pitch->next_buffer_time)) {
+ GstFormat out_format = GST_FORMAT_DEFAULT;
+ pitch->next_buffer_time = timestamp;
+ gst_pitch_convert (pitch, GST_FORMAT_TIME, timestamp, &out_format,
+ &pitch->next_buffer_offset);
+ }
+
+ gst_object_sync_values (GST_OBJECT (pitch), pitch->next_buffer_time);
+
/* push the received samples on the soundtouch buffer */
- GST_LOG_OBJECT (pitch, "incoming buffer (%d samples)",
- (gint) (gst_buffer_get_size (buffer) / pitch->sample_size));
+ GST_LOG_OBJECT (pitch, "incoming buffer (%d samples) %" GST_TIME_FORMAT,
+ (gint) (gst_buffer_get_size (buffer) / pitch->sample_size),
+ GST_TIME_ARGS (timestamp));
if (GST_PITCH_GET_PRIVATE (pitch)->pending_segment) {
GstEvent *event =
diff --git a/ext/spandsp/Makefile.in b/ext/spandsp/Makefile.in
index 3aab3211..d994328e 100644
--- a/ext/spandsp/Makefile.in
+++ b/ext/spandsp/Makefile.in
@@ -342,6 +342,8 @@ 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@
@@ -349,6 +351,8 @@ 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@
@@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -391,6 +394,10 @@ 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@
@@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/spandsp/gstspanplc.c b/ext/spandsp/gstspanplc.c
index 58edce9f..73a2465b 100644
--- a/ext/spandsp/gstspanplc.c
+++ b/ext/spandsp/gstspanplc.c
@@ -34,7 +34,9 @@
#include "gstspanplc.h"
-GST_BOILERPLATE (GstSpanPlc, gst_span_plc, GstElement, GST_TYPE_ELEMENT);
+#include <gst/audio/audio.h>
+
+G_DEFINE_TYPE (GstSpanPlc, gst_span_plc, GST_TYPE_ELEMENT);
GST_DEBUG_CATEGORY_STATIC (gst_span_plc_debug);
#define GST_CAT_DEFAULT gst_span_plc_debug
@@ -43,51 +45,43 @@ GST_DEBUG_CATEGORY_STATIC (gst_span_plc_debug);
static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/x-raw-int, "
- "endianness = (int) BYTE_ORDER, signed = (bool) TRUE, "
- "width = (int) 16, depth = (int) 16, "
- "rate = (int) [ 1, MAX ], channels = (int) 1")
+ GST_STATIC_CAPS ("audio/x-raw, format=\"" GST_AUDIO_NE (S16) "\", "
+ "rate = " GST_AUDIO_RATE_RANGE " , channels = (int) 1")
);
static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/x-raw-int, "
- "endianness = (int) BYTE_ORDER, signed = (bool) TRUE, "
- "width = (int) 16, depth = (int) 16, "
- "rate = (int) [ 1, MAX ], channels = (int) 1")
+ GST_STATIC_CAPS ("audio/x-raw, format=\"" GST_AUDIO_NE (S16) "\", "
+ "rate = " GST_AUDIO_RATE_RANGE " , channels = (int) 1")
);
static void gst_span_plc_dispose (GObject * object);
static GstStateChangeReturn gst_span_plc_change_state (GstElement * element,
GstStateChange transition);
-static gboolean gst_span_plc_setcaps_sink (GstPad * pad, GstCaps * caps);
-static GstFlowReturn gst_span_plc_chain (GstPad * pad, GstBuffer * buf);
-static gboolean gst_span_plc_event_sink (GstPad * pad, GstEvent * event);
+static void gst_span_plc_setcaps_sink (GstSpanPlc * plc, GstCaps * caps);
+static GstFlowReturn gst_span_plc_chain (GstPad * pad, GstObject * parent,
+ GstBuffer * buf);
+static gboolean gst_span_plc_event_sink (GstPad * pad, GstObject * parent,
+ GstEvent * event);
+/* initialize the plugin's class */
static void
-gst_span_plc_base_init (gpointer gclass)
+gst_span_plc_class_init (GstSpanPlcClass * klass)
{
- GstElementClass *element_class = (GstElementClass *) gclass;
+ GObjectClass *gobject_class = (GObjectClass *) klass;
+ GstElementClass *gstelement_class = (GstElementClass *) klass;
- gst_element_class_add_pad_template (element_class,
+ gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&src_factory));
- gst_element_class_add_pad_template (element_class,
+ gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&sink_factory));
- gst_element_class_set_details_simple (element_class, "SpanDSP PLC",
+ gst_element_class_set_details_simple (gstelement_class, "SpanDSP PLC",
"Filter/Effect/Audio",
"Adds packet loss concealment to audio",
"Youness Alaoui <youness.alaoui@collabora.co.uk>");
-}
-
-/* initialize the plugin's class */
-static void
-gst_span_plc_class_init (GstSpanPlcClass * klass)
-{
- GObjectClass *gobject_class = (GObjectClass *) klass;
- GstElementClass *gstelement_class = (GstElementClass *) klass;
gobject_class->dispose = gst_span_plc_dispose;
@@ -96,27 +90,19 @@ gst_span_plc_class_init (GstSpanPlcClass * klass)
GST_DEBUG_CATEGORY_INIT (gst_span_plc_debug, "spanplc",
0, "spanDSP's packet loss concealment");
+
}
static void
-gst_span_plc_init (GstSpanPlc * plc, GstSpanPlcClass * gclass)
+gst_span_plc_init (GstSpanPlc * plc)
{
GST_DEBUG_OBJECT (plc, "init");
plc->srcpad = gst_pad_new_from_static_template (&src_factory, "src");
plc->sinkpad = gst_pad_new_from_static_template (&sink_factory, "sink");
- gst_pad_set_setcaps_function (plc->sinkpad,
- GST_DEBUG_FUNCPTR (gst_span_plc_setcaps_sink));
-
- gst_pad_set_getcaps_function (plc->srcpad,
- GST_DEBUG_FUNCPTR (gst_pad_proxy_getcaps));
- gst_pad_set_getcaps_function (plc->sinkpad,
- GST_DEBUG_FUNCPTR (gst_pad_proxy_getcaps));
-
gst_pad_set_chain_function (plc->sinkpad,
GST_DEBUG_FUNCPTR (gst_span_plc_chain));
-
gst_pad_set_event_function (plc->sinkpad,
GST_DEBUG_FUNCPTR (gst_span_plc_event_sink));
@@ -124,7 +110,6 @@ gst_span_plc_init (GstSpanPlc * plc, GstSpanPlcClass * gclass)
gst_element_add_pad (GST_ELEMENT (plc), plc->sinkpad);
plc->plc_state = NULL;
- plc->last_stop = GST_CLOCK_TIME_NONE;
GST_DEBUG_OBJECT (plc, "init complete");
}
@@ -138,7 +123,7 @@ gst_span_plc_dispose (GObject * object)
plc_free (plc->plc_state);
plc->plc_state = NULL;
- G_OBJECT_CLASS (parent_class)->dispose (object);
+ G_OBJECT_CLASS (gst_span_plc_parent_class)->dispose (object);
}
static void
@@ -150,7 +135,6 @@ gst_span_plc_flush (GstSpanPlc * plc, gboolean renew)
plc->plc_state = plc_init (NULL);
else
plc->plc_state = NULL;
- plc->last_stop = GST_CLOCK_TIME_NONE;
}
static GstStateChangeReturn
@@ -167,7 +151,8 @@ gst_span_plc_change_state (GstElement * element, GstStateChange transition)
break;
}
- ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+ ret = GST_ELEMENT_CLASS (gst_span_plc_parent_class)->change_state (element,
+ transition);
switch (transition) {
case GST_STATE_CHANGE_READY_TO_NULL:
@@ -179,122 +164,91 @@ gst_span_plc_change_state (GstElement * element, GstStateChange transition)
return ret;
}
-static gboolean
-gst_span_plc_setcaps_sink (GstPad * pad, GstCaps * caps)
+static void
+gst_span_plc_setcaps_sink (GstSpanPlc * plc, GstCaps * caps)
{
- GstSpanPlc *plc = GST_SPAN_PLC (gst_pad_get_parent (pad));
GstStructure *s = NULL;
- gboolean ret = FALSE;
+ gint sample_rate;
- ret = gst_pad_set_caps (plc->srcpad, caps);
s = gst_caps_get_structure (caps, 0);
- if (s) {
- gst_structure_get_int (s, "rate", &plc->sample_rate);
- GST_DEBUG_OBJECT (plc, "setcaps: got sample rate : %d", plc->sample_rate);
+ if (!s)
+ return;
+
+ gst_structure_get_int (s, "rate", &sample_rate);
+ if (sample_rate != plc->sample_rate) {
+ GST_DEBUG_OBJECT (plc, "setcaps: got sample rate : %d", sample_rate);
+ plc->sample_rate = sample_rate;
+ gst_span_plc_flush (plc, TRUE);
}
-
- gst_span_plc_flush (plc, TRUE);
- gst_object_unref (plc);
-
- return ret;
}
static GstFlowReturn
-gst_span_plc_chain (GstPad * pad, GstBuffer * buffer)
+gst_span_plc_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
{
- GstSpanPlc *plc = GST_SPAN_PLC (GST_PAD_PARENT (pad));
- GstClockTime buffer_duration;
-
- if (GST_BUFFER_TIMESTAMP_IS_VALID (buffer))
- plc->last_stop = GST_BUFFER_TIMESTAMP (buffer);
- else
- GST_WARNING_OBJECT (plc, "Buffer has no timestamp!");
-
- if (GST_BUFFER_DURATION_IS_VALID (buffer)) {
- buffer_duration = GST_BUFFER_DURATION (buffer);
- } else {
- GST_WARNING_OBJECT (plc, "Buffer has no duration!");
- buffer_duration = (GST_BUFFER_SIZE (buffer) /
- (plc->sample_rate * sizeof (guint16))) * GST_SECOND;
- GST_DEBUG_OBJECT (plc, "Buffer duration : %" GST_TIME_FORMAT,
- GST_TIME_ARGS (buffer_duration));
- }
-
- plc->last_stop += buffer_duration;
+ GstSpanPlc *plc = GST_SPAN_PLC (parent);
+ GstMapInfo map;
if (plc->plc_state->missing_samples != 0)
buffer = gst_buffer_make_writable (buffer);
- plc_rx (plc->plc_state, (int16_t *) GST_BUFFER_DATA (buffer),
- GST_BUFFER_SIZE (buffer) / 2);
+ gst_buffer_map (buffer, &map, GST_MAP_READWRITE);
+ plc_rx (plc->plc_state, (int16_t *) map.data, map.size / 2);
+ gst_buffer_unmap (buffer, &map);
return gst_pad_push (plc->srcpad, buffer);
}
static void
-gst_span_plc_send_fillin (GstSpanPlc * plc, GstClockTime duration)
+gst_span_plc_send_fillin (GstSpanPlc * plc, GstClockTime timestamp,
+ GstClockTime duration)
{
guint buf_size;
GstBuffer *buffer = NULL;
+ GstMapInfo map;
buf_size = ((float) duration / GST_SECOND) * plc->sample_rate;
buf_size *= sizeof (guint16);
buffer = gst_buffer_new_and_alloc (buf_size);
GST_DEBUG_OBJECT (plc, "Missing packet of %" GST_TIME_FORMAT
" == %d bytes", GST_TIME_ARGS (duration), buf_size);
- plc_fillin (plc->plc_state, (int16_t *) GST_BUFFER_DATA (buffer),
- GST_BUFFER_SIZE (buffer) / 2);
- GST_BUFFER_TIMESTAMP (buffer) = plc->last_stop;
+ gst_buffer_map (buffer, &map, GST_MAP_READWRITE);
+ plc_fillin (plc->plc_state, (int16_t *) map.data, map.size / 2);
+ gst_buffer_unmap (buffer, &map);
+ GST_BUFFER_PTS (buffer) = timestamp;
GST_BUFFER_DURATION (buffer) = duration;
- gst_buffer_set_caps (buffer, GST_PAD_CAPS (plc->srcpad));
gst_pad_push (plc->srcpad, buffer);
}
static gboolean
-gst_span_plc_event_sink (GstPad * pad, GstEvent * event)
+gst_span_plc_event_sink (GstPad * pad, GstObject * parent, GstEvent * event)
{
- gboolean ret = FALSE;
- GstSpanPlc *plc = GST_SPAN_PLC (gst_pad_get_parent (pad));
+ GstSpanPlc *plc = GST_SPAN_PLC (parent);
GST_DEBUG_OBJECT (plc, "received event %s", GST_EVENT_TYPE_NAME (event));
switch (GST_EVENT_TYPE (event)) {
- case GST_EVENT_NEWSEGMENT:
+ case GST_EVENT_CAPS:
{
- GstFormat format;
- gdouble rate;
- gint64 start, stop, time;
- gboolean update;
-
- gst_event_parse_new_segment (event, &update, &rate, &format, &start,
- &stop, &time);
-
- if (format != GST_FORMAT_TIME)
- goto newseg_wrong_format;
-
- if (update) {
- /* time progressed without data, see if we can fill the gap with
- * some concealment data */
- if (plc->last_stop < start)
- gst_span_plc_send_fillin (plc, start - plc->last_stop);
- }
- plc->last_stop = start;
+ GstCaps *caps;
+ gst_event_parse_caps (event, &caps);
+ gst_span_plc_setcaps_sink (plc, caps);
break;
}
- case GST_EVENT_FLUSH_START:
+ case GST_EVENT_GAP:
+ {
+ GstClockTime timestamp;
+ GstClockTime duration;
+
+ gst_event_parse_gap (event, &timestamp, &duration);
+ gst_span_plc_send_fillin (plc, timestamp, duration);
+ gst_event_unref (event);
+ return TRUE;
+ }
+ case GST_EVENT_FLUSH_STOP:
gst_span_plc_flush (plc, TRUE);
break;
default:
break;
}
- ret = gst_pad_push_event (plc->srcpad, event);
-
- gst_object_unref (plc);
- return ret;
-newseg_wrong_format:
- {
- GST_DEBUG_OBJECT (plc, "received non TIME newsegment");
- gst_object_unref (plc);
- return FALSE;
- }
+ return gst_pad_push_event (plc->srcpad, event);
}
diff --git a/ext/spandsp/gstspanplc.h b/ext/spandsp/gstspanplc.h
index 86c10ac2..f2c60787 100644
--- a/ext/spandsp/gstspanplc.h
+++ b/ext/spandsp/gstspanplc.h
@@ -44,7 +44,6 @@ struct _GstSpanPlc
/* <private> */
plc_state_t *plc_state;
- GstClockTime last_stop;
gint sample_rate;
};
diff --git a/ext/spc/Makefile.am b/ext/spc/Makefile.am
index 067ea669..5fe861c0 100644
--- a/ext/spc/Makefile.am
+++ b/ext/spc/Makefile.am
@@ -2,7 +2,7 @@ plugin_LTLIBRARIES = libgstspc.la
libgstspc_la_SOURCES = gstspc.c tag.c
-libgstspc_la_CFLAGS = $(GST_CFLAGS) $(SPC_CFLAGS)
+libgstspc_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) $(SPC_CFLAGS)
libgstspc_la_LIBADD = $(GST_LIBS) $(SPC_LIBS)
libgstspc_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
libgstspc_la_LIBTOOLFLAGS = --tag=disable-static
diff --git a/ext/spc/Makefile.in b/ext/spc/Makefile.in
index eaeae70b..8ddfd9a4 100644
--- a/ext/spc/Makefile.in
+++ b/ext/spc/Makefile.in
@@ -341,6 +341,8 @@ 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@
@@ -348,6 +350,8 @@ 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@
@@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -390,6 +393,10 @@ 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@
@@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
@@ -604,7 +612,7 @@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
plugin_LTLIBRARIES = libgstspc.la
libgstspc_la_SOURCES = gstspc.c tag.c
-libgstspc_la_CFLAGS = $(GST_CFLAGS) $(SPC_CFLAGS)
+libgstspc_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) $(SPC_CFLAGS)
libgstspc_la_LIBADD = $(GST_LIBS) $(SPC_LIBS)
libgstspc_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
libgstspc_la_LIBTOOLFLAGS = --tag=disable-static
diff --git a/ext/spc/gstspc.c b/ext/spc/gstspc.c
index 2ea4ad80..8d470a48 100644
--- a/ext/spc/gstspc.c
+++ b/ext/spc/gstspc.c
@@ -23,6 +23,7 @@
#endif
#include "gstspc.h"
+#include <gst/audio/audio.h>
#include <string.h>
#include <glib/gprintf.h>
@@ -34,18 +35,23 @@ GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS,
static GstStaticPadTemplate src_factory =
GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/x-raw-int, "
- "endianness = (int) BYTE_ORDER, "
- "signed = (boolean) TRUE, "
- "width = (int) 16, "
- "depth = (int) 16, " "rate = (int) 32000, " "channels = (int) 2"));
-
-GST_BOILERPLATE (GstSpcDec, gst_spc_dec, GstElement, GST_TYPE_ELEMENT);
-
-static GstFlowReturn gst_spc_dec_chain (GstPad * pad, GstBuffer * buffer);
-static gboolean gst_spc_dec_sink_event (GstPad * pad, GstEvent * event);
-static gboolean gst_spc_dec_src_event (GstPad * pad, GstEvent * event);
-static gboolean gst_spc_dec_src_query (GstPad * pad, GstQuery * query);
+ GST_STATIC_CAPS ("audio/x-raw, "
+ "format = (string) " GST_AUDIO_NE (S16) ", "
+ "layout = (string) interleaved, "
+ "rate = (int) 32000, " "channels = (int) 2"));
+
+
+#define gst_spc_dec_parent_class parent_class
+G_DEFINE_TYPE (GstSpcDec, gst_spc_dec, GST_TYPE_ELEMENT);
+
+static GstFlowReturn gst_spc_dec_chain (GstPad * pad, GstObject * parent,
+ GstBuffer * buffer);
+static gboolean gst_spc_dec_sink_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
+static gboolean gst_spc_dec_src_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
+static gboolean gst_spc_dec_src_query (GstPad * pad, GstObject * parent,
+ GstQuery * query);
static GstStateChangeReturn gst_spc_dec_change_state (GstElement * element,
GstStateChange transition);
static void spc_play (GstPad * pad);
@@ -55,53 +61,20 @@ static gboolean spc_setup (GstSpcDec * spc);
static gboolean
spc_negotiate (GstSpcDec * spc)
{
- GstCaps *allowed, *caps;
- GstStructure *structure;
- gint width = 16, depth = 16;
- gboolean sign;
- int rate = 32000;
- int channels = 2;
-
- allowed = gst_pad_get_allowed_caps (spc->srcpad);
- if (!allowed) {
- GST_DEBUG_OBJECT (spc, "couldn't get allowed caps");
- return FALSE;
- }
-
- GST_DEBUG_OBJECT (spc, "allowed caps: %" GST_PTR_FORMAT, allowed);
+ GstCaps *caps;
- structure = gst_caps_get_structure (allowed, 0);
- gst_structure_get_int (structure, "width", &width);
- gst_structure_get_int (structure, "depth", &depth);
-
- if (width && depth && width != depth) {
- GST_DEBUG_OBJECT (spc, "width %d and depth %d are different", width, depth);
- gst_caps_unref (allowed);
- return FALSE;
- }
-
- gst_structure_get_boolean (structure, "signed", &sign);
- gst_structure_get_int (structure, "rate", &rate);
- gst_structure_get_int (structure, "channels", &channels);
-
- caps = gst_caps_new_simple ("audio/x-raw-int",
- "endianness", G_TYPE_INT, G_BYTE_ORDER,
- "signed", G_TYPE_BOOLEAN, TRUE,
- "width", G_TYPE_INT, width,
- "depth", G_TYPE_INT, depth,
- "rate", G_TYPE_INT, rate, "channels", G_TYPE_INT, channels, NULL);
+ caps = gst_pad_get_pad_template_caps (spc->srcpad);
gst_pad_set_caps (spc->srcpad, caps);
-
gst_caps_unref (caps);
- gst_caps_unref (allowed);
return TRUE;
}
static void
-gst_spc_dec_base_init (gpointer g_class)
+gst_spc_dec_class_init (GstSpcDecClass * klass)
{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
+ GstElementClass *element_class = (GstElementClass *) klass;
+ GObjectClass *gobject_class = (GObjectClass *) klass;
gst_element_class_set_details_simple (element_class, "OpenSPC SPC decoder",
"Codec/Audio/Decoder",
@@ -112,33 +85,13 @@ gst_spc_dec_base_init (gpointer g_class)
gst_static_pad_template_get (&sink_factory));
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&src_factory));
-}
-
-static void
-gst_spc_dec_class_init (GstSpcDecClass * klass)
-{
- GstElementClass *element_class = (GstElementClass *) klass;
- GObjectClass *gobject_class = (GObjectClass *) klass;
element_class->change_state = GST_DEBUG_FUNCPTR (gst_spc_dec_change_state);
gobject_class->dispose = gst_spc_dec_dispose;
}
-static const GstQueryType *
-gst_spc_dec_src_query_type (GstPad * pad)
-{
- static const GstQueryType query_types[] = {
- GST_QUERY_DURATION,
- GST_QUERY_POSITION,
- (GstQueryType) 0
- };
-
- return query_types;
-}
-
-
static void
-gst_spc_dec_init (GstSpcDec * spc, GstSpcDecClass * klass)
+gst_spc_dec_init (GstSpcDec * spc)
{
spc->sinkpad = gst_pad_new_from_static_template (&sink_factory, "sink");
/* gst_pad_set_query_function (spc->sinkpad, NULL); */
@@ -149,7 +102,6 @@ gst_spc_dec_init (GstSpcDec * spc, GstSpcDecClass * klass)
spc->srcpad = gst_pad_new_from_static_template (&src_factory, "src");
gst_pad_set_event_function (spc->srcpad, gst_spc_dec_src_event);
gst_pad_set_query_function (spc->srcpad, gst_spc_dec_src_query);
- gst_pad_set_query_type_function (spc->srcpad, gst_spc_dec_src_query_type);
gst_pad_use_fixed_caps (spc->srcpad);
gst_element_add_pad (GST_ELEMENT (spc), spc->srcpad);
@@ -174,9 +126,9 @@ gst_spc_dec_dispose (GObject * object)
}
static GstFlowReturn
-gst_spc_dec_chain (GstPad * pad, GstBuffer * buffer)
+gst_spc_dec_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
{
- GstSpcDec *spc = GST_SPC_DEC (gst_pad_get_parent (pad));
+ GstSpcDec *spc = GST_SPC_DEC (parent);
if (spc->buf) {
spc->buf = gst_buffer_append (spc->buf, buffer);
@@ -184,15 +136,13 @@ gst_spc_dec_chain (GstPad * pad, GstBuffer * buffer)
spc->buf = buffer;
}
- gst_object_unref (spc);
-
return GST_FLOW_OK;
}
static gboolean
-gst_spc_dec_sink_event (GstPad * pad, GstEvent * event)
+gst_spc_dec_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
- GstSpcDec *spc = GST_SPC_DEC (gst_pad_get_parent (pad));
+ GstSpcDec *spc = GST_SPC_DEC (parent);
gboolean result = TRUE;
gboolean forward = FALSE;
@@ -215,8 +165,6 @@ gst_spc_dec_sink_event (GstPad * pad, GstEvent * event)
else
gst_event_unref (event);
- gst_object_unref (spc);
-
return result;
}
@@ -253,9 +201,9 @@ gst_spc_fadeout (GstSpcDec * spc)
static gboolean
-gst_spc_dec_src_event (GstPad * pad, GstEvent * event)
+gst_spc_dec_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
- GstSpcDec *spc = GST_SPC_DEC (gst_pad_get_parent (pad));
+ GstSpcDec *spc = GST_SPC_DEC (parent);
gboolean result = FALSE;
switch (GST_EVENT_TYPE (event)) {
@@ -285,6 +233,7 @@ gst_spc_dec_src_event (GstPad * pad, GstEvent * event)
stop = GST_CLOCK_TIME_NONE;
if (start_type == GST_SEEK_TYPE_SET) {
+ GstSegment seg;
guint64 cur =
gst_util_uint64_scale (spc->byte_pos, GST_SECOND, 32000 * 2 * 2);
guint64 dest = (guint64) start;
@@ -310,14 +259,18 @@ gst_spc_dec_src_event (GstPad * pad, GstEvent * event)
}
if (flush) {
- gst_pad_push_event (spc->srcpad, gst_event_new_flush_stop ());
+ gst_pad_push_event (spc->srcpad, gst_event_new_flush_stop (TRUE));
}
if (stop == GST_CLOCK_TIME_NONE)
stop = (guint64) (gst_spc_duration (spc) + gst_spc_fadeout (spc));
- gst_pad_push_event (spc->srcpad, gst_event_new_new_segment (FALSE, rate,
- GST_FORMAT_TIME, dest, stop, dest));
+ gst_segment_init (&seg, GST_FORMAT_TIME);
+ seg.rate = rate;
+ seg.start = dest;
+ seg.stop = stop;
+ seg.time = dest;
+ gst_pad_push_event (spc->srcpad, gst_event_new_segment (&seg));
/* spc->byte_pos += OSPC_Run(-1, NULL, (unsigned int) (gst_util_uint64_scale(dest - cur, 32000*2*2, GST_SECOND))); */
spc->seekpoint =
@@ -336,16 +289,13 @@ gst_spc_dec_src_event (GstPad * pad, GstEvent * event)
break;
}
- gst_event_unref (event);
- gst_object_unref (spc);
-
return result;
}
static gboolean
-gst_spc_dec_src_query (GstPad * pad, GstQuery * query)
+gst_spc_dec_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
{
- GstSpcDec *spc = GST_SPC_DEC (gst_pad_get_parent (pad));
+ GstSpcDec *spc = GST_SPC_DEC (parent);
gboolean result = TRUE;
switch (GST_QUERY_TYPE (query)) {
@@ -377,12 +327,10 @@ gst_spc_dec_src_query (GstPad * pad, GstQuery * query)
break;
}
default:
- result = gst_pad_query_default (pad, query);
+ result = gst_pad_query_default (pad, parent, query);
break;
}
- gst_object_unref (spc);
-
return result;
}
@@ -394,17 +342,21 @@ spc_play (GstPad * pad)
GstBuffer *out;
gboolean seeking = spc->seeking;
gint64 duration, fade, end, position;
+ GstMapInfo map;
if (!seeking) {
out = gst_buffer_new_and_alloc (1600 * 4);
- gst_buffer_set_caps (out, GST_PAD_CAPS (pad));
GST_BUFFER_TIMESTAMP (out) =
(gint64) gst_util_uint64_scale ((guint64) spc->byte_pos, GST_SECOND,
32000 * 2 * 2);
- spc->byte_pos += OSPC_Run (-1, (short *) GST_BUFFER_DATA (out), 1600 * 4);
+ gst_buffer_map (out, &map, GST_MAP_WRITE);
+ spc->byte_pos += OSPC_Run (-1, (short *) map.data, 1600 * 4);
+ gst_buffer_unmap (out, &map);
} else {
if (spc->seekpoint < spc->byte_pos) {
- OSPC_Init (GST_BUFFER_DATA (spc->buf), GST_BUFFER_SIZE (spc->buf));
+ gst_buffer_map (spc->buf, &map, GST_MAP_WRITE);
+ OSPC_Init (map.data, map.size);
+ gst_buffer_unmap (spc->buf, &map);
spc->byte_pos = 0;
}
spc->byte_pos += OSPC_Run (-1, NULL, 1600 * 4);
@@ -412,7 +364,6 @@ spc_play (GstPad * pad)
spc->seeking = FALSE;
}
out = gst_buffer_new ();
- gst_buffer_set_caps (out, GST_PAD_CAPS (pad));
}
duration = gst_spc_duration (spc);
@@ -423,11 +374,15 @@ spc_play (GstPad * pad)
32000 * 2 * 2);
if (position >= duration) {
- gint16 *data = (gint16 *) GST_BUFFER_DATA (out);
- guint32 size = GST_BUFFER_SIZE (out) / sizeof (gint16);
+ gint16 *data;
+ guint32 size;
unsigned int i;
+ gint64 num;
- gint64 num = (fade - (position - duration));
+ gst_buffer_map (out, &map, GST_MAP_WRITE);
+ data = (gint16 *) map.data;
+ size = map.size / sizeof (gint16);
+ num = (fade - (position - duration));
for (i = 0; i < size; i++) {
/* Apply a parabolic volume envelope */
@@ -441,8 +396,7 @@ spc_play (GstPad * pad)
gst_pad_pause_task (pad);
- if (flow_return <= GST_FLOW_UNEXPECTED
- || flow_return == GST_FLOW_NOT_LINKED) {
+ if (flow_return <= GST_FLOW_EOS || flow_return == GST_FLOW_NOT_LINKED) {
gst_pad_push_event (pad, gst_event_new_eos ());
}
}
@@ -463,6 +417,8 @@ spc_setup (GstSpcDec * spc)
spc_tag_info *info;
GstTagList *taglist;
guint64 total_duration;
+ GstSegment seg;
+ GstMapInfo map;
if (!spc->buf || !spc_negotiate (spc)) {
return FALSE;
@@ -470,10 +426,10 @@ spc_setup (GstSpcDec * spc)
info = &(spc->tag_info);
- spc_tag_get_info (GST_BUFFER_DATA (spc->buf), GST_BUFFER_SIZE (spc->buf),
- info);
+ gst_buffer_map (spc->buf, &map, GST_MAP_READ);
+ spc_tag_get_info (map.data, map.size, info);
- taglist = gst_tag_list_new ();
+ taglist = gst_tag_list_new_empty ();
if (info->title)
gst_tag_list_add (taglist, GST_TAG_MERGE_REPLACE, GST_TAG_TITLE,
@@ -523,17 +479,19 @@ spc_setup (GstSpcDec * spc)
GST_TAG_DURATION, total_duration,
GST_TAG_GENRE, "Game", GST_TAG_CODEC, "SPC700", NULL);
- gst_element_found_tags_for_pad (GST_ELEMENT (spc), spc->srcpad, taglist);
+ gst_pad_push_event (spc->srcpad, gst_event_new_tag (taglist));
/* spc_tag_info_free(&info); */
- if (OSPC_Init (GST_BUFFER_DATA (spc->buf), GST_BUFFER_SIZE (spc->buf)) != 0) {
+ if (OSPC_Init (map.data, map.size) != 0) {
+ gst_buffer_unmap (spc->buf, &map);
return FALSE;
}
+ gst_buffer_unmap (spc->buf, &map);
- gst_pad_push_event (spc->srcpad, gst_event_new_new_segment (FALSE, 1.0,
- GST_FORMAT_TIME, 0, -1, 0));
+ gst_segment_init (&seg, GST_FORMAT_TIME);
+ gst_pad_push_event (spc->srcpad, gst_event_new_segment (&seg));
gst_pad_start_task (spc->srcpad, (GstTaskFunction) spc_play, spc->srcpad,
NULL);
@@ -565,7 +523,9 @@ gst_spc_dec_change_state (GstElement * element, GstStateChange transition)
break;
}
- result = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+ result =
+ GST_ELEMENT_CLASS (gst_spc_dec_parent_class)->change_state (element,
+ transition);
if (result == GST_STATE_CHANGE_FAILURE)
return result;
diff --git a/ext/spc/tag.c b/ext/spc/tag.c
index 41ce812f..48c19d34 100644
--- a/ext/spc/tag.c
+++ b/ext/spc/tag.c
@@ -16,16 +16,10 @@
* Boston, MA 02111-1307, USA.
*/
-#include <glib/gstring.h>
-#include <glib/gtypes.h>
-#include <glib/gmem.h>
-#include <glib/gprintf.h>
-
#include <tag.h>
#include <string.h>
#include <stdlib.h>
-
#define EXTENDED_OFFSET 0x10200
#define EXTENDED_MAGIC ((guint32) ('x' << 0 | 'i' << 8 | 'd' << 16 | '6' << 24))
diff --git a/ext/spc/tag.h b/ext/spc/tag.h
index 5b795893..def76453 100644
--- a/ext/spc/tag.h
+++ b/ext/spc/tag.h
@@ -16,7 +16,6 @@
* Boston, MA 02111-1307, USA.
*/
-#include <glib/gtypes.h>
#include <glib.h>
typedef struct
diff --git a/ext/swfdec/Makefile.in b/ext/swfdec/Makefile.in
index ce09ac7c..a92281b3 100644
--- a/ext/swfdec/Makefile.in
+++ b/ext/swfdec/Makefile.in
@@ -341,6 +341,8 @@ 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@
@@ -348,6 +350,8 @@ 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@
@@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -390,6 +393,10 @@ 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@
@@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/teletextdec/Makefile.in b/ext/teletextdec/Makefile.in
index 25c0dc72..bd10cd33 100644
--- a/ext/teletextdec/Makefile.in
+++ b/ext/teletextdec/Makefile.in
@@ -343,6 +343,8 @@ 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@
@@ -350,6 +352,8 @@ 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@
@@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -392,6 +395,10 @@ 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@
@@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/timidity/Makefile.in b/ext/timidity/Makefile.in
index 00c2b0b1..6628213e 100644
--- a/ext/timidity/Makefile.in
+++ b/ext/timidity/Makefile.in
@@ -360,6 +360,8 @@ 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@
@@ -367,6 +369,8 @@ 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@
@@ -381,7 +385,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -409,6 +412,10 @@ 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@
@@ -535,6 +542,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/voaacenc/Makefile.in b/ext/voaacenc/Makefile.in
index c83b90bf..885b838f 100644
--- a/ext/voaacenc/Makefile.in
+++ b/ext/voaacenc/Makefile.in
@@ -343,6 +343,8 @@ 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@
@@ -350,6 +352,8 @@ 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@
@@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -392,6 +395,10 @@ 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@
@@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/voamrwbenc/Makefile.in b/ext/voamrwbenc/Makefile.in
index 5d19c68d..3b2908b2 100644
--- a/ext/voamrwbenc/Makefile.in
+++ b/ext/voamrwbenc/Makefile.in
@@ -344,6 +344,8 @@ 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@
@@ -351,6 +353,8 @@ 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@
@@ -365,7 +369,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -393,6 +396,10 @@ 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@
@@ -519,6 +526,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/vp8/Makefile.am b/ext/vp8/Makefile.am
index 09b8d5c0..3b32713a 100644
--- a/ext/vp8/Makefile.am
+++ b/ext/vp8/Makefile.am
@@ -11,6 +11,7 @@ libgstvp8_la_CFLAGS = \
$(GST_PLUGINS_BASE_CFLAGS) \
$(GST_BASE_CFLAGS) \
$(GST_CFLAGS) \
+ $(VPX_CFLAGS) \
-DGST_USE_UNSTABLE_API
libgstvp8_la_LIBADD = \
$(GST_PLUGINS_BASE_LIBS) -lgsttag-@GST_API_VERSION@ -lgstvideo-@GST_API_VERSION@ \
diff --git a/ext/vp8/Makefile.in b/ext/vp8/Makefile.in
index e2770d78..0323df39 100644
--- a/ext/vp8/Makefile.in
+++ b/ext/vp8/Makefile.in
@@ -346,6 +346,8 @@ 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@
@@ -353,6 +355,8 @@ 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@
@@ -367,7 +371,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -395,6 +398,10 @@ 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@
@@ -521,6 +528,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
@@ -620,6 +628,7 @@ libgstvp8_la_CFLAGS = \
$(GST_PLUGINS_BASE_CFLAGS) \
$(GST_BASE_CFLAGS) \
$(GST_CFLAGS) \
+ $(VPX_CFLAGS) \
-DGST_USE_UNSTABLE_API
libgstvp8_la_LIBADD = \
diff --git a/ext/vp8/gstvp8dec.c b/ext/vp8/gstvp8dec.c
index 9eb1ca36..98ef61cf 100644
--- a/ext/vp8/gstvp8dec.c
+++ b/ext/vp8/gstvp8dec.c
@@ -54,10 +54,15 @@
GST_DEBUG_CATEGORY_STATIC (gst_vp8dec_debug);
#define GST_CAT_DEFAULT gst_vp8dec_debug
+#ifndef HAVE_VP8_MFQE
+#define VP8_MFQE (1<<10)
+#endif
+
#define DEFAULT_POST_PROCESSING FALSE
-#define DEFAULT_POST_PROCESSING_FLAGS (VP8_DEBLOCK | VP8_DEMACROBLOCK)
+#define DEFAULT_POST_PROCESSING_FLAGS (VP8_DEBLOCK | VP8_DEMACROBLOCK | VP8_MFQE)
#define DEFAULT_DEBLOCKING_LEVEL 4
#define DEFAULT_NOISE_LEVEL 0
+#define DEFAULT_THREADS 1
enum
{
@@ -65,7 +70,8 @@ enum
PROP_POST_PROCESSING,
PROP_POST_PROCESSING_FLAGS,
PROP_DEBLOCKING_LEVEL,
- PROP_NOISE_LEVEL
+ PROP_NOISE_LEVEL,
+ PROP_THREADS
};
#define C_FLAGS(v) ((guint) v)
@@ -77,6 +83,7 @@ gst_vp8_dec_post_processing_flags_get_type (void)
{C_FLAGS (VP8_DEBLOCK), "Deblock", "deblock"},
{C_FLAGS (VP8_DEMACROBLOCK), "Demacroblock", "demacroblock"},
{C_FLAGS (VP8_ADDNOISE), "Add noise", "addnoise"},
+ {C_FLAGS (VP8_MFQE), "Multi-frame quality enhancement", "mfqe"},
{0, NULL, NULL}
};
static volatile GType id = 0;
@@ -163,6 +170,11 @@ gst_vp8_dec_class_init (GstVP8DecClass * klass)
0, 16, DEFAULT_NOISE_LEVEL,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (gobject_class, PROP_THREADS,
+ g_param_spec_uint ("threads", "Max Threads",
+ "Maximum number of decoding threads",
+ 1, 16, DEFAULT_THREADS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_vp8_dec_src_template));
gst_element_class_add_pad_template (element_class,
@@ -221,6 +233,9 @@ gst_vp8_dec_set_property (GObject * object, guint prop_id,
case PROP_NOISE_LEVEL:
dec->noise_level = g_value_get_uint (value);
break;
+ case PROP_THREADS:
+ dec->threads = g_value_get_uint (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -249,6 +264,9 @@ gst_vp8_dec_get_property (GObject * object, guint prop_id, GValue * value,
case PROP_NOISE_LEVEL:
g_value_set_uint (value, dec->noise_level);
break;
+ case PROP_THREADS:
+ g_value_set_uint (value, dec->threads);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -369,11 +387,13 @@ open_codec (GstVP8Dec * dec, GstVideoCodecFrame * frame)
int flags = 0;
vpx_codec_stream_info_t stream_info;
vpx_codec_caps_t caps;
+ vpx_codec_dec_cfg_t cfg;
GstVideoCodecState *state = dec->input_state;
vpx_codec_err_t status;
GstMapInfo minfo;
memset (&stream_info, 0, sizeof (stream_info));
+ memset (&cfg, 0, sizeof (cfg));
stream_info.sz = sizeof (stream_info);
if (!gst_buffer_map (frame->input_buffer, &minfo, GST_MAP_READ)) {
@@ -396,8 +416,13 @@ open_codec (GstVP8Dec * dec, GstVideoCodecFrame * frame)
dec->output_state =
gst_video_decoder_set_output_state (GST_VIDEO_DECODER (dec),
GST_VIDEO_FORMAT_I420, stream_info.w, stream_info.h, state);
+ gst_video_decoder_negotiate (GST_VIDEO_DECODER (dec));
gst_vp8_dec_send_tags (dec);
+ cfg.w = stream_info.w;
+ cfg.h = stream_info.h;
+ cfg.threads = dec->threads;
+
caps = vpx_codec_get_caps (&vpx_codec_vp8_dx_algo);
if (dec->post_processing) {
@@ -409,7 +434,7 @@ open_codec (GstVP8Dec * dec, GstVideoCodecFrame * frame)
}
status =
- vpx_codec_dec_init (&dec->decoder, &vpx_codec_vp8_dx_algo, NULL, flags);
+ vpx_codec_dec_init (&dec->decoder, &vpx_codec_vp8_dx_algo, &cfg, flags);
if (status != VPX_CODEC_OK) {
GST_ELEMENT_ERROR (dec, LIBRARY, INIT,
("Failed to initialize VP8 decoder"), ("%s",
@@ -420,7 +445,11 @@ open_codec (GstVP8Dec * dec, GstVideoCodecFrame * frame)
if ((caps & VPX_CODEC_CAP_POSTPROC) && dec->post_processing) {
vp8_postproc_cfg_t pp_cfg = { 0, };
+#ifndef HAVE_VP8_MFQE
+ pp_cfg.post_proc_flag = (dec->post_processing_flags & (~VP8_MFQE));
+#else
pp_cfg.post_proc_flag = dec->post_processing_flags;
+#endif
pp_cfg.deblocking_level = dec->deblocking_level;
pp_cfg.noise_level = dec->noise_level;
diff --git a/ext/vp8/gstvp8dec.h b/ext/vp8/gstvp8dec.h
index 09842675..c2aaebc8 100644
--- a/ext/vp8/gstvp8dec.h
+++ b/ext/vp8/gstvp8dec.h
@@ -66,6 +66,7 @@ struct _GstVP8Dec
enum vp8_postproc_level post_processing_flags;
gint deblocking_level;
gint noise_level;
+ gint threads;
GstVideoCodecState *input_state;
GstVideoCodecState *output_state;
diff --git a/ext/vp8/gstvp8enc.c b/ext/vp8/gstvp8enc.c
index 78f97bf3..f1549ca8 100644
--- a/ext/vp8/gstvp8enc.c
+++ b/ext/vp8/gstvp8enc.c
@@ -1050,6 +1050,10 @@ gst_vp8_enc_buffer_to_image (GstVP8Enc * enc, GstVideoFrame * frame)
image->planes[VPX_PLANE_U] = GST_VIDEO_FRAME_COMP_DATA (frame, 1);
image->planes[VPX_PLANE_V] = GST_VIDEO_FRAME_COMP_DATA (frame, 2);
+ image->stride[VPX_PLANE_Y] = GST_VIDEO_FRAME_COMP_STRIDE (frame, 0);
+ image->stride[VPX_PLANE_U] = GST_VIDEO_FRAME_COMP_STRIDE (frame, 1);
+ image->stride[VPX_PLANE_V] = GST_VIDEO_FRAME_COMP_STRIDE (frame, 2);
+
return image;
}
diff --git a/ext/wayland/Makefile.am b/ext/wayland/Makefile.am
index e346b4c6..dfdcf210 100644
--- a/ext/wayland/Makefile.am
+++ b/ext/wayland/Makefile.am
@@ -1,6 +1,6 @@
plugin_LTLIBRARIES = libgstwaylandsink.la
-libgstwaylandsink_la_SOURCES = gstwaylandsink.c
+libgstwaylandsink_la_SOURCES = gstwaylandsink.c waylandpool.c
libgstwaylandsink_la_CFLAGS = $(GST_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) \
$(WAYLAND_CFLAGS)
libgstwaylandsink_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) \
@@ -9,4 +9,4 @@ libgstwaylandsink_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) \
libgstwaylandsink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
libgstwaylandsink_la_LIBTOOLFLAGS = --tag=disable-static
-noinst_HEADERS = gstwaylandsink.h
+noinst_HEADERS = gstwaylandsink.h waylandpool.h
diff --git a/ext/wayland/Makefile.in b/ext/wayland/Makefile.in
index cfa348c9..19e5e342 100644
--- a/ext/wayland/Makefile.in
+++ b/ext/wayland/Makefile.in
@@ -130,7 +130,8 @@ am__DEPENDENCIES_1 =
libgstwaylandsink_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1)
am_libgstwaylandsink_la_OBJECTS = \
- libgstwaylandsink_la-gstwaylandsink.lo
+ libgstwaylandsink_la-gstwaylandsink.lo \
+ libgstwaylandsink_la-waylandpool.lo
libgstwaylandsink_la_OBJECTS = $(am_libgstwaylandsink_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -342,6 +343,8 @@ 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@
@@ -349,6 +352,8 @@ 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@
@@ -363,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -391,6 +395,10 @@ 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@
@@ -517,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
@@ -604,7 +613,7 @@ top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
plugin_LTLIBRARIES = libgstwaylandsink.la
-libgstwaylandsink_la_SOURCES = gstwaylandsink.c
+libgstwaylandsink_la_SOURCES = gstwaylandsink.c waylandpool.c
libgstwaylandsink_la_CFLAGS = $(GST_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) \
$(WAYLAND_CFLAGS)
@@ -614,7 +623,7 @@ libgstwaylandsink_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) \
libgstwaylandsink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
libgstwaylandsink_la_LIBTOOLFLAGS = --tag=disable-static
-noinst_HEADERS = gstwaylandsink.h
+noinst_HEADERS = gstwaylandsink.h waylandpool.h
all: all-am
.SUFFIXES:
@@ -691,6 +700,7 @@ distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstwaylandsink_la-gstwaylandsink.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstwaylandsink_la-waylandpool.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -720,6 +730,13 @@ libgstwaylandsink_la-gstwaylandsink.lo: gstwaylandsink.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstwaylandsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstwaylandsink_la_CFLAGS) $(CFLAGS) -c -o libgstwaylandsink_la-gstwaylandsink.lo `test -f 'gstwaylandsink.c' || echo '$(srcdir)/'`gstwaylandsink.c
+libgstwaylandsink_la-waylandpool.lo: waylandpool.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstwaylandsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstwaylandsink_la_CFLAGS) $(CFLAGS) -MT libgstwaylandsink_la-waylandpool.lo -MD -MP -MF $(DEPDIR)/libgstwaylandsink_la-waylandpool.Tpo -c -o libgstwaylandsink_la-waylandpool.lo `test -f 'waylandpool.c' || echo '$(srcdir)/'`waylandpool.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstwaylandsink_la-waylandpool.Tpo $(DEPDIR)/libgstwaylandsink_la-waylandpool.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='waylandpool.c' object='libgstwaylandsink_la-waylandpool.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 $(libgstwaylandsink_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstwaylandsink_la_CFLAGS) $(CFLAGS) -c -o libgstwaylandsink_la-waylandpool.lo `test -f 'waylandpool.c' || echo '$(srcdir)/'`waylandpool.c
+
mostlyclean-libtool:
-rm -f *.lo
diff --git a/ext/wayland/gstwaylandsink.c b/ext/wayland/gstwaylandsink.c
index bfe68026..32b695d7 100644
--- a/ext/wayland/gstwaylandsink.c
+++ b/ext/wayland/gstwaylandsink.c
@@ -1,5 +1,4 @@
-/*
- * GStreamer Wayland video sink
+/* GStreamer Wayland video sink
*
* Copyright (C) 2011 Intel Corporation
* Copyright (C) 2011 Sreerenj Balachandran <sreerenj.balachandran@intel.com>
@@ -17,7 +16,8 @@
*
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
*/
/**
@@ -46,7 +46,6 @@
enum
{
SIGNAL_0,
- SIGNAL_FRAME_READY,
LAST_SIGNAL
};
@@ -72,44 +71,6 @@ static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
#define gst_wayland_sink_parent_class parent_class
G_DEFINE_TYPE (GstWaylandSink, gst_wayland_sink, GST_TYPE_VIDEO_SINK);
-/* wl metadata */
-GType
-gst_wl_meta_api_get_type (void)
-{
- static volatile GType type;
- static const gchar *tags[] =
- { "memory", "size", "colorspace", "orientation", NULL };
-
- if (g_once_init_enter (&type)) {
- GType _type = gst_meta_api_type_register ("GstWlMetaAPI", tags);
- g_once_init_leave (&type, _type);
- }
- return type;
-}
-
-static void
-gst_wl_meta_free (GstWlMeta * meta, GstBuffer * buffer)
-{
- gst_object_unref (meta->sink);
- munmap (meta->data, meta->size);
- wl_buffer_destroy (meta->wbuffer);
-}
-
-const GstMetaInfo *
-gst_wl_meta_get_info (void)
-{
- static const GstMetaInfo *wl_meta_info = NULL;
-
- if (wl_meta_info == NULL) {
- wl_meta_info =
- gst_meta_register (GST_WL_META_API_TYPE, "GstWlMeta",
- sizeof (GstWlMeta), (GstMetaInitFunction) NULL,
- (GstMetaFreeFunction) gst_wl_meta_free,
- (GstMetaTransformFunction) NULL);
- }
- return wl_meta_info;
-}
-
static void gst_wayland_sink_get_property (GObject * object,
guint prop_id, GValue * value, GParamSpec * pspec);
static void gst_wayland_sink_set_property (GObject * object,
@@ -122,6 +83,8 @@ static gboolean gst_wayland_sink_start (GstBaseSink * bsink);
static gboolean gst_wayland_sink_stop (GstBaseSink * bsink);
static gboolean gst_wayland_sink_preroll (GstBaseSink * bsink,
GstBuffer * buffer);
+static gboolean
+gst_wayland_sink_propose_allocation (GstBaseSink * bsink, GstQuery * query);
static gboolean gst_wayland_sink_render (GstBaseSink * bsink,
GstBuffer * buffer);
@@ -129,9 +92,11 @@ 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 redraw (void *data, struct wl_callback *callback, uint32_t time);
+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);
static void
gst_wayland_sink_class_init (GstWaylandSinkClass * klass)
@@ -161,6 +126,8 @@ gst_wayland_sink_class_init (GstWaylandSinkClass * klass)
gstbasesink_class->start = GST_DEBUG_FUNCPTR (gst_wayland_sink_start);
gstbasesink_class->stop = GST_DEBUG_FUNCPTR (gst_wayland_sink_stop);
gstbasesink_class->preroll = GST_DEBUG_FUNCPTR (gst_wayland_sink_preroll);
+ gstbasesink_class->propose_allocation =
+ GST_DEBUG_FUNCPTR (gst_wayland_sink_propose_allocation);
gstbasesink_class->render = GST_DEBUG_FUNCPTR (gst_wayland_sink_render);
g_object_class_install_property (gobject_class, PROP_WAYLAND_DISPLAY,
@@ -172,9 +139,10 @@ gst_wayland_sink_class_init (GstWaylandSinkClass * klass)
static void
gst_wayland_sink_init (GstWaylandSink * sink)
{
- sink->render_busy = FALSE;
sink->display = NULL;
sink->window = NULL;
+ sink->shm_pool = NULL;
+ sink->pool = NULL;
g_mutex_init (&sink->wayland_lock);
}
@@ -224,21 +192,37 @@ destroy_display (struct display *display)
wl_compositor_destroy (display->compositor);
wl_display_flush (display->display);
- wl_display_destroy (display->display);
+ wl_display_disconnect (display->display);
free (display);
}
static void
destroy_window (struct window *window)
{
+ if (window->callback)
+ wl_callback_destroy (window->callback);
+
+ if (window->buffer)
+ wl_buffer_destroy (window->buffer);
+
if (window->shell_surface)
wl_shell_surface_destroy (window->shell_surface);
+
if (window->surface)
wl_surface_destroy (window->surface);
+
free (window);
}
static void
+shm_pool_destroy (struct shm_pool *pool)
+{
+ munmap (pool->data, pool->size);
+ wl_shm_pool_destroy (pool->pool);
+ free (pool);
+}
+
+static void
gst_wayland_sink_finalize (GObject * object)
{
GstWaylandSink *sink = GST_WAYLAND_SINK (object);
@@ -249,6 +233,8 @@ gst_wayland_sink_finalize (GObject * object)
destroy_window (sink->window);
if (sink->display)
destroy_display (sink->display);
+ if (sink->shm_pool)
+ shm_pool_destroy (sink->shm_pool);
g_mutex_clear (&sink->wayland_lock);
@@ -258,7 +244,21 @@ gst_wayland_sink_finalize (GObject * object)
static GstCaps *
gst_wayland_sink_get_caps (GstBaseSink * bsink, GstCaps * filter)
{
- return gst_static_pad_template_get_caps (&sink_template);
+ GstWaylandSink *sink;
+ GstCaps *caps;
+
+ sink = GST_WAYLAND_SINK (bsink);
+
+ caps = gst_pad_get_pad_template_caps (GST_VIDEO_SINK_PAD (sink));
+ if (filter) {
+ GstCaps *intersection;
+
+ intersection =
+ gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST);
+ gst_caps_unref (caps);
+ caps = intersection;
+ }
+ return caps;
}
static int
@@ -307,7 +307,11 @@ create_display (void)
display = malloc (sizeof *display);
display->display = wl_display_connect (NULL);
- assert (display->display);
+
+ if (display->display == NULL) {
+ free (display);
+ return NULL;
+ }
wl_display_add_global_listener (display->display,
display_handle_global, display);
@@ -325,93 +329,85 @@ create_display (void)
return display;
}
-static GstBuffer *
-wayland_buffer_create (GstWaylandSink * sink)
+static gboolean
+gst_wayland_sink_set_caps (GstBaseSink * bsink, GstCaps * caps)
{
- char filename[1024];
- int fd, size, stride;
- static void *data;
- static int init = 0;
- GstBuffer *buffer;
- GstWlMeta *wmeta;
+ GstWaylandSink *sink = GST_WAYLAND_SINK (bsink);
+ GstBufferPool *newpool, *oldpool;
+ GstVideoInfo info;
+ GstStructure *structure;
+ static GstAllocationParams params = { 0, 0, 0, 15, };
+ guint size;
- GST_DEBUG_OBJECT (sink, "Creating wayland-shm buffers");
+ sink = GST_WAYLAND_SINK (bsink);
- snprintf (filename, 256, "%s-%d-%s", "/tmp/wayland-shm", init++, "XXXXXX");
+ GST_LOG_OBJECT (sink, "set caps %" GST_PTR_FORMAT, caps);
- fd = mkstemp (filename);
- if (fd < 0) {
- GST_ERROR_OBJECT (sink, "open %s failed:", filename);
- return NULL;
- }
+ if (!gst_video_info_from_caps (&info, caps))
+ goto invalid_format;
- stride = sink->video_width * 4;
- size = stride * sink->video_height;
+ sink->video_width = info.width;
+ sink->video_height = info.height;
+ size = info.size;
- if (ftruncate (fd, size) < 0) {
- GST_ERROR_OBJECT (sink, "ftruncate failed:");
- close (fd);
- return NULL;
- }
+ /* create a new pool for the new configuration */
+ newpool = gst_wayland_buffer_pool_new (sink);
- data = mmap (NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
- unlink (filename);
- if (data == MAP_FAILED) {
- GST_ELEMENT_ERROR (sink, LIBRARY, SHUTDOWN, (NULL),
- ("mmap() failed: %s", strerror (errno)));
- close (fd);
- return NULL;
+ if (!newpool) {
+ GST_DEBUG_OBJECT (sink, "Failed to create new pool");
+ return FALSE;
}
- buffer = gst_buffer_new ();
-
- wmeta = (GstWlMeta *) gst_buffer_add_meta (buffer, GST_WL_META_INFO, NULL);
- wmeta->sink = gst_object_ref (sink);
- wmeta->wbuffer = wl_shm_create_buffer (sink->display->shm, fd,
- sink->video_width, sink->video_height, stride, WL_SHM_FORMAT_XRGB8888);
- wmeta->data = data;
- wmeta->size = size;
+ structure = gst_buffer_pool_get_config (newpool);
+ gst_buffer_pool_config_set_params (structure, caps, size, 2, 0);
+ gst_buffer_pool_config_set_allocator (structure, NULL, &params);
+ if (!gst_buffer_pool_set_config (newpool, structure))
+ goto config_failed;
- close (fd);
+ oldpool = sink->pool;
+ sink->pool = newpool;
+ if (oldpool)
+ gst_object_unref (oldpool);
- gst_buffer_append_memory (buffer,
- gst_memory_new_wrapped (GST_MEMORY_FLAG_NO_SHARE, data,
- size, 0, size, NULL, NULL));
+ return TRUE;
- return buffer;
+invalid_format:
+ {
+ GST_DEBUG_OBJECT (sink,
+ "Could not locate image format from caps %" GST_PTR_FORMAT, caps);
+ return FALSE;
+ }
+config_failed:
+ {
+ GST_DEBUG_OBJECT (bsink, "failed setting config");
+ return FALSE;
+ }
}
-static gboolean
-gst_wayland_sink_set_caps (GstBaseSink * bsink, GstCaps * caps)
+static void
+handle_ping (void *data, struct wl_shell_surface *shell_surface,
+ uint32_t serial)
{
- GstWaylandSink *sink = GST_WAYLAND_SINK (bsink);
- const GstStructure *structure;
- gboolean ret = TRUE;
-
- GST_LOG_OBJECT (sink, "set caps %" GST_PTR_FORMAT, caps);
-
- structure = gst_caps_get_structure (caps, 0);
-
- ret &= gst_structure_get_int (structure, "width", &sink->video_width);
- ret &= gst_structure_get_int (structure, "height", &sink->video_height);
-
- if (!ret)
- return FALSE;
-
- return TRUE;
+ wl_shell_surface_pong (shell_surface, serial);
}
-static const struct wl_callback_listener frame_listener;
-
static void
-redraw (void *data, struct wl_callback *callback, uint32_t time)
+handle_configure (void *data, struct wl_shell_surface *shell_surface,
+ uint32_t edges, int32_t width, int32_t height)
{
+}
- GstWaylandSink *sink = (GstWaylandSink *) data;
-
- sink->render_busy = FALSE;
+static void
+handle_popup_done (void *data, struct wl_shell_surface *shell_surface)
+{
}
+static const struct wl_shell_surface_listener shell_surface_listener = {
+ handle_ping,
+ handle_configure,
+ handle_popup_done
+};
+
static void
create_window (GstWaylandSink * sink, struct display *display, int width,
int height)
@@ -427,15 +423,21 @@ create_window (GstWaylandSink * sink, struct display *display, int width,
window->display = display;
window->width = width;
window->height = height;
+ window->redraw_pending = FALSE;
+
window->surface = wl_compositor_create_surface (display->compositor);
window->shell_surface = wl_shell_get_shell_surface (display->shell,
window->surface);
- /* wl_shell_surface_set_toplevel (window->shell_surface); */
-#ifdef WL_SHELL_SURFACE_FULLSCREEN_METHOD_DEFAULT
+
+ g_return_if_fail (window->shell_surface);
+
+ wl_shell_surface_add_listener (window->shell_surface,
+ &shell_surface_listener, window);
+
+ wl_shell_surface_set_toplevel (window->shell_surface);
wl_shell_surface_set_fullscreen (window->shell_surface,
- WL_SHELL_SURFACE_FULLSCREEN_METHOD_DEFAULT, 0, NULL);
-#endif
+ WL_SHELL_SURFACE_FULLSCREEN_METHOD_SCALE, 0, NULL);
sink->window = window;
@@ -453,6 +455,13 @@ gst_wayland_sink_start (GstBaseSink * bsink)
if (!sink->display)
sink->display = create_display ();
+ if (sink->display == NULL) {
+ GST_ELEMENT_ERROR (bsink, RESOURCE, OPEN_READ_WRITE,
+ ("Could not initialise Wayland output"),
+ ("Could not create Wayland display"));
+ return FALSE;
+ }
+
return result;
}
@@ -466,6 +475,84 @@ gst_wayland_sink_stop (GstBaseSink * bsink)
return TRUE;
}
+static gboolean
+gst_wayland_sink_propose_allocation (GstBaseSink * bsink, GstQuery * query)
+{
+ GstWaylandSink *sink = GST_WAYLAND_SINK (bsink);
+ GstBufferPool *pool;
+ GstStructure *config;
+ GstCaps *caps;
+ guint size;
+ gboolean need_pool;
+
+ gst_query_parse_allocation (query, &caps, &need_pool);
+
+ if (caps == NULL)
+ goto no_caps;
+
+ g_mutex_lock (&sink->wayland_lock);
+ if ((pool = sink->pool))
+ gst_object_ref (pool);
+ g_mutex_unlock (&sink->wayland_lock);
+
+ if (pool != NULL) {
+ GstCaps *pcaps;
+
+ /* we had a pool, check caps */
+ config = gst_buffer_pool_get_config (pool);
+ gst_buffer_pool_config_get_params (config, &pcaps, &size, NULL, NULL);
+
+ if (!gst_caps_is_equal (caps, pcaps)) {
+ /* different caps, we can't use this pool */
+ gst_object_unref (pool);
+ pool = NULL;
+ }
+ gst_structure_free (config);
+ }
+
+ if (pool == NULL && need_pool) {
+ GstVideoInfo info;
+
+ if (!gst_video_info_from_caps (&info, caps))
+ goto invalid_caps;
+
+ GST_DEBUG_OBJECT (sink, "create new pool");
+ pool = gst_wayland_buffer_pool_new (sink);
+
+ /* the normal size of a frame */
+ size = info.size;
+
+ config = gst_buffer_pool_get_config (pool);
+ gst_buffer_pool_config_set_params (config, caps, size, 2, 0);
+ if (!gst_buffer_pool_set_config (pool, config))
+ goto config_failed;
+ }
+ if (pool) {
+ gst_query_add_allocation_pool (query, pool, size, 2, 0);
+ gst_object_unref (pool);
+ }
+
+ return TRUE;
+
+ /* ERRORS */
+no_caps:
+ {
+ GST_DEBUG_OBJECT (bsink, "no caps specified");
+ return FALSE;
+ }
+invalid_caps:
+ {
+ GST_DEBUG_OBJECT (bsink, "invalid caps specified");
+ return FALSE;
+ }
+config_failed:
+ {
+ GST_DEBUG_OBJECT (bsink, "failed setting config");
+ gst_object_unref (pool);
+ return FALSE;
+ }
+}
+
static GstFlowReturn
gst_wayland_sink_preroll (GstBaseSink * bsink, GstBuffer * buffer)
{
@@ -473,6 +560,18 @@ gst_wayland_sink_preroll (GstBaseSink * bsink, GstBuffer * buffer)
return gst_wayland_sink_render (bsink, buffer);
}
+static void
+frame_redraw_callback (void *data, struct wl_callback *callback, uint32_t time)
+{
+ struct window *window = (struct window *) data;
+ window->redraw_pending = FALSE;
+ wl_callback_destroy (callback);
+}
+
+static const struct wl_callback_listener frame_callback_listener = {
+ frame_redraw_callback
+};
+
static GstFlowReturn
gst_wayland_sink_render (GstBaseSink * bsink, GstBuffer * buffer)
{
@@ -480,14 +579,21 @@ gst_wayland_sink_render (GstBaseSink * bsink, GstBuffer * buffer)
GstVideoRectangle src, dst, res;
GstBuffer *to_render;
GstWlMeta *meta;
+ GstFlowReturn ret;
+ struct window *window;
+ struct display *display;
GST_LOG_OBJECT (sink, "render buffer %p", buffer);
-
if (!sink->window)
create_window (sink, sink->display, sink->video_width, sink->video_height);
- if (sink->render_busy)
- goto was_busy;
+ window = sink->window;
+ display = sink->display;
+
+ /* Wait for the previous frame to complete redraw */
+ if (window->redraw_pending) {
+ wl_display_iterate (display->display, WL_DISPLAY_READABLE);
+ }
meta = gst_buffer_get_wl_meta (buffer);
@@ -496,10 +602,17 @@ gst_wayland_sink_render (GstBaseSink * bsink, GstBuffer * buffer)
to_render = buffer;
} else {
GstMapInfo src;
-
GST_LOG_OBJECT (sink, "buffer %p not from our pool, copying", buffer);
- to_render = wayland_buffer_create (sink);
+ if (!sink->pool)
+ goto no_pool;
+
+ if (!gst_buffer_pool_set_active (sink->pool, TRUE))
+ goto activate_failed;
+
+ ret = gst_buffer_pool_acquire_buffer (sink->pool, &to_render, NULL);
+ if (ret != GST_FLOW_OK)
+ goto no_buffer;
gst_buffer_map (buffer, &src, GST_MAP_READ);
gst_buffer_fill (to_render, 0, src.data, src.size);
@@ -515,36 +628,37 @@ gst_wayland_sink_render (GstBaseSink * bsink, GstBuffer * buffer)
gst_video_sink_center_rect (src, dst, &res, FALSE);
- sink->render_busy = TRUE;
-
- wl_buffer_damage (meta->wbuffer, 0, 0, res.w, res.h);
wl_surface_attach (sink->window->surface, meta->wbuffer, 0, 0);
wl_surface_damage (sink->window->surface, 0, 0, res.w, res.h);
-
- if (sink->callback)
- wl_callback_destroy (sink->callback);
-
- sink->callback = wl_surface_frame (sink->window->surface);
- wl_callback_add_listener (sink->callback, &frame_listener, sink);
- wl_display_iterate (sink->display->display, sink->display->mask);
+ 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);
if (buffer != to_render)
gst_buffer_unref (to_render);
-
return GST_FLOW_OK;
-was_busy:
+no_buffer:
+ {
+ GST_WARNING_OBJECT (sink, "could not create image");
+ return ret;
+ }
+no_pool:
{
- GST_LOG_OBJECT (sink,
- "Waiting to get the signal from compositor to render the next frame..");
- return GST_FLOW_OK;
+ GST_ELEMENT_ERROR (sink, RESOURCE, WRITE,
+ ("Internal error: can't allocate images"),
+ ("We don't have a bufferpool negotiated"));
+ return GST_FLOW_ERROR;
+ }
+activate_failed:
+ {
+ GST_ERROR_OBJECT (sink, "failed to activate bufferpool.");
+ ret = GST_FLOW_ERROR;
+ return ret;
}
}
-static const struct wl_callback_listener frame_listener = {
- redraw
-};
-
static gboolean
plugin_init (GstPlugin * plugin)
{
diff --git a/ext/wayland/gstwaylandsink.h b/ext/wayland/gstwaylandsink.h
index 22a4ede6..1a278e91 100644
--- a/ext/wayland/gstwaylandsink.h
+++ b/ext/wayland/gstwaylandsink.h
@@ -15,7 +15,8 @@
*
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
*/
#ifndef __GST_WAYLAND_VIDEO_SINK_H__
@@ -37,6 +38,7 @@
#include <gst/gst.h>
#include <gst/video/video.h>
#include <gst/video/gstvideosink.h>
+#include <gst/video/gstvideometa.h>
#include <wayland-client.h>
@@ -69,29 +71,23 @@ struct window
int width, height;
struct wl_surface *surface;
struct wl_shell_surface *shell_surface;
+ struct wl_buffer *buffer;
+ struct wl_callback *callback;
+ guint redraw_pending :1;
+
+};
+
+struct shm_pool {
+ struct wl_shm_pool *pool;
+ size_t size;
+ size_t used;
+ void *data;
};
typedef struct _GstWaylandSink GstWaylandSink;
typedef struct _GstWaylandSinkClass GstWaylandSinkClass;
-typedef struct _GstWlMeta GstWlMeta;
-
-GType gst_wl_meta_api_get_type (void);
-#define GST_WL_META_API_TYPE (gst_wl_meta_api_get_type())
-const GstMetaInfo * gst_wl_meta_get_info (void);
-#define GST_WL_META_INFO (gst_wl_meta_get_info())
-
-#define gst_buffer_get_wl_meta(b) ((GstWlMeta*)gst_buffer_get_meta((b),GST_WL_META_API_TYPE))
-
-struct _GstWlMeta {
- GstMeta meta;
-
- GstWaylandSink *sink;
-
- struct wl_buffer *wbuffer;
- void *data;
- size_t size;
-};
+#include "waylandpool.h"
struct _GstWaylandSink
{
@@ -99,15 +95,14 @@ struct _GstWaylandSink
struct display *display;
struct window *window;
- struct wl_callback *callback;
+ struct shm_pool *shm_pool;
+
+ GstBufferPool *pool;
GMutex wayland_lock;
gint video_width;
gint video_height;
- guint bpp;
-
- gboolean render_busy;
};
struct _GstWaylandSinkClass
diff --git a/ext/wayland/waylandpool.c b/ext/wayland/waylandpool.c
new file mode 100644
index 00000000..dd12d100
--- /dev/null
+++ b/ext/wayland/waylandpool.c
@@ -0,0 +1,311 @@
+/* GStreamer
+ * Copyright (C) 2012 Intel Corporation
+ * Copyright (C) 2012 Sreerenj Balachandran <sreerenj.balachandran@intel.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
+
+/* Object header */
+#include "gstwaylandsink.h"
+
+/* Debugging category */
+#include <gst/gstinfo.h>
+
+/* Helper functions */
+#include <gst/video/video.h>
+#include <gst/video/gstvideometa.h>
+#include <gst/video/gstvideopool.h>
+
+/* wl metadata */
+GType
+gst_wl_meta_api_get_type (void)
+{
+ static volatile GType type;
+ static const gchar *tags[] =
+ { "memory", "size", "colorspace", "orientation", NULL };
+
+ if (g_once_init_enter (&type)) {
+ GType _type = gst_meta_api_type_register ("GstWlMetaAPI", tags);
+ g_once_init_leave (&type, _type);
+ }
+ return type;
+}
+
+static void
+gst_wl_meta_free (GstWlMeta * meta, GstBuffer * buffer)
+{
+ gst_object_unref (meta->sink);
+ munmap (meta->data, meta->size);
+ wl_buffer_destroy (meta->wbuffer);
+}
+
+const GstMetaInfo *
+gst_wl_meta_get_info (void)
+{
+ static const GstMetaInfo *wl_meta_info = NULL;
+
+ if (wl_meta_info == NULL) {
+ wl_meta_info =
+ gst_meta_register (GST_WL_META_API_TYPE, "GstWlMeta",
+ sizeof (GstWlMeta), (GstMetaInitFunction) NULL,
+ (GstMetaFreeFunction) gst_wl_meta_free,
+ (GstMetaTransformFunction) NULL);
+ }
+ return wl_meta_info;
+}
+
+/* bufferpool */
+static void gst_wayland_buffer_pool_finalize (GObject * object);
+
+#define gst_wayland_buffer_pool_parent_class parent_class
+G_DEFINE_TYPE (GstWaylandBufferPool, gst_wayland_buffer_pool,
+ GST_TYPE_BUFFER_POOL);
+
+static gboolean
+wayland_buffer_pool_set_config (GstBufferPool * pool, GstStructure * config)
+{
+ GstWaylandBufferPool *wpool = GST_WAYLAND_BUFFER_POOL_CAST (pool);
+ GstVideoInfo info;
+ GstCaps *caps;
+
+ if (!gst_buffer_pool_config_get_params (config, &caps, NULL, NULL, NULL))
+ goto wrong_config;
+
+ if (caps == NULL)
+ goto no_caps;
+
+ /* now parse the caps from the config */
+ if (!gst_video_info_from_caps (&info, caps))
+ goto wrong_caps;
+
+ GST_LOG_OBJECT (pool, "%dx%d, caps %" GST_PTR_FORMAT, info.width, info.height,
+ caps);
+
+ /*Fixme: Enable metadata checking handling based on the config of pool */
+
+ wpool->caps = gst_caps_ref (caps);
+ wpool->info = info;
+ wpool->width = info.width;
+ wpool->height = info.height;
+
+ return GST_BUFFER_POOL_CLASS (parent_class)->set_config (pool, config);
+ /* ERRORS */
+wrong_config:
+ {
+ GST_WARNING_OBJECT (pool, "invalid config");
+ return FALSE;
+ }
+no_caps:
+ {
+ GST_WARNING_OBJECT (pool, "no caps in config");
+ return FALSE;
+ }
+wrong_caps:
+ {
+ GST_WARNING_OBJECT (pool,
+ "failed getting geometry from caps %" GST_PTR_FORMAT, caps);
+ return FALSE;
+ }
+}
+
+static struct wl_shm_pool *
+make_shm_pool (struct display *display, int size, void **data)
+{
+ struct wl_shm_pool *pool;
+ int fd;
+ char filename[1024];
+ static int init = 0;
+
+ snprintf (filename, 256, "%s-%d-%s", "/tmp/wayland-shm", init++, "XXXXXX");
+
+ fd = mkstemp (filename);
+ if (fd < 0) {
+ GST_ERROR ("open %s failed:", filename);
+ return NULL;
+ }
+ if (ftruncate (fd, size) < 0) {
+ GST_ERROR ("ftruncate failed:..!");
+ close (fd);
+ return NULL;
+ }
+
+ *data = mmap (NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
+ if (*data == MAP_FAILED) {
+ GST_ERROR ("mmap failed: ");
+ close (fd);
+ return NULL;
+ }
+
+ pool = wl_shm_create_pool (display->shm, fd, size);
+
+ close (fd);
+
+ return pool;
+}
+
+static struct shm_pool *
+shm_pool_create (struct display *display, size_t size)
+{
+ struct shm_pool *pool = malloc (sizeof *pool);
+
+ if (!pool)
+ return NULL;
+
+ pool->pool = make_shm_pool (display, size, &pool->data);
+ if (!pool->pool) {
+ free (pool);
+ return NULL;
+ }
+
+ pool->size = size;
+ pool->used = 0;
+
+ return pool;
+}
+
+static void *
+shm_pool_allocate (struct shm_pool *pool, size_t size, int *offset)
+{
+ if (pool->used + size > pool->size)
+ return NULL;
+
+ *offset = pool->used;
+ pool->used += size;
+
+ return (char *) pool->data + *offset;
+}
+
+/* Start allocating from the beginning of the pool again */
+static void
+shm_pool_reset (struct shm_pool *pool)
+{
+ pool->used = 0;
+}
+
+static GstWlMeta *
+gst_buffer_add_wayland_meta (GstBuffer * buffer, GstWaylandBufferPool * wpool)
+{
+ GstWlMeta *wmeta;
+ GstWaylandSink *sink;
+ void *data;
+ gint offset;
+ guint stride = 0;
+ guint size = 0;
+
+ sink = wpool->sink;
+ stride = wpool->width * 4;
+ size = stride * wpool->height;
+
+ wmeta = (GstWlMeta *) gst_buffer_add_meta (buffer, GST_WL_META_INFO, NULL);
+ wmeta->sink = gst_object_ref (sink);
+
+ /*Fixme: size calculation should be more grcefull, have to consider the padding */
+ if (!sink->shm_pool) {
+ sink->shm_pool = shm_pool_create (sink->display, size * 15);
+ shm_pool_reset (sink->shm_pool);
+ }
+
+ if (!sink->shm_pool) {
+ GST_ERROR ("Failed to create shm_pool");
+ return NULL;
+ }
+
+ data = shm_pool_allocate (sink->shm_pool, size, &offset);
+ if (!data)
+ return NULL;
+
+ wmeta->wbuffer = wl_shm_pool_create_buffer (sink->shm_pool->pool, offset,
+ sink->video_width, sink->video_height, stride, WL_SHM_FORMAT_XRGB8888);
+
+ wmeta->data = data;
+ wmeta->size = size;
+
+ gst_buffer_append_memory (buffer,
+ gst_memory_new_wrapped (GST_MEMORY_FLAG_NO_SHARE, data,
+ size, 0, size, NULL, NULL));
+
+
+ return wmeta;
+}
+
+static GstFlowReturn
+wayland_buffer_pool_alloc (GstBufferPool * pool, GstBuffer ** buffer,
+ GstBufferPoolAcquireParams * params)
+{
+ GstWaylandBufferPool *w_pool = GST_WAYLAND_BUFFER_POOL_CAST (pool);
+ GstBuffer *w_buffer;
+ GstWlMeta *meta;
+
+ w_buffer = gst_buffer_new ();
+ meta = gst_buffer_add_wayland_meta (w_buffer, w_pool);
+ if (meta == NULL) {
+ gst_buffer_unref (w_buffer);
+ goto no_buffer;
+ }
+ *buffer = w_buffer;
+
+ return GST_FLOW_OK;
+
+ /* ERROR */
+no_buffer:
+ {
+ GST_WARNING_OBJECT (pool, "can't create buffer");
+ return GST_FLOW_ERROR;
+ }
+}
+
+GstBufferPool *
+gst_wayland_buffer_pool_new (GstWaylandSink * waylandsink)
+{
+ GstWaylandBufferPool *pool;
+
+ g_return_val_if_fail (GST_IS_WAYLAND_SINK (waylandsink), NULL);
+ pool = g_object_new (GST_TYPE_WAYLAND_BUFFER_POOL, NULL);
+ pool->sink = gst_object_ref (waylandsink);
+
+ return GST_BUFFER_POOL_CAST (pool);
+}
+
+static void
+gst_wayland_buffer_pool_class_init (GstWaylandBufferPoolClass * klass)
+{
+ GObjectClass *gobject_class = (GObjectClass *) klass;
+ GstBufferPoolClass *gstbufferpool_class = (GstBufferPoolClass *) klass;
+
+ gobject_class->finalize = gst_wayland_buffer_pool_finalize;
+
+ gstbufferpool_class->set_config = wayland_buffer_pool_set_config;
+ gstbufferpool_class->alloc_buffer = wayland_buffer_pool_alloc;
+}
+
+static void
+gst_wayland_buffer_pool_init (GstWaylandBufferPool * pool)
+{
+}
+
+static void
+gst_wayland_buffer_pool_finalize (GObject * object)
+{
+ GstWaylandBufferPool *pool = GST_WAYLAND_BUFFER_POOL_CAST (object);
+
+ gst_object_unref (pool->sink);
+
+ G_OBJECT_CLASS (gst_wayland_buffer_pool_parent_class)->finalize (object);
+}
diff --git a/ext/wayland/waylandpool.h b/ext/wayland/waylandpool.h
new file mode 100644
index 00000000..c1821d0a
--- /dev/null
+++ b/ext/wayland/waylandpool.h
@@ -0,0 +1,79 @@
+/* GStreamer Wayland buffer pool
+ * Copyright (C) 2012 Intel Corporation
+ * Copyright (C) 2012 Sreerenj Balachandran <sreerenj.balachandran@intel.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 __GST_WAYLAND_BUFFER_POOL_H__
+#define __GST_WAYLAND_BUFFER_POOL_H__
+
+G_BEGIN_DECLS
+
+#include "gstwaylandsink.h"
+typedef struct _GstWlMeta GstWlMeta;
+
+typedef struct _GstWaylandBufferPool GstWaylandBufferPool;
+typedef struct _GstWaylandBufferPoolClass GstWaylandBufferPoolClass;
+
+GType gst_wl_meta_api_get_type (void);
+#define GST_WL_META_API_TYPE (gst_wl_meta_api_get_type())
+const GstMetaInfo * gst_wl_meta_get_info (void);
+#define GST_WL_META_INFO (gst_wl_meta_get_info())
+
+#define gst_buffer_get_wl_meta(b) ((GstWlMeta*)gst_buffer_get_meta((b),GST_WL_META_API_TYPE))
+
+struct _GstWlMeta {
+ GstMeta meta;
+
+ GstWaylandSink *sink;
+
+ struct wl_buffer *wbuffer;
+ void *data;
+ size_t size;
+};
+
+/* buffer pool functions */
+#define GST_TYPE_WAYLAND_BUFFER_POOL (gst_wayland_buffer_pool_get_type())
+#define GST_IS_WAYLAND_BUFFER_POOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_WAYLAND_BUFFER_POOL))
+#define GST_WAYLAND_BUFFER_POOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_WAYLAND_BUFFER_POOL, GstWaylandBufferPool))
+#define GST_WAYLAND_BUFFER_POOL_CAST(obj) ((GstWaylandBufferPool*)(obj))
+
+struct _GstWaylandBufferPool
+{
+ GstBufferPool bufferpool;
+
+ GstWaylandSink *sink;
+
+ /*Fixme: keep all these in GstWaylandBufferPoolPrivate*/
+ GstCaps *caps;
+ GstVideoInfo info;
+ guint width;
+ guint height;
+};
+
+struct _GstWaylandBufferPoolClass
+{
+ GstBufferPoolClass parent_class;
+};
+
+GType gst_wayland_buffer_pool_get_type (void);
+
+GstBufferPool *gst_wayland_buffer_pool_new (GstWaylandSink * waylandsink);
+
+G_END_DECLS
+
+#endif /*__GST_WAYLAND_BUFFER_POOL_H__*/
diff --git a/ext/xvid/Makefile.in b/ext/xvid/Makefile.in
index 477795e4..7fa53c6d 100644
--- a/ext/xvid/Makefile.in
+++ b/ext/xvid/Makefile.in
@@ -342,6 +342,8 @@ 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@
@@ -349,6 +351,8 @@ 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@
@@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -391,6 +394,10 @@ 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@
@@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/ext/zbar/Makefile.in b/ext/zbar/Makefile.in
index bf8e45d1..c572ccfd 100644
--- a/ext/zbar/Makefile.in
+++ b/ext/zbar/Makefile.in
@@ -342,6 +342,8 @@ 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@
@@ -349,6 +351,8 @@ 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@
@@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -391,6 +394,10 @@ 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@
@@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst-libs/Makefile.in b/gst-libs/Makefile.in
index 76946e7c..fb2ed635 100644
--- a/gst-libs/Makefile.in
+++ b/gst-libs/Makefile.in
@@ -314,6 +314,8 @@ 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@
@@ -321,6 +323,8 @@ 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@
@@ -335,7 +339,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -363,6 +366,10 @@ 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@
@@ -489,6 +496,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst-libs/gst/Makefile.in b/gst-libs/gst/Makefile.in
index 405a8dc1..8130030a 100644
--- a/gst-libs/gst/Makefile.in
+++ b/gst-libs/gst/Makefile.in
@@ -316,6 +316,8 @@ 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@
@@ -323,6 +325,8 @@ 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@
@@ -337,7 +341,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -365,6 +368,10 @@ 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@
@@ -491,6 +498,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst-libs/gst/basecamerabinsrc/Makefile.in b/gst-libs/gst/basecamerabinsrc/Makefile.in
index 4482c71f..3472bc23 100644
--- a/gst-libs/gst/basecamerabinsrc/Makefile.in
+++ b/gst-libs/gst/basecamerabinsrc/Makefile.in
@@ -350,6 +350,8 @@ 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@
@@ -357,6 +359,8 @@ 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@
@@ -371,7 +375,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -399,6 +402,10 @@ 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@
@@ -525,6 +532,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst-libs/gst/codecparsers/Makefile.in b/gst-libs/gst/codecparsers/Makefile.in
index bee19cae..f2ffbc82 100644
--- a/gst-libs/gst/codecparsers/Makefile.in
+++ b/gst-libs/gst/codecparsers/Makefile.in
@@ -350,6 +350,8 @@ 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@
@@ -357,6 +359,8 @@ 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@
@@ -371,7 +375,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -399,6 +402,10 @@ 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@
@@ -525,6 +532,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst-libs/gst/codecparsers/gsth264parser.c b/gst-libs/gst/codecparsers/gsth264parser.c
index 2866e8ec..1b0a2120 100644
--- a/gst-libs/gst/codecparsers/gsth264parser.c
+++ b/gst-libs/gst/codecparsers/gsth264parser.c
@@ -136,6 +136,32 @@ static const guint8 zigzag_4x4[16] = {
7, 11, 14, 15,
};
+typedef struct
+{
+ guint par_n, par_d;
+} PAR;
+
+/* Table E-1 - Meaning of sample aspect ratio indicator (1..16) */
+static PAR aspect_ratios[17] = {
+ {0, 0},
+ {1, 1},
+ {12, 11},
+ {10, 11},
+ {16, 11},
+ {40, 33},
+ {24, 11},
+ {20, 11},
+ {32, 11},
+ {80, 33},
+ {18, 11},
+ {15, 11},
+ {64, 33},
+ {160, 99},
+ {4, 3},
+ {3, 2},
+ {2, 1}
+};
+
/* Compute Ceil(Log2(v)) */
/* Derived from branchless code for integer log2(v) from:
<http://graphics.stanford.edu/~seander/bithacks.html#IntegerLog> */
@@ -552,6 +578,8 @@ gst_h264_parse_vui_parameters (GstH264SPS * sps, NalReader * nr)
vui->chroma_sample_loc_type_top_field = 0;
vui->chroma_sample_loc_type_bottom_field = 0;
vui->low_delay_hrd_flag = 0;
+ vui->par_n = 0;
+ vui->par_d = 0;
READ_UINT8 (nr, vui->aspect_ratio_info_present_flag, 1);
if (vui->aspect_ratio_info_present_flag) {
@@ -559,6 +587,11 @@ gst_h264_parse_vui_parameters (GstH264SPS * sps, NalReader * nr)
if (vui->aspect_ratio_idc == EXTENDED_SAR) {
READ_UINT16 (nr, vui->sar_width, 16);
READ_UINT16 (nr, vui->sar_height, 16);
+ vui->par_n = vui->sar_width;
+ vui->par_d = vui->sar_height;
+ } else if (vui->aspect_ratio_idc <= 16) {
+ vui->par_n = aspect_ratios[vui->aspect_ratio_idc].par_n;
+ vui->par_d = aspect_ratios[vui->aspect_ratio_idc].par_d;
}
}
@@ -1943,10 +1976,11 @@ gst_h264_parser_parse_sei (GstH264NalParser * nalparser, GstH264NalUnit * nalu,
if (sei->payloadType == GST_H264_SEI_BUF_PERIOD) {
/* size not set; might depend on emulation_prevention_three_byte */
res = gst_h264_parser_parse_buffering_period (nalparser,
- &sei->buffering_period, &nr);
+ &sei->payload.buffering_period, &nr);
} else if (sei->payloadType == GST_H264_SEI_PIC_TIMING) {
/* size not set; might depend on emulation_prevention_three_byte */
- res = gst_h264_parser_parse_pic_timing (nalparser, &sei->pic_timing, &nr);
+ res = gst_h264_parser_parse_pic_timing (nalparser,
+ &sei->payload.pic_timing, &nr);
} else
res = GST_H264_PARSER_OK;
diff --git a/gst-libs/gst/codecparsers/gsth264parser.h b/gst-libs/gst/codecparsers/gsth264parser.h
index 2e570c8a..6698922e 100644
--- a/gst-libs/gst/codecparsers/gsth264parser.h
+++ b/gst-libs/gst/codecparsers/gsth264parser.h
@@ -362,6 +362,10 @@ struct _GstH264VUIParams
guint32 log2_max_mv_length_vertical;
guint32 num_reorder_frames;
guint32 max_dec_frame_buffering;
+
+ /* calculated values */
+ guint par_n;
+ guint par_d;
};
/**
@@ -660,7 +664,7 @@ struct _GstH264SEIMessage
GstH264BufferingPeriod buffering_period;
GstH264PicTiming pic_timing;
/* ... could implement more */
- };
+ } payload;
};
/**
diff --git a/gst-libs/gst/codecparsers/gstmpegvideoparser.c b/gst-libs/gst/codecparsers/gstmpegvideoparser.c
index fbe37ef5..31333901 100644
--- a/gst-libs/gst/codecparsers/gstmpegvideoparser.c
+++ b/gst-libs/gst/codecparsers/gstmpegvideoparser.c
@@ -107,32 +107,32 @@ failed:
return FALSE;
}
-/* Set the Pixel Aspect Ratio in our hdr from a DAR code in the data */
+/* Set the Pixel Aspect Ratio in our hdr from a ASR code in the data */
static void
-set_par_from_dar (GstMpegVideoSequenceHdr * seqhdr, guint8 asr_code)
+set_par_from_asr_mpeg1 (GstMpegVideoSequenceHdr * seqhdr, guint8 asr_code)
{
- /* Pixel_width = DAR_width * display_vertical_size */
- /* Pixel_height = DAR_height * display_horizontal_size */
- switch (asr_code) {
- case 0x02: /* 3:4 DAR = 4:3 pixels */
- seqhdr->par_w = 4 * seqhdr->height;
- seqhdr->par_h = 3 * seqhdr->width;
- break;
- case 0x03: /* 9:16 DAR */
- seqhdr->par_w = 16 * seqhdr->height;
- seqhdr->par_h = 9 * seqhdr->width;
- break;
- case 0x04: /* 1:2.21 DAR */
- seqhdr->par_w = 221 * seqhdr->height;
- seqhdr->par_h = 100 * seqhdr->width;
- break;
- case 0x01: /* Square pixels */
- seqhdr->par_w = seqhdr->par_h = 1;
- break;
- default:
- GST_DEBUG ("unknown/invalid aspect_ratio_information %d", asr_code);
- break;
- }
+ int ratios[16][2] = {
+ {0, 0}, /* 0, Invalid */
+ {1, 1}, /* 1, 1.0 */
+ {10000, 6735}, /* 2, 0.6735 */
+ {64, 45}, /* 3, 0.7031 16:9 625 line */
+ {10000, 7615}, /* 4, 0.7615 */
+ {10000, 8055}, /* 5, 0.8055 */
+ {32, 27}, /* 6, 0.8437 */
+ {10000, 8935}, /* 7, 0.8935 */
+ {10000, 9375}, /* 8, 0.9375 */
+ {10000, 9815}, /* 9, 0.9815 */
+ {10000, 10255}, /* 10, 1.0255 */
+ {10000, 10695}, /* 11, 1.0695 */
+ {8, 9}, /* 12, 1.125 */
+ {10000, 11575}, /* 13, 1.1575 */
+ {10000, 12015}, /* 14, 1.2015 */
+ {0, 0}, /* 15, invalid */
+ };
+ asr_code &= 0xf;
+
+ seqhdr->par_w = ratios[asr_code][0];
+ seqhdr->par_h = ratios[asr_code][1];
}
static void
@@ -156,79 +156,6 @@ set_fps_from_code (GstMpegVideoSequenceHdr * seqhdr, guint8 fps_code)
}
}
-static gboolean
-gst_mpeg_video_parse_sequence (GstMpegVideoSequenceHdr * seqhdr,
- GstBitReader * br)
-{
- guint8 bits;
- guint8 load_intra_flag, load_non_intra_flag;
-
- /* Setting the height/width codes */
- READ_UINT16 (br, seqhdr->width, 12);
- READ_UINT16 (br, seqhdr->height, 12);
-
- READ_UINT8 (br, seqhdr->aspect_ratio_info, 4);
- set_par_from_dar (seqhdr, seqhdr->aspect_ratio_info);
-
- READ_UINT8 (br, seqhdr->frame_rate_code, 4);
- set_fps_from_code (seqhdr, seqhdr->frame_rate_code);
-
- READ_UINT32 (br, seqhdr->bitrate_value, 18);
- if (seqhdr->bitrate_value == 0x3ffff) {
- /* VBR stream */
- seqhdr->bitrate = 0;
- } else {
- /* Value in header is in units of 400 bps */
- seqhdr->bitrate *= 400;
- }
-
- READ_UINT8 (br, bits, 1);
- if (bits != MARKER_BIT)
- goto failed;
-
- /* VBV buffer size */
- READ_UINT16 (br, seqhdr->vbv_buffer_size_value, 10);
-
- /* constrained_parameters_flag */
- READ_UINT8 (br, seqhdr->constrained_parameters_flag, 1);
-
- /* load_intra_quantiser_matrix */
- READ_UINT8 (br, load_intra_flag, 1);
- if (load_intra_flag) {
- gint i;
- for (i = 0; i < 64; i++)
- READ_UINT8 (br, seqhdr->intra_quantizer_matrix[mpeg_zigzag_8x8[i]], 8);
- } else
- memcpy (seqhdr->intra_quantizer_matrix, default_intra_quantizer_matrix, 64);
-
- /* non intra quantizer matrix */
- READ_UINT8 (br, load_non_intra_flag, 1);
- if (load_non_intra_flag) {
- gint i;
- for (i = 0; i < 64; i++)
- READ_UINT8 (br, seqhdr->non_intra_quantizer_matrix[mpeg_zigzag_8x8[i]],
- 8);
- } else
- memset (seqhdr->non_intra_quantizer_matrix, 16, 64);
-
- /* dump some info */
- GST_LOG ("width x height: %d x %d", seqhdr->width, seqhdr->height);
- GST_LOG ("fps: %d/%d", seqhdr->fps_n, seqhdr->fps_d);
- GST_LOG ("par: %d/%d", seqhdr->par_w, seqhdr->par_h);
- GST_LOG ("bitrate: %d", seqhdr->bitrate);
-
- return TRUE;
-
- /* ERRORS */
-failed:
- {
- GST_WARNING ("Failed to parse sequence header");
- /* clear out stuff */
- memset (seqhdr, 0, sizeof (*seqhdr));
- return FALSE;
- }
-}
-
/* @size and @offset are wrt current reader position */
static inline guint
scan_for_start_codes (const GstByteReader * reader, guint offset, guint size)
@@ -347,6 +274,8 @@ gst_mpeg_video_parse_sequence_header (GstMpegVideoSequenceHdr * seqhdr,
const guint8 * data, gsize size, guint offset)
{
GstBitReader br;
+ guint8 bits;
+ guint8 load_intra_flag, load_non_intra_flag;
g_return_val_if_fail (seqhdr != NULL, FALSE);
@@ -357,7 +286,72 @@ gst_mpeg_video_parse_sequence_header (GstMpegVideoSequenceHdr * seqhdr,
gst_bit_reader_init (&br, &data[offset], size);
- return gst_mpeg_video_parse_sequence (seqhdr, &br);
+ /* Setting the height/width codes */
+ READ_UINT16 (&br, seqhdr->width, 12);
+ READ_UINT16 (&br, seqhdr->height, 12);
+
+ READ_UINT8 (&br, seqhdr->aspect_ratio_info, 4);
+ /* Interpret PAR according to MPEG-1. Needs to be reinterpreted
+ * later, if a sequence_display extension is seen */
+ set_par_from_asr_mpeg1 (seqhdr, seqhdr->aspect_ratio_info);
+
+ READ_UINT8 (&br, seqhdr->frame_rate_code, 4);
+ set_fps_from_code (seqhdr, seqhdr->frame_rate_code);
+
+ READ_UINT32 (&br, seqhdr->bitrate_value, 18);
+ if (seqhdr->bitrate_value == 0x3ffff) {
+ /* VBR stream */
+ seqhdr->bitrate = 0;
+ } else {
+ /* Value in header is in units of 400 bps */
+ seqhdr->bitrate *= 400;
+ }
+
+ READ_UINT8 (&br, bits, 1);
+ if (bits != MARKER_BIT)
+ goto failed;
+
+ /* VBV buffer size */
+ READ_UINT16 (&br, seqhdr->vbv_buffer_size_value, 10);
+
+ /* constrained_parameters_flag */
+ READ_UINT8 (&br, seqhdr->constrained_parameters_flag, 1);
+
+ /* load_intra_quantiser_matrix */
+ READ_UINT8 (&br, load_intra_flag, 1);
+ if (load_intra_flag) {
+ gint i;
+ for (i = 0; i < 64; i++)
+ READ_UINT8 (&br, seqhdr->intra_quantizer_matrix[mpeg_zigzag_8x8[i]], 8);
+ } else
+ memcpy (seqhdr->intra_quantizer_matrix, default_intra_quantizer_matrix, 64);
+
+ /* non intra quantizer matrix */
+ READ_UINT8 (&br, load_non_intra_flag, 1);
+ if (load_non_intra_flag) {
+ gint i;
+ for (i = 0; i < 64; i++)
+ READ_UINT8 (&br, seqhdr->non_intra_quantizer_matrix[mpeg_zigzag_8x8[i]],
+ 8);
+ } else
+ memset (seqhdr->non_intra_quantizer_matrix, 16, 64);
+
+ /* dump some info */
+ GST_LOG ("width x height: %d x %d", seqhdr->width, seqhdr->height);
+ GST_LOG ("fps: %d/%d", seqhdr->fps_n, seqhdr->fps_d);
+ GST_LOG ("par: %d/%d", seqhdr->par_w, seqhdr->par_h);
+ GST_LOG ("bitrate: %d", seqhdr->bitrate);
+
+ return TRUE;
+
+ /* ERRORS */
+failed:
+ {
+ GST_WARNING ("Failed to parse sequence header");
+ /* clear out stuff */
+ memset (seqhdr, 0, sizeof (*seqhdr));
+ return FALSE;
+ }
}
/**
@@ -426,6 +420,110 @@ gst_mpeg_video_parse_sequence_extension (GstMpegVideoSequenceExt * seqext,
return TRUE;
}
+gboolean
+gst_mpeg_video_parse_sequence_display_extension (GstMpegVideoSequenceDisplayExt
+ * seqdisplayext, const guint8 * data, gsize size, guint offset)
+{
+ GstBitReader br;
+
+ g_return_val_if_fail (seqdisplayext != NULL, FALSE);
+ if (offset > size)
+ return FALSE;
+
+ size -= offset;
+ if (size < 5) {
+ GST_DEBUG ("not enough bytes to parse the extension");
+ return FALSE;
+ }
+
+ gst_bit_reader_init (&br, &data[offset], size);
+
+ if (gst_bit_reader_get_bits_uint8_unchecked (&br, 4) !=
+ GST_MPEG_VIDEO_PACKET_EXT_SEQUENCE_DISPLAY) {
+ GST_DEBUG ("Not parsing a sequence display extension");
+ return FALSE;
+ }
+
+ seqdisplayext->video_format =
+ gst_bit_reader_get_bits_uint8_unchecked (&br, 3);
+ seqdisplayext->colour_description_flag =
+ gst_bit_reader_get_bits_uint8_unchecked (&br, 1);
+
+ if (seqdisplayext->colour_description_flag) {
+ seqdisplayext->colour_primaries =
+ gst_bit_reader_get_bits_uint8_unchecked (&br, 8);
+ seqdisplayext->transfer_characteristics =
+ gst_bit_reader_get_bits_uint8_unchecked (&br, 8);
+ seqdisplayext->matrix_coefficients =
+ gst_bit_reader_get_bits_uint8_unchecked (&br, 8);
+ }
+
+ if (gst_bit_reader_get_remaining (&br) < 29) {
+ GST_DEBUG ("Not enough remaining bytes to parse the extension");
+ return FALSE;
+ }
+
+ seqdisplayext->display_horizontal_size =
+ gst_bit_reader_get_bits_uint16_unchecked (&br, 14);
+ /* skip marker bit */
+ gst_bit_reader_skip_unchecked (&br, 1);
+ seqdisplayext->display_vertical_size =
+ gst_bit_reader_get_bits_uint16_unchecked (&br, 14);
+
+ return TRUE;
+}
+
+gboolean
+gst_mpeg_video_finalise_mpeg2_sequence_header (GstMpegVideoSequenceHdr * seqhdr,
+ GstMpegVideoSequenceExt * seqext,
+ GstMpegVideoSequenceDisplayExt * displayext)
+{
+ guint32 w;
+ guint32 h;
+
+ if (seqext) {
+ seqhdr->fps_n = seqhdr->fps_n * (seqext->fps_n_ext + 1);
+ seqhdr->fps_d = seqhdr->fps_d * (seqext->fps_d_ext + 1);
+ /* Extend width and height to 14 bits by adding the extension bits */
+ seqhdr->width |= (seqext->horiz_size_ext << 12);
+ seqhdr->height |= (seqext->vert_size_ext << 12);
+ }
+
+ w = seqhdr->width;
+ h = seqhdr->height;
+ if (displayext) {
+ /* Use the display size for calculating PAR when display ext present */
+ w = displayext->display_horizontal_size;
+ h = displayext->display_vertical_size;
+ }
+
+ /* Pixel_width = DAR_width * display_vertical_size */
+ /* Pixel_height = DAR_height * display_horizontal_size */
+ switch (seqhdr->aspect_ratio_info) {
+ case 0x01: /* Square pixels */
+ seqhdr->par_w = seqhdr->par_h = 1;
+ break;
+ case 0x02: /* 3:4 DAR = 4:3 pixels */
+ seqhdr->par_w = 4 * h;
+ seqhdr->par_h = 3 * w;
+ break;
+ case 0x03: /* 9:16 DAR */
+ seqhdr->par_w = 16 * h;
+ seqhdr->par_h = 9 * w;
+ break;
+ case 0x04: /* 1:2.21 DAR */
+ seqhdr->par_w = 221 * h;
+ seqhdr->par_h = 100 * w;
+ break;
+ default:
+ GST_DEBUG ("unknown/invalid aspect_ratio_information %d",
+ seqhdr->aspect_ratio_info);
+ break;
+ }
+
+ return TRUE;
+}
+
/**
* gst_mpeg_video_parse_quant_matrix_extension:
* @quant: (out): The #GstMpegVideoQuantMatrixExt structure to fill
diff --git a/gst-libs/gst/codecparsers/gstmpegvideoparser.h b/gst-libs/gst/codecparsers/gstmpegvideoparser.h
index d0a16bce..2b13a064 100644
--- a/gst-libs/gst/codecparsers/gstmpegvideoparser.h
+++ b/gst-libs/gst/codecparsers/gstmpegvideoparser.h
@@ -175,6 +175,7 @@ typedef enum {
typedef struct _GstMpegVideoSequenceHdr GstMpegVideoSequenceHdr;
typedef struct _GstMpegVideoSequenceExt GstMpegVideoSequenceExt;
+typedef struct _GstMpegVideoSequenceDisplayExt GstMpegVideoSequenceDisplayExt;
typedef struct _GstMpegVideoPictureHdr GstMpegVideoPictureHdr;
typedef struct _GstMpegVideoGop GstMpegVideoGop;
typedef struct _GstMpegVideoPictureExt GstMpegVideoPictureExt;
@@ -218,16 +219,16 @@ struct _GstMpegVideoSequenceHdr
/**
* GstMpegVideoSequenceExt:
- * @profile: mpeg2 decoder profil
+ * @profile: mpeg2 decoder profile
* @level: mpeg2 decoder level
- * @progressive: %TRUE if the frames are progressive %FALSE otherwize
+ * @progressive: %TRUE if the frames are progressive %FALSE otherwise
* @chroma_format: indicates the chrominance format
* @horiz_size_ext: Horizontal size
* @vert_size_ext: Vertical size
* @bitrate_ext: The bitrate
- * @vbv_buffer_size_extension: Vbv vuffer size
+ * @vbv_buffer_size_extension: VBV vuffer size
* @low_delay: %TRUE if the sequence doesn't contain any B-pictures, %FALSE
- * otherwize
+ * otherwise
* @fps_n_ext: Framerate nominator code
* @fps_d_ext: Framerate denominator code
*
@@ -253,6 +254,25 @@ struct _GstMpegVideoSequenceExt
};
/**
+ * GstMpegVideoSequenceDisplayExt:
+ * @profile: mpeg2 decoder profil
+
+ */
+struct _GstMpegVideoSequenceDisplayExt
+{
+ guint8 video_format;
+ guint8 colour_description_flag;
+
+ /* if colour_description_flag: */
+ guint8 colour_primaries;
+ guint8 transfer_characteristics;
+ guint8 matrix_coefficients;
+
+ guint16 display_horizontal_size;
+ guint16 display_vertical_size;
+};
+
+/**
* GstMpegVideoQuantMatrixExt:
* @load_intra_quantiser_matrix:
* @intra_quantiser_matrix:
@@ -384,6 +404,10 @@ gboolean gst_mpeg_video_parse (GstMpegVideoPacket * pack
gboolean gst_mpeg_video_parse_sequence_header (GstMpegVideoSequenceHdr * params,
const guint8 * data, gsize size, guint offset);
+/* seqext and displayext may be NULL if not received */
+gboolean gst_mpeg_video_finalise_mpeg2_sequence_header (GstMpegVideoSequenceHdr *hdr,
+ GstMpegVideoSequenceExt *seqext, GstMpegVideoSequenceDisplayExt *displayext);
+
gboolean gst_mpeg_video_parse_picture_header (GstMpegVideoPictureHdr* hdr,
const guint8 * data, gsize size, guint offset);
@@ -396,6 +420,9 @@ gboolean gst_mpeg_video_parse_gop (GstMpegVideoGop * gop,
gboolean gst_mpeg_video_parse_sequence_extension (GstMpegVideoSequenceExt * seqext,
const guint8 * data, gsize size, guint offset);
+gboolean gst_mpeg_video_parse_sequence_display_extension (GstMpegVideoSequenceDisplayExt * seqdisplayext,
+ const guint8 * data, gsize size, guint offset);
+
gboolean gst_mpeg_video_parse_quant_matrix_extension (GstMpegVideoQuantMatrixExt * quant,
const guint8 * data, gsize size, guint offset);
diff --git a/gst-libs/gst/codecparsers/gstvc1parser.c b/gst-libs/gst/codecparsers/gstvc1parser.c
index a82e46e1..bc94823c 100644
--- a/gst-libs/gst/codecparsers/gstvc1parser.c
+++ b/gst-libs/gst/codecparsers/gstvc1parser.c
@@ -837,10 +837,13 @@ parse_sequence_header_advanced (GstVC1SeqHdr * seqhdr, GstBitReader * br)
READ_UINT8 (br, advanced->aspect_ratio, 4);
if (advanced->aspect_ratio == 15) {
+ /* Aspect Width (6.1.14.3.2) and Aspect Height (6.1.14.3.3)
+ * syntax elements hold a binary encoding of sizes ranging
+ * from 1 to 256 */
READ_UINT8 (br, advanced->aspect_horiz_size, 8);
READ_UINT8 (br, advanced->aspect_vert_size, 8);
- advanced->par_n = advanced->aspect_horiz_size;
- advanced->par_d = advanced->aspect_vert_size;
+ advanced->par_n = 1 + advanced->aspect_horiz_size;
+ advanced->par_d = 1 + advanced->aspect_vert_size;
} else {
advanced->par_n = aspect_ratios[advanced->aspect_ratio].par_n;
advanced->par_d = aspect_ratios[advanced->aspect_ratio].par_d;
diff --git a/gst-libs/gst/interfaces/Makefile.in b/gst-libs/gst/interfaces/Makefile.in
index 6cdcb16c..a4680da5 100644
--- a/gst-libs/gst/interfaces/Makefile.in
+++ b/gst-libs/gst/interfaces/Makefile.in
@@ -361,6 +361,8 @@ 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@
@@ -368,6 +370,8 @@ 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@
@@ -382,7 +386,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -410,6 +413,10 @@ 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@
@@ -536,6 +543,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst-libs/gst/signalprocessor/Makefile.in b/gst-libs/gst/signalprocessor/Makefile.in
index 258ea420..340a1cbf 100644
--- a/gst-libs/gst/signalprocessor/Makefile.in
+++ b/gst-libs/gst/signalprocessor/Makefile.in
@@ -346,6 +346,8 @@ 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@
@@ -353,6 +355,8 @@ 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@
@@ -367,7 +371,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -395,6 +398,10 @@ 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@
@@ -521,6 +528,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst-libs/gst/video/Makefile.in b/gst-libs/gst/video/Makefile.in
index 694324fc..a4a976f2 100644
--- a/gst-libs/gst/video/Makefile.in
+++ b/gst-libs/gst/video/Makefile.in
@@ -348,6 +348,8 @@ 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@
@@ -355,6 +357,8 @@ 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@
@@ -369,7 +373,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -397,6 +400,10 @@ 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@
@@ -523,6 +530,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst-plugins-bad.doap b/gst-plugins-bad.doap
index bec1fd1f..1fc4c37e 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>0.11.94</revision>
+ <branch>0.11</branch>
+ <name>Old Friends</name>
+ <created>2012-09-14</created>
+ <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-0.11.94.tar.xz" />
+ </Version>
+ </release>
+
+ <release>
+ <Version>
<revision>0.11.93</revision>
<branch>0.11</branch>
<name>Infralove</name>
diff --git a/gst-plugins-bad.spec b/gst-plugins-bad.spec
index aab4d131..5c22b8db 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-bad011
-Version: 0.11.93
+Version: 0.11.94
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 bcaae154..1d411ef8 100644
--- a/gst/Makefile.in
+++ b/gst/Makefile.in
@@ -319,6 +319,8 @@ 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@
@@ -326,6 +328,8 @@ 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@
@@ -340,7 +344,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -368,6 +371,10 @@ 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@
@@ -494,6 +501,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/adpcmdec/Makefile.in b/gst/adpcmdec/Makefile.in
index 07e0d4a9..e3a0818e 100644
--- a/gst/adpcmdec/Makefile.in
+++ b/gst/adpcmdec/Makefile.in
@@ -338,6 +338,8 @@ 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@
@@ -345,6 +347,8 @@ 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@
@@ -359,7 +363,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -387,6 +390,10 @@ 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@
@@ -513,6 +520,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/adpcmenc/Makefile.in b/gst/adpcmenc/Makefile.in
index f1c39254..b9abfe2b 100644
--- a/gst/adpcmenc/Makefile.in
+++ b/gst/adpcmenc/Makefile.in
@@ -338,6 +338,8 @@ 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@
@@ -345,6 +347,8 @@ 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@
@@ -359,7 +363,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -387,6 +390,10 @@ 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@
@@ -513,6 +520,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/aiff/Makefile.in b/gst/aiff/Makefile.in
index 90abac09..e8d9968f 100644
--- a/gst/aiff/Makefile.in
+++ b/gst/aiff/Makefile.in
@@ -342,6 +342,8 @@ 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@
@@ -349,6 +351,8 @@ 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@
@@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -391,6 +394,10 @@ 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@
@@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/asfmux/Makefile.in b/gst/asfmux/Makefile.in
index 9c01220a..7af485ff 100644
--- a/gst/asfmux/Makefile.in
+++ b/gst/asfmux/Makefile.in
@@ -346,6 +346,8 @@ 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@
@@ -353,6 +355,8 @@ 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@
@@ -367,7 +371,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -395,6 +398,10 @@ 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@
@@ -521,6 +528,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/asfmux/gstasfmux.c b/gst/asfmux/gstasfmux.c
index 8219c6f6..128ead26 100644
--- a/gst/asfmux/gstasfmux.c
+++ b/gst/asfmux/gstasfmux.c
@@ -2288,7 +2288,7 @@ gst_asf_mux_request_new_pad (GstElement * element,
collect_size = sizeof (GstAsfVideoPad);
}
collect_pad = (GstAsfPad *)
- gst_collect_pads_add_pad_full (asfmux->collect, newpad, collect_size,
+ gst_collect_pads_add_pad (asfmux->collect, newpad, collect_size,
(GstCollectDataDestroyNotify) (gst_asf_mux_pad_reset), TRUE);
/* set up pad */
diff --git a/gst/asfmux/gstasfparse.c b/gst/asfmux/gstasfparse.c
index 0cf2671e..25dd3e76 100644
--- a/gst/asfmux/gstasfparse.c
+++ b/gst/asfmux/gstasfparse.c
@@ -74,7 +74,8 @@ gst_asf_parse_sink_activate (GstPad * sinkpad, GstObject * parent)
goto activate_push;
}
- pull_mode = gst_query_has_scheduling_mode (query, GST_PAD_MODE_PULL);
+ pull_mode = gst_query_has_scheduling_mode_with_flags (query,
+ GST_PAD_MODE_PULL, GST_SCHEDULING_FLAG_SEEKABLE);
gst_query_unref (query);
if (!pull_mode)
diff --git a/gst/audiovisualizers/Makefile.in b/gst/audiovisualizers/Makefile.in
index b4454161..094b546a 100644
--- a/gst/audiovisualizers/Makefile.in
+++ b/gst/audiovisualizers/Makefile.in
@@ -350,6 +350,8 @@ 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@
@@ -357,6 +359,8 @@ 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@
@@ -371,7 +375,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -399,6 +402,10 @@ 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@
@@ -525,6 +532,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/audiovisualizers/README b/gst/audiovisualizers/README
index 264bc4be..5fba0d81 100644
--- a/gst/audiovisualizers/README
+++ b/gst/audiovisualizers/README
@@ -24,11 +24,15 @@ afterwards.
- would be nice to use a generic 3x3 matrix operation, we don't run inplace
anyway
- this way we could also blur the background
+ - we need to handle visualizer that don't draw with alpha:
+ - add API to set can_mix and if so enable shaders
+ - ev. do mixing ourself (needs extra buffer)
= Elements to port =
-gst-plugin-ugly/gst/synaestesia -> synaescope
-gst-plugin-bad/gst/smoothwave -> wavescope
-gst-plugin-good/gst/monoscope -> blend into what we have in wavescope
+gst-plugins-ugly/gst/synaestesia -> synaescope
+gst-plugins-bad/gst/smoothwave -> wavescope
+gst-plugins-good/gst/monoscope -> blend into what we have in wavescope
+gst-plugins-base/ext/libvisual - done
= Elements to add =
spectrascope - done
diff --git a/gst/audiovisualizers/gstaudiovisualizer.c b/gst/audiovisualizers/gstaudiovisualizer.c
index ac56a9f3..2150ecde 100644
--- a/gst/audiovisualizers/gstaudiovisualizer.c
+++ b/gst/audiovisualizers/gstaudiovisualizer.c
@@ -39,6 +39,10 @@
#include <string.h>
+#include <gst/video/video.h>
+#include <gst/video/gstvideometa.h>
+#include <gst/video/gstvideopool.h>
+
#include "gstaudiovisualizer.h"
GST_DEBUG_CATEGORY_STATIC (audio_visualizer_debug);
@@ -129,232 +133,315 @@ gst_audio_visualizer_shader_get_type (void)
/* we're only supporting GST_VIDEO_FORMAT_xRGB right now) */
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
-#define SHADE1(_d, _s, _i, _r, _g, _b) \
-G_STMT_START { \
- _d[_i] = (_s[_i] > _b) ? _s[_i] - _b : 0; \
- _i++; \
- _d[_i] = (_s[_i] > _g) ? _s[_i] - _g : 0; \
- _i++; \
- _d[_i] = (_s[_i] > _r) ? _s[_i] - _r : 0; \
- _i++; \
- _d[_i++] = 0; \
-} G_STMT_END
-
-#define SHADE2(_d, _s, _j, _i, _r, _g, _b) \
-G_STMT_START { \
- _d[_j++] = (_s[_i] > _b) ? _s[_i] - _b : 0; \
- _i++; \
- _d[_j++] = (_s[_i] > _g) ? _s[_i] - _g : 0; \
- _i++; \
- _d[_j++] = (_s[_i] > _r) ? _s[_i] - _r : 0; \
- _i++; \
- _d[_j++] = 0; \
- _i++; \
+#define SHADE(_d, _s, _i, _r, _g, _b) \
+G_STMT_START { \
+ _d[_i * 4 + 0] = (_s[_i * 4 + 0] > _b) ? _s[_i * 4 + 0] - _b : 0; \
+ _d[_i * 4 + 1] = (_s[_i * 4 + 1] > _g) ? _s[_i * 4 + 1] - _g : 0; \
+ _d[_i * 4 + 2] = (_s[_i * 4 + 2] > _r) ? _s[_i * 4 + 2] - _r : 0; \
+ _d[_i * 4 + 3] = 0; \
} G_STMT_END
-#else
-
-#define SHADE1(_d, _s, _i, _r, _g, _b) \
-G_STMT_START { \
- _d[_i++] = 0; \
- _d[_i] = (_s[_i] > _r) ? _s[_i] - _r : 0; \
- _i++; \
- _d[_i] = (_s[_i] > _g) ? _s[_i] - _g : 0; \
- _i++; \
- _d[_i] = (_s[_i] > _b) ? _s[_i] - _b : 0; \
- _i++; \
-} G_STMT_END
+#else /* G_BYTE_ORDER == G_LITTLE_ENDIAN */
-#define SHADE2(_d, _s, _j, _i, _r, _g, _b) \
-G_STMT_START { \
- _d[_j++] = 0; \
- _i++; \
- _d[_j++] = (_s[_i] > _r) ? _s[_i] - _r : 0; \
- _i++; \
- _d[_j++] = (_s[_i] > _g) ? _s[_i] - _g : 0; \
- _i++; \
- _d[_j++] = (_s[_i] > _b) ? _s[_i] - _b : 0; \
- _i++; \
+#define SHADE(_d, _s, _i, _r, _g, _b) \
+G_STMT_START { \
+ _d[_i * 4 + 0] = 0; \
+ _d[_i * 4 + 1] = (_s[_i * 4 + 1] > _r) ? _s[_i * 4 + 1] - _r : 0; \
+ _d[_i * 4 + 2] = (_s[_i * 4 + 2] > _g) ? _s[_i * 4 + 2] - _g : 0; \
+ _d[_i * 4 + 3] = (_s[_i * 4 + 3] > _b) ? _s[_i * 4 + 3] - _b : 0; \
} G_STMT_END
#endif
static void
-shader_fade (GstAudioVisualizer * scope, const guint8 * s, guint8 * d)
+shader_fade (GstAudioVisualizer * scope, const GstVideoFrame * sframe,
+ GstVideoFrame * dframe)
{
- guint i, bpf = scope->bpf;
+ guint i, j;
guint r = (scope->shade_amount >> 16) & 0xff;
guint g = (scope->shade_amount >> 8) & 0xff;
guint b = (scope->shade_amount >> 0) & 0xff;
+ guint8 *s, *d;
+ gint ss, ds, width, height;
- for (i = 0; i < bpf;) {
- SHADE1 (d, s, i, r, g, b);
+ s = GST_VIDEO_FRAME_PLANE_DATA (sframe, 0);
+ ss = GST_VIDEO_FRAME_PLANE_STRIDE (sframe, 0);
+ d = GST_VIDEO_FRAME_PLANE_DATA (dframe, 0);
+ ds = GST_VIDEO_FRAME_PLANE_STRIDE (dframe, 0);
+
+ width = GST_VIDEO_FRAME_WIDTH (sframe);
+ height = GST_VIDEO_FRAME_HEIGHT (sframe);
+
+ for (j = 0; j < height; j++) {
+ for (i = 0; i < width; i++) {
+ SHADE (d, s, i, r, g, b);
+ }
+ s += ss;
+ d += ds;
}
}
static void
-shader_fade_and_move_up (GstAudioVisualizer * scope, const guint8 * s,
- guint8 * d)
+shader_fade_and_move_up (GstAudioVisualizer * scope,
+ const GstVideoFrame * sframe, GstVideoFrame * dframe)
{
- guint i, j, bpf = scope->bpf;
- guint bpl = 4 * scope->width;
+ guint i, j;
guint r = (scope->shade_amount >> 16) & 0xff;
guint g = (scope->shade_amount >> 8) & 0xff;
guint b = (scope->shade_amount >> 0) & 0xff;
+ guint8 *s, *d;
+ gint ss, ds, width, height;
- for (j = 0, i = bpl; i < bpf;) {
- SHADE2 (d, s, j, i, r, g, b);
+ s = GST_VIDEO_FRAME_PLANE_DATA (sframe, 0);
+ ss = GST_VIDEO_FRAME_PLANE_STRIDE (sframe, 0);
+ d = GST_VIDEO_FRAME_PLANE_DATA (dframe, 0);
+ ds = GST_VIDEO_FRAME_PLANE_STRIDE (dframe, 0);
+
+ width = GST_VIDEO_FRAME_WIDTH (sframe);
+ height = GST_VIDEO_FRAME_HEIGHT (sframe);
+
+ for (j = 1; j < height; j++) {
+ s += ss;
+ for (i = 0; i < width; i++) {
+ SHADE (d, s, i, r, g, b);
+ }
+ d += ds;
}
}
static void
-shader_fade_and_move_down (GstAudioVisualizer * scope, const guint8 * s,
- guint8 * d)
+shader_fade_and_move_down (GstAudioVisualizer * scope,
+ const GstVideoFrame * sframe, GstVideoFrame * dframe)
{
- guint i, j, bpf = scope->bpf;
- guint bpl = 4 * scope->width;
+ guint i, j;
guint r = (scope->shade_amount >> 16) & 0xff;
guint g = (scope->shade_amount >> 8) & 0xff;
guint b = (scope->shade_amount >> 0) & 0xff;
+ guint8 *s, *d;
+ gint ss, ds, width, height;
- for (j = bpl, i = 0; j < bpf;) {
- SHADE2 (d, s, j, i, r, g, b);
+ s = GST_VIDEO_FRAME_PLANE_DATA (sframe, 0);
+ ss = GST_VIDEO_FRAME_PLANE_STRIDE (sframe, 0);
+ d = GST_VIDEO_FRAME_PLANE_DATA (dframe, 0);
+ ds = GST_VIDEO_FRAME_PLANE_STRIDE (dframe, 0);
+
+ width = GST_VIDEO_FRAME_WIDTH (sframe);
+ height = GST_VIDEO_FRAME_HEIGHT (sframe);
+
+ for (j = 1; j < height; j++) {
+ d += ds;
+ for (i = 0; i < width; i++) {
+ SHADE (d, s, i, r, g, b);
+ }
+ s += ss;
}
}
static void
shader_fade_and_move_left (GstAudioVisualizer * scope,
- const guint8 * s, guint8 * d)
+ const GstVideoFrame * sframe, GstVideoFrame * dframe)
{
- guint i, j, k, bpf = scope->bpf;
- guint w = scope->width;
+ guint i, j;
guint r = (scope->shade_amount >> 16) & 0xff;
guint g = (scope->shade_amount >> 8) & 0xff;
guint b = (scope->shade_amount >> 0) & 0xff;
+ guint8 *s, *d;
+ gint ss, ds, width, height;
+
+ s = GST_VIDEO_FRAME_PLANE_DATA (sframe, 0);
+ ss = GST_VIDEO_FRAME_PLANE_STRIDE (sframe, 0);
+ d = GST_VIDEO_FRAME_PLANE_DATA (dframe, 0);
+ ds = GST_VIDEO_FRAME_PLANE_STRIDE (dframe, 0);
+
+ width = GST_VIDEO_FRAME_WIDTH (sframe);
+ height = GST_VIDEO_FRAME_HEIGHT (sframe);
+
+ width -= 1;
+ s += 4;
/* move to the left */
- for (j = 0, i = 4; i < bpf;) {
- for (k = 0; k < w - 1; k++) {
- SHADE2 (d, s, j, i, r, g, b);
+ for (j = 0; j < height; j++) {
+ for (i = 0; i < width; i++) {
+ SHADE (d, s, i, r, g, b);
}
- i += 4;
- j += 4;
+ d += ds;
+ s += ss;
}
}
static void
shader_fade_and_move_right (GstAudioVisualizer * scope,
- const guint8 * s, guint8 * d)
+ const GstVideoFrame * sframe, GstVideoFrame * dframe)
{
- guint i, j, k, bpf = scope->bpf;
- guint w = scope->width;
+ guint i, j;
guint r = (scope->shade_amount >> 16) & 0xff;
guint g = (scope->shade_amount >> 8) & 0xff;
guint b = (scope->shade_amount >> 0) & 0xff;
+ guint8 *s, *d;
+ gint ss, ds, width, height;
- /* move to the left */
- for (j = 4, i = 0; i < bpf;) {
- for (k = 0; k < w - 1; k++) {
- SHADE2 (d, s, j, i, r, g, b);
+ s = GST_VIDEO_FRAME_PLANE_DATA (sframe, 0);
+ ss = GST_VIDEO_FRAME_PLANE_STRIDE (sframe, 0);
+ d = GST_VIDEO_FRAME_PLANE_DATA (dframe, 0);
+ ds = GST_VIDEO_FRAME_PLANE_STRIDE (dframe, 0);
+
+ width = GST_VIDEO_FRAME_WIDTH (sframe);
+ height = GST_VIDEO_FRAME_HEIGHT (sframe);
+
+ width -= 1;
+ d += 4;
+
+ /* move to the right */
+ for (j = 0; j < height; j++) {
+ for (i = 0; i < width; i++) {
+ SHADE (d, s, i, r, g, b);
}
- i += 4;
- j += 4;
+ d += ds;
+ s += ss;
}
}
static void
shader_fade_and_move_horiz_out (GstAudioVisualizer * scope,
- const guint8 * s, guint8 * d)
+ const GstVideoFrame * sframe, GstVideoFrame * dframe)
{
- guint i, j, bpf = scope->bpf / 2;
- guint bpl = 4 * scope->width;
+ guint i, j;
guint r = (scope->shade_amount >> 16) & 0xff;
guint g = (scope->shade_amount >> 8) & 0xff;
guint b = (scope->shade_amount >> 0) & 0xff;
+ guint8 *s, *d;
+ gint ss, ds, width, height;
+
+ s = GST_VIDEO_FRAME_PLANE_DATA (sframe, 0);
+ ss = GST_VIDEO_FRAME_PLANE_STRIDE (sframe, 0);
+ d = GST_VIDEO_FRAME_PLANE_DATA (dframe, 0);
+ ds = GST_VIDEO_FRAME_PLANE_STRIDE (dframe, 0);
+
+ width = GST_VIDEO_FRAME_WIDTH (sframe);
+ height = GST_VIDEO_FRAME_HEIGHT (sframe);
/* move upper half up */
- for (j = 0, i = bpl; i < bpf;) {
- SHADE2 (d, s, j, i, r, g, b);
+ for (j = 0; j < height / 2; j++) {
+ s += ss;
+ for (i = 0; i < width; i++) {
+ SHADE (d, s, i, r, g, b);
+ }
+ d += ds;
}
/* move lower half down */
- for (j = bpf + bpl, i = bpf; j < bpf + bpf;) {
- SHADE2 (d, s, j, i, r, g, b);
+ for (j = 0; j < height / 2; j++) {
+ d += ds;
+ for (i = 0; i < width; i++) {
+ SHADE (d, s, i, r, g, b);
+ }
+ s += ss;
}
}
static void
shader_fade_and_move_horiz_in (GstAudioVisualizer * scope,
- const guint8 * s, guint8 * d)
+ const GstVideoFrame * sframe, GstVideoFrame * dframe)
{
- guint i, j, bpf = scope->bpf / 2;
- guint bpl = 4 * scope->width;
+ guint i, j;
guint r = (scope->shade_amount >> 16) & 0xff;
guint g = (scope->shade_amount >> 8) & 0xff;
guint b = (scope->shade_amount >> 0) & 0xff;
+ guint8 *s, *d;
+ gint ss, ds, width, height;
+
+ s = GST_VIDEO_FRAME_PLANE_DATA (sframe, 0);
+ ss = GST_VIDEO_FRAME_PLANE_STRIDE (sframe, 0);
+ d = GST_VIDEO_FRAME_PLANE_DATA (dframe, 0);
+ ds = GST_VIDEO_FRAME_PLANE_STRIDE (dframe, 0);
+
+ width = GST_VIDEO_FRAME_WIDTH (sframe);
+ height = GST_VIDEO_FRAME_HEIGHT (sframe);
/* move upper half down */
- for (i = 0, j = bpl; i < bpf;) {
- SHADE2 (d, s, j, i, r, g, b);
+ for (j = 0; j < height / 2; j++) {
+ d += ds;
+ for (i = 0; i < width; i++) {
+ SHADE (d, s, i, r, g, b);
+ }
+ s += ss;
}
/* move lower half up */
- for (i = bpf + bpl, j = bpf; i < bpf + bpf;) {
- SHADE2 (d, s, j, i, r, g, b);
+ for (j = 0; j < height / 2; j++) {
+ s += ss;
+ for (i = 0; i < width; i++) {
+ SHADE (d, s, i, r, g, b);
+ }
+ d += ds;
}
}
static void
shader_fade_and_move_vert_out (GstAudioVisualizer * scope,
- const guint8 * s, guint8 * d)
+ const GstVideoFrame * sframe, GstVideoFrame * dframe)
{
- guint i, j, k, bpf = scope->bpf;
- guint m = scope->width / 2;
+ guint i, j;
guint r = (scope->shade_amount >> 16) & 0xff;
guint g = (scope->shade_amount >> 8) & 0xff;
guint b = (scope->shade_amount >> 0) & 0xff;
-
- /* move left half to the left */
- for (j = 0, i = 4; i < bpf;) {
- for (k = 0; k < m; k++) {
- SHADE2 (d, s, j, i, r, g, b);
+ guint8 *s, *s1, *d, *d1;
+ gint ss, ds, width, height;
+
+ s = GST_VIDEO_FRAME_PLANE_DATA (sframe, 0);
+ ss = GST_VIDEO_FRAME_PLANE_STRIDE (sframe, 0);
+ d = GST_VIDEO_FRAME_PLANE_DATA (dframe, 0);
+ ds = GST_VIDEO_FRAME_PLANE_STRIDE (dframe, 0);
+
+ width = GST_VIDEO_FRAME_WIDTH (sframe);
+ height = GST_VIDEO_FRAME_HEIGHT (sframe);
+
+ for (j = 0; j < height; j++) {
+ /* move left half to the left */
+ s1 = s + 1;
+ for (i = 0; i < width / 2; i++) {
+ SHADE (d, s1, i, r, g, b);
}
- j += 4 * m;
- i += 4 * m;
- }
- /* move right half to the right */
- for (j = 4 * (m + 1), i = 4 * m; j < bpf;) {
- for (k = 0; k < m; k++) {
- SHADE2 (d, s, j, i, r, g, b);
+ /* move right half to the right */
+ d1 = d + 1;
+ for (; i < width - 1; i++) {
+ SHADE (d1, s, i, r, g, b);
}
- j += 4 * m;
- i += 4 * m;
+ s += ss;
+ d += ds;
}
}
static void
shader_fade_and_move_vert_in (GstAudioVisualizer * scope,
- const guint8 * s, guint8 * d)
+ const GstVideoFrame * sframe, GstVideoFrame * dframe)
{
- guint i, j, k, bpf = scope->bpf;
- guint m = scope->width / 2;
+ guint i, j;
guint r = (scope->shade_amount >> 16) & 0xff;
guint g = (scope->shade_amount >> 8) & 0xff;
guint b = (scope->shade_amount >> 0) & 0xff;
-
- /* move left half to the right */
- for (j = 4, i = 0; j < bpf;) {
- for (k = 0; k < m; k++) {
- SHADE2 (d, s, j, i, r, g, b);
+ guint8 *s, *s1, *d, *d1;
+ gint ss, ds, width, height;
+
+ s = GST_VIDEO_FRAME_PLANE_DATA (sframe, 0);
+ ss = GST_VIDEO_FRAME_PLANE_STRIDE (sframe, 0);
+ d = GST_VIDEO_FRAME_PLANE_DATA (dframe, 0);
+ ds = GST_VIDEO_FRAME_PLANE_STRIDE (dframe, 0);
+
+ width = GST_VIDEO_FRAME_WIDTH (sframe);
+ height = GST_VIDEO_FRAME_HEIGHT (sframe);
+
+ for (j = 0; j < height; j++) {
+ /* move left half to the right */
+ d1 = d + 1;
+ for (i = 0; i < width / 2; i++) {
+ SHADE (d1, s, i, r, g, b);
}
- j += 4 * m;
- i += 4 * m;
- }
- /* move right half to the left */
- for (j = 4 * m, i = 4 * (m + 1); i < bpf;) {
- for (k = 0; k < m; k++) {
- SHADE2 (d, s, j, i, r, g, b);
+ /* move right half to the left */
+ s1 = s + 1;
+ for (; i < width - 1; i++) {
+ SHADE (d, s1, i, r, g, b);
}
- j += 4 * m;
- i += 4 * m;
+ s += ss;
+ d += ds;
}
}
@@ -497,10 +584,7 @@ gst_audio_visualizer_init (GstAudioVisualizer * scope,
scope->shade_amount = DEFAULT_SHADE_AMOUNT;
/* reset the initial video state */
- scope->width = 320;
- scope->height = 200;
- scope->fps_n = 25; /* desired frame rate */
- scope->fps_d = 1;
+ gst_video_info_init (&scope->vinfo);
scope->frame_duration = GST_CLOCK_TIME_NONE;
/* reset the initial state */
@@ -562,9 +646,10 @@ gst_audio_visualizer_dispose (GObject * object)
gst_buffer_unref (scope->inbuf);
scope->inbuf = NULL;
}
- if (scope->pixelbuf) {
- g_free (scope->pixelbuf);
- scope->pixelbuf = NULL;
+ if (scope->tempbuf) {
+ gst_video_frame_unmap (&scope->tempframe);
+ gst_buffer_unref (scope->tempbuf);
+ scope->tempbuf = NULL;
}
if (scope->config_lock.p) {
g_mutex_clear (&scope->config_lock);
@@ -616,41 +701,36 @@ gst_audio_visualizer_src_setcaps (GstAudioVisualizer * scope, GstCaps * caps)
{
GstVideoInfo info;
GstAudioVisualizerClass *klass;
- GstStructure *structure;
gboolean res;
if (!gst_video_info_from_caps (&info, caps))
goto wrong_caps;
- structure = gst_caps_get_structure (caps, 0);
- if (!gst_structure_get_int (structure, "width", &scope->width) ||
- !gst_structure_get_int (structure, "height", &scope->height) ||
- !gst_structure_get_fraction (structure, "framerate", &scope->fps_n,
- &scope->fps_d))
- goto wrong_caps;
-
klass = GST_AUDIO_VISUALIZER_CLASS (G_OBJECT_GET_CLASS (scope));
scope->vinfo = info;
- scope->video_format = info.finfo->format;
scope->frame_duration = gst_util_uint64_scale_int (GST_SECOND,
- scope->fps_d, scope->fps_n);
+ GST_VIDEO_INFO_FPS_D (&info), GST_VIDEO_INFO_FPS_N (&info));
scope->spf = gst_util_uint64_scale_int (GST_AUDIO_INFO_RATE (&scope->ainfo),
- scope->fps_d, scope->fps_n);
+ GST_VIDEO_INFO_FPS_D (&info), GST_VIDEO_INFO_FPS_N (&info));
scope->req_spf = scope->spf;
- scope->bpf = scope->width * scope->height * 4;
-
- if (scope->pixelbuf)
- g_free (scope->pixelbuf);
- scope->pixelbuf = g_malloc0 (scope->bpf);
+ if (scope->tempbuf) {
+ gst_video_frame_unmap (&scope->tempframe);
+ gst_buffer_unref (scope->tempbuf);
+ }
+ scope->tempbuf = gst_buffer_new_wrapped (g_malloc0 (scope->vinfo.size),
+ scope->vinfo.size);
+ gst_video_frame_map (&scope->tempframe, &scope->vinfo, scope->tempbuf,
+ GST_MAP_READWRITE);
if (klass->setup)
res = klass->setup (scope);
GST_DEBUG_OBJECT (scope, "video: dimension %dx%d, framerate %d/%d",
- scope->width, scope->height, scope->fps_n, scope->fps_d);
+ GST_VIDEO_INFO_WIDTH (&info), GST_VIDEO_INFO_HEIGHT (&info),
+ GST_VIDEO_INFO_FPS_N (&info), GST_VIDEO_INFO_FPS_D (&info));
GST_DEBUG_OBJECT (scope, "blocks: spf %u, req_spf %u",
scope->spf, scope->req_spf);
@@ -698,10 +778,10 @@ gst_audio_visualizer_src_negotiate (GstAudioVisualizer * scope)
target = gst_caps_make_writable (target);
structure = gst_caps_get_structure (target, 0);
- gst_structure_fixate_field_nearest_int (structure, "width", scope->width);
- gst_structure_fixate_field_nearest_int (structure, "height", scope->height);
- gst_structure_fixate_field_nearest_fraction (structure, "framerate",
- scope->fps_n, scope->fps_d);
+ gst_structure_fixate_field_nearest_int (structure, "width", 320);
+ gst_structure_fixate_field_nearest_int (structure, "height", 200);
+ gst_structure_fixate_field_nearest_fraction (structure, "framerate", 25, 1);
+
target = gst_caps_fixate (target);
GST_DEBUG_OBJECT (scope, "final caps are %" GST_PTR_FORMAT, target);
@@ -722,16 +802,17 @@ gst_audio_visualizer_src_negotiate (GstAudioVisualizer * scope)
gst_query_parse_nth_allocation_pool (query, 0, &pool, &size, &min, &max);
} else {
pool = NULL;
- size = scope->bpf;
+ size = 0;
min = max = 0;
}
if (pool == NULL) {
/* we did not get a pool, make one ourselves then */
- pool = gst_buffer_pool_new ();
+ pool = gst_video_buffer_pool_new ();
}
config = gst_buffer_pool_get_config (pool);
+ gst_buffer_pool_config_add_option (config, GST_BUFFER_POOL_OPTION_VIDEO_META);
gst_buffer_pool_config_set_params (config, target, size, min, max);
gst_buffer_pool_set_config (pool, config);
@@ -782,15 +863,11 @@ gst_audio_visualizer_chain (GstPad * pad, GstObject * parent,
guint64 dist, ts;
guint avail, sbpf;
gpointer adata;
- gboolean (*render) (GstAudioVisualizer * scope, GstBuffer * audio,
- GstBuffer * video);
gint bps, channels, rate;
scope = GST_AUDIO_VISUALIZER (parent);
klass = GST_AUDIO_VISUALIZER_CLASS (G_OBJECT_GET_CLASS (scope));
- render = klass->render;
-
GST_LOG_OBJECT (scope, "chainfunc called");
/* resync on DISCONT */
@@ -829,7 +906,7 @@ gst_audio_visualizer_chain (GstPad * pad, GstObject * parent,
GST_LOG_OBJECT (scope, "avail: %u, bpf: %u", avail, sbpf);
while (avail >= sbpf) {
GstBuffer *outbuf;
- GstMapInfo map;
+ GstVideoFrame outframe;
/* get timestamp of the current adapter content */
ts = gst_adapter_prev_timestamp (scope->adapter, &dist);
@@ -871,40 +948,41 @@ gst_audio_visualizer_chain (GstPad * pad, GstObject * parent,
break;
/* sync controlled properties */
- gst_object_sync_values (GST_OBJECT (scope), ts);
+ if (GST_CLOCK_TIME_IS_VALID (ts))
+ gst_object_sync_values (GST_OBJECT (scope), ts);
GST_BUFFER_TIMESTAMP (outbuf) = ts;
GST_BUFFER_DURATION (outbuf) = scope->frame_duration;
- gst_buffer_map (outbuf, &map, GST_MAP_WRITE);
- if (scope->shader) {
- memcpy (map.data, scope->pixelbuf, scope->bpf);
- } else {
- memset (map.data, 0, scope->bpf);
- }
-
/* this can fail as the data size we need could have changed */
if (!(adata = (gpointer) gst_adapter_map (scope->adapter, sbpf)))
break;
+ gst_video_frame_map (&outframe, &scope->vinfo, outbuf, GST_MAP_READWRITE);
+
+ if (scope->shader) {
+ gst_video_frame_copy (&outframe, &scope->tempframe);
+ } else {
+ /* gst_video_frame_clear() or is output frame already cleared */
+ memset (outframe.data, 0, scope->vinfo.size);
+ }
+
gst_buffer_replace_all_memory (inbuf,
gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY, adata, sbpf, 0,
sbpf, NULL, NULL));
/* call class->render() vmethod */
- if (render) {
- if (!render (scope, inbuf, outbuf)) {
+ if (klass->render) {
+ if (!klass->render (scope, inbuf, &outframe)) {
ret = GST_FLOW_ERROR;
} else {
/* run various post processing (shading and geometri transformation */
if (scope->shader) {
- scope->shader (scope, map.data, scope->pixelbuf);
+ scope->shader (scope, &outframe, &scope->tempframe);
}
}
}
-
- gst_buffer_unmap (outbuf, &map);
- gst_buffer_resize (outbuf, 0, scope->bpf);
+ gst_video_frame_unmap (&outframe);
g_mutex_unlock (&scope->config_lock);
ret = gst_pad_push (scope->srcpad, outbuf);
diff --git a/gst/audiovisualizers/gstaudiovisualizer.h b/gst/audiovisualizers/gstaudiovisualizer.h
index efe3a8cc..e8500079 100644
--- a/gst/audiovisualizers/gstaudiovisualizer.h
+++ b/gst/audiovisualizers/gstaudiovisualizer.h
@@ -37,7 +37,7 @@ G_BEGIN_DECLS
typedef struct _GstAudioVisualizer GstAudioVisualizer;
typedef struct _GstAudioVisualizerClass GstAudioVisualizerClass;
-typedef void (*GstAudioVisualizerShaderFunc)(GstAudioVisualizer *scope, const guint8 *s, guint8 *d);
+typedef void (*GstAudioVisualizerShaderFunc)(GstAudioVisualizer *scope, const GstVideoFrame *s, GstVideoFrame *d);
/**
* GstAudioVisualizerShader:
@@ -77,7 +77,8 @@ struct _GstAudioVisualizer
GstBufferPool *pool;
GstAdapter *adapter;
GstBuffer *inbuf;
- guint8 *pixelbuf;
+ GstBuffer *tempbuf;
+ GstVideoFrame tempframe;
GstAudioVisualizerShader shader_type;
GstAudioVisualizerShaderFunc shader;
@@ -88,23 +89,18 @@ struct _GstAudioVisualizer
/* video state */
GstVideoInfo vinfo;
- GstVideoFormat video_format;
- gint fps_n, fps_d;
- gint width;
- gint height;
guint64 frame_duration;
- guint bpf; /* bytes per frame */
/* audio state */
GstAudioInfo ainfo;
/* configuration mutex */
GMutex config_lock;
-
+
/* QoS stuff *//* with LOCK */
gdouble proportion;
GstClockTime earliest_time;
-
+
GstSegment segment;
};
@@ -116,7 +112,7 @@ struct _GstAudioVisualizerClass
gboolean (*setup) (GstAudioVisualizer * scope);
/* virtual function for rendering a frame */
- gboolean (*render) (GstAudioVisualizer * scope, GstBuffer * audio, GstBuffer * video);
+ gboolean (*render) (GstAudioVisualizer * scope, GstBuffer * audio, GstVideoFrame * video);
};
GType gst_audio_visualizer_get_type (void);
diff --git a/gst/audiovisualizers/gstspacescope.c b/gst/audiovisualizers/gstspacescope.c
index 7bbfa5d3..f9b2a13c 100644
--- a/gst/audiovisualizers/gstspacescope.c
+++ b/gst/audiovisualizers/gstspacescope.c
@@ -114,7 +114,7 @@ static void render_color_lines (GstAudioVisualizer * base, guint32 * vdata,
gint16 * adata, guint num_samples);
static gboolean gst_space_scope_render (GstAudioVisualizer * scope,
- GstBuffer * audio, GstBuffer * video);
+ GstBuffer * audio, GstVideoFrame * video);
G_DEFINE_TYPE (GstSpaceScope, gst_space_scope, GST_TYPE_AUDIO_VISUALIZER);
@@ -207,8 +207,8 @@ render_dots (GstAudioVisualizer * base, guint32 * vdata, gint16 * adata,
{
guint i, s, x, y, ox, oy;
gfloat dx, dy;
- guint w = base->width;
- guint h = base->height;
+ guint w = GST_VIDEO_INFO_WIDTH (&base->vinfo);
+ guint h = GST_VIDEO_INFO_HEIGHT (&base->vinfo);
/* draw dots 1st channel x, 2nd channel y */
dx = w / 65536.0;
@@ -229,8 +229,8 @@ render_lines (GstAudioVisualizer * base, guint32 * vdata, gint16 * adata,
{
guint i, s, x, y, ox, oy;
gfloat dx, dy;
- guint w = base->width;
- guint h = base->height;
+ guint w = GST_VIDEO_INFO_WIDTH (&base->vinfo);
+ guint h = GST_VIDEO_INFO_HEIGHT (&base->vinfo);
gint x2, y2;
/* draw lines 1st channel x, 2nd channel y */
@@ -280,8 +280,8 @@ render_color_dots (GstAudioVisualizer * base, guint32 * vdata,
guint i, s;
gint x, y, ox, oy;
gfloat dx, dy;
- gint w = base->width, w1 = w - 2;
- gint h = base->height, h1 = h - 2;
+ gint w = GST_VIDEO_INFO_WIDTH (&base->vinfo), w1 = w - 2;
+ gint h = GST_VIDEO_INFO_HEIGHT (&base->vinfo), h1 = h - 2;
gdouble il, ir;
gdouble f1l_l = scope->f1l_l, f1l_m = scope->f1l_m, f1l_h = scope->f1l_h;
gdouble f1r_l = scope->f1r_l, f1r_m = scope->f1r_m, f1r_h = scope->f1r_h;
@@ -341,8 +341,8 @@ render_color_lines (GstAudioVisualizer * base, guint32 * vdata,
guint i, s;
gint x, y, ox, oy;
gfloat dx, dy;
- gint w = base->width, w1 = w - 2;
- gint h = base->height, h1 = h - 2;
+ gint w = GST_VIDEO_INFO_WIDTH (&base->vinfo), w1 = w - 2;
+ gint h = GST_VIDEO_INFO_HEIGHT (&base->vinfo), h1 = h - 2;
gdouble il, ir;
gdouble f1l_l = scope->f1l_l, f1l_m = scope->f1l_m, f1l_h = scope->f1l_h;
gdouble f1r_l = scope->f1r_l, f1r_m = scope->f1r_m, f1r_h = scope->f1r_h;
@@ -425,20 +425,18 @@ render_color_lines (GstAudioVisualizer * base, guint32 * vdata,
static gboolean
gst_space_scope_render (GstAudioVisualizer * base, GstBuffer * audio,
- GstBuffer * video)
+ GstVideoFrame * video)
{
GstSpaceScope *scope = GST_SPACE_SCOPE (base);
- GstMapInfo vmap, amap;
+ GstMapInfo amap;
guint num_samples;
gst_buffer_map (audio, &amap, GST_MAP_READ);
- gst_buffer_map (video, &vmap, GST_MAP_WRITE);
num_samples =
amap.size / (GST_AUDIO_INFO_CHANNELS (&base->ainfo) * sizeof (gint16));
- scope->process (base, (guint32 *) vmap.data, (gint16 *) amap.data,
- num_samples);
- gst_buffer_unmap (video, &vmap);
+ scope->process (base, (guint32 *) GST_VIDEO_FRAME_PLANE_DATA (video, 0),
+ (gint16 *) amap.data, num_samples);
gst_buffer_unmap (audio, &amap);
return TRUE;
}
diff --git a/gst/audiovisualizers/gstspectrascope.c b/gst/audiovisualizers/gstspectrascope.c
index 430cd9e3..b96cb1a0 100644
--- a/gst/audiovisualizers/gstspectrascope.c
+++ b/gst/audiovisualizers/gstspectrascope.c
@@ -68,7 +68,7 @@ static void gst_spectra_scope_finalize (GObject * object);
static gboolean gst_spectra_scope_setup (GstAudioVisualizer * scope);
static gboolean gst_spectra_scope_render (GstAudioVisualizer * scope,
- GstBuffer * audio, GstBuffer * video);
+ GstBuffer * audio, GstVideoFrame * video);
G_DEFINE_TYPE (GstSpectraScope, gst_spectra_scope, GST_TYPE_AUDIO_VISUALIZER);
@@ -122,7 +122,7 @@ static gboolean
gst_spectra_scope_setup (GstAudioVisualizer * bscope)
{
GstSpectraScope *scope = GST_SPECTRA_SCOPE (bscope);
- guint num_freq = bscope->width + 1;
+ guint num_freq = GST_VIDEO_INFO_WIDTH (&bscope->vinfo) + 1;
if (scope->fft_ctx)
gst_fft_s16_free (scope->fft_ctx);
@@ -162,22 +162,21 @@ add_pixel (guint32 * _p, guint32 _c)
static gboolean
gst_spectra_scope_render (GstAudioVisualizer * bscope, GstBuffer * audio,
- GstBuffer * video)
+ GstVideoFrame * video)
{
GstSpectraScope *scope = GST_SPECTRA_SCOPE (bscope);
gint16 *mono_adata;
GstFFTS16Complex *fdata = scope->freq_data;
- guint x, y, off;
- guint l, h = bscope->height - 1;
+ guint x, y, off, l;
+ guint w = GST_VIDEO_INFO_WIDTH (&bscope->vinfo);
+ guint h = GST_VIDEO_INFO_HEIGHT (&bscope->vinfo) - 1;
gfloat fr, fi;
- guint w = bscope->width;
- GstMapInfo amap, vmap;
+ GstMapInfo amap;
guint32 *vdata;
gint channels;
gst_buffer_map (audio, &amap, GST_MAP_READ);
- gst_buffer_map (video, &vmap, GST_MAP_WRITE);
- vdata = (guint32 *) vmap.data;
+ vdata = (guint32 *) GST_VIDEO_FRAME_PLANE_DATA (video, 0);
channels = GST_AUDIO_INFO_CHANNELS (&bscope->ainfo);
@@ -204,7 +203,7 @@ gst_spectra_scope_render (GstAudioVisualizer * bscope, GstBuffer * audio,
g_free (mono_adata);
/* draw lines */
- for (x = 0; x < bscope->width; x++) {
+ for (x = 0; x < w; x++) {
/* figure out the range so that we don't need to clip,
* or even better do a log mapping? */
fr = (gfloat) fdata[1 + x].r / 512.0;
@@ -222,7 +221,6 @@ gst_spectra_scope_render (GstAudioVisualizer * bscope, GstBuffer * audio,
/* ensure bottom line is full bright (especially in move-up mode) */
add_pixel (&vdata[off], 0x007F7F7F);
}
- gst_buffer_unmap (video, &vmap);
gst_buffer_unmap (audio, &amap);
return TRUE;
}
diff --git a/gst/audiovisualizers/gstsynaescope.c b/gst/audiovisualizers/gstsynaescope.c
index 9308c573..97ac8816 100644
--- a/gst/audiovisualizers/gstsynaescope.c
+++ b/gst/audiovisualizers/gstsynaescope.c
@@ -67,7 +67,7 @@ static void gst_synae_scope_finalize (GObject * object);
static gboolean gst_synae_scope_setup (GstAudioVisualizer * scope);
static gboolean gst_synae_scope_render (GstAudioVisualizer * scope,
- GstBuffer * audio, GstBuffer * video);
+ GstBuffer * audio, GstVideoFrame * video);
G_DEFINE_TYPE (GstSynaeScope, gst_synae_scope, GST_TYPE_AUDIO_VISUALIZER);
@@ -152,7 +152,7 @@ static gboolean
gst_synae_scope_setup (GstAudioVisualizer * bscope)
{
GstSynaeScope *scope = GST_SYNAE_SCOPE (bscope);
- guint num_freq = bscope->height + 1;
+ guint num_freq = GST_VIDEO_INFO_HEIGHT (&bscope->vinfo) + 1;
if (scope->fft_ctx)
gst_fft_s16_free (scope->fft_ctx);
@@ -201,10 +201,10 @@ add_pixel (guint32 * _p, guint32 _c)
static gboolean
gst_synae_scope_render (GstAudioVisualizer * bscope, GstBuffer * audio,
- GstBuffer * video)
+ GstVideoFrame * video)
{
GstSynaeScope *scope = GST_SYNAE_SCOPE (bscope);
- GstMapInfo amap, vmap;
+ GstMapInfo amap;
guint32 *vdata;
gint16 *adata;
gint16 *adata_l = scope->adata_l;
@@ -213,8 +213,8 @@ gst_synae_scope_render (GstAudioVisualizer * bscope, GstBuffer * audio,
GstFFTS16Complex *fdata_r = scope->freq_data_r;
gint x, y;
guint off;
- guint w = bscope->width;
- guint h = bscope->height;
+ guint w = GST_VIDEO_INFO_WIDTH (&bscope->vinfo);
+ guint h = GST_VIDEO_INFO_HEIGHT (&bscope->vinfo);
guint32 *colors = scope->colors, c;
guint *shade = scope->shade;
//guint w2 = w /2;
@@ -227,10 +227,9 @@ gst_synae_scope_render (GstAudioVisualizer * bscope, GstBuffer * audio,
gdouble frl, fil, frr, fir;
const guint sl = 30;
- gst_buffer_map (video, &vmap, GST_MAP_WRITE);
gst_buffer_map (audio, &amap, GST_MAP_READ);
- vdata = (guint32 *) vmap.data;
+ vdata = (guint32 *) GST_VIDEO_FRAME_PLANE_DATA (video, 0);
adata = (gint16 *) amap.data;
num_samples = amap.size / (ch * sizeof (gint16));
@@ -303,7 +302,6 @@ gst_synae_scope_render (GstAudioVisualizer * bscope, GstBuffer * audio,
}
}
}
- gst_buffer_unmap (video, &vmap);
gst_buffer_unmap (audio, &amap);
return TRUE;
diff --git a/gst/audiovisualizers/gstwavescope.c b/gst/audiovisualizers/gstwavescope.c
index 72a0814e..e37d9285 100644
--- a/gst/audiovisualizers/gstwavescope.c
+++ b/gst/audiovisualizers/gstwavescope.c
@@ -116,7 +116,7 @@ static void render_color_lines (GstAudioVisualizer * base, guint32 * vdata,
static gboolean gst_wave_scope_setup (GstAudioVisualizer * scope);
static gboolean gst_wave_scope_render (GstAudioVisualizer * base,
- GstBuffer * audio, GstBuffer * video);
+ GstBuffer * audio, GstVideoFrame * video);
#define gst_wave_scope_parent_class parent_class
G_DEFINE_TYPE (GstWaveScope, gst_wave_scope, GST_TYPE_AUDIO_VISUALIZER);
@@ -240,8 +240,8 @@ render_dots (GstAudioVisualizer * base, guint32 * vdata, gint16 * adata,
gint channels = GST_AUDIO_INFO_CHANNELS (&base->ainfo);
guint i, c, s, x, y, oy;
gfloat dx, dy;
- guint w = base->width;
- guint h = base->height;
+ guint w = GST_VIDEO_INFO_WIDTH (&base->vinfo);
+ guint h = GST_VIDEO_INFO_HEIGHT (&base->vinfo);
/* draw dots */
dx = (gfloat) w / (gfloat) num_samples;
@@ -265,8 +265,8 @@ render_lines (GstAudioVisualizer * base, guint32 * vdata, gint16 * adata,
gint channels = GST_AUDIO_INFO_CHANNELS (&base->ainfo);
guint i, c, s, x, y, oy;
gfloat dx, dy;
- guint w = base->width;
- guint h = base->height;
+ guint w = GST_VIDEO_INFO_WIDTH (&base->vinfo);
+ guint h = GST_VIDEO_INFO_HEIGHT (&base->vinfo);
gint x2, y2;
/* draw lines */
@@ -310,8 +310,8 @@ render_color_dots (GstAudioVisualizer * base, guint32 * vdata,
gint channels = GST_AUDIO_INFO_CHANNELS (&base->ainfo);
guint i, c, s, x, y, oy;
gfloat dx, dy;
- guint w = base->width;
- guint h = base->height, h1 = h - 2;
+ guint w = GST_VIDEO_INFO_WIDTH (&base->vinfo);
+ guint h = GST_VIDEO_INFO_HEIGHT (&base->vinfo), h1 = h - 2;
gdouble *flt = scope->flt;
/* draw dots */
@@ -350,8 +350,8 @@ render_color_lines (GstAudioVisualizer * base, guint32 * vdata,
gint channels = GST_AUDIO_INFO_CHANNELS (&base->ainfo);
guint i, c, s, x, y, oy;
gfloat dx, dy;
- guint w = base->width;
- guint h = base->height, h1 = h - 2;
+ guint w = GST_VIDEO_INFO_WIDTH (&base->vinfo);
+ guint h = GST_VIDEO_INFO_HEIGHT (&base->vinfo), h1 = h - 2;
gdouble *flt = scope->flt;
gint x2, y2, y3, y4;
@@ -403,21 +403,19 @@ render_color_lines (GstAudioVisualizer * base, guint32 * vdata,
static gboolean
gst_wave_scope_render (GstAudioVisualizer * base, GstBuffer * audio,
- GstBuffer * video)
+ GstVideoFrame * video)
{
GstWaveScope *scope = GST_WAVE_SCOPE (base);
- GstMapInfo amap, vmap;
+ GstMapInfo amap;
guint num_samples;
gint channels = GST_AUDIO_INFO_CHANNELS (&base->ainfo);
gst_buffer_map (audio, &amap, GST_MAP_READ);
- gst_buffer_map (video, &vmap, GST_MAP_WRITE);
num_samples = amap.size / (channels * sizeof (gint16));
- scope->process (base, (guint32 *) vmap.data, (gint16 *) amap.data,
- num_samples);
+ scope->process (base, (guint32 *) GST_VIDEO_FRAME_PLANE_DATA (video, 0),
+ (gint16 *) amap.data, num_samples);
- gst_buffer_unmap (video, &vmap);
gst_buffer_unmap (audio, &amap);
return TRUE;
diff --git a/gst/autoconvert/Makefile.in b/gst/autoconvert/Makefile.in
index ba751d3b..2c9555c2 100644
--- a/gst/autoconvert/Makefile.in
+++ b/gst/autoconvert/Makefile.in
@@ -343,6 +343,8 @@ 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@
@@ -350,6 +352,8 @@ 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@
@@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -392,6 +395,10 @@ 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@
@@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/autoconvert/gstautoconvert.c b/gst/autoconvert/gstautoconvert.c
index 9669e820..5b11042a 100644
--- a/gst/autoconvert/gstautoconvert.c
+++ b/gst/autoconvert/gstautoconvert.c
@@ -1039,28 +1039,37 @@ gst_auto_convert_sink_query (GstPad * pad, GstObject * parent, GstQuery * query)
gst_object_unref (sub_sinkpad);
gst_object_unref (subelement);
- } else {
- if (GST_QUERY_TYPE (query) == GST_QUERY_ACCEPT_CAPS) {
- GstCaps *caps;
- GstCaps *accept_caps;
-
- gst_query_parse_accept_caps (query, &accept_caps);
- caps = gst_auto_convert_getcaps (autoconvert, accept_caps, GST_PAD_SINK);
- gst_query_set_accept_caps_result (query,
- gst_caps_can_intersect (caps, accept_caps));
- gst_caps_unref (caps);
+ if (ret && GST_QUERY_TYPE (query) == GST_QUERY_ACCEPT_CAPS) {
+ gboolean res;
+ gst_query_parse_accept_caps_result (query, &res);
- return TRUE;
+ if (!res)
+ goto ignore_acceptcaps_failure;
}
+ return ret;
+ }
+
+ignore_acceptcaps_failure:
+
+ if (GST_QUERY_TYPE (query) == GST_QUERY_ACCEPT_CAPS) {
+ GstCaps *caps;
+ GstCaps *accept_caps;
+
+ gst_query_parse_accept_caps (query, &accept_caps);
+
+ caps = gst_auto_convert_getcaps (autoconvert, accept_caps, GST_PAD_SINK);
+ gst_query_set_accept_caps_result (query,
+ gst_caps_can_intersect (caps, accept_caps));
+ gst_caps_unref (caps);
- GST_WARNING_OBJECT (autoconvert, "Got query %s while no element was"
- " selected, letting through",
- gst_query_type_get_name (GST_QUERY_TYPE (query)));
- ret = gst_pad_peer_query (autoconvert->srcpad, query);
+ return TRUE;
}
- return ret;
+ GST_WARNING_OBJECT (autoconvert, "Got query %s while no element was"
+ " selected, letting through",
+ gst_query_type_get_name (GST_QUERY_TYPE (query)));
+ return gst_pad_peer_query (autoconvert->srcpad, query);
}
/**
@@ -1297,12 +1306,13 @@ gst_auto_convert_internal_src_event (GstPad * pad, GstObject * parent,
gboolean drop = FALSE;
GST_AUTOCONVERT_LOCK (autoconvert);
- if (autoconvert->current_internal_sinkpad != pad) {
+ if (autoconvert->current_internal_srcpad != pad) {
drop = TRUE;
}
GST_AUTOCONVERT_UNLOCK (autoconvert);
if (drop) {
+ GST_DEBUG_OBJECT (autoconvert, "Dropping event %" GST_PTR_FORMAT, event);
gst_event_unref (event);
return TRUE;
}
@@ -1318,5 +1328,15 @@ gst_auto_convert_internal_src_query (GstPad * pad, GstObject * parent,
GST_AUTO_CONVERT (g_object_get_qdata (G_OBJECT (pad),
parent_quark));
+ if (GST_QUERY_TYPE (query) == GST_QUERY_CAPS) {
+ GstCaps *caps;
+
+ caps = gst_caps_new_any ();
+ gst_query_set_caps_result (query, caps);
+ gst_caps_unref (caps);
+
+ return TRUE;
+ }
+
return gst_pad_peer_query (autoconvert->sinkpad, query);
}
diff --git a/gst/bayer/Makefile.in b/gst/bayer/Makefile.in
index bdcef31f..2a310c87 100644
--- a/gst/bayer/Makefile.in
+++ b/gst/bayer/Makefile.in
@@ -367,6 +367,8 @@ 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@
@@ -374,6 +376,8 @@ 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@
@@ -388,7 +392,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -416,6 +419,10 @@ 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@
@@ -542,6 +549,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/camerabin2/Makefile.in b/gst/camerabin2/Makefile.in
index 11713827..48771a3c 100644
--- a/gst/camerabin2/Makefile.in
+++ b/gst/camerabin2/Makefile.in
@@ -348,6 +348,8 @@ 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@
@@ -355,6 +357,8 @@ 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@
@@ -369,7 +373,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -397,6 +400,10 @@ 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@
@@ -523,6 +530,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/camerabin2/gstcamerabin2.c b/gst/camerabin2/gstcamerabin2.c
index 27c00c04..f7c893b6 100644
--- a/gst/camerabin2/gstcamerabin2.c
+++ b/gst/camerabin2/gstcamerabin2.c
@@ -390,20 +390,7 @@ gst_camera_bin_start_capture (GstCameraBin2 * camerabin)
if (camerabin->location)
location = g_strdup_printf (camerabin->location, capture_index);
- if (camerabin->mode == MODE_VIDEO) {
- if (camerabin->audio_src) {
- GstClock *clock = gst_pipeline_get_clock (GST_PIPELINE_CAST (camerabin));
-
- gst_element_set_state (camerabin->audio_src, GST_STATE_PAUSED);
-
- gst_element_set_base_time (camerabin->audio_src,
- gst_element_get_base_time (GST_ELEMENT_CAST (camerabin)));
- if (clock) {
- gst_element_set_clock (camerabin->audio_src, clock);
- gst_object_unref (clock);
- }
- }
- } else {
+ if (camerabin->mode == MODE_IMAGE) {
/* store the next capture buffer filename */
g_mutex_lock (&camerabin->image_capture_mutex);
camerabin->image_location_list =
@@ -1191,13 +1178,11 @@ encodebin_element_added (GstElement * encodebin, GstElement * new_element,
}
}
- /* TODO porting
- if (gst_element_implements_interface (new_element, GST_TYPE_TAG_SETTER)) {
- GstTagSetter *tagsetter = GST_TAG_SETTER (new_element);
+ if (GST_IS_TAG_SETTER (new_element)) {
+ GstTagSetter *tagsetter = GST_TAG_SETTER (new_element);
- gst_tag_setter_set_tag_merge_mode (tagsetter, GST_TAG_MERGE_REPLACE);
- }
- */
+ gst_tag_setter_set_tag_merge_mode (tagsetter, GST_TAG_MERGE_REPLACE);
+ }
}
#define VIDEO_PAD 1
@@ -1261,7 +1246,12 @@ encodebin_find_pad (GstCameraBin2 * camera, GstElement * encodebin,
klass = GST_ELEMENT_GET_CLASS (encodebin);
tmpl = gst_element_class_get_pad_template (klass, pad_type == VIDEO_PAD ?
- "video_%d" : "audio_%d");
+ "video_%u" : "audio_%u");
+
+ if (!tmpl) {
+ GST_DEBUG_OBJECT (camera, "No templates found, can't request pad");
+ return NULL;
+ }
pad = gst_element_request_pad (encodebin, tmpl, NULL, NULL);
GST_DEBUG_OBJECT (camera, "Got pad: %s", pad ? GST_PAD_NAME (pad) : "null");
@@ -1444,9 +1434,9 @@ gst_camera_bin_audio_src_data_probe (GstPad * pad, GstPadProbeInfo * info,
GstCameraBin2 *camera = data;
gboolean ret = GST_PAD_PROBE_OK;
- if (GST_IS_BUFFER (data)) {
+ if (GST_IS_BUFFER (info->data)) {
if (G_UNLIKELY (camera->audio_send_newseg)) {
- GstBuffer *buf = GST_BUFFER_CAST (data);
+ GstBuffer *buf = GST_BUFFER_CAST (info->data);
GstClockTime ts = GST_BUFFER_TIMESTAMP (buf);
GstPad *peer;
GstSegment segment;
diff --git a/gst/camerabin2/gstwrappercamerabinsrc.c b/gst/camerabin2/gstwrappercamerabinsrc.c
index c263296b..042a23e1 100644
--- a/gst/camerabin2/gstwrappercamerabinsrc.c
+++ b/gst/camerabin2/gstwrappercamerabinsrc.c
@@ -280,9 +280,20 @@ gst_wrapper_camera_bin_src_vidsrc_probe (GstPad * pad, GstPadProbeInfo * info,
ret = GST_PAD_PROBE_OK;
} else if (self->video_rec_status == GST_VIDEO_RECORDING_STATUS_FINISHING) {
+ GstPad *peer;
+
/* send eos */
GST_DEBUG_OBJECT (self, "Finishing video recording, pushing eos");
- gst_pad_push_event (pad, gst_event_new_eos ());
+
+ peer = gst_pad_get_peer (self->vidsrc);
+
+ if (peer) {
+ /* send to the peer as we don't want our pads with eos flag */
+ gst_pad_send_event (peer, gst_event_new_eos ());
+ gst_object_unref (peer);
+ } else {
+ GST_WARNING_OBJECT (camerasrc, "No peer pad for vidsrc");
+ }
self->video_rec_status = GST_VIDEO_RECORDING_STATUS_DONE;
gst_base_camera_src_finish_capture (camerasrc);
} else {
@@ -1055,10 +1066,6 @@ gst_wrapper_camera_bin_src_start_capture (GstBaseCameraSrc * camerasrc)
g_mutex_lock (&camerasrc->capturing_mutex);
gst_caps_unref (caps);
gst_caps_unref (anycaps);
-
- /* We caught this event in the src pad event handler and now we want to
- * actually push it upstream */
- gst_pad_send_event (src->outsel_vidpad, gst_event_new_reconfigure ());
}
if (src->video_rec_status == GST_VIDEO_RECORDING_STATUS_DONE) {
src->video_rec_status = GST_VIDEO_RECORDING_STATUS_STARTING;
diff --git a/gst/cdxaparse/Makefile.in b/gst/cdxaparse/Makefile.in
index 4e3d614e..b73028a7 100644
--- a/gst/cdxaparse/Makefile.in
+++ b/gst/cdxaparse/Makefile.in
@@ -342,6 +342,8 @@ 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@
@@ -349,6 +351,8 @@ 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@
@@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -391,6 +394,10 @@ 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@
@@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/coloreffects/Makefile.in b/gst/coloreffects/Makefile.in
index 3558124c..e46c71bd 100644
--- a/gst/coloreffects/Makefile.in
+++ b/gst/coloreffects/Makefile.in
@@ -343,6 +343,8 @@ 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@
@@ -350,6 +352,8 @@ 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@
@@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -392,6 +395,10 @@ 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@
@@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/dataurisrc/Makefile.in b/gst/dataurisrc/Makefile.in
index 5d1f5447..19b7b8e6 100644
--- a/gst/dataurisrc/Makefile.in
+++ b/gst/dataurisrc/Makefile.in
@@ -338,6 +338,8 @@ 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@
@@ -345,6 +347,8 @@ 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@
@@ -359,7 +363,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -387,6 +390,10 @@ 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@
@@ -513,6 +520,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/dccp/Makefile.in b/gst/dccp/Makefile.in
index f838cfff..ce933a2e 100644
--- a/gst/dccp/Makefile.in
+++ b/gst/dccp/Makefile.in
@@ -348,6 +348,8 @@ 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@
@@ -355,6 +357,8 @@ 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@
@@ -369,7 +373,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -397,6 +400,10 @@ 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@
@@ -523,6 +530,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/debugutils/Makefile.in b/gst/debugutils/Makefile.in
index a8f1a762..4439f1ed 100644
--- a/gst/debugutils/Makefile.in
+++ b/gst/debugutils/Makefile.in
@@ -361,6 +361,8 @@ 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@
@@ -368,6 +370,8 @@ 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@
@@ -382,7 +386,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -410,6 +413,10 @@ 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@
@@ -536,6 +543,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/debugutils/gstcompare.c b/gst/debugutils/gstcompare.c
index f0a1b884..65a19351 100644
--- a/gst/debugutils/gstcompare.c
+++ b/gst/debugutils/gstcompare.c
@@ -198,9 +198,9 @@ gst_compare_init (GstCompare * comp)
gst_pad_set_query_function (comp->checkpad, gst_compare_query);
gst_element_add_pad (GST_ELEMENT (comp), comp->checkpad);
- gst_collect_pads_add_pad_full (comp->cpads, comp->sinkpad,
+ gst_collect_pads_add_pad (comp->cpads, comp->sinkpad,
sizeof (GstCollectData), NULL, TRUE);
- gst_collect_pads_add_pad_full (comp->cpads, comp->checkpad,
+ gst_collect_pads_add_pad (comp->cpads, comp->checkpad,
sizeof (GstCollectData), NULL, TRUE);
comp->srcpad = gst_pad_new_from_static_template (&src_factory, "src");
diff --git a/gst/dtmf/Makefile.in b/gst/dtmf/Makefile.in
index 4d680dfe..4d070e24 100644
--- a/gst/dtmf/Makefile.in
+++ b/gst/dtmf/Makefile.in
@@ -345,6 +345,8 @@ 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@
@@ -352,6 +354,8 @@ 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@
@@ -366,7 +370,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -394,6 +397,10 @@ 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@
@@ -520,6 +527,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/dtmf/gstdtmfsrc.c b/gst/dtmf/gstdtmfsrc.c
index 811cc03f..2b3310e6 100644
--- a/gst/dtmf/gstdtmfsrc.c
+++ b/gst/dtmf/gstdtmfsrc.c
@@ -562,7 +562,7 @@ gst_dtmf_src_generate_tone (GstDTMFSrcEvent * event, DTMF_KEY key,
double i = 0;
double amplitude, f1, f2;
double volume_factor;
- static GstAllocationParams params = { 0, 0, 0, 1, };
+ static GstAllocationParams params = { 0, 1, 0, 0, };
/* Create a buffer for the tone */
tone_size = ((duration / 1000) * sample_rate * SAMPLE_SIZE * CHANNELS) / 8;
diff --git a/gst/dtmf/gstrtpdtmfdepay.c b/gst/dtmf/gstrtpdtmfdepay.c
index 1bea4655..63494853 100644
--- a/gst/dtmf/gstrtpdtmfdepay.c
+++ b/gst/dtmf/gstrtpdtmfdepay.c
@@ -342,7 +342,7 @@ gst_dtmf_src_generate_tone (GstRtpDTMFDepay * rtpdtmfdepay,
guint32 clock_rate = 8000 /* default */ ;
GstRTPBaseDepayload *depayload = GST_RTP_BASE_DEPAYLOAD (rtpdtmfdepay);
gint volume;
- static GstAllocationParams params = { 0, 0, 0, 1, };
+ static GstAllocationParams params = { 0, 1, 0, 0, };
clock_rate = depayload->clock_rate;
diff --git a/gst/dvbsuboverlay/Makefile.in b/gst/dvbsuboverlay/Makefile.in
index 3ae4f9f8..8b5f4cab 100644
--- a/gst/dvbsuboverlay/Makefile.in
+++ b/gst/dvbsuboverlay/Makefile.in
@@ -342,6 +342,8 @@ 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@
@@ -349,6 +351,8 @@ 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@
@@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -391,6 +394,10 @@ 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@
@@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/dvbsuboverlay/gstdvbsuboverlay.c b/gst/dvbsuboverlay/gstdvbsuboverlay.c
index 70da0ec2..5a63a7a9 100644
--- a/gst/dvbsuboverlay/gstdvbsuboverlay.c
+++ b/gst/dvbsuboverlay/gstdvbsuboverlay.c
@@ -99,7 +99,8 @@ static GstStateChangeReturn gst_dvbsub_overlay_change_state (GstElement *
#define gst_dvbsub_overlay_parent_class parent_class
G_DEFINE_TYPE (GstDVBSubOverlay, gst_dvbsub_overlay, GST_TYPE_ELEMENT);
-static GstCaps *gst_dvbsub_overlay_getcaps (GstPad * pad, GstCaps * filter);
+static GstCaps *gst_dvbsub_overlay_getcaps (GstDVBSubOverlay * render,
+ GstPad * pad, GstCaps * filter);
static GstFlowReturn gst_dvbsub_overlay_chain_video (GstPad * pad,
GstObject * parent, GstBuffer * buf);
@@ -368,14 +369,14 @@ gst_dvbsub_overlay_query_src (GstPad * pad, GstObject * parent,
GstCaps *filter, *caps;
gst_query_parse_caps (query, &filter);
- caps = gst_dvbsub_overlay_getcaps (pad, filter);
+ caps = gst_dvbsub_overlay_getcaps (render, pad, filter);
gst_query_set_caps_result (query, caps);
gst_caps_unref (caps);
ret = TRUE;
break;
}
default:
- ret = gst_pad_peer_query (render->video_sinkpad, query);
+ ret = gst_pad_query_default (pad, parent, query);
break;
}
@@ -424,9 +425,9 @@ gst_dvbsub_overlay_event_src (GstPad * pad, GstObject * parent,
}
static GstCaps *
-gst_dvbsub_overlay_getcaps (GstPad * pad, GstCaps * filter)
+gst_dvbsub_overlay_getcaps (GstDVBSubOverlay * render, GstPad * pad,
+ GstCaps * filter)
{
- GstDVBSubOverlay *render = GST_DVBSUB_OVERLAY (gst_pad_get_parent (pad));
GstPad *otherpad;
GstCaps *caps, *templ;
@@ -453,8 +454,6 @@ gst_dvbsub_overlay_getcaps (GstPad * pad, GstCaps * filter)
caps = templ;
}
- gst_object_unref (render);
-
return caps;
}
@@ -725,25 +724,9 @@ gst_dvbsub_overlay_subs_to_comp (GstDVBSubOverlay * overlay,
for (k = 0; k < h; k++) {
for (l = 0; l < w; l++) {
guint32 ayuv;
- gint a, y, u, v, r, g, b;
- /* convert ayuv to argb */
ayuv = palette[*in_data];
- a = ayuv >> 24;
- y = (ayuv >> 16) & 0xff;
- u = (ayuv >> 8) & 0xff;
- v = (ayuv & 0xff);
-
- r = (298 * y + 459 * v - 63514) >> 8;
- g = (298 * y - 55 * u - 136 * v + 19681) >> 8;
- b = (298 * y + 541 * u - 73988) >> 8;
-
- r = CLAMP (r, 0, 255);
- g = CLAMP (g, 0, 255);
- b = CLAMP (b, 0, 255);
-
- *data = ((a << 24) | (r << 16) | (g << 8) | b);
-
+ GST_WRITE_UINT32_BE (data, ayuv);
in_data++;
data++;
}
@@ -764,8 +747,8 @@ gst_dvbsub_overlay_subs_to_comp (GstDVBSubOverlay * overlay,
rw, rh, rx, ry);
gst_buffer_add_video_meta (buf, GST_VIDEO_FRAME_FLAG_NONE,
- GST_VIDEO_OVERLAY_COMPOSITION_FORMAT_RGB, w, h);
- rect = gst_video_overlay_rectangle_new_argb (buf, rx, ry, rw, rh, 0);
+ GST_VIDEO_OVERLAY_COMPOSITION_FORMAT_YUV, w, h);
+ rect = gst_video_overlay_rectangle_new_raw (buf, rx, ry, rw, rh, 0);
g_assert (rect);
if (comp) {
gst_video_overlay_composition_add_rectangle (comp, rect);
@@ -937,6 +920,7 @@ static gboolean
gst_dvbsub_overlay_query_video (GstPad * pad, GstObject * parent,
GstQuery * query)
{
+ GstDVBSubOverlay *render = (GstDVBSubOverlay *) parent;
gboolean ret;
switch (GST_QUERY_TYPE (query)) {
@@ -945,7 +929,7 @@ gst_dvbsub_overlay_query_video (GstPad * pad, GstObject * parent,
GstCaps *filter, *caps;
gst_query_parse_caps (query, &filter);
- caps = gst_dvbsub_overlay_getcaps (pad, filter);
+ caps = gst_dvbsub_overlay_getcaps (render, pad, filter);
gst_query_set_caps_result (query, caps);
gst_caps_unref (caps);
ret = TRUE;
diff --git a/gst/dvdspu/Makefile.in b/gst/dvdspu/Makefile.in
index 4b35be0a..4fbaece1 100644
--- a/gst/dvdspu/Makefile.in
+++ b/gst/dvdspu/Makefile.in
@@ -345,6 +345,8 @@ 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@
@@ -352,6 +354,8 @@ 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@
@@ -366,7 +370,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -394,6 +397,10 @@ 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@
@@ -520,6 +527,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/dvdspu/gstdvdspu.c b/gst/dvdspu/gstdvdspu.c
index 2b253d3d..41d6169c 100644
--- a/gst/dvdspu/gstdvdspu.c
+++ b/gst/dvdspu/gstdvdspu.c
@@ -78,7 +78,7 @@ static GstStaticPadTemplate subpic_sink_factory =
GST_STATIC_PAD_TEMPLATE ("subpicture",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("video/x-dvd-subpicture; subpicture/x-pgs")
+ GST_STATIC_CAPS ("subpicture/x-dvd; subpicture/x-pgs")
);
static const guint32 default_clut[16] = {
@@ -380,6 +380,27 @@ gst_dvd_spu_video_proxy_getcaps (GstPad * pad, GstCaps * filter)
return caps;
}
+/* With SPU lock held */
+static void
+update_video_to_position (GstDVDSpu * dvdspu, GstClockTime new_pos)
+{
+ SpuState *state = &dvdspu->spu_state;
+#if 0
+ g_print ("Segment update for video. Advancing from %" GST_TIME_FORMAT
+ " to %" GST_TIME_FORMAT "\n",
+ GST_TIME_ARGS (dvdspu->video_seg.position), GST_TIME_ARGS (start));
+#endif
+ while (dvdspu->video_seg.position < new_pos &&
+ !(state->flags & SPU_STATE_STILL_FRAME)) {
+ DVD_SPU_UNLOCK (dvdspu);
+ if (dvdspu_handle_vid_buffer (dvdspu, NULL) != GST_FLOW_OK) {
+ DVD_SPU_LOCK (dvdspu);
+ break;
+ }
+ DVD_SPU_LOCK (dvdspu);
+ }
+}
+
static gboolean
gst_dvd_spu_video_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
@@ -456,20 +477,7 @@ gst_dvd_spu_video_event (GstPad * pad, GstObject * parent, GstEvent * event)
DVD_SPU_LOCK (dvdspu);
if (seg.start > dvdspu->video_seg.position) {
-#if 0
- g_print ("Segment update for video. Advancing from %" GST_TIME_FORMAT
- " to %" GST_TIME_FORMAT "\n",
- GST_TIME_ARGS (dvdspu->video_seg.position), GST_TIME_ARGS (start));
-#endif
- while (dvdspu->video_seg.position < seg.start &&
- !(state->flags & SPU_STATE_STILL_FRAME)) {
- DVD_SPU_UNLOCK (dvdspu);
- if (dvdspu_handle_vid_buffer (dvdspu, NULL) != GST_FLOW_OK) {
- DVD_SPU_LOCK (dvdspu);
- break;
- }
- DVD_SPU_LOCK (dvdspu);
- }
+ update_video_to_position (dvdspu, seg.start);
}
dvdspu->video_seg = seg;
@@ -478,6 +486,22 @@ gst_dvd_spu_video_event (GstPad * pad, GstObject * parent, GstEvent * event)
res = gst_pad_event_default (pad, parent, event);
break;
}
+ case GST_EVENT_GAP:
+ {
+ GstClockTime timestamp, duration;
+ gst_event_parse_gap (event, &timestamp, &duration);
+ if (GST_CLOCK_TIME_IS_VALID (duration))
+ timestamp += duration;
+
+ DVD_SPU_LOCK (dvdspu);
+ GST_LOG_OBJECT (dvdspu, "Received GAP. Advancing to %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (timestamp));
+ update_video_to_position (dvdspu, timestamp);
+ DVD_SPU_UNLOCK (dvdspu);
+
+ gst_event_unref (event);
+ break;
+ }
case GST_EVENT_FLUSH_START:
res = gst_pad_event_default (pad, parent, event);
goto done;
@@ -1117,6 +1141,22 @@ gst_dvd_spu_subpic_event (GstPad * pad, GstObject * parent, GstEvent * event)
gst_event_unref (event);
break;
}
+ case GST_EVENT_GAP:
+ {
+ GstClockTime timestamp, duration;
+ gst_event_parse_gap (event, &timestamp, &duration);
+ if (GST_CLOCK_TIME_IS_VALID (duration))
+ timestamp += duration;
+
+ DVD_SPU_LOCK (dvdspu);
+ dvdspu->subp_seg.position = timestamp;
+ GST_LOG_OBJECT (dvdspu, "Received GAP. Segment now: %" GST_SEGMENT_FORMAT,
+ &dvdspu->subp_seg);
+ DVD_SPU_UNLOCK (dvdspu);
+
+ gst_event_unref (event);
+ break;
+ }
case GST_EVENT_FLUSH_START:
gst_event_unref (event);
goto done;
@@ -1156,7 +1196,7 @@ gst_dvd_spu_subpic_set_caps (GstPad * pad, GstCaps * caps)
s = gst_caps_get_structure (caps, 0);
- if (gst_structure_has_name (s, "video/x-dvd-subpicture")) {
+ if (gst_structure_has_name (s, "subpicture/x-dvd")) {
input_type = SPU_INPUT_TYPE_VOBSUB;
} else if (gst_structure_has_name (s, "subpicture/x-pgs")) {
input_type = SPU_INPUT_TYPE_PGS;
diff --git a/gst/faceoverlay/Makefile.in b/gst/faceoverlay/Makefile.in
index 55f122cd..1551b906 100644
--- a/gst/faceoverlay/Makefile.in
+++ b/gst/faceoverlay/Makefile.in
@@ -342,6 +342,8 @@ 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@
@@ -349,6 +351,8 @@ 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@
@@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -391,6 +394,10 @@ 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@
@@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/festival/Makefile.in b/gst/festival/Makefile.in
index d3a5efd3..f7a65abe 100644
--- a/gst/festival/Makefile.in
+++ b/gst/festival/Makefile.in
@@ -341,6 +341,8 @@ 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@
@@ -348,6 +350,8 @@ 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@
@@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -390,6 +393,10 @@ 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@
@@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/festival/gstfestival.c b/gst/festival/gstfestival.c
index 08adf8c3..baf3da75 100644
--- a/gst/festival/gstfestival.c
+++ b/gst/festival/gstfestival.c
@@ -123,7 +123,7 @@ static GstStaticPadTemplate sink_template_factory =
GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("text/plain")
+ GST_STATIC_CAPS ("text/x-raw, format=(string)utf8")
);
static GstStaticPadTemplate src_template_factory =
diff --git a/gst/fieldanalysis/Makefile.in b/gst/fieldanalysis/Makefile.in
index 0019258b..6fccdb13 100644
--- a/gst/fieldanalysis/Makefile.in
+++ b/gst/fieldanalysis/Makefile.in
@@ -369,6 +369,8 @@ 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@
@@ -376,6 +378,8 @@ 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@
@@ -390,7 +394,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -418,6 +421,10 @@ 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@
@@ -544,6 +551,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/freeverb/Makefile.in b/gst/freeverb/Makefile.in
index 8cbfd38c..5d274682 100644
--- a/gst/freeverb/Makefile.in
+++ b/gst/freeverb/Makefile.in
@@ -341,6 +341,8 @@ 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@
@@ -348,6 +350,8 @@ 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@
@@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -390,6 +393,10 @@ 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@
@@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/freeze/Makefile.in b/gst/freeze/Makefile.in
index ca35249f..a862468c 100644
--- a/gst/freeze/Makefile.in
+++ b/gst/freeze/Makefile.in
@@ -340,6 +340,8 @@ 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@
@@ -347,6 +349,8 @@ 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@
@@ -361,7 +365,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -389,6 +392,10 @@ 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@
@@ -515,6 +522,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/freeze/gstfreeze.c b/gst/freeze/gstfreeze.c
index f4022b86..432a0277 100644
--- a/gst/freeze/gstfreeze.c
+++ b/gst/freeze/gstfreeze.c
@@ -33,8 +33,6 @@
#include "config.h"
#endif
-#include <gst/gst.h>
-
#include "gstfreeze.h"
GST_DEBUG_CATEGORY_STATIC (freeze_debug);
@@ -63,24 +61,26 @@ static void gst_freeze_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec);
static void gst_freeze_get_property (GObject * object, guint prop_id,
GValue * value, GParamSpec * pspec);
-static GstFlowReturn gst_freeze_chain (GstPad * pad, GstBuffer * buffer);
+static GstFlowReturn gst_freeze_chain (GstPad * pad, GstObject * parent,
+ GstBuffer * buffer);
static GstStateChangeReturn gst_freeze_change_state (GstElement * element,
GstStateChange transition);
-static GstFlowReturn gst_freeze_play (GstPad * pad, GstBuffer * buff);
-static void gst_freeze_loop (GstPad * pad);
-static gboolean gst_freeze_sink_activate (GstPad * sinkpad);
-static gboolean gst_freeze_sink_activate_pull (GstPad * sinkpad,
- gboolean active);
-static gboolean gst_freeze_sink_event (GstPad * pad, GstEvent * event);
+static GstFlowReturn gst_freeze_play (GstFreeze * freeze, GstBuffer * buff);
+static void gst_freeze_loop (GstFreeze * freeze);
+static gboolean gst_freeze_sink_activate (GstPad * sinkpad, GstObject * parent);
+static gboolean gst_freeze_sink_activate_mode (GstPad * sinkpad,
+ GstObject * parent, GstPadMode mode, gboolean active);
+static gboolean gst_freeze_sink_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
static void gst_freeze_clear_buffer (GstFreeze * freeze);
-static void gst_freeze_buffer_free (gpointer data, gpointer user_data);
-GST_BOILERPLATE (GstFreeze, gst_freeze, GstElement, GST_TYPE_ELEMENT);
+G_DEFINE_TYPE (GstFreeze, gst_freeze, GST_TYPE_ELEMENT);
static void
-gst_freeze_base_init (gpointer klass)
+gst_freeze_class_init (GstFreezeClass * klass)
{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
gst_element_class_set_details_simple (element_class, "Stream freezer",
@@ -94,14 +94,6 @@ gst_freeze_base_init (gpointer klass)
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_freeze_src_template));
-}
-
-static void
-gst_freeze_class_init (GstFreezeClass * klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
-
element_class->change_state = gst_freeze_change_state;
object_class->set_property = gst_freeze_set_property;
object_class->get_property = gst_freeze_get_property;
@@ -118,29 +110,32 @@ gst_freeze_class_init (GstFreezeClass * klass)
}
static void
-gst_freeze_init (GstFreeze * freeze, GstFreezeClass * klass)
+gst_freeze_init (GstFreeze * freeze)
{
freeze->sinkpad =
gst_pad_new_from_static_template (&gst_freeze_sink_template, "sink");
- gst_element_add_pad (GST_ELEMENT (freeze), freeze->sinkpad);
gst_pad_set_activate_function (freeze->sinkpad, gst_freeze_sink_activate);
- gst_pad_set_activatepull_function (freeze->sinkpad,
- gst_freeze_sink_activate_pull);
+ gst_pad_set_activatemode_function (freeze->sinkpad,
+ gst_freeze_sink_activate_mode);
gst_pad_set_chain_function (freeze->sinkpad, gst_freeze_chain);
- gst_pad_set_getcaps_function (freeze->sinkpad, gst_pad_proxy_getcaps);
+ GST_PAD_SET_PROXY_CAPS (freeze->sinkpad);
+ GST_PAD_SET_PROXY_ALLOCATION (freeze->sinkpad);
gst_pad_set_event_function (freeze->sinkpad, gst_freeze_sink_event);
+ gst_element_add_pad (GST_ELEMENT (freeze), freeze->sinkpad);
freeze->srcpad =
gst_pad_new_from_static_template (&gst_freeze_src_template, "src");
+ GST_PAD_SET_PROXY_CAPS (freeze->srcpad);
+ GST_PAD_SET_PROXY_ALLOCATION (freeze->srcpad);
+ GST_PAD_SET_PROXY_SCHEDULING (freeze->srcpad);
gst_element_add_pad (GST_ELEMENT (freeze), freeze->srcpad);
- gst_pad_set_getcaps_function (freeze->srcpad, gst_pad_proxy_getcaps);
freeze->timestamp_offset = 0;
freeze->running_time = 0;
- freeze->current = NULL;
+ freeze->current = 0;
freeze->max_buffers = 1;
- freeze->on_flush = FALSE;
- freeze->buffers = g_queue_new ();
+ freeze->buffers = g_ptr_array_new_with_free_func (
+ (GDestroyNotify) gst_buffer_unref);
}
static void
@@ -149,10 +144,9 @@ gst_freeze_dispose (GObject * object)
GstFreeze *freeze = GST_FREEZE (object);
gst_freeze_clear_buffer (freeze);
+ g_ptr_array_free (freeze->buffers, TRUE);
- g_queue_free (freeze->buffers);
-
- G_OBJECT_CLASS (parent_class)->dispose (object);
+ G_OBJECT_CLASS (gst_freeze_parent_class)->dispose (object);
}
static void
@@ -188,9 +182,11 @@ gst_freeze_get_property (GObject * object, guint prop_id,
}
static GstFlowReturn
-gst_freeze_chain (GstPad * pad, GstBuffer * buffer)
+gst_freeze_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
{
- return gst_freeze_play (pad, buffer);
+ GstFreeze *freeze = GST_FREEZE (parent);
+
+ return gst_freeze_play (freeze, buffer);
}
@@ -198,125 +194,105 @@ static GstStateChangeReturn
gst_freeze_change_state (GstElement * element, GstStateChange transition)
{
GstFreeze *freeze = GST_FREEZE (element);
- GstStateChangeReturn return_val = GST_STATE_CHANGE_SUCCESS;
switch (transition) {
case GST_STATE_CHANGE_READY_TO_PAUSED:
- break;
- case GST_STATE_CHANGE_NULL_TO_READY:
- case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
- freeze->timestamp_offset = freeze->running_time = 0;
- break;
- default:
- break;
- }
-
- if (GST_ELEMENT_CLASS (parent_class)->change_state)
- return_val =
- GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-
- switch (transition) {
- case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
- case GST_STATE_CHANGE_READY_TO_NULL:
- break;
- case GST_STATE_CHANGE_PAUSED_TO_READY:
freeze->timestamp_offset = freeze->running_time = 0;
break;
default:
break;
}
- return return_val;
+ return GST_ELEMENT_CLASS (gst_freeze_parent_class)->change_state (element,
+ transition);
}
static GstFlowReturn
-gst_freeze_play (GstPad * pad, GstBuffer * buff)
+gst_freeze_play (GstFreeze * freeze, GstBuffer * buf)
{
- GstFreeze *freeze;
GstFlowReturn ret = GST_FLOW_OK;
+ GstBuffer *outbuf;
- freeze = GST_FREEZE (gst_pad_get_parent (pad));
-
- if (freeze->on_flush) {
- g_object_unref (freeze);
- return GST_FLOW_FLUSHING;
- }
-
- /* If it is working in push mode this function will be called by "_chain"
- and buff will never be NULL. In pull mode this function will be called
- by _loop and buff will be NULL */
- if (!buff) {
- ret =
- gst_pad_pull_range (GST_PAD (freeze->sinkpad), freeze->offset, 4096,
- &buff);
- if (ret != GST_FLOW_OK) {
- gst_object_unref (freeze);
- return ret;
- }
+ if (freeze->buffers->len == 0)
+ freeze->timestamp_offset = GST_BUFFER_TIMESTAMP (buf);
- freeze->offset += GST_BUFFER_SIZE (buff);
-
- }
-
- if (g_queue_get_length (freeze->buffers) < freeze->max_buffers ||
- freeze->max_buffers == 0) {
- g_queue_push_tail (freeze->buffers, buff);
- GST_DEBUG_OBJECT (freeze, "accepted buffer %u",
- g_queue_get_length (freeze->buffers) - 1);
+ if (freeze->buffers->len < freeze->max_buffers || freeze->max_buffers == 0) {
+ g_ptr_array_add (freeze->buffers, buf);
+ GST_DEBUG_OBJECT (freeze, "accepted buffer %u", freeze->buffers->len - 1);
} else {
- gst_buffer_unref (buff);
+ gst_buffer_unref (buf);
}
+ outbuf =
+ gst_buffer_copy (g_ptr_array_index (freeze->buffers, freeze->current));
+ freeze->current++;
+ freeze->current %= freeze->buffers->len;
- if (freeze->current != NULL) {
- GST_DEBUG_OBJECT (freeze, "switching to next buffer");
- freeze->current = g_queue_peek_nth (freeze->buffers,
- g_queue_index (freeze->buffers, (gpointer) freeze->current) + 1);
- }
-
- if (freeze->current == NULL) {
- if (freeze->max_buffers > 1)
- GST_DEBUG_OBJECT (freeze, "restarting the loop");
- freeze->current = g_queue_peek_head (freeze->buffers);
- }
-
- GST_BUFFER_TIMESTAMP (freeze->current) = freeze->timestamp_offset +
+ GST_BUFFER_TIMESTAMP (outbuf) = freeze->timestamp_offset +
freeze->running_time;
- freeze->running_time += GST_BUFFER_DURATION (freeze->current);
+ freeze->running_time += GST_BUFFER_DURATION (outbuf);
- gst_buffer_ref (freeze->current);
- ret = gst_pad_push (freeze->srcpad, freeze->current);
+ ret = gst_pad_push (freeze->srcpad, outbuf);
- gst_object_unref (freeze);
return ret;
}
static void
-gst_freeze_loop (GstPad * pad)
+gst_freeze_loop (GstFreeze * freeze)
{
- gst_freeze_play (pad, NULL);
+ GstBuffer *buf;
+ GstFlowReturn ret;
+
+ ret = gst_pad_pull_range (freeze->sinkpad, freeze->offset, 4096, &buf);
+ if (ret != GST_FLOW_OK)
+ return;
+
+ freeze->offset += gst_buffer_get_size (buf);
+
+ gst_freeze_play (freeze, buf);
}
static gboolean
-gst_freeze_sink_activate (GstPad * sinkpad)
+gst_freeze_sink_activate (GstPad * sinkpad, GstObject * parent)
{
- if (gst_pad_check_pull_range (sinkpad)) {
- return gst_pad_activate_pull (sinkpad, TRUE);
- } else {
- return gst_pad_activate_push (sinkpad, TRUE);
- }
+ GstQuery *query;
+ GstPadMode mode;
+
+ query = gst_query_new_scheduling ();
+
+ if (!gst_pad_peer_query (sinkpad, query))
+ goto no_valid_mode;
+
+ if (gst_query_has_scheduling_mode (query, GST_PAD_MODE_PULL))
+ mode = GST_PAD_MODE_PULL;
+ else if (gst_query_has_scheduling_mode (query, GST_PAD_MODE_PUSH))
+ mode = GST_PAD_MODE_PUSH;
+ else
+ goto no_valid_mode;
+
+ gst_query_unref (query);
+
+ return gst_pad_activate_mode (sinkpad, mode, TRUE);
+
+no_valid_mode:
+ return FALSE;
}
static gboolean
-gst_freeze_sink_activate_pull (GstPad * sinkpad, gboolean active)
+gst_freeze_sink_activate_mode (GstPad * sinkpad, GstObject * parent,
+ GstPadMode mode, gboolean active)
{
+ GstFreeze *freeze = GST_FREEZE (parent);
gboolean result;
+ if (mode != GST_PAD_MODE_PULL)
+ return TRUE;
+
if (active) {
/* if we have a scheduler we can start the task */
result = gst_pad_start_task (sinkpad,
- (GstTaskFunction) gst_freeze_loop, sinkpad, NULL);
+ (GstTaskFunction) gst_freeze_loop, freeze, NULL);
} else {
result = gst_pad_stop_task (sinkpad);
}
@@ -325,27 +301,18 @@ gst_freeze_sink_activate_pull (GstPad * sinkpad, gboolean active)
}
static void
-gst_freeze_buffer_free (gpointer data, gpointer user_data)
-{
- gst_buffer_unref (GST_BUFFER (data));
-}
-
-static void
gst_freeze_clear_buffer (GstFreeze * freeze)
{
- if (freeze->buffers != NULL) {
- g_queue_foreach (freeze->buffers, gst_freeze_buffer_free, NULL);
- }
- freeze->current = NULL;
+ g_ptr_array_set_size (freeze->buffers, 0);
+ freeze->current = 0;
freeze->running_time = 0;
}
static gboolean
-gst_freeze_sink_event (GstPad * pad, GstEvent * event)
+gst_freeze_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
+ GstFreeze *freeze = GST_FREEZE (parent);
gboolean ret = TRUE;
- GstFreeze *freeze = GST_FREEZE (gst_pad_get_parent (pad));
-
switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_EOS:
@@ -353,17 +320,15 @@ gst_freeze_sink_event (GstPad * pad, GstEvent * event)
gst_pad_get_name (GST_PAD (freeze->sinkpad)));
gst_event_unref (event);
break;
- case GST_EVENT_NEWSEGMENT:
- /* FALL TROUGH */
+ case GST_EVENT_STREAM_START:
case GST_EVENT_FLUSH_STOP:
gst_freeze_clear_buffer (freeze);
/* FALL TROUGH */
default:
- ret = gst_pad_event_default (GST_PAD (freeze->sinkpad), event);
+ ret = gst_pad_event_default (GST_PAD (freeze->sinkpad), parent, event);
break;
}
- gst_object_unref (freeze);
return ret;
}
@@ -382,12 +347,3 @@ GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
freeze,
"Stream freezer",
plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
-
-/*
- * Local variables:
- * mode: c
- * file-style: k&r
- * c-basic-offset: 2
- * arch-tag: fb0ee62b-cf74-46c0-8e62-93b58bacc0ed
- * End:
- */
diff --git a/gst/freeze/gstfreeze.h b/gst/freeze/gstfreeze.h
index 47cead72..6b496995 100644
--- a/gst/freeze/gstfreeze.h
+++ b/gst/freeze/gstfreeze.h
@@ -39,8 +39,8 @@ struct _GstFreeze
GstPad *sinkpad, *srcpad;
- GQueue *buffers;
- GstBuffer *current;
+ GPtrArray *buffers;
+ guint current;
guint max_buffers;
@@ -59,11 +59,3 @@ GType gst_freeze_get_type (void);
G_END_DECLS
#endif
-/*
- * Local variables:
- * mode: c
- * file-style: k&r
- * c-basic-offset: 2
- * arch-tag: 559a2214-86a1-4c2f-b497-bdcc5f82acf1
- * End:
- */
diff --git a/gst/frei0r/Makefile.in b/gst/frei0r/Makefile.in
index de9f6060..3a7362b3 100644
--- a/gst/frei0r/Makefile.in
+++ b/gst/frei0r/Makefile.in
@@ -344,6 +344,8 @@ 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@
@@ -351,6 +353,8 @@ 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@
@@ -365,7 +369,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -393,6 +396,10 @@ 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@
@@ -519,6 +526,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/frei0r/gstfrei0rmixer.c b/gst/frei0r/gstfrei0rmixer.c
index f9b5681e..d7c38993 100644
--- a/gst/frei0r/gstfrei0rmixer.c
+++ b/gst/frei0r/gstfrei0rmixer.c
@@ -735,7 +735,7 @@ gst_frei0r_mixer_init (GstFrei0rMixer * self, GstFrei0rMixerClass * klass)
gst_pad_set_query_function (self->sink0,
GST_DEBUG_FUNCPTR (gst_frei0r_mixer_sink_query));
gst_collect_pads_add_pad (self->collect, self->sink0,
- sizeof (GstCollectData));
+ sizeof (GstCollectData), NULL, TRUE);
self->collect_event = (GstPadEventFunction) GST_PAD_EVENTFUNC (self->sink0);
gst_pad_set_event_function (self->sink0,
GST_DEBUG_FUNCPTR (gst_frei0r_mixer_sink0_event));
@@ -751,7 +751,7 @@ gst_frei0r_mixer_init (GstFrei0rMixer * self, GstFrei0rMixerClass * klass)
gst_pad_set_query_function (self->sink0,
GST_DEBUG_FUNCPTR (gst_frei0r_mixer_sink_query));
gst_collect_pads_add_pad (self->collect, self->sink1,
- sizeof (GstCollectData));
+ sizeof (GstCollectData), NULL, TRUE);
gst_element_add_pad (GST_ELEMENT_CAST (self), self->sink1);
if (klass->info->plugin_type == F0R_PLUGIN_TYPE_MIXER3) {
@@ -765,7 +765,7 @@ gst_frei0r_mixer_init (GstFrei0rMixer * self, GstFrei0rMixerClass * klass)
gst_pad_set_query_function (self->sink0,
GST_DEBUG_FUNCPTR (gst_frei0r_mixer_sink_query));
gst_collect_pads_add_pad (self->collect, self->sink2,
- sizeof (GstCollectData));
+ sizeof (GstCollectData), NULL, TRUE);
gst_element_add_pad (GST_ELEMENT_CAST (self), self->sink2);
}
diff --git a/gst/gaudieffects/Makefile.in b/gst/gaudieffects/Makefile.in
index d5b47bd5..29d9fb0f 100644
--- a/gst/gaudieffects/Makefile.in
+++ b/gst/gaudieffects/Makefile.in
@@ -375,6 +375,8 @@ 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@
@@ -382,6 +384,8 @@ 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@
@@ -396,7 +400,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -424,6 +427,10 @@ 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@
@@ -550,6 +557,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/gdp/Makefile.am b/gst/gdp/Makefile.am
new file mode 100644
index 00000000..990f967d
--- /dev/null
+++ b/gst/gdp/Makefile.am
@@ -0,0 +1,32 @@
+plugin_LTLIBRARIES = libgstgdp.la
+
+libgstgdp_la_SOURCES = \
+ dataprotocol.c \
+ gstgdp.c \
+ gstgdppay.c \
+ gstgdpdepay.c
+
+libgstgdp_la_CFLAGS = $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+libgstgdp_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS)
+libgstgdp_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstgdp_la_LIBTOOLFLAGS = --tag=disable-static
+
+noinst_HEADERS = \
+ dataprotocol.h \
+ dp-private.h \
+ gstgdppay.h \
+ gstgdpdepay.h
+
+Android.mk: Makefile.am $(BUILT_SOURCES)
+ androgenizer \
+ -:PROJECT libgstgdp -:SHARED libgstgdp \
+ -:TAGS eng debug \
+ -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+ -:SOURCES $(libgstgdp_la_SOURCES) \
+ -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstgdp_la_CFLAGS) \
+ -:LDFLAGS $(libgstgdp_la_LDFLAGS) \
+ $(libgstgdp_la_LIBADD) \
+ -ldl \
+ -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+ LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+ > $@
diff --git a/gst/gdp/Makefile.in b/gst/gdp/Makefile.in
new file mode 100644
index 00000000..f9eafbb2
--- /dev/null
+++ b/gst/gdp/Makefile.in
@@ -0,0 +1,990 @@
+# 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 = gst/gdp
+DIST_COMMON = README $(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 =
+libgstgdp_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+am_libgstgdp_la_OBJECTS = libgstgdp_la-dataprotocol.lo \
+ libgstgdp_la-gstgdp.lo libgstgdp_la-gstgdppay.lo \
+ libgstgdp_la-gstgdpdepay.lo
+libgstgdp_la_OBJECTS = $(am_libgstgdp_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+libgstgdp_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(libgstgdp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
+ $(CCLD) $(libgstgdp_la_CFLAGS) $(CFLAGS) \
+ $(libgstgdp_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 = $(libgstgdp_la_SOURCES)
+DIST_SOURCES = $(libgstgdp_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@
+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@
+VPX_CFLAGS = @VPX_CFLAGS@
+VPX_LIBS = @VPX_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 = libgstgdp.la
+libgstgdp_la_SOURCES = \
+ dataprotocol.c \
+ gstgdp.c \
+ gstgdppay.c \
+ gstgdpdepay.c
+
+libgstgdp_la_CFLAGS = $(GST_BASE_CFLAGS) $(GST_CFLAGS)
+libgstgdp_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS)
+libgstgdp_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstgdp_la_LIBTOOLFLAGS = --tag=disable-static
+noinst_HEADERS = \
+ dataprotocol.h \
+ dp-private.h \
+ gstgdppay.h \
+ gstgdpdepay.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 gst/gdp/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu gst/gdp/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
+libgstgdp.la: $(libgstgdp_la_OBJECTS) $(libgstgdp_la_DEPENDENCIES) $(EXTRA_libgstgdp_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libgstgdp_la_LINK) -rpath $(plugindir) $(libgstgdp_la_OBJECTS) $(libgstgdp_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgdp_la-dataprotocol.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgdp_la-gstgdp.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgdp_la-gstgdpdepay.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstgdp_la-gstgdppay.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 $@ $<
+
+libgstgdp_la-dataprotocol.lo: dataprotocol.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgdp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgdp_la_CFLAGS) $(CFLAGS) -MT libgstgdp_la-dataprotocol.lo -MD -MP -MF $(DEPDIR)/libgstgdp_la-dataprotocol.Tpo -c -o libgstgdp_la-dataprotocol.lo `test -f 'dataprotocol.c' || echo '$(srcdir)/'`dataprotocol.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstgdp_la-dataprotocol.Tpo $(DEPDIR)/libgstgdp_la-dataprotocol.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dataprotocol.c' object='libgstgdp_la-dataprotocol.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 $(libgstgdp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgdp_la_CFLAGS) $(CFLAGS) -c -o libgstgdp_la-dataprotocol.lo `test -f 'dataprotocol.c' || echo '$(srcdir)/'`dataprotocol.c
+
+libgstgdp_la-gstgdp.lo: gstgdp.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgdp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgdp_la_CFLAGS) $(CFLAGS) -MT libgstgdp_la-gstgdp.lo -MD -MP -MF $(DEPDIR)/libgstgdp_la-gstgdp.Tpo -c -o libgstgdp_la-gstgdp.lo `test -f 'gstgdp.c' || echo '$(srcdir)/'`gstgdp.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstgdp_la-gstgdp.Tpo $(DEPDIR)/libgstgdp_la-gstgdp.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstgdp.c' object='libgstgdp_la-gstgdp.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 $(libgstgdp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgdp_la_CFLAGS) $(CFLAGS) -c -o libgstgdp_la-gstgdp.lo `test -f 'gstgdp.c' || echo '$(srcdir)/'`gstgdp.c
+
+libgstgdp_la-gstgdppay.lo: gstgdppay.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgdp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgdp_la_CFLAGS) $(CFLAGS) -MT libgstgdp_la-gstgdppay.lo -MD -MP -MF $(DEPDIR)/libgstgdp_la-gstgdppay.Tpo -c -o libgstgdp_la-gstgdppay.lo `test -f 'gstgdppay.c' || echo '$(srcdir)/'`gstgdppay.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstgdp_la-gstgdppay.Tpo $(DEPDIR)/libgstgdp_la-gstgdppay.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstgdppay.c' object='libgstgdp_la-gstgdppay.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 $(libgstgdp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgdp_la_CFLAGS) $(CFLAGS) -c -o libgstgdp_la-gstgdppay.lo `test -f 'gstgdppay.c' || echo '$(srcdir)/'`gstgdppay.c
+
+libgstgdp_la-gstgdpdepay.lo: gstgdpdepay.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstgdp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgdp_la_CFLAGS) $(CFLAGS) -MT libgstgdp_la-gstgdpdepay.lo -MD -MP -MF $(DEPDIR)/libgstgdp_la-gstgdpdepay.Tpo -c -o libgstgdp_la-gstgdpdepay.lo `test -f 'gstgdpdepay.c' || echo '$(srcdir)/'`gstgdpdepay.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstgdp_la-gstgdpdepay.Tpo $(DEPDIR)/libgstgdp_la-gstgdpdepay.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstgdpdepay.c' object='libgstgdp_la-gstgdpdepay.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 $(libgstgdp_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstgdp_la_CFLAGS) $(CFLAGS) -c -o libgstgdp_la-gstgdpdepay.lo `test -f 'gstgdpdepay.c' || echo '$(srcdir)/'`gstgdpdepay.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 libgstgdp -:SHARED libgstgdp \
+ -:TAGS eng debug \
+ -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \
+ -:SOURCES $(libgstgdp_la_SOURCES) \
+ -:CFLAGS $(DEFS) $(DEFAULT_INCLUDES) $(libgstgdp_la_CFLAGS) \
+ -:LDFLAGS $(libgstgdp_la_LDFLAGS) \
+ $(libgstgdp_la_LIBADD) \
+ -ldl \
+ -:PASSTHROUGH LOCAL_ARM_MODE:=arm \
+ LOCAL_MODULE_PATH:='$$(TARGET_OUT)/lib/gstreamer-0.10' \
+ > $@
+
+# 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/gst/gdp/README b/gst/gdp/README
new file mode 100644
index 00000000..6b84afc4
--- /dev/null
+++ b/gst/gdp/README
@@ -0,0 +1,22 @@
+Sample pipelines:
+- replacing tcpserversink protocol=gdp with gdppay ! tcpserversink:
+ - raw audio:
+ - server:
+ gst-launch -v audiotestsrc ! gdppay version=0.2 ! tcpserversink
+ - client:
+ gst-launch -v tcpclientsrc protocol=gdp ! alsasink sync=FALSE
+
+ - vorbis packets:
+ - server:
+ gst-launch -v audiotestsrc ! audioconvert ! vorbisenc ! gdppay version=0.2 ! tcpserversink
+ - client:
+ gst-launch -v tcpclientsrc protocol=gdp ! vorbisdec ! audioconvert ! alsasink sync=FALSE
+
+ - ogg packets:
+ - server:
+ gst-launch -v audiotestsrc ! audioconvert ! vorbisenc ! oggmux ! gdppay version=0.2 ! tcpserversink
+ - client:
+ gst-launch -v tcpclientsrc protocol=gdp ! oggdemux ! vorbisdec ! audioconvert ! alsasink sync=FALSE
+
+ In all the client pipelines, tcpclientsrc protocol=gdp can be replaced with
+ tcpclientsrc ! gdpdepay
diff --git a/gst/gdp/dataprotocol.c b/gst/gdp/dataprotocol.c
new file mode 100644
index 00000000..160c7916
--- /dev/null
+++ b/gst/gdp/dataprotocol.c
@@ -0,0 +1,742 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) 2004,2006 Thomas Vander Stichele <thomas at apestaart dot org>
+ *
+ * dataprotocol.c: Functions implementing the GStreamer Data Protocol
+ *
+ * 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:gstdataprotocol
+ * @short_description: Serialization of caps, buffers and events.
+ * @see_also: #GstCaps, #GstEvent, #GstBuffer
+ *
+ * This helper library provides serialization of GstBuffer, GstCaps and
+ * GstEvent structures.
+ *
+ * This serialization is useful when GStreamer needs to interface with
+ * the outside world to transport data between distinct GStreamer pipelines.
+ * The connections with the outside world generally don't have mechanisms
+ * to transport properties of these structures.
+ *
+ * For example, transporting buffers across named pipes or network connections
+ * doesn't maintain the buffer size and separation.
+ *
+ * This data protocol assumes a reliable connection-oriented transport, such as
+ * TCP, a pipe, or a file. The protocol does not serialize the caps for
+ * each buffer; instead, it transport the caps only when they change in the
+ * stream. This implies that there will always be a caps packet before any
+ * buffer packets.
+ *
+ * The versioning of the protocol is independent of GStreamer's version.
+ * The major number gets incremented, and the minor reset, for incompatible
+ * changes. The minor number gets incremented for compatible changes that
+ * allow clients who do not completely understand the newer protocol version
+ * to still decode what they do understand.
+ *
+ * Version 0.2 serializes only a small subset of all events, with a custom
+ * payload for each type. Also, all GDP streams start with the initial caps
+ * packet.
+ *
+ * Version 1.0 serializes all events by taking the string representation of
+ * the event as the payload. In addition, GDP streams can now start with
+ * events as well, as required by the new data stream model in GStreamer 0.10.
+ *
+ * Converting buffers, caps and events to GDP buffers is done using a
+ * #GstDPPacketizer object and invoking its packetizer functions.
+ * For backwards-compatibility reasons, the old 0.2 methods are still
+ * available but deprecated.
+ *
+ * For reference, this image shows the byte layout of the GDP header:
+ *
+ * <inlinegraphic format="PNG" fileref="gdp-header.png"></inlinegraphic>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst.h>
+#include "dataprotocol.h"
+#include <glib/gprintf.h> /* g_sprintf */
+#include <string.h> /* strlen */
+#include "dp-private.h"
+
+/* debug category */
+GST_DEBUG_CATEGORY_STATIC (data_protocol_debug);
+
+/* helper macros */
+
+/* write first 6 bytes of header */
+#define GST_DP_INIT_HEADER(h, version, flags, type) \
+G_STMT_START { \
+ gint maj = 0, min = 0; \
+ switch (version) { \
+ case GST_DP_VERSION_0_2: maj = 0; min = 2; break; \
+ case GST_DP_VERSION_1_0: maj = 1; min = 0; break; \
+ } \
+ h[0] = (guint8) maj; \
+ h[1] = (guint8) min; \
+ h[2] = (guint8) flags; \
+ h[3] = 0; /* padding byte */ \
+ GST_WRITE_UINT16_BE (h + 4, type); \
+} G_STMT_END
+
+#define GST_DP_SET_CRC(h, flags, payload, length); \
+G_STMT_START { \
+ guint16 crc = 0; \
+ if (flags & GST_DP_HEADER_FLAG_CRC_HEADER) \
+ /* we don't crc the last four bytes since they are crc's */ \
+ crc = gst_dp_crc (h, 58); \
+ GST_WRITE_UINT16_BE (h + 58, crc); \
+ \
+ crc = 0; \
+ if (length && (flags & GST_DP_HEADER_FLAG_CRC_PAYLOAD)) \
+ crc = gst_dp_crc (payload, length); \
+ GST_WRITE_UINT16_BE (h + 60, crc); \
+} G_STMT_END
+
+/* calculate a CCITT 16 bit CRC check value for a given byte array */
+/*
+ * this code snippet is adapted from a web page I found
+ * it is identical except for cleanups, and a final XOR with 0xffff
+ * as outlined in the uecp spec
+ *
+ * XMODEM x^16 + x^12 + x^5 + 1
+ */
+
+#define POLY 0x1021
+#define CRC_INIT 0xFFFF
+
+/*** HELPER FUNCTIONS ***/
+
+static gboolean
+gst_dp_header_from_buffer_any (const GstBuffer * buffer, GstDPHeaderFlag flags,
+ guint * length, guint8 ** header, GstDPVersion version)
+{
+ guint8 *h;
+ guint16 flags_mask;
+ GstMapInfo map;
+
+ g_return_val_if_fail (GST_IS_BUFFER (buffer), FALSE);
+ g_return_val_if_fail (length, FALSE);
+ g_return_val_if_fail (header, FALSE);
+
+ *length = GST_DP_HEADER_LENGTH;
+ h = g_malloc0 (GST_DP_HEADER_LENGTH);
+
+ /* version, flags, type */
+ GST_DP_INIT_HEADER (h, version, flags, GST_DP_PAYLOAD_BUFFER);
+
+ gst_buffer_map ((GstBuffer *) buffer, &map, GST_MAP_READ);
+
+ /* buffer properties */
+ GST_WRITE_UINT32_BE (h + 6, map.size);
+ GST_WRITE_UINT64_BE (h + 10, GST_BUFFER_TIMESTAMP (buffer));
+ GST_WRITE_UINT64_BE (h + 18, GST_BUFFER_DURATION (buffer));
+ GST_WRITE_UINT64_BE (h + 26, GST_BUFFER_OFFSET (buffer));
+ GST_WRITE_UINT64_BE (h + 34, GST_BUFFER_OFFSET_END (buffer));
+
+ /* data flags; eats two bytes from the ABI area */
+ /* we copy everything but the read-only flags */
+ flags_mask = GST_BUFFER_FLAG_LIVE | GST_BUFFER_FLAG_DISCONT |
+ GST_BUFFER_FLAG_HEADER | GST_BUFFER_FLAG_GAP | GST_BUFFER_FLAG_DELTA_UNIT;
+
+ GST_WRITE_UINT16_BE (h + 42, GST_BUFFER_FLAGS (buffer) & flags_mask);
+
+ GST_DP_SET_CRC (h, flags, map.data, map.size);
+
+ gst_buffer_unmap ((GstBuffer *) buffer, &map);
+
+ GST_MEMDUMP ("created header from buffer", h, GST_DP_HEADER_LENGTH);
+ *header = h;
+ return TRUE;
+}
+
+static gboolean
+gst_dp_packet_from_caps_any (const GstCaps * caps, GstDPHeaderFlag flags,
+ guint * length, guint8 ** header, guint8 ** payload, GstDPVersion version)
+{
+ guint8 *h;
+ guchar *string;
+ guint payload_length;
+
+ g_return_val_if_fail (GST_IS_CAPS (caps), FALSE);
+ g_return_val_if_fail (length, FALSE);
+ g_return_val_if_fail (header, FALSE);
+ g_return_val_if_fail (payload, FALSE);
+
+ *length = GST_DP_HEADER_LENGTH;
+ h = g_malloc0 (GST_DP_HEADER_LENGTH);
+
+ string = (guchar *) gst_caps_to_string (caps);
+ payload_length = strlen ((gchar *) string) + 1; /* include trailing 0 */
+
+ /* version, flags, type */
+ GST_DP_INIT_HEADER (h, version, flags, GST_DP_PAYLOAD_CAPS);
+
+ /* buffer properties */
+ GST_WRITE_UINT32_BE (h + 6, payload_length);
+ GST_WRITE_UINT64_BE (h + 10, (guint64) 0);
+ GST_WRITE_UINT64_BE (h + 18, (guint64) 0);
+ GST_WRITE_UINT64_BE (h + 26, (guint64) 0);
+ GST_WRITE_UINT64_BE (h + 34, (guint64) 0);
+
+ GST_DP_SET_CRC (h, flags, string, payload_length);
+
+ GST_MEMDUMP ("created header from caps", h, GST_DP_HEADER_LENGTH);
+ *header = h;
+ *payload = string;
+ return TRUE;
+}
+
+
+/*** PUBLIC FUNCTIONS ***/
+
+static const guint16 gst_dp_crc_table[256] = {
+ 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
+ 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
+ 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,
+ 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,
+ 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,
+ 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,
+ 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,
+ 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,
+ 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,
+ 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,
+ 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,
+ 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,
+ 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,
+ 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,
+ 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,
+ 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,
+ 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,
+ 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,
+ 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,
+ 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,
+ 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,
+ 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
+ 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,
+ 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,
+ 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,
+ 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,
+ 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,
+ 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,
+ 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,
+ 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,
+ 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,
+ 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0
+};
+
+/**
+ * gst_dp_crc:
+ * @buffer: array of bytes
+ * @length: the length of @buffer
+ *
+ * Calculate a CRC for the given buffer over the given number of bytes.
+ * This is only provided for verification purposes; typical GDP users
+ * will not need this function.
+ *
+ * Returns: a two-byte CRC checksum.
+ */
+guint16
+gst_dp_crc (const guint8 * buffer, guint length)
+{
+ guint16 crc_register = CRC_INIT;
+
+ g_return_val_if_fail (buffer != NULL || length == 0, 0);
+
+ /* calc CRC */
+ for (; length--;) {
+ crc_register = (guint16) ((crc_register << 8) ^
+ gst_dp_crc_table[((crc_register >> 8) & 0x00ff) ^ *buffer++]);
+ }
+ return (0xffff ^ crc_register);
+}
+
+GType
+gst_dp_version_get_type (void)
+{
+ static gsize gst_dp_version_type = 0;
+ static const GEnumValue gst_dp_version[] = {
+ {GST_DP_VERSION_0_2, "GST_DP_VERSION_0_2", "0.2"},
+ {GST_DP_VERSION_1_0, "GST_DP_VERSION_1_0", "1.0"},
+ {0, NULL, NULL},
+ };
+
+ if (g_once_init_enter (&gst_dp_version_type)) {
+ GType tmp = g_enum_register_static ("GstDPVersion", gst_dp_version);
+ g_once_init_leave (&gst_dp_version_type, tmp);
+ }
+
+ return (GType) gst_dp_version_type;
+};
+
+/**
+ * gst_dp_init:
+ *
+ * Initialize GStreamer Data Protocol library.
+ *
+ * Should be called before using these functions from source linking
+ * to this source file.
+ */
+void
+gst_dp_init (void)
+{
+ static gboolean _gst_dp_initialized = FALSE;
+
+ if (_gst_dp_initialized)
+ return;
+
+ _gst_dp_initialized = TRUE;
+
+ g_type_class_ref (gst_dp_version_get_type ());
+
+ GST_DEBUG_CATEGORY_INIT (data_protocol_debug, "gdp", 0,
+ "GStreamer Data Protocol");
+}
+
+/**
+ * gst_dp_header_payload_length:
+ * @header: the byte header of the packet array
+ *
+ * Get the length of the payload described by @header.
+ *
+ * Returns: the length of the payload this header describes.
+ */
+guint32
+gst_dp_header_payload_length (const guint8 * header)
+{
+ g_return_val_if_fail (header != NULL, 0);
+
+ return GST_DP_HEADER_PAYLOAD_LENGTH (header);
+}
+
+/**
+ * gst_dp_header_payload_type:
+ * @header: the byte header of the packet array
+ *
+ * Get the type of the payload described by @header.
+ *
+ * Returns: the #GstDPPayloadType the payload this header describes.
+ */
+GstDPPayloadType
+gst_dp_header_payload_type (const guint8 * header)
+{
+ g_return_val_if_fail (header != NULL, GST_DP_PAYLOAD_NONE);
+
+ return GST_DP_HEADER_PAYLOAD_TYPE (header);
+}
+
+/*** PACKETIZER FUNCTIONS ***/
+
+static gboolean
+gst_dp_header_from_buffer_1_0 (const GstBuffer * buffer, GstDPHeaderFlag flags,
+ guint * length, guint8 ** header)
+{
+ return gst_dp_header_from_buffer_any (buffer, flags, length, header,
+ GST_DP_VERSION_1_0);
+}
+
+static gboolean
+gst_dp_packet_from_caps_1_0 (const GstCaps * caps, GstDPHeaderFlag flags,
+ guint * length, guint8 ** header, guint8 ** payload)
+{
+ return gst_dp_packet_from_caps_any (caps, flags, length, header, payload,
+ GST_DP_VERSION_1_0);
+}
+
+static gboolean
+gst_dp_packet_from_event_1_0 (const GstEvent * event, GstDPHeaderFlag flags,
+ guint * length, guint8 ** header, guint8 ** payload)
+{
+ guint8 *h;
+ guint32 pl_length; /* length of payload */
+ guchar *string = NULL;
+ const GstStructure *structure;
+
+ g_return_val_if_fail (GST_IS_EVENT (event), FALSE);
+ g_return_val_if_fail (length, FALSE);
+ g_return_val_if_fail (header, FALSE);
+ g_return_val_if_fail (payload, FALSE);
+
+ *length = GST_DP_HEADER_LENGTH;
+ h = g_malloc0 (GST_DP_HEADER_LENGTH);
+
+ structure = gst_event_get_structure ((GstEvent *) event);
+ if (structure) {
+ string = (guchar *) gst_structure_to_string (structure);
+ GST_LOG ("event %p has structure, string %s", event, string);
+ pl_length = strlen ((gchar *) string) + 1; /* include trailing 0 */
+ } else {
+ GST_LOG ("event %p has no structure", event);
+ pl_length = 0;
+ }
+
+ /* version, flags, type */
+ GST_DP_INIT_HEADER (h, GST_DP_VERSION_1_0, flags,
+ GST_DP_PAYLOAD_EVENT_NONE + GST_EVENT_TYPE (event));
+
+ /* length */
+ GST_WRITE_UINT32_BE (h + 6, pl_length);
+ /* timestamp */
+ GST_WRITE_UINT64_BE (h + 10, GST_EVENT_TIMESTAMP (event));
+
+ GST_DP_SET_CRC (h, flags, string, pl_length);
+
+ GST_MEMDUMP ("created header from event", h, GST_DP_HEADER_LENGTH);
+ *header = h;
+ *payload = string;
+ return TRUE;
+}
+
+/*** DEPACKETIZING FUNCTIONS ***/
+
+/**
+ * gst_dp_buffer_from_header:
+ * @header_length: the length of the packet header
+ * @header: the byte array of the packet header
+ *
+ * Creates a newly allocated #GstBuffer from the given header.
+ * The buffer data needs to be copied into it before validating.
+ *
+ * Use this function if you want to pre-allocate a buffer based on the
+ * packet header to read the packet payload in to.
+ *
+ * This function does not check the header passed to it, use
+ * gst_dp_validate_header() first if the header data is unchecked.
+ *
+ * Returns: A #GstBuffer if the buffer was successfully created, or NULL.
+ */
+GstBuffer *
+gst_dp_buffer_from_header (guint header_length, const guint8 * header)
+{
+ GstBuffer *buffer;
+
+ g_return_val_if_fail (header != NULL, NULL);
+ g_return_val_if_fail (header_length >= GST_DP_HEADER_LENGTH, NULL);
+ g_return_val_if_fail (GST_DP_HEADER_PAYLOAD_TYPE (header) ==
+ GST_DP_PAYLOAD_BUFFER, NULL);
+
+ buffer =
+ gst_buffer_new_allocate (NULL,
+ (guint) GST_DP_HEADER_PAYLOAD_LENGTH (header), NULL);
+
+ GST_BUFFER_TIMESTAMP (buffer) = GST_DP_HEADER_TIMESTAMP (header);
+ GST_BUFFER_DURATION (buffer) = GST_DP_HEADER_DURATION (header);
+ GST_BUFFER_OFFSET (buffer) = GST_DP_HEADER_OFFSET (header);
+ GST_BUFFER_OFFSET_END (buffer) = GST_DP_HEADER_OFFSET_END (header);
+ GST_BUFFER_FLAGS (buffer) = GST_DP_HEADER_BUFFER_FLAGS (header);
+
+ return buffer;
+}
+
+/**
+ * gst_dp_caps_from_packet:
+ * @header_length: the length of the packet header
+ * @header: the byte array of the packet header
+ * @payload: the byte array of the packet payload
+ *
+ * Creates a newly allocated #GstCaps from the given packet.
+ *
+ * This function does not check the arguments passed to it, use
+ * gst_dp_validate_packet() first if the header and payload data are
+ * unchecked.
+ *
+ * Returns: A #GstCaps containing the caps represented in the packet,
+ * or NULL if the packet could not be converted.
+ */
+GstCaps *
+gst_dp_caps_from_packet (guint header_length, const guint8 * header,
+ const guint8 * payload)
+{
+ GstCaps *caps;
+ gchar *string;
+
+ g_return_val_if_fail (header, NULL);
+ g_return_val_if_fail (header_length >= GST_DP_HEADER_LENGTH, NULL);
+ g_return_val_if_fail (GST_DP_HEADER_PAYLOAD_TYPE (header) ==
+ GST_DP_PAYLOAD_CAPS, NULL);
+ g_return_val_if_fail (payload, NULL);
+
+ /* 0 sized payload length will work create NULL string */
+ string = g_strndup ((gchar *) payload, GST_DP_HEADER_PAYLOAD_LENGTH (header));
+ caps = gst_caps_from_string (string);
+ g_free (string);
+
+ return caps;
+}
+
+static GstEvent *
+gst_dp_event_from_packet_0_2 (guint header_length, const guint8 * header,
+ const guint8 * payload)
+{
+ GstEvent *event = NULL;
+ GstEventType type;
+
+ type = GST_DP_HEADER_PAYLOAD_TYPE (header) - GST_DP_PAYLOAD_EVENT_NONE;
+ switch (type) {
+ case GST_EVENT_UNKNOWN:
+ GST_WARNING ("Unknown event, ignoring");
+ return NULL;
+ case GST_EVENT_EOS:
+ case GST_EVENT_FLUSH_START:
+ case GST_EVENT_FLUSH_STOP:
+ case GST_EVENT_SEGMENT:
+ event = gst_event_new_custom (type, NULL);
+ GST_EVENT_TIMESTAMP (event) = GST_DP_HEADER_TIMESTAMP (header);
+ break;
+ case GST_EVENT_SEEK:
+ {
+ gdouble rate;
+ GstFormat format;
+ GstSeekFlags flags;
+ GstSeekType start_type, stop_type;
+ gint64 start, stop;
+
+ g_return_val_if_fail (payload != NULL, NULL);
+
+ /* FIXME, read rate */
+ rate = 1.0;
+ format = (GstFormat) GST_READ_UINT32_BE (payload);
+ flags = (GstSeekFlags) GST_READ_UINT32_BE (payload + 4);
+ start_type = (GstSeekType) GST_READ_UINT32_BE (payload + 8);
+ start = (gint64) GST_READ_UINT64_BE (payload + 12);
+ stop_type = (GstSeekType) GST_READ_UINT32_BE (payload + 20);
+ stop = (gint64) GST_READ_UINT64_BE (payload + 24);
+
+ event = gst_event_new_seek (rate, format, flags, start_type, start,
+ stop_type, stop);
+ GST_EVENT_TIMESTAMP (event) = GST_DP_HEADER_TIMESTAMP (header);
+ break;
+ }
+ case GST_EVENT_QOS:
+ case GST_EVENT_NAVIGATION:
+ case GST_EVENT_TAG:
+ GST_WARNING ("Unhandled event type %d, ignoring", type);
+ return NULL;
+ default:
+ GST_WARNING ("Unknown event type %d, ignoring", type);
+ return NULL;
+ }
+
+ return event;
+}
+
+static GstEvent *
+gst_dp_event_from_packet_1_0 (guint header_length, const guint8 * header,
+ const guint8 * payload)
+{
+ GstEvent *event = NULL;
+ GstEventType type;
+ gchar *string = NULL;
+ GstStructure *s = NULL;
+
+ type = GST_DP_HEADER_PAYLOAD_TYPE (header) - GST_DP_PAYLOAD_EVENT_NONE;
+ if (payload) {
+ string =
+ g_strndup ((gchar *) payload, GST_DP_HEADER_PAYLOAD_LENGTH (header));
+ s = gst_structure_from_string (string, NULL);
+ g_free (string);
+ }
+ GST_LOG ("Creating event of type 0x%x with structure '%" GST_PTR_FORMAT "'",
+ type, s);
+ event = gst_event_new_custom (type, s);
+ return event;
+}
+
+
+/**
+ * gst_dp_event_from_packet:
+ * @header_length: the length of the packet header
+ * @header: the byte array of the packet header
+ * @payload: the byte array of the packet payload
+ *
+ * Creates a newly allocated #GstEvent from the given packet.
+ *
+ * This function does not check the arguments passed to it, use
+ * gst_dp_validate_packet() first if the header and payload data are
+ * unchecked.
+ *
+ * Returns: A #GstEvent if the event was successfully created,
+ * or NULL if an event could not be read from the payload.
+ */
+GstEvent *
+gst_dp_event_from_packet (guint header_length, const guint8 * header,
+ const guint8 * payload)
+{
+ guint8 major, minor;
+
+ g_return_val_if_fail (header, NULL);
+ g_return_val_if_fail (header_length >= GST_DP_HEADER_LENGTH, NULL);
+
+ major = GST_DP_HEADER_MAJOR_VERSION (header);
+ minor = GST_DP_HEADER_MINOR_VERSION (header);
+
+ if (major == 0 && minor == 2)
+ return gst_dp_event_from_packet_0_2 (header_length, header, payload);
+ else if (major == 1 && minor == 0)
+ return gst_dp_event_from_packet_1_0 (header_length, header, payload);
+ else {
+ GST_ERROR ("Unknown GDP version %d.%d", major, minor);
+ return NULL;
+ }
+}
+
+/**
+ * gst_dp_validate_header:
+ * @header_length: the length of the packet header
+ * @header: the byte array of the packet header
+ *
+ * Validates the given packet header by checking the CRC checksum.
+ *
+ * Returns: %TRUE if the CRC matches, or no CRC checksum is present.
+ */
+gboolean
+gst_dp_validate_header (guint header_length, const guint8 * header)
+{
+ guint16 crc_read, crc_calculated;
+
+ g_return_val_if_fail (header != NULL, FALSE);
+ g_return_val_if_fail (header_length >= GST_DP_HEADER_LENGTH, FALSE);
+
+ if (!(GST_DP_HEADER_FLAGS (header) & GST_DP_HEADER_FLAG_CRC_HEADER))
+ return TRUE;
+
+ crc_read = GST_DP_HEADER_CRC_HEADER (header);
+
+ /* don't include the last two crc fields for the crc check */
+ crc_calculated = gst_dp_crc (header, header_length - 4);
+ if (crc_read != crc_calculated)
+ goto crc_error;
+
+ GST_LOG ("header crc validation: %02x", crc_read);
+ return TRUE;
+
+ /* ERRORS */
+crc_error:
+ {
+ GST_WARNING ("header crc mismatch: read %02x, calculated %02x", crc_read,
+ crc_calculated);
+ return FALSE;
+ }
+}
+
+/**
+ * gst_dp_validate_payload:
+ * @header_length: the length of the packet header
+ * @header: the byte array of the packet header
+ * @payload: the byte array of the packet payload
+ *
+ * Validates the given packet payload using the given packet header
+ * by checking the CRC checksum.
+ *
+ * Returns: %TRUE if the CRC matches, or no CRC checksum is present.
+ */
+gboolean
+gst_dp_validate_payload (guint header_length, const guint8 * header,
+ const guint8 * payload)
+{
+ guint16 crc_read, crc_calculated;
+
+ g_return_val_if_fail (header != NULL, FALSE);
+ g_return_val_if_fail (header_length >= GST_DP_HEADER_LENGTH, FALSE);
+
+ if (!(GST_DP_HEADER_FLAGS (header) & GST_DP_HEADER_FLAG_CRC_PAYLOAD))
+ return TRUE;
+
+ crc_read = GST_DP_HEADER_CRC_PAYLOAD (header);
+ crc_calculated = gst_dp_crc (payload, GST_DP_HEADER_PAYLOAD_LENGTH (header));
+ if (crc_read != crc_calculated)
+ goto crc_error;
+
+ GST_LOG ("payload crc validation: %02x", crc_read);
+ return TRUE;
+
+ /* ERRORS */
+crc_error:
+ {
+ GST_WARNING ("payload crc mismatch: read %02x, calculated %02x", crc_read,
+ crc_calculated);
+ return FALSE;
+ }
+}
+
+/**
+ * gst_dp_validate_packet:
+ * @header_length: the length of the packet header
+ * @header: the byte array of the packet header
+ * @payload: the byte array of the packet payload
+ *
+ * Validates the given packet by checking version information and checksums.
+ *
+ * Returns: %TRUE if the packet validates.
+ */
+gboolean
+gst_dp_validate_packet (guint header_length, const guint8 * header,
+ const guint8 * payload)
+{
+ if (!gst_dp_validate_header (header_length, header))
+ return FALSE;
+ if (!gst_dp_validate_payload (header_length, header, payload))
+ return FALSE;
+
+ return TRUE;
+}
+
+/**
+ * gst_dp_packetizer_new:
+ * @version: the #GstDPVersion of the protocol to packetize for.
+ *
+ * Creates a new packetizer.
+ *
+ * Returns: a newly allocated #GstDPPacketizer
+ */
+GstDPPacketizer *
+gst_dp_packetizer_new (GstDPVersion version)
+{
+ GstDPPacketizer *ret;
+
+ ret = g_malloc0 (sizeof (GstDPPacketizer));
+ ret->version = version;
+
+ switch (version) {
+ case GST_DP_VERSION_1_0:
+ ret->header_from_buffer = gst_dp_header_from_buffer_1_0;
+ ret->packet_from_caps = gst_dp_packet_from_caps_1_0;
+ ret->packet_from_event = gst_dp_packet_from_event_1_0;
+ break;
+ default:
+ g_free (ret);
+ ret = NULL;
+ break;
+ }
+
+ return ret;
+}
+
+/**
+ * gst_dp_packetizer_free:
+ * @packetizer: the #GstDPPacketizer to free.
+ *
+ * Free the given packetizer.
+ */
+void
+gst_dp_packetizer_free (GstDPPacketizer * packetizer)
+{
+ g_free (packetizer);
+}
diff --git a/gst/gdp/dataprotocol.h b/gst/gdp/dataprotocol.h
new file mode 100644
index 00000000..7ed834c6
--- /dev/null
+++ b/gst/gdp/dataprotocol.h
@@ -0,0 +1,174 @@
+/* GStreamer
+ * Copyright (C) 1999 Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) 2004,2006 Thomas Vander Stichele <thomas at apestaart dot org>
+ *
+ * dataprotocol.h: Functions implementing the GStreamer Data Protocol
+ *
+ * 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_DATA_PROTOCOL_H__
+#define __GST_DATA_PROTOCOL_H__
+
+#include <gst/gstbuffer.h>
+#include <gst/gstevent.h>
+#include <gst/gstcaps.h>
+
+G_BEGIN_DECLS
+
+/**
+ * GstDPVersion:
+ * @GST_DP_VERSION_0_2: protocol version 0.2
+ * @GST_DP_VERSION_1_0: protocol version 1.0
+ *
+ * The version of the GDP protocol being used.
+ */
+typedef enum {
+ GST_DP_VERSION_0_2 = 1,
+ GST_DP_VERSION_1_0,
+} GstDPVersion;
+
+GType gst_dp_version_get_type (void);
+#define GST_TYPE_DP_VERSION (gst_dp_version_get_type ())
+
+/**
+ * GST_DP_VERSION_MAJOR:
+ *
+ * The major version number of the GStreamer Data Protocol.
+ */
+#define GST_DP_VERSION_MAJOR 0
+/**
+ * GST_DP_VERSION_MINOR:
+ *
+ * The minor version number of the GStreamer Data Protocol.
+ */
+#define GST_DP_VERSION_MINOR 2
+
+/**
+ * GST_DP_HEADER_LENGTH:
+ *
+ * The header size in bytes.
+ */
+#define GST_DP_HEADER_LENGTH 62
+
+/**
+ * GstDPHeaderFlag:
+ * @GST_DP_HEADER_FLAG_NONE: No flag present.
+ * @GST_DP_HEADER_FLAG_CRC_HEADER: a header CRC field is present.
+ * @GST_DP_HEADER_FLAG_CRC_PAYLOAD: a payload CRC field is present.
+ * @GST_DP_HEADER_FLAG_CRC: a CRC for header and payload is present.
+ *
+ * header flags for the dataprotocol.
+ */
+typedef enum {
+ GST_DP_HEADER_FLAG_NONE = 0,
+ GST_DP_HEADER_FLAG_CRC_HEADER = (1 << 0),
+ GST_DP_HEADER_FLAG_CRC_PAYLOAD = (1 << 1),
+ GST_DP_HEADER_FLAG_CRC = (1 << 1) | (1 << 0),
+} GstDPHeaderFlag;
+
+/**
+ * GstDPPayloadType:
+ * @GST_DP_PAYLOAD_NONE: Invalid payload type.
+ * @GST_DP_PAYLOAD_BUFFER: #GstBuffer payload packet.
+ * @GST_DP_PAYLOAD_CAPS: #GstCaps payload packet.
+ * @GST_DP_PAYLOAD_EVENT_NONE: First value of #GstEvent payload packets.
+ *
+ * The GDP payload types. a #GstEvent payload type is encoded with the
+ * event type number starting from @GST_DP_PAYLOAD_EVENT_NONE.
+ */
+typedef enum {
+ GST_DP_PAYLOAD_NONE = 0,
+ GST_DP_PAYLOAD_BUFFER,
+ GST_DP_PAYLOAD_CAPS,
+ GST_DP_PAYLOAD_EVENT_NONE = 64,
+} GstDPPayloadType;
+
+typedef gboolean (*GstDPHeaderFromBufferFunction) (const GstBuffer * buffer,
+ GstDPHeaderFlag flags,
+ guint * length,
+ guint8 ** header);
+typedef gboolean (*GstDPPacketFromCapsFunction) (const GstCaps * caps,
+ GstDPHeaderFlag flags,
+ guint * length,
+ guint8 ** header,
+ guint8 ** payload);
+typedef gboolean (*GstDPPacketFromEventFunction) (const GstEvent * event,
+ GstDPHeaderFlag flags,
+ guint * length,
+ guint8 ** header,
+ guint8 ** payload);
+
+/**
+ * GstDPPacketizer:
+ * @version: the #GstDPVersion of the protocol to be used
+ * @header_from_buffer: buffer serializer function
+ * @packet_from_caps: caps serializer function
+ * @packet_from_event: event serializer function
+ *
+ * Data protocol packetizer handle.
+ */
+typedef struct {
+ GstDPVersion version;
+
+ GstDPHeaderFromBufferFunction header_from_buffer;
+ GstDPPacketFromCapsFunction packet_from_caps;
+ GstDPPacketFromEventFunction packet_from_event;
+
+ /*< private >*/
+ gpointer _gst_reserved[GST_PADDING];
+} GstDPPacketizer;
+
+
+void gst_dp_init (void);
+
+/* packetizer */
+GstDPPacketizer *
+ gst_dp_packetizer_new (GstDPVersion version);
+void gst_dp_packetizer_free (GstDPPacketizer *packetizer);
+
+/* crc checksum */
+guint16 gst_dp_crc (const guint8 * buffer,
+ guint length);
+
+/* payload information from header */
+guint32 gst_dp_header_payload_length (const guint8 * header);
+GstDPPayloadType
+ gst_dp_header_payload_type (const guint8 * header);
+
+/* converting to GstBuffer/GstEvent/GstCaps */
+GstBuffer * gst_dp_buffer_from_header (guint header_length,
+ const guint8 * header);
+GstCaps * gst_dp_caps_from_packet (guint header_length,
+ const guint8 * header,
+ const guint8 * payload);
+GstEvent * gst_dp_event_from_packet (guint header_length,
+ const guint8 * header,
+ const guint8 * payload);
+
+/* validation */
+gboolean gst_dp_validate_header (guint header_length,
+ const guint8 * header);
+gboolean gst_dp_validate_payload (guint header_length,
+ const guint8 * header,
+ const guint8 * payload);
+gboolean gst_dp_validate_packet (guint header_length,
+ const guint8 * header,
+ const guint8 * payload);
+
+G_END_DECLS
+
+#endif /* __GST_DATA_PROTOCOL_H__ */
diff --git a/gst/gdp/dp-private.h b/gst/gdp/dp-private.h
new file mode 100644
index 00000000..8b5214e0
--- /dev/null
+++ b/gst/gdp/dp-private.h
@@ -0,0 +1,53 @@
+/* GStreamer
+ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
+ * Copyright (C) <2004> Thomas Vander Stichele <thomas at apestaart dot org>
+ *
+ * dp-private.h: private defines/macros for dataprotocol implementation
+ *
+ * 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_DP_PRIVATE_H__
+#define __GST_DP_PRIVATE_H__
+
+#include <gst/gstbuffer.h>
+#include <gst/gstevent.h>
+#include <gst/gstcaps.h>
+
+G_BEGIN_DECLS
+
+/* FIXME: please make the dataprotocol format typefindable in new versions */
+
+/* accessor defines */
+#define GST_DP_HEADER_MAJOR_VERSION(x) ((x)[0])
+#define GST_DP_HEADER_MINOR_VERSION(x) ((x)[1])
+#define GST_DP_HEADER_FLAGS(x) ((x)[2])
+/* free byte here to align */
+#define GST_DP_HEADER_PAYLOAD_TYPE(x) GST_READ_UINT16_BE (x + 4)
+#define GST_DP_HEADER_PAYLOAD_LENGTH(x) GST_READ_UINT32_BE (x + 6)
+#define GST_DP_HEADER_TIMESTAMP(x) GST_READ_UINT64_BE (x + 10)
+#define GST_DP_HEADER_DURATION(x) GST_READ_UINT64_BE (x + 18)
+#define GST_DP_HEADER_OFFSET(x) GST_READ_UINT64_BE (x + 26)
+#define GST_DP_HEADER_OFFSET_END(x) GST_READ_UINT64_BE (x + 34)
+#define GST_DP_HEADER_BUFFER_FLAGS(x) GST_READ_UINT16_BE (x + 42)
+#define GST_DP_HEADER_CRC_HEADER(x) GST_READ_UINT16_BE (x + 58)
+#define GST_DP_HEADER_CRC_PAYLOAD(x) GST_READ_UINT16_BE (x + 60)
+
+void gst_dp_dump_byte_array (guint8 *array, guint length);
+
+G_END_DECLS
+
+#endif /* __GST_DP_PRIVATE_H__ */
diff --git a/gst/gdp/gstgdp.c b/gst/gdp/gstgdp.c
new file mode 100644
index 00000000..a05b0bfc
--- /dev/null
+++ b/gst/gdp/gstgdp.c
@@ -0,0 +1,46 @@
+/* GStreamer
+ * Copyright (C) 2006 Thomas Vander Stichele <thomas at apestaart dot 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "dataprotocol.h"
+
+#include "gstgdppay.h"
+#include "gstgdpdepay.h"
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+ gst_dp_init ();
+
+ if (!gst_gdp_depay_plugin_init (plugin))
+ return FALSE;
+
+ if (!gst_gdp_pay_plugin_init (plugin))
+ return FALSE;
+
+ return TRUE;
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, GST_VERSION_MINOR,
+ gdp,
+ "Payload/depayload GDP packets", plugin_init,
+ VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN);
diff --git a/gst/gdp/gstgdpdepay.c b/gst/gdp/gstgdpdepay.c
new file mode 100644
index 00000000..4d03082e
--- /dev/null
+++ b/gst/gdp/gstgdpdepay.c
@@ -0,0 +1,479 @@
+/* GStreamer
+ * Copyright (C) 2006 Thomas Vander Stichele <thomas at apestaart dot 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.
+ */
+
+/**
+ * SECTION:element-gdpdepay
+ * @see_also: gdppay
+ *
+ * This element depayloads GStreamer Data Protocol buffers back to deserialized
+ * buffers and events.
+ *
+ * <refsect2>
+ * |[
+ * gst-launch -v -m filesrc location=test.gdp ! gdpdepay ! xvimagesink
+ * ]| This pipeline plays back a serialized video stream as created in the
+ * example for gdppay.
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+
+#include "dataprotocol.h"
+
+#include "gstgdpdepay.h"
+
+enum
+{
+ PROP_0,
+};
+
+static GstStaticPadTemplate gdp_depay_sink_template =
+GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("application/x-gdp"));
+
+static GstStaticPadTemplate gdp_depay_src_template =
+GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS_ANY);
+
+GST_DEBUG_CATEGORY_STATIC (gst_gdp_depay_debug);
+#define GST_CAT_DEFAULT gst_gdp_depay_debug
+
+#define _do_init \
+ GST_DEBUG_CATEGORY_INIT (gst_gdp_depay_debug, "gdpdepay", 0, \
+ "GDP depayloader");
+#define gst_gdp_depay_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstGDPDepay, gst_gdp_depay,
+ GST_TYPE_ELEMENT, _do_init);
+
+static gboolean gst_gdp_depay_sink_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
+static gboolean gst_gdp_depay_src_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
+
+static GstFlowReturn gst_gdp_depay_chain (GstPad * pad, GstObject * parent,
+ GstBuffer * buffer);
+
+static GstStateChangeReturn gst_gdp_depay_change_state (GstElement *
+ element, GstStateChange transition);
+
+static void gst_gdp_depay_finalize (GObject * object);
+
+static void
+gst_gdp_depay_class_init (GstGDPDepayClass * klass)
+{
+ GObjectClass *gobject_class;
+ GstElementClass *gstelement_class;
+
+ gobject_class = (GObjectClass *) klass;
+ gstelement_class = (GstElementClass *) klass;
+
+ gst_element_class_set_static_metadata (gstelement_class,
+ "GDP Depayloader", "GDP/Depayloader",
+ "Depayloads GStreamer Data Protocol buffers",
+ "Thomas Vander Stichele <thomas at apestaart dot org>");
+
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&gdp_depay_sink_template));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&gdp_depay_src_template));
+
+ gstelement_class->change_state =
+ GST_DEBUG_FUNCPTR (gst_gdp_depay_change_state);
+ gobject_class->finalize = gst_gdp_depay_finalize;
+}
+
+static void
+gst_gdp_depay_init (GstGDPDepay * gdpdepay)
+{
+ gdpdepay->sinkpad =
+ gst_pad_new_from_static_template (&gdp_depay_sink_template, "sink");
+ gst_pad_set_chain_function (gdpdepay->sinkpad,
+ GST_DEBUG_FUNCPTR (gst_gdp_depay_chain));
+ gst_pad_set_event_function (gdpdepay->sinkpad,
+ GST_DEBUG_FUNCPTR (gst_gdp_depay_sink_event));
+ gst_element_add_pad (GST_ELEMENT (gdpdepay), gdpdepay->sinkpad);
+
+ gdpdepay->srcpad =
+ gst_pad_new_from_static_template (&gdp_depay_src_template, "src");
+ gst_pad_set_event_function (gdpdepay->srcpad,
+ GST_DEBUG_FUNCPTR (gst_gdp_depay_src_event));
+ /* our caps will always be decided by the incoming GDP caps buffers */
+ gst_pad_use_fixed_caps (gdpdepay->srcpad);
+ gst_element_add_pad (GST_ELEMENT (gdpdepay), gdpdepay->srcpad);
+
+ gdpdepay->adapter = gst_adapter_new ();
+}
+
+static void
+gst_gdp_depay_finalize (GObject * gobject)
+{
+ GstGDPDepay *this;
+
+ this = GST_GDP_DEPAY (gobject);
+ if (this->caps)
+ gst_caps_unref (this->caps);
+ g_free (this->header);
+ gst_adapter_clear (this->adapter);
+ g_object_unref (this->adapter);
+
+ GST_CALL_PARENT (G_OBJECT_CLASS, finalize, (gobject));
+}
+
+static gboolean
+gst_gdp_depay_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+ GstGDPDepay *this;
+ gboolean res = TRUE;
+
+ this = GST_GDP_DEPAY (parent);
+
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_FLUSH_START:
+ /* forward flush start */
+ res = gst_pad_push_event (this->srcpad, event);
+ break;
+ case GST_EVENT_FLUSH_STOP:
+ /* clear adapter on flush */
+ gst_adapter_clear (this->adapter);
+ /* forward flush stop */
+ res = gst_pad_push_event (this->srcpad, event);
+ break;
+ case GST_EVENT_EOS:
+ /* after EOS, we don't expect to output anything anymore */
+ res = gst_pad_push_event (this->srcpad, event);
+ break;
+ case GST_EVENT_SEGMENT:
+ case GST_EVENT_TAG:
+ case GST_EVENT_BUFFERSIZE:
+ default:
+ /* we unref most events as we take them from the datastream */
+ gst_event_unref (event);
+ break;
+ }
+
+ return res;
+}
+
+static gboolean
+gst_gdp_depay_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+ GstGDPDepay *this;
+ gboolean res = TRUE;
+
+ this = GST_GDP_DEPAY (parent);
+
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_SEEK:
+ /* we refuse seek for now. */
+ gst_event_unref (event);
+ res = FALSE;
+ break;
+ case GST_EVENT_QOS:
+ case GST_EVENT_NAVIGATION:
+ default:
+ /* everything else is passed */
+ res = gst_pad_push_event (this->sinkpad, event);
+ break;
+ }
+
+ return res;
+}
+
+static GstFlowReturn
+gst_gdp_depay_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
+{
+ GstGDPDepay *this;
+ GstFlowReturn ret = GST_FLOW_OK;
+ GstCaps *caps;
+ GstBuffer *buf;
+ GstEvent *event;
+ guint available;
+
+ this = GST_GDP_DEPAY (parent);
+
+ /* On DISCONT, get rid of accumulated data. We assume a buffer after the
+ * DISCONT contains (part of) a new valid header, if not we error because we
+ * lost sync */
+ if (GST_BUFFER_IS_DISCONT (buffer)) {
+ gst_adapter_clear (this->adapter);
+ this->state = GST_GDP_DEPAY_STATE_HEADER;
+ }
+ gst_adapter_push (this->adapter, buffer);
+
+ while (TRUE) {
+ switch (this->state) {
+ case GST_GDP_DEPAY_STATE_HEADER:
+ {
+ guint8 *header;
+
+ /* collect a complete header, validate and store the header. Figure out
+ * the payload length and switch to the PAYLOAD state */
+ available = gst_adapter_available (this->adapter);
+ if (available < GST_DP_HEADER_LENGTH)
+ goto done;
+
+ GST_LOG_OBJECT (this, "reading GDP header from adapter");
+ header = gst_adapter_take (this->adapter, GST_DP_HEADER_LENGTH);
+ if (!gst_dp_validate_header (GST_DP_HEADER_LENGTH, header)) {
+ g_free (header);
+ goto header_validate_error;
+ }
+
+ /* store types and payload length. Also store the header, which we need
+ * to make the payload. */
+ this->payload_length = gst_dp_header_payload_length (header);
+ this->payload_type = gst_dp_header_payload_type (header);
+ /* free previous header and store new one. */
+ g_free (this->header);
+ this->header = header;
+
+ GST_LOG_OBJECT (this,
+ "read GDP header, payload size %d, payload type %d, switching to state PAYLOAD",
+ this->payload_length, this->payload_type);
+ this->state = GST_GDP_DEPAY_STATE_PAYLOAD;
+ break;
+ }
+ case GST_GDP_DEPAY_STATE_PAYLOAD:
+ {
+ /* in this state we wait for all the payload data to be available in the
+ * adapter. Then we switch to the state where we actually process the
+ * payload. */
+ available = gst_adapter_available (this->adapter);
+ if (available < this->payload_length)
+ goto done;
+
+ /* change state based on type */
+ if (this->payload_type == GST_DP_PAYLOAD_BUFFER) {
+ GST_LOG_OBJECT (this, "switching to state BUFFER");
+ this->state = GST_GDP_DEPAY_STATE_BUFFER;
+ } else if (this->payload_type == GST_DP_PAYLOAD_CAPS) {
+ GST_LOG_OBJECT (this, "switching to state CAPS");
+ this->state = GST_GDP_DEPAY_STATE_CAPS;
+ } else if (this->payload_type >= GST_DP_PAYLOAD_EVENT_NONE) {
+ GST_LOG_OBJECT (this, "switching to state EVENT");
+ this->state = GST_GDP_DEPAY_STATE_EVENT;
+ } else {
+ goto wrong_type;
+ }
+
+ if (this->payload_length) {
+ const guint8 *data;
+ gboolean res;
+
+ data = gst_adapter_map (this->adapter, this->payload_length);
+ res = gst_dp_validate_payload (GST_DP_HEADER_LENGTH, this->header,
+ data);
+ gst_adapter_unmap (this->adapter);
+
+ if (!res)
+ goto payload_validate_error;
+ }
+
+ break;
+ }
+ case GST_GDP_DEPAY_STATE_BUFFER:
+ {
+ /* if we receive a buffer without caps first, we error out */
+ if (!this->caps)
+ goto no_caps;
+
+ GST_LOG_OBJECT (this, "reading GDP buffer from adapter");
+ buf = gst_dp_buffer_from_header (GST_DP_HEADER_LENGTH, this->header);
+ if (!buf)
+ goto buffer_failed;
+
+ /* now take the payload if there is any */
+ if (this->payload_length > 0) {
+ GstMapInfo map;
+
+ gst_buffer_map (buf, &map, GST_MAP_WRITE);
+ gst_adapter_copy (this->adapter, map.data, 0, this->payload_length);
+ gst_buffer_unmap (buf, &map);
+
+ gst_adapter_flush (this->adapter, this->payload_length);
+ }
+
+ /* set caps and push */
+ GST_LOG_OBJECT (this, "deserialized buffer %p, pushing, timestamp %"
+ GST_TIME_FORMAT ", duration %" GST_TIME_FORMAT
+ ", offset %" G_GINT64_FORMAT ", offset_end %" G_GINT64_FORMAT
+ ", size %" G_GSIZE_FORMAT ", flags 0x%x",
+ buf,
+ GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
+ GST_TIME_ARGS (GST_BUFFER_DURATION (buf)),
+ GST_BUFFER_OFFSET (buf), GST_BUFFER_OFFSET_END (buf),
+ gst_buffer_get_size (buf), GST_BUFFER_FLAGS (buf));
+ ret = gst_pad_push (this->srcpad, buf);
+ if (ret != GST_FLOW_OK)
+ goto push_error;
+
+ GST_LOG_OBJECT (this, "switching to state HEADER");
+ this->state = GST_GDP_DEPAY_STATE_HEADER;
+ break;
+ }
+ case GST_GDP_DEPAY_STATE_CAPS:
+ {
+ guint8 *payload;
+
+ /* take the payload of the caps */
+ GST_LOG_OBJECT (this, "reading GDP caps from adapter");
+ payload = gst_adapter_take (this->adapter, this->payload_length);
+ caps = gst_dp_caps_from_packet (GST_DP_HEADER_LENGTH, this->header,
+ payload);
+ g_free (payload);
+ if (!caps)
+ goto caps_failed;
+
+ GST_DEBUG_OBJECT (this, "deserialized caps %" GST_PTR_FORMAT, caps);
+ gst_caps_replace (&(this->caps), caps);
+ gst_pad_set_caps (this->srcpad, caps);
+ /* drop the creation ref we still have */
+ gst_caps_unref (caps);
+
+ GST_LOG_OBJECT (this, "switching to state HEADER");
+ this->state = GST_GDP_DEPAY_STATE_HEADER;
+ break;
+ }
+ case GST_GDP_DEPAY_STATE_EVENT:
+ {
+ guint8 *payload;
+
+ GST_LOG_OBJECT (this, "reading GDP event from adapter");
+
+ /* adapter doesn't like 0 length payload */
+ if (this->payload_length > 0)
+ payload = gst_adapter_take (this->adapter, this->payload_length);
+ else
+ payload = NULL;
+ event = gst_dp_event_from_packet (GST_DP_HEADER_LENGTH, this->header,
+ payload);
+ g_free (payload);
+ if (!event)
+ goto event_failed;
+
+ GST_DEBUG_OBJECT (this, "deserialized event %p of type %s, pushing",
+ event, gst_event_type_get_name (event->type));
+ gst_pad_push_event (this->srcpad, event);
+
+ GST_LOG_OBJECT (this, "switching to state HEADER");
+ this->state = GST_GDP_DEPAY_STATE_HEADER;
+ break;
+ }
+ }
+ }
+
+done:
+ return ret;
+
+ /* ERRORS */
+header_validate_error:
+ {
+ GST_ELEMENT_ERROR (this, STREAM, DECODE, (NULL),
+ ("GDP packet header does not validate"));
+ ret = GST_FLOW_ERROR;
+ goto done;
+ }
+payload_validate_error:
+ {
+ GST_ELEMENT_ERROR (this, STREAM, DECODE, (NULL),
+ ("GDP packet payload does not validate"));
+ ret = GST_FLOW_ERROR;
+ goto done;
+ }
+wrong_type:
+ {
+ GST_ELEMENT_ERROR (this, STREAM, DECODE, (NULL),
+ ("GDP packet header is of wrong type"));
+ ret = GST_FLOW_ERROR;
+ goto done;
+ }
+no_caps:
+ {
+ GST_ELEMENT_ERROR (this, STREAM, DECODE, (NULL),
+ ("Received a buffer without first receiving caps"));
+ ret = GST_FLOW_NOT_NEGOTIATED;
+ goto done;
+ }
+buffer_failed:
+ {
+ GST_ELEMENT_ERROR (this, STREAM, DECODE, (NULL),
+ ("could not create buffer from GDP packet"));
+ ret = GST_FLOW_ERROR;
+ goto done;
+ }
+push_error:
+ {
+ GST_WARNING_OBJECT (this, "pushing depayloaded buffer returned %d", ret);
+ goto done;
+ }
+caps_failed:
+ {
+ GST_ELEMENT_ERROR (this, STREAM, DECODE, (NULL),
+ ("could not create caps from GDP packet"));
+ ret = GST_FLOW_ERROR;
+ goto done;
+ }
+event_failed:
+ {
+ GST_ELEMENT_ERROR (this, STREAM, DECODE, (NULL),
+ ("could not create event from GDP packet"));
+ ret = GST_FLOW_ERROR;
+ goto done;
+ }
+}
+
+static GstStateChangeReturn
+gst_gdp_depay_change_state (GstElement * element, GstStateChange transition)
+{
+ GstStateChangeReturn ret;
+ GstGDPDepay *this = GST_GDP_DEPAY (element);
+
+ ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+ switch (transition) {
+ case GST_STATE_CHANGE_PAUSED_TO_READY:
+ if (this->caps) {
+ gst_caps_unref (this->caps);
+ this->caps = NULL;
+ }
+ gst_adapter_clear (this->adapter);
+ break;
+ default:
+ break;
+ }
+ return ret;
+}
+
+gboolean
+gst_gdp_depay_plugin_init (GstPlugin * plugin)
+{
+ if (!gst_element_register (plugin, "gdpdepay", GST_RANK_NONE,
+ GST_TYPE_GDP_DEPAY))
+ return FALSE;
+
+ return TRUE;
+}
diff --git a/gst/gdp/gstgdpdepay.h b/gst/gdp/gstgdpdepay.h
new file mode 100644
index 00000000..64b7db24
--- /dev/null
+++ b/gst/gdp/gstgdpdepay.h
@@ -0,0 +1,82 @@
+/* GStreamer
+ * Copyright (C) 2006 Thomas Vander Stichele <thomas at apestaart dot 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.
+ */
+
+#ifndef __GST_GDP_DEPAY_H__
+#define __GST_GDP_DEPAY_H__
+
+#include <gst/gst.h>
+#include <gst/base/gstadapter.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_GDP_DEPAY \
+ (gst_gdp_depay_get_type())
+#define GST_GDP_DEPAY(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GDP_DEPAY,GstGDPDepay))
+#define GST_GDP_DEPAY_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_GDP_DEPAY,GstGDPDepayClass))
+#define GST_IS_GDP_DEPAY(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_GDP_DEPAY))
+#define GST_IS_GDP_DEPAY_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_GDP_DEPAY))
+
+typedef enum {
+ GST_GDP_DEPAY_STATE_HEADER = 0,
+ GST_GDP_DEPAY_STATE_PAYLOAD,
+ GST_GDP_DEPAY_STATE_BUFFER,
+ GST_GDP_DEPAY_STATE_CAPS,
+ GST_GDP_DEPAY_STATE_EVENT,
+} GstGDPDepayState;
+
+
+typedef struct _GstGDPDepay GstGDPDepay;
+typedef struct _GstGDPDepayClass GstGDPDepayClass;
+
+/**
+ * GstGDPDepay:
+ *
+ * Private gdpdepay element structure.
+ */
+struct _GstGDPDepay
+{
+ GstElement element;
+ GstPad *sinkpad;
+ GstPad *srcpad;
+
+ GstAdapter *adapter;
+ GstGDPDepayState state;
+ GstCaps *caps;
+
+ guint8 *header;
+ guint32 payload_length;
+ GstDPPayloadType payload_type;
+};
+
+struct _GstGDPDepayClass
+{
+ GstElementClass parent_class;
+};
+
+gboolean gst_gdp_depay_plugin_init (GstPlugin * plugin);
+
+GType gst_gdp_depay_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_GDP_DEPAY_H__ */
diff --git a/gst/gdp/gstgdppay.c b/gst/gdp/gstgdppay.c
new file mode 100644
index 00000000..d26c0a3c
--- /dev/null
+++ b/gst/gdp/gstgdppay.c
@@ -0,0 +1,864 @@
+/* GStreamer
+ * Copyright (C) 2006 Thomas Vander Stichele <thomas at apestaart dot 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.
+ */
+
+/**
+ * SECTION:element-gdppay
+ * @see_also: gdpdepay
+ *
+ * This element payloads GStreamer buffers and events using the
+ * GStreamer Data Protocol.
+ *
+ * <refsect2>
+ * |[
+ * gst-launch -v -m videotestsrc num-buffers=50 ! gdppay ! filesink location=test.gdp
+ * ]| This pipeline creates a serialized video stream that can be played back
+ * with the example shown in gdpdepay.
+ * </refsect2>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "dataprotocol.h"
+
+#include "gstgdppay.h"
+
+static GstStaticPadTemplate gdp_pay_sink_template =
+GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS_ANY);
+
+static GstStaticPadTemplate gdp_pay_src_template =
+GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("application/x-gdp"));
+
+GST_DEBUG_CATEGORY_STATIC (gst_gdp_pay_debug);
+#define GST_CAT_DEFAULT gst_gdp_pay_debug
+
+#define DEFAULT_CRC_HEADER TRUE
+#define DEFAULT_CRC_PAYLOAD FALSE
+#define DEFAULT_VERSION GST_DP_VERSION_1_0
+
+enum
+{
+ PROP_0,
+ PROP_CRC_HEADER,
+ PROP_CRC_PAYLOAD,
+ PROP_VERSION,
+};
+
+#define _do_init \
+ GST_DEBUG_CATEGORY_INIT (gst_gdp_pay_debug, "gdppay", 0, \
+ "GDP payloader");
+#define gst_gdp_pay_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstGDPPay, gst_gdp_pay, GST_TYPE_ELEMENT, _do_init);
+
+static void gst_gdp_pay_reset (GstGDPPay * this);
+
+static GstFlowReturn gst_gdp_pay_chain (GstPad * pad, GstObject * parent,
+ GstBuffer * buffer);
+static gboolean gst_gdp_pay_src_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
+static gboolean gst_gdp_pay_sink_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
+
+static GstStateChangeReturn gst_gdp_pay_change_state (GstElement *
+ element, GstStateChange transition);
+
+static void gst_gdp_pay_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec);
+static void gst_gdp_pay_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec);
+
+static void gst_gdp_pay_finalize (GObject * gobject);
+
+static void
+gst_gdp_pay_class_init (GstGDPPayClass * klass)
+{
+ GObjectClass *gobject_class;
+ GstElementClass *gstelement_class;
+
+ gobject_class = (GObjectClass *) klass;
+ gstelement_class = (GstElementClass *) klass;
+
+ gobject_class->set_property = gst_gdp_pay_set_property;
+ gobject_class->get_property = gst_gdp_pay_get_property;
+ gobject_class->finalize = gst_gdp_pay_finalize;
+
+ g_object_class_install_property (gobject_class, PROP_CRC_HEADER,
+ g_param_spec_boolean ("crc-header", "CRC Header",
+ "Calculate and store a CRC checksum on the header",
+ DEFAULT_CRC_HEADER, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (gobject_class, PROP_CRC_PAYLOAD,
+ g_param_spec_boolean ("crc-payload", "CRC Payload",
+ "Calculate and store a CRC checksum on the payload",
+ DEFAULT_CRC_PAYLOAD, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (gobject_class, PROP_VERSION,
+ g_param_spec_enum ("version", "Version",
+ "Version of the GStreamer Data Protocol",
+ GST_TYPE_DP_VERSION, DEFAULT_VERSION,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ gst_element_class_set_static_metadata (gstelement_class,
+ "GDP Payloader", "GDP/Payloader",
+ "Payloads GStreamer Data Protocol buffers",
+ "Thomas Vander Stichele <thomas at apestaart dot org>");
+
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&gdp_pay_sink_template));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&gdp_pay_src_template));
+
+ gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_gdp_pay_change_state);
+}
+
+static void
+gst_gdp_pay_init (GstGDPPay * gdppay)
+{
+ gdppay->sinkpad =
+ gst_pad_new_from_static_template (&gdp_pay_sink_template, "sink");
+ gst_pad_set_chain_function (gdppay->sinkpad,
+ GST_DEBUG_FUNCPTR (gst_gdp_pay_chain));
+ gst_pad_set_event_function (gdppay->sinkpad,
+ GST_DEBUG_FUNCPTR (gst_gdp_pay_sink_event));
+ gst_element_add_pad (GST_ELEMENT (gdppay), gdppay->sinkpad);
+
+ gdppay->srcpad =
+ gst_pad_new_from_static_template (&gdp_pay_src_template, "src");
+ gst_pad_set_event_function (gdppay->srcpad,
+ GST_DEBUG_FUNCPTR (gst_gdp_pay_src_event));
+ gst_element_add_pad (GST_ELEMENT (gdppay), gdppay->srcpad);
+
+ gdppay->crc_header = DEFAULT_CRC_HEADER;
+ gdppay->crc_payload = DEFAULT_CRC_PAYLOAD;
+ gdppay->header_flag = gdppay->crc_header | gdppay->crc_payload;
+ gdppay->version = DEFAULT_VERSION;
+ gdppay->offset = 0;
+
+ gdppay->packetizer = gst_dp_packetizer_new (gdppay->version);
+}
+
+static void
+gst_gdp_pay_finalize (GObject * gobject)
+{
+ GstGDPPay *this = GST_GDP_PAY (gobject);
+
+ gst_gdp_pay_reset (this);
+ gst_dp_packetizer_free (this->packetizer);
+
+ GST_CALL_PARENT (G_OBJECT_CLASS, finalize, (gobject));
+}
+
+static void
+gst_gdp_pay_reset (GstGDPPay * this)
+{
+ GST_DEBUG_OBJECT (this, "Resetting GDP object");
+ /* clear the queued buffers */
+ while (this->queue) {
+ GstBuffer *buffer;
+
+ buffer = GST_BUFFER_CAST (this->queue->data);
+
+ /* delete buffer from queue now */
+ this->queue = g_list_delete_link (this->queue, this->queue);
+
+ gst_buffer_unref (buffer);
+ }
+ if (this->caps) {
+ gst_caps_unref (this->caps);
+ this->caps = NULL;
+ }
+ if (this->caps_buf) {
+ gst_buffer_unref (this->caps_buf);
+ this->caps_buf = NULL;
+ }
+ if (this->tag_buf) {
+ gst_buffer_unref (this->tag_buf);
+ this->tag_buf = NULL;
+ }
+ if (this->new_segment_buf) {
+ gst_buffer_unref (this->new_segment_buf);
+ this->new_segment_buf = NULL;
+ }
+ this->sent_streamheader = FALSE;
+ this->offset = 0;
+}
+
+/* set OFFSET and OFFSET_END with running count */
+static void
+gst_gdp_stamp_buffer (GstGDPPay * this, GstBuffer * buffer)
+{
+ GST_BUFFER_OFFSET (buffer) = this->offset;
+ GST_BUFFER_OFFSET_END (buffer) = this->offset + gst_buffer_get_size (buffer);
+ this->offset = GST_BUFFER_OFFSET_END (buffer);
+}
+
+static GstBuffer *
+gst_gdp_buffer_from_caps (GstGDPPay * this, GstCaps * caps)
+{
+ GstBuffer *headerbuf;
+ GstBuffer *payloadbuf;
+ guint8 *header, *payload;
+ guint len, plen;
+
+ if (!this->packetizer->packet_from_caps (caps, this->header_flag, &len,
+ &header, &payload))
+ goto packet_failed;
+
+ GST_LOG_OBJECT (this, "creating GDP header and payload buffer from caps");
+ headerbuf = gst_buffer_new_wrapped (header, len);
+
+ plen = gst_dp_header_payload_length (header);
+ payloadbuf = gst_buffer_new_wrapped (payload, plen);
+
+ return gst_buffer_append (headerbuf, payloadbuf);
+
+ /* ERRORS */
+packet_failed:
+ {
+ GST_WARNING_OBJECT (this, "could not create GDP header from caps");
+ return NULL;
+ }
+}
+
+static GstBuffer *
+gst_gdp_pay_buffer_from_buffer (GstGDPPay * this, GstBuffer * buffer)
+{
+ GstBuffer *headerbuf;
+ guint8 *header;
+ guint len;
+
+ if (!this->packetizer->header_from_buffer (buffer, this->header_flag, &len,
+ &header))
+ goto no_buffer;
+
+ GST_LOG_OBJECT (this, "creating GDP header and payload buffer from buffer");
+ headerbuf = gst_buffer_new_wrapped (header, len);
+
+ /* we do not want to lose the ref on the incoming buffer */
+ gst_buffer_ref (buffer);
+
+ return gst_buffer_append (headerbuf, buffer);
+
+ /* ERRORS */
+no_buffer:
+ {
+ GST_WARNING_OBJECT (this, "could not create GDP header from buffer");
+ return NULL;
+ }
+}
+
+static GstBuffer *
+gst_gdp_buffer_from_event (GstGDPPay * this, GstEvent * event)
+{
+ GstBuffer *headerbuf;
+ GstBuffer *payloadbuf;
+ guint8 *header, *payload;
+ guint len, plen;
+ gboolean ret;
+
+ ret =
+ this->packetizer->packet_from_event (event, this->header_flag, &len,
+ &header, &payload);
+ if (!ret)
+ goto no_event;
+
+ GST_LOG_OBJECT (this, "creating GDP header and payload buffer from event");
+ headerbuf = gst_buffer_new_wrapped (header, len);
+
+ payloadbuf = gst_buffer_new ();
+ plen = gst_dp_header_payload_length (header);
+ if (plen && payload != NULL) {
+ gst_buffer_append_memory (payloadbuf,
+ gst_memory_new_wrapped (0, payload, plen, 0, plen, payload, g_free));
+ }
+
+ return gst_buffer_append (headerbuf, payloadbuf);
+
+ /* ERRORS */
+no_event:
+ {
+ GST_WARNING_OBJECT (this, "could not create GDP header from event %s (%d)",
+ gst_event_type_get_name (event->type), event->type);
+ return NULL;
+ }
+}
+
+
+/* set our caps with streamheader, based on the latest newsegment and caps,
+ * and (possibly) GDP-serialized buffers of the streamheaders on the src pad */
+static GstFlowReturn
+gst_gdp_pay_reset_streamheader (GstGDPPay * this)
+{
+ GstCaps *caps;
+ /* We use copies of these to avoid circular refcounts */
+ GstBuffer *new_segment_buf, *caps_buf, *tag_buf;
+ GstStructure *structure;
+ GstFlowReturn r = GST_FLOW_OK;
+ gboolean version_one_zero = TRUE;
+
+ GValue array = { 0 };
+ GValue value = { 0 };
+
+ GST_DEBUG_OBJECT (this, "start");
+ /* In version 0.2, we didn't need or send new segment or tags */
+ if (this->version == GST_DP_VERSION_0_2)
+ version_one_zero = FALSE;
+
+ if (version_one_zero) {
+ if (!this->new_segment_buf || !this->caps_buf) {
+ GST_DEBUG_OBJECT (this, "1.0, missing new_segment or caps, returning");
+ return GST_FLOW_OK;
+ }
+ } else {
+ if (!this->caps_buf) {
+ GST_DEBUG_OBJECT (this, "0.2, missing caps, returning");
+ return GST_FLOW_OK;
+ }
+ }
+
+ /* put copies of the buffers in a fixed list
+ * Stamp the buffers with offset and offset_end as well.
+ * We do this here so the offsets match the order the buffers go out in */
+ g_value_init (&array, GST_TYPE_ARRAY);
+
+ if (version_one_zero) {
+ gst_gdp_stamp_buffer (this, this->new_segment_buf);
+ GST_DEBUG_OBJECT (this, "1.0, appending copy of new segment buffer %p",
+ this->new_segment_buf);
+ new_segment_buf = gst_buffer_copy (this->new_segment_buf);
+ g_value_init (&value, GST_TYPE_BUFFER);
+ gst_value_set_buffer (&value, new_segment_buf);
+ gst_value_array_append_value (&array, &value);
+ g_value_unset (&value);
+ gst_buffer_unref (new_segment_buf);
+
+ if (this->tag_buf) {
+ gst_gdp_stamp_buffer (this, this->tag_buf);
+ GST_DEBUG_OBJECT (this, "1.0, appending current tags buffer %p",
+ this->tag_buf);
+ tag_buf = this->tag_buf;
+ this->tag_buf = NULL;
+
+ g_value_init (&value, GST_TYPE_BUFFER);
+ gst_value_set_buffer (&value, tag_buf);
+ gst_value_array_append_value (&array, &value);
+ g_value_unset (&value);
+ gst_buffer_unref (tag_buf);
+ }
+ }
+
+ gst_gdp_stamp_buffer (this, this->caps_buf);
+ GST_DEBUG_OBJECT (this, "appending copy of caps buffer %p", this->caps_buf);
+ caps_buf = gst_buffer_copy (this->caps_buf);
+ g_value_init (&value, GST_TYPE_BUFFER);
+ gst_value_set_buffer (&value, caps_buf);
+ gst_value_array_append_value (&array, &value);
+ g_value_unset (&value);
+ gst_buffer_unref (caps_buf);
+
+ /* we also need to add GDP serializations of the streamheaders of the
+ * incoming caps */
+ structure = gst_caps_get_structure (this->caps, 0);
+ if (gst_structure_has_field (structure, "streamheader")) {
+ const GValue *sh;
+
+ GArray *buffers;
+
+ GstBuffer *buffer;
+
+ int i;
+
+ sh = gst_structure_get_value (structure, "streamheader");
+ buffers = g_value_peek_pointer (sh);
+ GST_DEBUG_OBJECT (this,
+ "Need to serialize %d incoming streamheader buffers on ours",
+ buffers->len);
+ for (i = 0; i < buffers->len; ++i) {
+ GValue *bufval;
+
+ GstBuffer *outbuffer;
+
+ bufval = &g_array_index (buffers, GValue, i);
+ buffer = g_value_peek_pointer (bufval);
+ /* this buffer is deserialized by gdpdepay as a regular buffer,
+ it needs HEADER, because it's a streamheader - otherwise it
+ is mixed with regular data buffers */
+ GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_HEADER);
+ GST_BUFFER_OFFSET (buffer) = GST_BUFFER_OFFSET_NONE;
+ GST_BUFFER_OFFSET_END (buffer) = GST_BUFFER_OFFSET_NONE;
+ GST_BUFFER_TIMESTAMP (buffer) = GST_CLOCK_TIME_NONE;
+
+ outbuffer = gst_gdp_pay_buffer_from_buffer (this, buffer);
+ if (!outbuffer) {
+ g_value_unset (&array);
+ goto no_buffer;
+ }
+
+ /* Setting HEADER as other GDP event buffers */
+ GST_DEBUG_OBJECT (this,
+ "Setting HEADER flag on outgoing buffer %" GST_PTR_FORMAT, outbuffer);
+ GST_BUFFER_FLAG_SET (outbuffer, GST_BUFFER_FLAG_HEADER);
+ GST_BUFFER_OFFSET (outbuffer) = GST_BUFFER_OFFSET_NONE;
+ GST_BUFFER_OFFSET_END (outbuffer) = GST_BUFFER_OFFSET_NONE;
+ GST_BUFFER_TIMESTAMP (outbuffer) = GST_CLOCK_TIME_NONE;
+
+ g_value_init (&value, GST_TYPE_BUFFER);
+ gst_value_set_buffer (&value, outbuffer);
+ gst_value_array_append_value (&array, &value);
+ g_value_unset (&value);
+
+ gst_buffer_unref (outbuffer);
+ }
+ } else {
+ GST_DEBUG_OBJECT (this, "no streamheader to serialize");
+ }
+
+ GST_DEBUG_OBJECT (this, "%d serialized buffers on streamheaders",
+ gst_value_array_get_size (&array));
+ caps = gst_caps_from_string ("application/x-gdp");
+ structure = gst_caps_get_structure (caps, 0);
+
+ gst_structure_set_value (structure, "streamheader", &array);
+ g_value_unset (&array);
+
+ GST_DEBUG_OBJECT (this, "Setting caps on src pad %" GST_PTR_FORMAT, caps);
+ gst_pad_set_caps (this->srcpad, caps);
+
+ /* if these are our first ever buffers, send out new_segment first */
+ if (!this->sent_streamheader) {
+ GstEvent *event;
+ GstSegment segment;
+
+ gst_segment_init (&segment, GST_FORMAT_BYTES);
+ event = gst_event_new_segment (&segment);
+
+ GST_DEBUG_OBJECT (this, "Sending out new_segment event %p", event);
+ if (!gst_pad_push_event (this->srcpad, event)) {
+ GST_WARNING_OBJECT (this, "pushing new segment failed");
+ r = GST_FLOW_ERROR;
+ goto done;
+ }
+ }
+
+ /* push out these streamheader buffers, then flush our internal queue */
+ GST_DEBUG_OBJECT (this, "Pushing GDP new_segment buffer %p with offset %"
+ G_GINT64_FORMAT ", offset_end %" G_GINT64_FORMAT, this->new_segment_buf,
+ GST_BUFFER_OFFSET (this->new_segment_buf),
+ GST_BUFFER_OFFSET_END (this->new_segment_buf));
+ /* we stored these bufs with refcount 1, so make sure we keep a ref */
+ r = gst_pad_push (this->srcpad, gst_buffer_ref (this->new_segment_buf));
+ if (r != GST_FLOW_OK) {
+ GST_WARNING_OBJECT (this, "pushing GDP newsegment buffer returned %d", r);
+ goto done;
+ }
+ if (this->tag_buf) {
+ GST_DEBUG_OBJECT (this, "Pushing GDP tag buffer %p", this->tag_buf);
+ /* we stored these bufs with refcount 1, so make sure we keep a ref */
+ r = gst_pad_push (this->srcpad, gst_buffer_ref (this->tag_buf));
+ if (r != GST_FLOW_OK) {
+ GST_WARNING_OBJECT (this, "pushing GDP tag buffer returned %d", r);
+ goto done;
+ }
+ }
+ GST_DEBUG_OBJECT (this, "Pushing GDP caps buffer %p", this->caps_buf);
+ r = gst_pad_push (this->srcpad, gst_buffer_ref (this->caps_buf));
+ if (r != GST_FLOW_OK) {
+ GST_WARNING_OBJECT (this, "pushing GDP caps buffer returned %d", r);
+ goto done;
+ }
+ this->sent_streamheader = TRUE;
+ GST_DEBUG_OBJECT (this, "need to push %d queued buffers",
+ g_list_length (this->queue));
+ while (this->queue) {
+ GstBuffer *buffer;
+
+ buffer = GST_BUFFER_CAST (this->queue->data);
+ GST_DEBUG_OBJECT (this, "Pushing queued GDP buffer %p", buffer);
+
+ /* delete buffer from queue now */
+ this->queue = g_list_delete_link (this->queue, this->queue);
+
+ /* set caps and push */
+ r = gst_pad_push (this->srcpad, buffer);
+ if (r != GST_FLOW_OK) {
+ GST_WARNING_OBJECT (this, "pushing queued GDP buffer returned %d", r);
+ goto done;
+ }
+ }
+
+done:
+ gst_caps_unref (caps);
+ GST_DEBUG_OBJECT (this, "stop");
+ return r;
+
+ /* ERRORS */
+no_buffer:
+ {
+ GST_ELEMENT_ERROR (this, STREAM, FORMAT, (NULL),
+ ("failed to create GDP buffer from streamheader"));
+ return GST_FLOW_ERROR;
+ }
+}
+
+/* queue a buffer internally if we haven't sent streamheader buffers yet;
+ * otherwise, just push on, this takes ownership of the buffer. */
+static GstFlowReturn
+gst_gdp_queue_buffer (GstGDPPay * this, GstBuffer * buffer)
+{
+ if (this->sent_streamheader) {
+ GST_LOG_OBJECT (this, "Pushing GDP buffer %p, caps %" GST_PTR_FORMAT,
+ buffer, this->caps);
+ return gst_pad_push (this->srcpad, buffer);
+ }
+
+ /* store it on an internal queue. buffer remains reffed. */
+ this->queue = g_list_append (this->queue, buffer);
+ GST_DEBUG_OBJECT (this, "streamheader not sent yet, "
+ "queued buffer %p, now %d buffers queued",
+ buffer, g_list_length (this->queue));
+
+ gst_gdp_pay_reset_streamheader (this);
+
+ return GST_FLOW_OK;
+}
+
+static GstFlowReturn
+gst_gdp_pay_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
+{
+ GstGDPPay *this;
+#if 0
+ GstCaps *caps;
+#endif
+ GstBuffer *outbuffer;
+ GstFlowReturn ret;
+
+ this = GST_GDP_PAY (parent);
+
+ /* we should have received a new_segment before, otherwise it's a bug.
+ * fake one in that case */
+ if (!this->new_segment_buf) {
+ GstEvent *event;
+ GstSegment segment;
+
+ GST_WARNING_OBJECT (this,
+ "did not receive new-segment before first buffer");
+ gst_segment_init (&segment, GST_FORMAT_BYTES);
+ event = gst_event_new_segment (&segment);
+ outbuffer = gst_gdp_buffer_from_event (this, event);
+ gst_event_unref (event);
+
+ /* GDP 0.2 doesn't know about new-segment, so this is not fatal */
+ if (!outbuffer) {
+ GST_ELEMENT_WARNING (this, STREAM, ENCODE, (NULL),
+ ("Could not create GDP buffer from new segment event"));
+ } else {
+ GST_BUFFER_TIMESTAMP (outbuffer) = GST_BUFFER_TIMESTAMP (buffer);
+ GST_BUFFER_DURATION (outbuffer) = 0;
+ GST_BUFFER_FLAG_SET (outbuffer, GST_BUFFER_FLAG_HEADER);
+ GST_DEBUG_OBJECT (this, "Storing buffer %p as new_segment_buf",
+ outbuffer);
+ this->new_segment_buf = outbuffer;
+ }
+ }
+ /* make sure we've received caps before */
+ if (!this->caps)
+ goto no_caps;
+
+ /* create a GDP header packet,
+ * then create a GST buffer of the header packet and the buffer contents */
+ outbuffer = gst_gdp_pay_buffer_from_buffer (this, buffer);
+ if (!outbuffer)
+ goto no_buffer;
+
+ /* If the incoming buffer is HEADER, that means we have it on the caps
+ * as streamheader, and we have serialized a GDP version of it and put it
+ * on our caps */
+ if (GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_HEADER)) {
+ GST_DEBUG_OBJECT (this, "Setting HEADER flag on outgoing buffer %p",
+ outbuffer);
+ GST_BUFFER_FLAG_SET (outbuffer, GST_BUFFER_FLAG_HEADER);
+ }
+
+ gst_gdp_stamp_buffer (this, outbuffer);
+ GST_BUFFER_TIMESTAMP (outbuffer) = GST_BUFFER_TIMESTAMP (buffer);
+ GST_BUFFER_DURATION (outbuffer) = GST_BUFFER_DURATION (buffer);
+
+ ret = gst_gdp_queue_buffer (this, outbuffer);
+
+done:
+ gst_buffer_unref (buffer);
+
+ return ret;
+
+ /* ERRORS */
+no_caps:
+ {
+ /* when returning a fatal error as a GstFlowReturn we must post an error
+ * message */
+ GST_ELEMENT_ERROR (this, STREAM, FORMAT, (NULL),
+ ("first received buffer does not have caps set"));
+ ret = GST_FLOW_NOT_NEGOTIATED;
+ goto done;
+ }
+#if 0
+no_caps_buffer:
+ {
+ GST_ELEMENT_ERROR (this, STREAM, ENCODE, (NULL),
+ ("Could not create GDP buffer from caps %" GST_PTR_FORMAT, caps));
+ gst_caps_unref (caps);
+ ret = GST_FLOW_ERROR;
+ goto done;
+ }
+#endif
+no_buffer:
+ {
+ GST_ELEMENT_ERROR (this, STREAM, ENCODE, (NULL),
+ ("Could not create GDP buffer from buffer"));
+ ret = GST_FLOW_ERROR;
+ goto done;
+ }
+}
+
+static gboolean
+gst_gdp_pay_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+ GstBuffer *outbuffer;
+ GstGDPPay *this = GST_GDP_PAY (parent);
+ GstFlowReturn flowret;
+ GstCaps *caps;
+ gboolean ret = TRUE;
+
+ GST_DEBUG_OBJECT (this, "received event %p of type %s (%d)",
+ event, gst_event_type_get_name (event->type), event->type);
+
+ /* now turn the event into a buffer */
+ outbuffer = gst_gdp_buffer_from_event (this, event);
+ if (!outbuffer)
+ goto no_outbuffer;
+
+ GST_BUFFER_TIMESTAMP (outbuffer) = GST_EVENT_TIMESTAMP (event);
+ GST_BUFFER_DURATION (outbuffer) = 0;
+
+ /* if we got a new segment or tag event, we should put it on our streamheader,
+ * and not send it on */
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_SEGMENT:
+ GST_DEBUG_OBJECT (this, "Storing in caps buffer %p as new_segment_buf",
+ outbuffer);
+
+ if (this->new_segment_buf)
+ gst_buffer_unref (this->new_segment_buf);
+ this->new_segment_buf = outbuffer;
+
+ GST_BUFFER_FLAG_SET (outbuffer, GST_BUFFER_FLAG_HEADER);
+ gst_gdp_pay_reset_streamheader (this);
+ break;
+ case GST_EVENT_CAPS:{
+ gst_event_parse_caps (event, &caps);
+ if (this->caps == NULL || !gst_caps_is_equal (this->caps, caps)) {
+ GST_INFO_OBJECT (pad, "caps changed to %" GST_PTR_FORMAT, caps);
+ gst_buffer_replace (&outbuffer, NULL);
+ gst_caps_replace (&this->caps, caps);
+ outbuffer = gst_gdp_buffer_from_caps (this, caps);
+ if (outbuffer == NULL)
+ goto no_buffer_from_caps;
+
+ GST_BUFFER_DURATION (outbuffer) = 0;
+ GST_BUFFER_FLAG_SET (outbuffer, GST_BUFFER_FLAG_HEADER);
+ if (this->caps_buf)
+ gst_buffer_unref (this->caps_buf);
+ this->caps_buf = outbuffer;
+ gst_gdp_pay_reset_streamheader (this);
+ }
+ break;
+ }
+ case GST_EVENT_TAG:
+ GST_DEBUG_OBJECT (this, "Storing in caps buffer %p as tag_buf",
+ outbuffer);
+
+ if (this->tag_buf)
+ gst_buffer_unref (this->tag_buf);
+ this->tag_buf = outbuffer;
+
+ GST_BUFFER_FLAG_SET (outbuffer, GST_BUFFER_FLAG_HEADER);
+ gst_gdp_pay_reset_streamheader (this);
+ break;
+ default:
+ GST_DEBUG_OBJECT (this, "queuing GDP buffer %p of event %p", outbuffer,
+ event);
+ flowret = gst_gdp_queue_buffer (this, outbuffer);
+ if (flowret != GST_FLOW_OK)
+ goto push_error;
+ break;
+ }
+
+ /* if we have EOS, we should send on EOS ourselves */
+ if (GST_EVENT_TYPE (event) == GST_EVENT_EOS) {
+ GST_DEBUG_OBJECT (this, "Sending on EOS event %p", event);
+ /* ref, we unref later again */
+ ret = gst_pad_push_event (this->srcpad, gst_event_ref (event));
+ }
+
+done:
+ gst_event_unref (event);
+
+ return ret;
+
+ /* ERRORS */
+no_outbuffer:
+ {
+ GST_ELEMENT_WARNING (this, STREAM, ENCODE, (NULL),
+ ("Could not create GDP buffer from received event (type %s)",
+ gst_event_type_get_name (event->type)));
+ ret = FALSE;
+ goto done;
+ }
+no_buffer_from_caps:
+ {
+ GST_ELEMENT_ERROR (this, STREAM, ENCODE, (NULL),
+ ("Could not create GDP buffer from caps %" GST_PTR_FORMAT, caps));
+ ret = FALSE;
+ goto done;
+ }
+push_error:
+ {
+ GST_WARNING_OBJECT (this, "queueing GDP event buffer returned %d", flowret);
+ ret = FALSE;
+ goto done;
+ }
+}
+
+static gboolean
+gst_gdp_pay_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+ GstGDPPay *this;
+ gboolean res = TRUE;
+
+ this = GST_GDP_PAY (parent);
+
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_SEEK:
+ /* we refuse seek for now. */
+ gst_event_unref (event);
+ res = FALSE;
+ break;
+ case GST_EVENT_QOS:
+ case GST_EVENT_NAVIGATION:
+ default:
+ /* everything else is passed */
+ res = gst_pad_push_event (this->sinkpad, event);
+ break;
+ }
+
+ return res;
+}
+
+static void
+gst_gdp_pay_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec)
+{
+ GstGDPPay *this;
+
+ g_return_if_fail (GST_IS_GDP_PAY (object));
+ this = GST_GDP_PAY (object);
+
+ switch (prop_id) {
+ case PROP_CRC_HEADER:
+ this->crc_header =
+ g_value_get_boolean (value) ? GST_DP_HEADER_FLAG_CRC_HEADER : 0;
+ this->header_flag = this->crc_header | this->crc_payload;
+ break;
+ case PROP_CRC_PAYLOAD:
+ this->crc_payload =
+ g_value_get_boolean (value) ? GST_DP_HEADER_FLAG_CRC_PAYLOAD : 0;
+ this->header_flag = this->crc_header | this->crc_payload;
+ break;
+ case PROP_VERSION:
+ this->version = g_value_get_enum (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gst_gdp_pay_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec)
+{
+ GstGDPPay *this;
+
+ g_return_if_fail (GST_IS_GDP_PAY (object));
+ this = GST_GDP_PAY (object);
+
+ switch (prop_id) {
+ case PROP_CRC_HEADER:
+ g_value_set_boolean (value, this->crc_header);
+ break;
+ case PROP_CRC_PAYLOAD:
+ g_value_set_boolean (value, this->crc_payload);
+ break;
+ case PROP_VERSION:
+ g_value_set_enum (value, this->version);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static GstStateChangeReturn
+gst_gdp_pay_change_state (GstElement * element, GstStateChange transition)
+{
+ GstStateChangeReturn ret;
+ GstGDPPay *this = GST_GDP_PAY (element);
+
+ switch (transition) {
+ case GST_STATE_CHANGE_READY_TO_PAUSED:
+ break;
+ default:
+ break;
+ }
+
+ ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+
+ switch (transition) {
+ case GST_STATE_CHANGE_PAUSED_TO_READY:
+ gst_gdp_pay_reset (this);
+ break;
+ default:
+ break;
+ }
+
+ return ret;
+}
+
+gboolean
+gst_gdp_pay_plugin_init (GstPlugin * plugin)
+{
+ if (!gst_element_register (plugin, "gdppay", GST_RANK_NONE, GST_TYPE_GDP_PAY))
+ return FALSE;
+
+ return TRUE;
+}
diff --git a/gst/gdp/gstgdppay.h b/gst/gdp/gstgdppay.h
new file mode 100644
index 00000000..3e280b56
--- /dev/null
+++ b/gst/gdp/gstgdppay.h
@@ -0,0 +1,81 @@
+/* GStreamer
+ * Copyright (C) 2006 Thomas Vander Stichele <thomas at apestaart dot 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.
+ */
+
+#ifndef __GST_GDP_PAY_H__
+#define __GST_GDP_PAY_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_GDP_PAY \
+ (gst_gdp_pay_get_type())
+#define GST_GDP_PAY(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GDP_PAY,GstGDPPay))
+#define GST_GDP_PAY_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_GDP_PAY,GstGDPPayClass))
+#define GST_IS_GDP_PAY(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_GDP_PAY))
+#define GST_IS_GDP_PAY_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_GDP_PAY))
+
+typedef struct _GstGDPPay GstGDPPay;
+typedef struct _GstGDPPayClass GstGDPPayClass;
+
+/**
+ * GstGDPPay:
+ *
+ * Private gdppay element structure.
+ */
+struct _GstGDPPay
+{
+ GstElement element;
+
+ GstPad *sinkpad;
+ GstPad *srcpad;
+
+ GstCaps *caps; /* incoming caps */
+
+ GstBuffer *caps_buf;
+ GstBuffer *new_segment_buf;
+ GstBuffer *tag_buf;
+
+ gboolean sent_streamheader; /* TRUE after the first streamheaders are sent */
+ GList *queue; /* list of queued buffers before streamheaders are sent */
+ guint64 offset;
+
+ gboolean crc_header;
+ gboolean crc_payload;
+ GstDPHeaderFlag header_flag;
+ GstDPVersion version;
+ GstDPPacketizer *packetizer;
+};
+
+struct _GstGDPPayClass
+{
+ GstElementClass parent_class;
+};
+
+gboolean gst_gdp_pay_plugin_init (GstPlugin * plugin);
+
+GType gst_gdp_pay_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_GDP_PAY_H__ */
diff --git a/gst/geometrictransform/Makefile.in b/gst/geometrictransform/Makefile.in
index 1d43b1e8..3b1a3d6c 100644
--- a/gst/geometrictransform/Makefile.in
+++ b/gst/geometrictransform/Makefile.in
@@ -363,6 +363,8 @@ 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@
@@ -370,6 +372,8 @@ 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@
@@ -384,7 +388,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -412,6 +415,10 @@ 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@
@@ -538,6 +545,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/hdvparse/Makefile.in b/gst/hdvparse/Makefile.in
index e00625a3..49c06bb9 100644
--- a/gst/hdvparse/Makefile.in
+++ b/gst/hdvparse/Makefile.in
@@ -341,6 +341,8 @@ 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@
@@ -348,6 +350,8 @@ 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@
@@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -390,6 +393,10 @@ 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@
@@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/hls/Makefile.am b/gst/hls/Makefile.am
index 05f0ac89..e5161174 100644
--- a/gst/hls/Makefile.am
+++ b/gst/hls/Makefile.am
@@ -1,6 +1,9 @@
plugin_LTLIBRARIES = libgstfragmented.la
+# FIXME: hlssink
+# gsthlssink.c
+# gstm3u8playlist.c
libgstfragmented_la_SOURCES = \
m3u8.c \
gsthlsdemux.c \
@@ -8,17 +11,21 @@ libgstfragmented_la_SOURCES = \
gsturidownloader.c \
gstfragmentedplugin.c
-libgstfragmented_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(SOUP_CFLAGS)
-libgstfragmented_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(SOUP_LIBS)
+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_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -no-undefined
libgstfragmented_la_LIBTOOLFLAGS = --tag=disable-static
# headers we need but don't want installed
+#
+# gstm3u8playlist.h
+# gsthlssink.h
noinst_HEADERS = \
- gstfragmented.h \
- gstfragment.h \
+ gstfragmented.h \
+ gstfragment.h \
gsthlsdemux.h \
- gsturidownloader.h \
+ gsturidownloader.h \
m3u8.h
Android.mk: Makefile.am $(BUILT_SOURCES)
diff --git a/gst/hls/Makefile.in b/gst/hls/Makefile.in
index 7e150f13..1974a1f2 100644
--- a/gst/hls/Makefile.in
+++ b/gst/hls/Makefile.in
@@ -128,7 +128,7 @@ 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_libgstfragmented_la_OBJECTS = libgstfragmented_la-m3u8.lo \
libgstfragmented_la-gsthlsdemux.lo \
libgstfragmented_la-gstfragment.lo \
@@ -345,6 +345,8 @@ 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@
@@ -352,6 +354,8 @@ 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@
@@ -366,7 +370,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -394,6 +397,10 @@ 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@
@@ -520,6 +527,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
@@ -607,6 +615,10 @@ top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
plugin_LTLIBRARIES = libgstfragmented.la
+
+# FIXME: hlssink
+# gsthlssink.c
+# gstm3u8playlist.c
libgstfragmented_la_SOURCES = \
m3u8.c \
gsthlsdemux.c \
@@ -614,17 +626,21 @@ libgstfragmented_la_SOURCES = \
gsturidownloader.c \
gstfragmentedplugin.c
-libgstfragmented_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(SOUP_CFLAGS)
-libgstfragmented_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) $(SOUP_LIBS)
+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_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -no-undefined
libgstfragmented_la_LIBTOOLFLAGS = --tag=disable-static
# headers we need but don't want installed
+#
+# gstm3u8playlist.h
+# gsthlssink.h
noinst_HEADERS = \
- gstfragmented.h \
- gstfragment.h \
+ gstfragmented.h \
+ gstfragment.h \
gsthlsdemux.h \
- gsturidownloader.h \
+ gsturidownloader.h \
m3u8.h
all: all-am
diff --git a/gst/hls/gstfragmentedplugin.c b/gst/hls/gstfragmentedplugin.c
index a067a9e5..f5650293 100644
--- a/gst/hls/gstfragmentedplugin.c
+++ b/gst/hls/gstfragmentedplugin.c
@@ -6,6 +6,9 @@
#include "gstfragmented.h"
#include "gsthlsdemux.h"
+#if 0
+#include "gsthlssink.h"
+#endif
GST_DEBUG_CATEGORY (fragmented_debug);
@@ -17,6 +20,12 @@ fragmented_init (GstPlugin * plugin)
if (!gst_element_register (plugin, "hlsdemux", GST_RANK_PRIMARY,
GST_TYPE_HLS_DEMUX) || FALSE)
return FALSE;
+
+#if 0
+ if (!gst_hls_sink_plugin_init (plugin))
+ return FALSE;
+#endif
+
return TRUE;
}
diff --git a/gst/hls/gsthlsdemux.c b/gst/hls/gsthlsdemux.c
index ba9c4d9d..51d4d68a 100644
--- a/gst/hls/gsthlsdemux.c
+++ b/gst/hls/gsthlsdemux.c
@@ -902,8 +902,7 @@ gst_hls_demux_cache_fragments (GstHLSDemux * demux)
GST_TIME_ARGS (duration));
if (duration != GST_CLOCK_TIME_NONE)
gst_element_post_message (GST_ELEMENT (demux),
- gst_message_new_duration (GST_OBJECT (demux),
- GST_FORMAT_TIME, duration));
+ gst_message_new_duration_changed (GST_OBJECT (demux)));
}
/* Cache the first fragments */
diff --git a/gst/id3tag/Makefile.in b/gst/id3tag/Makefile.in
index f3886126..2406ed2a 100644
--- a/gst/id3tag/Makefile.in
+++ b/gst/id3tag/Makefile.in
@@ -342,6 +342,8 @@ 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@
@@ -349,6 +351,8 @@ 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@
@@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -391,6 +394,10 @@ 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@
@@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/id3tag/gstid3mux.c b/gst/id3tag/gstid3mux.c
index 59bd8a00..de6d8066 100644
--- a/gst/id3tag/gstid3mux.c
+++ b/gst/id3tag/gstid3mux.c
@@ -1,7 +1,7 @@
/* GStreamer ID3 v1 and v2 muxer
*
* Copyright (C) 2006 Christophe Fergeau <teuf@gnome.org>
- * Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
+ * Copyright (C) 2006-2012 Tim-Philipp Müller <tim centricular net>
* Copyright (C) 2009 Pioneers of the Inevitable <songbird@songbirdnest.com>
*
* This library is free software; you can redistribute it and/or
@@ -81,7 +81,7 @@ static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_ALWAYS,
GST_STATIC_CAPS ("application/x-id3"));
-GST_BOILERPLATE (GstId3Mux, gst_id3_mux, GstTagMux, GST_TYPE_TAG_MUX);
+G_DEFINE_TYPE (GstId3Mux, gst_id3_mux, GST_TYPE_TAG_MUX);
static GstBuffer *gst_id3_mux_render_v2_tag (GstTagMux * mux,
const GstTagList * taglist);
@@ -94,26 +94,9 @@ static void gst_id3_mux_get_property (GObject * object, guint prop_id,
GValue * value, GParamSpec * pspec);
static void
-gst_id3_mux_base_init (gpointer g_class)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
- 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_details_simple (element_class,
- "ID3 v1 and v2 Muxer", "Formatter/Metadata",
- "Adds an ID3v2 header and ID3v1 footer to a file",
- "Michael Smith <msmith@songbirdnest.com>, "
- "Tim-Philipp Müller <tim centricular net>");
-}
-
-static void
gst_id3_mux_class_init (GstId3MuxClass * klass)
{
+ GstElementClass *element_class = (GstElementClass *) klass;
GObjectClass *gobject_class = (GObjectClass *) klass;
gobject_class->set_property = gst_id3_mux_set_property;
@@ -139,10 +122,22 @@ gst_id3_mux_class_init (GstId3MuxClass * klass)
GST_DEBUG_FUNCPTR (gst_id3_mux_render_v2_tag);
GST_TAG_MUX_CLASS (klass)->render_end_tag =
GST_DEBUG_FUNCPTR (gst_id3_mux_render_v1_tag);
+
+ gst_element_class_set_details_simple (element_class,
+ "ID3 v1 and v2 Muxer", "Formatter/Metadata",
+ "Adds an ID3v2 header and ID3v1 footer to a file",
+ "Michael Smith <msmith@songbirdnest.com>, "
+ "Tim-Philipp Müller <tim centricular net>");
+
+ 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));
}
static void
-gst_id3_mux_init (GstId3Mux * id3mux, GstId3MuxClass * id3mux_class)
+gst_id3_mux_init (GstId3Mux * id3mux)
{
id3mux->write_v1 = DEFAULT_WRITE_V1;
id3mux->write_v2 = DEFAULT_WRITE_V2;
diff --git a/gst/id3tag/id3tag.c b/gst/id3tag/id3tag.c
index fc69a49c..d6c2f1ba 100644
--- a/gst/id3tag/id3tag.c
+++ b/gst/id3tag/id3tag.c
@@ -192,6 +192,7 @@ static GstBuffer *
id3v2_tag_to_buffer (GstId3v2Tag * tag)
{
GstByteWriter *w;
+ GstMapInfo info;
GstBuffer *buf;
guint8 *dest;
guint i, size, offset, size_frames = 0;
@@ -217,8 +218,9 @@ id3v2_tag_to_buffer (GstId3v2Tag * tag)
gst_byte_writer_write_uint8 (w, 0); /* flags */
gst_byte_writer_write_uint32_syncsafe (w, size - 10);
- buf = gst_buffer_new_and_alloc (size);
- dest = GST_BUFFER_DATA (buf);
+ buf = gst_buffer_new_allocate (NULL, size, NULL);
+ gst_buffer_map (buf, &info, GST_MAP_WRITE);
+ dest = info.data;
gst_byte_writer_copy_bytes (w, dest, 0, 10);
offset = 10;
@@ -233,6 +235,7 @@ id3v2_tag_to_buffer (GstId3v2Tag * tag)
memset (dest + offset, 0, size - offset);
gst_byte_writer_free (w);
+ gst_buffer_unmap (buf, &info);
return buf;
}
@@ -472,6 +475,7 @@ add_text_tag (GstId3v2Tag * id3v2tag, const GstTagList * list,
g_free (strings);
}
+/* FIXME: id3v2-private frames need to be extracted as samples */
static void
add_id3v2frame_tag (GstId3v2Tag * id3v2tag, const GstTagList * list,
const gchar * tag, guint num_tags, const gchar * unused)
@@ -479,42 +483,57 @@ add_id3v2frame_tag (GstId3v2Tag * id3v2tag, const GstTagList * list,
guint i;
for (i = 0; i < num_tags; ++i) {
- const GValue *val;
+ GstSample *sample;
GstBuffer *buf;
+ GstCaps *caps;
- val = gst_tag_list_get_value_index (list, tag, i);
- buf = gst_value_get_buffer (val);
+ if (!gst_tag_list_get_sample_index (list, tag, i, &sample))
+ continue;
- if (buf && GST_BUFFER_CAPS (buf)) {
+ buf = gst_sample_get_buffer (sample);
+
+ /* FIXME: should use auxiliary sample struct instead of caps for this */
+ caps = gst_sample_get_caps (sample);
+
+ if (buf && caps) {
GstStructure *s;
gint version = 0;
- s = gst_caps_get_structure (GST_BUFFER_CAPS (buf), 0);
+ s = gst_caps_get_structure (caps, 0);
/* We can only add it if this private buffer is for the same ID3 version,
because we don't understand the contents at all. */
if (s && gst_structure_get_int (s, "version", &version) &&
version == id3v2tag->major_version) {
GstId3v2Frame frame;
+ GstMapInfo mapinfo;
gchar frame_id[5];
guint16 flags;
- guint8 *data = GST_BUFFER_DATA (buf);
- gint size = GST_BUFFER_SIZE (buf);
-
- if (size < 10) /* header size */
- return;
-
- /* We only reach here if the frame version matches the muxer. Since the
- muxer only does v2.3 or v2.4, the frame must be one of those - and
- so the frame header is the same format */
- memcpy (frame_id, data, 4);
- frame_id[4] = 0;
- flags = GST_READ_UINT16_BE (data + 8);
-
- id3v2_frame_init (&frame, frame_id, flags);
- id3v2_frame_write_bytes (&frame, data + 10, size - 10);
-
- g_array_append_val (id3v2tag->frames, frame);
- GST_DEBUG ("Added unparsed tag with %d bytes", size);
+ guint8 *data;
+ gint size;
+
+ if (!gst_buffer_map (buf, &mapinfo, GST_MAP_READ))
+ continue;
+
+ size = mapinfo.size;
+ data = mapinfo.data;
+
+ if (size >= 10) { /* header size */
+ /* We only get here if the frame version matches the muxer. Since the
+ * muxer only does v2.3 or v2.4, the frame must be one of those - and
+ * so the frame header is the same format */
+ memcpy (frame_id, data, 4);
+ frame_id[4] = 0;
+ flags = GST_READ_UINT16_BE (data + 8);
+
+ id3v2_frame_init (&frame, frame_id, flags);
+ id3v2_frame_write_bytes (&frame, data + 10, size - 10);
+
+ g_array_append_val (id3v2tag->frames, frame);
+ GST_DEBUG ("Added unparsed tag with %d bytes", size);
+ gst_buffer_unmap (buf, &mapinfo);
+ } else {
+ GST_WARNING ("Short ID3v2 frame");
+ }
} else {
GST_WARNING ("Discarding unrecognised ID3 tag for different ID3 "
"version");
@@ -687,25 +706,29 @@ add_image_tag (GstId3v2Tag * id3v2tag, const GstTagList * list,
guint n;
for (n = 0; n < num_tags; ++n) {
- const GValue *val;
+ GstSample *sample;
GstBuffer *image;
+ GstCaps *caps;
GST_DEBUG ("image %u/%u", n + 1, num_tags);
- val = gst_tag_list_get_value_index (list, tag, n);
- image = gst_value_get_buffer (val);
+ if (!gst_tag_list_get_sample_index (list, tag, n, &sample))
+ continue;
+
+ image = gst_sample_get_buffer (sample);
+ caps = gst_sample_get_caps (sample);
- if (GST_IS_BUFFER (image) && GST_BUFFER_SIZE (image) > 0 &&
- GST_BUFFER_CAPS (image) != NULL &&
- !gst_caps_is_empty (GST_BUFFER_CAPS (image))) {
+ if (image != NULL && gst_buffer_get_size (image) > 0 &&
+ caps != NULL && !gst_caps_is_empty (caps)) {
const gchar *mime_type;
GstStructure *s;
- s = gst_caps_get_structure (GST_BUFFER_CAPS (image), 0);
+ s = gst_caps_get_structure (caps, 0);
mime_type = gst_structure_get_name (s);
if (mime_type != NULL) {
const gchar *desc;
GstId3v2Frame frame;
+ GstMapInfo mapinfo;
int encoding;
/* APIC frame specifies "-->" if we're providing a URL to the image
@@ -713,8 +736,8 @@ add_image_tag (GstId3v2Tag * id3v2tag, const GstTagList * list,
if (strcmp (mime_type, "text/uri-list") == 0)
mime_type = "-->";
- GST_DEBUG ("Attaching picture of %u bytes and mime type %s",
- GST_BUFFER_SIZE (image), mime_type);
+ GST_DEBUG ("Attaching picture of %" G_GSIZE_FORMAT " bytes and "
+ "mime type %s", gst_buffer_get_size (image), mime_type);
id3v2_frame_init (&frame, "APIC", 0);
@@ -734,14 +757,17 @@ add_image_tag (GstId3v2Tag * id3v2tag, const GstTagList * list,
id3v2_frame_write_string (&frame, encoding, desc, TRUE);
- id3v2_frame_write_bytes (&frame, GST_BUFFER_DATA (image),
- GST_BUFFER_SIZE (image));
-
- g_array_append_val (id3v2tag->frames, frame);
+ if (gst_buffer_map (image, &mapinfo, GST_MAP_READ)) {
+ id3v2_frame_write_bytes (&frame, mapinfo.data, mapinfo.size);
+ g_array_append_val (id3v2tag->frames, frame);
+ gst_buffer_unmap (image, &mapinfo);
+ } else {
+ GST_WARNING ("Couldn't map image tag buffer");
+ id3v2_frame_unset (&frame);
+ }
}
} else {
- GST_WARNING ("NULL image or no caps on image buffer (%p, caps=%"
- GST_PTR_FORMAT ")", image, (image) ? GST_BUFFER_CAPS (image) : NULL);
+ GST_WARNING ("no image or caps: %p, caps=%" GST_PTR_FORMAT, image, caps);
}
}
}
@@ -839,28 +865,32 @@ add_date_tag (GstId3v2Tag * id3v2tag, const GstTagList * list,
else
frame_id = "TDRC";
- GST_LOG ("Adding date frame");
+ GST_LOG ("Adding date time frame");
strings = g_new0 (gchar *, num_tags + 1);
for (n = 0; n < num_tags; ++n) {
- GDate *date = NULL;
+ GstDateTime *dt = NULL;
+ guint year;
+ gchar *s;
- if (gst_tag_list_get_date_index (list, tag, n, &date) && date != NULL) {
- GDateYear year;
- gchar *s;
+ if (!gst_tag_list_get_date_time_index (list, tag, n, &dt) || dt == NULL)
+ continue;
- year = g_date_get_year (date);
- if (year > 500 && year < 2100) {
- s = g_strdup_printf ("%u", year);
- GST_LOG ("%s[%u] = '%s'", tag, n, s);
- strings[i] = s;
- i++;
- } else {
- GST_WARNING ("invalid year %u, skipping", year);
- }
+ year = gst_date_time_get_year (dt);
+ if (year > 500 && year < 2100) {
+ s = g_strdup_printf ("%u", year);
+ GST_LOG ("%s[%u] = '%s'", tag, n, s);
+ strings[i] = s;
+ i++;
+ } else {
+ GST_WARNING ("invalid year %u, skipping", year);
+ }
- g_date_free (date);
+ if (gst_date_time_has_month (dt)) {
+ if (id3v2tag->major_version == 3)
+ GST_FIXME ("write TDAT and possibly also TIME frame");
}
+ gst_date_time_unref (dt);
}
if (strings[0] != NULL) {
@@ -1089,7 +1119,7 @@ static const struct
/* Up to here, all the frame ids and contents have been the same between
versions 2.3 and 2.4. The rest of them differ... */
/* Date (in ID3v2.3, this is a TYER tag. In v2.4, it's a TDRC tag */
- GST_TAG_DATE, add_date_tag, NULL}, {
+ GST_TAG_DATE_TIME, add_date_tag, NULL}, {
/* Replaygain data (not really supported in 2.3, we use an experimental
tag there) */
@@ -1159,7 +1189,7 @@ id3_mux_render_v2_tag (GstTagMux * mux, const GstTagList * taglist, int version)
/* Create buffer with tag */
buf = id3v2_tag_to_buffer (&tag);
- GST_LOG_OBJECT (mux, "tag size = %d bytes", GST_BUFFER_SIZE (buf));
+ GST_LOG_OBJECT (mux, "tag size = %d bytes", (int) gst_buffer_get_size (buf));
id3v2_tag_unset (&tag);
@@ -1202,11 +1232,11 @@ static void
date_v1_convert (const GstTagList * list, const gchar * tag,
guint8 * dst, int maxlen, gboolean * wrote_tag)
{
- GDate *date;
+ GstDateTime *dt;
/* Only one date supported */
- if (gst_tag_list_get_date_index (list, tag, 0, &date) && date != NULL) {
- GDateYear year = g_date_get_year (date);
+ if (gst_tag_list_get_date_time_index (list, tag, 0, &dt)) {
+ guint year = gst_date_time_get_year (dt);
/* Check for plausible year */
if (year > 500 && year < 2100) {
gchar str[5];
@@ -1217,7 +1247,7 @@ date_v1_convert (const GstTagList * list, const gchar * tag,
GST_WARNING ("invalid year %u, skipping", year);
}
- g_date_free (date);
+ gst_date_time_unref (dt);
}
}
@@ -1265,6 +1295,7 @@ track_number_convert (const GstTagList * list, const gchar * tag,
}
}
+/* FIXME: get rid of silly table */
static const struct
{
const gchar *gst_tag;
@@ -1276,7 +1307,7 @@ static const struct
GST_TAG_TITLE, 3, 30, latin1_convert}, {
GST_TAG_ARTIST, 33, 30, latin1_convert}, {
GST_TAG_ALBUM, 63, 30, latin1_convert}, {
- GST_TAG_DATE, 93, 4, date_v1_convert}, {
+ GST_TAG_DATE_TIME, 93, 4, date_v1_convert}, {
GST_TAG_COMMENT, 97, 28, latin1_convert}, {
/* Note: one-byte gap here */
GST_TAG_TRACK_NUMBER, 126, 1, track_number_convert}, {
@@ -1286,11 +1317,15 @@ static const struct
GstBuffer *
id3_mux_render_v1_tag (GstTagMux * mux, const GstTagList * taglist)
{
- GstBuffer *buf = gst_buffer_new_and_alloc (ID3_V1_TAG_SIZE);
- guint8 *data = GST_BUFFER_DATA (buf);
+ GstMapInfo info;
+ GstBuffer *buf;
+ guint8 *data;
gboolean wrote_tag = FALSE;
int i;
+ buf = gst_buffer_new_allocate (NULL, ID3_V1_TAG_SIZE, NULL);
+ gst_buffer_map (buf, &info, GST_MAP_WRITE);
+ data = info.data;
memset (data, 0, ID3_V1_TAG_SIZE);
data[0] = 'T';
@@ -1305,6 +1340,8 @@ id3_mux_render_v1_tag (GstTagMux * mux, const GstTagList * taglist)
v1_funcs[i].length, &wrote_tag);
}
+ gst_buffer_unmap (buf, &info);
+
if (!wrote_tag) {
GST_WARNING_OBJECT (mux, "no ID3v1 tag written (no suitable tags found)");
gst_buffer_unref (buf);
diff --git a/gst/inter/Makefile.in b/gst/inter/Makefile.in
index 58899ebb..61c3361f 100644
--- a/gst/inter/Makefile.in
+++ b/gst/inter/Makefile.in
@@ -358,6 +358,8 @@ 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@
@@ -365,6 +367,8 @@ 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@
@@ -379,7 +383,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -407,6 +410,10 @@ 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@
@@ -533,6 +540,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/inter/gstinteraudiosink.c b/gst/inter/gstinteraudiosink.c
index 11ce1bfd..b67c6fc1 100644
--- a/gst/inter/gstinteraudiosink.c
+++ b/gst/inter/gstinteraudiosink.c
@@ -57,30 +57,14 @@ static void gst_inter_audio_sink_set_property (GObject * object,
guint property_id, const GValue * value, GParamSpec * pspec);
static void gst_inter_audio_sink_get_property (GObject * object,
guint property_id, GValue * value, GParamSpec * pspec);
-static void gst_inter_audio_sink_dispose (GObject * object);
static void gst_inter_audio_sink_finalize (GObject * object);
-static GstCaps *gst_inter_audio_sink_get_caps (GstBaseSink * sink);
-static gboolean gst_inter_audio_sink_set_caps (GstBaseSink * sink,
- GstCaps * caps);
-static GstFlowReturn gst_inter_audio_sink_buffer_alloc (GstBaseSink * sink,
- guint64 offset, guint size, GstCaps * caps, GstBuffer ** buf);
static void gst_inter_audio_sink_get_times (GstBaseSink * sink,
GstBuffer * buffer, GstClockTime * start, GstClockTime * end);
static gboolean gst_inter_audio_sink_start (GstBaseSink * sink);
static gboolean gst_inter_audio_sink_stop (GstBaseSink * sink);
-static gboolean gst_inter_audio_sink_unlock (GstBaseSink * sink);
-static gboolean gst_inter_audio_sink_event (GstBaseSink * sink,
- GstEvent * event);
-static GstFlowReturn gst_inter_audio_sink_preroll (GstBaseSink * sink,
- GstBuffer * buffer);
static GstFlowReturn gst_inter_audio_sink_render (GstBaseSink * sink,
GstBuffer * buffer);
-static GstStateChangeReturn gst_inter_audio_sink_async_play (GstBaseSink *
- sink);
-static gboolean gst_inter_audio_sink_activate_pull (GstBaseSink * sink,
- gboolean active);
-static gboolean gst_inter_audio_sink_unlock_stop (GstBaseSink * sink);
enum
{
@@ -94,28 +78,25 @@ static GstStaticPadTemplate gst_inter_audio_sink_sink_template =
GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/x-raw-int, "
- "endianness = (int) BYTE_ORDER, "
- "signed = (boolean) true, "
- "width = (int) 16, "
- "depth = (int) 16, " "rate = (int) 48000, " "channels = (int) 2")
+ GST_STATIC_CAPS ("audio/x-raw, format = (string) " GST_AUDIO_NE (S16) ", "
+ "rate = (int) 48000, channels = (int) 2")
);
/* class initialization */
-#define DEBUG_INIT(bla) \
- GST_DEBUG_CATEGORY_INIT (gst_inter_audio_sink_debug_category, "interaudiosink", 0, \
- "debug category for interaudiosink element");
-GST_BOILERPLATE_FULL (GstInterAudioSink, gst_inter_audio_sink, GstBaseSink,
- GST_TYPE_BASE_SINK, DEBUG_INIT);
+G_DEFINE_TYPE (GstInterAudioSink, gst_inter_audio_sink, GST_TYPE_BASE_SINK);
static void
-gst_inter_audio_sink_base_init (gpointer g_class)
+gst_inter_audio_sink_class_init (GstInterAudioSinkClass * klass)
{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+ GstBaseSinkClass *base_sink_class = GST_BASE_SINK_CLASS (klass);
+ GST_DEBUG_CATEGORY_INIT (gst_inter_audio_sink_debug_category,
+ "interaudiosink", 0, "debug category for interaudiosink element");
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_inter_audio_sink_sink_template));
@@ -124,41 +105,15 @@ gst_inter_audio_sink_base_init (gpointer g_class)
"Sink/Audio",
"Virtual audio sink for internal process communication",
"David Schleef <ds@schleef.org>");
-}
-
-static void
-gst_inter_audio_sink_class_init (GstInterAudioSinkClass * klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GstBaseSinkClass *base_sink_class = GST_BASE_SINK_CLASS (klass);
gobject_class->set_property = gst_inter_audio_sink_set_property;
gobject_class->get_property = gst_inter_audio_sink_get_property;
- gobject_class->dispose = gst_inter_audio_sink_dispose;
gobject_class->finalize = gst_inter_audio_sink_finalize;
- base_sink_class->get_caps = GST_DEBUG_FUNCPTR (gst_inter_audio_sink_get_caps);
- base_sink_class->set_caps = GST_DEBUG_FUNCPTR (gst_inter_audio_sink_set_caps);
- if (0)
- base_sink_class->buffer_alloc =
- GST_DEBUG_FUNCPTR (gst_inter_audio_sink_buffer_alloc);
base_sink_class->get_times =
GST_DEBUG_FUNCPTR (gst_inter_audio_sink_get_times);
base_sink_class->start = GST_DEBUG_FUNCPTR (gst_inter_audio_sink_start);
base_sink_class->stop = GST_DEBUG_FUNCPTR (gst_inter_audio_sink_stop);
- base_sink_class->unlock = GST_DEBUG_FUNCPTR (gst_inter_audio_sink_unlock);
- if (0)
- base_sink_class->event = GST_DEBUG_FUNCPTR (gst_inter_audio_sink_event);
- //if (0)
- base_sink_class->preroll = GST_DEBUG_FUNCPTR (gst_inter_audio_sink_preroll);
base_sink_class->render = GST_DEBUG_FUNCPTR (gst_inter_audio_sink_render);
- if (0)
- base_sink_class->async_play =
- GST_DEBUG_FUNCPTR (gst_inter_audio_sink_async_play);
- if (0)
- base_sink_class->activate_pull =
- GST_DEBUG_FUNCPTR (gst_inter_audio_sink_activate_pull);
- base_sink_class->unlock_stop =
- GST_DEBUG_FUNCPTR (gst_inter_audio_sink_unlock_stop);
g_object_class_install_property (gobject_class, PROP_CHANNEL,
g_param_spec_string ("channel", "Channel",
@@ -167,8 +122,7 @@ gst_inter_audio_sink_class_init (GstInterAudioSinkClass * klass)
}
static void
-gst_inter_audio_sink_init (GstInterAudioSink * interaudiosink,
- GstInterAudioSinkClass * interaudiosink_class)
+gst_inter_audio_sink_init (GstInterAudioSink * interaudiosink)
{
interaudiosink->channel = g_strdup ("default");
}
@@ -207,49 +161,17 @@ gst_inter_audio_sink_get_property (GObject * object, guint property_id,
}
void
-gst_inter_audio_sink_dispose (GObject * object)
-{
- /* GstInterAudioSink *interaudiosink = GST_INTER_AUDIO_SINK (object); */
-
- /* clean up as possible. may be called multiple times */
-
- G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-void
gst_inter_audio_sink_finalize (GObject * object)
{
- /* GstInterAudioSink *interaudiosink = GST_INTER_AUDIO_SINK (object); */
+ GstInterAudioSink *interaudiosink = GST_INTER_AUDIO_SINK (object);
/* clean up object here */
+ g_free (interaudiosink->channel);
- G_OBJECT_CLASS (parent_class)->finalize (object);
+ G_OBJECT_CLASS (gst_inter_audio_sink_parent_class)->finalize (object);
}
-
-static GstCaps *
-gst_inter_audio_sink_get_caps (GstBaseSink * sink)
-{
-
- return NULL;
-}
-
-static gboolean
-gst_inter_audio_sink_set_caps (GstBaseSink * sink, GstCaps * caps)
-{
-
- return TRUE;
-}
-
-static GstFlowReturn
-gst_inter_audio_sink_buffer_alloc (GstBaseSink * sink, guint64 offset,
- guint size, GstCaps * caps, GstBuffer ** buf)
-{
-
- return GST_FLOW_ERROR;
-}
-
static void
gst_inter_audio_sink_get_times (GstBaseSink * sink, GstBuffer * buffer,
GstClockTime * start, GstClockTime * end)
@@ -301,39 +223,18 @@ gst_inter_audio_sink_stop (GstBaseSink * sink)
return TRUE;
}
-static gboolean
-gst_inter_audio_sink_unlock (GstBaseSink * sink)
-{
-
- return TRUE;
-}
-
-static gboolean
-gst_inter_audio_sink_event (GstBaseSink * sink, GstEvent * event)
-{
-
- return TRUE;
-}
-
-static GstFlowReturn
-gst_inter_audio_sink_preroll (GstBaseSink * sink, GstBuffer * buffer)
-{
-
- return GST_FLOW_OK;
-}
-
static GstFlowReturn
gst_inter_audio_sink_render (GstBaseSink * sink, GstBuffer * buffer)
{
GstInterAudioSink *interaudiosink = GST_INTER_AUDIO_SINK (sink);
int n;
- GST_DEBUG ("render %d", GST_BUFFER_SIZE (buffer));
+ GST_DEBUG ("render %d", gst_buffer_get_size (buffer));
g_mutex_lock (interaudiosink->surface->mutex);
n = gst_adapter_available (interaudiosink->surface->audio_adapter) / 4;
#define SIZE 1600
- if (n > (1600 * 3)) {
+ if (n > (SIZE * 3)) {
GST_WARNING ("flushing 800 samples");
gst_adapter_flush (interaudiosink->surface->audio_adapter, (SIZE / 2) * 4);
n -= (SIZE / 2);
@@ -344,24 +245,3 @@ gst_inter_audio_sink_render (GstBaseSink * sink, GstBuffer * buffer)
return GST_FLOW_OK;
}
-
-static GstStateChangeReturn
-gst_inter_audio_sink_async_play (GstBaseSink * sink)
-{
-
- return GST_STATE_CHANGE_SUCCESS;
-}
-
-static gboolean
-gst_inter_audio_sink_activate_pull (GstBaseSink * sink, gboolean active)
-{
-
- return TRUE;
-}
-
-static gboolean
-gst_inter_audio_sink_unlock_stop (GstBaseSink * sink)
-{
-
- return TRUE;
-}
diff --git a/gst/inter/gstinteraudiosrc.c b/gst/inter/gstinteraudiosrc.c
index 3e64eefc..d15d7aa0 100644
--- a/gst/inter/gstinteraudiosrc.c
+++ b/gst/inter/gstinteraudiosrc.c
@@ -39,9 +39,12 @@
#include "config.h"
#endif
+#include "gstinteraudiosrc.h"
+
#include <gst/gst.h>
#include <gst/base/gstbasesrc.h>
-#include "gstinteraudiosrc.h"
+#include <gst/audio/audio.h>
+
#include <string.h>
GST_DEBUG_CATEGORY_STATIC (gst_inter_audio_src_debug_category);
@@ -54,33 +57,19 @@ static void gst_inter_audio_src_set_property (GObject * object,
guint property_id, const GValue * value, GParamSpec * pspec);
static void gst_inter_audio_src_get_property (GObject * object,
guint property_id, GValue * value, GParamSpec * pspec);
-static void gst_inter_audio_src_dispose (GObject * object);
static void gst_inter_audio_src_finalize (GObject * object);
-static GstCaps *gst_inter_audio_src_get_caps (GstBaseSrc * src);
static gboolean gst_inter_audio_src_set_caps (GstBaseSrc * src, GstCaps * caps);
-static gboolean gst_inter_audio_src_negotiate (GstBaseSrc * src);
-static gboolean gst_inter_audio_src_newsegment (GstBaseSrc * src);
static gboolean gst_inter_audio_src_start (GstBaseSrc * src);
static gboolean gst_inter_audio_src_stop (GstBaseSrc * src);
static void
gst_inter_audio_src_get_times (GstBaseSrc * src, GstBuffer * buffer,
GstClockTime * start, GstClockTime * end);
-static gboolean gst_inter_audio_src_is_seekable (GstBaseSrc * src);
-static gboolean gst_inter_audio_src_unlock (GstBaseSrc * src);
-static gboolean gst_inter_audio_src_event (GstBaseSrc * src, GstEvent * event);
static GstFlowReturn
gst_inter_audio_src_create (GstBaseSrc * src, guint64 offset, guint size,
GstBuffer ** buf);
-static gboolean gst_inter_audio_src_do_seek (GstBaseSrc * src,
- GstSegment * segment);
static gboolean gst_inter_audio_src_query (GstBaseSrc * src, GstQuery * query);
-static gboolean gst_inter_audio_src_check_get_range (GstBaseSrc * src);
-static void gst_inter_audio_src_fixate (GstBaseSrc * src, GstCaps * caps);
-static gboolean gst_inter_audio_src_unlock_stop (GstBaseSrc * src);
-static gboolean
-gst_inter_audio_src_prepare_seek_segment (GstBaseSrc * src, GstEvent * seek,
- GstSegment * segment);
+static GstCaps *gst_inter_audio_src_fixate (GstBaseSrc * src, GstCaps * caps);
enum
{
@@ -94,27 +83,24 @@ static GstStaticPadTemplate gst_inter_audio_src_src_template =
GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/x-raw-int, "
- "endianness = (int) BYTE_ORDER, "
- "signed = (boolean) true, "
- "width = (int) 16, "
- "depth = (int) 16, " "rate = (int) 48000, " "channels = (int) 2")
+ GST_STATIC_CAPS ("audio/x-raw, format = (string) " GST_AUDIO_NE (S16) ", "
+ "rate = (int) 48000, channels = (int) 2")
);
/* class initialization */
-#define DEBUG_INIT(bla) \
- GST_DEBUG_CATEGORY_INIT (gst_inter_audio_src_debug_category, "interaudiosrc", 0, \
- "debug category for interaudiosrc element");
-
-GST_BOILERPLATE_FULL (GstInterAudioSrc, gst_inter_audio_src, GstBaseSrc,
- GST_TYPE_BASE_SRC, DEBUG_INIT);
+G_DEFINE_TYPE (GstInterAudioSrc, gst_inter_audio_src, GST_TYPE_BASE_SRC);
static void
-gst_inter_audio_src_base_init (gpointer g_class)
+gst_inter_audio_src_class_init (GstInterAudioSrcClass * klass)
{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+ GstBaseSrcClass *base_src_class = GST_BASE_SRC_CLASS (klass);
+
+ GST_DEBUG_CATEGORY_INIT (gst_inter_audio_src_debug_category, "interaudiosrc",
+ 0, "debug category for interaudiosrc element");
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_inter_audio_src_src_template));
@@ -124,59 +110,26 @@ gst_inter_audio_src_base_init (gpointer g_class)
"Source/Audio",
"Virtual audio source for internal process communication",
"David Schleef <ds@schleef.org>");
-}
-
-static void
-gst_inter_audio_src_class_init (GstInterAudioSrcClass * klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GstBaseSrcClass *base_src_class = GST_BASE_SRC_CLASS (klass);
gobject_class->set_property = gst_inter_audio_src_set_property;
gobject_class->get_property = gst_inter_audio_src_get_property;
- gobject_class->dispose = gst_inter_audio_src_dispose;
gobject_class->finalize = gst_inter_audio_src_finalize;
- base_src_class->get_caps = GST_DEBUG_FUNCPTR (gst_inter_audio_src_get_caps);
base_src_class->set_caps = GST_DEBUG_FUNCPTR (gst_inter_audio_src_set_caps);
- if (0)
- base_src_class->negotiate =
- GST_DEBUG_FUNCPTR (gst_inter_audio_src_negotiate);
- base_src_class->newsegment =
- GST_DEBUG_FUNCPTR (gst_inter_audio_src_newsegment);
base_src_class->start = GST_DEBUG_FUNCPTR (gst_inter_audio_src_start);
base_src_class->stop = GST_DEBUG_FUNCPTR (gst_inter_audio_src_stop);
base_src_class->get_times = GST_DEBUG_FUNCPTR (gst_inter_audio_src_get_times);
- if (0)
- base_src_class->is_seekable =
- GST_DEBUG_FUNCPTR (gst_inter_audio_src_is_seekable);
- base_src_class->unlock = GST_DEBUG_FUNCPTR (gst_inter_audio_src_unlock);
- base_src_class->event = GST_DEBUG_FUNCPTR (gst_inter_audio_src_event);
base_src_class->create = GST_DEBUG_FUNCPTR (gst_inter_audio_src_create);
- if (0)
- base_src_class->do_seek = GST_DEBUG_FUNCPTR (gst_inter_audio_src_do_seek);
base_src_class->query = GST_DEBUG_FUNCPTR (gst_inter_audio_src_query);
- if (0)
- base_src_class->check_get_range =
- GST_DEBUG_FUNCPTR (gst_inter_audio_src_check_get_range);
base_src_class->fixate = GST_DEBUG_FUNCPTR (gst_inter_audio_src_fixate);
- if (0)
- base_src_class->unlock_stop =
- GST_DEBUG_FUNCPTR (gst_inter_audio_src_unlock_stop);
- if (0)
- base_src_class->prepare_seek_segment =
- GST_DEBUG_FUNCPTR (gst_inter_audio_src_prepare_seek_segment);
-
-#if 0
+
g_object_class_install_property (gobject_class, PROP_CHANNEL,
g_param_spec_string ("channel", "Channel",
"Channel name to match inter src and sink elements",
"default", G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-#endif
}
static void
-gst_inter_audio_src_init (GstInterAudioSrc * interaudiosrc,
- GstInterAudioSrcClass * interaudiosrc_class)
+gst_inter_audio_src_init (GstInterAudioSrc * interaudiosrc)
{
gst_base_src_set_format (GST_BASE_SRC (interaudiosrc), GST_FORMAT_TIME);
gst_base_src_set_live (GST_BASE_SRC (interaudiosrc), TRUE);
@@ -219,34 +172,14 @@ gst_inter_audio_src_get_property (GObject * object, guint property_id,
}
void
-gst_inter_audio_src_dispose (GObject * object)
-{
- /* GstInterAudioSrc *interaudiosrc = GST_INTER_AUDIO_SRC (object); */
-
- /* clean up as possible. may be called multiple times */
-
- G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-void
gst_inter_audio_src_finalize (GObject * object)
{
- /* GstInterAudioSrc *interaudiosrc = GST_INTER_AUDIO_SRC (object); */
+ GstInterAudioSrc *interaudiosrc = GST_INTER_AUDIO_SRC (object);
/* clean up object here */
+ g_free (interaudiosrc->channel);
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-
-static GstCaps *
-gst_inter_audio_src_get_caps (GstBaseSrc * src)
-{
- GstInterAudioSrc *interaudiosrc = GST_INTER_AUDIO_SRC (src);
-
- GST_DEBUG_OBJECT (interaudiosrc, "get_caps");
-
- return NULL;
+ G_OBJECT_CLASS (gst_inter_audio_src_parent_class)->finalize (object);
}
static gboolean
@@ -264,30 +197,13 @@ gst_inter_audio_src_set_caps (GstBaseSrc * src, GstCaps * caps)
ret = gst_structure_get_int (structure, "rate", &sample_rate);
if (ret) {
interaudiosrc->sample_rate = sample_rate;
+
+ ret = gst_pad_set_caps (src->srcpad, caps);
}
return ret;
}
-static gboolean
-gst_inter_audio_src_negotiate (GstBaseSrc * src)
-{
- GstInterAudioSrc *interaudiosrc = GST_INTER_AUDIO_SRC (src);
-
- GST_DEBUG_OBJECT (interaudiosrc, "negotiate");
-
- return TRUE;
-}
-
-static gboolean
-gst_inter_audio_src_newsegment (GstBaseSrc * src)
-{
- GstInterAudioSrc *interaudiosrc = GST_INTER_AUDIO_SRC (src);
-
- GST_DEBUG_OBJECT (interaudiosrc, "newsegment");
-
- return TRUE;
-}
static gboolean
gst_inter_audio_src_start (GstBaseSrc * src)
@@ -341,41 +257,6 @@ gst_inter_audio_src_get_times (GstBaseSrc * src, GstBuffer * buffer,
}
}
-static gboolean
-gst_inter_audio_src_is_seekable (GstBaseSrc * src)
-{
- GstInterAudioSrc *interaudiosrc = GST_INTER_AUDIO_SRC (src);
-
- GST_DEBUG_OBJECT (interaudiosrc, "is_seekable");
-
- return FALSE;
-}
-
-static gboolean
-gst_inter_audio_src_unlock (GstBaseSrc * src)
-{
- GstInterAudioSrc *interaudiosrc = GST_INTER_AUDIO_SRC (src);
-
- GST_DEBUG_OBJECT (interaudiosrc, "unlock");
-
- return TRUE;
-}
-
-static gboolean
-gst_inter_audio_src_event (GstBaseSrc * src, GstEvent * event)
-{
- GstInterAudioSrc *interaudiosrc = GST_INTER_AUDIO_SRC (src);
- gboolean ret;
-
- GST_DEBUG_OBJECT (interaudiosrc, "event");
-
- switch (GST_EVENT_TYPE (event)) {
- default:
- ret = GST_BASE_SRC_CLASS (parent_class)->event (src, event);
- }
-
- return ret;
-}
#define SIZE 1600
@@ -407,14 +288,12 @@ gst_inter_audio_src_create (GstBaseSrc * src, guint64 offset, guint size,
g_mutex_unlock (interaudiosrc->surface->mutex);
if (n < SIZE) {
- GstBuffer *newbuf = gst_buffer_new_and_alloc (SIZE * 4);
+ GstBuffer *newbuf = gst_buffer_new_and_alloc ((SIZE - n) * 4);
GST_WARNING ("creating %d samples of silence", SIZE - n);
- memset (GST_BUFFER_DATA (newbuf) + n * 4, 0, SIZE * 4 - n * 4);
- if (buffer) {
- memcpy (GST_BUFFER_DATA (newbuf), GST_BUFFER_DATA (buffer), n * 4);
- gst_buffer_unref (buffer);
- }
+
+ if (buffer)
+ newbuf = gst_buffer_append (newbuf, buffer);
buffer = newbuf;
}
n = SIZE;
@@ -435,7 +314,6 @@ gst_inter_audio_src_create (GstBaseSrc * src, guint64 offset, guint size,
if (interaudiosrc->n_samples == 0) {
GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
}
- gst_buffer_set_caps (buffer, GST_PAD_CAPS (GST_BASE_SRC_PAD (interaudiosrc)));
interaudiosrc->n_samples += n;
*buf = buffer;
@@ -443,15 +321,6 @@ gst_inter_audio_src_create (GstBaseSrc * src, guint64 offset, guint size,
return GST_FLOW_OK;
}
-static gboolean
-gst_inter_audio_src_do_seek (GstBaseSrc * src, GstSegment * segment)
-{
- GstInterAudioSrc *interaudiosrc = GST_INTER_AUDIO_SRC (src);
-
- GST_DEBUG_OBJECT (interaudiosrc, "do_seek");
-
- return FALSE;
-}
static gboolean
gst_inter_audio_src_query (GstBaseSrc * src, GstQuery * query)
@@ -480,29 +349,22 @@ gst_inter_audio_src_query (GstBaseSrc * src, GstQuery * query)
break;
}
default:
- ret = GST_BASE_SRC_CLASS (parent_class)->query (src, query);
+ ret = GST_BASE_SRC_CLASS (gst_inter_audio_src_parent_class)->query (src,
+ query);
break;
}
return ret;
}
-static gboolean
-gst_inter_audio_src_check_get_range (GstBaseSrc * src)
-{
- GstInterAudioSrc *interaudiosrc = GST_INTER_AUDIO_SRC (src);
-
- GST_DEBUG_OBJECT (interaudiosrc, "get_range");
-
- return FALSE;
-}
-
-static void
+static GstCaps *
gst_inter_audio_src_fixate (GstBaseSrc * src, GstCaps * caps)
{
GstInterAudioSrc *interaudiosrc = GST_INTER_AUDIO_SRC (src);
GstStructure *structure;
+ caps = gst_caps_make_writable (caps);
+
structure = gst_caps_get_structure (caps, 0);
GST_DEBUG_OBJECT (interaudiosrc, "fixate");
@@ -510,25 +372,5 @@ gst_inter_audio_src_fixate (GstBaseSrc * src, GstCaps * caps)
gst_structure_fixate_field_nearest_int (structure, "channels", 2);
gst_structure_fixate_field_nearest_int (structure, "rate", 48000);
-}
-
-static gboolean
-gst_inter_audio_src_unlock_stop (GstBaseSrc * src)
-{
- GstInterAudioSrc *interaudiosrc = GST_INTER_AUDIO_SRC (src);
-
- GST_DEBUG_OBJECT (interaudiosrc, "stop");
-
- return TRUE;
-}
-
-static gboolean
-gst_inter_audio_src_prepare_seek_segment (GstBaseSrc * src, GstEvent * seek,
- GstSegment * segment)
-{
- GstInterAudioSrc *interaudiosrc = GST_INTER_AUDIO_SRC (src);
-
- GST_DEBUG_OBJECT (interaudiosrc, "seek_segment");
-
- return FALSE;
+ return caps;
}
diff --git a/gst/inter/gstintersubsink.c b/gst/inter/gstintersubsink.c
index a42b3e57..3f8ef0dd 100644
--- a/gst/inter/gstintersubsink.c
+++ b/gst/inter/gstintersubsink.c
@@ -53,28 +53,13 @@ static void gst_inter_sub_sink_set_property (GObject * object,
guint property_id, const GValue * value, GParamSpec * pspec);
static void gst_inter_sub_sink_get_property (GObject * object,
guint property_id, GValue * value, GParamSpec * pspec);
-static void gst_inter_sub_sink_dispose (GObject * object);
-static void gst_inter_sub_sink_finalize (GObject * object);
-
-static GstCaps *gst_inter_sub_sink_get_caps (GstBaseSink * sink);
-static gboolean gst_inter_sub_sink_set_caps (GstBaseSink * sink,
- GstCaps * caps);
-static GstFlowReturn gst_inter_sub_sink_buffer_alloc (GstBaseSink * sink,
- guint64 offset, guint size, GstCaps * caps, GstBuffer ** buf);
+
static void gst_inter_sub_sink_get_times (GstBaseSink * sink,
GstBuffer * buffer, GstClockTime * start, GstClockTime * end);
static gboolean gst_inter_sub_sink_start (GstBaseSink * sink);
static gboolean gst_inter_sub_sink_stop (GstBaseSink * sink);
-static gboolean gst_inter_sub_sink_unlock (GstBaseSink * sink);
-static gboolean gst_inter_sub_sink_event (GstBaseSink * sink, GstEvent * event);
-static GstFlowReturn
-gst_inter_sub_sink_preroll (GstBaseSink * sink, GstBuffer * buffer);
static GstFlowReturn
gst_inter_sub_sink_render (GstBaseSink * sink, GstBuffer * buffer);
-static GstStateChangeReturn gst_inter_sub_sink_async_play (GstBaseSink * sink);
-static gboolean gst_inter_sub_sink_activate_pull (GstBaseSink * sink,
- gboolean active);
-static gboolean gst_inter_sub_sink_unlock_stop (GstBaseSink * sink);
enum
{
@@ -94,17 +79,17 @@ GST_STATIC_PAD_TEMPLATE ("sink",
/* class initialization */
-#define DEBUG_INIT(bla) \
- GST_DEBUG_CATEGORY_INIT (gst_inter_sub_sink_debug_category, "intersubsink", 0, \
- "debug category for intersubsink element");
-
-GST_BOILERPLATE_FULL (GstInterSubSink, gst_inter_sub_sink, GstBaseSink,
- GST_TYPE_BASE_SINK, DEBUG_INIT);
+G_DEFINE_TYPE (GstInterSubSink, gst_inter_sub_sink, GST_TYPE_BASE_SINK);
static void
-gst_inter_sub_sink_base_init (gpointer g_class)
+gst_inter_sub_sink_class_init (GstInterSubSinkClass * klass)
{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ GstBaseSinkClass *base_sink_class = GST_BASE_SINK_CLASS (klass);
+ GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+
+ GST_DEBUG_CATEGORY_INIT (gst_inter_sub_sink_debug_category, "intersubsink", 0,
+ "debug category for intersubsink element");
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_inter_sub_sink_sink_template));
@@ -114,39 +99,13 @@ gst_inter_sub_sink_base_init (gpointer g_class)
"Sink/Subtitle",
"Virtual subtitle sink for internal process communication",
"David Schleef <ds@schleef.org>");
-}
-
-static void
-gst_inter_sub_sink_class_init (GstInterSubSinkClass * klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GstBaseSinkClass *base_sink_class = GST_BASE_SINK_CLASS (klass);
gobject_class->set_property = gst_inter_sub_sink_set_property;
gobject_class->get_property = gst_inter_sub_sink_get_property;
- gobject_class->dispose = gst_inter_sub_sink_dispose;
- gobject_class->finalize = gst_inter_sub_sink_finalize;
- base_sink_class->get_caps = GST_DEBUG_FUNCPTR (gst_inter_sub_sink_get_caps);
- base_sink_class->set_caps = GST_DEBUG_FUNCPTR (gst_inter_sub_sink_set_caps);
- if (0)
- base_sink_class->buffer_alloc =
- GST_DEBUG_FUNCPTR (gst_inter_sub_sink_buffer_alloc);
base_sink_class->get_times = GST_DEBUG_FUNCPTR (gst_inter_sub_sink_get_times);
base_sink_class->start = GST_DEBUG_FUNCPTR (gst_inter_sub_sink_start);
base_sink_class->stop = GST_DEBUG_FUNCPTR (gst_inter_sub_sink_stop);
- base_sink_class->unlock = GST_DEBUG_FUNCPTR (gst_inter_sub_sink_unlock);
- if (0)
- base_sink_class->event = GST_DEBUG_FUNCPTR (gst_inter_sub_sink_event);
- base_sink_class->preroll = GST_DEBUG_FUNCPTR (gst_inter_sub_sink_preroll);
base_sink_class->render = GST_DEBUG_FUNCPTR (gst_inter_sub_sink_render);
- if (0)
- base_sink_class->async_play =
- GST_DEBUG_FUNCPTR (gst_inter_sub_sink_async_play);
- if (0)
- base_sink_class->activate_pull =
- GST_DEBUG_FUNCPTR (gst_inter_sub_sink_activate_pull);
- base_sink_class->unlock_stop =
- GST_DEBUG_FUNCPTR (gst_inter_sub_sink_unlock_stop);
g_object_class_install_property (gobject_class, PROP_CHANNEL,
g_param_spec_string ("channel", "Channel",
@@ -156,8 +115,7 @@ gst_inter_sub_sink_class_init (GstInterSubSinkClass * klass)
}
static void
-gst_inter_sub_sink_init (GstInterSubSink * intersubsink,
- GstInterSubSinkClass * intersubsink_class)
+gst_inter_sub_sink_init (GstInterSubSink * intersubsink)
{
intersubsink->channel = g_strdup ("default");
@@ -199,50 +157,6 @@ gst_inter_sub_sink_get_property (GObject * object, guint property_id,
}
}
-void
-gst_inter_sub_sink_dispose (GObject * object)
-{
- /* GstInterSubSink *intersubsink = GST_INTER_SUB_SINK (object); */
-
- /* clean up as possible. may be called multiple times */
-
- G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-void
-gst_inter_sub_sink_finalize (GObject * object)
-{
- /* GstInterSubSink *intersubsink = GST_INTER_SUB_SINK (object); */
-
- /* clean up object here */
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-
-
-static GstCaps *
-gst_inter_sub_sink_get_caps (GstBaseSink * sink)
-{
-
- return NULL;
-}
-
-static gboolean
-gst_inter_sub_sink_set_caps (GstBaseSink * sink, GstCaps * caps)
-{
-
- return FALSE;
-}
-
-static GstFlowReturn
-gst_inter_sub_sink_buffer_alloc (GstBaseSink * sink, guint64 offset, guint size,
- GstCaps * caps, GstBuffer ** buf)
-{
-
- return GST_FLOW_ERROR;
-}
-
static void
gst_inter_sub_sink_get_times (GstBaseSink * sink, GstBuffer * buffer,
GstClockTime * start, GstClockTime * end)
@@ -293,27 +207,6 @@ gst_inter_sub_sink_stop (GstBaseSink * sink)
return TRUE;
}
-static gboolean
-gst_inter_sub_sink_unlock (GstBaseSink * sink)
-{
-
- return TRUE;
-}
-
-static gboolean
-gst_inter_sub_sink_event (GstBaseSink * sink, GstEvent * event)
-{
-
- return TRUE;
-}
-
-static GstFlowReturn
-gst_inter_sub_sink_preroll (GstBaseSink * sink, GstBuffer * buffer)
-{
-
- return GST_FLOW_OK;
-}
-
static GstFlowReturn
gst_inter_sub_sink_render (GstBaseSink * sink, GstBuffer * buffer)
{
@@ -329,24 +222,3 @@ gst_inter_sub_sink_render (GstBaseSink * sink, GstBuffer * buffer)
return GST_FLOW_OK;
}
-
-static GstStateChangeReturn
-gst_inter_sub_sink_async_play (GstBaseSink * sink)
-{
-
- return GST_STATE_CHANGE_SUCCESS;
-}
-
-static gboolean
-gst_inter_sub_sink_activate_pull (GstBaseSink * sink, gboolean active)
-{
-
- return TRUE;
-}
-
-static gboolean
-gst_inter_sub_sink_unlock_stop (GstBaseSink * sink)
-{
-
- return TRUE;
-}
diff --git a/gst/inter/gstintersubsrc.c b/gst/inter/gstintersubsrc.c
index 437a3e1e..0001d10d 100644
--- a/gst/inter/gstintersubsrc.c
+++ b/gst/inter/gstintersubsrc.c
@@ -54,33 +54,15 @@ static void gst_inter_sub_src_set_property (GObject * object,
guint property_id, const GValue * value, GParamSpec * pspec);
static void gst_inter_sub_src_get_property (GObject * object,
guint property_id, GValue * value, GParamSpec * pspec);
-static void gst_inter_sub_src_dispose (GObject * object);
-static void gst_inter_sub_src_finalize (GObject * object);
-static GstCaps *gst_inter_sub_src_get_caps (GstBaseSrc * src);
-static gboolean gst_inter_sub_src_set_caps (GstBaseSrc * src, GstCaps * caps);
-static gboolean gst_inter_sub_src_negotiate (GstBaseSrc * src);
-static gboolean gst_inter_sub_src_newsegment (GstBaseSrc * src);
static gboolean gst_inter_sub_src_start (GstBaseSrc * src);
static gboolean gst_inter_sub_src_stop (GstBaseSrc * src);
static void
gst_inter_sub_src_get_times (GstBaseSrc * src, GstBuffer * buffer,
GstClockTime * start, GstClockTime * end);
-static gboolean gst_inter_sub_src_is_seekable (GstBaseSrc * src);
-static gboolean gst_inter_sub_src_unlock (GstBaseSrc * src);
-static gboolean gst_inter_sub_src_event (GstBaseSrc * src, GstEvent * event);
static GstFlowReturn
gst_inter_sub_src_create (GstBaseSrc * src, guint64 offset, guint size,
GstBuffer ** buf);
-static gboolean gst_inter_sub_src_do_seek (GstBaseSrc * src,
- GstSegment * segment);
-static gboolean gst_inter_sub_src_query (GstBaseSrc * src, GstQuery * query);
-static gboolean gst_inter_sub_src_check_get_range (GstBaseSrc * src);
-static void gst_inter_sub_src_fixate (GstBaseSrc * src, GstCaps * caps);
-static gboolean gst_inter_sub_src_unlock_stop (GstBaseSrc * src);
-static gboolean
-gst_inter_sub_src_prepare_seek_segment (GstBaseSrc * src, GstEvent * seek,
- GstSegment * segment);
enum
{
@@ -100,17 +82,17 @@ GST_STATIC_PAD_TEMPLATE ("src",
/* class initialization */
-#define DEBUG_INIT(bla) \
- GST_DEBUG_CATEGORY_INIT (gst_inter_sub_src_debug_category, "intersubsrc", 0, \
- "debug category for intersubsrc element");
-
-GST_BOILERPLATE_FULL (GstInterSubSrc, gst_inter_sub_src, GstBaseSrc,
- GST_TYPE_BASE_SRC, DEBUG_INIT);
+G_DEFINE_TYPE (GstInterSubSrc, gst_inter_sub_src, GST_TYPE_BASE_SRC);
static void
-gst_inter_sub_src_base_init (gpointer g_class)
+gst_inter_sub_src_class_init (GstInterSubSrcClass * klass)
{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+ GstBaseSrcClass *base_src_class = GST_BASE_SRC_CLASS (klass);
+
+ GST_DEBUG_CATEGORY_INIT (gst_inter_sub_src_debug_category, "intersubsrc", 0,
+ "debug category for intersubsrc element");
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_inter_sub_src_src_template));
@@ -120,48 +102,13 @@ gst_inter_sub_src_base_init (gpointer g_class)
"Source/Subtitle",
"Virtual subtitle source for internal process communication",
"David Schleef <ds@schleef.org>");
-}
-
-static void
-gst_inter_sub_src_class_init (GstInterSubSrcClass * klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GstBaseSrcClass *base_src_class = GST_BASE_SRC_CLASS (klass);
gobject_class->set_property = gst_inter_sub_src_set_property;
gobject_class->get_property = gst_inter_sub_src_get_property;
- gobject_class->dispose = gst_inter_sub_src_dispose;
- gobject_class->finalize = gst_inter_sub_src_finalize;
- if (0)
- base_src_class->get_caps = GST_DEBUG_FUNCPTR (gst_inter_sub_src_get_caps);
- base_src_class->set_caps = GST_DEBUG_FUNCPTR (gst_inter_sub_src_set_caps);
- if (0)
- base_src_class->negotiate = GST_DEBUG_FUNCPTR (gst_inter_sub_src_negotiate);
- if (0)
- base_src_class->newsegment =
- GST_DEBUG_FUNCPTR (gst_inter_sub_src_newsegment);
base_src_class->start = GST_DEBUG_FUNCPTR (gst_inter_sub_src_start);
base_src_class->stop = GST_DEBUG_FUNCPTR (gst_inter_sub_src_stop);
base_src_class->get_times = GST_DEBUG_FUNCPTR (gst_inter_sub_src_get_times);
- if (0)
- base_src_class->is_seekable =
- GST_DEBUG_FUNCPTR (gst_inter_sub_src_is_seekable);
- base_src_class->unlock = GST_DEBUG_FUNCPTR (gst_inter_sub_src_unlock);
- base_src_class->event = GST_DEBUG_FUNCPTR (gst_inter_sub_src_event);
base_src_class->create = GST_DEBUG_FUNCPTR (gst_inter_sub_src_create);
- if (0)
- base_src_class->do_seek = GST_DEBUG_FUNCPTR (gst_inter_sub_src_do_seek);
- base_src_class->query = GST_DEBUG_FUNCPTR (gst_inter_sub_src_query);
- if (0)
- base_src_class->check_get_range =
- GST_DEBUG_FUNCPTR (gst_inter_sub_src_check_get_range);
- base_src_class->fixate = GST_DEBUG_FUNCPTR (gst_inter_sub_src_fixate);
- if (0)
- base_src_class->unlock_stop =
- GST_DEBUG_FUNCPTR (gst_inter_sub_src_unlock_stop);
- if (0)
- base_src_class->prepare_seek_segment =
- GST_DEBUG_FUNCPTR (gst_inter_sub_src_prepare_seek_segment);
g_object_class_install_property (gobject_class, PROP_CHANNEL,
g_param_spec_string ("channel", "Channel",
@@ -170,8 +117,7 @@ gst_inter_sub_src_class_init (GstInterSubSrcClass * klass)
}
static void
-gst_inter_sub_src_init (GstInterSubSrc * intersubsrc,
- GstInterSubSrcClass * intersubsrc_class)
+gst_inter_sub_src_init (GstInterSubSrc * intersubsrc)
{
intersubsrc->srcpad =
@@ -216,66 +162,6 @@ gst_inter_sub_src_get_property (GObject * object, guint property_id,
}
}
-void
-gst_inter_sub_src_dispose (GObject * object)
-{
- /* GstInterSubSrc *intersubsrc = GST_INTER_SUB_SRC (object); */
-
- /* clean up as possible. may be called multiple times */
-
- G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-void
-gst_inter_sub_src_finalize (GObject * object)
-{
- /* GstInterSubSrc *intersubsrc = GST_INTER_SUB_SRC (object); */
-
- /* clean up object here */
-
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-
-static GstCaps *
-gst_inter_sub_src_get_caps (GstBaseSrc * src)
-{
- GstInterSubSrc *intersubsrc = GST_INTER_SUB_SRC (src);
-
- GST_DEBUG_OBJECT (intersubsrc, "get_caps");
-
- return NULL;
-}
-
-static gboolean
-gst_inter_sub_src_set_caps (GstBaseSrc * src, GstCaps * caps)
-{
- GstInterSubSrc *intersubsrc = GST_INTER_SUB_SRC (src);
-
- GST_DEBUG_OBJECT (intersubsrc, "set_caps");
-
- return TRUE;
-}
-
-static gboolean
-gst_inter_sub_src_negotiate (GstBaseSrc * src)
-{
- GstInterSubSrc *intersubsrc = GST_INTER_SUB_SRC (src);
-
- GST_DEBUG_OBJECT (intersubsrc, "negotiate");
-
- return TRUE;
-}
-
-static gboolean
-gst_inter_sub_src_newsegment (GstBaseSrc * src)
-{
- GstInterSubSrc *intersubsrc = GST_INTER_SUB_SRC (src);
-
- GST_DEBUG_OBJECT (intersubsrc, "newsegment");
-
- return TRUE;
-}
static gboolean
gst_inter_sub_src_start (GstBaseSrc * src)
@@ -329,41 +215,6 @@ gst_inter_sub_src_get_times (GstBaseSrc * src, GstBuffer * buffer,
}
}
-static gboolean
-gst_inter_sub_src_is_seekable (GstBaseSrc * src)
-{
- GstInterSubSrc *intersubsrc = GST_INTER_SUB_SRC (src);
-
- GST_DEBUG_OBJECT (intersubsrc, "is_seekable");
-
- return FALSE;
-}
-
-static gboolean
-gst_inter_sub_src_unlock (GstBaseSrc * src)
-{
- GstInterSubSrc *intersubsrc = GST_INTER_SUB_SRC (src);
-
- GST_DEBUG_OBJECT (intersubsrc, "unlock");
-
- return TRUE;
-}
-
-static gboolean
-gst_inter_sub_src_event (GstBaseSrc * src, GstEvent * event)
-{
- GstInterSubSrc *intersubsrc = GST_INTER_SUB_SRC (src);
- gboolean ret;
-
- GST_DEBUG_OBJECT (intersubsrc, "event");
-
- switch (GST_EVENT_TYPE (event)) {
- default:
- ret = GST_BASE_SRC_CLASS (parent_class)->event (src, event);
- }
-
- return ret;
-}
static GstFlowReturn
gst_inter_sub_src_create (GstBaseSrc * src, guint64 offset, guint size,
@@ -388,15 +239,16 @@ gst_inter_sub_src_create (GstBaseSrc * src, guint64 offset, guint size,
g_mutex_unlock (intersubsrc->surface->mutex);
if (buffer == NULL) {
- guint8 *data;
+ GstMapInfo map;
buffer = gst_buffer_new_and_alloc (1);
- data = GST_BUFFER_DATA (buffer);
- data[0] = 0;
+ gst_buffer_map (buffer, &map, GST_MAP_WRITE);
+ map.data[0] = 0;
+ gst_buffer_unmap (buffer, &map);
}
- buffer = gst_buffer_make_metadata_writable (buffer);
+ buffer = gst_buffer_make_writable (buffer);
GST_BUFFER_TIMESTAMP (buffer) =
gst_util_uint64_scale_int (GST_SECOND, intersubsrc->n_frames,
@@ -412,75 +264,9 @@ gst_inter_sub_src_create (GstBaseSrc * src, guint64 offset, guint size,
if (intersubsrc->n_frames == 0) {
GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
}
- gst_buffer_set_caps (buffer, GST_PAD_CAPS (GST_BASE_SRC_PAD (intersubsrc)));
intersubsrc->n_frames++;
*buf = buffer;
return GST_FLOW_OK;
}
-
-static gboolean
-gst_inter_sub_src_do_seek (GstBaseSrc * src, GstSegment * segment)
-{
- GstInterSubSrc *intersubsrc = GST_INTER_SUB_SRC (src);
-
- GST_DEBUG_OBJECT (intersubsrc, "do_seek");
-
- return FALSE;
-}
-
-static gboolean
-gst_inter_sub_src_query (GstBaseSrc * src, GstQuery * query)
-{
- GstInterSubSrc *intersubsrc = GST_INTER_SUB_SRC (src);
- gboolean ret;
-
- GST_DEBUG_OBJECT (intersubsrc, "query");
-
- switch (GST_QUERY_TYPE (query)) {
- default:
- ret = GST_BASE_SRC_CLASS (parent_class)->query (src, query);
- }
-
- return ret;
-}
-
-static gboolean
-gst_inter_sub_src_check_get_range (GstBaseSrc * src)
-{
- GstInterSubSrc *intersubsrc = GST_INTER_SUB_SRC (src);
-
- GST_DEBUG_OBJECT (intersubsrc, "get_range");
-
- return FALSE;
-}
-
-static void
-gst_inter_sub_src_fixate (GstBaseSrc * src, GstCaps * caps)
-{
- GstInterSubSrc *intersubsrc = GST_INTER_SUB_SRC (src);
-
- GST_DEBUG_OBJECT (intersubsrc, "fixate");
-}
-
-static gboolean
-gst_inter_sub_src_unlock_stop (GstBaseSrc * src)
-{
- GstInterSubSrc *intersubsrc = GST_INTER_SUB_SRC (src);
-
- GST_DEBUG_OBJECT (intersubsrc, "stop");
-
- return TRUE;
-}
-
-static gboolean
-gst_inter_sub_src_prepare_seek_segment (GstBaseSrc * src, GstEvent * seek,
- GstSegment * segment)
-{
- GstInterSubSrc *intersubsrc = GST_INTER_SUB_SRC (src);
-
- GST_DEBUG_OBJECT (intersubsrc, "seek_segment");
-
- return FALSE;
-}
diff --git a/gst/inter/gstintertest.c b/gst/inter/gstintertest.c
index 269d6427..077024ea 100644
--- a/gst/inter/gstintertest.c
+++ b/gst/inter/gstintertest.c
@@ -190,7 +190,7 @@ gst_inter_test_create_pipeline_vts (GstInterTest * intertest)
g_string_append (pipe_desc, "videotestsrc name=source num-buffers=100 ! ");
g_string_append (pipe_desc,
- "video/x-raw-yuv,format=(fourcc)I420,width=320,height=240 ! ");
+ "video/x-raw,format=(string)I420,width=320,height=240 ! ");
g_string_append (pipe_desc, "timeoverlay ! ");
g_string_append (pipe_desc, "intervideosink name=sink sync=true ");
g_string_append (pipe_desc,
@@ -454,7 +454,6 @@ gst_inter_test_handle_message (GstBus * bus, GstMessage * message,
case GST_MESSAGE_ELEMENT:
case GST_MESSAGE_SEGMENT_START:
case GST_MESSAGE_SEGMENT_DONE:
- case GST_MESSAGE_DURATION:
case GST_MESSAGE_LATENCY:
case GST_MESSAGE_ASYNC_START:
case GST_MESSAGE_ASYNC_DONE:
diff --git a/gst/inter/gstintervideosink.c b/gst/inter/gstintervideosink.c
index d80047e0..6c25590f 100644
--- a/gst/inter/gstintervideosink.c
+++ b/gst/inter/gstintervideosink.c
@@ -55,30 +55,14 @@ static void gst_inter_video_sink_set_property (GObject * object,
guint property_id, const GValue * value, GParamSpec * pspec);
static void gst_inter_video_sink_get_property (GObject * object,
guint property_id, GValue * value, GParamSpec * pspec);
-static void gst_inter_video_sink_dispose (GObject * object);
static void gst_inter_video_sink_finalize (GObject * object);
-static GstCaps *gst_inter_video_sink_get_caps (GstBaseSink * sink);
-static gboolean gst_inter_video_sink_set_caps (GstBaseSink * sink,
- GstCaps * caps);
-static GstFlowReturn gst_inter_video_sink_buffer_alloc (GstBaseSink * sink,
- guint64 offset, guint size, GstCaps * caps, GstBuffer ** buf);
static void gst_inter_video_sink_get_times (GstBaseSink * sink,
GstBuffer * buffer, GstClockTime * start, GstClockTime * end);
static gboolean gst_inter_video_sink_start (GstBaseSink * sink);
static gboolean gst_inter_video_sink_stop (GstBaseSink * sink);
-static gboolean gst_inter_video_sink_unlock (GstBaseSink * sink);
-static gboolean gst_inter_video_sink_event (GstBaseSink * sink,
- GstEvent * event);
-static GstFlowReturn gst_inter_video_sink_preroll (GstBaseSink * sink,
- GstBuffer * buffer);
static GstFlowReturn gst_inter_video_sink_render (GstBaseSink * sink,
GstBuffer * buffer);
-static GstStateChangeReturn gst_inter_video_sink_async_play (GstBaseSink *
- sink);
-static gboolean gst_inter_video_sink_activate_pull (GstBaseSink * sink,
- gboolean active);
-static gboolean gst_inter_video_sink_unlock_stop (GstBaseSink * sink);
enum
{
@@ -92,23 +76,23 @@ static GstStaticPadTemplate gst_inter_video_sink_sink_template =
GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("I420"))
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("I420"))
);
/* class initialization */
-#define DEBUG_INIT(bla) \
- GST_DEBUG_CATEGORY_INIT (gst_inter_video_sink_debug_category, "intervideosink", 0, \
- "debug category for intervideosink element");
-
-GST_BOILERPLATE_FULL (GstInterVideoSink, gst_inter_video_sink, GstBaseSink,
- GST_TYPE_BASE_SINK, DEBUG_INIT);
+G_DEFINE_TYPE (GstInterVideoSink, gst_inter_video_sink, GST_TYPE_BASE_SINK);
static void
-gst_inter_video_sink_base_init (gpointer g_class)
+gst_inter_video_sink_class_init (GstInterVideoSinkClass * klass)
{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+ GstBaseSinkClass *base_sink_class = GST_BASE_SINK_CLASS (klass);
+
+ GST_DEBUG_CATEGORY_INIT (gst_inter_video_sink_debug_category,
+ "intervideosink", 0, "debug category for intervideosink element");
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_inter_video_sink_sink_template));
@@ -118,41 +102,15 @@ gst_inter_video_sink_base_init (gpointer g_class)
"Sink/Video",
"Virtual video sink for internal process communication",
"David Schleef <ds@schleef.org>");
-}
-
-static void
-gst_inter_video_sink_class_init (GstInterVideoSinkClass * klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GstBaseSinkClass *base_sink_class = GST_BASE_SINK_CLASS (klass);
gobject_class->set_property = gst_inter_video_sink_set_property;
gobject_class->get_property = gst_inter_video_sink_get_property;
- gobject_class->dispose = gst_inter_video_sink_dispose;
gobject_class->finalize = gst_inter_video_sink_finalize;
- base_sink_class->get_caps = GST_DEBUG_FUNCPTR (gst_inter_video_sink_get_caps);
- base_sink_class->set_caps = GST_DEBUG_FUNCPTR (gst_inter_video_sink_set_caps);
- if (0)
- base_sink_class->buffer_alloc =
- GST_DEBUG_FUNCPTR (gst_inter_video_sink_buffer_alloc);
base_sink_class->get_times =
GST_DEBUG_FUNCPTR (gst_inter_video_sink_get_times);
base_sink_class->start = GST_DEBUG_FUNCPTR (gst_inter_video_sink_start);
base_sink_class->stop = GST_DEBUG_FUNCPTR (gst_inter_video_sink_stop);
- base_sink_class->unlock = GST_DEBUG_FUNCPTR (gst_inter_video_sink_unlock);
- if (0)
- base_sink_class->event = GST_DEBUG_FUNCPTR (gst_inter_video_sink_event);
- //if (0)
- base_sink_class->preroll = GST_DEBUG_FUNCPTR (gst_inter_video_sink_preroll);
base_sink_class->render = GST_DEBUG_FUNCPTR (gst_inter_video_sink_render);
- if (0)
- base_sink_class->async_play =
- GST_DEBUG_FUNCPTR (gst_inter_video_sink_async_play);
- if (0)
- base_sink_class->activate_pull =
- GST_DEBUG_FUNCPTR (gst_inter_video_sink_activate_pull);
- base_sink_class->unlock_stop =
- GST_DEBUG_FUNCPTR (gst_inter_video_sink_unlock_stop);
g_object_class_install_property (gobject_class, PROP_CHANNEL,
g_param_spec_string ("channel", "Channel",
@@ -161,8 +119,7 @@ gst_inter_video_sink_class_init (GstInterVideoSinkClass * klass)
}
static void
-gst_inter_video_sink_init (GstInterVideoSink * intervideosink,
- GstInterVideoSinkClass * intervideosink_class)
+gst_inter_video_sink_init (GstInterVideoSink * intervideosink)
{
intervideosink->channel = g_strdup ("default");
}
@@ -201,16 +158,6 @@ gst_inter_video_sink_get_property (GObject * object, guint property_id,
}
void
-gst_inter_video_sink_dispose (GObject * object)
-{
- /* GstInterVideoSink *intervideosink = GST_INTER_VIDEO_SINK (object); */
-
- /* clean up as possible. may be called multiple times */
-
- G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-void
gst_inter_video_sink_finalize (GObject * object)
{
GstInterVideoSink *intervideosink = GST_INTER_VIDEO_SINK (object);
@@ -218,33 +165,10 @@ gst_inter_video_sink_finalize (GObject * object)
/* clean up object here */
g_free (intervideosink->channel);
- G_OBJECT_CLASS (parent_class)->finalize (object);
+ G_OBJECT_CLASS (gst_inter_video_sink_parent_class)->finalize (object);
}
-
-static GstCaps *
-gst_inter_video_sink_get_caps (GstBaseSink * sink)
-{
-
- return NULL;
-}
-
-static gboolean
-gst_inter_video_sink_set_caps (GstBaseSink * sink, GstCaps * caps)
-{
-
- return TRUE;
-}
-
-static GstFlowReturn
-gst_inter_video_sink_buffer_alloc (GstBaseSink * sink, guint64 offset,
- guint size, GstCaps * caps, GstBuffer ** buf)
-{
-
- return GST_FLOW_ERROR;
-}
-
static void
gst_inter_video_sink_get_times (GstBaseSink * sink, GstBuffer * buffer,
GstClockTime * start, GstClockTime * end)
@@ -295,28 +219,6 @@ gst_inter_video_sink_stop (GstBaseSink * sink)
return TRUE;
}
-static gboolean
-gst_inter_video_sink_unlock (GstBaseSink * sink)
-{
-
- return TRUE;
-}
-
-static gboolean
-gst_inter_video_sink_event (GstBaseSink * sink, GstEvent * event)
-{
-
- return TRUE;
-}
-
-static GstFlowReturn
-gst_inter_video_sink_preroll (GstBaseSink * sink, GstBuffer * buffer)
-{
- //return gst_inter_video_sink_render (sink, buffer);
-
- return GST_FLOW_OK;
-}
-
static GstFlowReturn
gst_inter_video_sink_render (GstBaseSink * sink, GstBuffer * buffer)
{
@@ -332,24 +234,3 @@ gst_inter_video_sink_render (GstBaseSink * sink, GstBuffer * buffer)
return GST_FLOW_OK;
}
-
-static GstStateChangeReturn
-gst_inter_video_sink_async_play (GstBaseSink * sink)
-{
-
- return GST_STATE_CHANGE_SUCCESS;
-}
-
-static gboolean
-gst_inter_video_sink_activate_pull (GstBaseSink * sink, gboolean active)
-{
-
- return TRUE;
-}
-
-static gboolean
-gst_inter_video_sink_unlock_stop (GstBaseSink * sink)
-{
-
- return TRUE;
-}
diff --git a/gst/inter/gstintervideosrc.c b/gst/inter/gstintervideosrc.c
index ec323e37..54c76d32 100644
--- a/gst/inter/gstintervideosrc.c
+++ b/gst/inter/gstintervideosrc.c
@@ -54,33 +54,18 @@ static void gst_inter_video_src_set_property (GObject * object,
guint property_id, const GValue * value, GParamSpec * pspec);
static void gst_inter_video_src_get_property (GObject * object,
guint property_id, GValue * value, GParamSpec * pspec);
-static void gst_inter_video_src_dispose (GObject * object);
static void gst_inter_video_src_finalize (GObject * object);
-static GstCaps *gst_inter_video_src_get_caps (GstBaseSrc * src);
static gboolean gst_inter_video_src_set_caps (GstBaseSrc * src, GstCaps * caps);
-static gboolean gst_inter_video_src_negotiate (GstBaseSrc * src);
-static gboolean gst_inter_video_src_newsegment (GstBaseSrc * src);
static gboolean gst_inter_video_src_start (GstBaseSrc * src);
static gboolean gst_inter_video_src_stop (GstBaseSrc * src);
static void
gst_inter_video_src_get_times (GstBaseSrc * src, GstBuffer * buffer,
GstClockTime * start, GstClockTime * end);
-static gboolean gst_inter_video_src_is_seekable (GstBaseSrc * src);
-static gboolean gst_inter_video_src_unlock (GstBaseSrc * src);
-static gboolean gst_inter_video_src_event (GstBaseSrc * src, GstEvent * event);
static GstFlowReturn
gst_inter_video_src_create (GstBaseSrc * src, guint64 offset, guint size,
GstBuffer ** buf);
-static gboolean gst_inter_video_src_do_seek (GstBaseSrc * src,
- GstSegment * segment);
-static gboolean gst_inter_video_src_query (GstBaseSrc * src, GstQuery * query);
-static gboolean gst_inter_video_src_check_get_range (GstBaseSrc * src);
-static void gst_inter_video_src_fixate (GstBaseSrc * src, GstCaps * caps);
-static gboolean gst_inter_video_src_unlock_stop (GstBaseSrc * src);
-static gboolean
-gst_inter_video_src_prepare_seek_segment (GstBaseSrc * src, GstEvent * seek,
- GstSegment * segment);
+static GstCaps *gst_inter_video_src_fixate (GstBaseSrc * src, GstCaps * caps);
enum
{
@@ -94,23 +79,23 @@ static GstStaticPadTemplate gst_inter_video_src_src_template =
GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("I420"))
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("I420"))
);
/* class initialization */
-#define DEBUG_INIT(bla) \
- GST_DEBUG_CATEGORY_INIT (gst_inter_video_src_debug_category, "intervideosrc", 0, \
- "debug category for intervideosrc element");
-
-GST_BOILERPLATE_FULL (GstInterVideoSrc, gst_inter_video_src, GstBaseSrc,
- GST_TYPE_BASE_SRC, DEBUG_INIT);
+G_DEFINE_TYPE (GstInterVideoSrc, gst_inter_video_src, GST_TYPE_BASE_SRC);
static void
-gst_inter_video_src_base_init (gpointer g_class)
+gst_inter_video_src_class_init (GstInterVideoSrcClass * klass)
{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+ GstBaseSrcClass *base_src_class = GST_BASE_SRC_CLASS (klass);
+
+ GST_DEBUG_CATEGORY_INIT (gst_inter_video_src_debug_category, "intervideosrc",
+ 0, "debug category for intervideosrc element");
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_inter_video_src_src_template));
@@ -120,49 +105,16 @@ gst_inter_video_src_base_init (gpointer g_class)
"Source/Video",
"Virtual video source for internal process communication",
"David Schleef <ds@schleef.org>");
-}
-
-static void
-gst_inter_video_src_class_init (GstInterVideoSrcClass * klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GstBaseSrcClass *base_src_class = GST_BASE_SRC_CLASS (klass);
gobject_class->set_property = gst_inter_video_src_set_property;
gobject_class->get_property = gst_inter_video_src_get_property;
- gobject_class->dispose = gst_inter_video_src_dispose;
gobject_class->finalize = gst_inter_video_src_finalize;
- if (0)
- base_src_class->get_caps = GST_DEBUG_FUNCPTR (gst_inter_video_src_get_caps);
base_src_class->set_caps = GST_DEBUG_FUNCPTR (gst_inter_video_src_set_caps);
- if (0)
- base_src_class->negotiate =
- GST_DEBUG_FUNCPTR (gst_inter_video_src_negotiate);
- if (0)
- base_src_class->newsegment =
- GST_DEBUG_FUNCPTR (gst_inter_video_src_newsegment);
base_src_class->start = GST_DEBUG_FUNCPTR (gst_inter_video_src_start);
base_src_class->stop = GST_DEBUG_FUNCPTR (gst_inter_video_src_stop);
base_src_class->get_times = GST_DEBUG_FUNCPTR (gst_inter_video_src_get_times);
- if (0)
- base_src_class->is_seekable =
- GST_DEBUG_FUNCPTR (gst_inter_video_src_is_seekable);
- base_src_class->unlock = GST_DEBUG_FUNCPTR (gst_inter_video_src_unlock);
- base_src_class->event = GST_DEBUG_FUNCPTR (gst_inter_video_src_event);
base_src_class->create = GST_DEBUG_FUNCPTR (gst_inter_video_src_create);
- if (0)
- base_src_class->do_seek = GST_DEBUG_FUNCPTR (gst_inter_video_src_do_seek);
- base_src_class->query = GST_DEBUG_FUNCPTR (gst_inter_video_src_query);
- if (0)
- base_src_class->check_get_range =
- GST_DEBUG_FUNCPTR (gst_inter_video_src_check_get_range);
base_src_class->fixate = GST_DEBUG_FUNCPTR (gst_inter_video_src_fixate);
- if (0)
- base_src_class->unlock_stop =
- GST_DEBUG_FUNCPTR (gst_inter_video_src_unlock_stop);
- if (0)
- base_src_class->prepare_seek_segment =
- GST_DEBUG_FUNCPTR (gst_inter_video_src_prepare_seek_segment);
g_object_class_install_property (gobject_class, PROP_CHANNEL,
g_param_spec_string ("channel", "Channel",
@@ -172,8 +124,7 @@ gst_inter_video_src_class_init (GstInterVideoSrcClass * klass)
}
static void
-gst_inter_video_src_init (GstInterVideoSrc * intervideosrc,
- GstInterVideoSrcClass * intervideosrc_class)
+gst_inter_video_src_init (GstInterVideoSrc * intervideosrc)
{
gst_base_src_set_format (GST_BASE_SRC (intervideosrc), GST_FORMAT_TIME);
gst_base_src_set_live (GST_BASE_SRC (intervideosrc), TRUE);
@@ -215,16 +166,6 @@ gst_inter_video_src_get_property (GObject * object, guint property_id,
}
void
-gst_inter_video_src_dispose (GObject * object)
-{
- /* GstInterVideoSrc *intervideosrc = GST_INTER_VIDEO_SRC (object); */
-
- /* clean up as possible. may be called multiple times */
-
- G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-void
gst_inter_video_src_finalize (GObject * object)
{
GstInterVideoSrc *intervideosrc = GST_INTER_VIDEO_SRC (object);
@@ -232,65 +173,24 @@ gst_inter_video_src_finalize (GObject * object)
/* clean up object here */
g_free (intervideosrc->channel);
- G_OBJECT_CLASS (parent_class)->finalize (object);
+ G_OBJECT_CLASS (gst_inter_video_src_parent_class)->finalize (object);
}
-static GstCaps *
-gst_inter_video_src_get_caps (GstBaseSrc * src)
-{
- GstInterVideoSrc *intervideosrc = GST_INTER_VIDEO_SRC (src);
-
- GST_DEBUG_OBJECT (intervideosrc, "get_caps");
-
- return NULL;
-}
static gboolean
gst_inter_video_src_set_caps (GstBaseSrc * src, GstCaps * caps)
{
GstInterVideoSrc *intervideosrc = GST_INTER_VIDEO_SRC (src);
- gboolean ret;
- GstVideoFormat format;
- int width, height;
- int fps_n, fps_d;
GST_DEBUG_OBJECT (intervideosrc, "set_caps");
- ret = gst_video_format_parse_caps (caps, &format, &width, &height);
- ret &= gst_video_parse_caps_framerate (caps, &fps_n, &fps_d);
-
- if (ret) {
- intervideosrc->format = format;
- intervideosrc->width = width;
- intervideosrc->height = height;
- intervideosrc->fps_n = fps_n;
- intervideosrc->fps_d = fps_d;
- GST_DEBUG ("fps %d/%d", fps_n, fps_d);
- }
-
- return ret;
-}
+ if (!gst_video_info_from_caps (&intervideosrc->info, caps))
+ return FALSE;
-static gboolean
-gst_inter_video_src_negotiate (GstBaseSrc * src)
-{
- GstInterVideoSrc *intervideosrc = GST_INTER_VIDEO_SRC (src);
-
- GST_DEBUG_OBJECT (intervideosrc, "negotiate");
-
- return TRUE;
+ return gst_pad_set_caps (src->srcpad, caps);
}
-static gboolean
-gst_inter_video_src_newsegment (GstBaseSrc * src)
-{
- GstInterVideoSrc *intervideosrc = GST_INTER_VIDEO_SRC (src);
-
- GST_DEBUG_OBJECT (intervideosrc, "newsegment");
-
- return TRUE;
-}
static gboolean
gst_inter_video_src_start (GstBaseSrc * src)
@@ -344,41 +244,6 @@ gst_inter_video_src_get_times (GstBaseSrc * src, GstBuffer * buffer,
}
}
-static gboolean
-gst_inter_video_src_is_seekable (GstBaseSrc * src)
-{
- GstInterVideoSrc *intervideosrc = GST_INTER_VIDEO_SRC (src);
-
- GST_DEBUG_OBJECT (intervideosrc, "is_seekable");
-
- return FALSE;
-}
-
-static gboolean
-gst_inter_video_src_unlock (GstBaseSrc * src)
-{
- GstInterVideoSrc *intervideosrc = GST_INTER_VIDEO_SRC (src);
-
- GST_DEBUG_OBJECT (intervideosrc, "unlock");
-
- return TRUE;
-}
-
-static gboolean
-gst_inter_video_src_event (GstBaseSrc * src, GstEvent * event)
-{
- GstInterVideoSrc *intervideosrc = GST_INTER_VIDEO_SRC (src);
- gboolean ret;
-
- GST_DEBUG_OBJECT (intervideosrc, "event");
-
- switch (GST_EVENT_TYPE (event)) {
- default:
- ret = GST_BASE_SRC_CLASS (parent_class)->event (src, event);
- }
-
- return ret;
-}
static GstFlowReturn
gst_inter_video_src_create (GstBaseSrc * src, guint64 offset, guint size,
@@ -386,7 +251,6 @@ gst_inter_video_src_create (GstBaseSrc * src, guint64 offset, guint size,
{
GstInterVideoSrc *intervideosrc = GST_INTER_VIDEO_SRC (src);
GstBuffer *buffer;
- guint8 *data;
GST_DEBUG_OBJECT (intervideosrc, "create");
@@ -404,44 +268,41 @@ gst_inter_video_src_create (GstBaseSrc * src, guint64 offset, guint size,
g_mutex_unlock (intervideosrc->surface->mutex);
if (buffer == NULL) {
+ GstMapInfo map;
+
buffer =
- gst_buffer_new_and_alloc (gst_video_format_get_size
- (intervideosrc->format, intervideosrc->width, intervideosrc->height));
-
- data = GST_BUFFER_DATA (buffer);
- memset (data, 16,
- gst_video_format_get_row_stride (intervideosrc->format, 0,
- intervideosrc->width) *
- gst_video_format_get_component_height (intervideosrc->format, 0,
- intervideosrc->height));
-
- memset (data + gst_video_format_get_component_offset (intervideosrc->format,
- 1, intervideosrc->width, intervideosrc->height),
+ gst_buffer_new_and_alloc (GST_VIDEO_INFO_SIZE (&intervideosrc->info));
+
+ gst_buffer_map (buffer, &map, GST_MAP_WRITE);
+ memset (map.data, 16, GST_VIDEO_INFO_COMP_STRIDE (&intervideosrc->info, 0) *
+ GST_VIDEO_INFO_COMP_HEIGHT (&intervideosrc->info, 0));
+
+ memset (map.data + GST_VIDEO_INFO_COMP_OFFSET (&intervideosrc->info, 1),
128,
- 2 * gst_video_format_get_row_stride (intervideosrc->format, 1,
- intervideosrc->width) *
- gst_video_format_get_component_height (intervideosrc->format, 1,
- intervideosrc->height));
+ 2 * GST_VIDEO_INFO_COMP_STRIDE (&intervideosrc->info, 1) *
+ GST_VIDEO_INFO_COMP_HEIGHT (&intervideosrc->info, 1));
+ gst_buffer_unmap (buffer, &map);
}
- buffer = gst_buffer_make_metadata_writable (buffer);
+ buffer = gst_buffer_make_writable (buffer);
GST_BUFFER_TIMESTAMP (buffer) =
gst_util_uint64_scale_int (GST_SECOND * intervideosrc->n_frames,
- intervideosrc->fps_d, intervideosrc->fps_n);
+ GST_VIDEO_INFO_FPS_D (&intervideosrc->info),
+ GST_VIDEO_INFO_FPS_N (&intervideosrc->info));
GST_DEBUG_OBJECT (intervideosrc, "create ts %" GST_TIME_FORMAT,
GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)));
GST_BUFFER_DURATION (buffer) =
gst_util_uint64_scale_int (GST_SECOND * (intervideosrc->n_frames + 1),
- intervideosrc->fps_d,
- intervideosrc->fps_n) - GST_BUFFER_TIMESTAMP (buffer);
+ GST_VIDEO_INFO_FPS_D (&intervideosrc->info),
+ GST_VIDEO_INFO_FPS_N (&intervideosrc->info)) -
+ GST_BUFFER_TIMESTAMP (buffer);
GST_BUFFER_OFFSET (buffer) = intervideosrc->n_frames;
GST_BUFFER_OFFSET_END (buffer) = -1;
GST_BUFFER_FLAG_UNSET (buffer, GST_BUFFER_FLAG_DISCONT);
if (intervideosrc->n_frames == 0) {
GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
}
- gst_buffer_set_caps (buffer, GST_PAD_CAPS (GST_BASE_SRC_PAD (intervideosrc)));
intervideosrc->n_frames++;
*buf = buffer;
@@ -449,43 +310,7 @@ gst_inter_video_src_create (GstBaseSrc * src, guint64 offset, guint size,
return GST_FLOW_OK;
}
-static gboolean
-gst_inter_video_src_do_seek (GstBaseSrc * src, GstSegment * segment)
-{
- GstInterVideoSrc *intervideosrc = GST_INTER_VIDEO_SRC (src);
-
- GST_DEBUG_OBJECT (intervideosrc, "do_seek");
-
- return FALSE;
-}
-
-static gboolean
-gst_inter_video_src_query (GstBaseSrc * src, GstQuery * query)
-{
- GstInterVideoSrc *intervideosrc = GST_INTER_VIDEO_SRC (src);
- gboolean ret;
-
- GST_DEBUG_OBJECT (intervideosrc, "query");
-
- switch (GST_QUERY_TYPE (query)) {
- default:
- ret = GST_BASE_SRC_CLASS (parent_class)->query (src, query);
- }
-
- return ret;
-}
-
-static gboolean
-gst_inter_video_src_check_get_range (GstBaseSrc * src)
-{
- GstInterVideoSrc *intervideosrc = GST_INTER_VIDEO_SRC (src);
-
- GST_DEBUG_OBJECT (intervideosrc, "get_range");
-
- return FALSE;
-}
-
-static void
+static GstCaps *
gst_inter_video_src_fixate (GstBaseSrc * src, GstCaps * caps)
{
GstInterVideoSrc *intervideosrc = GST_INTER_VIDEO_SRC (src);
@@ -493,6 +318,8 @@ gst_inter_video_src_fixate (GstBaseSrc * src, GstCaps * caps)
GST_DEBUG_OBJECT (intervideosrc, "fixate");
+ caps = gst_caps_make_writable (caps);
+
structure = gst_caps_get_structure (caps, 0);
gst_structure_fixate_field_nearest_int (structure, "width", 320);
@@ -509,25 +336,5 @@ gst_inter_video_src_fixate (GstBaseSrc * src, GstCaps * caps)
if (gst_structure_has_field (structure, "interlaced"))
gst_structure_fixate_field_boolean (structure, "interlaced", FALSE);
-}
-
-static gboolean
-gst_inter_video_src_unlock_stop (GstBaseSrc * src)
-{
- GstInterVideoSrc *intervideosrc = GST_INTER_VIDEO_SRC (src);
-
- GST_DEBUG_OBJECT (intervideosrc, "stop");
-
- return TRUE;
-}
-
-static gboolean
-gst_inter_video_src_prepare_seek_segment (GstBaseSrc * src, GstEvent * seek,
- GstSegment * segment)
-{
- GstInterVideoSrc *intervideosrc = GST_INTER_VIDEO_SRC (src);
-
- GST_DEBUG_OBJECT (intervideosrc, "seek_segment");
-
- return FALSE;
+ return caps;
}
diff --git a/gst/inter/gstintervideosrc.h b/gst/inter/gstintervideosrc.h
index 100c2148..b2b1036e 100644
--- a/gst/inter/gstintervideosrc.h
+++ b/gst/inter/gstintervideosrc.h
@@ -43,12 +43,8 @@ struct _GstInterVideoSrc
char *channel;
- GstVideoFormat format;
- int fps_n;
- int fps_d;
+ GstVideoInfo info;
int n_frames;
- int width;
- int height;
};
struct _GstInterVideoSrcClass
diff --git a/gst/interlace/Makefile.in b/gst/interlace/Makefile.in
index c2028d34..978c6739 100644
--- a/gst/interlace/Makefile.in
+++ b/gst/interlace/Makefile.in
@@ -338,6 +338,8 @@ 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@
@@ -345,6 +347,8 @@ 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@
@@ -359,7 +363,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -387,6 +390,10 @@ 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@
@@ -513,6 +520,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/ivfparse/Makefile.in b/gst/ivfparse/Makefile.in
index cc51a5d9..9dce911c 100644
--- a/gst/ivfparse/Makefile.in
+++ b/gst/ivfparse/Makefile.in
@@ -341,6 +341,8 @@ 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@
@@ -348,6 +350,8 @@ 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@
@@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -390,6 +393,10 @@ 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@
@@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/jp2kdecimator/Makefile.in b/gst/jp2kdecimator/Makefile.in
index 65d58ff4..16963246 100644
--- a/gst/jp2kdecimator/Makefile.in
+++ b/gst/jp2kdecimator/Makefile.in
@@ -343,6 +343,8 @@ 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@
@@ -350,6 +352,8 @@ 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@
@@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -392,6 +395,10 @@ 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@
@@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/jpegformat/Makefile.am b/gst/jpegformat/Makefile.am
index 0fe07a88..03125b57 100644
--- a/gst/jpegformat/Makefile.am
+++ b/gst/jpegformat/Makefile.am
@@ -1,12 +1,10 @@
plugin_LTLIBRARIES = libgstjpegformat.la
libgstjpegformat_la_SOURCES = gstjpegformat.c gstjpegparse.c gstjifmux.c
-libgstjpegformat_la_CFLAGS = \
- $(GST_PLUGINS_BASE_CFLAGS) \
- $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+libgstjpegformat_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) \
+ $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
libgstjpegformat_la_LIBADD = \
- $(GST_PLUGINS_BASE_LIBS) -lgstinterfaces-@GST_API_VERSION@ \
- -lgsttag-@GST_API_VERSION@ $(GST_LIBS) $(GST_BASE_LIBS)
+ $(GST_PLUGINS_BASE_LIBS) -lgsttag-@GST_API_VERSION@ $(GST_BASE_LIBS) $(GST_LIBS)
libgstjpegformat_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
libgstjpegformat_la_LIBTOOLFLAGS = --tag=disable-static
diff --git a/gst/jpegformat/Makefile.in b/gst/jpegformat/Makefile.in
index 0f8bafed..89285822 100644
--- a/gst/jpegformat/Makefile.in
+++ b/gst/jpegformat/Makefile.in
@@ -343,6 +343,8 @@ 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@
@@ -350,6 +352,8 @@ 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@
@@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -392,6 +395,10 @@ 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@
@@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
@@ -606,13 +614,11 @@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
plugin_LTLIBRARIES = libgstjpegformat.la
libgstjpegformat_la_SOURCES = gstjpegformat.c gstjpegparse.c gstjifmux.c
-libgstjpegformat_la_CFLAGS = \
- $(GST_PLUGINS_BASE_CFLAGS) \
- $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+libgstjpegformat_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) \
+ $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
libgstjpegformat_la_LIBADD = \
- $(GST_PLUGINS_BASE_LIBS) -lgstinterfaces-@GST_API_VERSION@ \
- -lgsttag-@GST_API_VERSION@ $(GST_LIBS) $(GST_BASE_LIBS)
+ $(GST_PLUGINS_BASE_LIBS) -lgsttag-@GST_API_VERSION@ $(GST_BASE_LIBS) $(GST_LIBS)
libgstjpegformat_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
libgstjpegformat_la_LIBTOOLFLAGS = --tag=disable-static
diff --git a/gst/jpegformat/gstjifmux.c b/gst/jpegformat/gstjifmux.c
index 9329f28f..4a59388a 100644
--- a/gst/jpegformat/gstjifmux.c
+++ b/gst/jpegformat/gstjifmux.c
@@ -108,9 +108,11 @@ struct _GstJifMuxPrivate
static void gst_jif_mux_finalize (GObject * object);
static void gst_jif_mux_reset (GstJifMux * self);
-static gboolean gst_jif_mux_sink_setcaps (GstPad * pad, GstCaps * caps);
-static gboolean gst_jif_mux_sink_event (GstPad * pad, GstEvent * event);
-static GstFlowReturn gst_jif_mux_chain (GstPad * pad, GstBuffer * buffer);
+static gboolean gst_jif_mux_sink_setcaps (GstJifMux * self, GstCaps * caps);
+static gboolean gst_jif_mux_sink_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
+static GstFlowReturn gst_jif_mux_chain (GstPad * pad, GstObject * parent,
+ GstBuffer * buffer);
static GstStateChangeReturn gst_jif_mux_change_state (GstElement * element,
GstStateChange transition);
@@ -180,15 +182,14 @@ gst_jif_mux_finalize (GObject * object)
}
static gboolean
-gst_jif_mux_sink_setcaps (GstPad * pad, GstCaps * caps)
+gst_jif_mux_sink_setcaps (GstJifMux * self, GstCaps * caps)
{
- GstJifMux *self = GST_JIF_MUX_CAST (GST_PAD_PARENT (pad));
GstStructure *s = gst_caps_get_structure (caps, 0);
const gchar *variant;
/* should be {combined (default), EXIF, JFIF} */
if ((variant = gst_structure_get_string (s, "variant")) != NULL) {
- GST_INFO_OBJECT (pad, "muxing to '%s'", variant);
+ GST_INFO_OBJECT (self, "muxing to '%s'", variant);
/* FIXME: do we want to switch it like this or use a gobject property ? */
}
@@ -196,9 +197,9 @@ gst_jif_mux_sink_setcaps (GstPad * pad, GstCaps * caps)
}
static gboolean
-gst_jif_mux_sink_event (GstPad * pad, GstEvent * event)
+gst_jif_mux_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
- GstJifMux *self = GST_JIF_MUX (GST_PAD_PARENT (pad));
+ GstJifMux *self = GST_JIF_MUX (parent);
gboolean ret;
switch (GST_EVENT_TYPE (event)) {
@@ -207,7 +208,7 @@ gst_jif_mux_sink_event (GstPad * pad, GstEvent * event)
GstCaps *caps;
gst_event_parse_caps (event, &caps);
- ret = gst_jif_mux_sink_setcaps (pad, caps);
+ ret = gst_jif_mux_sink_setcaps (self, caps);
gst_event_unref (event);
break;
}
@@ -220,11 +221,11 @@ gst_jif_mux_sink_event (GstPad * pad, GstEvent * event)
gst_tag_setter_merge_tags (setter, list, mode);
- ret = gst_pad_event_default (pad, event);
+ ret = gst_pad_event_default (pad, parent, event);
break;
}
default:
- ret = gst_pad_event_default (pad, event);
+ ret = gst_pad_event_default (pad, parent, event);
break;
}
return ret;
@@ -275,13 +276,12 @@ gst_jif_mux_parse_image (GstJifMux * self, GstBuffer * buf)
guint8 marker = 0;
guint16 size = 0;
const guint8 *data = NULL;
- guint8 *bdata;
- gsize bsize;
+ GstMapInfo map;
- bdata = gst_buffer_map (buf, &bsize, NULL, GST_MAP_READ);
- gst_byte_reader_init (&reader, bdata, bsize);
+ gst_buffer_map (buf, &map, GST_MAP_READ);
+ gst_byte_reader_init (&reader, map.data, map.size);
- GST_LOG_OBJECT (self, "Received buffer of size: %u", bsize);
+ GST_LOG_OBJECT (self, "Received buffer of size: %u", map.size);
if (!gst_byte_reader_peek_uint8 (&reader, &marker))
goto error;
@@ -329,23 +329,19 @@ gst_jif_mux_parse_image (GstJifMux * self, GstBuffer * buf)
if (marker == SOS) {
gint eoi_pos = -1;
gint i;
- guint8 *mdata;
- gsize msize;
/* search the last 5 bytes for the EOI marker */
- mdata = gst_buffer_map (buf, &msize, NULL, GST_MAP_READ);
- g_assert (msize >= 5);
+ g_assert (map.size >= 5);
for (i = 5; i >= 2; i--) {
- if (mdata[msize - i] == 0xFF && mdata[msize - i + 1] == EOI) {
- eoi_pos = msize - i;
+ if (map.data[map.size - i] == 0xFF && map.data[map.size - i + 1] == EOI) {
+ eoi_pos = map.size - i;
break;
}
}
if (eoi_pos == -1) {
GST_WARNING_OBJECT (self, "Couldn't find an EOI marker");
- eoi_pos = msize;
+ eoi_pos = map.size;
}
- gst_buffer_unmap (buf, mdata, msize);
/* remaining size except EOI is scan data */
self->priv->scan_size = eoi_pos - gst_byte_reader_get_pos (&reader);
@@ -360,11 +356,11 @@ gst_jif_mux_parse_image (GstJifMux * self, GstBuffer * buf)
goto error;
}
GST_INFO_OBJECT (self, "done parsing at 0x%x / 0x%x",
- gst_byte_reader_get_pos (&reader), bsize);
+ gst_byte_reader_get_pos (&reader), map.size);
done:
self->priv->markers = g_list_reverse (self->priv->markers);
- gst_buffer_unmap (buf, bdata, bsize);
+ gst_buffer_unmap (buf, &map);
return TRUE;
@@ -374,7 +370,7 @@ error:
GST_WARNING_OBJECT (self,
"Error parsing image header (need more that %u bytes available)",
gst_byte_reader_get_remaining (&reader));
- gst_buffer_unmap (buf, bdata, bsize);
+ gst_buffer_unmap (buf, &map);
return FALSE;
}
}
@@ -523,7 +519,7 @@ gst_jif_mux_mangle_markers (GstJifMux * self)
cleanup_tags = FALSE;
}
if (!tags) {
- tags = gst_tag_list_new ();
+ tags = gst_tag_list_new_empty ();
cleanup_tags = TRUE;
}
@@ -652,8 +648,7 @@ gst_jif_mux_recombine_image (GstJifMux * self, GstBuffer ** new_buf,
GList *node;
guint size = self->priv->scan_size;
gboolean writer_status = TRUE;
- guint8 *bdata;
- gsize bsize;
+ GstMapInfo map;
/* iterate list and collect size */
for (node = self->priv->markers; node; node = g_list_next (node)) {
@@ -677,8 +672,8 @@ gst_jif_mux_recombine_image (GstJifMux * self, GstBuffer ** new_buf,
GST_BUFFER_COPY_FLAGS | GST_BUFFER_COPY_TIMESTAMPS, 0, -1);
/* memcopy markers */
- bdata = gst_buffer_map (buf, &bsize, NULL, GST_MAP_WRITE);
- writer = gst_byte_writer_new_with_data (bdata, bsize, TRUE);
+ gst_buffer_map (buf, &map, GST_MAP_WRITE);
+ writer = gst_byte_writer_new_with_data (map.data, map.size, TRUE);
for (node = self->priv->markers; node && writer_status;
node = g_list_next (node)) {
@@ -701,7 +696,7 @@ gst_jif_mux_recombine_image (GstJifMux * self, GstBuffer ** new_buf,
self->priv->scan_size);
}
}
- gst_buffer_unmap (buf, bdata, bsize);
+ gst_buffer_unmap (buf, &map);
gst_byte_writer_free (writer);
if (!writer_status) {
@@ -715,9 +710,9 @@ gst_jif_mux_recombine_image (GstJifMux * self, GstBuffer ** new_buf,
}
static GstFlowReturn
-gst_jif_mux_chain (GstPad * pad, GstBuffer * buf)
+gst_jif_mux_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
{
- GstJifMux *self = GST_JIF_MUX (GST_PAD_PARENT (pad));
+ GstJifMux *self = GST_JIF_MUX (parent);
GstFlowReturn fret = GST_FLOW_OK;
#if 0
diff --git a/gst/jpegformat/gstjpegparse.c b/gst/jpegformat/gstjpegparse.c
index 5d47e7c0..b4af9ed9 100644
--- a/gst/jpegformat/gstjpegparse.c
+++ b/gst/jpegformat/gstjpegparse.c
@@ -121,10 +121,12 @@ struct _GstJpegParsePrivate
static void gst_jpeg_parse_dispose (GObject * object);
-static GstFlowReturn gst_jpeg_parse_chain (GstPad * pad, GstBuffer * buffer);
-static gboolean gst_jpeg_parse_sink_setcaps (GstPad * pad, GstCaps * caps);
-static gboolean gst_jpeg_parse_sink_event (GstPad * pad, GstEvent * event);
-static GstCaps *gst_jpeg_parse_src_getcaps (GstPad * pad, GstCaps * filter);
+static GstFlowReturn gst_jpeg_parse_chain (GstPad * pad, GstObject * parent,
+ GstBuffer * buffer);
+static gboolean gst_jpeg_parse_sink_setcaps (GstJpegParse * parse,
+ GstCaps * caps);
+static gboolean gst_jpeg_parse_sink_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
static GstStateChangeReturn gst_jpeg_parse_change_state (GstElement * element,
GstStateChange transition);
@@ -180,8 +182,7 @@ gst_jpeg_parse_init (GstJpegParse * parse)
parse->priv->srcpad =
gst_pad_new_from_static_template (&gst_jpeg_parse_src_pad_template,
"src");
- gst_pad_set_getcaps_function (parse->priv->srcpad,
- GST_DEBUG_FUNCPTR (gst_jpeg_parse_src_getcaps));
+ gst_pad_use_fixed_caps (parse->priv->srcpad);
gst_element_add_pad (GST_ELEMENT (parse), parse->priv->srcpad);
parse->priv->next_ts = GST_CLOCK_TIME_NONE;
@@ -204,9 +205,8 @@ gst_jpeg_parse_dispose (GObject * object)
static gboolean
-gst_jpeg_parse_sink_setcaps (GstPad * pad, GstCaps * caps)
+gst_jpeg_parse_sink_setcaps (GstJpegParse * parse, GstCaps * caps)
{
- GstJpegParse *parse = GST_JPEG_PARSE (GST_OBJECT_PARENT (pad));
GstStructure *s = gst_caps_get_structure (caps, 0);
const GValue *framerate;
@@ -225,19 +225,6 @@ gst_jpeg_parse_sink_setcaps (GstPad * pad, GstCaps * caps)
return TRUE;
}
-static GstCaps *
-gst_jpeg_parse_src_getcaps (GstPad * pad, GstCaps * filter)
-{
- GstCaps *result;
-
- if ((result = gst_pad_get_current_caps (pad))) {
- GST_DEBUG_OBJECT (pad, "using pad caps %" GST_PTR_FORMAT, result);
- } else {
- result = gst_caps_ref (GST_PAD_TEMPLATE_CAPS (GST_PAD_PAD_TEMPLATE (pad)));
- GST_DEBUG_OBJECT (pad, "using pad template caps %" GST_PTR_FORMAT, result);
- }
- return result;
-}
/*
* gst_jpeg_parse_skip_to_jpeg_header:
@@ -508,8 +495,7 @@ gst_jpeg_parse_remove_marker (GstJpegParse * parse,
{
guint16 size = 0;
guint pos = gst_byte_reader_get_pos (reader);
- guint8 *data;
- gsize bsize;
+ GstMapInfo map;
if (!gst_byte_reader_peek_uint16_be (reader, &size))
return FALSE;
@@ -518,9 +504,10 @@ gst_jpeg_parse_remove_marker (GstJpegParse * parse,
GST_LOG_OBJECT (parse, "unhandled marker %x removing %u bytes", marker, size);
- data = gst_buffer_map (buffer, &bsize, NULL, GST_MAP_READWRITE);
- memmove (&data[pos], &data[pos + size], bsize - (pos + size));
- gst_buffer_unmap (buffer, data, bsize - size);
+ gst_buffer_map (buffer, &map, GST_MAP_READWRITE);
+ memmove (&map.data[pos], &map.data[pos + size], map.size - (pos + size));
+ gst_buffer_unmap (buffer, &map);
+
if (!gst_byte_reader_set_pos (reader, pos - size))
return FALSE;
@@ -537,7 +524,7 @@ gst_jpeg_parse_skip_marker (GstJpegParse * parse,
if (!gst_byte_reader_get_uint16_be (reader, &size))
return FALSE;
-#ifndef GST_DISABLE_DEBUG
+#ifndef GST_DISABLE_GST_DEBUG
/* We'd pry the id of the skipped application segment */
if (marker >= APP0 && marker <= APP15) {
const gchar *id_str = NULL;
@@ -553,7 +540,7 @@ gst_jpeg_parse_skip_marker (GstJpegParse * parse,
#else
GST_DEBUG_OBJECT (parse, "unhandled marker %x skiping %u bytes", marker,
size);
-#endif // GST_DISABLE_DEBUG
+#endif // GST_DISABLE_GST_DEBUG
if (!gst_byte_reader_skip (reader, size - 2))
return FALSE;
@@ -565,7 +552,7 @@ static inline GstTagList *
get_tag_list (GstJpegParse * parse)
{
if (!parse->priv->tags)
- parse->priv->tags = gst_tag_list_new ();
+ parse->priv->tags = gst_tag_list_new_empty ();
return parse->priv->tags;
}
@@ -576,7 +563,8 @@ extract_and_queue_tags (GstJpegParse * parse, guint size, guint8 * data,
GstTagList *tags;
GstBuffer *buf;
- buf = gst_buffer_new_wrapped_full (data, NULL, 0, size);
+ buf = gst_buffer_new_wrapped_full (GST_MEMORY_FLAG_READONLY, data, size, 0,
+ size, NULL, NULL);
tags = tag_func (buf);
gst_buffer_unref (buf);
@@ -695,11 +683,10 @@ gst_jpeg_parse_read_header (GstJpegParse * parse, GstBuffer * buffer)
GstByteReader reader;
guint8 marker = 0;
gboolean foundSOF = FALSE;
- guint8 *data;
- gsize size;
+ GstMapInfo map;
- data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
- gst_byte_reader_init (&reader, data, size);
+ gst_buffer_map (buffer, &map, GST_MAP_READ);
+ gst_byte_reader_init (&reader, map.data, map.size);
if (!gst_byte_reader_peek_uint8 (&reader, &marker))
goto error;
@@ -769,7 +756,7 @@ gst_jpeg_parse_read_header (GstJpegParse * parse, GstBuffer * buffer)
goto error;
}
done:
- gst_buffer_unmap (buffer, data, size);
+ gst_buffer_unmap (buffer, &map);
return foundSOF;
@@ -779,7 +766,7 @@ error:
GST_WARNING_OBJECT (parse,
"Error parsing image header (need more than %u bytes available)",
gst_byte_reader_get_remaining (&reader));
- gst_buffer_unmap (buffer, data, size);
+ gst_buffer_unmap (buffer, &map);
return FALSE;
}
unhandled:
@@ -787,7 +774,7 @@ unhandled:
GST_WARNING_OBJECT (parse, "unhandled marker %x, leaving", marker);
/* Not SOF or SOI. Must not be a JPEG file (or file pointer
* is placed wrong). In either case, it's an error. */
- gst_buffer_unmap (buffer, data, size);
+ gst_buffer_unmap (buffer, &map);
return FALSE;
}
}
@@ -876,8 +863,8 @@ gst_jpeg_parse_push_buffer (GstJpegParse * parse, guint len)
if (parse->priv->tags) {
GST_DEBUG_OBJECT (parse, "Pushing tags: %" GST_PTR_FORMAT,
parse->priv->tags);
- gst_element_found_tags_for_pad (GST_ELEMENT_CAST (parse),
- parse->priv->srcpad, parse->priv->tags);
+ gst_pad_push_event (parse->priv->srcpad,
+ gst_event_new_tag (parse->priv->tags));
parse->priv->tags = NULL;
}
@@ -910,16 +897,14 @@ gst_jpeg_parse_push_buffer (GstJpegParse * parse, guint len)
}
static GstFlowReturn
-gst_jpeg_parse_chain (GstPad * pad, GstBuffer * buf)
+gst_jpeg_parse_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
{
- GstJpegParse *parse;
+ GstJpegParse *parse = GST_JPEG_PARSE (parent);
gint len;
GstClockTime timestamp, duration;
GstFlowReturn ret = GST_FLOW_OK;
- parse = GST_JPEG_PARSE (GST_PAD_PARENT (pad));
-
- timestamp = GST_BUFFER_TIMESTAMP (buf);
+ timestamp = GST_BUFFER_PTS (buf);
duration = GST_BUFFER_DURATION (buf);
gst_adapter_push (parse->priv->adapter, buf);
@@ -951,9 +936,9 @@ gst_jpeg_parse_chain (GstPad * pad, GstBuffer * buf)
}
static gboolean
-gst_jpeg_parse_sink_event (GstPad * pad, GstEvent * event)
+gst_jpeg_parse_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
- GstJpegParse *parse;
+ GstJpegParse *parse = GST_JPEG_PARSE (parent);
gboolean res = TRUE;
parse = GST_JPEG_PARSE (gst_pad_get_parent (pad));
@@ -966,7 +951,7 @@ gst_jpeg_parse_sink_event (GstPad * pad, GstEvent * event)
GstCaps *caps;
gst_event_parse_caps (event, &caps);
- res = gst_jpeg_parse_sink_setcaps (pad, caps);
+ res = gst_jpeg_parse_sink_setcaps (parse, caps);
gst_event_unref (event);
break;
}
@@ -995,7 +980,7 @@ gst_jpeg_parse_sink_event (GstPad * pad, GstEvent * event)
break;
case GST_EVENT_TAG:{
if (!parse->priv->new_segment)
- res = gst_pad_event_default (pad, event);
+ res = gst_pad_event_default (pad, parent, event);
else {
GstTagList *taglist = NULL;
@@ -1009,7 +994,7 @@ gst_jpeg_parse_sink_event (GstPad * pad, GstEvent * event)
break;
}
default:
- res = gst_pad_event_default (pad, event);
+ res = gst_pad_event_default (pad, parent, event);
break;
}
diff --git a/gst/librfb/Makefile.in b/gst/librfb/Makefile.in
index 678c3373..eb335187 100644
--- a/gst/librfb/Makefile.in
+++ b/gst/librfb/Makefile.in
@@ -350,6 +350,8 @@ 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@
@@ -357,6 +359,8 @@ 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@
@@ -371,7 +375,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -399,6 +402,10 @@ 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@
@@ -525,6 +532,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/liveadder/Makefile.in b/gst/liveadder/Makefile.in
index 3963ac0c..6b212b4b 100644
--- a/gst/liveadder/Makefile.in
+++ b/gst/liveadder/Makefile.in
@@ -341,6 +341,8 @@ 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@
@@ -348,6 +350,8 @@ 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@
@@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -390,6 +393,10 @@ 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@
@@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/liveadder/liveadder.c b/gst/liveadder/liveadder.c
index 5cdced4d..fc6d54ba 100644
--- a/gst/liveadder/liveadder.c
+++ b/gst/liveadder/liveadder.c
@@ -1,7 +1,7 @@
/*
- * Farsight Voice+Video library
+ * GStreamer
*
- * Copyright 2008 Collabora Ltd
+ * Copyright 2012 Collabora Ltd
* Copyright 2008 Nokia Corporation
* @author: Olivier Crete <olivier.crete@collabora.co.uk>
*
@@ -55,19 +55,23 @@ GST_DEBUG_CATEGORY_STATIC (live_adder_debug);
#define GST_CAT_DEFAULT (live_adder_debug)
static GstStaticPadTemplate gst_live_adder_sink_template =
- GST_STATIC_PAD_TEMPLATE ("sink_%u",
+GST_STATIC_PAD_TEMPLATE ("sink_%u",
GST_PAD_SINK,
GST_PAD_REQUEST,
- GST_STATIC_CAPS (GST_AUDIO_INT_PAD_TEMPLATE_CAPS "; "
- GST_AUDIO_FLOAT_PAD_TEMPLATE_CAPS)
+ GST_STATIC_CAPS (GST_AUDIO_CAPS_MAKE ("{ S8, U8, "
+ GST_AUDIO_NE (S16) "," GST_AUDIO_NE (U16) ","
+ GST_AUDIO_NE (S32) "," GST_AUDIO_NE (U32) ","
+ GST_AUDIO_NE (F32) "," GST_AUDIO_NE (F64) "}"))
);
static GstStaticPadTemplate gst_live_adder_src_template =
- GST_STATIC_PAD_TEMPLATE ("src",
+GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_AUDIO_INT_PAD_TEMPLATE_CAPS "; "
- GST_AUDIO_FLOAT_PAD_TEMPLATE_CAPS)
+ GST_STATIC_CAPS (GST_AUDIO_CAPS_MAKE ("{ S8, U8, "
+ GST_AUDIO_NE (S16) "," GST_AUDIO_NE (U16) ","
+ GST_AUDIO_NE (S32) "," GST_AUDIO_NE (U32) ","
+ GST_AUDIO_NE (F32) "," GST_AUDIO_NE (F64) "}"))
);
/* Valve signals and args */
@@ -92,12 +96,7 @@ typedef struct _GstLiveAdderPadPrivate
} GstLiveAdderPadPrivate;
-#define _do_init(bla) \
- GST_DEBUG_CATEGORY_INIT (live_adder_debug, "liveadder", 0, "Live Adder");
-
-GST_BOILERPLATE_FULL (GstLiveAdder, gst_live_adder, GstElement,
- GST_TYPE_ELEMENT, _do_init);
-
+G_DEFINE_TYPE (GstLiveAdder, gst_live_adder, GST_TYPE_ELEMENT);
static void gst_live_adder_finalize (GObject * object);
static void
@@ -108,20 +107,27 @@ gst_live_adder_get_property (GObject * object,
guint prop_id, GValue * value, GParamSpec * pspec);
static GstPad *gst_live_adder_request_new_pad (GstElement * element,
- GstPadTemplate * templ, const gchar * unused);
+ GstPadTemplate * templ, const gchar * name, const GstCaps * caps);
static void gst_live_adder_release_pad (GstElement * element, GstPad * pad);
static GstStateChangeReturn
gst_live_adder_change_state (GstElement * element, GstStateChange transition);
-static gboolean gst_live_adder_setcaps (GstPad * pad, GstCaps * caps);
-static GstCaps *gst_live_adder_sink_getcaps (GstPad * pad);
-static gboolean
-gst_live_adder_src_activate_push (GstPad * pad, gboolean active);
-static gboolean gst_live_adder_src_event (GstPad * pad, GstEvent * event);
+static gboolean gst_live_adder_setcaps (GstLiveAdder * adder, GstPad * pad,
+ GstCaps * caps);
+static GstCaps *gst_live_adder_sink_getcaps (GstLiveAdder * adder, GstPad * pad,
+ GstCaps * filter);
+static gboolean gst_live_adder_src_activate_mode (GstPad * pad,
+ GstObject * parent, GstPadMode mode, gboolean active);
+static gboolean gst_live_adder_src_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
static void gst_live_adder_loop (gpointer data);
-static gboolean gst_live_adder_query (GstPad * pad, GstQuery * query);
-static gboolean gst_live_adder_sink_event (GstPad * pad, GstEvent * event);
+static gboolean gst_live_adder_src_query (GstPad * pad, GstObject * parent,
+ GstQuery * query);
+static gboolean gst_live_adder_sink_query (GstPad * pad, GstObject * parent,
+ GstQuery * query);
+static gboolean gst_live_adder_sink_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
static void reset_pad_private (GstPad * pad);
@@ -155,10 +161,13 @@ MAKE_FUNC_NC (add_float32, gfloat, gfloat)
static void
-gst_live_adder_base_init (gpointer klass)
+gst_live_adder_class_init (GstLiveAdderClass * klass)
{
+ GObjectClass *gobject_class = (GObjectClass *) klass;
GstElementClass *gstelement_class = (GstElementClass *) klass;
+ GST_DEBUG_CATEGORY_INIT (live_adder_debug, "liveadder", 0, "Live Adder");
+
gst_element_class_add_pad_template (gstelement_class,
gst_static_pad_template_get (&gst_live_adder_src_template));
gst_element_class_add_pad_template (gstelement_class,
@@ -167,13 +176,6 @@ gst_live_adder_base_init (gpointer klass)
"Generic/Audio",
"Mixes live/discontinuous audio streams",
"Olivier Crete <olivier.crete@collabora.co.uk>");
-}
-
-static void
-gst_live_adder_class_init (GstLiveAdderClass * klass)
-{
- GObjectClass *gobject_class = (GObjectClass *) klass;
- GstElementClass *gstelement_class = (GstElementClass *) klass;
gobject_class->finalize = gst_live_adder_finalize;
gobject_class->set_property = gst_live_adder_set_property;
@@ -190,23 +192,18 @@ gst_live_adder_class_init (GstLiveAdderClass * klass)
}
static void
-gst_live_adder_init (GstLiveAdder * adder, GstLiveAdderClass * klass)
+gst_live_adder_init (GstLiveAdder * adder)
{
adder->srcpad =
gst_pad_new_from_static_template (&gst_live_adder_src_template, "src");
- gst_pad_set_getcaps_function (adder->srcpad,
- GST_DEBUG_FUNCPTR (gst_pad_proxy_getcaps));
- gst_pad_set_setcaps_function (adder->srcpad,
- GST_DEBUG_FUNCPTR (gst_live_adder_setcaps));
gst_pad_set_query_function (adder->srcpad,
- GST_DEBUG_FUNCPTR (gst_live_adder_query));
+ GST_DEBUG_FUNCPTR (gst_live_adder_src_query));
gst_pad_set_event_function (adder->srcpad,
GST_DEBUG_FUNCPTR (gst_live_adder_src_event));
- gst_pad_set_activatepush_function (adder->srcpad,
- GST_DEBUG_FUNCPTR (gst_live_adder_src_activate_push));
+ gst_pad_set_activatemode_function (adder->srcpad,
+ GST_DEBUG_FUNCPTR (gst_live_adder_src_activate_mode));
gst_element_add_pad (GST_ELEMENT (adder), adder->srcpad);
- adder->format = GST_LIVE_ADDER_FORMAT_UNSET;
adder->padcount = 0;
adder->func = NULL;
adder->not_empty_cond = g_cond_new ();
@@ -233,7 +230,7 @@ gst_live_adder_finalize (GObject * object)
g_list_free (adder->sinkpads);
- G_OBJECT_CLASS (parent_class)->finalize (object);
+ G_OBJECT_CLASS (gst_live_adder_parent_class)->finalize (object);
}
@@ -294,24 +291,24 @@ gst_live_adder_get_property (GObject * object,
/* we can only accept caps that we and downstream can handle. */
static GstCaps *
-gst_live_adder_sink_getcaps (GstPad * pad)
+gst_live_adder_sink_getcaps (GstLiveAdder * adder, GstPad * pad,
+ GstCaps * filter)
{
- GstLiveAdder *adder;
GstCaps *result, *peercaps, *sinkcaps;
- adder = GST_LIVE_ADDER (GST_PAD_PARENT (pad));
-
/* get the downstream possible caps */
- peercaps = gst_pad_peer_get_caps (adder->srcpad);
+ peercaps = gst_pad_peer_query_caps (adder->srcpad, filter);
/* get the allowed caps on this sinkpad, we use the fixed caps function so
* that it does not call recursively in this function. */
- sinkcaps = gst_pad_get_fixed_caps_func (pad);
+ sinkcaps = gst_pad_get_current_caps (pad);
+ if (!sinkcaps)
+ sinkcaps = gst_pad_get_pad_template_caps (pad);
if (peercaps) {
/* if the peer has caps, intersect */
GST_DEBUG_OBJECT (adder, "intersecting peer and template caps");
result = gst_caps_intersect (peercaps, sinkcaps);
- gst_caps_unref (peercaps);
gst_caps_unref (sinkcaps);
+ gst_caps_unref (peercaps);
} else {
/* the peer has no caps (or there is no peer), just use the allowed caps
* of this sinkpad. */
@@ -322,73 +319,111 @@ gst_live_adder_sink_getcaps (GstPad * pad)
return result;
}
+struct SetCapsIterCtx
+{
+ GstPad *pad;
+ GstCaps *caps;
+ gboolean all_valid;
+};
+
+static void
+check_other_caps (const GValue * item, gpointer user_data)
+{
+ GstPad *otherpad = GST_PAD (g_value_get_object (item));
+ struct SetCapsIterCtx *ctx = user_data;
+
+ if (otherpad == ctx->pad)
+ return;
+
+ if (!gst_pad_peer_query_accept_caps (otherpad, ctx->caps))
+ ctx->all_valid = FALSE;
+}
+
+static void
+set_other_caps (const GValue * item, gpointer user_data)
+{
+ GstPad *otherpad = GST_PAD (g_value_get_object (item));
+ struct SetCapsIterCtx *ctx = user_data;
+
+ if (otherpad == ctx->pad)
+ return;
+
+ if (!gst_pad_set_caps (otherpad, ctx->caps))
+ ctx->all_valid = FALSE;
+}
+
/* the first caps we receive on any of the sinkpads will define the caps for all
* the other sinkpads because we can only mix streams with the same caps.
* */
static gboolean
-gst_live_adder_setcaps (GstPad * pad, GstCaps * caps)
+gst_live_adder_setcaps (GstLiveAdder * adder, GstPad * pad, GstCaps * caps)
{
- GstLiveAdder *adder;
- GList *pads;
- GstStructure *structure;
- const char *media_type;
-
- adder = GST_LIVE_ADDER (GST_PAD_PARENT (pad));
+ GstIterator *iter;
+ struct SetCapsIterCtx ctx;
GST_LOG_OBJECT (adder, "setting caps on pad %p,%s to %" GST_PTR_FORMAT, pad,
GST_PAD_NAME (pad), caps);
/* FIXME, see if the other pads can accept the format. Also lock the
* format on the other pads to this new format. */
- GST_OBJECT_LOCK (adder);
- pads = GST_ELEMENT (adder)->pads;
- while (pads) {
- GstPad *otherpad = GST_PAD (pads->data);
+ iter = gst_element_iterate_sink_pads (GST_ELEMENT (adder));
+ ctx.pad = pad;
+ ctx.caps = caps;
+ ctx.all_valid = TRUE;
+ while (gst_iterator_foreach (iter, check_other_caps, &ctx) ==
+ GST_ITERATOR_RESYNC) {
+ ctx.all_valid = TRUE;
+ gst_iterator_resync (iter);
+ }
+ if (!ctx.all_valid) {
+ GST_WARNING_OBJECT (adder, "Caps are not acceptable by other sinkpads");
+ gst_iterator_free (iter);
+ return FALSE;
+ }
- if (otherpad != pad)
- gst_caps_replace (&GST_PAD_CAPS (otherpad), caps);
+ while (gst_iterator_foreach (iter, set_other_caps, &ctx) ==
+ GST_ITERATOR_RESYNC) {
+ ctx.all_valid = TRUE;
+ gst_iterator_resync (iter);
+ }
+ gst_iterator_free (iter);
+
+ if (!ctx.all_valid) {
+ GST_WARNING_OBJECT (adder, "Could not set caps on the other sink pads");
+ return FALSE;
+ }
- pads = g_list_next (pads);
+ if (!gst_pad_set_caps (adder->srcpad, caps)) {
+ GST_WARNING_OBJECT (adder, "Could not set caps downstream");
+ return FALSE;
}
+ GST_OBJECT_LOCK (adder);
/* parse caps now */
- structure = gst_caps_get_structure (caps, 0);
- media_type = gst_structure_get_name (structure);
- if (strcmp (media_type, "audio/x-raw-int") == 0) {
- GST_DEBUG_OBJECT (adder, "parse_caps sets adder to format int");
- adder->format = GST_LIVE_ADDER_FORMAT_INT;
- gst_structure_get_int (structure, "width", &adder->width);
- gst_structure_get_int (structure, "depth", &adder->depth);
- gst_structure_get_int (structure, "endianness", &adder->endianness);
- gst_structure_get_boolean (structure, "signed", &adder->is_signed);
-
- if (adder->endianness != G_BYTE_ORDER)
- goto not_supported;
-
- switch (adder->width) {
+ if (!gst_audio_info_from_caps (&adder->info, caps))
+ goto not_supported;
+
+ if (GST_AUDIO_INFO_IS_INTEGER (&adder->info)) {
+ switch (GST_AUDIO_INFO_WIDTH (&adder->info)) {
case 8:
- adder->func = (adder->is_signed ?
- (GstLiveAdderFunction) add_int8 : (GstLiveAdderFunction) add_uint8);
+ adder->func = GST_AUDIO_INFO_IS_SIGNED (&adder->info) ?
+ (GstLiveAdderFunction) add_int8 : (GstLiveAdderFunction) add_uint8;
break;
case 16:
- adder->func = (adder->is_signed ?
+ adder->func = GST_AUDIO_INFO_IS_SIGNED (&adder->info) ?
(GstLiveAdderFunction) add_int16 : (GstLiveAdderFunction)
- add_uint16);
+ add_uint16;
break;
case 32:
- adder->func = (adder->is_signed ?
+ adder->func = GST_AUDIO_INFO_IS_SIGNED (&adder->info) ?
(GstLiveAdderFunction) add_int32 : (GstLiveAdderFunction)
- add_uint32);
+ add_uint32;
break;
default:
goto not_supported;
}
- } else if (strcmp (media_type, "audio/x-raw-float") == 0) {
- GST_DEBUG_OBJECT (adder, "parse_caps sets adder to format float");
- adder->format = GST_LIVE_ADDER_FORMAT_FLOAT;
- gst_structure_get_int (structure, "width", &adder->width);
-
- switch (adder->width) {
+ } else if (GST_AUDIO_INFO_IS_FLOAT (&adder->info)) {
+ switch (GST_AUDIO_INFO_WIDTH (&adder->info)) {
case 32:
adder->func = (GstLiveAdderFunction) add_float32;
break;
@@ -402,11 +437,6 @@ gst_live_adder_setcaps (GstPad * pad, GstCaps * caps)
goto not_supported;
}
- gst_structure_get_int (structure, "channels", &adder->channels);
- gst_structure_get_int (structure, "rate", &adder->rate);
- /* precalc bps */
- adder->bps = (adder->width / 8) * adder->channels;
-
GST_OBJECT_UNLOCK (adder);
return TRUE;
@@ -442,12 +472,14 @@ gst_live_adder_flush_start (GstLiveAdder * adder)
}
static gboolean
-gst_live_adder_src_activate_push (GstPad * pad, gboolean active)
+gst_live_adder_src_activate_mode (GstPad * pad, GstObject * parent,
+ GstPadMode mode, gboolean active)
{
+ GstLiveAdder *adder = GST_LIVE_ADDER (parent);
gboolean result = TRUE;
- GstLiveAdder *adder = NULL;
- adder = GST_LIVE_ADDER (gst_pad_get_parent (pad));
+ if (mode == GST_PAD_MODE_PULL)
+ return FALSE;
if (active) {
/* Mark as non flushing */
@@ -469,19 +501,15 @@ gst_live_adder_src_activate_push (GstPad * pad, gboolean active)
result = gst_pad_stop_task (pad);
}
- gst_object_unref (adder);
-
return result;
}
static gboolean
-gst_live_adder_sink_event (GstPad * pad, GstEvent * event)
+gst_live_adder_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
- gboolean ret = TRUE;
- GstLiveAdder *adder = NULL;
+ GstLiveAdder *adder = GST_LIVE_ADDER (parent);
GstLiveAdderPadPrivate *padprivate = NULL;
-
- adder = GST_LIVE_ADDER (gst_pad_get_parent (pad));
+ gboolean ret = TRUE;
padprivate = gst_pad_get_element_private (pad);
@@ -491,34 +519,35 @@ gst_live_adder_sink_event (GstPad * pad, GstEvent * event)
GST_LOG_OBJECT (adder, "received %s", GST_EVENT_TYPE_NAME (event));
switch (GST_EVENT_TYPE (event)) {
- case GST_EVENT_NEWSEGMENT:
+ case GST_EVENT_CAPS:
{
- GstFormat format;
- gdouble rate, arate;
- gint64 start, stop, time;
- gboolean update;
-
- gst_event_parse_new_segment_full (event, &update, &rate, &arate, &format,
- &start, &stop, &time);
+ GstCaps *caps;
+ gst_event_parse_caps (event, &caps);
+ ret = gst_live_adder_setcaps (adder, pad, caps);
gst_event_unref (event);
+ break;
+ }
+ case GST_EVENT_SEGMENT:
+ {
+ const GstSegment *segment;
+ GstSegment livesegment;
+
+ gst_event_parse_segment (event, &segment);
/* we need time for now */
- if (format != GST_FORMAT_TIME)
+ if (segment->format != GST_FORMAT_TIME)
goto newseg_wrong_format;
- GST_DEBUG_OBJECT (adder,
- "newsegment: update %d, rate %g, arate %g, start %" GST_TIME_FORMAT
- ", stop %" GST_TIME_FORMAT ", time %" GST_TIME_FORMAT,
- update, rate, arate, GST_TIME_ARGS (start), GST_TIME_ARGS (stop),
- GST_TIME_ARGS (time));
-
/* now configure the values, we need these to time the release of the
* buffers on the srcpad. */
GST_OBJECT_LOCK (adder);
- gst_segment_set_newsegment_full (&padprivate->segment, update,
- rate, arate, format, start, stop, time);
+ gst_segment_copy_into (segment, &padprivate->segment);
GST_OBJECT_UNLOCK (adder);
+ gst_event_unref (event);
+
+ gst_segment_init (&livesegment, GST_FORMAT_TIME);
+ gst_pad_push_event (adder->srcpad, gst_event_new_segment (&livesegment));
break;
}
case GST_EVENT_FLUSH_START:
@@ -527,13 +556,12 @@ gst_live_adder_sink_event (GstPad * pad, GstEvent * event)
break;
case GST_EVENT_FLUSH_STOP:
GST_OBJECT_LOCK (adder);
- adder->segment_pending = TRUE;
adder->next_timestamp = GST_CLOCK_TIME_NONE;
reset_pad_private (pad);
- adder->segment_pending = TRUE;
GST_OBJECT_UNLOCK (adder);
ret = gst_pad_push_event (adder->srcpad, event);
- ret = gst_live_adder_src_activate_push (adder->srcpad, TRUE);
+ ret = gst_live_adder_src_activate_mode (adder->srcpad, GST_OBJECT (adder),
+ GST_PAD_MODE_PUSH, TRUE);
break;
case GST_EVENT_EOS:
{
@@ -562,21 +590,20 @@ gst_live_adder_sink_event (GstPad * pad, GstEvent * event)
}
done:
- gst_object_unref (adder);
return ret;
/* ERRORS */
newseg_wrong_format:
{
- GST_DEBUG_OBJECT (adder, "received non TIME newsegment");
+ GST_DEBUG_OBJECT (adder, "received non TIME segment");
ret = FALSE;
goto done;
}
}
static gboolean
-gst_live_adder_query_pos_dur (GstLiveAdder * adder, GstFormat informat,
+gst_live_adder_query_pos_dur (GstLiveAdder * adder, GstFormat format,
gboolean position, gint64 * outvalue)
{
gint64 max = G_MININT64;
@@ -588,8 +615,7 @@ gst_live_adder_query_pos_dur (GstLiveAdder * adder, GstFormat informat,
it = gst_element_iterate_sink_pads (GST_ELEMENT_CAST (adder));
while (!done) {
GstIteratorResult ires;
- gpointer item;
- GstFormat format = informat;
+ GValue item = { 0 };
ires = gst_iterator_next (it, &item);
switch (ires) {
@@ -598,21 +624,21 @@ gst_live_adder_query_pos_dur (GstLiveAdder * adder, GstFormat informat,
break;
case GST_ITERATOR_OK:
{
- GstPad *pad = GST_PAD_CAST (item);
+ GstPad *pad = GST_PAD_CAST (g_value_get_object (&item));
gint64 value;
gboolean curres;
/* ask sink peer for duration */
if (position)
- curres = gst_pad_query_peer_position (pad, &format, &value);
+ curres = gst_pad_peer_query_position (pad, format, &value);
else
- curres = gst_pad_query_peer_duration (pad, &format, &value);
+ curres = gst_pad_peer_query_duration (pad, format, &value);
/* take max from all valid return values */
/* Only if the format is the one we requested, otherwise ignore it ?
*/
- if (curres && format == informat) {
+ if (curres) {
res &= curres;
/* valid unknown length, stop searching */
@@ -694,20 +720,18 @@ gst_live_adder_query_position (GstLiveAdder * adder, GstQuery * query)
static gboolean
-gst_live_adder_query (GstPad * pad, GstQuery * query)
+gst_live_adder_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
{
- GstLiveAdder *adder;
+ GstLiveAdder *adder = GST_LIVE_ADDER (parent);
gboolean res = FALSE;
- adder = GST_LIVE_ADDER (gst_pad_get_parent (pad));
-
switch (GST_QUERY_TYPE (query)) {
case GST_QUERY_LATENCY:
{
/* We need to send the query upstream and add the returned latency to our
* own */
GstClockTime min_latency = 0, max_latency = G_MAXUINT64;
- gpointer item;
+ GValue item = { 0 };
GstIterator *iter = NULL;
gboolean done = FALSE;
@@ -717,7 +741,7 @@ gst_live_adder_query (GstPad * pad, GstQuery * query)
switch (gst_iterator_next (iter, &item)) {
case GST_ITERATOR_OK:
{
- GstPad *sinkpad = item;
+ GstPad *sinkpad = GST_PAD (g_value_get_object (&item));
GstClockTime pad_min_latency, pad_max_latency;
gboolean pad_us_live;
@@ -736,7 +760,6 @@ gst_live_adder_query (GstPad * pad, GstQuery * query)
min_latency = MAX (pad_min_latency, min_latency);
max_latency = MIN (pad_max_latency, max_latency);
}
- gst_object_unref (item);
}
break;
case GST_ITERATOR_RESYNC:
@@ -782,18 +805,45 @@ gst_live_adder_query (GstPad * pad, GstQuery * query)
res = gst_live_adder_query_position (adder, query);
break;
default:
- res = gst_pad_query_default (pad, query);
+ res = gst_pad_query_default (pad, parent, query);
break;
}
- gst_object_unref (adder);
+ return res;
+}
+
+static gboolean
+gst_live_adder_sink_query (GstPad * pad, GstObject * parent, GstQuery * query)
+{
+ GstLiveAdder *adder = GST_LIVE_ADDER (parent);
+ gboolean res;
+
+ switch (GST_QUERY_TYPE (query)) {
+ case GST_QUERY_CAPS:
+ {
+ GstCaps *filter;
+ GstCaps *result;
+
+ gst_query_parse_caps (query, &filter);
+ result = gst_live_adder_sink_getcaps (adder, pad, filter);
+ gst_query_set_caps_result (query, result);
+ res = TRUE;
+ break;
+ }
+ default:
+ res = gst_pad_query_default (pad, parent, query);
+ break;
+ }
return res;
}
static gboolean
-forward_event_func (GstPad * pad, GValue * ret, GstEvent * event)
+forward_event_func (const GValue * item, GValue * ret, gpointer user_data)
{
+ GstPad *pad = GST_PAD (g_value_get_object (item));
+ GstEvent *event = user_data;
+
gst_event_ref (event);
GST_LOG_OBJECT (pad, "About to send event %s", GST_EVENT_TYPE_NAME (event));
if (!gst_pad_push_event (pad, event)) {
@@ -804,11 +854,6 @@ forward_event_func (GstPad * pad, GValue * ret, GstEvent * event)
GST_LOG_OBJECT (pad, "Sent event %p (%s).",
event, GST_EVENT_TYPE_NAME (event));
}
-
- /* unref the pad because of a FIXME in gst_iterator_unfold
- * it does a gst_iterator_next which refs the pad, but it never unrefs it
- */
- gst_object_unref (pad);
return TRUE;
}
@@ -833,8 +878,7 @@ forward_event (GstLiveAdder * adder, GstEvent * event)
g_value_init (&vret, G_TYPE_BOOLEAN);
g_value_set_boolean (&vret, TRUE);
it = gst_element_iterate_sink_pads (GST_ELEMENT_CAST (adder));
- gst_iterator_fold (it, (GstIteratorFoldFunction) forward_event_func, &vret,
- event);
+ gst_iterator_fold (it, forward_event_func, &vret, event);
gst_iterator_free (it);
ret = g_value_get_boolean (&vret);
@@ -844,13 +888,11 @@ forward_event (GstLiveAdder * adder, GstEvent * event)
static gboolean
-gst_live_adder_src_event (GstPad * pad, GstEvent * event)
+gst_live_adder_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
- GstLiveAdder *adder;
+ GstLiveAdder *adder = GST_LIVE_ADDER (parent);
gboolean result;
- adder = GST_LIVE_ADDER (gst_pad_get_parent (pad));
-
switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_QOS:
/* TODO : QoS might be tricky */
@@ -867,7 +909,6 @@ gst_live_adder_src_event (GstPad * pad, GstEvent * event)
}
gst_event_unref (event);
- gst_object_unref (adder);
return result;
}
@@ -876,15 +917,16 @@ static guint
gst_live_adder_length_from_duration (GstLiveAdder * adder,
GstClockTime duration)
{
- guint64 ret = (duration * adder->rate / GST_SECOND) * adder->bps;
+ guint64 ret = GST_AUDIO_INFO_BPF (&adder->info) *
+ (duration * GST_AUDIO_INFO_RATE (&adder->info) / GST_SECOND);
return (guint) ret;
}
static GstFlowReturn
-gst_live_live_adder_chain (GstPad * pad, GstBuffer * buffer)
+gst_live_live_adder_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
{
- GstLiveAdder *adder = GST_LIVE_ADDER (gst_pad_get_parent_element (pad));
+ GstLiveAdder *adder = GST_LIVE_ADDER (parent);
GstLiveAdderPadPrivate *padprivate = NULL;
GstFlowReturn ret = GST_FLOW_OK;
GList *item = NULL;
@@ -916,7 +958,7 @@ gst_live_live_adder_chain (GstPad * pad, GstBuffer * buffer)
if (padprivate->eos) {
GST_DEBUG_OBJECT (adder, "Received buffer after EOS");
- ret = GST_FLOW_UNEXPECTED;
+ ret = GST_FLOW_EOS;
gst_buffer_unref (buffer);
goto out;
}
@@ -928,14 +970,9 @@ gst_live_live_adder_chain (GstPad * pad, GstBuffer * buffer)
GST_WARNING_OBJECT (adder, "No new-segment received,"
" initializing segment with time 0..-1");
gst_segment_init (&padprivate->segment, GST_FORMAT_TIME);
- gst_segment_set_newsegment (&padprivate->segment,
- FALSE, 1.0, GST_FORMAT_TIME, 0, -1, 0);
}
- if (padprivate->segment.format != GST_FORMAT_TIME)
- goto invalid_segment;
-
- buffer = gst_buffer_make_metadata_writable (buffer);
+ buffer = gst_buffer_make_writable (buffer);
drift = GST_BUFFER_TIMESTAMP (buffer) - padprivate->expected_timestamp;
@@ -960,8 +997,9 @@ gst_live_live_adder_chain (GstPad * pad, GstBuffer * buffer)
/* If there is no duration, lets set one */
if (!GST_BUFFER_DURATION_IS_VALID (buffer)) {
- GST_BUFFER_DURATION (buffer) =
- gst_audio_duration_from_pad_buffer (pad, buffer);
+ GST_BUFFER_DURATION (buffer) = (gst_buffer_get_size (buffer) * GST_SECOND) /
+ (GST_AUDIO_INFO_BPF (&adder->info) *
+ GST_AUDIO_INFO_RATE (&adder->info));
padprivate->expected_timestamp = GST_CLOCK_TIME_NONE;
} else {
padprivate->expected_timestamp = GST_BUFFER_TIMESTAMP (buffer) +
@@ -976,8 +1014,8 @@ gst_live_live_adder_chain (GstPad * pad, GstBuffer * buffer)
* durations afterwards
*/
- buffer = gst_audio_buffer_clip (buffer, &padprivate->segment, adder->rate,
- adder->bps);
+ buffer = gst_audio_buffer_clip (buffer, &padprivate->segment,
+ GST_AUDIO_INFO_RATE (&adder->info), GST_AUDIO_INFO_BPF (&adder->info));
/* buffer can be NULL if it's completely outside of the segment */
if (!buffer) {
@@ -1026,6 +1064,7 @@ gst_live_live_adder_chain (GstPad * pad, GstBuffer * buffer)
GstClockTime mix_duration = 0;
GstClockTime mix_start = 0;
GstClockTime mix_end = 0;
+ GstMapInfo oldmap, map;
/* We haven't reached our place yet */
if (GST_BUFFER_TIMESTAMP (buffer) + skip >=
@@ -1045,7 +1084,7 @@ gst_live_live_adder_chain (GstPad * pad, GstBuffer * buffer)
GstClockTime subbuffer_duration = GST_BUFFER_TIMESTAMP (oldbuffer) -
(GST_BUFFER_TIMESTAMP (buffer) + skip);
- subbuffer = gst_buffer_create_sub (buffer,
+ subbuffer = gst_buffer_copy_region (buffer, GST_BUFFER_COPY_ALL,
gst_live_adder_length_from_duration (adder, skip),
gst_live_adder_length_from_duration (adder, subbuffer_duration));
@@ -1075,12 +1114,15 @@ gst_live_live_adder_chain (GstPad * pad, GstBuffer * buffer)
mix_duration = mix_end - mix_start;
- adder->func (GST_BUFFER_DATA (oldbuffer) +
+ gst_buffer_map (oldbuffer, &oldmap, GST_MAP_WRITE);
+ gst_buffer_map (buffer, &map, GST_MAP_READ);
+ adder->func (oldmap.data +
gst_live_adder_length_from_duration (adder, old_skip),
- GST_BUFFER_DATA (buffer) +
+ map.data +
gst_live_adder_length_from_duration (adder, skip),
gst_live_adder_length_from_duration (adder, mix_duration));
-
+ gst_buffer_unmap (oldbuffer, &oldmap);
+ gst_buffer_unmap (buffer, &map);
skip += mix_duration;
}
@@ -1092,12 +1134,13 @@ gst_live_live_adder_chain (GstPad * pad, GstBuffer * buffer)
if (skip) {
GstClockTime subbuffer_duration = GST_BUFFER_DURATION (buffer) - skip;
GstClockTime subbuffer_ts = GST_BUFFER_TIMESTAMP (buffer) + skip;
- GstBuffer *new_buffer = gst_buffer_create_sub (buffer,
+ GstBuffer *new_buffer = gst_buffer_copy_region (buffer,
+ GST_BUFFER_COPY_ALL,
gst_live_adder_length_from_duration (adder, skip),
gst_live_adder_length_from_duration (adder, subbuffer_duration));
gst_buffer_unref (buffer);
buffer = new_buffer;
- GST_BUFFER_TIMESTAMP (buffer) = subbuffer_ts;
+ GST_BUFFER_PTS (buffer) = subbuffer_ts;
GST_BUFFER_DURATION (buffer) = subbuffer_duration;
}
@@ -1110,7 +1153,6 @@ gst_live_live_adder_chain (GstPad * pad, GstBuffer * buffer)
out:
GST_OBJECT_UNLOCK (adder);
- gst_object_unref (adder);
return ret;
@@ -1123,19 +1165,6 @@ invalid_timestamp:
("Invalid timestamp received on buffer"));
return GST_FLOW_ERROR;
-
-invalid_segment:
- {
- const gchar *format = gst_format_get_name (padprivate->segment.format);
- GST_OBJECT_UNLOCK (adder);
- gst_buffer_unref (buffer);
- GST_ELEMENT_ERROR (adder, STREAM, FAILED,
- ("This element only supports TIME segments, received other type"),
- ("Received a segment of type %s, only support time segment", format));
-
- return GST_FLOW_ERROR;
- }
-
}
/*
@@ -1257,7 +1286,7 @@ push_buffer:
if (diff < 0)
diff = -diff;
- if (diff < GST_SECOND / adder->rate) {
+ if (diff < GST_SECOND / GST_AUDIO_INFO_RATE (&adder->info)) {
GST_BUFFER_TIMESTAMP (buffer) = adder->next_timestamp;
GST_DEBUG_OBJECT (adder, "Correcting slight skew");
GST_BUFFER_FLAG_UNSET (buffer, GST_BUFFER_FLAG_DISCONT);
@@ -1280,17 +1309,6 @@ push_buffer:
GST_BUFFER_DURATION (buffer);
else
adder->next_timestamp = GST_CLOCK_TIME_NONE;
-
- if (adder->segment_pending) {
- /*
- * We set the start at 0, because we re-timestamps to the running time
- */
- newseg_event = gst_event_new_new_segment_full (FALSE, 1.0, 1.0,
- GST_FORMAT_TIME, 0, -1, 0);
-
- adder->segment_pending = FALSE;
- }
-
GST_OBJECT_UNLOCK (adder);
if (newseg_event)
@@ -1355,7 +1373,7 @@ eos:
{
/* store result, we are flushing now */
GST_DEBUG_OBJECT (adder, "We are EOS, pushing EOS downstream");
- adder->srcresult = GST_FLOW_UNEXPECTED;
+ adder->srcresult = GST_FLOW_EOS;
gst_pad_pause_task (adder->srcpad);
GST_OBJECT_UNLOCK (adder);
gst_pad_push_event (adder->srcpad, gst_event_new_eos ());
@@ -1365,7 +1383,7 @@ eos:
static GstPad *
gst_live_adder_request_new_pad (GstElement * element, GstPadTemplate * templ,
- const gchar * unused)
+ const gchar * ignored_name, const GstCaps * caps)
{
gchar *name;
GstLiveAdder *adder;
@@ -1390,12 +1408,10 @@ gst_live_adder_request_new_pad (GstElement * element, GstPadTemplate * templ,
GST_DEBUG_OBJECT (adder, "request new pad %s", name);
g_free (name);
- gst_pad_set_getcaps_function (newpad,
- GST_DEBUG_FUNCPTR (gst_live_adder_sink_getcaps));
- gst_pad_set_setcaps_function (newpad,
- GST_DEBUG_FUNCPTR (gst_live_adder_setcaps));
gst_pad_set_event_function (newpad,
GST_DEBUG_FUNCPTR (gst_live_adder_sink_event));
+ gst_pad_set_query_function (newpad,
+ GST_DEBUG_FUNCPTR (gst_live_adder_sink_query));
padprivate = g_new0 (GstLiveAdderPadPrivate, 1);
@@ -1506,7 +1522,8 @@ gst_live_adder_change_state (GstElement * element, GstStateChange transition)
break;
}
- ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
+ ret = GST_ELEMENT_CLASS (gst_live_adder_parent_class)->change_state (element,
+ transition);
switch (transition) {
case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
diff --git a/gst/liveadder/liveadder.h b/gst/liveadder/liveadder.h
index 7448601f..136ac3ec 100644
--- a/gst/liveadder/liveadder.h
+++ b/gst/liveadder/liveadder.h
@@ -1,5 +1,5 @@
/*
- * Farsight Voice+Video library
+ * GStreamer
*
* Copyright 2008 Collabora Ltd
* Copyright 2008 Nokia Corporation
@@ -28,6 +28,7 @@
#define __GST_LIVE_ADDER_H__
#include <gst/gst.h>
+#include <gst/audio/audio.h>
G_BEGIN_DECLS
#define GST_TYPE_LIVE_ADDER (gst_live_adder_get_type())
@@ -39,13 +40,6 @@ G_BEGIN_DECLS
typedef struct _GstLiveAdder GstLiveAdder;
typedef struct _GstLiveAdderClass GstLiveAdderClass;
-typedef enum
-{
- GST_LIVE_ADDER_FORMAT_UNSET,
- GST_LIVE_ADDER_FORMAT_INT,
- GST_LIVE_ADDER_FORMAT_FLOAT
-} GstLiveAdderFormat;
-
typedef void (*GstLiveAdderFunction) (gpointer out, gpointer in, guint size);
/**
@@ -73,18 +67,7 @@ struct _GstLiveAdder
GstClockTime next_timestamp;
/* the next are valid for both int and float */
- GstLiveAdderFormat format;
- gint rate;
- gint channels;
- gint width;
- gint endianness;
-
- /* the next are valid only for format == GST_LIVE_ADDER_FORMAT_INT */
- gint depth;
- gboolean is_signed;
-
- /* number of bytes per sample, actually width/8 * channels */
- gint bps;
+ GstAudioInfo info;
/* function to add samples */
GstLiveAdderFunction func;
diff --git a/gst/mpegdemux/Makefile.in b/gst/mpegdemux/Makefile.in
index c6e9a6fa..37bec60d 100644
--- a/gst/mpegdemux/Makefile.in
+++ b/gst/mpegdemux/Makefile.in
@@ -343,6 +343,8 @@ 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@
@@ -350,6 +352,8 @@ 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@
@@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -392,6 +395,10 @@ 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@
@@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/mpegdemux/gstmpegdemux.c b/gst/mpegdemux/gstmpegdemux.c
index ee78c00a..66d05eec 100644
--- a/gst/mpegdemux/gstmpegdemux.c
+++ b/gst/mpegdemux/gstmpegdemux.c
@@ -128,7 +128,7 @@ static GstStaticPadTemplate subpicture_template =
GST_STATIC_PAD_TEMPLATE ("subpicture_%02x",
GST_PAD_SRC,
GST_PAD_SOMETIMES,
- GST_STATIC_CAPS ("video/x-dvd-subpicture")
+ GST_STATIC_CAPS ("subpicture/x-dvd")
);
static GstStaticPadTemplate private_template =
@@ -400,7 +400,7 @@ gst_flups_demux_create_stream (GstFluPSDemux * demux, gint id, gint stream_type)
case ST_PS_DVD_SUBPICTURE:
template = klass->subpicture_template;
name = g_strdup_printf ("subpicture_%02x", id);
- caps = gst_caps_new_empty_simple ("video/x-dvd-subpicture");
+ caps = gst_caps_new_empty_simple ("subpicture/x-dvd");
break;
case ST_GST_AUDIO_RAWA52:
template = klass->audio_template;
@@ -412,8 +412,7 @@ gst_flups_demux_create_stream (GstFluPSDemux * demux, gint id, gint stream_type)
}
if (name == NULL || template == NULL || caps == NULL) {
- if (name)
- g_free (name);
+ g_free (name);
if (caps)
gst_caps_unref (caps);
return FALSE;
@@ -476,7 +475,7 @@ gst_flups_demux_send_data (GstFluPSDemux * demux, GstFluPSStream * stream,
GstBuffer * buf)
{
GstFlowReturn result;
- guint64 timestamp;
+ GstClockTime pts = GST_CLOCK_TIME_NONE, dts = GST_CLOCK_TIME_NONE;
guint size;
if (stream == NULL)
@@ -484,9 +483,9 @@ gst_flups_demux_send_data (GstFluPSDemux * demux, GstFluPSStream * stream,
/* timestamps */
if (G_UNLIKELY (demux->next_pts != G_MAXUINT64))
- timestamp = MPEGTIME_TO_GSTTIME (demux->next_pts);
- else
- timestamp = GST_CLOCK_TIME_NONE;
+ 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)) {
@@ -494,9 +493,9 @@ gst_flups_demux_send_data (GstFluPSDemux * demux, GstFluPSStream * stream,
GstSegment segment;
GstEvent *newsegment;
- GST_DEBUG ("timestamp:%" GST_TIME_FORMAT " base_time %" GST_TIME_FORMAT
+ GST_DEBUG ("PTS timestamp:%" GST_TIME_FORMAT " base_time %" GST_TIME_FORMAT
" src_segment.start:%" GST_TIME_FORMAT " .stop:%" GST_TIME_FORMAT,
- GST_TIME_ARGS (timestamp), GST_TIME_ARGS (demux->base_time),
+ GST_TIME_ARGS (pts), GST_TIME_ARGS (demux->base_time),
GST_TIME_ARGS (demux->src_segment.start),
GST_TIME_ARGS (demux->src_segment.stop));
@@ -512,13 +511,13 @@ gst_flups_demux_send_data (GstFluPSDemux * demux, GstFluPSStream * stream,
else
stop = -1;
- if (timestamp != GST_CLOCK_TIME_NONE) {
+ if (pts != GST_CLOCK_TIME_NONE) {
if (demux->src_segment.rate > 0) {
- if (GST_CLOCK_DIFF (start, timestamp) > GST_SECOND)
- start = timestamp;
+ if (GST_CLOCK_DIFF (start, pts) > GST_SECOND)
+ start = pts;
} else {
- if (GST_CLOCK_DIFF (stop, timestamp) > GST_SECOND)
- stop = timestamp;
+ if (GST_CLOCK_DIFF (stop, pts) > GST_SECOND)
+ stop = pts;
}
}
if (GST_CLOCK_TIME_IS_VALID (demux->base_time) && start > demux->base_time)
@@ -547,7 +546,8 @@ gst_flups_demux_send_data (GstFluPSDemux * demux, GstFluPSStream * stream,
}
/* OK, sent new segment now prepare the buffer for sending */
- GST_BUFFER_TIMESTAMP (buf) = timestamp;
+ GST_BUFFER_PTS (buf) = pts;
+ GST_BUFFER_DTS (buf) = dts;
/* update position in the segment */
gst_segment_set_position (&demux->src_segment, GST_FORMAT_TIME,
@@ -574,7 +574,8 @@ gst_flups_demux_send_data (GstFluPSDemux * demux, GstFluPSStream * stream,
/* Set the buffer discont flag, and clear discont state on the stream */
if (stream->discont) {
- GST_DEBUG_OBJECT (demux, "marking discont buffer");
+ GST_DEBUG_OBJECT (demux, "discont buffer to pad %" GST_PTR_FORMAT
+ " with TS %" GST_TIME_FORMAT, stream->pad, GST_TIME_ARGS (dts));
GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT);
stream->discont = FALSE;
@@ -585,9 +586,9 @@ gst_flups_demux_send_data (GstFluPSDemux * demux, GstFluPSStream * stream,
demux->next_dts = G_MAXUINT64;
result = gst_pad_push (stream->pad, buf);
- GST_DEBUG_OBJECT (demux, "pushed stream id 0x%02x type 0x%02x, time: %"
+ 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 (timestamp),
+ stream->id, stream->type, GST_TIME_ARGS (pts),
size, gst_flow_get_name (result));
return result;
@@ -678,7 +679,7 @@ gst_flups_demux_handle_dvd_event (GstFluPSDemux * demux, GstEvent * event)
g_snprintf (cur_stream_name, 32, "audio-%d-format", i);
if (!gst_structure_get_int (structure, cur_stream_name, &stream_format))
- break;
+ continue;
switch (stream_format) {
case 0x0:
@@ -899,9 +900,7 @@ static gboolean
gst_flups_demux_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
gboolean res = TRUE;
- GstFluPSDemux *demux;
-
- demux = GST_FLUPS_DEMUX (gst_pad_get_parent (pad));
+ GstFluPSDemux *demux = GST_FLUPS_DEMUX (parent);
switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_FLUSH_START:
@@ -967,13 +966,14 @@ gst_flups_demux_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
}
break;
}
+ case GST_EVENT_CAPS:
+ gst_event_unref (event);
+ break;
default:
gst_flups_demux_send_event (demux, event);
break;
}
- gst_object_unref (demux);
-
return res;
}
@@ -1276,9 +1276,7 @@ static gboolean
gst_flups_demux_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
gboolean res = FALSE;
- GstFluPSDemux *demux;
-
- demux = GST_FLUPS_DEMUX (gst_pad_get_parent (pad));
+ GstFluPSDemux *demux = GST_FLUPS_DEMUX (parent);
switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_SEEK:
@@ -1293,8 +1291,6 @@ gst_flups_demux_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
break;
}
- gst_object_unref (demux);
-
return res;
}
@@ -1302,9 +1298,7 @@ static gboolean
gst_flups_demux_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
{
gboolean res = FALSE;
- GstFluPSDemux *demux;
-
- demux = GST_FLUPS_DEMUX (gst_pad_get_parent (pad));
+ GstFluPSDemux *demux = GST_FLUPS_DEMUX (parent);
GST_LOG_OBJECT (demux, "Have query of type %d on pad %" GST_PTR_FORMAT,
GST_QUERY_TYPE (query), pad);
@@ -1315,6 +1309,11 @@ gst_flups_demux_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
GstClockTime pos;
GstFormat format;
+ /* See if upstream can immediately answer */
+ res = gst_pad_peer_query (demux->sinkpad, query);
+ if (res)
+ break;
+
gst_query_parse_position (query, &format, NULL);
if (format != GST_FORMAT_TIME) {
@@ -1325,6 +1324,7 @@ gst_flups_demux_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
pos = demux->src_segment.position - demux->src_segment.start;
GST_LOG_OBJECT (demux, "Position %" GST_TIME_FORMAT, GST_TIME_ARGS (pos));
+
gst_query_set_position (query, format, pos);
res = TRUE;
break;
@@ -1333,7 +1333,6 @@ gst_flups_demux_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
{
GstFormat format;
gint64 duration;
- GstPad *peer;
GstQuery *byte_query;
gst_query_parse_duration (query, &format, NULL);
@@ -1346,21 +1345,14 @@ gst_flups_demux_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
break;
}
- if ((peer = gst_pad_get_peer (demux->sinkpad)) == NULL) {
- GST_DEBUG_OBJECT (demux, "duration not possible, no peer");
- goto not_supported;
- }
-
/* For any format other than bytes, see if upstream knows first */
if (format == GST_FORMAT_BYTES) {
GST_DEBUG_OBJECT (demux, "duration not supported for format %d",
format);
- gst_object_unref (peer);
goto not_supported;
}
- if (gst_pad_query (peer, query)) {
- gst_object_unref (peer);
+ if (gst_pad_peer_query (demux->sinkpad, query)) {
res = TRUE;
break;
}
@@ -1370,25 +1362,21 @@ gst_flups_demux_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
if (format != GST_FORMAT_TIME) {
GST_DEBUG_OBJECT (demux, "duration not supported for format %d",
format);
- gst_object_unref (peer);
goto not_supported;
}
if (demux->mux_rate == -1) {
GST_DEBUG_OBJECT (demux, "duration not possible, no mux_rate");
- gst_object_unref (peer);
goto not_supported;
}
byte_query = gst_query_new_duration (GST_FORMAT_BYTES);
- if (!gst_pad_query (peer, byte_query)) {
+ if (!gst_pad_peer_query (demux->sinkpad, byte_query)) {
GST_LOG_OBJECT (demux, "query on peer pad failed");
gst_query_unref (byte_query);
- gst_object_unref (peer);
goto not_supported;
}
- gst_object_unref (peer);
gst_query_parse_duration (byte_query, &format, &duration);
gst_query_unref (byte_query);
@@ -1465,16 +1453,9 @@ gst_flups_demux_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
}
beach:
- gst_object_unref (demux);
-
return res;
-
not_supported:
- {
- gst_object_unref (demux);
-
- return FALSE;
- }
+ return FALSE;
}
static void
@@ -2881,7 +2862,8 @@ gst_flups_demux_sink_activate (GstPad * sinkpad, GstObject * parent)
GstQuery *query = gst_query_new_scheduling ();
if (gst_pad_peer_query (sinkpad, query)) {
- if (gst_query_has_scheduling_mode (query, GST_PAD_MODE_PULL)) {
+ if (gst_query_has_scheduling_mode_with_flags (query,
+ GST_PAD_MODE_PULL, GST_SCHEDULING_FLAG_SEEKABLE)) {
res = gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PULL, TRUE);
} else {
res = gst_pad_activate_mode (sinkpad, GST_PAD_MODE_PUSH, TRUE);
@@ -2900,9 +2882,7 @@ static gboolean
gst_flups_demux_sink_activate_push (GstPad * sinkpad, GstObject * parent,
gboolean active)
{
- GstFluPSDemux *demux;
-
- demux = GST_FLUPS_DEMUX (parent);
+ GstFluPSDemux *demux = GST_FLUPS_DEMUX (parent);
demux->random_access = FALSE;
@@ -2916,19 +2896,15 @@ static gboolean
gst_flups_demux_sink_activate_pull (GstPad * sinkpad, GstObject * parent,
gboolean active)
{
- GstFluPSDemux *demux;
-
- demux = GST_FLUPS_DEMUX (gst_pad_get_parent (sinkpad));
+ GstFluPSDemux *demux = GST_FLUPS_DEMUX (parent);
if (active) {
GST_DEBUG ("pull mode activated");
demux->random_access = TRUE;
- gst_object_unref (demux);
return gst_pad_start_task (sinkpad, (GstTaskFunction) gst_flups_demux_loop,
sinkpad, NULL);
} else {
demux->random_access = FALSE;
- gst_object_unref (demux);
return gst_pad_stop_task (sinkpad);
}
}
@@ -2941,15 +2917,14 @@ gst_flups_demux_sink_activate_mode (GstPad * pad, GstObject * parent,
return gst_flups_demux_sink_activate_push (pad, parent, active);
} else if (mode == GST_PAD_MODE_PULL) {
return gst_flups_demux_sink_activate_pull (pad, parent, active);
- } else {
- return FALSE;
}
+ return FALSE;
}
static GstFlowReturn
gst_flups_demux_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
{
- GstFluPSDemux *demux = GST_FLUPS_DEMUX (gst_pad_get_parent (pad));
+ GstFluPSDemux *demux = GST_FLUPS_DEMUX (parent);
GstFlowReturn ret = GST_FLOW_OK;
guint32 avail;
gboolean save, discont;
@@ -3081,8 +3056,6 @@ gst_flups_demux_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
}
}
done:
- gst_object_unref (demux);
-
return ret;
}
diff --git a/gst/mpegdemux/gstmpegdemux.h b/gst/mpegdemux/gstmpegdemux.h
index bea4dc44..10f11800 100644
--- a/gst/mpegdemux/gstmpegdemux.h
+++ b/gst/mpegdemux/gstmpegdemux.h
@@ -39,6 +39,7 @@
* Fluendo, S.L. All Rights Reserved.
*
* Contributor(s): Wim Taymans <wim@fluendo.com>
+ * Jan Schmidt <thaytan@noraisin.net>
*/
#ifndef __GST_FLUPS_DEMUX_H__
@@ -50,12 +51,14 @@
#include "gstpesfilter.h"
G_BEGIN_DECLS
+
#define GST_TYPE_FLUPS_DEMUX (gst_flups_demux_get_type())
#define GST_FLUPS_DEMUX(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_FLUPS_DEMUX,GstFluPSDemux))
#define GST_FLUPS_DEMUX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_FLUPS_DEMUX,GstFluPSDemuxClass))
#define GST_FLUPS_DEMUX_GET_CLASS(klass) (G_TYPE_INSTANCE_GET_CLASS((klass),GST_TYPE_FLUPS_DEMUX,GstFluPSDemuxClass))
#define GST_IS_FLUPS_DEMUX(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_FLUPS_DEMUX))
#define GST_IS_FLUPS_DEMUX_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_FLUPS_DEMUX))
+
typedef struct _GstFluPSStream GstFluPSStream;
typedef struct _GstFluPSDemux GstFluPSDemux;
typedef struct _GstFluPSDemuxClass GstFluPSDemuxClass;
diff --git a/gst/mpegpsmux/Makefile.in b/gst/mpegpsmux/Makefile.in
index 4bcbb215..c6a029bd 100644
--- a/gst/mpegpsmux/Makefile.in
+++ b/gst/mpegpsmux/Makefile.in
@@ -344,6 +344,8 @@ 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@
@@ -351,6 +353,8 @@ 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@
@@ -365,7 +369,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -393,6 +396,10 @@ 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@
@@ -519,6 +526,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/mpegpsmux/mpegpsmux.c b/gst/mpegpsmux/mpegpsmux.c
index da31df28..92f0eebf 100644
--- a/gst/mpegpsmux/mpegpsmux.c
+++ b/gst/mpegpsmux/mpegpsmux.c
@@ -598,7 +598,7 @@ mpegpsmux_request_new_pad (GstElement * element,
pad = gst_pad_new_from_template (templ, name);
pad_data = (MpegPsPadData *) gst_collect_pads_add_pad (mux->collect, pad,
- sizeof (MpegPsPadData));
+ sizeof (MpegPsPadData), NULL, TRUE);
if (pad_data == NULL)
goto pad_failure;
diff --git a/gst/mpegtsdemux/Makefile.in b/gst/mpegtsdemux/Makefile.in
index 5205b2af..0abc584b 100644
--- a/gst/mpegtsdemux/Makefile.in
+++ b/gst/mpegtsdemux/Makefile.in
@@ -347,6 +347,8 @@ 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@
@@ -354,6 +356,8 @@ 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@
@@ -368,7 +372,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -396,6 +399,10 @@ 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@
@@ -522,6 +529,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/mpegtsdemux/gstmpegdesc.h b/gst/mpegtsdemux/gstmpegdesc.h
index 2e98a877..ef4412ab 100644
--- a/gst/mpegtsdemux/gstmpegdesc.h
+++ b/gst/mpegtsdemux/gstmpegdesc.h
@@ -348,13 +348,13 @@ typedef struct
guint8 *data;
} GstMPEGDescriptor;
-void gst_mpegtsdesc_init_debug (void);
-gboolean gst_mpeg_descriptor_parse (GstMPEGDescriptor *result, guint8 * data, guint size);
+G_GNUC_INTERNAL void gst_mpegtsdesc_init_debug (void);
+G_GNUC_INTERNAL gboolean gst_mpeg_descriptor_parse (GstMPEGDescriptor *result, guint8 * data, guint size);
-guint gst_mpeg_descriptor_n_desc (GstMPEGDescriptor * desc);
-guint8 *gst_mpeg_descriptor_find (GstMPEGDescriptor * desc, gint tag);
-GArray *gst_mpeg_descriptor_find_all (GstMPEGDescriptor * desc, gint tag);
+G_GNUC_INTERNAL guint gst_mpeg_descriptor_n_desc (GstMPEGDescriptor * desc);
+G_GNUC_INTERNAL guint8 *gst_mpeg_descriptor_find (GstMPEGDescriptor * desc, gint tag);
+G_GNUC_INTERNAL GArray *gst_mpeg_descriptor_find_all (GstMPEGDescriptor * desc, gint tag);
-guint8 *gst_mpeg_descriptor_nth (GstMPEGDescriptor * desc, guint i);
+G_GNUC_INTERNAL guint8 *gst_mpeg_descriptor_nth (GstMPEGDescriptor * desc, guint i);
#endif /* __GST_MPEG_DESC_H__ */
diff --git a/gst/mpegtsdemux/mpegtsbase.c b/gst/mpegtsdemux/mpegtsbase.c
index ad2bccef..07db3989 100644
--- a/gst/mpegtsdemux/mpegtsbase.c
+++ b/gst/mpegtsdemux/mpegtsbase.c
@@ -1409,14 +1409,20 @@ mpegts_base_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
MpegTSPacketizerPacketReturn pret;
MpegTSPacketizer2 *packetizer;
MpegTSPacketizerPacket packet;
+ MpegTSBaseClass *klass;
base = GST_MPEGTS_BASE (parent);
+ klass = GST_MPEGTS_BASE_GET_CLASS (base);
+
packetizer = base->packetizer;
if (G_UNLIKELY (base->queried_latency == FALSE)) {
query_upstream_latency (base);
}
+ if (klass->input_done)
+ gst_buffer_ref (buf);
+
mpegts_packetizer_push (base->packetizer, buf);
while (res == GST_FLOW_OK) {
@@ -1465,6 +1471,13 @@ mpegts_base_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
mpegts_packetizer_clear_packet (base->packetizer, &packet);
}
+ if (klass->input_done) {
+ if (res == GST_FLOW_OK)
+ res = klass->input_done (base, buf);
+ else
+ gst_buffer_unref (buf);
+ }
+
return res;
}
@@ -1739,7 +1752,8 @@ mpegts_base_sink_activate (GstPad * sinkpad, GstObject * parent)
goto activate_push;
}
- pull_mode = gst_query_has_scheduling_mode (query, GST_PAD_MODE_PULL);
+ pull_mode = gst_query_has_scheduling_mode_with_flags (query,
+ GST_PAD_MODE_PULL, GST_SCHEDULING_FLAG_SEEKABLE);
gst_query_unref (query);
if (!pull_mode)
@@ -1792,6 +1806,15 @@ mpegts_base_change_state (GstElement * element, GstStateChange transition)
GstStateChangeReturn ret;
base = GST_MPEGTS_BASE (element);
+
+ switch (transition) {
+ case GST_STATE_CHANGE_READY_TO_PAUSED:
+ mpegts_base_reset (base);
+ break;
+ default:
+ break;
+ }
+
ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
switch (transition) {
diff --git a/gst/mpegtsdemux/mpegtsbase.h b/gst/mpegtsdemux/mpegtsbase.h
index 98de1d95..7cc853d8 100644
--- a/gst/mpegtsdemux/mpegtsbase.h
+++ b/gst/mpegtsdemux/mpegtsbase.h
@@ -168,6 +168,9 @@ struct _MpegTSBaseClass {
/* flush all streams */
void (*flush) (MpegTSBase * base);
+ /* Notifies subclasses input buffer has been handled */
+ GstFlowReturn (*input_done) (MpegTSBase *base, GstBuffer *buffer);
+
/* signals */
void (*pat_info) (GstStructure *pat);
void (*pmt_info) (GstStructure *pmt);
@@ -180,24 +183,24 @@ struct _MpegTSBaseClass {
#define MPEGTS_BIT_UNSET(field, offs) ((field)[(offs) >> 3] &= ~(1 << ((offs) & 0x7)))
#define MPEGTS_BIT_IS_SET(field, offs) ((field)[(offs) >> 3] & (1 << ((offs) & 0x7)))
-GType mpegts_base_get_type(void);
+G_GNUC_INTERNAL GType mpegts_base_get_type(void);
-MpegTSBaseProgram *mpegts_base_get_program (MpegTSBase * base, gint program_number);
-MpegTSBaseProgram *mpegts_base_add_program (MpegTSBase * base, gint program_number, guint16 pmt_pid);
+G_GNUC_INTERNAL MpegTSBaseProgram *mpegts_base_get_program (MpegTSBase * base, gint program_number);
+G_GNUC_INTERNAL MpegTSBaseProgram *mpegts_base_add_program (MpegTSBase * base, gint program_number, guint16 pmt_pid);
-guint8 *mpegts_get_descriptor_from_stream (MpegTSBaseStream * stream, guint8 tag);
-guint8 *mpegts_get_descriptor_from_program (MpegTSBaseProgram * program, guint8 tag);
+G_GNUC_INTERNAL guint8 *mpegts_get_descriptor_from_stream (MpegTSBaseStream * stream, guint8 tag);
+G_GNUC_INTERNAL guint8 *mpegts_get_descriptor_from_program (MpegTSBaseProgram * program, guint8 tag);
-gboolean
+G_GNUC_INTERNAL gboolean
mpegts_base_handle_seek_event(MpegTSBase * base, GstPad * pad, GstEvent * event);
-gboolean gst_mpegtsbase_plugin_init (GstPlugin * plugin);
+G_GNUC_INTERNAL gboolean gst_mpegtsbase_plugin_init (GstPlugin * plugin);
-gboolean mpegts_base_handle_psi (MpegTSBase * base, MpegTSPacketizerSection * section);
+G_GNUC_INTERNAL gboolean mpegts_base_handle_psi (MpegTSBase * base, MpegTSPacketizerSection * section);
-void mpegts_base_program_remove_stream (MpegTSBase * base, MpegTSBaseProgram * program, guint16 pid);
+G_GNUC_INTERNAL void mpegts_base_program_remove_stream (MpegTSBase * base, MpegTSBaseProgram * program, guint16 pid);
-void mpegts_base_remove_program(MpegTSBase *base, gint program_number);
+G_GNUC_INTERNAL void mpegts_base_remove_program(MpegTSBase *base, gint program_number);
G_END_DECLS
#endif /* GST_MPEG_TS_BASE_H */
diff --git a/gst/mpegtsdemux/mpegtspacketizer.c b/gst/mpegtsdemux/mpegtspacketizer.c
index 45c9fcfa..a5716c58 100644
--- a/gst/mpegtsdemux/mpegtspacketizer.c
+++ b/gst/mpegtsdemux/mpegtspacketizer.c
@@ -64,6 +64,23 @@ static GQuark QUARK_ACTUAL_NETWORK;
static GQuark QUARK_NETWORK_NAME;
static GQuark QUARK_ORIGINAL_NETWORK_ID;
static GQuark QUARK_TRANSPORTS;
+static GQuark QUARK_TERRESTRIAL;
+static GQuark QUARK_CABLE;
+static GQuark QUARK_FREQUENCY;
+static GQuark QUARK_MODULATION;
+static GQuark QUARK_BANDWIDTH;
+static GQuark QUARK_CONSTELLATION;
+static GQuark QUARK_HIERARCHY;
+static GQuark QUARK_CODE_RATE_HP;
+static GQuark QUARK_CODE_RATE_LP;
+static GQuark QUARK_GUARD_INTERVAL;
+static GQuark QUARK_TRANSMISSION_MODE;
+static GQuark QUARK_OTHER_FREQUENCY;
+static GQuark QUARK_SYMBOL_RATE;
+static GQuark QUARK_INNER_FEC;
+static GQuark QUARK_DELIVERY;
+static GQuark QUARK_CHANNELS;
+static GQuark QUARK_LOGICAL_CHANNEL_NUMBER;
static GQuark QUARK_SDT;
static GQuark QUARK_ACTUAL_TRANSPORT_STREAM;
@@ -75,7 +92,77 @@ static GQuark QUARK_PRESENT_FOLLOWING;
static GQuark QUARK_SEGMENT_LAST_SECTION_NUMBER;
static GQuark QUARK_LAST_TABLE_ID;
static GQuark QUARK_EVENTS;
-
+static GQuark QUARK_NAME;
+static GQuark QUARK_DESCRIPTION;
+static GQuark QUARK_EXTENDED_ITEM;
+static GQuark QUARK_EXTENDED_ITEMS;
+static GQuark QUARK_TEXT;
+static GQuark QUARK_EXTENDED_TEXT;
+static GQuark QUARK_EVENT_ID;
+static GQuark QUARK_YEAR;
+static GQuark QUARK_MONTH;
+static GQuark QUARK_DAY;
+static GQuark QUARK_HOUR;
+static GQuark QUARK_MINUTE;
+static GQuark QUARK_SECOND;
+static GQuark QUARK_DURATION;
+static GQuark QUARK_RUNNING_STATUS;
+static GQuark QUARK_FREE_CA_MODE;
+
+#define MAX_KNOWN_ICONV 25
+/* All these conversions will be to UTF8 */
+typedef enum
+{
+ _ICONV_UNKNOWN = -1,
+ _ICONV_ISO8859_1,
+ _ICONV_ISO8859_2,
+ _ICONV_ISO8859_3,
+ _ICONV_ISO8859_4,
+ _ICONV_ISO8859_5,
+ _ICONV_ISO8859_6,
+ _ICONV_ISO8859_7,
+ _ICONV_ISO8859_8,
+ _ICONV_ISO8859_9,
+ _ICONV_ISO8859_10,
+ _ICONV_ISO8859_11,
+ _ICONV_ISO8859_12,
+ _ICONV_ISO8859_13,
+ _ICONV_ISO8859_14,
+ _ICONV_ISO8859_15,
+ _ICONV_ISO10646_UC2,
+ _ICONV_EUC_KR,
+ _ICONV_GB2312,
+ _ICONV_UTF_16BE,
+ _ICONV_ISO10646_UTF8,
+ _ICONV_ISO6937,
+ /* Insert more here if needed */
+ _ICONV_MAX
+} LocalIconvCode;
+
+static const gchar *iconvtablename[] = {
+ "iso-8859-1",
+ "iso-8859-2",
+ "iso-8859-3",
+ "iso-8859-4",
+ "iso-8859-5",
+ "iso-8859-6",
+ "iso-8859-7",
+ "iso-8859-8",
+ "iso-8859-9",
+ "iso-8859-10",
+ "iso-8859-11",
+ "iso-8859-12",
+ "iso-8859-13",
+ "iso-8859-14",
+ "iso-8859-15",
+ "ISO-10646/UCS2",
+ "EUC-KR",
+ "GB2312",
+ "UTF-16BE",
+ "ISO-10646/UTF8",
+ "iso6937"
+ /* Insert more here if needed */
+};
#define MPEGTS_PACKETIZER_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), GST_TYPE_MPEGTS_PACKETIZER, MpegTSPacketizerPrivate))
@@ -84,19 +171,31 @@ static void _init_local (void);
G_DEFINE_TYPE_EXTENDED (MpegTSPacketizer2, mpegts_packetizer, G_TYPE_OBJECT, 0,
_init_local ());
-typedef struct
-{
- guint64 offset; /* offset in upstream */
- guint64 pcr; /* pcr (wraparound not fixed) */
-} MpegTSPacketizerOffset;
+/* Maximum number of MpegTSPcr
+ * 256 should be sufficient for most multiplexes */
+#define MAX_PCR_OBS_CHANNELS 256
-struct _MpegTSPacketizerPrivate
+typedef struct _MpegTSPCR
{
- /* Shortcuts for adapter usage */
- guint available;
- guint8 *mapped;
- guint offset;
- guint mapped_size;
+ guint16 pid;
+
+ /* Following variables are only active/used when
+ * calculate_skew is TRUE */
+ GstClockTime base_time;
+ GstClockTime base_pcrtime;
+ GstClockTime prev_out_time;
+ GstClockTime prev_in_time;
+ GstClockTime last_pcrtime;
+ gint64 window[MAX_WINDOW];
+ guint window_pos;
+ guint window_size;
+ gboolean window_filling;
+ gint64 window_min;
+ gint64 skew;
+ gint64 prev_send_diff;
+
+ /* Offset to apply to PCR to handle wraparounds */
+ guint64 pcroffset;
/* Used for bitrate calculation */
/* FIXME : Replace this later on with a balanced tree or sequence */
@@ -107,6 +206,16 @@ struct _MpegTSPacketizerPrivate
guint64 last_pcr;
GstClockTime last_pcr_ts;
+} MpegTSPCR;
+
+struct _MpegTSPacketizerPrivate
+{
+ /* Shortcuts for adapter usage */
+ guint available;
+ guint8 *mapped;
+ guint offset;
+ guint mapped_size;
+
/* Reference offset */
guint64 refoffset;
@@ -114,20 +223,24 @@ struct _MpegTSPacketizerPrivate
/* Last inputted timestamp */
GstClockTime last_in_time;
+
+ /* offset to observations table */
+ guint8 pcrtablelut[0x2000];
+ MpegTSPCR *observations[MAX_PCR_OBS_CHANNELS];
+ guint8 lastobsid;
+
+ /* Conversion tables */
+ GIConv iconvs[_ICONV_MAX];
};
static void mpegts_packetizer_dispose (GObject * object);
static void mpegts_packetizer_finalize (GObject * object);
-static gchar *convert_to_utf8 (const gchar * text, gint length, guint start,
- const gchar * encoding, gboolean is_multibyte, GError ** error);
-static gchar *get_encoding (const gchar * text, guint * start_text,
- gboolean * is_multibyte);
-static gchar *get_encoding_and_convert (const gchar * text, guint length);
-static GstClockTime calculate_skew (MpegTSPacketizer2 * packetizer,
- guint64 pcrtime, GstClockTime time);
-static void record_pcr (MpegTSPacketizer2 * packetizer, guint64 pcr,
- guint64 offset);
-static void mpegts_packetizer_reset_skew (MpegTSPacketizer2 * packetizer);
+static gchar *get_encoding_and_convert (MpegTSPacketizer2 * packetizer,
+ const gchar * text, guint length);
+static GstClockTime calculate_skew (MpegTSPCR * pcr, guint64 pcrtime,
+ GstClockTime time);
+static void record_pcr (MpegTSPacketizer2 * packetizer, MpegTSPCR * pcrtable,
+ guint64 pcr, guint64 offset);
#define CONTINUITY_UNSET 255
#define MAX_CONTINUITY 15
@@ -135,6 +248,47 @@ static void mpegts_packetizer_reset_skew (MpegTSPacketizer2 * packetizer);
#define TABLE_ID_UNSET 0xFF
#define PACKET_SYNC_BYTE 0x47
+static MpegTSPCR *
+get_pcr_table (MpegTSPacketizer2 * packetizer, guint16 pid)
+{
+ MpegTSPacketizerPrivate *priv = packetizer->priv;
+ MpegTSPCR *res;
+
+ res = priv->observations[priv->pcrtablelut[pid]];
+
+ if (G_UNLIKELY (res == NULL)) {
+ /* If we don't have a PCR table for the requested PID, create one .. */
+ res = g_new0 (MpegTSPCR, 1);
+ /* Add it to the last table position */
+ priv->observations[priv->lastobsid] = res;
+ /* Update the pcrtablelut */
+ priv->pcrtablelut[pid] = priv->lastobsid;
+ /* And increment the last know slot */
+ priv->lastobsid++;
+
+ /* Finally set the default values */
+ res->pid = pid;
+ res->first_offset = -1;
+ res->first_pcr = -1;
+ res->first_pcr_ts = GST_CLOCK_TIME_NONE;
+ res->last_offset = -1;
+ res->last_pcr = -1;
+ res->last_pcr_ts = GST_CLOCK_TIME_NONE;
+ res->base_time = GST_CLOCK_TIME_NONE;
+ res->base_pcrtime = GST_CLOCK_TIME_NONE;
+ res->last_pcrtime = GST_CLOCK_TIME_NONE;
+ res->window_pos = 0;
+ res->window_filling = TRUE;
+ res->window_min = 0;
+ res->skew = 0;
+ res->prev_send_diff = GST_CLOCK_TIME_NONE;
+ res->prev_out_time = GST_CLOCK_TIME_NONE;
+ res->pcroffset = 0;
+ }
+
+ return res;
+}
+
static gint
mpegts_packetizer_stream_subtable_compare (gconstpointer a, gconstpointer b)
{
@@ -211,7 +365,10 @@ mpegts_packetizer_class_init (MpegTSPacketizer2Class * klass)
static void
mpegts_packetizer_init (MpegTSPacketizer2 * packetizer)
{
- packetizer->priv = MPEGTS_PACKETIZER_GET_PRIVATE (packetizer);
+ MpegTSPacketizerPrivate *priv;
+ guint i;
+
+ priv = packetizer->priv = MPEGTS_PACKETIZER_GET_PRIVATE (packetizer);
packetizer->adapter = gst_adapter_new ();
packetizer->offset = 0;
packetizer->empty = TRUE;
@@ -219,28 +376,29 @@ mpegts_packetizer_init (MpegTSPacketizer2 * packetizer)
packetizer->know_packet_size = FALSE;
packetizer->calculate_skew = FALSE;
packetizer->calculate_offset = FALSE;
- mpegts_packetizer_reset_skew (packetizer);
- packetizer->priv->available = 0;
- packetizer->priv->mapped = NULL;
- packetizer->priv->mapped_size = 0;
- packetizer->priv->offset = 0;
+ priv->available = 0;
+ priv->mapped = NULL;
+ priv->mapped_size = 0;
+ priv->offset = 0;
- packetizer->priv->first_offset = -1;
- packetizer->priv->first_pcr = -1;
- packetizer->priv->first_pcr_ts = GST_CLOCK_TIME_NONE;
- packetizer->priv->last_offset = -1;
- packetizer->priv->last_pcr = -1;
- packetizer->priv->last_pcr_ts = GST_CLOCK_TIME_NONE;
- packetizer->priv->nb_seen_offsets = 0;
- packetizer->priv->refoffset = -1;
- packetizer->priv->last_in_time = GST_CLOCK_TIME_NONE;
+ memset (priv->pcrtablelut, 0xff, 0x200);
+ memset (priv->observations, 0x0, sizeof (priv->observations));
+ for (i = 0; i < _ICONV_MAX; i++)
+ priv->iconvs[i] = (GIConv) - 1;
+
+ priv->lastobsid = 0;
+
+ priv->nb_seen_offsets = 0;
+ priv->refoffset = -1;
+ priv->last_in_time = GST_CLOCK_TIME_NONE;
}
static void
mpegts_packetizer_dispose (GObject * object)
{
MpegTSPacketizer2 *packetizer = GST_MPEGTS_PACKETIZER (object);
+ guint i;
if (!packetizer->disposed) {
if (packetizer->know_packet_size && packetizer->caps != NULL) {
@@ -262,6 +420,11 @@ mpegts_packetizer_dispose (GObject * object)
packetizer->disposed = TRUE;
packetizer->offset = 0;
packetizer->empty = TRUE;
+
+ for (i = 0; i < _ICONV_MAX; i++)
+ if (packetizer->priv->iconvs[i] != (GIConv) - 1)
+ g_iconv_close (packetizer->priv->iconvs[i]);
+
}
if (G_OBJECT_CLASS (mpegts_packetizer_parent_class)->dispose)
@@ -331,15 +494,22 @@ mpegts_packetizer_parse_adaptation_field_control (MpegTSPacketizer2 *
/* PCR */
if (afcflags & MPEGTS_AFC_PCR_FLAG) {
+ MpegTSPCR *pcrtable = NULL;
packet->pcr = mpegts_packetizer_compute_pcr (data);
- *data += 6;
- GST_DEBUG ("pcr %" G_GUINT64_FORMAT " (%" GST_TIME_FORMAT ")",
- packet->pcr, GST_TIME_ARGS (PCRTIME_TO_GSTTIME (packet->pcr)));
-
- if (GST_CLOCK_TIME_IS_VALID (packet->origts) && packetizer->calculate_skew)
- packet->origts = calculate_skew (packetizer, packet->pcr, packet->origts);
- if (packetizer->calculate_offset)
- record_pcr (packetizer, packet->pcr, packet->offset);
+ data += 6;
+ GST_DEBUG ("pcr 0x%04x %" G_GUINT64_FORMAT " (%" GST_TIME_FORMAT
+ ") offset:%" G_GUINT64_FORMAT, packet->pid, packet->pcr,
+ GST_TIME_ARGS (PCRTIME_TO_GSTTIME (packet->pcr)), packet->offset);
+
+ if (GST_CLOCK_TIME_IS_VALID (packet->origts) && packetizer->calculate_skew) {
+ pcrtable = get_pcr_table (packetizer, packet->pid);
+ packet->origts = calculate_skew (pcrtable, packet->pcr, packet->origts);
+ }
+ if (packetizer->calculate_offset) {
+ if (!pcrtable)
+ pcrtable = get_pcr_table (packetizer, packet->pid);
+ record_pcr (packetizer, pcrtable, packet->pcr, packet->offset);
+ }
}
/* OPCR */
@@ -641,8 +811,7 @@ mpegts_packetizer_parse_pat (MpegTSPacketizer2 * packetizer,
g_value_unset (&value);
}
- gst_structure_id_set_value (pat_info, QUARK_PROGRAMS, &entries);
- g_value_unset (&entries);
+ gst_structure_id_take_value (pat_info, QUARK_PROGRAMS, &entries);
if (data != end - 4) {
/* FIXME: check the CRC before parsing the packet */
@@ -849,8 +1018,7 @@ mpegts_packetizer_parse_pmt (MpegTSPacketizer2 * packetizer,
g_value_unset (&stream_value);
}
- gst_structure_id_set_value (pmt, QUARK_STREAMS, &programs);
- g_value_unset (&programs);
+ gst_structure_id_take_value (pmt, QUARK_STREAMS, &programs);
g_assert (data == end - 4);
@@ -935,7 +1103,8 @@ mpegts_packetizer_parse_nit (MpegTSPacketizer2 * packetizer,
(gchar *) DESC_DVB_NETWORK_NAME_text (networkname_descriptor);
networkname_tmp =
- get_encoding_and_convert (networkname, networkname_length);
+ get_encoding_and_convert (packetizer, networkname,
+ networkname_length);
gst_structure_id_set (nit, QUARK_NETWORK_NAME, G_TYPE_STRING,
networkname_tmp, NULL);
g_free (networkname_tmp);
@@ -1109,7 +1278,7 @@ mpegts_packetizer_parse_nit (MpegTSPacketizer2 * packetizer,
"polarization", G_TYPE_STRING, polarization_str,
"symbol-rate", G_TYPE_UINT, symbol_rate,
"inner-fec", G_TYPE_STRING, fec_inner_str, NULL);
- gst_structure_set (transport, "delivery", GST_TYPE_STRUCTURE,
+ gst_structure_id_set (transport, QUARK_DELIVERY, GST_TYPE_STRUCTURE,
delivery_structure, NULL);
} else if ((delivery = gst_mpeg_descriptor_find (&mpegdescriptor,
DESC_DVB_TERRESTRIAL_DELIVERY_SYSTEM))) {
@@ -1227,17 +1396,17 @@ mpegts_packetizer_parse_nit (MpegTSPacketizer2 * packetizer,
default:
transmission_mode_str = "reserved";
}
- delivery_structure = gst_structure_new ("terrestrial",
- "frequency", G_TYPE_UINT, frequency,
- "bandwidth", G_TYPE_UINT, bandwidth,
- "constellation", G_TYPE_STRING, constellation_str,
- "hierarchy", G_TYPE_UINT, hierarchy,
- "code-rate-hp", G_TYPE_STRING, code_rate_hp_str,
- "code-rate-lp", G_TYPE_STRING, code_rate_lp_str,
- "guard-interval", G_TYPE_UINT, guard_interval,
- "transmission-mode", G_TYPE_STRING, transmission_mode_str,
- "other-frequency", G_TYPE_BOOLEAN, other_frequency, NULL);
- gst_structure_set (transport, "delivery", GST_TYPE_STRUCTURE,
+ delivery_structure = gst_structure_new_id (QUARK_TERRESTRIAL,
+ QUARK_FREQUENCY, G_TYPE_UINT, frequency,
+ QUARK_BANDWIDTH, G_TYPE_UINT, bandwidth,
+ QUARK_CONSTELLATION, G_TYPE_STRING, constellation_str,
+ QUARK_HIERARCHY, G_TYPE_UINT, hierarchy,
+ QUARK_CODE_RATE_HP, G_TYPE_STRING, code_rate_hp_str,
+ QUARK_CODE_RATE_LP, G_TYPE_STRING, code_rate_lp_str,
+ QUARK_GUARD_INTERVAL, G_TYPE_UINT, guard_interval,
+ QUARK_TRANSMISSION_MODE, G_TYPE_STRING, transmission_mode_str,
+ QUARK_OTHER_FREQUENCY, G_TYPE_BOOLEAN, other_frequency, NULL);
+ gst_structure_id_set (transport, QUARK_DELIVERY, GST_TYPE_STRUCTURE,
delivery_structure, NULL);
} else if ((delivery = gst_mpeg_descriptor_find (&mpegdescriptor,
DESC_DVB_CABLE_DELIVERY_SYSTEM))) {
@@ -1321,12 +1490,12 @@ mpegts_packetizer_parse_nit (MpegTSPacketizer2 * packetizer,
default:
modulation_str = "reserved";
}
- delivery_structure = gst_structure_new ("cable",
- "modulation", G_TYPE_STRING, modulation_str,
- "frequency", G_TYPE_UINT, frequency,
- "symbol-rate", G_TYPE_UINT, symbol_rate,
- "inner-fec", G_TYPE_STRING, fec_inner_str, NULL);
- gst_structure_set (transport, "delivery", GST_TYPE_STRUCTURE,
+ delivery_structure = gst_structure_new_id (QUARK_CABLE,
+ QUARK_MODULATION, G_TYPE_STRING, modulation_str,
+ QUARK_FREQUENCY, G_TYPE_UINT, frequency,
+ QUARK_SYMBOL_RATE, G_TYPE_UINT, symbol_rate,
+ QUARK_INNER_FEC, G_TYPE_STRING, fec_inner_str, NULL);
+ gst_structure_id_set (transport, QUARK_DELIVERY, GST_TYPE_STRUCTURE,
delivery_structure, NULL);
}
/* free the temporary delivery structure */
@@ -1348,9 +1517,9 @@ mpegts_packetizer_parse_nit (MpegTSPacketizer2 * packetizer,
current_pos += 2;
logical_channel_number = GST_READ_UINT16_BE (current_pos) & 0x03ff;
- channel =
- gst_structure_new ("channels", "service-id", G_TYPE_UINT,
- service_id, "logical-channel-number", G_TYPE_UINT,
+ channel = gst_structure_new_id (QUARK_CHANNELS,
+ QUARK_SERVICE_ID, G_TYPE_UINT,
+ service_id, QUARK_LOGICAL_CHANNEL_NUMBER, G_TYPE_UINT,
logical_channel_number, NULL);
g_value_init (&channel_value, GST_TYPE_STRUCTURE);
g_value_take_boxed (&channel_value, channel);
@@ -1358,8 +1527,8 @@ mpegts_packetizer_parse_nit (MpegTSPacketizer2 * packetizer,
g_value_unset (&channel_value);
current_pos += 2;
}
- gst_structure_set_value (transport, "channels", &channel_numbers);
- g_value_unset (&channel_numbers);
+ gst_structure_id_take_value (transport, QUARK_CHANNELS,
+ &channel_numbers);
}
if ((delivery = gst_mpeg_descriptor_find (&mpegdescriptor,
DESC_DVB_FREQUENCY_LIST))) {
@@ -1428,8 +1597,7 @@ mpegts_packetizer_parse_nit (MpegTSPacketizer2 * packetizer,
break;
}
- gst_structure_set_value (transport, fieldname, &frequencies);
- g_value_unset (&frequencies);
+ gst_structure_take_value (transport, fieldname, &frequencies);
}
}
@@ -1460,8 +1628,7 @@ mpegts_packetizer_parse_nit (MpegTSPacketizer2 * packetizer,
goto error;
}
- gst_structure_id_set_value (nit, QUARK_TRANSPORTS, &transports);
- g_value_unset (&transports);
+ gst_structure_id_take_value (nit, QUARK_TRANSPORTS, &transports);
GST_DEBUG ("NIT %" GST_PTR_FORMAT, nit);
@@ -1612,9 +1779,10 @@ mpegts_packetizer_parse_sdt (MpegTSPacketizer2 * packetizer,
running_status_tmp = "reserved";
}
servicename_tmp =
- get_encoding_and_convert (servicename, servicename_length);
+ get_encoding_and_convert (packetizer, servicename,
+ servicename_length);
serviceprovider_name_tmp =
- get_encoding_and_convert (serviceprovider_name,
+ get_encoding_and_convert (packetizer, serviceprovider_name,
serviceprovider_name_length);
gst_structure_set (service,
@@ -1656,8 +1824,7 @@ mpegts_packetizer_parse_sdt (MpegTSPacketizer2 * packetizer,
goto error;
}
- gst_structure_id_set_value (sdt, QUARK_SERVICES, &services);
- g_value_unset (&services);
+ gst_structure_id_take_value (sdt, QUARK_SERVICES, &services);
return sdt;
@@ -1787,18 +1954,19 @@ mpegts_packetizer_parse_eit (MpegTSPacketizer2 * packetizer,
/* TODO: send tag event down relevant pad saying what is currently playing */
event_name = g_strdup_printf ("event-%d", event_id);
- event = gst_structure_new (event_name,
- "event-id", G_TYPE_UINT, event_id,
- "year", G_TYPE_UINT, year,
- "month", G_TYPE_UINT, month,
- "day", G_TYPE_UINT, day,
- "hour", G_TYPE_UINT, hour,
- "minute", G_TYPE_UINT, minute,
- "second", G_TYPE_UINT, second,
- "duration", G_TYPE_UINT, duration,
- "running-status", G_TYPE_UINT, running_status,
- "free-ca-mode", G_TYPE_BOOLEAN, free_ca_mode, NULL);
+ event = gst_structure_new_empty (event_name);
g_free (event_name);
+ gst_structure_id_set (event,
+ QUARK_EVENT_ID, G_TYPE_UINT, event_id,
+ QUARK_YEAR, G_TYPE_UINT, year,
+ QUARK_MONTH, G_TYPE_UINT, month,
+ QUARK_DAY, G_TYPE_UINT, day,
+ QUARK_HOUR, G_TYPE_UINT, hour,
+ QUARK_MINUTE, G_TYPE_UINT, minute,
+ QUARK_SECOND, G_TYPE_UINT, second,
+ QUARK_DURATION, G_TYPE_UINT, duration,
+ QUARK_RUNNING_STATUS, G_TYPE_UINT, running_status,
+ QUARK_FREE_CA_MODE, G_TYPE_BOOLEAN, free_ca_mode, NULL);
if (descriptors_loop_length) {
guint8 *event_descriptor;
@@ -1830,17 +1998,19 @@ mpegts_packetizer_parse_eit (MpegTSPacketizer2 * packetizer,
DESC_LENGTH (event_descriptor)) {
eventname_tmp =
- get_encoding_and_convert (eventname, eventname_length);
+ get_encoding_and_convert (packetizer, eventname,
+ eventname_length);
eventdescription_tmp =
- get_encoding_and_convert (eventdescription,
+ get_encoding_and_convert (packetizer, eventdescription,
eventdescription_length);
- gst_structure_set (event, "name", G_TYPE_STRING, eventname_tmp,
- "description", G_TYPE_STRING, eventdescription_tmp, NULL);
+ gst_structure_id_set (event, QUARK_NAME, G_TYPE_STRING, eventname_tmp,
+ QUARK_DESCRIPTION, G_TYPE_STRING, eventdescription_tmp, NULL);
g_free (eventname_tmp);
g_free (eventdescription_tmp);
}
}
+
extended_event_descriptors =
gst_mpeg_descriptor_find_all (&mpegdescriptor,
DESC_DVB_EXTENDED_EVENT);
@@ -1870,18 +2040,21 @@ mpegts_packetizer_parse_eit (MpegTSPacketizer2 * packetizer,
length_aux = *items_aux;
++items_aux;
description =
- get_encoding_and_convert ((gchar *) items_aux, length_aux);
+ get_encoding_and_convert (packetizer, (gchar *) items_aux,
+ length_aux);
items_aux += length_aux;
/* Item text */
length_aux = *items_aux;
++items_aux;
- text = get_encoding_and_convert ((gchar *) items_aux, length_aux);
+ text =
+ get_encoding_and_convert (packetizer, (gchar *) items_aux,
+ length_aux);
items_aux += length_aux;
- extended_item = gst_structure_new ("extended_item",
- "description", G_TYPE_STRING, description,
- "text", G_TYPE_STRING, text, NULL);
+ extended_item = gst_structure_new_id (QUARK_EXTENDED_ITEM,
+ QUARK_DESCRIPTION, G_TYPE_STRING, description,
+ QUARK_TEXT, G_TYPE_STRING, text, NULL);
g_value_init (&extended_item_value, GST_TYPE_STRUCTURE);
g_value_take_boxed (&extended_item_value, extended_item);
@@ -1889,29 +2062,30 @@ mpegts_packetizer_parse_eit (MpegTSPacketizer2 * packetizer,
&extended_item_value);
g_value_unset (&extended_item_value);
}
+
if (extended_text) {
gchar *tmp;
gchar *old_extended_text = extended_text;
- tmp = get_encoding_and_convert ((gchar *)
+ tmp = get_encoding_and_convert (packetizer, (gchar *)
DESC_DVB_EXTENDED_EVENT_text (extended_descriptor),
DESC_DVB_EXTENDED_EVENT_text_length (extended_descriptor));
extended_text = g_strdup_printf ("%s%s", extended_text, tmp);
g_free (old_extended_text);
g_free (tmp);
} else {
- extended_text = get_encoding_and_convert ((gchar *)
+ extended_text = get_encoding_and_convert (packetizer, (gchar *)
DESC_DVB_EXTENDED_EVENT_text (extended_descriptor),
DESC_DVB_EXTENDED_EVENT_text_length (extended_descriptor));
}
}
}
if (extended_text) {
- gst_structure_set (event, "extended-text", G_TYPE_STRING,
+ gst_structure_id_set (event, QUARK_EXTENDED_TEXT, G_TYPE_STRING,
extended_text, NULL);
g_free (extended_text);
}
- gst_structure_set_value (event, "extented-items", &extended_items);
- g_value_unset (&extended_items);
+ gst_structure_id_take_value (event, QUARK_EXTENDED_ITEMS,
+ &extended_items);
g_array_free (extended_event_descriptors, TRUE);
}
@@ -2113,8 +2287,7 @@ mpegts_packetizer_parse_eit (MpegTSPacketizer2 * packetizer,
component = NULL;
}
}
- gst_structure_set_value (event, "components", &components);
- g_value_unset (&components);
+ gst_structure_take_value (event, "components", &components);
g_array_free (component_descriptors, TRUE);
}
@@ -2142,8 +2315,7 @@ mpegts_packetizer_parse_eit (MpegTSPacketizer2 * packetizer,
goto error;
}
- gst_structure_id_set_value (eit, QUARK_EVENTS, &events);
- g_value_unset (&events);
+ gst_structure_id_take_value (eit, QUARK_EVENTS, &events);
GST_DEBUG ("EIT %" GST_PTR_FORMAT, eit);
@@ -2287,6 +2459,8 @@ mpegts_packetizer_clear (MpegTSPacketizer2 * packetizer)
void
mpegts_packetizer_flush (MpegTSPacketizer2 * packetizer)
{
+ GST_DEBUG ("Flushing");
+
if (packetizer->streams) {
int i;
for (i = 0; i < 8192; i++) {
@@ -2434,6 +2608,7 @@ MpegTSPacketizerPacketReturn
mpegts_packetizer_next_packet (MpegTSPacketizer2 * packetizer,
MpegTSPacketizerPacket * packet)
{
+ MpegTSPacketizerPrivate *priv = packetizer->priv;
guint avail;
int i;
@@ -2442,20 +2617,15 @@ mpegts_packetizer_next_packet (MpegTSPacketizer2 * packetizer,
return PACKET_NEED_MORE;
}
- while ((avail = packetizer->priv->available) >= packetizer->packet_size) {
- GST_DEBUG ("mapped:%p, mapped_size:%d, offset:%d",
- packetizer->priv->mapped,
- packetizer->priv->mapped_size, packetizer->priv->offset);
- if (packetizer->priv->mapped == NULL) {
- packetizer->priv->mapped_size =
- packetizer->priv->available -
- (packetizer->priv->available % packetizer->packet_size);
- packetizer->priv->mapped =
- (guint8 *) gst_adapter_map (packetizer->adapter,
- packetizer->priv->mapped_size);
- packetizer->priv->offset = 0;
+ while ((avail = priv->available) >= packetizer->packet_size) {
+ if (priv->mapped == NULL) {
+ priv->mapped_size =
+ priv->available - (priv->available % packetizer->packet_size);
+ priv->mapped =
+ (guint8 *) gst_adapter_map (packetizer->adapter, priv->mapped_size);
+ priv->offset = 0;
}
- packet->data_start = packetizer->priv->mapped + packetizer->priv->offset;
+ packet->data_start = priv->mapped + priv->offset;
/* M2TS packets don't start with the sync byte, all other variants do */
if (packetizer->packet_size == MPEGTS_M2TS_PACKETSIZE)
@@ -2466,10 +2636,10 @@ mpegts_packetizer_next_packet (MpegTSPacketizer2 * packetizer,
* the data */
packet->data_end = packet->data_start + 188;
packet->offset = packetizer->offset;
- GST_DEBUG ("offset %" G_GUINT64_FORMAT, packet->offset);
+ GST_LOG ("offset %" G_GUINT64_FORMAT, packet->offset);
packetizer->offset += packetizer->packet_size;
GST_MEMDUMP ("data_start", packet->data_start, 16);
- packet->origts = packetizer->priv->last_in_time;
+ packet->origts = priv->last_in_time;
/* Check sync byte */
if (G_LIKELY (packet->data_start[0] == 0x47))
@@ -2489,13 +2659,15 @@ mpegts_packetizer_next_packet (MpegTSPacketizer2 * packetizer,
i += 188;
}
- gst_adapter_flush (packetizer->adapter, i);
+ GST_DEBUG ("Flushing %d bytes out", i);
+ /* gst_adapter_flush (packetizer->adapter, i); */
/* Pop out the remaining data... */
- packetizer->priv->offset += i;
- packetizer->priv->available -= i;
- if (G_UNLIKELY (packetizer->priv->available < packetizer->packet_size)) {
- gst_adapter_flush (packetizer->adapter, packetizer->priv->offset);
- packetizer->priv->mapped = NULL;
+ priv->offset += i;
+ priv->available -= i;
+ if (G_UNLIKELY (priv->available < packetizer->packet_size)) {
+ GST_DEBUG ("Flushing %d bytes out", priv->offset);
+ gst_adapter_flush (packetizer->adapter, priv->offset);
+ priv->mapped = NULL;
}
continue;
}
@@ -2528,12 +2700,14 @@ void
mpegts_packetizer_clear_packet (MpegTSPacketizer2 * packetizer,
MpegTSPacketizerPacket * packet)
{
- memset (packet, 0, sizeof (MpegTSPacketizerPacket));
- packetizer->priv->offset += packetizer->packet_size;
- packetizer->priv->available -= packetizer->packet_size;
- if (G_UNLIKELY (packetizer->priv->available < packetizer->packet_size)) {
- gst_adapter_flush (packetizer->adapter, packetizer->priv->offset);
- packetizer->priv->mapped = NULL;
+ MpegTSPacketizerPrivate *priv = packetizer->priv;
+
+ priv->offset += packetizer->packet_size;
+ priv->available -= packetizer->packet_size;
+
+ if (G_UNLIKELY (priv->mapped && priv->available < packetizer->packet_size)) {
+ gst_adapter_flush (packetizer->adapter, priv->offset);
+ priv->mapped = NULL;
}
}
@@ -2719,6 +2893,23 @@ _init_local (void)
QUARK_NETWORK_NAME = g_quark_from_string ("network-name");
QUARK_ORIGINAL_NETWORK_ID = g_quark_from_string ("original-network-id");
QUARK_TRANSPORTS = g_quark_from_string ("transports");
+ QUARK_TERRESTRIAL = g_quark_from_string ("terrestrial");
+ QUARK_CABLE = g_quark_from_string ("cable");
+ QUARK_FREQUENCY = g_quark_from_string ("frequency");
+ QUARK_MODULATION = g_quark_from_string ("modulation");
+ QUARK_BANDWIDTH = g_quark_from_string ("bandwidth");
+ QUARK_CONSTELLATION = g_quark_from_string ("constellation");
+ QUARK_HIERARCHY = g_quark_from_string ("hierarchy");
+ QUARK_CODE_RATE_HP = g_quark_from_string ("code-rate-hp");
+ QUARK_CODE_RATE_LP = g_quark_from_string ("code-rate-lp");
+ QUARK_GUARD_INTERVAL = g_quark_from_string ("guard-interval");
+ QUARK_TRANSMISSION_MODE = g_quark_from_string ("transmission-mode");
+ QUARK_OTHER_FREQUENCY = g_quark_from_string ("other-frequency");
+ QUARK_SYMBOL_RATE = g_quark_from_string ("symbol-rate");
+ QUARK_INNER_FEC = g_quark_from_string ("inner-fec");
+ QUARK_DELIVERY = g_quark_from_string ("delivery");
+ QUARK_CHANNELS = g_quark_from_string ("channels");
+ QUARK_LOGICAL_CHANNEL_NUMBER = g_quark_from_string ("logical-channel-number");
QUARK_SDT = g_quark_from_string ("sdt");
QUARK_ACTUAL_TRANSPORT_STREAM =
@@ -2732,6 +2923,22 @@ _init_local (void)
g_quark_from_string ("segment-last-section-number");
QUARK_LAST_TABLE_ID = g_quark_from_string ("last-table-id");
QUARK_EVENTS = g_quark_from_string ("events");
+ QUARK_NAME = g_quark_from_string ("name");
+ QUARK_DESCRIPTION = g_quark_from_string ("description");
+ QUARK_EXTENDED_ITEM = g_quark_from_string ("extended_item");
+ QUARK_EXTENDED_ITEMS = g_quark_from_string ("extended-items");
+ QUARK_TEXT = g_quark_from_string ("text");
+ QUARK_EXTENDED_TEXT = g_quark_from_string ("extended-text");
+ QUARK_EVENT_ID = g_quark_from_string ("event-id");
+ QUARK_YEAR = g_quark_from_string ("year");
+ QUARK_MONTH = g_quark_from_string ("month");
+ QUARK_DAY = g_quark_from_string ("day");
+ QUARK_HOUR = g_quark_from_string ("hour");
+ QUARK_MINUTE = g_quark_from_string ("minute");
+ QUARK_SECOND = g_quark_from_string ("second");
+ QUARK_DURATION = g_quark_from_string ("duration");
+ QUARK_RUNNING_STATUS = g_quark_from_string ("running-status");
+ QUARK_FREE_CA_MODE = g_quark_from_string ("free-ca-mode");
}
/**
@@ -2739,70 +2946,98 @@ _init_local (void)
* @start_text: Location where the beginning of the actual text is stored
* @is_multibyte: Location where information whether it's a multibyte encoding
* or not is stored
- * @returns: Name of encoding or NULL of encoding could not be detected.
- *
- * The returned string should be freed with g_free () when no longer needed.
+ * @returns: GIconv for conversion or NULL
*/
-static gchar *
-get_encoding (const gchar * text, guint * start_text, gboolean * is_multibyte)
+static LocalIconvCode
+get_encoding (MpegTSPacketizer2 * packetizer, const gchar * text,
+ guint * start_text, gboolean * is_multibyte)
{
- gchar *encoding;
+ LocalIconvCode encoding;
guint8 firstbyte;
- g_return_val_if_fail (text != NULL, NULL);
+ *is_multibyte = FALSE;
+ *start_text = 0;
firstbyte = (guint8) text[0];
- /* ETSI EN 300 468, "Selection of character table" */
+ /* A wrong value */
+ g_return_val_if_fail (firstbyte != 0x00, _ICONV_UNKNOWN);
+
if (firstbyte <= 0x0B) {
- encoding = g_strdup_printf ("iso8859-%u", firstbyte + 4);
- *start_text = 1;
- *is_multibyte = FALSE;
- } else if (firstbyte >= 0x20) {
- encoding = g_strdup ("iso6937");
- *start_text = 0;
- *is_multibyte = FALSE;
- } else if (firstbyte == 0x10) {
- guint16 table;
- gchar table_str[6];
-
- text++;
- table = GST_READ_UINT16_BE (text);
- g_snprintf (table_str, 6, "%d", table);
-
- encoding = g_strconcat ("iso8859-", table_str, NULL);
- *start_text = 3;
- *is_multibyte = FALSE;
- } else if (firstbyte == 0x11) {
- encoding = g_strdup ("ISO-10646/UCS2");
- *start_text = 1;
- *is_multibyte = TRUE;
- } else if (firstbyte == 0x12) {
- /* EUC-KR implements KSX1001 */
- encoding = g_strdup ("EUC-KR");
+ /* 0x01 => iso 8859-5 */
+ encoding = firstbyte + _ICONV_ISO8859_4;
*start_text = 1;
- *is_multibyte = TRUE;
- } else if (firstbyte == 0x13) {
- encoding = g_strdup ("GB2312");
- *start_text = 1;
- *is_multibyte = FALSE;
- } else if (firstbyte == 0x14) {
- encoding = g_strdup ("UTF-16BE");
- *start_text = 1;
- *is_multibyte = TRUE;
- } else if (firstbyte == 0x15) {
- encoding = g_strdup ("ISO-10646/UTF8");
- *start_text = 1;
- *is_multibyte = FALSE;
- } else {
- /* reserved */
- encoding = NULL;
- *start_text = 0;
- *is_multibyte = FALSE;
+ goto beach;
}
+ /* ETSI EN 300 468, "Selection of character table" */
+ switch (firstbyte) {
+ case 0x0C:
+ case 0x0D:
+ case 0x0E:
+ case 0x0F:
+ /* RESERVED */
+ encoding = _ICONV_UNKNOWN;
+ break;
+ case 0x10:
+ {
+ guint16 table;
+
+ table = GST_READ_UINT16_BE (text + 1);
+
+ if (table < 17)
+ encoding = _ICONV_UNKNOWN + table;
+ else
+ encoding = _ICONV_UNKNOWN;;
+ *start_text = 3;
+ break;
+ }
+ case 0x11:
+ encoding = _ICONV_ISO10646_UC2;
+ *start_text = 1;
+ *is_multibyte = TRUE;
+ break;
+ case 0x12:
+ /* EUC-KR implements KSX1001 */
+ encoding = _ICONV_EUC_KR;
+ *start_text = 1;
+ *is_multibyte = TRUE;
+ break;
+ case 0x13:
+ encoding = _ICONV_GB2312;
+ *start_text = 1;
+ break;
+ case 0x14:
+ encoding = _ICONV_UTF_16BE;
+ *start_text = 1;
+ *is_multibyte = TRUE;
+ break;
+ case 0x15:
+ /* TODO : Where does this come from ?? */
+ encoding = _ICONV_ISO10646_UTF8;
+ *start_text = 1;
+ break;
+ case 0x16:
+ case 0x17:
+ case 0x18:
+ case 0x19:
+ case 0x1A:
+ case 0x1B:
+ case 0x1C:
+ case 0x1D:
+ case 0x1E:
+ case 0x1F:
+ /* RESERVED */
+ encoding = _ICONV_UNKNOWN;
+ break;
+ default:
+ encoding = _ICONV_ISO6937;
+ break;
+ }
+
+beach:
GST_DEBUG
- ("Found encoding %s, first byte is 0x%02x, start_text: %u, is_multibyte: %d",
+ ("Found encoding %d, first byte is 0x%02x, start_text: %u, is_multibyte: %d",
encoding, firstbyte, *start_text, *is_multibyte);
return encoding;
@@ -2821,15 +3056,12 @@ get_encoding (const gchar * text, guint * start_text, gboolean * is_multibyte)
*/
static gchar *
convert_to_utf8 (const gchar * text, gint length, guint start,
- const gchar * encoding, gboolean is_multibyte, GError ** error)
+ GIConv iconv, gboolean is_multibyte, GError ** error)
{
gchar *new_text;
gchar *tmp, *pos;
gint i;
- g_return_val_if_fail (text != NULL, NULL);
- g_return_val_if_fail (encoding != NULL, NULL);
-
text += start;
pos = tmp = g_malloc (length * 2);
@@ -2932,8 +3164,9 @@ convert_to_utf8 (const gchar * text, gint length, guint start,
if (pos > tmp) {
gsize bread = 0;
+
new_text =
- g_convert (tmp, pos - tmp, "utf-8", encoding, &bread, NULL, error);
+ g_convert_with_iconv (tmp, pos - tmp, iconv, &bread, NULL, error);
GST_DEBUG ("Converted to : %s", new_text);
} else {
new_text = g_strdup ("");
@@ -2945,105 +3178,110 @@ convert_to_utf8 (const gchar * text, gint length, guint start,
}
static gchar *
-get_encoding_and_convert (const gchar * text, guint length)
+get_encoding_and_convert (MpegTSPacketizer2 * packetizer, const gchar * text,
+ guint length)
{
GError *error = NULL;
gchar *converted_str;
- gchar *encoding;
guint start_text = 0;
gboolean is_multibyte;
+ LocalIconvCode encoding;
+ GIConv iconv = (GIConv) - 1;
g_return_val_if_fail (text != NULL, NULL);
- if (length == 0)
+ if (text == NULL || length == 0)
return g_strdup ("");
- encoding = get_encoding (text, &start_text, &is_multibyte);
+ encoding = get_encoding (packetizer, text, &start_text, &is_multibyte);
+
+ if (encoding > _ICONV_UNKNOWN && encoding < _ICONV_MAX) {
+ GST_DEBUG ("Encoding %s", iconvtablename[encoding]);
+ if (packetizer->priv->iconvs[encoding] == (GIConv) - 1)
+ packetizer->priv->iconvs[encoding] =
+ g_iconv_open ("utf-8", iconvtablename[encoding]);
+ iconv = packetizer->priv->iconvs[encoding];
+ }
- if (encoding == NULL) {
+ if (iconv == (GIConv) - 1) {
GST_WARNING ("Could not detect encoding");
converted_str = g_strndup (text, length);
- } else {
- converted_str = convert_to_utf8 (text, length - start_text, start_text,
- encoding, is_multibyte, &error);
- if (error != NULL) {
- GST_WARNING ("Could not convert string, encoding is %s: %s",
- encoding, error->message);
- g_error_free (error);
- error = NULL;
+ goto beach;
+ }
+
+ converted_str = convert_to_utf8 (text, length - start_text, start_text,
+ iconv, is_multibyte, &error);
+ if (error != NULL) {
+ GST_WARNING ("Could not convert string: %s", error->message);
+ g_error_free (error);
+ error = NULL;
+
+ if (encoding >= _ICONV_ISO8859_2 && encoding <= _ICONV_ISO8859_15) {
+ /* Sometimes using the standard 8859-1 set fixes issues */
+ GST_DEBUG ("Encoding %s", iconvtablename[_ICONV_ISO8859_1]);
+ if (packetizer->priv->iconvs[_ICONV_ISO8859_1] == (GIConv) - 1)
+ packetizer->priv->iconvs[_ICONV_ISO8859_1] =
+ g_iconv_open ("utf-8", iconvtablename[_ICONV_ISO8859_1]);
+ iconv = packetizer->priv->iconvs[_ICONV_ISO8859_1];
+
+ GST_INFO ("Trying encoding ISO 8859-1");
+ converted_str = convert_to_utf8 (text, length, 1, iconv, FALSE, &error);
+ if (error != NULL) {
+ GST_WARNING
+ ("Could not convert string while assuming encoding ISO 8859-1: %s",
+ error->message);
+ g_error_free (error);
+ goto failed;
+ }
+ } else if (encoding == _ICONV_ISO6937) {
/* The first part of ISO 6937 is identical to ISO 8859-9, but
* they differ in the second part. Some channels don't
* provide the first byte that indicates ISO 8859-9 encoding.
* If decoding from ISO 6937 failed, we try ISO 8859-9 here.
*/
- if (strcmp (encoding, "iso6937") == 0) {
- GST_INFO ("Trying encoding ISO 8859-9");
- converted_str = convert_to_utf8 (text, length, 0,
- "iso8859-9", FALSE, &error);
- if (error != NULL) {
- GST_WARNING
- ("Could not convert string while assuming encoding ISO 8859-9: %s",
- error->message);
- g_error_free (error);
- goto failed;
- }
- } else {
+ if (packetizer->priv->iconvs[_ICONV_ISO8859_9] == (GIConv) - 1)
+ packetizer->priv->iconvs[_ICONV_ISO8859_9] =
+ g_iconv_open ("utf-8", iconvtablename[_ICONV_ISO8859_9]);
+ iconv = packetizer->priv->iconvs[_ICONV_ISO8859_9];
+
+ GST_INFO ("Trying encoding ISO 8859-9");
+ converted_str = convert_to_utf8 (text, length, 0, iconv, FALSE, &error);
+ if (error != NULL) {
+ GST_WARNING
+ ("Could not convert string while assuming encoding ISO 8859-9: %s",
+ error->message);
+ g_error_free (error);
goto failed;
}
- }
-
- g_free (encoding);
+ } else
+ goto failed;
}
+beach:
return converted_str;
failed:
{
- g_free (encoding);
text += start_text;
return g_strndup (text, length - start_text);
}
}
-/**
- * mpegts_packetizer_reset_skew:
- * @packetizer: an #MpegTSPacketizer2
- *
- * Reset the skew calculations in @packetizer.
- */
static void
-mpegts_packetizer_reset_skew (MpegTSPacketizer2 * packetizer)
-{
- /* FIXME : These variables should be *per* PCR PID */
- packetizer->base_time = GST_CLOCK_TIME_NONE;
- packetizer->base_pcrtime = GST_CLOCK_TIME_NONE;
- packetizer->last_pcrtime = GST_CLOCK_TIME_NONE;
- packetizer->window_pos = 0;
- packetizer->window_filling = TRUE;
- packetizer->window_min = 0;
- packetizer->skew = 0;
- packetizer->prev_send_diff = GST_CLOCK_TIME_NONE;
- packetizer->prev_out_time = GST_CLOCK_TIME_NONE;
- packetizer->wrap_count = 0;
- GST_DEBUG ("reset skew correction");
-}
-
-static void
-mpegts_packetizer_resync (MpegTSPacketizer2 * packetizer, GstClockTime time,
+mpegts_packetizer_resync (MpegTSPCR * pcr, GstClockTime time,
GstClockTime gstpcrtime, gboolean reset_skew)
{
- /* FIXME : These variables should be *per* PCR PID */
- packetizer->base_time = time;
- packetizer->base_pcrtime = gstpcrtime;
- packetizer->prev_out_time = GST_CLOCK_TIME_NONE;
- packetizer->prev_send_diff = GST_CLOCK_TIME_NONE;
+ pcr->base_time = time;
+ pcr->base_pcrtime = gstpcrtime;
+ pcr->prev_out_time = GST_CLOCK_TIME_NONE;
+ pcr->prev_send_diff = GST_CLOCK_TIME_NONE;
if (reset_skew) {
- packetizer->window_filling = TRUE;
- packetizer->window_pos = 0;
- packetizer->window_min = 0;
- packetizer->window_size = 0;
- packetizer->skew = 0;
+ pcr->window_filling = TRUE;
+ pcr->window_pos = 0;
+ pcr->window_min = 0;
+ pcr->window_size = 0;
+ pcr->skew = 0;
}
}
@@ -3113,8 +3351,7 @@ mpegts_packetizer_resync (MpegTSPacketizer2 * packetizer, GstClockTime time,
* Returns: @time adjusted with the clock skew.
*/
static GstClockTime
-calculate_skew (MpegTSPacketizer2 * packetizer, guint64 pcrtime,
- GstClockTime time)
+calculate_skew (MpegTSPCR * pcr, guint64 pcrtime, GstClockTime time)
{
guint64 send_diff, recv_diff;
gint64 delta;
@@ -3123,61 +3360,88 @@ calculate_skew (MpegTSPacketizer2 * packetizer, guint64 pcrtime,
GstClockTime gstpcrtime, out_time;
guint64 slope;
- gstpcrtime =
- PCRTIME_TO_GSTTIME (pcrtime) + packetizer->wrap_count * PCR_GST_MAX_VALUE;
+ gstpcrtime = PCRTIME_TO_GSTTIME (pcrtime) + pcr->pcroffset;
/* first time, lock on to time and gstpcrtime */
- if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (packetizer->base_time))) {
- packetizer->base_time = time;
- packetizer->prev_out_time = GST_CLOCK_TIME_NONE;
+ if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (pcr->base_time))) {
+ pcr->base_time = time;
+ pcr->prev_out_time = GST_CLOCK_TIME_NONE;
GST_DEBUG ("Taking new base time %" GST_TIME_FORMAT, GST_TIME_ARGS (time));
}
- if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (packetizer->base_pcrtime))) {
- packetizer->base_pcrtime = gstpcrtime;
- packetizer->prev_send_diff = -1;
+ if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (pcr->base_pcrtime))) {
+ pcr->base_pcrtime = gstpcrtime;
+ pcr->prev_send_diff = -1;
GST_DEBUG ("Taking new base pcrtime %" GST_TIME_FORMAT,
GST_TIME_ARGS (gstpcrtime));
}
- if (G_LIKELY (gstpcrtime >= packetizer->base_pcrtime))
- send_diff = gstpcrtime - packetizer->base_pcrtime;
- else if (GST_CLOCK_TIME_IS_VALID (time)
- && (packetizer->last_pcrtime - gstpcrtime > PCR_GST_MAX_VALUE / 2)) {
- /* Detect wraparounds */
- GST_DEBUG ("PCR wrap");
- packetizer->wrap_count++;
- gstpcrtime =
- PCRTIME_TO_GSTTIME (pcrtime) +
- packetizer->wrap_count * PCR_GST_MAX_VALUE;
- send_diff = gstpcrtime - packetizer->base_pcrtime;
- } else {
- GST_WARNING ("backward timestamps at server but no timestamps");
- send_diff = 0;
- /* at least try to get a new timestamp.. */
- packetizer->base_time = GST_CLOCK_TIME_NONE;
- }
+ /* Handle PCR wraparound and resets */
+ if (GST_CLOCK_TIME_IS_VALID (pcr->last_pcrtime) &&
+ gstpcrtime < pcr->last_pcrtime) {
+ if (pcr->last_pcrtime - gstpcrtime > PCR_GST_MAX_VALUE / 2) {
+ /* PCR wraparound */
+ GST_DEBUG ("PCR wrap");
+ pcr->pcroffset += PCR_GST_MAX_VALUE;
+ gstpcrtime = PCRTIME_TO_GSTTIME (pcrtime) + pcr->pcroffset;
+ send_diff = gstpcrtime - pcr->base_pcrtime;
+ } else if (GST_CLOCK_TIME_IS_VALID (time)
+ && pcr->last_pcrtime - gstpcrtime > 15 * GST_SECOND) {
+ /* Assume a reset */
+ GST_DEBUG ("PCR reset");
+ /* Calculate PCR we would have expected for the given input time,
+ * essentially applying the reverse correction process
+ *
+ * We want to find the PCR offset to apply
+ * pcroffset = (corrected) gstpcrtime - (received) gstpcrtime
+ *
+ * send_diff = (corrected) gstpcrtime - pcr->base_pcrtime
+ * recv_diff = time - pcr->base_time
+ * out_time = pcr->base_time + send_diff
+ *
+ * We are assuming that send_diff == recv_diff
+ * (corrected) gstpcrtime - pcr->base_pcrtime = time - pcr->base_time
+ * Giving us:
+ * (corrected) gstpcrtime = time - pcr->base_time + pcr->base_pcrtime
+ *
+ * And therefore:
+ * pcroffset = time - pcr->base_time + pcr->base_pcrtime - (received) gstpcrtime
+ **/
+ pcr->pcroffset += time - pcr->base_time + pcr->base_pcrtime - gstpcrtime;
+ gstpcrtime = PCRTIME_TO_GSTTIME (pcrtime) + pcr->pcroffset;
+ send_diff = gstpcrtime - pcr->base_pcrtime;
+ GST_DEBUG ("Introduced offset is now %" GST_TIME_FORMAT
+ " corrected pcr time %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (pcr->pcroffset), GST_TIME_ARGS (gstpcrtime));
+ } else {
+ GST_WARNING ("backward timestamps at server but no timestamps");
+ send_diff = 0;
+ /* at least try to get a new timestamp.. */
+ pcr->base_time = GST_CLOCK_TIME_NONE;
+ }
+ } else
+ send_diff = gstpcrtime - pcr->base_pcrtime;
GST_DEBUG ("gstpcr %" GST_TIME_FORMAT ", buftime %" GST_TIME_FORMAT ", base %"
GST_TIME_FORMAT ", send_diff %" GST_TIME_FORMAT,
GST_TIME_ARGS (gstpcrtime), GST_TIME_ARGS (time),
- GST_TIME_ARGS (packetizer->base_pcrtime), GST_TIME_ARGS (send_diff));
+ GST_TIME_ARGS (pcr->base_pcrtime), GST_TIME_ARGS (send_diff));
/* keep track of the last extended pcrtime */
- packetizer->last_pcrtime = gstpcrtime;
+ pcr->last_pcrtime = gstpcrtime;
/* we don't have an arrival timestamp so we can't do skew detection. we
* should still apply a timestamp based on RTP timestamp and base_time */
if (!GST_CLOCK_TIME_IS_VALID (time)
- || !GST_CLOCK_TIME_IS_VALID (packetizer->base_time))
+ || !GST_CLOCK_TIME_IS_VALID (pcr->base_time))
goto no_skew;
/* elapsed time at receiver, includes the jitter */
- recv_diff = time - packetizer->base_time;
+ recv_diff = time - pcr->base_time;
/* Ignore packets received at 100% the same time (i.e. from the same input buffer) */
- if (G_UNLIKELY (time == packetizer->prev_in_time
- && GST_CLOCK_TIME_IS_VALID (packetizer->prev_in_time)))
+ if (G_UNLIKELY (time == pcr->prev_in_time
+ && GST_CLOCK_TIME_IS_VALID (pcr->prev_in_time)))
goto no_skew;
/* measure the diff */
@@ -3190,38 +3454,38 @@ calculate_skew (MpegTSPacketizer2 * packetizer, guint64 pcrtime,
GST_DEBUG ("time %" GST_TIME_FORMAT ", base %" GST_TIME_FORMAT ", recv_diff %"
GST_TIME_FORMAT ", slope %" G_GUINT64_FORMAT, GST_TIME_ARGS (time),
- GST_TIME_ARGS (packetizer->base_time), GST_TIME_ARGS (recv_diff), slope);
+ GST_TIME_ARGS (pcr->base_time), GST_TIME_ARGS (recv_diff), slope);
/* if the difference between the sender timeline and the receiver timeline
* changed too quickly we have to resync because the server likely restarted
* its timestamps. */
- if (ABS (delta - packetizer->skew) > GST_SECOND) {
+ if (ABS (delta - pcr->skew) > GST_SECOND) {
GST_WARNING ("delta - skew: %" GST_TIME_FORMAT " too big, reset skew",
- GST_TIME_ARGS (delta - packetizer->skew));
- mpegts_packetizer_resync (packetizer, time, gstpcrtime, TRUE);
+ GST_TIME_ARGS (delta - pcr->skew));
+ mpegts_packetizer_resync (pcr, time, gstpcrtime, TRUE);
send_diff = 0;
delta = 0;
}
- pos = packetizer->window_pos;
+ pos = pcr->window_pos;
- if (G_UNLIKELY (packetizer->window_filling)) {
+ if (G_UNLIKELY (pcr->window_filling)) {
/* we are filling the window */
GST_DEBUG ("filling %d, delta %" G_GINT64_FORMAT, pos, delta);
- packetizer->window[pos++] = delta;
+ pcr->window[pos++] = delta;
/* calc the min delta we observed */
- if (G_UNLIKELY (pos == 1 || delta < packetizer->window_min))
- packetizer->window_min = delta;
+ if (G_UNLIKELY (pos == 1 || delta < pcr->window_min))
+ pcr->window_min = delta;
if (G_UNLIKELY (send_diff >= MAX_TIME || pos >= MAX_WINDOW)) {
- packetizer->window_size = pos;
+ pcr->window_size = pos;
/* window filled */
- GST_DEBUG ("min %" G_GINT64_FORMAT, packetizer->window_min);
+ GST_DEBUG ("min %" G_GINT64_FORMAT, pcr->window_min);
/* the skew is now the min */
- packetizer->skew = packetizer->window_min;
- packetizer->window_filling = FALSE;
+ pcr->skew = pcr->window_min;
+ pcr->window_filling = FALSE;
} else {
gint perc_time, perc_window, perc;
@@ -3237,73 +3501,70 @@ calculate_skew (MpegTSPacketizer2 * packetizer, guint64 pcrtime,
/* quickly go to the min value when we are filling up, slowly when we are
* just starting because we're not sure it's a good value yet. */
- packetizer->skew =
- (perc * packetizer->window_min + ((10000 -
- perc) * packetizer->skew)) / 10000;
- packetizer->window_size = pos + 1;
+ pcr->skew =
+ (perc * pcr->window_min + ((10000 - perc) * pcr->skew)) / 10000;
+ pcr->window_size = pos + 1;
}
} else {
/* pick old value and store new value. We keep the previous value in order
* to quickly check if the min of the window changed */
- old = packetizer->window[pos];
- packetizer->window[pos++] = delta;
+ old = pcr->window[pos];
+ pcr->window[pos++] = delta;
- if (G_UNLIKELY (delta <= packetizer->window_min)) {
+ if (G_UNLIKELY (delta <= pcr->window_min)) {
/* if the new value we inserted is smaller or equal to the current min,
* it becomes the new min */
- packetizer->window_min = delta;
- } else if (G_UNLIKELY (old == packetizer->window_min)) {
+ pcr->window_min = delta;
+ } else if (G_UNLIKELY (old == pcr->window_min)) {
gint64 min = G_MAXINT64;
/* if we removed the old min, we have to find a new min */
- for (i = 0; i < packetizer->window_size; i++) {
+ for (i = 0; i < pcr->window_size; i++) {
/* we found another value equal to the old min, we can stop searching now */
- if (packetizer->window[i] == old) {
+ if (pcr->window[i] == old) {
min = old;
break;
}
- if (packetizer->window[i] < min)
- min = packetizer->window[i];
+ if (pcr->window[i] < min)
+ min = pcr->window[i];
}
- packetizer->window_min = min;
+ pcr->window_min = min;
}
/* average the min values */
- packetizer->skew =
- (packetizer->window_min + (124 * packetizer->skew)) / 125;
+ pcr->skew = (pcr->window_min + (124 * pcr->skew)) / 125;
GST_DEBUG ("delta %" G_GINT64_FORMAT ", new min: %" G_GINT64_FORMAT, delta,
- packetizer->window_min);
+ pcr->window_min);
}
/* wrap around in the window */
- if (G_UNLIKELY (pos >= packetizer->window_size))
+ if (G_UNLIKELY (pos >= pcr->window_size))
pos = 0;
- packetizer->window_pos = pos;
+ pcr->window_pos = pos;
no_skew:
/* the output time is defined as the base timestamp plus the PCR time
* adjusted for the clock skew .*/
- if (packetizer->base_time != -1) {
- out_time = packetizer->base_time + send_diff;
+ if (pcr->base_time != -1) {
+ out_time = pcr->base_time + send_diff;
/* skew can be negative and we don't want to make invalid timestamps */
- if (packetizer->skew < 0 && out_time < -packetizer->skew) {
+ if (pcr->skew < 0 && out_time < -pcr->skew) {
out_time = 0;
} else {
- out_time += packetizer->skew;
+ out_time += pcr->skew;
}
/* check if timestamps are not going backwards, we can only check this if we
* have a previous out time and a previous send_diff */
- if (G_LIKELY (packetizer->prev_out_time != -1
- && packetizer->prev_send_diff != -1)) {
+ if (G_LIKELY (pcr->prev_out_time != -1 && pcr->prev_send_diff != -1)) {
/* now check for backwards timestamps */
if (G_UNLIKELY (
/* if the server timestamps went up and the out_time backwards */
- (send_diff > packetizer->prev_send_diff
- && out_time < packetizer->prev_out_time) ||
+ (send_diff > pcr->prev_send_diff
+ && out_time < pcr->prev_out_time) ||
/* if the server timestamps went backwards and the out_time forwards */
- (send_diff < packetizer->prev_send_diff
- && out_time > packetizer->prev_out_time) ||
+ (send_diff < pcr->prev_send_diff
+ && out_time > pcr->prev_out_time) ||
/* if the server timestamps did not change */
- send_diff == packetizer->prev_send_diff)) {
+ send_diff == pcr->prev_send_diff)) {
GST_DEBUG ("backwards timestamps, using previous time");
out_time = GSTTIME_TO_MPEGTIME (out_time);
}
@@ -3313,41 +3574,42 @@ no_skew:
out_time = time;
}
- packetizer->prev_out_time = out_time;
- packetizer->prev_in_time = time;
- packetizer->prev_send_diff = send_diff;
+ pcr->prev_out_time = out_time;
+ pcr->prev_in_time = time;
+ pcr->prev_send_diff = send_diff;
GST_DEBUG ("skew %" G_GINT64_FORMAT ", out %" GST_TIME_FORMAT,
- packetizer->skew, GST_TIME_ARGS (out_time));
+ pcr->skew, GST_TIME_ARGS (out_time));
return out_time;
}
static void
-record_pcr (MpegTSPacketizer2 * packetizer, guint64 pcr, guint64 offset)
+record_pcr (MpegTSPacketizer2 * packetizer, MpegTSPCR * pcrtable, guint64 pcr,
+ guint64 offset)
{
MpegTSPacketizerPrivate *priv = packetizer->priv;
/* Check against first PCR */
- if (priv->first_pcr == -1 || priv->first_offset > offset) {
+ if (pcrtable->first_pcr == -1 || pcrtable->first_offset > offset) {
GST_DEBUG ("Recording first value. PCR:%" G_GUINT64_FORMAT " offset:%"
- G_GUINT64_FORMAT, pcr, offset);
- priv->first_pcr = pcr;
- priv->first_pcr_ts = PCRTIME_TO_GSTTIME (pcr);
- priv->first_offset = offset;
+ G_GUINT64_FORMAT " pcr_pid:0x%04x", pcr, offset, pcrtable->pid);
+ pcrtable->first_pcr = pcr;
+ pcrtable->first_pcr_ts = PCRTIME_TO_GSTTIME (pcr);
+ pcrtable->first_offset = offset;
priv->nb_seen_offsets++;
} else
/* If we didn't update the first PCR, let's check against last PCR */
- if (priv->last_pcr == -1 || priv->last_offset < offset) {
+ if (pcrtable->last_pcr == -1 || pcrtable->last_offset < offset) {
GST_DEBUG ("Recording last value. PCR:%" G_GUINT64_FORMAT " offset:%"
- G_GUINT64_FORMAT, pcr, offset);
- if (G_UNLIKELY (priv->first_pcr != -1 && pcr < priv->first_pcr)) {
+ G_GUINT64_FORMAT " pcr_pid:0x%04x", pcr, offset, pcrtable->pid);
+ if (G_UNLIKELY (pcrtable->first_pcr != -1 && pcr < pcrtable->first_pcr)) {
GST_DEBUG ("rollover detected");
pcr += PCR_MAX_VALUE;
}
- priv->last_pcr = pcr;
- priv->last_pcr_ts = PCRTIME_TO_GSTTIME (pcr);
- priv->last_offset = offset;
+ pcrtable->last_pcr = pcr;
+ pcrtable->last_pcr_ts = PCRTIME_TO_GSTTIME (pcr);
+ pcrtable->last_offset = offset;
priv->nb_seen_offsets++;
}
}
@@ -3359,9 +3621,11 @@ mpegts_packetizer_get_seen_pcr (MpegTSPacketizer2 * packetizer)
}
GstClockTime
-mpegts_packetizer_offset_to_ts (MpegTSPacketizer2 * packetizer, guint64 offset)
+mpegts_packetizer_offset_to_ts (MpegTSPacketizer2 * packetizer, guint64 offset,
+ guint16 pid)
{
MpegTSPacketizerPrivate *priv = packetizer->priv;
+ MpegTSPCR *pcrtable;
GstClockTime res;
if (G_UNLIKELY (!packetizer->calculate_offset))
@@ -3373,10 +3637,12 @@ mpegts_packetizer_offset_to_ts (MpegTSPacketizer2 * packetizer, guint64 offset)
if (G_UNLIKELY (offset < priv->refoffset))
return GST_CLOCK_TIME_NONE;
+ pcrtable = get_pcr_table (packetizer, pid);
+
/* Convert byte difference into time difference */
res = PCRTIME_TO_GSTTIME (gst_util_uint64_scale (offset - priv->refoffset,
- priv->last_pcr - priv->first_pcr,
- priv->last_offset - priv->first_offset));
+ pcrtable->last_pcr - pcrtable->first_pcr,
+ pcrtable->last_offset - pcrtable->first_offset));
GST_DEBUG ("Returning timestamp %" GST_TIME_FORMAT " for offset %"
G_GUINT64_FORMAT, GST_TIME_ARGS (res), offset);
@@ -3384,48 +3650,59 @@ mpegts_packetizer_offset_to_ts (MpegTSPacketizer2 * packetizer, guint64 offset)
}
GstClockTime
-mpegts_packetizer_pts_to_ts (MpegTSPacketizer2 * packetizer, GstClockTime pts)
+mpegts_packetizer_pts_to_ts (MpegTSPacketizer2 * packetizer, GstClockTime pts,
+ guint16 pcr_pid)
{
GstClockTime res = GST_CLOCK_TIME_NONE;
+ MpegTSPCR *pcrtable = get_pcr_table (packetizer, pcr_pid);
/* Use clock skew if present */
if (packetizer->calculate_skew
- && GST_CLOCK_TIME_IS_VALID (packetizer->base_time)) {
+ && GST_CLOCK_TIME_IS_VALID (pcrtable->base_time)) {
GST_DEBUG ("pts %" G_GUINT64_FORMAT " base_pcrtime:%" G_GUINT64_FORMAT
- " base_time:%" GST_TIME_FORMAT, pts, packetizer->base_pcrtime,
- GST_TIME_ARGS (packetizer->base_time));
- res = pts - packetizer->base_pcrtime + packetizer->base_time +
- packetizer->skew;
+ " base_time:%" GST_TIME_FORMAT, pts, pcrtable->base_pcrtime,
+ GST_TIME_ARGS (pcrtable->base_time));
+ res =
+ pts + pcrtable->pcroffset - pcrtable->base_pcrtime +
+ pcrtable->base_time + pcrtable->skew;
} else
/* If not, use pcr observations */
- if (packetizer->calculate_offset && packetizer->priv->first_pcr != -1) {
+ if (packetizer->calculate_offset && pcrtable->first_pcr != -1) {
/* Rollover */
- if (G_UNLIKELY (pts < packetizer->priv->first_pcr_ts))
+ if (G_UNLIKELY (pts < pcrtable->first_pcr_ts))
pts += MPEGTIME_TO_GSTTIME (PTS_DTS_MAX_VALUE);
- res = pts - packetizer->priv->first_pcr_ts;
+ res = pts - pcrtable->first_pcr_ts;
}
GST_DEBUG ("Returning timestamp %" GST_TIME_FORMAT " for pts %"
- GST_TIME_FORMAT, GST_TIME_ARGS (res), GST_TIME_ARGS (pts));
+ GST_TIME_FORMAT " pcr_pid:0x%04x", GST_TIME_ARGS (res),
+ GST_TIME_ARGS (pts), pcr_pid);
return res;
}
guint64
-mpegts_packetizer_ts_to_offset (MpegTSPacketizer2 * packetizer, GstClockTime ts)
+mpegts_packetizer_ts_to_offset (MpegTSPacketizer2 * packetizer, GstClockTime ts,
+ guint16 pcr_pid)
{
MpegTSPacketizerPrivate *priv = packetizer->priv;
+ MpegTSPCR *pcrtable;
guint64 res;
- if (!packetizer->calculate_offset || packetizer->priv->first_pcr == -1)
+ if (!packetizer->calculate_offset)
+ return -1;
+
+ pcrtable = get_pcr_table (packetizer, pcr_pid);
+ if (pcrtable->first_pcr == -1)
return -1;
GST_DEBUG ("ts(pcr) %" G_GUINT64_FORMAT " first_pcr:%" G_GUINT64_FORMAT,
- GSTTIME_TO_MPEGTIME (ts), priv->first_pcr);
+ GSTTIME_TO_MPEGTIME (ts), pcrtable->first_pcr);
/* Convert ts to PCRTIME */
res = gst_util_uint64_scale (GSTTIME_TO_PCRTIME (ts),
- priv->last_offset - priv->first_offset, priv->last_pcr - priv->first_pcr);
- res += priv->first_offset + priv->refoffset;
+ pcrtable->last_offset - pcrtable->first_offset,
+ pcrtable->last_pcr - pcrtable->first_pcr);
+ res += pcrtable->first_offset + priv->refoffset;
GST_DEBUG ("Returning offset %" G_GUINT64_FORMAT " for ts %" GST_TIME_FORMAT,
res, GST_TIME_ARGS (ts));
diff --git a/gst/mpegtsdemux/mpegtspacketizer.h b/gst/mpegtsdemux/mpegtspacketizer.h
index 5d80d360..b82d69cf 100644
--- a/gst/mpegtsdemux/mpegtspacketizer.h
+++ b/gst/mpegtsdemux/mpegtspacketizer.h
@@ -100,23 +100,6 @@ struct _MpegTSPacketizer2 {
/* clock skew calculation */
gboolean calculate_skew;
- /* Following variables are only active/used when
- * calculate_skew is TRUE */
- /* FIXME : These variables should be *per* PCR PID */
- GstClockTime base_time;
- GstClockTime base_pcrtime;
- GstClockTime prev_out_time;
- GstClockTime prev_in_time;
- GstClockTime last_pcrtime;
- gint64 window[MAX_WINDOW];
- guint window_pos;
- guint window_size;
- gboolean window_filling;
- gint64 window_min;
- gint64 skew;
- gint64 prev_send_diff;
- gint wrap_count;
-
/* offset/bitrate calculator */
gboolean calculate_offset;
@@ -180,54 +163,54 @@ typedef enum {
PACKET_NEED_MORE
} MpegTSPacketizerPacketReturn;
-GType mpegts_packetizer_get_type(void);
+G_GNUC_INTERNAL GType mpegts_packetizer_get_type(void);
-MpegTSPacketizer2 *mpegts_packetizer_new (void);
-void mpegts_packetizer_clear (MpegTSPacketizer2 *packetizer);
-void mpegts_packetizer_flush (MpegTSPacketizer2 *packetizer);
-void mpegts_packetizer_push (MpegTSPacketizer2 *packetizer, GstBuffer *buffer);
-gboolean mpegts_packetizer_has_packets (MpegTSPacketizer2 *packetizer);
-MpegTSPacketizerPacketReturn mpegts_packetizer_next_packet (MpegTSPacketizer2 *packetizer,
+G_GNUC_INTERNAL MpegTSPacketizer2 *mpegts_packetizer_new (void);
+G_GNUC_INTERNAL void mpegts_packetizer_clear (MpegTSPacketizer2 *packetizer);
+G_GNUC_INTERNAL void mpegts_packetizer_flush (MpegTSPacketizer2 *packetizer);
+G_GNUC_INTERNAL void mpegts_packetizer_push (MpegTSPacketizer2 *packetizer, GstBuffer *buffer);
+G_GNUC_INTERNAL gboolean mpegts_packetizer_has_packets (MpegTSPacketizer2 *packetizer);
+G_GNUC_INTERNAL MpegTSPacketizerPacketReturn mpegts_packetizer_next_packet (MpegTSPacketizer2 *packetizer,
MpegTSPacketizerPacket *packet);
-MpegTSPacketizerPacketReturn
+G_GNUC_INTERNAL MpegTSPacketizerPacketReturn
mpegts_packetizer_process_next_packet(MpegTSPacketizer2 * packetizer);
-void mpegts_packetizer_clear_packet (MpegTSPacketizer2 *packetizer,
+G_GNUC_INTERNAL void mpegts_packetizer_clear_packet (MpegTSPacketizer2 *packetizer,
MpegTSPacketizerPacket *packet);
-void mpegts_packetizer_remove_stream(MpegTSPacketizer2 *packetizer,
+G_GNUC_INTERNAL void mpegts_packetizer_remove_stream(MpegTSPacketizer2 *packetizer,
gint16 pid);
-gboolean mpegts_packetizer_push_section (MpegTSPacketizer2 *packetzer,
+G_GNUC_INTERNAL gboolean mpegts_packetizer_push_section (MpegTSPacketizer2 *packetzer,
MpegTSPacketizerPacket *packet, MpegTSPacketizerSection *section);
-GstStructure *mpegts_packetizer_parse_cat (MpegTSPacketizer2 *packetizer,
+G_GNUC_INTERNAL GstStructure *mpegts_packetizer_parse_cat (MpegTSPacketizer2 *packetizer,
MpegTSPacketizerSection *section);
-GstStructure *mpegts_packetizer_parse_pat (MpegTSPacketizer2 *packetizer,
+G_GNUC_INTERNAL GstStructure *mpegts_packetizer_parse_pat (MpegTSPacketizer2 *packetizer,
MpegTSPacketizerSection *section);
-GstStructure *mpegts_packetizer_parse_pmt (MpegTSPacketizer2 *packetizer,
+G_GNUC_INTERNAL GstStructure *mpegts_packetizer_parse_pmt (MpegTSPacketizer2 *packetizer,
MpegTSPacketizerSection *section);
-GstStructure *mpegts_packetizer_parse_nit (MpegTSPacketizer2 *packetizer,
+G_GNUC_INTERNAL GstStructure *mpegts_packetizer_parse_nit (MpegTSPacketizer2 *packetizer,
MpegTSPacketizerSection *section);
-GstStructure *mpegts_packetizer_parse_sdt (MpegTSPacketizer2 *packetizer,
+G_GNUC_INTERNAL GstStructure *mpegts_packetizer_parse_sdt (MpegTSPacketizer2 *packetizer,
MpegTSPacketizerSection *section);
-GstStructure *mpegts_packetizer_parse_eit (MpegTSPacketizer2 *packetizer,
+G_GNUC_INTERNAL GstStructure *mpegts_packetizer_parse_eit (MpegTSPacketizer2 *packetizer,
MpegTSPacketizerSection *section);
-GstStructure *mpegts_packetizer_parse_tdt (MpegTSPacketizer2 *packetizer,
+G_GNUC_INTERNAL GstStructure *mpegts_packetizer_parse_tdt (MpegTSPacketizer2 *packetizer,
MpegTSPacketizerSection *section);
-GstStructure *mpegts_packetizer_parse_tot (MpegTSPacketizer2 *packetizer,
+G_GNUC_INTERNAL GstStructure *mpegts_packetizer_parse_tot (MpegTSPacketizer2 *packetizer,
MpegTSPacketizerSection *section);
/* Only valid if calculate_offset is TRUE */
-guint mpegts_packetizer_get_seen_pcr (MpegTSPacketizer2 *packetizer);
+G_GNUC_INTERNAL guint mpegts_packetizer_get_seen_pcr (MpegTSPacketizer2 *packetizer);
-GstClockTime
+G_GNUC_INTERNAL GstClockTime
mpegts_packetizer_offset_to_ts (MpegTSPacketizer2 * packetizer,
- guint64 offset);
-guint64
+ guint64 offset, guint16 pcr_pid);
+G_GNUC_INTERNAL guint64
mpegts_packetizer_ts_to_offset (MpegTSPacketizer2 * packetizer,
- GstClockTime ts);
-GstClockTime
+ GstClockTime ts, guint16 pcr_pid);
+G_GNUC_INTERNAL GstClockTime
mpegts_packetizer_pts_to_ts (MpegTSPacketizer2 * packetizer,
- GstClockTime pts);
-void
+ GstClockTime pts, guint16 pcr_pid);
+G_GNUC_INTERNAL void
mpegts_packetizer_set_reference_offset (MpegTSPacketizer2 * packetizer,
guint64 refoffset);
G_END_DECLS
diff --git a/gst/mpegtsdemux/mpegtsparse.c b/gst/mpegtsdemux/mpegtsparse.c
index 33391154..701de53f 100644
--- a/gst/mpegtsdemux/mpegtsparse.c
+++ b/gst/mpegtsdemux/mpegtsparse.c
@@ -109,6 +109,8 @@ static gboolean push_event (MpegTSBase * base, GstEvent * event);
#define mpegts_parse_parent_class parent_class
G_DEFINE_TYPE (MpegTSParse2, mpegts_parse, GST_TYPE_MPEGTS_BASE);
static void mpegts_parse_reset (MpegTSBase * base);
+static GstFlowReturn mpegts_parse_input_done (MpegTSBase * base,
+ GstBuffer * buffer);
static void
mpegts_parse_class_init (MpegTSParse2Class * klass)
@@ -138,6 +140,7 @@ mpegts_parse_class_init (MpegTSParse2Class * klass)
ts_class->program_started = GST_DEBUG_FUNCPTR (mpegts_parse_program_started);
ts_class->program_stopped = GST_DEBUG_FUNCPTR (mpegts_parse_program_stopped);
ts_class->reset = GST_DEBUG_FUNCPTR (mpegts_parse_reset);
+ ts_class->input_done = GST_DEBUG_FUNCPTR (mpegts_parse_input_done);
}
static void
@@ -463,6 +466,14 @@ mpegts_parse_push (MpegTSBase * base, MpegTSPacketizerPacket * packet,
return ret;
}
+static GstFlowReturn
+mpegts_parse_input_done (MpegTSBase * base, GstBuffer * buffer)
+{
+ MpegTSParse2 *parse = GST_MPEGTS_PARSE (base);
+
+ return gst_pad_push (parse->srcpad, buffer);
+}
+
static MpegTSParsePad *
find_pad_for_program (MpegTSParse2 * parse, guint program_number)
{
diff --git a/gst/mpegtsdemux/mpegtsparse.h b/gst/mpegtsdemux/mpegtsparse.h
index c7d1c5e4..ade1b007 100644
--- a/gst/mpegtsdemux/mpegtsparse.h
+++ b/gst/mpegtsdemux/mpegtsparse.h
@@ -58,9 +58,9 @@ struct _MpegTSParse2Class {
MpegTSBaseClass parent_class;
};
-GType mpegts_parse_get_type(void);
+G_GNUC_INTERNAL GType mpegts_parse_get_type(void);
-gboolean gst_mpegtsparse_plugin_init (GstPlugin * plugin);
+G_GNUC_INTERNAL gboolean gst_mpegtsparse_plugin_init (GstPlugin * plugin);
G_END_DECLS
diff --git a/gst/mpegtsdemux/pesparse.h b/gst/mpegtsdemux/pesparse.h
index c5d295e3..d15e835e 100644
--- a/gst/mpegtsdemux/pesparse.h
+++ b/gst/mpegtsdemux/pesparse.h
@@ -105,8 +105,9 @@ typedef struct {
const guint8* stream_id_extension_data;
} PESHeader;
-PESParsingResult mpegts_parse_pes_header (const guint8* data, gsize size,
+G_GNUC_INTERNAL PESParsingResult mpegts_parse_pes_header (const guint8* data, gsize size,
PESHeader *res, gint *offset);
-void init_pes_parser (void);
+G_GNUC_INTERNAL void init_pes_parser (void);
+
G_END_DECLS
#endif /* __PES_PARSE_H__ */
diff --git a/gst/mpegtsdemux/tsdemux.c b/gst/mpegtsdemux/tsdemux.c
index c420f0db..17c1ef0f 100644
--- a/gst/mpegtsdemux/tsdemux.c
+++ b/gst/mpegtsdemux/tsdemux.c
@@ -187,7 +187,7 @@ struct _TSDemuxStream
/* Can also use the subpicture pads for text subtitles? */
#define SUBPICTURE_CAPS \
- GST_STATIC_CAPS ("subpicture/x-pgs; video/x-dvd-subpicture")
+ GST_STATIC_CAPS ("subpicture/x-pgs; subpicture/x-dvd")
static GstStaticPadTemplate video_template =
GST_STATIC_PAD_TEMPLATE ("video_%04x", GST_PAD_SRC,
@@ -405,7 +405,8 @@ gst_ts_demux_srcpad_query (GstPad * pad, GstObject * parent, GstQuery * query)
res = FALSE;
else {
GstClockTime dur =
- mpegts_packetizer_offset_to_ts (base->packetizer, val);
+ mpegts_packetizer_offset_to_ts (base->packetizer, val,
+ demux->program->pcr_pid);
if (GST_CLOCK_TIME_IS_VALID (dur))
gst_query_set_duration (query, GST_FORMAT_TIME, dur);
else
@@ -523,7 +524,7 @@ gst_ts_demux_do_seek (MpegTSBase * base, GstEvent * event)
/* Convert start/stop to offset */
start_offset =
mpegts_packetizer_ts_to_offset (base->packetizer, MAX (0,
- start - SEEK_TIMESTAMP_OFFSET));
+ start - SEEK_TIMESTAMP_OFFSET), demux->program->pcr_pid);
if (G_UNLIKELY (start_offset == -1)) {
GST_WARNING ("Couldn't convert start position to an offset");
@@ -946,7 +947,7 @@ create_pad_for_stream (MpegTSBase * base, MpegTSBaseStream * bstream,
case ST_PS_DVD_SUBPICTURE:
template = gst_static_pad_template_get (&subpicture_template);
name = g_strdup_printf ("subpicture_%04x", bstream->pid);
- caps = gst_caps_new_empty_simple ("video/x-dvd-subpicture");
+ caps = gst_caps_new_empty_simple ("subpicture/x-dvd");
break;
case ST_BD_PGS_SUBPICTURE:
template = gst_static_pad_template_get (&subpicture_template);
@@ -1131,53 +1132,6 @@ gst_ts_demux_program_started (MpegTSBase * base, MpegTSBaseProgram * program)
-static inline void
-gst_ts_demux_record_pcr (GstTSDemux * demux, TSDemuxStream * stream,
- guint64 pcr, guint64 offset)
-{
- MpegTSBaseStream *bs = (MpegTSBaseStream *) stream;
-
- GST_LOG ("pid 0x%04x pcr:%" GST_TIME_FORMAT " at offset %"
- G_GUINT64_FORMAT, bs->pid,
- GST_TIME_ARGS (PCRTIME_TO_GSTTIME (pcr)), offset);
-
- /* FIXME : packetizer should record this */
-
- if (G_UNLIKELY (demux->emit_statistics)) {
- GstStructure *st;
- st = gst_structure_new_id_empty (QUARK_TSDEMUX);
- gst_structure_id_set (st,
- QUARK_PID, G_TYPE_UINT, bs->pid,
- QUARK_OFFSET, G_TYPE_UINT64, offset, QUARK_PCR, G_TYPE_UINT64, pcr,
- NULL);
- gst_element_post_message (GST_ELEMENT_CAST (demux),
- gst_message_new_element (GST_OBJECT (demux), st));
- }
-}
-
-static inline void
-gst_ts_demux_record_opcr (GstTSDemux * demux, TSDemuxStream * stream,
- guint64 opcr, guint64 offset)
-{
- MpegTSBaseStream *bs = (MpegTSBaseStream *) stream;
-
- GST_LOG ("pid 0x%04x opcr:%" GST_TIME_FORMAT " at offset %"
- G_GUINT64_FORMAT, bs->pid,
- GST_TIME_ARGS (PCRTIME_TO_GSTTIME (opcr)), offset);
-
- /* FIXME : packetizer should record this */
-
- if (G_UNLIKELY (demux->emit_statistics)) {
- GstStructure *st;
- st = gst_structure_new_id_empty (QUARK_TSDEMUX);
- gst_structure_id_set (st,
- QUARK_PID, G_TYPE_UINT, bs->pid,
- QUARK_OFFSET, G_TYPE_UINT64, offset,
- QUARK_OPCR, G_TYPE_UINT64, opcr, NULL);
- gst_element_post_message (GST_ELEMENT_CAST (demux),
- gst_message_new_element (GST_OBJECT (demux), st));
- }
-}
static inline void
gst_ts_demux_record_pts (GstTSDemux * demux, TSDemuxStream * stream,
@@ -1185,6 +1139,11 @@ gst_ts_demux_record_pts (GstTSDemux * demux, TSDemuxStream * stream,
{
MpegTSBaseStream *bs = (MpegTSBaseStream *) stream;
+ if (pts == -1) {
+ stream->pts = GST_CLOCK_TIME_NONE;
+ return;
+ }
+
GST_LOG ("pid 0x%04x pts:%" G_GUINT64_FORMAT " at offset %"
G_GUINT64_FORMAT, bs->pid, pts, offset);
@@ -1231,6 +1190,11 @@ gst_ts_demux_record_dts (GstTSDemux * demux, TSDemuxStream * stream,
{
MpegTSBaseStream *bs = (MpegTSBaseStream *) stream;
+ if (dts == -1) {
+ stream->dts = GST_CLOCK_TIME_NONE;
+ return;
+ }
+
GST_LOG ("pid 0x%04x dts:%" G_GUINT64_FORMAT " at offset %"
G_GUINT64_FORMAT, bs->pid, dts, offset);
@@ -1290,18 +1254,12 @@ gst_ts_demux_parse_pes_header (GstTSDemux * demux, TSDemuxStream * stream,
goto discont;
}
- if (header.DTS != -1)
- gst_ts_demux_record_dts (demux, stream, header.DTS, bufferoffset);
+ gst_ts_demux_record_dts (demux, stream, header.DTS, bufferoffset);
+ gst_ts_demux_record_pts (demux, stream, header.PTS, bufferoffset);
- if (header.PTS != -1) {
- gst_ts_demux_record_pts (demux, stream, header.PTS, bufferoffset);
-
- GST_DEBUG_OBJECT (base,
- "stream PTS %" GST_TIME_FORMAT " DTS %" GST_TIME_FORMAT,
- GST_TIME_ARGS (stream->pts),
- GST_TIME_ARGS (MPEGTIME_TO_GSTTIME (header.DTS)));
-
- }
+ GST_DEBUG_OBJECT (base,
+ "stream PTS %" GST_TIME_FORMAT " DTS %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (stream->pts), GST_TIME_ARGS (stream->dts));
/* Remove PES headers */
GST_DEBUG ("Moving data forward by %d bytes (packet_size:%d, have:%d)",
@@ -1434,7 +1392,9 @@ calculate_and_push_newsegment (GstTSDemux * demux, TSDemuxStream * stream)
}
}
if (GST_CLOCK_TIME_IS_VALID (lowest_pts))
- firstts = mpegts_packetizer_pts_to_ts (base->packetizer, lowest_pts);
+ firstts =
+ mpegts_packetizer_pts_to_ts (base->packetizer, lowest_pts,
+ demux->program->pcr_pid);
GST_DEBUG ("lowest_pts %" G_GUINT64_FORMAT " => clocktime %" GST_TIME_FORMAT,
lowest_pts, GST_TIME_ARGS (firstts));
@@ -1536,14 +1496,17 @@ gst_ts_demux_push_pending_data (GstTSDemux * demux, TSDemuxStream * stream)
GST_TIME_ARGS (stream->pts));
if (GST_CLOCK_TIME_IS_VALID (stream->pts))
GST_BUFFER_PTS (buffer) =
- mpegts_packetizer_pts_to_ts (packetizer, stream->pts);
+ mpegts_packetizer_pts_to_ts (packetizer, stream->pts,
+ demux->program->pcr_pid);
if (GST_CLOCK_TIME_IS_VALID (stream->dts))
GST_BUFFER_DTS (buffer) =
- mpegts_packetizer_pts_to_ts (packetizer, stream->dts);
+ mpegts_packetizer_pts_to_ts (packetizer, stream->dts,
+ demux->program->pcr_pid);
GST_DEBUG_OBJECT (stream->pad,
- "Pushing buffer with timestamp: %" GST_TIME_FORMAT,
- GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)));
+ "Pushing buffer with PTS: %" GST_TIME_FORMAT " , DTS: %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (GST_BUFFER_PTS (buffer)),
+ GST_TIME_ARGS (GST_BUFFER_DTS (buffer)));
res = gst_pad_push (stream->pad, buffer);
GST_DEBUG_OBJECT (stream->pad, "Returned %s", gst_flow_get_name (res));
@@ -1583,13 +1546,6 @@ gst_ts_demux_handle_packet (GstTSDemux * demux, TSDemuxStream * stream,
/* Flush previous data */
res = gst_ts_demux_push_pending_data (demux, stream);
- if (packet->adaptation_field_control & 0x2) {
- if (packet->afc_flags & MPEGTS_AFC_PCR_FLAG)
- gst_ts_demux_record_pcr (demux, stream, packet->pcr, packet->offset);
- if (packet->afc_flags & MPEGTS_AFC_OPCR_FLAG)
- gst_ts_demux_record_opcr (demux, stream, packet->opcr, packet->offset);
- }
-
if (packet->payload && (res == GST_FLOW_OK || res == GST_FLOW_NOT_LINKED)
&& stream->pad) {
gst_ts_demux_queue_data (demux, stream, packet);
diff --git a/gst/mpegtsdemux/tsdemux.h b/gst/mpegtsdemux/tsdemux.h
index d23e9d2e..df19df83 100644
--- a/gst/mpegtsdemux/tsdemux.h
+++ b/gst/mpegtsdemux/tsdemux.h
@@ -80,9 +80,9 @@ struct _GstTSDemuxClass
MpegTSBaseClass parent_class;
};
-GType gst_ts_demux_get_type (void);
+G_GNUC_INTERNAL GType gst_ts_demux_get_type (void);
-gboolean gst_ts_demux_plugin_init (GstPlugin * plugin);
+G_GNUC_INTERNAL gboolean gst_ts_demux_plugin_init (GstPlugin * plugin);
G_END_DECLS
#endif /* GST_TS_DEMUX_H */
diff --git a/gst/mpegtsmux/Makefile.in b/gst/mpegtsmux/Makefile.in
index fa7914b7..c1244686 100644
--- a/gst/mpegtsmux/Makefile.in
+++ b/gst/mpegtsmux/Makefile.in
@@ -383,6 +383,8 @@ 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@
@@ -390,6 +392,8 @@ 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@
@@ -404,7 +408,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -432,6 +435,10 @@ 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@
@@ -558,6 +565,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/mpegtsmux/mpegtsmux.c b/gst/mpegtsmux/mpegtsmux.c
index 957e2975..3b897b2f 100644
--- a/gst/mpegtsmux/mpegtsmux.c
+++ b/gst/mpegtsmux/mpegtsmux.c
@@ -1218,7 +1218,7 @@ mpegtsmux_request_new_pad (GstElement * element, GstPadTemplate * templ,
g_free (pad_name);
pad_data = (MpegTsPadData *)
- gst_collect_pads_add_pad_full (mux->collect, pad, sizeof (MpegTsPadData),
+ gst_collect_pads_add_pad (mux->collect, pad, sizeof (MpegTsPadData),
(GstCollectDataDestroyNotify) (mpegtsmux_pad_reset), TRUE);
if (pad_data == NULL)
goto pad_failure;
diff --git a/gst/mpegtsmux/tsmux/Makefile.in b/gst/mpegtsmux/tsmux/Makefile.in
index 4b8e74a5..37672f9b 100644
--- a/gst/mpegtsmux/tsmux/Makefile.in
+++ b/gst/mpegtsmux/tsmux/Makefile.in
@@ -312,6 +312,8 @@ 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@
@@ -319,6 +321,8 @@ 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@
@@ -333,7 +337,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -361,6 +364,10 @@ 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@
@@ -487,6 +494,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/mve/Makefile.in b/gst/mve/Makefile.in
index dc8127af..8f3e0b69 100644
--- a/gst/mve/Makefile.in
+++ b/gst/mve/Makefile.in
@@ -345,6 +345,8 @@ 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@
@@ -352,6 +354,8 @@ 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@
@@ -366,7 +370,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -394,6 +397,10 @@ 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@
@@ -520,6 +527,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/mxf/Makefile.in b/gst/mxf/Makefile.in
index b7143332..fa553c1e 100644
--- a/gst/mxf/Makefile.in
+++ b/gst/mxf/Makefile.in
@@ -349,6 +349,8 @@ 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@
@@ -356,6 +358,8 @@ 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@
@@ -370,7 +374,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -398,6 +401,10 @@ 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@
@@ -524,6 +531,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/mxf/mxfmux.c b/gst/mxf/mxfmux.c
index 7d215676..260c8850 100644
--- a/gst/mxf/mxfmux.c
+++ b/gst/mxf/mxfmux.c
@@ -338,13 +338,13 @@ gst_mxf_mux_setcaps (GstPad * pad, GstCaps * caps)
for (i = 0; i < mux->preface->content_storage->n_packages; i++) {
MXFMetadataSourcePackage *package;
- if (!MXF_IS_METADATA_SOURCE_PACKAGE (mux->preface->
- content_storage->packages[i]))
+ if (!MXF_IS_METADATA_SOURCE_PACKAGE (mux->preface->content_storage->
+ packages[i]))
continue;
package =
- MXF_METADATA_SOURCE_PACKAGE (mux->preface->
- content_storage->packages[i]);
+ MXF_METADATA_SOURCE_PACKAGE (mux->preface->content_storage->
+ packages[i]);
if (!package->descriptor)
continue;
@@ -420,7 +420,8 @@ gst_mxf_mux_request_new_pad (GstElement * element,
pad = gst_pad_new_from_template (templ, name);
g_free (name);
cpad = (GstMXFMuxPad *)
- gst_collect_pads_add_pad (mux->collect, pad, sizeof (GstMXFMuxPad));
+ gst_collect_pads_add_pad (mux->collect, pad, sizeof (GstMXFMuxPad), NULL,
+ TRUE);
cpad->last_timestamp = 0;
cpad->adapter = gst_adapter_new ();
cpad->writer = writer;
@@ -706,8 +707,8 @@ gst_mxf_mux_create_metadata (GstMXFMux * mux)
if (p->parent.n_tracks == 1) {
p->descriptor = (MXFMetadataGenericDescriptor *) cpad->descriptor;
} else {
- MXF_METADATA_MULTIPLE_DESCRIPTOR (p->
- descriptor)->sub_descriptors[n] =
+ MXF_METADATA_MULTIPLE_DESCRIPTOR (p->descriptor)->
+ sub_descriptors[n] =
(MXFMetadataGenericDescriptor *) cpad->descriptor;
}
@@ -929,8 +930,8 @@ gst_mxf_mux_create_metadata (GstMXFMux * mux)
g_new0 (MXFMetadataEssenceContainerData *, 1);
cstorage->essence_container_data[0] = (MXFMetadataEssenceContainerData *)
g_object_new (MXF_TYPE_METADATA_ESSENCE_CONTAINER_DATA, NULL);
- mxf_uuid_init (&MXF_METADATA_BASE (cstorage->essence_container_data[0])->
- instance_uid, mux->metadata);
+ mxf_uuid_init (&MXF_METADATA_BASE (cstorage->
+ essence_container_data[0])->instance_uid, mux->metadata);
g_hash_table_insert (mux->metadata,
&MXF_METADATA_BASE (cstorage->essence_container_data[0])->instance_uid,
cstorage->essence_container_data[0]);
@@ -1246,23 +1247,22 @@ gst_mxf_mux_handle_eos (GstMXFMux * mux)
/* Update durations */
cpad->source_track->parent.sequence->duration = cpad->pos;
- MXF_METADATA_SOURCE_CLIP (cpad->source_track->parent.
- sequence->structural_components[0])->parent.duration = cpad->pos;
+ MXF_METADATA_SOURCE_CLIP (cpad->source_track->parent.sequence->
+ structural_components[0])->parent.duration = cpad->pos;
for (i = 0; i < mux->preface->content_storage->packages[0]->n_tracks; i++) {
MXFMetadataTimelineTrack *track;
- if (!MXF_IS_METADATA_TIMELINE_TRACK (mux->preface->
- content_storage->packages[0]->tracks[i])
- || !MXF_IS_METADATA_SOURCE_CLIP (mux->preface->
- content_storage->packages[0]->tracks[i]->sequence->
- structural_components[0]))
+ if (!MXF_IS_METADATA_TIMELINE_TRACK (mux->preface->content_storage->
+ packages[0]->tracks[i])
+ || !MXF_IS_METADATA_SOURCE_CLIP (mux->preface->content_storage->
+ packages[0]->tracks[i]->sequence->structural_components[0]))
continue;
track =
- MXF_METADATA_TIMELINE_TRACK (mux->preface->
- content_storage->packages[0]->tracks[i]);
- if (MXF_METADATA_SOURCE_CLIP (track->parent.
- sequence->structural_components[0])->source_track_id ==
+ MXF_METADATA_TIMELINE_TRACK (mux->preface->content_storage->
+ packages[0]->tracks[i]);
+ if (MXF_METADATA_SOURCE_CLIP (track->parent.sequence->
+ structural_components[0])->source_track_id ==
cpad->source_track->parent.track_id) {
track->parent.sequence->structural_components[0]->duration = cpad->pos;
track->parent.sequence->duration = cpad->pos;
@@ -1273,8 +1273,8 @@ gst_mxf_mux_handle_eos (GstMXFMux * mux)
/* Update timecode track duration */
{
MXFMetadataTimelineTrack *track =
- MXF_METADATA_TIMELINE_TRACK (mux->preface->
- content_storage->packages[0]->tracks[0]);
+ MXF_METADATA_TIMELINE_TRACK (mux->preface->content_storage->
+ packages[0]->tracks[0]);
MXFMetadataSequence *sequence = track->parent.sequence;
MXFMetadataTimecodeComponent *component =
MXF_METADATA_TIMECODE_COMPONENT (sequence->structural_components[0]);
diff --git a/gst/nsf/Makefile.in b/gst/nsf/Makefile.in
index 6eb78ca3..88c3c05a 100644
--- a/gst/nsf/Makefile.in
+++ b/gst/nsf/Makefile.in
@@ -346,6 +346,8 @@ 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@
@@ -353,6 +355,8 @@ 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@
@@ -367,7 +371,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -395,6 +398,10 @@ 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@
@@ -521,6 +528,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/nuvdemux/Makefile.in b/gst/nuvdemux/Makefile.in
index 92a27644..16cc8ee3 100644
--- a/gst/nuvdemux/Makefile.in
+++ b/gst/nuvdemux/Makefile.in
@@ -340,6 +340,8 @@ 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@
@@ -347,6 +349,8 @@ 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@
@@ -361,7 +365,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -389,6 +392,10 @@ 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@
@@ -515,6 +522,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/patchdetect/Makefile.in b/gst/patchdetect/Makefile.in
index 453fe712..edc45308 100644
--- a/gst/patchdetect/Makefile.in
+++ b/gst/patchdetect/Makefile.in
@@ -343,6 +343,8 @@ 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@
@@ -350,6 +352,8 @@ 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@
@@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -392,6 +395,10 @@ 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@
@@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/pcapparse/Makefile.in b/gst/pcapparse/Makefile.in
index d092c5c1..2a286bb9 100644
--- a/gst/pcapparse/Makefile.in
+++ b/gst/pcapparse/Makefile.in
@@ -343,6 +343,8 @@ 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@
@@ -350,6 +352,8 @@ 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@
@@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -392,6 +395,10 @@ 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@
@@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/pnm/Makefile.in b/gst/pnm/Makefile.in
index 7f136363..0eff310d 100644
--- a/gst/pnm/Makefile.in
+++ b/gst/pnm/Makefile.in
@@ -343,6 +343,8 @@ 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@
@@ -350,6 +352,8 @@ 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@
@@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -392,6 +395,10 @@ 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@
@@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/pnm/gstpnmdec.c b/gst/pnm/gstpnmdec.c
index 394e86d1..56dcb8e3 100644
--- a/gst/pnm/gstpnmdec.c
+++ b/gst/pnm/gstpnmdec.c
@@ -30,6 +30,10 @@
* </refsect2>
*/
+/*
+ * FIXME: Port to GstVideoDecoder
+ */
+
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
@@ -44,16 +48,14 @@
static GstStaticPadTemplate gst_pnmdec_src_pad_template =
GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_VIDEO_CAPS_RGB "; "
- "video/x-raw-gray, width =" GST_VIDEO_SIZE_RANGE ", "
- "height =" GST_VIDEO_SIZE_RANGE ", framerate =" GST_VIDEO_FPS_RANGE ", "
- "bpp= (int) 8, depth= (int) 8"));
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("RGB") "; "
+ GST_VIDEO_CAPS_MAKE ("GRAY8")));
static GstStaticPadTemplate gst_pnmdec_sink_pad_template =
GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS,
GST_STATIC_CAPS (MIME_ALL));
-GST_BOILERPLATE (GstPnmdec, gst_pnmdec, GstElement, GST_TYPE_ELEMENT);
+G_DEFINE_TYPE (GstPnmdec, gst_pnmdec, GST_TYPE_ELEMENT);
static GstFlowReturn
gst_pnmdec_push (GstPnmdec * s, GstPad * src, GstBuffer * buf)
@@ -64,6 +66,7 @@ gst_pnmdec_push (GstPnmdec * s, GstPad * src, GstBuffer * buf)
guint o_rowstride;
GstBuffer *obuf;
guint i;
+ GstMapInfo imap, omap;
if (s->mngr.info.type == GST_PNM_TYPE_PIXMAP) {
i_rowstride = 3 * s->mngr.info.width;
@@ -75,12 +78,15 @@ gst_pnmdec_push (GstPnmdec * s, GstPad * src, GstBuffer * buf)
obuf = gst_buffer_new_and_alloc (o_rowstride * s->mngr.info.height);
- gst_buffer_copy_metadata (obuf, buf, GST_BUFFER_COPY_ALL);
+ gst_buffer_copy_into (obuf, buf, GST_BUFFER_COPY_METADATA, 0, 0);
+ gst_buffer_map (obuf, &omap, GST_MAP_WRITE);
+ gst_buffer_map (buf, &imap, GST_MAP_READ);
for (i = 0; i < s->mngr.info.height; i++)
- memcpy (GST_BUFFER_DATA (obuf) + i * o_rowstride,
- GST_BUFFER_DATA (buf) + i * i_rowstride, i_rowstride);
-
+ memcpy (omap.data + i * o_rowstride, imap.data + i * i_rowstride,
+ i_rowstride);
+ gst_buffer_unmap (buf, &imap);
+ gst_buffer_unmap (obuf, &omap);
gst_buffer_unref (buf);
return gst_pad_push (src, obuf);
} else {
@@ -95,10 +101,9 @@ gst_pnmdec_chain_raw (GstPnmdec * s, GstPad * src, GstBuffer * buf)
GstBuffer *out;
/* If we got the whole image, just push the buffer. */
- if (GST_BUFFER_SIZE (buf) == s->size) {
+ if (gst_buffer_get_size (buf) == s->size) {
memset (&s->mngr, 0, sizeof (GstPnmInfoMngr));
s->size = 0;
- gst_buffer_set_caps (buf, GST_PAD_CAPS (src));
return gst_pnmdec_push (s, src, buf);
}
@@ -106,18 +111,14 @@ gst_pnmdec_chain_raw (GstPnmdec * s, GstPad * src, GstBuffer * buf)
if (!s->buf) {
s->buf = buf;
} else {
- out = gst_buffer_span (s->buf, 0, buf,
- GST_BUFFER_SIZE (s->buf) + GST_BUFFER_SIZE (buf));
- gst_buffer_unref (buf);
- gst_buffer_unref (s->buf);
+ out = gst_buffer_append (s->buf, buf);
s->buf = out;
}
if (!s->buf)
return GST_FLOW_ERROR;
/* Do we now have the full image? If yes, push. */
- if (GST_BUFFER_SIZE (s->buf) == s->size) {
- gst_buffer_set_caps (s->buf, GST_PAD_CAPS (src));
+ if (gst_buffer_get_size (s->buf) == s->size) {
r = gst_pnmdec_push (s, src, s->buf);
s->buf = NULL;
memset (&s->mngr, 0, sizeof (GstPnmInfoMngr));
@@ -133,35 +134,40 @@ gst_pnmdec_chain_ascii (GstPnmdec * s, GstPad * src, GstBuffer * buf)
GScanner *scanner;
GstBuffer *out;
guint i = 0;
- gchar *b = (gchar *) GST_BUFFER_DATA (buf);
- guint bs = GST_BUFFER_SIZE (buf);
- guint target = s->size - (s->buf ? GST_BUFFER_SIZE (s->buf) : 0);
+ gchar *b;
+ guint bs;
+ guint target;
+ GstMapInfo map;
+ GstMapInfo outmap;
- if (!bs) {
- gst_buffer_unref (buf);
- return GST_FLOW_OK;
- }
+ gst_buffer_map (buf, &map, GST_MAP_READ);
+ b = (gchar *) map.data;
+ bs = map.size;
+ target = s->size - (s->buf ? map.size : 0);
+
+ if (!bs)
+ goto drop_ok;
if (s->last_byte) {
while (*b >= '0' && *b <= '9') {
s->last_byte = 10 * s->last_byte + *b - '0';
b++;
if (!--bs) {
- gst_buffer_unref (buf);
- return GST_FLOW_OK;
+ goto drop_error;
}
}
if (s->last_byte > 255) {
- gst_buffer_unref (buf);
GST_DEBUG_OBJECT (s, "Corrupt ASCII encoded PNM file.");
- return GST_FLOW_ERROR;
+ goto drop_error;
}
}
out = gst_buffer_new_and_alloc (target);
+ gst_buffer_map (out, &outmap, GST_MAP_READWRITE);
+
if (s->last_byte) {
- GST_BUFFER_DATA (out)[i++] = s->last_byte;
+ outmap.data[i++] = s->last_byte;
s->last_byte = 0;
}
@@ -172,11 +178,11 @@ gst_pnmdec_chain_ascii (GstPnmdec * s, GstPad * src, GstBuffer * buf)
case G_TOKEN_INT:
if (i == target) {
GST_DEBUG_OBJECT (s, "PNM file contains too much data.");
- gst_buffer_unref (buf);
+ gst_buffer_unmap (out, &outmap);
gst_buffer_unref (out);
- return GST_FLOW_ERROR;
+ goto drop_error;
}
- GST_BUFFER_DATA (out)[i++] = scanner->value.v_int;
+ outmap.data[i++] = scanner->value.v_int;
break;
default:
/* Should we care? */ ;
@@ -186,30 +192,47 @@ gst_pnmdec_chain_ascii (GstPnmdec * s, GstPad * src, GstBuffer * buf)
/* If we didn't get the whole image, handle the last byte with care. */
if (i && i < target && b[bs - 1] > '0' && b[bs - 1] <= '9')
- s->last_byte = GST_BUFFER_DATA (out)[--i];
+ s->last_byte = outmap.data[--i];
+ gst_buffer_unmap (buf, &map);
gst_buffer_unref (buf);
if (!i) {
gst_buffer_unref (out);
return GST_FLOW_OK;
}
- GST_BUFFER_SIZE (out) = i;
+ gst_buffer_set_size (out, i);
return gst_pnmdec_chain_raw (s, src, out);
+
+drop_ok:
+ gst_buffer_unmap (buf, &map);
+ gst_buffer_unref (buf);
+ return GST_FLOW_OK;
+
+drop_error:
+ gst_buffer_unmap (buf, &map);
+ gst_buffer_unref (buf);
+ return GST_FLOW_ERROR;
}
static GstFlowReturn
-gst_pnmdec_chain (GstPad * pad, GstBuffer * data)
+gst_pnmdec_chain (GstPad * pad, GstObject * parent, GstBuffer * data)
{
- GstPnmdec *s = GST_PNMDEC (gst_pad_get_parent (pad));
+ GstPnmdec *s = GST_PNMDEC (parent);
GstPad *src = gst_element_get_static_pad (GST_ELEMENT (s), "src");
GstCaps *caps = NULL;
GstFlowReturn r = GST_FLOW_OK;
guint offset = 0;
if (s->mngr.info.fields != GST_PNM_INFO_FIELDS_ALL) {
- switch (gst_pnm_info_mngr_scan (&s->mngr, GST_BUFFER_DATA (data),
- GST_BUFFER_SIZE (data))) {
+ GstMapInfo map;
+ GstPnmInfoMngrResult res;
+
+ gst_buffer_map (data, &map, GST_MAP_READ);
+ res = gst_pnm_info_mngr_scan (&s->mngr, map.data, map.size);
+ gst_buffer_unmap (data, &map);
+
+ switch (res) {
case GST_PNM_INFO_MNGR_RESULT_FAILED:
gst_buffer_unref (data);
r = GST_FLOW_ERROR;
@@ -251,15 +274,15 @@ gst_pnmdec_chain (GstPad * pad, GstBuffer * data)
}
}
- if (offset == GST_BUFFER_SIZE (data)) {
+ if (offset == gst_buffer_get_size (data)) {
gst_buffer_unref (data);
r = GST_FLOW_OK;
goto out;
}
if (offset) {
- GstBuffer *buf = gst_buffer_create_sub (data, offset,
- GST_BUFFER_SIZE (data) - offset);
+ GstBuffer *buf = gst_buffer_copy_region (data, GST_BUFFER_COPY_ALL, offset,
+ gst_buffer_get_size (data) - offset);
gst_buffer_unref (data);
data = buf;
}
@@ -271,7 +294,6 @@ gst_pnmdec_chain (GstPad * pad, GstBuffer * data)
out:
gst_object_unref (src);
- gst_object_unref (s);
return r;
}
@@ -286,11 +308,11 @@ gst_pnmdec_finalize (GObject * object)
dec->buf = NULL;
}
- G_OBJECT_CLASS (parent_class)->finalize (object);
+ G_OBJECT_CLASS (gst_pnmdec_parent_class)->finalize (object);
}
static void
-gst_pnmdec_init (GstPnmdec * s, GstPnmdecClass * klass)
+gst_pnmdec_init (GstPnmdec * s)
{
GstPad *pad;
@@ -304,9 +326,10 @@ gst_pnmdec_init (GstPnmdec * s, GstPnmdecClass * klass)
}
static void
-gst_pnmdec_base_init (gpointer g_class)
+gst_pnmdec_class_init (GstPnmdecClass * klass)
{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
+ GObjectClass *gobject_class = (GObjectClass *) klass;
+ GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_pnmdec_sink_pad_template));
@@ -316,14 +339,6 @@ gst_pnmdec_base_init (gpointer g_class)
"Codec/Decoder/Image",
"Decodes images in portable pixmap/graymap/bitmap/anymamp (PNM) format",
"Lutz Mueller <lutz@users.sourceforge.net>");
-}
-
-static void
-gst_pnmdec_class_init (GstPnmdecClass * klass)
-{
- GObjectClass *gobject_class = (GObjectClass *) klass;
-
- parent_class = g_type_class_peek_parent (klass);
gobject_class->finalize = gst_pnmdec_finalize;
}
diff --git a/gst/pnm/gstpnmdec.h b/gst/pnm/gstpnmdec.h
index edcb11e3..5f173740 100644
--- a/gst/pnm/gstpnmdec.h
+++ b/gst/pnm/gstpnmdec.h
@@ -20,7 +20,7 @@
#ifndef __GST_PNMDEC_H__
#define __GST_PNMDEC_H__
-#include <gst/gstelement.h>
+#include <gst/gst.h>
#include "gstpnmutils.h"
diff --git a/gst/pnm/gstpnmenc.c b/gst/pnm/gstpnmenc.c
index 53bd4a3f..02490c20 100644
--- a/gst/pnm/gstpnmenc.c
+++ b/gst/pnm/gstpnmenc.c
@@ -32,6 +32,10 @@
* </refsect2>
*/
+/*
+ * FIXME: Port to GstVideoEncoder
+ */
+
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
@@ -53,16 +57,15 @@ enum
static GstStaticPadTemplate sink_pad_template =
GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_VIDEO_CAPS_RGB "; "
- "video/x-raw-gray, width =" GST_VIDEO_SIZE_RANGE ", "
- "height =" GST_VIDEO_SIZE_RANGE ", framerate =" GST_VIDEO_FPS_RANGE ", "
- "bpp= (int) 8, depth= (int) 8"));
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("RGB") "; "
+ GST_VIDEO_CAPS_MAKE ("GRAY8")));
+
static GstStaticPadTemplate src_pad_template =
GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
GST_STATIC_CAPS (MIME_ALL));
-GST_BOILERPLATE (GstPnmenc, gst_pnmenc, GstElement, GST_TYPE_ELEMENT);
+G_DEFINE_TYPE (GstPnmenc, gst_pnmenc, GST_TYPE_ELEMENT);
static void
gst_pnmenc_set_property (GObject * object, guint prop_id, const GValue * value,
@@ -101,9 +104,9 @@ gst_pnmenc_get_property (GObject * object, guint prop_id, GValue * value,
}
static GstFlowReturn
-gst_pnmenc_chain (GstPad * pad, GstBuffer * buf)
+gst_pnmenc_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
{
- GstPnmenc *s = GST_PNMENC (gst_pad_get_parent (pad));
+ GstPnmenc *s = GST_PNMENC (parent);
GstFlowReturn r;
gchar *header;
GstBuffer *out;
@@ -112,9 +115,7 @@ gst_pnmenc_chain (GstPad * pad, GstBuffer * buf)
header = g_strdup_printf ("P%i\n%i %i\n%i\n",
s->info.type + 3 * (1 - s->info.encoding), s->info.width, s->info.height,
s->info.max);
- out = gst_buffer_new ();
- gst_buffer_set_data (out, (guchar *) header, strlen (header));
- gst_buffer_set_caps (out, GST_PAD_CAPS (s->src));
+ out = gst_buffer_new_wrapped (header, strlen (header));
if ((r = gst_pad_push (s->src, out)) != GST_FLOW_OK)
goto out;
@@ -124,6 +125,7 @@ gst_pnmenc_chain (GstPad * pad, GstBuffer * buf)
guint o_rowstride;
GstBuffer *obuf;
guint i;
+ GstMapInfo imap, omap;
if (s->info.type == GST_PNM_TYPE_PIXMAP) {
o_rowstride = 3 * s->info.width;
@@ -134,91 +136,114 @@ gst_pnmenc_chain (GstPad * pad, GstBuffer * buf)
}
obuf = gst_buffer_new_and_alloc (o_rowstride * s->info.height);
+ gst_buffer_map (obuf, &omap, GST_MAP_WRITE);
+ gst_buffer_map (buf, &imap, GST_MAP_READ);
for (i = 0; i < s->info.height; i++)
- memcpy (GST_BUFFER_DATA (obuf) + o_rowstride * i,
- GST_BUFFER_DATA (buf) + i_rowstride * i, o_rowstride);
+ memcpy (omap.data + o_rowstride * i, imap.data + i_rowstride * i,
+ o_rowstride);
+ gst_buffer_unmap (buf, &imap);
+ gst_buffer_unmap (obuf, &omap);
gst_buffer_unref (buf);
buf = obuf;
} else {
/* Pass through the data. */
- buf = gst_buffer_make_metadata_writable (buf);
+ buf = gst_buffer_make_writable (buf);
}
/* We might need to convert to ASCII... */
if (s->info.encoding == GST_PNM_ENCODING_ASCII) {
GstBuffer *obuf;
guint i, o;
+ GstMapInfo imap, omap;
- obuf = gst_buffer_new_and_alloc (GST_BUFFER_SIZE (buf) * (4 + 1 / 20.));
- for (i = o = 0; i < GST_BUFFER_SIZE (buf); i++) {
- g_snprintf ((char *) GST_BUFFER_DATA (obuf) + o, 4, "%3i",
- GST_BUFFER_DATA (buf)[i]);
+ gst_buffer_map (buf, &imap, GST_MAP_READ);
+ obuf = gst_buffer_new_and_alloc (imap.size * (4 + 1 / 20.));
+ gst_buffer_map (obuf, &omap, GST_MAP_WRITE);
+ for (i = o = 0; i < imap.size; i++) {
+ g_snprintf ((char *) omap.data + o, 4, "%3i", imap.data[i]);
o += 3;
- GST_BUFFER_DATA (obuf)[o++] = ' ';
+ omap.data[o++] = ' ';
if (!((i + 1) % 20))
- GST_BUFFER_DATA (obuf)[o++] = '\n';
+ omap.data[o++] = '\n';
}
+ gst_buffer_unmap (buf, &imap);
+ gst_buffer_unmap (obuf, &omap);
gst_buffer_unref (buf);
buf = obuf;
}
- gst_buffer_set_caps (buf, GST_PAD_CAPS (s->src));
r = gst_pad_push (s->src, buf);
out:
- gst_object_unref (s);
return r;
}
static gboolean
-gst_pnmenc_setcaps_func_sink (GstPad * pad, GstCaps * caps)
+gst_pnmenc_setcaps (GstPnmenc * s, GstCaps * caps)
{
- GstPnmenc *s = GST_PNMENC (gst_pad_get_parent (pad));
- GstStructure *structure = gst_caps_get_structure (caps, 0);
- const gchar *mime = gst_structure_get_name (structure);
- gboolean r = TRUE;
+ gboolean r;
GstCaps *srccaps;
s->info.max = 255;
s->info.fields = GST_PNM_INFO_FIELDS_MAX;
- /* Set caps on the source. */
- if (!strcmp (mime, "video/x-raw-rgb")) {
+ if (!gst_video_info_from_caps (&s->vinfo, caps))
+ return FALSE;
+
+ if (GST_VIDEO_INFO_IS_RGB (&s->vinfo)) {
s->info.type = GST_PNM_TYPE_PIXMAP;
srccaps = gst_caps_from_string (MIME_PM);
- } else if (!strcmp (mime, "video/x-raw-gray")) {
+ } else if (GST_VIDEO_INFO_IS_GRAY (&s->vinfo)) {
s->info.type = GST_PNM_TYPE_GRAYMAP;
srccaps = gst_caps_from_string (MIME_GM);
} else {
- r = FALSE;
- goto out;
+ return FALSE;
}
- gst_pad_set_caps (s->src, srccaps);
+ r = gst_pad_set_caps (s->src, srccaps);
gst_caps_unref (srccaps);
s->info.fields |= GST_PNM_INFO_FIELDS_TYPE;
/* Remember width and height of the input data. */
- if (!gst_structure_get_int (structure, "width", (int *) &s->info.width) ||
- !gst_structure_get_int (structure, "height", (int *) &s->info.height)) {
- r = FALSE;
- goto out;
- }
+ s->info.width = GST_VIDEO_INFO_WIDTH (&s->vinfo);
+ s->info.height = GST_VIDEO_INFO_HEIGHT (&s->vinfo);
s->info.fields |= GST_PNM_INFO_FIELDS_WIDTH | GST_PNM_INFO_FIELDS_HEIGHT;
-out:
- gst_object_unref (s);
+ return r;
+}
+
+static gboolean
+gst_pnmenc_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
+{
+ GstPnmenc *s = GST_PNMENC (parent);
+ gboolean r = FALSE;
+
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_CAPS:
+ {
+ GstCaps *caps;
+
+ gst_event_parse_caps (event, &caps);
+ r = gst_pnmenc_setcaps (s, caps);
+ gst_event_unref (event);
+ break;
+ }
+ default:
+ r = gst_pad_event_default (pad, parent, event);
+ break;
+ }
+
return r;
}
static void
-gst_pnmenc_init (GstPnmenc * s, GstPnmencClass * klass)
+gst_pnmenc_init (GstPnmenc * s)
{
GstPad *pad;
pad = gst_pad_new_from_static_template (&sink_pad_template, "sink");
- gst_pad_set_setcaps_function (pad, gst_pnmenc_setcaps_func_sink);
gst_pad_set_chain_function (pad, gst_pnmenc_chain);
+ gst_pad_set_event_function (pad, gst_pnmenc_sink_event);
gst_pad_use_fixed_caps (pad);
gst_element_add_pad (GST_ELEMENT (s), pad);
@@ -227,9 +252,10 @@ gst_pnmenc_init (GstPnmenc * s, GstPnmencClass * klass)
}
static void
-gst_pnmenc_base_init (gpointer g_class)
+gst_pnmenc_class_init (GstPnmencClass * klass)
{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&sink_pad_template));
@@ -239,12 +265,6 @@ gst_pnmenc_base_init (gpointer g_class)
"Codec/Encoder/Image",
"Encodes images into portable pixmap or graymap (PNM) format",
"Lutz Mueller <lutz@users.sourceforge.net>");
-}
-
-static void
-gst_pnmenc_class_init (GstPnmencClass * klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
gobject_class->set_property = gst_pnmenc_set_property;
gobject_class->get_property = gst_pnmenc_get_property;
diff --git a/gst/pnm/gstpnmenc.h b/gst/pnm/gstpnmenc.h
index e3748601..aa8b1018 100644
--- a/gst/pnm/gstpnmenc.h
+++ b/gst/pnm/gstpnmenc.h
@@ -20,7 +20,8 @@
#ifndef __GST_PNMENC_H__
#define __GST_PNMENC_H__
-#include <gst/gstelement.h>
+#include <gst/gst.h>
+#include <gst/video/video.h>
#include "gstpnmutils.h"
@@ -39,6 +40,7 @@ struct _GstPnmenc
{
GstElement element;
+ GstVideoInfo vinfo;
GstPnmInfo info;
GstPad *src;
diff --git a/gst/rawparse/Makefile.in b/gst/rawparse/Makefile.in
index 333db57b..1af84f05 100644
--- a/gst/rawparse/Makefile.in
+++ b/gst/rawparse/Makefile.in
@@ -343,6 +343,8 @@ 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@
@@ -350,6 +352,8 @@ 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@
@@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -392,6 +395,10 @@ 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@
@@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/rawparse/gstrawparse.c b/gst/rawparse/gstrawparse.c
index 2e3765cb..f315d5ed 100644
--- a/gst/rawparse/gstrawparse.c
+++ b/gst/rawparse/gstrawparse.c
@@ -461,7 +461,8 @@ gst_raw_parse_sink_activate (GstPad * sinkpad, GstObject * parent)
query = gst_query_new_scheduling ();
if (gst_pad_peer_query (sinkpad, query))
- pull_mode = gst_query_has_scheduling_mode (query, GST_PAD_MODE_PULL);
+ pull_mode = gst_query_has_scheduling_mode_with_flags (query,
+ GST_PAD_MODE_PULL, GST_SCHEDULING_FLAG_SEEKABLE);
gst_query_unref (query);
diff --git a/gst/real/Makefile.in b/gst/real/Makefile.in
index c89593a8..1818a93b 100644
--- a/gst/real/Makefile.in
+++ b/gst/real/Makefile.in
@@ -342,6 +342,8 @@ 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@
@@ -349,6 +351,8 @@ 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@
@@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -391,6 +394,10 @@ 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@
@@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/removesilence/Makefile.in b/gst/removesilence/Makefile.in
index 509766a3..167514af 100644
--- a/gst/removesilence/Makefile.in
+++ b/gst/removesilence/Makefile.in
@@ -343,6 +343,8 @@ 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@
@@ -350,6 +352,8 @@ 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@
@@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -392,6 +395,10 @@ 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@
@@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/rtpmux/Makefile.in b/gst/rtpmux/Makefile.in
index 2d2e5217..c39488f1 100644
--- a/gst/rtpmux/Makefile.in
+++ b/gst/rtpmux/Makefile.in
@@ -342,6 +342,8 @@ 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@
@@ -349,6 +351,8 @@ 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@
@@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -391,6 +394,10 @@ 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@
@@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/rtpmux/gstrtpmux.c b/gst/rtpmux/gstrtpmux.c
index 7f69957d..c68fe522 100644
--- a/gst/rtpmux/gstrtpmux.c
+++ b/gst/rtpmux/gstrtpmux.c
@@ -452,7 +452,14 @@ resend_events (GstPad * pad, GstEvent ** event, gpointer user_data)
{
GstRTPMux *rtp_mux = user_data;
- gst_pad_push_event (rtp_mux->srcpad, gst_event_ref (*event));
+ if (GST_EVENT_TYPE (*event) == GST_EVENT_CAPS) {
+ GstCaps *caps;
+
+ gst_event_parse_caps (*event, &caps);
+ gst_rtp_mux_setcaps (pad, rtp_mux, caps);
+ } else {
+ gst_pad_push_event (rtp_mux->srcpad, gst_event_ref (*event));
+ }
return TRUE;
}
@@ -836,23 +843,30 @@ static GstStateChangeReturn
gst_rtp_mux_change_state (GstElement * element, GstStateChange transition)
{
GstRTPMux *rtp_mux;
+ GstStateChangeReturn ret;
rtp_mux = GST_RTP_MUX (element);
switch (transition) {
- case GST_STATE_CHANGE_NULL_TO_READY:
- break;
case GST_STATE_CHANGE_READY_TO_PAUSED:
gst_rtp_mux_ready_to_paused (rtp_mux);
break;
+ default:
+ break;
+ }
+
+ ret = GST_ELEMENT_CLASS (gst_rtp_mux_parent_class)->change_state (element,
+ transition);
+
+ switch (transition) {
case GST_STATE_CHANGE_PAUSED_TO_READY:
+ g_clear_object (&rtp_mux->last_pad);
break;
default:
break;
}
- return GST_ELEMENT_CLASS (gst_rtp_mux_parent_class)->change_state (element,
- transition);
+ return ret;
}
gboolean
diff --git a/gst/rtpvp8/Makefile.in b/gst/rtpvp8/Makefile.in
index f8c9e346..377445d7 100644
--- a/gst/rtpvp8/Makefile.in
+++ b/gst/rtpvp8/Makefile.in
@@ -343,6 +343,8 @@ 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@
@@ -350,6 +352,8 @@ 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@
@@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -392,6 +395,10 @@ 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@
@@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/scaletempo/Makefile.in b/gst/scaletempo/Makefile.in
index a459982e..3b4c141e 100644
--- a/gst/scaletempo/Makefile.in
+++ b/gst/scaletempo/Makefile.in
@@ -345,6 +345,8 @@ 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@
@@ -352,6 +354,8 @@ 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@
@@ -366,7 +370,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -394,6 +397,10 @@ 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@
@@ -520,6 +527,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/sdi/Makefile.in b/gst/sdi/Makefile.in
index 611df7fc..4fa90273 100644
--- a/gst/sdi/Makefile.in
+++ b/gst/sdi/Makefile.in
@@ -342,6 +342,8 @@ 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@
@@ -349,6 +351,8 @@ 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@
@@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -391,6 +394,10 @@ 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@
@@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/sdp/Makefile.in b/gst/sdp/Makefile.in
index 0b6f1f08..7b0135f3 100644
--- a/gst/sdp/Makefile.in
+++ b/gst/sdp/Makefile.in
@@ -343,6 +343,8 @@ 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@
@@ -350,6 +352,8 @@ 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@
@@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -392,6 +395,10 @@ 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@
@@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/segmentclip/Makefile.in b/gst/segmentclip/Makefile.in
index 95f4560f..a978913f 100644
--- a/gst/segmentclip/Makefile.in
+++ b/gst/segmentclip/Makefile.in
@@ -345,6 +345,8 @@ 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@
@@ -352,6 +354,8 @@ 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@
@@ -366,7 +370,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -394,6 +397,10 @@ 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@
@@ -520,6 +527,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/segmentclip/gstsegmentclip.c b/gst/segmentclip/gstsegmentclip.c
index c09a7229..5e09152b 100644
--- a/gst/segmentclip/gstsegmentclip.c
+++ b/gst/segmentclip/gstsegmentclip.c
@@ -104,8 +104,6 @@ gst_segment_clip_init (GstSegmentClip * self, GstSegmentClipClass * g_class)
GST_PAD_SET_PROXY_ALLOCATION (self->sinkpad);
gst_element_add_pad (GST_ELEMENT (self), self->sinkpad);
- gst_object_unref (templ);
-
templ = gst_element_class_get_pad_template (element_class, "src");
g_assert (templ);
diff --git a/gst/siren/Makefile.in b/gst/siren/Makefile.in
index 867df94a..c7f05fec 100644
--- a/gst/siren/Makefile.in
+++ b/gst/siren/Makefile.in
@@ -343,6 +343,8 @@ 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@
@@ -350,6 +352,8 @@ 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@
@@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -392,6 +395,10 @@ 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@
@@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/siren/gstsirendec.c b/gst/siren/gstsirendec.c
index 9dd12c35..113b0f64 100644
--- a/gst/siren/gstsirendec.c
+++ b/gst/siren/gstsirendec.c
@@ -50,25 +50,9 @@ static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/x-raw-int, "
- "width = (int) 16, "
- "depth = (int) 16, "
- "endianness = (int) 1234, "
- "signed = (boolean) true, "
+ GST_STATIC_CAPS ("audio/x-raw, format = (string) \"S16LE\", "
"rate = (int) 16000, " "channels = (int) 1"));
-/* signals and args */
-enum
-{
- /* FILL ME */
- LAST_SIGNAL
-};
-
-enum
-{
- ARG_0,
-};
-
static gboolean gst_siren_dec_start (GstAudioDecoder * dec);
static gboolean gst_siren_dec_stop (GstAudioDecoder * dec);
static gboolean gst_siren_dec_set_format (GstAudioDecoder * dec,
@@ -78,19 +62,16 @@ static gboolean gst_siren_dec_parse (GstAudioDecoder * dec,
static GstFlowReturn gst_siren_dec_handle_frame (GstAudioDecoder * dec,
GstBuffer * buffer);
-static void
-_do_init (GType type)
-{
- GST_DEBUG_CATEGORY_INIT (sirendec_debug, "sirendec", 0, "sirendec");
-}
-GST_BOILERPLATE_FULL (GstSirenDec, gst_siren_dec, GstAudioDecoder,
- GST_TYPE_AUDIO_DECODER, _do_init);
+G_DEFINE_TYPE (GstSirenDec, gst_siren_dec, GST_TYPE_AUDIO_DECODER);
static void
-gst_siren_dec_base_init (gpointer klass)
+gst_siren_dec_class_init (GstSirenDecClass * klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+ GstAudioDecoderClass *base_class = GST_AUDIO_DECODER_CLASS (klass);
+
+ GST_DEBUG_CATEGORY_INIT (sirendec_debug, "sirendec", 0, "sirendec");
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&srctemplate));
@@ -101,14 +82,6 @@ gst_siren_dec_base_init (gpointer klass)
"Codec/Decoder/Audio ",
"Decode streams encoded with the Siren7 codec into 16bit PCM",
"Youness Alaoui <kakaroto@kakaroto.homelinux.net>");
-}
-
-static void
-gst_siren_dec_class_init (GstSirenDecClass * klass)
-{
- GstAudioDecoderClass *base_class = GST_AUDIO_DECODER_CLASS (klass);
-
- GST_DEBUG ("Initializing Class");
base_class->start = GST_DEBUG_FUNCPTR (gst_siren_dec_start);
base_class->stop = GST_DEBUG_FUNCPTR (gst_siren_dec_stop);
@@ -120,7 +93,7 @@ gst_siren_dec_class_init (GstSirenDecClass * klass)
}
static void
-gst_siren_dec_init (GstSirenDec * dec, GstSirenDecClass * klass)
+gst_siren_dec_init (GstSirenDec * dec)
{
}
@@ -152,26 +125,13 @@ gst_siren_dec_stop (GstAudioDecoder * dec)
}
static gboolean
-gst_siren_dec_negotiate (GstSirenDec * dec)
-{
- gboolean res;
- GstCaps *outcaps;
-
- outcaps = gst_static_pad_template_get_caps (&srctemplate);
- res = gst_pad_set_caps (GST_AUDIO_DECODER_SRC_PAD (dec), outcaps);
- gst_caps_unref (outcaps);
-
- return res;
-}
-
-static gboolean
gst_siren_dec_set_format (GstAudioDecoder * bdec, GstCaps * caps)
{
- GstSirenDec *dec;
-
- dec = GST_SIREN_DEC (bdec);
+ GstAudioInfo info;
- return gst_siren_dec_negotiate (dec);
+ gst_audio_info_init (&info);
+ gst_audio_info_set_format (&info, GST_AUDIO_FORMAT_S16LE, 16000, 1, NULL);
+ return gst_audio_decoder_set_output_format (bdec, &info);
}
static GstFlowReturn
@@ -190,7 +150,7 @@ gst_siren_dec_parse (GstAudioDecoder * dec, GstAdapter * adapter,
*offset = 0;
*length = size - (size % 40);
} else {
- ret = GST_FLOW_UNEXPECTED;
+ ret = GST_FLOW_EOS;
}
return ret;
@@ -206,10 +166,11 @@ gst_siren_dec_handle_frame (GstAudioDecoder * bdec, GstBuffer * buf)
guint i, size, num_frames;
gint out_size, in_size;
gint decode_ret;
+ GstMapInfo inmap, outmap;
dec = GST_SIREN_DEC (bdec);
- size = GST_BUFFER_SIZE (buf);
+ size = gst_buffer_get_size (buf);
GST_LOG_OBJECT (dec, "Received buffer of size %u", size);
@@ -226,20 +187,16 @@ gst_siren_dec_handle_frame (GstAudioDecoder * bdec, GstBuffer * buf)
GST_LOG_OBJECT (dec, "we have %u frames, %u in, %u out", num_frames, in_size,
out_size);
- /* allow and handle un-negotiated input */
- if (G_UNLIKELY (GST_PAD_CAPS (GST_AUDIO_DECODER_SRC_PAD (dec)) == NULL)) {
- gst_siren_dec_negotiate (dec);
- }
-
- /* get a buffer */
- ret = gst_pad_alloc_buffer_and_set_caps (GST_AUDIO_DECODER_SRC_PAD (dec), -1,
- out_size, GST_PAD_CAPS (GST_AUDIO_DECODER_SRC_PAD (dec)), &out_buf);
- if (ret != GST_FLOW_OK)
+ out_buf = gst_audio_decoder_allocate_output_buffer (bdec, out_size);
+ if (out_buf == NULL)
goto alloc_failed;
/* get the input data for all the frames */
- in_data = GST_BUFFER_DATA (buf);
- out_data = GST_BUFFER_DATA (out_buf);
+ gst_buffer_map (buf, &inmap, GST_MAP_READ);
+ gst_buffer_map (out_buf, &outmap, GST_MAP_WRITE);
+
+ in_data = inmap.data;
+ out_data = outmap.data;
for (i = 0; i < num_frames; i++) {
GST_LOG_OBJECT (dec, "Decoding frame %u/%u", i, num_frames);
@@ -254,6 +211,9 @@ gst_siren_dec_handle_frame (GstAudioDecoder * bdec, GstBuffer * buf)
in_data += 40;
}
+ gst_buffer_unmap (buf, &inmap);
+ gst_buffer_unmap (out_buf, &outmap);
+
GST_LOG_OBJECT (dec, "Finished decoding");
/* might really be multiple frames,
diff --git a/gst/siren/gstsirenenc.c b/gst/siren/gstsirenenc.c
index 6bcf2056..c3cb3e7d 100644
--- a/gst/siren/gstsirenenc.c
+++ b/gst/siren/gstsirenenc.c
@@ -50,25 +50,9 @@ static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS ("audio/x-raw-int, "
- "width = (int) 16, "
- "depth = (int) 16, "
- "endianness = (int) 1234, "
- "signed = (boolean) true, "
+ GST_STATIC_CAPS ("audio/x-raw, format = (string) \"S16LE\", "
"rate = (int) 16000, " "channels = (int) 1"));
-/* signals and args */
-enum
-{
- /* FILL ME */
- LAST_SIGNAL
-};
-
-enum
-{
- ARG_0,
-};
-
static gboolean gst_siren_enc_start (GstAudioEncoder * enc);
static gboolean gst_siren_enc_stop (GstAudioEncoder * enc);
static gboolean gst_siren_enc_set_format (GstAudioEncoder * enc,
@@ -76,19 +60,16 @@ static gboolean gst_siren_enc_set_format (GstAudioEncoder * enc,
static GstFlowReturn gst_siren_enc_handle_frame (GstAudioEncoder * enc,
GstBuffer * in_buf);
-static void
-_do_init (GType type)
-{
- GST_DEBUG_CATEGORY_INIT (sirenenc_debug, "sirenenc", 0, "sirenenc");
-}
+G_DEFINE_TYPE (GstSirenEnc, gst_siren_enc, GST_TYPE_AUDIO_ENCODER);
-GST_BOILERPLATE_FULL (GstSirenEnc, gst_siren_enc, GstAudioEncoder,
- GST_TYPE_AUDIO_ENCODER, _do_init);
static void
-gst_siren_enc_base_init (gpointer klass)
+gst_siren_enc_class_init (GstSirenEncClass * klass)
{
GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+ GstAudioEncoderClass *base_class = GST_AUDIO_ENCODER_CLASS (klass);
+
+ GST_DEBUG_CATEGORY_INIT (sirenenc_debug, "sirenenc", 0, "sirenenc");
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&srctemplate));
@@ -99,14 +80,6 @@ gst_siren_enc_base_init (gpointer klass)
"Codec/Encoder/Audio ",
"Encode 16bit PCM streams into the Siren7 codec",
"Youness Alaoui <kakaroto@kakaroto.homelinux.net>");
-}
-
-static void
-gst_siren_enc_class_init (GstSirenEncClass * klass)
-{
- GstAudioEncoderClass *base_class = GST_AUDIO_ENCODER_CLASS (klass);
-
- GST_DEBUG ("Initializing Class");
base_class->start = GST_DEBUG_FUNCPTR (gst_siren_enc_start);
base_class->stop = GST_DEBUG_FUNCPTR (gst_siren_enc_stop);
@@ -117,7 +90,7 @@ gst_siren_enc_class_init (GstSirenEncClass * klass)
}
static void
-gst_siren_enc_init (GstSirenEnc * enc, GstSirenEncClass * klass)
+gst_siren_enc_init (GstSirenEnc * enc)
{
}
@@ -148,14 +121,11 @@ gst_siren_enc_stop (GstAudioEncoder * enc)
static gboolean
gst_siren_enc_set_format (GstAudioEncoder * benc, GstAudioInfo * info)
{
- GstSirenEnc *enc;
gboolean res;
GstCaps *outcaps;
- enc = GST_SIREN_ENC (benc);
-
outcaps = gst_static_pad_template_get_caps (&srctemplate);
- res = gst_pad_set_caps (GST_AUDIO_ENCODER_SRC_PAD (enc), outcaps);
+ res = gst_audio_encoder_set_output_format (benc, outcaps);
gst_caps_unref (outcaps);
/* report needs to base class */
@@ -178,14 +148,15 @@ gst_siren_enc_handle_frame (GstAudioEncoder * benc, GstBuffer * buf)
guint i, size, num_frames;
gint out_size, in_size;
gint encode_ret;
+ GstMapInfo inmap, outmap;
g_return_val_if_fail (buf != NULL, GST_FLOW_ERROR);
enc = GST_SIREN_ENC (benc);
- size = GST_BUFFER_SIZE (buf);
+ size = gst_buffer_get_size (buf);
- GST_LOG_OBJECT (enc, "Received buffer of size %d", GST_BUFFER_SIZE (buf));
+ GST_LOG_OBJECT (enc, "Received buffer of size %d", size);
g_return_val_if_fail (size > 0, GST_FLOW_ERROR);
g_return_val_if_fail (size % 640 == 0, GST_FLOW_ERROR);
@@ -202,14 +173,15 @@ gst_siren_enc_handle_frame (GstAudioEncoder * benc, GstBuffer * buf)
out_size);
/* get a buffer */
- ret = gst_pad_alloc_buffer_and_set_caps (GST_AUDIO_ENCODER_SRC_PAD (benc),
- -1, out_size, GST_PAD_CAPS (GST_AUDIO_ENCODER_SRC_PAD (benc)), &out_buf);
- if (ret != GST_FLOW_OK)
+ out_buf = gst_audio_encoder_allocate_output_buffer (benc, out_size);
+ if (out_buf == NULL)
goto alloc_failed;
/* get the input data for all the frames */
- in_data = GST_BUFFER_DATA (buf);
- out_data = GST_BUFFER_DATA (out_buf);
+ gst_buffer_map (buf, &inmap, GST_MAP_READ);
+ gst_buffer_map (out_buf, &outmap, GST_MAP_READ);
+ in_data = inmap.data;
+ out_data = outmap.data;
for (i = 0; i < num_frames; i++) {
GST_LOG_OBJECT (enc, "Encoding frame %u/%u", i, num_frames);
@@ -224,6 +196,9 @@ gst_siren_enc_handle_frame (GstAudioEncoder * benc, GstBuffer * buf)
in_data += 640;
}
+ gst_buffer_unmap (buf, &inmap);
+ gst_buffer_unmap (out_buf, &outmap);
+
GST_LOG_OBJECT (enc, "Finished encoding");
/* we encode all we get, pass it along */
diff --git a/gst/smooth/Makefile.in b/gst/smooth/Makefile.in
index 482f5385..f226b7b0 100644
--- a/gst/smooth/Makefile.in
+++ b/gst/smooth/Makefile.in
@@ -341,6 +341,8 @@ 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@
@@ -348,6 +350,8 @@ 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@
@@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -390,6 +393,10 @@ 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@
@@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/speed/Makefile.am b/gst/speed/Makefile.am
index 903fa011..7c12d9e4 100644
--- a/gst/speed/Makefile.am
+++ b/gst/speed/Makefile.am
@@ -3,7 +3,7 @@ plugin_LTLIBRARIES = libgstspeed.la
libgstspeed_la_SOURCES = gstspeed.c
libgstspeed_la_CFLAGS = $(GST_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS)
-libgstspeed_la_LIBADD = $(GST_LIBS) $(GST_PLUGINS_BASE_LIBS) $(LIBM)
+libgstspeed_la_LIBADD = $(GST_LIBS) $(GST_PLUGINS_BASE_LIBS) $(LIBM) -lgstaudio-$(GST_API_VERSION)
libgstspeed_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
libgstspeed_la_LIBTOOLFLAGS = --tag=disable-static
diff --git a/gst/speed/Makefile.in b/gst/speed/Makefile.in
index 35322f25..f4ccfdb3 100644
--- a/gst/speed/Makefile.in
+++ b/gst/speed/Makefile.in
@@ -341,6 +341,8 @@ 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@
@@ -348,6 +350,8 @@ 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@
@@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -390,6 +393,10 @@ 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@
@@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
@@ -605,7 +613,7 @@ top_srcdir = @top_srcdir@
plugin_LTLIBRARIES = libgstspeed.la
libgstspeed_la_SOURCES = gstspeed.c
libgstspeed_la_CFLAGS = $(GST_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS)
-libgstspeed_la_LIBADD = $(GST_LIBS) $(GST_PLUGINS_BASE_LIBS) $(LIBM)
+libgstspeed_la_LIBADD = $(GST_LIBS) $(GST_PLUGINS_BASE_LIBS) $(LIBM) -lgstaudio-$(GST_API_VERSION)
libgstspeed_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
libgstspeed_la_LIBTOOLFLAGS = --tag=disable-static
noinst_HEADERS = gstspeed.h
diff --git a/gst/speed/gstspeed.c b/gst/speed/gstspeed.c
index 5ab49602..3863bb53 100644
--- a/gst/speed/gstspeed.c
+++ b/gst/speed/gstspeed.c
@@ -60,19 +60,10 @@ enum
/* assumption here: sizeof (gfloat) = 4 */
#define GST_SPEED_AUDIO_CAPS \
- "audio/x-raw-float, " \
+ "audio/x-raw, " \
+ "format = {" GST_AUDIO_NE (F32) ", " GST_AUDIO_NE (S16) "}, " \
"rate = (int) [ 1, MAX ], " \
- "channels = (int) [ 1, MAX ], " \
- "endianness = (int) BYTE_ORDER, " \
- "width = (int) 32; " \
- \
- "audio/x-raw-int, " \
- "rate = (int) [ 1, MAX ], " \
- "channels = (int) [ 1, MAX ], " \
- "endianness = (int) BYTE_ORDER, " \
- "width = (int) 16, " \
- "depth = (int) 16, " \
- "signed = (boolean) true"
+ "channels = (int) [ 1, MAX ]"
static GstStaticPadTemplate gst_speed_sink_template =
GST_STATIC_PAD_TEMPLATE ("sink",
@@ -88,10 +79,6 @@ GST_STATIC_PAD_TEMPLATE ("src",
GST_STATIC_CAPS (GST_SPEED_AUDIO_CAPS)
);
-static void speed_base_init (gpointer g_class);
-static void speed_class_init (GstSpeedClass * klass);
-static void speed_init (GstSpeed * filter);
-
static void speed_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec);
static void speed_get_property (GObject * object, guint prop_id, GValue * value,
@@ -99,118 +86,53 @@ static void speed_get_property (GObject * object, guint prop_id, GValue * value,
static gboolean speed_parse_caps (GstSpeed * filter, const GstCaps * caps);
-static GstFlowReturn speed_chain (GstPad * pad, GstBuffer * buf);
+static GstFlowReturn speed_chain (GstPad * pad, GstObject * parent,
+ GstBuffer * buf);
static GstStateChangeReturn speed_change_state (GstElement * element,
GstStateChange transition);
-static gboolean speed_sink_event (GstPad * pad, GstEvent * event);
-static gboolean speed_src_event (GstPad * pad, GstEvent * event);
+static gboolean speed_sink_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
+static gboolean speed_src_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
-static GstElementClass *parent_class; /* NULL */
+G_DEFINE_TYPE (GstSpeed, gst_speed, GST_TYPE_ELEMENT);
static gboolean
speed_setcaps (GstPad * pad, GstCaps * caps)
{
GstSpeed *filter;
- GstPad *otherpad;
gboolean ret;
filter = GST_SPEED (gst_pad_get_parent (pad));
- otherpad = (pad == filter->srcpad) ? filter->sinkpad : filter->srcpad;
-
- if ((ret = speed_parse_caps (filter, caps)))
- ret = gst_pad_set_caps (otherpad, caps);
+ ret = speed_parse_caps (filter, caps);
gst_object_unref (filter);
return ret;
-
}
static gboolean
speed_parse_caps (GstSpeed * filter, const GstCaps * caps)
{
-
- GstStructure *structure;
- gint rate, chans, width;
-
g_return_val_if_fail (filter != NULL, FALSE);
g_return_val_if_fail (caps != NULL, FALSE);
- structure = gst_caps_get_structure (caps, 0);
-
-
- if (gst_structure_has_name (structure, "audio/x-raw-float"))
- filter->format = GST_SPEED_FORMAT_FLOAT;
- else if (gst_structure_has_name (structure, "audio/x-raw-int"))
- filter->format = GST_SPEED_FORMAT_INT;
- else
- return FALSE;
-
- if (!gst_structure_get_int (structure, "rate", &rate)
- || !gst_structure_get_int (structure, "width", &width)
- || !gst_structure_get_int (structure, "channels", &chans)) {
+ if (!gst_audio_info_from_caps (&filter->info, caps))
return FALSE;
- }
-
- filter->rate = rate;
- filter->width = width;
- filter->channels = chans;
- if (filter->format == GST_SPEED_FORMAT_FLOAT) {
- filter->sample_size = filter->channels * filter->width / 8;
- } else {
- /* our caps only allow width == depth for now */
- filter->sample_size = filter->channels * filter->width / 8;
- }
return TRUE;
}
-GType
-gst_speed_get_type (void)
-{
- static GType speed_type = 0;
-
- if (!speed_type) {
- static const GTypeInfo speed_info = {
- sizeof (GstSpeedClass),
- speed_base_init,
- NULL,
- (GClassInitFunc) speed_class_init,
- NULL,
- NULL,
- sizeof (GstSpeed),
- 0,
- (GInstanceInitFunc) speed_init,
- };
-
- speed_type =
- g_type_register_static (GST_TYPE_ELEMENT, "GstSpeed", &speed_info, 0);
- }
- return speed_type;
-}
-
-static const GstQueryType *
-speed_get_query_types (GstPad * pad)
-{
- static const GstQueryType src_query_types[] = {
- GST_QUERY_POSITION,
- GST_QUERY_DURATION,
- 0
- };
-
- return src_query_types;
-}
-
static gboolean
-speed_src_event (GstPad * pad, GstEvent * event)
+speed_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
GstSpeed *filter;
gboolean ret = FALSE;
- filter = GST_SPEED (gst_pad_get_parent (pad));
+ filter = GST_SPEED (parent);
switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_SEEK:{
@@ -240,49 +162,47 @@ speed_src_event (GstPad * pad, GstEvent * event)
event = gst_event_new_seek (rate, format, flags, start_type, start,
stop_type, stop);
- GST_LOG ("sending seek event: %" GST_PTR_FORMAT, event->structure);
+ GST_LOG ("sending seek event: %" GST_PTR_FORMAT,
+ gst_event_get_structure (event));
ret = gst_pad_send_event (GST_PAD_PEER (filter->sinkpad), event);
break;
}
default:
- ret = gst_pad_event_default (pad, event);
+ ret = gst_pad_event_default (pad, parent, event);
break;
}
- gst_object_unref (filter);
return ret;
-
}
static gboolean
-gst_speed_convert (GstPad * pad, GstFormat src_format, gint64 src_value,
+gst_speed_convert (GstSpeed * filter, GstFormat src_format, gint64 src_value,
GstFormat * dest_format, gint64 * dest_value)
{
gboolean ret = TRUE;
guint scale = 1;
- GstSpeed *filter;
if (src_format == *dest_format) {
*dest_value = src_value;
return TRUE;
}
- filter = GST_SPEED (GST_PAD_PARENT (pad));
-
switch (src_format) {
case GST_FORMAT_BYTES:
switch (*dest_format) {
case GST_FORMAT_DEFAULT:
- if (filter->sample_size == 0) {
+ if (GST_AUDIO_INFO_BPF (&filter->info) == 0) {
ret = FALSE;
break;
}
- *dest_value = src_value / filter->sample_size;
+ *dest_value = src_value / GST_AUDIO_INFO_BPF (&filter->info);
break;
case GST_FORMAT_TIME:
{
- gint byterate = filter->sample_size * filter->rate;
+ gint byterate =
+ GST_AUDIO_INFO_BPF (&filter->info) *
+ GST_AUDIO_INFO_RATE (&filter->info);
if (byterate == 0) {
ret = FALSE;
@@ -298,14 +218,15 @@ gst_speed_convert (GstPad * pad, GstFormat src_format, gint64 src_value,
case GST_FORMAT_DEFAULT:
switch (*dest_format) {
case GST_FORMAT_BYTES:
- *dest_value = src_value * filter->sample_size;
+ *dest_value = src_value * GST_AUDIO_INFO_BPF (&filter->info);
break;
case GST_FORMAT_TIME:
- if (filter->rate == 0) {
+ if (GST_AUDIO_INFO_RATE (&filter->info) == 0) {
ret = FALSE;
break;
}
- *dest_value = src_value * GST_SECOND / filter->rate;
+ *dest_value =
+ src_value * GST_SECOND / GST_AUDIO_INFO_RATE (&filter->info);
break;
default:
ret = FALSE;
@@ -314,10 +235,12 @@ gst_speed_convert (GstPad * pad, GstFormat src_format, gint64 src_value,
case GST_FORMAT_TIME:
switch (*dest_format) {
case GST_FORMAT_BYTES:
- scale = filter->sample_size;
+ scale = GST_AUDIO_INFO_BPF (&filter->info);
/* fallthrough */
case GST_FORMAT_DEFAULT:
- *dest_value = src_value * scale * filter->rate / GST_SECOND;
+ *dest_value =
+ src_value * scale * GST_AUDIO_INFO_RATE (&filter->info) /
+ GST_SECOND;
break;
default:
ret = FALSE;
@@ -332,12 +255,12 @@ gst_speed_convert (GstPad * pad, GstFormat src_format, gint64 src_value,
}
static gboolean
-speed_src_query (GstPad * pad, GstQuery * query)
+speed_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
{
gboolean ret = TRUE;
GstSpeed *filter;
- filter = GST_SPEED (gst_pad_get_parent (pad));
+ filter = GST_SPEED (parent);
switch (GST_QUERY_TYPE (query)) {
case GST_QUERY_POSITION:
@@ -353,7 +276,7 @@ speed_src_query (GstPad * pad, GstQuery * query)
/* query peer for current position in time */
gst_query_set_position (query, GST_FORMAT_TIME, -1);
- if (!gst_pad_query_peer_position (filter->sinkpad, &rformat, &cur)) {
+ if (!gst_pad_peer_query_position (filter->sinkpad, rformat, &cur)) {
GST_LOG_OBJECT (filter, "query on peer pad failed");
goto error;
}
@@ -366,7 +289,7 @@ speed_src_query (GstPad * pad, GstQuery * query)
cur);
/* convert to time format */
- if (!gst_speed_convert (pad, rformat, cur, &conv_format, &cur)) {
+ if (!gst_speed_convert (filter, rformat, cur, &conv_format, &cur)) {
ret = FALSE;
break;
}
@@ -375,7 +298,7 @@ speed_src_query (GstPad * pad, GstQuery * query)
cur /= filter->speed;
/* convert to time format */
- if (!gst_speed_convert (pad, conv_format, cur, &format, &cur)) {
+ if (!gst_speed_convert (filter, conv_format, cur, &format, &cur)) {
ret = FALSE;
break;
}
@@ -400,7 +323,7 @@ speed_src_query (GstPad * pad, GstQuery * query)
/* query peer for total length in time */
gst_query_set_duration (query, GST_FORMAT_TIME, -1);
- if (!gst_pad_query_peer_duration (filter->sinkpad, &rformat, &end)) {
+ if (!gst_pad_peer_query_duration (filter->sinkpad, rformat, &end)) {
GST_LOG_OBJECT (filter, "query on peer pad failed");
goto error;
}
@@ -413,7 +336,7 @@ speed_src_query (GstPad * pad, GstQuery * query)
end);
/* convert to time format */
- if (!gst_speed_convert (pad, rformat, end, &conv_format, &end)) {
+ if (!gst_speed_convert (filter, rformat, end, &conv_format, &end)) {
ret = FALSE;
break;
}
@@ -422,7 +345,7 @@ speed_src_query (GstPad * pad, GstQuery * query)
end /= filter->speed;
/* convert to time format */
- if (!gst_speed_convert (pad, conv_format, end, &format, &end)) {
+ if (!gst_speed_convert (filter, conv_format, end, &format, &end)) {
ret = FALSE;
break;
}
@@ -440,7 +363,6 @@ speed_src_query (GstPad * pad, GstQuery * query)
break;
}
- gst_object_unref (filter);
return ret;
error:
@@ -451,24 +373,7 @@ error:
}
static void
-speed_base_init (gpointer g_class)
-{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
-
- gst_element_class_set_details_simple (element_class, "Speed",
- "Filter/Effect/Audio",
- "Set speed/pitch on audio/raw streams (resampler)",
- "Andy Wingo <apwingo@eos.ncsu.edu>, "
- "Tim-Philipp Müller <tim@centricular.net>");
-
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_speed_src_template));
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&gst_speed_sink_template));
-}
-
-static void
-speed_class_init (GstSpeedClass * klass)
+gst_speed_class_init (GstSpeedClass * klass)
{
GObjectClass *gobject_class = (GObjectClass *) klass;
GstElementClass *gstelement_class = (GstElementClass *) klass;
@@ -477,37 +382,42 @@ speed_class_init (GstSpeedClass * klass)
gobject_class->get_property = speed_get_property;
gstelement_class->change_state = speed_change_state;
- parent_class = g_type_class_peek_parent (klass);
-
g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_SPEED,
g_param_spec_float ("speed", "speed", "speed",
0.1, 40.0, 1.0,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
+
+ gst_element_class_set_details_simple (gstelement_class, "Speed",
+ "Filter/Effect/Audio",
+ "Set speed/pitch on audio/raw streams (resampler)",
+ "Andy Wingo <apwingo@eos.ncsu.edu>, "
+ "Tim-Philipp Müller <tim@centricular.net>");
+
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&gst_speed_src_template));
+ gst_element_class_add_pad_template (gstelement_class,
+ gst_static_pad_template_get (&gst_speed_sink_template));
}
static void
-speed_init (GstSpeed * filter)
+gst_speed_init (GstSpeed * filter)
{
filter->sinkpad =
gst_pad_new_from_static_template (&gst_speed_sink_template, "sink");
- gst_pad_set_setcaps_function (filter->sinkpad, speed_setcaps);
gst_pad_set_chain_function (filter->sinkpad, speed_chain);
gst_element_add_pad (GST_ELEMENT (filter), filter->sinkpad);
gst_pad_set_event_function (filter->sinkpad, speed_sink_event);
+ GST_PAD_SET_PROXY_CAPS (filter->sinkpad);
filter->srcpad =
gst_pad_new_from_static_template (&gst_speed_src_template, "src");
- gst_pad_set_setcaps_function (filter->srcpad, speed_setcaps);
- gst_pad_set_query_type_function (filter->srcpad, speed_get_query_types);
gst_pad_set_query_function (filter->srcpad, speed_src_query);
gst_element_add_pad (GST_ELEMENT (filter), filter->srcpad);
-
gst_pad_set_event_function (filter->srcpad, speed_src_event);
+ GST_PAD_SET_PROXY_CAPS (filter->srcpad);
filter->offset = 0;
filter->timestamp = 0;
- filter->sample_size = 0;
-
}
static inline guint
@@ -517,9 +427,13 @@ speed_chain_int16 (GstSpeed * filter, GstBuffer * in_buf, GstBuffer * out_buf,
gint16 *in_data, *out_data;
gfloat interp, lower, i_float;
guint i, j;
+ GstMapInfo in_info, out_info;
+
+ gst_buffer_map (in_buf, &in_info, GST_MAP_READ);
+ gst_buffer_map (out_buf, &out_info, GST_MAP_WRITE);
- in_data = ((gint16 *) GST_BUFFER_DATA (in_buf)) + c;
- out_data = ((gint16 *) GST_BUFFER_DATA (out_buf)) + c;
+ in_data = (gint16 *) in_info.data + c;
+ out_data = (gint16 *) out_info.data + c;
lower = in_data[0];
i_float = 0.5 * (filter->speed - 1.0);
@@ -529,10 +443,11 @@ speed_chain_int16 (GstSpeed * filter, GstBuffer * in_buf, GstBuffer * out_buf,
while (i < in_samples) {
interp = i_float - floor (i_float);
- out_data[j * filter->channels] =
- lower * (1 - interp) + in_data[i * filter->channels] * interp;
+ out_data[j * GST_AUDIO_INFO_CHANNELS (&filter->info)] =
+ lower * (1 - interp) +
+ in_data[i * GST_AUDIO_INFO_CHANNELS (&filter->info)] * interp;
- lower = in_data[i * filter->channels];
+ lower = in_data[i * GST_AUDIO_INFO_CHANNELS (&filter->info)];
i_float += filter->speed;
i = (guint) ceil (i_float);
@@ -540,6 +455,8 @@ speed_chain_int16 (GstSpeed * filter, GstBuffer * in_buf, GstBuffer * out_buf,
++j;
}
+ gst_buffer_unmap (in_buf, &in_info);
+ gst_buffer_unmap (out_buf, &out_info);
return j;
}
@@ -550,9 +467,13 @@ speed_chain_float32 (GstSpeed * filter, GstBuffer * in_buf, GstBuffer * out_buf,
gfloat *in_data, *out_data;
gfloat interp, lower, i_float;
guint i, j;
+ GstMapInfo in_info, out_info;
+
+ gst_buffer_map (in_buf, &in_info, GST_MAP_WRITE);
+ gst_buffer_map (out_buf, &out_info, GST_MAP_WRITE);
- in_data = ((gfloat *) GST_BUFFER_DATA (in_buf)) + c;
- out_data = ((gfloat *) GST_BUFFER_DATA (out_buf)) + c;
+ in_data = (gfloat *) in_info.data + c;
+ out_data = (gfloat *) out_info.data + c;
lower = in_data[0];
i_float = 0.5 * (filter->speed - 1.0);
@@ -562,38 +483,45 @@ speed_chain_float32 (GstSpeed * filter, GstBuffer * in_buf, GstBuffer * out_buf,
while (i < in_samples) {
interp = i_float - floor (i_float);
- out_data[j * filter->channels] =
- lower * (1 - interp) + in_data[i * filter->channels] * interp;
+ out_data[j * GST_AUDIO_INFO_CHANNELS (&filter->info)] =
+ lower * (1 - interp) +
+ in_data[i * GST_AUDIO_INFO_CHANNELS (&filter->info)] * interp;
- lower = in_data[i * filter->channels];
+ lower = in_data[i * GST_AUDIO_INFO_CHANNELS (&filter->info)];
i_float += filter->speed;
i = (guint) ceil (i_float);
++j;
}
-
+ gst_buffer_unmap (in_buf, &in_info);
+ gst_buffer_unmap (out_buf, &out_info);
return j;
}
static gboolean
-speed_sink_event (GstPad * pad, GstEvent * event)
+speed_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
- GstSpeed *filter;
+ GstSpeed *filter = GST_SPEED (parent);
gboolean ret = FALSE;
- filter = GST_SPEED (gst_pad_get_parent (pad));
-
switch (GST_EVENT_TYPE (event)) {
- case GST_EVENT_NEWSEGMENT:{
+ case GST_EVENT_SEGMENT:{
gdouble rate;
- gboolean update = FALSE;
GstFormat format;
gint64 start_value, stop_value, base;
+ const GstSegment *segment;
+ GstSegment seg;
+
+ gst_event_parse_segment (event, &segment);
+
+ rate = segment->rate;
+ format = segment->format;
+ start_value = segment->start;
+ stop_value = segment->stop;
+ base = segment->base;
- gst_event_parse_new_segment (event, &update, &rate, &format, &start_value,
- &stop_value, &base);
gst_event_unref (event);
if (format != GST_FORMAT_TIME) {
@@ -616,86 +544,83 @@ speed_sink_event (GstPad * pad, GstEvent * event)
* the samplerate */
filter->offset = GST_BUFFER_OFFSET_NONE;
- ret =
- gst_pad_event_default (pad, gst_event_new_new_segment (update, rate,
- format, start_value, stop_value, base));
+ gst_segment_init (&seg, GST_FORMAT_TIME);
+ seg.rate = rate;
+ seg.start = start_value;
+ seg.stop = stop_value;
+ seg.time = segment->time;
+ ret = gst_pad_push_event (filter->srcpad, gst_event_new_segment (&seg));
+
break;
}
+ case GST_EVENT_CAPS:
+ {
+ GstCaps *caps;
+
+ gst_event_parse_caps (event, &caps);
+ ret = speed_setcaps (pad, caps);
+ if (!ret) {
+ gst_event_unref (event);
+ return ret;
+ }
+ }
+
default:
- ret = gst_pad_event_default (pad, event);
+ ret = gst_pad_event_default (pad, parent, event);
break;
}
-
-
- gst_object_unref (filter);
-
return ret;
-
-
}
static GstFlowReturn
-speed_chain (GstPad * pad, GstBuffer * in_buf)
+speed_chain (GstPad * pad, GstObject * parent, GstBuffer * in_buf)
{
GstBuffer *out_buf;
- GstSpeed *filter;
+ GstSpeed *filter = GST_SPEED (parent);
guint c, in_samples, out_samples, out_size;
GstFlowReturn flow;
-
- filter = GST_SPEED (GST_PAD_PARENT (pad));
-
- if (G_UNLIKELY (filter->sample_size == 0 || filter->rate == 0)) {
- flow = GST_FLOW_NOT_NEGOTIATED;
- goto done;
- }
+ gsize size;
if (G_UNLIKELY (filter->offset == GST_BUFFER_OFFSET_NONE)) {
- filter->offset =
- gst_util_uint64_scale_int (filter->timestamp, filter->rate, GST_SECOND);
+ filter->offset = gst_util_uint64_scale_int (filter->timestamp,
+ GST_AUDIO_INFO_RATE (&filter->info), GST_SECOND);
}
- /* buffersize has to be aligned by samplesize */
- out_size = ceil ((gfloat) GST_BUFFER_SIZE (in_buf) / filter->speed);
- out_size = ((out_size + filter->sample_size - 1) / filter->sample_size) *
- filter->sample_size;
+ /* buffersize has to be aligned to a frame */
+ out_size = ceil ((gfloat) gst_buffer_get_size (in_buf) / filter->speed);
+ out_size = ((out_size + GST_AUDIO_INFO_BPF (&filter->info) - 1) /
+ GST_AUDIO_INFO_BPF (&filter->info)) * GST_AUDIO_INFO_BPF (&filter->info);
- flow =
- gst_pad_alloc_buffer_and_set_caps (filter->srcpad, -1, out_size,
- GST_PAD_CAPS (filter->srcpad), &out_buf);
+ out_buf = gst_buffer_new_and_alloc (out_size);
- if (flow != GST_FLOW_OK)
- goto done;
-
- in_samples = GST_BUFFER_SIZE (in_buf) / filter->sample_size;
+ in_samples = gst_buffer_get_size (in_buf) /
+ GST_AUDIO_INFO_BPS (&filter->info);
out_samples = 0;
- for (c = 0; c < filter->channels; ++c) {
- if (filter->format == GST_SPEED_FORMAT_INT) {
+ for (c = 0; c < GST_AUDIO_INFO_CHANNELS (&filter->info); ++c) {
+ if (GST_AUDIO_INFO_IS_INTEGER (&filter->info))
out_samples = speed_chain_int16 (filter, in_buf, out_buf, c, in_samples);
- } else {
+ else
out_samples =
speed_chain_float32 (filter, in_buf, out_buf, c, in_samples);
- }
}
- GST_BUFFER_SIZE (out_buf) = out_samples * filter->sample_size;
+ size = out_samples * GST_AUDIO_INFO_BPS (&filter->info);
+ gst_buffer_set_size (out_buf, size);
GST_BUFFER_OFFSET (out_buf) = filter->offset;
GST_BUFFER_TIMESTAMP (out_buf) = filter->timestamp;
- filter->offset += GST_BUFFER_SIZE (out_buf) / filter->sample_size;
- filter->timestamp =
- gst_util_uint64_scale_int (filter->offset, GST_SECOND, filter->rate);
+ filter->offset += size / GST_AUDIO_INFO_BPS (&filter->info);
+ filter->timestamp = gst_util_uint64_scale_int (filter->offset, GST_SECOND,
+ GST_AUDIO_INFO_RATE (&filter->info));
/* make sure it's at least nominally a perfect stream */
GST_BUFFER_DURATION (out_buf) =
filter->timestamp - GST_BUFFER_TIMESTAMP (out_buf);
-
flow = gst_pad_push (filter->srcpad, out_buf);
-done:
-
if (G_UNLIKELY (flow != GST_FLOW_OK))
GST_DEBUG_OBJECT (filter, "flow: %s", gst_flow_get_name (flow));
@@ -746,15 +671,14 @@ speed_change_state (GstElement * element, GstStateChange transition)
case GST_STATE_CHANGE_READY_TO_PAUSED:
speed->offset = GST_BUFFER_OFFSET_NONE;
speed->timestamp = 0;
+ gst_audio_info_init (&speed->info);
break;
default:
break;
}
- if (GST_ELEMENT_CLASS (parent_class)->change_state)
- return GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
-
- return GST_STATE_CHANGE_SUCCESS;
+ return GST_ELEMENT_CLASS (gst_speed_parent_class)->change_state (element,
+ transition);
}
static gboolean
diff --git a/gst/speed/gstspeed.h b/gst/speed/gstspeed.h
index 19b5c36c..2dd80ebe 100644
--- a/gst/speed/gstspeed.h
+++ b/gst/speed/gstspeed.h
@@ -40,11 +40,6 @@ G_BEGIN_DECLS
typedef struct _GstSpeed GstSpeed;
typedef struct _GstSpeedClass GstSpeedClass;
-enum _GstSpeedFormat {
- GST_SPEED_FORMAT_INT,
- GST_SPEED_FORMAT_FLOAT
-};
-
typedef enum _GstSpeedFormat GstSpeedFormat;
struct _GstSpeed {
@@ -58,12 +53,7 @@ struct _GstSpeed {
gint64 offset;
gint64 timestamp;
- guint rate;
- guint channels;
- guint width;
-
- guint sample_size;
- GstSpeedFormat format;
+ GstAudioInfo info;
};
struct _GstSpeedClass {
diff --git a/gst/stereo/Makefile.in b/gst/stereo/Makefile.in
index 7ff3a4ee..24587adb 100644
--- a/gst/stereo/Makefile.in
+++ b/gst/stereo/Makefile.in
@@ -341,6 +341,8 @@ 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@
@@ -348,6 +350,8 @@ 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@
@@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -390,6 +393,10 @@ 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@
@@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/subenc/Makefile.in b/gst/subenc/Makefile.in
index b5a3d539..0c6365e5 100644
--- a/gst/subenc/Makefile.in
+++ b/gst/subenc/Makefile.in
@@ -341,6 +341,8 @@ 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@
@@ -348,6 +350,8 @@ 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@
@@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -390,6 +393,10 @@ 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@
@@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/tta/Makefile.in b/gst/tta/Makefile.in
index 5d103c1c..6296f27c 100644
--- a/gst/tta/Makefile.in
+++ b/gst/tta/Makefile.in
@@ -342,6 +342,8 @@ 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@
@@ -349,6 +351,8 @@ 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@
@@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -391,6 +394,10 @@ 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@
@@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/tta/filters.h b/gst/tta/filters.h
index 3c0694a2..2162b204 100644
--- a/gst/tta/filters.h
+++ b/gst/tta/filters.h
@@ -22,7 +22,7 @@
*
* You should have received a copy of the GNU General Public License
* aint with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please see the file COPYING in this directory for full copyright
* information.
diff --git a/gst/videofilters/Makefile.in b/gst/videofilters/Makefile.in
index e6a28ec6..2b041344 100644
--- a/gst/videofilters/Makefile.in
+++ b/gst/videofilters/Makefile.in
@@ -347,6 +347,8 @@ 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@
@@ -354,6 +356,8 @@ 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@
@@ -368,7 +372,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -396,6 +399,10 @@ 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@
@@ -522,6 +529,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/videomeasure/Makefile.in b/gst/videomeasure/Makefile.in
index 87df987e..599cbbd5 100644
--- a/gst/videomeasure/Makefile.in
+++ b/gst/videomeasure/Makefile.in
@@ -345,6 +345,8 @@ 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@
@@ -352,6 +354,8 @@ 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@
@@ -366,7 +370,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -394,6 +397,10 @@ 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@
@@ -520,6 +527,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/videomeasure/gstvideomeasure_ssim.c b/gst/videomeasure/gstvideomeasure_ssim.c
index 948787a1..69533c1b 100644
--- a/gst/videomeasure/gstvideomeasure_ssim.c
+++ b/gst/videomeasure/gstvideomeasure_ssim.c
@@ -1158,7 +1158,8 @@ gst_ssim_request_new_pad (GstElement * element, GstPadTemplate * templ,
gst_pad_set_getcaps_function (newpad,
GST_DEBUG_FUNCPTR (gst_ssim_sink_getcaps));
gst_pad_set_setcaps_function (newpad, GST_DEBUG_FUNCPTR (gst_ssim_setcaps));
- gst_collect_pads_add_pad (ssim->collect, newpad, sizeof (GstCollectData));
+ gst_collect_pads_add_pad (ssim->collect, newpad, sizeof (GstCollectData),
+ NULL, TRUE);
/* FIXME: hacked way to override/extend the event function of
* GstCollectPads; because it sets its own event function giving the
diff --git a/gst/videoparsers/Makefile.in b/gst/videoparsers/Makefile.in
index 1e153805..160cc505 100644
--- a/gst/videoparsers/Makefile.in
+++ b/gst/videoparsers/Makefile.in
@@ -351,6 +351,8 @@ 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@
@@ -358,6 +360,8 @@ 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@
@@ -372,7 +376,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -400,6 +403,10 @@ 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@
@@ -526,6 +533,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/videoparsers/gstdiracparse.c b/gst/videoparsers/gstdiracparse.c
index 0d7518bd..8699381c 100644
--- a/gst/videoparsers/gstdiracparse.c
+++ b/gst/videoparsers/gstdiracparse.c
@@ -86,8 +86,9 @@ GST_STATIC_PAD_TEMPLATE ("src",
"width=(int)[1,MAX], height=(int)[1,MAX], "
"framerate=(fraction)[0/1,MAX], "
"pixel-aspect-ratio=(fraction)[0/1,MAX], "
- "interlaced=(boolean){TRUE,FALSE}, "
- "profile=(int)[0,MAX], level=(int)[0,MAX]")
+ "interlace-mode=(string) { progressive, interleaved }, "
+ "profile=(string){ vc2-low-delay, vc2-simple, vc2-main, main }, "
+ "level=(string) { 0, 1, 128}")
);
/* class initialization */
@@ -134,6 +135,7 @@ static void
gst_dirac_parse_init (GstDiracParse * diracparse)
{
gst_base_parse_set_min_frame_size (GST_BASE_PARSE (diracparse), 13);
+ gst_base_parse_set_pts_interpolation (GST_BASE_PARSE (diracparse), FALSE);
}
void
@@ -204,6 +206,42 @@ gst_dirac_parse_set_sink_caps (GstBaseParse * parse, GstCaps * caps)
return TRUE;
}
+static const gchar *
+get_profile_name (int profile)
+{
+ switch (profile) {
+ case 0:
+ return "vc2-low-delay";
+ case 1:
+ return "vc2-simple";
+ case 2:
+ return "vc2-main";
+ case 8:
+ return "main";
+ default:
+ break;
+ }
+ return "unknown";
+}
+
+static const gchar *
+get_level_name (int level)
+{
+ switch (level) {
+ case 0:
+ return "0";
+ case 1:
+ return "1";
+ case 128:
+ return "128";
+ default:
+ break;
+ }
+ /* need to add it to template caps, so return 0 for now */
+ GST_WARNING ("unhandled dirac level %u", level);
+ return "0";
+}
+
static GstFlowReturn
gst_dirac_parse_handle_frame (GstBaseParse * parse,
GstBaseParseFrame * frame, gint * skipsize)
@@ -309,9 +347,10 @@ gst_dirac_parse_handle_frame (GstBaseParse * parse,
"pixel-aspect-ratio", GST_TYPE_FRACTION,
sequence_header.aspect_ratio_numerator,
sequence_header.aspect_ratio_denominator,
- "interlaced", G_TYPE_BOOLEAN, sequence_header.interlaced,
- "profile", G_TYPE_INT, sequence_header.profile,
- "level", G_TYPE_INT, sequence_header.level, NULL);
+ "interlace-mode", G_TYPE_STRING,
+ sequence_header.interlaced ? "interleaved" : "progressive",
+ "profile", G_TYPE_STRING, get_profile_name (sequence_header.profile),
+ "level", G_TYPE_STRING, get_level_name (sequence_header.level), NULL);
gst_pad_set_caps (GST_BASE_PARSE_SRC_PAD (parse), caps);
gst_caps_unref (caps);
diff --git a/gst/videoparsers/gsth264parse.c b/gst/videoparsers/gsth264parse.c
index b14ea9c8..4dca51c9 100644
--- a/gst/videoparsers/gsth264parse.c
+++ b/gst/videoparsers/gsth264parse.c
@@ -145,6 +145,7 @@ static void
gst_h264_parse_init (GstH264Parse * h264parse)
{
h264parse->frame_out = gst_adapter_new ();
+ gst_base_parse_set_pts_interpolation (GST_BASE_PARSE (h264parse), FALSE);
}
@@ -375,7 +376,7 @@ gst_h264_parse_wrap_nal (GstH264Parse * h264parse, guint format, guint8 * data,
GST_DEBUG_OBJECT (h264parse, "nal length %d", size);
- buf = gst_buffer_new_allocate (NULL, nl + size, NULL);
+ buf = gst_buffer_new_allocate (NULL, 4 + size, NULL);
if (format == GST_H264_PARSE_FORMAT_AVC) {
tmp = GUINT32_TO_BE (size << (32 - 8 * nl));
} else {
@@ -388,6 +389,7 @@ gst_h264_parse_wrap_nal (GstH264Parse * h264parse, guint format, guint8 * data,
gst_buffer_fill (buf, 0, &tmp, sizeof (guint32));
gst_buffer_fill (buf, nl, data, size);
+ gst_buffer_set_size (buf, size + nl);
return buf;
}
@@ -491,10 +493,11 @@ gst_h264_parse_process_nal (GstH264Parse * h264parse, GstH264NalUnit * nalu)
switch (sei.payloadType) {
case GST_H264_SEI_PIC_TIMING:
h264parse->sei_pic_struct_pres_flag =
- sei.pic_timing.pic_struct_present_flag;
- h264parse->sei_cpb_removal_delay = sei.pic_timing.cpb_removal_delay;
+ sei.payload.pic_timing.pic_struct_present_flag;
+ h264parse->sei_cpb_removal_delay =
+ sei.payload.pic_timing.cpb_removal_delay;
if (h264parse->sei_pic_struct_pres_flag)
- h264parse->sei_pic_struct = sei.pic_timing.pic_struct;
+ h264parse->sei_pic_struct = sei.payload.pic_timing.pic_struct;
break;
case GST_H264_SEI_BUF_PERIOD:
if (h264parse->ts_trn_nb == GST_CLOCK_TIME_NONE ||
diff --git a/gst/videoparsers/gstmpeg4videoparse.c b/gst/videoparsers/gstmpeg4videoparse.c
index 29caec7f..fdbe628a 100644
--- a/gst/videoparsers/gstmpeg4videoparse.c
+++ b/gst/videoparsers/gstmpeg4videoparse.c
@@ -180,6 +180,8 @@ gst_mpeg4vparse_init (GstMpeg4VParse * parse)
{
parse->interval = DEFAULT_CONFIG_INTERVAL;
parse->last_report = GST_CLOCK_TIME_NONE;
+
+ gst_base_parse_set_pts_interpolation (GST_BASE_PARSE (parse), FALSE);
}
static void
@@ -276,6 +278,44 @@ gst_mpeg4vparse_process_config (GstMpeg4VParse * mp4vparse,
return TRUE;
}
+static gboolean
+gst_mpeg4vparse_get_vop_coded (GstMpeg4VParse * mp4vparse, const guint8 * data,
+ gint vop_offset, gsize size, gsize frame_size)
+{
+ if (frame_size > 9) { /* assuming bigger frame will always have vop_coded (saves some parsing) */
+ return TRUE;
+ } else if (size > vop_offset + 3) {
+ GstBitReader reader;
+ guint8 value;
+
+ gst_bit_reader_init (&reader, data + vop_offset + 1, size - vop_offset);
+ gst_bit_reader_skip (&reader, 2); /* VOP_coding_type */
+
+ /* modulo_time_base (ends with 0) */
+ while (gst_bit_reader_get_bits_uint8 (&reader, &value, 1) && value);
+
+ /* marker_bit */
+ g_return_val_if_fail (gst_bit_reader_get_bits_uint8 (&reader, &value, 1)
+ && value, TRUE);
+
+ /* VOP_time_increment */
+ gst_bit_reader_skip (&reader, mp4vparse->vol.vop_time_increment_bits);
+
+ /* marker_bit */
+ g_return_val_if_fail (gst_bit_reader_get_bits_uint8 (&reader, &value, 1)
+ && value, TRUE);
+
+ /* VOP_coded */
+ if (!gst_bit_reader_get_bits_uint8 (&reader, &value, 1)) {
+ return FALSE;
+ }
+
+ return value;
+ }
+
+ return FALSE;
+}
+
/* caller guarantees at least start code in @buf at @off */
static gboolean
gst_mpeg4vparse_process_sc (GstMpeg4VParse * mp4vparse, GstMpeg4Packet * packet,
@@ -295,8 +335,12 @@ gst_mpeg4vparse_process_sc (GstMpeg4VParse * mp4vparse, GstMpeg4Packet * packet,
GST_WARNING_OBJECT (mp4vparse, "no data following VOP startcode");
mp4vparse->intra_frame = FALSE;
}
- GST_LOG_OBJECT (mp4vparse, "ending frame of size %d, is intra %d",
- packet->offset - 3, mp4vparse->intra_frame);
+ mp4vparse->vop_coded =
+ gst_mpeg4vparse_get_vop_coded (mp4vparse, packet->data,
+ mp4vparse->vop_offset, size, packet->offset - 3);
+ GST_LOG_OBJECT (mp4vparse,
+ "ending frame of size %d, is intra %d, vop_coded %d",
+ packet->offset - 3, mp4vparse->intra_frame, mp4vparse->vop_coded);
return TRUE;
}
@@ -491,6 +535,7 @@ static void
gst_mpeg4vparse_update_src_caps (GstMpeg4VParse * mp4vparse)
{
GstCaps *caps = NULL;
+ GstStructure *s = NULL;
GST_LOG_OBJECT (mp4vparse, "Updating caps");
@@ -505,6 +550,7 @@ gst_mpeg4vparse_update_src_caps (GstMpeg4VParse * mp4vparse)
GstCaps *tmp = gst_caps_copy (caps);
gst_caps_unref (caps);
caps = tmp;
+ s = gst_caps_get_structure (caps, 0);
} else {
caps = gst_caps_new_simple ("video/mpeg",
"mpegversion", G_TYPE_INT, 4, NULL);
@@ -528,8 +574,9 @@ gst_mpeg4vparse_update_src_caps (GstMpeg4VParse * mp4vparse)
"height", G_TYPE_INT, mp4vparse->vol.height, NULL);
}
- /* perhaps we have a framerate */
- if (mp4vparse->vol.fixed_vop_time_increment != 0) {
+ /* perhaps we have a framerate */
+ if (mp4vparse->vol.fixed_vop_time_increment != 0 &&
+ (!s || !gst_structure_has_field (s, "framerate"))) {
gint fps_num = mp4vparse->vol.vop_time_increment_resolution;
gint fps_den = mp4vparse->vol.fixed_vop_time_increment;
GstClockTime latency = gst_util_uint64_scale (GST_SECOND, fps_den, fps_num);
@@ -542,7 +589,8 @@ gst_mpeg4vparse_update_src_caps (GstMpeg4VParse * mp4vparse)
}
/* or pixel-aspect-ratio */
- if (mp4vparse->vol.par_width > 0 && mp4vparse->vol.par_height > 0) {
+ if (mp4vparse->vol.par_width > 0 && mp4vparse->vol.par_height > 0 &&
+ (!s || !gst_structure_has_field (s, "pixel-aspect-ratio"))) {
gst_caps_set_simple (caps, "pixel-aspect-ratio",
GST_TYPE_FRACTION, mp4vparse->vol.par_width,
mp4vparse->vol.par_height, NULL);
@@ -567,6 +615,9 @@ gst_mpeg4vparse_parse_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
else
GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DELTA_UNIT);
+ if (!mp4vparse->vop_coded) /* buffer without VOP_coded has no data */
+ GST_BUFFER_DURATION (buffer) = 0;
+
if (G_UNLIKELY (mp4vparse->drop && !mp4vparse->config)) {
GST_LOG_OBJECT (mp4vparse, "dropping frame as no config yet");
return GST_BASE_PARSE_FLOW_DROPPED;
diff --git a/gst/videoparsers/gstmpeg4videoparse.h b/gst/videoparsers/gstmpeg4videoparse.h
index 75d7d6c0..7611749e 100644
--- a/gst/videoparsers/gstmpeg4videoparse.h
+++ b/gst/videoparsers/gstmpeg4videoparse.h
@@ -52,6 +52,7 @@ struct _GstMpeg4VParse {
gint vop_offset;
gboolean vo_found;
gboolean intra_frame;
+ gboolean vop_coded;
gboolean update_caps;
GstBuffer *config;
diff --git a/gst/videoparsers/gstmpegvideoparse.c b/gst/videoparsers/gstmpegvideoparse.c
index 7892229b..7eee6a5e 100644
--- a/gst/videoparsers/gstmpegvideoparse.c
+++ b/gst/videoparsers/gstmpegvideoparse.c
@@ -169,7 +169,9 @@ gst_mpegv_parse_class_init (GstMpegvParseClass * klass)
static void
gst_mpegv_parse_init (GstMpegvParse * parse)
{
- parse->mpeg_version = 0;
+ parse->config_flags = FLAG_NONE;
+
+ gst_base_parse_set_pts_interpolation (GST_BASE_PARSE (parse), FALSE);
}
static void
@@ -196,6 +198,7 @@ gst_mpegv_parse_reset (GstMpegvParse * mpvparse)
gst_buffer_replace (&mpvparse->config, NULL);
memset (&mpvparse->sequencehdr, 0, sizeof (mpvparse->sequencehdr));
memset (&mpvparse->sequenceext, 0, sizeof (mpvparse->sequenceext));
+ memset (&mpvparse->sequencedispext, 0, sizeof (mpvparse->sequencedispext));
memset (&mpvparse->pichdr, 0, sizeof (mpvparse->pichdr));
}
@@ -232,6 +235,7 @@ gst_mpegv_parse_process_config (GstMpegvParse * mpvparse, GstBuffer * buf,
guint8 *data;
guint8 *data_with_prefix;
GstMapInfo map;
+ gint i, offset;
if (mpvparse->seq_offset < 4) {
/* This shouldn't happen, but just in case... */
@@ -256,13 +260,8 @@ gst_mpegv_parse_process_config (GstMpegvParse * mpvparse, GstBuffer * buf,
return TRUE;
}
- if (gst_mpeg_video_parse_sequence_header (&mpvparse->sequencehdr, data,
+ if (!gst_mpeg_video_parse_sequence_header (&mpvparse->sequencehdr, data,
size - mpvparse->seq_offset, 0)) {
- if (mpvparse->fps_num == 0 || mpvparse->fps_den == 0) {
- mpvparse->fps_num = mpvparse->sequencehdr.fps_n;
- mpvparse->fps_den = mpvparse->sequencehdr.fps_d;
- }
- } else {
GST_DEBUG_OBJECT (mpvparse,
"failed to parse config data (size %d) at offset %d",
size, mpvparse->seq_offset);
@@ -273,23 +272,41 @@ gst_mpegv_parse_process_config (GstMpegvParse * mpvparse, GstBuffer * buf,
GST_LOG_OBJECT (mpvparse, "accepting parsed config size %d", size);
/* Set mpeg version, and parse sequence extension */
- if (mpvparse->mpeg_version <= 0) {
- gint i, offset;
-
- mpvparse->mpeg_version = 1;
- for (i = 0; i < mpvparse->ext_count; ++i) {
- offset = mpvparse->ext_offsets[i];
- mpvparse->mpeg_version = 2;
- if (offset < size &&
- gst_mpeg_video_parse_sequence_extension (&mpvparse->sequenceext,
+ mpvparse->config_flags = FLAG_NONE;
+ for (i = 0; i < mpvparse->ext_count; ++i) {
+ offset = mpvparse->ext_offsets[i];
+ mpvparse->config_flags |= FLAG_MPEG2;
+ if (offset < size) {
+ if (gst_mpeg_video_parse_sequence_extension (&mpvparse->sequenceext,
map.data, size, offset)) {
- mpvparse->fps_num =
- mpvparse->sequencehdr.fps_n * (mpvparse->sequenceext.fps_n_ext + 1);
- mpvparse->fps_den =
- mpvparse->sequencehdr.fps_d * (mpvparse->sequenceext.fps_d_ext + 1);
+ GST_LOG_OBJECT (mpvparse, "Read Sequence Extension");
+ mpvparse->config_flags |= FLAG_SEQUENCE_EXT;
+ } else
+ if (gst_mpeg_video_parse_sequence_display_extension
+ (&mpvparse->sequencedispext, map.data, size, offset)) {
+ GST_LOG_OBJECT (mpvparse, "Read Sequence Display Extension");
+ mpvparse->config_flags |= FLAG_SEQUENCE_DISPLAY_EXT;
}
}
}
+ if (mpvparse->config_flags & FLAG_MPEG2) {
+ /* Update the sequence header based on extensions */
+ GstMpegVideoSequenceExt *seqext = NULL;
+ GstMpegVideoSequenceDisplayExt *seqdispext = NULL;
+
+ if (mpvparse->config_flags & FLAG_SEQUENCE_EXT)
+ seqext = &mpvparse->sequenceext;
+ if (mpvparse->config_flags & FLAG_SEQUENCE_DISPLAY_EXT)
+ seqdispext = &mpvparse->sequencedispext;
+
+ gst_mpeg_video_finalise_mpeg2_sequence_header (&mpvparse->sequencehdr,
+ seqext, seqdispext);
+ }
+
+ if (mpvparse->fps_num == 0 || mpvparse->fps_den == 0) {
+ mpvparse->fps_num = mpvparse->sequencehdr.fps_n;
+ mpvparse->fps_den = mpvparse->sequencehdr.fps_d;
+ }
/* parsing ok, so accept it as new config */
if (mpvparse->config != NULL)
@@ -627,10 +644,9 @@ gst_mpegv_parse_update_src_caps (GstMpegvParse * mpvparse)
* config data, so we should at least know about version.
* If not, it means it has been requested not to drop data, and
* upstream and/or app must know what they are doing ... */
-
- if (G_LIKELY (mpvparse->mpeg_version))
- gst_caps_set_simple (caps,
- "mpegversion", G_TYPE_INT, mpvparse->mpeg_version, NULL);
+ gst_caps_set_simple (caps,
+ "mpegversion", G_TYPE_INT, (mpvparse->config_flags & FLAG_MPEG2) ? 2 : 1,
+ NULL);
gst_caps_set_simple (caps, "systemstream", G_TYPE_BOOLEAN, FALSE,
"parsed", G_TYPE_BOOLEAN, TRUE, NULL);
@@ -664,7 +680,7 @@ gst_mpegv_parse_update_src_caps (GstMpegvParse * mpvparse)
GST_TYPE_BUFFER, mpvparse->config, NULL);
}
- if (mpvparse->mpeg_version == 2) {
+ if (mpvparse->config_flags & FLAG_SEQUENCE_EXT) {
const guint profile_c = mpvparse->sequenceext.profile;
const guint level_c = mpvparse->sequenceext.level;
const gchar *profile = NULL, *level = NULL;
@@ -756,7 +772,8 @@ gst_mpegv_parse_parse_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
GST_BUFFER_DURATION (buffer) = 0;
}
- if (GST_CLOCK_TIME_IS_VALID (GST_BUFFER_DURATION (buffer))) {
+ if (mpvparse->frame_repeat_count
+ && GST_CLOCK_TIME_IS_VALID (GST_BUFFER_DURATION (buffer))) {
GST_BUFFER_DURATION (buffer) =
(1 + mpvparse->frame_repeat_count) * GST_BUFFER_DURATION (buffer) / 2;
}
@@ -781,7 +798,9 @@ gst_mpegv_parse_pre_push_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
gchar *codec;
/* codec tag */
- codec = g_strdup_printf ("MPEG %d Video", mpvparse->mpeg_version);
+ codec =
+ g_strdup_printf ("MPEG %d Video",
+ (mpvparse->config_flags & FLAG_MPEG2) ? 2 : 1);
taglist = gst_tag_list_new (GST_TAG_VIDEO_CODEC, codec, NULL);
g_free (codec);
diff --git a/gst/videoparsers/gstmpegvideoparse.h b/gst/videoparsers/gstmpegvideoparse.h
index 47ad4cee..e00e9c86 100644
--- a/gst/videoparsers/gstmpegvideoparse.h
+++ b/gst/videoparsers/gstmpegvideoparse.h
@@ -47,6 +47,14 @@ G_BEGIN_DECLS
typedef struct _GstMpegvParse GstMpegvParse;
typedef struct _GstMpegvParseClass GstMpegvParseClass;
+/* Config/sequence flags. Reset each time config is re-parsed */
+enum {
+ FLAG_NONE = 0,
+ FLAG_MPEG2 = 1,
+ FLAG_SEQUENCE_EXT = 2,
+ FLAG_SEQUENCE_DISPLAY_EXT = 4
+};
+
struct _GstMpegvParse {
GstBaseParse element;
@@ -62,9 +70,10 @@ struct _GstMpegvParse {
GstBuffer *config;
guint8 profile;
- guint mpeg_version;
+ guint config_flags;
GstMpegVideoSequenceHdr sequencehdr;
GstMpegVideoSequenceExt sequenceext;
+ GstMpegVideoSequenceDisplayExt sequencedispext;
GstMpegVideoPictureHdr pichdr;
/* properties */
diff --git a/gst/videosignal/Makefile.in b/gst/videosignal/Makefile.in
index e4ee90d4..3e43897d 100644
--- a/gst/videosignal/Makefile.in
+++ b/gst/videosignal/Makefile.in
@@ -345,6 +345,8 @@ 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@
@@ -352,6 +354,8 @@ 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@
@@ -366,7 +370,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -394,6 +397,10 @@ 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@
@@ -520,6 +527,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/vmnc/Makefile.in b/gst/vmnc/Makefile.in
index eef36bf3..0774925c 100644
--- a/gst/vmnc/Makefile.in
+++ b/gst/vmnc/Makefile.in
@@ -338,6 +338,8 @@ 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@
@@ -345,6 +347,8 @@ 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@
@@ -359,7 +363,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -387,6 +390,10 @@ 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@
@@ -513,6 +520,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/gst/y4m/Makefile.in b/gst/y4m/Makefile.in
index c94d4466..850c7233 100644
--- a/gst/y4m/Makefile.in
+++ b/gst/y4m/Makefile.in
@@ -341,6 +341,8 @@ 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@
@@ -348,6 +350,8 @@ 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@
@@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -390,6 +393,10 @@ 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@
@@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/m4/Makefile.in b/m4/Makefile.in
index 7d339045..56b5bbc7 100644
--- a/m4/Makefile.in
+++ b/m4/Makefile.in
@@ -274,6 +274,8 @@ 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@
@@ -281,6 +283,8 @@ 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@
@@ -295,7 +299,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -323,6 +326,10 @@ 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@
@@ -449,6 +456,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/pkgconfig/Makefile.in b/pkgconfig/Makefile.in
index 608619eb..6abf1571 100644
--- a/pkgconfig/Makefile.in
+++ b/pkgconfig/Makefile.in
@@ -313,6 +313,8 @@ 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@
@@ -320,6 +322,8 @@ 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@
@@ -334,7 +338,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -362,6 +365,10 @@ 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@
@@ -488,6 +495,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/po/af.gmo b/po/af.gmo
index c976d592..ab99c8a1 100644
--- a/po/af.gmo
+++ b/po/af.gmo
Binary files differ
diff --git a/po/af.po b/po/af.po
index 61ae0e2e..88b13564 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 c0c7e85c..cf52e93b 100644
--- a/po/az.gmo
+++ b/po/az.gmo
Binary files differ
diff --git a/po/az.po b/po/az.po
index d7f755c6..6531b5cd 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 f6cc193d..ad6e42d8 100644
--- a/po/bg.gmo
+++ b/po/bg.gmo
Binary files differ
diff --git a/po/bg.po b/po/bg.po
index 697f89b4..19d5a3aa 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 48c757e5..c1dac2f6 100644
--- a/po/ca.gmo
+++ b/po/ca.gmo
Binary files differ
diff --git a/po/ca.po b/po/ca.po
index 04f70c65..a3543589 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 47542788..094a4354 100644
--- a/po/cs.gmo
+++ b/po/cs.gmo
Binary files differ
diff --git a/po/cs.po b/po/cs.po
index df4827ed..ef934914 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 be806ed4..ac35ce8d 100644
--- a/po/da.gmo
+++ b/po/da.gmo
Binary files differ
diff --git a/po/da.po b/po/da.po
index a4716bad..c60e85e9 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 17fdec64..32621274 100644
--- a/po/de.gmo
+++ b/po/de.gmo
Binary files differ
diff --git a/po/de.po b/po/de.po
index 8ce289fe..f248c113 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 c85d0c0a..0569ffd7 100644
--- a/po/el.gmo
+++ b/po/el.gmo
Binary files differ
diff --git a/po/el.po b/po/el.po
index 495ea4d6..bf9f1cab 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 780e254a..58bc9b3e 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 42e03ebc..f524e589 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 b173eec7..b4a11d96 100644
--- a/po/eo.gmo
+++ b/po/eo.gmo
Binary files differ
diff --git a/po/eo.po b/po/eo.po
index fef34b9e..fe982bd3 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 9e0d9637..6851b049 100644
--- a/po/es.gmo
+++ b/po/es.gmo
Binary files differ
diff --git a/po/es.po b/po/es.po
index cbf3ff36..033453c9 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 3779714c..bc784300 100644
--- a/po/eu.gmo
+++ b/po/eu.gmo
Binary files differ
diff --git a/po/eu.po b/po/eu.po
index cf183e51..793be2cc 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 b6c664f9..4ca4b4d8 100644
--- a/po/fi.gmo
+++ b/po/fi.gmo
Binary files differ
diff --git a/po/fi.po b/po/fi.po
index 7d14357d..4b1475da 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 fcd66379..679dab16 100644
--- a/po/fr.gmo
+++ b/po/fr.gmo
Binary files differ
diff --git a/po/fr.po b/po/fr.po
index b3078133..73a1839f 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 d1177088..ffbfe637 100644
--- a/po/gl.gmo
+++ b/po/gl.gmo
Binary files differ
diff --git a/po/gl.po b/po/gl.po
index 319a09b6..570b3ba2 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 25aa1724..ffec41c8 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 0.11.93\n"
+"Project-Id-Version: gst-plugins-bad 0.11.94\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2012-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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"
@@ -16,26 +16,26 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: ext/resindvd/resindvdsrc.c:366
+#: ext/resindvd/resindvdsrc.c:359
msgid "Could not read title information for DVD."
msgstr ""
-#: ext/resindvd/resindvdsrc.c:372
+#: ext/resindvd/resindvdsrc.c:365
#, c-format
msgid "Failed to open DVD device '%s'."
msgstr ""
-#: ext/resindvd/resindvdsrc.c:378
+#: ext/resindvd/resindvdsrc.c:371
msgid "Failed to set PGC based seeking."
msgstr ""
-#: ext/resindvd/resindvdsrc.c:1153
+#: ext/resindvd/resindvdsrc.c:1148
msgid ""
"Could not read DVD. This may be because the DVD is encrypted and a DVD "
"decryption library is not installed."
msgstr ""
-#: ext/resindvd/resindvdsrc.c:1158 ext/resindvd/resindvdsrc.c:1166
+#: ext/resindvd/resindvdsrc.c:1153 ext/resindvd/resindvdsrc.c:1162
msgid "Could not read DVD."
msgstr ""
@@ -61,22 +61,22 @@ msgstr ""
msgid "Internal data flow error."
msgstr ""
-#: sys/dvb/gstdvbsrc.c:744 sys/dvb/gstdvbsrc.c:841
+#: sys/dvb/gstdvbsrc.c:758 sys/dvb/gstdvbsrc.c:855
#, c-format
msgid "Device \"%s\" does not exist."
msgstr ""
-#: sys/dvb/gstdvbsrc.c:748
+#: sys/dvb/gstdvbsrc.c:762
#, c-format
msgid "Could not open frontend device \"%s\"."
msgstr ""
-#: sys/dvb/gstdvbsrc.c:762
+#: sys/dvb/gstdvbsrc.c:776
#, c-format
msgid "Could not get settings from frontend device \"%s\"."
msgstr ""
-#: sys/dvb/gstdvbsrc.c:845
+#: sys/dvb/gstdvbsrc.c:859
#, c-format
msgid "Could not open file \"%s\" for reading."
msgstr ""
diff --git a/po/hu.gmo b/po/hu.gmo
index 2dd5852f..e22ea934 100644
--- a/po/hu.gmo
+++ b/po/hu.gmo
Binary files differ
diff --git a/po/hu.po b/po/hu.po
index 4f4c27cc..356ef79e 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 950d358d..babfa5c7 100644
--- a/po/id.gmo
+++ b/po/id.gmo
Binary files differ
diff --git a/po/id.po b/po/id.po
index 671e3e1f..ffb07cfe 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 fa9dfad2..c34fac7d 100644
--- a/po/it.gmo
+++ b/po/it.gmo
Binary files differ
diff --git a/po/it.po b/po/it.po
index 0f3f0ec7..acd53037 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 1dfa5b1f..b19dd504 100644
--- a/po/ja.gmo
+++ b/po/ja.gmo
Binary files differ
diff --git a/po/ja.po b/po/ja.po
index c66ede0a..3f4f5081 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 6447ab06..1e30c682 100644
--- a/po/ky.gmo
+++ b/po/ky.gmo
Binary files differ
diff --git a/po/ky.po b/po/ky.po
index 326f0882..ecb9c53d 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 b25e2af7..29d7da64 100644
--- a/po/lt.gmo
+++ b/po/lt.gmo
Binary files differ
diff --git a/po/lt.po b/po/lt.po
index 04c71423..b64e1a26 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 f584b542..a47a699f 100644
--- a/po/lv.gmo
+++ b/po/lv.gmo
Binary files differ
diff --git a/po/lv.po b/po/lv.po
index 216d9443..9963fb38 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 11db51cf..926a0e80 100644
--- a/po/mt.gmo
+++ b/po/mt.gmo
Binary files differ
diff --git a/po/mt.po b/po/mt.po
index b01f1bda..6d8be6ba 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 261af770..17ae955e 100644
--- a/po/nb.gmo
+++ b/po/nb.gmo
Binary files differ
diff --git a/po/nb.po b/po/nb.po
index 292b4240..00177938 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 472310de..51aa85a5 100644
--- a/po/nl.gmo
+++ b/po/nl.gmo
Binary files differ
diff --git a/po/nl.po b/po/nl.po
index 0179f1a7..47d7c99d 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 73c76233..8bd7d1e3 100644
--- a/po/or.gmo
+++ b/po/or.gmo
Binary files differ
diff --git a/po/or.po b/po/or.po
index 506ede2e..67c552cf 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 0577aff1..f2539efe 100644
--- a/po/pl.gmo
+++ b/po/pl.gmo
Binary files differ
diff --git a/po/pl.po b/po/pl.po
index cce12771..08975d5d 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 95492dda..7859d1e7 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 96abf491..ba9ca1c0 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 0acb0408..c5ea7cdc 100644
--- a/po/ro.gmo
+++ b/po/ro.gmo
Binary files differ
diff --git a/po/ro.po b/po/ro.po
index e6dedfe0..c19f06c3 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 e3245955..4d27dfb6 100644
--- a/po/ru.gmo
+++ b/po/ru.gmo
Binary files differ
diff --git a/po/ru.po b/po/ru.po
index 61fd11fb..d4f22a38 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 84dd64ad..982b7d9c 100644
--- a/po/sk.gmo
+++ b/po/sk.gmo
Binary files differ
diff --git a/po/sk.po b/po/sk.po
index c223bac2..fb647601 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 dd967c07..eeaaa1a1 100644
--- a/po/sl.gmo
+++ b/po/sl.gmo
Binary files differ
diff --git a/po/sl.po b/po/sl.po
index 984b9204..e4142280 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 7dfbe358..89dca62e 100644
--- a/po/sq.gmo
+++ b/po/sq.gmo
Binary files differ
diff --git a/po/sq.po b/po/sq.po
index e13383fe..c27ff921 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 540710e9..22552155 100644
--- a/po/sr.gmo
+++ b/po/sr.gmo
Binary files differ
diff --git a/po/sr.po b/po/sr.po
index 952a2bfd..617fd37c 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 403fbab7..f8858cb8 100644
--- a/po/sv.gmo
+++ b/po/sv.gmo
Binary files differ
diff --git a/po/sv.po b/po/sv.po
index 7bfa99b5..c8c2a3da 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 935e7f30..7383675a 100644
--- a/po/tr.gmo
+++ b/po/tr.gmo
Binary files differ
diff --git a/po/tr.po b/po/tr.po
index 4e000798..85fbca9c 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 729f84cb..8fe4a9ce 100644
--- a/po/uk.gmo
+++ b/po/uk.gmo
Binary files differ
diff --git a/po/uk.po b/po/uk.po
index fa0f9ec7..45c71be4 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 089e86c2..8bd5f7d0 100644
--- a/po/vi.gmo
+++ b/po/vi.gmo
Binary files differ
diff --git a/po/vi.po b/po/vi.po
index d96ea5a3..e64ae0d0 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 89579aec..c8a8fefd 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 e28d5342..dbaae832 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-08-08 12:04+0100\n"
+"POT-Creation-Date: 2012-09-14 02:04+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 d1a29b34..d79d2232 100644
--- a/sys/Makefile.am
+++ b/sys/Makefile.am
@@ -130,9 +130,15 @@ else
WINSCREENCAP_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) $(VCD_DIR) $(VDPAU_DIR) $(WININET_DIR) $(WINSCREENCAP_DIR)
+if USE_UVCH264
+UVCH264_DIR=uvch264
+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)
DIST_SUBDIRS = acmenc acmmp3dec applemedia avc d3dvideosink decklink directdraw directsound dvb linsys fbdev dshowdecwrapper dshowsrcwrapper dshowvideosink \
- osxvideo pvr2d qtwrapper shm vcd vdpau wasapi wininet winks winscreencap
+ 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 28bdd303..8d1f783f 100644
--- a/sys/Makefile.in
+++ b/sys/Makefile.in
@@ -319,6 +319,8 @@ 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@
@@ -326,6 +328,8 @@ 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@
@@ -340,7 +344,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -368,6 +371,10 @@ 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@
@@ -494,6 +501,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
@@ -640,9 +648,11 @@ top_srcdir = @top_srcdir@
#VDPAU_DIR=
#endif
@USE_DIRECT3D9_TRUE@WINSCREENCAP_DIR = winscreencap
-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) $(VCD_DIR) $(VDPAU_DIR) $(WININET_DIR) $(WINSCREENCAP_DIR)
+@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 vcd vdpau wasapi wininet winks winscreencap
+ 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 9077a7d3..4f399086 100644
--- a/sys/acmenc/Makefile.in
+++ b/sys/acmenc/Makefile.in
@@ -338,6 +338,8 @@ 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@
@@ -345,6 +347,8 @@ 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@
@@ -359,7 +363,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -387,6 +390,10 @@ 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@
@@ -513,6 +520,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/sys/acmmp3dec/Makefile.in b/sys/acmmp3dec/Makefile.in
index 56cc8214..766742e4 100644
--- a/sys/acmmp3dec/Makefile.in
+++ b/sys/acmmp3dec/Makefile.in
@@ -338,6 +338,8 @@ 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@
@@ -345,6 +347,8 @@ 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@
@@ -359,7 +363,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -387,6 +390,10 @@ 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@
@@ -513,6 +520,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/sys/applemedia/Makefile.in b/sys/applemedia/Makefile.in
index d67e3ec2..117f15c5 100644
--- a/sys/applemedia/Makefile.in
+++ b/sys/applemedia/Makefile.in
@@ -397,6 +397,8 @@ 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@
@@ -404,6 +406,8 @@ 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@
@@ -418,7 +422,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -446,6 +449,10 @@ 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@
@@ -572,6 +579,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/sys/avc/Makefile.in b/sys/avc/Makefile.in
index 9e06a2e4..8b79ce1a 100644
--- a/sys/avc/Makefile.in
+++ b/sys/avc/Makefile.in
@@ -342,6 +342,8 @@ 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@
@@ -349,6 +351,8 @@ 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@
@@ -363,7 +367,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -391,6 +394,10 @@ 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@
@@ -517,6 +524,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/sys/d3dvideosink/Makefile.in b/sys/d3dvideosink/Makefile.in
index 9644a3a0..86405325 100644
--- a/sys/d3dvideosink/Makefile.in
+++ b/sys/d3dvideosink/Makefile.in
@@ -348,6 +348,8 @@ 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@
@@ -355,6 +357,8 @@ 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@
@@ -369,7 +373,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -397,6 +400,10 @@ 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@
@@ -523,6 +530,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/sys/d3dvideosink/d3dvideosink.c b/sys/d3dvideosink/d3dvideosink.c
index 7f437c41..2284ee66 100644
--- a/sys/d3dvideosink/d3dvideosink.c
+++ b/sys/d3dvideosink/d3dvideosink.c
@@ -319,7 +319,7 @@ gst_d3dvideosink_init (GstD3DVideoSink * sink)
{
gst_d3dvideosink_clear (sink);
- sink->d3d_device_lock = g_mutex_new ();
+ g_mutex_init (&sink->d3d_device_lock);
sink->par = g_new0 (GValue, 1);
g_value_init (sink->par, GST_TYPE_FRACTION);
@@ -341,8 +341,7 @@ gst_d3dvideosink_finalize (GObject * gobject)
sink->par = NULL;
}
- g_mutex_free (sink->d3d_device_lock);
- sink->d3d_device_lock = NULL;
+ g_mutex_clear (&sink->d3d_device_lock);
G_OBJECT_CLASS (parent_class)->finalize (gobject);
}
@@ -526,8 +525,8 @@ gst_d3dvideosink_create_shared_hidden_window (GstD3DVideoSink * sink)
if (shared.hidden_window_created_signal == NULL)
goto failed;
- shared.hidden_window_thread = g_thread_create ((GThreadFunc)
- gst_d3dvideosink_shared_hidden_window_thread, sink, TRUE, NULL);
+ shared.hidden_window_thread = g_thread_try_new ("shared hidden window thread",
+ (GThreadFunc) gst_d3dvideosink_shared_hidden_window_thread, sink, NULL);
/* wait maximum 60 seconds for window to be created */
if (WaitForSingleObject (shared.hidden_window_created_signal,
@@ -1044,9 +1043,8 @@ gst_d3dvideosink_create_default_window (GstD3DVideoSink * sink)
if (sink->window_created_signal == NULL)
goto failed;
- sink->window_thread =
- g_thread_create ((GThreadFunc) gst_d3dvideosink_window_thread, sink, TRUE,
- NULL);
+ sink->window_thread = g_thread_try_new ("window thread",
+ (GThreadFunc) gst_d3dvideosink_window_thread, sink, NULL);
/* wait maximum 10 seconds for window to be created */
if (WaitForSingleObject (sink->window_created_signal, 10000) != WAIT_OBJECT_0)
diff --git a/sys/d3dvideosink/d3dvideosink.h b/sys/d3dvideosink/d3dvideosink.h
index 6d9b4957..04f4d61c 100644
--- a/sys/d3dvideosink/d3dvideosink.h
+++ b/sys/d3dvideosink/d3dvideosink.h
@@ -63,17 +63,15 @@ G_BEGIN_DECLS
typedef struct _GstD3DVideoSink GstD3DVideoSink;
typedef struct _GstD3DVideoSinkClass GstD3DVideoSinkClass;
-#define GST_D3DVIDEOSINK_D3D_DEVICE_LOCK(sink) g_mutex_lock (GST_D3DVIDEOSINK (sink)->d3d_device_lock)
-#define GST_D3DVIDEOSINK_D3D_DEVICE_TRYLOCK(sink) g_mutex_trylock (GST_D3DVIDEOSINK (sink)->d3d_device_lock)
-#define GST_D3DVIDEOSINK_D3D_DEVICE_UNLOCK(sink) g_mutex_unlock (GST_D3DVIDEOSINK (sink)->d3d_device_lock)
+#define GST_D3DVIDEOSINK_D3D_DEVICE_LOCK(sink) g_mutex_lock (&GST_D3DVIDEOSINK (sink)->d3d_device_lock)
+#define GST_D3DVIDEOSINK_D3D_DEVICE_TRYLOCK(sink) g_mutex_trylock (&GST_D3DVIDEOSINK (sink)->d3d_device_lock)
+#define GST_D3DVIDEOSINK_D3D_DEVICE_UNLOCK(sink) g_mutex_unlock (&GST_D3DVIDEOSINK (sink)->d3d_device_lock)
struct _GstD3DVideoSink
{
GstVideoSink sink;
/* source rectangle */
- //gint width;
- //gint height;
GstVideoFormat format;
GstVideoInfo info;
@@ -100,7 +98,7 @@ struct _GstD3DVideoSink
WNDPROC prevWndProc;
gboolean is_hooked;
- GMutex *d3d_device_lock;
+ GMutex d3d_device_lock;
LPDIRECT3DSURFACE9 d3d_offscreen_surface;
LPDIRECT3DDEVICE9 d3ddev;
D3DPRESENT_PARAMETERS d3dpp;
diff --git a/sys/d3dvideosink/directx/dx.c b/sys/d3dvideosink/directx/dx.c
index b52e51f5..4c683b35 100644
--- a/sys/d3dvideosink/directx/dx.c
+++ b/sys/d3dvideosink/directx/dx.c
@@ -46,8 +46,8 @@ init_supported_apis (void)
static DirectXAPI *directx_determine_best_available_api (void);
/* Mutex macros */
-#define DIRECTX_LOCK g_static_rec_mutex_lock (&dx_lock);
-#define DIRECTX_UNLOCK g_static_rec_mutex_unlock (&dx_lock);
+#define DIRECTX_LOCK g_rec_mutex_lock (&dx_lock);
+#define DIRECTX_UNLOCK g_rec_mutex_unlock (&dx_lock);
typedef struct _DirectXInfo DirectXInfo;
struct _DirectXInfo
@@ -63,7 +63,7 @@ struct _DirectXInfo
/* Private vars */
static DirectXInfo dx;
-static GStaticRecMutex dx_lock = G_STATIC_REC_MUTEX_INIT;
+static GRecMutex dx_lock;
gboolean
directx_initialize (DirectXInitParams * init_params)
diff --git a/sys/decklink/Makefile.in b/sys/decklink/Makefile.in
index 5075d2dc..6882b41b 100644
--- a/sys/decklink/Makefile.in
+++ b/sys/decklink/Makefile.in
@@ -360,6 +360,8 @@ 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@
@@ -367,6 +369,8 @@ 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@
@@ -381,7 +385,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -409,6 +412,10 @@ 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@
@@ -535,6 +542,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/sys/decklink/gstdecklinksink.cpp b/sys/decklink/gstdecklinksink.cpp
index 023569fc..7ce9ecc5 100644
--- a/sys/decklink/gstdecklinksink.cpp
+++ b/sys/decklink/gstdecklinksink.cpp
@@ -527,6 +527,11 @@ gst_decklink_sink_stop (GstDecklinkSink * decklinksink)
decklinksink->output->DisableAudioOutput ();
decklinksink->output->DisableVideoOutput ();
+ decklinksink->output->Release ();
+ decklinksink->output = NULL;
+ decklinksink->decklink->Release ();
+ decklinksink->decklink = NULL;
+
return TRUE;
}
diff --git a/sys/directdraw/Makefile.in b/sys/directdraw/Makefile.in
index 815174b1..06adaa18 100644
--- a/sys/directdraw/Makefile.in
+++ b/sys/directdraw/Makefile.in
@@ -344,6 +344,8 @@ 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@
@@ -351,6 +353,8 @@ 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@
@@ -365,7 +369,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -393,6 +396,10 @@ 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@
@@ -519,6 +526,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/sys/directsound/Makefile.in b/sys/directsound/Makefile.in
index 4cc4b9db..b4e4384e 100644
--- a/sys/directsound/Makefile.in
+++ b/sys/directsound/Makefile.in
@@ -344,6 +344,8 @@ 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@
@@ -351,6 +353,8 @@ 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@
@@ -365,7 +369,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -393,6 +396,10 @@ 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@
@@ -519,6 +526,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/sys/dshowdecwrapper/Makefile.in b/sys/dshowdecwrapper/Makefile.in
index cf7f3a26..2546e802 100644
--- a/sys/dshowdecwrapper/Makefile.in
+++ b/sys/dshowdecwrapper/Makefile.in
@@ -347,6 +347,8 @@ 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@
@@ -354,6 +356,8 @@ 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@
@@ -368,7 +372,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -396,6 +399,10 @@ 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@
@@ -522,6 +529,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/sys/dshowsrcwrapper/Makefile.in b/sys/dshowsrcwrapper/Makefile.in
index bbf3635c..1004074c 100644
--- a/sys/dshowsrcwrapper/Makefile.in
+++ b/sys/dshowsrcwrapper/Makefile.in
@@ -277,6 +277,8 @@ 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@
@@ -284,6 +286,8 @@ 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@
@@ -298,7 +302,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -326,6 +329,10 @@ 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@
@@ -452,6 +459,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/sys/dshowvideosink/Makefile.in b/sys/dshowvideosink/Makefile.in
index 9408752a..0dbbdcc0 100644
--- a/sys/dshowvideosink/Makefile.in
+++ b/sys/dshowvideosink/Makefile.in
@@ -277,6 +277,8 @@ 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@
@@ -284,6 +286,8 @@ 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@
@@ -298,7 +302,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -326,6 +329,10 @@ 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@
@@ -452,6 +459,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/sys/dvb/Makefile.in b/sys/dvb/Makefile.in
index 1795b961..093621e9 100644
--- a/sys/dvb/Makefile.in
+++ b/sys/dvb/Makefile.in
@@ -350,6 +350,8 @@ 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@
@@ -357,6 +359,8 @@ 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@
@@ -371,7 +375,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -399,6 +402,10 @@ 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@
@@ -525,6 +532,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/sys/dvb/camconditionalaccess.c b/sys/dvb/camconditionalaccess.c
index fbb8a39f..6d8bf297 100644
--- a/sys/dvb/camconditionalaccess.c
+++ b/sys/dvb/camconditionalaccess.c
@@ -191,6 +191,46 @@ handle_conditional_access_info_reply (CamConditionalAccess * cas,
}
static CamReturn
+handle_conditional_access_pmt_reply (CamConditionalAccess * cas,
+ CamSLSession * session, guint8 * buffer, guint length)
+{
+ guint16 program_num;
+ guint8 version_num, current_next_indicator;
+
+ GST_INFO ("conditional access PMT reply");
+
+ program_num = GST_READ_UINT16_BE (buffer);
+ buffer += 2;
+
+ GST_INFO ("program_number : %d", program_num);
+
+ version_num = *buffer >> 1 & 0x1f;
+ current_next_indicator = *buffer & 0x1;
+ buffer++;
+
+ GST_INFO ("version_num:%d, current_next_indicator:%d",
+ version_num, current_next_indicator);
+
+ GST_INFO ("CA_enable : %d (0x%x)", *buffer >> 7 ? *buffer & 0x7f : 0,
+ *buffer);
+ buffer++;
+
+ length -= 4;
+
+ while (length > 0) {
+ guint16 PID = GST_READ_UINT16_BE (buffer);
+ buffer += 2;
+ GST_INFO ("PID 0x%x CA_enable : %d (0x%x)", PID,
+ *buffer >> 7 ? *buffer & 0x7f : 0, *buffer);
+ buffer++;
+
+ length -= 3;
+ }
+
+ return CAM_RETURN_OK;
+}
+
+static CamReturn
data_impl (CamALApplication * application, CamSLSession * session,
guint tag, guint8 * buffer, guint length)
{
@@ -201,7 +241,11 @@ data_impl (CamALApplication * application, CamSLSession * session,
case TAG_CONDITIONAL_ACCESS_INFO_REPLY:
ret = handle_conditional_access_info_reply (cas, session, buffer, length);
break;
+ case TAG_CONDITIONAL_ACCESS_PMT_REPLY:
+ ret = handle_conditional_access_pmt_reply (cas, session, buffer, length);
+ break;
default:
+ GST_WARNING ("Got unknown callback, tag 0x%x", tag);
g_return_val_if_reached (CAM_RETURN_ERROR);
}
diff --git a/sys/dvb/camdevice.c b/sys/dvb/camdevice.c
index d38d625a..0a160ceb 100644
--- a/sys/dvb/camdevice.c
+++ b/sys/dvb/camdevice.c
@@ -104,6 +104,7 @@ cam_device_open (CamDevice * device, const char *filename)
ca_caps_t ca_caps;
int ret;
int i;
+ int count = 10;
g_return_val_if_fail (device != NULL, FALSE);
g_return_val_if_fail (device->state == CAM_DEVICE_STATE_CLOSED, FALSE);
@@ -117,17 +118,31 @@ cam_device_open (CamDevice * device, const char *filename)
return FALSE;
}
+ GST_DEBUG ("Successfully opened device %s", filename);
+
device->fd = ret;
ret = ioctl (device->fd, CA_RESET);
- sleep (1);
- /* get the capabilities of the CA */
- ret = ioctl (device->fd, CA_GET_CAP, &ca_caps);
- if (ret == -1) {
- GST_ERROR ("CA_GET_CAP ioctl failed: %s", strerror (errno));
- reset_state (device);
- return FALSE;
+ g_usleep (G_USEC_PER_SEC / 10);
+
+ while (TRUE) {
+ /* get the capabilities of the CA */
+ ret = ioctl (device->fd, CA_GET_CAP, &ca_caps);
+ if (ret == -1) {
+ GST_ERROR ("CA_GET_CAP ioctl failed: %s", strerror (errno));
+ reset_state (device);
+ return FALSE;
+ }
+ if (ca_caps.slot_num > 0)
+ break;
+ if (!count) {
+ GST_ERROR ("CA_GET_CAP succeeded but not slots");
+ reset_state (device);
+ return FALSE;
+ }
+ count--;
+ g_usleep (G_USEC_PER_SEC / 5);
}
device->tl = cam_tl_new (device->fd);
diff --git a/sys/dvb/dvbbasebin.c b/sys/dvb/dvbbasebin.c
index c8e66499..e2ba8c48 100644
--- a/sys/dvb/dvbbasebin.c
+++ b/sys/dvb/dvbbasebin.c
@@ -34,14 +34,14 @@ GST_DEBUG_CATEGORY_STATIC (dvb_base_bin_debug);
#define GST_CAT_DEFAULT dvb_base_bin_debug
static GstStaticPadTemplate src_template =
-GST_STATIC_PAD_TEMPLATE ("src_%u", GST_PAD_SRC,
- GST_PAD_REQUEST,
+GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC,
+ GST_PAD_ALWAYS,
GST_STATIC_CAPS ("video/mpegts, " "systemstream = (boolean) true ")
);
static GstStaticPadTemplate program_template =
GST_STATIC_PAD_TEMPLATE ("program_%u", GST_PAD_SRC,
- GST_PAD_SOMETIMES,
+ GST_PAD_REQUEST,
GST_STATIC_CAPS ("video/mpegts, " "systemstream = (boolean) true ")
);
@@ -108,20 +108,26 @@ static void dvb_base_bin_pat_info_cb (DvbBaseBin * dvbbasebin,
const GstStructure * pat);
static void dvb_base_bin_pmt_info_cb (DvbBaseBin * dvbbasebin,
const GstStructure * pmt);
-static void dvb_base_bin_pad_added_cb (GstElement * mpegtsparse,
- GstPad * pad, DvbBaseBin * dvbbasebin);
-static void dvb_base_bin_pad_removed_cb (GstElement * mpegtsparse,
- GstPad * pad, DvbBaseBin * dvbbasebin);
static GstPad *dvb_base_bin_request_new_pad (GstElement * element,
GstPadTemplate * templ, const gchar * name, const GstCaps * caps);
static void dvb_base_bin_release_pad (GstElement * element, GstPad * pad);
static void dvb_base_bin_rebuild_filter (DvbBaseBin * dvbbasebin);
+static void
+dvb_base_bin_deactivate_program (DvbBaseBin * dvbbasebin,
+ DvbBaseBinProgram * program);
static void dvb_base_bin_uri_handler_init (gpointer g_iface,
gpointer iface_data);
static void dvb_base_bin_program_destroy (gpointer data);
+#define dvb_base_bin_parent_class parent_class
+G_DEFINE_TYPE_EXTENDED (DvbBaseBin, dvb_base_bin, GST_TYPE_BIN,
+ 0,
+ G_IMPLEMENT_INTERFACE (GST_TYPE_URI_HANDLER,
+ dvb_base_bin_uri_handler_init));
+
+
static DvbBaseBinStream *
dvb_base_bin_add_stream (DvbBaseBin * dvbbasebin, guint16 pid)
{
@@ -175,11 +181,6 @@ dvb_base_bin_get_program (DvbBaseBin * dvbbasebin, gint program_number)
static guint signals [LAST_SIGNAL] = { 0 };
*/
-#define dvb_base_bin_parent_class parent_class
-G_DEFINE_TYPE_WITH_CODE (DvbBaseBin, dvb_base_bin, GST_TYPE_BIN,
- G_IMPLEMENT_INTERFACE (GST_TYPE_URI_HANDLER,
- dvb_base_bin_uri_handler_init));
-
static void
dvb_base_bin_class_init (DvbBaseBinClass * klass)
{
@@ -217,6 +218,7 @@ dvb_base_bin_class_init (DvbBaseBinClass * klass)
bin_class->handle_message = dvb_base_bin_handle_message;
element_class = GST_ELEMENT_CLASS (klass);
+
element_class->change_state = dvb_base_bin_change_state;
element_class->request_new_pad = dvb_base_bin_request_new_pad;
element_class->release_pad = dvb_base_bin_release_pad;
@@ -306,12 +308,6 @@ dvb_base_bin_reset (DvbBaseBin * dvbbasebin)
cam_device_free (dvbbasebin->hwcam);
dvbbasebin->hwcam = NULL;
}
-
- if (dvbbasebin->ts_pad) {
- gst_element_release_request_pad (GST_ELEMENT (dvbbasebin->mpegtsparse),
- dvbbasebin->ts_pad);
- dvbbasebin->ts_pad = NULL;
- }
}
static gint16 initial_pids[] = { 0, 1, 0x10, 0x11, 0x12, 0x14, -1 };
@@ -320,21 +316,28 @@ static void
dvb_base_bin_init (DvbBaseBin * dvbbasebin)
{
DvbBaseBinStream *stream;
+ GstPad *ghost, *pad;
int i;
dvbbasebin->dvbsrc = gst_element_factory_make ("dvbsrc", NULL);
dvbbasebin->buffer_queue = gst_element_factory_make ("queue", NULL);
- dvbbasebin->mpegtsparse = gst_element_factory_make ("mpegtsparse", NULL);
+ dvbbasebin->tsparse = gst_element_factory_make ("tsparse", NULL);
- g_object_connect (dvbbasebin->mpegtsparse,
- "signal::pad-added", dvb_base_bin_pad_added_cb, dvbbasebin,
- "signal::pad-removed", dvb_base_bin_pad_removed_cb, dvbbasebin, NULL);
+ g_object_set (dvbbasebin->buffer_queue, "max-size-buffers", 0,
+ "max-size-bytes", 0, "max-size-time", 0, NULL);
gst_bin_add_many (GST_BIN (dvbbasebin), dvbbasebin->dvbsrc,
- dvbbasebin->buffer_queue, dvbbasebin->mpegtsparse, NULL);
+ dvbbasebin->buffer_queue, dvbbasebin->tsparse, NULL);
gst_element_link_many (dvbbasebin->dvbsrc,
- dvbbasebin->buffer_queue, dvbbasebin->mpegtsparse, NULL);
+ dvbbasebin->buffer_queue, dvbbasebin->tsparse, NULL);
+
+ /* Expose tsparse source pad */
+ pad = gst_element_get_static_pad (dvbbasebin->tsparse, "src");
+ gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_DATA_DOWNSTREAM,
+ dvb_base_bin_ts_pad_probe_cb, dvbbasebin, NULL);
+ ghost = gst_ghost_pad_new ("src", pad);
+ gst_element_add_pad (GST_ELEMENT (dvbbasebin), ghost);
dvbbasebin->programs = g_hash_table_new_full (g_direct_hash, g_direct_equal,
NULL, dvb_base_bin_program_destroy);
@@ -366,7 +369,7 @@ dvb_base_bin_dispose (GObject * object)
/* remove mpegtsparse BEFORE dvbsrc, since the mpegtsparse::pad-removed
* signal handler uses dvbsrc */
dvb_base_bin_reset (dvbbasebin);
- gst_bin_remove (GST_BIN (dvbbasebin), dvbbasebin->mpegtsparse);
+ gst_bin_remove (GST_BIN (dvbbasebin), dvbbasebin->tsparse);
gst_bin_remove (GST_BIN (dvbbasebin), dvbbasebin->dvbsrc);
gst_bin_remove (GST_BIN (dvbbasebin), dvbbasebin->buffer_queue);
dvbbasebin->disposed = TRUE;
@@ -390,6 +393,37 @@ dvb_base_bin_finalize (GObject * object)
}
static void
+dvb_base_bin_set_program_numbers (DvbBaseBin * dvbbasebin, const gchar * pn)
+{
+ gchar **strv, **walk;
+ DvbBaseBinProgram *program;
+
+ /* Split up and update programs */
+ strv = g_strsplit (pn, ":", 0);
+
+ for (walk = strv; *walk; walk++) {
+ gint program_number = strtol (*walk, NULL, 0);
+
+ program = dvb_base_bin_get_program (dvbbasebin, program_number);
+ if (program == NULL) {
+ program = dvb_base_bin_add_program (dvbbasebin, program_number);
+ program->selected = TRUE;
+ }
+ }
+
+ g_strfreev (strv);
+
+ /* FIXME : Deactivate programs no longer selected */
+
+ if (dvbbasebin->program_numbers)
+ g_free (dvbbasebin->program_numbers);
+ dvbbasebin->program_numbers = g_strdup (pn);
+
+ if (0)
+ dvb_base_bin_deactivate_program (dvbbasebin, NULL);
+}
+
+static void
dvb_base_bin_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec)
{
@@ -415,8 +449,7 @@ dvb_base_bin_set_property (GObject * object, guint prop_id,
g_object_set_property (G_OBJECT (dvbbasebin->dvbsrc), pspec->name, value);
break;
case PROP_PROGRAM_NUMBERS:
- g_object_set_property (G_OBJECT (dvbbasebin->mpegtsparse), pspec->name,
- value);
+ dvb_base_bin_set_program_numbers (dvbbasebin, g_value_get_string (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -448,8 +481,7 @@ dvb_base_bin_get_property (GObject * object, guint prop_id,
g_object_get_property (G_OBJECT (dvbbasebin->dvbsrc), pspec->name, value);
break;
case PROP_PROGRAM_NUMBERS:
- g_object_get_property (G_OBJECT (dvbbasebin->mpegtsparse), pspec->name,
- value);
+ g_value_set_string (value, dvbbasebin->program_numbers);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -464,12 +496,12 @@ dvb_base_bin_request_new_pad (GstElement * element,
GstPad *ghost;
gchar *pad_name;
+ GST_DEBUG ("New pad requested %s", name);
+
if (name == NULL)
name = GST_PAD_TEMPLATE_NAME_TEMPLATE (templ);
- pad =
- gst_element_get_request_pad (GST_DVB_BASE_BIN (element)->mpegtsparse,
- name);
+ pad = gst_element_get_request_pad (GST_DVB_BASE_BIN (element)->tsparse, name);
if (pad == NULL)
return NULL;
@@ -477,7 +509,6 @@ dvb_base_bin_request_new_pad (GstElement * element,
ghost = gst_ghost_pad_new (pad_name, pad);
g_free (pad_name);
gst_element_add_pad (element, ghost);
- gst_element_no_more_pads (element);
return ghost;
}
@@ -493,7 +524,7 @@ dvb_base_bin_release_pad (GstElement * element, GstPad * pad)
ghost = GST_GHOST_PAD (pad);
target = gst_ghost_pad_get_target (ghost);
gst_element_release_request_pad (GST_ELEMENT (GST_DVB_BASE_BIN
- (element)->mpegtsparse), target);
+ (element)->tsparse), target);
gst_object_unref (target);
gst_element_remove_pad (element, pad);
@@ -562,14 +593,8 @@ dvb_base_bin_init_cam (DvbBaseBin * dvbbasebin)
ca_file = g_strdup_printf ("/dev/dvb/adapter%d/ca0", adapter);
if (g_file_test (ca_file, G_FILE_TEST_EXISTS)) {
dvbbasebin->hwcam = cam_device_new ();
- if (cam_device_open (dvbbasebin->hwcam, ca_file)) {
- /* HACK: poll the cam in a buffer probe */
- dvbbasebin->ts_pad =
- gst_element_get_request_pad (dvbbasebin->mpegtsparse, "src_%u");
- gst_pad_add_probe (dvbbasebin->ts_pad,
- GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM, dvb_base_bin_ts_pad_probe_cb,
- dvbbasebin, NULL);
- } else {
+ /* device_open() can block up to 5s ! */
+ if (!cam_device_open (dvbbasebin->hwcam, ca_file)) {
GST_ERROR_OBJECT (dvbbasebin, "could not open %s", ca_file);
cam_device_free (dvbbasebin->hwcam);
dvbbasebin->hwcam = NULL;
@@ -784,7 +809,7 @@ dvb_base_bin_handle_message (GstBin * bin, GstMessage * message)
dvbbasebin = GST_DVB_BASE_BIN (bin);
if (message->type == GST_MESSAGE_ELEMENT &&
- GST_ELEMENT (message->src) == GST_ELEMENT (dvbbasebin->mpegtsparse)) {
+ GST_ELEMENT (message->src) == GST_ELEMENT (dvbbasebin->tsparse)) {
const GstStructure *s = gst_message_get_structure (message);
const gchar *structure_name = gst_structure_get_name (s);
@@ -792,20 +817,10 @@ dvb_base_bin_handle_message (GstBin * bin, GstMessage * message)
dvb_base_bin_pat_info_cb (dvbbasebin, s);
else if (strcmp (structure_name, "pmt") == 0)
dvb_base_bin_pmt_info_cb (dvbbasebin, s);
-
- /*else if (strcmp (structure_name, "nit") == 0)
- dvb_base_bin_nit_info_cb (dvbbasebin, message->structure);
- else if (strcmp (structure_name, "sdt") == 0)
- dvb_base_bin_sdt_info_cb (dvbbasebin, message->structure);
- else if (strcmp (structure_name, "eit") == 0)
- dvb_base_bin_eit_info_cb (dvbbasebin, message->structure); */
- /* forward the message on */
- gst_element_post_message (GST_ELEMENT_CAST (bin), message);
- } else {
- /* chain up */
- GST_BIN_CLASS (parent_class)->handle_message (bin, message);
}
+ /* chain up */
+ GST_BIN_CLASS (parent_class)->handle_message (bin, message);
}
@@ -888,73 +903,6 @@ dvb_base_bin_pmt_info_cb (DvbBaseBin * dvbbasebin, const GstStructure * pmt)
}
}
-static gint
-get_pad_program_number (GstPad * pad)
-{
- gchar *progstr;
- gchar *name;
-
- name = gst_pad_get_name (pad);
-
- if (strncmp (name, "program_", 8) != 0) {
- g_free (name);
- return -1;
- }
-
- progstr = strstr (name, "_");
- g_free (name);
- if (progstr == NULL)
- return -1;
-
- return strtol (++progstr, NULL, 10);
-}
-
-static void
-dvb_base_bin_pad_added_cb (GstElement * mpegtsparse,
- GstPad * pad, DvbBaseBin * dvbbasebin)
-{
- DvbBaseBinProgram *program;
- gint program_number;
- gchar *padname;
-
- program_number = get_pad_program_number (pad);
- if (program_number == -1)
- return;
-
- program = dvb_base_bin_get_program (dvbbasebin, program_number);
- if (program == NULL)
- program = dvb_base_bin_add_program (dvbbasebin, program_number);
- program->selected = TRUE;
- padname = gst_pad_get_name (pad);
- program->ghost = gst_ghost_pad_new (padname, pad);
- gst_pad_set_active (program->ghost, TRUE);
- gst_element_add_pad (GST_ELEMENT (dvbbasebin), program->ghost);
- gst_element_no_more_pads (GST_ELEMENT (dvbbasebin));
- /* if the program has a pmt, activate it now, otherwise it will get activated
- * when there's a PMT */
- if (!program->active && program->pmt_pid != G_MAXUINT16)
- dvb_base_bin_activate_program (dvbbasebin, program);
- g_free (padname);
-}
-
-static void
-dvb_base_bin_pad_removed_cb (GstElement * mpegtsparse,
- GstPad * pad, DvbBaseBin * dvbbasebin)
-{
- DvbBaseBinProgram *program;
- gint program_number;
-
- program_number = get_pad_program_number (pad);
- if (program_number == -1)
- return;
-
- program = dvb_base_bin_get_program (dvbbasebin, program_number);
- program->selected = FALSE;
- dvb_base_bin_deactivate_program (dvbbasebin, program);
- gst_element_remove_pad (GST_ELEMENT (dvbbasebin), program->ghost);
- program->ghost = NULL;
-}
-
static guint
dvb_base_bin_uri_get_type (GType type)
{
diff --git a/sys/dvb/dvbbasebin.h b/sys/dvb/dvbbasebin.h
index 3389283c..20ff2422 100644
--- a/sys/dvb/dvbbasebin.h
+++ b/sys/dvb/dvbbasebin.h
@@ -47,11 +47,9 @@ typedef struct _DvbBaseBinClass DvbBaseBinClass;
struct _DvbBaseBin {
GstBin bin;
- GstPad *ts_pad;
-
GstElement *dvbsrc;
GstElement *buffer_queue;
- GstElement *mpegtsparse;
+ GstElement *tsparse;
CamDevice *hwcam;
GList *pmtlist;
gboolean pmtlist_changed;
@@ -59,6 +57,9 @@ struct _DvbBaseBin {
GHashTable *streams;
GHashTable *programs;
gboolean disposed;
+
+ /* Cached value */
+ gchar *program_numbers;
};
struct _DvbBaseBinClass {
diff --git a/sys/dvb/gstdvbsrc.c b/sys/dvb/gstdvbsrc.c
index 3a83a40d..00eddc42 100644
--- a/sys/dvb/gstdvbsrc.c
+++ b/sys/dvb/gstdvbsrc.c
@@ -90,6 +90,7 @@ enum
ARG_DVBSRC_INVERSION,
ARG_DVBSRC_STATS_REPORTING_INTERVAL,
ARG_DVBSRC_TIMEOUT,
+ ARG_DVBSRC_DVB_BUFFER_SIZE
};
#define DEFAULT_ADAPTER 0
@@ -109,7 +110,7 @@ enum
#define DEFAULT_INVERSION INVERSION_ON
#define DEFAULT_STATS_REPORTING_INTERVAL 100
#define DEFAULT_TIMEOUT 1000000 /* 1 second */
-
+#define DEFAULT_DVB_BUFFER_SIZE (10*188*1024) /* Default is the same as the kernel default */
#define DEFAULT_BUFFER_SIZE 8192 /* not a property */
static void gst_dvbsrc_output_frontend_stats (GstDvbSrc * src);
@@ -447,6 +448,13 @@ gst_dvbsrc_class_init (GstDvbSrcClass * klass)
g_param_spec_uint64 ("timeout", "Timeout",
"Post a message after timeout microseconds (0 = disabled)", 0,
G_MAXUINT64, DEFAULT_TIMEOUT, G_PARAM_READWRITE));
+
+ g_object_class_install_property (gobject_class,
+ ARG_DVBSRC_DVB_BUFFER_SIZE,
+ g_param_spec_uint ("dvb-buffer-size",
+ "dvb-buffer-size",
+ "The kernel buffer size used by the DVB api",
+ 0, G_MAXUINT, DEFAULT_DVB_BUFFER_SIZE, G_PARAM_READWRITE));
}
/* initialize the new element
@@ -475,7 +483,7 @@ gst_dvbsrc_init (GstDvbSrc * object)
}
/* Pid 8192 on DVB gets the whole transport stream */
object->pids[0] = 8192;
-
+ object->dvb_buffer_size = DEFAULT_DVB_BUFFER_SIZE;
object->adapter_number = DEFAULT_ADAPTER;
object->frontend_number = DEFAULT_FRONTEND;
object->diseqc_src = DEFAULT_DISEQC_SRC;
@@ -638,6 +646,9 @@ gst_dvbsrc_set_property (GObject * _object, guint prop_id,
case ARG_DVBSRC_TIMEOUT:
object->timeout = g_value_get_uint64 (value);
break;
+ case ARG_DVBSRC_DVB_BUFFER_SIZE:
+ object->dvb_buffer_size = g_value_get_uint (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
@@ -704,6 +715,9 @@ gst_dvbsrc_get_property (GObject * _object, guint prop_id,
case ARG_DVBSRC_TIMEOUT:
g_value_set_uint64 (value, object->timeout);
break;
+ case ARG_DVBSRC_DVB_BUFFER_SIZE:
+ g_value_set_uint (value, object->dvb_buffer_size);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
@@ -850,9 +864,11 @@ gst_dvbsrc_open_dvr (GstDvbSrc * object)
return FALSE;
}
g_free (dvr_dev);
- GST_INFO_OBJECT (object, "Setting buffer size");
- if (ioctl (object->fd_dvr, DMX_SET_BUFFER_SIZE, 1024 * 1024) < 0) {
- GST_INFO_OBJECT (object, "DMX_SET_BUFFER_SIZE failed");
+
+ GST_INFO_OBJECT (object, "Setting DVB kernel buffer size to %d ",
+ object->dvb_buffer_size);
+ if (ioctl (object->fd_dvr, DMX_SET_BUFFER_SIZE, object->dvb_buffer_size) < 0) {
+ GST_INFO_OBJECT (object, "ioctl DMX_SET_BUFFER_SIZE failed (%d)", errno);
return FALSE;
}
return TRUE;
@@ -1004,6 +1020,7 @@ gst_dvbsrc_create (GstPushSrc * element, GstBuffer ** buf)
}
g_mutex_unlock (&object->tune_mutex);
+
return retval;
}
diff --git a/sys/dvb/gstdvbsrc.h b/sys/dvb/gstdvbsrc.h
index e290f4d6..adf6c0ed 100644
--- a/sys/dvb/gstdvbsrc.h
+++ b/sys/dvb/gstdvbsrc.h
@@ -7,12 +7,12 @@
G_BEGIN_DECLS
- typedef enum
- {
- DVB_POL_H,
- DVB_POL_V,
- DVB_POL_ZERO
- } GstDvbSrcPol;
+ typedef enum
+{
+ DVB_POL_H,
+ DVB_POL_V,
+ DVB_POL_ZERO
+} GstDvbSrcPol;
#define IPACKS 2048
@@ -32,63 +32,65 @@ G_BEGIN_DECLS
#define GST_IS_DVBSRC_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DVBSRC))
- typedef struct _GstDvbSrc GstDvbSrc;
- typedef struct _GstDvbSrcClass GstDvbSrcClass;
- typedef struct _GstDvbSrcParam GstDvbSrcParam;
+typedef struct _GstDvbSrc GstDvbSrc;
+typedef struct _GstDvbSrcClass GstDvbSrcClass;
+typedef struct _GstDvbSrcParam GstDvbSrcParam;
- struct _GstDvbSrc
- {
- GstPushSrc element;
- GstPad *srcpad;
+struct _GstDvbSrc
+{
+ GstPushSrc element;
+ GstPad *srcpad;
- GMutex tune_mutex;
- gboolean need_tune;
+ GMutex tune_mutex;
+ gboolean need_tune;
- int adapter_type;
+ int adapter_type;
- int adapter_number; /* the device directory with the sub-devices */
- int frontend_number;
+ int adapter_number; /* the device directory with the sub-devices */
+ int frontend_number;
- int fd_frontend;
- int fd_dvr;
- int fd_filters[MAX_FILTERS];
- GstPoll *poll;
- GstPollFD poll_fd_dvr;
+ int fd_frontend;
+ int fd_dvr;
+ int fd_filters[MAX_FILTERS];
+ GstPoll *poll;
+ GstPollFD poll_fd_dvr;
- guint16 pids[MAX_FILTERS];
- unsigned int freq;
- unsigned int sym_rate;
- int tone;
- int diseqc_src;
- gboolean send_diseqc;
+ guint16 pids[MAX_FILTERS];
+ unsigned int freq;
+ unsigned int sym_rate;
+ int tone;
+ int diseqc_src;
+ gboolean send_diseqc;
- int bandwidth;
- int code_rate_hp;
- int code_rate_lp;
- int modulation;
- int guard_interval;
- int transmission_mode;
- int hierarchy_information;
- int inversion;
- guint64 timeout;
+ int bandwidth;
+ int code_rate_hp;
+ int code_rate_lp;
+ int modulation;
+ int guard_interval;
+ int transmission_mode;
+ int hierarchy_information;
+ int inversion;
+ guint64 timeout;
- GstDvbSrcPol pol;
- guint stats_interval;
- guint stats_counter;
- };
+ GstDvbSrcPol pol;
+ guint stats_interval;
+ guint stats_counter;
+ gboolean need_unlock;
- struct _GstDvbSrcClass
- {
- GstPushSrcClass parent_class;
+ guint dvb_buffer_size;
+};
- void (*adapter_type) (GstElement * element, gint type);
- void (*signal_quality) (GstElement * element, gint strength, gint snr);
- };
+struct _GstDvbSrcClass
+{
+ GstPushSrcClass parent_class;
+ void (*adapter_type) (GstElement * element, gint type);
+ void (*signal_quality) (GstElement * element, gint strength, gint snr);
+};
- GType gst_dvbsrc_get_type (void);
- gboolean gst_dvbsrc_plugin_init (GstPlugin *plugin);
-G_END_DECLS
+GType gst_dvbsrc_get_type (void);
+gboolean gst_dvbsrc_plugin_init (GstPlugin * plugin);
-#endif /* __GST_DVBSRC_H__ */
+G_END_DECLS
+#endif /* __GST_DVBSRC_H__ */
diff --git a/sys/fbdev/Makefile.in b/sys/fbdev/Makefile.in
index 10fd542e..5d583178 100644
--- a/sys/fbdev/Makefile.in
+++ b/sys/fbdev/Makefile.in
@@ -341,6 +341,8 @@ 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@
@@ -348,6 +350,8 @@ 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@
@@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -390,6 +393,10 @@ 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@
@@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/sys/linsys/Makefile.in b/sys/linsys/Makefile.in
index dab647b9..6c9f898a 100644
--- a/sys/linsys/Makefile.in
+++ b/sys/linsys/Makefile.in
@@ -343,6 +343,8 @@ 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@
@@ -350,6 +352,8 @@ 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@
@@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -392,6 +395,10 @@ 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@
@@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/sys/osxvideo/Makefile.in b/sys/osxvideo/Makefile.in
index 4e91c69d..490bd1b6 100644
--- a/sys/osxvideo/Makefile.in
+++ b/sys/osxvideo/Makefile.in
@@ -343,6 +343,8 @@ 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@
@@ -350,6 +352,8 @@ 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@
@@ -364,7 +368,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -392,6 +395,10 @@ 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@
@@ -518,6 +525,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/sys/pvr2d/Makefile.in b/sys/pvr2d/Makefile.in
index 41195b46..bdb942a8 100644
--- a/sys/pvr2d/Makefile.in
+++ b/sys/pvr2d/Makefile.in
@@ -345,6 +345,8 @@ 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@
@@ -352,6 +354,8 @@ 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@
@@ -366,7 +370,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -394,6 +397,10 @@ 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@
@@ -520,6 +527,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/sys/qtwrapper/Makefile.in b/sys/qtwrapper/Makefile.in
index cdbfef8e..48be193c 100644
--- a/sys/qtwrapper/Makefile.in
+++ b/sys/qtwrapper/Makefile.in
@@ -346,6 +346,8 @@ 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@
@@ -353,6 +355,8 @@ 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@
@@ -367,7 +371,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -395,6 +398,10 @@ 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@
@@ -521,6 +528,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/sys/shm/Makefile.am b/sys/shm/Makefile.am
index f62e20e1..ec11cfff 100644
--- a/sys/shm/Makefile.am
+++ b/sys/shm/Makefile.am
@@ -1,7 +1,3 @@
-glib_enum_prefix = gst_shm
-
-include $(top_srcdir)/common/glib-gen.mak
-
plugin_LTLIBRARIES = libgstshm.la
libgstshm_la_SOURCES = shmpipe.c shmalloc.c gstshm.c gstshmsrc.c gstshmsink.c
diff --git a/sys/shm/Makefile.in b/sys/shm/Makefile.in
index 377d8524..a9fd6768 100644
--- a/sys/shm/Makefile.in
+++ b/sys/shm/Makefile.in
@@ -15,13 +15,6 @@
@SET_MAKE@
-# these are the variables your Makefile.am should set
-# the example is based on the colorbalance interface
-
-#glib_enum_headers=$(colorbalance_headers)
-#glib_enum_define=GST_COLOR_BALANCE
-#glib_enum_prefix=gst_color_balance
-
VPATH = @srcdir@
am__make_dryrun = \
@@ -60,9 +53,9 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
-DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
- $(srcdir)/Makefile.in $(top_srcdir)/common/glib-gen.mak
subdir = sys/shm
+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 \
@@ -348,6 +341,8 @@ 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@
@@ -355,6 +350,8 @@ 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@
@@ -369,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -397,6 +393,10 @@ 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@
@@ -523,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
@@ -609,8 +610,6 @@ target_vendor = @target_vendor@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-glib_enum_prefix = gst_shm
-enum_headers = $(foreach h,$(glib_enum_headers),\n\#include \"$(h)\")
plugin_LTLIBRARIES = libgstshm.la
libgstshm_la_SOURCES = shmpipe.c shmalloc.c gstshm.c gstshmsrc.c gstshmsink.c
libgstshm_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) $(GST_CFLAGS) -DSHM_PIPE_USE_GLIB
@@ -622,7 +621,7 @@ all: all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/common/glib-gen.mak $(am__configure_deps)
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -643,7 +642,6 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
-$(top_srcdir)/common/glib-gen.mak:
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -969,42 +967,6 @@ uninstall-am: uninstall-pluginLTLIBRARIES
tags uninstall uninstall-am uninstall-pluginLTLIBRARIES
-# these are all the rules generating the relevant files
-%-marshal.h: %-marshal.list
- $(AM_V_GEN)glib-genmarshal --header --prefix=$(glib_enum_prefix)_marshal $^ > $*-marshal.h.tmp && \
- mv $*-marshal.h.tmp $*-marshal.h
-
-%-marshal.c: %-marshal.list
- $(AM_V_GEN)echo "#include \"$*-marshal.h\"" >> $*-marshal.c.tmp && \
- glib-genmarshal --body --prefix=$(glib_enum_prefix)_marshal $^ >> $*-marshal.c.tmp && \
- mv $*-marshal.c.tmp $*-marshal.c
-
-%-enumtypes.h: $(glib_enum_headers)
- $(AM_V_GEN)glib-mkenums \
- --fhead "#ifndef __$(glib_enum_define)_ENUM_TYPES_H__\n#define __$(glib_enum_define)_ENUM_TYPES_H__\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n" \
- --fprod "\n/* enumerations from \"@filename@\" */\n" \
- --vhead "GType @enum_name@_get_type (void);\n#define GST_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n" \
- --ftail "G_END_DECLS\n\n#endif /* __$(glib_enum_define)_ENUM_TYPES_H__ */" \
- $^ > $@
-
-%-enumtypes.c: $(glib_enum_headers)
- @if test "x$(glib_enum_headers)" = "x"; then echo "ERROR: glib_enum_headers is empty, please fix Makefile"; exit 1; fi
- $(AM_V_GEN)glib-mkenums \
- --fhead "#include \"$*-enumtypes.h\"\n$(enum_headers)" \
- --fprod "\n/* enumerations from \"@filename@\" */" \
- --vhead "GType\n@enum_name@_get_type (void)\n{\n static volatile gsize g_define_type_id__volatile = 0;\n if (g_once_init_enter (&g_define_type_id__volatile)) {\n static const G@Type@Value values[] = {" \
- --vprod " { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
- --vtail " { 0, NULL, NULL }\n };\n GType g_define_type_id = g_@type@_register_static (\"@EnumName@\", values);\n g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);\n }\n return g_define_type_id__volatile;\n}\n" \
- $^ > $@
-
-# a hack rule to make sure .Plo files exist because they get include'd
-# from Makefile's
-.deps/%-marshal.Plo:
- @touch $@
-
-.deps/%-enumtypes.Plo:
- @touch $@
-
# 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/uvch264/Makefile.am b/sys/uvch264/Makefile.am
new file mode 100644
index 00000000..a647fa99
--- /dev/null
+++ b/sys/uvch264/Makefile.am
@@ -0,0 +1,34 @@
+glib_gen_prefix = __gst_uvc_h264
+glib_gen_basename = gstuvch264
+
+plugin_LTLIBRARIES = libgstuvch264.la
+
+libgstuvch264_la_SOURCES = gstuvch264.c \
+ gstuvch264_mjpgdemux.c \
+ gstuvch264_src.c \
+ uvc_h264.c
+
+libgstuvch264_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) \
+ $(GST_PLUGINS_BASE_CFLAGS) \
+ $(GST_BASE_CFLAGS) \
+ $(GST_VIDEO_CFLAGS) \
+ $(GST_CFLAGS) \
+ $(G_UDEV_CFLAGS) \
+ $(LIBUSB_CFLAGS) \
+ -DGST_USE_UNSTABLE_API
+
+libgstuvch264_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstuvch264_la_LIBTOOLFLAGS = --tag=disable-static
+
+libgstuvch264_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) \
+ $(GST_BASE_LIBS) \
+ $(GST_PLUGINS_BASE_LIBS) \
+ $(GST_VIDEO_LIBS) \
+ $(GST_LIBS) \
+ $(G_UDEV_LIBS) \
+ $(LIBUSB_LIBS) \
+ $(top_builddir)/gst-libs/gst/basecamerabinsrc/libgstbasecamerabinsrc-$(GST_MAJORMINOR).la
+
+noinst_HEADERS = gstuvch264_mjpgdemux.h \
+ gstuvch264_src.h \
+ uvc_h264.h
diff --git a/sys/uvch264/Makefile.in b/sys/uvch264/Makefile.in
new file mode 100644
index 00000000..e7c7fcee
--- /dev/null
+++ b/sys/uvch264/Makefile.in
@@ -0,0 +1,995 @@
+# 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/uvch264
+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 =
+libgstuvch264_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/gst-libs/gst/basecamerabinsrc/libgstbasecamerabinsrc-$(GST_MAJORMINOR).la
+am_libgstuvch264_la_OBJECTS = libgstuvch264_la-gstuvch264.lo \
+ libgstuvch264_la-gstuvch264_mjpgdemux.lo \
+ libgstuvch264_la-gstuvch264_src.lo \
+ libgstuvch264_la-uvc_h264.lo
+libgstuvch264_la_OBJECTS = $(am_libgstuvch264_la_OBJECTS)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+libgstuvch264_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(libgstuvch264_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
+ $(CCLD) $(libgstuvch264_la_CFLAGS) $(CFLAGS) \
+ $(libgstuvch264_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 = $(libgstuvch264_la_SOURCES)
+DIST_SOURCES = $(libgstuvch264_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@
+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@
+VPX_CFLAGS = @VPX_CFLAGS@
+VPX_LIBS = @VPX_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@
+glib_gen_prefix = __gst_uvc_h264
+glib_gen_basename = gstuvch264
+plugin_LTLIBRARIES = libgstuvch264.la
+libgstuvch264_la_SOURCES = gstuvch264.c \
+ gstuvch264_mjpgdemux.c \
+ gstuvch264_src.c \
+ uvc_h264.c
+
+libgstuvch264_la_CFLAGS = $(GST_PLUGINS_BAD_CFLAGS) \
+ $(GST_PLUGINS_BASE_CFLAGS) \
+ $(GST_BASE_CFLAGS) \
+ $(GST_VIDEO_CFLAGS) \
+ $(GST_CFLAGS) \
+ $(G_UDEV_CFLAGS) \
+ $(LIBUSB_CFLAGS) \
+ -DGST_USE_UNSTABLE_API
+
+libgstuvch264_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
+libgstuvch264_la_LIBTOOLFLAGS = --tag=disable-static
+libgstuvch264_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) \
+ $(GST_BASE_LIBS) \
+ $(GST_PLUGINS_BASE_LIBS) \
+ $(GST_VIDEO_LIBS) \
+ $(GST_LIBS) \
+ $(G_UDEV_LIBS) \
+ $(LIBUSB_LIBS) \
+ $(top_builddir)/gst-libs/gst/basecamerabinsrc/libgstbasecamerabinsrc-$(GST_MAJORMINOR).la
+
+noinst_HEADERS = gstuvch264_mjpgdemux.h \
+ gstuvch264_src.h \
+ uvc_h264.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/uvch264/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu sys/uvch264/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
+libgstuvch264.la: $(libgstuvch264_la_OBJECTS) $(libgstuvch264_la_DEPENDENCIES) $(EXTRA_libgstuvch264_la_DEPENDENCIES)
+ $(AM_V_CCLD)$(libgstuvch264_la_LINK) -rpath $(plugindir) $(libgstuvch264_la_OBJECTS) $(libgstuvch264_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstuvch264_la-gstuvch264.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstuvch264_la-gstuvch264_mjpgdemux.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstuvch264_la-gstuvch264_src.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgstuvch264_la-uvc_h264.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 $@ $<
+
+libgstuvch264_la-gstuvch264.lo: gstuvch264.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstuvch264_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstuvch264_la_CFLAGS) $(CFLAGS) -MT libgstuvch264_la-gstuvch264.lo -MD -MP -MF $(DEPDIR)/libgstuvch264_la-gstuvch264.Tpo -c -o libgstuvch264_la-gstuvch264.lo `test -f 'gstuvch264.c' || echo '$(srcdir)/'`gstuvch264.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstuvch264_la-gstuvch264.Tpo $(DEPDIR)/libgstuvch264_la-gstuvch264.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstuvch264.c' object='libgstuvch264_la-gstuvch264.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 $(libgstuvch264_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstuvch264_la_CFLAGS) $(CFLAGS) -c -o libgstuvch264_la-gstuvch264.lo `test -f 'gstuvch264.c' || echo '$(srcdir)/'`gstuvch264.c
+
+libgstuvch264_la-gstuvch264_mjpgdemux.lo: gstuvch264_mjpgdemux.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstuvch264_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstuvch264_la_CFLAGS) $(CFLAGS) -MT libgstuvch264_la-gstuvch264_mjpgdemux.lo -MD -MP -MF $(DEPDIR)/libgstuvch264_la-gstuvch264_mjpgdemux.Tpo -c -o libgstuvch264_la-gstuvch264_mjpgdemux.lo `test -f 'gstuvch264_mjpgdemux.c' || echo '$(srcdir)/'`gstuvch264_mjpgdemux.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstuvch264_la-gstuvch264_mjpgdemux.Tpo $(DEPDIR)/libgstuvch264_la-gstuvch264_mjpgdemux.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstuvch264_mjpgdemux.c' object='libgstuvch264_la-gstuvch264_mjpgdemux.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 $(libgstuvch264_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstuvch264_la_CFLAGS) $(CFLAGS) -c -o libgstuvch264_la-gstuvch264_mjpgdemux.lo `test -f 'gstuvch264_mjpgdemux.c' || echo '$(srcdir)/'`gstuvch264_mjpgdemux.c
+
+libgstuvch264_la-gstuvch264_src.lo: gstuvch264_src.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstuvch264_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstuvch264_la_CFLAGS) $(CFLAGS) -MT libgstuvch264_la-gstuvch264_src.lo -MD -MP -MF $(DEPDIR)/libgstuvch264_la-gstuvch264_src.Tpo -c -o libgstuvch264_la-gstuvch264_src.lo `test -f 'gstuvch264_src.c' || echo '$(srcdir)/'`gstuvch264_src.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstuvch264_la-gstuvch264_src.Tpo $(DEPDIR)/libgstuvch264_la-gstuvch264_src.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gstuvch264_src.c' object='libgstuvch264_la-gstuvch264_src.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 $(libgstuvch264_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstuvch264_la_CFLAGS) $(CFLAGS) -c -o libgstuvch264_la-gstuvch264_src.lo `test -f 'gstuvch264_src.c' || echo '$(srcdir)/'`gstuvch264_src.c
+
+libgstuvch264_la-uvc_h264.lo: uvc_h264.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(libgstuvch264_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstuvch264_la_CFLAGS) $(CFLAGS) -MT libgstuvch264_la-uvc_h264.lo -MD -MP -MF $(DEPDIR)/libgstuvch264_la-uvc_h264.Tpo -c -o libgstuvch264_la-uvc_h264.lo `test -f 'uvc_h264.c' || echo '$(srcdir)/'`uvc_h264.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgstuvch264_la-uvc_h264.Tpo $(DEPDIR)/libgstuvch264_la-uvc_h264.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='uvc_h264.c' object='libgstuvch264_la-uvc_h264.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 $(libgstuvch264_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgstuvch264_la_CFLAGS) $(CFLAGS) -c -o libgstuvch264_la-uvc_h264.lo `test -f 'uvc_h264.c' || echo '$(srcdir)/'`uvc_h264.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/uvch264/gstuvch264.c b/sys/uvch264/gstuvch264.c
new file mode 100644
index 00000000..77ad73dc
--- /dev/null
+++ b/sys/uvch264/gstuvch264.c
@@ -0,0 +1,50 @@
+/* GStreamer
+ *
+ * uvch264: a plugin for handling UVC compliant H264 encoding cameras
+ *
+ * Copyright (C) 2012 Cisco Systems, Inc.
+ * Author: Youness Alaoui <youness.alaoui@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; either
+ * version 2.1 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
+ * 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <gst/gst.h>
+#include "gstuvch264_mjpgdemux.h"
+#include "gstuvch264_src.h"
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+ if (!gst_element_register (plugin, "uvch264_mjpgdemux", GST_RANK_NONE,
+ GST_TYPE_UVC_H264_MJPG_DEMUX))
+ return FALSE;
+
+ if (!gst_element_register (plugin, "uvch264_src", GST_RANK_NONE,
+ GST_TYPE_UVC_H264_SRC))
+ return FALSE;
+
+ return TRUE;
+}
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+ GST_VERSION_MINOR,
+ "uvch264",
+ "UVC compliant H264 encoding cameras plugin",
+ plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/sys/uvch264/gstuvch264_mjpgdemux.c b/sys/uvch264/gstuvch264_mjpgdemux.c
new file mode 100644
index 00000000..4bc68998
--- /dev/null
+++ b/sys/uvch264/gstuvch264_mjpgdemux.c
@@ -0,0 +1,723 @@
+/* GStreamer
+ *
+ * uvch264_mjpg_demux: a demuxer for muxed stream in UVC H264 compliant MJPG
+ *
+ * Copyright (C) 2012 Cisco Systems, Inc.
+ * Author: Youness Alaoui <youness.alaoui@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; either
+ * version 2.1 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
+ * 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/**
+ * SECTION:element-uvch264-mjpgdemux
+ * @short_description: UVC H264 compliant MJPG demuxer
+ *
+ * Parses a MJPG stream from a UVC H264 compliant encoding camera and extracts
+ * each muxed stream into separate pads.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <string.h>
+#include <linux/uvcvideo.h>
+#include <linux/usb/video.h>
+#include <sys/ioctl.h>
+
+#ifndef UVCIOC_GET_LAST_SCR
+#include <time.h>
+
+struct uvc_last_scr_sample
+{
+ __u32 dev_frequency;
+ __u32 dev_stc;
+ __u16 dev_sof;
+ struct timespec host_ts;
+ __u16 host_sof;
+};
+
+#define UVCIOC_GET_LAST_SCR _IOR('u', 0x23, struct uvc_last_scr_sample)
+#endif
+
+#include "gstuvch264_mjpgdemux.h"
+
+enum
+{
+ PROP_0,
+ PROP_DEVICE_FD,
+ PROP_NUM_CLOCK_SAMPLES
+};
+
+#define DEFAULT_NUM_CLOCK_SAMPLES 32
+
+static GstStaticPadTemplate mjpgsink_pad_template =
+GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("image/jpeg, "
+ "width = (int) [ 0, MAX ],"
+ "height = (int) [ 0, MAX ], " "framerate = (fraction) [ 0/1, MAX ] ")
+ );
+
+static GstStaticPadTemplate jpegsrc_pad_template =
+GST_STATIC_PAD_TEMPLATE ("jpeg",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("image/jpeg, "
+ "width = (int) [ 0, MAX ],"
+ "height = (int) [ 0, MAX ], " "framerate = (fraction) [ 0/1, MAX ] ")
+ );
+
+static GstStaticPadTemplate h264src_pad_template =
+GST_STATIC_PAD_TEMPLATE ("h264",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("video/x-h264, "
+ "width = (int) [ 0, MAX ], "
+ "height = (int) [ 0, MAX ], " "framerate = (fraction) [ 0/1, MAX ] ")
+ );
+
+static GstStaticPadTemplate yuy2src_pad_template =
+GST_STATIC_PAD_TEMPLATE ("yuy2",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("video/x-raw-yuv, "
+ "format = (fourcc) YUY2, "
+ "width = (int) [ 0, MAX ], "
+ "height = (int) [ 0, MAX ], " "framerate = (fraction) [ 0/1, MAX ] ")
+ );
+static GstStaticPadTemplate nv12src_pad_template =
+GST_STATIC_PAD_TEMPLATE ("nv12",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("video/x-raw-yuv, "
+ "format = (fourcc) NV21, "
+ "width = (int) [ 0, MAX ], "
+ "height = (int) [ 0, MAX ], " "framerate = (fraction) [ 0/1, MAX ] ")
+ );
+
+
+GST_DEBUG_CATEGORY_STATIC (uvc_h264_mjpg_demux_debug);
+#define GST_CAT_DEFAULT uvc_h264_mjpg_demux_debug
+
+typedef struct
+{
+ guint32 dev_stc;
+ guint32 dev_sof;
+ GstClockTime host_ts;
+ guint32 host_sof;
+} GstUvcH264ClockSample;
+
+struct _GstUvcH264MjpgDemuxPrivate
+{
+ int device_fd;
+ int num_clock_samples;
+ GstUvcH264ClockSample *clock_samples;
+ int last_sample;
+ int num_samples;
+ GstPad *sink_pad;
+ GstPad *jpeg_pad;
+ GstPad *h264_pad;
+ GstPad *yuy2_pad;
+ GstPad *nv12_pad;
+ GstCaps *h264_caps;
+ GstCaps *yuy2_caps;
+ GstCaps *nv12_caps;
+ guint16 h264_width;
+ guint16 h264_height;
+ guint16 yuy2_width;
+ guint16 yuy2_height;
+ guint16 nv12_width;
+ guint16 nv12_height;
+};
+
+typedef struct
+{
+ guint16 version;
+ guint16 header_len;
+ guint32 type;
+ guint16 width;
+ guint16 height;
+ guint32 frame_interval;
+ guint16 delay;
+ guint32 pts;
+} __attribute__ ((packed)) AuxiliaryStreamHeader;
+
+static void gst_uvc_h264_mjpg_demux_set_property (GObject * object,
+ guint prop_id, const GValue * value, GParamSpec * pspec);
+static void gst_uvc_h264_mjpg_demux_get_property (GObject * object,
+ guint prop_id, GValue * value, GParamSpec * pspec);
+static void gst_uvc_h264_mjpg_demux_dispose (GObject * object);
+static GstFlowReturn gst_uvc_h264_mjpg_demux_chain (GstPad * pad,
+ GstBuffer * buffer);
+static gboolean gst_uvc_h264_mjpg_demux_sink_setcaps (GstPad * pad,
+ GstCaps * caps);
+static GstCaps *gst_uvc_h264_mjpg_demux_getcaps (GstPad * pad);
+
+#define _do_init(x) \
+ GST_DEBUG_CATEGORY_INIT (uvc_h264_mjpg_demux_debug, \
+ "uvch264_mjpgdemux", 0, "UVC H264 MJPG Demuxer");
+
+GST_BOILERPLATE_FULL (GstUvcH264MjpgDemux, gst_uvc_h264_mjpg_demux, GstElement,
+ GST_TYPE_ELEMENT, _do_init);
+
+static void
+gst_uvc_h264_mjpg_demux_base_init (gpointer g_class)
+{
+ GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
+ GstPadTemplate *pt;
+
+ /* do not use gst_element_class_add_static_pad_template to stay compatible
+ * with gstreamer 0.10.35 */
+ pt = gst_static_pad_template_get (&mjpgsink_pad_template);
+ gst_element_class_add_pad_template (element_class, pt);
+ gst_object_unref (pt);
+ pt = gst_static_pad_template_get (&jpegsrc_pad_template);
+ gst_element_class_add_pad_template (element_class, pt);
+ gst_object_unref (pt);
+ pt = gst_static_pad_template_get (&h264src_pad_template);
+ gst_element_class_add_pad_template (element_class, pt);
+ gst_object_unref (pt);
+ pt = gst_static_pad_template_get (&yuy2src_pad_template);
+ gst_element_class_add_pad_template (element_class, pt);
+ gst_object_unref (pt);
+ pt = gst_static_pad_template_get (&nv12src_pad_template);
+ gst_element_class_add_pad_template (element_class, pt);
+ gst_object_unref (pt);
+
+ gst_element_class_set_details_simple (element_class,
+ "UVC H264 MJPG Demuxer",
+ "Video/Demuxer",
+ "Demux UVC H264 auxiliary streams from MJPG images",
+ "Youness Alaoui <youness.alaoui@collabora.co.uk>");
+}
+
+static void
+gst_uvc_h264_mjpg_demux_class_init (GstUvcH264MjpgDemuxClass * klass)
+{
+ GObjectClass *gobject_class = (GObjectClass *) klass;
+
+ g_type_class_add_private (gobject_class, sizeof (GstUvcH264MjpgDemuxPrivate));
+
+ gobject_class->set_property = gst_uvc_h264_mjpg_demux_set_property;
+ gobject_class->get_property = gst_uvc_h264_mjpg_demux_get_property;
+ gobject_class->dispose = gst_uvc_h264_mjpg_demux_dispose;
+
+
+ g_object_class_install_property (gobject_class, PROP_DEVICE_FD,
+ g_param_spec_int ("device-fd", "device-fd",
+ "File descriptor of the v4l2 device",
+ -1, G_MAXINT, -1, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (gobject_class, PROP_NUM_CLOCK_SAMPLES,
+ g_param_spec_int ("num-clock-samples", "num-clock-samples",
+ "Number of clock samples to gather for the PTS synchronization"
+ " (-1 = unlimited)",
+ 0, G_MAXINT, DEFAULT_NUM_CLOCK_SAMPLES,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
+}
+
+static void
+gst_uvc_h264_mjpg_demux_init (GstUvcH264MjpgDemux * self,
+ GstUvcH264MjpgDemuxClass * g_class)
+{
+ self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GST_TYPE_UVC_H264_MJPG_DEMUX,
+ GstUvcH264MjpgDemuxPrivate);
+
+
+ self->priv->device_fd = -1;
+
+ /* create the sink and src pads */
+ self->priv->sink_pad =
+ gst_pad_new_from_static_template (&mjpgsink_pad_template, "sink");
+ gst_pad_set_chain_function (self->priv->sink_pad,
+ GST_DEBUG_FUNCPTR (gst_uvc_h264_mjpg_demux_chain));
+ gst_pad_set_setcaps_function (self->priv->sink_pad,
+ GST_DEBUG_FUNCPTR (gst_uvc_h264_mjpg_demux_sink_setcaps));
+ gst_pad_set_getcaps_function (self->priv->sink_pad,
+ GST_DEBUG_FUNCPTR (gst_uvc_h264_mjpg_demux_getcaps));
+ gst_element_add_pad (GST_ELEMENT (self), self->priv->sink_pad);
+
+ /* JPEG */
+ self->priv->jpeg_pad =
+ gst_pad_new_from_static_template (&jpegsrc_pad_template, "jpeg");
+ gst_pad_set_getcaps_function (self->priv->jpeg_pad,
+ GST_DEBUG_FUNCPTR (gst_uvc_h264_mjpg_demux_getcaps));
+ gst_element_add_pad (GST_ELEMENT (self), self->priv->jpeg_pad);
+
+ /* H264 */
+ self->priv->h264_pad =
+ gst_pad_new_from_static_template (&h264src_pad_template, "h264");
+ gst_pad_use_fixed_caps (self->priv->h264_pad);
+ gst_element_add_pad (GST_ELEMENT (self), self->priv->h264_pad);
+
+ /* YUY2 */
+ self->priv->yuy2_pad =
+ gst_pad_new_from_static_template (&yuy2src_pad_template, "yuy2");
+ gst_pad_use_fixed_caps (self->priv->yuy2_pad);
+ gst_element_add_pad (GST_ELEMENT (self), self->priv->yuy2_pad);
+
+ /* NV12 */
+ self->priv->nv12_pad =
+ gst_pad_new_from_static_template (&nv12src_pad_template, "nv12");
+ gst_pad_use_fixed_caps (self->priv->nv12_pad);
+ gst_element_add_pad (GST_ELEMENT (self), self->priv->nv12_pad);
+
+ self->priv->h264_caps = gst_caps_new_simple ("video/x-h264", NULL);
+ self->priv->yuy2_caps = gst_caps_new_simple ("video/x-raw-yuv",
+ "format", GST_TYPE_FOURCC, GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'), NULL);
+ self->priv->nv12_caps = gst_caps_new_simple ("video/x-raw-yuv",
+ "format", GST_TYPE_FOURCC, GST_MAKE_FOURCC ('N', 'V', '1', '2'), NULL);
+ self->priv->h264_width = self->priv->h264_height = 0;
+ self->priv->yuy2_width = self->priv->yuy2_height = 0;
+ self->priv->nv12_width = self->priv->nv12_height = 0;
+}
+
+static void
+gst_uvc_h264_mjpg_demux_dispose (GObject * object)
+{
+ GstUvcH264MjpgDemux *self = GST_UVC_H264_MJPG_DEMUX (object);
+
+ if (self->priv->h264_caps)
+ gst_caps_unref (self->priv->h264_caps);
+ self->priv->h264_caps = NULL;
+ if (self->priv->yuy2_caps)
+ gst_caps_unref (self->priv->yuy2_caps);
+ self->priv->yuy2_caps = NULL;
+ if (self->priv->nv12_caps)
+ gst_caps_unref (self->priv->nv12_caps);
+ self->priv->nv12_caps = NULL;
+ if (self->priv->clock_samples)
+ g_free (self->priv->clock_samples);
+ self->priv->clock_samples = NULL;
+
+ G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+static void
+gst_uvc_h264_mjpg_demux_set_property (GObject * object,
+ guint prop_id, const GValue * value, GParamSpec * pspec)
+{
+ GstUvcH264MjpgDemux *self = GST_UVC_H264_MJPG_DEMUX (object);
+
+ switch (prop_id) {
+ case PROP_DEVICE_FD:
+ self->priv->device_fd = g_value_get_int (value);
+ break;
+ case PROP_NUM_CLOCK_SAMPLES:
+ self->priv->num_clock_samples = g_value_get_int (value);
+ if (self->priv->clock_samples) {
+ if (self->priv->num_clock_samples) {
+ self->priv->clock_samples = g_realloc_n (self->priv->clock_samples,
+ self->priv->num_clock_samples, sizeof (GstUvcH264ClockSample));
+ if (self->priv->num_samples > self->priv->num_clock_samples) {
+ self->priv->num_samples = self->priv->num_clock_samples;
+ if (self->priv->last_sample >= self->priv->num_samples)
+ self->priv->last_sample = self->priv->num_samples - 1;
+ }
+ } else {
+ g_free (self->priv->clock_samples);
+ self->priv->clock_samples = NULL;
+ self->priv->last_sample = -1;
+ self->priv->num_samples = 0;
+ }
+ }
+ if (self->priv->num_clock_samples > 0) {
+ self->priv->clock_samples = g_malloc0_n (self->priv->num_clock_samples,
+ sizeof (GstUvcH264ClockSample));
+ self->priv->last_sample = -1;
+ self->priv->num_samples = 0;
+ }
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (self, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gst_uvc_h264_mjpg_demux_get_property (GObject * object,
+ guint prop_id, GValue * value, GParamSpec * pspec)
+{
+ GstUvcH264MjpgDemux *self = GST_UVC_H264_MJPG_DEMUX (object);
+
+ switch (prop_id) {
+ case PROP_DEVICE_FD:
+ g_value_set_int (value, self->priv->device_fd);
+ break;
+ case PROP_NUM_CLOCK_SAMPLES:
+ g_value_set_int (value, self->priv->num_clock_samples);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (self, prop_id, pspec);
+ break;
+ }
+}
+
+
+static gboolean
+gst_uvc_h264_mjpg_demux_sink_setcaps (GstPad * pad, GstCaps * caps)
+{
+ GstUvcH264MjpgDemux *self = GST_UVC_H264_MJPG_DEMUX (GST_OBJECT_PARENT (pad));
+
+ return gst_pad_set_caps (self->priv->jpeg_pad, caps);
+}
+
+static GstCaps *
+gst_uvc_h264_mjpg_demux_getcaps (GstPad * pad)
+{
+ GstUvcH264MjpgDemux *self = GST_UVC_H264_MJPG_DEMUX (GST_OBJECT_PARENT (pad));
+ GstCaps *result = NULL;
+
+ if (pad == self->priv->jpeg_pad)
+ result = gst_pad_peer_get_caps (self->priv->sink_pad);
+ else if (pad == self->priv->sink_pad)
+ result = gst_pad_peer_get_caps (self->priv->jpeg_pad);
+
+ /* TODO: intersect with template and fixate caps */
+ if (result == NULL)
+ result = gst_caps_copy (gst_pad_get_pad_template_caps (pad));
+
+ return result;
+}
+
+static gboolean
+_pts_to_timestamp (GstUvcH264MjpgDemux * self, GstBuffer * buf, guint32 pts)
+{
+ GstUvcH264MjpgDemuxPrivate *priv = self->priv;
+ GstUvcH264ClockSample *current_sample = NULL;
+ GstUvcH264ClockSample *oldest_sample = NULL;
+ guint32 next_sample;
+ struct uvc_last_scr_sample sample;
+ guint32 dev_sof;
+
+ if (self->priv->device_fd == -1 || priv->clock_samples == NULL)
+ return FALSE;
+
+ if (-1 == ioctl (priv->device_fd, UVCIOC_GET_LAST_SCR, &sample)) {
+ //GST_WARNING_OBJECT (self, " GET_LAST_SCR error");
+ return FALSE;
+ }
+
+ dev_sof = (guint32) (sample.dev_sof + 2048) << 16;
+ if (priv->num_samples > 0 &&
+ priv->clock_samples[priv->last_sample].dev_sof == dev_sof) {
+ current_sample = &priv->clock_samples[priv->last_sample];
+ } else {
+ next_sample = (priv->last_sample + 1) % priv->num_clock_samples;
+ current_sample = &priv->clock_samples[next_sample];
+ current_sample->dev_stc = sample.dev_stc;
+ current_sample->dev_sof = dev_sof;
+ current_sample->host_ts = sample.host_ts.tv_sec * GST_SECOND +
+ sample.host_ts.tv_nsec * GST_NSECOND;
+ current_sample->host_sof = (guint32) (sample.host_sof + 2048) << 16;
+
+ priv->num_samples++;
+ priv->last_sample = next_sample;
+
+ /* Debug printing */
+ GST_DEBUG_OBJECT (self, "device frequency: %u", sample.dev_frequency);
+ GST_DEBUG_OBJECT (self, "dev_sof: %u", sample.dev_sof);
+ GST_DEBUG_OBJECT (self, "dev_stc: %u", sample.dev_stc);
+ GST_DEBUG_OBJECT (self, "host_ts: %lu -- %" GST_TIME_FORMAT,
+ current_sample->host_ts, GST_TIME_ARGS (current_sample->host_ts));
+ GST_DEBUG_OBJECT (self, "host_sof: %u", sample.host_sof);
+ GST_DEBUG_OBJECT (self, "PTS: %u", pts);
+ GST_DEBUG_OBJECT (self, "Diff: %u - %f\n", sample.dev_stc - pts,
+ (gdouble) (sample.dev_stc - pts) / sample.dev_frequency);
+ }
+
+ if (priv->num_samples < priv->num_clock_samples)
+ return FALSE;
+
+ next_sample = (priv->last_sample + 1) % priv->num_clock_samples;
+ oldest_sample = &priv->clock_samples[next_sample];
+
+ /* TODO: Use current_sample and oldest_sample to do the
+ * double linear regression and calculate a new PTS */
+ (void) oldest_sample;
+
+ return TRUE;
+}
+
+static GstFlowReturn
+gst_uvc_h264_mjpg_demux_chain (GstPad * pad, GstBuffer * buf)
+{
+ GstUvcH264MjpgDemux *self;
+ GstFlowReturn ret = GST_FLOW_OK;
+ GstBufferList *jpeg_buf = gst_buffer_list_new ();
+ GstBufferListIterator *jpeg_it = gst_buffer_list_iterate (jpeg_buf);
+ GstBufferList *aux_buf = NULL;
+ GstBufferListIterator *aux_it = NULL;
+ AuxiliaryStreamHeader aux_header = { 0 };
+ GstBuffer *sub_buffer = NULL;
+ guint32 aux_size = 0;
+ GstPad *aux_pad = NULL;
+ GstCaps **aux_caps = NULL;
+ guint last_offset;
+ guint i;
+ guchar *data;
+ guint size;
+
+ self = GST_UVC_H264_MJPG_DEMUX (GST_PAD_PARENT (pad));
+
+ last_offset = 0;
+ data = GST_BUFFER_DATA (buf);
+ size = GST_BUFFER_SIZE (buf);
+ if (data == NULL || size == 0) {
+ ret = gst_pad_push (self->priv->jpeg_pad, buf);
+ goto done;
+ }
+
+ gst_buffer_list_iterator_add_group (jpeg_it);
+ for (i = 0; i < size - 1; i++) {
+ /* Check for APP4 (0xe4) marker in the jpeg */
+ if (data[i] == 0xff && data[i + 1] == 0xe4) {
+ guint16 segment_size;
+
+ /* Sanity check sizes and get segment size */
+ if (i + 4 >= size) {
+ GST_ELEMENT_ERROR (self, STREAM, DEMUX,
+ ("Not enough data to read marker size"), (NULL));
+ ret = GST_FLOW_ERROR;
+ goto done;
+ }
+ segment_size = GUINT16_FROM_BE (*((guint16 *) (data + i + 2)));
+
+ if (i + segment_size + 2 >= size) {
+ GST_ELEMENT_ERROR (self, STREAM, DEMUX,
+ ("Not enough data to read marker content"), (NULL));
+ ret = GST_FLOW_ERROR;
+ goto done;
+ }
+ GST_DEBUG_OBJECT (self,
+ "Found APP4 marker (%d). JPG: %d-%d - APP4: %d - %d", segment_size,
+ last_offset, i, i, i + 2 + segment_size);
+
+ /* Add JPEG data between the last offset and this market */
+ if (i - last_offset > 0) {
+ sub_buffer = gst_buffer_create_sub (buf, last_offset, i - last_offset);
+ gst_buffer_copy_metadata (sub_buffer, buf, GST_BUFFER_COPY_ALL);
+ gst_buffer_list_iterator_add (jpeg_it, sub_buffer);
+ }
+ last_offset = i + 2 + segment_size;
+
+ /* Reset i/segment size to the app4 data (ignore marker header/size) */
+ i += 4;
+ segment_size -= 2;
+
+ /* If this is a new auxiliary stream, initialize everything properly */
+ if (aux_buf == NULL) {
+ if (segment_size < sizeof (aux_header) + sizeof (aux_size)) {
+ GST_ELEMENT_ERROR (self, STREAM, DEMUX,
+ ("Not enough data to read aux header"), (NULL));
+ ret = GST_FLOW_ERROR;
+ goto done;
+ }
+
+ aux_header = *((AuxiliaryStreamHeader *) (data + i));
+ /* version should be little endian but it looks more like BE */
+ aux_header.version = GUINT16_FROM_BE (aux_header.version);
+ aux_header.header_len = GUINT16_FROM_LE (aux_header.header_len);
+ aux_header.width = GUINT16_FROM_LE (aux_header.width);
+ aux_header.height = GUINT16_FROM_LE (aux_header.height);
+ aux_header.frame_interval = GUINT32_FROM_LE (aux_header.frame_interval);
+ aux_header.delay = GUINT16_FROM_LE (aux_header.delay);
+ aux_header.pts = GUINT32_FROM_LE (aux_header.pts);
+ GST_DEBUG_OBJECT (self, "New auxiliary stream : v%d - %d bytes - %"
+ GST_FOURCC_FORMAT " %dx%d -- %d *100ns -- %d ms -- %d",
+ aux_header.version, aux_header.header_len,
+ GST_FOURCC_ARGS (aux_header.type),
+ aux_header.width, aux_header.height,
+ aux_header.frame_interval, aux_header.delay, aux_header.pts);
+ aux_size = *((guint32 *) (data + i + aux_header.header_len));
+ GST_DEBUG_OBJECT (self, "Auxiliary stream size : %d bytes", aux_size);
+
+ if (aux_size > 0) {
+ guint16 *width = NULL;
+ guint16 *height = NULL;
+
+ /* Find the auxiliary stream's pad and caps */
+ switch (aux_header.type) {
+ case GST_MAKE_FOURCC ('H', '2', '6', '4'):
+ aux_pad = self->priv->h264_pad;
+ aux_caps = &self->priv->h264_caps;
+ width = &self->priv->h264_width;
+ height = &self->priv->h264_height;
+ break;
+ case GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'):
+ aux_pad = self->priv->yuy2_pad;
+ aux_caps = &self->priv->yuy2_caps;
+ width = &self->priv->yuy2_width;
+ height = &self->priv->yuy2_height;
+ break;
+ case GST_MAKE_FOURCC ('N', 'V', '1', '2'):
+ aux_pad = self->priv->nv12_pad;
+ aux_caps = &self->priv->nv12_caps;
+ width = &self->priv->nv12_width;
+ height = &self->priv->nv12_height;
+ break;
+ default:
+ GST_ELEMENT_ERROR (self, STREAM, DEMUX,
+ ("Unknown auxiliary stream format : %" GST_FOURCC_FORMAT,
+ GST_FOURCC_ARGS (aux_header.type)), (NULL));
+ ret = GST_FLOW_ERROR;
+ break;
+ }
+
+ if (ret != GST_FLOW_OK)
+ goto done;
+
+ if (*width != aux_header.width || *height != aux_header.height) {
+ GstCaps *peercaps = gst_pad_peer_get_caps (aux_pad);
+ GstStructure *s = NULL;
+ gint fps_num = 1000000000 / aux_header.frame_interval;
+ gint fps_den = 100;
+
+ /* TODO: intersect with pad template */
+ GST_DEBUG ("peercaps : %" GST_PTR_FORMAT, peercaps);
+ if (peercaps && !gst_caps_is_any (peercaps))
+ s = gst_caps_get_structure (peercaps, 0);
+ if (s) {
+ /* TODO: make sure it contains the right format/width/height */
+ gst_structure_fixate_field_nearest_fraction (s, "framerate",
+ fps_num, fps_den);
+ GST_DEBUG ("Fixated struct : %" GST_PTR_FORMAT, s);
+ gst_structure_get_fraction (s, "framerate", &fps_num, &fps_den);
+ }
+ if (peercaps)
+ gst_caps_unref (peercaps);
+
+ *width = aux_header.width;
+ *height = aux_header.height;
+ *aux_caps = gst_caps_make_writable (*aux_caps);
+ /* FIXME: fps must match the caps and be allowed and represent
+ our first buffer */
+ gst_caps_set_simple (*aux_caps,
+ "width", G_TYPE_INT, aux_header.width,
+ "height", G_TYPE_INT, aux_header.height,
+ "framerate", GST_TYPE_FRACTION, fps_num, fps_den, NULL);
+ if (!gst_pad_set_caps (aux_pad, *aux_caps)) {
+ ret = GST_FLOW_NOT_NEGOTIATED;
+ goto done;
+ }
+ }
+
+ /* Create new auxiliary buffer list and adjust i/segment size */
+ aux_buf = gst_buffer_list_new ();
+ aux_it = gst_buffer_list_iterate (aux_buf);
+ gst_buffer_list_iterator_add_group (aux_it);
+ }
+
+ i += sizeof (aux_header) + sizeof (aux_size);
+ segment_size -= sizeof (aux_header) + sizeof (aux_size);
+ }
+
+ if (segment_size > aux_size) {
+ GST_ELEMENT_ERROR (self, STREAM, DEMUX,
+ ("Expected %d auxiliary data, got %d bytes", aux_size,
+ segment_size), (NULL));
+ ret = GST_FLOW_ERROR;
+ goto done;
+ }
+
+ if (segment_size > 0) {
+ sub_buffer = gst_buffer_create_sub (buf, i, segment_size);
+ GST_BUFFER_DURATION (sub_buffer) =
+ aux_header.frame_interval * 100 * GST_NSECOND;
+ gst_buffer_copy_metadata (sub_buffer, buf, GST_BUFFER_COPY_TIMESTAMPS);
+ gst_buffer_set_caps (sub_buffer, *aux_caps);
+
+ _pts_to_timestamp (self, sub_buffer, aux_header.pts);
+
+ gst_buffer_list_iterator_add (aux_it, sub_buffer);
+
+ aux_size -= segment_size;
+
+ /* Push completed aux data */
+ if (aux_size == 0) {
+ gst_buffer_list_iterator_free (aux_it);
+ aux_it = NULL;
+ GST_DEBUG_OBJECT (self, "Pushing %" GST_FOURCC_FORMAT
+ " auxiliary buffer %" GST_PTR_FORMAT,
+ GST_FOURCC_ARGS (aux_header.type), *aux_caps);
+ ret = gst_pad_push_list (aux_pad, aux_buf);
+ aux_buf = NULL;
+ if (ret != GST_FLOW_OK) {
+ GST_WARNING_OBJECT (self, "Error pushing %" GST_FOURCC_FORMAT
+ " auxiliary data", GST_FOURCC_ARGS (aux_header.type));
+ goto done;
+ }
+ }
+ }
+
+ i += segment_size - 1;
+ } else if (data[i] == 0xff && data[i + 1] == 0xda) {
+
+ /* The APP4 markers must be before the SOS marker, so this is the end */
+ GST_DEBUG_OBJECT (self, "Found SOS marker.");
+
+ sub_buffer = gst_buffer_create_sub (buf, last_offset, size - last_offset);
+ gst_buffer_copy_metadata (sub_buffer, buf, GST_BUFFER_COPY_ALL);
+ gst_buffer_list_iterator_add (jpeg_it, sub_buffer);
+ last_offset = size;
+ break;
+ }
+ }
+ gst_buffer_list_iterator_free (jpeg_it);
+ jpeg_it = NULL;
+
+ if (aux_buf != NULL) {
+ GST_ELEMENT_ERROR (self, STREAM, DEMUX,
+ ("Incomplete auxiliary stream. %d bytes missing", aux_size), (NULL));
+ ret = GST_FLOW_ERROR;
+ goto done;
+ }
+
+ if (last_offset != size) {
+ /* this means there was no SOS marker in the jpg, so we assume the JPG was
+ just a container */
+ GST_DEBUG_OBJECT (self, "SOS marker wasn't found. MJPG is container only");
+ gst_buffer_list_unref (jpeg_buf);
+ jpeg_buf = NULL;
+ } else {
+ ret = gst_pad_push_list (self->priv->jpeg_pad, jpeg_buf);
+ jpeg_buf = NULL;
+ }
+
+ if (ret != GST_FLOW_OK) {
+ GST_WARNING_OBJECT (self, "Error pushing jpeg data");
+ goto done;
+ }
+
+done:
+ /* In case of error, unref whatever was left */
+ if (aux_it)
+ gst_buffer_list_iterator_free (aux_it);
+ if (aux_buf)
+ gst_buffer_list_unref (aux_buf);
+ if (jpeg_it)
+ gst_buffer_list_iterator_free (jpeg_it);
+ if (jpeg_buf)
+ gst_buffer_list_unref (jpeg_buf);
+
+ /* We must always unref the input buffer since we never push it out */
+ gst_buffer_unref (buf);
+
+ return ret;
+}
diff --git a/sys/uvch264/gstuvch264_mjpgdemux.h b/sys/uvch264/gstuvch264_mjpgdemux.h
new file mode 100644
index 00000000..8c444520
--- /dev/null
+++ b/sys/uvch264/gstuvch264_mjpgdemux.h
@@ -0,0 +1,66 @@
+/* GStreamer
+ *
+ * uvch264_mjpg_demux: a demuxer for muxed stream in UVC H264 compliant MJPG
+ *
+ * Copyright (C) 2012 Cisco Systems, Inc.
+ * Author: Youness Alaoui <youness.alaoui@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; either
+ * version 2.1 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
+ * 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_UVC_H264_MJPG_DEMUX_H__
+#define __GST_UVC_H264_MJPG_DEMUX_H__
+
+#include <gst/gst.h>
+
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_UVC_H264_MJPG_DEMUX \
+ (gst_uvc_h264_mjpg_demux_get_type())
+#define GST_UVC_H264_MJPG_DEMUX(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj), \
+ GST_TYPE_UVC_H264_MJPG_DEMUX, \
+ GstUvcH264MjpgDemux))
+#define GST_UVC_H264_MJPG_DEMUX_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass), \
+ GST_TYPE_UVC_H264_MJPG_DEMUX, \
+ GstUvcH264MjpgDemuxClass))
+#define GST_IS_UVC_H264_MJPG_DEMUX(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj), \
+ GST_TYPE_UVC_H264_MJPG_DEMUX))
+#define GST_IS_UVC_H264_MJPG_DEMUX_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass), \
+ GST_TYPE_UVC_H264_MJPG_DEMUX))
+
+typedef struct _GstUvcH264MjpgDemux GstUvcH264MjpgDemux;
+typedef struct _GstUvcH264MjpgDemuxPrivate GstUvcH264MjpgDemuxPrivate;
+typedef struct _GstUvcH264MjpgDemuxClass GstUvcH264MjpgDemuxClass;
+
+struct _GstUvcH264MjpgDemux {
+ GstElement element;
+ GstUvcH264MjpgDemuxPrivate *priv;
+};
+
+struct _GstUvcH264MjpgDemuxClass {
+ GstElementClass parent_class;
+};
+
+GType gst_uvc_h264_mjpg_demux_get_type (void);
+
+G_END_DECLS
+
+#endif /* __GST_UVC_H264_MJPG_DEMUX_H__ */
diff --git a/sys/uvch264/gstuvch264_src.c b/sys/uvch264/gstuvch264_src.c
new file mode 100644
index 00000000..04bbee27
--- /dev/null
+++ b/sys/uvch264/gstuvch264_src.c
@@ -0,0 +1,3141 @@
+/*
+ * GStreamer
+ *
+ * Copyright (C) 2012 Cisco Systems, Inc.
+ * Author: Youness Alaoui <youness.alaoui@collabora.co.uk>
+ *
+ * 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-uvch264-src
+ *
+ * A camera bin src element that wraps v4l2src and implements UVC H264
+ * Extension Units (XU) to control the H264 encoder in the camera
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "gstuvch264_src.h"
+
+#include <gst/video/video.h>
+#include <linux/uvcvideo.h>
+#include <linux/usb/video.h>
+#include <sys/ioctl.h>
+#include <string.h>
+
+#include "gstuvch264_src.h"
+#include "gstuvch264-marshal.h"
+#include <gudev/gudev.h>
+#include <libusb.h>
+
+typedef struct
+{
+ int8_t bLength;
+ int8_t bDescriptorType;
+ int8_t bDescriptorSubType;
+ int8_t bUnitID;
+ uint8_t guidExtensionCode[16];
+} __attribute__ ((__packed__)) xu_descriptor;
+
+#define GUID_FORMAT "02X%02X%02X%02X-%02X%02X%02X%02X-"\
+ "%02X%02X%02X%02X-%02X%02X%02X%02X"
+#define GUID_ARGS(guid) guid[0], guid[1], guid[2], guid[3], \
+ guid[4], guid[5], guid[6], guid[7], \
+ guid[8], guid[9], guid[10], guid[11], \
+ guid[12], guid[13], guid[14], guid[15]
+
+#define USB_VIDEO_CONTROL 1
+#define USB_VIDEO_CONTROL_INTERFACE 0x24
+#define USB_VIDEO_CONTROL_XU_TYPE 0x06
+
+enum
+{
+ PROP_0,
+ /* uvch264_src properties */
+ PROP_COLORSPACE_NAME,
+ PROP_JPEG_DECODER_NAME,
+ PROP_NUM_CLOCK_SAMPLES,
+ /* v4l2src properties */
+ PROP_NUM_BUFFERS,
+ PROP_DEVICE,
+ PROP_DEVICE_NAME,
+ /* Static controls */
+ PROP_INITIAL_BITRATE,
+ PROP_SLICE_UNITS,
+ PROP_SLICE_MODE,
+ PROP_IFRAME_PERIOD,
+ PROP_USAGE_TYPE,
+ PROP_ENTROPY,
+ PROP_ENABLE_SEI,
+ PROP_NUM_REORDER_FRAMES,
+ PROP_PREVIEW_FLIPPED,
+ PROP_LEAKY_BUCKET_SIZE,
+ /* Dynamic controls */
+ PROP_RATE_CONTROL,
+ PROP_FIXED_FRAMERATE,
+ PROP_MAX_MBPS, /* read-only */
+ PROP_LEVEL_IDC,
+ PROP_PEAK_BITRATE,
+ PROP_AVERAGE_BITRATE,
+ PROP_MIN_IFRAME_QP,
+ PROP_MAX_IFRAME_QP,
+ PROP_MIN_PFRAME_QP,
+ PROP_MAX_PFRAME_QP,
+ PROP_MIN_BFRAME_QP,
+ PROP_MAX_BFRAME_QP,
+ PROP_LTR_BUFFER_SIZE,
+ PROP_LTR_ENCODER_CONTROL,
+};
+/* In caps : frame interval (fps), width, height, profile, mux */
+/* Ignored: temporal, spatial, SNR, MVC views, version, reset */
+/* Events: LTR, generate IDR */
+
+enum
+{
+ /* action signals */
+ SIGNAL_GET_ENUM_SETTING,
+ SIGNAL_GET_BOOLEAN_SETTING,
+ SIGNAL_GET_INT_SETTING,
+ LAST_SIGNAL
+};
+
+static guint _signals[LAST_SIGNAL];
+
+/* Default values */
+#define DEFAULT_COLORSPACE_NAME "ffmpegcolorspace"
+#define DEFAULT_JPEG_DECODER_NAME "jpegdec"
+#define DEFAULT_NUM_CLOCK_SAMPLES 0
+#define DEFAULT_NUM_BUFFERS -1
+#define DEFAULT_DEVICE "/dev/video0"
+#define DEFAULT_DEVICE_NAME NULL
+#define DEFAULT_INITIAL_BITRATE 3000000
+#define DEFAULT_SLICE_UNITS 4
+#define DEFAULT_SLICE_MODE UVC_H264_SLICEMODE_SLICEPERFRAME
+#define DEFAULT_IFRAME_PERIOD 10000
+#define DEFAULT_USAGE_TYPE UVC_H264_USAGETYPE_REALTIME
+#define DEFAULT_ENTROPY UVC_H264_ENTROPY_CAVLC
+#define DEFAULT_ENABLE_SEI FALSE
+#define DEFAULT_NUM_REORDER_FRAMES 0
+#define DEFAULT_PREVIEW_FLIPPED FALSE
+#define DEFAULT_LEAKY_BUCKET_SIZE 1000
+#define DEFAULT_RATE_CONTROL UVC_H264_RATECONTROL_CBR
+#define DEFAULT_FIXED_FRAMERATE FALSE
+#define DEFAULT_LEVEL_IDC 40
+#define DEFAULT_PEAK_BITRATE DEFAULT_INITIAL_BITRATE
+#define DEFAULT_AVERAGE_BITRATE DEFAULT_INITIAL_BITRATE
+#define DEFAULT_MIN_QP 10
+#define DEFAULT_MAX_QP 46
+#define DEFAULT_LTR_BUFFER_SIZE 0
+#define DEFAULT_LTR_ENCODER_CONTROL 0
+
+#define NSEC_PER_SEC (G_USEC_PER_SEC * 1000)
+
+
+GST_DEBUG_CATEGORY (uvc_h264_src_debug);
+#define GST_CAT_DEFAULT uvc_h264_src_debug
+
+GST_BOILERPLATE (GstUvcH264Src, gst_uvc_h264_src,
+ GstBaseCameraSrc, GST_TYPE_BASE_CAMERA_SRC);
+
+#define GST_UVC_H264_SRC_VF_CAPS_STR \
+ GST_VIDEO_CAPS_RGB ";" \
+ GST_VIDEO_CAPS_RGB";" \
+ GST_VIDEO_CAPS_BGR";" \
+ GST_VIDEO_CAPS_RGBx";" \
+ GST_VIDEO_CAPS_xRGB";" \
+ GST_VIDEO_CAPS_BGRx";" \
+ GST_VIDEO_CAPS_xBGR";" \
+ GST_VIDEO_CAPS_RGBA";" \
+ GST_VIDEO_CAPS_ARGB";" \
+ GST_VIDEO_CAPS_BGRA";" \
+ GST_VIDEO_CAPS_ABGR";" \
+ GST_VIDEO_CAPS_RGB_16";" \
+ GST_VIDEO_CAPS_RGB_15";" \
+ "video/x-raw-rgb, bpp = (int)8, depth = (int)8, " \
+ "width = "GST_VIDEO_SIZE_RANGE" , " \
+ "height = " GST_VIDEO_SIZE_RANGE ", " \
+ "framerate = "GST_VIDEO_FPS_RANGE ";" \
+ GST_VIDEO_CAPS_GRAY8";" \
+ GST_VIDEO_CAPS_GRAY16("BIG_ENDIAN")";" \
+ GST_VIDEO_CAPS_GRAY16("LITTLE_ENDIAN")";" \
+ GST_VIDEO_CAPS_YUV ("{ I420 , NV12 , NV21 , YV12 , YUY2 ," \
+ " Y42B , Y444 , YUV9 , YVU9 , Y41B , Y800 , Y8 , GREY ," \
+ " Y16 , UYVY , YVYU , IYU1 , v308 , AYUV, A420}") ";" \
+ "image/jpeg, " \
+ "width = " GST_VIDEO_SIZE_RANGE ", " \
+ "height = " GST_VIDEO_SIZE_RANGE ", " \
+ "framerate = " GST_VIDEO_FPS_RANGE
+
+#define GST_UVC_H264_SRC_VID_CAPS_STR \
+ GST_UVC_H264_SRC_VF_CAPS_STR ";" \
+ "video/x-h264, " \
+ "width = " GST_VIDEO_SIZE_RANGE ", " \
+ "height = " GST_VIDEO_SIZE_RANGE ", " \
+ "framerate = " GST_VIDEO_FPS_RANGE ", " \
+ "stream-format = (string) { byte-stream, avc }, " \
+ "alignment = (string) { au }, " \
+ "profile = (string) { high, main, baseline, constrained-baseline }"
+
+static GstStaticPadTemplate vfsrc_template =
+GST_STATIC_PAD_TEMPLATE (GST_BASE_CAMERA_SRC_VIEWFINDER_PAD_NAME,
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS (GST_UVC_H264_SRC_VF_CAPS_STR));
+
+static GstStaticPadTemplate imgsrc_template =
+GST_STATIC_PAD_TEMPLATE (GST_BASE_CAMERA_SRC_IMAGE_PAD_NAME,
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS_NONE);
+
+static GstStaticPadTemplate vidsrc_template =
+GST_STATIC_PAD_TEMPLATE (GST_BASE_CAMERA_SRC_VIDEO_PAD_NAME,
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS (GST_UVC_H264_SRC_VID_CAPS_STR));
+
+
+static void gst_uvc_h264_src_dispose (GObject * object);
+static void gst_uvc_h264_src_set_property (GObject * object,
+ guint prop_id, const GValue * value, GParamSpec * pspec);
+static void gst_uvc_h264_src_get_property (GObject * object,
+ guint prop_id, GValue * value, GParamSpec * pspec);
+static gboolean gst_uvc_h264_src_event (GstPad * pad, GstEvent * event);
+static gboolean gst_uvc_h264_src_send_event (GstElement * element,
+ GstEvent * event);
+static gboolean gst_uvc_h264_src_construct_pipeline (GstBaseCameraSrc *
+ bcamsrc);
+static gboolean gst_uvc_h264_src_set_mode (GstBaseCameraSrc * bcamsrc,
+ GstCameraBinMode mode);
+static gboolean gst_uvc_h264_src_start_capture (GstBaseCameraSrc * camerasrc);
+static void gst_uvc_h264_src_stop_capture (GstBaseCameraSrc * camerasrc);
+static GstStateChangeReturn gst_uvc_h264_src_change_state (GstElement * element,
+ GstStateChange trans);
+static gboolean gst_uvc_h264_src_buffer_probe (GstPad * pad,
+ GstBuffer * buffer, gpointer user_data);
+static gboolean gst_uvc_h264_src_event_probe (GstPad * pad,
+ GstEvent * event, gpointer user_data);
+static void gst_uvc_h264_src_pad_linking_cb (GstPad * pad,
+ GstPad * peer, gpointer user_data);
+static GstCaps *gst_uvc_h264_src_getcaps (GstPad * pad);
+
+
+static void v4l2src_prepare_format (GstElement * v4l2src, gint fd, guint fourcc,
+ guint width, guint height, gpointer user_data);
+static void fill_probe_commit (GstUvcH264Src * self,
+ uvcx_video_config_probe_commit_t * probe, guint32 frame_interval,
+ guint32 width, guint32 height, guint32 profile,
+ UvcH264StreamFormat stream_format);
+static gboolean xu_query (GstUvcH264Src * self, guint selector, guint query,
+ guchar * data);
+
+static void set_rate_control (GstUvcH264Src * self);
+static void set_level_idc (GstUvcH264Src * self);
+static void set_bitrate (GstUvcH264Src * self);
+static void set_qp (GstUvcH264Src * self, gint type);
+static void set_ltr (GstUvcH264Src * self);
+static void update_rate_control (GstUvcH264Src * self);
+static guint32 update_level_idc_and_get_max_mbps (GstUvcH264Src * self);
+static void update_bitrate (GstUvcH264Src * self);
+static gboolean update_qp (GstUvcH264Src * self, gint type);
+static void update_ltr (GstUvcH264Src * self);
+
+static gboolean gst_uvc_h264_src_get_enum_setting (GstUvcH264Src * self,
+ gchar * property, gint * mask, gint * default_value);
+static gboolean gst_uvc_h264_src_get_boolean_setting (GstUvcH264Src * self,
+ gchar * property, gboolean * changeable, gboolean * def);
+static gboolean gst_uvc_h264_src_get_int_setting (GstUvcH264Src * self,
+ gchar * property, gint * min, gint * def, gint * max);
+
+static void
+gst_uvc_h264_src_base_init (gpointer g_class)
+{
+ GstElementClass *gstelement_class = GST_ELEMENT_CLASS (g_class);
+ GstPadTemplate *pt;
+
+ GST_DEBUG_CATEGORY_INIT (uvc_h264_src_debug, "uvch264_src",
+ 0, "UVC H264 Compliant camera bin source");
+
+ gst_element_class_set_details_simple (gstelement_class,
+ "UVC H264 Source",
+ "Source/Video",
+ "UVC H264 Encoding camera source",
+ "Youness Alaoui <youness.alaoui@collabora.co.uk>");
+
+ /* Don't use gst_element_class_add_static_pad_template in order to keep
+ * the plugin compatible with gst 0.10.35 */
+ pt = gst_static_pad_template_get (&vidsrc_template);
+ gst_element_class_add_pad_template (gstelement_class, pt);
+ gst_object_unref (pt);
+
+ pt = gst_static_pad_template_get (&imgsrc_template);
+ gst_element_class_add_pad_template (gstelement_class, pt);
+ gst_object_unref (pt);
+
+ pt = gst_static_pad_template_get (&vfsrc_template);
+ gst_element_class_add_pad_template (gstelement_class, pt);
+ gst_object_unref (pt);
+}
+
+static void
+gst_uvc_h264_src_class_init (GstUvcH264SrcClass * klass)
+{
+ GObjectClass *gobject_class;
+ GstElementClass *gstelement_class;
+ GstBaseCameraSrcClass *gstbasecamerasrc_class;
+
+ gobject_class = G_OBJECT_CLASS (klass);
+ gstelement_class = GST_ELEMENT_CLASS (klass);
+ gstbasecamerasrc_class = GST_BASE_CAMERA_SRC_CLASS (klass);
+
+ gobject_class->dispose = gst_uvc_h264_src_dispose;
+ gobject_class->set_property = gst_uvc_h264_src_set_property;
+ gobject_class->get_property = gst_uvc_h264_src_get_property;
+
+ gstelement_class->change_state = gst_uvc_h264_src_change_state;
+ gstelement_class->send_event = gst_uvc_h264_src_send_event;
+
+ gstbasecamerasrc_class->construct_pipeline =
+ gst_uvc_h264_src_construct_pipeline;
+ gstbasecamerasrc_class->set_mode = gst_uvc_h264_src_set_mode;
+ gstbasecamerasrc_class->start_capture = gst_uvc_h264_src_start_capture;
+ gstbasecamerasrc_class->stop_capture = gst_uvc_h264_src_stop_capture;
+
+ /* Properties */
+ g_object_class_install_property (gobject_class, PROP_COLORSPACE_NAME,
+ g_param_spec_string ("colorspace-name", "colorspace element name",
+ "The name of the colorspace element",
+ DEFAULT_COLORSPACE_NAME, G_PARAM_CONSTRUCT | G_PARAM_READWRITE |
+ GST_PARAM_MUTABLE_READY | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (gobject_class, PROP_JPEG_DECODER_NAME,
+ g_param_spec_string ("jpeg-decoder-name", "jpeg decoder element name",
+ "The name of the jpeg decoder element",
+ DEFAULT_JPEG_DECODER_NAME, G_PARAM_CONSTRUCT | G_PARAM_READWRITE |
+ GST_PARAM_MUTABLE_READY | G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (gobject_class, PROP_NUM_CLOCK_SAMPLES,
+ g_param_spec_int ("num-clock-samples", "num-clock-samples",
+ "Number of clock samples to gather for the PTS synchronization"
+ " (-1 = unlimited)",
+ 0, G_MAXINT, DEFAULT_NUM_CLOCK_SAMPLES,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT | GST_PARAM_MUTABLE_PLAYING |
+ G_PARAM_STATIC_STRINGS));
+
+ /* v4l2src proxied properties */
+ g_object_class_install_property (gobject_class, PROP_NUM_BUFFERS,
+ g_param_spec_int ("num-buffers", "num-buffers",
+ "Number of buffers to output before sending EOS (-1 = unlimited)",
+ -1, G_MAXINT, DEFAULT_NUM_BUFFERS,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (gobject_class, PROP_DEVICE,
+ g_param_spec_string ("device", "device",
+ "Device location",
+ DEFAULT_DEVICE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (gobject_class, PROP_DEVICE_NAME,
+ g_param_spec_string ("device-name", "Device name",
+ "Name of the device", DEFAULT_DEVICE_NAME,
+ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
+ /* Static controls */
+ g_object_class_install_property (gobject_class, PROP_INITIAL_BITRATE,
+ g_param_spec_uint ("initial-bitrate", "Initial bitrate",
+ "Initial bitrate in bits/second (static control)",
+ 0, G_MAXUINT, DEFAULT_INITIAL_BITRATE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+ GST_PARAM_MUTABLE_READY));
+ g_object_class_install_property (gobject_class, PROP_SLICE_UNITS,
+ g_param_spec_uint ("slice-units", "Slice units",
+ "Slice units (static control)",
+ 0, G_MAXUINT16, DEFAULT_SLICE_UNITS,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+ GST_PARAM_MUTABLE_READY));
+ g_object_class_install_property (gobject_class, PROP_SLICE_MODE,
+ g_param_spec_enum ("slice-mode", "Slice mode",
+ "Defines the unit of the slice-units property (static control)",
+ UVC_H264_SLICEMODE_TYPE,
+ DEFAULT_SLICE_MODE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+ GST_PARAM_MUTABLE_READY));
+ g_object_class_install_property (gobject_class, PROP_IFRAME_PERIOD,
+ g_param_spec_uint ("iframe-period", "I Frame Period",
+ "Time between IDR frames in milliseconds (static control)",
+ 0, G_MAXUINT16, DEFAULT_IFRAME_PERIOD,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+ GST_PARAM_MUTABLE_READY));
+ g_object_class_install_property (gobject_class, PROP_USAGE_TYPE,
+ g_param_spec_enum ("usage-type", "Usage type",
+ "The usage type (static control)",
+ UVC_H264_USAGETYPE_TYPE, DEFAULT_USAGE_TYPE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+ GST_PARAM_MUTABLE_READY));
+ g_object_class_install_property (gobject_class, PROP_ENTROPY,
+ g_param_spec_enum ("entropy", "Entropy",
+ "Entropy (static control)",
+ UVC_H264_ENTROPY_TYPE, DEFAULT_ENTROPY,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+ GST_PARAM_MUTABLE_READY));
+ g_object_class_install_property (gobject_class, PROP_ENABLE_SEI,
+ g_param_spec_boolean ("enable-sei", "Enable SEI",
+ "Enable SEI picture timing (static control)",
+ DEFAULT_ENABLE_SEI, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+ GST_PARAM_MUTABLE_READY));
+ g_object_class_install_property (gobject_class, PROP_NUM_REORDER_FRAMES,
+ g_param_spec_uint ("num-reorder-frames", "Number of Reorder frames",
+ "Number of B frames between the references frames (static control)",
+ 0, G_MAXUINT8, DEFAULT_NUM_REORDER_FRAMES,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+ GST_PARAM_MUTABLE_READY));
+ g_object_class_install_property (gobject_class, PROP_PREVIEW_FLIPPED,
+ g_param_spec_boolean ("preview-flipped", "Flip preview",
+ "Horizontal flipped image for non H.264 streams (static control)",
+ DEFAULT_PREVIEW_FLIPPED, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+ GST_PARAM_MUTABLE_READY));
+ g_object_class_install_property (gobject_class, PROP_LEAKY_BUCKET_SIZE,
+ g_param_spec_uint ("leaky-bucket-size", "Size of the leaky bucket size",
+ "Size of the leaky bucket size in milliseconds (static control)",
+ 0, G_MAXUINT16, DEFAULT_LEAKY_BUCKET_SIZE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+ GST_PARAM_MUTABLE_READY));
+
+ /* Dynamic controls */
+ g_object_class_install_property (gobject_class, PROP_RATE_CONTROL,
+ g_param_spec_enum ("rate-control", "Rate control",
+ "Rate control mode (static & dynamic control)",
+ UVC_H264_RATECONTROL_TYPE, DEFAULT_RATE_CONTROL,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+ GST_PARAM_MUTABLE_PLAYING));
+ g_object_class_install_property (gobject_class, PROP_FIXED_FRAMERATE,
+ g_param_spec_boolean ("fixed-framerate", "Fixed framerate",
+ "Fixed framerate (static & dynamic control)",
+ DEFAULT_FIXED_FRAMERATE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+ GST_PARAM_MUTABLE_PLAYING));
+ g_object_class_install_property (gobject_class, PROP_MAX_MBPS,
+ g_param_spec_uint ("max-mbps", "Max macroblocks/second",
+ "The number of macroblocks per second for the maximum processing rate",
+ 0, G_MAXUINT, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+ g_object_class_install_property (gobject_class, PROP_LEVEL_IDC,
+ g_param_spec_uint ("level-idc", "Level IDC",
+ "Level IDC (dynamic control)",
+ 0, G_MAXUINT8, DEFAULT_LEVEL_IDC,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+ GST_PARAM_MUTABLE_PLAYING));
+ g_object_class_install_property (gobject_class, PROP_PEAK_BITRATE,
+ g_param_spec_uint ("peak-bitrate", "Peak bitrate",
+ "The peak bitrate in bits/second (dynamic control)",
+ 0, G_MAXUINT, DEFAULT_PEAK_BITRATE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+ GST_PARAM_MUTABLE_PLAYING));
+ g_object_class_install_property (gobject_class, PROP_AVERAGE_BITRATE,
+ g_param_spec_uint ("average-bitrate", "Average bitrate",
+ "The average bitrate in bits/second (dynamic control)",
+ 0, G_MAXUINT, DEFAULT_AVERAGE_BITRATE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+ GST_PARAM_MUTABLE_PLAYING));
+ g_object_class_install_property (gobject_class, PROP_MIN_IFRAME_QP,
+ g_param_spec_int ("min-iframe-qp", "Minimum I frame QP",
+ "The minimum Quantization step size for I frames (dynamic control)",
+ -G_MAXINT8, G_MAXINT8, DEFAULT_MIN_QP,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+ GST_PARAM_MUTABLE_PLAYING));
+ g_object_class_install_property (gobject_class, PROP_MAX_IFRAME_QP,
+ g_param_spec_int ("max-iframe-qp", "Minimum I frame QP",
+ "The minimum Quantization step size for I frames (dynamic control)",
+ -G_MAXINT8, G_MAXINT8, DEFAULT_MAX_QP,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+ GST_PARAM_MUTABLE_PLAYING));
+ g_object_class_install_property (gobject_class, PROP_MIN_PFRAME_QP,
+ g_param_spec_int ("min-pframe-qp", "Minimum P frame QP",
+ "The minimum Quantization step size for P frames (dynamic control)",
+ -G_MAXINT8, G_MAXINT8, DEFAULT_MIN_QP,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+ GST_PARAM_MUTABLE_PLAYING));
+ g_object_class_install_property (gobject_class, PROP_MAX_PFRAME_QP,
+ g_param_spec_int ("max-pframe-qp", "Minimum P frame QP",
+ "The minimum Quantization step size for P frames (dynamic control)",
+ -G_MAXINT8, G_MAXINT8, DEFAULT_MAX_QP,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+ GST_PARAM_MUTABLE_PLAYING));
+ g_object_class_install_property (gobject_class, PROP_MIN_BFRAME_QP,
+ g_param_spec_int ("min-bframe-qp", "Minimum B frame QP",
+ "The minimum Quantization step size for B frames (dynamic control)",
+ -G_MAXINT8, G_MAXINT8, DEFAULT_MIN_QP,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+ GST_PARAM_MUTABLE_PLAYING));
+ g_object_class_install_property (gobject_class, PROP_MAX_BFRAME_QP,
+ g_param_spec_int ("max-bframe-qp", "Minimum B frame QP",
+ "The minimum Quantization step size for B frames (dynamic control)",
+ -G_MAXINT8, G_MAXINT8, DEFAULT_MAX_QP,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+ GST_PARAM_MUTABLE_PLAYING));
+ g_object_class_install_property (gobject_class, PROP_LTR_BUFFER_SIZE,
+ g_param_spec_int ("ltr-buffer-size", "LTR Buffer size",
+ "Total number of Long-Term Reference frames (dynamic control)",
+ 0, G_MAXUINT8, DEFAULT_LTR_BUFFER_SIZE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+ GST_PARAM_MUTABLE_PLAYING));
+ g_object_class_install_property (gobject_class, PROP_LTR_ENCODER_CONTROL,
+ g_param_spec_int ("ltr-encoder-control", "LTR frames controled by device",
+ "Number of LTR frames the device can control (dynamic control)",
+ 0, G_MAXUINT8, DEFAULT_LTR_ENCODER_CONTROL,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+ GST_PARAM_MUTABLE_PLAYING));
+
+ _signals[SIGNAL_GET_ENUM_SETTING] =
+ g_signal_new_class_handler ("get-enum-setting",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_CALLBACK (gst_uvc_h264_src_get_enum_setting),
+ NULL, NULL, NULL,
+ G_TYPE_BOOLEAN, 3, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_POINTER, 0);
+ _signals[SIGNAL_GET_BOOLEAN_SETTING] =
+ g_signal_new_class_handler ("get-boolean-setting",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_CALLBACK (gst_uvc_h264_src_get_boolean_setting), NULL, NULL, NULL,
+ G_TYPE_BOOLEAN, 3, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_POINTER, 0);
+ _signals[SIGNAL_GET_INT_SETTING] =
+ g_signal_new_class_handler ("get-int-setting",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_CALLBACK (gst_uvc_h264_src_get_int_setting), NULL, NULL, NULL,
+ G_TYPE_BOOLEAN, 4, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_POINTER,
+ G_TYPE_POINTER, 0);
+
+}
+
+static void
+gst_uvc_h264_src_init (GstUvcH264Src * self, GstUvcH264SrcClass * klass)
+{
+ self->vfsrc =
+ gst_ghost_pad_new_no_target (GST_BASE_CAMERA_SRC_VIEWFINDER_PAD_NAME,
+ GST_PAD_SRC);
+ gst_pad_set_getcaps_function (self->vfsrc,
+ GST_DEBUG_FUNCPTR (gst_uvc_h264_src_getcaps));
+ gst_element_add_pad (GST_ELEMENT (self), self->vfsrc);
+
+ self->imgsrc =
+ gst_ghost_pad_new_no_target (GST_BASE_CAMERA_SRC_IMAGE_PAD_NAME,
+ GST_PAD_SRC);
+ gst_element_add_pad (GST_ELEMENT (self), self->imgsrc);
+
+ self->vidsrc =
+ gst_ghost_pad_new_no_target (GST_BASE_CAMERA_SRC_VIDEO_PAD_NAME,
+ GST_PAD_SRC);
+ gst_pad_set_getcaps_function (self->vidsrc,
+ GST_DEBUG_FUNCPTR (gst_uvc_h264_src_getcaps));
+ gst_element_add_pad (GST_ELEMENT (self), self->vidsrc);
+ gst_pad_add_buffer_probe (self->vidsrc,
+ (GCallback) gst_uvc_h264_src_buffer_probe, self);
+ gst_pad_add_event_probe (self->vfsrc,
+ (GCallback) gst_uvc_h264_src_event_probe, self);
+ gst_pad_add_event_probe (self->vidsrc,
+ (GCallback) gst_uvc_h264_src_event_probe, self);
+
+ self->srcpad_event_func = GST_PAD_EVENTFUNC (self->vfsrc);
+
+ gst_pad_set_event_function (self->imgsrc, gst_uvc_h264_src_event);
+ gst_pad_set_event_function (self->vidsrc, gst_uvc_h264_src_event);
+ gst_pad_set_event_function (self->vfsrc, gst_uvc_h264_src_event);
+
+ g_signal_connect (self->vidsrc, "linked",
+ (GCallback) gst_uvc_h264_src_pad_linking_cb, self);
+ g_signal_connect (self->vidsrc, "unlinked",
+ (GCallback) gst_uvc_h264_src_pad_linking_cb, self);
+ g_signal_connect (self->vfsrc, "linked",
+ (GCallback) gst_uvc_h264_src_pad_linking_cb, self);
+ g_signal_connect (self->vfsrc, "unlinked",
+ (GCallback) gst_uvc_h264_src_pad_linking_cb, self);
+
+ self->vid_newseg = FALSE;
+ self->vf_newseg = FALSE;
+ self->v4l2_fd = -1;
+ gst_base_camera_src_set_mode (GST_BASE_CAMERA_SRC (self), MODE_VIDEO);
+
+ self->main_format = UVC_H264_SRC_FORMAT_NONE;
+ self->main_width = 0;
+ self->main_height = 0;
+ self->main_frame_interval = 0;
+ self->main_stream_format = UVC_H264_STREAMFORMAT_ANNEXB;
+ self->main_profile = UVC_H264_PROFILE_CONSTRAINED_BASELINE;
+ self->secondary_format = UVC_H264_SRC_FORMAT_NONE;
+ self->secondary_width = 0;
+ self->secondary_height = 0;
+ self->secondary_frame_interval = 0;
+
+ /* v4l2src properties */
+ self->num_buffers = DEFAULT_NUM_BUFFERS;
+ self->device = g_strdup (DEFAULT_DEVICE);
+
+ /* Static controls */
+ self->initial_bitrate = DEFAULT_INITIAL_BITRATE;
+ self->slice_units = DEFAULT_SLICE_UNITS;
+ self->slice_mode = DEFAULT_SLICE_MODE;
+ self->iframe_period = DEFAULT_IFRAME_PERIOD;
+ self->usage_type = DEFAULT_USAGE_TYPE;
+ self->entropy = DEFAULT_ENTROPY;
+ self->enable_sei = DEFAULT_ENABLE_SEI;
+ self->num_reorder_frames = DEFAULT_NUM_REORDER_FRAMES;
+ self->preview_flipped = DEFAULT_PREVIEW_FLIPPED;
+ self->leaky_bucket_size = DEFAULT_LEAKY_BUCKET_SIZE;
+
+ /* Dynamic controls */
+ self->rate_control = DEFAULT_RATE_CONTROL;
+ self->fixed_framerate = DEFAULT_FIXED_FRAMERATE;
+ self->level_idc = DEFAULT_LEVEL_IDC;
+ self->peak_bitrate = DEFAULT_PEAK_BITRATE;
+ self->average_bitrate = DEFAULT_AVERAGE_BITRATE;
+ self->min_qp[QP_I_FRAME] = DEFAULT_MIN_QP;
+ self->max_qp[QP_I_FRAME] = DEFAULT_MAX_QP;
+ self->min_qp[QP_P_FRAME] = DEFAULT_MIN_QP;
+ self->max_qp[QP_P_FRAME] = DEFAULT_MAX_QP;
+ self->min_qp[QP_B_FRAME] = DEFAULT_MIN_QP;
+ self->max_qp[QP_B_FRAME] = DEFAULT_MAX_QP;
+ self->ltr_buffer_size = DEFAULT_LTR_BUFFER_SIZE;
+ self->ltr_encoder_control = DEFAULT_LTR_ENCODER_CONTROL;
+}
+
+static void
+gst_uvc_h264_src_dispose (GObject * object)
+{
+ GstUvcH264Src *self = GST_UVC_H264_SRC (object);
+
+ if (self->usb_ctx)
+ libusb_exit (self->usb_ctx);
+ self->usb_ctx = NULL;
+
+ G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+static void
+gst_uvc_h264_src_set_property (GObject * object,
+ guint prop_id, const GValue * value, GParamSpec * pspec)
+{
+ GstUvcH264Src *self = GST_UVC_H264_SRC (object);
+
+ switch (prop_id) {
+ case PROP_COLORSPACE_NAME:
+ g_free (self->colorspace_name);
+ self->colorspace_name = g_value_dup_string (value);
+ break;
+ case PROP_JPEG_DECODER_NAME:
+ g_free (self->jpeg_decoder_name);
+ self->jpeg_decoder_name = g_value_dup_string (value);
+ break;
+ case PROP_NUM_CLOCK_SAMPLES:
+ self->num_clock_samples = g_value_get_int (value);
+ if (self->mjpg_demux)
+ g_object_set (self->mjpg_demux,
+ "num-clock-samples", self->num_clock_samples, NULL);
+ break;
+ /* v4l2 properties */
+ case PROP_NUM_BUFFERS:
+ self->num_buffers = g_value_get_int (value);
+ if (self->v4l2_src)
+ g_object_set_property (G_OBJECT (self->v4l2_src), "num-buffers", value);
+ break;
+ case PROP_DEVICE:
+ g_free (self->device);
+ self->device = g_value_dup_string (value);
+ if (self->v4l2_src)
+ g_object_set_property (G_OBJECT (self->v4l2_src), "device", value);
+ break;
+ /* Static controls */
+ case PROP_INITIAL_BITRATE:
+ self->initial_bitrate = g_value_get_uint (value);
+ break;
+ case PROP_SLICE_UNITS:
+ self->slice_units = g_value_get_uint (value);
+ break;
+ case PROP_SLICE_MODE:
+ self->slice_mode = g_value_get_enum (value);
+ break;
+ case PROP_IFRAME_PERIOD:
+ self->iframe_period = g_value_get_uint (value);
+ break;
+ case PROP_USAGE_TYPE:
+ self->usage_type = g_value_get_enum (value);
+ break;
+ case PROP_ENTROPY:
+ self->entropy = g_value_get_enum (value);
+ break;
+ case PROP_ENABLE_SEI:
+ self->enable_sei = g_value_get_boolean (value);
+ break;
+ case PROP_NUM_REORDER_FRAMES:
+ self->num_reorder_frames = g_value_get_uint (value);
+ break;
+ case PROP_PREVIEW_FLIPPED:
+ self->preview_flipped = g_value_get_boolean (value);
+ break;
+ case PROP_LEAKY_BUCKET_SIZE:
+ self->leaky_bucket_size = g_value_get_uint (value);
+ break;
+
+
+ /* Dynamic controls */
+ case PROP_RATE_CONTROL:
+ self->rate_control = g_value_get_enum (value);
+ set_rate_control (self);
+ update_rate_control (self);
+ break;
+ case PROP_FIXED_FRAMERATE:
+ self->fixed_framerate = g_value_get_boolean (value);
+ set_rate_control (self);
+ update_rate_control (self);
+ break;
+ case PROP_LEVEL_IDC:
+ self->level_idc = g_value_get_uint (value);
+ set_level_idc (self);
+ update_level_idc_and_get_max_mbps (self);
+ break;
+ case PROP_PEAK_BITRATE:
+ self->peak_bitrate = g_value_get_uint (value);
+ set_bitrate (self);
+ update_bitrate (self);
+ break;
+ case PROP_AVERAGE_BITRATE:
+ self->average_bitrate = g_value_get_uint (value);
+ set_bitrate (self);
+ update_bitrate (self);
+ break;
+ case PROP_MIN_IFRAME_QP:
+ self->min_qp[QP_I_FRAME] = g_value_get_int (value);
+ set_qp (self, QP_I_FRAME);
+ update_qp (self, QP_I_FRAME);
+ break;
+ case PROP_MAX_IFRAME_QP:
+ self->max_qp[QP_I_FRAME] = g_value_get_int (value);
+ set_qp (self, QP_I_FRAME);
+ update_qp (self, QP_I_FRAME);
+ break;
+ case PROP_MIN_PFRAME_QP:
+ self->min_qp[QP_P_FRAME] = g_value_get_int (value);
+ set_qp (self, QP_P_FRAME);
+ update_qp (self, QP_P_FRAME);
+ break;
+ case PROP_MAX_PFRAME_QP:
+ self->max_qp[QP_P_FRAME] = g_value_get_int (value);
+ set_qp (self, QP_P_FRAME);
+ update_qp (self, QP_P_FRAME);
+ break;
+ case PROP_MIN_BFRAME_QP:
+ self->min_qp[QP_B_FRAME] = g_value_get_int (value);
+ set_qp (self, QP_B_FRAME);
+ update_qp (self, QP_B_FRAME);
+ break;
+ case PROP_MAX_BFRAME_QP:
+ self->max_qp[QP_B_FRAME] = g_value_get_int (value);
+ set_qp (self, QP_B_FRAME);
+ update_qp (self, QP_B_FRAME);
+ break;
+ case PROP_LTR_BUFFER_SIZE:
+ self->ltr_buffer_size = g_value_get_int (value);
+ set_ltr (self);
+ update_ltr (self);
+ break;
+ case PROP_LTR_ENCODER_CONTROL:
+ self->ltr_encoder_control = g_value_get_int (value);
+ set_ltr (self);
+ update_ltr (self);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (self, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gst_uvc_h264_src_get_property (GObject * object,
+ guint prop_id, GValue * value, GParamSpec * pspec)
+{
+ GstUvcH264Src *self = GST_UVC_H264_SRC (object);
+ uvcx_video_config_probe_commit_t probe;
+
+ switch (prop_id) {
+ case PROP_INITIAL_BITRATE:
+ case PROP_SLICE_UNITS:
+ case PROP_SLICE_MODE:
+ case PROP_IFRAME_PERIOD:
+ case PROP_USAGE_TYPE:
+ case PROP_ENTROPY:
+ case PROP_ENABLE_SEI:
+ case PROP_NUM_REORDER_FRAMES:
+ case PROP_PREVIEW_FLIPPED:
+ case PROP_LEAKY_BUCKET_SIZE:
+ fill_probe_commit (self, &probe, 0, 0, 0, 0, 0);
+ if (GST_STATE (self) >= GST_STATE_PAUSED) {
+ xu_query (self, UVCX_VIDEO_CONFIG_PROBE, UVC_GET_CUR,
+ (guchar *) & probe);
+ }
+ break;
+ default:
+ break;
+ }
+
+ switch (prop_id) {
+ case PROP_COLORSPACE_NAME:
+ g_value_set_string (value, self->colorspace_name);
+ break;
+ case PROP_JPEG_DECODER_NAME:
+ g_value_set_string (value, self->jpeg_decoder_name);
+ break;
+ case PROP_NUM_CLOCK_SAMPLES:
+ g_value_set_int (value, self->num_clock_samples);
+ break;
+ /* v4l2src properties */
+ case PROP_NUM_BUFFERS:
+ g_value_set_int (value, self->num_buffers);
+ break;
+ case PROP_DEVICE:
+ g_value_set_string (value, self->device);
+ break;
+ case PROP_DEVICE_NAME:
+ if (self->v4l2_src)
+ g_object_get_property (G_OBJECT (self->v4l2_src), "device-name", value);
+ else
+ g_value_set_static_string (value, "");
+ break;
+ /* Static controls */
+ case PROP_INITIAL_BITRATE:
+ g_value_set_uint (value, probe.dwBitRate);
+ break;
+ case PROP_SLICE_UNITS:
+ g_value_set_uint (value, probe.wSliceUnits);
+ break;
+ case PROP_SLICE_MODE:
+ g_value_set_enum (value, probe.wSliceMode);
+ break;
+ case PROP_IFRAME_PERIOD:
+ g_value_set_uint (value, probe.wIFramePeriod);
+ break;
+ case PROP_USAGE_TYPE:
+ g_value_set_enum (value, probe.bUsageType);
+ break;
+ case PROP_ENTROPY:
+ g_value_set_enum (value, probe.bEntropyCABAC);
+ break;
+ case PROP_ENABLE_SEI:
+ g_value_set_boolean (value,
+ (probe.bTimestamp == UVC_H264_TIMESTAMP_SEI_ENABLE));
+ break;
+ case PROP_NUM_REORDER_FRAMES:
+ g_value_set_uint (value, probe.bNumOfReorderFrames);
+ break;
+ case PROP_PREVIEW_FLIPPED:
+ g_value_set_boolean (value,
+ (probe.bPreviewFlipped == UVC_H264_PREFLIPPED_HORIZONTAL));
+ break;
+ case PROP_LEAKY_BUCKET_SIZE:
+ g_value_set_uint (value, probe.wLeakyBucketSize);
+ break;
+
+ /* Dynamic controls */
+ case PROP_RATE_CONTROL:
+ update_rate_control (self);
+ g_value_set_enum (value, self->rate_control);
+ break;
+ case PROP_FIXED_FRAMERATE:
+ update_rate_control (self);
+ g_value_set_boolean (value, self->fixed_framerate);
+ break;
+ case PROP_MAX_MBPS:
+ g_value_set_uint (value, update_level_idc_and_get_max_mbps (self));
+ break;
+ case PROP_LEVEL_IDC:
+ update_level_idc_and_get_max_mbps (self);
+ g_value_set_uint (value, self->level_idc);
+ break;
+ case PROP_PEAK_BITRATE:
+ update_bitrate (self);
+ g_value_set_uint (value, self->peak_bitrate);
+ break;
+ case PROP_AVERAGE_BITRATE:
+ update_bitrate (self);
+ g_value_set_uint (value, self->average_bitrate);
+ break;
+ case PROP_MIN_IFRAME_QP:
+ update_qp (self, QP_I_FRAME);
+ g_value_set_int (value, self->min_qp[QP_I_FRAME]);
+ break;
+ case PROP_MAX_IFRAME_QP:
+ update_qp (self, QP_I_FRAME);
+ g_value_set_int (value, self->max_qp[QP_I_FRAME]);
+ break;
+ case PROP_MIN_PFRAME_QP:
+ update_qp (self, QP_P_FRAME);
+ g_value_set_int (value, self->min_qp[QP_P_FRAME]);
+ break;
+ case PROP_MAX_PFRAME_QP:
+ update_qp (self, QP_P_FRAME);
+ g_value_set_int (value, self->max_qp[QP_P_FRAME]);
+ break;
+ case PROP_MIN_BFRAME_QP:
+ update_qp (self, QP_B_FRAME);
+ g_value_set_int (value, self->min_qp[QP_B_FRAME]);
+ break;
+ case PROP_MAX_BFRAME_QP:
+ update_qp (self, QP_B_FRAME);
+ g_value_set_int (value, self->max_qp[QP_B_FRAME]);
+ break;
+ case PROP_LTR_BUFFER_SIZE:
+ update_ltr (self);
+ g_value_set_int (value, self->ltr_buffer_size);
+ break;
+ case PROP_LTR_ENCODER_CONTROL:
+ update_ltr (self);
+ g_value_set_int (value, self->ltr_encoder_control);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (self, prop_id, pspec);
+ break;
+ }
+}
+
+/* Set dynamic controls */
+static void
+set_rate_control (GstUvcH264Src * self)
+{
+ uvcx_rate_control_mode_t req;
+
+ if (!xu_query (self, UVCX_RATE_CONTROL_MODE, UVC_GET_CUR, (guchar *) & req)) {
+ GST_WARNING_OBJECT (self, " RATE_CONTROL GET_CUR error");
+ return;
+ }
+
+ req.bRateControlMode = self->rate_control;
+ if (self->fixed_framerate)
+ req.bRateControlMode |= UVC_H264_RATECONTROL_FIXED_FRM_FLG;
+
+ if (!xu_query (self, UVCX_RATE_CONTROL_MODE, UVC_SET_CUR, (guchar *) & req)) {
+ GST_WARNING_OBJECT (self, " RATE_CONTROL SET_CUR error");
+ return;
+ }
+}
+
+static void
+set_level_idc (GstUvcH264Src * self)
+{
+ uvcx_video_advance_config_t req;
+
+ if (!xu_query (self, UVCX_VIDEO_ADVANCE_CONFIG, UVC_GET_CUR,
+ (guchar *) & req)) {
+ GST_WARNING_OBJECT (self, " VIDEO_ADVANCE_CONFIG GET_CUR error");
+ return;
+ }
+
+ req.blevel_idc = self->level_idc;
+ if (!xu_query (self, UVCX_VIDEO_ADVANCE_CONFIG, UVC_SET_CUR,
+ (guchar *) & req)) {
+ GST_WARNING_OBJECT (self, " VIDEO_ADVANCE_CONFIG SET_CUR error");
+ return;
+ }
+}
+
+static void
+set_bitrate (GstUvcH264Src * self)
+{
+ uvcx_bitrate_layers_t req;
+
+ if (!xu_query (self, UVCX_BITRATE_LAYERS, UVC_GET_CUR, (guchar *) & req)) {
+ GST_WARNING_OBJECT (self, " BITRATE_LAYERS GET_CUR error");
+ return;
+ }
+
+ req.dwPeakBitrate = self->peak_bitrate;
+ req.dwAverageBitrate = self->average_bitrate;
+ if (!xu_query (self, UVCX_BITRATE_LAYERS, UVC_SET_CUR, (guchar *) & req)) {
+ GST_WARNING_OBJECT (self, " BITRATE_LAYERS SET_CUR error");
+ return;
+ }
+}
+
+static void
+set_qp (GstUvcH264Src * self, gint type)
+{
+ uvcx_qp_steps_layers_t req;
+
+ req.wLayerID = 0;
+ switch (type) {
+ case QP_I_FRAME:
+ req.bFrameType = UVC_H264_QP_STEPS_I_FRAME_TYPE;
+ break;
+ case QP_P_FRAME:
+ req.bFrameType = UVC_H264_QP_STEPS_P_FRAME_TYPE;
+ break;
+ case QP_B_FRAME:
+ req.bFrameType = UVC_H264_QP_STEPS_B_FRAME_TYPE;
+ break;
+ default:
+ return;
+ }
+ req.bMinQp = 0;
+ req.bMaxQp = 0;
+ if (!xu_query (self, UVCX_QP_STEPS_LAYERS, UVC_SET_CUR, (guchar *) & req)) {
+ GST_WARNING_OBJECT (self, " QP_STEPS_LAYERS SET_CUR error");
+ return;
+ }
+
+ if (!xu_query (self, UVCX_QP_STEPS_LAYERS, UVC_GET_CUR, (guchar *) & req)) {
+ GST_WARNING_OBJECT (self, " QP_STEPS_LAYERS GET_CUR error");
+ return;
+ }
+
+ req.bMinQp = self->min_qp[type];
+ req.bMaxQp = self->max_qp[type];
+ if (!xu_query (self, UVCX_QP_STEPS_LAYERS, UVC_SET_CUR, (guchar *) & req)) {
+ GST_WARNING_OBJECT (self, " QP_STEPS_LAYERS SET_CUR error");
+ return;
+ }
+}
+
+static void
+set_ltr (GstUvcH264Src * self)
+{
+ uvcx_ltr_buffer_size_control_t req;
+
+ if (!xu_query (self, UVCX_LTR_BUFFER_SIZE_CONTROL, UVC_GET_CUR,
+ (guchar *) & req)) {
+ GST_WARNING_OBJECT (self, " LTR_BUFFER_SIZE GET_CUR error");
+ return;
+ }
+
+ req.bLTRBufferSize = self->ltr_buffer_size;
+ req.bLTREncoderControl = self->ltr_encoder_control;
+ if (!xu_query (self, UVCX_LTR_BUFFER_SIZE_CONTROL, UVC_SET_CUR,
+ (guchar *) & req)) {
+ GST_WARNING_OBJECT (self, "LTR_BUFFER_SIZE SET_CUR error");
+ return;
+ }
+}
+
+/* Get Dynamic controls */
+
+static void
+update_rate_control (GstUvcH264Src * self)
+{
+ uvcx_rate_control_mode_t req;
+
+ if (!xu_query (self, UVCX_RATE_CONTROL_MODE, UVC_GET_CUR, (guchar *) & req)) {
+ GST_WARNING_OBJECT (self, " RATE_CONTROL GET_CUR error");
+ return;
+ }
+
+ if (self->rate_control != (req.bRateControlMode &
+ ~UVC_H264_RATECONTROL_FIXED_FRM_FLG)) {
+ self->rate_control = (req.bRateControlMode &
+ ~UVC_H264_RATECONTROL_FIXED_FRM_FLG);
+ g_object_notify (G_OBJECT (self), "rate-control");
+ }
+ if (self->fixed_framerate != ((req.bRateControlMode &
+ UVC_H264_RATECONTROL_FIXED_FRM_FLG) != 0)) {
+ self->fixed_framerate = ((req.bRateControlMode &
+ UVC_H264_RATECONTROL_FIXED_FRM_FLG) != 0);
+ g_object_notify (G_OBJECT (self), "fixed-framerate");
+ }
+}
+
+
+static guint32
+update_level_idc_and_get_max_mbps (GstUvcH264Src * self)
+{
+ uvcx_video_advance_config_t req;
+
+ if (!xu_query (self, UVCX_VIDEO_ADVANCE_CONFIG, UVC_GET_CUR,
+ (guchar *) & req)) {
+ GST_WARNING_OBJECT (self, " VIDEO_ADVANCE_CONFIG GET_CUR error");
+ return 0;
+ }
+
+ if (self->level_idc != req.blevel_idc) {
+ self->level_idc = req.blevel_idc;
+ g_object_notify (G_OBJECT (self), "level-idc");
+ }
+ return req.dwMb_max;
+}
+
+static void
+update_bitrate (GstUvcH264Src * self)
+{
+ uvcx_bitrate_layers_t req;
+
+ if (!xu_query (self, UVCX_BITRATE_LAYERS, UVC_GET_CUR, (guchar *) & req)) {
+ GST_WARNING_OBJECT (self, " BITRATE_LAYERS GET_CUR error");
+ return;
+ }
+ if (self->peak_bitrate != req.dwPeakBitrate) {
+ self->peak_bitrate = req.dwPeakBitrate;
+ g_object_notify (G_OBJECT (self), "peak-bitrate");
+ }
+ if (self->average_bitrate != req.dwAverageBitrate) {
+ self->average_bitrate = req.dwAverageBitrate;
+ g_object_notify (G_OBJECT (self), "average-bitrate");
+ }
+}
+
+static gboolean
+update_qp (GstUvcH264Src * self, gint type)
+{
+ uvcx_qp_steps_layers_t req;
+ guint8 frame_type;
+
+ req.wLayerID = 0;
+ switch (type) {
+ case QP_I_FRAME:
+ frame_type = UVC_H264_QP_STEPS_I_FRAME_TYPE;
+ break;
+ case QP_P_FRAME:
+ frame_type = UVC_H264_QP_STEPS_P_FRAME_TYPE;
+ break;
+ case QP_B_FRAME:
+ frame_type = UVC_H264_QP_STEPS_B_FRAME_TYPE;
+ break;
+ default:
+ return FALSE;
+ }
+ req.bFrameType = frame_type;
+ req.bMinQp = 0;
+ req.bMaxQp = 0;
+ if (!xu_query (self, UVCX_QP_STEPS_LAYERS, UVC_SET_CUR, (guchar *) & req)) {
+ GST_WARNING_OBJECT (self, " QP_STEPS_LAYERS SET_CUR error");
+ return FALSE;
+ }
+
+ if (!xu_query (self, UVCX_QP_STEPS_LAYERS, UVC_GET_CUR, (guchar *) & req)) {
+ GST_WARNING_OBJECT (self, " QP_STEPS_LAYERS GET_CUR error");
+ return FALSE;
+ }
+
+ if (req.bFrameType == frame_type) {
+ if (self->min_qp[type] != req.bMinQp) {
+ self->min_qp[type] = req.bMinQp;
+ switch (type) {
+ case QP_I_FRAME:
+ g_object_notify (G_OBJECT (self), "min-iframe-qp");
+ break;
+ case QP_P_FRAME:
+ g_object_notify (G_OBJECT (self), "min-pframe-qp");
+ break;
+ case QP_B_FRAME:
+ g_object_notify (G_OBJECT (self), "min-bframe-qp");
+ break;
+ default:
+ break;
+ }
+ }
+ if (self->max_qp[type] != req.bMaxQp) {
+ self->max_qp[type] = req.bMaxQp;
+ switch (type) {
+ case QP_I_FRAME:
+ g_object_notify (G_OBJECT (self), "max-iframe-qp");
+ break;
+ case QP_P_FRAME:
+ g_object_notify (G_OBJECT (self), "max-pframe-qp");
+ break;
+ case QP_B_FRAME:
+ g_object_notify (G_OBJECT (self), "max-bframe-qp");
+ break;
+ default:
+ break;
+ }
+ }
+ return TRUE;
+ } else {
+ self->min_qp[type] = 0xFF;
+ self->max_qp[type] = 0xFF;
+ return FALSE;
+ }
+}
+
+static void
+update_ltr (GstUvcH264Src * self)
+{
+ uvcx_ltr_buffer_size_control_t req;
+
+ if (!xu_query (self, UVCX_LTR_BUFFER_SIZE_CONTROL, UVC_GET_CUR,
+ (guchar *) & req)) {
+ GST_WARNING_OBJECT (self, " LTR_BUFFER_SIZE GET_CUR error");
+ return;
+ }
+
+ if (self->ltr_buffer_size != req.bLTRBufferSize) {
+ self->ltr_buffer_size = req.bLTRBufferSize;
+ g_object_notify (G_OBJECT (self), "ltr-buffer-size");
+ }
+ if (self->ltr_encoder_control != req.bLTREncoderControl) {
+ self->ltr_encoder_control = req.bLTREncoderControl;
+ g_object_notify (G_OBJECT (self), "ltr-encoder-control");
+ }
+}
+
+#define STORE_MIN_DEF_MAX(type) \
+ *(type *)min = *((type *) (min_p + offset)); \
+ *(type *)def = *((type *) (def_p + offset)); \
+ *(type *)max = *((type *) (max_p + offset));
+
+static gboolean
+probe_setting (GstUvcH264Src * self, uvcx_control_selector_t selector,
+ guint offset, gint size, gpointer min, gpointer def, gpointer max)
+{
+ guchar *min_p, *def_p, *max_p;
+ gboolean ret = FALSE;
+ __u16 len;
+
+ if (!xu_query (self, selector, UVC_GET_LEN, (guchar *) & len)) {
+ GST_WARNING_OBJECT (self, "probe_setting GET_LEN error");
+ return FALSE;
+ }
+ min_p = g_malloc0 (len);
+ def_p = g_malloc0 (len);
+ max_p = g_malloc0 (len);
+
+ if (!xu_query (self, selector, UVC_GET_MIN, min_p)) {
+ GST_WARNING_OBJECT (self, "probe_setting GET_MIN error");
+ goto end;
+ }
+ if (!xu_query (self, selector, UVC_GET_DEF, def_p)) {
+ GST_WARNING_OBJECT (self, "probe_setting GET_DEF error");
+ goto end;
+ }
+ if (!xu_query (self, selector, UVC_GET_MAX, max_p)) {
+ GST_WARNING_OBJECT (self, "probe_setting GET_MAX error");
+ goto end;
+ }
+
+ switch (size) {
+ case -1:
+ STORE_MIN_DEF_MAX (gint8);
+ ret = TRUE;
+ break;
+ case 1:
+ STORE_MIN_DEF_MAX (guint8);
+ ret = TRUE;
+ break;
+ case -2:
+ STORE_MIN_DEF_MAX (gint16);
+ ret = TRUE;
+ break;
+ case 2:
+ STORE_MIN_DEF_MAX (guint16);
+ ret = TRUE;
+ break;
+ case -4:
+ STORE_MIN_DEF_MAX (gint32);
+ ret = TRUE;
+ break;
+ case 4:
+ STORE_MIN_DEF_MAX (guint32);
+ ret = TRUE;
+ break;
+ default:
+ break;
+ }
+
+end:
+ g_free (min_p);
+ g_free (def_p);
+ g_free (max_p);
+
+ return ret;
+}
+
+static gboolean
+test_enum_setting (GstUvcH264Src * self, guint offset, guint size,
+ guint16 value)
+{
+ uvcx_video_config_probe_commit_t cur;
+ uvcx_video_config_probe_commit_t req;
+ guchar *req_p = (guchar *) & req;
+
+ if (!xu_query (self, UVCX_VIDEO_CONFIG_PROBE, UVC_GET_CUR, (guchar *) & cur)) {
+ GST_WARNING_OBJECT (self, " GET_CUR error");
+ return FALSE;
+ }
+
+ req = cur;
+
+ if (size == 1)
+ *((guint8 *) (req_p + offset)) = (guint8) value;
+ else
+ *((guint16 *) (req_p + offset)) = value;
+
+ if (!xu_query (self, UVCX_VIDEO_CONFIG_PROBE, UVC_SET_CUR, req_p)) {
+ GST_WARNING_OBJECT (self, " SET_CUR error");
+ return FALSE;
+ }
+
+ if (!xu_query (self, UVCX_VIDEO_CONFIG_PROBE, UVC_GET_CUR, req_p)) {
+ GST_WARNING_OBJECT (self, " GET_CUR error");
+ return FALSE;
+ }
+
+ if (!xu_query (self, UVCX_VIDEO_CONFIG_PROBE, UVC_SET_CUR, (guchar *) & cur)) {
+ GST_WARNING_OBJECT (self, " SET_CUR error");
+ return FALSE;
+ }
+
+ if (size == 1)
+ return *((guint8 *) (req_p + offset)) == (guint8) value;
+ else
+ return *((guint16 *) (req_p + offset)) == value;
+}
+
+static gboolean
+gst_uvc_h264_src_get_enum_setting (GstUvcH264Src * self, gchar * property,
+ gint * mask, gint * default_value)
+{
+ guint8 min, def, max;
+ guint8 en;
+ gboolean ret = FALSE;
+
+ if (g_strcmp0 (property, "slice-mode") == 0) {
+ guint16 min16, def16, max16;
+ guint16 en16;
+
+ ret = probe_setting (self, UVCX_VIDEO_CONFIG_PROBE,
+ offsetof (uvcx_video_config_probe_commit_t, wSliceMode), 2,
+ &min16, &def16, &max16);
+ if (ret) {
+ *default_value = def16;
+ *mask = 0;
+ for (en16 = min16; en16 <= max16; en16++) {
+ if (test_enum_setting (self, offsetof (uvcx_video_config_probe_commit_t,
+ wSliceMode), 2, en16))
+ *mask |= (1 << en16);
+ }
+ }
+ } else if (g_strcmp0 (property, "usage-type") == 0) {
+ ret = probe_setting (self, UVCX_VIDEO_CONFIG_PROBE,
+ offsetof (uvcx_video_config_probe_commit_t, bUsageType), 1,
+ &min, &def, &max);
+ if (ret) {
+ *default_value = def;
+ *mask = 0;
+ for (en = min; en <= max; en++) {
+ if (test_enum_setting (self, offsetof (uvcx_video_config_probe_commit_t,
+ bUsageType), 1, en))
+ *mask |= (1 << en);
+ }
+ }
+ } else if (g_strcmp0 (property, "entropy") == 0) {
+ ret = probe_setting (self, UVCX_VIDEO_CONFIG_PROBE,
+ offsetof (uvcx_video_config_probe_commit_t, bEntropyCABAC), 1,
+ &min, &def, &max);
+ if (ret) {
+ *mask = (1 << min) | (1 << max);
+ *default_value = def;
+ }
+ } else if (g_strcmp0 (property, "rate-control") == 0) {
+ ret = probe_setting (self, UVCX_VIDEO_CONFIG_PROBE,
+ offsetof (uvcx_video_config_probe_commit_t, bRateControlMode), 1,
+ &min, &def, &max);
+ if (ret) {
+ uvcx_rate_control_mode_t cur;
+
+ *default_value = def;
+ *mask = 0;
+
+ xu_query (self, UVCX_RATE_CONTROL_MODE, UVC_GET_CUR, (guchar *) & cur);
+
+ for (en = min; en <= max; en++) {
+ uvcx_rate_control_mode_t req = { 0, en };
+
+ if (xu_query (self, UVCX_RATE_CONTROL_MODE, UVC_SET_CUR,
+ (guchar *) & req) &&
+ xu_query (self, UVCX_RATE_CONTROL_MODE, UVC_GET_CUR,
+ (guchar *) & req) && req.bRateControlMode == en)
+ *mask |= (1 << en);
+ }
+ xu_query (self, UVCX_RATE_CONTROL_MODE, UVC_SET_CUR, (guchar *) & cur);
+ }
+ }
+
+ return ret;
+}
+
+static gboolean
+gst_uvc_h264_src_get_boolean_setting (GstUvcH264Src * self, gchar * property,
+ gboolean * changeable, gboolean * default_value)
+{
+ guint8 min, def, max;
+ gboolean ret = FALSE;
+
+ if (g_strcmp0 (property, "enable-sei") == 0) {
+ ret = probe_setting (self, UVCX_VIDEO_CONFIG_PROBE,
+ offsetof (uvcx_video_config_probe_commit_t, bTimestamp), 1,
+ &min, &def, &max);
+ *changeable = (min != max);
+ *default_value = (def != 0);
+ } else if (g_strcmp0 (property, "preview-flipped") == 0) {
+ ret = probe_setting (self, UVCX_VIDEO_CONFIG_PROBE,
+ offsetof (uvcx_video_config_probe_commit_t, bPreviewFlipped), 1,
+ &min, &def, &max);
+ *changeable = (min != max);
+ *default_value = (def != 0);
+ } else if (g_strcmp0 (property, "fixed-framerate") == 0) {
+ ret = probe_setting (self, UVCX_VIDEO_CONFIG_PROBE,
+ offsetof (uvcx_video_config_probe_commit_t, bRateControlMode), 1,
+ &min, &def, &max);
+ *changeable = ((max & UVC_H264_RATECONTROL_FIXED_FRM_FLG) != 0);
+ *default_value = ((def & UVC_H264_RATECONTROL_FIXED_FRM_FLG) != 0);
+ }
+
+ return ret;
+}
+
+static gboolean
+gst_uvc_h264_src_get_int_setting (GstUvcH264Src * self, gchar * property,
+ gint * min, gint * def, gint * max)
+{
+ guint32 min32, def32, max32;
+ guint16 min16, def16, max16;
+ guint8 min8, def8, max8;
+ gint8 smin8, sdef8, smax8;
+ gboolean ret = FALSE;
+
+ GST_DEBUG_OBJECT (self, "Probing int property %s", property);
+ if (g_strcmp0 (property, "initial-bitrate") == 0) {
+ ret = probe_setting (self, UVCX_VIDEO_CONFIG_PROBE,
+ offsetof (uvcx_video_config_probe_commit_t, dwBitRate), 4,
+ &min32, &def32, &max32);
+ *min = min32;
+ *def = def32;
+ *max = max32;
+ } else if (g_strcmp0 (property, "slice-units") == 0) {
+ ret = probe_setting (self, UVCX_VIDEO_CONFIG_PROBE,
+ offsetof (uvcx_video_config_probe_commit_t, wSliceUnits), 2,
+ &min16, &def16, &max16);
+ *min = min16;
+ *def = def16;
+ *max = max16;
+ } else if (g_strcmp0 (property, "iframe-period") == 0) {
+ ret = probe_setting (self, UVCX_VIDEO_CONFIG_PROBE,
+ offsetof (uvcx_video_config_probe_commit_t, wIFramePeriod), 2,
+ &min16, &def16, &max16);
+ *min = min16;
+ *def = def16;
+ *max = max16;
+ } else if (g_strcmp0 (property, "num-reorder-frames") == 0) {
+ ret = probe_setting (self, UVCX_VIDEO_CONFIG_PROBE,
+ offsetof (uvcx_video_config_probe_commit_t, bNumOfReorderFrames), 1,
+ &min8, &def8, &max8);
+ *min = min8;
+ *def = def8;
+ *max = max8;
+ } else if (g_strcmp0 (property, "leaky-bucket-size") == 0) {
+ ret = probe_setting (self, UVCX_VIDEO_CONFIG_PROBE,
+ offsetof (uvcx_video_config_probe_commit_t, wLeakyBucketSize), 2,
+ &min16, &def16, &max16);
+ *min = min16;
+ *def = def16;
+ *max = max16;
+ } else if (g_strcmp0 (property, "level-idc") == 0) {
+ ret = probe_setting (self, UVCX_VIDEO_ADVANCE_CONFIG,
+ offsetof (uvcx_video_advance_config_t, blevel_idc), 1,
+ &min8, &def8, &max8);
+ *min = min8;
+ *def = def8;
+ *max = max8;
+ } else if (g_strcmp0 (property, "max-mbps") == 0) {
+ ret = probe_setting (self, UVCX_VIDEO_ADVANCE_CONFIG,
+ offsetof (uvcx_video_advance_config_t, dwMb_max), 4,
+ &min32, &def32, &max32);
+ *min = min32;
+ *def = def32;
+ *max = max32;
+ } else if (g_strcmp0 (property, "peak-bitrate") == 0) {
+ ret = probe_setting (self, UVCX_BITRATE_LAYERS,
+ offsetof (uvcx_bitrate_layers_t, dwPeakBitrate), 4,
+ &min32, &def32, &max32);
+ *min = min32;
+ *def = def32;
+ *max = max32;
+ } else if (g_strcmp0 (property, "average-bitrate") == 0) {
+ ret = probe_setting (self, UVCX_BITRATE_LAYERS,
+ offsetof (uvcx_bitrate_layers_t, dwAverageBitrate), 4,
+ &min32, &def32, &max32);
+ *min = min32;
+ *def = def32;
+ *max = max32;
+ } else if (g_strcmp0 (property, "min-iframe-qp") == 0) {
+ if (update_qp (self, QP_I_FRAME))
+ ret = probe_setting (self, UVCX_QP_STEPS_LAYERS,
+ offsetof (uvcx_qp_steps_layers_t, bMinQp), 1, &smin8, &sdef8, &smax8);
+ *min = smin8;
+ *def = sdef8;
+ *max = smax8;
+ } else if (g_strcmp0 (property, "max-iframe-qp") == 0) {
+ if (update_qp (self, QP_I_FRAME))
+ ret = probe_setting (self, UVCX_QP_STEPS_LAYERS,
+ offsetof (uvcx_qp_steps_layers_t, bMaxQp), 1, &smin8, &sdef8, &smax8);
+ *min = smin8;
+ *def = sdef8;
+ *max = smax8;
+ } else if (g_strcmp0 (property, "min-pframe-qp") == 0) {
+ if (update_qp (self, QP_P_FRAME))
+ ret = probe_setting (self, UVCX_QP_STEPS_LAYERS,
+ offsetof (uvcx_qp_steps_layers_t, bMinQp), 1, &smin8, &sdef8, &smax8);
+ *min = smin8;
+ *def = sdef8;
+ *max = smax8;
+ } else if (g_strcmp0 (property, "max-pframe-qp") == 0) {
+ if (update_qp (self, QP_P_FRAME))
+ ret = probe_setting (self, UVCX_QP_STEPS_LAYERS,
+ offsetof (uvcx_qp_steps_layers_t, bMaxQp), 1, &smin8, &sdef8, &smax8);
+ *min = smin8;
+ *def = sdef8;
+ *max = smax8;
+ } else if (g_strcmp0 (property, "min-bframe-qp") == 0) {
+ if (update_qp (self, QP_B_FRAME))
+ ret = probe_setting (self, UVCX_QP_STEPS_LAYERS,
+ offsetof (uvcx_qp_steps_layers_t, bMinQp), 1, &smin8, &sdef8, &smax8);
+ *min = smin8;
+ *def = sdef8;
+ *max = smax8;
+ } else if (g_strcmp0 (property, "max-bframe-qp") == 0) {
+ if (update_qp (self, QP_B_FRAME))
+ ret = probe_setting (self, UVCX_QP_STEPS_LAYERS,
+ offsetof (uvcx_qp_steps_layers_t, bMaxQp), 1, &smin8, &sdef8, &smax8);
+ *min = smin8;
+ *def = sdef8;
+ *max = smax8;
+ } else if (g_strcmp0 (property, "ltr-buffer-size") == 0) {
+ ret = probe_setting (self, UVCX_LTR_BUFFER_SIZE_CONTROL,
+ offsetof (uvcx_ltr_buffer_size_control_t, bLTRBufferSize), 1,
+ &min8, &def8, &max8);
+ *min = min8;
+ *def = def8;
+ *max = max8;
+ } else if (g_strcmp0 (property, "ltr-encoder-control") == 0) {
+ ret = probe_setting (self, UVCX_LTR_BUFFER_SIZE_CONTROL,
+ offsetof (uvcx_ltr_buffer_size_control_t, bLTREncoderControl), 1,
+ &min8, &def8, &max8);
+ *min = min8;
+ *def = def8;
+ *max = max8;
+ }
+
+ return ret;
+}
+
+static gboolean
+gst_uvc_h264_src_event_probe (GstPad * pad, GstEvent * event,
+ gpointer user_data)
+{
+ GstUvcH264Src *self = GST_UVC_H264_SRC (user_data);
+ gboolean ret = TRUE;
+
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_EOS:
+ ret = !self->reconfiguring;
+ break;
+ case GST_EVENT_NEWSEGMENT:
+ if (pad == self->vidsrc) {
+ ret = !self->vid_newseg;
+ self->vid_newseg = TRUE;
+ } else if (pad == self->vfsrc) {
+ ret = !self->vf_newseg;
+ self->vf_newseg = TRUE;
+ }
+ break;
+ default:
+ break;
+ }
+
+ return ret;
+}
+
+static gboolean
+gst_uvc_h264_src_buffer_probe (GstPad * pad, GstBuffer * buffer,
+ gpointer user_data)
+{
+ GstUvcH264Src *self = GST_UVC_H264_SRC (user_data);
+
+ /* TODO: Check the NALU type and make sure it is a keyframe */
+ if (self->key_unit_event) {
+ GstClockTime ts, running_time, stream_time;
+ gboolean all_headers;
+ guint count;
+ GstEvent *downstream;
+
+ if (gst_video_event_parse_upstream_force_key_unit (self->key_unit_event,
+ &ts, &all_headers, &count)) {
+ if (!GST_CLOCK_TIME_IS_VALID (ts)) {
+ ts = GST_BUFFER_TIMESTAMP (buffer);
+ }
+ running_time = gst_segment_to_running_time (&self->segment,
+ GST_FORMAT_TIME, ts);
+
+ stream_time = gst_segment_to_stream_time (&self->segment,
+ GST_FORMAT_TIME, ts);
+
+ GST_DEBUG_OBJECT (self, "Sending downstream force-key-unit : %d - %d ts=%"
+ GST_TIME_FORMAT " running time =%" GST_TIME_FORMAT " stream=%"
+ GST_TIME_FORMAT, all_headers, count, GST_TIME_ARGS (ts),
+ GST_TIME_ARGS (running_time), GST_TIME_ARGS (stream_time));
+ downstream = gst_video_event_new_downstream_force_key_unit (ts,
+ running_time, stream_time, all_headers, count);
+ gst_pad_push_event (self->vidsrc, downstream);
+ gst_event_replace (&self->key_unit_event, NULL);
+ }
+ }
+ return TRUE;
+}
+
+static gboolean
+gst_uvc_h264_src_parse_event (GstUvcH264Src * self, GstPad * pad,
+ GstEvent * event)
+{
+ const GstStructure *s = gst_event_get_structure (event);
+
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_CUSTOM_UPSTREAM:
+ if (pad == self->vidsrc && self->main_format == UVC_H264_SRC_FORMAT_H264) {
+ if (gst_video_event_is_force_key_unit (event)) {
+ uvcx_picture_type_control_t req = { 0, 0 };
+ GstClockTime ts;
+ gboolean all_headers;
+
+ if (gst_video_event_parse_upstream_force_key_unit (event,
+ &ts, &all_headers, NULL)) {
+ GST_INFO_OBJECT (self, "Received upstream force-key-unit : %d %"
+ GST_TIME_FORMAT, all_headers, GST_TIME_ARGS (ts));
+ /* TODO: wait until 'ts' time is reached */
+ if (all_headers)
+ req.wPicType = UVC_H264_PICTYPE_IDR_WITH_PPS_SPS;
+ else
+ req.wPicType = UVC_H264_PICTYPE_IDR;
+
+ if (!xu_query (self, UVCX_PICTURE_TYPE_CONTROL, UVC_SET_CUR,
+ (guchar *) & req)) {
+ GST_WARNING_OBJECT (self, " PICTURE_TYPE_CONTROL SET_CUR error");
+ } else {
+ gst_event_replace (&self->key_unit_event, event);
+ gst_event_unref (event);
+
+ return TRUE;
+ }
+ }
+ } else if (s &&
+ gst_structure_has_name (s, "uvc-h264-ltr-picture-control")) {
+ guint put_at, encode_using;
+
+ if (gst_structure_get_uint (s, "put-at", &put_at) &&
+ gst_structure_get_uint (s, "encode-using", &encode_using)) {
+ uvcx_ltr_picture_control req = { 0, put_at, encode_using };
+
+ if (!xu_query (self, UVCX_LTR_PICTURE_CONTROL, UVC_SET_CUR,
+ (guchar *) & req)) {
+ GST_WARNING_OBJECT (self, " LTR PICTURE_CONTROL SET_CUR error");
+ } else {
+ gst_event_unref (event);
+
+ return TRUE;
+ }
+ }
+ return TRUE;
+ } else if (s && gst_structure_has_name (s, "uvc-h264-bitrate-control")) {
+ guint average, peak;
+
+ if (gst_structure_get_uint (s, "average-bitrate", &average) &&
+ gst_structure_get_uint (s, "peak-bitrate", &peak)) {
+ self->average_bitrate = average;
+ self->peak_bitrate = peak;
+ set_bitrate (self);
+ update_bitrate (self);
+
+ gst_event_unref (event);
+
+ return TRUE;
+ }
+ } else if (s && gst_structure_has_name (s, "uvc-h264-qp-control")) {
+ gint min_qp, max_qp;
+ gboolean valid_event = FALSE;
+
+ if (gst_structure_get_int (s, "min-iframe-qp", &min_qp) &&
+ gst_structure_get_int (s, "max-iframe-qp", &max_qp)) {
+ self->min_qp[QP_I_FRAME] = min_qp;
+ self->max_qp[QP_I_FRAME] = max_qp;
+ set_qp (self, QP_I_FRAME);
+ update_qp (self, QP_I_FRAME);
+ valid_event = TRUE;
+ }
+ if (gst_structure_get_int (s, "min-pframe-qp", &min_qp) &&
+ gst_structure_get_int (s, "max-pframe-qp", &max_qp)) {
+ self->min_qp[QP_P_FRAME] = min_qp;
+ self->max_qp[QP_P_FRAME] = max_qp;
+ set_qp (self, QP_P_FRAME);
+ update_qp (self, QP_P_FRAME);
+ valid_event = TRUE;
+ }
+ if (gst_structure_get_int (s, "min-bframe-qp", &min_qp) &&
+ gst_structure_get_int (s, "max-bframe-qp", &max_qp)) {
+ self->min_qp[QP_B_FRAME] = min_qp;
+ self->max_qp[QP_B_FRAME] = max_qp;
+ set_qp (self, QP_B_FRAME);
+ update_qp (self, QP_B_FRAME);
+ valid_event = TRUE;
+ }
+
+ if (valid_event) {
+ gst_event_unref (event);
+
+ return TRUE;
+ }
+ } else if (s && gst_structure_has_name (s, "uvc-h264-rate-control")) {
+ UvcH264RateControl rate;
+ gboolean fixed_framerate;
+
+ if (gst_structure_get_enum (s, "rate-control",
+ UVC_H264_RATECONTROL_TYPE, (gint *) & rate) &&
+ gst_structure_get_boolean (s, "fixed-framerate",
+ &fixed_framerate)) {
+ self->rate_control = rate;
+ self->fixed_framerate = fixed_framerate;
+ set_rate_control (self);
+ update_rate_control (self);
+
+ gst_event_unref (event);
+
+ return TRUE;
+ }
+ } else if (s && gst_structure_has_name (s, "uvc-h264-level-idc")) {
+ guint level_idc;
+
+ if (gst_structure_get_uint (s, "level-idc", &level_idc)) {
+ self->level_idc = level_idc;
+ set_level_idc (self);
+ update_level_idc_and_get_max_mbps (self);
+
+ gst_event_unref (event);
+ }
+ }
+ }
+ if (s && gst_structure_has_name (s, "renegotiate")) {
+ GST_DEBUG_OBJECT (self, "Received renegotiate on %s",
+ GST_PAD_NAME (pad));
+ /* TODO: Do not reconstruct pipeline twice if we receive
+ the event on both pads */
+ if (GST_STATE (self) >= GST_STATE_READY) {
+ /* TODO: diff the caps */
+ gst_uvc_h264_src_construct_pipeline (GST_BASE_CAMERA_SRC (self));
+ }
+ return TRUE;
+ }
+ break;
+ default:
+ break;
+ }
+
+ return FALSE;
+}
+
+static gboolean
+gst_uvc_h264_src_send_event (GstElement * element, GstEvent * event)
+{
+ GstUvcH264Src *self = GST_UVC_H264_SRC (element);
+
+ if (gst_uvc_h264_src_parse_event (self, self->vidsrc, event))
+ return TRUE;
+
+ return GST_ELEMENT_CLASS (parent_class)->send_event (element, event);
+}
+
+static gboolean
+gst_uvc_h264_src_event (GstPad * pad, GstEvent * event)
+{
+ GstUvcH264Src *self = GST_UVC_H264_SRC (GST_PAD_PARENT (pad));
+
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_NEWSEGMENT:
+ if (!self->vid_newseg && pad == self->vidsrc) {
+ gboolean update;
+ gdouble rate, applied_rate;
+ GstFormat format;
+ gint64 start, stop, position;
+
+ gst_event_parse_new_segment_full (event, &update, &rate,
+ &applied_rate, &format, &start, &stop, &position);
+ gst_segment_set_newsegment (&self->segment, update, rate, format,
+ start, stop, position);
+ }
+ break;
+ case GST_EVENT_FLUSH_STOP:
+ if (pad == self->vidsrc) {
+ gst_segment_init (&self->segment, GST_FORMAT_UNDEFINED);
+ self->vid_newseg = FALSE;
+ }
+ if (pad == self->vfsrc)
+ self->vf_newseg = FALSE;
+ break;
+ default:
+ if (gst_uvc_h264_src_parse_event (self, pad, event))
+ return TRUE;
+ break;
+ }
+ return self->srcpad_event_func (pad, event);
+}
+
+static guint8
+xu_get_id (GstUvcH264Src * self)
+{
+ static const __u8 guid[16] = GUID_UVCX_H264_XU;
+ GUdevClient *client;
+ GUdevDevice *udevice;
+ GUdevDevice *parent;
+ guint64 busnum;
+ guint64 devnum;
+ libusb_device **device_list = NULL;
+ libusb_device *device = NULL;
+ ssize_t cnt;
+ int i, j, k;
+
+
+ if (self->usb_ctx == NULL)
+ libusb_init (&self->usb_ctx);
+
+ client = g_udev_client_new (NULL);
+ if (client) {
+ udevice = g_udev_client_query_by_device_file (client, self->device);
+ if (udevice) {
+ parent = g_udev_device_get_parent_with_subsystem (udevice, "usb",
+ "usb_device");
+ if (parent) {
+ busnum = g_udev_device_get_sysfs_attr_as_uint64 (parent, "busnum");
+ devnum = g_udev_device_get_sysfs_attr_as_uint64 (parent, "devnum");
+
+ cnt = libusb_get_device_list (self->usb_ctx, &device_list);
+ for (i = 0; i < cnt; i++) {
+ if (busnum == libusb_get_bus_number (device_list[i]) &&
+ devnum == libusb_get_device_address (device_list[i])) {
+ device = libusb_ref_device (device_list[i]);
+ break;
+ }
+ }
+ libusb_free_device_list (device_list, 1);
+ g_object_unref (parent);
+ }
+ g_object_unref (udevice);
+ }
+ g_object_unref (client);
+ }
+
+ if (device) {
+ struct libusb_device_descriptor desc;
+
+ if (libusb_get_device_descriptor (device, &desc) == 0) {
+ for (i = 0; i < desc.bNumConfigurations; ++i) {
+ struct libusb_config_descriptor *config = NULL;
+
+ if (libusb_get_config_descriptor (device, i, &config) == 0) {
+ for (j = 0; j < config->bNumInterfaces; j++) {
+ for (k = 0; k < config->interface[j].num_altsetting; k++) {
+ const struct libusb_interface_descriptor *interface;
+ const guint8 *ptr = NULL;
+
+ interface = &config->interface[j].altsetting[k];
+ if (interface->bInterfaceClass != LIBUSB_CLASS_VIDEO ||
+ interface->bInterfaceSubClass != USB_VIDEO_CONTROL)
+ continue;
+ ptr = interface->extra;
+ while (ptr - interface->extra +
+ sizeof (xu_descriptor) < interface->extra_length) {
+ xu_descriptor *desc = (xu_descriptor *) ptr;
+
+ GST_DEBUG_OBJECT (self, "Found VideoControl interface with "
+ "unit id %d : %" GUID_FORMAT, desc->bUnitID,
+ GUID_ARGS (desc->guidExtensionCode));
+ if (desc->bDescriptorType == USB_VIDEO_CONTROL_INTERFACE &&
+ desc->bDescriptorSubType == USB_VIDEO_CONTROL_XU_TYPE &&
+ memcmp (desc->guidExtensionCode, guid, 16) == 0) {
+ guint8 unit_id = desc->bUnitID;
+
+ GST_DEBUG_OBJECT (self, "Found H264 XU unit : %d", unit_id);
+
+ libusb_unref_device (device);
+ return unit_id;
+ }
+ ptr += desc->bLength;
+ }
+ }
+ }
+ }
+ }
+ }
+ libusb_unref_device (device);
+ }
+
+ return 0;
+}
+
+static gboolean
+xu_query (GstUvcH264Src * self, guint selector, guint query, guchar * data)
+{
+ struct uvc_xu_control_query xu;
+ __u16 len;
+
+ if (self->v4l2_fd == -1) {
+ GST_WARNING_OBJECT (self, "Can't query XU with fd = -1");
+ return FALSE;
+ }
+
+ xu.unit = self->h264_unit_id;
+ xu.selector = selector;
+
+ xu.query = UVC_GET_LEN;
+ xu.size = sizeof (len);
+ xu.data = (unsigned char *) &len;
+ if (-1 == ioctl (self->v4l2_fd, UVCIOC_CTRL_QUERY, &xu)) {
+ GST_WARNING_OBJECT (self, "PROBE GET_LEN error");
+ return FALSE;
+ }
+
+ if (query == UVC_GET_LEN) {
+ *((__u16 *) data) = len;
+ } else {
+ xu.query = query;
+ xu.size = len;
+ xu.data = data;
+ if (-1 == ioctl (self->v4l2_fd, UVCIOC_CTRL_QUERY, &xu)) {
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+static void
+fill_probe_commit (GstUvcH264Src * self,
+ uvcx_video_config_probe_commit_t * probe, guint32 frame_interval,
+ guint32 width, guint32 height, guint32 profile,
+ UvcH264StreamFormat stream_format)
+{
+ probe->dwFrameInterval = frame_interval;
+ probe->dwBitRate = self->initial_bitrate;
+ probe->wWidth = width;
+ probe->wHeight = height;
+ probe->wSliceUnits = self->slice_units;
+ probe->wSliceMode = self->slice_mode;
+ probe->wProfile = profile;
+ probe->wIFramePeriod = self->iframe_period;
+ probe->bUsageType = self->usage_type;
+ probe->bRateControlMode = self->rate_control;
+ if (self->fixed_framerate)
+ probe->bRateControlMode |= UVC_H264_RATECONTROL_FIXED_FRM_FLG;
+ probe->bStreamFormat = stream_format;
+ probe->bEntropyCABAC = self->entropy;
+ probe->bTimestamp = self->enable_sei ?
+ UVC_H264_TIMESTAMP_SEI_ENABLE : UVC_H264_TIMESTAMP_SEI_DISABLE;
+ probe->bNumOfReorderFrames = self->num_reorder_frames;
+ probe->bPreviewFlipped = self->preview_flipped ?
+ UVC_H264_PREFLIPPED_HORIZONTAL : UVC_H264_PREFLIPPED_DISABLE;
+ probe->wLeakyBucketSize = self->leaky_bucket_size;
+}
+
+static void
+print_probe_commit (GstUvcH264Src * self,
+ uvcx_video_config_probe_commit_t * probe)
+{
+ GST_DEBUG_OBJECT (self, " Frame interval : %d *100ns",
+ probe->dwFrameInterval);
+ GST_DEBUG_OBJECT (self, " Bit rate : %d", probe->dwBitRate);
+ GST_DEBUG_OBJECT (self, " Hints : %X", probe->bmHints);
+ GST_DEBUG_OBJECT (self, " Configuration index : %d",
+ probe->wConfigurationIndex);
+ GST_DEBUG_OBJECT (self, " Width : %d", probe->wWidth);
+ GST_DEBUG_OBJECT (self, " Height : %d", probe->wHeight);
+ GST_DEBUG_OBJECT (self, " Slice units : %d", probe->wSliceUnits);
+ GST_DEBUG_OBJECT (self, " Slice mode : %X", probe->wSliceMode);
+ GST_DEBUG_OBJECT (self, " Profile : %X", probe->wProfile);
+ GST_DEBUG_OBJECT (self, " IFrame Period : %d ms", probe->wIFramePeriod);
+ GST_DEBUG_OBJECT (self, " Estimated video delay : %d ms",
+ probe->wEstimatedVideoDelay);
+ GST_DEBUG_OBJECT (self, " Estimated max config delay : %d ms",
+ probe->wEstimatedMaxConfigDelay);
+ GST_DEBUG_OBJECT (self, " Usage type : %X", probe->bUsageType);
+ GST_DEBUG_OBJECT (self, " Rate control mode : %X", probe->bRateControlMode);
+ GST_DEBUG_OBJECT (self, " Temporal scale mode : %X",
+ probe->bTemporalScaleMode);
+ GST_DEBUG_OBJECT (self, " Spatial scale mode : %X",
+ probe->bSpatialScaleMode);
+ GST_DEBUG_OBJECT (self, " SNR scale mode : %X", probe->bSNRScaleMode);
+ GST_DEBUG_OBJECT (self, " Stream mux option : %X", probe->bStreamMuxOption);
+ GST_DEBUG_OBJECT (self, " Stream Format : %X", probe->bStreamFormat);
+ GST_DEBUG_OBJECT (self, " Entropy CABAC : %X", probe->bEntropyCABAC);
+ GST_DEBUG_OBJECT (self, " Timestamp : %X", probe->bTimestamp);
+ GST_DEBUG_OBJECT (self, " Num of reorder frames : %d",
+ probe->bNumOfReorderFrames);
+ GST_DEBUG_OBJECT (self, " Preview flipped : %X", probe->bPreviewFlipped);
+ GST_DEBUG_OBJECT (self, " View : %d", probe->bView);
+ GST_DEBUG_OBJECT (self, " Stream ID : %X", probe->bStreamID);
+ GST_DEBUG_OBJECT (self, " Spatial layer ratio : %f",
+ ((probe->bSpatialLayerRatio & 0xF0) >> 4) +
+ ((float) (probe->bSpatialLayerRatio & 0x0F)) / 16);
+ GST_DEBUG_OBJECT (self, " Leaky bucket size : %d ms",
+ probe->wLeakyBucketSize);
+}
+
+static void
+configure_h264 (GstUvcH264Src * self, gint fd)
+{
+ uvcx_video_config_probe_commit_t probe;
+
+ /* Set the secondary format first, so the last SET_CUR will be for the
+ * H264 format. This way, we can still get the static control values with
+ * a GET_CUR. Otherwise all static properties will return 0 because that's
+ * what the GET_CUR of the raw format returns.
+ */
+ if (self->secondary_format == UVC_H264_SRC_FORMAT_RAW) {
+ memset (&probe, 0, sizeof (probe));
+ probe.dwFrameInterval = self->secondary_frame_interval;
+ probe.wWidth = self->secondary_width;
+ probe.wHeight = self->secondary_height;
+ probe.bStreamMuxOption = 5;
+
+ GST_DEBUG_OBJECT (self, "RAW PROBE SET_CUR : ");
+ print_probe_commit (self, &probe);
+
+ if (!xu_query (self, UVCX_VIDEO_CONFIG_PROBE, UVC_SET_CUR,
+ (guchar *) & probe)) {
+ GST_WARNING_OBJECT (self, "PROBE SET_CUR error");
+ return;
+ }
+
+ if (!xu_query (self, UVCX_VIDEO_CONFIG_PROBE, UVC_GET_CUR,
+ (guchar *) & probe)) {
+ GST_WARNING_OBJECT (self, "PROBE GET_CUR error");
+ return;
+ }
+ GST_DEBUG_OBJECT (self, "RAW PROBE GET_CUR : ");
+ print_probe_commit (self, &probe);
+
+ if (!xu_query (self, UVCX_VIDEO_CONFIG_COMMIT, UVC_SET_CUR,
+ (guchar *) & probe)) {
+ GST_WARNING_OBJECT (self, "COMMIT SET_CUR error");
+ return;
+ }
+ }
+ /* Print MIN/MAX/DEF probe values for debugging purposes */
+ if (!xu_query (self, UVCX_VIDEO_CONFIG_PROBE, UVC_GET_MIN,
+ (guchar *) & probe)) {
+ GST_WARNING_OBJECT (self, "PROBE GET_CUR error");
+ return;
+ }
+ GST_DEBUG_OBJECT (self, "PROBE GET_MIN : ");
+ print_probe_commit (self, &probe);
+
+ if (!xu_query (self, UVCX_VIDEO_CONFIG_PROBE, UVC_GET_MAX,
+ (guchar *) & probe)) {
+ GST_WARNING_OBJECT (self, "PROBE GET_CUR error");
+ return;
+ }
+ GST_DEBUG_OBJECT (self, "PROBE GET_MAX : ");
+ print_probe_commit (self, &probe);
+
+ if (!xu_query (self, UVCX_VIDEO_CONFIG_PROBE, UVC_GET_DEF,
+ (guchar *) & probe)) {
+ GST_WARNING_OBJECT (self, "PROBE GET_CUR error");
+ return;
+ }
+ GST_DEBUG_OBJECT (self, "PROBE GET_DEF : ");
+ print_probe_commit (self, &probe);
+
+ fill_probe_commit (self, &probe, self->main_frame_interval,
+ self->main_width, self->main_height, self->main_profile,
+ self->main_stream_format);
+ if (self->secondary_format != UVC_H264_SRC_FORMAT_NONE)
+ probe.bStreamMuxOption = 3;
+ else
+ probe.bStreamMuxOption = 0;
+ probe.bmHints = UVC_H264_BMHINTS_RESOLUTION | UVC_H264_BMHINTS_PROFILE |
+ UVC_H264_BMHINTS_FRAME_INTERVAL;
+
+ GST_DEBUG_OBJECT (self, "PROBE SET_CUR : ");
+ print_probe_commit (self, &probe);
+
+ if (!xu_query (self, UVCX_VIDEO_CONFIG_PROBE, UVC_SET_CUR,
+ (guchar *) & probe)) {
+ GST_WARNING_OBJECT (self, "PROBE SET_CUR error");
+ return;
+ }
+
+ if (!xu_query (self, UVCX_VIDEO_CONFIG_PROBE, UVC_GET_CUR,
+ (guchar *) & probe)) {
+ GST_WARNING_OBJECT (self, "PROBE GET_CUR error");
+ return;
+ }
+ GST_DEBUG_OBJECT (self, "PROBE GET_CUR : ");
+ print_probe_commit (self, &probe);
+
+ /* Must validate the settings accepted by the encoder */
+ if (!xu_query (self, UVCX_VIDEO_CONFIG_COMMIT, UVC_SET_CUR,
+ (guchar *) & probe)) {
+ GST_WARNING_OBJECT (self, "COMMIT SET_CUR error");
+ return;
+ }
+}
+
+static void
+v4l2src_prepare_format (GstElement * v4l2src, gint fd, guint fourcc,
+ guint width, guint height, gpointer user_data)
+{
+ GstUvcH264Src *self = GST_UVC_H264_SRC (user_data);
+
+ GST_DEBUG_OBJECT (self, "v4l2src prepare-format with FCC %" GST_FOURCC_FORMAT,
+ GST_FOURCC_ARGS (fourcc));
+
+ if (self->main_format == UVC_H264_SRC_FORMAT_H264) {
+ /* TODO: update static controls and g_object_notify those that changed */
+ configure_h264 (self, fd);
+
+ /* TODO: update dynamic controls on READY state */
+ /* Configure dynamic controls */
+ set_rate_control (self);
+ update_rate_control (self);
+ set_level_idc (self);
+ update_level_idc_and_get_max_mbps (self);
+ set_bitrate (self);
+ update_bitrate (self);
+ set_qp (self, QP_I_FRAME);
+ update_qp (self, QP_I_FRAME);
+ set_qp (self, QP_P_FRAME);
+ update_qp (self, QP_P_FRAME);
+ set_qp (self, QP_B_FRAME);
+ update_qp (self, QP_B_FRAME);
+ set_ltr (self);
+ update_ltr (self);
+ }
+}
+
+static gboolean
+_extract_caps_info (GstStructure * structure, guint16 * width, guint16 * height,
+ guint32 * frame_interval)
+{
+ gint w, h, fps_n, fps_d;
+ gboolean ret = TRUE;
+
+ ret &= gst_structure_get_int (structure, "width", &w);
+ ret &= gst_structure_get_int (structure, "height", &h);
+ ret &= gst_structure_get_fraction (structure, "framerate", &fps_n, &fps_d);
+
+ if (ret) {
+ *width = w;
+ *height = h;
+ /* Interval is in 100ns */
+ *frame_interval = GST_TIME_AS_NSECONDS ((fps_d * GST_SECOND) / fps_n) / 100;
+ }
+
+ return ret;
+}
+
+static guint16
+_extract_profile (GstStructure * structure)
+{
+ const gchar *profile_str;
+ guint16 profile;
+
+ profile = UVC_H264_PROFILE_HIGH;
+ profile_str = gst_structure_get_string (structure, "profile");
+ if (profile_str) {
+ if (!strcmp (profile_str, "constrained-baseline")) {
+ profile = UVC_H264_PROFILE_CONSTRAINED_BASELINE;
+ } else if (!strcmp (profile_str, "baseline")) {
+ profile = UVC_H264_PROFILE_BASELINE;
+ } else if (!strcmp (profile_str, "main")) {
+ profile = UVC_H264_PROFILE_MAIN;
+ } else if (!strcmp (profile_str, "high")) {
+ profile = UVC_H264_PROFILE_HIGH;
+ }
+ }
+ return profile;
+}
+
+static UvcH264StreamFormat
+_extract_stream_format (GstStructure * structure)
+{
+ const gchar *stream_format;
+
+ stream_format = gst_structure_get_string (structure, "stream-format");
+ if (stream_format) {
+ if (!strcmp (stream_format, "avc"))
+ return UVC_H264_STREAMFORMAT_NAL;
+ else if (!strcmp (stream_format, "byte-stream"))
+ return UVC_H264_STREAMFORMAT_ANNEXB;
+ }
+ return UVC_H264_STREAMFORMAT_ANNEXB;
+}
+
+static GstCaps *
+_transform_caps (GstUvcH264Src * self, GstCaps * caps, const gchar * name)
+{
+ GstElement *el = gst_element_factory_make (name, NULL);
+ GstElement *cf = gst_element_factory_make ("capsfilter", NULL);
+ GstPad *sink;
+
+ if (!el || !cf || !gst_bin_add (GST_BIN (self), el)) {
+ if (el)
+ gst_object_unref (el);
+ if (cf)
+ gst_object_unref (cf);
+ goto done;
+ }
+ if (!gst_bin_add (GST_BIN (self), cf)) {
+ gst_object_unref (cf);
+ gst_bin_remove (GST_BIN (self), el);
+ goto done;
+ }
+ if (!gst_element_link (el, cf))
+ goto error_remove;
+
+ sink = gst_element_get_static_pad (el, "sink");
+ if (!sink)
+ goto error_remove;
+ g_object_set (cf, "caps", caps, NULL);
+
+ caps = gst_pad_get_caps (sink);
+ gst_object_unref (sink);
+
+error_remove:
+ gst_bin_remove (GST_BIN (self), cf);
+ gst_bin_remove (GST_BIN (self), el);
+
+done:
+ return caps;
+}
+
+static GstCaps *
+gst_uvc_h264_src_transform_caps (GstUvcH264Src * self, GstCaps * caps)
+{
+ GstCaps *h264 = gst_caps_new_simple ("video/x-h264", NULL);
+ GstCaps *jpg = gst_caps_new_simple ("image/jpeg", NULL);
+ GstCaps *h264_caps = gst_caps_intersect (h264, caps);
+ GstCaps *jpg_caps = gst_caps_intersect (jpg, caps);
+
+ /* TODO: Keep caps order after transformation */
+ caps = _transform_caps (self, caps, self->colorspace_name);
+
+ if (!gst_caps_is_empty (h264_caps)) {
+ GstCaps *temp = gst_caps_union (caps, h264_caps);
+ gst_caps_unref (caps);
+ caps = temp;
+ }
+ if (!gst_caps_is_empty (jpg_caps)) {
+ GstCaps *temp = gst_caps_union (caps, jpg_caps);
+ gst_caps_unref (caps);
+ caps = temp;
+ }
+
+ if (h264_caps)
+ gst_caps_unref (h264_caps);
+ if (jpg_caps)
+ gst_caps_unref (jpg_caps);
+ gst_caps_unref (h264);
+ gst_caps_unref (jpg);
+
+
+ return caps;
+}
+
+static GstCaps *
+gst_uvc_h264_src_fixate_caps (GstUvcH264Src * self, GstPad * v4l_pad,
+ GstCaps * v4l_caps, GstCaps * peer_caps, gboolean primary)
+{
+ GstCaps *caps = NULL;
+ GstCaps *icaps = NULL;
+ GstCaps *tcaps = NULL;
+ int i;
+
+ if (v4l_caps == NULL || gst_caps_is_any (v4l_caps)) {
+ GST_DEBUG_OBJECT (self, "v4l caps are invalid. not fixating");
+ return NULL;
+ }
+
+ tcaps = gst_caps_intersect_full (peer_caps, v4l_caps,
+ GST_CAPS_INTERSECT_FIRST);
+ GST_DEBUG_OBJECT (self, "intersect: %" GST_PTR_FORMAT, tcaps);
+ icaps = gst_caps_normalize (tcaps);
+ gst_caps_unref (tcaps);
+
+ /* Prefer the first caps we are compatible with that the peer proposed */
+ for (i = 0; i < gst_caps_get_size (icaps); i++) {
+ /* get intersection */
+ GstCaps *ipcaps = gst_caps_copy_nth (icaps, i);
+ GstStructure *s = gst_caps_get_structure (ipcaps, 0);
+
+ GST_DEBUG_OBJECT (self, "Testing %s: %" GST_PTR_FORMAT,
+ primary ? "primary" : "secondary", ipcaps);
+ if (primary && gst_structure_has_name (s, "video/x-h264")) {
+ uvcx_video_config_probe_commit_t probe;
+ guint16 width;
+ guint16 height;
+ guint32 interval;
+ guint16 profile;
+ UvcH264StreamFormat stream_format;
+
+ if (_extract_caps_info (s, &width, &height, &interval)) {
+ profile = _extract_profile (s);
+ stream_format = _extract_stream_format (s);
+ fill_probe_commit (self, &probe, interval, width, height,
+ profile, stream_format);
+ probe.bmHints = UVC_H264_BMHINTS_RESOLUTION |
+ UVC_H264_BMHINTS_PROFILE | UVC_H264_BMHINTS_FRAME_INTERVAL;
+
+ if (!xu_query (self, UVCX_VIDEO_CONFIG_PROBE, UVC_SET_CUR,
+ (guchar *) & probe)) {
+ GST_WARNING_OBJECT (self, "PROBE SET_CUR error");
+ return NULL;
+ }
+
+ if (!xu_query (self, UVCX_VIDEO_CONFIG_PROBE, UVC_GET_CUR,
+ (guchar *) & probe)) {
+ GST_WARNING_OBJECT (self, "PROBE GET_CUR error");
+ return NULL;
+ }
+ GST_DEBUG_OBJECT (self, "Probe gives us %d==%d, %d==%d, %d==%d",
+ probe.wWidth, width, probe.wHeight, height,
+ probe.bStreamFormat, stream_format);
+ if (probe.wWidth == width && probe.wHeight == height &&
+ probe.bStreamFormat == stream_format) {
+ caps = ipcaps;
+ break;
+ }
+ }
+ } else if (!primary && self->main_format == UVC_H264_SRC_FORMAT_H264) {
+ uvcx_video_config_probe_commit_t probe;
+ guint16 width;
+ guint16 height;
+ guint32 interval;
+
+ if (_extract_caps_info (s, &width, &height, &interval)) {
+ if (gst_structure_has_name (s, "video/x-raw-yuv")) {
+ guint32 fcc = 0;
+ guint8 mux = 0;
+
+ if (gst_structure_get_fourcc (s, "format", &fcc)) {
+ if (fcc == GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'))
+ mux = 4;
+ else if (fcc == GST_MAKE_FOURCC ('N', 'V', '1', '2'))
+ mux = 8;
+ }
+ if (mux != 0) {
+ memset (&probe, 0, sizeof (probe));
+ probe.dwFrameInterval = interval;
+ probe.wWidth = width;
+ probe.wHeight = height;
+ probe.bStreamMuxOption = mux | 1;
+ probe.bmHints = UVC_H264_BMHINTS_RESOLUTION |
+ UVC_H264_BMHINTS_PROFILE | UVC_H264_BMHINTS_FRAME_INTERVAL;
+
+ if (!xu_query (self, UVCX_VIDEO_CONFIG_PROBE, UVC_SET_CUR,
+ (guchar *) & probe)) {
+ GST_WARNING_OBJECT (self, "PROBE SET_CUR error");
+ return NULL;
+ }
+
+ if (!xu_query (self, UVCX_VIDEO_CONFIG_PROBE, UVC_GET_CUR,
+ (guchar *) & probe)) {
+ GST_WARNING_OBJECT (self, "PROBE GET_CUR error");
+ return NULL;
+ }
+ GST_DEBUG_OBJECT (self, "Probe gives us %d==%d, %d==%d, %d~=%d",
+ probe.wWidth, width, probe.wHeight, height,
+ probe.bStreamMuxOption, mux);
+ if (probe.wWidth == width && probe.wHeight == height &&
+ (probe.bStreamMuxOption & mux) != 0) {
+ caps = ipcaps;
+ break;
+ }
+ }
+ } else if (gst_structure_has_name (s, "image/jpeg")) {
+ /* HACK ALERT: No way of figuring this one out but it seems the
+ * camera doesn't allow for h264 muxing and jpeg resolution higher
+ * than 640x480 so we shouldn't allow it */
+ if (width <= 640 && height <= 480) {
+ caps = ipcaps;
+ break;
+ }
+ }
+ }
+ } else {
+ caps = ipcaps;
+ break;
+ }
+ gst_caps_unref (ipcaps);
+ }
+
+ if (caps) {
+ caps = gst_caps_make_writable (caps);
+ gst_caps_truncate (caps);
+
+ /* now fixate */
+ if (!gst_caps_is_empty (caps)) {
+ gst_pad_fixate_caps (v4l_pad, caps);
+ GST_DEBUG_OBJECT (self, "fixated to: %" GST_PTR_FORMAT, caps);
+ }
+
+ if (gst_caps_is_empty (caps) || gst_caps_is_any (caps)) {
+ gst_caps_unref (caps);
+ caps = NULL;
+ }
+ }
+
+ return caps;
+}
+
+static void
+gst_uvc_h264_src_destroy_pipeline (GstUvcH264Src * self, gboolean v4l2src)
+{
+ GstIterator *iter = NULL;
+ gboolean done;
+
+ if (v4l2src && self->v4l2_src) {
+ gst_bin_remove (GST_BIN (self), self->v4l2_src);
+ gst_element_set_state (self->v4l2_src, GST_STATE_NULL);
+ gst_object_unref (self->v4l2_src);
+ self->v4l2_src = NULL;
+ self->v4l2_fd = -1;
+ self->h264_unit_id = 0;
+ }
+ if (self->mjpg_demux) {
+ gst_bin_remove (GST_BIN (self), self->mjpg_demux);
+ gst_element_set_state (self->mjpg_demux, GST_STATE_NULL);
+ gst_object_unref (self->mjpg_demux);
+ self->mjpg_demux = NULL;
+ }
+ if (self->jpeg_dec) {
+ gst_bin_remove (GST_BIN (self), self->jpeg_dec);
+ gst_element_set_state (self->jpeg_dec, GST_STATE_NULL);
+ gst_object_unref (self->jpeg_dec);
+ self->jpeg_dec = NULL;
+ }
+ if (self->vid_colorspace) {
+ gst_bin_remove (GST_BIN (self), self->vid_colorspace);
+ gst_element_set_state (self->vid_colorspace, GST_STATE_NULL);
+ gst_object_unref (self->vid_colorspace);
+ self->vid_colorspace = NULL;
+ }
+ if (self->vf_colorspace) {
+ gst_bin_remove (GST_BIN (self), self->vf_colorspace);
+ gst_element_set_state (self->vf_colorspace, GST_STATE_NULL);
+ gst_object_unref (self->vf_colorspace);
+ self->vf_colorspace = NULL;
+ }
+ iter = gst_bin_iterate_elements (GST_BIN (self));
+ done = FALSE;
+ while (!done) {
+ GstElement *item = NULL;
+
+ switch (gst_iterator_next (iter, (gpointer *) & item)) {
+ case GST_ITERATOR_OK:
+ if (item != self->v4l2_src) {
+ gst_bin_remove (GST_BIN (self), item);
+ gst_element_set_state (item, GST_STATE_NULL);
+ }
+ gst_object_unref (item);
+ break;
+ case GST_ITERATOR_RESYNC:
+ gst_iterator_resync (iter);
+ break;
+ case GST_ITERATOR_ERROR:
+ done = TRUE;
+ break;
+ case GST_ITERATOR_DONE:
+ done = TRUE;
+ break;
+ }
+ }
+ gst_iterator_free (iter);
+}
+
+static gboolean
+ensure_v4l2src (GstUvcH264Src * self)
+{
+ gchar *device = NULL;
+ GstClock *v4l2_clock = NULL;
+
+ if (self->v4l2_src == NULL) {
+ /* Create v4l2 source and set it up */
+ self->v4l2_src = gst_element_factory_make ("v4l2src", NULL);
+ if (!self->v4l2_src || !gst_bin_add (GST_BIN (self), self->v4l2_src))
+ goto error;
+ gst_object_ref (self->v4l2_src);
+ g_signal_connect (self->v4l2_src, "prepare-format",
+ (GCallback) v4l2src_prepare_format, self);
+ }
+
+ g_object_get (self->v4l2_src, "device", &device, NULL);
+ g_object_set (self->v4l2_src,
+ "device", self->device, "num-buffers", self->num_buffers, NULL);
+
+ v4l2_clock = gst_element_get_clock (self->v4l2_src);
+
+ /* Set to NULL if the device changed */
+ if (g_strcmp0 (device, self->device))
+ gst_element_set_state (self->v4l2_src, GST_STATE_NULL);
+ g_free (device);
+
+ if (gst_element_set_state (self->v4l2_src, GST_STATE_READY) !=
+ GST_STATE_CHANGE_SUCCESS) {
+ GST_DEBUG_OBJECT (self, "Unable to set v4l2src to READY state");
+ goto error_remove;
+ }
+
+ /* Set/Update the fd and unit id after we go to READY */
+ g_object_get (self->v4l2_src, "device-fd", &self->v4l2_fd, NULL);
+ self->h264_unit_id = xu_get_id (self);
+
+ if (self->h264_unit_id == 0) {
+ GST_ELEMENT_ERROR (self, RESOURCE, SETTINGS,
+ ("Device is not a valid UVC H264 camera"), (NULL));
+ goto error_remove;
+ }
+
+ /* going to state READY makes v4l2src lose its reference to the clock */
+ if (v4l2_clock) {
+ gst_element_set_clock (self->v4l2_src, v4l2_clock);
+ gst_element_set_base_time (self->v4l2_src,
+ gst_element_get_base_time (GST_ELEMENT (self)));
+ gst_object_unref (v4l2_clock);
+ }
+
+ return TRUE;
+
+error_remove:
+ gst_element_set_state (self->v4l2_src, GST_STATE_NULL);
+ gst_bin_remove (GST_BIN (self), self->v4l2_src);
+
+error:
+ if (self->v4l2_src)
+ gst_object_unref (self->v4l2_src);
+ self->v4l2_src = NULL;
+ self->v4l2_fd = -1;
+ self->h264_unit_id = 0;
+
+ return FALSE;
+}
+
+static gboolean
+gst_uvc_h264_src_construct_pipeline (GstBaseCameraSrc * bcamsrc)
+{
+ GstUvcH264Src *self = GST_UVC_H264_SRC (bcamsrc);
+ GstIterator *iter = NULL;
+ gboolean iter_done = FALSE;
+ GstPad *vf_pad = NULL;
+ GstCaps *vf_caps = NULL;
+ GstStructure *vf_struct = NULL;
+ GstPad *vid_pad = NULL;
+ GstCaps *vid_caps = NULL;
+ GstStructure *vid_struct = NULL;
+ GstCaps *src_caps = NULL;
+ GstPad *v4l_pad = NULL;
+ GstCaps *v4l_caps = NULL;
+ gboolean jpg2raw = FALSE;
+
+ enum
+ {
+ RAW_NONE, ENCODED_NONE, NONE_RAW, NONE_ENCODED,
+ H264_JPG, H264_RAW, H264_JPG2RAW, NONE_NONE,
+ RAW_RAW, ENCODED_ENCODED,
+ } type;
+
+ GST_DEBUG_OBJECT (self, "Construct pipeline");
+ self->reconfiguring = TRUE;
+
+ if (self->v4l2_src) {
+ uvcx_encoder_reset req = { 0 };
+
+ if (!xu_query (self, UVCX_ENCODER_RESET, UVC_SET_CUR, (guchar *) & req))
+ GST_WARNING_OBJECT (self, " UVCX_ENCODER_RESET SET_CUR error");
+ }
+
+ if (!ensure_v4l2src (self))
+ goto error;
+
+ gst_uvc_h264_src_destroy_pipeline (self, FALSE);
+
+ /* Potentially unlink v4l2src to the ghost pads */
+ gst_ghost_pad_set_target (GST_GHOST_PAD (self->vidsrc), NULL);
+ gst_ghost_pad_set_target (GST_GHOST_PAD (self->vfsrc), NULL);
+
+ vf_caps = gst_pad_peer_get_caps (self->vfsrc);
+ vid_caps = gst_pad_peer_get_caps (self->vidsrc);
+
+ GST_DEBUG_OBJECT (self, "vfsrc caps : %" GST_PTR_FORMAT, vf_caps);
+ GST_DEBUG_OBJECT (self, "vidsrc caps : %" GST_PTR_FORMAT, vid_caps);
+ if (!self->started) {
+ GST_DEBUG_OBJECT (self, "video not started. Ignoring vidsrc caps");
+ if (vid_caps)
+ gst_caps_unref (vid_caps);
+ vid_caps = NULL;
+ }
+
+ v4l_pad = gst_element_get_static_pad (self->v4l2_src, "src");
+ v4l_caps = gst_pad_get_caps (v4l_pad);
+ GST_DEBUG_OBJECT (self, "v4l2src caps : %" GST_PTR_FORMAT, v4l_caps);
+ if (vid_caps) {
+ GstCaps *trans_caps = gst_uvc_h264_src_transform_caps (self, vid_caps);
+
+ gst_caps_unref (vid_caps);
+ vid_caps = gst_uvc_h264_src_fixate_caps (self, v4l_pad, v4l_caps,
+ trans_caps, TRUE);
+ gst_caps_unref (trans_caps);
+
+ if (vid_caps) {
+ vid_struct = gst_caps_get_structure (vid_caps, 0);
+ } else {
+ GST_WARNING_OBJECT (self, "Could not negotiate vidsrc caps format");
+ gst_object_unref (v4l_pad);
+ gst_caps_unref (v4l_caps);
+ goto error_remove;
+ }
+ }
+ GST_DEBUG_OBJECT (self, "Fixated vidsrc caps : %" GST_PTR_FORMAT, vid_caps);
+
+ if (vid_caps && gst_structure_has_name (vid_struct, "video/x-h264")) {
+ self->main_format = UVC_H264_SRC_FORMAT_H264;
+ if (!_extract_caps_info (vid_struct, &self->main_width,
+ &self->main_height, &self->main_frame_interval)) {
+ gst_object_unref (v4l_pad);
+ gst_caps_unref (v4l_caps);
+ goto error_remove;
+ }
+
+ self->main_stream_format = _extract_stream_format (vid_struct);
+ self->main_profile = _extract_profile (vid_struct);
+ } else {
+ self->main_format = UVC_H264_SRC_FORMAT_NONE;
+ }
+
+ if (vf_caps) {
+ GstCaps *trans_caps = gst_uvc_h264_src_transform_caps (self, vf_caps);
+
+ gst_caps_unref (vf_caps);
+ vf_caps = gst_uvc_h264_src_fixate_caps (self, v4l_pad, v4l_caps,
+ trans_caps, FALSE);
+
+ /* If we couldn't find a suitable vf cap, try the jpeg2raw pipeline */
+ if (!vf_caps && self->main_format == UVC_H264_SRC_FORMAT_H264) {
+ GstCaps *jpg_caps;
+
+ jpg2raw = TRUE;
+ jpg_caps = _transform_caps (self, trans_caps, self->jpeg_decoder_name);
+
+ vf_caps = gst_uvc_h264_src_fixate_caps (self, v4l_pad, v4l_caps,
+ jpg_caps, FALSE);
+ gst_caps_unref (jpg_caps);
+ }
+ gst_caps_unref (trans_caps);
+ if (vf_caps) {
+ vf_struct = gst_caps_get_structure (vf_caps, 0);
+ } else {
+ GST_WARNING_OBJECT (self, "Could not negotiate vfsrc caps format");
+ gst_object_unref (v4l_pad);
+ gst_caps_unref (v4l_caps);
+ goto error_remove;
+ }
+ }
+ GST_DEBUG_OBJECT (self, "Fixated vfsrc caps : %" GST_PTR_FORMAT, vf_caps);
+ gst_object_unref (v4l_pad);
+ gst_caps_unref (v4l_caps);
+
+ if (vf_caps && vid_caps &&
+ !gst_structure_has_name (vid_struct, "video/x-h264")) {
+ /* Allow for vfsrc+vidsrc to both be raw or jpeg */
+ if (gst_structure_has_name (vid_struct, "image/jpeg") &&
+ gst_structure_has_name (vf_struct, "image/jpeg")) {
+ self->main_format = UVC_H264_SRC_FORMAT_JPG;
+ self->secondary_format = UVC_H264_SRC_FORMAT_JPG;
+ type = ENCODED_ENCODED;
+ } else if (!gst_structure_has_name (vid_struct, "image/jpeg") &&
+ !gst_structure_has_name (vf_struct, "image/jpeg")) {
+ self->main_format = UVC_H264_SRC_FORMAT_RAW;
+ self->secondary_format = UVC_H264_SRC_FORMAT_RAW;
+ type = RAW_RAW;
+ } else {
+ goto error_remove;
+ }
+ } else if (vf_caps && vid_caps) {
+ guint32 smallest_frame_interval;
+
+ if (!_extract_caps_info (vf_struct, &self->secondary_width,
+ &self->secondary_height, &self->secondary_frame_interval))
+ goto error_remove;
+
+ if (jpg2raw == FALSE && gst_structure_has_name (vf_struct, "image/jpeg")) {
+ type = H264_JPG;
+ self->secondary_format = UVC_H264_SRC_FORMAT_JPG;
+ } else {
+ if (jpg2raw) {
+ type = H264_JPG2RAW;
+ self->secondary_format = UVC_H264_SRC_FORMAT_JPG;
+ } else {
+ type = H264_RAW;
+ self->secondary_format = UVC_H264_SRC_FORMAT_RAW;
+ }
+ }
+ smallest_frame_interval = MIN (self->main_frame_interval,
+ self->secondary_frame_interval);
+ /* Just to avoid a potential division by zero, set interval to 30 fps */
+ if (smallest_frame_interval == 0)
+ smallest_frame_interval = 333333;
+
+ /* Frame interval is in 100ns units */
+ src_caps = gst_caps_new_simple ("image/jpeg",
+ "width", G_TYPE_INT, self->secondary_width,
+ "height", G_TYPE_INT, self->secondary_height,
+ "framerate", GST_TYPE_FRACTION,
+ NSEC_PER_SEC / smallest_frame_interval, 100, NULL);
+ } else if (vf_caps || vid_caps) {
+ self->secondary_format = UVC_H264_SRC_FORMAT_NONE;
+ if (vid_struct && gst_structure_has_name (vid_struct, "video/x-h264")) {
+ type = ENCODED_NONE;
+ } else if (vid_struct && gst_structure_has_name (vid_struct, "image/jpeg")) {
+ type = ENCODED_NONE;
+ self->main_format = UVC_H264_SRC_FORMAT_JPG;
+ } else if (vf_struct && gst_structure_has_name (vf_struct, "image/jpeg")) {
+ type = NONE_ENCODED;
+ self->secondary_format = UVC_H264_SRC_FORMAT_JPG;
+ } else if (vid_struct) {
+ type = RAW_NONE;
+ self->main_format = UVC_H264_SRC_FORMAT_RAW;
+ } else if (vf_struct) {
+ type = NONE_RAW;
+ self->secondary_format = UVC_H264_SRC_FORMAT_RAW;
+ } else {
+ g_assert_not_reached ();
+ }
+ } else {
+ type = NONE_NONE;
+ self->main_format = UVC_H264_SRC_FORMAT_NONE;
+ self->secondary_format = UVC_H264_SRC_FORMAT_NONE;
+ }
+
+ switch (type) {
+ case NONE_NONE:
+ GST_DEBUG_OBJECT (self, "None+None");
+ vf_pad = gst_element_get_static_pad (self->v4l2_src, "src");
+ break;
+ case RAW_NONE:
+ GST_DEBUG_OBJECT (self, "Raw+None");
+ self->vid_colorspace = gst_element_factory_make (self->colorspace_name,
+ NULL);
+ if (!self->vid_colorspace ||
+ !gst_bin_add (GST_BIN (self), self->vid_colorspace))
+ goto error_remove;
+ gst_object_ref (self->vid_colorspace);
+ if (!gst_element_link (self->v4l2_src, self->vid_colorspace))
+ goto error_remove_all;
+ vid_pad = gst_element_get_static_pad (self->vid_colorspace, "src");
+ break;
+ case NONE_RAW:
+ GST_DEBUG_OBJECT (self, "None+Raw");
+ self->vf_colorspace = gst_element_factory_make (self->colorspace_name,
+ NULL);
+ if (!self->vf_colorspace ||
+ !gst_bin_add (GST_BIN (self), self->vf_colorspace))
+ goto error_remove;
+ gst_object_ref (self->vf_colorspace);
+ if (!gst_element_link (self->v4l2_src, self->vf_colorspace))
+ goto error_remove_all;
+ vf_pad = gst_element_get_static_pad (self->vf_colorspace, "src");
+ break;
+ case ENCODED_NONE:
+ GST_DEBUG_OBJECT (self, "Encoded+None");
+ vid_pad = gst_element_get_static_pad (self->v4l2_src, "src");
+ break;
+ case NONE_ENCODED:
+ GST_DEBUG_OBJECT (self, "None+Encoded");
+ vf_pad = gst_element_get_static_pad (self->v4l2_src, "src");
+ break;
+ case H264_JPG:
+ GST_DEBUG_OBJECT (self, "H264+JPG");
+ self->mjpg_demux = gst_element_factory_make ("uvch264_mjpgdemux", NULL);
+ if (!self->mjpg_demux || !gst_bin_add (GST_BIN (self), self->mjpg_demux))
+ goto error_remove;
+ gst_object_ref (self->mjpg_demux);
+ g_object_set (self->mjpg_demux, "device-fd", self->v4l2_fd,
+ "num-clock-samples", self->num_clock_samples, NULL);
+ if (!gst_element_link_filtered (self->v4l2_src, self->mjpg_demux,
+ src_caps))
+ goto error_remove_all;
+ vid_pad = gst_element_get_static_pad (self->mjpg_demux, "h264");
+ vf_pad = gst_element_get_static_pad (self->mjpg_demux, "jpeg");
+ break;
+ case H264_RAW:
+ GST_DEBUG_OBJECT (self, "H264+Raw");
+ self->mjpg_demux = gst_element_factory_make ("uvch264_mjpgdemux", NULL);
+ self->vf_colorspace = gst_element_factory_make (self->colorspace_name,
+ NULL);
+ if (!self->mjpg_demux || !self->vf_colorspace)
+ goto error_remove;
+ if (!gst_bin_add (GST_BIN (self), self->mjpg_demux))
+ goto error_remove;
+ gst_object_ref (self->mjpg_demux);
+ g_object_set (self->mjpg_demux, "device-fd", self->v4l2_fd,
+ "num-clock-samples", self->num_clock_samples, NULL);
+ if (!gst_bin_add (GST_BIN (self), self->vf_colorspace)) {
+ gst_object_unref (self->vf_colorspace);
+ self->vf_colorspace = NULL;
+ goto error_remove_all;
+ }
+ gst_object_ref (self->vf_colorspace);
+ if (!gst_element_link_filtered (self->v4l2_src, self->mjpg_demux,
+ src_caps))
+ goto error_remove_all;
+ if (!gst_element_link_pads (self->mjpg_demux, "yuy2",
+ self->vf_colorspace, "sink"))
+ goto error_remove_all;
+ vid_pad = gst_element_get_static_pad (self->mjpg_demux, "h264");
+ vf_pad = gst_element_get_static_pad (self->vf_colorspace, "src");
+ break;
+ case H264_JPG2RAW:
+ GST_DEBUG_OBJECT (self, "H264+Raw(jpegdec)");
+ self->mjpg_demux = gst_element_factory_make ("uvch264_mjpgdemux", NULL);
+ self->jpeg_dec = gst_element_factory_make (self->jpeg_decoder_name, NULL);
+ self->vf_colorspace = gst_element_factory_make (self->colorspace_name,
+ NULL);
+ if (!self->mjpg_demux || !self->jpeg_dec || !self->vf_colorspace)
+ goto error_remove;
+ if (!gst_bin_add (GST_BIN (self), self->mjpg_demux))
+ goto error_remove;
+ gst_object_ref (self->mjpg_demux);
+ g_object_set (self->mjpg_demux, "device-fd", self->v4l2_fd,
+ "num-clock-samples", self->num_clock_samples, NULL);
+ if (!gst_bin_add (GST_BIN (self), self->jpeg_dec)) {
+ gst_object_unref (self->jpeg_dec);
+ self->jpeg_dec = NULL;
+ gst_object_unref (self->vf_colorspace);
+ self->vf_colorspace = NULL;
+ goto error_remove_all;
+ }
+ gst_object_ref (self->jpeg_dec);
+ if (!gst_bin_add (GST_BIN (self), self->vf_colorspace)) {
+ gst_object_unref (self->vf_colorspace);
+ self->vf_colorspace = NULL;
+ goto error_remove_all;
+ }
+ gst_object_ref (self->vf_colorspace);
+ if (!gst_element_link_filtered (self->v4l2_src, self->mjpg_demux,
+ src_caps))
+ goto error_remove_all;
+ if (!gst_element_link_pads (self->mjpg_demux, "jpeg", self->jpeg_dec,
+ "sink"))
+ goto error_remove_all;
+ if (!gst_element_link (self->jpeg_dec, self->vf_colorspace))
+ goto error_remove_all;
+ vid_pad = gst_element_get_static_pad (self->mjpg_demux, "h264");
+ vf_pad = gst_element_get_static_pad (self->vf_colorspace, "src");
+ break;
+ case RAW_RAW:
+ {
+ GstElement *tee = NULL;
+
+ GST_DEBUG_OBJECT (self, "Raw+Raw");
+ tee = gst_element_factory_make ("tee", NULL);
+ if (!tee || !gst_bin_add (GST_BIN (self), tee)) {
+ if (tee)
+ gst_object_unref (tee);
+ goto error_remove;
+ }
+ self->vf_colorspace = gst_element_factory_make (self->colorspace_name,
+ NULL);
+ self->vid_colorspace = gst_element_factory_make (self->colorspace_name,
+ NULL);
+ if (!self->vf_colorspace || !self->vid_colorspace)
+ goto error_remove;
+ if (!gst_bin_add (GST_BIN (self), self->vf_colorspace))
+ goto error_remove;
+ gst_object_ref (self->vf_colorspace);
+ if (!gst_bin_add (GST_BIN (self), self->vid_colorspace)) {
+ gst_object_unref (self->vid_colorspace);
+ self->vid_colorspace = NULL;
+ goto error_remove_all;
+ }
+ gst_object_ref (self->vid_colorspace);
+ if (!gst_element_link (self->v4l2_src, tee))
+ goto error_remove_all;
+ if (!gst_element_link (tee, self->vf_colorspace))
+ goto error_remove_all;
+ if (!gst_element_link (tee, self->vid_colorspace))
+ goto error_remove_all;
+ vf_pad = gst_element_get_static_pad (self->vf_colorspace, "src");
+ vid_pad = gst_element_get_static_pad (self->vid_colorspace, "src");
+ }
+ break;
+ case ENCODED_ENCODED:
+ {
+ GstElement *tee = NULL;
+
+ GST_DEBUG_OBJECT (self, "Encoded+Encoded");
+ tee = gst_element_factory_make ("tee", NULL);
+ if (!tee || !gst_bin_add (GST_BIN (self), tee)) {
+ if (tee)
+ gst_object_unref (tee);
+ goto error_remove;
+ }
+ if (!gst_element_link (self->v4l2_src, tee))
+ goto error_remove_all;
+ vf_pad = gst_element_get_request_pad (tee, "src%d");
+ vid_pad = gst_element_get_request_pad (tee, "src%d");
+ }
+ break;
+ }
+
+ if (!gst_ghost_pad_set_target (GST_GHOST_PAD (self->vidsrc), vid_pad) ||
+ !gst_ghost_pad_set_target (GST_GHOST_PAD (self->vfsrc), vf_pad))
+ goto error_remove_all;
+ if (vid_pad)
+ gst_object_unref (vid_pad);
+ if (vf_pad)
+ gst_object_unref (vf_pad);
+ vid_pad = vf_pad = NULL;
+
+ if (vf_caps)
+ gst_caps_unref (vf_caps);
+ if (vid_caps)
+ gst_caps_unref (vid_caps);
+ if (src_caps)
+ gst_caps_unref (src_caps);
+ vf_caps = vid_caps = src_caps = NULL;
+
+ /* Sync children states, in sink to source order */
+ if (self->vid_colorspace &&
+ !gst_element_sync_state_with_parent (self->vid_colorspace))
+ goto error_remove_all;
+ if (self->vf_colorspace &&
+ !gst_element_sync_state_with_parent (self->vf_colorspace))
+ goto error_remove_all;
+ if (self->jpeg_dec && !gst_element_sync_state_with_parent (self->jpeg_dec))
+ goto error_remove_all;
+ if (self->mjpg_demux &&
+ !gst_element_sync_state_with_parent (self->mjpg_demux))
+ goto error_remove_all;
+ if (self->v4l2_src && !gst_element_sync_state_with_parent (self->v4l2_src))
+ goto error_remove_all;
+
+ /* Sync any remaining children states with bin's state */
+ iter = gst_bin_iterate_elements (GST_BIN (self));
+ iter_done = FALSE;
+ while (!iter_done) {
+ GstElement *item = NULL;
+
+ switch (gst_iterator_next (iter, (gpointer *) & item)) {
+ case GST_ITERATOR_OK:
+ if (!gst_element_sync_state_with_parent (item)) {
+ gst_object_unref (item);
+ gst_iterator_free (iter);
+ goto error_remove_all;
+ }
+ gst_object_unref (item);
+ break;
+ case GST_ITERATOR_RESYNC:
+ gst_iterator_resync (iter);
+ break;
+ case GST_ITERATOR_ERROR:
+ iter_done = TRUE;
+ break;
+ case GST_ITERATOR_DONE:
+ iter_done = TRUE;
+ break;
+ }
+ }
+ gst_iterator_free (iter);
+
+ self->reconfiguring = FALSE;
+ return TRUE;
+
+error_remove_all:
+ gst_uvc_h264_src_destroy_pipeline (self, FALSE);
+error_remove:
+ gst_element_set_state (self->v4l2_src, GST_STATE_NULL);
+ gst_bin_remove (GST_BIN (self), self->v4l2_src);
+
+error:
+ if (self->v4l2_src)
+ gst_object_unref (self->v4l2_src);
+ self->v4l2_src = NULL;
+ self->v4l2_fd = -1;
+ self->h264_unit_id = 0;
+
+ if (self->mjpg_demux)
+ gst_object_unref (self->mjpg_demux);
+ self->mjpg_demux = NULL;
+ if (self->jpeg_dec)
+ gst_object_unref (self->jpeg_dec);
+ self->jpeg_dec = NULL;
+ if (self->vid_colorspace)
+ gst_object_unref (self->vid_colorspace);
+ self->vid_colorspace = NULL;
+ if (self->vf_colorspace)
+ gst_object_unref (self->vf_colorspace);
+ self->vf_colorspace = NULL;
+
+ if (src_caps)
+ gst_caps_unref (src_caps);
+
+ if (vf_caps)
+ gst_caps_unref (vf_caps);
+ if (vid_caps)
+ gst_caps_unref (vid_caps);
+
+ if (vid_pad)
+ gst_object_unref (vid_pad);
+ if (vf_pad)
+ gst_object_unref (vf_pad);
+
+ self->reconfiguring = FALSE;
+ return FALSE;
+}
+
+static GstCaps *
+gst_uvc_h264_src_getcaps (GstPad * pad)
+{
+ GstUvcH264Src *self = GST_UVC_H264_SRC (GST_OBJECT_PARENT (pad));
+ GstCaps *template = NULL;
+ GstCaps *result = NULL;
+
+ if (pad == self->vfsrc)
+ template = gst_static_pad_template_get_caps (&vfsrc_template);
+ else if (pad == self->vidsrc)
+ template = gst_static_pad_template_get_caps (&vidsrc_template);
+ else
+ template = gst_caps_new_empty ();
+
+ if (self->v4l2_src) {
+ GstPad *v4l_pad = gst_element_get_static_pad (self->v4l2_src, "src");
+ GstCaps *v4l_caps = gst_pad_get_caps (v4l_pad);
+ GstCaps *new_caps = gst_uvc_h264_src_transform_caps (self, v4l_caps);
+
+ result = gst_caps_intersect (new_caps, template);
+ gst_object_unref (v4l_pad);
+ gst_caps_unref (v4l_caps);
+ gst_caps_unref (new_caps);
+ gst_caps_unref (template);
+ } else {
+ result = template;
+ }
+
+ return result;
+}
+
+static gboolean
+gst_uvc_h264_src_set_mode (GstBaseCameraSrc * bcamsrc, GstCameraBinMode mode)
+{
+ GstUvcH264Src *self = GST_UVC_H264_SRC (bcamsrc);
+
+ GST_DEBUG_OBJECT (self, "set mode to %d", mode);
+
+ return (mode == MODE_VIDEO);
+}
+
+static gboolean
+gst_uvc_h264_src_start_capture (GstBaseCameraSrc * camerasrc)
+{
+ GstUvcH264Src *self = GST_UVC_H264_SRC (camerasrc);
+ gboolean ret = TRUE;
+
+ GST_DEBUG_OBJECT (self, "start capture");
+
+ if (!self->started) {
+ self->started = TRUE;
+ if (GST_STATE (self) >= GST_STATE_READY) {
+ ret = gst_uvc_h264_src_construct_pipeline (GST_BASE_CAMERA_SRC (self));
+ if (!ret) {
+ GST_DEBUG_OBJECT (self, "Could not start capture");
+ self->started = FALSE;
+ gst_uvc_h264_src_construct_pipeline (GST_BASE_CAMERA_SRC (self));
+ }
+ }
+ }
+
+ return ret;
+}
+
+static void
+gst_uvc_h264_src_stop_capture (GstBaseCameraSrc * camerasrc)
+{
+ GstUvcH264Src *self = GST_UVC_H264_SRC (camerasrc);
+
+ GST_DEBUG_OBJECT (self, "stop capture");
+
+ if (self->started) {
+ self->started = FALSE;
+ if (GST_STATE (self) >= GST_STATE_READY)
+ gst_uvc_h264_src_construct_pipeline (GST_BASE_CAMERA_SRC (self));
+ gst_base_camera_src_finish_capture (camerasrc);
+ }
+}
+
+static void
+gst_uvc_h264_src_pad_linking_cb (GstPad * pad,
+ GstPad * peer, gpointer user_data)
+{
+ GstUvcH264Src *self = GST_UVC_H264_SRC (user_data);
+ gchar *pad_name = gst_pad_get_name (pad);
+
+ GST_DEBUG_OBJECT (self, "Pad %s was (un)linked. Renegotiating", pad_name);
+ g_free (pad_name);
+ if (GST_STATE (self) >= GST_STATE_READY)
+ gst_uvc_h264_src_construct_pipeline (GST_BASE_CAMERA_SRC (self));
+}
+
+
+static GstStateChangeReturn
+gst_uvc_h264_src_change_state (GstElement * element, GstStateChange trans)
+{
+ GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
+ GstUvcH264Src *self = GST_UVC_H264_SRC (element);
+
+ switch (trans) {
+ case GST_STATE_CHANGE_NULL_TO_READY:
+ if (!ensure_v4l2src (self)) {
+ ret = GST_STATE_CHANGE_FAILURE;
+ goto end;
+ }
+ gst_segment_init (&self->segment, GST_FORMAT_UNDEFINED);
+ break;
+ case GST_STATE_CHANGE_READY_TO_PAUSED:
+ case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+ if (!self->v4l2_src)
+ gst_uvc_h264_src_construct_pipeline (GST_BASE_CAMERA_SRC (self));
+ break;
+ default:
+ break;
+ }
+
+ ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, trans);
+
+ if (ret == GST_STATE_CHANGE_FAILURE)
+ goto end;
+
+ switch (trans) {
+ case GST_STATE_CHANGE_PAUSED_TO_READY:
+ self->vid_newseg = FALSE;
+ self->vf_newseg = FALSE;
+ break;
+ case GST_STATE_CHANGE_READY_TO_NULL:
+ gst_uvc_h264_src_destroy_pipeline (self, TRUE);
+ break;
+ default:
+ break;
+ }
+
+
+end:
+ return ret;
+}
diff --git a/sys/uvch264/gstuvch264_src.h b/sys/uvch264/gstuvch264_src.h
new file mode 100644
index 00000000..0b139ff1
--- /dev/null
+++ b/sys/uvch264/gstuvch264_src.h
@@ -0,0 +1,162 @@
+/*
+ * GStreamer
+ *
+ * Copyright (C) 2012 Cisco Systems, Inc.
+ * Author: Youness Alaoui <youness.alaoui@collabora.co.uk>
+ *
+ * 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_UVC_H264_SRC_H__
+#define __GST_UVC_H264_SRC_H__
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <gst/gst.h>
+#include <gst/basecamerabinsrc/gstbasecamerasrc.h>
+#include <libusb.h>
+
+#include "uvc_h264.h"
+
+G_BEGIN_DECLS
+#define GST_TYPE_UVC_H264_SRC \
+ (gst_uvc_h264_src_get_type())
+#define GST_UVC_H264_SRC(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj), GST_TYPE_UVC_H264_SRC, GstUvcH264Src))
+#define GST_UVC_H264_SRC_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass), GST_TYPE_UVC_H264_SRC, GstUvcH264SrcClass))
+#define GST_IS_UVC_H264_SRC(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj), GST_TYPE_UVC_H264_SRC))
+#define GST_IS_UVC_H264_SRC_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass), GST_TYPE_UVC_H264_SRC))
+ GType gst_uvc_h264_src_get_type (void);
+
+typedef struct _GstUvcH264Src GstUvcH264Src;
+typedef struct _GstUvcH264SrcClass GstUvcH264SrcClass;
+
+enum GstVideoRecordingStatus {
+ GST_VIDEO_RECORDING_STATUS_DONE,
+ GST_VIDEO_RECORDING_STATUS_STARTING,
+ GST_VIDEO_RECORDING_STATUS_RUNNING,
+ GST_VIDEO_RECORDING_STATUS_FINISHING
+};
+
+enum {
+ QP_I_FRAME = 0,
+ QP_P_FRAME,
+ QP_B_FRAME,
+ QP_FRAMES
+};
+
+typedef enum {
+ UVC_H264_SRC_FORMAT_NONE,
+ UVC_H264_SRC_FORMAT_JPG,
+ UVC_H264_SRC_FORMAT_H264,
+ UVC_H264_SRC_FORMAT_RAW
+} GstUvcH264SrcFormat;
+
+/**
+ * GstUcH264Src:
+ *
+ */
+struct _GstUvcH264Src
+{
+ GstBaseCameraSrc parent;
+
+ GstPad *vfsrc;
+ GstPad *imgsrc;
+ GstPad *vidsrc;
+
+ /* source elements */
+ GstElement *v4l2_src;
+ GstElement *mjpg_demux;
+ GstElement *jpeg_dec;
+ GstElement *vid_colorspace;
+ GstElement *vf_colorspace;
+
+ GstUvcH264SrcFormat main_format;
+ guint16 main_width;
+ guint16 main_height;
+ guint32 main_frame_interval;
+ UvcH264StreamFormat main_stream_format;
+ guint16 main_profile;
+ GstUvcH264SrcFormat secondary_format;
+ guint16 secondary_width;
+ guint16 secondary_height;
+ guint32 secondary_frame_interval;
+
+ int v4l2_fd;
+ guint8 h264_unit_id;
+ libusb_context *usb_ctx;
+
+ GstPadEventFunction srcpad_event_func;
+ GstEvent *key_unit_event;
+ GstSegment segment;
+
+ gboolean started;
+
+ /* When restarting the source */
+ gboolean reconfiguring;
+ gboolean vid_newseg;
+ gboolean vf_newseg;
+
+ gchar *colorspace_name;
+ gchar *jpeg_decoder_name;
+ int num_clock_samples;
+
+ /* v4l2src proxied properties */
+ guint32 num_buffers;
+ gchar *device;
+
+ /* Static controls */
+ guint32 initial_bitrate;
+ guint16 slice_units;
+ UvcH264SliceMode slice_mode;
+ guint16 iframe_period;
+ UvcH264UsageType usage_type;
+ UvcH264Entropy entropy;
+ gboolean enable_sei;
+ guint8 num_reorder_frames;
+ gboolean preview_flipped;
+ guint16 leaky_bucket_size;
+
+ /* Dynamic controls */
+ UvcH264RateControl rate_control;
+ gboolean fixed_framerate;
+ guint8 level_idc;
+ guint32 peak_bitrate;
+ guint32 average_bitrate;
+ gint8 min_qp[QP_FRAMES];
+ gint8 max_qp[QP_FRAMES];
+ guint8 ltr_buffer_size;
+ guint8 ltr_encoder_control;
+};
+
+
+/**
+ * GstUvcH264SrcClass:
+ *
+ */
+struct _GstUvcH264SrcClass
+{
+ GstBaseCameraSrcClass parent;
+};
+
+
+#endif /* __GST_UVC_H264_SRC_H__ */
diff --git a/sys/uvch264/uvc_h264.c b/sys/uvch264/uvc_h264.c
new file mode 100644
index 00000000..1c26ae43
--- /dev/null
+++ b/sys/uvch264/uvc_h264.c
@@ -0,0 +1,122 @@
+/*
+ * GStreamer
+ *
+ * Copyright (C) 2012 Cisco Systems, Inc.
+ * Author: Youness Alaoui <youness.alaoui@collabora.co.uk>
+ *
+ * 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 "uvc_h264.h"
+
+GType
+uvc_h264_slicemode_get_type (void)
+{
+ static GType type = 0;
+
+ static const GEnumValue types[] = {
+ {UVC_H264_SLICEMODE_IGNORED, "Ignored", "ignored"},
+ {UVC_H264_SLICEMODE_BITSPERSLICE, "Bits per slice", "bits/slice"},
+ {UVC_H264_SLICEMODE_MBSPERSLICE, "MBs per Slice", "MBs/slice"},
+ {UVC_H264_SLICEMODE_SLICEPERFRAME, "Slice Per Frame", "slice/frame"},
+ {0, NULL, NULL}
+ };
+
+ if (!type) {
+ type = g_enum_register_static ("UvcH264SliceMode", types);
+ }
+ return type;
+}
+
+GType
+uvc_h264_usagetype_get_type (void)
+{
+ static GType type = 0;
+
+ static const GEnumValue types[] = {
+ {UVC_H264_USAGETYPE_REALTIME, "Realtime (video conferencing)", "realtime"},
+ {UVC_H264_USAGETYPE_BROADCAST, "Broadcast", "broadcast"},
+ {UVC_H264_USAGETYPE_STORAGE, "Storage", "storage"},
+ {UVC_H264_USAGETYPE_UCCONFIG_0, "UCConfig 0", "ucconfig0"},
+ {UVC_H264_USAGETYPE_UCCONFIG_1, "UCConfig 1", "ucconfig1"},
+ {UVC_H264_USAGETYPE_UCCONFIG_2Q, "UCConfig 2Q", "ucconfig2q"},
+ {UVC_H264_USAGETYPE_UCCONFIG_2S, "UCConfig 2S", "ucconfig2s"},
+ {UVC_H264_USAGETYPE_UCCONFIG_3, "UCConfig 3", "ucconfig3"},
+ {0, NULL, NULL}
+ };
+
+ if (!type) {
+ type = g_enum_register_static ("UvcH264UsageType", types);
+ }
+ return type;
+}
+
+GType
+uvc_h264_ratecontrol_get_type (void)
+{
+ static GType type = 0;
+
+ static const GEnumValue types[] = {
+ {UVC_H264_RATECONTROL_CBR, "Constant bit rate", "cbr"},
+ {UVC_H264_RATECONTROL_VBR, "Variable bit rate", "vbr"},
+ {UVC_H264_RATECONTROL_CONST_QP, "Constant QP", "qp"},
+ {0, NULL, NULL}
+ };
+
+ if (!type) {
+ type = g_enum_register_static ("UvcH264RateControl", types);
+ }
+ return type;
+}
+
+GType
+uvc_h264_streamformat_get_type (void)
+{
+ static GType type = 0;
+
+ static const GEnumValue types[] = {
+ {UVC_H264_STREAMFORMAT_ANNEXB, "Byte stream format (Annex B)", "byte"},
+ {UVC_H264_STREAMFORMAT_NAL, "NAL stream format", "nal"},
+ {0, NULL, NULL}
+ };
+
+ if (!type) {
+ type = g_enum_register_static ("UvcH264StreamFormat", types);
+ }
+ return type;
+}
+
+GType
+uvc_h264_entropy_get_type (void)
+{
+ static GType type = 0;
+
+ static const GEnumValue types[] = {
+ {UVC_H264_ENTROPY_CAVLC, "CAVLC", "cavlc"},
+ {UVC_H264_ENTROPY_CABAC, "CABAC", "cabac"},
+ {0, NULL, NULL}
+ };
+
+ if (!type) {
+ type = g_enum_register_static ("UvcH264Entropy", types);
+ }
+ return type;
+}
diff --git a/sys/uvch264/uvc_h264.h b/sys/uvch264/uvc_h264.h
new file mode 100644
index 00000000..d27104ec
--- /dev/null
+++ b/sys/uvch264/uvc_h264.h
@@ -0,0 +1,335 @@
+/*
+ * uvc_h264.h - Definitions of the UVC H.264 Payload specification Version 1.0
+ *
+ * Copyright (c) 2011 USB Implementers Forum, Inc.
+ *
+ * Modification into glib-like header by :
+ * Copyright (C) 2012 Cisco Systems, Inc.
+ * Author: Youness Alaoui <youness.alaoui@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.
+ */
+
+#ifndef _UVC_H264_H_
+#define _UVC_H264_H_
+
+/* Header File for the little-endian platform */
+
+#include <glib.h>
+#include <glib-object.h>
+
+/* bmHints defines */
+
+#define UVC_H264_BMHINTS_RESOLUTION (0x0001)
+#define UVC_H264_BMHINTS_PROFILE (0x0002)
+#define UVC_H264_BMHINTS_RATECONTROL (0x0004)
+#define UVC_H264_BMHINTS_USAGE (0x0008)
+#define UVC_H264_BMHINTS_SLICEMODE (0x0010)
+#define UVC_H264_BMHINTS_SLICEUNITS (0x0020)
+#define UVC_H264_BMHINTS_MVCVIEW (0x0040)
+#define UVC_H264_BMHINTS_TEMPORAL (0x0080)
+#define UVC_H264_BMHINTS_SNR (0x0100)
+#define UVC_H264_BMHINTS_SPATIAL (0x0200)
+#define UVC_H264_BMHINTS_SPATIAL_RATIO (0x0400)
+#define UVC_H264_BMHINTS_FRAME_INTERVAL (0x0800)
+#define UVC_H264_BMHINTS_LEAKY_BKT_SIZE (0x1000)
+#define UVC_H264_BMHINTS_BITRATE (0x2000)
+#define UVC_H264_BMHINTS_ENTROPY (0x4000)
+#define UVC_H264_BMHINTS_IFRAMEPERIOD (0x8000)
+
+
+#define UVC_H264_QP_STEPS_I_FRAME_TYPE (0x01)
+#define UVC_H264_QP_STEPS_P_FRAME_TYPE (0x02)
+#define UVC_H264_QP_STEPS_B_FRAME_TYPE (0x04)
+#define UVC_H264_QP_STEPS_ALL_FRAME_TYPES (UVC_H264_QP_STEPS_I_FRAME_TYPE | \
+ UVC_H264_QP_STEPS_P_FRAME_TYPE | UVC_H264_QP_STEPS_B_FRAME_TYPE)
+
+/* wSliceMode defines */
+
+typedef enum
+{
+ UVC_H264_SLICEMODE_IGNORED = 0x0000,
+ UVC_H264_SLICEMODE_BITSPERSLICE = 0x0001,
+ UVC_H264_SLICEMODE_MBSPERSLICE = 0x0002,
+ UVC_H264_SLICEMODE_SLICEPERFRAME = 0x0003
+} UvcH264SliceMode;
+
+#define UVC_H264_SLICEMODE_TYPE (uvc_h264_slicemode_get_type())
+
+GType uvc_h264_slicemode_get_type (void);
+
+/* bUsageType defines */
+
+typedef enum {
+ UVC_H264_USAGETYPE_REALTIME = 0x01,
+ UVC_H264_USAGETYPE_BROADCAST = 0x02,
+ UVC_H264_USAGETYPE_STORAGE = 0x03,
+ UVC_H264_USAGETYPE_UCCONFIG_0 = 0x04,
+ UVC_H264_USAGETYPE_UCCONFIG_1 = 0x05,
+ UVC_H264_USAGETYPE_UCCONFIG_2Q = 0x06,
+ UVC_H264_USAGETYPE_UCCONFIG_2S = 0x07,
+ UVC_H264_USAGETYPE_UCCONFIG_3 = 0x08,
+} UvcH264UsageType;
+
+#define UVC_H264_USAGETYPE_TYPE (uvc_h264_usagetype_get_type())
+
+GType uvc_h264_usagetype_get_type (void);
+
+/* bRateControlMode defines */
+
+typedef enum {
+ UVC_H264_RATECONTROL_CBR = 0x01,
+ UVC_H264_RATECONTROL_VBR = 0x02,
+ UVC_H264_RATECONTROL_CONST_QP = 0x03,
+} UvcH264RateControl;
+
+#define UVC_H264_RATECONTROL_FIXED_FRM_FLG (0x10)
+
+#define UVC_H264_RATECONTROL_TYPE (uvc_h264_ratecontrol_get_type())
+
+GType uvc_h264_ratecontrol_get_type (void);
+
+/* bStreamFormat defines */
+
+typedef enum {
+ UVC_H264_STREAMFORMAT_ANNEXB = 0x00,
+ UVC_H264_STREAMFORMAT_NAL = 0x01,
+} UvcH264StreamFormat;
+
+#define UVC_H264_STREAMFORMAT_TYPE (uvc_h264_streamformat_get_type())
+
+GType uvc_h264_streamformat_get_type (void);
+
+/* bEntropyCABAC defines */
+
+typedef enum {
+ UVC_H264_ENTROPY_CAVLC = 0x00,
+ UVC_H264_ENTROPY_CABAC = 0x01,
+} UvcH264Entropy;
+
+#define UVC_H264_ENTROPY_TYPE (uvc_h264_entropy_get_type())
+
+GType uvc_h264_entropy_get_type (void);
+
+/* bProfile defines */
+#define UVC_H264_PROFILE_CONSTRAINED_BASELINE 0x4240
+#define UVC_H264_PROFILE_BASELINE 0x4200
+#define UVC_H264_PROFILE_MAIN 0x4D00
+#define UVC_H264_PROFILE_HIGH 0x6400
+
+/* bTimingstamp defines */
+
+#define UVC_H264_TIMESTAMP_SEI_DISABLE (0x00)
+#define UVC_H264_TIMESTAMP_SEI_ENABLE (0x01)
+
+/* bPreviewFlipped defines */
+
+#define UVC_H264_PREFLIPPED_DISABLE (0x00)
+#define UVC_H264_PREFLIPPED_HORIZONTAL (0x01)
+
+/* wPicType defines */
+#define UVC_H264_PICTYPE_I_FRAME (0x00)
+#define UVC_H264_PICTYPE_IDR (0x01)
+#define UVC_H264_PICTYPE_IDR_WITH_PPS_SPS (0x02)
+
+
+/* wLayerID Macro */
+
+/* wLayerID
+ |------------+------------+------------+----------------+------------|
+ | Reserved | StreamID | QualityID | DependencyID | TemporalID |
+ | (3 bits) | (3 bits) | (3 bits) | (4 bits) | (3 bits) |
+ |------------+------------+------------+----------------+------------|
+ |15 13|12 10|9 7|6 3|2 0|
+ |------------+------------+------------+----------------+------------|
+*/
+
+#define xLayerID(stream_id, quality_id, dependency_id, temporal_id) \
+ ((((stream_id) & 7) << 10) | \
+ (((quality_id) & 7) << 7) | \
+ (((dependency_id) & 15) << 3) | \
+ ((temporal_id) & 7))
+
+/* id extraction from wLayerID */
+
+#define xStream_id(layer_id) (((layer_id) >> 10) & 7)
+#define xQuality_id(layer_id) (((layer_id) >> 7) & 7)
+#define xDependency_id(layer_id) (((layer_id) >> 3) & 15)
+#define xTemporal_id(layer_id) ((layer_id)&7)
+
+/* UVC H.264 control selectors */
+
+typedef enum _uvcx_control_selector_t
+{
+ UVCX_VIDEO_CONFIG_PROBE = 0x01,
+ UVCX_VIDEO_CONFIG_COMMIT = 0x02,
+ UVCX_RATE_CONTROL_MODE = 0x03,
+ UVCX_TEMPORAL_SCALE_MODE = 0x04,
+ UVCX_SPATIAL_SCALE_MODE = 0x05,
+ UVCX_SNR_SCALE_MODE = 0x06,
+ UVCX_LTR_BUFFER_SIZE_CONTROL = 0x07,
+ UVCX_LTR_PICTURE_CONTROL = 0x08,
+ UVCX_PICTURE_TYPE_CONTROL = 0x09,
+ UVCX_VERSION = 0x0A,
+ UVCX_ENCODER_RESET = 0x0B,
+ UVCX_FRAMERATE_CONFIG = 0x0C,
+ UVCX_VIDEO_ADVANCE_CONFIG = 0x0D,
+ UVCX_BITRATE_LAYERS = 0x0E,
+ UVCX_QP_STEPS_LAYERS = 0x0F,
+} uvcx_control_selector_t;
+
+
+typedef struct _uvcx_video_config_probe_commit_t
+{
+ guint32 dwFrameInterval;
+ guint32 dwBitRate;
+ guint16 bmHints;
+ guint16 wConfigurationIndex;
+ guint16 wWidth;
+ guint16 wHeight;
+ guint16 wSliceUnits;
+ guint16 wSliceMode;
+ guint16 wProfile;
+ guint16 wIFramePeriod;
+ guint16 wEstimatedVideoDelay;
+ guint16 wEstimatedMaxConfigDelay;
+ guint8 bUsageType;
+ guint8 bRateControlMode;
+ guint8 bTemporalScaleMode;
+ guint8 bSpatialScaleMode;
+ guint8 bSNRScaleMode;
+ guint8 bStreamMuxOption;
+ guint8 bStreamFormat;
+ guint8 bEntropyCABAC;
+ guint8 bTimestamp;
+ guint8 bNumOfReorderFrames;
+ guint8 bPreviewFlipped;
+ guint8 bView;
+ guint8 bReserved1;
+ guint8 bReserved2;
+ guint8 bStreamID;
+ guint8 bSpatialLayerRatio;
+ guint16 wLeakyBucketSize;
+} __attribute__((packed)) uvcx_video_config_probe_commit_t;
+
+
+typedef struct _uvcx_rate_control_mode_t
+{
+ guint16 wLayerID;
+ guint8 bRateControlMode;
+} __attribute__((packed)) uvcx_rate_control_mode_t;
+
+
+typedef struct _uvcx_temporal_scale_mode_t
+{
+ guint16 wLayerID;
+ guint8 bTemporalScaleMode;
+} __attribute__((packed)) uvcx_temporal_scale_mode_t;
+
+
+typedef struct _uvcx_spatial_scale_mode_t
+{
+ guint16 wLayerID;
+ guint8 bSpatialScaleMode;
+} __attribute__((packed)) uvcx_spatial_scale_mode_t;
+
+
+typedef struct _uvcx_snr_scale_mode_t
+{
+ guint16 wLayerID;
+ guint8 bSNRScaleMode;
+ guint8 bMGSSublayerMode;
+} __attribute__((packed)) uvcx_snr_scale_mode_t;
+
+
+typedef struct _uvcx_ltr_buffer_size_control_t
+{
+ guint16 wLayerID;
+ guint8 bLTRBufferSize;
+ guint8 bLTREncoderControl;
+} __attribute__((packed)) uvcx_ltr_buffer_size_control_t;
+
+typedef struct _uvcx_ltr_picture_control
+{
+ guint16 wLayerID;
+ guint8 bPutAtPositionInLTRBuffer;
+ guint8 bEncodeUsingLTR;
+} __attribute__((packed)) uvcx_ltr_picture_control;
+
+
+typedef struct _uvcx_picture_type_control_t
+{
+ guint16 wLayerID;
+ guint16 wPicType;
+} __attribute__((packed)) uvcx_picture_type_control_t;
+
+
+typedef struct _uvcx_version_t
+{
+ guint16 wVersion;
+} __attribute__((packed)) uvcx_version_t;
+
+
+typedef struct _uvcx_encoder_reset
+{
+ guint16 wLayerID;
+} __attribute__((packed)) uvcx_encoder_reset;
+
+
+typedef struct _uvcx_framerate_config_t
+{
+ guint16 wLayerID;
+ guint32 dwFrameInterval;
+} __attribute__((packed)) uvcx_framerate_config_t;
+
+
+typedef struct _uvcx_video_advance_config_t
+{
+ guint16 wLayerID;
+ guint32 dwMb_max;
+ guint8 blevel_idc;
+ guint8 bReserved;
+} __attribute__((packed)) uvcx_video_advance_config_t;
+
+
+typedef struct _uvcx_bitrate_layers_t
+{
+ guint16 wLayerID;
+ guint32 dwPeakBitrate;
+ guint32 dwAverageBitrate;
+} __attribute__((packed)) uvcx_bitrate_layers_t;
+
+
+typedef struct _uvcx_qp_steps_layers_t
+{
+ guint16 wLayerID;
+ guint8 bFrameType;
+ guint8 bMinQp;
+ guint8 bMaxQp;
+} __attribute__((packed)) uvcx_qp_steps_layers_t;
+
+
+#ifdef _WIN32
+// GUID of the UVC H.264 extension unit: {A29E7641-DE04-47E3-8B2B-F4341AFF003B}
+DEFINE_GUID(GUID_UVCX_H264_XU, 0xA29E7641, 0xDE04, 0x47E3, 0x8B, 0x2B, 0xF4, 0x34, 0x1A, 0xFF, 0x00, 0x3B);
+#else
+#define GUID_UVCX_H264_XU \
+ {0x41, 0x76, 0x9e, 0xa2, 0x04, 0xde, 0xe3, 0x47, 0x8b, 0x2b, 0xF4, 0x34, 0x1A, 0xFF, 0x00, 0x3B}
+#endif
+
+#endif /*_UVC_H264_H_*/
diff --git a/sys/vcd/Makefile.in b/sys/vcd/Makefile.in
index ce7eb377..b1e0232d 100644
--- a/sys/vcd/Makefile.in
+++ b/sys/vcd/Makefile.in
@@ -341,6 +341,8 @@ 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@
@@ -348,6 +350,8 @@ 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@
@@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -390,6 +393,10 @@ 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@
@@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/sys/vdpau/Makefile.in b/sys/vdpau/Makefile.in
index 99ba979c..4f6664b3 100644
--- a/sys/vdpau/Makefile.in
+++ b/sys/vdpau/Makefile.in
@@ -389,6 +389,8 @@ 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@
@@ -396,6 +398,8 @@ 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@
@@ -410,7 +414,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -438,6 +441,10 @@ 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@
@@ -564,6 +571,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/sys/vdpau/basevideodecoder/Makefile.in b/sys/vdpau/basevideodecoder/Makefile.in
index 20556ffe..5d145677 100644
--- a/sys/vdpau/basevideodecoder/Makefile.in
+++ b/sys/vdpau/basevideodecoder/Makefile.in
@@ -316,6 +316,8 @@ 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@
@@ -323,6 +325,8 @@ 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@
@@ -337,7 +341,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -365,6 +368,10 @@ 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@
@@ -491,6 +498,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/sys/vdpau/gstvdp/Makefile.in b/sys/vdpau/gstvdp/Makefile.in
index 19cc103a..9e95f9de 100644
--- a/sys/vdpau/gstvdp/Makefile.in
+++ b/sys/vdpau/gstvdp/Makefile.in
@@ -357,6 +357,8 @@ 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@
@@ -364,6 +366,8 @@ 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@
@@ -378,7 +382,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -406,6 +409,10 @@ 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@
@@ -532,6 +539,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/sys/wasapi/Makefile.in b/sys/wasapi/Makefile.in
index bb781bd3..455e9c45 100644
--- a/sys/wasapi/Makefile.in
+++ b/sys/wasapi/Makefile.in
@@ -274,6 +274,8 @@ 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@
@@ -281,6 +283,8 @@ 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@
@@ -295,7 +299,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -323,6 +326,10 @@ 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@
@@ -449,6 +456,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/sys/wininet/Makefile.in b/sys/wininet/Makefile.in
index 80d246ad..b8807cfb 100644
--- a/sys/wininet/Makefile.in
+++ b/sys/wininet/Makefile.in
@@ -341,6 +341,8 @@ 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@
@@ -348,6 +350,8 @@ 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@
@@ -362,7 +366,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -390,6 +393,10 @@ 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@
@@ -516,6 +523,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/sys/winks/Makefile.in b/sys/winks/Makefile.in
index 98245bbc..b9f34111 100644
--- a/sys/winks/Makefile.in
+++ b/sys/winks/Makefile.in
@@ -344,6 +344,8 @@ 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@
@@ -351,6 +353,8 @@ 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@
@@ -365,7 +369,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -393,6 +396,10 @@ 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@
@@ -519,6 +526,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/sys/winscreencap/Makefile.in b/sys/winscreencap/Makefile.in
index 4eb4e2c7..a5dd350b 100644
--- a/sys/winscreencap/Makefile.in
+++ b/sys/winscreencap/Makefile.in
@@ -344,6 +344,8 @@ 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@
@@ -351,6 +353,8 @@ 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@
@@ -365,7 +369,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -393,6 +396,10 @@ 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@
@@ -519,6 +526,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/tests/Makefile.in b/tests/Makefile.in
index aed52e6d..76e49048 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -313,6 +313,8 @@ 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@
@@ -320,6 +322,8 @@ 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@
@@ -334,7 +338,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -362,6 +365,10 @@ 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@
@@ -488,6 +495,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am
index 84cee4d2..64b816d7 100644
--- a/tests/check/Makefile.am
+++ b/tests/check/Makefile.am
@@ -156,6 +156,20 @@ else
check_curl =
endif
+if USE_UVCH264
+check_uvch264=elements/uvch264demux
+else
+check_uvch264=
+endif
+uvch264_dist_data = elements/uvch264demux_data/valid_h264_jpg.mjpg \
+ elements/uvch264demux_data/valid_h264_jpg.jpg \
+ elements/uvch264demux_data/valid_h264_jpg.h264 \
+ elements/uvch264demux_data/valid_h264_yuy2.mjpg \
+ elements/uvch264demux_data/valid_h264_yuy2.h264 \
+ elements/uvch264demux_data/valid_h264_yuy2.yuy2
+
+
+
VALGRIND_TO_FIX = \
elements/mpeg2enc \
elements/mplex \
@@ -171,6 +185,7 @@ VALGRIND_TESTS_DISABLE = \
# colorspace: bad memory accesses in orc code for odd width buffers - https://bugzilla.gnome.org/show_bug.cgi?id=663248
noinst_PROGRAMS = \
pipelines/colorspace \
+ pipelines/streamheader \
$(check_neon)
check_PROGRAMS = \
@@ -193,7 +208,9 @@ check_PROGRAMS = \
elements/baseaudiovisualizer \
elements/camerabin \
elements/dataurisrc \
- $(check_jifmux) \
+ elements/gdppay \
+ elements/gdpdepay \
+ $(check_jifmux) \
elements/jpegparse \
$(check_logoinsert) \
elements/h263parse \
@@ -209,10 +226,11 @@ check_PROGRAMS = \
elements/rtpmux \
libs/mpegvideoparser \
libs/h264parser \
+ $(check_uvch264) \
libs/vc1parser \
$(check_schro) \
$(check_vp8) \
- elements/viewfinderbin \
+ elements/viewfinderbin \
$(check_zbar) \
$(check_orc) \
$(EXPERIMENTAL_CHECKS)
@@ -285,6 +303,14 @@ elements_faac_LDADD = \
$(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) \
-lgstaudio-@GST_API_VERSION@
+elements_gdppay_CFLAGS = \
+ $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
+elements_gdppay_LDADD = $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD)
+
+elements_gdpdepay_CFLAGS = \
+ $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
+elements_gdpdepay_LDADD = $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD)
+
elements_voaacenc_CFLAGS = \
$(GST_PLUGINS_BASE_CFLAGS) \
$(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
@@ -332,8 +358,13 @@ 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_uvch264demux_CFLAGS = -DUVCH264DEMUX_DATADIR="$(srcdir)/elements/uvch264demux_data" \
+ $(AM_CFLAGS)
+
+pipelines_streamheader_CFLAGS = $(GIO_CFLAGS) $(AM_CFLAGS)
+pipelines_streamheader_LDADD = $(GIO_LIBS) $(LDADD)
-EXTRA_DIST = gst-plugins-bad.supp
+EXTRA_DIST = gst-plugins-bad.supp $(uvch264_dist_data)
orc_bayer_CFLAGS = $(ORC_CFLAGS)
orc_bayer_LDADD = $(ORC_LIBS) -lorc-test-0.4
diff --git a/tests/check/Makefile.in b/tests/check/Makefile.in
index 606777e7..0487bd11 100644
--- a/tests/check/Makefile.in
+++ b/tests/check/Makefile.in
@@ -56,7 +56,8 @@ host_triplet = @host@
target_triplet = @target@
DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in $(top_srcdir)/common/check.mak
-noinst_PROGRAMS = pipelines/colorspace$(EXEEXT) $(am__EXEEXT_20)
+noinst_PROGRAMS = pipelines/colorspace$(EXEEXT) \
+ 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) \
@@ -66,6 +67,7 @@ check_PROGRAMS = generic/states$(EXEEXT) $(am__EXEEXT_1) \
elements/autovideoconvert$(EXEEXT) elements/asfmux$(EXEEXT) \
elements/baseaudiovisualizer$(EXEEXT) \
elements/camerabin$(EXEEXT) elements/dataurisrc$(EXEEXT) \
+ elements/gdppay$(EXEEXT) elements/gdpdepay$(EXEEXT) \
$(am__EXEEXT_13) elements/jpegparse$(EXEEXT) $(am__EXEEXT_14) \
elements/h263parse$(EXEEXT) elements/h264parse$(EXEEXT) \
elements/mpegtsmux$(EXEEXT) elements/mpegvideoparse$(EXEEXT) \
@@ -73,10 +75,10 @@ check_PROGRAMS = generic/states$(EXEEXT) $(am__EXEEXT_1) \
elements/mxfmux$(EXEEXT) elements/id3mux$(EXEEXT) \
pipelines/mxf$(EXEEXT) $(am__EXEEXT_15) \
elements/rtpmux$(EXEEXT) libs/mpegvideoparser$(EXEEXT) \
- libs/h264parser$(EXEEXT) libs/vc1parser$(EXEEXT) \
- $(am__EXEEXT_16) $(am__EXEEXT_17) \
- elements/viewfinderbin$(EXEEXT) $(am__EXEEXT_18) \
- $(am__EXEEXT_19)
+ libs/h264parser$(EXEEXT) $(am__EXEEXT_16) \
+ libs/vc1parser$(EXEEXT) $(am__EXEEXT_17) $(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 \
@@ -147,12 +149,13 @@ libparser_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
@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_SCHRO_TRUE@am__EXEEXT_16 = elements/schroenc$(EXEEXT)
-@USE_VP8_TRUE@am__EXEEXT_17 = elements/vp8enc$(EXEEXT) \
+@USE_UVCH264_TRUE@am__EXEEXT_16 = elements/uvch264demux$(EXEEXT)
+@USE_SCHRO_TRUE@am__EXEEXT_17 = elements/schroenc$(EXEEXT)
+@USE_VP8_TRUE@am__EXEEXT_18 = elements/vp8enc$(EXEEXT) \
@USE_VP8_TRUE@ elements/vp8dec$(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_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)
@@ -236,6 +239,22 @@ elements_faad_DEPENDENCIES = $(am__DEPENDENCIES_1) \
elements_faad_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(elements_faad_CFLAGS) \
$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+elements_gdpdepay_SOURCES = elements/gdpdepay.c
+elements_gdpdepay_OBJECTS = elements_gdpdepay-gdpdepay.$(OBJEXT)
+elements_gdpdepay_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+elements_gdpdepay_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(elements_gdpdepay_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+ -o $@
+elements_gdppay_SOURCES = elements/gdppay.c
+elements_gdppay_OBJECTS = elements_gdppay-gdppay.$(OBJEXT)
+elements_gdppay_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
+elements_gdppay_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(elements_gdppay_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+ -o $@
elements_h263parse_SOURCES = elements/h263parse.c
elements_h263parse_OBJECTS = h263parse.$(OBJEXT)
elements_h263parse_DEPENDENCIES = libparser.la $(am__DEPENDENCIES_2)
@@ -334,6 +353,15 @@ elements_timidity_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(elements_timidity_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
-o $@
+elements_uvch264demux_SOURCES = elements/uvch264demux.c
+elements_uvch264demux_OBJECTS = \
+ elements_uvch264demux-uvch264demux.$(OBJEXT)
+elements_uvch264demux_LDADD = $(LDADD)
+elements_uvch264demux_DEPENDENCIES = $(am__DEPENDENCIES_1)
+elements_uvch264demux_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(elements_uvch264demux_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
elements_viewfinderbin_SOURCES = elements/viewfinderbin.c
elements_viewfinderbin_OBJECTS = viewfinderbin.$(OBJEXT)
elements_viewfinderbin_LDADD = $(LDADD)
@@ -419,6 +447,15 @@ pipelines_mxf_SOURCES = pipelines/mxf.c
pipelines_mxf_OBJECTS = mxf.$(OBJEXT)
pipelines_mxf_LDADD = $(LDADD)
pipelines_mxf_DEPENDENCIES = $(am__DEPENDENCIES_1)
+pipelines_streamheader_SOURCES = pipelines/streamheader.c
+pipelines_streamheader_OBJECTS = \
+ pipelines_streamheader-streamheader.$(OBJEXT)
+pipelines_streamheader_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_2)
+pipelines_streamheader_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(pipelines_streamheader_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
@@ -452,19 +489,21 @@ SOURCES = $(libparser_la_SOURCES) elements/asfmux.c \
$(elements_camerabin_SOURCES) elements/curlfilesink.c \
elements/curlftpsink.c elements/curlhttpsink.c \
elements/curlsmtpsink.c elements/dataurisrc.c elements/faac.c \
- elements/faad.c elements/h263parse.c elements/h264parse.c \
- elements/id3mux.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/faad.c elements/gdpdepay.c elements/gdppay.c \
+ elements/h263parse.c elements/h264parse.c elements/id3mux.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/vp8dec.c elements/vp8enc.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/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 \
@@ -472,19 +511,21 @@ DIST_SOURCES = $(libparser_la_SOURCES) elements/asfmux.c \
$(elements_camerabin_SOURCES) elements/curlfilesink.c \
elements/curlftpsink.c elements/curlhttpsink.c \
elements/curlsmtpsink.c elements/dataurisrc.c elements/faac.c \
- elements/faad.c elements/h263parse.c elements/h264parse.c \
- elements/id3mux.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/faad.c elements/gdpdepay.c elements/gdppay.c \
+ elements/h263parse.c elements/h264parse.c elements/id3mux.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/vp8dec.c elements/vp8enc.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/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;; \
@@ -662,6 +703,8 @@ GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@
GST_PREFIX = @GST_PREFIX@
GST_REVISION = @GST_REVISION@
GST_TOOLS_DIR = $(top_builddir)/tools
+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@
@@ -669,6 +712,8 @@ 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@
@@ -683,7 +728,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -711,6 +755,10 @@ 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@
@@ -837,6 +885,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
@@ -994,6 +1043,15 @@ SUPPRESSIONS = $(top_srcdir)/common/gst.supp $(srcdir)/gst-plugins-bad.supp
@USE_CURL_TRUE@ elements/curlftpsink \
@USE_CURL_TRUE@ elements/curlsmtpsink
+@USE_UVCH264_FALSE@check_uvch264 =
+@USE_UVCH264_TRUE@check_uvch264 = elements/uvch264demux
+uvch264_dist_data = elements/uvch264demux_data/valid_h264_jpg.mjpg \
+ elements/uvch264demux_data/valid_h264_jpg.jpg \
+ elements/uvch264demux_data/valid_h264_jpg.h264 \
+ elements/uvch264demux_data/valid_h264_yuy2.mjpg \
+ elements/uvch264demux_data/valid_h264_yuy2.h264 \
+ elements/uvch264demux_data/valid_h264_yuy2.yuy2
+
VALGRIND_TO_FIX = \
elements/mpeg2enc \
elements/mplex \
@@ -1070,6 +1128,14 @@ elements_faac_LDADD = \
$(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD) \
-lgstaudio-@GST_API_VERSION@
+elements_gdppay_CFLAGS = \
+ $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
+
+elements_gdppay_LDADD = $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD)
+elements_gdpdepay_CFLAGS = \
+ $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
+
+elements_gdpdepay_LDADD = $(GST_BASE_LIBS) $(GST_LIBS) $(LDADD)
elements_voaacenc_CFLAGS = \
$(GST_PLUGINS_BASE_CFLAGS) \
$(GST_BASE_CFLAGS) $(GST_CFLAGS) $(AM_CFLAGS)
@@ -1115,7 +1181,12 @@ 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)
-EXTRA_DIST = gst-plugins-bad.supp
+elements_uvch264demux_CFLAGS = -DUVCH264DEMUX_DATADIR="$(srcdir)/elements/uvch264demux_data" \
+ $(AM_CFLAGS)
+
+pipelines_streamheader_CFLAGS = $(GIO_CFLAGS) $(AM_CFLAGS)
+pipelines_streamheader_LDADD = $(GIO_LIBS) $(LDADD)
+EXTRA_DIST = gst-plugins-bad.supp $(uvch264_dist_data)
orc_bayer_CFLAGS = $(ORC_CFLAGS)
orc_bayer_LDADD = $(ORC_LIBS) -lorc-test-0.4
orc_cog_CFLAGS = $(ORC_CFLAGS)
@@ -1226,6 +1297,12 @@ elements/faac$(EXEEXT): $(elements_faac_OBJECTS) $(elements_faac_DEPENDENCIES) $
elements/faad$(EXEEXT): $(elements_faad_OBJECTS) $(elements_faad_DEPENDENCIES) $(EXTRA_elements_faad_DEPENDENCIES) elements/$(am__dirstamp)
@rm -f elements/faad$(EXEEXT)
$(AM_V_CCLD)$(elements_faad_LINK) $(elements_faad_OBJECTS) $(elements_faad_LDADD) $(LIBS)
+elements/gdpdepay$(EXEEXT): $(elements_gdpdepay_OBJECTS) $(elements_gdpdepay_DEPENDENCIES) $(EXTRA_elements_gdpdepay_DEPENDENCIES) elements/$(am__dirstamp)
+ @rm -f elements/gdpdepay$(EXEEXT)
+ $(AM_V_CCLD)$(elements_gdpdepay_LINK) $(elements_gdpdepay_OBJECTS) $(elements_gdpdepay_LDADD) $(LIBS)
+elements/gdppay$(EXEEXT): $(elements_gdppay_OBJECTS) $(elements_gdppay_DEPENDENCIES) $(EXTRA_elements_gdppay_DEPENDENCIES) elements/$(am__dirstamp)
+ @rm -f elements/gdppay$(EXEEXT)
+ $(AM_V_CCLD)$(elements_gdppay_LINK) $(elements_gdppay_OBJECTS) $(elements_gdppay_LDADD) $(LIBS)
elements/h263parse$(EXEEXT): $(elements_h263parse_OBJECTS) $(elements_h263parse_DEPENDENCIES) $(EXTRA_elements_h263parse_DEPENDENCIES) elements/$(am__dirstamp)
@rm -f elements/h263parse$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(elements_h263parse_OBJECTS) $(elements_h263parse_LDADD) $(LIBS)
@@ -1286,6 +1363,9 @@ elements/schroenc$(EXEEXT): $(elements_schroenc_OBJECTS) $(elements_schroenc_DEP
elements/timidity$(EXEEXT): $(elements_timidity_OBJECTS) $(elements_timidity_DEPENDENCIES) $(EXTRA_elements_timidity_DEPENDENCIES) elements/$(am__dirstamp)
@rm -f elements/timidity$(EXEEXT)
$(AM_V_CCLD)$(elements_timidity_LINK) $(elements_timidity_OBJECTS) $(elements_timidity_LDADD) $(LIBS)
+elements/uvch264demux$(EXEEXT): $(elements_uvch264demux_OBJECTS) $(elements_uvch264demux_DEPENDENCIES) $(EXTRA_elements_uvch264demux_DEPENDENCIES) elements/$(am__dirstamp)
+ @rm -f elements/uvch264demux$(EXEEXT)
+ $(AM_V_CCLD)$(elements_uvch264demux_LINK) $(elements_uvch264demux_OBJECTS) $(elements_uvch264demux_LDADD) $(LIBS)
elements/viewfinderbin$(EXEEXT): $(elements_viewfinderbin_OBJECTS) $(elements_viewfinderbin_DEPENDENCIES) $(EXTRA_elements_viewfinderbin_DEPENDENCIES) elements/$(am__dirstamp)
@rm -f elements/viewfinderbin$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(elements_viewfinderbin_OBJECTS) $(elements_viewfinderbin_LDADD) $(LIBS)
@@ -1343,6 +1423,9 @@ pipelines/mimic$(EXEEXT): $(pipelines_mimic_OBJECTS) $(pipelines_mimic_DEPENDENC
pipelines/mxf$(EXEEXT): $(pipelines_mxf_OBJECTS) $(pipelines_mxf_DEPENDENCIES) $(EXTRA_pipelines_mxf_DEPENDENCIES) pipelines/$(am__dirstamp)
@rm -f pipelines/mxf$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(pipelines_mxf_OBJECTS) $(pipelines_mxf_LDADD) $(LIBS)
+pipelines/streamheader$(EXEEXT): $(pipelines_streamheader_OBJECTS) $(pipelines_streamheader_DEPENDENCIES) $(EXTRA_pipelines_streamheader_DEPENDENCIES) pipelines/$(am__dirstamp)
+ @rm -f pipelines/streamheader$(EXEEXT)
+ $(AM_V_CCLD)$(pipelines_streamheader_LINK) $(pipelines_streamheader_OBJECTS) $(pipelines_streamheader_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -1365,11 +1448,14 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_camerabin-camerabin.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_faac-faac.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_faad-faad.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_gdpdepay-gdpdepay.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_gdppay-gdppay.Po@am__quote@
@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_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@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elements_voaacenc-voaacenc.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/h263parse.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/h264parse.Po@am__quote@
@@ -1393,6 +1479,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opus.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orc_bayer-bayer.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orc_cog-cog.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pipelines_streamheader-streamheader.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/schroenc.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/states.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/viewfinderbin.Po@am__quote@
@@ -1625,6 +1712,34 @@ elements_faad-faad.obj: elements/faad.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) $(elements_faad_CFLAGS) $(CFLAGS) -c -o elements_faad-faad.obj `if test -f 'elements/faad.c'; then $(CYGPATH_W) 'elements/faad.c'; else $(CYGPATH_W) '$(srcdir)/elements/faad.c'; fi`
+elements_gdpdepay-gdpdepay.o: elements/gdpdepay.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_gdpdepay_CFLAGS) $(CFLAGS) -MT elements_gdpdepay-gdpdepay.o -MD -MP -MF $(DEPDIR)/elements_gdpdepay-gdpdepay.Tpo -c -o elements_gdpdepay-gdpdepay.o `test -f 'elements/gdpdepay.c' || echo '$(srcdir)/'`elements/gdpdepay.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/elements_gdpdepay-gdpdepay.Tpo $(DEPDIR)/elements_gdpdepay-gdpdepay.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='elements/gdpdepay.c' object='elements_gdpdepay-gdpdepay.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_gdpdepay_CFLAGS) $(CFLAGS) -c -o elements_gdpdepay-gdpdepay.o `test -f 'elements/gdpdepay.c' || echo '$(srcdir)/'`elements/gdpdepay.c
+
+elements_gdpdepay-gdpdepay.obj: elements/gdpdepay.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_gdpdepay_CFLAGS) $(CFLAGS) -MT elements_gdpdepay-gdpdepay.obj -MD -MP -MF $(DEPDIR)/elements_gdpdepay-gdpdepay.Tpo -c -o elements_gdpdepay-gdpdepay.obj `if test -f 'elements/gdpdepay.c'; then $(CYGPATH_W) 'elements/gdpdepay.c'; else $(CYGPATH_W) '$(srcdir)/elements/gdpdepay.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/elements_gdpdepay-gdpdepay.Tpo $(DEPDIR)/elements_gdpdepay-gdpdepay.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='elements/gdpdepay.c' object='elements_gdpdepay-gdpdepay.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_gdpdepay_CFLAGS) $(CFLAGS) -c -o elements_gdpdepay-gdpdepay.obj `if test -f 'elements/gdpdepay.c'; then $(CYGPATH_W) 'elements/gdpdepay.c'; else $(CYGPATH_W) '$(srcdir)/elements/gdpdepay.c'; fi`
+
+elements_gdppay-gdppay.o: elements/gdppay.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_gdppay_CFLAGS) $(CFLAGS) -MT elements_gdppay-gdppay.o -MD -MP -MF $(DEPDIR)/elements_gdppay-gdppay.Tpo -c -o elements_gdppay-gdppay.o `test -f 'elements/gdppay.c' || echo '$(srcdir)/'`elements/gdppay.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/elements_gdppay-gdppay.Tpo $(DEPDIR)/elements_gdppay-gdppay.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='elements/gdppay.c' object='elements_gdppay-gdppay.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_gdppay_CFLAGS) $(CFLAGS) -c -o elements_gdppay-gdppay.o `test -f 'elements/gdppay.c' || echo '$(srcdir)/'`elements/gdppay.c
+
+elements_gdppay-gdppay.obj: elements/gdppay.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_gdppay_CFLAGS) $(CFLAGS) -MT elements_gdppay-gdppay.obj -MD -MP -MF $(DEPDIR)/elements_gdppay-gdppay.Tpo -c -o elements_gdppay-gdppay.obj `if test -f 'elements/gdppay.c'; then $(CYGPATH_W) 'elements/gdppay.c'; else $(CYGPATH_W) '$(srcdir)/elements/gdppay.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/elements_gdppay-gdppay.Tpo $(DEPDIR)/elements_gdppay-gdppay.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='elements/gdppay.c' object='elements_gdppay-gdppay.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_gdppay_CFLAGS) $(CFLAGS) -c -o elements_gdppay-gdppay.obj `if test -f 'elements/gdppay.c'; then $(CYGPATH_W) 'elements/gdppay.c'; else $(CYGPATH_W) '$(srcdir)/elements/gdppay.c'; fi`
+
h263parse.o: elements/h263parse.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT h263parse.o -MD -MP -MF $(DEPDIR)/h263parse.Tpo -c -o h263parse.o `test -f 'elements/h263parse.c' || echo '$(srcdir)/'`elements/h263parse.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/h263parse.Tpo $(DEPDIR)/h263parse.Po
@@ -1905,6 +2020,20 @@ elements_timidity-timidity.obj: elements/timidity.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) $(elements_timidity_CFLAGS) $(CFLAGS) -c -o elements_timidity-timidity.obj `if test -f 'elements/timidity.c'; then $(CYGPATH_W) 'elements/timidity.c'; else $(CYGPATH_W) '$(srcdir)/elements/timidity.c'; fi`
+elements_uvch264demux-uvch264demux.o: elements/uvch264demux.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_uvch264demux_CFLAGS) $(CFLAGS) -MT elements_uvch264demux-uvch264demux.o -MD -MP -MF $(DEPDIR)/elements_uvch264demux-uvch264demux.Tpo -c -o elements_uvch264demux-uvch264demux.o `test -f 'elements/uvch264demux.c' || echo '$(srcdir)/'`elements/uvch264demux.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/elements_uvch264demux-uvch264demux.Tpo $(DEPDIR)/elements_uvch264demux-uvch264demux.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='elements/uvch264demux.c' object='elements_uvch264demux-uvch264demux.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_uvch264demux_CFLAGS) $(CFLAGS) -c -o elements_uvch264demux-uvch264demux.o `test -f 'elements/uvch264demux.c' || echo '$(srcdir)/'`elements/uvch264demux.c
+
+elements_uvch264demux-uvch264demux.obj: elements/uvch264demux.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(elements_uvch264demux_CFLAGS) $(CFLAGS) -MT elements_uvch264demux-uvch264demux.obj -MD -MP -MF $(DEPDIR)/elements_uvch264demux-uvch264demux.Tpo -c -o elements_uvch264demux-uvch264demux.obj `if test -f 'elements/uvch264demux.c'; then $(CYGPATH_W) 'elements/uvch264demux.c'; else $(CYGPATH_W) '$(srcdir)/elements/uvch264demux.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/elements_uvch264demux-uvch264demux.Tpo $(DEPDIR)/elements_uvch264demux-uvch264demux.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='elements/uvch264demux.c' object='elements_uvch264demux-uvch264demux.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_uvch264demux_CFLAGS) $(CFLAGS) -c -o elements_uvch264demux-uvch264demux.obj `if test -f 'elements/uvch264demux.c'; then $(CYGPATH_W) 'elements/uvch264demux.c'; else $(CYGPATH_W) '$(srcdir)/elements/uvch264demux.c'; fi`
+
viewfinderbin.o: elements/viewfinderbin.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT viewfinderbin.o -MD -MP -MF $(DEPDIR)/viewfinderbin.Tpo -c -o viewfinderbin.o `test -f 'elements/viewfinderbin.c' || echo '$(srcdir)/'`elements/viewfinderbin.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/viewfinderbin.Tpo $(DEPDIR)/viewfinderbin.Po
@@ -2115,6 +2244,20 @@ mxf.obj: pipelines/mxf.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 mxf.obj `if test -f 'pipelines/mxf.c'; then $(CYGPATH_W) 'pipelines/mxf.c'; else $(CYGPATH_W) '$(srcdir)/pipelines/mxf.c'; fi`
+pipelines_streamheader-streamheader.o: pipelines/streamheader.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pipelines_streamheader_CFLAGS) $(CFLAGS) -MT pipelines_streamheader-streamheader.o -MD -MP -MF $(DEPDIR)/pipelines_streamheader-streamheader.Tpo -c -o pipelines_streamheader-streamheader.o `test -f 'pipelines/streamheader.c' || echo '$(srcdir)/'`pipelines/streamheader.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pipelines_streamheader-streamheader.Tpo $(DEPDIR)/pipelines_streamheader-streamheader.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pipelines/streamheader.c' object='pipelines_streamheader-streamheader.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) $(pipelines_streamheader_CFLAGS) $(CFLAGS) -c -o pipelines_streamheader-streamheader.o `test -f 'pipelines/streamheader.c' || echo '$(srcdir)/'`pipelines/streamheader.c
+
+pipelines_streamheader-streamheader.obj: pipelines/streamheader.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pipelines_streamheader_CFLAGS) $(CFLAGS) -MT pipelines_streamheader-streamheader.obj -MD -MP -MF $(DEPDIR)/pipelines_streamheader-streamheader.Tpo -c -o pipelines_streamheader-streamheader.obj `if test -f 'pipelines/streamheader.c'; then $(CYGPATH_W) 'pipelines/streamheader.c'; else $(CYGPATH_W) '$(srcdir)/pipelines/streamheader.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/pipelines_streamheader-streamheader.Tpo $(DEPDIR)/pipelines_streamheader-streamheader.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pipelines/streamheader.c' object='pipelines_streamheader-streamheader.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) $(pipelines_streamheader_CFLAGS) $(CFLAGS) -c -o pipelines_streamheader-streamheader.obj `if test -f 'pipelines/streamheader.c'; then $(CYGPATH_W) 'pipelines/streamheader.c'; else $(CYGPATH_W) '$(srcdir)/pipelines/streamheader.c'; fi`
+
mostlyclean-libtool:
-rm -f *.lo
diff --git a/tests/check/elements/autoconvert.c b/tests/check/elements/autoconvert.c
index 680464c1..dbb91ccb 100644
--- a/tests/check/elements/autoconvert.c
+++ b/tests/check/elements/autoconvert.c
@@ -81,37 +81,13 @@ set_autoconvert_factories (GstElement * autoconvert)
g_list_free (factories);
}
-typedef struct
-{
- gint n;
- GstCaps *caps;
-} TestContext;
-
-static void
-generate_test_buffer (GstPad * src, TestContext * ctx)
-{
- GstBuffer *buf;
-
- if (ctx->n == 0) {
- ctx->caps = gst_caps_from_string ("test/caps,type=(int)1");
- } else if (ctx->n == 10) {
- gst_caps_unref (ctx->caps);
- ctx->caps = gst_caps_from_string ("test/caps,type=(int)2");
- }
-
- buf = gst_buffer_new_and_alloc (4096);
- gst_pad_set_caps (src, ctx->caps);
-
- GST_LOG ("Pushing test buffer, caps %" GST_PTR_FORMAT, ctx->caps);
- fail_unless (gst_pad_push (src, buf) == GST_FLOW_OK);
-}
-
GST_START_TEST (test_autoconvert_simple)
{
GstPad *test_src_pad, *test_sink_pad;
GstElement *autoconvert = gst_check_setup_element ("autoconvert");
GstBus *bus = gst_bus_new ();
- TestContext ctx = { 0 };
+ GstCaps *caps;
+ guint i;
set_autoconvert_factories (autoconvert);
@@ -122,9 +98,29 @@ GST_START_TEST (test_autoconvert_simple)
gst_element_set_state (GST_ELEMENT_CAST (autoconvert), GST_STATE_PLAYING);
- /* Push 20 items */
- for (ctx.n = 0; ctx.n < 20; ctx.n++)
- generate_test_buffer (test_src_pad, &ctx);
+ /* Setting original caps */
+ caps = gst_caps_from_string ("test/caps,type=(int)1");
+ fail_unless (gst_pad_set_caps (test_src_pad, caps));
+ gst_caps_unref (caps);
+
+ /* Push 10 items */
+ for (i = 0; i < 10; i++) {
+ GST_LOG ("Pushing test buffer %d, caps 1");
+ fail_unless (gst_pad_push (test_src_pad, gst_buffer_new_and_alloc (4096))
+ == GST_FLOW_OK);
+ }
+
+ GST_LOG ("Changing caps to caps 2");
+ caps = gst_caps_from_string ("test/caps,type=(int)2");
+ fail_unless (gst_pad_set_caps (test_src_pad, caps));
+ gst_caps_unref (caps);
+
+ /* Push 10 more items */
+ for (i = 0; i < 10; i++) {
+ GST_LOG ("Pushing test buffer %d, caps 2");
+ fail_unless (gst_pad_push (test_src_pad, gst_buffer_new_and_alloc (4096))
+ == GST_FLOW_OK);
+ }
/* Check all the items arrived */
fail_unless_equals_int (g_list_length (buffers), 20);
diff --git a/tests/check/elements/camerabin.c b/tests/check/elements/camerabin.c
index da727098..ac55a8da 100644
--- a/tests/check/elements/camerabin.c
+++ b/tests/check/elements/camerabin.c
@@ -1519,9 +1519,21 @@ GST_START_TEST (test_image_location_switching)
g_idle_add (image_location_switch_do_capture, filenames);
g_main_loop_run (main_loop);
- msg = wait_for_element_message (camera, "image-done", GST_CLOCK_TIME_NONE);
- fail_unless (msg != NULL);
- gst_message_unref (msg);
+ while (1) {
+ const gchar *filename;
+
+ msg = wait_for_element_message (camera, "image-done", GST_CLOCK_TIME_NONE);
+ fail_unless (msg != NULL);
+
+ filename =
+ gst_structure_get_string (gst_message_get_structure (msg), "filename");
+ if (strcmp (filename,
+ filenames[LOCATION_SWITCHING_FILENAMES_COUNT - 1]) == 0) {
+ gst_message_unref (msg);
+ break;
+ }
+ gst_message_unref (msg);
+ }
gst_element_set_state (GST_ELEMENT (camera), GST_STATE_NULL);
diff --git a/tests/check/elements/gdpdepay.c b/tests/check/elements/gdpdepay.c
new file mode 100644
index 00000000..5ee6e5fd
--- /dev/null
+++ b/tests/check/elements/gdpdepay.c
@@ -0,0 +1,399 @@
+/* GStreamer
+ *
+ * Copyright (C) 2006 Thomas Vander Stichele <thomas at apestaart dot 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 "config.h"
+#include <string.h>
+#include <unistd.h>
+
+#include <gst/check/gstcheck.h>
+#include <gst/audio/audio.h>
+#include "../../gst/gdp/dataprotocol.c"
+
+/* 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, *myshsinkpad;
+
+#define FORMATS "{ S8, "GST_AUDIO_NE(S16)" }"
+
+#define AUDIO_CAPS_TEMPLATE_STRING \
+ "audio/x-raw, " \
+ "format = (string) "FORMATS", " \
+ "rate = (int) [ 1, MAX ], " \
+ "channels = (int) [ 1, 8 ]"
+
+#define AUDIO_CAPS_STRING \
+ "audio/x-raw, " \
+ "format = (string) "GST_AUDIO_NE(S16)", " \
+ "rate = (int) 1000, " \
+ "channels = (int) 2"
+
+static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS (AUDIO_CAPS_TEMPLATE_STRING)
+ );
+static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("application/x-gdp")
+ );
+
+/* takes over reference for outcaps */
+static GstElement *
+setup_gdpdepay (void)
+{
+ GstElement *gdpdepay;
+
+ GST_DEBUG ("setup_gdpdepay");
+ gdpdepay = gst_check_setup_element ("gdpdepay");
+ mysrcpad = gst_check_setup_src_pad (gdpdepay, &srctemplate);
+ mysinkpad = gst_check_setup_sink_pad (gdpdepay, &sinktemplate);
+ gst_pad_set_active (mysrcpad, TRUE);
+ gst_pad_set_active (mysinkpad, TRUE);
+
+ return gdpdepay;
+}
+
+static void
+cleanup_gdpdepay (GstElement * gdpdepay)
+{
+ GST_DEBUG ("cleanup_gdpdepay");
+
+ gst_pad_set_active (mysrcpad, FALSE);
+ if (mysinkpad)
+ gst_pad_set_active (mysinkpad, FALSE);
+ if (myshsinkpad)
+ gst_pad_set_active (myshsinkpad, FALSE);
+ gst_check_teardown_src_pad (gdpdepay);
+ gst_check_teardown_sink_pad (gdpdepay);
+ gst_check_teardown_element (gdpdepay);
+ mysinkpad = NULL;
+ myshsinkpad = NULL;
+}
+
+static void
+gdpdepay_push_per_byte (const gchar * reason, const guint8 * bytes,
+ guint length)
+{
+ int i;
+ GstBuffer *inbuffer;
+
+ for (i = 0; i < length; ++i) {
+ inbuffer = gst_buffer_new_and_alloc (1);
+ gst_buffer_fill (inbuffer, 0, &bytes[i], 1);
+ fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK,
+ "%s: failed pushing byte buffer", reason);
+ }
+}
+
+GST_START_TEST (test_audio_per_byte)
+{
+ GstCaps *caps;
+ GstPad *srcpad;
+ GstElement *gdpdepay;
+ GstBuffer *buffer, *outbuffer;
+ guint8 *header, *payload;
+ guint len;
+ GstDPPacketizer *pk;
+
+ pk = gst_dp_packetizer_new (GST_DP_VERSION_1_0);
+
+ gdpdepay = setup_gdpdepay ();
+ srcpad = gst_element_get_static_pad (gdpdepay, "src");
+
+ fail_unless (gst_element_set_state (gdpdepay,
+ GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
+ "could not set to playing");
+
+ caps = gst_pad_query_caps (srcpad, NULL);
+ fail_unless (gst_caps_is_any (caps));
+ gst_caps_unref (caps);
+ fail_if (gst_pad_get_current_caps (srcpad));
+
+ /* create caps and buffer packets and push them */
+ caps = gst_caps_from_string (AUDIO_CAPS_STRING);
+ fail_unless (pk->packet_from_caps (caps, 0, &len, &header, &payload));
+ gst_caps_unref (caps);
+ gdpdepay_push_per_byte ("caps header", header, len);
+ fail_unless_equals_int (g_list_length (buffers), 0);
+ gdpdepay_push_per_byte ("caps payload", payload,
+ gst_dp_header_payload_length (header));
+ fail_unless_equals_int (g_list_length (buffers), 0);
+ caps = gst_pad_query_caps (srcpad, NULL);
+ fail_if (gst_caps_is_any (caps));
+ gst_caps_unref (caps);
+
+ g_free (header);
+ g_free (payload);
+
+ buffer = gst_buffer_new_and_alloc (4);
+ gst_buffer_fill (buffer, 0, "f00d", 4);
+ GST_BUFFER_TIMESTAMP (buffer) = GST_SECOND;
+ GST_BUFFER_DURATION (buffer) = GST_SECOND / 10;
+ fail_unless (pk->header_from_buffer (buffer, 0, &len, &header));
+ gdpdepay_push_per_byte ("buffer header", header, len);
+ fail_unless_equals_int (g_list_length (buffers), 0);
+ gdpdepay_push_per_byte ("buffer payload", (const guint8 *) "f00d",
+ gst_dp_header_payload_length (header));
+ g_free (header);
+ gst_buffer_unref (buffer);
+
+ fail_unless_equals_int (g_list_length (buffers), 1);
+ fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
+ fail_unless_equals_uint64 (GST_BUFFER_TIMESTAMP (outbuffer), GST_SECOND);
+ fail_unless_equals_uint64 (GST_BUFFER_DURATION (outbuffer), GST_SECOND / 10);
+
+ buffers = g_list_remove (buffers, outbuffer);
+ gst_buffer_unref (outbuffer);
+
+ fail_unless (gst_element_set_state (gdpdepay,
+ GST_STATE_NULL) == GST_STATE_CHANGE_SUCCESS, "could not set to null");
+
+ ASSERT_OBJECT_REFCOUNT (gdpdepay, "gdpdepay", 1);
+ g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL);
+ g_list_free (buffers);
+ buffers = NULL;
+ gst_object_unref (srcpad);
+ cleanup_gdpdepay (gdpdepay);
+
+ gst_dp_packetizer_free (pk);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_audio_in_one_buffer)
+{
+ GstCaps *caps;
+ GstPad *srcpad;
+ GstElement *gdpdepay;
+ GstBuffer *buffer, *inbuffer;
+ guint8 *caps_header, *caps_payload, *buf_header;
+ guint header_len, payload_len;
+ guint i;
+ GstDPPacketizer *pk;
+
+ pk = gst_dp_packetizer_new (GST_DP_VERSION_1_0);
+
+ gdpdepay = setup_gdpdepay ();
+ srcpad = gst_element_get_static_pad (gdpdepay, "src");
+
+ fail_unless (gst_element_set_state (gdpdepay,
+ GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
+ "could not set to playing");
+
+ /* make sure no caps are set yet */
+ caps = gst_pad_query_caps (srcpad, NULL);
+ fail_unless (gst_caps_is_any (caps));
+ gst_caps_unref (caps);
+ fail_if (gst_pad_get_current_caps (srcpad));
+
+ /* create caps and buffer packets and push them as one buffer */
+ caps = gst_caps_from_string (AUDIO_CAPS_STRING);
+ fail_unless (pk->packet_from_caps (caps, 0, &header_len, &caps_header,
+ &caps_payload));
+
+ buffer = gst_buffer_new_and_alloc (4);
+ gst_buffer_fill (buffer, 0, "f00d", 4);
+ fail_unless (pk->header_from_buffer (buffer, 0, &header_len, &buf_header));
+
+ payload_len = gst_dp_header_payload_length (caps_header);
+
+ inbuffer = gst_buffer_new_and_alloc (2 * GST_DP_HEADER_LENGTH +
+ payload_len + gst_buffer_get_size (buffer));
+ gst_buffer_fill (inbuffer, 0, caps_header, GST_DP_HEADER_LENGTH);
+ i = GST_DP_HEADER_LENGTH;
+ gst_buffer_fill (inbuffer, i, caps_payload, payload_len);
+ i += payload_len;
+ gst_buffer_fill (inbuffer, i, buf_header, GST_DP_HEADER_LENGTH);
+ i += GST_DP_HEADER_LENGTH;
+ gst_buffer_fill (inbuffer, i, "f00d", 4);
+
+ gst_caps_unref (caps);
+ gst_buffer_unref (buffer);
+
+ g_free (caps_header);
+ g_free (caps_payload);
+ g_free (buf_header);
+
+ /* now push it */
+ gst_pad_push (mysrcpad, inbuffer);
+
+ /* the buffer is still queued */
+ fail_unless_equals_int (g_list_length (buffers), 1);
+
+ fail_unless (gst_element_set_state (gdpdepay,
+ GST_STATE_NULL) == GST_STATE_CHANGE_SUCCESS, "could not set to null");
+
+ gst_object_unref (srcpad);
+ g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL);
+ g_list_free (buffers);
+ buffers = NULL;
+ ASSERT_OBJECT_REFCOUNT (gdpdepay, "gdpdepay", 1);
+ cleanup_gdpdepay (gdpdepay);
+
+ gst_dp_packetizer_free (pk);
+}
+
+GST_END_TEST;
+
+static GstStaticPadTemplate shsinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("application/x-gst-test-streamheader")
+ );
+
+static GstElement *
+setup_gdpdepay_streamheader (void)
+{
+ GstElement *gdpdepay;
+
+ GST_DEBUG ("setup_gdpdepay");
+ gdpdepay = gst_check_setup_element ("gdpdepay");
+ mysrcpad = gst_check_setup_src_pad (gdpdepay, &srctemplate);
+ myshsinkpad = gst_check_setup_sink_pad (gdpdepay, &shsinktemplate);
+ gst_pad_set_active (mysrcpad, TRUE);
+ gst_pad_set_active (myshsinkpad, TRUE);
+
+ return gdpdepay;
+}
+
+/* this tests deserialization of a GDP stream where the serialized caps
+ * have a streamheader set */
+GST_START_TEST (test_streamheader)
+{
+ GstCaps *caps;
+ GstPad *srcpad;
+ GstElement *gdpdepay;
+ GstBuffer *buffer, *inbuffer, *outbuffer, *shbuffer;
+ guint8 *caps_header, *caps_payload, *buf_header;
+ GstMapInfo map;
+ guint header_len, payload_len;
+ guint i;
+ GstStructure *structure;
+ GValue array = { 0 };
+ GValue value = { 0 };
+ GstDPPacketizer *pk;
+
+ pk = gst_dp_packetizer_new (GST_DP_VERSION_1_0);
+
+ gdpdepay = setup_gdpdepay_streamheader ();
+ srcpad = gst_element_get_static_pad (gdpdepay, "src");
+ ASSERT_OBJECT_REFCOUNT (gdpdepay, "gdpdepay", 1);
+
+ fail_unless (gst_element_set_state (gdpdepay,
+ GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
+ "could not set to playing");
+
+ /* make sure no caps are set yet */
+ caps = gst_pad_query_caps (srcpad, NULL);
+ fail_unless (gst_caps_is_any (caps));
+ gst_caps_unref (caps);
+ fail_if (gst_pad_get_current_caps (srcpad));
+
+ /* create a streamheader buffer and the caps containing it */
+ caps = gst_caps_from_string ("application/x-gst-test-streamheader");
+ structure = gst_caps_get_structure (caps, 0);
+ buffer = gst_buffer_new_and_alloc (4);
+ gst_buffer_fill (buffer, 0, "f00d", 4);
+ GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_HEADER);
+ g_value_init (&array, GST_TYPE_ARRAY);
+ g_value_init (&value, GST_TYPE_BUFFER);
+ shbuffer = gst_buffer_copy (buffer);
+ gst_value_set_buffer (&value, shbuffer);
+ gst_buffer_unref (shbuffer);
+ gst_value_array_append_value (&array, &value);
+ g_value_unset (&value);
+ gst_structure_set_value (structure, "streamheader", &array);
+ g_value_unset (&array);
+
+ /* create GDP packets for the caps and the buffer, and put them in one
+ * GDP buffer */
+ fail_unless (pk->packet_from_caps (caps, 0, &header_len, &caps_header,
+ &caps_payload));
+
+ fail_unless (pk->header_from_buffer (buffer, 0, &header_len, &buf_header));
+
+ payload_len = gst_dp_header_payload_length (caps_header);
+
+ gst_buffer_map (buffer, &map, GST_MAP_READ);
+ inbuffer = gst_buffer_new_and_alloc (2 * GST_DP_HEADER_LENGTH +
+ payload_len + map.size);
+ gst_buffer_fill (inbuffer, 0, caps_header, GST_DP_HEADER_LENGTH);
+ i = GST_DP_HEADER_LENGTH;
+ gst_buffer_fill (inbuffer, i, caps_payload, payload_len);
+ i += payload_len;
+ gst_buffer_fill (inbuffer, i, buf_header, GST_DP_HEADER_LENGTH);
+ i += GST_DP_HEADER_LENGTH;
+ gst_buffer_fill (inbuffer, i, map.data, map.size);
+ gst_buffer_unmap (buffer, &map);
+
+ gst_caps_unref (caps);
+ gst_buffer_unref (buffer);
+
+ g_free (caps_header);
+ g_free (caps_payload);
+ g_free (buf_header);
+
+ /* now push it */
+ ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
+ gst_pad_push (mysrcpad, inbuffer);
+
+ /* our only output buffer is the streamheader buffer */
+ fail_unless_equals_int (g_list_length (buffers), 1);
+ fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
+ buffers = g_list_remove (buffers, outbuffer);
+ ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 1);
+ fail_unless (GST_BUFFER_FLAG_IS_SET (outbuffer, GST_BUFFER_FLAG_HEADER));
+
+ /* FIXME: get streamheader, compare data with buffer */
+ gst_buffer_unref (outbuffer);
+
+ /* clean up */
+ fail_unless (gst_element_set_state (gdpdepay,
+ GST_STATE_NULL) == GST_STATE_CHANGE_SUCCESS, "could not set to null");
+
+ gst_object_unref (srcpad);
+ g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL);
+ g_list_free (buffers);
+ buffers = NULL;
+ ASSERT_OBJECT_REFCOUNT (gdpdepay, "gdpdepay", 1);
+ cleanup_gdpdepay (gdpdepay);
+
+ gst_dp_packetizer_free (pk);
+}
+
+GST_END_TEST;
+
+static Suite *
+gdpdepay_suite (void)
+{
+ Suite *s = suite_create ("gdpdepay");
+ TCase *tc_chain = tcase_create ("general");
+
+ suite_add_tcase (s, tc_chain);
+ tcase_add_test (tc_chain, test_audio_per_byte);
+ tcase_add_test (tc_chain, test_audio_in_one_buffer);
+ tcase_add_test (tc_chain, test_streamheader);
+
+ return s;
+}
+
+GST_CHECK_MAIN (gdpdepay);
diff --git a/tests/check/elements/gdppay.c b/tests/check/elements/gdppay.c
new file mode 100644
index 00000000..451a0c53
--- /dev/null
+++ b/tests/check/elements/gdppay.c
@@ -0,0 +1,571 @@
+/* GStreamer
+ *
+ * Copyright (C) 2006 Thomas Vander Stichele <thomas at apestaart dot 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 "config.h"
+#include <string.h>
+#include <unistd.h>
+
+#include <gst/check/gstcheck.h>
+#include <gst/audio/audio.h>
+#include "../../gst/gdp/dataprotocol.c"
+
+/* 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, *myshsrcpad, *mysinkpad;
+
+#define FORMATS "{ S8, "GST_AUDIO_NE(S16)" }"
+
+#define AUDIO_CAPS_TEMPLATE_STRING \
+ "audio/x-raw, " \
+ "format = (string) "FORMATS", " \
+ "rate = (int) [ 1, MAX ], " \
+ "channels = (int) [ 1, 8 ]"
+
+#define AUDIO_CAPS_STRING \
+ "audio/x-raw, " \
+ "format = (string) "GST_AUDIO_NE(S16)", " \
+ "rate = (int) 1000, " \
+ "channels = (int) 2"
+
+
+static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("application/x-gdp")
+ );
+static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS (AUDIO_CAPS_TEMPLATE_STRING)
+ );
+
+/* takes over reference for outcaps */
+static GstElement *
+setup_gdppay (void)
+{
+ GstElement *gdppay;
+
+ GST_DEBUG ("setup_gdppay");
+ gdppay = gst_check_setup_element ("gdppay");
+ mysrcpad = gst_check_setup_src_pad (gdppay, &srctemplate);
+ mysinkpad = gst_check_setup_sink_pad (gdppay, &sinktemplate);
+ gst_pad_set_active (mysrcpad, TRUE);
+ gst_pad_set_active (mysinkpad, TRUE);
+
+ return gdppay;
+}
+
+static void
+cleanup_gdppay (GstElement * gdppay)
+{
+ GST_DEBUG ("cleanup_gdppay");
+
+ if (mysrcpad)
+ gst_pad_set_active (mysrcpad, FALSE);
+ if (myshsrcpad)
+ gst_pad_set_active (myshsrcpad, FALSE);
+ gst_pad_set_active (mysinkpad, FALSE);
+ gst_check_teardown_src_pad (gdppay);
+ gst_check_teardown_sink_pad (gdppay);
+ gst_check_teardown_element (gdppay);
+ mysrcpad = NULL;
+ myshsrcpad = NULL;
+}
+
+GST_START_TEST (test_audio)
+{
+ GstCaps *caps;
+ GstElement *gdppay;
+ GstBuffer *inbuffer, *outbuffer;
+ GstSegment segment;
+ GstEvent *event;
+ gchar *caps_string;
+ gint length;
+
+ gdppay = setup_gdppay ();
+
+ fail_unless (gst_element_set_state (gdppay,
+ GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
+ "could not set to playing");
+
+ GST_DEBUG ("new segment");
+ gst_segment_init (&segment, GST_FORMAT_TIME);
+ segment.stop = GST_SECOND;
+ event = gst_event_new_segment (&segment);
+ fail_unless (gst_pad_push_event (mysrcpad, event));
+
+ /* no buffer should be pushed yet, waiting for caps */
+ fail_unless_equals_int (g_list_length (buffers), 0);
+
+ GST_DEBUG ("first buffer");
+ inbuffer = gst_buffer_new_and_alloc (4);
+ caps = gst_caps_from_string (AUDIO_CAPS_STRING);
+ gst_pad_set_caps (mysrcpad, caps);
+ caps_string = gst_caps_to_string (caps);
+
+ ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
+
+ /* pushing gives away my reference */
+ fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
+
+ /* we should have three buffers now */
+ fail_unless_equals_int (g_list_length (buffers), 3);
+
+ /* first buffer is the serialized new_segment event;
+ * the element also holds a ref to it */
+ fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
+ buffers = g_list_remove (buffers, outbuffer);
+ ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 2);
+ gst_buffer_unref (outbuffer);
+
+ /* second buffer is the serialized caps;
+ * the element also holds a ref to it */
+ fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
+ buffers = g_list_remove (buffers, outbuffer);
+ ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 2);
+ length = GST_DP_HEADER_LENGTH + (strlen (caps_string) + 1);
+ fail_unless_equals_int (gst_buffer_get_size (outbuffer), length);
+ gst_buffer_unref (outbuffer);
+
+ /* the third buffer is the GDP buffer for our pushed buffer */
+ fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
+ buffers = g_list_remove (buffers, outbuffer);
+ ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 1);
+ length = GST_DP_HEADER_LENGTH + 4;
+ fail_unless_equals_int (gst_buffer_get_size (outbuffer), length);
+ gst_buffer_unref (outbuffer);
+
+ /* second buffer */
+ GST_DEBUG ("second buffer");
+ inbuffer = gst_buffer_new_and_alloc (4);
+
+ ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
+
+ /* pushing gives away my reference */
+ fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
+
+ fail_unless_equals_int (g_list_length (buffers), 1);
+ fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
+ buffers = g_list_remove (buffers, outbuffer);
+ ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 1);
+
+ /* the third output buffer is data */
+ length = GST_DP_HEADER_LENGTH + 4;
+ fail_unless_equals_int (gst_buffer_get_size (outbuffer), length);
+ gst_buffer_unref (outbuffer);
+
+ /* a third buffer without caps set explicitly; should work */
+ GST_DEBUG ("Creating third buffer, no caps set");
+ inbuffer = gst_buffer_new_and_alloc (4);
+
+ ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
+
+ /* pushing gives away my reference */
+ fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
+
+ fail_unless_equals_int (g_list_length (buffers), 1);
+ fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
+ buffers = g_list_remove (buffers, outbuffer);
+ ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 1);
+
+ /* the fourth output buffer is data */
+ length = GST_DP_HEADER_LENGTH + 4;
+ fail_unless_equals_int (gst_buffer_get_size (outbuffer), length);
+ gst_buffer_unref (outbuffer);
+
+
+ fail_unless (gst_element_set_state (gdppay,
+ GST_STATE_NULL) == GST_STATE_CHANGE_SUCCESS, "could not set to null");
+
+ gst_caps_unref (caps);
+ g_free (caps_string);
+ g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL);
+ g_list_free (buffers);
+ buffers = NULL;
+ ASSERT_OBJECT_REFCOUNT (gdppay, "gdppay", 1);
+ cleanup_gdppay (gdppay);
+}
+
+GST_END_TEST;
+
+static GstStaticPadTemplate shsrctemplate = GST_STATIC_PAD_TEMPLATE ("src",
+ GST_PAD_SRC,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("application/x-gst-test-streamheader")
+ );
+
+
+static GstElement *
+setup_gdppay_streamheader (void)
+{
+ GstElement *gdppay;
+
+ GST_DEBUG ("setup_gdppay");
+ gdppay = gst_check_setup_element ("gdppay");
+ myshsrcpad = gst_check_setup_src_pad (gdppay, &shsrctemplate);
+ mysinkpad = gst_check_setup_sink_pad (gdppay, &sinktemplate);
+ gst_pad_set_active (myshsrcpad, TRUE);
+ gst_pad_set_active (mysinkpad, TRUE);
+
+ return gdppay;
+}
+
+/* this test serializes a stream that already has a streamheader of its own.
+ * the streamheader should then be serialized and put on the GDP stream's
+ * streamheader */
+GST_START_TEST (test_streamheader)
+{
+ GstCaps *caps, *sinkcaps;
+ GstElement *gdppay;
+ GstBuffer *inbuffer, *outbuffer, *shbuffer;
+ GstSegment segment;
+ GstEvent *event;
+ gchar *caps_string;
+ gint length;
+ GstStructure *structure;
+ GValue array = { 0 };
+ GValue value = { 0 };
+ const GValue *sh;
+ GArray *shbuffers;
+
+
+ gdppay = setup_gdppay_streamheader ();
+
+ fail_unless (gst_element_set_state (gdppay,
+ GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
+ "could not set to playing");
+
+ GST_DEBUG ("new segment");
+ gst_segment_init (&segment, GST_FORMAT_TIME);
+ segment.stop = GST_SECOND;
+ event = gst_event_new_segment (&segment);
+ fail_unless (gst_pad_push_event (myshsrcpad, event));
+
+ /* no buffer should be pushed yet, still waiting for caps */
+ fail_unless_equals_int (g_list_length (buffers), 0);
+
+ GST_DEBUG ("first buffer");
+ inbuffer = gst_buffer_new_and_alloc (4);
+ gst_buffer_fill (inbuffer, 0, "head", 4);
+ caps = gst_caps_from_string ("application/x-gst-test-streamheader");
+ structure = gst_caps_get_structure (caps, 0);
+ GST_BUFFER_FLAG_SET (inbuffer, GST_BUFFER_FLAG_HEADER);
+ g_value_init (&array, GST_TYPE_ARRAY);
+ g_value_init (&value, GST_TYPE_BUFFER);
+ shbuffer = gst_buffer_copy (inbuffer);
+ gst_value_set_buffer (&value, shbuffer);
+ gst_buffer_unref (shbuffer);
+ gst_value_array_append_value (&array, &value);
+ g_value_unset (&value);
+ gst_structure_set_value (structure, "streamheader", &array);
+ g_value_unset (&array);
+ caps_string = gst_caps_to_string (caps);
+
+ gst_pad_set_caps (myshsrcpad, caps);
+ ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
+
+ /* pushing gives away my reference */
+ fail_unless (gst_pad_push (myshsrcpad, inbuffer) == GST_FLOW_OK);
+
+ /* we should have three buffers now */
+ fail_unless_equals_int (g_list_length (buffers), 3);
+
+ /* our sink pad should now have GDP caps with a streamheader that includes
+ * GDP wrappings of our streamheader */
+ sinkcaps = gst_pad_get_current_caps (mysinkpad);
+ structure = gst_caps_get_structure (sinkcaps, 0);
+ fail_unless_equals_string ((gchar *) gst_structure_get_name (structure),
+ "application/x-gdp");
+ fail_unless (gst_structure_has_field (structure, "streamheader"));
+ sh = gst_structure_get_value (structure, "streamheader");
+ fail_unless (G_VALUE_TYPE (sh) == GST_TYPE_ARRAY);
+ shbuffers = g_value_peek_pointer (sh);
+ /* a serialized new_segment, a serialized caps, and serialization of our
+ * incoming streamheader */
+ fail_unless_equals_int (shbuffers->len, 3);
+
+ gst_caps_unref (sinkcaps);
+
+ /* first buffer is the serialized new_segment event;
+ * the element also holds a ref to it */
+ fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
+ buffers = g_list_remove (buffers, outbuffer);
+ ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 2);
+ gst_buffer_unref (outbuffer);
+
+ /* second buffer is the serialized caps;
+ * the element also holds a ref to it */
+ fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
+ buffers = g_list_remove (buffers, outbuffer);
+ ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 2);
+ length = GST_DP_HEADER_LENGTH + (strlen (caps_string) + 1);
+ fail_unless_equals_int (gst_buffer_get_size (outbuffer), length);
+ gst_buffer_unref (outbuffer);
+
+ /* the third buffer is the GDP buffer for our pushed buffer */
+ fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
+ buffers = g_list_remove (buffers, outbuffer);
+ ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 1);
+ length = GST_DP_HEADER_LENGTH + 4;
+ fail_unless_equals_int (gst_buffer_get_size (outbuffer), length);
+ gst_buffer_unref (outbuffer);
+
+ /* second buffer */
+ GST_DEBUG ("second buffer");
+ inbuffer = gst_buffer_new_and_alloc (4);
+
+ ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
+
+ /* pushing gives away my reference */
+ fail_unless (gst_pad_push (myshsrcpad, inbuffer) == GST_FLOW_OK);
+
+ fail_unless_equals_int (g_list_length (buffers), 1);
+ fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
+ buffers = g_list_remove (buffers, outbuffer);
+ ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 1);
+
+ /* the third output buffer is data */
+ length = GST_DP_HEADER_LENGTH + 4;
+ fail_unless_equals_int (gst_buffer_get_size (outbuffer), length);
+ gst_buffer_unref (outbuffer);
+
+ /* a third buffer without caps set explicitly; should work */
+ GST_DEBUG ("Creating third buffer, no caps set");
+ inbuffer = gst_buffer_new_and_alloc (4);
+
+ ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
+
+ /* pushing gives away my reference */
+ fail_unless (gst_pad_push (myshsrcpad, inbuffer) == GST_FLOW_OK);
+
+ fail_unless_equals_int (g_list_length (buffers), 1);
+ fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
+ buffers = g_list_remove (buffers, outbuffer);
+ ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 1);
+
+ /* the fourth output buffer is data */
+ length = GST_DP_HEADER_LENGTH + 4;
+ fail_unless_equals_int (gst_buffer_get_size (outbuffer), length);
+ gst_buffer_unref (outbuffer);
+
+
+ fail_unless (gst_element_set_state (gdppay,
+ GST_STATE_NULL) == GST_STATE_CHANGE_SUCCESS, "could not set to null");
+
+ gst_caps_unref (caps);
+ g_free (caps_string);
+ g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL);
+ g_list_free (buffers);
+ buffers = NULL;
+ ASSERT_OBJECT_REFCOUNT (gdppay, "gdppay", 1);
+ cleanup_gdppay (gdppay);
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (test_first_no_caps)
+{
+ GstElement *gdppay;
+ GstBuffer *inbuffer;
+
+ gdppay = setup_gdppay ();
+
+ fail_unless (gst_element_set_state (gdppay,
+ GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
+ "could not set to playing");
+
+ GST_DEBUG ("first buffer");
+ inbuffer = gst_buffer_new_and_alloc (4);
+ ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
+
+ /* pushing should trigger an error */
+ fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_NOT_NEGOTIATED);
+
+ fail_unless_equals_int (g_list_length (buffers), 0);
+
+ fail_unless (gst_element_set_state (gdppay,
+ GST_STATE_NULL) == GST_STATE_CHANGE_SUCCESS, "could not set to null");
+
+ g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL);
+ g_list_free (buffers);
+ buffers = NULL;
+ ASSERT_OBJECT_REFCOUNT (gdppay, "gdppay", 1);
+ cleanup_gdppay (gdppay);
+}
+
+GST_END_TEST;
+
+/* element should still work if no new_segment is sent before the first
+ * buffer */
+GST_START_TEST (test_first_no_new_segment)
+{
+ GstElement *gdppay;
+ GstBuffer *inbuffer;
+ GstCaps *caps;
+
+ gdppay = setup_gdppay ();
+
+ fail_unless (gst_element_set_state (gdppay,
+ GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
+ "could not set to playing");
+
+ GST_DEBUG ("first buffer");
+ inbuffer = gst_buffer_new_and_alloc (4);
+ caps = gst_caps_from_string (AUDIO_CAPS_STRING);
+ gst_pad_set_caps (mysrcpad, caps);
+ gst_caps_unref (caps);
+
+ ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
+
+ /* pushing gives away my reference */
+ fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
+
+ /* we should have three buffers now;
+ * one for an "invented" new segment, one for GDP caps, and one with our
+ * buffer */
+ fail_unless_equals_int (g_list_length (buffers), 3);
+
+ fail_unless (gst_element_set_state (gdppay,
+ GST_STATE_NULL) == GST_STATE_CHANGE_SUCCESS, "could not set to null");
+
+ g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL);
+ g_list_free (buffers);
+ buffers = NULL;
+ ASSERT_OBJECT_REFCOUNT (gdppay, "gdppay", 1);
+ cleanup_gdppay (gdppay);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_crc)
+{
+ GstCaps *caps;
+ GstElement *gdppay;
+ GstBuffer *inbuffer, *outbuffer;
+ GstSegment segment;
+ GstEvent *event;
+ gchar *caps_string;
+ gint length;
+ GstMapInfo map;
+ guint16 crc_calculated, crc_read;
+
+ gdppay = setup_gdppay ();
+ g_object_set (gdppay, "crc-header", TRUE, NULL);
+
+ fail_unless (gst_element_set_state (gdppay,
+ GST_STATE_PLAYING) == GST_STATE_CHANGE_SUCCESS,
+ "could not set to playing");
+
+ GST_DEBUG ("new segment");
+ gst_segment_init (&segment, GST_FORMAT_TIME);
+ event = gst_event_new_segment (&segment);
+ fail_unless (gst_pad_push_event (mysrcpad, event));
+
+ /* no buffer should be pushed yet, waiting for caps */
+ fail_unless_equals_int (g_list_length (buffers), 0);
+
+ GST_DEBUG ("first buffer");
+ inbuffer = gst_buffer_new_and_alloc (4);
+ caps = gst_caps_from_string (AUDIO_CAPS_STRING);
+ gst_pad_set_caps (mysrcpad, caps);
+ caps_string = gst_caps_to_string (caps);
+
+ ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
+
+ /* pushing gives away my reference */
+ fail_unless (gst_pad_push (mysrcpad, inbuffer) == GST_FLOW_OK);
+
+ /* we should have three buffers now */
+ fail_unless_equals_int (g_list_length (buffers), 3);
+
+ /* first buffer is the serialized new_segment event;
+ * the element also holds a ref to it */
+ fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
+ buffers = g_list_remove (buffers, outbuffer);
+ ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 2);
+
+ /* verify the header checksum */
+ /* CRC's start at 58 in the header */
+ outbuffer = gst_buffer_make_writable (outbuffer);
+ gst_buffer_map (outbuffer, &map, GST_MAP_READWRITE);
+ crc_calculated = gst_dp_crc (map.data, 58);
+ crc_read = GST_READ_UINT16_BE (map.data + 58);
+ fail_unless_equals_int (crc_calculated, crc_read);
+
+ /* change a byte in the header and verify that the checksum now fails */
+ map.data[0] = 0xff;
+ crc_calculated = gst_dp_crc (map.data, 58);
+ fail_if (crc_calculated == crc_read,
+ "Introducing a byte error in the header should make the checksum fail");
+
+ gst_buffer_unmap (outbuffer, &map);
+ gst_buffer_unref (outbuffer);
+
+ /* second buffer is the serialized caps;
+ * the element also holds a ref to it */
+ fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
+ buffers = g_list_remove (buffers, outbuffer);
+ ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 2);
+ length = GST_DP_HEADER_LENGTH + (strlen (caps_string) + 1);
+ fail_unless_equals_int (gst_buffer_get_size (outbuffer), length);
+ gst_buffer_unref (outbuffer);
+
+ /* the third buffer is the GDP buffer for our pushed buffer */
+ fail_if ((outbuffer = (GstBuffer *) buffers->data) == NULL);
+ buffers = g_list_remove (buffers, outbuffer);
+ ASSERT_BUFFER_REFCOUNT (outbuffer, "outbuffer", 1);
+ length = GST_DP_HEADER_LENGTH + 4;
+ fail_unless_equals_int (gst_buffer_get_size (outbuffer), length);
+ gst_buffer_unref (outbuffer);
+
+ fail_unless (gst_element_set_state (gdppay,
+ GST_STATE_NULL) == GST_STATE_CHANGE_SUCCESS, "could not set to null");
+
+ gst_caps_unref (caps);
+ g_free (caps_string);
+ g_list_foreach (buffers, (GFunc) gst_mini_object_unref, NULL);
+ g_list_free (buffers);
+ buffers = NULL;
+ ASSERT_OBJECT_REFCOUNT (gdppay, "gdppay", 1);
+ cleanup_gdppay (gdppay);
+}
+
+GST_END_TEST;
+
+
+static Suite *
+gdppay_suite (void)
+{
+ Suite *s = suite_create ("gdppay");
+ TCase *tc_chain = tcase_create ("general");
+
+ suite_add_tcase (s, tc_chain);
+ tcase_add_test (tc_chain, test_audio);
+ tcase_add_test (tc_chain, test_first_no_caps);
+ tcase_add_test (tc_chain, test_first_no_new_segment);
+ tcase_add_test (tc_chain, test_streamheader);
+ tcase_add_test (tc_chain, test_crc);
+
+ return s;
+}
+
+GST_CHECK_MAIN (gdppay);
diff --git a/tests/check/elements/jifmux.c b/tests/check/elements/jifmux.c
index 0f129086..76f34578 100644
--- a/tests/check/elements/jifmux.c
+++ b/tests/check/elements/jifmux.c
@@ -1020,6 +1020,7 @@ GST_START_TEST (test_jifmux_tags)
GstTagList *taglist;
GstDateTime *datetime;
GstBuffer *buffer;
+ GstSample *sample;
GstMapInfo map;
gint i;
@@ -1037,6 +1038,9 @@ GST_START_TEST (test_jifmux_tags)
}
gst_buffer_unmap (buffer, &map);
+ sample = gst_sample_new (buffer, NULL, NULL, NULL);
+ gst_buffer_unref (buffer);
+
taglist = gst_tag_list_new (GST_TAG_ARTIST, "some artist",
GST_TAG_COPYRIGHT, "My copyright notice",
GST_TAG_DEVICE_MANUFACTURER, "MyFavoriteBrand",
@@ -1049,7 +1053,7 @@ GST_START_TEST (test_jifmux_tags)
GST_TAG_CAPTURING_FOCAL_LENGTH, 22.5,
GST_TAG_CAPTURING_DIGITAL_ZOOM_RATIO, 5.25,
GST_TAG_CAPTURING_EXPOSURE_COMPENSATION, -2.5,
- GST_TAG_APPLICATION_DATA, buffer,
+ GST_TAG_APPLICATION_DATA, sample,
GST_TAG_CAPTURING_FLASH_FIRED, TRUE,
GST_TAG_CAPTURING_FLASH_MODE, "auto",
GST_TAG_CAPTURING_SOURCE, "dsc",
@@ -1066,7 +1070,7 @@ GST_START_TEST (test_jifmux_tags)
GST_TAG_IMAGE_HORIZONTAL_PPI, 300.0,
GST_TAG_IMAGE_VERTICAL_PPI, 96.0, NULL);
gst_date_time_unref (datetime);
- gst_buffer_unref (buffer);
+ gst_sample_unref (sample);
generate_jif_file_with_tags_from_taglist (taglist, tmpfile);
libexif_check_tags_from_taglist (taglist, tmpfile);
gst_tag_list_unref (taglist);
diff --git a/tests/check/elements/jpegparse.c b/tests/check/elements/jpegparse.c
index fa8c63ac..991bab90 100644
--- a/tests/check/elements/jpegparse.c
+++ b/tests/check/elements/jpegparse.c
@@ -308,8 +308,8 @@ make_my_output_buffer (GstBuffer * buffer_in)
GstBuffer *buffer;
GstMapInfo map;
- buffer = gst_buffer_new ();
gst_buffer_map (buffer_in, &map, GST_MAP_READ);
+ buffer = gst_buffer_new_and_alloc (map.size);
gst_buffer_fill (buffer, 0, map.data, map.size);
gst_buffer_unmap (buffer_in, &map);
diff --git a/tests/check/elements/kate.c b/tests/check/elements/kate.c
index c33c8f92..2ac860d8 100644
--- a/tests/check/elements/kate.c
+++ b/tests/check/elements/kate.c
@@ -514,7 +514,7 @@ GST_START_TEST (test_kate_encode_spu)
GST_BUFFER_DURATION (inbuffer) = 5 * GST_SECOND;
ASSERT_BUFFER_REFCOUNT (inbuffer, "inbuffer", 1);
- caps = gst_caps_from_string ("video/x-dvd-subpicture");
+ caps = gst_caps_from_string ("subpicture/x-dvd");
fail_unless (caps != NULL);
gst_buffer_set_caps (inbuffer, caps);
gst_caps_unref (caps);
diff --git a/tests/check/elements/mpeg2enc.c b/tests/check/elements/mpeg2enc.c
index 41dc7e07..78f7a50b 100644
--- a/tests/check/elements/mpeg2enc.c
+++ b/tests/check/elements/mpeg2enc.c
@@ -53,8 +53,8 @@ static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
/* some global vars, makes it easy as for the ones above */
-static GMutex *mpeg2enc_mutex;
-static GCond *mpeg2enc_cond;
+static GMutex mpeg2enc_mutex;
+static GCond mpeg2enc_cond;
static gboolean arrived_eos;
static gboolean
@@ -63,10 +63,10 @@ test_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_EOS:
- g_mutex_lock (mpeg2enc_mutex);
+ g_mutex_lock (&mpeg2enc_mutex);
arrived_eos = TRUE;
- g_cond_signal (mpeg2enc_cond);
- g_mutex_unlock (mpeg2enc_mutex);
+ g_cond_signal (&mpeg2enc_cond);
+ g_mutex_unlock (&mpeg2enc_mutex);
break;
default:
break;
@@ -91,8 +91,8 @@ setup_mpeg2enc (void)
gst_pad_set_event_function (mysinkpad, test_sink_event);
/* and notify the test run */
- mpeg2enc_mutex = g_mutex_new ();
- mpeg2enc_cond = g_cond_new ();
+ g_mutex_init (&mpeg2enc_mutex);
+ g_cond_init (&mpeg2enc_cond);
return mpeg2enc;
}
@@ -109,8 +109,8 @@ cleanup_mpeg2enc (GstElement * mpeg2enc)
gst_check_teardown_sink_pad (mpeg2enc);
gst_check_teardown_element (mpeg2enc);
- g_mutex_free (mpeg2enc_mutex);
- g_cond_free (mpeg2enc_cond);
+ g_mutex_clear (&mpeg2enc_mutex);
+ g_cond_clear (&mpeg2enc_cond);
}
GST_START_TEST (test_video_pad)
@@ -141,10 +141,10 @@ GST_START_TEST (test_video_pad)
/* need to force eos and state change to make sure the encoding task ends */
fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ()) == TRUE);
/* need to wait a bit to make sure mpeg2enc task digested all this */
- g_mutex_lock (mpeg2enc_mutex);
+ g_mutex_lock (&mpeg2enc_mutex);
while (!arrived_eos)
- g_cond_wait (mpeg2enc_cond, mpeg2enc_mutex);
- g_mutex_unlock (mpeg2enc_mutex);
+ g_cond_wait (&mpeg2enc_cond, &mpeg2enc_mutex);
+ g_mutex_unlock (&mpeg2enc_mutex);
num_buffers = g_list_length (buffers);
/* well, we do not really know much with mpeg, but at least something ... */
diff --git a/tests/check/elements/mpegtsmux.c b/tests/check/elements/mpegtsmux.c
index 90709e15..f02d7a8a 100644
--- a/tests/check/elements/mpegtsmux.c
+++ b/tests/check/elements/mpegtsmux.c
@@ -457,7 +457,7 @@ pad_push (GstPad * pad, GstBuffer * buffer, GstClockTime timestamp)
data->pad = pad;
data->buffer = buffer;
GST_BUFFER_TIMESTAMP (buffer) = timestamp;
- data->thread = g_thread_create (pad_push_thread, data, TRUE, NULL);
+ data->thread = g_thread_try_new ("gst-check", pad_push_thread, data, NULL);
return data;
}
diff --git a/tests/check/elements/mplex.c b/tests/check/elements/mplex.c
index 13a2c277..3ac31dcb 100644
--- a/tests/check/elements/mplex.c
+++ b/tests/check/elements/mplex.c
@@ -51,8 +51,8 @@ static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src",
/* some global vars, makes it easy as for the ones above */
-static GMutex *mplex_mutex;
-static GCond *mplex_cond;
+static GMutex mplex_mutex;
+static GCond mplex_cond;
static gboolean arrived_eos;
/* another easy hack, some mp2 audio data that should please mplex
@@ -103,10 +103,10 @@ test_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
switch (GST_EVENT_TYPE (event)) {
case GST_EVENT_EOS:
- g_mutex_lock (mplex_mutex);
+ g_mutex_lock (&mplex_mutex);
arrived_eos = TRUE;
- g_cond_signal (mplex_cond);
- g_mutex_unlock (mplex_mutex);
+ g_cond_signal (&mplex_cond);
+ g_mutex_unlock (&mplex_mutex);
break;
default:
break;
@@ -191,8 +191,8 @@ setup_mplex (void)
gst_pad_set_event_function (mysinkpad, test_sink_event);
/* and notify the test run */
- mplex_mutex = g_mutex_new ();
- mplex_cond = g_cond_new ();
+ g_mutex_init (&mplex_mutex);
+ g_cond_init (&mplex_cond);
return mplex;
}
@@ -209,8 +209,8 @@ cleanup_mplex (GstElement * mplex)
gst_check_teardown_sink_pad (mplex);
gst_check_teardown_element (mplex);
- g_mutex_free (mplex_mutex);
- g_cond_free (mplex_cond);
+ g_mutex_clear (&mplex_mutex);
+ g_cond_clear (&mplex_cond);
gst_deinit ();
}
@@ -245,10 +245,10 @@ GST_START_TEST (test_audio_pad)
/* need to force eos and state change to make sure the encoding task ends */
fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ()) == TRUE);
/* need to wait a bit to make sure mplex task digested all this */
- g_mutex_lock (mplex_mutex);
+ g_mutex_lock (&mplex_mutex);
while (!arrived_eos)
- g_cond_wait (mplex_cond, mplex_mutex);
- g_mutex_unlock (mplex_mutex);
+ g_cond_wait (&mplex_cond, &mplex_mutex);
+ g_mutex_unlock (&mplex_mutex);
num_buffers = g_list_length (buffers);
/* well, we do not really know much with mplex, but at least something ... */
diff --git a/tests/check/elements/mxfdemux.c b/tests/check/elements/mxfdemux.c
index d84ae32a..450d9a8f 100644
--- a/tests/check/elements/mxfdemux.c
+++ b/tests/check/elements/mxfdemux.c
@@ -269,6 +269,11 @@ mxfdemux_suite (void)
Suite *s = suite_create ("mxfdemux");
TCase *tc_chain = tcase_create ("general");
+ /* FIXME: remove again once ported */
+ if (!gst_registry_check_feature_version (gst_registry_get (), "mxfdemux", 1,
+ 0, 0))
+ return s;
+
suite_add_tcase (s, tc_chain);
tcase_set_timeout (tc_chain, 180);
tcase_add_test (tc_chain, test_pull);
diff --git a/tests/check/elements/mxfmux.c b/tests/check/elements/mxfmux.c
index f8c931e2..06afeed3 100644
--- a/tests/check/elements/mxfmux.c
+++ b/tests/check/elements/mxfmux.c
@@ -248,6 +248,11 @@ mxfmux_suite (void)
suite_add_tcase (s, tc_chain);
tcase_set_timeout (tc_chain, 180);
+ /* FIXME: remove again once ported */
+ if (!gst_registry_check_feature_version (gst_registry_get (), "mxfmux", 1, 0,
+ 0))
+ return s;
+
tcase_add_test (tc_chain, test_mpeg2);
tcase_add_test (tc_chain, test_raw_video_raw_audio);
tcase_add_test (tc_chain, test_raw_video_stride_transform);
diff --git a/tests/check/elements/opus.c b/tests/check/elements/opus.c
index be5b2cf6..84d39b34 100644
--- a/tests/check/elements/opus.c
+++ b/tests/check/elements/opus.c
@@ -333,6 +333,11 @@ GST_START_TEST (test_opus_encode_properties)
NULL);
check_buffers (1);
+
+ fail_unless (gst_pad_push_event (myencsrcpad,
+ gst_event_new_flush_start ()) == TRUE);
+ fail_unless (gst_pad_push_event (myencsrcpad,
+ gst_event_new_flush_stop (TRUE)) == TRUE);
}
gst_caps_unref (caps);
diff --git a/tests/check/elements/parser.c b/tests/check/elements/parser.c
index 356b7738..1e3fd0f5 100644
--- a/tests/check/elements/parser.c
+++ b/tests/check/elements/parser.c
@@ -123,7 +123,7 @@ buffer_verify_data (void *buffer, void *user_data)
}
}
if (!vdata->no_metadata) {
- fail_unless (GST_BUFFER_TIMESTAMP (buffer) == vdata->ts_counter);
+ fail_unless (GST_BUFFER_DTS (buffer) == vdata->ts_counter);
fail_unless (GST_BUFFER_DURATION (buffer) != 0);
fail_unless (GST_BUFFER_OFFSET (buffer) == vdata->offset_counter);
}
diff --git a/tests/check/elements/rtpmux.c b/tests/check/elements/rtpmux.c
index 1228e5b8..b565b1f1 100644
--- a/tests/check/elements/rtpmux.c
+++ b/tests/check/elements/rtpmux.c
@@ -50,6 +50,9 @@ query_func (GstPad * pad, GstObject * noparent, GstQuery * query)
gst_query_set_caps_result (query, *caps);
break;
}
+ case GST_QUERY_ACCEPT_CAPS:
+ gst_query_set_accept_caps_result (query, TRUE);
+ break;
default:
break;
}
@@ -68,14 +71,17 @@ event_func (GstPad * pad, GstObject * noparent, GstEvent * event)
gst_event_parse_caps (event, &caps);
fail_unless (caps2 != NULL && *caps2 != NULL);
- fail_unless (gst_caps_is_equal (caps, *caps2));
+ fail_unless (gst_caps_is_fixed (caps));
+ fail_unless (gst_caps_is_fixed (*caps2));
+ fail_unless (gst_caps_is_equal_fixed (caps, *caps2));
break;
}
default:
- gst_event_unref (event);
break;
}
+ gst_event_unref (event);
+
return TRUE;
}
diff --git a/tests/check/elements/uvch264demux.c b/tests/check/elements/uvch264demux.c
new file mode 100644
index 00000000..a633c694
--- /dev/null
+++ b/tests/check/elements/uvch264demux.c
@@ -0,0 +1,696 @@
+/* GStreamer
+ *
+ * unit test for uvch264_demux
+ *
+ * Copyright (C) <2012> Collabora Ltd.
+ * Author: Youness Alaoui <youness.alaoui@collabora.co.uk>
+ * Copyright (C) <2008> 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 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 <gst/check/gstcheck.h>
+#include <string.h>
+
+static GstElement *demux;
+static GstPad *mjpg_pad, *h264_pad, *yuy2_pad, *nv12_pad, *jpg_pad;
+static gboolean have_h264_eos, have_yuy2_eos, have_nv12_eos, have_jpg_eos;
+static GstBuffer *buffer_h264, *buffer_yuy2, *buffer_nv12, *buffer_jpg;
+static GError *gerror;
+static gchar *error_debug;
+
+static GstStaticPadTemplate mjpg_template =
+GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("image/jpeg, width=640, height=480, framerate=15/1"));
+
+static GstStaticPadTemplate sink_template =
+GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS,
+ GST_STATIC_CAPS_ANY);
+
+#define STRINGIFY_(x) #x
+#define STRINGIFY(x) STRINGIFY_ (x)
+#define DATADIR STRINGIFY (UVCH264DEMUX_DATADIR)
+#define VALID_H264_JPG_MJPG_FILENAME DATADIR "/valid_h264_jpg.mjpg"
+#define VALID_H264_JPG_JPG_FILENAME DATADIR "/valid_h264_jpg.jpg"
+#define VALID_H264_JPG_H264_FILENAME DATADIR "/valid_h264_jpg.h264"
+#define VALID_H264_YUY2_MJPG_FILENAME DATADIR "/valid_h264_yuy2.mjpg"
+#define VALID_H264_YUY2_YUY2_FILENAME DATADIR "/valid_h264_yuy2.yuy2"
+#define VALID_H264_YUY2_H264_FILENAME DATADIR "/valid_h264_yuy2.h264"
+
+#define _sink_chain_func(type) \
+static GstFlowReturn \
+ _sink_##type##_chain (GstPad * pad, GstBuffer * buffer) \
+{ \
+ fail_unless (GST_BUFFER_CAPS (buffer) != NULL); \
+ \
+ buffer_##type = buffer; \
+ \
+ return GST_FLOW_OK; \
+}
+
+#define _sink_event_func(type) \
+static gboolean \
+ _sink_##type##_event (GstPad * pad, GstEvent * event) \
+{ \
+ if (GST_EVENT_TYPE (event) == GST_EVENT_EOS) \
+ have_##type##_eos = TRUE; \
+ \
+ gst_event_unref (event); \
+ \
+ return TRUE; \
+}
+
+
+_sink_chain_func (h264);
+_sink_chain_func (yuy2);
+_sink_chain_func (nv12);
+_sink_chain_func (jpg);
+
+_sink_event_func (h264);
+_sink_event_func (yuy2);
+_sink_event_func (nv12);
+_sink_event_func (jpg);
+
+
+static GstBusSyncReply
+_bus_sync_handler (GstBus * bus, GstMessage * message, gpointer data)
+{
+ if (GST_MESSAGE_TYPE (message) == GST_MESSAGE_ERROR) {
+ fail_unless (gerror == NULL && error_debug == NULL);
+ fail_unless (GST_MESSAGE_SRC (message) == GST_OBJECT (demux));
+ gst_message_parse_error (message, &gerror, &error_debug);
+ }
+ return GST_BUS_PASS;
+}
+
+static void
+_teardown_test (void)
+{
+ GstBus *bus;
+ gst_element_set_state (demux, GST_STATE_NULL);
+
+ bus = GST_ELEMENT_BUS (demux);
+ gst_bus_set_flushing (bus, TRUE);
+ gst_object_unref (bus);
+
+ gst_pad_set_active (mjpg_pad, FALSE);
+ gst_object_unref (mjpg_pad);
+ if (h264_pad) {
+ gst_pad_set_active (h264_pad, FALSE);
+ gst_object_unref (h264_pad);
+ }
+ if (yuy2_pad) {
+ gst_pad_set_active (yuy2_pad, FALSE);
+ gst_object_unref (yuy2_pad);
+ }
+ if (nv12_pad) {
+ gst_pad_set_active (nv12_pad, FALSE);
+ gst_object_unref (nv12_pad);
+ }
+ if (jpg_pad) {
+ gst_pad_set_active (jpg_pad, FALSE);
+ gst_object_unref (jpg_pad);
+ }
+ if (gerror) {
+ g_error_free (gerror);
+ gerror = NULL;
+ }
+ if (error_debug) {
+ g_free (error_debug);
+ error_debug = NULL;
+ }
+
+ gst_object_unref (demux);
+ mjpg_pad = h264_pad = yuy2_pad = nv12_pad = jpg_pad = NULL;
+ demux = NULL;
+}
+
+static void
+_setup_test (gboolean link_h264, gboolean link_yuy2, gboolean link_nv12,
+ gboolean link_jpg)
+{
+ GstBus *bus = gst_bus_new ();
+ GstPad *sinkpad, *h264pad, *yuy2pad, *nv12pad, *jpgpad;
+
+ have_h264_eos = have_yuy2_eos = have_nv12_eos = have_jpg_eos = FALSE;
+ buffer_h264 = buffer_yuy2 = buffer_nv12 = buffer_jpg = NULL;
+
+ demux = gst_element_factory_make ("uvch264_mjpgdemux", NULL);
+ fail_unless (demux != NULL);
+
+ gst_element_set_bus (demux, bus);
+ gst_bus_set_sync_handler (bus, _bus_sync_handler, NULL);
+
+ mjpg_pad = gst_pad_new_from_static_template (&mjpg_template, "src");
+ fail_unless (mjpg_pad != NULL);
+ sinkpad = gst_element_get_static_pad (demux, "sink");
+ fail_unless (sinkpad != NULL);
+ fail_unless (gst_pad_link (mjpg_pad, sinkpad) == GST_PAD_LINK_OK);
+ gst_object_unref (sinkpad);
+
+ gst_pad_set_active (mjpg_pad, TRUE);
+
+ if (link_h264) {
+ h264pad = gst_element_get_static_pad (demux, "h264");
+ fail_unless (h264pad != NULL);
+
+ h264_pad = gst_pad_new_from_static_template (&sink_template, "h264");
+ fail_unless (h264_pad != NULL);
+ gst_pad_set_chain_function (h264_pad, _sink_h264_chain);
+ gst_pad_set_event_function (h264_pad, _sink_h264_event);
+
+ fail_unless (gst_pad_link (h264pad, h264_pad) == GST_PAD_LINK_OK);
+ gst_object_unref (h264pad);
+
+ gst_pad_set_active (h264_pad, TRUE);
+ }
+ if (link_yuy2) {
+ yuy2pad = gst_element_get_static_pad (demux, "yuy2");
+ fail_unless (yuy2pad != NULL);
+
+ yuy2_pad = gst_pad_new_from_static_template (&sink_template, "yuy2");
+ fail_unless (yuy2_pad != NULL);
+ gst_pad_set_chain_function (yuy2_pad, _sink_yuy2_chain);
+ gst_pad_set_event_function (yuy2_pad, _sink_yuy2_event);
+
+ fail_unless (gst_pad_link (yuy2pad, yuy2_pad) == GST_PAD_LINK_OK);
+ gst_object_unref (yuy2pad);
+
+ gst_pad_set_active (yuy2_pad, TRUE);
+ }
+ if (link_nv12) {
+ nv12pad = gst_element_get_static_pad (demux, "nv12");
+ fail_unless (nv12pad != NULL);
+
+ nv12_pad = gst_pad_new_from_static_template (&sink_template, "nv12");
+ fail_unless (nv12_pad != NULL);
+ gst_pad_set_chain_function (nv12_pad, _sink_nv12_chain);
+ gst_pad_set_event_function (nv12_pad, _sink_nv12_event);
+
+ fail_unless (gst_pad_link (nv12pad, nv12_pad) == GST_PAD_LINK_OK);
+ gst_object_unref (nv12pad);
+ gst_pad_set_active (nv12_pad, TRUE);
+ }
+ if (link_jpg) {
+ jpgpad = gst_element_get_static_pad (demux, "jpeg");
+ fail_unless (jpgpad != NULL);
+
+ jpg_pad = gst_pad_new_from_static_template (&sink_template, "jpeg");
+ fail_unless (jpg_pad != NULL);
+ gst_pad_set_chain_function (jpg_pad, _sink_jpg_chain);
+ gst_pad_set_event_function (jpg_pad, _sink_jpg_event);
+
+ fail_unless (gst_pad_link (jpgpad, jpg_pad) == GST_PAD_LINK_OK);
+ gst_object_unref (jpgpad);
+
+ gst_pad_set_active (jpg_pad, TRUE);
+ }
+
+ gst_element_set_state (demux, GST_STATE_PLAYING);
+}
+
+static GstBuffer *
+_buffer_from_file (const gchar * filename)
+{
+ GstBuffer *buffer = gst_buffer_new ();
+ gchar *contents = NULL;
+ gsize length = 0;
+
+ fail_unless (g_file_get_contents (filename, &contents, &length, NULL));
+
+ GST_BUFFER_MALLOCDATA (buffer) = (guint8 *) contents;
+ GST_BUFFER_DATA (buffer) = (guint8 *) contents;
+ GST_BUFFER_SIZE (buffer) = length;
+ GST_BUFFER_OFFSET (buffer) = 0;
+
+ return buffer;
+}
+
+GST_START_TEST (test_valid_h264_jpg)
+{
+ GstCaps *mjpg_caps = gst_static_pad_template_get_caps (&mjpg_template);
+ GstCaps *h264_caps;
+ GstBuffer *buffer;
+ gchar *h264_data, *jpg_data;
+ gsize h264_size, jpg_size;
+
+ _setup_test (TRUE, TRUE, TRUE, TRUE);
+
+ h264_caps = gst_caps_new_simple ("video/x-h264",
+ "width", G_TYPE_INT, 640, "height", G_TYPE_INT, 480,
+ "framerate", GST_TYPE_FRACTION, 15, 1, NULL);
+ buffer = _buffer_from_file (VALID_H264_JPG_MJPG_FILENAME);
+ gst_buffer_set_caps (buffer, mjpg_caps);
+ fail_unless (g_file_get_contents (VALID_H264_JPG_H264_FILENAME,
+ &h264_data, &h264_size, NULL));
+ fail_unless (g_file_get_contents (VALID_H264_JPG_JPG_FILENAME,
+ &jpg_data, &jpg_size, NULL));
+
+ fail_unless (gst_pad_push (mjpg_pad, buffer) == GST_FLOW_OK);
+ fail_unless (gst_pad_push_event (mjpg_pad, gst_event_new_eos ()));
+
+ fail_unless (have_h264_eos);
+ fail_unless (have_yuy2_eos);
+ fail_unless (have_nv12_eos);
+ fail_unless (have_jpg_eos);
+ fail_unless (buffer_h264 != NULL);
+ fail_unless (buffer_jpg != NULL);
+ fail_unless (buffer_nv12 == NULL);
+ fail_unless (buffer_yuy2 == NULL);
+ fail_unless (gerror == NULL && error_debug == NULL);
+ fail_unless (gst_caps_is_always_compatible (GST_BUFFER_CAPS (buffer_h264),
+ h264_caps));
+ fail_unless (gst_caps_is_always_compatible (GST_BUFFER_CAPS (buffer_jpg),
+ mjpg_caps));
+ fail_unless (GST_BUFFER_SIZE (buffer_h264) == h264_size);
+ fail_unless (GST_BUFFER_SIZE (buffer_jpg) == jpg_size);
+ fail_unless (memcmp (GST_BUFFER_DATA (buffer_h264), h264_data,
+ h264_size) == 0);
+ fail_unless (memcmp (GST_BUFFER_DATA (buffer_jpg), jpg_data, jpg_size) == 0);
+
+ gst_caps_unref (mjpg_caps);
+ gst_caps_unref (h264_caps);
+ g_free (h264_data);
+ g_free (jpg_data);
+ gst_buffer_unref (buffer_h264);
+ gst_buffer_unref (buffer_jpg);
+ _teardown_test ();
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_valid_h264_yuy2)
+{
+ GstCaps *mjpg_caps = gst_static_pad_template_get_caps (&mjpg_template);
+ GstCaps *h264_caps;
+ GstCaps *yuy2_caps;
+ GstBuffer *buffer;
+ gchar *h264_data, *yuy2_data;
+ gsize h264_size, yuy2_size;
+
+ _setup_test (TRUE, TRUE, TRUE, TRUE);
+
+ h264_caps = gst_caps_new_simple ("video/x-h264",
+ "width", G_TYPE_INT, 640, "height", G_TYPE_INT, 480,
+ "framerate", GST_TYPE_FRACTION, 15, 1, NULL);
+ yuy2_caps = gst_caps_new_simple ("video/x-raw-yuv",
+ "format", GST_TYPE_FOURCC, GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'),
+ "width", G_TYPE_INT, 160, "height", G_TYPE_INT, 90,
+ "framerate", GST_TYPE_FRACTION, 15, 1, NULL);
+ buffer = _buffer_from_file (VALID_H264_YUY2_MJPG_FILENAME);
+ gst_buffer_set_caps (buffer, mjpg_caps);
+ fail_unless (g_file_get_contents (VALID_H264_YUY2_H264_FILENAME,
+ &h264_data, &h264_size, NULL));
+ fail_unless (g_file_get_contents (VALID_H264_YUY2_YUY2_FILENAME,
+ &yuy2_data, &yuy2_size, NULL));
+
+ fail_unless (gst_pad_push (mjpg_pad, buffer) == GST_FLOW_OK);
+ fail_unless (gst_pad_push_event (mjpg_pad, gst_event_new_eos ()));
+
+ fail_unless (have_h264_eos);
+ fail_unless (have_yuy2_eos);
+ fail_unless (have_nv12_eos);
+ fail_unless (have_jpg_eos);
+ fail_unless (buffer_h264 != NULL);
+ fail_unless (buffer_jpg == NULL);
+ fail_unless (buffer_nv12 == NULL);
+ fail_unless (buffer_yuy2 != NULL);
+ fail_unless (gerror == NULL && error_debug == NULL);
+ fail_unless (gst_caps_is_always_compatible (GST_BUFFER_CAPS (buffer_h264),
+ h264_caps));
+ fail_unless (gst_caps_is_always_compatible (GST_BUFFER_CAPS (buffer_yuy2),
+ yuy2_caps));
+ fail_unless (GST_BUFFER_SIZE (buffer_h264) == h264_size);
+ fail_unless (GST_BUFFER_SIZE (buffer_yuy2) == yuy2_size);
+ fail_unless (memcmp (GST_BUFFER_DATA (buffer_h264), h264_data,
+ h264_size) == 0);
+ fail_unless (memcmp (GST_BUFFER_DATA (buffer_yuy2), yuy2_data,
+ yuy2_size) == 0);
+
+ gst_caps_unref (mjpg_caps);
+ gst_caps_unref (yuy2_caps);
+ gst_caps_unref (h264_caps);
+ g_free (h264_data);
+ g_free (yuy2_data);
+ gst_buffer_unref (buffer_h264);
+ gst_buffer_unref (buffer_yuy2);
+ _teardown_test ();
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_no_data)
+{
+ GstCaps *mjpg_caps = gst_static_pad_template_get_caps (&mjpg_template);
+ GstBuffer *buffer = gst_buffer_new ();
+
+ _setup_test (TRUE, TRUE, TRUE, TRUE);
+
+ gst_buffer_set_caps (buffer, mjpg_caps);
+ fail_unless (gst_pad_push (mjpg_pad, buffer) == GST_FLOW_OK);
+ fail_unless (gst_pad_push_event (mjpg_pad, gst_event_new_eos ()));
+
+ fail_unless (have_h264_eos && have_yuy2_eos && have_nv12_eos && have_jpg_eos);
+ fail_unless (buffer_h264 == NULL && buffer_jpg != NULL);
+ fail_unless (buffer_nv12 == NULL && buffer_yuy2 == NULL);
+ fail_unless (gerror == NULL && error_debug == NULL);
+
+ _teardown_test ();
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_data_zero)
+{
+ GstCaps *mjpg_caps = gst_static_pad_template_get_caps (&mjpg_template);
+ GstBuffer *buffer = gst_buffer_new_and_alloc (1024);
+
+ _setup_test (TRUE, TRUE, TRUE, TRUE);
+
+ memset (GST_BUFFER_DATA (buffer), 0, 1024);
+ GST_BUFFER_SIZE (buffer) = 1024;
+ gst_buffer_set_caps (buffer, mjpg_caps);
+ fail_unless (gst_pad_push (mjpg_pad, buffer) == GST_FLOW_OK);
+ fail_unless (gst_pad_push_event (mjpg_pad, gst_event_new_eos ()));
+
+ fail_unless (have_h264_eos && have_yuy2_eos && have_nv12_eos && have_jpg_eos);
+ fail_unless (buffer_h264 == NULL && buffer_jpg == NULL);
+ fail_unless (buffer_nv12 == NULL && buffer_yuy2 == NULL);
+
+ _teardown_test ();
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_no_marker_size)
+{
+ GstCaps *mjpg_caps = gst_static_pad_template_get_caps (&mjpg_template);
+ GstBuffer *buffer = gst_buffer_new_and_alloc (1024);
+ const guchar data[] = {
+ 0xff, 0xd8, 0xff, 0xe4, 0x00
+ };
+
+ _setup_test (TRUE, TRUE, TRUE, TRUE);
+
+ memcpy (GST_BUFFER_DATA (buffer), data, sizeof (data));
+ GST_BUFFER_SIZE (buffer) = sizeof (data);
+ gst_buffer_set_caps (buffer, mjpg_caps);
+ fail_unless (gst_pad_push (mjpg_pad, buffer) == GST_FLOW_ERROR);
+ fail_unless (gst_pad_push_event (mjpg_pad, gst_event_new_eos ()));
+
+ fail_unless (have_h264_eos && have_yuy2_eos && have_nv12_eos && have_jpg_eos);
+ fail_unless (buffer_h264 == NULL && buffer_jpg == NULL);
+ fail_unless (buffer_nv12 == NULL && buffer_yuy2 == NULL);
+ fail_unless (gerror != NULL);
+ fail_unless (gerror->domain == GST_STREAM_ERROR);
+ fail_unless (gerror->code == GST_STREAM_ERROR_DEMUX);
+ fail_unless (memcmp (gerror->message,
+ "Not enough data to read marker size",
+ strlen (gerror->message)) == 0);
+
+ _teardown_test ();
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_not_enough_data)
+{
+ GstCaps *mjpg_caps = gst_static_pad_template_get_caps (&mjpg_template);
+ GstBuffer *buffer = gst_buffer_new_and_alloc (1024);
+ const guchar data[] = {
+ 0xff, 0xd8, 0xff, 0xe4, 0x00, 0xff, 0x00, 0x00
+ };
+
+ _setup_test (TRUE, TRUE, TRUE, TRUE);
+
+ memcpy (GST_BUFFER_DATA (buffer), data, sizeof (data));
+ GST_BUFFER_SIZE (buffer) = sizeof (data);
+ gst_buffer_set_caps (buffer, mjpg_caps);
+ fail_unless (gst_pad_push (mjpg_pad, buffer) == GST_FLOW_ERROR);
+ fail_unless (gst_pad_push_event (mjpg_pad, gst_event_new_eos ()));
+
+ fail_unless (have_h264_eos && have_yuy2_eos && have_nv12_eos && have_jpg_eos);
+ fail_unless (buffer_h264 == NULL && buffer_jpg == NULL);
+ fail_unless (buffer_nv12 == NULL && buffer_yuy2 == NULL);
+ fail_unless (gerror != NULL);
+ fail_unless (gerror->domain == GST_STREAM_ERROR);
+ fail_unless (gerror->code == GST_STREAM_ERROR_DEMUX);
+ fail_unless (memcmp (gerror->message,
+ "Not enough data to read marker content",
+ strlen (gerror->message)) == 0);
+
+ _teardown_test ();
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_no_aux_header)
+{
+ GstCaps *mjpg_caps = gst_static_pad_template_get_caps (&mjpg_template);
+ GstBuffer *buffer = gst_buffer_new_and_alloc (1024);
+ const guchar data[] = {
+ 0xff, 0xd8, 0xff, 0xe4, 0x00, 0x02, 0x00, 0x00,
+ 0xff, 0xd9
+ };
+
+ _setup_test (TRUE, TRUE, TRUE, TRUE);
+
+ memcpy (GST_BUFFER_DATA (buffer), data, sizeof (data));
+ GST_BUFFER_SIZE (buffer) = sizeof (data);
+ gst_buffer_set_caps (buffer, mjpg_caps);
+ fail_unless (gst_pad_push (mjpg_pad, buffer) == GST_FLOW_ERROR);
+ fail_unless (gst_pad_push_event (mjpg_pad, gst_event_new_eos ()));
+
+ fail_unless (have_h264_eos && have_yuy2_eos && have_nv12_eos && have_jpg_eos);
+ fail_unless (buffer_h264 == NULL && buffer_jpg == NULL);
+ fail_unless (buffer_nv12 == NULL && buffer_yuy2 == NULL);
+ fail_unless (gerror != NULL);
+ fail_unless (gerror->domain == GST_STREAM_ERROR);
+ fail_unless (gerror->code == GST_STREAM_ERROR_DEMUX);
+ fail_unless (memcmp (gerror->message,
+ "Not enough data to read aux header", strlen (gerror->message)) == 0);
+
+ _teardown_test ();
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_empty_aux_data)
+{
+ GstCaps *mjpg_caps = gst_static_pad_template_get_caps (&mjpg_template);
+ GstBuffer *buffer = gst_buffer_new_and_alloc (1024);
+ const guchar data[] = {
+ 0xff, 0xd8, 0xff, 0xe4, 0x00, 0x1C, 0x00, 0x01,
+ 0x16, 0x00, 0x48, 0x32, 0x36, 0x34, 0x80, 0x07,
+ 0x38, 0x04, 0x2a, 0x2c, 0x0a, 0x00, 0x1b, 0x00,
+ 0x40, 0x62, 0xcb, 0x0a, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xd9
+ };
+
+ _setup_test (TRUE, TRUE, TRUE, TRUE);
+
+ memcpy (GST_BUFFER_DATA (buffer), data, sizeof (data));
+ GST_BUFFER_SIZE (buffer) = sizeof (data);
+ gst_buffer_set_caps (buffer, mjpg_caps);
+ fail_unless (gst_pad_push (mjpg_pad, buffer) == GST_FLOW_OK);
+ fail_unless (gst_pad_push_event (mjpg_pad, gst_event_new_eos ()));
+
+ fail_unless (have_h264_eos && have_yuy2_eos && have_nv12_eos && have_jpg_eos);
+ fail_unless (buffer_h264 == NULL && buffer_jpg == NULL);
+ fail_unless (buffer_nv12 == NULL && buffer_yuy2 == NULL);
+ fail_unless (gerror == NULL);
+
+ _teardown_test ();
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_unknown_fcc)
+{
+ GstCaps *mjpg_caps = gst_static_pad_template_get_caps (&mjpg_template);
+ GstBuffer *buffer = gst_buffer_new_and_alloc (1024);
+ const guchar data[] = {
+ 0xff, 0xd8, 0xff, 0xe4, 0x00, 0x2C, 0x00, 0x01,
+ 0x16, 0x00, 0x48, 0x30, 0x30, 0x30, 0x80, 0x07,
+ 0x38, 0x04, 0x2a, 0x2c, 0x0a, 0x00, 0x1b, 0x00,
+ 0x40, 0x62, 0xcb, 0x0a, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xd9
+ };
+
+ _setup_test (TRUE, TRUE, TRUE, TRUE);
+
+ memcpy (GST_BUFFER_DATA (buffer), data, sizeof (data));
+ GST_BUFFER_SIZE (buffer) = sizeof (data);
+ gst_buffer_set_caps (buffer, mjpg_caps);
+ fail_unless (gst_pad_push (mjpg_pad, buffer) == GST_FLOW_ERROR);
+ fail_unless (gst_pad_push_event (mjpg_pad, gst_event_new_eos ()));
+
+ fail_unless (have_h264_eos && have_yuy2_eos && have_nv12_eos && have_jpg_eos);
+ fail_unless (buffer_h264 == NULL && buffer_jpg == NULL);
+ fail_unless (buffer_nv12 == NULL && buffer_yuy2 == NULL);
+ fail_unless (gerror != NULL);
+ fail_unless (gerror->domain == GST_STREAM_ERROR);
+ fail_unless (gerror->code == GST_STREAM_ERROR_DEMUX);
+ fail_unless (memcmp (gerror->message,
+ "Unknown auxiliary stream format : H000",
+ strlen (gerror->message)) == 0);
+
+ _teardown_test ();
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_not_enough_aux_data)
+{
+ GstCaps *mjpg_caps = gst_static_pad_template_get_caps (&mjpg_template);
+ GstBuffer *buffer = gst_buffer_new_and_alloc (1024);
+ const guchar data[] = {
+ 0xff, 0xd8, 0xff, 0xe4, 0x00, 0x1C, 0x00, 0x01,
+ 0x16, 0x00, 0x48, 0x32, 0x36, 0x34, 0x80, 0x07,
+ 0x38, 0x04, 0x2a, 0x2c, 0x0a, 0x00, 0x1b, 0x00,
+ 0x40, 0x62, 0xcb, 0x0a, 0x10, 0x00, 0x00, 0x00,
+ 0xff, 0xd9
+ };
+
+ _setup_test (TRUE, TRUE, TRUE, TRUE);
+
+ memcpy (GST_BUFFER_DATA (buffer), data, sizeof (data));
+ GST_BUFFER_SIZE (buffer) = sizeof (data);
+ gst_buffer_set_caps (buffer, mjpg_caps);
+ fail_unless (gst_pad_push (mjpg_pad, buffer) == GST_FLOW_ERROR);
+ fail_unless (gst_pad_push_event (mjpg_pad, gst_event_new_eos ()));
+
+ fail_unless (have_h264_eos && have_yuy2_eos && have_nv12_eos && have_jpg_eos);
+ fail_unless (buffer_h264 == NULL && buffer_jpg == NULL);
+ fail_unless (buffer_nv12 == NULL && buffer_yuy2 == NULL);
+ fail_unless (gerror != NULL);
+ fail_unless (gerror->domain == GST_STREAM_ERROR);
+ fail_unless (gerror->code == GST_STREAM_ERROR_DEMUX);
+ fail_unless (memcmp (gerror->message,
+ "Incomplete auxiliary stream. 16 bytes missing",
+ strlen (gerror->message)) == 0);
+
+ _teardown_test ();
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_too_much_aux_data)
+{
+ GstCaps *mjpg_caps = gst_static_pad_template_get_caps (&mjpg_template);
+ GstBuffer *buffer = gst_buffer_new_and_alloc (1024);
+ const guchar data[] = {
+ 0xff, 0xd8, 0xff, 0xe4, 0x00, 0x3C, 0x00, 0x01,
+ 0x16, 0x00, 0x48, 0x32, 0x36, 0x34, 0x80, 0x07,
+ 0x38, 0x04, 0x2a, 0x2c, 0x0a, 0x00, 0x1b, 0x00,
+ 0x40, 0x62, 0xcb, 0x0a, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xd9
+ };
+
+ _setup_test (TRUE, TRUE, TRUE, TRUE);
+
+ memcpy (GST_BUFFER_DATA (buffer), data, sizeof (data));
+ GST_BUFFER_SIZE (buffer) = sizeof (data);
+ gst_buffer_set_caps (buffer, mjpg_caps);
+ fail_unless (gst_pad_push (mjpg_pad, buffer) == GST_FLOW_ERROR);
+ fail_unless (gst_pad_push_event (mjpg_pad, gst_event_new_eos ()));
+
+ fail_unless (have_h264_eos && have_yuy2_eos && have_nv12_eos && have_jpg_eos);
+ fail_unless (buffer_h264 == NULL && buffer_jpg == NULL);
+ fail_unless (buffer_nv12 == NULL && buffer_yuy2 == NULL);
+ fail_unless (gerror != NULL);
+ fail_unless (gerror->domain == GST_STREAM_ERROR);
+ fail_unless (gerror->code == GST_STREAM_ERROR_DEMUX);
+ fail_unless (memcmp (gerror->message,
+ "Expected 16 auxiliary data, got 32 bytes",
+ strlen (gerror->message)) == 0);
+
+ _teardown_test ();
+}
+
+GST_END_TEST;
+
+
+GST_START_TEST (test_no_sos_marker)
+{
+ GstCaps *mjpg_caps = gst_static_pad_template_get_caps (&mjpg_template);
+ GstBuffer *buffer = gst_buffer_new_and_alloc (1024);
+ const guchar data[] = {
+ 0xff, 0xd8, 0xff, 0xe4, 0x00, 0x2C, 0x00, 0x01,
+ 0x16, 0x00, 0x48, 0x32, 0x36, 0x34, 0x80, 0x07,
+ 0x38, 0x04, 0x2a, 0x2c, 0x0a, 0x00, 0x1b, 0x00,
+ 0x40, 0x62, 0xcb, 0x0a, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xd9
+ };
+ const guchar h264_data[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ };
+
+ _setup_test (TRUE, TRUE, TRUE, TRUE);
+
+ memcpy (GST_BUFFER_DATA (buffer), data, sizeof (data));
+ GST_BUFFER_SIZE (buffer) = sizeof (data);
+ gst_buffer_set_caps (buffer, mjpg_caps);
+ fail_unless (gst_pad_push (mjpg_pad, buffer) == GST_FLOW_OK);
+ fail_unless (gst_pad_push_event (mjpg_pad, gst_event_new_eos ()));
+
+ fail_unless (have_h264_eos && have_yuy2_eos && have_nv12_eos && have_jpg_eos);
+ fail_unless (buffer_h264 != NULL && buffer_jpg == NULL);
+ fail_unless (buffer_nv12 == NULL && buffer_yuy2 == NULL);
+ fail_unless (gerror == NULL);
+ fail_unless (GST_BUFFER_SIZE (buffer_h264) == sizeof (h264_data));
+ fail_unless (memcmp (GST_BUFFER_DATA (buffer_h264), h264_data,
+ sizeof (h264_data)) == 0);
+
+ _teardown_test ();
+}
+
+GST_END_TEST;
+
+static Suite *
+uvch264demux_suite (void)
+{
+ Suite *s = suite_create ("uvch264demux");
+ TCase *tc_chain = tcase_create ("general");
+
+ suite_add_tcase (s, tc_chain);
+ tcase_set_timeout (tc_chain, 180);
+ tcase_add_test (tc_chain, test_valid_h264_jpg);
+ tcase_add_test (tc_chain, test_valid_h264_yuy2);
+ tcase_add_test (tc_chain, test_no_data);
+ tcase_add_test (tc_chain, test_data_zero);
+ tcase_add_test (tc_chain, test_no_marker_size);
+ tcase_add_test (tc_chain, test_not_enough_data);
+ tcase_add_test (tc_chain, test_no_aux_header);
+ tcase_add_test (tc_chain, test_empty_aux_data);
+ tcase_add_test (tc_chain, test_unknown_fcc);
+ tcase_add_test (tc_chain, test_no_sos_marker);
+ tcase_add_test (tc_chain, test_not_enough_aux_data);
+ tcase_add_test (tc_chain, test_too_much_aux_data);
+
+ return s;
+}
+
+GST_CHECK_MAIN (uvch264demux);
diff --git a/tests/check/elements/uvch264demux_data/valid_h264_jpg.h264 b/tests/check/elements/uvch264demux_data/valid_h264_jpg.h264
new file mode 100644
index 00000000..f57e002d
--- /dev/null
+++ b/tests/check/elements/uvch264demux_data/valid_h264_jpg.h264
Binary files differ
diff --git a/tests/check/elements/uvch264demux_data/valid_h264_jpg.jpg b/tests/check/elements/uvch264demux_data/valid_h264_jpg.jpg
new file mode 100644
index 00000000..e23067b9
--- /dev/null
+++ b/tests/check/elements/uvch264demux_data/valid_h264_jpg.jpg
Binary files differ
diff --git a/tests/check/elements/uvch264demux_data/valid_h264_jpg.mjpg b/tests/check/elements/uvch264demux_data/valid_h264_jpg.mjpg
new file mode 100644
index 00000000..f36b514a
--- /dev/null
+++ b/tests/check/elements/uvch264demux_data/valid_h264_jpg.mjpg
Binary files differ
diff --git a/tests/check/elements/uvch264demux_data/valid_h264_yuy2.h264 b/tests/check/elements/uvch264demux_data/valid_h264_yuy2.h264
new file mode 100644
index 00000000..ae68b8b6
--- /dev/null
+++ b/tests/check/elements/uvch264demux_data/valid_h264_yuy2.h264
Binary files differ
diff --git a/tests/check/elements/uvch264demux_data/valid_h264_yuy2.mjpg b/tests/check/elements/uvch264demux_data/valid_h264_yuy2.mjpg
new file mode 100644
index 00000000..c59e7088
--- /dev/null
+++ b/tests/check/elements/uvch264demux_data/valid_h264_yuy2.mjpg
Binary files differ
diff --git a/tests/check/elements/uvch264demux_data/valid_h264_yuy2.yuy2 b/tests/check/elements/uvch264demux_data/valid_h264_yuy2.yuy2
new file mode 100644
index 00000000..b6288913
--- /dev/null
+++ b/tests/check/elements/uvch264demux_data/valid_h264_yuy2.yuy2
@@ -0,0 +1 @@
+   !!!! !  ##"!"#"#!""""!"$##$#"$$#%$"#$"%#"##$"""%#%!"%""##"#" # "!!!!"!"!%~~~   ! !! !! !#!!!"!####""!#""$"$#!#"$#%$~##"" "!"!""! !!"!#!!! ""|!!         !!!" "!!""!#!!! "!~$"$"""!#$""##%#$!#$!" "~ #!#! ! !~!"! ! "   }  ! ! !! ! "!! ! !""%! """""#"$! ##$""""$""$""!"" ! ! ! !!!  "! ! ! ~  !   !   ! ! ~!! "###"!!" !""!"""!"&$!"!"# !! ! "  !!  !~!! ~  !!!!" ! "! !! ! !"! !"!!"!""#""$#""""$""$##%#"##%#"! ""#"" " " !    ~  ""##!##""$#"!"##""!##"!"#"!!!! !!""!""!$"#$#"#$$###"!$%$%&&%(~'+&$%""## !! "!"  ~ !! "~ "#"$%$&%%$%%(%%$%%'%%%%&%%&#%$$%%$~#&(%$%&$%&'~('(.~3?EU|cs ~  "!#$""%%%'&'&'(,+,1~589;ADRT~Yd~kv}}}~(%%%$"###"!$#!  " "! " !"!!  ~ "}%*{-1{=D|NQ{Xazfmzrwzx}z}}}|||}}~}~~~~~~~$#""!# !!!~!"!        ! !!hxxxyzzz{z|z}}}}}}~~}~}~~~~~~&$ !   ! "    !  \x}z{zzyz|{~}}}}|}~~~~~~~~#""! ! "! ! ~   Hv}x|z{y|||~{~~~~}}~~}~~$"#" "!!  "    7||zzzy}}{~|~}|~|~~}~}~~~~$#!~   | ~# ~%}{|zz{z~|||}}}}~}|~~~~~~~~~!!!   !$ }yzzz|{}}}~~}}}}~}~}~~~~#!!!  " wzy{|{{{{||}~||}}~~~~?|97v7:v{~|"" ! k~{zz{z|~|}~}}~~~}|}}j46w35v53t26x|! ~" W|{zz{|{|}~||~}~~~~~~}~~~~6}27wfizfhyT2~1lx~~!A|y~{{{||}}~~|}}}}~|}|~}}~}?4w9hyggvhh{jdw<4x{~} !~-{x~|}{||||~~|}|}~}|~}~~}40x_^yfjzghyhf|e:y/v~p #yy}z{}|{~}}}}~~~~~}~~~~21ybguhf|hdwhgshey/Twfw{{{z|{~|~~}~}}}}}~~~~40wccxhhzee|egxffz<5w~_ k}{}{{}}{}}|}}~~|~~~:1ydbygfxegyegwhhzX1zS _z{~zz{|{}|~}}~}~}~~~~.Mfsegzedyef|fhx^0z6}6yJ~~Ny{~y}z{{}}~}~}~~}82fwgcyae|ff{dgxP.sJfzC>uC~;|{}{z||}||}}~~}~~~}}|~}15va_zgcyaf{fe{.8x:cs9Su9~*}z}z{z}||}}~~}~~|}}}}~~~).f}_YvxdIy/dzjt~0~x}{~{}z|z}}}~~}}}~}~~~~~~~//z6JxQIs0-x-y(s|{}|}}}||~}}~}~}~|}~}}~~~C/z/,x0-y/{PeNz~"~lz}}|~|z||}|z}}~~|~|}~}}~~~].ezWcxfby~~~Wxz{{||p~A|28{h{}|}~0*}U~R1y3_z|~~~5{29y~~~~~w:R{M<|w~,cxgFw~>zz|}{z|P*)|(+|+0|z{}}}.-z,z;-y,N~~~2~11{y~~\M^{PFA{2+.}-/w:wA`]te[x->vr-)]z)u|{}}{}|)&(|Z~.+,|^|}}PA|W~|,*~+}{I,|-=|~5.}.1{D{0/2}B.|.7w1-z.0y/{y0,-{+)w+*z1,w.1x]`bygb{1t~/ s{x|{{~}(&'{z|Q**{6c*v)){*+|`*(z*j|b*|+3{}1+*{0,|0My.A,xm/-.z3.,x,,.z~-*+~(&x*(y~)(+yYbbwd\~u.J<~~pzu{{{~}*&'|kzk(&{+-&|'~{+*)*(z+X}{(y)-z**1z+*1y~,-+z},,+}.-,y},,,x-**x))w++z~,'+z};ZawTDyX\|f\}^azG~k{z|{|}}{.'%}S}{')~)|*(|(}{)*|(xz>&q'G}(+)y~+*0}**+z}++*|~7,-|,+,}~.+)y1))zJ~~7(y),ylBu~-dzfCy6`|~]wzy}~|||5'&}@}{**z(n3'x*d{V'o(6}~+)*y~X))|),y~/*,{}X+,{~.,/x/**x1,)w~/)y*-z*/w~6bz3uRA}G~}~Jyu{{|~z}~}N'%|1{|6'{(Z}B&{'Ryt'y(*~}((){p)'z/+~)+{/++{w~/4+yz2,*y~2)*y6,+x\('x8+,w}w2-u~}2|y{z~}z{g&'|*~.%{(c}N&}'F}d'{&>{)'(|)*(z}:)'z*(+z6**|o1Z,q4,)xs2*,y:+)yM((z:++v~~}#~xz{|{{|}{x%%}'}4&}(P}e%}&5}v({'2y~)))y.)*zx}B))|}*)+{|B*+}dj@9{lY2.~f3|+.x~N,Cyw9,yM2|-+v~~rz{||{}~z}%%}%t}:${)P~~&&+||&~(8z}*,({}5+*|a\))y8+~*){6.}+-}:mz1,yy~-+~/+z*8yB)'yo*'y)6z+-z}~mr}y{z{}{|L%{&%~%%|&p||7(({*'|(p~**){~D+*|L-*|,D|-,x.-~/1|Um~FU|V@E}v}~~}~~~gw|z{{|~}}~|Q&'|%*}f}{a}/-?w}}y~}~~~}~~~~}~~~~}~~~~Su|wxzz||~~|~||}}}|~~~~~}~6uzxz||{~~||}||}|}~}}~~~~~}K~u}~eXD|~~}#u{wx||~{{|z}{|^`_~^}v}\`sQk~\\|qzi~~M~Ldl~m[S}SlUY]z~r}v{y{}|}~}|{|{{d}U>~~}Uym~F}N~}imR~~a}zs_K{zbqz|O`eRWw~pnzxy|{|z~{{||~{t}NU{|t~\x_|~WYyj_~hPifu~}c~~~~cgyxx}z{{|}|}~{|Egx|fm}}|}}}}~~}~~~~~~~~~UXxuxxyz}z{}z{zz}|~{}~}}}}|~~}~~~~p}<>2*#~B|twzyzz}||}{}{|~{||}||~|~}~~}~~~~~~~~~~~u|1|rwzyz|{{{~~z}{{}|{}}}|}}~}~~~~~~~~}%ru{yy{x{||}|}~|}~}}|}}~~~|~~us~K~~oT\|~~~~y| pt}wy{y{{|{~~~|{~|}}}}~~vhz~^R~]F{Nk}ap}<6~@M}Wmmo]|myU[}~~~juzvw|z{y|{{}}~~}|||~~|}}=AzA8}{D~`U|gy{m_@@|JCoyMutel}~~v|dqzuxzxz{z|~|}{}|~~||||~|{~}~}~x~~~~~~~|}Os|uuzxw{xz{{}}}~{}~~{|}~~~~|}~~~~}}~~~z|5q|utyuv{wy|{{|{}|}z~||~|}}||~}~~~~~~~~~~{}"p{rtyuwzwvzzz{|}|}}{}{~{|}{|||~}}~~~}}~~}}~~l|mzqqytu|uw|yz{{{|}|z}~|}~{}||z{}~~~~}}}~}|~~}~~~~|zw~pk_4iupq|qs{uuyvx{xzy{{{|}{~||~}{|}||{~|}||||zy~}|~|{|~xr}ul|d^SMFB950,'$$\ymnzqqzqrzss}uu|uu|tuyrtyqm|jc}a\|PH<5.&&~'0.~)(&" ~ \ No newline at end of file
diff --git a/tests/check/libs/mpegvideoparser.c b/tests/check/libs/mpegvideoparser.c
index f598dd7e..f80d1f84 100644
--- a/tests/check/libs/mpegvideoparser.c
+++ b/tests/check/libs/mpegvideoparser.c
@@ -102,8 +102,8 @@ GST_START_TEST (test_mpeg_parse_sequence_header)
assert_equals_int (seqhdr.width, 1920);
assert_equals_int (seqhdr.height, 1080);
assert_equals_int (seqhdr.aspect_ratio_info, 3);
- assert_equals_int (seqhdr.par_w, 17280);
- assert_equals_int (seqhdr.par_h, 17280);
+ assert_equals_int (seqhdr.par_w, 64);
+ assert_equals_int (seqhdr.par_h, 45);
assert_equals_int (seqhdr.frame_rate_code, 7);
assert_equals_int (seqhdr.fps_n, 60000);
assert_equals_int (seqhdr.fps_d, 1001);
diff --git a/tests/check/pipelines/mxf.c b/tests/check/pipelines/mxf.c
index 230eb3ae..1be63b13 100644
--- a/tests/check/pipelines/mxf.c
+++ b/tests/check/pipelines/mxf.c
@@ -269,6 +269,11 @@ mxf_suite (void)
suite_add_tcase (s, tc_chain);
tcase_set_timeout (tc_chain, 180);
+ /* FIXME: remove again once ported */
+ if (!gst_registry_check_feature_version (gst_registry_get (), "mxfmux", 1,
+ 0, 0))
+ return s;
+
tcase_add_test (tc_chain, test_mpeg2);
tcase_add_test (tc_chain, test_raw_video_raw_audio);
tcase_add_test (tc_chain, test_raw_video_stride_transform);
diff --git a/tests/check/pipelines/streamheader.c b/tests/check/pipelines/streamheader.c
new file mode 100644
index 00000000..02e72ed7
--- /dev/null
+++ b/tests/check/pipelines/streamheader.c
@@ -0,0 +1,279 @@
+/* GStreamer
+ *
+ * unit test for streamheader handling
+ *
+ * Copyright (C) 2007 Thomas Vander Stichele <thomas at apestaart dot 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <glib.h>
+
+#ifdef G_OS_WIN32
+#include <stdlib.h>
+#include <stdio.h>
+#include <io.h>
+#include <fcntl.h>
+#define pipe(fds) _pipe(fds,4096,O_BINARY)
+#else
+#include <unistd.h>
+#endif
+
+#include <gio/gio.h>
+#include <gst/check/gstcheck.h>
+#include <gst/check/gstbufferstraw.h>
+
+#ifndef GST_DISABLE_PARSE
+
+/* this tests a gdp-serialized tag from audiotestsrc being sent only once
+ * to clients of multifdsink */
+
+static int n_tags = 0;
+
+static GstPadProbeReturn
+tag_event_probe_cb (GstPad * pad, GstPadProbeInfo * info, gpointer user_data)
+{
+ GMainLoop *loop = user_data;
+ GstEvent *event = GST_PAD_PROBE_INFO_EVENT (info);
+
+ switch (GST_EVENT_TYPE (event)) {
+ case GST_EVENT_TAG:
+ {
+ ++n_tags;
+ fail_if (n_tags > 1, "More than 1 tag received");
+ break;
+ }
+ case GST_EVENT_EOS:
+ {
+ g_main_loop_quit (loop);
+ break;
+ }
+ default:
+ break;
+ }
+
+ return GST_PAD_PROBE_OK;
+}
+
+GST_START_TEST (test_multifdsink_gdp_tag)
+{
+ GstElement *p1, *p2;
+ GstElement *src, *sink, *depay;
+ GstPad *pad;
+ GMainLoop *loop;
+ int pfd[2];
+
+ loop = g_main_loop_new (NULL, FALSE);
+
+ p1 = gst_parse_launch ("audiotestsrc num-buffers=10 ! gdppay"
+ " ! multifdsink name=p1sink", NULL);
+ fail_if (p1 == NULL);
+ p2 = gst_parse_launch ("fdsrc name=p2src ! gdpdepay name=depay"
+ " ! fakesink name=p2sink signal-handoffs=True", NULL);
+ fail_if (p2 == NULL);
+
+ fail_if (pipe (pfd) == -1);
+
+ gst_element_set_state (p1, GST_STATE_READY);
+
+ sink = gst_bin_get_by_name (GST_BIN (p1), "p1sink");
+ g_signal_emit_by_name (sink, "add", pfd[1], NULL); ///s[1]
+ gst_object_unref (sink);
+
+ src = gst_bin_get_by_name (GST_BIN (p2), "p2src");
+ g_object_set (G_OBJECT (src), "fd", pfd[0], NULL);
+ gst_object_unref (src);
+
+ depay = gst_bin_get_by_name (GST_BIN (p2), "depay");
+ fail_if (depay == NULL);
+
+ pad = gst_element_get_static_pad (depay, "src");
+ fail_unless (pad != NULL, "Could not get pad out of depay");
+ gst_object_unref (depay);
+
+ gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM,
+ tag_event_probe_cb, loop, NULL);
+
+ gst_element_set_state (p1, GST_STATE_PLAYING);
+ gst_element_set_state (p2, GST_STATE_PLAYING);
+
+ g_main_loop_run (loop);
+
+ assert_equals_int (n_tags, 1);
+
+ gst_element_set_state (p1, GST_STATE_NULL);
+ gst_object_unref (p1);
+ gst_element_set_state (p2, GST_STATE_NULL);
+ gst_object_unref (p2);
+}
+
+GST_END_TEST;
+
+#ifdef HAVE_VORBIS
+/* this tests gdp-serialized Vorbis header pages being sent only once
+ * to clients of multifdsink; the gdp depayloader should deserialize
+ * exactly three in_caps buffers for the three header packets */
+
+static int n_in_caps = 0;
+
+static GstPadProbeReturn
+buffer_probe_cb (GstPad * pad, GstPadProbeInfo * info, gpointer user_data)
+{
+ GstBuffer *buffer = GST_PAD_PROBE_INFO_BUFFER (info);
+ GstMapInfo map;
+
+ gst_buffer_map (buffer, &map, GST_MAP_READ);
+
+ if (GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_HEADER)) {
+ GstCaps *caps;
+ GstStructure *s;
+ const GValue *sh;
+ GArray *buffers;
+ GstBuffer *buf;
+ int i;
+ gboolean found = FALSE;
+
+ n_in_caps++;
+
+ caps = gst_pad_get_current_caps (pad);
+ s = gst_caps_get_structure (caps, 0);
+ fail_unless (gst_structure_has_field (s, "streamheader"));
+ sh = gst_structure_get_value (s, "streamheader");
+ buffers = g_value_peek_pointer (sh);
+ assert_equals_int (buffers->len, 3);
+
+ for (i = 0; i < 3; ++i) {
+ GValue *val;
+ GstMapInfo map2;
+
+ val = &g_array_index (buffers, GValue, i);
+ buf = g_value_peek_pointer (val);
+ fail_unless (GST_IS_BUFFER (buf));
+
+ gst_buffer_map (buf, &map2, GST_MAP_READ);
+ if (map2.size == map.size) {
+ if (memcmp (map2.data, map.data, map.size) == 0) {
+ found = TRUE;
+ }
+ }
+ gst_buffer_unmap (buf, &map2);
+ }
+ fail_unless (found, "Did not find incoming HEADER buffer %p on caps",
+ buffer);
+
+ gst_caps_unref (caps);
+ }
+ gst_buffer_unmap (buffer, &map);
+
+ return TRUE;
+}
+
+GST_START_TEST (test_multifdsink_gdp_vorbisenc)
+{
+ GstElement *p1, *p2;
+ GstElement *src, *sink, *depay;
+ GstPad *pad;
+ GMainLoop *loop;
+ int pfd[2];
+
+ loop = g_main_loop_new (NULL, FALSE);
+
+ p1 = gst_parse_launch ("audiotestsrc num-buffers=10 ! audioconvert "
+ " ! vorbisenc ! gdppay ! multifdsink name=p1sink", NULL);
+ fail_if (p1 == NULL);
+ p2 = gst_parse_launch ("fdsrc name=p2src ! gdpdepay name=depay"
+ " ! fakesink name=p2sink signal-handoffs=True", NULL);
+ fail_if (p2 == NULL);
+
+ fail_if (pipe (pfd) == -1);
+
+ gst_element_set_state (p1, GST_STATE_READY);
+
+ sink = gst_bin_get_by_name (GST_BIN (p1), "p1sink");
+ g_signal_emit_by_name (sink, "add", pfd[1], NULL);
+ gst_object_unref (sink);
+
+ src = gst_bin_get_by_name (GST_BIN (p2), "p2src");
+ g_object_set (G_OBJECT (src), "fd", pfd[0], NULL);
+ gst_object_unref (src);
+
+ depay = gst_bin_get_by_name (GST_BIN (p2), "depay");
+ fail_if (depay == NULL);
+
+ pad = gst_element_get_static_pad (depay, "src");
+ fail_unless (pad != NULL, "Could not get pad out of depay");
+ gst_object_unref (depay);
+
+ gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM,
+ tag_event_probe_cb, loop, NULL);
+ gst_pad_add_probe (pad, GST_PAD_PROBE_TYPE_BUFFER, buffer_probe_cb, NULL,
+ NULL);
+
+ gst_element_set_state (p1, GST_STATE_PLAYING);
+ gst_element_set_state (p2, GST_STATE_PLAYING);
+
+ g_main_loop_run (loop);
+
+ assert_equals_int (n_in_caps, 3);
+
+ gst_element_set_state (p1, GST_STATE_NULL);
+ gst_object_unref (p1);
+ gst_element_set_state (p2, GST_STATE_NULL);
+ gst_object_unref (p2);
+}
+
+GST_END_TEST;
+#endif /* HAVE_VORBIS */
+
+#endif /* #ifndef GST_DISABLE_PARSE */
+
+static Suite *
+streamheader_suite (void)
+{
+ Suite *s = suite_create ("streamheader");
+ TCase *tc_chain = tcase_create ("general");
+
+ suite_add_tcase (s, tc_chain);
+#ifndef GST_DISABLE_PARSE
+ tcase_add_test (tc_chain, test_multifdsink_gdp_tag);
+#ifdef HAVE_VORBIS
+ tcase_add_test (tc_chain, test_multifdsink_gdp_vorbisenc);
+#endif
+#endif
+
+ return s;
+}
+
+int
+main (int argc, char **argv)
+{
+ int nf;
+
+ Suite *s = streamheader_suite ();
+ SRunner *sr = srunner_create (s);
+
+ gst_check_init (&argc, &argv);
+
+ srunner_run_all (sr, CK_NORMAL);
+ nf = srunner_ntests_failed (sr);
+ srunner_free (sr);
+
+ return nf;
+}
diff --git a/tests/examples/Makefile.am b/tests/examples/Makefile.am
index eef73e6c..d166a660 100644
--- a/tests/examples/Makefile.am
+++ b/tests/examples/Makefile.am
@@ -1,5 +1,11 @@
+if USE_UVCH264
+UVCH264_DIR=uvch264
+else
+UVCH264_DIR=
+endif
+
if HAVE_GTK
-GTK_EXAMPLES=mxf scaletempo camerabin2
+GTK_EXAMPLES=mxf scaletempo camerabin2 $(UVCH264_DIR)
else
GTK_EXAMPLES=
endif
@@ -13,6 +19,6 @@ endif
OPENCV_EXAMPLES=opencv
SUBDIRS= $(DIRECTFB_DIR) $(GTK_EXAMPLES) $(OPENCV_EXAMPLES)
-DIST_SUBDIRS= camerabin2 directfb mxf scaletempo opencv
+DIST_SUBDIRS= camerabin2 directfb mxf scaletempo opencv uvch264
include $(top_srcdir)/common/parallel-subdirs.mak
diff --git a/tests/examples/Makefile.in b/tests/examples/Makefile.in
index f75fb23b..89166b90 100644
--- a/tests/examples/Makefile.in
+++ b/tests/examples/Makefile.in
@@ -319,6 +319,8 @@ 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@
@@ -326,6 +328,8 @@ 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@
@@ -340,7 +344,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -368,6 +371,10 @@ 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@
@@ -494,6 +501,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
@@ -580,13 +588,15 @@ target_vendor = @target_vendor@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
+@USE_UVCH264_FALSE@UVCH264_DIR =
+@USE_UVCH264_TRUE@UVCH264_DIR = uvch264
@HAVE_GTK_FALSE@GTK_EXAMPLES =
-@HAVE_GTK_TRUE@GTK_EXAMPLES = mxf scaletempo camerabin2
+@HAVE_GTK_TRUE@GTK_EXAMPLES = mxf scaletempo camerabin2 $(UVCH264_DIR)
@USE_DIRECTFB_FALSE@DIRECTFB_DIR =
@USE_DIRECTFB_TRUE@DIRECTFB_DIR = directfb
OPENCV_EXAMPLES = opencv
SUBDIRS = $(DIRECTFB_DIR) $(GTK_EXAMPLES) $(OPENCV_EXAMPLES)
-DIST_SUBDIRS = camerabin2 directfb mxf scaletempo opencv
+DIST_SUBDIRS = camerabin2 directfb mxf scaletempo opencv uvch264
all: all-recursive
.SUFFIXES:
diff --git a/tests/examples/camerabin2/Makefile.in b/tests/examples/camerabin2/Makefile.in
index fed26c78..651453d7 100644
--- a/tests/examples/camerabin2/Makefile.in
+++ b/tests/examples/camerabin2/Makefile.in
@@ -328,6 +328,8 @@ 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@
@@ -335,6 +337,8 @@ 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@
@@ -349,7 +353,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -377,6 +380,10 @@ 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@
@@ -503,6 +510,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/tests/examples/camerabin2/gst-camerabin2-test.c b/tests/examples/camerabin2/gst-camerabin2-test.c
index e5ad385a..00b9fa25 100644
--- a/tests/examples/camerabin2/gst-camerabin2-test.c
+++ b/tests/examples/camerabin2/gst-camerabin2-test.c
@@ -853,17 +853,15 @@ static void
set_metadata (GstElement * camera)
{
GstTagSetter *setter = GST_TAG_SETTER (camera);
- GTimeVal time = { 0, 0 };
+ GstDateTime *datetime;
gchar *desc_str;
- GDate *date = g_date_new ();
- g_get_current_time (&time);
- g_date_set_time_val (date, &time);
+ datetime = gst_date_time_new_now_local_time ();
desc_str = g_strdup_printf ("captured by %s", g_get_real_name ());
gst_tag_setter_add_tags (setter, GST_TAG_MERGE_REPLACE,
- GST_TAG_DATE, date,
+ GST_TAG_DATE_TIME, datetime,
GST_TAG_DESCRIPTION, desc_str,
GST_TAG_TITLE, "gst-camerabin-test capture",
GST_TAG_GEO_LOCATION_LONGITUDE, 1.0,
@@ -873,7 +871,7 @@ set_metadata (GstElement * camera)
GST_TAG_DEVICE_MODEL, "gst-camerabin-test model", NULL);
g_free (desc_str);
- g_date_free (date);
+ gst_date_time_unref (datetime);
}
static gboolean
diff --git a/tests/examples/directfb/Makefile.in b/tests/examples/directfb/Makefile.in
index 62dad588..24f26673 100644
--- a/tests/examples/directfb/Makefile.in
+++ b/tests/examples/directfb/Makefile.in
@@ -308,6 +308,8 @@ 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@
@@ -315,6 +317,8 @@ 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@
@@ -329,7 +333,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -357,6 +360,10 @@ 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@
@@ -483,6 +490,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/tests/examples/mxf/Makefile.in b/tests/examples/mxf/Makefile.in
index cc439ff0..3b0ed266 100644
--- a/tests/examples/mxf/Makefile.in
+++ b/tests/examples/mxf/Makefile.in
@@ -313,6 +313,8 @@ 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@
@@ -320,6 +322,8 @@ 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@
@@ -334,7 +338,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -362,6 +365,10 @@ 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@
@@ -488,6 +495,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/tests/examples/opencv/Makefile.in b/tests/examples/opencv/Makefile.in
index 3741f17c..a9a5c8f0 100644
--- a/tests/examples/opencv/Makefile.in
+++ b/tests/examples/opencv/Makefile.in
@@ -314,6 +314,8 @@ 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@
@@ -321,6 +323,8 @@ 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@
@@ -335,7 +339,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -363,6 +366,10 @@ 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@
@@ -489,6 +496,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/tests/examples/scaletempo/Makefile.in b/tests/examples/scaletempo/Makefile.in
index 346adf74..d9edc9e0 100644
--- a/tests/examples/scaletempo/Makefile.in
+++ b/tests/examples/scaletempo/Makefile.in
@@ -316,6 +316,8 @@ 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@
@@ -323,6 +325,8 @@ 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@
@@ -337,7 +341,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -365,6 +368,10 @@ 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@
@@ -491,6 +498,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/tests/examples/uvch264/Makefile.am b/tests/examples/uvch264/Makefile.am
new file mode 100644
index 00000000..e02b8882
--- /dev/null
+++ b/tests/examples/uvch264/Makefile.am
@@ -0,0 +1,36 @@
+TEST_UVCH264_GLADE_FILES = window.glade \
+ boolean_property.glade \
+ enum_property.glade \
+ int_property.glade
+
+if HAVE_GTK
+
+TEST_UVCH264_EXAMPLES = test-uvch264
+
+test_uvch264_SOURCES = test-uvch264.c
+test_uvch264_CFLAGS = \
+ $(GST_PLUGINS_BAD_CFLAGS) \
+ $(GST_PLUGINS_BASE_CFLAGS) \
+ $(GST_VIDEO_CFLAGS) \
+ $(GST_CFLAGS) \
+ $(GTK_CFLAGS) \
+ $(GMODULE_EXPORT_CFLAGS) \
+ -DGST_USE_UNSTABLE_API
+test_uvch264_LDADD = \
+ $(GST_PLUGINS_BASE_LIBS) \
+ $(GST_VIDEO_LIBS) \
+ $(GST_LIBS) \
+ -lgstinterfaces-@GST_MAJORMINOR@ \
+ $(GTK_LIBS) \
+ $(GMODULE_EXPORT_LIBS)
+
+noinst_DATA = $(TEST_UVCH264_GLADE_FILES)
+
+else
+TEST_UVCH264_EXAMPLES =
+endif
+
+noinst_PROGRAMS = $(TEST_UVCH264_EXAMPLES)
+
+EXTRA_DIST = $(TEST_UVCH264_GLADE_FILES)
+
diff --git a/tests/examples/uvch264/Makefile.in b/tests/examples/uvch264/Makefile.in
new file mode 100644
index 00000000..a8215f9a
--- /dev/null
+++ b/tests/examples/uvch264/Makefile.in
@@ -0,0 +1,916 @@
+# 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@
+noinst_PROGRAMS = $(am__EXEEXT_1)
+subdir = tests/examples/uvch264
+DIST_COMMON = $(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 =
+@HAVE_GTK_TRUE@am__EXEEXT_1 = test-uvch264$(EXEEXT)
+PROGRAMS = $(noinst_PROGRAMS)
+am__test_uvch264_SOURCES_DIST = test-uvch264.c
+@HAVE_GTK_TRUE@am_test_uvch264_OBJECTS = \
+@HAVE_GTK_TRUE@ test_uvch264-test-uvch264.$(OBJEXT)
+test_uvch264_OBJECTS = $(am_test_uvch264_OBJECTS)
+am__DEPENDENCIES_1 =
+@HAVE_GTK_TRUE@test_uvch264_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+@HAVE_GTK_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+@HAVE_GTK_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+test_uvch264_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_uvch264_CFLAGS) \
+ $(CFLAGS) $(AM_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 = $(test_uvch264_SOURCES)
+DIST_SOURCES = $(am__test_uvch264_SOURCES_DIST)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+DATA = $(noinst_DATA)
+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@
+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@
+VPX_CFLAGS = @VPX_CFLAGS@
+VPX_LIBS = @VPX_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@
+TEST_UVCH264_GLADE_FILES = window.glade \
+ boolean_property.glade \
+ enum_property.glade \
+ int_property.glade
+
+@HAVE_GTK_FALSE@TEST_UVCH264_EXAMPLES =
+@HAVE_GTK_TRUE@TEST_UVCH264_EXAMPLES = test-uvch264
+@HAVE_GTK_TRUE@test_uvch264_SOURCES = test-uvch264.c
+@HAVE_GTK_TRUE@test_uvch264_CFLAGS = \
+@HAVE_GTK_TRUE@ $(GST_PLUGINS_BAD_CFLAGS) \
+@HAVE_GTK_TRUE@ $(GST_PLUGINS_BASE_CFLAGS) \
+@HAVE_GTK_TRUE@ $(GST_VIDEO_CFLAGS) \
+@HAVE_GTK_TRUE@ $(GST_CFLAGS) \
+@HAVE_GTK_TRUE@ $(GTK_CFLAGS) \
+@HAVE_GTK_TRUE@ $(GMODULE_EXPORT_CFLAGS) \
+@HAVE_GTK_TRUE@ -DGST_USE_UNSTABLE_API
+
+@HAVE_GTK_TRUE@test_uvch264_LDADD = \
+@HAVE_GTK_TRUE@ $(GST_PLUGINS_BASE_LIBS) \
+@HAVE_GTK_TRUE@ $(GST_VIDEO_LIBS) \
+@HAVE_GTK_TRUE@ $(GST_LIBS) \
+@HAVE_GTK_TRUE@ -lgstinterfaces-@GST_MAJORMINOR@ \
+@HAVE_GTK_TRUE@ $(GTK_LIBS) \
+@HAVE_GTK_TRUE@ $(GMODULE_EXPORT_LIBS)
+
+@HAVE_GTK_TRUE@noinst_DATA = $(TEST_UVCH264_GLADE_FILES)
+EXTRA_DIST = $(TEST_UVCH264_GLADE_FILES)
+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 tests/examples/uvch264/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu tests/examples/uvch264/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):
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+test-uvch264$(EXEEXT): $(test_uvch264_OBJECTS) $(test_uvch264_DEPENDENCIES) $(EXTRA_test_uvch264_DEPENDENCIES)
+ @rm -f test-uvch264$(EXEEXT)
+ $(AM_V_CCLD)$(test_uvch264_LINK) $(test_uvch264_OBJECTS) $(test_uvch264_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_uvch264-test-uvch264.Po@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 $@ $<
+
+test_uvch264-test-uvch264.o: test-uvch264.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_uvch264_CFLAGS) $(CFLAGS) -MT test_uvch264-test-uvch264.o -MD -MP -MF $(DEPDIR)/test_uvch264-test-uvch264.Tpo -c -o test_uvch264-test-uvch264.o `test -f 'test-uvch264.c' || echo '$(srcdir)/'`test-uvch264.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_uvch264-test-uvch264.Tpo $(DEPDIR)/test_uvch264-test-uvch264.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-uvch264.c' object='test_uvch264-test-uvch264.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) $(test_uvch264_CFLAGS) $(CFLAGS) -c -o test_uvch264-test-uvch264.o `test -f 'test-uvch264.c' || echo '$(srcdir)/'`test-uvch264.c
+
+test_uvch264-test-uvch264.obj: test-uvch264.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_uvch264_CFLAGS) $(CFLAGS) -MT test_uvch264-test-uvch264.obj -MD -MP -MF $(DEPDIR)/test_uvch264-test-uvch264.Tpo -c -o test_uvch264-test-uvch264.obj `if test -f 'test-uvch264.c'; then $(CYGPATH_W) 'test-uvch264.c'; else $(CYGPATH_W) '$(srcdir)/test-uvch264.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_uvch264-test-uvch264.Tpo $(DEPDIR)/test_uvch264-test-uvch264.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-uvch264.c' object='test_uvch264-test-uvch264.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) $(test_uvch264_CFLAGS) $(CFLAGS) -c -o test_uvch264-test-uvch264.obj `if test -f 'test-uvch264.c'; then $(CYGPATH_W) 'test-uvch264.c'; else $(CYGPATH_W) '$(srcdir)/test-uvch264.c'; fi`
+
+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 $(PROGRAMS) $(DATA)
+installdirs:
+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-noinstPROGRAMS \
+ 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-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:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstPROGRAMS 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-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
+
+
+# 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/tests/examples/uvch264/boolean_property.glade b/tests/examples/uvch264/boolean_property.glade
new file mode 100644
index 00000000..d391a58c
--- /dev/null
+++ b/tests/examples/uvch264/boolean_property.glade
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.0 -->
+ <object class="GtkHBox" id="boolean-property">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkLabel" id="label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="width_chars">18</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkToggleButton" id="value">
+ <property name="label" translatable="yes"> Disabled </property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <signal name="toggled" handler="on_button_toggled" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="get">
+ <property name="label" translatable="yes">Get</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <signal name="clicked" handler="on_get_button_clicked" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="set">
+ <property name="label" translatable="yes">Set</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <signal name="clicked" handler="on_set_button_clicked" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label66">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Default</property>
+ <property name="width_chars">8</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkToggleButton" id="default">
+ <property name="label" translatable="yes"> Disabled </property>
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <signal name="toggled" handler="on_button_toggled" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">5</property>
+ </packing>
+ </child>
+ </object>
+</interface>
diff --git a/tests/examples/uvch264/enum_property.glade b/tests/examples/uvch264/enum_property.glade
new file mode 100644
index 00000000..0dfb9747
--- /dev/null
+++ b/tests/examples/uvch264/enum_property.glade
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.0 -->
+ <object class="GtkHBox" id="enum-property">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkLabel" id="label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="width_chars">18</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBoxText" id="value">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="get">
+ <property name="label" translatable="yes">Get</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <signal name="clicked" handler="on_get_button_clicked" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="set">
+ <property name="label" translatable="yes">Set</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <signal name="clicked" handler="on_set_button_clicked" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label72">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Default</property>
+ <property name="width_chars">8</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="default">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">●</property>
+ <property name="invisible_char_set">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">5</property>
+ </packing>
+ </child>
+ </object>
+</interface>
diff --git a/tests/examples/uvch264/int_property.glade b/tests/examples/uvch264/int_property.glade
new file mode 100644
index 00000000..422ce1cd
--- /dev/null
+++ b/tests/examples/uvch264/int_property.glade
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.0 -->
+ <object class="GtkHBox" id="int-property">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkLabel" id="label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="width_chars">18</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="value">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">●</property>
+ <property name="width_chars">10</property>
+ <property name="invisible_char_set">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="get">
+ <property name="label" translatable="yes">Get</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <signal name="clicked" handler="on_get_button_clicked" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="set">
+ <property name="label" translatable="yes">Set</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <signal name="clicked" handler="on_set_button_clicked" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Minimum</property>
+ <property name="width_chars">8</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="minimum">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">●</property>
+ <property name="width_chars">10</property>
+ <property name="invisible_char_set">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">5</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Default</property>
+ <property name="width_chars">8</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">6</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="default">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">●</property>
+ <property name="width_chars">10</property>
+ <property name="invisible_char_set">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">7</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Maximum</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">8</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="maximum">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">●</property>
+ <property name="width_chars">10</property>
+ <property name="invisible_char_set">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">9</property>
+ </packing>
+ </child>
+ </object>
+</interface>
diff --git a/tests/examples/uvch264/test-uvch264.c b/tests/examples/uvch264/test-uvch264.c
new file mode 100644
index 00000000..78d8ac11
--- /dev/null
+++ b/tests/examples/uvch264/test-uvch264.c
@@ -0,0 +1,673 @@
+#include <gst/gst.h>
+#include <gtk/gtk.h>
+#include <gdk/gdkx.h>
+#include <gst/interfaces/xoverlay.h>
+#include <gst/video/video.h>
+
+#define WINDOW_GLADE "window.glade"
+#define INT_PROPERTY_GLADE "int_property.glade"
+#define ENUM_PROPERTY_GLADE "enum_property.glade"
+#define BOOL_PROPERTY_GLADE "boolean_property.glade"
+
+#define PROPERTY_TO_VBOX \
+ properties[i].dynamic ? GTK_BOX (dynamic_vbox) : GTK_BOX (static_vbox)
+
+#define GET_WIDGET(object, type, name) \
+ type (gtk_builder_get_object ((object)->builder, name))
+
+#define GET_PROP_WIDGET(type, name) GET_WIDGET (&(properties[i]), type, name)
+
+static guint h264_xid, preview_xid;
+
+typedef struct
+{
+ GtkBuilder *builder;
+ GstElement *src;
+ enum
+ { NONE, INT, ENUM, BOOL } type;
+ const gchar *property_name;
+ gboolean readonly;
+ gboolean dynamic;
+} Prop;
+
+typedef struct
+{
+ GtkBuilder *builder;
+ GstElement *bin;
+ GstElement *src;
+ GstElement *identity;
+ GstElement *vid_capsfilter;
+ GstElement *vf_capsfilter;
+} Main;
+
+Prop properties[] = {
+ {NULL, NULL, INT, "initial-bitrate", FALSE, FALSE},
+ {NULL, NULL, INT, "slice-units", FALSE, FALSE},
+ {NULL, NULL, ENUM, "slice-mode", FALSE, FALSE},
+ {NULL, NULL, INT, "iframe-period", FALSE, FALSE},
+ {NULL, NULL, ENUM, "usage-type", FALSE, FALSE},
+ {NULL, NULL, ENUM, "entropy", FALSE, FALSE},
+ {NULL, NULL, BOOL, "enable-sei", FALSE, FALSE},
+ {NULL, NULL, INT, "num-reorder-frames", FALSE, FALSE},
+ {NULL, NULL, BOOL, "preview-flipped", FALSE, FALSE},
+ {NULL, NULL, INT, "leaky-bucket-size", FALSE, FALSE},
+ {NULL, NULL, INT, "num-clock-samples", FALSE, TRUE},
+ {NULL, NULL, ENUM, "rate-control", FALSE, TRUE},
+ {NULL, NULL, BOOL, "fixed-framerate", FALSE, TRUE},
+ {NULL, NULL, INT, "max-mbps", TRUE, TRUE},
+ {NULL, NULL, INT, "level-idc", FALSE, TRUE},
+ {NULL, NULL, INT, "peak-bitrate", FALSE, TRUE},
+ {NULL, NULL, INT, "average-bitrate", FALSE, TRUE},
+ {NULL, NULL, INT, "min-iframe-qp", FALSE, TRUE},
+ {NULL, NULL, INT, "max-iframe-qp", FALSE, TRUE},
+ {NULL, NULL, INT, "min-pframe-qp", FALSE, TRUE},
+ {NULL, NULL, INT, "max-pframe-qp", FALSE, TRUE},
+ {NULL, NULL, INT, "min-bframe-qp", FALSE, TRUE},
+ {NULL, NULL, INT, "max-bframe-qp", FALSE, TRUE},
+ {NULL, NULL, INT, "ltr-buffer-size", FALSE, TRUE},
+ {NULL, NULL, INT, "ltr-encoder-control", FALSE, TRUE},
+};
+
+static void set_drop_probability (Main * self);
+static void get_all_properties (void);
+static void probe_all_properties (gboolean playing);
+
+/* Callbacks */
+void on_button_toggled (GtkToggleButton * button, gpointer user_data);
+void on_get_button_clicked (GtkButton * button, gpointer user_data);
+void on_set_button_clicked (GtkButton * button, gpointer user_data);
+void on_button_ready_clicked (GtkButton * button, gpointer user_data);
+void on_button_null_clicked (GtkButton * button, gpointer user_data);
+void on_button_playing_clicked (GtkButton * button, gpointer user_data);
+void on_iframe_button_clicked (GtkButton * button, gpointer user_data);
+void on_renegotiate_button_clicked (GtkButton * button, gpointer user_data);
+void on_start_capture_button_clicked (GtkButton * button, gpointer user_data);
+void on_stop_capture_button_clicked (GtkButton * button, gpointer user_data);
+void on_window_destroyed (GtkWindow * window, gpointer user_data);
+
+static GstEvent *
+new_upstream_force_key_unit (GstClockTime running_time,
+ gboolean all_headers, guint count)
+{
+ GstEvent *force_key_unit_event;
+ GstStructure *s;
+
+ s = gst_structure_new ("GstForceKeyUnit",
+ "running-time", GST_TYPE_CLOCK_TIME, running_time,
+ "all-headers", G_TYPE_BOOLEAN, all_headers,
+ "count", G_TYPE_UINT, count, NULL);
+ force_key_unit_event = gst_event_new_custom (GST_EVENT_CUSTOM_UPSTREAM, s);
+
+ return force_key_unit_event;
+}
+
+void
+on_get_button_clicked (GtkButton * button, gpointer user_data)
+{
+ Prop *property = user_data;
+
+ switch (property->type) {
+ case INT:
+ {
+ gchar *val;
+ gint val_int;
+ g_object_get (property->src, property->property_name, &val_int, NULL);
+ val = g_strdup_printf ("%d", val_int);
+ gtk_entry_set_text (GET_WIDGET (property, GTK_ENTRY, "value"), val);
+ g_free (val);
+ }
+ break;
+ case ENUM:
+ {
+ GParamSpec *param;
+ gint val;
+
+ g_object_get (property->src, property->property_name, &val, NULL);
+ param = g_object_class_find_property (G_OBJECT_GET_CLASS (property->src),
+ property->property_name);
+ if (G_IS_PARAM_SPEC_ENUM (param)) {
+ GEnumValue *values;
+ guint i = 0;
+
+ values = G_ENUM_CLASS (g_type_class_ref (param->value_type))->values;
+
+ while (values[i].value_name) {
+ if (values[i].value == val) {
+ gtk_combo_box_set_active (GET_WIDGET (property,
+ (GtkComboBox *), "value"), i);
+ break;
+ }
+ i++;
+ }
+ }
+ }
+ break;
+ case BOOL:
+ {
+ gboolean val;
+
+ g_object_get (property->src, property->property_name, &val, NULL);
+ gtk_toggle_button_set_active (GET_WIDGET (property,
+ (GtkToggleButton *), "value"), val);
+ }
+ break;
+ case NONE:
+ default:
+ break;
+ }
+}
+
+void
+on_set_button_clicked (GtkButton * button, gpointer user_data)
+{
+ Prop *property = user_data;
+
+ switch (property->type) {
+ case INT:
+ {
+ int val_int;
+ const gchar *val;
+
+ val = gtk_entry_get_text (GET_WIDGET (property, GTK_ENTRY, "value"));
+ val_int = (int) g_ascii_strtoll (val, NULL, 0);
+ g_object_set (property->src, property->property_name, val_int, NULL);
+ }
+ break;
+ case ENUM:
+ {
+ GParamSpec *param;
+
+ param = g_object_class_find_property (G_OBJECT_GET_CLASS (property->src),
+ property->property_name);
+ if (G_IS_PARAM_SPEC_ENUM (param)) {
+ GEnumValue *values;
+ guint val = 0;
+
+ values = G_ENUM_CLASS (g_type_class_ref (param->value_type))->values;
+
+ val = gtk_combo_box_get_active (GET_WIDGET (property,
+ (GtkComboBox *), "value"));
+ g_object_set (property->src, property->property_name,
+ values[val].value, NULL);
+ }
+ }
+ break;
+ case BOOL:
+ {
+ gboolean val;
+
+ val = gtk_toggle_button_get_active (GET_WIDGET (property,
+ (GtkToggleButton *), "value"));
+ g_object_set (property->src, property->property_name, val, NULL);
+ }
+ break;
+ case NONE:
+ default:
+ break;
+ }
+ get_all_properties ();
+}
+
+void
+on_button_toggled (GtkToggleButton * button, gpointer user_data)
+{
+ if (gtk_toggle_button_get_active (button))
+ gtk_button_set_label (GTK_BUTTON (button), " Enabled ");
+ else
+ gtk_button_set_label (GTK_BUTTON (button), " Disabled ");
+}
+
+static gboolean
+set_caps (Main * self, gboolean send_event)
+{
+ const gchar *h264_filter;
+ const gchar *raw_filter;
+ GstCaps *h264_caps = NULL;
+ GstCaps *raw_caps = NULL;
+ gboolean ret = TRUE;
+
+ h264_filter = gtk_entry_get_text (GET_WIDGET (self, GTK_ENTRY, "h264_caps"));
+ raw_filter =
+ gtk_entry_get_text (GET_WIDGET (self, GTK_ENTRY, "preview_caps"));
+ if (h264_filter)
+ h264_caps = gst_caps_from_string (h264_filter);
+ if (raw_filter)
+ raw_caps = gst_caps_from_string (raw_filter);
+
+ g_debug ("H264 caps : %s", gst_caps_to_string (h264_caps));
+ g_debug ("Preview caps : %s", gst_caps_to_string (raw_caps));
+ if (!h264_caps || !raw_caps) {
+ g_debug ("Invalid caps");
+ ret = FALSE;
+ goto end;
+ }
+
+ g_object_set (self->vid_capsfilter, "caps", h264_caps, NULL);
+ g_object_set (self->vf_capsfilter, "caps", raw_caps, NULL);
+
+ if (send_event) {
+ gst_element_send_event (GST_ELEMENT (self->src),
+ gst_event_new_custom (GST_EVENT_CUSTOM_UPSTREAM,
+ gst_structure_new ("renegotiate", NULL)));
+ }
+
+end:
+ if (h264_caps)
+ gst_caps_unref (h264_caps);
+ if (raw_caps)
+ gst_caps_unref (raw_caps);
+
+ return ret;
+}
+
+void
+on_button_ready_clicked (GtkButton * button, gpointer user_data)
+{
+ Main *self = user_data;
+
+ set_caps (self, FALSE);
+ gst_element_set_state (self->bin, GST_STATE_READY);
+ probe_all_properties (FALSE);
+ get_all_properties ();
+}
+
+void
+on_button_null_clicked (GtkButton * button, gpointer user_data)
+{
+ Main *self = user_data;
+
+ gst_element_set_state (self->bin, GST_STATE_NULL);
+ probe_all_properties (FALSE);
+ get_all_properties ();
+}
+
+void
+on_button_playing_clicked (GtkButton * button, gpointer user_data)
+{
+ Main *self = user_data;
+
+ if (gst_element_set_state (self->bin, GST_STATE_PLAYING) ==
+ GST_STATE_CHANGE_FAILURE) {
+ g_debug ("Unable to go to state PLAYING");
+ }
+ set_caps (self, FALSE);
+ probe_all_properties (TRUE);
+ get_all_properties ();
+
+ set_drop_probability (self);
+}
+
+void
+on_iframe_button_clicked (GtkButton * button, gpointer user_data)
+{
+ Main *self = user_data;
+ GstEvent *event;
+ gboolean pps_sps;
+
+ set_drop_probability (self);
+ pps_sps = gtk_toggle_button_get_active (GET_WIDGET (self, (GtkToggleButton *),
+ "pps_sps"));
+
+ event = new_upstream_force_key_unit (GST_CLOCK_TIME_NONE, pps_sps, 0);
+ gst_element_send_event (GST_ELEMENT (self->src), event);
+}
+
+void
+on_renegotiate_button_clicked (GtkButton * button, gpointer user_data)
+{
+ Main *self = user_data;
+
+ set_caps (self, TRUE);
+ probe_all_properties (GST_STATE (self->bin) >= GST_STATE_PAUSED);
+ get_all_properties ();
+}
+
+void
+on_start_capture_button_clicked (GtkButton * button, gpointer user_data)
+{
+ Main *self = user_data;
+
+ set_caps (self, FALSE);
+ g_signal_emit_by_name (G_OBJECT (self->src), "start-capture", NULL);
+ probe_all_properties (GST_STATE (self->bin) >= GST_STATE_PAUSED);
+ get_all_properties ();
+}
+
+void
+on_stop_capture_button_clicked (GtkButton * button, gpointer user_data)
+{
+ Main *self = user_data;
+
+ set_caps (self, FALSE);
+ g_signal_emit_by_name (G_OBJECT (self->src), "stop-capture", NULL);
+ probe_all_properties (GST_STATE (self->bin) >= GST_STATE_PAUSED);
+ get_all_properties ();
+}
+
+void
+on_window_destroyed (GtkWindow * window, gpointer user_data)
+{
+ gtk_main_quit ();
+}
+
+static gboolean
+_bus_callback (GstBus * bus, GstMessage * message, gpointer user_data)
+{
+ const GstStructure *s = gst_message_get_structure (message);
+ GstObject *source = NULL;
+
+ if (GST_MESSAGE_TYPE (message) == GST_MESSAGE_ELEMENT &&
+ gst_structure_has_name (s, "prepare-xwindow-id")) {
+ source = GST_MESSAGE_SRC (message);
+ if (!g_strcmp0 (gst_object_get_name (source), "h264_sink"))
+ gst_x_overlay_set_window_handle (GST_X_OVERLAY (source), h264_xid);
+ else
+ gst_x_overlay_set_window_handle (GST_X_OVERLAY (source), preview_xid);
+ }
+
+ return TRUE;
+}
+
+static void
+set_drop_probability (Main * self)
+{
+ const gchar *drop;
+ gdouble drop_probability = 0.0;
+
+ drop = gtk_entry_get_text (GET_WIDGET (self, GTK_ENTRY, "drop"));
+ drop_probability = g_ascii_strtod (drop, NULL);
+ g_debug ("Setting drop probability to : %f", drop_probability);
+ g_object_set (self->identity, "drop-probability", drop_probability, NULL);
+}
+
+static void
+get_all_properties (void)
+{
+ int i;
+
+ for (i = 0; i < G_N_ELEMENTS (properties); i++)
+ on_get_button_clicked (NULL, &properties[i]);
+
+}
+
+static void
+probe_all_properties (gboolean playing)
+{
+ int i;
+
+ for (i = 0; i < G_N_ELEMENTS (properties); i++) {
+ gboolean return_value, changeable, default_bool;
+ guint mask, minimum, maximum, default_int;
+ GParamSpec *param;
+
+ /* When playing, ignore static controls */
+ if (playing && !properties[i].dynamic)
+ continue;
+
+ switch (properties[i].type) {
+ case INT:
+ g_signal_emit_by_name (G_OBJECT (properties[i].src), "get-int-setting",
+ properties[i].property_name, &minimum, &default_int, &maximum,
+ &return_value, NULL);
+ if (return_value) {
+ gchar *min, *def, *max;
+
+ min = g_strdup_printf ("%d", minimum);
+ def = g_strdup_printf ("%d", default_int);
+ max = g_strdup_printf ("%d", maximum);
+ gtk_entry_set_text (GET_PROP_WIDGET (GTK_ENTRY, "minimum"), min);
+ gtk_entry_set_text (GET_PROP_WIDGET (GTK_ENTRY, "default"), def);
+ gtk_entry_set_text (GET_PROP_WIDGET (GTK_ENTRY, "maximum"), max);
+ g_free (min);
+ g_free (def);
+ g_free (max);
+ } else {
+ gtk_entry_set_text (GET_PROP_WIDGET (GTK_ENTRY, "minimum"), "");
+ gtk_entry_set_text (GET_PROP_WIDGET (GTK_ENTRY, "default"), "");
+ gtk_entry_set_text (GET_PROP_WIDGET (GTK_ENTRY, "maximum"), "");
+ }
+ break;
+ case ENUM:
+ g_signal_emit_by_name (G_OBJECT (properties[i].src), "get-enum-setting",
+ properties[i].property_name, &mask, &default_int, &return_value,
+ NULL);
+ param =
+ g_object_class_find_property (G_OBJECT_GET_CLASS (properties
+ [i].src), properties[i].property_name);
+ if (G_IS_PARAM_SPEC_ENUM (param)) {
+ GEnumValue *values;
+ guint j = 0;
+
+ values = G_ENUM_CLASS (g_type_class_ref (param->value_type))->values;
+
+ if (return_value) {
+ while (values[j].value_name) {
+ if (values[j].value == default_int) {
+ gtk_entry_set_text (GET_PROP_WIDGET (GTK_ENTRY, "default"),
+ values[j].value_name);
+ break;
+ }
+ j++;
+ }
+ } else {
+ gtk_entry_set_text (GET_PROP_WIDGET (GTK_ENTRY, "default"), "");
+ }
+
+ j = 0;
+ while (values[j].value_name) {
+#if !GTK_CHECK_VERSION (2, 24, 0)
+ gtk_combo_box_remove_text (GET_PROP_WIDGET ((GtkComboBox *),
+ "value"), 0);
+#else
+ gtk_combo_box_text_remove (GET_PROP_WIDGET ((GtkComboBoxText *),
+ "value"), 0);
+#endif
+ j++;
+ }
+
+ j = 0;
+ while (values[j].value_name) {
+ gchar *val;
+ if (return_value && (mask & (1 << values[j].value)) != 0)
+ val = g_strdup_printf ("**%s**", values[j].value_name);
+ else
+ val = g_strdup (values[j].value_name);
+
+#if !GTK_CHECK_VERSION (2, 24, 0)
+ gtk_combo_box_append_text (GET_PROP_WIDGET ((GtkComboBox *),
+ "value"), val);
+#else
+ gtk_combo_box_text_append_text (GET_PROP_WIDGET ((GtkComboBoxText
+ *), "value"), val);
+#endif
+ g_free (val);
+ j++;
+ }
+ }
+ break;
+ case BOOL:
+ g_signal_emit_by_name (G_OBJECT (properties[i].src),
+ "get-boolean-setting", properties[i].property_name,
+ &changeable, &default_bool, &return_value, NULL);
+ if (return_value) {
+ gtk_widget_set_sensitive (GET_PROP_WIDGET (GTK_WIDGET, "value"),
+ changeable);
+ gtk_widget_set_sensitive (GET_PROP_WIDGET (GTK_WIDGET, "get"),
+ changeable);
+ gtk_widget_set_sensitive (GET_PROP_WIDGET (GTK_WIDGET, "set"),
+ changeable);
+ gtk_toggle_button_set_active (GET_PROP_WIDGET ((GtkToggleButton *),
+ "default"), default_bool);
+ }
+ break;
+ case NONE:
+ default:
+ break;
+ }
+ }
+}
+
+int
+main (int argc, char *argv[])
+{
+ Main self = { NULL, NULL, NULL, NULL };
+ GstBus *bus = NULL;
+ GtkWidget *window, *static_vbox, *dynamic_vbox, *da;
+ gchar *drop;
+ gdouble drop_probability;
+ GdkWindow *gdk_win = NULL;
+ const char *device = "/dev/video0";
+ GError *error = NULL;
+ int i;
+
+ gtk_init (&argc, &argv);
+ gst_init (&argc, &argv);
+
+ if (argc > 1)
+ device = argv[1];
+ else
+ g_print ("Usage : %s [device]\nUsing default device : %s\n",
+ argv[0], device);
+
+
+ self.bin = gst_parse_launch ("uvch264_src name=src src.vidsrc ! queue ! "
+ "capsfilter name=vid_cf ! identity name=identity ! ffdec_h264 ! "
+ "xvimagesink name=h264_sink async=false "
+ "src.vfsrc ! queue ! capsfilter name=vf_cf ! "
+ "xvimagesink name=preview_sink async=false", NULL);
+
+ if (!self.bin)
+ return -1;
+
+ /* Listen to the bus for messages */
+ bus = gst_element_get_bus (self.bin);
+ gst_bus_add_watch (bus, _bus_callback, self.bin);
+ gst_object_unref (bus);
+
+ self.src = gst_bin_get_by_name (GST_BIN (self.bin), "src");
+ self.identity = gst_bin_get_by_name (GST_BIN (self.bin), "identity");
+ self.vid_capsfilter = gst_bin_get_by_name (GST_BIN (self.bin), "vid_cf");
+ self.vf_capsfilter = gst_bin_get_by_name (GST_BIN (self.bin), "vf_cf");
+
+ self.builder = gtk_builder_new ();
+ gtk_builder_add_from_file (self.builder, WINDOW_GLADE, &error);
+ if (error) {
+ g_debug ("Unable to load glade file : %s", error->message);
+ goto end;
+ }
+ gtk_builder_connect_signals (self.builder, &self);
+
+ g_object_get (self.identity, "drop-probability", &drop_probability, NULL);
+ drop = g_strdup_printf ("%f", drop_probability);
+ gtk_entry_set_text (GET_WIDGET (&self, GTK_ENTRY, "drop"), drop);
+ g_free (drop);
+ window = GET_WIDGET (&self, GTK_WIDGET, "window");
+ static_vbox = GET_WIDGET (&self, GTK_WIDGET, "static");
+ dynamic_vbox = GET_WIDGET (&self, GTK_WIDGET, "dynamic");
+ da = GET_WIDGET (&self, GTK_WIDGET, "h264");
+ gtk_widget_realize (da);
+ gdk_win = gtk_widget_get_window (da);
+ h264_xid = GDK_WINDOW_XID (gdk_win);
+ da = GET_WIDGET (&self, GTK_WIDGET, "preview");
+ gtk_widget_realize (da);
+ gdk_win = gtk_widget_get_window (da);
+ preview_xid = GDK_WINDOW_XID (gdk_win);
+
+ set_caps (&self, FALSE);
+
+ g_object_set (self.src, "device", device, NULL);
+ if (gst_element_set_state (self.bin, GST_STATE_READY) ==
+ GST_STATE_CHANGE_FAILURE) {
+ g_debug ("Unable to go to state READY");
+ goto end;
+ }
+
+ for (i = 0; i < G_N_ELEMENTS (properties); i++) {
+ switch (properties[i].type) {
+ case INT:
+ properties[i].src = self.src;
+ properties[i].builder = gtk_builder_new ();
+ gtk_builder_add_from_file (properties[i].builder, INT_PROPERTY_GLADE,
+ NULL);
+ gtk_builder_connect_signals (properties[i].builder, &properties[i]);
+ gtk_box_pack_start (PROPERTY_TO_VBOX,
+ GET_PROP_WIDGET (GTK_WIDGET, "int-property"), TRUE, TRUE, 2);
+ gtk_label_set_label (GET_PROP_WIDGET (GTK_LABEL, "label"),
+ properties[i].property_name);
+ if (properties[i].readonly)
+ gtk_widget_set_sensitive (GET_PROP_WIDGET (GTK_WIDGET, "set"), FALSE);
+ break;
+ case ENUM:
+ properties[i].src = self.src;
+ properties[i].builder = gtk_builder_new ();
+#if !GTK_CHECK_VERSION (2, 24, 0)
+ gtk_builder_add_from_file (properties[i].builder,
+ "enum_property_gtk2.glade", NULL);
+#else
+ gtk_builder_add_from_file (properties[i].builder, ENUM_PROPERTY_GLADE,
+ NULL);
+#endif
+ gtk_builder_connect_signals (properties[i].builder, &properties[i]);
+ gtk_box_pack_start (PROPERTY_TO_VBOX,
+ GET_PROP_WIDGET (GTK_WIDGET, "enum-property"), TRUE, TRUE, 2);
+ gtk_label_set_label (GET_PROP_WIDGET (GTK_LABEL, "label"),
+ properties[i].property_name);
+#if !GTK_CHECK_VERSION (2, 24, 0)
+ {
+ GtkComboBox *combo_box;
+ GtkCellRenderer *cell;
+ GtkListStore *store;
+
+ combo_box = GET_PROP_WIDGET ((GtkComboBox *), "value");
+ store = gtk_list_store_new (1, G_TYPE_STRING);
+ gtk_combo_box_set_model (combo_box, GTK_TREE_MODEL (store));
+ g_object_unref (store);
+
+ cell = gtk_cell_renderer_text_new ();
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo_box), cell, TRUE);
+ gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo_box), cell,
+ "text", 0, NULL);
+ }
+#endif
+ if (properties[i].readonly)
+ gtk_widget_set_sensitive (GET_PROP_WIDGET (GTK_WIDGET, "set"), FALSE);
+ break;
+ case BOOL:
+ properties[i].src = self.src;
+ properties[i].builder = gtk_builder_new ();
+ gtk_builder_add_from_file (properties[i].builder, BOOL_PROPERTY_GLADE,
+ NULL);
+ gtk_builder_connect_signals (properties[i].builder, &properties[i]);
+ gtk_box_pack_start (PROPERTY_TO_VBOX,
+ GET_PROP_WIDGET (GTK_WIDGET, "boolean-property"), TRUE, TRUE, 2);
+ gtk_label_set_label (GET_PROP_WIDGET (GTK_LABEL, "label"),
+ properties[i].property_name);
+ if (properties[i].readonly)
+ gtk_widget_set_sensitive (GET_PROP_WIDGET (GTK_WIDGET, "set"), FALSE);
+ break;
+ case NONE:
+ default:
+ break;
+ }
+ }
+ probe_all_properties (FALSE);
+ get_all_properties ();
+
+ gtk_widget_show (window);
+ gtk_main ();
+
+end:
+ g_object_unref (G_OBJECT (self.builder));
+ for (i = 0; i < G_N_ELEMENTS (properties); i++) {
+ if (properties[i].builder)
+ g_object_unref (G_OBJECT (properties[i].builder));
+ }
+ gst_element_set_state (self.bin, GST_STATE_NULL);
+ gst_object_unref (self.src);
+ gst_object_unref (self.identity);
+ gst_object_unref (self.vid_capsfilter);
+ gst_object_unref (self.vf_capsfilter);
+ gst_object_unref (self.bin);
+
+ return 0;
+}
diff --git a/tests/examples/uvch264/window.glade b/tests/examples/uvch264/window.glade
new file mode 100644
index 00000000..8b7624a9
--- /dev/null
+++ b/tests/examples/uvch264/window.glade
@@ -0,0 +1,345 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.0 -->
+ <object class="GtkWindow" id="window">
+ <property name="can_focus">False</property>
+ <property name="title" translatable="yes">Test for uvch264_src</property>
+ <signal name="destroy" handler="on_window_destroyed" swapped="no"/>
+ <child>
+ <object class="GtkHBox" id="hbox1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkVBox" id="vbox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkHBox" id="box26">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="homogeneous">True</property>
+ <child>
+ <object class="GtkButton" id="button2">
+ <property name="label" translatable="yes">State NULL</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <signal name="clicked" handler="on_button_null_clicked" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="button51">
+ <property name="label" translatable="yes">State READY</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <signal name="clicked" handler="on_button_ready_clicked" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="button52">
+ <property name="label" translatable="yes">State PLAYING</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <signal name="clicked" handler="on_button_playing_clicked" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="button3">
+ <property name="label" translatable="yes">Start capture</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <signal name="clicked" handler="on_start_capture_button_clicked" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="button4">
+ <property name="label" translatable="yes">Stop capture</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <signal name="clicked" handler="on_stop_capture_button_clicked" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="button5">
+ <property name="label" translatable="yes">Renegotiate</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <signal name="clicked" handler="on_renegotiate_button_clicked" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">5</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Static controls</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="static">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Dynamic controls</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="dynamic">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="box1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkLabel" id="label5">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Drop probability % (between 0.0 and 1.0)</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="drop">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">●</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="pps_sps">
+ <property name="label" translatable="yes">With SPS/PPS</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="use_action_appearance">False</property>
+ <property name="xalign">0</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="button1">
+ <property name="label" translatable="yes">Request keyframe</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_action_appearance">False</property>
+ <signal name="clicked" handler="on_iframe_button_clicked" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">5</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="box2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">H264</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="h264_caps">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">●</property>
+ <property name="text" translatable="yes">video/x-h264,width=640,height=480,profile=constrained-baseline,stream-format=bytestream,framerate=15/1</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkDrawingArea" id="h264">
+ <property name="width_request">320</property>
+ <property name="height_request">240</property>
+ <property name="visible">True</property>
+ <property name="app_paintable">True</property>
+ <property name="can_focus">False</property>
+ <property name="double_buffered">False</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Preview</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="preview_caps">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">●</property>
+ <property name="text" translatable="yes">video/x-raw-yuv,width=320,height=240,format=(fourcc)YUY2,framerate=15/1</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkDrawingArea" id="preview">
+ <property name="width_request">320</property>
+ <property name="height_request">240</property>
+ <property name="visible">True</property>
+ <property name="app_paintable">True</property>
+ <property name="can_focus">False</property>
+ <property name="double_buffered">False</property>
+ <property name="halign">center</property>
+ <property name="valign">center</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">5</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+</interface>
diff --git a/tests/files/Makefile.in b/tests/files/Makefile.in
index 04207cd6..2be98d45 100644
--- a/tests/files/Makefile.in
+++ b/tests/files/Makefile.in
@@ -274,6 +274,8 @@ 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@
@@ -281,6 +283,8 @@ 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@
@@ -295,7 +299,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -323,6 +326,10 @@ 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@
@@ -449,6 +456,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/tests/icles/Makefile.in b/tests/icles/Makefile.in
index f9066c99..927cc4ea 100644
--- a/tests/icles/Makefile.in
+++ b/tests/icles/Makefile.in
@@ -313,6 +313,8 @@ 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@
@@ -320,6 +322,8 @@ 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@
@@ -334,7 +338,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -362,6 +365,10 @@ 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@
@@ -488,6 +495,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/tools/Makefile.in b/tools/Makefile.in
index 8f1ee891..78d92b51 100644
--- a/tools/Makefile.in
+++ b/tools/Makefile.in
@@ -274,6 +274,8 @@ 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@
@@ -281,6 +283,8 @@ 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@
@@ -295,7 +299,6 @@ HAVE_FLITE = @HAVE_FLITE@
HAVE_GSM = @HAVE_GSM@
HAVE_JASPER = @HAVE_JASPER@
HAVE_NAS = @HAVE_NAS@
-HAVE_VPX = @HAVE_VPX@
HAVE_WILDMIDI = @HAVE_WILDMIDI@
HAVE_X = @HAVE_X@
HAVE_X11 = @HAVE_X11@
@@ -323,6 +326,10 @@ 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@
@@ -449,6 +456,7 @@ VOAACENC_CFLAGS = @VOAACENC_CFLAGS@
VOAACENC_LIBS = @VOAACENC_LIBS@
VOAMRWBENC_CFLAGS = @VOAMRWBENC_CFLAGS@
VOAMRWBENC_LIBS = @VOAMRWBENC_LIBS@
+VPX_CFLAGS = @VPX_CFLAGS@
VPX_LIBS = @VPX_LIBS@
WARNING_CFLAGS = @WARNING_CFLAGS@
WARNING_CXXFLAGS = @WARNING_CXXFLAGS@
diff --git a/win32/common/config.h b/win32/common/config.h
index 08cbdf48..78932dbe 100644
--- a/win32/common/config.h
+++ b/win32/common/config.h
@@ -199,7 +199,7 @@
#undef USE_POISONING
/* Version number of package */
-#define VERSION "0.11.93"
+#define VERSION "0.11.94"
/* Define to 1 if your processor stores words with the most significant byte
first (like Motorola and SPARC, unlike Intel and VAX). */